From f24c4a6625fcb7c9a481c0bb166cbac4a604248c Mon Sep 17 00:00:00 2001 From: Anton Gladky Date: Sat, 31 Dec 2016 08:54:59 +0000 Subject: [PATCH] Import solvespace_2.3+repack1.orig.tar.xz [dgit import orig solvespace_2.3+repack1.orig.tar.xz] --- .travis.yml | 22 + CHANGELOG.md | 127 + CMakeLists.txt | 195 + COPYING.txt | 675 + README.md | 150 + appveyor.yml | 28 + cmake/FindSpaceWare.cmake | 28 + cmake/GetGitCommitHash.cmake | 35 + cmake/MacOSXBundleInfo.plist.in | 47 + cmake/Toolchain-mingw32.cmake | 13 + cmake/Toolchain-mingw64.cmake | 13 + cmake/c_flag_overrides.cmake | 6 + cmake/cxx_flag_overrides.cmake | 6 + exposed/CDemo.c | 274 + exposed/CMakeLists.txt | 8 + exposed/DOC.txt | 467 + exposed/VbDemo.vb | 1252 + extlib/libdxfrw/CMakeLists.txt | 75 + extlib/libdxfrw/drw_base.h | 480 + extlib/libdxfrw/drw_classes.cpp | 115 + extlib/libdxfrw/drw_classes.h | 58 + extlib/libdxfrw/drw_entities.cpp | 3064 +++ extlib/libdxfrw/drw_entities.h | 1572 ++ extlib/libdxfrw/drw_header.cpp | 2476 ++ extlib/libdxfrw/drw_header.h | 107 + extlib/libdxfrw/drw_interface.h | 191 + extlib/libdxfrw/drw_objects.cpp | 1235 + extlib/libdxfrw/drw_objects.h | 772 + extlib/libdxfrw/intern/drw_cptable932.h | 7812 ++++++ extlib/libdxfrw/intern/drw_cptable936.h | 21943 ++++++++++++++++ extlib/libdxfrw/intern/drw_cptable949.h | 17199 ++++++++++++ extlib/libdxfrw/intern/drw_cptable950.h | 13654 ++++++++++ extlib/libdxfrw/intern/drw_cptables.h | 1330 + extlib/libdxfrw/intern/drw_dbg.cpp | 164 + extlib/libdxfrw/intern/drw_dbg.h | 61 + extlib/libdxfrw/intern/drw_textcodec.cpp | 535 + extlib/libdxfrw/intern/drw_textcodec.h | 91 + extlib/libdxfrw/intern/dwgbuffer.cpp | 923 + extlib/libdxfrw/intern/dwgbuffer.h | 155 + extlib/libdxfrw/intern/dwgreader.cpp | 1294 + extlib/libdxfrw/intern/dwgreader.h | 203 + extlib/libdxfrw/intern/dwgreader15.cpp | 198 + extlib/libdxfrw/intern/dwgreader15.h | 47 + extlib/libdxfrw/intern/dwgreader18.cpp | 594 + extlib/libdxfrw/intern/dwgreader18.h | 99 + extlib/libdxfrw/intern/dwgreader21.cpp | 487 + extlib/libdxfrw/intern/dwgreader21.h | 65 + extlib/libdxfrw/intern/dwgreader24.cpp | 43 + extlib/libdxfrw/intern/dwgreader24.h | 56 + extlib/libdxfrw/intern/dwgreader27.cpp | 43 + extlib/libdxfrw/intern/dwgreader27.h | 55 + extlib/libdxfrw/intern/dwgutil.cpp | 694 + extlib/libdxfrw/intern/dwgutil.h | 91 + extlib/libdxfrw/intern/dxfreader.cpp | 263 + extlib/libdxfrw/intern/dxfreader.h | 99 + extlib/libdxfrw/intern/dxfwriter.cpp | 269 + extlib/libdxfrw/intern/dxfwriter.h | 64 + extlib/libdxfrw/intern/rscodec.cpp | 401 + extlib/libdxfrw/intern/rscodec.h | 69 + extlib/libdxfrw/libdwgr.cpp | 237 + extlib/libdxfrw/libdwgr.h | 50 + extlib/libdxfrw/libdxfrw.cpp | 2765 ++ extlib/libdxfrw/libdxfrw.h | 148 + include/slvs.h | 404 + src/CMakeLists.txt | 406 + src/bsp.cpp | 682 + src/clipboard.cpp | 444 + src/cocoa/AppIcon.iconset/icon_128x128.png | Bin 0 -> 891 bytes src/cocoa/AppIcon.iconset/icon_128x128@2x.png | Bin 0 -> 1303 bytes src/cocoa/AppIcon.iconset/icon_16x16.png | Bin 0 -> 586 bytes src/cocoa/AppIcon.iconset/icon_16x16@2x.png | Bin 0 -> 626 bytes src/cocoa/AppIcon.iconset/icon_256x256.png | Bin 0 -> 1303 bytes src/cocoa/AppIcon.iconset/icon_256x256@2x.png | Bin 0 -> 2506 bytes src/cocoa/AppIcon.iconset/icon_32x32.png | Bin 0 -> 626 bytes src/cocoa/AppIcon.iconset/icon_32x32@2x.png | Bin 0 -> 746 bytes src/cocoa/AppIcon.iconset/icon_512x512.png | Bin 0 -> 2506 bytes src/cocoa/AppIcon.iconset/icon_512x512@2x.png | Bin 0 -> 6490 bytes src/cocoa/MainMenu.xib | 65 + src/cocoa/SaveFormatAccessory.xib | 50 + src/cocoa/cocoamain.mm | 1351 + src/config.h.in | 13 + src/confscreen.cpp | 463 + src/constraint.cpp | 745 + src/constrainteq.cpp | 794 + src/describescreen.cpp | 377 + src/draw.cpp | 872 + src/drawconstraint.cpp | 1250 + src/drawentity.cpp | 724 + src/dsc.h | 528 + src/entity.cpp | 793 + src/export.cpp | 1550 ++ src/exportstep.cpp | 373 + src/exportvector.cpp | 1369 + src/expr.cpp | 808 + src/expr.h | 169 + src/file.cpp | 869 + src/fonts/private/0-check-false.png | Bin 0 -> 218 bytes src/fonts/private/1-check-true.png | Bin 0 -> 243 bytes src/fonts/private/2-radio-false.png | Bin 0 -> 228 bytes src/fonts/private/3-radio-true.png | Bin 0 -> 231 bytes src/fonts/private/4-stipple-dot.png | Bin 0 -> 936 bytes src/fonts/private/5-stipple-dash-long.png | Bin 0 -> 932 bytes src/fonts/private/6-stipple-dash.png | Bin 0 -> 932 bytes src/fonts/private/7-stipple-zigzag.png | Bin 0 -> 950 bytes src/fonts/unicode.lff.gz | Bin 0 -> 475974 bytes src/generate.cpp | 552 + src/glhelper.cpp | 921 + src/graphicswin.cpp | 1089 + src/group.cpp | 906 + src/groupmesh.cpp | 617 + src/gtk/gtkmain.cpp | 1611 ++ src/icons/angle.png | Bin 0 -> 27359 bytes src/icons/arc.png | Bin 0 -> 27478 bytes src/icons/assemble.png | Bin 0 -> 27011 bytes src/icons/bezier.png | Bin 0 -> 27089 bytes src/icons/circle.png | Bin 0 -> 27376 bytes src/icons/constraint.png | Bin 0 -> 26545 bytes src/icons/construction.png | Bin 0 -> 27069 bytes src/icons/edges.png | Bin 0 -> 27374 bytes src/icons/equal.png | Bin 0 -> 27427 bytes src/icons/extrude.png | Bin 0 -> 27030 bytes src/icons/faces.png | Bin 0 -> 609 bytes src/icons/hidden-lines.png | Bin 0 -> 544 bytes src/icons/horiz.png | Bin 0 -> 26274 bytes src/icons/in3d.png | Bin 0 -> 26608 bytes src/icons/lathe.png | Bin 0 -> 171 bytes src/icons/length.png | Bin 0 -> 26577 bytes src/icons/line.png | Bin 0 -> 26295 bytes src/icons/mesh.png | Bin 0 -> 28445 bytes src/icons/normal.png | Bin 0 -> 26211 bytes src/icons/ontoworkplane.png | Bin 0 -> 26007 bytes src/icons/other-supp.png | Bin 0 -> 27260 bytes src/icons/outlines.png | Bin 0 -> 930 bytes src/icons/parallel.png | Bin 0 -> 26455 bytes src/icons/perpendicular.png | Bin 0 -> 26400 bytes src/icons/point.png | Bin 0 -> 25742 bytes src/icons/pointonx.png | Bin 0 -> 26848 bytes src/icons/rectangle.png | Bin 0 -> 26335 bytes src/icons/ref.png | Bin 0 -> 25761 bytes src/icons/same-orientation.png | Bin 0 -> 26407 bytes src/icons/shaded.png | Bin 0 -> 317 bytes src/icons/sketch-in-3d.png | Bin 0 -> 26669 bytes src/icons/sketch-in-plane.png | Bin 0 -> 26671 bytes src/icons/step-rotate.png | Bin 0 -> 27352 bytes src/icons/step-translate.png | Bin 0 -> 26253 bytes src/icons/symmetric.png | Bin 0 -> 26180 bytes src/icons/tangent-arc.png | Bin 0 -> 27250 bytes src/icons/text.png | Bin 0 -> 26716 bytes src/icons/trim.png | Bin 0 -> 26748 bytes src/icons/vert.png | Bin 0 -> 26517 bytes src/icons/workplane.png | Bin 0 -> 395 bytes src/importdxf.cpp | 948 + src/lib.cpp | 263 + src/mesh.cpp | 1074 + src/modify.cpp | 670 + src/mouse.cpp | 1513 ++ src/polygon.cpp | 865 + src/polygon.h | 337 + src/request.cpp | 205 + src/sketch.h | 916 + src/solvespace.cpp | 888 + src/solvespace.h | 971 + src/srf/boolean.cpp | 956 + src/srf/curve.cpp | 848 + src/srf/merge.cpp | 127 + src/srf/ratpoly.cpp | 615 + src/srf/raycast.cpp | 611 + src/srf/surface.cpp | 881 + src/srf/surface.h | 423 + src/srf/surfinter.cpp | 525 + src/srf/triangulate.cpp | 505 + src/style.cpp | 956 + src/system.cpp | 538 + src/textscreens.cpp | 806 + src/textwin.cpp | 1050 + src/toolbar.cpp | 248 + src/ttf.cpp | 330 + src/ttf.h | 41 + src/ui.h | 748 + src/undoredo.cpp | 170 + src/unix/gloffscreen.cpp | 86 + src/unix/gloffscreen.h | 36 + src/unix/solvespace-16x16.png | Bin 0 -> 336 bytes src/unix/solvespace-16x16.xpm | 27 + src/unix/solvespace-24x24.png | Bin 0 -> 338 bytes src/unix/solvespace-24x24.xpm | 35 + src/unix/solvespace-32x32.png | Bin 0 -> 348 bytes src/unix/solvespace-32x32.xpm | 43 + src/unix/solvespace-48x48.png | Bin 0 -> 352 bytes src/unix/solvespace-48x48.xpm | 59 + src/unix/solvespace.desktop | 9 + src/unix/unixutil.cpp | 112 + src/util.cpp | 1080 + src/view.cpp | 116 + src/win32/icon.ico | Bin 0 -> 29926 bytes src/win32/manifest.xml | 22 + src/win32/resource.rc | 6 + src/win32/w32main.cpp | 1479 ++ src/win32/w32util.cpp | 138 + tools/CMakeLists.txt | 23 + tools/lff2c.cpp | 410 + tools/png2c.cpp | 122 + tools/unifont2c.cpp | 261 + wishlist.txt | 19 + 204 files changed, 129598 insertions(+) create mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 CMakeLists.txt create mode 100644 COPYING.txt create mode 100644 README.md create mode 100644 appveyor.yml create mode 100644 cmake/FindSpaceWare.cmake create mode 100644 cmake/GetGitCommitHash.cmake create mode 100644 cmake/MacOSXBundleInfo.plist.in create mode 100644 cmake/Toolchain-mingw32.cmake create mode 100644 cmake/Toolchain-mingw64.cmake create mode 100644 cmake/c_flag_overrides.cmake create mode 100644 cmake/cxx_flag_overrides.cmake create mode 100644 exposed/CDemo.c create mode 100644 exposed/CMakeLists.txt create mode 100644 exposed/DOC.txt create mode 100644 exposed/VbDemo.vb create mode 100644 extlib/libdxfrw/CMakeLists.txt create mode 100644 extlib/libdxfrw/drw_base.h create mode 100644 extlib/libdxfrw/drw_classes.cpp create mode 100644 extlib/libdxfrw/drw_classes.h create mode 100644 extlib/libdxfrw/drw_entities.cpp create mode 100644 extlib/libdxfrw/drw_entities.h create mode 100644 extlib/libdxfrw/drw_header.cpp create mode 100644 extlib/libdxfrw/drw_header.h create mode 100644 extlib/libdxfrw/drw_interface.h create mode 100644 extlib/libdxfrw/drw_objects.cpp create mode 100644 extlib/libdxfrw/drw_objects.h create mode 100644 extlib/libdxfrw/intern/drw_cptable932.h create mode 100644 extlib/libdxfrw/intern/drw_cptable936.h create mode 100644 extlib/libdxfrw/intern/drw_cptable949.h create mode 100644 extlib/libdxfrw/intern/drw_cptable950.h create mode 100644 extlib/libdxfrw/intern/drw_cptables.h create mode 100644 extlib/libdxfrw/intern/drw_dbg.cpp create mode 100644 extlib/libdxfrw/intern/drw_dbg.h create mode 100644 extlib/libdxfrw/intern/drw_textcodec.cpp create mode 100644 extlib/libdxfrw/intern/drw_textcodec.h create mode 100644 extlib/libdxfrw/intern/dwgbuffer.cpp create mode 100644 extlib/libdxfrw/intern/dwgbuffer.h create mode 100644 extlib/libdxfrw/intern/dwgreader.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader.h create mode 100644 extlib/libdxfrw/intern/dwgreader15.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader15.h create mode 100644 extlib/libdxfrw/intern/dwgreader18.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader18.h create mode 100644 extlib/libdxfrw/intern/dwgreader21.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader21.h create mode 100644 extlib/libdxfrw/intern/dwgreader24.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader24.h create mode 100644 extlib/libdxfrw/intern/dwgreader27.cpp create mode 100644 extlib/libdxfrw/intern/dwgreader27.h create mode 100644 extlib/libdxfrw/intern/dwgutil.cpp create mode 100644 extlib/libdxfrw/intern/dwgutil.h create mode 100644 extlib/libdxfrw/intern/dxfreader.cpp create mode 100644 extlib/libdxfrw/intern/dxfreader.h create mode 100644 extlib/libdxfrw/intern/dxfwriter.cpp create mode 100644 extlib/libdxfrw/intern/dxfwriter.h create mode 100644 extlib/libdxfrw/intern/rscodec.cpp create mode 100644 extlib/libdxfrw/intern/rscodec.h create mode 100644 extlib/libdxfrw/libdwgr.cpp create mode 100644 extlib/libdxfrw/libdwgr.h create mode 100644 extlib/libdxfrw/libdxfrw.cpp create mode 100644 extlib/libdxfrw/libdxfrw.h create mode 100644 include/slvs.h create mode 100644 src/CMakeLists.txt create mode 100644 src/bsp.cpp create mode 100644 src/clipboard.cpp create mode 100644 src/cocoa/AppIcon.iconset/icon_128x128.png create mode 100644 src/cocoa/AppIcon.iconset/icon_128x128@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_16x16.png create mode 100644 src/cocoa/AppIcon.iconset/icon_16x16@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_256x256.png create mode 100644 src/cocoa/AppIcon.iconset/icon_256x256@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_32x32.png create mode 100644 src/cocoa/AppIcon.iconset/icon_32x32@2x.png create mode 100644 src/cocoa/AppIcon.iconset/icon_512x512.png create mode 100644 src/cocoa/AppIcon.iconset/icon_512x512@2x.png create mode 100644 src/cocoa/MainMenu.xib create mode 100644 src/cocoa/SaveFormatAccessory.xib create mode 100644 src/cocoa/cocoamain.mm create mode 100644 src/config.h.in create mode 100644 src/confscreen.cpp create mode 100644 src/constraint.cpp create mode 100644 src/constrainteq.cpp create mode 100644 src/describescreen.cpp create mode 100644 src/draw.cpp create mode 100644 src/drawconstraint.cpp create mode 100644 src/drawentity.cpp create mode 100644 src/dsc.h create mode 100644 src/entity.cpp create mode 100644 src/export.cpp create mode 100644 src/exportstep.cpp create mode 100644 src/exportvector.cpp create mode 100644 src/expr.cpp create mode 100644 src/expr.h create mode 100644 src/file.cpp create mode 100644 src/fonts/private/0-check-false.png create mode 100644 src/fonts/private/1-check-true.png create mode 100644 src/fonts/private/2-radio-false.png create mode 100644 src/fonts/private/3-radio-true.png create mode 100644 src/fonts/private/4-stipple-dot.png create mode 100644 src/fonts/private/5-stipple-dash-long.png create mode 100644 src/fonts/private/6-stipple-dash.png create mode 100644 src/fonts/private/7-stipple-zigzag.png create mode 100644 src/fonts/unicode.lff.gz create mode 100644 src/generate.cpp create mode 100644 src/glhelper.cpp create mode 100644 src/graphicswin.cpp create mode 100644 src/group.cpp create mode 100644 src/groupmesh.cpp create mode 100644 src/gtk/gtkmain.cpp create mode 100644 src/icons/angle.png create mode 100644 src/icons/arc.png create mode 100644 src/icons/assemble.png create mode 100644 src/icons/bezier.png create mode 100644 src/icons/circle.png create mode 100644 src/icons/constraint.png create mode 100644 src/icons/construction.png create mode 100644 src/icons/edges.png create mode 100644 src/icons/equal.png create mode 100644 src/icons/extrude.png create mode 100644 src/icons/faces.png create mode 100644 src/icons/hidden-lines.png create mode 100644 src/icons/horiz.png create mode 100644 src/icons/in3d.png create mode 100644 src/icons/lathe.png create mode 100644 src/icons/length.png create mode 100644 src/icons/line.png create mode 100644 src/icons/mesh.png create mode 100644 src/icons/normal.png create mode 100644 src/icons/ontoworkplane.png create mode 100644 src/icons/other-supp.png create mode 100644 src/icons/outlines.png create mode 100644 src/icons/parallel.png create mode 100644 src/icons/perpendicular.png create mode 100644 src/icons/point.png create mode 100644 src/icons/pointonx.png create mode 100644 src/icons/rectangle.png create mode 100644 src/icons/ref.png create mode 100644 src/icons/same-orientation.png create mode 100644 src/icons/shaded.png create mode 100644 src/icons/sketch-in-3d.png create mode 100644 src/icons/sketch-in-plane.png create mode 100644 src/icons/step-rotate.png create mode 100644 src/icons/step-translate.png create mode 100644 src/icons/symmetric.png create mode 100644 src/icons/tangent-arc.png create mode 100644 src/icons/text.png create mode 100644 src/icons/trim.png create mode 100644 src/icons/vert.png create mode 100644 src/icons/workplane.png create mode 100644 src/importdxf.cpp create mode 100644 src/lib.cpp create mode 100644 src/mesh.cpp create mode 100644 src/modify.cpp create mode 100644 src/mouse.cpp create mode 100644 src/polygon.cpp create mode 100644 src/polygon.h create mode 100644 src/request.cpp create mode 100644 src/sketch.h create mode 100644 src/solvespace.cpp create mode 100644 src/solvespace.h create mode 100644 src/srf/boolean.cpp create mode 100644 src/srf/curve.cpp create mode 100644 src/srf/merge.cpp create mode 100644 src/srf/ratpoly.cpp create mode 100644 src/srf/raycast.cpp create mode 100644 src/srf/surface.cpp create mode 100644 src/srf/surface.h create mode 100644 src/srf/surfinter.cpp create mode 100644 src/srf/triangulate.cpp create mode 100644 src/style.cpp create mode 100644 src/system.cpp create mode 100644 src/textscreens.cpp create mode 100644 src/textwin.cpp create mode 100644 src/toolbar.cpp create mode 100644 src/ttf.cpp create mode 100644 src/ttf.h create mode 100644 src/ui.h create mode 100644 src/undoredo.cpp create mode 100644 src/unix/gloffscreen.cpp create mode 100644 src/unix/gloffscreen.h create mode 100644 src/unix/solvespace-16x16.png create mode 100644 src/unix/solvespace-16x16.xpm create mode 100644 src/unix/solvespace-24x24.png create mode 100644 src/unix/solvespace-24x24.xpm create mode 100644 src/unix/solvespace-32x32.png create mode 100644 src/unix/solvespace-32x32.xpm create mode 100644 src/unix/solvespace-48x48.png create mode 100644 src/unix/solvespace-48x48.xpm create mode 100644 src/unix/solvespace.desktop create mode 100644 src/unix/unixutil.cpp create mode 100644 src/util.cpp create mode 100644 src/view.cpp create mode 100644 src/win32/icon.ico create mode 100644 src/win32/manifest.xml create mode 100644 src/win32/resource.rc create mode 100644 src/win32/w32main.cpp create mode 100644 src/win32/w32util.cpp create mode 100644 tools/CMakeLists.txt create mode 100644 tools/lff2c.cpp create mode 100644 tools/png2c.cpp create mode 100644 tools/unifont2c.cpp create mode 100644 wishlist.txt diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..b51c80c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,22 @@ +language: c +os: + - linux + - osx +sudo: required +dist: trusty +install: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./.travis/install-debian.sh; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./.travis/install-macos.sh; fi +script: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./.travis/build-debian.sh; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./.travis/build-macos.sh; fi +deploy: + - provider: releases + api_key: + secure: dDlkIawHcODlW9B/20/cQCtzeoocvs0hKuNngRKXKqzXLWTRq33oq/B7+39tAixWbmv6exTpijiKrRNFiSCW5Z4iwHLwaRD4XJznxw63e/Hus/dxg2Tvqx7XFpkCz8mT1Z+gZQE5YxAngeZPpI/sZbZtF1UO3yH5eLeeokZ15p26ZskQUPoYuzrTgTzYL3XfpG3F+20rNBawH1ycsCTVD/08/n31d2m3CrKAsbW7er92ek6w4fzKr7NW8WeXjrPJETVpw5fQg1Od3pRGW8dPQaJcvKQEogMp8Mm0ETYd0qigg89/giBz7QwOgmAWQ4dH+DfZH4Ojl//127QztBolMvyDMQBykWrtJoGcij05sT6K2IJr2FHeUBO12MAEdjiVvhQj3DtTzjPiZAHHDBSLWxLKWWhlhHE4pq7g1MQhqXkaAHI2BLNzwLmaowbMT0bECf9yfz6xx18h6XPQFX44oOktraobVALFlyHqeKa8zdcUt22LF6uAL1m5dxL0tny3eXCIPE4UH/RZgua/cHV9G3cUvKQa/QnFSLRhvWVSbGB+7YsHouBJcsUOOW1gmd5442XuC7mpppccRldh+GSxUk6TBJRAx7TeQ0ybDUaoco9MUqp2twv3KreR2+8Q12PDaAhfQVNEGdF3wTm1sShImjCN4VN3eSLlBEbve1QRQXM= + skip_cleanup: true + file: build/solvespace.dmg + on: + repo: solvespace/solvespace + tags: true + condition: "$TRAVIS_OS_NAME == osx" diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..095eee6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,127 @@ +Changelog +========= + +2.3 +--- + +Bug fixes: + * Do not crash when applying a symmetry constraint to two points. + * Fix TTF font metrics again (properly this time). + * Fix the "draw back faces in red" option. + * Fix export of wireframe as 3D DXF. + * Various minor crashes. + +2.2 +--- + +Other new features: + * OS X: support 3Dconnexion devices (SpaceMouse, SpaceNavigator, etc). + * GTK: files with uppercase extensions can be opened. + +Bug fixes: + * Do not remove autosaves after successfully opening a file, preventing + data loss in case of two abnormal terminations in a row. + * Do not crash when changing autosave interval. + * Unbreak the "Show degrees of freedom" command. + * Three.js: correctly respond to controls when browser zoom is used. + * OS X: do not completely hide main window when defocused. + * GTK: unbreak 3Dconnexion support. + * When pasting transformed entities, multiply constraint values by scale. + * Fix TTF font metrics (restore the behavior from version 2.0). + * Forcibly show the current group once we start a drawing operation. + * DXF export: always declare layers before using them. + * Do not truncate operations on selections to first 32 selected entities. + * Translate and rotate groups inherit the "suppress solid model" setting. + * DXF: files with paths containing non-ASCII or spaces can be exported + or imported. + * Significantly improved performance when dragging an entity. + * Various crashes and minor glitches. + +2.1 +--- + +New sketch features: + * Lathe groups create circle and face entities. + * New toolbar button for creating lathe groups. + * Chord tolerance is separated into two: display chord tolerance (specified + in percents, relative to model bounding box), and export chord tolerance + (specified in millimeters as absolute value). + * Bezier spline points can be added and removed after the spline is created. + * When an unconstrained extrusion is switched between "union" and + "difference", its normal is flipped. + * Groups can be added in the middle of the stack. Note that this results + in files incompatible with version 2.0. + * Active group can be removed. + * Removing an imported group does not cause all subsequent groups to also + be removed. + * When a new group with a solid is created, the color is taken from + a previous group with a solid, if any. + * Entities in a newly active group do not become visible. + * When entities are selected, "Zoom to fit" zooms to fit only these + entities and not the entire sketch. + * Zero-length edges are reported with a "zero-length error", not + "points not all coplanar". + +New constraint features: + * Height of the font used for drawing constraint labels can be changed. + * New constraint, length difference, placed with J. + (Patch by Peter Ruevski) + * Horizontal/vertical constraints are automatically added if a line segment + is close enough to being horizontal/vertical. This can be disabled by + holding Ctrl. + * Reference dimensions and angles can be placed with Shift+D and Shift+N. + * Copying and pasting entities duplicates any constraints that only involve + entities in the clipboard, as well as selected comments. + * Diameter constraints can be shown as radius. + * The "pi" identifier can be used in expressions. + * Constraint labels can be snapped to grid. + * Integer angles are displayed without trailing zeroes. + * Angle constraints have proper reference lines and arrowheads. + * Extension lines are drawn for point-line distance constraints. + +New solver features: + * Sketches with redundant and unsolvable constraints are distinguished. + * New group setting, "allow redundant constraints". Note that it makes + the solver less stable. + +New rendering and styling features: + * New line style parameter: stippling, based on ISO 128. + * Outlines of solids can be drawn in a particular style (by default, thick + lines) controlled by the "Show outline of solid model" button. + * Occluded edges can be drawn in a particular style (by default, stippled + with short dashes) controlled by the "Show hidden lines" button. + * Solids can be made transparent. + +New export/import features: + * The old "import" command (for .slvs files) is renamed to "link". + * If a linked .slvs file is not found, first the relative path recorded + in the .slvs file is checked and then the absolute path; this is + an inversion of the previously used order. If it is still not found, + a dialog appears offering to locate it. + * DXF and DWG files can be imported, with point-coincident, horizontal and + vertical constraints automatically inferred from geometry, and distance + and angle constraints created when a dimension placed against geometry + exists. + * Triangle mesh can be exported for viewing in the browser through WebGL. + * Export dialogs remember the last file format used, and preselect it. + * Exported DXF files have exact circles, arcs and splines instead of + a piecewise linear approximation (unless hidden line removal was needed). + * Exported DXF files preserve color and line thickness. + * In exported DXF files, constraints are represented as DXF dimensions, + instead of piecewise linear geometry. + * When exporting 2d views, overlapping lines are removed. + +Other new features: + * Native Linux (GTK 2 and GTK 3) and Mac OS X ports. + * Automatically save and then restore sketches if SolveSpace crashes. + (Patch by Marc Britten) + * Unicode is supported everywhere (filenames, group names, TTF text, + comments), although RTL scripts and scripts making heavy use of ligatures + are not rendered correctly. + * The vector font is grid-fitted when rendered on screen to make it easier + to read regardless of its size. + +2.0 +--- + +Initial public release. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..ea464e5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,195 @@ +# cmake configuration + +cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +cmake_policy(VERSION 3.1.0) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_SOURCE_DIR}/cmake/") +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED YES) + +include(CheckIncludeFile) + +# for /MT on MSVC +set(CMAKE_USER_MAKE_RULES_OVERRIDE + "${CMAKE_SOURCE_DIR}/cmake/c_flag_overrides.cmake") +set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX + "${CMAKE_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake") + +# project + +# NOTE TO PACKAGERS: The embedded git commit hash is critical for rapid bug triage when the builds +# can come from a variety of sources. If you are mirroring the sources or otherwise build when +# the .git directory is not present, please comment the following line: +include(GetGitCommitHash) +# and instead uncomment the following, adding the complete git hash of the checkout you are using: +# set(GIT_COMMIT_HASH 0000000000000000000000000000000000000000) + +project(solvespace) +set(solvespace_VERSION_MAJOR 2) +set(solvespace_VERSION_MINOR 3) +string(SUBSTRING "${GIT_COMMIT_HASH}" 0 8 solvespace_GIT_HASH) + +if(NOT WIN32 AND NOT APPLE) + set(GUI gtk2 CACHE STRING "GUI toolkit to use (one of: gtk2 gtk3)") +endif() + +# compiler + +if(WIN32) + add_definitions( + -D_CRT_SECURE_NO_DEPRECATE + -D_CRT_SECURE_NO_WARNINGS + -D_SCL_SECURE_NO_WARNINGS + -D_WIN32_WINNT=0x500 + -D_WIN32_IE=_WIN32_WINNT + -DISOLATION_AWARE_ENABLED + -DWIN32 + -DWIN32_LEAN_AND_MEAN + -DUNICODE + -DNOMINMAX + -D_UNICODE) +endif() + +if(MSVC) + # Many versions of MSVC do not have the (C99) inline keyword, instead + # they have their own __inline; this breaks `static inline` functions. + # We do not want to care and so we fix this with a definition. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Dinline=__inline") +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${WARNING_FLAGS}") +endif() + +if(MINGW) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") +endif() + +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}") +endif() + +if(SANITIZE) + if(NOT (CMAKE_C_COMPILER_ID STREQUAL Clang AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)) + message(ERROR "Sanitizers are only available in Clang/Clang++") + endif() + set(SANITIZE_FLAGS "-O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls") + set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=address,undefined,integer") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}") +endif() + +# dependencies + +find_package(OpenGL REQUIRED) + +message(STATUS "Using in-tree libdxfrw") +add_subdirectory(extlib/libdxfrw) + +if(WIN32) + # Configure Freetype first. If done later, it will notice that + # zlib is available, try to use it and promptly break on MSVC + # in a very obscure way. Given that the only use of zlib, bzip2 + # and png support is in support for extremely obsolete Unix fonts, + # we don't care. + find_package(Freetype) + + if(NOT FREETYPE_FOUND) + message(STATUS "Using in-tree libfreetype") + + add_subdirectory(extlib/libfreetype EXCLUDE_FROM_ALL) + + set(FREETYPE_LIBRARY + freetype) + set(FREETYPE_INCLUDE_DIRS + "${CMAKE_SOURCE_DIR}/extlib/libfreetype/include") + find_package(Freetype REQUIRED) + endif() + + find_package(ZLIB) + + if(NOT ZLIB_FOUND) + message(STATUS "Using in-tree zlib") + add_subdirectory(extlib/zlib EXCLUDE_FROM_ALL) + + message(STATUS "Using in-tree libpng") + set(ZLIB_LIBRARY + zlibstatic) + set(ZLIB_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/zlib" + "${CMAKE_BINARY_DIR}/extlib/zlib") + find_package(ZLIB REQUIRED) + endif() + + find_package(PNG) + + if(NOT PNG_FOUND) + message(STATUS "Using in-tree libpng") + + set(SKIP_INSTALL_ALL + ON) + add_subdirectory(extlib/libpng EXCLUDE_FROM_ALL) + + set(PNG_LIBRARY + png16_static) + set(PNG_PNG_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/libpng" + "${CMAKE_BINARY_DIR}/extlib/libpng") + find_package(PNG REQUIRED) + endif() + + if(NOT MINGW) + message(STATUS "Using prebuilt SpaceWare") + set(SPACEWARE_FOUND TRUE) + set(SPACEWARE_INCLUDE_DIR + "${CMAKE_SOURCE_DIR}/extlib/si") + set(SPACEWARE_LIBRARIES + "${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib") + endif() +elseif(APPLE) + set(CMAKE_FIND_FRAMEWORK LAST) + + find_package(PNG REQUIRED) + find_package(Freetype REQUIRED) + find_library(APPKIT_LIBRARY AppKit REQUIRED) +else() # Linux and compatible systems + find_package(SpaceWare) + + # Use freedesktop's pkg-config to locate everything. + find_package(PkgConfig REQUIRED) + pkg_check_modules(ZLIB REQUIRED zlib) + pkg_check_modules(PNG REQUIRED libpng) + pkg_check_modules(FONTCONFIG REQUIRED fontconfig) + pkg_check_modules(JSONC REQUIRED json-c) + pkg_check_modules(GLEW REQUIRED glew) + pkg_check_modules(FREETYPE REQUIRED freetype2) + + set(HAVE_GTK TRUE) + if(GUI STREQUAL "gtk3") + set(HAVE_GTK3 TRUE) + pkg_check_modules(GTKMM REQUIRED gtkmm-3.0 pangomm-1.4 x11) + elseif(GUI STREQUAL "gtk2") + set(HAVE_GTK2 TRUE) + pkg_check_modules(GTKMM REQUIRED gtkmm-2.4 pangomm-1.4 x11) + else() + message(FATAL_ERROR "GUI unrecognized: ${GUI}") + endif() +endif() + +# components + +add_subdirectory(tools) +add_subdirectory(src) +add_subdirectory(exposed) diff --git a/COPYING.txt b/COPYING.txt new file mode 100644 index 0000000..a737dcf --- /dev/null +++ b/COPYING.txt @@ -0,0 +1,675 @@ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..838b92f --- /dev/null +++ b/README.md @@ -0,0 +1,150 @@ +SolveSpace +========== + +This repository contains the source code of [SolveSpace][], a parametric +2d/3d CAD. + +[solvespace]: http://solvespace.com + +Installation +------------ + +### Mac OS X (>=10.6 64-bit), Debian (>=jessie) and Ubuntu (>=trusty) + +Binary packages for Mac OS X and Debian derivatives are available +via [GitHub releases][rel]. + +[rel]: https://github.com/solvespace/solvespace/releases + +### Other systems + +See below. + +Building on Linux +----------------- + +### Building for Linux + +You will need CMake, libpng, zlib, json-c, fontconfig, freetype, gtkmm 2.4, +pangomm 1.4, OpenGL, OpenGL GLU and OpenGL GLEW, and optionally, the Space Navigator +client library. +On a Debian derivative (e.g. Ubuntu) these can be installed with: + + apt-get install libpng12-dev libjson-c-dev libfreetype6-dev \ + libfontconfig1-dev libgtkmm-2.4-dev libpangomm-1.4-dev \ + libgl-dev libglu-dev libglew-dev libspnav-dev cmake + +Before building, check out the necessary submodules: + + git submodule update --init extlib/libdxfrw + +After that, build SolveSpace as following: + + mkdir build + cd build + cmake .. + make + sudo make install + +A fully functional port to GTK3 is available, but not recommended +for use due to bugs in this toolkit. + +### Building for Windows + +You will need CMake, a Windows cross-compiler, and Wine with binfmt support. +On a Debian derivative (e.g. Ubuntu) these can be installed with: + + apt-get install cmake mingw-w64 wine-binfmt + +Before building, check out the necessary submodules: + + git submodule update --init + +After that, build 32-bit SolveSpace as following: + + mkdir build + cd build + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake .. + make solvespace + +Or, build 64-bit SolveSpace as following: + + mkdir build + cd build + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake .. + make solvespace + +The application is built as `build/src/solvespace.exe`. + +Space Navigator support will not be available. + +Building on Mac OS X +-------------------- + +You will need XCode tools, CMake, libpng and Freetype. Assuming you use +[homebrew][], these can be installed with: + + brew install cmake libpng freetype + +XCode has to be installed via AppStore; it requires a free Apple ID. + +Before building, check out the necessary submodules: + + git submodule update --init extlib/libdxfrw + +After that, build SolveSpace as following: + + mkdir build + cd build + cmake .. + make + +The app bundle is built in `build/src/solvespace.app`. + +[homebrew]: http://brew.sh/ + +Building on Windows +------------------- + +You will need [cmake][cmakewin] and Visual C++. + +### GUI build + +Check out the git submodules. Create a directory `build` in +the source tree and point cmake-gui to the source tree and that directory. +Press "Configure" and "Generate", then open `build\solvespace.sln` with +Visual C++ and build it. + +### Command-line build + +First, ensure that git and cl (the Visual C++ compiler driver) are in your +`%PATH%`; the latter is usually done by invoking `vcvarsall.bat` from your +Visual Studio install. Then, run the following in cmd or PowerShell: + + git submodule update --init + mkdir build + cd build + cmake .. -G "NMake Makefiles" + nmake + +### MSVC build + +It is also possible to build SolveSpace using [MinGW][mingw], though +Space Navigator support will be disabled. + +First, ensure that git and gcc are in your `$PATH`. Then, run the following +in bash: + + git submodule update --init + mkdir build + cd build + cmake .. + make + +[cmakewin]: http://www.cmake.org/download/#latest +[mingw]: http://www.mingw.org/ + +License +------- + +SolveSpace is distributed under the terms of the [GPL3 license](COPYING.txt). diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..4f4b3ae --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,28 @@ +version: 2.2.{build} +clone_depth: 1 +before_build: + - git submodule update --init + - mkdir build + - cd build + - set tag=x%APPVEYOR_REPO_TAG_NAME% + - if %tag:~,2% == xv (set BUILD_TYPE=RelWithDebInfo) else (set BUILD_TYPE=Debug) + - cmake -G"Visual Studio 12" -T v120_xp -DCMAKE_BUILD_TYPE=%BUILD_TYPE% .. +build_script: + - msbuild "src\solvespace.vcxproj" /verbosity:minimal /property:Configuration=%BUILD_TYPE% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" +artifacts: + - path: build\src\Debug\solvespace.exe + name: solvespace.exe + - path: build\src\Debug\solvespace.pdb + name: solvespace.pdb + - path: build\src\RelWithDebInfo\solvespace.exe + name: solvespace.exe + - path: build\src\RelWithDebInfo\solvespace.pdb + name: solvespace.pdb +deploy: + - provider: GitHub + auth_token: + secure: P9/pf2nM+jlWKe7pCjMp41HycBNP/+5AsmE/TETrDUoBOa/9WFHelqdVFrbRn9IC + description: "" + artifact: solvespace.exe + on: + appveyor_repo_tag: true diff --git a/cmake/FindSpaceWare.cmake b/cmake/FindSpaceWare.cmake new file mode 100644 index 0000000..135384a --- /dev/null +++ b/cmake/FindSpaceWare.cmake @@ -0,0 +1,28 @@ +# Find the libspnav library and header. +# +# Sets the usual variables expected for find_package scripts: +# +# SPACEWARE_INCLUDE_DIR - header location +# SPACEWARE_LIBRARIES - library to link against +# SPACEWARE_FOUND - true if pugixml was found. + +if(UNIX) + + find_path(SPACEWARE_INCLUDE_DIR + spnav.h) + + find_library(SPACEWARE_LIBRARY + NAMES spnav libspnav) + + # Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found. + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPACEWARE DEFAULT_MSG + SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR) + + if(SPACEWARE_FOUND) + set(SPACEWARE_LIBRARIES ${SPACEWARE_LIBRARY}) + endif() + + mark_as_advanced(SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR) + +endif() diff --git a/cmake/GetGitCommitHash.cmake b/cmake/GetGitCommitHash.cmake new file mode 100644 index 0000000..f67a844 --- /dev/null +++ b/cmake/GetGitCommitHash.cmake @@ -0,0 +1,35 @@ +function(get_git_commit_hash) + get_filename_component(GIT_DESCRIBE_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) + get_filename_component(GIT_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH) + set(GIT_DIR "${GIT_ROOT}/.git") + + # Add a CMake configure dependency to the currently checked out revision. + set(GIT_DEPENDS ${GIT_DIR}/HEAD) + file(READ ${GIT_DIR}/HEAD HEAD_REF) + if(HEAD_REF MATCHES "ref: (.+)\n") + set(HEAD_REF ${CMAKE_MATCH_1}) + if(EXISTS "${GIT_DIR}/${HEAD_REF}") + list(APPEND GIT_DEPENDS ${GIT_DIR}/${HEAD_REF}) + file(READ ${GIT_DIR}/${HEAD_REF} HEAD_REF) + elseif(EXISTS "${GIT_DIR}/packed-refs") + list(APPEND GIT_DEPENDS ${GIT_DIR}/packed-refs) + file(READ "${GIT_DIR}/packed-refs" PACKED_REFS) + if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") + set(HEAD_REF ${CMAKE_MATCH_1}) + else() + set(HEAD_REF "") + endif() + else() + set(HEAD_REF "") + endif() + endif() + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GIT_DEPENDS}) + + string(STRIP ${HEAD_REF} HEAD_REF) + if(HEAD_REF STREQUAL "") + message(WARNING "Cannot determine git HEAD") + else() + set(GIT_COMMIT_HASH ${HEAD_REF} PARENT_SCOPE) + endif() +endfunction() +get_git_commit_hash() diff --git a/cmake/MacOSXBundleInfo.plist.in b/cmake/MacOSXBundleInfo.plist.in new file mode 100644 index 0000000..c215c44 --- /dev/null +++ b/cmake/MacOSXBundleInfo.plist.in @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + solvespace + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SolveSpace + CFBundlePackageType + APPL + CFBundleVersion + ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + CFBundleShortVersionString + ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + NSHumanReadableCopyright + © 2008-2015 Jonathan Westhues and other authors + NSPrincipalClass + NSApplication + NSMainNibFile + MainMenu + CFBundleIconFile + AppIcon + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + slvs + + CFBundleTypeIconFile + AppIcon.icns + CFBundleTypeName + SolveSpace sketch + CFBundleTypeOSTypes + + slvs + + CFBundleTypeRole + Editor + + + + diff --git a/cmake/Toolchain-mingw32.cmake b/cmake/Toolchain-mingw32.cmake new file mode 100644 index 0000000..a3591c8 --- /dev/null +++ b/cmake/Toolchain-mingw32.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE i686-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-mingw64.cmake b/cmake/Toolchain-mingw64.cmake new file mode 100644 index 0000000..6841214 --- /dev/null +++ b/cmake/Toolchain-mingw64.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_SYSTEM_NAME Windows) + +SET(TRIPLE x86_64-w64-mingw32) + +SET(CMAKE_C_COMPILER ${TRIPLE}-gcc) +SET(CMAKE_CXX_COMPILER ${TRIPLE}-g++) +SET(CMAKE_RC_COMPILER ${TRIPLE}-windres) + +SET(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/c_flag_overrides.cmake b/cmake/c_flag_overrides.cmake new file mode 100644 index 0000000..b21f00e --- /dev/null +++ b/cmake/c_flag_overrides.cmake @@ -0,0 +1,6 @@ +if(MSVC) + set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() \ No newline at end of file diff --git a/cmake/cxx_flag_overrides.cmake b/cmake/cxx_flag_overrides.cmake new file mode 100644 index 0000000..67e0043 --- /dev/null +++ b/cmake/cxx_flag_overrides.cmake @@ -0,0 +1,6 @@ +if(MSVC) + set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") +endif() diff --git a/exposed/CDemo.c b/exposed/CDemo.c new file mode 100644 index 0000000..574f100 --- /dev/null +++ b/exposed/CDemo.c @@ -0,0 +1,274 @@ +/*----------------------------------------------------------------------------- + * Some sample code for slvs.dll. We draw some geometric entities, provide + * initial guesses for their positions, and then constrain them. The solver + * calculates their new positions, in order to satisfy the constraints. + * + * Copyright 2008-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ +#ifdef HAVE_CONFIG_H +# include +#endif +#ifdef WIN32 +# include +#endif +#include +#include +#include +#ifdef HAVE_STDINT_H +# include +#endif + +#include + +static Slvs_System sys; + +static void *CheckMalloc(size_t n) +{ + void *r = malloc(n); + if(!r) { + printf("out of memory!\n"); + exit(-1); + } + return r; +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 3d. We create a single group, with some + * entities and constraints. + *---------------------------------------------------------------------------*/ +void Example3d(void) +{ + /* This will contain a single group, which will arbitrarily number 1. */ + Slvs_hGroup g = 1; + + /* A point, initially at (x y z) = (10 10 10) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and a second point at (20 20 20) */ + sys.param[sys.params++] = Slvs_MakeParam(4, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(5, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(6, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(102, g, 4, 5, 6); + /* and a line segment connecting them. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(200, g, + SLVS_FREE_IN_3D, 101, 102); + + /* The distance between the points should be 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + SLVS_FREE_IN_3D, + 30.0, + 101, 102, 0, 0); + + /* Let's tell the solver to keep the second point as close to constant + * as possible, instead moving the first point. */ + sys.dragged[0] = 4; + sys.dragged[1] = 5; + sys.dragged[2] = 6; + + /* Now that we have written our system, we solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("okay; now at (%.3f %.3f %.3f)\n" + " (%.3f %.3f %.3f)\n", + sys.param[0].val, sys.param[1].val, sys.param[2].val, + sys.param[3].val, sys.param[4].val, sys.param[5].val); + printf("%d DOF\n", sys.dof); + } else { + printf("solve failed"); + } +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 2d. In our first group, we create a workplane + * along the reference frame's xy plane. In a second group, we create some + * entities in that group and dimension them. + *---------------------------------------------------------------------------*/ +void Example2d(void) +{ + Slvs_hGroup g; + double qw, qx, qy, qz; + + g = 1; + /* First, we create our workplane. Its origin corresponds to the origin + * of our base frame (x y z) = (0 0 0) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 0.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and it is parallel to the xy plane, so it has basis vectors (1 0 0) + * and (0 1 0). */ + Slvs_MakeQuaternion(1, 0, 0, + 0, 1, 0, &qw, &qx, &qy, &qz); + sys.param[sys.params++] = Slvs_MakeParam(4, g, qw); + sys.param[sys.params++] = Slvs_MakeParam(5, g, qx); + sys.param[sys.params++] = Slvs_MakeParam(6, g, qy); + sys.param[sys.params++] = Slvs_MakeParam(7, g, qz); + sys.entity[sys.entities++] = Slvs_MakeNormal3d(102, g, 4, 5, 6, 7); + + sys.entity[sys.entities++] = Slvs_MakeWorkplane(200, g, 101, 102); + + /* Now create a second group. We'll solve group 2, while leaving group 1 + * constant; so the workplane that we've created will be locked down, + * and the solver can't move it. */ + g = 2; + /* These points are represented by their coordinates (u v) within the + * workplane, so they need only two parameters each. */ + sys.param[sys.params++] = Slvs_MakeParam(11, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(12, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(301, g, 200, 11, 12); + + sys.param[sys.params++] = Slvs_MakeParam(13, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(14, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(302, g, 200, 13, 14); + + /* And we create a line segment with those endpoints. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(400, g, + 200, 301, 302); + + /* Now three more points. */ + sys.param[sys.params++] = Slvs_MakeParam(15, g, 100.0); + sys.param[sys.params++] = Slvs_MakeParam(16, g, 120.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(303, g, 200, 15, 16); + + sys.param[sys.params++] = Slvs_MakeParam(17, g, 120.0); + sys.param[sys.params++] = Slvs_MakeParam(18, g, 110.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(304, g, 200, 17, 18); + + sys.param[sys.params++] = Slvs_MakeParam(19, g, 115.0); + sys.param[sys.params++] = Slvs_MakeParam(20, g, 115.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(305, g, 200, 19, 20); + + /* And arc, centered at point 303, starting at point 304, ending at + * point 305. */ + sys.entity[sys.entities++] = Slvs_MakeArcOfCircle(401, g, 200, 102, + 303, 304, 305); + + /* Now one more point, and a distance */ + sys.param[sys.params++] = Slvs_MakeParam(21, g, 200.0); + sys.param[sys.params++] = Slvs_MakeParam(22, g, 200.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(306, g, 200, 21, 22); + + sys.param[sys.params++] = Slvs_MakeParam(23, g, 30.0); + sys.entity[sys.entities++] = Slvs_MakeDistance(307, g, 200, 23); + + /* And a complete circle, centered at point 306 with radius equal to + * distance 307. The normal is 102, the same as our workplane. */ + sys.entity[sys.entities++] = Slvs_MakeCircle(402, g, 200, + 306, 102, 307); + + + /* The length of our line segment is 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 30.0, + 301, 302, 0, 0); + + /* And the distance from our line segment to the origin is 10.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 2, g, + SLVS_C_PT_LINE_DISTANCE, + 200, + 10.0, + 101, 0, 400, 0); + /* And the line segment is vertical. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 3, g, + SLVS_C_VERTICAL, + 200, + 0.0, + 0, 0, 400, 0); + /* And the distance from one endpoint to the origin is 15.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 4, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 15.0, + 301, 101, 0, 0); +#if 0 + /* And same for the other endpoint; so if you add this constraint then + * the sketch is overconstrained and will signal an error. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 5, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 18.0, + 302, 101, 0, 0); +#endif /* 0 */ + + /* The arc and the circle have equal radius. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 6, g, + SLVS_C_EQUAL_RADIUS, + 200, + 0.0, + 0, 0, 401, 402); + /* The arc has radius 17.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 7, g, + SLVS_C_DIAMETER, + 200, + 17.0*2, + 0, 0, 401, 0); + + /* If the solver fails, then ask it to report which constraints caused + * the problem. */ + sys.calculateFaileds = 1; + + /* And solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("solved okay\n"); + printf("line from (%.3f %.3f) to (%.3f %.3f)\n", + sys.param[7].val, sys.param[8].val, + sys.param[9].val, sys.param[10].val); + + printf("arc center (%.3f %.3f) start (%.3f %.3f) finish (%.3f %.3f)\n", + sys.param[11].val, sys.param[12].val, + sys.param[13].val, sys.param[14].val, + sys.param[15].val, sys.param[16].val); + + printf("circle center (%.3f %.3f) radius %.3f\n", + sys.param[17].val, sys.param[18].val, + sys.param[19].val); + printf("%d DOF\n", sys.dof); + } else { + int i; + printf("solve failed: problematic constraints are:"); + for(i = 0; i < sys.faileds; i++) { + printf(" %d", sys.failed[i]); + } + printf("\n"); + if(sys.result == SLVS_RESULT_INCONSISTENT) { + printf("system inconsistent\n"); + } else { + printf("system nonconvergent\n"); + } + } +} + +int main(void) +{ + sys.param = CheckMalloc(50*sizeof(sys.param[0])); + sys.entity = CheckMalloc(50*sizeof(sys.entity[0])); + sys.constraint = CheckMalloc(50*sizeof(sys.constraint[0])); + + sys.failed = CheckMalloc(50*sizeof(sys.failed[0])); + sys.faileds = 50; + + /*Example3d();*/ + for(;;) { + Example2d(); + sys.params = sys.constraints = sys.entities = 0; + break; + } + return 0; +} + diff --git a/exposed/CMakeLists.txt b/exposed/CMakeLists.txt new file mode 100644 index 0000000..bdc3fc3 --- /dev/null +++ b/exposed/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories( + ${CMAKE_SOURCE_DIR}/include) + +add_executable(CDemo + CDemo.c) + +target_link_libraries(CDemo + slvs) diff --git a/exposed/DOC.txt b/exposed/DOC.txt new file mode 100644 index 0000000..743349b --- /dev/null +++ b/exposed/DOC.txt @@ -0,0 +1,467 @@ + +INTRODUCTION +============ + +A sketch in SolveSpace consists of three basic elements: parameters, +entities, and constraints. + +A parameter (Slvs_Param) is a single real number, represented internally +by a double-precision floating point variable. The parameters are unknown +variables that the solver modifies in order to satisfy the constraints. + +An entity (Slvs_Entity) is a geometric thing, like a point or a line +segment or a circle. Entities are defined in terms of parameters, +and in terms of other entities. For example, a point in three-space +is represented by three parameters, corresponding to its x, y, and z +coordinates in our base coordinate frame. A line segment is represented +by two point entities, corresponding to its endpoints. + +A constraint (Slvs_Constraint) is a geometric property of an entity, +or a relationship among multiple entities. For example, a point-point +distance constraint will set the distance between two point entities. + +Parameters, entities, and constraints are typically referenced by their +handles (Slvs_hParam, Slvs_hEntity, Slvs_hConstraint). These handles are +32-bit integer values starting from 1. The zero handle is reserved. Each +object has a unique handle within its type (but it's acceptable, for +example to have a constraint with an Slvs_hConstraint of 7, and also to +have an entity with an Slvs_hEntity of 7). The use of handles instead +of pointers helps to avoid memory corruption. + +Entities and constraints are assigned into groups. A group is a set of +entities and constraints that is solved simultaneously. In a parametric +CAD system, a single group would typically correspond to a single sketch. +Constraints within a group may refer to entities outside that group, +but only the entities within that group will be modified by the solver. + +Consider point A in group 1, and point B in group 2. We have a constraint +in group 2 that makes the points coincident. When we solve group 2, the +solver is allowed to move point B to place it on top of point A. It is +not allowed to move point A to put it on top of point B, because point +A is outside the group being solved. + +This corresponds to the typical structure of a parametric CAD system. In a +later sketch, we may constrain our entities against existing geometry from +earlier sketches. The constraints will move the entities in our current +sketch, but will not change the geometry from the earlier sketches. + +To use the solver, we first define a set of parameters, entities, and +constraints. We provide an initial guess for each parameter; this is +necessary to achieve convergence, and also determines which solution +gets chosen when (finitely many) multiple solutions exist. Typically, +these initial guesses are provided by the initial configuration in which +the user drew the entities before constraining them. + +We then run the solver for a given group. The entities within that group +are modified in an attempt to satisfy the constraints. + +After running the solver, there are three possible outcomes: + + * All constraints were satisfied to within our numerical + tolerance (i.e., success). The result is equal to SLVS_RESULT_OKAY, + and the parameters in param[] have been updated. + + * The solver can prove that two constraints are inconsistent (for + example, if a line with nonzero length is constrained both + horizontal and vertical). In that case, a list of inconsistent + constraints is generated in failed[]. + + * The solver cannot prove that two constraints are inconsistent, but + it cannot find a solution. In that case, the list of unsatisfied + constraints is generated in failed[]. + + +TYPES OF ENTITIES +================= + +SLVS_E_POINT_IN_3D + + A point in 3d. Defined by three parameters: + + param[0] the point's x coordinate + param[1] y + param[1] z + + +SLVS_E_POINT_IN_2D + + A point within a workplane. Defined by the workplane + + wrkpl + + and by two parameters + + param[0] the point's u coordinate + param[1] v + + within the coordinate system of the workplane. For example, if the + workplane is the zx plane, then u = z and v = x. If the workplane is + parallel to the zx plane, but translated so that the workplane's + origin is (3, 4, 5), then u = z - 5 and v = x - 3. + + +SLVS_E_NORMAL_IN_3D + + A normal. In SolveSpace, "normals" represent a 3x3 rotation matrix + from our base coordinate system to a new frame. Defined by the + unit quaternion + + param[0] w + param[1] x + param[2] y + param[3] z + + where the quaternion is given by w + x*i + y*j + z*k. + + It is useful to think of this quaternion as representing a plane + through the origin. This plane has three associated vectors: basis + vectors U, V that lie within the plane, and normal N that is + perpendicular to it. This means that + + [ U V N ]' + + defines a 3x3 rotation matrix. So U, V, and N all have unit length, + and are orthogonal so that + + U cross V = N + V cross N = U + N cross U = V + + Convenience functions (Slvs_Quaternion*) are provided to convert + between this representation as vectors U, V, N and the unit + quaternion. + + A unit quaternion has only 3 degrees of freedom, but is specified in + terms of 4 parameters. An extra constraint is therefore generated + implicitly, that + + w^2 + x^2 + y^2 + z^2 = 1 + + +SLVS_E_NORMAL_IN_2D + + A normal within a workplane. This is identical to the workplane's + normal, so it is simply defined by + + wrkpl + + This entity type is used, for example, to define a circle that lies + within a workplane. The circle's normal is the same as the workplane's + normal, so we can use an SLVS_E_NORMAL_IN_2D to copy the workplane's + normal. + + +SLVS_E_DISTANCE + + A distance. This entity is used to define the radius of a circle, by + a single parameter + + param[0] r + + +SLVS_E_WORKPLANE + + An oriented plane, somewhere in 3d. This entity therefore has 6 + degrees of freedom: three translational, and three rotational. It is + specified in terms of its origin + + point[0] origin + + and a normal + + normal + + The normal describes three vectors U, V, N, as discussed in the + documentation for SLVS_E_NORMAL_IN_3D. The plane is therefore given + by the equation + + p = origin + s*U + t*V + + for any scalar s and t. + + +SLVS_E_LINE_SEGMENT + + A line segment between two endpoints + + point[0] + point[1] + + +SLVS_E_CUBIC + + A nonrational cubic Bezier segment + + point[0] starting point P0 + point[1] control point P1 + point[2] control point P2 + point[3] ending point P3 + + The curve then has equation + + p(t) = P0*(1 - t)^3 + 3*P1*(1 - t)^2*t + 3*P2*(1 - t)*t^2 + P3*t^3 + + as t goes from 0 to 1. + + +SLVS_E_CIRCLE + + A complete circle. The circle lies within a plane with normal + + normal + + The circle is centered at + + point[0] + + The circle's radius is + + distance + + +SLVS_E_ARC_OF_CIRCLE + + An arc of a circle. An arc must always lie within a workplane; it + cannot be free in 3d. So it is specified with a workplane + + wrkpl + + It is then defined by three points + + point[0] center of the circle + point[1] beginning of the arc + point[2] end of the arc + + and its normal + + normal identical to the normal of the workplane + + The arc runs counter-clockwise from its beginning to its end (with + the workplane's normal pointing towards the viewer). If the beginning + and end of the arc are coincident, then the arc is considered to + represent a full circle. + + This representation has an extra degree of freedom. An extra + constraint is therefore generated implicitly, so that + + distance(center, beginning) = distance(center, end) + + +TYPES OF CONSTRAINTS +==================== + +Many constraints can apply either in 3d, or in a workplane. This is +determined by the wrkpl member of the constraint. If that member is set +to SLVS_FREE_IN_3D, then the constraint applies in 3d. If that member +is set equal to a workplane, the the constraint applies projected into +that workplane. (For example, a constraint on the distance between two +points actually applies to the projected distance). + +Constraints that may be used in 3d or projected into a workplane are +marked with a single star (*). Constraints that must always be used with +a workplane are marked with a double star (**). Constraints that ignore +the wrkpl member are marked with no star. + +SLVS_C_PT_PT_DISTANCE* + + The distance between points ptA and ptB is equal to valA. This is an + unsigned distance, so valA must always be positive. + +SLVS_C_PROJ_PT_DISTANCE + + The distance between points ptA and ptB, as projected along the line + or normal entityA, is equal to valA. This is a signed distance. + +SLVS_C_POINTS_COINCIDENT* + + Points ptA and ptB are coincident (i.e., exactly on top of each + other). + +SLVS_C_PT_PLANE_DISTANCE + + The distance from point ptA to workplane entityA is equal to + valA. This is a signed distance; positive versus negative valA + correspond to a point that is above vs. below the plane. + +SLVS_C_PT_LINE_DISTANCE* + + The distance from point ptA to line segment entityA is equal to valA. + + If the constraint is projected, then valA is a signed distance; + positive versus negative valA correspond to a point that is above + vs. below the line. + + If the constraint applies in 3d, then valA must always be positive. + +SLVS_C_PT_IN_PLANE + + The point ptA lies in plane entityA. + +SLVS_C_PT_ON_LINE* + + The point ptA lies on the line entityA. + + Note that this constraint removes one degree of freedom when projected + in to the plane, but two degrees of freedom in 3d. + +SLVS_C_EQUAL_LENGTH_LINES* + + The lines entityA and entityB have equal length. + +SLVS_C_LENGTH_RATIO* + + The length of line entityA divided by the length of line entityB is + equal to valA. + +SLVS_C_LENGTH_DIFFERENCE* + + The lengths of line entityA and line entityB differ by valA. + +SLVS_C_EQ_LEN_PT_LINE_D* + + The length of the line entityA is equal to the distance from point + ptA to line entityB. + +SLVS_C_EQ_PT_LN_DISTANCES* + + The distance from the line entityA to the point ptA is equal to the + distance from the line entityB to the point ptB. + +SLVS_C_EQUAL_ANGLE* + + The angle between lines entityA and entityB is equal to the angle + between lines entityC and entityD. + + If other is true, then the angles are supplementary (i.e., theta1 = + 180 - theta2) instead of equal. + +SLVS_C_EQUAL_LINE_ARC_LEN* + + The length of the line entityA is equal to the length of the circular + arc entityB. + +SLVS_C_SYMMETRIC* + + The points ptA and ptB are symmetric about the plane entityA. This + means that they are on opposite sides of the plane and at equal + distances from the plane, and that the line connecting ptA and ptB + is normal to the plane. + +SLVS_C_SYMMETRIC_HORIZ +SLVS_C_SYMMETRIC_VERT** + + The points ptA and ptB are symmetric about the horizontal or vertical + axis of the specified workplane. + +SLVS_C_SYMMETRIC_LINE** + + The points ptA and ptB are symmetric about the line entityA. + +SLVS_C_AT_MIDPOINT* + + The point ptA lies at the midpoint of the line entityA. + +SLVS_C_HORIZONTAL +SLVS_C_VERTICAL** + + The line connecting points ptA and ptB is horizontal or vertical. Or, + the line segment entityA is horizontal or vertical. If points are + specified then the line segment should be left zero, and if a line + is specified then the points should be left zero. + +SLVS_C_DIAMETER + + The diameter of circle or arc entityA is equal to valA. + +SLVS_C_PT_ON_CIRCLE + + The point ptA lies on the right cylinder obtained by extruding circle + or arc entityA normal to its plane. + +SLVS_C_SAME_ORIENTATION + + The normals entityA and entityB describe identical rotations. This + constraint therefore restricts three degrees of freedom. + +SLVS_C_ANGLE* + + The angle between lines entityA and entityB is equal to valA, where + valA is specified in degrees. This constraint equation is written + in the form + + (A dot B)/(|A||B|) = cos(valA) + + where A and B are vectors in the directions of lines A and B. This + equation does not specify the angle unambiguously; for example, + note that valA = +/- 90 degrees will produce the same equation. + + If other is true, then the constraint is instead that + + (A dot B)/(|A||B|) = -cos(valA) + +SLVS_C_PERPENDICULAR* + + Identical to SLVS_C_ANGLE with valA = 90 degrees. + +SLVS_C_PARALLEL* + + Lines entityA and entityB are parallel. + + Note that this constraint removes one degree of freedom when projected + in to the plane, but two degrees of freedom in 3d. + +SLVS_C_ARC_LINE_TANGENT** + + The arc entityA is tangent to the line entityB. If other is false, + then the arc is tangent at its beginning (point[1]). If other is true, + then the arc is tangent at its end (point[2]). + +SLVS_C_CUBIC_LINE_TANGENT* + + The cubic entityA is tangent to the line entityB. The variable + other indicates: + + if false: the cubic is tangent at its beginning + if true: the cubic is tangent at its end + + The beginning of the cubic is point[0], and the end is point[3]. + +SLVS_C_CURVE_CURVE_TANGENT** + + The two entities entityA and entityB are tangent. These entities can + each be either an arc or a cubic, in any combination. The flags + other and other2 indicate which endpoint of the curve is tangent, + for entityA and entityB respectively: + + if false: the entity is tangent at its beginning + if true: the entity is tangent at its end + + For cubics, point[0] is the beginning, and point[3] is the end. For + arcs, point[1] is the beginning, and point[2] is the end. + +SLVS_C_EQUAL_RADIUS + + The circles or arcs entityA and entityB have equal radius. + +SLVS_C_WHERE_DRAGGED* + + The point ptA is locked at its initial numerical guess, and cannot + be moved. This constrains two degrees of freedom in a workplane, + and three in free space. It's therefore possible for this constraint + to overconstrain the sketch, for example if it's applied to a point + with one remaining degree of freedom. + + +USING THE SOLVER +================ + +The solver is provided as a DLL, and will be usable with most +Windows-based developement tools. Examples are provided: + + in C/C++ - CDemo.c + + in VB.NET - VbDemo.vb + + +Copyright 2009-2013 Jonathan Westhues. + diff --git a/exposed/VbDemo.vb b/exposed/VbDemo.vb new file mode 100644 index 0000000..6781fc4 --- /dev/null +++ b/exposed/VbDemo.vb @@ -0,0 +1,1252 @@ +'----------------------------------------------------------------------------- +' Some sample code for slvs.dll. We draw some geometric entities, provide +' initial guesses for their positions, and then constrain them. The solver +' calculates their new positions, in order to satisfy the constraints. +' +' The library is distributed as a DLL, but the functions are designed to +' be usable from .net languages through a P/Invoke. This file contains an +' example of that process, and a wrapper class around those P/Invoke'd +' functions that you may wish to use a starting point in your own +' application. +' +' Copyright 2008-2013 Jonathan Westhues. +'----------------------------------------------------------------------------- + +Imports System.Runtime.InteropServices + +Module VbDemo + + ' Call our example functions, which set up some kind of sketch, solve + ' it, and then print the result. + Sub Main() + Console.WriteLine("EXAMPLE IN 3d (by objects):") + Example3dWithObjects() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 2d (by objects):") + Example2dWithObjects() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 3d (by handles):") + Example3dWithHandles() + Console.WriteLine("") + + Console.WriteLine("EXAMPLE IN 2d (by handles):") + Example2dWithHandles() + Console.WriteLine("") + End Sub + + + ''''''''''''''''''''''''''''''' + ' This is the simplest way to use the library. A set of wrapper + ' classes allow us to represent entities (e.g., lines and points) + ' as .net objects. So we create an Slvs object, which will contain + ' the entire sketch, with all the entities and constraints. + ' + ' We then create entity objects (for example, points and lines) + ' associated with that sketch, indicating the initial positions of + ' those entities and any hierarchical relationships among them (e.g., + ' defining a line entity in terms of endpoint entities). We also add + ' constraints associated with those entities. + ' + ' Finally, we solve, and print the new positions of the entities. If the + ' solution succeeded, then the entities will satisfy the constraints. If + ' not, then the solver will suggest problematic constraints that, if + ' removed, would render the sketch solvable. + + Sub Example3dWithObjects() + Dim g As UInteger + Dim slv As New Slvs + + ' This will contain a single group, which will arbitrarily number 1. + g = 1 + + Dim p1, p2 As Slvs.Point3d + ' A point, initially at (x y z) = (10 10 10) + p1 = slv.NewPoint3d(g, 10.0, 10.0, 10.0) + ' and a second point at (20 20 20) + p2 = slv.NewPoint3d(g, 20.0, 20.0, 20.0) + + Dim ln As Slvs.LineSegment + ' and a line segment connecting them. + ln = slv.NewLineSegment(g, slv.FreeIn3d(), p1, p2) + + ' The distance between the points should be 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + slv.FreeIn3d(), 30.0, p1, p2, Nothing, Nothing) + + ' Let's tell the solver to keep the second point as close to constant + ' as possible, instead moving the first point. + slv.Solve(g, p2, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + ' We call the GetX(), GetY(), and GetZ() functions to see + ' where the solver moved our points to. + Console.WriteLine(String.Format( _ + "okay; now at ({0:F3}, {1:F3}, {2:F3})", _ + p1.GetX(), p1.GetY(), p1.GetZ())) + Console.WriteLine(String.Format( _ + " ({0:F3}, {1:F3}, {2:F3})", _ + p2.GetX(), p2.GetY(), p2.GetZ())) + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.WriteLine("solve failed") + End If + End Sub + + Sub Example2dWithObjects() + Dim g As UInteger + Dim slv As New Slvs + + g = 1 + + ' First, we create our workplane. Its origin corresponds to the origin + ' of our base frame (x y z) = (0 0 0) + Dim origin As Slvs.Point3d + origin = slv.NewPoint3d(g, 0.0, 0.0, 0.0) + ' and it is parallel to the xy plane, so it has basis vectors (1 0 0) + ' and (0 1 0). + Dim normal As Slvs.Normal3d + normal = slv.NewNormal3d(g, 1.0, 0.0, 0.0, _ + 0.0, 1.0, 0.0) + + Dim wrkpl As Slvs.Workplane + wrkpl = slv.NewWorkplane(g, origin, normal) + + ' Now create a second group. We'll solve group 2, while leaving group 1 + ' constant; so the workplane that we've created will be locked down, + ' and the solver can't move it. + g = 2 + ' These points are represented by their coordinates (u v) within the + ' workplane, so they need only two parameters each. + Dim pl1, pl2 As Slvs.Point2d + pl1 = slv.NewPoint2d(g, wrkpl, 10.0, 20.0) + pl2 = slv.NewPoint2d(g, wrkpl, 20.0, 10.0) + + ' And we create a line segment with those endpoints. + Dim ln As Slvs.LineSegment + ln = slv.NewLineSegment(g, wrkpl, pl1, pl2) + + ' Now three more points. + Dim pc, ps, pf As Slvs.Point2d + pc = slv.NewPoint2d(g, wrkpl, 100.0, 120.0) + ps = slv.NewPoint2d(g, wrkpl, 120.0, 110.0) + pf = slv.NewPoint2d(g, wrkpl, 115.0, 115.0) + + ' And arc, centered at point pc, starting at point ps, ending at + ' point pf. + Dim arc As Slvs.ArcOfCircle + arc = slv.NewArcOfCircle(g, wrkpl, normal, pc, ps, pf) + + ' Now one more point, and a distance + Dim pcc As Slvs.Point2d + pcc = slv.NewPoint2d(g, wrkpl, 200.0, 200.0) + Dim r As Slvs.Distance + r = slv.NewDistance(g, wrkpl, 30.0) + + ' And a complete circle, centered at point pcc with radius equal to + ' distance r. The normal is the same as for our workplane. + Dim circle As Slvs.Circle + circle = slv.NewCircle(g, wrkpl, pcc, normal, r) + + ' The length of our line segment is 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + wrkpl, 30.0, pl1, pl2, Nothing, Nothing) + + ' And the distance from our line segment to the origin is 10.0 units. + slv.AddConstraint(2, g, Slvs.SLVS_C_PT_LINE_DISTANCE, _ + wrkpl, 10.0, origin, Nothing, ln, Nothing) + + ' And the line segment is vertical. + slv.AddConstraint(3, g, Slvs.SLVS_C_VERTICAL, _ + wrkpl, 0.0, Nothing, Nothing, ln, Nothing) + + ' And the distance from one endpoint to the origin is 15.0 units. + slv.AddConstraint(4, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + wrkpl, 15.0, pl1, origin, Nothing, Nothing) + + ' And same for the other endpoint; so if you add this constraint then + ' the sketch is overconstrained and will signal an error. + 'slv.AddConstraint(5, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + ' wrkpl, 18.0, pl2, origin, Nothing, Nothing) + + ' The arc and the circle have equal radius. + slv.AddConstraint(6, g, Slvs.SLVS_C_EQUAL_RADIUS, _ + wrkpl, 0.0, Nothing, Nothing, arc, circle) + + ' The arc has radius 17.0 units. + slv.AddConstraint(7, g, Slvs.SLVS_C_DIAMETER, _ + wrkpl, 2 * 17.0, Nothing, Nothing, arc, Nothing) + + ' If the solver fails, then ask it to report which constraints caused + ' the problem. + slv.Solve(g, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + Console.WriteLine("solved okay") + ' We call the GetU(), GetV(), and GetDistance() functions to + ' see where the solver moved our points and distances to. + Console.WriteLine(String.Format( _ + "line from ({0:F3} {1:F3}) to ({2:F3} {3:F3})", _ + pl1.GetU(), pl1.GetV(), _ + pl2.GetU(), pl2.GetV())) + Console.WriteLine(String.Format( _ + "arc center ({0:F3} {1:F3}) start ({2:F3} {3:F3}) " + _ + "finish ({4:F3} {5:F3})", _ + pc.GetU(), pc.GetV(), _ + ps.GetU(), ps.GetV(), _ + pf.GetU(), pf.GetV())) + Console.WriteLine(String.Format( _ + "circle center ({0:F3} {1:F3}) radius {2:F3}", _ + pcc.GetU(), pcc.GetV(), _ + r.GetDistance())) + + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.Write("solve failed; problematic constraints are:") + Dim t As UInteger + For Each t In slv.GetFaileds() + Console.Write(" " + t.ToString()) + Next + Console.WriteLine("") + If (slv.GetResult() = Slvs.SLVS_RESULT_INCONSISTENT) Then + Console.WriteLine("system inconsistent") + Else + Console.WriteLine("system nonconvergent") + End If + End If + + End Sub + + + ''''''''''''''''''''''''''''''' + ' This is a lower-level way to use the library. Internally, the library + ' represents parameters, entities, and constraints by integer handles. + ' Here, those handles are assigned manually, and not by the wrapper + ' classes. + + Sub Example3dWithHandles() + Dim g As UInteger + Dim slv As New Slvs + + ' This will contain a single group, which will arbitrarily number 1. + g = 1 + + ' A point, initially at (x y z) = (10 10 10) + slv.AddParam(1, g, 10.0) + slv.AddParam(2, g, 10.0) + slv.AddParam(3, g, 10.0) + slv.AddPoint3d(101, g, 1, 2, 3) + + ' and a second point at (20 20 20) + slv.AddParam(4, g, 20.0) + slv.AddParam(5, g, 20.0) + slv.AddParam(6, g, 20.0) + slv.AddPoint3d(102, g, 4, 5, 6) + + ' and a line segment connecting them. + slv.AddLineSegment(200, g, Slvs.SLVS_FREE_IN_3D, 101, 102) + + ' The distance between the points should be 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + Slvs.SLVS_FREE_IN_3D, 30.0, 101, 102, 0, 0) + + ' Let's tell the solver to keep the second point as close to constant + ' as possible, instead moving the first point. That's parameters + ' 4, 5, and 6. + slv.Solve(g, 4, 5, 6, 0, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + ' Note that we are referring to the parameters by their handles, + ' and not by their index in the list. This is a difference from + ' the C example. + Console.WriteLine(String.Format( _ + "okay; now at ({0:F3}, {1:F3}, {2:F3})", _ + slv.GetParamByHandle(1), slv.GetParamByHandle(2), _ + slv.GetParamByHandle(3))) + Console.WriteLine(String.Format( _ + " ({0:F3}, {1:F3}, {2:F3})", _ + slv.GetParamByHandle(4), slv.GetParamByHandle(5), _ + slv.GetParamByHandle(6))) + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.WriteLine("solve failed") + End If + End Sub + + + Sub Example2dWithHandles() + Dim g As UInteger + Dim qw, qx, qy, qz As Double + + Dim slv As New Slvs + + g = 1 + + ' First, we create our workplane. Its origin corresponds to the origin + ' of our base frame (x y z) = (0 0 0) + slv.AddParam(1, g, 0.0) + slv.AddParam(2, g, 0.0) + slv.AddParam(3, g, 0.0) + slv.AddPoint3d(101, g, 1, 2, 3) + ' and it is parallel to the xy plane, so it has basis vectors (1 0 0) + ' and (0 1 0). + slv.MakeQuaternion(1, 0, 0, _ + 0, 1, 0, qw, qx, qy, qz) + slv.AddParam(4, g, qw) + slv.AddParam(5, g, qx) + slv.AddParam(6, g, qy) + slv.AddParam(7, g, qz) + slv.AddNormal3d(102, g, 4, 5, 6, 7) + + slv.AddWorkplane(200, g, 101, 102) + + ' Now create a second group. We'll solve group 2, while leaving group 1 + ' constant; so the workplane that we've created will be locked down, + ' and the solver can't move it. + g = 2 + ' These points are represented by their coordinates (u v) within the + ' workplane, so they need only two parameters each. + slv.AddParam(11, g, 10.0) + slv.AddParam(12, g, 20.0) + slv.AddPoint2d(301, g, 200, 11, 12) + + slv.AddParam(13, g, 20.0) + slv.AddParam(14, g, 10.0) + slv.AddPoint2d(302, g, 200, 13, 14) + + ' And we create a line segment with those endpoints. + slv.AddLineSegment(400, g, 200, 301, 302) + + ' Now three more points. + slv.AddParam(15, g, 100.0) + slv.AddParam(16, g, 120.0) + slv.AddPoint2d(303, g, 200, 15, 16) + + slv.AddParam(17, g, 120.0) + slv.AddParam(18, g, 110.0) + slv.AddPoint2d(304, g, 200, 17, 18) + + slv.AddParam(19, g, 115.0) + slv.AddParam(20, g, 115.0) + slv.AddPoint2d(305, g, 200, 19, 20) + + ' And arc, centered at point 303, starting at point 304, ending at + ' point 305. + slv.AddArcOfCircle(401, g, 200, 102, 303, 304, 305) + + ' Now one more point, and a distance + slv.AddParam(21, g, 200.0) + slv.AddParam(22, g, 200.0) + slv.AddPoint2d(306, g, 200, 21, 22) + + slv.AddParam(23, g, 30.0) + slv.AddDistance(307, g, 200, 23) + + ' And a complete circle, centered at point 306 with radius equal to + ' distance 307. The normal is 102, the same as our workplane. + slv.AddCircle(402, g, 200, 306, 102, 307) + + ' The length of our line segment is 30.0 units. + slv.AddConstraint(1, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + 200, 30.0, 301, 302, 0, 0) + + ' And the distance from our line segment to the origin is 10.0 units. + slv.AddConstraint(2, g, Slvs.SLVS_C_PT_LINE_DISTANCE, _ + 200, 10.0, 101, 0, 400, 0) + + ' And the line segment is vertical. + slv.AddConstraint(3, g, Slvs.SLVS_C_VERTICAL, _ + 200, 0.0, 0, 0, 400, 0) + + ' And the distance from one endpoint to the origin is 15.0 units. + slv.AddConstraint(4, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + 200, 15.0, 301, 101, 0, 0) + + ' And same for the other endpoint; so if you add this constraint then + ' the sketch is overconstrained and will signal an error. + 'slv.AddConstraint(5, g, Slvs.SLVS_C_PT_PT_DISTANCE, _ + ' 200, 18.0, 302, 101, 0, 0) + + ' The arc and the circle have equal radius. + slv.AddConstraint(6, g, Slvs.SLVS_C_EQUAL_RADIUS, _ + 200, 0.0, 0, 0, 401, 402) + + ' The arc has radius 17.0 units. + slv.AddConstraint(7, g, Slvs.SLVS_C_DIAMETER, _ + 200, 2 * 17.0, 0, 0, 401, 0) + + ' If the solver fails, then ask it to report which constraints caused + ' the problem. + slv.Solve(g, 0, 0, 0, 0, True) + + If (slv.GetResult() = Slvs.SLVS_RESULT_OKAY) Then + Console.WriteLine("solved okay") + ' Note that we are referring to the parameters by their handles, + ' and not by their index in the list. This is a difference from + ' the C example. + Console.WriteLine(String.Format( _ + "line from ({0:F3} {1:F3}) to ({2:F3} {3:F3})", _ + slv.GetParamByHandle(11), slv.GetParamByHandle(12), _ + slv.GetParamByHandle(13), slv.GetParamByHandle(14))) + Console.WriteLine(String.Format( _ + "arc center ({0:F3} {1:F3}) start ({2:F3} {3:F3}) " + _ + "finish ({4:F3} {5:F3})", _ + slv.GetParamByHandle(15), slv.GetParamByHandle(16), _ + slv.GetParamByHandle(17), slv.GetParamByHandle(18), _ + slv.GetParamByHandle(19), slv.GetParamByHandle(20))) + Console.WriteLine(String.Format( _ + "circle center ({0:F3} {1:F3}) radius {2:F3}", _ + slv.GetParamByHandle(21), slv.GetParamByHandle(22), _ + slv.GetParamByHandle(23))) + + Console.WriteLine(slv.GetDof().ToString() + " DOF") + Else + Console.Write("solve failed; problematic constraints are:") + Dim t As UInteger + For Each t In slv.GetFaileds() + Console.Write(" " + t.ToString()) + Next + Console.WriteLine("") + If (slv.GetResult() = Slvs.SLVS_RESULT_INCONSISTENT) Then + Console.WriteLine("system inconsistent") + Else + Console.WriteLine("system nonconvergent") + End If + End If + + End Sub + + + ''''''''''''''''''''''''''''''' + ' The interface to the library, and the wrapper functions around + ' that interface, follow. + + ' These are the core functions imported from the DLL + _ + Public Sub Slvs_Solve(ByVal sys As IntPtr, ByVal hg As UInteger) + End Sub + + _ + Public Sub Slvs_MakeQuaternion( + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double, + ByRef qw As Double, ByRef qx As Double, ByRef qy As Double, + ByRef qz As Double) + End Sub + + ' And this is a thin wrapper around those functions, which provides + ' convenience functions similar to those provided in slvs.h for the C API. + Public Class Slvs + + Public Structure Slvs_Param + Public h As UInteger + Public group As UInteger + Public val As Double + End Structure + + Public Const SLVS_FREE_IN_3D As Integer = 0 + + Public Const SLVS_E_POINT_IN_3D As Integer = 50000 + Public Const SLVS_E_POINT_IN_2D As Integer = 50001 + Public Const SLVS_E_NORMAL_IN_3D As Integer = 60000 + Public Const SLVS_E_NORMAL_IN_2D As Integer = 60001 + Public Const SLVS_E_DISTANCE As Integer = 70000 + Public Const SLVS_E_WORKPLANE As Integer = 80000 + Public Const SLVS_E_LINE_SEGMENT As Integer = 80001 + Public Const SLVS_E_CUBIC As Integer = 80002 + Public Const SLVS_E_CIRCLE As Integer = 80003 + Public Const SLVS_E_ARC_OF_CIRCLE As Integer = 80004 + + Public Structure Slvs_Entity + Public h As UInteger + Public group As UInteger + + Public type As Integer + + Public wrkpl As UInteger + Public point0 As UInteger + Public point1 As UInteger + Public point2 As UInteger + Public point3 As UInteger + Public normal As UInteger + Public distance As UInteger + + Public param0 As UInteger + Public param1 As UInteger + Public param2 As UInteger + Public param3 As UInteger + End Structure + + Public Const SLVS_C_POINTS_COINCIDENT As Integer = 100000 + Public Const SLVS_C_PT_PT_DISTANCE As Integer = 100001 + Public Const SLVS_C_PT_PLANE_DISTANCE As Integer = 100002 + Public Const SLVS_C_PT_LINE_DISTANCE As Integer = 100003 + Public Const SLVS_C_PT_FACE_DISTANCE As Integer = 100004 + Public Const SLVS_C_PT_IN_PLANE As Integer = 100005 + Public Const SLVS_C_PT_ON_LINE As Integer = 100006 + Public Const SLVS_C_PT_ON_FACE As Integer = 100007 + Public Const SLVS_C_EQUAL_LENGTH_LINES As Integer = 100008 + Public Const SLVS_C_LENGTH_RATIO As Integer = 100009 + Public Const SLVS_C_EQ_LEN_PT_LINE_D As Integer = 100010 + Public Const SLVS_C_EQ_PT_LN_DISTANCES As Integer = 100011 + Public Const SLVS_C_EQUAL_ANGLE As Integer = 100012 + Public Const SLVS_C_EQUAL_LINE_ARC_LEN As Integer = 100013 + Public Const SLVS_C_SYMMETRIC As Integer = 100014 + Public Const SLVS_C_SYMMETRIC_HORIZ As Integer = 100015 + Public Const SLVS_C_SYMMETRIC_VERT As Integer = 100016 + Public Const SLVS_C_SYMMETRIC_LINE As Integer = 100017 + Public Const SLVS_C_AT_MIDPOINT As Integer = 100018 + Public Const SLVS_C_HORIZONTAL As Integer = 100019 + Public Const SLVS_C_VERTICAL As Integer = 100020 + Public Const SLVS_C_DIAMETER As Integer = 100021 + Public Const SLVS_C_PT_ON_CIRCLE As Integer = 100022 + Public Const SLVS_C_SAME_ORIENTATION As Integer = 100023 + Public Const SLVS_C_ANGLE As Integer = 100024 + Public Const SLVS_C_PARALLEL As Integer = 100025 + Public Const SLVS_C_PERPENDICULAR As Integer = 100026 + Public Const SLVS_C_ARC_LINE_TANGENT As Integer = 100027 + Public Const SLVS_C_CUBIC_LINE_TANGENT As Integer = 100028 + Public Const SLVS_C_EQUAL_RADIUS As Integer = 100029 + Public Const SLVS_C_PROJ_PT_DISTANCE As Integer = 100030 + Public Const SLVS_C_WHERE_DRAGGED As Integer = 100031 + Public Const SLVS_C_CURVE_CURVE_TANGENT As Integer = 100032 + Public Const SLVS_C_LENGTH_DIFFERENCE As Integer = 100033 + + Public Structure Slvs_Constraint + Public h As UInteger + Public group As UInteger + + Public type As Integer + + Public wrkpl As UInteger + + Public valA As Double + Public ptA As UInteger + Public ptB As UInteger + Public entityA As UInteger + Public entityB As UInteger + Public entityC As UInteger + Public entityD As UInteger + + Public other As Integer + Public other2 As Integer + End Structure + + Public Const SLVS_RESULT_OKAY As Integer = 0 + Public Const SLVS_RESULT_INCONSISTENT As Integer = 1 + Public Const SLVS_RESULT_DIDNT_CONVERGE As Integer = 2 + Public Const SLVS_RESULT_TOO_MANY_UNKNOWNS As Integer = 3 + + Public Structure Slvs_System + Public param As IntPtr + Public params As Integer + Public entity As IntPtr + Public entities As Integer + Public constraint As IntPtr + Public constraints As Integer + + Public dragged0 As UInteger + Public dragged1 As UInteger + Public dragged2 As UInteger + Public dragged3 As UInteger + + Public calculatedFaileds As Integer + + Public failed As IntPtr + Public faileds As Integer + + Public dof As Integer + + Public result As Integer + End Structure + + Dim Params As New List(Of Slvs_Param) + Dim Entities As New List(Of Slvs_Entity) + Dim Constraints As New List(Of Slvs_Constraint) + + Dim Faileds As New List(Of UInteger) + + Dim Result As Integer + Dim Dof As Integer + + ' Return the value of a parameter, by its handle. This function + ' may be used, for example, to obtain the new values of the + ' parameters after a call to Solve(). + Public Function GetParamByHandle(ByVal h As UInteger) As Double + Dim t As Slvs_Param + For Each t In Params + If (t.h = h) Then + Return t.val + End If + Next + Throw New Exception("Invalid parameter handle.") + End Function + + ' Return the value of a parameter, by its index in the list (where + ' that index is determined by the order in which the parameters + ' were inserted with AddParam(), not by its handle). + Public Function GetParamByIndex(ByVal i As Integer) As Double + Return Params(i).val + End Function + + ' Get the result after a call to Solve(). This may be + ' SLVS_RESULT_OKAY - it worked + ' SLVS_RESULT_INCONSISTENT - failed, inconsistent + ' SLVS_RESULT_DIDNT_CONVERGE - consistent, but still failed + ' SLVS_RESULT_TOO_MANY_UNKNOWNS - too many parameters in one group + Public Function GetResult() As Integer + Return Result + End Function + + ' After a call to Solve(), this returns the number of unconstrained + ' degrees of freedom for the sketch. + Public Function GetDof() As Integer + Return Dof + End Function + + ' After a failing call to Solve(), this returns the list of + ' constraints, identified by ther handle, that would fix the + ' system if they were deleted. This list will be populated only + ' if calculateFaileds is True in the Solve() call. + Public Function GetFaileds() As List(Of UInteger) + Return Faileds + End Function + + ' Clear our lists of entities, constraints, and parameters. + Public Sub ResetAll() + Params.Clear() + Entities.Clear() + Constraints.Clear() + End Sub + + + ''''''''''''''''''''''''''''''' + ' These functions are broadly similar to the Slvs_Make... + ' functions in slvs.h. See the file DOC.txt accompanying the + ' library for details. + + Public Sub AddParam(ByVal h As UInteger, ByVal group As UInteger, + ByVal val As Double) + Dim p As Slvs_Param + p.h = h + p.group = group + p.val = val + Params.Add(p) + End Sub + + Public Sub AddPoint2d(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal u As UInteger, ByVal v As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_POINT_IN_2D + e.wrkpl = wrkpl + e.param0 = u + e.param1 = v + Entities.Add(e) + End Sub + + Public Sub AddPoint3d(ByVal h As UInteger, ByVal group As UInteger, + ByVal x As UInteger, ByVal y As UInteger, ByVal z As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_POINT_IN_3D + e.wrkpl = SLVS_FREE_IN_3D + e.param0 = x + e.param1 = y + e.param2 = z + Entities.Add(e) + End Sub + + Public Sub AddNormal3d(ByVal h As UInteger, ByVal group As UInteger, + ByVal qw As UInteger, ByVal qx As UInteger, + ByVal qy As UInteger, ByVal qz As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_NORMAL_IN_3D + e.wrkpl = SLVS_FREE_IN_3D + e.param0 = qw + e.param1 = qx + e.param2 = qy + e.param3 = qz + Entities.Add(e) + End Sub + + Public Sub AddNormal2d(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_NORMAL_IN_2D + e.wrkpl = wrkpl + Entities.Add(e) + End Sub + + Public Sub AddDistance(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, ByVal d As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_DISTANCE + e.wrkpl = wrkpl + e.param0 = d + Entities.Add(e) + End Sub + + Public Sub AddLineSegment(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal ptA As UInteger, ByVal ptB As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_LINE_SEGMENT + e.wrkpl = wrkpl + e.point0 = ptA + e.point1 = ptB + Entities.Add(e) + End Sub + + Public Sub AddCubic(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal pt0 As UInteger, ByVal pt1 As UInteger, + ByVal pt2 As UInteger, ByVal pt3 As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_CUBIC + e.wrkpl = wrkpl + e.point0 = pt0 + e.point1 = pt1 + e.point2 = pt2 + e.point3 = pt3 + Entities.Add(e) + End Sub + + Public Sub AddArcOfCircle(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal normal As UInteger, + ByVal center As UInteger, + ByVal pstart As UInteger, + ByVal pend As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_ARC_OF_CIRCLE + e.wrkpl = wrkpl + e.normal = normal + e.point0 = center + e.point1 = pstart + e.point2 = pend + Entities.Add(e) + End Sub + + Public Sub AddCircle(ByVal h As UInteger, ByVal group As UInteger, + ByVal wrkpl As UInteger, + ByVal center As UInteger, ByVal normal As UInteger, + ByVal radius As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_CIRCLE + e.wrkpl = wrkpl + e.point0 = center + e.normal = normal + e.distance = radius + Entities.Add(e) + End Sub + + Public Sub AddWorkplane(ByVal h As UInteger, ByVal group As UInteger, + ByVal origin As UInteger, + ByVal normal As UInteger) + Dim e As Slvs_Entity + e.h = h + e.group = group + e.type = SLVS_E_WORKPLANE + e.wrkpl = SLVS_FREE_IN_3D + e.point0 = origin + e.normal = normal + Entities.Add(e) + End Sub + + Public Sub AddConstraint(ByVal h As UInteger, + ByVal group As UInteger, + ByVal type As Integer, + ByVal wrkpl As UInteger, + ByVal valA As Double, + ByVal ptA As UInteger, + ByVal ptB As UInteger, + ByVal entityA As UInteger, + ByVal entityB As UInteger) + Dim c As Slvs_Constraint + c.h = h + c.group = group + c.type = type + c.wrkpl = wrkpl + c.valA = valA + c.ptA = ptA + c.ptB = ptB + c.entityA = entityA + c.entityB = entityB + Constraints.Add(c) + End Sub + + ' Solve the system. The geometry of the system must already have + ' been specified through the Add...() calls. The result of the + ' solution process may be obtained by calling GetResult(), + ' GetFaileds(), GetDof(), and GetParamByXXX(). + ' + ' The parameters draggedx (indicated by their handles) will be held + ' as close as possible to their original positions, even if this + ' results in large moves for other parameters. This feature may be + ' useful if, for example, the user is dragging the point whose + ' location is defined by those parameters. Unused draggedx + ' parameters may be specified as zero. + Public Sub Solve(ByVal group As UInteger, + ByVal dragged0 As UInteger, ByVal dragged1 As UInteger, + ByVal dragged2 As UInteger, ByVal dragged3 As UInteger, + ByVal calculateFaileds As Boolean) + Dim i As Integer + + Dim pp, p(Params.Count()) As Slvs_Param + i = 0 + For Each pp In Params + p(i) = pp + i += 1 + Next + + Dim ee, e(Entities.Count()) As Slvs_Entity + i = 0 + For Each ee In Entities + e(i) = ee + i += 1 + Next + + Dim cc, c(Constraints.Count()) As Slvs_Constraint + i = 0 + For Each cc In Constraints + c(i) = cc + i += 1 + Next + Dim f(Constraints.Count()) As UInteger + + Dim sys As Slvs_System + + Dim pgc, egc, cgc As GCHandle + pgc = GCHandle.Alloc(p, GCHandleType.Pinned) + sys.param = pgc.AddrOfPinnedObject() + sys.params = Params.Count() + egc = GCHandle.Alloc(e, GCHandleType.Pinned) + sys.entity = egc.AddrOfPinnedObject() + sys.entities = Entities.Count() + cgc = GCHandle.Alloc(c, GCHandleType.Pinned) + sys.constraint = cgc.AddrOfPinnedObject() + sys.constraints = Constraints.Count() + + sys.dragged0 = dragged0 + sys.dragged1 = dragged1 + sys.dragged2 = dragged2 + sys.dragged3 = dragged3 + + Dim fgc As GCHandle + fgc = GCHandle.Alloc(f, GCHandleType.Pinned) + If calculateFaileds Then + sys.calculatedFaileds = 1 + Else + sys.calculatedFaileds = 0 + End If + sys.faileds = Constraints.Count() + sys.failed = fgc.AddrOfPinnedObject() + + Dim sysgc As GCHandle + sysgc = GCHandle.Alloc(sys, GCHandleType.Pinned) + + Slvs_Solve(sysgc.AddrOfPinnedObject(), group) + + sys = sysgc.Target + + For i = 0 To Params.Count() - 1 + Params(i) = p(i) + Next + + Faileds.Clear() + For i = 0 To sys.faileds - 1 + Faileds.Add(f(i)) + Next + + sysgc.Free() + fgc.Free() + pgc.Free() + egc.Free() + cgc.Free() + + Result = sys.result + Dof = sys.dof + End Sub + ' A simpler version of the function, if the parameters being dragged + ' correspond to a single point. + Public Sub Solve(ByVal group As UInteger, ByVal dragged As Point, + ByVal calculatedFaileds As Boolean) + If TypeOf dragged Is Point2d Then + Dim p As Point2d + p = dragged + Solve(group, p.up.H, p.vp.H, 0, 0, calculatedFaileds) + ElseIf TypeOf dragged Is Point3d Then + Dim p As Point3d + p = dragged + Solve(group, p.xp.H, p.yp.H, p.zp.H, 0, calculatedFaileds) + Else + Throw New Exception("Can't get dragged params for point.") + End If + End Sub + ' or if it's a single distance (e.g., the radius of a circle) + Public Sub Solve(ByVal group As UInteger, ByVal dragged As Distance, + ByVal calculatedFaileds As Boolean) + Solve(group, dragged.dp.H, 0, 0, 0, calculatedFaileds) + End Sub + ' or if it's nothing. + Public Sub Solve(ByVal group As UInteger, + ByVal calculateFaileds As Boolean) + Solve(group, 0, 0, 0, 0, calculateFaileds) + End Sub + + ' Return the quaternion in (qw, qx, qy, qz) that represents a + ' rotation from the base frame to a coordinate system with the + ' specified basis vectors u and v. For example, u = (0, 1, 0) + ' and v = (0, 0, 1) specifies the yz plane, such that a point with + ' (u, v) = (7, 12) has (x, y, z) = (0, 7, 12). + Public Sub MakeQuaternion( + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double, + ByRef qw As Double, ByRef qx As Double, ByRef qy As Double, + ByRef qz As Double) + Slvs_MakeQuaternion(ux, uy, uz, _ + vx, vy, vz, _ + qw, qx, qy, qz) + End Sub + + Public Function FreeIn3d() + Return New Workplane(Me) + End Function + + + ''''''''''''''''''''''''''''''' + ' Functions to create the object-oriented wrappers defined below. + + Public Function NewParam(ByVal group As UInteger, ByVal val As Double) + Return New Param(Me, group, val) + End Function + Public Function NewPoint2d(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Double, ByVal v As Double) + Return New Point2d(Me, group, wrkpl, u, v) + End Function + Public Function NewPoint2d(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Param, ByVal v As Param) + Return New Point2d(Me, group, wrkpl, u, v) + End Function + Public Function NewPoint3d(ByVal group As UInteger, + ByVal x As Double, + ByVal y As Double, + ByVal z As Double) + Return New Point3d(Me, group, x, y, z) + End Function + Public Function NewPoint3d(ByVal group As UInteger, + ByVal x As Param, + ByVal y As Param, + ByVal z As Param) + Return New Point3d(Me, group, x, y, z) + End Function + Public Function NewNormal3d(ByVal group As UInteger, + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double) + Return New Normal3d(Me, group, ux, uy, uz, vx, vy, vz) + End Function + Public Function NewNormal3d(ByVal group As UInteger, + ByVal qw As Param, ByVal qx As Param, + ByVal qy As Param, ByVal qz As Param) + Return New Normal3d(Me, group, qw, qx, qy, qz) + End Function + Public Function NewNormal2d(ByVal group As UInteger, + ByVal wrkpl As Workplane) + Return New Normal2d(Me, group, wrkpl) + End Function + Public Function NewDistance(ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Double) + Return New Distance(Me, group, wrkpl, d) + End Function + Public Function NewDistance(ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Param) + Return New Distance(Me, group, wrkpl, d) + End Function + Public Function NewLineSegment(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal ptA As Point, ByVal ptB As Point) + Return New LineSegment(Me, group, wrkpl, ptA, ptB) + End Function + Public Function NewArcOfCircle(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal normal As Normal, + ByVal center As Point, + ByVal pstart As Point, + ByVal pend As Point) + Return New ArcOfCircle(Me, group, wrkpl, normal, _ + center, pstart, pend) + End Function + Public Function NewCircle(ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal center As Point, + ByVal normal As Normal, + ByVal radius As Distance) + Return New Circle(Me, group, wrkpl, center, normal, radius) + End Function + Public Function NewWorkplane(ByVal group As UInteger, + ByVal origin As Point, + ByVal normal As Normal) + Return New Workplane(Me, group, origin, normal) + End Function + + Public Sub AddConstraint(ByVal H As UInteger, ByVal group As UInteger, + ByVal type As Integer, + ByVal wrkpl As Workplane, + ByVal valA As Double, + ByVal ptA As Point, ByVal ptB As Point, + ByVal entityA As Entity, + ByVal entityB As Entity) + AddConstraint(H, group, type, _ + If(IsNothing(wrkpl), 0, wrkpl.H), _ + valA, _ + If(IsNothing(ptA), 0, ptA.H), _ + If(IsNothing(ptB), 0, ptB.H), _ + If(IsNothing(entityA), 0, entityA.H), _ + If(IsNothing(entityB), 0, entityB.H)) + End Sub + + + ''''''''''''''''''''''''''''''' + ' The object-oriented wrapper classes themselves, to allow the + ' representation of entities and constraints as .net objects, not + ' integer handles. These don't do any work themselves, beyond + ' allocating and storing a unique integer handle. + ' + ' These functions will assign parameters and entities with + ' consecutive handles starting from 1. If they are intermixed + ' with parameters and entities with user-specified handles, then + ' those handles must be chosen not to conflict, e.g. starting + ' from 100 000 or another large number. + + Public Class Param + Public Slv As Slvs + Public H As UInteger + + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal val As Double) + Slv = s + H = Slv.Params.Count() + 1 + Slv.AddParam(H, group, val) + End Sub + End Class + + Public MustInherit Class Entity + Public Slv As Slvs + Public H As UInteger + + Public Sub New(ByVal s As Slvs) + Slv = s + H = Slv.Entities.Count() + 1 + End Sub + End Class + + Public MustInherit Class Point + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + End Sub + End Class + + Public MustInherit Class Normal + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + End Sub + End Class + + Public Class Point2d + Inherits Point + Public up, vp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Double, ByVal v As Double) + MyBase.New(s) + up = New Param(Slv, group, u) + vp = New Param(Slv, group, v) + Slv.AddPoint2d(H, group, wrkpl.H, up.H, vp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal u As Param, ByVal v As Param) + MyBase.New(s) + Slv.AddPoint2d(H, group, wrkpl.H, u.H, v.H) + up = u + vp = v + End Sub + Function GetU() + Return Slv.GetParamByHandle(up.H) + End Function + Function GetV() + Return Slv.GetParamByHandle(vp.H) + End Function + End Class + + Public Class Point3d + Inherits Point + Public xp, yp, zp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal x As Double, ByVal y As Double, + ByVal z As Double) + MyBase.New(s) + xp = New Param(Slv, group, x) + yp = New Param(Slv, group, y) + zp = New Param(Slv, group, z) + Slv.AddPoint3d(H, group, xp.H, yp.H, zp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal x As Param, ByVal y As Param, ByVal z As Param) + MyBase.New(s) + Slv.AddPoint3d(H, group, x.H, y.H, z.H) + xp = x + yp = y + zp = z + End Sub + Function GetX() + Return Slv.GetParamByHandle(xp.H) + End Function + Function GetY() + Return Slv.GetParamByHandle(yp.H) + End Function + Function GetZ() + Return Slv.GetParamByHandle(zp.H) + End Function + End Class + + Public Class Normal3d + Inherits Normal + Dim qwp, qxp, qyp, qzp As Param + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal ux As Double, ByVal uy As Double, ByVal uz As Double, + ByVal vx As Double, ByVal vy As Double, ByVal vz As Double) + MyBase.New(s) + Dim qw, qx, qy, qz As Double + Slv.MakeQuaternion(ux, uy, uz, vx, vy, vz, qw, qx, qy, qz) + qwp = New Param(Slv, group, qw) + qxp = New Param(Slv, group, qx) + qyp = New Param(Slv, group, qy) + qzp = New Param(Slv, group, qz) + Slv.AddNormal3d(H, group, qwp.H, qxp.H, qyp.H, qzp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal qw As Param, ByVal qx As Param, + ByVal qy As Param, ByVal qz As Param) + MyBase.New(s) + Slv.AddNormal3d(H, group, qw.H, qx.H, qy.H, qz.H) + qwp = qw + qxp = qx + qyp = qy + qzp = qz + End Sub + End Class + + Public Class Normal2d + Inherits Normal + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane) + MyBase.New(s) + Slv.AddNormal2d(H, group, wrkpl.H) + End Sub + End Class + + Public Class Distance + Inherits Entity + Public dp As Param + + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Double) + MyBase.New(s) + dp = New Param(Slv, group, d) + Slv.AddDistance(H, group, wrkpl.H, dp.H) + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal d As Param) + MyBase.New(s) + Slv.AddDistance(H, group, wrkpl.H, d.H) + dp = d + End Sub + Function GetDistance() As Double + Return Slv.GetParamByHandle(dp.H) + End Function + End Class + + Public Class LineSegment + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal ptA As Point, ByVal ptB As Point) + MyBase.New(s) + Slv.AddLineSegment(H, group, wrkpl.H, ptA.H, ptB.H) + End Sub + End Class + + Public Class Cubic + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, + ByVal pt0 As Point, ByVal pt1 As Point, + ByVal pt2 As Point, ByVal pt3 As Point) + MyBase.New(s) + Slv.AddCubic(H, group, wrkpl.H, pt0.H, pt1.H, pt2.H, pt3.H) + End Sub + End Class + + Public Class ArcOfCircle + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal normal As Normal, + ByVal center As Point, ByVal pstart As Point, + ByVal pend As Point) + MyBase.New(s) + Slv.AddArcOfCircle(H, group, wrkpl.H, normal.H, _ + center.H, pstart.H, pend.H) + End Sub + End Class + + Public Class Circle + Inherits Entity + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal wrkpl As Workplane, ByVal center As Point, + ByVal normal As Normal, ByVal radius As Distance) + MyBase.New(s) + Slv.AddCircle(H, group, wrkpl.H, center.H, normal.H, radius.H) + End Sub + End Class + + Public Class Workplane + Inherits Entity + Public Sub New(ByVal s As Slvs) + MyBase.New(s) + H = SLVS_FREE_IN_3D + End Sub + Public Sub New(ByVal s As Slvs, ByVal group As UInteger, + ByVal origin As Point, ByVal normal As Normal) + MyBase.New(s) + Slv.AddWorkplane(H, group, origin.H, normal.H) + End Sub + End Class + + End Class + +End Module + diff --git a/extlib/libdxfrw/CMakeLists.txt b/extlib/libdxfrw/CMakeLists.txt new file mode 100644 index 0000000..564e91a --- /dev/null +++ b/extlib/libdxfrw/CMakeLists.txt @@ -0,0 +1,75 @@ +if(MSVC) + # Disable some overly strict MSVC warnings. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244 -wd4800 -wd4805") +endif() + +set(intern_HEADERS + intern/drw_cptable932.h + intern/drw_cptable936.h + intern/drw_cptable949.h + intern/drw_cptable950.h + intern/drw_cptables.h + intern/drw_dbg.h + intern/drw_textcodec.h + intern/dwgbuffer.h + intern/dwgreader15.h + intern/dwgreader18.h + intern/dwgreader21.h + intern/dwgreader24.h + intern/dwgreader27.h + intern/dwgreader.h + intern/dwgutil.h + intern/dxfreader.h + intern/dxfwriter.h + intern/rscodec.h) + +set(intern_SOURCES + intern/drw_dbg.cpp + intern/drw_textcodec.cpp + intern/dwgbuffer.cpp + intern/dwgreader15.cpp + intern/dwgreader18.cpp + intern/dwgreader21.cpp + intern/dwgreader24.cpp + intern/dwgreader27.cpp + intern/dwgreader.cpp + intern/dwgutil.cpp + intern/dxfreader.cpp + intern/dxfwriter.cpp + intern/rscodec.cpp) + +set(libdxfrw_HEADERS + drw_base.h + drw_interface.h + drw_header.h + drw_classes.h + drw_entities.h + drw_objects.h + libdxfrw.h) + +set(libdxfrw_SOURCES + drw_header.cpp + drw_classes.cpp + drw_entities.cpp + drw_objects.cpp + libdxfrw.cpp) + +set(libdwgr_HEADERS + libdwgr.h) + +set(libdwgr_SOURCES + libdwgr.cpp) + +add_library(dxfrw STATIC + ${intern_HEADERS} + ${intern_SOURCES} + ${libdxfrw_HEADERS} + ${libdxfrw_SOURCES} + ${libdwgr_HEADERS} + ${libdwgr_SOURCES}) + +target_include_directories(dxfrw PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/intern/) + +target_include_directories(dxfrw PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/) diff --git a/extlib/libdxfrw/drw_base.h b/extlib/libdxfrw/drw_base.h new file mode 100644 index 0000000..648f3e6 --- /dev/null +++ b/extlib/libdxfrw/drw_base.h @@ -0,0 +1,480 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_BASE_H +#define DRW_BASE_H + +#define DRW_VERSION "0.6.3" + +#include +#include +#include + +#ifdef DRW_ASSERTS +# define drw_assert(a) assert(a) +#else +# define drw_assert(a) +#endif + +#define UTF8STRING std::string +#define DRW_UNUSED(x) (void)x + +#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) +# define DRW_WIN +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) +# define DRW_WIN +#elif defined(__MWERKS__) && defined(__INTEL__) +# define DRW_WIN +#else +# define DRW_POSIX +#endif + +#ifndef M_PI + #define M_PI 3.141592653589793238462643 +#endif +#ifndef M_PI_2 + #define M_PI_2 1.57079632679489661923 +#endif +#define M_PIx2 6.283185307179586 // 2*PI +#define ARAD 57.29577951308232 + +typedef signed char dint8; /* 8 bit signed */ +typedef signed short dint16; /* 16 bit signed */ +typedef signed int dint32; /* 32 bit signed */ +typedef long long int dint64; /* 64 bit signed */ + +typedef unsigned char duint8; /* 8 bit unsigned */ +typedef unsigned short duint16; /* 16 bit unsigned */ +typedef unsigned int duint32; /* 32 bit unsigned */ +typedef unsigned long long int duint64; /* 64 bit unsigned */ + +typedef float dfloat32; /* 32 bit floating point */ +typedef double ddouble64; /* 64 bit floating point */ +typedef long double ddouble80; /* 80 bit floating point */ + + +namespace DRW { + +//! Version numbers for the DXF Format. +enum Version { + UNKNOWNV, /*!< UNKNOWN VERSION. */ + AC1006, /*!< R10. */ + AC1009, /*!< R11 & R12. */ + AC1012, /*!< R13. */ + AC1014, /*!< R14. */ + AC1015, /*!< ACAD 2000. */ + AC1018, /*!< ACAD 2004. */ + AC1021, /*!< ACAD 2007. */ + AC1024, /*!< ACAD 2010. */ + AC1027 /*!< ACAD 2013. */ +}; + +enum error { +BAD_NONE, /*!< No error. */ +BAD_UNKNOWN, /*!< UNKNOWN. */ +BAD_OPEN, /*!< error opening file. */ +BAD_VERSION, /*!< unsupported version. */ +BAD_READ_METADATA, /*!< error reading matadata. */ +BAD_READ_FILE_HEADER, /*!< error in file header read process. */ +BAD_READ_HEADER, /*!< error in header vars read process. */ +BAD_READ_HANDLES, /*!< error in object map read process. */ +BAD_READ_CLASSES, /*!< error in classes read process. */ +BAD_READ_TABLES, /*!< error in tables read process. */ +BAD_READ_BLOCKS, /*!< error in block read process. */ +BAD_READ_ENTITIES, /*!< error in entities read process. */ +BAD_READ_OBJECTS /*!< error in objects read process. */ +}; + +enum DBG_LEVEL { + NONE, + DEBUG +}; + +//! Special codes for colors +enum ColorCodes { + ColorByLayer = 256, + ColorByBlock = 0 +}; + +//! Spaces +enum Space { + ModelSpace = 0, + PaperSpace = 1 +}; + +//! Special kinds of handles +enum HandleCodes { + NoHandle = 0 +}; + +//! Shadow mode +enum ShadowMode { + CastAndReceieveShadows = 0, + CastShadows = 1, + ReceiveShadows = 2, + IgnoreShadows = 3 +}; + +//! Special kinds of materials +enum MaterialCodes { + MaterialByLayer = 0 +}; + +//! Special kinds of plot styles +enum PlotStyleCodes { + DefaultPlotStyle = 0 +}; + +//! Special kinds of transparencies +enum TransparencyCodes { + Opaque = 0, + Transparent = -1 +}; + +} // namespace DRW + +//! Class to handle 3D coordinate point +/*! +* Class to handle 3D coordinate point +* @author Rallaz +*/ +class DRW_Coord { +public: + DRW_Coord() { x = 0; y = 0; z = 0; } + DRW_Coord(double ix, double iy, double iz) { + x = ix; y = iy; z = iz; + } + + DRW_Coord operator = (const DRW_Coord& data) { + x = data.x; y = data.y; z = data.z; + return *this; + } +/*!< convert to unitary vector */ + void unitize(){ + double dist; + dist = sqrt(x*x + y*y + z*z); + if (dist > 0.0) { + x= x/dist; + y= y/dist; + z= z/dist; + } + } + +public: + double x; + double y; + double z; +}; + + +//! Class to handle vertex +/*! +* Class to handle vertex for lwpolyline entity +* @author Rallaz +*/ +class DRW_Vertex2D { +public: + DRW_Vertex2D() { +// eType = DRW::LWPOLYLINE; + stawidth = endwidth = bulge = 0; + } + DRW_Vertex2D(double sx, double sy, double b) { + stawidth = endwidth = 0; + x = sx; + y =sy; + bulge = b; + } + +public: + double x; /*!< x coordinate, code 10 */ + double y; /*!< y coordinate, code 20 */ + double stawidth; /*!< Start width, code 40 */ + double endwidth; /*!< End width, code 41 */ + double bulge; /*!< bulge, code 42 */ +}; + + +//! Class to handle header vars +/*! +* Class to handle header vars +* @author Rallaz +*/ +class DRW_Variant { +public: + enum TYPE { + STRING, + INTEGER, + DOUBLE, + COORD, + INVALID + }; +//TODO: add INT64 support + DRW_Variant() { + type = INVALID; + } + + DRW_Variant(int c, dint32 i) { + code = c; addInt(i); + } + DRW_Variant(int c, duint32 i) { + code = c; addInt(static_cast(i));//RLZ: verify if worrk with big numbers + } + DRW_Variant(int c, double d) { + code = c; addDouble(d); + } + DRW_Variant(int c, UTF8STRING s) { + code = c; addString(s); + } + DRW_Variant(int c, DRW_Coord crd) { + code = c; addCoord(crd); + } + DRW_Variant(const DRW_Variant& d) { + code = d.code; + type = d.type; + content = d.content; + if (d.type == COORD) { + vdata = d.vdata; + content.v = &vdata; + } + if (d.type == STRING) { + sdata = d.sdata; + content.s = &sdata; + } + } + + ~DRW_Variant() { + } + + void addString(UTF8STRING s) {setType(STRING); sdata = s; content.s = &sdata;} + void addInt(int i) {setType(INTEGER); content.i = i;} + void addDouble(double d) {setType(DOUBLE); content.d = d;} + void addCoord() {setType(COORD); vdata.x=0.0; vdata.y=0.0; vdata.z=0.0; content.v = &vdata;} + void addCoord(DRW_Coord v) {setType(COORD); vdata = v; content.v = &vdata;} + void setType(enum TYPE t) { type = t;} + void setCoordX(double d) { if (type == COORD) vdata.x = d;} + void setCoordY(double d) { if (type == COORD) vdata.y = d;} + void setCoordZ(double d) { if (type == COORD) vdata.z = d;} + +private: + typedef union { + UTF8STRING *s; + dint32 i; + double d; + DRW_Coord *v; + } DRW_VarContent; + +public: + DRW_VarContent content; + enum TYPE type; + int code; /*!< dxf code of this value*/ + +private: + std::string sdata; + DRW_Coord vdata; +}; + +//! Class to handle dwg handles +/*! +* Class to handle dwg handles +* @author Rallaz +*/ +class dwgHandle{ +public: + dwgHandle(){ + code=0; + size=0; + ref=0; + } + ~dwgHandle(){} + duint8 code; + duint8 size; + duint32 ref; +}; + +//! Class to convert between line width and integer +/*! +* Class to convert between line width and integer +* verifing valid values, if value is not valid +* returns widthDefault. +* @author Rallaz +*/ +class DRW_LW_Conv{ +public: + enum lineWidth { + width00 = 0, /*!< 0.00mm (dxf 0)*/ + width01 = 1, /*!< 0.05mm (dxf 5)*/ + width02 = 2, /*!< 0.09mm (dxf 9)*/ + width03 = 3, /*!< 0.13mm (dxf 13)*/ + width04 = 4, /*!< 0.15mm (dxf 15)*/ + width05 = 5, /*!< 0.18mm (dxf 18)*/ + width06 = 6, /*!< 0.20mm (dxf 20)*/ + width07 = 7, /*!< 0.25mm (dxf 25)*/ + width08 = 8, /*!< 0.30mm (dxf 30)*/ + width09 = 9, /*!< 0.35mm (dxf 35)*/ + width10 = 10, /*!< 0.40mm (dxf 40)*/ + width11 = 11, /*!< 0.50mm (dxf 50)*/ + width12 = 12, /*!< 0.53mm (dxf 53)*/ + width13 = 13, /*!< 0.60mm (dxf 60)*/ + width14 = 14, /*!< 0.70mm (dxf 70)*/ + width15 = 15, /*!< 0.80mm (dxf 80)*/ + width16 = 16, /*!< 0.90mm (dxf 90)*/ + width17 = 17, /*!< 1.00mm (dxf 100)*/ + width18 = 18, /*!< 1.06mm (dxf 106)*/ + width19 = 19, /*!< 1.20mm (dxf 120)*/ + width20 = 20, /*!< 1.40mm (dxf 140)*/ + width21 = 21, /*!< 1.58mm (dxf 158)*/ + width22 = 22, /*!< 2.00mm (dxf 200)*/ + width23 = 23, /*!< 2.11mm (dxf 211)*/ + widthByLayer = 29, /*!< by layer (dxf -1) */ + widthByBlock = 30, /*!< by block (dxf -2) */ + widthDefault = 31 /*!< by default (dxf -3) */ + }; + + static int lineWidth2dxfInt(enum lineWidth lw){ + switch (lw){ + case widthByLayer: + return -1; + case widthByBlock: + return -2; + case widthDefault: + return -3; + case width00: + return 0; + case width01: + return 5; + case width02: + return 9; + case width03: + return 13; + case width04: + return 15; + case width05: + return 18; + case width06: + return 20; + case width07: + return 25; + case width08: + return 30; + case width09: + return 35; + case width10: + return 40; + case width11: + return 50; + case width12: + return 53; + case width13: + return 60; + case width14: + return 70; + case width15: + return 80; + case width16: + return 90; + case width17: + return 100; + case width18: + return 106; + case width19: + return 120; + case width20: + return 140; + case width21: + return 158; + case width22: + return 200; + case width23: + return 211; + default: + break; + } + return -3; + } + + static int lineWidth2dwgInt(enum lineWidth lw){ + return static_cast (lw); + } + + static enum lineWidth dxfInt2lineWidth(int i){ + if (i<0) { + if (i==-1) + return widthByLayer; + else if (i==-2) + return widthByBlock; + else if (i==-3) + return widthDefault; + } else if (i<3) { + return width00; + } else if (i<7) { + return width01; + } else if (i<11) { + return width02; + } else if (i<14) { + return width03; + } else if (i<16) { + return width04; + } else if (i<19) { + return width05; + } else if (i<22) { + return width06; + } else if (i<27) { + return width07; + } else if (i<32) { + return width08; + } else if (i<37) { + return width09; + } else if (i<45) { + return width10; + } else if (i<52) { + return width11; + } else if (i<57) { + return width12; + } else if (i<65) { + return width13; + } else if (i<75) { + return width14; + } else if (i<85) { + return width15; + } else if (i<95) { + return width16; + } else if (i<103) { + return width17; + } else if (i<112) { + return width18; + } else if (i<130) { + return width19; + } else if (i<149) { + return width20; + } else if (i<180) { + return width21; + } else if (i<205) { + return width22; + } else { + return width23; + } + //default by default + return widthDefault; + } + + static enum lineWidth dwgInt2lineWidth(int i){ + if ( (i>-1 && i<24) || (i>28 && i<32) ) { + return static_cast (i); + } + //default by default + return widthDefault; + } +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_classes.cpp b/extlib/libdxfrw/drw_classes.cpp new file mode 100644 index 0000000..02eb01d --- /dev/null +++ b/extlib/libdxfrw/drw_classes.cpp @@ -0,0 +1,115 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include "drw_classes.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" + +void DRW_Class::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + recName = reader->getUtf8String(); + break; + case 2: + className = reader->getUtf8String(); + break; + case 3: + appName = reader->getUtf8String(); + break; + case 90: + proxyFlag = reader->getInt32(); + break; + case 91: + instanceCount = reader->getInt32(); + break; + case 280: + wasaProxyFlag = reader->getInt32(); + break; + case 281: + entityFlag = reader->getInt32(); + break; + default: + break; + } +} + +bool DRW_Class::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf){ + DRW_DBG("\n***************************** parsing Class *********************************************\n"); + + classNum = buf->getBitShort(); + DRW_DBG("Class number: "); DRW_DBG(classNum); + proxyFlag = buf->getBitShort(); //in dwg specs says "version" + + appName = strBuf->getVariableText(version, false); + className = strBuf->getVariableText(version, false); + recName = strBuf->getVariableText(version, false); + + DRW_DBG("\napp name: "); DRW_DBG(appName.c_str()); + DRW_DBG("\nclass name: "); DRW_DBG(className.c_str()); + DRW_DBG("\ndxf rec name: "); DRW_DBG(recName.c_str()); + wasaProxyFlag = buf->getBit(); //in dwg says wasazombie + entityFlag = buf->getBitShort(); + entityFlag = entityFlag == 0x1F2 ? 1: 0; + + DRW_DBG("\nProxy capabilities flag: "); DRW_DBG(proxyFlag); + DRW_DBG(", proxy flag (280): "); DRW_DBG(wasaProxyFlag); + DRW_DBG(", entity flag: "); DRW_DBGH(entityFlag); + + if (version > DRW::AC1015) {//2004+ + instanceCount = buf->getBitLong(); + DRW_DBG("\nInstance Count: "); DRW_DBG(instanceCount); + duint32 dwgVersion = buf->getBitLong(); + DRW_DBG("\nDWG version: "); DRW_DBG(dwgVersion); + DRW_DBG("\nmaintenance version: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nunknown 1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nunknown 2: "); DRW_DBG(buf->getBitLong()); + } + DRW_DBG("\n"); + toDwgType(); + return buf->isGood(); +} + +void DRW_Class::write(dxfWriter *writer, DRW::Version ver){ + if (ver > DRW::AC1009) { + writer->writeString(0, "CLASS"); + writer->writeString(1, recName); + writer->writeString(2, className); + writer->writeString(3, appName); + writer->writeInt32(90, proxyFlag); + if (ver > DRW::AC1015) { //2004+ + writer->writeInt32(91, instanceCount); + } + writer->writeInt16(280, wasaProxyFlag); + writer->writeInt16(281, entityFlag); + } +} + +void DRW_Class::toDwgType(){ + if (recName == "LWPOLYLINE") + dwgType = 77; + else if (recName == "HATCH") + dwgType = 78; + else if (recName == "GROUP") + dwgType = 72; +/* else if (recName == "GROUP") + dwgType = 72;*/ + else if (recName == "LAYOUT") + dwgType = 82; + else if (recName == "IMAGE") + dwgType = 101; + else if (recName == "IMAGEDEF") + dwgType = 102; + else + dwgType =0; +} diff --git a/extlib/libdxfrw/drw_classes.h b/extlib/libdxfrw/drw_classes.h new file mode 100644 index 0000000..84ea32d --- /dev/null +++ b/extlib/libdxfrw/drw_classes.h @@ -0,0 +1,58 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_CLASSES_H +#define DRW_CLASSES_H + + +#include "drw_base.h" +//#include "libdwgr.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +//! Class to handle classes entries +/*! +* Class to handle classes table entries +* TODO: verify the dxf read/write part +* @author Rallaz +*/ +class DRW_Class { +public: + DRW_Class() { + } + ~DRW_Class() { + } + + void parseCode(int code, dxfReader *reader); + void write(dxfWriter *writer, DRW::Version ver); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf); + +private: + void toDwgType(); +public: + UTF8STRING recName; /*!< record name, code 1 */ + UTF8STRING className; /*!< C++ class name, code 2 */ + UTF8STRING appName; /*!< app name, code 3 */ + int proxyFlag; /*!< Proxy capabilities flag, code 90 */ + int instanceCount; /*!< number of instances for a custom class, code 91*/ + int wasaProxyFlag; /*!< proxy flag (app loaded on save), code 280 */ + int entityFlag; /*!< entity flag, code 281 (0 object, 1 entity)*/ +public: //only for read dwg + duint16 classNum; + int dwgType; +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_entities.cpp b/extlib/libdxfrw/drw_entities.cpp new file mode 100644 index 0000000..0265f56 --- /dev/null +++ b/extlib/libdxfrw/drw_entities.cpp @@ -0,0 +1,3064 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include "drw_entities.h" +#include "intern/dxfreader.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" + + +//! Calculate arbitary axis +/*! +* Calculate arbitary axis for apply extrusions +* @author Rallaz +*/ +void DRW_Entity::calculateAxis(DRW_Coord extPoint){ + //Follow the arbitrary DXF definitions for extrusion axes. + if (fabs(extPoint.x) < 0.015625 && fabs(extPoint.y) < 0.015625) { + //If we get here, implement Ax = Wy x N where Wy is [0,1,0] per the DXF spec. + //The cross product works out to Wy.y*N.z-Wy.z*N.y, Wy.z*N.x-Wy.x*N.z, Wy.x*N.y-Wy.y*N.x + //Factoring in the fixed values for Wy gives N.z,0,-N.x + extAxisX.x = extPoint.z; + extAxisX.y = 0; + extAxisX.z = -extPoint.x; + } else { + //Otherwise, implement Ax = Wz x N where Wz is [0,0,1] per the DXF spec. + //The cross product works out to Wz.y*N.z-Wz.z*N.y, Wz.z*N.x-Wz.x*N.z, Wz.x*N.y-Wz.y*N.x + //Factoring in the fixed values for Wz gives -N.y,N.x,0. + extAxisX.x = -extPoint.y; + extAxisX.y = extPoint.x; + extAxisX.z = 0; + } + + extAxisX.unitize(); + + //Ay = N x Ax + extAxisY.x = (extPoint.y * extAxisX.z) - (extAxisX.y * extPoint.z); + extAxisY.y = (extPoint.z * extAxisX.x) - (extAxisX.z * extPoint.x); + extAxisY.z = (extPoint.x * extAxisX.y) - (extAxisX.x * extPoint.y); + + extAxisY.unitize(); +} + +//! Extrude a point using arbitary axis +/*! +* apply extrusion in a point using arbitary axis (previous calculated) +* @author Rallaz +*/ +void DRW_Entity::extrudePoint(DRW_Coord extPoint, DRW_Coord *point){ + double px, py, pz; + px = (extAxisX.x*point->x)+(extAxisY.x*point->y)+(extPoint.x*point->z); + py = (extAxisX.y*point->x)+(extAxisY.y*point->y)+(extPoint.y*point->z); + pz = (extAxisX.z*point->x)+(extAxisY.z*point->y)+(extPoint.z*point->z); + + point->x = px; + point->y = py; + point->z = pz; +} + +bool DRW_Entity::parseCode(int code, dxfReader *reader){ + switch (code) { + case 5: + handle = reader->getHandleString(); + break; + case 330: + parentHandle = reader->getHandleString(); + break; + case 8: + layer = reader->getUtf8String(); + break; + case 6: + lineType = reader->getUtf8String(); + break; + case 62: + color = reader->getInt32(); + break; + case 370: + lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32()); + break; + case 48: + ltypeScale = reader->getDouble(); + break; + case 60: + visible = reader->getBool(); + break; + case 420: + color24 = reader->getInt32(); + break; + case 430: + colorName = reader->getString(); + break; + case 67: + space = static_cast(reader->getInt32()); + break; + case 102: + parseDxfGroups(code, reader); + break; + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + extData.push_back(new DRW_Variant(code, reader->getString())); + break; + case 1010: + case 1011: + case 1012: + case 1013: + curr = new DRW_Variant(); + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + extData.push_back(curr); + break; + case 1020: + case 1021: + case 1022: + case 1023: + if (curr) + curr->setCoordY(reader->getDouble()); + break; + case 1030: + case 1031: + case 1032: + case 1033: + if (curr) + curr->setCoordZ(reader->getDouble()); + curr=NULL; + break; + case 1040: + case 1041: + case 1042: + extData.push_back(new DRW_Variant(code, reader->getDouble() )); + break; + case 1070: + case 1071: + extData.push_back(new DRW_Variant(code, reader->getInt32() )); + break; + default: + break; + } + return true; +} + +//parses dxf 102 groups to read entity +bool DRW_Entity::parseDxfGroups(int code, dxfReader *reader){ + std::list ls; + DRW_Variant curr; + int nc; + std::string appName= reader->getString(); + if (!appName.empty() && appName.at(0)== '{'){ + curr.addString(appName.substr(1, (int) appName.size()-1)); + curr.code = code; + ls.push_back(curr); + while (code !=102 && appName.at(0)== '}'){ + reader->readRec(&nc); + curr.code = code; + if (code == 330 || code == 360) + curr.addInt(reader->getHandleString()); + else { + switch (reader->type) { + case dxfReader::STRING: + curr.addString(reader->getString()); + break; + case dxfReader::INT32: + case dxfReader::INT64: + curr.addInt(reader->getInt32()); + break; + case dxfReader::DOUBLE: + curr.addDouble(reader->getDouble()); + break; + case dxfReader::BOOL: + curr.addInt(reader->getInt32()); + break; + default: + break; + } + } + ls.push_back(curr); + } + } + + appData.push_back(ls); + return true; +} + +bool DRW_Entity::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs){ + objSize=0; + DRW_DBG("\n***************************** parsing entity *********************************************\n"); + oType = buf->getObjType(version); + DRW_DBG("Object type: "); DRW_DBG(oType); DRW_DBG(", "); DRW_DBGH(oType); + + if (version > DRW::AC1014 && version < DRW::AC1024) {//2000 & 2004 + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint32 ms = buf->size(); + objSize = ms*8 - bs; + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + + if (strBuf != NULL && version > DRW::AC1018) {//2007+ + strBuf->moveBitPos(objSize-1); + DRW_DBG(" strBuf strbit pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + if (strBuf->getBit() == 1){ + DRW_DBG("DRW_TableEntry::parseDwg string bit is 1\n"); + strBuf->moveBitPos(-17); + duint16 strDataSize = strBuf->getRawShort16(); + DRW_DBG("\nDRW_TableEntry::parseDwg string strDataSize: "); DRW_DBGH(strDataSize); DRW_DBG("\n"); + if ( (strDataSize& 0x8000) == 0x8000){ + DRW_DBG("\nDRW_TableEntry::parseDwg string 0x8000 bit is set"); + strBuf->moveBitPos(-33);//RLZ pending to verify + duint16 hiSize = strBuf->getRawShort16(); + strDataSize = ((strDataSize&0x7fff) | (hiSize<<15)); + } + strBuf->moveBitPos( -strDataSize -16); //-14 + DRW_DBG("strBuf start strDataSize pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } else + DRW_DBG("\nDRW_TableEntry::parseDwg string bit is 0"); + DRW_DBG("strBuf start pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } + + dwgHandle ho = buf->getHandle(); + handle = ho.ref; + DRW_DBG("Entity Handle: "); DRW_DBGHL(ho.code, ho.size, ho.ref); + dint16 extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + while (extDataSize>0 && buf->isGood()) { + /* RLZ: TODO */ + dwgHandle ah = buf->getHandle(); + DRW_DBG("App Handle: "); DRW_DBGHL(ah.code, ah.size, ah.ref); + duint8 *tmpExtData = new duint8[extDataSize]; + buf->getBytes(tmpExtData, extDataSize); + dwgBuffer tmpExtDataBuf(tmpExtData, extDataSize, buf->decoder); + + duint8 dxfCode = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfCode: "); DRW_DBG(dxfCode); + switch (dxfCode){ + case 0:{ + duint8 strLength = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" strLength: "); DRW_DBG(strLength); + duint16 cp = tmpExtDataBuf.getBERawShort16(); + DRW_DBG(" str codepage: "); DRW_DBG(cp); + for (int i=0;i< strLength+1;i++) {//string length + null terminating char + duint8 dxfChar = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfChar: "); DRW_DBG(dxfChar); + } + break; + } + default: + /* RLZ: TODO */ + break; + } + delete[]tmpExtData; + extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + } //end parsing extData (EED) + duint8 graphFlag = buf->getBit(); //B + DRW_DBG(" graphFlag: "); DRW_DBG(graphFlag); DRW_DBG("\n"); + if (graphFlag) { + duint32 graphDataSize = buf->getRawLong32(); //RL 32bits + DRW_DBG("graphData in bytes: "); DRW_DBG(graphDataSize); DRW_DBG("\n"); +// RLZ: TODO + //skip graphData bytes + duint8 *tmpGraphData = new duint8[graphDataSize]; + buf->getBytes(tmpGraphData, graphDataSize); + dwgBuffer tmpGraphDataBuf(tmpGraphData, graphDataSize, buf->decoder); + DRW_DBG("graph data remaining bytes: "); DRW_DBG(tmpGraphDataBuf.numRemainingBytes()); DRW_DBG("\n"); + delete[]tmpGraphData; + } + if (version < DRW::AC1015) {//14- + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size in bits: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + + duint8 entmode = buf->get2Bits(); //BB + if (entmode == 0) + ownerHandle= true; +// entmode = 2; + else if(entmode ==2) + entmode = 0; + space = (DRW::Space)entmode; //RLZ verify cast values + DRW_DBG("entmode: "); DRW_DBG(entmode); + numReactors = buf->getBitShort(); //BS + DRW_DBG(", numReactors: "); DRW_DBG(numReactors); + + if (version < DRW::AC1015) {//14- + if(buf->getBit()) {//is bylayer line type + lineType = "BYLAYER"; + ltFlags = 0; + } else { + lineType = ""; + ltFlags = 3; + } + DRW_DBG(" lineType: "); DRW_DBG(lineType.c_str()); + DRW_DBG(" ltFlags: "); DRW_DBG(ltFlags); + } + if (version > DRW::AC1015) {//2004+ + xDictFlag = buf->getBit(); + DRW_DBG(" xDictFlag: "); DRW_DBG(xDictFlag); DRW_DBG("\n"); + } + + if (version > DRW::AC1024 || version < DRW::AC1018) { + haveNextLinks = buf->getBit(); //aka nolinks //B + DRW_DBG(", haveNextLinks (0 yes, 1 prev next): "); DRW_DBG(haveNextLinks); DRW_DBG("\n"); + } else { + haveNextLinks = 1; //aka nolinks //B + DRW_DBG(", haveNextLinks (forced): "); DRW_DBG(haveNextLinks); DRW_DBG("\n"); + } +//ENC color + color = buf->getEnColor(version); //BS or CMC //ok for R14 or negate + ltypeScale = buf->getBitDouble(); //BD + DRW_DBG(" entity color: "); DRW_DBG(color); + DRW_DBG(" ltScale: "); DRW_DBG(ltypeScale); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + UTF8STRING plotStyleName; + for (duint8 i = 0; i<2;++i) { //two flags in one + plotFlags = buf->get2Bits(); //BB + if (plotFlags == 1) + plotStyleName = "byblock"; + else if (plotFlags == 2) + plotStyleName = "continuous"; + else if (plotFlags == 0) + plotStyleName = "bylayer"; + else //handle at end + plotStyleName = ""; + if (i == 0) { + ltFlags = plotFlags; + lineType = plotStyleName; //RLZ: howto solve? if needed plotStyleName; + DRW_DBG("ltFlags: "); DRW_DBG(ltFlags); + DRW_DBG(" lineType: "); DRW_DBG(lineType.c_str()); + } else { + DRW_DBG(", plotFlags: "); DRW_DBG(plotFlags); + } + } + } + if (version > DRW::AC1018) {//2007+ + materialFlag = buf->get2Bits(); //BB + DRW_DBG("materialFlag: "); DRW_DBG(materialFlag); + shadowFlag = buf->getRawChar8(); //RC + DRW_DBG("shadowFlag: "); DRW_DBG(shadowFlag); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint8 visualFlags = buf->get2Bits(); //full & face visual style + DRW_DBG("shadowFlag 2: "); DRW_DBG(visualFlags); DRW_DBG("\n"); + duint8 unk = buf->getBit(); //edge visual style + DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); + } + dint16 invisibleFlag = buf->getBitShort(); //BS + DRW_DBG(" invisibleFlag: "); DRW_DBG(invisibleFlag); + if (version > DRW::AC1014) {//2000+ + lWeight = DRW_LW_Conv::dwgInt2lineWidth( buf->getRawChar8() ); //RC + DRW_DBG(" lwFlag (lWeight): "); DRW_DBG(lWeight); DRW_DBG("\n"); + } + //Only in blocks ???????? +// if (version > DRW::AC1018) {//2007+ +// duint8 unk = buf->getBit(); +// DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); +// } + return buf->isGood(); +} + +bool DRW_Entity::parseDwgEntHandle(DRW::Version version, dwgBuffer *buf){ + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + if(ownerHandle){//entity are in block or in a polyline + dwgHandle ownerH = buf->getOffsetHandle(handle); + DRW_DBG("owner (parent) Handle: "); DRW_DBGHL(ownerH.code, ownerH.size, ownerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + parentHandle = ownerH.ref; + DRW_DBG("Block (parent) Handle: "); DRW_DBGHL(ownerH.code, ownerH.size, parentHandle); DRW_DBG("\n"); + } else + DRW_DBG("NO Block (parent) Handle\n"); + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + for (int i=0; i< numReactors;++i) { + dwgHandle reactorsH = buf->getHandle(); + DRW_DBG(" reactorsH control Handle: "); DRW_DBGHL(reactorsH.code, reactorsH.size, reactorsH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (version < DRW::AC1015) {//R14- + //layer handle + layerH = buf->getOffsetHandle(handle); + DRW_DBG(" layer Handle: "); DRW_DBGHL(layerH.code, layerH.size, layerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //lineType handle + if(ltFlags == 3){ + lTypeH = buf->getOffsetHandle(handle); + DRW_DBG("linetype Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (version < DRW::AC1018) {//2000+ + if (haveNextLinks == 0) { + dwgHandle nextLinkH = buf->getOffsetHandle(handle); + DRW_DBG(" prev nextLinkers Handle: "); DRW_DBGHL(nextLinkH.code, nextLinkH.size, nextLinkH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + prevEntLink = nextLinkH.ref; + nextLinkH = buf->getOffsetHandle(handle); + DRW_DBG(" next nextLinkers Handle: "); DRW_DBGHL(nextLinkH.code, nextLinkH.size, nextLinkH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + nextEntLink = nextLinkH.ref; + } else { + nextEntLink = handle+1; + prevEntLink = handle-1; + } + } + if (version > DRW::AC1015) {//2004+ + //Parses Bookcolor handle + } + if (version > DRW::AC1014) {//2000+ + //layer handle + layerH = buf->getOffsetHandle(handle); + DRW_DBG(" layer Handle: "); DRW_DBGHL(layerH.code, layerH.size, layerH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //lineType handle + if(ltFlags == 3){ + lTypeH = buf->getOffsetHandle(handle); + DRW_DBG("linetype Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (version > DRW::AC1014) {//2000+ + if (version > DRW::AC1018) {//2007+ + if (materialFlag == 3) { + dwgHandle materialH = buf->getOffsetHandle(handle); + DRW_DBG(" material Handle: "); DRW_DBGHL(materialH.code, materialH.size, materialH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + if (shadowFlag == 3) { + dwgHandle shadowH = buf->getOffsetHandle(handle); + DRW_DBG(" shadow Handle: "); DRW_DBGHL(shadowH.code, shadowH.size, shadowH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + if (plotFlags == 3) { + dwgHandle plotStyleH = buf->getOffsetHandle(handle); + DRW_DBG(" plot style Handle: "); DRW_DBGHL(plotStyleH.code, plotStyleH.size, plotStyleH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + DRW_DBG("\n DRW_Entity::parseDwgEntHandle Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + return buf->isGood(); +} + +void DRW_Point::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: + basePoint.x = reader->getDouble(); + break; + case 20: + basePoint.y = reader->getDouble(); + break; + case 30: + basePoint.z = reader->getDouble(); + break; + case 39: + thickness = reader->getDouble(); + break; + case 210: + haveExtrusion = true; + extPoint.x = reader->getDouble(); + break; + case 220: + extPoint.y = reader->getDouble(); + break; + case 230: + extPoint.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Point::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing point *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + thickness = buf->getThickness(version > DRW::AC1014);//BD + DRW_DBG("\nthickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG(", Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + + double x_axis = buf->getBitDouble();//BD + DRW_DBG("\n x_axis: ");DRW_DBG(x_axis);DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + // RS crc; //RS */ + + return buf->isGood(); +} + +void DRW_Line::parseCode(int code, dxfReader *reader){ + switch (code) { + case 11: + secPoint.x = reader->getDouble(); + break; + case 21: + secPoint.y = reader->getDouble(); + break; + case 31: + secPoint.z = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Line::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing line *********************************************\n"); + + if (version < DRW::AC1015) {//14- + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + } + if (version > DRW::AC1014) {//2000+ + bool zIsZero = buf->getBit(); //B + basePoint.x = buf->getRawDouble();//RD + secPoint.x = buf->getDefaultDouble(basePoint.x);//DD + basePoint.y = buf->getRawDouble();//RD + secPoint.y = buf->getDefaultDouble(basePoint.y);//DD + if (!zIsZero) { + basePoint.z = buf->getRawDouble();//RD + secPoint.z = buf->getDefaultDouble(basePoint.z);//DD + } + } + DRW_DBG("start point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nend point: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + thickness = buf->getThickness(version > DRW::AC1014);//BD + DRW_DBG("\nthickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG(", Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z);DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_Ray::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing ray/xline *********************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + DRW_DBG("start point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nvector: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Circle::applyExtrusion(){ + if (haveExtrusion) { + //NOTE: Commenting these out causes the the arcs being tested to be located + //on the other side of the y axis (all x dimensions are negated). + calculateAxis(extPoint); + extrudePoint(extPoint, &basePoint); + } +} + +void DRW_Circle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + radious = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Circle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing circle *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + radious = buf->getBitDouble(); + DRW_DBG("\nradius: "); DRW_DBG(radious); + + thickness = buf->getThickness(version > DRW::AC1014); + DRW_DBG(" thickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Arc::applyExtrusion(){ + DRW_Circle::applyExtrusion(); + + if(haveExtrusion){ + // If the extrusion vector has a z value less than 0, the angles for the arc + // have to be mirrored since DXF files use the right hand rule. + // Note that the following code only handles the special case where there is a 2D + // drawing with the z axis heading into the paper (or rather screen). An arbitrary + // extrusion axis (with x and y values greater than 1/64) may still have issues. + if (fabs(extPoint.x) < 0.015625 && fabs(extPoint.y) < 0.015625 && extPoint.z < 0.0) { + staangle=M_PI-staangle; + endangle=M_PI-endangle; + + double temp = staangle; + staangle=endangle; + endangle=temp; + } + } +} + +void DRW_Arc::parseCode(int code, dxfReader *reader){ + switch (code) { + case 50: + staangle = reader->getDouble()/ ARAD; + break; + case 51: + endangle = reader->getDouble()/ ARAD; + break; + default: + DRW_Circle::parseCode(code, reader); + break; + } +} + +bool DRW_Arc::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing circle arc *********************************************\n"); + + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + + radious = buf->getBitDouble(); + DRW_DBG("\nradius: "); DRW_DBG(radious); + thickness = buf->getThickness(version > DRW::AC1014); + DRW_DBG(" thickness: "); DRW_DBG(thickness); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + staangle = buf->getBitDouble(); + DRW_DBG("\nstart angle: "); DRW_DBG(staangle); + endangle = buf->getBitDouble(); + DRW_DBG(" end angle: "); DRW_DBG(endangle); DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + return buf->isGood(); +} + +void DRW_Ellipse::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + ratio = reader->getDouble(); + break; + case 41: + staparam = reader->getDouble(); + break; + case 42: + endparam = reader->getDouble(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +void DRW_Ellipse::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + extrudePoint(extPoint, &secPoint); + double intialparam = staparam; + if (extPoint.z < 0.){ + staparam = M_PIx2 - endparam; + endparam = M_PIx2 - intialparam; + } + } +} + +//if ratio > 1 minor axis are greather than major axis, correct it +void DRW_Ellipse::correctAxis(){ + bool complete = false; + if (staparam == endparam) { + staparam = 0.0; + endparam = M_PIx2; //2*M_PI; + complete = true; + } + if (ratio > 1){ + if ( fabs(endparam - staparam - M_PIx2) < 1.0e-10) + complete = true; + double incX = secPoint.x; + secPoint.x = -(secPoint.y * ratio); + secPoint.y = incX*ratio; + ratio = 1/ratio; + if (!complete){ + if (staparam < M_PI_2) + staparam += M_PI *2; + if (endparam < M_PI_2) + endparam += M_PI *2; + endparam -= M_PI_2; + staparam -= M_PI_2; + } + } +} + +bool DRW_Ellipse::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing ellipse *********************************************\n"); + + basePoint =buf->get3BitDouble(); + DRW_DBG("center: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + secPoint =buf->get3BitDouble(); + DRW_DBG(", axis: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); DRW_DBG("\n"); + extPoint =buf->get3BitDouble(); + DRW_DBG("Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + ratio = buf->getBitDouble();//BD + DRW_DBG("\nratio: "); DRW_DBG(ratio); + staparam = buf->getBitDouble();//BD + DRW_DBG(" start param: "); DRW_DBG(staparam); + endparam = buf->getBitDouble();//BD + DRW_DBG(" end param: "); DRW_DBG(endparam); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +//parts are the number of vertex to split polyline, default 128 +void DRW_Ellipse::toPolyline(DRW_Polyline *pol, int parts){ + double radMajor, radMinor, cosRot, sinRot, incAngle, curAngle; + double cosCurr, sinCurr; + radMajor = sqrt(secPoint.x*secPoint.x + secPoint.y*secPoint.y); + radMinor = radMajor*ratio; + //calculate sin & cos of included angle + incAngle = atan2(secPoint.y, secPoint.x); + cosRot = cos(incAngle); + sinRot = sin(incAngle); + incAngle = M_PIx2 / parts; + curAngle = staparam; + int i = static_cast(curAngle / incAngle); + do { + if (curAngle > endparam) { + curAngle = endparam; + i = parts+2; + } + cosCurr = cos(curAngle); + sinCurr = sin(curAngle); + double x = basePoint.x + (cosCurr*cosRot*radMajor) - (sinCurr*sinRot*radMinor); + double y = basePoint.y + (cosCurr*sinRot*radMajor) + (sinCurr*cosRot*radMinor); + pol->addVertex( DRW_Vertex(x, y, 0.0, 0.0)); + curAngle = (++i)*incAngle; + } while (iflags = 1; + } + pol->layer = this->layer; + pol->lineType = this->lineType; + pol->color = this->color; + pol->lWeight = this->lWeight; + pol->extPoint = this->extPoint; +} + +void DRW_Trace::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + extrudePoint(extPoint, &basePoint); + extrudePoint(extPoint, &secPoint); + extrudePoint(extPoint, &thirdPoint); + extrudePoint(extPoint, &fourPoint); + } +} + +void DRW_Trace::parseCode(int code, dxfReader *reader){ + switch (code) { + case 12: + thirdPoint.x = reader->getDouble(); + break; + case 22: + thirdPoint.y = reader->getDouble(); + break; + case 32: + thirdPoint.z = reader->getDouble(); + break; + case 13: + fourPoint.x = reader->getDouble(); + break; + case 23: + fourPoint.y = reader->getDouble(); + break; + case 33: + fourPoint.z = reader->getDouble(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Trace::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing Trace *********************************************\n"); + + thickness = buf->getThickness(version>DRW::AC1014); + basePoint.z = buf->getBitDouble(); + basePoint.x = buf->getRawDouble(); + basePoint.y = buf->getRawDouble(); + secPoint.x = buf->getRawDouble(); + secPoint.y = buf->getRawDouble(); + secPoint.z = basePoint.z; + thirdPoint.x = buf->getRawDouble(); + thirdPoint.y = buf->getRawDouble(); + thirdPoint.z = basePoint.z; + fourPoint.x = buf->getRawDouble(); + fourPoint.y = buf->getRawDouble(); + fourPoint.z = basePoint.z; + extPoint = buf->getExtrusion(version>DRW::AC1014); + + DRW_DBG(" - base "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\n - sec "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + DRW_DBG("\n - third "); DRW_DBGPT(thirdPoint.x, thirdPoint.y, thirdPoint.z); + DRW_DBG("\n - fourth "); DRW_DBGPT(fourPoint.x, fourPoint.y, fourPoint.z); + DRW_DBG("\n - extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + DRW_DBG("\n - thickness: "); DRW_DBG(thickness); DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + /* CRC X --- */ + return buf->isGood(); +} + + +void DRW_Solid::parseCode(int code, dxfReader *reader){ + DRW_Trace::parseCode(code, reader); +} + +bool DRW_Solid::parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs){ + DRW_DBG("\n***************************** parsing Solid *********************************************\n"); + return DRW_Trace::parseDwg(v, buf, bs); +} + +void DRW_3Dface::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + invisibleflag = reader->getInt32(); + break; + default: + DRW_Trace::parseCode(code, reader); + break; + } +} + +bool DRW_3Dface::parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(v, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing 3Dface *********************************************\n"); + + if ( v < DRW::AC1015 ) {// R13 & R14 + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + secPoint.x = buf->getBitDouble(); + secPoint.y = buf->getBitDouble(); + secPoint.z = buf->getBitDouble(); + thirdPoint.x = buf->getBitDouble(); + thirdPoint.y = buf->getBitDouble(); + thirdPoint.z = buf->getBitDouble(); + fourPoint.x = buf->getBitDouble(); + fourPoint.y = buf->getBitDouble(); + fourPoint.z = buf->getBitDouble(); + invisibleflag = buf->getBitShort(); + } else { // 2000+ + bool has_no_flag = buf->getBit(); + bool z_is_zero = buf->getBit(); + basePoint.x = buf->getRawDouble(); + basePoint.y = buf->getRawDouble(); + basePoint.z = z_is_zero ? 0.0 : buf->getRawDouble(); + secPoint.x = buf->getDefaultDouble(basePoint.x); + secPoint.y = buf->getDefaultDouble(basePoint.y); + secPoint.z = buf->getDefaultDouble(basePoint.z); + thirdPoint.x = buf->getDefaultDouble(secPoint.x); + thirdPoint.y = buf->getDefaultDouble(secPoint.y); + thirdPoint.z = buf->getDefaultDouble(secPoint.z); + fourPoint.x = buf->getDefaultDouble(thirdPoint.x); + fourPoint.y = buf->getDefaultDouble(thirdPoint.y); + fourPoint.z = buf->getDefaultDouble(thirdPoint.z); + invisibleflag = has_no_flag ? (int)NoEdge : buf->getBitShort(); + } + drw_assert(invisibleflag>=NoEdge); + drw_assert(invisibleflag<=AllEdges); + + DRW_DBG(" - base "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + DRW_DBG(" - sec "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); DRW_DBG("\n"); + DRW_DBG(" - third "); DRW_DBGPT(thirdPoint.x, thirdPoint.y, thirdPoint.z); DRW_DBG("\n"); + DRW_DBG(" - fourth "); DRW_DBGPT(fourPoint.x, fourPoint.y, fourPoint.z); DRW_DBG("\n"); + DRW_DBG(" - Invisibility mask: "); DRW_DBG(invisibleflag); DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(v, buf); + if (!ret) + return ret; + return buf->isGood(); +} + +void DRW_Block::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 70: + flags = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Block::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + if (!isEnd){ + DRW_DBG("\n***************************** parsing block *********************************************\n"); + name = sBuf->getVariableText(version, false); + DRW_DBG("Block name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + } else { + DRW_DBG("\n***************************** parsing end block *********************************************\n"); + } + if (version > DRW::AC1018) {//2007+ + duint8 unk = buf->getBit(); + DRW_DBG("unknown bit: "); DRW_DBG(unk); DRW_DBG("\n"); + } +// X handleAssoc; //X + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Insert::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 41: + xscale = reader->getDouble(); + break; + case 42: + yscale = reader->getDouble(); + break; + case 43: + zscale = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + angle = angle/ARAD; //convert to radian + break; + case 70: + colcount = reader->getInt32(); + break; + case 71: + rowcount = reader->getInt32(); + break; + case 44: + colspace = reader->getDouble(); + break; + case 45: + rowspace = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Insert::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dint32 objCount = 0; + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n************************** parsing insert/minsert *****************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("insertion point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + if (version < DRW::AC1015) {//14- + xscale = buf->getBitDouble(); + yscale = buf->getBitDouble(); + zscale = buf->getBitDouble(); + } else { + duint8 dataFlags = buf->get2Bits(); + if (dataFlags == 3){ + //none default value 1,1,1 + } else if (dataFlags == 1){ //x default value 1, y & z can be x value + yscale = buf->getDefaultDouble(xscale); + zscale = buf->getDefaultDouble(xscale); + } else if (dataFlags == 2){ + xscale = buf->getRawDouble(); + yscale = zscale = xscale; + } else { //dataFlags == 0 + xscale = buf->getRawDouble(); + yscale = buf->getDefaultDouble(xscale); + zscale = buf->getDefaultDouble(xscale); + } + } + angle = buf->getBitDouble(); + DRW_DBG("scale : "); DRW_DBGPT(xscale, yscale, zscale); DRW_DBG(", angle: "); DRW_DBG(angle); + extPoint = buf->getExtrusion(false); //3BD R14 style + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + + bool hasAttrib = buf->getBit(); + DRW_DBG(" has Attrib: "); DRW_DBG(hasAttrib); + + if (hasAttrib && version > DRW::AC1015) {//2004+ + objCount = buf->getBitLong(); + DRW_UNUSED(objCount); + DRW_DBG(" objCount: "); DRW_DBG(objCount); DRW_DBG("\n"); + } + if (oType == 8) {//entity are minsert + colcount = buf->getBitShort(); + rowcount = buf->getBitShort(); + colspace = buf->getBitDouble(); + rowspace = buf->getBitDouble(); + } + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + blockRecH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("BLOCK HEADER Handle: "); DRW_DBGHL(blockRecH.code, blockRecH.size, blockRecH.ref); DRW_DBG("\n"); + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + /*attribs follows*/ + if (hasAttrib) { + if (version < DRW::AC1018) {//2000- + dwgHandle attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("first attrib Handle: "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("second attrib Handle: "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + } else { + for (duint8 i=0; i< objCount; ++i){ + dwgHandle attH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("attrib Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(attH.code, attH.size, attH.ref); DRW_DBG("\n"); + } + } + seqendH = buf->getHandle(); /* H 2 BLOCK HEADER (hard pointer) */ + DRW_DBG("seqendH Handle: "); DRW_DBGHL(seqendH.code, seqendH.size, seqendH.ref); DRW_DBG("\n"); + } + DRW_DBG(" Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_LWPolyline::applyExtrusion(){ + if (haveExtrusion) { + calculateAxis(extPoint); + for (unsigned int i=0; ix, vert->y, elevation); + extrudePoint(extPoint, &v); + vert->x = v.x; + vert->y = v.y; + } + } +} + +void DRW_LWPolyline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: { + vertex = new DRW_Vertex2D(); + vertlist.push_back(vertex); + vertex->x = reader->getDouble(); + break; } + case 20: + if(vertex != NULL) + vertex->y = reader->getDouble(); + break; + case 40: + if(vertex != NULL) + vertex->stawidth = reader->getDouble(); + break; + case 41: + if(vertex != NULL) + vertex->endwidth = reader->getDouble(); + break; + case 42: + if(vertex != NULL) + vertex->bulge = reader->getDouble(); + break; + case 38: + elevation = reader->getDouble(); + break; + case 39: + thickness = reader->getDouble(); + break; + case 43: + width = reader->getDouble(); + break; + case 70: + flags = reader->getInt32(); + break; + case 90: + vertexnum = reader->getInt32(); + vertlist.reserve(vertexnum); + break; + case 210: + haveExtrusion = true; + extPoint.x = reader->getDouble(); + break; + case 220: + extPoint.y = reader->getDouble(); + break; + case 230: + extPoint.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_LWPolyline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing LWPolyline *******************************************\n"); + + flags = buf->getBitShort(); + DRW_DBG("flags value: "); DRW_DBG(flags); + if (flags & 4) + width = buf->getBitDouble(); + if (flags & 8) + elevation = buf->getBitDouble(); + if (flags & 2) + thickness = buf->getBitDouble(); + if (flags & 1) + extPoint = buf->getExtrusion(false); + vertexnum = buf->getBitLong(); + vertlist.reserve(vertexnum); + unsigned int bulgesnum = 0; + if (flags & 16) + bulgesnum = buf->getBitLong(); + int vertexIdCount = 0; + if (version > DRW::AC1021) {//2010+ + if (flags & 1024) + vertexIdCount = buf->getBitLong(); + } + + unsigned int widthsnum = 0; + if (flags & 32) + widthsnum = buf->getBitLong(); + DRW_DBG("\nvertex num: "); DRW_DBG(vertexnum); DRW_DBG(" bulges num: "); DRW_DBG(bulgesnum); + DRW_DBG(" vertexIdCount: "); DRW_DBG(vertexIdCount); DRW_DBG(" widths num: "); DRW_DBG(widthsnum); + //clear all bit except 128 = plinegen and set 1 to open/close //RLZ:verify plinegen & open + //dxf: plinegen 128 & open 1 + flags = (flags & 512)? (flags | 1):(flags | 0); + flags &= 129; + DRW_DBG("end flags value: "); DRW_DBG(flags); + + if (vertexnum > 0) { //verify if is lwpol without vertex (empty) + // add vertexs + vertex = new DRW_Vertex2D(); + vertex->x = buf->getRawDouble(); + vertex->y = buf->getRawDouble(); + vertlist.push_back(vertex); + DRW_Vertex2D* pv = vertex; + for (int i = 1; i< vertexnum; i++){ + vertex = new DRW_Vertex2D(); + if (version < DRW::AC1015) {//14- + vertex->x = buf->getRawDouble(); + vertex->y = buf->getRawDouble(); + } else { +// DRW_Vertex2D *pv = vertlist.back(); + vertex->x = buf->getDefaultDouble(pv->x); + vertex->y = buf->getDefaultDouble(pv->y); + } + pv = vertex; + vertlist.push_back(vertex); + } + //add bulges + for (unsigned int i = 0; i < bulgesnum; i++){ + double bulge = buf->getBitDouble(); + if (vertlist.size()> i) + vertlist.at(i)->bulge = bulge; + } + //add vertexId + if (version > DRW::AC1021) {//2010+ + for (int i = 0; i < vertexIdCount; i++){ + dint32 vertexId = buf->getBitLong(); + //TODO implement vertexId, do not exist in dxf + DRW_UNUSED(vertexId); +// if (vertlist.size()< i) +// vertlist.at(i)->vertexId = vertexId; + } + } + //add widths + for (unsigned int i = 0; i < widthsnum; i++){ + double staW = buf->getBitDouble(); + double endW = buf->getBitDouble(); + if (vertlist.size()< i) { + vertlist.at(i)->stawidth = staW; + vertlist.at(i)->endwidth = endW; + } + } + } + if (DRW_DBGGL == DRW_dbg::DEBUG){ + DRW_DBG("\nVertex list: "); + for (std::vector::iterator it = vertlist.begin() ; it != vertlist.end(); ++it){ + DRW_Vertex2D* pv = *it; + DRW_DBG("\n x: "); DRW_DBG(pv->x); DRW_DBG(" y: "); DRW_DBG(pv->y); DRW_DBG(" bulge: "); DRW_DBG(pv->bulge); + DRW_DBG(" stawidth: "); DRW_DBG(pv->stawidth); DRW_DBG(" endwidth: "); DRW_DBG(pv->endwidth); + } + } + + DRW_DBG("\n"); + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + /* CRC X --- */ + return buf->isGood(); +} + + +void DRW_Text::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + height = reader->getDouble(); + break; + case 41: + widthscale = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + break; + case 51: + oblique = reader->getDouble(); + break; + case 71: + textgen = reader->getInt32(); + break; + case 72: + alignH = (HAlign)reader->getInt32(); + break; + case 73: + alignV = (VAlign)reader->getInt32(); + break; + case 1: + text = reader->getUtf8String(); + break; + case 7: + style = reader->getUtf8String(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Text::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing text *********************************************\n"); + + // DataFlags RC Used to determine presence of subsquent data, set to 0xFF for R14- + duint8 data_flags = 0x00; + if (version > DRW::AC1014) {//2000+ + data_flags = buf->getRawChar8(); /* DataFlags RC Used to determine presence of subsquent data */ + DRW_DBG("data_flags: "); DRW_DBG(data_flags); DRW_DBG("\n"); + if ( !(data_flags & 0x01) ) { /* Elevation RD --- present if !(DataFlags & 0x01) */ + basePoint.z = buf->getRawDouble(); + } + } else {//14- + basePoint.z = buf->getBitDouble(); /* Elevation BD --- */ + } + basePoint.x = buf->getRawDouble(); /* Insertion pt 2RD 10 */ + basePoint.y = buf->getRawDouble(); + DRW_DBG("Insert point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + if ( !(data_flags & 0x02) ) { /* Alignment pt 2DD 11 present if !(DataFlags & 0x02), use 10 & 20 values for 2 default values.*/ + secPoint.x = buf->getDefaultDouble(basePoint.x); + secPoint.y = buf->getDefaultDouble(basePoint.y); + } else { + secPoint = basePoint; + } + } else {//14- + secPoint.x = buf->getRawDouble(); /* Alignment pt 2RD 11 */ + secPoint.y = buf->getRawDouble(); + } + secPoint.z = basePoint.z; + DRW_DBG("Alignment: "); DRW_DBGPT(secPoint.x, secPoint.y, basePoint.z); DRW_DBG("\n"); + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("Extrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); DRW_DBG("\n"); + thickness = buf->getThickness(version > DRW::AC1014); /* Thickness BD 39 */ + + if (version > DRW::AC1014) {//2000+ + if ( !(data_flags & 0x04) ) { /* Oblique ang RD 51 present if !(DataFlags & 0x04) */ + oblique = buf->getRawDouble(); + } + if ( !(data_flags & 0x08) ) { /* Rotation ang RD 50 present if !(DataFlags & 0x08) */ + angle = buf->getRawDouble(); + } + height = buf->getRawDouble(); /* Height RD 40 */ + if ( !(data_flags & 0x10) ) { /* Width factor RD 41 present if !(DataFlags & 0x10) */ + widthscale = buf->getRawDouble(); + } + } else {//14- + oblique = buf->getBitDouble(); /* Oblique ang BD 51 */ + angle = buf->getBitDouble(); /* Rotation ang BD 50 */ + height = buf->getBitDouble(); /* Height BD 40 */ + widthscale = buf->getBitDouble(); /* Width factor BD 41 */ + } + DRW_DBG("thickness: "); DRW_DBG(thickness); DRW_DBG(", Oblique ang: "); DRW_DBG(oblique); DRW_DBG(", Width: "); + DRW_DBG(widthscale); DRW_DBG(", Rotation: "); DRW_DBG(angle); DRW_DBG(", height: "); DRW_DBG(height); DRW_DBG("\n"); + text = sBuf->getVariableText(version, false); /* Text value TV 1 */ + DRW_DBG("text string: "); DRW_DBG(text.c_str());DRW_DBG("\n"); + //textgen, alignH, alignV always present in R14-, data_flags set in initialisation + if ( !(data_flags & 0x20) ) { /* Generation BS 71 present if !(DataFlags & 0x20) */ + textgen = buf->getBitShort(); + DRW_DBG("textgen: "); DRW_DBG(textgen); + } + if ( !(data_flags & 0x40) ) { /* Horiz align. BS 72 present if !(DataFlags & 0x40) */ + alignH = (HAlign)buf->getBitShort(); + DRW_DBG(", alignH: "); DRW_DBG(alignH); + } + if ( !(data_flags & 0x80) ) { /* Vert align. BS 73 present if !(DataFlags & 0x80) */ + alignV = (VAlign)buf->getBitShort(); + DRW_DBG(", alignV: "); DRW_DBG(alignV); + } + DRW_DBG("\n"); + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + styleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("text style Handle: "); DRW_DBGHL(styleH.code, styleH.size, styleH.ref); DRW_DBG("\n"); + + /* CRC X --- */ + return buf->isGood(); +} + +void DRW_MText::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + text += reader->getString(); + text = reader->toUtf8String(text); + break; + case 11: + haveXAxis = true; + DRW_Text::parseCode(code, reader); + break; + case 3: + text += reader->getString(); + break; + case 44: + interlin = reader->getDouble(); + break; + case 71: { + // Attachment point + Attach a = (Attach)reader->getInt32(); + + switch(a) { + case TopLeft: + alignV = VTop; + alignH = HLeft; + break; + case TopCenter: + alignV = VTop; + alignH = HCenter; + break; + case TopRight: + alignV = VTop; + alignH = HRight; + break; + case MiddleLeft: + alignV = VMiddle; + alignH = HLeft; + break; + case MiddleCenter: + alignV = VMiddle; + alignH = HCenter; + break; + case MiddleRight: + alignV = VMiddle; + alignH = HRight; + break; + case BottomLeft: + alignV = VBottom; + alignH = HLeft; + break; + case BottomCenter: + alignV = VBottom; + alignH = HCenter; + break; + case BottomRight: + alignV = VBottom; + alignH = HRight; + break; + } + } break; + case 72: + // To prevent redirection to DRW_Text::parseCode. + // This code meaning is different for MTEXT. + // Actually: Drawing direction + break; + case 73: + // To prevent redirection to DRW_Text::parseCode. + // This code meaning is different for MTEXT. + // Actually: Mtext line spacing style + break; + default: + DRW_Text::parseCode(code, reader); + break; + } +} + +bool DRW_MText::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing mtext *********************************************\n"); + + basePoint = buf->get3BitDouble(); /* Insertion pt 3BD 10 - First picked point. */ + DRW_DBG("Insertion: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + extPoint = buf->get3BitDouble(); /* Extrusion 3BD 210 Undocumented; */ + secPoint = buf->get3BitDouble(); /* X-axis dir 3BD 11 */ + updateAngle(); + widthscale = buf->getBitDouble(); /* Rect width BD 41 */ + if (version > DRW::AC1018) {//2007+ + /* Rect height BD 46 Reference rectangle height. */ + /** @todo */buf->getBitDouble(); + } + height = buf->getBitDouble();/* Text height BD 40 Undocumented */ + textgen = buf->getBitShort(); /* Attachment BS 71 Similar to justification; */ + /* Drawing dir BS 72 Left to right, etc.; see DXF doc */ + dint16 draw_dir = buf->getBitShort(); + DRW_UNUSED(draw_dir); + /* Extents ht BD Undocumented and not present in DXF or entget */ + double ext_ht = buf->getBitDouble(); + DRW_UNUSED(ext_ht); + /* Extents wid BD Undocumented and not present in DXF or entget The extents + rectangle, when rotated the same as the text, fits the actual text image on + the screen (altough we've seen it include an extra row of text in height). */ + double ext_wid = buf->getBitDouble(); + DRW_UNUSED(ext_wid); + /* Text TV 1 All text in one long string (without '\n's 3 for line wrapping). + ACAD seems to add braces ({ }) and backslash-P's to indicate paragraphs + based on the "\r\n"'s found in the imported file. But, all the text is in + this one long string -- not broken into 1- and 3-groups as in DXF and + entget. ACAD's entget breaks this string into 250-char pieces (not 255 as + doc'd) – even if it's mid-word. The 1-group always gets the tag end; + therefore, the 3's are always 250 chars long. */ + text = sBuf->getVariableText(version, false); /* Text value TV 1 */ + if (version > DRW::AC1014) {//2000+ + buf->getBitShort();/* Linespacing Style BS 73 */ + buf->getBitDouble();/* Linespacing Factor BD 44 */ + buf->getBit();/* Unknown bit B */ + } + if (version > DRW::AC1015) {//2004+ + /* Background flags BL 0 = no background, 1 = background fill, 2 =background + fill with drawing fill color. */ + dint32 bk_flags = buf->getBitLong(); /** @todo add to DRW_MText */ + if ( bk_flags == 1 ) { + /* Background scale factor BL Present if background flags = 1, default = 1.5*/ + buf->getBitLong(); + /* Background color CMC Present if background flags = 1 */ + buf->getCmColor(version); //RLZ: warning CMC or ENC + /** @todo buf->getCMC */ + /* Background transparency BL Present if background flags = 1 */ + buf->getBitLong(); + } + } + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + styleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("text style Handle: "); DRW_DBG(styleH.code); DRW_DBG("."); + DRW_DBG(styleH.size); DRW_DBG("."); DRW_DBG(styleH.ref); DRW_DBG("\n"); + + /* CRC X --- */ + return buf->isGood(); +} + +void DRW_MText::updateAngle(){ + if (haveXAxis) { + angle = atan2(secPoint.y, secPoint.x)*180/M_PI; + } +} + +void DRW_Polyline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + flags = reader->getInt32(); + break; + case 40: + defstawidth = reader->getDouble(); + break; + case 41: + defendwidth = reader->getDouble(); + break; + case 71: + vertexcount = reader->getInt32(); + break; + case 72: + facecount = reader->getInt32(); + break; + case 73: + smoothM = reader->getInt32(); + break; + case 74: + smoothN = reader->getInt32(); + break; + case 75: + curvetype = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +//0x0F polyline 2D bit 4(8) & 5(16) NOT set +//0x10 polyline 3D bit 4(8) set +//0x1D PFACE bit 5(16) set +bool DRW_Polyline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing polyline *********************************************\n"); + + dint32 ooCount = 0; + if (oType == 0x0F) { //pline 2D + flags = buf->getBitShort(); + DRW_DBG("flags value: "); DRW_DBG(flags); + curvetype = buf->getBitShort(); + defstawidth = buf->getBitDouble(); + defendwidth = buf->getBitDouble(); + thickness = buf->getThickness(version > DRW::AC1014); + basePoint = DRW_Coord(0,0,buf->getBitDouble()); + extPoint = buf->getExtrusion(version > DRW::AC1014); + } else if (oType == 0x10) { //pline 3D + duint8 tmpFlag = buf->getRawChar8(); + DRW_DBG("flags 1 value: "); DRW_DBG(tmpFlag); + if (tmpFlag & 1) + curvetype = 5; + else if (tmpFlag & 2) + curvetype = 6; + if (tmpFlag & 3) { + curvetype = 8; + flags |= 4; + } + tmpFlag = buf->getRawChar8(); + if (tmpFlag & 1) + flags |= 1; + flags |= 8; //indicate 3DPOL + DRW_DBG("flags 2 value: "); DRW_DBG(tmpFlag); + } else if (oType == 0x1D) { //PFACE + flags = 64; + vertexcount = buf->getBitShort(); + DRW_DBG("vertex count: "); DRW_DBG(vertexcount); + facecount = buf->getBitShort(); + DRW_DBG("face count: "); DRW_DBG(facecount); + DRW_DBG("flags value: "); DRW_DBG(flags); + } + if (version > DRW::AC1015){ //2004+ + ooCount = buf->getBitLong(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + + if (version < DRW::AC1018){ //2000- + dwgHandle objectH = buf->getOffsetHandle(handle); + firstEH = objectH.ref; + DRW_DBG(" first Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + objectH = buf->getOffsetHandle(handle); + lastEH = objectH.ref; + DRW_DBG(" last Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } else { + for (dint32 i = 0; i < ooCount; ++i){ + dwgHandle objectH = buf->getOffsetHandle(handle); + hadlesList.push_back (objectH.ref); + DRW_DBG(" Vertex Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + } + seqEndH = buf->getOffsetHandle(handle); + DRW_DBG(" SEQEND Handle: "); DRW_DBGHL(seqEndH.code, seqEndH.size, seqEndH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Vertex::parseCode(int code, dxfReader *reader){ + switch (code) { + case 70: + flags = reader->getInt32(); + break; + case 40: + stawidth = reader->getDouble(); + break; + case 41: + endwidth = reader->getDouble(); + break; + case 42: + bulge = reader->getDouble(); + break; + case 50: + tgdir = reader->getDouble(); + break; + case 71: + vindex1 = reader->getInt32(); + break; + case 72: + vindex2 = reader->getInt32(); + break; + case 73: + vindex3 = reader->getInt32(); + break; + case 74: + vindex4 = reader->getInt32(); + break; + case 91: + identifier = reader->getInt32(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +//0x0A vertex 2D +//0x0B vertex 3D +//0x0C MESH +//0x0D PFACE +//0x0E PFACE FACE +bool DRW_Vertex::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs, double el){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing pline Vertex *********************************************\n"); + + if (oType == 0x0A) { //pline 2D, needed example + flags = buf->getRawChar8(); //RLZ: EC unknown type + DRW_DBG("flags value: "); DRW_DBG(flags); + basePoint = buf->get3BitDouble(); + basePoint.z = el; + DRW_DBG("basePoint: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + stawidth = buf->getBitDouble(); + if (stawidth < 0) + endwidth = stawidth = fabs(stawidth); + else + endwidth = buf->getBitDouble(); + bulge = buf->getBitDouble(); + if (version > DRW::AC1021) //2010+ + DRW_DBG("Vertex ID: "); DRW_DBG(buf->getBitLong()); + tgdir = buf->getBitDouble(); + } else if (oType == 0x0B || oType == 0x0C || oType == 0x0D) { //PFACE + flags = buf->getRawChar8(); //RLZ: EC unknown type + DRW_DBG("flags value: "); DRW_DBG(flags); + basePoint = buf->get3BitDouble(); + DRW_DBG("basePoint: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + } else if (oType == 0x0E) { //PFACE FACE + vindex1 = buf->getBitShort(); + vindex2 = buf->getBitShort(); + vindex3 = buf->getBitShort(); + vindex4 = buf->getBitShort(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Hatch::parseCode(int code, dxfReader *reader){ + switch (code) { + case 2: + name = reader->getUtf8String(); + break; + case 70: + solid = reader->getInt32(); + break; + case 71: + associative = reader->getInt32(); + break; + case 72: /*edge type*/ + if (ispol){ //if is polyline is a as_bulge flag + break; + } else if (reader->getInt32() == 1){ //line + addLine(); + } else if (reader->getInt32() == 2){ //arc + addArc(); + } else if (reader->getInt32() == 3){ //elliptic arc + addEllipse(); + } else if (reader->getInt32() == 4){ //spline + addSpline(); + } + break; + case 10: + if (pt) pt->basePoint.x = reader->getDouble(); + else if (pline) { + plvert = pline->addVertex(); + plvert->x = reader->getDouble(); + } + break; + case 20: + if (pt) pt->basePoint.y = reader->getDouble(); + else if (plvert) plvert ->y = reader->getDouble(); + break; + case 11: + if (line) line->secPoint.x = reader->getDouble(); + else if (ellipse) ellipse->secPoint.x = reader->getDouble(); + break; + case 21: + if (line) line->secPoint.y = reader->getDouble(); + else if (ellipse) ellipse->secPoint.y = reader->getDouble(); + break; + case 40: + if (arc) arc->radious = reader->getDouble(); + else if (ellipse) ellipse->ratio = reader->getDouble(); + break; + case 41: + scale = reader->getDouble(); + break; + case 42: + if (plvert) plvert ->bulge = reader->getDouble(); + break; + case 50: + if (arc) arc->staangle = reader->getDouble()/ARAD; + else if (ellipse) ellipse->staparam = reader->getDouble()/ARAD; + break; + case 51: + if (arc) arc->endangle = reader->getDouble()/ARAD; + else if (ellipse) ellipse->endparam = reader->getDouble()/ARAD; + break; + case 52: + angle = reader->getDouble(); + break; + case 73: + if (arc) arc->isccw = reader->getInt32(); + else if (pline) pline->flags = reader->getInt32(); + break; + case 75: + hstyle = reader->getInt32(); + break; + case 76: + hpattern = reader->getInt32(); + break; + case 77: + doubleflag = reader->getInt32(); + break; + case 78: + deflines = reader->getInt32(); + break; + case 91: + loopsnum = reader->getInt32(); + looplist.reserve(loopsnum); + break; + case 92: + loop = new DRW_HatchLoop(reader->getInt32()); + looplist.push_back(loop); + if (reader->getInt32() & 2) { + ispol = true; + clearEntities(); + pline = new DRW_LWPolyline; + loop->objlist.push_back(pline); + } else ispol = false; + break; + case 93: + if (pline) pline->vertexnum = reader->getInt32(); + else loop->numedges = reader->getInt32();//aqui reserve + break; + case 98: //seed points ?? + clearEntities(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} + +bool DRW_Hatch::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + duint32 totalBoundItems = 0; + bool havePixelSize = false; + + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing hatch *********************************************\n"); + + //Gradient data, RLZ: is ok or if grad > 0 continue read ? + if (version > DRW::AC1015) { //2004+ + dint32 isGradient = buf->getBitLong(); + DRW_DBG("is Gradient: "); DRW_DBG(isGradient); + dint32 res = buf->getBitLong(); + DRW_DBG(" reserved: "); DRW_DBG(res); + double gradAngle = buf->getBitDouble(); + DRW_DBG(" Gradient angle: "); DRW_DBG(gradAngle); + double gradShift = buf->getBitDouble(); + DRW_DBG(" Gradient shift: "); DRW_DBG(gradShift); + dint32 singleCol = buf->getBitLong(); + DRW_DBG("\nsingle color Grad: "); DRW_DBG(singleCol); + double gradTint = buf->getBitDouble(); + DRW_DBG(" Gradient tint: "); DRW_DBG(gradTint); + dint32 numCol = buf->getBitLong(); + DRW_DBG(" num colors: "); DRW_DBG(numCol); + for (dint32 i = 0 ; i < numCol; ++i){ + double unkDouble = buf->getBitDouble(); + DRW_DBG("\nunkDouble: "); DRW_DBG(unkDouble); + duint16 unkShort = buf->getBitShort(); + DRW_DBG(" unkShort: "); DRW_DBG(unkShort); + dint32 rgbCol = buf->getBitLong(); + DRW_DBG(" rgb color: "); DRW_DBG(rgbCol); + duint8 ignCol = buf->getRawChar8(); + DRW_DBG(" ignored color: "); DRW_DBG(ignCol); + } + UTF8STRING gradName = sBuf->getVariableText(version, false); + DRW_DBG("\ngradient name: "); DRW_DBG(gradName.c_str()); DRW_DBG("\n"); + } + basePoint.z = buf->getBitDouble(); + extPoint = buf->get3BitDouble(); + DRW_DBG("base point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + DRW_DBG("\nextrusion: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + name = sBuf->getVariableText(version, false); + DRW_DBG("\nhatch pattern name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + solid = buf->getBit(); + associative = buf->getBit(); + loopsnum = buf->getBitLong(); + + //read loops + for (dint32 i = 0 ; i < loopsnum; ++i){ + loop = new DRW_HatchLoop(buf->getBitLong()); + havePixelSize |= loop->type & 4; + if (!(loop->type & 2)){ //Not polyline + dint32 numPathSeg = buf->getBitLong(); + for (dint32 j = 0; jgetRawChar8(); + if (typePath == 1){ //line + addLine(); + line->basePoint = buf->get2RawDouble(); + line->secPoint = buf->get2RawDouble(); + } else if (typePath == 2){ //circle arc + addArc(); + arc->basePoint = buf->get2RawDouble(); + arc->radious = buf->getBitDouble(); + arc->staangle = buf->getBitDouble(); + arc->endangle = buf->getBitDouble(); + arc->isccw = buf->getBit(); + } else if (typePath == 3){ //ellipse arc + addEllipse(); + ellipse->basePoint = buf->get2RawDouble(); + ellipse->secPoint = buf->get2RawDouble(); + ellipse->ratio = buf->getBitDouble(); + ellipse->staparam = buf->getBitDouble(); + ellipse->endparam = buf->getBitDouble(); + ellipse->isccw = buf->getBit(); + } else if (typePath == 4){ //spline + addSpline(); + spline->degree = buf->getBitLong(); + bool isRational = buf->getBit(); + spline->flags |= (isRational << 2); //rational + spline->flags |= (buf->getBit() << 1); //periodic + spline->nknots = buf->getBitLong(); + spline->knotslist.reserve(spline->nknots); + for (dint32 j = 0; j < spline->nknots;++j){ + spline->knotslist.push_back (buf->getBitDouble()); + } + spline->ncontrol = buf->getBitLong(); + spline->controllist.reserve(spline->ncontrol); + for (dint32 j = 0; j < spline->ncontrol;++j){ + DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble()); + if(isRational) + crd->z = buf->getBitDouble(); //RLZ: investigate how store weight + spline->controllist.push_back(crd); + } + if (version > DRW::AC1021) { //2010+ + spline->nfit = buf->getBitLong(); + spline->fitlist.reserve(spline->nfit); + for (dint32 j = 0; j < spline->nfit;++j){ + DRW_Coord* crd = new DRW_Coord(buf->get3BitDouble()); + spline->fitlist.push_back (crd); + } + spline->tgStart = buf->get2RawDouble(); + spline->tgEnd = buf->get2RawDouble(); + } + } + } + } else { //end not pline, start polyline + pline = new DRW_LWPolyline; + bool asBulge = buf->getBit(); + pline->flags = buf->getBit();//closed bit + dint32 numVert = buf->getBitLong(); + for (dint32 j = 0; jgetRawDouble(); + v.y = buf->getRawDouble(); + if (asBulge) + v.bulge = buf->getBitDouble(); + pline->addVertex(v); + } + loop->objlist.push_back(pline); + }//end polyline + loop->update(); + looplist.push_back(loop); + totalBoundItems += buf->getBitLong(); + DRW_DBG(" totalBoundItems: "); DRW_DBG(totalBoundItems); + } //end read loops + + hstyle = buf->getBitShort(); + hpattern = buf->getBitShort(); + DRW_DBG("\nhatch style: "); DRW_DBG(hstyle); DRW_DBG(" pattern type"); DRW_DBG(hpattern); + if (!solid){ + angle = buf->getBitDouble(); + scale = buf->getBitDouble(); + doubleflag = buf->getBit(); + deflines = buf->getBitShort(); + for (dint32 i = 0 ; i < deflines; ++i){ + DRW_Coord ptL, offL; + double angleL = buf->getBitDouble(); + ptL.x = buf->getBitDouble(); + ptL.y = buf->getBitDouble(); + offL.x = buf->getBitDouble(); + offL.y = buf->getBitDouble(); + duint16 numDashL = buf->getBitShort(); + DRW_DBG("\ndef line: "); DRW_DBG(angleL); DRW_DBG(","); DRW_DBG(ptL.x); DRW_DBG(","); DRW_DBG(ptL.y); + DRW_DBG(","); DRW_DBG(offL.x); DRW_DBG(","); DRW_DBG(offL.y); DRW_DBG(","); DRW_DBG(angleL); + for (duint16 i = 0 ; i < numDashL; ++i){ + double lenghtL = buf->getBitDouble(); + DRW_DBG(","); DRW_DBG(lenghtL); + } + }//end deflines + } //end not solid + + if (havePixelSize){ + ddouble64 pixsize = buf->getBitDouble(); + DRW_DBG("\npixel size: "); DRW_DBG(pixsize); + } + dint32 numSeedPoints = buf->getBitLong(); + DRW_DBG("\nnum Seed Points "); DRW_DBG(numSeedPoints); + //read Seed Points + DRW_Coord seedPt; + for (dint32 i = 0 ; i < numSeedPoints; ++i){ + seedPt.x = buf->getRawDouble(); + seedPt.y = buf->getRawDouble(); + DRW_DBG("\n "); DRW_DBG(seedPt.x); DRW_DBG(","); DRW_DBG(seedPt.y); + } + + DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + for (duint32 i = 0 ; i < totalBoundItems; ++i){ + dwgHandle biH = buf->getHandle(); + DRW_DBG("Boundary Items Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Spline::parseCode(int code, dxfReader *reader){ + switch (code) { + case 210: + normalVec.x = reader->getDouble(); + break; + case 220: + normalVec.y = reader->getDouble(); + break; + case 230: + normalVec.z = reader->getDouble(); + break; + case 12: + tgStart.x = reader->getDouble(); + break; + case 22: + tgStart.y = reader->getDouble(); + break; + case 32: + tgStart.z = reader->getDouble(); + break; + case 13: + tgEnd.x = reader->getDouble(); + break; + case 23: + tgEnd.y = reader->getDouble(); + break; + case 33: + tgEnd.z = reader->getDouble(); + break; + case 70: + flags = reader->getInt32(); + break; + case 71: + degree = reader->getInt32(); + break; + case 72: + nknots = reader->getInt32(); + break; + case 73: + ncontrol = reader->getInt32(); + break; + case 74: + nfit = reader->getInt32(); + break; + case 42: + tolknot = reader->getDouble(); + break; + case 43: + tolcontrol = reader->getDouble(); + break; + case 44: + tolfit = reader->getDouble(); + break; + case 10: { + controlpoint = new DRW_Coord(); + controllist.push_back(controlpoint); + controlpoint->x = reader->getDouble(); + break; } + case 20: + if(controlpoint != NULL) + controlpoint->y = reader->getDouble(); + break; + case 30: + if(controlpoint != NULL) + controlpoint->z = reader->getDouble(); + break; + case 11: { + fitpoint = new DRW_Coord(); + fitlist.push_back(fitpoint); + fitpoint->x = reader->getDouble(); + break; } + case 21: + if(fitpoint != NULL) + fitpoint->y = reader->getDouble(); + break; + case 31: + if(fitpoint != NULL) + fitpoint->z = reader->getDouble(); + break; + case 40: + knotslist.push_back(reader->getDouble()); + break; + case 41: + weightlist.push_back(reader->getDouble()); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Spline::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + bool ret = DRW_Entity::parseDwg(version, buf, NULL, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing spline *********************************************\n"); + duint8 weight = 0; // RLZ ??? flags, weight, code 70, bit 4 (16) + + dint32 scenario = buf->getBitLong(); + DRW_DBG("scenario: "); DRW_DBG(scenario); + if (version > DRW::AC1024) { + dint32 splFlag1 = buf->getBitLong(); + if (splFlag1 & 1) + scenario = 2; + dint32 knotParam = buf->getBitLong(); + DRW_DBG("2013 splFlag1: "); DRW_DBG(splFlag1); DRW_DBG(" 2013 knotParam: "); + DRW_DBG(knotParam); +// DRW_DBG("unk bit: "); DRW_DBG(buf->getBit()); + } + degree = buf->getBitLong(); //RLZ: code 71, verify with dxf + DRW_DBG(" degree: "); DRW_DBG(degree); DRW_DBG("\n"); + if (scenario == 2) { + flags = 8;//scenario 2 = not rational & planar + tolfit = buf->getBitDouble();//BD + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" tolfit: "); DRW_DBG(tolfit); + tgStart =buf->get3BitDouble(); + DRW_DBG(" Start Tangent: "); DRW_DBGPT(tgStart.x, tgStart.y, tgStart.z); + tgEnd =buf->get3BitDouble(); + DRW_DBG("\nEnd Tangent: "); DRW_DBGPT(tgEnd.x, tgEnd.y, tgEnd.z); + nfit = buf->getBitLong(); + DRW_DBG("\nnumber of fit points: "); DRW_DBG(nfit); + } else if (scenario == 1) { + flags = 8;//scenario 1 = rational & planar + flags |= buf->getBit() << 2; //flags, rational, code 70, bit 2 (4) + flags |= buf->getBit(); //flags, closed, code 70, bit 0 (1) + flags |= buf->getBit() << 1; //flags, periodic, code 70, bit 1 (2) + tolknot = buf->getBitDouble(); + tolcontrol = buf->getBitDouble(); + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" knot tolerance: "); DRW_DBG(tolknot); + DRW_DBG(" control point tolerance: "); DRW_DBG(tolcontrol); + nknots = buf->getBitLong(); + ncontrol = buf->getBitLong(); + weight = buf->getBit(); // RLZ ??? flags, weight, code 70, bit 4 (16) + DRW_DBG("\nnum of knots: "); DRW_DBG(nknots); DRW_DBG(" num of control pt: "); + DRW_DBG(ncontrol); DRW_DBG(" weight bit: "); DRW_DBG(weight); + } else { + DRW_DBG("\ndwg Ellipse, unknouwn scenario\n"); + return false; //RLZ: from doc only 1 or 2 are ok ? + } + + knotslist.reserve(nknots); + for (dint32 i= 0; igetBitDouble()); + } + controllist.reserve(ncontrol); + for (dint32 i= 0; iget3BitDouble()); + controllist.push_back(crd); + if (weight){ + DRW_DBG("\n w: "); DRW_DBG(buf->getBitDouble()); //RLZ Warning: D (BD or RD) + } + } + fitlist.reserve(nfit); + for (dint32 i= 0; iget3BitDouble()); + fitlist.push_back (crd); + } + if (DRW_DBGGL == DRW_dbg::DEBUG){ + DRW_DBG("\nknots list: "); + for (std::vector::iterator it = knotslist.begin() ; it != knotslist.end(); ++it){ + DRW_DBG("\n"); DRW_DBG(*it); + } + DRW_DBG("\ncontrol point list: "); + for (std::vector::iterator it = controllist.begin() ; it != controllist.end(); ++it){ + DRW_DBG("\n"); DRW_DBGPT((*it)->x,(*it)->y,(*it)->z); + } + DRW_DBG("\nfit point list: "); + for (std::vector::iterator it = fitlist.begin() ; it != fitlist.end(); ++it){ + DRW_DBG("\n"); DRW_DBGPT((*it)->x,(*it)->y,(*it)->z); + } + } + + /* Common Entity Handle Data */ + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Image::parseCode(int code, dxfReader *reader){ + switch (code) { + case 12: + vVector.x = reader->getDouble(); + break; + case 22: + vVector.y = reader->getDouble(); + break; + case 32: + vVector.z = reader->getDouble(); + break; + case 13: + sizeu = reader->getDouble(); + break; + case 23: + sizev = reader->getDouble(); + break; + case 340: + ref = reader->getHandleString(); + break; + case 280: + clip = reader->getInt32(); + break; + case 281: + brightness = reader->getInt32(); + break; + case 282: + contrast = reader->getInt32(); + break; + case 283: + fade = reader->getInt32(); + break; + default: + DRW_Line::parseCode(code, reader); + break; + } +} + +bool DRW_Image::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing image *********************************************\n"); + + dint32 classVersion = buf->getBitLong(); + DRW_DBG("class Version: "); DRW_DBG(classVersion); + basePoint = buf->get3BitDouble(); + DRW_DBG("\nbase point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + secPoint = buf->get3BitDouble(); + DRW_DBG("\nU vector: "); DRW_DBGPT(secPoint.x, secPoint.y, secPoint.z); + vVector = buf->get3BitDouble(); + DRW_DBG("\nV vector: "); DRW_DBGPT(vVector.x, vVector.y, vVector.z); + sizeu = buf->getRawDouble(); + sizev = buf->getRawDouble(); + DRW_DBG("\nsize U: "); DRW_DBG(sizeu); DRW_DBG("\nsize V: "); DRW_DBG(sizev); + duint16 displayProps = buf->getBitShort(); + (void)displayProps; + clip = buf->getBit(); + brightness = buf->getRawChar8(); + contrast = buf->getRawChar8(); + fade = buf->getRawChar8(); + if (version > DRW::AC1021){ //2010+ + bool clipMode = buf->getBit(); + (void)clipMode; + } + duint16 clipType = buf->getBitShort(); + if (clipType == 1){ + buf->get2RawDouble(); + buf->get2RawDouble(); + } else { //clipType == 2 + dint32 numVerts = buf->getBitLong(); + for (int i= 0; i< numVerts;++i) + buf->get2RawDouble(); + } + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + dwgHandle biH = buf->getHandle(); + DRW_DBG("ImageDef Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + ref = biH.ref; + biH = buf->getHandle(); + DRW_DBG("ImageDefReactor Handle: "); DRW_DBGHL(biH.code, biH.size, biH.ref); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Dimension::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + text = reader->getUtf8String(); + break; + case 2: + name = reader->getString(); + break; + case 3: + style = reader->getUtf8String(); + break; + case 70: + type = reader->getInt32(); + break; + case 71: + align = reader->getInt32(); + break; + case 72: + linesty = reader->getInt32(); + break; + case 10: + defPoint.x = reader->getDouble(); + break; + case 20: + defPoint.y = reader->getDouble(); + break; + case 30: + defPoint.z = reader->getDouble(); + break; + case 11: + textPoint.x = reader->getDouble(); + break; + case 21: + textPoint.y = reader->getDouble(); + break; + case 31: + textPoint.z = reader->getDouble(); + break; + case 12: + clonePoint.x = reader->getDouble(); + break; + case 22: + clonePoint.y = reader->getDouble(); + break; + case 32: + clonePoint.z = reader->getDouble(); + break; + case 13: + def1.x = reader->getDouble(); + break; + case 23: + def1.y = reader->getDouble(); + break; + case 33: + def1.z = reader->getDouble(); + break; + case 14: + def2.x = reader->getDouble(); + break; + case 24: + def2.y = reader->getDouble(); + break; + case 34: + def2.z = reader->getDouble(); + break; + case 15: + circlePoint.x = reader->getDouble(); + break; + case 25: + circlePoint.y = reader->getDouble(); + break; + case 35: + circlePoint.z = reader->getDouble(); + break; + case 16: + arcPoint.x = reader->getDouble(); + break; + case 26: + arcPoint.y = reader->getDouble(); + break; + case 36: + arcPoint.z = reader->getDouble(); + break; + case 41: + linefactor = reader->getDouble(); + break; + case 42: + actual = reader->getDouble(); + hasActual = (actual != 0.0); + break; + case 53: + rot = reader->getDouble(); + break; + case 50: + angle = reader->getDouble(); + break; + case 52: + oblique = reader->getDouble(); + break; + case 40: + length = reader->getDouble(); + break; + case 51: + hdir = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Dimension::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *sBuf){ + DRW_DBG("\n***************************** parsing dimension *********************************************"); + if (version > DRW::AC1021) { //2010+ + duint8 dimVersion = buf->getRawChar8(); + DRW_DBG("\ndimVersion: "); DRW_DBG(dimVersion); + } + extPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextPoint: "); DRW_DBGPT(extPoint.x, extPoint.y, extPoint.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nFive unknown bits: "); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + } + textPoint.x = buf->getRawDouble(); + textPoint.y = buf->getRawDouble(); + textPoint.z = buf->getBitDouble(); + DRW_DBG("\ntextPoint: "); DRW_DBGPT(textPoint.x, textPoint.y, textPoint.z); + type = buf->getRawChar8(); + DRW_DBG("\ntype (70) read: "); DRW_DBG(type); + type = (type & 1) ? type & 0x7F : type | 0x80; //set bit 7 + type = (type & 2) ? type | 0x20 : type & 0xDF; //set bit 5 + DRW_DBG(" type (70) set: "); DRW_DBG(type); + //clear last 3 bits to set integer dim type + type &= 0xF8; + text = sBuf->getVariableText(version, false); + DRW_DBG("\nforced dim text: "); DRW_DBG(text.c_str()); + rot = buf->getBitDouble(); + hdir = buf->getBitDouble(); + DRW_Coord inspoint = buf->get3BitDouble(); + DRW_DBG("\ninspoint: "); DRW_DBGPT(inspoint.x, inspoint.y, inspoint.z); + double insRot_code54 = buf->getBitDouble(); //RLZ: unknown, investigate + DRW_DBG(" insRot_code54: "); DRW_DBG(insRot_code54); + if (version > DRW::AC1014) { //2000+ + align = buf->getBitShort(); + linesty = buf->getBitShort(); + linefactor = buf->getBitDouble(); + double actMeas = buf->getBitDouble(); + DRW_DBG("\n actMeas_code42: "); DRW_DBG(actMeas); + if (version > DRW::AC1018) { //2007+ + bool unk = buf->getBit(); + bool flip1 = buf->getBit(); + bool flip2 = buf->getBit(); + DRW_DBG("\n2007, unk, flip1, flip2: "); DRW_DBG(unk); DRW_DBG(flip1); DRW_DBG(flip2); + } + } + clonePoint.x = buf->getRawDouble(); + clonePoint.y = buf->getRawDouble(); + DRW_DBG("\nclonePoint: "); DRW_DBGPT(clonePoint.x, clonePoint.y, clonePoint.z); + + return buf->isGood(); +} + +bool DRW_DimAligned::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + if (oType == 0x15) + DRW_DBG("\n***************************** parsing dim linear *********************************************\n"); + else + DRW_DBG("\n***************************** parsing dim aligned *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setPt3(pt); //def1 + DRW_DBG("def1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setOb52(buf->getBitDouble()); + if (oType == 0x15) + setAn50(buf->getBitDouble() * ARAD); + else + type |= 1; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + + bool DRW_DimRadial::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim radial *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setRa40(buf->getBitDouble()); //leader length code 40 + DRW_DBG("\nleader length: "); DRW_DBG(getRa40()); + type |= 4; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + + bool DRW_DimDiametric::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim diametric *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("center point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + setRa40(buf->getBitDouble()); //leader length code 40 + DRW_DBG("\nleader length: "); DRW_DBG(getRa40()); + type |= 3; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); + } + +bool DRW_DimAngular::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim angular *********************************************\n"); + DRW_Coord pt; + pt.x = buf->getRawDouble(); + pt.y = buf->getRawDouble(); + setPt6(pt); //code 16 + DRW_DBG("arc Point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 code 13 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); //def2 code 14 + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("\ndefPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + type |= 0x02; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_DimAngular3p::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim angular3p *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); //code 10 + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 code 13 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); //def2 code 14 + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt5(pt); //center pt code 15 + DRW_DBG("\ncenter point: "); DRW_DBGPT(pt.x, pt.y, pt.z); + type |= 0x05; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); DRW_DBG("\n"); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_DimOrdinate::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + ret = DRW_Dimension::parseDwg(version, buf, sBuf); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing dim ordinate *********************************************\n"); + DRW_Coord pt = buf->get3BitDouble(); + setDefPoint(pt); + DRW_DBG("defPoint: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt3(pt); //def1 + DRW_DBG("\ndef1: "); DRW_DBGPT(pt.x, pt.y, pt.z); + pt = buf->get3BitDouble(); + setPt4(pt); + DRW_DBG("\ndef2: "); DRW_DBGPT(pt.x, pt.y, pt.z); + duint8 type2 = buf->getRawChar8();//RLZ: correct this + DRW_DBG("type2 (70) read: "); DRW_DBG(type2); + type = (type2 & 1) ? type | 0x80 : type & 0xBF; //set bit 6 + DRW_DBG(" type (70) set: "); DRW_DBG(type); + type |= 6; + DRW_DBG("\n type (70) final: "); DRW_DBG(type); + + ret = DRW_Entity::parseDwgEntHandle(version, buf); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (!ret) + return ret; + dimStyleH = buf->getHandle(); + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + blockH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("anon block Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + // RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Leader::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + style = reader->getUtf8String(); + break; + case 71: + arrow = reader->getInt32(); + break; + case 72: + leadertype = reader->getInt32(); + break; + case 73: + flag = reader->getInt32(); + break; + case 74: + hookline = reader->getInt32(); + break; + case 75: + hookflag = reader->getInt32(); + break; + case 76: + vertnum = reader->getInt32(); + break; + case 77: + coloruse = reader->getInt32(); + break; + case 40: + textheight = reader->getDouble(); + break; + case 41: + textwidth = reader->getDouble(); + break; + case 10: { + vertexpoint = new DRW_Coord(); + vertexlist.push_back(vertexpoint); + vertexpoint->x = reader->getDouble(); + break; } + case 20: + if(vertexpoint != NULL) + vertexpoint->y = reader->getDouble(); + break; + case 30: + if(vertexpoint != NULL) + vertexpoint->z = reader->getDouble(); + break; + case 340: + annotHandle = reader->getHandleString(); + break; + case 210: + extrusionPoint.x = reader->getDouble(); + break; + case 220: + extrusionPoint.y = reader->getDouble(); + break; + case 230: + extrusionPoint.z = reader->getDouble(); + break; + case 211: + horizdir.x = reader->getDouble(); + break; + case 221: + horizdir.y = reader->getDouble(); + break; + case 231: + horizdir.z = reader->getDouble(); + break; + case 212: + offsetblock.x = reader->getDouble(); + break; + case 222: + offsetblock.y = reader->getDouble(); + break; + case 232: + offsetblock.z = reader->getDouble(); + break; + case 213: + offsettext.x = reader->getDouble(); + break; + case 223: + offsettext.y = reader->getDouble(); + break; + case 233: + offsettext.z = reader->getDouble(); + break; + default: + DRW_Entity::parseCode(code, reader); + break; + } +} + +bool DRW_Leader::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing leader *********************************************\n"); + DRW_DBG("unknown bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" annot type "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" Path type "); DRW_DBG(buf->getBitShort()); + dint32 nPt = buf->getBitLong(); + DRW_DBG(" Num pts "); DRW_DBG(nPt); + + // add vertexs + for (int i = 0; i< nPt; i++){ + DRW_Coord* vertex = new DRW_Coord(buf->get3BitDouble()); + vertexlist.push_back(vertex); + DRW_DBG("\nvertex "); DRW_DBGPT(vertex->x, vertex->y, vertex->z); + } + DRW_Coord Endptproj = buf->get3BitDouble(); + DRW_DBG("\nEndptproj "); DRW_DBGPT(Endptproj.x, Endptproj.y, Endptproj.z); + extrusionPoint = buf->getExtrusion(version > DRW::AC1014); + DRW_DBG("\nextrusionPoint "); DRW_DBGPT(extrusionPoint.x, extrusionPoint.y, extrusionPoint.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nFive unknown bits: "); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); DRW_DBG(buf->getBit()); + } + horizdir = buf->get3BitDouble(); + DRW_DBG("\nhorizdir "); DRW_DBGPT(horizdir.x, horizdir.y, horizdir.z); + offsetblock = buf->get3BitDouble(); + DRW_DBG("\noffsetblock "); DRW_DBGPT(offsetblock.x, offsetblock.y, offsetblock.z); + if (version > DRW::AC1012) { //R14+ + DRW_Coord unk = buf->get3BitDouble(); + DRW_DBG("\nunknown "); DRW_DBGPT(unk.x, unk.y, unk.z); + } + if (version < DRW::AC1015) { //R14 - + DRW_DBG("\ndimgap "); DRW_DBG(buf->getBitDouble()); + } + if (version < DRW::AC1024) { //2010- + textheight = buf->getBitDouble(); + textwidth = buf->getBitDouble(); + DRW_DBG("\ntextheight "); DRW_DBG(textheight); DRW_DBG(" textwidth "); DRW_DBG(textwidth); + } + hookline = buf->getBit(); + arrow = buf->getBit(); + DRW_DBG(" hookline "); DRW_DBG(hookline); DRW_DBG(" arrow flag "); DRW_DBG(arrow); + + if (version < DRW::AC1015) { //R14 - + DRW_DBG("\nArrow head type "); DRW_DBG(buf->getBitShort()); + DRW_DBG("dimasz "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nunk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk short "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" byBlock color "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + } else { //R2000+ + DRW_DBG("\nunk short "); DRW_DBG(buf->getBitShort()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + DRW_DBG(" unk bit "); DRW_DBG(buf->getBit()); + } + DRW_DBG("\n"); + ret = DRW_Entity::parseDwgEntHandle(version, buf); + if (!ret) + return ret; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + AnnotH = buf->getHandle(); + annotHandle = AnnotH.ref; + DRW_DBG("annot block Handle: "); DRW_DBGHL(AnnotH.code, AnnotH.size, dimStyleH.ref); DRW_DBG("\n"); + dimStyleH = buf->getHandle(); /* H 7 STYLE (hard pointer) */ + DRW_DBG("dim style Handle: "); DRW_DBGHL(dimStyleH.code, dimStyleH.size, dimStyleH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +void DRW_Viewport::parseCode(int code, dxfReader *reader){ + switch (code) { + case 40: + pswidth = reader->getDouble(); + break; + case 41: + psheight = reader->getDouble(); + break; + case 68: + vpstatus = reader->getInt32(); + break; + case 69: + vpID = reader->getInt32(); + break; + case 12: { + centerPX = reader->getDouble(); + break; } + case 22: + centerPY = reader->getDouble(); + break; + default: + DRW_Point::parseCode(code, reader); + break; + } +} +//ex 22 dec 34 +bool DRW_Viewport::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_Entity::parseDwg(version, buf, sBuf, bs); + if (!ret) + return ret; + DRW_DBG("\n***************************** parsing viewport *****************************************\n"); + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("center "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); + pswidth = buf->getBitDouble(); + psheight = buf->getBitDouble(); + DRW_DBG("\nWidth: "); DRW_DBG(pswidth); DRW_DBG(", Height: "); DRW_DBG(psheight); DRW_DBG("\n"); + //RLZ TODO: complete in dxf + if (version > DRW::AC1014) {//2000+ + viewTarget.x = buf->getBitDouble(); + viewTarget.y = buf->getBitDouble(); + viewTarget.z = buf->getBitDouble(); + DRW_DBG("view Target "); DRW_DBGPT(viewTarget.x, viewTarget.y, viewTarget.z); + viewDir.x = buf->getBitDouble(); + viewDir.y = buf->getBitDouble(); + viewDir.z = buf->getBitDouble(); + DRW_DBG("\nview direction "); DRW_DBGPT(viewDir.x, viewDir.y, viewDir.z); + twistAngle = buf->getBitDouble(); + DRW_DBG("\nView twist Angle: "); DRW_DBG(twistAngle); + viewHeight = buf->getBitDouble(); + DRW_DBG("\nview Height: "); DRW_DBG(viewHeight); + viewLength = buf->getBitDouble(); + DRW_DBG(" Lens Length: "); DRW_DBG(viewLength); + frontClip = buf->getBitDouble(); + DRW_DBG("\nfront Clip Z: "); DRW_DBG(frontClip); + backClip = buf->getBitDouble(); + DRW_DBG(" back Clip Z: "); DRW_DBG(backClip); + snapAngle = buf->getBitDouble(); + DRW_DBG("\n snap Angle: "); DRW_DBG(snapAngle); + centerPX = buf->getRawDouble(); + centerPY = buf->getRawDouble(); + DRW_DBG("\nview center X: "); DRW_DBG(centerPX); DRW_DBG(", Y: "); DRW_DBG(centerPX); + snapPX = buf->getRawDouble(); + snapPY = buf->getRawDouble(); + DRW_DBG("\nSnap base point X: "); DRW_DBG(snapPX); DRW_DBG(", Y: "); DRW_DBG(snapPY); + snapSpPX = buf->getRawDouble(); + snapSpPY = buf->getRawDouble(); + DRW_DBG("\nSnap spacing X: "); DRW_DBG(snapSpPX); DRW_DBG(", Y: "); DRW_DBG(snapSpPY); + //RLZ: need to complete + DRW_DBG("\nGrid spacing X: "); DRW_DBG(buf->getRawDouble()); DRW_DBG(", Y: "); DRW_DBG(buf->getRawDouble());DRW_DBG("\n"); + DRW_DBG("Circle zoom?: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + DRW_DBG("Grid major?: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1014) {//2000+ + frozenLyCount = buf->getBitLong(); + DRW_DBG("Frozen Layer count?: "); DRW_DBG(frozenLyCount); DRW_DBG("\n"); + DRW_DBG("Status Flags?: "); DRW_DBG(buf->getBitLong()); DRW_DBG("\n"); + //RLZ: Warning needed separate string bufer + DRW_DBG("Style sheet?: "); DRW_DBG(sBuf->getVariableText(version, false)); DRW_DBG("\n"); + DRW_DBG("Render mode?: "); DRW_DBG(buf->getRawChar8()); DRW_DBG("\n"); + DRW_DBG("UCS OMore...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("UCS VMore...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("UCS OMore...: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("ucs XAMore...: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS YMore....: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS EMore...: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("UCS OVMore...: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("ShadePlot Mode...: "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + DRW_DBG("Use def Ligth...: "); DRW_DBG(buf->getBit()); DRW_DBG("\n"); + DRW_DBG("Def ligth tipe?: "); DRW_DBG(buf->getRawChar8()); DRW_DBG("\n"); + DRW_DBG("Brightness: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG("Contrast: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); +// DRW_DBG("Ambient Cmc or Enc: "); DRW_DBG(buf->getCmColor(version)); DRW_DBG("\n"); + DRW_DBG("Ambient (Cmc or Enc?), Enc: "); DRW_DBG(buf->getEnColor(version)); DRW_DBG("\n"); + } + ret = DRW_Entity::parseDwgEntHandle(version, buf); + + dwgHandle someHdl; + if (version < DRW::AC1015) {//R13 & R14 only + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("ViewPort ent header: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + if (version > DRW::AC1014) {//2000+ + for (duint8 i=0; i < frozenLyCount; ++i){ + someHdl = buf->getHandle(); + DRW_DBG("Frozen layer handle "); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + someHdl = buf->getHandle(); + DRW_DBG("Clip bpundary handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + if (version == DRW::AC1015) {//2000 only + someHdl = buf->getHandle(); + DRW_DBG("ViewPort ent header: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + someHdl = buf->getHandle(); + DRW_DBG("Named ucs handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("base ucs handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ + someHdl = buf->getHandle(); + DRW_DBG("background handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("visual style handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("shadeplot ID handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + someHdl = buf->getHandle(); + DRW_DBG("SUN handle: "); DRW_DBGHL(someHdl.code, someHdl.size, someHdl.ref); DRW_DBG("\n"); + } + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + + if (!ret) + return ret; + return buf->isGood(); +} diff --git a/extlib/libdxfrw/drw_entities.h b/extlib/libdxfrw/drw_entities.h new file mode 100644 index 0000000..be0ab82 --- /dev/null +++ b/extlib/libdxfrw/drw_entities.h @@ -0,0 +1,1572 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_ENTITIES_H +#define DRW_ENTITIES_H + + +#include +#include +#include +#include "drw_base.h" + +class dxfReader; +class dwgBuffer; +class DRW_Polyline; + +namespace DRW { + + //! Entity's type. + enum ETYPE { + E3DFACE, +// E3DSOLID, //encripted propietry data +// ACAD_PROXY_ENTITY, + ARC, +// ATTDEF, +// ATTRIB, + BLOCK,// and ENDBLK +// BODY, //encripted propietry data + CIRCLE, + DIMENSION, + DIMALIGNED, + DIMLINEAR, + DIMRADIAL, + DIMDIAMETRIC, + DIMANGULAR, + DIMANGULAR3P, + DIMORDINATE, + ELLIPSE, + HATCH, +// HELIX, + IMAGE, + INSERT, + LEADER, +// LIGHT, + LINE, + LWPOLYLINE, +// MESH, +// MLINE, +// MLEADERSTYLE, +// MLEADER, + MTEXT, +// OLEFRAME, +// OLE2FRAME, + POINT, + POLYLINE, + RAY, +// REGION, //encripted propietry data +// SECTION, +// SEQEND,//not needed?? used in polyline and insert/attrib and dwg +// SHAPE, + SOLID, + SPLINE, +// SUN, +// SURFACE, //encripted propietry data can be four types +// TABLE, + TEXT, +// TOLERANCE, + TRACE, + UNDERLAY, + VERTEX, + VIEWPORT, +// WIPEOUT, //WIPEOUTVARIABLE + XLINE, + UNKNOWN + }; + +} +//only in DWG: MINSERT, 5 types of vertex, 4 types of polylines: 2d, 3d, pface & mesh +//shape, dictionary, MLEADER, MLEADERSTYLE + +#define SETENTFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Base class for entities +/*! +* Base class for entities +* @author Rallaz +*/ +class DRW_Entity { + SETENTFRIENDS +public: + //initializes default values + DRW_Entity() { + eType = DRW::UNKNOWN; + handle = parentHandle = DRW::NoHandle; //no handle (0) + lineType = "BYLAYER"; + color = DRW::ColorByLayer; // default BYLAYER (256) + ltypeScale = 1.0; + visible = true; + layer = "0"; + lWeight = DRW_LW_Conv::widthByLayer; // default BYLAYER (dxf -1, dwg 29) + space = DRW::ModelSpace; // default ModelSpace (0) + haveExtrusion = false; + color24 = -1; //default -1 not set + numProxyGraph = 0; + shadow = DRW::CastAndReceieveShadows; + material = DRW::MaterialByLayer; + plotStyle = DRW::DefaultPlotStyle; + transparency = DRW::Opaque; + nextEntLink = prevEntLink = 0; + numReactors = xDictFlag = 0; + curr = NULL; + ownerHandle= false; + } + + DRW_Entity(const DRW_Entity& e) { + eType = e.eType; + handle = e.handle; + parentHandle = e.parentHandle; //no handle (0) + lineType = e.lineType; + color = e.color; // default BYLAYER (256) + ltypeScale = e.ltypeScale; + visible = e.visible; + layer = e.layer; + lWeight = e.lWeight; + space = e.space; + haveExtrusion = e.haveExtrusion; + color24 = e.color24; //default -1 not set + numProxyGraph = e.numProxyGraph; + shadow = e.shadow; + material = e.material; + plotStyle = e.plotStyle; + transparency = e.transparency; + nextEntLink = e.nextEntLink; + prevEntLink = e.prevEntLink; + numReactors = e.numReactors; + xDictFlag = e.xDictFlag; + curr = NULL; + ownerHandle= false; +// curr = e.curr; + for (std::vector::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){ + extData.push_back(new DRW_Variant(*(*it))); + } + } + + virtual ~DRW_Entity() { + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + + extData.clear(); + } + + void reset(){ + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + extData.clear(); + } + + virtual void applyExtrusion() = 0; + + void setWidthMm(double millimeters) { + if(millimeters < 0.0) { + lWeight = DRW_LW_Conv::widthByLayer; + return; + } + if(millimeters > 2.11) millimeters = 2.11; + lWeight = DRW_LW_Conv::dxfInt2lineWidth(int(floor(millimeters * 100.0))); + } + +protected: + //parses dxf pair to read entity + bool parseCode(int code, dxfReader *reader); + //calculates extrusion axis (normal vector) + void calculateAxis(DRW_Coord extPoint); + //apply extrusion to @extPoint and return data in @point + void extrudePoint(DRW_Coord extPoint, DRW_Coord *point); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0)=0; + //parses dwg common start part to read entity + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs=0); + //parses dwg common handles part to read entity + bool parseDwgEntHandle(DRW::Version version, dwgBuffer *buf); + + //parses dxf 102 groups to read entity + bool parseDxfGroups(int code, dxfReader *reader); + +public: + enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */ + duint32 handle; /*!< entity identifier, code 5 */ + std::list > appData; /*!< list of application data, code 102 */ + duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */ + DRW::Space space; /*!< space indicator, code 67*/ + UTF8STRING layer; /*!< layer name, code 8 */ + UTF8STRING lineType; /*!< line type, code 6 */ + duint32 material; /*!< hard pointer id to material object, code 347 */ + int color; /*!< entity color, code 62 */ + enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */ + double ltypeScale; /*!< linetype scale, code 48 */ + bool visible; /*!< entity visibility, code 60 */ + int numProxyGraph; /*!< Number of bytes in proxy graphics, code 92 */ + std::string proxyGraphics; /*!< proxy graphics bytes, code 310 */ + int color24; /*!< 24-bit color, code 420 */ + std::string colorName; /*!< color name, code 430 */ + int transparency; /*!< transparency, code 440 */ + int plotStyle; /*!< hard pointer id to plot style object, code 390 */ + DRW::ShadowMode shadow; /*!< shadow mode, code 284 */ + bool haveExtrusion; /*!< set to true if the entity have extrusion*/ + std::vector extData; /*!< FIFO list of extended data, codes 1000 to 1071*/ + +protected: //only for read dwg + duint8 haveNextLinks; //aka nolinks //B + duint8 plotFlags; //presence of plot style //BB + duint8 ltFlags; //presence of linetype handle //BB + duint8 materialFlag; //presence of material handle //BB + duint8 shadowFlag; //presence of shadow handle ?? (in dwg may be plotflag)//RC + dwgHandle lTypeH; + dwgHandle layerH; + duint32 nextEntLink; + duint32 prevEntLink; + bool ownerHandle; + + duint8 xDictFlag; + dint32 numReactors; // + duint32 objSize; //RL 32bits object data size in bits + dint16 oType; + +private: + DRW_Coord extAxisX; + DRW_Coord extAxisY; + DRW_Variant* curr; +}; + + +//! Class to handle point entity +/*! +* Class to handle point entity +* @author Rallaz +*/ +class DRW_Point : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Point() { + eType = DRW::POINT; + basePoint.z = extPoint.x = extPoint.y = 0; + extPoint.z = 1; + thickness = 0; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */ + double thickness; /*!< thickness, code 39 */ + DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ + // TNick: we're not handling code 50 - Angle of the X axis for + // the UCS in effect when the point was drawn +}; + +//! Class to handle line entity +/*! +* Class to handle line entity +* @author Rallaz +*/ +class DRW_Line : public DRW_Point { + SETENTFRIENDS +public: + DRW_Line() { + eType = DRW::LINE; + secPoint.z = 0; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord secPoint; /*!< second point, code 11, 21 & 31 */ +}; + +//! Class to handle ray entity +/*! +* Class to handle ray entity +* @author Rallaz +*/ +class DRW_Ray : public DRW_Line { + SETENTFRIENDS +public: + DRW_Ray() { + eType = DRW::RAY; + } +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle xline entity +/*! +* Class to handle xline entity +* @author Rallaz +*/ +class DRW_Xline : public DRW_Ray { +public: + DRW_Xline() { + eType = DRW::XLINE; + } +}; + +//! Class to handle circle entity +/*! +* Class to handle circle entity +* @author Rallaz +*/ +class DRW_Circle : public DRW_Point { + SETENTFRIENDS +public: + DRW_Circle() { + eType = DRW::CIRCLE; + } + + virtual void applyExtrusion(); + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double radious; /*!< radius, code 40 */ +}; + +//! Class to handle arc entity +/*! +* Class to handle arc entity +* @author Rallaz +*/ +class DRW_Arc : public DRW_Circle { + SETENTFRIENDS +public: + DRW_Arc() { + eType = DRW::ARC; + isccw = 1; + } + + virtual void applyExtrusion(); + + //! center point in OCS + const DRW_Coord & center() { return basePoint; } + //! the radius of the circle + double radius() { return radious; } + //! start angle in radians + double startAngle() { return staangle; } + //! end angle in radians + double endAngle() { return endangle; } + //! thickness + double thick() { return thickness; } + //! extrusion + const DRW_Coord & extrusion() { return extPoint; } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + double staangle; /*!< start angle, code 50 in radians*/ + double endangle; /*!< end angle, code 51 in radians */ + int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */ +}; + +//! Class to handle ellipse entity +/*! +* Class to handle ellipse and elliptic arc entity +* Note: start/end parameter are in radians for ellipse entity but +* for hatch boundary are in degrees +* @author Rallaz +*/ +class DRW_Ellipse : public DRW_Line { + SETENTFRIENDS +public: + DRW_Ellipse() { + eType = DRW::ELLIPSE; + isccw = 1; + } + + void toPolyline(DRW_Polyline *pol, int parts = 128); + virtual void applyExtrusion(); + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +private: + void correctAxis(); + +public: + double ratio; /*!< ratio, code 40 */ + double staparam; /*!< start parameter, code 41, 0.0 for full ellipse*/ + double endparam; /*!< end parameter, code 42, 2*PI for full ellipse */ + int isccw; /*!< is counter clockwise arc?, only used in hatch, code 73 */ +}; + +//! Class to handle trace entity +/*! +* Class to handle trace entity +* @author Rallaz +*/ +class DRW_Trace : public DRW_Line { + SETENTFRIENDS +public: + DRW_Trace() { + eType = DRW::TRACE; + thirdPoint.z = 0; + fourPoint.z = 0; + } + + virtual void applyExtrusion(); + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord thirdPoint; /*!< third point, code 12, 22 & 32 */ + DRW_Coord fourPoint; /*!< four point, code 13, 23 & 33 */ +}; + +//! Class to handle solid entity +/*! +* Class to handle solid entity +* @author Rallaz +*/ +class DRW_Solid : public DRW_Trace { + SETENTFRIENDS +public: + DRW_Solid() { + eType = DRW::SOLID; + } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + //! first corner (2D) + const DRW_Coord & firstCorner() { return basePoint; } + //! second corner (2D) + const DRW_Coord & secondCorner() { return secPoint; } + //! third corner (2D) + const DRW_Coord & thirdCorner() { return thirdPoint; } + //! fourth corner (2D) + const DRW_Coord & fourthCorner() { return thirdPoint; } + //! thickness + double thick() { return thickness; } + //! elevation + double elevation() { return basePoint.z; } + //! extrusion + const DRW_Coord & extrusion() { return extPoint; } + +}; + +//! Class to handle 3dface entity +/*! +* Class to handle 3dface entity +* @author Rallaz +*/ +class DRW_3Dface : public DRW_Trace { + SETENTFRIENDS +public: + enum InvisibleEdgeFlags { + NoEdge = 0x00, + FirstEdge = 0x01, + SecodEdge = 0x02, + ThirdEdge = 0x04, + FourthEdge = 0x08, + AllEdges = 0x0F + }; + + DRW_3Dface() { + eType = DRW::E3DFACE; + invisibleflag = 0; + } + + virtual void applyExtrusion(){} + + //! first corner in WCS + const DRW_Coord & firstCorner() { return basePoint; } + //! second corner in WCS + const DRW_Coord & secondCorner() { return secPoint; } + //! third corner in WCS + const DRW_Coord & thirdCorner() { return thirdPoint; } + //! fourth corner in WCS + const DRW_Coord & fourthCorner() { return fourPoint; } + //! edge visibility flags + InvisibleEdgeFlags edgeFlags() { return (InvisibleEdgeFlags)invisibleflag; } + +protected: + //! interpret code in dxf reading process or dispatch to inherited class + void parseCode(int code, dxfReader *reader); + //! interpret dwg data (was already determined to be part of this object) + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + int invisibleflag; /*!< invisible edge flag, code 70 */ + +}; + +//! Class to handle block entries +/*! +* Class to handle block entries +* @author Rallaz +*/ +class DRW_Block : public DRW_Point { + SETENTFRIENDS +public: + DRW_Block() { + eType = DRW::BLOCK; + layer = "0"; + flags = 0; + name = "*U0"; + isEnd = false; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< block name, code 2 */ + int flags; /*!< block type, code 70 */ +private: + bool isEnd; //for dwg parsing +}; + + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_Insert : public DRW_Point { + SETENTFRIENDS +public: + DRW_Insert() { + eType = DRW::INSERT; + xscale = 1; + yscale = 1; + zscale = 1; + angle = 0; + colcount = 1; + rowcount = 1; + colspace = 0; + rowspace = 0; + } + + virtual void applyExtrusion(){DRW_Point::applyExtrusion();} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< block name, code 2 */ + double xscale; /*!< x scale factor, code 41 */ + double yscale; /*!< y scale factor, code 42 */ + double zscale; /*!< z scale factor, code 43 */ + double angle; /*!< rotation angle in radians, code 50 */ + int colcount; /*!< column count, code 70 */ + int rowcount; /*!< row count, code 71 */ + double colspace; /*!< column space, code 44 */ + double rowspace; /*!< row space, code 45 */ +public: //only for read dwg + dwgHandle blockRecH; + dwgHandle seqendH; //RLZ: on implement attrib remove this handle from obj list (see pline/vertex code) +}; + +//! Class to handle lwpolyline entity +/*! +* Class to handle lwpolyline entity +* @author Rallaz +*/ +class DRW_LWPolyline : public DRW_Entity { + SETENTFRIENDS +public: + DRW_LWPolyline() { + eType = DRW::LWPOLYLINE; + elevation = thickness = width = 0.0; + flags = 0; + extPoint.x = extPoint.y = 0; + extPoint.z = 1; + vertex = NULL; + } + + DRW_LWPolyline(const DRW_LWPolyline& p):DRW_Entity(p){ + this->eType = DRW::LWPOLYLINE; + this->elevation = p.elevation; + this->thickness = p.thickness; + this->width = p.width; + this->flags = p.flags; + this->extPoint = p.extPoint; + this->vertex = NULL; + for (unsigned i=0; ivertlist.push_back( new DRW_Vertex2D( *(p.vertlist.at(i)) ) ); + + this->vertex = NULL; + } + + ~DRW_LWPolyline() { + for(DRW_Vertex2D *item : vertlist) delete item; + } + virtual void applyExtrusion(); + void addVertex (DRW_Vertex2D v) { + DRW_Vertex2D *vert = new DRW_Vertex2D(); + vert->x = v.x; + vert->y = v.y; + vert->stawidth = v.stawidth; + vert->endwidth = v.endwidth; + vert->bulge = v.bulge; + vertlist.push_back(vert); + } + DRW_Vertex2D *addVertex () { + DRW_Vertex2D *vert = new DRW_Vertex2D(); + vert->stawidth = 0; + vert->endwidth = 0; + vert->bulge = 0; + vertlist.push_back(vert); + return vert; + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version v, dwgBuffer *buf, duint32 bs=0); + +public: + int vertexnum; /*!< number of vertex, code 90 */ + int flags; /*!< polyline flag, code 70, default 0 */ + double width; /*!< constant width, code 43 */ + double elevation; /*!< elevation, code 38 */ + double thickness; /*!< thickness, code 39 */ + DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ + DRW_Vertex2D *vertex; /*!< current vertex to add data */ + std::vector vertlist; /*!< vertex list */ +}; + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_Text : public DRW_Line { + SETENTFRIENDS +public: + //! Vertical alignments. + enum VAlign { + VBaseLine = 0, /*!< Top = 0 */ + VBottom, /*!< Bottom = 1 */ + VMiddle, /*!< Middle = 2 */ + VTop /*!< Top = 3 */ + }; + + //! Horizontal alignments. + enum HAlign { + HLeft = 0, /*!< Left = 0 */ + HCenter, /*!< Centered = 1 */ + HRight, /*!< Right = 2 */ + HAligned, /*!< Aligned = 3 (if VAlign==0) */ + HMiddle, /*!< middle = 4 (if VAlign==0) */ + HFit /*!< fit into point = 5 (if VAlign==0) */ + }; + + DRW_Text() { + eType = DRW::TEXT; + angle = 0; + widthscale = 1; + oblique = 0; + style = "STANDARD"; + textgen = 0; + alignH = HLeft; + alignV = VBaseLine; + } + + virtual void applyExtrusion(){} //RLZ TODO + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double height; /*!< height text, code 40 */ + UTF8STRING text; /*!< text string, code 1 */ + double angle; /*!< rotation angle in degrees (360), code 50 */ + double widthscale; /*!< width factor, code 41 */ + double oblique; /*!< oblique angle, code 51 */ + UTF8STRING style; /*!< style name, code 7 */ + int textgen; /*!< text generation, code 71 */ + enum HAlign alignH; /*!< horizontal align, code 72 */ + enum VAlign alignV; /*!< vertical align, code 73 */ + dwgHandle styleH; /*!< handle for text style */ +}; + +//! Class to handle insert entries +/*! +* Class to handle insert entries +* @author Rallaz +*/ +class DRW_MText : public DRW_Text { + SETENTFRIENDS +public: + //! Attachments. + enum Attach { + TopLeft = 1, + TopCenter, + TopRight, + MiddleLeft, + MiddleCenter, + MiddleRight, + BottomLeft, + BottomCenter, + BottomRight + }; + + DRW_MText() { + eType = DRW::MTEXT; + interlin = 1; + alignV = (VAlign)TopLeft; + textgen = 1; + haveXAxis = false; //if true needed to recalculate angle + } + +protected: + void parseCode(int code, dxfReader *reader); + void updateAngle(); //recalculate angle if 'haveXAxis' is true + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double interlin; /*!< width factor, code 44 */ +private: + bool haveXAxis; +}; + +//! Class to handle vertex +/*! +* Class to handle vertex for polyline entity +* @author Rallaz +*/ +class DRW_Vertex : public DRW_Point { + SETENTFRIENDS +public: + DRW_Vertex() { + eType = DRW::VERTEX; + stawidth = endwidth = bulge = 0; + vindex1 = vindex2 = vindex3 = vindex4 = 0; + flags = identifier = 0; + } + DRW_Vertex(double sx, double sy, double sz, double b) { + stawidth = endwidth = 0; + vindex1 = vindex2 = vindex3 = vindex4 = 0; + flags = identifier = 0; + basePoint.x = sx; + basePoint.y =sy; + basePoint.z =sz; + bulge = b; + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0, double el=0); + virtual bool parseDwg(DRW::Version version, dwgBuffer* buf, duint32 bs=0){ + DRW_UNUSED(version); DRW_UNUSED(buf); DRW_UNUSED(bs); return true;} + +public: + double stawidth; /*!< Start width, code 40 */ + double endwidth; /*!< End width, code 41 */ + double bulge; /*!< bulge, code 42 */ + + int flags; /*!< vertex flag, code 70, default 0 */ + double tgdir; /*!< curve fit tangent direction, code 50 */ + int vindex1; /*!< polyface mesh vertex index, code 71, default 0 */ + int vindex2; /*!< polyface mesh vertex index, code 72, default 0 */ + int vindex3; /*!< polyface mesh vertex index, code 73, default 0 */ + int vindex4; /*!< polyface mesh vertex index, code 74, default 0 */ + int identifier; /*!< vertex identifier, code 91, default 0 */ +}; + +//! Class to handle polyline entity +/*! +* Class to handle polyline entity +* @author Rallaz +*/ +class DRW_Polyline : public DRW_Point { + SETENTFRIENDS +public: + DRW_Polyline() { + eType = DRW::POLYLINE; + defstawidth = defendwidth = 0.0; + basePoint.x = basePoint.y = 0.0; + flags = vertexcount = facecount = 0; + smoothM = smoothN = curvetype = 0; + } + + DRW_Polyline(const DRW_Polyline& p) : DRW_Point(p) { + flags = p.flags ; + defstawidth = p.defstawidth; + defendwidth = p.defendwidth; + vertexcount = p.vertexcount; + facecount = p.facecount ; + smoothM = p.smoothM ; + smoothN = p.smoothN ; + curvetype = p.curvetype ; + for (unsigned i=0; ivertlist.push_back( new DRW_Vertex( *(p.vertlist.at(i)) ) ); + } + + ~DRW_Polyline() { + for(DRW_Vertex *item : vertlist) delete item; + } + void addVertex (DRW_Vertex v) { + DRW_Vertex *vert = new DRW_Vertex(); + vert->basePoint.x = v.basePoint.x; + vert->basePoint.y = v.basePoint.y; + vert->basePoint.z = v.basePoint.z; + vert->stawidth = v.stawidth; + vert->endwidth = v.endwidth; + vert->bulge = v.bulge; + vertlist.push_back(vert); + } + void appendVertex (DRW_Vertex *v) { + vertlist.push_back(v); + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + int flags; /*!< polyline flag, code 70, default 0 */ + double defstawidth; /*!< Start width, code 40, default 0 */ + double defendwidth; /*!< End width, code 41, default 0 */ + int vertexcount; /*!< polygon mesh M vertex or polyface vertex num, code 71, default 0 */ + int facecount; /*!< polygon mesh N vertex or polyface face num, code 72, default 0 */ + int smoothM; /*!< smooth surface M density, code 73, default 0 */ + int smoothN; /*!< smooth surface M density, code 74, default 0 */ + int curvetype; /*!< curves & smooth surface type, code 75, default 0 */ + + std::vector vertlist; /*!< vertex list */ + +private: + std::listhadlesList; //list of handles, only in 2004+ + duint32 firstEH; //handle of first entity, only in pre-2004 + duint32 lastEH; //handle of last entity, only in pre-2004 + dwgHandle seqEndH; //handle of SEQEND entity +}; + + +//! Class to handle spline entity +/*! +* Class to handle spline entity +* @author Rallaz +*/ +class DRW_Spline : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Spline() { + eType = DRW::SPLINE; + flags = nknots = ncontrol = nfit = 0; + tolknot = tolcontrol = tolfit = 0.0000001; + + } + + DRW_Spline(const DRW_Spline& p):DRW_Entity(p){ + eType = DRW::SPLINE; + normalVec = p.normalVec ; + tgStart = p.tgStart ; + tgEnd = p.tgEnd ; + flags = p.flags ; + degree = p.degree ; + nknots = p.nknots ; + ncontrol = p.ncontrol ; + nfit = p.nfit ; + tolknot = p.tolknot ; + tolcontrol = p.tolcontrol; + tolfit = p.tolfit ; + + for(double v : p.knotslist) knotslist.push_back(v); + for(double v : p.weightlist) weightlist.push_back(v); + for(DRW_Coord *v : p.controllist) controllist.push_back(new DRW_Coord(*v)); + for(DRW_Coord *v : p.fitlist) fitlist.push_back(new DRW_Coord(*v)); + } + + ~DRW_Spline() { + for(DRW_Coord *item : controllist) delete item; + for(DRW_Coord *item : fitlist) delete item; + } + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +// double ex; /*!< normal vector x coordinate, code 210 */ +// double ey; /*!< normal vector y coordinate, code 220 */ +// double ez; /*!< normal vector z coordinate, code 230 */ + DRW_Coord normalVec; /*!< normal vector, code 210, 220, 230 */ + DRW_Coord tgStart; /*!< start tangent, code 12, 22, 32 */ +// double tgsx; /*!< start tangent x coordinate, code 12 */ +// double tgsy; /*!< start tangent y coordinate, code 22 */ +// double tgsz; /*!< start tangent z coordinate, code 32 */ + DRW_Coord tgEnd; /*!< end tangent, code 13, 23, 33 */ +// double tgex; /*!< end tangent x coordinate, code 13 */ +// double tgey; /*!< end tangent y coordinate, code 23 */ +// double tgez; /*!< end tangent z coordinate, code 33 */ + int flags; /*!< spline flag, code 70 */ + int degree; /*!< degree of the spline, code 71 */ + dint32 nknots; /*!< number of knots, code 72, default 0 */ + dint32 ncontrol; /*!< number of control points, code 73, default 0 */ + dint32 nfit; /*!< number of fit points, code 74, default 0 */ + double tolknot; /*!< knot tolerance, code 42, default 0.0000001 */ + double tolcontrol; /*!< control point tolerance, code 43, default 0.0000001 */ + double tolfit; /*!< fit point tolerance, code 44, default 0.0000001 */ + + std::vector knotslist; /*!< knots list, code 40 */ + std::vector weightlist; /*!< weight list, code 41 */ + std::vector controllist; /*!< control points list, code 10, 20 & 30 */ + std::vector fitlist; /*!< fit points list, code 11, 21 & 31 */ + +private: + DRW_Coord *controlpoint; /*!< current control point to add data */ + DRW_Coord *fitpoint; /*!< current fit point to add data */ +}; + +//! Class to handle hatch loop +/*! +* Class to handle hatch loop +* @author Rallaz +*/ +class DRW_HatchLoop { +public: + DRW_HatchLoop(int t) { + type = t; + numedges = 0; + } + + ~DRW_HatchLoop() { + // for(DRW_LWPolyline *item : pollist) delete item; + for(DRW_Entity *item : objlist) delete item; + } + + void update() { + numedges = objlist.size(); + } + +public: + int type; /*!< boundary path type, code 92, polyline=2, default=0 */ + int numedges; /*!< number of edges (if not a polyline), code 93 */ +//TODO: store lwpolylines as entities +// std::vector pollist; /*!< polyline list */ + std::vector objlist; /*!< entities list */ +}; + +//! Class to handle hatch entity +/*! +* Class to handle hatch entity +* @author Rallaz +*/ +//TODO: handle lwpolylines, splines and ellipses +class DRW_Hatch : public DRW_Point { + SETENTFRIENDS +public: + DRW_Hatch() { + eType = DRW::HATCH; + angle = scale = 0.0; + basePoint.x = basePoint.y = basePoint.z = 0.0; + loopsnum = hstyle = associative = 0; + solid = hpattern = 1; + deflines = doubleflag = 0; + loop = NULL; + clearEntities(); + } + + ~DRW_Hatch() { + for(DRW_HatchLoop *item : looplist) delete item; + } + + void appendLoop (DRW_HatchLoop *v) { + looplist.push_back(v); + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING name; /*!< hatch pattern name, code 2 */ + int solid; /*!< solid fill flag, code 70, solid=1, pattern=0 */ + int associative; /*!< associativity, code 71, associatve=1, non-assoc.=0 */ + int hstyle; /*!< hatch style, code 75 */ + int hpattern; /*!< hatch pattern type, code 76 */ + int doubleflag; /*!< hatch pattern double flag, code 77, double=1, single=0 */ + int loopsnum; /*!< namber of boundary paths (loops), code 91 */ + double angle; /*!< hatch pattern angle, code 52 */ + double scale; /*!< hatch pattern scale, code 41 */ + int deflines; /*!< number of pattern definition lines, code 78 */ + + std::vector looplist; /*!< polyline list */ + +private: + void clearEntities(){ + pt = line = NULL; + pline = NULL; + arc = NULL; + ellipse = NULL; + spline = NULL; + plvert = NULL; + } + + void addLine() { + clearEntities(); + if (loop) { + pt = line = new DRW_Line; + loop->objlist.push_back(line); + } + } + + void addArc() { + clearEntities(); + if (loop) { + pt = arc = new DRW_Arc; + loop->objlist.push_back(arc); + } + } + + void addEllipse() { + clearEntities(); + if (loop) { + pt = ellipse = new DRW_Ellipse; + loop->objlist.push_back(ellipse); + } + } + + void addSpline() { + clearEntities(); + if (loop) { + pt = NULL; + spline = new DRW_Spline; + loop->objlist.push_back(spline); + } + } + + DRW_HatchLoop *loop; /*!< current loop to add data */ + DRW_Line *line; + DRW_Arc *arc; + DRW_Ellipse *ellipse; + DRW_Spline *spline; + DRW_LWPolyline *pline; + DRW_Point *pt; + DRW_Vertex2D *plvert; + bool ispol; +}; + +//! Class to handle image entity +/*! +* Class to handle image entity +* @author Rallaz +*/ +class DRW_Image : public DRW_Line { + SETENTFRIENDS +public: + DRW_Image() { + eType = DRW::IMAGE; + fade = clip = 0; + brightness = contrast = 50; + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + duint32 ref; /*!< Hard reference to imagedef object, code 340 */ + DRW_Coord vVector; /*!< V-vector of single pixel, x coordinate, code 12, 22 & 32 */ +// double vx; /*!< V-vector of single pixel, x coordinate, code 12 */ +// double vy; /*!< V-vector of single pixel, y coordinate, code 22 */ +// double vz; /*!< V-vector of single pixel, z coordinate, code 32 */ + double sizeu; /*!< image size in pixels, U value, code 13 */ + double sizev; /*!< image size in pixels, V value, code 23 */ + double dz; /*!< z coordinate, code 33 */ + int clip; /*!< Clipping state, code 280, 0=off 1=on */ + int brightness; /*!< Brightness value, code 281, (0-100) default 50 */ + int contrast; /*!< Brightness value, code 282, (0-100) default 50 */ + int fade; /*!< Brightness value, code 283, (0-100) default 0 */ + +}; + + +//! Base class for dimension entity +/*! +* Base class for dimension entity +* @author Rallaz +*/ +class DRW_Dimension : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Dimension() { + eType = DRW::DIMENSION; + type = 0; + linesty = 1; + linefactor = extPoint.z = 1.0; + angle = oblique = rot = 0.0; + align = 5; + style = "STANDARD"; + defPoint.z = extPoint.x = extPoint.y = 0; + textPoint.z = rot = 0; + clonePoint.x = clonePoint.y = clonePoint.z = 0; + length = 0.0; + hasActual = false; + actual = 0.0; + } + + DRW_Dimension(const DRW_Dimension& d): DRW_Entity(d) { + eType = DRW::DIMENSION; + type =d.type; + name = d.name; + defPoint = d.defPoint; + textPoint = d.textPoint; + text = d.text; + style = d.style; + align = d.align; + linesty = d.linesty; + linefactor = d.linefactor; + rot = d.rot; + extPoint = d.extPoint; + clonePoint = d.clonePoint; + def1 = d.def1; + def2 = d.def2; + angle = d.angle; + oblique = d.oblique; + arcPoint = d.arcPoint; + circlePoint = d.circlePoint; + length = d.length; + hasActual = d.hasActual; + actual = d.actual; + //RLZ needed a def value for this: hdir = ??? + } + virtual ~DRW_Dimension() {} + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *sBuf); + virtual bool parseDwg(DRW::Version version, dwgBuffer* buf, duint32 bs=0){ + DRW_UNUSED(version); DRW_UNUSED(buf); DRW_UNUSED(bs); return true;} + +public: + DRW_Coord getDefPoint() const {return defPoint;} /*!< Definition point, code 10, 20 & 30 */ + void setDefPoint(const DRW_Coord p) {defPoint =p;} + DRW_Coord getTextPoint() const {return textPoint;} /*!< Middle point of text, code 11, 21 & 31 */ + void setTextPoint(const DRW_Coord p) {textPoint =p;} + std::string getStyle() const {return style;} /*!< Dimension style, code 3 */ + void setStyle(const std::string s) {style = s;} + int getAlign() const { return align;} /*!< attachment point, code 71 */ + void setAlign(const int a) { align = a;} + int getTextLineStyle() const { return linesty;} /*!< Dimension text line spacing style, code 72, default 1 */ + void setTextLineStyle(const int l) { linesty = l;} + std::string getText() const {return text;} /*!< Dimension text explicitly entered by the user, code 1 */ + void setText(const std::string t) {text = t;} + double getTextLineFactor() const { return linefactor;} /*!< Dimension text line spacing factor, code 41, default 1? */ + void setTextLineFactor(const double l) { linefactor = l;} + double getDir() const { return rot;} /*!< rotation angle of the dimension text, code 53 (optional) default 0 */ + void setDir(const double d) { rot = d;} + + DRW_Coord getExtrusion(){return extPoint;} /*!< extrusion, code 210, 220 & 230 */ + void setExtrusion(const DRW_Coord p) {extPoint =p;} + std::string getName(){return name;} /*!< Name of the block that contains the entities, code 2 */ + void setName(const std::string s) {name = s;} +// int getType(){ return type;} /*!< Dimension type, code 70 */ + bool hasActualMeasurement() const { return hasActual; } + void setActualMeasurement(double value) { hasActual = true; actual = value; } + double getActualMeasurement() const { return actual; } + +protected: + DRW_Coord getPt2() const {return clonePoint;} + void setPt2(const DRW_Coord p) {clonePoint= p;} + DRW_Coord getPt3() const {return def1;} + void setPt3(const DRW_Coord p) {def1= p;} + DRW_Coord getPt4() const {return def2;} + void setPt4(const DRW_Coord p) {def2= p;} + DRW_Coord getPt5() const {return circlePoint;} + void setPt5(const DRW_Coord p) {circlePoint= p;} + DRW_Coord getPt6() const {return arcPoint;} + void setPt6(const DRW_Coord p) {arcPoint= p;} + double getAn50() const {return angle;} /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + void setAn50(const double d) {angle = d;} + double getOb52() const {return oblique;} /*!< oblique angle, code 52 */ + void setOb52(const double d) {oblique = d;} + double getRa40() const {return length;} /*!< Leader length, code 40 */ + void setRa40(const double d) {length = d;} +public: + int type; /*!< Dimension type, code 70 */ +private: + std::string name; /*!< Name of the block that contains the entities, code 2 */ + DRW_Coord defPoint; /*!< definition point, code 10, 20 & 30 (WCS) */ + DRW_Coord textPoint; /*!< Middle point of text, code 11, 21 & 31 (OCS) */ + UTF8STRING text; /*!< Dimension text explicitly entered by the user, code 1 */ + UTF8STRING style; /*!< Dimension style, code 3 */ + int align; /*!< attachment point, code 71 */ + int linesty; /*!< Dimension text line spacing style, code 72, default 1 */ + double linefactor; /*!< Dimension text line spacing factor, code 41, default 1? (value range 0.25 to 4.00*/ + double rot; /*!< rotation angle of the dimension text, code 53 */ + DRW_Coord extPoint; /*!< extrusion normal vector, code 210, 220 & 230 */ + + double hdir; /*!< horizontal direction for the dimension, code 51, default ? */ + DRW_Coord clonePoint; /*!< Insertion point for clones (Baseline & Continue), code 12, 22 & 32 (OCS) */ + DRW_Coord def1; /*!< Definition point 1for linear & angular, code 13, 23 & 33 (WCS) */ + DRW_Coord def2; /*!< Definition point 2, code 14, 24 & 34 (WCS) */ + double angle; /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + double oblique; /*!< oblique angle, code 52 */ + + DRW_Coord circlePoint; /*!< Definition point for diameter, radius & angular dims code 15, 25 & 35 (WCS) */ + DRW_Coord arcPoint; /*!< Point defining dimension arc, x coordinate, code 16, 26 & 36 (OCS) */ + double length; /*!< Leader length, code 40 */ + bool hasActual; /*!< Actual measurement has been read, code 42 */ + double actual; /*!< Actual measurement (optional; read-only value), code 42 */ + +protected: + dwgHandle dimStyleH; + dwgHandle blockH; +}; + + +//! Class to handle aligned dimension entity +/*! +* Class to handle aligned dimension entity +* @author Rallaz +*/ +class DRW_DimAligned : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAligned(){ + eType = DRW::DIMALIGNED; + type = 1; + } + DRW_DimAligned(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMALIGNED; + } + + DRW_Coord getClonepoint() const {return getPt2();} /*!< Insertion for clones (Baseline & Continue), 12, 22 & 32 */ + void setClonePoint(DRW_Coord c){setPt2(c);} + + DRW_Coord getDimPoint() const {return getDefPoint();} /*!< dim line location point, code 10, 20 & 30 */ + void setDimPoint(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDef1Point() const {return getPt3();} /*!< Definition point 1, code 13, 23 & 33 */ + void setDef1Point(const DRW_Coord p) {setPt3(p);} + DRW_Coord getDef2Point() const {return getPt4();} /*!< Definition point 2, code 14, 24 & 34 */ + void setDef2Point(const DRW_Coord p) {setPt4(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle linear or rotated dimension entity +/*! +* Class to handle linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimLinear : public DRW_DimAligned { +public: + DRW_DimLinear() { + eType = DRW::DIMLINEAR; + type = 0; + } + DRW_DimLinear(const DRW_Dimension& d): DRW_DimAligned(d) { + eType = DRW::DIMLINEAR; + } + + double getAngle() const {return getAn50();} /*!< Angle of rotated, horizontal, or vertical dimensions, code 50 */ + void setAngle(const double d) {setAn50(d);} + double getOblique() const {return getOb52();} /*!< oblique angle, code 52 */ + void setOblique(const double d) {setOb52(d);} +}; + +//! Class to handle radial dimension entity +/*! +* Class to handle aligned, linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimRadial : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimRadial() { + eType = DRW::DIMRADIAL; + type = 4; + } + DRW_DimRadial(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMRADIAL; + } + + DRW_Coord getCenterPoint() const {return getDefPoint();} /*!< center point, code 10, 20 & 30 */ + void setCenterPoint(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDiameterPoint() const {return getPt5();} /*!< Definition point for radius, code 15, 25 & 35 */ + void setDiameterPoint(const DRW_Coord p){setPt5(p);} + double getLeaderLength() const {return getRa40();} /*!< Leader length, code 40 */ + void setLeaderLength(const double d) {setRa40(d);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle radial dimension entity +/*! +* Class to handle aligned, linear or rotated dimension entity +* @author Rallaz +*/ +class DRW_DimDiametric : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimDiametric() { + eType = DRW::DIMDIAMETRIC; + type = 3; + } + DRW_DimDiametric(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMDIAMETRIC; + } + + DRW_Coord getDiameter1Point() const {return getPt5();} /*!< First definition point for diameter, code 15, 25 & 35 */ + void setDiameter1Point(const DRW_Coord p){setPt5(p);} + DRW_Coord getDiameter2Point() const {return getDefPoint();} /*!< Oposite point for diameter, code 10, 20 & 30 */ + void setDiameter2Point(const DRW_Coord p){setDefPoint(p);} + double getLeaderLength() const {return getRa40();} /*!< Leader length, code 40 */ + void setLeaderLength(const double d) {setRa40(d);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle angular dimension entity +/*! +* Class to handle angular dimension entity +* @author Rallaz +*/ +class DRW_DimAngular : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAngular() { + eType = DRW::DIMANGULAR; + type = 2; + } + DRW_DimAngular(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMANGULAR; + } + + DRW_Coord getFirstLine1() const {return getPt3();} /*!< Definition point line 1-1, code 13, 23 & 33 */ + void setFirstLine1(const DRW_Coord p) {setPt3(p);} + DRW_Coord getFirstLine2() const {return getPt4();} /*!< Definition point line 1-2, code 14, 24 & 34 */ + void setFirstLine2(const DRW_Coord p) {setPt4(p);} + DRW_Coord getSecondLine1() const {return getPt5();} /*!< Definition point line 2-1, code 15, 25 & 35 */ + void setSecondLine1(const DRW_Coord p) {setPt5(p);} + DRW_Coord getSecondLine2() const {return getDefPoint();} /*!< Definition point line 2-2, code 10, 20 & 30 */ + void setSecondLine2(const DRW_Coord p){setDefPoint(p);} + DRW_Coord getDimPoint() const {return getPt6();} /*!< Dimension definition point, code 16, 26 & 36 */ + void setDimPoint(const DRW_Coord p) {setPt6(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + + +//! Class to handle angular 3p dimension entity +/*! +* Class to handle angular 3p dimension entity +* @author Rallaz +*/ +class DRW_DimAngular3p : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimAngular3p() { + eType = DRW::DIMANGULAR3P; + type = 5; + } + DRW_DimAngular3p(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMANGULAR3P; + } + + DRW_Coord getFirstLine() const {return getPt3();} /*!< Definition point line 1, code 13, 23 & 33 */ + void setFirstLine(const DRW_Coord p) {setPt3(p);} + DRW_Coord getSecondLine() const {return getPt4();} /*!< Definition point line 2, code 14, 24 & 34 */ + void setSecondLine(const DRW_Coord p) {setPt4(p);} + DRW_Coord getVertexPoint() const {return getPt5();} /*!< Vertex point, code 15, 25 & 35 */ + void SetVertexPoint(const DRW_Coord p) {setPt5(p);} + DRW_Coord getDimPoint() const {return getDefPoint();} /*!< Dimension definition point, code 10, 20 & 30 */ + void setDimPoint(const DRW_Coord p) {setDefPoint(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +//! Class to handle ordinate dimension entity +/*! +* Class to handle ordinate dimension entity +* @author Rallaz +*/ +class DRW_DimOrdinate : public DRW_Dimension { + SETENTFRIENDS +public: + DRW_DimOrdinate() { + eType = DRW::DIMORDINATE; + type = 6; + } + DRW_DimOrdinate(const DRW_Dimension& d): DRW_Dimension(d) { + eType = DRW::DIMORDINATE; + } + + DRW_Coord getOriginPoint() const {return getDefPoint();} /*!< Origin definition point, code 10, 20 & 30 */ + void setOriginPoint(const DRW_Coord p) {setDefPoint(p);} + DRW_Coord getFirstLine() const {return getPt3();} /*!< Feature location point, code 13, 23 & 33 */ + void setFirstLine(const DRW_Coord p) {setPt3(p);} + DRW_Coord getSecondLine() const {return getPt4();} /*!< Leader end point, code 14, 24 & 34 */ + void setSecondLine(const DRW_Coord p) {setPt4(p);} + +protected: + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + + +//! Class to handle leader entity +/*! +* Class to handle leader entity +* @author Rallaz +*/ +class DRW_Leader : public DRW_Entity { + SETENTFRIENDS +public: + DRW_Leader() { + eType = DRW::LEADER; + flag = 3; + hookflag = vertnum = leadertype = 0; + extrusionPoint.x = extrusionPoint.y = 0.0; + arrow = 1; + extrusionPoint.z = 1.0; + } + ~DRW_Leader() { + for(DRW_Coord *item : vertexlist) delete item; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING style; /*!< Dimension style name, code 3 */ + int arrow; /*!< Arrowhead flag, code 71, 0=Disabled; 1=Enabled */ + int leadertype; /*!< Leader path type, code 72, 0=Straight line segments; 1=Spline */ + int flag; /*!< Leader creation flag, code 73, default 3 */ + int hookline; /*!< Hook line direction flag, code 74, default 1 */ + int hookflag; /*!< Hook line flag, code 75 */ + double textheight; /*!< Text annotation height, code 40 */ + double textwidth; /*!< Text annotation width, code 41 */ + int vertnum; /*!< Number of vertices, code 76 */ + int coloruse; /*!< Color to use if leader's DIMCLRD = BYBLOCK, code 77 */ + duint32 annotHandle; /*!< Hard reference to associated annotation, code 340 */ + DRW_Coord extrusionPoint; /*!< Normal vector, code 210, 220 & 230 */ + DRW_Coord horizdir; /*!< "Horizontal" direction for leader, code 211, 221 & 231 */ + DRW_Coord offsetblock; /*!< Offset of last leader vertex from block, code 212, 222 & 232 */ + DRW_Coord offsettext; /*!< Offset of last leader vertex from annotation, code 213, 223 & 233 */ + + std::vector vertexlist; /*!< vertex points list, code 10, 20 & 30 */ + +private: + DRW_Coord *vertexpoint; /*!< current control point to add data */ + dwgHandle dimStyleH; + dwgHandle AnnotH; +}; + +//! Class to handle viewport entity +/*! +* Class to handle viewport entity +* @author Rallaz +*/ +class DRW_Viewport : public DRW_Point { + SETENTFRIENDS +public: + DRW_Viewport() { + eType = DRW::VIEWPORT; + vpstatus = 0; + pswidth = 205; + psheight = 156; + centerPX = 128.5; + centerPY = 97.5; + } + + virtual void applyExtrusion(){} + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double pswidth; /*!< Width in paper space units, code 40 */ + double psheight; /*!< Height in paper space units, code 41 */ + int vpstatus; /*!< Viewport status, code 68 */ + int vpID; /*!< Viewport ID, code 69 */ + double centerPX; /*!< view center point X, code 12 */ + double centerPY; /*!< view center point Y, code 22 */ + double snapPX; /*!< Snap base point X, code 13 */ + double snapPY; /*!< Snap base point Y, code 23 */ + double snapSpPX; /*!< Snap spacing X, code 14 */ + double snapSpPY; /*!< Snap spacing Y, code 24 */ + //TODO: complete in dxf + DRW_Coord viewDir; /*!< View direction vector, code 16, 26 & 36 */ + DRW_Coord viewTarget; /*!< View target point, code 17, 27, 37 */ + double viewLength; /*!< Perspective lens length, code 42 */ + double frontClip; /*!< Front clip plane Z value, code 43 */ + double backClip; /*!< Back clip plane Z value, code 44 */ + double viewHeight; /*!< View height in model space units, code 45 */ + double snapAngle; /*!< Snap angle, code 50 */ + double twistAngle; /*!< view twist angle, code 51 */ + +private: + duint32 frozenLyCount; +};//RLZ: missing 15,25, 72, 331, 90, 340, 1, 281, 71, 74, 110, 120, 130, 111, 121,131, 112,122, 132, 345,346, and more... + +//used //DRW_Coord basePoint; /*!< base point, code 10, 20 & 30 */ + +//double thickness; /*!< thickness, code 39 */ +//DRW_Coord extPoint; /*!< Dir extrusion normal vector, code 210, 220 & 230 */ +//enum DRW::ETYPE eType; /*!< enum: entity type, code 0 */ +//duint32 handle; /*!< entity identifier, code 5 */ +//std::list > appData; /*!< list of application data, code 102 */ +//duint32 parentHandle; /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */ +//DRW::Space space; /*!< space indicator, code 67*/ +//UTF8STRING layer; /*!< layer name, code 8 */ +//UTF8STRING lineType; /*!< line type, code 6 */ +//duint32 material; /*!< hard pointer id to material object, code 347 */ +//int color; /*!< entity color, code 62 */ +//enum DRW_LW_Conv::lineWidth lWeight; /*!< entity lineweight, code 370 */ +//double ltypeScale; /*!< linetype scale, code 48 */ +//bool visible; /*!< entity visibility, code 60 */ +//int numProxyGraph; /*!< Number of bytes in proxy graphics, code 92 */ +//std::string proxyGraphics; /*!< proxy graphics bytes, code 310 */ +//int color24; /*!< 24-bit color, code 420 */ +//std::string colorName; /*!< color name, code 430 */ +//int transparency; /*!< transparency, code 440 */ +//int plotStyle; /*!< hard pointer id to plot style object, code 390 */ +//DRW::ShadowMode shadow; /*!< shadow mode, code 284 */ +//bool haveExtrusion; /*!< set to true if the entity have extrusion*/ + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_header.cpp b/extlib/libdxfrw/drw_header.cpp new file mode 100644 index 0000000..47e0643 --- /dev/null +++ b/extlib/libdxfrw/drw_header.cpp @@ -0,0 +1,2476 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include "drw_header.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/drw_dbg.h" +#include "intern/dwgbuffer.h" + +DRW_Header::DRW_Header() { + linetypeCtrl = layerCtrl = styleCtrl = dimstyleCtrl = appidCtrl = 0; + blockCtrl = viewCtrl = ucsCtrl = vportCtrl = vpEntHeaderCtrl = 0; + version = DRW::AC1021; +} + +void DRW_Header::addComment(std::string c){ + if (!comments.empty()) + comments += '\n'; + comments += c; +} + +void DRW_Header::parseCode(int code, dxfReader *reader){ + switch (code) { + case 9: + curr = new DRW_Variant(); + name = reader->getString(); + if (version < DRW::AC1015 && name == "$DIMUNIT") + name="$DIMLUNIT"; + vars[name]=curr; + break; + case 1: + curr->addString(reader->getUtf8String()); + if (name =="$ACADVER") { + reader->setVersion(curr->content.s, true); + version = reader->getVersion(); + } + curr->code = code; + break; + case 2: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 3: + curr->addString(reader->getUtf8String()); + if (name =="$DWGCODEPAGE") { + reader->setCodePage(curr->content.s); + curr->addString(reader->getCodePage()); + } + curr->code = code; + break; + case 6: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 7: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 8: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + case 10: + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + break; + case 20: + curr->setCoordY(reader->getDouble()); + break; + case 30: + curr->setCoordZ(reader->getDouble()); + curr->code = code; + break; + case 40: + curr->addDouble(reader->getDouble()); + curr->code = code; + break; + case 50: + curr->addDouble(reader->getDouble()); + curr->code = code; + break; + case 62: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 70: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 280: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 290: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 370: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 380: + curr->addInt(reader->getInt32()); + curr->code = code; + break; + case 390: + curr->addString(reader->getUtf8String()); + curr->code = code; + break; + default: + break; + } +} + +void DRW_Header::write(dxfWriter *writer, DRW::Version ver){ +/*RLZ: TODO complete all vars to AC1024*/ + double varDouble; + int varInt; + std::string varStr; + DRW_Coord varCoord; + writer->writeString(2, "HEADER"); + writer->writeString(9, "$ACADVER"); + switch (ver) { + case DRW::AC1006: //unsupported version acad 10 + case DRW::AC1009: //acad 11 & 12 + varStr = "AC1009"; + break; + case DRW::AC1012: //unsupported version acad 13 + case DRW::AC1014: //acad 14 + varStr = "AC1014"; + break; + case DRW::AC1015: //acad 2000 + varStr = "AC1015"; + break; + case DRW::AC1018: //acad 2004 + varStr = "AC1018"; + break; +/* case DRW::AC1021: //acad 2007 + varStr = "AC1021"; + break;*/ + case DRW::AC1024: //acad 2010 + varStr = "AC1024"; + break; + case DRW::AC1027: //acad 2013 + varStr = "AC1027"; + break; + default: //acad 2007 default version + varStr = "AC1021"; + break; + } + writer->writeString(1, varStr); + writer->setVersion(&varStr, true); + + getStr("$ACADVER", &varStr); + getStr("$ACADMAINTVER", &varStr); + + if (!getStr("$DWGCODEPAGE", &varStr)) { + varStr = "ANSI_1252"; + } + writer->writeString(9, "$DWGCODEPAGE"); + writer->setCodePage(&varStr); + writer->writeString(3, writer->getCodePage() ); + writer->writeString(9, "$INSBASE"); + if (getCoord("$INSBASE", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$EXTMIN"); + if (getCoord("$EXTMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0000000000000000E+020); + writer->writeDouble(20, 1.0000000000000000E+020); + writer->writeDouble(30, 1.0000000000000000E+020); + } + writer->writeString(9, "$EXTMAX"); + if (getCoord("$EXTMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, -1.0000000000000000E+020); + writer->writeDouble(20, -1.0000000000000000E+020); + writer->writeDouble(30, -1.0000000000000000E+020); + } + writer->writeString(9, "$LIMMIN"); + if (getCoord("$LIMMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + } + writer->writeString(9, "$LIMMAX"); + if (getCoord("$LIMMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 420.0); + writer->writeDouble(20, 297.0); + } + writer->writeString(9, "$ORTHOMODE"); + if (getInt("$ORTHOMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$REGENMODE"); + if (getInt("$REGENMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$FILLMODE"); + if (getInt("$FILLMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$QTEXTMODE"); + if (getInt("$QTEXTMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$MIRRTEXT"); + if (getInt("$MIRRTEXT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + if (ver == DRW::AC1009){ + writer->writeString(9, "$DRAGMODE"); + if (getInt("$DRAGMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + } + writer->writeString(9, "$LTSCALE"); + if (getDouble("$LTSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + if (ver == DRW::AC1009){ + writer->writeString(9, "$OSMODE"); + if (getInt("$OSMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$ATTMODE"); + if (getInt("$ATTMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$TEXTSIZE"); + if (getDouble("$TEXTSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$TRACEWID"); + if (getDouble("$TRACEWID", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 15.68); + writer->writeString(9, "$TEXTSTYLE"); + if (getStr("$TEXTSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(7, varStr); + else + writer->writeUtf8String(7, varStr); + else + writer->writeString(7, "STANDARD"); + writer->writeString(9, "$CLAYER"); + if (getStr("$CLAYER", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(8, varStr); + else + writer->writeUtf8String(8, varStr); + else + writer->writeString(8, "0"); + writer->writeString(9, "$CELTYPE"); + if (getStr("$CELTYPE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, "BYLAYER"); + writer->writeString(9, "$CECOLOR"); + if (getInt("$CECOLOR", &varInt)) + writer->writeInt16(62, varInt); + else + writer->writeInt16(62, 256); + if (ver > DRW::AC1009){ + writer->writeString(9, "$CELTSCALE"); + if (getDouble("$CELTSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DISPSILH"); + if (getInt("$DISPSILH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + + writer->writeString(9, "$DIMSCALE"); + if (getDouble("$DIMSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMASZ"); + if (getDouble("$DIMASZ", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMEXO"); + if (getDouble("$DIMEXO", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.625); + writer->writeString(9, "$DIMDLI"); + if (getDouble("$DIMDLI", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 3.75); + writer->writeString(9, "$DIMRND"); + if (getDouble("$DIMRND", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMDLE"); + if (getDouble("$DIMDLE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMEXE"); + if (getDouble("$DIMEXE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.25); + writer->writeString(9, "$DIMTP"); + if (getDouble("$DIMTP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTM"); + if (getDouble("$DIMTM", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTXT"); + if (getDouble("$DIMTXT", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMCEN"); + if (getDouble("$DIMCEN", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.5); + writer->writeString(9, "$DIMTSZ"); + if (getDouble("$DIMTSZ", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTOL"); + if (getInt("$DIMTOL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLIM"); + if (getInt("$DIMLIM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTIH"); + if (getInt("$DIMTIH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTOH"); + if (getInt("$DIMTOH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSE1"); + if (getInt("$DIMSE1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSE2"); + if (getInt("$DIMSE2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTAD"); + if (getInt("$DIMTAD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMZIN"); + if (getInt("$DIMZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 8); + writer->writeString(9, "$DIMBLK"); + if (getStr("$DIMBLK", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMASO"); + if (getInt("$DIMASO", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMSHO"); + if (getInt("$DIMSHO", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMPOST"); + if (getStr("$DIMPOST", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMAPOST"); + if (getStr("$DIMAPOST", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMALT"); + if (getInt("$DIMALT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTD"); + if (getInt("$DIMALTD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMALTF"); + if (getDouble("$DIMALTF", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.03937); + writer->writeString(9, "$DIMLFAC"); + if (getDouble("$DIMLFAC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMTOFL"); + if (getInt("$DIMTOFL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$DIMTVP"); + if (getDouble("$DIMTVP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMTIX"); + if (getInt("$DIMTIX", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSOXD"); + if (getInt("$DIMSOXD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSAH"); + if (getInt("$DIMSAH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMBLK1"); + if (getStr("$DIMBLK1", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMBLK2"); + if (getStr("$DIMBLK2", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$DIMSTYLE"); + if (getStr("$DIMSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, "STANDARD"); + writer->writeString(9, "$DIMCLRD"); + if (getInt("$DIMCLRD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMCLRE"); + if (getInt("$DIMCLRE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMCLRT"); + if (getInt("$DIMCLRT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTFAC"); + if (getDouble("$DIMTFAC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMGAP"); + if (getDouble("$DIMGAP", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.625); + //post r12 dim vars + if (ver > DRW::AC1009) { + writer->writeString(9, "$DIMJUST"); + if (getInt("$DIMJUST", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSD1"); + if (getInt("$DIMSD1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMSD2"); + if (getInt("$DIMSD2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTOLJ"); + if (getInt("$DIMTOLJ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTZIN"); + if (getInt("$DIMTZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 8); + writer->writeString(9, "$DIMALTZ"); + if (getInt("$DIMALTZ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTTZ"); + if (getInt("$DIMALTTZ", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMUPT"); + if (getInt("$DIMUPT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMDEC"); + if (getInt("$DIMDEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMTDEC"); + if (getInt("$DIMTDEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMALTU"); + if (getInt("$DIMALTU", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$DIMALTTD"); + if (getInt("$DIMALTTD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMTXSTY"); + if (getStr("$DIMTXSTY", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(7, varStr); + else + writer->writeUtf8String(7, varStr); + else + writer->writeString(7, "STANDARD"); + writer->writeString(9, "$DIMAUNIT"); + if (getInt("$DIMAUNIT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMADEC"); + if (getInt("$DIMADEC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMALTRND"); + if (getDouble("$DIMALTRND", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$DIMAZIN"); + if (getInt("$DIMAZIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMDSEP"); + if (getInt("$DIMDSEP", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 44); + writer->writeString(9, "$DIMATFIT"); + if (getInt("$DIMATFIT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$DIMFRAC"); + if (getInt("$DIMFRAC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLDRBLK"); + if (getStr("$DIMLDRBLK", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, "STANDARD"); + //verify if exist "$DIMLUNIT" or obsolete "$DIMUNIT" (pre v2000) + if ( !getInt("$DIMLUNIT", &varInt) ){ + if (!getInt("$DIMUNIT", &varInt)) + varInt = 2; + } + //verify valid values from 1 to 6 + if (varInt<1 || varInt>6) + varInt = 2; + if (ver > DRW::AC1014) { + writer->writeString(9, "$DIMLUNIT"); + writer->writeInt16(70, varInt); + } else { + writer->writeString(9, "$DIMUNIT"); + writer->writeInt16(70, varInt); + } + writer->writeString(9, "$DIMLWD"); + if (getInt("$DIMLWD", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -2); + writer->writeString(9, "$DIMLWE"); + if (getInt("$DIMLWE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -2); + writer->writeString(9, "$DIMTMOVE"); + if (getInt("$DIMTMOVE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + + if (ver > DRW::AC1018) {// and post v2004 dim vars + writer->writeString(9, "$DIMFXL"); + if (getDouble("$DIMFXL", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$DIMFXLON"); + if (getInt("$DIMFXLON", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMJOGANG"); + if (getDouble("$DIMJOGANG", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.7854); + writer->writeString(9, "$DIMTFILL"); + if (getInt("$DIMTFILL", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMTFILLCLR"); + if (getInt("$DIMTFILLCLR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMARCSYM"); + if (getInt("$DIMARCSYM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$DIMLTYPE"); + if (getStr("$DIMLTYPE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + writer->writeString(9, "$DIMLTEX1"); + if (getStr("$DIMLTEX1", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + writer->writeString(9, "$DIMLTEX2"); + if (getStr("$DIMLTEX2", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(6, varStr); + else + writer->writeUtf8String(6, varStr); + else + writer->writeString(6, ""); + if (ver > DRW::AC1021) {// and post v2007 dim vars + writer->writeString(9, "$DIMTXTDIRECTION"); + if (getInt("$DIMTXTDIRECTION", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + }// end post v2004 dim vars + }//end post r12 dim vars + + writer->writeString(9, "$LUNITS"); + if (getInt("$LUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$LUPREC"); + if (getInt("$LUPREC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 4); + writer->writeString(9, "$SKETCHINC"); + if (getDouble("$SKETCHINC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$FILLETRAD"); + if (getDouble("$FILLETRAD", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$AUNITS"); + if (getInt("$AUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$AUPREC"); + if (getInt("$AUPREC", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 2); + writer->writeString(9, "$MENU"); + if (getStr("$MENU", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, "."); + writer->writeString(9, "$ELEVATION"); + if (getDouble("$ELEVATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$PELEVATION"); + if (getDouble("$PELEVATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$THICKNESS"); + if (getDouble("$THICKNESS", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LIMCHECK"); + if (getInt("$LIMCHECK", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + if (ver < DRW::AC1015) { + writer->writeString(9, "$BLIPMODE"); + if (getInt("$BLIPMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$CHAMFERA"); + if (getDouble("$CHAMFERA", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$CHAMFERB"); + if (getDouble("$CHAMFERB", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + if (ver > DRW::AC1009) { + writer->writeString(9, "$CHAMFERC"); + if (getDouble("$CHAMFERC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$CHAMFERD"); + if (getDouble("$CHAMFERD", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + } + writer->writeString(9, "$SKPOLY"); + if (getInt("$SKPOLY", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + //rlz: todo, times + writer->writeString(9, "$USRTIMER"); + if (getInt("$USRTIMER", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$ANGBASE"); + if (getDouble("$ANGBASE", &varDouble)) + writer->writeDouble(50, varDouble); + else + writer->writeDouble(50, 0.0); + writer->writeString(9, "$ANGDIR"); + if (getInt("$ANGDIR", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + writer->writeString(9, "$PDMODE"); + if (getInt("$PDMODE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 34); + writer->writeString(9, "$PDSIZE"); + if (getDouble("$PDSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$PLINEWID"); + if (getDouble("$PLINEWID", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + if (ver < DRW::AC1012) { + writer->writeString(9, "$COORDS"); + if (getInt("$COORDS", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 2); + } + writer->writeString(9, "$SPLFRAME"); + if (getInt("$SPLFRAME", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 0); + writer->writeString(9, "$SPLINETYPE"); + if (getInt("$SPLINETYPE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 2); + writer->writeString(9, "$SPLINESEGS"); + if (getInt("$SPLINESEGS", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 8); + if (ver < DRW::AC1012) { + writer->writeString(9, "$ATTDIA"); + if (getInt("$ATTDIA", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$ATTREQ"); + if (getInt("$ATTREQ", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + writer->writeString(9, "$HANDLING"); + if (getInt("$HANDLING", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 1); + } + writer->writeString(9, "$HANDSEED"); + //RLZ dxfHex(5, 0xFFFF); + writer->writeString(5, "20000"); + writer->writeString(9, "$SURFTAB1"); + if (getInt("$SURFTAB1", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFTAB2"); + if (getInt("$SURFTAB2", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFTYPE"); + if (getInt("$SURFTYPE", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFU"); + if (getInt("$SURFU", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + writer->writeString(9, "$SURFV"); + if (getInt("$SURFV", &varInt)) { + writer->writeInt16(70, varInt); + } else + writer->writeInt16(70, 6); + if (ver > DRW::AC1009) { + writer->writeString(9, "$UCSBASE"); + if (getStr("$UCSBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); +} + writer->writeString(9, "$UCSNAME"); + if (getStr("$UCSNAME", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$UCSORG"); + if (getCoord("$UCSORG", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSXDIR"); + if (getCoord("$UCSXDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSYDIR"); + if (getCoord("$UCSYDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 1.0); + writer->writeDouble(30, 0.0); + } + if (ver > DRW::AC1009) { //begin post r12 UCS vars + writer->writeString(9, "$UCSORTHOREF"); + if (getStr("$UCSORTHOREF", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$UCSORTHOVIEW"); + if (getInt("$UCSORTHOVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$UCSORGTOP"); + if (getCoord("$UCSORGTOP", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGBOTTOM"); + if (getCoord("$UCSORGBOTTOM", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGLEFT"); + if (getCoord("$UCSORGLEFT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGRIGHT"); + if (getCoord("$UCSORGRIGHT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGFRONT"); + if (getCoord("$UCSORGFRONT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$UCSORGBACK"); + if (getCoord("$UCSORGBACK", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSBASE"); + if (getStr("$PUCSBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + } //end post r12 UCS vars + writer->writeString(9, "$PUCSNAME"); + if (getStr("$PUCSNAME", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$PUCSORG"); + if (getCoord("$PUCSORG", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSXDIR"); + if (getCoord("$PUCSXDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 1.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSYDIR"); + if (getCoord("$PUCSYDIR", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 1.0); + writer->writeDouble(30, 0.0); + } + if (ver > DRW::AC1009) { //begin post r12 PUCS vars + writer->writeString(9, "$PUCSORTHOREF"); + if (getStr("$PUCSORTHOREF", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, ""); + writer->writeString(9, "$PUCSORTHOVIEW"); + if (getInt("$PUCSORTHOVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PUCSORGTOP"); + if (getCoord("$PUCSORGTOP", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGBOTTOM"); + if (getCoord("$PUCSORGBOTTOM", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGLEFT"); + if (getCoord("$PUCSORGLEFT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGRIGHT"); + if (getCoord("$PUCSORGRIGHT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGFRONT"); + if (getCoord("$PUCSORGFRONT", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PUCSORGBACK"); + if (getCoord("$PUCSORGBACK", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + } //end post r12 PUCS vars + + writer->writeString(9, "$USERI1"); + if (getInt("$USERI1", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI2"); + if (getInt("$USERI2", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI3"); + if (getInt("$USERI3", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI4"); + if (getInt("$USERI4", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERI5"); + if (getInt("$USERI5", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$USERR1"); + if (getDouble("$USERR1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR2"); + if (getDouble("$USERR2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR3"); + if (getDouble("$USERR3", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR4"); + if (getDouble("$USERR4", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$USERR5"); + if (getDouble("$USERR5", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$WORLDVIEW"); + if (getInt("$WORLDVIEW", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$SHADEDGE"); + if (getInt("$SHADEDGE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3); + writer->writeString(9, "$SHADEDIF"); + if (getInt("$SHADEDIF", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 70); + writer->writeString(9, "$TILEMODE"); + if (getInt("$TILEMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$MAXACTVP"); + if (getInt("$MAXACTVP", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 64); + if (ver > DRW::AC1009) { //begin post r12 PUCS vars + writer->writeString(9, "$PINSBASE"); + if (getCoord("$PINSBASE", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + } + writer->writeString(9, "$PLIMCHECK"); + if (getInt("$PLIMCHECK", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PEXTMIN"); + if (getCoord("$PEXTMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + writer->writeString(9, "$PEXTMAX"); + if (getCoord("$PEXTMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + writer->writeDouble(30, varCoord.z); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + } + +/* RLZ: moved to active VPORT, but can write in header if present*/ + if (getInt("$GRIDMODE", &varInt)) { + writer->writeString(9, "$GRIDMODE"); + writer->writeInt16(70, varInt); + } + if (getInt("$SNAPSTYLE", &varInt)) { + writer->writeString(9, "$SNAPSTYLE"); + writer->writeInt16(70, varInt); + } + if (getCoord("$GRIDUNIT", &varCoord)) { + writer->writeString(9, "$GRIDUNIT"); + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } + if (getCoord("$VIEWCTR", &varCoord)) { + writer->writeString(9, "$VIEWCTR"); + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } +/* RLZ: moved to active VPORT, but can write in header if present*/ + + writer->writeString(9, "$PLIMMIN"); + if (getCoord("$PLIMMIN", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + } + writer->writeString(9, "$PLIMMAX"); + if (getCoord("$PLIMMAX", &varCoord)) { + writer->writeDouble(10, varCoord.x); + writer->writeDouble(20, varCoord.y); + } else { + writer->writeDouble(10, 297.0); + writer->writeDouble(20, 210.0); + } + writer->writeString(9, "$UNITMODE"); + if (getInt("$UNITMODE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$VISRETAIN"); + if (getInt("$VISRETAIN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$PLINEGEN"); + if (getInt("$PLINEGEN", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$PSLTSCALE"); + if (getInt("$PSLTSCALE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + if (ver > DRW::AC1009){//start port r12 vars + writer->writeString(9, "$TREEDEPTH"); + if (getInt("$TREEDEPTH", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 3020); + writer->writeString(9, "$CMLSTYLE"); + if (getStr("$CMLSTYLE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(2, varStr); + else + writer->writeUtf8String(2, varStr); + else + writer->writeString(2, "Standard"); + writer->writeString(9, "$CMLJUST"); + if (getInt("$CMLJUST", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + writer->writeString(9, "$CMLSCALE"); + if (getDouble("$CMLSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 20.0); + writer->writeString(9, "$PROXYGRAPHICS"); + if (getInt("$PROXYGRAPHICS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$MEASUREMENT"); + if (getInt("$MEASUREMENT", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 1); + writer->writeString(9, "$CELWEIGHT"); + if (getInt("$CELWEIGHT", &varInt)) + writer->writeInt16(370, varInt); + else + writer->writeInt16(370, -1); + writer->writeString(9, "$ENDCAPS"); + if (getInt("$ENDCAPS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$JOINSTYLE"); + if (getInt("$JOINSTYLE", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$LWDISPLAY"); //RLZ bool flag, verify in bin version + if (getInt("$LWDISPLAY", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + if (ver > DRW::AC1014) { + writer->writeString(9, "$INSUNITS"); + if (getInt("$INSUNITS", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 0); + } + writer->writeString(9, "$HYPERLINKBASE"); + if (getStr("$HYPERLINKBASE", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$STYLESHEET"); + if (getStr("$STYLESHEET", &varStr)) + if (ver == DRW::AC1009) + writer->writeUtf8Caps(1, varStr); + else + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + writer->writeString(9, "$XEDIT"); //RLZ bool flag, verify in bin version + if (getInt("$XEDIT", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$CEPSNTYPE"); + if (getInt("$CEPSNTYPE", &varInt)) + writer->writeInt16(380, varInt); + else + writer->writeInt16(380, 0); + writer->writeString(9, "$PSTYLEMODE"); //RLZ bool flag, verify in bin version + if (getInt("$PSTYLEMODE", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); +//RLZ: here $FINGERPRINTGUID and $VERSIONGUID, do not add? + writer->writeString(9, "$EXTNAMES"); //RLZ bool flag, verify in bin version + if (getInt("$EXTNAMES", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$PSVPSCALE"); + if (getDouble("$PSVPSCALE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$OLESTARTUP"); //RLZ bool flag, verify in bin version + if (getInt("$OLESTARTUP", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + } + if (ver > DRW::AC1015) {// and post v2004 vars + writer->writeString(9, "$SORTENTS"); + if (getInt("$SORTENTS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 127); + writer->writeString(9, "$INDEXCTL"); + if (getInt("$INDEXCTL", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$HIDETEXT"); + if (getInt("$HIDETEXT", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$XCLIPFRAME"); //RLZ bool flag, verify in bin version + if (ver > DRW::AC1021) { + if (getInt("$XCLIPFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + } else { + if (getInt("$XCLIPFRAME", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + } + writer->writeString(9, "$HALOGAP"); + if (getInt("$HALOGAP", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$OBSCOLOR"); + if (getInt("$OBSCOLOR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 257); + writer->writeString(9, "$OBSLTYPE"); + if (getInt("$OBSLTYPE", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$INTERSECTIONDISPLAY"); + if (getInt("$INTERSECTIONDISPLAY", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$INTERSECTIONCOLOR"); + if (getInt("$INTERSECTIONCOLOR", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 257); + writer->writeString(9, "$DIMASSOC"); + if (getInt("$DIMASSOC", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$PROJECTNAME"); + if (getStr("$PROJECTNAME", &varStr)) + writer->writeUtf8String(1, varStr); + else + writer->writeString(1, ""); + } + if (ver > DRW::AC1018) {// and post v2007 vars + writer->writeString(9, "$CAMERADISPLAY"); //RLZ bool flag, verify in bin version + if (getInt("$CAMERADISPLAY", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 0); + writer->writeString(9, "$LENSLENGTH"); + if (getDouble("$LENSLENGTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 50.0); + writer->writeString(9, "$CAMERAHEIGHT"); + if (getDouble("$CAMERAHEIGTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$STEPSPERSEC"); + if (getDouble("$STEPSPERSEC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.0); + writer->writeString(9, "$STEPSIZE"); + if (getDouble("$STEPSIZE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 50.0); + writer->writeString(9, "$3DDWFPREC"); + if (getDouble("$3DDWFPREC", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 2.0); + writer->writeString(9, "$PSOLWIDTH"); + if (getDouble("$PSOLWIDTH", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 5.0); + writer->writeString(9, "$PSOLHEIGHT"); + if (getDouble("$PSOLHEIGHT", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 80.0); + writer->writeString(9, "$LOFTANG1"); + if (getDouble("$LOFTANG1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, M_PI_2); + writer->writeString(9, "$LOFTANG2"); + if (getDouble("$LOFTANG2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, M_PI_2); + writer->writeString(9, "$LOFTMAG1"); + if (getDouble("$LOFTMAG1", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LOFTMAG2"); + if (getDouble("$LOFTMAG2", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$LOFTPARAM"); + if (getInt("$LOFTPARAM", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, 7); + writer->writeString(9, "$LOFTNORMALS"); + if (getInt("$LOFTNORMALS", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$LATITUDE"); + if (getDouble("$LATITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$LONGITUDE"); + if (getDouble("$LONGITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 1.0); + writer->writeString(9, "$NORTHDIRECTION"); + if (getDouble("$LONGITUDE", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + writer->writeString(9, "$TIMEZONE"); + if (getInt("$TIMEZONE", &varInt)) + writer->writeInt16(70, varInt); + else + writer->writeInt16(70, -8000); + writer->writeString(9, "$LIGHTGLYPHDISPLAY"); + if (getInt("$LIGHTGLYPHDISPLAY", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$TILEMODELIGHTSYNCH"); + if (getInt("$TILEMODELIGHTSYNCH", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + //$CMATERIAL is a handle + writer->writeString(9, "$SOLIDHIST"); + if (getInt("$SOLIDHIST", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$SHOWHIST"); + if (getInt("$SHOWHIST", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 1); + writer->writeString(9, "$DWFFRAME"); + if (getInt("$DWFFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 2); + writer->writeString(9, "$DGNFRAME"); + if (getInt("$DGNFRAME", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$REALWORLDSCALE"); //RLZ bool flag, verify in bin version + if (getInt("$REALWORLDSCALE", &varInt)) + writer->writeInt16(290, varInt); + else + writer->writeInt16(290, 1); + writer->writeString(9, "$INTERFERECOLOR"); + if (getInt("$INTERFERECOLOR", &varInt)) + writer->writeInt16(62, varInt); + else + writer->writeInt16(62, 1); + //$INTERFEREOBJVS is a handle + //$INTERFEREVPVS is a handle + writer->writeString(9, "$CSHADOW"); + if (getInt("$CSHADOW", &varInt)) + writer->writeInt16(280, varInt); + else + writer->writeInt16(280, 0); + writer->writeString(9, "$SHADOWPLANELOCATION"); + if (getDouble("$SHADOWPLANELOCATION", &varDouble)) + writer->writeDouble(40, varDouble); + else + writer->writeDouble(40, 0.0); + } + +#ifdef DRW_DBG + std::map::const_iterator it; + for ( it=vars.begin() ; it != vars.end(); ++it ){ + DRW_DBG((*it).first); DRW_DBG("\n"); + } +#endif +} + +void DRW_Header::addDouble(std::string key, double value, int code){ + curr = new DRW_Variant(); + curr->addDouble( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addInt(std::string key, int value, int code){ + curr = new DRW_Variant(); + curr->addInt( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addStr(std::string key, std::string value, int code){ + curr = new DRW_Variant(); + curr->addString( value ); + curr->code = code; + vars[key] =curr; +} + +void DRW_Header::addCoord(std::string key, DRW_Coord value, int code){ + curr = new DRW_Variant(); + curr->addCoord( value ); + curr->code = code; + vars[key] =curr; +} + +bool DRW_Header::getDouble(std::string key, double *varDouble){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::DOUBLE) { + *varDouble = var->content.d; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getInt(std::string key, int *varInt){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::INTEGER) { + *varInt = var->content.i; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getStr(std::string key, std::string *varStr){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::STRING) { + *varStr = *var->content.s; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::getCoord(std::string key, DRW_Coord *varCoord){ + bool result = false; + std::map::iterator it; + it=vars.find( key); + if (it != vars.end()) { + DRW_Variant *var = (*it).second; + if (var->type == DRW_Variant::COORD) { + *varCoord = *var->content.v; + result = true; + } + delete var; + vars.erase (it); + } + return result; +} + +bool DRW_Header::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf, duint8 mv){ + bool result = true; + duint32 size = buf->getRawLong32(); + duint32 bitSize = 0; + duint32 endBitPos = 160; //start bit: 16 sentinel + 4 size + DRW_DBG("\nbyte size of data: "); DRW_DBG(size); + if (version > DRW::AC1021 && mv > 3) { //2010+ + duint32 hSize = buf->getRawLong32(); + endBitPos += 32; //start bit: + 4 hight size + DRW_DBG("\n2010+ & MV> 3, higth 32b: "); DRW_DBG(hSize); + } +//RLZ TODO add $ACADVER var & $DWGCODEPAGE & $MEASUREMENT +//RLZ TODO EN 2000 falta $CELWEIGHT, $ENDCAPS, $EXTNAMES $JOINSTYLE $LWDISPLAY $PSTYLEMODE $TDUCREATE $TDUUPDATE $XEDIT + + //bit size of data needed to locate start of string stream in 2007+ + //and mark the start of handle stream + //header is one object reads data and continue read strings ??? + if (version > DRW::AC1018) {//2007+ + bitSize = buf->getRawLong32(); + DRW_DBG("\nsize in bits: "); DRW_DBG(bitSize); + endBitPos += bitSize; + hBbuf->setPosition(endBitPos >>3); + hBbuf->setBitPos(endBitPos&7); + } + + if (version > DRW::AC1024) {//2013+ + duint64 requiredVersions = buf->getBitLongLong(); + DRW_DBG("\nREQUIREDVERSIONS var: "); DRW_DBG(requiredVersions); + } + DRW_DBG("\nUnknown1: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown2: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown3: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\nUnknown4: "); DRW_DBG(buf->getBitDouble()); + if (version < DRW::AC1021) {//2007- + DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getCP8Text()); + DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getCP8Text()); + } + DRW_DBG("\nUnknown long1 (24L): "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long2 (0L): "); DRW_DBG(buf->getBitLong()); + if (version < DRW::AC1015) {//pre 2000 + DRW_DBG("\nUnknown short (0): "); DRW_DBG(buf->getBitShort()); + } + if (version < DRW::AC1018) {//pre 2004 + dwgHandle hcv = hBbuf->getHandle(); + DRW_DBG("\nhandle of current view: "); DRW_DBGHL(hcv.code, hcv.size, hcv.ref); + } + vars["DIMASO"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSHO"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["DIMSAV"]=new DRW_Variant(70, buf->getBit()); + } + vars["PLINEGEN"]=new DRW_Variant(70, buf->getBit()); + vars["ORTHOMODE"]=new DRW_Variant(70, buf->getBit()); + vars["REGENMODE"]=new DRW_Variant(70, buf->getBit()); + vars["FILLMODE"]=new DRW_Variant(70, buf->getBit()); + vars["QTEXTMODE"]=new DRW_Variant(70, buf->getBit()); + vars["PSLTSCALE"]=new DRW_Variant(70, buf->getBit()); + vars["LIMCHECK"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["BLIPMODE"]=new DRW_Variant(70, buf->getBit()); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUndocumented: "); DRW_DBG(buf->getBit()); + } + vars["USRTIMER"]=new DRW_Variant(70, buf->getBit()); + vars["SKPOLY"]=new DRW_Variant(70, buf->getBit()); + vars["ANGDIR"]=new DRW_Variant(70, buf->getBit()); + vars["SPLFRAME"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["ATTREQ"]=new DRW_Variant(70, buf->getBit()); + vars["ATTDIA"]=new DRW_Variant(70, buf->getBit()); + } + vars["MIRRTEXT"]=new DRW_Variant(70, buf->getBit()); + vars["WORLDVIEW"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["WIREFRAME"]=new DRW_Variant(70, buf->getBit()); + } + vars["TILEMODE"]=new DRW_Variant(70, buf->getBit()); + vars["PLIMCHECK"]=new DRW_Variant(70, buf->getBit()); + vars["VISRETAIN"]=new DRW_Variant(70, buf->getBit()); + if (version < DRW::AC1015) {//pre 2000 + vars["DELOBJ"]=new DRW_Variant(70, buf->getBit()); + } + vars["DISPSILH"]=new DRW_Variant(70, buf->getBit()); + vars["PELLIPSE"]=new DRW_Variant(70, buf->getBit()); + vars["PROXIGRAPHICS"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + if (version < DRW::AC1015) {//pre 2000 + vars["DRAGMODE"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + } + vars["TREEDEPTH"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit?? + vars["LUNITS"]=new DRW_Variant(70, buf->getBitShort()); + vars["LUPREC"]=new DRW_Variant(70, buf->getBitShort()); + vars["AUNITS"]=new DRW_Variant(70, buf->getBitShort()); + vars["AUPREC"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["OSMODE"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["ATTMODE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["COORDS"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["PDMODE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1015) {//pre 2000 + vars["PICKSTYLE"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUnknown long 1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 2: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 3: "); DRW_DBG(buf->getBitLong()); + } + vars["USERI1"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI2"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI3"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI4"]=new DRW_Variant(70, buf->getBitShort()); + vars["USERI5"]=new DRW_Variant(70, buf->getBitShort()); + vars["SPLINESEGS"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFU"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFV"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTYPE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTAB1"]=new DRW_Variant(70, buf->getBitShort()); + vars["SURFTAB2"]=new DRW_Variant(70, buf->getBitShort()); + vars["SPLINETYPE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SHADEDGE"]=new DRW_Variant(70, buf->getBitShort()); + vars["SHADEDIF"]=new DRW_Variant(70, buf->getBitShort()); + vars["UNITMODE"]=new DRW_Variant(70, buf->getBitShort()); + vars["MAXACTVP"]=new DRW_Variant(70, buf->getBitShort()); + vars["ISOLINES"]=new DRW_Variant(70, buf->getBitShort());////////////////// + vars["CMLJUST"]=new DRW_Variant(70, buf->getBitShort()); + vars["TEXTQLTY"]=new DRW_Variant(70, buf->getBitShort());///////////////////// + vars["LTSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TEXTSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TRACEWID"]=new DRW_Variant(40, buf->getBitDouble()); + vars["SKETCHINC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["FILLETRAD"]=new DRW_Variant(40, buf->getBitDouble()); + vars["THICKNESS"]=new DRW_Variant(40, buf->getBitDouble()); + vars["ANGBASE"]=new DRW_Variant(50, buf->getBitDouble()); + vars["PDSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PLINEWID"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR3"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR4"]=new DRW_Variant(40, buf->getBitDouble()); + vars["USERR5"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERA"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERB"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CHAMFERD"]=new DRW_Variant(40, buf->getBitDouble()); + vars["FACETRES"]=new DRW_Variant(40, buf->getBitDouble());///////////////////////// + vars["CMLSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CELTSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + if (version < DRW::AC1021) {//2004- + vars["MENU"]=new DRW_Variant(1, buf->getCP8Text()); + } + ddouble64 msec, day; + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDCREATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong()); + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDUPDATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong()); + if (version > DRW::AC1015) {//2004+ + DRW_DBG("\nUnknown long 4: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 5: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown long 6: "); DRW_DBG(buf->getBitLong()); + } + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDINDWG"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec + day = buf->getBitLong(); + msec = buf->getBitLong(); + while (msec > 0) + msec /=10; + vars["TDUSRTIMER"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec +// vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec +// vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec + vars["CECOLOR"]=new DRW_Variant(62, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + dwgHandle HANDSEED = buf->getHandle();//allways present in data stream + DRW_DBG("\nHANDSEED: "); DRW_DBGHL(HANDSEED.code, HANDSEED.size, HANDSEED.ref); + dwgHandle CLAYER = hBbuf->getHandle(); + DRW_DBG("\nCLAYER: "); DRW_DBGHL(CLAYER.code, CLAYER.size, CLAYER.ref); + dwgHandle TEXTSTYLE = hBbuf->getHandle(); + DRW_DBG("\nTEXTSTYLE: "); DRW_DBGHL(TEXTSTYLE.code, TEXTSTYLE.size, TEXTSTYLE.ref); + dwgHandle CELTYPE = hBbuf->getHandle(); + DRW_DBG("\nCELTYPE: "); DRW_DBGHL(CELTYPE.code, CELTYPE.size, CELTYPE.ref); + if (version > DRW::AC1018) {//2007+ + dwgHandle CMATERIAL = hBbuf->getHandle(); + DRW_DBG("\nCMATERIAL: "); DRW_DBGHL(CMATERIAL.code, CMATERIAL.size, CMATERIAL.ref); + } + dwgHandle DIMSTYLE = hBbuf->getHandle(); + DRW_DBG("\nDIMSTYLE: "); DRW_DBGHL(DIMSTYLE.code, DIMSTYLE.size, DIMSTYLE.ref); + dwgHandle CMLSTYLE = hBbuf->getHandle(); + DRW_DBG("\nCMLSTYLE: "); DRW_DBGHL(CMLSTYLE.code, CMLSTYLE.size, CMLSTYLE.ref); + if (version > DRW::AC1014) {//2000+ + vars["PSVPSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + } + vars["PINSBASE"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PEXTMIN"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PEXTMAX"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PLIMMIN"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["PLIMMAX"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["PELEVATION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PUCSORG"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + dwgHandle PUCSNAME = hBbuf->getHandle(); + DRW_DBG("\nPUCSNAME: "); DRW_DBGHL(PUCSNAME.code, PUCSNAME.size, PUCSNAME.ref); + if (version > DRW::AC1014) {//2000+ + dwgHandle PUCSORTHOREF = hBbuf->getHandle(); + DRW_DBG("\nPUCSORTHOREF: "); DRW_DBGHL(PUCSORTHOREF.code, PUCSORTHOREF.size, PUCSORTHOREF.ref); + vars["PUCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle PUCSBASE = hBbuf->getHandle(); + DRW_DBG("\nPUCSBASE: "); DRW_DBGHL(PUCSBASE.code, PUCSBASE.size, PUCSBASE.ref); + vars["PUCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["PUCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble()); + } + vars["INSBASE"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["EXTMIN"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["EXTMAX"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["LIMMIN"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["LIMMAX"]=new DRW_Variant(10, buf->get2RawDouble()); + vars["ELEVATION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["UCSORG"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble()); + dwgHandle UCSNAME = hBbuf->getHandle(); + DRW_DBG("\nUCSNAME: "); DRW_DBGHL(UCSNAME.code, UCSNAME.size, UCSNAME.ref); + if (version > DRW::AC1014) {//2000+ + dwgHandle UCSORTHOREF = hBbuf->getHandle(); + DRW_DBG("\nUCSORTHOREF: "); DRW_DBGHL(UCSORTHOREF.code, UCSORTHOREF.size, UCSORTHOREF.ref); + vars["UCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle UCSBASE = hBbuf->getHandle(); + DRW_DBG("\nUCSBASE: "); DRW_DBGHL(UCSBASE.code, UCSBASE.size, UCSBASE.ref); + vars["UCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble()); + vars["UCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble()); + if (version < DRW::AC1021) {//2004- + vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + if (version < DRW::AC1015) {//r14- + vars["DIMTOL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMLIM"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSAH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIX"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALTD"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMZIN"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMSD1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSD2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOLJ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMJUST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMFIT"]=new DRW_Variant(70, buf->getRawChar8());/////////// + vars["DIMUPT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTZIN"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMALTZ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMALTTZ"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMTAD"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMUNIT"]=new DRW_Variant(70, buf->getBitShort());/////////// + vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort()); + dwgHandle DIMTXSTY = hBbuf->getHandle(); + DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref); + } + vars["DIMSCALE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMASZ"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMEXO"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMDLI"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMEXE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMRND"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMDLE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTP"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTM"]=new DRW_Variant(40, buf->getBitDouble()); + if (version > DRW::AC1018) {//2007+ + vars["DIMFXL"]=new DRW_Variant(40, buf->getBitDouble());////////////////// + vars["DIMJOGANG"]=new DRW_Variant(40, buf->getBitDouble());/////////////// + vars["DIMTFILL"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTFILLCLR"]=new DRW_Variant(62, buf->getCmColor(version)); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMTOL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMLIM"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSE2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTAD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMZIN"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMAZIN"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1018) {//2007+ + vars["DIMARCSYM"]=new DRW_Variant(70, buf->getBitShort()); + } + vars["DIMTXT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMCEN"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTSZ"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMALTF"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMLFAC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTVP"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMTFAC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMGAP"]=new DRW_Variant(40, buf->getBitDouble()); + if (version < DRW::AC1015) {//r14- + vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK1"]=new DRW_Variant(1, buf->getCP8Text()); + vars["DIMBLK2"]=new DRW_Variant(1, buf->getCP8Text()); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMALTRND"]=new DRW_Variant(40, buf->getBitDouble()); + vars["DIMALT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMALTD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSAH"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTIX"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit()); + } + vars["DIMCLRD"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + vars["DIMCLRE"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + vars["DIMCLRT"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color + if (version > DRW::AC1014) {//2000+ + vars["DIAMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMFAC"]=new DRW_Variant(70, buf->getBitShort());///////////////// DIMFAC O DIMFRAC + vars["DIMLUNIT"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMDSEP"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTMOVE"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMJUST"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMSD1"]=new DRW_Variant(70, buf->getBit()); + vars["DIMSD2"]=new DRW_Variant(70, buf->getBit()); + vars["DIMTOLJ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMTZIN"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTZ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMALTTZ"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMUPT"]=new DRW_Variant(70, buf->getBit()); + vars["DIMATFIT"]=new DRW_Variant(70, buf->getBitShort()); + } + if (version > DRW::AC1018) {//2007+ + vars["DIMFXLON"]=new DRW_Variant(70, buf->getBit());//////////////// + } + if (version > DRW::AC1021) {//2010+ + vars["DIMTXTDIRECTION"]=new DRW_Variant(70, buf->getBit());//////////////// + vars["DIMALTMZF"]=new DRW_Variant(40, buf->getBitDouble());//////////////// + vars["DIMMZF"]=new DRW_Variant(40, buf->getBitDouble());//////////////// + } + if (version > DRW::AC1014) {//2000+ + dwgHandle DIMTXSTY = hBbuf->getHandle(); + DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref); + dwgHandle DIMLDRBLK = hBbuf->getHandle(); + DRW_DBG("\nDIMLDRBLK: "); DRW_DBGHL(DIMLDRBLK.code, DIMLDRBLK.size, DIMLDRBLK.ref); + dwgHandle DIMBLK = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK: "); DRW_DBGHL(DIMBLK.code, DIMBLK.size, DIMBLK.ref); + dwgHandle DIMBLK1 = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK1: "); DRW_DBGHL(DIMBLK1.code, DIMBLK1.size, DIMBLK1.ref); + dwgHandle DIMBLK2 = hBbuf->getHandle(); + DRW_DBG("\nDIMBLK2: "); DRW_DBGHL(DIMBLK2.code, DIMBLK2.size, DIMBLK2.ref); + } + if (version > DRW::AC1018) {//2007+ + dwgHandle DIMLTYPE = hBbuf->getHandle(); + DRW_DBG("\nDIMLTYPE: "); DRW_DBGHL(DIMLTYPE.code, DIMLTYPE.size, DIMLTYPE.ref); + dwgHandle DIMLTEX1 = hBbuf->getHandle(); + DRW_DBG("\nDIMLTEX1: "); DRW_DBGHL(DIMLTEX1.code, DIMLTEX1.size, DIMLTEX1.ref); + dwgHandle DIMLTEX2 = hBbuf->getHandle(); + DRW_DBG("\nDIMLTEX2: "); DRW_DBGHL(DIMLTEX2.code, DIMLTEX2.size, DIMLTEX2.ref); + } + if (version > DRW::AC1014) {//2000+ + vars["DIMLWD"]=new DRW_Variant(70, buf->getBitShort()); + vars["DIMLWE"]=new DRW_Variant(70, buf->getBitShort()); + } + dwgHandle CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + blockCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLAYER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + layerCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + styleCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLINETYPE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + linetypeCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVIEW CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + viewCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nUCS CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + ucsCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVPORT CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vportCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nAPPID CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + appidCtrl = CONTROL.ref; + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDIMSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + dimstyleCtrl = CONTROL.ref; + if (version < DRW::AC1018) {//r2000- + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nVIEWPORT ENTITY HEADER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vpEntHeaderCtrl = CONTROL.ref; //RLZ: only in R13-R15 ???? + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT ACAD_GROUP: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT ACAD_MLINESTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT NAMED OBJS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + + if (version > DRW::AC1014) {//2000+ + vars["TSTACKALIGN"]=new DRW_Variant(70, buf->getBitShort()); + vars["TSTACKSIZE"]=new DRW_Variant(70, buf->getBitShort()); + if (version < DRW::AC1021) {//2004- + vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getCP8Text()); + vars["STYLESHEET"]=new DRW_Variant(1, buf->getCP8Text()); + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT LAYOUTS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT PLOTSETTINGS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT PLOTSTYLES: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1015) {//2004+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT MATERIALS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT COLORS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1018) {//2007+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDICT VISUALSTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1024) {//2013+ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nUNKNOWN HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version > DRW::AC1014) {//2000+ + DRW_DBG("\nFlags: "); DRW_DBGH(buf->getBitLong());//RLZ TODO change to 8 vars + vars["INSUNITS"]=new DRW_Variant(70, buf->getBitShort()); + duint16 cepsntype = buf->getBitShort(); + vars["CEPSNTYPE"]=new DRW_Variant(70, cepsntype); + if (cepsntype == 3){ + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nCPSNID HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + } + if (version < DRW::AC1021) {//2004- + vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getCP8Text()); + vars["VERSIONGUID"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + if (version > DRW::AC1015) {//2004+ + vars["SORTENTS"]=new DRW_Variant(70, buf->getRawChar8()); + vars["INDEXCTL"]=new DRW_Variant(70, buf->getRawChar8()); + vars["HIDETEXT"]=new DRW_Variant(70, buf->getRawChar8()); + vars["XCLIPFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DIMASSOC"]=new DRW_Variant(70, buf->getRawChar8()); + vars["HALOGAP"]=new DRW_Variant(70, buf->getRawChar8()); + vars["OBSCUREDCOLOR"]=new DRW_Variant(70, buf->getBitShort()); + vars["INTERSECTIONCOLOR"]=new DRW_Variant(70, buf->getBitShort()); + vars["OBSCUREDLTYPE"]=new DRW_Variant(70, buf->getRawChar8()); + vars["INTERSECTIONDISPLAY"]=new DRW_Variant(70, buf->getRawChar8()); + if (version < DRW::AC1021) {//2004- + vars["PROJECTNAME"]=new DRW_Variant(1, buf->getCP8Text()); + } + } + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK PAPER_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nBLOCK MODEL_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE BYLAYER: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE BYBLOCK: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nLTYPE CONTINUOUS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + if (version > DRW::AC1018) {//2007+ + vars["CAMERADISPLAY"]=new DRW_Variant(70, buf->getBit()); + DRW_DBG("\nUnknown 2007+ long1: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown 2007+ long2: "); DRW_DBG(buf->getBitLong()); + DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble()); + vars["STEPSPERSEC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["STEPSIZE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["3DDWFPREC"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LENSLENGTH"]=new DRW_Variant(40, buf->getBitDouble()); + vars["CAMERAHEIGHT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["SOLIDHIST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["SHOWHIST"]=new DRW_Variant(70, buf->getRawChar8()); + vars["PSOLWIDTH"]=new DRW_Variant(40, buf->getBitDouble()); + vars["PSOLHEIGHT"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTANG1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTANG2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTMAG1"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTMAG2"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LOFTPARAM"]=new DRW_Variant(70, buf->getBitShort()); + vars["LOFTNORMALS"]=new DRW_Variant(40, buf->getRawChar8()); + vars["LATITUDE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["LONGITUDE"]=new DRW_Variant(40, buf->getBitDouble()); + vars["NORTHDIRECTION"]=new DRW_Variant(40, buf->getBitDouble()); + vars["TIMEZONE"]=new DRW_Variant(70, buf->getBitLong()); + vars["LIGHTGLYPHDISPLAY"]=new DRW_Variant(70, buf->getRawChar8()); + vars["TILEMODELIGHTSYNCH"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DWFFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + vars["DGNFRAME"]=new DRW_Variant(70, buf->getRawChar8()); + DRW_DBG("\nUnknown 2007+ BIT: "); DRW_DBG(buf->getBit()); + vars["INTERFERECOLOR"]=new DRW_Variant(70, buf->getCmColor(version)); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nINTERFEREOBJVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nINTERFEREVPVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + CONTROL = hBbuf->getHandle(); + DRW_DBG("\nDRAGVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref); + vars["CSHADOW"]=new DRW_Variant(70, buf->getRawChar8()); + DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble()); + } + if (version > DRW::AC1012) {//R14+ + DRW_DBG("\nUnknown R14+ short1: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short2: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short3: "); DRW_DBG(buf->getBitShort()); + DRW_DBG("\nUnknown R14+ short4: "); DRW_DBG(buf->getBitShort()); + } + + DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" buf bit position: "); DRW_DBG(buf->getBitPos()); + + + /**** RLZ: disabled, pending to read all data ***/ + //Start reading string stream for 2007 and further + if (version > DRW::AC1018) {//2007+ + duint32 strStartPos = endBitPos -1; + buf->setPosition(strStartPos >>3); + buf->setBitPos(strStartPos&7); + if (buf->getBit() == 1){ + strStartPos -= 16; + buf->setPosition(strStartPos >>3); + buf->setBitPos(strStartPos&7); + duint32 strDataSize = buf->getRawShort16(); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + buf->setPosition(strStartPos >> 3); + buf->setBitPos(strStartPos & 7); + duint32 hiSize = buf->getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + buf->setPosition(strStartPos >> 3); + buf->setBitPos(strStartPos & 7); + + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\nstring buf bit position: "); DRW_DBG(buf->getBitPos()); + } + DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getUCSText(false)); + DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getUCSText(false)); + vars["MENU"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["DIMPOST"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["DIMAPOST"]=new DRW_Variant(1, buf->getUCSText(false)); + if (version > DRW::AC1021) {//2010+ + vars["DIMALTMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify////////////// + vars["DIMMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify////////////// + } + vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["STYLESHEET"]=new DRW_Variant(1, buf->getUCSText(false)); + vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getUCSText(false)); + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + vars["VERSIONGUID"]=new DRW_Variant(1, buf->getUCSText(false)); + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + vars["PROJECTNAME"]=new DRW_Variant(1, buf->getUCSText(false)); + } +/*** ****/ + DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos()); + + if (DRW_DBGGL == DRW_dbg::DEBUG){ + for (std::map::iterator it=vars.begin(); it!=vars.end(); ++it){ + DRW_DBG("\n"); DRW_DBG(it->first); DRW_DBG(": "); + switch (it->second->type){ + case DRW_Variant::INTEGER: + DRW_DBG(it->second->content.i); + break; + case DRW_Variant::DOUBLE: + DRW_DBG(it->second->content.d); + break; + case DRW_Variant::STRING: + DRW_DBG(it->second->content.s->c_str()); + break; + case DRW_Variant::COORD: + DRW_DBG("x= "); DRW_DBG(it->second->content.v->x); + DRW_DBG(", y= "); DRW_DBG(it->second->content.v->y); + DRW_DBG(", z= "); DRW_DBG(it->second->content.v->z); + break; + default: + break; + } + DRW_DBG(" code: ");DRW_DBG(it->second->code); + } + } + + buf->setPosition(size+16+4); //readed size +16 start sentinel + 4 size + if (version > DRW::AC1021 && mv > 3) { //2010+ + buf->getRawLong32();//advance 4 bytes (hisize) + } + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\nHeader CRC: "); DRW_DBGH(buf->getRawShort16()); + DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + + //temporary code to show header end sentinel + duint64 sz= buf->size()-1; + if (version < DRW::AC1018) {//pre 2004 + sz= buf->size()-16; + buf->setPosition(sz); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1018) {//2004 +// sz= buf->size()-132; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1021) {//2007 + sz= buf->size()-16; + buf->setPosition(sz); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1024) {//2010 +// sz= buf->size()-93; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } else if (version == DRW::AC1027) {//2013 +// sz= buf->size()-76; +// buf->setPosition(sz); + buf->moveBitPos(-128); + DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition()); + DRW_DBG("\ndwg header end sentinel= "); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + } + + return result; +} diff --git a/extlib/libdxfrw/drw_header.h b/extlib/libdxfrw/drw_header.h new file mode 100644 index 0000000..a8fdc8e --- /dev/null +++ b/extlib/libdxfrw/drw_header.h @@ -0,0 +1,107 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_HEADER_H +#define DRW_HEADER_H + + +#include +#include "drw_base.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +#define SETHDRFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Class to handle header entries +/*! +* Class to handle header vars, to read iterate over "std::map vars" +* to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor) +* or use add* helper functions. +* @author Rallaz +*/ +class DRW_Header { + SETHDRFRIENDS +public: + DRW_Header(); + ~DRW_Header() { + clearVars(); + } + + DRW_Header(const DRW_Header& h){ + this->version = h.version; + this->comments = h.comments; + for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it){ + this->vars[it->first] = new DRW_Variant( *(it->second) ); + } + this->curr = NULL; + } + DRW_Header& operator=(const DRW_Header &h) { + if(this != &h) { + clearVars(); + this->version = h.version; + this->comments = h.comments; + for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it){ + this->vars[it->first] = new DRW_Variant( *(it->second) ); + } + } + return *this; + } + + void addDouble(std::string key, double value, int code); + void addInt(std::string key, int value, int code); + void addStr(std::string key, std::string value, int code); + void addCoord(std::string key, DRW_Coord value, int code); + std::string getComments() const {return comments;} + void write(dxfWriter *writer, DRW::Version ver); + void addComment(std::string c); + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf, duint8 mv=0); +private: + bool getDouble(std::string key, double *varDouble); + bool getInt(std::string key, int *varInt); + bool getStr(std::string key, std::string *varStr); + bool getCoord(std::string key, DRW_Coord *varStr); + void clearVars(){ + for (std::map::iterator it=vars.begin(); it!=vars.end(); ++it) + delete it->second; + + vars.clear(); + } + +public: + std::map vars; +private: + std::string comments; + std::string name; + DRW_Variant* curr; + int version; //to use on read + + duint32 linetypeCtrl; + duint32 layerCtrl; + duint32 styleCtrl; + duint32 dimstyleCtrl; + duint32 appidCtrl; + duint32 blockCtrl; + duint32 viewCtrl; + duint32 ucsCtrl; + duint32 vportCtrl; + duint32 vpEntHeaderCtrl; +}; + +#endif + +// EOF diff --git a/extlib/libdxfrw/drw_interface.h b/extlib/libdxfrw/drw_interface.h new file mode 100644 index 0000000..1b1577e --- /dev/null +++ b/extlib/libdxfrw/drw_interface.h @@ -0,0 +1,191 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_INTERFACE_H +#define DRW_INTERFACE_H + +#include + +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_header.h" + +/** + * Abstract class (interface) for comunicate dxfReader with the application. + * Inherit your class which takes care of the entities in the + * processed DXF file from this interface. + * + * @author Rallaz + */ +class DRW_Interface { +public: + DRW_Interface() { + } + virtual ~DRW_Interface() { + } + + /** Called when header is parsed. */ + virtual void addHeader(const DRW_Header *) { } + + /** Called for every line Type. */ + virtual void addLType(const DRW_LType &) { } + /** Called for every layer. */ + virtual void addLayer(const DRW_Layer &) { } + /** Called for every dim style. */ + virtual void addDimStyle(const DRW_Dimstyle &) { } + /** Called for every VPORT table. */ + virtual void addVport(const DRW_Vport &) { } + /** Called for every text style. */ + virtual void addTextStyle(const DRW_Textstyle &) { } + /** Called for every AppId entry. */ + virtual void addAppId(const DRW_AppId &) { } + + /** + * Called for every block. Note: all entities added after this + * command go into this block until endBlock() is called. + * + * @see endBlock() + */ + virtual void addBlock(const DRW_Block &) { } + + /** Called to end the current block */ + virtual void endBlock() { } + + /** Called for every point */ + virtual void addPoint(const DRW_Point &) { } + + /** Called for every line */ + virtual void addLine(const DRW_Line &) { } + + /** Called for every ray */ + virtual void addRay(const DRW_Ray &) { } + + /** Called for every xline */ + virtual void addXline(const DRW_Xline &) { } + + /** Called for every arc */ + virtual void addArc(const DRW_Arc &) { } + + /** Called for every circle */ + virtual void addCircle(const DRW_Circle &) { } + + /** Called for every ellipse */ + virtual void addEllipse(const DRW_Ellipse &) { } + + /** Called for every lwpolyline */ + virtual void addLWPolyline(const DRW_LWPolyline &) { } + + /** Called for every polyline start */ + virtual void addPolyline(const DRW_Polyline &) { } + + /** Called for every spline */ + virtual void addSpline(const DRW_Spline *) { } + + /** Called for every spline knot value */ + virtual void addKnot(const DRW_Entity &) { } + + /** Called for every insert. */ + virtual void addInsert(const DRW_Insert &) { } + + /** Called for every trace start */ + virtual void addTrace(const DRW_Trace &) { } + + /** Called for every 3dface start */ + virtual void add3dFace(const DRW_3Dface &) { } + + /** Called for every solid start */ + virtual void addSolid(const DRW_Solid &) { } + + + /** Called for every Multi Text entity. */ + virtual void addMText(const DRW_MText &) { } + + /** Called for every Text entity. */ + virtual void addText(const DRW_Text &) { } + + /** + * Called for every aligned dimension entity. + */ + virtual void addDimAlign(const DRW_DimAligned *) { } + /** + * Called for every linear or rotated dimension entity. + */ + virtual void addDimLinear(const DRW_DimLinear *) { } + + /** + * Called for every radial dimension entity. + */ + virtual void addDimRadial(const DRW_DimRadial *) { } + + /** + * Called for every diametric dimension entity. + */ + virtual void addDimDiametric(const DRW_DimDiametric *) { } + + /** + * Called for every angular dimension (2 lines version) entity. + */ + virtual void addDimAngular(const DRW_DimAngular *) { } + + /** + * Called for every angular dimension (3 points version) entity. + */ + virtual void addDimAngular3P(const DRW_DimAngular3p *) { } + + /** + * Called for every ordinate dimension entity. + */ + virtual void addDimOrdinate(const DRW_DimOrdinate *) { } + + /** + * Called for every leader start. + */ + virtual void addLeader(const DRW_Leader *) { } + + /** + * Called for every hatch entity. + */ + virtual void addHatch(const DRW_Hatch *) { } + + /** + * Called for every viewport entity. + */ + virtual void addViewport(const DRW_Viewport &) { } + + /** + * Called for every image entity. + */ + virtual void addImage(const DRW_Image *) { } + + /** + * Called for every image definition. + */ + virtual void linkImage(const DRW_ImageDef *) { } + + /** + * Called for every comment in the DXF file (code 999). + */ + virtual void addComment(const char *) { } + + virtual void writeHeader(DRW_Header &) { } + virtual void writeBlocks() { } + virtual void writeBlockRecords() { } + virtual void writeEntities() { } + virtual void writeLTypes() { } + virtual void writeLayers() { } + virtual void writeTextstyles() { } + virtual void writeVports() { } + virtual void writeDimstyles() { } + virtual void writeAppId() { } +}; + +#endif diff --git a/extlib/libdxfrw/drw_objects.cpp b/extlib/libdxfrw/drw_objects.cpp new file mode 100644 index 0000000..e7a3e7b --- /dev/null +++ b/extlib/libdxfrw/drw_objects.cpp @@ -0,0 +1,1235 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include "drw_objects.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/dwgbuffer.h" +#include "intern/drw_dbg.h" +#include "intern/dwgutil.h" + +//! Base class for tables entries +/*! +* Base class for tables entries +* @author Rallaz +*/ +void DRW_TableEntry::parseCode(int code, dxfReader *reader){ + switch (code) { + case 5: + handle = reader->getHandleString(); + break; + case 330: + parentHandle = reader->getHandleString(); + break; + case 2: + name = reader->getUtf8String(); + break; + case 70: + flags = reader->getInt32(); + break; + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + extData.push_back(new DRW_Variant(code, reader->getString())); + break; + case 1010: + case 1011: + case 1012: + case 1013: + curr = new DRW_Variant(); + curr->addCoord(); + curr->setCoordX(reader->getDouble()); + curr->code = code; + extData.push_back(curr); + break; + case 1020: + case 1021: + case 1022: + case 1023: + if (curr) + curr->setCoordY(reader->getDouble()); + break; + case 1030: + case 1031: + case 1032: + case 1033: + if (curr) + curr->setCoordZ(reader->getDouble()); + curr=NULL; + break; + case 1040: + case 1041: + case 1042: + extData.push_back(new DRW_Variant(code, reader->getDouble())); + break; + case 1070: + case 1071: + extData.push_back(new DRW_Variant(code, reader->getInt32() )); + break; + default: + break; + } +} + +bool DRW_TableEntry::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *strBuf, duint32 bs){ +DRW_DBG("\n***************************** parsing table entry *********************************************\n"); + objSize=0; + oType = buf->getObjType(version); + DRW_DBG("Object type: "); DRW_DBG(oType); DRW_DBG(", "); DRW_DBGH(oType); + if (version > DRW::AC1014 && version < DRW::AC1024) {//2000 to 2007 + objSize = buf->getRawLong32(); //RL 32bits object size in bits + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (version > DRW::AC1021) {//2010+ + duint32 ms = buf->size(); + objSize = ms*8 - bs; + DRW_DBG(" Object size: "); DRW_DBG(objSize); DRW_DBG("\n"); + } + if (strBuf != NULL && version > DRW::AC1018) {//2007+ + strBuf->moveBitPos(objSize-1); + DRW_DBG(" strBuf strbit pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + if (strBuf->getBit() == 1){ + DRW_DBG("DRW_TableEntry::parseDwg string bit is 1\n"); + strBuf->moveBitPos(-17); + duint16 strDataSize = strBuf->getRawShort16(); + DRW_DBG("\nDRW_TableEntry::parseDwg string strDataSize: "); DRW_DBGH(strDataSize); DRW_DBG("\n"); + if ( (strDataSize& 0x8000) == 0x8000){ + DRW_DBG("\nDRW_TableEntry::parseDwg string 0x8000 bit is set"); + strBuf->moveBitPos(-33);//RLZ pending to verify + duint16 hiSize = strBuf->getRawShort16(); + strDataSize = ((strDataSize&0x7fff) | (hiSize<<15)); + } + strBuf->moveBitPos( -strDataSize -16); //-14 + DRW_DBG("strBuf start strDataSize pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } else + DRW_DBG("\nDRW_TableEntry::parseDwg string bit is 0"); + DRW_DBG("strBuf start pos 2007: "); DRW_DBG(strBuf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(strBuf->getBitPos()); DRW_DBG("\n"); + } + + dwgHandle ho = buf->getHandle(); + handle = ho.ref; + DRW_DBG("TableEntry Handle: "); DRW_DBGHL(ho.code, ho.size, ho.ref); + dint16 extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + while (extDataSize>0 && buf->isGood()) { + /* RLZ: TODO */ + dwgHandle ah = buf->getHandle(); + DRW_DBG("App Handle: "); DRW_DBGHL(ah.code, ah.size, ah.ref); + duint8 *tmpExtData = new duint8[extDataSize]; + buf->getBytes(tmpExtData, extDataSize); + dwgBuffer tmpExtDataBuf(tmpExtData, extDataSize, buf->decoder); + int pos = tmpExtDataBuf.getPosition(); + int bpos = tmpExtDataBuf.getBitPos(); + DRW_DBG("ext data pos: "); DRW_DBG(pos); DRW_DBG("."); DRW_DBG(bpos); DRW_DBG("\n"); + duint8 dxfCode = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfCode: "); DRW_DBG(dxfCode); + switch (dxfCode){ + case 0:{ + duint8 strLength = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" strLength: "); DRW_DBG(strLength); + duint16 cp = tmpExtDataBuf.getBERawShort16(); + DRW_DBG(" str codepage: "); DRW_DBG(cp); + for (int i=0;i< strLength+1;i++) {//string length + null terminating char + duint8 dxfChar = tmpExtDataBuf.getRawChar8(); + DRW_DBG(" dxfChar: "); DRW_DBG(dxfChar); + } + break; + } + default: + /* RLZ: TODO */ + break; + } + DRW_DBG("ext data pos: "); DRW_DBG(tmpExtDataBuf.getPosition()); DRW_DBG("."); DRW_DBG(tmpExtDataBuf.getBitPos()); DRW_DBG("\n"); + delete[]tmpExtData; + extDataSize = buf->getBitShort(); //BS + DRW_DBG(" ext data size: "); DRW_DBG(extDataSize); + } //end parsing extData (EED) + if (version < DRW::AC1015) {//14- + objSize = buf->getRawLong32(); //RL 32bits size in bits + } + DRW_DBG(" objSize in bits: "); DRW_DBG(objSize); + + numReactors = buf->getBitLong(); //BL + DRW_DBG(", numReactors: "); DRW_DBG(numReactors); DRW_DBG("\n"); + if (version > DRW::AC1015) {//2004+ + xDictFlag = buf->getBit(); + DRW_DBG("xDictFlag: "); DRW_DBG(xDictFlag); + } + if (version > DRW::AC1024) {//2013+ + duint8 bd = buf->getBit(); + DRW_DBG(" Have binary data: "); DRW_DBG(bd); DRW_DBG("\n"); + } + return buf->isGood(); +} + +//! Class to handle dimstyle entries +/*! +* Class to handle ldim style symbol table entries +* @author Rallaz +*/ +void DRW_Dimstyle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 105: + handle = reader->getHandleString(); + break; + case 3: + dimpost = reader->getUtf8String(); + break; + case 4: + dimapost = reader->getUtf8String(); + break; + case 5: + dimblk = reader->getUtf8String(); + break; + case 6: + dimblk1 = reader->getUtf8String(); + break; + case 7: + dimblk2 = reader->getUtf8String(); + break; + case 40: + dimscale = reader->getDouble(); + break; + case 41: + dimasz = reader->getDouble(); + break; + case 42: + dimexo = reader->getDouble(); + break; + case 43: + dimdli = reader->getDouble(); + break; + case 44: + dimexe = reader->getDouble(); + break; + case 45: + dimrnd = reader->getDouble(); + break; + case 46: + dimdle = reader->getDouble(); + break; + case 47: + dimtp = reader->getDouble(); + break; + case 48: + dimtm = reader->getDouble(); + break; + case 49: + dimfxl = reader->getDouble(); + break; + case 140: + dimtxt = reader->getDouble(); + break; + case 141: + dimcen = reader->getDouble(); + break; + case 142: + dimtsz = reader->getDouble(); + break; + case 143: + dimaltf = reader->getDouble(); + break; + case 144: + dimlfac = reader->getDouble(); + break; + case 145: + dimtvp = reader->getDouble(); + break; + case 146: + dimtfac = reader->getDouble(); + break; + case 147: + dimgap = reader->getDouble(); + break; + case 148: + dimaltrnd = reader->getDouble(); + break; + case 71: + dimtol = reader->getInt32(); + break; + case 72: + dimlim = reader->getInt32(); + break; + case 73: + dimtih = reader->getInt32(); + break; + case 74: + dimtoh = reader->getInt32(); + break; + case 75: + dimse1 = reader->getInt32(); + break; + case 76: + dimse2 = reader->getInt32(); + break; + case 77: + dimtad = reader->getInt32(); + break; + case 78: + dimzin = reader->getInt32(); + break; + case 79: + dimazin = reader->getInt32(); + break; + case 170: + dimalt = reader->getInt32(); + break; + case 171: + dimaltd = reader->getInt32(); + break; + case 172: + dimtofl = reader->getInt32(); + break; + case 173: + dimsah = reader->getInt32(); + break; + case 174: + dimtix = reader->getInt32(); + break; + case 175: + dimsoxd = reader->getInt32(); + break; + case 176: + dimclrd = reader->getInt32(); + break; + case 177: + dimclre = reader->getInt32(); + break; + case 178: + dimclrt = reader->getInt32(); + break; + case 179: + dimadec = reader->getInt32(); + break; + case 270: + dimunit = reader->getInt32(); + break; + case 271: + dimdec = reader->getInt32(); + break; + case 272: + dimtdec = reader->getInt32(); + break; + case 273: + dimaltu = reader->getInt32(); + break; + case 274: + dimalttd = reader->getInt32(); + break; + case 275: + dimaunit = reader->getInt32(); + break; + case 276: + dimfrac = reader->getInt32(); + break; + case 277: + dimlunit = reader->getInt32(); + break; + case 278: + dimdsep = reader->getInt32(); + break; + case 279: + dimtmove = reader->getInt32(); + break; + case 280: + dimjust = reader->getInt32(); + break; + case 281: + dimsd1 = reader->getInt32(); + break; + case 282: + dimsd2 = reader->getInt32(); + break; + case 283: + dimtolj = reader->getInt32(); + break; + case 284: + dimtzin = reader->getInt32(); + break; + case 285: + dimaltz = reader->getInt32(); + break; + case 286: + dimaltttz = reader->getInt32(); + break; + case 287: + dimfit = reader->getInt32(); + break; + case 288: + dimupt = reader->getInt32(); + break; + case 289: + dimatfit = reader->getInt32(); + break; + case 290: + dimfxlon = reader->getInt32(); + break; + case 340: + dimtxsty = reader->getUtf8String(); + break; + case 341: + dimldrblk = reader->getUtf8String(); + break; + case 342: + dimblk = reader->getUtf8String(); + break; + case 343: + dimblk1 = reader->getUtf8String(); + break; + case 344: + dimblk2 = reader->getUtf8String(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Dimstyle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing dimension style **************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("dimension style name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + +// handleObj = shpControlH.ref; + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + // RS crc; //RS */ + return buf->isGood(); +} + + +//! Class to handle line type entries +/*! +* Class to handle line type symbol table entries +* @author Rallaz +*/ +void DRW_LType::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + desc = reader->getUtf8String(); + break; + case 73: + size = reader->getInt32(); + path.reserve(size); + break; + case 40: + length = reader->getDouble(); + break; + case 49: + path.push_back(reader->getDouble()); + pathIdx++; + break; +/* case 74: + haveShape = reader->getInt32(); + break;*/ + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +//! Update line type +/*! +* Update the size and length of line type acording to the path +* @author Rallaz +*/ +/*TODO: control max length permited */ +void DRW_LType::update(){ + double d =0; + size = path.size(); + for (int i = 0; i< size; i++){ + d += fabs(path.at(i)); + } + length = d; +} + +bool DRW_LType::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing line type *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("linetype name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags = buf->getBit()<< 6; + DRW_DBG("flags: "); DRW_DBG(flags); + if (version > DRW::AC1018) {//2007+ + } else {//2004- //RLZ: verify in 2004, 2010 &2013 + dint16 xrefindex = buf->getBitShort(); + DRW_DBG(" xrefindex: "); DRW_DBG(xrefindex); + } + duint8 xdep = buf->getBit(); + DRW_DBG(" xdep: "); DRW_DBG(xdep); + flags |= xdep<< 4; + DRW_DBG(" flags: "); DRW_DBG(flags); + desc = sBuf->getVariableText(version, false); + DRW_DBG(" desc: "); DRW_DBG(desc.c_str()); + length = buf->getBitDouble(); + DRW_DBG(" pattern length: "); DRW_DBG(length); + char align = buf->getRawChar8(); + DRW_DBG(" align: "); DRW_DBG(std::string(&align, 1)); + size = buf->getRawChar8(); + DRW_DBG(" num dashes, size: "); DRW_DBG(size); + DRW_DBG("\n dashes:\n"); + bool haveStrArea = false; + for (int i=0; i< size; i++){ + path.push_back(buf->getBitDouble()); + /*int bs1 =*/ buf->getBitShort(); + /*double d1= */buf->getRawDouble(); + /*double d2=*/ buf->getRawDouble(); + /*double d3= */buf->getBitDouble(); + /*double d4= */buf->getBitDouble(); + int bs2 = buf->getBitShort(); + if((bs2 & 2) !=0) haveStrArea = true; + } + for (unsigned i=0; inumRemainingBytes()); DRW_DBG("\n"); + if (version < DRW::AC1021) { //2004- + duint8 strarea[256]; + buf->getBytes(strarea, 256); + DRW_DBG("string area 256 bytes:\n"); DRW_DBG(reinterpret_cast(strarea)); DRW_DBG("\n"); + } else { //2007+ + //first verify flag + if (haveStrArea) { + duint8 strarea[512]; + buf->getBytes(strarea, 512); + DRW_DBG("string area 512 bytes:\n"); DRW_DBG(reinterpret_cast(strarea)); DRW_DBG("\n"); + } else + DRW_DBG("string area 512 bytes not present\n"); + } + + if (version > DRW::AC1021) {//2007+ skip string area + DRW_DBG(" ltype end of object data pos 2010: "); DRW_DBG(buf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(buf->getBitPos()); DRW_DBG("\n"); + } + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + if (version > DRW::AC1021) {//2007+ skip string area + DRW_DBG(" ltype start of handles data pos 2010: "); DRW_DBG(buf->getPosition()); DRW_DBG(" strBuf bpos 2007: "); DRW_DBG(buf->getBitPos()); DRW_DBG("\n"); + } + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle ltControlH = buf->getHandle(); + DRW_DBG("linetype control Handle: "); DRW_DBGHL(ltControlH.code, ltControlH.size, ltControlH.ref); + parentHandle = ltControlH.ref; + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + for (int i=0; i< numReactors;++i) { + dwgHandle reactorsH = buf->getHandle(); + DRW_DBG(" reactorsH control Handle: "); DRW_DBGHL(reactorsH.code, reactorsH.size, reactorsH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + if(size>0){ + dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + dwgHandle shpHandle = buf->getHandle(); + DRW_DBG(" shapeFile Handle: "); DRW_DBGHL(shpHandle.code, shpHandle.size, shpHandle.ref); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + dwgHandle shpHandle = buf->getHandle(); + DRW_DBG(" shapeFile +1 Handle ??: "); DRW_DBGHL(shpHandle.code, shpHandle.size, shpHandle.ref); DRW_DBG("\n"); + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle layer entries +/*! +* Class to handle layer symbol table entries +* @author Rallaz +*/ +void DRW_Layer::parseCode(int code, dxfReader *reader){ + switch (code) { + case 6: + lineType = reader->getUtf8String(); + break; + case 62: + color = reader->getInt32(); + break; + case 290: + plotF = reader->getBool(); + break; + case 370: + lWeight = DRW_LW_Conv::dxfInt2lineWidth(reader->getInt32()); + break; + case 390: + handlePlotS = reader->getString(); + break; + case 347: + handleMaterialS = reader->getString(); + break; + case 420: + color24 = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Layer::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing layer *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("layer name: "); DRW_DBG(name.c_str()); + + flags |= buf->getBit()<< 6;//layer have entity + if (version < DRW::AC1021) {//2004- + DRW_DBG(", xrefindex = "); DRW_DBG(buf->getBitShort()); DRW_DBG("\n"); + //dint16 xrefindex = buf->getBitShort(); + } + flags |= buf->getBit() << 4;//is refx dependent + if (version < DRW::AC1015) {//14- + flags |= buf->getBit(); //layer frozen + /*flags |=*/ buf->getBit(); //unused, negate the color + flags |= buf->getBit() << 1;//frozen in new + flags |= buf->getBit()<< 3;//locked + } + if (version > DRW::AC1014) {//2000+ + dint16 f = buf->getSBitShort();//bit2 are layer on + DRW_DBG(", flags 2000+: "); DRW_DBG(f); DRW_DBG("\n"); + flags |= f & 0x0001; //layer frozen + flags |= ( f>> 1) & 0x0002;//frozen in new + flags |= ( f>> 1) & 0x0004;//locked + plotF = ( f>> 4) & 0x0001; + lWeight = DRW_LW_Conv::dwgInt2lineWidth( (f & 0x03E0) >> 5 ); + } + color = buf->getCmColor(version); //BS or CMC //ok for R14 or negate + DRW_DBG(", entity color: "); DRW_DBG(color); DRW_DBG("\n"); + + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle layerControlH = buf->getHandle(); + DRW_DBG("layer control Handle: "); DRW_DBGHL(layerControlH.code, layerControlH.size, layerControlH.ref); + parentHandle = layerControlH.ref; + + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + if (version > DRW::AC1014) {//2000+ + dwgHandle plotStyH = buf->getHandle(); + DRW_DBG(" PLot style control Handle: "); DRW_DBGHL(plotStyH.code, plotStyH.size, plotStyH.ref); DRW_DBG("\n"); + handlePlotS = DRW::toHexStr(plotStyH.ref);// std::string(plotStyH.ref);//RLZ: verify conversion + } + if (version > DRW::AC1018) {//2007+ + dwgHandle materialH = buf->getHandle(); + DRW_DBG(" Material control Handle: "); DRW_DBGHL(materialH.code, materialH.size, materialH.ref); DRW_DBG("\n"); + handleMaterialS = DRW::toHexStr(materialH.ref);//RLZ: verify conversion + } + //lineType handle + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + lTypeH = buf->getHandle(); + DRW_DBG("line type Handle: "); DRW_DBGHL(lTypeH.code, lTypeH.size, lTypeH.ref); + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_Block_Record::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing block record ******************************************\n"); + if (!ret) + return ret; + duint32 insertCount = 0;//only 2000+ + duint32 objectCount = 0; //only 2004+ + + name = sBuf->getVariableText(version, false); + DRW_DBG("block record name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + + flags |= buf->getBit()<< 6;//referenced external reference, block code 70, bit 7 (64) + if (version > DRW::AC1018) {//2007+ + } else {//2004- //RLZ: verify in 2004, 2010 &2013 + dint16 xrefindex = buf->getBitShort(); + DRW_DBG(" xrefindex: "); DRW_DBG(xrefindex); DRW_DBG("\n"); + } + flags |= buf->getBit() << 4;//is refx dependent, block code 70, bit 5 (16) + flags |= buf->getBit(); //if is anonimous block (*U) block code 70, bit 1 (1) + flags |= buf->getBit() << 1; //if block contains attdefs, block code 70, bit 2 (2) + bool blockIsXref = buf->getBit(); //if is a Xref, block code 70, bit 3 (4) + bool xrefOverlaid = buf->getBit(); //if is a overlaid Xref, block code 70, bit 4 (8) + flags |= blockIsXref << 2; //if is a Xref, block code 70, bit 3 (4) + flags |= xrefOverlaid << 3; //if is a overlaid Xref, block code 70, bit 4 (8) + if (version > DRW::AC1014) {//2000+ + flags |= buf->getBit() << 5; //if is a loaded Xref, block code 70, bit 6 (32) + } + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(", "); + if (version > DRW::AC1015) {//2004+ fails in 2007 + objectCount = buf->getBitLong(); //Number of objects owned by this block + entMap.reserve(objectCount); + } + basePoint.x = buf->getBitDouble(); + basePoint.y = buf->getBitDouble(); + basePoint.z = buf->getBitDouble(); + DRW_DBG("insertion point: "); DRW_DBGPT(basePoint.x, basePoint.y, basePoint.z); DRW_DBG("\n"); + UTF8STRING path = sBuf->getVariableText(version, false); + DRW_DBG("XRef path name: "); DRW_DBG(path.c_str()); DRW_DBG("\n"); + + if (version > DRW::AC1014) {//2000+ + insertCount = 0; + while (duint8 i = buf->getRawChar8() != 0) + insertCount +=i; + UTF8STRING bkdesc = sBuf->getVariableText(version, false); + DRW_DBG("Block description: "); DRW_DBG(bkdesc.c_str()); DRW_DBG("\n"); + + duint32 prevData = buf->getBitLong(); + for (unsigned int j= 0; j < prevData; ++j) + buf->getRawChar8(); + } + if (version > DRW::AC1018) {//2007+ + duint16 insUnits = buf->getBitShort(); + bool canExplode = buf->getBit(); //if block can be exploded + duint8 bkScaling = buf->getRawChar8(); + + DRW_UNUSED(insUnits); + DRW_UNUSED(canExplode); + DRW_UNUSED(bkScaling); + } + + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + + dwgHandle blockControlH = buf->getHandle(); + DRW_DBG("block control Handle: "); DRW_DBGHL(blockControlH.code, blockControlH.size, blockControlH.ref); DRW_DBG("\n"); + parentHandle = blockControlH.ref; + + for (int i=0; igetHandle(); + DRW_DBG(" reactor Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(reactorH.code, reactorH.size, reactorH.ref); DRW_DBG("\n"); + } + if (xDictFlag !=1) {//R14+ //seems present in 2000 + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + } + if (version != DRW::AC1021) {//2007+ XDicObjH or NullH not present + } + dwgHandle NullH = buf->getHandle(); + DRW_DBG(" NullH control Handle: "); DRW_DBGHL(NullH.code, NullH.size, NullH.ref); DRW_DBG("\n"); + dwgHandle blockH = buf->getOffsetHandle(handle); + DRW_DBG(" blockH Handle: "); DRW_DBGHL(blockH.code, blockH.size, blockH.ref); DRW_DBG("\n"); + block = blockH.ref; + + if (version > DRW::AC1015) {//2004+ + for (unsigned int i=0; i< objectCount; i++){ + dwgHandle entityH = buf->getHandle(); + DRW_DBG(" entityH Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(entityH.code, entityH.size, entityH.ref); DRW_DBG("\n"); + entMap.push_back(entityH.ref); + } + } else {//2000- + if(!blockIsXref && !xrefOverlaid){ + dwgHandle firstH = buf->getHandle(); + DRW_DBG(" firstH entity Handle: "); DRW_DBGHL(firstH.code, firstH.size, firstH.ref); DRW_DBG("\n"); + firstEH = firstH.ref; + dwgHandle lastH = buf->getHandle(); + DRW_DBG(" lastH entity Handle: "); DRW_DBGHL(lastH.code, lastH.size, lastH.ref); DRW_DBG("\n"); + lastEH = lastH.ref; + } + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle endBlockH = buf->getOffsetHandle(handle); + DRW_DBG(" endBlockH Handle: "); DRW_DBGHL(endBlockH.code, endBlockH.size, endBlockH.ref); DRW_DBG("\n"); + endBlock = endBlockH.ref; + + if (version > DRW::AC1014) {//2000+ + for (unsigned int i=0; i< insertCount; i++){ + dwgHandle insertsH = buf->getHandle(); + DRW_DBG(" insertsH Handle #"); DRW_DBG(i); DRW_DBG(": "); DRW_DBGHL(insertsH.code, insertsH.size, insertsH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + dwgHandle layoutH = buf->getHandle(); + DRW_DBG(" layoutH Handle: "); DRW_DBGHL(layoutH.code, layoutH.size, layoutH.ref); DRW_DBG("\n"); + } + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); +// RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle text style entries +/*! +* Class to handle text style symbol table entries +* @author Rallaz +*/ +void DRW_Textstyle::parseCode(int code, dxfReader *reader){ + switch (code) { + case 3: + font = reader->getUtf8String(); + break; + case 4: + bigFont = reader->getUtf8String(); + break; + case 40: + height = reader->getDouble(); + break; + case 41: + width = reader->getDouble(); + break; + case 50: + oblique = reader->getDouble(); + break; + case 42: + lastHeight = reader->getDouble(); + break; + case 71: + genFlag = reader->getInt32(); + break; + case 1071: + fontFamily = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Textstyle::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing text style *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("text style name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;//style are referenced for a entity, style code 70, bit 7 (64) + /*dint16 xrefindex =*/ buf->getBitShort(); + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + flags |= buf->getBit() << 2; //vertical text, stile code 70, bit 3 (4) + flags |= buf->getBit(); //if is a shape file instead of text, style code 70, bit 1 (1) + height = buf->getBitDouble(); + width = buf->getBitDouble(); + oblique = buf->getBitDouble(); + genFlag = buf->getRawChar8(); + lastHeight = buf->getBitDouble(); + font = sBuf->getVariableText(version, false); + bigFont = sBuf->getVariableText(version, false); + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle shpControlH = buf->getHandle(); + DRW_DBG(" parentControlH Handle: "); DRW_DBGHL(shpControlH.code, shpControlH.size, shpControlH.ref); DRW_DBG("\n"); + parentHandle = shpControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +//! Class to handle vport entries +/*! +* Class to handle vport symbol table entries +* @author Rallaz +*/ +void DRW_Vport::parseCode(int code, dxfReader *reader){ + switch (code) { + case 10: + lowerLeft.x = reader->getDouble(); + break; + case 20: + lowerLeft.y = reader->getDouble(); + break; + case 11: + UpperRight.x = reader->getDouble(); + break; + case 21: + UpperRight.y = reader->getDouble(); + break; + case 12: + center.x = reader->getDouble(); + break; + case 22: + center.y = reader->getDouble(); + break; + case 13: + snapBase.x = reader->getDouble(); + break; + case 23: + snapBase.y = reader->getDouble(); + break; + case 14: + snapSpacing.x = reader->getDouble(); + break; + case 24: + snapSpacing.y = reader->getDouble(); + break; + case 15: + gridSpacing.x = reader->getDouble(); + break; + case 25: + gridSpacing.y = reader->getDouble(); + break; + case 16: + viewDir.x = reader->getDouble(); + break; + case 26: + viewDir.y = reader->getDouble(); + break; + case 36: + viewDir.z = reader->getDouble(); + break; + case 17: + viewTarget.x = reader->getDouble(); + break; + case 27: + viewTarget.y = reader->getDouble(); + break; + case 37: + viewTarget.z = reader->getDouble(); + break; + case 40: + height = reader->getDouble(); + break; + case 41: + ratio = reader->getDouble(); + break; + case 42: + lensHeight = reader->getDouble(); + break; + case 43: + frontClip = reader->getDouble(); + break; + case 44: + backClip = reader->getDouble(); + break; + case 50: + snapAngle = reader->getDouble(); + break; + case 51: + twistAngle = reader->getDouble(); + break; + case 71: + viewMode = reader->getInt32(); + break; + case 72: + circleZoom = reader->getInt32(); + break; + case 73: + fastZoom = reader->getInt32(); + break; + case 74: + ucsIcon = reader->getInt32(); + break; + case 75: + snap = reader->getInt32(); + break; + case 76: + grid = reader->getInt32(); + break; + case 77: + snapStyle = reader->getInt32(); + break; + case 78: + snapIsopair = reader->getInt32(); + break; + default: + DRW_TableEntry::parseCode(code, reader); + break; + } +} + +bool DRW_Vport::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing VPort ************************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("vport name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;// code 70, bit 7 (64) + if (version < DRW::AC1021) { //2004- + /*dint16 xrefindex =*/ buf->getBitShort(); + } + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + height = buf->getBitDouble(); + ratio = buf->getBitDouble(); + DRW_DBG("flags: "); DRW_DBG(flags); DRW_DBG(" height: "); DRW_DBG(height); + DRW_DBG(" ratio: "); DRW_DBG(ratio); + center = buf->get2RawDouble(); + DRW_DBG("\nview center: "); DRW_DBGPT(center.x, center.y, center.z); + viewTarget.x = buf->getBitDouble(); + viewTarget.y = buf->getBitDouble(); + viewTarget.z = buf->getBitDouble(); + DRW_DBG("\nview target: "); DRW_DBGPT(viewTarget.x, viewTarget.y, viewTarget.z); + viewDir.x = buf->getBitDouble(); + viewDir.y = buf->getBitDouble(); + viewDir.z = buf->getBitDouble(); + DRW_DBG("\nview dir: "); DRW_DBGPT(viewDir.x, viewDir.y, viewDir.z); + twistAngle = buf->getBitDouble(); + lensHeight = buf->getBitDouble(); + frontClip = buf->getBitDouble(); + backClip = buf->getBitDouble(); + DRW_DBG("\ntwistAngle: "); DRW_DBG(twistAngle); DRW_DBG(" lensHeight: "); DRW_DBG(lensHeight); + DRW_DBG(" frontClip: "); DRW_DBG(frontClip); DRW_DBG(" backClip: "); DRW_DBG(backClip); + viewMode = buf->getBit(); //view mode, code 71, bit 0 (1) + viewMode |= buf->getBit() << 1; //view mode, code 71, bit 1 (2) + viewMode |= buf->getBit() << 2; //view mode, code 71, bit 2 (4) + viewMode |= buf->getBit() << 4; //view mode, code 71, bit 4 (16) + if (version > DRW::AC1014) { //2000+ + //duint8 renderMode = buf->getRawChar8(); + DRW_DBG("\n renderMode: "); DRW_DBG(buf->getRawChar8()); + if (version > DRW::AC1018) { //2007+ + DRW_DBG("\n use default lights: "); DRW_DBG(buf->getBit()); + DRW_DBG(" default lighting type: "); DRW_DBG(buf->getRawChar8()); + DRW_DBG(" brightness: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG("\n contrast: "); DRW_DBG(buf->getBitDouble()); DRW_DBG("\n"); + DRW_DBG(" ambient color CMC: "); DRW_DBG(buf->getCmColor(version)); + } + } + lowerLeft = buf->get2RawDouble(); + DRW_DBG("\nlowerLeft: "); DRW_DBGPT(lowerLeft.x, lowerLeft.y, lowerLeft.z); + UpperRight = buf->get2RawDouble(); + DRW_DBG("\nUpperRight: "); DRW_DBGPT(UpperRight.x, UpperRight.y, UpperRight.z); + viewMode |= buf->getBit() << 3; //UCSFOLLOW, view mode, code 71, bit 3 (8) + circleZoom = buf->getBitShort(); + fastZoom = buf->getBit(); + DRW_DBG("\nviewMode: "); DRW_DBG(viewMode); DRW_DBG(" circleZoom: "); + DRW_DBG(circleZoom); DRW_DBG(" fastZoom: "); DRW_DBG(fastZoom); + ucsIcon = buf->getBit(); //ucs Icon, code 74, bit 0 (1) + ucsIcon |= buf->getBit() << 1; //ucs Icon, code 74, bit 1 (2) + grid = buf->getBit(); + DRW_DBG("\nucsIcon: "); DRW_DBG(ucsIcon); DRW_DBG(" grid: "); DRW_DBG(grid); + gridSpacing = buf->get2RawDouble(); + DRW_DBG("\ngrid Spacing: "); DRW_DBGPT(gridSpacing.x, gridSpacing.y, gridSpacing.z); + snap = buf->getBit(); + snapStyle = buf->getBit(); + DRW_DBG("\nsnap on/off: "); DRW_DBG(snap); DRW_DBG(" snap Style: "); DRW_DBG(snapStyle); + snapIsopair = buf->getBitShort(); + snapAngle = buf->getBitDouble(); + DRW_DBG("\nsnap Isopair: "); DRW_DBG(snapIsopair); DRW_DBG(" snap Angle: "); DRW_DBG(snapAngle); + snapBase = buf->get2RawDouble(); + DRW_DBG("\nsnap Base: "); DRW_DBGPT(snapBase.x, snapBase.y, snapBase.z); + snapSpacing = buf->get2RawDouble(); + DRW_DBG("\nsnap Spacing: "); DRW_DBGPT(snapSpacing.x, snapSpacing.y, snapSpacing.z); + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\n Unknown: "); DRW_DBG(buf->getBit()); + DRW_DBG(" UCS per Viewport: "); DRW_DBG(buf->getBit()); + DRW_DBG("\nUCS origin: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS X Axis: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS Y Axis: "); DRW_DBGPT(buf->getBitDouble(), buf->getBitDouble(), buf->getBitDouble()); + DRW_DBG("\nUCS elevation: "); DRW_DBG(buf->getBitDouble()); + DRW_DBG(" UCS Orthographic type: "); DRW_DBG(buf->getBitShort()); + if (version > DRW::AC1018) { //2007+ + gridBehavior = buf->getBitShort(); + DRW_DBG(" gridBehavior (flags): "); DRW_DBG(gridBehavior); + DRW_DBG(" Grid major: "); DRW_DBG(buf->getBitShort()); + } + } + + //common handles + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle vpControlH = buf->getHandle(); + DRW_DBG("\n parentControlH Handle: "); DRW_DBGHL(vpControlH.code, vpControlH.size, vpControlH.ref); DRW_DBG("\n"); + parentHandle = vpControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){ + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); + + if (version > DRW::AC1014) { //2000+ + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + if (version > DRW::AC1018) { //2007+ + dwgHandle bkgrdH = buf->getHandle(); + DRW_DBG(" background Handle: "); DRW_DBGHL(bkgrdH.code, bkgrdH.size, bkgrdH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle visualStH = buf->getHandle(); + DRW_DBG(" visual style Handle: "); DRW_DBGHL(visualStH.code, visualStH.size, visualStH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle sunH = buf->getHandle(); + DRW_DBG(" sun Handle: "); DRW_DBGHL(sunH.code, sunH.size, sunH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + } + dwgHandle namedUCSH = buf->getHandle(); + DRW_DBG(" named UCS Handle: "); DRW_DBGHL(namedUCSH.code, namedUCSH.size, namedUCSH.ref); + DRW_DBG("\nRemaining bytes: "); DRW_DBG(buf->numRemainingBytes()); + dwgHandle baseUCSH = buf->getHandle(); + DRW_DBG(" base UCS Handle: "); DRW_DBGHL(baseUCSH.code, baseUCSH.size, baseUCSH.ref); + } + + DRW_DBG("\n Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +void DRW_ImageDef::parseCode(int code, dxfReader *reader){ + switch (code) { + case 1: + name = reader->getUtf8String(); + break; + case 5: + handle = reader->getHandleString(); + break; + case 10: + u = reader->getDouble(); + break; + case 20: + v = reader->getDouble(); + break; + case 11: + up = reader->getDouble(); + break; + case 12: + vp = reader->getDouble(); + break; + case 21: + vp = reader->getDouble(); + break; + case 280: + loaded = reader->getInt32(); + break; + case 281: + resolution = reader->getInt32(); + break; + default: + break; + } +} + +bool DRW_ImageDef::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing Image Def *********************************************\n"); + if (!ret) + return ret; + dint32 imgVersion = buf->getBitLong(); + DRW_DBG("class Version: "); DRW_DBG(imgVersion); + DRW_Coord size = buf->get2RawDouble(); + (void)size; + name = sBuf->getVariableText(version, false); + DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + loaded = buf->getBit(); + resolution = buf->getRawChar8(); + up = buf->getRawDouble(); + vp = buf->getRawDouble(); + + dwgHandle parentH = buf->getHandle(); + DRW_DBG(" parentH Handle: "); DRW_DBGHL(parentH.code, parentH.size, parentH.ref); DRW_DBG("\n"); + parentHandle = parentH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + //RLZ: Reactors handles + if (xDictFlag !=1){ + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} + +bool DRW_AppId::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ + dwgBuffer sBuff = *buf; + dwgBuffer *sBuf = buf; + if (version > DRW::AC1018) {//2007+ + sBuf = &sBuff; //separate buffer for strings + } + bool ret = DRW_TableEntry::parseDwg(version, buf, sBuf, bs); + DRW_DBG("\n***************************** parsing app Id *********************************************\n"); + if (!ret) + return ret; + name = sBuf->getVariableText(version, false); + DRW_DBG("appId name: "); DRW_DBG(name.c_str()); DRW_DBG("\n"); + flags |= buf->getBit()<< 6;// code 70, bit 7 (64) + /*dint16 xrefindex =*/ buf->getBitShort(); + flags |= buf->getBit() << 4; //is refx dependent, style code 70, bit 5 (16) + duint8 unknown = buf->getRawChar8(); // unknown code 71 + DRW_DBG("unknown code 71: "); DRW_DBG(unknown); DRW_DBG("\n"); + if (version > DRW::AC1018) {//2007+ skip string area + buf->setPosition(objSize >> 3); + buf->setBitPos(objSize & 7); + } + dwgHandle appIdControlH = buf->getHandle(); + DRW_DBG(" parentControlH Handle: "); DRW_DBGHL(appIdControlH.code, appIdControlH.size, appIdControlH.ref); DRW_DBG("\n"); + parentHandle = appIdControlH.ref; + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +/*RLZ: fails verify this part*/ dwgHandle XRefH = buf->getHandle(); + DRW_DBG(" XRefH control Handle: "); DRW_DBGHL(XRefH.code, XRefH.size, XRefH.ref); DRW_DBG("\n"); + + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n\n"); + // RS crc; //RS */ + return buf->isGood(); +} diff --git a/extlib/libdxfrw/drw_objects.h b/extlib/libdxfrw/drw_objects.h new file mode 100644 index 0000000..07cba08 --- /dev/null +++ b/extlib/libdxfrw/drw_objects.h @@ -0,0 +1,772 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_OBJECTS_H +#define DRW_OBJECTS_H + + +#include +#include +#include +#include "drw_base.h" + +class dxfReader; +class dxfWriter; +class dwgBuffer; + +namespace DRW { + +//! Table entries type. + enum TTYPE { + UNKNOWNT, + LTYPE, + LAYER, + STYLE, + DIMSTYLE, + VPORT, + BLOCK_RECORD, + APPID, + IMAGEDEF + }; + +//pending VIEW, UCS, APPID, VP_ENT_HDR, GROUP, MLINESTYLE, LONG_TRANSACTION, XRECORD, +//ACDBPLACEHOLDER, VBA_PROJECT, ACAD_TABLE, CELLSTYLEMAP, DBCOLOR, DICTIONARYVAR, +//DICTIONARYWDFLT, FIELD, IDBUFFER, IMAGEDEF, IMAGEDEFREACTOR, LAYER_INDEX, LAYOUT +//MATERIAL, PLACEHOLDER, PLOTSETTINGS, RASTERVARIABLES, SCALE, SORTENTSTABLE, +//SPATIAL_INDEX, SPATIAL_FILTER, TABLEGEOMETRY, TABLESTYLES,VISUALSTYLE, +} + +#define SETOBJFRIENDS friend class dxfRW; \ + friend class dwgReader; + +//! Base class for tables entries +/*! +* Base class for tables entries +* @author Rallaz +*/ +class DRW_TableEntry { +public: + //initializes default values + DRW_TableEntry() { + tType = DRW::UNKNOWNT; + flags = 0; + numReactors = xDictFlag = 0; + parentHandle = 0; + curr = NULL; + } + + virtual~DRW_TableEntry() { + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + + extData.clear(); + } + + DRW_TableEntry(const DRW_TableEntry& e) { + tType = e.tType; + handle = e.handle; + parentHandle = e.parentHandle; + name = e.name; + flags = e.flags; + numReactors = e.numReactors; + xDictFlag = e.xDictFlag; + curr = e.curr; + for (std::vector::const_iterator it=e.extData.begin(); it!=e.extData.end(); ++it){ + extData.push_back(new DRW_Variant(*(*it))); + } + } + +protected: + void parseCode(int code, dxfReader *reader); + virtual bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0) = 0; + bool parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer* strBuf, duint32 bs=0); + void reset(){ + flags =0; + for (std::vector::iterator it=extData.begin(); it!=extData.end(); ++it) + delete *it; + extData.clear(); + } + +public: + enum DRW::TTYPE tType; /*!< enum: entity type, code 0 */ + duint32 handle; /*!< entity identifier, code 5 */ + int parentHandle; /*!< Soft-pointer ID/handle to owner object, code 330 */ + UTF8STRING name; /*!< entry name, code 2 */ + int flags; /*!< Flags relevant to entry, code 70 */ + std::vector extData; /*!< FIFO list of extended data, codes 1000 to 1071*/ + +private: + DRW_Variant* curr; + + //***** dwg parse ********/ +protected: + dint16 oType; + duint8 xDictFlag; + dint32 numReactors; // + duint32 objSize; //RL 32bits object data size in bits +}; + + +//! Class to handle dimstyle entries +/*! +* Class to handle dim style symbol table entries +* @author Rallaz +*/ +class DRW_Dimstyle : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Dimstyle() { reset();} + + void reset(){ + tType = DRW::DIMSTYLE; + dimasz = dimtxt = dimcen = 2.5; + dimexe = 1.25; + dimexo = dimgap = 0.625; + dimtxsty = ""; + dimscale = dimlfac = dimtfac = dimfxl = 1.0; + dimdli = 3.75; + dimrnd = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0; + dimaltf = 1.0 / 25.4; + dimtol = dimlim = dimse1 = dimse2 = 0; + dimtad = 1; + dimzin = 8; + dimtoh = dimtolj = 0; + dimalt = dimsah = dimtix = dimsoxd = dimfxlon = 0; + dimtofl = 1; + dimunit = dimaltu = dimlunit = 2; + dimaltd = dimalttd = 3; + dimclrd = dimclre = dimclrt = dimjust = dimupt = 0; + dimtzin = 8; + dimazin = dimaltz = dimaltttz = dimfrac = 0; + dimtih = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0; + dimaltrnd = 0.0; + dimdec = dimtdec = 2; + dimfit = dimatfit = 3; + dimdsep = ','; + dimlwd = dimlwe = -2; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + //V12 + UTF8STRING dimpost; /*!< code 3 */ + UTF8STRING dimapost; /*!< code 4 */ +/* handle are code 105 */ + UTF8STRING dimblk; /*!< code 5, code 342 V2000+ */ + UTF8STRING dimblk1; /*!< code 6, code 343 V2000+ */ + UTF8STRING dimblk2; /*!< code 7, code 344 V2000+ */ + double dimscale; /*!< code 40 */ + double dimasz; /*!< code 41 */ + double dimexo; /*!< code 42 */ + double dimdli; /*!< code 43 */ + double dimexe; /*!< code 44 */ + double dimrnd; /*!< code 45 */ + double dimdle; /*!< code 46 */ + double dimtp; /*!< code 47 */ + double dimtm; /*!< code 48 */ + double dimfxl; /*!< code 49 V2007+ */ + double dimtxt; /*!< code 140 */ + double dimcen; /*!< code 141 */ + double dimtsz; /*!< code 142 */ + double dimaltf; /*!< code 143 */ + double dimlfac; /*!< code 144 */ + double dimtvp; /*!< code 145 */ + double dimtfac; /*!< code 146 */ + double dimgap; /*!< code 147 */ + double dimaltrnd; /*!< code 148 V2000+ */ + int dimtol; /*!< code 71 */ + int dimlim; /*!< code 72 */ + int dimtih; /*!< code 73 */ + int dimtoh; /*!< code 74 */ + int dimse1; /*!< code 75 */ + int dimse2; /*!< code 76 */ + int dimtad; /*!< code 77 */ + int dimzin; /*!< code 78 */ + int dimazin; /*!< code 79 V2000+ */ + int dimalt; /*!< code 170 */ + int dimaltd; /*!< code 171 */ + int dimtofl; /*!< code 172 */ + int dimsah; /*!< code 173 */ + int dimtix; /*!< code 174 */ + int dimsoxd; /*!< code 175 */ + int dimclrd; /*!< code 176 */ + int dimclre; /*!< code 177 */ + int dimclrt; /*!< code 178 */ + int dimadec; /*!< code 179 V2000+ */ + int dimunit; /*!< code 270 R13+ (obsolete 2000+, use dimlunit & dimfrac) */ + int dimdec; /*!< code 271 R13+ */ + int dimtdec; /*!< code 272 R13+ */ + int dimaltu; /*!< code 273 R13+ */ + int dimalttd; /*!< code 274 R13+ */ + int dimaunit; /*!< code 275 R13+ */ + int dimfrac; /*!< code 276 V2000+ */ + int dimlunit; /*!< code 277 V2000+ */ + int dimdsep; /*!< code 278 V2000+ */ + int dimtmove; /*!< code 279 V2000+ */ + int dimjust; /*!< code 280 R13+ */ + int dimsd1; /*!< code 281 R13+ */ + int dimsd2; /*!< code 282 R13+ */ + int dimtolj; /*!< code 283 R13+ */ + int dimtzin; /*!< code 284 R13+ */ + int dimaltz; /*!< code 285 R13+ */ + int dimaltttz; /*!< code 286 R13+ */ + int dimfit; /*!< code 287 R13+ (obsolete 2000+, use dimatfit & dimtmove)*/ + int dimupt; /*!< code 288 R13+ */ + int dimatfit; /*!< code 289 V2000+ */ + int dimfxlon; /*!< code 290 V2007+ */ + UTF8STRING dimtxsty; /*!< code 340 R13+ */ + UTF8STRING dimldrblk; /*!< code 341 V2000+ */ + int dimlwd; /*!< code 371 V2000+ */ + int dimlwe; /*!< code 372 V2000+ */ +}; + + +//! Class to handle line type entries +/*! +* Class to handle line type symbol table entries +* @author Rallaz +*/ +/*TODO: handle complex lineType*/ +class DRW_LType : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_LType() { reset();} + + void reset(){ + tType = DRW::LTYPE; + desc = ""; + size = 0; + length = 0.0; + pathIdx = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + void update(); + +public: + UTF8STRING desc; /*!< descriptive string, code 3 */ +// int align; /*!< align code, always 65 ('A') code 72 */ + int size; /*!< element number, code 73 */ + double length; /*!< total length of pattern, code 40 */ +// int haveShape; /*!< complex linetype type, code 74 */ + std::vector path; /*!< trace, point or space length sequence, code 49 */ +private: + int pathIdx; +}; + + +//! Class to handle layer entries +/*! +* Class to handle layer symbol table entries +* @author Rallaz +*/ +class DRW_Layer : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Layer() { reset();} + + void reset() { + tType = DRW::LAYER; + lineType = "CONTINUOUS"; + color = 7; // default BYLAYER (256) + plotF = true; // default TRUE (plot yes) + lWeight = DRW_LW_Conv::widthDefault; // default BYDEFAULT (dxf -3, dwg 31) + color24 = -1; //default -1 not set + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + UTF8STRING lineType; /*!< line type, code 6 */ + int color; /*!< layer color, code 62 */ + int color24; /*!< 24-bit color, code 420 */ + bool plotF; /*!< Plot flag, code 290 */ + enum DRW_LW_Conv::lineWidth lWeight; /*!< layer lineweight, code 370 */ + std::string handlePlotS; /*!< Hard-pointer ID/handle of plotstyle, code 390 */ + std::string handleMaterialS; /*!< Hard-pointer ID/handle of materialstyle, code 347 */ +/*only used for read dwg*/ + dwgHandle lTypeH; +}; + +//! Class to handle block record entries +/*! +* Class to handle block record table entries +* @author Rallaz +*/ +class DRW_Block_Record : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Block_Record() { reset();} + void reset() { + tType = DRW::BLOCK_RECORD; + flags = 0; + firstEH = lastEH = DRW::NoHandle; + DRW_TableEntry::reset(); + } + +protected: +// void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +//Note: int DRW_TableEntry::flags; contains code 70 of block + int insUnits; /*!< block insertion units, code 70 of block_record*/ + DRW_Coord basePoint; /*!< block insertion base point dwg only */ +protected: + //dwg parser +private: + duint32 block; //handle for block entity + duint32 endBlock;//handle for end block entity + duint32 firstEH; //handle of first entity, only in pre-2004 + duint32 lastEH; //handle of last entity, only in pre-2004 + std::vectorentMap; +}; + +//! Class to handle text style entries +/*! +* Class to handle text style symbol table entries +* @author Rallaz +*/ +class DRW_Textstyle : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Textstyle() { reset();} + + void reset(){ + tType = DRW::STYLE; + height = oblique = 0.0; + width = lastHeight = 1.0; + font="txt"; + genFlag = 0; //2= X mirror, 4= Y mirror + fontFamily = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + double height; /*!< Fixed text height (0 not set), code 40 */ + double width; /*!< Width factor, code 41 */ + double oblique; /*!< Oblique angle, code 50 */ + int genFlag; /*!< Text generation flags, code 71 */ + double lastHeight; /*!< Last height used, code 42 */ + UTF8STRING font; /*!< primary font file name, code 3 */ + UTF8STRING bigFont; /*!< bigfont file name or blank if none, code 4 */ + int fontFamily; /*!< ttf font family, italic and bold flags, code 1071 */ +}; + +//! Class to handle vport entries +/*! +* Class to handle vport symbol table entries +* @author Rallaz +*/ +class DRW_Vport : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_Vport() { reset();} + + void reset(){ + tType = DRW::VPORT; + UpperRight.x = UpperRight.y = 1.0; + snapSpacing.x = snapSpacing.y = 10.0; + gridSpacing = snapSpacing; + center.x = 0.651828; + center.y = -0.16; + viewDir.z = 1; + height = 5.13732; + ratio = 2.4426877; + lensHeight = 50; + frontClip = backClip = snapAngle = twistAngle = 0.0; + viewMode = snap = grid = snapStyle = snapIsopair = 0; + fastZoom = 1; + circleZoom = 100; + ucsIcon = 3; + gridBehavior = 7; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: + DRW_Coord lowerLeft; /*!< Lower left corner, code 10 & 20 */ + DRW_Coord UpperRight; /*!< Upper right corner, code 11 & 21 */ + DRW_Coord center; /*!< center point in WCS, code 12 & 22 */ + DRW_Coord snapBase; /*!< snap base point in DCS, code 13 & 23 */ + DRW_Coord snapSpacing; /*!< snap Spacing, code 14 & 24 */ + DRW_Coord gridSpacing; /*!< grid Spacing, code 15 & 25 */ + DRW_Coord viewDir; /*!< view direction from target point, code 16, 26 & 36 */ + DRW_Coord viewTarget; /*!< view target point, code 17, 27 & 37 */ + double height; /*!< view height, code 40 */ + double ratio; /*!< viewport aspect ratio, code 41 */ + double lensHeight; /*!< lens height, code 42 */ + double frontClip; /*!< front clipping plane, code 43 */ + double backClip; /*!< back clipping plane, code 44 */ + double snapAngle; /*!< snap rotation angle, code 50 */ + double twistAngle; /*!< view twist angle, code 51 */ + int viewMode; /*!< view mode, code 71 */ + int circleZoom; /*!< circle zoom percent, code 72 */ + int fastZoom; /*!< fast zoom setting, code 73 */ + int ucsIcon; /*!< UCSICON setting, code 74 */ + int snap; /*!< snap on/off, code 75 */ + int grid; /*!< grid on/off, code 76 */ + int snapStyle; /*!< snap style, code 77 */ + int snapIsopair; /*!< snap isopair, code 78 */ + int gridBehavior; /*!< grid behavior, code 60, undocummented */ + /** code 60, bit coded possible value are + * bit 1 (1) show out of limits + * bit 2 (2) adaptive grid + * bit 3 (4) allow subdivision + * bit 4 (8) follow dinamic SCP + **/ +}; + + +//! Class to handle imagedef entries +/*! +* Class to handle image definitions object entries +* @author Rallaz +*/ +class DRW_ImageDef : public DRW_TableEntry {// + SETOBJFRIENDS +public: + DRW_ImageDef() { + reset(); + } + + void reset(){ + tType = DRW::IMAGEDEF; + imgVersion = 0; + DRW_TableEntry::reset(); + } + +protected: + void parseCode(int code, dxfReader *reader); + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + +public: +// std::string handle; /*!< entity identifier, code 5 */ + UTF8STRING name; /*!< File name of image, code 1 */ + int imgVersion; /*!< class version, code 90, 0=R14 version */ + double u; /*!< image size in pixels U value, code 10 */ + double v; /*!< image size in pixels V value, code 20 */ + double up; /*!< default size of one pixel U value, code 11 */ + double vp; /*!< default size of one pixel V value, code 12 really is 21*/ + int loaded; /*!< image is loaded flag, code 280, 0=unloaded, 1=loaded */ + int resolution; /*!< resolution units, code 281, 0=no, 2=centimeters, 5=inch */ + + std::map reactors; +}; + +//! Class to handle AppId entries +/*! +* Class to handle AppId symbol table entries +* @author Rallaz +*/ +class DRW_AppId : public DRW_TableEntry { + SETOBJFRIENDS +public: + DRW_AppId() { reset();} + + void reset(){ + tType = DRW::APPID; + flags = 0; + name = ""; + } + +protected: + void parseCode(int code, dxfReader *reader){DRW_TableEntry::parseCode(code, reader);} + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); +}; + +namespace DRW { + +// Extended color palette: +// The first entry is only for direct indexing starting with [1] +// Color 1 is red (1,0,0) +const unsigned char dxfColors[][3] = { + { 0, 0, 0}, // unused + {255, 0, 0}, // 1 red + {255,255, 0}, // 2 yellow + { 0,255, 0}, // 3 green + { 0,255,255}, // 4 cyan + { 0, 0,255}, // 5 blue + {255, 0,255}, // 6 magenta + { 0, 0, 0}, // 7 black or white + {128,128,128}, // 8 50% gray + {192,192,192}, // 9 75% gray + {255, 0, 0}, // 10 + {255,127,127}, + {204, 0, 0}, + {204,102,102}, + {153, 0, 0}, + {153, 76, 76}, // 15 + {127, 0, 0}, + {127, 63, 63}, + { 76, 0, 0}, + { 76, 38, 38}, + {255, 63, 0}, // 20 + {255,159,127}, + {204, 51, 0}, + {204,127,102}, + {153, 38, 0}, + {153, 95, 76}, // 25 + {127, 31, 0}, + {127, 79, 63}, + { 76, 19, 0}, + { 76, 47, 38}, + {255,127, 0}, // 30 + {255,191,127}, + {204,102, 0}, + {204,153,102}, + {153, 76, 0}, + {153,114, 76}, // 35 + {127, 63, 0}, + {127, 95, 63}, + { 76, 38, 0}, + { 76, 57, 38}, + {255,191, 0}, // 40 + {255,223,127}, + {204,153, 0}, + {204,178,102}, + {153,114, 0}, + {153,133, 76}, // 45 + {127, 95, 0}, + {127,111, 63}, + { 76, 57, 0}, + { 76, 66, 38}, + {255,255, 0}, // 50 + {255,255,127}, + {204,204, 0}, + {204,204,102}, + {153,153, 0}, + {153,153, 76}, // 55 + {127,127, 0}, + {127,127, 63}, + { 76, 76, 0}, + { 76, 76, 38}, + {191,255, 0}, // 60 + {223,255,127}, + {153,204, 0}, + {178,204,102}, + {114,153, 0}, + {133,153, 76}, // 65 + { 95,127, 0}, + {111,127, 63}, + { 57, 76, 0}, + { 66, 76, 38}, + {127,255, 0}, // 70 + {191,255,127}, + {102,204, 0}, + {153,204,102}, + { 76,153, 0}, + {114,153, 76}, // 75 + { 63,127, 0}, + { 95,127, 63}, + { 38, 76, 0}, + { 57, 76, 38}, + { 63,255, 0}, // 80 + {159,255,127}, + { 51,204, 0}, + {127,204,102}, + { 38,153, 0}, + { 95,153, 76}, // 85 + { 31,127, 0}, + { 79,127, 63}, + { 19, 76, 0}, + { 47, 76, 38}, + { 0,255, 0}, // 90 + {127,255,127}, + { 0,204, 0}, + {102,204,102}, + { 0,153, 0}, + { 76,153, 76}, // 95 + { 0,127, 0}, + { 63,127, 63}, + { 0, 76, 0}, + { 38, 76, 38}, + { 0,255, 63}, // 100 + {127,255,159}, + { 0,204, 51}, + {102,204,127}, + { 0,153, 38}, + { 76,153, 95}, // 105 + { 0,127, 31}, + { 63,127, 79}, + { 0, 76, 19}, + { 38, 76, 47}, + { 0,255,127}, // 110 + {127,255,191}, + { 0,204,102}, + {102,204,153}, + { 0,153, 76}, + { 76,153,114}, // 115 + { 0,127, 63}, + { 63,127, 95}, + { 0, 76, 38}, + { 38, 76, 57}, + { 0,255,191}, // 120 + {127,255,223}, + { 0,204,153}, + {102,204,178}, + { 0,153,114}, + { 76,153,133}, // 125 + { 0,127, 95}, + { 63,127,111}, + { 0, 76, 57}, + { 38, 76, 66}, + { 0,255,255}, // 130 + {127,255,255}, + { 0,204,204}, + {102,204,204}, + { 0,153,153}, + { 76,153,153}, // 135 + { 0,127,127}, + { 63,127,127}, + { 0, 76, 76}, + { 38, 76, 76}, + { 0,191,255}, // 140 + {127,223,255}, + { 0,153,204}, + {102,178,204}, + { 0,114,153}, + { 76,133,153}, // 145 + { 0, 95,127}, + { 63,111,127}, + { 0, 57, 76}, + { 38, 66, 76}, + { 0,127,255}, // 150 + {127,191,255}, + { 0,102,204}, + {102,153,204}, + { 0, 76,153}, + { 76,114,153}, // 155 + { 0, 63,127}, + { 63, 95,127}, + { 0, 38, 76}, + { 38, 57, 76}, + { 0, 66,255}, // 160 + {127,159,255}, + { 0, 51,204}, + {102,127,204}, + { 0, 38,153}, + { 76, 95,153}, // 165 + { 0, 31,127}, + { 63, 79,127}, + { 0, 19, 76}, + { 38, 47, 76}, + { 0, 0,255}, // 170 + {127,127,255}, + { 0, 0,204}, + {102,102,204}, + { 0, 0,153}, + { 76, 76,153}, // 175 + { 0, 0,127}, + { 63, 63,127}, + { 0, 0, 76}, + { 38, 38, 76}, + { 63, 0,255}, // 180 + {159,127,255}, + { 50, 0,204}, + {127,102,204}, + { 38, 0,153}, + { 95, 76,153}, // 185 + { 31, 0,127}, + { 79, 63,127}, + { 19, 0, 76}, + { 47, 38, 76}, + {127, 0,255}, // 190 + {191,127,255}, + {102, 0,204}, + {153,102,204}, + { 76, 0,153}, + {114, 76,153}, // 195 + { 63, 0,127}, + { 95, 63,127}, + { 38, 0, 76}, + { 57, 38, 76}, + {191, 0,255}, // 200 + {223,127,255}, + {153, 0,204}, + {178,102,204}, + {114, 0,153}, + {133, 76,153}, // 205 + { 95, 0,127}, + {111, 63,127}, + { 57, 0, 76}, + { 66, 38, 76}, + {255, 0,255}, // 210 + {255,127,255}, + {204, 0,204}, + {204,102,204}, + {153, 0,153}, + {153, 76,153}, // 215 + {127, 0,127}, + {127, 63,127}, + { 76, 0, 76}, + { 76, 38, 76}, + {255, 0,191}, // 220 + {255,127,223}, + {204, 0,153}, + {204,102,178}, + {153, 0,114}, + {153, 76,133}, // 225 + {127, 0, 95}, + {127, 63, 11}, + { 76, 0, 57}, + { 76, 38, 66}, + {255, 0,127}, // 230 + {255,127,191}, + {204, 0,102}, + {204,102,153}, + {153, 0, 76}, + {153, 76,114}, // 235 + {127, 0, 63}, + {127, 63, 95}, + { 76, 0, 38}, + { 76, 38, 57}, + {255, 0, 63}, // 240 + {255,127,159}, + {204, 0, 51}, + {204,102,127}, + {153, 0, 38}, + {153, 76, 95}, // 245 + {127, 0, 31}, + {127, 63, 79}, + { 76, 0, 19}, + { 76, 38, 47}, + { 51, 51, 51}, // 250 + { 91, 91, 91}, + {132,132,132}, + {173,173,173}, + {214,214,214}, + {255,255,255} // 255 +}; + +} + +#endif + +// EOF diff --git a/extlib/libdxfrw/intern/drw_cptable932.h b/extlib/libdxfrw/intern/drw_cptable932.h new file mode 100644 index 0000000..0d9be10 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable932.h @@ -0,0 +1,7812 @@ +#ifndef DRW_CPTABLE932_H +#define DRW_CPTABLE932_H + +//Japanese + +//first entry in this table are 0xA1 +#define CPOFFSET932 0xFEC0 +//#define CP1LENGHT932 63 +#define CPLENGHT932 7724 +#define NOTFOUND932 0x30FB + +//Table 932 one byte are +//from 0xA1 -> 0xFF61 +//to 0xDF .> 0xFF9F +static const int DRW_Table932[1] = { +}; + +//Table 932 lead byte +//pairs of start/end in DRW_DoubleTable932 +static const int DRW_LeadTable932[] = { + 0, //1 #DBCS LEAD BYTE 0x81 + 147, //2 #DBCS LEAD BYTE 0x82 + 292, //3 #DBCS LEAD BYTE 0x83 + 426, //4 #DBCS LEAD BYTE 0x84 + 524, //5 #DBCS LEAD BYTE 0x85, empty + 524, //6 #DBCS LEAD BYTE 0x86, empty + 524, //7 #DBCS LEAD BYTE 0x87 + 607, //8 #DBCS LEAD BYTE 0x88 + 701, //9 #DBCS LEAD BYTE 0x89 + 889, //10 #DBCS LEAD BYTE 0x8A + 1077, //11 #DBCS LEAD BYTE 0x8B + 1265, //12 #DBCS LEAD BYTE 0x8C + 1453, //13 #DBCS LEAD BYTE 0x8D + 1641, //14 #DBCS LEAD BYTE 0x8E + 1829, //15 #DBCS LEAD BYTE 0x8F + 2017, //16 #DBCS LEAD BYTE 0x90 + 2205, //17 #DBCS LEAD BYTE 0x91 + 2393, //18 #DBCS LEAD BYTE 0x92 + 2581, //19 #DBCS LEAD BYTE 0x93 + 2769, //20 #DBCS LEAD BYTE 0x94 + 2957, //21 #DBCS LEAD BYTE 0x95 + 3145, //22 #DBCS LEAD BYTE 0x96 + 3333, //23 #DBCS LEAD BYTE 0x97 + 3521, //24 #DBCS LEAD BYTE 0x98 + 3666, //25 #DBCS LEAD BYTE 0x99 + 3854, //26 #DBCS LEAD BYTE 0x9A + 4042, //27 #DBCS LEAD BYTE 0x9B + 4230, //28 #DBCS LEAD BYTE 0x9C + 4418, //29 #DBCS LEAD BYTE 0x9D + 4606, //30 #DBCS LEAD BYTE 0x9E + 4794, //31 #DBCS LEAD BYTE 0x9F +//0xA0 to 0xDF are empty + 4982, //32 #DBCS LEAD BYTE 0xE0 + 5170, //33 #DBCS LEAD BYTE 0xE1 + 5358, //34 #DBCS LEAD BYTE 0xE2 + 5546, //35 #DBCS LEAD BYTE 0xE3 + 5734, //36 #DBCS LEAD BYTE 0xE4 + 5922, //37 #DBCS LEAD BYTE 0xE5 + 6110, //38 #DBCS LEAD BYTE 0xE6 + 6298, //39 #DBCS LEAD BYTE 0xE7 + 6486, //40 #DBCS LEAD BYTE 0xE8 + 6674, //41 #DBCS LEAD BYTE 0xE9 + 6862, //42 #DBCS LEAD BYTE 0xEA + 6962, //43 #DBCS LEAD BYTE 0xEB, empty + 6962, //44 #DBCS LEAD BYTE 0xEC, empty + 6962, //45 #DBCS LEAD BYTE 0xED + 7150, //46 #DBCS LEAD BYTE 0xEE + 7336, //47 #DBCS LEAD BYTE 0xEF, empty + 7336, //48 #DBCS LEAD BYTE 0xF0, empty + 7336, //49 #DBCS LEAD BYTE 0xF1, empty + 7336, //50 #DBCS LEAD BYTE 0xF2, empty + 7336, //51 #DBCS LEAD BYTE 0xF3, empty + 7336, //52 #DBCS LEAD BYTE 0xF4, empty + 7336, //53 #DBCS LEAD BYTE 0xF5, empty + 7336, //54 #DBCS LEAD BYTE 0xF6, empty + 7336, //55 #DBCS LEAD BYTE 0xF7, empty + 7336, //56 #DBCS LEAD BYTE 0xF8, empty + 7336, //57 #DBCS LEAD BYTE 0xF9, empty + 7336, //58 #DBCS LEAD BYTE 0xFA + 7524, //59 #DBCS LEAD BYTE 0xFB + 7712, //60 #DBCS LEAD BYTE 0xFC + 7724 //61 #END OF TABLE 0xFD +}; + +//Table 932 tail byte +static const int DRW_DoubleTable932[][2] = { + {0x8140, 0x3000}, //1 #IDEOGRAPHIC SPACE + {0x8141, 0x3001}, //2 #IDEOGRAPHIC COMMA + {0x8142, 0x3002}, //3 #IDEOGRAPHIC FULL STOP + {0x8143, 0xFF0C}, //4 #FULLWIDTH COMMA + {0x8144, 0xFF0E}, //5 #FULLWIDTH FULL STOP + {0x8145, 0x30FB}, //6 #KATAKANA MIDDLE DOT + {0x8146, 0xFF1A}, //7 #FULLWIDTH COLON + {0x8147, 0xFF1B}, //8 #FULLWIDTH SEMICOLON + {0x8148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK + {0x8149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK + {0x814A, 0x309B}, //11 #KATAKANA-HIRAGANA VOICED SOUND MARK + {0x814B, 0x309C}, //12 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + {0x814C, 0x00B4}, //13 #ACUTE ACCENT + {0x814D, 0xFF40}, //14 #FULLWIDTH GRAVE ACCENT + {0x814E, 0x00A8}, //15 #DIAERESIS + {0x814F, 0xFF3E}, //16 #FULLWIDTH CIRCUMFLEX ACCENT + {0x8150, 0xFFE3}, //17 #FULLWIDTH MACRON + {0x8151, 0xFF3F}, //18 #FULLWIDTH LOW LINE + {0x8152, 0x30FD}, //19 #KATAKANA ITERATION MARK + {0x8153, 0x30FE}, //20 #KATAKANA VOICED ITERATION MARK + {0x8154, 0x309D}, //21 #HIRAGANA ITERATION MARK + {0x8155, 0x309E}, //22 #HIRAGANA VOICED ITERATION MARK + {0x8156, 0x3003}, //23 #DITTO MARK + {0x8157, 0x4EDD}, //24 #CJK UNIFIED IDEOGRAPH + {0x8158, 0x3005}, //25 #IDEOGRAPHIC ITERATION MARK + {0x8159, 0x3006}, //26 #IDEOGRAPHIC CLOSING MARK + {0x815A, 0x3007}, //27 #IDEOGRAPHIC NUMBER ZERO + {0x815B, 0x30FC}, //28 #KATAKANA-HIRAGANA PROLONGED SOUND MARK + {0x815C, 0x2015}, //29 #HORIZONTAL BAR + {0x815D, 0x2010}, //30 #HYPHEN + {0x815E, 0xFF0F}, //31 #FULLWIDTH SOLIDUS + {0x815F, 0xFF3C}, //32 #FULLWIDTH REVERSE SOLIDUS + {0x8160, 0xFF5E}, //33 #FULLWIDTH TILDE + {0x8161, 0x2225}, //34 #PARALLEL TO + {0x8162, 0xFF5C}, //35 #FULLWIDTH VERTICAL LINE + {0x8163, 0x2026}, //36 #HORIZONTAL ELLIPSIS + {0x8164, 0x2025}, //37 #TWO DOT LEADER + {0x8165, 0x2018}, //38 #LEFT SINGLE QUOTATION MARK + {0x8166, 0x2019}, //39 #RIGHT SINGLE QUOTATION MARK + {0x8167, 0x201C}, //40 #LEFT DOUBLE QUOTATION MARK + {0x8168, 0x201D}, //41 #RIGHT DOUBLE QUOTATION MARK + {0x8169, 0xFF08}, //42 #FULLWIDTH LEFT PARENTHESIS + {0x816A, 0xFF09}, //43 #FULLWIDTH RIGHT PARENTHESIS + {0x816B, 0x3014}, //44 #LEFT TORTOISE SHELL BRACKET + {0x816C, 0x3015}, //45 #RIGHT TORTOISE SHELL BRACKET + {0x816D, 0xFF3B}, //46 #FULLWIDTH LEFT SQUARE BRACKET + {0x816E, 0xFF3D}, //47 #FULLWIDTH RIGHT SQUARE BRACKET + {0x816F, 0xFF5B}, //48 #FULLWIDTH LEFT CURLY BRACKET + {0x8170, 0xFF5D}, //49 #FULLWIDTH RIGHT CURLY BRACKET + {0x8171, 0x3008}, //50 #LEFT ANGLE BRACKET + {0x8172, 0x3009}, //51 #RIGHT ANGLE BRACKET + {0x8173, 0x300A}, //52 #LEFT DOUBLE ANGLE BRACKET + {0x8174, 0x300B}, //53 #RIGHT DOUBLE ANGLE BRACKET + {0x8175, 0x300C}, //54 #LEFT CORNER BRACKET + {0x8176, 0x300D}, //55 #RIGHT CORNER BRACKET + {0x8177, 0x300E}, //56 #LEFT WHITE CORNER BRACKET + {0x8178, 0x300F}, //57 #RIGHT WHITE CORNER BRACKET + {0x8179, 0x3010}, //58 #LEFT BLACK LENTICULAR BRACKET + {0x817A, 0x3011}, //59 #RIGHT BLACK LENTICULAR BRACKET + {0x817B, 0xFF0B}, //60 #FULLWIDTH PLUS SIGN + {0x817C, 0xFF0D}, //61 #FULLWIDTH HYPHEN-MINUS + {0x817D, 0x00B1}, //62 #PLUS-MINUS SIGN + {0x817E, 0x00D7}, //63 #MULTIPLICATION SIGN + {0x8180, 0x00F7}, //64 #DIVISION SIGN + {0x8181, 0xFF1D}, //65 #FULLWIDTH EQUALS SIGN + {0x8182, 0x2260}, //66 #NOT EQUAL TO + {0x8183, 0xFF1C}, //67 #FULLWIDTH LESS-THAN SIGN + {0x8184, 0xFF1E}, //68 #FULLWIDTH GREATER-THAN SIGN + {0x8185, 0x2266}, //69 #LESS-THAN OVER EQUAL TO + {0x8186, 0x2267}, //70 #GREATER-THAN OVER EQUAL TO + {0x8187, 0x221E}, //71 #INFINITY + {0x8188, 0x2234}, //72 #THEREFORE + {0x8189, 0x2642}, //73 #MALE SIGN + {0x818A, 0x2640}, //74 #FEMALE SIGN + {0x818B, 0x00B0}, //75 #DEGREE SIGN + {0x818C, 0x2032}, //76 #PRIME + {0x818D, 0x2033}, //77 #DOUBLE PRIME + {0x818E, 0x2103}, //78 #DEGREE CELSIUS + {0x818F, 0xFFE5}, //79 #FULLWIDTH YEN SIGN + {0x8190, 0xFF04}, //80 #FULLWIDTH DOLLAR SIGN + {0x8191, 0xFFE0}, //81 #FULLWIDTH CENT SIGN + {0x8192, 0xFFE1}, //82 #FULLWIDTH POUND SIGN + {0x8193, 0xFF05}, //83 #FULLWIDTH PERCENT SIGN + {0x8194, 0xFF03}, //84 #FULLWIDTH NUMBER SIGN + {0x8195, 0xFF06}, //85 #FULLWIDTH AMPERSAND + {0x8196, 0xFF0A}, //86 #FULLWIDTH ASTERISK + {0x8197, 0xFF20}, //87 #FULLWIDTH COMMERCIAL AT + {0x8198, 0x00A7}, //88 #SECTION SIGN + {0x8199, 0x2606}, //89 #WHITE STAR + {0x819A, 0x2605}, //90 #BLACK STAR + {0x819B, 0x25CB}, //91 #WHITE CIRCLE + {0x819C, 0x25CF}, //92 #BLACK CIRCLE + {0x819D, 0x25CE}, //93 #BULLSEYE + {0x819E, 0x25C7}, //94 #WHITE DIAMOND + {0x819F, 0x25C6}, //95 #BLACK DIAMOND + {0x81A0, 0x25A1}, //96 #WHITE SQUARE + {0x81A1, 0x25A0}, //97 #BLACK SQUARE + {0x81A2, 0x25B3}, //98 #WHITE UP-POINTING TRIANGLE + {0x81A3, 0x25B2}, //99 #BLACK UP-POINTING TRIANGLE + {0x81A4, 0x25BD}, //100 #WHITE DOWN-POINTING TRIANGLE + {0x81A5, 0x25BC}, //101 #BLACK DOWN-POINTING TRIANGLE + {0x81A6, 0x203B}, //102 #REFERENCE MARK + {0x81A7, 0x3012}, //103 #POSTAL MARK + {0x81A8, 0x2192}, //104 #RIGHTWARDS ARROW + {0x81A9, 0x2190}, //105 #LEFTWARDS ARROW + {0x81AA, 0x2191}, //106 #UPWARDS ARROW + {0x81AB, 0x2193}, //107 #DOWNWARDS ARROW + {0x81AC, 0x3013}, //108 #GETA MARK + {0x81B8, 0x2208}, //109 #ELEMENT OF + {0x81B9, 0x220B}, //110 #CONTAINS AS MEMBER + {0x81BA, 0x2286}, //111 #SUBSET OF OR EQUAL TO + {0x81BB, 0x2287}, //112 #SUPERSET OF OR EQUAL TO + {0x81BC, 0x2282}, //113 #SUBSET OF + {0x81BD, 0x2283}, //114 #SUPERSET OF + {0x81BE, 0x222A}, //115 #UNION + {0x81BF, 0x2229}, //116 #INTERSECTION + {0x81C8, 0x2227}, //117 #LOGICAL AND + {0x81C9, 0x2228}, //118 #LOGICAL OR + {0x81CA, 0xFFE2}, //119 #FULLWIDTH NOT SIGN + {0x81CB, 0x21D2}, //120 #RIGHTWARDS DOUBLE ARROW + {0x81CC, 0x21D4}, //121 #LEFT RIGHT DOUBLE ARROW + {0x81CD, 0x2200}, //122 #FOR ALL + {0x81CE, 0x2203}, //123 #THERE EXISTS + {0x81DA, 0x2220}, //124 #ANGLE + {0x81DB, 0x22A5}, //125 #UP TACK + {0x81DC, 0x2312}, //126 #ARC + {0x81DD, 0x2202}, //127 #PARTIAL DIFFERENTIAL + {0x81DE, 0x2207}, //128 #NABLA + {0x81DF, 0x2261}, //129 #IDENTICAL TO + {0x81E0, 0x2252}, //130 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0x81E1, 0x226A}, //131 #MUCH LESS-THAN + {0x81E2, 0x226B}, //132 #MUCH GREATER-THAN + {0x81E3, 0x221A}, //133 #SQUARE ROOT + {0x81E4, 0x223D}, //134 #REVERSED TILDE + {0x81E5, 0x221D}, //135 #PROPORTIONAL TO + {0x81E6, 0x2235}, //136 #BECAUSE + {0x81E7, 0x222B}, //137 #INTEGRAL + {0x81E8, 0x222C}, //138 #DOUBLE INTEGRAL + {0x81F0, 0x212B}, //139 #ANGSTROM SIGN + {0x81F1, 0x2030}, //140 #PER MILLE SIGN + {0x81F2, 0x266F}, //141 #MUSIC SHARP SIGN + {0x81F3, 0x266D}, //142 #MUSIC FLAT SIGN + {0x81F4, 0x266A}, //143 #EIGHTH NOTE + {0x81F5, 0x2020}, //144 #DAGGER + {0x81F6, 0x2021}, //145 #DOUBLE DAGGER + {0x81F7, 0x00B6}, //146 #PILCROW SIGN + {0x81FC, 0x25EF}, //147 #LARGE CIRCLE + {0x824F, 0xFF10}, //148 #FULLWIDTH DIGIT ZERO + {0x8250, 0xFF11}, //149 #FULLWIDTH DIGIT ONE + {0x8251, 0xFF12}, //150 #FULLWIDTH DIGIT TWO + {0x8252, 0xFF13}, //151 #FULLWIDTH DIGIT THREE + {0x8253, 0xFF14}, //152 #FULLWIDTH DIGIT FOUR + {0x8254, 0xFF15}, //153 #FULLWIDTH DIGIT FIVE + {0x8255, 0xFF16}, //154 #FULLWIDTH DIGIT SIX + {0x8256, 0xFF17}, //155 #FULLWIDTH DIGIT SEVEN + {0x8257, 0xFF18}, //156 #FULLWIDTH DIGIT EIGHT + {0x8258, 0xFF19}, //157 #FULLWIDTH DIGIT NINE + {0x8260, 0xFF21}, //158 #FULLWIDTH LATIN CAPITAL LETTER A + {0x8261, 0xFF22}, //159 #FULLWIDTH LATIN CAPITAL LETTER B + {0x8262, 0xFF23}, //160 #FULLWIDTH LATIN CAPITAL LETTER C + {0x8263, 0xFF24}, //161 #FULLWIDTH LATIN CAPITAL LETTER D + {0x8264, 0xFF25}, //162 #FULLWIDTH LATIN CAPITAL LETTER E + {0x8265, 0xFF26}, //163 #FULLWIDTH LATIN CAPITAL LETTER F + {0x8266, 0xFF27}, //164 #FULLWIDTH LATIN CAPITAL LETTER G + {0x8267, 0xFF28}, //165 #FULLWIDTH LATIN CAPITAL LETTER H + {0x8268, 0xFF29}, //166 #FULLWIDTH LATIN CAPITAL LETTER I + {0x8269, 0xFF2A}, //167 #FULLWIDTH LATIN CAPITAL LETTER J + {0x826A, 0xFF2B}, //168 #FULLWIDTH LATIN CAPITAL LETTER K + {0x826B, 0xFF2C}, //169 #FULLWIDTH LATIN CAPITAL LETTER L + {0x826C, 0xFF2D}, //170 #FULLWIDTH LATIN CAPITAL LETTER M + {0x826D, 0xFF2E}, //171 #FULLWIDTH LATIN CAPITAL LETTER N + {0x826E, 0xFF2F}, //172 #FULLWIDTH LATIN CAPITAL LETTER O + {0x826F, 0xFF30}, //173 #FULLWIDTH LATIN CAPITAL LETTER P + {0x8270, 0xFF31}, //174 #FULLWIDTH LATIN CAPITAL LETTER Q + {0x8271, 0xFF32}, //175 #FULLWIDTH LATIN CAPITAL LETTER R + {0x8272, 0xFF33}, //176 #FULLWIDTH LATIN CAPITAL LETTER S + {0x8273, 0xFF34}, //177 #FULLWIDTH LATIN CAPITAL LETTER T + {0x8274, 0xFF35}, //178 #FULLWIDTH LATIN CAPITAL LETTER U + {0x8275, 0xFF36}, //179 #FULLWIDTH LATIN CAPITAL LETTER V + {0x8276, 0xFF37}, //180 #FULLWIDTH LATIN CAPITAL LETTER W + {0x8277, 0xFF38}, //181 #FULLWIDTH LATIN CAPITAL LETTER X + {0x8278, 0xFF39}, //182 #FULLWIDTH LATIN CAPITAL LETTER Y + {0x8279, 0xFF3A}, //183 #FULLWIDTH LATIN CAPITAL LETTER Z + {0x8281, 0xFF41}, //184 #FULLWIDTH LATIN SMALL LETTER A + {0x8282, 0xFF42}, //185 #FULLWIDTH LATIN SMALL LETTER B + {0x8283, 0xFF43}, //186 #FULLWIDTH LATIN SMALL LETTER C + {0x8284, 0xFF44}, //187 #FULLWIDTH LATIN SMALL LETTER D + {0x8285, 0xFF45}, //188 #FULLWIDTH LATIN SMALL LETTER E + {0x8286, 0xFF46}, //189 #FULLWIDTH LATIN SMALL LETTER F + {0x8287, 0xFF47}, //190 #FULLWIDTH LATIN SMALL LETTER G + {0x8288, 0xFF48}, //191 #FULLWIDTH LATIN SMALL LETTER H + {0x8289, 0xFF49}, //192 #FULLWIDTH LATIN SMALL LETTER I + {0x828A, 0xFF4A}, //193 #FULLWIDTH LATIN SMALL LETTER J + {0x828B, 0xFF4B}, //194 #FULLWIDTH LATIN SMALL LETTER K + {0x828C, 0xFF4C}, //195 #FULLWIDTH LATIN SMALL LETTER L + {0x828D, 0xFF4D}, //196 #FULLWIDTH LATIN SMALL LETTER M + {0x828E, 0xFF4E}, //197 #FULLWIDTH LATIN SMALL LETTER N + {0x828F, 0xFF4F}, //198 #FULLWIDTH LATIN SMALL LETTER O + {0x8290, 0xFF50}, //199 #FULLWIDTH LATIN SMALL LETTER P + {0x8291, 0xFF51}, //200 #FULLWIDTH LATIN SMALL LETTER Q + {0x8292, 0xFF52}, //201 #FULLWIDTH LATIN SMALL LETTER R + {0x8293, 0xFF53}, //202 #FULLWIDTH LATIN SMALL LETTER S + {0x8294, 0xFF54}, //203 #FULLWIDTH LATIN SMALL LETTER T + {0x8295, 0xFF55}, //204 #FULLWIDTH LATIN SMALL LETTER U + {0x8296, 0xFF56}, //205 #FULLWIDTH LATIN SMALL LETTER V + {0x8297, 0xFF57}, //206 #FULLWIDTH LATIN SMALL LETTER W + {0x8298, 0xFF58}, //207 #FULLWIDTH LATIN SMALL LETTER X + {0x8299, 0xFF59}, //208 #FULLWIDTH LATIN SMALL LETTER Y + {0x829A, 0xFF5A}, //209 #FULLWIDTH LATIN SMALL LETTER Z + {0x829F, 0x3041}, //210 #HIRAGANA LETTER SMALL A + {0x82A0, 0x3042}, //211 #HIRAGANA LETTER A + {0x82A1, 0x3043}, //212 #HIRAGANA LETTER SMALL I + {0x82A2, 0x3044}, //213 #HIRAGANA LETTER I + {0x82A3, 0x3045}, //214 #HIRAGANA LETTER SMALL U + {0x82A4, 0x3046}, //215 #HIRAGANA LETTER U + {0x82A5, 0x3047}, //216 #HIRAGANA LETTER SMALL E + {0x82A6, 0x3048}, //217 #HIRAGANA LETTER E + {0x82A7, 0x3049}, //218 #HIRAGANA LETTER SMALL O + {0x82A8, 0x304A}, //219 #HIRAGANA LETTER O + {0x82A9, 0x304B}, //220 #HIRAGANA LETTER KA + {0x82AA, 0x304C}, //221 #HIRAGANA LETTER GA + {0x82AB, 0x304D}, //222 #HIRAGANA LETTER KI + {0x82AC, 0x304E}, //223 #HIRAGANA LETTER GI + {0x82AD, 0x304F}, //224 #HIRAGANA LETTER KU + {0x82AE, 0x3050}, //225 #HIRAGANA LETTER GU + {0x82AF, 0x3051}, //226 #HIRAGANA LETTER KE + {0x82B0, 0x3052}, //227 #HIRAGANA LETTER GE + {0x82B1, 0x3053}, //228 #HIRAGANA LETTER KO + {0x82B2, 0x3054}, //229 #HIRAGANA LETTER GO + {0x82B3, 0x3055}, //230 #HIRAGANA LETTER SA + {0x82B4, 0x3056}, //231 #HIRAGANA LETTER ZA + {0x82B5, 0x3057}, //232 #HIRAGANA LETTER SI + {0x82B6, 0x3058}, //233 #HIRAGANA LETTER ZI + {0x82B7, 0x3059}, //234 #HIRAGANA LETTER SU + {0x82B8, 0x305A}, //235 #HIRAGANA LETTER ZU + {0x82B9, 0x305B}, //236 #HIRAGANA LETTER SE + {0x82BA, 0x305C}, //237 #HIRAGANA LETTER ZE + {0x82BB, 0x305D}, //238 #HIRAGANA LETTER SO + {0x82BC, 0x305E}, //239 #HIRAGANA LETTER ZO + {0x82BD, 0x305F}, //240 #HIRAGANA LETTER TA + {0x82BE, 0x3060}, //241 #HIRAGANA LETTER DA + {0x82BF, 0x3061}, //242 #HIRAGANA LETTER TI + {0x82C0, 0x3062}, //243 #HIRAGANA LETTER DI + {0x82C1, 0x3063}, //244 #HIRAGANA LETTER SMALL TU + {0x82C2, 0x3064}, //245 #HIRAGANA LETTER TU + {0x82C3, 0x3065}, //246 #HIRAGANA LETTER DU + {0x82C4, 0x3066}, //247 #HIRAGANA LETTER TE + {0x82C5, 0x3067}, //248 #HIRAGANA LETTER DE + {0x82C6, 0x3068}, //249 #HIRAGANA LETTER TO + {0x82C7, 0x3069}, //250 #HIRAGANA LETTER DO + {0x82C8, 0x306A}, //251 #HIRAGANA LETTER NA + {0x82C9, 0x306B}, //252 #HIRAGANA LETTER NI + {0x82CA, 0x306C}, //253 #HIRAGANA LETTER NU + {0x82CB, 0x306D}, //254 #HIRAGANA LETTER NE + {0x82CC, 0x306E}, //255 #HIRAGANA LETTER NO + {0x82CD, 0x306F}, //256 #HIRAGANA LETTER HA + {0x82CE, 0x3070}, //257 #HIRAGANA LETTER BA + {0x82CF, 0x3071}, //258 #HIRAGANA LETTER PA + {0x82D0, 0x3072}, //259 #HIRAGANA LETTER HI + {0x82D1, 0x3073}, //260 #HIRAGANA LETTER BI + {0x82D2, 0x3074}, //261 #HIRAGANA LETTER PI + {0x82D3, 0x3075}, //262 #HIRAGANA LETTER HU + {0x82D4, 0x3076}, //263 #HIRAGANA LETTER BU + {0x82D5, 0x3077}, //264 #HIRAGANA LETTER PU + {0x82D6, 0x3078}, //265 #HIRAGANA LETTER HE + {0x82D7, 0x3079}, //266 #HIRAGANA LETTER BE + {0x82D8, 0x307A}, //267 #HIRAGANA LETTER PE + {0x82D9, 0x307B}, //268 #HIRAGANA LETTER HO + {0x82DA, 0x307C}, //269 #HIRAGANA LETTER BO + {0x82DB, 0x307D}, //270 #HIRAGANA LETTER PO + {0x82DC, 0x307E}, //271 #HIRAGANA LETTER MA + {0x82DD, 0x307F}, //272 #HIRAGANA LETTER MI + {0x82DE, 0x3080}, //273 #HIRAGANA LETTER MU + {0x82DF, 0x3081}, //274 #HIRAGANA LETTER ME + {0x82E0, 0x3082}, //275 #HIRAGANA LETTER MO + {0x82E1, 0x3083}, //276 #HIRAGANA LETTER SMALL YA + {0x82E2, 0x3084}, //277 #HIRAGANA LETTER YA + {0x82E3, 0x3085}, //278 #HIRAGANA LETTER SMALL YU + {0x82E4, 0x3086}, //279 #HIRAGANA LETTER YU + {0x82E5, 0x3087}, //280 #HIRAGANA LETTER SMALL YO + {0x82E6, 0x3088}, //281 #HIRAGANA LETTER YO + {0x82E7, 0x3089}, //282 #HIRAGANA LETTER RA + {0x82E8, 0x308A}, //283 #HIRAGANA LETTER RI + {0x82E9, 0x308B}, //284 #HIRAGANA LETTER RU + {0x82EA, 0x308C}, //285 #HIRAGANA LETTER RE + {0x82EB, 0x308D}, //286 #HIRAGANA LETTER RO + {0x82EC, 0x308E}, //287 #HIRAGANA LETTER SMALL WA + {0x82ED, 0x308F}, //288 #HIRAGANA LETTER WA + {0x82EE, 0x3090}, //289 #HIRAGANA LETTER WI + {0x82EF, 0x3091}, //290 #HIRAGANA LETTER WE + {0x82F0, 0x3092}, //291 #HIRAGANA LETTER WO + {0x82F1, 0x3093}, //292 #HIRAGANA LETTER N + {0x8340, 0x30A1}, //293 #KATAKANA LETTER SMALL A + {0x8341, 0x30A2}, //294 #KATAKANA LETTER A + {0x8342, 0x30A3}, //295 #KATAKANA LETTER SMALL I + {0x8343, 0x30A4}, //296 #KATAKANA LETTER I + {0x8344, 0x30A5}, //297 #KATAKANA LETTER SMALL U + {0x8345, 0x30A6}, //298 #KATAKANA LETTER U + {0x8346, 0x30A7}, //299 #KATAKANA LETTER SMALL E + {0x8347, 0x30A8}, //300 #KATAKANA LETTER E + {0x8348, 0x30A9}, //301 #KATAKANA LETTER SMALL O + {0x8349, 0x30AA}, //302 #KATAKANA LETTER O + {0x834A, 0x30AB}, //303 #KATAKANA LETTER KA + {0x834B, 0x30AC}, //304 #KATAKANA LETTER GA + {0x834C, 0x30AD}, //305 #KATAKANA LETTER KI + {0x834D, 0x30AE}, //306 #KATAKANA LETTER GI + {0x834E, 0x30AF}, //307 #KATAKANA LETTER KU + {0x834F, 0x30B0}, //308 #KATAKANA LETTER GU + {0x8350, 0x30B1}, //309 #KATAKANA LETTER KE + {0x8351, 0x30B2}, //310 #KATAKANA LETTER GE + {0x8352, 0x30B3}, //311 #KATAKANA LETTER KO + {0x8353, 0x30B4}, //312 #KATAKANA LETTER GO + {0x8354, 0x30B5}, //313 #KATAKANA LETTER SA + {0x8355, 0x30B6}, //314 #KATAKANA LETTER ZA + {0x8356, 0x30B7}, //315 #KATAKANA LETTER SI + {0x8357, 0x30B8}, //316 #KATAKANA LETTER ZI + {0x8358, 0x30B9}, //317 #KATAKANA LETTER SU + {0x8359, 0x30BA}, //318 #KATAKANA LETTER ZU + {0x835A, 0x30BB}, //319 #KATAKANA LETTER SE + {0x835B, 0x30BC}, //320 #KATAKANA LETTER ZE + {0x835C, 0x30BD}, //321 #KATAKANA LETTER SO + {0x835D, 0x30BE}, //322 #KATAKANA LETTER ZO + {0x835E, 0x30BF}, //323 #KATAKANA LETTER TA + {0x835F, 0x30C0}, //324 #KATAKANA LETTER DA + {0x8360, 0x30C1}, //325 #KATAKANA LETTER TI + {0x8361, 0x30C2}, //326 #KATAKANA LETTER DI + {0x8362, 0x30C3}, //327 #KATAKANA LETTER SMALL TU + {0x8363, 0x30C4}, //328 #KATAKANA LETTER TU + {0x8364, 0x30C5}, //329 #KATAKANA LETTER DU + {0x8365, 0x30C6}, //330 #KATAKANA LETTER TE + {0x8366, 0x30C7}, //331 #KATAKANA LETTER DE + {0x8367, 0x30C8}, //332 #KATAKANA LETTER TO + {0x8368, 0x30C9}, //333 #KATAKANA LETTER DO + {0x8369, 0x30CA}, //334 #KATAKANA LETTER NA + {0x836A, 0x30CB}, //335 #KATAKANA LETTER NI + {0x836B, 0x30CC}, //336 #KATAKANA LETTER NU + {0x836C, 0x30CD}, //337 #KATAKANA LETTER NE + {0x836D, 0x30CE}, //338 #KATAKANA LETTER NO + {0x836E, 0x30CF}, //339 #KATAKANA LETTER HA + {0x836F, 0x30D0}, //340 #KATAKANA LETTER BA + {0x8370, 0x30D1}, //341 #KATAKANA LETTER PA + {0x8371, 0x30D2}, //342 #KATAKANA LETTER HI + {0x8372, 0x30D3}, //343 #KATAKANA LETTER BI + {0x8373, 0x30D4}, //344 #KATAKANA LETTER PI + {0x8374, 0x30D5}, //345 #KATAKANA LETTER HU + {0x8375, 0x30D6}, //346 #KATAKANA LETTER BU + {0x8376, 0x30D7}, //347 #KATAKANA LETTER PU + {0x8377, 0x30D8}, //348 #KATAKANA LETTER HE + {0x8378, 0x30D9}, //349 #KATAKANA LETTER BE + {0x8379, 0x30DA}, //350 #KATAKANA LETTER PE + {0x837A, 0x30DB}, //351 #KATAKANA LETTER HO + {0x837B, 0x30DC}, //352 #KATAKANA LETTER BO + {0x837C, 0x30DD}, //353 #KATAKANA LETTER PO + {0x837D, 0x30DE}, //354 #KATAKANA LETTER MA + {0x837E, 0x30DF}, //355 #KATAKANA LETTER MI + {0x8380, 0x30E0}, //356 #KATAKANA LETTER MU + {0x8381, 0x30E1}, //357 #KATAKANA LETTER ME + {0x8382, 0x30E2}, //358 #KATAKANA LETTER MO + {0x8383, 0x30E3}, //359 #KATAKANA LETTER SMALL YA + {0x8384, 0x30E4}, //360 #KATAKANA LETTER YA + {0x8385, 0x30E5}, //361 #KATAKANA LETTER SMALL YU + {0x8386, 0x30E6}, //362 #KATAKANA LETTER YU + {0x8387, 0x30E7}, //363 #KATAKANA LETTER SMALL YO + {0x8388, 0x30E8}, //364 #KATAKANA LETTER YO + {0x8389, 0x30E9}, //365 #KATAKANA LETTER RA + {0x838A, 0x30EA}, //366 #KATAKANA LETTER RI + {0x838B, 0x30EB}, //367 #KATAKANA LETTER RU + {0x838C, 0x30EC}, //368 #KATAKANA LETTER RE + {0x838D, 0x30ED}, //369 #KATAKANA LETTER RO + {0x838E, 0x30EE}, //370 #KATAKANA LETTER SMALL WA + {0x838F, 0x30EF}, //371 #KATAKANA LETTER WA + {0x8390, 0x30F0}, //372 #KATAKANA LETTER WI + {0x8391, 0x30F1}, //373 #KATAKANA LETTER WE + {0x8392, 0x30F2}, //374 #KATAKANA LETTER WO + {0x8393, 0x30F3}, //375 #KATAKANA LETTER N + {0x8394, 0x30F4}, //376 #KATAKANA LETTER VU + {0x8395, 0x30F5}, //377 #KATAKANA LETTER SMALL KA + {0x8396, 0x30F6}, //378 #KATAKANA LETTER SMALL KE + {0x839F, 0x0391}, //379 #GREEK CAPITAL LETTER ALPHA + {0x83A0, 0x0392}, //380 #GREEK CAPITAL LETTER BETA + {0x83A1, 0x0393}, //381 #GREEK CAPITAL LETTER GAMMA + {0x83A2, 0x0394}, //382 #GREEK CAPITAL LETTER DELTA + {0x83A3, 0x0395}, //383 #GREEK CAPITAL LETTER EPSILON + {0x83A4, 0x0396}, //384 #GREEK CAPITAL LETTER ZETA + {0x83A5, 0x0397}, //385 #GREEK CAPITAL LETTER ETA + {0x83A6, 0x0398}, //386 #GREEK CAPITAL LETTER THETA + {0x83A7, 0x0399}, //387 #GREEK CAPITAL LETTER IOTA + {0x83A8, 0x039A}, //388 #GREEK CAPITAL LETTER KAPPA + {0x83A9, 0x039B}, //389 #GREEK CAPITAL LETTER LAMDA + {0x83AA, 0x039C}, //390 #GREEK CAPITAL LETTER MU + {0x83AB, 0x039D}, //391 #GREEK CAPITAL LETTER NU + {0x83AC, 0x039E}, //392 #GREEK CAPITAL LETTER XI + {0x83AD, 0x039F}, //393 #GREEK CAPITAL LETTER OMICRON + {0x83AE, 0x03A0}, //394 #GREEK CAPITAL LETTER PI + {0x83AF, 0x03A1}, //395 #GREEK CAPITAL LETTER RHO + {0x83B0, 0x03A3}, //396 #GREEK CAPITAL LETTER SIGMA + {0x83B1, 0x03A4}, //397 #GREEK CAPITAL LETTER TAU + {0x83B2, 0x03A5}, //398 #GREEK CAPITAL LETTER UPSILON + {0x83B3, 0x03A6}, //399 #GREEK CAPITAL LETTER PHI + {0x83B4, 0x03A7}, //400 #GREEK CAPITAL LETTER CHI + {0x83B5, 0x03A8}, //401 #GREEK CAPITAL LETTER PSI + {0x83B6, 0x03A9}, //402 #GREEK CAPITAL LETTER OMEGA + {0x83BF, 0x03B1}, //403 #GREEK SMALL LETTER ALPHA + {0x83C0, 0x03B2}, //404 #GREEK SMALL LETTER BETA + {0x83C1, 0x03B3}, //405 #GREEK SMALL LETTER GAMMA + {0x83C2, 0x03B4}, //406 #GREEK SMALL LETTER DELTA + {0x83C3, 0x03B5}, //407 #GREEK SMALL LETTER EPSILON + {0x83C4, 0x03B6}, //408 #GREEK SMALL LETTER ZETA + {0x83C5, 0x03B7}, //409 #GREEK SMALL LETTER ETA + {0x83C6, 0x03B8}, //410 #GREEK SMALL LETTER THETA + {0x83C7, 0x03B9}, //411 #GREEK SMALL LETTER IOTA + {0x83C8, 0x03BA}, //412 #GREEK SMALL LETTER KAPPA + {0x83C9, 0x03BB}, //413 #GREEK SMALL LETTER LAMDA + {0x83CA, 0x03BC}, //414 #GREEK SMALL LETTER MU + {0x83CB, 0x03BD}, //415 #GREEK SMALL LETTER NU + {0x83CC, 0x03BE}, //416 #GREEK SMALL LETTER XI + {0x83CD, 0x03BF}, //417 #GREEK SMALL LETTER OMICRON + {0x83CE, 0x03C0}, //418 #GREEK SMALL LETTER PI + {0x83CF, 0x03C1}, //419 #GREEK SMALL LETTER RHO + {0x83D0, 0x03C3}, //420 #GREEK SMALL LETTER SIGMA + {0x83D1, 0x03C4}, //421 #GREEK SMALL LETTER TAU + {0x83D2, 0x03C5}, //422 #GREEK SMALL LETTER UPSILON + {0x83D3, 0x03C6}, //423 #GREEK SMALL LETTER PHI + {0x83D4, 0x03C7}, //424 #GREEK SMALL LETTER CHI + {0x83D5, 0x03C8}, //425 #GREEK SMALL LETTER PSI + {0x83D6, 0x03C9}, //426 #GREEK SMALL LETTER OMEGA + {0x8440, 0x0410}, //427 #CYRILLIC CAPITAL LETTER A + {0x8441, 0x0411}, //428 #CYRILLIC CAPITAL LETTER BE + {0x8442, 0x0412}, //429 #CYRILLIC CAPITAL LETTER VE + {0x8443, 0x0413}, //430 #CYRILLIC CAPITAL LETTER GHE + {0x8444, 0x0414}, //431 #CYRILLIC CAPITAL LETTER DE + {0x8445, 0x0415}, //432 #CYRILLIC CAPITAL LETTER IE + {0x8446, 0x0401}, //433 #CYRILLIC CAPITAL LETTER IO + {0x8447, 0x0416}, //434 #CYRILLIC CAPITAL LETTER ZHE + {0x8448, 0x0417}, //435 #CYRILLIC CAPITAL LETTER ZE + {0x8449, 0x0418}, //436 #CYRILLIC CAPITAL LETTER I + {0x844A, 0x0419}, //437 #CYRILLIC CAPITAL LETTER SHORT I + {0x844B, 0x041A}, //438 #CYRILLIC CAPITAL LETTER KA + {0x844C, 0x041B}, //439 #CYRILLIC CAPITAL LETTER EL + {0x844D, 0x041C}, //440 #CYRILLIC CAPITAL LETTER EM + {0x844E, 0x041D}, //441 #CYRILLIC CAPITAL LETTER EN + {0x844F, 0x041E}, //442 #CYRILLIC CAPITAL LETTER O + {0x8450, 0x041F}, //443 #CYRILLIC CAPITAL LETTER PE + {0x8451, 0x0420}, //444 #CYRILLIC CAPITAL LETTER ER + {0x8452, 0x0421}, //445 #CYRILLIC CAPITAL LETTER ES + {0x8453, 0x0422}, //446 #CYRILLIC CAPITAL LETTER TE + {0x8454, 0x0423}, //447 #CYRILLIC CAPITAL LETTER U + {0x8455, 0x0424}, //448 #CYRILLIC CAPITAL LETTER EF + {0x8456, 0x0425}, //449 #CYRILLIC CAPITAL LETTER HA + {0x8457, 0x0426}, //450 #CYRILLIC CAPITAL LETTER TSE + {0x8458, 0x0427}, //451 #CYRILLIC CAPITAL LETTER CHE + {0x8459, 0x0428}, //452 #CYRILLIC CAPITAL LETTER SHA + {0x845A, 0x0429}, //453 #CYRILLIC CAPITAL LETTER SHCHA + {0x845B, 0x042A}, //454 #CYRILLIC CAPITAL LETTER HARD SIGN + {0x845C, 0x042B}, //455 #CYRILLIC CAPITAL LETTER YERU + {0x845D, 0x042C}, //456 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0x845E, 0x042D}, //457 #CYRILLIC CAPITAL LETTER E + {0x845F, 0x042E}, //458 #CYRILLIC CAPITAL LETTER YU + {0x8460, 0x042F}, //459 #CYRILLIC CAPITAL LETTER YA + {0x8470, 0x0430}, //460 #CYRILLIC SMALL LETTER A + {0x8471, 0x0431}, //461 #CYRILLIC SMALL LETTER BE + {0x8472, 0x0432}, //462 #CYRILLIC SMALL LETTER VE + {0x8473, 0x0433}, //463 #CYRILLIC SMALL LETTER GHE + {0x8474, 0x0434}, //464 #CYRILLIC SMALL LETTER DE + {0x8475, 0x0435}, //465 #CYRILLIC SMALL LETTER IE + {0x8476, 0x0451}, //466 #CYRILLIC SMALL LETTER IO + {0x8477, 0x0436}, //467 #CYRILLIC SMALL LETTER ZHE + {0x8478, 0x0437}, //468 #CYRILLIC SMALL LETTER ZE + {0x8479, 0x0438}, //469 #CYRILLIC SMALL LETTER I + {0x847A, 0x0439}, //470 #CYRILLIC SMALL LETTER SHORT I + {0x847B, 0x043A}, //471 #CYRILLIC SMALL LETTER KA + {0x847C, 0x043B}, //472 #CYRILLIC SMALL LETTER EL + {0x847D, 0x043C}, //473 #CYRILLIC SMALL LETTER EM + {0x847E, 0x043D}, //474 #CYRILLIC SMALL LETTER EN + {0x8480, 0x043E}, //475 #CYRILLIC SMALL LETTER O + {0x8481, 0x043F}, //476 #CYRILLIC SMALL LETTER PE + {0x8482, 0x0440}, //477 #CYRILLIC SMALL LETTER ER + {0x8483, 0x0441}, //478 #CYRILLIC SMALL LETTER ES + {0x8484, 0x0442}, //479 #CYRILLIC SMALL LETTER TE + {0x8485, 0x0443}, //480 #CYRILLIC SMALL LETTER U + {0x8486, 0x0444}, //481 #CYRILLIC SMALL LETTER EF + {0x8487, 0x0445}, //482 #CYRILLIC SMALL LETTER HA + {0x8488, 0x0446}, //483 #CYRILLIC SMALL LETTER TSE + {0x8489, 0x0447}, //484 #CYRILLIC SMALL LETTER CHE + {0x848A, 0x0448}, //485 #CYRILLIC SMALL LETTER SHA + {0x848B, 0x0449}, //486 #CYRILLIC SMALL LETTER SHCHA + {0x848C, 0x044A}, //487 #CYRILLIC SMALL LETTER HARD SIGN + {0x848D, 0x044B}, //488 #CYRILLIC SMALL LETTER YERU + {0x848E, 0x044C}, //489 #CYRILLIC SMALL LETTER SOFT SIGN + {0x848F, 0x044D}, //490 #CYRILLIC SMALL LETTER E + {0x8490, 0x044E}, //491 #CYRILLIC SMALL LETTER YU + {0x8491, 0x044F}, //492 #CYRILLIC SMALL LETTER YA + {0x849F, 0x2500}, //493 #BOX DRAWINGS LIGHT HORIZONTAL + {0x84A0, 0x2502}, //494 #BOX DRAWINGS LIGHT VERTICAL + {0x84A1, 0x250C}, //495 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0x84A2, 0x2510}, //496 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0x84A3, 0x2518}, //497 #BOX DRAWINGS LIGHT UP AND LEFT + {0x84A4, 0x2514}, //498 #BOX DRAWINGS LIGHT UP AND RIGHT + {0x84A5, 0x251C}, //499 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0x84A6, 0x252C}, //500 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0x84A7, 0x2524}, //501 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0x84A8, 0x2534}, //502 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0x84A9, 0x253C}, //503 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0x84AA, 0x2501}, //504 #BOX DRAWINGS HEAVY HORIZONTAL + {0x84AB, 0x2503}, //505 #BOX DRAWINGS HEAVY VERTICAL + {0x84AC, 0x250F}, //506 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0x84AD, 0x2513}, //507 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0x84AE, 0x251B}, //508 #BOX DRAWINGS HEAVY UP AND LEFT + {0x84AF, 0x2517}, //509 #BOX DRAWINGS HEAVY UP AND RIGHT + {0x84B0, 0x2523}, //510 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0x84B1, 0x2533}, //511 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0x84B2, 0x252B}, //512 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0x84B3, 0x253B}, //513 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0x84B4, 0x254B}, //514 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0x84B5, 0x2520}, //515 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0x84B6, 0x252F}, //516 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0x84B7, 0x2528}, //517 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0x84B8, 0x2537}, //518 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0x84B9, 0x253F}, //519 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0x84BA, 0x251D}, //520 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0x84BB, 0x2530}, //521 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0x84BC, 0x2525}, //522 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0x84BD, 0x2538}, //523 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0x84BE, 0x2542}, //524 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0x8740, 0x2460}, //525 #CIRCLED DIGIT ONE + {0x8741, 0x2461}, //526 #CIRCLED DIGIT TWO + {0x8742, 0x2462}, //527 #CIRCLED DIGIT THREE + {0x8743, 0x2463}, //528 #CIRCLED DIGIT FOUR + {0x8744, 0x2464}, //529 #CIRCLED DIGIT FIVE + {0x8745, 0x2465}, //530 #CIRCLED DIGIT SIX + {0x8746, 0x2466}, //531 #CIRCLED DIGIT SEVEN + {0x8747, 0x2467}, //532 #CIRCLED DIGIT EIGHT + {0x8748, 0x2468}, //533 #CIRCLED DIGIT NINE + {0x8749, 0x2469}, //534 #CIRCLED NUMBER TEN + {0x874A, 0x246A}, //535 #CIRCLED NUMBER ELEVEN + {0x874B, 0x246B}, //536 #CIRCLED NUMBER TWELVE + {0x874C, 0x246C}, //537 #CIRCLED NUMBER THIRTEEN + {0x874D, 0x246D}, //538 #CIRCLED NUMBER FOURTEEN + {0x874E, 0x246E}, //539 #CIRCLED NUMBER FIFTEEN + {0x874F, 0x246F}, //540 #CIRCLED NUMBER SIXTEEN + {0x8750, 0x2470}, //541 #CIRCLED NUMBER SEVENTEEN + {0x8751, 0x2471}, //542 #CIRCLED NUMBER EIGHTEEN + {0x8752, 0x2472}, //543 #CIRCLED NUMBER NINETEEN + {0x8753, 0x2473}, //544 #CIRCLED NUMBER TWENTY + {0x8754, 0x2160}, //545 #ROMAN NUMERAL ONE + {0x8755, 0x2161}, //546 #ROMAN NUMERAL TWO + {0x8756, 0x2162}, //547 #ROMAN NUMERAL THREE + {0x8757, 0x2163}, //548 #ROMAN NUMERAL FOUR + {0x8758, 0x2164}, //549 #ROMAN NUMERAL FIVE + {0x8759, 0x2165}, //550 #ROMAN NUMERAL SIX + {0x875A, 0x2166}, //551 #ROMAN NUMERAL SEVEN + {0x875B, 0x2167}, //552 #ROMAN NUMERAL EIGHT + {0x875C, 0x2168}, //553 #ROMAN NUMERAL NINE + {0x875D, 0x2169}, //554 #ROMAN NUMERAL TEN + {0x875F, 0x3349}, //555 #SQUARE MIRI + {0x8760, 0x3314}, //556 #SQUARE KIRO + {0x8761, 0x3322}, //557 #SQUARE SENTI + {0x8762, 0x334D}, //558 #SQUARE MEETORU + {0x8763, 0x3318}, //559 #SQUARE GURAMU + {0x8764, 0x3327}, //560 #SQUARE TON + {0x8765, 0x3303}, //561 #SQUARE AARU + {0x8766, 0x3336}, //562 #SQUARE HEKUTAARU + {0x8767, 0x3351}, //563 #SQUARE RITTORU + {0x8768, 0x3357}, //564 #SQUARE WATTO + {0x8769, 0x330D}, //565 #SQUARE KARORII + {0x876A, 0x3326}, //566 #SQUARE DORU + {0x876B, 0x3323}, //567 #SQUARE SENTO + {0x876C, 0x332B}, //568 #SQUARE PAASENTO + {0x876D, 0x334A}, //569 #SQUARE MIRIBAARU + {0x876E, 0x333B}, //570 #SQUARE PEEZI + {0x876F, 0x339C}, //571 #SQUARE MM + {0x8770, 0x339D}, //572 #SQUARE CM + {0x8771, 0x339E}, //573 #SQUARE KM + {0x8772, 0x338E}, //574 #SQUARE MG + {0x8773, 0x338F}, //575 #SQUARE KG + {0x8774, 0x33C4}, //576 #SQUARE CC + {0x8775, 0x33A1}, //577 #SQUARE M SQUARED + {0x877E, 0x337B}, //578 #SQUARE ERA NAME HEISEI + {0x8780, 0x301D}, //579 #REVERSED DOUBLE PRIME QUOTATION MARK + {0x8781, 0x301F}, //580 #LOW DOUBLE PRIME QUOTATION MARK + {0x8782, 0x2116}, //581 #NUMERO SIGN + {0x8783, 0x33CD}, //582 #SQUARE KK + {0x8784, 0x2121}, //583 #TELEPHONE SIGN + {0x8785, 0x32A4}, //584 #CIRCLED IDEOGRAPH HIGH + {0x8786, 0x32A5}, //585 #CIRCLED IDEOGRAPH CENTRE + {0x8787, 0x32A6}, //586 #CIRCLED IDEOGRAPH LOW + {0x8788, 0x32A7}, //587 #CIRCLED IDEOGRAPH LEFT + {0x8789, 0x32A8}, //588 #CIRCLED IDEOGRAPH RIGHT + {0x878A, 0x3231}, //589 #PARENTHESIZED IDEOGRAPH STOCK + {0x878B, 0x3232}, //590 #PARENTHESIZED IDEOGRAPH HAVE + {0x878C, 0x3239}, //591 #PARENTHESIZED IDEOGRAPH REPRESENT + {0x878D, 0x337E}, //592 #SQUARE ERA NAME MEIZI + {0x878E, 0x337D}, //593 #SQUARE ERA NAME TAISYOU + {0x878F, 0x337C}, //594 #SQUARE ERA NAME SYOUWA + {0x8790, 0x2252}, //595 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0x8791, 0x2261}, //596 #IDENTICAL TO + {0x8792, 0x222B}, //597 #INTEGRAL + {0x8793, 0x222E}, //598 #CONTOUR INTEGRAL + {0x8794, 0x2211}, //599 #N-ARY SUMMATION + {0x8795, 0x221A}, //600 #SQUARE ROOT + {0x8796, 0x22A5}, //601 #UP TACK + {0x8797, 0x2220}, //602 #ANGLE + {0x8798, 0x221F}, //603 #RIGHT ANGLE + {0x8799, 0x22BF}, //604 #RIGHT TRIANGLE + {0x879A, 0x2235}, //605 #BECAUSE + {0x879B, 0x2229}, //606 #INTERSECTION + {0x879C, 0x222A}, //607 #UNION + {0x889F, 0x4E9C}, //608 #CJK UNIFIED IDEOGRAPH + {0x88A0, 0x5516}, //609 #CJK UNIFIED IDEOGRAPH + {0x88A1, 0x5A03}, //610 #CJK UNIFIED IDEOGRAPH + {0x88A2, 0x963F}, //611 #CJK UNIFIED IDEOGRAPH + {0x88A3, 0x54C0}, //612 #CJK UNIFIED IDEOGRAPH + {0x88A4, 0x611B}, //613 #CJK UNIFIED IDEOGRAPH + {0x88A5, 0x6328}, //614 #CJK UNIFIED IDEOGRAPH + {0x88A6, 0x59F6}, //615 #CJK UNIFIED IDEOGRAPH + {0x88A7, 0x9022}, //616 #CJK UNIFIED IDEOGRAPH + {0x88A8, 0x8475}, //617 #CJK UNIFIED IDEOGRAPH + {0x88A9, 0x831C}, //618 #CJK UNIFIED IDEOGRAPH + {0x88AA, 0x7A50}, //619 #CJK UNIFIED IDEOGRAPH + {0x88AB, 0x60AA}, //620 #CJK UNIFIED IDEOGRAPH + {0x88AC, 0x63E1}, //621 #CJK UNIFIED IDEOGRAPH + {0x88AD, 0x6E25}, //622 #CJK UNIFIED IDEOGRAPH + {0x88AE, 0x65ED}, //623 #CJK UNIFIED IDEOGRAPH + {0x88AF, 0x8466}, //624 #CJK UNIFIED IDEOGRAPH + {0x88B0, 0x82A6}, //625 #CJK UNIFIED IDEOGRAPH + {0x88B1, 0x9BF5}, //626 #CJK UNIFIED IDEOGRAPH + {0x88B2, 0x6893}, //627 #CJK UNIFIED IDEOGRAPH + {0x88B3, 0x5727}, //628 #CJK UNIFIED IDEOGRAPH + {0x88B4, 0x65A1}, //629 #CJK UNIFIED IDEOGRAPH + {0x88B5, 0x6271}, //630 #CJK UNIFIED IDEOGRAPH + {0x88B6, 0x5B9B}, //631 #CJK UNIFIED IDEOGRAPH + {0x88B7, 0x59D0}, //632 #CJK UNIFIED IDEOGRAPH + {0x88B8, 0x867B}, //633 #CJK UNIFIED IDEOGRAPH + {0x88B9, 0x98F4}, //634 #CJK UNIFIED IDEOGRAPH + {0x88BA, 0x7D62}, //635 #CJK UNIFIED IDEOGRAPH + {0x88BB, 0x7DBE}, //636 #CJK UNIFIED IDEOGRAPH + {0x88BC, 0x9B8E}, //637 #CJK UNIFIED IDEOGRAPH + {0x88BD, 0x6216}, //638 #CJK UNIFIED IDEOGRAPH + {0x88BE, 0x7C9F}, //639 #CJK UNIFIED IDEOGRAPH + {0x88BF, 0x88B7}, //640 #CJK UNIFIED IDEOGRAPH + {0x88C0, 0x5B89}, //641 #CJK UNIFIED IDEOGRAPH + {0x88C1, 0x5EB5}, //642 #CJK UNIFIED IDEOGRAPH + {0x88C2, 0x6309}, //643 #CJK UNIFIED IDEOGRAPH + {0x88C3, 0x6697}, //644 #CJK UNIFIED IDEOGRAPH + {0x88C4, 0x6848}, //645 #CJK UNIFIED IDEOGRAPH + {0x88C5, 0x95C7}, //646 #CJK UNIFIED IDEOGRAPH + {0x88C6, 0x978D}, //647 #CJK UNIFIED IDEOGRAPH + {0x88C7, 0x674F}, //648 #CJK UNIFIED IDEOGRAPH + {0x88C8, 0x4EE5}, //649 #CJK UNIFIED IDEOGRAPH + {0x88C9, 0x4F0A}, //650 #CJK UNIFIED IDEOGRAPH + {0x88CA, 0x4F4D}, //651 #CJK UNIFIED IDEOGRAPH + {0x88CB, 0x4F9D}, //652 #CJK UNIFIED IDEOGRAPH + {0x88CC, 0x5049}, //653 #CJK UNIFIED IDEOGRAPH + {0x88CD, 0x56F2}, //654 #CJK UNIFIED IDEOGRAPH + {0x88CE, 0x5937}, //655 #CJK UNIFIED IDEOGRAPH + {0x88CF, 0x59D4}, //656 #CJK UNIFIED IDEOGRAPH + {0x88D0, 0x5A01}, //657 #CJK UNIFIED IDEOGRAPH + {0x88D1, 0x5C09}, //658 #CJK UNIFIED IDEOGRAPH + {0x88D2, 0x60DF}, //659 #CJK UNIFIED IDEOGRAPH + {0x88D3, 0x610F}, //660 #CJK UNIFIED IDEOGRAPH + {0x88D4, 0x6170}, //661 #CJK UNIFIED IDEOGRAPH + {0x88D5, 0x6613}, //662 #CJK UNIFIED IDEOGRAPH + {0x88D6, 0x6905}, //663 #CJK UNIFIED IDEOGRAPH + {0x88D7, 0x70BA}, //664 #CJK UNIFIED IDEOGRAPH + {0x88D8, 0x754F}, //665 #CJK UNIFIED IDEOGRAPH + {0x88D9, 0x7570}, //666 #CJK UNIFIED IDEOGRAPH + {0x88DA, 0x79FB}, //667 #CJK UNIFIED IDEOGRAPH + {0x88DB, 0x7DAD}, //668 #CJK UNIFIED IDEOGRAPH + {0x88DC, 0x7DEF}, //669 #CJK UNIFIED IDEOGRAPH + {0x88DD, 0x80C3}, //670 #CJK UNIFIED IDEOGRAPH + {0x88DE, 0x840E}, //671 #CJK UNIFIED IDEOGRAPH + {0x88DF, 0x8863}, //672 #CJK UNIFIED IDEOGRAPH + {0x88E0, 0x8B02}, //673 #CJK UNIFIED IDEOGRAPH + {0x88E1, 0x9055}, //674 #CJK UNIFIED IDEOGRAPH + {0x88E2, 0x907A}, //675 #CJK UNIFIED IDEOGRAPH + {0x88E3, 0x533B}, //676 #CJK UNIFIED IDEOGRAPH + {0x88E4, 0x4E95}, //677 #CJK UNIFIED IDEOGRAPH + {0x88E5, 0x4EA5}, //678 #CJK UNIFIED IDEOGRAPH + {0x88E6, 0x57DF}, //679 #CJK UNIFIED IDEOGRAPH + {0x88E7, 0x80B2}, //680 #CJK UNIFIED IDEOGRAPH + {0x88E8, 0x90C1}, //681 #CJK UNIFIED IDEOGRAPH + {0x88E9, 0x78EF}, //682 #CJK UNIFIED IDEOGRAPH + {0x88EA, 0x4E00}, //683 #CJK UNIFIED IDEOGRAPH + {0x88EB, 0x58F1}, //684 #CJK UNIFIED IDEOGRAPH + {0x88EC, 0x6EA2}, //685 #CJK UNIFIED IDEOGRAPH + {0x88ED, 0x9038}, //686 #CJK UNIFIED IDEOGRAPH + {0x88EE, 0x7A32}, //687 #CJK UNIFIED IDEOGRAPH + {0x88EF, 0x8328}, //688 #CJK UNIFIED IDEOGRAPH + {0x88F0, 0x828B}, //689 #CJK UNIFIED IDEOGRAPH + {0x88F1, 0x9C2F}, //690 #CJK UNIFIED IDEOGRAPH + {0x88F2, 0x5141}, //691 #CJK UNIFIED IDEOGRAPH + {0x88F3, 0x5370}, //692 #CJK UNIFIED IDEOGRAPH + {0x88F4, 0x54BD}, //693 #CJK UNIFIED IDEOGRAPH + {0x88F5, 0x54E1}, //694 #CJK UNIFIED IDEOGRAPH + {0x88F6, 0x56E0}, //695 #CJK UNIFIED IDEOGRAPH + {0x88F7, 0x59FB}, //696 #CJK UNIFIED IDEOGRAPH + {0x88F8, 0x5F15}, //697 #CJK UNIFIED IDEOGRAPH + {0x88F9, 0x98F2}, //698 #CJK UNIFIED IDEOGRAPH + {0x88FA, 0x6DEB}, //699 #CJK UNIFIED IDEOGRAPH + {0x88FB, 0x80E4}, //700 #CJK UNIFIED IDEOGRAPH + {0x88FC, 0x852D}, //701 #CJK UNIFIED IDEOGRAPH + {0x8940, 0x9662}, //702 #CJK UNIFIED IDEOGRAPH + {0x8941, 0x9670}, //703 #CJK UNIFIED IDEOGRAPH + {0x8942, 0x96A0}, //704 #CJK UNIFIED IDEOGRAPH + {0x8943, 0x97FB}, //705 #CJK UNIFIED IDEOGRAPH + {0x8944, 0x540B}, //706 #CJK UNIFIED IDEOGRAPH + {0x8945, 0x53F3}, //707 #CJK UNIFIED IDEOGRAPH + {0x8946, 0x5B87}, //708 #CJK UNIFIED IDEOGRAPH + {0x8947, 0x70CF}, //709 #CJK UNIFIED IDEOGRAPH + {0x8948, 0x7FBD}, //710 #CJK UNIFIED IDEOGRAPH + {0x8949, 0x8FC2}, //711 #CJK UNIFIED IDEOGRAPH + {0x894A, 0x96E8}, //712 #CJK UNIFIED IDEOGRAPH + {0x894B, 0x536F}, //713 #CJK UNIFIED IDEOGRAPH + {0x894C, 0x9D5C}, //714 #CJK UNIFIED IDEOGRAPH + {0x894D, 0x7ABA}, //715 #CJK UNIFIED IDEOGRAPH + {0x894E, 0x4E11}, //716 #CJK UNIFIED IDEOGRAPH + {0x894F, 0x7893}, //717 #CJK UNIFIED IDEOGRAPH + {0x8950, 0x81FC}, //718 #CJK UNIFIED IDEOGRAPH + {0x8951, 0x6E26}, //719 #CJK UNIFIED IDEOGRAPH + {0x8952, 0x5618}, //720 #CJK UNIFIED IDEOGRAPH + {0x8953, 0x5504}, //721 #CJK UNIFIED IDEOGRAPH + {0x8954, 0x6B1D}, //722 #CJK UNIFIED IDEOGRAPH + {0x8955, 0x851A}, //723 #CJK UNIFIED IDEOGRAPH + {0x8956, 0x9C3B}, //724 #CJK UNIFIED IDEOGRAPH + {0x8957, 0x59E5}, //725 #CJK UNIFIED IDEOGRAPH + {0x8958, 0x53A9}, //726 #CJK UNIFIED IDEOGRAPH + {0x8959, 0x6D66}, //727 #CJK UNIFIED IDEOGRAPH + {0x895A, 0x74DC}, //728 #CJK UNIFIED IDEOGRAPH + {0x895B, 0x958F}, //729 #CJK UNIFIED IDEOGRAPH + {0x895C, 0x5642}, //730 #CJK UNIFIED IDEOGRAPH + {0x895D, 0x4E91}, //731 #CJK UNIFIED IDEOGRAPH + {0x895E, 0x904B}, //732 #CJK UNIFIED IDEOGRAPH + {0x895F, 0x96F2}, //733 #CJK UNIFIED IDEOGRAPH + {0x8960, 0x834F}, //734 #CJK UNIFIED IDEOGRAPH + {0x8961, 0x990C}, //735 #CJK UNIFIED IDEOGRAPH + {0x8962, 0x53E1}, //736 #CJK UNIFIED IDEOGRAPH + {0x8963, 0x55B6}, //737 #CJK UNIFIED IDEOGRAPH + {0x8964, 0x5B30}, //738 #CJK UNIFIED IDEOGRAPH + {0x8965, 0x5F71}, //739 #CJK UNIFIED IDEOGRAPH + {0x8966, 0x6620}, //740 #CJK UNIFIED IDEOGRAPH + {0x8967, 0x66F3}, //741 #CJK UNIFIED IDEOGRAPH + {0x8968, 0x6804}, //742 #CJK UNIFIED IDEOGRAPH + {0x8969, 0x6C38}, //743 #CJK UNIFIED IDEOGRAPH + {0x896A, 0x6CF3}, //744 #CJK UNIFIED IDEOGRAPH + {0x896B, 0x6D29}, //745 #CJK UNIFIED IDEOGRAPH + {0x896C, 0x745B}, //746 #CJK UNIFIED IDEOGRAPH + {0x896D, 0x76C8}, //747 #CJK UNIFIED IDEOGRAPH + {0x896E, 0x7A4E}, //748 #CJK UNIFIED IDEOGRAPH + {0x896F, 0x9834}, //749 #CJK UNIFIED IDEOGRAPH + {0x8970, 0x82F1}, //750 #CJK UNIFIED IDEOGRAPH + {0x8971, 0x885B}, //751 #CJK UNIFIED IDEOGRAPH + {0x8972, 0x8A60}, //752 #CJK UNIFIED IDEOGRAPH + {0x8973, 0x92ED}, //753 #CJK UNIFIED IDEOGRAPH + {0x8974, 0x6DB2}, //754 #CJK UNIFIED IDEOGRAPH + {0x8975, 0x75AB}, //755 #CJK UNIFIED IDEOGRAPH + {0x8976, 0x76CA}, //756 #CJK UNIFIED IDEOGRAPH + {0x8977, 0x99C5}, //757 #CJK UNIFIED IDEOGRAPH + {0x8978, 0x60A6}, //758 #CJK UNIFIED IDEOGRAPH + {0x8979, 0x8B01}, //759 #CJK UNIFIED IDEOGRAPH + {0x897A, 0x8D8A}, //760 #CJK UNIFIED IDEOGRAPH + {0x897B, 0x95B2}, //761 #CJK UNIFIED IDEOGRAPH + {0x897C, 0x698E}, //762 #CJK UNIFIED IDEOGRAPH + {0x897D, 0x53AD}, //763 #CJK UNIFIED IDEOGRAPH + {0x897E, 0x5186}, //764 #CJK UNIFIED IDEOGRAPH + {0x8980, 0x5712}, //765 #CJK UNIFIED IDEOGRAPH + {0x8981, 0x5830}, //766 #CJK UNIFIED IDEOGRAPH + {0x8982, 0x5944}, //767 #CJK UNIFIED IDEOGRAPH + {0x8983, 0x5BB4}, //768 #CJK UNIFIED IDEOGRAPH + {0x8984, 0x5EF6}, //769 #CJK UNIFIED IDEOGRAPH + {0x8985, 0x6028}, //770 #CJK UNIFIED IDEOGRAPH + {0x8986, 0x63A9}, //771 #CJK UNIFIED IDEOGRAPH + {0x8987, 0x63F4}, //772 #CJK UNIFIED IDEOGRAPH + {0x8988, 0x6CBF}, //773 #CJK UNIFIED IDEOGRAPH + {0x8989, 0x6F14}, //774 #CJK UNIFIED IDEOGRAPH + {0x898A, 0x708E}, //775 #CJK UNIFIED IDEOGRAPH + {0x898B, 0x7114}, //776 #CJK UNIFIED IDEOGRAPH + {0x898C, 0x7159}, //777 #CJK UNIFIED IDEOGRAPH + {0x898D, 0x71D5}, //778 #CJK UNIFIED IDEOGRAPH + {0x898E, 0x733F}, //779 #CJK UNIFIED IDEOGRAPH + {0x898F, 0x7E01}, //780 #CJK UNIFIED IDEOGRAPH + {0x8990, 0x8276}, //781 #CJK UNIFIED IDEOGRAPH + {0x8991, 0x82D1}, //782 #CJK UNIFIED IDEOGRAPH + {0x8992, 0x8597}, //783 #CJK UNIFIED IDEOGRAPH + {0x8993, 0x9060}, //784 #CJK UNIFIED IDEOGRAPH + {0x8994, 0x925B}, //785 #CJK UNIFIED IDEOGRAPH + {0x8995, 0x9D1B}, //786 #CJK UNIFIED IDEOGRAPH + {0x8996, 0x5869}, //787 #CJK UNIFIED IDEOGRAPH + {0x8997, 0x65BC}, //788 #CJK UNIFIED IDEOGRAPH + {0x8998, 0x6C5A}, //789 #CJK UNIFIED IDEOGRAPH + {0x8999, 0x7525}, //790 #CJK UNIFIED IDEOGRAPH + {0x899A, 0x51F9}, //791 #CJK UNIFIED IDEOGRAPH + {0x899B, 0x592E}, //792 #CJK UNIFIED IDEOGRAPH + {0x899C, 0x5965}, //793 #CJK UNIFIED IDEOGRAPH + {0x899D, 0x5F80}, //794 #CJK UNIFIED IDEOGRAPH + {0x899E, 0x5FDC}, //795 #CJK UNIFIED IDEOGRAPH + {0x899F, 0x62BC}, //796 #CJK UNIFIED IDEOGRAPH + {0x89A0, 0x65FA}, //797 #CJK UNIFIED IDEOGRAPH + {0x89A1, 0x6A2A}, //798 #CJK UNIFIED IDEOGRAPH + {0x89A2, 0x6B27}, //799 #CJK UNIFIED IDEOGRAPH + {0x89A3, 0x6BB4}, //800 #CJK UNIFIED IDEOGRAPH + {0x89A4, 0x738B}, //801 #CJK UNIFIED IDEOGRAPH + {0x89A5, 0x7FC1}, //802 #CJK UNIFIED IDEOGRAPH + {0x89A6, 0x8956}, //803 #CJK UNIFIED IDEOGRAPH + {0x89A7, 0x9D2C}, //804 #CJK UNIFIED IDEOGRAPH + {0x89A8, 0x9D0E}, //805 #CJK UNIFIED IDEOGRAPH + {0x89A9, 0x9EC4}, //806 #CJK UNIFIED IDEOGRAPH + {0x89AA, 0x5CA1}, //807 #CJK UNIFIED IDEOGRAPH + {0x89AB, 0x6C96}, //808 #CJK UNIFIED IDEOGRAPH + {0x89AC, 0x837B}, //809 #CJK UNIFIED IDEOGRAPH + {0x89AD, 0x5104}, //810 #CJK UNIFIED IDEOGRAPH + {0x89AE, 0x5C4B}, //811 #CJK UNIFIED IDEOGRAPH + {0x89AF, 0x61B6}, //812 #CJK UNIFIED IDEOGRAPH + {0x89B0, 0x81C6}, //813 #CJK UNIFIED IDEOGRAPH + {0x89B1, 0x6876}, //814 #CJK UNIFIED IDEOGRAPH + {0x89B2, 0x7261}, //815 #CJK UNIFIED IDEOGRAPH + {0x89B3, 0x4E59}, //816 #CJK UNIFIED IDEOGRAPH + {0x89B4, 0x4FFA}, //817 #CJK UNIFIED IDEOGRAPH + {0x89B5, 0x5378}, //818 #CJK UNIFIED IDEOGRAPH + {0x89B6, 0x6069}, //819 #CJK UNIFIED IDEOGRAPH + {0x89B7, 0x6E29}, //820 #CJK UNIFIED IDEOGRAPH + {0x89B8, 0x7A4F}, //821 #CJK UNIFIED IDEOGRAPH + {0x89B9, 0x97F3}, //822 #CJK UNIFIED IDEOGRAPH + {0x89BA, 0x4E0B}, //823 #CJK UNIFIED IDEOGRAPH + {0x89BB, 0x5316}, //824 #CJK UNIFIED IDEOGRAPH + {0x89BC, 0x4EEE}, //825 #CJK UNIFIED IDEOGRAPH + {0x89BD, 0x4F55}, //826 #CJK UNIFIED IDEOGRAPH + {0x89BE, 0x4F3D}, //827 #CJK UNIFIED IDEOGRAPH + {0x89BF, 0x4FA1}, //828 #CJK UNIFIED IDEOGRAPH + {0x89C0, 0x4F73}, //829 #CJK UNIFIED IDEOGRAPH + {0x89C1, 0x52A0}, //830 #CJK UNIFIED IDEOGRAPH + {0x89C2, 0x53EF}, //831 #CJK UNIFIED IDEOGRAPH + {0x89C3, 0x5609}, //832 #CJK UNIFIED IDEOGRAPH + {0x89C4, 0x590F}, //833 #CJK UNIFIED IDEOGRAPH + {0x89C5, 0x5AC1}, //834 #CJK UNIFIED IDEOGRAPH + {0x89C6, 0x5BB6}, //835 #CJK UNIFIED IDEOGRAPH + {0x89C7, 0x5BE1}, //836 #CJK UNIFIED IDEOGRAPH + {0x89C8, 0x79D1}, //837 #CJK UNIFIED IDEOGRAPH + {0x89C9, 0x6687}, //838 #CJK UNIFIED IDEOGRAPH + {0x89CA, 0x679C}, //839 #CJK UNIFIED IDEOGRAPH + {0x89CB, 0x67B6}, //840 #CJK UNIFIED IDEOGRAPH + {0x89CC, 0x6B4C}, //841 #CJK UNIFIED IDEOGRAPH + {0x89CD, 0x6CB3}, //842 #CJK UNIFIED IDEOGRAPH + {0x89CE, 0x706B}, //843 #CJK UNIFIED IDEOGRAPH + {0x89CF, 0x73C2}, //844 #CJK UNIFIED IDEOGRAPH + {0x89D0, 0x798D}, //845 #CJK UNIFIED IDEOGRAPH + {0x89D1, 0x79BE}, //846 #CJK UNIFIED IDEOGRAPH + {0x89D2, 0x7A3C}, //847 #CJK UNIFIED IDEOGRAPH + {0x89D3, 0x7B87}, //848 #CJK UNIFIED IDEOGRAPH + {0x89D4, 0x82B1}, //849 #CJK UNIFIED IDEOGRAPH + {0x89D5, 0x82DB}, //850 #CJK UNIFIED IDEOGRAPH + {0x89D6, 0x8304}, //851 #CJK UNIFIED IDEOGRAPH + {0x89D7, 0x8377}, //852 #CJK UNIFIED IDEOGRAPH + {0x89D8, 0x83EF}, //853 #CJK UNIFIED IDEOGRAPH + {0x89D9, 0x83D3}, //854 #CJK UNIFIED IDEOGRAPH + {0x89DA, 0x8766}, //855 #CJK UNIFIED IDEOGRAPH + {0x89DB, 0x8AB2}, //856 #CJK UNIFIED IDEOGRAPH + {0x89DC, 0x5629}, //857 #CJK UNIFIED IDEOGRAPH + {0x89DD, 0x8CA8}, //858 #CJK UNIFIED IDEOGRAPH + {0x89DE, 0x8FE6}, //859 #CJK UNIFIED IDEOGRAPH + {0x89DF, 0x904E}, //860 #CJK UNIFIED IDEOGRAPH + {0x89E0, 0x971E}, //861 #CJK UNIFIED IDEOGRAPH + {0x89E1, 0x868A}, //862 #CJK UNIFIED IDEOGRAPH + {0x89E2, 0x4FC4}, //863 #CJK UNIFIED IDEOGRAPH + {0x89E3, 0x5CE8}, //864 #CJK UNIFIED IDEOGRAPH + {0x89E4, 0x6211}, //865 #CJK UNIFIED IDEOGRAPH + {0x89E5, 0x7259}, //866 #CJK UNIFIED IDEOGRAPH + {0x89E6, 0x753B}, //867 #CJK UNIFIED IDEOGRAPH + {0x89E7, 0x81E5}, //868 #CJK UNIFIED IDEOGRAPH + {0x89E8, 0x82BD}, //869 #CJK UNIFIED IDEOGRAPH + {0x89E9, 0x86FE}, //870 #CJK UNIFIED IDEOGRAPH + {0x89EA, 0x8CC0}, //871 #CJK UNIFIED IDEOGRAPH + {0x89EB, 0x96C5}, //872 #CJK UNIFIED IDEOGRAPH + {0x89EC, 0x9913}, //873 #CJK UNIFIED IDEOGRAPH + {0x89ED, 0x99D5}, //874 #CJK UNIFIED IDEOGRAPH + {0x89EE, 0x4ECB}, //875 #CJK UNIFIED IDEOGRAPH + {0x89EF, 0x4F1A}, //876 #CJK UNIFIED IDEOGRAPH + {0x89F0, 0x89E3}, //877 #CJK UNIFIED IDEOGRAPH + {0x89F1, 0x56DE}, //878 #CJK UNIFIED IDEOGRAPH + {0x89F2, 0x584A}, //879 #CJK UNIFIED IDEOGRAPH + {0x89F3, 0x58CA}, //880 #CJK UNIFIED IDEOGRAPH + {0x89F4, 0x5EFB}, //881 #CJK UNIFIED IDEOGRAPH + {0x89F5, 0x5FEB}, //882 #CJK UNIFIED IDEOGRAPH + {0x89F6, 0x602A}, //883 #CJK UNIFIED IDEOGRAPH + {0x89F7, 0x6094}, //884 #CJK UNIFIED IDEOGRAPH + {0x89F8, 0x6062}, //885 #CJK UNIFIED IDEOGRAPH + {0x89F9, 0x61D0}, //886 #CJK UNIFIED IDEOGRAPH + {0x89FA, 0x6212}, //887 #CJK UNIFIED IDEOGRAPH + {0x89FB, 0x62D0}, //888 #CJK UNIFIED IDEOGRAPH + {0x89FC, 0x6539}, //889 #CJK UNIFIED IDEOGRAPH + {0x8A40, 0x9B41}, //890 #CJK UNIFIED IDEOGRAPH + {0x8A41, 0x6666}, //891 #CJK UNIFIED IDEOGRAPH + {0x8A42, 0x68B0}, //892 #CJK UNIFIED IDEOGRAPH + {0x8A43, 0x6D77}, //893 #CJK UNIFIED IDEOGRAPH + {0x8A44, 0x7070}, //894 #CJK UNIFIED IDEOGRAPH + {0x8A45, 0x754C}, //895 #CJK UNIFIED IDEOGRAPH + {0x8A46, 0x7686}, //896 #CJK UNIFIED IDEOGRAPH + {0x8A47, 0x7D75}, //897 #CJK UNIFIED IDEOGRAPH + {0x8A48, 0x82A5}, //898 #CJK UNIFIED IDEOGRAPH + {0x8A49, 0x87F9}, //899 #CJK UNIFIED IDEOGRAPH + {0x8A4A, 0x958B}, //900 #CJK UNIFIED IDEOGRAPH + {0x8A4B, 0x968E}, //901 #CJK UNIFIED IDEOGRAPH + {0x8A4C, 0x8C9D}, //902 #CJK UNIFIED IDEOGRAPH + {0x8A4D, 0x51F1}, //903 #CJK UNIFIED IDEOGRAPH + {0x8A4E, 0x52BE}, //904 #CJK UNIFIED IDEOGRAPH + {0x8A4F, 0x5916}, //905 #CJK UNIFIED IDEOGRAPH + {0x8A50, 0x54B3}, //906 #CJK UNIFIED IDEOGRAPH + {0x8A51, 0x5BB3}, //907 #CJK UNIFIED IDEOGRAPH + {0x8A52, 0x5D16}, //908 #CJK UNIFIED IDEOGRAPH + {0x8A53, 0x6168}, //909 #CJK UNIFIED IDEOGRAPH + {0x8A54, 0x6982}, //910 #CJK UNIFIED IDEOGRAPH + {0x8A55, 0x6DAF}, //911 #CJK UNIFIED IDEOGRAPH + {0x8A56, 0x788D}, //912 #CJK UNIFIED IDEOGRAPH + {0x8A57, 0x84CB}, //913 #CJK UNIFIED IDEOGRAPH + {0x8A58, 0x8857}, //914 #CJK UNIFIED IDEOGRAPH + {0x8A59, 0x8A72}, //915 #CJK UNIFIED IDEOGRAPH + {0x8A5A, 0x93A7}, //916 #CJK UNIFIED IDEOGRAPH + {0x8A5B, 0x9AB8}, //917 #CJK UNIFIED IDEOGRAPH + {0x8A5C, 0x6D6C}, //918 #CJK UNIFIED IDEOGRAPH + {0x8A5D, 0x99A8}, //919 #CJK UNIFIED IDEOGRAPH + {0x8A5E, 0x86D9}, //920 #CJK UNIFIED IDEOGRAPH + {0x8A5F, 0x57A3}, //921 #CJK UNIFIED IDEOGRAPH + {0x8A60, 0x67FF}, //922 #CJK UNIFIED IDEOGRAPH + {0x8A61, 0x86CE}, //923 #CJK UNIFIED IDEOGRAPH + {0x8A62, 0x920E}, //924 #CJK UNIFIED IDEOGRAPH + {0x8A63, 0x5283}, //925 #CJK UNIFIED IDEOGRAPH + {0x8A64, 0x5687}, //926 #CJK UNIFIED IDEOGRAPH + {0x8A65, 0x5404}, //927 #CJK UNIFIED IDEOGRAPH + {0x8A66, 0x5ED3}, //928 #CJK UNIFIED IDEOGRAPH + {0x8A67, 0x62E1}, //929 #CJK UNIFIED IDEOGRAPH + {0x8A68, 0x64B9}, //930 #CJK UNIFIED IDEOGRAPH + {0x8A69, 0x683C}, //931 #CJK UNIFIED IDEOGRAPH + {0x8A6A, 0x6838}, //932 #CJK UNIFIED IDEOGRAPH + {0x8A6B, 0x6BBB}, //933 #CJK UNIFIED IDEOGRAPH + {0x8A6C, 0x7372}, //934 #CJK UNIFIED IDEOGRAPH + {0x8A6D, 0x78BA}, //935 #CJK UNIFIED IDEOGRAPH + {0x8A6E, 0x7A6B}, //936 #CJK UNIFIED IDEOGRAPH + {0x8A6F, 0x899A}, //937 #CJK UNIFIED IDEOGRAPH + {0x8A70, 0x89D2}, //938 #CJK UNIFIED IDEOGRAPH + {0x8A71, 0x8D6B}, //939 #CJK UNIFIED IDEOGRAPH + {0x8A72, 0x8F03}, //940 #CJK UNIFIED IDEOGRAPH + {0x8A73, 0x90ED}, //941 #CJK UNIFIED IDEOGRAPH + {0x8A74, 0x95A3}, //942 #CJK UNIFIED IDEOGRAPH + {0x8A75, 0x9694}, //943 #CJK UNIFIED IDEOGRAPH + {0x8A76, 0x9769}, //944 #CJK UNIFIED IDEOGRAPH + {0x8A77, 0x5B66}, //945 #CJK UNIFIED IDEOGRAPH + {0x8A78, 0x5CB3}, //946 #CJK UNIFIED IDEOGRAPH + {0x8A79, 0x697D}, //947 #CJK UNIFIED IDEOGRAPH + {0x8A7A, 0x984D}, //948 #CJK UNIFIED IDEOGRAPH + {0x8A7B, 0x984E}, //949 #CJK UNIFIED IDEOGRAPH + {0x8A7C, 0x639B}, //950 #CJK UNIFIED IDEOGRAPH + {0x8A7D, 0x7B20}, //951 #CJK UNIFIED IDEOGRAPH + {0x8A7E, 0x6A2B}, //952 #CJK UNIFIED IDEOGRAPH + {0x8A80, 0x6A7F}, //953 #CJK UNIFIED IDEOGRAPH + {0x8A81, 0x68B6}, //954 #CJK UNIFIED IDEOGRAPH + {0x8A82, 0x9C0D}, //955 #CJK UNIFIED IDEOGRAPH + {0x8A83, 0x6F5F}, //956 #CJK UNIFIED IDEOGRAPH + {0x8A84, 0x5272}, //957 #CJK UNIFIED IDEOGRAPH + {0x8A85, 0x559D}, //958 #CJK UNIFIED IDEOGRAPH + {0x8A86, 0x6070}, //959 #CJK UNIFIED IDEOGRAPH + {0x8A87, 0x62EC}, //960 #CJK UNIFIED IDEOGRAPH + {0x8A88, 0x6D3B}, //961 #CJK UNIFIED IDEOGRAPH + {0x8A89, 0x6E07}, //962 #CJK UNIFIED IDEOGRAPH + {0x8A8A, 0x6ED1}, //963 #CJK UNIFIED IDEOGRAPH + {0x8A8B, 0x845B}, //964 #CJK UNIFIED IDEOGRAPH + {0x8A8C, 0x8910}, //965 #CJK UNIFIED IDEOGRAPH + {0x8A8D, 0x8F44}, //966 #CJK UNIFIED IDEOGRAPH + {0x8A8E, 0x4E14}, //967 #CJK UNIFIED IDEOGRAPH + {0x8A8F, 0x9C39}, //968 #CJK UNIFIED IDEOGRAPH + {0x8A90, 0x53F6}, //969 #CJK UNIFIED IDEOGRAPH + {0x8A91, 0x691B}, //970 #CJK UNIFIED IDEOGRAPH + {0x8A92, 0x6A3A}, //971 #CJK UNIFIED IDEOGRAPH + {0x8A93, 0x9784}, //972 #CJK UNIFIED IDEOGRAPH + {0x8A94, 0x682A}, //973 #CJK UNIFIED IDEOGRAPH + {0x8A95, 0x515C}, //974 #CJK UNIFIED IDEOGRAPH + {0x8A96, 0x7AC3}, //975 #CJK UNIFIED IDEOGRAPH + {0x8A97, 0x84B2}, //976 #CJK UNIFIED IDEOGRAPH + {0x8A98, 0x91DC}, //977 #CJK UNIFIED IDEOGRAPH + {0x8A99, 0x938C}, //978 #CJK UNIFIED IDEOGRAPH + {0x8A9A, 0x565B}, //979 #CJK UNIFIED IDEOGRAPH + {0x8A9B, 0x9D28}, //980 #CJK UNIFIED IDEOGRAPH + {0x8A9C, 0x6822}, //981 #CJK UNIFIED IDEOGRAPH + {0x8A9D, 0x8305}, //982 #CJK UNIFIED IDEOGRAPH + {0x8A9E, 0x8431}, //983 #CJK UNIFIED IDEOGRAPH + {0x8A9F, 0x7CA5}, //984 #CJK UNIFIED IDEOGRAPH + {0x8AA0, 0x5208}, //985 #CJK UNIFIED IDEOGRAPH + {0x8AA1, 0x82C5}, //986 #CJK UNIFIED IDEOGRAPH + {0x8AA2, 0x74E6}, //987 #CJK UNIFIED IDEOGRAPH + {0x8AA3, 0x4E7E}, //988 #CJK UNIFIED IDEOGRAPH + {0x8AA4, 0x4F83}, //989 #CJK UNIFIED IDEOGRAPH + {0x8AA5, 0x51A0}, //990 #CJK UNIFIED IDEOGRAPH + {0x8AA6, 0x5BD2}, //991 #CJK UNIFIED IDEOGRAPH + {0x8AA7, 0x520A}, //992 #CJK UNIFIED IDEOGRAPH + {0x8AA8, 0x52D8}, //993 #CJK UNIFIED IDEOGRAPH + {0x8AA9, 0x52E7}, //994 #CJK UNIFIED IDEOGRAPH + {0x8AAA, 0x5DFB}, //995 #CJK UNIFIED IDEOGRAPH + {0x8AAB, 0x559A}, //996 #CJK UNIFIED IDEOGRAPH + {0x8AAC, 0x582A}, //997 #CJK UNIFIED IDEOGRAPH + {0x8AAD, 0x59E6}, //998 #CJK UNIFIED IDEOGRAPH + {0x8AAE, 0x5B8C}, //999 #CJK UNIFIED IDEOGRAPH + {0x8AAF, 0x5B98}, //1000 #CJK UNIFIED IDEOGRAPH + {0x8AB0, 0x5BDB}, //1001 #CJK UNIFIED IDEOGRAPH + {0x8AB1, 0x5E72}, //1002 #CJK UNIFIED IDEOGRAPH + {0x8AB2, 0x5E79}, //1003 #CJK UNIFIED IDEOGRAPH + {0x8AB3, 0x60A3}, //1004 #CJK UNIFIED IDEOGRAPH + {0x8AB4, 0x611F}, //1005 #CJK UNIFIED IDEOGRAPH + {0x8AB5, 0x6163}, //1006 #CJK UNIFIED IDEOGRAPH + {0x8AB6, 0x61BE}, //1007 #CJK UNIFIED IDEOGRAPH + {0x8AB7, 0x63DB}, //1008 #CJK UNIFIED IDEOGRAPH + {0x8AB8, 0x6562}, //1009 #CJK UNIFIED IDEOGRAPH + {0x8AB9, 0x67D1}, //1010 #CJK UNIFIED IDEOGRAPH + {0x8ABA, 0x6853}, //1011 #CJK UNIFIED IDEOGRAPH + {0x8ABB, 0x68FA}, //1012 #CJK UNIFIED IDEOGRAPH + {0x8ABC, 0x6B3E}, //1013 #CJK UNIFIED IDEOGRAPH + {0x8ABD, 0x6B53}, //1014 #CJK UNIFIED IDEOGRAPH + {0x8ABE, 0x6C57}, //1015 #CJK UNIFIED IDEOGRAPH + {0x8ABF, 0x6F22}, //1016 #CJK UNIFIED IDEOGRAPH + {0x8AC0, 0x6F97}, //1017 #CJK UNIFIED IDEOGRAPH + {0x8AC1, 0x6F45}, //1018 #CJK UNIFIED IDEOGRAPH + {0x8AC2, 0x74B0}, //1019 #CJK UNIFIED IDEOGRAPH + {0x8AC3, 0x7518}, //1020 #CJK UNIFIED IDEOGRAPH + {0x8AC4, 0x76E3}, //1021 #CJK UNIFIED IDEOGRAPH + {0x8AC5, 0x770B}, //1022 #CJK UNIFIED IDEOGRAPH + {0x8AC6, 0x7AFF}, //1023 #CJK UNIFIED IDEOGRAPH + {0x8AC7, 0x7BA1}, //1024 #CJK UNIFIED IDEOGRAPH + {0x8AC8, 0x7C21}, //1025 #CJK UNIFIED IDEOGRAPH + {0x8AC9, 0x7DE9}, //1026 #CJK UNIFIED IDEOGRAPH + {0x8ACA, 0x7F36}, //1027 #CJK UNIFIED IDEOGRAPH + {0x8ACB, 0x7FF0}, //1028 #CJK UNIFIED IDEOGRAPH + {0x8ACC, 0x809D}, //1029 #CJK UNIFIED IDEOGRAPH + {0x8ACD, 0x8266}, //1030 #CJK UNIFIED IDEOGRAPH + {0x8ACE, 0x839E}, //1031 #CJK UNIFIED IDEOGRAPH + {0x8ACF, 0x89B3}, //1032 #CJK UNIFIED IDEOGRAPH + {0x8AD0, 0x8ACC}, //1033 #CJK UNIFIED IDEOGRAPH + {0x8AD1, 0x8CAB}, //1034 #CJK UNIFIED IDEOGRAPH + {0x8AD2, 0x9084}, //1035 #CJK UNIFIED IDEOGRAPH + {0x8AD3, 0x9451}, //1036 #CJK UNIFIED IDEOGRAPH + {0x8AD4, 0x9593}, //1037 #CJK UNIFIED IDEOGRAPH + {0x8AD5, 0x9591}, //1038 #CJK UNIFIED IDEOGRAPH + {0x8AD6, 0x95A2}, //1039 #CJK UNIFIED IDEOGRAPH + {0x8AD7, 0x9665}, //1040 #CJK UNIFIED IDEOGRAPH + {0x8AD8, 0x97D3}, //1041 #CJK UNIFIED IDEOGRAPH + {0x8AD9, 0x9928}, //1042 #CJK UNIFIED IDEOGRAPH + {0x8ADA, 0x8218}, //1043 #CJK UNIFIED IDEOGRAPH + {0x8ADB, 0x4E38}, //1044 #CJK UNIFIED IDEOGRAPH + {0x8ADC, 0x542B}, //1045 #CJK UNIFIED IDEOGRAPH + {0x8ADD, 0x5CB8}, //1046 #CJK UNIFIED IDEOGRAPH + {0x8ADE, 0x5DCC}, //1047 #CJK UNIFIED IDEOGRAPH + {0x8ADF, 0x73A9}, //1048 #CJK UNIFIED IDEOGRAPH + {0x8AE0, 0x764C}, //1049 #CJK UNIFIED IDEOGRAPH + {0x8AE1, 0x773C}, //1050 #CJK UNIFIED IDEOGRAPH + {0x8AE2, 0x5CA9}, //1051 #CJK UNIFIED IDEOGRAPH + {0x8AE3, 0x7FEB}, //1052 #CJK UNIFIED IDEOGRAPH + {0x8AE4, 0x8D0B}, //1053 #CJK UNIFIED IDEOGRAPH + {0x8AE5, 0x96C1}, //1054 #CJK UNIFIED IDEOGRAPH + {0x8AE6, 0x9811}, //1055 #CJK UNIFIED IDEOGRAPH + {0x8AE7, 0x9854}, //1056 #CJK UNIFIED IDEOGRAPH + {0x8AE8, 0x9858}, //1057 #CJK UNIFIED IDEOGRAPH + {0x8AE9, 0x4F01}, //1058 #CJK UNIFIED IDEOGRAPH + {0x8AEA, 0x4F0E}, //1059 #CJK UNIFIED IDEOGRAPH + {0x8AEB, 0x5371}, //1060 #CJK UNIFIED IDEOGRAPH + {0x8AEC, 0x559C}, //1061 #CJK UNIFIED IDEOGRAPH + {0x8AED, 0x5668}, //1062 #CJK UNIFIED IDEOGRAPH + {0x8AEE, 0x57FA}, //1063 #CJK UNIFIED IDEOGRAPH + {0x8AEF, 0x5947}, //1064 #CJK UNIFIED IDEOGRAPH + {0x8AF0, 0x5B09}, //1065 #CJK UNIFIED IDEOGRAPH + {0x8AF1, 0x5BC4}, //1066 #CJK UNIFIED IDEOGRAPH + {0x8AF2, 0x5C90}, //1067 #CJK UNIFIED IDEOGRAPH + {0x8AF3, 0x5E0C}, //1068 #CJK UNIFIED IDEOGRAPH + {0x8AF4, 0x5E7E}, //1069 #CJK UNIFIED IDEOGRAPH + {0x8AF5, 0x5FCC}, //1070 #CJK UNIFIED IDEOGRAPH + {0x8AF6, 0x63EE}, //1071 #CJK UNIFIED IDEOGRAPH + {0x8AF7, 0x673A}, //1072 #CJK UNIFIED IDEOGRAPH + {0x8AF8, 0x65D7}, //1073 #CJK UNIFIED IDEOGRAPH + {0x8AF9, 0x65E2}, //1074 #CJK UNIFIED IDEOGRAPH + {0x8AFA, 0x671F}, //1075 #CJK UNIFIED IDEOGRAPH + {0x8AFB, 0x68CB}, //1076 #CJK UNIFIED IDEOGRAPH + {0x8AFC, 0x68C4}, //1077 #CJK UNIFIED IDEOGRAPH + {0x8B40, 0x6A5F}, //1078 #CJK UNIFIED IDEOGRAPH + {0x8B41, 0x5E30}, //1079 #CJK UNIFIED IDEOGRAPH + {0x8B42, 0x6BC5}, //1080 #CJK UNIFIED IDEOGRAPH + {0x8B43, 0x6C17}, //1081 #CJK UNIFIED IDEOGRAPH + {0x8B44, 0x6C7D}, //1082 #CJK UNIFIED IDEOGRAPH + {0x8B45, 0x757F}, //1083 #CJK UNIFIED IDEOGRAPH + {0x8B46, 0x7948}, //1084 #CJK UNIFIED IDEOGRAPH + {0x8B47, 0x5B63}, //1085 #CJK UNIFIED IDEOGRAPH + {0x8B48, 0x7A00}, //1086 #CJK UNIFIED IDEOGRAPH + {0x8B49, 0x7D00}, //1087 #CJK UNIFIED IDEOGRAPH + {0x8B4A, 0x5FBD}, //1088 #CJK UNIFIED IDEOGRAPH + {0x8B4B, 0x898F}, //1089 #CJK UNIFIED IDEOGRAPH + {0x8B4C, 0x8A18}, //1090 #CJK UNIFIED IDEOGRAPH + {0x8B4D, 0x8CB4}, //1091 #CJK UNIFIED IDEOGRAPH + {0x8B4E, 0x8D77}, //1092 #CJK UNIFIED IDEOGRAPH + {0x8B4F, 0x8ECC}, //1093 #CJK UNIFIED IDEOGRAPH + {0x8B50, 0x8F1D}, //1094 #CJK UNIFIED IDEOGRAPH + {0x8B51, 0x98E2}, //1095 #CJK UNIFIED IDEOGRAPH + {0x8B52, 0x9A0E}, //1096 #CJK UNIFIED IDEOGRAPH + {0x8B53, 0x9B3C}, //1097 #CJK UNIFIED IDEOGRAPH + {0x8B54, 0x4E80}, //1098 #CJK UNIFIED IDEOGRAPH + {0x8B55, 0x507D}, //1099 #CJK UNIFIED IDEOGRAPH + {0x8B56, 0x5100}, //1100 #CJK UNIFIED IDEOGRAPH + {0x8B57, 0x5993}, //1101 #CJK UNIFIED IDEOGRAPH + {0x8B58, 0x5B9C}, //1102 #CJK UNIFIED IDEOGRAPH + {0x8B59, 0x622F}, //1103 #CJK UNIFIED IDEOGRAPH + {0x8B5A, 0x6280}, //1104 #CJK UNIFIED IDEOGRAPH + {0x8B5B, 0x64EC}, //1105 #CJK UNIFIED IDEOGRAPH + {0x8B5C, 0x6B3A}, //1106 #CJK UNIFIED IDEOGRAPH + {0x8B5D, 0x72A0}, //1107 #CJK UNIFIED IDEOGRAPH + {0x8B5E, 0x7591}, //1108 #CJK UNIFIED IDEOGRAPH + {0x8B5F, 0x7947}, //1109 #CJK UNIFIED IDEOGRAPH + {0x8B60, 0x7FA9}, //1110 #CJK UNIFIED IDEOGRAPH + {0x8B61, 0x87FB}, //1111 #CJK UNIFIED IDEOGRAPH + {0x8B62, 0x8ABC}, //1112 #CJK UNIFIED IDEOGRAPH + {0x8B63, 0x8B70}, //1113 #CJK UNIFIED IDEOGRAPH + {0x8B64, 0x63AC}, //1114 #CJK UNIFIED IDEOGRAPH + {0x8B65, 0x83CA}, //1115 #CJK UNIFIED IDEOGRAPH + {0x8B66, 0x97A0}, //1116 #CJK UNIFIED IDEOGRAPH + {0x8B67, 0x5409}, //1117 #CJK UNIFIED IDEOGRAPH + {0x8B68, 0x5403}, //1118 #CJK UNIFIED IDEOGRAPH + {0x8B69, 0x55AB}, //1119 #CJK UNIFIED IDEOGRAPH + {0x8B6A, 0x6854}, //1120 #CJK UNIFIED IDEOGRAPH + {0x8B6B, 0x6A58}, //1121 #CJK UNIFIED IDEOGRAPH + {0x8B6C, 0x8A70}, //1122 #CJK UNIFIED IDEOGRAPH + {0x8B6D, 0x7827}, //1123 #CJK UNIFIED IDEOGRAPH + {0x8B6E, 0x6775}, //1124 #CJK UNIFIED IDEOGRAPH + {0x8B6F, 0x9ECD}, //1125 #CJK UNIFIED IDEOGRAPH + {0x8B70, 0x5374}, //1126 #CJK UNIFIED IDEOGRAPH + {0x8B71, 0x5BA2}, //1127 #CJK UNIFIED IDEOGRAPH + {0x8B72, 0x811A}, //1128 #CJK UNIFIED IDEOGRAPH + {0x8B73, 0x8650}, //1129 #CJK UNIFIED IDEOGRAPH + {0x8B74, 0x9006}, //1130 #CJK UNIFIED IDEOGRAPH + {0x8B75, 0x4E18}, //1131 #CJK UNIFIED IDEOGRAPH + {0x8B76, 0x4E45}, //1132 #CJK UNIFIED IDEOGRAPH + {0x8B77, 0x4EC7}, //1133 #CJK UNIFIED IDEOGRAPH + {0x8B78, 0x4F11}, //1134 #CJK UNIFIED IDEOGRAPH + {0x8B79, 0x53CA}, //1135 #CJK UNIFIED IDEOGRAPH + {0x8B7A, 0x5438}, //1136 #CJK UNIFIED IDEOGRAPH + {0x8B7B, 0x5BAE}, //1137 #CJK UNIFIED IDEOGRAPH + {0x8B7C, 0x5F13}, //1138 #CJK UNIFIED IDEOGRAPH + {0x8B7D, 0x6025}, //1139 #CJK UNIFIED IDEOGRAPH + {0x8B7E, 0x6551}, //1140 #CJK UNIFIED IDEOGRAPH + {0x8B80, 0x673D}, //1141 #CJK UNIFIED IDEOGRAPH + {0x8B81, 0x6C42}, //1142 #CJK UNIFIED IDEOGRAPH + {0x8B82, 0x6C72}, //1143 #CJK UNIFIED IDEOGRAPH + {0x8B83, 0x6CE3}, //1144 #CJK UNIFIED IDEOGRAPH + {0x8B84, 0x7078}, //1145 #CJK UNIFIED IDEOGRAPH + {0x8B85, 0x7403}, //1146 #CJK UNIFIED IDEOGRAPH + {0x8B86, 0x7A76}, //1147 #CJK UNIFIED IDEOGRAPH + {0x8B87, 0x7AAE}, //1148 #CJK UNIFIED IDEOGRAPH + {0x8B88, 0x7B08}, //1149 #CJK UNIFIED IDEOGRAPH + {0x8B89, 0x7D1A}, //1150 #CJK UNIFIED IDEOGRAPH + {0x8B8A, 0x7CFE}, //1151 #CJK UNIFIED IDEOGRAPH + {0x8B8B, 0x7D66}, //1152 #CJK UNIFIED IDEOGRAPH + {0x8B8C, 0x65E7}, //1153 #CJK UNIFIED IDEOGRAPH + {0x8B8D, 0x725B}, //1154 #CJK UNIFIED IDEOGRAPH + {0x8B8E, 0x53BB}, //1155 #CJK UNIFIED IDEOGRAPH + {0x8B8F, 0x5C45}, //1156 #CJK UNIFIED IDEOGRAPH + {0x8B90, 0x5DE8}, //1157 #CJK UNIFIED IDEOGRAPH + {0x8B91, 0x62D2}, //1158 #CJK UNIFIED IDEOGRAPH + {0x8B92, 0x62E0}, //1159 #CJK UNIFIED IDEOGRAPH + {0x8B93, 0x6319}, //1160 #CJK UNIFIED IDEOGRAPH + {0x8B94, 0x6E20}, //1161 #CJK UNIFIED IDEOGRAPH + {0x8B95, 0x865A}, //1162 #CJK UNIFIED IDEOGRAPH + {0x8B96, 0x8A31}, //1163 #CJK UNIFIED IDEOGRAPH + {0x8B97, 0x8DDD}, //1164 #CJK UNIFIED IDEOGRAPH + {0x8B98, 0x92F8}, //1165 #CJK UNIFIED IDEOGRAPH + {0x8B99, 0x6F01}, //1166 #CJK UNIFIED IDEOGRAPH + {0x8B9A, 0x79A6}, //1167 #CJK UNIFIED IDEOGRAPH + {0x8B9B, 0x9B5A}, //1168 #CJK UNIFIED IDEOGRAPH + {0x8B9C, 0x4EA8}, //1169 #CJK UNIFIED IDEOGRAPH + {0x8B9D, 0x4EAB}, //1170 #CJK UNIFIED IDEOGRAPH + {0x8B9E, 0x4EAC}, //1171 #CJK UNIFIED IDEOGRAPH + {0x8B9F, 0x4F9B}, //1172 #CJK UNIFIED IDEOGRAPH + {0x8BA0, 0x4FA0}, //1173 #CJK UNIFIED IDEOGRAPH + {0x8BA1, 0x50D1}, //1174 #CJK UNIFIED IDEOGRAPH + {0x8BA2, 0x5147}, //1175 #CJK UNIFIED IDEOGRAPH + {0x8BA3, 0x7AF6}, //1176 #CJK UNIFIED IDEOGRAPH + {0x8BA4, 0x5171}, //1177 #CJK UNIFIED IDEOGRAPH + {0x8BA5, 0x51F6}, //1178 #CJK UNIFIED IDEOGRAPH + {0x8BA6, 0x5354}, //1179 #CJK UNIFIED IDEOGRAPH + {0x8BA7, 0x5321}, //1180 #CJK UNIFIED IDEOGRAPH + {0x8BA8, 0x537F}, //1181 #CJK UNIFIED IDEOGRAPH + {0x8BA9, 0x53EB}, //1182 #CJK UNIFIED IDEOGRAPH + {0x8BAA, 0x55AC}, //1183 #CJK UNIFIED IDEOGRAPH + {0x8BAB, 0x5883}, //1184 #CJK UNIFIED IDEOGRAPH + {0x8BAC, 0x5CE1}, //1185 #CJK UNIFIED IDEOGRAPH + {0x8BAD, 0x5F37}, //1186 #CJK UNIFIED IDEOGRAPH + {0x8BAE, 0x5F4A}, //1187 #CJK UNIFIED IDEOGRAPH + {0x8BAF, 0x602F}, //1188 #CJK UNIFIED IDEOGRAPH + {0x8BB0, 0x6050}, //1189 #CJK UNIFIED IDEOGRAPH + {0x8BB1, 0x606D}, //1190 #CJK UNIFIED IDEOGRAPH + {0x8BB2, 0x631F}, //1191 #CJK UNIFIED IDEOGRAPH + {0x8BB3, 0x6559}, //1192 #CJK UNIFIED IDEOGRAPH + {0x8BB4, 0x6A4B}, //1193 #CJK UNIFIED IDEOGRAPH + {0x8BB5, 0x6CC1}, //1194 #CJK UNIFIED IDEOGRAPH + {0x8BB6, 0x72C2}, //1195 #CJK UNIFIED IDEOGRAPH + {0x8BB7, 0x72ED}, //1196 #CJK UNIFIED IDEOGRAPH + {0x8BB8, 0x77EF}, //1197 #CJK UNIFIED IDEOGRAPH + {0x8BB9, 0x80F8}, //1198 #CJK UNIFIED IDEOGRAPH + {0x8BBA, 0x8105}, //1199 #CJK UNIFIED IDEOGRAPH + {0x8BBB, 0x8208}, //1200 #CJK UNIFIED IDEOGRAPH + {0x8BBC, 0x854E}, //1201 #CJK UNIFIED IDEOGRAPH + {0x8BBD, 0x90F7}, //1202 #CJK UNIFIED IDEOGRAPH + {0x8BBE, 0x93E1}, //1203 #CJK UNIFIED IDEOGRAPH + {0x8BBF, 0x97FF}, //1204 #CJK UNIFIED IDEOGRAPH + {0x8BC0, 0x9957}, //1205 #CJK UNIFIED IDEOGRAPH + {0x8BC1, 0x9A5A}, //1206 #CJK UNIFIED IDEOGRAPH + {0x8BC2, 0x4EF0}, //1207 #CJK UNIFIED IDEOGRAPH + {0x8BC3, 0x51DD}, //1208 #CJK UNIFIED IDEOGRAPH + {0x8BC4, 0x5C2D}, //1209 #CJK UNIFIED IDEOGRAPH + {0x8BC5, 0x6681}, //1210 #CJK UNIFIED IDEOGRAPH + {0x8BC6, 0x696D}, //1211 #CJK UNIFIED IDEOGRAPH + {0x8BC7, 0x5C40}, //1212 #CJK UNIFIED IDEOGRAPH + {0x8BC8, 0x66F2}, //1213 #CJK UNIFIED IDEOGRAPH + {0x8BC9, 0x6975}, //1214 #CJK UNIFIED IDEOGRAPH + {0x8BCA, 0x7389}, //1215 #CJK UNIFIED IDEOGRAPH + {0x8BCB, 0x6850}, //1216 #CJK UNIFIED IDEOGRAPH + {0x8BCC, 0x7C81}, //1217 #CJK UNIFIED IDEOGRAPH + {0x8BCD, 0x50C5}, //1218 #CJK UNIFIED IDEOGRAPH + {0x8BCE, 0x52E4}, //1219 #CJK UNIFIED IDEOGRAPH + {0x8BCF, 0x5747}, //1220 #CJK UNIFIED IDEOGRAPH + {0x8BD0, 0x5DFE}, //1221 #CJK UNIFIED IDEOGRAPH + {0x8BD1, 0x9326}, //1222 #CJK UNIFIED IDEOGRAPH + {0x8BD2, 0x65A4}, //1223 #CJK UNIFIED IDEOGRAPH + {0x8BD3, 0x6B23}, //1224 #CJK UNIFIED IDEOGRAPH + {0x8BD4, 0x6B3D}, //1225 #CJK UNIFIED IDEOGRAPH + {0x8BD5, 0x7434}, //1226 #CJK UNIFIED IDEOGRAPH + {0x8BD6, 0x7981}, //1227 #CJK UNIFIED IDEOGRAPH + {0x8BD7, 0x79BD}, //1228 #CJK UNIFIED IDEOGRAPH + {0x8BD8, 0x7B4B}, //1229 #CJK UNIFIED IDEOGRAPH + {0x8BD9, 0x7DCA}, //1230 #CJK UNIFIED IDEOGRAPH + {0x8BDA, 0x82B9}, //1231 #CJK UNIFIED IDEOGRAPH + {0x8BDB, 0x83CC}, //1232 #CJK UNIFIED IDEOGRAPH + {0x8BDC, 0x887F}, //1233 #CJK UNIFIED IDEOGRAPH + {0x8BDD, 0x895F}, //1234 #CJK UNIFIED IDEOGRAPH + {0x8BDE, 0x8B39}, //1235 #CJK UNIFIED IDEOGRAPH + {0x8BDF, 0x8FD1}, //1236 #CJK UNIFIED IDEOGRAPH + {0x8BE0, 0x91D1}, //1237 #CJK UNIFIED IDEOGRAPH + {0x8BE1, 0x541F}, //1238 #CJK UNIFIED IDEOGRAPH + {0x8BE2, 0x9280}, //1239 #CJK UNIFIED IDEOGRAPH + {0x8BE3, 0x4E5D}, //1240 #CJK UNIFIED IDEOGRAPH + {0x8BE4, 0x5036}, //1241 #CJK UNIFIED IDEOGRAPH + {0x8BE5, 0x53E5}, //1242 #CJK UNIFIED IDEOGRAPH + {0x8BE6, 0x533A}, //1243 #CJK UNIFIED IDEOGRAPH + {0x8BE7, 0x72D7}, //1244 #CJK UNIFIED IDEOGRAPH + {0x8BE8, 0x7396}, //1245 #CJK UNIFIED IDEOGRAPH + {0x8BE9, 0x77E9}, //1246 #CJK UNIFIED IDEOGRAPH + {0x8BEA, 0x82E6}, //1247 #CJK UNIFIED IDEOGRAPH + {0x8BEB, 0x8EAF}, //1248 #CJK UNIFIED IDEOGRAPH + {0x8BEC, 0x99C6}, //1249 #CJK UNIFIED IDEOGRAPH + {0x8BED, 0x99C8}, //1250 #CJK UNIFIED IDEOGRAPH + {0x8BEE, 0x99D2}, //1251 #CJK UNIFIED IDEOGRAPH + {0x8BEF, 0x5177}, //1252 #CJK UNIFIED IDEOGRAPH + {0x8BF0, 0x611A}, //1253 #CJK UNIFIED IDEOGRAPH + {0x8BF1, 0x865E}, //1254 #CJK UNIFIED IDEOGRAPH + {0x8BF2, 0x55B0}, //1255 #CJK UNIFIED IDEOGRAPH + {0x8BF3, 0x7A7A}, //1256 #CJK UNIFIED IDEOGRAPH + {0x8BF4, 0x5076}, //1257 #CJK UNIFIED IDEOGRAPH + {0x8BF5, 0x5BD3}, //1258 #CJK UNIFIED IDEOGRAPH + {0x8BF6, 0x9047}, //1259 #CJK UNIFIED IDEOGRAPH + {0x8BF7, 0x9685}, //1260 #CJK UNIFIED IDEOGRAPH + {0x8BF8, 0x4E32}, //1261 #CJK UNIFIED IDEOGRAPH + {0x8BF9, 0x6ADB}, //1262 #CJK UNIFIED IDEOGRAPH + {0x8BFA, 0x91E7}, //1263 #CJK UNIFIED IDEOGRAPH + {0x8BFB, 0x5C51}, //1264 #CJK UNIFIED IDEOGRAPH + {0x8BFC, 0x5C48}, //1265 #CJK UNIFIED IDEOGRAPH + {0x8C40, 0x6398}, //1266 #CJK UNIFIED IDEOGRAPH + {0x8C41, 0x7A9F}, //1267 #CJK UNIFIED IDEOGRAPH + {0x8C42, 0x6C93}, //1268 #CJK UNIFIED IDEOGRAPH + {0x8C43, 0x9774}, //1269 #CJK UNIFIED IDEOGRAPH + {0x8C44, 0x8F61}, //1270 #CJK UNIFIED IDEOGRAPH + {0x8C45, 0x7AAA}, //1271 #CJK UNIFIED IDEOGRAPH + {0x8C46, 0x718A}, //1272 #CJK UNIFIED IDEOGRAPH + {0x8C47, 0x9688}, //1273 #CJK UNIFIED IDEOGRAPH + {0x8C48, 0x7C82}, //1274 #CJK UNIFIED IDEOGRAPH + {0x8C49, 0x6817}, //1275 #CJK UNIFIED IDEOGRAPH + {0x8C4A, 0x7E70}, //1276 #CJK UNIFIED IDEOGRAPH + {0x8C4B, 0x6851}, //1277 #CJK UNIFIED IDEOGRAPH + {0x8C4C, 0x936C}, //1278 #CJK UNIFIED IDEOGRAPH + {0x8C4D, 0x52F2}, //1279 #CJK UNIFIED IDEOGRAPH + {0x8C4E, 0x541B}, //1280 #CJK UNIFIED IDEOGRAPH + {0x8C4F, 0x85AB}, //1281 #CJK UNIFIED IDEOGRAPH + {0x8C50, 0x8A13}, //1282 #CJK UNIFIED IDEOGRAPH + {0x8C51, 0x7FA4}, //1283 #CJK UNIFIED IDEOGRAPH + {0x8C52, 0x8ECD}, //1284 #CJK UNIFIED IDEOGRAPH + {0x8C53, 0x90E1}, //1285 #CJK UNIFIED IDEOGRAPH + {0x8C54, 0x5366}, //1286 #CJK UNIFIED IDEOGRAPH + {0x8C55, 0x8888}, //1287 #CJK UNIFIED IDEOGRAPH + {0x8C56, 0x7941}, //1288 #CJK UNIFIED IDEOGRAPH + {0x8C57, 0x4FC2}, //1289 #CJK UNIFIED IDEOGRAPH + {0x8C58, 0x50BE}, //1290 #CJK UNIFIED IDEOGRAPH + {0x8C59, 0x5211}, //1291 #CJK UNIFIED IDEOGRAPH + {0x8C5A, 0x5144}, //1292 #CJK UNIFIED IDEOGRAPH + {0x8C5B, 0x5553}, //1293 #CJK UNIFIED IDEOGRAPH + {0x8C5C, 0x572D}, //1294 #CJK UNIFIED IDEOGRAPH + {0x8C5D, 0x73EA}, //1295 #CJK UNIFIED IDEOGRAPH + {0x8C5E, 0x578B}, //1296 #CJK UNIFIED IDEOGRAPH + {0x8C5F, 0x5951}, //1297 #CJK UNIFIED IDEOGRAPH + {0x8C60, 0x5F62}, //1298 #CJK UNIFIED IDEOGRAPH + {0x8C61, 0x5F84}, //1299 #CJK UNIFIED IDEOGRAPH + {0x8C62, 0x6075}, //1300 #CJK UNIFIED IDEOGRAPH + {0x8C63, 0x6176}, //1301 #CJK UNIFIED IDEOGRAPH + {0x8C64, 0x6167}, //1302 #CJK UNIFIED IDEOGRAPH + {0x8C65, 0x61A9}, //1303 #CJK UNIFIED IDEOGRAPH + {0x8C66, 0x63B2}, //1304 #CJK UNIFIED IDEOGRAPH + {0x8C67, 0x643A}, //1305 #CJK UNIFIED IDEOGRAPH + {0x8C68, 0x656C}, //1306 #CJK UNIFIED IDEOGRAPH + {0x8C69, 0x666F}, //1307 #CJK UNIFIED IDEOGRAPH + {0x8C6A, 0x6842}, //1308 #CJK UNIFIED IDEOGRAPH + {0x8C6B, 0x6E13}, //1309 #CJK UNIFIED IDEOGRAPH + {0x8C6C, 0x7566}, //1310 #CJK UNIFIED IDEOGRAPH + {0x8C6D, 0x7A3D}, //1311 #CJK UNIFIED IDEOGRAPH + {0x8C6E, 0x7CFB}, //1312 #CJK UNIFIED IDEOGRAPH + {0x8C6F, 0x7D4C}, //1313 #CJK UNIFIED IDEOGRAPH + {0x8C70, 0x7D99}, //1314 #CJK UNIFIED IDEOGRAPH + {0x8C71, 0x7E4B}, //1315 #CJK UNIFIED IDEOGRAPH + {0x8C72, 0x7F6B}, //1316 #CJK UNIFIED IDEOGRAPH + {0x8C73, 0x830E}, //1317 #CJK UNIFIED IDEOGRAPH + {0x8C74, 0x834A}, //1318 #CJK UNIFIED IDEOGRAPH + {0x8C75, 0x86CD}, //1319 #CJK UNIFIED IDEOGRAPH + {0x8C76, 0x8A08}, //1320 #CJK UNIFIED IDEOGRAPH + {0x8C77, 0x8A63}, //1321 #CJK UNIFIED IDEOGRAPH + {0x8C78, 0x8B66}, //1322 #CJK UNIFIED IDEOGRAPH + {0x8C79, 0x8EFD}, //1323 #CJK UNIFIED IDEOGRAPH + {0x8C7A, 0x981A}, //1324 #CJK UNIFIED IDEOGRAPH + {0x8C7B, 0x9D8F}, //1325 #CJK UNIFIED IDEOGRAPH + {0x8C7C, 0x82B8}, //1326 #CJK UNIFIED IDEOGRAPH + {0x8C7D, 0x8FCE}, //1327 #CJK UNIFIED IDEOGRAPH + {0x8C7E, 0x9BE8}, //1328 #CJK UNIFIED IDEOGRAPH + {0x8C80, 0x5287}, //1329 #CJK UNIFIED IDEOGRAPH + {0x8C81, 0x621F}, //1330 #CJK UNIFIED IDEOGRAPH + {0x8C82, 0x6483}, //1331 #CJK UNIFIED IDEOGRAPH + {0x8C83, 0x6FC0}, //1332 #CJK UNIFIED IDEOGRAPH + {0x8C84, 0x9699}, //1333 #CJK UNIFIED IDEOGRAPH + {0x8C85, 0x6841}, //1334 #CJK UNIFIED IDEOGRAPH + {0x8C86, 0x5091}, //1335 #CJK UNIFIED IDEOGRAPH + {0x8C87, 0x6B20}, //1336 #CJK UNIFIED IDEOGRAPH + {0x8C88, 0x6C7A}, //1337 #CJK UNIFIED IDEOGRAPH + {0x8C89, 0x6F54}, //1338 #CJK UNIFIED IDEOGRAPH + {0x8C8A, 0x7A74}, //1339 #CJK UNIFIED IDEOGRAPH + {0x8C8B, 0x7D50}, //1340 #CJK UNIFIED IDEOGRAPH + {0x8C8C, 0x8840}, //1341 #CJK UNIFIED IDEOGRAPH + {0x8C8D, 0x8A23}, //1342 #CJK UNIFIED IDEOGRAPH + {0x8C8E, 0x6708}, //1343 #CJK UNIFIED IDEOGRAPH + {0x8C8F, 0x4EF6}, //1344 #CJK UNIFIED IDEOGRAPH + {0x8C90, 0x5039}, //1345 #CJK UNIFIED IDEOGRAPH + {0x8C91, 0x5026}, //1346 #CJK UNIFIED IDEOGRAPH + {0x8C92, 0x5065}, //1347 #CJK UNIFIED IDEOGRAPH + {0x8C93, 0x517C}, //1348 #CJK UNIFIED IDEOGRAPH + {0x8C94, 0x5238}, //1349 #CJK UNIFIED IDEOGRAPH + {0x8C95, 0x5263}, //1350 #CJK UNIFIED IDEOGRAPH + {0x8C96, 0x55A7}, //1351 #CJK UNIFIED IDEOGRAPH + {0x8C97, 0x570F}, //1352 #CJK UNIFIED IDEOGRAPH + {0x8C98, 0x5805}, //1353 #CJK UNIFIED IDEOGRAPH + {0x8C99, 0x5ACC}, //1354 #CJK UNIFIED IDEOGRAPH + {0x8C9A, 0x5EFA}, //1355 #CJK UNIFIED IDEOGRAPH + {0x8C9B, 0x61B2}, //1356 #CJK UNIFIED IDEOGRAPH + {0x8C9C, 0x61F8}, //1357 #CJK UNIFIED IDEOGRAPH + {0x8C9D, 0x62F3}, //1358 #CJK UNIFIED IDEOGRAPH + {0x8C9E, 0x6372}, //1359 #CJK UNIFIED IDEOGRAPH + {0x8C9F, 0x691C}, //1360 #CJK UNIFIED IDEOGRAPH + {0x8CA0, 0x6A29}, //1361 #CJK UNIFIED IDEOGRAPH + {0x8CA1, 0x727D}, //1362 #CJK UNIFIED IDEOGRAPH + {0x8CA2, 0x72AC}, //1363 #CJK UNIFIED IDEOGRAPH + {0x8CA3, 0x732E}, //1364 #CJK UNIFIED IDEOGRAPH + {0x8CA4, 0x7814}, //1365 #CJK UNIFIED IDEOGRAPH + {0x8CA5, 0x786F}, //1366 #CJK UNIFIED IDEOGRAPH + {0x8CA6, 0x7D79}, //1367 #CJK UNIFIED IDEOGRAPH + {0x8CA7, 0x770C}, //1368 #CJK UNIFIED IDEOGRAPH + {0x8CA8, 0x80A9}, //1369 #CJK UNIFIED IDEOGRAPH + {0x8CA9, 0x898B}, //1370 #CJK UNIFIED IDEOGRAPH + {0x8CAA, 0x8B19}, //1371 #CJK UNIFIED IDEOGRAPH + {0x8CAB, 0x8CE2}, //1372 #CJK UNIFIED IDEOGRAPH + {0x8CAC, 0x8ED2}, //1373 #CJK UNIFIED IDEOGRAPH + {0x8CAD, 0x9063}, //1374 #CJK UNIFIED IDEOGRAPH + {0x8CAE, 0x9375}, //1375 #CJK UNIFIED IDEOGRAPH + {0x8CAF, 0x967A}, //1376 #CJK UNIFIED IDEOGRAPH + {0x8CB0, 0x9855}, //1377 #CJK UNIFIED IDEOGRAPH + {0x8CB1, 0x9A13}, //1378 #CJK UNIFIED IDEOGRAPH + {0x8CB2, 0x9E78}, //1379 #CJK UNIFIED IDEOGRAPH + {0x8CB3, 0x5143}, //1380 #CJK UNIFIED IDEOGRAPH + {0x8CB4, 0x539F}, //1381 #CJK UNIFIED IDEOGRAPH + {0x8CB5, 0x53B3}, //1382 #CJK UNIFIED IDEOGRAPH + {0x8CB6, 0x5E7B}, //1383 #CJK UNIFIED IDEOGRAPH + {0x8CB7, 0x5F26}, //1384 #CJK UNIFIED IDEOGRAPH + {0x8CB8, 0x6E1B}, //1385 #CJK UNIFIED IDEOGRAPH + {0x8CB9, 0x6E90}, //1386 #CJK UNIFIED IDEOGRAPH + {0x8CBA, 0x7384}, //1387 #CJK UNIFIED IDEOGRAPH + {0x8CBB, 0x73FE}, //1388 #CJK UNIFIED IDEOGRAPH + {0x8CBC, 0x7D43}, //1389 #CJK UNIFIED IDEOGRAPH + {0x8CBD, 0x8237}, //1390 #CJK UNIFIED IDEOGRAPH + {0x8CBE, 0x8A00}, //1391 #CJK UNIFIED IDEOGRAPH + {0x8CBF, 0x8AFA}, //1392 #CJK UNIFIED IDEOGRAPH + {0x8CC0, 0x9650}, //1393 #CJK UNIFIED IDEOGRAPH + {0x8CC1, 0x4E4E}, //1394 #CJK UNIFIED IDEOGRAPH + {0x8CC2, 0x500B}, //1395 #CJK UNIFIED IDEOGRAPH + {0x8CC3, 0x53E4}, //1396 #CJK UNIFIED IDEOGRAPH + {0x8CC4, 0x547C}, //1397 #CJK UNIFIED IDEOGRAPH + {0x8CC5, 0x56FA}, //1398 #CJK UNIFIED IDEOGRAPH + {0x8CC6, 0x59D1}, //1399 #CJK UNIFIED IDEOGRAPH + {0x8CC7, 0x5B64}, //1400 #CJK UNIFIED IDEOGRAPH + {0x8CC8, 0x5DF1}, //1401 #CJK UNIFIED IDEOGRAPH + {0x8CC9, 0x5EAB}, //1402 #CJK UNIFIED IDEOGRAPH + {0x8CCA, 0x5F27}, //1403 #CJK UNIFIED IDEOGRAPH + {0x8CCB, 0x6238}, //1404 #CJK UNIFIED IDEOGRAPH + {0x8CCC, 0x6545}, //1405 #CJK UNIFIED IDEOGRAPH + {0x8CCD, 0x67AF}, //1406 #CJK UNIFIED IDEOGRAPH + {0x8CCE, 0x6E56}, //1407 #CJK UNIFIED IDEOGRAPH + {0x8CCF, 0x72D0}, //1408 #CJK UNIFIED IDEOGRAPH + {0x8CD0, 0x7CCA}, //1409 #CJK UNIFIED IDEOGRAPH + {0x8CD1, 0x88B4}, //1410 #CJK UNIFIED IDEOGRAPH + {0x8CD2, 0x80A1}, //1411 #CJK UNIFIED IDEOGRAPH + {0x8CD3, 0x80E1}, //1412 #CJK UNIFIED IDEOGRAPH + {0x8CD4, 0x83F0}, //1413 #CJK UNIFIED IDEOGRAPH + {0x8CD5, 0x864E}, //1414 #CJK UNIFIED IDEOGRAPH + {0x8CD6, 0x8A87}, //1415 #CJK UNIFIED IDEOGRAPH + {0x8CD7, 0x8DE8}, //1416 #CJK UNIFIED IDEOGRAPH + {0x8CD8, 0x9237}, //1417 #CJK UNIFIED IDEOGRAPH + {0x8CD9, 0x96C7}, //1418 #CJK UNIFIED IDEOGRAPH + {0x8CDA, 0x9867}, //1419 #CJK UNIFIED IDEOGRAPH + {0x8CDB, 0x9F13}, //1420 #CJK UNIFIED IDEOGRAPH + {0x8CDC, 0x4E94}, //1421 #CJK UNIFIED IDEOGRAPH + {0x8CDD, 0x4E92}, //1422 #CJK UNIFIED IDEOGRAPH + {0x8CDE, 0x4F0D}, //1423 #CJK UNIFIED IDEOGRAPH + {0x8CDF, 0x5348}, //1424 #CJK UNIFIED IDEOGRAPH + {0x8CE0, 0x5449}, //1425 #CJK UNIFIED IDEOGRAPH + {0x8CE1, 0x543E}, //1426 #CJK UNIFIED IDEOGRAPH + {0x8CE2, 0x5A2F}, //1427 #CJK UNIFIED IDEOGRAPH + {0x8CE3, 0x5F8C}, //1428 #CJK UNIFIED IDEOGRAPH + {0x8CE4, 0x5FA1}, //1429 #CJK UNIFIED IDEOGRAPH + {0x8CE5, 0x609F}, //1430 #CJK UNIFIED IDEOGRAPH + {0x8CE6, 0x68A7}, //1431 #CJK UNIFIED IDEOGRAPH + {0x8CE7, 0x6A8E}, //1432 #CJK UNIFIED IDEOGRAPH + {0x8CE8, 0x745A}, //1433 #CJK UNIFIED IDEOGRAPH + {0x8CE9, 0x7881}, //1434 #CJK UNIFIED IDEOGRAPH + {0x8CEA, 0x8A9E}, //1435 #CJK UNIFIED IDEOGRAPH + {0x8CEB, 0x8AA4}, //1436 #CJK UNIFIED IDEOGRAPH + {0x8CEC, 0x8B77}, //1437 #CJK UNIFIED IDEOGRAPH + {0x8CED, 0x9190}, //1438 #CJK UNIFIED IDEOGRAPH + {0x8CEE, 0x4E5E}, //1439 #CJK UNIFIED IDEOGRAPH + {0x8CEF, 0x9BC9}, //1440 #CJK UNIFIED IDEOGRAPH + {0x8CF0, 0x4EA4}, //1441 #CJK UNIFIED IDEOGRAPH + {0x8CF1, 0x4F7C}, //1442 #CJK UNIFIED IDEOGRAPH + {0x8CF2, 0x4FAF}, //1443 #CJK UNIFIED IDEOGRAPH + {0x8CF3, 0x5019}, //1444 #CJK UNIFIED IDEOGRAPH + {0x8CF4, 0x5016}, //1445 #CJK UNIFIED IDEOGRAPH + {0x8CF5, 0x5149}, //1446 #CJK UNIFIED IDEOGRAPH + {0x8CF6, 0x516C}, //1447 #CJK UNIFIED IDEOGRAPH + {0x8CF7, 0x529F}, //1448 #CJK UNIFIED IDEOGRAPH + {0x8CF8, 0x52B9}, //1449 #CJK UNIFIED IDEOGRAPH + {0x8CF9, 0x52FE}, //1450 #CJK UNIFIED IDEOGRAPH + {0x8CFA, 0x539A}, //1451 #CJK UNIFIED IDEOGRAPH + {0x8CFB, 0x53E3}, //1452 #CJK UNIFIED IDEOGRAPH + {0x8CFC, 0x5411}, //1453 #CJK UNIFIED IDEOGRAPH + {0x8D40, 0x540E}, //1454 #CJK UNIFIED IDEOGRAPH + {0x8D41, 0x5589}, //1455 #CJK UNIFIED IDEOGRAPH + {0x8D42, 0x5751}, //1456 #CJK UNIFIED IDEOGRAPH + {0x8D43, 0x57A2}, //1457 #CJK UNIFIED IDEOGRAPH + {0x8D44, 0x597D}, //1458 #CJK UNIFIED IDEOGRAPH + {0x8D45, 0x5B54}, //1459 #CJK UNIFIED IDEOGRAPH + {0x8D46, 0x5B5D}, //1460 #CJK UNIFIED IDEOGRAPH + {0x8D47, 0x5B8F}, //1461 #CJK UNIFIED IDEOGRAPH + {0x8D48, 0x5DE5}, //1462 #CJK UNIFIED IDEOGRAPH + {0x8D49, 0x5DE7}, //1463 #CJK UNIFIED IDEOGRAPH + {0x8D4A, 0x5DF7}, //1464 #CJK UNIFIED IDEOGRAPH + {0x8D4B, 0x5E78}, //1465 #CJK UNIFIED IDEOGRAPH + {0x8D4C, 0x5E83}, //1466 #CJK UNIFIED IDEOGRAPH + {0x8D4D, 0x5E9A}, //1467 #CJK UNIFIED IDEOGRAPH + {0x8D4E, 0x5EB7}, //1468 #CJK UNIFIED IDEOGRAPH + {0x8D4F, 0x5F18}, //1469 #CJK UNIFIED IDEOGRAPH + {0x8D50, 0x6052}, //1470 #CJK UNIFIED IDEOGRAPH + {0x8D51, 0x614C}, //1471 #CJK UNIFIED IDEOGRAPH + {0x8D52, 0x6297}, //1472 #CJK UNIFIED IDEOGRAPH + {0x8D53, 0x62D8}, //1473 #CJK UNIFIED IDEOGRAPH + {0x8D54, 0x63A7}, //1474 #CJK UNIFIED IDEOGRAPH + {0x8D55, 0x653B}, //1475 #CJK UNIFIED IDEOGRAPH + {0x8D56, 0x6602}, //1476 #CJK UNIFIED IDEOGRAPH + {0x8D57, 0x6643}, //1477 #CJK UNIFIED IDEOGRAPH + {0x8D58, 0x66F4}, //1478 #CJK UNIFIED IDEOGRAPH + {0x8D59, 0x676D}, //1479 #CJK UNIFIED IDEOGRAPH + {0x8D5A, 0x6821}, //1480 #CJK UNIFIED IDEOGRAPH + {0x8D5B, 0x6897}, //1481 #CJK UNIFIED IDEOGRAPH + {0x8D5C, 0x69CB}, //1482 #CJK UNIFIED IDEOGRAPH + {0x8D5D, 0x6C5F}, //1483 #CJK UNIFIED IDEOGRAPH + {0x8D5E, 0x6D2A}, //1484 #CJK UNIFIED IDEOGRAPH + {0x8D5F, 0x6D69}, //1485 #CJK UNIFIED IDEOGRAPH + {0x8D60, 0x6E2F}, //1486 #CJK UNIFIED IDEOGRAPH + {0x8D61, 0x6E9D}, //1487 #CJK UNIFIED IDEOGRAPH + {0x8D62, 0x7532}, //1488 #CJK UNIFIED IDEOGRAPH + {0x8D63, 0x7687}, //1489 #CJK UNIFIED IDEOGRAPH + {0x8D64, 0x786C}, //1490 #CJK UNIFIED IDEOGRAPH + {0x8D65, 0x7A3F}, //1491 #CJK UNIFIED IDEOGRAPH + {0x8D66, 0x7CE0}, //1492 #CJK UNIFIED IDEOGRAPH + {0x8D67, 0x7D05}, //1493 #CJK UNIFIED IDEOGRAPH + {0x8D68, 0x7D18}, //1494 #CJK UNIFIED IDEOGRAPH + {0x8D69, 0x7D5E}, //1495 #CJK UNIFIED IDEOGRAPH + {0x8D6A, 0x7DB1}, //1496 #CJK UNIFIED IDEOGRAPH + {0x8D6B, 0x8015}, //1497 #CJK UNIFIED IDEOGRAPH + {0x8D6C, 0x8003}, //1498 #CJK UNIFIED IDEOGRAPH + {0x8D6D, 0x80AF}, //1499 #CJK UNIFIED IDEOGRAPH + {0x8D6E, 0x80B1}, //1500 #CJK UNIFIED IDEOGRAPH + {0x8D6F, 0x8154}, //1501 #CJK UNIFIED IDEOGRAPH + {0x8D70, 0x818F}, //1502 #CJK UNIFIED IDEOGRAPH + {0x8D71, 0x822A}, //1503 #CJK UNIFIED IDEOGRAPH + {0x8D72, 0x8352}, //1504 #CJK UNIFIED IDEOGRAPH + {0x8D73, 0x884C}, //1505 #CJK UNIFIED IDEOGRAPH + {0x8D74, 0x8861}, //1506 #CJK UNIFIED IDEOGRAPH + {0x8D75, 0x8B1B}, //1507 #CJK UNIFIED IDEOGRAPH + {0x8D76, 0x8CA2}, //1508 #CJK UNIFIED IDEOGRAPH + {0x8D77, 0x8CFC}, //1509 #CJK UNIFIED IDEOGRAPH + {0x8D78, 0x90CA}, //1510 #CJK UNIFIED IDEOGRAPH + {0x8D79, 0x9175}, //1511 #CJK UNIFIED IDEOGRAPH + {0x8D7A, 0x9271}, //1512 #CJK UNIFIED IDEOGRAPH + {0x8D7B, 0x783F}, //1513 #CJK UNIFIED IDEOGRAPH + {0x8D7C, 0x92FC}, //1514 #CJK UNIFIED IDEOGRAPH + {0x8D7D, 0x95A4}, //1515 #CJK UNIFIED IDEOGRAPH + {0x8D7E, 0x964D}, //1516 #CJK UNIFIED IDEOGRAPH + {0x8D80, 0x9805}, //1517 #CJK UNIFIED IDEOGRAPH + {0x8D81, 0x9999}, //1518 #CJK UNIFIED IDEOGRAPH + {0x8D82, 0x9AD8}, //1519 #CJK UNIFIED IDEOGRAPH + {0x8D83, 0x9D3B}, //1520 #CJK UNIFIED IDEOGRAPH + {0x8D84, 0x525B}, //1521 #CJK UNIFIED IDEOGRAPH + {0x8D85, 0x52AB}, //1522 #CJK UNIFIED IDEOGRAPH + {0x8D86, 0x53F7}, //1523 #CJK UNIFIED IDEOGRAPH + {0x8D87, 0x5408}, //1524 #CJK UNIFIED IDEOGRAPH + {0x8D88, 0x58D5}, //1525 #CJK UNIFIED IDEOGRAPH + {0x8D89, 0x62F7}, //1526 #CJK UNIFIED IDEOGRAPH + {0x8D8A, 0x6FE0}, //1527 #CJK UNIFIED IDEOGRAPH + {0x8D8B, 0x8C6A}, //1528 #CJK UNIFIED IDEOGRAPH + {0x8D8C, 0x8F5F}, //1529 #CJK UNIFIED IDEOGRAPH + {0x8D8D, 0x9EB9}, //1530 #CJK UNIFIED IDEOGRAPH + {0x8D8E, 0x514B}, //1531 #CJK UNIFIED IDEOGRAPH + {0x8D8F, 0x523B}, //1532 #CJK UNIFIED IDEOGRAPH + {0x8D90, 0x544A}, //1533 #CJK UNIFIED IDEOGRAPH + {0x8D91, 0x56FD}, //1534 #CJK UNIFIED IDEOGRAPH + {0x8D92, 0x7A40}, //1535 #CJK UNIFIED IDEOGRAPH + {0x8D93, 0x9177}, //1536 #CJK UNIFIED IDEOGRAPH + {0x8D94, 0x9D60}, //1537 #CJK UNIFIED IDEOGRAPH + {0x8D95, 0x9ED2}, //1538 #CJK UNIFIED IDEOGRAPH + {0x8D96, 0x7344}, //1539 #CJK UNIFIED IDEOGRAPH + {0x8D97, 0x6F09}, //1540 #CJK UNIFIED IDEOGRAPH + {0x8D98, 0x8170}, //1541 #CJK UNIFIED IDEOGRAPH + {0x8D99, 0x7511}, //1542 #CJK UNIFIED IDEOGRAPH + {0x8D9A, 0x5FFD}, //1543 #CJK UNIFIED IDEOGRAPH + {0x8D9B, 0x60DA}, //1544 #CJK UNIFIED IDEOGRAPH + {0x8D9C, 0x9AA8}, //1545 #CJK UNIFIED IDEOGRAPH + {0x8D9D, 0x72DB}, //1546 #CJK UNIFIED IDEOGRAPH + {0x8D9E, 0x8FBC}, //1547 #CJK UNIFIED IDEOGRAPH + {0x8D9F, 0x6B64}, //1548 #CJK UNIFIED IDEOGRAPH + {0x8DA0, 0x9803}, //1549 #CJK UNIFIED IDEOGRAPH + {0x8DA1, 0x4ECA}, //1550 #CJK UNIFIED IDEOGRAPH + {0x8DA2, 0x56F0}, //1551 #CJK UNIFIED IDEOGRAPH + {0x8DA3, 0x5764}, //1552 #CJK UNIFIED IDEOGRAPH + {0x8DA4, 0x58BE}, //1553 #CJK UNIFIED IDEOGRAPH + {0x8DA5, 0x5A5A}, //1554 #CJK UNIFIED IDEOGRAPH + {0x8DA6, 0x6068}, //1555 #CJK UNIFIED IDEOGRAPH + {0x8DA7, 0x61C7}, //1556 #CJK UNIFIED IDEOGRAPH + {0x8DA8, 0x660F}, //1557 #CJK UNIFIED IDEOGRAPH + {0x8DA9, 0x6606}, //1558 #CJK UNIFIED IDEOGRAPH + {0x8DAA, 0x6839}, //1559 #CJK UNIFIED IDEOGRAPH + {0x8DAB, 0x68B1}, //1560 #CJK UNIFIED IDEOGRAPH + {0x8DAC, 0x6DF7}, //1561 #CJK UNIFIED IDEOGRAPH + {0x8DAD, 0x75D5}, //1562 #CJK UNIFIED IDEOGRAPH + {0x8DAE, 0x7D3A}, //1563 #CJK UNIFIED IDEOGRAPH + {0x8DAF, 0x826E}, //1564 #CJK UNIFIED IDEOGRAPH + {0x8DB0, 0x9B42}, //1565 #CJK UNIFIED IDEOGRAPH + {0x8DB1, 0x4E9B}, //1566 #CJK UNIFIED IDEOGRAPH + {0x8DB2, 0x4F50}, //1567 #CJK UNIFIED IDEOGRAPH + {0x8DB3, 0x53C9}, //1568 #CJK UNIFIED IDEOGRAPH + {0x8DB4, 0x5506}, //1569 #CJK UNIFIED IDEOGRAPH + {0x8DB5, 0x5D6F}, //1570 #CJK UNIFIED IDEOGRAPH + {0x8DB6, 0x5DE6}, //1571 #CJK UNIFIED IDEOGRAPH + {0x8DB7, 0x5DEE}, //1572 #CJK UNIFIED IDEOGRAPH + {0x8DB8, 0x67FB}, //1573 #CJK UNIFIED IDEOGRAPH + {0x8DB9, 0x6C99}, //1574 #CJK UNIFIED IDEOGRAPH + {0x8DBA, 0x7473}, //1575 #CJK UNIFIED IDEOGRAPH + {0x8DBB, 0x7802}, //1576 #CJK UNIFIED IDEOGRAPH + {0x8DBC, 0x8A50}, //1577 #CJK UNIFIED IDEOGRAPH + {0x8DBD, 0x9396}, //1578 #CJK UNIFIED IDEOGRAPH + {0x8DBE, 0x88DF}, //1579 #CJK UNIFIED IDEOGRAPH + {0x8DBF, 0x5750}, //1580 #CJK UNIFIED IDEOGRAPH + {0x8DC0, 0x5EA7}, //1581 #CJK UNIFIED IDEOGRAPH + {0x8DC1, 0x632B}, //1582 #CJK UNIFIED IDEOGRAPH + {0x8DC2, 0x50B5}, //1583 #CJK UNIFIED IDEOGRAPH + {0x8DC3, 0x50AC}, //1584 #CJK UNIFIED IDEOGRAPH + {0x8DC4, 0x518D}, //1585 #CJK UNIFIED IDEOGRAPH + {0x8DC5, 0x6700}, //1586 #CJK UNIFIED IDEOGRAPH + {0x8DC6, 0x54C9}, //1587 #CJK UNIFIED IDEOGRAPH + {0x8DC7, 0x585E}, //1588 #CJK UNIFIED IDEOGRAPH + {0x8DC8, 0x59BB}, //1589 #CJK UNIFIED IDEOGRAPH + {0x8DC9, 0x5BB0}, //1590 #CJK UNIFIED IDEOGRAPH + {0x8DCA, 0x5F69}, //1591 #CJK UNIFIED IDEOGRAPH + {0x8DCB, 0x624D}, //1592 #CJK UNIFIED IDEOGRAPH + {0x8DCC, 0x63A1}, //1593 #CJK UNIFIED IDEOGRAPH + {0x8DCD, 0x683D}, //1594 #CJK UNIFIED IDEOGRAPH + {0x8DCE, 0x6B73}, //1595 #CJK UNIFIED IDEOGRAPH + {0x8DCF, 0x6E08}, //1596 #CJK UNIFIED IDEOGRAPH + {0x8DD0, 0x707D}, //1597 #CJK UNIFIED IDEOGRAPH + {0x8DD1, 0x91C7}, //1598 #CJK UNIFIED IDEOGRAPH + {0x8DD2, 0x7280}, //1599 #CJK UNIFIED IDEOGRAPH + {0x8DD3, 0x7815}, //1600 #CJK UNIFIED IDEOGRAPH + {0x8DD4, 0x7826}, //1601 #CJK UNIFIED IDEOGRAPH + {0x8DD5, 0x796D}, //1602 #CJK UNIFIED IDEOGRAPH + {0x8DD6, 0x658E}, //1603 #CJK UNIFIED IDEOGRAPH + {0x8DD7, 0x7D30}, //1604 #CJK UNIFIED IDEOGRAPH + {0x8DD8, 0x83DC}, //1605 #CJK UNIFIED IDEOGRAPH + {0x8DD9, 0x88C1}, //1606 #CJK UNIFIED IDEOGRAPH + {0x8DDA, 0x8F09}, //1607 #CJK UNIFIED IDEOGRAPH + {0x8DDB, 0x969B}, //1608 #CJK UNIFIED IDEOGRAPH + {0x8DDC, 0x5264}, //1609 #CJK UNIFIED IDEOGRAPH + {0x8DDD, 0x5728}, //1610 #CJK UNIFIED IDEOGRAPH + {0x8DDE, 0x6750}, //1611 #CJK UNIFIED IDEOGRAPH + {0x8DDF, 0x7F6A}, //1612 #CJK UNIFIED IDEOGRAPH + {0x8DE0, 0x8CA1}, //1613 #CJK UNIFIED IDEOGRAPH + {0x8DE1, 0x51B4}, //1614 #CJK UNIFIED IDEOGRAPH + {0x8DE2, 0x5742}, //1615 #CJK UNIFIED IDEOGRAPH + {0x8DE3, 0x962A}, //1616 #CJK UNIFIED IDEOGRAPH + {0x8DE4, 0x583A}, //1617 #CJK UNIFIED IDEOGRAPH + {0x8DE5, 0x698A}, //1618 #CJK UNIFIED IDEOGRAPH + {0x8DE6, 0x80B4}, //1619 #CJK UNIFIED IDEOGRAPH + {0x8DE7, 0x54B2}, //1620 #CJK UNIFIED IDEOGRAPH + {0x8DE8, 0x5D0E}, //1621 #CJK UNIFIED IDEOGRAPH + {0x8DE9, 0x57FC}, //1622 #CJK UNIFIED IDEOGRAPH + {0x8DEA, 0x7895}, //1623 #CJK UNIFIED IDEOGRAPH + {0x8DEB, 0x9DFA}, //1624 #CJK UNIFIED IDEOGRAPH + {0x8DEC, 0x4F5C}, //1625 #CJK UNIFIED IDEOGRAPH + {0x8DED, 0x524A}, //1626 #CJK UNIFIED IDEOGRAPH + {0x8DEE, 0x548B}, //1627 #CJK UNIFIED IDEOGRAPH + {0x8DEF, 0x643E}, //1628 #CJK UNIFIED IDEOGRAPH + {0x8DF0, 0x6628}, //1629 #CJK UNIFIED IDEOGRAPH + {0x8DF1, 0x6714}, //1630 #CJK UNIFIED IDEOGRAPH + {0x8DF2, 0x67F5}, //1631 #CJK UNIFIED IDEOGRAPH + {0x8DF3, 0x7A84}, //1632 #CJK UNIFIED IDEOGRAPH + {0x8DF4, 0x7B56}, //1633 #CJK UNIFIED IDEOGRAPH + {0x8DF5, 0x7D22}, //1634 #CJK UNIFIED IDEOGRAPH + {0x8DF6, 0x932F}, //1635 #CJK UNIFIED IDEOGRAPH + {0x8DF7, 0x685C}, //1636 #CJK UNIFIED IDEOGRAPH + {0x8DF8, 0x9BAD}, //1637 #CJK UNIFIED IDEOGRAPH + {0x8DF9, 0x7B39}, //1638 #CJK UNIFIED IDEOGRAPH + {0x8DFA, 0x5319}, //1639 #CJK UNIFIED IDEOGRAPH + {0x8DFB, 0x518A}, //1640 #CJK UNIFIED IDEOGRAPH + {0x8DFC, 0x5237}, //1641 #CJK UNIFIED IDEOGRAPH + {0x8E40, 0x5BDF}, //1642 #CJK UNIFIED IDEOGRAPH + {0x8E41, 0x62F6}, //1643 #CJK UNIFIED IDEOGRAPH + {0x8E42, 0x64AE}, //1644 #CJK UNIFIED IDEOGRAPH + {0x8E43, 0x64E6}, //1645 #CJK UNIFIED IDEOGRAPH + {0x8E44, 0x672D}, //1646 #CJK UNIFIED IDEOGRAPH + {0x8E45, 0x6BBA}, //1647 #CJK UNIFIED IDEOGRAPH + {0x8E46, 0x85A9}, //1648 #CJK UNIFIED IDEOGRAPH + {0x8E47, 0x96D1}, //1649 #CJK UNIFIED IDEOGRAPH + {0x8E48, 0x7690}, //1650 #CJK UNIFIED IDEOGRAPH + {0x8E49, 0x9BD6}, //1651 #CJK UNIFIED IDEOGRAPH + {0x8E4A, 0x634C}, //1652 #CJK UNIFIED IDEOGRAPH + {0x8E4B, 0x9306}, //1653 #CJK UNIFIED IDEOGRAPH + {0x8E4C, 0x9BAB}, //1654 #CJK UNIFIED IDEOGRAPH + {0x8E4D, 0x76BF}, //1655 #CJK UNIFIED IDEOGRAPH + {0x8E4E, 0x6652}, //1656 #CJK UNIFIED IDEOGRAPH + {0x8E4F, 0x4E09}, //1657 #CJK UNIFIED IDEOGRAPH + {0x8E50, 0x5098}, //1658 #CJK UNIFIED IDEOGRAPH + {0x8E51, 0x53C2}, //1659 #CJK UNIFIED IDEOGRAPH + {0x8E52, 0x5C71}, //1660 #CJK UNIFIED IDEOGRAPH + {0x8E53, 0x60E8}, //1661 #CJK UNIFIED IDEOGRAPH + {0x8E54, 0x6492}, //1662 #CJK UNIFIED IDEOGRAPH + {0x8E55, 0x6563}, //1663 #CJK UNIFIED IDEOGRAPH + {0x8E56, 0x685F}, //1664 #CJK UNIFIED IDEOGRAPH + {0x8E57, 0x71E6}, //1665 #CJK UNIFIED IDEOGRAPH + {0x8E58, 0x73CA}, //1666 #CJK UNIFIED IDEOGRAPH + {0x8E59, 0x7523}, //1667 #CJK UNIFIED IDEOGRAPH + {0x8E5A, 0x7B97}, //1668 #CJK UNIFIED IDEOGRAPH + {0x8E5B, 0x7E82}, //1669 #CJK UNIFIED IDEOGRAPH + {0x8E5C, 0x8695}, //1670 #CJK UNIFIED IDEOGRAPH + {0x8E5D, 0x8B83}, //1671 #CJK UNIFIED IDEOGRAPH + {0x8E5E, 0x8CDB}, //1672 #CJK UNIFIED IDEOGRAPH + {0x8E5F, 0x9178}, //1673 #CJK UNIFIED IDEOGRAPH + {0x8E60, 0x9910}, //1674 #CJK UNIFIED IDEOGRAPH + {0x8E61, 0x65AC}, //1675 #CJK UNIFIED IDEOGRAPH + {0x8E62, 0x66AB}, //1676 #CJK UNIFIED IDEOGRAPH + {0x8E63, 0x6B8B}, //1677 #CJK UNIFIED IDEOGRAPH + {0x8E64, 0x4ED5}, //1678 #CJK UNIFIED IDEOGRAPH + {0x8E65, 0x4ED4}, //1679 #CJK UNIFIED IDEOGRAPH + {0x8E66, 0x4F3A}, //1680 #CJK UNIFIED IDEOGRAPH + {0x8E67, 0x4F7F}, //1681 #CJK UNIFIED IDEOGRAPH + {0x8E68, 0x523A}, //1682 #CJK UNIFIED IDEOGRAPH + {0x8E69, 0x53F8}, //1683 #CJK UNIFIED IDEOGRAPH + {0x8E6A, 0x53F2}, //1684 #CJK UNIFIED IDEOGRAPH + {0x8E6B, 0x55E3}, //1685 #CJK UNIFIED IDEOGRAPH + {0x8E6C, 0x56DB}, //1686 #CJK UNIFIED IDEOGRAPH + {0x8E6D, 0x58EB}, //1687 #CJK UNIFIED IDEOGRAPH + {0x8E6E, 0x59CB}, //1688 #CJK UNIFIED IDEOGRAPH + {0x8E6F, 0x59C9}, //1689 #CJK UNIFIED IDEOGRAPH + {0x8E70, 0x59FF}, //1690 #CJK UNIFIED IDEOGRAPH + {0x8E71, 0x5B50}, //1691 #CJK UNIFIED IDEOGRAPH + {0x8E72, 0x5C4D}, //1692 #CJK UNIFIED IDEOGRAPH + {0x8E73, 0x5E02}, //1693 #CJK UNIFIED IDEOGRAPH + {0x8E74, 0x5E2B}, //1694 #CJK UNIFIED IDEOGRAPH + {0x8E75, 0x5FD7}, //1695 #CJK UNIFIED IDEOGRAPH + {0x8E76, 0x601D}, //1696 #CJK UNIFIED IDEOGRAPH + {0x8E77, 0x6307}, //1697 #CJK UNIFIED IDEOGRAPH + {0x8E78, 0x652F}, //1698 #CJK UNIFIED IDEOGRAPH + {0x8E79, 0x5B5C}, //1699 #CJK UNIFIED IDEOGRAPH + {0x8E7A, 0x65AF}, //1700 #CJK UNIFIED IDEOGRAPH + {0x8E7B, 0x65BD}, //1701 #CJK UNIFIED IDEOGRAPH + {0x8E7C, 0x65E8}, //1702 #CJK UNIFIED IDEOGRAPH + {0x8E7D, 0x679D}, //1703 #CJK UNIFIED IDEOGRAPH + {0x8E7E, 0x6B62}, //1704 #CJK UNIFIED IDEOGRAPH + {0x8E80, 0x6B7B}, //1705 #CJK UNIFIED IDEOGRAPH + {0x8E81, 0x6C0F}, //1706 #CJK UNIFIED IDEOGRAPH + {0x8E82, 0x7345}, //1707 #CJK UNIFIED IDEOGRAPH + {0x8E83, 0x7949}, //1708 #CJK UNIFIED IDEOGRAPH + {0x8E84, 0x79C1}, //1709 #CJK UNIFIED IDEOGRAPH + {0x8E85, 0x7CF8}, //1710 #CJK UNIFIED IDEOGRAPH + {0x8E86, 0x7D19}, //1711 #CJK UNIFIED IDEOGRAPH + {0x8E87, 0x7D2B}, //1712 #CJK UNIFIED IDEOGRAPH + {0x8E88, 0x80A2}, //1713 #CJK UNIFIED IDEOGRAPH + {0x8E89, 0x8102}, //1714 #CJK UNIFIED IDEOGRAPH + {0x8E8A, 0x81F3}, //1715 #CJK UNIFIED IDEOGRAPH + {0x8E8B, 0x8996}, //1716 #CJK UNIFIED IDEOGRAPH + {0x8E8C, 0x8A5E}, //1717 #CJK UNIFIED IDEOGRAPH + {0x8E8D, 0x8A69}, //1718 #CJK UNIFIED IDEOGRAPH + {0x8E8E, 0x8A66}, //1719 #CJK UNIFIED IDEOGRAPH + {0x8E8F, 0x8A8C}, //1720 #CJK UNIFIED IDEOGRAPH + {0x8E90, 0x8AEE}, //1721 #CJK UNIFIED IDEOGRAPH + {0x8E91, 0x8CC7}, //1722 #CJK UNIFIED IDEOGRAPH + {0x8E92, 0x8CDC}, //1723 #CJK UNIFIED IDEOGRAPH + {0x8E93, 0x96CC}, //1724 #CJK UNIFIED IDEOGRAPH + {0x8E94, 0x98FC}, //1725 #CJK UNIFIED IDEOGRAPH + {0x8E95, 0x6B6F}, //1726 #CJK UNIFIED IDEOGRAPH + {0x8E96, 0x4E8B}, //1727 #CJK UNIFIED IDEOGRAPH + {0x8E97, 0x4F3C}, //1728 #CJK UNIFIED IDEOGRAPH + {0x8E98, 0x4F8D}, //1729 #CJK UNIFIED IDEOGRAPH + {0x8E99, 0x5150}, //1730 #CJK UNIFIED IDEOGRAPH + {0x8E9A, 0x5B57}, //1731 #CJK UNIFIED IDEOGRAPH + {0x8E9B, 0x5BFA}, //1732 #CJK UNIFIED IDEOGRAPH + {0x8E9C, 0x6148}, //1733 #CJK UNIFIED IDEOGRAPH + {0x8E9D, 0x6301}, //1734 #CJK UNIFIED IDEOGRAPH + {0x8E9E, 0x6642}, //1735 #CJK UNIFIED IDEOGRAPH + {0x8E9F, 0x6B21}, //1736 #CJK UNIFIED IDEOGRAPH + {0x8EA0, 0x6ECB}, //1737 #CJK UNIFIED IDEOGRAPH + {0x8EA1, 0x6CBB}, //1738 #CJK UNIFIED IDEOGRAPH + {0x8EA2, 0x723E}, //1739 #CJK UNIFIED IDEOGRAPH + {0x8EA3, 0x74BD}, //1740 #CJK UNIFIED IDEOGRAPH + {0x8EA4, 0x75D4}, //1741 #CJK UNIFIED IDEOGRAPH + {0x8EA5, 0x78C1}, //1742 #CJK UNIFIED IDEOGRAPH + {0x8EA6, 0x793A}, //1743 #CJK UNIFIED IDEOGRAPH + {0x8EA7, 0x800C}, //1744 #CJK UNIFIED IDEOGRAPH + {0x8EA8, 0x8033}, //1745 #CJK UNIFIED IDEOGRAPH + {0x8EA9, 0x81EA}, //1746 #CJK UNIFIED IDEOGRAPH + {0x8EAA, 0x8494}, //1747 #CJK UNIFIED IDEOGRAPH + {0x8EAB, 0x8F9E}, //1748 #CJK UNIFIED IDEOGRAPH + {0x8EAC, 0x6C50}, //1749 #CJK UNIFIED IDEOGRAPH + {0x8EAD, 0x9E7F}, //1750 #CJK UNIFIED IDEOGRAPH + {0x8EAE, 0x5F0F}, //1751 #CJK UNIFIED IDEOGRAPH + {0x8EAF, 0x8B58}, //1752 #CJK UNIFIED IDEOGRAPH + {0x8EB0, 0x9D2B}, //1753 #CJK UNIFIED IDEOGRAPH + {0x8EB1, 0x7AFA}, //1754 #CJK UNIFIED IDEOGRAPH + {0x8EB2, 0x8EF8}, //1755 #CJK UNIFIED IDEOGRAPH + {0x8EB3, 0x5B8D}, //1756 #CJK UNIFIED IDEOGRAPH + {0x8EB4, 0x96EB}, //1757 #CJK UNIFIED IDEOGRAPH + {0x8EB5, 0x4E03}, //1758 #CJK UNIFIED IDEOGRAPH + {0x8EB6, 0x53F1}, //1759 #CJK UNIFIED IDEOGRAPH + {0x8EB7, 0x57F7}, //1760 #CJK UNIFIED IDEOGRAPH + {0x8EB8, 0x5931}, //1761 #CJK UNIFIED IDEOGRAPH + {0x8EB9, 0x5AC9}, //1762 #CJK UNIFIED IDEOGRAPH + {0x8EBA, 0x5BA4}, //1763 #CJK UNIFIED IDEOGRAPH + {0x8EBB, 0x6089}, //1764 #CJK UNIFIED IDEOGRAPH + {0x8EBC, 0x6E7F}, //1765 #CJK UNIFIED IDEOGRAPH + {0x8EBD, 0x6F06}, //1766 #CJK UNIFIED IDEOGRAPH + {0x8EBE, 0x75BE}, //1767 #CJK UNIFIED IDEOGRAPH + {0x8EBF, 0x8CEA}, //1768 #CJK UNIFIED IDEOGRAPH + {0x8EC0, 0x5B9F}, //1769 #CJK UNIFIED IDEOGRAPH + {0x8EC1, 0x8500}, //1770 #CJK UNIFIED IDEOGRAPH + {0x8EC2, 0x7BE0}, //1771 #CJK UNIFIED IDEOGRAPH + {0x8EC3, 0x5072}, //1772 #CJK UNIFIED IDEOGRAPH + {0x8EC4, 0x67F4}, //1773 #CJK UNIFIED IDEOGRAPH + {0x8EC5, 0x829D}, //1774 #CJK UNIFIED IDEOGRAPH + {0x8EC6, 0x5C61}, //1775 #CJK UNIFIED IDEOGRAPH + {0x8EC7, 0x854A}, //1776 #CJK UNIFIED IDEOGRAPH + {0x8EC8, 0x7E1E}, //1777 #CJK UNIFIED IDEOGRAPH + {0x8EC9, 0x820E}, //1778 #CJK UNIFIED IDEOGRAPH + {0x8ECA, 0x5199}, //1779 #CJK UNIFIED IDEOGRAPH + {0x8ECB, 0x5C04}, //1780 #CJK UNIFIED IDEOGRAPH + {0x8ECC, 0x6368}, //1781 #CJK UNIFIED IDEOGRAPH + {0x8ECD, 0x8D66}, //1782 #CJK UNIFIED IDEOGRAPH + {0x8ECE, 0x659C}, //1783 #CJK UNIFIED IDEOGRAPH + {0x8ECF, 0x716E}, //1784 #CJK UNIFIED IDEOGRAPH + {0x8ED0, 0x793E}, //1785 #CJK UNIFIED IDEOGRAPH + {0x8ED1, 0x7D17}, //1786 #CJK UNIFIED IDEOGRAPH + {0x8ED2, 0x8005}, //1787 #CJK UNIFIED IDEOGRAPH + {0x8ED3, 0x8B1D}, //1788 #CJK UNIFIED IDEOGRAPH + {0x8ED4, 0x8ECA}, //1789 #CJK UNIFIED IDEOGRAPH + {0x8ED5, 0x906E}, //1790 #CJK UNIFIED IDEOGRAPH + {0x8ED6, 0x86C7}, //1791 #CJK UNIFIED IDEOGRAPH + {0x8ED7, 0x90AA}, //1792 #CJK UNIFIED IDEOGRAPH + {0x8ED8, 0x501F}, //1793 #CJK UNIFIED IDEOGRAPH + {0x8ED9, 0x52FA}, //1794 #CJK UNIFIED IDEOGRAPH + {0x8EDA, 0x5C3A}, //1795 #CJK UNIFIED IDEOGRAPH + {0x8EDB, 0x6753}, //1796 #CJK UNIFIED IDEOGRAPH + {0x8EDC, 0x707C}, //1797 #CJK UNIFIED IDEOGRAPH + {0x8EDD, 0x7235}, //1798 #CJK UNIFIED IDEOGRAPH + {0x8EDE, 0x914C}, //1799 #CJK UNIFIED IDEOGRAPH + {0x8EDF, 0x91C8}, //1800 #CJK UNIFIED IDEOGRAPH + {0x8EE0, 0x932B}, //1801 #CJK UNIFIED IDEOGRAPH + {0x8EE1, 0x82E5}, //1802 #CJK UNIFIED IDEOGRAPH + {0x8EE2, 0x5BC2}, //1803 #CJK UNIFIED IDEOGRAPH + {0x8EE3, 0x5F31}, //1804 #CJK UNIFIED IDEOGRAPH + {0x8EE4, 0x60F9}, //1805 #CJK UNIFIED IDEOGRAPH + {0x8EE5, 0x4E3B}, //1806 #CJK UNIFIED IDEOGRAPH + {0x8EE6, 0x53D6}, //1807 #CJK UNIFIED IDEOGRAPH + {0x8EE7, 0x5B88}, //1808 #CJK UNIFIED IDEOGRAPH + {0x8EE8, 0x624B}, //1809 #CJK UNIFIED IDEOGRAPH + {0x8EE9, 0x6731}, //1810 #CJK UNIFIED IDEOGRAPH + {0x8EEA, 0x6B8A}, //1811 #CJK UNIFIED IDEOGRAPH + {0x8EEB, 0x72E9}, //1812 #CJK UNIFIED IDEOGRAPH + {0x8EEC, 0x73E0}, //1813 #CJK UNIFIED IDEOGRAPH + {0x8EED, 0x7A2E}, //1814 #CJK UNIFIED IDEOGRAPH + {0x8EEE, 0x816B}, //1815 #CJK UNIFIED IDEOGRAPH + {0x8EEF, 0x8DA3}, //1816 #CJK UNIFIED IDEOGRAPH + {0x8EF0, 0x9152}, //1817 #CJK UNIFIED IDEOGRAPH + {0x8EF1, 0x9996}, //1818 #CJK UNIFIED IDEOGRAPH + {0x8EF2, 0x5112}, //1819 #CJK UNIFIED IDEOGRAPH + {0x8EF3, 0x53D7}, //1820 #CJK UNIFIED IDEOGRAPH + {0x8EF4, 0x546A}, //1821 #CJK UNIFIED IDEOGRAPH + {0x8EF5, 0x5BFF}, //1822 #CJK UNIFIED IDEOGRAPH + {0x8EF6, 0x6388}, //1823 #CJK UNIFIED IDEOGRAPH + {0x8EF7, 0x6A39}, //1824 #CJK UNIFIED IDEOGRAPH + {0x8EF8, 0x7DAC}, //1825 #CJK UNIFIED IDEOGRAPH + {0x8EF9, 0x9700}, //1826 #CJK UNIFIED IDEOGRAPH + {0x8EFA, 0x56DA}, //1827 #CJK UNIFIED IDEOGRAPH + {0x8EFB, 0x53CE}, //1828 #CJK UNIFIED IDEOGRAPH + {0x8EFC, 0x5468}, //1829 #CJK UNIFIED IDEOGRAPH + {0x8F40, 0x5B97}, //1830 #CJK UNIFIED IDEOGRAPH + {0x8F41, 0x5C31}, //1831 #CJK UNIFIED IDEOGRAPH + {0x8F42, 0x5DDE}, //1832 #CJK UNIFIED IDEOGRAPH + {0x8F43, 0x4FEE}, //1833 #CJK UNIFIED IDEOGRAPH + {0x8F44, 0x6101}, //1834 #CJK UNIFIED IDEOGRAPH + {0x8F45, 0x62FE}, //1835 #CJK UNIFIED IDEOGRAPH + {0x8F46, 0x6D32}, //1836 #CJK UNIFIED IDEOGRAPH + {0x8F47, 0x79C0}, //1837 #CJK UNIFIED IDEOGRAPH + {0x8F48, 0x79CB}, //1838 #CJK UNIFIED IDEOGRAPH + {0x8F49, 0x7D42}, //1839 #CJK UNIFIED IDEOGRAPH + {0x8F4A, 0x7E4D}, //1840 #CJK UNIFIED IDEOGRAPH + {0x8F4B, 0x7FD2}, //1841 #CJK UNIFIED IDEOGRAPH + {0x8F4C, 0x81ED}, //1842 #CJK UNIFIED IDEOGRAPH + {0x8F4D, 0x821F}, //1843 #CJK UNIFIED IDEOGRAPH + {0x8F4E, 0x8490}, //1844 #CJK UNIFIED IDEOGRAPH + {0x8F4F, 0x8846}, //1845 #CJK UNIFIED IDEOGRAPH + {0x8F50, 0x8972}, //1846 #CJK UNIFIED IDEOGRAPH + {0x8F51, 0x8B90}, //1847 #CJK UNIFIED IDEOGRAPH + {0x8F52, 0x8E74}, //1848 #CJK UNIFIED IDEOGRAPH + {0x8F53, 0x8F2F}, //1849 #CJK UNIFIED IDEOGRAPH + {0x8F54, 0x9031}, //1850 #CJK UNIFIED IDEOGRAPH + {0x8F55, 0x914B}, //1851 #CJK UNIFIED IDEOGRAPH + {0x8F56, 0x916C}, //1852 #CJK UNIFIED IDEOGRAPH + {0x8F57, 0x96C6}, //1853 #CJK UNIFIED IDEOGRAPH + {0x8F58, 0x919C}, //1854 #CJK UNIFIED IDEOGRAPH + {0x8F59, 0x4EC0}, //1855 #CJK UNIFIED IDEOGRAPH + {0x8F5A, 0x4F4F}, //1856 #CJK UNIFIED IDEOGRAPH + {0x8F5B, 0x5145}, //1857 #CJK UNIFIED IDEOGRAPH + {0x8F5C, 0x5341}, //1858 #CJK UNIFIED IDEOGRAPH + {0x8F5D, 0x5F93}, //1859 #CJK UNIFIED IDEOGRAPH + {0x8F5E, 0x620E}, //1860 #CJK UNIFIED IDEOGRAPH + {0x8F5F, 0x67D4}, //1861 #CJK UNIFIED IDEOGRAPH + {0x8F60, 0x6C41}, //1862 #CJK UNIFIED IDEOGRAPH + {0x8F61, 0x6E0B}, //1863 #CJK UNIFIED IDEOGRAPH + {0x8F62, 0x7363}, //1864 #CJK UNIFIED IDEOGRAPH + {0x8F63, 0x7E26}, //1865 #CJK UNIFIED IDEOGRAPH + {0x8F64, 0x91CD}, //1866 #CJK UNIFIED IDEOGRAPH + {0x8F65, 0x9283}, //1867 #CJK UNIFIED IDEOGRAPH + {0x8F66, 0x53D4}, //1868 #CJK UNIFIED IDEOGRAPH + {0x8F67, 0x5919}, //1869 #CJK UNIFIED IDEOGRAPH + {0x8F68, 0x5BBF}, //1870 #CJK UNIFIED IDEOGRAPH + {0x8F69, 0x6DD1}, //1871 #CJK UNIFIED IDEOGRAPH + {0x8F6A, 0x795D}, //1872 #CJK UNIFIED IDEOGRAPH + {0x8F6B, 0x7E2E}, //1873 #CJK UNIFIED IDEOGRAPH + {0x8F6C, 0x7C9B}, //1874 #CJK UNIFIED IDEOGRAPH + {0x8F6D, 0x587E}, //1875 #CJK UNIFIED IDEOGRAPH + {0x8F6E, 0x719F}, //1876 #CJK UNIFIED IDEOGRAPH + {0x8F6F, 0x51FA}, //1877 #CJK UNIFIED IDEOGRAPH + {0x8F70, 0x8853}, //1878 #CJK UNIFIED IDEOGRAPH + {0x8F71, 0x8FF0}, //1879 #CJK UNIFIED IDEOGRAPH + {0x8F72, 0x4FCA}, //1880 #CJK UNIFIED IDEOGRAPH + {0x8F73, 0x5CFB}, //1881 #CJK UNIFIED IDEOGRAPH + {0x8F74, 0x6625}, //1882 #CJK UNIFIED IDEOGRAPH + {0x8F75, 0x77AC}, //1883 #CJK UNIFIED IDEOGRAPH + {0x8F76, 0x7AE3}, //1884 #CJK UNIFIED IDEOGRAPH + {0x8F77, 0x821C}, //1885 #CJK UNIFIED IDEOGRAPH + {0x8F78, 0x99FF}, //1886 #CJK UNIFIED IDEOGRAPH + {0x8F79, 0x51C6}, //1887 #CJK UNIFIED IDEOGRAPH + {0x8F7A, 0x5FAA}, //1888 #CJK UNIFIED IDEOGRAPH + {0x8F7B, 0x65EC}, //1889 #CJK UNIFIED IDEOGRAPH + {0x8F7C, 0x696F}, //1890 #CJK UNIFIED IDEOGRAPH + {0x8F7D, 0x6B89}, //1891 #CJK UNIFIED IDEOGRAPH + {0x8F7E, 0x6DF3}, //1892 #CJK UNIFIED IDEOGRAPH + {0x8F80, 0x6E96}, //1893 #CJK UNIFIED IDEOGRAPH + {0x8F81, 0x6F64}, //1894 #CJK UNIFIED IDEOGRAPH + {0x8F82, 0x76FE}, //1895 #CJK UNIFIED IDEOGRAPH + {0x8F83, 0x7D14}, //1896 #CJK UNIFIED IDEOGRAPH + {0x8F84, 0x5DE1}, //1897 #CJK UNIFIED IDEOGRAPH + {0x8F85, 0x9075}, //1898 #CJK UNIFIED IDEOGRAPH + {0x8F86, 0x9187}, //1899 #CJK UNIFIED IDEOGRAPH + {0x8F87, 0x9806}, //1900 #CJK UNIFIED IDEOGRAPH + {0x8F88, 0x51E6}, //1901 #CJK UNIFIED IDEOGRAPH + {0x8F89, 0x521D}, //1902 #CJK UNIFIED IDEOGRAPH + {0x8F8A, 0x6240}, //1903 #CJK UNIFIED IDEOGRAPH + {0x8F8B, 0x6691}, //1904 #CJK UNIFIED IDEOGRAPH + {0x8F8C, 0x66D9}, //1905 #CJK UNIFIED IDEOGRAPH + {0x8F8D, 0x6E1A}, //1906 #CJK UNIFIED IDEOGRAPH + {0x8F8E, 0x5EB6}, //1907 #CJK UNIFIED IDEOGRAPH + {0x8F8F, 0x7DD2}, //1908 #CJK UNIFIED IDEOGRAPH + {0x8F90, 0x7F72}, //1909 #CJK UNIFIED IDEOGRAPH + {0x8F91, 0x66F8}, //1910 #CJK UNIFIED IDEOGRAPH + {0x8F92, 0x85AF}, //1911 #CJK UNIFIED IDEOGRAPH + {0x8F93, 0x85F7}, //1912 #CJK UNIFIED IDEOGRAPH + {0x8F94, 0x8AF8}, //1913 #CJK UNIFIED IDEOGRAPH + {0x8F95, 0x52A9}, //1914 #CJK UNIFIED IDEOGRAPH + {0x8F96, 0x53D9}, //1915 #CJK UNIFIED IDEOGRAPH + {0x8F97, 0x5973}, //1916 #CJK UNIFIED IDEOGRAPH + {0x8F98, 0x5E8F}, //1917 #CJK UNIFIED IDEOGRAPH + {0x8F99, 0x5F90}, //1918 #CJK UNIFIED IDEOGRAPH + {0x8F9A, 0x6055}, //1919 #CJK UNIFIED IDEOGRAPH + {0x8F9B, 0x92E4}, //1920 #CJK UNIFIED IDEOGRAPH + {0x8F9C, 0x9664}, //1921 #CJK UNIFIED IDEOGRAPH + {0x8F9D, 0x50B7}, //1922 #CJK UNIFIED IDEOGRAPH + {0x8F9E, 0x511F}, //1923 #CJK UNIFIED IDEOGRAPH + {0x8F9F, 0x52DD}, //1924 #CJK UNIFIED IDEOGRAPH + {0x8FA0, 0x5320}, //1925 #CJK UNIFIED IDEOGRAPH + {0x8FA1, 0x5347}, //1926 #CJK UNIFIED IDEOGRAPH + {0x8FA2, 0x53EC}, //1927 #CJK UNIFIED IDEOGRAPH + {0x8FA3, 0x54E8}, //1928 #CJK UNIFIED IDEOGRAPH + {0x8FA4, 0x5546}, //1929 #CJK UNIFIED IDEOGRAPH + {0x8FA5, 0x5531}, //1930 #CJK UNIFIED IDEOGRAPH + {0x8FA6, 0x5617}, //1931 #CJK UNIFIED IDEOGRAPH + {0x8FA7, 0x5968}, //1932 #CJK UNIFIED IDEOGRAPH + {0x8FA8, 0x59BE}, //1933 #CJK UNIFIED IDEOGRAPH + {0x8FA9, 0x5A3C}, //1934 #CJK UNIFIED IDEOGRAPH + {0x8FAA, 0x5BB5}, //1935 #CJK UNIFIED IDEOGRAPH + {0x8FAB, 0x5C06}, //1936 #CJK UNIFIED IDEOGRAPH + {0x8FAC, 0x5C0F}, //1937 #CJK UNIFIED IDEOGRAPH + {0x8FAD, 0x5C11}, //1938 #CJK UNIFIED IDEOGRAPH + {0x8FAE, 0x5C1A}, //1939 #CJK UNIFIED IDEOGRAPH + {0x8FAF, 0x5E84}, //1940 #CJK UNIFIED IDEOGRAPH + {0x8FB0, 0x5E8A}, //1941 #CJK UNIFIED IDEOGRAPH + {0x8FB1, 0x5EE0}, //1942 #CJK UNIFIED IDEOGRAPH + {0x8FB2, 0x5F70}, //1943 #CJK UNIFIED IDEOGRAPH + {0x8FB3, 0x627F}, //1944 #CJK UNIFIED IDEOGRAPH + {0x8FB4, 0x6284}, //1945 #CJK UNIFIED IDEOGRAPH + {0x8FB5, 0x62DB}, //1946 #CJK UNIFIED IDEOGRAPH + {0x8FB6, 0x638C}, //1947 #CJK UNIFIED IDEOGRAPH + {0x8FB7, 0x6377}, //1948 #CJK UNIFIED IDEOGRAPH + {0x8FB8, 0x6607}, //1949 #CJK UNIFIED IDEOGRAPH + {0x8FB9, 0x660C}, //1950 #CJK UNIFIED IDEOGRAPH + {0x8FBA, 0x662D}, //1951 #CJK UNIFIED IDEOGRAPH + {0x8FBB, 0x6676}, //1952 #CJK UNIFIED IDEOGRAPH + {0x8FBC, 0x677E}, //1953 #CJK UNIFIED IDEOGRAPH + {0x8FBD, 0x68A2}, //1954 #CJK UNIFIED IDEOGRAPH + {0x8FBE, 0x6A1F}, //1955 #CJK UNIFIED IDEOGRAPH + {0x8FBF, 0x6A35}, //1956 #CJK UNIFIED IDEOGRAPH + {0x8FC0, 0x6CBC}, //1957 #CJK UNIFIED IDEOGRAPH + {0x8FC1, 0x6D88}, //1958 #CJK UNIFIED IDEOGRAPH + {0x8FC2, 0x6E09}, //1959 #CJK UNIFIED IDEOGRAPH + {0x8FC3, 0x6E58}, //1960 #CJK UNIFIED IDEOGRAPH + {0x8FC4, 0x713C}, //1961 #CJK UNIFIED IDEOGRAPH + {0x8FC5, 0x7126}, //1962 #CJK UNIFIED IDEOGRAPH + {0x8FC6, 0x7167}, //1963 #CJK UNIFIED IDEOGRAPH + {0x8FC7, 0x75C7}, //1964 #CJK UNIFIED IDEOGRAPH + {0x8FC8, 0x7701}, //1965 #CJK UNIFIED IDEOGRAPH + {0x8FC9, 0x785D}, //1966 #CJK UNIFIED IDEOGRAPH + {0x8FCA, 0x7901}, //1967 #CJK UNIFIED IDEOGRAPH + {0x8FCB, 0x7965}, //1968 #CJK UNIFIED IDEOGRAPH + {0x8FCC, 0x79F0}, //1969 #CJK UNIFIED IDEOGRAPH + {0x8FCD, 0x7AE0}, //1970 #CJK UNIFIED IDEOGRAPH + {0x8FCE, 0x7B11}, //1971 #CJK UNIFIED IDEOGRAPH + {0x8FCF, 0x7CA7}, //1972 #CJK UNIFIED IDEOGRAPH + {0x8FD0, 0x7D39}, //1973 #CJK UNIFIED IDEOGRAPH + {0x8FD1, 0x8096}, //1974 #CJK UNIFIED IDEOGRAPH + {0x8FD2, 0x83D6}, //1975 #CJK UNIFIED IDEOGRAPH + {0x8FD3, 0x848B}, //1976 #CJK UNIFIED IDEOGRAPH + {0x8FD4, 0x8549}, //1977 #CJK UNIFIED IDEOGRAPH + {0x8FD5, 0x885D}, //1978 #CJK UNIFIED IDEOGRAPH + {0x8FD6, 0x88F3}, //1979 #CJK UNIFIED IDEOGRAPH + {0x8FD7, 0x8A1F}, //1980 #CJK UNIFIED IDEOGRAPH + {0x8FD8, 0x8A3C}, //1981 #CJK UNIFIED IDEOGRAPH + {0x8FD9, 0x8A54}, //1982 #CJK UNIFIED IDEOGRAPH + {0x8FDA, 0x8A73}, //1983 #CJK UNIFIED IDEOGRAPH + {0x8FDB, 0x8C61}, //1984 #CJK UNIFIED IDEOGRAPH + {0x8FDC, 0x8CDE}, //1985 #CJK UNIFIED IDEOGRAPH + {0x8FDD, 0x91A4}, //1986 #CJK UNIFIED IDEOGRAPH + {0x8FDE, 0x9266}, //1987 #CJK UNIFIED IDEOGRAPH + {0x8FDF, 0x937E}, //1988 #CJK UNIFIED IDEOGRAPH + {0x8FE0, 0x9418}, //1989 #CJK UNIFIED IDEOGRAPH + {0x8FE1, 0x969C}, //1990 #CJK UNIFIED IDEOGRAPH + {0x8FE2, 0x9798}, //1991 #CJK UNIFIED IDEOGRAPH + {0x8FE3, 0x4E0A}, //1992 #CJK UNIFIED IDEOGRAPH + {0x8FE4, 0x4E08}, //1993 #CJK UNIFIED IDEOGRAPH + {0x8FE5, 0x4E1E}, //1994 #CJK UNIFIED IDEOGRAPH + {0x8FE6, 0x4E57}, //1995 #CJK UNIFIED IDEOGRAPH + {0x8FE7, 0x5197}, //1996 #CJK UNIFIED IDEOGRAPH + {0x8FE8, 0x5270}, //1997 #CJK UNIFIED IDEOGRAPH + {0x8FE9, 0x57CE}, //1998 #CJK UNIFIED IDEOGRAPH + {0x8FEA, 0x5834}, //1999 #CJK UNIFIED IDEOGRAPH + {0x8FEB, 0x58CC}, //2000 #CJK UNIFIED IDEOGRAPH + {0x8FEC, 0x5B22}, //2001 #CJK UNIFIED IDEOGRAPH + {0x8FED, 0x5E38}, //2002 #CJK UNIFIED IDEOGRAPH + {0x8FEE, 0x60C5}, //2003 #CJK UNIFIED IDEOGRAPH + {0x8FEF, 0x64FE}, //2004 #CJK UNIFIED IDEOGRAPH + {0x8FF0, 0x6761}, //2005 #CJK UNIFIED IDEOGRAPH + {0x8FF1, 0x6756}, //2006 #CJK UNIFIED IDEOGRAPH + {0x8FF2, 0x6D44}, //2007 #CJK UNIFIED IDEOGRAPH + {0x8FF3, 0x72B6}, //2008 #CJK UNIFIED IDEOGRAPH + {0x8FF4, 0x7573}, //2009 #CJK UNIFIED IDEOGRAPH + {0x8FF5, 0x7A63}, //2010 #CJK UNIFIED IDEOGRAPH + {0x8FF6, 0x84B8}, //2011 #CJK UNIFIED IDEOGRAPH + {0x8FF7, 0x8B72}, //2012 #CJK UNIFIED IDEOGRAPH + {0x8FF8, 0x91B8}, //2013 #CJK UNIFIED IDEOGRAPH + {0x8FF9, 0x9320}, //2014 #CJK UNIFIED IDEOGRAPH + {0x8FFA, 0x5631}, //2015 #CJK UNIFIED IDEOGRAPH + {0x8FFB, 0x57F4}, //2016 #CJK UNIFIED IDEOGRAPH + {0x8FFC, 0x98FE}, //2017 #CJK UNIFIED IDEOGRAPH + {0x9040, 0x62ED}, //2018 #CJK UNIFIED IDEOGRAPH + {0x9041, 0x690D}, //2019 #CJK UNIFIED IDEOGRAPH + {0x9042, 0x6B96}, //2020 #CJK UNIFIED IDEOGRAPH + {0x9043, 0x71ED}, //2021 #CJK UNIFIED IDEOGRAPH + {0x9044, 0x7E54}, //2022 #CJK UNIFIED IDEOGRAPH + {0x9045, 0x8077}, //2023 #CJK UNIFIED IDEOGRAPH + {0x9046, 0x8272}, //2024 #CJK UNIFIED IDEOGRAPH + {0x9047, 0x89E6}, //2025 #CJK UNIFIED IDEOGRAPH + {0x9048, 0x98DF}, //2026 #CJK UNIFIED IDEOGRAPH + {0x9049, 0x8755}, //2027 #CJK UNIFIED IDEOGRAPH + {0x904A, 0x8FB1}, //2028 #CJK UNIFIED IDEOGRAPH + {0x904B, 0x5C3B}, //2029 #CJK UNIFIED IDEOGRAPH + {0x904C, 0x4F38}, //2030 #CJK UNIFIED IDEOGRAPH + {0x904D, 0x4FE1}, //2031 #CJK UNIFIED IDEOGRAPH + {0x904E, 0x4FB5}, //2032 #CJK UNIFIED IDEOGRAPH + {0x904F, 0x5507}, //2033 #CJK UNIFIED IDEOGRAPH + {0x9050, 0x5A20}, //2034 #CJK UNIFIED IDEOGRAPH + {0x9051, 0x5BDD}, //2035 #CJK UNIFIED IDEOGRAPH + {0x9052, 0x5BE9}, //2036 #CJK UNIFIED IDEOGRAPH + {0x9053, 0x5FC3}, //2037 #CJK UNIFIED IDEOGRAPH + {0x9054, 0x614E}, //2038 #CJK UNIFIED IDEOGRAPH + {0x9055, 0x632F}, //2039 #CJK UNIFIED IDEOGRAPH + {0x9056, 0x65B0}, //2040 #CJK UNIFIED IDEOGRAPH + {0x9057, 0x664B}, //2041 #CJK UNIFIED IDEOGRAPH + {0x9058, 0x68EE}, //2042 #CJK UNIFIED IDEOGRAPH + {0x9059, 0x699B}, //2043 #CJK UNIFIED IDEOGRAPH + {0x905A, 0x6D78}, //2044 #CJK UNIFIED IDEOGRAPH + {0x905B, 0x6DF1}, //2045 #CJK UNIFIED IDEOGRAPH + {0x905C, 0x7533}, //2046 #CJK UNIFIED IDEOGRAPH + {0x905D, 0x75B9}, //2047 #CJK UNIFIED IDEOGRAPH + {0x905E, 0x771F}, //2048 #CJK UNIFIED IDEOGRAPH + {0x905F, 0x795E}, //2049 #CJK UNIFIED IDEOGRAPH + {0x9060, 0x79E6}, //2050 #CJK UNIFIED IDEOGRAPH + {0x9061, 0x7D33}, //2051 #CJK UNIFIED IDEOGRAPH + {0x9062, 0x81E3}, //2052 #CJK UNIFIED IDEOGRAPH + {0x9063, 0x82AF}, //2053 #CJK UNIFIED IDEOGRAPH + {0x9064, 0x85AA}, //2054 #CJK UNIFIED IDEOGRAPH + {0x9065, 0x89AA}, //2055 #CJK UNIFIED IDEOGRAPH + {0x9066, 0x8A3A}, //2056 #CJK UNIFIED IDEOGRAPH + {0x9067, 0x8EAB}, //2057 #CJK UNIFIED IDEOGRAPH + {0x9068, 0x8F9B}, //2058 #CJK UNIFIED IDEOGRAPH + {0x9069, 0x9032}, //2059 #CJK UNIFIED IDEOGRAPH + {0x906A, 0x91DD}, //2060 #CJK UNIFIED IDEOGRAPH + {0x906B, 0x9707}, //2061 #CJK UNIFIED IDEOGRAPH + {0x906C, 0x4EBA}, //2062 #CJK UNIFIED IDEOGRAPH + {0x906D, 0x4EC1}, //2063 #CJK UNIFIED IDEOGRAPH + {0x906E, 0x5203}, //2064 #CJK UNIFIED IDEOGRAPH + {0x906F, 0x5875}, //2065 #CJK UNIFIED IDEOGRAPH + {0x9070, 0x58EC}, //2066 #CJK UNIFIED IDEOGRAPH + {0x9071, 0x5C0B}, //2067 #CJK UNIFIED IDEOGRAPH + {0x9072, 0x751A}, //2068 #CJK UNIFIED IDEOGRAPH + {0x9073, 0x5C3D}, //2069 #CJK UNIFIED IDEOGRAPH + {0x9074, 0x814E}, //2070 #CJK UNIFIED IDEOGRAPH + {0x9075, 0x8A0A}, //2071 #CJK UNIFIED IDEOGRAPH + {0x9076, 0x8FC5}, //2072 #CJK UNIFIED IDEOGRAPH + {0x9077, 0x9663}, //2073 #CJK UNIFIED IDEOGRAPH + {0x9078, 0x976D}, //2074 #CJK UNIFIED IDEOGRAPH + {0x9079, 0x7B25}, //2075 #CJK UNIFIED IDEOGRAPH + {0x907A, 0x8ACF}, //2076 #CJK UNIFIED IDEOGRAPH + {0x907B, 0x9808}, //2077 #CJK UNIFIED IDEOGRAPH + {0x907C, 0x9162}, //2078 #CJK UNIFIED IDEOGRAPH + {0x907D, 0x56F3}, //2079 #CJK UNIFIED IDEOGRAPH + {0x907E, 0x53A8}, //2080 #CJK UNIFIED IDEOGRAPH + {0x9080, 0x9017}, //2081 #CJK UNIFIED IDEOGRAPH + {0x9081, 0x5439}, //2082 #CJK UNIFIED IDEOGRAPH + {0x9082, 0x5782}, //2083 #CJK UNIFIED IDEOGRAPH + {0x9083, 0x5E25}, //2084 #CJK UNIFIED IDEOGRAPH + {0x9084, 0x63A8}, //2085 #CJK UNIFIED IDEOGRAPH + {0x9085, 0x6C34}, //2086 #CJK UNIFIED IDEOGRAPH + {0x9086, 0x708A}, //2087 #CJK UNIFIED IDEOGRAPH + {0x9087, 0x7761}, //2088 #CJK UNIFIED IDEOGRAPH + {0x9088, 0x7C8B}, //2089 #CJK UNIFIED IDEOGRAPH + {0x9089, 0x7FE0}, //2090 #CJK UNIFIED IDEOGRAPH + {0x908A, 0x8870}, //2091 #CJK UNIFIED IDEOGRAPH + {0x908B, 0x9042}, //2092 #CJK UNIFIED IDEOGRAPH + {0x908C, 0x9154}, //2093 #CJK UNIFIED IDEOGRAPH + {0x908D, 0x9310}, //2094 #CJK UNIFIED IDEOGRAPH + {0x908E, 0x9318}, //2095 #CJK UNIFIED IDEOGRAPH + {0x908F, 0x968F}, //2096 #CJK UNIFIED IDEOGRAPH + {0x9090, 0x745E}, //2097 #CJK UNIFIED IDEOGRAPH + {0x9091, 0x9AC4}, //2098 #CJK UNIFIED IDEOGRAPH + {0x9092, 0x5D07}, //2099 #CJK UNIFIED IDEOGRAPH + {0x9093, 0x5D69}, //2100 #CJK UNIFIED IDEOGRAPH + {0x9094, 0x6570}, //2101 #CJK UNIFIED IDEOGRAPH + {0x9095, 0x67A2}, //2102 #CJK UNIFIED IDEOGRAPH + {0x9096, 0x8DA8}, //2103 #CJK UNIFIED IDEOGRAPH + {0x9097, 0x96DB}, //2104 #CJK UNIFIED IDEOGRAPH + {0x9098, 0x636E}, //2105 #CJK UNIFIED IDEOGRAPH + {0x9099, 0x6749}, //2106 #CJK UNIFIED IDEOGRAPH + {0x909A, 0x6919}, //2107 #CJK UNIFIED IDEOGRAPH + {0x909B, 0x83C5}, //2108 #CJK UNIFIED IDEOGRAPH + {0x909C, 0x9817}, //2109 #CJK UNIFIED IDEOGRAPH + {0x909D, 0x96C0}, //2110 #CJK UNIFIED IDEOGRAPH + {0x909E, 0x88FE}, //2111 #CJK UNIFIED IDEOGRAPH + {0x909F, 0x6F84}, //2112 #CJK UNIFIED IDEOGRAPH + {0x90A0, 0x647A}, //2113 #CJK UNIFIED IDEOGRAPH + {0x90A1, 0x5BF8}, //2114 #CJK UNIFIED IDEOGRAPH + {0x90A2, 0x4E16}, //2115 #CJK UNIFIED IDEOGRAPH + {0x90A3, 0x702C}, //2116 #CJK UNIFIED IDEOGRAPH + {0x90A4, 0x755D}, //2117 #CJK UNIFIED IDEOGRAPH + {0x90A5, 0x662F}, //2118 #CJK UNIFIED IDEOGRAPH + {0x90A6, 0x51C4}, //2119 #CJK UNIFIED IDEOGRAPH + {0x90A7, 0x5236}, //2120 #CJK UNIFIED IDEOGRAPH + {0x90A8, 0x52E2}, //2121 #CJK UNIFIED IDEOGRAPH + {0x90A9, 0x59D3}, //2122 #CJK UNIFIED IDEOGRAPH + {0x90AA, 0x5F81}, //2123 #CJK UNIFIED IDEOGRAPH + {0x90AB, 0x6027}, //2124 #CJK UNIFIED IDEOGRAPH + {0x90AC, 0x6210}, //2125 #CJK UNIFIED IDEOGRAPH + {0x90AD, 0x653F}, //2126 #CJK UNIFIED IDEOGRAPH + {0x90AE, 0x6574}, //2127 #CJK UNIFIED IDEOGRAPH + {0x90AF, 0x661F}, //2128 #CJK UNIFIED IDEOGRAPH + {0x90B0, 0x6674}, //2129 #CJK UNIFIED IDEOGRAPH + {0x90B1, 0x68F2}, //2130 #CJK UNIFIED IDEOGRAPH + {0x90B2, 0x6816}, //2131 #CJK UNIFIED IDEOGRAPH + {0x90B3, 0x6B63}, //2132 #CJK UNIFIED IDEOGRAPH + {0x90B4, 0x6E05}, //2133 #CJK UNIFIED IDEOGRAPH + {0x90B5, 0x7272}, //2134 #CJK UNIFIED IDEOGRAPH + {0x90B6, 0x751F}, //2135 #CJK UNIFIED IDEOGRAPH + {0x90B7, 0x76DB}, //2136 #CJK UNIFIED IDEOGRAPH + {0x90B8, 0x7CBE}, //2137 #CJK UNIFIED IDEOGRAPH + {0x90B9, 0x8056}, //2138 #CJK UNIFIED IDEOGRAPH + {0x90BA, 0x58F0}, //2139 #CJK UNIFIED IDEOGRAPH + {0x90BB, 0x88FD}, //2140 #CJK UNIFIED IDEOGRAPH + {0x90BC, 0x897F}, //2141 #CJK UNIFIED IDEOGRAPH + {0x90BD, 0x8AA0}, //2142 #CJK UNIFIED IDEOGRAPH + {0x90BE, 0x8A93}, //2143 #CJK UNIFIED IDEOGRAPH + {0x90BF, 0x8ACB}, //2144 #CJK UNIFIED IDEOGRAPH + {0x90C0, 0x901D}, //2145 #CJK UNIFIED IDEOGRAPH + {0x90C1, 0x9192}, //2146 #CJK UNIFIED IDEOGRAPH + {0x90C2, 0x9752}, //2147 #CJK UNIFIED IDEOGRAPH + {0x90C3, 0x9759}, //2148 #CJK UNIFIED IDEOGRAPH + {0x90C4, 0x6589}, //2149 #CJK UNIFIED IDEOGRAPH + {0x90C5, 0x7A0E}, //2150 #CJK UNIFIED IDEOGRAPH + {0x90C6, 0x8106}, //2151 #CJK UNIFIED IDEOGRAPH + {0x90C7, 0x96BB}, //2152 #CJK UNIFIED IDEOGRAPH + {0x90C8, 0x5E2D}, //2153 #CJK UNIFIED IDEOGRAPH + {0x90C9, 0x60DC}, //2154 #CJK UNIFIED IDEOGRAPH + {0x90CA, 0x621A}, //2155 #CJK UNIFIED IDEOGRAPH + {0x90CB, 0x65A5}, //2156 #CJK UNIFIED IDEOGRAPH + {0x90CC, 0x6614}, //2157 #CJK UNIFIED IDEOGRAPH + {0x90CD, 0x6790}, //2158 #CJK UNIFIED IDEOGRAPH + {0x90CE, 0x77F3}, //2159 #CJK UNIFIED IDEOGRAPH + {0x90CF, 0x7A4D}, //2160 #CJK UNIFIED IDEOGRAPH + {0x90D0, 0x7C4D}, //2161 #CJK UNIFIED IDEOGRAPH + {0x90D1, 0x7E3E}, //2162 #CJK UNIFIED IDEOGRAPH + {0x90D2, 0x810A}, //2163 #CJK UNIFIED IDEOGRAPH + {0x90D3, 0x8CAC}, //2164 #CJK UNIFIED IDEOGRAPH + {0x90D4, 0x8D64}, //2165 #CJK UNIFIED IDEOGRAPH + {0x90D5, 0x8DE1}, //2166 #CJK UNIFIED IDEOGRAPH + {0x90D6, 0x8E5F}, //2167 #CJK UNIFIED IDEOGRAPH + {0x90D7, 0x78A9}, //2168 #CJK UNIFIED IDEOGRAPH + {0x90D8, 0x5207}, //2169 #CJK UNIFIED IDEOGRAPH + {0x90D9, 0x62D9}, //2170 #CJK UNIFIED IDEOGRAPH + {0x90DA, 0x63A5}, //2171 #CJK UNIFIED IDEOGRAPH + {0x90DB, 0x6442}, //2172 #CJK UNIFIED IDEOGRAPH + {0x90DC, 0x6298}, //2173 #CJK UNIFIED IDEOGRAPH + {0x90DD, 0x8A2D}, //2174 #CJK UNIFIED IDEOGRAPH + {0x90DE, 0x7A83}, //2175 #CJK UNIFIED IDEOGRAPH + {0x90DF, 0x7BC0}, //2176 #CJK UNIFIED IDEOGRAPH + {0x90E0, 0x8AAC}, //2177 #CJK UNIFIED IDEOGRAPH + {0x90E1, 0x96EA}, //2178 #CJK UNIFIED IDEOGRAPH + {0x90E2, 0x7D76}, //2179 #CJK UNIFIED IDEOGRAPH + {0x90E3, 0x820C}, //2180 #CJK UNIFIED IDEOGRAPH + {0x90E4, 0x8749}, //2181 #CJK UNIFIED IDEOGRAPH + {0x90E5, 0x4ED9}, //2182 #CJK UNIFIED IDEOGRAPH + {0x90E6, 0x5148}, //2183 #CJK UNIFIED IDEOGRAPH + {0x90E7, 0x5343}, //2184 #CJK UNIFIED IDEOGRAPH + {0x90E8, 0x5360}, //2185 #CJK UNIFIED IDEOGRAPH + {0x90E9, 0x5BA3}, //2186 #CJK UNIFIED IDEOGRAPH + {0x90EA, 0x5C02}, //2187 #CJK UNIFIED IDEOGRAPH + {0x90EB, 0x5C16}, //2188 #CJK UNIFIED IDEOGRAPH + {0x90EC, 0x5DDD}, //2189 #CJK UNIFIED IDEOGRAPH + {0x90ED, 0x6226}, //2190 #CJK UNIFIED IDEOGRAPH + {0x90EE, 0x6247}, //2191 #CJK UNIFIED IDEOGRAPH + {0x90EF, 0x64B0}, //2192 #CJK UNIFIED IDEOGRAPH + {0x90F0, 0x6813}, //2193 #CJK UNIFIED IDEOGRAPH + {0x90F1, 0x6834}, //2194 #CJK UNIFIED IDEOGRAPH + {0x90F2, 0x6CC9}, //2195 #CJK UNIFIED IDEOGRAPH + {0x90F3, 0x6D45}, //2196 #CJK UNIFIED IDEOGRAPH + {0x90F4, 0x6D17}, //2197 #CJK UNIFIED IDEOGRAPH + {0x90F5, 0x67D3}, //2198 #CJK UNIFIED IDEOGRAPH + {0x90F6, 0x6F5C}, //2199 #CJK UNIFIED IDEOGRAPH + {0x90F7, 0x714E}, //2200 #CJK UNIFIED IDEOGRAPH + {0x90F8, 0x717D}, //2201 #CJK UNIFIED IDEOGRAPH + {0x90F9, 0x65CB}, //2202 #CJK UNIFIED IDEOGRAPH + {0x90FA, 0x7A7F}, //2203 #CJK UNIFIED IDEOGRAPH + {0x90FB, 0x7BAD}, //2204 #CJK UNIFIED IDEOGRAPH + {0x90FC, 0x7DDA}, //2205 #CJK UNIFIED IDEOGRAPH + {0x9140, 0x7E4A}, //2206 #CJK UNIFIED IDEOGRAPH + {0x9141, 0x7FA8}, //2207 #CJK UNIFIED IDEOGRAPH + {0x9142, 0x817A}, //2208 #CJK UNIFIED IDEOGRAPH + {0x9143, 0x821B}, //2209 #CJK UNIFIED IDEOGRAPH + {0x9144, 0x8239}, //2210 #CJK UNIFIED IDEOGRAPH + {0x9145, 0x85A6}, //2211 #CJK UNIFIED IDEOGRAPH + {0x9146, 0x8A6E}, //2212 #CJK UNIFIED IDEOGRAPH + {0x9147, 0x8CCE}, //2213 #CJK UNIFIED IDEOGRAPH + {0x9148, 0x8DF5}, //2214 #CJK UNIFIED IDEOGRAPH + {0x9149, 0x9078}, //2215 #CJK UNIFIED IDEOGRAPH + {0x914A, 0x9077}, //2216 #CJK UNIFIED IDEOGRAPH + {0x914B, 0x92AD}, //2217 #CJK UNIFIED IDEOGRAPH + {0x914C, 0x9291}, //2218 #CJK UNIFIED IDEOGRAPH + {0x914D, 0x9583}, //2219 #CJK UNIFIED IDEOGRAPH + {0x914E, 0x9BAE}, //2220 #CJK UNIFIED IDEOGRAPH + {0x914F, 0x524D}, //2221 #CJK UNIFIED IDEOGRAPH + {0x9150, 0x5584}, //2222 #CJK UNIFIED IDEOGRAPH + {0x9151, 0x6F38}, //2223 #CJK UNIFIED IDEOGRAPH + {0x9152, 0x7136}, //2224 #CJK UNIFIED IDEOGRAPH + {0x9153, 0x5168}, //2225 #CJK UNIFIED IDEOGRAPH + {0x9154, 0x7985}, //2226 #CJK UNIFIED IDEOGRAPH + {0x9155, 0x7E55}, //2227 #CJK UNIFIED IDEOGRAPH + {0x9156, 0x81B3}, //2228 #CJK UNIFIED IDEOGRAPH + {0x9157, 0x7CCE}, //2229 #CJK UNIFIED IDEOGRAPH + {0x9158, 0x564C}, //2230 #CJK UNIFIED IDEOGRAPH + {0x9159, 0x5851}, //2231 #CJK UNIFIED IDEOGRAPH + {0x915A, 0x5CA8}, //2232 #CJK UNIFIED IDEOGRAPH + {0x915B, 0x63AA}, //2233 #CJK UNIFIED IDEOGRAPH + {0x915C, 0x66FE}, //2234 #CJK UNIFIED IDEOGRAPH + {0x915D, 0x66FD}, //2235 #CJK UNIFIED IDEOGRAPH + {0x915E, 0x695A}, //2236 #CJK UNIFIED IDEOGRAPH + {0x915F, 0x72D9}, //2237 #CJK UNIFIED IDEOGRAPH + {0x9160, 0x758F}, //2238 #CJK UNIFIED IDEOGRAPH + {0x9161, 0x758E}, //2239 #CJK UNIFIED IDEOGRAPH + {0x9162, 0x790E}, //2240 #CJK UNIFIED IDEOGRAPH + {0x9163, 0x7956}, //2241 #CJK UNIFIED IDEOGRAPH + {0x9164, 0x79DF}, //2242 #CJK UNIFIED IDEOGRAPH + {0x9165, 0x7C97}, //2243 #CJK UNIFIED IDEOGRAPH + {0x9166, 0x7D20}, //2244 #CJK UNIFIED IDEOGRAPH + {0x9167, 0x7D44}, //2245 #CJK UNIFIED IDEOGRAPH + {0x9168, 0x8607}, //2246 #CJK UNIFIED IDEOGRAPH + {0x9169, 0x8A34}, //2247 #CJK UNIFIED IDEOGRAPH + {0x916A, 0x963B}, //2248 #CJK UNIFIED IDEOGRAPH + {0x916B, 0x9061}, //2249 #CJK UNIFIED IDEOGRAPH + {0x916C, 0x9F20}, //2250 #CJK UNIFIED IDEOGRAPH + {0x916D, 0x50E7}, //2251 #CJK UNIFIED IDEOGRAPH + {0x916E, 0x5275}, //2252 #CJK UNIFIED IDEOGRAPH + {0x916F, 0x53CC}, //2253 #CJK UNIFIED IDEOGRAPH + {0x9170, 0x53E2}, //2254 #CJK UNIFIED IDEOGRAPH + {0x9171, 0x5009}, //2255 #CJK UNIFIED IDEOGRAPH + {0x9172, 0x55AA}, //2256 #CJK UNIFIED IDEOGRAPH + {0x9173, 0x58EE}, //2257 #CJK UNIFIED IDEOGRAPH + {0x9174, 0x594F}, //2258 #CJK UNIFIED IDEOGRAPH + {0x9175, 0x723D}, //2259 #CJK UNIFIED IDEOGRAPH + {0x9176, 0x5B8B}, //2260 #CJK UNIFIED IDEOGRAPH + {0x9177, 0x5C64}, //2261 #CJK UNIFIED IDEOGRAPH + {0x9178, 0x531D}, //2262 #CJK UNIFIED IDEOGRAPH + {0x9179, 0x60E3}, //2263 #CJK UNIFIED IDEOGRAPH + {0x917A, 0x60F3}, //2264 #CJK UNIFIED IDEOGRAPH + {0x917B, 0x635C}, //2265 #CJK UNIFIED IDEOGRAPH + {0x917C, 0x6383}, //2266 #CJK UNIFIED IDEOGRAPH + {0x917D, 0x633F}, //2267 #CJK UNIFIED IDEOGRAPH + {0x917E, 0x63BB}, //2268 #CJK UNIFIED IDEOGRAPH + {0x9180, 0x64CD}, //2269 #CJK UNIFIED IDEOGRAPH + {0x9181, 0x65E9}, //2270 #CJK UNIFIED IDEOGRAPH + {0x9182, 0x66F9}, //2271 #CJK UNIFIED IDEOGRAPH + {0x9183, 0x5DE3}, //2272 #CJK UNIFIED IDEOGRAPH + {0x9184, 0x69CD}, //2273 #CJK UNIFIED IDEOGRAPH + {0x9185, 0x69FD}, //2274 #CJK UNIFIED IDEOGRAPH + {0x9186, 0x6F15}, //2275 #CJK UNIFIED IDEOGRAPH + {0x9187, 0x71E5}, //2276 #CJK UNIFIED IDEOGRAPH + {0x9188, 0x4E89}, //2277 #CJK UNIFIED IDEOGRAPH + {0x9189, 0x75E9}, //2278 #CJK UNIFIED IDEOGRAPH + {0x918A, 0x76F8}, //2279 #CJK UNIFIED IDEOGRAPH + {0x918B, 0x7A93}, //2280 #CJK UNIFIED IDEOGRAPH + {0x918C, 0x7CDF}, //2281 #CJK UNIFIED IDEOGRAPH + {0x918D, 0x7DCF}, //2282 #CJK UNIFIED IDEOGRAPH + {0x918E, 0x7D9C}, //2283 #CJK UNIFIED IDEOGRAPH + {0x918F, 0x8061}, //2284 #CJK UNIFIED IDEOGRAPH + {0x9190, 0x8349}, //2285 #CJK UNIFIED IDEOGRAPH + {0x9191, 0x8358}, //2286 #CJK UNIFIED IDEOGRAPH + {0x9192, 0x846C}, //2287 #CJK UNIFIED IDEOGRAPH + {0x9193, 0x84BC}, //2288 #CJK UNIFIED IDEOGRAPH + {0x9194, 0x85FB}, //2289 #CJK UNIFIED IDEOGRAPH + {0x9195, 0x88C5}, //2290 #CJK UNIFIED IDEOGRAPH + {0x9196, 0x8D70}, //2291 #CJK UNIFIED IDEOGRAPH + {0x9197, 0x9001}, //2292 #CJK UNIFIED IDEOGRAPH + {0x9198, 0x906D}, //2293 #CJK UNIFIED IDEOGRAPH + {0x9199, 0x9397}, //2294 #CJK UNIFIED IDEOGRAPH + {0x919A, 0x971C}, //2295 #CJK UNIFIED IDEOGRAPH + {0x919B, 0x9A12}, //2296 #CJK UNIFIED IDEOGRAPH + {0x919C, 0x50CF}, //2297 #CJK UNIFIED IDEOGRAPH + {0x919D, 0x5897}, //2298 #CJK UNIFIED IDEOGRAPH + {0x919E, 0x618E}, //2299 #CJK UNIFIED IDEOGRAPH + {0x919F, 0x81D3}, //2300 #CJK UNIFIED IDEOGRAPH + {0x91A0, 0x8535}, //2301 #CJK UNIFIED IDEOGRAPH + {0x91A1, 0x8D08}, //2302 #CJK UNIFIED IDEOGRAPH + {0x91A2, 0x9020}, //2303 #CJK UNIFIED IDEOGRAPH + {0x91A3, 0x4FC3}, //2304 #CJK UNIFIED IDEOGRAPH + {0x91A4, 0x5074}, //2305 #CJK UNIFIED IDEOGRAPH + {0x91A5, 0x5247}, //2306 #CJK UNIFIED IDEOGRAPH + {0x91A6, 0x5373}, //2307 #CJK UNIFIED IDEOGRAPH + {0x91A7, 0x606F}, //2308 #CJK UNIFIED IDEOGRAPH + {0x91A8, 0x6349}, //2309 #CJK UNIFIED IDEOGRAPH + {0x91A9, 0x675F}, //2310 #CJK UNIFIED IDEOGRAPH + {0x91AA, 0x6E2C}, //2311 #CJK UNIFIED IDEOGRAPH + {0x91AB, 0x8DB3}, //2312 #CJK UNIFIED IDEOGRAPH + {0x91AC, 0x901F}, //2313 #CJK UNIFIED IDEOGRAPH + {0x91AD, 0x4FD7}, //2314 #CJK UNIFIED IDEOGRAPH + {0x91AE, 0x5C5E}, //2315 #CJK UNIFIED IDEOGRAPH + {0x91AF, 0x8CCA}, //2316 #CJK UNIFIED IDEOGRAPH + {0x91B0, 0x65CF}, //2317 #CJK UNIFIED IDEOGRAPH + {0x91B1, 0x7D9A}, //2318 #CJK UNIFIED IDEOGRAPH + {0x91B2, 0x5352}, //2319 #CJK UNIFIED IDEOGRAPH + {0x91B3, 0x8896}, //2320 #CJK UNIFIED IDEOGRAPH + {0x91B4, 0x5176}, //2321 #CJK UNIFIED IDEOGRAPH + {0x91B5, 0x63C3}, //2322 #CJK UNIFIED IDEOGRAPH + {0x91B6, 0x5B58}, //2323 #CJK UNIFIED IDEOGRAPH + {0x91B7, 0x5B6B}, //2324 #CJK UNIFIED IDEOGRAPH + {0x91B8, 0x5C0A}, //2325 #CJK UNIFIED IDEOGRAPH + {0x91B9, 0x640D}, //2326 #CJK UNIFIED IDEOGRAPH + {0x91BA, 0x6751}, //2327 #CJK UNIFIED IDEOGRAPH + {0x91BB, 0x905C}, //2328 #CJK UNIFIED IDEOGRAPH + {0x91BC, 0x4ED6}, //2329 #CJK UNIFIED IDEOGRAPH + {0x91BD, 0x591A}, //2330 #CJK UNIFIED IDEOGRAPH + {0x91BE, 0x592A}, //2331 #CJK UNIFIED IDEOGRAPH + {0x91BF, 0x6C70}, //2332 #CJK UNIFIED IDEOGRAPH + {0x91C0, 0x8A51}, //2333 #CJK UNIFIED IDEOGRAPH + {0x91C1, 0x553E}, //2334 #CJK UNIFIED IDEOGRAPH + {0x91C2, 0x5815}, //2335 #CJK UNIFIED IDEOGRAPH + {0x91C3, 0x59A5}, //2336 #CJK UNIFIED IDEOGRAPH + {0x91C4, 0x60F0}, //2337 #CJK UNIFIED IDEOGRAPH + {0x91C5, 0x6253}, //2338 #CJK UNIFIED IDEOGRAPH + {0x91C6, 0x67C1}, //2339 #CJK UNIFIED IDEOGRAPH + {0x91C7, 0x8235}, //2340 #CJK UNIFIED IDEOGRAPH + {0x91C8, 0x6955}, //2341 #CJK UNIFIED IDEOGRAPH + {0x91C9, 0x9640}, //2342 #CJK UNIFIED IDEOGRAPH + {0x91CA, 0x99C4}, //2343 #CJK UNIFIED IDEOGRAPH + {0x91CB, 0x9A28}, //2344 #CJK UNIFIED IDEOGRAPH + {0x91CC, 0x4F53}, //2345 #CJK UNIFIED IDEOGRAPH + {0x91CD, 0x5806}, //2346 #CJK UNIFIED IDEOGRAPH + {0x91CE, 0x5BFE}, //2347 #CJK UNIFIED IDEOGRAPH + {0x91CF, 0x8010}, //2348 #CJK UNIFIED IDEOGRAPH + {0x91D0, 0x5CB1}, //2349 #CJK UNIFIED IDEOGRAPH + {0x91D1, 0x5E2F}, //2350 #CJK UNIFIED IDEOGRAPH + {0x91D2, 0x5F85}, //2351 #CJK UNIFIED IDEOGRAPH + {0x91D3, 0x6020}, //2352 #CJK UNIFIED IDEOGRAPH + {0x91D4, 0x614B}, //2353 #CJK UNIFIED IDEOGRAPH + {0x91D5, 0x6234}, //2354 #CJK UNIFIED IDEOGRAPH + {0x91D6, 0x66FF}, //2355 #CJK UNIFIED IDEOGRAPH + {0x91D7, 0x6CF0}, //2356 #CJK UNIFIED IDEOGRAPH + {0x91D8, 0x6EDE}, //2357 #CJK UNIFIED IDEOGRAPH + {0x91D9, 0x80CE}, //2358 #CJK UNIFIED IDEOGRAPH + {0x91DA, 0x817F}, //2359 #CJK UNIFIED IDEOGRAPH + {0x91DB, 0x82D4}, //2360 #CJK UNIFIED IDEOGRAPH + {0x91DC, 0x888B}, //2361 #CJK UNIFIED IDEOGRAPH + {0x91DD, 0x8CB8}, //2362 #CJK UNIFIED IDEOGRAPH + {0x91DE, 0x9000}, //2363 #CJK UNIFIED IDEOGRAPH + {0x91DF, 0x902E}, //2364 #CJK UNIFIED IDEOGRAPH + {0x91E0, 0x968A}, //2365 #CJK UNIFIED IDEOGRAPH + {0x91E1, 0x9EDB}, //2366 #CJK UNIFIED IDEOGRAPH + {0x91E2, 0x9BDB}, //2367 #CJK UNIFIED IDEOGRAPH + {0x91E3, 0x4EE3}, //2368 #CJK UNIFIED IDEOGRAPH + {0x91E4, 0x53F0}, //2369 #CJK UNIFIED IDEOGRAPH + {0x91E5, 0x5927}, //2370 #CJK UNIFIED IDEOGRAPH + {0x91E6, 0x7B2C}, //2371 #CJK UNIFIED IDEOGRAPH + {0x91E7, 0x918D}, //2372 #CJK UNIFIED IDEOGRAPH + {0x91E8, 0x984C}, //2373 #CJK UNIFIED IDEOGRAPH + {0x91E9, 0x9DF9}, //2374 #CJK UNIFIED IDEOGRAPH + {0x91EA, 0x6EDD}, //2375 #CJK UNIFIED IDEOGRAPH + {0x91EB, 0x7027}, //2376 #CJK UNIFIED IDEOGRAPH + {0x91EC, 0x5353}, //2377 #CJK UNIFIED IDEOGRAPH + {0x91ED, 0x5544}, //2378 #CJK UNIFIED IDEOGRAPH + {0x91EE, 0x5B85}, //2379 #CJK UNIFIED IDEOGRAPH + {0x91EF, 0x6258}, //2380 #CJK UNIFIED IDEOGRAPH + {0x91F0, 0x629E}, //2381 #CJK UNIFIED IDEOGRAPH + {0x91F1, 0x62D3}, //2382 #CJK UNIFIED IDEOGRAPH + {0x91F2, 0x6CA2}, //2383 #CJK UNIFIED IDEOGRAPH + {0x91F3, 0x6FEF}, //2384 #CJK UNIFIED IDEOGRAPH + {0x91F4, 0x7422}, //2385 #CJK UNIFIED IDEOGRAPH + {0x91F5, 0x8A17}, //2386 #CJK UNIFIED IDEOGRAPH + {0x91F6, 0x9438}, //2387 #CJK UNIFIED IDEOGRAPH + {0x91F7, 0x6FC1}, //2388 #CJK UNIFIED IDEOGRAPH + {0x91F8, 0x8AFE}, //2389 #CJK UNIFIED IDEOGRAPH + {0x91F9, 0x8338}, //2390 #CJK UNIFIED IDEOGRAPH + {0x91FA, 0x51E7}, //2391 #CJK UNIFIED IDEOGRAPH + {0x91FB, 0x86F8}, //2392 #CJK UNIFIED IDEOGRAPH + {0x91FC, 0x53EA}, //2393 #CJK UNIFIED IDEOGRAPH + {0x9240, 0x53E9}, //2394 #CJK UNIFIED IDEOGRAPH + {0x9241, 0x4F46}, //2395 #CJK UNIFIED IDEOGRAPH + {0x9242, 0x9054}, //2396 #CJK UNIFIED IDEOGRAPH + {0x9243, 0x8FB0}, //2397 #CJK UNIFIED IDEOGRAPH + {0x9244, 0x596A}, //2398 #CJK UNIFIED IDEOGRAPH + {0x9245, 0x8131}, //2399 #CJK UNIFIED IDEOGRAPH + {0x9246, 0x5DFD}, //2400 #CJK UNIFIED IDEOGRAPH + {0x9247, 0x7AEA}, //2401 #CJK UNIFIED IDEOGRAPH + {0x9248, 0x8FBF}, //2402 #CJK UNIFIED IDEOGRAPH + {0x9249, 0x68DA}, //2403 #CJK UNIFIED IDEOGRAPH + {0x924A, 0x8C37}, //2404 #CJK UNIFIED IDEOGRAPH + {0x924B, 0x72F8}, //2405 #CJK UNIFIED IDEOGRAPH + {0x924C, 0x9C48}, //2406 #CJK UNIFIED IDEOGRAPH + {0x924D, 0x6A3D}, //2407 #CJK UNIFIED IDEOGRAPH + {0x924E, 0x8AB0}, //2408 #CJK UNIFIED IDEOGRAPH + {0x924F, 0x4E39}, //2409 #CJK UNIFIED IDEOGRAPH + {0x9250, 0x5358}, //2410 #CJK UNIFIED IDEOGRAPH + {0x9251, 0x5606}, //2411 #CJK UNIFIED IDEOGRAPH + {0x9252, 0x5766}, //2412 #CJK UNIFIED IDEOGRAPH + {0x9253, 0x62C5}, //2413 #CJK UNIFIED IDEOGRAPH + {0x9254, 0x63A2}, //2414 #CJK UNIFIED IDEOGRAPH + {0x9255, 0x65E6}, //2415 #CJK UNIFIED IDEOGRAPH + {0x9256, 0x6B4E}, //2416 #CJK UNIFIED IDEOGRAPH + {0x9257, 0x6DE1}, //2417 #CJK UNIFIED IDEOGRAPH + {0x9258, 0x6E5B}, //2418 #CJK UNIFIED IDEOGRAPH + {0x9259, 0x70AD}, //2419 #CJK UNIFIED IDEOGRAPH + {0x925A, 0x77ED}, //2420 #CJK UNIFIED IDEOGRAPH + {0x925B, 0x7AEF}, //2421 #CJK UNIFIED IDEOGRAPH + {0x925C, 0x7BAA}, //2422 #CJK UNIFIED IDEOGRAPH + {0x925D, 0x7DBB}, //2423 #CJK UNIFIED IDEOGRAPH + {0x925E, 0x803D}, //2424 #CJK UNIFIED IDEOGRAPH + {0x925F, 0x80C6}, //2425 #CJK UNIFIED IDEOGRAPH + {0x9260, 0x86CB}, //2426 #CJK UNIFIED IDEOGRAPH + {0x9261, 0x8A95}, //2427 #CJK UNIFIED IDEOGRAPH + {0x9262, 0x935B}, //2428 #CJK UNIFIED IDEOGRAPH + {0x9263, 0x56E3}, //2429 #CJK UNIFIED IDEOGRAPH + {0x9264, 0x58C7}, //2430 #CJK UNIFIED IDEOGRAPH + {0x9265, 0x5F3E}, //2431 #CJK UNIFIED IDEOGRAPH + {0x9266, 0x65AD}, //2432 #CJK UNIFIED IDEOGRAPH + {0x9267, 0x6696}, //2433 #CJK UNIFIED IDEOGRAPH + {0x9268, 0x6A80}, //2434 #CJK UNIFIED IDEOGRAPH + {0x9269, 0x6BB5}, //2435 #CJK UNIFIED IDEOGRAPH + {0x926A, 0x7537}, //2436 #CJK UNIFIED IDEOGRAPH + {0x926B, 0x8AC7}, //2437 #CJK UNIFIED IDEOGRAPH + {0x926C, 0x5024}, //2438 #CJK UNIFIED IDEOGRAPH + {0x926D, 0x77E5}, //2439 #CJK UNIFIED IDEOGRAPH + {0x926E, 0x5730}, //2440 #CJK UNIFIED IDEOGRAPH + {0x926F, 0x5F1B}, //2441 #CJK UNIFIED IDEOGRAPH + {0x9270, 0x6065}, //2442 #CJK UNIFIED IDEOGRAPH + {0x9271, 0x667A}, //2443 #CJK UNIFIED IDEOGRAPH + {0x9272, 0x6C60}, //2444 #CJK UNIFIED IDEOGRAPH + {0x9273, 0x75F4}, //2445 #CJK UNIFIED IDEOGRAPH + {0x9274, 0x7A1A}, //2446 #CJK UNIFIED IDEOGRAPH + {0x9275, 0x7F6E}, //2447 #CJK UNIFIED IDEOGRAPH + {0x9276, 0x81F4}, //2448 #CJK UNIFIED IDEOGRAPH + {0x9277, 0x8718}, //2449 #CJK UNIFIED IDEOGRAPH + {0x9278, 0x9045}, //2450 #CJK UNIFIED IDEOGRAPH + {0x9279, 0x99B3}, //2451 #CJK UNIFIED IDEOGRAPH + {0x927A, 0x7BC9}, //2452 #CJK UNIFIED IDEOGRAPH + {0x927B, 0x755C}, //2453 #CJK UNIFIED IDEOGRAPH + {0x927C, 0x7AF9}, //2454 #CJK UNIFIED IDEOGRAPH + {0x927D, 0x7B51}, //2455 #CJK UNIFIED IDEOGRAPH + {0x927E, 0x84C4}, //2456 #CJK UNIFIED IDEOGRAPH + {0x9280, 0x9010}, //2457 #CJK UNIFIED IDEOGRAPH + {0x9281, 0x79E9}, //2458 #CJK UNIFIED IDEOGRAPH + {0x9282, 0x7A92}, //2459 #CJK UNIFIED IDEOGRAPH + {0x9283, 0x8336}, //2460 #CJK UNIFIED IDEOGRAPH + {0x9284, 0x5AE1}, //2461 #CJK UNIFIED IDEOGRAPH + {0x9285, 0x7740}, //2462 #CJK UNIFIED IDEOGRAPH + {0x9286, 0x4E2D}, //2463 #CJK UNIFIED IDEOGRAPH + {0x9287, 0x4EF2}, //2464 #CJK UNIFIED IDEOGRAPH + {0x9288, 0x5B99}, //2465 #CJK UNIFIED IDEOGRAPH + {0x9289, 0x5FE0}, //2466 #CJK UNIFIED IDEOGRAPH + {0x928A, 0x62BD}, //2467 #CJK UNIFIED IDEOGRAPH + {0x928B, 0x663C}, //2468 #CJK UNIFIED IDEOGRAPH + {0x928C, 0x67F1}, //2469 #CJK UNIFIED IDEOGRAPH + {0x928D, 0x6CE8}, //2470 #CJK UNIFIED IDEOGRAPH + {0x928E, 0x866B}, //2471 #CJK UNIFIED IDEOGRAPH + {0x928F, 0x8877}, //2472 #CJK UNIFIED IDEOGRAPH + {0x9290, 0x8A3B}, //2473 #CJK UNIFIED IDEOGRAPH + {0x9291, 0x914E}, //2474 #CJK UNIFIED IDEOGRAPH + {0x9292, 0x92F3}, //2475 #CJK UNIFIED IDEOGRAPH + {0x9293, 0x99D0}, //2476 #CJK UNIFIED IDEOGRAPH + {0x9294, 0x6A17}, //2477 #CJK UNIFIED IDEOGRAPH + {0x9295, 0x7026}, //2478 #CJK UNIFIED IDEOGRAPH + {0x9296, 0x732A}, //2479 #CJK UNIFIED IDEOGRAPH + {0x9297, 0x82E7}, //2480 #CJK UNIFIED IDEOGRAPH + {0x9298, 0x8457}, //2481 #CJK UNIFIED IDEOGRAPH + {0x9299, 0x8CAF}, //2482 #CJK UNIFIED IDEOGRAPH + {0x929A, 0x4E01}, //2483 #CJK UNIFIED IDEOGRAPH + {0x929B, 0x5146}, //2484 #CJK UNIFIED IDEOGRAPH + {0x929C, 0x51CB}, //2485 #CJK UNIFIED IDEOGRAPH + {0x929D, 0x558B}, //2486 #CJK UNIFIED IDEOGRAPH + {0x929E, 0x5BF5}, //2487 #CJK UNIFIED IDEOGRAPH + {0x929F, 0x5E16}, //2488 #CJK UNIFIED IDEOGRAPH + {0x92A0, 0x5E33}, //2489 #CJK UNIFIED IDEOGRAPH + {0x92A1, 0x5E81}, //2490 #CJK UNIFIED IDEOGRAPH + {0x92A2, 0x5F14}, //2491 #CJK UNIFIED IDEOGRAPH + {0x92A3, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH + {0x92A4, 0x5F6B}, //2493 #CJK UNIFIED IDEOGRAPH + {0x92A5, 0x5FB4}, //2494 #CJK UNIFIED IDEOGRAPH + {0x92A6, 0x61F2}, //2495 #CJK UNIFIED IDEOGRAPH + {0x92A7, 0x6311}, //2496 #CJK UNIFIED IDEOGRAPH + {0x92A8, 0x66A2}, //2497 #CJK UNIFIED IDEOGRAPH + {0x92A9, 0x671D}, //2498 #CJK UNIFIED IDEOGRAPH + {0x92AA, 0x6F6E}, //2499 #CJK UNIFIED IDEOGRAPH + {0x92AB, 0x7252}, //2500 #CJK UNIFIED IDEOGRAPH + {0x92AC, 0x753A}, //2501 #CJK UNIFIED IDEOGRAPH + {0x92AD, 0x773A}, //2502 #CJK UNIFIED IDEOGRAPH + {0x92AE, 0x8074}, //2503 #CJK UNIFIED IDEOGRAPH + {0x92AF, 0x8139}, //2504 #CJK UNIFIED IDEOGRAPH + {0x92B0, 0x8178}, //2505 #CJK UNIFIED IDEOGRAPH + {0x92B1, 0x8776}, //2506 #CJK UNIFIED IDEOGRAPH + {0x92B2, 0x8ABF}, //2507 #CJK UNIFIED IDEOGRAPH + {0x92B3, 0x8ADC}, //2508 #CJK UNIFIED IDEOGRAPH + {0x92B4, 0x8D85}, //2509 #CJK UNIFIED IDEOGRAPH + {0x92B5, 0x8DF3}, //2510 #CJK UNIFIED IDEOGRAPH + {0x92B6, 0x929A}, //2511 #CJK UNIFIED IDEOGRAPH + {0x92B7, 0x9577}, //2512 #CJK UNIFIED IDEOGRAPH + {0x92B8, 0x9802}, //2513 #CJK UNIFIED IDEOGRAPH + {0x92B9, 0x9CE5}, //2514 #CJK UNIFIED IDEOGRAPH + {0x92BA, 0x52C5}, //2515 #CJK UNIFIED IDEOGRAPH + {0x92BB, 0x6357}, //2516 #CJK UNIFIED IDEOGRAPH + {0x92BC, 0x76F4}, //2517 #CJK UNIFIED IDEOGRAPH + {0x92BD, 0x6715}, //2518 #CJK UNIFIED IDEOGRAPH + {0x92BE, 0x6C88}, //2519 #CJK UNIFIED IDEOGRAPH + {0x92BF, 0x73CD}, //2520 #CJK UNIFIED IDEOGRAPH + {0x92C0, 0x8CC3}, //2521 #CJK UNIFIED IDEOGRAPH + {0x92C1, 0x93AE}, //2522 #CJK UNIFIED IDEOGRAPH + {0x92C2, 0x9673}, //2523 #CJK UNIFIED IDEOGRAPH + {0x92C3, 0x6D25}, //2524 #CJK UNIFIED IDEOGRAPH + {0x92C4, 0x589C}, //2525 #CJK UNIFIED IDEOGRAPH + {0x92C5, 0x690E}, //2526 #CJK UNIFIED IDEOGRAPH + {0x92C6, 0x69CC}, //2527 #CJK UNIFIED IDEOGRAPH + {0x92C7, 0x8FFD}, //2528 #CJK UNIFIED IDEOGRAPH + {0x92C8, 0x939A}, //2529 #CJK UNIFIED IDEOGRAPH + {0x92C9, 0x75DB}, //2530 #CJK UNIFIED IDEOGRAPH + {0x92CA, 0x901A}, //2531 #CJK UNIFIED IDEOGRAPH + {0x92CB, 0x585A}, //2532 #CJK UNIFIED IDEOGRAPH + {0x92CC, 0x6802}, //2533 #CJK UNIFIED IDEOGRAPH + {0x92CD, 0x63B4}, //2534 #CJK UNIFIED IDEOGRAPH + {0x92CE, 0x69FB}, //2535 #CJK UNIFIED IDEOGRAPH + {0x92CF, 0x4F43}, //2536 #CJK UNIFIED IDEOGRAPH + {0x92D0, 0x6F2C}, //2537 #CJK UNIFIED IDEOGRAPH + {0x92D1, 0x67D8}, //2538 #CJK UNIFIED IDEOGRAPH + {0x92D2, 0x8FBB}, //2539 #CJK UNIFIED IDEOGRAPH + {0x92D3, 0x8526}, //2540 #CJK UNIFIED IDEOGRAPH + {0x92D4, 0x7DB4}, //2541 #CJK UNIFIED IDEOGRAPH + {0x92D5, 0x9354}, //2542 #CJK UNIFIED IDEOGRAPH + {0x92D6, 0x693F}, //2543 #CJK UNIFIED IDEOGRAPH + {0x92D7, 0x6F70}, //2544 #CJK UNIFIED IDEOGRAPH + {0x92D8, 0x576A}, //2545 #CJK UNIFIED IDEOGRAPH + {0x92D9, 0x58F7}, //2546 #CJK UNIFIED IDEOGRAPH + {0x92DA, 0x5B2C}, //2547 #CJK UNIFIED IDEOGRAPH + {0x92DB, 0x7D2C}, //2548 #CJK UNIFIED IDEOGRAPH + {0x92DC, 0x722A}, //2549 #CJK UNIFIED IDEOGRAPH + {0x92DD, 0x540A}, //2550 #CJK UNIFIED IDEOGRAPH + {0x92DE, 0x91E3}, //2551 #CJK UNIFIED IDEOGRAPH + {0x92DF, 0x9DB4}, //2552 #CJK UNIFIED IDEOGRAPH + {0x92E0, 0x4EAD}, //2553 #CJK UNIFIED IDEOGRAPH + {0x92E1, 0x4F4E}, //2554 #CJK UNIFIED IDEOGRAPH + {0x92E2, 0x505C}, //2555 #CJK UNIFIED IDEOGRAPH + {0x92E3, 0x5075}, //2556 #CJK UNIFIED IDEOGRAPH + {0x92E4, 0x5243}, //2557 #CJK UNIFIED IDEOGRAPH + {0x92E5, 0x8C9E}, //2558 #CJK UNIFIED IDEOGRAPH + {0x92E6, 0x5448}, //2559 #CJK UNIFIED IDEOGRAPH + {0x92E7, 0x5824}, //2560 #CJK UNIFIED IDEOGRAPH + {0x92E8, 0x5B9A}, //2561 #CJK UNIFIED IDEOGRAPH + {0x92E9, 0x5E1D}, //2562 #CJK UNIFIED IDEOGRAPH + {0x92EA, 0x5E95}, //2563 #CJK UNIFIED IDEOGRAPH + {0x92EB, 0x5EAD}, //2564 #CJK UNIFIED IDEOGRAPH + {0x92EC, 0x5EF7}, //2565 #CJK UNIFIED IDEOGRAPH + {0x92ED, 0x5F1F}, //2566 #CJK UNIFIED IDEOGRAPH + {0x92EE, 0x608C}, //2567 #CJK UNIFIED IDEOGRAPH + {0x92EF, 0x62B5}, //2568 #CJK UNIFIED IDEOGRAPH + {0x92F0, 0x633A}, //2569 #CJK UNIFIED IDEOGRAPH + {0x92F1, 0x63D0}, //2570 #CJK UNIFIED IDEOGRAPH + {0x92F2, 0x68AF}, //2571 #CJK UNIFIED IDEOGRAPH + {0x92F3, 0x6C40}, //2572 #CJK UNIFIED IDEOGRAPH + {0x92F4, 0x7887}, //2573 #CJK UNIFIED IDEOGRAPH + {0x92F5, 0x798E}, //2574 #CJK UNIFIED IDEOGRAPH + {0x92F6, 0x7A0B}, //2575 #CJK UNIFIED IDEOGRAPH + {0x92F7, 0x7DE0}, //2576 #CJK UNIFIED IDEOGRAPH + {0x92F8, 0x8247}, //2577 #CJK UNIFIED IDEOGRAPH + {0x92F9, 0x8A02}, //2578 #CJK UNIFIED IDEOGRAPH + {0x92FA, 0x8AE6}, //2579 #CJK UNIFIED IDEOGRAPH + {0x92FB, 0x8E44}, //2580 #CJK UNIFIED IDEOGRAPH + {0x92FC, 0x9013}, //2581 #CJK UNIFIED IDEOGRAPH + {0x9340, 0x90B8}, //2582 #CJK UNIFIED IDEOGRAPH + {0x9341, 0x912D}, //2583 #CJK UNIFIED IDEOGRAPH + {0x9342, 0x91D8}, //2584 #CJK UNIFIED IDEOGRAPH + {0x9343, 0x9F0E}, //2585 #CJK UNIFIED IDEOGRAPH + {0x9344, 0x6CE5}, //2586 #CJK UNIFIED IDEOGRAPH + {0x9345, 0x6458}, //2587 #CJK UNIFIED IDEOGRAPH + {0x9346, 0x64E2}, //2588 #CJK UNIFIED IDEOGRAPH + {0x9347, 0x6575}, //2589 #CJK UNIFIED IDEOGRAPH + {0x9348, 0x6EF4}, //2590 #CJK UNIFIED IDEOGRAPH + {0x9349, 0x7684}, //2591 #CJK UNIFIED IDEOGRAPH + {0x934A, 0x7B1B}, //2592 #CJK UNIFIED IDEOGRAPH + {0x934B, 0x9069}, //2593 #CJK UNIFIED IDEOGRAPH + {0x934C, 0x93D1}, //2594 #CJK UNIFIED IDEOGRAPH + {0x934D, 0x6EBA}, //2595 #CJK UNIFIED IDEOGRAPH + {0x934E, 0x54F2}, //2596 #CJK UNIFIED IDEOGRAPH + {0x934F, 0x5FB9}, //2597 #CJK UNIFIED IDEOGRAPH + {0x9350, 0x64A4}, //2598 #CJK UNIFIED IDEOGRAPH + {0x9351, 0x8F4D}, //2599 #CJK UNIFIED IDEOGRAPH + {0x9352, 0x8FED}, //2600 #CJK UNIFIED IDEOGRAPH + {0x9353, 0x9244}, //2601 #CJK UNIFIED IDEOGRAPH + {0x9354, 0x5178}, //2602 #CJK UNIFIED IDEOGRAPH + {0x9355, 0x586B}, //2603 #CJK UNIFIED IDEOGRAPH + {0x9356, 0x5929}, //2604 #CJK UNIFIED IDEOGRAPH + {0x9357, 0x5C55}, //2605 #CJK UNIFIED IDEOGRAPH + {0x9358, 0x5E97}, //2606 #CJK UNIFIED IDEOGRAPH + {0x9359, 0x6DFB}, //2607 #CJK UNIFIED IDEOGRAPH + {0x935A, 0x7E8F}, //2608 #CJK UNIFIED IDEOGRAPH + {0x935B, 0x751C}, //2609 #CJK UNIFIED IDEOGRAPH + {0x935C, 0x8CBC}, //2610 #CJK UNIFIED IDEOGRAPH + {0x935D, 0x8EE2}, //2611 #CJK UNIFIED IDEOGRAPH + {0x935E, 0x985B}, //2612 #CJK UNIFIED IDEOGRAPH + {0x935F, 0x70B9}, //2613 #CJK UNIFIED IDEOGRAPH + {0x9360, 0x4F1D}, //2614 #CJK UNIFIED IDEOGRAPH + {0x9361, 0x6BBF}, //2615 #CJK UNIFIED IDEOGRAPH + {0x9362, 0x6FB1}, //2616 #CJK UNIFIED IDEOGRAPH + {0x9363, 0x7530}, //2617 #CJK UNIFIED IDEOGRAPH + {0x9364, 0x96FB}, //2618 #CJK UNIFIED IDEOGRAPH + {0x9365, 0x514E}, //2619 #CJK UNIFIED IDEOGRAPH + {0x9366, 0x5410}, //2620 #CJK UNIFIED IDEOGRAPH + {0x9367, 0x5835}, //2621 #CJK UNIFIED IDEOGRAPH + {0x9368, 0x5857}, //2622 #CJK UNIFIED IDEOGRAPH + {0x9369, 0x59AC}, //2623 #CJK UNIFIED IDEOGRAPH + {0x936A, 0x5C60}, //2624 #CJK UNIFIED IDEOGRAPH + {0x936B, 0x5F92}, //2625 #CJK UNIFIED IDEOGRAPH + {0x936C, 0x6597}, //2626 #CJK UNIFIED IDEOGRAPH + {0x936D, 0x675C}, //2627 #CJK UNIFIED IDEOGRAPH + {0x936E, 0x6E21}, //2628 #CJK UNIFIED IDEOGRAPH + {0x936F, 0x767B}, //2629 #CJK UNIFIED IDEOGRAPH + {0x9370, 0x83DF}, //2630 #CJK UNIFIED IDEOGRAPH + {0x9371, 0x8CED}, //2631 #CJK UNIFIED IDEOGRAPH + {0x9372, 0x9014}, //2632 #CJK UNIFIED IDEOGRAPH + {0x9373, 0x90FD}, //2633 #CJK UNIFIED IDEOGRAPH + {0x9374, 0x934D}, //2634 #CJK UNIFIED IDEOGRAPH + {0x9375, 0x7825}, //2635 #CJK UNIFIED IDEOGRAPH + {0x9376, 0x783A}, //2636 #CJK UNIFIED IDEOGRAPH + {0x9377, 0x52AA}, //2637 #CJK UNIFIED IDEOGRAPH + {0x9378, 0x5EA6}, //2638 #CJK UNIFIED IDEOGRAPH + {0x9379, 0x571F}, //2639 #CJK UNIFIED IDEOGRAPH + {0x937A, 0x5974}, //2640 #CJK UNIFIED IDEOGRAPH + {0x937B, 0x6012}, //2641 #CJK UNIFIED IDEOGRAPH + {0x937C, 0x5012}, //2642 #CJK UNIFIED IDEOGRAPH + {0x937D, 0x515A}, //2643 #CJK UNIFIED IDEOGRAPH + {0x937E, 0x51AC}, //2644 #CJK UNIFIED IDEOGRAPH + {0x9380, 0x51CD}, //2645 #CJK UNIFIED IDEOGRAPH + {0x9381, 0x5200}, //2646 #CJK UNIFIED IDEOGRAPH + {0x9382, 0x5510}, //2647 #CJK UNIFIED IDEOGRAPH + {0x9383, 0x5854}, //2648 #CJK UNIFIED IDEOGRAPH + {0x9384, 0x5858}, //2649 #CJK UNIFIED IDEOGRAPH + {0x9385, 0x5957}, //2650 #CJK UNIFIED IDEOGRAPH + {0x9386, 0x5B95}, //2651 #CJK UNIFIED IDEOGRAPH + {0x9387, 0x5CF6}, //2652 #CJK UNIFIED IDEOGRAPH + {0x9388, 0x5D8B}, //2653 #CJK UNIFIED IDEOGRAPH + {0x9389, 0x60BC}, //2654 #CJK UNIFIED IDEOGRAPH + {0x938A, 0x6295}, //2655 #CJK UNIFIED IDEOGRAPH + {0x938B, 0x642D}, //2656 #CJK UNIFIED IDEOGRAPH + {0x938C, 0x6771}, //2657 #CJK UNIFIED IDEOGRAPH + {0x938D, 0x6843}, //2658 #CJK UNIFIED IDEOGRAPH + {0x938E, 0x68BC}, //2659 #CJK UNIFIED IDEOGRAPH + {0x938F, 0x68DF}, //2660 #CJK UNIFIED IDEOGRAPH + {0x9390, 0x76D7}, //2661 #CJK UNIFIED IDEOGRAPH + {0x9391, 0x6DD8}, //2662 #CJK UNIFIED IDEOGRAPH + {0x9392, 0x6E6F}, //2663 #CJK UNIFIED IDEOGRAPH + {0x9393, 0x6D9B}, //2664 #CJK UNIFIED IDEOGRAPH + {0x9394, 0x706F}, //2665 #CJK UNIFIED IDEOGRAPH + {0x9395, 0x71C8}, //2666 #CJK UNIFIED IDEOGRAPH + {0x9396, 0x5F53}, //2667 #CJK UNIFIED IDEOGRAPH + {0x9397, 0x75D8}, //2668 #CJK UNIFIED IDEOGRAPH + {0x9398, 0x7977}, //2669 #CJK UNIFIED IDEOGRAPH + {0x9399, 0x7B49}, //2670 #CJK UNIFIED IDEOGRAPH + {0x939A, 0x7B54}, //2671 #CJK UNIFIED IDEOGRAPH + {0x939B, 0x7B52}, //2672 #CJK UNIFIED IDEOGRAPH + {0x939C, 0x7CD6}, //2673 #CJK UNIFIED IDEOGRAPH + {0x939D, 0x7D71}, //2674 #CJK UNIFIED IDEOGRAPH + {0x939E, 0x5230}, //2675 #CJK UNIFIED IDEOGRAPH + {0x939F, 0x8463}, //2676 #CJK UNIFIED IDEOGRAPH + {0x93A0, 0x8569}, //2677 #CJK UNIFIED IDEOGRAPH + {0x93A1, 0x85E4}, //2678 #CJK UNIFIED IDEOGRAPH + {0x93A2, 0x8A0E}, //2679 #CJK UNIFIED IDEOGRAPH + {0x93A3, 0x8B04}, //2680 #CJK UNIFIED IDEOGRAPH + {0x93A4, 0x8C46}, //2681 #CJK UNIFIED IDEOGRAPH + {0x93A5, 0x8E0F}, //2682 #CJK UNIFIED IDEOGRAPH + {0x93A6, 0x9003}, //2683 #CJK UNIFIED IDEOGRAPH + {0x93A7, 0x900F}, //2684 #CJK UNIFIED IDEOGRAPH + {0x93A8, 0x9419}, //2685 #CJK UNIFIED IDEOGRAPH + {0x93A9, 0x9676}, //2686 #CJK UNIFIED IDEOGRAPH + {0x93AA, 0x982D}, //2687 #CJK UNIFIED IDEOGRAPH + {0x93AB, 0x9A30}, //2688 #CJK UNIFIED IDEOGRAPH + {0x93AC, 0x95D8}, //2689 #CJK UNIFIED IDEOGRAPH + {0x93AD, 0x50CD}, //2690 #CJK UNIFIED IDEOGRAPH + {0x93AE, 0x52D5}, //2691 #CJK UNIFIED IDEOGRAPH + {0x93AF, 0x540C}, //2692 #CJK UNIFIED IDEOGRAPH + {0x93B0, 0x5802}, //2693 #CJK UNIFIED IDEOGRAPH + {0x93B1, 0x5C0E}, //2694 #CJK UNIFIED IDEOGRAPH + {0x93B2, 0x61A7}, //2695 #CJK UNIFIED IDEOGRAPH + {0x93B3, 0x649E}, //2696 #CJK UNIFIED IDEOGRAPH + {0x93B4, 0x6D1E}, //2697 #CJK UNIFIED IDEOGRAPH + {0x93B5, 0x77B3}, //2698 #CJK UNIFIED IDEOGRAPH + {0x93B6, 0x7AE5}, //2699 #CJK UNIFIED IDEOGRAPH + {0x93B7, 0x80F4}, //2700 #CJK UNIFIED IDEOGRAPH + {0x93B8, 0x8404}, //2701 #CJK UNIFIED IDEOGRAPH + {0x93B9, 0x9053}, //2702 #CJK UNIFIED IDEOGRAPH + {0x93BA, 0x9285}, //2703 #CJK UNIFIED IDEOGRAPH + {0x93BB, 0x5CE0}, //2704 #CJK UNIFIED IDEOGRAPH + {0x93BC, 0x9D07}, //2705 #CJK UNIFIED IDEOGRAPH + {0x93BD, 0x533F}, //2706 #CJK UNIFIED IDEOGRAPH + {0x93BE, 0x5F97}, //2707 #CJK UNIFIED IDEOGRAPH + {0x93BF, 0x5FB3}, //2708 #CJK UNIFIED IDEOGRAPH + {0x93C0, 0x6D9C}, //2709 #CJK UNIFIED IDEOGRAPH + {0x93C1, 0x7279}, //2710 #CJK UNIFIED IDEOGRAPH + {0x93C2, 0x7763}, //2711 #CJK UNIFIED IDEOGRAPH + {0x93C3, 0x79BF}, //2712 #CJK UNIFIED IDEOGRAPH + {0x93C4, 0x7BE4}, //2713 #CJK UNIFIED IDEOGRAPH + {0x93C5, 0x6BD2}, //2714 #CJK UNIFIED IDEOGRAPH + {0x93C6, 0x72EC}, //2715 #CJK UNIFIED IDEOGRAPH + {0x93C7, 0x8AAD}, //2716 #CJK UNIFIED IDEOGRAPH + {0x93C8, 0x6803}, //2717 #CJK UNIFIED IDEOGRAPH + {0x93C9, 0x6A61}, //2718 #CJK UNIFIED IDEOGRAPH + {0x93CA, 0x51F8}, //2719 #CJK UNIFIED IDEOGRAPH + {0x93CB, 0x7A81}, //2720 #CJK UNIFIED IDEOGRAPH + {0x93CC, 0x6934}, //2721 #CJK UNIFIED IDEOGRAPH + {0x93CD, 0x5C4A}, //2722 #CJK UNIFIED IDEOGRAPH + {0x93CE, 0x9CF6}, //2723 #CJK UNIFIED IDEOGRAPH + {0x93CF, 0x82EB}, //2724 #CJK UNIFIED IDEOGRAPH + {0x93D0, 0x5BC5}, //2725 #CJK UNIFIED IDEOGRAPH + {0x93D1, 0x9149}, //2726 #CJK UNIFIED IDEOGRAPH + {0x93D2, 0x701E}, //2727 #CJK UNIFIED IDEOGRAPH + {0x93D3, 0x5678}, //2728 #CJK UNIFIED IDEOGRAPH + {0x93D4, 0x5C6F}, //2729 #CJK UNIFIED IDEOGRAPH + {0x93D5, 0x60C7}, //2730 #CJK UNIFIED IDEOGRAPH + {0x93D6, 0x6566}, //2731 #CJK UNIFIED IDEOGRAPH + {0x93D7, 0x6C8C}, //2732 #CJK UNIFIED IDEOGRAPH + {0x93D8, 0x8C5A}, //2733 #CJK UNIFIED IDEOGRAPH + {0x93D9, 0x9041}, //2734 #CJK UNIFIED IDEOGRAPH + {0x93DA, 0x9813}, //2735 #CJK UNIFIED IDEOGRAPH + {0x93DB, 0x5451}, //2736 #CJK UNIFIED IDEOGRAPH + {0x93DC, 0x66C7}, //2737 #CJK UNIFIED IDEOGRAPH + {0x93DD, 0x920D}, //2738 #CJK UNIFIED IDEOGRAPH + {0x93DE, 0x5948}, //2739 #CJK UNIFIED IDEOGRAPH + {0x93DF, 0x90A3}, //2740 #CJK UNIFIED IDEOGRAPH + {0x93E0, 0x5185}, //2741 #CJK UNIFIED IDEOGRAPH + {0x93E1, 0x4E4D}, //2742 #CJK UNIFIED IDEOGRAPH + {0x93E2, 0x51EA}, //2743 #CJK UNIFIED IDEOGRAPH + {0x93E3, 0x8599}, //2744 #CJK UNIFIED IDEOGRAPH + {0x93E4, 0x8B0E}, //2745 #CJK UNIFIED IDEOGRAPH + {0x93E5, 0x7058}, //2746 #CJK UNIFIED IDEOGRAPH + {0x93E6, 0x637A}, //2747 #CJK UNIFIED IDEOGRAPH + {0x93E7, 0x934B}, //2748 #CJK UNIFIED IDEOGRAPH + {0x93E8, 0x6962}, //2749 #CJK UNIFIED IDEOGRAPH + {0x93E9, 0x99B4}, //2750 #CJK UNIFIED IDEOGRAPH + {0x93EA, 0x7E04}, //2751 #CJK UNIFIED IDEOGRAPH + {0x93EB, 0x7577}, //2752 #CJK UNIFIED IDEOGRAPH + {0x93EC, 0x5357}, //2753 #CJK UNIFIED IDEOGRAPH + {0x93ED, 0x6960}, //2754 #CJK UNIFIED IDEOGRAPH + {0x93EE, 0x8EDF}, //2755 #CJK UNIFIED IDEOGRAPH + {0x93EF, 0x96E3}, //2756 #CJK UNIFIED IDEOGRAPH + {0x93F0, 0x6C5D}, //2757 #CJK UNIFIED IDEOGRAPH + {0x93F1, 0x4E8C}, //2758 #CJK UNIFIED IDEOGRAPH + {0x93F2, 0x5C3C}, //2759 #CJK UNIFIED IDEOGRAPH + {0x93F3, 0x5F10}, //2760 #CJK UNIFIED IDEOGRAPH + {0x93F4, 0x8FE9}, //2761 #CJK UNIFIED IDEOGRAPH + {0x93F5, 0x5302}, //2762 #CJK UNIFIED IDEOGRAPH + {0x93F6, 0x8CD1}, //2763 #CJK UNIFIED IDEOGRAPH + {0x93F7, 0x8089}, //2764 #CJK UNIFIED IDEOGRAPH + {0x93F8, 0x8679}, //2765 #CJK UNIFIED IDEOGRAPH + {0x93F9, 0x5EFF}, //2766 #CJK UNIFIED IDEOGRAPH + {0x93FA, 0x65E5}, //2767 #CJK UNIFIED IDEOGRAPH + {0x93FB, 0x4E73}, //2768 #CJK UNIFIED IDEOGRAPH + {0x93FC, 0x5165}, //2769 #CJK UNIFIED IDEOGRAPH + {0x9440, 0x5982}, //2770 #CJK UNIFIED IDEOGRAPH + {0x9441, 0x5C3F}, //2771 #CJK UNIFIED IDEOGRAPH + {0x9442, 0x97EE}, //2772 #CJK UNIFIED IDEOGRAPH + {0x9443, 0x4EFB}, //2773 #CJK UNIFIED IDEOGRAPH + {0x9444, 0x598A}, //2774 #CJK UNIFIED IDEOGRAPH + {0x9445, 0x5FCD}, //2775 #CJK UNIFIED IDEOGRAPH + {0x9446, 0x8A8D}, //2776 #CJK UNIFIED IDEOGRAPH + {0x9447, 0x6FE1}, //2777 #CJK UNIFIED IDEOGRAPH + {0x9448, 0x79B0}, //2778 #CJK UNIFIED IDEOGRAPH + {0x9449, 0x7962}, //2779 #CJK UNIFIED IDEOGRAPH + {0x944A, 0x5BE7}, //2780 #CJK UNIFIED IDEOGRAPH + {0x944B, 0x8471}, //2781 #CJK UNIFIED IDEOGRAPH + {0x944C, 0x732B}, //2782 #CJK UNIFIED IDEOGRAPH + {0x944D, 0x71B1}, //2783 #CJK UNIFIED IDEOGRAPH + {0x944E, 0x5E74}, //2784 #CJK UNIFIED IDEOGRAPH + {0x944F, 0x5FF5}, //2785 #CJK UNIFIED IDEOGRAPH + {0x9450, 0x637B}, //2786 #CJK UNIFIED IDEOGRAPH + {0x9451, 0x649A}, //2787 #CJK UNIFIED IDEOGRAPH + {0x9452, 0x71C3}, //2788 #CJK UNIFIED IDEOGRAPH + {0x9453, 0x7C98}, //2789 #CJK UNIFIED IDEOGRAPH + {0x9454, 0x4E43}, //2790 #CJK UNIFIED IDEOGRAPH + {0x9455, 0x5EFC}, //2791 #CJK UNIFIED IDEOGRAPH + {0x9456, 0x4E4B}, //2792 #CJK UNIFIED IDEOGRAPH + {0x9457, 0x57DC}, //2793 #CJK UNIFIED IDEOGRAPH + {0x9458, 0x56A2}, //2794 #CJK UNIFIED IDEOGRAPH + {0x9459, 0x60A9}, //2795 #CJK UNIFIED IDEOGRAPH + {0x945A, 0x6FC3}, //2796 #CJK UNIFIED IDEOGRAPH + {0x945B, 0x7D0D}, //2797 #CJK UNIFIED IDEOGRAPH + {0x945C, 0x80FD}, //2798 #CJK UNIFIED IDEOGRAPH + {0x945D, 0x8133}, //2799 #CJK UNIFIED IDEOGRAPH + {0x945E, 0x81BF}, //2800 #CJK UNIFIED IDEOGRAPH + {0x945F, 0x8FB2}, //2801 #CJK UNIFIED IDEOGRAPH + {0x9460, 0x8997}, //2802 #CJK UNIFIED IDEOGRAPH + {0x9461, 0x86A4}, //2803 #CJK UNIFIED IDEOGRAPH + {0x9462, 0x5DF4}, //2804 #CJK UNIFIED IDEOGRAPH + {0x9463, 0x628A}, //2805 #CJK UNIFIED IDEOGRAPH + {0x9464, 0x64AD}, //2806 #CJK UNIFIED IDEOGRAPH + {0x9465, 0x8987}, //2807 #CJK UNIFIED IDEOGRAPH + {0x9466, 0x6777}, //2808 #CJK UNIFIED IDEOGRAPH + {0x9467, 0x6CE2}, //2809 #CJK UNIFIED IDEOGRAPH + {0x9468, 0x6D3E}, //2810 #CJK UNIFIED IDEOGRAPH + {0x9469, 0x7436}, //2811 #CJK UNIFIED IDEOGRAPH + {0x946A, 0x7834}, //2812 #CJK UNIFIED IDEOGRAPH + {0x946B, 0x5A46}, //2813 #CJK UNIFIED IDEOGRAPH + {0x946C, 0x7F75}, //2814 #CJK UNIFIED IDEOGRAPH + {0x946D, 0x82AD}, //2815 #CJK UNIFIED IDEOGRAPH + {0x946E, 0x99AC}, //2816 #CJK UNIFIED IDEOGRAPH + {0x946F, 0x4FF3}, //2817 #CJK UNIFIED IDEOGRAPH + {0x9470, 0x5EC3}, //2818 #CJK UNIFIED IDEOGRAPH + {0x9471, 0x62DD}, //2819 #CJK UNIFIED IDEOGRAPH + {0x9472, 0x6392}, //2820 #CJK UNIFIED IDEOGRAPH + {0x9473, 0x6557}, //2821 #CJK UNIFIED IDEOGRAPH + {0x9474, 0x676F}, //2822 #CJK UNIFIED IDEOGRAPH + {0x9475, 0x76C3}, //2823 #CJK UNIFIED IDEOGRAPH + {0x9476, 0x724C}, //2824 #CJK UNIFIED IDEOGRAPH + {0x9477, 0x80CC}, //2825 #CJK UNIFIED IDEOGRAPH + {0x9478, 0x80BA}, //2826 #CJK UNIFIED IDEOGRAPH + {0x9479, 0x8F29}, //2827 #CJK UNIFIED IDEOGRAPH + {0x947A, 0x914D}, //2828 #CJK UNIFIED IDEOGRAPH + {0x947B, 0x500D}, //2829 #CJK UNIFIED IDEOGRAPH + {0x947C, 0x57F9}, //2830 #CJK UNIFIED IDEOGRAPH + {0x947D, 0x5A92}, //2831 #CJK UNIFIED IDEOGRAPH + {0x947E, 0x6885}, //2832 #CJK UNIFIED IDEOGRAPH + {0x9480, 0x6973}, //2833 #CJK UNIFIED IDEOGRAPH + {0x9481, 0x7164}, //2834 #CJK UNIFIED IDEOGRAPH + {0x9482, 0x72FD}, //2835 #CJK UNIFIED IDEOGRAPH + {0x9483, 0x8CB7}, //2836 #CJK UNIFIED IDEOGRAPH + {0x9484, 0x58F2}, //2837 #CJK UNIFIED IDEOGRAPH + {0x9485, 0x8CE0}, //2838 #CJK UNIFIED IDEOGRAPH + {0x9486, 0x966A}, //2839 #CJK UNIFIED IDEOGRAPH + {0x9487, 0x9019}, //2840 #CJK UNIFIED IDEOGRAPH + {0x9488, 0x877F}, //2841 #CJK UNIFIED IDEOGRAPH + {0x9489, 0x79E4}, //2842 #CJK UNIFIED IDEOGRAPH + {0x948A, 0x77E7}, //2843 #CJK UNIFIED IDEOGRAPH + {0x948B, 0x8429}, //2844 #CJK UNIFIED IDEOGRAPH + {0x948C, 0x4F2F}, //2845 #CJK UNIFIED IDEOGRAPH + {0x948D, 0x5265}, //2846 #CJK UNIFIED IDEOGRAPH + {0x948E, 0x535A}, //2847 #CJK UNIFIED IDEOGRAPH + {0x948F, 0x62CD}, //2848 #CJK UNIFIED IDEOGRAPH + {0x9490, 0x67CF}, //2849 #CJK UNIFIED IDEOGRAPH + {0x9491, 0x6CCA}, //2850 #CJK UNIFIED IDEOGRAPH + {0x9492, 0x767D}, //2851 #CJK UNIFIED IDEOGRAPH + {0x9493, 0x7B94}, //2852 #CJK UNIFIED IDEOGRAPH + {0x9494, 0x7C95}, //2853 #CJK UNIFIED IDEOGRAPH + {0x9495, 0x8236}, //2854 #CJK UNIFIED IDEOGRAPH + {0x9496, 0x8584}, //2855 #CJK UNIFIED IDEOGRAPH + {0x9497, 0x8FEB}, //2856 #CJK UNIFIED IDEOGRAPH + {0x9498, 0x66DD}, //2857 #CJK UNIFIED IDEOGRAPH + {0x9499, 0x6F20}, //2858 #CJK UNIFIED IDEOGRAPH + {0x949A, 0x7206}, //2859 #CJK UNIFIED IDEOGRAPH + {0x949B, 0x7E1B}, //2860 #CJK UNIFIED IDEOGRAPH + {0x949C, 0x83AB}, //2861 #CJK UNIFIED IDEOGRAPH + {0x949D, 0x99C1}, //2862 #CJK UNIFIED IDEOGRAPH + {0x949E, 0x9EA6}, //2863 #CJK UNIFIED IDEOGRAPH + {0x949F, 0x51FD}, //2864 #CJK UNIFIED IDEOGRAPH + {0x94A0, 0x7BB1}, //2865 #CJK UNIFIED IDEOGRAPH + {0x94A1, 0x7872}, //2866 #CJK UNIFIED IDEOGRAPH + {0x94A2, 0x7BB8}, //2867 #CJK UNIFIED IDEOGRAPH + {0x94A3, 0x8087}, //2868 #CJK UNIFIED IDEOGRAPH + {0x94A4, 0x7B48}, //2869 #CJK UNIFIED IDEOGRAPH + {0x94A5, 0x6AE8}, //2870 #CJK UNIFIED IDEOGRAPH + {0x94A6, 0x5E61}, //2871 #CJK UNIFIED IDEOGRAPH + {0x94A7, 0x808C}, //2872 #CJK UNIFIED IDEOGRAPH + {0x94A8, 0x7551}, //2873 #CJK UNIFIED IDEOGRAPH + {0x94A9, 0x7560}, //2874 #CJK UNIFIED IDEOGRAPH + {0x94AA, 0x516B}, //2875 #CJK UNIFIED IDEOGRAPH + {0x94AB, 0x9262}, //2876 #CJK UNIFIED IDEOGRAPH + {0x94AC, 0x6E8C}, //2877 #CJK UNIFIED IDEOGRAPH + {0x94AD, 0x767A}, //2878 #CJK UNIFIED IDEOGRAPH + {0x94AE, 0x9197}, //2879 #CJK UNIFIED IDEOGRAPH + {0x94AF, 0x9AEA}, //2880 #CJK UNIFIED IDEOGRAPH + {0x94B0, 0x4F10}, //2881 #CJK UNIFIED IDEOGRAPH + {0x94B1, 0x7F70}, //2882 #CJK UNIFIED IDEOGRAPH + {0x94B2, 0x629C}, //2883 #CJK UNIFIED IDEOGRAPH + {0x94B3, 0x7B4F}, //2884 #CJK UNIFIED IDEOGRAPH + {0x94B4, 0x95A5}, //2885 #CJK UNIFIED IDEOGRAPH + {0x94B5, 0x9CE9}, //2886 #CJK UNIFIED IDEOGRAPH + {0x94B6, 0x567A}, //2887 #CJK UNIFIED IDEOGRAPH + {0x94B7, 0x5859}, //2888 #CJK UNIFIED IDEOGRAPH + {0x94B8, 0x86E4}, //2889 #CJK UNIFIED IDEOGRAPH + {0x94B9, 0x96BC}, //2890 #CJK UNIFIED IDEOGRAPH + {0x94BA, 0x4F34}, //2891 #CJK UNIFIED IDEOGRAPH + {0x94BB, 0x5224}, //2892 #CJK UNIFIED IDEOGRAPH + {0x94BC, 0x534A}, //2893 #CJK UNIFIED IDEOGRAPH + {0x94BD, 0x53CD}, //2894 #CJK UNIFIED IDEOGRAPH + {0x94BE, 0x53DB}, //2895 #CJK UNIFIED IDEOGRAPH + {0x94BF, 0x5E06}, //2896 #CJK UNIFIED IDEOGRAPH + {0x94C0, 0x642C}, //2897 #CJK UNIFIED IDEOGRAPH + {0x94C1, 0x6591}, //2898 #CJK UNIFIED IDEOGRAPH + {0x94C2, 0x677F}, //2899 #CJK UNIFIED IDEOGRAPH + {0x94C3, 0x6C3E}, //2900 #CJK UNIFIED IDEOGRAPH + {0x94C4, 0x6C4E}, //2901 #CJK UNIFIED IDEOGRAPH + {0x94C5, 0x7248}, //2902 #CJK UNIFIED IDEOGRAPH + {0x94C6, 0x72AF}, //2903 #CJK UNIFIED IDEOGRAPH + {0x94C7, 0x73ED}, //2904 #CJK UNIFIED IDEOGRAPH + {0x94C8, 0x7554}, //2905 #CJK UNIFIED IDEOGRAPH + {0x94C9, 0x7E41}, //2906 #CJK UNIFIED IDEOGRAPH + {0x94CA, 0x822C}, //2907 #CJK UNIFIED IDEOGRAPH + {0x94CB, 0x85E9}, //2908 #CJK UNIFIED IDEOGRAPH + {0x94CC, 0x8CA9}, //2909 #CJK UNIFIED IDEOGRAPH + {0x94CD, 0x7BC4}, //2910 #CJK UNIFIED IDEOGRAPH + {0x94CE, 0x91C6}, //2911 #CJK UNIFIED IDEOGRAPH + {0x94CF, 0x7169}, //2912 #CJK UNIFIED IDEOGRAPH + {0x94D0, 0x9812}, //2913 #CJK UNIFIED IDEOGRAPH + {0x94D1, 0x98EF}, //2914 #CJK UNIFIED IDEOGRAPH + {0x94D2, 0x633D}, //2915 #CJK UNIFIED IDEOGRAPH + {0x94D3, 0x6669}, //2916 #CJK UNIFIED IDEOGRAPH + {0x94D4, 0x756A}, //2917 #CJK UNIFIED IDEOGRAPH + {0x94D5, 0x76E4}, //2918 #CJK UNIFIED IDEOGRAPH + {0x94D6, 0x78D0}, //2919 #CJK UNIFIED IDEOGRAPH + {0x94D7, 0x8543}, //2920 #CJK UNIFIED IDEOGRAPH + {0x94D8, 0x86EE}, //2921 #CJK UNIFIED IDEOGRAPH + {0x94D9, 0x532A}, //2922 #CJK UNIFIED IDEOGRAPH + {0x94DA, 0x5351}, //2923 #CJK UNIFIED IDEOGRAPH + {0x94DB, 0x5426}, //2924 #CJK UNIFIED IDEOGRAPH + {0x94DC, 0x5983}, //2925 #CJK UNIFIED IDEOGRAPH + {0x94DD, 0x5E87}, //2926 #CJK UNIFIED IDEOGRAPH + {0x94DE, 0x5F7C}, //2927 #CJK UNIFIED IDEOGRAPH + {0x94DF, 0x60B2}, //2928 #CJK UNIFIED IDEOGRAPH + {0x94E0, 0x6249}, //2929 #CJK UNIFIED IDEOGRAPH + {0x94E1, 0x6279}, //2930 #CJK UNIFIED IDEOGRAPH + {0x94E2, 0x62AB}, //2931 #CJK UNIFIED IDEOGRAPH + {0x94E3, 0x6590}, //2932 #CJK UNIFIED IDEOGRAPH + {0x94E4, 0x6BD4}, //2933 #CJK UNIFIED IDEOGRAPH + {0x94E5, 0x6CCC}, //2934 #CJK UNIFIED IDEOGRAPH + {0x94E6, 0x75B2}, //2935 #CJK UNIFIED IDEOGRAPH + {0x94E7, 0x76AE}, //2936 #CJK UNIFIED IDEOGRAPH + {0x94E8, 0x7891}, //2937 #CJK UNIFIED IDEOGRAPH + {0x94E9, 0x79D8}, //2938 #CJK UNIFIED IDEOGRAPH + {0x94EA, 0x7DCB}, //2939 #CJK UNIFIED IDEOGRAPH + {0x94EB, 0x7F77}, //2940 #CJK UNIFIED IDEOGRAPH + {0x94EC, 0x80A5}, //2941 #CJK UNIFIED IDEOGRAPH + {0x94ED, 0x88AB}, //2942 #CJK UNIFIED IDEOGRAPH + {0x94EE, 0x8AB9}, //2943 #CJK UNIFIED IDEOGRAPH + {0x94EF, 0x8CBB}, //2944 #CJK UNIFIED IDEOGRAPH + {0x94F0, 0x907F}, //2945 #CJK UNIFIED IDEOGRAPH + {0x94F1, 0x975E}, //2946 #CJK UNIFIED IDEOGRAPH + {0x94F2, 0x98DB}, //2947 #CJK UNIFIED IDEOGRAPH + {0x94F3, 0x6A0B}, //2948 #CJK UNIFIED IDEOGRAPH + {0x94F4, 0x7C38}, //2949 #CJK UNIFIED IDEOGRAPH + {0x94F5, 0x5099}, //2950 #CJK UNIFIED IDEOGRAPH + {0x94F6, 0x5C3E}, //2951 #CJK UNIFIED IDEOGRAPH + {0x94F7, 0x5FAE}, //2952 #CJK UNIFIED IDEOGRAPH + {0x94F8, 0x6787}, //2953 #CJK UNIFIED IDEOGRAPH + {0x94F9, 0x6BD8}, //2954 #CJK UNIFIED IDEOGRAPH + {0x94FA, 0x7435}, //2955 #CJK UNIFIED IDEOGRAPH + {0x94FB, 0x7709}, //2956 #CJK UNIFIED IDEOGRAPH + {0x94FC, 0x7F8E}, //2957 #CJK UNIFIED IDEOGRAPH + {0x9540, 0x9F3B}, //2958 #CJK UNIFIED IDEOGRAPH + {0x9541, 0x67CA}, //2959 #CJK UNIFIED IDEOGRAPH + {0x9542, 0x7A17}, //2960 #CJK UNIFIED IDEOGRAPH + {0x9543, 0x5339}, //2961 #CJK UNIFIED IDEOGRAPH + {0x9544, 0x758B}, //2962 #CJK UNIFIED IDEOGRAPH + {0x9545, 0x9AED}, //2963 #CJK UNIFIED IDEOGRAPH + {0x9546, 0x5F66}, //2964 #CJK UNIFIED IDEOGRAPH + {0x9547, 0x819D}, //2965 #CJK UNIFIED IDEOGRAPH + {0x9548, 0x83F1}, //2966 #CJK UNIFIED IDEOGRAPH + {0x9549, 0x8098}, //2967 #CJK UNIFIED IDEOGRAPH + {0x954A, 0x5F3C}, //2968 #CJK UNIFIED IDEOGRAPH + {0x954B, 0x5FC5}, //2969 #CJK UNIFIED IDEOGRAPH + {0x954C, 0x7562}, //2970 #CJK UNIFIED IDEOGRAPH + {0x954D, 0x7B46}, //2971 #CJK UNIFIED IDEOGRAPH + {0x954E, 0x903C}, //2972 #CJK UNIFIED IDEOGRAPH + {0x954F, 0x6867}, //2973 #CJK UNIFIED IDEOGRAPH + {0x9550, 0x59EB}, //2974 #CJK UNIFIED IDEOGRAPH + {0x9551, 0x5A9B}, //2975 #CJK UNIFIED IDEOGRAPH + {0x9552, 0x7D10}, //2976 #CJK UNIFIED IDEOGRAPH + {0x9553, 0x767E}, //2977 #CJK UNIFIED IDEOGRAPH + {0x9554, 0x8B2C}, //2978 #CJK UNIFIED IDEOGRAPH + {0x9555, 0x4FF5}, //2979 #CJK UNIFIED IDEOGRAPH + {0x9556, 0x5F6A}, //2980 #CJK UNIFIED IDEOGRAPH + {0x9557, 0x6A19}, //2981 #CJK UNIFIED IDEOGRAPH + {0x9558, 0x6C37}, //2982 #CJK UNIFIED IDEOGRAPH + {0x9559, 0x6F02}, //2983 #CJK UNIFIED IDEOGRAPH + {0x955A, 0x74E2}, //2984 #CJK UNIFIED IDEOGRAPH + {0x955B, 0x7968}, //2985 #CJK UNIFIED IDEOGRAPH + {0x955C, 0x8868}, //2986 #CJK UNIFIED IDEOGRAPH + {0x955D, 0x8A55}, //2987 #CJK UNIFIED IDEOGRAPH + {0x955E, 0x8C79}, //2988 #CJK UNIFIED IDEOGRAPH + {0x955F, 0x5EDF}, //2989 #CJK UNIFIED IDEOGRAPH + {0x9560, 0x63CF}, //2990 #CJK UNIFIED IDEOGRAPH + {0x9561, 0x75C5}, //2991 #CJK UNIFIED IDEOGRAPH + {0x9562, 0x79D2}, //2992 #CJK UNIFIED IDEOGRAPH + {0x9563, 0x82D7}, //2993 #CJK UNIFIED IDEOGRAPH + {0x9564, 0x9328}, //2994 #CJK UNIFIED IDEOGRAPH + {0x9565, 0x92F2}, //2995 #CJK UNIFIED IDEOGRAPH + {0x9566, 0x849C}, //2996 #CJK UNIFIED IDEOGRAPH + {0x9567, 0x86ED}, //2997 #CJK UNIFIED IDEOGRAPH + {0x9568, 0x9C2D}, //2998 #CJK UNIFIED IDEOGRAPH + {0x9569, 0x54C1}, //2999 #CJK UNIFIED IDEOGRAPH + {0x956A, 0x5F6C}, //3000 #CJK UNIFIED IDEOGRAPH + {0x956B, 0x658C}, //3001 #CJK UNIFIED IDEOGRAPH + {0x956C, 0x6D5C}, //3002 #CJK UNIFIED IDEOGRAPH + {0x956D, 0x7015}, //3003 #CJK UNIFIED IDEOGRAPH + {0x956E, 0x8CA7}, //3004 #CJK UNIFIED IDEOGRAPH + {0x956F, 0x8CD3}, //3005 #CJK UNIFIED IDEOGRAPH + {0x9570, 0x983B}, //3006 #CJK UNIFIED IDEOGRAPH + {0x9571, 0x654F}, //3007 #CJK UNIFIED IDEOGRAPH + {0x9572, 0x74F6}, //3008 #CJK UNIFIED IDEOGRAPH + {0x9573, 0x4E0D}, //3009 #CJK UNIFIED IDEOGRAPH + {0x9574, 0x4ED8}, //3010 #CJK UNIFIED IDEOGRAPH + {0x9575, 0x57E0}, //3011 #CJK UNIFIED IDEOGRAPH + {0x9576, 0x592B}, //3012 #CJK UNIFIED IDEOGRAPH + {0x9577, 0x5A66}, //3013 #CJK UNIFIED IDEOGRAPH + {0x9578, 0x5BCC}, //3014 #CJK UNIFIED IDEOGRAPH + {0x9579, 0x51A8}, //3015 #CJK UNIFIED IDEOGRAPH + {0x957A, 0x5E03}, //3016 #CJK UNIFIED IDEOGRAPH + {0x957B, 0x5E9C}, //3017 #CJK UNIFIED IDEOGRAPH + {0x957C, 0x6016}, //3018 #CJK UNIFIED IDEOGRAPH + {0x957D, 0x6276}, //3019 #CJK UNIFIED IDEOGRAPH + {0x957E, 0x6577}, //3020 #CJK UNIFIED IDEOGRAPH + {0x9580, 0x65A7}, //3021 #CJK UNIFIED IDEOGRAPH + {0x9581, 0x666E}, //3022 #CJK UNIFIED IDEOGRAPH + {0x9582, 0x6D6E}, //3023 #CJK UNIFIED IDEOGRAPH + {0x9583, 0x7236}, //3024 #CJK UNIFIED IDEOGRAPH + {0x9584, 0x7B26}, //3025 #CJK UNIFIED IDEOGRAPH + {0x9585, 0x8150}, //3026 #CJK UNIFIED IDEOGRAPH + {0x9586, 0x819A}, //3027 #CJK UNIFIED IDEOGRAPH + {0x9587, 0x8299}, //3028 #CJK UNIFIED IDEOGRAPH + {0x9588, 0x8B5C}, //3029 #CJK UNIFIED IDEOGRAPH + {0x9589, 0x8CA0}, //3030 #CJK UNIFIED IDEOGRAPH + {0x958A, 0x8CE6}, //3031 #CJK UNIFIED IDEOGRAPH + {0x958B, 0x8D74}, //3032 #CJK UNIFIED IDEOGRAPH + {0x958C, 0x961C}, //3033 #CJK UNIFIED IDEOGRAPH + {0x958D, 0x9644}, //3034 #CJK UNIFIED IDEOGRAPH + {0x958E, 0x4FAE}, //3035 #CJK UNIFIED IDEOGRAPH + {0x958F, 0x64AB}, //3036 #CJK UNIFIED IDEOGRAPH + {0x9590, 0x6B66}, //3037 #CJK UNIFIED IDEOGRAPH + {0x9591, 0x821E}, //3038 #CJK UNIFIED IDEOGRAPH + {0x9592, 0x8461}, //3039 #CJK UNIFIED IDEOGRAPH + {0x9593, 0x856A}, //3040 #CJK UNIFIED IDEOGRAPH + {0x9594, 0x90E8}, //3041 #CJK UNIFIED IDEOGRAPH + {0x9595, 0x5C01}, //3042 #CJK UNIFIED IDEOGRAPH + {0x9596, 0x6953}, //3043 #CJK UNIFIED IDEOGRAPH + {0x9597, 0x98A8}, //3044 #CJK UNIFIED IDEOGRAPH + {0x9598, 0x847A}, //3045 #CJK UNIFIED IDEOGRAPH + {0x9599, 0x8557}, //3046 #CJK UNIFIED IDEOGRAPH + {0x959A, 0x4F0F}, //3047 #CJK UNIFIED IDEOGRAPH + {0x959B, 0x526F}, //3048 #CJK UNIFIED IDEOGRAPH + {0x959C, 0x5FA9}, //3049 #CJK UNIFIED IDEOGRAPH + {0x959D, 0x5E45}, //3050 #CJK UNIFIED IDEOGRAPH + {0x959E, 0x670D}, //3051 #CJK UNIFIED IDEOGRAPH + {0x959F, 0x798F}, //3052 #CJK UNIFIED IDEOGRAPH + {0x95A0, 0x8179}, //3053 #CJK UNIFIED IDEOGRAPH + {0x95A1, 0x8907}, //3054 #CJK UNIFIED IDEOGRAPH + {0x95A2, 0x8986}, //3055 #CJK UNIFIED IDEOGRAPH + {0x95A3, 0x6DF5}, //3056 #CJK UNIFIED IDEOGRAPH + {0x95A4, 0x5F17}, //3057 #CJK UNIFIED IDEOGRAPH + {0x95A5, 0x6255}, //3058 #CJK UNIFIED IDEOGRAPH + {0x95A6, 0x6CB8}, //3059 #CJK UNIFIED IDEOGRAPH + {0x95A7, 0x4ECF}, //3060 #CJK UNIFIED IDEOGRAPH + {0x95A8, 0x7269}, //3061 #CJK UNIFIED IDEOGRAPH + {0x95A9, 0x9B92}, //3062 #CJK UNIFIED IDEOGRAPH + {0x95AA, 0x5206}, //3063 #CJK UNIFIED IDEOGRAPH + {0x95AB, 0x543B}, //3064 #CJK UNIFIED IDEOGRAPH + {0x95AC, 0x5674}, //3065 #CJK UNIFIED IDEOGRAPH + {0x95AD, 0x58B3}, //3066 #CJK UNIFIED IDEOGRAPH + {0x95AE, 0x61A4}, //3067 #CJK UNIFIED IDEOGRAPH + {0x95AF, 0x626E}, //3068 #CJK UNIFIED IDEOGRAPH + {0x95B0, 0x711A}, //3069 #CJK UNIFIED IDEOGRAPH + {0x95B1, 0x596E}, //3070 #CJK UNIFIED IDEOGRAPH + {0x95B2, 0x7C89}, //3071 #CJK UNIFIED IDEOGRAPH + {0x95B3, 0x7CDE}, //3072 #CJK UNIFIED IDEOGRAPH + {0x95B4, 0x7D1B}, //3073 #CJK UNIFIED IDEOGRAPH + {0x95B5, 0x96F0}, //3074 #CJK UNIFIED IDEOGRAPH + {0x95B6, 0x6587}, //3075 #CJK UNIFIED IDEOGRAPH + {0x95B7, 0x805E}, //3076 #CJK UNIFIED IDEOGRAPH + {0x95B8, 0x4E19}, //3077 #CJK UNIFIED IDEOGRAPH + {0x95B9, 0x4F75}, //3078 #CJK UNIFIED IDEOGRAPH + {0x95BA, 0x5175}, //3079 #CJK UNIFIED IDEOGRAPH + {0x95BB, 0x5840}, //3080 #CJK UNIFIED IDEOGRAPH + {0x95BC, 0x5E63}, //3081 #CJK UNIFIED IDEOGRAPH + {0x95BD, 0x5E73}, //3082 #CJK UNIFIED IDEOGRAPH + {0x95BE, 0x5F0A}, //3083 #CJK UNIFIED IDEOGRAPH + {0x95BF, 0x67C4}, //3084 #CJK UNIFIED IDEOGRAPH + {0x95C0, 0x4E26}, //3085 #CJK UNIFIED IDEOGRAPH + {0x95C1, 0x853D}, //3086 #CJK UNIFIED IDEOGRAPH + {0x95C2, 0x9589}, //3087 #CJK UNIFIED IDEOGRAPH + {0x95C3, 0x965B}, //3088 #CJK UNIFIED IDEOGRAPH + {0x95C4, 0x7C73}, //3089 #CJK UNIFIED IDEOGRAPH + {0x95C5, 0x9801}, //3090 #CJK UNIFIED IDEOGRAPH + {0x95C6, 0x50FB}, //3091 #CJK UNIFIED IDEOGRAPH + {0x95C7, 0x58C1}, //3092 #CJK UNIFIED IDEOGRAPH + {0x95C8, 0x7656}, //3093 #CJK UNIFIED IDEOGRAPH + {0x95C9, 0x78A7}, //3094 #CJK UNIFIED IDEOGRAPH + {0x95CA, 0x5225}, //3095 #CJK UNIFIED IDEOGRAPH + {0x95CB, 0x77A5}, //3096 #CJK UNIFIED IDEOGRAPH + {0x95CC, 0x8511}, //3097 #CJK UNIFIED IDEOGRAPH + {0x95CD, 0x7B86}, //3098 #CJK UNIFIED IDEOGRAPH + {0x95CE, 0x504F}, //3099 #CJK UNIFIED IDEOGRAPH + {0x95CF, 0x5909}, //3100 #CJK UNIFIED IDEOGRAPH + {0x95D0, 0x7247}, //3101 #CJK UNIFIED IDEOGRAPH + {0x95D1, 0x7BC7}, //3102 #CJK UNIFIED IDEOGRAPH + {0x95D2, 0x7DE8}, //3103 #CJK UNIFIED IDEOGRAPH + {0x95D3, 0x8FBA}, //3104 #CJK UNIFIED IDEOGRAPH + {0x95D4, 0x8FD4}, //3105 #CJK UNIFIED IDEOGRAPH + {0x95D5, 0x904D}, //3106 #CJK UNIFIED IDEOGRAPH + {0x95D6, 0x4FBF}, //3107 #CJK UNIFIED IDEOGRAPH + {0x95D7, 0x52C9}, //3108 #CJK UNIFIED IDEOGRAPH + {0x95D8, 0x5A29}, //3109 #CJK UNIFIED IDEOGRAPH + {0x95D9, 0x5F01}, //3110 #CJK UNIFIED IDEOGRAPH + {0x95DA, 0x97AD}, //3111 #CJK UNIFIED IDEOGRAPH + {0x95DB, 0x4FDD}, //3112 #CJK UNIFIED IDEOGRAPH + {0x95DC, 0x8217}, //3113 #CJK UNIFIED IDEOGRAPH + {0x95DD, 0x92EA}, //3114 #CJK UNIFIED IDEOGRAPH + {0x95DE, 0x5703}, //3115 #CJK UNIFIED IDEOGRAPH + {0x95DF, 0x6355}, //3116 #CJK UNIFIED IDEOGRAPH + {0x95E0, 0x6B69}, //3117 #CJK UNIFIED IDEOGRAPH + {0x95E1, 0x752B}, //3118 #CJK UNIFIED IDEOGRAPH + {0x95E2, 0x88DC}, //3119 #CJK UNIFIED IDEOGRAPH + {0x95E3, 0x8F14}, //3120 #CJK UNIFIED IDEOGRAPH + {0x95E4, 0x7A42}, //3121 #CJK UNIFIED IDEOGRAPH + {0x95E5, 0x52DF}, //3122 #CJK UNIFIED IDEOGRAPH + {0x95E6, 0x5893}, //3123 #CJK UNIFIED IDEOGRAPH + {0x95E7, 0x6155}, //3124 #CJK UNIFIED IDEOGRAPH + {0x95E8, 0x620A}, //3125 #CJK UNIFIED IDEOGRAPH + {0x95E9, 0x66AE}, //3126 #CJK UNIFIED IDEOGRAPH + {0x95EA, 0x6BCD}, //3127 #CJK UNIFIED IDEOGRAPH + {0x95EB, 0x7C3F}, //3128 #CJK UNIFIED IDEOGRAPH + {0x95EC, 0x83E9}, //3129 #CJK UNIFIED IDEOGRAPH + {0x95ED, 0x5023}, //3130 #CJK UNIFIED IDEOGRAPH + {0x95EE, 0x4FF8}, //3131 #CJK UNIFIED IDEOGRAPH + {0x95EF, 0x5305}, //3132 #CJK UNIFIED IDEOGRAPH + {0x95F0, 0x5446}, //3133 #CJK UNIFIED IDEOGRAPH + {0x95F1, 0x5831}, //3134 #CJK UNIFIED IDEOGRAPH + {0x95F2, 0x5949}, //3135 #CJK UNIFIED IDEOGRAPH + {0x95F3, 0x5B9D}, //3136 #CJK UNIFIED IDEOGRAPH + {0x95F4, 0x5CF0}, //3137 #CJK UNIFIED IDEOGRAPH + {0x95F5, 0x5CEF}, //3138 #CJK UNIFIED IDEOGRAPH + {0x95F6, 0x5D29}, //3139 #CJK UNIFIED IDEOGRAPH + {0x95F7, 0x5E96}, //3140 #CJK UNIFIED IDEOGRAPH + {0x95F8, 0x62B1}, //3141 #CJK UNIFIED IDEOGRAPH + {0x95F9, 0x6367}, //3142 #CJK UNIFIED IDEOGRAPH + {0x95FA, 0x653E}, //3143 #CJK UNIFIED IDEOGRAPH + {0x95FB, 0x65B9}, //3144 #CJK UNIFIED IDEOGRAPH + {0x95FC, 0x670B}, //3145 #CJK UNIFIED IDEOGRAPH + {0x9640, 0x6CD5}, //3146 #CJK UNIFIED IDEOGRAPH + {0x9641, 0x6CE1}, //3147 #CJK UNIFIED IDEOGRAPH + {0x9642, 0x70F9}, //3148 #CJK UNIFIED IDEOGRAPH + {0x9643, 0x7832}, //3149 #CJK UNIFIED IDEOGRAPH + {0x9644, 0x7E2B}, //3150 #CJK UNIFIED IDEOGRAPH + {0x9645, 0x80DE}, //3151 #CJK UNIFIED IDEOGRAPH + {0x9646, 0x82B3}, //3152 #CJK UNIFIED IDEOGRAPH + {0x9647, 0x840C}, //3153 #CJK UNIFIED IDEOGRAPH + {0x9648, 0x84EC}, //3154 #CJK UNIFIED IDEOGRAPH + {0x9649, 0x8702}, //3155 #CJK UNIFIED IDEOGRAPH + {0x964A, 0x8912}, //3156 #CJK UNIFIED IDEOGRAPH + {0x964B, 0x8A2A}, //3157 #CJK UNIFIED IDEOGRAPH + {0x964C, 0x8C4A}, //3158 #CJK UNIFIED IDEOGRAPH + {0x964D, 0x90A6}, //3159 #CJK UNIFIED IDEOGRAPH + {0x964E, 0x92D2}, //3160 #CJK UNIFIED IDEOGRAPH + {0x964F, 0x98FD}, //3161 #CJK UNIFIED IDEOGRAPH + {0x9650, 0x9CF3}, //3162 #CJK UNIFIED IDEOGRAPH + {0x9651, 0x9D6C}, //3163 #CJK UNIFIED IDEOGRAPH + {0x9652, 0x4E4F}, //3164 #CJK UNIFIED IDEOGRAPH + {0x9653, 0x4EA1}, //3165 #CJK UNIFIED IDEOGRAPH + {0x9654, 0x508D}, //3166 #CJK UNIFIED IDEOGRAPH + {0x9655, 0x5256}, //3167 #CJK UNIFIED IDEOGRAPH + {0x9656, 0x574A}, //3168 #CJK UNIFIED IDEOGRAPH + {0x9657, 0x59A8}, //3169 #CJK UNIFIED IDEOGRAPH + {0x9658, 0x5E3D}, //3170 #CJK UNIFIED IDEOGRAPH + {0x9659, 0x5FD8}, //3171 #CJK UNIFIED IDEOGRAPH + {0x965A, 0x5FD9}, //3172 #CJK UNIFIED IDEOGRAPH + {0x965B, 0x623F}, //3173 #CJK UNIFIED IDEOGRAPH + {0x965C, 0x66B4}, //3174 #CJK UNIFIED IDEOGRAPH + {0x965D, 0x671B}, //3175 #CJK UNIFIED IDEOGRAPH + {0x965E, 0x67D0}, //3176 #CJK UNIFIED IDEOGRAPH + {0x965F, 0x68D2}, //3177 #CJK UNIFIED IDEOGRAPH + {0x9660, 0x5192}, //3178 #CJK UNIFIED IDEOGRAPH + {0x9661, 0x7D21}, //3179 #CJK UNIFIED IDEOGRAPH + {0x9662, 0x80AA}, //3180 #CJK UNIFIED IDEOGRAPH + {0x9663, 0x81A8}, //3181 #CJK UNIFIED IDEOGRAPH + {0x9664, 0x8B00}, //3182 #CJK UNIFIED IDEOGRAPH + {0x9665, 0x8C8C}, //3183 #CJK UNIFIED IDEOGRAPH + {0x9666, 0x8CBF}, //3184 #CJK UNIFIED IDEOGRAPH + {0x9667, 0x927E}, //3185 #CJK UNIFIED IDEOGRAPH + {0x9668, 0x9632}, //3186 #CJK UNIFIED IDEOGRAPH + {0x9669, 0x5420}, //3187 #CJK UNIFIED IDEOGRAPH + {0x966A, 0x982C}, //3188 #CJK UNIFIED IDEOGRAPH + {0x966B, 0x5317}, //3189 #CJK UNIFIED IDEOGRAPH + {0x966C, 0x50D5}, //3190 #CJK UNIFIED IDEOGRAPH + {0x966D, 0x535C}, //3191 #CJK UNIFIED IDEOGRAPH + {0x966E, 0x58A8}, //3192 #CJK UNIFIED IDEOGRAPH + {0x966F, 0x64B2}, //3193 #CJK UNIFIED IDEOGRAPH + {0x9670, 0x6734}, //3194 #CJK UNIFIED IDEOGRAPH + {0x9671, 0x7267}, //3195 #CJK UNIFIED IDEOGRAPH + {0x9672, 0x7766}, //3196 #CJK UNIFIED IDEOGRAPH + {0x9673, 0x7A46}, //3197 #CJK UNIFIED IDEOGRAPH + {0x9674, 0x91E6}, //3198 #CJK UNIFIED IDEOGRAPH + {0x9675, 0x52C3}, //3199 #CJK UNIFIED IDEOGRAPH + {0x9676, 0x6CA1}, //3200 #CJK UNIFIED IDEOGRAPH + {0x9677, 0x6B86}, //3201 #CJK UNIFIED IDEOGRAPH + {0x9678, 0x5800}, //3202 #CJK UNIFIED IDEOGRAPH + {0x9679, 0x5E4C}, //3203 #CJK UNIFIED IDEOGRAPH + {0x967A, 0x5954}, //3204 #CJK UNIFIED IDEOGRAPH + {0x967B, 0x672C}, //3205 #CJK UNIFIED IDEOGRAPH + {0x967C, 0x7FFB}, //3206 #CJK UNIFIED IDEOGRAPH + {0x967D, 0x51E1}, //3207 #CJK UNIFIED IDEOGRAPH + {0x967E, 0x76C6}, //3208 #CJK UNIFIED IDEOGRAPH + {0x9680, 0x6469}, //3209 #CJK UNIFIED IDEOGRAPH + {0x9681, 0x78E8}, //3210 #CJK UNIFIED IDEOGRAPH + {0x9682, 0x9B54}, //3211 #CJK UNIFIED IDEOGRAPH + {0x9683, 0x9EBB}, //3212 #CJK UNIFIED IDEOGRAPH + {0x9684, 0x57CB}, //3213 #CJK UNIFIED IDEOGRAPH + {0x9685, 0x59B9}, //3214 #CJK UNIFIED IDEOGRAPH + {0x9686, 0x6627}, //3215 #CJK UNIFIED IDEOGRAPH + {0x9687, 0x679A}, //3216 #CJK UNIFIED IDEOGRAPH + {0x9688, 0x6BCE}, //3217 #CJK UNIFIED IDEOGRAPH + {0x9689, 0x54E9}, //3218 #CJK UNIFIED IDEOGRAPH + {0x968A, 0x69D9}, //3219 #CJK UNIFIED IDEOGRAPH + {0x968B, 0x5E55}, //3220 #CJK UNIFIED IDEOGRAPH + {0x968C, 0x819C}, //3221 #CJK UNIFIED IDEOGRAPH + {0x968D, 0x6795}, //3222 #CJK UNIFIED IDEOGRAPH + {0x968E, 0x9BAA}, //3223 #CJK UNIFIED IDEOGRAPH + {0x968F, 0x67FE}, //3224 #CJK UNIFIED IDEOGRAPH + {0x9690, 0x9C52}, //3225 #CJK UNIFIED IDEOGRAPH + {0x9691, 0x685D}, //3226 #CJK UNIFIED IDEOGRAPH + {0x9692, 0x4EA6}, //3227 #CJK UNIFIED IDEOGRAPH + {0x9693, 0x4FE3}, //3228 #CJK UNIFIED IDEOGRAPH + {0x9694, 0x53C8}, //3229 #CJK UNIFIED IDEOGRAPH + {0x9695, 0x62B9}, //3230 #CJK UNIFIED IDEOGRAPH + {0x9696, 0x672B}, //3231 #CJK UNIFIED IDEOGRAPH + {0x9697, 0x6CAB}, //3232 #CJK UNIFIED IDEOGRAPH + {0x9698, 0x8FC4}, //3233 #CJK UNIFIED IDEOGRAPH + {0x9699, 0x4FAD}, //3234 #CJK UNIFIED IDEOGRAPH + {0x969A, 0x7E6D}, //3235 #CJK UNIFIED IDEOGRAPH + {0x969B, 0x9EBF}, //3236 #CJK UNIFIED IDEOGRAPH + {0x969C, 0x4E07}, //3237 #CJK UNIFIED IDEOGRAPH + {0x969D, 0x6162}, //3238 #CJK UNIFIED IDEOGRAPH + {0x969E, 0x6E80}, //3239 #CJK UNIFIED IDEOGRAPH + {0x969F, 0x6F2B}, //3240 #CJK UNIFIED IDEOGRAPH + {0x96A0, 0x8513}, //3241 #CJK UNIFIED IDEOGRAPH + {0x96A1, 0x5473}, //3242 #CJK UNIFIED IDEOGRAPH + {0x96A2, 0x672A}, //3243 #CJK UNIFIED IDEOGRAPH + {0x96A3, 0x9B45}, //3244 #CJK UNIFIED IDEOGRAPH + {0x96A4, 0x5DF3}, //3245 #CJK UNIFIED IDEOGRAPH + {0x96A5, 0x7B95}, //3246 #CJK UNIFIED IDEOGRAPH + {0x96A6, 0x5CAC}, //3247 #CJK UNIFIED IDEOGRAPH + {0x96A7, 0x5BC6}, //3248 #CJK UNIFIED IDEOGRAPH + {0x96A8, 0x871C}, //3249 #CJK UNIFIED IDEOGRAPH + {0x96A9, 0x6E4A}, //3250 #CJK UNIFIED IDEOGRAPH + {0x96AA, 0x84D1}, //3251 #CJK UNIFIED IDEOGRAPH + {0x96AB, 0x7A14}, //3252 #CJK UNIFIED IDEOGRAPH + {0x96AC, 0x8108}, //3253 #CJK UNIFIED IDEOGRAPH + {0x96AD, 0x5999}, //3254 #CJK UNIFIED IDEOGRAPH + {0x96AE, 0x7C8D}, //3255 #CJK UNIFIED IDEOGRAPH + {0x96AF, 0x6C11}, //3256 #CJK UNIFIED IDEOGRAPH + {0x96B0, 0x7720}, //3257 #CJK UNIFIED IDEOGRAPH + {0x96B1, 0x52D9}, //3258 #CJK UNIFIED IDEOGRAPH + {0x96B2, 0x5922}, //3259 #CJK UNIFIED IDEOGRAPH + {0x96B3, 0x7121}, //3260 #CJK UNIFIED IDEOGRAPH + {0x96B4, 0x725F}, //3261 #CJK UNIFIED IDEOGRAPH + {0x96B5, 0x77DB}, //3262 #CJK UNIFIED IDEOGRAPH + {0x96B6, 0x9727}, //3263 #CJK UNIFIED IDEOGRAPH + {0x96B7, 0x9D61}, //3264 #CJK UNIFIED IDEOGRAPH + {0x96B8, 0x690B}, //3265 #CJK UNIFIED IDEOGRAPH + {0x96B9, 0x5A7F}, //3266 #CJK UNIFIED IDEOGRAPH + {0x96BA, 0x5A18}, //3267 #CJK UNIFIED IDEOGRAPH + {0x96BB, 0x51A5}, //3268 #CJK UNIFIED IDEOGRAPH + {0x96BC, 0x540D}, //3269 #CJK UNIFIED IDEOGRAPH + {0x96BD, 0x547D}, //3270 #CJK UNIFIED IDEOGRAPH + {0x96BE, 0x660E}, //3271 #CJK UNIFIED IDEOGRAPH + {0x96BF, 0x76DF}, //3272 #CJK UNIFIED IDEOGRAPH + {0x96C0, 0x8FF7}, //3273 #CJK UNIFIED IDEOGRAPH + {0x96C1, 0x9298}, //3274 #CJK UNIFIED IDEOGRAPH + {0x96C2, 0x9CF4}, //3275 #CJK UNIFIED IDEOGRAPH + {0x96C3, 0x59EA}, //3276 #CJK UNIFIED IDEOGRAPH + {0x96C4, 0x725D}, //3277 #CJK UNIFIED IDEOGRAPH + {0x96C5, 0x6EC5}, //3278 #CJK UNIFIED IDEOGRAPH + {0x96C6, 0x514D}, //3279 #CJK UNIFIED IDEOGRAPH + {0x96C7, 0x68C9}, //3280 #CJK UNIFIED IDEOGRAPH + {0x96C8, 0x7DBF}, //3281 #CJK UNIFIED IDEOGRAPH + {0x96C9, 0x7DEC}, //3282 #CJK UNIFIED IDEOGRAPH + {0x96CA, 0x9762}, //3283 #CJK UNIFIED IDEOGRAPH + {0x96CB, 0x9EBA}, //3284 #CJK UNIFIED IDEOGRAPH + {0x96CC, 0x6478}, //3285 #CJK UNIFIED IDEOGRAPH + {0x96CD, 0x6A21}, //3286 #CJK UNIFIED IDEOGRAPH + {0x96CE, 0x8302}, //3287 #CJK UNIFIED IDEOGRAPH + {0x96CF, 0x5984}, //3288 #CJK UNIFIED IDEOGRAPH + {0x96D0, 0x5B5F}, //3289 #CJK UNIFIED IDEOGRAPH + {0x96D1, 0x6BDB}, //3290 #CJK UNIFIED IDEOGRAPH + {0x96D2, 0x731B}, //3291 #CJK UNIFIED IDEOGRAPH + {0x96D3, 0x76F2}, //3292 #CJK UNIFIED IDEOGRAPH + {0x96D4, 0x7DB2}, //3293 #CJK UNIFIED IDEOGRAPH + {0x96D5, 0x8017}, //3294 #CJK UNIFIED IDEOGRAPH + {0x96D6, 0x8499}, //3295 #CJK UNIFIED IDEOGRAPH + {0x96D7, 0x5132}, //3296 #CJK UNIFIED IDEOGRAPH + {0x96D8, 0x6728}, //3297 #CJK UNIFIED IDEOGRAPH + {0x96D9, 0x9ED9}, //3298 #CJK UNIFIED IDEOGRAPH + {0x96DA, 0x76EE}, //3299 #CJK UNIFIED IDEOGRAPH + {0x96DB, 0x6762}, //3300 #CJK UNIFIED IDEOGRAPH + {0x96DC, 0x52FF}, //3301 #CJK UNIFIED IDEOGRAPH + {0x96DD, 0x9905}, //3302 #CJK UNIFIED IDEOGRAPH + {0x96DE, 0x5C24}, //3303 #CJK UNIFIED IDEOGRAPH + {0x96DF, 0x623B}, //3304 #CJK UNIFIED IDEOGRAPH + {0x96E0, 0x7C7E}, //3305 #CJK UNIFIED IDEOGRAPH + {0x96E1, 0x8CB0}, //3306 #CJK UNIFIED IDEOGRAPH + {0x96E2, 0x554F}, //3307 #CJK UNIFIED IDEOGRAPH + {0x96E3, 0x60B6}, //3308 #CJK UNIFIED IDEOGRAPH + {0x96E4, 0x7D0B}, //3309 #CJK UNIFIED IDEOGRAPH + {0x96E5, 0x9580}, //3310 #CJK UNIFIED IDEOGRAPH + {0x96E6, 0x5301}, //3311 #CJK UNIFIED IDEOGRAPH + {0x96E7, 0x4E5F}, //3312 #CJK UNIFIED IDEOGRAPH + {0x96E8, 0x51B6}, //3313 #CJK UNIFIED IDEOGRAPH + {0x96E9, 0x591C}, //3314 #CJK UNIFIED IDEOGRAPH + {0x96EA, 0x723A}, //3315 #CJK UNIFIED IDEOGRAPH + {0x96EB, 0x8036}, //3316 #CJK UNIFIED IDEOGRAPH + {0x96EC, 0x91CE}, //3317 #CJK UNIFIED IDEOGRAPH + {0x96ED, 0x5F25}, //3318 #CJK UNIFIED IDEOGRAPH + {0x96EE, 0x77E2}, //3319 #CJK UNIFIED IDEOGRAPH + {0x96EF, 0x5384}, //3320 #CJK UNIFIED IDEOGRAPH + {0x96F0, 0x5F79}, //3321 #CJK UNIFIED IDEOGRAPH + {0x96F1, 0x7D04}, //3322 #CJK UNIFIED IDEOGRAPH + {0x96F2, 0x85AC}, //3323 #CJK UNIFIED IDEOGRAPH + {0x96F3, 0x8A33}, //3324 #CJK UNIFIED IDEOGRAPH + {0x96F4, 0x8E8D}, //3325 #CJK UNIFIED IDEOGRAPH + {0x96F5, 0x9756}, //3326 #CJK UNIFIED IDEOGRAPH + {0x96F6, 0x67F3}, //3327 #CJK UNIFIED IDEOGRAPH + {0x96F7, 0x85AE}, //3328 #CJK UNIFIED IDEOGRAPH + {0x96F8, 0x9453}, //3329 #CJK UNIFIED IDEOGRAPH + {0x96F9, 0x6109}, //3330 #CJK UNIFIED IDEOGRAPH + {0x96FA, 0x6108}, //3331 #CJK UNIFIED IDEOGRAPH + {0x96FB, 0x6CB9}, //3332 #CJK UNIFIED IDEOGRAPH + {0x96FC, 0x7652}, //3333 #CJK UNIFIED IDEOGRAPH + {0x9740, 0x8AED}, //3334 #CJK UNIFIED IDEOGRAPH + {0x9741, 0x8F38}, //3335 #CJK UNIFIED IDEOGRAPH + {0x9742, 0x552F}, //3336 #CJK UNIFIED IDEOGRAPH + {0x9743, 0x4F51}, //3337 #CJK UNIFIED IDEOGRAPH + {0x9744, 0x512A}, //3338 #CJK UNIFIED IDEOGRAPH + {0x9745, 0x52C7}, //3339 #CJK UNIFIED IDEOGRAPH + {0x9746, 0x53CB}, //3340 #CJK UNIFIED IDEOGRAPH + {0x9747, 0x5BA5}, //3341 #CJK UNIFIED IDEOGRAPH + {0x9748, 0x5E7D}, //3342 #CJK UNIFIED IDEOGRAPH + {0x9749, 0x60A0}, //3343 #CJK UNIFIED IDEOGRAPH + {0x974A, 0x6182}, //3344 #CJK UNIFIED IDEOGRAPH + {0x974B, 0x63D6}, //3345 #CJK UNIFIED IDEOGRAPH + {0x974C, 0x6709}, //3346 #CJK UNIFIED IDEOGRAPH + {0x974D, 0x67DA}, //3347 #CJK UNIFIED IDEOGRAPH + {0x974E, 0x6E67}, //3348 #CJK UNIFIED IDEOGRAPH + {0x974F, 0x6D8C}, //3349 #CJK UNIFIED IDEOGRAPH + {0x9750, 0x7336}, //3350 #CJK UNIFIED IDEOGRAPH + {0x9751, 0x7337}, //3351 #CJK UNIFIED IDEOGRAPH + {0x9752, 0x7531}, //3352 #CJK UNIFIED IDEOGRAPH + {0x9753, 0x7950}, //3353 #CJK UNIFIED IDEOGRAPH + {0x9754, 0x88D5}, //3354 #CJK UNIFIED IDEOGRAPH + {0x9755, 0x8A98}, //3355 #CJK UNIFIED IDEOGRAPH + {0x9756, 0x904A}, //3356 #CJK UNIFIED IDEOGRAPH + {0x9757, 0x9091}, //3357 #CJK UNIFIED IDEOGRAPH + {0x9758, 0x90F5}, //3358 #CJK UNIFIED IDEOGRAPH + {0x9759, 0x96C4}, //3359 #CJK UNIFIED IDEOGRAPH + {0x975A, 0x878D}, //3360 #CJK UNIFIED IDEOGRAPH + {0x975B, 0x5915}, //3361 #CJK UNIFIED IDEOGRAPH + {0x975C, 0x4E88}, //3362 #CJK UNIFIED IDEOGRAPH + {0x975D, 0x4F59}, //3363 #CJK UNIFIED IDEOGRAPH + {0x975E, 0x4E0E}, //3364 #CJK UNIFIED IDEOGRAPH + {0x975F, 0x8A89}, //3365 #CJK UNIFIED IDEOGRAPH + {0x9760, 0x8F3F}, //3366 #CJK UNIFIED IDEOGRAPH + {0x9761, 0x9810}, //3367 #CJK UNIFIED IDEOGRAPH + {0x9762, 0x50AD}, //3368 #CJK UNIFIED IDEOGRAPH + {0x9763, 0x5E7C}, //3369 #CJK UNIFIED IDEOGRAPH + {0x9764, 0x5996}, //3370 #CJK UNIFIED IDEOGRAPH + {0x9765, 0x5BB9}, //3371 #CJK UNIFIED IDEOGRAPH + {0x9766, 0x5EB8}, //3372 #CJK UNIFIED IDEOGRAPH + {0x9767, 0x63DA}, //3373 #CJK UNIFIED IDEOGRAPH + {0x9768, 0x63FA}, //3374 #CJK UNIFIED IDEOGRAPH + {0x9769, 0x64C1}, //3375 #CJK UNIFIED IDEOGRAPH + {0x976A, 0x66DC}, //3376 #CJK UNIFIED IDEOGRAPH + {0x976B, 0x694A}, //3377 #CJK UNIFIED IDEOGRAPH + {0x976C, 0x69D8}, //3378 #CJK UNIFIED IDEOGRAPH + {0x976D, 0x6D0B}, //3379 #CJK UNIFIED IDEOGRAPH + {0x976E, 0x6EB6}, //3380 #CJK UNIFIED IDEOGRAPH + {0x976F, 0x7194}, //3381 #CJK UNIFIED IDEOGRAPH + {0x9770, 0x7528}, //3382 #CJK UNIFIED IDEOGRAPH + {0x9771, 0x7AAF}, //3383 #CJK UNIFIED IDEOGRAPH + {0x9772, 0x7F8A}, //3384 #CJK UNIFIED IDEOGRAPH + {0x9773, 0x8000}, //3385 #CJK UNIFIED IDEOGRAPH + {0x9774, 0x8449}, //3386 #CJK UNIFIED IDEOGRAPH + {0x9775, 0x84C9}, //3387 #CJK UNIFIED IDEOGRAPH + {0x9776, 0x8981}, //3388 #CJK UNIFIED IDEOGRAPH + {0x9777, 0x8B21}, //3389 #CJK UNIFIED IDEOGRAPH + {0x9778, 0x8E0A}, //3390 #CJK UNIFIED IDEOGRAPH + {0x9779, 0x9065}, //3391 #CJK UNIFIED IDEOGRAPH + {0x977A, 0x967D}, //3392 #CJK UNIFIED IDEOGRAPH + {0x977B, 0x990A}, //3393 #CJK UNIFIED IDEOGRAPH + {0x977C, 0x617E}, //3394 #CJK UNIFIED IDEOGRAPH + {0x977D, 0x6291}, //3395 #CJK UNIFIED IDEOGRAPH + {0x977E, 0x6B32}, //3396 #CJK UNIFIED IDEOGRAPH + {0x9780, 0x6C83}, //3397 #CJK UNIFIED IDEOGRAPH + {0x9781, 0x6D74}, //3398 #CJK UNIFIED IDEOGRAPH + {0x9782, 0x7FCC}, //3399 #CJK UNIFIED IDEOGRAPH + {0x9783, 0x7FFC}, //3400 #CJK UNIFIED IDEOGRAPH + {0x9784, 0x6DC0}, //3401 #CJK UNIFIED IDEOGRAPH + {0x9785, 0x7F85}, //3402 #CJK UNIFIED IDEOGRAPH + {0x9786, 0x87BA}, //3403 #CJK UNIFIED IDEOGRAPH + {0x9787, 0x88F8}, //3404 #CJK UNIFIED IDEOGRAPH + {0x9788, 0x6765}, //3405 #CJK UNIFIED IDEOGRAPH + {0x9789, 0x83B1}, //3406 #CJK UNIFIED IDEOGRAPH + {0x978A, 0x983C}, //3407 #CJK UNIFIED IDEOGRAPH + {0x978B, 0x96F7}, //3408 #CJK UNIFIED IDEOGRAPH + {0x978C, 0x6D1B}, //3409 #CJK UNIFIED IDEOGRAPH + {0x978D, 0x7D61}, //3410 #CJK UNIFIED IDEOGRAPH + {0x978E, 0x843D}, //3411 #CJK UNIFIED IDEOGRAPH + {0x978F, 0x916A}, //3412 #CJK UNIFIED IDEOGRAPH + {0x9790, 0x4E71}, //3413 #CJK UNIFIED IDEOGRAPH + {0x9791, 0x5375}, //3414 #CJK UNIFIED IDEOGRAPH + {0x9792, 0x5D50}, //3415 #CJK UNIFIED IDEOGRAPH + {0x9793, 0x6B04}, //3416 #CJK UNIFIED IDEOGRAPH + {0x9794, 0x6FEB}, //3417 #CJK UNIFIED IDEOGRAPH + {0x9795, 0x85CD}, //3418 #CJK UNIFIED IDEOGRAPH + {0x9796, 0x862D}, //3419 #CJK UNIFIED IDEOGRAPH + {0x9797, 0x89A7}, //3420 #CJK UNIFIED IDEOGRAPH + {0x9798, 0x5229}, //3421 #CJK UNIFIED IDEOGRAPH + {0x9799, 0x540F}, //3422 #CJK UNIFIED IDEOGRAPH + {0x979A, 0x5C65}, //3423 #CJK UNIFIED IDEOGRAPH + {0x979B, 0x674E}, //3424 #CJK UNIFIED IDEOGRAPH + {0x979C, 0x68A8}, //3425 #CJK UNIFIED IDEOGRAPH + {0x979D, 0x7406}, //3426 #CJK UNIFIED IDEOGRAPH + {0x979E, 0x7483}, //3427 #CJK UNIFIED IDEOGRAPH + {0x979F, 0x75E2}, //3428 #CJK UNIFIED IDEOGRAPH + {0x97A0, 0x88CF}, //3429 #CJK UNIFIED IDEOGRAPH + {0x97A1, 0x88E1}, //3430 #CJK UNIFIED IDEOGRAPH + {0x97A2, 0x91CC}, //3431 #CJK UNIFIED IDEOGRAPH + {0x97A3, 0x96E2}, //3432 #CJK UNIFIED IDEOGRAPH + {0x97A4, 0x9678}, //3433 #CJK UNIFIED IDEOGRAPH + {0x97A5, 0x5F8B}, //3434 #CJK UNIFIED IDEOGRAPH + {0x97A6, 0x7387}, //3435 #CJK UNIFIED IDEOGRAPH + {0x97A7, 0x7ACB}, //3436 #CJK UNIFIED IDEOGRAPH + {0x97A8, 0x844E}, //3437 #CJK UNIFIED IDEOGRAPH + {0x97A9, 0x63A0}, //3438 #CJK UNIFIED IDEOGRAPH + {0x97AA, 0x7565}, //3439 #CJK UNIFIED IDEOGRAPH + {0x97AB, 0x5289}, //3440 #CJK UNIFIED IDEOGRAPH + {0x97AC, 0x6D41}, //3441 #CJK UNIFIED IDEOGRAPH + {0x97AD, 0x6E9C}, //3442 #CJK UNIFIED IDEOGRAPH + {0x97AE, 0x7409}, //3443 #CJK UNIFIED IDEOGRAPH + {0x97AF, 0x7559}, //3444 #CJK UNIFIED IDEOGRAPH + {0x97B0, 0x786B}, //3445 #CJK UNIFIED IDEOGRAPH + {0x97B1, 0x7C92}, //3446 #CJK UNIFIED IDEOGRAPH + {0x97B2, 0x9686}, //3447 #CJK UNIFIED IDEOGRAPH + {0x97B3, 0x7ADC}, //3448 #CJK UNIFIED IDEOGRAPH + {0x97B4, 0x9F8D}, //3449 #CJK UNIFIED IDEOGRAPH + {0x97B5, 0x4FB6}, //3450 #CJK UNIFIED IDEOGRAPH + {0x97B6, 0x616E}, //3451 #CJK UNIFIED IDEOGRAPH + {0x97B7, 0x65C5}, //3452 #CJK UNIFIED IDEOGRAPH + {0x97B8, 0x865C}, //3453 #CJK UNIFIED IDEOGRAPH + {0x97B9, 0x4E86}, //3454 #CJK UNIFIED IDEOGRAPH + {0x97BA, 0x4EAE}, //3455 #CJK UNIFIED IDEOGRAPH + {0x97BB, 0x50DA}, //3456 #CJK UNIFIED IDEOGRAPH + {0x97BC, 0x4E21}, //3457 #CJK UNIFIED IDEOGRAPH + {0x97BD, 0x51CC}, //3458 #CJK UNIFIED IDEOGRAPH + {0x97BE, 0x5BEE}, //3459 #CJK UNIFIED IDEOGRAPH + {0x97BF, 0x6599}, //3460 #CJK UNIFIED IDEOGRAPH + {0x97C0, 0x6881}, //3461 #CJK UNIFIED IDEOGRAPH + {0x97C1, 0x6DBC}, //3462 #CJK UNIFIED IDEOGRAPH + {0x97C2, 0x731F}, //3463 #CJK UNIFIED IDEOGRAPH + {0x97C3, 0x7642}, //3464 #CJK UNIFIED IDEOGRAPH + {0x97C4, 0x77AD}, //3465 #CJK UNIFIED IDEOGRAPH + {0x97C5, 0x7A1C}, //3466 #CJK UNIFIED IDEOGRAPH + {0x97C6, 0x7CE7}, //3467 #CJK UNIFIED IDEOGRAPH + {0x97C7, 0x826F}, //3468 #CJK UNIFIED IDEOGRAPH + {0x97C8, 0x8AD2}, //3469 #CJK UNIFIED IDEOGRAPH + {0x97C9, 0x907C}, //3470 #CJK UNIFIED IDEOGRAPH + {0x97CA, 0x91CF}, //3471 #CJK UNIFIED IDEOGRAPH + {0x97CB, 0x9675}, //3472 #CJK UNIFIED IDEOGRAPH + {0x97CC, 0x9818}, //3473 #CJK UNIFIED IDEOGRAPH + {0x97CD, 0x529B}, //3474 #CJK UNIFIED IDEOGRAPH + {0x97CE, 0x7DD1}, //3475 #CJK UNIFIED IDEOGRAPH + {0x97CF, 0x502B}, //3476 #CJK UNIFIED IDEOGRAPH + {0x97D0, 0x5398}, //3477 #CJK UNIFIED IDEOGRAPH + {0x97D1, 0x6797}, //3478 #CJK UNIFIED IDEOGRAPH + {0x97D2, 0x6DCB}, //3479 #CJK UNIFIED IDEOGRAPH + {0x97D3, 0x71D0}, //3480 #CJK UNIFIED IDEOGRAPH + {0x97D4, 0x7433}, //3481 #CJK UNIFIED IDEOGRAPH + {0x97D5, 0x81E8}, //3482 #CJK UNIFIED IDEOGRAPH + {0x97D6, 0x8F2A}, //3483 #CJK UNIFIED IDEOGRAPH + {0x97D7, 0x96A3}, //3484 #CJK UNIFIED IDEOGRAPH + {0x97D8, 0x9C57}, //3485 #CJK UNIFIED IDEOGRAPH + {0x97D9, 0x9E9F}, //3486 #CJK UNIFIED IDEOGRAPH + {0x97DA, 0x7460}, //3487 #CJK UNIFIED IDEOGRAPH + {0x97DB, 0x5841}, //3488 #CJK UNIFIED IDEOGRAPH + {0x97DC, 0x6D99}, //3489 #CJK UNIFIED IDEOGRAPH + {0x97DD, 0x7D2F}, //3490 #CJK UNIFIED IDEOGRAPH + {0x97DE, 0x985E}, //3491 #CJK UNIFIED IDEOGRAPH + {0x97DF, 0x4EE4}, //3492 #CJK UNIFIED IDEOGRAPH + {0x97E0, 0x4F36}, //3493 #CJK UNIFIED IDEOGRAPH + {0x97E1, 0x4F8B}, //3494 #CJK UNIFIED IDEOGRAPH + {0x97E2, 0x51B7}, //3495 #CJK UNIFIED IDEOGRAPH + {0x97E3, 0x52B1}, //3496 #CJK UNIFIED IDEOGRAPH + {0x97E4, 0x5DBA}, //3497 #CJK UNIFIED IDEOGRAPH + {0x97E5, 0x601C}, //3498 #CJK UNIFIED IDEOGRAPH + {0x97E6, 0x73B2}, //3499 #CJK UNIFIED IDEOGRAPH + {0x97E7, 0x793C}, //3500 #CJK UNIFIED IDEOGRAPH + {0x97E8, 0x82D3}, //3501 #CJK UNIFIED IDEOGRAPH + {0x97E9, 0x9234}, //3502 #CJK UNIFIED IDEOGRAPH + {0x97EA, 0x96B7}, //3503 #CJK UNIFIED IDEOGRAPH + {0x97EB, 0x96F6}, //3504 #CJK UNIFIED IDEOGRAPH + {0x97EC, 0x970A}, //3505 #CJK UNIFIED IDEOGRAPH + {0x97ED, 0x9E97}, //3506 #CJK UNIFIED IDEOGRAPH + {0x97EE, 0x9F62}, //3507 #CJK UNIFIED IDEOGRAPH + {0x97EF, 0x66A6}, //3508 #CJK UNIFIED IDEOGRAPH + {0x97F0, 0x6B74}, //3509 #CJK UNIFIED IDEOGRAPH + {0x97F1, 0x5217}, //3510 #CJK UNIFIED IDEOGRAPH + {0x97F2, 0x52A3}, //3511 #CJK UNIFIED IDEOGRAPH + {0x97F3, 0x70C8}, //3512 #CJK UNIFIED IDEOGRAPH + {0x97F4, 0x88C2}, //3513 #CJK UNIFIED IDEOGRAPH + {0x97F5, 0x5EC9}, //3514 #CJK UNIFIED IDEOGRAPH + {0x97F6, 0x604B}, //3515 #CJK UNIFIED IDEOGRAPH + {0x97F7, 0x6190}, //3516 #CJK UNIFIED IDEOGRAPH + {0x97F8, 0x6F23}, //3517 #CJK UNIFIED IDEOGRAPH + {0x97F9, 0x7149}, //3518 #CJK UNIFIED IDEOGRAPH + {0x97FA, 0x7C3E}, //3519 #CJK UNIFIED IDEOGRAPH + {0x97FB, 0x7DF4}, //3520 #CJK UNIFIED IDEOGRAPH + {0x97FC, 0x806F}, //3521 #CJK UNIFIED IDEOGRAPH + {0x9840, 0x84EE}, //3522 #CJK UNIFIED IDEOGRAPH + {0x9841, 0x9023}, //3523 #CJK UNIFIED IDEOGRAPH + {0x9842, 0x932C}, //3524 #CJK UNIFIED IDEOGRAPH + {0x9843, 0x5442}, //3525 #CJK UNIFIED IDEOGRAPH + {0x9844, 0x9B6F}, //3526 #CJK UNIFIED IDEOGRAPH + {0x9845, 0x6AD3}, //3527 #CJK UNIFIED IDEOGRAPH + {0x9846, 0x7089}, //3528 #CJK UNIFIED IDEOGRAPH + {0x9847, 0x8CC2}, //3529 #CJK UNIFIED IDEOGRAPH + {0x9848, 0x8DEF}, //3530 #CJK UNIFIED IDEOGRAPH + {0x9849, 0x9732}, //3531 #CJK UNIFIED IDEOGRAPH + {0x984A, 0x52B4}, //3532 #CJK UNIFIED IDEOGRAPH + {0x984B, 0x5A41}, //3533 #CJK UNIFIED IDEOGRAPH + {0x984C, 0x5ECA}, //3534 #CJK UNIFIED IDEOGRAPH + {0x984D, 0x5F04}, //3535 #CJK UNIFIED IDEOGRAPH + {0x984E, 0x6717}, //3536 #CJK UNIFIED IDEOGRAPH + {0x984F, 0x697C}, //3537 #CJK UNIFIED IDEOGRAPH + {0x9850, 0x6994}, //3538 #CJK UNIFIED IDEOGRAPH + {0x9851, 0x6D6A}, //3539 #CJK UNIFIED IDEOGRAPH + {0x9852, 0x6F0F}, //3540 #CJK UNIFIED IDEOGRAPH + {0x9853, 0x7262}, //3541 #CJK UNIFIED IDEOGRAPH + {0x9854, 0x72FC}, //3542 #CJK UNIFIED IDEOGRAPH + {0x9855, 0x7BED}, //3543 #CJK UNIFIED IDEOGRAPH + {0x9856, 0x8001}, //3544 #CJK UNIFIED IDEOGRAPH + {0x9857, 0x807E}, //3545 #CJK UNIFIED IDEOGRAPH + {0x9858, 0x874B}, //3546 #CJK UNIFIED IDEOGRAPH + {0x9859, 0x90CE}, //3547 #CJK UNIFIED IDEOGRAPH + {0x985A, 0x516D}, //3548 #CJK UNIFIED IDEOGRAPH + {0x985B, 0x9E93}, //3549 #CJK UNIFIED IDEOGRAPH + {0x985C, 0x7984}, //3550 #CJK UNIFIED IDEOGRAPH + {0x985D, 0x808B}, //3551 #CJK UNIFIED IDEOGRAPH + {0x985E, 0x9332}, //3552 #CJK UNIFIED IDEOGRAPH + {0x985F, 0x8AD6}, //3553 #CJK UNIFIED IDEOGRAPH + {0x9860, 0x502D}, //3554 #CJK UNIFIED IDEOGRAPH + {0x9861, 0x548C}, //3555 #CJK UNIFIED IDEOGRAPH + {0x9862, 0x8A71}, //3556 #CJK UNIFIED IDEOGRAPH + {0x9863, 0x6B6A}, //3557 #CJK UNIFIED IDEOGRAPH + {0x9864, 0x8CC4}, //3558 #CJK UNIFIED IDEOGRAPH + {0x9865, 0x8107}, //3559 #CJK UNIFIED IDEOGRAPH + {0x9866, 0x60D1}, //3560 #CJK UNIFIED IDEOGRAPH + {0x9867, 0x67A0}, //3561 #CJK UNIFIED IDEOGRAPH + {0x9868, 0x9DF2}, //3562 #CJK UNIFIED IDEOGRAPH + {0x9869, 0x4E99}, //3563 #CJK UNIFIED IDEOGRAPH + {0x986A, 0x4E98}, //3564 #CJK UNIFIED IDEOGRAPH + {0x986B, 0x9C10}, //3565 #CJK UNIFIED IDEOGRAPH + {0x986C, 0x8A6B}, //3566 #CJK UNIFIED IDEOGRAPH + {0x986D, 0x85C1}, //3567 #CJK UNIFIED IDEOGRAPH + {0x986E, 0x8568}, //3568 #CJK UNIFIED IDEOGRAPH + {0x986F, 0x6900}, //3569 #CJK UNIFIED IDEOGRAPH + {0x9870, 0x6E7E}, //3570 #CJK UNIFIED IDEOGRAPH + {0x9871, 0x7897}, //3571 #CJK UNIFIED IDEOGRAPH + {0x9872, 0x8155}, //3572 #CJK UNIFIED IDEOGRAPH + {0x989F, 0x5F0C}, //3573 #CJK UNIFIED IDEOGRAPH + {0x98A0, 0x4E10}, //3574 #CJK UNIFIED IDEOGRAPH + {0x98A1, 0x4E15}, //3575 #CJK UNIFIED IDEOGRAPH + {0x98A2, 0x4E2A}, //3576 #CJK UNIFIED IDEOGRAPH + {0x98A3, 0x4E31}, //3577 #CJK UNIFIED IDEOGRAPH + {0x98A4, 0x4E36}, //3578 #CJK UNIFIED IDEOGRAPH + {0x98A5, 0x4E3C}, //3579 #CJK UNIFIED IDEOGRAPH + {0x98A6, 0x4E3F}, //3580 #CJK UNIFIED IDEOGRAPH + {0x98A7, 0x4E42}, //3581 #CJK UNIFIED IDEOGRAPH + {0x98A8, 0x4E56}, //3582 #CJK UNIFIED IDEOGRAPH + {0x98A9, 0x4E58}, //3583 #CJK UNIFIED IDEOGRAPH + {0x98AA, 0x4E82}, //3584 #CJK UNIFIED IDEOGRAPH + {0x98AB, 0x4E85}, //3585 #CJK UNIFIED IDEOGRAPH + {0x98AC, 0x8C6B}, //3586 #CJK UNIFIED IDEOGRAPH + {0x98AD, 0x4E8A}, //3587 #CJK UNIFIED IDEOGRAPH + {0x98AE, 0x8212}, //3588 #CJK UNIFIED IDEOGRAPH + {0x98AF, 0x5F0D}, //3589 #CJK UNIFIED IDEOGRAPH + {0x98B0, 0x4E8E}, //3590 #CJK UNIFIED IDEOGRAPH + {0x98B1, 0x4E9E}, //3591 #CJK UNIFIED IDEOGRAPH + {0x98B2, 0x4E9F}, //3592 #CJK UNIFIED IDEOGRAPH + {0x98B3, 0x4EA0}, //3593 #CJK UNIFIED IDEOGRAPH + {0x98B4, 0x4EA2}, //3594 #CJK UNIFIED IDEOGRAPH + {0x98B5, 0x4EB0}, //3595 #CJK UNIFIED IDEOGRAPH + {0x98B6, 0x4EB3}, //3596 #CJK UNIFIED IDEOGRAPH + {0x98B7, 0x4EB6}, //3597 #CJK UNIFIED IDEOGRAPH + {0x98B8, 0x4ECE}, //3598 #CJK UNIFIED IDEOGRAPH + {0x98B9, 0x4ECD}, //3599 #CJK UNIFIED IDEOGRAPH + {0x98BA, 0x4EC4}, //3600 #CJK UNIFIED IDEOGRAPH + {0x98BB, 0x4EC6}, //3601 #CJK UNIFIED IDEOGRAPH + {0x98BC, 0x4EC2}, //3602 #CJK UNIFIED IDEOGRAPH + {0x98BD, 0x4ED7}, //3603 #CJK UNIFIED IDEOGRAPH + {0x98BE, 0x4EDE}, //3604 #CJK UNIFIED IDEOGRAPH + {0x98BF, 0x4EED}, //3605 #CJK UNIFIED IDEOGRAPH + {0x98C0, 0x4EDF}, //3606 #CJK UNIFIED IDEOGRAPH + {0x98C1, 0x4EF7}, //3607 #CJK UNIFIED IDEOGRAPH + {0x98C2, 0x4F09}, //3608 #CJK UNIFIED IDEOGRAPH + {0x98C3, 0x4F5A}, //3609 #CJK UNIFIED IDEOGRAPH + {0x98C4, 0x4F30}, //3610 #CJK UNIFIED IDEOGRAPH + {0x98C5, 0x4F5B}, //3611 #CJK UNIFIED IDEOGRAPH + {0x98C6, 0x4F5D}, //3612 #CJK UNIFIED IDEOGRAPH + {0x98C7, 0x4F57}, //3613 #CJK UNIFIED IDEOGRAPH + {0x98C8, 0x4F47}, //3614 #CJK UNIFIED IDEOGRAPH + {0x98C9, 0x4F76}, //3615 #CJK UNIFIED IDEOGRAPH + {0x98CA, 0x4F88}, //3616 #CJK UNIFIED IDEOGRAPH + {0x98CB, 0x4F8F}, //3617 #CJK UNIFIED IDEOGRAPH + {0x98CC, 0x4F98}, //3618 #CJK UNIFIED IDEOGRAPH + {0x98CD, 0x4F7B}, //3619 #CJK UNIFIED IDEOGRAPH + {0x98CE, 0x4F69}, //3620 #CJK UNIFIED IDEOGRAPH + {0x98CF, 0x4F70}, //3621 #CJK UNIFIED IDEOGRAPH + {0x98D0, 0x4F91}, //3622 #CJK UNIFIED IDEOGRAPH + {0x98D1, 0x4F6F}, //3623 #CJK UNIFIED IDEOGRAPH + {0x98D2, 0x4F86}, //3624 #CJK UNIFIED IDEOGRAPH + {0x98D3, 0x4F96}, //3625 #CJK UNIFIED IDEOGRAPH + {0x98D4, 0x5118}, //3626 #CJK UNIFIED IDEOGRAPH + {0x98D5, 0x4FD4}, //3627 #CJK UNIFIED IDEOGRAPH + {0x98D6, 0x4FDF}, //3628 #CJK UNIFIED IDEOGRAPH + {0x98D7, 0x4FCE}, //3629 #CJK UNIFIED IDEOGRAPH + {0x98D8, 0x4FD8}, //3630 #CJK UNIFIED IDEOGRAPH + {0x98D9, 0x4FDB}, //3631 #CJK UNIFIED IDEOGRAPH + {0x98DA, 0x4FD1}, //3632 #CJK UNIFIED IDEOGRAPH + {0x98DB, 0x4FDA}, //3633 #CJK UNIFIED IDEOGRAPH + {0x98DC, 0x4FD0}, //3634 #CJK UNIFIED IDEOGRAPH + {0x98DD, 0x4FE4}, //3635 #CJK UNIFIED IDEOGRAPH + {0x98DE, 0x4FE5}, //3636 #CJK UNIFIED IDEOGRAPH + {0x98DF, 0x501A}, //3637 #CJK UNIFIED IDEOGRAPH + {0x98E0, 0x5028}, //3638 #CJK UNIFIED IDEOGRAPH + {0x98E1, 0x5014}, //3639 #CJK UNIFIED IDEOGRAPH + {0x98E2, 0x502A}, //3640 #CJK UNIFIED IDEOGRAPH + {0x98E3, 0x5025}, //3641 #CJK UNIFIED IDEOGRAPH + {0x98E4, 0x5005}, //3642 #CJK UNIFIED IDEOGRAPH + {0x98E5, 0x4F1C}, //3643 #CJK UNIFIED IDEOGRAPH + {0x98E6, 0x4FF6}, //3644 #CJK UNIFIED IDEOGRAPH + {0x98E7, 0x5021}, //3645 #CJK UNIFIED IDEOGRAPH + {0x98E8, 0x5029}, //3646 #CJK UNIFIED IDEOGRAPH + {0x98E9, 0x502C}, //3647 #CJK UNIFIED IDEOGRAPH + {0x98EA, 0x4FFE}, //3648 #CJK UNIFIED IDEOGRAPH + {0x98EB, 0x4FEF}, //3649 #CJK UNIFIED IDEOGRAPH + {0x98EC, 0x5011}, //3650 #CJK UNIFIED IDEOGRAPH + {0x98ED, 0x5006}, //3651 #CJK UNIFIED IDEOGRAPH + {0x98EE, 0x5043}, //3652 #CJK UNIFIED IDEOGRAPH + {0x98EF, 0x5047}, //3653 #CJK UNIFIED IDEOGRAPH + {0x98F0, 0x6703}, //3654 #CJK UNIFIED IDEOGRAPH + {0x98F1, 0x5055}, //3655 #CJK UNIFIED IDEOGRAPH + {0x98F2, 0x5050}, //3656 #CJK UNIFIED IDEOGRAPH + {0x98F3, 0x5048}, //3657 #CJK UNIFIED IDEOGRAPH + {0x98F4, 0x505A}, //3658 #CJK UNIFIED IDEOGRAPH + {0x98F5, 0x5056}, //3659 #CJK UNIFIED IDEOGRAPH + {0x98F6, 0x506C}, //3660 #CJK UNIFIED IDEOGRAPH + {0x98F7, 0x5078}, //3661 #CJK UNIFIED IDEOGRAPH + {0x98F8, 0x5080}, //3662 #CJK UNIFIED IDEOGRAPH + {0x98F9, 0x509A}, //3663 #CJK UNIFIED IDEOGRAPH + {0x98FA, 0x5085}, //3664 #CJK UNIFIED IDEOGRAPH + {0x98FB, 0x50B4}, //3665 #CJK UNIFIED IDEOGRAPH + {0x98FC, 0x50B2}, //3666 #CJK UNIFIED IDEOGRAPH + {0x9940, 0x50C9}, //3667 #CJK UNIFIED IDEOGRAPH + {0x9941, 0x50CA}, //3668 #CJK UNIFIED IDEOGRAPH + {0x9942, 0x50B3}, //3669 #CJK UNIFIED IDEOGRAPH + {0x9943, 0x50C2}, //3670 #CJK UNIFIED IDEOGRAPH + {0x9944, 0x50D6}, //3671 #CJK UNIFIED IDEOGRAPH + {0x9945, 0x50DE}, //3672 #CJK UNIFIED IDEOGRAPH + {0x9946, 0x50E5}, //3673 #CJK UNIFIED IDEOGRAPH + {0x9947, 0x50ED}, //3674 #CJK UNIFIED IDEOGRAPH + {0x9948, 0x50E3}, //3675 #CJK UNIFIED IDEOGRAPH + {0x9949, 0x50EE}, //3676 #CJK UNIFIED IDEOGRAPH + {0x994A, 0x50F9}, //3677 #CJK UNIFIED IDEOGRAPH + {0x994B, 0x50F5}, //3678 #CJK UNIFIED IDEOGRAPH + {0x994C, 0x5109}, //3679 #CJK UNIFIED IDEOGRAPH + {0x994D, 0x5101}, //3680 #CJK UNIFIED IDEOGRAPH + {0x994E, 0x5102}, //3681 #CJK UNIFIED IDEOGRAPH + {0x994F, 0x5116}, //3682 #CJK UNIFIED IDEOGRAPH + {0x9950, 0x5115}, //3683 #CJK UNIFIED IDEOGRAPH + {0x9951, 0x5114}, //3684 #CJK UNIFIED IDEOGRAPH + {0x9952, 0x511A}, //3685 #CJK UNIFIED IDEOGRAPH + {0x9953, 0x5121}, //3686 #CJK UNIFIED IDEOGRAPH + {0x9954, 0x513A}, //3687 #CJK UNIFIED IDEOGRAPH + {0x9955, 0x5137}, //3688 #CJK UNIFIED IDEOGRAPH + {0x9956, 0x513C}, //3689 #CJK UNIFIED IDEOGRAPH + {0x9957, 0x513B}, //3690 #CJK UNIFIED IDEOGRAPH + {0x9958, 0x513F}, //3691 #CJK UNIFIED IDEOGRAPH + {0x9959, 0x5140}, //3692 #CJK UNIFIED IDEOGRAPH + {0x995A, 0x5152}, //3693 #CJK UNIFIED IDEOGRAPH + {0x995B, 0x514C}, //3694 #CJK UNIFIED IDEOGRAPH + {0x995C, 0x5154}, //3695 #CJK UNIFIED IDEOGRAPH + {0x995D, 0x5162}, //3696 #CJK UNIFIED IDEOGRAPH + {0x995E, 0x7AF8}, //3697 #CJK UNIFIED IDEOGRAPH + {0x995F, 0x5169}, //3698 #CJK UNIFIED IDEOGRAPH + {0x9960, 0x516A}, //3699 #CJK UNIFIED IDEOGRAPH + {0x9961, 0x516E}, //3700 #CJK UNIFIED IDEOGRAPH + {0x9962, 0x5180}, //3701 #CJK UNIFIED IDEOGRAPH + {0x9963, 0x5182}, //3702 #CJK UNIFIED IDEOGRAPH + {0x9964, 0x56D8}, //3703 #CJK UNIFIED IDEOGRAPH + {0x9965, 0x518C}, //3704 #CJK UNIFIED IDEOGRAPH + {0x9966, 0x5189}, //3705 #CJK UNIFIED IDEOGRAPH + {0x9967, 0x518F}, //3706 #CJK UNIFIED IDEOGRAPH + {0x9968, 0x5191}, //3707 #CJK UNIFIED IDEOGRAPH + {0x9969, 0x5193}, //3708 #CJK UNIFIED IDEOGRAPH + {0x996A, 0x5195}, //3709 #CJK UNIFIED IDEOGRAPH + {0x996B, 0x5196}, //3710 #CJK UNIFIED IDEOGRAPH + {0x996C, 0x51A4}, //3711 #CJK UNIFIED IDEOGRAPH + {0x996D, 0x51A6}, //3712 #CJK UNIFIED IDEOGRAPH + {0x996E, 0x51A2}, //3713 #CJK UNIFIED IDEOGRAPH + {0x996F, 0x51A9}, //3714 #CJK UNIFIED IDEOGRAPH + {0x9970, 0x51AA}, //3715 #CJK UNIFIED IDEOGRAPH + {0x9971, 0x51AB}, //3716 #CJK UNIFIED IDEOGRAPH + {0x9972, 0x51B3}, //3717 #CJK UNIFIED IDEOGRAPH + {0x9973, 0x51B1}, //3718 #CJK UNIFIED IDEOGRAPH + {0x9974, 0x51B2}, //3719 #CJK UNIFIED IDEOGRAPH + {0x9975, 0x51B0}, //3720 #CJK UNIFIED IDEOGRAPH + {0x9976, 0x51B5}, //3721 #CJK UNIFIED IDEOGRAPH + {0x9977, 0x51BD}, //3722 #CJK UNIFIED IDEOGRAPH + {0x9978, 0x51C5}, //3723 #CJK UNIFIED IDEOGRAPH + {0x9979, 0x51C9}, //3724 #CJK UNIFIED IDEOGRAPH + {0x997A, 0x51DB}, //3725 #CJK UNIFIED IDEOGRAPH + {0x997B, 0x51E0}, //3726 #CJK UNIFIED IDEOGRAPH + {0x997C, 0x8655}, //3727 #CJK UNIFIED IDEOGRAPH + {0x997D, 0x51E9}, //3728 #CJK UNIFIED IDEOGRAPH + {0x997E, 0x51ED}, //3729 #CJK UNIFIED IDEOGRAPH + {0x9980, 0x51F0}, //3730 #CJK UNIFIED IDEOGRAPH + {0x9981, 0x51F5}, //3731 #CJK UNIFIED IDEOGRAPH + {0x9982, 0x51FE}, //3732 #CJK UNIFIED IDEOGRAPH + {0x9983, 0x5204}, //3733 #CJK UNIFIED IDEOGRAPH + {0x9984, 0x520B}, //3734 #CJK UNIFIED IDEOGRAPH + {0x9985, 0x5214}, //3735 #CJK UNIFIED IDEOGRAPH + {0x9986, 0x520E}, //3736 #CJK UNIFIED IDEOGRAPH + {0x9987, 0x5227}, //3737 #CJK UNIFIED IDEOGRAPH + {0x9988, 0x522A}, //3738 #CJK UNIFIED IDEOGRAPH + {0x9989, 0x522E}, //3739 #CJK UNIFIED IDEOGRAPH + {0x998A, 0x5233}, //3740 #CJK UNIFIED IDEOGRAPH + {0x998B, 0x5239}, //3741 #CJK UNIFIED IDEOGRAPH + {0x998C, 0x524F}, //3742 #CJK UNIFIED IDEOGRAPH + {0x998D, 0x5244}, //3743 #CJK UNIFIED IDEOGRAPH + {0x998E, 0x524B}, //3744 #CJK UNIFIED IDEOGRAPH + {0x998F, 0x524C}, //3745 #CJK UNIFIED IDEOGRAPH + {0x9990, 0x525E}, //3746 #CJK UNIFIED IDEOGRAPH + {0x9991, 0x5254}, //3747 #CJK UNIFIED IDEOGRAPH + {0x9992, 0x526A}, //3748 #CJK UNIFIED IDEOGRAPH + {0x9993, 0x5274}, //3749 #CJK UNIFIED IDEOGRAPH + {0x9994, 0x5269}, //3750 #CJK UNIFIED IDEOGRAPH + {0x9995, 0x5273}, //3751 #CJK UNIFIED IDEOGRAPH + {0x9996, 0x527F}, //3752 #CJK UNIFIED IDEOGRAPH + {0x9997, 0x527D}, //3753 #CJK UNIFIED IDEOGRAPH + {0x9998, 0x528D}, //3754 #CJK UNIFIED IDEOGRAPH + {0x9999, 0x5294}, //3755 #CJK UNIFIED IDEOGRAPH + {0x999A, 0x5292}, //3756 #CJK UNIFIED IDEOGRAPH + {0x999B, 0x5271}, //3757 #CJK UNIFIED IDEOGRAPH + {0x999C, 0x5288}, //3758 #CJK UNIFIED IDEOGRAPH + {0x999D, 0x5291}, //3759 #CJK UNIFIED IDEOGRAPH + {0x999E, 0x8FA8}, //3760 #CJK UNIFIED IDEOGRAPH + {0x999F, 0x8FA7}, //3761 #CJK UNIFIED IDEOGRAPH + {0x99A0, 0x52AC}, //3762 #CJK UNIFIED IDEOGRAPH + {0x99A1, 0x52AD}, //3763 #CJK UNIFIED IDEOGRAPH + {0x99A2, 0x52BC}, //3764 #CJK UNIFIED IDEOGRAPH + {0x99A3, 0x52B5}, //3765 #CJK UNIFIED IDEOGRAPH + {0x99A4, 0x52C1}, //3766 #CJK UNIFIED IDEOGRAPH + {0x99A5, 0x52CD}, //3767 #CJK UNIFIED IDEOGRAPH + {0x99A6, 0x52D7}, //3768 #CJK UNIFIED IDEOGRAPH + {0x99A7, 0x52DE}, //3769 #CJK UNIFIED IDEOGRAPH + {0x99A8, 0x52E3}, //3770 #CJK UNIFIED IDEOGRAPH + {0x99A9, 0x52E6}, //3771 #CJK UNIFIED IDEOGRAPH + {0x99AA, 0x98ED}, //3772 #CJK UNIFIED IDEOGRAPH + {0x99AB, 0x52E0}, //3773 #CJK UNIFIED IDEOGRAPH + {0x99AC, 0x52F3}, //3774 #CJK UNIFIED IDEOGRAPH + {0x99AD, 0x52F5}, //3775 #CJK UNIFIED IDEOGRAPH + {0x99AE, 0x52F8}, //3776 #CJK UNIFIED IDEOGRAPH + {0x99AF, 0x52F9}, //3777 #CJK UNIFIED IDEOGRAPH + {0x99B0, 0x5306}, //3778 #CJK UNIFIED IDEOGRAPH + {0x99B1, 0x5308}, //3779 #CJK UNIFIED IDEOGRAPH + {0x99B2, 0x7538}, //3780 #CJK UNIFIED IDEOGRAPH + {0x99B3, 0x530D}, //3781 #CJK UNIFIED IDEOGRAPH + {0x99B4, 0x5310}, //3782 #CJK UNIFIED IDEOGRAPH + {0x99B5, 0x530F}, //3783 #CJK UNIFIED IDEOGRAPH + {0x99B6, 0x5315}, //3784 #CJK UNIFIED IDEOGRAPH + {0x99B7, 0x531A}, //3785 #CJK UNIFIED IDEOGRAPH + {0x99B8, 0x5323}, //3786 #CJK UNIFIED IDEOGRAPH + {0x99B9, 0x532F}, //3787 #CJK UNIFIED IDEOGRAPH + {0x99BA, 0x5331}, //3788 #CJK UNIFIED IDEOGRAPH + {0x99BB, 0x5333}, //3789 #CJK UNIFIED IDEOGRAPH + {0x99BC, 0x5338}, //3790 #CJK UNIFIED IDEOGRAPH + {0x99BD, 0x5340}, //3791 #CJK UNIFIED IDEOGRAPH + {0x99BE, 0x5346}, //3792 #CJK UNIFIED IDEOGRAPH + {0x99BF, 0x5345}, //3793 #CJK UNIFIED IDEOGRAPH + {0x99C0, 0x4E17}, //3794 #CJK UNIFIED IDEOGRAPH + {0x99C1, 0x5349}, //3795 #CJK UNIFIED IDEOGRAPH + {0x99C2, 0x534D}, //3796 #CJK UNIFIED IDEOGRAPH + {0x99C3, 0x51D6}, //3797 #CJK UNIFIED IDEOGRAPH + {0x99C4, 0x535E}, //3798 #CJK UNIFIED IDEOGRAPH + {0x99C5, 0x5369}, //3799 #CJK UNIFIED IDEOGRAPH + {0x99C6, 0x536E}, //3800 #CJK UNIFIED IDEOGRAPH + {0x99C7, 0x5918}, //3801 #CJK UNIFIED IDEOGRAPH + {0x99C8, 0x537B}, //3802 #CJK UNIFIED IDEOGRAPH + {0x99C9, 0x5377}, //3803 #CJK UNIFIED IDEOGRAPH + {0x99CA, 0x5382}, //3804 #CJK UNIFIED IDEOGRAPH + {0x99CB, 0x5396}, //3805 #CJK UNIFIED IDEOGRAPH + {0x99CC, 0x53A0}, //3806 #CJK UNIFIED IDEOGRAPH + {0x99CD, 0x53A6}, //3807 #CJK UNIFIED IDEOGRAPH + {0x99CE, 0x53A5}, //3808 #CJK UNIFIED IDEOGRAPH + {0x99CF, 0x53AE}, //3809 #CJK UNIFIED IDEOGRAPH + {0x99D0, 0x53B0}, //3810 #CJK UNIFIED IDEOGRAPH + {0x99D1, 0x53B6}, //3811 #CJK UNIFIED IDEOGRAPH + {0x99D2, 0x53C3}, //3812 #CJK UNIFIED IDEOGRAPH + {0x99D3, 0x7C12}, //3813 #CJK UNIFIED IDEOGRAPH + {0x99D4, 0x96D9}, //3814 #CJK UNIFIED IDEOGRAPH + {0x99D5, 0x53DF}, //3815 #CJK UNIFIED IDEOGRAPH + {0x99D6, 0x66FC}, //3816 #CJK UNIFIED IDEOGRAPH + {0x99D7, 0x71EE}, //3817 #CJK UNIFIED IDEOGRAPH + {0x99D8, 0x53EE}, //3818 #CJK UNIFIED IDEOGRAPH + {0x99D9, 0x53E8}, //3819 #CJK UNIFIED IDEOGRAPH + {0x99DA, 0x53ED}, //3820 #CJK UNIFIED IDEOGRAPH + {0x99DB, 0x53FA}, //3821 #CJK UNIFIED IDEOGRAPH + {0x99DC, 0x5401}, //3822 #CJK UNIFIED IDEOGRAPH + {0x99DD, 0x543D}, //3823 #CJK UNIFIED IDEOGRAPH + {0x99DE, 0x5440}, //3824 #CJK UNIFIED IDEOGRAPH + {0x99DF, 0x542C}, //3825 #CJK UNIFIED IDEOGRAPH + {0x99E0, 0x542D}, //3826 #CJK UNIFIED IDEOGRAPH + {0x99E1, 0x543C}, //3827 #CJK UNIFIED IDEOGRAPH + {0x99E2, 0x542E}, //3828 #CJK UNIFIED IDEOGRAPH + {0x99E3, 0x5436}, //3829 #CJK UNIFIED IDEOGRAPH + {0x99E4, 0x5429}, //3830 #CJK UNIFIED IDEOGRAPH + {0x99E5, 0x541D}, //3831 #CJK UNIFIED IDEOGRAPH + {0x99E6, 0x544E}, //3832 #CJK UNIFIED IDEOGRAPH + {0x99E7, 0x548F}, //3833 #CJK UNIFIED IDEOGRAPH + {0x99E8, 0x5475}, //3834 #CJK UNIFIED IDEOGRAPH + {0x99E9, 0x548E}, //3835 #CJK UNIFIED IDEOGRAPH + {0x99EA, 0x545F}, //3836 #CJK UNIFIED IDEOGRAPH + {0x99EB, 0x5471}, //3837 #CJK UNIFIED IDEOGRAPH + {0x99EC, 0x5477}, //3838 #CJK UNIFIED IDEOGRAPH + {0x99ED, 0x5470}, //3839 #CJK UNIFIED IDEOGRAPH + {0x99EE, 0x5492}, //3840 #CJK UNIFIED IDEOGRAPH + {0x99EF, 0x547B}, //3841 #CJK UNIFIED IDEOGRAPH + {0x99F0, 0x5480}, //3842 #CJK UNIFIED IDEOGRAPH + {0x99F1, 0x5476}, //3843 #CJK UNIFIED IDEOGRAPH + {0x99F2, 0x5484}, //3844 #CJK UNIFIED IDEOGRAPH + {0x99F3, 0x5490}, //3845 #CJK UNIFIED IDEOGRAPH + {0x99F4, 0x5486}, //3846 #CJK UNIFIED IDEOGRAPH + {0x99F5, 0x54C7}, //3847 #CJK UNIFIED IDEOGRAPH + {0x99F6, 0x54A2}, //3848 #CJK UNIFIED IDEOGRAPH + {0x99F7, 0x54B8}, //3849 #CJK UNIFIED IDEOGRAPH + {0x99F8, 0x54A5}, //3850 #CJK UNIFIED IDEOGRAPH + {0x99F9, 0x54AC}, //3851 #CJK UNIFIED IDEOGRAPH + {0x99FA, 0x54C4}, //3852 #CJK UNIFIED IDEOGRAPH + {0x99FB, 0x54C8}, //3853 #CJK UNIFIED IDEOGRAPH + {0x99FC, 0x54A8}, //3854 #CJK UNIFIED IDEOGRAPH + {0x9A40, 0x54AB}, //3855 #CJK UNIFIED IDEOGRAPH + {0x9A41, 0x54C2}, //3856 #CJK UNIFIED IDEOGRAPH + {0x9A42, 0x54A4}, //3857 #CJK UNIFIED IDEOGRAPH + {0x9A43, 0x54BE}, //3858 #CJK UNIFIED IDEOGRAPH + {0x9A44, 0x54BC}, //3859 #CJK UNIFIED IDEOGRAPH + {0x9A45, 0x54D8}, //3860 #CJK UNIFIED IDEOGRAPH + {0x9A46, 0x54E5}, //3861 #CJK UNIFIED IDEOGRAPH + {0x9A47, 0x54E6}, //3862 #CJK UNIFIED IDEOGRAPH + {0x9A48, 0x550F}, //3863 #CJK UNIFIED IDEOGRAPH + {0x9A49, 0x5514}, //3864 #CJK UNIFIED IDEOGRAPH + {0x9A4A, 0x54FD}, //3865 #CJK UNIFIED IDEOGRAPH + {0x9A4B, 0x54EE}, //3866 #CJK UNIFIED IDEOGRAPH + {0x9A4C, 0x54ED}, //3867 #CJK UNIFIED IDEOGRAPH + {0x9A4D, 0x54FA}, //3868 #CJK UNIFIED IDEOGRAPH + {0x9A4E, 0x54E2}, //3869 #CJK UNIFIED IDEOGRAPH + {0x9A4F, 0x5539}, //3870 #CJK UNIFIED IDEOGRAPH + {0x9A50, 0x5540}, //3871 #CJK UNIFIED IDEOGRAPH + {0x9A51, 0x5563}, //3872 #CJK UNIFIED IDEOGRAPH + {0x9A52, 0x554C}, //3873 #CJK UNIFIED IDEOGRAPH + {0x9A53, 0x552E}, //3874 #CJK UNIFIED IDEOGRAPH + {0x9A54, 0x555C}, //3875 #CJK UNIFIED IDEOGRAPH + {0x9A55, 0x5545}, //3876 #CJK UNIFIED IDEOGRAPH + {0x9A56, 0x5556}, //3877 #CJK UNIFIED IDEOGRAPH + {0x9A57, 0x5557}, //3878 #CJK UNIFIED IDEOGRAPH + {0x9A58, 0x5538}, //3879 #CJK UNIFIED IDEOGRAPH + {0x9A59, 0x5533}, //3880 #CJK UNIFIED IDEOGRAPH + {0x9A5A, 0x555D}, //3881 #CJK UNIFIED IDEOGRAPH + {0x9A5B, 0x5599}, //3882 #CJK UNIFIED IDEOGRAPH + {0x9A5C, 0x5580}, //3883 #CJK UNIFIED IDEOGRAPH + {0x9A5D, 0x54AF}, //3884 #CJK UNIFIED IDEOGRAPH + {0x9A5E, 0x558A}, //3885 #CJK UNIFIED IDEOGRAPH + {0x9A5F, 0x559F}, //3886 #CJK UNIFIED IDEOGRAPH + {0x9A60, 0x557B}, //3887 #CJK UNIFIED IDEOGRAPH + {0x9A61, 0x557E}, //3888 #CJK UNIFIED IDEOGRAPH + {0x9A62, 0x5598}, //3889 #CJK UNIFIED IDEOGRAPH + {0x9A63, 0x559E}, //3890 #CJK UNIFIED IDEOGRAPH + {0x9A64, 0x55AE}, //3891 #CJK UNIFIED IDEOGRAPH + {0x9A65, 0x557C}, //3892 #CJK UNIFIED IDEOGRAPH + {0x9A66, 0x5583}, //3893 #CJK UNIFIED IDEOGRAPH + {0x9A67, 0x55A9}, //3894 #CJK UNIFIED IDEOGRAPH + {0x9A68, 0x5587}, //3895 #CJK UNIFIED IDEOGRAPH + {0x9A69, 0x55A8}, //3896 #CJK UNIFIED IDEOGRAPH + {0x9A6A, 0x55DA}, //3897 #CJK UNIFIED IDEOGRAPH + {0x9A6B, 0x55C5}, //3898 #CJK UNIFIED IDEOGRAPH + {0x9A6C, 0x55DF}, //3899 #CJK UNIFIED IDEOGRAPH + {0x9A6D, 0x55C4}, //3900 #CJK UNIFIED IDEOGRAPH + {0x9A6E, 0x55DC}, //3901 #CJK UNIFIED IDEOGRAPH + {0x9A6F, 0x55E4}, //3902 #CJK UNIFIED IDEOGRAPH + {0x9A70, 0x55D4}, //3903 #CJK UNIFIED IDEOGRAPH + {0x9A71, 0x5614}, //3904 #CJK UNIFIED IDEOGRAPH + {0x9A72, 0x55F7}, //3905 #CJK UNIFIED IDEOGRAPH + {0x9A73, 0x5616}, //3906 #CJK UNIFIED IDEOGRAPH + {0x9A74, 0x55FE}, //3907 #CJK UNIFIED IDEOGRAPH + {0x9A75, 0x55FD}, //3908 #CJK UNIFIED IDEOGRAPH + {0x9A76, 0x561B}, //3909 #CJK UNIFIED IDEOGRAPH + {0x9A77, 0x55F9}, //3910 #CJK UNIFIED IDEOGRAPH + {0x9A78, 0x564E}, //3911 #CJK UNIFIED IDEOGRAPH + {0x9A79, 0x5650}, //3912 #CJK UNIFIED IDEOGRAPH + {0x9A7A, 0x71DF}, //3913 #CJK UNIFIED IDEOGRAPH + {0x9A7B, 0x5634}, //3914 #CJK UNIFIED IDEOGRAPH + {0x9A7C, 0x5636}, //3915 #CJK UNIFIED IDEOGRAPH + {0x9A7D, 0x5632}, //3916 #CJK UNIFIED IDEOGRAPH + {0x9A7E, 0x5638}, //3917 #CJK UNIFIED IDEOGRAPH + {0x9A80, 0x566B}, //3918 #CJK UNIFIED IDEOGRAPH + {0x9A81, 0x5664}, //3919 #CJK UNIFIED IDEOGRAPH + {0x9A82, 0x562F}, //3920 #CJK UNIFIED IDEOGRAPH + {0x9A83, 0x566C}, //3921 #CJK UNIFIED IDEOGRAPH + {0x9A84, 0x566A}, //3922 #CJK UNIFIED IDEOGRAPH + {0x9A85, 0x5686}, //3923 #CJK UNIFIED IDEOGRAPH + {0x9A86, 0x5680}, //3924 #CJK UNIFIED IDEOGRAPH + {0x9A87, 0x568A}, //3925 #CJK UNIFIED IDEOGRAPH + {0x9A88, 0x56A0}, //3926 #CJK UNIFIED IDEOGRAPH + {0x9A89, 0x5694}, //3927 #CJK UNIFIED IDEOGRAPH + {0x9A8A, 0x568F}, //3928 #CJK UNIFIED IDEOGRAPH + {0x9A8B, 0x56A5}, //3929 #CJK UNIFIED IDEOGRAPH + {0x9A8C, 0x56AE}, //3930 #CJK UNIFIED IDEOGRAPH + {0x9A8D, 0x56B6}, //3931 #CJK UNIFIED IDEOGRAPH + {0x9A8E, 0x56B4}, //3932 #CJK UNIFIED IDEOGRAPH + {0x9A8F, 0x56C2}, //3933 #CJK UNIFIED IDEOGRAPH + {0x9A90, 0x56BC}, //3934 #CJK UNIFIED IDEOGRAPH + {0x9A91, 0x56C1}, //3935 #CJK UNIFIED IDEOGRAPH + {0x9A92, 0x56C3}, //3936 #CJK UNIFIED IDEOGRAPH + {0x9A93, 0x56C0}, //3937 #CJK UNIFIED IDEOGRAPH + {0x9A94, 0x56C8}, //3938 #CJK UNIFIED IDEOGRAPH + {0x9A95, 0x56CE}, //3939 #CJK UNIFIED IDEOGRAPH + {0x9A96, 0x56D1}, //3940 #CJK UNIFIED IDEOGRAPH + {0x9A97, 0x56D3}, //3941 #CJK UNIFIED IDEOGRAPH + {0x9A98, 0x56D7}, //3942 #CJK UNIFIED IDEOGRAPH + {0x9A99, 0x56EE}, //3943 #CJK UNIFIED IDEOGRAPH + {0x9A9A, 0x56F9}, //3944 #CJK UNIFIED IDEOGRAPH + {0x9A9B, 0x5700}, //3945 #CJK UNIFIED IDEOGRAPH + {0x9A9C, 0x56FF}, //3946 #CJK UNIFIED IDEOGRAPH + {0x9A9D, 0x5704}, //3947 #CJK UNIFIED IDEOGRAPH + {0x9A9E, 0x5709}, //3948 #CJK UNIFIED IDEOGRAPH + {0x9A9F, 0x5708}, //3949 #CJK UNIFIED IDEOGRAPH + {0x9AA0, 0x570B}, //3950 #CJK UNIFIED IDEOGRAPH + {0x9AA1, 0x570D}, //3951 #CJK UNIFIED IDEOGRAPH + {0x9AA2, 0x5713}, //3952 #CJK UNIFIED IDEOGRAPH + {0x9AA3, 0x5718}, //3953 #CJK UNIFIED IDEOGRAPH + {0x9AA4, 0x5716}, //3954 #CJK UNIFIED IDEOGRAPH + {0x9AA5, 0x55C7}, //3955 #CJK UNIFIED IDEOGRAPH + {0x9AA6, 0x571C}, //3956 #CJK UNIFIED IDEOGRAPH + {0x9AA7, 0x5726}, //3957 #CJK UNIFIED IDEOGRAPH + {0x9AA8, 0x5737}, //3958 #CJK UNIFIED IDEOGRAPH + {0x9AA9, 0x5738}, //3959 #CJK UNIFIED IDEOGRAPH + {0x9AAA, 0x574E}, //3960 #CJK UNIFIED IDEOGRAPH + {0x9AAB, 0x573B}, //3961 #CJK UNIFIED IDEOGRAPH + {0x9AAC, 0x5740}, //3962 #CJK UNIFIED IDEOGRAPH + {0x9AAD, 0x574F}, //3963 #CJK UNIFIED IDEOGRAPH + {0x9AAE, 0x5769}, //3964 #CJK UNIFIED IDEOGRAPH + {0x9AAF, 0x57C0}, //3965 #CJK UNIFIED IDEOGRAPH + {0x9AB0, 0x5788}, //3966 #CJK UNIFIED IDEOGRAPH + {0x9AB1, 0x5761}, //3967 #CJK UNIFIED IDEOGRAPH + {0x9AB2, 0x577F}, //3968 #CJK UNIFIED IDEOGRAPH + {0x9AB3, 0x5789}, //3969 #CJK UNIFIED IDEOGRAPH + {0x9AB4, 0x5793}, //3970 #CJK UNIFIED IDEOGRAPH + {0x9AB5, 0x57A0}, //3971 #CJK UNIFIED IDEOGRAPH + {0x9AB6, 0x57B3}, //3972 #CJK UNIFIED IDEOGRAPH + {0x9AB7, 0x57A4}, //3973 #CJK UNIFIED IDEOGRAPH + {0x9AB8, 0x57AA}, //3974 #CJK UNIFIED IDEOGRAPH + {0x9AB9, 0x57B0}, //3975 #CJK UNIFIED IDEOGRAPH + {0x9ABA, 0x57C3}, //3976 #CJK UNIFIED IDEOGRAPH + {0x9ABB, 0x57C6}, //3977 #CJK UNIFIED IDEOGRAPH + {0x9ABC, 0x57D4}, //3978 #CJK UNIFIED IDEOGRAPH + {0x9ABD, 0x57D2}, //3979 #CJK UNIFIED IDEOGRAPH + {0x9ABE, 0x57D3}, //3980 #CJK UNIFIED IDEOGRAPH + {0x9ABF, 0x580A}, //3981 #CJK UNIFIED IDEOGRAPH + {0x9AC0, 0x57D6}, //3982 #CJK UNIFIED IDEOGRAPH + {0x9AC1, 0x57E3}, //3983 #CJK UNIFIED IDEOGRAPH + {0x9AC2, 0x580B}, //3984 #CJK UNIFIED IDEOGRAPH + {0x9AC3, 0x5819}, //3985 #CJK UNIFIED IDEOGRAPH + {0x9AC4, 0x581D}, //3986 #CJK UNIFIED IDEOGRAPH + {0x9AC5, 0x5872}, //3987 #CJK UNIFIED IDEOGRAPH + {0x9AC6, 0x5821}, //3988 #CJK UNIFIED IDEOGRAPH + {0x9AC7, 0x5862}, //3989 #CJK UNIFIED IDEOGRAPH + {0x9AC8, 0x584B}, //3990 #CJK UNIFIED IDEOGRAPH + {0x9AC9, 0x5870}, //3991 #CJK UNIFIED IDEOGRAPH + {0x9ACA, 0x6BC0}, //3992 #CJK UNIFIED IDEOGRAPH + {0x9ACB, 0x5852}, //3993 #CJK UNIFIED IDEOGRAPH + {0x9ACC, 0x583D}, //3994 #CJK UNIFIED IDEOGRAPH + {0x9ACD, 0x5879}, //3995 #CJK UNIFIED IDEOGRAPH + {0x9ACE, 0x5885}, //3996 #CJK UNIFIED IDEOGRAPH + {0x9ACF, 0x58B9}, //3997 #CJK UNIFIED IDEOGRAPH + {0x9AD0, 0x589F}, //3998 #CJK UNIFIED IDEOGRAPH + {0x9AD1, 0x58AB}, //3999 #CJK UNIFIED IDEOGRAPH + {0x9AD2, 0x58BA}, //4000 #CJK UNIFIED IDEOGRAPH + {0x9AD3, 0x58DE}, //4001 #CJK UNIFIED IDEOGRAPH + {0x9AD4, 0x58BB}, //4002 #CJK UNIFIED IDEOGRAPH + {0x9AD5, 0x58B8}, //4003 #CJK UNIFIED IDEOGRAPH + {0x9AD6, 0x58AE}, //4004 #CJK UNIFIED IDEOGRAPH + {0x9AD7, 0x58C5}, //4005 #CJK UNIFIED IDEOGRAPH + {0x9AD8, 0x58D3}, //4006 #CJK UNIFIED IDEOGRAPH + {0x9AD9, 0x58D1}, //4007 #CJK UNIFIED IDEOGRAPH + {0x9ADA, 0x58D7}, //4008 #CJK UNIFIED IDEOGRAPH + {0x9ADB, 0x58D9}, //4009 #CJK UNIFIED IDEOGRAPH + {0x9ADC, 0x58D8}, //4010 #CJK UNIFIED IDEOGRAPH + {0x9ADD, 0x58E5}, //4011 #CJK UNIFIED IDEOGRAPH + {0x9ADE, 0x58DC}, //4012 #CJK UNIFIED IDEOGRAPH + {0x9ADF, 0x58E4}, //4013 #CJK UNIFIED IDEOGRAPH + {0x9AE0, 0x58DF}, //4014 #CJK UNIFIED IDEOGRAPH + {0x9AE1, 0x58EF}, //4015 #CJK UNIFIED IDEOGRAPH + {0x9AE2, 0x58FA}, //4016 #CJK UNIFIED IDEOGRAPH + {0x9AE3, 0x58F9}, //4017 #CJK UNIFIED IDEOGRAPH + {0x9AE4, 0x58FB}, //4018 #CJK UNIFIED IDEOGRAPH + {0x9AE5, 0x58FC}, //4019 #CJK UNIFIED IDEOGRAPH + {0x9AE6, 0x58FD}, //4020 #CJK UNIFIED IDEOGRAPH + {0x9AE7, 0x5902}, //4021 #CJK UNIFIED IDEOGRAPH + {0x9AE8, 0x590A}, //4022 #CJK UNIFIED IDEOGRAPH + {0x9AE9, 0x5910}, //4023 #CJK UNIFIED IDEOGRAPH + {0x9AEA, 0x591B}, //4024 #CJK UNIFIED IDEOGRAPH + {0x9AEB, 0x68A6}, //4025 #CJK UNIFIED IDEOGRAPH + {0x9AEC, 0x5925}, //4026 #CJK UNIFIED IDEOGRAPH + {0x9AED, 0x592C}, //4027 #CJK UNIFIED IDEOGRAPH + {0x9AEE, 0x592D}, //4028 #CJK UNIFIED IDEOGRAPH + {0x9AEF, 0x5932}, //4029 #CJK UNIFIED IDEOGRAPH + {0x9AF0, 0x5938}, //4030 #CJK UNIFIED IDEOGRAPH + {0x9AF1, 0x593E}, //4031 #CJK UNIFIED IDEOGRAPH + {0x9AF2, 0x7AD2}, //4032 #CJK UNIFIED IDEOGRAPH + {0x9AF3, 0x5955}, //4033 #CJK UNIFIED IDEOGRAPH + {0x9AF4, 0x5950}, //4034 #CJK UNIFIED IDEOGRAPH + {0x9AF5, 0x594E}, //4035 #CJK UNIFIED IDEOGRAPH + {0x9AF6, 0x595A}, //4036 #CJK UNIFIED IDEOGRAPH + {0x9AF7, 0x5958}, //4037 #CJK UNIFIED IDEOGRAPH + {0x9AF8, 0x5962}, //4038 #CJK UNIFIED IDEOGRAPH + {0x9AF9, 0x5960}, //4039 #CJK UNIFIED IDEOGRAPH + {0x9AFA, 0x5967}, //4040 #CJK UNIFIED IDEOGRAPH + {0x9AFB, 0x596C}, //4041 #CJK UNIFIED IDEOGRAPH + {0x9AFC, 0x5969}, //4042 #CJK UNIFIED IDEOGRAPH + {0x9B40, 0x5978}, //4043 #CJK UNIFIED IDEOGRAPH + {0x9B41, 0x5981}, //4044 #CJK UNIFIED IDEOGRAPH + {0x9B42, 0x599D}, //4045 #CJK UNIFIED IDEOGRAPH + {0x9B43, 0x4F5E}, //4046 #CJK UNIFIED IDEOGRAPH + {0x9B44, 0x4FAB}, //4047 #CJK UNIFIED IDEOGRAPH + {0x9B45, 0x59A3}, //4048 #CJK UNIFIED IDEOGRAPH + {0x9B46, 0x59B2}, //4049 #CJK UNIFIED IDEOGRAPH + {0x9B47, 0x59C6}, //4050 #CJK UNIFIED IDEOGRAPH + {0x9B48, 0x59E8}, //4051 #CJK UNIFIED IDEOGRAPH + {0x9B49, 0x59DC}, //4052 #CJK UNIFIED IDEOGRAPH + {0x9B4A, 0x598D}, //4053 #CJK UNIFIED IDEOGRAPH + {0x9B4B, 0x59D9}, //4054 #CJK UNIFIED IDEOGRAPH + {0x9B4C, 0x59DA}, //4055 #CJK UNIFIED IDEOGRAPH + {0x9B4D, 0x5A25}, //4056 #CJK UNIFIED IDEOGRAPH + {0x9B4E, 0x5A1F}, //4057 #CJK UNIFIED IDEOGRAPH + {0x9B4F, 0x5A11}, //4058 #CJK UNIFIED IDEOGRAPH + {0x9B50, 0x5A1C}, //4059 #CJK UNIFIED IDEOGRAPH + {0x9B51, 0x5A09}, //4060 #CJK UNIFIED IDEOGRAPH + {0x9B52, 0x5A1A}, //4061 #CJK UNIFIED IDEOGRAPH + {0x9B53, 0x5A40}, //4062 #CJK UNIFIED IDEOGRAPH + {0x9B54, 0x5A6C}, //4063 #CJK UNIFIED IDEOGRAPH + {0x9B55, 0x5A49}, //4064 #CJK UNIFIED IDEOGRAPH + {0x9B56, 0x5A35}, //4065 #CJK UNIFIED IDEOGRAPH + {0x9B57, 0x5A36}, //4066 #CJK UNIFIED IDEOGRAPH + {0x9B58, 0x5A62}, //4067 #CJK UNIFIED IDEOGRAPH + {0x9B59, 0x5A6A}, //4068 #CJK UNIFIED IDEOGRAPH + {0x9B5A, 0x5A9A}, //4069 #CJK UNIFIED IDEOGRAPH + {0x9B5B, 0x5ABC}, //4070 #CJK UNIFIED IDEOGRAPH + {0x9B5C, 0x5ABE}, //4071 #CJK UNIFIED IDEOGRAPH + {0x9B5D, 0x5ACB}, //4072 #CJK UNIFIED IDEOGRAPH + {0x9B5E, 0x5AC2}, //4073 #CJK UNIFIED IDEOGRAPH + {0x9B5F, 0x5ABD}, //4074 #CJK UNIFIED IDEOGRAPH + {0x9B60, 0x5AE3}, //4075 #CJK UNIFIED IDEOGRAPH + {0x9B61, 0x5AD7}, //4076 #CJK UNIFIED IDEOGRAPH + {0x9B62, 0x5AE6}, //4077 #CJK UNIFIED IDEOGRAPH + {0x9B63, 0x5AE9}, //4078 #CJK UNIFIED IDEOGRAPH + {0x9B64, 0x5AD6}, //4079 #CJK UNIFIED IDEOGRAPH + {0x9B65, 0x5AFA}, //4080 #CJK UNIFIED IDEOGRAPH + {0x9B66, 0x5AFB}, //4081 #CJK UNIFIED IDEOGRAPH + {0x9B67, 0x5B0C}, //4082 #CJK UNIFIED IDEOGRAPH + {0x9B68, 0x5B0B}, //4083 #CJK UNIFIED IDEOGRAPH + {0x9B69, 0x5B16}, //4084 #CJK UNIFIED IDEOGRAPH + {0x9B6A, 0x5B32}, //4085 #CJK UNIFIED IDEOGRAPH + {0x9B6B, 0x5AD0}, //4086 #CJK UNIFIED IDEOGRAPH + {0x9B6C, 0x5B2A}, //4087 #CJK UNIFIED IDEOGRAPH + {0x9B6D, 0x5B36}, //4088 #CJK UNIFIED IDEOGRAPH + {0x9B6E, 0x5B3E}, //4089 #CJK UNIFIED IDEOGRAPH + {0x9B6F, 0x5B43}, //4090 #CJK UNIFIED IDEOGRAPH + {0x9B70, 0x5B45}, //4091 #CJK UNIFIED IDEOGRAPH + {0x9B71, 0x5B40}, //4092 #CJK UNIFIED IDEOGRAPH + {0x9B72, 0x5B51}, //4093 #CJK UNIFIED IDEOGRAPH + {0x9B73, 0x5B55}, //4094 #CJK UNIFIED IDEOGRAPH + {0x9B74, 0x5B5A}, //4095 #CJK UNIFIED IDEOGRAPH + {0x9B75, 0x5B5B}, //4096 #CJK UNIFIED IDEOGRAPH + {0x9B76, 0x5B65}, //4097 #CJK UNIFIED IDEOGRAPH + {0x9B77, 0x5B69}, //4098 #CJK UNIFIED IDEOGRAPH + {0x9B78, 0x5B70}, //4099 #CJK UNIFIED IDEOGRAPH + {0x9B79, 0x5B73}, //4100 #CJK UNIFIED IDEOGRAPH + {0x9B7A, 0x5B75}, //4101 #CJK UNIFIED IDEOGRAPH + {0x9B7B, 0x5B78}, //4102 #CJK UNIFIED IDEOGRAPH + {0x9B7C, 0x6588}, //4103 #CJK UNIFIED IDEOGRAPH + {0x9B7D, 0x5B7A}, //4104 #CJK UNIFIED IDEOGRAPH + {0x9B7E, 0x5B80}, //4105 #CJK UNIFIED IDEOGRAPH + {0x9B80, 0x5B83}, //4106 #CJK UNIFIED IDEOGRAPH + {0x9B81, 0x5BA6}, //4107 #CJK UNIFIED IDEOGRAPH + {0x9B82, 0x5BB8}, //4108 #CJK UNIFIED IDEOGRAPH + {0x9B83, 0x5BC3}, //4109 #CJK UNIFIED IDEOGRAPH + {0x9B84, 0x5BC7}, //4110 #CJK UNIFIED IDEOGRAPH + {0x9B85, 0x5BC9}, //4111 #CJK UNIFIED IDEOGRAPH + {0x9B86, 0x5BD4}, //4112 #CJK UNIFIED IDEOGRAPH + {0x9B87, 0x5BD0}, //4113 #CJK UNIFIED IDEOGRAPH + {0x9B88, 0x5BE4}, //4114 #CJK UNIFIED IDEOGRAPH + {0x9B89, 0x5BE6}, //4115 #CJK UNIFIED IDEOGRAPH + {0x9B8A, 0x5BE2}, //4116 #CJK UNIFIED IDEOGRAPH + {0x9B8B, 0x5BDE}, //4117 #CJK UNIFIED IDEOGRAPH + {0x9B8C, 0x5BE5}, //4118 #CJK UNIFIED IDEOGRAPH + {0x9B8D, 0x5BEB}, //4119 #CJK UNIFIED IDEOGRAPH + {0x9B8E, 0x5BF0}, //4120 #CJK UNIFIED IDEOGRAPH + {0x9B8F, 0x5BF6}, //4121 #CJK UNIFIED IDEOGRAPH + {0x9B90, 0x5BF3}, //4122 #CJK UNIFIED IDEOGRAPH + {0x9B91, 0x5C05}, //4123 #CJK UNIFIED IDEOGRAPH + {0x9B92, 0x5C07}, //4124 #CJK UNIFIED IDEOGRAPH + {0x9B93, 0x5C08}, //4125 #CJK UNIFIED IDEOGRAPH + {0x9B94, 0x5C0D}, //4126 #CJK UNIFIED IDEOGRAPH + {0x9B95, 0x5C13}, //4127 #CJK UNIFIED IDEOGRAPH + {0x9B96, 0x5C20}, //4128 #CJK UNIFIED IDEOGRAPH + {0x9B97, 0x5C22}, //4129 #CJK UNIFIED IDEOGRAPH + {0x9B98, 0x5C28}, //4130 #CJK UNIFIED IDEOGRAPH + {0x9B99, 0x5C38}, //4131 #CJK UNIFIED IDEOGRAPH + {0x9B9A, 0x5C39}, //4132 #CJK UNIFIED IDEOGRAPH + {0x9B9B, 0x5C41}, //4133 #CJK UNIFIED IDEOGRAPH + {0x9B9C, 0x5C46}, //4134 #CJK UNIFIED IDEOGRAPH + {0x9B9D, 0x5C4E}, //4135 #CJK UNIFIED IDEOGRAPH + {0x9B9E, 0x5C53}, //4136 #CJK UNIFIED IDEOGRAPH + {0x9B9F, 0x5C50}, //4137 #CJK UNIFIED IDEOGRAPH + {0x9BA0, 0x5C4F}, //4138 #CJK UNIFIED IDEOGRAPH + {0x9BA1, 0x5B71}, //4139 #CJK UNIFIED IDEOGRAPH + {0x9BA2, 0x5C6C}, //4140 #CJK UNIFIED IDEOGRAPH + {0x9BA3, 0x5C6E}, //4141 #CJK UNIFIED IDEOGRAPH + {0x9BA4, 0x4E62}, //4142 #CJK UNIFIED IDEOGRAPH + {0x9BA5, 0x5C76}, //4143 #CJK UNIFIED IDEOGRAPH + {0x9BA6, 0x5C79}, //4144 #CJK UNIFIED IDEOGRAPH + {0x9BA7, 0x5C8C}, //4145 #CJK UNIFIED IDEOGRAPH + {0x9BA8, 0x5C91}, //4146 #CJK UNIFIED IDEOGRAPH + {0x9BA9, 0x5C94}, //4147 #CJK UNIFIED IDEOGRAPH + {0x9BAA, 0x599B}, //4148 #CJK UNIFIED IDEOGRAPH + {0x9BAB, 0x5CAB}, //4149 #CJK UNIFIED IDEOGRAPH + {0x9BAC, 0x5CBB}, //4150 #CJK UNIFIED IDEOGRAPH + {0x9BAD, 0x5CB6}, //4151 #CJK UNIFIED IDEOGRAPH + {0x9BAE, 0x5CBC}, //4152 #CJK UNIFIED IDEOGRAPH + {0x9BAF, 0x5CB7}, //4153 #CJK UNIFIED IDEOGRAPH + {0x9BB0, 0x5CC5}, //4154 #CJK UNIFIED IDEOGRAPH + {0x9BB1, 0x5CBE}, //4155 #CJK UNIFIED IDEOGRAPH + {0x9BB2, 0x5CC7}, //4156 #CJK UNIFIED IDEOGRAPH + {0x9BB3, 0x5CD9}, //4157 #CJK UNIFIED IDEOGRAPH + {0x9BB4, 0x5CE9}, //4158 #CJK UNIFIED IDEOGRAPH + {0x9BB5, 0x5CFD}, //4159 #CJK UNIFIED IDEOGRAPH + {0x9BB6, 0x5CFA}, //4160 #CJK UNIFIED IDEOGRAPH + {0x9BB7, 0x5CED}, //4161 #CJK UNIFIED IDEOGRAPH + {0x9BB8, 0x5D8C}, //4162 #CJK UNIFIED IDEOGRAPH + {0x9BB9, 0x5CEA}, //4163 #CJK UNIFIED IDEOGRAPH + {0x9BBA, 0x5D0B}, //4164 #CJK UNIFIED IDEOGRAPH + {0x9BBB, 0x5D15}, //4165 #CJK UNIFIED IDEOGRAPH + {0x9BBC, 0x5D17}, //4166 #CJK UNIFIED IDEOGRAPH + {0x9BBD, 0x5D5C}, //4167 #CJK UNIFIED IDEOGRAPH + {0x9BBE, 0x5D1F}, //4168 #CJK UNIFIED IDEOGRAPH + {0x9BBF, 0x5D1B}, //4169 #CJK UNIFIED IDEOGRAPH + {0x9BC0, 0x5D11}, //4170 #CJK UNIFIED IDEOGRAPH + {0x9BC1, 0x5D14}, //4171 #CJK UNIFIED IDEOGRAPH + {0x9BC2, 0x5D22}, //4172 #CJK UNIFIED IDEOGRAPH + {0x9BC3, 0x5D1A}, //4173 #CJK UNIFIED IDEOGRAPH + {0x9BC4, 0x5D19}, //4174 #CJK UNIFIED IDEOGRAPH + {0x9BC5, 0x5D18}, //4175 #CJK UNIFIED IDEOGRAPH + {0x9BC6, 0x5D4C}, //4176 #CJK UNIFIED IDEOGRAPH + {0x9BC7, 0x5D52}, //4177 #CJK UNIFIED IDEOGRAPH + {0x9BC8, 0x5D4E}, //4178 #CJK UNIFIED IDEOGRAPH + {0x9BC9, 0x5D4B}, //4179 #CJK UNIFIED IDEOGRAPH + {0x9BCA, 0x5D6C}, //4180 #CJK UNIFIED IDEOGRAPH + {0x9BCB, 0x5D73}, //4181 #CJK UNIFIED IDEOGRAPH + {0x9BCC, 0x5D76}, //4182 #CJK UNIFIED IDEOGRAPH + {0x9BCD, 0x5D87}, //4183 #CJK UNIFIED IDEOGRAPH + {0x9BCE, 0x5D84}, //4184 #CJK UNIFIED IDEOGRAPH + {0x9BCF, 0x5D82}, //4185 #CJK UNIFIED IDEOGRAPH + {0x9BD0, 0x5DA2}, //4186 #CJK UNIFIED IDEOGRAPH + {0x9BD1, 0x5D9D}, //4187 #CJK UNIFIED IDEOGRAPH + {0x9BD2, 0x5DAC}, //4188 #CJK UNIFIED IDEOGRAPH + {0x9BD3, 0x5DAE}, //4189 #CJK UNIFIED IDEOGRAPH + {0x9BD4, 0x5DBD}, //4190 #CJK UNIFIED IDEOGRAPH + {0x9BD5, 0x5D90}, //4191 #CJK UNIFIED IDEOGRAPH + {0x9BD6, 0x5DB7}, //4192 #CJK UNIFIED IDEOGRAPH + {0x9BD7, 0x5DBC}, //4193 #CJK UNIFIED IDEOGRAPH + {0x9BD8, 0x5DC9}, //4194 #CJK UNIFIED IDEOGRAPH + {0x9BD9, 0x5DCD}, //4195 #CJK UNIFIED IDEOGRAPH + {0x9BDA, 0x5DD3}, //4196 #CJK UNIFIED IDEOGRAPH + {0x9BDB, 0x5DD2}, //4197 #CJK UNIFIED IDEOGRAPH + {0x9BDC, 0x5DD6}, //4198 #CJK UNIFIED IDEOGRAPH + {0x9BDD, 0x5DDB}, //4199 #CJK UNIFIED IDEOGRAPH + {0x9BDE, 0x5DEB}, //4200 #CJK UNIFIED IDEOGRAPH + {0x9BDF, 0x5DF2}, //4201 #CJK UNIFIED IDEOGRAPH + {0x9BE0, 0x5DF5}, //4202 #CJK UNIFIED IDEOGRAPH + {0x9BE1, 0x5E0B}, //4203 #CJK UNIFIED IDEOGRAPH + {0x9BE2, 0x5E1A}, //4204 #CJK UNIFIED IDEOGRAPH + {0x9BE3, 0x5E19}, //4205 #CJK UNIFIED IDEOGRAPH + {0x9BE4, 0x5E11}, //4206 #CJK UNIFIED IDEOGRAPH + {0x9BE5, 0x5E1B}, //4207 #CJK UNIFIED IDEOGRAPH + {0x9BE6, 0x5E36}, //4208 #CJK UNIFIED IDEOGRAPH + {0x9BE7, 0x5E37}, //4209 #CJK UNIFIED IDEOGRAPH + {0x9BE8, 0x5E44}, //4210 #CJK UNIFIED IDEOGRAPH + {0x9BE9, 0x5E43}, //4211 #CJK UNIFIED IDEOGRAPH + {0x9BEA, 0x5E40}, //4212 #CJK UNIFIED IDEOGRAPH + {0x9BEB, 0x5E4E}, //4213 #CJK UNIFIED IDEOGRAPH + {0x9BEC, 0x5E57}, //4214 #CJK UNIFIED IDEOGRAPH + {0x9BED, 0x5E54}, //4215 #CJK UNIFIED IDEOGRAPH + {0x9BEE, 0x5E5F}, //4216 #CJK UNIFIED IDEOGRAPH + {0x9BEF, 0x5E62}, //4217 #CJK UNIFIED IDEOGRAPH + {0x9BF0, 0x5E64}, //4218 #CJK UNIFIED IDEOGRAPH + {0x9BF1, 0x5E47}, //4219 #CJK UNIFIED IDEOGRAPH + {0x9BF2, 0x5E75}, //4220 #CJK UNIFIED IDEOGRAPH + {0x9BF3, 0x5E76}, //4221 #CJK UNIFIED IDEOGRAPH + {0x9BF4, 0x5E7A}, //4222 #CJK UNIFIED IDEOGRAPH + {0x9BF5, 0x9EBC}, //4223 #CJK UNIFIED IDEOGRAPH + {0x9BF6, 0x5E7F}, //4224 #CJK UNIFIED IDEOGRAPH + {0x9BF7, 0x5EA0}, //4225 #CJK UNIFIED IDEOGRAPH + {0x9BF8, 0x5EC1}, //4226 #CJK UNIFIED IDEOGRAPH + {0x9BF9, 0x5EC2}, //4227 #CJK UNIFIED IDEOGRAPH + {0x9BFA, 0x5EC8}, //4228 #CJK UNIFIED IDEOGRAPH + {0x9BFB, 0x5ED0}, //4229 #CJK UNIFIED IDEOGRAPH + {0x9BFC, 0x5ECF}, //4230 #CJK UNIFIED IDEOGRAPH + {0x9C40, 0x5ED6}, //4231 #CJK UNIFIED IDEOGRAPH + {0x9C41, 0x5EE3}, //4232 #CJK UNIFIED IDEOGRAPH + {0x9C42, 0x5EDD}, //4233 #CJK UNIFIED IDEOGRAPH + {0x9C43, 0x5EDA}, //4234 #CJK UNIFIED IDEOGRAPH + {0x9C44, 0x5EDB}, //4235 #CJK UNIFIED IDEOGRAPH + {0x9C45, 0x5EE2}, //4236 #CJK UNIFIED IDEOGRAPH + {0x9C46, 0x5EE1}, //4237 #CJK UNIFIED IDEOGRAPH + {0x9C47, 0x5EE8}, //4238 #CJK UNIFIED IDEOGRAPH + {0x9C48, 0x5EE9}, //4239 #CJK UNIFIED IDEOGRAPH + {0x9C49, 0x5EEC}, //4240 #CJK UNIFIED IDEOGRAPH + {0x9C4A, 0x5EF1}, //4241 #CJK UNIFIED IDEOGRAPH + {0x9C4B, 0x5EF3}, //4242 #CJK UNIFIED IDEOGRAPH + {0x9C4C, 0x5EF0}, //4243 #CJK UNIFIED IDEOGRAPH + {0x9C4D, 0x5EF4}, //4244 #CJK UNIFIED IDEOGRAPH + {0x9C4E, 0x5EF8}, //4245 #CJK UNIFIED IDEOGRAPH + {0x9C4F, 0x5EFE}, //4246 #CJK UNIFIED IDEOGRAPH + {0x9C50, 0x5F03}, //4247 #CJK UNIFIED IDEOGRAPH + {0x9C51, 0x5F09}, //4248 #CJK UNIFIED IDEOGRAPH + {0x9C52, 0x5F5D}, //4249 #CJK UNIFIED IDEOGRAPH + {0x9C53, 0x5F5C}, //4250 #CJK UNIFIED IDEOGRAPH + {0x9C54, 0x5F0B}, //4251 #CJK UNIFIED IDEOGRAPH + {0x9C55, 0x5F11}, //4252 #CJK UNIFIED IDEOGRAPH + {0x9C56, 0x5F16}, //4253 #CJK UNIFIED IDEOGRAPH + {0x9C57, 0x5F29}, //4254 #CJK UNIFIED IDEOGRAPH + {0x9C58, 0x5F2D}, //4255 #CJK UNIFIED IDEOGRAPH + {0x9C59, 0x5F38}, //4256 #CJK UNIFIED IDEOGRAPH + {0x9C5A, 0x5F41}, //4257 #CJK UNIFIED IDEOGRAPH + {0x9C5B, 0x5F48}, //4258 #CJK UNIFIED IDEOGRAPH + {0x9C5C, 0x5F4C}, //4259 #CJK UNIFIED IDEOGRAPH + {0x9C5D, 0x5F4E}, //4260 #CJK UNIFIED IDEOGRAPH + {0x9C5E, 0x5F2F}, //4261 #CJK UNIFIED IDEOGRAPH + {0x9C5F, 0x5F51}, //4262 #CJK UNIFIED IDEOGRAPH + {0x9C60, 0x5F56}, //4263 #CJK UNIFIED IDEOGRAPH + {0x9C61, 0x5F57}, //4264 #CJK UNIFIED IDEOGRAPH + {0x9C62, 0x5F59}, //4265 #CJK UNIFIED IDEOGRAPH + {0x9C63, 0x5F61}, //4266 #CJK UNIFIED IDEOGRAPH + {0x9C64, 0x5F6D}, //4267 #CJK UNIFIED IDEOGRAPH + {0x9C65, 0x5F73}, //4268 #CJK UNIFIED IDEOGRAPH + {0x9C66, 0x5F77}, //4269 #CJK UNIFIED IDEOGRAPH + {0x9C67, 0x5F83}, //4270 #CJK UNIFIED IDEOGRAPH + {0x9C68, 0x5F82}, //4271 #CJK UNIFIED IDEOGRAPH + {0x9C69, 0x5F7F}, //4272 #CJK UNIFIED IDEOGRAPH + {0x9C6A, 0x5F8A}, //4273 #CJK UNIFIED IDEOGRAPH + {0x9C6B, 0x5F88}, //4274 #CJK UNIFIED IDEOGRAPH + {0x9C6C, 0x5F91}, //4275 #CJK UNIFIED IDEOGRAPH + {0x9C6D, 0x5F87}, //4276 #CJK UNIFIED IDEOGRAPH + {0x9C6E, 0x5F9E}, //4277 #CJK UNIFIED IDEOGRAPH + {0x9C6F, 0x5F99}, //4278 #CJK UNIFIED IDEOGRAPH + {0x9C70, 0x5F98}, //4279 #CJK UNIFIED IDEOGRAPH + {0x9C71, 0x5FA0}, //4280 #CJK UNIFIED IDEOGRAPH + {0x9C72, 0x5FA8}, //4281 #CJK UNIFIED IDEOGRAPH + {0x9C73, 0x5FAD}, //4282 #CJK UNIFIED IDEOGRAPH + {0x9C74, 0x5FBC}, //4283 #CJK UNIFIED IDEOGRAPH + {0x9C75, 0x5FD6}, //4284 #CJK UNIFIED IDEOGRAPH + {0x9C76, 0x5FFB}, //4285 #CJK UNIFIED IDEOGRAPH + {0x9C77, 0x5FE4}, //4286 #CJK UNIFIED IDEOGRAPH + {0x9C78, 0x5FF8}, //4287 #CJK UNIFIED IDEOGRAPH + {0x9C79, 0x5FF1}, //4288 #CJK UNIFIED IDEOGRAPH + {0x9C7A, 0x5FDD}, //4289 #CJK UNIFIED IDEOGRAPH + {0x9C7B, 0x60B3}, //4290 #CJK UNIFIED IDEOGRAPH + {0x9C7C, 0x5FFF}, //4291 #CJK UNIFIED IDEOGRAPH + {0x9C7D, 0x6021}, //4292 #CJK UNIFIED IDEOGRAPH + {0x9C7E, 0x6060}, //4293 #CJK UNIFIED IDEOGRAPH + {0x9C80, 0x6019}, //4294 #CJK UNIFIED IDEOGRAPH + {0x9C81, 0x6010}, //4295 #CJK UNIFIED IDEOGRAPH + {0x9C82, 0x6029}, //4296 #CJK UNIFIED IDEOGRAPH + {0x9C83, 0x600E}, //4297 #CJK UNIFIED IDEOGRAPH + {0x9C84, 0x6031}, //4298 #CJK UNIFIED IDEOGRAPH + {0x9C85, 0x601B}, //4299 #CJK UNIFIED IDEOGRAPH + {0x9C86, 0x6015}, //4300 #CJK UNIFIED IDEOGRAPH + {0x9C87, 0x602B}, //4301 #CJK UNIFIED IDEOGRAPH + {0x9C88, 0x6026}, //4302 #CJK UNIFIED IDEOGRAPH + {0x9C89, 0x600F}, //4303 #CJK UNIFIED IDEOGRAPH + {0x9C8A, 0x603A}, //4304 #CJK UNIFIED IDEOGRAPH + {0x9C8B, 0x605A}, //4305 #CJK UNIFIED IDEOGRAPH + {0x9C8C, 0x6041}, //4306 #CJK UNIFIED IDEOGRAPH + {0x9C8D, 0x606A}, //4307 #CJK UNIFIED IDEOGRAPH + {0x9C8E, 0x6077}, //4308 #CJK UNIFIED IDEOGRAPH + {0x9C8F, 0x605F}, //4309 #CJK UNIFIED IDEOGRAPH + {0x9C90, 0x604A}, //4310 #CJK UNIFIED IDEOGRAPH + {0x9C91, 0x6046}, //4311 #CJK UNIFIED IDEOGRAPH + {0x9C92, 0x604D}, //4312 #CJK UNIFIED IDEOGRAPH + {0x9C93, 0x6063}, //4313 #CJK UNIFIED IDEOGRAPH + {0x9C94, 0x6043}, //4314 #CJK UNIFIED IDEOGRAPH + {0x9C95, 0x6064}, //4315 #CJK UNIFIED IDEOGRAPH + {0x9C96, 0x6042}, //4316 #CJK UNIFIED IDEOGRAPH + {0x9C97, 0x606C}, //4317 #CJK UNIFIED IDEOGRAPH + {0x9C98, 0x606B}, //4318 #CJK UNIFIED IDEOGRAPH + {0x9C99, 0x6059}, //4319 #CJK UNIFIED IDEOGRAPH + {0x9C9A, 0x6081}, //4320 #CJK UNIFIED IDEOGRAPH + {0x9C9B, 0x608D}, //4321 #CJK UNIFIED IDEOGRAPH + {0x9C9C, 0x60E7}, //4322 #CJK UNIFIED IDEOGRAPH + {0x9C9D, 0x6083}, //4323 #CJK UNIFIED IDEOGRAPH + {0x9C9E, 0x609A}, //4324 #CJK UNIFIED IDEOGRAPH + {0x9C9F, 0x6084}, //4325 #CJK UNIFIED IDEOGRAPH + {0x9CA0, 0x609B}, //4326 #CJK UNIFIED IDEOGRAPH + {0x9CA1, 0x6096}, //4327 #CJK UNIFIED IDEOGRAPH + {0x9CA2, 0x6097}, //4328 #CJK UNIFIED IDEOGRAPH + {0x9CA3, 0x6092}, //4329 #CJK UNIFIED IDEOGRAPH + {0x9CA4, 0x60A7}, //4330 #CJK UNIFIED IDEOGRAPH + {0x9CA5, 0x608B}, //4331 #CJK UNIFIED IDEOGRAPH + {0x9CA6, 0x60E1}, //4332 #CJK UNIFIED IDEOGRAPH + {0x9CA7, 0x60B8}, //4333 #CJK UNIFIED IDEOGRAPH + {0x9CA8, 0x60E0}, //4334 #CJK UNIFIED IDEOGRAPH + {0x9CA9, 0x60D3}, //4335 #CJK UNIFIED IDEOGRAPH + {0x9CAA, 0x60B4}, //4336 #CJK UNIFIED IDEOGRAPH + {0x9CAB, 0x5FF0}, //4337 #CJK UNIFIED IDEOGRAPH + {0x9CAC, 0x60BD}, //4338 #CJK UNIFIED IDEOGRAPH + {0x9CAD, 0x60C6}, //4339 #CJK UNIFIED IDEOGRAPH + {0x9CAE, 0x60B5}, //4340 #CJK UNIFIED IDEOGRAPH + {0x9CAF, 0x60D8}, //4341 #CJK UNIFIED IDEOGRAPH + {0x9CB0, 0x614D}, //4342 #CJK UNIFIED IDEOGRAPH + {0x9CB1, 0x6115}, //4343 #CJK UNIFIED IDEOGRAPH + {0x9CB2, 0x6106}, //4344 #CJK UNIFIED IDEOGRAPH + {0x9CB3, 0x60F6}, //4345 #CJK UNIFIED IDEOGRAPH + {0x9CB4, 0x60F7}, //4346 #CJK UNIFIED IDEOGRAPH + {0x9CB5, 0x6100}, //4347 #CJK UNIFIED IDEOGRAPH + {0x9CB6, 0x60F4}, //4348 #CJK UNIFIED IDEOGRAPH + {0x9CB7, 0x60FA}, //4349 #CJK UNIFIED IDEOGRAPH + {0x9CB8, 0x6103}, //4350 #CJK UNIFIED IDEOGRAPH + {0x9CB9, 0x6121}, //4351 #CJK UNIFIED IDEOGRAPH + {0x9CBA, 0x60FB}, //4352 #CJK UNIFIED IDEOGRAPH + {0x9CBB, 0x60F1}, //4353 #CJK UNIFIED IDEOGRAPH + {0x9CBC, 0x610D}, //4354 #CJK UNIFIED IDEOGRAPH + {0x9CBD, 0x610E}, //4355 #CJK UNIFIED IDEOGRAPH + {0x9CBE, 0x6147}, //4356 #CJK UNIFIED IDEOGRAPH + {0x9CBF, 0x613E}, //4357 #CJK UNIFIED IDEOGRAPH + {0x9CC0, 0x6128}, //4358 #CJK UNIFIED IDEOGRAPH + {0x9CC1, 0x6127}, //4359 #CJK UNIFIED IDEOGRAPH + {0x9CC2, 0x614A}, //4360 #CJK UNIFIED IDEOGRAPH + {0x9CC3, 0x613F}, //4361 #CJK UNIFIED IDEOGRAPH + {0x9CC4, 0x613C}, //4362 #CJK UNIFIED IDEOGRAPH + {0x9CC5, 0x612C}, //4363 #CJK UNIFIED IDEOGRAPH + {0x9CC6, 0x6134}, //4364 #CJK UNIFIED IDEOGRAPH + {0x9CC7, 0x613D}, //4365 #CJK UNIFIED IDEOGRAPH + {0x9CC8, 0x6142}, //4366 #CJK UNIFIED IDEOGRAPH + {0x9CC9, 0x6144}, //4367 #CJK UNIFIED IDEOGRAPH + {0x9CCA, 0x6173}, //4368 #CJK UNIFIED IDEOGRAPH + {0x9CCB, 0x6177}, //4369 #CJK UNIFIED IDEOGRAPH + {0x9CCC, 0x6158}, //4370 #CJK UNIFIED IDEOGRAPH + {0x9CCD, 0x6159}, //4371 #CJK UNIFIED IDEOGRAPH + {0x9CCE, 0x615A}, //4372 #CJK UNIFIED IDEOGRAPH + {0x9CCF, 0x616B}, //4373 #CJK UNIFIED IDEOGRAPH + {0x9CD0, 0x6174}, //4374 #CJK UNIFIED IDEOGRAPH + {0x9CD1, 0x616F}, //4375 #CJK UNIFIED IDEOGRAPH + {0x9CD2, 0x6165}, //4376 #CJK UNIFIED IDEOGRAPH + {0x9CD3, 0x6171}, //4377 #CJK UNIFIED IDEOGRAPH + {0x9CD4, 0x615F}, //4378 #CJK UNIFIED IDEOGRAPH + {0x9CD5, 0x615D}, //4379 #CJK UNIFIED IDEOGRAPH + {0x9CD6, 0x6153}, //4380 #CJK UNIFIED IDEOGRAPH + {0x9CD7, 0x6175}, //4381 #CJK UNIFIED IDEOGRAPH + {0x9CD8, 0x6199}, //4382 #CJK UNIFIED IDEOGRAPH + {0x9CD9, 0x6196}, //4383 #CJK UNIFIED IDEOGRAPH + {0x9CDA, 0x6187}, //4384 #CJK UNIFIED IDEOGRAPH + {0x9CDB, 0x61AC}, //4385 #CJK UNIFIED IDEOGRAPH + {0x9CDC, 0x6194}, //4386 #CJK UNIFIED IDEOGRAPH + {0x9CDD, 0x619A}, //4387 #CJK UNIFIED IDEOGRAPH + {0x9CDE, 0x618A}, //4388 #CJK UNIFIED IDEOGRAPH + {0x9CDF, 0x6191}, //4389 #CJK UNIFIED IDEOGRAPH + {0x9CE0, 0x61AB}, //4390 #CJK UNIFIED IDEOGRAPH + {0x9CE1, 0x61AE}, //4391 #CJK UNIFIED IDEOGRAPH + {0x9CE2, 0x61CC}, //4392 #CJK UNIFIED IDEOGRAPH + {0x9CE3, 0x61CA}, //4393 #CJK UNIFIED IDEOGRAPH + {0x9CE4, 0x61C9}, //4394 #CJK UNIFIED IDEOGRAPH + {0x9CE5, 0x61F7}, //4395 #CJK UNIFIED IDEOGRAPH + {0x9CE6, 0x61C8}, //4396 #CJK UNIFIED IDEOGRAPH + {0x9CE7, 0x61C3}, //4397 #CJK UNIFIED IDEOGRAPH + {0x9CE8, 0x61C6}, //4398 #CJK UNIFIED IDEOGRAPH + {0x9CE9, 0x61BA}, //4399 #CJK UNIFIED IDEOGRAPH + {0x9CEA, 0x61CB}, //4400 #CJK UNIFIED IDEOGRAPH + {0x9CEB, 0x7F79}, //4401 #CJK UNIFIED IDEOGRAPH + {0x9CEC, 0x61CD}, //4402 #CJK UNIFIED IDEOGRAPH + {0x9CED, 0x61E6}, //4403 #CJK UNIFIED IDEOGRAPH + {0x9CEE, 0x61E3}, //4404 #CJK UNIFIED IDEOGRAPH + {0x9CEF, 0x61F6}, //4405 #CJK UNIFIED IDEOGRAPH + {0x9CF0, 0x61FA}, //4406 #CJK UNIFIED IDEOGRAPH + {0x9CF1, 0x61F4}, //4407 #CJK UNIFIED IDEOGRAPH + {0x9CF2, 0x61FF}, //4408 #CJK UNIFIED IDEOGRAPH + {0x9CF3, 0x61FD}, //4409 #CJK UNIFIED IDEOGRAPH + {0x9CF4, 0x61FC}, //4410 #CJK UNIFIED IDEOGRAPH + {0x9CF5, 0x61FE}, //4411 #CJK UNIFIED IDEOGRAPH + {0x9CF6, 0x6200}, //4412 #CJK UNIFIED IDEOGRAPH + {0x9CF7, 0x6208}, //4413 #CJK UNIFIED IDEOGRAPH + {0x9CF8, 0x6209}, //4414 #CJK UNIFIED IDEOGRAPH + {0x9CF9, 0x620D}, //4415 #CJK UNIFIED IDEOGRAPH + {0x9CFA, 0x620C}, //4416 #CJK UNIFIED IDEOGRAPH + {0x9CFB, 0x6214}, //4417 #CJK UNIFIED IDEOGRAPH + {0x9CFC, 0x621B}, //4418 #CJK UNIFIED IDEOGRAPH + {0x9D40, 0x621E}, //4419 #CJK UNIFIED IDEOGRAPH + {0x9D41, 0x6221}, //4420 #CJK UNIFIED IDEOGRAPH + {0x9D42, 0x622A}, //4421 #CJK UNIFIED IDEOGRAPH + {0x9D43, 0x622E}, //4422 #CJK UNIFIED IDEOGRAPH + {0x9D44, 0x6230}, //4423 #CJK UNIFIED IDEOGRAPH + {0x9D45, 0x6232}, //4424 #CJK UNIFIED IDEOGRAPH + {0x9D46, 0x6233}, //4425 #CJK UNIFIED IDEOGRAPH + {0x9D47, 0x6241}, //4426 #CJK UNIFIED IDEOGRAPH + {0x9D48, 0x624E}, //4427 #CJK UNIFIED IDEOGRAPH + {0x9D49, 0x625E}, //4428 #CJK UNIFIED IDEOGRAPH + {0x9D4A, 0x6263}, //4429 #CJK UNIFIED IDEOGRAPH + {0x9D4B, 0x625B}, //4430 #CJK UNIFIED IDEOGRAPH + {0x9D4C, 0x6260}, //4431 #CJK UNIFIED IDEOGRAPH + {0x9D4D, 0x6268}, //4432 #CJK UNIFIED IDEOGRAPH + {0x9D4E, 0x627C}, //4433 #CJK UNIFIED IDEOGRAPH + {0x9D4F, 0x6282}, //4434 #CJK UNIFIED IDEOGRAPH + {0x9D50, 0x6289}, //4435 #CJK UNIFIED IDEOGRAPH + {0x9D51, 0x627E}, //4436 #CJK UNIFIED IDEOGRAPH + {0x9D52, 0x6292}, //4437 #CJK UNIFIED IDEOGRAPH + {0x9D53, 0x6293}, //4438 #CJK UNIFIED IDEOGRAPH + {0x9D54, 0x6296}, //4439 #CJK UNIFIED IDEOGRAPH + {0x9D55, 0x62D4}, //4440 #CJK UNIFIED IDEOGRAPH + {0x9D56, 0x6283}, //4441 #CJK UNIFIED IDEOGRAPH + {0x9D57, 0x6294}, //4442 #CJK UNIFIED IDEOGRAPH + {0x9D58, 0x62D7}, //4443 #CJK UNIFIED IDEOGRAPH + {0x9D59, 0x62D1}, //4444 #CJK UNIFIED IDEOGRAPH + {0x9D5A, 0x62BB}, //4445 #CJK UNIFIED IDEOGRAPH + {0x9D5B, 0x62CF}, //4446 #CJK UNIFIED IDEOGRAPH + {0x9D5C, 0x62FF}, //4447 #CJK UNIFIED IDEOGRAPH + {0x9D5D, 0x62C6}, //4448 #CJK UNIFIED IDEOGRAPH + {0x9D5E, 0x64D4}, //4449 #CJK UNIFIED IDEOGRAPH + {0x9D5F, 0x62C8}, //4450 #CJK UNIFIED IDEOGRAPH + {0x9D60, 0x62DC}, //4451 #CJK UNIFIED IDEOGRAPH + {0x9D61, 0x62CC}, //4452 #CJK UNIFIED IDEOGRAPH + {0x9D62, 0x62CA}, //4453 #CJK UNIFIED IDEOGRAPH + {0x9D63, 0x62C2}, //4454 #CJK UNIFIED IDEOGRAPH + {0x9D64, 0x62C7}, //4455 #CJK UNIFIED IDEOGRAPH + {0x9D65, 0x629B}, //4456 #CJK UNIFIED IDEOGRAPH + {0x9D66, 0x62C9}, //4457 #CJK UNIFIED IDEOGRAPH + {0x9D67, 0x630C}, //4458 #CJK UNIFIED IDEOGRAPH + {0x9D68, 0x62EE}, //4459 #CJK UNIFIED IDEOGRAPH + {0x9D69, 0x62F1}, //4460 #CJK UNIFIED IDEOGRAPH + {0x9D6A, 0x6327}, //4461 #CJK UNIFIED IDEOGRAPH + {0x9D6B, 0x6302}, //4462 #CJK UNIFIED IDEOGRAPH + {0x9D6C, 0x6308}, //4463 #CJK UNIFIED IDEOGRAPH + {0x9D6D, 0x62EF}, //4464 #CJK UNIFIED IDEOGRAPH + {0x9D6E, 0x62F5}, //4465 #CJK UNIFIED IDEOGRAPH + {0x9D6F, 0x6350}, //4466 #CJK UNIFIED IDEOGRAPH + {0x9D70, 0x633E}, //4467 #CJK UNIFIED IDEOGRAPH + {0x9D71, 0x634D}, //4468 #CJK UNIFIED IDEOGRAPH + {0x9D72, 0x641C}, //4469 #CJK UNIFIED IDEOGRAPH + {0x9D73, 0x634F}, //4470 #CJK UNIFIED IDEOGRAPH + {0x9D74, 0x6396}, //4471 #CJK UNIFIED IDEOGRAPH + {0x9D75, 0x638E}, //4472 #CJK UNIFIED IDEOGRAPH + {0x9D76, 0x6380}, //4473 #CJK UNIFIED IDEOGRAPH + {0x9D77, 0x63AB}, //4474 #CJK UNIFIED IDEOGRAPH + {0x9D78, 0x6376}, //4475 #CJK UNIFIED IDEOGRAPH + {0x9D79, 0x63A3}, //4476 #CJK UNIFIED IDEOGRAPH + {0x9D7A, 0x638F}, //4477 #CJK UNIFIED IDEOGRAPH + {0x9D7B, 0x6389}, //4478 #CJK UNIFIED IDEOGRAPH + {0x9D7C, 0x639F}, //4479 #CJK UNIFIED IDEOGRAPH + {0x9D7D, 0x63B5}, //4480 #CJK UNIFIED IDEOGRAPH + {0x9D7E, 0x636B}, //4481 #CJK UNIFIED IDEOGRAPH + {0x9D80, 0x6369}, //4482 #CJK UNIFIED IDEOGRAPH + {0x9D81, 0x63BE}, //4483 #CJK UNIFIED IDEOGRAPH + {0x9D82, 0x63E9}, //4484 #CJK UNIFIED IDEOGRAPH + {0x9D83, 0x63C0}, //4485 #CJK UNIFIED IDEOGRAPH + {0x9D84, 0x63C6}, //4486 #CJK UNIFIED IDEOGRAPH + {0x9D85, 0x63E3}, //4487 #CJK UNIFIED IDEOGRAPH + {0x9D86, 0x63C9}, //4488 #CJK UNIFIED IDEOGRAPH + {0x9D87, 0x63D2}, //4489 #CJK UNIFIED IDEOGRAPH + {0x9D88, 0x63F6}, //4490 #CJK UNIFIED IDEOGRAPH + {0x9D89, 0x63C4}, //4491 #CJK UNIFIED IDEOGRAPH + {0x9D8A, 0x6416}, //4492 #CJK UNIFIED IDEOGRAPH + {0x9D8B, 0x6434}, //4493 #CJK UNIFIED IDEOGRAPH + {0x9D8C, 0x6406}, //4494 #CJK UNIFIED IDEOGRAPH + {0x9D8D, 0x6413}, //4495 #CJK UNIFIED IDEOGRAPH + {0x9D8E, 0x6426}, //4496 #CJK UNIFIED IDEOGRAPH + {0x9D8F, 0x6436}, //4497 #CJK UNIFIED IDEOGRAPH + {0x9D90, 0x651D}, //4498 #CJK UNIFIED IDEOGRAPH + {0x9D91, 0x6417}, //4499 #CJK UNIFIED IDEOGRAPH + {0x9D92, 0x6428}, //4500 #CJK UNIFIED IDEOGRAPH + {0x9D93, 0x640F}, //4501 #CJK UNIFIED IDEOGRAPH + {0x9D94, 0x6467}, //4502 #CJK UNIFIED IDEOGRAPH + {0x9D95, 0x646F}, //4503 #CJK UNIFIED IDEOGRAPH + {0x9D96, 0x6476}, //4504 #CJK UNIFIED IDEOGRAPH + {0x9D97, 0x644E}, //4505 #CJK UNIFIED IDEOGRAPH + {0x9D98, 0x652A}, //4506 #CJK UNIFIED IDEOGRAPH + {0x9D99, 0x6495}, //4507 #CJK UNIFIED IDEOGRAPH + {0x9D9A, 0x6493}, //4508 #CJK UNIFIED IDEOGRAPH + {0x9D9B, 0x64A5}, //4509 #CJK UNIFIED IDEOGRAPH + {0x9D9C, 0x64A9}, //4510 #CJK UNIFIED IDEOGRAPH + {0x9D9D, 0x6488}, //4511 #CJK UNIFIED IDEOGRAPH + {0x9D9E, 0x64BC}, //4512 #CJK UNIFIED IDEOGRAPH + {0x9D9F, 0x64DA}, //4513 #CJK UNIFIED IDEOGRAPH + {0x9DA0, 0x64D2}, //4514 #CJK UNIFIED IDEOGRAPH + {0x9DA1, 0x64C5}, //4515 #CJK UNIFIED IDEOGRAPH + {0x9DA2, 0x64C7}, //4516 #CJK UNIFIED IDEOGRAPH + {0x9DA3, 0x64BB}, //4517 #CJK UNIFIED IDEOGRAPH + {0x9DA4, 0x64D8}, //4518 #CJK UNIFIED IDEOGRAPH + {0x9DA5, 0x64C2}, //4519 #CJK UNIFIED IDEOGRAPH + {0x9DA6, 0x64F1}, //4520 #CJK UNIFIED IDEOGRAPH + {0x9DA7, 0x64E7}, //4521 #CJK UNIFIED IDEOGRAPH + {0x9DA8, 0x8209}, //4522 #CJK UNIFIED IDEOGRAPH + {0x9DA9, 0x64E0}, //4523 #CJK UNIFIED IDEOGRAPH + {0x9DAA, 0x64E1}, //4524 #CJK UNIFIED IDEOGRAPH + {0x9DAB, 0x62AC}, //4525 #CJK UNIFIED IDEOGRAPH + {0x9DAC, 0x64E3}, //4526 #CJK UNIFIED IDEOGRAPH + {0x9DAD, 0x64EF}, //4527 #CJK UNIFIED IDEOGRAPH + {0x9DAE, 0x652C}, //4528 #CJK UNIFIED IDEOGRAPH + {0x9DAF, 0x64F6}, //4529 #CJK UNIFIED IDEOGRAPH + {0x9DB0, 0x64F4}, //4530 #CJK UNIFIED IDEOGRAPH + {0x9DB1, 0x64F2}, //4531 #CJK UNIFIED IDEOGRAPH + {0x9DB2, 0x64FA}, //4532 #CJK UNIFIED IDEOGRAPH + {0x9DB3, 0x6500}, //4533 #CJK UNIFIED IDEOGRAPH + {0x9DB4, 0x64FD}, //4534 #CJK UNIFIED IDEOGRAPH + {0x9DB5, 0x6518}, //4535 #CJK UNIFIED IDEOGRAPH + {0x9DB6, 0x651C}, //4536 #CJK UNIFIED IDEOGRAPH + {0x9DB7, 0x6505}, //4537 #CJK UNIFIED IDEOGRAPH + {0x9DB8, 0x6524}, //4538 #CJK UNIFIED IDEOGRAPH + {0x9DB9, 0x6523}, //4539 #CJK UNIFIED IDEOGRAPH + {0x9DBA, 0x652B}, //4540 #CJK UNIFIED IDEOGRAPH + {0x9DBB, 0x6534}, //4541 #CJK UNIFIED IDEOGRAPH + {0x9DBC, 0x6535}, //4542 #CJK UNIFIED IDEOGRAPH + {0x9DBD, 0x6537}, //4543 #CJK UNIFIED IDEOGRAPH + {0x9DBE, 0x6536}, //4544 #CJK UNIFIED IDEOGRAPH + {0x9DBF, 0x6538}, //4545 #CJK UNIFIED IDEOGRAPH + {0x9DC0, 0x754B}, //4546 #CJK UNIFIED IDEOGRAPH + {0x9DC1, 0x6548}, //4547 #CJK UNIFIED IDEOGRAPH + {0x9DC2, 0x6556}, //4548 #CJK UNIFIED IDEOGRAPH + {0x9DC3, 0x6555}, //4549 #CJK UNIFIED IDEOGRAPH + {0x9DC4, 0x654D}, //4550 #CJK UNIFIED IDEOGRAPH + {0x9DC5, 0x6558}, //4551 #CJK UNIFIED IDEOGRAPH + {0x9DC6, 0x655E}, //4552 #CJK UNIFIED IDEOGRAPH + {0x9DC7, 0x655D}, //4553 #CJK UNIFIED IDEOGRAPH + {0x9DC8, 0x6572}, //4554 #CJK UNIFIED IDEOGRAPH + {0x9DC9, 0x6578}, //4555 #CJK UNIFIED IDEOGRAPH + {0x9DCA, 0x6582}, //4556 #CJK UNIFIED IDEOGRAPH + {0x9DCB, 0x6583}, //4557 #CJK UNIFIED IDEOGRAPH + {0x9DCC, 0x8B8A}, //4558 #CJK UNIFIED IDEOGRAPH + {0x9DCD, 0x659B}, //4559 #CJK UNIFIED IDEOGRAPH + {0x9DCE, 0x659F}, //4560 #CJK UNIFIED IDEOGRAPH + {0x9DCF, 0x65AB}, //4561 #CJK UNIFIED IDEOGRAPH + {0x9DD0, 0x65B7}, //4562 #CJK UNIFIED IDEOGRAPH + {0x9DD1, 0x65C3}, //4563 #CJK UNIFIED IDEOGRAPH + {0x9DD2, 0x65C6}, //4564 #CJK UNIFIED IDEOGRAPH + {0x9DD3, 0x65C1}, //4565 #CJK UNIFIED IDEOGRAPH + {0x9DD4, 0x65C4}, //4566 #CJK UNIFIED IDEOGRAPH + {0x9DD5, 0x65CC}, //4567 #CJK UNIFIED IDEOGRAPH + {0x9DD6, 0x65D2}, //4568 #CJK UNIFIED IDEOGRAPH + {0x9DD7, 0x65DB}, //4569 #CJK UNIFIED IDEOGRAPH + {0x9DD8, 0x65D9}, //4570 #CJK UNIFIED IDEOGRAPH + {0x9DD9, 0x65E0}, //4571 #CJK UNIFIED IDEOGRAPH + {0x9DDA, 0x65E1}, //4572 #CJK UNIFIED IDEOGRAPH + {0x9DDB, 0x65F1}, //4573 #CJK UNIFIED IDEOGRAPH + {0x9DDC, 0x6772}, //4574 #CJK UNIFIED IDEOGRAPH + {0x9DDD, 0x660A}, //4575 #CJK UNIFIED IDEOGRAPH + {0x9DDE, 0x6603}, //4576 #CJK UNIFIED IDEOGRAPH + {0x9DDF, 0x65FB}, //4577 #CJK UNIFIED IDEOGRAPH + {0x9DE0, 0x6773}, //4578 #CJK UNIFIED IDEOGRAPH + {0x9DE1, 0x6635}, //4579 #CJK UNIFIED IDEOGRAPH + {0x9DE2, 0x6636}, //4580 #CJK UNIFIED IDEOGRAPH + {0x9DE3, 0x6634}, //4581 #CJK UNIFIED IDEOGRAPH + {0x9DE4, 0x661C}, //4582 #CJK UNIFIED IDEOGRAPH + {0x9DE5, 0x664F}, //4583 #CJK UNIFIED IDEOGRAPH + {0x9DE6, 0x6644}, //4584 #CJK UNIFIED IDEOGRAPH + {0x9DE7, 0x6649}, //4585 #CJK UNIFIED IDEOGRAPH + {0x9DE8, 0x6641}, //4586 #CJK UNIFIED IDEOGRAPH + {0x9DE9, 0x665E}, //4587 #CJK UNIFIED IDEOGRAPH + {0x9DEA, 0x665D}, //4588 #CJK UNIFIED IDEOGRAPH + {0x9DEB, 0x6664}, //4589 #CJK UNIFIED IDEOGRAPH + {0x9DEC, 0x6667}, //4590 #CJK UNIFIED IDEOGRAPH + {0x9DED, 0x6668}, //4591 #CJK UNIFIED IDEOGRAPH + {0x9DEE, 0x665F}, //4592 #CJK UNIFIED IDEOGRAPH + {0x9DEF, 0x6662}, //4593 #CJK UNIFIED IDEOGRAPH + {0x9DF0, 0x6670}, //4594 #CJK UNIFIED IDEOGRAPH + {0x9DF1, 0x6683}, //4595 #CJK UNIFIED IDEOGRAPH + {0x9DF2, 0x6688}, //4596 #CJK UNIFIED IDEOGRAPH + {0x9DF3, 0x668E}, //4597 #CJK UNIFIED IDEOGRAPH + {0x9DF4, 0x6689}, //4598 #CJK UNIFIED IDEOGRAPH + {0x9DF5, 0x6684}, //4599 #CJK UNIFIED IDEOGRAPH + {0x9DF6, 0x6698}, //4600 #CJK UNIFIED IDEOGRAPH + {0x9DF7, 0x669D}, //4601 #CJK UNIFIED IDEOGRAPH + {0x9DF8, 0x66C1}, //4602 #CJK UNIFIED IDEOGRAPH + {0x9DF9, 0x66B9}, //4603 #CJK UNIFIED IDEOGRAPH + {0x9DFA, 0x66C9}, //4604 #CJK UNIFIED IDEOGRAPH + {0x9DFB, 0x66BE}, //4605 #CJK UNIFIED IDEOGRAPH + {0x9DFC, 0x66BC}, //4606 #CJK UNIFIED IDEOGRAPH + {0x9E40, 0x66C4}, //4607 #CJK UNIFIED IDEOGRAPH + {0x9E41, 0x66B8}, //4608 #CJK UNIFIED IDEOGRAPH + {0x9E42, 0x66D6}, //4609 #CJK UNIFIED IDEOGRAPH + {0x9E43, 0x66DA}, //4610 #CJK UNIFIED IDEOGRAPH + {0x9E44, 0x66E0}, //4611 #CJK UNIFIED IDEOGRAPH + {0x9E45, 0x663F}, //4612 #CJK UNIFIED IDEOGRAPH + {0x9E46, 0x66E6}, //4613 #CJK UNIFIED IDEOGRAPH + {0x9E47, 0x66E9}, //4614 #CJK UNIFIED IDEOGRAPH + {0x9E48, 0x66F0}, //4615 #CJK UNIFIED IDEOGRAPH + {0x9E49, 0x66F5}, //4616 #CJK UNIFIED IDEOGRAPH + {0x9E4A, 0x66F7}, //4617 #CJK UNIFIED IDEOGRAPH + {0x9E4B, 0x670F}, //4618 #CJK UNIFIED IDEOGRAPH + {0x9E4C, 0x6716}, //4619 #CJK UNIFIED IDEOGRAPH + {0x9E4D, 0x671E}, //4620 #CJK UNIFIED IDEOGRAPH + {0x9E4E, 0x6726}, //4621 #CJK UNIFIED IDEOGRAPH + {0x9E4F, 0x6727}, //4622 #CJK UNIFIED IDEOGRAPH + {0x9E50, 0x9738}, //4623 #CJK UNIFIED IDEOGRAPH + {0x9E51, 0x672E}, //4624 #CJK UNIFIED IDEOGRAPH + {0x9E52, 0x673F}, //4625 #CJK UNIFIED IDEOGRAPH + {0x9E53, 0x6736}, //4626 #CJK UNIFIED IDEOGRAPH + {0x9E54, 0x6741}, //4627 #CJK UNIFIED IDEOGRAPH + {0x9E55, 0x6738}, //4628 #CJK UNIFIED IDEOGRAPH + {0x9E56, 0x6737}, //4629 #CJK UNIFIED IDEOGRAPH + {0x9E57, 0x6746}, //4630 #CJK UNIFIED IDEOGRAPH + {0x9E58, 0x675E}, //4631 #CJK UNIFIED IDEOGRAPH + {0x9E59, 0x6760}, //4632 #CJK UNIFIED IDEOGRAPH + {0x9E5A, 0x6759}, //4633 #CJK UNIFIED IDEOGRAPH + {0x9E5B, 0x6763}, //4634 #CJK UNIFIED IDEOGRAPH + {0x9E5C, 0x6764}, //4635 #CJK UNIFIED IDEOGRAPH + {0x9E5D, 0x6789}, //4636 #CJK UNIFIED IDEOGRAPH + {0x9E5E, 0x6770}, //4637 #CJK UNIFIED IDEOGRAPH + {0x9E5F, 0x67A9}, //4638 #CJK UNIFIED IDEOGRAPH + {0x9E60, 0x677C}, //4639 #CJK UNIFIED IDEOGRAPH + {0x9E61, 0x676A}, //4640 #CJK UNIFIED IDEOGRAPH + {0x9E62, 0x678C}, //4641 #CJK UNIFIED IDEOGRAPH + {0x9E63, 0x678B}, //4642 #CJK UNIFIED IDEOGRAPH + {0x9E64, 0x67A6}, //4643 #CJK UNIFIED IDEOGRAPH + {0x9E65, 0x67A1}, //4644 #CJK UNIFIED IDEOGRAPH + {0x9E66, 0x6785}, //4645 #CJK UNIFIED IDEOGRAPH + {0x9E67, 0x67B7}, //4646 #CJK UNIFIED IDEOGRAPH + {0x9E68, 0x67EF}, //4647 #CJK UNIFIED IDEOGRAPH + {0x9E69, 0x67B4}, //4648 #CJK UNIFIED IDEOGRAPH + {0x9E6A, 0x67EC}, //4649 #CJK UNIFIED IDEOGRAPH + {0x9E6B, 0x67B3}, //4650 #CJK UNIFIED IDEOGRAPH + {0x9E6C, 0x67E9}, //4651 #CJK UNIFIED IDEOGRAPH + {0x9E6D, 0x67B8}, //4652 #CJK UNIFIED IDEOGRAPH + {0x9E6E, 0x67E4}, //4653 #CJK UNIFIED IDEOGRAPH + {0x9E6F, 0x67DE}, //4654 #CJK UNIFIED IDEOGRAPH + {0x9E70, 0x67DD}, //4655 #CJK UNIFIED IDEOGRAPH + {0x9E71, 0x67E2}, //4656 #CJK UNIFIED IDEOGRAPH + {0x9E72, 0x67EE}, //4657 #CJK UNIFIED IDEOGRAPH + {0x9E73, 0x67B9}, //4658 #CJK UNIFIED IDEOGRAPH + {0x9E74, 0x67CE}, //4659 #CJK UNIFIED IDEOGRAPH + {0x9E75, 0x67C6}, //4660 #CJK UNIFIED IDEOGRAPH + {0x9E76, 0x67E7}, //4661 #CJK UNIFIED IDEOGRAPH + {0x9E77, 0x6A9C}, //4662 #CJK UNIFIED IDEOGRAPH + {0x9E78, 0x681E}, //4663 #CJK UNIFIED IDEOGRAPH + {0x9E79, 0x6846}, //4664 #CJK UNIFIED IDEOGRAPH + {0x9E7A, 0x6829}, //4665 #CJK UNIFIED IDEOGRAPH + {0x9E7B, 0x6840}, //4666 #CJK UNIFIED IDEOGRAPH + {0x9E7C, 0x684D}, //4667 #CJK UNIFIED IDEOGRAPH + {0x9E7D, 0x6832}, //4668 #CJK UNIFIED IDEOGRAPH + {0x9E7E, 0x684E}, //4669 #CJK UNIFIED IDEOGRAPH + {0x9E80, 0x68B3}, //4670 #CJK UNIFIED IDEOGRAPH + {0x9E81, 0x682B}, //4671 #CJK UNIFIED IDEOGRAPH + {0x9E82, 0x6859}, //4672 #CJK UNIFIED IDEOGRAPH + {0x9E83, 0x6863}, //4673 #CJK UNIFIED IDEOGRAPH + {0x9E84, 0x6877}, //4674 #CJK UNIFIED IDEOGRAPH + {0x9E85, 0x687F}, //4675 #CJK UNIFIED IDEOGRAPH + {0x9E86, 0x689F}, //4676 #CJK UNIFIED IDEOGRAPH + {0x9E87, 0x688F}, //4677 #CJK UNIFIED IDEOGRAPH + {0x9E88, 0x68AD}, //4678 #CJK UNIFIED IDEOGRAPH + {0x9E89, 0x6894}, //4679 #CJK UNIFIED IDEOGRAPH + {0x9E8A, 0x689D}, //4680 #CJK UNIFIED IDEOGRAPH + {0x9E8B, 0x689B}, //4681 #CJK UNIFIED IDEOGRAPH + {0x9E8C, 0x6883}, //4682 #CJK UNIFIED IDEOGRAPH + {0x9E8D, 0x6AAE}, //4683 #CJK UNIFIED IDEOGRAPH + {0x9E8E, 0x68B9}, //4684 #CJK UNIFIED IDEOGRAPH + {0x9E8F, 0x6874}, //4685 #CJK UNIFIED IDEOGRAPH + {0x9E90, 0x68B5}, //4686 #CJK UNIFIED IDEOGRAPH + {0x9E91, 0x68A0}, //4687 #CJK UNIFIED IDEOGRAPH + {0x9E92, 0x68BA}, //4688 #CJK UNIFIED IDEOGRAPH + {0x9E93, 0x690F}, //4689 #CJK UNIFIED IDEOGRAPH + {0x9E94, 0x688D}, //4690 #CJK UNIFIED IDEOGRAPH + {0x9E95, 0x687E}, //4691 #CJK UNIFIED IDEOGRAPH + {0x9E96, 0x6901}, //4692 #CJK UNIFIED IDEOGRAPH + {0x9E97, 0x68CA}, //4693 #CJK UNIFIED IDEOGRAPH + {0x9E98, 0x6908}, //4694 #CJK UNIFIED IDEOGRAPH + {0x9E99, 0x68D8}, //4695 #CJK UNIFIED IDEOGRAPH + {0x9E9A, 0x6922}, //4696 #CJK UNIFIED IDEOGRAPH + {0x9E9B, 0x6926}, //4697 #CJK UNIFIED IDEOGRAPH + {0x9E9C, 0x68E1}, //4698 #CJK UNIFIED IDEOGRAPH + {0x9E9D, 0x690C}, //4699 #CJK UNIFIED IDEOGRAPH + {0x9E9E, 0x68CD}, //4700 #CJK UNIFIED IDEOGRAPH + {0x9E9F, 0x68D4}, //4701 #CJK UNIFIED IDEOGRAPH + {0x9EA0, 0x68E7}, //4702 #CJK UNIFIED IDEOGRAPH + {0x9EA1, 0x68D5}, //4703 #CJK UNIFIED IDEOGRAPH + {0x9EA2, 0x6936}, //4704 #CJK UNIFIED IDEOGRAPH + {0x9EA3, 0x6912}, //4705 #CJK UNIFIED IDEOGRAPH + {0x9EA4, 0x6904}, //4706 #CJK UNIFIED IDEOGRAPH + {0x9EA5, 0x68D7}, //4707 #CJK UNIFIED IDEOGRAPH + {0x9EA6, 0x68E3}, //4708 #CJK UNIFIED IDEOGRAPH + {0x9EA7, 0x6925}, //4709 #CJK UNIFIED IDEOGRAPH + {0x9EA8, 0x68F9}, //4710 #CJK UNIFIED IDEOGRAPH + {0x9EA9, 0x68E0}, //4711 #CJK UNIFIED IDEOGRAPH + {0x9EAA, 0x68EF}, //4712 #CJK UNIFIED IDEOGRAPH + {0x9EAB, 0x6928}, //4713 #CJK UNIFIED IDEOGRAPH + {0x9EAC, 0x692A}, //4714 #CJK UNIFIED IDEOGRAPH + {0x9EAD, 0x691A}, //4715 #CJK UNIFIED IDEOGRAPH + {0x9EAE, 0x6923}, //4716 #CJK UNIFIED IDEOGRAPH + {0x9EAF, 0x6921}, //4717 #CJK UNIFIED IDEOGRAPH + {0x9EB0, 0x68C6}, //4718 #CJK UNIFIED IDEOGRAPH + {0x9EB1, 0x6979}, //4719 #CJK UNIFIED IDEOGRAPH + {0x9EB2, 0x6977}, //4720 #CJK UNIFIED IDEOGRAPH + {0x9EB3, 0x695C}, //4721 #CJK UNIFIED IDEOGRAPH + {0x9EB4, 0x6978}, //4722 #CJK UNIFIED IDEOGRAPH + {0x9EB5, 0x696B}, //4723 #CJK UNIFIED IDEOGRAPH + {0x9EB6, 0x6954}, //4724 #CJK UNIFIED IDEOGRAPH + {0x9EB7, 0x697E}, //4725 #CJK UNIFIED IDEOGRAPH + {0x9EB8, 0x696E}, //4726 #CJK UNIFIED IDEOGRAPH + {0x9EB9, 0x6939}, //4727 #CJK UNIFIED IDEOGRAPH + {0x9EBA, 0x6974}, //4728 #CJK UNIFIED IDEOGRAPH + {0x9EBB, 0x693D}, //4729 #CJK UNIFIED IDEOGRAPH + {0x9EBC, 0x6959}, //4730 #CJK UNIFIED IDEOGRAPH + {0x9EBD, 0x6930}, //4731 #CJK UNIFIED IDEOGRAPH + {0x9EBE, 0x6961}, //4732 #CJK UNIFIED IDEOGRAPH + {0x9EBF, 0x695E}, //4733 #CJK UNIFIED IDEOGRAPH + {0x9EC0, 0x695D}, //4734 #CJK UNIFIED IDEOGRAPH + {0x9EC1, 0x6981}, //4735 #CJK UNIFIED IDEOGRAPH + {0x9EC2, 0x696A}, //4736 #CJK UNIFIED IDEOGRAPH + {0x9EC3, 0x69B2}, //4737 #CJK UNIFIED IDEOGRAPH + {0x9EC4, 0x69AE}, //4738 #CJK UNIFIED IDEOGRAPH + {0x9EC5, 0x69D0}, //4739 #CJK UNIFIED IDEOGRAPH + {0x9EC6, 0x69BF}, //4740 #CJK UNIFIED IDEOGRAPH + {0x9EC7, 0x69C1}, //4741 #CJK UNIFIED IDEOGRAPH + {0x9EC8, 0x69D3}, //4742 #CJK UNIFIED IDEOGRAPH + {0x9EC9, 0x69BE}, //4743 #CJK UNIFIED IDEOGRAPH + {0x9ECA, 0x69CE}, //4744 #CJK UNIFIED IDEOGRAPH + {0x9ECB, 0x5BE8}, //4745 #CJK UNIFIED IDEOGRAPH + {0x9ECC, 0x69CA}, //4746 #CJK UNIFIED IDEOGRAPH + {0x9ECD, 0x69DD}, //4747 #CJK UNIFIED IDEOGRAPH + {0x9ECE, 0x69BB}, //4748 #CJK UNIFIED IDEOGRAPH + {0x9ECF, 0x69C3}, //4749 #CJK UNIFIED IDEOGRAPH + {0x9ED0, 0x69A7}, //4750 #CJK UNIFIED IDEOGRAPH + {0x9ED1, 0x6A2E}, //4751 #CJK UNIFIED IDEOGRAPH + {0x9ED2, 0x6991}, //4752 #CJK UNIFIED IDEOGRAPH + {0x9ED3, 0x69A0}, //4753 #CJK UNIFIED IDEOGRAPH + {0x9ED4, 0x699C}, //4754 #CJK UNIFIED IDEOGRAPH + {0x9ED5, 0x6995}, //4755 #CJK UNIFIED IDEOGRAPH + {0x9ED6, 0x69B4}, //4756 #CJK UNIFIED IDEOGRAPH + {0x9ED7, 0x69DE}, //4757 #CJK UNIFIED IDEOGRAPH + {0x9ED8, 0x69E8}, //4758 #CJK UNIFIED IDEOGRAPH + {0x9ED9, 0x6A02}, //4759 #CJK UNIFIED IDEOGRAPH + {0x9EDA, 0x6A1B}, //4760 #CJK UNIFIED IDEOGRAPH + {0x9EDB, 0x69FF}, //4761 #CJK UNIFIED IDEOGRAPH + {0x9EDC, 0x6B0A}, //4762 #CJK UNIFIED IDEOGRAPH + {0x9EDD, 0x69F9}, //4763 #CJK UNIFIED IDEOGRAPH + {0x9EDE, 0x69F2}, //4764 #CJK UNIFIED IDEOGRAPH + {0x9EDF, 0x69E7}, //4765 #CJK UNIFIED IDEOGRAPH + {0x9EE0, 0x6A05}, //4766 #CJK UNIFIED IDEOGRAPH + {0x9EE1, 0x69B1}, //4767 #CJK UNIFIED IDEOGRAPH + {0x9EE2, 0x6A1E}, //4768 #CJK UNIFIED IDEOGRAPH + {0x9EE3, 0x69ED}, //4769 #CJK UNIFIED IDEOGRAPH + {0x9EE4, 0x6A14}, //4770 #CJK UNIFIED IDEOGRAPH + {0x9EE5, 0x69EB}, //4771 #CJK UNIFIED IDEOGRAPH + {0x9EE6, 0x6A0A}, //4772 #CJK UNIFIED IDEOGRAPH + {0x9EE7, 0x6A12}, //4773 #CJK UNIFIED IDEOGRAPH + {0x9EE8, 0x6AC1}, //4774 #CJK UNIFIED IDEOGRAPH + {0x9EE9, 0x6A23}, //4775 #CJK UNIFIED IDEOGRAPH + {0x9EEA, 0x6A13}, //4776 #CJK UNIFIED IDEOGRAPH + {0x9EEB, 0x6A44}, //4777 #CJK UNIFIED IDEOGRAPH + {0x9EEC, 0x6A0C}, //4778 #CJK UNIFIED IDEOGRAPH + {0x9EED, 0x6A72}, //4779 #CJK UNIFIED IDEOGRAPH + {0x9EEE, 0x6A36}, //4780 #CJK UNIFIED IDEOGRAPH + {0x9EEF, 0x6A78}, //4781 #CJK UNIFIED IDEOGRAPH + {0x9EF0, 0x6A47}, //4782 #CJK UNIFIED IDEOGRAPH + {0x9EF1, 0x6A62}, //4783 #CJK UNIFIED IDEOGRAPH + {0x9EF2, 0x6A59}, //4784 #CJK UNIFIED IDEOGRAPH + {0x9EF3, 0x6A66}, //4785 #CJK UNIFIED IDEOGRAPH + {0x9EF4, 0x6A48}, //4786 #CJK UNIFIED IDEOGRAPH + {0x9EF5, 0x6A38}, //4787 #CJK UNIFIED IDEOGRAPH + {0x9EF6, 0x6A22}, //4788 #CJK UNIFIED IDEOGRAPH + {0x9EF7, 0x6A90}, //4789 #CJK UNIFIED IDEOGRAPH + {0x9EF8, 0x6A8D}, //4790 #CJK UNIFIED IDEOGRAPH + {0x9EF9, 0x6AA0}, //4791 #CJK UNIFIED IDEOGRAPH + {0x9EFA, 0x6A84}, //4792 #CJK UNIFIED IDEOGRAPH + {0x9EFB, 0x6AA2}, //4793 #CJK UNIFIED IDEOGRAPH + {0x9EFC, 0x6AA3}, //4794 #CJK UNIFIED IDEOGRAPH + {0x9F40, 0x6A97}, //4795 #CJK UNIFIED IDEOGRAPH + {0x9F41, 0x8617}, //4796 #CJK UNIFIED IDEOGRAPH + {0x9F42, 0x6ABB}, //4797 #CJK UNIFIED IDEOGRAPH + {0x9F43, 0x6AC3}, //4798 #CJK UNIFIED IDEOGRAPH + {0x9F44, 0x6AC2}, //4799 #CJK UNIFIED IDEOGRAPH + {0x9F45, 0x6AB8}, //4800 #CJK UNIFIED IDEOGRAPH + {0x9F46, 0x6AB3}, //4801 #CJK UNIFIED IDEOGRAPH + {0x9F47, 0x6AAC}, //4802 #CJK UNIFIED IDEOGRAPH + {0x9F48, 0x6ADE}, //4803 #CJK UNIFIED IDEOGRAPH + {0x9F49, 0x6AD1}, //4804 #CJK UNIFIED IDEOGRAPH + {0x9F4A, 0x6ADF}, //4805 #CJK UNIFIED IDEOGRAPH + {0x9F4B, 0x6AAA}, //4806 #CJK UNIFIED IDEOGRAPH + {0x9F4C, 0x6ADA}, //4807 #CJK UNIFIED IDEOGRAPH + {0x9F4D, 0x6AEA}, //4808 #CJK UNIFIED IDEOGRAPH + {0x9F4E, 0x6AFB}, //4809 #CJK UNIFIED IDEOGRAPH + {0x9F4F, 0x6B05}, //4810 #CJK UNIFIED IDEOGRAPH + {0x9F50, 0x8616}, //4811 #CJK UNIFIED IDEOGRAPH + {0x9F51, 0x6AFA}, //4812 #CJK UNIFIED IDEOGRAPH + {0x9F52, 0x6B12}, //4813 #CJK UNIFIED IDEOGRAPH + {0x9F53, 0x6B16}, //4814 #CJK UNIFIED IDEOGRAPH + {0x9F54, 0x9B31}, //4815 #CJK UNIFIED IDEOGRAPH + {0x9F55, 0x6B1F}, //4816 #CJK UNIFIED IDEOGRAPH + {0x9F56, 0x6B38}, //4817 #CJK UNIFIED IDEOGRAPH + {0x9F57, 0x6B37}, //4818 #CJK UNIFIED IDEOGRAPH + {0x9F58, 0x76DC}, //4819 #CJK UNIFIED IDEOGRAPH + {0x9F59, 0x6B39}, //4820 #CJK UNIFIED IDEOGRAPH + {0x9F5A, 0x98EE}, //4821 #CJK UNIFIED IDEOGRAPH + {0x9F5B, 0x6B47}, //4822 #CJK UNIFIED IDEOGRAPH + {0x9F5C, 0x6B43}, //4823 #CJK UNIFIED IDEOGRAPH + {0x9F5D, 0x6B49}, //4824 #CJK UNIFIED IDEOGRAPH + {0x9F5E, 0x6B50}, //4825 #CJK UNIFIED IDEOGRAPH + {0x9F5F, 0x6B59}, //4826 #CJK UNIFIED IDEOGRAPH + {0x9F60, 0x6B54}, //4827 #CJK UNIFIED IDEOGRAPH + {0x9F61, 0x6B5B}, //4828 #CJK UNIFIED IDEOGRAPH + {0x9F62, 0x6B5F}, //4829 #CJK UNIFIED IDEOGRAPH + {0x9F63, 0x6B61}, //4830 #CJK UNIFIED IDEOGRAPH + {0x9F64, 0x6B78}, //4831 #CJK UNIFIED IDEOGRAPH + {0x9F65, 0x6B79}, //4832 #CJK UNIFIED IDEOGRAPH + {0x9F66, 0x6B7F}, //4833 #CJK UNIFIED IDEOGRAPH + {0x9F67, 0x6B80}, //4834 #CJK UNIFIED IDEOGRAPH + {0x9F68, 0x6B84}, //4835 #CJK UNIFIED IDEOGRAPH + {0x9F69, 0x6B83}, //4836 #CJK UNIFIED IDEOGRAPH + {0x9F6A, 0x6B8D}, //4837 #CJK UNIFIED IDEOGRAPH + {0x9F6B, 0x6B98}, //4838 #CJK UNIFIED IDEOGRAPH + {0x9F6C, 0x6B95}, //4839 #CJK UNIFIED IDEOGRAPH + {0x9F6D, 0x6B9E}, //4840 #CJK UNIFIED IDEOGRAPH + {0x9F6E, 0x6BA4}, //4841 #CJK UNIFIED IDEOGRAPH + {0x9F6F, 0x6BAA}, //4842 #CJK UNIFIED IDEOGRAPH + {0x9F70, 0x6BAB}, //4843 #CJK UNIFIED IDEOGRAPH + {0x9F71, 0x6BAF}, //4844 #CJK UNIFIED IDEOGRAPH + {0x9F72, 0x6BB2}, //4845 #CJK UNIFIED IDEOGRAPH + {0x9F73, 0x6BB1}, //4846 #CJK UNIFIED IDEOGRAPH + {0x9F74, 0x6BB3}, //4847 #CJK UNIFIED IDEOGRAPH + {0x9F75, 0x6BB7}, //4848 #CJK UNIFIED IDEOGRAPH + {0x9F76, 0x6BBC}, //4849 #CJK UNIFIED IDEOGRAPH + {0x9F77, 0x6BC6}, //4850 #CJK UNIFIED IDEOGRAPH + {0x9F78, 0x6BCB}, //4851 #CJK UNIFIED IDEOGRAPH + {0x9F79, 0x6BD3}, //4852 #CJK UNIFIED IDEOGRAPH + {0x9F7A, 0x6BDF}, //4853 #CJK UNIFIED IDEOGRAPH + {0x9F7B, 0x6BEC}, //4854 #CJK UNIFIED IDEOGRAPH + {0x9F7C, 0x6BEB}, //4855 #CJK UNIFIED IDEOGRAPH + {0x9F7D, 0x6BF3}, //4856 #CJK UNIFIED IDEOGRAPH + {0x9F7E, 0x6BEF}, //4857 #CJK UNIFIED IDEOGRAPH + {0x9F80, 0x9EBE}, //4858 #CJK UNIFIED IDEOGRAPH + {0x9F81, 0x6C08}, //4859 #CJK UNIFIED IDEOGRAPH + {0x9F82, 0x6C13}, //4860 #CJK UNIFIED IDEOGRAPH + {0x9F83, 0x6C14}, //4861 #CJK UNIFIED IDEOGRAPH + {0x9F84, 0x6C1B}, //4862 #CJK UNIFIED IDEOGRAPH + {0x9F85, 0x6C24}, //4863 #CJK UNIFIED IDEOGRAPH + {0x9F86, 0x6C23}, //4864 #CJK UNIFIED IDEOGRAPH + {0x9F87, 0x6C5E}, //4865 #CJK UNIFIED IDEOGRAPH + {0x9F88, 0x6C55}, //4866 #CJK UNIFIED IDEOGRAPH + {0x9F89, 0x6C62}, //4867 #CJK UNIFIED IDEOGRAPH + {0x9F8A, 0x6C6A}, //4868 #CJK UNIFIED IDEOGRAPH + {0x9F8B, 0x6C82}, //4869 #CJK UNIFIED IDEOGRAPH + {0x9F8C, 0x6C8D}, //4870 #CJK UNIFIED IDEOGRAPH + {0x9F8D, 0x6C9A}, //4871 #CJK UNIFIED IDEOGRAPH + {0x9F8E, 0x6C81}, //4872 #CJK UNIFIED IDEOGRAPH + {0x9F8F, 0x6C9B}, //4873 #CJK UNIFIED IDEOGRAPH + {0x9F90, 0x6C7E}, //4874 #CJK UNIFIED IDEOGRAPH + {0x9F91, 0x6C68}, //4875 #CJK UNIFIED IDEOGRAPH + {0x9F92, 0x6C73}, //4876 #CJK UNIFIED IDEOGRAPH + {0x9F93, 0x6C92}, //4877 #CJK UNIFIED IDEOGRAPH + {0x9F94, 0x6C90}, //4878 #CJK UNIFIED IDEOGRAPH + {0x9F95, 0x6CC4}, //4879 #CJK UNIFIED IDEOGRAPH + {0x9F96, 0x6CF1}, //4880 #CJK UNIFIED IDEOGRAPH + {0x9F97, 0x6CD3}, //4881 #CJK UNIFIED IDEOGRAPH + {0x9F98, 0x6CBD}, //4882 #CJK UNIFIED IDEOGRAPH + {0x9F99, 0x6CD7}, //4883 #CJK UNIFIED IDEOGRAPH + {0x9F9A, 0x6CC5}, //4884 #CJK UNIFIED IDEOGRAPH + {0x9F9B, 0x6CDD}, //4885 #CJK UNIFIED IDEOGRAPH + {0x9F9C, 0x6CAE}, //4886 #CJK UNIFIED IDEOGRAPH + {0x9F9D, 0x6CB1}, //4887 #CJK UNIFIED IDEOGRAPH + {0x9F9E, 0x6CBE}, //4888 #CJK UNIFIED IDEOGRAPH + {0x9F9F, 0x6CBA}, //4889 #CJK UNIFIED IDEOGRAPH + {0x9FA0, 0x6CDB}, //4890 #CJK UNIFIED IDEOGRAPH + {0x9FA1, 0x6CEF}, //4891 #CJK UNIFIED IDEOGRAPH + {0x9FA2, 0x6CD9}, //4892 #CJK UNIFIED IDEOGRAPH + {0x9FA3, 0x6CEA}, //4893 #CJK UNIFIED IDEOGRAPH + {0x9FA4, 0x6D1F}, //4894 #CJK UNIFIED IDEOGRAPH + {0x9FA5, 0x884D}, //4895 #CJK UNIFIED IDEOGRAPH + {0x9FA6, 0x6D36}, //4896 #CJK UNIFIED IDEOGRAPH + {0x9FA7, 0x6D2B}, //4897 #CJK UNIFIED IDEOGRAPH + {0x9FA8, 0x6D3D}, //4898 #CJK UNIFIED IDEOGRAPH + {0x9FA9, 0x6D38}, //4899 #CJK UNIFIED IDEOGRAPH + {0x9FAA, 0x6D19}, //4900 #CJK UNIFIED IDEOGRAPH + {0x9FAB, 0x6D35}, //4901 #CJK UNIFIED IDEOGRAPH + {0x9FAC, 0x6D33}, //4902 #CJK UNIFIED IDEOGRAPH + {0x9FAD, 0x6D12}, //4903 #CJK UNIFIED IDEOGRAPH + {0x9FAE, 0x6D0C}, //4904 #CJK UNIFIED IDEOGRAPH + {0x9FAF, 0x6D63}, //4905 #CJK UNIFIED IDEOGRAPH + {0x9FB0, 0x6D93}, //4906 #CJK UNIFIED IDEOGRAPH + {0x9FB1, 0x6D64}, //4907 #CJK UNIFIED IDEOGRAPH + {0x9FB2, 0x6D5A}, //4908 #CJK UNIFIED IDEOGRAPH + {0x9FB3, 0x6D79}, //4909 #CJK UNIFIED IDEOGRAPH + {0x9FB4, 0x6D59}, //4910 #CJK UNIFIED IDEOGRAPH + {0x9FB5, 0x6D8E}, //4911 #CJK UNIFIED IDEOGRAPH + {0x9FB6, 0x6D95}, //4912 #CJK UNIFIED IDEOGRAPH + {0x9FB7, 0x6FE4}, //4913 #CJK UNIFIED IDEOGRAPH + {0x9FB8, 0x6D85}, //4914 #CJK UNIFIED IDEOGRAPH + {0x9FB9, 0x6DF9}, //4915 #CJK UNIFIED IDEOGRAPH + {0x9FBA, 0x6E15}, //4916 #CJK UNIFIED IDEOGRAPH + {0x9FBB, 0x6E0A}, //4917 #CJK UNIFIED IDEOGRAPH + {0x9FBC, 0x6DB5}, //4918 #CJK UNIFIED IDEOGRAPH + {0x9FBD, 0x6DC7}, //4919 #CJK UNIFIED IDEOGRAPH + {0x9FBE, 0x6DE6}, //4920 #CJK UNIFIED IDEOGRAPH + {0x9FBF, 0x6DB8}, //4921 #CJK UNIFIED IDEOGRAPH + {0x9FC0, 0x6DC6}, //4922 #CJK UNIFIED IDEOGRAPH + {0x9FC1, 0x6DEC}, //4923 #CJK UNIFIED IDEOGRAPH + {0x9FC2, 0x6DDE}, //4924 #CJK UNIFIED IDEOGRAPH + {0x9FC3, 0x6DCC}, //4925 #CJK UNIFIED IDEOGRAPH + {0x9FC4, 0x6DE8}, //4926 #CJK UNIFIED IDEOGRAPH + {0x9FC5, 0x6DD2}, //4927 #CJK UNIFIED IDEOGRAPH + {0x9FC6, 0x6DC5}, //4928 #CJK UNIFIED IDEOGRAPH + {0x9FC7, 0x6DFA}, //4929 #CJK UNIFIED IDEOGRAPH + {0x9FC8, 0x6DD9}, //4930 #CJK UNIFIED IDEOGRAPH + {0x9FC9, 0x6DE4}, //4931 #CJK UNIFIED IDEOGRAPH + {0x9FCA, 0x6DD5}, //4932 #CJK UNIFIED IDEOGRAPH + {0x9FCB, 0x6DEA}, //4933 #CJK UNIFIED IDEOGRAPH + {0x9FCC, 0x6DEE}, //4934 #CJK UNIFIED IDEOGRAPH + {0x9FCD, 0x6E2D}, //4935 #CJK UNIFIED IDEOGRAPH + {0x9FCE, 0x6E6E}, //4936 #CJK UNIFIED IDEOGRAPH + {0x9FCF, 0x6E2E}, //4937 #CJK UNIFIED IDEOGRAPH + {0x9FD0, 0x6E19}, //4938 #CJK UNIFIED IDEOGRAPH + {0x9FD1, 0x6E72}, //4939 #CJK UNIFIED IDEOGRAPH + {0x9FD2, 0x6E5F}, //4940 #CJK UNIFIED IDEOGRAPH + {0x9FD3, 0x6E3E}, //4941 #CJK UNIFIED IDEOGRAPH + {0x9FD4, 0x6E23}, //4942 #CJK UNIFIED IDEOGRAPH + {0x9FD5, 0x6E6B}, //4943 #CJK UNIFIED IDEOGRAPH + {0x9FD6, 0x6E2B}, //4944 #CJK UNIFIED IDEOGRAPH + {0x9FD7, 0x6E76}, //4945 #CJK UNIFIED IDEOGRAPH + {0x9FD8, 0x6E4D}, //4946 #CJK UNIFIED IDEOGRAPH + {0x9FD9, 0x6E1F}, //4947 #CJK UNIFIED IDEOGRAPH + {0x9FDA, 0x6E43}, //4948 #CJK UNIFIED IDEOGRAPH + {0x9FDB, 0x6E3A}, //4949 #CJK UNIFIED IDEOGRAPH + {0x9FDC, 0x6E4E}, //4950 #CJK UNIFIED IDEOGRAPH + {0x9FDD, 0x6E24}, //4951 #CJK UNIFIED IDEOGRAPH + {0x9FDE, 0x6EFF}, //4952 #CJK UNIFIED IDEOGRAPH + {0x9FDF, 0x6E1D}, //4953 #CJK UNIFIED IDEOGRAPH + {0x9FE0, 0x6E38}, //4954 #CJK UNIFIED IDEOGRAPH + {0x9FE1, 0x6E82}, //4955 #CJK UNIFIED IDEOGRAPH + {0x9FE2, 0x6EAA}, //4956 #CJK UNIFIED IDEOGRAPH + {0x9FE3, 0x6E98}, //4957 #CJK UNIFIED IDEOGRAPH + {0x9FE4, 0x6EC9}, //4958 #CJK UNIFIED IDEOGRAPH + {0x9FE5, 0x6EB7}, //4959 #CJK UNIFIED IDEOGRAPH + {0x9FE6, 0x6ED3}, //4960 #CJK UNIFIED IDEOGRAPH + {0x9FE7, 0x6EBD}, //4961 #CJK UNIFIED IDEOGRAPH + {0x9FE8, 0x6EAF}, //4962 #CJK UNIFIED IDEOGRAPH + {0x9FE9, 0x6EC4}, //4963 #CJK UNIFIED IDEOGRAPH + {0x9FEA, 0x6EB2}, //4964 #CJK UNIFIED IDEOGRAPH + {0x9FEB, 0x6ED4}, //4965 #CJK UNIFIED IDEOGRAPH + {0x9FEC, 0x6ED5}, //4966 #CJK UNIFIED IDEOGRAPH + {0x9FED, 0x6E8F}, //4967 #CJK UNIFIED IDEOGRAPH + {0x9FEE, 0x6EA5}, //4968 #CJK UNIFIED IDEOGRAPH + {0x9FEF, 0x6EC2}, //4969 #CJK UNIFIED IDEOGRAPH + {0x9FF0, 0x6E9F}, //4970 #CJK UNIFIED IDEOGRAPH + {0x9FF1, 0x6F41}, //4971 #CJK UNIFIED IDEOGRAPH + {0x9FF2, 0x6F11}, //4972 #CJK UNIFIED IDEOGRAPH + {0x9FF3, 0x704C}, //4973 #CJK UNIFIED IDEOGRAPH + {0x9FF4, 0x6EEC}, //4974 #CJK UNIFIED IDEOGRAPH + {0x9FF5, 0x6EF8}, //4975 #CJK UNIFIED IDEOGRAPH + {0x9FF6, 0x6EFE}, //4976 #CJK UNIFIED IDEOGRAPH + {0x9FF7, 0x6F3F}, //4977 #CJK UNIFIED IDEOGRAPH + {0x9FF8, 0x6EF2}, //4978 #CJK UNIFIED IDEOGRAPH + {0x9FF9, 0x6F31}, //4979 #CJK UNIFIED IDEOGRAPH + {0x9FFA, 0x6EEF}, //4980 #CJK UNIFIED IDEOGRAPH + {0x9FFB, 0x6F32}, //4981 #CJK UNIFIED IDEOGRAPH + {0x9FFC, 0x6ECC}, //4982 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x6F3E}, //4983 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x6F13}, //4984 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x6EF7}, //4985 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x6F86}, //4986 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x6F7A}, //4987 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x6F78}, //4988 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x6F81}, //4989 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x6F80}, //4990 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x6F6F}, //4991 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x6F5B}, //4992 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x6FF3}, //4993 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x6F6D}, //4994 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x6F82}, //4995 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x6F7C}, //4996 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x6F58}, //4997 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x6F8E}, //4998 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x6F91}, //4999 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x6FC2}, //5000 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x6F66}, //5001 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x6FB3}, //5002 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x6FA3}, //5003 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x6FA1}, //5004 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x6FA4}, //5005 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x6FB9}, //5006 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x6FC6}, //5007 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x6FAA}, //5008 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x6FDF}, //5009 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x6FD5}, //5010 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x6FEC}, //5011 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x6FD4}, //5012 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x6FD8}, //5013 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x6FF1}, //5014 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x6FEE}, //5015 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x6FDB}, //5016 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x7009}, //5017 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x700B}, //5018 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x6FFA}, //5019 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x7011}, //5020 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x7001}, //5021 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x700F}, //5022 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x6FFE}, //5023 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x701B}, //5024 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x701A}, //5025 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x6F74}, //5026 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x701D}, //5027 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x7018}, //5028 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x701F}, //5029 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x7030}, //5030 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x703E}, //5031 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x7032}, //5032 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x7051}, //5033 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x7063}, //5034 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x7099}, //5035 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x7092}, //5036 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x70AF}, //5037 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x70F1}, //5038 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x70AC}, //5039 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x70B8}, //5040 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x70B3}, //5041 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x70AE}, //5042 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x70DF}, //5043 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x70CB}, //5044 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x70DD}, //5045 #CJK UNIFIED IDEOGRAPH + {0xE080, 0x70D9}, //5046 #CJK UNIFIED IDEOGRAPH + {0xE081, 0x7109}, //5047 #CJK UNIFIED IDEOGRAPH + {0xE082, 0x70FD}, //5048 #CJK UNIFIED IDEOGRAPH + {0xE083, 0x711C}, //5049 #CJK UNIFIED IDEOGRAPH + {0xE084, 0x7119}, //5050 #CJK UNIFIED IDEOGRAPH + {0xE085, 0x7165}, //5051 #CJK UNIFIED IDEOGRAPH + {0xE086, 0x7155}, //5052 #CJK UNIFIED IDEOGRAPH + {0xE087, 0x7188}, //5053 #CJK UNIFIED IDEOGRAPH + {0xE088, 0x7166}, //5054 #CJK UNIFIED IDEOGRAPH + {0xE089, 0x7162}, //5055 #CJK UNIFIED IDEOGRAPH + {0xE08A, 0x714C}, //5056 #CJK UNIFIED IDEOGRAPH + {0xE08B, 0x7156}, //5057 #CJK UNIFIED IDEOGRAPH + {0xE08C, 0x716C}, //5058 #CJK UNIFIED IDEOGRAPH + {0xE08D, 0x718F}, //5059 #CJK UNIFIED IDEOGRAPH + {0xE08E, 0x71FB}, //5060 #CJK UNIFIED IDEOGRAPH + {0xE08F, 0x7184}, //5061 #CJK UNIFIED IDEOGRAPH + {0xE090, 0x7195}, //5062 #CJK UNIFIED IDEOGRAPH + {0xE091, 0x71A8}, //5063 #CJK UNIFIED IDEOGRAPH + {0xE092, 0x71AC}, //5064 #CJK UNIFIED IDEOGRAPH + {0xE093, 0x71D7}, //5065 #CJK UNIFIED IDEOGRAPH + {0xE094, 0x71B9}, //5066 #CJK UNIFIED IDEOGRAPH + {0xE095, 0x71BE}, //5067 #CJK UNIFIED IDEOGRAPH + {0xE096, 0x71D2}, //5068 #CJK UNIFIED IDEOGRAPH + {0xE097, 0x71C9}, //5069 #CJK UNIFIED IDEOGRAPH + {0xE098, 0x71D4}, //5070 #CJK UNIFIED IDEOGRAPH + {0xE099, 0x71CE}, //5071 #CJK UNIFIED IDEOGRAPH + {0xE09A, 0x71E0}, //5072 #CJK UNIFIED IDEOGRAPH + {0xE09B, 0x71EC}, //5073 #CJK UNIFIED IDEOGRAPH + {0xE09C, 0x71E7}, //5074 #CJK UNIFIED IDEOGRAPH + {0xE09D, 0x71F5}, //5075 #CJK UNIFIED IDEOGRAPH + {0xE09E, 0x71FC}, //5076 #CJK UNIFIED IDEOGRAPH + {0xE09F, 0x71F9}, //5077 #CJK UNIFIED IDEOGRAPH + {0xE0A0, 0x71FF}, //5078 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x720D}, //5079 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x7210}, //5080 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x721B}, //5081 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x7228}, //5082 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x722D}, //5083 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x722C}, //5084 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x7230}, //5085 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x7232}, //5086 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x723B}, //5087 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x723C}, //5088 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x723F}, //5089 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x7240}, //5090 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x7246}, //5091 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x724B}, //5092 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x7258}, //5093 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x7274}, //5094 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x727E}, //5095 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x7282}, //5096 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x7281}, //5097 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x7287}, //5098 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x7292}, //5099 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x7296}, //5100 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x72A2}, //5101 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x72A7}, //5102 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x72B9}, //5103 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x72B2}, //5104 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x72C3}, //5105 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x72C6}, //5106 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x72C4}, //5107 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x72CE}, //5108 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x72D2}, //5109 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x72E2}, //5110 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x72E0}, //5111 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x72E1}, //5112 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x72F9}, //5113 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x72F7}, //5114 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x500F}, //5115 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x7317}, //5116 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x730A}, //5117 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x731C}, //5118 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x7316}, //5119 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x731D}, //5120 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x7334}, //5121 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x732F}, //5122 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x7329}, //5123 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x7325}, //5124 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x733E}, //5125 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x734E}, //5126 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x734F}, //5127 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x9ED8}, //5128 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x7357}, //5129 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x736A}, //5130 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x7368}, //5131 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x7370}, //5132 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x7378}, //5133 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x7375}, //5134 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x737B}, //5135 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x737A}, //5136 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x73C8}, //5137 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x73B3}, //5138 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x73CE}, //5139 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x73BB}, //5140 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x73C0}, //5141 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x73E5}, //5142 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x73EE}, //5143 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x73DE}, //5144 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x74A2}, //5145 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x7405}, //5146 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x746F}, //5147 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x7425}, //5148 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x73F8}, //5149 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x7432}, //5150 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x743A}, //5151 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x7455}, //5152 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x743F}, //5153 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x745F}, //5154 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x7459}, //5155 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x7441}, //5156 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x745C}, //5157 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x7469}, //5158 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x7470}, //5159 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x7463}, //5160 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x746A}, //5161 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x7476}, //5162 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x747E}, //5163 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x748B}, //5164 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x749E}, //5165 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x74A7}, //5166 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x74CA}, //5167 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x74CF}, //5168 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x74D4}, //5169 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x73F1}, //5170 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x74E0}, //5171 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x74E3}, //5172 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x74E7}, //5173 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x74E9}, //5174 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x74EE}, //5175 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x74F2}, //5176 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x74F0}, //5177 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x74F1}, //5178 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x74F8}, //5179 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x74F7}, //5180 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x7504}, //5181 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x7503}, //5182 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x7505}, //5183 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x750C}, //5184 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x750E}, //5185 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x750D}, //5186 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x7515}, //5187 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x7513}, //5188 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x751E}, //5189 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x7526}, //5190 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x752C}, //5191 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x753C}, //5192 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x7544}, //5193 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x754D}, //5194 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x754A}, //5195 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x7549}, //5196 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x755B}, //5197 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x7546}, //5198 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x755A}, //5199 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x7569}, //5200 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x7564}, //5201 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x7567}, //5202 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x756B}, //5203 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x756D}, //5204 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x7578}, //5205 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x7576}, //5206 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x7586}, //5207 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x7587}, //5208 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x7574}, //5209 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x758A}, //5210 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x7589}, //5211 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x7582}, //5212 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x7594}, //5213 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x759A}, //5214 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x759D}, //5215 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x75A5}, //5216 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x75A3}, //5217 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x75C2}, //5218 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x75B3}, //5219 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x75C3}, //5220 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x75B5}, //5221 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x75BD}, //5222 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x75B8}, //5223 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x75BC}, //5224 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x75B1}, //5225 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x75CD}, //5226 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x75CA}, //5227 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x75D2}, //5228 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x75D9}, //5229 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x75E3}, //5230 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x75DE}, //5231 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x75FE}, //5232 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x75FF}, //5233 #CJK UNIFIED IDEOGRAPH + {0xE180, 0x75FC}, //5234 #CJK UNIFIED IDEOGRAPH + {0xE181, 0x7601}, //5235 #CJK UNIFIED IDEOGRAPH + {0xE182, 0x75F0}, //5236 #CJK UNIFIED IDEOGRAPH + {0xE183, 0x75FA}, //5237 #CJK UNIFIED IDEOGRAPH + {0xE184, 0x75F2}, //5238 #CJK UNIFIED IDEOGRAPH + {0xE185, 0x75F3}, //5239 #CJK UNIFIED IDEOGRAPH + {0xE186, 0x760B}, //5240 #CJK UNIFIED IDEOGRAPH + {0xE187, 0x760D}, //5241 #CJK UNIFIED IDEOGRAPH + {0xE188, 0x7609}, //5242 #CJK UNIFIED IDEOGRAPH + {0xE189, 0x761F}, //5243 #CJK UNIFIED IDEOGRAPH + {0xE18A, 0x7627}, //5244 #CJK UNIFIED IDEOGRAPH + {0xE18B, 0x7620}, //5245 #CJK UNIFIED IDEOGRAPH + {0xE18C, 0x7621}, //5246 #CJK UNIFIED IDEOGRAPH + {0xE18D, 0x7622}, //5247 #CJK UNIFIED IDEOGRAPH + {0xE18E, 0x7624}, //5248 #CJK UNIFIED IDEOGRAPH + {0xE18F, 0x7634}, //5249 #CJK UNIFIED IDEOGRAPH + {0xE190, 0x7630}, //5250 #CJK UNIFIED IDEOGRAPH + {0xE191, 0x763B}, //5251 #CJK UNIFIED IDEOGRAPH + {0xE192, 0x7647}, //5252 #CJK UNIFIED IDEOGRAPH + {0xE193, 0x7648}, //5253 #CJK UNIFIED IDEOGRAPH + {0xE194, 0x7646}, //5254 #CJK UNIFIED IDEOGRAPH + {0xE195, 0x765C}, //5255 #CJK UNIFIED IDEOGRAPH + {0xE196, 0x7658}, //5256 #CJK UNIFIED IDEOGRAPH + {0xE197, 0x7661}, //5257 #CJK UNIFIED IDEOGRAPH + {0xE198, 0x7662}, //5258 #CJK UNIFIED IDEOGRAPH + {0xE199, 0x7668}, //5259 #CJK UNIFIED IDEOGRAPH + {0xE19A, 0x7669}, //5260 #CJK UNIFIED IDEOGRAPH + {0xE19B, 0x766A}, //5261 #CJK UNIFIED IDEOGRAPH + {0xE19C, 0x7667}, //5262 #CJK UNIFIED IDEOGRAPH + {0xE19D, 0x766C}, //5263 #CJK UNIFIED IDEOGRAPH + {0xE19E, 0x7670}, //5264 #CJK UNIFIED IDEOGRAPH + {0xE19F, 0x7672}, //5265 #CJK UNIFIED IDEOGRAPH + {0xE1A0, 0x7676}, //5266 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x7678}, //5267 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x767C}, //5268 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x7680}, //5269 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x7683}, //5270 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x7688}, //5271 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x768B}, //5272 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x768E}, //5273 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x7696}, //5274 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x7693}, //5275 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x7699}, //5276 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x769A}, //5277 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x76B0}, //5278 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x76B4}, //5279 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x76B8}, //5280 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x76B9}, //5281 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x76BA}, //5282 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x76C2}, //5283 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x76CD}, //5284 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x76D6}, //5285 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x76D2}, //5286 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x76DE}, //5287 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x76E1}, //5288 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x76E5}, //5289 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x76E7}, //5290 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x76EA}, //5291 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x862F}, //5292 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x76FB}, //5293 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x7708}, //5294 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x7707}, //5295 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x7704}, //5296 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x7729}, //5297 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x7724}, //5298 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x771E}, //5299 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x7725}, //5300 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x7726}, //5301 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x771B}, //5302 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x7737}, //5303 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x7738}, //5304 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x7747}, //5305 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x775A}, //5306 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x7768}, //5307 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x776B}, //5308 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x775B}, //5309 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x7765}, //5310 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x777F}, //5311 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x777E}, //5312 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x7779}, //5313 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x778E}, //5314 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x778B}, //5315 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x7791}, //5316 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x77A0}, //5317 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x779E}, //5318 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x77B0}, //5319 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x77B6}, //5320 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x77B9}, //5321 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x77BF}, //5322 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x77BC}, //5323 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x77BD}, //5324 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x77BB}, //5325 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x77C7}, //5326 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x77CD}, //5327 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x77D7}, //5328 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x77DA}, //5329 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x77DC}, //5330 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x77E3}, //5331 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x77EE}, //5332 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x77FC}, //5333 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x780C}, //5334 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x7812}, //5335 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x7926}, //5336 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x7820}, //5337 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x792A}, //5338 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x7845}, //5339 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x788E}, //5340 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x7874}, //5341 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x7886}, //5342 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x787C}, //5343 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x789A}, //5344 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x788C}, //5345 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x78A3}, //5346 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x78B5}, //5347 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x78AA}, //5348 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x78AF}, //5349 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x78D1}, //5350 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x78C6}, //5351 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x78CB}, //5352 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x78D4}, //5353 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x78BE}, //5354 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x78BC}, //5355 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x78C5}, //5356 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x78CA}, //5357 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x78EC}, //5358 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x78E7}, //5359 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x78DA}, //5360 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x78FD}, //5361 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x78F4}, //5362 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x7907}, //5363 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x7912}, //5364 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x7911}, //5365 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x7919}, //5366 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x792C}, //5367 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x792B}, //5368 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x7940}, //5369 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x7960}, //5370 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x7957}, //5371 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x795F}, //5372 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x795A}, //5373 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x7955}, //5374 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x7953}, //5375 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x797A}, //5376 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x797F}, //5377 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x798A}, //5378 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x799D}, //5379 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x79A7}, //5380 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x9F4B}, //5381 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x79AA}, //5382 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x79AE}, //5383 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x79B3}, //5384 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x79B9}, //5385 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x79BA}, //5386 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x79C9}, //5387 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x79D5}, //5388 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x79E7}, //5389 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x79EC}, //5390 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x79E1}, //5391 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x79E3}, //5392 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x7A08}, //5393 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x7A0D}, //5394 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x7A18}, //5395 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x7A19}, //5396 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x7A20}, //5397 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x7A1F}, //5398 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x7980}, //5399 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x7A31}, //5400 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x7A3B}, //5401 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x7A3E}, //5402 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x7A37}, //5403 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x7A43}, //5404 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x7A57}, //5405 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x7A49}, //5406 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x7A61}, //5407 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x7A62}, //5408 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x7A69}, //5409 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x9F9D}, //5410 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x7A70}, //5411 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x7A79}, //5412 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x7A7D}, //5413 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x7A88}, //5414 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x7A97}, //5415 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x7A95}, //5416 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x7A98}, //5417 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x7A96}, //5418 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x7AA9}, //5419 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x7AC8}, //5420 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x7AB0}, //5421 #CJK UNIFIED IDEOGRAPH + {0xE280, 0x7AB6}, //5422 #CJK UNIFIED IDEOGRAPH + {0xE281, 0x7AC5}, //5423 #CJK UNIFIED IDEOGRAPH + {0xE282, 0x7AC4}, //5424 #CJK UNIFIED IDEOGRAPH + {0xE283, 0x7ABF}, //5425 #CJK UNIFIED IDEOGRAPH + {0xE284, 0x9083}, //5426 #CJK UNIFIED IDEOGRAPH + {0xE285, 0x7AC7}, //5427 #CJK UNIFIED IDEOGRAPH + {0xE286, 0x7ACA}, //5428 #CJK UNIFIED IDEOGRAPH + {0xE287, 0x7ACD}, //5429 #CJK UNIFIED IDEOGRAPH + {0xE288, 0x7ACF}, //5430 #CJK UNIFIED IDEOGRAPH + {0xE289, 0x7AD5}, //5431 #CJK UNIFIED IDEOGRAPH + {0xE28A, 0x7AD3}, //5432 #CJK UNIFIED IDEOGRAPH + {0xE28B, 0x7AD9}, //5433 #CJK UNIFIED IDEOGRAPH + {0xE28C, 0x7ADA}, //5434 #CJK UNIFIED IDEOGRAPH + {0xE28D, 0x7ADD}, //5435 #CJK UNIFIED IDEOGRAPH + {0xE28E, 0x7AE1}, //5436 #CJK UNIFIED IDEOGRAPH + {0xE28F, 0x7AE2}, //5437 #CJK UNIFIED IDEOGRAPH + {0xE290, 0x7AE6}, //5438 #CJK UNIFIED IDEOGRAPH + {0xE291, 0x7AED}, //5439 #CJK UNIFIED IDEOGRAPH + {0xE292, 0x7AF0}, //5440 #CJK UNIFIED IDEOGRAPH + {0xE293, 0x7B02}, //5441 #CJK UNIFIED IDEOGRAPH + {0xE294, 0x7B0F}, //5442 #CJK UNIFIED IDEOGRAPH + {0xE295, 0x7B0A}, //5443 #CJK UNIFIED IDEOGRAPH + {0xE296, 0x7B06}, //5444 #CJK UNIFIED IDEOGRAPH + {0xE297, 0x7B33}, //5445 #CJK UNIFIED IDEOGRAPH + {0xE298, 0x7B18}, //5446 #CJK UNIFIED IDEOGRAPH + {0xE299, 0x7B19}, //5447 #CJK UNIFIED IDEOGRAPH + {0xE29A, 0x7B1E}, //5448 #CJK UNIFIED IDEOGRAPH + {0xE29B, 0x7B35}, //5449 #CJK UNIFIED IDEOGRAPH + {0xE29C, 0x7B28}, //5450 #CJK UNIFIED IDEOGRAPH + {0xE29D, 0x7B36}, //5451 #CJK UNIFIED IDEOGRAPH + {0xE29E, 0x7B50}, //5452 #CJK UNIFIED IDEOGRAPH + {0xE29F, 0x7B7A}, //5453 #CJK UNIFIED IDEOGRAPH + {0xE2A0, 0x7B04}, //5454 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x7B4D}, //5455 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x7B0B}, //5456 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x7B4C}, //5457 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x7B45}, //5458 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x7B75}, //5459 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x7B65}, //5460 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x7B74}, //5461 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x7B67}, //5462 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x7B70}, //5463 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x7B71}, //5464 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x7B6C}, //5465 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x7B6E}, //5466 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x7B9D}, //5467 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7B98}, //5468 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7B9F}, //5469 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x7B8D}, //5470 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7B9C}, //5471 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7B9A}, //5472 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x7B8B}, //5473 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x7B92}, //5474 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x7B8F}, //5475 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x7B5D}, //5476 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x7B99}, //5477 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x7BCB}, //5478 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x7BC1}, //5479 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7BCC}, //5480 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x7BCF}, //5481 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x7BB4}, //5482 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x7BC6}, //5483 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x7BDD}, //5484 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x7BE9}, //5485 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x7C11}, //5486 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x7C14}, //5487 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x7BE6}, //5488 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x7BE5}, //5489 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x7C60}, //5490 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x7C00}, //5491 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x7C07}, //5492 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x7C13}, //5493 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x7BF3}, //5494 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x7BF7}, //5495 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x7C17}, //5496 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x7C0D}, //5497 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x7BF6}, //5498 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x7C23}, //5499 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x7C27}, //5500 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x7C2A}, //5501 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x7C1F}, //5502 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x7C37}, //5503 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x7C2B}, //5504 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x7C3D}, //5505 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x7C4C}, //5506 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x7C43}, //5507 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x7C54}, //5508 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x7C4F}, //5509 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x7C40}, //5510 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x7C50}, //5511 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7C58}, //5512 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x7C5F}, //5513 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x7C64}, //5514 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x7C56}, //5515 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x7C65}, //5516 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x7C6C}, //5517 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x7C75}, //5518 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x7C83}, //5519 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x7C90}, //5520 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x7CA4}, //5521 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x7CAD}, //5522 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x7CA2}, //5523 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x7CAB}, //5524 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x7CA1}, //5525 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x7CA8}, //5526 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x7CB3}, //5527 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x7CB2}, //5528 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x7CB1}, //5529 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x7CAE}, //5530 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x7CB9}, //5531 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x7CBD}, //5532 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x7CC0}, //5533 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x7CC5}, //5534 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x7CC2}, //5535 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x7CD8}, //5536 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x7CD2}, //5537 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x7CDC}, //5538 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x7CE2}, //5539 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x9B3B}, //5540 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x7CEF}, //5541 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x7CF2}, //5542 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x7CF4}, //5543 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x7CF6}, //5544 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x7CFA}, //5545 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x7D06}, //5546 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x7D02}, //5547 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x7D1C}, //5548 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x7D15}, //5549 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x7D0A}, //5550 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x7D45}, //5551 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x7D4B}, //5552 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x7D2E}, //5553 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x7D32}, //5554 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x7D3F}, //5555 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x7D35}, //5556 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x7D46}, //5557 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x7D73}, //5558 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x7D56}, //5559 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x7D4E}, //5560 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x7D72}, //5561 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x7D68}, //5562 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x7D6E}, //5563 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x7D4F}, //5564 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x7D63}, //5565 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x7D93}, //5566 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x7D89}, //5567 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x7D5B}, //5568 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x7D8F}, //5569 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x7D7D}, //5570 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x7D9B}, //5571 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x7DBA}, //5572 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x7DAE}, //5573 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x7DA3}, //5574 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x7DB5}, //5575 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x7DC7}, //5576 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x7DBD}, //5577 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x7DAB}, //5578 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x7E3D}, //5579 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x7DA2}, //5580 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x7DAF}, //5581 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x7DDC}, //5582 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x7DB8}, //5583 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x7D9F}, //5584 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x7DB0}, //5585 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x7DD8}, //5586 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x7DDD}, //5587 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x7DE4}, //5588 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x7DDE}, //5589 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x7DFB}, //5590 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x7DF2}, //5591 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x7DE1}, //5592 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x7E05}, //5593 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x7E0A}, //5594 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x7E23}, //5595 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x7E21}, //5596 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x7E12}, //5597 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x7E31}, //5598 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x7E1F}, //5599 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x7E09}, //5600 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x7E0B}, //5601 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x7E22}, //5602 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x7E46}, //5603 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x7E66}, //5604 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x7E3B}, //5605 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x7E35}, //5606 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x7E39}, //5607 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x7E43}, //5608 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x7E37}, //5609 #CJK UNIFIED IDEOGRAPH + {0xE380, 0x7E32}, //5610 #CJK UNIFIED IDEOGRAPH + {0xE381, 0x7E3A}, //5611 #CJK UNIFIED IDEOGRAPH + {0xE382, 0x7E67}, //5612 #CJK UNIFIED IDEOGRAPH + {0xE383, 0x7E5D}, //5613 #CJK UNIFIED IDEOGRAPH + {0xE384, 0x7E56}, //5614 #CJK UNIFIED IDEOGRAPH + {0xE385, 0x7E5E}, //5615 #CJK UNIFIED IDEOGRAPH + {0xE386, 0x7E59}, //5616 #CJK UNIFIED IDEOGRAPH + {0xE387, 0x7E5A}, //5617 #CJK UNIFIED IDEOGRAPH + {0xE388, 0x7E79}, //5618 #CJK UNIFIED IDEOGRAPH + {0xE389, 0x7E6A}, //5619 #CJK UNIFIED IDEOGRAPH + {0xE38A, 0x7E69}, //5620 #CJK UNIFIED IDEOGRAPH + {0xE38B, 0x7E7C}, //5621 #CJK UNIFIED IDEOGRAPH + {0xE38C, 0x7E7B}, //5622 #CJK UNIFIED IDEOGRAPH + {0xE38D, 0x7E83}, //5623 #CJK UNIFIED IDEOGRAPH + {0xE38E, 0x7DD5}, //5624 #CJK UNIFIED IDEOGRAPH + {0xE38F, 0x7E7D}, //5625 #CJK UNIFIED IDEOGRAPH + {0xE390, 0x8FAE}, //5626 #CJK UNIFIED IDEOGRAPH + {0xE391, 0x7E7F}, //5627 #CJK UNIFIED IDEOGRAPH + {0xE392, 0x7E88}, //5628 #CJK UNIFIED IDEOGRAPH + {0xE393, 0x7E89}, //5629 #CJK UNIFIED IDEOGRAPH + {0xE394, 0x7E8C}, //5630 #CJK UNIFIED IDEOGRAPH + {0xE395, 0x7E92}, //5631 #CJK UNIFIED IDEOGRAPH + {0xE396, 0x7E90}, //5632 #CJK UNIFIED IDEOGRAPH + {0xE397, 0x7E93}, //5633 #CJK UNIFIED IDEOGRAPH + {0xE398, 0x7E94}, //5634 #CJK UNIFIED IDEOGRAPH + {0xE399, 0x7E96}, //5635 #CJK UNIFIED IDEOGRAPH + {0xE39A, 0x7E8E}, //5636 #CJK UNIFIED IDEOGRAPH + {0xE39B, 0x7E9B}, //5637 #CJK UNIFIED IDEOGRAPH + {0xE39C, 0x7E9C}, //5638 #CJK UNIFIED IDEOGRAPH + {0xE39D, 0x7F38}, //5639 #CJK UNIFIED IDEOGRAPH + {0xE39E, 0x7F3A}, //5640 #CJK UNIFIED IDEOGRAPH + {0xE39F, 0x7F45}, //5641 #CJK UNIFIED IDEOGRAPH + {0xE3A0, 0x7F4C}, //5642 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x7F4D}, //5643 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x7F4E}, //5644 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x7F50}, //5645 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x7F51}, //5646 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x7F55}, //5647 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x7F54}, //5648 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x7F58}, //5649 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x7F5F}, //5650 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x7F60}, //5651 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x7F68}, //5652 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x7F69}, //5653 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x7F67}, //5654 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x7F78}, //5655 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x7F82}, //5656 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x7F86}, //5657 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x7F83}, //5658 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x7F88}, //5659 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x7F87}, //5660 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x7F8C}, //5661 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x7F94}, //5662 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x7F9E}, //5663 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x7F9D}, //5664 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x7F9A}, //5665 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x7FA3}, //5666 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x7FAF}, //5667 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x7FB2}, //5668 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x7FB9}, //5669 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x7FAE}, //5670 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x7FB6}, //5671 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x7FB8}, //5672 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x8B71}, //5673 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x7FC5}, //5674 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x7FC6}, //5675 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x7FCA}, //5676 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x7FD5}, //5677 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x7FD4}, //5678 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x7FE1}, //5679 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x7FE6}, //5680 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x7FE9}, //5681 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x7FF3}, //5682 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x7FF9}, //5683 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x98DC}, //5684 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x8006}, //5685 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x8004}, //5686 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x800B}, //5687 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x8012}, //5688 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x8018}, //5689 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x8019}, //5690 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x801C}, //5691 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x8021}, //5692 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x8028}, //5693 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x803F}, //5694 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x803B}, //5695 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x804A}, //5696 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x8046}, //5697 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x8052}, //5698 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x8058}, //5699 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x805A}, //5700 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x805F}, //5701 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8062}, //5702 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x8068}, //5703 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x8073}, //5704 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x8072}, //5705 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x8070}, //5706 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x8076}, //5707 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x8079}, //5708 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x807D}, //5709 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x807F}, //5710 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x8084}, //5711 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x8086}, //5712 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x8085}, //5713 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x809B}, //5714 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x8093}, //5715 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x809A}, //5716 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x80AD}, //5717 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x5190}, //5718 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x80AC}, //5719 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x80DB}, //5720 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x80E5}, //5721 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x80D9}, //5722 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x80DD}, //5723 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x80C4}, //5724 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x80DA}, //5725 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x80D6}, //5726 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x8109}, //5727 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x80EF}, //5728 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x80F1}, //5729 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x811B}, //5730 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x8129}, //5731 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x8123}, //5732 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x812F}, //5733 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x814B}, //5734 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x968B}, //5735 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x8146}, //5736 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x813E}, //5737 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x8153}, //5738 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x8151}, //5739 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x80FC}, //5740 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x8171}, //5741 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x816E}, //5742 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x8165}, //5743 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x8166}, //5744 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x8174}, //5745 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x8183}, //5746 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x8188}, //5747 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x818A}, //5748 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x8180}, //5749 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x8182}, //5750 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x81A0}, //5751 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x8195}, //5752 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x81A4}, //5753 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x81A3}, //5754 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x815F}, //5755 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x8193}, //5756 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x81A9}, //5757 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x81B0}, //5758 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x81B5}, //5759 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x81BE}, //5760 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x81B8}, //5761 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x81BD}, //5762 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x81C0}, //5763 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x81C2}, //5764 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x81BA}, //5765 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x81C9}, //5766 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x81CD}, //5767 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x81D1}, //5768 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x81D9}, //5769 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x81D8}, //5770 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x81C8}, //5771 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x81DA}, //5772 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x81DF}, //5773 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x81E0}, //5774 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x81E7}, //5775 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x81FA}, //5776 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x81FB}, //5777 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x81FE}, //5778 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x8201}, //5779 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x8202}, //5780 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x8205}, //5781 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x8207}, //5782 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x820A}, //5783 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x820D}, //5784 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x8210}, //5785 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x8216}, //5786 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x8229}, //5787 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x822B}, //5788 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x8238}, //5789 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x8233}, //5790 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x8240}, //5791 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x8259}, //5792 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x8258}, //5793 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x825D}, //5794 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x825A}, //5795 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x825F}, //5796 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x8264}, //5797 #CJK UNIFIED IDEOGRAPH + {0xE480, 0x8262}, //5798 #CJK UNIFIED IDEOGRAPH + {0xE481, 0x8268}, //5799 #CJK UNIFIED IDEOGRAPH + {0xE482, 0x826A}, //5800 #CJK UNIFIED IDEOGRAPH + {0xE483, 0x826B}, //5801 #CJK UNIFIED IDEOGRAPH + {0xE484, 0x822E}, //5802 #CJK UNIFIED IDEOGRAPH + {0xE485, 0x8271}, //5803 #CJK UNIFIED IDEOGRAPH + {0xE486, 0x8277}, //5804 #CJK UNIFIED IDEOGRAPH + {0xE487, 0x8278}, //5805 #CJK UNIFIED IDEOGRAPH + {0xE488, 0x827E}, //5806 #CJK UNIFIED IDEOGRAPH + {0xE489, 0x828D}, //5807 #CJK UNIFIED IDEOGRAPH + {0xE48A, 0x8292}, //5808 #CJK UNIFIED IDEOGRAPH + {0xE48B, 0x82AB}, //5809 #CJK UNIFIED IDEOGRAPH + {0xE48C, 0x829F}, //5810 #CJK UNIFIED IDEOGRAPH + {0xE48D, 0x82BB}, //5811 #CJK UNIFIED IDEOGRAPH + {0xE48E, 0x82AC}, //5812 #CJK UNIFIED IDEOGRAPH + {0xE48F, 0x82E1}, //5813 #CJK UNIFIED IDEOGRAPH + {0xE490, 0x82E3}, //5814 #CJK UNIFIED IDEOGRAPH + {0xE491, 0x82DF}, //5815 #CJK UNIFIED IDEOGRAPH + {0xE492, 0x82D2}, //5816 #CJK UNIFIED IDEOGRAPH + {0xE493, 0x82F4}, //5817 #CJK UNIFIED IDEOGRAPH + {0xE494, 0x82F3}, //5818 #CJK UNIFIED IDEOGRAPH + {0xE495, 0x82FA}, //5819 #CJK UNIFIED IDEOGRAPH + {0xE496, 0x8393}, //5820 #CJK UNIFIED IDEOGRAPH + {0xE497, 0x8303}, //5821 #CJK UNIFIED IDEOGRAPH + {0xE498, 0x82FB}, //5822 #CJK UNIFIED IDEOGRAPH + {0xE499, 0x82F9}, //5823 #CJK UNIFIED IDEOGRAPH + {0xE49A, 0x82DE}, //5824 #CJK UNIFIED IDEOGRAPH + {0xE49B, 0x8306}, //5825 #CJK UNIFIED IDEOGRAPH + {0xE49C, 0x82DC}, //5826 #CJK UNIFIED IDEOGRAPH + {0xE49D, 0x8309}, //5827 #CJK UNIFIED IDEOGRAPH + {0xE49E, 0x82D9}, //5828 #CJK UNIFIED IDEOGRAPH + {0xE49F, 0x8335}, //5829 #CJK UNIFIED IDEOGRAPH + {0xE4A0, 0x8334}, //5830 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x8316}, //5831 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x8332}, //5832 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x8331}, //5833 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x8340}, //5834 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x8339}, //5835 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x8350}, //5836 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x8345}, //5837 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x832F}, //5838 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x832B}, //5839 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x8317}, //5840 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x8318}, //5841 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x8385}, //5842 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x839A}, //5843 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x83AA}, //5844 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x839F}, //5845 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x83A2}, //5846 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x8396}, //5847 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x8323}, //5848 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x838E}, //5849 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x8387}, //5850 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x838A}, //5851 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x837C}, //5852 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x83B5}, //5853 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x8373}, //5854 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x8375}, //5855 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x83A0}, //5856 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x8389}, //5857 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x83A8}, //5858 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x83F4}, //5859 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x8413}, //5860 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x83EB}, //5861 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x83CE}, //5862 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x83FD}, //5863 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x8403}, //5864 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x83D8}, //5865 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x840B}, //5866 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x83C1}, //5867 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x83F7}, //5868 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x8407}, //5869 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x83E0}, //5870 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x83F2}, //5871 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x840D}, //5872 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x8422}, //5873 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x8420}, //5874 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x83BD}, //5875 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x8438}, //5876 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x8506}, //5877 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x83FB}, //5878 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x846D}, //5879 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x842A}, //5880 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x843C}, //5881 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x855A}, //5882 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x8484}, //5883 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x8477}, //5884 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x846B}, //5885 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x84AD}, //5886 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x846E}, //5887 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x8482}, //5888 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x8469}, //5889 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x8446}, //5890 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x842C}, //5891 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x846F}, //5892 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x8479}, //5893 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x8435}, //5894 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x84CA}, //5895 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x8462}, //5896 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x84B9}, //5897 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x84BF}, //5898 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x849F}, //5899 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x84D9}, //5900 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x84CD}, //5901 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x84BB}, //5902 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x84DA}, //5903 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x84D0}, //5904 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x84C1}, //5905 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x84C6}, //5906 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x84D6}, //5907 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x84A1}, //5908 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x8521}, //5909 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x84FF}, //5910 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x84F4}, //5911 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x8517}, //5912 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x8518}, //5913 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x852C}, //5914 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x851F}, //5915 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x8515}, //5916 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x8514}, //5917 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x84FC}, //5918 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x8540}, //5919 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x8563}, //5920 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x8558}, //5921 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x8548}, //5922 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x8541}, //5923 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x8602}, //5924 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x854B}, //5925 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x8555}, //5926 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x8580}, //5927 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x85A4}, //5928 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x8588}, //5929 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x8591}, //5930 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x858A}, //5931 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x85A8}, //5932 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x856D}, //5933 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x8594}, //5934 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x859B}, //5935 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x85EA}, //5936 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x8587}, //5937 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x859C}, //5938 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x8577}, //5939 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x857E}, //5940 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x8590}, //5941 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x85C9}, //5942 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x85BA}, //5943 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x85CF}, //5944 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x85B9}, //5945 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x85D0}, //5946 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x85D5}, //5947 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x85DD}, //5948 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x85E5}, //5949 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x85DC}, //5950 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x85F9}, //5951 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x860A}, //5952 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x8613}, //5953 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x860B}, //5954 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x85FE}, //5955 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x85FA}, //5956 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x8606}, //5957 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x8622}, //5958 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x861A}, //5959 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x8630}, //5960 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x863F}, //5961 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x864D}, //5962 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x4E55}, //5963 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x8654}, //5964 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x865F}, //5965 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x8667}, //5966 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x8671}, //5967 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x8693}, //5968 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x86A3}, //5969 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x86A9}, //5970 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x86AA}, //5971 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x868B}, //5972 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x868C}, //5973 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x86B6}, //5974 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x86AF}, //5975 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x86C4}, //5976 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x86C6}, //5977 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x86B0}, //5978 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x86C9}, //5979 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x8823}, //5980 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x86AB}, //5981 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x86D4}, //5982 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x86DE}, //5983 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x86E9}, //5984 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x86EC}, //5985 #CJK UNIFIED IDEOGRAPH + {0xE580, 0x86DF}, //5986 #CJK UNIFIED IDEOGRAPH + {0xE581, 0x86DB}, //5987 #CJK UNIFIED IDEOGRAPH + {0xE582, 0x86EF}, //5988 #CJK UNIFIED IDEOGRAPH + {0xE583, 0x8712}, //5989 #CJK UNIFIED IDEOGRAPH + {0xE584, 0x8706}, //5990 #CJK UNIFIED IDEOGRAPH + {0xE585, 0x8708}, //5991 #CJK UNIFIED IDEOGRAPH + {0xE586, 0x8700}, //5992 #CJK UNIFIED IDEOGRAPH + {0xE587, 0x8703}, //5993 #CJK UNIFIED IDEOGRAPH + {0xE588, 0x86FB}, //5994 #CJK UNIFIED IDEOGRAPH + {0xE589, 0x8711}, //5995 #CJK UNIFIED IDEOGRAPH + {0xE58A, 0x8709}, //5996 #CJK UNIFIED IDEOGRAPH + {0xE58B, 0x870D}, //5997 #CJK UNIFIED IDEOGRAPH + {0xE58C, 0x86F9}, //5998 #CJK UNIFIED IDEOGRAPH + {0xE58D, 0x870A}, //5999 #CJK UNIFIED IDEOGRAPH + {0xE58E, 0x8734}, //6000 #CJK UNIFIED IDEOGRAPH + {0xE58F, 0x873F}, //6001 #CJK UNIFIED IDEOGRAPH + {0xE590, 0x8737}, //6002 #CJK UNIFIED IDEOGRAPH + {0xE591, 0x873B}, //6003 #CJK UNIFIED IDEOGRAPH + {0xE592, 0x8725}, //6004 #CJK UNIFIED IDEOGRAPH + {0xE593, 0x8729}, //6005 #CJK UNIFIED IDEOGRAPH + {0xE594, 0x871A}, //6006 #CJK UNIFIED IDEOGRAPH + {0xE595, 0x8760}, //6007 #CJK UNIFIED IDEOGRAPH + {0xE596, 0x875F}, //6008 #CJK UNIFIED IDEOGRAPH + {0xE597, 0x8778}, //6009 #CJK UNIFIED IDEOGRAPH + {0xE598, 0x874C}, //6010 #CJK UNIFIED IDEOGRAPH + {0xE599, 0x874E}, //6011 #CJK UNIFIED IDEOGRAPH + {0xE59A, 0x8774}, //6012 #CJK UNIFIED IDEOGRAPH + {0xE59B, 0x8757}, //6013 #CJK UNIFIED IDEOGRAPH + {0xE59C, 0x8768}, //6014 #CJK UNIFIED IDEOGRAPH + {0xE59D, 0x876E}, //6015 #CJK UNIFIED IDEOGRAPH + {0xE59E, 0x8759}, //6016 #CJK UNIFIED IDEOGRAPH + {0xE59F, 0x8753}, //6017 #CJK UNIFIED IDEOGRAPH + {0xE5A0, 0x8763}, //6018 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x876A}, //6019 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x8805}, //6020 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x87A2}, //6021 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x879F}, //6022 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x8782}, //6023 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x87AF}, //6024 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x87CB}, //6025 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x87BD}, //6026 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x87C0}, //6027 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x87D0}, //6028 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x96D6}, //6029 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x87AB}, //6030 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x87C4}, //6031 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x87B3}, //6032 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x87C7}, //6033 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x87C6}, //6034 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x87BB}, //6035 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x87EF}, //6036 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x87F2}, //6037 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x87E0}, //6038 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x880F}, //6039 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x880D}, //6040 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x87FE}, //6041 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x87F6}, //6042 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x87F7}, //6043 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x880E}, //6044 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x87D2}, //6045 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x8811}, //6046 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x8816}, //6047 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x8815}, //6048 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x8822}, //6049 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x8821}, //6050 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x8831}, //6051 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x8836}, //6052 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x8839}, //6053 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x8827}, //6054 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x883B}, //6055 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x8844}, //6056 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x8842}, //6057 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x8852}, //6058 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x8859}, //6059 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x885E}, //6060 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x8862}, //6061 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x886B}, //6062 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x8881}, //6063 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x887E}, //6064 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x889E}, //6065 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x8875}, //6066 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x887D}, //6067 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x88B5}, //6068 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x8872}, //6069 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x8882}, //6070 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x8897}, //6071 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x8892}, //6072 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x88AE}, //6073 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x8899}, //6074 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x88A2}, //6075 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x888D}, //6076 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x88A4}, //6077 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x88B0}, //6078 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x88BF}, //6079 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x88B1}, //6080 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x88C3}, //6081 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x88C4}, //6082 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x88D4}, //6083 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x88D8}, //6084 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x88D9}, //6085 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x88DD}, //6086 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x88F9}, //6087 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x8902}, //6088 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x88FC}, //6089 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x88F4}, //6090 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x88E8}, //6091 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x88F2}, //6092 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x8904}, //6093 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x890C}, //6094 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x890A}, //6095 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x8913}, //6096 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x8943}, //6097 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x891E}, //6098 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x8925}, //6099 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x892A}, //6100 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x892B}, //6101 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x8941}, //6102 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x8944}, //6103 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x893B}, //6104 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x8936}, //6105 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x8938}, //6106 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x894C}, //6107 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x891D}, //6108 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x8960}, //6109 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x895E}, //6110 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x8966}, //6111 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x8964}, //6112 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x896D}, //6113 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x896A}, //6114 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x896F}, //6115 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x8974}, //6116 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x8977}, //6117 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x897E}, //6118 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x8983}, //6119 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x8988}, //6120 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x898A}, //6121 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x8993}, //6122 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x8998}, //6123 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x89A1}, //6124 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x89A9}, //6125 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x89A6}, //6126 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x89AC}, //6127 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x89AF}, //6128 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x89B2}, //6129 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x89BA}, //6130 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x89BD}, //6131 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x89BF}, //6132 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x89C0}, //6133 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x89DA}, //6134 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x89DC}, //6135 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x89DD}, //6136 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x89E7}, //6137 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x89F4}, //6138 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x89F8}, //6139 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x8A03}, //6140 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x8A16}, //6141 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x8A10}, //6142 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x8A0C}, //6143 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x8A1B}, //6144 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x8A1D}, //6145 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x8A25}, //6146 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x8A36}, //6147 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x8A41}, //6148 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x8A5B}, //6149 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x8A52}, //6150 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x8A46}, //6151 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x8A48}, //6152 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x8A7C}, //6153 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x8A6D}, //6154 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x8A6C}, //6155 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x8A62}, //6156 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x8A85}, //6157 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x8A82}, //6158 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x8A84}, //6159 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x8AA8}, //6160 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x8AA1}, //6161 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x8A91}, //6162 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x8AA5}, //6163 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x8AA6}, //6164 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x8A9A}, //6165 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x8AA3}, //6166 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x8AC4}, //6167 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x8ACD}, //6168 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x8AC2}, //6169 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x8ADA}, //6170 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x8AEB}, //6171 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x8AF3}, //6172 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x8AE7}, //6173 #CJK UNIFIED IDEOGRAPH + {0xE680, 0x8AE4}, //6174 #CJK UNIFIED IDEOGRAPH + {0xE681, 0x8AF1}, //6175 #CJK UNIFIED IDEOGRAPH + {0xE682, 0x8B14}, //6176 #CJK UNIFIED IDEOGRAPH + {0xE683, 0x8AE0}, //6177 #CJK UNIFIED IDEOGRAPH + {0xE684, 0x8AE2}, //6178 #CJK UNIFIED IDEOGRAPH + {0xE685, 0x8AF7}, //6179 #CJK UNIFIED IDEOGRAPH + {0xE686, 0x8ADE}, //6180 #CJK UNIFIED IDEOGRAPH + {0xE687, 0x8ADB}, //6181 #CJK UNIFIED IDEOGRAPH + {0xE688, 0x8B0C}, //6182 #CJK UNIFIED IDEOGRAPH + {0xE689, 0x8B07}, //6183 #CJK UNIFIED IDEOGRAPH + {0xE68A, 0x8B1A}, //6184 #CJK UNIFIED IDEOGRAPH + {0xE68B, 0x8AE1}, //6185 #CJK UNIFIED IDEOGRAPH + {0xE68C, 0x8B16}, //6186 #CJK UNIFIED IDEOGRAPH + {0xE68D, 0x8B10}, //6187 #CJK UNIFIED IDEOGRAPH + {0xE68E, 0x8B17}, //6188 #CJK UNIFIED IDEOGRAPH + {0xE68F, 0x8B20}, //6189 #CJK UNIFIED IDEOGRAPH + {0xE690, 0x8B33}, //6190 #CJK UNIFIED IDEOGRAPH + {0xE691, 0x97AB}, //6191 #CJK UNIFIED IDEOGRAPH + {0xE692, 0x8B26}, //6192 #CJK UNIFIED IDEOGRAPH + {0xE693, 0x8B2B}, //6193 #CJK UNIFIED IDEOGRAPH + {0xE694, 0x8B3E}, //6194 #CJK UNIFIED IDEOGRAPH + {0xE695, 0x8B28}, //6195 #CJK UNIFIED IDEOGRAPH + {0xE696, 0x8B41}, //6196 #CJK UNIFIED IDEOGRAPH + {0xE697, 0x8B4C}, //6197 #CJK UNIFIED IDEOGRAPH + {0xE698, 0x8B4F}, //6198 #CJK UNIFIED IDEOGRAPH + {0xE699, 0x8B4E}, //6199 #CJK UNIFIED IDEOGRAPH + {0xE69A, 0x8B49}, //6200 #CJK UNIFIED IDEOGRAPH + {0xE69B, 0x8B56}, //6201 #CJK UNIFIED IDEOGRAPH + {0xE69C, 0x8B5B}, //6202 #CJK UNIFIED IDEOGRAPH + {0xE69D, 0x8B5A}, //6203 #CJK UNIFIED IDEOGRAPH + {0xE69E, 0x8B6B}, //6204 #CJK UNIFIED IDEOGRAPH + {0xE69F, 0x8B5F}, //6205 #CJK UNIFIED IDEOGRAPH + {0xE6A0, 0x8B6C}, //6206 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x8B6F}, //6207 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x8B74}, //6208 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x8B7D}, //6209 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x8B80}, //6210 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x8B8C}, //6211 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x8B8E}, //6212 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x8B92}, //6213 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x8B93}, //6214 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x8B96}, //6215 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x8B99}, //6216 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x8B9A}, //6217 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x8C3A}, //6218 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x8C41}, //6219 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x8C3F}, //6220 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x8C48}, //6221 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x8C4C}, //6222 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x8C4E}, //6223 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x8C50}, //6224 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x8C55}, //6225 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x8C62}, //6226 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x8C6C}, //6227 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x8C78}, //6228 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x8C7A}, //6229 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x8C82}, //6230 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x8C89}, //6231 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x8C85}, //6232 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x8C8A}, //6233 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x8C8D}, //6234 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x8C8E}, //6235 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x8C94}, //6236 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x8C7C}, //6237 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x8C98}, //6238 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x621D}, //6239 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x8CAD}, //6240 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x8CAA}, //6241 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x8CBD}, //6242 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x8CB2}, //6243 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x8CB3}, //6244 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x8CAE}, //6245 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x8CB6}, //6246 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x8CC8}, //6247 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x8CC1}, //6248 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x8CE4}, //6249 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x8CE3}, //6250 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x8CDA}, //6251 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x8CFD}, //6252 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x8CFA}, //6253 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x8CFB}, //6254 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x8D04}, //6255 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x8D05}, //6256 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x8D0A}, //6257 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x8D07}, //6258 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x8D0F}, //6259 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x8D0D}, //6260 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x8D10}, //6261 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x9F4E}, //6262 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x8D13}, //6263 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x8CCD}, //6264 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x8D14}, //6265 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x8D16}, //6266 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x8D67}, //6267 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x8D6D}, //6268 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x8D71}, //6269 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x8D73}, //6270 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x8D81}, //6271 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x8D99}, //6272 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x8DC2}, //6273 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x8DBE}, //6274 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x8DBA}, //6275 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x8DCF}, //6276 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x8DDA}, //6277 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x8DD6}, //6278 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x8DCC}, //6279 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x8DDB}, //6280 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x8DCB}, //6281 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x8DEA}, //6282 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x8DEB}, //6283 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x8DDF}, //6284 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x8DE3}, //6285 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x8DFC}, //6286 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x8E08}, //6287 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x8E09}, //6288 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x8DFF}, //6289 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x8E1D}, //6290 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x8E1E}, //6291 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x8E10}, //6292 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x8E1F}, //6293 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x8E42}, //6294 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x8E35}, //6295 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x8E30}, //6296 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x8E34}, //6297 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x8E4A}, //6298 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x8E47}, //6299 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x8E49}, //6300 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x8E4C}, //6301 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x8E50}, //6302 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x8E48}, //6303 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x8E59}, //6304 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x8E64}, //6305 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x8E60}, //6306 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x8E2A}, //6307 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x8E63}, //6308 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x8E55}, //6309 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x8E76}, //6310 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x8E72}, //6311 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x8E7C}, //6312 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x8E81}, //6313 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x8E87}, //6314 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x8E85}, //6315 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x8E84}, //6316 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x8E8B}, //6317 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x8E8A}, //6318 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x8E93}, //6319 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x8E91}, //6320 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x8E94}, //6321 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x8E99}, //6322 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x8EAA}, //6323 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x8EA1}, //6324 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x8EAC}, //6325 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x8EB0}, //6326 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x8EC6}, //6327 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x8EB1}, //6328 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x8EBE}, //6329 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x8EC5}, //6330 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x8EC8}, //6331 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x8ECB}, //6332 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x8EDB}, //6333 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x8EE3}, //6334 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x8EFC}, //6335 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x8EFB}, //6336 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x8EEB}, //6337 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x8EFE}, //6338 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x8F0A}, //6339 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x8F05}, //6340 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x8F15}, //6341 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x8F12}, //6342 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x8F19}, //6343 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x8F13}, //6344 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x8F1C}, //6345 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x8F1F}, //6346 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x8F1B}, //6347 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x8F0C}, //6348 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x8F26}, //6349 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x8F33}, //6350 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x8F3B}, //6351 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x8F39}, //6352 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x8F45}, //6353 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x8F42}, //6354 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x8F3E}, //6355 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x8F4C}, //6356 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x8F49}, //6357 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x8F46}, //6358 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x8F4E}, //6359 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x8F57}, //6360 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x8F5C}, //6361 #CJK UNIFIED IDEOGRAPH + {0xE780, 0x8F62}, //6362 #CJK UNIFIED IDEOGRAPH + {0xE781, 0x8F63}, //6363 #CJK UNIFIED IDEOGRAPH + {0xE782, 0x8F64}, //6364 #CJK UNIFIED IDEOGRAPH + {0xE783, 0x8F9C}, //6365 #CJK UNIFIED IDEOGRAPH + {0xE784, 0x8F9F}, //6366 #CJK UNIFIED IDEOGRAPH + {0xE785, 0x8FA3}, //6367 #CJK UNIFIED IDEOGRAPH + {0xE786, 0x8FAD}, //6368 #CJK UNIFIED IDEOGRAPH + {0xE787, 0x8FAF}, //6369 #CJK UNIFIED IDEOGRAPH + {0xE788, 0x8FB7}, //6370 #CJK UNIFIED IDEOGRAPH + {0xE789, 0x8FDA}, //6371 #CJK UNIFIED IDEOGRAPH + {0xE78A, 0x8FE5}, //6372 #CJK UNIFIED IDEOGRAPH + {0xE78B, 0x8FE2}, //6373 #CJK UNIFIED IDEOGRAPH + {0xE78C, 0x8FEA}, //6374 #CJK UNIFIED IDEOGRAPH + {0xE78D, 0x8FEF}, //6375 #CJK UNIFIED IDEOGRAPH + {0xE78E, 0x9087}, //6376 #CJK UNIFIED IDEOGRAPH + {0xE78F, 0x8FF4}, //6377 #CJK UNIFIED IDEOGRAPH + {0xE790, 0x9005}, //6378 #CJK UNIFIED IDEOGRAPH + {0xE791, 0x8FF9}, //6379 #CJK UNIFIED IDEOGRAPH + {0xE792, 0x8FFA}, //6380 #CJK UNIFIED IDEOGRAPH + {0xE793, 0x9011}, //6381 #CJK UNIFIED IDEOGRAPH + {0xE794, 0x9015}, //6382 #CJK UNIFIED IDEOGRAPH + {0xE795, 0x9021}, //6383 #CJK UNIFIED IDEOGRAPH + {0xE796, 0x900D}, //6384 #CJK UNIFIED IDEOGRAPH + {0xE797, 0x901E}, //6385 #CJK UNIFIED IDEOGRAPH + {0xE798, 0x9016}, //6386 #CJK UNIFIED IDEOGRAPH + {0xE799, 0x900B}, //6387 #CJK UNIFIED IDEOGRAPH + {0xE79A, 0x9027}, //6388 #CJK UNIFIED IDEOGRAPH + {0xE79B, 0x9036}, //6389 #CJK UNIFIED IDEOGRAPH + {0xE79C, 0x9035}, //6390 #CJK UNIFIED IDEOGRAPH + {0xE79D, 0x9039}, //6391 #CJK UNIFIED IDEOGRAPH + {0xE79E, 0x8FF8}, //6392 #CJK UNIFIED IDEOGRAPH + {0xE79F, 0x904F}, //6393 #CJK UNIFIED IDEOGRAPH + {0xE7A0, 0x9050}, //6394 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x9051}, //6395 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x9052}, //6396 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x900E}, //6397 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x9049}, //6398 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x903E}, //6399 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x9056}, //6400 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x9058}, //6401 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x905E}, //6402 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x9068}, //6403 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x906F}, //6404 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x9076}, //6405 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x96A8}, //6406 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x9072}, //6407 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x9082}, //6408 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x907D}, //6409 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x9081}, //6410 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x9080}, //6411 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x908A}, //6412 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x9089}, //6413 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x908F}, //6414 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x90A8}, //6415 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x90AF}, //6416 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x90B1}, //6417 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x90B5}, //6418 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x90E2}, //6419 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x90E4}, //6420 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x6248}, //6421 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x90DB}, //6422 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x9102}, //6423 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x9112}, //6424 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x9119}, //6425 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x9132}, //6426 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x9130}, //6427 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x914A}, //6428 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x9156}, //6429 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x9158}, //6430 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x9163}, //6431 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x9165}, //6432 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x9169}, //6433 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x9173}, //6434 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x9172}, //6435 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x918B}, //6436 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x9189}, //6437 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x9182}, //6438 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x91A2}, //6439 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x91AB}, //6440 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x91AF}, //6441 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x91AA}, //6442 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x91B5}, //6443 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x91B4}, //6444 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x91BA}, //6445 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x91C0}, //6446 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x91C1}, //6447 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x91C9}, //6448 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x91CB}, //6449 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x91D0}, //6450 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x91D6}, //6451 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x91DF}, //6452 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x91E1}, //6453 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x91DB}, //6454 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x91FC}, //6455 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x91F5}, //6456 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x91F6}, //6457 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x921E}, //6458 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x91FF}, //6459 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x9214}, //6460 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x922C}, //6461 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x9215}, //6462 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x9211}, //6463 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x925E}, //6464 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x9257}, //6465 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x9245}, //6466 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x9249}, //6467 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x9264}, //6468 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x9248}, //6469 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x9295}, //6470 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x923F}, //6471 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x924B}, //6472 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x9250}, //6473 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x929C}, //6474 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x9296}, //6475 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x9293}, //6476 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x929B}, //6477 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x925A}, //6478 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x92CF}, //6479 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x92B9}, //6480 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x92B7}, //6481 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x92E9}, //6482 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x930F}, //6483 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x92FA}, //6484 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x9344}, //6485 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x932E}, //6486 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x9319}, //6487 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x9322}, //6488 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x931A}, //6489 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x9323}, //6490 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x933A}, //6491 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x9335}, //6492 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x933B}, //6493 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x935C}, //6494 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x9360}, //6495 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x937C}, //6496 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x936E}, //6497 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x9356}, //6498 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x93B0}, //6499 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x93AC}, //6500 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x93AD}, //6501 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x9394}, //6502 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x93B9}, //6503 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x93D6}, //6504 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x93D7}, //6505 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x93E8}, //6506 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x93E5}, //6507 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x93D8}, //6508 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x93C3}, //6509 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x93DD}, //6510 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x93D0}, //6511 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x93C8}, //6512 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x93E4}, //6513 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x941A}, //6514 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x9414}, //6515 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x9413}, //6516 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x9403}, //6517 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x9407}, //6518 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9410}, //6519 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9436}, //6520 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x942B}, //6521 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x9435}, //6522 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x9421}, //6523 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x943A}, //6524 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x9441}, //6525 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x9452}, //6526 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x9444}, //6527 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x945B}, //6528 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x9460}, //6529 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x9462}, //6530 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x945E}, //6531 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x946A}, //6532 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x9229}, //6533 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x9470}, //6534 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x9475}, //6535 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x9477}, //6536 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x947D}, //6537 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x945A}, //6538 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x947C}, //6539 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x947E}, //6540 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x9481}, //6541 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x947F}, //6542 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x9582}, //6543 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x9587}, //6544 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x958A}, //6545 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x9594}, //6546 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x9596}, //6547 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x9598}, //6548 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x9599}, //6549 #CJK UNIFIED IDEOGRAPH + {0xE880, 0x95A0}, //6550 #CJK UNIFIED IDEOGRAPH + {0xE881, 0x95A8}, //6551 #CJK UNIFIED IDEOGRAPH + {0xE882, 0x95A7}, //6552 #CJK UNIFIED IDEOGRAPH + {0xE883, 0x95AD}, //6553 #CJK UNIFIED IDEOGRAPH + {0xE884, 0x95BC}, //6554 #CJK UNIFIED IDEOGRAPH + {0xE885, 0x95BB}, //6555 #CJK UNIFIED IDEOGRAPH + {0xE886, 0x95B9}, //6556 #CJK UNIFIED IDEOGRAPH + {0xE887, 0x95BE}, //6557 #CJK UNIFIED IDEOGRAPH + {0xE888, 0x95CA}, //6558 #CJK UNIFIED IDEOGRAPH + {0xE889, 0x6FF6}, //6559 #CJK UNIFIED IDEOGRAPH + {0xE88A, 0x95C3}, //6560 #CJK UNIFIED IDEOGRAPH + {0xE88B, 0x95CD}, //6561 #CJK UNIFIED IDEOGRAPH + {0xE88C, 0x95CC}, //6562 #CJK UNIFIED IDEOGRAPH + {0xE88D, 0x95D5}, //6563 #CJK UNIFIED IDEOGRAPH + {0xE88E, 0x95D4}, //6564 #CJK UNIFIED IDEOGRAPH + {0xE88F, 0x95D6}, //6565 #CJK UNIFIED IDEOGRAPH + {0xE890, 0x95DC}, //6566 #CJK UNIFIED IDEOGRAPH + {0xE891, 0x95E1}, //6567 #CJK UNIFIED IDEOGRAPH + {0xE892, 0x95E5}, //6568 #CJK UNIFIED IDEOGRAPH + {0xE893, 0x95E2}, //6569 #CJK UNIFIED IDEOGRAPH + {0xE894, 0x9621}, //6570 #CJK UNIFIED IDEOGRAPH + {0xE895, 0x9628}, //6571 #CJK UNIFIED IDEOGRAPH + {0xE896, 0x962E}, //6572 #CJK UNIFIED IDEOGRAPH + {0xE897, 0x962F}, //6573 #CJK UNIFIED IDEOGRAPH + {0xE898, 0x9642}, //6574 #CJK UNIFIED IDEOGRAPH + {0xE899, 0x964C}, //6575 #CJK UNIFIED IDEOGRAPH + {0xE89A, 0x964F}, //6576 #CJK UNIFIED IDEOGRAPH + {0xE89B, 0x964B}, //6577 #CJK UNIFIED IDEOGRAPH + {0xE89C, 0x9677}, //6578 #CJK UNIFIED IDEOGRAPH + {0xE89D, 0x965C}, //6579 #CJK UNIFIED IDEOGRAPH + {0xE89E, 0x965E}, //6580 #CJK UNIFIED IDEOGRAPH + {0xE89F, 0x965D}, //6581 #CJK UNIFIED IDEOGRAPH + {0xE8A0, 0x965F}, //6582 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x9666}, //6583 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x9672}, //6584 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x966C}, //6585 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x968D}, //6586 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x9698}, //6587 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x9695}, //6588 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x9697}, //6589 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x96AA}, //6590 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x96A7}, //6591 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x96B1}, //6592 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x96B2}, //6593 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x96B0}, //6594 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x96B4}, //6595 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x96B6}, //6596 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x96B8}, //6597 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x96B9}, //6598 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x96CE}, //6599 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x96CB}, //6600 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x96C9}, //6601 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x96CD}, //6602 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x894D}, //6603 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x96DC}, //6604 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x970D}, //6605 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x96D5}, //6606 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x96F9}, //6607 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x9704}, //6608 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9706}, //6609 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x9708}, //6610 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9713}, //6611 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x970E}, //6612 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x9711}, //6613 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x970F}, //6614 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x9716}, //6615 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x9719}, //6616 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x9724}, //6617 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x972A}, //6618 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x9730}, //6619 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x9739}, //6620 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x973D}, //6621 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x973E}, //6622 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x9744}, //6623 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x9746}, //6624 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x9748}, //6625 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x9742}, //6626 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x9749}, //6627 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x975C}, //6628 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x9760}, //6629 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x9764}, //6630 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x9766}, //6631 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x9768}, //6632 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x52D2}, //6633 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x976B}, //6634 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x9771}, //6635 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x9779}, //6636 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9785}, //6637 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x977C}, //6638 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x9781}, //6639 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x977A}, //6640 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x9786}, //6641 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x978B}, //6642 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x978F}, //6643 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x9790}, //6644 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x979C}, //6645 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x97A8}, //6646 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x97A6}, //6647 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x97A3}, //6648 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x97B3}, //6649 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x97B4}, //6650 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x97C3}, //6651 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x97C6}, //6652 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x97C8}, //6653 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x97CB}, //6654 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x97DC}, //6655 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x97ED}, //6656 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x9F4F}, //6657 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x97F2}, //6658 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x7ADF}, //6659 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x97F6}, //6660 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x97F5}, //6661 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x980F}, //6662 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x980C}, //6663 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x9838}, //6664 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x9824}, //6665 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x9821}, //6666 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x9837}, //6667 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x983D}, //6668 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x9846}, //6669 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x984F}, //6670 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x984B}, //6671 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x986B}, //6672 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x986F}, //6673 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x9870}, //6674 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x9871}, //6675 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x9874}, //6676 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x9873}, //6677 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x98AA}, //6678 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x98AF}, //6679 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x98B1}, //6680 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x98B6}, //6681 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x98C4}, //6682 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x98C3}, //6683 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x98C6}, //6684 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x98E9}, //6685 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x98EB}, //6686 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x9903}, //6687 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x9909}, //6688 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x9912}, //6689 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x9914}, //6690 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x9918}, //6691 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x9921}, //6692 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x991D}, //6693 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x991E}, //6694 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x9924}, //6695 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x9920}, //6696 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x992C}, //6697 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x992E}, //6698 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x993D}, //6699 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x993E}, //6700 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x9942}, //6701 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x9949}, //6702 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x9945}, //6703 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x9950}, //6704 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x994B}, //6705 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x9951}, //6706 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x9952}, //6707 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x994C}, //6708 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x9955}, //6709 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x9997}, //6710 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x9998}, //6711 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x99A5}, //6712 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x99AD}, //6713 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x99AE}, //6714 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x99BC}, //6715 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x99DF}, //6716 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x99DB}, //6717 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x99DD}, //6718 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x99D8}, //6719 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x99D1}, //6720 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x99ED}, //6721 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x99EE}, //6722 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x99F1}, //6723 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x99F2}, //6724 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x99FB}, //6725 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x99F8}, //6726 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x9A01}, //6727 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x9A0F}, //6728 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x9A05}, //6729 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x99E2}, //6730 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x9A19}, //6731 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x9A2B}, //6732 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x9A37}, //6733 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x9A45}, //6734 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x9A42}, //6735 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x9A40}, //6736 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x9A43}, //6737 #CJK UNIFIED IDEOGRAPH + {0xE980, 0x9A3E}, //6738 #CJK UNIFIED IDEOGRAPH + {0xE981, 0x9A55}, //6739 #CJK UNIFIED IDEOGRAPH + {0xE982, 0x9A4D}, //6740 #CJK UNIFIED IDEOGRAPH + {0xE983, 0x9A5B}, //6741 #CJK UNIFIED IDEOGRAPH + {0xE984, 0x9A57}, //6742 #CJK UNIFIED IDEOGRAPH + {0xE985, 0x9A5F}, //6743 #CJK UNIFIED IDEOGRAPH + {0xE986, 0x9A62}, //6744 #CJK UNIFIED IDEOGRAPH + {0xE987, 0x9A65}, //6745 #CJK UNIFIED IDEOGRAPH + {0xE988, 0x9A64}, //6746 #CJK UNIFIED IDEOGRAPH + {0xE989, 0x9A69}, //6747 #CJK UNIFIED IDEOGRAPH + {0xE98A, 0x9A6B}, //6748 #CJK UNIFIED IDEOGRAPH + {0xE98B, 0x9A6A}, //6749 #CJK UNIFIED IDEOGRAPH + {0xE98C, 0x9AAD}, //6750 #CJK UNIFIED IDEOGRAPH + {0xE98D, 0x9AB0}, //6751 #CJK UNIFIED IDEOGRAPH + {0xE98E, 0x9ABC}, //6752 #CJK UNIFIED IDEOGRAPH + {0xE98F, 0x9AC0}, //6753 #CJK UNIFIED IDEOGRAPH + {0xE990, 0x9ACF}, //6754 #CJK UNIFIED IDEOGRAPH + {0xE991, 0x9AD1}, //6755 #CJK UNIFIED IDEOGRAPH + {0xE992, 0x9AD3}, //6756 #CJK UNIFIED IDEOGRAPH + {0xE993, 0x9AD4}, //6757 #CJK UNIFIED IDEOGRAPH + {0xE994, 0x9ADE}, //6758 #CJK UNIFIED IDEOGRAPH + {0xE995, 0x9ADF}, //6759 #CJK UNIFIED IDEOGRAPH + {0xE996, 0x9AE2}, //6760 #CJK UNIFIED IDEOGRAPH + {0xE997, 0x9AE3}, //6761 #CJK UNIFIED IDEOGRAPH + {0xE998, 0x9AE6}, //6762 #CJK UNIFIED IDEOGRAPH + {0xE999, 0x9AEF}, //6763 #CJK UNIFIED IDEOGRAPH + {0xE99A, 0x9AEB}, //6764 #CJK UNIFIED IDEOGRAPH + {0xE99B, 0x9AEE}, //6765 #CJK UNIFIED IDEOGRAPH + {0xE99C, 0x9AF4}, //6766 #CJK UNIFIED IDEOGRAPH + {0xE99D, 0x9AF1}, //6767 #CJK UNIFIED IDEOGRAPH + {0xE99E, 0x9AF7}, //6768 #CJK UNIFIED IDEOGRAPH + {0xE99F, 0x9AFB}, //6769 #CJK UNIFIED IDEOGRAPH + {0xE9A0, 0x9B06}, //6770 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x9B18}, //6771 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x9B1A}, //6772 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x9B1F}, //6773 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x9B22}, //6774 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x9B23}, //6775 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x9B25}, //6776 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x9B27}, //6777 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x9B28}, //6778 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x9B29}, //6779 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x9B2A}, //6780 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x9B2E}, //6781 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x9B2F}, //6782 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x9B32}, //6783 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x9B44}, //6784 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x9B43}, //6785 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x9B4F}, //6786 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x9B4D}, //6787 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x9B4E}, //6788 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x9B51}, //6789 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x9B58}, //6790 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x9B74}, //6791 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x9B93}, //6792 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x9B83}, //6793 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x9B91}, //6794 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x9B96}, //6795 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x9B97}, //6796 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x9B9F}, //6797 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x9BA0}, //6798 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x9BA8}, //6799 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x9BB4}, //6800 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x9BC0}, //6801 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x9BCA}, //6802 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x9BB9}, //6803 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x9BC6}, //6804 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x9BCF}, //6805 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x9BD1}, //6806 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x9BD2}, //6807 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x9BE3}, //6808 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x9BE2}, //6809 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x9BE4}, //6810 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x9BD4}, //6811 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x9BE1}, //6812 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x9C3A}, //6813 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x9BF2}, //6814 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x9BF1}, //6815 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x9BF0}, //6816 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x9C15}, //6817 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x9C14}, //6818 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x9C09}, //6819 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x9C13}, //6820 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x9C0C}, //6821 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x9C06}, //6822 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x9C08}, //6823 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x9C12}, //6824 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x9C0A}, //6825 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x9C04}, //6826 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x9C2E}, //6827 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x9C1B}, //6828 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x9C25}, //6829 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x9C24}, //6830 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x9C21}, //6831 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x9C30}, //6832 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x9C47}, //6833 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x9C32}, //6834 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x9C46}, //6835 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x9C3E}, //6836 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x9C5A}, //6837 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x9C60}, //6838 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x9C67}, //6839 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x9C76}, //6840 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x9C78}, //6841 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x9CE7}, //6842 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x9CEC}, //6843 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x9CF0}, //6844 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x9D09}, //6845 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x9D08}, //6846 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x9CEB}, //6847 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x9D03}, //6848 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x9D06}, //6849 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x9D2A}, //6850 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x9D26}, //6851 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x9DAF}, //6852 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x9D23}, //6853 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x9D1F}, //6854 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x9D44}, //6855 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x9D15}, //6856 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x9D12}, //6857 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x9D41}, //6858 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x9D3F}, //6859 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x9D3E}, //6860 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x9D46}, //6861 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x9D48}, //6862 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x9D5D}, //6863 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x9D5E}, //6864 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x9D64}, //6865 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x9D51}, //6866 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x9D50}, //6867 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x9D59}, //6868 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x9D72}, //6869 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x9D89}, //6870 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x9D87}, //6871 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x9DAB}, //6872 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x9D6F}, //6873 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x9D7A}, //6874 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x9D9A}, //6875 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x9DA4}, //6876 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x9DA9}, //6877 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x9DB2}, //6878 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x9DC4}, //6879 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x9DC1}, //6880 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x9DBB}, //6881 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x9DB8}, //6882 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x9DBA}, //6883 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x9DC6}, //6884 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x9DCF}, //6885 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x9DC2}, //6886 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x9DD9}, //6887 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x9DD3}, //6888 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x9DF8}, //6889 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x9DE6}, //6890 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x9DED}, //6891 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x9DEF}, //6892 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x9DFD}, //6893 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x9E1A}, //6894 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x9E1B}, //6895 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x9E1E}, //6896 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x9E75}, //6897 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x9E79}, //6898 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x9E7D}, //6899 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x9E81}, //6900 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x9E88}, //6901 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x9E8B}, //6902 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x9E8C}, //6903 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x9E92}, //6904 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x9E95}, //6905 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x9E91}, //6906 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x9E9D}, //6907 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x9EA5}, //6908 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x9EA9}, //6909 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x9EB8}, //6910 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x9EAA}, //6911 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x9EAD}, //6912 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x9761}, //6913 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x9ECC}, //6914 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x9ECE}, //6915 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x9ECF}, //6916 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x9ED0}, //6917 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x9ED4}, //6918 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x9EDC}, //6919 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x9EDE}, //6920 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x9EDD}, //6921 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x9EE0}, //6922 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x9EE5}, //6923 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x9EE8}, //6924 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x9EEF}, //6925 #CJK UNIFIED IDEOGRAPH + {0xEA80, 0x9EF4}, //6926 #CJK UNIFIED IDEOGRAPH + {0xEA81, 0x9EF6}, //6927 #CJK UNIFIED IDEOGRAPH + {0xEA82, 0x9EF7}, //6928 #CJK UNIFIED IDEOGRAPH + {0xEA83, 0x9EF9}, //6929 #CJK UNIFIED IDEOGRAPH + {0xEA84, 0x9EFB}, //6930 #CJK UNIFIED IDEOGRAPH + {0xEA85, 0x9EFC}, //6931 #CJK UNIFIED IDEOGRAPH + {0xEA86, 0x9EFD}, //6932 #CJK UNIFIED IDEOGRAPH + {0xEA87, 0x9F07}, //6933 #CJK UNIFIED IDEOGRAPH + {0xEA88, 0x9F08}, //6934 #CJK UNIFIED IDEOGRAPH + {0xEA89, 0x76B7}, //6935 #CJK UNIFIED IDEOGRAPH + {0xEA8A, 0x9F15}, //6936 #CJK UNIFIED IDEOGRAPH + {0xEA8B, 0x9F21}, //6937 #CJK UNIFIED IDEOGRAPH + {0xEA8C, 0x9F2C}, //6938 #CJK UNIFIED IDEOGRAPH + {0xEA8D, 0x9F3E}, //6939 #CJK UNIFIED IDEOGRAPH + {0xEA8E, 0x9F4A}, //6940 #CJK UNIFIED IDEOGRAPH + {0xEA8F, 0x9F52}, //6941 #CJK UNIFIED IDEOGRAPH + {0xEA90, 0x9F54}, //6942 #CJK UNIFIED IDEOGRAPH + {0xEA91, 0x9F63}, //6943 #CJK UNIFIED IDEOGRAPH + {0xEA92, 0x9F5F}, //6944 #CJK UNIFIED IDEOGRAPH + {0xEA93, 0x9F60}, //6945 #CJK UNIFIED IDEOGRAPH + {0xEA94, 0x9F61}, //6946 #CJK UNIFIED IDEOGRAPH + {0xEA95, 0x9F66}, //6947 #CJK UNIFIED IDEOGRAPH + {0xEA96, 0x9F67}, //6948 #CJK UNIFIED IDEOGRAPH + {0xEA97, 0x9F6C}, //6949 #CJK UNIFIED IDEOGRAPH + {0xEA98, 0x9F6A}, //6950 #CJK UNIFIED IDEOGRAPH + {0xEA99, 0x9F77}, //6951 #CJK UNIFIED IDEOGRAPH + {0xEA9A, 0x9F72}, //6952 #CJK UNIFIED IDEOGRAPH + {0xEA9B, 0x9F76}, //6953 #CJK UNIFIED IDEOGRAPH + {0xEA9C, 0x9F95}, //6954 #CJK UNIFIED IDEOGRAPH + {0xEA9D, 0x9F9C}, //6955 #CJK UNIFIED IDEOGRAPH + {0xEA9E, 0x9FA0}, //6956 #CJK UNIFIED IDEOGRAPH + {0xEA9F, 0x582F}, //6957 #CJK UNIFIED IDEOGRAPH + {0xEAA0, 0x69C7}, //6958 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x9059}, //6959 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x7464}, //6960 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x51DC}, //6961 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x7199}, //6962 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x7E8A}, //6963 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x891C}, //6964 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x9348}, //6965 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x9288}, //6966 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x84DC}, //6967 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x4FC9}, //6968 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x70BB}, //6969 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x6631}, //6970 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x68C8}, //6971 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x92F9}, //6972 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x66FB}, //6973 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x5F45}, //6974 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x4E28}, //6975 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x4EE1}, //6976 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x4EFC}, //6977 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x4F00}, //6978 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x4F03}, //6979 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x4F39}, //6980 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x4F56}, //6981 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x4F92}, //6982 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x4F8A}, //6983 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x4F9A}, //6984 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x4F94}, //6985 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x4FCD}, //6986 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x5040}, //6987 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x5022}, //6988 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x4FFF}, //6989 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x501E}, //6990 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x5046}, //6991 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x5070}, //6992 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x5042}, //6993 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x5094}, //6994 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x50F4}, //6995 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x50D8}, //6996 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x514A}, //6997 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x5164}, //6998 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x519D}, //6999 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x51BE}, //7000 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x51EC}, //7001 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x5215}, //7002 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x529C}, //7003 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x52A6}, //7004 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x52C0}, //7005 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x52DB}, //7006 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x5300}, //7007 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x5307}, //7008 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x5324}, //7009 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x5372}, //7010 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x5393}, //7011 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x53B2}, //7012 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x53DD}, //7013 #CJK UNIFIED IDEOGRAPH + {0xED73, 0xFA0E}, //7014 #CJK COMPATIBILITY IDEOGRAPH + {0xED74, 0x549C}, //7015 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x548A}, //7016 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x54A9}, //7017 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x54FF}, //7018 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x5586}, //7019 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x5759}, //7020 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x5765}, //7021 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x57AC}, //7022 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x57C8}, //7023 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x57C7}, //7024 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0xFA0F}, //7025 #CJK COMPATIBILITY IDEOGRAPH + {0xED80, 0xFA10}, //7026 #CJK COMPATIBILITY IDEOGRAPH + {0xED81, 0x589E}, //7027 #CJK UNIFIED IDEOGRAPH + {0xED82, 0x58B2}, //7028 #CJK UNIFIED IDEOGRAPH + {0xED83, 0x590B}, //7029 #CJK UNIFIED IDEOGRAPH + {0xED84, 0x5953}, //7030 #CJK UNIFIED IDEOGRAPH + {0xED85, 0x595B}, //7031 #CJK UNIFIED IDEOGRAPH + {0xED86, 0x595D}, //7032 #CJK UNIFIED IDEOGRAPH + {0xED87, 0x5963}, //7033 #CJK UNIFIED IDEOGRAPH + {0xED88, 0x59A4}, //7034 #CJK UNIFIED IDEOGRAPH + {0xED89, 0x59BA}, //7035 #CJK UNIFIED IDEOGRAPH + {0xED8A, 0x5B56}, //7036 #CJK UNIFIED IDEOGRAPH + {0xED8B, 0x5BC0}, //7037 #CJK UNIFIED IDEOGRAPH + {0xED8C, 0x752F}, //7038 #CJK UNIFIED IDEOGRAPH + {0xED8D, 0x5BD8}, //7039 #CJK UNIFIED IDEOGRAPH + {0xED8E, 0x5BEC}, //7040 #CJK UNIFIED IDEOGRAPH + {0xED8F, 0x5C1E}, //7041 #CJK UNIFIED IDEOGRAPH + {0xED90, 0x5CA6}, //7042 #CJK UNIFIED IDEOGRAPH + {0xED91, 0x5CBA}, //7043 #CJK UNIFIED IDEOGRAPH + {0xED92, 0x5CF5}, //7044 #CJK UNIFIED IDEOGRAPH + {0xED93, 0x5D27}, //7045 #CJK UNIFIED IDEOGRAPH + {0xED94, 0x5D53}, //7046 #CJK UNIFIED IDEOGRAPH + {0xED95, 0xFA11}, //7047 #CJK COMPATIBILITY IDEOGRAPH + {0xED96, 0x5D42}, //7048 #CJK UNIFIED IDEOGRAPH + {0xED97, 0x5D6D}, //7049 #CJK UNIFIED IDEOGRAPH + {0xED98, 0x5DB8}, //7050 #CJK UNIFIED IDEOGRAPH + {0xED99, 0x5DB9}, //7051 #CJK UNIFIED IDEOGRAPH + {0xED9A, 0x5DD0}, //7052 #CJK UNIFIED IDEOGRAPH + {0xED9B, 0x5F21}, //7053 #CJK UNIFIED IDEOGRAPH + {0xED9C, 0x5F34}, //7054 #CJK UNIFIED IDEOGRAPH + {0xED9D, 0x5F67}, //7055 #CJK UNIFIED IDEOGRAPH + {0xED9E, 0x5FB7}, //7056 #CJK UNIFIED IDEOGRAPH + {0xED9F, 0x5FDE}, //7057 #CJK UNIFIED IDEOGRAPH + {0xEDA0, 0x605D}, //7058 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x6085}, //7059 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x608A}, //7060 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x60DE}, //7061 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x60D5}, //7062 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x6120}, //7063 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x60F2}, //7064 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x6111}, //7065 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x6137}, //7066 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x6130}, //7067 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x6198}, //7068 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x6213}, //7069 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x62A6}, //7070 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x63F5}, //7071 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x6460}, //7072 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x649D}, //7073 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x64CE}, //7074 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x654E}, //7075 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x6600}, //7076 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x6615}, //7077 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x663B}, //7078 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x6609}, //7079 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x662E}, //7080 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x661E}, //7081 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x6624}, //7082 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x6665}, //7083 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x6657}, //7084 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x6659}, //7085 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0xFA12}, //7086 #CJK COMPATIBILITY IDEOGRAPH + {0xEDBD, 0x6673}, //7087 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x6699}, //7088 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x66A0}, //7089 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x66B2}, //7090 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x66BF}, //7091 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x66FA}, //7092 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x670E}, //7093 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0xF929}, //7094 #CJK COMPATIBILITY IDEOGRAPH + {0xEDC5, 0x6766}, //7095 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x67BB}, //7096 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x6852}, //7097 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x67C0}, //7098 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x6801}, //7099 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x6844}, //7100 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x68CF}, //7101 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0xFA13}, //7102 #CJK COMPATIBILITY IDEOGRAPH + {0xEDCD, 0x6968}, //7103 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0xFA14}, //7104 #CJK COMPATIBILITY IDEOGRAPH + {0xEDCF, 0x6998}, //7105 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x69E2}, //7106 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x6A30}, //7107 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x6A6B}, //7108 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x6A46}, //7109 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x6A73}, //7110 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x6A7E}, //7111 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x6AE2}, //7112 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x6AE4}, //7113 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x6BD6}, //7114 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x6C3F}, //7115 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x6C5C}, //7116 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x6C86}, //7117 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x6C6F}, //7118 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x6CDA}, //7119 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x6D04}, //7120 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x6D87}, //7121 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x6D6F}, //7122 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x6D96}, //7123 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x6DAC}, //7124 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x6DCF}, //7125 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x6DF8}, //7126 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x6DF2}, //7127 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x6DFC}, //7128 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x6E39}, //7129 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x6E5C}, //7130 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x6E27}, //7131 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x6E3C}, //7132 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x6EBF}, //7133 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x6F88}, //7134 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x6FB5}, //7135 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x6FF5}, //7136 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x7005}, //7137 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x7007}, //7138 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7028}, //7139 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x7085}, //7140 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x70AB}, //7141 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x710F}, //7142 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x7104}, //7143 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x715C}, //7144 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x7146}, //7145 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x7147}, //7146 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0xFA15}, //7147 #CJK COMPATIBILITY IDEOGRAPH + {0xEDFA, 0x71C1}, //7148 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x71FE}, //7149 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x72B1}, //7150 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x72BE}, //7151 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x7324}, //7152 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0xFA16}, //7153 #CJK COMPATIBILITY IDEOGRAPH + {0xEE43, 0x7377}, //7154 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x73BD}, //7155 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x73C9}, //7156 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x73D6}, //7157 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x73E3}, //7158 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x73D2}, //7159 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x7407}, //7160 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x73F5}, //7161 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x7426}, //7162 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x742A}, //7163 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x7429}, //7164 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x742E}, //7165 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x7462}, //7166 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x7489}, //7167 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x749F}, //7168 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x7501}, //7169 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x756F}, //7170 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x7682}, //7171 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x769C}, //7172 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x769E}, //7173 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x769B}, //7174 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x76A6}, //7175 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0xFA17}, //7176 #CJK COMPATIBILITY IDEOGRAPH + {0xEE5A, 0x7746}, //7177 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x52AF}, //7178 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x7821}, //7179 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x784E}, //7180 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x7864}, //7181 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x787A}, //7182 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x7930}, //7183 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0xFA18}, //7184 #CJK COMPATIBILITY IDEOGRAPH + {0xEE62, 0xFA19}, //7185 #CJK COMPATIBILITY IDEOGRAPH + {0xEE63, 0xFA1A}, //7186 #CJK COMPATIBILITY IDEOGRAPH + {0xEE64, 0x7994}, //7187 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0xFA1B}, //7188 #CJK COMPATIBILITY IDEOGRAPH + {0xEE66, 0x799B}, //7189 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x7AD1}, //7190 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x7AE7}, //7191 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0xFA1C}, //7192 #CJK COMPATIBILITY IDEOGRAPH + {0xEE6A, 0x7AEB}, //7193 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x7B9E}, //7194 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0xFA1D}, //7195 #CJK COMPATIBILITY IDEOGRAPH + {0xEE6D, 0x7D48}, //7196 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x7D5C}, //7197 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x7DB7}, //7198 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x7DA0}, //7199 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x7DD6}, //7200 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x7E52}, //7201 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x7F47}, //7202 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x7FA1}, //7203 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0xFA1E}, //7204 #CJK COMPATIBILITY IDEOGRAPH + {0xEE76, 0x8301}, //7205 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x8362}, //7206 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x837F}, //7207 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x83C7}, //7208 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x83F6}, //7209 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x8448}, //7210 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x84B4}, //7211 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x8553}, //7212 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x8559}, //7213 #CJK UNIFIED IDEOGRAPH + {0xEE80, 0x856B}, //7214 #CJK UNIFIED IDEOGRAPH + {0xEE81, 0xFA1F}, //7215 #CJK COMPATIBILITY IDEOGRAPH + {0xEE82, 0x85B0}, //7216 #CJK UNIFIED IDEOGRAPH + {0xEE83, 0xFA20}, //7217 #CJK COMPATIBILITY IDEOGRAPH + {0xEE84, 0xFA21}, //7218 #CJK COMPATIBILITY IDEOGRAPH + {0xEE85, 0x8807}, //7219 #CJK UNIFIED IDEOGRAPH + {0xEE86, 0x88F5}, //7220 #CJK UNIFIED IDEOGRAPH + {0xEE87, 0x8A12}, //7221 #CJK UNIFIED IDEOGRAPH + {0xEE88, 0x8A37}, //7222 #CJK UNIFIED IDEOGRAPH + {0xEE89, 0x8A79}, //7223 #CJK UNIFIED IDEOGRAPH + {0xEE8A, 0x8AA7}, //7224 #CJK UNIFIED IDEOGRAPH + {0xEE8B, 0x8ABE}, //7225 #CJK UNIFIED IDEOGRAPH + {0xEE8C, 0x8ADF}, //7226 #CJK UNIFIED IDEOGRAPH + {0xEE8D, 0xFA22}, //7227 #CJK COMPATIBILITY IDEOGRAPH + {0xEE8E, 0x8AF6}, //7228 #CJK UNIFIED IDEOGRAPH + {0xEE8F, 0x8B53}, //7229 #CJK UNIFIED IDEOGRAPH + {0xEE90, 0x8B7F}, //7230 #CJK UNIFIED IDEOGRAPH + {0xEE91, 0x8CF0}, //7231 #CJK UNIFIED IDEOGRAPH + {0xEE92, 0x8CF4}, //7232 #CJK UNIFIED IDEOGRAPH + {0xEE93, 0x8D12}, //7233 #CJK UNIFIED IDEOGRAPH + {0xEE94, 0x8D76}, //7234 #CJK UNIFIED IDEOGRAPH + {0xEE95, 0xFA23}, //7235 #CJK COMPATIBILITY IDEOGRAPH + {0xEE96, 0x8ECF}, //7236 #CJK UNIFIED IDEOGRAPH + {0xEE97, 0xFA24}, //7237 #CJK COMPATIBILITY IDEOGRAPH + {0xEE98, 0xFA25}, //7238 #CJK COMPATIBILITY IDEOGRAPH + {0xEE99, 0x9067}, //7239 #CJK UNIFIED IDEOGRAPH + {0xEE9A, 0x90DE}, //7240 #CJK UNIFIED IDEOGRAPH + {0xEE9B, 0xFA26}, //7241 #CJK COMPATIBILITY IDEOGRAPH + {0xEE9C, 0x9115}, //7242 #CJK UNIFIED IDEOGRAPH + {0xEE9D, 0x9127}, //7243 #CJK UNIFIED IDEOGRAPH + {0xEE9E, 0x91DA}, //7244 #CJK UNIFIED IDEOGRAPH + {0xEE9F, 0x91D7}, //7245 #CJK UNIFIED IDEOGRAPH + {0xEEA0, 0x91DE}, //7246 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x91ED}, //7247 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x91EE}, //7248 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x91E4}, //7249 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x91E5}, //7250 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x9206}, //7251 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x9210}, //7252 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x920A}, //7253 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x923A}, //7254 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x9240}, //7255 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x923C}, //7256 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x924E}, //7257 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x9259}, //7258 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x9251}, //7259 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x9239}, //7260 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x9267}, //7261 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x92A7}, //7262 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x9277}, //7263 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x9278}, //7264 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x92E7}, //7265 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x92D7}, //7266 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x92D9}, //7267 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x92D0}, //7268 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0xFA27}, //7269 #CJK COMPATIBILITY IDEOGRAPH + {0xEEB8, 0x92D5}, //7270 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x92E0}, //7271 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x92D3}, //7272 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x9325}, //7273 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x9321}, //7274 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x92FB}, //7275 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0xFA28}, //7276 #CJK COMPATIBILITY IDEOGRAPH + {0xEEBF, 0x931E}, //7277 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x92FF}, //7278 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x931D}, //7279 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x9302}, //7280 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x9370}, //7281 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9357}, //7282 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x93A4}, //7283 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x93C6}, //7284 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x93DE}, //7285 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x93F8}, //7286 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x9431}, //7287 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x9445}, //7288 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x9448}, //7289 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x9592}, //7290 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0xF9DC}, //7291 #CJK COMPATIBILITY IDEOGRAPH + {0xEECE, 0xFA29}, //7292 #CJK COMPATIBILITY IDEOGRAPH + {0xEECF, 0x969D}, //7293 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x96AF}, //7294 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x9733}, //7295 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x973B}, //7296 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x9743}, //7297 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x974D}, //7298 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x974F}, //7299 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x9751}, //7300 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x9755}, //7301 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x9857}, //7302 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x9865}, //7303 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0xFA2A}, //7304 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDB, 0xFA2B}, //7305 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDC, 0x9927}, //7306 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0xFA2C}, //7307 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDE, 0x999E}, //7308 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x9A4E}, //7309 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x9AD9}, //7310 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x9ADC}, //7311 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x9B75}, //7312 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x9B72}, //7313 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x9B8F}, //7314 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x9BB1}, //7315 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x9BBB}, //7316 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x9C00}, //7317 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x9D70}, //7318 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x9D6B}, //7319 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0xFA2D}, //7320 #CJK COMPATIBILITY IDEOGRAPH + {0xEEEB, 0x9E19}, //7321 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x9ED1}, //7322 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x2170}, //7323 #SMALL ROMAN NUMERAL ONE + {0xEEF0, 0x2171}, //7324 #SMALL ROMAN NUMERAL TWO + {0xEEF1, 0x2172}, //7325 #SMALL ROMAN NUMERAL THREE + {0xEEF2, 0x2173}, //7326 #SMALL ROMAN NUMERAL FOUR + {0xEEF3, 0x2174}, //7327 #SMALL ROMAN NUMERAL FIVE + {0xEEF4, 0x2175}, //7328 #SMALL ROMAN NUMERAL SIX + {0xEEF5, 0x2176}, //7329 #SMALL ROMAN NUMERAL SEVEN + {0xEEF6, 0x2177}, //7330 #SMALL ROMAN NUMERAL EIGHT + {0xEEF7, 0x2178}, //7331 #SMALL ROMAN NUMERAL NINE + {0xEEF8, 0x2179}, //7332 #SMALL ROMAN NUMERAL TEN + {0xEEF9, 0xFFE2}, //7333 #FULLWIDTH NOT SIGN + {0xEEFA, 0xFFE4}, //7334 #FULLWIDTH BROKEN BAR + {0xEEFB, 0xFF07}, //7335 #FULLWIDTH APOSTROPHE + {0xEEFC, 0xFF02}, //7336 #FULLWIDTH QUOTATION MARK + {0xFA40, 0x2170}, //7337 #SMALL ROMAN NUMERAL ONE + {0xFA41, 0x2171}, //7338 #SMALL ROMAN NUMERAL TWO + {0xFA42, 0x2172}, //7339 #SMALL ROMAN NUMERAL THREE + {0xFA43, 0x2173}, //7340 #SMALL ROMAN NUMERAL FOUR + {0xFA44, 0x2174}, //7341 #SMALL ROMAN NUMERAL FIVE + {0xFA45, 0x2175}, //7342 #SMALL ROMAN NUMERAL SIX + {0xFA46, 0x2176}, //7343 #SMALL ROMAN NUMERAL SEVEN + {0xFA47, 0x2177}, //7344 #SMALL ROMAN NUMERAL EIGHT + {0xFA48, 0x2178}, //7345 #SMALL ROMAN NUMERAL NINE + {0xFA49, 0x2179}, //7346 #SMALL ROMAN NUMERAL TEN + {0xFA4A, 0x2160}, //7347 #ROMAN NUMERAL ONE + {0xFA4B, 0x2161}, //7348 #ROMAN NUMERAL TWO + {0xFA4C, 0x2162}, //7349 #ROMAN NUMERAL THREE + {0xFA4D, 0x2163}, //7350 #ROMAN NUMERAL FOUR + {0xFA4E, 0x2164}, //7351 #ROMAN NUMERAL FIVE + {0xFA4F, 0x2165}, //7352 #ROMAN NUMERAL SIX + {0xFA50, 0x2166}, //7353 #ROMAN NUMERAL SEVEN + {0xFA51, 0x2167}, //7354 #ROMAN NUMERAL EIGHT + {0xFA52, 0x2168}, //7355 #ROMAN NUMERAL NINE + {0xFA53, 0x2169}, //7356 #ROMAN NUMERAL TEN + {0xFA54, 0xFFE2}, //7357 #FULLWIDTH NOT SIGN + {0xFA55, 0xFFE4}, //7358 #FULLWIDTH BROKEN BAR + {0xFA56, 0xFF07}, //7359 #FULLWIDTH APOSTROPHE + {0xFA57, 0xFF02}, //7360 #FULLWIDTH QUOTATION MARK + {0xFA58, 0x3231}, //7361 #PARENTHESIZED IDEOGRAPH STOCK + {0xFA59, 0x2116}, //7362 #NUMERO SIGN + {0xFA5A, 0x2121}, //7363 #TELEPHONE SIGN + {0xFA5B, 0x2235}, //7364 #BECAUSE + {0xFA5C, 0x7E8A}, //7365 #CJK UNIFIED IDEOGRAPH + {0xFA5D, 0x891C}, //7366 #CJK UNIFIED IDEOGRAPH + {0xFA5E, 0x9348}, //7367 #CJK UNIFIED IDEOGRAPH + {0xFA5F, 0x9288}, //7368 #CJK UNIFIED IDEOGRAPH + {0xFA60, 0x84DC}, //7369 #CJK UNIFIED IDEOGRAPH + {0xFA61, 0x4FC9}, //7370 #CJK UNIFIED IDEOGRAPH + {0xFA62, 0x70BB}, //7371 #CJK UNIFIED IDEOGRAPH + {0xFA63, 0x6631}, //7372 #CJK UNIFIED IDEOGRAPH + {0xFA64, 0x68C8}, //7373 #CJK UNIFIED IDEOGRAPH + {0xFA65, 0x92F9}, //7374 #CJK UNIFIED IDEOGRAPH + {0xFA66, 0x66FB}, //7375 #CJK UNIFIED IDEOGRAPH + {0xFA67, 0x5F45}, //7376 #CJK UNIFIED IDEOGRAPH + {0xFA68, 0x4E28}, //7377 #CJK UNIFIED IDEOGRAPH + {0xFA69, 0x4EE1}, //7378 #CJK UNIFIED IDEOGRAPH + {0xFA6A, 0x4EFC}, //7379 #CJK UNIFIED IDEOGRAPH + {0xFA6B, 0x4F00}, //7380 #CJK UNIFIED IDEOGRAPH + {0xFA6C, 0x4F03}, //7381 #CJK UNIFIED IDEOGRAPH + {0xFA6D, 0x4F39}, //7382 #CJK UNIFIED IDEOGRAPH + {0xFA6E, 0x4F56}, //7383 #CJK UNIFIED IDEOGRAPH + {0xFA6F, 0x4F92}, //7384 #CJK UNIFIED IDEOGRAPH + {0xFA70, 0x4F8A}, //7385 #CJK UNIFIED IDEOGRAPH + {0xFA71, 0x4F9A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xFA72, 0x4F94}, //7387 #CJK UNIFIED IDEOGRAPH + {0xFA73, 0x4FCD}, //7388 #CJK UNIFIED IDEOGRAPH + {0xFA74, 0x5040}, //7389 #CJK UNIFIED IDEOGRAPH + {0xFA75, 0x5022}, //7390 #CJK UNIFIED IDEOGRAPH + {0xFA76, 0x4FFF}, //7391 #CJK UNIFIED IDEOGRAPH + {0xFA77, 0x501E}, //7392 #CJK UNIFIED IDEOGRAPH + {0xFA78, 0x5046}, //7393 #CJK UNIFIED IDEOGRAPH + {0xFA79, 0x5070}, //7394 #CJK UNIFIED IDEOGRAPH + {0xFA7A, 0x5042}, //7395 #CJK UNIFIED IDEOGRAPH + {0xFA7B, 0x5094}, //7396 #CJK UNIFIED IDEOGRAPH + {0xFA7C, 0x50F4}, //7397 #CJK UNIFIED IDEOGRAPH + {0xFA7D, 0x50D8}, //7398 #CJK UNIFIED IDEOGRAPH + {0xFA7E, 0x514A}, //7399 #CJK UNIFIED IDEOGRAPH + {0xFA80, 0x5164}, //7400 #CJK UNIFIED IDEOGRAPH + {0xFA81, 0x519D}, //7401 #CJK UNIFIED IDEOGRAPH + {0xFA82, 0x51BE}, //7402 #CJK UNIFIED IDEOGRAPH + {0xFA83, 0x51EC}, //7403 #CJK UNIFIED IDEOGRAPH + {0xFA84, 0x5215}, //7404 #CJK UNIFIED IDEOGRAPH + {0xFA85, 0x529C}, //7405 #CJK UNIFIED IDEOGRAPH + {0xFA86, 0x52A6}, //7406 #CJK UNIFIED IDEOGRAPH + {0xFA87, 0x52C0}, //7407 #CJK UNIFIED IDEOGRAPH + {0xFA88, 0x52DB}, //7408 #CJK UNIFIED IDEOGRAPH + {0xFA89, 0x5300}, //7409 #CJK UNIFIED IDEOGRAPH + {0xFA8A, 0x5307}, //7410 #CJK UNIFIED IDEOGRAPH + {0xFA8B, 0x5324}, //7411 #CJK UNIFIED IDEOGRAPH + {0xFA8C, 0x5372}, //7412 #CJK UNIFIED IDEOGRAPH + {0xFA8D, 0x5393}, //7413 #CJK UNIFIED IDEOGRAPH + {0xFA8E, 0x53B2}, //7414 #CJK UNIFIED IDEOGRAPH + {0xFA8F, 0x53DD}, //7415 #CJK UNIFIED IDEOGRAPH + {0xFA90, 0xFA0E}, //7416 #CJK COMPATIBILITY IDEOGRAPH + {0xFA91, 0x549C}, //7417 #CJK UNIFIED IDEOGRAPH + {0xFA92, 0x548A}, //7418 #CJK UNIFIED IDEOGRAPH + {0xFA93, 0x54A9}, //7419 #CJK UNIFIED IDEOGRAPH + {0xFA94, 0x54FF}, //7420 #CJK UNIFIED IDEOGRAPH + {0xFA95, 0x5586}, //7421 #CJK UNIFIED IDEOGRAPH + {0xFA96, 0x5759}, //7422 #CJK UNIFIED IDEOGRAPH + {0xFA97, 0x5765}, //7423 #CJK UNIFIED IDEOGRAPH + {0xFA98, 0x57AC}, //7424 #CJK UNIFIED IDEOGRAPH + {0xFA99, 0x57C8}, //7425 #CJK UNIFIED IDEOGRAPH + {0xFA9A, 0x57C7}, //7426 #CJK UNIFIED IDEOGRAPH + {0xFA9B, 0xFA0F}, //7427 #CJK COMPATIBILITY IDEOGRAPH + {0xFA9C, 0xFA10}, //7428 #CJK COMPATIBILITY IDEOGRAPH + {0xFA9D, 0x589E}, //7429 #CJK UNIFIED IDEOGRAPH + {0xFA9E, 0x58B2}, //7430 #CJK UNIFIED IDEOGRAPH + {0xFA9F, 0x590B}, //7431 #CJK UNIFIED IDEOGRAPH + {0xFAA0, 0x5953}, //7432 #CJK UNIFIED IDEOGRAPH + {0xFAA1, 0x595B}, //7433 #CJK UNIFIED IDEOGRAPH + {0xFAA2, 0x595D}, //7434 #CJK UNIFIED IDEOGRAPH + {0xFAA3, 0x5963}, //7435 #CJK UNIFIED IDEOGRAPH + {0xFAA4, 0x59A4}, //7436 #CJK UNIFIED IDEOGRAPH + {0xFAA5, 0x59BA}, //7437 #CJK UNIFIED IDEOGRAPH + {0xFAA6, 0x5B56}, //7438 #CJK UNIFIED IDEOGRAPH + {0xFAA7, 0x5BC0}, //7439 #CJK UNIFIED IDEOGRAPH + {0xFAA8, 0x752F}, //7440 #CJK UNIFIED IDEOGRAPH + {0xFAA9, 0x5BD8}, //7441 #CJK UNIFIED IDEOGRAPH + {0xFAAA, 0x5BEC}, //7442 #CJK UNIFIED IDEOGRAPH + {0xFAAB, 0x5C1E}, //7443 #CJK UNIFIED IDEOGRAPH + {0xFAAC, 0x5CA6}, //7444 #CJK UNIFIED IDEOGRAPH + {0xFAAD, 0x5CBA}, //7445 #CJK UNIFIED IDEOGRAPH + {0xFAAE, 0x5CF5}, //7446 #CJK UNIFIED IDEOGRAPH + {0xFAAF, 0x5D27}, //7447 #CJK UNIFIED IDEOGRAPH + {0xFAB0, 0x5D53}, //7448 #CJK UNIFIED IDEOGRAPH + {0xFAB1, 0xFA11}, //7449 #CJK COMPATIBILITY IDEOGRAPH + {0xFAB2, 0x5D42}, //7450 #CJK UNIFIED IDEOGRAPH + {0xFAB3, 0x5D6D}, //7451 #CJK UNIFIED IDEOGRAPH + {0xFAB4, 0x5DB8}, //7452 #CJK UNIFIED IDEOGRAPH + {0xFAB5, 0x5DB9}, //7453 #CJK UNIFIED IDEOGRAPH + {0xFAB6, 0x5DD0}, //7454 #CJK UNIFIED IDEOGRAPH + {0xFAB7, 0x5F21}, //7455 #CJK UNIFIED IDEOGRAPH + {0xFAB8, 0x5F34}, //7456 #CJK UNIFIED IDEOGRAPH + {0xFAB9, 0x5F67}, //7457 #CJK UNIFIED IDEOGRAPH + {0xFABA, 0x5FB7}, //7458 #CJK UNIFIED IDEOGRAPH + {0xFABB, 0x5FDE}, //7459 #CJK UNIFIED IDEOGRAPH + {0xFABC, 0x605D}, //7460 #CJK UNIFIED IDEOGRAPH + {0xFABD, 0x6085}, //7461 #CJK UNIFIED IDEOGRAPH + {0xFABE, 0x608A}, //7462 #CJK UNIFIED IDEOGRAPH + {0xFABF, 0x60DE}, //7463 #CJK UNIFIED IDEOGRAPH + {0xFAC0, 0x60D5}, //7464 #CJK UNIFIED IDEOGRAPH + {0xFAC1, 0x6120}, //7465 #CJK UNIFIED IDEOGRAPH + {0xFAC2, 0x60F2}, //7466 #CJK UNIFIED IDEOGRAPH + {0xFAC3, 0x6111}, //7467 #CJK UNIFIED IDEOGRAPH + {0xFAC4, 0x6137}, //7468 #CJK UNIFIED IDEOGRAPH + {0xFAC5, 0x6130}, //7469 #CJK UNIFIED IDEOGRAPH + {0xFAC6, 0x6198}, //7470 #CJK UNIFIED IDEOGRAPH + {0xFAC7, 0x6213}, //7471 #CJK UNIFIED IDEOGRAPH + {0xFAC8, 0x62A6}, //7472 #CJK UNIFIED IDEOGRAPH + {0xFAC9, 0x63F5}, //7473 #CJK UNIFIED IDEOGRAPH + {0xFACA, 0x6460}, //7474 #CJK UNIFIED IDEOGRAPH + {0xFACB, 0x649D}, //7475 #CJK UNIFIED IDEOGRAPH + {0xFACC, 0x64CE}, //7476 #CJK UNIFIED IDEOGRAPH + {0xFACD, 0x654E}, //7477 #CJK UNIFIED IDEOGRAPH + {0xFACE, 0x6600}, //7478 #CJK UNIFIED IDEOGRAPH + {0xFACF, 0x6615}, //7479 #CJK UNIFIED IDEOGRAPH + {0xFAD0, 0x663B}, //7480 #CJK UNIFIED IDEOGRAPH + {0xFAD1, 0x6609}, //7481 #CJK UNIFIED IDEOGRAPH + {0xFAD2, 0x662E}, //7482 #CJK UNIFIED IDEOGRAPH + {0xFAD3, 0x661E}, //7483 #CJK UNIFIED IDEOGRAPH + {0xFAD4, 0x6624}, //7484 #CJK UNIFIED IDEOGRAPH + {0xFAD5, 0x6665}, //7485 #CJK UNIFIED IDEOGRAPH + {0xFAD6, 0x6657}, //7486 #CJK UNIFIED IDEOGRAPH + {0xFAD7, 0x6659}, //7487 #CJK UNIFIED IDEOGRAPH + {0xFAD8, 0xFA12}, //7488 #CJK COMPATIBILITY IDEOGRAPH + {0xFAD9, 0x6673}, //7489 #CJK UNIFIED IDEOGRAPH + {0xFADA, 0x6699}, //7490 #CJK UNIFIED IDEOGRAPH + {0xFADB, 0x66A0}, //7491 #CJK UNIFIED IDEOGRAPH + {0xFADC, 0x66B2}, //7492 #CJK UNIFIED IDEOGRAPH + {0xFADD, 0x66BF}, //7493 #CJK UNIFIED IDEOGRAPH + {0xFADE, 0x66FA}, //7494 #CJK UNIFIED IDEOGRAPH + {0xFADF, 0x670E}, //7495 #CJK UNIFIED IDEOGRAPH + {0xFAE0, 0xF929}, //7496 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE1, 0x6766}, //7497 #CJK UNIFIED IDEOGRAPH + {0xFAE2, 0x67BB}, //7498 #CJK UNIFIED IDEOGRAPH + {0xFAE3, 0x6852}, //7499 #CJK UNIFIED IDEOGRAPH + {0xFAE4, 0x67C0}, //7500 #CJK UNIFIED IDEOGRAPH + {0xFAE5, 0x6801}, //7501 #CJK UNIFIED IDEOGRAPH + {0xFAE6, 0x6844}, //7502 #CJK UNIFIED IDEOGRAPH + {0xFAE7, 0x68CF}, //7503 #CJK UNIFIED IDEOGRAPH + {0xFAE8, 0xFA13}, //7504 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE9, 0x6968}, //7505 #CJK UNIFIED IDEOGRAPH + {0xFAEA, 0xFA14}, //7506 #CJK COMPATIBILITY IDEOGRAPH + {0xFAEB, 0x6998}, //7507 #CJK UNIFIED IDEOGRAPH + {0xFAEC, 0x69E2}, //7508 #CJK UNIFIED IDEOGRAPH + {0xFAED, 0x6A30}, //7509 #CJK UNIFIED IDEOGRAPH + {0xFAEE, 0x6A6B}, //7510 #CJK UNIFIED IDEOGRAPH + {0xFAEF, 0x6A46}, //7511 #CJK UNIFIED IDEOGRAPH + {0xFAF0, 0x6A73}, //7512 #CJK UNIFIED IDEOGRAPH + {0xFAF1, 0x6A7E}, //7513 #CJK UNIFIED IDEOGRAPH + {0xFAF2, 0x6AE2}, //7514 #CJK UNIFIED IDEOGRAPH + {0xFAF3, 0x6AE4}, //7515 #CJK UNIFIED IDEOGRAPH + {0xFAF4, 0x6BD6}, //7516 #CJK UNIFIED IDEOGRAPH + {0xFAF5, 0x6C3F}, //7517 #CJK UNIFIED IDEOGRAPH + {0xFAF6, 0x6C5C}, //7518 #CJK UNIFIED IDEOGRAPH + {0xFAF7, 0x6C86}, //7519 #CJK UNIFIED IDEOGRAPH + {0xFAF8, 0x6C6F}, //7520 #CJK UNIFIED IDEOGRAPH + {0xFAF9, 0x6CDA}, //7521 #CJK UNIFIED IDEOGRAPH + {0xFAFA, 0x6D04}, //7522 #CJK UNIFIED IDEOGRAPH + {0xFAFB, 0x6D87}, //7523 #CJK UNIFIED IDEOGRAPH + {0xFAFC, 0x6D6F}, //7524 #CJK UNIFIED IDEOGRAPH + {0xFB40, 0x6D96}, //7525 #CJK UNIFIED IDEOGRAPH + {0xFB41, 0x6DAC}, //7526 #CJK UNIFIED IDEOGRAPH + {0xFB42, 0x6DCF}, //7527 #CJK UNIFIED IDEOGRAPH + {0xFB43, 0x6DF8}, //7528 #CJK UNIFIED IDEOGRAPH + {0xFB44, 0x6DF2}, //7529 #CJK UNIFIED IDEOGRAPH + {0xFB45, 0x6DFC}, //7530 #CJK UNIFIED IDEOGRAPH + {0xFB46, 0x6E39}, //7531 #CJK UNIFIED IDEOGRAPH + {0xFB47, 0x6E5C}, //7532 #CJK UNIFIED IDEOGRAPH + {0xFB48, 0x6E27}, //7533 #CJK UNIFIED IDEOGRAPH + {0xFB49, 0x6E3C}, //7534 #CJK UNIFIED IDEOGRAPH + {0xFB4A, 0x6EBF}, //7535 #CJK UNIFIED IDEOGRAPH + {0xFB4B, 0x6F88}, //7536 #CJK UNIFIED IDEOGRAPH + {0xFB4C, 0x6FB5}, //7537 #CJK UNIFIED IDEOGRAPH + {0xFB4D, 0x6FF5}, //7538 #CJK UNIFIED IDEOGRAPH + {0xFB4E, 0x7005}, //7539 #CJK UNIFIED IDEOGRAPH + {0xFB4F, 0x7007}, //7540 #CJK UNIFIED IDEOGRAPH + {0xFB50, 0x7028}, //7541 #CJK UNIFIED IDEOGRAPH + {0xFB51, 0x7085}, //7542 #CJK UNIFIED IDEOGRAPH + {0xFB52, 0x70AB}, //7543 #CJK UNIFIED IDEOGRAPH + {0xFB53, 0x710F}, //7544 #CJK UNIFIED IDEOGRAPH + {0xFB54, 0x7104}, //7545 #CJK UNIFIED IDEOGRAPH + {0xFB55, 0x715C}, //7546 #CJK UNIFIED IDEOGRAPH + {0xFB56, 0x7146}, //7547 #CJK UNIFIED IDEOGRAPH + {0xFB57, 0x7147}, //7548 #CJK UNIFIED IDEOGRAPH + {0xFB58, 0xFA15}, //7549 #CJK COMPATIBILITY IDEOGRAPH + {0xFB59, 0x71C1}, //7550 #CJK UNIFIED IDEOGRAPH + {0xFB5A, 0x71FE}, //7551 #CJK UNIFIED IDEOGRAPH + {0xFB5B, 0x72B1}, //7552 #CJK UNIFIED IDEOGRAPH + {0xFB5C, 0x72BE}, //7553 #CJK UNIFIED IDEOGRAPH + {0xFB5D, 0x7324}, //7554 #CJK UNIFIED IDEOGRAPH + {0xFB5E, 0xFA16}, //7555 #CJK COMPATIBILITY IDEOGRAPH + {0xFB5F, 0x7377}, //7556 #CJK UNIFIED IDEOGRAPH + {0xFB60, 0x73BD}, //7557 #CJK UNIFIED IDEOGRAPH + {0xFB61, 0x73C9}, //7558 #CJK UNIFIED IDEOGRAPH + {0xFB62, 0x73D6}, //7559 #CJK UNIFIED IDEOGRAPH + {0xFB63, 0x73E3}, //7560 #CJK UNIFIED IDEOGRAPH + {0xFB64, 0x73D2}, //7561 #CJK UNIFIED IDEOGRAPH + {0xFB65, 0x7407}, //7562 #CJK UNIFIED IDEOGRAPH + {0xFB66, 0x73F5}, //7563 #CJK UNIFIED IDEOGRAPH + {0xFB67, 0x7426}, //7564 #CJK UNIFIED IDEOGRAPH + {0xFB68, 0x742A}, //7565 #CJK UNIFIED IDEOGRAPH + {0xFB69, 0x7429}, //7566 #CJK UNIFIED IDEOGRAPH + {0xFB6A, 0x742E}, //7567 #CJK UNIFIED IDEOGRAPH + {0xFB6B, 0x7462}, //7568 #CJK UNIFIED IDEOGRAPH + {0xFB6C, 0x7489}, //7569 #CJK UNIFIED IDEOGRAPH + {0xFB6D, 0x749F}, //7570 #CJK UNIFIED IDEOGRAPH + {0xFB6E, 0x7501}, //7571 #CJK UNIFIED IDEOGRAPH + {0xFB6F, 0x756F}, //7572 #CJK UNIFIED IDEOGRAPH + {0xFB70, 0x7682}, //7573 #CJK UNIFIED IDEOGRAPH + {0xFB71, 0x769C}, //7574 #CJK UNIFIED IDEOGRAPH + {0xFB72, 0x769E}, //7575 #CJK UNIFIED IDEOGRAPH + {0xFB73, 0x769B}, //7576 #CJK UNIFIED IDEOGRAPH + {0xFB74, 0x76A6}, //7577 #CJK UNIFIED IDEOGRAPH + {0xFB75, 0xFA17}, //7578 #CJK COMPATIBILITY IDEOGRAPH + {0xFB76, 0x7746}, //7579 #CJK UNIFIED IDEOGRAPH + {0xFB77, 0x52AF}, //7580 #CJK UNIFIED IDEOGRAPH + {0xFB78, 0x7821}, //7581 #CJK UNIFIED IDEOGRAPH + {0xFB79, 0x784E}, //7582 #CJK UNIFIED IDEOGRAPH + {0xFB7A, 0x7864}, //7583 #CJK UNIFIED IDEOGRAPH + {0xFB7B, 0x787A}, //7584 #CJK UNIFIED IDEOGRAPH + {0xFB7C, 0x7930}, //7585 #CJK UNIFIED IDEOGRAPH + {0xFB7D, 0xFA18}, //7586 #CJK COMPATIBILITY IDEOGRAPH + {0xFB7E, 0xFA19}, //7587 #CJK COMPATIBILITY IDEOGRAPH + {0xFB80, 0xFA1A}, //7588 #CJK COMPATIBILITY IDEOGRAPH + {0xFB81, 0x7994}, //7589 #CJK UNIFIED IDEOGRAPH + {0xFB82, 0xFA1B}, //7590 #CJK COMPATIBILITY IDEOGRAPH + {0xFB83, 0x799B}, //7591 #CJK UNIFIED IDEOGRAPH + {0xFB84, 0x7AD1}, //7592 #CJK UNIFIED IDEOGRAPH + {0xFB85, 0x7AE7}, //7593 #CJK UNIFIED IDEOGRAPH + {0xFB86, 0xFA1C}, //7594 #CJK COMPATIBILITY IDEOGRAPH + {0xFB87, 0x7AEB}, //7595 #CJK UNIFIED IDEOGRAPH + {0xFB88, 0x7B9E}, //7596 #CJK UNIFIED IDEOGRAPH + {0xFB89, 0xFA1D}, //7597 #CJK COMPATIBILITY IDEOGRAPH + {0xFB8A, 0x7D48}, //7598 #CJK UNIFIED IDEOGRAPH + {0xFB8B, 0x7D5C}, //7599 #CJK UNIFIED IDEOGRAPH + {0xFB8C, 0x7DB7}, //7600 #CJK UNIFIED IDEOGRAPH + {0xFB8D, 0x7DA0}, //7601 #CJK UNIFIED IDEOGRAPH + {0xFB8E, 0x7DD6}, //7602 #CJK UNIFIED IDEOGRAPH + {0xFB8F, 0x7E52}, //7603 #CJK UNIFIED IDEOGRAPH + {0xFB90, 0x7F47}, //7604 #CJK UNIFIED IDEOGRAPH + {0xFB91, 0x7FA1}, //7605 #CJK UNIFIED IDEOGRAPH + {0xFB92, 0xFA1E}, //7606 #CJK COMPATIBILITY IDEOGRAPH + {0xFB93, 0x8301}, //7607 #CJK UNIFIED IDEOGRAPH + {0xFB94, 0x8362}, //7608 #CJK UNIFIED IDEOGRAPH + {0xFB95, 0x837F}, //7609 #CJK UNIFIED IDEOGRAPH + {0xFB96, 0x83C7}, //7610 #CJK UNIFIED IDEOGRAPH + {0xFB97, 0x83F6}, //7611 #CJK UNIFIED IDEOGRAPH + {0xFB98, 0x8448}, //7612 #CJK UNIFIED IDEOGRAPH + {0xFB99, 0x84B4}, //7613 #CJK UNIFIED IDEOGRAPH + {0xFB9A, 0x8553}, //7614 #CJK UNIFIED IDEOGRAPH + {0xFB9B, 0x8559}, //7615 #CJK UNIFIED IDEOGRAPH + {0xFB9C, 0x856B}, //7616 #CJK UNIFIED IDEOGRAPH + {0xFB9D, 0xFA1F}, //7617 #CJK COMPATIBILITY IDEOGRAPH + {0xFB9E, 0x85B0}, //7618 #CJK UNIFIED IDEOGRAPH + {0xFB9F, 0xFA20}, //7619 #CJK COMPATIBILITY IDEOGRAPH + {0xFBA0, 0xFA21}, //7620 #CJK COMPATIBILITY IDEOGRAPH + {0xFBA1, 0x8807}, //7621 #CJK UNIFIED IDEOGRAPH + {0xFBA2, 0x88F5}, //7622 #CJK UNIFIED IDEOGRAPH + {0xFBA3, 0x8A12}, //7623 #CJK UNIFIED IDEOGRAPH + {0xFBA4, 0x8A37}, //7624 #CJK UNIFIED IDEOGRAPH + {0xFBA5, 0x8A79}, //7625 #CJK UNIFIED IDEOGRAPH + {0xFBA6, 0x8AA7}, //7626 #CJK UNIFIED IDEOGRAPH + {0xFBA7, 0x8ABE}, //7627 #CJK UNIFIED IDEOGRAPH + {0xFBA8, 0x8ADF}, //7628 #CJK UNIFIED IDEOGRAPH + {0xFBA9, 0xFA22}, //7629 #CJK COMPATIBILITY IDEOGRAPH + {0xFBAA, 0x8AF6}, //7630 #CJK UNIFIED IDEOGRAPH + {0xFBAB, 0x8B53}, //7631 #CJK UNIFIED IDEOGRAPH + {0xFBAC, 0x8B7F}, //7632 #CJK UNIFIED IDEOGRAPH + {0xFBAD, 0x8CF0}, //7633 #CJK UNIFIED IDEOGRAPH + {0xFBAE, 0x8CF4}, //7634 #CJK UNIFIED IDEOGRAPH + {0xFBAF, 0x8D12}, //7635 #CJK UNIFIED IDEOGRAPH + {0xFBB0, 0x8D76}, //7636 #CJK UNIFIED IDEOGRAPH + {0xFBB1, 0xFA23}, //7637 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB2, 0x8ECF}, //7638 #CJK UNIFIED IDEOGRAPH + {0xFBB3, 0xFA24}, //7639 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB4, 0xFA25}, //7640 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB5, 0x9067}, //7641 #CJK UNIFIED IDEOGRAPH + {0xFBB6, 0x90DE}, //7642 #CJK UNIFIED IDEOGRAPH + {0xFBB7, 0xFA26}, //7643 #CJK COMPATIBILITY IDEOGRAPH + {0xFBB8, 0x9115}, //7644 #CJK UNIFIED IDEOGRAPH + {0xFBB9, 0x9127}, //7645 #CJK UNIFIED IDEOGRAPH + {0xFBBA, 0x91DA}, //7646 #CJK UNIFIED IDEOGRAPH + {0xFBBB, 0x91D7}, //7647 #CJK UNIFIED IDEOGRAPH + {0xFBBC, 0x91DE}, //7648 #CJK UNIFIED IDEOGRAPH + {0xFBBD, 0x91ED}, //7649 #CJK UNIFIED IDEOGRAPH + {0xFBBE, 0x91EE}, //7650 #CJK UNIFIED IDEOGRAPH + {0xFBBF, 0x91E4}, //7651 #CJK UNIFIED IDEOGRAPH + {0xFBC0, 0x91E5}, //7652 #CJK UNIFIED IDEOGRAPH + {0xFBC1, 0x9206}, //7653 #CJK UNIFIED IDEOGRAPH + {0xFBC2, 0x9210}, //7654 #CJK UNIFIED IDEOGRAPH + {0xFBC3, 0x920A}, //7655 #CJK UNIFIED IDEOGRAPH + {0xFBC4, 0x923A}, //7656 #CJK UNIFIED IDEOGRAPH + {0xFBC5, 0x9240}, //7657 #CJK UNIFIED IDEOGRAPH + {0xFBC6, 0x923C}, //7658 #CJK UNIFIED IDEOGRAPH + {0xFBC7, 0x924E}, //7659 #CJK UNIFIED IDEOGRAPH + {0xFBC8, 0x9259}, //7660 #CJK UNIFIED IDEOGRAPH + {0xFBC9, 0x9251}, //7661 #CJK UNIFIED IDEOGRAPH + {0xFBCA, 0x9239}, //7662 #CJK UNIFIED IDEOGRAPH + {0xFBCB, 0x9267}, //7663 #CJK UNIFIED IDEOGRAPH + {0xFBCC, 0x92A7}, //7664 #CJK UNIFIED IDEOGRAPH + {0xFBCD, 0x9277}, //7665 #CJK UNIFIED IDEOGRAPH + {0xFBCE, 0x9278}, //7666 #CJK UNIFIED IDEOGRAPH + {0xFBCF, 0x92E7}, //7667 #CJK UNIFIED IDEOGRAPH + {0xFBD0, 0x92D7}, //7668 #CJK UNIFIED IDEOGRAPH + {0xFBD1, 0x92D9}, //7669 #CJK UNIFIED IDEOGRAPH + {0xFBD2, 0x92D0}, //7670 #CJK UNIFIED IDEOGRAPH + {0xFBD3, 0xFA27}, //7671 #CJK COMPATIBILITY IDEOGRAPH + {0xFBD4, 0x92D5}, //7672 #CJK UNIFIED IDEOGRAPH + {0xFBD5, 0x92E0}, //7673 #CJK UNIFIED IDEOGRAPH + {0xFBD6, 0x92D3}, //7674 #CJK UNIFIED IDEOGRAPH + {0xFBD7, 0x9325}, //7675 #CJK UNIFIED IDEOGRAPH + {0xFBD8, 0x9321}, //7676 #CJK UNIFIED IDEOGRAPH + {0xFBD9, 0x92FB}, //7677 #CJK UNIFIED IDEOGRAPH + {0xFBDA, 0xFA28}, //7678 #CJK COMPATIBILITY IDEOGRAPH + {0xFBDB, 0x931E}, //7679 #CJK UNIFIED IDEOGRAPH + {0xFBDC, 0x92FF}, //7680 #CJK UNIFIED IDEOGRAPH + {0xFBDD, 0x931D}, //7681 #CJK UNIFIED IDEOGRAPH + {0xFBDE, 0x9302}, //7682 #CJK UNIFIED IDEOGRAPH + {0xFBDF, 0x9370}, //7683 #CJK UNIFIED IDEOGRAPH + {0xFBE0, 0x9357}, //7684 #CJK UNIFIED IDEOGRAPH + {0xFBE1, 0x93A4}, //7685 #CJK UNIFIED IDEOGRAPH + {0xFBE2, 0x93C6}, //7686 #CJK UNIFIED IDEOGRAPH + {0xFBE3, 0x93DE}, //7687 #CJK UNIFIED IDEOGRAPH + {0xFBE4, 0x93F8}, //7688 #CJK UNIFIED IDEOGRAPH + {0xFBE5, 0x9431}, //7689 #CJK UNIFIED IDEOGRAPH + {0xFBE6, 0x9445}, //7690 #CJK UNIFIED IDEOGRAPH + {0xFBE7, 0x9448}, //7691 #CJK UNIFIED IDEOGRAPH + {0xFBE8, 0x9592}, //7692 #CJK UNIFIED IDEOGRAPH + {0xFBE9, 0xF9DC}, //7693 #CJK COMPATIBILITY IDEOGRAPH + {0xFBEA, 0xFA29}, //7694 #CJK COMPATIBILITY IDEOGRAPH + {0xFBEB, 0x969D}, //7695 #CJK UNIFIED IDEOGRAPH + {0xFBEC, 0x96AF}, //7696 #CJK UNIFIED IDEOGRAPH + {0xFBED, 0x9733}, //7697 #CJK UNIFIED IDEOGRAPH + {0xFBEE, 0x973B}, //7698 #CJK UNIFIED IDEOGRAPH + {0xFBEF, 0x9743}, //7699 #CJK UNIFIED IDEOGRAPH + {0xFBF0, 0x974D}, //7700 #CJK UNIFIED IDEOGRAPH + {0xFBF1, 0x974F}, //7701 #CJK UNIFIED IDEOGRAPH + {0xFBF2, 0x9751}, //7702 #CJK UNIFIED IDEOGRAPH + {0xFBF3, 0x9755}, //7703 #CJK UNIFIED IDEOGRAPH + {0xFBF4, 0x9857}, //7704 #CJK UNIFIED IDEOGRAPH + {0xFBF5, 0x9865}, //7705 #CJK UNIFIED IDEOGRAPH + {0xFBF6, 0xFA2A}, //7706 #CJK COMPATIBILITY IDEOGRAPH + {0xFBF7, 0xFA2B}, //7707 #CJK COMPATIBILITY IDEOGRAPH + {0xFBF8, 0x9927}, //7708 #CJK UNIFIED IDEOGRAPH + {0xFBF9, 0xFA2C}, //7709 #CJK COMPATIBILITY IDEOGRAPH + {0xFBFA, 0x999E}, //7710 #CJK UNIFIED IDEOGRAPH + {0xFBFB, 0x9A4E}, //7711 #CJK UNIFIED IDEOGRAPH + {0xFBFC, 0x9AD9}, //7712 #CJK UNIFIED IDEOGRAPH + {0xFC40, 0x9ADC}, //7713 #CJK UNIFIED IDEOGRAPH + {0xFC41, 0x9B75}, //7714 #CJK UNIFIED IDEOGRAPH + {0xFC42, 0x9B72}, //7715 #CJK UNIFIED IDEOGRAPH + {0xFC43, 0x9B8F}, //7716 #CJK UNIFIED IDEOGRAPH + {0xFC44, 0x9BB1}, //7717 #CJK UNIFIED IDEOGRAPH + {0xFC45, 0x9BBB}, //7718 #CJK UNIFIED IDEOGRAPH + {0xFC46, 0x9C00}, //7719 #CJK UNIFIED IDEOGRAPH + {0xFC47, 0x9D70}, //7720 #CJK UNIFIED IDEOGRAPH + {0xFC48, 0x9D6B}, //7721 #CJK UNIFIED IDEOGRAPH + {0xFC49, 0xFA2D}, //7722 #CJK COMPATIBILITY IDEOGRAPH + {0xFC4A, 0x9E19}, //7723 #CJK UNIFIED IDEOGRAPH + {0xFC4B, 0x9ED1} //7724 #CJK UNIFIED IDEOGRAPH +}; +#endif // DRW_CPTABLE932_H diff --git a/extlib/libdxfrw/intern/drw_cptable936.h b/extlib/libdxfrw/intern/drw_cptable936.h new file mode 100644 index 0000000..4c1c141 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable936.h @@ -0,0 +1,21943 @@ +#ifndef DRW_CPTABLE936_H +#define DRW_CPTABLE936_H + +//Chinese PRC GBK (XGB) + +//first entry in this tables are 0x80 +#define CPOFFSET936 0x80 +#define CPLENGHT936 21791 +#define NOTFOUND936 0x003F + +//Table 949 one byte +static const int DRW_Table936[] = { + 0x20AC //1 #EURO SIGN 0x80 +// 0xF8F5 //2 #EURO SIGN 0x80 +}; + +//Table 936 +static const int DRW_LeadTable936[] = { + 0, //1#DBCS LEAD BYTE 0x81 + 190, //2#DBCS LEAD BYTE 0x82 + 380, //3#DBCS LEAD BYTE 0x83 + 570, //4#DBCS LEAD BYTE 0x84 + 760, //5#DBCS LEAD BYTE 0x85 + 950, //6#DBCS LEAD BYTE 0x86 + 1140, //7#DBCS LEAD BYTE 0x87 + 1330, //8#DBCS LEAD BYTE 0x88 + 1520, //9#DBCS LEAD BYTE 0x89 + 1710, //10#DBCS LEAD BYTE 0x8A + 1900, //11#DBCS LEAD BYTE 0x8B + 2090, //12#DBCS LEAD BYTE 0x8C + 2280, //13#DBCS LEAD BYTE 0x8D + 2470, //14#DBCS LEAD BYTE 0x8E + 2660, //15#DBCS LEAD BYTE 0x8F + 2850, //16#DBCS LEAD BYTE 0x90 + 3040, //17#DBCS LEAD BYTE 0x91 + 3230, //18#DBCS LEAD BYTE 0x92 + 3420, //19#DBCS LEAD BYTE 0x93 + 3610, //20#DBCS LEAD BYTE 0x94 + 3800, //21#DBCS LEAD BYTE 0x95 + 3990, //22#DBCS LEAD BYTE 0x96 + 4180, //23#DBCS LEAD BYTE 0x97 + 4370, //24#DBCS LEAD BYTE 0x98 + 4560, //25#DBCS LEAD BYTE 0x99 + 4750, //26#DBCS LEAD BYTE 0x9A + 4940, //27#DBCS LEAD BYTE 0x9B + 5130, //28#DBCS LEAD BYTE 0x9C + 5320, //29#DBCS LEAD BYTE 0x9D + 5510, //30#DBCS LEAD BYTE 0x9E + 5700, //31#DBCS LEAD BYTE 0x9F + 5906, //32#DBCS LEAD BYTE 0xA0 + 6080, //33#DBCS LEAD BYTE 0xA1 + 6174, //34#DBCS LEAD BYTE 0xA2 + 6256, //35#DBCS LEAD BYTE 0xA3 + 6350, //36#DBCS LEAD BYTE 0xA4 + 6433, //37#DBCS LEAD BYTE 0xA5 + 6519, //38#DBCS LEAD BYTE 0xA6 + 6586, //39#DBCS LEAD BYTE 0xA7 + 6652, //40#DBCS LEAD BYTE 0xA8 + 6804, //41#DBCS LEAD BYTE 0xA9 + 6948, //42#DBCS LEAD BYTE 0xAA + 7044, //43#DBCS LEAD BYTE 0xAB + 7140, //44#DBCS LEAD BYTE 0xAC + 7236, //45#DBCS LEAD BYTE 0xAD + 7332, //46#DBCS LEAD BYTE 0xAE + 7428, //47#DBCS LEAD BYTE 0xAF + 7524, //48#DBCS LEAD BYTE 0xB0 + 7714, //49#DBCS LEAD BYTE 0xB1 + 7904, //50#DBCS LEAD BYTE 0xB2 + 8094, //51#DBCS LEAD BYTE 0xB3 + 8284, //52#DBCS LEAD BYTE 0xB4 + 8474, //53#DBCS LEAD BYTE 0xB5 + 8664, //54#DBCS LEAD BYTE 0xB6 + 8854, //55#DBCS LEAD BYTE 0xB7 + 9044, //56#DBCS LEAD BYTE 0xB8 + 9224, //57#DBCS LEAD BYTE 0xB9 + 9424, //58#DBCS LEAD BYTE 0xBA + 9614, //59#DBCS LEAD BYTE 0xBB + 9804, //60#DBCS LEAD BYTE 0xBC + 9994, //61#DBCS LEAD BYTE 0xBD + 10184, //62#DBCS LEAD BYTE 0xBE + 10374, //63#DBCS LEAD BYTE 0xBF + 10564, //64#DBCS LEAD BYTE 0xC0 + 10754, //65#DBCS LEAD BYTE 0xC1 + 10944, //66#DBCS LEAD BYTE 0xC2 + 11134, //67#DBCS LEAD BYTE 0xC3 + 11324, //68#DBCS LEAD BYTE 0xC4 + 11514, //69#DBCS LEAD BYTE 0xC5 + 11704, //70#DBCS LEAD BYTE 0xC6 + 11894, //71#DBCS LEAD BYTE 0xC7 + 12084, //72#DBCS LEAD BYTE 0xC8 + 12274, //73#DBCS LEAD BYTE 0xC9 + 12464, //74#DBCS LEAD BYTE 0xCA + 12654, //75#DBCS LEAD BYTE 0xCB + 12844, //76#DBCS LEAD BYTE 0xCC + 13034, //77#DBCS LEAD BYTE 0xCD + 13224, //78#DBCS LEAD BYTE 0xCE + 13414, //79#DBCS LEAD BYTE 0xCF + 13604, //80#DBCS LEAD BYTE 0xD0 + 13794, //81#DBCS LEAD BYTE 0xD1 + 13984, //82#DBCS LEAD BYTE 0xD2 + 14174, //83#DBCS LEAD BYTE 0xD3 + 14364, //84#DBCS LEAD BYTE 0xD4 + 14554, //85#DBCS LEAD BYTE 0xD5 + 14744, //86#DBCS LEAD BYTE 0xD6 + 14934, //87#DBCS LEAD BYTE 0xD7 + 15119, //88#DBCS LEAD BYTE 0xD8 + 15309, //89#DBCS LEAD BYTE 0xD9 + 15499, //90#DBCS LEAD BYTE 0xDA + 15689, //91#DBCS LEAD BYTE 0xDB + 15879, //92#DBCS LEAD BYTE 0xDC + 16069, //93#DBCS LEAD BYTE 0xDD + 16259, //94#DBCS LEAD BYTE 0xDE + 16449, //95#DBCS LEAD BYTE 0xDF + 16639, //96#DBCS LEAD BYTE 0xE0 + 16829, //97#DBCS LEAD BYTE 0xE1 + 17019, //98#DBCS LEAD BYTE 0xE2 + 17209, //99#DBCS LEAD BYTE 0xE3 + 17399, //100#DBCS LEAD BYTE 0xE4 + 17589, //101#DBCS LEAD BYTE 0xE5 + 17779, //102#DBCS LEAD BYTE 0xE6 + 17969, //103#DBCS LEAD BYTE 0xE7 + 18159, //104#DBCS LEAD BYTE 0xE8 + 18349, //105#DBCS LEAD BYTE 0xE9 + 18539, //106#DBCS LEAD BYTE 0xEA + 18729, //107#DBCS LEAD BYTE 0xEB + 18919, //108#DBCS LEAD BYTE 0xEC + 19109, //109#DBCS LEAD BYTE 0xED + 19299, //110#DBCS LEAD BYTE 0xEE + 19489, //111#DBCS LEAD BYTE 0xEF + 19679, //112#DBCS LEAD BYTE 0xF0 + 19869, //113#DBCS LEAD BYTE 0xF1 + 20059, //114#DBCS LEAD BYTE 0xF2 + 20249, //115#DBCS LEAD BYTE 0xF3 + 20439, //116#DBCS LEAD BYTE 0xF4 + 20659, //117#DBCS LEAD BYTE 0xF5 + 20819, //118#DBCS LEAD BYTE 0xF6 + 21009, //119#DBCS LEAD BYTE 0xF7 + 21199, //120#DBCS LEAD BYTE 0xF8 + 21295, //121#DBCS LEAD BYTE 0xF9 + 21391, //122#DBCS LEAD BYTE 0xFA + 21487, //123#DBCS LEAD BYTE 0xFB + 21583, //124#DBCS LEAD BYTE 0xFC + 21679, //125#DBCS LEAD BYTE 0xFD + 21775, //126#DBCS LEAD BYTE 0xFE + 21791, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 936 tail byte +static const int DRW_DoubleTable936[][2] = { + {0x8140, 0x4E02}, //1 #CJK UNIFIED IDEOGRAPH + {0x8141, 0x4E04}, //2 #CJK UNIFIED IDEOGRAPH + {0x8142, 0x4E05}, //3 #CJK UNIFIED IDEOGRAPH + {0x8143, 0x4E06}, //4 #CJK UNIFIED IDEOGRAPH + {0x8144, 0x4E0F}, //5 #CJK UNIFIED IDEOGRAPH + {0x8145, 0x4E12}, //6 #CJK UNIFIED IDEOGRAPH + {0x8146, 0x4E17}, //7 #CJK UNIFIED IDEOGRAPH + {0x8147, 0x4E1F}, //8 #CJK UNIFIED IDEOGRAPH + {0x8148, 0x4E20}, //9 #CJK UNIFIED IDEOGRAPH + {0x8149, 0x4E21}, //10 #CJK UNIFIED IDEOGRAPH + {0x814A, 0x4E23}, //11 #CJK UNIFIED IDEOGRAPH + {0x814B, 0x4E26}, //12 #CJK UNIFIED IDEOGRAPH + {0x814C, 0x4E29}, //13 #CJK UNIFIED IDEOGRAPH + {0x814D, 0x4E2E}, //14 #CJK UNIFIED IDEOGRAPH + {0x814E, 0x4E2F}, //15 #CJK UNIFIED IDEOGRAPH + {0x814F, 0x4E31}, //16 #CJK UNIFIED IDEOGRAPH + {0x8150, 0x4E33}, //17 #CJK UNIFIED IDEOGRAPH + {0x8151, 0x4E35}, //18 #CJK UNIFIED IDEOGRAPH + {0x8152, 0x4E37}, //19 #CJK UNIFIED IDEOGRAPH + {0x8153, 0x4E3C}, //20 #CJK UNIFIED IDEOGRAPH + {0x8154, 0x4E40}, //21 #CJK UNIFIED IDEOGRAPH + {0x8155, 0x4E41}, //22 #CJK UNIFIED IDEOGRAPH + {0x8156, 0x4E42}, //23 #CJK UNIFIED IDEOGRAPH + {0x8157, 0x4E44}, //24 #CJK UNIFIED IDEOGRAPH + {0x8158, 0x4E46}, //25 #CJK UNIFIED IDEOGRAPH + {0x8159, 0x4E4A}, //26 #CJK UNIFIED IDEOGRAPH + {0x815A, 0x4E51}, //27 #CJK UNIFIED IDEOGRAPH + {0x815B, 0x4E55}, //28 #CJK UNIFIED IDEOGRAPH + {0x815C, 0x4E57}, //29 #CJK UNIFIED IDEOGRAPH + {0x815D, 0x4E5A}, //30 #CJK UNIFIED IDEOGRAPH + {0x815E, 0x4E5B}, //31 #CJK UNIFIED IDEOGRAPH + {0x815F, 0x4E62}, //32 #CJK UNIFIED IDEOGRAPH + {0x8160, 0x4E63}, //33 #CJK UNIFIED IDEOGRAPH + {0x8161, 0x4E64}, //34 #CJK UNIFIED IDEOGRAPH + {0x8162, 0x4E65}, //35 #CJK UNIFIED IDEOGRAPH + {0x8163, 0x4E67}, //36 #CJK UNIFIED IDEOGRAPH + {0x8164, 0x4E68}, //37 #CJK UNIFIED IDEOGRAPH + {0x8165, 0x4E6A}, //38 #CJK UNIFIED IDEOGRAPH + {0x8166, 0x4E6B}, //39 #CJK UNIFIED IDEOGRAPH + {0x8167, 0x4E6C}, //40 #CJK UNIFIED IDEOGRAPH + {0x8168, 0x4E6D}, //41 #CJK UNIFIED IDEOGRAPH + {0x8169, 0x4E6E}, //42 #CJK UNIFIED IDEOGRAPH + {0x816A, 0x4E6F}, //43 #CJK UNIFIED IDEOGRAPH + {0x816B, 0x4E72}, //44 #CJK UNIFIED IDEOGRAPH + {0x816C, 0x4E74}, //45 #CJK UNIFIED IDEOGRAPH + {0x816D, 0x4E75}, //46 #CJK UNIFIED IDEOGRAPH + {0x816E, 0x4E76}, //47 #CJK UNIFIED IDEOGRAPH + {0x816F, 0x4E77}, //48 #CJK UNIFIED IDEOGRAPH + {0x8170, 0x4E78}, //49 #CJK UNIFIED IDEOGRAPH + {0x8171, 0x4E79}, //50 #CJK UNIFIED IDEOGRAPH + {0x8172, 0x4E7A}, //51 #CJK UNIFIED IDEOGRAPH + {0x8173, 0x4E7B}, //52 #CJK UNIFIED IDEOGRAPH + {0x8174, 0x4E7C}, //53 #CJK UNIFIED IDEOGRAPH + {0x8175, 0x4E7D}, //54 #CJK UNIFIED IDEOGRAPH + {0x8176, 0x4E7F}, //55 #CJK UNIFIED IDEOGRAPH + {0x8177, 0x4E80}, //56 #CJK UNIFIED IDEOGRAPH + {0x8178, 0x4E81}, //57 #CJK UNIFIED IDEOGRAPH + {0x8179, 0x4E82}, //58 #CJK UNIFIED IDEOGRAPH + {0x817A, 0x4E83}, //59 #CJK UNIFIED IDEOGRAPH + {0x817B, 0x4E84}, //60 #CJK UNIFIED IDEOGRAPH + {0x817C, 0x4E85}, //61 #CJK UNIFIED IDEOGRAPH + {0x817D, 0x4E87}, //62 #CJK UNIFIED IDEOGRAPH + {0x817E, 0x4E8A}, //63 #CJK UNIFIED IDEOGRAPH + {0x8180, 0x4E90}, //64 #CJK UNIFIED IDEOGRAPH + {0x8181, 0x4E96}, //65 #CJK UNIFIED IDEOGRAPH + {0x8182, 0x4E97}, //66 #CJK UNIFIED IDEOGRAPH + {0x8183, 0x4E99}, //67 #CJK UNIFIED IDEOGRAPH + {0x8184, 0x4E9C}, //68 #CJK UNIFIED IDEOGRAPH + {0x8185, 0x4E9D}, //69 #CJK UNIFIED IDEOGRAPH + {0x8186, 0x4E9E}, //70 #CJK UNIFIED IDEOGRAPH + {0x8187, 0x4EA3}, //71 #CJK UNIFIED IDEOGRAPH + {0x8188, 0x4EAA}, //72 #CJK UNIFIED IDEOGRAPH + {0x8189, 0x4EAF}, //73 #CJK UNIFIED IDEOGRAPH + {0x818A, 0x4EB0}, //74 #CJK UNIFIED IDEOGRAPH + {0x818B, 0x4EB1}, //75 #CJK UNIFIED IDEOGRAPH + {0x818C, 0x4EB4}, //76 #CJK UNIFIED IDEOGRAPH + {0x818D, 0x4EB6}, //77 #CJK UNIFIED IDEOGRAPH + {0x818E, 0x4EB7}, //78 #CJK UNIFIED IDEOGRAPH + {0x818F, 0x4EB8}, //79 #CJK UNIFIED IDEOGRAPH + {0x8190, 0x4EB9}, //80 #CJK UNIFIED IDEOGRAPH + {0x8191, 0x4EBC}, //81 #CJK UNIFIED IDEOGRAPH + {0x8192, 0x4EBD}, //82 #CJK UNIFIED IDEOGRAPH + {0x8193, 0x4EBE}, //83 #CJK UNIFIED IDEOGRAPH + {0x8194, 0x4EC8}, //84 #CJK UNIFIED IDEOGRAPH + {0x8195, 0x4ECC}, //85 #CJK UNIFIED IDEOGRAPH + {0x8196, 0x4ECF}, //86 #CJK UNIFIED IDEOGRAPH + {0x8197, 0x4ED0}, //87 #CJK UNIFIED IDEOGRAPH + {0x8198, 0x4ED2}, //88 #CJK UNIFIED IDEOGRAPH + {0x8199, 0x4EDA}, //89 #CJK UNIFIED IDEOGRAPH + {0x819A, 0x4EDB}, //90 #CJK UNIFIED IDEOGRAPH + {0x819B, 0x4EDC}, //91 #CJK UNIFIED IDEOGRAPH + {0x819C, 0x4EE0}, //92 #CJK UNIFIED IDEOGRAPH + {0x819D, 0x4EE2}, //93 #CJK UNIFIED IDEOGRAPH + {0x819E, 0x4EE6}, //94 #CJK UNIFIED IDEOGRAPH + {0x819F, 0x4EE7}, //95 #CJK UNIFIED IDEOGRAPH + {0x81A0, 0x4EE9}, //96 #CJK UNIFIED IDEOGRAPH + {0x81A1, 0x4EED}, //97 #CJK UNIFIED IDEOGRAPH + {0x81A2, 0x4EEE}, //98 #CJK UNIFIED IDEOGRAPH + {0x81A3, 0x4EEF}, //99 #CJK UNIFIED IDEOGRAPH + {0x81A4, 0x4EF1}, //100 #CJK UNIFIED IDEOGRAPH + {0x81A5, 0x4EF4}, //101 #CJK UNIFIED IDEOGRAPH + {0x81A6, 0x4EF8}, //102 #CJK UNIFIED IDEOGRAPH + {0x81A7, 0x4EF9}, //103 #CJK UNIFIED IDEOGRAPH + {0x81A8, 0x4EFA}, //104 #CJK UNIFIED IDEOGRAPH + {0x81A9, 0x4EFC}, //105 #CJK UNIFIED IDEOGRAPH + {0x81AA, 0x4EFE}, //106 #CJK UNIFIED IDEOGRAPH + {0x81AB, 0x4F00}, //107 #CJK UNIFIED IDEOGRAPH + {0x81AC, 0x4F02}, //108 #CJK UNIFIED IDEOGRAPH + {0x81AD, 0x4F03}, //109 #CJK UNIFIED IDEOGRAPH + {0x81AE, 0x4F04}, //110 #CJK UNIFIED IDEOGRAPH + {0x81AF, 0x4F05}, //111 #CJK UNIFIED IDEOGRAPH + {0x81B0, 0x4F06}, //112 #CJK UNIFIED IDEOGRAPH + {0x81B1, 0x4F07}, //113 #CJK UNIFIED IDEOGRAPH + {0x81B2, 0x4F08}, //114 #CJK UNIFIED IDEOGRAPH + {0x81B3, 0x4F0B}, //115 #CJK UNIFIED IDEOGRAPH + {0x81B4, 0x4F0C}, //116 #CJK UNIFIED IDEOGRAPH + {0x81B5, 0x4F12}, //117 #CJK UNIFIED IDEOGRAPH + {0x81B6, 0x4F13}, //118 #CJK UNIFIED IDEOGRAPH + {0x81B7, 0x4F14}, //119 #CJK UNIFIED IDEOGRAPH + {0x81B8, 0x4F15}, //120 #CJK UNIFIED IDEOGRAPH + {0x81B9, 0x4F16}, //121 #CJK UNIFIED IDEOGRAPH + {0x81BA, 0x4F1C}, //122 #CJK UNIFIED IDEOGRAPH + {0x81BB, 0x4F1D}, //123 #CJK UNIFIED IDEOGRAPH + {0x81BC, 0x4F21}, //124 #CJK UNIFIED IDEOGRAPH + {0x81BD, 0x4F23}, //125 #CJK UNIFIED IDEOGRAPH + {0x81BE, 0x4F28}, //126 #CJK UNIFIED IDEOGRAPH + {0x81BF, 0x4F29}, //127 #CJK UNIFIED IDEOGRAPH + {0x81C0, 0x4F2C}, //128 #CJK UNIFIED IDEOGRAPH + {0x81C1, 0x4F2D}, //129 #CJK UNIFIED IDEOGRAPH + {0x81C2, 0x4F2E}, //130 #CJK UNIFIED IDEOGRAPH + {0x81C3, 0x4F31}, //131 #CJK UNIFIED IDEOGRAPH + {0x81C4, 0x4F33}, //132 #CJK UNIFIED IDEOGRAPH + {0x81C5, 0x4F35}, //133 #CJK UNIFIED IDEOGRAPH + {0x81C6, 0x4F37}, //134 #CJK UNIFIED IDEOGRAPH + {0x81C7, 0x4F39}, //135 #CJK UNIFIED IDEOGRAPH + {0x81C8, 0x4F3B}, //136 #CJK UNIFIED IDEOGRAPH + {0x81C9, 0x4F3E}, //137 #CJK UNIFIED IDEOGRAPH + {0x81CA, 0x4F3F}, //138 #CJK UNIFIED IDEOGRAPH + {0x81CB, 0x4F40}, //139 #CJK UNIFIED IDEOGRAPH + {0x81CC, 0x4F41}, //140 #CJK UNIFIED IDEOGRAPH + {0x81CD, 0x4F42}, //141 #CJK UNIFIED IDEOGRAPH + {0x81CE, 0x4F44}, //142 #CJK UNIFIED IDEOGRAPH + {0x81CF, 0x4F45}, //143 #CJK UNIFIED IDEOGRAPH + {0x81D0, 0x4F47}, //144 #CJK UNIFIED IDEOGRAPH + {0x81D1, 0x4F48}, //145 #CJK UNIFIED IDEOGRAPH + {0x81D2, 0x4F49}, //146 #CJK UNIFIED IDEOGRAPH + {0x81D3, 0x4F4A}, //147 #CJK UNIFIED IDEOGRAPH + {0x81D4, 0x4F4B}, //148 #CJK UNIFIED IDEOGRAPH + {0x81D5, 0x4F4C}, //149 #CJK UNIFIED IDEOGRAPH + {0x81D6, 0x4F52}, //150 #CJK UNIFIED IDEOGRAPH + {0x81D7, 0x4F54}, //151 #CJK UNIFIED IDEOGRAPH + {0x81D8, 0x4F56}, //152 #CJK UNIFIED IDEOGRAPH + {0x81D9, 0x4F61}, //153 #CJK UNIFIED IDEOGRAPH + {0x81DA, 0x4F62}, //154 #CJK UNIFIED IDEOGRAPH + {0x81DB, 0x4F66}, //155 #CJK UNIFIED IDEOGRAPH + {0x81DC, 0x4F68}, //156 #CJK UNIFIED IDEOGRAPH + {0x81DD, 0x4F6A}, //157 #CJK UNIFIED IDEOGRAPH + {0x81DE, 0x4F6B}, //158 #CJK UNIFIED IDEOGRAPH + {0x81DF, 0x4F6D}, //159 #CJK UNIFIED IDEOGRAPH + {0x81E0, 0x4F6E}, //160 #CJK UNIFIED IDEOGRAPH + {0x81E1, 0x4F71}, //161 #CJK UNIFIED IDEOGRAPH + {0x81E2, 0x4F72}, //162 #CJK UNIFIED IDEOGRAPH + {0x81E3, 0x4F75}, //163 #CJK UNIFIED IDEOGRAPH + {0x81E4, 0x4F77}, //164 #CJK UNIFIED IDEOGRAPH + {0x81E5, 0x4F78}, //165 #CJK UNIFIED IDEOGRAPH + {0x81E6, 0x4F79}, //166 #CJK UNIFIED IDEOGRAPH + {0x81E7, 0x4F7A}, //167 #CJK UNIFIED IDEOGRAPH + {0x81E8, 0x4F7D}, //168 #CJK UNIFIED IDEOGRAPH + {0x81E9, 0x4F80}, //169 #CJK UNIFIED IDEOGRAPH + {0x81EA, 0x4F81}, //170 #CJK UNIFIED IDEOGRAPH + {0x81EB, 0x4F82}, //171 #CJK UNIFIED IDEOGRAPH + {0x81EC, 0x4F85}, //172 #CJK UNIFIED IDEOGRAPH + {0x81ED, 0x4F86}, //173 #CJK UNIFIED IDEOGRAPH + {0x81EE, 0x4F87}, //174 #CJK UNIFIED IDEOGRAPH + {0x81EF, 0x4F8A}, //175 #CJK UNIFIED IDEOGRAPH + {0x81F0, 0x4F8C}, //176 #CJK UNIFIED IDEOGRAPH + {0x81F1, 0x4F8E}, //177 #CJK UNIFIED IDEOGRAPH + {0x81F2, 0x4F90}, //178 #CJK UNIFIED IDEOGRAPH + {0x81F3, 0x4F92}, //179 #CJK UNIFIED IDEOGRAPH + {0x81F4, 0x4F93}, //180 #CJK UNIFIED IDEOGRAPH + {0x81F5, 0x4F95}, //181 #CJK UNIFIED IDEOGRAPH + {0x81F6, 0x4F96}, //182 #CJK UNIFIED IDEOGRAPH + {0x81F7, 0x4F98}, //183 #CJK UNIFIED IDEOGRAPH + {0x81F8, 0x4F99}, //184 #CJK UNIFIED IDEOGRAPH + {0x81F9, 0x4F9A}, //185 #CJK UNIFIED IDEOGRAPH + {0x81FA, 0x4F9C}, //186 #CJK UNIFIED IDEOGRAPH + {0x81FB, 0x4F9E}, //187 #CJK UNIFIED IDEOGRAPH + {0x81FC, 0x4F9F}, //188 #CJK UNIFIED IDEOGRAPH + {0x81FD, 0x4FA1}, //189 #CJK UNIFIED IDEOGRAPH + {0x81FE, 0x4FA2}, //190 #CJK UNIFIED IDEOGRAPH + {0x8240, 0x4FA4}, //191 #CJK UNIFIED IDEOGRAPH + {0x8241, 0x4FAB}, //192 #CJK UNIFIED IDEOGRAPH + {0x8242, 0x4FAD}, //193 #CJK UNIFIED IDEOGRAPH + {0x8243, 0x4FB0}, //194 #CJK UNIFIED IDEOGRAPH + {0x8244, 0x4FB1}, //195 #CJK UNIFIED IDEOGRAPH + {0x8245, 0x4FB2}, //196 #CJK UNIFIED IDEOGRAPH + {0x8246, 0x4FB3}, //197 #CJK UNIFIED IDEOGRAPH + {0x8247, 0x4FB4}, //198 #CJK UNIFIED IDEOGRAPH + {0x8248, 0x4FB6}, //199 #CJK UNIFIED IDEOGRAPH + {0x8249, 0x4FB7}, //200 #CJK UNIFIED IDEOGRAPH + {0x824A, 0x4FB8}, //201 #CJK UNIFIED IDEOGRAPH + {0x824B, 0x4FB9}, //202 #CJK UNIFIED IDEOGRAPH + {0x824C, 0x4FBA}, //203 #CJK UNIFIED IDEOGRAPH + {0x824D, 0x4FBB}, //204 #CJK UNIFIED IDEOGRAPH + {0x824E, 0x4FBC}, //205 #CJK UNIFIED IDEOGRAPH + {0x824F, 0x4FBD}, //206 #CJK UNIFIED IDEOGRAPH + {0x8250, 0x4FBE}, //207 #CJK UNIFIED IDEOGRAPH + {0x8251, 0x4FC0}, //208 #CJK UNIFIED IDEOGRAPH + {0x8252, 0x4FC1}, //209 #CJK UNIFIED IDEOGRAPH + {0x8253, 0x4FC2}, //210 #CJK UNIFIED IDEOGRAPH + {0x8254, 0x4FC6}, //211 #CJK UNIFIED IDEOGRAPH + {0x8255, 0x4FC7}, //212 #CJK UNIFIED IDEOGRAPH + {0x8256, 0x4FC8}, //213 #CJK UNIFIED IDEOGRAPH + {0x8257, 0x4FC9}, //214 #CJK UNIFIED IDEOGRAPH + {0x8258, 0x4FCB}, //215 #CJK UNIFIED IDEOGRAPH + {0x8259, 0x4FCC}, //216 #CJK UNIFIED IDEOGRAPH + {0x825A, 0x4FCD}, //217 #CJK UNIFIED IDEOGRAPH + {0x825B, 0x4FD2}, //218 #CJK UNIFIED IDEOGRAPH + {0x825C, 0x4FD3}, //219 #CJK UNIFIED IDEOGRAPH + {0x825D, 0x4FD4}, //220 #CJK UNIFIED IDEOGRAPH + {0x825E, 0x4FD5}, //221 #CJK UNIFIED IDEOGRAPH + {0x825F, 0x4FD6}, //222 #CJK UNIFIED IDEOGRAPH + {0x8260, 0x4FD9}, //223 #CJK UNIFIED IDEOGRAPH + {0x8261, 0x4FDB}, //224 #CJK UNIFIED IDEOGRAPH + {0x8262, 0x4FE0}, //225 #CJK UNIFIED IDEOGRAPH + {0x8263, 0x4FE2}, //226 #CJK UNIFIED IDEOGRAPH + {0x8264, 0x4FE4}, //227 #CJK UNIFIED IDEOGRAPH + {0x8265, 0x4FE5}, //228 #CJK UNIFIED IDEOGRAPH + {0x8266, 0x4FE7}, //229 #CJK UNIFIED IDEOGRAPH + {0x8267, 0x4FEB}, //230 #CJK UNIFIED IDEOGRAPH + {0x8268, 0x4FEC}, //231 #CJK UNIFIED IDEOGRAPH + {0x8269, 0x4FF0}, //232 #CJK UNIFIED IDEOGRAPH + {0x826A, 0x4FF2}, //233 #CJK UNIFIED IDEOGRAPH + {0x826B, 0x4FF4}, //234 #CJK UNIFIED IDEOGRAPH + {0x826C, 0x4FF5}, //235 #CJK UNIFIED IDEOGRAPH + {0x826D, 0x4FF6}, //236 #CJK UNIFIED IDEOGRAPH + {0x826E, 0x4FF7}, //237 #CJK UNIFIED IDEOGRAPH + {0x826F, 0x4FF9}, //238 #CJK UNIFIED IDEOGRAPH + {0x8270, 0x4FFB}, //239 #CJK UNIFIED IDEOGRAPH + {0x8271, 0x4FFC}, //240 #CJK UNIFIED IDEOGRAPH + {0x8272, 0x4FFD}, //241 #CJK UNIFIED IDEOGRAPH + {0x8273, 0x4FFF}, //242 #CJK UNIFIED IDEOGRAPH + {0x8274, 0x5000}, //243 #CJK UNIFIED IDEOGRAPH + {0x8275, 0x5001}, //244 #CJK UNIFIED IDEOGRAPH + {0x8276, 0x5002}, //245 #CJK UNIFIED IDEOGRAPH + {0x8277, 0x5003}, //246 #CJK UNIFIED IDEOGRAPH + {0x8278, 0x5004}, //247 #CJK UNIFIED IDEOGRAPH + {0x8279, 0x5005}, //248 #CJK UNIFIED IDEOGRAPH + {0x827A, 0x5006}, //249 #CJK UNIFIED IDEOGRAPH + {0x827B, 0x5007}, //250 #CJK UNIFIED IDEOGRAPH + {0x827C, 0x5008}, //251 #CJK UNIFIED IDEOGRAPH + {0x827D, 0x5009}, //252 #CJK UNIFIED IDEOGRAPH + {0x827E, 0x500A}, //253 #CJK UNIFIED IDEOGRAPH + {0x8280, 0x500B}, //254 #CJK UNIFIED IDEOGRAPH + {0x8281, 0x500E}, //255 #CJK UNIFIED IDEOGRAPH + {0x8282, 0x5010}, //256 #CJK UNIFIED IDEOGRAPH + {0x8283, 0x5011}, //257 #CJK UNIFIED IDEOGRAPH + {0x8284, 0x5013}, //258 #CJK UNIFIED IDEOGRAPH + {0x8285, 0x5015}, //259 #CJK UNIFIED IDEOGRAPH + {0x8286, 0x5016}, //260 #CJK UNIFIED IDEOGRAPH + {0x8287, 0x5017}, //261 #CJK UNIFIED IDEOGRAPH + {0x8288, 0x501B}, //262 #CJK UNIFIED IDEOGRAPH + {0x8289, 0x501D}, //263 #CJK UNIFIED IDEOGRAPH + {0x828A, 0x501E}, //264 #CJK UNIFIED IDEOGRAPH + {0x828B, 0x5020}, //265 #CJK UNIFIED IDEOGRAPH + {0x828C, 0x5022}, //266 #CJK UNIFIED IDEOGRAPH + {0x828D, 0x5023}, //267 #CJK UNIFIED IDEOGRAPH + {0x828E, 0x5024}, //268 #CJK UNIFIED IDEOGRAPH + {0x828F, 0x5027}, //269 #CJK UNIFIED IDEOGRAPH + {0x8290, 0x502B}, //270 #CJK UNIFIED IDEOGRAPH + {0x8291, 0x502F}, //271 #CJK UNIFIED IDEOGRAPH + {0x8292, 0x5030}, //272 #CJK UNIFIED IDEOGRAPH + {0x8293, 0x5031}, //273 #CJK UNIFIED IDEOGRAPH + {0x8294, 0x5032}, //274 #CJK UNIFIED IDEOGRAPH + {0x8295, 0x5033}, //275 #CJK UNIFIED IDEOGRAPH + {0x8296, 0x5034}, //276 #CJK UNIFIED IDEOGRAPH + {0x8297, 0x5035}, //277 #CJK UNIFIED IDEOGRAPH + {0x8298, 0x5036}, //278 #CJK UNIFIED IDEOGRAPH + {0x8299, 0x5037}, //279 #CJK UNIFIED IDEOGRAPH + {0x829A, 0x5038}, //280 #CJK UNIFIED IDEOGRAPH + {0x829B, 0x5039}, //281 #CJK UNIFIED IDEOGRAPH + {0x829C, 0x503B}, //282 #CJK UNIFIED IDEOGRAPH + {0x829D, 0x503D}, //283 #CJK UNIFIED IDEOGRAPH + {0x829E, 0x503F}, //284 #CJK UNIFIED IDEOGRAPH + {0x829F, 0x5040}, //285 #CJK UNIFIED IDEOGRAPH + {0x82A0, 0x5041}, //286 #CJK UNIFIED IDEOGRAPH + {0x82A1, 0x5042}, //287 #CJK UNIFIED IDEOGRAPH + {0x82A2, 0x5044}, //288 #CJK UNIFIED IDEOGRAPH + {0x82A3, 0x5045}, //289 #CJK UNIFIED IDEOGRAPH + {0x82A4, 0x5046}, //290 #CJK UNIFIED IDEOGRAPH + {0x82A5, 0x5049}, //291 #CJK UNIFIED IDEOGRAPH + {0x82A6, 0x504A}, //292 #CJK UNIFIED IDEOGRAPH + {0x82A7, 0x504B}, //293 #CJK UNIFIED IDEOGRAPH + {0x82A8, 0x504D}, //294 #CJK UNIFIED IDEOGRAPH + {0x82A9, 0x5050}, //295 #CJK UNIFIED IDEOGRAPH + {0x82AA, 0x5051}, //296 #CJK UNIFIED IDEOGRAPH + {0x82AB, 0x5052}, //297 #CJK UNIFIED IDEOGRAPH + {0x82AC, 0x5053}, //298 #CJK UNIFIED IDEOGRAPH + {0x82AD, 0x5054}, //299 #CJK UNIFIED IDEOGRAPH + {0x82AE, 0x5056}, //300 #CJK UNIFIED IDEOGRAPH + {0x82AF, 0x5057}, //301 #CJK UNIFIED IDEOGRAPH + {0x82B0, 0x5058}, //302 #CJK UNIFIED IDEOGRAPH + {0x82B1, 0x5059}, //303 #CJK UNIFIED IDEOGRAPH + {0x82B2, 0x505B}, //304 #CJK UNIFIED IDEOGRAPH + {0x82B3, 0x505D}, //305 #CJK UNIFIED IDEOGRAPH + {0x82B4, 0x505E}, //306 #CJK UNIFIED IDEOGRAPH + {0x82B5, 0x505F}, //307 #CJK UNIFIED IDEOGRAPH + {0x82B6, 0x5060}, //308 #CJK UNIFIED IDEOGRAPH + {0x82B7, 0x5061}, //309 #CJK UNIFIED IDEOGRAPH + {0x82B8, 0x5062}, //310 #CJK UNIFIED IDEOGRAPH + {0x82B9, 0x5063}, //311 #CJK UNIFIED IDEOGRAPH + {0x82BA, 0x5064}, //312 #CJK UNIFIED IDEOGRAPH + {0x82BB, 0x5066}, //313 #CJK UNIFIED IDEOGRAPH + {0x82BC, 0x5067}, //314 #CJK UNIFIED IDEOGRAPH + {0x82BD, 0x5068}, //315 #CJK UNIFIED IDEOGRAPH + {0x82BE, 0x5069}, //316 #CJK UNIFIED IDEOGRAPH + {0x82BF, 0x506A}, //317 #CJK UNIFIED IDEOGRAPH + {0x82C0, 0x506B}, //318 #CJK UNIFIED IDEOGRAPH + {0x82C1, 0x506D}, //319 #CJK UNIFIED IDEOGRAPH + {0x82C2, 0x506E}, //320 #CJK UNIFIED IDEOGRAPH + {0x82C3, 0x506F}, //321 #CJK UNIFIED IDEOGRAPH + {0x82C4, 0x5070}, //322 #CJK UNIFIED IDEOGRAPH + {0x82C5, 0x5071}, //323 #CJK UNIFIED IDEOGRAPH + {0x82C6, 0x5072}, //324 #CJK UNIFIED IDEOGRAPH + {0x82C7, 0x5073}, //325 #CJK UNIFIED IDEOGRAPH + {0x82C8, 0x5074}, //326 #CJK UNIFIED IDEOGRAPH + {0x82C9, 0x5075}, //327 #CJK UNIFIED IDEOGRAPH + {0x82CA, 0x5078}, //328 #CJK UNIFIED IDEOGRAPH + {0x82CB, 0x5079}, //329 #CJK UNIFIED IDEOGRAPH + {0x82CC, 0x507A}, //330 #CJK UNIFIED IDEOGRAPH + {0x82CD, 0x507C}, //331 #CJK UNIFIED IDEOGRAPH + {0x82CE, 0x507D}, //332 #CJK UNIFIED IDEOGRAPH + {0x82CF, 0x5081}, //333 #CJK UNIFIED IDEOGRAPH + {0x82D0, 0x5082}, //334 #CJK UNIFIED IDEOGRAPH + {0x82D1, 0x5083}, //335 #CJK UNIFIED IDEOGRAPH + {0x82D2, 0x5084}, //336 #CJK UNIFIED IDEOGRAPH + {0x82D3, 0x5086}, //337 #CJK UNIFIED IDEOGRAPH + {0x82D4, 0x5087}, //338 #CJK UNIFIED IDEOGRAPH + {0x82D5, 0x5089}, //339 #CJK UNIFIED IDEOGRAPH + {0x82D6, 0x508A}, //340 #CJK UNIFIED IDEOGRAPH + {0x82D7, 0x508B}, //341 #CJK UNIFIED IDEOGRAPH + {0x82D8, 0x508C}, //342 #CJK UNIFIED IDEOGRAPH + {0x82D9, 0x508E}, //343 #CJK UNIFIED IDEOGRAPH + {0x82DA, 0x508F}, //344 #CJK UNIFIED IDEOGRAPH + {0x82DB, 0x5090}, //345 #CJK UNIFIED IDEOGRAPH + {0x82DC, 0x5091}, //346 #CJK UNIFIED IDEOGRAPH + {0x82DD, 0x5092}, //347 #CJK UNIFIED IDEOGRAPH + {0x82DE, 0x5093}, //348 #CJK UNIFIED IDEOGRAPH + {0x82DF, 0x5094}, //349 #CJK UNIFIED IDEOGRAPH + {0x82E0, 0x5095}, //350 #CJK UNIFIED IDEOGRAPH + {0x82E1, 0x5096}, //351 #CJK UNIFIED IDEOGRAPH + {0x82E2, 0x5097}, //352 #CJK UNIFIED IDEOGRAPH + {0x82E3, 0x5098}, //353 #CJK UNIFIED IDEOGRAPH + {0x82E4, 0x5099}, //354 #CJK UNIFIED IDEOGRAPH + {0x82E5, 0x509A}, //355 #CJK UNIFIED IDEOGRAPH + {0x82E6, 0x509B}, //356 #CJK UNIFIED IDEOGRAPH + {0x82E7, 0x509C}, //357 #CJK UNIFIED IDEOGRAPH + {0x82E8, 0x509D}, //358 #CJK UNIFIED IDEOGRAPH + {0x82E9, 0x509E}, //359 #CJK UNIFIED IDEOGRAPH + {0x82EA, 0x509F}, //360 #CJK UNIFIED IDEOGRAPH + {0x82EB, 0x50A0}, //361 #CJK UNIFIED IDEOGRAPH + {0x82EC, 0x50A1}, //362 #CJK UNIFIED IDEOGRAPH + {0x82ED, 0x50A2}, //363 #CJK UNIFIED IDEOGRAPH + {0x82EE, 0x50A4}, //364 #CJK UNIFIED IDEOGRAPH + {0x82EF, 0x50A6}, //365 #CJK UNIFIED IDEOGRAPH + {0x82F0, 0x50AA}, //366 #CJK UNIFIED IDEOGRAPH + {0x82F1, 0x50AB}, //367 #CJK UNIFIED IDEOGRAPH + {0x82F2, 0x50AD}, //368 #CJK UNIFIED IDEOGRAPH + {0x82F3, 0x50AE}, //369 #CJK UNIFIED IDEOGRAPH + {0x82F4, 0x50AF}, //370 #CJK UNIFIED IDEOGRAPH + {0x82F5, 0x50B0}, //371 #CJK UNIFIED IDEOGRAPH + {0x82F6, 0x50B1}, //372 #CJK UNIFIED IDEOGRAPH + {0x82F7, 0x50B3}, //373 #CJK UNIFIED IDEOGRAPH + {0x82F8, 0x50B4}, //374 #CJK UNIFIED IDEOGRAPH + {0x82F9, 0x50B5}, //375 #CJK UNIFIED IDEOGRAPH + {0x82FA, 0x50B6}, //376 #CJK UNIFIED IDEOGRAPH + {0x82FB, 0x50B7}, //377 #CJK UNIFIED IDEOGRAPH + {0x82FC, 0x50B8}, //378 #CJK UNIFIED IDEOGRAPH + {0x82FD, 0x50B9}, //379 #CJK UNIFIED IDEOGRAPH + {0x82FE, 0x50BC}, //380 #CJK UNIFIED IDEOGRAPH + {0x8340, 0x50BD}, //381 #CJK UNIFIED IDEOGRAPH + {0x8341, 0x50BE}, //382 #CJK UNIFIED IDEOGRAPH + {0x8342, 0x50BF}, //383 #CJK UNIFIED IDEOGRAPH + {0x8343, 0x50C0}, //384 #CJK UNIFIED IDEOGRAPH + {0x8344, 0x50C1}, //385 #CJK UNIFIED IDEOGRAPH + {0x8345, 0x50C2}, //386 #CJK UNIFIED IDEOGRAPH + {0x8346, 0x50C3}, //387 #CJK UNIFIED IDEOGRAPH + {0x8347, 0x50C4}, //388 #CJK UNIFIED IDEOGRAPH + {0x8348, 0x50C5}, //389 #CJK UNIFIED IDEOGRAPH + {0x8349, 0x50C6}, //390 #CJK UNIFIED IDEOGRAPH + {0x834A, 0x50C7}, //391 #CJK UNIFIED IDEOGRAPH + {0x834B, 0x50C8}, //392 #CJK UNIFIED IDEOGRAPH + {0x834C, 0x50C9}, //393 #CJK UNIFIED IDEOGRAPH + {0x834D, 0x50CA}, //394 #CJK UNIFIED IDEOGRAPH + {0x834E, 0x50CB}, //395 #CJK UNIFIED IDEOGRAPH + {0x834F, 0x50CC}, //396 #CJK UNIFIED IDEOGRAPH + {0x8350, 0x50CD}, //397 #CJK UNIFIED IDEOGRAPH + {0x8351, 0x50CE}, //398 #CJK UNIFIED IDEOGRAPH + {0x8352, 0x50D0}, //399 #CJK UNIFIED IDEOGRAPH + {0x8353, 0x50D1}, //400 #CJK UNIFIED IDEOGRAPH + {0x8354, 0x50D2}, //401 #CJK UNIFIED IDEOGRAPH + {0x8355, 0x50D3}, //402 #CJK UNIFIED IDEOGRAPH + {0x8356, 0x50D4}, //403 #CJK UNIFIED IDEOGRAPH + {0x8357, 0x50D5}, //404 #CJK UNIFIED IDEOGRAPH + {0x8358, 0x50D7}, //405 #CJK UNIFIED IDEOGRAPH + {0x8359, 0x50D8}, //406 #CJK UNIFIED IDEOGRAPH + {0x835A, 0x50D9}, //407 #CJK UNIFIED IDEOGRAPH + {0x835B, 0x50DB}, //408 #CJK UNIFIED IDEOGRAPH + {0x835C, 0x50DC}, //409 #CJK UNIFIED IDEOGRAPH + {0x835D, 0x50DD}, //410 #CJK UNIFIED IDEOGRAPH + {0x835E, 0x50DE}, //411 #CJK UNIFIED IDEOGRAPH + {0x835F, 0x50DF}, //412 #CJK UNIFIED IDEOGRAPH + {0x8360, 0x50E0}, //413 #CJK UNIFIED IDEOGRAPH + {0x8361, 0x50E1}, //414 #CJK UNIFIED IDEOGRAPH + {0x8362, 0x50E2}, //415 #CJK UNIFIED IDEOGRAPH + {0x8363, 0x50E3}, //416 #CJK UNIFIED IDEOGRAPH + {0x8364, 0x50E4}, //417 #CJK UNIFIED IDEOGRAPH + {0x8365, 0x50E5}, //418 #CJK UNIFIED IDEOGRAPH + {0x8366, 0x50E8}, //419 #CJK UNIFIED IDEOGRAPH + {0x8367, 0x50E9}, //420 #CJK UNIFIED IDEOGRAPH + {0x8368, 0x50EA}, //421 #CJK UNIFIED IDEOGRAPH + {0x8369, 0x50EB}, //422 #CJK UNIFIED IDEOGRAPH + {0x836A, 0x50EF}, //423 #CJK UNIFIED IDEOGRAPH + {0x836B, 0x50F0}, //424 #CJK UNIFIED IDEOGRAPH + {0x836C, 0x50F1}, //425 #CJK UNIFIED IDEOGRAPH + {0x836D, 0x50F2}, //426 #CJK UNIFIED IDEOGRAPH + {0x836E, 0x50F4}, //427 #CJK UNIFIED IDEOGRAPH + {0x836F, 0x50F6}, //428 #CJK UNIFIED IDEOGRAPH + {0x8370, 0x50F7}, //429 #CJK UNIFIED IDEOGRAPH + {0x8371, 0x50F8}, //430 #CJK UNIFIED IDEOGRAPH + {0x8372, 0x50F9}, //431 #CJK UNIFIED IDEOGRAPH + {0x8373, 0x50FA}, //432 #CJK UNIFIED IDEOGRAPH + {0x8374, 0x50FC}, //433 #CJK UNIFIED IDEOGRAPH + {0x8375, 0x50FD}, //434 #CJK UNIFIED IDEOGRAPH + {0x8376, 0x50FE}, //435 #CJK UNIFIED IDEOGRAPH + {0x8377, 0x50FF}, //436 #CJK UNIFIED IDEOGRAPH + {0x8378, 0x5100}, //437 #CJK UNIFIED IDEOGRAPH + {0x8379, 0x5101}, //438 #CJK UNIFIED IDEOGRAPH + {0x837A, 0x5102}, //439 #CJK UNIFIED IDEOGRAPH + {0x837B, 0x5103}, //440 #CJK UNIFIED IDEOGRAPH + {0x837C, 0x5104}, //441 #CJK UNIFIED IDEOGRAPH + {0x837D, 0x5105}, //442 #CJK UNIFIED IDEOGRAPH + {0x837E, 0x5108}, //443 #CJK UNIFIED IDEOGRAPH + {0x8380, 0x5109}, //444 #CJK UNIFIED IDEOGRAPH + {0x8381, 0x510A}, //445 #CJK UNIFIED IDEOGRAPH + {0x8382, 0x510C}, //446 #CJK UNIFIED IDEOGRAPH + {0x8383, 0x510D}, //447 #CJK UNIFIED IDEOGRAPH + {0x8384, 0x510E}, //448 #CJK UNIFIED IDEOGRAPH + {0x8385, 0x510F}, //449 #CJK UNIFIED IDEOGRAPH + {0x8386, 0x5110}, //450 #CJK UNIFIED IDEOGRAPH + {0x8387, 0x5111}, //451 #CJK UNIFIED IDEOGRAPH + {0x8388, 0x5113}, //452 #CJK UNIFIED IDEOGRAPH + {0x8389, 0x5114}, //453 #CJK UNIFIED IDEOGRAPH + {0x838A, 0x5115}, //454 #CJK UNIFIED IDEOGRAPH + {0x838B, 0x5116}, //455 #CJK UNIFIED IDEOGRAPH + {0x838C, 0x5117}, //456 #CJK UNIFIED IDEOGRAPH + {0x838D, 0x5118}, //457 #CJK UNIFIED IDEOGRAPH + {0x838E, 0x5119}, //458 #CJK UNIFIED IDEOGRAPH + {0x838F, 0x511A}, //459 #CJK UNIFIED IDEOGRAPH + {0x8390, 0x511B}, //460 #CJK UNIFIED IDEOGRAPH + {0x8391, 0x511C}, //461 #CJK UNIFIED IDEOGRAPH + {0x8392, 0x511D}, //462 #CJK UNIFIED IDEOGRAPH + {0x8393, 0x511E}, //463 #CJK UNIFIED IDEOGRAPH + {0x8394, 0x511F}, //464 #CJK UNIFIED IDEOGRAPH + {0x8395, 0x5120}, //465 #CJK UNIFIED IDEOGRAPH + {0x8396, 0x5122}, //466 #CJK UNIFIED IDEOGRAPH + {0x8397, 0x5123}, //467 #CJK UNIFIED IDEOGRAPH + {0x8398, 0x5124}, //468 #CJK UNIFIED IDEOGRAPH + {0x8399, 0x5125}, //469 #CJK UNIFIED IDEOGRAPH + {0x839A, 0x5126}, //470 #CJK UNIFIED IDEOGRAPH + {0x839B, 0x5127}, //471 #CJK UNIFIED IDEOGRAPH + {0x839C, 0x5128}, //472 #CJK UNIFIED IDEOGRAPH + {0x839D, 0x5129}, //473 #CJK UNIFIED IDEOGRAPH + {0x839E, 0x512A}, //474 #CJK UNIFIED IDEOGRAPH + {0x839F, 0x512B}, //475 #CJK UNIFIED IDEOGRAPH + {0x83A0, 0x512C}, //476 #CJK UNIFIED IDEOGRAPH + {0x83A1, 0x512D}, //477 #CJK UNIFIED IDEOGRAPH + {0x83A2, 0x512E}, //478 #CJK UNIFIED IDEOGRAPH + {0x83A3, 0x512F}, //479 #CJK UNIFIED IDEOGRAPH + {0x83A4, 0x5130}, //480 #CJK UNIFIED IDEOGRAPH + {0x83A5, 0x5131}, //481 #CJK UNIFIED IDEOGRAPH + {0x83A6, 0x5132}, //482 #CJK UNIFIED IDEOGRAPH + {0x83A7, 0x5133}, //483 #CJK UNIFIED IDEOGRAPH + {0x83A8, 0x5134}, //484 #CJK UNIFIED IDEOGRAPH + {0x83A9, 0x5135}, //485 #CJK UNIFIED IDEOGRAPH + {0x83AA, 0x5136}, //486 #CJK UNIFIED IDEOGRAPH + {0x83AB, 0x5137}, //487 #CJK UNIFIED IDEOGRAPH + {0x83AC, 0x5138}, //488 #CJK UNIFIED IDEOGRAPH + {0x83AD, 0x5139}, //489 #CJK UNIFIED IDEOGRAPH + {0x83AE, 0x513A}, //490 #CJK UNIFIED IDEOGRAPH + {0x83AF, 0x513B}, //491 #CJK UNIFIED IDEOGRAPH + {0x83B0, 0x513C}, //492 #CJK UNIFIED IDEOGRAPH + {0x83B1, 0x513D}, //493 #CJK UNIFIED IDEOGRAPH + {0x83B2, 0x513E}, //494 #CJK UNIFIED IDEOGRAPH + {0x83B3, 0x5142}, //495 #CJK UNIFIED IDEOGRAPH + {0x83B4, 0x5147}, //496 #CJK UNIFIED IDEOGRAPH + {0x83B5, 0x514A}, //497 #CJK UNIFIED IDEOGRAPH + {0x83B6, 0x514C}, //498 #CJK UNIFIED IDEOGRAPH + {0x83B7, 0x514E}, //499 #CJK UNIFIED IDEOGRAPH + {0x83B8, 0x514F}, //500 #CJK UNIFIED IDEOGRAPH + {0x83B9, 0x5150}, //501 #CJK UNIFIED IDEOGRAPH + {0x83BA, 0x5152}, //502 #CJK UNIFIED IDEOGRAPH + {0x83BB, 0x5153}, //503 #CJK UNIFIED IDEOGRAPH + {0x83BC, 0x5157}, //504 #CJK UNIFIED IDEOGRAPH + {0x83BD, 0x5158}, //505 #CJK UNIFIED IDEOGRAPH + {0x83BE, 0x5159}, //506 #CJK UNIFIED IDEOGRAPH + {0x83BF, 0x515B}, //507 #CJK UNIFIED IDEOGRAPH + {0x83C0, 0x515D}, //508 #CJK UNIFIED IDEOGRAPH + {0x83C1, 0x515E}, //509 #CJK UNIFIED IDEOGRAPH + {0x83C2, 0x515F}, //510 #CJK UNIFIED IDEOGRAPH + {0x83C3, 0x5160}, //511 #CJK UNIFIED IDEOGRAPH + {0x83C4, 0x5161}, //512 #CJK UNIFIED IDEOGRAPH + {0x83C5, 0x5163}, //513 #CJK UNIFIED IDEOGRAPH + {0x83C6, 0x5164}, //514 #CJK UNIFIED IDEOGRAPH + {0x83C7, 0x5166}, //515 #CJK UNIFIED IDEOGRAPH + {0x83C8, 0x5167}, //516 #CJK UNIFIED IDEOGRAPH + {0x83C9, 0x5169}, //517 #CJK UNIFIED IDEOGRAPH + {0x83CA, 0x516A}, //518 #CJK UNIFIED IDEOGRAPH + {0x83CB, 0x516F}, //519 #CJK UNIFIED IDEOGRAPH + {0x83CC, 0x5172}, //520 #CJK UNIFIED IDEOGRAPH + {0x83CD, 0x517A}, //521 #CJK UNIFIED IDEOGRAPH + {0x83CE, 0x517E}, //522 #CJK UNIFIED IDEOGRAPH + {0x83CF, 0x517F}, //523 #CJK UNIFIED IDEOGRAPH + {0x83D0, 0x5183}, //524 #CJK UNIFIED IDEOGRAPH + {0x83D1, 0x5184}, //525 #CJK UNIFIED IDEOGRAPH + {0x83D2, 0x5186}, //526 #CJK UNIFIED IDEOGRAPH + {0x83D3, 0x5187}, //527 #CJK UNIFIED IDEOGRAPH + {0x83D4, 0x518A}, //528 #CJK UNIFIED IDEOGRAPH + {0x83D5, 0x518B}, //529 #CJK UNIFIED IDEOGRAPH + {0x83D6, 0x518E}, //530 #CJK UNIFIED IDEOGRAPH + {0x83D7, 0x518F}, //531 #CJK UNIFIED IDEOGRAPH + {0x83D8, 0x5190}, //532 #CJK UNIFIED IDEOGRAPH + {0x83D9, 0x5191}, //533 #CJK UNIFIED IDEOGRAPH + {0x83DA, 0x5193}, //534 #CJK UNIFIED IDEOGRAPH + {0x83DB, 0x5194}, //535 #CJK UNIFIED IDEOGRAPH + {0x83DC, 0x5198}, //536 #CJK UNIFIED IDEOGRAPH + {0x83DD, 0x519A}, //537 #CJK UNIFIED IDEOGRAPH + {0x83DE, 0x519D}, //538 #CJK UNIFIED IDEOGRAPH + {0x83DF, 0x519E}, //539 #CJK UNIFIED IDEOGRAPH + {0x83E0, 0x519F}, //540 #CJK UNIFIED IDEOGRAPH + {0x83E1, 0x51A1}, //541 #CJK UNIFIED IDEOGRAPH + {0x83E2, 0x51A3}, //542 #CJK UNIFIED IDEOGRAPH + {0x83E3, 0x51A6}, //543 #CJK UNIFIED IDEOGRAPH + {0x83E4, 0x51A7}, //544 #CJK UNIFIED IDEOGRAPH + {0x83E5, 0x51A8}, //545 #CJK UNIFIED IDEOGRAPH + {0x83E6, 0x51A9}, //546 #CJK UNIFIED IDEOGRAPH + {0x83E7, 0x51AA}, //547 #CJK UNIFIED IDEOGRAPH + {0x83E8, 0x51AD}, //548 #CJK UNIFIED IDEOGRAPH + {0x83E9, 0x51AE}, //549 #CJK UNIFIED IDEOGRAPH + {0x83EA, 0x51B4}, //550 #CJK UNIFIED IDEOGRAPH + {0x83EB, 0x51B8}, //551 #CJK UNIFIED IDEOGRAPH + {0x83EC, 0x51B9}, //552 #CJK UNIFIED IDEOGRAPH + {0x83ED, 0x51BA}, //553 #CJK UNIFIED IDEOGRAPH + {0x83EE, 0x51BE}, //554 #CJK UNIFIED IDEOGRAPH + {0x83EF, 0x51BF}, //555 #CJK UNIFIED IDEOGRAPH + {0x83F0, 0x51C1}, //556 #CJK UNIFIED IDEOGRAPH + {0x83F1, 0x51C2}, //557 #CJK UNIFIED IDEOGRAPH + {0x83F2, 0x51C3}, //558 #CJK UNIFIED IDEOGRAPH + {0x83F3, 0x51C5}, //559 #CJK UNIFIED IDEOGRAPH + {0x83F4, 0x51C8}, //560 #CJK UNIFIED IDEOGRAPH + {0x83F5, 0x51CA}, //561 #CJK UNIFIED IDEOGRAPH + {0x83F6, 0x51CD}, //562 #CJK UNIFIED IDEOGRAPH + {0x83F7, 0x51CE}, //563 #CJK UNIFIED IDEOGRAPH + {0x83F8, 0x51D0}, //564 #CJK UNIFIED IDEOGRAPH + {0x83F9, 0x51D2}, //565 #CJK UNIFIED IDEOGRAPH + {0x83FA, 0x51D3}, //566 #CJK UNIFIED IDEOGRAPH + {0x83FB, 0x51D4}, //567 #CJK UNIFIED IDEOGRAPH + {0x83FC, 0x51D5}, //568 #CJK UNIFIED IDEOGRAPH + {0x83FD, 0x51D6}, //569 #CJK UNIFIED IDEOGRAPH + {0x83FE, 0x51D7}, //570 #CJK UNIFIED IDEOGRAPH + {0x8440, 0x51D8}, //571 #CJK UNIFIED IDEOGRAPH + {0x8441, 0x51D9}, //572 #CJK UNIFIED IDEOGRAPH + {0x8442, 0x51DA}, //573 #CJK UNIFIED IDEOGRAPH + {0x8443, 0x51DC}, //574 #CJK UNIFIED IDEOGRAPH + {0x8444, 0x51DE}, //575 #CJK UNIFIED IDEOGRAPH + {0x8445, 0x51DF}, //576 #CJK UNIFIED IDEOGRAPH + {0x8446, 0x51E2}, //577 #CJK UNIFIED IDEOGRAPH + {0x8447, 0x51E3}, //578 #CJK UNIFIED IDEOGRAPH + {0x8448, 0x51E5}, //579 #CJK UNIFIED IDEOGRAPH + {0x8449, 0x51E6}, //580 #CJK UNIFIED IDEOGRAPH + {0x844A, 0x51E7}, //581 #CJK UNIFIED IDEOGRAPH + {0x844B, 0x51E8}, //582 #CJK UNIFIED IDEOGRAPH + {0x844C, 0x51E9}, //583 #CJK UNIFIED IDEOGRAPH + {0x844D, 0x51EA}, //584 #CJK UNIFIED IDEOGRAPH + {0x844E, 0x51EC}, //585 #CJK UNIFIED IDEOGRAPH + {0x844F, 0x51EE}, //586 #CJK UNIFIED IDEOGRAPH + {0x8450, 0x51F1}, //587 #CJK UNIFIED IDEOGRAPH + {0x8451, 0x51F2}, //588 #CJK UNIFIED IDEOGRAPH + {0x8452, 0x51F4}, //589 #CJK UNIFIED IDEOGRAPH + {0x8453, 0x51F7}, //590 #CJK UNIFIED IDEOGRAPH + {0x8454, 0x51FE}, //591 #CJK UNIFIED IDEOGRAPH + {0x8455, 0x5204}, //592 #CJK UNIFIED IDEOGRAPH + {0x8456, 0x5205}, //593 #CJK UNIFIED IDEOGRAPH + {0x8457, 0x5209}, //594 #CJK UNIFIED IDEOGRAPH + {0x8458, 0x520B}, //595 #CJK UNIFIED IDEOGRAPH + {0x8459, 0x520C}, //596 #CJK UNIFIED IDEOGRAPH + {0x845A, 0x520F}, //597 #CJK UNIFIED IDEOGRAPH + {0x845B, 0x5210}, //598 #CJK UNIFIED IDEOGRAPH + {0x845C, 0x5213}, //599 #CJK UNIFIED IDEOGRAPH + {0x845D, 0x5214}, //600 #CJK UNIFIED IDEOGRAPH + {0x845E, 0x5215}, //601 #CJK UNIFIED IDEOGRAPH + {0x845F, 0x521C}, //602 #CJK UNIFIED IDEOGRAPH + {0x8460, 0x521E}, //603 #CJK UNIFIED IDEOGRAPH + {0x8461, 0x521F}, //604 #CJK UNIFIED IDEOGRAPH + {0x8462, 0x5221}, //605 #CJK UNIFIED IDEOGRAPH + {0x8463, 0x5222}, //606 #CJK UNIFIED IDEOGRAPH + {0x8464, 0x5223}, //607 #CJK UNIFIED IDEOGRAPH + {0x8465, 0x5225}, //608 #CJK UNIFIED IDEOGRAPH + {0x8466, 0x5226}, //609 #CJK UNIFIED IDEOGRAPH + {0x8467, 0x5227}, //610 #CJK UNIFIED IDEOGRAPH + {0x8468, 0x522A}, //611 #CJK UNIFIED IDEOGRAPH + {0x8469, 0x522C}, //612 #CJK UNIFIED IDEOGRAPH + {0x846A, 0x522F}, //613 #CJK UNIFIED IDEOGRAPH + {0x846B, 0x5231}, //614 #CJK UNIFIED IDEOGRAPH + {0x846C, 0x5232}, //615 #CJK UNIFIED IDEOGRAPH + {0x846D, 0x5234}, //616 #CJK UNIFIED IDEOGRAPH + {0x846E, 0x5235}, //617 #CJK UNIFIED IDEOGRAPH + {0x846F, 0x523C}, //618 #CJK UNIFIED IDEOGRAPH + {0x8470, 0x523E}, //619 #CJK UNIFIED IDEOGRAPH + {0x8471, 0x5244}, //620 #CJK UNIFIED IDEOGRAPH + {0x8472, 0x5245}, //621 #CJK UNIFIED IDEOGRAPH + {0x8473, 0x5246}, //622 #CJK UNIFIED IDEOGRAPH + {0x8474, 0x5247}, //623 #CJK UNIFIED IDEOGRAPH + {0x8475, 0x5248}, //624 #CJK UNIFIED IDEOGRAPH + {0x8476, 0x5249}, //625 #CJK UNIFIED IDEOGRAPH + {0x8477, 0x524B}, //626 #CJK UNIFIED IDEOGRAPH + {0x8478, 0x524E}, //627 #CJK UNIFIED IDEOGRAPH + {0x8479, 0x524F}, //628 #CJK UNIFIED IDEOGRAPH + {0x847A, 0x5252}, //629 #CJK UNIFIED IDEOGRAPH + {0x847B, 0x5253}, //630 #CJK UNIFIED IDEOGRAPH + {0x847C, 0x5255}, //631 #CJK UNIFIED IDEOGRAPH + {0x847D, 0x5257}, //632 #CJK UNIFIED IDEOGRAPH + {0x847E, 0x5258}, //633 #CJK UNIFIED IDEOGRAPH + {0x8480, 0x5259}, //634 #CJK UNIFIED IDEOGRAPH + {0x8481, 0x525A}, //635 #CJK UNIFIED IDEOGRAPH + {0x8482, 0x525B}, //636 #CJK UNIFIED IDEOGRAPH + {0x8483, 0x525D}, //637 #CJK UNIFIED IDEOGRAPH + {0x8484, 0x525F}, //638 #CJK UNIFIED IDEOGRAPH + {0x8485, 0x5260}, //639 #CJK UNIFIED IDEOGRAPH + {0x8486, 0x5262}, //640 #CJK UNIFIED IDEOGRAPH + {0x8487, 0x5263}, //641 #CJK UNIFIED IDEOGRAPH + {0x8488, 0x5264}, //642 #CJK UNIFIED IDEOGRAPH + {0x8489, 0x5266}, //643 #CJK UNIFIED IDEOGRAPH + {0x848A, 0x5268}, //644 #CJK UNIFIED IDEOGRAPH + {0x848B, 0x526B}, //645 #CJK UNIFIED IDEOGRAPH + {0x848C, 0x526C}, //646 #CJK UNIFIED IDEOGRAPH + {0x848D, 0x526D}, //647 #CJK UNIFIED IDEOGRAPH + {0x848E, 0x526E}, //648 #CJK UNIFIED IDEOGRAPH + {0x848F, 0x5270}, //649 #CJK UNIFIED IDEOGRAPH + {0x8490, 0x5271}, //650 #CJK UNIFIED IDEOGRAPH + {0x8491, 0x5273}, //651 #CJK UNIFIED IDEOGRAPH + {0x8492, 0x5274}, //652 #CJK UNIFIED IDEOGRAPH + {0x8493, 0x5275}, //653 #CJK UNIFIED IDEOGRAPH + {0x8494, 0x5276}, //654 #CJK UNIFIED IDEOGRAPH + {0x8495, 0x5277}, //655 #CJK UNIFIED IDEOGRAPH + {0x8496, 0x5278}, //656 #CJK UNIFIED IDEOGRAPH + {0x8497, 0x5279}, //657 #CJK UNIFIED IDEOGRAPH + {0x8498, 0x527A}, //658 #CJK UNIFIED IDEOGRAPH + {0x8499, 0x527B}, //659 #CJK UNIFIED IDEOGRAPH + {0x849A, 0x527C}, //660 #CJK UNIFIED IDEOGRAPH + {0x849B, 0x527E}, //661 #CJK UNIFIED IDEOGRAPH + {0x849C, 0x5280}, //662 #CJK UNIFIED IDEOGRAPH + {0x849D, 0x5283}, //663 #CJK UNIFIED IDEOGRAPH + {0x849E, 0x5284}, //664 #CJK UNIFIED IDEOGRAPH + {0x849F, 0x5285}, //665 #CJK UNIFIED IDEOGRAPH + {0x84A0, 0x5286}, //666 #CJK UNIFIED IDEOGRAPH + {0x84A1, 0x5287}, //667 #CJK UNIFIED IDEOGRAPH + {0x84A2, 0x5289}, //668 #CJK UNIFIED IDEOGRAPH + {0x84A3, 0x528A}, //669 #CJK UNIFIED IDEOGRAPH + {0x84A4, 0x528B}, //670 #CJK UNIFIED IDEOGRAPH + {0x84A5, 0x528C}, //671 #CJK UNIFIED IDEOGRAPH + {0x84A6, 0x528D}, //672 #CJK UNIFIED IDEOGRAPH + {0x84A7, 0x528E}, //673 #CJK UNIFIED IDEOGRAPH + {0x84A8, 0x528F}, //674 #CJK UNIFIED IDEOGRAPH + {0x84A9, 0x5291}, //675 #CJK UNIFIED IDEOGRAPH + {0x84AA, 0x5292}, //676 #CJK UNIFIED IDEOGRAPH + {0x84AB, 0x5294}, //677 #CJK UNIFIED IDEOGRAPH + {0x84AC, 0x5295}, //678 #CJK UNIFIED IDEOGRAPH + {0x84AD, 0x5296}, //679 #CJK UNIFIED IDEOGRAPH + {0x84AE, 0x5297}, //680 #CJK UNIFIED IDEOGRAPH + {0x84AF, 0x5298}, //681 #CJK UNIFIED IDEOGRAPH + {0x84B0, 0x5299}, //682 #CJK UNIFIED IDEOGRAPH + {0x84B1, 0x529A}, //683 #CJK UNIFIED IDEOGRAPH + {0x84B2, 0x529C}, //684 #CJK UNIFIED IDEOGRAPH + {0x84B3, 0x52A4}, //685 #CJK UNIFIED IDEOGRAPH + {0x84B4, 0x52A5}, //686 #CJK UNIFIED IDEOGRAPH + {0x84B5, 0x52A6}, //687 #CJK UNIFIED IDEOGRAPH + {0x84B6, 0x52A7}, //688 #CJK UNIFIED IDEOGRAPH + {0x84B7, 0x52AE}, //689 #CJK UNIFIED IDEOGRAPH + {0x84B8, 0x52AF}, //690 #CJK UNIFIED IDEOGRAPH + {0x84B9, 0x52B0}, //691 #CJK UNIFIED IDEOGRAPH + {0x84BA, 0x52B4}, //692 #CJK UNIFIED IDEOGRAPH + {0x84BB, 0x52B5}, //693 #CJK UNIFIED IDEOGRAPH + {0x84BC, 0x52B6}, //694 #CJK UNIFIED IDEOGRAPH + {0x84BD, 0x52B7}, //695 #CJK UNIFIED IDEOGRAPH + {0x84BE, 0x52B8}, //696 #CJK UNIFIED IDEOGRAPH + {0x84BF, 0x52B9}, //697 #CJK UNIFIED IDEOGRAPH + {0x84C0, 0x52BA}, //698 #CJK UNIFIED IDEOGRAPH + {0x84C1, 0x52BB}, //699 #CJK UNIFIED IDEOGRAPH + {0x84C2, 0x52BC}, //700 #CJK UNIFIED IDEOGRAPH + {0x84C3, 0x52BD}, //701 #CJK UNIFIED IDEOGRAPH + {0x84C4, 0x52C0}, //702 #CJK UNIFIED IDEOGRAPH + {0x84C5, 0x52C1}, //703 #CJK UNIFIED IDEOGRAPH + {0x84C6, 0x52C2}, //704 #CJK UNIFIED IDEOGRAPH + {0x84C7, 0x52C4}, //705 #CJK UNIFIED IDEOGRAPH + {0x84C8, 0x52C5}, //706 #CJK UNIFIED IDEOGRAPH + {0x84C9, 0x52C6}, //707 #CJK UNIFIED IDEOGRAPH + {0x84CA, 0x52C8}, //708 #CJK UNIFIED IDEOGRAPH + {0x84CB, 0x52CA}, //709 #CJK UNIFIED IDEOGRAPH + {0x84CC, 0x52CC}, //710 #CJK UNIFIED IDEOGRAPH + {0x84CD, 0x52CD}, //711 #CJK UNIFIED IDEOGRAPH + {0x84CE, 0x52CE}, //712 #CJK UNIFIED IDEOGRAPH + {0x84CF, 0x52CF}, //713 #CJK UNIFIED IDEOGRAPH + {0x84D0, 0x52D1}, //714 #CJK UNIFIED IDEOGRAPH + {0x84D1, 0x52D3}, //715 #CJK UNIFIED IDEOGRAPH + {0x84D2, 0x52D4}, //716 #CJK UNIFIED IDEOGRAPH + {0x84D3, 0x52D5}, //717 #CJK UNIFIED IDEOGRAPH + {0x84D4, 0x52D7}, //718 #CJK UNIFIED IDEOGRAPH + {0x84D5, 0x52D9}, //719 #CJK UNIFIED IDEOGRAPH + {0x84D6, 0x52DA}, //720 #CJK UNIFIED IDEOGRAPH + {0x84D7, 0x52DB}, //721 #CJK UNIFIED IDEOGRAPH + {0x84D8, 0x52DC}, //722 #CJK UNIFIED IDEOGRAPH + {0x84D9, 0x52DD}, //723 #CJK UNIFIED IDEOGRAPH + {0x84DA, 0x52DE}, //724 #CJK UNIFIED IDEOGRAPH + {0x84DB, 0x52E0}, //725 #CJK UNIFIED IDEOGRAPH + {0x84DC, 0x52E1}, //726 #CJK UNIFIED IDEOGRAPH + {0x84DD, 0x52E2}, //727 #CJK UNIFIED IDEOGRAPH + {0x84DE, 0x52E3}, //728 #CJK UNIFIED IDEOGRAPH + {0x84DF, 0x52E5}, //729 #CJK UNIFIED IDEOGRAPH + {0x84E0, 0x52E6}, //730 #CJK UNIFIED IDEOGRAPH + {0x84E1, 0x52E7}, //731 #CJK UNIFIED IDEOGRAPH + {0x84E2, 0x52E8}, //732 #CJK UNIFIED IDEOGRAPH + {0x84E3, 0x52E9}, //733 #CJK UNIFIED IDEOGRAPH + {0x84E4, 0x52EA}, //734 #CJK UNIFIED IDEOGRAPH + {0x84E5, 0x52EB}, //735 #CJK UNIFIED IDEOGRAPH + {0x84E6, 0x52EC}, //736 #CJK UNIFIED IDEOGRAPH + {0x84E7, 0x52ED}, //737 #CJK UNIFIED IDEOGRAPH + {0x84E8, 0x52EE}, //738 #CJK UNIFIED IDEOGRAPH + {0x84E9, 0x52EF}, //739 #CJK UNIFIED IDEOGRAPH + {0x84EA, 0x52F1}, //740 #CJK UNIFIED IDEOGRAPH + {0x84EB, 0x52F2}, //741 #CJK UNIFIED IDEOGRAPH + {0x84EC, 0x52F3}, //742 #CJK UNIFIED IDEOGRAPH + {0x84ED, 0x52F4}, //743 #CJK UNIFIED IDEOGRAPH + {0x84EE, 0x52F5}, //744 #CJK UNIFIED IDEOGRAPH + {0x84EF, 0x52F6}, //745 #CJK UNIFIED IDEOGRAPH + {0x84F0, 0x52F7}, //746 #CJK UNIFIED IDEOGRAPH + {0x84F1, 0x52F8}, //747 #CJK UNIFIED IDEOGRAPH + {0x84F2, 0x52FB}, //748 #CJK UNIFIED IDEOGRAPH + {0x84F3, 0x52FC}, //749 #CJK UNIFIED IDEOGRAPH + {0x84F4, 0x52FD}, //750 #CJK UNIFIED IDEOGRAPH + {0x84F5, 0x5301}, //751 #CJK UNIFIED IDEOGRAPH + {0x84F6, 0x5302}, //752 #CJK UNIFIED IDEOGRAPH + {0x84F7, 0x5303}, //753 #CJK UNIFIED IDEOGRAPH + {0x84F8, 0x5304}, //754 #CJK UNIFIED IDEOGRAPH + {0x84F9, 0x5307}, //755 #CJK UNIFIED IDEOGRAPH + {0x84FA, 0x5309}, //756 #CJK UNIFIED IDEOGRAPH + {0x84FB, 0x530A}, //757 #CJK UNIFIED IDEOGRAPH + {0x84FC, 0x530B}, //758 #CJK UNIFIED IDEOGRAPH + {0x84FD, 0x530C}, //759 #CJK UNIFIED IDEOGRAPH + {0x84FE, 0x530E}, //760 #CJK UNIFIED IDEOGRAPH + {0x8540, 0x5311}, //761 #CJK UNIFIED IDEOGRAPH + {0x8541, 0x5312}, //762 #CJK UNIFIED IDEOGRAPH + {0x8542, 0x5313}, //763 #CJK UNIFIED IDEOGRAPH + {0x8543, 0x5314}, //764 #CJK UNIFIED IDEOGRAPH + {0x8544, 0x5318}, //765 #CJK UNIFIED IDEOGRAPH + {0x8545, 0x531B}, //766 #CJK UNIFIED IDEOGRAPH + {0x8546, 0x531C}, //767 #CJK UNIFIED IDEOGRAPH + {0x8547, 0x531E}, //768 #CJK UNIFIED IDEOGRAPH + {0x8548, 0x531F}, //769 #CJK UNIFIED IDEOGRAPH + {0x8549, 0x5322}, //770 #CJK UNIFIED IDEOGRAPH + {0x854A, 0x5324}, //771 #CJK UNIFIED IDEOGRAPH + {0x854B, 0x5325}, //772 #CJK UNIFIED IDEOGRAPH + {0x854C, 0x5327}, //773 #CJK UNIFIED IDEOGRAPH + {0x854D, 0x5328}, //774 #CJK UNIFIED IDEOGRAPH + {0x854E, 0x5329}, //775 #CJK UNIFIED IDEOGRAPH + {0x854F, 0x532B}, //776 #CJK UNIFIED IDEOGRAPH + {0x8550, 0x532C}, //777 #CJK UNIFIED IDEOGRAPH + {0x8551, 0x532D}, //778 #CJK UNIFIED IDEOGRAPH + {0x8552, 0x532F}, //779 #CJK UNIFIED IDEOGRAPH + {0x8553, 0x5330}, //780 #CJK UNIFIED IDEOGRAPH + {0x8554, 0x5331}, //781 #CJK UNIFIED IDEOGRAPH + {0x8555, 0x5332}, //782 #CJK UNIFIED IDEOGRAPH + {0x8556, 0x5333}, //783 #CJK UNIFIED IDEOGRAPH + {0x8557, 0x5334}, //784 #CJK UNIFIED IDEOGRAPH + {0x8558, 0x5335}, //785 #CJK UNIFIED IDEOGRAPH + {0x8559, 0x5336}, //786 #CJK UNIFIED IDEOGRAPH + {0x855A, 0x5337}, //787 #CJK UNIFIED IDEOGRAPH + {0x855B, 0x5338}, //788 #CJK UNIFIED IDEOGRAPH + {0x855C, 0x533C}, //789 #CJK UNIFIED IDEOGRAPH + {0x855D, 0x533D}, //790 #CJK UNIFIED IDEOGRAPH + {0x855E, 0x5340}, //791 #CJK UNIFIED IDEOGRAPH + {0x855F, 0x5342}, //792 #CJK UNIFIED IDEOGRAPH + {0x8560, 0x5344}, //793 #CJK UNIFIED IDEOGRAPH + {0x8561, 0x5346}, //794 #CJK UNIFIED IDEOGRAPH + {0x8562, 0x534B}, //795 #CJK UNIFIED IDEOGRAPH + {0x8563, 0x534C}, //796 #CJK UNIFIED IDEOGRAPH + {0x8564, 0x534D}, //797 #CJK UNIFIED IDEOGRAPH + {0x8565, 0x5350}, //798 #CJK UNIFIED IDEOGRAPH + {0x8566, 0x5354}, //799 #CJK UNIFIED IDEOGRAPH + {0x8567, 0x5358}, //800 #CJK UNIFIED IDEOGRAPH + {0x8568, 0x5359}, //801 #CJK UNIFIED IDEOGRAPH + {0x8569, 0x535B}, //802 #CJK UNIFIED IDEOGRAPH + {0x856A, 0x535D}, //803 #CJK UNIFIED IDEOGRAPH + {0x856B, 0x5365}, //804 #CJK UNIFIED IDEOGRAPH + {0x856C, 0x5368}, //805 #CJK UNIFIED IDEOGRAPH + {0x856D, 0x536A}, //806 #CJK UNIFIED IDEOGRAPH + {0x856E, 0x536C}, //807 #CJK UNIFIED IDEOGRAPH + {0x856F, 0x536D}, //808 #CJK UNIFIED IDEOGRAPH + {0x8570, 0x5372}, //809 #CJK UNIFIED IDEOGRAPH + {0x8571, 0x5376}, //810 #CJK UNIFIED IDEOGRAPH + {0x8572, 0x5379}, //811 #CJK UNIFIED IDEOGRAPH + {0x8573, 0x537B}, //812 #CJK UNIFIED IDEOGRAPH + {0x8574, 0x537C}, //813 #CJK UNIFIED IDEOGRAPH + {0x8575, 0x537D}, //814 #CJK UNIFIED IDEOGRAPH + {0x8576, 0x537E}, //815 #CJK UNIFIED IDEOGRAPH + {0x8577, 0x5380}, //816 #CJK UNIFIED IDEOGRAPH + {0x8578, 0x5381}, //817 #CJK UNIFIED IDEOGRAPH + {0x8579, 0x5383}, //818 #CJK UNIFIED IDEOGRAPH + {0x857A, 0x5387}, //819 #CJK UNIFIED IDEOGRAPH + {0x857B, 0x5388}, //820 #CJK UNIFIED IDEOGRAPH + {0x857C, 0x538A}, //821 #CJK UNIFIED IDEOGRAPH + {0x857D, 0x538E}, //822 #CJK UNIFIED IDEOGRAPH + {0x857E, 0x538F}, //823 #CJK UNIFIED IDEOGRAPH + {0x8580, 0x5390}, //824 #CJK UNIFIED IDEOGRAPH + {0x8581, 0x5391}, //825 #CJK UNIFIED IDEOGRAPH + {0x8582, 0x5392}, //826 #CJK UNIFIED IDEOGRAPH + {0x8583, 0x5393}, //827 #CJK UNIFIED IDEOGRAPH + {0x8584, 0x5394}, //828 #CJK UNIFIED IDEOGRAPH + {0x8585, 0x5396}, //829 #CJK UNIFIED IDEOGRAPH + {0x8586, 0x5397}, //830 #CJK UNIFIED IDEOGRAPH + {0x8587, 0x5399}, //831 #CJK UNIFIED IDEOGRAPH + {0x8588, 0x539B}, //832 #CJK UNIFIED IDEOGRAPH + {0x8589, 0x539C}, //833 #CJK UNIFIED IDEOGRAPH + {0x858A, 0x539E}, //834 #CJK UNIFIED IDEOGRAPH + {0x858B, 0x53A0}, //835 #CJK UNIFIED IDEOGRAPH + {0x858C, 0x53A1}, //836 #CJK UNIFIED IDEOGRAPH + {0x858D, 0x53A4}, //837 #CJK UNIFIED IDEOGRAPH + {0x858E, 0x53A7}, //838 #CJK UNIFIED IDEOGRAPH + {0x858F, 0x53AA}, //839 #CJK UNIFIED IDEOGRAPH + {0x8590, 0x53AB}, //840 #CJK UNIFIED IDEOGRAPH + {0x8591, 0x53AC}, //841 #CJK UNIFIED IDEOGRAPH + {0x8592, 0x53AD}, //842 #CJK UNIFIED IDEOGRAPH + {0x8593, 0x53AF}, //843 #CJK UNIFIED IDEOGRAPH + {0x8594, 0x53B0}, //844 #CJK UNIFIED IDEOGRAPH + {0x8595, 0x53B1}, //845 #CJK UNIFIED IDEOGRAPH + {0x8596, 0x53B2}, //846 #CJK UNIFIED IDEOGRAPH + {0x8597, 0x53B3}, //847 #CJK UNIFIED IDEOGRAPH + {0x8598, 0x53B4}, //848 #CJK UNIFIED IDEOGRAPH + {0x8599, 0x53B5}, //849 #CJK UNIFIED IDEOGRAPH + {0x859A, 0x53B7}, //850 #CJK UNIFIED IDEOGRAPH + {0x859B, 0x53B8}, //851 #CJK UNIFIED IDEOGRAPH + {0x859C, 0x53B9}, //852 #CJK UNIFIED IDEOGRAPH + {0x859D, 0x53BA}, //853 #CJK UNIFIED IDEOGRAPH + {0x859E, 0x53BC}, //854 #CJK UNIFIED IDEOGRAPH + {0x859F, 0x53BD}, //855 #CJK UNIFIED IDEOGRAPH + {0x85A0, 0x53BE}, //856 #CJK UNIFIED IDEOGRAPH + {0x85A1, 0x53C0}, //857 #CJK UNIFIED IDEOGRAPH + {0x85A2, 0x53C3}, //858 #CJK UNIFIED IDEOGRAPH + {0x85A3, 0x53C4}, //859 #CJK UNIFIED IDEOGRAPH + {0x85A4, 0x53C5}, //860 #CJK UNIFIED IDEOGRAPH + {0x85A5, 0x53C6}, //861 #CJK UNIFIED IDEOGRAPH + {0x85A6, 0x53C7}, //862 #CJK UNIFIED IDEOGRAPH + {0x85A7, 0x53CE}, //863 #CJK UNIFIED IDEOGRAPH + {0x85A8, 0x53CF}, //864 #CJK UNIFIED IDEOGRAPH + {0x85A9, 0x53D0}, //865 #CJK UNIFIED IDEOGRAPH + {0x85AA, 0x53D2}, //866 #CJK UNIFIED IDEOGRAPH + {0x85AB, 0x53D3}, //867 #CJK UNIFIED IDEOGRAPH + {0x85AC, 0x53D5}, //868 #CJK UNIFIED IDEOGRAPH + {0x85AD, 0x53DA}, //869 #CJK UNIFIED IDEOGRAPH + {0x85AE, 0x53DC}, //870 #CJK UNIFIED IDEOGRAPH + {0x85AF, 0x53DD}, //871 #CJK UNIFIED IDEOGRAPH + {0x85B0, 0x53DE}, //872 #CJK UNIFIED IDEOGRAPH + {0x85B1, 0x53E1}, //873 #CJK UNIFIED IDEOGRAPH + {0x85B2, 0x53E2}, //874 #CJK UNIFIED IDEOGRAPH + {0x85B3, 0x53E7}, //875 #CJK UNIFIED IDEOGRAPH + {0x85B4, 0x53F4}, //876 #CJK UNIFIED IDEOGRAPH + {0x85B5, 0x53FA}, //877 #CJK UNIFIED IDEOGRAPH + {0x85B6, 0x53FE}, //878 #CJK UNIFIED IDEOGRAPH + {0x85B7, 0x53FF}, //879 #CJK UNIFIED IDEOGRAPH + {0x85B8, 0x5400}, //880 #CJK UNIFIED IDEOGRAPH + {0x85B9, 0x5402}, //881 #CJK UNIFIED IDEOGRAPH + {0x85BA, 0x5405}, //882 #CJK UNIFIED IDEOGRAPH + {0x85BB, 0x5407}, //883 #CJK UNIFIED IDEOGRAPH + {0x85BC, 0x540B}, //884 #CJK UNIFIED IDEOGRAPH + {0x85BD, 0x5414}, //885 #CJK UNIFIED IDEOGRAPH + {0x85BE, 0x5418}, //886 #CJK UNIFIED IDEOGRAPH + {0x85BF, 0x5419}, //887 #CJK UNIFIED IDEOGRAPH + {0x85C0, 0x541A}, //888 #CJK UNIFIED IDEOGRAPH + {0x85C1, 0x541C}, //889 #CJK UNIFIED IDEOGRAPH + {0x85C2, 0x5422}, //890 #CJK UNIFIED IDEOGRAPH + {0x85C3, 0x5424}, //891 #CJK UNIFIED IDEOGRAPH + {0x85C4, 0x5425}, //892 #CJK UNIFIED IDEOGRAPH + {0x85C5, 0x542A}, //893 #CJK UNIFIED IDEOGRAPH + {0x85C6, 0x5430}, //894 #CJK UNIFIED IDEOGRAPH + {0x85C7, 0x5433}, //895 #CJK UNIFIED IDEOGRAPH + {0x85C8, 0x5436}, //896 #CJK UNIFIED IDEOGRAPH + {0x85C9, 0x5437}, //897 #CJK UNIFIED IDEOGRAPH + {0x85CA, 0x543A}, //898 #CJK UNIFIED IDEOGRAPH + {0x85CB, 0x543D}, //899 #CJK UNIFIED IDEOGRAPH + {0x85CC, 0x543F}, //900 #CJK UNIFIED IDEOGRAPH + {0x85CD, 0x5441}, //901 #CJK UNIFIED IDEOGRAPH + {0x85CE, 0x5442}, //902 #CJK UNIFIED IDEOGRAPH + {0x85CF, 0x5444}, //903 #CJK UNIFIED IDEOGRAPH + {0x85D0, 0x5445}, //904 #CJK UNIFIED IDEOGRAPH + {0x85D1, 0x5447}, //905 #CJK UNIFIED IDEOGRAPH + {0x85D2, 0x5449}, //906 #CJK UNIFIED IDEOGRAPH + {0x85D3, 0x544C}, //907 #CJK UNIFIED IDEOGRAPH + {0x85D4, 0x544D}, //908 #CJK UNIFIED IDEOGRAPH + {0x85D5, 0x544E}, //909 #CJK UNIFIED IDEOGRAPH + {0x85D6, 0x544F}, //910 #CJK UNIFIED IDEOGRAPH + {0x85D7, 0x5451}, //911 #CJK UNIFIED IDEOGRAPH + {0x85D8, 0x545A}, //912 #CJK UNIFIED IDEOGRAPH + {0x85D9, 0x545D}, //913 #CJK UNIFIED IDEOGRAPH + {0x85DA, 0x545E}, //914 #CJK UNIFIED IDEOGRAPH + {0x85DB, 0x545F}, //915 #CJK UNIFIED IDEOGRAPH + {0x85DC, 0x5460}, //916 #CJK UNIFIED IDEOGRAPH + {0x85DD, 0x5461}, //917 #CJK UNIFIED IDEOGRAPH + {0x85DE, 0x5463}, //918 #CJK UNIFIED IDEOGRAPH + {0x85DF, 0x5465}, //919 #CJK UNIFIED IDEOGRAPH + {0x85E0, 0x5467}, //920 #CJK UNIFIED IDEOGRAPH + {0x85E1, 0x5469}, //921 #CJK UNIFIED IDEOGRAPH + {0x85E2, 0x546A}, //922 #CJK UNIFIED IDEOGRAPH + {0x85E3, 0x546B}, //923 #CJK UNIFIED IDEOGRAPH + {0x85E4, 0x546C}, //924 #CJK UNIFIED IDEOGRAPH + {0x85E5, 0x546D}, //925 #CJK UNIFIED IDEOGRAPH + {0x85E6, 0x546E}, //926 #CJK UNIFIED IDEOGRAPH + {0x85E7, 0x546F}, //927 #CJK UNIFIED IDEOGRAPH + {0x85E8, 0x5470}, //928 #CJK UNIFIED IDEOGRAPH + {0x85E9, 0x5474}, //929 #CJK UNIFIED IDEOGRAPH + {0x85EA, 0x5479}, //930 #CJK UNIFIED IDEOGRAPH + {0x85EB, 0x547A}, //931 #CJK UNIFIED IDEOGRAPH + {0x85EC, 0x547E}, //932 #CJK UNIFIED IDEOGRAPH + {0x85ED, 0x547F}, //933 #CJK UNIFIED IDEOGRAPH + {0x85EE, 0x5481}, //934 #CJK UNIFIED IDEOGRAPH + {0x85EF, 0x5483}, //935 #CJK UNIFIED IDEOGRAPH + {0x85F0, 0x5485}, //936 #CJK UNIFIED IDEOGRAPH + {0x85F1, 0x5487}, //937 #CJK UNIFIED IDEOGRAPH + {0x85F2, 0x5488}, //938 #CJK UNIFIED IDEOGRAPH + {0x85F3, 0x5489}, //939 #CJK UNIFIED IDEOGRAPH + {0x85F4, 0x548A}, //940 #CJK UNIFIED IDEOGRAPH + {0x85F5, 0x548D}, //941 #CJK UNIFIED IDEOGRAPH + {0x85F6, 0x5491}, //942 #CJK UNIFIED IDEOGRAPH + {0x85F7, 0x5493}, //943 #CJK UNIFIED IDEOGRAPH + {0x85F8, 0x5497}, //944 #CJK UNIFIED IDEOGRAPH + {0x85F9, 0x5498}, //945 #CJK UNIFIED IDEOGRAPH + {0x85FA, 0x549C}, //946 #CJK UNIFIED IDEOGRAPH + {0x85FB, 0x549E}, //947 #CJK UNIFIED IDEOGRAPH + {0x85FC, 0x549F}, //948 #CJK UNIFIED IDEOGRAPH + {0x85FD, 0x54A0}, //949 #CJK UNIFIED IDEOGRAPH + {0x85FE, 0x54A1}, //950 #CJK UNIFIED IDEOGRAPH + {0x8640, 0x54A2}, //951 #CJK UNIFIED IDEOGRAPH + {0x8641, 0x54A5}, //952 #CJK UNIFIED IDEOGRAPH + {0x8642, 0x54AE}, //953 #CJK UNIFIED IDEOGRAPH + {0x8643, 0x54B0}, //954 #CJK UNIFIED IDEOGRAPH + {0x8644, 0x54B2}, //955 #CJK UNIFIED IDEOGRAPH + {0x8645, 0x54B5}, //956 #CJK UNIFIED IDEOGRAPH + {0x8646, 0x54B6}, //957 #CJK UNIFIED IDEOGRAPH + {0x8647, 0x54B7}, //958 #CJK UNIFIED IDEOGRAPH + {0x8648, 0x54B9}, //959 #CJK UNIFIED IDEOGRAPH + {0x8649, 0x54BA}, //960 #CJK UNIFIED IDEOGRAPH + {0x864A, 0x54BC}, //961 #CJK UNIFIED IDEOGRAPH + {0x864B, 0x54BE}, //962 #CJK UNIFIED IDEOGRAPH + {0x864C, 0x54C3}, //963 #CJK UNIFIED IDEOGRAPH + {0x864D, 0x54C5}, //964 #CJK UNIFIED IDEOGRAPH + {0x864E, 0x54CA}, //965 #CJK UNIFIED IDEOGRAPH + {0x864F, 0x54CB}, //966 #CJK UNIFIED IDEOGRAPH + {0x8650, 0x54D6}, //967 #CJK UNIFIED IDEOGRAPH + {0x8651, 0x54D8}, //968 #CJK UNIFIED IDEOGRAPH + {0x8652, 0x54DB}, //969 #CJK UNIFIED IDEOGRAPH + {0x8653, 0x54E0}, //970 #CJK UNIFIED IDEOGRAPH + {0x8654, 0x54E1}, //971 #CJK UNIFIED IDEOGRAPH + {0x8655, 0x54E2}, //972 #CJK UNIFIED IDEOGRAPH + {0x8656, 0x54E3}, //973 #CJK UNIFIED IDEOGRAPH + {0x8657, 0x54E4}, //974 #CJK UNIFIED IDEOGRAPH + {0x8658, 0x54EB}, //975 #CJK UNIFIED IDEOGRAPH + {0x8659, 0x54EC}, //976 #CJK UNIFIED IDEOGRAPH + {0x865A, 0x54EF}, //977 #CJK UNIFIED IDEOGRAPH + {0x865B, 0x54F0}, //978 #CJK UNIFIED IDEOGRAPH + {0x865C, 0x54F1}, //979 #CJK UNIFIED IDEOGRAPH + {0x865D, 0x54F4}, //980 #CJK UNIFIED IDEOGRAPH + {0x865E, 0x54F5}, //981 #CJK UNIFIED IDEOGRAPH + {0x865F, 0x54F6}, //982 #CJK UNIFIED IDEOGRAPH + {0x8660, 0x54F7}, //983 #CJK UNIFIED IDEOGRAPH + {0x8661, 0x54F8}, //984 #CJK UNIFIED IDEOGRAPH + {0x8662, 0x54F9}, //985 #CJK UNIFIED IDEOGRAPH + {0x8663, 0x54FB}, //986 #CJK UNIFIED IDEOGRAPH + {0x8664, 0x54FE}, //987 #CJK UNIFIED IDEOGRAPH + {0x8665, 0x5500}, //988 #CJK UNIFIED IDEOGRAPH + {0x8666, 0x5502}, //989 #CJK UNIFIED IDEOGRAPH + {0x8667, 0x5503}, //990 #CJK UNIFIED IDEOGRAPH + {0x8668, 0x5504}, //991 #CJK UNIFIED IDEOGRAPH + {0x8669, 0x5505}, //992 #CJK UNIFIED IDEOGRAPH + {0x866A, 0x5508}, //993 #CJK UNIFIED IDEOGRAPH + {0x866B, 0x550A}, //994 #CJK UNIFIED IDEOGRAPH + {0x866C, 0x550B}, //995 #CJK UNIFIED IDEOGRAPH + {0x866D, 0x550C}, //996 #CJK UNIFIED IDEOGRAPH + {0x866E, 0x550D}, //997 #CJK UNIFIED IDEOGRAPH + {0x866F, 0x550E}, //998 #CJK UNIFIED IDEOGRAPH + {0x8670, 0x5512}, //999 #CJK UNIFIED IDEOGRAPH + {0x8671, 0x5513}, //1000 #CJK UNIFIED IDEOGRAPH + {0x8672, 0x5515}, //1001 #CJK UNIFIED IDEOGRAPH + {0x8673, 0x5516}, //1002 #CJK UNIFIED IDEOGRAPH + {0x8674, 0x5517}, //1003 #CJK UNIFIED IDEOGRAPH + {0x8675, 0x5518}, //1004 #CJK UNIFIED IDEOGRAPH + {0x8676, 0x5519}, //1005 #CJK UNIFIED IDEOGRAPH + {0x8677, 0x551A}, //1006 #CJK UNIFIED IDEOGRAPH + {0x8678, 0x551C}, //1007 #CJK UNIFIED IDEOGRAPH + {0x8679, 0x551D}, //1008 #CJK UNIFIED IDEOGRAPH + {0x867A, 0x551E}, //1009 #CJK UNIFIED IDEOGRAPH + {0x867B, 0x551F}, //1010 #CJK UNIFIED IDEOGRAPH + {0x867C, 0x5521}, //1011 #CJK UNIFIED IDEOGRAPH + {0x867D, 0x5525}, //1012 #CJK UNIFIED IDEOGRAPH + {0x867E, 0x5526}, //1013 #CJK UNIFIED IDEOGRAPH + {0x8680, 0x5528}, //1014 #CJK UNIFIED IDEOGRAPH + {0x8681, 0x5529}, //1015 #CJK UNIFIED IDEOGRAPH + {0x8682, 0x552B}, //1016 #CJK UNIFIED IDEOGRAPH + {0x8683, 0x552D}, //1017 #CJK UNIFIED IDEOGRAPH + {0x8684, 0x5532}, //1018 #CJK UNIFIED IDEOGRAPH + {0x8685, 0x5534}, //1019 #CJK UNIFIED IDEOGRAPH + {0x8686, 0x5535}, //1020 #CJK UNIFIED IDEOGRAPH + {0x8687, 0x5536}, //1021 #CJK UNIFIED IDEOGRAPH + {0x8688, 0x5538}, //1022 #CJK UNIFIED IDEOGRAPH + {0x8689, 0x5539}, //1023 #CJK UNIFIED IDEOGRAPH + {0x868A, 0x553A}, //1024 #CJK UNIFIED IDEOGRAPH + {0x868B, 0x553B}, //1025 #CJK UNIFIED IDEOGRAPH + {0x868C, 0x553D}, //1026 #CJK UNIFIED IDEOGRAPH + {0x868D, 0x5540}, //1027 #CJK UNIFIED IDEOGRAPH + {0x868E, 0x5542}, //1028 #CJK UNIFIED IDEOGRAPH + {0x868F, 0x5545}, //1029 #CJK UNIFIED IDEOGRAPH + {0x8690, 0x5547}, //1030 #CJK UNIFIED IDEOGRAPH + {0x8691, 0x5548}, //1031 #CJK UNIFIED IDEOGRAPH + {0x8692, 0x554B}, //1032 #CJK UNIFIED IDEOGRAPH + {0x8693, 0x554C}, //1033 #CJK UNIFIED IDEOGRAPH + {0x8694, 0x554D}, //1034 #CJK UNIFIED IDEOGRAPH + {0x8695, 0x554E}, //1035 #CJK UNIFIED IDEOGRAPH + {0x8696, 0x554F}, //1036 #CJK UNIFIED IDEOGRAPH + {0x8697, 0x5551}, //1037 #CJK UNIFIED IDEOGRAPH + {0x8698, 0x5552}, //1038 #CJK UNIFIED IDEOGRAPH + {0x8699, 0x5553}, //1039 #CJK UNIFIED IDEOGRAPH + {0x869A, 0x5554}, //1040 #CJK UNIFIED IDEOGRAPH + {0x869B, 0x5557}, //1041 #CJK UNIFIED IDEOGRAPH + {0x869C, 0x5558}, //1042 #CJK UNIFIED IDEOGRAPH + {0x869D, 0x5559}, //1043 #CJK UNIFIED IDEOGRAPH + {0x869E, 0x555A}, //1044 #CJK UNIFIED IDEOGRAPH + {0x869F, 0x555B}, //1045 #CJK UNIFIED IDEOGRAPH + {0x86A0, 0x555D}, //1046 #CJK UNIFIED IDEOGRAPH + {0x86A1, 0x555E}, //1047 #CJK UNIFIED IDEOGRAPH + {0x86A2, 0x555F}, //1048 #CJK UNIFIED IDEOGRAPH + {0x86A3, 0x5560}, //1049 #CJK UNIFIED IDEOGRAPH + {0x86A4, 0x5562}, //1050 #CJK UNIFIED IDEOGRAPH + {0x86A5, 0x5563}, //1051 #CJK UNIFIED IDEOGRAPH + {0x86A6, 0x5568}, //1052 #CJK UNIFIED IDEOGRAPH + {0x86A7, 0x5569}, //1053 #CJK UNIFIED IDEOGRAPH + {0x86A8, 0x556B}, //1054 #CJK UNIFIED IDEOGRAPH + {0x86A9, 0x556F}, //1055 #CJK UNIFIED IDEOGRAPH + {0x86AA, 0x5570}, //1056 #CJK UNIFIED IDEOGRAPH + {0x86AB, 0x5571}, //1057 #CJK UNIFIED IDEOGRAPH + {0x86AC, 0x5572}, //1058 #CJK UNIFIED IDEOGRAPH + {0x86AD, 0x5573}, //1059 #CJK UNIFIED IDEOGRAPH + {0x86AE, 0x5574}, //1060 #CJK UNIFIED IDEOGRAPH + {0x86AF, 0x5579}, //1061 #CJK UNIFIED IDEOGRAPH + {0x86B0, 0x557A}, //1062 #CJK UNIFIED IDEOGRAPH + {0x86B1, 0x557D}, //1063 #CJK UNIFIED IDEOGRAPH + {0x86B2, 0x557F}, //1064 #CJK UNIFIED IDEOGRAPH + {0x86B3, 0x5585}, //1065 #CJK UNIFIED IDEOGRAPH + {0x86B4, 0x5586}, //1066 #CJK UNIFIED IDEOGRAPH + {0x86B5, 0x558C}, //1067 #CJK UNIFIED IDEOGRAPH + {0x86B6, 0x558D}, //1068 #CJK UNIFIED IDEOGRAPH + {0x86B7, 0x558E}, //1069 #CJK UNIFIED IDEOGRAPH + {0x86B8, 0x5590}, //1070 #CJK UNIFIED IDEOGRAPH + {0x86B9, 0x5592}, //1071 #CJK UNIFIED IDEOGRAPH + {0x86BA, 0x5593}, //1072 #CJK UNIFIED IDEOGRAPH + {0x86BB, 0x5595}, //1073 #CJK UNIFIED IDEOGRAPH + {0x86BC, 0x5596}, //1074 #CJK UNIFIED IDEOGRAPH + {0x86BD, 0x5597}, //1075 #CJK UNIFIED IDEOGRAPH + {0x86BE, 0x559A}, //1076 #CJK UNIFIED IDEOGRAPH + {0x86BF, 0x559B}, //1077 #CJK UNIFIED IDEOGRAPH + {0x86C0, 0x559E}, //1078 #CJK UNIFIED IDEOGRAPH + {0x86C1, 0x55A0}, //1079 #CJK UNIFIED IDEOGRAPH + {0x86C2, 0x55A1}, //1080 #CJK UNIFIED IDEOGRAPH + {0x86C3, 0x55A2}, //1081 #CJK UNIFIED IDEOGRAPH + {0x86C4, 0x55A3}, //1082 #CJK UNIFIED IDEOGRAPH + {0x86C5, 0x55A4}, //1083 #CJK UNIFIED IDEOGRAPH + {0x86C6, 0x55A5}, //1084 #CJK UNIFIED IDEOGRAPH + {0x86C7, 0x55A6}, //1085 #CJK UNIFIED IDEOGRAPH + {0x86C8, 0x55A8}, //1086 #CJK UNIFIED IDEOGRAPH + {0x86C9, 0x55A9}, //1087 #CJK UNIFIED IDEOGRAPH + {0x86CA, 0x55AA}, //1088 #CJK UNIFIED IDEOGRAPH + {0x86CB, 0x55AB}, //1089 #CJK UNIFIED IDEOGRAPH + {0x86CC, 0x55AC}, //1090 #CJK UNIFIED IDEOGRAPH + {0x86CD, 0x55AD}, //1091 #CJK UNIFIED IDEOGRAPH + {0x86CE, 0x55AE}, //1092 #CJK UNIFIED IDEOGRAPH + {0x86CF, 0x55AF}, //1093 #CJK UNIFIED IDEOGRAPH + {0x86D0, 0x55B0}, //1094 #CJK UNIFIED IDEOGRAPH + {0x86D1, 0x55B2}, //1095 #CJK UNIFIED IDEOGRAPH + {0x86D2, 0x55B4}, //1096 #CJK UNIFIED IDEOGRAPH + {0x86D3, 0x55B6}, //1097 #CJK UNIFIED IDEOGRAPH + {0x86D4, 0x55B8}, //1098 #CJK UNIFIED IDEOGRAPH + {0x86D5, 0x55BA}, //1099 #CJK UNIFIED IDEOGRAPH + {0x86D6, 0x55BC}, //1100 #CJK UNIFIED IDEOGRAPH + {0x86D7, 0x55BF}, //1101 #CJK UNIFIED IDEOGRAPH + {0x86D8, 0x55C0}, //1102 #CJK UNIFIED IDEOGRAPH + {0x86D9, 0x55C1}, //1103 #CJK UNIFIED IDEOGRAPH + {0x86DA, 0x55C2}, //1104 #CJK UNIFIED IDEOGRAPH + {0x86DB, 0x55C3}, //1105 #CJK UNIFIED IDEOGRAPH + {0x86DC, 0x55C6}, //1106 #CJK UNIFIED IDEOGRAPH + {0x86DD, 0x55C7}, //1107 #CJK UNIFIED IDEOGRAPH + {0x86DE, 0x55C8}, //1108 #CJK UNIFIED IDEOGRAPH + {0x86DF, 0x55CA}, //1109 #CJK UNIFIED IDEOGRAPH + {0x86E0, 0x55CB}, //1110 #CJK UNIFIED IDEOGRAPH + {0x86E1, 0x55CE}, //1111 #CJK UNIFIED IDEOGRAPH + {0x86E2, 0x55CF}, //1112 #CJK UNIFIED IDEOGRAPH + {0x86E3, 0x55D0}, //1113 #CJK UNIFIED IDEOGRAPH + {0x86E4, 0x55D5}, //1114 #CJK UNIFIED IDEOGRAPH + {0x86E5, 0x55D7}, //1115 #CJK UNIFIED IDEOGRAPH + {0x86E6, 0x55D8}, //1116 #CJK UNIFIED IDEOGRAPH + {0x86E7, 0x55D9}, //1117 #CJK UNIFIED IDEOGRAPH + {0x86E8, 0x55DA}, //1118 #CJK UNIFIED IDEOGRAPH + {0x86E9, 0x55DB}, //1119 #CJK UNIFIED IDEOGRAPH + {0x86EA, 0x55DE}, //1120 #CJK UNIFIED IDEOGRAPH + {0x86EB, 0x55E0}, //1121 #CJK UNIFIED IDEOGRAPH + {0x86EC, 0x55E2}, //1122 #CJK UNIFIED IDEOGRAPH + {0x86ED, 0x55E7}, //1123 #CJK UNIFIED IDEOGRAPH + {0x86EE, 0x55E9}, //1124 #CJK UNIFIED IDEOGRAPH + {0x86EF, 0x55ED}, //1125 #CJK UNIFIED IDEOGRAPH + {0x86F0, 0x55EE}, //1126 #CJK UNIFIED IDEOGRAPH + {0x86F1, 0x55F0}, //1127 #CJK UNIFIED IDEOGRAPH + {0x86F2, 0x55F1}, //1128 #CJK UNIFIED IDEOGRAPH + {0x86F3, 0x55F4}, //1129 #CJK UNIFIED IDEOGRAPH + {0x86F4, 0x55F6}, //1130 #CJK UNIFIED IDEOGRAPH + {0x86F5, 0x55F8}, //1131 #CJK UNIFIED IDEOGRAPH + {0x86F6, 0x55F9}, //1132 #CJK UNIFIED IDEOGRAPH + {0x86F7, 0x55FA}, //1133 #CJK UNIFIED IDEOGRAPH + {0x86F8, 0x55FB}, //1134 #CJK UNIFIED IDEOGRAPH + {0x86F9, 0x55FC}, //1135 #CJK UNIFIED IDEOGRAPH + {0x86FA, 0x55FF}, //1136 #CJK UNIFIED IDEOGRAPH + {0x86FB, 0x5602}, //1137 #CJK UNIFIED IDEOGRAPH + {0x86FC, 0x5603}, //1138 #CJK UNIFIED IDEOGRAPH + {0x86FD, 0x5604}, //1139 #CJK UNIFIED IDEOGRAPH + {0x86FE, 0x5605}, //1140 #CJK UNIFIED IDEOGRAPH + {0x8740, 0x5606}, //1141 #CJK UNIFIED IDEOGRAPH + {0x8741, 0x5607}, //1142 #CJK UNIFIED IDEOGRAPH + {0x8742, 0x560A}, //1143 #CJK UNIFIED IDEOGRAPH + {0x8743, 0x560B}, //1144 #CJK UNIFIED IDEOGRAPH + {0x8744, 0x560D}, //1145 #CJK UNIFIED IDEOGRAPH + {0x8745, 0x5610}, //1146 #CJK UNIFIED IDEOGRAPH + {0x8746, 0x5611}, //1147 #CJK UNIFIED IDEOGRAPH + {0x8747, 0x5612}, //1148 #CJK UNIFIED IDEOGRAPH + {0x8748, 0x5613}, //1149 #CJK UNIFIED IDEOGRAPH + {0x8749, 0x5614}, //1150 #CJK UNIFIED IDEOGRAPH + {0x874A, 0x5615}, //1151 #CJK UNIFIED IDEOGRAPH + {0x874B, 0x5616}, //1152 #CJK UNIFIED IDEOGRAPH + {0x874C, 0x5617}, //1153 #CJK UNIFIED IDEOGRAPH + {0x874D, 0x5619}, //1154 #CJK UNIFIED IDEOGRAPH + {0x874E, 0x561A}, //1155 #CJK UNIFIED IDEOGRAPH + {0x874F, 0x561C}, //1156 #CJK UNIFIED IDEOGRAPH + {0x8750, 0x561D}, //1157 #CJK UNIFIED IDEOGRAPH + {0x8751, 0x5620}, //1158 #CJK UNIFIED IDEOGRAPH + {0x8752, 0x5621}, //1159 #CJK UNIFIED IDEOGRAPH + {0x8753, 0x5622}, //1160 #CJK UNIFIED IDEOGRAPH + {0x8754, 0x5625}, //1161 #CJK UNIFIED IDEOGRAPH + {0x8755, 0x5626}, //1162 #CJK UNIFIED IDEOGRAPH + {0x8756, 0x5628}, //1163 #CJK UNIFIED IDEOGRAPH + {0x8757, 0x5629}, //1164 #CJK UNIFIED IDEOGRAPH + {0x8758, 0x562A}, //1165 #CJK UNIFIED IDEOGRAPH + {0x8759, 0x562B}, //1166 #CJK UNIFIED IDEOGRAPH + {0x875A, 0x562E}, //1167 #CJK UNIFIED IDEOGRAPH + {0x875B, 0x562F}, //1168 #CJK UNIFIED IDEOGRAPH + {0x875C, 0x5630}, //1169 #CJK UNIFIED IDEOGRAPH + {0x875D, 0x5633}, //1170 #CJK UNIFIED IDEOGRAPH + {0x875E, 0x5635}, //1171 #CJK UNIFIED IDEOGRAPH + {0x875F, 0x5637}, //1172 #CJK UNIFIED IDEOGRAPH + {0x8760, 0x5638}, //1173 #CJK UNIFIED IDEOGRAPH + {0x8761, 0x563A}, //1174 #CJK UNIFIED IDEOGRAPH + {0x8762, 0x563C}, //1175 #CJK UNIFIED IDEOGRAPH + {0x8763, 0x563D}, //1176 #CJK UNIFIED IDEOGRAPH + {0x8764, 0x563E}, //1177 #CJK UNIFIED IDEOGRAPH + {0x8765, 0x5640}, //1178 #CJK UNIFIED IDEOGRAPH + {0x8766, 0x5641}, //1179 #CJK UNIFIED IDEOGRAPH + {0x8767, 0x5642}, //1180 #CJK UNIFIED IDEOGRAPH + {0x8768, 0x5643}, //1181 #CJK UNIFIED IDEOGRAPH + {0x8769, 0x5644}, //1182 #CJK UNIFIED IDEOGRAPH + {0x876A, 0x5645}, //1183 #CJK UNIFIED IDEOGRAPH + {0x876B, 0x5646}, //1184 #CJK UNIFIED IDEOGRAPH + {0x876C, 0x5647}, //1185 #CJK UNIFIED IDEOGRAPH + {0x876D, 0x5648}, //1186 #CJK UNIFIED IDEOGRAPH + {0x876E, 0x5649}, //1187 #CJK UNIFIED IDEOGRAPH + {0x876F, 0x564A}, //1188 #CJK UNIFIED IDEOGRAPH + {0x8770, 0x564B}, //1189 #CJK UNIFIED IDEOGRAPH + {0x8771, 0x564F}, //1190 #CJK UNIFIED IDEOGRAPH + {0x8772, 0x5650}, //1191 #CJK UNIFIED IDEOGRAPH + {0x8773, 0x5651}, //1192 #CJK UNIFIED IDEOGRAPH + {0x8774, 0x5652}, //1193 #CJK UNIFIED IDEOGRAPH + {0x8775, 0x5653}, //1194 #CJK UNIFIED IDEOGRAPH + {0x8776, 0x5655}, //1195 #CJK UNIFIED IDEOGRAPH + {0x8777, 0x5656}, //1196 #CJK UNIFIED IDEOGRAPH + {0x8778, 0x565A}, //1197 #CJK UNIFIED IDEOGRAPH + {0x8779, 0x565B}, //1198 #CJK UNIFIED IDEOGRAPH + {0x877A, 0x565D}, //1199 #CJK UNIFIED IDEOGRAPH + {0x877B, 0x565E}, //1200 #CJK UNIFIED IDEOGRAPH + {0x877C, 0x565F}, //1201 #CJK UNIFIED IDEOGRAPH + {0x877D, 0x5660}, //1202 #CJK UNIFIED IDEOGRAPH + {0x877E, 0x5661}, //1203 #CJK UNIFIED IDEOGRAPH + {0x8780, 0x5663}, //1204 #CJK UNIFIED IDEOGRAPH + {0x8781, 0x5665}, //1205 #CJK UNIFIED IDEOGRAPH + {0x8782, 0x5666}, //1206 #CJK UNIFIED IDEOGRAPH + {0x8783, 0x5667}, //1207 #CJK UNIFIED IDEOGRAPH + {0x8784, 0x566D}, //1208 #CJK UNIFIED IDEOGRAPH + {0x8785, 0x566E}, //1209 #CJK UNIFIED IDEOGRAPH + {0x8786, 0x566F}, //1210 #CJK UNIFIED IDEOGRAPH + {0x8787, 0x5670}, //1211 #CJK UNIFIED IDEOGRAPH + {0x8788, 0x5672}, //1212 #CJK UNIFIED IDEOGRAPH + {0x8789, 0x5673}, //1213 #CJK UNIFIED IDEOGRAPH + {0x878A, 0x5674}, //1214 #CJK UNIFIED IDEOGRAPH + {0x878B, 0x5675}, //1215 #CJK UNIFIED IDEOGRAPH + {0x878C, 0x5677}, //1216 #CJK UNIFIED IDEOGRAPH + {0x878D, 0x5678}, //1217 #CJK UNIFIED IDEOGRAPH + {0x878E, 0x5679}, //1218 #CJK UNIFIED IDEOGRAPH + {0x878F, 0x567A}, //1219 #CJK UNIFIED IDEOGRAPH + {0x8790, 0x567D}, //1220 #CJK UNIFIED IDEOGRAPH + {0x8791, 0x567E}, //1221 #CJK UNIFIED IDEOGRAPH + {0x8792, 0x567F}, //1222 #CJK UNIFIED IDEOGRAPH + {0x8793, 0x5680}, //1223 #CJK UNIFIED IDEOGRAPH + {0x8794, 0x5681}, //1224 #CJK UNIFIED IDEOGRAPH + {0x8795, 0x5682}, //1225 #CJK UNIFIED IDEOGRAPH + {0x8796, 0x5683}, //1226 #CJK UNIFIED IDEOGRAPH + {0x8797, 0x5684}, //1227 #CJK UNIFIED IDEOGRAPH + {0x8798, 0x5687}, //1228 #CJK UNIFIED IDEOGRAPH + {0x8799, 0x5688}, //1229 #CJK UNIFIED IDEOGRAPH + {0x879A, 0x5689}, //1230 #CJK UNIFIED IDEOGRAPH + {0x879B, 0x568A}, //1231 #CJK UNIFIED IDEOGRAPH + {0x879C, 0x568B}, //1232 #CJK UNIFIED IDEOGRAPH + {0x879D, 0x568C}, //1233 #CJK UNIFIED IDEOGRAPH + {0x879E, 0x568D}, //1234 #CJK UNIFIED IDEOGRAPH + {0x879F, 0x5690}, //1235 #CJK UNIFIED IDEOGRAPH + {0x87A0, 0x5691}, //1236 #CJK UNIFIED IDEOGRAPH + {0x87A1, 0x5692}, //1237 #CJK UNIFIED IDEOGRAPH + {0x87A2, 0x5694}, //1238 #CJK UNIFIED IDEOGRAPH + {0x87A3, 0x5695}, //1239 #CJK UNIFIED IDEOGRAPH + {0x87A4, 0x5696}, //1240 #CJK UNIFIED IDEOGRAPH + {0x87A5, 0x5697}, //1241 #CJK UNIFIED IDEOGRAPH + {0x87A6, 0x5698}, //1242 #CJK UNIFIED IDEOGRAPH + {0x87A7, 0x5699}, //1243 #CJK UNIFIED IDEOGRAPH + {0x87A8, 0x569A}, //1244 #CJK UNIFIED IDEOGRAPH + {0x87A9, 0x569B}, //1245 #CJK UNIFIED IDEOGRAPH + {0x87AA, 0x569C}, //1246 #CJK UNIFIED IDEOGRAPH + {0x87AB, 0x569D}, //1247 #CJK UNIFIED IDEOGRAPH + {0x87AC, 0x569E}, //1248 #CJK UNIFIED IDEOGRAPH + {0x87AD, 0x569F}, //1249 #CJK UNIFIED IDEOGRAPH + {0x87AE, 0x56A0}, //1250 #CJK UNIFIED IDEOGRAPH + {0x87AF, 0x56A1}, //1251 #CJK UNIFIED IDEOGRAPH + {0x87B0, 0x56A2}, //1252 #CJK UNIFIED IDEOGRAPH + {0x87B1, 0x56A4}, //1253 #CJK UNIFIED IDEOGRAPH + {0x87B2, 0x56A5}, //1254 #CJK UNIFIED IDEOGRAPH + {0x87B3, 0x56A6}, //1255 #CJK UNIFIED IDEOGRAPH + {0x87B4, 0x56A7}, //1256 #CJK UNIFIED IDEOGRAPH + {0x87B5, 0x56A8}, //1257 #CJK UNIFIED IDEOGRAPH + {0x87B6, 0x56A9}, //1258 #CJK UNIFIED IDEOGRAPH + {0x87B7, 0x56AA}, //1259 #CJK UNIFIED IDEOGRAPH + {0x87B8, 0x56AB}, //1260 #CJK UNIFIED IDEOGRAPH + {0x87B9, 0x56AC}, //1261 #CJK UNIFIED IDEOGRAPH + {0x87BA, 0x56AD}, //1262 #CJK UNIFIED IDEOGRAPH + {0x87BB, 0x56AE}, //1263 #CJK UNIFIED IDEOGRAPH + {0x87BC, 0x56B0}, //1264 #CJK UNIFIED IDEOGRAPH + {0x87BD, 0x56B1}, //1265 #CJK UNIFIED IDEOGRAPH + {0x87BE, 0x56B2}, //1266 #CJK UNIFIED IDEOGRAPH + {0x87BF, 0x56B3}, //1267 #CJK UNIFIED IDEOGRAPH + {0x87C0, 0x56B4}, //1268 #CJK UNIFIED IDEOGRAPH + {0x87C1, 0x56B5}, //1269 #CJK UNIFIED IDEOGRAPH + {0x87C2, 0x56B6}, //1270 #CJK UNIFIED IDEOGRAPH + {0x87C3, 0x56B8}, //1271 #CJK UNIFIED IDEOGRAPH + {0x87C4, 0x56B9}, //1272 #CJK UNIFIED IDEOGRAPH + {0x87C5, 0x56BA}, //1273 #CJK UNIFIED IDEOGRAPH + {0x87C6, 0x56BB}, //1274 #CJK UNIFIED IDEOGRAPH + {0x87C7, 0x56BD}, //1275 #CJK UNIFIED IDEOGRAPH + {0x87C8, 0x56BE}, //1276 #CJK UNIFIED IDEOGRAPH + {0x87C9, 0x56BF}, //1277 #CJK UNIFIED IDEOGRAPH + {0x87CA, 0x56C0}, //1278 #CJK UNIFIED IDEOGRAPH + {0x87CB, 0x56C1}, //1279 #CJK UNIFIED IDEOGRAPH + {0x87CC, 0x56C2}, //1280 #CJK UNIFIED IDEOGRAPH + {0x87CD, 0x56C3}, //1281 #CJK UNIFIED IDEOGRAPH + {0x87CE, 0x56C4}, //1282 #CJK UNIFIED IDEOGRAPH + {0x87CF, 0x56C5}, //1283 #CJK UNIFIED IDEOGRAPH + {0x87D0, 0x56C6}, //1284 #CJK UNIFIED IDEOGRAPH + {0x87D1, 0x56C7}, //1285 #CJK UNIFIED IDEOGRAPH + {0x87D2, 0x56C8}, //1286 #CJK UNIFIED IDEOGRAPH + {0x87D3, 0x56C9}, //1287 #CJK UNIFIED IDEOGRAPH + {0x87D4, 0x56CB}, //1288 #CJK UNIFIED IDEOGRAPH + {0x87D5, 0x56CC}, //1289 #CJK UNIFIED IDEOGRAPH + {0x87D6, 0x56CD}, //1290 #CJK UNIFIED IDEOGRAPH + {0x87D7, 0x56CE}, //1291 #CJK UNIFIED IDEOGRAPH + {0x87D8, 0x56CF}, //1292 #CJK UNIFIED IDEOGRAPH + {0x87D9, 0x56D0}, //1293 #CJK UNIFIED IDEOGRAPH + {0x87DA, 0x56D1}, //1294 #CJK UNIFIED IDEOGRAPH + {0x87DB, 0x56D2}, //1295 #CJK UNIFIED IDEOGRAPH + {0x87DC, 0x56D3}, //1296 #CJK UNIFIED IDEOGRAPH + {0x87DD, 0x56D5}, //1297 #CJK UNIFIED IDEOGRAPH + {0x87DE, 0x56D6}, //1298 #CJK UNIFIED IDEOGRAPH + {0x87DF, 0x56D8}, //1299 #CJK UNIFIED IDEOGRAPH + {0x87E0, 0x56D9}, //1300 #CJK UNIFIED IDEOGRAPH + {0x87E1, 0x56DC}, //1301 #CJK UNIFIED IDEOGRAPH + {0x87E2, 0x56E3}, //1302 #CJK UNIFIED IDEOGRAPH + {0x87E3, 0x56E5}, //1303 #CJK UNIFIED IDEOGRAPH + {0x87E4, 0x56E6}, //1304 #CJK UNIFIED IDEOGRAPH + {0x87E5, 0x56E7}, //1305 #CJK UNIFIED IDEOGRAPH + {0x87E6, 0x56E8}, //1306 #CJK UNIFIED IDEOGRAPH + {0x87E7, 0x56E9}, //1307 #CJK UNIFIED IDEOGRAPH + {0x87E8, 0x56EA}, //1308 #CJK UNIFIED IDEOGRAPH + {0x87E9, 0x56EC}, //1309 #CJK UNIFIED IDEOGRAPH + {0x87EA, 0x56EE}, //1310 #CJK UNIFIED IDEOGRAPH + {0x87EB, 0x56EF}, //1311 #CJK UNIFIED IDEOGRAPH + {0x87EC, 0x56F2}, //1312 #CJK UNIFIED IDEOGRAPH + {0x87ED, 0x56F3}, //1313 #CJK UNIFIED IDEOGRAPH + {0x87EE, 0x56F6}, //1314 #CJK UNIFIED IDEOGRAPH + {0x87EF, 0x56F7}, //1315 #CJK UNIFIED IDEOGRAPH + {0x87F0, 0x56F8}, //1316 #CJK UNIFIED IDEOGRAPH + {0x87F1, 0x56FB}, //1317 #CJK UNIFIED IDEOGRAPH + {0x87F2, 0x56FC}, //1318 #CJK UNIFIED IDEOGRAPH + {0x87F3, 0x5700}, //1319 #CJK UNIFIED IDEOGRAPH + {0x87F4, 0x5701}, //1320 #CJK UNIFIED IDEOGRAPH + {0x87F5, 0x5702}, //1321 #CJK UNIFIED IDEOGRAPH + {0x87F6, 0x5705}, //1322 #CJK UNIFIED IDEOGRAPH + {0x87F7, 0x5707}, //1323 #CJK UNIFIED IDEOGRAPH + {0x87F8, 0x570B}, //1324 #CJK UNIFIED IDEOGRAPH + {0x87F9, 0x570C}, //1325 #CJK UNIFIED IDEOGRAPH + {0x87FA, 0x570D}, //1326 #CJK UNIFIED IDEOGRAPH + {0x87FB, 0x570E}, //1327 #CJK UNIFIED IDEOGRAPH + {0x87FC, 0x570F}, //1328 #CJK UNIFIED IDEOGRAPH + {0x87FD, 0x5710}, //1329 #CJK UNIFIED IDEOGRAPH + {0x87FE, 0x5711}, //1330 #CJK UNIFIED IDEOGRAPH + {0x8840, 0x5712}, //1331 #CJK UNIFIED IDEOGRAPH + {0x8841, 0x5713}, //1332 #CJK UNIFIED IDEOGRAPH + {0x8842, 0x5714}, //1333 #CJK UNIFIED IDEOGRAPH + {0x8843, 0x5715}, //1334 #CJK UNIFIED IDEOGRAPH + {0x8844, 0x5716}, //1335 #CJK UNIFIED IDEOGRAPH + {0x8845, 0x5717}, //1336 #CJK UNIFIED IDEOGRAPH + {0x8846, 0x5718}, //1337 #CJK UNIFIED IDEOGRAPH + {0x8847, 0x5719}, //1338 #CJK UNIFIED IDEOGRAPH + {0x8848, 0x571A}, //1339 #CJK UNIFIED IDEOGRAPH + {0x8849, 0x571B}, //1340 #CJK UNIFIED IDEOGRAPH + {0x884A, 0x571D}, //1341 #CJK UNIFIED IDEOGRAPH + {0x884B, 0x571E}, //1342 #CJK UNIFIED IDEOGRAPH + {0x884C, 0x5720}, //1343 #CJK UNIFIED IDEOGRAPH + {0x884D, 0x5721}, //1344 #CJK UNIFIED IDEOGRAPH + {0x884E, 0x5722}, //1345 #CJK UNIFIED IDEOGRAPH + {0x884F, 0x5724}, //1346 #CJK UNIFIED IDEOGRAPH + {0x8850, 0x5725}, //1347 #CJK UNIFIED IDEOGRAPH + {0x8851, 0x5726}, //1348 #CJK UNIFIED IDEOGRAPH + {0x8852, 0x5727}, //1349 #CJK UNIFIED IDEOGRAPH + {0x8853, 0x572B}, //1350 #CJK UNIFIED IDEOGRAPH + {0x8854, 0x5731}, //1351 #CJK UNIFIED IDEOGRAPH + {0x8855, 0x5732}, //1352 #CJK UNIFIED IDEOGRAPH + {0x8856, 0x5734}, //1353 #CJK UNIFIED IDEOGRAPH + {0x8857, 0x5735}, //1354 #CJK UNIFIED IDEOGRAPH + {0x8858, 0x5736}, //1355 #CJK UNIFIED IDEOGRAPH + {0x8859, 0x5737}, //1356 #CJK UNIFIED IDEOGRAPH + {0x885A, 0x5738}, //1357 #CJK UNIFIED IDEOGRAPH + {0x885B, 0x573C}, //1358 #CJK UNIFIED IDEOGRAPH + {0x885C, 0x573D}, //1359 #CJK UNIFIED IDEOGRAPH + {0x885D, 0x573F}, //1360 #CJK UNIFIED IDEOGRAPH + {0x885E, 0x5741}, //1361 #CJK UNIFIED IDEOGRAPH + {0x885F, 0x5743}, //1362 #CJK UNIFIED IDEOGRAPH + {0x8860, 0x5744}, //1363 #CJK UNIFIED IDEOGRAPH + {0x8861, 0x5745}, //1364 #CJK UNIFIED IDEOGRAPH + {0x8862, 0x5746}, //1365 #CJK UNIFIED IDEOGRAPH + {0x8863, 0x5748}, //1366 #CJK UNIFIED IDEOGRAPH + {0x8864, 0x5749}, //1367 #CJK UNIFIED IDEOGRAPH + {0x8865, 0x574B}, //1368 #CJK UNIFIED IDEOGRAPH + {0x8866, 0x5752}, //1369 #CJK UNIFIED IDEOGRAPH + {0x8867, 0x5753}, //1370 #CJK UNIFIED IDEOGRAPH + {0x8868, 0x5754}, //1371 #CJK UNIFIED IDEOGRAPH + {0x8869, 0x5755}, //1372 #CJK UNIFIED IDEOGRAPH + {0x886A, 0x5756}, //1373 #CJK UNIFIED IDEOGRAPH + {0x886B, 0x5758}, //1374 #CJK UNIFIED IDEOGRAPH + {0x886C, 0x5759}, //1375 #CJK UNIFIED IDEOGRAPH + {0x886D, 0x5762}, //1376 #CJK UNIFIED IDEOGRAPH + {0x886E, 0x5763}, //1377 #CJK UNIFIED IDEOGRAPH + {0x886F, 0x5765}, //1378 #CJK UNIFIED IDEOGRAPH + {0x8870, 0x5767}, //1379 #CJK UNIFIED IDEOGRAPH + {0x8871, 0x576C}, //1380 #CJK UNIFIED IDEOGRAPH + {0x8872, 0x576E}, //1381 #CJK UNIFIED IDEOGRAPH + {0x8873, 0x5770}, //1382 #CJK UNIFIED IDEOGRAPH + {0x8874, 0x5771}, //1383 #CJK UNIFIED IDEOGRAPH + {0x8875, 0x5772}, //1384 #CJK UNIFIED IDEOGRAPH + {0x8876, 0x5774}, //1385 #CJK UNIFIED IDEOGRAPH + {0x8877, 0x5775}, //1386 #CJK UNIFIED IDEOGRAPH + {0x8878, 0x5778}, //1387 #CJK UNIFIED IDEOGRAPH + {0x8879, 0x5779}, //1388 #CJK UNIFIED IDEOGRAPH + {0x887A, 0x577A}, //1389 #CJK UNIFIED IDEOGRAPH + {0x887B, 0x577D}, //1390 #CJK UNIFIED IDEOGRAPH + {0x887C, 0x577E}, //1391 #CJK UNIFIED IDEOGRAPH + {0x887D, 0x577F}, //1392 #CJK UNIFIED IDEOGRAPH + {0x887E, 0x5780}, //1393 #CJK UNIFIED IDEOGRAPH + {0x8880, 0x5781}, //1394 #CJK UNIFIED IDEOGRAPH + {0x8881, 0x5787}, //1395 #CJK UNIFIED IDEOGRAPH + {0x8882, 0x5788}, //1396 #CJK UNIFIED IDEOGRAPH + {0x8883, 0x5789}, //1397 #CJK UNIFIED IDEOGRAPH + {0x8884, 0x578A}, //1398 #CJK UNIFIED IDEOGRAPH + {0x8885, 0x578D}, //1399 #CJK UNIFIED IDEOGRAPH + {0x8886, 0x578E}, //1400 #CJK UNIFIED IDEOGRAPH + {0x8887, 0x578F}, //1401 #CJK UNIFIED IDEOGRAPH + {0x8888, 0x5790}, //1402 #CJK UNIFIED IDEOGRAPH + {0x8889, 0x5791}, //1403 #CJK UNIFIED IDEOGRAPH + {0x888A, 0x5794}, //1404 #CJK UNIFIED IDEOGRAPH + {0x888B, 0x5795}, //1405 #CJK UNIFIED IDEOGRAPH + {0x888C, 0x5796}, //1406 #CJK UNIFIED IDEOGRAPH + {0x888D, 0x5797}, //1407 #CJK UNIFIED IDEOGRAPH + {0x888E, 0x5798}, //1408 #CJK UNIFIED IDEOGRAPH + {0x888F, 0x5799}, //1409 #CJK UNIFIED IDEOGRAPH + {0x8890, 0x579A}, //1410 #CJK UNIFIED IDEOGRAPH + {0x8891, 0x579C}, //1411 #CJK UNIFIED IDEOGRAPH + {0x8892, 0x579D}, //1412 #CJK UNIFIED IDEOGRAPH + {0x8893, 0x579E}, //1413 #CJK UNIFIED IDEOGRAPH + {0x8894, 0x579F}, //1414 #CJK UNIFIED IDEOGRAPH + {0x8895, 0x57A5}, //1415 #CJK UNIFIED IDEOGRAPH + {0x8896, 0x57A8}, //1416 #CJK UNIFIED IDEOGRAPH + {0x8897, 0x57AA}, //1417 #CJK UNIFIED IDEOGRAPH + {0x8898, 0x57AC}, //1418 #CJK UNIFIED IDEOGRAPH + {0x8899, 0x57AF}, //1419 #CJK UNIFIED IDEOGRAPH + {0x889A, 0x57B0}, //1420 #CJK UNIFIED IDEOGRAPH + {0x889B, 0x57B1}, //1421 #CJK UNIFIED IDEOGRAPH + {0x889C, 0x57B3}, //1422 #CJK UNIFIED IDEOGRAPH + {0x889D, 0x57B5}, //1423 #CJK UNIFIED IDEOGRAPH + {0x889E, 0x57B6}, //1424 #CJK UNIFIED IDEOGRAPH + {0x889F, 0x57B7}, //1425 #CJK UNIFIED IDEOGRAPH + {0x88A0, 0x57B9}, //1426 #CJK UNIFIED IDEOGRAPH + {0x88A1, 0x57BA}, //1427 #CJK UNIFIED IDEOGRAPH + {0x88A2, 0x57BB}, //1428 #CJK UNIFIED IDEOGRAPH + {0x88A3, 0x57BC}, //1429 #CJK UNIFIED IDEOGRAPH + {0x88A4, 0x57BD}, //1430 #CJK UNIFIED IDEOGRAPH + {0x88A5, 0x57BE}, //1431 #CJK UNIFIED IDEOGRAPH + {0x88A6, 0x57BF}, //1432 #CJK UNIFIED IDEOGRAPH + {0x88A7, 0x57C0}, //1433 #CJK UNIFIED IDEOGRAPH + {0x88A8, 0x57C1}, //1434 #CJK UNIFIED IDEOGRAPH + {0x88A9, 0x57C4}, //1435 #CJK UNIFIED IDEOGRAPH + {0x88AA, 0x57C5}, //1436 #CJK UNIFIED IDEOGRAPH + {0x88AB, 0x57C6}, //1437 #CJK UNIFIED IDEOGRAPH + {0x88AC, 0x57C7}, //1438 #CJK UNIFIED IDEOGRAPH + {0x88AD, 0x57C8}, //1439 #CJK UNIFIED IDEOGRAPH + {0x88AE, 0x57C9}, //1440 #CJK UNIFIED IDEOGRAPH + {0x88AF, 0x57CA}, //1441 #CJK UNIFIED IDEOGRAPH + {0x88B0, 0x57CC}, //1442 #CJK UNIFIED IDEOGRAPH + {0x88B1, 0x57CD}, //1443 #CJK UNIFIED IDEOGRAPH + {0x88B2, 0x57D0}, //1444 #CJK UNIFIED IDEOGRAPH + {0x88B3, 0x57D1}, //1445 #CJK UNIFIED IDEOGRAPH + {0x88B4, 0x57D3}, //1446 #CJK UNIFIED IDEOGRAPH + {0x88B5, 0x57D6}, //1447 #CJK UNIFIED IDEOGRAPH + {0x88B6, 0x57D7}, //1448 #CJK UNIFIED IDEOGRAPH + {0x88B7, 0x57DB}, //1449 #CJK UNIFIED IDEOGRAPH + {0x88B8, 0x57DC}, //1450 #CJK UNIFIED IDEOGRAPH + {0x88B9, 0x57DE}, //1451 #CJK UNIFIED IDEOGRAPH + {0x88BA, 0x57E1}, //1452 #CJK UNIFIED IDEOGRAPH + {0x88BB, 0x57E2}, //1453 #CJK UNIFIED IDEOGRAPH + {0x88BC, 0x57E3}, //1454 #CJK UNIFIED IDEOGRAPH + {0x88BD, 0x57E5}, //1455 #CJK UNIFIED IDEOGRAPH + {0x88BE, 0x57E6}, //1456 #CJK UNIFIED IDEOGRAPH + {0x88BF, 0x57E7}, //1457 #CJK UNIFIED IDEOGRAPH + {0x88C0, 0x57E8}, //1458 #CJK UNIFIED IDEOGRAPH + {0x88C1, 0x57E9}, //1459 #CJK UNIFIED IDEOGRAPH + {0x88C2, 0x57EA}, //1460 #CJK UNIFIED IDEOGRAPH + {0x88C3, 0x57EB}, //1461 #CJK UNIFIED IDEOGRAPH + {0x88C4, 0x57EC}, //1462 #CJK UNIFIED IDEOGRAPH + {0x88C5, 0x57EE}, //1463 #CJK UNIFIED IDEOGRAPH + {0x88C6, 0x57F0}, //1464 #CJK UNIFIED IDEOGRAPH + {0x88C7, 0x57F1}, //1465 #CJK UNIFIED IDEOGRAPH + {0x88C8, 0x57F2}, //1466 #CJK UNIFIED IDEOGRAPH + {0x88C9, 0x57F3}, //1467 #CJK UNIFIED IDEOGRAPH + {0x88CA, 0x57F5}, //1468 #CJK UNIFIED IDEOGRAPH + {0x88CB, 0x57F6}, //1469 #CJK UNIFIED IDEOGRAPH + {0x88CC, 0x57F7}, //1470 #CJK UNIFIED IDEOGRAPH + {0x88CD, 0x57FB}, //1471 #CJK UNIFIED IDEOGRAPH + {0x88CE, 0x57FC}, //1472 #CJK UNIFIED IDEOGRAPH + {0x88CF, 0x57FE}, //1473 #CJK UNIFIED IDEOGRAPH + {0x88D0, 0x57FF}, //1474 #CJK UNIFIED IDEOGRAPH + {0x88D1, 0x5801}, //1475 #CJK UNIFIED IDEOGRAPH + {0x88D2, 0x5803}, //1476 #CJK UNIFIED IDEOGRAPH + {0x88D3, 0x5804}, //1477 #CJK UNIFIED IDEOGRAPH + {0x88D4, 0x5805}, //1478 #CJK UNIFIED IDEOGRAPH + {0x88D5, 0x5808}, //1479 #CJK UNIFIED IDEOGRAPH + {0x88D6, 0x5809}, //1480 #CJK UNIFIED IDEOGRAPH + {0x88D7, 0x580A}, //1481 #CJK UNIFIED IDEOGRAPH + {0x88D8, 0x580C}, //1482 #CJK UNIFIED IDEOGRAPH + {0x88D9, 0x580E}, //1483 #CJK UNIFIED IDEOGRAPH + {0x88DA, 0x580F}, //1484 #CJK UNIFIED IDEOGRAPH + {0x88DB, 0x5810}, //1485 #CJK UNIFIED IDEOGRAPH + {0x88DC, 0x5812}, //1486 #CJK UNIFIED IDEOGRAPH + {0x88DD, 0x5813}, //1487 #CJK UNIFIED IDEOGRAPH + {0x88DE, 0x5814}, //1488 #CJK UNIFIED IDEOGRAPH + {0x88DF, 0x5816}, //1489 #CJK UNIFIED IDEOGRAPH + {0x88E0, 0x5817}, //1490 #CJK UNIFIED IDEOGRAPH + {0x88E1, 0x5818}, //1491 #CJK UNIFIED IDEOGRAPH + {0x88E2, 0x581A}, //1492 #CJK UNIFIED IDEOGRAPH + {0x88E3, 0x581B}, //1493 #CJK UNIFIED IDEOGRAPH + {0x88E4, 0x581C}, //1494 #CJK UNIFIED IDEOGRAPH + {0x88E5, 0x581D}, //1495 #CJK UNIFIED IDEOGRAPH + {0x88E6, 0x581F}, //1496 #CJK UNIFIED IDEOGRAPH + {0x88E7, 0x5822}, //1497 #CJK UNIFIED IDEOGRAPH + {0x88E8, 0x5823}, //1498 #CJK UNIFIED IDEOGRAPH + {0x88E9, 0x5825}, //1499 #CJK UNIFIED IDEOGRAPH + {0x88EA, 0x5826}, //1500 #CJK UNIFIED IDEOGRAPH + {0x88EB, 0x5827}, //1501 #CJK UNIFIED IDEOGRAPH + {0x88EC, 0x5828}, //1502 #CJK UNIFIED IDEOGRAPH + {0x88ED, 0x5829}, //1503 #CJK UNIFIED IDEOGRAPH + {0x88EE, 0x582B}, //1504 #CJK UNIFIED IDEOGRAPH + {0x88EF, 0x582C}, //1505 #CJK UNIFIED IDEOGRAPH + {0x88F0, 0x582D}, //1506 #CJK UNIFIED IDEOGRAPH + {0x88F1, 0x582E}, //1507 #CJK UNIFIED IDEOGRAPH + {0x88F2, 0x582F}, //1508 #CJK UNIFIED IDEOGRAPH + {0x88F3, 0x5831}, //1509 #CJK UNIFIED IDEOGRAPH + {0x88F4, 0x5832}, //1510 #CJK UNIFIED IDEOGRAPH + {0x88F5, 0x5833}, //1511 #CJK UNIFIED IDEOGRAPH + {0x88F6, 0x5834}, //1512 #CJK UNIFIED IDEOGRAPH + {0x88F7, 0x5836}, //1513 #CJK UNIFIED IDEOGRAPH + {0x88F8, 0x5837}, //1514 #CJK UNIFIED IDEOGRAPH + {0x88F9, 0x5838}, //1515 #CJK UNIFIED IDEOGRAPH + {0x88FA, 0x5839}, //1516 #CJK UNIFIED IDEOGRAPH + {0x88FB, 0x583A}, //1517 #CJK UNIFIED IDEOGRAPH + {0x88FC, 0x583B}, //1518 #CJK UNIFIED IDEOGRAPH + {0x88FD, 0x583C}, //1519 #CJK UNIFIED IDEOGRAPH + {0x88FE, 0x583D}, //1520 #CJK UNIFIED IDEOGRAPH + {0x8940, 0x583E}, //1521 #CJK UNIFIED IDEOGRAPH + {0x8941, 0x583F}, //1522 #CJK UNIFIED IDEOGRAPH + {0x8942, 0x5840}, //1523 #CJK UNIFIED IDEOGRAPH + {0x8943, 0x5841}, //1524 #CJK UNIFIED IDEOGRAPH + {0x8944, 0x5842}, //1525 #CJK UNIFIED IDEOGRAPH + {0x8945, 0x5843}, //1526 #CJK UNIFIED IDEOGRAPH + {0x8946, 0x5845}, //1527 #CJK UNIFIED IDEOGRAPH + {0x8947, 0x5846}, //1528 #CJK UNIFIED IDEOGRAPH + {0x8948, 0x5847}, //1529 #CJK UNIFIED IDEOGRAPH + {0x8949, 0x5848}, //1530 #CJK UNIFIED IDEOGRAPH + {0x894A, 0x5849}, //1531 #CJK UNIFIED IDEOGRAPH + {0x894B, 0x584A}, //1532 #CJK UNIFIED IDEOGRAPH + {0x894C, 0x584B}, //1533 #CJK UNIFIED IDEOGRAPH + {0x894D, 0x584E}, //1534 #CJK UNIFIED IDEOGRAPH + {0x894E, 0x584F}, //1535 #CJK UNIFIED IDEOGRAPH + {0x894F, 0x5850}, //1536 #CJK UNIFIED IDEOGRAPH + {0x8950, 0x5852}, //1537 #CJK UNIFIED IDEOGRAPH + {0x8951, 0x5853}, //1538 #CJK UNIFIED IDEOGRAPH + {0x8952, 0x5855}, //1539 #CJK UNIFIED IDEOGRAPH + {0x8953, 0x5856}, //1540 #CJK UNIFIED IDEOGRAPH + {0x8954, 0x5857}, //1541 #CJK UNIFIED IDEOGRAPH + {0x8955, 0x5859}, //1542 #CJK UNIFIED IDEOGRAPH + {0x8956, 0x585A}, //1543 #CJK UNIFIED IDEOGRAPH + {0x8957, 0x585B}, //1544 #CJK UNIFIED IDEOGRAPH + {0x8958, 0x585C}, //1545 #CJK UNIFIED IDEOGRAPH + {0x8959, 0x585D}, //1546 #CJK UNIFIED IDEOGRAPH + {0x895A, 0x585F}, //1547 #CJK UNIFIED IDEOGRAPH + {0x895B, 0x5860}, //1548 #CJK UNIFIED IDEOGRAPH + {0x895C, 0x5861}, //1549 #CJK UNIFIED IDEOGRAPH + {0x895D, 0x5862}, //1550 #CJK UNIFIED IDEOGRAPH + {0x895E, 0x5863}, //1551 #CJK UNIFIED IDEOGRAPH + {0x895F, 0x5864}, //1552 #CJK UNIFIED IDEOGRAPH + {0x8960, 0x5866}, //1553 #CJK UNIFIED IDEOGRAPH + {0x8961, 0x5867}, //1554 #CJK UNIFIED IDEOGRAPH + {0x8962, 0x5868}, //1555 #CJK UNIFIED IDEOGRAPH + {0x8963, 0x5869}, //1556 #CJK UNIFIED IDEOGRAPH + {0x8964, 0x586A}, //1557 #CJK UNIFIED IDEOGRAPH + {0x8965, 0x586D}, //1558 #CJK UNIFIED IDEOGRAPH + {0x8966, 0x586E}, //1559 #CJK UNIFIED IDEOGRAPH + {0x8967, 0x586F}, //1560 #CJK UNIFIED IDEOGRAPH + {0x8968, 0x5870}, //1561 #CJK UNIFIED IDEOGRAPH + {0x8969, 0x5871}, //1562 #CJK UNIFIED IDEOGRAPH + {0x896A, 0x5872}, //1563 #CJK UNIFIED IDEOGRAPH + {0x896B, 0x5873}, //1564 #CJK UNIFIED IDEOGRAPH + {0x896C, 0x5874}, //1565 #CJK UNIFIED IDEOGRAPH + {0x896D, 0x5875}, //1566 #CJK UNIFIED IDEOGRAPH + {0x896E, 0x5876}, //1567 #CJK UNIFIED IDEOGRAPH + {0x896F, 0x5877}, //1568 #CJK UNIFIED IDEOGRAPH + {0x8970, 0x5878}, //1569 #CJK UNIFIED IDEOGRAPH + {0x8971, 0x5879}, //1570 #CJK UNIFIED IDEOGRAPH + {0x8972, 0x587A}, //1571 #CJK UNIFIED IDEOGRAPH + {0x8973, 0x587B}, //1572 #CJK UNIFIED IDEOGRAPH + {0x8974, 0x587C}, //1573 #CJK UNIFIED IDEOGRAPH + {0x8975, 0x587D}, //1574 #CJK UNIFIED IDEOGRAPH + {0x8976, 0x587F}, //1575 #CJK UNIFIED IDEOGRAPH + {0x8977, 0x5882}, //1576 #CJK UNIFIED IDEOGRAPH + {0x8978, 0x5884}, //1577 #CJK UNIFIED IDEOGRAPH + {0x8979, 0x5886}, //1578 #CJK UNIFIED IDEOGRAPH + {0x897A, 0x5887}, //1579 #CJK UNIFIED IDEOGRAPH + {0x897B, 0x5888}, //1580 #CJK UNIFIED IDEOGRAPH + {0x897C, 0x588A}, //1581 #CJK UNIFIED IDEOGRAPH + {0x897D, 0x588B}, //1582 #CJK UNIFIED IDEOGRAPH + {0x897E, 0x588C}, //1583 #CJK UNIFIED IDEOGRAPH + {0x8980, 0x588D}, //1584 #CJK UNIFIED IDEOGRAPH + {0x8981, 0x588E}, //1585 #CJK UNIFIED IDEOGRAPH + {0x8982, 0x588F}, //1586 #CJK UNIFIED IDEOGRAPH + {0x8983, 0x5890}, //1587 #CJK UNIFIED IDEOGRAPH + {0x8984, 0x5891}, //1588 #CJK UNIFIED IDEOGRAPH + {0x8985, 0x5894}, //1589 #CJK UNIFIED IDEOGRAPH + {0x8986, 0x5895}, //1590 #CJK UNIFIED IDEOGRAPH + {0x8987, 0x5896}, //1591 #CJK UNIFIED IDEOGRAPH + {0x8988, 0x5897}, //1592 #CJK UNIFIED IDEOGRAPH + {0x8989, 0x5898}, //1593 #CJK UNIFIED IDEOGRAPH + {0x898A, 0x589B}, //1594 #CJK UNIFIED IDEOGRAPH + {0x898B, 0x589C}, //1595 #CJK UNIFIED IDEOGRAPH + {0x898C, 0x589D}, //1596 #CJK UNIFIED IDEOGRAPH + {0x898D, 0x58A0}, //1597 #CJK UNIFIED IDEOGRAPH + {0x898E, 0x58A1}, //1598 #CJK UNIFIED IDEOGRAPH + {0x898F, 0x58A2}, //1599 #CJK UNIFIED IDEOGRAPH + {0x8990, 0x58A3}, //1600 #CJK UNIFIED IDEOGRAPH + {0x8991, 0x58A4}, //1601 #CJK UNIFIED IDEOGRAPH + {0x8992, 0x58A5}, //1602 #CJK UNIFIED IDEOGRAPH + {0x8993, 0x58A6}, //1603 #CJK UNIFIED IDEOGRAPH + {0x8994, 0x58A7}, //1604 #CJK UNIFIED IDEOGRAPH + {0x8995, 0x58AA}, //1605 #CJK UNIFIED IDEOGRAPH + {0x8996, 0x58AB}, //1606 #CJK UNIFIED IDEOGRAPH + {0x8997, 0x58AC}, //1607 #CJK UNIFIED IDEOGRAPH + {0x8998, 0x58AD}, //1608 #CJK UNIFIED IDEOGRAPH + {0x8999, 0x58AE}, //1609 #CJK UNIFIED IDEOGRAPH + {0x899A, 0x58AF}, //1610 #CJK UNIFIED IDEOGRAPH + {0x899B, 0x58B0}, //1611 #CJK UNIFIED IDEOGRAPH + {0x899C, 0x58B1}, //1612 #CJK UNIFIED IDEOGRAPH + {0x899D, 0x58B2}, //1613 #CJK UNIFIED IDEOGRAPH + {0x899E, 0x58B3}, //1614 #CJK UNIFIED IDEOGRAPH + {0x899F, 0x58B4}, //1615 #CJK UNIFIED IDEOGRAPH + {0x89A0, 0x58B5}, //1616 #CJK UNIFIED IDEOGRAPH + {0x89A1, 0x58B6}, //1617 #CJK UNIFIED IDEOGRAPH + {0x89A2, 0x58B7}, //1618 #CJK UNIFIED IDEOGRAPH + {0x89A3, 0x58B8}, //1619 #CJK UNIFIED IDEOGRAPH + {0x89A4, 0x58B9}, //1620 #CJK UNIFIED IDEOGRAPH + {0x89A5, 0x58BA}, //1621 #CJK UNIFIED IDEOGRAPH + {0x89A6, 0x58BB}, //1622 #CJK UNIFIED IDEOGRAPH + {0x89A7, 0x58BD}, //1623 #CJK UNIFIED IDEOGRAPH + {0x89A8, 0x58BE}, //1624 #CJK UNIFIED IDEOGRAPH + {0x89A9, 0x58BF}, //1625 #CJK UNIFIED IDEOGRAPH + {0x89AA, 0x58C0}, //1626 #CJK UNIFIED IDEOGRAPH + {0x89AB, 0x58C2}, //1627 #CJK UNIFIED IDEOGRAPH + {0x89AC, 0x58C3}, //1628 #CJK UNIFIED IDEOGRAPH + {0x89AD, 0x58C4}, //1629 #CJK UNIFIED IDEOGRAPH + {0x89AE, 0x58C6}, //1630 #CJK UNIFIED IDEOGRAPH + {0x89AF, 0x58C7}, //1631 #CJK UNIFIED IDEOGRAPH + {0x89B0, 0x58C8}, //1632 #CJK UNIFIED IDEOGRAPH + {0x89B1, 0x58C9}, //1633 #CJK UNIFIED IDEOGRAPH + {0x89B2, 0x58CA}, //1634 #CJK UNIFIED IDEOGRAPH + {0x89B3, 0x58CB}, //1635 #CJK UNIFIED IDEOGRAPH + {0x89B4, 0x58CC}, //1636 #CJK UNIFIED IDEOGRAPH + {0x89B5, 0x58CD}, //1637 #CJK UNIFIED IDEOGRAPH + {0x89B6, 0x58CE}, //1638 #CJK UNIFIED IDEOGRAPH + {0x89B7, 0x58CF}, //1639 #CJK UNIFIED IDEOGRAPH + {0x89B8, 0x58D0}, //1640 #CJK UNIFIED IDEOGRAPH + {0x89B9, 0x58D2}, //1641 #CJK UNIFIED IDEOGRAPH + {0x89BA, 0x58D3}, //1642 #CJK UNIFIED IDEOGRAPH + {0x89BB, 0x58D4}, //1643 #CJK UNIFIED IDEOGRAPH + {0x89BC, 0x58D6}, //1644 #CJK UNIFIED IDEOGRAPH + {0x89BD, 0x58D7}, //1645 #CJK UNIFIED IDEOGRAPH + {0x89BE, 0x58D8}, //1646 #CJK UNIFIED IDEOGRAPH + {0x89BF, 0x58D9}, //1647 #CJK UNIFIED IDEOGRAPH + {0x89C0, 0x58DA}, //1648 #CJK UNIFIED IDEOGRAPH + {0x89C1, 0x58DB}, //1649 #CJK UNIFIED IDEOGRAPH + {0x89C2, 0x58DC}, //1650 #CJK UNIFIED IDEOGRAPH + {0x89C3, 0x58DD}, //1651 #CJK UNIFIED IDEOGRAPH + {0x89C4, 0x58DE}, //1652 #CJK UNIFIED IDEOGRAPH + {0x89C5, 0x58DF}, //1653 #CJK UNIFIED IDEOGRAPH + {0x89C6, 0x58E0}, //1654 #CJK UNIFIED IDEOGRAPH + {0x89C7, 0x58E1}, //1655 #CJK UNIFIED IDEOGRAPH + {0x89C8, 0x58E2}, //1656 #CJK UNIFIED IDEOGRAPH + {0x89C9, 0x58E3}, //1657 #CJK UNIFIED IDEOGRAPH + {0x89CA, 0x58E5}, //1658 #CJK UNIFIED IDEOGRAPH + {0x89CB, 0x58E6}, //1659 #CJK UNIFIED IDEOGRAPH + {0x89CC, 0x58E7}, //1660 #CJK UNIFIED IDEOGRAPH + {0x89CD, 0x58E8}, //1661 #CJK UNIFIED IDEOGRAPH + {0x89CE, 0x58E9}, //1662 #CJK UNIFIED IDEOGRAPH + {0x89CF, 0x58EA}, //1663 #CJK UNIFIED IDEOGRAPH + {0x89D0, 0x58ED}, //1664 #CJK UNIFIED IDEOGRAPH + {0x89D1, 0x58EF}, //1665 #CJK UNIFIED IDEOGRAPH + {0x89D2, 0x58F1}, //1666 #CJK UNIFIED IDEOGRAPH + {0x89D3, 0x58F2}, //1667 #CJK UNIFIED IDEOGRAPH + {0x89D4, 0x58F4}, //1668 #CJK UNIFIED IDEOGRAPH + {0x89D5, 0x58F5}, //1669 #CJK UNIFIED IDEOGRAPH + {0x89D6, 0x58F7}, //1670 #CJK UNIFIED IDEOGRAPH + {0x89D7, 0x58F8}, //1671 #CJK UNIFIED IDEOGRAPH + {0x89D8, 0x58FA}, //1672 #CJK UNIFIED IDEOGRAPH + {0x89D9, 0x58FB}, //1673 #CJK UNIFIED IDEOGRAPH + {0x89DA, 0x58FC}, //1674 #CJK UNIFIED IDEOGRAPH + {0x89DB, 0x58FD}, //1675 #CJK UNIFIED IDEOGRAPH + {0x89DC, 0x58FE}, //1676 #CJK UNIFIED IDEOGRAPH + {0x89DD, 0x58FF}, //1677 #CJK UNIFIED IDEOGRAPH + {0x89DE, 0x5900}, //1678 #CJK UNIFIED IDEOGRAPH + {0x89DF, 0x5901}, //1679 #CJK UNIFIED IDEOGRAPH + {0x89E0, 0x5903}, //1680 #CJK UNIFIED IDEOGRAPH + {0x89E1, 0x5905}, //1681 #CJK UNIFIED IDEOGRAPH + {0x89E2, 0x5906}, //1682 #CJK UNIFIED IDEOGRAPH + {0x89E3, 0x5908}, //1683 #CJK UNIFIED IDEOGRAPH + {0x89E4, 0x5909}, //1684 #CJK UNIFIED IDEOGRAPH + {0x89E5, 0x590A}, //1685 #CJK UNIFIED IDEOGRAPH + {0x89E6, 0x590B}, //1686 #CJK UNIFIED IDEOGRAPH + {0x89E7, 0x590C}, //1687 #CJK UNIFIED IDEOGRAPH + {0x89E8, 0x590E}, //1688 #CJK UNIFIED IDEOGRAPH + {0x89E9, 0x5910}, //1689 #CJK UNIFIED IDEOGRAPH + {0x89EA, 0x5911}, //1690 #CJK UNIFIED IDEOGRAPH + {0x89EB, 0x5912}, //1691 #CJK UNIFIED IDEOGRAPH + {0x89EC, 0x5913}, //1692 #CJK UNIFIED IDEOGRAPH + {0x89ED, 0x5917}, //1693 #CJK UNIFIED IDEOGRAPH + {0x89EE, 0x5918}, //1694 #CJK UNIFIED IDEOGRAPH + {0x89EF, 0x591B}, //1695 #CJK UNIFIED IDEOGRAPH + {0x89F0, 0x591D}, //1696 #CJK UNIFIED IDEOGRAPH + {0x89F1, 0x591E}, //1697 #CJK UNIFIED IDEOGRAPH + {0x89F2, 0x5920}, //1698 #CJK UNIFIED IDEOGRAPH + {0x89F3, 0x5921}, //1699 #CJK UNIFIED IDEOGRAPH + {0x89F4, 0x5922}, //1700 #CJK UNIFIED IDEOGRAPH + {0x89F5, 0x5923}, //1701 #CJK UNIFIED IDEOGRAPH + {0x89F6, 0x5926}, //1702 #CJK UNIFIED IDEOGRAPH + {0x89F7, 0x5928}, //1703 #CJK UNIFIED IDEOGRAPH + {0x89F8, 0x592C}, //1704 #CJK UNIFIED IDEOGRAPH + {0x89F9, 0x5930}, //1705 #CJK UNIFIED IDEOGRAPH + {0x89FA, 0x5932}, //1706 #CJK UNIFIED IDEOGRAPH + {0x89FB, 0x5933}, //1707 #CJK UNIFIED IDEOGRAPH + {0x89FC, 0x5935}, //1708 #CJK UNIFIED IDEOGRAPH + {0x89FD, 0x5936}, //1709 #CJK UNIFIED IDEOGRAPH + {0x89FE, 0x593B}, //1710 #CJK UNIFIED IDEOGRAPH + {0x8A40, 0x593D}, //1711 #CJK UNIFIED IDEOGRAPH + {0x8A41, 0x593E}, //1712 #CJK UNIFIED IDEOGRAPH + {0x8A42, 0x593F}, //1713 #CJK UNIFIED IDEOGRAPH + {0x8A43, 0x5940}, //1714 #CJK UNIFIED IDEOGRAPH + {0x8A44, 0x5943}, //1715 #CJK UNIFIED IDEOGRAPH + {0x8A45, 0x5945}, //1716 #CJK UNIFIED IDEOGRAPH + {0x8A46, 0x5946}, //1717 #CJK UNIFIED IDEOGRAPH + {0x8A47, 0x594A}, //1718 #CJK UNIFIED IDEOGRAPH + {0x8A48, 0x594C}, //1719 #CJK UNIFIED IDEOGRAPH + {0x8A49, 0x594D}, //1720 #CJK UNIFIED IDEOGRAPH + {0x8A4A, 0x5950}, //1721 #CJK UNIFIED IDEOGRAPH + {0x8A4B, 0x5952}, //1722 #CJK UNIFIED IDEOGRAPH + {0x8A4C, 0x5953}, //1723 #CJK UNIFIED IDEOGRAPH + {0x8A4D, 0x5959}, //1724 #CJK UNIFIED IDEOGRAPH + {0x8A4E, 0x595B}, //1725 #CJK UNIFIED IDEOGRAPH + {0x8A4F, 0x595C}, //1726 #CJK UNIFIED IDEOGRAPH + {0x8A50, 0x595D}, //1727 #CJK UNIFIED IDEOGRAPH + {0x8A51, 0x595E}, //1728 #CJK UNIFIED IDEOGRAPH + {0x8A52, 0x595F}, //1729 #CJK UNIFIED IDEOGRAPH + {0x8A53, 0x5961}, //1730 #CJK UNIFIED IDEOGRAPH + {0x8A54, 0x5963}, //1731 #CJK UNIFIED IDEOGRAPH + {0x8A55, 0x5964}, //1732 #CJK UNIFIED IDEOGRAPH + {0x8A56, 0x5966}, //1733 #CJK UNIFIED IDEOGRAPH + {0x8A57, 0x5967}, //1734 #CJK UNIFIED IDEOGRAPH + {0x8A58, 0x5968}, //1735 #CJK UNIFIED IDEOGRAPH + {0x8A59, 0x5969}, //1736 #CJK UNIFIED IDEOGRAPH + {0x8A5A, 0x596A}, //1737 #CJK UNIFIED IDEOGRAPH + {0x8A5B, 0x596B}, //1738 #CJK UNIFIED IDEOGRAPH + {0x8A5C, 0x596C}, //1739 #CJK UNIFIED IDEOGRAPH + {0x8A5D, 0x596D}, //1740 #CJK UNIFIED IDEOGRAPH + {0x8A5E, 0x596E}, //1741 #CJK UNIFIED IDEOGRAPH + {0x8A5F, 0x596F}, //1742 #CJK UNIFIED IDEOGRAPH + {0x8A60, 0x5970}, //1743 #CJK UNIFIED IDEOGRAPH + {0x8A61, 0x5971}, //1744 #CJK UNIFIED IDEOGRAPH + {0x8A62, 0x5972}, //1745 #CJK UNIFIED IDEOGRAPH + {0x8A63, 0x5975}, //1746 #CJK UNIFIED IDEOGRAPH + {0x8A64, 0x5977}, //1747 #CJK UNIFIED IDEOGRAPH + {0x8A65, 0x597A}, //1748 #CJK UNIFIED IDEOGRAPH + {0x8A66, 0x597B}, //1749 #CJK UNIFIED IDEOGRAPH + {0x8A67, 0x597C}, //1750 #CJK UNIFIED IDEOGRAPH + {0x8A68, 0x597E}, //1751 #CJK UNIFIED IDEOGRAPH + {0x8A69, 0x597F}, //1752 #CJK UNIFIED IDEOGRAPH + {0x8A6A, 0x5980}, //1753 #CJK UNIFIED IDEOGRAPH + {0x8A6B, 0x5985}, //1754 #CJK UNIFIED IDEOGRAPH + {0x8A6C, 0x5989}, //1755 #CJK UNIFIED IDEOGRAPH + {0x8A6D, 0x598B}, //1756 #CJK UNIFIED IDEOGRAPH + {0x8A6E, 0x598C}, //1757 #CJK UNIFIED IDEOGRAPH + {0x8A6F, 0x598E}, //1758 #CJK UNIFIED IDEOGRAPH + {0x8A70, 0x598F}, //1759 #CJK UNIFIED IDEOGRAPH + {0x8A71, 0x5990}, //1760 #CJK UNIFIED IDEOGRAPH + {0x8A72, 0x5991}, //1761 #CJK UNIFIED IDEOGRAPH + {0x8A73, 0x5994}, //1762 #CJK UNIFIED IDEOGRAPH + {0x8A74, 0x5995}, //1763 #CJK UNIFIED IDEOGRAPH + {0x8A75, 0x5998}, //1764 #CJK UNIFIED IDEOGRAPH + {0x8A76, 0x599A}, //1765 #CJK UNIFIED IDEOGRAPH + {0x8A77, 0x599B}, //1766 #CJK UNIFIED IDEOGRAPH + {0x8A78, 0x599C}, //1767 #CJK UNIFIED IDEOGRAPH + {0x8A79, 0x599D}, //1768 #CJK UNIFIED IDEOGRAPH + {0x8A7A, 0x599F}, //1769 #CJK UNIFIED IDEOGRAPH + {0x8A7B, 0x59A0}, //1770 #CJK UNIFIED IDEOGRAPH + {0x8A7C, 0x59A1}, //1771 #CJK UNIFIED IDEOGRAPH + {0x8A7D, 0x59A2}, //1772 #CJK UNIFIED IDEOGRAPH + {0x8A7E, 0x59A6}, //1773 #CJK UNIFIED IDEOGRAPH + {0x8A80, 0x59A7}, //1774 #CJK UNIFIED IDEOGRAPH + {0x8A81, 0x59AC}, //1775 #CJK UNIFIED IDEOGRAPH + {0x8A82, 0x59AD}, //1776 #CJK UNIFIED IDEOGRAPH + {0x8A83, 0x59B0}, //1777 #CJK UNIFIED IDEOGRAPH + {0x8A84, 0x59B1}, //1778 #CJK UNIFIED IDEOGRAPH + {0x8A85, 0x59B3}, //1779 #CJK UNIFIED IDEOGRAPH + {0x8A86, 0x59B4}, //1780 #CJK UNIFIED IDEOGRAPH + {0x8A87, 0x59B5}, //1781 #CJK UNIFIED IDEOGRAPH + {0x8A88, 0x59B6}, //1782 #CJK UNIFIED IDEOGRAPH + {0x8A89, 0x59B7}, //1783 #CJK UNIFIED IDEOGRAPH + {0x8A8A, 0x59B8}, //1784 #CJK UNIFIED IDEOGRAPH + {0x8A8B, 0x59BA}, //1785 #CJK UNIFIED IDEOGRAPH + {0x8A8C, 0x59BC}, //1786 #CJK UNIFIED IDEOGRAPH + {0x8A8D, 0x59BD}, //1787 #CJK UNIFIED IDEOGRAPH + {0x8A8E, 0x59BF}, //1788 #CJK UNIFIED IDEOGRAPH + {0x8A8F, 0x59C0}, //1789 #CJK UNIFIED IDEOGRAPH + {0x8A90, 0x59C1}, //1790 #CJK UNIFIED IDEOGRAPH + {0x8A91, 0x59C2}, //1791 #CJK UNIFIED IDEOGRAPH + {0x8A92, 0x59C3}, //1792 #CJK UNIFIED IDEOGRAPH + {0x8A93, 0x59C4}, //1793 #CJK UNIFIED IDEOGRAPH + {0x8A94, 0x59C5}, //1794 #CJK UNIFIED IDEOGRAPH + {0x8A95, 0x59C7}, //1795 #CJK UNIFIED IDEOGRAPH + {0x8A96, 0x59C8}, //1796 #CJK UNIFIED IDEOGRAPH + {0x8A97, 0x59C9}, //1797 #CJK UNIFIED IDEOGRAPH + {0x8A98, 0x59CC}, //1798 #CJK UNIFIED IDEOGRAPH + {0x8A99, 0x59CD}, //1799 #CJK UNIFIED IDEOGRAPH + {0x8A9A, 0x59CE}, //1800 #CJK UNIFIED IDEOGRAPH + {0x8A9B, 0x59CF}, //1801 #CJK UNIFIED IDEOGRAPH + {0x8A9C, 0x59D5}, //1802 #CJK UNIFIED IDEOGRAPH + {0x8A9D, 0x59D6}, //1803 #CJK UNIFIED IDEOGRAPH + {0x8A9E, 0x59D9}, //1804 #CJK UNIFIED IDEOGRAPH + {0x8A9F, 0x59DB}, //1805 #CJK UNIFIED IDEOGRAPH + {0x8AA0, 0x59DE}, //1806 #CJK UNIFIED IDEOGRAPH + {0x8AA1, 0x59DF}, //1807 #CJK UNIFIED IDEOGRAPH + {0x8AA2, 0x59E0}, //1808 #CJK UNIFIED IDEOGRAPH + {0x8AA3, 0x59E1}, //1809 #CJK UNIFIED IDEOGRAPH + {0x8AA4, 0x59E2}, //1810 #CJK UNIFIED IDEOGRAPH + {0x8AA5, 0x59E4}, //1811 #CJK UNIFIED IDEOGRAPH + {0x8AA6, 0x59E6}, //1812 #CJK UNIFIED IDEOGRAPH + {0x8AA7, 0x59E7}, //1813 #CJK UNIFIED IDEOGRAPH + {0x8AA8, 0x59E9}, //1814 #CJK UNIFIED IDEOGRAPH + {0x8AA9, 0x59EA}, //1815 #CJK UNIFIED IDEOGRAPH + {0x8AAA, 0x59EB}, //1816 #CJK UNIFIED IDEOGRAPH + {0x8AAB, 0x59ED}, //1817 #CJK UNIFIED IDEOGRAPH + {0x8AAC, 0x59EE}, //1818 #CJK UNIFIED IDEOGRAPH + {0x8AAD, 0x59EF}, //1819 #CJK UNIFIED IDEOGRAPH + {0x8AAE, 0x59F0}, //1820 #CJK UNIFIED IDEOGRAPH + {0x8AAF, 0x59F1}, //1821 #CJK UNIFIED IDEOGRAPH + {0x8AB0, 0x59F2}, //1822 #CJK UNIFIED IDEOGRAPH + {0x8AB1, 0x59F3}, //1823 #CJK UNIFIED IDEOGRAPH + {0x8AB2, 0x59F4}, //1824 #CJK UNIFIED IDEOGRAPH + {0x8AB3, 0x59F5}, //1825 #CJK UNIFIED IDEOGRAPH + {0x8AB4, 0x59F6}, //1826 #CJK UNIFIED IDEOGRAPH + {0x8AB5, 0x59F7}, //1827 #CJK UNIFIED IDEOGRAPH + {0x8AB6, 0x59F8}, //1828 #CJK UNIFIED IDEOGRAPH + {0x8AB7, 0x59FA}, //1829 #CJK UNIFIED IDEOGRAPH + {0x8AB8, 0x59FC}, //1830 #CJK UNIFIED IDEOGRAPH + {0x8AB9, 0x59FD}, //1831 #CJK UNIFIED IDEOGRAPH + {0x8ABA, 0x59FE}, //1832 #CJK UNIFIED IDEOGRAPH + {0x8ABB, 0x5A00}, //1833 #CJK UNIFIED IDEOGRAPH + {0x8ABC, 0x5A02}, //1834 #CJK UNIFIED IDEOGRAPH + {0x8ABD, 0x5A0A}, //1835 #CJK UNIFIED IDEOGRAPH + {0x8ABE, 0x5A0B}, //1836 #CJK UNIFIED IDEOGRAPH + {0x8ABF, 0x5A0D}, //1837 #CJK UNIFIED IDEOGRAPH + {0x8AC0, 0x5A0E}, //1838 #CJK UNIFIED IDEOGRAPH + {0x8AC1, 0x5A0F}, //1839 #CJK UNIFIED IDEOGRAPH + {0x8AC2, 0x5A10}, //1840 #CJK UNIFIED IDEOGRAPH + {0x8AC3, 0x5A12}, //1841 #CJK UNIFIED IDEOGRAPH + {0x8AC4, 0x5A14}, //1842 #CJK UNIFIED IDEOGRAPH + {0x8AC5, 0x5A15}, //1843 #CJK UNIFIED IDEOGRAPH + {0x8AC6, 0x5A16}, //1844 #CJK UNIFIED IDEOGRAPH + {0x8AC7, 0x5A17}, //1845 #CJK UNIFIED IDEOGRAPH + {0x8AC8, 0x5A19}, //1846 #CJK UNIFIED IDEOGRAPH + {0x8AC9, 0x5A1A}, //1847 #CJK UNIFIED IDEOGRAPH + {0x8ACA, 0x5A1B}, //1848 #CJK UNIFIED IDEOGRAPH + {0x8ACB, 0x5A1D}, //1849 #CJK UNIFIED IDEOGRAPH + {0x8ACC, 0x5A1E}, //1850 #CJK UNIFIED IDEOGRAPH + {0x8ACD, 0x5A21}, //1851 #CJK UNIFIED IDEOGRAPH + {0x8ACE, 0x5A22}, //1852 #CJK UNIFIED IDEOGRAPH + {0x8ACF, 0x5A24}, //1853 #CJK UNIFIED IDEOGRAPH + {0x8AD0, 0x5A26}, //1854 #CJK UNIFIED IDEOGRAPH + {0x8AD1, 0x5A27}, //1855 #CJK UNIFIED IDEOGRAPH + {0x8AD2, 0x5A28}, //1856 #CJK UNIFIED IDEOGRAPH + {0x8AD3, 0x5A2A}, //1857 #CJK UNIFIED IDEOGRAPH + {0x8AD4, 0x5A2B}, //1858 #CJK UNIFIED IDEOGRAPH + {0x8AD5, 0x5A2C}, //1859 #CJK UNIFIED IDEOGRAPH + {0x8AD6, 0x5A2D}, //1860 #CJK UNIFIED IDEOGRAPH + {0x8AD7, 0x5A2E}, //1861 #CJK UNIFIED IDEOGRAPH + {0x8AD8, 0x5A2F}, //1862 #CJK UNIFIED IDEOGRAPH + {0x8AD9, 0x5A30}, //1863 #CJK UNIFIED IDEOGRAPH + {0x8ADA, 0x5A33}, //1864 #CJK UNIFIED IDEOGRAPH + {0x8ADB, 0x5A35}, //1865 #CJK UNIFIED IDEOGRAPH + {0x8ADC, 0x5A37}, //1866 #CJK UNIFIED IDEOGRAPH + {0x8ADD, 0x5A38}, //1867 #CJK UNIFIED IDEOGRAPH + {0x8ADE, 0x5A39}, //1868 #CJK UNIFIED IDEOGRAPH + {0x8ADF, 0x5A3A}, //1869 #CJK UNIFIED IDEOGRAPH + {0x8AE0, 0x5A3B}, //1870 #CJK UNIFIED IDEOGRAPH + {0x8AE1, 0x5A3D}, //1871 #CJK UNIFIED IDEOGRAPH + {0x8AE2, 0x5A3E}, //1872 #CJK UNIFIED IDEOGRAPH + {0x8AE3, 0x5A3F}, //1873 #CJK UNIFIED IDEOGRAPH + {0x8AE4, 0x5A41}, //1874 #CJK UNIFIED IDEOGRAPH + {0x8AE5, 0x5A42}, //1875 #CJK UNIFIED IDEOGRAPH + {0x8AE6, 0x5A43}, //1876 #CJK UNIFIED IDEOGRAPH + {0x8AE7, 0x5A44}, //1877 #CJK UNIFIED IDEOGRAPH + {0x8AE8, 0x5A45}, //1878 #CJK UNIFIED IDEOGRAPH + {0x8AE9, 0x5A47}, //1879 #CJK UNIFIED IDEOGRAPH + {0x8AEA, 0x5A48}, //1880 #CJK UNIFIED IDEOGRAPH + {0x8AEB, 0x5A4B}, //1881 #CJK UNIFIED IDEOGRAPH + {0x8AEC, 0x5A4C}, //1882 #CJK UNIFIED IDEOGRAPH + {0x8AED, 0x5A4D}, //1883 #CJK UNIFIED IDEOGRAPH + {0x8AEE, 0x5A4E}, //1884 #CJK UNIFIED IDEOGRAPH + {0x8AEF, 0x5A4F}, //1885 #CJK UNIFIED IDEOGRAPH + {0x8AF0, 0x5A50}, //1886 #CJK UNIFIED IDEOGRAPH + {0x8AF1, 0x5A51}, //1887 #CJK UNIFIED IDEOGRAPH + {0x8AF2, 0x5A52}, //1888 #CJK UNIFIED IDEOGRAPH + {0x8AF3, 0x5A53}, //1889 #CJK UNIFIED IDEOGRAPH + {0x8AF4, 0x5A54}, //1890 #CJK UNIFIED IDEOGRAPH + {0x8AF5, 0x5A56}, //1891 #CJK UNIFIED IDEOGRAPH + {0x8AF6, 0x5A57}, //1892 #CJK UNIFIED IDEOGRAPH + {0x8AF7, 0x5A58}, //1893 #CJK UNIFIED IDEOGRAPH + {0x8AF8, 0x5A59}, //1894 #CJK UNIFIED IDEOGRAPH + {0x8AF9, 0x5A5B}, //1895 #CJK UNIFIED IDEOGRAPH + {0x8AFA, 0x5A5C}, //1896 #CJK UNIFIED IDEOGRAPH + {0x8AFB, 0x5A5D}, //1897 #CJK UNIFIED IDEOGRAPH + {0x8AFC, 0x5A5E}, //1898 #CJK UNIFIED IDEOGRAPH + {0x8AFD, 0x5A5F}, //1899 #CJK UNIFIED IDEOGRAPH + {0x8AFE, 0x5A60}, //1900 #CJK UNIFIED IDEOGRAPH + {0x8B40, 0x5A61}, //1901 #CJK UNIFIED IDEOGRAPH + {0x8B41, 0x5A63}, //1902 #CJK UNIFIED IDEOGRAPH + {0x8B42, 0x5A64}, //1903 #CJK UNIFIED IDEOGRAPH + {0x8B43, 0x5A65}, //1904 #CJK UNIFIED IDEOGRAPH + {0x8B44, 0x5A66}, //1905 #CJK UNIFIED IDEOGRAPH + {0x8B45, 0x5A68}, //1906 #CJK UNIFIED IDEOGRAPH + {0x8B46, 0x5A69}, //1907 #CJK UNIFIED IDEOGRAPH + {0x8B47, 0x5A6B}, //1908 #CJK UNIFIED IDEOGRAPH + {0x8B48, 0x5A6C}, //1909 #CJK UNIFIED IDEOGRAPH + {0x8B49, 0x5A6D}, //1910 #CJK UNIFIED IDEOGRAPH + {0x8B4A, 0x5A6E}, //1911 #CJK UNIFIED IDEOGRAPH + {0x8B4B, 0x5A6F}, //1912 #CJK UNIFIED IDEOGRAPH + {0x8B4C, 0x5A70}, //1913 #CJK UNIFIED IDEOGRAPH + {0x8B4D, 0x5A71}, //1914 #CJK UNIFIED IDEOGRAPH + {0x8B4E, 0x5A72}, //1915 #CJK UNIFIED IDEOGRAPH + {0x8B4F, 0x5A73}, //1916 #CJK UNIFIED IDEOGRAPH + {0x8B50, 0x5A78}, //1917 #CJK UNIFIED IDEOGRAPH + {0x8B51, 0x5A79}, //1918 #CJK UNIFIED IDEOGRAPH + {0x8B52, 0x5A7B}, //1919 #CJK UNIFIED IDEOGRAPH + {0x8B53, 0x5A7C}, //1920 #CJK UNIFIED IDEOGRAPH + {0x8B54, 0x5A7D}, //1921 #CJK UNIFIED IDEOGRAPH + {0x8B55, 0x5A7E}, //1922 #CJK UNIFIED IDEOGRAPH + {0x8B56, 0x5A80}, //1923 #CJK UNIFIED IDEOGRAPH + {0x8B57, 0x5A81}, //1924 #CJK UNIFIED IDEOGRAPH + {0x8B58, 0x5A82}, //1925 #CJK UNIFIED IDEOGRAPH + {0x8B59, 0x5A83}, //1926 #CJK UNIFIED IDEOGRAPH + {0x8B5A, 0x5A84}, //1927 #CJK UNIFIED IDEOGRAPH + {0x8B5B, 0x5A85}, //1928 #CJK UNIFIED IDEOGRAPH + {0x8B5C, 0x5A86}, //1929 #CJK UNIFIED IDEOGRAPH + {0x8B5D, 0x5A87}, //1930 #CJK UNIFIED IDEOGRAPH + {0x8B5E, 0x5A88}, //1931 #CJK UNIFIED IDEOGRAPH + {0x8B5F, 0x5A89}, //1932 #CJK UNIFIED IDEOGRAPH + {0x8B60, 0x5A8A}, //1933 #CJK UNIFIED IDEOGRAPH + {0x8B61, 0x5A8B}, //1934 #CJK UNIFIED IDEOGRAPH + {0x8B62, 0x5A8C}, //1935 #CJK UNIFIED IDEOGRAPH + {0x8B63, 0x5A8D}, //1936 #CJK UNIFIED IDEOGRAPH + {0x8B64, 0x5A8E}, //1937 #CJK UNIFIED IDEOGRAPH + {0x8B65, 0x5A8F}, //1938 #CJK UNIFIED IDEOGRAPH + {0x8B66, 0x5A90}, //1939 #CJK UNIFIED IDEOGRAPH + {0x8B67, 0x5A91}, //1940 #CJK UNIFIED IDEOGRAPH + {0x8B68, 0x5A93}, //1941 #CJK UNIFIED IDEOGRAPH + {0x8B69, 0x5A94}, //1942 #CJK UNIFIED IDEOGRAPH + {0x8B6A, 0x5A95}, //1943 #CJK UNIFIED IDEOGRAPH + {0x8B6B, 0x5A96}, //1944 #CJK UNIFIED IDEOGRAPH + {0x8B6C, 0x5A97}, //1945 #CJK UNIFIED IDEOGRAPH + {0x8B6D, 0x5A98}, //1946 #CJK UNIFIED IDEOGRAPH + {0x8B6E, 0x5A99}, //1947 #CJK UNIFIED IDEOGRAPH + {0x8B6F, 0x5A9C}, //1948 #CJK UNIFIED IDEOGRAPH + {0x8B70, 0x5A9D}, //1949 #CJK UNIFIED IDEOGRAPH + {0x8B71, 0x5A9E}, //1950 #CJK UNIFIED IDEOGRAPH + {0x8B72, 0x5A9F}, //1951 #CJK UNIFIED IDEOGRAPH + {0x8B73, 0x5AA0}, //1952 #CJK UNIFIED IDEOGRAPH + {0x8B74, 0x5AA1}, //1953 #CJK UNIFIED IDEOGRAPH + {0x8B75, 0x5AA2}, //1954 #CJK UNIFIED IDEOGRAPH + {0x8B76, 0x5AA3}, //1955 #CJK UNIFIED IDEOGRAPH + {0x8B77, 0x5AA4}, //1956 #CJK UNIFIED IDEOGRAPH + {0x8B78, 0x5AA5}, //1957 #CJK UNIFIED IDEOGRAPH + {0x8B79, 0x5AA6}, //1958 #CJK UNIFIED IDEOGRAPH + {0x8B7A, 0x5AA7}, //1959 #CJK UNIFIED IDEOGRAPH + {0x8B7B, 0x5AA8}, //1960 #CJK UNIFIED IDEOGRAPH + {0x8B7C, 0x5AA9}, //1961 #CJK UNIFIED IDEOGRAPH + {0x8B7D, 0x5AAB}, //1962 #CJK UNIFIED IDEOGRAPH + {0x8B7E, 0x5AAC}, //1963 #CJK UNIFIED IDEOGRAPH + {0x8B80, 0x5AAD}, //1964 #CJK UNIFIED IDEOGRAPH + {0x8B81, 0x5AAE}, //1965 #CJK UNIFIED IDEOGRAPH + {0x8B82, 0x5AAF}, //1966 #CJK UNIFIED IDEOGRAPH + {0x8B83, 0x5AB0}, //1967 #CJK UNIFIED IDEOGRAPH + {0x8B84, 0x5AB1}, //1968 #CJK UNIFIED IDEOGRAPH + {0x8B85, 0x5AB4}, //1969 #CJK UNIFIED IDEOGRAPH + {0x8B86, 0x5AB6}, //1970 #CJK UNIFIED IDEOGRAPH + {0x8B87, 0x5AB7}, //1971 #CJK UNIFIED IDEOGRAPH + {0x8B88, 0x5AB9}, //1972 #CJK UNIFIED IDEOGRAPH + {0x8B89, 0x5ABA}, //1973 #CJK UNIFIED IDEOGRAPH + {0x8B8A, 0x5ABB}, //1974 #CJK UNIFIED IDEOGRAPH + {0x8B8B, 0x5ABC}, //1975 #CJK UNIFIED IDEOGRAPH + {0x8B8C, 0x5ABD}, //1976 #CJK UNIFIED IDEOGRAPH + {0x8B8D, 0x5ABF}, //1977 #CJK UNIFIED IDEOGRAPH + {0x8B8E, 0x5AC0}, //1978 #CJK UNIFIED IDEOGRAPH + {0x8B8F, 0x5AC3}, //1979 #CJK UNIFIED IDEOGRAPH + {0x8B90, 0x5AC4}, //1980 #CJK UNIFIED IDEOGRAPH + {0x8B91, 0x5AC5}, //1981 #CJK UNIFIED IDEOGRAPH + {0x8B92, 0x5AC6}, //1982 #CJK UNIFIED IDEOGRAPH + {0x8B93, 0x5AC7}, //1983 #CJK UNIFIED IDEOGRAPH + {0x8B94, 0x5AC8}, //1984 #CJK UNIFIED IDEOGRAPH + {0x8B95, 0x5ACA}, //1985 #CJK UNIFIED IDEOGRAPH + {0x8B96, 0x5ACB}, //1986 #CJK UNIFIED IDEOGRAPH + {0x8B97, 0x5ACD}, //1987 #CJK UNIFIED IDEOGRAPH + {0x8B98, 0x5ACE}, //1988 #CJK UNIFIED IDEOGRAPH + {0x8B99, 0x5ACF}, //1989 #CJK UNIFIED IDEOGRAPH + {0x8B9A, 0x5AD0}, //1990 #CJK UNIFIED IDEOGRAPH + {0x8B9B, 0x5AD1}, //1991 #CJK UNIFIED IDEOGRAPH + {0x8B9C, 0x5AD3}, //1992 #CJK UNIFIED IDEOGRAPH + {0x8B9D, 0x5AD5}, //1993 #CJK UNIFIED IDEOGRAPH + {0x8B9E, 0x5AD7}, //1994 #CJK UNIFIED IDEOGRAPH + {0x8B9F, 0x5AD9}, //1995 #CJK UNIFIED IDEOGRAPH + {0x8BA0, 0x5ADA}, //1996 #CJK UNIFIED IDEOGRAPH + {0x8BA1, 0x5ADB}, //1997 #CJK UNIFIED IDEOGRAPH + {0x8BA2, 0x5ADD}, //1998 #CJK UNIFIED IDEOGRAPH + {0x8BA3, 0x5ADE}, //1999 #CJK UNIFIED IDEOGRAPH + {0x8BA4, 0x5ADF}, //2000 #CJK UNIFIED IDEOGRAPH + {0x8BA5, 0x5AE2}, //2001 #CJK UNIFIED IDEOGRAPH + {0x8BA6, 0x5AE4}, //2002 #CJK UNIFIED IDEOGRAPH + {0x8BA7, 0x5AE5}, //2003 #CJK UNIFIED IDEOGRAPH + {0x8BA8, 0x5AE7}, //2004 #CJK UNIFIED IDEOGRAPH + {0x8BA9, 0x5AE8}, //2005 #CJK UNIFIED IDEOGRAPH + {0x8BAA, 0x5AEA}, //2006 #CJK UNIFIED IDEOGRAPH + {0x8BAB, 0x5AEC}, //2007 #CJK UNIFIED IDEOGRAPH + {0x8BAC, 0x5AED}, //2008 #CJK UNIFIED IDEOGRAPH + {0x8BAD, 0x5AEE}, //2009 #CJK UNIFIED IDEOGRAPH + {0x8BAE, 0x5AEF}, //2010 #CJK UNIFIED IDEOGRAPH + {0x8BAF, 0x5AF0}, //2011 #CJK UNIFIED IDEOGRAPH + {0x8BB0, 0x5AF2}, //2012 #CJK UNIFIED IDEOGRAPH + {0x8BB1, 0x5AF3}, //2013 #CJK UNIFIED IDEOGRAPH + {0x8BB2, 0x5AF4}, //2014 #CJK UNIFIED IDEOGRAPH + {0x8BB3, 0x5AF5}, //2015 #CJK UNIFIED IDEOGRAPH + {0x8BB4, 0x5AF6}, //2016 #CJK UNIFIED IDEOGRAPH + {0x8BB5, 0x5AF7}, //2017 #CJK UNIFIED IDEOGRAPH + {0x8BB6, 0x5AF8}, //2018 #CJK UNIFIED IDEOGRAPH + {0x8BB7, 0x5AF9}, //2019 #CJK UNIFIED IDEOGRAPH + {0x8BB8, 0x5AFA}, //2020 #CJK UNIFIED IDEOGRAPH + {0x8BB9, 0x5AFB}, //2021 #CJK UNIFIED IDEOGRAPH + {0x8BBA, 0x5AFC}, //2022 #CJK UNIFIED IDEOGRAPH + {0x8BBB, 0x5AFD}, //2023 #CJK UNIFIED IDEOGRAPH + {0x8BBC, 0x5AFE}, //2024 #CJK UNIFIED IDEOGRAPH + {0x8BBD, 0x5AFF}, //2025 #CJK UNIFIED IDEOGRAPH + {0x8BBE, 0x5B00}, //2026 #CJK UNIFIED IDEOGRAPH + {0x8BBF, 0x5B01}, //2027 #CJK UNIFIED IDEOGRAPH + {0x8BC0, 0x5B02}, //2028 #CJK UNIFIED IDEOGRAPH + {0x8BC1, 0x5B03}, //2029 #CJK UNIFIED IDEOGRAPH + {0x8BC2, 0x5B04}, //2030 #CJK UNIFIED IDEOGRAPH + {0x8BC3, 0x5B05}, //2031 #CJK UNIFIED IDEOGRAPH + {0x8BC4, 0x5B06}, //2032 #CJK UNIFIED IDEOGRAPH + {0x8BC5, 0x5B07}, //2033 #CJK UNIFIED IDEOGRAPH + {0x8BC6, 0x5B08}, //2034 #CJK UNIFIED IDEOGRAPH + {0x8BC7, 0x5B0A}, //2035 #CJK UNIFIED IDEOGRAPH + {0x8BC8, 0x5B0B}, //2036 #CJK UNIFIED IDEOGRAPH + {0x8BC9, 0x5B0C}, //2037 #CJK UNIFIED IDEOGRAPH + {0x8BCA, 0x5B0D}, //2038 #CJK UNIFIED IDEOGRAPH + {0x8BCB, 0x5B0E}, //2039 #CJK UNIFIED IDEOGRAPH + {0x8BCC, 0x5B0F}, //2040 #CJK UNIFIED IDEOGRAPH + {0x8BCD, 0x5B10}, //2041 #CJK UNIFIED IDEOGRAPH + {0x8BCE, 0x5B11}, //2042 #CJK UNIFIED IDEOGRAPH + {0x8BCF, 0x5B12}, //2043 #CJK UNIFIED IDEOGRAPH + {0x8BD0, 0x5B13}, //2044 #CJK UNIFIED IDEOGRAPH + {0x8BD1, 0x5B14}, //2045 #CJK UNIFIED IDEOGRAPH + {0x8BD2, 0x5B15}, //2046 #CJK UNIFIED IDEOGRAPH + {0x8BD3, 0x5B18}, //2047 #CJK UNIFIED IDEOGRAPH + {0x8BD4, 0x5B19}, //2048 #CJK UNIFIED IDEOGRAPH + {0x8BD5, 0x5B1A}, //2049 #CJK UNIFIED IDEOGRAPH + {0x8BD6, 0x5B1B}, //2050 #CJK UNIFIED IDEOGRAPH + {0x8BD7, 0x5B1C}, //2051 #CJK UNIFIED IDEOGRAPH + {0x8BD8, 0x5B1D}, //2052 #CJK UNIFIED IDEOGRAPH + {0x8BD9, 0x5B1E}, //2053 #CJK UNIFIED IDEOGRAPH + {0x8BDA, 0x5B1F}, //2054 #CJK UNIFIED IDEOGRAPH + {0x8BDB, 0x5B20}, //2055 #CJK UNIFIED IDEOGRAPH + {0x8BDC, 0x5B21}, //2056 #CJK UNIFIED IDEOGRAPH + {0x8BDD, 0x5B22}, //2057 #CJK UNIFIED IDEOGRAPH + {0x8BDE, 0x5B23}, //2058 #CJK UNIFIED IDEOGRAPH + {0x8BDF, 0x5B24}, //2059 #CJK UNIFIED IDEOGRAPH + {0x8BE0, 0x5B25}, //2060 #CJK UNIFIED IDEOGRAPH + {0x8BE1, 0x5B26}, //2061 #CJK UNIFIED IDEOGRAPH + {0x8BE2, 0x5B27}, //2062 #CJK UNIFIED IDEOGRAPH + {0x8BE3, 0x5B28}, //2063 #CJK UNIFIED IDEOGRAPH + {0x8BE4, 0x5B29}, //2064 #CJK UNIFIED IDEOGRAPH + {0x8BE5, 0x5B2A}, //2065 #CJK UNIFIED IDEOGRAPH + {0x8BE6, 0x5B2B}, //2066 #CJK UNIFIED IDEOGRAPH + {0x8BE7, 0x5B2C}, //2067 #CJK UNIFIED IDEOGRAPH + {0x8BE8, 0x5B2D}, //2068 #CJK UNIFIED IDEOGRAPH + {0x8BE9, 0x5B2E}, //2069 #CJK UNIFIED IDEOGRAPH + {0x8BEA, 0x5B2F}, //2070 #CJK UNIFIED IDEOGRAPH + {0x8BEB, 0x5B30}, //2071 #CJK UNIFIED IDEOGRAPH + {0x8BEC, 0x5B31}, //2072 #CJK UNIFIED IDEOGRAPH + {0x8BED, 0x5B33}, //2073 #CJK UNIFIED IDEOGRAPH + {0x8BEE, 0x5B35}, //2074 #CJK UNIFIED IDEOGRAPH + {0x8BEF, 0x5B36}, //2075 #CJK UNIFIED IDEOGRAPH + {0x8BF0, 0x5B38}, //2076 #CJK UNIFIED IDEOGRAPH + {0x8BF1, 0x5B39}, //2077 #CJK UNIFIED IDEOGRAPH + {0x8BF2, 0x5B3A}, //2078 #CJK UNIFIED IDEOGRAPH + {0x8BF3, 0x5B3B}, //2079 #CJK UNIFIED IDEOGRAPH + {0x8BF4, 0x5B3C}, //2080 #CJK UNIFIED IDEOGRAPH + {0x8BF5, 0x5B3D}, //2081 #CJK UNIFIED IDEOGRAPH + {0x8BF6, 0x5B3E}, //2082 #CJK UNIFIED IDEOGRAPH + {0x8BF7, 0x5B3F}, //2083 #CJK UNIFIED IDEOGRAPH + {0x8BF8, 0x5B41}, //2084 #CJK UNIFIED IDEOGRAPH + {0x8BF9, 0x5B42}, //2085 #CJK UNIFIED IDEOGRAPH + {0x8BFA, 0x5B43}, //2086 #CJK UNIFIED IDEOGRAPH + {0x8BFB, 0x5B44}, //2087 #CJK UNIFIED IDEOGRAPH + {0x8BFC, 0x5B45}, //2088 #CJK UNIFIED IDEOGRAPH + {0x8BFD, 0x5B46}, //2089 #CJK UNIFIED IDEOGRAPH + {0x8BFE, 0x5B47}, //2090 #CJK UNIFIED IDEOGRAPH + {0x8C40, 0x5B48}, //2091 #CJK UNIFIED IDEOGRAPH + {0x8C41, 0x5B49}, //2092 #CJK UNIFIED IDEOGRAPH + {0x8C42, 0x5B4A}, //2093 #CJK UNIFIED IDEOGRAPH + {0x8C43, 0x5B4B}, //2094 #CJK UNIFIED IDEOGRAPH + {0x8C44, 0x5B4C}, //2095 #CJK UNIFIED IDEOGRAPH + {0x8C45, 0x5B4D}, //2096 #CJK UNIFIED IDEOGRAPH + {0x8C46, 0x5B4E}, //2097 #CJK UNIFIED IDEOGRAPH + {0x8C47, 0x5B4F}, //2098 #CJK UNIFIED IDEOGRAPH + {0x8C48, 0x5B52}, //2099 #CJK UNIFIED IDEOGRAPH + {0x8C49, 0x5B56}, //2100 #CJK UNIFIED IDEOGRAPH + {0x8C4A, 0x5B5E}, //2101 #CJK UNIFIED IDEOGRAPH + {0x8C4B, 0x5B60}, //2102 #CJK UNIFIED IDEOGRAPH + {0x8C4C, 0x5B61}, //2103 #CJK UNIFIED IDEOGRAPH + {0x8C4D, 0x5B67}, //2104 #CJK UNIFIED IDEOGRAPH + {0x8C4E, 0x5B68}, //2105 #CJK UNIFIED IDEOGRAPH + {0x8C4F, 0x5B6B}, //2106 #CJK UNIFIED IDEOGRAPH + {0x8C50, 0x5B6D}, //2107 #CJK UNIFIED IDEOGRAPH + {0x8C51, 0x5B6E}, //2108 #CJK UNIFIED IDEOGRAPH + {0x8C52, 0x5B6F}, //2109 #CJK UNIFIED IDEOGRAPH + {0x8C53, 0x5B72}, //2110 #CJK UNIFIED IDEOGRAPH + {0x8C54, 0x5B74}, //2111 #CJK UNIFIED IDEOGRAPH + {0x8C55, 0x5B76}, //2112 #CJK UNIFIED IDEOGRAPH + {0x8C56, 0x5B77}, //2113 #CJK UNIFIED IDEOGRAPH + {0x8C57, 0x5B78}, //2114 #CJK UNIFIED IDEOGRAPH + {0x8C58, 0x5B79}, //2115 #CJK UNIFIED IDEOGRAPH + {0x8C59, 0x5B7B}, //2116 #CJK UNIFIED IDEOGRAPH + {0x8C5A, 0x5B7C}, //2117 #CJK UNIFIED IDEOGRAPH + {0x8C5B, 0x5B7E}, //2118 #CJK UNIFIED IDEOGRAPH + {0x8C5C, 0x5B7F}, //2119 #CJK UNIFIED IDEOGRAPH + {0x8C5D, 0x5B82}, //2120 #CJK UNIFIED IDEOGRAPH + {0x8C5E, 0x5B86}, //2121 #CJK UNIFIED IDEOGRAPH + {0x8C5F, 0x5B8A}, //2122 #CJK UNIFIED IDEOGRAPH + {0x8C60, 0x5B8D}, //2123 #CJK UNIFIED IDEOGRAPH + {0x8C61, 0x5B8E}, //2124 #CJK UNIFIED IDEOGRAPH + {0x8C62, 0x5B90}, //2125 #CJK UNIFIED IDEOGRAPH + {0x8C63, 0x5B91}, //2126 #CJK UNIFIED IDEOGRAPH + {0x8C64, 0x5B92}, //2127 #CJK UNIFIED IDEOGRAPH + {0x8C65, 0x5B94}, //2128 #CJK UNIFIED IDEOGRAPH + {0x8C66, 0x5B96}, //2129 #CJK UNIFIED IDEOGRAPH + {0x8C67, 0x5B9F}, //2130 #CJK UNIFIED IDEOGRAPH + {0x8C68, 0x5BA7}, //2131 #CJK UNIFIED IDEOGRAPH + {0x8C69, 0x5BA8}, //2132 #CJK UNIFIED IDEOGRAPH + {0x8C6A, 0x5BA9}, //2133 #CJK UNIFIED IDEOGRAPH + {0x8C6B, 0x5BAC}, //2134 #CJK UNIFIED IDEOGRAPH + {0x8C6C, 0x5BAD}, //2135 #CJK UNIFIED IDEOGRAPH + {0x8C6D, 0x5BAE}, //2136 #CJK UNIFIED IDEOGRAPH + {0x8C6E, 0x5BAF}, //2137 #CJK UNIFIED IDEOGRAPH + {0x8C6F, 0x5BB1}, //2138 #CJK UNIFIED IDEOGRAPH + {0x8C70, 0x5BB2}, //2139 #CJK UNIFIED IDEOGRAPH + {0x8C71, 0x5BB7}, //2140 #CJK UNIFIED IDEOGRAPH + {0x8C72, 0x5BBA}, //2141 #CJK UNIFIED IDEOGRAPH + {0x8C73, 0x5BBB}, //2142 #CJK UNIFIED IDEOGRAPH + {0x8C74, 0x5BBC}, //2143 #CJK UNIFIED IDEOGRAPH + {0x8C75, 0x5BC0}, //2144 #CJK UNIFIED IDEOGRAPH + {0x8C76, 0x5BC1}, //2145 #CJK UNIFIED IDEOGRAPH + {0x8C77, 0x5BC3}, //2146 #CJK UNIFIED IDEOGRAPH + {0x8C78, 0x5BC8}, //2147 #CJK UNIFIED IDEOGRAPH + {0x8C79, 0x5BC9}, //2148 #CJK UNIFIED IDEOGRAPH + {0x8C7A, 0x5BCA}, //2149 #CJK UNIFIED IDEOGRAPH + {0x8C7B, 0x5BCB}, //2150 #CJK UNIFIED IDEOGRAPH + {0x8C7C, 0x5BCD}, //2151 #CJK UNIFIED IDEOGRAPH + {0x8C7D, 0x5BCE}, //2152 #CJK UNIFIED IDEOGRAPH + {0x8C7E, 0x5BCF}, //2153 #CJK UNIFIED IDEOGRAPH + {0x8C80, 0x5BD1}, //2154 #CJK UNIFIED IDEOGRAPH + {0x8C81, 0x5BD4}, //2155 #CJK UNIFIED IDEOGRAPH + {0x8C82, 0x5BD5}, //2156 #CJK UNIFIED IDEOGRAPH + {0x8C83, 0x5BD6}, //2157 #CJK UNIFIED IDEOGRAPH + {0x8C84, 0x5BD7}, //2158 #CJK UNIFIED IDEOGRAPH + {0x8C85, 0x5BD8}, //2159 #CJK UNIFIED IDEOGRAPH + {0x8C86, 0x5BD9}, //2160 #CJK UNIFIED IDEOGRAPH + {0x8C87, 0x5BDA}, //2161 #CJK UNIFIED IDEOGRAPH + {0x8C88, 0x5BDB}, //2162 #CJK UNIFIED IDEOGRAPH + {0x8C89, 0x5BDC}, //2163 #CJK UNIFIED IDEOGRAPH + {0x8C8A, 0x5BE0}, //2164 #CJK UNIFIED IDEOGRAPH + {0x8C8B, 0x5BE2}, //2165 #CJK UNIFIED IDEOGRAPH + {0x8C8C, 0x5BE3}, //2166 #CJK UNIFIED IDEOGRAPH + {0x8C8D, 0x5BE6}, //2167 #CJK UNIFIED IDEOGRAPH + {0x8C8E, 0x5BE7}, //2168 #CJK UNIFIED IDEOGRAPH + {0x8C8F, 0x5BE9}, //2169 #CJK UNIFIED IDEOGRAPH + {0x8C90, 0x5BEA}, //2170 #CJK UNIFIED IDEOGRAPH + {0x8C91, 0x5BEB}, //2171 #CJK UNIFIED IDEOGRAPH + {0x8C92, 0x5BEC}, //2172 #CJK UNIFIED IDEOGRAPH + {0x8C93, 0x5BED}, //2173 #CJK UNIFIED IDEOGRAPH + {0x8C94, 0x5BEF}, //2174 #CJK UNIFIED IDEOGRAPH + {0x8C95, 0x5BF1}, //2175 #CJK UNIFIED IDEOGRAPH + {0x8C96, 0x5BF2}, //2176 #CJK UNIFIED IDEOGRAPH + {0x8C97, 0x5BF3}, //2177 #CJK UNIFIED IDEOGRAPH + {0x8C98, 0x5BF4}, //2178 #CJK UNIFIED IDEOGRAPH + {0x8C99, 0x5BF5}, //2179 #CJK UNIFIED IDEOGRAPH + {0x8C9A, 0x5BF6}, //2180 #CJK UNIFIED IDEOGRAPH + {0x8C9B, 0x5BF7}, //2181 #CJK UNIFIED IDEOGRAPH + {0x8C9C, 0x5BFD}, //2182 #CJK UNIFIED IDEOGRAPH + {0x8C9D, 0x5BFE}, //2183 #CJK UNIFIED IDEOGRAPH + {0x8C9E, 0x5C00}, //2184 #CJK UNIFIED IDEOGRAPH + {0x8C9F, 0x5C02}, //2185 #CJK UNIFIED IDEOGRAPH + {0x8CA0, 0x5C03}, //2186 #CJK UNIFIED IDEOGRAPH + {0x8CA1, 0x5C05}, //2187 #CJK UNIFIED IDEOGRAPH + {0x8CA2, 0x5C07}, //2188 #CJK UNIFIED IDEOGRAPH + {0x8CA3, 0x5C08}, //2189 #CJK UNIFIED IDEOGRAPH + {0x8CA4, 0x5C0B}, //2190 #CJK UNIFIED IDEOGRAPH + {0x8CA5, 0x5C0C}, //2191 #CJK UNIFIED IDEOGRAPH + {0x8CA6, 0x5C0D}, //2192 #CJK UNIFIED IDEOGRAPH + {0x8CA7, 0x5C0E}, //2193 #CJK UNIFIED IDEOGRAPH + {0x8CA8, 0x5C10}, //2194 #CJK UNIFIED IDEOGRAPH + {0x8CA9, 0x5C12}, //2195 #CJK UNIFIED IDEOGRAPH + {0x8CAA, 0x5C13}, //2196 #CJK UNIFIED IDEOGRAPH + {0x8CAB, 0x5C17}, //2197 #CJK UNIFIED IDEOGRAPH + {0x8CAC, 0x5C19}, //2198 #CJK UNIFIED IDEOGRAPH + {0x8CAD, 0x5C1B}, //2199 #CJK UNIFIED IDEOGRAPH + {0x8CAE, 0x5C1E}, //2200 #CJK UNIFIED IDEOGRAPH + {0x8CAF, 0x5C1F}, //2201 #CJK UNIFIED IDEOGRAPH + {0x8CB0, 0x5C20}, //2202 #CJK UNIFIED IDEOGRAPH + {0x8CB1, 0x5C21}, //2203 #CJK UNIFIED IDEOGRAPH + {0x8CB2, 0x5C23}, //2204 #CJK UNIFIED IDEOGRAPH + {0x8CB3, 0x5C26}, //2205 #CJK UNIFIED IDEOGRAPH + {0x8CB4, 0x5C28}, //2206 #CJK UNIFIED IDEOGRAPH + {0x8CB5, 0x5C29}, //2207 #CJK UNIFIED IDEOGRAPH + {0x8CB6, 0x5C2A}, //2208 #CJK UNIFIED IDEOGRAPH + {0x8CB7, 0x5C2B}, //2209 #CJK UNIFIED IDEOGRAPH + {0x8CB8, 0x5C2D}, //2210 #CJK UNIFIED IDEOGRAPH + {0x8CB9, 0x5C2E}, //2211 #CJK UNIFIED IDEOGRAPH + {0x8CBA, 0x5C2F}, //2212 #CJK UNIFIED IDEOGRAPH + {0x8CBB, 0x5C30}, //2213 #CJK UNIFIED IDEOGRAPH + {0x8CBC, 0x5C32}, //2214 #CJK UNIFIED IDEOGRAPH + {0x8CBD, 0x5C33}, //2215 #CJK UNIFIED IDEOGRAPH + {0x8CBE, 0x5C35}, //2216 #CJK UNIFIED IDEOGRAPH + {0x8CBF, 0x5C36}, //2217 #CJK UNIFIED IDEOGRAPH + {0x8CC0, 0x5C37}, //2218 #CJK UNIFIED IDEOGRAPH + {0x8CC1, 0x5C43}, //2219 #CJK UNIFIED IDEOGRAPH + {0x8CC2, 0x5C44}, //2220 #CJK UNIFIED IDEOGRAPH + {0x8CC3, 0x5C46}, //2221 #CJK UNIFIED IDEOGRAPH + {0x8CC4, 0x5C47}, //2222 #CJK UNIFIED IDEOGRAPH + {0x8CC5, 0x5C4C}, //2223 #CJK UNIFIED IDEOGRAPH + {0x8CC6, 0x5C4D}, //2224 #CJK UNIFIED IDEOGRAPH + {0x8CC7, 0x5C52}, //2225 #CJK UNIFIED IDEOGRAPH + {0x8CC8, 0x5C53}, //2226 #CJK UNIFIED IDEOGRAPH + {0x8CC9, 0x5C54}, //2227 #CJK UNIFIED IDEOGRAPH + {0x8CCA, 0x5C56}, //2228 #CJK UNIFIED IDEOGRAPH + {0x8CCB, 0x5C57}, //2229 #CJK UNIFIED IDEOGRAPH + {0x8CCC, 0x5C58}, //2230 #CJK UNIFIED IDEOGRAPH + {0x8CCD, 0x5C5A}, //2231 #CJK UNIFIED IDEOGRAPH + {0x8CCE, 0x5C5B}, //2232 #CJK UNIFIED IDEOGRAPH + {0x8CCF, 0x5C5C}, //2233 #CJK UNIFIED IDEOGRAPH + {0x8CD0, 0x5C5D}, //2234 #CJK UNIFIED IDEOGRAPH + {0x8CD1, 0x5C5F}, //2235 #CJK UNIFIED IDEOGRAPH + {0x8CD2, 0x5C62}, //2236 #CJK UNIFIED IDEOGRAPH + {0x8CD3, 0x5C64}, //2237 #CJK UNIFIED IDEOGRAPH + {0x8CD4, 0x5C67}, //2238 #CJK UNIFIED IDEOGRAPH + {0x8CD5, 0x5C68}, //2239 #CJK UNIFIED IDEOGRAPH + {0x8CD6, 0x5C69}, //2240 #CJK UNIFIED IDEOGRAPH + {0x8CD7, 0x5C6A}, //2241 #CJK UNIFIED IDEOGRAPH + {0x8CD8, 0x5C6B}, //2242 #CJK UNIFIED IDEOGRAPH + {0x8CD9, 0x5C6C}, //2243 #CJK UNIFIED IDEOGRAPH + {0x8CDA, 0x5C6D}, //2244 #CJK UNIFIED IDEOGRAPH + {0x8CDB, 0x5C70}, //2245 #CJK UNIFIED IDEOGRAPH + {0x8CDC, 0x5C72}, //2246 #CJK UNIFIED IDEOGRAPH + {0x8CDD, 0x5C73}, //2247 #CJK UNIFIED IDEOGRAPH + {0x8CDE, 0x5C74}, //2248 #CJK UNIFIED IDEOGRAPH + {0x8CDF, 0x5C75}, //2249 #CJK UNIFIED IDEOGRAPH + {0x8CE0, 0x5C76}, //2250 #CJK UNIFIED IDEOGRAPH + {0x8CE1, 0x5C77}, //2251 #CJK UNIFIED IDEOGRAPH + {0x8CE2, 0x5C78}, //2252 #CJK UNIFIED IDEOGRAPH + {0x8CE3, 0x5C7B}, //2253 #CJK UNIFIED IDEOGRAPH + {0x8CE4, 0x5C7C}, //2254 #CJK UNIFIED IDEOGRAPH + {0x8CE5, 0x5C7D}, //2255 #CJK UNIFIED IDEOGRAPH + {0x8CE6, 0x5C7E}, //2256 #CJK UNIFIED IDEOGRAPH + {0x8CE7, 0x5C80}, //2257 #CJK UNIFIED IDEOGRAPH + {0x8CE8, 0x5C83}, //2258 #CJK UNIFIED IDEOGRAPH + {0x8CE9, 0x5C84}, //2259 #CJK UNIFIED IDEOGRAPH + {0x8CEA, 0x5C85}, //2260 #CJK UNIFIED IDEOGRAPH + {0x8CEB, 0x5C86}, //2261 #CJK UNIFIED IDEOGRAPH + {0x8CEC, 0x5C87}, //2262 #CJK UNIFIED IDEOGRAPH + {0x8CED, 0x5C89}, //2263 #CJK UNIFIED IDEOGRAPH + {0x8CEE, 0x5C8A}, //2264 #CJK UNIFIED IDEOGRAPH + {0x8CEF, 0x5C8B}, //2265 #CJK UNIFIED IDEOGRAPH + {0x8CF0, 0x5C8E}, //2266 #CJK UNIFIED IDEOGRAPH + {0x8CF1, 0x5C8F}, //2267 #CJK UNIFIED IDEOGRAPH + {0x8CF2, 0x5C92}, //2268 #CJK UNIFIED IDEOGRAPH + {0x8CF3, 0x5C93}, //2269 #CJK UNIFIED IDEOGRAPH + {0x8CF4, 0x5C95}, //2270 #CJK UNIFIED IDEOGRAPH + {0x8CF5, 0x5C9D}, //2271 #CJK UNIFIED IDEOGRAPH + {0x8CF6, 0x5C9E}, //2272 #CJK UNIFIED IDEOGRAPH + {0x8CF7, 0x5C9F}, //2273 #CJK UNIFIED IDEOGRAPH + {0x8CF8, 0x5CA0}, //2274 #CJK UNIFIED IDEOGRAPH + {0x8CF9, 0x5CA1}, //2275 #CJK UNIFIED IDEOGRAPH + {0x8CFA, 0x5CA4}, //2276 #CJK UNIFIED IDEOGRAPH + {0x8CFB, 0x5CA5}, //2277 #CJK UNIFIED IDEOGRAPH + {0x8CFC, 0x5CA6}, //2278 #CJK UNIFIED IDEOGRAPH + {0x8CFD, 0x5CA7}, //2279 #CJK UNIFIED IDEOGRAPH + {0x8CFE, 0x5CA8}, //2280 #CJK UNIFIED IDEOGRAPH + {0x8D40, 0x5CAA}, //2281 #CJK UNIFIED IDEOGRAPH + {0x8D41, 0x5CAE}, //2282 #CJK UNIFIED IDEOGRAPH + {0x8D42, 0x5CAF}, //2283 #CJK UNIFIED IDEOGRAPH + {0x8D43, 0x5CB0}, //2284 #CJK UNIFIED IDEOGRAPH + {0x8D44, 0x5CB2}, //2285 #CJK UNIFIED IDEOGRAPH + {0x8D45, 0x5CB4}, //2286 #CJK UNIFIED IDEOGRAPH + {0x8D46, 0x5CB6}, //2287 #CJK UNIFIED IDEOGRAPH + {0x8D47, 0x5CB9}, //2288 #CJK UNIFIED IDEOGRAPH + {0x8D48, 0x5CBA}, //2289 #CJK UNIFIED IDEOGRAPH + {0x8D49, 0x5CBB}, //2290 #CJK UNIFIED IDEOGRAPH + {0x8D4A, 0x5CBC}, //2291 #CJK UNIFIED IDEOGRAPH + {0x8D4B, 0x5CBE}, //2292 #CJK UNIFIED IDEOGRAPH + {0x8D4C, 0x5CC0}, //2293 #CJK UNIFIED IDEOGRAPH + {0x8D4D, 0x5CC2}, //2294 #CJK UNIFIED IDEOGRAPH + {0x8D4E, 0x5CC3}, //2295 #CJK UNIFIED IDEOGRAPH + {0x8D4F, 0x5CC5}, //2296 #CJK UNIFIED IDEOGRAPH + {0x8D50, 0x5CC6}, //2297 #CJK UNIFIED IDEOGRAPH + {0x8D51, 0x5CC7}, //2298 #CJK UNIFIED IDEOGRAPH + {0x8D52, 0x5CC8}, //2299 #CJK UNIFIED IDEOGRAPH + {0x8D53, 0x5CC9}, //2300 #CJK UNIFIED IDEOGRAPH + {0x8D54, 0x5CCA}, //2301 #CJK UNIFIED IDEOGRAPH + {0x8D55, 0x5CCC}, //2302 #CJK UNIFIED IDEOGRAPH + {0x8D56, 0x5CCD}, //2303 #CJK UNIFIED IDEOGRAPH + {0x8D57, 0x5CCE}, //2304 #CJK UNIFIED IDEOGRAPH + {0x8D58, 0x5CCF}, //2305 #CJK UNIFIED IDEOGRAPH + {0x8D59, 0x5CD0}, //2306 #CJK UNIFIED IDEOGRAPH + {0x8D5A, 0x5CD1}, //2307 #CJK UNIFIED IDEOGRAPH + {0x8D5B, 0x5CD3}, //2308 #CJK UNIFIED IDEOGRAPH + {0x8D5C, 0x5CD4}, //2309 #CJK UNIFIED IDEOGRAPH + {0x8D5D, 0x5CD5}, //2310 #CJK UNIFIED IDEOGRAPH + {0x8D5E, 0x5CD6}, //2311 #CJK UNIFIED IDEOGRAPH + {0x8D5F, 0x5CD7}, //2312 #CJK UNIFIED IDEOGRAPH + {0x8D60, 0x5CD8}, //2313 #CJK UNIFIED IDEOGRAPH + {0x8D61, 0x5CDA}, //2314 #CJK UNIFIED IDEOGRAPH + {0x8D62, 0x5CDB}, //2315 #CJK UNIFIED IDEOGRAPH + {0x8D63, 0x5CDC}, //2316 #CJK UNIFIED IDEOGRAPH + {0x8D64, 0x5CDD}, //2317 #CJK UNIFIED IDEOGRAPH + {0x8D65, 0x5CDE}, //2318 #CJK UNIFIED IDEOGRAPH + {0x8D66, 0x5CDF}, //2319 #CJK UNIFIED IDEOGRAPH + {0x8D67, 0x5CE0}, //2320 #CJK UNIFIED IDEOGRAPH + {0x8D68, 0x5CE2}, //2321 #CJK UNIFIED IDEOGRAPH + {0x8D69, 0x5CE3}, //2322 #CJK UNIFIED IDEOGRAPH + {0x8D6A, 0x5CE7}, //2323 #CJK UNIFIED IDEOGRAPH + {0x8D6B, 0x5CE9}, //2324 #CJK UNIFIED IDEOGRAPH + {0x8D6C, 0x5CEB}, //2325 #CJK UNIFIED IDEOGRAPH + {0x8D6D, 0x5CEC}, //2326 #CJK UNIFIED IDEOGRAPH + {0x8D6E, 0x5CEE}, //2327 #CJK UNIFIED IDEOGRAPH + {0x8D6F, 0x5CEF}, //2328 #CJK UNIFIED IDEOGRAPH + {0x8D70, 0x5CF1}, //2329 #CJK UNIFIED IDEOGRAPH + {0x8D71, 0x5CF2}, //2330 #CJK UNIFIED IDEOGRAPH + {0x8D72, 0x5CF3}, //2331 #CJK UNIFIED IDEOGRAPH + {0x8D73, 0x5CF4}, //2332 #CJK UNIFIED IDEOGRAPH + {0x8D74, 0x5CF5}, //2333 #CJK UNIFIED IDEOGRAPH + {0x8D75, 0x5CF6}, //2334 #CJK UNIFIED IDEOGRAPH + {0x8D76, 0x5CF7}, //2335 #CJK UNIFIED IDEOGRAPH + {0x8D77, 0x5CF8}, //2336 #CJK UNIFIED IDEOGRAPH + {0x8D78, 0x5CF9}, //2337 #CJK UNIFIED IDEOGRAPH + {0x8D79, 0x5CFA}, //2338 #CJK UNIFIED IDEOGRAPH + {0x8D7A, 0x5CFC}, //2339 #CJK UNIFIED IDEOGRAPH + {0x8D7B, 0x5CFD}, //2340 #CJK UNIFIED IDEOGRAPH + {0x8D7C, 0x5CFE}, //2341 #CJK UNIFIED IDEOGRAPH + {0x8D7D, 0x5CFF}, //2342 #CJK UNIFIED IDEOGRAPH + {0x8D7E, 0x5D00}, //2343 #CJK UNIFIED IDEOGRAPH + {0x8D80, 0x5D01}, //2344 #CJK UNIFIED IDEOGRAPH + {0x8D81, 0x5D04}, //2345 #CJK UNIFIED IDEOGRAPH + {0x8D82, 0x5D05}, //2346 #CJK UNIFIED IDEOGRAPH + {0x8D83, 0x5D08}, //2347 #CJK UNIFIED IDEOGRAPH + {0x8D84, 0x5D09}, //2348 #CJK UNIFIED IDEOGRAPH + {0x8D85, 0x5D0A}, //2349 #CJK UNIFIED IDEOGRAPH + {0x8D86, 0x5D0B}, //2350 #CJK UNIFIED IDEOGRAPH + {0x8D87, 0x5D0C}, //2351 #CJK UNIFIED IDEOGRAPH + {0x8D88, 0x5D0D}, //2352 #CJK UNIFIED IDEOGRAPH + {0x8D89, 0x5D0F}, //2353 #CJK UNIFIED IDEOGRAPH + {0x8D8A, 0x5D10}, //2354 #CJK UNIFIED IDEOGRAPH + {0x8D8B, 0x5D11}, //2355 #CJK UNIFIED IDEOGRAPH + {0x8D8C, 0x5D12}, //2356 #CJK UNIFIED IDEOGRAPH + {0x8D8D, 0x5D13}, //2357 #CJK UNIFIED IDEOGRAPH + {0x8D8E, 0x5D15}, //2358 #CJK UNIFIED IDEOGRAPH + {0x8D8F, 0x5D17}, //2359 #CJK UNIFIED IDEOGRAPH + {0x8D90, 0x5D18}, //2360 #CJK UNIFIED IDEOGRAPH + {0x8D91, 0x5D19}, //2361 #CJK UNIFIED IDEOGRAPH + {0x8D92, 0x5D1A}, //2362 #CJK UNIFIED IDEOGRAPH + {0x8D93, 0x5D1C}, //2363 #CJK UNIFIED IDEOGRAPH + {0x8D94, 0x5D1D}, //2364 #CJK UNIFIED IDEOGRAPH + {0x8D95, 0x5D1F}, //2365 #CJK UNIFIED IDEOGRAPH + {0x8D96, 0x5D20}, //2366 #CJK UNIFIED IDEOGRAPH + {0x8D97, 0x5D21}, //2367 #CJK UNIFIED IDEOGRAPH + {0x8D98, 0x5D22}, //2368 #CJK UNIFIED IDEOGRAPH + {0x8D99, 0x5D23}, //2369 #CJK UNIFIED IDEOGRAPH + {0x8D9A, 0x5D25}, //2370 #CJK UNIFIED IDEOGRAPH + {0x8D9B, 0x5D28}, //2371 #CJK UNIFIED IDEOGRAPH + {0x8D9C, 0x5D2A}, //2372 #CJK UNIFIED IDEOGRAPH + {0x8D9D, 0x5D2B}, //2373 #CJK UNIFIED IDEOGRAPH + {0x8D9E, 0x5D2C}, //2374 #CJK UNIFIED IDEOGRAPH + {0x8D9F, 0x5D2F}, //2375 #CJK UNIFIED IDEOGRAPH + {0x8DA0, 0x5D30}, //2376 #CJK UNIFIED IDEOGRAPH + {0x8DA1, 0x5D31}, //2377 #CJK UNIFIED IDEOGRAPH + {0x8DA2, 0x5D32}, //2378 #CJK UNIFIED IDEOGRAPH + {0x8DA3, 0x5D33}, //2379 #CJK UNIFIED IDEOGRAPH + {0x8DA4, 0x5D35}, //2380 #CJK UNIFIED IDEOGRAPH + {0x8DA5, 0x5D36}, //2381 #CJK UNIFIED IDEOGRAPH + {0x8DA6, 0x5D37}, //2382 #CJK UNIFIED IDEOGRAPH + {0x8DA7, 0x5D38}, //2383 #CJK UNIFIED IDEOGRAPH + {0x8DA8, 0x5D39}, //2384 #CJK UNIFIED IDEOGRAPH + {0x8DA9, 0x5D3A}, //2385 #CJK UNIFIED IDEOGRAPH + {0x8DAA, 0x5D3B}, //2386 #CJK UNIFIED IDEOGRAPH + {0x8DAB, 0x5D3C}, //2387 #CJK UNIFIED IDEOGRAPH + {0x8DAC, 0x5D3F}, //2388 #CJK UNIFIED IDEOGRAPH + {0x8DAD, 0x5D40}, //2389 #CJK UNIFIED IDEOGRAPH + {0x8DAE, 0x5D41}, //2390 #CJK UNIFIED IDEOGRAPH + {0x8DAF, 0x5D42}, //2391 #CJK UNIFIED IDEOGRAPH + {0x8DB0, 0x5D43}, //2392 #CJK UNIFIED IDEOGRAPH + {0x8DB1, 0x5D44}, //2393 #CJK UNIFIED IDEOGRAPH + {0x8DB2, 0x5D45}, //2394 #CJK UNIFIED IDEOGRAPH + {0x8DB3, 0x5D46}, //2395 #CJK UNIFIED IDEOGRAPH + {0x8DB4, 0x5D48}, //2396 #CJK UNIFIED IDEOGRAPH + {0x8DB5, 0x5D49}, //2397 #CJK UNIFIED IDEOGRAPH + {0x8DB6, 0x5D4D}, //2398 #CJK UNIFIED IDEOGRAPH + {0x8DB7, 0x5D4E}, //2399 #CJK UNIFIED IDEOGRAPH + {0x8DB8, 0x5D4F}, //2400 #CJK UNIFIED IDEOGRAPH + {0x8DB9, 0x5D50}, //2401 #CJK UNIFIED IDEOGRAPH + {0x8DBA, 0x5D51}, //2402 #CJK UNIFIED IDEOGRAPH + {0x8DBB, 0x5D52}, //2403 #CJK UNIFIED IDEOGRAPH + {0x8DBC, 0x5D53}, //2404 #CJK UNIFIED IDEOGRAPH + {0x8DBD, 0x5D54}, //2405 #CJK UNIFIED IDEOGRAPH + {0x8DBE, 0x5D55}, //2406 #CJK UNIFIED IDEOGRAPH + {0x8DBF, 0x5D56}, //2407 #CJK UNIFIED IDEOGRAPH + {0x8DC0, 0x5D57}, //2408 #CJK UNIFIED IDEOGRAPH + {0x8DC1, 0x5D59}, //2409 #CJK UNIFIED IDEOGRAPH + {0x8DC2, 0x5D5A}, //2410 #CJK UNIFIED IDEOGRAPH + {0x8DC3, 0x5D5C}, //2411 #CJK UNIFIED IDEOGRAPH + {0x8DC4, 0x5D5E}, //2412 #CJK UNIFIED IDEOGRAPH + {0x8DC5, 0x5D5F}, //2413 #CJK UNIFIED IDEOGRAPH + {0x8DC6, 0x5D60}, //2414 #CJK UNIFIED IDEOGRAPH + {0x8DC7, 0x5D61}, //2415 #CJK UNIFIED IDEOGRAPH + {0x8DC8, 0x5D62}, //2416 #CJK UNIFIED IDEOGRAPH + {0x8DC9, 0x5D63}, //2417 #CJK UNIFIED IDEOGRAPH + {0x8DCA, 0x5D64}, //2418 #CJK UNIFIED IDEOGRAPH + {0x8DCB, 0x5D65}, //2419 #CJK UNIFIED IDEOGRAPH + {0x8DCC, 0x5D66}, //2420 #CJK UNIFIED IDEOGRAPH + {0x8DCD, 0x5D67}, //2421 #CJK UNIFIED IDEOGRAPH + {0x8DCE, 0x5D68}, //2422 #CJK UNIFIED IDEOGRAPH + {0x8DCF, 0x5D6A}, //2423 #CJK UNIFIED IDEOGRAPH + {0x8DD0, 0x5D6D}, //2424 #CJK UNIFIED IDEOGRAPH + {0x8DD1, 0x5D6E}, //2425 #CJK UNIFIED IDEOGRAPH + {0x8DD2, 0x5D70}, //2426 #CJK UNIFIED IDEOGRAPH + {0x8DD3, 0x5D71}, //2427 #CJK UNIFIED IDEOGRAPH + {0x8DD4, 0x5D72}, //2428 #CJK UNIFIED IDEOGRAPH + {0x8DD5, 0x5D73}, //2429 #CJK UNIFIED IDEOGRAPH + {0x8DD6, 0x5D75}, //2430 #CJK UNIFIED IDEOGRAPH + {0x8DD7, 0x5D76}, //2431 #CJK UNIFIED IDEOGRAPH + {0x8DD8, 0x5D77}, //2432 #CJK UNIFIED IDEOGRAPH + {0x8DD9, 0x5D78}, //2433 #CJK UNIFIED IDEOGRAPH + {0x8DDA, 0x5D79}, //2434 #CJK UNIFIED IDEOGRAPH + {0x8DDB, 0x5D7A}, //2435 #CJK UNIFIED IDEOGRAPH + {0x8DDC, 0x5D7B}, //2436 #CJK UNIFIED IDEOGRAPH + {0x8DDD, 0x5D7C}, //2437 #CJK UNIFIED IDEOGRAPH + {0x8DDE, 0x5D7D}, //2438 #CJK UNIFIED IDEOGRAPH + {0x8DDF, 0x5D7E}, //2439 #CJK UNIFIED IDEOGRAPH + {0x8DE0, 0x5D7F}, //2440 #CJK UNIFIED IDEOGRAPH + {0x8DE1, 0x5D80}, //2441 #CJK UNIFIED IDEOGRAPH + {0x8DE2, 0x5D81}, //2442 #CJK UNIFIED IDEOGRAPH + {0x8DE3, 0x5D83}, //2443 #CJK UNIFIED IDEOGRAPH + {0x8DE4, 0x5D84}, //2444 #CJK UNIFIED IDEOGRAPH + {0x8DE5, 0x5D85}, //2445 #CJK UNIFIED IDEOGRAPH + {0x8DE6, 0x5D86}, //2446 #CJK UNIFIED IDEOGRAPH + {0x8DE7, 0x5D87}, //2447 #CJK UNIFIED IDEOGRAPH + {0x8DE8, 0x5D88}, //2448 #CJK UNIFIED IDEOGRAPH + {0x8DE9, 0x5D89}, //2449 #CJK UNIFIED IDEOGRAPH + {0x8DEA, 0x5D8A}, //2450 #CJK UNIFIED IDEOGRAPH + {0x8DEB, 0x5D8B}, //2451 #CJK UNIFIED IDEOGRAPH + {0x8DEC, 0x5D8C}, //2452 #CJK UNIFIED IDEOGRAPH + {0x8DED, 0x5D8D}, //2453 #CJK UNIFIED IDEOGRAPH + {0x8DEE, 0x5D8E}, //2454 #CJK UNIFIED IDEOGRAPH + {0x8DEF, 0x5D8F}, //2455 #CJK UNIFIED IDEOGRAPH + {0x8DF0, 0x5D90}, //2456 #CJK UNIFIED IDEOGRAPH + {0x8DF1, 0x5D91}, //2457 #CJK UNIFIED IDEOGRAPH + {0x8DF2, 0x5D92}, //2458 #CJK UNIFIED IDEOGRAPH + {0x8DF3, 0x5D93}, //2459 #CJK UNIFIED IDEOGRAPH + {0x8DF4, 0x5D94}, //2460 #CJK UNIFIED IDEOGRAPH + {0x8DF5, 0x5D95}, //2461 #CJK UNIFIED IDEOGRAPH + {0x8DF6, 0x5D96}, //2462 #CJK UNIFIED IDEOGRAPH + {0x8DF7, 0x5D97}, //2463 #CJK UNIFIED IDEOGRAPH + {0x8DF8, 0x5D98}, //2464 #CJK UNIFIED IDEOGRAPH + {0x8DF9, 0x5D9A}, //2465 #CJK UNIFIED IDEOGRAPH + {0x8DFA, 0x5D9B}, //2466 #CJK UNIFIED IDEOGRAPH + {0x8DFB, 0x5D9C}, //2467 #CJK UNIFIED IDEOGRAPH + {0x8DFC, 0x5D9E}, //2468 #CJK UNIFIED IDEOGRAPH + {0x8DFD, 0x5D9F}, //2469 #CJK UNIFIED IDEOGRAPH + {0x8DFE, 0x5DA0}, //2470 #CJK UNIFIED IDEOGRAPH + {0x8E40, 0x5DA1}, //2471 #CJK UNIFIED IDEOGRAPH + {0x8E41, 0x5DA2}, //2472 #CJK UNIFIED IDEOGRAPH + {0x8E42, 0x5DA3}, //2473 #CJK UNIFIED IDEOGRAPH + {0x8E43, 0x5DA4}, //2474 #CJK UNIFIED IDEOGRAPH + {0x8E44, 0x5DA5}, //2475 #CJK UNIFIED IDEOGRAPH + {0x8E45, 0x5DA6}, //2476 #CJK UNIFIED IDEOGRAPH + {0x8E46, 0x5DA7}, //2477 #CJK UNIFIED IDEOGRAPH + {0x8E47, 0x5DA8}, //2478 #CJK UNIFIED IDEOGRAPH + {0x8E48, 0x5DA9}, //2479 #CJK UNIFIED IDEOGRAPH + {0x8E49, 0x5DAA}, //2480 #CJK UNIFIED IDEOGRAPH + {0x8E4A, 0x5DAB}, //2481 #CJK UNIFIED IDEOGRAPH + {0x8E4B, 0x5DAC}, //2482 #CJK UNIFIED IDEOGRAPH + {0x8E4C, 0x5DAD}, //2483 #CJK UNIFIED IDEOGRAPH + {0x8E4D, 0x5DAE}, //2484 #CJK UNIFIED IDEOGRAPH + {0x8E4E, 0x5DAF}, //2485 #CJK UNIFIED IDEOGRAPH + {0x8E4F, 0x5DB0}, //2486 #CJK UNIFIED IDEOGRAPH + {0x8E50, 0x5DB1}, //2487 #CJK UNIFIED IDEOGRAPH + {0x8E51, 0x5DB2}, //2488 #CJK UNIFIED IDEOGRAPH + {0x8E52, 0x5DB3}, //2489 #CJK UNIFIED IDEOGRAPH + {0x8E53, 0x5DB4}, //2490 #CJK UNIFIED IDEOGRAPH + {0x8E54, 0x5DB5}, //2491 #CJK UNIFIED IDEOGRAPH + {0x8E55, 0x5DB6}, //2492 #CJK UNIFIED IDEOGRAPH + {0x8E56, 0x5DB8}, //2493 #CJK UNIFIED IDEOGRAPH + {0x8E57, 0x5DB9}, //2494 #CJK UNIFIED IDEOGRAPH + {0x8E58, 0x5DBA}, //2495 #CJK UNIFIED IDEOGRAPH + {0x8E59, 0x5DBB}, //2496 #CJK UNIFIED IDEOGRAPH + {0x8E5A, 0x5DBC}, //2497 #CJK UNIFIED IDEOGRAPH + {0x8E5B, 0x5DBD}, //2498 #CJK UNIFIED IDEOGRAPH + {0x8E5C, 0x5DBE}, //2499 #CJK UNIFIED IDEOGRAPH + {0x8E5D, 0x5DBF}, //2500 #CJK UNIFIED IDEOGRAPH + {0x8E5E, 0x5DC0}, //2501 #CJK UNIFIED IDEOGRAPH + {0x8E5F, 0x5DC1}, //2502 #CJK UNIFIED IDEOGRAPH + {0x8E60, 0x5DC2}, //2503 #CJK UNIFIED IDEOGRAPH + {0x8E61, 0x5DC3}, //2504 #CJK UNIFIED IDEOGRAPH + {0x8E62, 0x5DC4}, //2505 #CJK UNIFIED IDEOGRAPH + {0x8E63, 0x5DC6}, //2506 #CJK UNIFIED IDEOGRAPH + {0x8E64, 0x5DC7}, //2507 #CJK UNIFIED IDEOGRAPH + {0x8E65, 0x5DC8}, //2508 #CJK UNIFIED IDEOGRAPH + {0x8E66, 0x5DC9}, //2509 #CJK UNIFIED IDEOGRAPH + {0x8E67, 0x5DCA}, //2510 #CJK UNIFIED IDEOGRAPH + {0x8E68, 0x5DCB}, //2511 #CJK UNIFIED IDEOGRAPH + {0x8E69, 0x5DCC}, //2512 #CJK UNIFIED IDEOGRAPH + {0x8E6A, 0x5DCE}, //2513 #CJK UNIFIED IDEOGRAPH + {0x8E6B, 0x5DCF}, //2514 #CJK UNIFIED IDEOGRAPH + {0x8E6C, 0x5DD0}, //2515 #CJK UNIFIED IDEOGRAPH + {0x8E6D, 0x5DD1}, //2516 #CJK UNIFIED IDEOGRAPH + {0x8E6E, 0x5DD2}, //2517 #CJK UNIFIED IDEOGRAPH + {0x8E6F, 0x5DD3}, //2518 #CJK UNIFIED IDEOGRAPH + {0x8E70, 0x5DD4}, //2519 #CJK UNIFIED IDEOGRAPH + {0x8E71, 0x5DD5}, //2520 #CJK UNIFIED IDEOGRAPH + {0x8E72, 0x5DD6}, //2521 #CJK UNIFIED IDEOGRAPH + {0x8E73, 0x5DD7}, //2522 #CJK UNIFIED IDEOGRAPH + {0x8E74, 0x5DD8}, //2523 #CJK UNIFIED IDEOGRAPH + {0x8E75, 0x5DD9}, //2524 #CJK UNIFIED IDEOGRAPH + {0x8E76, 0x5DDA}, //2525 #CJK UNIFIED IDEOGRAPH + {0x8E77, 0x5DDC}, //2526 #CJK UNIFIED IDEOGRAPH + {0x8E78, 0x5DDF}, //2527 #CJK UNIFIED IDEOGRAPH + {0x8E79, 0x5DE0}, //2528 #CJK UNIFIED IDEOGRAPH + {0x8E7A, 0x5DE3}, //2529 #CJK UNIFIED IDEOGRAPH + {0x8E7B, 0x5DE4}, //2530 #CJK UNIFIED IDEOGRAPH + {0x8E7C, 0x5DEA}, //2531 #CJK UNIFIED IDEOGRAPH + {0x8E7D, 0x5DEC}, //2532 #CJK UNIFIED IDEOGRAPH + {0x8E7E, 0x5DED}, //2533 #CJK UNIFIED IDEOGRAPH + {0x8E80, 0x5DF0}, //2534 #CJK UNIFIED IDEOGRAPH + {0x8E81, 0x5DF5}, //2535 #CJK UNIFIED IDEOGRAPH + {0x8E82, 0x5DF6}, //2536 #CJK UNIFIED IDEOGRAPH + {0x8E83, 0x5DF8}, //2537 #CJK UNIFIED IDEOGRAPH + {0x8E84, 0x5DF9}, //2538 #CJK UNIFIED IDEOGRAPH + {0x8E85, 0x5DFA}, //2539 #CJK UNIFIED IDEOGRAPH + {0x8E86, 0x5DFB}, //2540 #CJK UNIFIED IDEOGRAPH + {0x8E87, 0x5DFC}, //2541 #CJK UNIFIED IDEOGRAPH + {0x8E88, 0x5DFF}, //2542 #CJK UNIFIED IDEOGRAPH + {0x8E89, 0x5E00}, //2543 #CJK UNIFIED IDEOGRAPH + {0x8E8A, 0x5E04}, //2544 #CJK UNIFIED IDEOGRAPH + {0x8E8B, 0x5E07}, //2545 #CJK UNIFIED IDEOGRAPH + {0x8E8C, 0x5E09}, //2546 #CJK UNIFIED IDEOGRAPH + {0x8E8D, 0x5E0A}, //2547 #CJK UNIFIED IDEOGRAPH + {0x8E8E, 0x5E0B}, //2548 #CJK UNIFIED IDEOGRAPH + {0x8E8F, 0x5E0D}, //2549 #CJK UNIFIED IDEOGRAPH + {0x8E90, 0x5E0E}, //2550 #CJK UNIFIED IDEOGRAPH + {0x8E91, 0x5E12}, //2551 #CJK UNIFIED IDEOGRAPH + {0x8E92, 0x5E13}, //2552 #CJK UNIFIED IDEOGRAPH + {0x8E93, 0x5E17}, //2553 #CJK UNIFIED IDEOGRAPH + {0x8E94, 0x5E1E}, //2554 #CJK UNIFIED IDEOGRAPH + {0x8E95, 0x5E1F}, //2555 #CJK UNIFIED IDEOGRAPH + {0x8E96, 0x5E20}, //2556 #CJK UNIFIED IDEOGRAPH + {0x8E97, 0x5E21}, //2557 #CJK UNIFIED IDEOGRAPH + {0x8E98, 0x5E22}, //2558 #CJK UNIFIED IDEOGRAPH + {0x8E99, 0x5E23}, //2559 #CJK UNIFIED IDEOGRAPH + {0x8E9A, 0x5E24}, //2560 #CJK UNIFIED IDEOGRAPH + {0x8E9B, 0x5E25}, //2561 #CJK UNIFIED IDEOGRAPH + {0x8E9C, 0x5E28}, //2562 #CJK UNIFIED IDEOGRAPH + {0x8E9D, 0x5E29}, //2563 #CJK UNIFIED IDEOGRAPH + {0x8E9E, 0x5E2A}, //2564 #CJK UNIFIED IDEOGRAPH + {0x8E9F, 0x5E2B}, //2565 #CJK UNIFIED IDEOGRAPH + {0x8EA0, 0x5E2C}, //2566 #CJK UNIFIED IDEOGRAPH + {0x8EA1, 0x5E2F}, //2567 #CJK UNIFIED IDEOGRAPH + {0x8EA2, 0x5E30}, //2568 #CJK UNIFIED IDEOGRAPH + {0x8EA3, 0x5E32}, //2569 #CJK UNIFIED IDEOGRAPH + {0x8EA4, 0x5E33}, //2570 #CJK UNIFIED IDEOGRAPH + {0x8EA5, 0x5E34}, //2571 #CJK UNIFIED IDEOGRAPH + {0x8EA6, 0x5E35}, //2572 #CJK UNIFIED IDEOGRAPH + {0x8EA7, 0x5E36}, //2573 #CJK UNIFIED IDEOGRAPH + {0x8EA8, 0x5E39}, //2574 #CJK UNIFIED IDEOGRAPH + {0x8EA9, 0x5E3A}, //2575 #CJK UNIFIED IDEOGRAPH + {0x8EAA, 0x5E3E}, //2576 #CJK UNIFIED IDEOGRAPH + {0x8EAB, 0x5E3F}, //2577 #CJK UNIFIED IDEOGRAPH + {0x8EAC, 0x5E40}, //2578 #CJK UNIFIED IDEOGRAPH + {0x8EAD, 0x5E41}, //2579 #CJK UNIFIED IDEOGRAPH + {0x8EAE, 0x5E43}, //2580 #CJK UNIFIED IDEOGRAPH + {0x8EAF, 0x5E46}, //2581 #CJK UNIFIED IDEOGRAPH + {0x8EB0, 0x5E47}, //2582 #CJK UNIFIED IDEOGRAPH + {0x8EB1, 0x5E48}, //2583 #CJK UNIFIED IDEOGRAPH + {0x8EB2, 0x5E49}, //2584 #CJK UNIFIED IDEOGRAPH + {0x8EB3, 0x5E4A}, //2585 #CJK UNIFIED IDEOGRAPH + {0x8EB4, 0x5E4B}, //2586 #CJK UNIFIED IDEOGRAPH + {0x8EB5, 0x5E4D}, //2587 #CJK UNIFIED IDEOGRAPH + {0x8EB6, 0x5E4E}, //2588 #CJK UNIFIED IDEOGRAPH + {0x8EB7, 0x5E4F}, //2589 #CJK UNIFIED IDEOGRAPH + {0x8EB8, 0x5E50}, //2590 #CJK UNIFIED IDEOGRAPH + {0x8EB9, 0x5E51}, //2591 #CJK UNIFIED IDEOGRAPH + {0x8EBA, 0x5E52}, //2592 #CJK UNIFIED IDEOGRAPH + {0x8EBB, 0x5E53}, //2593 #CJK UNIFIED IDEOGRAPH + {0x8EBC, 0x5E56}, //2594 #CJK UNIFIED IDEOGRAPH + {0x8EBD, 0x5E57}, //2595 #CJK UNIFIED IDEOGRAPH + {0x8EBE, 0x5E58}, //2596 #CJK UNIFIED IDEOGRAPH + {0x8EBF, 0x5E59}, //2597 #CJK UNIFIED IDEOGRAPH + {0x8EC0, 0x5E5A}, //2598 #CJK UNIFIED IDEOGRAPH + {0x8EC1, 0x5E5C}, //2599 #CJK UNIFIED IDEOGRAPH + {0x8EC2, 0x5E5D}, //2600 #CJK UNIFIED IDEOGRAPH + {0x8EC3, 0x5E5F}, //2601 #CJK UNIFIED IDEOGRAPH + {0x8EC4, 0x5E60}, //2602 #CJK UNIFIED IDEOGRAPH + {0x8EC5, 0x5E63}, //2603 #CJK UNIFIED IDEOGRAPH + {0x8EC6, 0x5E64}, //2604 #CJK UNIFIED IDEOGRAPH + {0x8EC7, 0x5E65}, //2605 #CJK UNIFIED IDEOGRAPH + {0x8EC8, 0x5E66}, //2606 #CJK UNIFIED IDEOGRAPH + {0x8EC9, 0x5E67}, //2607 #CJK UNIFIED IDEOGRAPH + {0x8ECA, 0x5E68}, //2608 #CJK UNIFIED IDEOGRAPH + {0x8ECB, 0x5E69}, //2609 #CJK UNIFIED IDEOGRAPH + {0x8ECC, 0x5E6A}, //2610 #CJK UNIFIED IDEOGRAPH + {0x8ECD, 0x5E6B}, //2611 #CJK UNIFIED IDEOGRAPH + {0x8ECE, 0x5E6C}, //2612 #CJK UNIFIED IDEOGRAPH + {0x8ECF, 0x5E6D}, //2613 #CJK UNIFIED IDEOGRAPH + {0x8ED0, 0x5E6E}, //2614 #CJK UNIFIED IDEOGRAPH + {0x8ED1, 0x5E6F}, //2615 #CJK UNIFIED IDEOGRAPH + {0x8ED2, 0x5E70}, //2616 #CJK UNIFIED IDEOGRAPH + {0x8ED3, 0x5E71}, //2617 #CJK UNIFIED IDEOGRAPH + {0x8ED4, 0x5E75}, //2618 #CJK UNIFIED IDEOGRAPH + {0x8ED5, 0x5E77}, //2619 #CJK UNIFIED IDEOGRAPH + {0x8ED6, 0x5E79}, //2620 #CJK UNIFIED IDEOGRAPH + {0x8ED7, 0x5E7E}, //2621 #CJK UNIFIED IDEOGRAPH + {0x8ED8, 0x5E81}, //2622 #CJK UNIFIED IDEOGRAPH + {0x8ED9, 0x5E82}, //2623 #CJK UNIFIED IDEOGRAPH + {0x8EDA, 0x5E83}, //2624 #CJK UNIFIED IDEOGRAPH + {0x8EDB, 0x5E85}, //2625 #CJK UNIFIED IDEOGRAPH + {0x8EDC, 0x5E88}, //2626 #CJK UNIFIED IDEOGRAPH + {0x8EDD, 0x5E89}, //2627 #CJK UNIFIED IDEOGRAPH + {0x8EDE, 0x5E8C}, //2628 #CJK UNIFIED IDEOGRAPH + {0x8EDF, 0x5E8D}, //2629 #CJK UNIFIED IDEOGRAPH + {0x8EE0, 0x5E8E}, //2630 #CJK UNIFIED IDEOGRAPH + {0x8EE1, 0x5E92}, //2631 #CJK UNIFIED IDEOGRAPH + {0x8EE2, 0x5E98}, //2632 #CJK UNIFIED IDEOGRAPH + {0x8EE3, 0x5E9B}, //2633 #CJK UNIFIED IDEOGRAPH + {0x8EE4, 0x5E9D}, //2634 #CJK UNIFIED IDEOGRAPH + {0x8EE5, 0x5EA1}, //2635 #CJK UNIFIED IDEOGRAPH + {0x8EE6, 0x5EA2}, //2636 #CJK UNIFIED IDEOGRAPH + {0x8EE7, 0x5EA3}, //2637 #CJK UNIFIED IDEOGRAPH + {0x8EE8, 0x5EA4}, //2638 #CJK UNIFIED IDEOGRAPH + {0x8EE9, 0x5EA8}, //2639 #CJK UNIFIED IDEOGRAPH + {0x8EEA, 0x5EA9}, //2640 #CJK UNIFIED IDEOGRAPH + {0x8EEB, 0x5EAA}, //2641 #CJK UNIFIED IDEOGRAPH + {0x8EEC, 0x5EAB}, //2642 #CJK UNIFIED IDEOGRAPH + {0x8EED, 0x5EAC}, //2643 #CJK UNIFIED IDEOGRAPH + {0x8EEE, 0x5EAE}, //2644 #CJK UNIFIED IDEOGRAPH + {0x8EEF, 0x5EAF}, //2645 #CJK UNIFIED IDEOGRAPH + {0x8EF0, 0x5EB0}, //2646 #CJK UNIFIED IDEOGRAPH + {0x8EF1, 0x5EB1}, //2647 #CJK UNIFIED IDEOGRAPH + {0x8EF2, 0x5EB2}, //2648 #CJK UNIFIED IDEOGRAPH + {0x8EF3, 0x5EB4}, //2649 #CJK UNIFIED IDEOGRAPH + {0x8EF4, 0x5EBA}, //2650 #CJK UNIFIED IDEOGRAPH + {0x8EF5, 0x5EBB}, //2651 #CJK UNIFIED IDEOGRAPH + {0x8EF6, 0x5EBC}, //2652 #CJK UNIFIED IDEOGRAPH + {0x8EF7, 0x5EBD}, //2653 #CJK UNIFIED IDEOGRAPH + {0x8EF8, 0x5EBF}, //2654 #CJK UNIFIED IDEOGRAPH + {0x8EF9, 0x5EC0}, //2655 #CJK UNIFIED IDEOGRAPH + {0x8EFA, 0x5EC1}, //2656 #CJK UNIFIED IDEOGRAPH + {0x8EFB, 0x5EC2}, //2657 #CJK UNIFIED IDEOGRAPH + {0x8EFC, 0x5EC3}, //2658 #CJK UNIFIED IDEOGRAPH + {0x8EFD, 0x5EC4}, //2659 #CJK UNIFIED IDEOGRAPH + {0x8EFE, 0x5EC5}, //2660 #CJK UNIFIED IDEOGRAPH + {0x8F40, 0x5EC6}, //2661 #CJK UNIFIED IDEOGRAPH + {0x8F41, 0x5EC7}, //2662 #CJK UNIFIED IDEOGRAPH + {0x8F42, 0x5EC8}, //2663 #CJK UNIFIED IDEOGRAPH + {0x8F43, 0x5ECB}, //2664 #CJK UNIFIED IDEOGRAPH + {0x8F44, 0x5ECC}, //2665 #CJK UNIFIED IDEOGRAPH + {0x8F45, 0x5ECD}, //2666 #CJK UNIFIED IDEOGRAPH + {0x8F46, 0x5ECE}, //2667 #CJK UNIFIED IDEOGRAPH + {0x8F47, 0x5ECF}, //2668 #CJK UNIFIED IDEOGRAPH + {0x8F48, 0x5ED0}, //2669 #CJK UNIFIED IDEOGRAPH + {0x8F49, 0x5ED4}, //2670 #CJK UNIFIED IDEOGRAPH + {0x8F4A, 0x5ED5}, //2671 #CJK UNIFIED IDEOGRAPH + {0x8F4B, 0x5ED7}, //2672 #CJK UNIFIED IDEOGRAPH + {0x8F4C, 0x5ED8}, //2673 #CJK UNIFIED IDEOGRAPH + {0x8F4D, 0x5ED9}, //2674 #CJK UNIFIED IDEOGRAPH + {0x8F4E, 0x5EDA}, //2675 #CJK UNIFIED IDEOGRAPH + {0x8F4F, 0x5EDC}, //2676 #CJK UNIFIED IDEOGRAPH + {0x8F50, 0x5EDD}, //2677 #CJK UNIFIED IDEOGRAPH + {0x8F51, 0x5EDE}, //2678 #CJK UNIFIED IDEOGRAPH + {0x8F52, 0x5EDF}, //2679 #CJK UNIFIED IDEOGRAPH + {0x8F53, 0x5EE0}, //2680 #CJK UNIFIED IDEOGRAPH + {0x8F54, 0x5EE1}, //2681 #CJK UNIFIED IDEOGRAPH + {0x8F55, 0x5EE2}, //2682 #CJK UNIFIED IDEOGRAPH + {0x8F56, 0x5EE3}, //2683 #CJK UNIFIED IDEOGRAPH + {0x8F57, 0x5EE4}, //2684 #CJK UNIFIED IDEOGRAPH + {0x8F58, 0x5EE5}, //2685 #CJK UNIFIED IDEOGRAPH + {0x8F59, 0x5EE6}, //2686 #CJK UNIFIED IDEOGRAPH + {0x8F5A, 0x5EE7}, //2687 #CJK UNIFIED IDEOGRAPH + {0x8F5B, 0x5EE9}, //2688 #CJK UNIFIED IDEOGRAPH + {0x8F5C, 0x5EEB}, //2689 #CJK UNIFIED IDEOGRAPH + {0x8F5D, 0x5EEC}, //2690 #CJK UNIFIED IDEOGRAPH + {0x8F5E, 0x5EED}, //2691 #CJK UNIFIED IDEOGRAPH + {0x8F5F, 0x5EEE}, //2692 #CJK UNIFIED IDEOGRAPH + {0x8F60, 0x5EEF}, //2693 #CJK UNIFIED IDEOGRAPH + {0x8F61, 0x5EF0}, //2694 #CJK UNIFIED IDEOGRAPH + {0x8F62, 0x5EF1}, //2695 #CJK UNIFIED IDEOGRAPH + {0x8F63, 0x5EF2}, //2696 #CJK UNIFIED IDEOGRAPH + {0x8F64, 0x5EF3}, //2697 #CJK UNIFIED IDEOGRAPH + {0x8F65, 0x5EF5}, //2698 #CJK UNIFIED IDEOGRAPH + {0x8F66, 0x5EF8}, //2699 #CJK UNIFIED IDEOGRAPH + {0x8F67, 0x5EF9}, //2700 #CJK UNIFIED IDEOGRAPH + {0x8F68, 0x5EFB}, //2701 #CJK UNIFIED IDEOGRAPH + {0x8F69, 0x5EFC}, //2702 #CJK UNIFIED IDEOGRAPH + {0x8F6A, 0x5EFD}, //2703 #CJK UNIFIED IDEOGRAPH + {0x8F6B, 0x5F05}, //2704 #CJK UNIFIED IDEOGRAPH + {0x8F6C, 0x5F06}, //2705 #CJK UNIFIED IDEOGRAPH + {0x8F6D, 0x5F07}, //2706 #CJK UNIFIED IDEOGRAPH + {0x8F6E, 0x5F09}, //2707 #CJK UNIFIED IDEOGRAPH + {0x8F6F, 0x5F0C}, //2708 #CJK UNIFIED IDEOGRAPH + {0x8F70, 0x5F0D}, //2709 #CJK UNIFIED IDEOGRAPH + {0x8F71, 0x5F0E}, //2710 #CJK UNIFIED IDEOGRAPH + {0x8F72, 0x5F10}, //2711 #CJK UNIFIED IDEOGRAPH + {0x8F73, 0x5F12}, //2712 #CJK UNIFIED IDEOGRAPH + {0x8F74, 0x5F14}, //2713 #CJK UNIFIED IDEOGRAPH + {0x8F75, 0x5F16}, //2714 #CJK UNIFIED IDEOGRAPH + {0x8F76, 0x5F19}, //2715 #CJK UNIFIED IDEOGRAPH + {0x8F77, 0x5F1A}, //2716 #CJK UNIFIED IDEOGRAPH + {0x8F78, 0x5F1C}, //2717 #CJK UNIFIED IDEOGRAPH + {0x8F79, 0x5F1D}, //2718 #CJK UNIFIED IDEOGRAPH + {0x8F7A, 0x5F1E}, //2719 #CJK UNIFIED IDEOGRAPH + {0x8F7B, 0x5F21}, //2720 #CJK UNIFIED IDEOGRAPH + {0x8F7C, 0x5F22}, //2721 #CJK UNIFIED IDEOGRAPH + {0x8F7D, 0x5F23}, //2722 #CJK UNIFIED IDEOGRAPH + {0x8F7E, 0x5F24}, //2723 #CJK UNIFIED IDEOGRAPH + {0x8F80, 0x5F28}, //2724 #CJK UNIFIED IDEOGRAPH + {0x8F81, 0x5F2B}, //2725 #CJK UNIFIED IDEOGRAPH + {0x8F82, 0x5F2C}, //2726 #CJK UNIFIED IDEOGRAPH + {0x8F83, 0x5F2E}, //2727 #CJK UNIFIED IDEOGRAPH + {0x8F84, 0x5F30}, //2728 #CJK UNIFIED IDEOGRAPH + {0x8F85, 0x5F32}, //2729 #CJK UNIFIED IDEOGRAPH + {0x8F86, 0x5F33}, //2730 #CJK UNIFIED IDEOGRAPH + {0x8F87, 0x5F34}, //2731 #CJK UNIFIED IDEOGRAPH + {0x8F88, 0x5F35}, //2732 #CJK UNIFIED IDEOGRAPH + {0x8F89, 0x5F36}, //2733 #CJK UNIFIED IDEOGRAPH + {0x8F8A, 0x5F37}, //2734 #CJK UNIFIED IDEOGRAPH + {0x8F8B, 0x5F38}, //2735 #CJK UNIFIED IDEOGRAPH + {0x8F8C, 0x5F3B}, //2736 #CJK UNIFIED IDEOGRAPH + {0x8F8D, 0x5F3D}, //2737 #CJK UNIFIED IDEOGRAPH + {0x8F8E, 0x5F3E}, //2738 #CJK UNIFIED IDEOGRAPH + {0x8F8F, 0x5F3F}, //2739 #CJK UNIFIED IDEOGRAPH + {0x8F90, 0x5F41}, //2740 #CJK UNIFIED IDEOGRAPH + {0x8F91, 0x5F42}, //2741 #CJK UNIFIED IDEOGRAPH + {0x8F92, 0x5F43}, //2742 #CJK UNIFIED IDEOGRAPH + {0x8F93, 0x5F44}, //2743 #CJK UNIFIED IDEOGRAPH + {0x8F94, 0x5F45}, //2744 #CJK UNIFIED IDEOGRAPH + {0x8F95, 0x5F46}, //2745 #CJK UNIFIED IDEOGRAPH + {0x8F96, 0x5F47}, //2746 #CJK UNIFIED IDEOGRAPH + {0x8F97, 0x5F48}, //2747 #CJK UNIFIED IDEOGRAPH + {0x8F98, 0x5F49}, //2748 #CJK UNIFIED IDEOGRAPH + {0x8F99, 0x5F4A}, //2749 #CJK UNIFIED IDEOGRAPH + {0x8F9A, 0x5F4B}, //2750 #CJK UNIFIED IDEOGRAPH + {0x8F9B, 0x5F4C}, //2751 #CJK UNIFIED IDEOGRAPH + {0x8F9C, 0x5F4D}, //2752 #CJK UNIFIED IDEOGRAPH + {0x8F9D, 0x5F4E}, //2753 #CJK UNIFIED IDEOGRAPH + {0x8F9E, 0x5F4F}, //2754 #CJK UNIFIED IDEOGRAPH + {0x8F9F, 0x5F51}, //2755 #CJK UNIFIED IDEOGRAPH + {0x8FA0, 0x5F54}, //2756 #CJK UNIFIED IDEOGRAPH + {0x8FA1, 0x5F59}, //2757 #CJK UNIFIED IDEOGRAPH + {0x8FA2, 0x5F5A}, //2758 #CJK UNIFIED IDEOGRAPH + {0x8FA3, 0x5F5B}, //2759 #CJK UNIFIED IDEOGRAPH + {0x8FA4, 0x5F5C}, //2760 #CJK UNIFIED IDEOGRAPH + {0x8FA5, 0x5F5E}, //2761 #CJK UNIFIED IDEOGRAPH + {0x8FA6, 0x5F5F}, //2762 #CJK UNIFIED IDEOGRAPH + {0x8FA7, 0x5F60}, //2763 #CJK UNIFIED IDEOGRAPH + {0x8FA8, 0x5F63}, //2764 #CJK UNIFIED IDEOGRAPH + {0x8FA9, 0x5F65}, //2765 #CJK UNIFIED IDEOGRAPH + {0x8FAA, 0x5F67}, //2766 #CJK UNIFIED IDEOGRAPH + {0x8FAB, 0x5F68}, //2767 #CJK UNIFIED IDEOGRAPH + {0x8FAC, 0x5F6B}, //2768 #CJK UNIFIED IDEOGRAPH + {0x8FAD, 0x5F6E}, //2769 #CJK UNIFIED IDEOGRAPH + {0x8FAE, 0x5F6F}, //2770 #CJK UNIFIED IDEOGRAPH + {0x8FAF, 0x5F72}, //2771 #CJK UNIFIED IDEOGRAPH + {0x8FB0, 0x5F74}, //2772 #CJK UNIFIED IDEOGRAPH + {0x8FB1, 0x5F75}, //2773 #CJK UNIFIED IDEOGRAPH + {0x8FB2, 0x5F76}, //2774 #CJK UNIFIED IDEOGRAPH + {0x8FB3, 0x5F78}, //2775 #CJK UNIFIED IDEOGRAPH + {0x8FB4, 0x5F7A}, //2776 #CJK UNIFIED IDEOGRAPH + {0x8FB5, 0x5F7D}, //2777 #CJK UNIFIED IDEOGRAPH + {0x8FB6, 0x5F7E}, //2778 #CJK UNIFIED IDEOGRAPH + {0x8FB7, 0x5F7F}, //2779 #CJK UNIFIED IDEOGRAPH + {0x8FB8, 0x5F83}, //2780 #CJK UNIFIED IDEOGRAPH + {0x8FB9, 0x5F86}, //2781 #CJK UNIFIED IDEOGRAPH + {0x8FBA, 0x5F8D}, //2782 #CJK UNIFIED IDEOGRAPH + {0x8FBB, 0x5F8E}, //2783 #CJK UNIFIED IDEOGRAPH + {0x8FBC, 0x5F8F}, //2784 #CJK UNIFIED IDEOGRAPH + {0x8FBD, 0x5F91}, //2785 #CJK UNIFIED IDEOGRAPH + {0x8FBE, 0x5F93}, //2786 #CJK UNIFIED IDEOGRAPH + {0x8FBF, 0x5F94}, //2787 #CJK UNIFIED IDEOGRAPH + {0x8FC0, 0x5F96}, //2788 #CJK UNIFIED IDEOGRAPH + {0x8FC1, 0x5F9A}, //2789 #CJK UNIFIED IDEOGRAPH + {0x8FC2, 0x5F9B}, //2790 #CJK UNIFIED IDEOGRAPH + {0x8FC3, 0x5F9D}, //2791 #CJK UNIFIED IDEOGRAPH + {0x8FC4, 0x5F9E}, //2792 #CJK UNIFIED IDEOGRAPH + {0x8FC5, 0x5F9F}, //2793 #CJK UNIFIED IDEOGRAPH + {0x8FC6, 0x5FA0}, //2794 #CJK UNIFIED IDEOGRAPH + {0x8FC7, 0x5FA2}, //2795 #CJK UNIFIED IDEOGRAPH + {0x8FC8, 0x5FA3}, //2796 #CJK UNIFIED IDEOGRAPH + {0x8FC9, 0x5FA4}, //2797 #CJK UNIFIED IDEOGRAPH + {0x8FCA, 0x5FA5}, //2798 #CJK UNIFIED IDEOGRAPH + {0x8FCB, 0x5FA6}, //2799 #CJK UNIFIED IDEOGRAPH + {0x8FCC, 0x5FA7}, //2800 #CJK UNIFIED IDEOGRAPH + {0x8FCD, 0x5FA9}, //2801 #CJK UNIFIED IDEOGRAPH + {0x8FCE, 0x5FAB}, //2802 #CJK UNIFIED IDEOGRAPH + {0x8FCF, 0x5FAC}, //2803 #CJK UNIFIED IDEOGRAPH + {0x8FD0, 0x5FAF}, //2804 #CJK UNIFIED IDEOGRAPH + {0x8FD1, 0x5FB0}, //2805 #CJK UNIFIED IDEOGRAPH + {0x8FD2, 0x5FB1}, //2806 #CJK UNIFIED IDEOGRAPH + {0x8FD3, 0x5FB2}, //2807 #CJK UNIFIED IDEOGRAPH + {0x8FD4, 0x5FB3}, //2808 #CJK UNIFIED IDEOGRAPH + {0x8FD5, 0x5FB4}, //2809 #CJK UNIFIED IDEOGRAPH + {0x8FD6, 0x5FB6}, //2810 #CJK UNIFIED IDEOGRAPH + {0x8FD7, 0x5FB8}, //2811 #CJK UNIFIED IDEOGRAPH + {0x8FD8, 0x5FB9}, //2812 #CJK UNIFIED IDEOGRAPH + {0x8FD9, 0x5FBA}, //2813 #CJK UNIFIED IDEOGRAPH + {0x8FDA, 0x5FBB}, //2814 #CJK UNIFIED IDEOGRAPH + {0x8FDB, 0x5FBE}, //2815 #CJK UNIFIED IDEOGRAPH + {0x8FDC, 0x5FBF}, //2816 #CJK UNIFIED IDEOGRAPH + {0x8FDD, 0x5FC0}, //2817 #CJK UNIFIED IDEOGRAPH + {0x8FDE, 0x5FC1}, //2818 #CJK UNIFIED IDEOGRAPH + {0x8FDF, 0x5FC2}, //2819 #CJK UNIFIED IDEOGRAPH + {0x8FE0, 0x5FC7}, //2820 #CJK UNIFIED IDEOGRAPH + {0x8FE1, 0x5FC8}, //2821 #CJK UNIFIED IDEOGRAPH + {0x8FE2, 0x5FCA}, //2822 #CJK UNIFIED IDEOGRAPH + {0x8FE3, 0x5FCB}, //2823 #CJK UNIFIED IDEOGRAPH + {0x8FE4, 0x5FCE}, //2824 #CJK UNIFIED IDEOGRAPH + {0x8FE5, 0x5FD3}, //2825 #CJK UNIFIED IDEOGRAPH + {0x8FE6, 0x5FD4}, //2826 #CJK UNIFIED IDEOGRAPH + {0x8FE7, 0x5FD5}, //2827 #CJK UNIFIED IDEOGRAPH + {0x8FE8, 0x5FDA}, //2828 #CJK UNIFIED IDEOGRAPH + {0x8FE9, 0x5FDB}, //2829 #CJK UNIFIED IDEOGRAPH + {0x8FEA, 0x5FDC}, //2830 #CJK UNIFIED IDEOGRAPH + {0x8FEB, 0x5FDE}, //2831 #CJK UNIFIED IDEOGRAPH + {0x8FEC, 0x5FDF}, //2832 #CJK UNIFIED IDEOGRAPH + {0x8FED, 0x5FE2}, //2833 #CJK UNIFIED IDEOGRAPH + {0x8FEE, 0x5FE3}, //2834 #CJK UNIFIED IDEOGRAPH + {0x8FEF, 0x5FE5}, //2835 #CJK UNIFIED IDEOGRAPH + {0x8FF0, 0x5FE6}, //2836 #CJK UNIFIED IDEOGRAPH + {0x8FF1, 0x5FE8}, //2837 #CJK UNIFIED IDEOGRAPH + {0x8FF2, 0x5FE9}, //2838 #CJK UNIFIED IDEOGRAPH + {0x8FF3, 0x5FEC}, //2839 #CJK UNIFIED IDEOGRAPH + {0x8FF4, 0x5FEF}, //2840 #CJK UNIFIED IDEOGRAPH + {0x8FF5, 0x5FF0}, //2841 #CJK UNIFIED IDEOGRAPH + {0x8FF6, 0x5FF2}, //2842 #CJK UNIFIED IDEOGRAPH + {0x8FF7, 0x5FF3}, //2843 #CJK UNIFIED IDEOGRAPH + {0x8FF8, 0x5FF4}, //2844 #CJK UNIFIED IDEOGRAPH + {0x8FF9, 0x5FF6}, //2845 #CJK UNIFIED IDEOGRAPH + {0x8FFA, 0x5FF7}, //2846 #CJK UNIFIED IDEOGRAPH + {0x8FFB, 0x5FF9}, //2847 #CJK UNIFIED IDEOGRAPH + {0x8FFC, 0x5FFA}, //2848 #CJK UNIFIED IDEOGRAPH + {0x8FFD, 0x5FFC}, //2849 #CJK UNIFIED IDEOGRAPH + {0x8FFE, 0x6007}, //2850 #CJK UNIFIED IDEOGRAPH + {0x9040, 0x6008}, //2851 #CJK UNIFIED IDEOGRAPH + {0x9041, 0x6009}, //2852 #CJK UNIFIED IDEOGRAPH + {0x9042, 0x600B}, //2853 #CJK UNIFIED IDEOGRAPH + {0x9043, 0x600C}, //2854 #CJK UNIFIED IDEOGRAPH + {0x9044, 0x6010}, //2855 #CJK UNIFIED IDEOGRAPH + {0x9045, 0x6011}, //2856 #CJK UNIFIED IDEOGRAPH + {0x9046, 0x6013}, //2857 #CJK UNIFIED IDEOGRAPH + {0x9047, 0x6017}, //2858 #CJK UNIFIED IDEOGRAPH + {0x9048, 0x6018}, //2859 #CJK UNIFIED IDEOGRAPH + {0x9049, 0x601A}, //2860 #CJK UNIFIED IDEOGRAPH + {0x904A, 0x601E}, //2861 #CJK UNIFIED IDEOGRAPH + {0x904B, 0x601F}, //2862 #CJK UNIFIED IDEOGRAPH + {0x904C, 0x6022}, //2863 #CJK UNIFIED IDEOGRAPH + {0x904D, 0x6023}, //2864 #CJK UNIFIED IDEOGRAPH + {0x904E, 0x6024}, //2865 #CJK UNIFIED IDEOGRAPH + {0x904F, 0x602C}, //2866 #CJK UNIFIED IDEOGRAPH + {0x9050, 0x602D}, //2867 #CJK UNIFIED IDEOGRAPH + {0x9051, 0x602E}, //2868 #CJK UNIFIED IDEOGRAPH + {0x9052, 0x6030}, //2869 #CJK UNIFIED IDEOGRAPH + {0x9053, 0x6031}, //2870 #CJK UNIFIED IDEOGRAPH + {0x9054, 0x6032}, //2871 #CJK UNIFIED IDEOGRAPH + {0x9055, 0x6033}, //2872 #CJK UNIFIED IDEOGRAPH + {0x9056, 0x6034}, //2873 #CJK UNIFIED IDEOGRAPH + {0x9057, 0x6036}, //2874 #CJK UNIFIED IDEOGRAPH + {0x9058, 0x6037}, //2875 #CJK UNIFIED IDEOGRAPH + {0x9059, 0x6038}, //2876 #CJK UNIFIED IDEOGRAPH + {0x905A, 0x6039}, //2877 #CJK UNIFIED IDEOGRAPH + {0x905B, 0x603A}, //2878 #CJK UNIFIED IDEOGRAPH + {0x905C, 0x603D}, //2879 #CJK UNIFIED IDEOGRAPH + {0x905D, 0x603E}, //2880 #CJK UNIFIED IDEOGRAPH + {0x905E, 0x6040}, //2881 #CJK UNIFIED IDEOGRAPH + {0x905F, 0x6044}, //2882 #CJK UNIFIED IDEOGRAPH + {0x9060, 0x6045}, //2883 #CJK UNIFIED IDEOGRAPH + {0x9061, 0x6046}, //2884 #CJK UNIFIED IDEOGRAPH + {0x9062, 0x6047}, //2885 #CJK UNIFIED IDEOGRAPH + {0x9063, 0x6048}, //2886 #CJK UNIFIED IDEOGRAPH + {0x9064, 0x6049}, //2887 #CJK UNIFIED IDEOGRAPH + {0x9065, 0x604A}, //2888 #CJK UNIFIED IDEOGRAPH + {0x9066, 0x604C}, //2889 #CJK UNIFIED IDEOGRAPH + {0x9067, 0x604E}, //2890 #CJK UNIFIED IDEOGRAPH + {0x9068, 0x604F}, //2891 #CJK UNIFIED IDEOGRAPH + {0x9069, 0x6051}, //2892 #CJK UNIFIED IDEOGRAPH + {0x906A, 0x6053}, //2893 #CJK UNIFIED IDEOGRAPH + {0x906B, 0x6054}, //2894 #CJK UNIFIED IDEOGRAPH + {0x906C, 0x6056}, //2895 #CJK UNIFIED IDEOGRAPH + {0x906D, 0x6057}, //2896 #CJK UNIFIED IDEOGRAPH + {0x906E, 0x6058}, //2897 #CJK UNIFIED IDEOGRAPH + {0x906F, 0x605B}, //2898 #CJK UNIFIED IDEOGRAPH + {0x9070, 0x605C}, //2899 #CJK UNIFIED IDEOGRAPH + {0x9071, 0x605E}, //2900 #CJK UNIFIED IDEOGRAPH + {0x9072, 0x605F}, //2901 #CJK UNIFIED IDEOGRAPH + {0x9073, 0x6060}, //2902 #CJK UNIFIED IDEOGRAPH + {0x9074, 0x6061}, //2903 #CJK UNIFIED IDEOGRAPH + {0x9075, 0x6065}, //2904 #CJK UNIFIED IDEOGRAPH + {0x9076, 0x6066}, //2905 #CJK UNIFIED IDEOGRAPH + {0x9077, 0x606E}, //2906 #CJK UNIFIED IDEOGRAPH + {0x9078, 0x6071}, //2907 #CJK UNIFIED IDEOGRAPH + {0x9079, 0x6072}, //2908 #CJK UNIFIED IDEOGRAPH + {0x907A, 0x6074}, //2909 #CJK UNIFIED IDEOGRAPH + {0x907B, 0x6075}, //2910 #CJK UNIFIED IDEOGRAPH + {0x907C, 0x6077}, //2911 #CJK UNIFIED IDEOGRAPH + {0x907D, 0x607E}, //2912 #CJK UNIFIED IDEOGRAPH + {0x907E, 0x6080}, //2913 #CJK UNIFIED IDEOGRAPH + {0x9080, 0x6081}, //2914 #CJK UNIFIED IDEOGRAPH + {0x9081, 0x6082}, //2915 #CJK UNIFIED IDEOGRAPH + {0x9082, 0x6085}, //2916 #CJK UNIFIED IDEOGRAPH + {0x9083, 0x6086}, //2917 #CJK UNIFIED IDEOGRAPH + {0x9084, 0x6087}, //2918 #CJK UNIFIED IDEOGRAPH + {0x9085, 0x6088}, //2919 #CJK UNIFIED IDEOGRAPH + {0x9086, 0x608A}, //2920 #CJK UNIFIED IDEOGRAPH + {0x9087, 0x608B}, //2921 #CJK UNIFIED IDEOGRAPH + {0x9088, 0x608E}, //2922 #CJK UNIFIED IDEOGRAPH + {0x9089, 0x608F}, //2923 #CJK UNIFIED IDEOGRAPH + {0x908A, 0x6090}, //2924 #CJK UNIFIED IDEOGRAPH + {0x908B, 0x6091}, //2925 #CJK UNIFIED IDEOGRAPH + {0x908C, 0x6093}, //2926 #CJK UNIFIED IDEOGRAPH + {0x908D, 0x6095}, //2927 #CJK UNIFIED IDEOGRAPH + {0x908E, 0x6097}, //2928 #CJK UNIFIED IDEOGRAPH + {0x908F, 0x6098}, //2929 #CJK UNIFIED IDEOGRAPH + {0x9090, 0x6099}, //2930 #CJK UNIFIED IDEOGRAPH + {0x9091, 0x609C}, //2931 #CJK UNIFIED IDEOGRAPH + {0x9092, 0x609E}, //2932 #CJK UNIFIED IDEOGRAPH + {0x9093, 0x60A1}, //2933 #CJK UNIFIED IDEOGRAPH + {0x9094, 0x60A2}, //2934 #CJK UNIFIED IDEOGRAPH + {0x9095, 0x60A4}, //2935 #CJK UNIFIED IDEOGRAPH + {0x9096, 0x60A5}, //2936 #CJK UNIFIED IDEOGRAPH + {0x9097, 0x60A7}, //2937 #CJK UNIFIED IDEOGRAPH + {0x9098, 0x60A9}, //2938 #CJK UNIFIED IDEOGRAPH + {0x9099, 0x60AA}, //2939 #CJK UNIFIED IDEOGRAPH + {0x909A, 0x60AE}, //2940 #CJK UNIFIED IDEOGRAPH + {0x909B, 0x60B0}, //2941 #CJK UNIFIED IDEOGRAPH + {0x909C, 0x60B3}, //2942 #CJK UNIFIED IDEOGRAPH + {0x909D, 0x60B5}, //2943 #CJK UNIFIED IDEOGRAPH + {0x909E, 0x60B6}, //2944 #CJK UNIFIED IDEOGRAPH + {0x909F, 0x60B7}, //2945 #CJK UNIFIED IDEOGRAPH + {0x90A0, 0x60B9}, //2946 #CJK UNIFIED IDEOGRAPH + {0x90A1, 0x60BA}, //2947 #CJK UNIFIED IDEOGRAPH + {0x90A2, 0x60BD}, //2948 #CJK UNIFIED IDEOGRAPH + {0x90A3, 0x60BE}, //2949 #CJK UNIFIED IDEOGRAPH + {0x90A4, 0x60BF}, //2950 #CJK UNIFIED IDEOGRAPH + {0x90A5, 0x60C0}, //2951 #CJK UNIFIED IDEOGRAPH + {0x90A6, 0x60C1}, //2952 #CJK UNIFIED IDEOGRAPH + {0x90A7, 0x60C2}, //2953 #CJK UNIFIED IDEOGRAPH + {0x90A8, 0x60C3}, //2954 #CJK UNIFIED IDEOGRAPH + {0x90A9, 0x60C4}, //2955 #CJK UNIFIED IDEOGRAPH + {0x90AA, 0x60C7}, //2956 #CJK UNIFIED IDEOGRAPH + {0x90AB, 0x60C8}, //2957 #CJK UNIFIED IDEOGRAPH + {0x90AC, 0x60C9}, //2958 #CJK UNIFIED IDEOGRAPH + {0x90AD, 0x60CC}, //2959 #CJK UNIFIED IDEOGRAPH + {0x90AE, 0x60CD}, //2960 #CJK UNIFIED IDEOGRAPH + {0x90AF, 0x60CE}, //2961 #CJK UNIFIED IDEOGRAPH + {0x90B0, 0x60CF}, //2962 #CJK UNIFIED IDEOGRAPH + {0x90B1, 0x60D0}, //2963 #CJK UNIFIED IDEOGRAPH + {0x90B2, 0x60D2}, //2964 #CJK UNIFIED IDEOGRAPH + {0x90B3, 0x60D3}, //2965 #CJK UNIFIED IDEOGRAPH + {0x90B4, 0x60D4}, //2966 #CJK UNIFIED IDEOGRAPH + {0x90B5, 0x60D6}, //2967 #CJK UNIFIED IDEOGRAPH + {0x90B6, 0x60D7}, //2968 #CJK UNIFIED IDEOGRAPH + {0x90B7, 0x60D9}, //2969 #CJK UNIFIED IDEOGRAPH + {0x90B8, 0x60DB}, //2970 #CJK UNIFIED IDEOGRAPH + {0x90B9, 0x60DE}, //2971 #CJK UNIFIED IDEOGRAPH + {0x90BA, 0x60E1}, //2972 #CJK UNIFIED IDEOGRAPH + {0x90BB, 0x60E2}, //2973 #CJK UNIFIED IDEOGRAPH + {0x90BC, 0x60E3}, //2974 #CJK UNIFIED IDEOGRAPH + {0x90BD, 0x60E4}, //2975 #CJK UNIFIED IDEOGRAPH + {0x90BE, 0x60E5}, //2976 #CJK UNIFIED IDEOGRAPH + {0x90BF, 0x60EA}, //2977 #CJK UNIFIED IDEOGRAPH + {0x90C0, 0x60F1}, //2978 #CJK UNIFIED IDEOGRAPH + {0x90C1, 0x60F2}, //2979 #CJK UNIFIED IDEOGRAPH + {0x90C2, 0x60F5}, //2980 #CJK UNIFIED IDEOGRAPH + {0x90C3, 0x60F7}, //2981 #CJK UNIFIED IDEOGRAPH + {0x90C4, 0x60F8}, //2982 #CJK UNIFIED IDEOGRAPH + {0x90C5, 0x60FB}, //2983 #CJK UNIFIED IDEOGRAPH + {0x90C6, 0x60FC}, //2984 #CJK UNIFIED IDEOGRAPH + {0x90C7, 0x60FD}, //2985 #CJK UNIFIED IDEOGRAPH + {0x90C8, 0x60FE}, //2986 #CJK UNIFIED IDEOGRAPH + {0x90C9, 0x60FF}, //2987 #CJK UNIFIED IDEOGRAPH + {0x90CA, 0x6102}, //2988 #CJK UNIFIED IDEOGRAPH + {0x90CB, 0x6103}, //2989 #CJK UNIFIED IDEOGRAPH + {0x90CC, 0x6104}, //2990 #CJK UNIFIED IDEOGRAPH + {0x90CD, 0x6105}, //2991 #CJK UNIFIED IDEOGRAPH + {0x90CE, 0x6107}, //2992 #CJK UNIFIED IDEOGRAPH + {0x90CF, 0x610A}, //2993 #CJK UNIFIED IDEOGRAPH + {0x90D0, 0x610B}, //2994 #CJK UNIFIED IDEOGRAPH + {0x90D1, 0x610C}, //2995 #CJK UNIFIED IDEOGRAPH + {0x90D2, 0x6110}, //2996 #CJK UNIFIED IDEOGRAPH + {0x90D3, 0x6111}, //2997 #CJK UNIFIED IDEOGRAPH + {0x90D4, 0x6112}, //2998 #CJK UNIFIED IDEOGRAPH + {0x90D5, 0x6113}, //2999 #CJK UNIFIED IDEOGRAPH + {0x90D6, 0x6114}, //3000 #CJK UNIFIED IDEOGRAPH + {0x90D7, 0x6116}, //3001 #CJK UNIFIED IDEOGRAPH + {0x90D8, 0x6117}, //3002 #CJK UNIFIED IDEOGRAPH + {0x90D9, 0x6118}, //3003 #CJK UNIFIED IDEOGRAPH + {0x90DA, 0x6119}, //3004 #CJK UNIFIED IDEOGRAPH + {0x90DB, 0x611B}, //3005 #CJK UNIFIED IDEOGRAPH + {0x90DC, 0x611C}, //3006 #CJK UNIFIED IDEOGRAPH + {0x90DD, 0x611D}, //3007 #CJK UNIFIED IDEOGRAPH + {0x90DE, 0x611E}, //3008 #CJK UNIFIED IDEOGRAPH + {0x90DF, 0x6121}, //3009 #CJK UNIFIED IDEOGRAPH + {0x90E0, 0x6122}, //3010 #CJK UNIFIED IDEOGRAPH + {0x90E1, 0x6125}, //3011 #CJK UNIFIED IDEOGRAPH + {0x90E2, 0x6128}, //3012 #CJK UNIFIED IDEOGRAPH + {0x90E3, 0x6129}, //3013 #CJK UNIFIED IDEOGRAPH + {0x90E4, 0x612A}, //3014 #CJK UNIFIED IDEOGRAPH + {0x90E5, 0x612C}, //3015 #CJK UNIFIED IDEOGRAPH + {0x90E6, 0x612D}, //3016 #CJK UNIFIED IDEOGRAPH + {0x90E7, 0x612E}, //3017 #CJK UNIFIED IDEOGRAPH + {0x90E8, 0x612F}, //3018 #CJK UNIFIED IDEOGRAPH + {0x90E9, 0x6130}, //3019 #CJK UNIFIED IDEOGRAPH + {0x90EA, 0x6131}, //3020 #CJK UNIFIED IDEOGRAPH + {0x90EB, 0x6132}, //3021 #CJK UNIFIED IDEOGRAPH + {0x90EC, 0x6133}, //3022 #CJK UNIFIED IDEOGRAPH + {0x90ED, 0x6134}, //3023 #CJK UNIFIED IDEOGRAPH + {0x90EE, 0x6135}, //3024 #CJK UNIFIED IDEOGRAPH + {0x90EF, 0x6136}, //3025 #CJK UNIFIED IDEOGRAPH + {0x90F0, 0x6137}, //3026 #CJK UNIFIED IDEOGRAPH + {0x90F1, 0x6138}, //3027 #CJK UNIFIED IDEOGRAPH + {0x90F2, 0x6139}, //3028 #CJK UNIFIED IDEOGRAPH + {0x90F3, 0x613A}, //3029 #CJK UNIFIED IDEOGRAPH + {0x90F4, 0x613B}, //3030 #CJK UNIFIED IDEOGRAPH + {0x90F5, 0x613C}, //3031 #CJK UNIFIED IDEOGRAPH + {0x90F6, 0x613D}, //3032 #CJK UNIFIED IDEOGRAPH + {0x90F7, 0x613E}, //3033 #CJK UNIFIED IDEOGRAPH + {0x90F8, 0x6140}, //3034 #CJK UNIFIED IDEOGRAPH + {0x90F9, 0x6141}, //3035 #CJK UNIFIED IDEOGRAPH + {0x90FA, 0x6142}, //3036 #CJK UNIFIED IDEOGRAPH + {0x90FB, 0x6143}, //3037 #CJK UNIFIED IDEOGRAPH + {0x90FC, 0x6144}, //3038 #CJK UNIFIED IDEOGRAPH + {0x90FD, 0x6145}, //3039 #CJK UNIFIED IDEOGRAPH + {0x90FE, 0x6146}, //3040 #CJK UNIFIED IDEOGRAPH + {0x9140, 0x6147}, //3041 #CJK UNIFIED IDEOGRAPH + {0x9141, 0x6149}, //3042 #CJK UNIFIED IDEOGRAPH + {0x9142, 0x614B}, //3043 #CJK UNIFIED IDEOGRAPH + {0x9143, 0x614D}, //3044 #CJK UNIFIED IDEOGRAPH + {0x9144, 0x614F}, //3045 #CJK UNIFIED IDEOGRAPH + {0x9145, 0x6150}, //3046 #CJK UNIFIED IDEOGRAPH + {0x9146, 0x6152}, //3047 #CJK UNIFIED IDEOGRAPH + {0x9147, 0x6153}, //3048 #CJK UNIFIED IDEOGRAPH + {0x9148, 0x6154}, //3049 #CJK UNIFIED IDEOGRAPH + {0x9149, 0x6156}, //3050 #CJK UNIFIED IDEOGRAPH + {0x914A, 0x6157}, //3051 #CJK UNIFIED IDEOGRAPH + {0x914B, 0x6158}, //3052 #CJK UNIFIED IDEOGRAPH + {0x914C, 0x6159}, //3053 #CJK UNIFIED IDEOGRAPH + {0x914D, 0x615A}, //3054 #CJK UNIFIED IDEOGRAPH + {0x914E, 0x615B}, //3055 #CJK UNIFIED IDEOGRAPH + {0x914F, 0x615C}, //3056 #CJK UNIFIED IDEOGRAPH + {0x9150, 0x615E}, //3057 #CJK UNIFIED IDEOGRAPH + {0x9151, 0x615F}, //3058 #CJK UNIFIED IDEOGRAPH + {0x9152, 0x6160}, //3059 #CJK UNIFIED IDEOGRAPH + {0x9153, 0x6161}, //3060 #CJK UNIFIED IDEOGRAPH + {0x9154, 0x6163}, //3061 #CJK UNIFIED IDEOGRAPH + {0x9155, 0x6164}, //3062 #CJK UNIFIED IDEOGRAPH + {0x9156, 0x6165}, //3063 #CJK UNIFIED IDEOGRAPH + {0x9157, 0x6166}, //3064 #CJK UNIFIED IDEOGRAPH + {0x9158, 0x6169}, //3065 #CJK UNIFIED IDEOGRAPH + {0x9159, 0x616A}, //3066 #CJK UNIFIED IDEOGRAPH + {0x915A, 0x616B}, //3067 #CJK UNIFIED IDEOGRAPH + {0x915B, 0x616C}, //3068 #CJK UNIFIED IDEOGRAPH + {0x915C, 0x616D}, //3069 #CJK UNIFIED IDEOGRAPH + {0x915D, 0x616E}, //3070 #CJK UNIFIED IDEOGRAPH + {0x915E, 0x616F}, //3071 #CJK UNIFIED IDEOGRAPH + {0x915F, 0x6171}, //3072 #CJK UNIFIED IDEOGRAPH + {0x9160, 0x6172}, //3073 #CJK UNIFIED IDEOGRAPH + {0x9161, 0x6173}, //3074 #CJK UNIFIED IDEOGRAPH + {0x9162, 0x6174}, //3075 #CJK UNIFIED IDEOGRAPH + {0x9163, 0x6176}, //3076 #CJK UNIFIED IDEOGRAPH + {0x9164, 0x6178}, //3077 #CJK UNIFIED IDEOGRAPH + {0x9165, 0x6179}, //3078 #CJK UNIFIED IDEOGRAPH + {0x9166, 0x617A}, //3079 #CJK UNIFIED IDEOGRAPH + {0x9167, 0x617B}, //3080 #CJK UNIFIED IDEOGRAPH + {0x9168, 0x617C}, //3081 #CJK UNIFIED IDEOGRAPH + {0x9169, 0x617D}, //3082 #CJK UNIFIED IDEOGRAPH + {0x916A, 0x617E}, //3083 #CJK UNIFIED IDEOGRAPH + {0x916B, 0x617F}, //3084 #CJK UNIFIED IDEOGRAPH + {0x916C, 0x6180}, //3085 #CJK UNIFIED IDEOGRAPH + {0x916D, 0x6181}, //3086 #CJK UNIFIED IDEOGRAPH + {0x916E, 0x6182}, //3087 #CJK UNIFIED IDEOGRAPH + {0x916F, 0x6183}, //3088 #CJK UNIFIED IDEOGRAPH + {0x9170, 0x6184}, //3089 #CJK UNIFIED IDEOGRAPH + {0x9171, 0x6185}, //3090 #CJK UNIFIED IDEOGRAPH + {0x9172, 0x6186}, //3091 #CJK UNIFIED IDEOGRAPH + {0x9173, 0x6187}, //3092 #CJK UNIFIED IDEOGRAPH + {0x9174, 0x6188}, //3093 #CJK UNIFIED IDEOGRAPH + {0x9175, 0x6189}, //3094 #CJK UNIFIED IDEOGRAPH + {0x9176, 0x618A}, //3095 #CJK UNIFIED IDEOGRAPH + {0x9177, 0x618C}, //3096 #CJK UNIFIED IDEOGRAPH + {0x9178, 0x618D}, //3097 #CJK UNIFIED IDEOGRAPH + {0x9179, 0x618F}, //3098 #CJK UNIFIED IDEOGRAPH + {0x917A, 0x6190}, //3099 #CJK UNIFIED IDEOGRAPH + {0x917B, 0x6191}, //3100 #CJK UNIFIED IDEOGRAPH + {0x917C, 0x6192}, //3101 #CJK UNIFIED IDEOGRAPH + {0x917D, 0x6193}, //3102 #CJK UNIFIED IDEOGRAPH + {0x917E, 0x6195}, //3103 #CJK UNIFIED IDEOGRAPH + {0x9180, 0x6196}, //3104 #CJK UNIFIED IDEOGRAPH + {0x9181, 0x6197}, //3105 #CJK UNIFIED IDEOGRAPH + {0x9182, 0x6198}, //3106 #CJK UNIFIED IDEOGRAPH + {0x9183, 0x6199}, //3107 #CJK UNIFIED IDEOGRAPH + {0x9184, 0x619A}, //3108 #CJK UNIFIED IDEOGRAPH + {0x9185, 0x619B}, //3109 #CJK UNIFIED IDEOGRAPH + {0x9186, 0x619C}, //3110 #CJK UNIFIED IDEOGRAPH + {0x9187, 0x619E}, //3111 #CJK UNIFIED IDEOGRAPH + {0x9188, 0x619F}, //3112 #CJK UNIFIED IDEOGRAPH + {0x9189, 0x61A0}, //3113 #CJK UNIFIED IDEOGRAPH + {0x918A, 0x61A1}, //3114 #CJK UNIFIED IDEOGRAPH + {0x918B, 0x61A2}, //3115 #CJK UNIFIED IDEOGRAPH + {0x918C, 0x61A3}, //3116 #CJK UNIFIED IDEOGRAPH + {0x918D, 0x61A4}, //3117 #CJK UNIFIED IDEOGRAPH + {0x918E, 0x61A5}, //3118 #CJK UNIFIED IDEOGRAPH + {0x918F, 0x61A6}, //3119 #CJK UNIFIED IDEOGRAPH + {0x9190, 0x61AA}, //3120 #CJK UNIFIED IDEOGRAPH + {0x9191, 0x61AB}, //3121 #CJK UNIFIED IDEOGRAPH + {0x9192, 0x61AD}, //3122 #CJK UNIFIED IDEOGRAPH + {0x9193, 0x61AE}, //3123 #CJK UNIFIED IDEOGRAPH + {0x9194, 0x61AF}, //3124 #CJK UNIFIED IDEOGRAPH + {0x9195, 0x61B0}, //3125 #CJK UNIFIED IDEOGRAPH + {0x9196, 0x61B1}, //3126 #CJK UNIFIED IDEOGRAPH + {0x9197, 0x61B2}, //3127 #CJK UNIFIED IDEOGRAPH + {0x9198, 0x61B3}, //3128 #CJK UNIFIED IDEOGRAPH + {0x9199, 0x61B4}, //3129 #CJK UNIFIED IDEOGRAPH + {0x919A, 0x61B5}, //3130 #CJK UNIFIED IDEOGRAPH + {0x919B, 0x61B6}, //3131 #CJK UNIFIED IDEOGRAPH + {0x919C, 0x61B8}, //3132 #CJK UNIFIED IDEOGRAPH + {0x919D, 0x61B9}, //3133 #CJK UNIFIED IDEOGRAPH + {0x919E, 0x61BA}, //3134 #CJK UNIFIED IDEOGRAPH + {0x919F, 0x61BB}, //3135 #CJK UNIFIED IDEOGRAPH + {0x91A0, 0x61BC}, //3136 #CJK UNIFIED IDEOGRAPH + {0x91A1, 0x61BD}, //3137 #CJK UNIFIED IDEOGRAPH + {0x91A2, 0x61BF}, //3138 #CJK UNIFIED IDEOGRAPH + {0x91A3, 0x61C0}, //3139 #CJK UNIFIED IDEOGRAPH + {0x91A4, 0x61C1}, //3140 #CJK UNIFIED IDEOGRAPH + {0x91A5, 0x61C3}, //3141 #CJK UNIFIED IDEOGRAPH + {0x91A6, 0x61C4}, //3142 #CJK UNIFIED IDEOGRAPH + {0x91A7, 0x61C5}, //3143 #CJK UNIFIED IDEOGRAPH + {0x91A8, 0x61C6}, //3144 #CJK UNIFIED IDEOGRAPH + {0x91A9, 0x61C7}, //3145 #CJK UNIFIED IDEOGRAPH + {0x91AA, 0x61C9}, //3146 #CJK UNIFIED IDEOGRAPH + {0x91AB, 0x61CC}, //3147 #CJK UNIFIED IDEOGRAPH + {0x91AC, 0x61CD}, //3148 #CJK UNIFIED IDEOGRAPH + {0x91AD, 0x61CE}, //3149 #CJK UNIFIED IDEOGRAPH + {0x91AE, 0x61CF}, //3150 #CJK UNIFIED IDEOGRAPH + {0x91AF, 0x61D0}, //3151 #CJK UNIFIED IDEOGRAPH + {0x91B0, 0x61D3}, //3152 #CJK UNIFIED IDEOGRAPH + {0x91B1, 0x61D5}, //3153 #CJK UNIFIED IDEOGRAPH + {0x91B2, 0x61D6}, //3154 #CJK UNIFIED IDEOGRAPH + {0x91B3, 0x61D7}, //3155 #CJK UNIFIED IDEOGRAPH + {0x91B4, 0x61D8}, //3156 #CJK UNIFIED IDEOGRAPH + {0x91B5, 0x61D9}, //3157 #CJK UNIFIED IDEOGRAPH + {0x91B6, 0x61DA}, //3158 #CJK UNIFIED IDEOGRAPH + {0x91B7, 0x61DB}, //3159 #CJK UNIFIED IDEOGRAPH + {0x91B8, 0x61DC}, //3160 #CJK UNIFIED IDEOGRAPH + {0x91B9, 0x61DD}, //3161 #CJK UNIFIED IDEOGRAPH + {0x91BA, 0x61DE}, //3162 #CJK UNIFIED IDEOGRAPH + {0x91BB, 0x61DF}, //3163 #CJK UNIFIED IDEOGRAPH + {0x91BC, 0x61E0}, //3164 #CJK UNIFIED IDEOGRAPH + {0x91BD, 0x61E1}, //3165 #CJK UNIFIED IDEOGRAPH + {0x91BE, 0x61E2}, //3166 #CJK UNIFIED IDEOGRAPH + {0x91BF, 0x61E3}, //3167 #CJK UNIFIED IDEOGRAPH + {0x91C0, 0x61E4}, //3168 #CJK UNIFIED IDEOGRAPH + {0x91C1, 0x61E5}, //3169 #CJK UNIFIED IDEOGRAPH + {0x91C2, 0x61E7}, //3170 #CJK UNIFIED IDEOGRAPH + {0x91C3, 0x61E8}, //3171 #CJK UNIFIED IDEOGRAPH + {0x91C4, 0x61E9}, //3172 #CJK UNIFIED IDEOGRAPH + {0x91C5, 0x61EA}, //3173 #CJK UNIFIED IDEOGRAPH + {0x91C6, 0x61EB}, //3174 #CJK UNIFIED IDEOGRAPH + {0x91C7, 0x61EC}, //3175 #CJK UNIFIED IDEOGRAPH + {0x91C8, 0x61ED}, //3176 #CJK UNIFIED IDEOGRAPH + {0x91C9, 0x61EE}, //3177 #CJK UNIFIED IDEOGRAPH + {0x91CA, 0x61EF}, //3178 #CJK UNIFIED IDEOGRAPH + {0x91CB, 0x61F0}, //3179 #CJK UNIFIED IDEOGRAPH + {0x91CC, 0x61F1}, //3180 #CJK UNIFIED IDEOGRAPH + {0x91CD, 0x61F2}, //3181 #CJK UNIFIED IDEOGRAPH + {0x91CE, 0x61F3}, //3182 #CJK UNIFIED IDEOGRAPH + {0x91CF, 0x61F4}, //3183 #CJK UNIFIED IDEOGRAPH + {0x91D0, 0x61F6}, //3184 #CJK UNIFIED IDEOGRAPH + {0x91D1, 0x61F7}, //3185 #CJK UNIFIED IDEOGRAPH + {0x91D2, 0x61F8}, //3186 #CJK UNIFIED IDEOGRAPH + {0x91D3, 0x61F9}, //3187 #CJK UNIFIED IDEOGRAPH + {0x91D4, 0x61FA}, //3188 #CJK UNIFIED IDEOGRAPH + {0x91D5, 0x61FB}, //3189 #CJK UNIFIED IDEOGRAPH + {0x91D6, 0x61FC}, //3190 #CJK UNIFIED IDEOGRAPH + {0x91D7, 0x61FD}, //3191 #CJK UNIFIED IDEOGRAPH + {0x91D8, 0x61FE}, //3192 #CJK UNIFIED IDEOGRAPH + {0x91D9, 0x6200}, //3193 #CJK UNIFIED IDEOGRAPH + {0x91DA, 0x6201}, //3194 #CJK UNIFIED IDEOGRAPH + {0x91DB, 0x6202}, //3195 #CJK UNIFIED IDEOGRAPH + {0x91DC, 0x6203}, //3196 #CJK UNIFIED IDEOGRAPH + {0x91DD, 0x6204}, //3197 #CJK UNIFIED IDEOGRAPH + {0x91DE, 0x6205}, //3198 #CJK UNIFIED IDEOGRAPH + {0x91DF, 0x6207}, //3199 #CJK UNIFIED IDEOGRAPH + {0x91E0, 0x6209}, //3200 #CJK UNIFIED IDEOGRAPH + {0x91E1, 0x6213}, //3201 #CJK UNIFIED IDEOGRAPH + {0x91E2, 0x6214}, //3202 #CJK UNIFIED IDEOGRAPH + {0x91E3, 0x6219}, //3203 #CJK UNIFIED IDEOGRAPH + {0x91E4, 0x621C}, //3204 #CJK UNIFIED IDEOGRAPH + {0x91E5, 0x621D}, //3205 #CJK UNIFIED IDEOGRAPH + {0x91E6, 0x621E}, //3206 #CJK UNIFIED IDEOGRAPH + {0x91E7, 0x6220}, //3207 #CJK UNIFIED IDEOGRAPH + {0x91E8, 0x6223}, //3208 #CJK UNIFIED IDEOGRAPH + {0x91E9, 0x6226}, //3209 #CJK UNIFIED IDEOGRAPH + {0x91EA, 0x6227}, //3210 #CJK UNIFIED IDEOGRAPH + {0x91EB, 0x6228}, //3211 #CJK UNIFIED IDEOGRAPH + {0x91EC, 0x6229}, //3212 #CJK UNIFIED IDEOGRAPH + {0x91ED, 0x622B}, //3213 #CJK UNIFIED IDEOGRAPH + {0x91EE, 0x622D}, //3214 #CJK UNIFIED IDEOGRAPH + {0x91EF, 0x622F}, //3215 #CJK UNIFIED IDEOGRAPH + {0x91F0, 0x6230}, //3216 #CJK UNIFIED IDEOGRAPH + {0x91F1, 0x6231}, //3217 #CJK UNIFIED IDEOGRAPH + {0x91F2, 0x6232}, //3218 #CJK UNIFIED IDEOGRAPH + {0x91F3, 0x6235}, //3219 #CJK UNIFIED IDEOGRAPH + {0x91F4, 0x6236}, //3220 #CJK UNIFIED IDEOGRAPH + {0x91F5, 0x6238}, //3221 #CJK UNIFIED IDEOGRAPH + {0x91F6, 0x6239}, //3222 #CJK UNIFIED IDEOGRAPH + {0x91F7, 0x623A}, //3223 #CJK UNIFIED IDEOGRAPH + {0x91F8, 0x623B}, //3224 #CJK UNIFIED IDEOGRAPH + {0x91F9, 0x623C}, //3225 #CJK UNIFIED IDEOGRAPH + {0x91FA, 0x6242}, //3226 #CJK UNIFIED IDEOGRAPH + {0x91FB, 0x6244}, //3227 #CJK UNIFIED IDEOGRAPH + {0x91FC, 0x6245}, //3228 #CJK UNIFIED IDEOGRAPH + {0x91FD, 0x6246}, //3229 #CJK UNIFIED IDEOGRAPH + {0x91FE, 0x624A}, //3230 #CJK UNIFIED IDEOGRAPH + {0x9240, 0x624F}, //3231 #CJK UNIFIED IDEOGRAPH + {0x9241, 0x6250}, //3232 #CJK UNIFIED IDEOGRAPH + {0x9242, 0x6255}, //3233 #CJK UNIFIED IDEOGRAPH + {0x9243, 0x6256}, //3234 #CJK UNIFIED IDEOGRAPH + {0x9244, 0x6257}, //3235 #CJK UNIFIED IDEOGRAPH + {0x9245, 0x6259}, //3236 #CJK UNIFIED IDEOGRAPH + {0x9246, 0x625A}, //3237 #CJK UNIFIED IDEOGRAPH + {0x9247, 0x625C}, //3238 #CJK UNIFIED IDEOGRAPH + {0x9248, 0x625D}, //3239 #CJK UNIFIED IDEOGRAPH + {0x9249, 0x625E}, //3240 #CJK UNIFIED IDEOGRAPH + {0x924A, 0x625F}, //3241 #CJK UNIFIED IDEOGRAPH + {0x924B, 0x6260}, //3242 #CJK UNIFIED IDEOGRAPH + {0x924C, 0x6261}, //3243 #CJK UNIFIED IDEOGRAPH + {0x924D, 0x6262}, //3244 #CJK UNIFIED IDEOGRAPH + {0x924E, 0x6264}, //3245 #CJK UNIFIED IDEOGRAPH + {0x924F, 0x6265}, //3246 #CJK UNIFIED IDEOGRAPH + {0x9250, 0x6268}, //3247 #CJK UNIFIED IDEOGRAPH + {0x9251, 0x6271}, //3248 #CJK UNIFIED IDEOGRAPH + {0x9252, 0x6272}, //3249 #CJK UNIFIED IDEOGRAPH + {0x9253, 0x6274}, //3250 #CJK UNIFIED IDEOGRAPH + {0x9254, 0x6275}, //3251 #CJK UNIFIED IDEOGRAPH + {0x9255, 0x6277}, //3252 #CJK UNIFIED IDEOGRAPH + {0x9256, 0x6278}, //3253 #CJK UNIFIED IDEOGRAPH + {0x9257, 0x627A}, //3254 #CJK UNIFIED IDEOGRAPH + {0x9258, 0x627B}, //3255 #CJK UNIFIED IDEOGRAPH + {0x9259, 0x627D}, //3256 #CJK UNIFIED IDEOGRAPH + {0x925A, 0x6281}, //3257 #CJK UNIFIED IDEOGRAPH + {0x925B, 0x6282}, //3258 #CJK UNIFIED IDEOGRAPH + {0x925C, 0x6283}, //3259 #CJK UNIFIED IDEOGRAPH + {0x925D, 0x6285}, //3260 #CJK UNIFIED IDEOGRAPH + {0x925E, 0x6286}, //3261 #CJK UNIFIED IDEOGRAPH + {0x925F, 0x6287}, //3262 #CJK UNIFIED IDEOGRAPH + {0x9260, 0x6288}, //3263 #CJK UNIFIED IDEOGRAPH + {0x9261, 0x628B}, //3264 #CJK UNIFIED IDEOGRAPH + {0x9262, 0x628C}, //3265 #CJK UNIFIED IDEOGRAPH + {0x9263, 0x628D}, //3266 #CJK UNIFIED IDEOGRAPH + {0x9264, 0x628E}, //3267 #CJK UNIFIED IDEOGRAPH + {0x9265, 0x628F}, //3268 #CJK UNIFIED IDEOGRAPH + {0x9266, 0x6290}, //3269 #CJK UNIFIED IDEOGRAPH + {0x9267, 0x6294}, //3270 #CJK UNIFIED IDEOGRAPH + {0x9268, 0x6299}, //3271 #CJK UNIFIED IDEOGRAPH + {0x9269, 0x629C}, //3272 #CJK UNIFIED IDEOGRAPH + {0x926A, 0x629D}, //3273 #CJK UNIFIED IDEOGRAPH + {0x926B, 0x629E}, //3274 #CJK UNIFIED IDEOGRAPH + {0x926C, 0x62A3}, //3275 #CJK UNIFIED IDEOGRAPH + {0x926D, 0x62A6}, //3276 #CJK UNIFIED IDEOGRAPH + {0x926E, 0x62A7}, //3277 #CJK UNIFIED IDEOGRAPH + {0x926F, 0x62A9}, //3278 #CJK UNIFIED IDEOGRAPH + {0x9270, 0x62AA}, //3279 #CJK UNIFIED IDEOGRAPH + {0x9271, 0x62AD}, //3280 #CJK UNIFIED IDEOGRAPH + {0x9272, 0x62AE}, //3281 #CJK UNIFIED IDEOGRAPH + {0x9273, 0x62AF}, //3282 #CJK UNIFIED IDEOGRAPH + {0x9274, 0x62B0}, //3283 #CJK UNIFIED IDEOGRAPH + {0x9275, 0x62B2}, //3284 #CJK UNIFIED IDEOGRAPH + {0x9276, 0x62B3}, //3285 #CJK UNIFIED IDEOGRAPH + {0x9277, 0x62B4}, //3286 #CJK UNIFIED IDEOGRAPH + {0x9278, 0x62B6}, //3287 #CJK UNIFIED IDEOGRAPH + {0x9279, 0x62B7}, //3288 #CJK UNIFIED IDEOGRAPH + {0x927A, 0x62B8}, //3289 #CJK UNIFIED IDEOGRAPH + {0x927B, 0x62BA}, //3290 #CJK UNIFIED IDEOGRAPH + {0x927C, 0x62BE}, //3291 #CJK UNIFIED IDEOGRAPH + {0x927D, 0x62C0}, //3292 #CJK UNIFIED IDEOGRAPH + {0x927E, 0x62C1}, //3293 #CJK UNIFIED IDEOGRAPH + {0x9280, 0x62C3}, //3294 #CJK UNIFIED IDEOGRAPH + {0x9281, 0x62CB}, //3295 #CJK UNIFIED IDEOGRAPH + {0x9282, 0x62CF}, //3296 #CJK UNIFIED IDEOGRAPH + {0x9283, 0x62D1}, //3297 #CJK UNIFIED IDEOGRAPH + {0x9284, 0x62D5}, //3298 #CJK UNIFIED IDEOGRAPH + {0x9285, 0x62DD}, //3299 #CJK UNIFIED IDEOGRAPH + {0x9286, 0x62DE}, //3300 #CJK UNIFIED IDEOGRAPH + {0x9287, 0x62E0}, //3301 #CJK UNIFIED IDEOGRAPH + {0x9288, 0x62E1}, //3302 #CJK UNIFIED IDEOGRAPH + {0x9289, 0x62E4}, //3303 #CJK UNIFIED IDEOGRAPH + {0x928A, 0x62EA}, //3304 #CJK UNIFIED IDEOGRAPH + {0x928B, 0x62EB}, //3305 #CJK UNIFIED IDEOGRAPH + {0x928C, 0x62F0}, //3306 #CJK UNIFIED IDEOGRAPH + {0x928D, 0x62F2}, //3307 #CJK UNIFIED IDEOGRAPH + {0x928E, 0x62F5}, //3308 #CJK UNIFIED IDEOGRAPH + {0x928F, 0x62F8}, //3309 #CJK UNIFIED IDEOGRAPH + {0x9290, 0x62F9}, //3310 #CJK UNIFIED IDEOGRAPH + {0x9291, 0x62FA}, //3311 #CJK UNIFIED IDEOGRAPH + {0x9292, 0x62FB}, //3312 #CJK UNIFIED IDEOGRAPH + {0x9293, 0x6300}, //3313 #CJK UNIFIED IDEOGRAPH + {0x9294, 0x6303}, //3314 #CJK UNIFIED IDEOGRAPH + {0x9295, 0x6304}, //3315 #CJK UNIFIED IDEOGRAPH + {0x9296, 0x6305}, //3316 #CJK UNIFIED IDEOGRAPH + {0x9297, 0x6306}, //3317 #CJK UNIFIED IDEOGRAPH + {0x9298, 0x630A}, //3318 #CJK UNIFIED IDEOGRAPH + {0x9299, 0x630B}, //3319 #CJK UNIFIED IDEOGRAPH + {0x929A, 0x630C}, //3320 #CJK UNIFIED IDEOGRAPH + {0x929B, 0x630D}, //3321 #CJK UNIFIED IDEOGRAPH + {0x929C, 0x630F}, //3322 #CJK UNIFIED IDEOGRAPH + {0x929D, 0x6310}, //3323 #CJK UNIFIED IDEOGRAPH + {0x929E, 0x6312}, //3324 #CJK UNIFIED IDEOGRAPH + {0x929F, 0x6313}, //3325 #CJK UNIFIED IDEOGRAPH + {0x92A0, 0x6314}, //3326 #CJK UNIFIED IDEOGRAPH + {0x92A1, 0x6315}, //3327 #CJK UNIFIED IDEOGRAPH + {0x92A2, 0x6317}, //3328 #CJK UNIFIED IDEOGRAPH + {0x92A3, 0x6318}, //3329 #CJK UNIFIED IDEOGRAPH + {0x92A4, 0x6319}, //3330 #CJK UNIFIED IDEOGRAPH + {0x92A5, 0x631C}, //3331 #CJK UNIFIED IDEOGRAPH + {0x92A6, 0x6326}, //3332 #CJK UNIFIED IDEOGRAPH + {0x92A7, 0x6327}, //3333 #CJK UNIFIED IDEOGRAPH + {0x92A8, 0x6329}, //3334 #CJK UNIFIED IDEOGRAPH + {0x92A9, 0x632C}, //3335 #CJK UNIFIED IDEOGRAPH + {0x92AA, 0x632D}, //3336 #CJK UNIFIED IDEOGRAPH + {0x92AB, 0x632E}, //3337 #CJK UNIFIED IDEOGRAPH + {0x92AC, 0x6330}, //3338 #CJK UNIFIED IDEOGRAPH + {0x92AD, 0x6331}, //3339 #CJK UNIFIED IDEOGRAPH + {0x92AE, 0x6333}, //3340 #CJK UNIFIED IDEOGRAPH + {0x92AF, 0x6334}, //3341 #CJK UNIFIED IDEOGRAPH + {0x92B0, 0x6335}, //3342 #CJK UNIFIED IDEOGRAPH + {0x92B1, 0x6336}, //3343 #CJK UNIFIED IDEOGRAPH + {0x92B2, 0x6337}, //3344 #CJK UNIFIED IDEOGRAPH + {0x92B3, 0x6338}, //3345 #CJK UNIFIED IDEOGRAPH + {0x92B4, 0x633B}, //3346 #CJK UNIFIED IDEOGRAPH + {0x92B5, 0x633C}, //3347 #CJK UNIFIED IDEOGRAPH + {0x92B6, 0x633E}, //3348 #CJK UNIFIED IDEOGRAPH + {0x92B7, 0x633F}, //3349 #CJK UNIFIED IDEOGRAPH + {0x92B8, 0x6340}, //3350 #CJK UNIFIED IDEOGRAPH + {0x92B9, 0x6341}, //3351 #CJK UNIFIED IDEOGRAPH + {0x92BA, 0x6344}, //3352 #CJK UNIFIED IDEOGRAPH + {0x92BB, 0x6347}, //3353 #CJK UNIFIED IDEOGRAPH + {0x92BC, 0x6348}, //3354 #CJK UNIFIED IDEOGRAPH + {0x92BD, 0x634A}, //3355 #CJK UNIFIED IDEOGRAPH + {0x92BE, 0x6351}, //3356 #CJK UNIFIED IDEOGRAPH + {0x92BF, 0x6352}, //3357 #CJK UNIFIED IDEOGRAPH + {0x92C0, 0x6353}, //3358 #CJK UNIFIED IDEOGRAPH + {0x92C1, 0x6354}, //3359 #CJK UNIFIED IDEOGRAPH + {0x92C2, 0x6356}, //3360 #CJK UNIFIED IDEOGRAPH + {0x92C3, 0x6357}, //3361 #CJK UNIFIED IDEOGRAPH + {0x92C4, 0x6358}, //3362 #CJK UNIFIED IDEOGRAPH + {0x92C5, 0x6359}, //3363 #CJK UNIFIED IDEOGRAPH + {0x92C6, 0x635A}, //3364 #CJK UNIFIED IDEOGRAPH + {0x92C7, 0x635B}, //3365 #CJK UNIFIED IDEOGRAPH + {0x92C8, 0x635C}, //3366 #CJK UNIFIED IDEOGRAPH + {0x92C9, 0x635D}, //3367 #CJK UNIFIED IDEOGRAPH + {0x92CA, 0x6360}, //3368 #CJK UNIFIED IDEOGRAPH + {0x92CB, 0x6364}, //3369 #CJK UNIFIED IDEOGRAPH + {0x92CC, 0x6365}, //3370 #CJK UNIFIED IDEOGRAPH + {0x92CD, 0x6366}, //3371 #CJK UNIFIED IDEOGRAPH + {0x92CE, 0x6368}, //3372 #CJK UNIFIED IDEOGRAPH + {0x92CF, 0x636A}, //3373 #CJK UNIFIED IDEOGRAPH + {0x92D0, 0x636B}, //3374 #CJK UNIFIED IDEOGRAPH + {0x92D1, 0x636C}, //3375 #CJK UNIFIED IDEOGRAPH + {0x92D2, 0x636F}, //3376 #CJK UNIFIED IDEOGRAPH + {0x92D3, 0x6370}, //3377 #CJK UNIFIED IDEOGRAPH + {0x92D4, 0x6372}, //3378 #CJK UNIFIED IDEOGRAPH + {0x92D5, 0x6373}, //3379 #CJK UNIFIED IDEOGRAPH + {0x92D6, 0x6374}, //3380 #CJK UNIFIED IDEOGRAPH + {0x92D7, 0x6375}, //3381 #CJK UNIFIED IDEOGRAPH + {0x92D8, 0x6378}, //3382 #CJK UNIFIED IDEOGRAPH + {0x92D9, 0x6379}, //3383 #CJK UNIFIED IDEOGRAPH + {0x92DA, 0x637C}, //3384 #CJK UNIFIED IDEOGRAPH + {0x92DB, 0x637D}, //3385 #CJK UNIFIED IDEOGRAPH + {0x92DC, 0x637E}, //3386 #CJK UNIFIED IDEOGRAPH + {0x92DD, 0x637F}, //3387 #CJK UNIFIED IDEOGRAPH + {0x92DE, 0x6381}, //3388 #CJK UNIFIED IDEOGRAPH + {0x92DF, 0x6383}, //3389 #CJK UNIFIED IDEOGRAPH + {0x92E0, 0x6384}, //3390 #CJK UNIFIED IDEOGRAPH + {0x92E1, 0x6385}, //3391 #CJK UNIFIED IDEOGRAPH + {0x92E2, 0x6386}, //3392 #CJK UNIFIED IDEOGRAPH + {0x92E3, 0x638B}, //3393 #CJK UNIFIED IDEOGRAPH + {0x92E4, 0x638D}, //3394 #CJK UNIFIED IDEOGRAPH + {0x92E5, 0x6391}, //3395 #CJK UNIFIED IDEOGRAPH + {0x92E6, 0x6393}, //3396 #CJK UNIFIED IDEOGRAPH + {0x92E7, 0x6394}, //3397 #CJK UNIFIED IDEOGRAPH + {0x92E8, 0x6395}, //3398 #CJK UNIFIED IDEOGRAPH + {0x92E9, 0x6397}, //3399 #CJK UNIFIED IDEOGRAPH + {0x92EA, 0x6399}, //3400 #CJK UNIFIED IDEOGRAPH + {0x92EB, 0x639A}, //3401 #CJK UNIFIED IDEOGRAPH + {0x92EC, 0x639B}, //3402 #CJK UNIFIED IDEOGRAPH + {0x92ED, 0x639C}, //3403 #CJK UNIFIED IDEOGRAPH + {0x92EE, 0x639D}, //3404 #CJK UNIFIED IDEOGRAPH + {0x92EF, 0x639E}, //3405 #CJK UNIFIED IDEOGRAPH + {0x92F0, 0x639F}, //3406 #CJK UNIFIED IDEOGRAPH + {0x92F1, 0x63A1}, //3407 #CJK UNIFIED IDEOGRAPH + {0x92F2, 0x63A4}, //3408 #CJK UNIFIED IDEOGRAPH + {0x92F3, 0x63A6}, //3409 #CJK UNIFIED IDEOGRAPH + {0x92F4, 0x63AB}, //3410 #CJK UNIFIED IDEOGRAPH + {0x92F5, 0x63AF}, //3411 #CJK UNIFIED IDEOGRAPH + {0x92F6, 0x63B1}, //3412 #CJK UNIFIED IDEOGRAPH + {0x92F7, 0x63B2}, //3413 #CJK UNIFIED IDEOGRAPH + {0x92F8, 0x63B5}, //3414 #CJK UNIFIED IDEOGRAPH + {0x92F9, 0x63B6}, //3415 #CJK UNIFIED IDEOGRAPH + {0x92FA, 0x63B9}, //3416 #CJK UNIFIED IDEOGRAPH + {0x92FB, 0x63BB}, //3417 #CJK UNIFIED IDEOGRAPH + {0x92FC, 0x63BD}, //3418 #CJK UNIFIED IDEOGRAPH + {0x92FD, 0x63BF}, //3419 #CJK UNIFIED IDEOGRAPH + {0x92FE, 0x63C0}, //3420 #CJK UNIFIED IDEOGRAPH + {0x9340, 0x63C1}, //3421 #CJK UNIFIED IDEOGRAPH + {0x9341, 0x63C2}, //3422 #CJK UNIFIED IDEOGRAPH + {0x9342, 0x63C3}, //3423 #CJK UNIFIED IDEOGRAPH + {0x9343, 0x63C5}, //3424 #CJK UNIFIED IDEOGRAPH + {0x9344, 0x63C7}, //3425 #CJK UNIFIED IDEOGRAPH + {0x9345, 0x63C8}, //3426 #CJK UNIFIED IDEOGRAPH + {0x9346, 0x63CA}, //3427 #CJK UNIFIED IDEOGRAPH + {0x9347, 0x63CB}, //3428 #CJK UNIFIED IDEOGRAPH + {0x9348, 0x63CC}, //3429 #CJK UNIFIED IDEOGRAPH + {0x9349, 0x63D1}, //3430 #CJK UNIFIED IDEOGRAPH + {0x934A, 0x63D3}, //3431 #CJK UNIFIED IDEOGRAPH + {0x934B, 0x63D4}, //3432 #CJK UNIFIED IDEOGRAPH + {0x934C, 0x63D5}, //3433 #CJK UNIFIED IDEOGRAPH + {0x934D, 0x63D7}, //3434 #CJK UNIFIED IDEOGRAPH + {0x934E, 0x63D8}, //3435 #CJK UNIFIED IDEOGRAPH + {0x934F, 0x63D9}, //3436 #CJK UNIFIED IDEOGRAPH + {0x9350, 0x63DA}, //3437 #CJK UNIFIED IDEOGRAPH + {0x9351, 0x63DB}, //3438 #CJK UNIFIED IDEOGRAPH + {0x9352, 0x63DC}, //3439 #CJK UNIFIED IDEOGRAPH + {0x9353, 0x63DD}, //3440 #CJK UNIFIED IDEOGRAPH + {0x9354, 0x63DF}, //3441 #CJK UNIFIED IDEOGRAPH + {0x9355, 0x63E2}, //3442 #CJK UNIFIED IDEOGRAPH + {0x9356, 0x63E4}, //3443 #CJK UNIFIED IDEOGRAPH + {0x9357, 0x63E5}, //3444 #CJK UNIFIED IDEOGRAPH + {0x9358, 0x63E6}, //3445 #CJK UNIFIED IDEOGRAPH + {0x9359, 0x63E7}, //3446 #CJK UNIFIED IDEOGRAPH + {0x935A, 0x63E8}, //3447 #CJK UNIFIED IDEOGRAPH + {0x935B, 0x63EB}, //3448 #CJK UNIFIED IDEOGRAPH + {0x935C, 0x63EC}, //3449 #CJK UNIFIED IDEOGRAPH + {0x935D, 0x63EE}, //3450 #CJK UNIFIED IDEOGRAPH + {0x935E, 0x63EF}, //3451 #CJK UNIFIED IDEOGRAPH + {0x935F, 0x63F0}, //3452 #CJK UNIFIED IDEOGRAPH + {0x9360, 0x63F1}, //3453 #CJK UNIFIED IDEOGRAPH + {0x9361, 0x63F3}, //3454 #CJK UNIFIED IDEOGRAPH + {0x9362, 0x63F5}, //3455 #CJK UNIFIED IDEOGRAPH + {0x9363, 0x63F7}, //3456 #CJK UNIFIED IDEOGRAPH + {0x9364, 0x63F9}, //3457 #CJK UNIFIED IDEOGRAPH + {0x9365, 0x63FA}, //3458 #CJK UNIFIED IDEOGRAPH + {0x9366, 0x63FB}, //3459 #CJK UNIFIED IDEOGRAPH + {0x9367, 0x63FC}, //3460 #CJK UNIFIED IDEOGRAPH + {0x9368, 0x63FE}, //3461 #CJK UNIFIED IDEOGRAPH + {0x9369, 0x6403}, //3462 #CJK UNIFIED IDEOGRAPH + {0x936A, 0x6404}, //3463 #CJK UNIFIED IDEOGRAPH + {0x936B, 0x6406}, //3464 #CJK UNIFIED IDEOGRAPH + {0x936C, 0x6407}, //3465 #CJK UNIFIED IDEOGRAPH + {0x936D, 0x6408}, //3466 #CJK UNIFIED IDEOGRAPH + {0x936E, 0x6409}, //3467 #CJK UNIFIED IDEOGRAPH + {0x936F, 0x640A}, //3468 #CJK UNIFIED IDEOGRAPH + {0x9370, 0x640D}, //3469 #CJK UNIFIED IDEOGRAPH + {0x9371, 0x640E}, //3470 #CJK UNIFIED IDEOGRAPH + {0x9372, 0x6411}, //3471 #CJK UNIFIED IDEOGRAPH + {0x9373, 0x6412}, //3472 #CJK UNIFIED IDEOGRAPH + {0x9374, 0x6415}, //3473 #CJK UNIFIED IDEOGRAPH + {0x9375, 0x6416}, //3474 #CJK UNIFIED IDEOGRAPH + {0x9376, 0x6417}, //3475 #CJK UNIFIED IDEOGRAPH + {0x9377, 0x6418}, //3476 #CJK UNIFIED IDEOGRAPH + {0x9378, 0x6419}, //3477 #CJK UNIFIED IDEOGRAPH + {0x9379, 0x641A}, //3478 #CJK UNIFIED IDEOGRAPH + {0x937A, 0x641D}, //3479 #CJK UNIFIED IDEOGRAPH + {0x937B, 0x641F}, //3480 #CJK UNIFIED IDEOGRAPH + {0x937C, 0x6422}, //3481 #CJK UNIFIED IDEOGRAPH + {0x937D, 0x6423}, //3482 #CJK UNIFIED IDEOGRAPH + {0x937E, 0x6424}, //3483 #CJK UNIFIED IDEOGRAPH + {0x9380, 0x6425}, //3484 #CJK UNIFIED IDEOGRAPH + {0x9381, 0x6427}, //3485 #CJK UNIFIED IDEOGRAPH + {0x9382, 0x6428}, //3486 #CJK UNIFIED IDEOGRAPH + {0x9383, 0x6429}, //3487 #CJK UNIFIED IDEOGRAPH + {0x9384, 0x642B}, //3488 #CJK UNIFIED IDEOGRAPH + {0x9385, 0x642E}, //3489 #CJK UNIFIED IDEOGRAPH + {0x9386, 0x642F}, //3490 #CJK UNIFIED IDEOGRAPH + {0x9387, 0x6430}, //3491 #CJK UNIFIED IDEOGRAPH + {0x9388, 0x6431}, //3492 #CJK UNIFIED IDEOGRAPH + {0x9389, 0x6432}, //3493 #CJK UNIFIED IDEOGRAPH + {0x938A, 0x6433}, //3494 #CJK UNIFIED IDEOGRAPH + {0x938B, 0x6435}, //3495 #CJK UNIFIED IDEOGRAPH + {0x938C, 0x6436}, //3496 #CJK UNIFIED IDEOGRAPH + {0x938D, 0x6437}, //3497 #CJK UNIFIED IDEOGRAPH + {0x938E, 0x6438}, //3498 #CJK UNIFIED IDEOGRAPH + {0x938F, 0x6439}, //3499 #CJK UNIFIED IDEOGRAPH + {0x9390, 0x643B}, //3500 #CJK UNIFIED IDEOGRAPH + {0x9391, 0x643C}, //3501 #CJK UNIFIED IDEOGRAPH + {0x9392, 0x643E}, //3502 #CJK UNIFIED IDEOGRAPH + {0x9393, 0x6440}, //3503 #CJK UNIFIED IDEOGRAPH + {0x9394, 0x6442}, //3504 #CJK UNIFIED IDEOGRAPH + {0x9395, 0x6443}, //3505 #CJK UNIFIED IDEOGRAPH + {0x9396, 0x6449}, //3506 #CJK UNIFIED IDEOGRAPH + {0x9397, 0x644B}, //3507 #CJK UNIFIED IDEOGRAPH + {0x9398, 0x644C}, //3508 #CJK UNIFIED IDEOGRAPH + {0x9399, 0x644D}, //3509 #CJK UNIFIED IDEOGRAPH + {0x939A, 0x644E}, //3510 #CJK UNIFIED IDEOGRAPH + {0x939B, 0x644F}, //3511 #CJK UNIFIED IDEOGRAPH + {0x939C, 0x6450}, //3512 #CJK UNIFIED IDEOGRAPH + {0x939D, 0x6451}, //3513 #CJK UNIFIED IDEOGRAPH + {0x939E, 0x6453}, //3514 #CJK UNIFIED IDEOGRAPH + {0x939F, 0x6455}, //3515 #CJK UNIFIED IDEOGRAPH + {0x93A0, 0x6456}, //3516 #CJK UNIFIED IDEOGRAPH + {0x93A1, 0x6457}, //3517 #CJK UNIFIED IDEOGRAPH + {0x93A2, 0x6459}, //3518 #CJK UNIFIED IDEOGRAPH + {0x93A3, 0x645A}, //3519 #CJK UNIFIED IDEOGRAPH + {0x93A4, 0x645B}, //3520 #CJK UNIFIED IDEOGRAPH + {0x93A5, 0x645C}, //3521 #CJK UNIFIED IDEOGRAPH + {0x93A6, 0x645D}, //3522 #CJK UNIFIED IDEOGRAPH + {0x93A7, 0x645F}, //3523 #CJK UNIFIED IDEOGRAPH + {0x93A8, 0x6460}, //3524 #CJK UNIFIED IDEOGRAPH + {0x93A9, 0x6461}, //3525 #CJK UNIFIED IDEOGRAPH + {0x93AA, 0x6462}, //3526 #CJK UNIFIED IDEOGRAPH + {0x93AB, 0x6463}, //3527 #CJK UNIFIED IDEOGRAPH + {0x93AC, 0x6464}, //3528 #CJK UNIFIED IDEOGRAPH + {0x93AD, 0x6465}, //3529 #CJK UNIFIED IDEOGRAPH + {0x93AE, 0x6466}, //3530 #CJK UNIFIED IDEOGRAPH + {0x93AF, 0x6468}, //3531 #CJK UNIFIED IDEOGRAPH + {0x93B0, 0x646A}, //3532 #CJK UNIFIED IDEOGRAPH + {0x93B1, 0x646B}, //3533 #CJK UNIFIED IDEOGRAPH + {0x93B2, 0x646C}, //3534 #CJK UNIFIED IDEOGRAPH + {0x93B3, 0x646E}, //3535 #CJK UNIFIED IDEOGRAPH + {0x93B4, 0x646F}, //3536 #CJK UNIFIED IDEOGRAPH + {0x93B5, 0x6470}, //3537 #CJK UNIFIED IDEOGRAPH + {0x93B6, 0x6471}, //3538 #CJK UNIFIED IDEOGRAPH + {0x93B7, 0x6472}, //3539 #CJK UNIFIED IDEOGRAPH + {0x93B8, 0x6473}, //3540 #CJK UNIFIED IDEOGRAPH + {0x93B9, 0x6474}, //3541 #CJK UNIFIED IDEOGRAPH + {0x93BA, 0x6475}, //3542 #CJK UNIFIED IDEOGRAPH + {0x93BB, 0x6476}, //3543 #CJK UNIFIED IDEOGRAPH + {0x93BC, 0x6477}, //3544 #CJK UNIFIED IDEOGRAPH + {0x93BD, 0x647B}, //3545 #CJK UNIFIED IDEOGRAPH + {0x93BE, 0x647C}, //3546 #CJK UNIFIED IDEOGRAPH + {0x93BF, 0x647D}, //3547 #CJK UNIFIED IDEOGRAPH + {0x93C0, 0x647E}, //3548 #CJK UNIFIED IDEOGRAPH + {0x93C1, 0x647F}, //3549 #CJK UNIFIED IDEOGRAPH + {0x93C2, 0x6480}, //3550 #CJK UNIFIED IDEOGRAPH + {0x93C3, 0x6481}, //3551 #CJK UNIFIED IDEOGRAPH + {0x93C4, 0x6483}, //3552 #CJK UNIFIED IDEOGRAPH + {0x93C5, 0x6486}, //3553 #CJK UNIFIED IDEOGRAPH + {0x93C6, 0x6488}, //3554 #CJK UNIFIED IDEOGRAPH + {0x93C7, 0x6489}, //3555 #CJK UNIFIED IDEOGRAPH + {0x93C8, 0x648A}, //3556 #CJK UNIFIED IDEOGRAPH + {0x93C9, 0x648B}, //3557 #CJK UNIFIED IDEOGRAPH + {0x93CA, 0x648C}, //3558 #CJK UNIFIED IDEOGRAPH + {0x93CB, 0x648D}, //3559 #CJK UNIFIED IDEOGRAPH + {0x93CC, 0x648E}, //3560 #CJK UNIFIED IDEOGRAPH + {0x93CD, 0x648F}, //3561 #CJK UNIFIED IDEOGRAPH + {0x93CE, 0x6490}, //3562 #CJK UNIFIED IDEOGRAPH + {0x93CF, 0x6493}, //3563 #CJK UNIFIED IDEOGRAPH + {0x93D0, 0x6494}, //3564 #CJK UNIFIED IDEOGRAPH + {0x93D1, 0x6497}, //3565 #CJK UNIFIED IDEOGRAPH + {0x93D2, 0x6498}, //3566 #CJK UNIFIED IDEOGRAPH + {0x93D3, 0x649A}, //3567 #CJK UNIFIED IDEOGRAPH + {0x93D4, 0x649B}, //3568 #CJK UNIFIED IDEOGRAPH + {0x93D5, 0x649C}, //3569 #CJK UNIFIED IDEOGRAPH + {0x93D6, 0x649D}, //3570 #CJK UNIFIED IDEOGRAPH + {0x93D7, 0x649F}, //3571 #CJK UNIFIED IDEOGRAPH + {0x93D8, 0x64A0}, //3572 #CJK UNIFIED IDEOGRAPH + {0x93D9, 0x64A1}, //3573 #CJK UNIFIED IDEOGRAPH + {0x93DA, 0x64A2}, //3574 #CJK UNIFIED IDEOGRAPH + {0x93DB, 0x64A3}, //3575 #CJK UNIFIED IDEOGRAPH + {0x93DC, 0x64A5}, //3576 #CJK UNIFIED IDEOGRAPH + {0x93DD, 0x64A6}, //3577 #CJK UNIFIED IDEOGRAPH + {0x93DE, 0x64A7}, //3578 #CJK UNIFIED IDEOGRAPH + {0x93DF, 0x64A8}, //3579 #CJK UNIFIED IDEOGRAPH + {0x93E0, 0x64AA}, //3580 #CJK UNIFIED IDEOGRAPH + {0x93E1, 0x64AB}, //3581 #CJK UNIFIED IDEOGRAPH + {0x93E2, 0x64AF}, //3582 #CJK UNIFIED IDEOGRAPH + {0x93E3, 0x64B1}, //3583 #CJK UNIFIED IDEOGRAPH + {0x93E4, 0x64B2}, //3584 #CJK UNIFIED IDEOGRAPH + {0x93E5, 0x64B3}, //3585 #CJK UNIFIED IDEOGRAPH + {0x93E6, 0x64B4}, //3586 #CJK UNIFIED IDEOGRAPH + {0x93E7, 0x64B6}, //3587 #CJK UNIFIED IDEOGRAPH + {0x93E8, 0x64B9}, //3588 #CJK UNIFIED IDEOGRAPH + {0x93E9, 0x64BB}, //3589 #CJK UNIFIED IDEOGRAPH + {0x93EA, 0x64BD}, //3590 #CJK UNIFIED IDEOGRAPH + {0x93EB, 0x64BE}, //3591 #CJK UNIFIED IDEOGRAPH + {0x93EC, 0x64BF}, //3592 #CJK UNIFIED IDEOGRAPH + {0x93ED, 0x64C1}, //3593 #CJK UNIFIED IDEOGRAPH + {0x93EE, 0x64C3}, //3594 #CJK UNIFIED IDEOGRAPH + {0x93EF, 0x64C4}, //3595 #CJK UNIFIED IDEOGRAPH + {0x93F0, 0x64C6}, //3596 #CJK UNIFIED IDEOGRAPH + {0x93F1, 0x64C7}, //3597 #CJK UNIFIED IDEOGRAPH + {0x93F2, 0x64C8}, //3598 #CJK UNIFIED IDEOGRAPH + {0x93F3, 0x64C9}, //3599 #CJK UNIFIED IDEOGRAPH + {0x93F4, 0x64CA}, //3600 #CJK UNIFIED IDEOGRAPH + {0x93F5, 0x64CB}, //3601 #CJK UNIFIED IDEOGRAPH + {0x93F6, 0x64CC}, //3602 #CJK UNIFIED IDEOGRAPH + {0x93F7, 0x64CF}, //3603 #CJK UNIFIED IDEOGRAPH + {0x93F8, 0x64D1}, //3604 #CJK UNIFIED IDEOGRAPH + {0x93F9, 0x64D3}, //3605 #CJK UNIFIED IDEOGRAPH + {0x93FA, 0x64D4}, //3606 #CJK UNIFIED IDEOGRAPH + {0x93FB, 0x64D5}, //3607 #CJK UNIFIED IDEOGRAPH + {0x93FC, 0x64D6}, //3608 #CJK UNIFIED IDEOGRAPH + {0x93FD, 0x64D9}, //3609 #CJK UNIFIED IDEOGRAPH + {0x93FE, 0x64DA}, //3610 #CJK UNIFIED IDEOGRAPH + {0x9440, 0x64DB}, //3611 #CJK UNIFIED IDEOGRAPH + {0x9441, 0x64DC}, //3612 #CJK UNIFIED IDEOGRAPH + {0x9442, 0x64DD}, //3613 #CJK UNIFIED IDEOGRAPH + {0x9443, 0x64DF}, //3614 #CJK UNIFIED IDEOGRAPH + {0x9444, 0x64E0}, //3615 #CJK UNIFIED IDEOGRAPH + {0x9445, 0x64E1}, //3616 #CJK UNIFIED IDEOGRAPH + {0x9446, 0x64E3}, //3617 #CJK UNIFIED IDEOGRAPH + {0x9447, 0x64E5}, //3618 #CJK UNIFIED IDEOGRAPH + {0x9448, 0x64E7}, //3619 #CJK UNIFIED IDEOGRAPH + {0x9449, 0x64E8}, //3620 #CJK UNIFIED IDEOGRAPH + {0x944A, 0x64E9}, //3621 #CJK UNIFIED IDEOGRAPH + {0x944B, 0x64EA}, //3622 #CJK UNIFIED IDEOGRAPH + {0x944C, 0x64EB}, //3623 #CJK UNIFIED IDEOGRAPH + {0x944D, 0x64EC}, //3624 #CJK UNIFIED IDEOGRAPH + {0x944E, 0x64ED}, //3625 #CJK UNIFIED IDEOGRAPH + {0x944F, 0x64EE}, //3626 #CJK UNIFIED IDEOGRAPH + {0x9450, 0x64EF}, //3627 #CJK UNIFIED IDEOGRAPH + {0x9451, 0x64F0}, //3628 #CJK UNIFIED IDEOGRAPH + {0x9452, 0x64F1}, //3629 #CJK UNIFIED IDEOGRAPH + {0x9453, 0x64F2}, //3630 #CJK UNIFIED IDEOGRAPH + {0x9454, 0x64F3}, //3631 #CJK UNIFIED IDEOGRAPH + {0x9455, 0x64F4}, //3632 #CJK UNIFIED IDEOGRAPH + {0x9456, 0x64F5}, //3633 #CJK UNIFIED IDEOGRAPH + {0x9457, 0x64F6}, //3634 #CJK UNIFIED IDEOGRAPH + {0x9458, 0x64F7}, //3635 #CJK UNIFIED IDEOGRAPH + {0x9459, 0x64F8}, //3636 #CJK UNIFIED IDEOGRAPH + {0x945A, 0x64F9}, //3637 #CJK UNIFIED IDEOGRAPH + {0x945B, 0x64FA}, //3638 #CJK UNIFIED IDEOGRAPH + {0x945C, 0x64FB}, //3639 #CJK UNIFIED IDEOGRAPH + {0x945D, 0x64FC}, //3640 #CJK UNIFIED IDEOGRAPH + {0x945E, 0x64FD}, //3641 #CJK UNIFIED IDEOGRAPH + {0x945F, 0x64FE}, //3642 #CJK UNIFIED IDEOGRAPH + {0x9460, 0x64FF}, //3643 #CJK UNIFIED IDEOGRAPH + {0x9461, 0x6501}, //3644 #CJK UNIFIED IDEOGRAPH + {0x9462, 0x6502}, //3645 #CJK UNIFIED IDEOGRAPH + {0x9463, 0x6503}, //3646 #CJK UNIFIED IDEOGRAPH + {0x9464, 0x6504}, //3647 #CJK UNIFIED IDEOGRAPH + {0x9465, 0x6505}, //3648 #CJK UNIFIED IDEOGRAPH + {0x9466, 0x6506}, //3649 #CJK UNIFIED IDEOGRAPH + {0x9467, 0x6507}, //3650 #CJK UNIFIED IDEOGRAPH + {0x9468, 0x6508}, //3651 #CJK UNIFIED IDEOGRAPH + {0x9469, 0x650A}, //3652 #CJK UNIFIED IDEOGRAPH + {0x946A, 0x650B}, //3653 #CJK UNIFIED IDEOGRAPH + {0x946B, 0x650C}, //3654 #CJK UNIFIED IDEOGRAPH + {0x946C, 0x650D}, //3655 #CJK UNIFIED IDEOGRAPH + {0x946D, 0x650E}, //3656 #CJK UNIFIED IDEOGRAPH + {0x946E, 0x650F}, //3657 #CJK UNIFIED IDEOGRAPH + {0x946F, 0x6510}, //3658 #CJK UNIFIED IDEOGRAPH + {0x9470, 0x6511}, //3659 #CJK UNIFIED IDEOGRAPH + {0x9471, 0x6513}, //3660 #CJK UNIFIED IDEOGRAPH + {0x9472, 0x6514}, //3661 #CJK UNIFIED IDEOGRAPH + {0x9473, 0x6515}, //3662 #CJK UNIFIED IDEOGRAPH + {0x9474, 0x6516}, //3663 #CJK UNIFIED IDEOGRAPH + {0x9475, 0x6517}, //3664 #CJK UNIFIED IDEOGRAPH + {0x9476, 0x6519}, //3665 #CJK UNIFIED IDEOGRAPH + {0x9477, 0x651A}, //3666 #CJK UNIFIED IDEOGRAPH + {0x9478, 0x651B}, //3667 #CJK UNIFIED IDEOGRAPH + {0x9479, 0x651C}, //3668 #CJK UNIFIED IDEOGRAPH + {0x947A, 0x651D}, //3669 #CJK UNIFIED IDEOGRAPH + {0x947B, 0x651E}, //3670 #CJK UNIFIED IDEOGRAPH + {0x947C, 0x651F}, //3671 #CJK UNIFIED IDEOGRAPH + {0x947D, 0x6520}, //3672 #CJK UNIFIED IDEOGRAPH + {0x947E, 0x6521}, //3673 #CJK UNIFIED IDEOGRAPH + {0x9480, 0x6522}, //3674 #CJK UNIFIED IDEOGRAPH + {0x9481, 0x6523}, //3675 #CJK UNIFIED IDEOGRAPH + {0x9482, 0x6524}, //3676 #CJK UNIFIED IDEOGRAPH + {0x9483, 0x6526}, //3677 #CJK UNIFIED IDEOGRAPH + {0x9484, 0x6527}, //3678 #CJK UNIFIED IDEOGRAPH + {0x9485, 0x6528}, //3679 #CJK UNIFIED IDEOGRAPH + {0x9486, 0x6529}, //3680 #CJK UNIFIED IDEOGRAPH + {0x9487, 0x652A}, //3681 #CJK UNIFIED IDEOGRAPH + {0x9488, 0x652C}, //3682 #CJK UNIFIED IDEOGRAPH + {0x9489, 0x652D}, //3683 #CJK UNIFIED IDEOGRAPH + {0x948A, 0x6530}, //3684 #CJK UNIFIED IDEOGRAPH + {0x948B, 0x6531}, //3685 #CJK UNIFIED IDEOGRAPH + {0x948C, 0x6532}, //3686 #CJK UNIFIED IDEOGRAPH + {0x948D, 0x6533}, //3687 #CJK UNIFIED IDEOGRAPH + {0x948E, 0x6537}, //3688 #CJK UNIFIED IDEOGRAPH + {0x948F, 0x653A}, //3689 #CJK UNIFIED IDEOGRAPH + {0x9490, 0x653C}, //3690 #CJK UNIFIED IDEOGRAPH + {0x9491, 0x653D}, //3691 #CJK UNIFIED IDEOGRAPH + {0x9492, 0x6540}, //3692 #CJK UNIFIED IDEOGRAPH + {0x9493, 0x6541}, //3693 #CJK UNIFIED IDEOGRAPH + {0x9494, 0x6542}, //3694 #CJK UNIFIED IDEOGRAPH + {0x9495, 0x6543}, //3695 #CJK UNIFIED IDEOGRAPH + {0x9496, 0x6544}, //3696 #CJK UNIFIED IDEOGRAPH + {0x9497, 0x6546}, //3697 #CJK UNIFIED IDEOGRAPH + {0x9498, 0x6547}, //3698 #CJK UNIFIED IDEOGRAPH + {0x9499, 0x654A}, //3699 #CJK UNIFIED IDEOGRAPH + {0x949A, 0x654B}, //3700 #CJK UNIFIED IDEOGRAPH + {0x949B, 0x654D}, //3701 #CJK UNIFIED IDEOGRAPH + {0x949C, 0x654E}, //3702 #CJK UNIFIED IDEOGRAPH + {0x949D, 0x6550}, //3703 #CJK UNIFIED IDEOGRAPH + {0x949E, 0x6552}, //3704 #CJK UNIFIED IDEOGRAPH + {0x949F, 0x6553}, //3705 #CJK UNIFIED IDEOGRAPH + {0x94A0, 0x6554}, //3706 #CJK UNIFIED IDEOGRAPH + {0x94A1, 0x6557}, //3707 #CJK UNIFIED IDEOGRAPH + {0x94A2, 0x6558}, //3708 #CJK UNIFIED IDEOGRAPH + {0x94A3, 0x655A}, //3709 #CJK UNIFIED IDEOGRAPH + {0x94A4, 0x655C}, //3710 #CJK UNIFIED IDEOGRAPH + {0x94A5, 0x655F}, //3711 #CJK UNIFIED IDEOGRAPH + {0x94A6, 0x6560}, //3712 #CJK UNIFIED IDEOGRAPH + {0x94A7, 0x6561}, //3713 #CJK UNIFIED IDEOGRAPH + {0x94A8, 0x6564}, //3714 #CJK UNIFIED IDEOGRAPH + {0x94A9, 0x6565}, //3715 #CJK UNIFIED IDEOGRAPH + {0x94AA, 0x6567}, //3716 #CJK UNIFIED IDEOGRAPH + {0x94AB, 0x6568}, //3717 #CJK UNIFIED IDEOGRAPH + {0x94AC, 0x6569}, //3718 #CJK UNIFIED IDEOGRAPH + {0x94AD, 0x656A}, //3719 #CJK UNIFIED IDEOGRAPH + {0x94AE, 0x656D}, //3720 #CJK UNIFIED IDEOGRAPH + {0x94AF, 0x656E}, //3721 #CJK UNIFIED IDEOGRAPH + {0x94B0, 0x656F}, //3722 #CJK UNIFIED IDEOGRAPH + {0x94B1, 0x6571}, //3723 #CJK UNIFIED IDEOGRAPH + {0x94B2, 0x6573}, //3724 #CJK UNIFIED IDEOGRAPH + {0x94B3, 0x6575}, //3725 #CJK UNIFIED IDEOGRAPH + {0x94B4, 0x6576}, //3726 #CJK UNIFIED IDEOGRAPH + {0x94B5, 0x6578}, //3727 #CJK UNIFIED IDEOGRAPH + {0x94B6, 0x6579}, //3728 #CJK UNIFIED IDEOGRAPH + {0x94B7, 0x657A}, //3729 #CJK UNIFIED IDEOGRAPH + {0x94B8, 0x657B}, //3730 #CJK UNIFIED IDEOGRAPH + {0x94B9, 0x657C}, //3731 #CJK UNIFIED IDEOGRAPH + {0x94BA, 0x657D}, //3732 #CJK UNIFIED IDEOGRAPH + {0x94BB, 0x657E}, //3733 #CJK UNIFIED IDEOGRAPH + {0x94BC, 0x657F}, //3734 #CJK UNIFIED IDEOGRAPH + {0x94BD, 0x6580}, //3735 #CJK UNIFIED IDEOGRAPH + {0x94BE, 0x6581}, //3736 #CJK UNIFIED IDEOGRAPH + {0x94BF, 0x6582}, //3737 #CJK UNIFIED IDEOGRAPH + {0x94C0, 0x6583}, //3738 #CJK UNIFIED IDEOGRAPH + {0x94C1, 0x6584}, //3739 #CJK UNIFIED IDEOGRAPH + {0x94C2, 0x6585}, //3740 #CJK UNIFIED IDEOGRAPH + {0x94C3, 0x6586}, //3741 #CJK UNIFIED IDEOGRAPH + {0x94C4, 0x6588}, //3742 #CJK UNIFIED IDEOGRAPH + {0x94C5, 0x6589}, //3743 #CJK UNIFIED IDEOGRAPH + {0x94C6, 0x658A}, //3744 #CJK UNIFIED IDEOGRAPH + {0x94C7, 0x658D}, //3745 #CJK UNIFIED IDEOGRAPH + {0x94C8, 0x658E}, //3746 #CJK UNIFIED IDEOGRAPH + {0x94C9, 0x658F}, //3747 #CJK UNIFIED IDEOGRAPH + {0x94CA, 0x6592}, //3748 #CJK UNIFIED IDEOGRAPH + {0x94CB, 0x6594}, //3749 #CJK UNIFIED IDEOGRAPH + {0x94CC, 0x6595}, //3750 #CJK UNIFIED IDEOGRAPH + {0x94CD, 0x6596}, //3751 #CJK UNIFIED IDEOGRAPH + {0x94CE, 0x6598}, //3752 #CJK UNIFIED IDEOGRAPH + {0x94CF, 0x659A}, //3753 #CJK UNIFIED IDEOGRAPH + {0x94D0, 0x659D}, //3754 #CJK UNIFIED IDEOGRAPH + {0x94D1, 0x659E}, //3755 #CJK UNIFIED IDEOGRAPH + {0x94D2, 0x65A0}, //3756 #CJK UNIFIED IDEOGRAPH + {0x94D3, 0x65A2}, //3757 #CJK UNIFIED IDEOGRAPH + {0x94D4, 0x65A3}, //3758 #CJK UNIFIED IDEOGRAPH + {0x94D5, 0x65A6}, //3759 #CJK UNIFIED IDEOGRAPH + {0x94D6, 0x65A8}, //3760 #CJK UNIFIED IDEOGRAPH + {0x94D7, 0x65AA}, //3761 #CJK UNIFIED IDEOGRAPH + {0x94D8, 0x65AC}, //3762 #CJK UNIFIED IDEOGRAPH + {0x94D9, 0x65AE}, //3763 #CJK UNIFIED IDEOGRAPH + {0x94DA, 0x65B1}, //3764 #CJK UNIFIED IDEOGRAPH + {0x94DB, 0x65B2}, //3765 #CJK UNIFIED IDEOGRAPH + {0x94DC, 0x65B3}, //3766 #CJK UNIFIED IDEOGRAPH + {0x94DD, 0x65B4}, //3767 #CJK UNIFIED IDEOGRAPH + {0x94DE, 0x65B5}, //3768 #CJK UNIFIED IDEOGRAPH + {0x94DF, 0x65B6}, //3769 #CJK UNIFIED IDEOGRAPH + {0x94E0, 0x65B7}, //3770 #CJK UNIFIED IDEOGRAPH + {0x94E1, 0x65B8}, //3771 #CJK UNIFIED IDEOGRAPH + {0x94E2, 0x65BA}, //3772 #CJK UNIFIED IDEOGRAPH + {0x94E3, 0x65BB}, //3773 #CJK UNIFIED IDEOGRAPH + {0x94E4, 0x65BE}, //3774 #CJK UNIFIED IDEOGRAPH + {0x94E5, 0x65BF}, //3775 #CJK UNIFIED IDEOGRAPH + {0x94E6, 0x65C0}, //3776 #CJK UNIFIED IDEOGRAPH + {0x94E7, 0x65C2}, //3777 #CJK UNIFIED IDEOGRAPH + {0x94E8, 0x65C7}, //3778 #CJK UNIFIED IDEOGRAPH + {0x94E9, 0x65C8}, //3779 #CJK UNIFIED IDEOGRAPH + {0x94EA, 0x65C9}, //3780 #CJK UNIFIED IDEOGRAPH + {0x94EB, 0x65CA}, //3781 #CJK UNIFIED IDEOGRAPH + {0x94EC, 0x65CD}, //3782 #CJK UNIFIED IDEOGRAPH + {0x94ED, 0x65D0}, //3783 #CJK UNIFIED IDEOGRAPH + {0x94EE, 0x65D1}, //3784 #CJK UNIFIED IDEOGRAPH + {0x94EF, 0x65D3}, //3785 #CJK UNIFIED IDEOGRAPH + {0x94F0, 0x65D4}, //3786 #CJK UNIFIED IDEOGRAPH + {0x94F1, 0x65D5}, //3787 #CJK UNIFIED IDEOGRAPH + {0x94F2, 0x65D8}, //3788 #CJK UNIFIED IDEOGRAPH + {0x94F3, 0x65D9}, //3789 #CJK UNIFIED IDEOGRAPH + {0x94F4, 0x65DA}, //3790 #CJK UNIFIED IDEOGRAPH + {0x94F5, 0x65DB}, //3791 #CJK UNIFIED IDEOGRAPH + {0x94F6, 0x65DC}, //3792 #CJK UNIFIED IDEOGRAPH + {0x94F7, 0x65DD}, //3793 #CJK UNIFIED IDEOGRAPH + {0x94F8, 0x65DE}, //3794 #CJK UNIFIED IDEOGRAPH + {0x94F9, 0x65DF}, //3795 #CJK UNIFIED IDEOGRAPH + {0x94FA, 0x65E1}, //3796 #CJK UNIFIED IDEOGRAPH + {0x94FB, 0x65E3}, //3797 #CJK UNIFIED IDEOGRAPH + {0x94FC, 0x65E4}, //3798 #CJK UNIFIED IDEOGRAPH + {0x94FD, 0x65EA}, //3799 #CJK UNIFIED IDEOGRAPH + {0x94FE, 0x65EB}, //3800 #CJK UNIFIED IDEOGRAPH + {0x9540, 0x65F2}, //3801 #CJK UNIFIED IDEOGRAPH + {0x9541, 0x65F3}, //3802 #CJK UNIFIED IDEOGRAPH + {0x9542, 0x65F4}, //3803 #CJK UNIFIED IDEOGRAPH + {0x9543, 0x65F5}, //3804 #CJK UNIFIED IDEOGRAPH + {0x9544, 0x65F8}, //3805 #CJK UNIFIED IDEOGRAPH + {0x9545, 0x65F9}, //3806 #CJK UNIFIED IDEOGRAPH + {0x9546, 0x65FB}, //3807 #CJK UNIFIED IDEOGRAPH + {0x9547, 0x65FC}, //3808 #CJK UNIFIED IDEOGRAPH + {0x9548, 0x65FD}, //3809 #CJK UNIFIED IDEOGRAPH + {0x9549, 0x65FE}, //3810 #CJK UNIFIED IDEOGRAPH + {0x954A, 0x65FF}, //3811 #CJK UNIFIED IDEOGRAPH + {0x954B, 0x6601}, //3812 #CJK UNIFIED IDEOGRAPH + {0x954C, 0x6604}, //3813 #CJK UNIFIED IDEOGRAPH + {0x954D, 0x6605}, //3814 #CJK UNIFIED IDEOGRAPH + {0x954E, 0x6607}, //3815 #CJK UNIFIED IDEOGRAPH + {0x954F, 0x6608}, //3816 #CJK UNIFIED IDEOGRAPH + {0x9550, 0x6609}, //3817 #CJK UNIFIED IDEOGRAPH + {0x9551, 0x660B}, //3818 #CJK UNIFIED IDEOGRAPH + {0x9552, 0x660D}, //3819 #CJK UNIFIED IDEOGRAPH + {0x9553, 0x6610}, //3820 #CJK UNIFIED IDEOGRAPH + {0x9554, 0x6611}, //3821 #CJK UNIFIED IDEOGRAPH + {0x9555, 0x6612}, //3822 #CJK UNIFIED IDEOGRAPH + {0x9556, 0x6616}, //3823 #CJK UNIFIED IDEOGRAPH + {0x9557, 0x6617}, //3824 #CJK UNIFIED IDEOGRAPH + {0x9558, 0x6618}, //3825 #CJK UNIFIED IDEOGRAPH + {0x9559, 0x661A}, //3826 #CJK UNIFIED IDEOGRAPH + {0x955A, 0x661B}, //3827 #CJK UNIFIED IDEOGRAPH + {0x955B, 0x661C}, //3828 #CJK UNIFIED IDEOGRAPH + {0x955C, 0x661E}, //3829 #CJK UNIFIED IDEOGRAPH + {0x955D, 0x6621}, //3830 #CJK UNIFIED IDEOGRAPH + {0x955E, 0x6622}, //3831 #CJK UNIFIED IDEOGRAPH + {0x955F, 0x6623}, //3832 #CJK UNIFIED IDEOGRAPH + {0x9560, 0x6624}, //3833 #CJK UNIFIED IDEOGRAPH + {0x9561, 0x6626}, //3834 #CJK UNIFIED IDEOGRAPH + {0x9562, 0x6629}, //3835 #CJK UNIFIED IDEOGRAPH + {0x9563, 0x662A}, //3836 #CJK UNIFIED IDEOGRAPH + {0x9564, 0x662B}, //3837 #CJK UNIFIED IDEOGRAPH + {0x9565, 0x662C}, //3838 #CJK UNIFIED IDEOGRAPH + {0x9566, 0x662E}, //3839 #CJK UNIFIED IDEOGRAPH + {0x9567, 0x6630}, //3840 #CJK UNIFIED IDEOGRAPH + {0x9568, 0x6632}, //3841 #CJK UNIFIED IDEOGRAPH + {0x9569, 0x6633}, //3842 #CJK UNIFIED IDEOGRAPH + {0x956A, 0x6637}, //3843 #CJK UNIFIED IDEOGRAPH + {0x956B, 0x6638}, //3844 #CJK UNIFIED IDEOGRAPH + {0x956C, 0x6639}, //3845 #CJK UNIFIED IDEOGRAPH + {0x956D, 0x663A}, //3846 #CJK UNIFIED IDEOGRAPH + {0x956E, 0x663B}, //3847 #CJK UNIFIED IDEOGRAPH + {0x956F, 0x663D}, //3848 #CJK UNIFIED IDEOGRAPH + {0x9570, 0x663F}, //3849 #CJK UNIFIED IDEOGRAPH + {0x9571, 0x6640}, //3850 #CJK UNIFIED IDEOGRAPH + {0x9572, 0x6642}, //3851 #CJK UNIFIED IDEOGRAPH + {0x9573, 0x6644}, //3852 #CJK UNIFIED IDEOGRAPH + {0x9574, 0x6645}, //3853 #CJK UNIFIED IDEOGRAPH + {0x9575, 0x6646}, //3854 #CJK UNIFIED IDEOGRAPH + {0x9576, 0x6647}, //3855 #CJK UNIFIED IDEOGRAPH + {0x9577, 0x6648}, //3856 #CJK UNIFIED IDEOGRAPH + {0x9578, 0x6649}, //3857 #CJK UNIFIED IDEOGRAPH + {0x9579, 0x664A}, //3858 #CJK UNIFIED IDEOGRAPH + {0x957A, 0x664D}, //3859 #CJK UNIFIED IDEOGRAPH + {0x957B, 0x664E}, //3860 #CJK UNIFIED IDEOGRAPH + {0x957C, 0x6650}, //3861 #CJK UNIFIED IDEOGRAPH + {0x957D, 0x6651}, //3862 #CJK UNIFIED IDEOGRAPH + {0x957E, 0x6658}, //3863 #CJK UNIFIED IDEOGRAPH + {0x9580, 0x6659}, //3864 #CJK UNIFIED IDEOGRAPH + {0x9581, 0x665B}, //3865 #CJK UNIFIED IDEOGRAPH + {0x9582, 0x665C}, //3866 #CJK UNIFIED IDEOGRAPH + {0x9583, 0x665D}, //3867 #CJK UNIFIED IDEOGRAPH + {0x9584, 0x665E}, //3868 #CJK UNIFIED IDEOGRAPH + {0x9585, 0x6660}, //3869 #CJK UNIFIED IDEOGRAPH + {0x9586, 0x6662}, //3870 #CJK UNIFIED IDEOGRAPH + {0x9587, 0x6663}, //3871 #CJK UNIFIED IDEOGRAPH + {0x9588, 0x6665}, //3872 #CJK UNIFIED IDEOGRAPH + {0x9589, 0x6667}, //3873 #CJK UNIFIED IDEOGRAPH + {0x958A, 0x6669}, //3874 #CJK UNIFIED IDEOGRAPH + {0x958B, 0x666A}, //3875 #CJK UNIFIED IDEOGRAPH + {0x958C, 0x666B}, //3876 #CJK UNIFIED IDEOGRAPH + {0x958D, 0x666C}, //3877 #CJK UNIFIED IDEOGRAPH + {0x958E, 0x666D}, //3878 #CJK UNIFIED IDEOGRAPH + {0x958F, 0x6671}, //3879 #CJK UNIFIED IDEOGRAPH + {0x9590, 0x6672}, //3880 #CJK UNIFIED IDEOGRAPH + {0x9591, 0x6673}, //3881 #CJK UNIFIED IDEOGRAPH + {0x9592, 0x6675}, //3882 #CJK UNIFIED IDEOGRAPH + {0x9593, 0x6678}, //3883 #CJK UNIFIED IDEOGRAPH + {0x9594, 0x6679}, //3884 #CJK UNIFIED IDEOGRAPH + {0x9595, 0x667B}, //3885 #CJK UNIFIED IDEOGRAPH + {0x9596, 0x667C}, //3886 #CJK UNIFIED IDEOGRAPH + {0x9597, 0x667D}, //3887 #CJK UNIFIED IDEOGRAPH + {0x9598, 0x667F}, //3888 #CJK UNIFIED IDEOGRAPH + {0x9599, 0x6680}, //3889 #CJK UNIFIED IDEOGRAPH + {0x959A, 0x6681}, //3890 #CJK UNIFIED IDEOGRAPH + {0x959B, 0x6683}, //3891 #CJK UNIFIED IDEOGRAPH + {0x959C, 0x6685}, //3892 #CJK UNIFIED IDEOGRAPH + {0x959D, 0x6686}, //3893 #CJK UNIFIED IDEOGRAPH + {0x959E, 0x6688}, //3894 #CJK UNIFIED IDEOGRAPH + {0x959F, 0x6689}, //3895 #CJK UNIFIED IDEOGRAPH + {0x95A0, 0x668A}, //3896 #CJK UNIFIED IDEOGRAPH + {0x95A1, 0x668B}, //3897 #CJK UNIFIED IDEOGRAPH + {0x95A2, 0x668D}, //3898 #CJK UNIFIED IDEOGRAPH + {0x95A3, 0x668E}, //3899 #CJK UNIFIED IDEOGRAPH + {0x95A4, 0x668F}, //3900 #CJK UNIFIED IDEOGRAPH + {0x95A5, 0x6690}, //3901 #CJK UNIFIED IDEOGRAPH + {0x95A6, 0x6692}, //3902 #CJK UNIFIED IDEOGRAPH + {0x95A7, 0x6693}, //3903 #CJK UNIFIED IDEOGRAPH + {0x95A8, 0x6694}, //3904 #CJK UNIFIED IDEOGRAPH + {0x95A9, 0x6695}, //3905 #CJK UNIFIED IDEOGRAPH + {0x95AA, 0x6698}, //3906 #CJK UNIFIED IDEOGRAPH + {0x95AB, 0x6699}, //3907 #CJK UNIFIED IDEOGRAPH + {0x95AC, 0x669A}, //3908 #CJK UNIFIED IDEOGRAPH + {0x95AD, 0x669B}, //3909 #CJK UNIFIED IDEOGRAPH + {0x95AE, 0x669C}, //3910 #CJK UNIFIED IDEOGRAPH + {0x95AF, 0x669E}, //3911 #CJK UNIFIED IDEOGRAPH + {0x95B0, 0x669F}, //3912 #CJK UNIFIED IDEOGRAPH + {0x95B1, 0x66A0}, //3913 #CJK UNIFIED IDEOGRAPH + {0x95B2, 0x66A1}, //3914 #CJK UNIFIED IDEOGRAPH + {0x95B3, 0x66A2}, //3915 #CJK UNIFIED IDEOGRAPH + {0x95B4, 0x66A3}, //3916 #CJK UNIFIED IDEOGRAPH + {0x95B5, 0x66A4}, //3917 #CJK UNIFIED IDEOGRAPH + {0x95B6, 0x66A5}, //3918 #CJK UNIFIED IDEOGRAPH + {0x95B7, 0x66A6}, //3919 #CJK UNIFIED IDEOGRAPH + {0x95B8, 0x66A9}, //3920 #CJK UNIFIED IDEOGRAPH + {0x95B9, 0x66AA}, //3921 #CJK UNIFIED IDEOGRAPH + {0x95BA, 0x66AB}, //3922 #CJK UNIFIED IDEOGRAPH + {0x95BB, 0x66AC}, //3923 #CJK UNIFIED IDEOGRAPH + {0x95BC, 0x66AD}, //3924 #CJK UNIFIED IDEOGRAPH + {0x95BD, 0x66AF}, //3925 #CJK UNIFIED IDEOGRAPH + {0x95BE, 0x66B0}, //3926 #CJK UNIFIED IDEOGRAPH + {0x95BF, 0x66B1}, //3927 #CJK UNIFIED IDEOGRAPH + {0x95C0, 0x66B2}, //3928 #CJK UNIFIED IDEOGRAPH + {0x95C1, 0x66B3}, //3929 #CJK UNIFIED IDEOGRAPH + {0x95C2, 0x66B5}, //3930 #CJK UNIFIED IDEOGRAPH + {0x95C3, 0x66B6}, //3931 #CJK UNIFIED IDEOGRAPH + {0x95C4, 0x66B7}, //3932 #CJK UNIFIED IDEOGRAPH + {0x95C5, 0x66B8}, //3933 #CJK UNIFIED IDEOGRAPH + {0x95C6, 0x66BA}, //3934 #CJK UNIFIED IDEOGRAPH + {0x95C7, 0x66BB}, //3935 #CJK UNIFIED IDEOGRAPH + {0x95C8, 0x66BC}, //3936 #CJK UNIFIED IDEOGRAPH + {0x95C9, 0x66BD}, //3937 #CJK UNIFIED IDEOGRAPH + {0x95CA, 0x66BF}, //3938 #CJK UNIFIED IDEOGRAPH + {0x95CB, 0x66C0}, //3939 #CJK UNIFIED IDEOGRAPH + {0x95CC, 0x66C1}, //3940 #CJK UNIFIED IDEOGRAPH + {0x95CD, 0x66C2}, //3941 #CJK UNIFIED IDEOGRAPH + {0x95CE, 0x66C3}, //3942 #CJK UNIFIED IDEOGRAPH + {0x95CF, 0x66C4}, //3943 #CJK UNIFIED IDEOGRAPH + {0x95D0, 0x66C5}, //3944 #CJK UNIFIED IDEOGRAPH + {0x95D1, 0x66C6}, //3945 #CJK UNIFIED IDEOGRAPH + {0x95D2, 0x66C7}, //3946 #CJK UNIFIED IDEOGRAPH + {0x95D3, 0x66C8}, //3947 #CJK UNIFIED IDEOGRAPH + {0x95D4, 0x66C9}, //3948 #CJK UNIFIED IDEOGRAPH + {0x95D5, 0x66CA}, //3949 #CJK UNIFIED IDEOGRAPH + {0x95D6, 0x66CB}, //3950 #CJK UNIFIED IDEOGRAPH + {0x95D7, 0x66CC}, //3951 #CJK UNIFIED IDEOGRAPH + {0x95D8, 0x66CD}, //3952 #CJK UNIFIED IDEOGRAPH + {0x95D9, 0x66CE}, //3953 #CJK UNIFIED IDEOGRAPH + {0x95DA, 0x66CF}, //3954 #CJK UNIFIED IDEOGRAPH + {0x95DB, 0x66D0}, //3955 #CJK UNIFIED IDEOGRAPH + {0x95DC, 0x66D1}, //3956 #CJK UNIFIED IDEOGRAPH + {0x95DD, 0x66D2}, //3957 #CJK UNIFIED IDEOGRAPH + {0x95DE, 0x66D3}, //3958 #CJK UNIFIED IDEOGRAPH + {0x95DF, 0x66D4}, //3959 #CJK UNIFIED IDEOGRAPH + {0x95E0, 0x66D5}, //3960 #CJK UNIFIED IDEOGRAPH + {0x95E1, 0x66D6}, //3961 #CJK UNIFIED IDEOGRAPH + {0x95E2, 0x66D7}, //3962 #CJK UNIFIED IDEOGRAPH + {0x95E3, 0x66D8}, //3963 #CJK UNIFIED IDEOGRAPH + {0x95E4, 0x66DA}, //3964 #CJK UNIFIED IDEOGRAPH + {0x95E5, 0x66DE}, //3965 #CJK UNIFIED IDEOGRAPH + {0x95E6, 0x66DF}, //3966 #CJK UNIFIED IDEOGRAPH + {0x95E7, 0x66E0}, //3967 #CJK UNIFIED IDEOGRAPH + {0x95E8, 0x66E1}, //3968 #CJK UNIFIED IDEOGRAPH + {0x95E9, 0x66E2}, //3969 #CJK UNIFIED IDEOGRAPH + {0x95EA, 0x66E3}, //3970 #CJK UNIFIED IDEOGRAPH + {0x95EB, 0x66E4}, //3971 #CJK UNIFIED IDEOGRAPH + {0x95EC, 0x66E5}, //3972 #CJK UNIFIED IDEOGRAPH + {0x95ED, 0x66E7}, //3973 #CJK UNIFIED IDEOGRAPH + {0x95EE, 0x66E8}, //3974 #CJK UNIFIED IDEOGRAPH + {0x95EF, 0x66EA}, //3975 #CJK UNIFIED IDEOGRAPH + {0x95F0, 0x66EB}, //3976 #CJK UNIFIED IDEOGRAPH + {0x95F1, 0x66EC}, //3977 #CJK UNIFIED IDEOGRAPH + {0x95F2, 0x66ED}, //3978 #CJK UNIFIED IDEOGRAPH + {0x95F3, 0x66EE}, //3979 #CJK UNIFIED IDEOGRAPH + {0x95F4, 0x66EF}, //3980 #CJK UNIFIED IDEOGRAPH + {0x95F5, 0x66F1}, //3981 #CJK UNIFIED IDEOGRAPH + {0x95F6, 0x66F5}, //3982 #CJK UNIFIED IDEOGRAPH + {0x95F7, 0x66F6}, //3983 #CJK UNIFIED IDEOGRAPH + {0x95F8, 0x66F8}, //3984 #CJK UNIFIED IDEOGRAPH + {0x95F9, 0x66FA}, //3985 #CJK UNIFIED IDEOGRAPH + {0x95FA, 0x66FB}, //3986 #CJK UNIFIED IDEOGRAPH + {0x95FB, 0x66FD}, //3987 #CJK UNIFIED IDEOGRAPH + {0x95FC, 0x6701}, //3988 #CJK UNIFIED IDEOGRAPH + {0x95FD, 0x6702}, //3989 #CJK UNIFIED IDEOGRAPH + {0x95FE, 0x6703}, //3990 #CJK UNIFIED IDEOGRAPH + {0x9640, 0x6704}, //3991 #CJK UNIFIED IDEOGRAPH + {0x9641, 0x6705}, //3992 #CJK UNIFIED IDEOGRAPH + {0x9642, 0x6706}, //3993 #CJK UNIFIED IDEOGRAPH + {0x9643, 0x6707}, //3994 #CJK UNIFIED IDEOGRAPH + {0x9644, 0x670C}, //3995 #CJK UNIFIED IDEOGRAPH + {0x9645, 0x670E}, //3996 #CJK UNIFIED IDEOGRAPH + {0x9646, 0x670F}, //3997 #CJK UNIFIED IDEOGRAPH + {0x9647, 0x6711}, //3998 #CJK UNIFIED IDEOGRAPH + {0x9648, 0x6712}, //3999 #CJK UNIFIED IDEOGRAPH + {0x9649, 0x6713}, //4000 #CJK UNIFIED IDEOGRAPH + {0x964A, 0x6716}, //4001 #CJK UNIFIED IDEOGRAPH + {0x964B, 0x6718}, //4002 #CJK UNIFIED IDEOGRAPH + {0x964C, 0x6719}, //4003 #CJK UNIFIED IDEOGRAPH + {0x964D, 0x671A}, //4004 #CJK UNIFIED IDEOGRAPH + {0x964E, 0x671C}, //4005 #CJK UNIFIED IDEOGRAPH + {0x964F, 0x671E}, //4006 #CJK UNIFIED IDEOGRAPH + {0x9650, 0x6720}, //4007 #CJK UNIFIED IDEOGRAPH + {0x9651, 0x6721}, //4008 #CJK UNIFIED IDEOGRAPH + {0x9652, 0x6722}, //4009 #CJK UNIFIED IDEOGRAPH + {0x9653, 0x6723}, //4010 #CJK UNIFIED IDEOGRAPH + {0x9654, 0x6724}, //4011 #CJK UNIFIED IDEOGRAPH + {0x9655, 0x6725}, //4012 #CJK UNIFIED IDEOGRAPH + {0x9656, 0x6727}, //4013 #CJK UNIFIED IDEOGRAPH + {0x9657, 0x6729}, //4014 #CJK UNIFIED IDEOGRAPH + {0x9658, 0x672E}, //4015 #CJK UNIFIED IDEOGRAPH + {0x9659, 0x6730}, //4016 #CJK UNIFIED IDEOGRAPH + {0x965A, 0x6732}, //4017 #CJK UNIFIED IDEOGRAPH + {0x965B, 0x6733}, //4018 #CJK UNIFIED IDEOGRAPH + {0x965C, 0x6736}, //4019 #CJK UNIFIED IDEOGRAPH + {0x965D, 0x6737}, //4020 #CJK UNIFIED IDEOGRAPH + {0x965E, 0x6738}, //4021 #CJK UNIFIED IDEOGRAPH + {0x965F, 0x6739}, //4022 #CJK UNIFIED IDEOGRAPH + {0x9660, 0x673B}, //4023 #CJK UNIFIED IDEOGRAPH + {0x9661, 0x673C}, //4024 #CJK UNIFIED IDEOGRAPH + {0x9662, 0x673E}, //4025 #CJK UNIFIED IDEOGRAPH + {0x9663, 0x673F}, //4026 #CJK UNIFIED IDEOGRAPH + {0x9664, 0x6741}, //4027 #CJK UNIFIED IDEOGRAPH + {0x9665, 0x6744}, //4028 #CJK UNIFIED IDEOGRAPH + {0x9666, 0x6745}, //4029 #CJK UNIFIED IDEOGRAPH + {0x9667, 0x6747}, //4030 #CJK UNIFIED IDEOGRAPH + {0x9668, 0x674A}, //4031 #CJK UNIFIED IDEOGRAPH + {0x9669, 0x674B}, //4032 #CJK UNIFIED IDEOGRAPH + {0x966A, 0x674D}, //4033 #CJK UNIFIED IDEOGRAPH + {0x966B, 0x6752}, //4034 #CJK UNIFIED IDEOGRAPH + {0x966C, 0x6754}, //4035 #CJK UNIFIED IDEOGRAPH + {0x966D, 0x6755}, //4036 #CJK UNIFIED IDEOGRAPH + {0x966E, 0x6757}, //4037 #CJK UNIFIED IDEOGRAPH + {0x966F, 0x6758}, //4038 #CJK UNIFIED IDEOGRAPH + {0x9670, 0x6759}, //4039 #CJK UNIFIED IDEOGRAPH + {0x9671, 0x675A}, //4040 #CJK UNIFIED IDEOGRAPH + {0x9672, 0x675B}, //4041 #CJK UNIFIED IDEOGRAPH + {0x9673, 0x675D}, //4042 #CJK UNIFIED IDEOGRAPH + {0x9674, 0x6762}, //4043 #CJK UNIFIED IDEOGRAPH + {0x9675, 0x6763}, //4044 #CJK UNIFIED IDEOGRAPH + {0x9676, 0x6764}, //4045 #CJK UNIFIED IDEOGRAPH + {0x9677, 0x6766}, //4046 #CJK UNIFIED IDEOGRAPH + {0x9678, 0x6767}, //4047 #CJK UNIFIED IDEOGRAPH + {0x9679, 0x676B}, //4048 #CJK UNIFIED IDEOGRAPH + {0x967A, 0x676C}, //4049 #CJK UNIFIED IDEOGRAPH + {0x967B, 0x676E}, //4050 #CJK UNIFIED IDEOGRAPH + {0x967C, 0x6771}, //4051 #CJK UNIFIED IDEOGRAPH + {0x967D, 0x6774}, //4052 #CJK UNIFIED IDEOGRAPH + {0x967E, 0x6776}, //4053 #CJK UNIFIED IDEOGRAPH + {0x9680, 0x6778}, //4054 #CJK UNIFIED IDEOGRAPH + {0x9681, 0x6779}, //4055 #CJK UNIFIED IDEOGRAPH + {0x9682, 0x677A}, //4056 #CJK UNIFIED IDEOGRAPH + {0x9683, 0x677B}, //4057 #CJK UNIFIED IDEOGRAPH + {0x9684, 0x677D}, //4058 #CJK UNIFIED IDEOGRAPH + {0x9685, 0x6780}, //4059 #CJK UNIFIED IDEOGRAPH + {0x9686, 0x6782}, //4060 #CJK UNIFIED IDEOGRAPH + {0x9687, 0x6783}, //4061 #CJK UNIFIED IDEOGRAPH + {0x9688, 0x6785}, //4062 #CJK UNIFIED IDEOGRAPH + {0x9689, 0x6786}, //4063 #CJK UNIFIED IDEOGRAPH + {0x968A, 0x6788}, //4064 #CJK UNIFIED IDEOGRAPH + {0x968B, 0x678A}, //4065 #CJK UNIFIED IDEOGRAPH + {0x968C, 0x678C}, //4066 #CJK UNIFIED IDEOGRAPH + {0x968D, 0x678D}, //4067 #CJK UNIFIED IDEOGRAPH + {0x968E, 0x678E}, //4068 #CJK UNIFIED IDEOGRAPH + {0x968F, 0x678F}, //4069 #CJK UNIFIED IDEOGRAPH + {0x9690, 0x6791}, //4070 #CJK UNIFIED IDEOGRAPH + {0x9691, 0x6792}, //4071 #CJK UNIFIED IDEOGRAPH + {0x9692, 0x6793}, //4072 #CJK UNIFIED IDEOGRAPH + {0x9693, 0x6794}, //4073 #CJK UNIFIED IDEOGRAPH + {0x9694, 0x6796}, //4074 #CJK UNIFIED IDEOGRAPH + {0x9695, 0x6799}, //4075 #CJK UNIFIED IDEOGRAPH + {0x9696, 0x679B}, //4076 #CJK UNIFIED IDEOGRAPH + {0x9697, 0x679F}, //4077 #CJK UNIFIED IDEOGRAPH + {0x9698, 0x67A0}, //4078 #CJK UNIFIED IDEOGRAPH + {0x9699, 0x67A1}, //4079 #CJK UNIFIED IDEOGRAPH + {0x969A, 0x67A4}, //4080 #CJK UNIFIED IDEOGRAPH + {0x969B, 0x67A6}, //4081 #CJK UNIFIED IDEOGRAPH + {0x969C, 0x67A9}, //4082 #CJK UNIFIED IDEOGRAPH + {0x969D, 0x67AC}, //4083 #CJK UNIFIED IDEOGRAPH + {0x969E, 0x67AE}, //4084 #CJK UNIFIED IDEOGRAPH + {0x969F, 0x67B1}, //4085 #CJK UNIFIED IDEOGRAPH + {0x96A0, 0x67B2}, //4086 #CJK UNIFIED IDEOGRAPH + {0x96A1, 0x67B4}, //4087 #CJK UNIFIED IDEOGRAPH + {0x96A2, 0x67B9}, //4088 #CJK UNIFIED IDEOGRAPH + {0x96A3, 0x67BA}, //4089 #CJK UNIFIED IDEOGRAPH + {0x96A4, 0x67BB}, //4090 #CJK UNIFIED IDEOGRAPH + {0x96A5, 0x67BC}, //4091 #CJK UNIFIED IDEOGRAPH + {0x96A6, 0x67BD}, //4092 #CJK UNIFIED IDEOGRAPH + {0x96A7, 0x67BE}, //4093 #CJK UNIFIED IDEOGRAPH + {0x96A8, 0x67BF}, //4094 #CJK UNIFIED IDEOGRAPH + {0x96A9, 0x67C0}, //4095 #CJK UNIFIED IDEOGRAPH + {0x96AA, 0x67C2}, //4096 #CJK UNIFIED IDEOGRAPH + {0x96AB, 0x67C5}, //4097 #CJK UNIFIED IDEOGRAPH + {0x96AC, 0x67C6}, //4098 #CJK UNIFIED IDEOGRAPH + {0x96AD, 0x67C7}, //4099 #CJK UNIFIED IDEOGRAPH + {0x96AE, 0x67C8}, //4100 #CJK UNIFIED IDEOGRAPH + {0x96AF, 0x67C9}, //4101 #CJK UNIFIED IDEOGRAPH + {0x96B0, 0x67CA}, //4102 #CJK UNIFIED IDEOGRAPH + {0x96B1, 0x67CB}, //4103 #CJK UNIFIED IDEOGRAPH + {0x96B2, 0x67CC}, //4104 #CJK UNIFIED IDEOGRAPH + {0x96B3, 0x67CD}, //4105 #CJK UNIFIED IDEOGRAPH + {0x96B4, 0x67CE}, //4106 #CJK UNIFIED IDEOGRAPH + {0x96B5, 0x67D5}, //4107 #CJK UNIFIED IDEOGRAPH + {0x96B6, 0x67D6}, //4108 #CJK UNIFIED IDEOGRAPH + {0x96B7, 0x67D7}, //4109 #CJK UNIFIED IDEOGRAPH + {0x96B8, 0x67DB}, //4110 #CJK UNIFIED IDEOGRAPH + {0x96B9, 0x67DF}, //4111 #CJK UNIFIED IDEOGRAPH + {0x96BA, 0x67E1}, //4112 #CJK UNIFIED IDEOGRAPH + {0x96BB, 0x67E3}, //4113 #CJK UNIFIED IDEOGRAPH + {0x96BC, 0x67E4}, //4114 #CJK UNIFIED IDEOGRAPH + {0x96BD, 0x67E6}, //4115 #CJK UNIFIED IDEOGRAPH + {0x96BE, 0x67E7}, //4116 #CJK UNIFIED IDEOGRAPH + {0x96BF, 0x67E8}, //4117 #CJK UNIFIED IDEOGRAPH + {0x96C0, 0x67EA}, //4118 #CJK UNIFIED IDEOGRAPH + {0x96C1, 0x67EB}, //4119 #CJK UNIFIED IDEOGRAPH + {0x96C2, 0x67ED}, //4120 #CJK UNIFIED IDEOGRAPH + {0x96C3, 0x67EE}, //4121 #CJK UNIFIED IDEOGRAPH + {0x96C4, 0x67F2}, //4122 #CJK UNIFIED IDEOGRAPH + {0x96C5, 0x67F5}, //4123 #CJK UNIFIED IDEOGRAPH + {0x96C6, 0x67F6}, //4124 #CJK UNIFIED IDEOGRAPH + {0x96C7, 0x67F7}, //4125 #CJK UNIFIED IDEOGRAPH + {0x96C8, 0x67F8}, //4126 #CJK UNIFIED IDEOGRAPH + {0x96C9, 0x67F9}, //4127 #CJK UNIFIED IDEOGRAPH + {0x96CA, 0x67FA}, //4128 #CJK UNIFIED IDEOGRAPH + {0x96CB, 0x67FB}, //4129 #CJK UNIFIED IDEOGRAPH + {0x96CC, 0x67FC}, //4130 #CJK UNIFIED IDEOGRAPH + {0x96CD, 0x67FE}, //4131 #CJK UNIFIED IDEOGRAPH + {0x96CE, 0x6801}, //4132 #CJK UNIFIED IDEOGRAPH + {0x96CF, 0x6802}, //4133 #CJK UNIFIED IDEOGRAPH + {0x96D0, 0x6803}, //4134 #CJK UNIFIED IDEOGRAPH + {0x96D1, 0x6804}, //4135 #CJK UNIFIED IDEOGRAPH + {0x96D2, 0x6806}, //4136 #CJK UNIFIED IDEOGRAPH + {0x96D3, 0x680D}, //4137 #CJK UNIFIED IDEOGRAPH + {0x96D4, 0x6810}, //4138 #CJK UNIFIED IDEOGRAPH + {0x96D5, 0x6812}, //4139 #CJK UNIFIED IDEOGRAPH + {0x96D6, 0x6814}, //4140 #CJK UNIFIED IDEOGRAPH + {0x96D7, 0x6815}, //4141 #CJK UNIFIED IDEOGRAPH + {0x96D8, 0x6818}, //4142 #CJK UNIFIED IDEOGRAPH + {0x96D9, 0x6819}, //4143 #CJK UNIFIED IDEOGRAPH + {0x96DA, 0x681A}, //4144 #CJK UNIFIED IDEOGRAPH + {0x96DB, 0x681B}, //4145 #CJK UNIFIED IDEOGRAPH + {0x96DC, 0x681C}, //4146 #CJK UNIFIED IDEOGRAPH + {0x96DD, 0x681E}, //4147 #CJK UNIFIED IDEOGRAPH + {0x96DE, 0x681F}, //4148 #CJK UNIFIED IDEOGRAPH + {0x96DF, 0x6820}, //4149 #CJK UNIFIED IDEOGRAPH + {0x96E0, 0x6822}, //4150 #CJK UNIFIED IDEOGRAPH + {0x96E1, 0x6823}, //4151 #CJK UNIFIED IDEOGRAPH + {0x96E2, 0x6824}, //4152 #CJK UNIFIED IDEOGRAPH + {0x96E3, 0x6825}, //4153 #CJK UNIFIED IDEOGRAPH + {0x96E4, 0x6826}, //4154 #CJK UNIFIED IDEOGRAPH + {0x96E5, 0x6827}, //4155 #CJK UNIFIED IDEOGRAPH + {0x96E6, 0x6828}, //4156 #CJK UNIFIED IDEOGRAPH + {0x96E7, 0x682B}, //4157 #CJK UNIFIED IDEOGRAPH + {0x96E8, 0x682C}, //4158 #CJK UNIFIED IDEOGRAPH + {0x96E9, 0x682D}, //4159 #CJK UNIFIED IDEOGRAPH + {0x96EA, 0x682E}, //4160 #CJK UNIFIED IDEOGRAPH + {0x96EB, 0x682F}, //4161 #CJK UNIFIED IDEOGRAPH + {0x96EC, 0x6830}, //4162 #CJK UNIFIED IDEOGRAPH + {0x96ED, 0x6831}, //4163 #CJK UNIFIED IDEOGRAPH + {0x96EE, 0x6834}, //4164 #CJK UNIFIED IDEOGRAPH + {0x96EF, 0x6835}, //4165 #CJK UNIFIED IDEOGRAPH + {0x96F0, 0x6836}, //4166 #CJK UNIFIED IDEOGRAPH + {0x96F1, 0x683A}, //4167 #CJK UNIFIED IDEOGRAPH + {0x96F2, 0x683B}, //4168 #CJK UNIFIED IDEOGRAPH + {0x96F3, 0x683F}, //4169 #CJK UNIFIED IDEOGRAPH + {0x96F4, 0x6847}, //4170 #CJK UNIFIED IDEOGRAPH + {0x96F5, 0x684B}, //4171 #CJK UNIFIED IDEOGRAPH + {0x96F6, 0x684D}, //4172 #CJK UNIFIED IDEOGRAPH + {0x96F7, 0x684F}, //4173 #CJK UNIFIED IDEOGRAPH + {0x96F8, 0x6852}, //4174 #CJK UNIFIED IDEOGRAPH + {0x96F9, 0x6856}, //4175 #CJK UNIFIED IDEOGRAPH + {0x96FA, 0x6857}, //4176 #CJK UNIFIED IDEOGRAPH + {0x96FB, 0x6858}, //4177 #CJK UNIFIED IDEOGRAPH + {0x96FC, 0x6859}, //4178 #CJK UNIFIED IDEOGRAPH + {0x96FD, 0x685A}, //4179 #CJK UNIFIED IDEOGRAPH + {0x96FE, 0x685B}, //4180 #CJK UNIFIED IDEOGRAPH + {0x9740, 0x685C}, //4181 #CJK UNIFIED IDEOGRAPH + {0x9741, 0x685D}, //4182 #CJK UNIFIED IDEOGRAPH + {0x9742, 0x685E}, //4183 #CJK UNIFIED IDEOGRAPH + {0x9743, 0x685F}, //4184 #CJK UNIFIED IDEOGRAPH + {0x9744, 0x686A}, //4185 #CJK UNIFIED IDEOGRAPH + {0x9745, 0x686C}, //4186 #CJK UNIFIED IDEOGRAPH + {0x9746, 0x686D}, //4187 #CJK UNIFIED IDEOGRAPH + {0x9747, 0x686E}, //4188 #CJK UNIFIED IDEOGRAPH + {0x9748, 0x686F}, //4189 #CJK UNIFIED IDEOGRAPH + {0x9749, 0x6870}, //4190 #CJK UNIFIED IDEOGRAPH + {0x974A, 0x6871}, //4191 #CJK UNIFIED IDEOGRAPH + {0x974B, 0x6872}, //4192 #CJK UNIFIED IDEOGRAPH + {0x974C, 0x6873}, //4193 #CJK UNIFIED IDEOGRAPH + {0x974D, 0x6875}, //4194 #CJK UNIFIED IDEOGRAPH + {0x974E, 0x6878}, //4195 #CJK UNIFIED IDEOGRAPH + {0x974F, 0x6879}, //4196 #CJK UNIFIED IDEOGRAPH + {0x9750, 0x687A}, //4197 #CJK UNIFIED IDEOGRAPH + {0x9751, 0x687B}, //4198 #CJK UNIFIED IDEOGRAPH + {0x9752, 0x687C}, //4199 #CJK UNIFIED IDEOGRAPH + {0x9753, 0x687D}, //4200 #CJK UNIFIED IDEOGRAPH + {0x9754, 0x687E}, //4201 #CJK UNIFIED IDEOGRAPH + {0x9755, 0x687F}, //4202 #CJK UNIFIED IDEOGRAPH + {0x9756, 0x6880}, //4203 #CJK UNIFIED IDEOGRAPH + {0x9757, 0x6882}, //4204 #CJK UNIFIED IDEOGRAPH + {0x9758, 0x6884}, //4205 #CJK UNIFIED IDEOGRAPH + {0x9759, 0x6887}, //4206 #CJK UNIFIED IDEOGRAPH + {0x975A, 0x6888}, //4207 #CJK UNIFIED IDEOGRAPH + {0x975B, 0x6889}, //4208 #CJK UNIFIED IDEOGRAPH + {0x975C, 0x688A}, //4209 #CJK UNIFIED IDEOGRAPH + {0x975D, 0x688B}, //4210 #CJK UNIFIED IDEOGRAPH + {0x975E, 0x688C}, //4211 #CJK UNIFIED IDEOGRAPH + {0x975F, 0x688D}, //4212 #CJK UNIFIED IDEOGRAPH + {0x9760, 0x688E}, //4213 #CJK UNIFIED IDEOGRAPH + {0x9761, 0x6890}, //4214 #CJK UNIFIED IDEOGRAPH + {0x9762, 0x6891}, //4215 #CJK UNIFIED IDEOGRAPH + {0x9763, 0x6892}, //4216 #CJK UNIFIED IDEOGRAPH + {0x9764, 0x6894}, //4217 #CJK UNIFIED IDEOGRAPH + {0x9765, 0x6895}, //4218 #CJK UNIFIED IDEOGRAPH + {0x9766, 0x6896}, //4219 #CJK UNIFIED IDEOGRAPH + {0x9767, 0x6898}, //4220 #CJK UNIFIED IDEOGRAPH + {0x9768, 0x6899}, //4221 #CJK UNIFIED IDEOGRAPH + {0x9769, 0x689A}, //4222 #CJK UNIFIED IDEOGRAPH + {0x976A, 0x689B}, //4223 #CJK UNIFIED IDEOGRAPH + {0x976B, 0x689C}, //4224 #CJK UNIFIED IDEOGRAPH + {0x976C, 0x689D}, //4225 #CJK UNIFIED IDEOGRAPH + {0x976D, 0x689E}, //4226 #CJK UNIFIED IDEOGRAPH + {0x976E, 0x689F}, //4227 #CJK UNIFIED IDEOGRAPH + {0x976F, 0x68A0}, //4228 #CJK UNIFIED IDEOGRAPH + {0x9770, 0x68A1}, //4229 #CJK UNIFIED IDEOGRAPH + {0x9771, 0x68A3}, //4230 #CJK UNIFIED IDEOGRAPH + {0x9772, 0x68A4}, //4231 #CJK UNIFIED IDEOGRAPH + {0x9773, 0x68A5}, //4232 #CJK UNIFIED IDEOGRAPH + {0x9774, 0x68A9}, //4233 #CJK UNIFIED IDEOGRAPH + {0x9775, 0x68AA}, //4234 #CJK UNIFIED IDEOGRAPH + {0x9776, 0x68AB}, //4235 #CJK UNIFIED IDEOGRAPH + {0x9777, 0x68AC}, //4236 #CJK UNIFIED IDEOGRAPH + {0x9778, 0x68AE}, //4237 #CJK UNIFIED IDEOGRAPH + {0x9779, 0x68B1}, //4238 #CJK UNIFIED IDEOGRAPH + {0x977A, 0x68B2}, //4239 #CJK UNIFIED IDEOGRAPH + {0x977B, 0x68B4}, //4240 #CJK UNIFIED IDEOGRAPH + {0x977C, 0x68B6}, //4241 #CJK UNIFIED IDEOGRAPH + {0x977D, 0x68B7}, //4242 #CJK UNIFIED IDEOGRAPH + {0x977E, 0x68B8}, //4243 #CJK UNIFIED IDEOGRAPH + {0x9780, 0x68B9}, //4244 #CJK UNIFIED IDEOGRAPH + {0x9781, 0x68BA}, //4245 #CJK UNIFIED IDEOGRAPH + {0x9782, 0x68BB}, //4246 #CJK UNIFIED IDEOGRAPH + {0x9783, 0x68BC}, //4247 #CJK UNIFIED IDEOGRAPH + {0x9784, 0x68BD}, //4248 #CJK UNIFIED IDEOGRAPH + {0x9785, 0x68BE}, //4249 #CJK UNIFIED IDEOGRAPH + {0x9786, 0x68BF}, //4250 #CJK UNIFIED IDEOGRAPH + {0x9787, 0x68C1}, //4251 #CJK UNIFIED IDEOGRAPH + {0x9788, 0x68C3}, //4252 #CJK UNIFIED IDEOGRAPH + {0x9789, 0x68C4}, //4253 #CJK UNIFIED IDEOGRAPH + {0x978A, 0x68C5}, //4254 #CJK UNIFIED IDEOGRAPH + {0x978B, 0x68C6}, //4255 #CJK UNIFIED IDEOGRAPH + {0x978C, 0x68C7}, //4256 #CJK UNIFIED IDEOGRAPH + {0x978D, 0x68C8}, //4257 #CJK UNIFIED IDEOGRAPH + {0x978E, 0x68CA}, //4258 #CJK UNIFIED IDEOGRAPH + {0x978F, 0x68CC}, //4259 #CJK UNIFIED IDEOGRAPH + {0x9790, 0x68CE}, //4260 #CJK UNIFIED IDEOGRAPH + {0x9791, 0x68CF}, //4261 #CJK UNIFIED IDEOGRAPH + {0x9792, 0x68D0}, //4262 #CJK UNIFIED IDEOGRAPH + {0x9793, 0x68D1}, //4263 #CJK UNIFIED IDEOGRAPH + {0x9794, 0x68D3}, //4264 #CJK UNIFIED IDEOGRAPH + {0x9795, 0x68D4}, //4265 #CJK UNIFIED IDEOGRAPH + {0x9796, 0x68D6}, //4266 #CJK UNIFIED IDEOGRAPH + {0x9797, 0x68D7}, //4267 #CJK UNIFIED IDEOGRAPH + {0x9798, 0x68D9}, //4268 #CJK UNIFIED IDEOGRAPH + {0x9799, 0x68DB}, //4269 #CJK UNIFIED IDEOGRAPH + {0x979A, 0x68DC}, //4270 #CJK UNIFIED IDEOGRAPH + {0x979B, 0x68DD}, //4271 #CJK UNIFIED IDEOGRAPH + {0x979C, 0x68DE}, //4272 #CJK UNIFIED IDEOGRAPH + {0x979D, 0x68DF}, //4273 #CJK UNIFIED IDEOGRAPH + {0x979E, 0x68E1}, //4274 #CJK UNIFIED IDEOGRAPH + {0x979F, 0x68E2}, //4275 #CJK UNIFIED IDEOGRAPH + {0x97A0, 0x68E4}, //4276 #CJK UNIFIED IDEOGRAPH + {0x97A1, 0x68E5}, //4277 #CJK UNIFIED IDEOGRAPH + {0x97A2, 0x68E6}, //4278 #CJK UNIFIED IDEOGRAPH + {0x97A3, 0x68E7}, //4279 #CJK UNIFIED IDEOGRAPH + {0x97A4, 0x68E8}, //4280 #CJK UNIFIED IDEOGRAPH + {0x97A5, 0x68E9}, //4281 #CJK UNIFIED IDEOGRAPH + {0x97A6, 0x68EA}, //4282 #CJK UNIFIED IDEOGRAPH + {0x97A7, 0x68EB}, //4283 #CJK UNIFIED IDEOGRAPH + {0x97A8, 0x68EC}, //4284 #CJK UNIFIED IDEOGRAPH + {0x97A9, 0x68ED}, //4285 #CJK UNIFIED IDEOGRAPH + {0x97AA, 0x68EF}, //4286 #CJK UNIFIED IDEOGRAPH + {0x97AB, 0x68F2}, //4287 #CJK UNIFIED IDEOGRAPH + {0x97AC, 0x68F3}, //4288 #CJK UNIFIED IDEOGRAPH + {0x97AD, 0x68F4}, //4289 #CJK UNIFIED IDEOGRAPH + {0x97AE, 0x68F6}, //4290 #CJK UNIFIED IDEOGRAPH + {0x97AF, 0x68F7}, //4291 #CJK UNIFIED IDEOGRAPH + {0x97B0, 0x68F8}, //4292 #CJK UNIFIED IDEOGRAPH + {0x97B1, 0x68FB}, //4293 #CJK UNIFIED IDEOGRAPH + {0x97B2, 0x68FD}, //4294 #CJK UNIFIED IDEOGRAPH + {0x97B3, 0x68FE}, //4295 #CJK UNIFIED IDEOGRAPH + {0x97B4, 0x68FF}, //4296 #CJK UNIFIED IDEOGRAPH + {0x97B5, 0x6900}, //4297 #CJK UNIFIED IDEOGRAPH + {0x97B6, 0x6902}, //4298 #CJK UNIFIED IDEOGRAPH + {0x97B7, 0x6903}, //4299 #CJK UNIFIED IDEOGRAPH + {0x97B8, 0x6904}, //4300 #CJK UNIFIED IDEOGRAPH + {0x97B9, 0x6906}, //4301 #CJK UNIFIED IDEOGRAPH + {0x97BA, 0x6907}, //4302 #CJK UNIFIED IDEOGRAPH + {0x97BB, 0x6908}, //4303 #CJK UNIFIED IDEOGRAPH + {0x97BC, 0x6909}, //4304 #CJK UNIFIED IDEOGRAPH + {0x97BD, 0x690A}, //4305 #CJK UNIFIED IDEOGRAPH + {0x97BE, 0x690C}, //4306 #CJK UNIFIED IDEOGRAPH + {0x97BF, 0x690F}, //4307 #CJK UNIFIED IDEOGRAPH + {0x97C0, 0x6911}, //4308 #CJK UNIFIED IDEOGRAPH + {0x97C1, 0x6913}, //4309 #CJK UNIFIED IDEOGRAPH + {0x97C2, 0x6914}, //4310 #CJK UNIFIED IDEOGRAPH + {0x97C3, 0x6915}, //4311 #CJK UNIFIED IDEOGRAPH + {0x97C4, 0x6916}, //4312 #CJK UNIFIED IDEOGRAPH + {0x97C5, 0x6917}, //4313 #CJK UNIFIED IDEOGRAPH + {0x97C6, 0x6918}, //4314 #CJK UNIFIED IDEOGRAPH + {0x97C7, 0x6919}, //4315 #CJK UNIFIED IDEOGRAPH + {0x97C8, 0x691A}, //4316 #CJK UNIFIED IDEOGRAPH + {0x97C9, 0x691B}, //4317 #CJK UNIFIED IDEOGRAPH + {0x97CA, 0x691C}, //4318 #CJK UNIFIED IDEOGRAPH + {0x97CB, 0x691D}, //4319 #CJK UNIFIED IDEOGRAPH + {0x97CC, 0x691E}, //4320 #CJK UNIFIED IDEOGRAPH + {0x97CD, 0x6921}, //4321 #CJK UNIFIED IDEOGRAPH + {0x97CE, 0x6922}, //4322 #CJK UNIFIED IDEOGRAPH + {0x97CF, 0x6923}, //4323 #CJK UNIFIED IDEOGRAPH + {0x97D0, 0x6925}, //4324 #CJK UNIFIED IDEOGRAPH + {0x97D1, 0x6926}, //4325 #CJK UNIFIED IDEOGRAPH + {0x97D2, 0x6927}, //4326 #CJK UNIFIED IDEOGRAPH + {0x97D3, 0x6928}, //4327 #CJK UNIFIED IDEOGRAPH + {0x97D4, 0x6929}, //4328 #CJK UNIFIED IDEOGRAPH + {0x97D5, 0x692A}, //4329 #CJK UNIFIED IDEOGRAPH + {0x97D6, 0x692B}, //4330 #CJK UNIFIED IDEOGRAPH + {0x97D7, 0x692C}, //4331 #CJK UNIFIED IDEOGRAPH + {0x97D8, 0x692E}, //4332 #CJK UNIFIED IDEOGRAPH + {0x97D9, 0x692F}, //4333 #CJK UNIFIED IDEOGRAPH + {0x97DA, 0x6931}, //4334 #CJK UNIFIED IDEOGRAPH + {0x97DB, 0x6932}, //4335 #CJK UNIFIED IDEOGRAPH + {0x97DC, 0x6933}, //4336 #CJK UNIFIED IDEOGRAPH + {0x97DD, 0x6935}, //4337 #CJK UNIFIED IDEOGRAPH + {0x97DE, 0x6936}, //4338 #CJK UNIFIED IDEOGRAPH + {0x97DF, 0x6937}, //4339 #CJK UNIFIED IDEOGRAPH + {0x97E0, 0x6938}, //4340 #CJK UNIFIED IDEOGRAPH + {0x97E1, 0x693A}, //4341 #CJK UNIFIED IDEOGRAPH + {0x97E2, 0x693B}, //4342 #CJK UNIFIED IDEOGRAPH + {0x97E3, 0x693C}, //4343 #CJK UNIFIED IDEOGRAPH + {0x97E4, 0x693E}, //4344 #CJK UNIFIED IDEOGRAPH + {0x97E5, 0x6940}, //4345 #CJK UNIFIED IDEOGRAPH + {0x97E6, 0x6941}, //4346 #CJK UNIFIED IDEOGRAPH + {0x97E7, 0x6943}, //4347 #CJK UNIFIED IDEOGRAPH + {0x97E8, 0x6944}, //4348 #CJK UNIFIED IDEOGRAPH + {0x97E9, 0x6945}, //4349 #CJK UNIFIED IDEOGRAPH + {0x97EA, 0x6946}, //4350 #CJK UNIFIED IDEOGRAPH + {0x97EB, 0x6947}, //4351 #CJK UNIFIED IDEOGRAPH + {0x97EC, 0x6948}, //4352 #CJK UNIFIED IDEOGRAPH + {0x97ED, 0x6949}, //4353 #CJK UNIFIED IDEOGRAPH + {0x97EE, 0x694A}, //4354 #CJK UNIFIED IDEOGRAPH + {0x97EF, 0x694B}, //4355 #CJK UNIFIED IDEOGRAPH + {0x97F0, 0x694C}, //4356 #CJK UNIFIED IDEOGRAPH + {0x97F1, 0x694D}, //4357 #CJK UNIFIED IDEOGRAPH + {0x97F2, 0x694E}, //4358 #CJK UNIFIED IDEOGRAPH + {0x97F3, 0x694F}, //4359 #CJK UNIFIED IDEOGRAPH + {0x97F4, 0x6950}, //4360 #CJK UNIFIED IDEOGRAPH + {0x97F5, 0x6951}, //4361 #CJK UNIFIED IDEOGRAPH + {0x97F6, 0x6952}, //4362 #CJK UNIFIED IDEOGRAPH + {0x97F7, 0x6953}, //4363 #CJK UNIFIED IDEOGRAPH + {0x97F8, 0x6955}, //4364 #CJK UNIFIED IDEOGRAPH + {0x97F9, 0x6956}, //4365 #CJK UNIFIED IDEOGRAPH + {0x97FA, 0x6958}, //4366 #CJK UNIFIED IDEOGRAPH + {0x97FB, 0x6959}, //4367 #CJK UNIFIED IDEOGRAPH + {0x97FC, 0x695B}, //4368 #CJK UNIFIED IDEOGRAPH + {0x97FD, 0x695C}, //4369 #CJK UNIFIED IDEOGRAPH + {0x97FE, 0x695F}, //4370 #CJK UNIFIED IDEOGRAPH + {0x9840, 0x6961}, //4371 #CJK UNIFIED IDEOGRAPH + {0x9841, 0x6962}, //4372 #CJK UNIFIED IDEOGRAPH + {0x9842, 0x6964}, //4373 #CJK UNIFIED IDEOGRAPH + {0x9843, 0x6965}, //4374 #CJK UNIFIED IDEOGRAPH + {0x9844, 0x6967}, //4375 #CJK UNIFIED IDEOGRAPH + {0x9845, 0x6968}, //4376 #CJK UNIFIED IDEOGRAPH + {0x9846, 0x6969}, //4377 #CJK UNIFIED IDEOGRAPH + {0x9847, 0x696A}, //4378 #CJK UNIFIED IDEOGRAPH + {0x9848, 0x696C}, //4379 #CJK UNIFIED IDEOGRAPH + {0x9849, 0x696D}, //4380 #CJK UNIFIED IDEOGRAPH + {0x984A, 0x696F}, //4381 #CJK UNIFIED IDEOGRAPH + {0x984B, 0x6970}, //4382 #CJK UNIFIED IDEOGRAPH + {0x984C, 0x6972}, //4383 #CJK UNIFIED IDEOGRAPH + {0x984D, 0x6973}, //4384 #CJK UNIFIED IDEOGRAPH + {0x984E, 0x6974}, //4385 #CJK UNIFIED IDEOGRAPH + {0x984F, 0x6975}, //4386 #CJK UNIFIED IDEOGRAPH + {0x9850, 0x6976}, //4387 #CJK UNIFIED IDEOGRAPH + {0x9851, 0x697A}, //4388 #CJK UNIFIED IDEOGRAPH + {0x9852, 0x697B}, //4389 #CJK UNIFIED IDEOGRAPH + {0x9853, 0x697D}, //4390 #CJK UNIFIED IDEOGRAPH + {0x9854, 0x697E}, //4391 #CJK UNIFIED IDEOGRAPH + {0x9855, 0x697F}, //4392 #CJK UNIFIED IDEOGRAPH + {0x9856, 0x6981}, //4393 #CJK UNIFIED IDEOGRAPH + {0x9857, 0x6983}, //4394 #CJK UNIFIED IDEOGRAPH + {0x9858, 0x6985}, //4395 #CJK UNIFIED IDEOGRAPH + {0x9859, 0x698A}, //4396 #CJK UNIFIED IDEOGRAPH + {0x985A, 0x698B}, //4397 #CJK UNIFIED IDEOGRAPH + {0x985B, 0x698C}, //4398 #CJK UNIFIED IDEOGRAPH + {0x985C, 0x698E}, //4399 #CJK UNIFIED IDEOGRAPH + {0x985D, 0x698F}, //4400 #CJK UNIFIED IDEOGRAPH + {0x985E, 0x6990}, //4401 #CJK UNIFIED IDEOGRAPH + {0x985F, 0x6991}, //4402 #CJK UNIFIED IDEOGRAPH + {0x9860, 0x6992}, //4403 #CJK UNIFIED IDEOGRAPH + {0x9861, 0x6993}, //4404 #CJK UNIFIED IDEOGRAPH + {0x9862, 0x6996}, //4405 #CJK UNIFIED IDEOGRAPH + {0x9863, 0x6997}, //4406 #CJK UNIFIED IDEOGRAPH + {0x9864, 0x6999}, //4407 #CJK UNIFIED IDEOGRAPH + {0x9865, 0x699A}, //4408 #CJK UNIFIED IDEOGRAPH + {0x9866, 0x699D}, //4409 #CJK UNIFIED IDEOGRAPH + {0x9867, 0x699E}, //4410 #CJK UNIFIED IDEOGRAPH + {0x9868, 0x699F}, //4411 #CJK UNIFIED IDEOGRAPH + {0x9869, 0x69A0}, //4412 #CJK UNIFIED IDEOGRAPH + {0x986A, 0x69A1}, //4413 #CJK UNIFIED IDEOGRAPH + {0x986B, 0x69A2}, //4414 #CJK UNIFIED IDEOGRAPH + {0x986C, 0x69A3}, //4415 #CJK UNIFIED IDEOGRAPH + {0x986D, 0x69A4}, //4416 #CJK UNIFIED IDEOGRAPH + {0x986E, 0x69A5}, //4417 #CJK UNIFIED IDEOGRAPH + {0x986F, 0x69A6}, //4418 #CJK UNIFIED IDEOGRAPH + {0x9870, 0x69A9}, //4419 #CJK UNIFIED IDEOGRAPH + {0x9871, 0x69AA}, //4420 #CJK UNIFIED IDEOGRAPH + {0x9872, 0x69AC}, //4421 #CJK UNIFIED IDEOGRAPH + {0x9873, 0x69AE}, //4422 #CJK UNIFIED IDEOGRAPH + {0x9874, 0x69AF}, //4423 #CJK UNIFIED IDEOGRAPH + {0x9875, 0x69B0}, //4424 #CJK UNIFIED IDEOGRAPH + {0x9876, 0x69B2}, //4425 #CJK UNIFIED IDEOGRAPH + {0x9877, 0x69B3}, //4426 #CJK UNIFIED IDEOGRAPH + {0x9878, 0x69B5}, //4427 #CJK UNIFIED IDEOGRAPH + {0x9879, 0x69B6}, //4428 #CJK UNIFIED IDEOGRAPH + {0x987A, 0x69B8}, //4429 #CJK UNIFIED IDEOGRAPH + {0x987B, 0x69B9}, //4430 #CJK UNIFIED IDEOGRAPH + {0x987C, 0x69BA}, //4431 #CJK UNIFIED IDEOGRAPH + {0x987D, 0x69BC}, //4432 #CJK UNIFIED IDEOGRAPH + {0x987E, 0x69BD}, //4433 #CJK UNIFIED IDEOGRAPH + {0x9880, 0x69BE}, //4434 #CJK UNIFIED IDEOGRAPH + {0x9881, 0x69BF}, //4435 #CJK UNIFIED IDEOGRAPH + {0x9882, 0x69C0}, //4436 #CJK UNIFIED IDEOGRAPH + {0x9883, 0x69C2}, //4437 #CJK UNIFIED IDEOGRAPH + {0x9884, 0x69C3}, //4438 #CJK UNIFIED IDEOGRAPH + {0x9885, 0x69C4}, //4439 #CJK UNIFIED IDEOGRAPH + {0x9886, 0x69C5}, //4440 #CJK UNIFIED IDEOGRAPH + {0x9887, 0x69C6}, //4441 #CJK UNIFIED IDEOGRAPH + {0x9888, 0x69C7}, //4442 #CJK UNIFIED IDEOGRAPH + {0x9889, 0x69C8}, //4443 #CJK UNIFIED IDEOGRAPH + {0x988A, 0x69C9}, //4444 #CJK UNIFIED IDEOGRAPH + {0x988B, 0x69CB}, //4445 #CJK UNIFIED IDEOGRAPH + {0x988C, 0x69CD}, //4446 #CJK UNIFIED IDEOGRAPH + {0x988D, 0x69CF}, //4447 #CJK UNIFIED IDEOGRAPH + {0x988E, 0x69D1}, //4448 #CJK UNIFIED IDEOGRAPH + {0x988F, 0x69D2}, //4449 #CJK UNIFIED IDEOGRAPH + {0x9890, 0x69D3}, //4450 #CJK UNIFIED IDEOGRAPH + {0x9891, 0x69D5}, //4451 #CJK UNIFIED IDEOGRAPH + {0x9892, 0x69D6}, //4452 #CJK UNIFIED IDEOGRAPH + {0x9893, 0x69D7}, //4453 #CJK UNIFIED IDEOGRAPH + {0x9894, 0x69D8}, //4454 #CJK UNIFIED IDEOGRAPH + {0x9895, 0x69D9}, //4455 #CJK UNIFIED IDEOGRAPH + {0x9896, 0x69DA}, //4456 #CJK UNIFIED IDEOGRAPH + {0x9897, 0x69DC}, //4457 #CJK UNIFIED IDEOGRAPH + {0x9898, 0x69DD}, //4458 #CJK UNIFIED IDEOGRAPH + {0x9899, 0x69DE}, //4459 #CJK UNIFIED IDEOGRAPH + {0x989A, 0x69E1}, //4460 #CJK UNIFIED IDEOGRAPH + {0x989B, 0x69E2}, //4461 #CJK UNIFIED IDEOGRAPH + {0x989C, 0x69E3}, //4462 #CJK UNIFIED IDEOGRAPH + {0x989D, 0x69E4}, //4463 #CJK UNIFIED IDEOGRAPH + {0x989E, 0x69E5}, //4464 #CJK UNIFIED IDEOGRAPH + {0x989F, 0x69E6}, //4465 #CJK UNIFIED IDEOGRAPH + {0x98A0, 0x69E7}, //4466 #CJK UNIFIED IDEOGRAPH + {0x98A1, 0x69E8}, //4467 #CJK UNIFIED IDEOGRAPH + {0x98A2, 0x69E9}, //4468 #CJK UNIFIED IDEOGRAPH + {0x98A3, 0x69EA}, //4469 #CJK UNIFIED IDEOGRAPH + {0x98A4, 0x69EB}, //4470 #CJK UNIFIED IDEOGRAPH + {0x98A5, 0x69EC}, //4471 #CJK UNIFIED IDEOGRAPH + {0x98A6, 0x69EE}, //4472 #CJK UNIFIED IDEOGRAPH + {0x98A7, 0x69EF}, //4473 #CJK UNIFIED IDEOGRAPH + {0x98A8, 0x69F0}, //4474 #CJK UNIFIED IDEOGRAPH + {0x98A9, 0x69F1}, //4475 #CJK UNIFIED IDEOGRAPH + {0x98AA, 0x69F3}, //4476 #CJK UNIFIED IDEOGRAPH + {0x98AB, 0x69F4}, //4477 #CJK UNIFIED IDEOGRAPH + {0x98AC, 0x69F5}, //4478 #CJK UNIFIED IDEOGRAPH + {0x98AD, 0x69F6}, //4479 #CJK UNIFIED IDEOGRAPH + {0x98AE, 0x69F7}, //4480 #CJK UNIFIED IDEOGRAPH + {0x98AF, 0x69F8}, //4481 #CJK UNIFIED IDEOGRAPH + {0x98B0, 0x69F9}, //4482 #CJK UNIFIED IDEOGRAPH + {0x98B1, 0x69FA}, //4483 #CJK UNIFIED IDEOGRAPH + {0x98B2, 0x69FB}, //4484 #CJK UNIFIED IDEOGRAPH + {0x98B3, 0x69FC}, //4485 #CJK UNIFIED IDEOGRAPH + {0x98B4, 0x69FE}, //4486 #CJK UNIFIED IDEOGRAPH + {0x98B5, 0x6A00}, //4487 #CJK UNIFIED IDEOGRAPH + {0x98B6, 0x6A01}, //4488 #CJK UNIFIED IDEOGRAPH + {0x98B7, 0x6A02}, //4489 #CJK UNIFIED IDEOGRAPH + {0x98B8, 0x6A03}, //4490 #CJK UNIFIED IDEOGRAPH + {0x98B9, 0x6A04}, //4491 #CJK UNIFIED IDEOGRAPH + {0x98BA, 0x6A05}, //4492 #CJK UNIFIED IDEOGRAPH + {0x98BB, 0x6A06}, //4493 #CJK UNIFIED IDEOGRAPH + {0x98BC, 0x6A07}, //4494 #CJK UNIFIED IDEOGRAPH + {0x98BD, 0x6A08}, //4495 #CJK UNIFIED IDEOGRAPH + {0x98BE, 0x6A09}, //4496 #CJK UNIFIED IDEOGRAPH + {0x98BF, 0x6A0B}, //4497 #CJK UNIFIED IDEOGRAPH + {0x98C0, 0x6A0C}, //4498 #CJK UNIFIED IDEOGRAPH + {0x98C1, 0x6A0D}, //4499 #CJK UNIFIED IDEOGRAPH + {0x98C2, 0x6A0E}, //4500 #CJK UNIFIED IDEOGRAPH + {0x98C3, 0x6A0F}, //4501 #CJK UNIFIED IDEOGRAPH + {0x98C4, 0x6A10}, //4502 #CJK UNIFIED IDEOGRAPH + {0x98C5, 0x6A11}, //4503 #CJK UNIFIED IDEOGRAPH + {0x98C6, 0x6A12}, //4504 #CJK UNIFIED IDEOGRAPH + {0x98C7, 0x6A13}, //4505 #CJK UNIFIED IDEOGRAPH + {0x98C8, 0x6A14}, //4506 #CJK UNIFIED IDEOGRAPH + {0x98C9, 0x6A15}, //4507 #CJK UNIFIED IDEOGRAPH + {0x98CA, 0x6A16}, //4508 #CJK UNIFIED IDEOGRAPH + {0x98CB, 0x6A19}, //4509 #CJK UNIFIED IDEOGRAPH + {0x98CC, 0x6A1A}, //4510 #CJK UNIFIED IDEOGRAPH + {0x98CD, 0x6A1B}, //4511 #CJK UNIFIED IDEOGRAPH + {0x98CE, 0x6A1C}, //4512 #CJK UNIFIED IDEOGRAPH + {0x98CF, 0x6A1D}, //4513 #CJK UNIFIED IDEOGRAPH + {0x98D0, 0x6A1E}, //4514 #CJK UNIFIED IDEOGRAPH + {0x98D1, 0x6A20}, //4515 #CJK UNIFIED IDEOGRAPH + {0x98D2, 0x6A22}, //4516 #CJK UNIFIED IDEOGRAPH + {0x98D3, 0x6A23}, //4517 #CJK UNIFIED IDEOGRAPH + {0x98D4, 0x6A24}, //4518 #CJK UNIFIED IDEOGRAPH + {0x98D5, 0x6A25}, //4519 #CJK UNIFIED IDEOGRAPH + {0x98D6, 0x6A26}, //4520 #CJK UNIFIED IDEOGRAPH + {0x98D7, 0x6A27}, //4521 #CJK UNIFIED IDEOGRAPH + {0x98D8, 0x6A29}, //4522 #CJK UNIFIED IDEOGRAPH + {0x98D9, 0x6A2B}, //4523 #CJK UNIFIED IDEOGRAPH + {0x98DA, 0x6A2C}, //4524 #CJK UNIFIED IDEOGRAPH + {0x98DB, 0x6A2D}, //4525 #CJK UNIFIED IDEOGRAPH + {0x98DC, 0x6A2E}, //4526 #CJK UNIFIED IDEOGRAPH + {0x98DD, 0x6A30}, //4527 #CJK UNIFIED IDEOGRAPH + {0x98DE, 0x6A32}, //4528 #CJK UNIFIED IDEOGRAPH + {0x98DF, 0x6A33}, //4529 #CJK UNIFIED IDEOGRAPH + {0x98E0, 0x6A34}, //4530 #CJK UNIFIED IDEOGRAPH + {0x98E1, 0x6A36}, //4531 #CJK UNIFIED IDEOGRAPH + {0x98E2, 0x6A37}, //4532 #CJK UNIFIED IDEOGRAPH + {0x98E3, 0x6A38}, //4533 #CJK UNIFIED IDEOGRAPH + {0x98E4, 0x6A39}, //4534 #CJK UNIFIED IDEOGRAPH + {0x98E5, 0x6A3A}, //4535 #CJK UNIFIED IDEOGRAPH + {0x98E6, 0x6A3B}, //4536 #CJK UNIFIED IDEOGRAPH + {0x98E7, 0x6A3C}, //4537 #CJK UNIFIED IDEOGRAPH + {0x98E8, 0x6A3F}, //4538 #CJK UNIFIED IDEOGRAPH + {0x98E9, 0x6A40}, //4539 #CJK UNIFIED IDEOGRAPH + {0x98EA, 0x6A41}, //4540 #CJK UNIFIED IDEOGRAPH + {0x98EB, 0x6A42}, //4541 #CJK UNIFIED IDEOGRAPH + {0x98EC, 0x6A43}, //4542 #CJK UNIFIED IDEOGRAPH + {0x98ED, 0x6A45}, //4543 #CJK UNIFIED IDEOGRAPH + {0x98EE, 0x6A46}, //4544 #CJK UNIFIED IDEOGRAPH + {0x98EF, 0x6A48}, //4545 #CJK UNIFIED IDEOGRAPH + {0x98F0, 0x6A49}, //4546 #CJK UNIFIED IDEOGRAPH + {0x98F1, 0x6A4A}, //4547 #CJK UNIFIED IDEOGRAPH + {0x98F2, 0x6A4B}, //4548 #CJK UNIFIED IDEOGRAPH + {0x98F3, 0x6A4C}, //4549 #CJK UNIFIED IDEOGRAPH + {0x98F4, 0x6A4D}, //4550 #CJK UNIFIED IDEOGRAPH + {0x98F5, 0x6A4E}, //4551 #CJK UNIFIED IDEOGRAPH + {0x98F6, 0x6A4F}, //4552 #CJK UNIFIED IDEOGRAPH + {0x98F7, 0x6A51}, //4553 #CJK UNIFIED IDEOGRAPH + {0x98F8, 0x6A52}, //4554 #CJK UNIFIED IDEOGRAPH + {0x98F9, 0x6A53}, //4555 #CJK UNIFIED IDEOGRAPH + {0x98FA, 0x6A54}, //4556 #CJK UNIFIED IDEOGRAPH + {0x98FB, 0x6A55}, //4557 #CJK UNIFIED IDEOGRAPH + {0x98FC, 0x6A56}, //4558 #CJK UNIFIED IDEOGRAPH + {0x98FD, 0x6A57}, //4559 #CJK UNIFIED IDEOGRAPH + {0x98FE, 0x6A5A}, //4560 #CJK UNIFIED IDEOGRAPH + {0x9940, 0x6A5C}, //4561 #CJK UNIFIED IDEOGRAPH + {0x9941, 0x6A5D}, //4562 #CJK UNIFIED IDEOGRAPH + {0x9942, 0x6A5E}, //4563 #CJK UNIFIED IDEOGRAPH + {0x9943, 0x6A5F}, //4564 #CJK UNIFIED IDEOGRAPH + {0x9944, 0x6A60}, //4565 #CJK UNIFIED IDEOGRAPH + {0x9945, 0x6A62}, //4566 #CJK UNIFIED IDEOGRAPH + {0x9946, 0x6A63}, //4567 #CJK UNIFIED IDEOGRAPH + {0x9947, 0x6A64}, //4568 #CJK UNIFIED IDEOGRAPH + {0x9948, 0x6A66}, //4569 #CJK UNIFIED IDEOGRAPH + {0x9949, 0x6A67}, //4570 #CJK UNIFIED IDEOGRAPH + {0x994A, 0x6A68}, //4571 #CJK UNIFIED IDEOGRAPH + {0x994B, 0x6A69}, //4572 #CJK UNIFIED IDEOGRAPH + {0x994C, 0x6A6A}, //4573 #CJK UNIFIED IDEOGRAPH + {0x994D, 0x6A6B}, //4574 #CJK UNIFIED IDEOGRAPH + {0x994E, 0x6A6C}, //4575 #CJK UNIFIED IDEOGRAPH + {0x994F, 0x6A6D}, //4576 #CJK UNIFIED IDEOGRAPH + {0x9950, 0x6A6E}, //4577 #CJK UNIFIED IDEOGRAPH + {0x9951, 0x6A6F}, //4578 #CJK UNIFIED IDEOGRAPH + {0x9952, 0x6A70}, //4579 #CJK UNIFIED IDEOGRAPH + {0x9953, 0x6A72}, //4580 #CJK UNIFIED IDEOGRAPH + {0x9954, 0x6A73}, //4581 #CJK UNIFIED IDEOGRAPH + {0x9955, 0x6A74}, //4582 #CJK UNIFIED IDEOGRAPH + {0x9956, 0x6A75}, //4583 #CJK UNIFIED IDEOGRAPH + {0x9957, 0x6A76}, //4584 #CJK UNIFIED IDEOGRAPH + {0x9958, 0x6A77}, //4585 #CJK UNIFIED IDEOGRAPH + {0x9959, 0x6A78}, //4586 #CJK UNIFIED IDEOGRAPH + {0x995A, 0x6A7A}, //4587 #CJK UNIFIED IDEOGRAPH + {0x995B, 0x6A7B}, //4588 #CJK UNIFIED IDEOGRAPH + {0x995C, 0x6A7D}, //4589 #CJK UNIFIED IDEOGRAPH + {0x995D, 0x6A7E}, //4590 #CJK UNIFIED IDEOGRAPH + {0x995E, 0x6A7F}, //4591 #CJK UNIFIED IDEOGRAPH + {0x995F, 0x6A81}, //4592 #CJK UNIFIED IDEOGRAPH + {0x9960, 0x6A82}, //4593 #CJK UNIFIED IDEOGRAPH + {0x9961, 0x6A83}, //4594 #CJK UNIFIED IDEOGRAPH + {0x9962, 0x6A85}, //4595 #CJK UNIFIED IDEOGRAPH + {0x9963, 0x6A86}, //4596 #CJK UNIFIED IDEOGRAPH + {0x9964, 0x6A87}, //4597 #CJK UNIFIED IDEOGRAPH + {0x9965, 0x6A88}, //4598 #CJK UNIFIED IDEOGRAPH + {0x9966, 0x6A89}, //4599 #CJK UNIFIED IDEOGRAPH + {0x9967, 0x6A8A}, //4600 #CJK UNIFIED IDEOGRAPH + {0x9968, 0x6A8B}, //4601 #CJK UNIFIED IDEOGRAPH + {0x9969, 0x6A8C}, //4602 #CJK UNIFIED IDEOGRAPH + {0x996A, 0x6A8D}, //4603 #CJK UNIFIED IDEOGRAPH + {0x996B, 0x6A8F}, //4604 #CJK UNIFIED IDEOGRAPH + {0x996C, 0x6A92}, //4605 #CJK UNIFIED IDEOGRAPH + {0x996D, 0x6A93}, //4606 #CJK UNIFIED IDEOGRAPH + {0x996E, 0x6A94}, //4607 #CJK UNIFIED IDEOGRAPH + {0x996F, 0x6A95}, //4608 #CJK UNIFIED IDEOGRAPH + {0x9970, 0x6A96}, //4609 #CJK UNIFIED IDEOGRAPH + {0x9971, 0x6A98}, //4610 #CJK UNIFIED IDEOGRAPH + {0x9972, 0x6A99}, //4611 #CJK UNIFIED IDEOGRAPH + {0x9973, 0x6A9A}, //4612 #CJK UNIFIED IDEOGRAPH + {0x9974, 0x6A9B}, //4613 #CJK UNIFIED IDEOGRAPH + {0x9975, 0x6A9C}, //4614 #CJK UNIFIED IDEOGRAPH + {0x9976, 0x6A9D}, //4615 #CJK UNIFIED IDEOGRAPH + {0x9977, 0x6A9E}, //4616 #CJK UNIFIED IDEOGRAPH + {0x9978, 0x6A9F}, //4617 #CJK UNIFIED IDEOGRAPH + {0x9979, 0x6AA1}, //4618 #CJK UNIFIED IDEOGRAPH + {0x997A, 0x6AA2}, //4619 #CJK UNIFIED IDEOGRAPH + {0x997B, 0x6AA3}, //4620 #CJK UNIFIED IDEOGRAPH + {0x997C, 0x6AA4}, //4621 #CJK UNIFIED IDEOGRAPH + {0x997D, 0x6AA5}, //4622 #CJK UNIFIED IDEOGRAPH + {0x997E, 0x6AA6}, //4623 #CJK UNIFIED IDEOGRAPH + {0x9980, 0x6AA7}, //4624 #CJK UNIFIED IDEOGRAPH + {0x9981, 0x6AA8}, //4625 #CJK UNIFIED IDEOGRAPH + {0x9982, 0x6AAA}, //4626 #CJK UNIFIED IDEOGRAPH + {0x9983, 0x6AAD}, //4627 #CJK UNIFIED IDEOGRAPH + {0x9984, 0x6AAE}, //4628 #CJK UNIFIED IDEOGRAPH + {0x9985, 0x6AAF}, //4629 #CJK UNIFIED IDEOGRAPH + {0x9986, 0x6AB0}, //4630 #CJK UNIFIED IDEOGRAPH + {0x9987, 0x6AB1}, //4631 #CJK UNIFIED IDEOGRAPH + {0x9988, 0x6AB2}, //4632 #CJK UNIFIED IDEOGRAPH + {0x9989, 0x6AB3}, //4633 #CJK UNIFIED IDEOGRAPH + {0x998A, 0x6AB4}, //4634 #CJK UNIFIED IDEOGRAPH + {0x998B, 0x6AB5}, //4635 #CJK UNIFIED IDEOGRAPH + {0x998C, 0x6AB6}, //4636 #CJK UNIFIED IDEOGRAPH + {0x998D, 0x6AB7}, //4637 #CJK UNIFIED IDEOGRAPH + {0x998E, 0x6AB8}, //4638 #CJK UNIFIED IDEOGRAPH + {0x998F, 0x6AB9}, //4639 #CJK UNIFIED IDEOGRAPH + {0x9990, 0x6ABA}, //4640 #CJK UNIFIED IDEOGRAPH + {0x9991, 0x6ABB}, //4641 #CJK UNIFIED IDEOGRAPH + {0x9992, 0x6ABC}, //4642 #CJK UNIFIED IDEOGRAPH + {0x9993, 0x6ABD}, //4643 #CJK UNIFIED IDEOGRAPH + {0x9994, 0x6ABE}, //4644 #CJK UNIFIED IDEOGRAPH + {0x9995, 0x6ABF}, //4645 #CJK UNIFIED IDEOGRAPH + {0x9996, 0x6AC0}, //4646 #CJK UNIFIED IDEOGRAPH + {0x9997, 0x6AC1}, //4647 #CJK UNIFIED IDEOGRAPH + {0x9998, 0x6AC2}, //4648 #CJK UNIFIED IDEOGRAPH + {0x9999, 0x6AC3}, //4649 #CJK UNIFIED IDEOGRAPH + {0x999A, 0x6AC4}, //4650 #CJK UNIFIED IDEOGRAPH + {0x999B, 0x6AC5}, //4651 #CJK UNIFIED IDEOGRAPH + {0x999C, 0x6AC6}, //4652 #CJK UNIFIED IDEOGRAPH + {0x999D, 0x6AC7}, //4653 #CJK UNIFIED IDEOGRAPH + {0x999E, 0x6AC8}, //4654 #CJK UNIFIED IDEOGRAPH + {0x999F, 0x6AC9}, //4655 #CJK UNIFIED IDEOGRAPH + {0x99A0, 0x6ACA}, //4656 #CJK UNIFIED IDEOGRAPH + {0x99A1, 0x6ACB}, //4657 #CJK UNIFIED IDEOGRAPH + {0x99A2, 0x6ACC}, //4658 #CJK UNIFIED IDEOGRAPH + {0x99A3, 0x6ACD}, //4659 #CJK UNIFIED IDEOGRAPH + {0x99A4, 0x6ACE}, //4660 #CJK UNIFIED IDEOGRAPH + {0x99A5, 0x6ACF}, //4661 #CJK UNIFIED IDEOGRAPH + {0x99A6, 0x6AD0}, //4662 #CJK UNIFIED IDEOGRAPH + {0x99A7, 0x6AD1}, //4663 #CJK UNIFIED IDEOGRAPH + {0x99A8, 0x6AD2}, //4664 #CJK UNIFIED IDEOGRAPH + {0x99A9, 0x6AD3}, //4665 #CJK UNIFIED IDEOGRAPH + {0x99AA, 0x6AD4}, //4666 #CJK UNIFIED IDEOGRAPH + {0x99AB, 0x6AD5}, //4667 #CJK UNIFIED IDEOGRAPH + {0x99AC, 0x6AD6}, //4668 #CJK UNIFIED IDEOGRAPH + {0x99AD, 0x6AD7}, //4669 #CJK UNIFIED IDEOGRAPH + {0x99AE, 0x6AD8}, //4670 #CJK UNIFIED IDEOGRAPH + {0x99AF, 0x6AD9}, //4671 #CJK UNIFIED IDEOGRAPH + {0x99B0, 0x6ADA}, //4672 #CJK UNIFIED IDEOGRAPH + {0x99B1, 0x6ADB}, //4673 #CJK UNIFIED IDEOGRAPH + {0x99B2, 0x6ADC}, //4674 #CJK UNIFIED IDEOGRAPH + {0x99B3, 0x6ADD}, //4675 #CJK UNIFIED IDEOGRAPH + {0x99B4, 0x6ADE}, //4676 #CJK UNIFIED IDEOGRAPH + {0x99B5, 0x6ADF}, //4677 #CJK UNIFIED IDEOGRAPH + {0x99B6, 0x6AE0}, //4678 #CJK UNIFIED IDEOGRAPH + {0x99B7, 0x6AE1}, //4679 #CJK UNIFIED IDEOGRAPH + {0x99B8, 0x6AE2}, //4680 #CJK UNIFIED IDEOGRAPH + {0x99B9, 0x6AE3}, //4681 #CJK UNIFIED IDEOGRAPH + {0x99BA, 0x6AE4}, //4682 #CJK UNIFIED IDEOGRAPH + {0x99BB, 0x6AE5}, //4683 #CJK UNIFIED IDEOGRAPH + {0x99BC, 0x6AE6}, //4684 #CJK UNIFIED IDEOGRAPH + {0x99BD, 0x6AE7}, //4685 #CJK UNIFIED IDEOGRAPH + {0x99BE, 0x6AE8}, //4686 #CJK UNIFIED IDEOGRAPH + {0x99BF, 0x6AE9}, //4687 #CJK UNIFIED IDEOGRAPH + {0x99C0, 0x6AEA}, //4688 #CJK UNIFIED IDEOGRAPH + {0x99C1, 0x6AEB}, //4689 #CJK UNIFIED IDEOGRAPH + {0x99C2, 0x6AEC}, //4690 #CJK UNIFIED IDEOGRAPH + {0x99C3, 0x6AED}, //4691 #CJK UNIFIED IDEOGRAPH + {0x99C4, 0x6AEE}, //4692 #CJK UNIFIED IDEOGRAPH + {0x99C5, 0x6AEF}, //4693 #CJK UNIFIED IDEOGRAPH + {0x99C6, 0x6AF0}, //4694 #CJK UNIFIED IDEOGRAPH + {0x99C7, 0x6AF1}, //4695 #CJK UNIFIED IDEOGRAPH + {0x99C8, 0x6AF2}, //4696 #CJK UNIFIED IDEOGRAPH + {0x99C9, 0x6AF3}, //4697 #CJK UNIFIED IDEOGRAPH + {0x99CA, 0x6AF4}, //4698 #CJK UNIFIED IDEOGRAPH + {0x99CB, 0x6AF5}, //4699 #CJK UNIFIED IDEOGRAPH + {0x99CC, 0x6AF6}, //4700 #CJK UNIFIED IDEOGRAPH + {0x99CD, 0x6AF7}, //4701 #CJK UNIFIED IDEOGRAPH + {0x99CE, 0x6AF8}, //4702 #CJK UNIFIED IDEOGRAPH + {0x99CF, 0x6AF9}, //4703 #CJK UNIFIED IDEOGRAPH + {0x99D0, 0x6AFA}, //4704 #CJK UNIFIED IDEOGRAPH + {0x99D1, 0x6AFB}, //4705 #CJK UNIFIED IDEOGRAPH + {0x99D2, 0x6AFC}, //4706 #CJK UNIFIED IDEOGRAPH + {0x99D3, 0x6AFD}, //4707 #CJK UNIFIED IDEOGRAPH + {0x99D4, 0x6AFE}, //4708 #CJK UNIFIED IDEOGRAPH + {0x99D5, 0x6AFF}, //4709 #CJK UNIFIED IDEOGRAPH + {0x99D6, 0x6B00}, //4710 #CJK UNIFIED IDEOGRAPH + {0x99D7, 0x6B01}, //4711 #CJK UNIFIED IDEOGRAPH + {0x99D8, 0x6B02}, //4712 #CJK UNIFIED IDEOGRAPH + {0x99D9, 0x6B03}, //4713 #CJK UNIFIED IDEOGRAPH + {0x99DA, 0x6B04}, //4714 #CJK UNIFIED IDEOGRAPH + {0x99DB, 0x6B05}, //4715 #CJK UNIFIED IDEOGRAPH + {0x99DC, 0x6B06}, //4716 #CJK UNIFIED IDEOGRAPH + {0x99DD, 0x6B07}, //4717 #CJK UNIFIED IDEOGRAPH + {0x99DE, 0x6B08}, //4718 #CJK UNIFIED IDEOGRAPH + {0x99DF, 0x6B09}, //4719 #CJK UNIFIED IDEOGRAPH + {0x99E0, 0x6B0A}, //4720 #CJK UNIFIED IDEOGRAPH + {0x99E1, 0x6B0B}, //4721 #CJK UNIFIED IDEOGRAPH + {0x99E2, 0x6B0C}, //4722 #CJK UNIFIED IDEOGRAPH + {0x99E3, 0x6B0D}, //4723 #CJK UNIFIED IDEOGRAPH + {0x99E4, 0x6B0E}, //4724 #CJK UNIFIED IDEOGRAPH + {0x99E5, 0x6B0F}, //4725 #CJK UNIFIED IDEOGRAPH + {0x99E6, 0x6B10}, //4726 #CJK UNIFIED IDEOGRAPH + {0x99E7, 0x6B11}, //4727 #CJK UNIFIED IDEOGRAPH + {0x99E8, 0x6B12}, //4728 #CJK UNIFIED IDEOGRAPH + {0x99E9, 0x6B13}, //4729 #CJK UNIFIED IDEOGRAPH + {0x99EA, 0x6B14}, //4730 #CJK UNIFIED IDEOGRAPH + {0x99EB, 0x6B15}, //4731 #CJK UNIFIED IDEOGRAPH + {0x99EC, 0x6B16}, //4732 #CJK UNIFIED IDEOGRAPH + {0x99ED, 0x6B17}, //4733 #CJK UNIFIED IDEOGRAPH + {0x99EE, 0x6B18}, //4734 #CJK UNIFIED IDEOGRAPH + {0x99EF, 0x6B19}, //4735 #CJK UNIFIED IDEOGRAPH + {0x99F0, 0x6B1A}, //4736 #CJK UNIFIED IDEOGRAPH + {0x99F1, 0x6B1B}, //4737 #CJK UNIFIED IDEOGRAPH + {0x99F2, 0x6B1C}, //4738 #CJK UNIFIED IDEOGRAPH + {0x99F3, 0x6B1D}, //4739 #CJK UNIFIED IDEOGRAPH + {0x99F4, 0x6B1E}, //4740 #CJK UNIFIED IDEOGRAPH + {0x99F5, 0x6B1F}, //4741 #CJK UNIFIED IDEOGRAPH + {0x99F6, 0x6B25}, //4742 #CJK UNIFIED IDEOGRAPH + {0x99F7, 0x6B26}, //4743 #CJK UNIFIED IDEOGRAPH + {0x99F8, 0x6B28}, //4744 #CJK UNIFIED IDEOGRAPH + {0x99F9, 0x6B29}, //4745 #CJK UNIFIED IDEOGRAPH + {0x99FA, 0x6B2A}, //4746 #CJK UNIFIED IDEOGRAPH + {0x99FB, 0x6B2B}, //4747 #CJK UNIFIED IDEOGRAPH + {0x99FC, 0x6B2C}, //4748 #CJK UNIFIED IDEOGRAPH + {0x99FD, 0x6B2D}, //4749 #CJK UNIFIED IDEOGRAPH + {0x99FE, 0x6B2E}, //4750 #CJK UNIFIED IDEOGRAPH + {0x9A40, 0x6B2F}, //4751 #CJK UNIFIED IDEOGRAPH + {0x9A41, 0x6B30}, //4752 #CJK UNIFIED IDEOGRAPH + {0x9A42, 0x6B31}, //4753 #CJK UNIFIED IDEOGRAPH + {0x9A43, 0x6B33}, //4754 #CJK UNIFIED IDEOGRAPH + {0x9A44, 0x6B34}, //4755 #CJK UNIFIED IDEOGRAPH + {0x9A45, 0x6B35}, //4756 #CJK UNIFIED IDEOGRAPH + {0x9A46, 0x6B36}, //4757 #CJK UNIFIED IDEOGRAPH + {0x9A47, 0x6B38}, //4758 #CJK UNIFIED IDEOGRAPH + {0x9A48, 0x6B3B}, //4759 #CJK UNIFIED IDEOGRAPH + {0x9A49, 0x6B3C}, //4760 #CJK UNIFIED IDEOGRAPH + {0x9A4A, 0x6B3D}, //4761 #CJK UNIFIED IDEOGRAPH + {0x9A4B, 0x6B3F}, //4762 #CJK UNIFIED IDEOGRAPH + {0x9A4C, 0x6B40}, //4763 #CJK UNIFIED IDEOGRAPH + {0x9A4D, 0x6B41}, //4764 #CJK UNIFIED IDEOGRAPH + {0x9A4E, 0x6B42}, //4765 #CJK UNIFIED IDEOGRAPH + {0x9A4F, 0x6B44}, //4766 #CJK UNIFIED IDEOGRAPH + {0x9A50, 0x6B45}, //4767 #CJK UNIFIED IDEOGRAPH + {0x9A51, 0x6B48}, //4768 #CJK UNIFIED IDEOGRAPH + {0x9A52, 0x6B4A}, //4769 #CJK UNIFIED IDEOGRAPH + {0x9A53, 0x6B4B}, //4770 #CJK UNIFIED IDEOGRAPH + {0x9A54, 0x6B4D}, //4771 #CJK UNIFIED IDEOGRAPH + {0x9A55, 0x6B4E}, //4772 #CJK UNIFIED IDEOGRAPH + {0x9A56, 0x6B4F}, //4773 #CJK UNIFIED IDEOGRAPH + {0x9A57, 0x6B50}, //4774 #CJK UNIFIED IDEOGRAPH + {0x9A58, 0x6B51}, //4775 #CJK UNIFIED IDEOGRAPH + {0x9A59, 0x6B52}, //4776 #CJK UNIFIED IDEOGRAPH + {0x9A5A, 0x6B53}, //4777 #CJK UNIFIED IDEOGRAPH + {0x9A5B, 0x6B54}, //4778 #CJK UNIFIED IDEOGRAPH + {0x9A5C, 0x6B55}, //4779 #CJK UNIFIED IDEOGRAPH + {0x9A5D, 0x6B56}, //4780 #CJK UNIFIED IDEOGRAPH + {0x9A5E, 0x6B57}, //4781 #CJK UNIFIED IDEOGRAPH + {0x9A5F, 0x6B58}, //4782 #CJK UNIFIED IDEOGRAPH + {0x9A60, 0x6B5A}, //4783 #CJK UNIFIED IDEOGRAPH + {0x9A61, 0x6B5B}, //4784 #CJK UNIFIED IDEOGRAPH + {0x9A62, 0x6B5C}, //4785 #CJK UNIFIED IDEOGRAPH + {0x9A63, 0x6B5D}, //4786 #CJK UNIFIED IDEOGRAPH + {0x9A64, 0x6B5E}, //4787 #CJK UNIFIED IDEOGRAPH + {0x9A65, 0x6B5F}, //4788 #CJK UNIFIED IDEOGRAPH + {0x9A66, 0x6B60}, //4789 #CJK UNIFIED IDEOGRAPH + {0x9A67, 0x6B61}, //4790 #CJK UNIFIED IDEOGRAPH + {0x9A68, 0x6B68}, //4791 #CJK UNIFIED IDEOGRAPH + {0x9A69, 0x6B69}, //4792 #CJK UNIFIED IDEOGRAPH + {0x9A6A, 0x6B6B}, //4793 #CJK UNIFIED IDEOGRAPH + {0x9A6B, 0x6B6C}, //4794 #CJK UNIFIED IDEOGRAPH + {0x9A6C, 0x6B6D}, //4795 #CJK UNIFIED IDEOGRAPH + {0x9A6D, 0x6B6E}, //4796 #CJK UNIFIED IDEOGRAPH + {0x9A6E, 0x6B6F}, //4797 #CJK UNIFIED IDEOGRAPH + {0x9A6F, 0x6B70}, //4798 #CJK UNIFIED IDEOGRAPH + {0x9A70, 0x6B71}, //4799 #CJK UNIFIED IDEOGRAPH + {0x9A71, 0x6B72}, //4800 #CJK UNIFIED IDEOGRAPH + {0x9A72, 0x6B73}, //4801 #CJK UNIFIED IDEOGRAPH + {0x9A73, 0x6B74}, //4802 #CJK UNIFIED IDEOGRAPH + {0x9A74, 0x6B75}, //4803 #CJK UNIFIED IDEOGRAPH + {0x9A75, 0x6B76}, //4804 #CJK UNIFIED IDEOGRAPH + {0x9A76, 0x6B77}, //4805 #CJK UNIFIED IDEOGRAPH + {0x9A77, 0x6B78}, //4806 #CJK UNIFIED IDEOGRAPH + {0x9A78, 0x6B7A}, //4807 #CJK UNIFIED IDEOGRAPH + {0x9A79, 0x6B7D}, //4808 #CJK UNIFIED IDEOGRAPH + {0x9A7A, 0x6B7E}, //4809 #CJK UNIFIED IDEOGRAPH + {0x9A7B, 0x6B7F}, //4810 #CJK UNIFIED IDEOGRAPH + {0x9A7C, 0x6B80}, //4811 #CJK UNIFIED IDEOGRAPH + {0x9A7D, 0x6B85}, //4812 #CJK UNIFIED IDEOGRAPH + {0x9A7E, 0x6B88}, //4813 #CJK UNIFIED IDEOGRAPH + {0x9A80, 0x6B8C}, //4814 #CJK UNIFIED IDEOGRAPH + {0x9A81, 0x6B8E}, //4815 #CJK UNIFIED IDEOGRAPH + {0x9A82, 0x6B8F}, //4816 #CJK UNIFIED IDEOGRAPH + {0x9A83, 0x6B90}, //4817 #CJK UNIFIED IDEOGRAPH + {0x9A84, 0x6B91}, //4818 #CJK UNIFIED IDEOGRAPH + {0x9A85, 0x6B94}, //4819 #CJK UNIFIED IDEOGRAPH + {0x9A86, 0x6B95}, //4820 #CJK UNIFIED IDEOGRAPH + {0x9A87, 0x6B97}, //4821 #CJK UNIFIED IDEOGRAPH + {0x9A88, 0x6B98}, //4822 #CJK UNIFIED IDEOGRAPH + {0x9A89, 0x6B99}, //4823 #CJK UNIFIED IDEOGRAPH + {0x9A8A, 0x6B9C}, //4824 #CJK UNIFIED IDEOGRAPH + {0x9A8B, 0x6B9D}, //4825 #CJK UNIFIED IDEOGRAPH + {0x9A8C, 0x6B9E}, //4826 #CJK UNIFIED IDEOGRAPH + {0x9A8D, 0x6B9F}, //4827 #CJK UNIFIED IDEOGRAPH + {0x9A8E, 0x6BA0}, //4828 #CJK UNIFIED IDEOGRAPH + {0x9A8F, 0x6BA2}, //4829 #CJK UNIFIED IDEOGRAPH + {0x9A90, 0x6BA3}, //4830 #CJK UNIFIED IDEOGRAPH + {0x9A91, 0x6BA4}, //4831 #CJK UNIFIED IDEOGRAPH + {0x9A92, 0x6BA5}, //4832 #CJK UNIFIED IDEOGRAPH + {0x9A93, 0x6BA6}, //4833 #CJK UNIFIED IDEOGRAPH + {0x9A94, 0x6BA7}, //4834 #CJK UNIFIED IDEOGRAPH + {0x9A95, 0x6BA8}, //4835 #CJK UNIFIED IDEOGRAPH + {0x9A96, 0x6BA9}, //4836 #CJK UNIFIED IDEOGRAPH + {0x9A97, 0x6BAB}, //4837 #CJK UNIFIED IDEOGRAPH + {0x9A98, 0x6BAC}, //4838 #CJK UNIFIED IDEOGRAPH + {0x9A99, 0x6BAD}, //4839 #CJK UNIFIED IDEOGRAPH + {0x9A9A, 0x6BAE}, //4840 #CJK UNIFIED IDEOGRAPH + {0x9A9B, 0x6BAF}, //4841 #CJK UNIFIED IDEOGRAPH + {0x9A9C, 0x6BB0}, //4842 #CJK UNIFIED IDEOGRAPH + {0x9A9D, 0x6BB1}, //4843 #CJK UNIFIED IDEOGRAPH + {0x9A9E, 0x6BB2}, //4844 #CJK UNIFIED IDEOGRAPH + {0x9A9F, 0x6BB6}, //4845 #CJK UNIFIED IDEOGRAPH + {0x9AA0, 0x6BB8}, //4846 #CJK UNIFIED IDEOGRAPH + {0x9AA1, 0x6BB9}, //4847 #CJK UNIFIED IDEOGRAPH + {0x9AA2, 0x6BBA}, //4848 #CJK UNIFIED IDEOGRAPH + {0x9AA3, 0x6BBB}, //4849 #CJK UNIFIED IDEOGRAPH + {0x9AA4, 0x6BBC}, //4850 #CJK UNIFIED IDEOGRAPH + {0x9AA5, 0x6BBD}, //4851 #CJK UNIFIED IDEOGRAPH + {0x9AA6, 0x6BBE}, //4852 #CJK UNIFIED IDEOGRAPH + {0x9AA7, 0x6BC0}, //4853 #CJK UNIFIED IDEOGRAPH + {0x9AA8, 0x6BC3}, //4854 #CJK UNIFIED IDEOGRAPH + {0x9AA9, 0x6BC4}, //4855 #CJK UNIFIED IDEOGRAPH + {0x9AAA, 0x6BC6}, //4856 #CJK UNIFIED IDEOGRAPH + {0x9AAB, 0x6BC7}, //4857 #CJK UNIFIED IDEOGRAPH + {0x9AAC, 0x6BC8}, //4858 #CJK UNIFIED IDEOGRAPH + {0x9AAD, 0x6BC9}, //4859 #CJK UNIFIED IDEOGRAPH + {0x9AAE, 0x6BCA}, //4860 #CJK UNIFIED IDEOGRAPH + {0x9AAF, 0x6BCC}, //4861 #CJK UNIFIED IDEOGRAPH + {0x9AB0, 0x6BCE}, //4862 #CJK UNIFIED IDEOGRAPH + {0x9AB1, 0x6BD0}, //4863 #CJK UNIFIED IDEOGRAPH + {0x9AB2, 0x6BD1}, //4864 #CJK UNIFIED IDEOGRAPH + {0x9AB3, 0x6BD8}, //4865 #CJK UNIFIED IDEOGRAPH + {0x9AB4, 0x6BDA}, //4866 #CJK UNIFIED IDEOGRAPH + {0x9AB5, 0x6BDC}, //4867 #CJK UNIFIED IDEOGRAPH + {0x9AB6, 0x6BDD}, //4868 #CJK UNIFIED IDEOGRAPH + {0x9AB7, 0x6BDE}, //4869 #CJK UNIFIED IDEOGRAPH + {0x9AB8, 0x6BDF}, //4870 #CJK UNIFIED IDEOGRAPH + {0x9AB9, 0x6BE0}, //4871 #CJK UNIFIED IDEOGRAPH + {0x9ABA, 0x6BE2}, //4872 #CJK UNIFIED IDEOGRAPH + {0x9ABB, 0x6BE3}, //4873 #CJK UNIFIED IDEOGRAPH + {0x9ABC, 0x6BE4}, //4874 #CJK UNIFIED IDEOGRAPH + {0x9ABD, 0x6BE5}, //4875 #CJK UNIFIED IDEOGRAPH + {0x9ABE, 0x6BE6}, //4876 #CJK UNIFIED IDEOGRAPH + {0x9ABF, 0x6BE7}, //4877 #CJK UNIFIED IDEOGRAPH + {0x9AC0, 0x6BE8}, //4878 #CJK UNIFIED IDEOGRAPH + {0x9AC1, 0x6BE9}, //4879 #CJK UNIFIED IDEOGRAPH + {0x9AC2, 0x6BEC}, //4880 #CJK UNIFIED IDEOGRAPH + {0x9AC3, 0x6BED}, //4881 #CJK UNIFIED IDEOGRAPH + {0x9AC4, 0x6BEE}, //4882 #CJK UNIFIED IDEOGRAPH + {0x9AC5, 0x6BF0}, //4883 #CJK UNIFIED IDEOGRAPH + {0x9AC6, 0x6BF1}, //4884 #CJK UNIFIED IDEOGRAPH + {0x9AC7, 0x6BF2}, //4885 #CJK UNIFIED IDEOGRAPH + {0x9AC8, 0x6BF4}, //4886 #CJK UNIFIED IDEOGRAPH + {0x9AC9, 0x6BF6}, //4887 #CJK UNIFIED IDEOGRAPH + {0x9ACA, 0x6BF7}, //4888 #CJK UNIFIED IDEOGRAPH + {0x9ACB, 0x6BF8}, //4889 #CJK UNIFIED IDEOGRAPH + {0x9ACC, 0x6BFA}, //4890 #CJK UNIFIED IDEOGRAPH + {0x9ACD, 0x6BFB}, //4891 #CJK UNIFIED IDEOGRAPH + {0x9ACE, 0x6BFC}, //4892 #CJK UNIFIED IDEOGRAPH + {0x9ACF, 0x6BFE}, //4893 #CJK UNIFIED IDEOGRAPH + {0x9AD0, 0x6BFF}, //4894 #CJK UNIFIED IDEOGRAPH + {0x9AD1, 0x6C00}, //4895 #CJK UNIFIED IDEOGRAPH + {0x9AD2, 0x6C01}, //4896 #CJK UNIFIED IDEOGRAPH + {0x9AD3, 0x6C02}, //4897 #CJK UNIFIED IDEOGRAPH + {0x9AD4, 0x6C03}, //4898 #CJK UNIFIED IDEOGRAPH + {0x9AD5, 0x6C04}, //4899 #CJK UNIFIED IDEOGRAPH + {0x9AD6, 0x6C08}, //4900 #CJK UNIFIED IDEOGRAPH + {0x9AD7, 0x6C09}, //4901 #CJK UNIFIED IDEOGRAPH + {0x9AD8, 0x6C0A}, //4902 #CJK UNIFIED IDEOGRAPH + {0x9AD9, 0x6C0B}, //4903 #CJK UNIFIED IDEOGRAPH + {0x9ADA, 0x6C0C}, //4904 #CJK UNIFIED IDEOGRAPH + {0x9ADB, 0x6C0E}, //4905 #CJK UNIFIED IDEOGRAPH + {0x9ADC, 0x6C12}, //4906 #CJK UNIFIED IDEOGRAPH + {0x9ADD, 0x6C17}, //4907 #CJK UNIFIED IDEOGRAPH + {0x9ADE, 0x6C1C}, //4908 #CJK UNIFIED IDEOGRAPH + {0x9ADF, 0x6C1D}, //4909 #CJK UNIFIED IDEOGRAPH + {0x9AE0, 0x6C1E}, //4910 #CJK UNIFIED IDEOGRAPH + {0x9AE1, 0x6C20}, //4911 #CJK UNIFIED IDEOGRAPH + {0x9AE2, 0x6C23}, //4912 #CJK UNIFIED IDEOGRAPH + {0x9AE3, 0x6C25}, //4913 #CJK UNIFIED IDEOGRAPH + {0x9AE4, 0x6C2B}, //4914 #CJK UNIFIED IDEOGRAPH + {0x9AE5, 0x6C2C}, //4915 #CJK UNIFIED IDEOGRAPH + {0x9AE6, 0x6C2D}, //4916 #CJK UNIFIED IDEOGRAPH + {0x9AE7, 0x6C31}, //4917 #CJK UNIFIED IDEOGRAPH + {0x9AE8, 0x6C33}, //4918 #CJK UNIFIED IDEOGRAPH + {0x9AE9, 0x6C36}, //4919 #CJK UNIFIED IDEOGRAPH + {0x9AEA, 0x6C37}, //4920 #CJK UNIFIED IDEOGRAPH + {0x9AEB, 0x6C39}, //4921 #CJK UNIFIED IDEOGRAPH + {0x9AEC, 0x6C3A}, //4922 #CJK UNIFIED IDEOGRAPH + {0x9AED, 0x6C3B}, //4923 #CJK UNIFIED IDEOGRAPH + {0x9AEE, 0x6C3C}, //4924 #CJK UNIFIED IDEOGRAPH + {0x9AEF, 0x6C3E}, //4925 #CJK UNIFIED IDEOGRAPH + {0x9AF0, 0x6C3F}, //4926 #CJK UNIFIED IDEOGRAPH + {0x9AF1, 0x6C43}, //4927 #CJK UNIFIED IDEOGRAPH + {0x9AF2, 0x6C44}, //4928 #CJK UNIFIED IDEOGRAPH + {0x9AF3, 0x6C45}, //4929 #CJK UNIFIED IDEOGRAPH + {0x9AF4, 0x6C48}, //4930 #CJK UNIFIED IDEOGRAPH + {0x9AF5, 0x6C4B}, //4931 #CJK UNIFIED IDEOGRAPH + {0x9AF6, 0x6C4C}, //4932 #CJK UNIFIED IDEOGRAPH + {0x9AF7, 0x6C4D}, //4933 #CJK UNIFIED IDEOGRAPH + {0x9AF8, 0x6C4E}, //4934 #CJK UNIFIED IDEOGRAPH + {0x9AF9, 0x6C4F}, //4935 #CJK UNIFIED IDEOGRAPH + {0x9AFA, 0x6C51}, //4936 #CJK UNIFIED IDEOGRAPH + {0x9AFB, 0x6C52}, //4937 #CJK UNIFIED IDEOGRAPH + {0x9AFC, 0x6C53}, //4938 #CJK UNIFIED IDEOGRAPH + {0x9AFD, 0x6C56}, //4939 #CJK UNIFIED IDEOGRAPH + {0x9AFE, 0x6C58}, //4940 #CJK UNIFIED IDEOGRAPH + {0x9B40, 0x6C59}, //4941 #CJK UNIFIED IDEOGRAPH + {0x9B41, 0x6C5A}, //4942 #CJK UNIFIED IDEOGRAPH + {0x9B42, 0x6C62}, //4943 #CJK UNIFIED IDEOGRAPH + {0x9B43, 0x6C63}, //4944 #CJK UNIFIED IDEOGRAPH + {0x9B44, 0x6C65}, //4945 #CJK UNIFIED IDEOGRAPH + {0x9B45, 0x6C66}, //4946 #CJK UNIFIED IDEOGRAPH + {0x9B46, 0x6C67}, //4947 #CJK UNIFIED IDEOGRAPH + {0x9B47, 0x6C6B}, //4948 #CJK UNIFIED IDEOGRAPH + {0x9B48, 0x6C6C}, //4949 #CJK UNIFIED IDEOGRAPH + {0x9B49, 0x6C6D}, //4950 #CJK UNIFIED IDEOGRAPH + {0x9B4A, 0x6C6E}, //4951 #CJK UNIFIED IDEOGRAPH + {0x9B4B, 0x6C6F}, //4952 #CJK UNIFIED IDEOGRAPH + {0x9B4C, 0x6C71}, //4953 #CJK UNIFIED IDEOGRAPH + {0x9B4D, 0x6C73}, //4954 #CJK UNIFIED IDEOGRAPH + {0x9B4E, 0x6C75}, //4955 #CJK UNIFIED IDEOGRAPH + {0x9B4F, 0x6C77}, //4956 #CJK UNIFIED IDEOGRAPH + {0x9B50, 0x6C78}, //4957 #CJK UNIFIED IDEOGRAPH + {0x9B51, 0x6C7A}, //4958 #CJK UNIFIED IDEOGRAPH + {0x9B52, 0x6C7B}, //4959 #CJK UNIFIED IDEOGRAPH + {0x9B53, 0x6C7C}, //4960 #CJK UNIFIED IDEOGRAPH + {0x9B54, 0x6C7F}, //4961 #CJK UNIFIED IDEOGRAPH + {0x9B55, 0x6C80}, //4962 #CJK UNIFIED IDEOGRAPH + {0x9B56, 0x6C84}, //4963 #CJK UNIFIED IDEOGRAPH + {0x9B57, 0x6C87}, //4964 #CJK UNIFIED IDEOGRAPH + {0x9B58, 0x6C8A}, //4965 #CJK UNIFIED IDEOGRAPH + {0x9B59, 0x6C8B}, //4966 #CJK UNIFIED IDEOGRAPH + {0x9B5A, 0x6C8D}, //4967 #CJK UNIFIED IDEOGRAPH + {0x9B5B, 0x6C8E}, //4968 #CJK UNIFIED IDEOGRAPH + {0x9B5C, 0x6C91}, //4969 #CJK UNIFIED IDEOGRAPH + {0x9B5D, 0x6C92}, //4970 #CJK UNIFIED IDEOGRAPH + {0x9B5E, 0x6C95}, //4971 #CJK UNIFIED IDEOGRAPH + {0x9B5F, 0x6C96}, //4972 #CJK UNIFIED IDEOGRAPH + {0x9B60, 0x6C97}, //4973 #CJK UNIFIED IDEOGRAPH + {0x9B61, 0x6C98}, //4974 #CJK UNIFIED IDEOGRAPH + {0x9B62, 0x6C9A}, //4975 #CJK UNIFIED IDEOGRAPH + {0x9B63, 0x6C9C}, //4976 #CJK UNIFIED IDEOGRAPH + {0x9B64, 0x6C9D}, //4977 #CJK UNIFIED IDEOGRAPH + {0x9B65, 0x6C9E}, //4978 #CJK UNIFIED IDEOGRAPH + {0x9B66, 0x6CA0}, //4979 #CJK UNIFIED IDEOGRAPH + {0x9B67, 0x6CA2}, //4980 #CJK UNIFIED IDEOGRAPH + {0x9B68, 0x6CA8}, //4981 #CJK UNIFIED IDEOGRAPH + {0x9B69, 0x6CAC}, //4982 #CJK UNIFIED IDEOGRAPH + {0x9B6A, 0x6CAF}, //4983 #CJK UNIFIED IDEOGRAPH + {0x9B6B, 0x6CB0}, //4984 #CJK UNIFIED IDEOGRAPH + {0x9B6C, 0x6CB4}, //4985 #CJK UNIFIED IDEOGRAPH + {0x9B6D, 0x6CB5}, //4986 #CJK UNIFIED IDEOGRAPH + {0x9B6E, 0x6CB6}, //4987 #CJK UNIFIED IDEOGRAPH + {0x9B6F, 0x6CB7}, //4988 #CJK UNIFIED IDEOGRAPH + {0x9B70, 0x6CBA}, //4989 #CJK UNIFIED IDEOGRAPH + {0x9B71, 0x6CC0}, //4990 #CJK UNIFIED IDEOGRAPH + {0x9B72, 0x6CC1}, //4991 #CJK UNIFIED IDEOGRAPH + {0x9B73, 0x6CC2}, //4992 #CJK UNIFIED IDEOGRAPH + {0x9B74, 0x6CC3}, //4993 #CJK UNIFIED IDEOGRAPH + {0x9B75, 0x6CC6}, //4994 #CJK UNIFIED IDEOGRAPH + {0x9B76, 0x6CC7}, //4995 #CJK UNIFIED IDEOGRAPH + {0x9B77, 0x6CC8}, //4996 #CJK UNIFIED IDEOGRAPH + {0x9B78, 0x6CCB}, //4997 #CJK UNIFIED IDEOGRAPH + {0x9B79, 0x6CCD}, //4998 #CJK UNIFIED IDEOGRAPH + {0x9B7A, 0x6CCE}, //4999 #CJK UNIFIED IDEOGRAPH + {0x9B7B, 0x6CCF}, //5000 #CJK UNIFIED IDEOGRAPH + {0x9B7C, 0x6CD1}, //5001 #CJK UNIFIED IDEOGRAPH + {0x9B7D, 0x6CD2}, //5002 #CJK UNIFIED IDEOGRAPH + {0x9B7E, 0x6CD8}, //5003 #CJK UNIFIED IDEOGRAPH + {0x9B80, 0x6CD9}, //5004 #CJK UNIFIED IDEOGRAPH + {0x9B81, 0x6CDA}, //5005 #CJK UNIFIED IDEOGRAPH + {0x9B82, 0x6CDC}, //5006 #CJK UNIFIED IDEOGRAPH + {0x9B83, 0x6CDD}, //5007 #CJK UNIFIED IDEOGRAPH + {0x9B84, 0x6CDF}, //5008 #CJK UNIFIED IDEOGRAPH + {0x9B85, 0x6CE4}, //5009 #CJK UNIFIED IDEOGRAPH + {0x9B86, 0x6CE6}, //5010 #CJK UNIFIED IDEOGRAPH + {0x9B87, 0x6CE7}, //5011 #CJK UNIFIED IDEOGRAPH + {0x9B88, 0x6CE9}, //5012 #CJK UNIFIED IDEOGRAPH + {0x9B89, 0x6CEC}, //5013 #CJK UNIFIED IDEOGRAPH + {0x9B8A, 0x6CED}, //5014 #CJK UNIFIED IDEOGRAPH + {0x9B8B, 0x6CF2}, //5015 #CJK UNIFIED IDEOGRAPH + {0x9B8C, 0x6CF4}, //5016 #CJK UNIFIED IDEOGRAPH + {0x9B8D, 0x6CF9}, //5017 #CJK UNIFIED IDEOGRAPH + {0x9B8E, 0x6CFF}, //5018 #CJK UNIFIED IDEOGRAPH + {0x9B8F, 0x6D00}, //5019 #CJK UNIFIED IDEOGRAPH + {0x9B90, 0x6D02}, //5020 #CJK UNIFIED IDEOGRAPH + {0x9B91, 0x6D03}, //5021 #CJK UNIFIED IDEOGRAPH + {0x9B92, 0x6D05}, //5022 #CJK UNIFIED IDEOGRAPH + {0x9B93, 0x6D06}, //5023 #CJK UNIFIED IDEOGRAPH + {0x9B94, 0x6D08}, //5024 #CJK UNIFIED IDEOGRAPH + {0x9B95, 0x6D09}, //5025 #CJK UNIFIED IDEOGRAPH + {0x9B96, 0x6D0A}, //5026 #CJK UNIFIED IDEOGRAPH + {0x9B97, 0x6D0D}, //5027 #CJK UNIFIED IDEOGRAPH + {0x9B98, 0x6D0F}, //5028 #CJK UNIFIED IDEOGRAPH + {0x9B99, 0x6D10}, //5029 #CJK UNIFIED IDEOGRAPH + {0x9B9A, 0x6D11}, //5030 #CJK UNIFIED IDEOGRAPH + {0x9B9B, 0x6D13}, //5031 #CJK UNIFIED IDEOGRAPH + {0x9B9C, 0x6D14}, //5032 #CJK UNIFIED IDEOGRAPH + {0x9B9D, 0x6D15}, //5033 #CJK UNIFIED IDEOGRAPH + {0x9B9E, 0x6D16}, //5034 #CJK UNIFIED IDEOGRAPH + {0x9B9F, 0x6D18}, //5035 #CJK UNIFIED IDEOGRAPH + {0x9BA0, 0x6D1C}, //5036 #CJK UNIFIED IDEOGRAPH + {0x9BA1, 0x6D1D}, //5037 #CJK UNIFIED IDEOGRAPH + {0x9BA2, 0x6D1F}, //5038 #CJK UNIFIED IDEOGRAPH + {0x9BA3, 0x6D20}, //5039 #CJK UNIFIED IDEOGRAPH + {0x9BA4, 0x6D21}, //5040 #CJK UNIFIED IDEOGRAPH + {0x9BA5, 0x6D22}, //5041 #CJK UNIFIED IDEOGRAPH + {0x9BA6, 0x6D23}, //5042 #CJK UNIFIED IDEOGRAPH + {0x9BA7, 0x6D24}, //5043 #CJK UNIFIED IDEOGRAPH + {0x9BA8, 0x6D26}, //5044 #CJK UNIFIED IDEOGRAPH + {0x9BA9, 0x6D28}, //5045 #CJK UNIFIED IDEOGRAPH + {0x9BAA, 0x6D29}, //5046 #CJK UNIFIED IDEOGRAPH + {0x9BAB, 0x6D2C}, //5047 #CJK UNIFIED IDEOGRAPH + {0x9BAC, 0x6D2D}, //5048 #CJK UNIFIED IDEOGRAPH + {0x9BAD, 0x6D2F}, //5049 #CJK UNIFIED IDEOGRAPH + {0x9BAE, 0x6D30}, //5050 #CJK UNIFIED IDEOGRAPH + {0x9BAF, 0x6D34}, //5051 #CJK UNIFIED IDEOGRAPH + {0x9BB0, 0x6D36}, //5052 #CJK UNIFIED IDEOGRAPH + {0x9BB1, 0x6D37}, //5053 #CJK UNIFIED IDEOGRAPH + {0x9BB2, 0x6D38}, //5054 #CJK UNIFIED IDEOGRAPH + {0x9BB3, 0x6D3A}, //5055 #CJK UNIFIED IDEOGRAPH + {0x9BB4, 0x6D3F}, //5056 #CJK UNIFIED IDEOGRAPH + {0x9BB5, 0x6D40}, //5057 #CJK UNIFIED IDEOGRAPH + {0x9BB6, 0x6D42}, //5058 #CJK UNIFIED IDEOGRAPH + {0x9BB7, 0x6D44}, //5059 #CJK UNIFIED IDEOGRAPH + {0x9BB8, 0x6D49}, //5060 #CJK UNIFIED IDEOGRAPH + {0x9BB9, 0x6D4C}, //5061 #CJK UNIFIED IDEOGRAPH + {0x9BBA, 0x6D50}, //5062 #CJK UNIFIED IDEOGRAPH + {0x9BBB, 0x6D55}, //5063 #CJK UNIFIED IDEOGRAPH + {0x9BBC, 0x6D56}, //5064 #CJK UNIFIED IDEOGRAPH + {0x9BBD, 0x6D57}, //5065 #CJK UNIFIED IDEOGRAPH + {0x9BBE, 0x6D58}, //5066 #CJK UNIFIED IDEOGRAPH + {0x9BBF, 0x6D5B}, //5067 #CJK UNIFIED IDEOGRAPH + {0x9BC0, 0x6D5D}, //5068 #CJK UNIFIED IDEOGRAPH + {0x9BC1, 0x6D5F}, //5069 #CJK UNIFIED IDEOGRAPH + {0x9BC2, 0x6D61}, //5070 #CJK UNIFIED IDEOGRAPH + {0x9BC3, 0x6D62}, //5071 #CJK UNIFIED IDEOGRAPH + {0x9BC4, 0x6D64}, //5072 #CJK UNIFIED IDEOGRAPH + {0x9BC5, 0x6D65}, //5073 #CJK UNIFIED IDEOGRAPH + {0x9BC6, 0x6D67}, //5074 #CJK UNIFIED IDEOGRAPH + {0x9BC7, 0x6D68}, //5075 #CJK UNIFIED IDEOGRAPH + {0x9BC8, 0x6D6B}, //5076 #CJK UNIFIED IDEOGRAPH + {0x9BC9, 0x6D6C}, //5077 #CJK UNIFIED IDEOGRAPH + {0x9BCA, 0x6D6D}, //5078 #CJK UNIFIED IDEOGRAPH + {0x9BCB, 0x6D70}, //5079 #CJK UNIFIED IDEOGRAPH + {0x9BCC, 0x6D71}, //5080 #CJK UNIFIED IDEOGRAPH + {0x9BCD, 0x6D72}, //5081 #CJK UNIFIED IDEOGRAPH + {0x9BCE, 0x6D73}, //5082 #CJK UNIFIED IDEOGRAPH + {0x9BCF, 0x6D75}, //5083 #CJK UNIFIED IDEOGRAPH + {0x9BD0, 0x6D76}, //5084 #CJK UNIFIED IDEOGRAPH + {0x9BD1, 0x6D79}, //5085 #CJK UNIFIED IDEOGRAPH + {0x9BD2, 0x6D7A}, //5086 #CJK UNIFIED IDEOGRAPH + {0x9BD3, 0x6D7B}, //5087 #CJK UNIFIED IDEOGRAPH + {0x9BD4, 0x6D7D}, //5088 #CJK UNIFIED IDEOGRAPH + {0x9BD5, 0x6D7E}, //5089 #CJK UNIFIED IDEOGRAPH + {0x9BD6, 0x6D7F}, //5090 #CJK UNIFIED IDEOGRAPH + {0x9BD7, 0x6D80}, //5091 #CJK UNIFIED IDEOGRAPH + {0x9BD8, 0x6D81}, //5092 #CJK UNIFIED IDEOGRAPH + {0x9BD9, 0x6D83}, //5093 #CJK UNIFIED IDEOGRAPH + {0x9BDA, 0x6D84}, //5094 #CJK UNIFIED IDEOGRAPH + {0x9BDB, 0x6D86}, //5095 #CJK UNIFIED IDEOGRAPH + {0x9BDC, 0x6D87}, //5096 #CJK UNIFIED IDEOGRAPH + {0x9BDD, 0x6D8A}, //5097 #CJK UNIFIED IDEOGRAPH + {0x9BDE, 0x6D8B}, //5098 #CJK UNIFIED IDEOGRAPH + {0x9BDF, 0x6D8D}, //5099 #CJK UNIFIED IDEOGRAPH + {0x9BE0, 0x6D8F}, //5100 #CJK UNIFIED IDEOGRAPH + {0x9BE1, 0x6D90}, //5101 #CJK UNIFIED IDEOGRAPH + {0x9BE2, 0x6D92}, //5102 #CJK UNIFIED IDEOGRAPH + {0x9BE3, 0x6D96}, //5103 #CJK UNIFIED IDEOGRAPH + {0x9BE4, 0x6D97}, //5104 #CJK UNIFIED IDEOGRAPH + {0x9BE5, 0x6D98}, //5105 #CJK UNIFIED IDEOGRAPH + {0x9BE6, 0x6D99}, //5106 #CJK UNIFIED IDEOGRAPH + {0x9BE7, 0x6D9A}, //5107 #CJK UNIFIED IDEOGRAPH + {0x9BE8, 0x6D9C}, //5108 #CJK UNIFIED IDEOGRAPH + {0x9BE9, 0x6DA2}, //5109 #CJK UNIFIED IDEOGRAPH + {0x9BEA, 0x6DA5}, //5110 #CJK UNIFIED IDEOGRAPH + {0x9BEB, 0x6DAC}, //5111 #CJK UNIFIED IDEOGRAPH + {0x9BEC, 0x6DAD}, //5112 #CJK UNIFIED IDEOGRAPH + {0x9BED, 0x6DB0}, //5113 #CJK UNIFIED IDEOGRAPH + {0x9BEE, 0x6DB1}, //5114 #CJK UNIFIED IDEOGRAPH + {0x9BEF, 0x6DB3}, //5115 #CJK UNIFIED IDEOGRAPH + {0x9BF0, 0x6DB4}, //5116 #CJK UNIFIED IDEOGRAPH + {0x9BF1, 0x6DB6}, //5117 #CJK UNIFIED IDEOGRAPH + {0x9BF2, 0x6DB7}, //5118 #CJK UNIFIED IDEOGRAPH + {0x9BF3, 0x6DB9}, //5119 #CJK UNIFIED IDEOGRAPH + {0x9BF4, 0x6DBA}, //5120 #CJK UNIFIED IDEOGRAPH + {0x9BF5, 0x6DBB}, //5121 #CJK UNIFIED IDEOGRAPH + {0x9BF6, 0x6DBC}, //5122 #CJK UNIFIED IDEOGRAPH + {0x9BF7, 0x6DBD}, //5123 #CJK UNIFIED IDEOGRAPH + {0x9BF8, 0x6DBE}, //5124 #CJK UNIFIED IDEOGRAPH + {0x9BF9, 0x6DC1}, //5125 #CJK UNIFIED IDEOGRAPH + {0x9BFA, 0x6DC2}, //5126 #CJK UNIFIED IDEOGRAPH + {0x9BFB, 0x6DC3}, //5127 #CJK UNIFIED IDEOGRAPH + {0x9BFC, 0x6DC8}, //5128 #CJK UNIFIED IDEOGRAPH + {0x9BFD, 0x6DC9}, //5129 #CJK UNIFIED IDEOGRAPH + {0x9BFE, 0x6DCA}, //5130 #CJK UNIFIED IDEOGRAPH + {0x9C40, 0x6DCD}, //5131 #CJK UNIFIED IDEOGRAPH + {0x9C41, 0x6DCE}, //5132 #CJK UNIFIED IDEOGRAPH + {0x9C42, 0x6DCF}, //5133 #CJK UNIFIED IDEOGRAPH + {0x9C43, 0x6DD0}, //5134 #CJK UNIFIED IDEOGRAPH + {0x9C44, 0x6DD2}, //5135 #CJK UNIFIED IDEOGRAPH + {0x9C45, 0x6DD3}, //5136 #CJK UNIFIED IDEOGRAPH + {0x9C46, 0x6DD4}, //5137 #CJK UNIFIED IDEOGRAPH + {0x9C47, 0x6DD5}, //5138 #CJK UNIFIED IDEOGRAPH + {0x9C48, 0x6DD7}, //5139 #CJK UNIFIED IDEOGRAPH + {0x9C49, 0x6DDA}, //5140 #CJK UNIFIED IDEOGRAPH + {0x9C4A, 0x6DDB}, //5141 #CJK UNIFIED IDEOGRAPH + {0x9C4B, 0x6DDC}, //5142 #CJK UNIFIED IDEOGRAPH + {0x9C4C, 0x6DDF}, //5143 #CJK UNIFIED IDEOGRAPH + {0x9C4D, 0x6DE2}, //5144 #CJK UNIFIED IDEOGRAPH + {0x9C4E, 0x6DE3}, //5145 #CJK UNIFIED IDEOGRAPH + {0x9C4F, 0x6DE5}, //5146 #CJK UNIFIED IDEOGRAPH + {0x9C50, 0x6DE7}, //5147 #CJK UNIFIED IDEOGRAPH + {0x9C51, 0x6DE8}, //5148 #CJK UNIFIED IDEOGRAPH + {0x9C52, 0x6DE9}, //5149 #CJK UNIFIED IDEOGRAPH + {0x9C53, 0x6DEA}, //5150 #CJK UNIFIED IDEOGRAPH + {0x9C54, 0x6DED}, //5151 #CJK UNIFIED IDEOGRAPH + {0x9C55, 0x6DEF}, //5152 #CJK UNIFIED IDEOGRAPH + {0x9C56, 0x6DF0}, //5153 #CJK UNIFIED IDEOGRAPH + {0x9C57, 0x6DF2}, //5154 #CJK UNIFIED IDEOGRAPH + {0x9C58, 0x6DF4}, //5155 #CJK UNIFIED IDEOGRAPH + {0x9C59, 0x6DF5}, //5156 #CJK UNIFIED IDEOGRAPH + {0x9C5A, 0x6DF6}, //5157 #CJK UNIFIED IDEOGRAPH + {0x9C5B, 0x6DF8}, //5158 #CJK UNIFIED IDEOGRAPH + {0x9C5C, 0x6DFA}, //5159 #CJK UNIFIED IDEOGRAPH + {0x9C5D, 0x6DFD}, //5160 #CJK UNIFIED IDEOGRAPH + {0x9C5E, 0x6DFE}, //5161 #CJK UNIFIED IDEOGRAPH + {0x9C5F, 0x6DFF}, //5162 #CJK UNIFIED IDEOGRAPH + {0x9C60, 0x6E00}, //5163 #CJK UNIFIED IDEOGRAPH + {0x9C61, 0x6E01}, //5164 #CJK UNIFIED IDEOGRAPH + {0x9C62, 0x6E02}, //5165 #CJK UNIFIED IDEOGRAPH + {0x9C63, 0x6E03}, //5166 #CJK UNIFIED IDEOGRAPH + {0x9C64, 0x6E04}, //5167 #CJK UNIFIED IDEOGRAPH + {0x9C65, 0x6E06}, //5168 #CJK UNIFIED IDEOGRAPH + {0x9C66, 0x6E07}, //5169 #CJK UNIFIED IDEOGRAPH + {0x9C67, 0x6E08}, //5170 #CJK UNIFIED IDEOGRAPH + {0x9C68, 0x6E09}, //5171 #CJK UNIFIED IDEOGRAPH + {0x9C69, 0x6E0B}, //5172 #CJK UNIFIED IDEOGRAPH + {0x9C6A, 0x6E0F}, //5173 #CJK UNIFIED IDEOGRAPH + {0x9C6B, 0x6E12}, //5174 #CJK UNIFIED IDEOGRAPH + {0x9C6C, 0x6E13}, //5175 #CJK UNIFIED IDEOGRAPH + {0x9C6D, 0x6E15}, //5176 #CJK UNIFIED IDEOGRAPH + {0x9C6E, 0x6E18}, //5177 #CJK UNIFIED IDEOGRAPH + {0x9C6F, 0x6E19}, //5178 #CJK UNIFIED IDEOGRAPH + {0x9C70, 0x6E1B}, //5179 #CJK UNIFIED IDEOGRAPH + {0x9C71, 0x6E1C}, //5180 #CJK UNIFIED IDEOGRAPH + {0x9C72, 0x6E1E}, //5181 #CJK UNIFIED IDEOGRAPH + {0x9C73, 0x6E1F}, //5182 #CJK UNIFIED IDEOGRAPH + {0x9C74, 0x6E22}, //5183 #CJK UNIFIED IDEOGRAPH + {0x9C75, 0x6E26}, //5184 #CJK UNIFIED IDEOGRAPH + {0x9C76, 0x6E27}, //5185 #CJK UNIFIED IDEOGRAPH + {0x9C77, 0x6E28}, //5186 #CJK UNIFIED IDEOGRAPH + {0x9C78, 0x6E2A}, //5187 #CJK UNIFIED IDEOGRAPH + {0x9C79, 0x6E2C}, //5188 #CJK UNIFIED IDEOGRAPH + {0x9C7A, 0x6E2E}, //5189 #CJK UNIFIED IDEOGRAPH + {0x9C7B, 0x6E30}, //5190 #CJK UNIFIED IDEOGRAPH + {0x9C7C, 0x6E31}, //5191 #CJK UNIFIED IDEOGRAPH + {0x9C7D, 0x6E33}, //5192 #CJK UNIFIED IDEOGRAPH + {0x9C7E, 0x6E35}, //5193 #CJK UNIFIED IDEOGRAPH + {0x9C80, 0x6E36}, //5194 #CJK UNIFIED IDEOGRAPH + {0x9C81, 0x6E37}, //5195 #CJK UNIFIED IDEOGRAPH + {0x9C82, 0x6E39}, //5196 #CJK UNIFIED IDEOGRAPH + {0x9C83, 0x6E3B}, //5197 #CJK UNIFIED IDEOGRAPH + {0x9C84, 0x6E3C}, //5198 #CJK UNIFIED IDEOGRAPH + {0x9C85, 0x6E3D}, //5199 #CJK UNIFIED IDEOGRAPH + {0x9C86, 0x6E3E}, //5200 #CJK UNIFIED IDEOGRAPH + {0x9C87, 0x6E3F}, //5201 #CJK UNIFIED IDEOGRAPH + {0x9C88, 0x6E40}, //5202 #CJK UNIFIED IDEOGRAPH + {0x9C89, 0x6E41}, //5203 #CJK UNIFIED IDEOGRAPH + {0x9C8A, 0x6E42}, //5204 #CJK UNIFIED IDEOGRAPH + {0x9C8B, 0x6E45}, //5205 #CJK UNIFIED IDEOGRAPH + {0x9C8C, 0x6E46}, //5206 #CJK UNIFIED IDEOGRAPH + {0x9C8D, 0x6E47}, //5207 #CJK UNIFIED IDEOGRAPH + {0x9C8E, 0x6E48}, //5208 #CJK UNIFIED IDEOGRAPH + {0x9C8F, 0x6E49}, //5209 #CJK UNIFIED IDEOGRAPH + {0x9C90, 0x6E4A}, //5210 #CJK UNIFIED IDEOGRAPH + {0x9C91, 0x6E4B}, //5211 #CJK UNIFIED IDEOGRAPH + {0x9C92, 0x6E4C}, //5212 #CJK UNIFIED IDEOGRAPH + {0x9C93, 0x6E4F}, //5213 #CJK UNIFIED IDEOGRAPH + {0x9C94, 0x6E50}, //5214 #CJK UNIFIED IDEOGRAPH + {0x9C95, 0x6E51}, //5215 #CJK UNIFIED IDEOGRAPH + {0x9C96, 0x6E52}, //5216 #CJK UNIFIED IDEOGRAPH + {0x9C97, 0x6E55}, //5217 #CJK UNIFIED IDEOGRAPH + {0x9C98, 0x6E57}, //5218 #CJK UNIFIED IDEOGRAPH + {0x9C99, 0x6E59}, //5219 #CJK UNIFIED IDEOGRAPH + {0x9C9A, 0x6E5A}, //5220 #CJK UNIFIED IDEOGRAPH + {0x9C9B, 0x6E5C}, //5221 #CJK UNIFIED IDEOGRAPH + {0x9C9C, 0x6E5D}, //5222 #CJK UNIFIED IDEOGRAPH + {0x9C9D, 0x6E5E}, //5223 #CJK UNIFIED IDEOGRAPH + {0x9C9E, 0x6E60}, //5224 #CJK UNIFIED IDEOGRAPH + {0x9C9F, 0x6E61}, //5225 #CJK UNIFIED IDEOGRAPH + {0x9CA0, 0x6E62}, //5226 #CJK UNIFIED IDEOGRAPH + {0x9CA1, 0x6E63}, //5227 #CJK UNIFIED IDEOGRAPH + {0x9CA2, 0x6E64}, //5228 #CJK UNIFIED IDEOGRAPH + {0x9CA3, 0x6E65}, //5229 #CJK UNIFIED IDEOGRAPH + {0x9CA4, 0x6E66}, //5230 #CJK UNIFIED IDEOGRAPH + {0x9CA5, 0x6E67}, //5231 #CJK UNIFIED IDEOGRAPH + {0x9CA6, 0x6E68}, //5232 #CJK UNIFIED IDEOGRAPH + {0x9CA7, 0x6E69}, //5233 #CJK UNIFIED IDEOGRAPH + {0x9CA8, 0x6E6A}, //5234 #CJK UNIFIED IDEOGRAPH + {0x9CA9, 0x6E6C}, //5235 #CJK UNIFIED IDEOGRAPH + {0x9CAA, 0x6E6D}, //5236 #CJK UNIFIED IDEOGRAPH + {0x9CAB, 0x6E6F}, //5237 #CJK UNIFIED IDEOGRAPH + {0x9CAC, 0x6E70}, //5238 #CJK UNIFIED IDEOGRAPH + {0x9CAD, 0x6E71}, //5239 #CJK UNIFIED IDEOGRAPH + {0x9CAE, 0x6E72}, //5240 #CJK UNIFIED IDEOGRAPH + {0x9CAF, 0x6E73}, //5241 #CJK UNIFIED IDEOGRAPH + {0x9CB0, 0x6E74}, //5242 #CJK UNIFIED IDEOGRAPH + {0x9CB1, 0x6E75}, //5243 #CJK UNIFIED IDEOGRAPH + {0x9CB2, 0x6E76}, //5244 #CJK UNIFIED IDEOGRAPH + {0x9CB3, 0x6E77}, //5245 #CJK UNIFIED IDEOGRAPH + {0x9CB4, 0x6E78}, //5246 #CJK UNIFIED IDEOGRAPH + {0x9CB5, 0x6E79}, //5247 #CJK UNIFIED IDEOGRAPH + {0x9CB6, 0x6E7A}, //5248 #CJK UNIFIED IDEOGRAPH + {0x9CB7, 0x6E7B}, //5249 #CJK UNIFIED IDEOGRAPH + {0x9CB8, 0x6E7C}, //5250 #CJK UNIFIED IDEOGRAPH + {0x9CB9, 0x6E7D}, //5251 #CJK UNIFIED IDEOGRAPH + {0x9CBA, 0x6E80}, //5252 #CJK UNIFIED IDEOGRAPH + {0x9CBB, 0x6E81}, //5253 #CJK UNIFIED IDEOGRAPH + {0x9CBC, 0x6E82}, //5254 #CJK UNIFIED IDEOGRAPH + {0x9CBD, 0x6E84}, //5255 #CJK UNIFIED IDEOGRAPH + {0x9CBE, 0x6E87}, //5256 #CJK UNIFIED IDEOGRAPH + {0x9CBF, 0x6E88}, //5257 #CJK UNIFIED IDEOGRAPH + {0x9CC0, 0x6E8A}, //5258 #CJK UNIFIED IDEOGRAPH + {0x9CC1, 0x6E8B}, //5259 #CJK UNIFIED IDEOGRAPH + {0x9CC2, 0x6E8C}, //5260 #CJK UNIFIED IDEOGRAPH + {0x9CC3, 0x6E8D}, //5261 #CJK UNIFIED IDEOGRAPH + {0x9CC4, 0x6E8E}, //5262 #CJK UNIFIED IDEOGRAPH + {0x9CC5, 0x6E91}, //5263 #CJK UNIFIED IDEOGRAPH + {0x9CC6, 0x6E92}, //5264 #CJK UNIFIED IDEOGRAPH + {0x9CC7, 0x6E93}, //5265 #CJK UNIFIED IDEOGRAPH + {0x9CC8, 0x6E94}, //5266 #CJK UNIFIED IDEOGRAPH + {0x9CC9, 0x6E95}, //5267 #CJK UNIFIED IDEOGRAPH + {0x9CCA, 0x6E96}, //5268 #CJK UNIFIED IDEOGRAPH + {0x9CCB, 0x6E97}, //5269 #CJK UNIFIED IDEOGRAPH + {0x9CCC, 0x6E99}, //5270 #CJK UNIFIED IDEOGRAPH + {0x9CCD, 0x6E9A}, //5271 #CJK UNIFIED IDEOGRAPH + {0x9CCE, 0x6E9B}, //5272 #CJK UNIFIED IDEOGRAPH + {0x9CCF, 0x6E9D}, //5273 #CJK UNIFIED IDEOGRAPH + {0x9CD0, 0x6E9E}, //5274 #CJK UNIFIED IDEOGRAPH + {0x9CD1, 0x6EA0}, //5275 #CJK UNIFIED IDEOGRAPH + {0x9CD2, 0x6EA1}, //5276 #CJK UNIFIED IDEOGRAPH + {0x9CD3, 0x6EA3}, //5277 #CJK UNIFIED IDEOGRAPH + {0x9CD4, 0x6EA4}, //5278 #CJK UNIFIED IDEOGRAPH + {0x9CD5, 0x6EA6}, //5279 #CJK UNIFIED IDEOGRAPH + {0x9CD6, 0x6EA8}, //5280 #CJK UNIFIED IDEOGRAPH + {0x9CD7, 0x6EA9}, //5281 #CJK UNIFIED IDEOGRAPH + {0x9CD8, 0x6EAB}, //5282 #CJK UNIFIED IDEOGRAPH + {0x9CD9, 0x6EAC}, //5283 #CJK UNIFIED IDEOGRAPH + {0x9CDA, 0x6EAD}, //5284 #CJK UNIFIED IDEOGRAPH + {0x9CDB, 0x6EAE}, //5285 #CJK UNIFIED IDEOGRAPH + {0x9CDC, 0x6EB0}, //5286 #CJK UNIFIED IDEOGRAPH + {0x9CDD, 0x6EB3}, //5287 #CJK UNIFIED IDEOGRAPH + {0x9CDE, 0x6EB5}, //5288 #CJK UNIFIED IDEOGRAPH + {0x9CDF, 0x6EB8}, //5289 #CJK UNIFIED IDEOGRAPH + {0x9CE0, 0x6EB9}, //5290 #CJK UNIFIED IDEOGRAPH + {0x9CE1, 0x6EBC}, //5291 #CJK UNIFIED IDEOGRAPH + {0x9CE2, 0x6EBE}, //5292 #CJK UNIFIED IDEOGRAPH + {0x9CE3, 0x6EBF}, //5293 #CJK UNIFIED IDEOGRAPH + {0x9CE4, 0x6EC0}, //5294 #CJK UNIFIED IDEOGRAPH + {0x9CE5, 0x6EC3}, //5295 #CJK UNIFIED IDEOGRAPH + {0x9CE6, 0x6EC4}, //5296 #CJK UNIFIED IDEOGRAPH + {0x9CE7, 0x6EC5}, //5297 #CJK UNIFIED IDEOGRAPH + {0x9CE8, 0x6EC6}, //5298 #CJK UNIFIED IDEOGRAPH + {0x9CE9, 0x6EC8}, //5299 #CJK UNIFIED IDEOGRAPH + {0x9CEA, 0x6EC9}, //5300 #CJK UNIFIED IDEOGRAPH + {0x9CEB, 0x6ECA}, //5301 #CJK UNIFIED IDEOGRAPH + {0x9CEC, 0x6ECC}, //5302 #CJK UNIFIED IDEOGRAPH + {0x9CED, 0x6ECD}, //5303 #CJK UNIFIED IDEOGRAPH + {0x9CEE, 0x6ECE}, //5304 #CJK UNIFIED IDEOGRAPH + {0x9CEF, 0x6ED0}, //5305 #CJK UNIFIED IDEOGRAPH + {0x9CF0, 0x6ED2}, //5306 #CJK UNIFIED IDEOGRAPH + {0x9CF1, 0x6ED6}, //5307 #CJK UNIFIED IDEOGRAPH + {0x9CF2, 0x6ED8}, //5308 #CJK UNIFIED IDEOGRAPH + {0x9CF3, 0x6ED9}, //5309 #CJK UNIFIED IDEOGRAPH + {0x9CF4, 0x6EDB}, //5310 #CJK UNIFIED IDEOGRAPH + {0x9CF5, 0x6EDC}, //5311 #CJK UNIFIED IDEOGRAPH + {0x9CF6, 0x6EDD}, //5312 #CJK UNIFIED IDEOGRAPH + {0x9CF7, 0x6EE3}, //5313 #CJK UNIFIED IDEOGRAPH + {0x9CF8, 0x6EE7}, //5314 #CJK UNIFIED IDEOGRAPH + {0x9CF9, 0x6EEA}, //5315 #CJK UNIFIED IDEOGRAPH + {0x9CFA, 0x6EEB}, //5316 #CJK UNIFIED IDEOGRAPH + {0x9CFB, 0x6EEC}, //5317 #CJK UNIFIED IDEOGRAPH + {0x9CFC, 0x6EED}, //5318 #CJK UNIFIED IDEOGRAPH + {0x9CFD, 0x6EEE}, //5319 #CJK UNIFIED IDEOGRAPH + {0x9CFE, 0x6EEF}, //5320 #CJK UNIFIED IDEOGRAPH + {0x9D40, 0x6EF0}, //5321 #CJK UNIFIED IDEOGRAPH + {0x9D41, 0x6EF1}, //5322 #CJK UNIFIED IDEOGRAPH + {0x9D42, 0x6EF2}, //5323 #CJK UNIFIED IDEOGRAPH + {0x9D43, 0x6EF3}, //5324 #CJK UNIFIED IDEOGRAPH + {0x9D44, 0x6EF5}, //5325 #CJK UNIFIED IDEOGRAPH + {0x9D45, 0x6EF6}, //5326 #CJK UNIFIED IDEOGRAPH + {0x9D46, 0x6EF7}, //5327 #CJK UNIFIED IDEOGRAPH + {0x9D47, 0x6EF8}, //5328 #CJK UNIFIED IDEOGRAPH + {0x9D48, 0x6EFA}, //5329 #CJK UNIFIED IDEOGRAPH + {0x9D49, 0x6EFB}, //5330 #CJK UNIFIED IDEOGRAPH + {0x9D4A, 0x6EFC}, //5331 #CJK UNIFIED IDEOGRAPH + {0x9D4B, 0x6EFD}, //5332 #CJK UNIFIED IDEOGRAPH + {0x9D4C, 0x6EFE}, //5333 #CJK UNIFIED IDEOGRAPH + {0x9D4D, 0x6EFF}, //5334 #CJK UNIFIED IDEOGRAPH + {0x9D4E, 0x6F00}, //5335 #CJK UNIFIED IDEOGRAPH + {0x9D4F, 0x6F01}, //5336 #CJK UNIFIED IDEOGRAPH + {0x9D50, 0x6F03}, //5337 #CJK UNIFIED IDEOGRAPH + {0x9D51, 0x6F04}, //5338 #CJK UNIFIED IDEOGRAPH + {0x9D52, 0x6F05}, //5339 #CJK UNIFIED IDEOGRAPH + {0x9D53, 0x6F07}, //5340 #CJK UNIFIED IDEOGRAPH + {0x9D54, 0x6F08}, //5341 #CJK UNIFIED IDEOGRAPH + {0x9D55, 0x6F0A}, //5342 #CJK UNIFIED IDEOGRAPH + {0x9D56, 0x6F0B}, //5343 #CJK UNIFIED IDEOGRAPH + {0x9D57, 0x6F0C}, //5344 #CJK UNIFIED IDEOGRAPH + {0x9D58, 0x6F0D}, //5345 #CJK UNIFIED IDEOGRAPH + {0x9D59, 0x6F0E}, //5346 #CJK UNIFIED IDEOGRAPH + {0x9D5A, 0x6F10}, //5347 #CJK UNIFIED IDEOGRAPH + {0x9D5B, 0x6F11}, //5348 #CJK UNIFIED IDEOGRAPH + {0x9D5C, 0x6F12}, //5349 #CJK UNIFIED IDEOGRAPH + {0x9D5D, 0x6F16}, //5350 #CJK UNIFIED IDEOGRAPH + {0x9D5E, 0x6F17}, //5351 #CJK UNIFIED IDEOGRAPH + {0x9D5F, 0x6F18}, //5352 #CJK UNIFIED IDEOGRAPH + {0x9D60, 0x6F19}, //5353 #CJK UNIFIED IDEOGRAPH + {0x9D61, 0x6F1A}, //5354 #CJK UNIFIED IDEOGRAPH + {0x9D62, 0x6F1B}, //5355 #CJK UNIFIED IDEOGRAPH + {0x9D63, 0x6F1C}, //5356 #CJK UNIFIED IDEOGRAPH + {0x9D64, 0x6F1D}, //5357 #CJK UNIFIED IDEOGRAPH + {0x9D65, 0x6F1E}, //5358 #CJK UNIFIED IDEOGRAPH + {0x9D66, 0x6F1F}, //5359 #CJK UNIFIED IDEOGRAPH + {0x9D67, 0x6F21}, //5360 #CJK UNIFIED IDEOGRAPH + {0x9D68, 0x6F22}, //5361 #CJK UNIFIED IDEOGRAPH + {0x9D69, 0x6F23}, //5362 #CJK UNIFIED IDEOGRAPH + {0x9D6A, 0x6F25}, //5363 #CJK UNIFIED IDEOGRAPH + {0x9D6B, 0x6F26}, //5364 #CJK UNIFIED IDEOGRAPH + {0x9D6C, 0x6F27}, //5365 #CJK UNIFIED IDEOGRAPH + {0x9D6D, 0x6F28}, //5366 #CJK UNIFIED IDEOGRAPH + {0x9D6E, 0x6F2C}, //5367 #CJK UNIFIED IDEOGRAPH + {0x9D6F, 0x6F2E}, //5368 #CJK UNIFIED IDEOGRAPH + {0x9D70, 0x6F30}, //5369 #CJK UNIFIED IDEOGRAPH + {0x9D71, 0x6F32}, //5370 #CJK UNIFIED IDEOGRAPH + {0x9D72, 0x6F34}, //5371 #CJK UNIFIED IDEOGRAPH + {0x9D73, 0x6F35}, //5372 #CJK UNIFIED IDEOGRAPH + {0x9D74, 0x6F37}, //5373 #CJK UNIFIED IDEOGRAPH + {0x9D75, 0x6F38}, //5374 #CJK UNIFIED IDEOGRAPH + {0x9D76, 0x6F39}, //5375 #CJK UNIFIED IDEOGRAPH + {0x9D77, 0x6F3A}, //5376 #CJK UNIFIED IDEOGRAPH + {0x9D78, 0x6F3B}, //5377 #CJK UNIFIED IDEOGRAPH + {0x9D79, 0x6F3C}, //5378 #CJK UNIFIED IDEOGRAPH + {0x9D7A, 0x6F3D}, //5379 #CJK UNIFIED IDEOGRAPH + {0x9D7B, 0x6F3F}, //5380 #CJK UNIFIED IDEOGRAPH + {0x9D7C, 0x6F40}, //5381 #CJK UNIFIED IDEOGRAPH + {0x9D7D, 0x6F41}, //5382 #CJK UNIFIED IDEOGRAPH + {0x9D7E, 0x6F42}, //5383 #CJK UNIFIED IDEOGRAPH + {0x9D80, 0x6F43}, //5384 #CJK UNIFIED IDEOGRAPH + {0x9D81, 0x6F44}, //5385 #CJK UNIFIED IDEOGRAPH + {0x9D82, 0x6F45}, //5386 #CJK UNIFIED IDEOGRAPH + {0x9D83, 0x6F48}, //5387 #CJK UNIFIED IDEOGRAPH + {0x9D84, 0x6F49}, //5388 #CJK UNIFIED IDEOGRAPH + {0x9D85, 0x6F4A}, //5389 #CJK UNIFIED IDEOGRAPH + {0x9D86, 0x6F4C}, //5390 #CJK UNIFIED IDEOGRAPH + {0x9D87, 0x6F4E}, //5391 #CJK UNIFIED IDEOGRAPH + {0x9D88, 0x6F4F}, //5392 #CJK UNIFIED IDEOGRAPH + {0x9D89, 0x6F50}, //5393 #CJK UNIFIED IDEOGRAPH + {0x9D8A, 0x6F51}, //5394 #CJK UNIFIED IDEOGRAPH + {0x9D8B, 0x6F52}, //5395 #CJK UNIFIED IDEOGRAPH + {0x9D8C, 0x6F53}, //5396 #CJK UNIFIED IDEOGRAPH + {0x9D8D, 0x6F54}, //5397 #CJK UNIFIED IDEOGRAPH + {0x9D8E, 0x6F55}, //5398 #CJK UNIFIED IDEOGRAPH + {0x9D8F, 0x6F56}, //5399 #CJK UNIFIED IDEOGRAPH + {0x9D90, 0x6F57}, //5400 #CJK UNIFIED IDEOGRAPH + {0x9D91, 0x6F59}, //5401 #CJK UNIFIED IDEOGRAPH + {0x9D92, 0x6F5A}, //5402 #CJK UNIFIED IDEOGRAPH + {0x9D93, 0x6F5B}, //5403 #CJK UNIFIED IDEOGRAPH + {0x9D94, 0x6F5D}, //5404 #CJK UNIFIED IDEOGRAPH + {0x9D95, 0x6F5F}, //5405 #CJK UNIFIED IDEOGRAPH + {0x9D96, 0x6F60}, //5406 #CJK UNIFIED IDEOGRAPH + {0x9D97, 0x6F61}, //5407 #CJK UNIFIED IDEOGRAPH + {0x9D98, 0x6F63}, //5408 #CJK UNIFIED IDEOGRAPH + {0x9D99, 0x6F64}, //5409 #CJK UNIFIED IDEOGRAPH + {0x9D9A, 0x6F65}, //5410 #CJK UNIFIED IDEOGRAPH + {0x9D9B, 0x6F67}, //5411 #CJK UNIFIED IDEOGRAPH + {0x9D9C, 0x6F68}, //5412 #CJK UNIFIED IDEOGRAPH + {0x9D9D, 0x6F69}, //5413 #CJK UNIFIED IDEOGRAPH + {0x9D9E, 0x6F6A}, //5414 #CJK UNIFIED IDEOGRAPH + {0x9D9F, 0x6F6B}, //5415 #CJK UNIFIED IDEOGRAPH + {0x9DA0, 0x6F6C}, //5416 #CJK UNIFIED IDEOGRAPH + {0x9DA1, 0x6F6F}, //5417 #CJK UNIFIED IDEOGRAPH + {0x9DA2, 0x6F70}, //5418 #CJK UNIFIED IDEOGRAPH + {0x9DA3, 0x6F71}, //5419 #CJK UNIFIED IDEOGRAPH + {0x9DA4, 0x6F73}, //5420 #CJK UNIFIED IDEOGRAPH + {0x9DA5, 0x6F75}, //5421 #CJK UNIFIED IDEOGRAPH + {0x9DA6, 0x6F76}, //5422 #CJK UNIFIED IDEOGRAPH + {0x9DA7, 0x6F77}, //5423 #CJK UNIFIED IDEOGRAPH + {0x9DA8, 0x6F79}, //5424 #CJK UNIFIED IDEOGRAPH + {0x9DA9, 0x6F7B}, //5425 #CJK UNIFIED IDEOGRAPH + {0x9DAA, 0x6F7D}, //5426 #CJK UNIFIED IDEOGRAPH + {0x9DAB, 0x6F7E}, //5427 #CJK UNIFIED IDEOGRAPH + {0x9DAC, 0x6F7F}, //5428 #CJK UNIFIED IDEOGRAPH + {0x9DAD, 0x6F80}, //5429 #CJK UNIFIED IDEOGRAPH + {0x9DAE, 0x6F81}, //5430 #CJK UNIFIED IDEOGRAPH + {0x9DAF, 0x6F82}, //5431 #CJK UNIFIED IDEOGRAPH + {0x9DB0, 0x6F83}, //5432 #CJK UNIFIED IDEOGRAPH + {0x9DB1, 0x6F85}, //5433 #CJK UNIFIED IDEOGRAPH + {0x9DB2, 0x6F86}, //5434 #CJK UNIFIED IDEOGRAPH + {0x9DB3, 0x6F87}, //5435 #CJK UNIFIED IDEOGRAPH + {0x9DB4, 0x6F8A}, //5436 #CJK UNIFIED IDEOGRAPH + {0x9DB5, 0x6F8B}, //5437 #CJK UNIFIED IDEOGRAPH + {0x9DB6, 0x6F8F}, //5438 #CJK UNIFIED IDEOGRAPH + {0x9DB7, 0x6F90}, //5439 #CJK UNIFIED IDEOGRAPH + {0x9DB8, 0x6F91}, //5440 #CJK UNIFIED IDEOGRAPH + {0x9DB9, 0x6F92}, //5441 #CJK UNIFIED IDEOGRAPH + {0x9DBA, 0x6F93}, //5442 #CJK UNIFIED IDEOGRAPH + {0x9DBB, 0x6F94}, //5443 #CJK UNIFIED IDEOGRAPH + {0x9DBC, 0x6F95}, //5444 #CJK UNIFIED IDEOGRAPH + {0x9DBD, 0x6F96}, //5445 #CJK UNIFIED IDEOGRAPH + {0x9DBE, 0x6F97}, //5446 #CJK UNIFIED IDEOGRAPH + {0x9DBF, 0x6F98}, //5447 #CJK UNIFIED IDEOGRAPH + {0x9DC0, 0x6F99}, //5448 #CJK UNIFIED IDEOGRAPH + {0x9DC1, 0x6F9A}, //5449 #CJK UNIFIED IDEOGRAPH + {0x9DC2, 0x6F9B}, //5450 #CJK UNIFIED IDEOGRAPH + {0x9DC3, 0x6F9D}, //5451 #CJK UNIFIED IDEOGRAPH + {0x9DC4, 0x6F9E}, //5452 #CJK UNIFIED IDEOGRAPH + {0x9DC5, 0x6F9F}, //5453 #CJK UNIFIED IDEOGRAPH + {0x9DC6, 0x6FA0}, //5454 #CJK UNIFIED IDEOGRAPH + {0x9DC7, 0x6FA2}, //5455 #CJK UNIFIED IDEOGRAPH + {0x9DC8, 0x6FA3}, //5456 #CJK UNIFIED IDEOGRAPH + {0x9DC9, 0x6FA4}, //5457 #CJK UNIFIED IDEOGRAPH + {0x9DCA, 0x6FA5}, //5458 #CJK UNIFIED IDEOGRAPH + {0x9DCB, 0x6FA6}, //5459 #CJK UNIFIED IDEOGRAPH + {0x9DCC, 0x6FA8}, //5460 #CJK UNIFIED IDEOGRAPH + {0x9DCD, 0x6FA9}, //5461 #CJK UNIFIED IDEOGRAPH + {0x9DCE, 0x6FAA}, //5462 #CJK UNIFIED IDEOGRAPH + {0x9DCF, 0x6FAB}, //5463 #CJK UNIFIED IDEOGRAPH + {0x9DD0, 0x6FAC}, //5464 #CJK UNIFIED IDEOGRAPH + {0x9DD1, 0x6FAD}, //5465 #CJK UNIFIED IDEOGRAPH + {0x9DD2, 0x6FAE}, //5466 #CJK UNIFIED IDEOGRAPH + {0x9DD3, 0x6FAF}, //5467 #CJK UNIFIED IDEOGRAPH + {0x9DD4, 0x6FB0}, //5468 #CJK UNIFIED IDEOGRAPH + {0x9DD5, 0x6FB1}, //5469 #CJK UNIFIED IDEOGRAPH + {0x9DD6, 0x6FB2}, //5470 #CJK UNIFIED IDEOGRAPH + {0x9DD7, 0x6FB4}, //5471 #CJK UNIFIED IDEOGRAPH + {0x9DD8, 0x6FB5}, //5472 #CJK UNIFIED IDEOGRAPH + {0x9DD9, 0x6FB7}, //5473 #CJK UNIFIED IDEOGRAPH + {0x9DDA, 0x6FB8}, //5474 #CJK UNIFIED IDEOGRAPH + {0x9DDB, 0x6FBA}, //5475 #CJK UNIFIED IDEOGRAPH + {0x9DDC, 0x6FBB}, //5476 #CJK UNIFIED IDEOGRAPH + {0x9DDD, 0x6FBC}, //5477 #CJK UNIFIED IDEOGRAPH + {0x9DDE, 0x6FBD}, //5478 #CJK UNIFIED IDEOGRAPH + {0x9DDF, 0x6FBE}, //5479 #CJK UNIFIED IDEOGRAPH + {0x9DE0, 0x6FBF}, //5480 #CJK UNIFIED IDEOGRAPH + {0x9DE1, 0x6FC1}, //5481 #CJK UNIFIED IDEOGRAPH + {0x9DE2, 0x6FC3}, //5482 #CJK UNIFIED IDEOGRAPH + {0x9DE3, 0x6FC4}, //5483 #CJK UNIFIED IDEOGRAPH + {0x9DE4, 0x6FC5}, //5484 #CJK UNIFIED IDEOGRAPH + {0x9DE5, 0x6FC6}, //5485 #CJK UNIFIED IDEOGRAPH + {0x9DE6, 0x6FC7}, //5486 #CJK UNIFIED IDEOGRAPH + {0x9DE7, 0x6FC8}, //5487 #CJK UNIFIED IDEOGRAPH + {0x9DE8, 0x6FCA}, //5488 #CJK UNIFIED IDEOGRAPH + {0x9DE9, 0x6FCB}, //5489 #CJK UNIFIED IDEOGRAPH + {0x9DEA, 0x6FCC}, //5490 #CJK UNIFIED IDEOGRAPH + {0x9DEB, 0x6FCD}, //5491 #CJK UNIFIED IDEOGRAPH + {0x9DEC, 0x6FCE}, //5492 #CJK UNIFIED IDEOGRAPH + {0x9DED, 0x6FCF}, //5493 #CJK UNIFIED IDEOGRAPH + {0x9DEE, 0x6FD0}, //5494 #CJK UNIFIED IDEOGRAPH + {0x9DEF, 0x6FD3}, //5495 #CJK UNIFIED IDEOGRAPH + {0x9DF0, 0x6FD4}, //5496 #CJK UNIFIED IDEOGRAPH + {0x9DF1, 0x6FD5}, //5497 #CJK UNIFIED IDEOGRAPH + {0x9DF2, 0x6FD6}, //5498 #CJK UNIFIED IDEOGRAPH + {0x9DF3, 0x6FD7}, //5499 #CJK UNIFIED IDEOGRAPH + {0x9DF4, 0x6FD8}, //5500 #CJK UNIFIED IDEOGRAPH + {0x9DF5, 0x6FD9}, //5501 #CJK UNIFIED IDEOGRAPH + {0x9DF6, 0x6FDA}, //5502 #CJK UNIFIED IDEOGRAPH + {0x9DF7, 0x6FDB}, //5503 #CJK UNIFIED IDEOGRAPH + {0x9DF8, 0x6FDC}, //5504 #CJK UNIFIED IDEOGRAPH + {0x9DF9, 0x6FDD}, //5505 #CJK UNIFIED IDEOGRAPH + {0x9DFA, 0x6FDF}, //5506 #CJK UNIFIED IDEOGRAPH + {0x9DFB, 0x6FE2}, //5507 #CJK UNIFIED IDEOGRAPH + {0x9DFC, 0x6FE3}, //5508 #CJK UNIFIED IDEOGRAPH + {0x9DFD, 0x6FE4}, //5509 #CJK UNIFIED IDEOGRAPH + {0x9DFE, 0x6FE5}, //5510 #CJK UNIFIED IDEOGRAPH + {0x9E40, 0x6FE6}, //5511 #CJK UNIFIED IDEOGRAPH + {0x9E41, 0x6FE7}, //5512 #CJK UNIFIED IDEOGRAPH + {0x9E42, 0x6FE8}, //5513 #CJK UNIFIED IDEOGRAPH + {0x9E43, 0x6FE9}, //5514 #CJK UNIFIED IDEOGRAPH + {0x9E44, 0x6FEA}, //5515 #CJK UNIFIED IDEOGRAPH + {0x9E45, 0x6FEB}, //5516 #CJK UNIFIED IDEOGRAPH + {0x9E46, 0x6FEC}, //5517 #CJK UNIFIED IDEOGRAPH + {0x9E47, 0x6FED}, //5518 #CJK UNIFIED IDEOGRAPH + {0x9E48, 0x6FF0}, //5519 #CJK UNIFIED IDEOGRAPH + {0x9E49, 0x6FF1}, //5520 #CJK UNIFIED IDEOGRAPH + {0x9E4A, 0x6FF2}, //5521 #CJK UNIFIED IDEOGRAPH + {0x9E4B, 0x6FF3}, //5522 #CJK UNIFIED IDEOGRAPH + {0x9E4C, 0x6FF4}, //5523 #CJK UNIFIED IDEOGRAPH + {0x9E4D, 0x6FF5}, //5524 #CJK UNIFIED IDEOGRAPH + {0x9E4E, 0x6FF6}, //5525 #CJK UNIFIED IDEOGRAPH + {0x9E4F, 0x6FF7}, //5526 #CJK UNIFIED IDEOGRAPH + {0x9E50, 0x6FF8}, //5527 #CJK UNIFIED IDEOGRAPH + {0x9E51, 0x6FF9}, //5528 #CJK UNIFIED IDEOGRAPH + {0x9E52, 0x6FFA}, //5529 #CJK UNIFIED IDEOGRAPH + {0x9E53, 0x6FFB}, //5530 #CJK UNIFIED IDEOGRAPH + {0x9E54, 0x6FFC}, //5531 #CJK UNIFIED IDEOGRAPH + {0x9E55, 0x6FFD}, //5532 #CJK UNIFIED IDEOGRAPH + {0x9E56, 0x6FFE}, //5533 #CJK UNIFIED IDEOGRAPH + {0x9E57, 0x6FFF}, //5534 #CJK UNIFIED IDEOGRAPH + {0x9E58, 0x7000}, //5535 #CJK UNIFIED IDEOGRAPH + {0x9E59, 0x7001}, //5536 #CJK UNIFIED IDEOGRAPH + {0x9E5A, 0x7002}, //5537 #CJK UNIFIED IDEOGRAPH + {0x9E5B, 0x7003}, //5538 #CJK UNIFIED IDEOGRAPH + {0x9E5C, 0x7004}, //5539 #CJK UNIFIED IDEOGRAPH + {0x9E5D, 0x7005}, //5540 #CJK UNIFIED IDEOGRAPH + {0x9E5E, 0x7006}, //5541 #CJK UNIFIED IDEOGRAPH + {0x9E5F, 0x7007}, //5542 #CJK UNIFIED IDEOGRAPH + {0x9E60, 0x7008}, //5543 #CJK UNIFIED IDEOGRAPH + {0x9E61, 0x7009}, //5544 #CJK UNIFIED IDEOGRAPH + {0x9E62, 0x700A}, //5545 #CJK UNIFIED IDEOGRAPH + {0x9E63, 0x700B}, //5546 #CJK UNIFIED IDEOGRAPH + {0x9E64, 0x700C}, //5547 #CJK UNIFIED IDEOGRAPH + {0x9E65, 0x700D}, //5548 #CJK UNIFIED IDEOGRAPH + {0x9E66, 0x700E}, //5549 #CJK UNIFIED IDEOGRAPH + {0x9E67, 0x700F}, //5550 #CJK UNIFIED IDEOGRAPH + {0x9E68, 0x7010}, //5551 #CJK UNIFIED IDEOGRAPH + {0x9E69, 0x7012}, //5552 #CJK UNIFIED IDEOGRAPH + {0x9E6A, 0x7013}, //5553 #CJK UNIFIED IDEOGRAPH + {0x9E6B, 0x7014}, //5554 #CJK UNIFIED IDEOGRAPH + {0x9E6C, 0x7015}, //5555 #CJK UNIFIED IDEOGRAPH + {0x9E6D, 0x7016}, //5556 #CJK UNIFIED IDEOGRAPH + {0x9E6E, 0x7017}, //5557 #CJK UNIFIED IDEOGRAPH + {0x9E6F, 0x7018}, //5558 #CJK UNIFIED IDEOGRAPH + {0x9E70, 0x7019}, //5559 #CJK UNIFIED IDEOGRAPH + {0x9E71, 0x701C}, //5560 #CJK UNIFIED IDEOGRAPH + {0x9E72, 0x701D}, //5561 #CJK UNIFIED IDEOGRAPH + {0x9E73, 0x701E}, //5562 #CJK UNIFIED IDEOGRAPH + {0x9E74, 0x701F}, //5563 #CJK UNIFIED IDEOGRAPH + {0x9E75, 0x7020}, //5564 #CJK UNIFIED IDEOGRAPH + {0x9E76, 0x7021}, //5565 #CJK UNIFIED IDEOGRAPH + {0x9E77, 0x7022}, //5566 #CJK UNIFIED IDEOGRAPH + {0x9E78, 0x7024}, //5567 #CJK UNIFIED IDEOGRAPH + {0x9E79, 0x7025}, //5568 #CJK UNIFIED IDEOGRAPH + {0x9E7A, 0x7026}, //5569 #CJK UNIFIED IDEOGRAPH + {0x9E7B, 0x7027}, //5570 #CJK UNIFIED IDEOGRAPH + {0x9E7C, 0x7028}, //5571 #CJK UNIFIED IDEOGRAPH + {0x9E7D, 0x7029}, //5572 #CJK UNIFIED IDEOGRAPH + {0x9E7E, 0x702A}, //5573 #CJK UNIFIED IDEOGRAPH + {0x9E80, 0x702B}, //5574 #CJK UNIFIED IDEOGRAPH + {0x9E81, 0x702C}, //5575 #CJK UNIFIED IDEOGRAPH + {0x9E82, 0x702D}, //5576 #CJK UNIFIED IDEOGRAPH + {0x9E83, 0x702E}, //5577 #CJK UNIFIED IDEOGRAPH + {0x9E84, 0x702F}, //5578 #CJK UNIFIED IDEOGRAPH + {0x9E85, 0x7030}, //5579 #CJK UNIFIED IDEOGRAPH + {0x9E86, 0x7031}, //5580 #CJK UNIFIED IDEOGRAPH + {0x9E87, 0x7032}, //5581 #CJK UNIFIED IDEOGRAPH + {0x9E88, 0x7033}, //5582 #CJK UNIFIED IDEOGRAPH + {0x9E89, 0x7034}, //5583 #CJK UNIFIED IDEOGRAPH + {0x9E8A, 0x7036}, //5584 #CJK UNIFIED IDEOGRAPH + {0x9E8B, 0x7037}, //5585 #CJK UNIFIED IDEOGRAPH + {0x9E8C, 0x7038}, //5586 #CJK UNIFIED IDEOGRAPH + {0x9E8D, 0x703A}, //5587 #CJK UNIFIED IDEOGRAPH + {0x9E8E, 0x703B}, //5588 #CJK UNIFIED IDEOGRAPH + {0x9E8F, 0x703C}, //5589 #CJK UNIFIED IDEOGRAPH + {0x9E90, 0x703D}, //5590 #CJK UNIFIED IDEOGRAPH + {0x9E91, 0x703E}, //5591 #CJK UNIFIED IDEOGRAPH + {0x9E92, 0x703F}, //5592 #CJK UNIFIED IDEOGRAPH + {0x9E93, 0x7040}, //5593 #CJK UNIFIED IDEOGRAPH + {0x9E94, 0x7041}, //5594 #CJK UNIFIED IDEOGRAPH + {0x9E95, 0x7042}, //5595 #CJK UNIFIED IDEOGRAPH + {0x9E96, 0x7043}, //5596 #CJK UNIFIED IDEOGRAPH + {0x9E97, 0x7044}, //5597 #CJK UNIFIED IDEOGRAPH + {0x9E98, 0x7045}, //5598 #CJK UNIFIED IDEOGRAPH + {0x9E99, 0x7046}, //5599 #CJK UNIFIED IDEOGRAPH + {0x9E9A, 0x7047}, //5600 #CJK UNIFIED IDEOGRAPH + {0x9E9B, 0x7048}, //5601 #CJK UNIFIED IDEOGRAPH + {0x9E9C, 0x7049}, //5602 #CJK UNIFIED IDEOGRAPH + {0x9E9D, 0x704A}, //5603 #CJK UNIFIED IDEOGRAPH + {0x9E9E, 0x704B}, //5604 #CJK UNIFIED IDEOGRAPH + {0x9E9F, 0x704D}, //5605 #CJK UNIFIED IDEOGRAPH + {0x9EA0, 0x704E}, //5606 #CJK UNIFIED IDEOGRAPH + {0x9EA1, 0x7050}, //5607 #CJK UNIFIED IDEOGRAPH + {0x9EA2, 0x7051}, //5608 #CJK UNIFIED IDEOGRAPH + {0x9EA3, 0x7052}, //5609 #CJK UNIFIED IDEOGRAPH + {0x9EA4, 0x7053}, //5610 #CJK UNIFIED IDEOGRAPH + {0x9EA5, 0x7054}, //5611 #CJK UNIFIED IDEOGRAPH + {0x9EA6, 0x7055}, //5612 #CJK UNIFIED IDEOGRAPH + {0x9EA7, 0x7056}, //5613 #CJK UNIFIED IDEOGRAPH + {0x9EA8, 0x7057}, //5614 #CJK UNIFIED IDEOGRAPH + {0x9EA9, 0x7058}, //5615 #CJK UNIFIED IDEOGRAPH + {0x9EAA, 0x7059}, //5616 #CJK UNIFIED IDEOGRAPH + {0x9EAB, 0x705A}, //5617 #CJK UNIFIED IDEOGRAPH + {0x9EAC, 0x705B}, //5618 #CJK UNIFIED IDEOGRAPH + {0x9EAD, 0x705C}, //5619 #CJK UNIFIED IDEOGRAPH + {0x9EAE, 0x705D}, //5620 #CJK UNIFIED IDEOGRAPH + {0x9EAF, 0x705F}, //5621 #CJK UNIFIED IDEOGRAPH + {0x9EB0, 0x7060}, //5622 #CJK UNIFIED IDEOGRAPH + {0x9EB1, 0x7061}, //5623 #CJK UNIFIED IDEOGRAPH + {0x9EB2, 0x7062}, //5624 #CJK UNIFIED IDEOGRAPH + {0x9EB3, 0x7063}, //5625 #CJK UNIFIED IDEOGRAPH + {0x9EB4, 0x7064}, //5626 #CJK UNIFIED IDEOGRAPH + {0x9EB5, 0x7065}, //5627 #CJK UNIFIED IDEOGRAPH + {0x9EB6, 0x7066}, //5628 #CJK UNIFIED IDEOGRAPH + {0x9EB7, 0x7067}, //5629 #CJK UNIFIED IDEOGRAPH + {0x9EB8, 0x7068}, //5630 #CJK UNIFIED IDEOGRAPH + {0x9EB9, 0x7069}, //5631 #CJK UNIFIED IDEOGRAPH + {0x9EBA, 0x706A}, //5632 #CJK UNIFIED IDEOGRAPH + {0x9EBB, 0x706E}, //5633 #CJK UNIFIED IDEOGRAPH + {0x9EBC, 0x7071}, //5634 #CJK UNIFIED IDEOGRAPH + {0x9EBD, 0x7072}, //5635 #CJK UNIFIED IDEOGRAPH + {0x9EBE, 0x7073}, //5636 #CJK UNIFIED IDEOGRAPH + {0x9EBF, 0x7074}, //5637 #CJK UNIFIED IDEOGRAPH + {0x9EC0, 0x7077}, //5638 #CJK UNIFIED IDEOGRAPH + {0x9EC1, 0x7079}, //5639 #CJK UNIFIED IDEOGRAPH + {0x9EC2, 0x707A}, //5640 #CJK UNIFIED IDEOGRAPH + {0x9EC3, 0x707B}, //5641 #CJK UNIFIED IDEOGRAPH + {0x9EC4, 0x707D}, //5642 #CJK UNIFIED IDEOGRAPH + {0x9EC5, 0x7081}, //5643 #CJK UNIFIED IDEOGRAPH + {0x9EC6, 0x7082}, //5644 #CJK UNIFIED IDEOGRAPH + {0x9EC7, 0x7083}, //5645 #CJK UNIFIED IDEOGRAPH + {0x9EC8, 0x7084}, //5646 #CJK UNIFIED IDEOGRAPH + {0x9EC9, 0x7086}, //5647 #CJK UNIFIED IDEOGRAPH + {0x9ECA, 0x7087}, //5648 #CJK UNIFIED IDEOGRAPH + {0x9ECB, 0x7088}, //5649 #CJK UNIFIED IDEOGRAPH + {0x9ECC, 0x708B}, //5650 #CJK UNIFIED IDEOGRAPH + {0x9ECD, 0x708C}, //5651 #CJK UNIFIED IDEOGRAPH + {0x9ECE, 0x708D}, //5652 #CJK UNIFIED IDEOGRAPH + {0x9ECF, 0x708F}, //5653 #CJK UNIFIED IDEOGRAPH + {0x9ED0, 0x7090}, //5654 #CJK UNIFIED IDEOGRAPH + {0x9ED1, 0x7091}, //5655 #CJK UNIFIED IDEOGRAPH + {0x9ED2, 0x7093}, //5656 #CJK UNIFIED IDEOGRAPH + {0x9ED3, 0x7097}, //5657 #CJK UNIFIED IDEOGRAPH + {0x9ED4, 0x7098}, //5658 #CJK UNIFIED IDEOGRAPH + {0x9ED5, 0x709A}, //5659 #CJK UNIFIED IDEOGRAPH + {0x9ED6, 0x709B}, //5660 #CJK UNIFIED IDEOGRAPH + {0x9ED7, 0x709E}, //5661 #CJK UNIFIED IDEOGRAPH + {0x9ED8, 0x709F}, //5662 #CJK UNIFIED IDEOGRAPH + {0x9ED9, 0x70A0}, //5663 #CJK UNIFIED IDEOGRAPH + {0x9EDA, 0x70A1}, //5664 #CJK UNIFIED IDEOGRAPH + {0x9EDB, 0x70A2}, //5665 #CJK UNIFIED IDEOGRAPH + {0x9EDC, 0x70A3}, //5666 #CJK UNIFIED IDEOGRAPH + {0x9EDD, 0x70A4}, //5667 #CJK UNIFIED IDEOGRAPH + {0x9EDE, 0x70A5}, //5668 #CJK UNIFIED IDEOGRAPH + {0x9EDF, 0x70A6}, //5669 #CJK UNIFIED IDEOGRAPH + {0x9EE0, 0x70A7}, //5670 #CJK UNIFIED IDEOGRAPH + {0x9EE1, 0x70A8}, //5671 #CJK UNIFIED IDEOGRAPH + {0x9EE2, 0x70A9}, //5672 #CJK UNIFIED IDEOGRAPH + {0x9EE3, 0x70AA}, //5673 #CJK UNIFIED IDEOGRAPH + {0x9EE4, 0x70B0}, //5674 #CJK UNIFIED IDEOGRAPH + {0x9EE5, 0x70B2}, //5675 #CJK UNIFIED IDEOGRAPH + {0x9EE6, 0x70B4}, //5676 #CJK UNIFIED IDEOGRAPH + {0x9EE7, 0x70B5}, //5677 #CJK UNIFIED IDEOGRAPH + {0x9EE8, 0x70B6}, //5678 #CJK UNIFIED IDEOGRAPH + {0x9EE9, 0x70BA}, //5679 #CJK UNIFIED IDEOGRAPH + {0x9EEA, 0x70BE}, //5680 #CJK UNIFIED IDEOGRAPH + {0x9EEB, 0x70BF}, //5681 #CJK UNIFIED IDEOGRAPH + {0x9EEC, 0x70C4}, //5682 #CJK UNIFIED IDEOGRAPH + {0x9EED, 0x70C5}, //5683 #CJK UNIFIED IDEOGRAPH + {0x9EEE, 0x70C6}, //5684 #CJK UNIFIED IDEOGRAPH + {0x9EEF, 0x70C7}, //5685 #CJK UNIFIED IDEOGRAPH + {0x9EF0, 0x70C9}, //5686 #CJK UNIFIED IDEOGRAPH + {0x9EF1, 0x70CB}, //5687 #CJK UNIFIED IDEOGRAPH + {0x9EF2, 0x70CC}, //5688 #CJK UNIFIED IDEOGRAPH + {0x9EF3, 0x70CD}, //5689 #CJK UNIFIED IDEOGRAPH + {0x9EF4, 0x70CE}, //5690 #CJK UNIFIED IDEOGRAPH + {0x9EF5, 0x70CF}, //5691 #CJK UNIFIED IDEOGRAPH + {0x9EF6, 0x70D0}, //5692 #CJK UNIFIED IDEOGRAPH + {0x9EF7, 0x70D1}, //5693 #CJK UNIFIED IDEOGRAPH + {0x9EF8, 0x70D2}, //5694 #CJK UNIFIED IDEOGRAPH + {0x9EF9, 0x70D3}, //5695 #CJK UNIFIED IDEOGRAPH + {0x9EFA, 0x70D4}, //5696 #CJK UNIFIED IDEOGRAPH + {0x9EFB, 0x70D5}, //5697 #CJK UNIFIED IDEOGRAPH + {0x9EFC, 0x70D6}, //5698 #CJK UNIFIED IDEOGRAPH + {0x9EFD, 0x70D7}, //5699 #CJK UNIFIED IDEOGRAPH + {0x9EFE, 0x70DA}, //5700 #CJK UNIFIED IDEOGRAPH + {0x9F40, 0x70DC}, //5701 #CJK UNIFIED IDEOGRAPH + {0x9F41, 0x70DD}, //5702 #CJK UNIFIED IDEOGRAPH + {0x9F42, 0x70DE}, //5703 #CJK UNIFIED IDEOGRAPH + {0x9F43, 0x70E0}, //5704 #CJK UNIFIED IDEOGRAPH + {0x9F44, 0x70E1}, //5705 #CJK UNIFIED IDEOGRAPH + {0x9F45, 0x70E2}, //5706 #CJK UNIFIED IDEOGRAPH + {0x9F46, 0x70E3}, //5707 #CJK UNIFIED IDEOGRAPH + {0x9F47, 0x70E5}, //5708 #CJK UNIFIED IDEOGRAPH + {0x9F48, 0x70EA}, //5709 #CJK UNIFIED IDEOGRAPH + {0x9F49, 0x70EE}, //5710 #CJK UNIFIED IDEOGRAPH + {0x9F4A, 0x70F0}, //5711 #CJK UNIFIED IDEOGRAPH + {0x9F4B, 0x70F1}, //5712 #CJK UNIFIED IDEOGRAPH + {0x9F4C, 0x70F2}, //5713 #CJK UNIFIED IDEOGRAPH + {0x9F4D, 0x70F3}, //5714 #CJK UNIFIED IDEOGRAPH + {0x9F4E, 0x70F4}, //5715 #CJK UNIFIED IDEOGRAPH + {0x9F4F, 0x70F5}, //5716 #CJK UNIFIED IDEOGRAPH + {0x9F50, 0x70F6}, //5717 #CJK UNIFIED IDEOGRAPH + {0x9F51, 0x70F8}, //5718 #CJK UNIFIED IDEOGRAPH + {0x9F52, 0x70FA}, //5719 #CJK UNIFIED IDEOGRAPH + {0x9F53, 0x70FB}, //5720 #CJK UNIFIED IDEOGRAPH + {0x9F54, 0x70FC}, //5721 #CJK UNIFIED IDEOGRAPH + {0x9F55, 0x70FE}, //5722 #CJK UNIFIED IDEOGRAPH + {0x9F56, 0x70FF}, //5723 #CJK UNIFIED IDEOGRAPH + {0x9F57, 0x7100}, //5724 #CJK UNIFIED IDEOGRAPH + {0x9F58, 0x7101}, //5725 #CJK UNIFIED IDEOGRAPH + {0x9F59, 0x7102}, //5726 #CJK UNIFIED IDEOGRAPH + {0x9F5A, 0x7103}, //5727 #CJK UNIFIED IDEOGRAPH + {0x9F5B, 0x7104}, //5728 #CJK UNIFIED IDEOGRAPH + {0x9F5C, 0x7105}, //5729 #CJK UNIFIED IDEOGRAPH + {0x9F5D, 0x7106}, //5730 #CJK UNIFIED IDEOGRAPH + {0x9F5E, 0x7107}, //5731 #CJK UNIFIED IDEOGRAPH + {0x9F5F, 0x7108}, //5732 #CJK UNIFIED IDEOGRAPH + {0x9F60, 0x710B}, //5733 #CJK UNIFIED IDEOGRAPH + {0x9F61, 0x710C}, //5734 #CJK UNIFIED IDEOGRAPH + {0x9F62, 0x710D}, //5735 #CJK UNIFIED IDEOGRAPH + {0x9F63, 0x710E}, //5736 #CJK UNIFIED IDEOGRAPH + {0x9F64, 0x710F}, //5737 #CJK UNIFIED IDEOGRAPH + {0x9F65, 0x7111}, //5738 #CJK UNIFIED IDEOGRAPH + {0x9F66, 0x7112}, //5739 #CJK UNIFIED IDEOGRAPH + {0x9F67, 0x7114}, //5740 #CJK UNIFIED IDEOGRAPH + {0x9F68, 0x7117}, //5741 #CJK UNIFIED IDEOGRAPH + {0x9F69, 0x711B}, //5742 #CJK UNIFIED IDEOGRAPH + {0x9F6A, 0x711C}, //5743 #CJK UNIFIED IDEOGRAPH + {0x9F6B, 0x711D}, //5744 #CJK UNIFIED IDEOGRAPH + {0x9F6C, 0x711E}, //5745 #CJK UNIFIED IDEOGRAPH + {0x9F6D, 0x711F}, //5746 #CJK UNIFIED IDEOGRAPH + {0x9F6E, 0x7120}, //5747 #CJK UNIFIED IDEOGRAPH + {0x9F6F, 0x7121}, //5748 #CJK UNIFIED IDEOGRAPH + {0x9F70, 0x7122}, //5749 #CJK UNIFIED IDEOGRAPH + {0x9F71, 0x7123}, //5750 #CJK UNIFIED IDEOGRAPH + {0x9F72, 0x7124}, //5751 #CJK UNIFIED IDEOGRAPH + {0x9F73, 0x7125}, //5752 #CJK UNIFIED IDEOGRAPH + {0x9F74, 0x7127}, //5753 #CJK UNIFIED IDEOGRAPH + {0x9F75, 0x7128}, //5754 #CJK UNIFIED IDEOGRAPH + {0x9F76, 0x7129}, //5755 #CJK UNIFIED IDEOGRAPH + {0x9F77, 0x712A}, //5756 #CJK UNIFIED IDEOGRAPH + {0x9F78, 0x712B}, //5757 #CJK UNIFIED IDEOGRAPH + {0x9F79, 0x712C}, //5758 #CJK UNIFIED IDEOGRAPH + {0x9F7A, 0x712D}, //5759 #CJK UNIFIED IDEOGRAPH + {0x9F7B, 0x712E}, //5760 #CJK UNIFIED IDEOGRAPH + {0x9F7C, 0x7132}, //5761 #CJK UNIFIED IDEOGRAPH + {0x9F7D, 0x7133}, //5762 #CJK UNIFIED IDEOGRAPH + {0x9F7E, 0x7134}, //5763 #CJK UNIFIED IDEOGRAPH + {0x9F80, 0x7135}, //5764 #CJK UNIFIED IDEOGRAPH + {0x9F81, 0x7137}, //5765 #CJK UNIFIED IDEOGRAPH + {0x9F82, 0x7138}, //5766 #CJK UNIFIED IDEOGRAPH + {0x9F83, 0x7139}, //5767 #CJK UNIFIED IDEOGRAPH + {0x9F84, 0x713A}, //5768 #CJK UNIFIED IDEOGRAPH + {0x9F85, 0x713B}, //5769 #CJK UNIFIED IDEOGRAPH + {0x9F86, 0x713C}, //5770 #CJK UNIFIED IDEOGRAPH + {0x9F87, 0x713D}, //5771 #CJK UNIFIED IDEOGRAPH + {0x9F88, 0x713E}, //5772 #CJK UNIFIED IDEOGRAPH + {0x9F89, 0x713F}, //5773 #CJK UNIFIED IDEOGRAPH + {0x9F8A, 0x7140}, //5774 #CJK UNIFIED IDEOGRAPH + {0x9F8B, 0x7141}, //5775 #CJK UNIFIED IDEOGRAPH + {0x9F8C, 0x7142}, //5776 #CJK UNIFIED IDEOGRAPH + {0x9F8D, 0x7143}, //5777 #CJK UNIFIED IDEOGRAPH + {0x9F8E, 0x7144}, //5778 #CJK UNIFIED IDEOGRAPH + {0x9F8F, 0x7146}, //5779 #CJK UNIFIED IDEOGRAPH + {0x9F90, 0x7147}, //5780 #CJK UNIFIED IDEOGRAPH + {0x9F91, 0x7148}, //5781 #CJK UNIFIED IDEOGRAPH + {0x9F92, 0x7149}, //5782 #CJK UNIFIED IDEOGRAPH + {0x9F93, 0x714B}, //5783 #CJK UNIFIED IDEOGRAPH + {0x9F94, 0x714D}, //5784 #CJK UNIFIED IDEOGRAPH + {0x9F95, 0x714F}, //5785 #CJK UNIFIED IDEOGRAPH + {0x9F96, 0x7150}, //5786 #CJK UNIFIED IDEOGRAPH + {0x9F97, 0x7151}, //5787 #CJK UNIFIED IDEOGRAPH + {0x9F98, 0x7152}, //5788 #CJK UNIFIED IDEOGRAPH + {0x9F99, 0x7153}, //5789 #CJK UNIFIED IDEOGRAPH + {0x9F9A, 0x7154}, //5790 #CJK UNIFIED IDEOGRAPH + {0x9F9B, 0x7155}, //5791 #CJK UNIFIED IDEOGRAPH + {0x9F9C, 0x7156}, //5792 #CJK UNIFIED IDEOGRAPH + {0x9F9D, 0x7157}, //5793 #CJK UNIFIED IDEOGRAPH + {0x9F9E, 0x7158}, //5794 #CJK UNIFIED IDEOGRAPH + {0x9F9F, 0x7159}, //5795 #CJK UNIFIED IDEOGRAPH + {0x9FA0, 0x715A}, //5796 #CJK UNIFIED IDEOGRAPH + {0x9FA1, 0x715B}, //5797 #CJK UNIFIED IDEOGRAPH + {0x9FA2, 0x715D}, //5798 #CJK UNIFIED IDEOGRAPH + {0x9FA3, 0x715F}, //5799 #CJK UNIFIED IDEOGRAPH + {0x9FA4, 0x7160}, //5800 #CJK UNIFIED IDEOGRAPH + {0x9FA5, 0x7161}, //5801 #CJK UNIFIED IDEOGRAPH + {0x9FA6, 0x7162}, //5802 #CJK UNIFIED IDEOGRAPH + {0x9FA7, 0x7163}, //5803 #CJK UNIFIED IDEOGRAPH + {0x9FA8, 0x7165}, //5804 #CJK UNIFIED IDEOGRAPH + {0x9FA9, 0x7169}, //5805 #CJK UNIFIED IDEOGRAPH + {0x9FAA, 0x716A}, //5806 #CJK UNIFIED IDEOGRAPH + {0x9FAB, 0x716B}, //5807 #CJK UNIFIED IDEOGRAPH + {0x9FAC, 0x716C}, //5808 #CJK UNIFIED IDEOGRAPH + {0x9FAD, 0x716D}, //5809 #CJK UNIFIED IDEOGRAPH + {0x9FAE, 0x716F}, //5810 #CJK UNIFIED IDEOGRAPH + {0x9FAF, 0x7170}, //5811 #CJK UNIFIED IDEOGRAPH + {0x9FB0, 0x7171}, //5812 #CJK UNIFIED IDEOGRAPH + {0x9FB1, 0x7174}, //5813 #CJK UNIFIED IDEOGRAPH + {0x9FB2, 0x7175}, //5814 #CJK UNIFIED IDEOGRAPH + {0x9FB3, 0x7176}, //5815 #CJK UNIFIED IDEOGRAPH + {0x9FB4, 0x7177}, //5816 #CJK UNIFIED IDEOGRAPH + {0x9FB5, 0x7179}, //5817 #CJK UNIFIED IDEOGRAPH + {0x9FB6, 0x717B}, //5818 #CJK UNIFIED IDEOGRAPH + {0x9FB7, 0x717C}, //5819 #CJK UNIFIED IDEOGRAPH + {0x9FB8, 0x717E}, //5820 #CJK UNIFIED IDEOGRAPH + {0x9FB9, 0x717F}, //5821 #CJK UNIFIED IDEOGRAPH + {0x9FBA, 0x7180}, //5822 #CJK UNIFIED IDEOGRAPH + {0x9FBB, 0x7181}, //5823 #CJK UNIFIED IDEOGRAPH + {0x9FBC, 0x7182}, //5824 #CJK UNIFIED IDEOGRAPH + {0x9FBD, 0x7183}, //5825 #CJK UNIFIED IDEOGRAPH + {0x9FBE, 0x7185}, //5826 #CJK UNIFIED IDEOGRAPH + {0x9FBF, 0x7186}, //5827 #CJK UNIFIED IDEOGRAPH + {0x9FC0, 0x7187}, //5828 #CJK UNIFIED IDEOGRAPH + {0x9FC1, 0x7188}, //5829 #CJK UNIFIED IDEOGRAPH + {0x9FC2, 0x7189}, //5830 #CJK UNIFIED IDEOGRAPH + {0x9FC3, 0x718B}, //5831 #CJK UNIFIED IDEOGRAPH + {0x9FC4, 0x718C}, //5832 #CJK UNIFIED IDEOGRAPH + {0x9FC5, 0x718D}, //5833 #CJK UNIFIED IDEOGRAPH + {0x9FC6, 0x718E}, //5834 #CJK UNIFIED IDEOGRAPH + {0x9FC7, 0x7190}, //5835 #CJK UNIFIED IDEOGRAPH + {0x9FC8, 0x7191}, //5836 #CJK UNIFIED IDEOGRAPH + {0x9FC9, 0x7192}, //5837 #CJK UNIFIED IDEOGRAPH + {0x9FCA, 0x7193}, //5838 #CJK UNIFIED IDEOGRAPH + {0x9FCB, 0x7195}, //5839 #CJK UNIFIED IDEOGRAPH + {0x9FCC, 0x7196}, //5840 #CJK UNIFIED IDEOGRAPH + {0x9FCD, 0x7197}, //5841 #CJK UNIFIED IDEOGRAPH + {0x9FCE, 0x719A}, //5842 #CJK UNIFIED IDEOGRAPH + {0x9FCF, 0x719B}, //5843 #CJK UNIFIED IDEOGRAPH + {0x9FD0, 0x719C}, //5844 #CJK UNIFIED IDEOGRAPH + {0x9FD1, 0x719D}, //5845 #CJK UNIFIED IDEOGRAPH + {0x9FD2, 0x719E}, //5846 #CJK UNIFIED IDEOGRAPH + {0x9FD3, 0x71A1}, //5847 #CJK UNIFIED IDEOGRAPH + {0x9FD4, 0x71A2}, //5848 #CJK UNIFIED IDEOGRAPH + {0x9FD5, 0x71A3}, //5849 #CJK UNIFIED IDEOGRAPH + {0x9FD6, 0x71A4}, //5850 #CJK UNIFIED IDEOGRAPH + {0x9FD7, 0x71A5}, //5851 #CJK UNIFIED IDEOGRAPH + {0x9FD8, 0x71A6}, //5852 #CJK UNIFIED IDEOGRAPH + {0x9FD9, 0x71A7}, //5853 #CJK UNIFIED IDEOGRAPH + {0x9FDA, 0x71A9}, //5854 #CJK UNIFIED IDEOGRAPH + {0x9FDB, 0x71AA}, //5855 #CJK UNIFIED IDEOGRAPH + {0x9FDC, 0x71AB}, //5856 #CJK UNIFIED IDEOGRAPH + {0x9FDD, 0x71AD}, //5857 #CJK UNIFIED IDEOGRAPH + {0x9FDE, 0x71AE}, //5858 #CJK UNIFIED IDEOGRAPH + {0x9FDF, 0x71AF}, //5859 #CJK UNIFIED IDEOGRAPH + {0x9FE0, 0x71B0}, //5860 #CJK UNIFIED IDEOGRAPH + {0x9FE1, 0x71B1}, //5861 #CJK UNIFIED IDEOGRAPH + {0x9FE2, 0x71B2}, //5862 #CJK UNIFIED IDEOGRAPH + {0x9FE3, 0x71B4}, //5863 #CJK UNIFIED IDEOGRAPH + {0x9FE4, 0x71B6}, //5864 #CJK UNIFIED IDEOGRAPH + {0x9FE5, 0x71B7}, //5865 #CJK UNIFIED IDEOGRAPH + {0x9FE6, 0x71B8}, //5866 #CJK UNIFIED IDEOGRAPH + {0x9FE7, 0x71BA}, //5867 #CJK UNIFIED IDEOGRAPH + {0x9FE8, 0x71BB}, //5868 #CJK UNIFIED IDEOGRAPH + {0x9FE9, 0x71BC}, //5869 #CJK UNIFIED IDEOGRAPH + {0x9FEA, 0x71BD}, //5870 #CJK UNIFIED IDEOGRAPH + {0x9FEB, 0x71BE}, //5871 #CJK UNIFIED IDEOGRAPH + {0x9FEC, 0x71BF}, //5872 #CJK UNIFIED IDEOGRAPH + {0x9FED, 0x71C0}, //5873 #CJK UNIFIED IDEOGRAPH + {0x9FEE, 0x71C1}, //5874 #CJK UNIFIED IDEOGRAPH + {0x9FEF, 0x71C2}, //5875 #CJK UNIFIED IDEOGRAPH + {0x9FF0, 0x71C4}, //5876 #CJK UNIFIED IDEOGRAPH + {0x9FF1, 0x71C5}, //5877 #CJK UNIFIED IDEOGRAPH + {0x9FF2, 0x71C6}, //5878 #CJK UNIFIED IDEOGRAPH + {0x9FF3, 0x71C7}, //5879 #CJK UNIFIED IDEOGRAPH + {0x9FF4, 0x71C8}, //5880 #CJK UNIFIED IDEOGRAPH + {0x9FF5, 0x71C9}, //5881 #CJK UNIFIED IDEOGRAPH + {0x9FF6, 0x71CA}, //5882 #CJK UNIFIED IDEOGRAPH + {0x9FF7, 0x71CB}, //5883 #CJK UNIFIED IDEOGRAPH + {0x9FF8, 0x71CC}, //5884 #CJK UNIFIED IDEOGRAPH + {0x9FF9, 0x71CD}, //5885 #CJK UNIFIED IDEOGRAPH + {0x9FFA, 0x71CF}, //5886 #CJK UNIFIED IDEOGRAPH + {0x9FFB, 0x71D0}, //5887 #CJK UNIFIED IDEOGRAPH + {0x9FFC, 0x71D1}, //5888 #CJK UNIFIED IDEOGRAPH + {0x9FFD, 0x71D2}, //5889 #CJK UNIFIED IDEOGRAPH + {0x9FFE, 0x71D3}, //5890 #CJK UNIFIED IDEOGRAPH + {0xA040, 0x71D6}, //5891 #CJK UNIFIED IDEOGRAPH + {0xA041, 0x71D7}, //5892 #CJK UNIFIED IDEOGRAPH + {0xA042, 0x71D8}, //5893 #CJK UNIFIED IDEOGRAPH + {0xA043, 0x71D9}, //5894 #CJK UNIFIED IDEOGRAPH + {0xA044, 0x71DA}, //5895 #CJK UNIFIED IDEOGRAPH + {0xA045, 0x71DB}, //5896 #CJK UNIFIED IDEOGRAPH + {0xA046, 0x71DC}, //5897 #CJK UNIFIED IDEOGRAPH + {0xA047, 0x71DD}, //5898 #CJK UNIFIED IDEOGRAPH + {0xA048, 0x71DE}, //5899 #CJK UNIFIED IDEOGRAPH + {0xA049, 0x71DF}, //5900 #CJK UNIFIED IDEOGRAPH + {0xA04A, 0x71E1}, //5901 #CJK UNIFIED IDEOGRAPH + {0xA04B, 0x71E2}, //5902 #CJK UNIFIED IDEOGRAPH + {0xA04C, 0x71E3}, //5903 #CJK UNIFIED IDEOGRAPH + {0xA04D, 0x71E4}, //5904 #CJK UNIFIED IDEOGRAPH + {0xA04E, 0x71E6}, //5905 #CJK UNIFIED IDEOGRAPH + {0xA04F, 0x71E8}, //5906 #CJK UNIFIED IDEOGRAPH + {0xA050, 0x71E9}, //5907 #CJK UNIFIED IDEOGRAPH + {0xA051, 0x71EA}, //5908 #CJK UNIFIED IDEOGRAPH + {0xA052, 0x71EB}, //5909 #CJK UNIFIED IDEOGRAPH + {0xA053, 0x71EC}, //5910 #CJK UNIFIED IDEOGRAPH + {0xA054, 0x71ED}, //5911 #CJK UNIFIED IDEOGRAPH + {0xA055, 0x71EF}, //5912 #CJK UNIFIED IDEOGRAPH + {0xA056, 0x71F0}, //5913 #CJK UNIFIED IDEOGRAPH + {0xA057, 0x71F1}, //5914 #CJK UNIFIED IDEOGRAPH + {0xA058, 0x71F2}, //5915 #CJK UNIFIED IDEOGRAPH + {0xA059, 0x71F3}, //5916 #CJK UNIFIED IDEOGRAPH + {0xA05A, 0x71F4}, //5917 #CJK UNIFIED IDEOGRAPH + {0xA05B, 0x71F5}, //5918 #CJK UNIFIED IDEOGRAPH + {0xA05C, 0x71F6}, //5919 #CJK UNIFIED IDEOGRAPH + {0xA05D, 0x71F7}, //5920 #CJK UNIFIED IDEOGRAPH + {0xA05E, 0x71F8}, //5921 #CJK UNIFIED IDEOGRAPH + {0xA05F, 0x71FA}, //5922 #CJK UNIFIED IDEOGRAPH + {0xA060, 0x71FB}, //5923 #CJK UNIFIED IDEOGRAPH + {0xA061, 0x71FC}, //5924 #CJK UNIFIED IDEOGRAPH + {0xA062, 0x71FD}, //5925 #CJK UNIFIED IDEOGRAPH + {0xA063, 0x71FE}, //5926 #CJK UNIFIED IDEOGRAPH + {0xA064, 0x71FF}, //5927 #CJK UNIFIED IDEOGRAPH + {0xA065, 0x7200}, //5928 #CJK UNIFIED IDEOGRAPH + {0xA066, 0x7201}, //5929 #CJK UNIFIED IDEOGRAPH + {0xA067, 0x7202}, //5930 #CJK UNIFIED IDEOGRAPH + {0xA068, 0x7203}, //5931 #CJK UNIFIED IDEOGRAPH + {0xA069, 0x7204}, //5932 #CJK UNIFIED IDEOGRAPH + {0xA06A, 0x7205}, //5933 #CJK UNIFIED IDEOGRAPH + {0xA06B, 0x7207}, //5934 #CJK UNIFIED IDEOGRAPH + {0xA06C, 0x7208}, //5935 #CJK UNIFIED IDEOGRAPH + {0xA06D, 0x7209}, //5936 #CJK UNIFIED IDEOGRAPH + {0xA06E, 0x720A}, //5937 #CJK UNIFIED IDEOGRAPH + {0xA06F, 0x720B}, //5938 #CJK UNIFIED IDEOGRAPH + {0xA070, 0x720C}, //5939 #CJK UNIFIED IDEOGRAPH + {0xA071, 0x720D}, //5940 #CJK UNIFIED IDEOGRAPH + {0xA072, 0x720E}, //5941 #CJK UNIFIED IDEOGRAPH + {0xA073, 0x720F}, //5942 #CJK UNIFIED IDEOGRAPH + {0xA074, 0x7210}, //5943 #CJK UNIFIED IDEOGRAPH + {0xA075, 0x7211}, //5944 #CJK UNIFIED IDEOGRAPH + {0xA076, 0x7212}, //5945 #CJK UNIFIED IDEOGRAPH + {0xA077, 0x7213}, //5946 #CJK UNIFIED IDEOGRAPH + {0xA078, 0x7214}, //5947 #CJK UNIFIED IDEOGRAPH + {0xA079, 0x7215}, //5948 #CJK UNIFIED IDEOGRAPH + {0xA07A, 0x7216}, //5949 #CJK UNIFIED IDEOGRAPH + {0xA07B, 0x7217}, //5950 #CJK UNIFIED IDEOGRAPH + {0xA07C, 0x7218}, //5951 #CJK UNIFIED IDEOGRAPH + {0xA07D, 0x7219}, //5952 #CJK UNIFIED IDEOGRAPH + {0xA07E, 0x721A}, //5953 #CJK UNIFIED IDEOGRAPH + {0xA080, 0x721B}, //5954 #CJK UNIFIED IDEOGRAPH + {0xA081, 0x721C}, //5955 #CJK UNIFIED IDEOGRAPH + {0xA082, 0x721E}, //5956 #CJK UNIFIED IDEOGRAPH + {0xA083, 0x721F}, //5957 #CJK UNIFIED IDEOGRAPH + {0xA084, 0x7220}, //5958 #CJK UNIFIED IDEOGRAPH + {0xA085, 0x7221}, //5959 #CJK UNIFIED IDEOGRAPH + {0xA086, 0x7222}, //5960 #CJK UNIFIED IDEOGRAPH + {0xA087, 0x7223}, //5961 #CJK UNIFIED IDEOGRAPH + {0xA088, 0x7224}, //5962 #CJK UNIFIED IDEOGRAPH + {0xA089, 0x7225}, //5963 #CJK UNIFIED IDEOGRAPH + {0xA08A, 0x7226}, //5964 #CJK UNIFIED IDEOGRAPH + {0xA08B, 0x7227}, //5965 #CJK UNIFIED IDEOGRAPH + {0xA08C, 0x7229}, //5966 #CJK UNIFIED IDEOGRAPH + {0xA08D, 0x722B}, //5967 #CJK UNIFIED IDEOGRAPH + {0xA08E, 0x722D}, //5968 #CJK UNIFIED IDEOGRAPH + {0xA08F, 0x722E}, //5969 #CJK UNIFIED IDEOGRAPH + {0xA090, 0x722F}, //5970 #CJK UNIFIED IDEOGRAPH + {0xA091, 0x7232}, //5971 #CJK UNIFIED IDEOGRAPH + {0xA092, 0x7233}, //5972 #CJK UNIFIED IDEOGRAPH + {0xA093, 0x7234}, //5973 #CJK UNIFIED IDEOGRAPH + {0xA094, 0x723A}, //5974 #CJK UNIFIED IDEOGRAPH + {0xA095, 0x723C}, //5975 #CJK UNIFIED IDEOGRAPH + {0xA096, 0x723E}, //5976 #CJK UNIFIED IDEOGRAPH + {0xA097, 0x7240}, //5977 #CJK UNIFIED IDEOGRAPH + {0xA098, 0x7241}, //5978 #CJK UNIFIED IDEOGRAPH + {0xA099, 0x7242}, //5979 #CJK UNIFIED IDEOGRAPH + {0xA09A, 0x7243}, //5980 #CJK UNIFIED IDEOGRAPH + {0xA09B, 0x7244}, //5981 #CJK UNIFIED IDEOGRAPH + {0xA09C, 0x7245}, //5982 #CJK UNIFIED IDEOGRAPH + {0xA09D, 0x7246}, //5983 #CJK UNIFIED IDEOGRAPH + {0xA09E, 0x7249}, //5984 #CJK UNIFIED IDEOGRAPH + {0xA09F, 0x724A}, //5985 #CJK UNIFIED IDEOGRAPH + {0xA0A0, 0x724B}, //5986 #CJK UNIFIED IDEOGRAPH + {0xA0A1, 0x724E}, //5987 #CJK UNIFIED IDEOGRAPH + {0xA0A2, 0x724F}, //5988 #CJK UNIFIED IDEOGRAPH + {0xA0A3, 0x7250}, //5989 #CJK UNIFIED IDEOGRAPH + {0xA0A4, 0x7251}, //5990 #CJK UNIFIED IDEOGRAPH + {0xA0A5, 0x7253}, //5991 #CJK UNIFIED IDEOGRAPH + {0xA0A6, 0x7254}, //5992 #CJK UNIFIED IDEOGRAPH + {0xA0A7, 0x7255}, //5993 #CJK UNIFIED IDEOGRAPH + {0xA0A8, 0x7257}, //5994 #CJK UNIFIED IDEOGRAPH + {0xA0A9, 0x7258}, //5995 #CJK UNIFIED IDEOGRAPH + {0xA0AA, 0x725A}, //5996 #CJK UNIFIED IDEOGRAPH + {0xA0AB, 0x725C}, //5997 #CJK UNIFIED IDEOGRAPH + {0xA0AC, 0x725E}, //5998 #CJK UNIFIED IDEOGRAPH + {0xA0AD, 0x7260}, //5999 #CJK UNIFIED IDEOGRAPH + {0xA0AE, 0x7263}, //6000 #CJK UNIFIED IDEOGRAPH + {0xA0AF, 0x7264}, //6001 #CJK UNIFIED IDEOGRAPH + {0xA0B0, 0x7265}, //6002 #CJK UNIFIED IDEOGRAPH + {0xA0B1, 0x7268}, //6003 #CJK UNIFIED IDEOGRAPH + {0xA0B2, 0x726A}, //6004 #CJK UNIFIED IDEOGRAPH + {0xA0B3, 0x726B}, //6005 #CJK UNIFIED IDEOGRAPH + {0xA0B4, 0x726C}, //6006 #CJK UNIFIED IDEOGRAPH + {0xA0B5, 0x726D}, //6007 #CJK UNIFIED IDEOGRAPH + {0xA0B6, 0x7270}, //6008 #CJK UNIFIED IDEOGRAPH + {0xA0B7, 0x7271}, //6009 #CJK UNIFIED IDEOGRAPH + {0xA0B8, 0x7273}, //6010 #CJK UNIFIED IDEOGRAPH + {0xA0B9, 0x7274}, //6011 #CJK UNIFIED IDEOGRAPH + {0xA0BA, 0x7276}, //6012 #CJK UNIFIED IDEOGRAPH + {0xA0BB, 0x7277}, //6013 #CJK UNIFIED IDEOGRAPH + {0xA0BC, 0x7278}, //6014 #CJK UNIFIED IDEOGRAPH + {0xA0BD, 0x727B}, //6015 #CJK UNIFIED IDEOGRAPH + {0xA0BE, 0x727C}, //6016 #CJK UNIFIED IDEOGRAPH + {0xA0BF, 0x727D}, //6017 #CJK UNIFIED IDEOGRAPH + {0xA0C0, 0x7282}, //6018 #CJK UNIFIED IDEOGRAPH + {0xA0C1, 0x7283}, //6019 #CJK UNIFIED IDEOGRAPH + {0xA0C2, 0x7285}, //6020 #CJK UNIFIED IDEOGRAPH + {0xA0C3, 0x7286}, //6021 #CJK UNIFIED IDEOGRAPH + {0xA0C4, 0x7287}, //6022 #CJK UNIFIED IDEOGRAPH + {0xA0C5, 0x7288}, //6023 #CJK UNIFIED IDEOGRAPH + {0xA0C6, 0x7289}, //6024 #CJK UNIFIED IDEOGRAPH + {0xA0C7, 0x728C}, //6025 #CJK UNIFIED IDEOGRAPH + {0xA0C8, 0x728E}, //6026 #CJK UNIFIED IDEOGRAPH + {0xA0C9, 0x7290}, //6027 #CJK UNIFIED IDEOGRAPH + {0xA0CA, 0x7291}, //6028 #CJK UNIFIED IDEOGRAPH + {0xA0CB, 0x7293}, //6029 #CJK UNIFIED IDEOGRAPH + {0xA0CC, 0x7294}, //6030 #CJK UNIFIED IDEOGRAPH + {0xA0CD, 0x7295}, //6031 #CJK UNIFIED IDEOGRAPH + {0xA0CE, 0x7296}, //6032 #CJK UNIFIED IDEOGRAPH + {0xA0CF, 0x7297}, //6033 #CJK UNIFIED IDEOGRAPH + {0xA0D0, 0x7298}, //6034 #CJK UNIFIED IDEOGRAPH + {0xA0D1, 0x7299}, //6035 #CJK UNIFIED IDEOGRAPH + {0xA0D2, 0x729A}, //6036 #CJK UNIFIED IDEOGRAPH + {0xA0D3, 0x729B}, //6037 #CJK UNIFIED IDEOGRAPH + {0xA0D4, 0x729C}, //6038 #CJK UNIFIED IDEOGRAPH + {0xA0D5, 0x729D}, //6039 #CJK UNIFIED IDEOGRAPH + {0xA0D6, 0x729E}, //6040 #CJK UNIFIED IDEOGRAPH + {0xA0D7, 0x72A0}, //6041 #CJK UNIFIED IDEOGRAPH + {0xA0D8, 0x72A1}, //6042 #CJK UNIFIED IDEOGRAPH + {0xA0D9, 0x72A2}, //6043 #CJK UNIFIED IDEOGRAPH + {0xA0DA, 0x72A3}, //6044 #CJK UNIFIED IDEOGRAPH + {0xA0DB, 0x72A4}, //6045 #CJK UNIFIED IDEOGRAPH + {0xA0DC, 0x72A5}, //6046 #CJK UNIFIED IDEOGRAPH + {0xA0DD, 0x72A6}, //6047 #CJK UNIFIED IDEOGRAPH + {0xA0DE, 0x72A7}, //6048 #CJK UNIFIED IDEOGRAPH + {0xA0DF, 0x72A8}, //6049 #CJK UNIFIED IDEOGRAPH + {0xA0E0, 0x72A9}, //6050 #CJK UNIFIED IDEOGRAPH + {0xA0E1, 0x72AA}, //6051 #CJK UNIFIED IDEOGRAPH + {0xA0E2, 0x72AB}, //6052 #CJK UNIFIED IDEOGRAPH + {0xA0E3, 0x72AE}, //6053 #CJK UNIFIED IDEOGRAPH + {0xA0E4, 0x72B1}, //6054 #CJK UNIFIED IDEOGRAPH + {0xA0E5, 0x72B2}, //6055 #CJK UNIFIED IDEOGRAPH + {0xA0E6, 0x72B3}, //6056 #CJK UNIFIED IDEOGRAPH + {0xA0E7, 0x72B5}, //6057 #CJK UNIFIED IDEOGRAPH + {0xA0E8, 0x72BA}, //6058 #CJK UNIFIED IDEOGRAPH + {0xA0E9, 0x72BB}, //6059 #CJK UNIFIED IDEOGRAPH + {0xA0EA, 0x72BC}, //6060 #CJK UNIFIED IDEOGRAPH + {0xA0EB, 0x72BD}, //6061 #CJK UNIFIED IDEOGRAPH + {0xA0EC, 0x72BE}, //6062 #CJK UNIFIED IDEOGRAPH + {0xA0ED, 0x72BF}, //6063 #CJK UNIFIED IDEOGRAPH + {0xA0EE, 0x72C0}, //6064 #CJK UNIFIED IDEOGRAPH + {0xA0EF, 0x72C5}, //6065 #CJK UNIFIED IDEOGRAPH + {0xA0F0, 0x72C6}, //6066 #CJK UNIFIED IDEOGRAPH + {0xA0F1, 0x72C7}, //6067 #CJK UNIFIED IDEOGRAPH + {0xA0F2, 0x72C9}, //6068 #CJK UNIFIED IDEOGRAPH + {0xA0F3, 0x72CA}, //6069 #CJK UNIFIED IDEOGRAPH + {0xA0F4, 0x72CB}, //6070 #CJK UNIFIED IDEOGRAPH + {0xA0F5, 0x72CC}, //6071 #CJK UNIFIED IDEOGRAPH + {0xA0F6, 0x72CF}, //6072 #CJK UNIFIED IDEOGRAPH + {0xA0F7, 0x72D1}, //6073 #CJK UNIFIED IDEOGRAPH + {0xA0F8, 0x72D3}, //6074 #CJK UNIFIED IDEOGRAPH + {0xA0F9, 0x72D4}, //6075 #CJK UNIFIED IDEOGRAPH + {0xA0FA, 0x72D5}, //6076 #CJK UNIFIED IDEOGRAPH + {0xA0FB, 0x72D6}, //6077 #CJK UNIFIED IDEOGRAPH + {0xA0FC, 0x72D8}, //6078 #CJK UNIFIED IDEOGRAPH + {0xA0FD, 0x72DA}, //6079 #CJK UNIFIED IDEOGRAPH + {0xA0FE, 0x72DB}, //6080 #CJK UNIFIED IDEOGRAPH + {0xA1A1, 0x3000}, //6081 #IDEOGRAPHIC SPACE + {0xA1A2, 0x3001}, //6082 #IDEOGRAPHIC COMMA + {0xA1A3, 0x3002}, //6083 #IDEOGRAPHIC FULL STOP + {0xA1A4, 0x00B7}, //6084 #MIDDLE DOT + {0xA1A5, 0x02C9}, //6085 #MODIFIER LETTER MACRON + {0xA1A6, 0x02C7}, //6086 #CARON + {0xA1A7, 0x00A8}, //6087 #DIAERESIS + {0xA1A8, 0x3003}, //6088 #DITTO MARK + {0xA1A9, 0x3005}, //6089 #IDEOGRAPHIC ITERATION MARK + {0xA1AA, 0x2014}, //6090 #EM DASH + {0xA1AB, 0xFF5E}, //6091 #FULLWIDTH TILDE + {0xA1AC, 0x2016}, //6092 #DOUBLE VERTICAL LINE + {0xA1AD, 0x2026}, //6093 #HORIZONTAL ELLIPSIS + {0xA1AE, 0x2018}, //6094 #LEFT SINGLE QUOTATION MARK + {0xA1AF, 0x2019}, //6095 #RIGHT SINGLE QUOTATION MARK + {0xA1B0, 0x201C}, //6096 #LEFT DOUBLE QUOTATION MARK + {0xA1B1, 0x201D}, //6097 #RIGHT DOUBLE QUOTATION MARK + {0xA1B2, 0x3014}, //6098 #LEFT TORTOISE SHELL BRACKET + {0xA1B3, 0x3015}, //6099 #RIGHT TORTOISE SHELL BRACKET + {0xA1B4, 0x3008}, //6100 #LEFT ANGLE BRACKET + {0xA1B5, 0x3009}, //6101 #RIGHT ANGLE BRACKET + {0xA1B6, 0x300A}, //6102 #LEFT DOUBLE ANGLE BRACKET + {0xA1B7, 0x300B}, //6103 #RIGHT DOUBLE ANGLE BRACKET + {0xA1B8, 0x300C}, //6104 #LEFT CORNER BRACKET + {0xA1B9, 0x300D}, //6105 #RIGHT CORNER BRACKET + {0xA1BA, 0x300E}, //6106 #LEFT WHITE CORNER BRACKET + {0xA1BB, 0x300F}, //6107 #RIGHT WHITE CORNER BRACKET + {0xA1BC, 0x3016}, //6108 #LEFT WHITE LENTICULAR BRACKET + {0xA1BD, 0x3017}, //6109 #RIGHT WHITE LENTICULAR BRACKET + {0xA1BE, 0x3010}, //6110 #LEFT BLACK LENTICULAR BRACKET + {0xA1BF, 0x3011}, //6111 #RIGHT BLACK LENTICULAR BRACKET + {0xA1C0, 0x00B1}, //6112 #PLUS-MINUS SIGN + {0xA1C1, 0x00D7}, //6113 #MULTIPLICATION SIGN + {0xA1C2, 0x00F7}, //6114 #DIVISION SIGN + {0xA1C3, 0x2236}, //6115 #RATIO + {0xA1C4, 0x2227}, //6116 #LOGICAL AND + {0xA1C5, 0x2228}, //6117 #LOGICAL OR + {0xA1C6, 0x2211}, //6118 #N-ARY SUMMATION + {0xA1C7, 0x220F}, //6119 #N-ARY PRODUCT + {0xA1C8, 0x222A}, //6120 #UNION + {0xA1C9, 0x2229}, //6121 #INTERSECTION + {0xA1CA, 0x2208}, //6122 #ELEMENT OF + {0xA1CB, 0x2237}, //6123 #PROPORTION + {0xA1CC, 0x221A}, //6124 #SQUARE ROOT + {0xA1CD, 0x22A5}, //6125 #UP TACK + {0xA1CE, 0x2225}, //6126 #PARALLEL TO + {0xA1CF, 0x2220}, //6127 #ANGLE + {0xA1D0, 0x2312}, //6128 #ARC + {0xA1D1, 0x2299}, //6129 #CIRCLED DOT OPERATOR + {0xA1D2, 0x222B}, //6130 #INTEGRAL + {0xA1D3, 0x222E}, //6131 #CONTOUR INTEGRAL + {0xA1D4, 0x2261}, //6132 #IDENTICAL TO + {0xA1D5, 0x224C}, //6133 #ALL EQUAL TO + {0xA1D6, 0x2248}, //6134 #ALMOST EQUAL TO + {0xA1D7, 0x223D}, //6135 #REVERSED TILDE + {0xA1D8, 0x221D}, //6136 #PROPORTIONAL TO + {0xA1D9, 0x2260}, //6137 #NOT EQUAL TO + {0xA1DA, 0x226E}, //6138 #NOT LESS-THAN + {0xA1DB, 0x226F}, //6139 #NOT GREATER-THAN + {0xA1DC, 0x2264}, //6140 #LESS-THAN OR EQUAL TO + {0xA1DD, 0x2265}, //6141 #GREATER-THAN OR EQUAL TO + {0xA1DE, 0x221E}, //6142 #INFINITY + {0xA1DF, 0x2235}, //6143 #BECAUSE + {0xA1E0, 0x2234}, //6144 #THEREFORE + {0xA1E1, 0x2642}, //6145 #MALE SIGN + {0xA1E2, 0x2640}, //6146 #FEMALE SIGN + {0xA1E3, 0x00B0}, //6147 #DEGREE SIGN + {0xA1E4, 0x2032}, //6148 #PRIME + {0xA1E5, 0x2033}, //6149 #DOUBLE PRIME + {0xA1E6, 0x2103}, //6150 #DEGREE CELSIUS + {0xA1E7, 0xFF04}, //6151 #FULLWIDTH DOLLAR SIGN + {0xA1E8, 0x00A4}, //6152 #CURRENCY SIGN + {0xA1E9, 0xFFE0}, //6153 #FULLWIDTH CENT SIGN + {0xA1EA, 0xFFE1}, //6154 #FULLWIDTH POUND SIGN + {0xA1EB, 0x2030}, //6155 #PER MILLE SIGN + {0xA1EC, 0x00A7}, //6156 #SECTION SIGN + {0xA1ED, 0x2116}, //6157 #NUMERO SIGN + {0xA1EE, 0x2606}, //6158 #WHITE STAR + {0xA1EF, 0x2605}, //6159 #BLACK STAR + {0xA1F0, 0x25CB}, //6160 #WHITE CIRCLE + {0xA1F1, 0x25CF}, //6161 #BLACK CIRCLE + {0xA1F2, 0x25CE}, //6162 #BULLSEYE + {0xA1F3, 0x25C7}, //6163 #WHITE DIAMOND + {0xA1F4, 0x25C6}, //6164 #BLACK DIAMOND + {0xA1F5, 0x25A1}, //6165 #WHITE SQUARE + {0xA1F6, 0x25A0}, //6166 #BLACK SQUARE + {0xA1F7, 0x25B3}, //6167 #WHITE UP-POINTING TRIANGLE + {0xA1F8, 0x25B2}, //6168 #BLACK UP-POINTING TRIANGLE + {0xA1F9, 0x203B}, //6169 #REFERENCE MARK + {0xA1FA, 0x2192}, //6170 #RIGHTWARDS ARROW + {0xA1FB, 0x2190}, //6171 #LEFTWARDS ARROW + {0xA1FC, 0x2191}, //6172 #UPWARDS ARROW + {0xA1FD, 0x2193}, //6173 #DOWNWARDS ARROW + {0xA1FE, 0x3013}, //6174 #GETA MARK + {0xA2A1, 0x2170}, //6175 #SMALL ROMAN NUMERAL ONE + {0xA2A2, 0x2171}, //6176 #SMALL ROMAN NUMERAL TWO + {0xA2A3, 0x2172}, //6177 #SMALL ROMAN NUMERAL THREE + {0xA2A4, 0x2173}, //6178 #SMALL ROMAN NUMERAL FOUR + {0xA2A5, 0x2174}, //6179 #SMALL ROMAN NUMERAL FIVE + {0xA2A6, 0x2175}, //6180 #SMALL ROMAN NUMERAL SIX + {0xA2A7, 0x2176}, //6181 #SMALL ROMAN NUMERAL SEVEN + {0xA2A8, 0x2177}, //6182 #SMALL ROMAN NUMERAL EIGHT + {0xA2A9, 0x2178}, //6183 #SMALL ROMAN NUMERAL NINE + {0xA2AA, 0x2179}, //6184 #SMALL ROMAN NUMERAL TEN + {0xA2B1, 0x2488}, //6185 #DIGIT ONE FULL STOP + {0xA2B2, 0x2489}, //6186 #DIGIT TWO FULL STOP + {0xA2B3, 0x248A}, //6187 #DIGIT THREE FULL STOP + {0xA2B4, 0x248B}, //6188 #DIGIT FOUR FULL STOP + {0xA2B5, 0x248C}, //6189 #DIGIT FIVE FULL STOP + {0xA2B6, 0x248D}, //6190 #DIGIT SIX FULL STOP + {0xA2B7, 0x248E}, //6191 #DIGIT SEVEN FULL STOP + {0xA2B8, 0x248F}, //6192 #DIGIT EIGHT FULL STOP + {0xA2B9, 0x2490}, //6193 #DIGIT NINE FULL STOP + {0xA2BA, 0x2491}, //6194 #NUMBER TEN FULL STOP + {0xA2BB, 0x2492}, //6195 #NUMBER ELEVEN FULL STOP + {0xA2BC, 0x2493}, //6196 #NUMBER TWELVE FULL STOP + {0xA2BD, 0x2494}, //6197 #NUMBER THIRTEEN FULL STOP + {0xA2BE, 0x2495}, //6198 #NUMBER FOURTEEN FULL STOP + {0xA2BF, 0x2496}, //6199 #NUMBER FIFTEEN FULL STOP + {0xA2C0, 0x2497}, //6200 #NUMBER SIXTEEN FULL STOP + {0xA2C1, 0x2498}, //6201 #NUMBER SEVENTEEN FULL STOP + {0xA2C2, 0x2499}, //6202 #NUMBER EIGHTEEN FULL STOP + {0xA2C3, 0x249A}, //6203 #NUMBER NINETEEN FULL STOP + {0xA2C4, 0x249B}, //6204 #NUMBER TWENTY FULL STOP + {0xA2C5, 0x2474}, //6205 #PARENTHESIZED DIGIT ONE + {0xA2C6, 0x2475}, //6206 #PARENTHESIZED DIGIT TWO + {0xA2C7, 0x2476}, //6207 #PARENTHESIZED DIGIT THREE + {0xA2C8, 0x2477}, //6208 #PARENTHESIZED DIGIT FOUR + {0xA2C9, 0x2478}, //6209 #PARENTHESIZED DIGIT FIVE + {0xA2CA, 0x2479}, //6210 #PARENTHESIZED DIGIT SIX + {0xA2CB, 0x247A}, //6211 #PARENTHESIZED DIGIT SEVEN + {0xA2CC, 0x247B}, //6212 #PARENTHESIZED DIGIT EIGHT + {0xA2CD, 0x247C}, //6213 #PARENTHESIZED DIGIT NINE + {0xA2CE, 0x247D}, //6214 #PARENTHESIZED NUMBER TEN + {0xA2CF, 0x247E}, //6215 #PARENTHESIZED NUMBER ELEVEN + {0xA2D0, 0x247F}, //6216 #PARENTHESIZED NUMBER TWELVE + {0xA2D1, 0x2480}, //6217 #PARENTHESIZED NUMBER THIRTEEN + {0xA2D2, 0x2481}, //6218 #PARENTHESIZED NUMBER FOURTEEN + {0xA2D3, 0x2482}, //6219 #PARENTHESIZED NUMBER FIFTEEN + {0xA2D4, 0x2483}, //6220 #PARENTHESIZED NUMBER SIXTEEN + {0xA2D5, 0x2484}, //6221 #PARENTHESIZED NUMBER SEVENTEEN + {0xA2D6, 0x2485}, //6222 #PARENTHESIZED NUMBER EIGHTEEN + {0xA2D7, 0x2486}, //6223 #PARENTHESIZED NUMBER NINETEEN + {0xA2D8, 0x2487}, //6224 #PARENTHESIZED NUMBER TWENTY + {0xA2D9, 0x2460}, //6225 #CIRCLED DIGIT ONE + {0xA2DA, 0x2461}, //6226 #CIRCLED DIGIT TWO + {0xA2DB, 0x2462}, //6227 #CIRCLED DIGIT THREE + {0xA2DC, 0x2463}, //6228 #CIRCLED DIGIT FOUR + {0xA2DD, 0x2464}, //6229 #CIRCLED DIGIT FIVE + {0xA2DE, 0x2465}, //6230 #CIRCLED DIGIT SIX + {0xA2DF, 0x2466}, //6231 #CIRCLED DIGIT SEVEN + {0xA2E0, 0x2467}, //6232 #CIRCLED DIGIT EIGHT + {0xA2E1, 0x2468}, //6233 #CIRCLED DIGIT NINE + {0xA2E2, 0x2469}, //6234 #CIRCLED NUMBER TEN + {0xA2E5, 0x3220}, //6235 #PARENTHESIZED IDEOGRAPH ONE + {0xA2E6, 0x3221}, //6236 #PARENTHESIZED IDEOGRAPH TWO + {0xA2E7, 0x3222}, //6237 #PARENTHESIZED IDEOGRAPH THREE + {0xA2E8, 0x3223}, //6238 #PARENTHESIZED IDEOGRAPH FOUR + {0xA2E9, 0x3224}, //6239 #PARENTHESIZED IDEOGRAPH FIVE + {0xA2EA, 0x3225}, //6240 #PARENTHESIZED IDEOGRAPH SIX + {0xA2EB, 0x3226}, //6241 #PARENTHESIZED IDEOGRAPH SEVEN + {0xA2EC, 0x3227}, //6242 #PARENTHESIZED IDEOGRAPH EIGHT + {0xA2ED, 0x3228}, //6243 #PARENTHESIZED IDEOGRAPH NINE + {0xA2EE, 0x3229}, //6244 #PARENTHESIZED IDEOGRAPH TEN + {0xA2F1, 0x2160}, //6245 #ROMAN NUMERAL ONE + {0xA2F2, 0x2161}, //6246 #ROMAN NUMERAL TWO + {0xA2F3, 0x2162}, //6247 #ROMAN NUMERAL THREE + {0xA2F4, 0x2163}, //6248 #ROMAN NUMERAL FOUR + {0xA2F5, 0x2164}, //6249 #ROMAN NUMERAL FIVE + {0xA2F6, 0x2165}, //6250 #ROMAN NUMERAL SIX + {0xA2F7, 0x2166}, //6251 #ROMAN NUMERAL SEVEN + {0xA2F8, 0x2167}, //6252 #ROMAN NUMERAL EIGHT + {0xA2F9, 0x2168}, //6253 #ROMAN NUMERAL NINE + {0xA2FA, 0x2169}, //6254 #ROMAN NUMERAL TEN + {0xA2FB, 0x216A}, //6255 #ROMAN NUMERAL ELEVEN + {0xA2FC, 0x216B}, //6256 #ROMAN NUMERAL TWELVE + {0xA3A1, 0xFF01}, //6257 #FULLWIDTH EXCLAMATION MARK + {0xA3A2, 0xFF02}, //6258 #FULLWIDTH QUOTATION MARK + {0xA3A3, 0xFF03}, //6259 #FULLWIDTH NUMBER SIGN + {0xA3A4, 0xFFE5}, //6260 #FULLWIDTH YEN SIGN + {0xA3A5, 0xFF05}, //6261 #FULLWIDTH PERCENT SIGN + {0xA3A6, 0xFF06}, //6262 #FULLWIDTH AMPERSAND + {0xA3A7, 0xFF07}, //6263 #FULLWIDTH APOSTROPHE + {0xA3A8, 0xFF08}, //6264 #FULLWIDTH LEFT PARENTHESIS + {0xA3A9, 0xFF09}, //6265 #FULLWIDTH RIGHT PARENTHESIS + {0xA3AA, 0xFF0A}, //6266 #FULLWIDTH ASTERISK + {0xA3AB, 0xFF0B}, //6267 #FULLWIDTH PLUS SIGN + {0xA3AC, 0xFF0C}, //6268 #FULLWIDTH COMMA + {0xA3AD, 0xFF0D}, //6269 #FULLWIDTH HYPHEN-MINUS + {0xA3AE, 0xFF0E}, //6270 #FULLWIDTH FULL STOP + {0xA3AF, 0xFF0F}, //6271 #FULLWIDTH SOLIDUS + {0xA3B0, 0xFF10}, //6272 #FULLWIDTH DIGIT ZERO + {0xA3B1, 0xFF11}, //6273 #FULLWIDTH DIGIT ONE + {0xA3B2, 0xFF12}, //6274 #FULLWIDTH DIGIT TWO + {0xA3B3, 0xFF13}, //6275 #FULLWIDTH DIGIT THREE + {0xA3B4, 0xFF14}, //6276 #FULLWIDTH DIGIT FOUR + {0xA3B5, 0xFF15}, //6277 #FULLWIDTH DIGIT FIVE + {0xA3B6, 0xFF16}, //6278 #FULLWIDTH DIGIT SIX + {0xA3B7, 0xFF17}, //6279 #FULLWIDTH DIGIT SEVEN + {0xA3B8, 0xFF18}, //6280 #FULLWIDTH DIGIT EIGHT + {0xA3B9, 0xFF19}, //6281 #FULLWIDTH DIGIT NINE + {0xA3BA, 0xFF1A}, //6282 #FULLWIDTH COLON + {0xA3BB, 0xFF1B}, //6283 #FULLWIDTH SEMICOLON + {0xA3BC, 0xFF1C}, //6284 #FULLWIDTH LESS-THAN SIGN + {0xA3BD, 0xFF1D}, //6285 #FULLWIDTH EQUALS SIGN + {0xA3BE, 0xFF1E}, //6286 #FULLWIDTH GREATER-THAN SIGN + {0xA3BF, 0xFF1F}, //6287 #FULLWIDTH QUESTION MARK + {0xA3C0, 0xFF20}, //6288 #FULLWIDTH COMMERCIAL AT + {0xA3C1, 0xFF21}, //6289 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA3C2, 0xFF22}, //6290 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA3C3, 0xFF23}, //6291 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA3C4, 0xFF24}, //6292 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA3C5, 0xFF25}, //6293 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA3C6, 0xFF26}, //6294 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA3C7, 0xFF27}, //6295 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA3C8, 0xFF28}, //6296 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA3C9, 0xFF29}, //6297 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA3CA, 0xFF2A}, //6298 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA3CB, 0xFF2B}, //6299 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA3CC, 0xFF2C}, //6300 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA3CD, 0xFF2D}, //6301 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA3CE, 0xFF2E}, //6302 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA3CF, 0xFF2F}, //6303 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA3D0, 0xFF30}, //6304 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA3D1, 0xFF31}, //6305 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA3D2, 0xFF32}, //6306 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA3D3, 0xFF33}, //6307 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA3D4, 0xFF34}, //6308 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA3D5, 0xFF35}, //6309 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA3D6, 0xFF36}, //6310 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA3D7, 0xFF37}, //6311 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA3D8, 0xFF38}, //6312 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA3D9, 0xFF39}, //6313 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA3DA, 0xFF3A}, //6314 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA3DB, 0xFF3B}, //6315 #FULLWIDTH LEFT SQUARE BRACKET + {0xA3DC, 0xFF3C}, //6316 #FULLWIDTH REVERSE SOLIDUS + {0xA3DD, 0xFF3D}, //6317 #FULLWIDTH RIGHT SQUARE BRACKET + {0xA3DE, 0xFF3E}, //6318 #FULLWIDTH CIRCUMFLEX ACCENT + {0xA3DF, 0xFF3F}, //6319 #FULLWIDTH LOW LINE + {0xA3E0, 0xFF40}, //6320 #FULLWIDTH GRAVE ACCENT + {0xA3E1, 0xFF41}, //6321 #FULLWIDTH LATIN SMALL LETTER A + {0xA3E2, 0xFF42}, //6322 #FULLWIDTH LATIN SMALL LETTER B + {0xA3E3, 0xFF43}, //6323 #FULLWIDTH LATIN SMALL LETTER C + {0xA3E4, 0xFF44}, //6324 #FULLWIDTH LATIN SMALL LETTER D + {0xA3E5, 0xFF45}, //6325 #FULLWIDTH LATIN SMALL LETTER E + {0xA3E6, 0xFF46}, //6326 #FULLWIDTH LATIN SMALL LETTER F + {0xA3E7, 0xFF47}, //6327 #FULLWIDTH LATIN SMALL LETTER G + {0xA3E8, 0xFF48}, //6328 #FULLWIDTH LATIN SMALL LETTER H + {0xA3E9, 0xFF49}, //6329 #FULLWIDTH LATIN SMALL LETTER I + {0xA3EA, 0xFF4A}, //6330 #FULLWIDTH LATIN SMALL LETTER J + {0xA3EB, 0xFF4B}, //6331 #FULLWIDTH LATIN SMALL LETTER K + {0xA3EC, 0xFF4C}, //6332 #FULLWIDTH LATIN SMALL LETTER L + {0xA3ED, 0xFF4D}, //6333 #FULLWIDTH LATIN SMALL LETTER M + {0xA3EE, 0xFF4E}, //6334 #FULLWIDTH LATIN SMALL LETTER N + {0xA3EF, 0xFF4F}, //6335 #FULLWIDTH LATIN SMALL LETTER O + {0xA3F0, 0xFF50}, //6336 #FULLWIDTH LATIN SMALL LETTER P + {0xA3F1, 0xFF51}, //6337 #FULLWIDTH LATIN SMALL LETTER Q + {0xA3F2, 0xFF52}, //6338 #FULLWIDTH LATIN SMALL LETTER R + {0xA3F3, 0xFF53}, //6339 #FULLWIDTH LATIN SMALL LETTER S + {0xA3F4, 0xFF54}, //6340 #FULLWIDTH LATIN SMALL LETTER T + {0xA3F5, 0xFF55}, //6341 #FULLWIDTH LATIN SMALL LETTER U + {0xA3F6, 0xFF56}, //6342 #FULLWIDTH LATIN SMALL LETTER V + {0xA3F7, 0xFF57}, //6343 #FULLWIDTH LATIN SMALL LETTER W + {0xA3F8, 0xFF58}, //6344 #FULLWIDTH LATIN SMALL LETTER X + {0xA3F9, 0xFF59}, //6345 #FULLWIDTH LATIN SMALL LETTER Y + {0xA3FA, 0xFF5A}, //6346 #FULLWIDTH LATIN SMALL LETTER Z + {0xA3FB, 0xFF5B}, //6347 #FULLWIDTH LEFT CURLY BRACKET + {0xA3FC, 0xFF5C}, //6348 #FULLWIDTH VERTICAL LINE + {0xA3FD, 0xFF5D}, //6349 #FULLWIDTH RIGHT CURLY BRACKET + {0xA3FE, 0xFFE3}, //6350 #FULLWIDTH MACRON + {0xA4A1, 0x3041}, //6351 #HIRAGANA LETTER SMALL A + {0xA4A2, 0x3042}, //6352 #HIRAGANA LETTER A + {0xA4A3, 0x3043}, //6353 #HIRAGANA LETTER SMALL I + {0xA4A4, 0x3044}, //6354 #HIRAGANA LETTER I + {0xA4A5, 0x3045}, //6355 #HIRAGANA LETTER SMALL U + {0xA4A6, 0x3046}, //6356 #HIRAGANA LETTER U + {0xA4A7, 0x3047}, //6357 #HIRAGANA LETTER SMALL E + {0xA4A8, 0x3048}, //6358 #HIRAGANA LETTER E + {0xA4A9, 0x3049}, //6359 #HIRAGANA LETTER SMALL O + {0xA4AA, 0x304A}, //6360 #HIRAGANA LETTER O + {0xA4AB, 0x304B}, //6361 #HIRAGANA LETTER KA + {0xA4AC, 0x304C}, //6362 #HIRAGANA LETTER GA + {0xA4AD, 0x304D}, //6363 #HIRAGANA LETTER KI + {0xA4AE, 0x304E}, //6364 #HIRAGANA LETTER GI + {0xA4AF, 0x304F}, //6365 #HIRAGANA LETTER KU + {0xA4B0, 0x3050}, //6366 #HIRAGANA LETTER GU + {0xA4B1, 0x3051}, //6367 #HIRAGANA LETTER KE + {0xA4B2, 0x3052}, //6368 #HIRAGANA LETTER GE + {0xA4B3, 0x3053}, //6369 #HIRAGANA LETTER KO + {0xA4B4, 0x3054}, //6370 #HIRAGANA LETTER GO + {0xA4B5, 0x3055}, //6371 #HIRAGANA LETTER SA + {0xA4B6, 0x3056}, //6372 #HIRAGANA LETTER ZA + {0xA4B7, 0x3057}, //6373 #HIRAGANA LETTER SI + {0xA4B8, 0x3058}, //6374 #HIRAGANA LETTER ZI + {0xA4B9, 0x3059}, //6375 #HIRAGANA LETTER SU + {0xA4BA, 0x305A}, //6376 #HIRAGANA LETTER ZU + {0xA4BB, 0x305B}, //6377 #HIRAGANA LETTER SE + {0xA4BC, 0x305C}, //6378 #HIRAGANA LETTER ZE + {0xA4BD, 0x305D}, //6379 #HIRAGANA LETTER SO + {0xA4BE, 0x305E}, //6380 #HIRAGANA LETTER ZO + {0xA4BF, 0x305F}, //6381 #HIRAGANA LETTER TA + {0xA4C0, 0x3060}, //6382 #HIRAGANA LETTER DA + {0xA4C1, 0x3061}, //6383 #HIRAGANA LETTER TI + {0xA4C2, 0x3062}, //6384 #HIRAGANA LETTER DI + {0xA4C3, 0x3063}, //6385 #HIRAGANA LETTER SMALL TU + {0xA4C4, 0x3064}, //6386 #HIRAGANA LETTER TU + {0xA4C5, 0x3065}, //6387 #HIRAGANA LETTER DU + {0xA4C6, 0x3066}, //6388 #HIRAGANA LETTER TE + {0xA4C7, 0x3067}, //6389 #HIRAGANA LETTER DE + {0xA4C8, 0x3068}, //6390 #HIRAGANA LETTER TO + {0xA4C9, 0x3069}, //6391 #HIRAGANA LETTER DO + {0xA4CA, 0x306A}, //6392 #HIRAGANA LETTER NA + {0xA4CB, 0x306B}, //6393 #HIRAGANA LETTER NI + {0xA4CC, 0x306C}, //6394 #HIRAGANA LETTER NU + {0xA4CD, 0x306D}, //6395 #HIRAGANA LETTER NE + {0xA4CE, 0x306E}, //6396 #HIRAGANA LETTER NO + {0xA4CF, 0x306F}, //6397 #HIRAGANA LETTER HA + {0xA4D0, 0x3070}, //6398 #HIRAGANA LETTER BA + {0xA4D1, 0x3071}, //6399 #HIRAGANA LETTER PA + {0xA4D2, 0x3072}, //6400 #HIRAGANA LETTER HI + {0xA4D3, 0x3073}, //6401 #HIRAGANA LETTER BI + {0xA4D4, 0x3074}, //6402 #HIRAGANA LETTER PI + {0xA4D5, 0x3075}, //6403 #HIRAGANA LETTER HU + {0xA4D6, 0x3076}, //6404 #HIRAGANA LETTER BU + {0xA4D7, 0x3077}, //6405 #HIRAGANA LETTER PU + {0xA4D8, 0x3078}, //6406 #HIRAGANA LETTER HE + {0xA4D9, 0x3079}, //6407 #HIRAGANA LETTER BE + {0xA4DA, 0x307A}, //6408 #HIRAGANA LETTER PE + {0xA4DB, 0x307B}, //6409 #HIRAGANA LETTER HO + {0xA4DC, 0x307C}, //6410 #HIRAGANA LETTER BO + {0xA4DD, 0x307D}, //6411 #HIRAGANA LETTER PO + {0xA4DE, 0x307E}, //6412 #HIRAGANA LETTER MA + {0xA4DF, 0x307F}, //6413 #HIRAGANA LETTER MI + {0xA4E0, 0x3080}, //6414 #HIRAGANA LETTER MU + {0xA4E1, 0x3081}, //6415 #HIRAGANA LETTER ME + {0xA4E2, 0x3082}, //6416 #HIRAGANA LETTER MO + {0xA4E3, 0x3083}, //6417 #HIRAGANA LETTER SMALL YA + {0xA4E4, 0x3084}, //6418 #HIRAGANA LETTER YA + {0xA4E5, 0x3085}, //6419 #HIRAGANA LETTER SMALL YU + {0xA4E6, 0x3086}, //6420 #HIRAGANA LETTER YU + {0xA4E7, 0x3087}, //6421 #HIRAGANA LETTER SMALL YO + {0xA4E8, 0x3088}, //6422 #HIRAGANA LETTER YO + {0xA4E9, 0x3089}, //6423 #HIRAGANA LETTER RA + {0xA4EA, 0x308A}, //6424 #HIRAGANA LETTER RI + {0xA4EB, 0x308B}, //6425 #HIRAGANA LETTER RU + {0xA4EC, 0x308C}, //6426 #HIRAGANA LETTER RE + {0xA4ED, 0x308D}, //6427 #HIRAGANA LETTER RO + {0xA4EE, 0x308E}, //6428 #HIRAGANA LETTER SMALL WA + {0xA4EF, 0x308F}, //6429 #HIRAGANA LETTER WA + {0xA4F0, 0x3090}, //6430 #HIRAGANA LETTER WI + {0xA4F1, 0x3091}, //6431 #HIRAGANA LETTER WE + {0xA4F2, 0x3092}, //6432 #HIRAGANA LETTER WO + {0xA4F3, 0x3093}, //6433 #HIRAGANA LETTER N + {0xA5A1, 0x30A1}, //6434 #KATAKANA LETTER SMALL A + {0xA5A2, 0x30A2}, //6435 #KATAKANA LETTER A + {0xA5A3, 0x30A3}, //6436 #KATAKANA LETTER SMALL I + {0xA5A4, 0x30A4}, //6437 #KATAKANA LETTER I + {0xA5A5, 0x30A5}, //6438 #KATAKANA LETTER SMALL U + {0xA5A6, 0x30A6}, //6439 #KATAKANA LETTER U + {0xA5A7, 0x30A7}, //6440 #KATAKANA LETTER SMALL E + {0xA5A8, 0x30A8}, //6441 #KATAKANA LETTER E + {0xA5A9, 0x30A9}, //6442 #KATAKANA LETTER SMALL O + {0xA5AA, 0x30AA}, //6443 #KATAKANA LETTER O + {0xA5AB, 0x30AB}, //6444 #KATAKANA LETTER KA + {0xA5AC, 0x30AC}, //6445 #KATAKANA LETTER GA + {0xA5AD, 0x30AD}, //6446 #KATAKANA LETTER KI + {0xA5AE, 0x30AE}, //6447 #KATAKANA LETTER GI + {0xA5AF, 0x30AF}, //6448 #KATAKANA LETTER KU + {0xA5B0, 0x30B0}, //6449 #KATAKANA LETTER GU + {0xA5B1, 0x30B1}, //6450 #KATAKANA LETTER KE + {0xA5B2, 0x30B2}, //6451 #KATAKANA LETTER GE + {0xA5B3, 0x30B3}, //6452 #KATAKANA LETTER KO + {0xA5B4, 0x30B4}, //6453 #KATAKANA LETTER GO + {0xA5B5, 0x30B5}, //6454 #KATAKANA LETTER SA + {0xA5B6, 0x30B6}, //6455 #KATAKANA LETTER ZA + {0xA5B7, 0x30B7}, //6456 #KATAKANA LETTER SI + {0xA5B8, 0x30B8}, //6457 #KATAKANA LETTER ZI + {0xA5B9, 0x30B9}, //6458 #KATAKANA LETTER SU + {0xA5BA, 0x30BA}, //6459 #KATAKANA LETTER ZU + {0xA5BB, 0x30BB}, //6460 #KATAKANA LETTER SE + {0xA5BC, 0x30BC}, //6461 #KATAKANA LETTER ZE + {0xA5BD, 0x30BD}, //6462 #KATAKANA LETTER SO + {0xA5BE, 0x30BE}, //6463 #KATAKANA LETTER ZO + {0xA5BF, 0x30BF}, //6464 #KATAKANA LETTER TA + {0xA5C0, 0x30C0}, //6465 #KATAKANA LETTER DA + {0xA5C1, 0x30C1}, //6466 #KATAKANA LETTER TI + {0xA5C2, 0x30C2}, //6467 #KATAKANA LETTER DI + {0xA5C3, 0x30C3}, //6468 #KATAKANA LETTER SMALL TU + {0xA5C4, 0x30C4}, //6469 #KATAKANA LETTER TU + {0xA5C5, 0x30C5}, //6470 #KATAKANA LETTER DU + {0xA5C6, 0x30C6}, //6471 #KATAKANA LETTER TE + {0xA5C7, 0x30C7}, //6472 #KATAKANA LETTER DE + {0xA5C8, 0x30C8}, //6473 #KATAKANA LETTER TO + {0xA5C9, 0x30C9}, //6474 #KATAKANA LETTER DO + {0xA5CA, 0x30CA}, //6475 #KATAKANA LETTER NA + {0xA5CB, 0x30CB}, //6476 #KATAKANA LETTER NI + {0xA5CC, 0x30CC}, //6477 #KATAKANA LETTER NU + {0xA5CD, 0x30CD}, //6478 #KATAKANA LETTER NE + {0xA5CE, 0x30CE}, //6479 #KATAKANA LETTER NO + {0xA5CF, 0x30CF}, //6480 #KATAKANA LETTER HA + {0xA5D0, 0x30D0}, //6481 #KATAKANA LETTER BA + {0xA5D1, 0x30D1}, //6482 #KATAKANA LETTER PA + {0xA5D2, 0x30D2}, //6483 #KATAKANA LETTER HI + {0xA5D3, 0x30D3}, //6484 #KATAKANA LETTER BI + {0xA5D4, 0x30D4}, //6485 #KATAKANA LETTER PI + {0xA5D5, 0x30D5}, //6486 #KATAKANA LETTER HU + {0xA5D6, 0x30D6}, //6487 #KATAKANA LETTER BU + {0xA5D7, 0x30D7}, //6488 #KATAKANA LETTER PU + {0xA5D8, 0x30D8}, //6489 #KATAKANA LETTER HE + {0xA5D9, 0x30D9}, //6490 #KATAKANA LETTER BE + {0xA5DA, 0x30DA}, //6491 #KATAKANA LETTER PE + {0xA5DB, 0x30DB}, //6492 #KATAKANA LETTER HO + {0xA5DC, 0x30DC}, //6493 #KATAKANA LETTER BO + {0xA5DD, 0x30DD}, //6494 #KATAKANA LETTER PO + {0xA5DE, 0x30DE}, //6495 #KATAKANA LETTER MA + {0xA5DF, 0x30DF}, //6496 #KATAKANA LETTER MI + {0xA5E0, 0x30E0}, //6497 #KATAKANA LETTER MU + {0xA5E1, 0x30E1}, //6498 #KATAKANA LETTER ME + {0xA5E2, 0x30E2}, //6499 #KATAKANA LETTER MO + {0xA5E3, 0x30E3}, //6500 #KATAKANA LETTER SMALL YA + {0xA5E4, 0x30E4}, //6501 #KATAKANA LETTER YA + {0xA5E5, 0x30E5}, //6502 #KATAKANA LETTER SMALL YU + {0xA5E6, 0x30E6}, //6503 #KATAKANA LETTER YU + {0xA5E7, 0x30E7}, //6504 #KATAKANA LETTER SMALL YO + {0xA5E8, 0x30E8}, //6505 #KATAKANA LETTER YO + {0xA5E9, 0x30E9}, //6506 #KATAKANA LETTER RA + {0xA5EA, 0x30EA}, //6507 #KATAKANA LETTER RI + {0xA5EB, 0x30EB}, //6508 #KATAKANA LETTER RU + {0xA5EC, 0x30EC}, //6509 #KATAKANA LETTER RE + {0xA5ED, 0x30ED}, //6510 #KATAKANA LETTER RO + {0xA5EE, 0x30EE}, //6511 #KATAKANA LETTER SMALL WA + {0xA5EF, 0x30EF}, //6512 #KATAKANA LETTER WA + {0xA5F0, 0x30F0}, //6513 #KATAKANA LETTER WI + {0xA5F1, 0x30F1}, //6514 #KATAKANA LETTER WE + {0xA5F2, 0x30F2}, //6515 #KATAKANA LETTER WO + {0xA5F3, 0x30F3}, //6516 #KATAKANA LETTER N + {0xA5F4, 0x30F4}, //6517 #KATAKANA LETTER VU + {0xA5F5, 0x30F5}, //6518 #KATAKANA LETTER SMALL KA + {0xA5F6, 0x30F6}, //6519 #KATAKANA LETTER SMALL KE + {0xA6A1, 0x0391}, //6520 #GREEK CAPITAL LETTER ALPHA + {0xA6A2, 0x0392}, //6521 #GREEK CAPITAL LETTER BETA + {0xA6A3, 0x0393}, //6522 #GREEK CAPITAL LETTER GAMMA + {0xA6A4, 0x0394}, //6523 #GREEK CAPITAL LETTER DELTA + {0xA6A5, 0x0395}, //6524 #GREEK CAPITAL LETTER EPSILON + {0xA6A6, 0x0396}, //6525 #GREEK CAPITAL LETTER ZETA + {0xA6A7, 0x0397}, //6526 #GREEK CAPITAL LETTER ETA + {0xA6A8, 0x0398}, //6527 #GREEK CAPITAL LETTER THETA + {0xA6A9, 0x0399}, //6528 #GREEK CAPITAL LETTER IOTA + {0xA6AA, 0x039A}, //6529 #GREEK CAPITAL LETTER KAPPA + {0xA6AB, 0x039B}, //6530 #GREEK CAPITAL LETTER LAMDA + {0xA6AC, 0x039C}, //6531 #GREEK CAPITAL LETTER MU + {0xA6AD, 0x039D}, //6532 #GREEK CAPITAL LETTER NU + {0xA6AE, 0x039E}, //6533 #GREEK CAPITAL LETTER XI + {0xA6AF, 0x039F}, //6534 #GREEK CAPITAL LETTER OMICRON + {0xA6B0, 0x03A0}, //6535 #GREEK CAPITAL LETTER PI + {0xA6B1, 0x03A1}, //6536 #GREEK CAPITAL LETTER RHO + {0xA6B2, 0x03A3}, //6537 #GREEK CAPITAL LETTER SIGMA + {0xA6B3, 0x03A4}, //6538 #GREEK CAPITAL LETTER TAU + {0xA6B4, 0x03A5}, //6539 #GREEK CAPITAL LETTER UPSILON + {0xA6B5, 0x03A6}, //6540 #GREEK CAPITAL LETTER PHI + {0xA6B6, 0x03A7}, //6541 #GREEK CAPITAL LETTER CHI + {0xA6B7, 0x03A8}, //6542 #GREEK CAPITAL LETTER PSI + {0xA6B8, 0x03A9}, //6543 #GREEK CAPITAL LETTER OMEGA + {0xA6C1, 0x03B1}, //6544 #GREEK SMALL LETTER ALPHA + {0xA6C2, 0x03B2}, //6545 #GREEK SMALL LETTER BETA + {0xA6C3, 0x03B3}, //6546 #GREEK SMALL LETTER GAMMA + {0xA6C4, 0x03B4}, //6547 #GREEK SMALL LETTER DELTA + {0xA6C5, 0x03B5}, //6548 #GREEK SMALL LETTER EPSILON + {0xA6C6, 0x03B6}, //6549 #GREEK SMALL LETTER ZETA + {0xA6C7, 0x03B7}, //6550 #GREEK SMALL LETTER ETA + {0xA6C8, 0x03B8}, //6551 #GREEK SMALL LETTER THETA + {0xA6C9, 0x03B9}, //6552 #GREEK SMALL LETTER IOTA + {0xA6CA, 0x03BA}, //6553 #GREEK SMALL LETTER KAPPA + {0xA6CB, 0x03BB}, //6554 #GREEK SMALL LETTER LAMDA + {0xA6CC, 0x03BC}, //6555 #GREEK SMALL LETTER MU + {0xA6CD, 0x03BD}, //6556 #GREEK SMALL LETTER NU + {0xA6CE, 0x03BE}, //6557 #GREEK SMALL LETTER XI + {0xA6CF, 0x03BF}, //6558 #GREEK SMALL LETTER OMICRON + {0xA6D0, 0x03C0}, //6559 #GREEK SMALL LETTER PI + {0xA6D1, 0x03C1}, //6560 #GREEK SMALL LETTER RHO + {0xA6D2, 0x03C3}, //6561 #GREEK SMALL LETTER SIGMA + {0xA6D3, 0x03C4}, //6562 #GREEK SMALL LETTER TAU + {0xA6D4, 0x03C5}, //6563 #GREEK SMALL LETTER UPSILON + {0xA6D5, 0x03C6}, //6564 #GREEK SMALL LETTER PHI + {0xA6D6, 0x03C7}, //6565 #GREEK SMALL LETTER CHI + {0xA6D7, 0x03C8}, //6566 #GREEK SMALL LETTER PSI + {0xA6D8, 0x03C9}, //6567 #GREEK SMALL LETTER OMEGA + {0xA6E0, 0xFE35}, //6568 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS + {0xA6E1, 0xFE36}, //6569 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS + {0xA6E2, 0xFE39}, //6570 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET + {0xA6E3, 0xFE3A}, //6571 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET + {0xA6E4, 0xFE3F}, //6572 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET + {0xA6E5, 0xFE40}, //6573 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET + {0xA6E6, 0xFE3D}, //6574 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET + {0xA6E7, 0xFE3E}, //6575 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET + {0xA6E8, 0xFE41}, //6576 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET + {0xA6E9, 0xFE42}, //6577 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET + {0xA6EA, 0xFE43}, //6578 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET + {0xA6EB, 0xFE44}, //6579 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET + {0xA6EE, 0xFE3B}, //6580 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET + {0xA6EF, 0xFE3C}, //6581 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET + {0xA6F0, 0xFE37}, //6582 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET + {0xA6F1, 0xFE38}, //6583 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET + {0xA6F2, 0xFE31}, //6584 #PRESENTATION FORM FOR VERTICAL EM DASH + {0xA6F4, 0xFE33}, //6585 #PRESENTATION FORM FOR VERTICAL LOW LINE + {0xA6F5, 0xFE34}, //6586 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE + {0xA7A1, 0x0410}, //6587 #CYRILLIC CAPITAL LETTER A + {0xA7A2, 0x0411}, //6588 #CYRILLIC CAPITAL LETTER BE + {0xA7A3, 0x0412}, //6589 #CYRILLIC CAPITAL LETTER VE + {0xA7A4, 0x0413}, //6590 #CYRILLIC CAPITAL LETTER GHE + {0xA7A5, 0x0414}, //6591 #CYRILLIC CAPITAL LETTER DE + {0xA7A6, 0x0415}, //6592 #CYRILLIC CAPITAL LETTER IE + {0xA7A7, 0x0401}, //6593 #CYRILLIC CAPITAL LETTER IO + {0xA7A8, 0x0416}, //6594 #CYRILLIC CAPITAL LETTER ZHE + {0xA7A9, 0x0417}, //6595 #CYRILLIC CAPITAL LETTER ZE + {0xA7AA, 0x0418}, //6596 #CYRILLIC CAPITAL LETTER I + {0xA7AB, 0x0419}, //6597 #CYRILLIC CAPITAL LETTER SHORT I + {0xA7AC, 0x041A}, //6598 #CYRILLIC CAPITAL LETTER KA + {0xA7AD, 0x041B}, //6599 #CYRILLIC CAPITAL LETTER EL + {0xA7AE, 0x041C}, //6600 #CYRILLIC CAPITAL LETTER EM + {0xA7AF, 0x041D}, //6601 #CYRILLIC CAPITAL LETTER EN + {0xA7B0, 0x041E}, //6602 #CYRILLIC CAPITAL LETTER O + {0xA7B1, 0x041F}, //6603 #CYRILLIC CAPITAL LETTER PE + {0xA7B2, 0x0420}, //6604 #CYRILLIC CAPITAL LETTER ER + {0xA7B3, 0x0421}, //6605 #CYRILLIC CAPITAL LETTER ES + {0xA7B4, 0x0422}, //6606 #CYRILLIC CAPITAL LETTER TE + {0xA7B5, 0x0423}, //6607 #CYRILLIC CAPITAL LETTER U + {0xA7B6, 0x0424}, //6608 #CYRILLIC CAPITAL LETTER EF + {0xA7B7, 0x0425}, //6609 #CYRILLIC CAPITAL LETTER HA + {0xA7B8, 0x0426}, //6610 #CYRILLIC CAPITAL LETTER TSE + {0xA7B9, 0x0427}, //6611 #CYRILLIC CAPITAL LETTER CHE + {0xA7BA, 0x0428}, //6612 #CYRILLIC CAPITAL LETTER SHA + {0xA7BB, 0x0429}, //6613 #CYRILLIC CAPITAL LETTER SHCHA + {0xA7BC, 0x042A}, //6614 #CYRILLIC CAPITAL LETTER HARD SIGN + {0xA7BD, 0x042B}, //6615 #CYRILLIC CAPITAL LETTER YERU + {0xA7BE, 0x042C}, //6616 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0xA7BF, 0x042D}, //6617 #CYRILLIC CAPITAL LETTER E + {0xA7C0, 0x042E}, //6618 #CYRILLIC CAPITAL LETTER YU + {0xA7C1, 0x042F}, //6619 #CYRILLIC CAPITAL LETTER YA + {0xA7D1, 0x0430}, //6620 #CYRILLIC SMALL LETTER A + {0xA7D2, 0x0431}, //6621 #CYRILLIC SMALL LETTER BE + {0xA7D3, 0x0432}, //6622 #CYRILLIC SMALL LETTER VE + {0xA7D4, 0x0433}, //6623 #CYRILLIC SMALL LETTER GHE + {0xA7D5, 0x0434}, //6624 #CYRILLIC SMALL LETTER DE + {0xA7D6, 0x0435}, //6625 #CYRILLIC SMALL LETTER IE + {0xA7D7, 0x0451}, //6626 #CYRILLIC SMALL LETTER IO + {0xA7D8, 0x0436}, //6627 #CYRILLIC SMALL LETTER ZHE + {0xA7D9, 0x0437}, //6628 #CYRILLIC SMALL LETTER ZE + {0xA7DA, 0x0438}, //6629 #CYRILLIC SMALL LETTER I + {0xA7DB, 0x0439}, //6630 #CYRILLIC SMALL LETTER SHORT I + {0xA7DC, 0x043A}, //6631 #CYRILLIC SMALL LETTER KA + {0xA7DD, 0x043B}, //6632 #CYRILLIC SMALL LETTER EL + {0xA7DE, 0x043C}, //6633 #CYRILLIC SMALL LETTER EM + {0xA7DF, 0x043D}, //6634 #CYRILLIC SMALL LETTER EN + {0xA7E0, 0x043E}, //6635 #CYRILLIC SMALL LETTER O + {0xA7E1, 0x043F}, //6636 #CYRILLIC SMALL LETTER PE + {0xA7E2, 0x0440}, //6637 #CYRILLIC SMALL LETTER ER + {0xA7E3, 0x0441}, //6638 #CYRILLIC SMALL LETTER ES + {0xA7E4, 0x0442}, //6639 #CYRILLIC SMALL LETTER TE + {0xA7E5, 0x0443}, //6640 #CYRILLIC SMALL LETTER U + {0xA7E6, 0x0444}, //6641 #CYRILLIC SMALL LETTER EF + {0xA7E7, 0x0445}, //6642 #CYRILLIC SMALL LETTER HA + {0xA7E8, 0x0446}, //6643 #CYRILLIC SMALL LETTER TSE + {0xA7E9, 0x0447}, //6644 #CYRILLIC SMALL LETTER CHE + {0xA7EA, 0x0448}, //6645 #CYRILLIC SMALL LETTER SHA + {0xA7EB, 0x0449}, //6646 #CYRILLIC SMALL LETTER SHCHA + {0xA7EC, 0x044A}, //6647 #CYRILLIC SMALL LETTER HARD SIGN + {0xA7ED, 0x044B}, //6648 #CYRILLIC SMALL LETTER YERU + {0xA7EE, 0x044C}, //6649 #CYRILLIC SMALL LETTER SOFT SIGN + {0xA7EF, 0x044D}, //6650 #CYRILLIC SMALL LETTER E + {0xA7F0, 0x044E}, //6651 #CYRILLIC SMALL LETTER YU + {0xA7F1, 0x044F}, //6652 #CYRILLIC SMALL LETTER YA + {0xA840, 0x02CA}, //6653 #MODIFIER LETTER ACUTE ACCENT + {0xA841, 0x02CB}, //6654 #MODIFIER LETTER GRAVE ACCENT + {0xA842, 0x02D9}, //6655 #DOT ABOVE + {0xA843, 0x2013}, //6656 #EN DASH + {0xA844, 0x2015}, //6657 #HORIZONTAL BAR + {0xA845, 0x2025}, //6658 #TWO DOT LEADER + {0xA846, 0x2035}, //6659 #REVERSED PRIME + {0xA847, 0x2105}, //6660 #CARE OF + {0xA848, 0x2109}, //6661 #DEGREE FAHRENHEIT + {0xA849, 0x2196}, //6662 #NORTH WEST ARROW + {0xA84A, 0x2197}, //6663 #NORTH EAST ARROW + {0xA84B, 0x2198}, //6664 #SOUTH EAST ARROW + {0xA84C, 0x2199}, //6665 #SOUTH WEST ARROW + {0xA84D, 0x2215}, //6666 #DIVISION SLASH + {0xA84E, 0x221F}, //6667 #RIGHT ANGLE + {0xA84F, 0x2223}, //6668 #DIVIDES + {0xA850, 0x2252}, //6669 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA851, 0x2266}, //6670 #LESS-THAN OVER EQUAL TO + {0xA852, 0x2267}, //6671 #GREATER-THAN OVER EQUAL TO + {0xA853, 0x22BF}, //6672 #RIGHT TRIANGLE + {0xA854, 0x2550}, //6673 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xA855, 0x2551}, //6674 #BOX DRAWINGS DOUBLE VERTICAL + {0xA856, 0x2552}, //6675 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + {0xA857, 0x2553}, //6676 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + {0xA858, 0x2554}, //6677 #BOX DRAWINGS DOUBLE DOWN AND RIGHT + {0xA859, 0x2555}, //6678 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + {0xA85A, 0x2556}, //6679 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + {0xA85B, 0x2557}, //6680 #BOX DRAWINGS DOUBLE DOWN AND LEFT + {0xA85C, 0x2558}, //6681 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + {0xA85D, 0x2559}, //6682 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + {0xA85E, 0x255A}, //6683 #BOX DRAWINGS DOUBLE UP AND RIGHT + {0xA85F, 0x255B}, //6684 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + {0xA860, 0x255C}, //6685 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + {0xA861, 0x255D}, //6686 #BOX DRAWINGS DOUBLE UP AND LEFT + {0xA862, 0x255E}, //6687 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xA863, 0x255F}, //6688 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + {0xA864, 0x2560}, //6689 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + {0xA865, 0x2561}, //6690 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xA866, 0x2562}, //6691 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + {0xA867, 0x2563}, //6692 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT + {0xA868, 0x2564}, //6693 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + {0xA869, 0x2565}, //6694 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + {0xA86A, 0x2566}, //6695 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + {0xA86B, 0x2567}, //6696 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + {0xA86C, 0x2568}, //6697 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + {0xA86D, 0x2569}, //6698 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL + {0xA86E, 0x256A}, //6699 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xA86F, 0x256B}, //6700 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + {0xA870, 0x256C}, //6701 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + {0xA871, 0x256D}, //6702 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xA872, 0x256E}, //6703 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xA873, 0x256F}, //6704 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xA874, 0x2570}, //6705 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xA875, 0x2571}, //6706 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT + {0xA876, 0x2572}, //6707 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT + {0xA877, 0x2573}, //6708 #BOX DRAWINGS LIGHT DIAGONAL CROSS + {0xA878, 0x2581}, //6709 #LOWER ONE EIGHTH BLOCK + {0xA879, 0x2582}, //6710 #LOWER ONE QUARTER BLOCK + {0xA87A, 0x2583}, //6711 #LOWER THREE EIGHTHS BLOCK + {0xA87B, 0x2584}, //6712 #LOWER HALF BLOCK + {0xA87C, 0x2585}, //6713 #LOWER FIVE EIGHTHS BLOCK + {0xA87D, 0x2586}, //6714 #LOWER THREE QUARTERS BLOCK + {0xA87E, 0x2587}, //6715 #LOWER SEVEN EIGHTHS BLOCK + {0xA880, 0x2588}, //6716 #FULL BLOCK + {0xA881, 0x2589}, //6717 #LEFT SEVEN EIGHTHS BLOCK + {0xA882, 0x258A}, //6718 #LEFT THREE QUARTERS BLOCK + {0xA883, 0x258B}, //6719 #LEFT FIVE EIGHTHS BLOCK + {0xA884, 0x258C}, //6720 #LEFT HALF BLOCK + {0xA885, 0x258D}, //6721 #LEFT THREE EIGHTHS BLOCK + {0xA886, 0x258E}, //6722 #LEFT ONE QUARTER BLOCK + {0xA887, 0x258F}, //6723 #LEFT ONE EIGHTH BLOCK + {0xA888, 0x2593}, //6724 #DARK SHADE + {0xA889, 0x2594}, //6725 #UPPER ONE EIGHTH BLOCK + {0xA88A, 0x2595}, //6726 #RIGHT ONE EIGHTH BLOCK + {0xA88B, 0x25BC}, //6727 #BLACK DOWN-POINTING TRIANGLE + {0xA88C, 0x25BD}, //6728 #WHITE DOWN-POINTING TRIANGLE + {0xA88D, 0x25E2}, //6729 #BLACK LOWER RIGHT TRIANGLE + {0xA88E, 0x25E3}, //6730 #BLACK LOWER LEFT TRIANGLE + {0xA88F, 0x25E4}, //6731 #BLACK UPPER LEFT TRIANGLE + {0xA890, 0x25E5}, //6732 #BLACK UPPER RIGHT TRIANGLE + {0xA891, 0x2609}, //6733 #SUN + {0xA892, 0x2295}, //6734 #CIRCLED PLUS + {0xA893, 0x3012}, //6735 #POSTAL MARK + {0xA894, 0x301D}, //6736 #REVERSED DOUBLE PRIME QUOTATION MARK + {0xA895, 0x301E}, //6737 #DOUBLE PRIME QUOTATION MARK + {0xA8A1, 0x0101}, //6738 #LATIN SMALL LETTER A WITH MACRON + {0xA8A2, 0x00E1}, //6739 #LATIN SMALL LETTER A WITH ACUTE + {0xA8A3, 0x01CE}, //6740 #LATIN SMALL LETTER A WITH CARON + {0xA8A4, 0x00E0}, //6741 #LATIN SMALL LETTER A WITH GRAVE + {0xA8A5, 0x0113}, //6742 #LATIN SMALL LETTER E WITH MACRON + {0xA8A6, 0x00E9}, //6743 #LATIN SMALL LETTER E WITH ACUTE + {0xA8A7, 0x011B}, //6744 #LATIN SMALL LETTER E WITH CARON + {0xA8A8, 0x00E8}, //6745 #LATIN SMALL LETTER E WITH GRAVE + {0xA8A9, 0x012B}, //6746 #LATIN SMALL LETTER I WITH MACRON + {0xA8AA, 0x00ED}, //6747 #LATIN SMALL LETTER I WITH ACUTE + {0xA8AB, 0x01D0}, //6748 #LATIN SMALL LETTER I WITH CARON + {0xA8AC, 0x00EC}, //6749 #LATIN SMALL LETTER I WITH GRAVE + {0xA8AD, 0x014D}, //6750 #LATIN SMALL LETTER O WITH MACRON + {0xA8AE, 0x00F3}, //6751 #LATIN SMALL LETTER O WITH ACUTE + {0xA8AF, 0x01D2}, //6752 #LATIN SMALL LETTER O WITH CARON + {0xA8B0, 0x00F2}, //6753 #LATIN SMALL LETTER O WITH GRAVE + {0xA8B1, 0x016B}, //6754 #LATIN SMALL LETTER U WITH MACRON + {0xA8B2, 0x00FA}, //6755 #LATIN SMALL LETTER U WITH ACUTE + {0xA8B3, 0x01D4}, //6756 #LATIN SMALL LETTER U WITH CARON + {0xA8B4, 0x00F9}, //6757 #LATIN SMALL LETTER U WITH GRAVE + {0xA8B5, 0x01D6}, //6758 #LATIN SMALL LETTER U WITH DIAERESIS AND MACRON + {0xA8B6, 0x01D8}, //6759 #LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE + {0xA8B7, 0x01DA}, //6760 #LATIN SMALL LETTER U WITH DIAERESIS AND CARON + {0xA8B8, 0x01DC}, //6761 #LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE + {0xA8B9, 0x00FC}, //6762 #LATIN SMALL LETTER U WITH DIAERESIS + {0xA8BA, 0x00EA}, //6763 #LATIN SMALL LETTER E WITH CIRCUMFLEX + {0xA8BB, 0x0251}, //6764 #LATIN SMALL LETTER ALPHA + {0xA8BD, 0x0144}, //6765 #LATIN SMALL LETTER N WITH ACUTE + {0xA8BE, 0x0148}, //6766 #LATIN SMALL LETTER N WITH CARON + {0xA8C0, 0x0261}, //6767 #LATIN SMALL LETTER SCRIPT G + {0xA8C5, 0x3105}, //6768 #BOPOMOFO LETTER B + {0xA8C6, 0x3106}, //6769 #BOPOMOFO LETTER P + {0xA8C7, 0x3107}, //6770 #BOPOMOFO LETTER M + {0xA8C8, 0x3108}, //6771 #BOPOMOFO LETTER F + {0xA8C9, 0x3109}, //6772 #BOPOMOFO LETTER D + {0xA8CA, 0x310A}, //6773 #BOPOMOFO LETTER T + {0xA8CB, 0x310B}, //6774 #BOPOMOFO LETTER N + {0xA8CC, 0x310C}, //6775 #BOPOMOFO LETTER L + {0xA8CD, 0x310D}, //6776 #BOPOMOFO LETTER G + {0xA8CE, 0x310E}, //6777 #BOPOMOFO LETTER K + {0xA8CF, 0x310F}, //6778 #BOPOMOFO LETTER H + {0xA8D0, 0x3110}, //6779 #BOPOMOFO LETTER J + {0xA8D1, 0x3111}, //6780 #BOPOMOFO LETTER Q + {0xA8D2, 0x3112}, //6781 #BOPOMOFO LETTER X + {0xA8D3, 0x3113}, //6782 #BOPOMOFO LETTER ZH + {0xA8D4, 0x3114}, //6783 #BOPOMOFO LETTER CH + {0xA8D5, 0x3115}, //6784 #BOPOMOFO LETTER SH + {0xA8D6, 0x3116}, //6785 #BOPOMOFO LETTER R + {0xA8D7, 0x3117}, //6786 #BOPOMOFO LETTER Z + {0xA8D8, 0x3118}, //6787 #BOPOMOFO LETTER C + {0xA8D9, 0x3119}, //6788 #BOPOMOFO LETTER S + {0xA8DA, 0x311A}, //6789 #BOPOMOFO LETTER A + {0xA8DB, 0x311B}, //6790 #BOPOMOFO LETTER O + {0xA8DC, 0x311C}, //6791 #BOPOMOFO LETTER E + {0xA8DD, 0x311D}, //6792 #BOPOMOFO LETTER EH + {0xA8DE, 0x311E}, //6793 #BOPOMOFO LETTER AI + {0xA8DF, 0x311F}, //6794 #BOPOMOFO LETTER EI + {0xA8E0, 0x3120}, //6795 #BOPOMOFO LETTER AU + {0xA8E1, 0x3121}, //6796 #BOPOMOFO LETTER OU + {0xA8E2, 0x3122}, //6797 #BOPOMOFO LETTER AN + {0xA8E3, 0x3123}, //6798 #BOPOMOFO LETTER EN + {0xA8E4, 0x3124}, //6799 #BOPOMOFO LETTER ANG + {0xA8E5, 0x3125}, //6800 #BOPOMOFO LETTER ENG + {0xA8E6, 0x3126}, //6801 #BOPOMOFO LETTER ER + {0xA8E7, 0x3127}, //6802 #BOPOMOFO LETTER I + {0xA8E8, 0x3128}, //6803 #BOPOMOFO LETTER U + {0xA8E9, 0x3129}, //6804 #BOPOMOFO LETTER IU + {0xA940, 0x3021}, //6805 #HANGZHOU NUMERAL ONE + {0xA941, 0x3022}, //6806 #HANGZHOU NUMERAL TWO + {0xA942, 0x3023}, //6807 #HANGZHOU NUMERAL THREE + {0xA943, 0x3024}, //6808 #HANGZHOU NUMERAL FOUR + {0xA944, 0x3025}, //6809 #HANGZHOU NUMERAL FIVE + {0xA945, 0x3026}, //6810 #HANGZHOU NUMERAL SIX + {0xA946, 0x3027}, //6811 #HANGZHOU NUMERAL SEVEN + {0xA947, 0x3028}, //6812 #HANGZHOU NUMERAL EIGHT + {0xA948, 0x3029}, //6813 #HANGZHOU NUMERAL NINE + {0xA949, 0x32A3}, //6814 #CIRCLED IDEOGRAPH CORRECT + {0xA94A, 0x338E}, //6815 #SQUARE MG + {0xA94B, 0x338F}, //6816 #SQUARE KG + {0xA94C, 0x339C}, //6817 #SQUARE MM + {0xA94D, 0x339D}, //6818 #SQUARE CM + {0xA94E, 0x339E}, //6819 #SQUARE KM + {0xA94F, 0x33A1}, //6820 #SQUARE M SQUARED + {0xA950, 0x33C4}, //6821 #SQUARE CC + {0xA951, 0x33CE}, //6822 #SQUARE KM CAPITAL + {0xA952, 0x33D1}, //6823 #SQUARE LN + {0xA953, 0x33D2}, //6824 #SQUARE LOG + {0xA954, 0x33D5}, //6825 #SQUARE MIL + {0xA955, 0xFE30}, //6826 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER + {0xA956, 0xFFE2}, //6827 #FULLWIDTH NOT SIGN + {0xA957, 0xFFE4}, //6828 #FULLWIDTH BROKEN BAR + {0xA959, 0x2121}, //6829 #TELEPHONE SIGN + {0xA95A, 0x3231}, //6830 #PARENTHESIZED IDEOGRAPH STOCK + {0xA95C, 0x2010}, //6831 #HYPHEN + {0xA960, 0x30FC}, //6832 #KATAKANA-HIRAGANA PROLONGED SOUND MARK + {0xA961, 0x309B}, //6833 #KATAKANA-HIRAGANA VOICED SOUND MARK + {0xA962, 0x309C}, //6834 #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + {0xA963, 0x30FD}, //6835 #KATAKANA ITERATION MARK + {0xA964, 0x30FE}, //6836 #KATAKANA VOICED ITERATION MARK + {0xA965, 0x3006}, //6837 #IDEOGRAPHIC CLOSING MARK + {0xA966, 0x309D}, //6838 #HIRAGANA ITERATION MARK + {0xA967, 0x309E}, //6839 #HIRAGANA VOICED ITERATION MARK + {0xA968, 0xFE49}, //6840 #DASHED OVERLINE + {0xA969, 0xFE4A}, //6841 #CENTRELINE OVERLINE + {0xA96A, 0xFE4B}, //6842 #WAVY OVERLINE + {0xA96B, 0xFE4C}, //6843 #DOUBLE WAVY OVERLINE + {0xA96C, 0xFE4D}, //6844 #DASHED LOW LINE + {0xA96D, 0xFE4E}, //6845 #CENTRELINE LOW LINE + {0xA96E, 0xFE4F}, //6846 #WAVY LOW LINE + {0xA96F, 0xFE50}, //6847 #SMALL COMMA + {0xA970, 0xFE51}, //6848 #SMALL IDEOGRAPHIC COMMA + {0xA971, 0xFE52}, //6849 #SMALL FULL STOP + {0xA972, 0xFE54}, //6850 #SMALL SEMICOLON + {0xA973, 0xFE55}, //6851 #SMALL COLON + {0xA974, 0xFE56}, //6852 #SMALL QUESTION MARK + {0xA975, 0xFE57}, //6853 #SMALL EXCLAMATION MARK + {0xA976, 0xFE59}, //6854 #SMALL LEFT PARENTHESIS + {0xA977, 0xFE5A}, //6855 #SMALL RIGHT PARENTHESIS + {0xA978, 0xFE5B}, //6856 #SMALL LEFT CURLY BRACKET + {0xA979, 0xFE5C}, //6857 #SMALL RIGHT CURLY BRACKET + {0xA97A, 0xFE5D}, //6858 #SMALL LEFT TORTOISE SHELL BRACKET + {0xA97B, 0xFE5E}, //6859 #SMALL RIGHT TORTOISE SHELL BRACKET + {0xA97C, 0xFE5F}, //6860 #SMALL NUMBER SIGN + {0xA97D, 0xFE60}, //6861 #SMALL AMPERSAND + {0xA97E, 0xFE61}, //6862 #SMALL ASTERISK + {0xA980, 0xFE62}, //6863 #SMALL PLUS SIGN + {0xA981, 0xFE63}, //6864 #SMALL HYPHEN-MINUS + {0xA982, 0xFE64}, //6865 #SMALL LESS-THAN SIGN + {0xA983, 0xFE65}, //6866 #SMALL GREATER-THAN SIGN + {0xA984, 0xFE66}, //6867 #SMALL EQUALS SIGN + {0xA985, 0xFE68}, //6868 #SMALL REVERSE SOLIDUS + {0xA986, 0xFE69}, //6869 #SMALL DOLLAR SIGN + {0xA987, 0xFE6A}, //6870 #SMALL PERCENT SIGN + {0xA988, 0xFE6B}, //6871 #SMALL COMMERCIAL AT + {0xA996, 0x3007}, //6872 #IDEOGRAPHIC NUMBER ZERO + {0xA9A4, 0x2500}, //6873 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA9A5, 0x2501}, //6874 #BOX DRAWINGS HEAVY HORIZONTAL + {0xA9A6, 0x2502}, //6875 #BOX DRAWINGS LIGHT VERTICAL + {0xA9A7, 0x2503}, //6876 #BOX DRAWINGS HEAVY VERTICAL + {0xA9A8, 0x2504}, //6877 #BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL + {0xA9A9, 0x2505}, //6878 #BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL + {0xA9AA, 0x2506}, //6879 #BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL + {0xA9AB, 0x2507}, //6880 #BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL + {0xA9AC, 0x2508}, //6881 #BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL + {0xA9AD, 0x2509}, //6882 #BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL + {0xA9AE, 0x250A}, //6883 #BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL + {0xA9AF, 0x250B}, //6884 #BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL + {0xA9B0, 0x250C}, //6885 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA9B1, 0x250D}, //6886 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY + {0xA9B2, 0x250E}, //6887 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT + {0xA9B3, 0x250F}, //6888 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0xA9B4, 0x2510}, //6889 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA9B5, 0x2511}, //6890 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY + {0xA9B6, 0x2512}, //6891 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT + {0xA9B7, 0x2513}, //6892 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0xA9B8, 0x2514}, //6893 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA9B9, 0x2515}, //6894 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY + {0xA9BA, 0x2516}, //6895 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT + {0xA9BB, 0x2517}, //6896 #BOX DRAWINGS HEAVY UP AND RIGHT + {0xA9BC, 0x2518}, //6897 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA9BD, 0x2519}, //6898 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY + {0xA9BE, 0x251A}, //6899 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT + {0xA9BF, 0x251B}, //6900 #BOX DRAWINGS HEAVY UP AND LEFT + {0xA9C0, 0x251C}, //6901 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA9C1, 0x251D}, //6902 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0xA9C2, 0x251E}, //6903 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT + {0xA9C3, 0x251F}, //6904 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT + {0xA9C4, 0x2520}, //6905 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0xA9C5, 0x2521}, //6906 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY + {0xA9C6, 0x2522}, //6907 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY + {0xA9C7, 0x2523}, //6908 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0xA9C8, 0x2524}, //6909 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA9C9, 0x2525}, //6910 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0xA9CA, 0x2526}, //6911 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT + {0xA9CB, 0x2527}, //6912 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT + {0xA9CC, 0x2528}, //6913 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0xA9CD, 0x2529}, //6914 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY + {0xA9CE, 0x252A}, //6915 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY + {0xA9CF, 0x252B}, //6916 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0xA9D0, 0x252C}, //6917 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA9D1, 0x252D}, //6918 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT + {0xA9D2, 0x252E}, //6919 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT + {0xA9D3, 0x252F}, //6920 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0xA9D4, 0x2530}, //6921 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0xA9D5, 0x2531}, //6922 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY + {0xA9D6, 0x2532}, //6923 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY + {0xA9D7, 0x2533}, //6924 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0xA9D8, 0x2534}, //6925 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA9D9, 0x2535}, //6926 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT + {0xA9DA, 0x2536}, //6927 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT + {0xA9DB, 0x2537}, //6928 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0xA9DC, 0x2538}, //6929 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0xA9DD, 0x2539}, //6930 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY + {0xA9DE, 0x253A}, //6931 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY + {0xA9DF, 0x253B}, //6932 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0xA9E0, 0x253C}, //6933 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA9E1, 0x253D}, //6934 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT + {0xA9E2, 0x253E}, //6935 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT + {0xA9E3, 0x253F}, //6936 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0xA9E4, 0x2540}, //6937 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT + {0xA9E5, 0x2541}, //6938 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT + {0xA9E6, 0x2542}, //6939 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0xA9E7, 0x2543}, //6940 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT + {0xA9E8, 0x2544}, //6941 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT + {0xA9E9, 0x2545}, //6942 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT + {0xA9EA, 0x2546}, //6943 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT + {0xA9EB, 0x2547}, //6944 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY + {0xA9EC, 0x2548}, //6945 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY + {0xA9ED, 0x2549}, //6946 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY + {0xA9EE, 0x254A}, //6947 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY + {0xA9EF, 0x254B}, //6948 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0xAA40, 0x72DC}, //6949 #CJK UNIFIED IDEOGRAPH + {0xAA41, 0x72DD}, //6950 #CJK UNIFIED IDEOGRAPH + {0xAA42, 0x72DF}, //6951 #CJK UNIFIED IDEOGRAPH + {0xAA43, 0x72E2}, //6952 #CJK UNIFIED IDEOGRAPH + {0xAA44, 0x72E3}, //6953 #CJK UNIFIED IDEOGRAPH + {0xAA45, 0x72E4}, //6954 #CJK UNIFIED IDEOGRAPH + {0xAA46, 0x72E5}, //6955 #CJK UNIFIED IDEOGRAPH + {0xAA47, 0x72E6}, //6956 #CJK UNIFIED IDEOGRAPH + {0xAA48, 0x72E7}, //6957 #CJK UNIFIED IDEOGRAPH + {0xAA49, 0x72EA}, //6958 #CJK UNIFIED IDEOGRAPH + {0xAA4A, 0x72EB}, //6959 #CJK UNIFIED IDEOGRAPH + {0xAA4B, 0x72F5}, //6960 #CJK UNIFIED IDEOGRAPH + {0xAA4C, 0x72F6}, //6961 #CJK UNIFIED IDEOGRAPH + {0xAA4D, 0x72F9}, //6962 #CJK UNIFIED IDEOGRAPH + {0xAA4E, 0x72FD}, //6963 #CJK UNIFIED IDEOGRAPH + {0xAA4F, 0x72FE}, //6964 #CJK UNIFIED IDEOGRAPH + {0xAA50, 0x72FF}, //6965 #CJK UNIFIED IDEOGRAPH + {0xAA51, 0x7300}, //6966 #CJK UNIFIED IDEOGRAPH + {0xAA52, 0x7302}, //6967 #CJK UNIFIED IDEOGRAPH + {0xAA53, 0x7304}, //6968 #CJK UNIFIED IDEOGRAPH + {0xAA54, 0x7305}, //6969 #CJK UNIFIED IDEOGRAPH + {0xAA55, 0x7306}, //6970 #CJK UNIFIED IDEOGRAPH + {0xAA56, 0x7307}, //6971 #CJK UNIFIED IDEOGRAPH + {0xAA57, 0x7308}, //6972 #CJK UNIFIED IDEOGRAPH + {0xAA58, 0x7309}, //6973 #CJK UNIFIED IDEOGRAPH + {0xAA59, 0x730B}, //6974 #CJK UNIFIED IDEOGRAPH + {0xAA5A, 0x730C}, //6975 #CJK UNIFIED IDEOGRAPH + {0xAA5B, 0x730D}, //6976 #CJK UNIFIED IDEOGRAPH + {0xAA5C, 0x730F}, //6977 #CJK UNIFIED IDEOGRAPH + {0xAA5D, 0x7310}, //6978 #CJK UNIFIED IDEOGRAPH + {0xAA5E, 0x7311}, //6979 #CJK UNIFIED IDEOGRAPH + {0xAA5F, 0x7312}, //6980 #CJK UNIFIED IDEOGRAPH + {0xAA60, 0x7314}, //6981 #CJK UNIFIED IDEOGRAPH + {0xAA61, 0x7318}, //6982 #CJK UNIFIED IDEOGRAPH + {0xAA62, 0x7319}, //6983 #CJK UNIFIED IDEOGRAPH + {0xAA63, 0x731A}, //6984 #CJK UNIFIED IDEOGRAPH + {0xAA64, 0x731F}, //6985 #CJK UNIFIED IDEOGRAPH + {0xAA65, 0x7320}, //6986 #CJK UNIFIED IDEOGRAPH + {0xAA66, 0x7323}, //6987 #CJK UNIFIED IDEOGRAPH + {0xAA67, 0x7324}, //6988 #CJK UNIFIED IDEOGRAPH + {0xAA68, 0x7326}, //6989 #CJK UNIFIED IDEOGRAPH + {0xAA69, 0x7327}, //6990 #CJK UNIFIED IDEOGRAPH + {0xAA6A, 0x7328}, //6991 #CJK UNIFIED IDEOGRAPH + {0xAA6B, 0x732D}, //6992 #CJK UNIFIED IDEOGRAPH + {0xAA6C, 0x732F}, //6993 #CJK UNIFIED IDEOGRAPH + {0xAA6D, 0x7330}, //6994 #CJK UNIFIED IDEOGRAPH + {0xAA6E, 0x7332}, //6995 #CJK UNIFIED IDEOGRAPH + {0xAA6F, 0x7333}, //6996 #CJK UNIFIED IDEOGRAPH + {0xAA70, 0x7335}, //6997 #CJK UNIFIED IDEOGRAPH + {0xAA71, 0x7336}, //6998 #CJK UNIFIED IDEOGRAPH + {0xAA72, 0x733A}, //6999 #CJK UNIFIED IDEOGRAPH + {0xAA73, 0x733B}, //7000 #CJK UNIFIED IDEOGRAPH + {0xAA74, 0x733C}, //7001 #CJK UNIFIED IDEOGRAPH + {0xAA75, 0x733D}, //7002 #CJK UNIFIED IDEOGRAPH + {0xAA76, 0x7340}, //7003 #CJK UNIFIED IDEOGRAPH + {0xAA77, 0x7341}, //7004 #CJK UNIFIED IDEOGRAPH + {0xAA78, 0x7342}, //7005 #CJK UNIFIED IDEOGRAPH + {0xAA79, 0x7343}, //7006 #CJK UNIFIED IDEOGRAPH + {0xAA7A, 0x7344}, //7007 #CJK UNIFIED IDEOGRAPH + {0xAA7B, 0x7345}, //7008 #CJK UNIFIED IDEOGRAPH + {0xAA7C, 0x7346}, //7009 #CJK UNIFIED IDEOGRAPH + {0xAA7D, 0x7347}, //7010 #CJK UNIFIED IDEOGRAPH + {0xAA7E, 0x7348}, //7011 #CJK UNIFIED IDEOGRAPH + {0xAA80, 0x7349}, //7012 #CJK UNIFIED IDEOGRAPH + {0xAA81, 0x734A}, //7013 #CJK UNIFIED IDEOGRAPH + {0xAA82, 0x734B}, //7014 #CJK UNIFIED IDEOGRAPH + {0xAA83, 0x734C}, //7015 #CJK UNIFIED IDEOGRAPH + {0xAA84, 0x734E}, //7016 #CJK UNIFIED IDEOGRAPH + {0xAA85, 0x734F}, //7017 #CJK UNIFIED IDEOGRAPH + {0xAA86, 0x7351}, //7018 #CJK UNIFIED IDEOGRAPH + {0xAA87, 0x7353}, //7019 #CJK UNIFIED IDEOGRAPH + {0xAA88, 0x7354}, //7020 #CJK UNIFIED IDEOGRAPH + {0xAA89, 0x7355}, //7021 #CJK UNIFIED IDEOGRAPH + {0xAA8A, 0x7356}, //7022 #CJK UNIFIED IDEOGRAPH + {0xAA8B, 0x7358}, //7023 #CJK UNIFIED IDEOGRAPH + {0xAA8C, 0x7359}, //7024 #CJK UNIFIED IDEOGRAPH + {0xAA8D, 0x735A}, //7025 #CJK UNIFIED IDEOGRAPH + {0xAA8E, 0x735B}, //7026 #CJK UNIFIED IDEOGRAPH + {0xAA8F, 0x735C}, //7027 #CJK UNIFIED IDEOGRAPH + {0xAA90, 0x735D}, //7028 #CJK UNIFIED IDEOGRAPH + {0xAA91, 0x735E}, //7029 #CJK UNIFIED IDEOGRAPH + {0xAA92, 0x735F}, //7030 #CJK UNIFIED IDEOGRAPH + {0xAA93, 0x7361}, //7031 #CJK UNIFIED IDEOGRAPH + {0xAA94, 0x7362}, //7032 #CJK UNIFIED IDEOGRAPH + {0xAA95, 0x7363}, //7033 #CJK UNIFIED IDEOGRAPH + {0xAA96, 0x7364}, //7034 #CJK UNIFIED IDEOGRAPH + {0xAA97, 0x7365}, //7035 #CJK UNIFIED IDEOGRAPH + {0xAA98, 0x7366}, //7036 #CJK UNIFIED IDEOGRAPH + {0xAA99, 0x7367}, //7037 #CJK UNIFIED IDEOGRAPH + {0xAA9A, 0x7368}, //7038 #CJK UNIFIED IDEOGRAPH + {0xAA9B, 0x7369}, //7039 #CJK UNIFIED IDEOGRAPH + {0xAA9C, 0x736A}, //7040 #CJK UNIFIED IDEOGRAPH + {0xAA9D, 0x736B}, //7041 #CJK UNIFIED IDEOGRAPH + {0xAA9E, 0x736E}, //7042 #CJK UNIFIED IDEOGRAPH + {0xAA9F, 0x7370}, //7043 #CJK UNIFIED IDEOGRAPH + {0xAAA0, 0x7371}, //7044 #CJK UNIFIED IDEOGRAPH + {0xAB40, 0x7372}, //7045 #CJK UNIFIED IDEOGRAPH + {0xAB41, 0x7373}, //7046 #CJK UNIFIED IDEOGRAPH + {0xAB42, 0x7374}, //7047 #CJK UNIFIED IDEOGRAPH + {0xAB43, 0x7375}, //7048 #CJK UNIFIED IDEOGRAPH + {0xAB44, 0x7376}, //7049 #CJK UNIFIED IDEOGRAPH + {0xAB45, 0x7377}, //7050 #CJK UNIFIED IDEOGRAPH + {0xAB46, 0x7378}, //7051 #CJK UNIFIED IDEOGRAPH + {0xAB47, 0x7379}, //7052 #CJK UNIFIED IDEOGRAPH + {0xAB48, 0x737A}, //7053 #CJK UNIFIED IDEOGRAPH + {0xAB49, 0x737B}, //7054 #CJK UNIFIED IDEOGRAPH + {0xAB4A, 0x737C}, //7055 #CJK UNIFIED IDEOGRAPH + {0xAB4B, 0x737D}, //7056 #CJK UNIFIED IDEOGRAPH + {0xAB4C, 0x737F}, //7057 #CJK UNIFIED IDEOGRAPH + {0xAB4D, 0x7380}, //7058 #CJK UNIFIED IDEOGRAPH + {0xAB4E, 0x7381}, //7059 #CJK UNIFIED IDEOGRAPH + {0xAB4F, 0x7382}, //7060 #CJK UNIFIED IDEOGRAPH + {0xAB50, 0x7383}, //7061 #CJK UNIFIED IDEOGRAPH + {0xAB51, 0x7385}, //7062 #CJK UNIFIED IDEOGRAPH + {0xAB52, 0x7386}, //7063 #CJK UNIFIED IDEOGRAPH + {0xAB53, 0x7388}, //7064 #CJK UNIFIED IDEOGRAPH + {0xAB54, 0x738A}, //7065 #CJK UNIFIED IDEOGRAPH + {0xAB55, 0x738C}, //7066 #CJK UNIFIED IDEOGRAPH + {0xAB56, 0x738D}, //7067 #CJK UNIFIED IDEOGRAPH + {0xAB57, 0x738F}, //7068 #CJK UNIFIED IDEOGRAPH + {0xAB58, 0x7390}, //7069 #CJK UNIFIED IDEOGRAPH + {0xAB59, 0x7392}, //7070 #CJK UNIFIED IDEOGRAPH + {0xAB5A, 0x7393}, //7071 #CJK UNIFIED IDEOGRAPH + {0xAB5B, 0x7394}, //7072 #CJK UNIFIED IDEOGRAPH + {0xAB5C, 0x7395}, //7073 #CJK UNIFIED IDEOGRAPH + {0xAB5D, 0x7397}, //7074 #CJK UNIFIED IDEOGRAPH + {0xAB5E, 0x7398}, //7075 #CJK UNIFIED IDEOGRAPH + {0xAB5F, 0x7399}, //7076 #CJK UNIFIED IDEOGRAPH + {0xAB60, 0x739A}, //7077 #CJK UNIFIED IDEOGRAPH + {0xAB61, 0x739C}, //7078 #CJK UNIFIED IDEOGRAPH + {0xAB62, 0x739D}, //7079 #CJK UNIFIED IDEOGRAPH + {0xAB63, 0x739E}, //7080 #CJK UNIFIED IDEOGRAPH + {0xAB64, 0x73A0}, //7081 #CJK UNIFIED IDEOGRAPH + {0xAB65, 0x73A1}, //7082 #CJK UNIFIED IDEOGRAPH + {0xAB66, 0x73A3}, //7083 #CJK UNIFIED IDEOGRAPH + {0xAB67, 0x73A4}, //7084 #CJK UNIFIED IDEOGRAPH + {0xAB68, 0x73A5}, //7085 #CJK UNIFIED IDEOGRAPH + {0xAB69, 0x73A6}, //7086 #CJK UNIFIED IDEOGRAPH + {0xAB6A, 0x73A7}, //7087 #CJK UNIFIED IDEOGRAPH + {0xAB6B, 0x73A8}, //7088 #CJK UNIFIED IDEOGRAPH + {0xAB6C, 0x73AA}, //7089 #CJK UNIFIED IDEOGRAPH + {0xAB6D, 0x73AC}, //7090 #CJK UNIFIED IDEOGRAPH + {0xAB6E, 0x73AD}, //7091 #CJK UNIFIED IDEOGRAPH + {0xAB6F, 0x73B1}, //7092 #CJK UNIFIED IDEOGRAPH + {0xAB70, 0x73B4}, //7093 #CJK UNIFIED IDEOGRAPH + {0xAB71, 0x73B5}, //7094 #CJK UNIFIED IDEOGRAPH + {0xAB72, 0x73B6}, //7095 #CJK UNIFIED IDEOGRAPH + {0xAB73, 0x73B8}, //7096 #CJK UNIFIED IDEOGRAPH + {0xAB74, 0x73B9}, //7097 #CJK UNIFIED IDEOGRAPH + {0xAB75, 0x73BC}, //7098 #CJK UNIFIED IDEOGRAPH + {0xAB76, 0x73BD}, //7099 #CJK UNIFIED IDEOGRAPH + {0xAB77, 0x73BE}, //7100 #CJK UNIFIED IDEOGRAPH + {0xAB78, 0x73BF}, //7101 #CJK UNIFIED IDEOGRAPH + {0xAB79, 0x73C1}, //7102 #CJK UNIFIED IDEOGRAPH + {0xAB7A, 0x73C3}, //7103 #CJK UNIFIED IDEOGRAPH + {0xAB7B, 0x73C4}, //7104 #CJK UNIFIED IDEOGRAPH + {0xAB7C, 0x73C5}, //7105 #CJK UNIFIED IDEOGRAPH + {0xAB7D, 0x73C6}, //7106 #CJK UNIFIED IDEOGRAPH + {0xAB7E, 0x73C7}, //7107 #CJK UNIFIED IDEOGRAPH + {0xAB80, 0x73CB}, //7108 #CJK UNIFIED IDEOGRAPH + {0xAB81, 0x73CC}, //7109 #CJK UNIFIED IDEOGRAPH + {0xAB82, 0x73CE}, //7110 #CJK UNIFIED IDEOGRAPH + {0xAB83, 0x73D2}, //7111 #CJK UNIFIED IDEOGRAPH + {0xAB84, 0x73D3}, //7112 #CJK UNIFIED IDEOGRAPH + {0xAB85, 0x73D4}, //7113 #CJK UNIFIED IDEOGRAPH + {0xAB86, 0x73D5}, //7114 #CJK UNIFIED IDEOGRAPH + {0xAB87, 0x73D6}, //7115 #CJK UNIFIED IDEOGRAPH + {0xAB88, 0x73D7}, //7116 #CJK UNIFIED IDEOGRAPH + {0xAB89, 0x73D8}, //7117 #CJK UNIFIED IDEOGRAPH + {0xAB8A, 0x73DA}, //7118 #CJK UNIFIED IDEOGRAPH + {0xAB8B, 0x73DB}, //7119 #CJK UNIFIED IDEOGRAPH + {0xAB8C, 0x73DC}, //7120 #CJK UNIFIED IDEOGRAPH + {0xAB8D, 0x73DD}, //7121 #CJK UNIFIED IDEOGRAPH + {0xAB8E, 0x73DF}, //7122 #CJK UNIFIED IDEOGRAPH + {0xAB8F, 0x73E1}, //7123 #CJK UNIFIED IDEOGRAPH + {0xAB90, 0x73E2}, //7124 #CJK UNIFIED IDEOGRAPH + {0xAB91, 0x73E3}, //7125 #CJK UNIFIED IDEOGRAPH + {0xAB92, 0x73E4}, //7126 #CJK UNIFIED IDEOGRAPH + {0xAB93, 0x73E6}, //7127 #CJK UNIFIED IDEOGRAPH + {0xAB94, 0x73E8}, //7128 #CJK UNIFIED IDEOGRAPH + {0xAB95, 0x73EA}, //7129 #CJK UNIFIED IDEOGRAPH + {0xAB96, 0x73EB}, //7130 #CJK UNIFIED IDEOGRAPH + {0xAB97, 0x73EC}, //7131 #CJK UNIFIED IDEOGRAPH + {0xAB98, 0x73EE}, //7132 #CJK UNIFIED IDEOGRAPH + {0xAB99, 0x73EF}, //7133 #CJK UNIFIED IDEOGRAPH + {0xAB9A, 0x73F0}, //7134 #CJK UNIFIED IDEOGRAPH + {0xAB9B, 0x73F1}, //7135 #CJK UNIFIED IDEOGRAPH + {0xAB9C, 0x73F3}, //7136 #CJK UNIFIED IDEOGRAPH + {0xAB9D, 0x73F4}, //7137 #CJK UNIFIED IDEOGRAPH + {0xAB9E, 0x73F5}, //7138 #CJK UNIFIED IDEOGRAPH + {0xAB9F, 0x73F6}, //7139 #CJK UNIFIED IDEOGRAPH + {0xABA0, 0x73F7}, //7140 #CJK UNIFIED IDEOGRAPH + {0xAC40, 0x73F8}, //7141 #CJK UNIFIED IDEOGRAPH + {0xAC41, 0x73F9}, //7142 #CJK UNIFIED IDEOGRAPH + {0xAC42, 0x73FA}, //7143 #CJK UNIFIED IDEOGRAPH + {0xAC43, 0x73FB}, //7144 #CJK UNIFIED IDEOGRAPH + {0xAC44, 0x73FC}, //7145 #CJK UNIFIED IDEOGRAPH + {0xAC45, 0x73FD}, //7146 #CJK UNIFIED IDEOGRAPH + {0xAC46, 0x73FE}, //7147 #CJK UNIFIED IDEOGRAPH + {0xAC47, 0x73FF}, //7148 #CJK UNIFIED IDEOGRAPH + {0xAC48, 0x7400}, //7149 #CJK UNIFIED IDEOGRAPH + {0xAC49, 0x7401}, //7150 #CJK UNIFIED IDEOGRAPH + {0xAC4A, 0x7402}, //7151 #CJK UNIFIED IDEOGRAPH + {0xAC4B, 0x7404}, //7152 #CJK UNIFIED IDEOGRAPH + {0xAC4C, 0x7407}, //7153 #CJK UNIFIED IDEOGRAPH + {0xAC4D, 0x7408}, //7154 #CJK UNIFIED IDEOGRAPH + {0xAC4E, 0x740B}, //7155 #CJK UNIFIED IDEOGRAPH + {0xAC4F, 0x740C}, //7156 #CJK UNIFIED IDEOGRAPH + {0xAC50, 0x740D}, //7157 #CJK UNIFIED IDEOGRAPH + {0xAC51, 0x740E}, //7158 #CJK UNIFIED IDEOGRAPH + {0xAC52, 0x7411}, //7159 #CJK UNIFIED IDEOGRAPH + {0xAC53, 0x7412}, //7160 #CJK UNIFIED IDEOGRAPH + {0xAC54, 0x7413}, //7161 #CJK UNIFIED IDEOGRAPH + {0xAC55, 0x7414}, //7162 #CJK UNIFIED IDEOGRAPH + {0xAC56, 0x7415}, //7163 #CJK UNIFIED IDEOGRAPH + {0xAC57, 0x7416}, //7164 #CJK UNIFIED IDEOGRAPH + {0xAC58, 0x7417}, //7165 #CJK UNIFIED IDEOGRAPH + {0xAC59, 0x7418}, //7166 #CJK UNIFIED IDEOGRAPH + {0xAC5A, 0x7419}, //7167 #CJK UNIFIED IDEOGRAPH + {0xAC5B, 0x741C}, //7168 #CJK UNIFIED IDEOGRAPH + {0xAC5C, 0x741D}, //7169 #CJK UNIFIED IDEOGRAPH + {0xAC5D, 0x741E}, //7170 #CJK UNIFIED IDEOGRAPH + {0xAC5E, 0x741F}, //7171 #CJK UNIFIED IDEOGRAPH + {0xAC5F, 0x7420}, //7172 #CJK UNIFIED IDEOGRAPH + {0xAC60, 0x7421}, //7173 #CJK UNIFIED IDEOGRAPH + {0xAC61, 0x7423}, //7174 #CJK UNIFIED IDEOGRAPH + {0xAC62, 0x7424}, //7175 #CJK UNIFIED IDEOGRAPH + {0xAC63, 0x7427}, //7176 #CJK UNIFIED IDEOGRAPH + {0xAC64, 0x7429}, //7177 #CJK UNIFIED IDEOGRAPH + {0xAC65, 0x742B}, //7178 #CJK UNIFIED IDEOGRAPH + {0xAC66, 0x742D}, //7179 #CJK UNIFIED IDEOGRAPH + {0xAC67, 0x742F}, //7180 #CJK UNIFIED IDEOGRAPH + {0xAC68, 0x7431}, //7181 #CJK UNIFIED IDEOGRAPH + {0xAC69, 0x7432}, //7182 #CJK UNIFIED IDEOGRAPH + {0xAC6A, 0x7437}, //7183 #CJK UNIFIED IDEOGRAPH + {0xAC6B, 0x7438}, //7184 #CJK UNIFIED IDEOGRAPH + {0xAC6C, 0x7439}, //7185 #CJK UNIFIED IDEOGRAPH + {0xAC6D, 0x743A}, //7186 #CJK UNIFIED IDEOGRAPH + {0xAC6E, 0x743B}, //7187 #CJK UNIFIED IDEOGRAPH + {0xAC6F, 0x743D}, //7188 #CJK UNIFIED IDEOGRAPH + {0xAC70, 0x743E}, //7189 #CJK UNIFIED IDEOGRAPH + {0xAC71, 0x743F}, //7190 #CJK UNIFIED IDEOGRAPH + {0xAC72, 0x7440}, //7191 #CJK UNIFIED IDEOGRAPH + {0xAC73, 0x7442}, //7192 #CJK UNIFIED IDEOGRAPH + {0xAC74, 0x7443}, //7193 #CJK UNIFIED IDEOGRAPH + {0xAC75, 0x7444}, //7194 #CJK UNIFIED IDEOGRAPH + {0xAC76, 0x7445}, //7195 #CJK UNIFIED IDEOGRAPH + {0xAC77, 0x7446}, //7196 #CJK UNIFIED IDEOGRAPH + {0xAC78, 0x7447}, //7197 #CJK UNIFIED IDEOGRAPH + {0xAC79, 0x7448}, //7198 #CJK UNIFIED IDEOGRAPH + {0xAC7A, 0x7449}, //7199 #CJK UNIFIED IDEOGRAPH + {0xAC7B, 0x744A}, //7200 #CJK UNIFIED IDEOGRAPH + {0xAC7C, 0x744B}, //7201 #CJK UNIFIED IDEOGRAPH + {0xAC7D, 0x744C}, //7202 #CJK UNIFIED IDEOGRAPH + {0xAC7E, 0x744D}, //7203 #CJK UNIFIED IDEOGRAPH + {0xAC80, 0x744E}, //7204 #CJK UNIFIED IDEOGRAPH + {0xAC81, 0x744F}, //7205 #CJK UNIFIED IDEOGRAPH + {0xAC82, 0x7450}, //7206 #CJK UNIFIED IDEOGRAPH + {0xAC83, 0x7451}, //7207 #CJK UNIFIED IDEOGRAPH + {0xAC84, 0x7452}, //7208 #CJK UNIFIED IDEOGRAPH + {0xAC85, 0x7453}, //7209 #CJK UNIFIED IDEOGRAPH + {0xAC86, 0x7454}, //7210 #CJK UNIFIED IDEOGRAPH + {0xAC87, 0x7456}, //7211 #CJK UNIFIED IDEOGRAPH + {0xAC88, 0x7458}, //7212 #CJK UNIFIED IDEOGRAPH + {0xAC89, 0x745D}, //7213 #CJK UNIFIED IDEOGRAPH + {0xAC8A, 0x7460}, //7214 #CJK UNIFIED IDEOGRAPH + {0xAC8B, 0x7461}, //7215 #CJK UNIFIED IDEOGRAPH + {0xAC8C, 0x7462}, //7216 #CJK UNIFIED IDEOGRAPH + {0xAC8D, 0x7463}, //7217 #CJK UNIFIED IDEOGRAPH + {0xAC8E, 0x7464}, //7218 #CJK UNIFIED IDEOGRAPH + {0xAC8F, 0x7465}, //7219 #CJK UNIFIED IDEOGRAPH + {0xAC90, 0x7466}, //7220 #CJK UNIFIED IDEOGRAPH + {0xAC91, 0x7467}, //7221 #CJK UNIFIED IDEOGRAPH + {0xAC92, 0x7468}, //7222 #CJK UNIFIED IDEOGRAPH + {0xAC93, 0x7469}, //7223 #CJK UNIFIED IDEOGRAPH + {0xAC94, 0x746A}, //7224 #CJK UNIFIED IDEOGRAPH + {0xAC95, 0x746B}, //7225 #CJK UNIFIED IDEOGRAPH + {0xAC96, 0x746C}, //7226 #CJK UNIFIED IDEOGRAPH + {0xAC97, 0x746E}, //7227 #CJK UNIFIED IDEOGRAPH + {0xAC98, 0x746F}, //7228 #CJK UNIFIED IDEOGRAPH + {0xAC99, 0x7471}, //7229 #CJK UNIFIED IDEOGRAPH + {0xAC9A, 0x7472}, //7230 #CJK UNIFIED IDEOGRAPH + {0xAC9B, 0x7473}, //7231 #CJK UNIFIED IDEOGRAPH + {0xAC9C, 0x7474}, //7232 #CJK UNIFIED IDEOGRAPH + {0xAC9D, 0x7475}, //7233 #CJK UNIFIED IDEOGRAPH + {0xAC9E, 0x7478}, //7234 #CJK UNIFIED IDEOGRAPH + {0xAC9F, 0x7479}, //7235 #CJK UNIFIED IDEOGRAPH + {0xACA0, 0x747A}, //7236 #CJK UNIFIED IDEOGRAPH + {0xAD40, 0x747B}, //7237 #CJK UNIFIED IDEOGRAPH + {0xAD41, 0x747C}, //7238 #CJK UNIFIED IDEOGRAPH + {0xAD42, 0x747D}, //7239 #CJK UNIFIED IDEOGRAPH + {0xAD43, 0x747F}, //7240 #CJK UNIFIED IDEOGRAPH + {0xAD44, 0x7482}, //7241 #CJK UNIFIED IDEOGRAPH + {0xAD45, 0x7484}, //7242 #CJK UNIFIED IDEOGRAPH + {0xAD46, 0x7485}, //7243 #CJK UNIFIED IDEOGRAPH + {0xAD47, 0x7486}, //7244 #CJK UNIFIED IDEOGRAPH + {0xAD48, 0x7488}, //7245 #CJK UNIFIED IDEOGRAPH + {0xAD49, 0x7489}, //7246 #CJK UNIFIED IDEOGRAPH + {0xAD4A, 0x748A}, //7247 #CJK UNIFIED IDEOGRAPH + {0xAD4B, 0x748C}, //7248 #CJK UNIFIED IDEOGRAPH + {0xAD4C, 0x748D}, //7249 #CJK UNIFIED IDEOGRAPH + {0xAD4D, 0x748F}, //7250 #CJK UNIFIED IDEOGRAPH + {0xAD4E, 0x7491}, //7251 #CJK UNIFIED IDEOGRAPH + {0xAD4F, 0x7492}, //7252 #CJK UNIFIED IDEOGRAPH + {0xAD50, 0x7493}, //7253 #CJK UNIFIED IDEOGRAPH + {0xAD51, 0x7494}, //7254 #CJK UNIFIED IDEOGRAPH + {0xAD52, 0x7495}, //7255 #CJK UNIFIED IDEOGRAPH + {0xAD53, 0x7496}, //7256 #CJK UNIFIED IDEOGRAPH + {0xAD54, 0x7497}, //7257 #CJK UNIFIED IDEOGRAPH + {0xAD55, 0x7498}, //7258 #CJK UNIFIED IDEOGRAPH + {0xAD56, 0x7499}, //7259 #CJK UNIFIED IDEOGRAPH + {0xAD57, 0x749A}, //7260 #CJK UNIFIED IDEOGRAPH + {0xAD58, 0x749B}, //7261 #CJK UNIFIED IDEOGRAPH + {0xAD59, 0x749D}, //7262 #CJK UNIFIED IDEOGRAPH + {0xAD5A, 0x749F}, //7263 #CJK UNIFIED IDEOGRAPH + {0xAD5B, 0x74A0}, //7264 #CJK UNIFIED IDEOGRAPH + {0xAD5C, 0x74A1}, //7265 #CJK UNIFIED IDEOGRAPH + {0xAD5D, 0x74A2}, //7266 #CJK UNIFIED IDEOGRAPH + {0xAD5E, 0x74A3}, //7267 #CJK UNIFIED IDEOGRAPH + {0xAD5F, 0x74A4}, //7268 #CJK UNIFIED IDEOGRAPH + {0xAD60, 0x74A5}, //7269 #CJK UNIFIED IDEOGRAPH + {0xAD61, 0x74A6}, //7270 #CJK UNIFIED IDEOGRAPH + {0xAD62, 0x74AA}, //7271 #CJK UNIFIED IDEOGRAPH + {0xAD63, 0x74AB}, //7272 #CJK UNIFIED IDEOGRAPH + {0xAD64, 0x74AC}, //7273 #CJK UNIFIED IDEOGRAPH + {0xAD65, 0x74AD}, //7274 #CJK UNIFIED IDEOGRAPH + {0xAD66, 0x74AE}, //7275 #CJK UNIFIED IDEOGRAPH + {0xAD67, 0x74AF}, //7276 #CJK UNIFIED IDEOGRAPH + {0xAD68, 0x74B0}, //7277 #CJK UNIFIED IDEOGRAPH + {0xAD69, 0x74B1}, //7278 #CJK UNIFIED IDEOGRAPH + {0xAD6A, 0x74B2}, //7279 #CJK UNIFIED IDEOGRAPH + {0xAD6B, 0x74B3}, //7280 #CJK UNIFIED IDEOGRAPH + {0xAD6C, 0x74B4}, //7281 #CJK UNIFIED IDEOGRAPH + {0xAD6D, 0x74B5}, //7282 #CJK UNIFIED IDEOGRAPH + {0xAD6E, 0x74B6}, //7283 #CJK UNIFIED IDEOGRAPH + {0xAD6F, 0x74B7}, //7284 #CJK UNIFIED IDEOGRAPH + {0xAD70, 0x74B8}, //7285 #CJK UNIFIED IDEOGRAPH + {0xAD71, 0x74B9}, //7286 #CJK UNIFIED IDEOGRAPH + {0xAD72, 0x74BB}, //7287 #CJK UNIFIED IDEOGRAPH + {0xAD73, 0x74BC}, //7288 #CJK UNIFIED IDEOGRAPH + {0xAD74, 0x74BD}, //7289 #CJK UNIFIED IDEOGRAPH + {0xAD75, 0x74BE}, //7290 #CJK UNIFIED IDEOGRAPH + {0xAD76, 0x74BF}, //7291 #CJK UNIFIED IDEOGRAPH + {0xAD77, 0x74C0}, //7292 #CJK UNIFIED IDEOGRAPH + {0xAD78, 0x74C1}, //7293 #CJK UNIFIED IDEOGRAPH + {0xAD79, 0x74C2}, //7294 #CJK UNIFIED IDEOGRAPH + {0xAD7A, 0x74C3}, //7295 #CJK UNIFIED IDEOGRAPH + {0xAD7B, 0x74C4}, //7296 #CJK UNIFIED IDEOGRAPH + {0xAD7C, 0x74C5}, //7297 #CJK UNIFIED IDEOGRAPH + {0xAD7D, 0x74C6}, //7298 #CJK UNIFIED IDEOGRAPH + {0xAD7E, 0x74C7}, //7299 #CJK UNIFIED IDEOGRAPH + {0xAD80, 0x74C8}, //7300 #CJK UNIFIED IDEOGRAPH + {0xAD81, 0x74C9}, //7301 #CJK UNIFIED IDEOGRAPH + {0xAD82, 0x74CA}, //7302 #CJK UNIFIED IDEOGRAPH + {0xAD83, 0x74CB}, //7303 #CJK UNIFIED IDEOGRAPH + {0xAD84, 0x74CC}, //7304 #CJK UNIFIED IDEOGRAPH + {0xAD85, 0x74CD}, //7305 #CJK UNIFIED IDEOGRAPH + {0xAD86, 0x74CE}, //7306 #CJK UNIFIED IDEOGRAPH + {0xAD87, 0x74CF}, //7307 #CJK UNIFIED IDEOGRAPH + {0xAD88, 0x74D0}, //7308 #CJK UNIFIED IDEOGRAPH + {0xAD89, 0x74D1}, //7309 #CJK UNIFIED IDEOGRAPH + {0xAD8A, 0x74D3}, //7310 #CJK UNIFIED IDEOGRAPH + {0xAD8B, 0x74D4}, //7311 #CJK UNIFIED IDEOGRAPH + {0xAD8C, 0x74D5}, //7312 #CJK UNIFIED IDEOGRAPH + {0xAD8D, 0x74D6}, //7313 #CJK UNIFIED IDEOGRAPH + {0xAD8E, 0x74D7}, //7314 #CJK UNIFIED IDEOGRAPH + {0xAD8F, 0x74D8}, //7315 #CJK UNIFIED IDEOGRAPH + {0xAD90, 0x74D9}, //7316 #CJK UNIFIED IDEOGRAPH + {0xAD91, 0x74DA}, //7317 #CJK UNIFIED IDEOGRAPH + {0xAD92, 0x74DB}, //7318 #CJK UNIFIED IDEOGRAPH + {0xAD93, 0x74DD}, //7319 #CJK UNIFIED IDEOGRAPH + {0xAD94, 0x74DF}, //7320 #CJK UNIFIED IDEOGRAPH + {0xAD95, 0x74E1}, //7321 #CJK UNIFIED IDEOGRAPH + {0xAD96, 0x74E5}, //7322 #CJK UNIFIED IDEOGRAPH + {0xAD97, 0x74E7}, //7323 #CJK UNIFIED IDEOGRAPH + {0xAD98, 0x74E8}, //7324 #CJK UNIFIED IDEOGRAPH + {0xAD99, 0x74E9}, //7325 #CJK UNIFIED IDEOGRAPH + {0xAD9A, 0x74EA}, //7326 #CJK UNIFIED IDEOGRAPH + {0xAD9B, 0x74EB}, //7327 #CJK UNIFIED IDEOGRAPH + {0xAD9C, 0x74EC}, //7328 #CJK UNIFIED IDEOGRAPH + {0xAD9D, 0x74ED}, //7329 #CJK UNIFIED IDEOGRAPH + {0xAD9E, 0x74F0}, //7330 #CJK UNIFIED IDEOGRAPH + {0xAD9F, 0x74F1}, //7331 #CJK UNIFIED IDEOGRAPH + {0xADA0, 0x74F2}, //7332 #CJK UNIFIED IDEOGRAPH + {0xAE40, 0x74F3}, //7333 #CJK UNIFIED IDEOGRAPH + {0xAE41, 0x74F5}, //7334 #CJK UNIFIED IDEOGRAPH + {0xAE42, 0x74F8}, //7335 #CJK UNIFIED IDEOGRAPH + {0xAE43, 0x74F9}, //7336 #CJK UNIFIED IDEOGRAPH + {0xAE44, 0x74FA}, //7337 #CJK UNIFIED IDEOGRAPH + {0xAE45, 0x74FB}, //7338 #CJK UNIFIED IDEOGRAPH + {0xAE46, 0x74FC}, //7339 #CJK UNIFIED IDEOGRAPH + {0xAE47, 0x74FD}, //7340 #CJK UNIFIED IDEOGRAPH + {0xAE48, 0x74FE}, //7341 #CJK UNIFIED IDEOGRAPH + {0xAE49, 0x7500}, //7342 #CJK UNIFIED IDEOGRAPH + {0xAE4A, 0x7501}, //7343 #CJK UNIFIED IDEOGRAPH + {0xAE4B, 0x7502}, //7344 #CJK UNIFIED IDEOGRAPH + {0xAE4C, 0x7503}, //7345 #CJK UNIFIED IDEOGRAPH + {0xAE4D, 0x7505}, //7346 #CJK UNIFIED IDEOGRAPH + {0xAE4E, 0x7506}, //7347 #CJK UNIFIED IDEOGRAPH + {0xAE4F, 0x7507}, //7348 #CJK UNIFIED IDEOGRAPH + {0xAE50, 0x7508}, //7349 #CJK UNIFIED IDEOGRAPH + {0xAE51, 0x7509}, //7350 #CJK UNIFIED IDEOGRAPH + {0xAE52, 0x750A}, //7351 #CJK UNIFIED IDEOGRAPH + {0xAE53, 0x750B}, //7352 #CJK UNIFIED IDEOGRAPH + {0xAE54, 0x750C}, //7353 #CJK UNIFIED IDEOGRAPH + {0xAE55, 0x750E}, //7354 #CJK UNIFIED IDEOGRAPH + {0xAE56, 0x7510}, //7355 #CJK UNIFIED IDEOGRAPH + {0xAE57, 0x7512}, //7356 #CJK UNIFIED IDEOGRAPH + {0xAE58, 0x7514}, //7357 #CJK UNIFIED IDEOGRAPH + {0xAE59, 0x7515}, //7358 #CJK UNIFIED IDEOGRAPH + {0xAE5A, 0x7516}, //7359 #CJK UNIFIED IDEOGRAPH + {0xAE5B, 0x7517}, //7360 #CJK UNIFIED IDEOGRAPH + {0xAE5C, 0x751B}, //7361 #CJK UNIFIED IDEOGRAPH + {0xAE5D, 0x751D}, //7362 #CJK UNIFIED IDEOGRAPH + {0xAE5E, 0x751E}, //7363 #CJK UNIFIED IDEOGRAPH + {0xAE5F, 0x7520}, //7364 #CJK UNIFIED IDEOGRAPH + {0xAE60, 0x7521}, //7365 #CJK UNIFIED IDEOGRAPH + {0xAE61, 0x7522}, //7366 #CJK UNIFIED IDEOGRAPH + {0xAE62, 0x7523}, //7367 #CJK UNIFIED IDEOGRAPH + {0xAE63, 0x7524}, //7368 #CJK UNIFIED IDEOGRAPH + {0xAE64, 0x7526}, //7369 #CJK UNIFIED IDEOGRAPH + {0xAE65, 0x7527}, //7370 #CJK UNIFIED IDEOGRAPH + {0xAE66, 0x752A}, //7371 #CJK UNIFIED IDEOGRAPH + {0xAE67, 0x752E}, //7372 #CJK UNIFIED IDEOGRAPH + {0xAE68, 0x7534}, //7373 #CJK UNIFIED IDEOGRAPH + {0xAE69, 0x7536}, //7374 #CJK UNIFIED IDEOGRAPH + {0xAE6A, 0x7539}, //7375 #CJK UNIFIED IDEOGRAPH + {0xAE6B, 0x753C}, //7376 #CJK UNIFIED IDEOGRAPH + {0xAE6C, 0x753D}, //7377 #CJK UNIFIED IDEOGRAPH + {0xAE6D, 0x753F}, //7378 #CJK UNIFIED IDEOGRAPH + {0xAE6E, 0x7541}, //7379 #CJK UNIFIED IDEOGRAPH + {0xAE6F, 0x7542}, //7380 #CJK UNIFIED IDEOGRAPH + {0xAE70, 0x7543}, //7381 #CJK UNIFIED IDEOGRAPH + {0xAE71, 0x7544}, //7382 #CJK UNIFIED IDEOGRAPH + {0xAE72, 0x7546}, //7383 #CJK UNIFIED IDEOGRAPH + {0xAE73, 0x7547}, //7384 #CJK UNIFIED IDEOGRAPH + {0xAE74, 0x7549}, //7385 #CJK UNIFIED IDEOGRAPH + {0xAE75, 0x754A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xAE76, 0x754D}, //7387 #CJK UNIFIED IDEOGRAPH + {0xAE77, 0x7550}, //7388 #CJK UNIFIED IDEOGRAPH + {0xAE78, 0x7551}, //7389 #CJK UNIFIED IDEOGRAPH + {0xAE79, 0x7552}, //7390 #CJK UNIFIED IDEOGRAPH + {0xAE7A, 0x7553}, //7391 #CJK UNIFIED IDEOGRAPH + {0xAE7B, 0x7555}, //7392 #CJK UNIFIED IDEOGRAPH + {0xAE7C, 0x7556}, //7393 #CJK UNIFIED IDEOGRAPH + {0xAE7D, 0x7557}, //7394 #CJK UNIFIED IDEOGRAPH + {0xAE7E, 0x7558}, //7395 #CJK UNIFIED IDEOGRAPH + {0xAE80, 0x755D}, //7396 #CJK UNIFIED IDEOGRAPH + {0xAE81, 0x755E}, //7397 #CJK UNIFIED IDEOGRAPH + {0xAE82, 0x755F}, //7398 #CJK UNIFIED IDEOGRAPH + {0xAE83, 0x7560}, //7399 #CJK UNIFIED IDEOGRAPH + {0xAE84, 0x7561}, //7400 #CJK UNIFIED IDEOGRAPH + {0xAE85, 0x7562}, //7401 #CJK UNIFIED IDEOGRAPH + {0xAE86, 0x7563}, //7402 #CJK UNIFIED IDEOGRAPH + {0xAE87, 0x7564}, //7403 #CJK UNIFIED IDEOGRAPH + {0xAE88, 0x7567}, //7404 #CJK UNIFIED IDEOGRAPH + {0xAE89, 0x7568}, //7405 #CJK UNIFIED IDEOGRAPH + {0xAE8A, 0x7569}, //7406 #CJK UNIFIED IDEOGRAPH + {0xAE8B, 0x756B}, //7407 #CJK UNIFIED IDEOGRAPH + {0xAE8C, 0x756C}, //7408 #CJK UNIFIED IDEOGRAPH + {0xAE8D, 0x756D}, //7409 #CJK UNIFIED IDEOGRAPH + {0xAE8E, 0x756E}, //7410 #CJK UNIFIED IDEOGRAPH + {0xAE8F, 0x756F}, //7411 #CJK UNIFIED IDEOGRAPH + {0xAE90, 0x7570}, //7412 #CJK UNIFIED IDEOGRAPH + {0xAE91, 0x7571}, //7413 #CJK UNIFIED IDEOGRAPH + {0xAE92, 0x7573}, //7414 #CJK UNIFIED IDEOGRAPH + {0xAE93, 0x7575}, //7415 #CJK UNIFIED IDEOGRAPH + {0xAE94, 0x7576}, //7416 #CJK UNIFIED IDEOGRAPH + {0xAE95, 0x7577}, //7417 #CJK UNIFIED IDEOGRAPH + {0xAE96, 0x757A}, //7418 #CJK UNIFIED IDEOGRAPH + {0xAE97, 0x757B}, //7419 #CJK UNIFIED IDEOGRAPH + {0xAE98, 0x757C}, //7420 #CJK UNIFIED IDEOGRAPH + {0xAE99, 0x757D}, //7421 #CJK UNIFIED IDEOGRAPH + {0xAE9A, 0x757E}, //7422 #CJK UNIFIED IDEOGRAPH + {0xAE9B, 0x7580}, //7423 #CJK UNIFIED IDEOGRAPH + {0xAE9C, 0x7581}, //7424 #CJK UNIFIED IDEOGRAPH + {0xAE9D, 0x7582}, //7425 #CJK UNIFIED IDEOGRAPH + {0xAE9E, 0x7584}, //7426 #CJK UNIFIED IDEOGRAPH + {0xAE9F, 0x7585}, //7427 #CJK UNIFIED IDEOGRAPH + {0xAEA0, 0x7587}, //7428 #CJK UNIFIED IDEOGRAPH + {0xAF40, 0x7588}, //7429 #CJK UNIFIED IDEOGRAPH + {0xAF41, 0x7589}, //7430 #CJK UNIFIED IDEOGRAPH + {0xAF42, 0x758A}, //7431 #CJK UNIFIED IDEOGRAPH + {0xAF43, 0x758C}, //7432 #CJK UNIFIED IDEOGRAPH + {0xAF44, 0x758D}, //7433 #CJK UNIFIED IDEOGRAPH + {0xAF45, 0x758E}, //7434 #CJK UNIFIED IDEOGRAPH + {0xAF46, 0x7590}, //7435 #CJK UNIFIED IDEOGRAPH + {0xAF47, 0x7593}, //7436 #CJK UNIFIED IDEOGRAPH + {0xAF48, 0x7595}, //7437 #CJK UNIFIED IDEOGRAPH + {0xAF49, 0x7598}, //7438 #CJK UNIFIED IDEOGRAPH + {0xAF4A, 0x759B}, //7439 #CJK UNIFIED IDEOGRAPH + {0xAF4B, 0x759C}, //7440 #CJK UNIFIED IDEOGRAPH + {0xAF4C, 0x759E}, //7441 #CJK UNIFIED IDEOGRAPH + {0xAF4D, 0x75A2}, //7442 #CJK UNIFIED IDEOGRAPH + {0xAF4E, 0x75A6}, //7443 #CJK UNIFIED IDEOGRAPH + {0xAF4F, 0x75A7}, //7444 #CJK UNIFIED IDEOGRAPH + {0xAF50, 0x75A8}, //7445 #CJK UNIFIED IDEOGRAPH + {0xAF51, 0x75A9}, //7446 #CJK UNIFIED IDEOGRAPH + {0xAF52, 0x75AA}, //7447 #CJK UNIFIED IDEOGRAPH + {0xAF53, 0x75AD}, //7448 #CJK UNIFIED IDEOGRAPH + {0xAF54, 0x75B6}, //7449 #CJK UNIFIED IDEOGRAPH + {0xAF55, 0x75B7}, //7450 #CJK UNIFIED IDEOGRAPH + {0xAF56, 0x75BA}, //7451 #CJK UNIFIED IDEOGRAPH + {0xAF57, 0x75BB}, //7452 #CJK UNIFIED IDEOGRAPH + {0xAF58, 0x75BF}, //7453 #CJK UNIFIED IDEOGRAPH + {0xAF59, 0x75C0}, //7454 #CJK UNIFIED IDEOGRAPH + {0xAF5A, 0x75C1}, //7455 #CJK UNIFIED IDEOGRAPH + {0xAF5B, 0x75C6}, //7456 #CJK UNIFIED IDEOGRAPH + {0xAF5C, 0x75CB}, //7457 #CJK UNIFIED IDEOGRAPH + {0xAF5D, 0x75CC}, //7458 #CJK UNIFIED IDEOGRAPH + {0xAF5E, 0x75CE}, //7459 #CJK UNIFIED IDEOGRAPH + {0xAF5F, 0x75CF}, //7460 #CJK UNIFIED IDEOGRAPH + {0xAF60, 0x75D0}, //7461 #CJK UNIFIED IDEOGRAPH + {0xAF61, 0x75D1}, //7462 #CJK UNIFIED IDEOGRAPH + {0xAF62, 0x75D3}, //7463 #CJK UNIFIED IDEOGRAPH + {0xAF63, 0x75D7}, //7464 #CJK UNIFIED IDEOGRAPH + {0xAF64, 0x75D9}, //7465 #CJK UNIFIED IDEOGRAPH + {0xAF65, 0x75DA}, //7466 #CJK UNIFIED IDEOGRAPH + {0xAF66, 0x75DC}, //7467 #CJK UNIFIED IDEOGRAPH + {0xAF67, 0x75DD}, //7468 #CJK UNIFIED IDEOGRAPH + {0xAF68, 0x75DF}, //7469 #CJK UNIFIED IDEOGRAPH + {0xAF69, 0x75E0}, //7470 #CJK UNIFIED IDEOGRAPH + {0xAF6A, 0x75E1}, //7471 #CJK UNIFIED IDEOGRAPH + {0xAF6B, 0x75E5}, //7472 #CJK UNIFIED IDEOGRAPH + {0xAF6C, 0x75E9}, //7473 #CJK UNIFIED IDEOGRAPH + {0xAF6D, 0x75EC}, //7474 #CJK UNIFIED IDEOGRAPH + {0xAF6E, 0x75ED}, //7475 #CJK UNIFIED IDEOGRAPH + {0xAF6F, 0x75EE}, //7476 #CJK UNIFIED IDEOGRAPH + {0xAF70, 0x75EF}, //7477 #CJK UNIFIED IDEOGRAPH + {0xAF71, 0x75F2}, //7478 #CJK UNIFIED IDEOGRAPH + {0xAF72, 0x75F3}, //7479 #CJK UNIFIED IDEOGRAPH + {0xAF73, 0x75F5}, //7480 #CJK UNIFIED IDEOGRAPH + {0xAF74, 0x75F6}, //7481 #CJK UNIFIED IDEOGRAPH + {0xAF75, 0x75F7}, //7482 #CJK UNIFIED IDEOGRAPH + {0xAF76, 0x75F8}, //7483 #CJK UNIFIED IDEOGRAPH + {0xAF77, 0x75FA}, //7484 #CJK UNIFIED IDEOGRAPH + {0xAF78, 0x75FB}, //7485 #CJK UNIFIED IDEOGRAPH + {0xAF79, 0x75FD}, //7486 #CJK UNIFIED IDEOGRAPH + {0xAF7A, 0x75FE}, //7487 #CJK UNIFIED IDEOGRAPH + {0xAF7B, 0x7602}, //7488 #CJK UNIFIED IDEOGRAPH + {0xAF7C, 0x7604}, //7489 #CJK UNIFIED IDEOGRAPH + {0xAF7D, 0x7606}, //7490 #CJK UNIFIED IDEOGRAPH + {0xAF7E, 0x7607}, //7491 #CJK UNIFIED IDEOGRAPH + {0xAF80, 0x7608}, //7492 #CJK UNIFIED IDEOGRAPH + {0xAF81, 0x7609}, //7493 #CJK UNIFIED IDEOGRAPH + {0xAF82, 0x760B}, //7494 #CJK UNIFIED IDEOGRAPH + {0xAF83, 0x760D}, //7495 #CJK UNIFIED IDEOGRAPH + {0xAF84, 0x760E}, //7496 #CJK UNIFIED IDEOGRAPH + {0xAF85, 0x760F}, //7497 #CJK UNIFIED IDEOGRAPH + {0xAF86, 0x7611}, //7498 #CJK UNIFIED IDEOGRAPH + {0xAF87, 0x7612}, //7499 #CJK UNIFIED IDEOGRAPH + {0xAF88, 0x7613}, //7500 #CJK UNIFIED IDEOGRAPH + {0xAF89, 0x7614}, //7501 #CJK UNIFIED IDEOGRAPH + {0xAF8A, 0x7616}, //7502 #CJK UNIFIED IDEOGRAPH + {0xAF8B, 0x761A}, //7503 #CJK UNIFIED IDEOGRAPH + {0xAF8C, 0x761C}, //7504 #CJK UNIFIED IDEOGRAPH + {0xAF8D, 0x761D}, //7505 #CJK UNIFIED IDEOGRAPH + {0xAF8E, 0x761E}, //7506 #CJK UNIFIED IDEOGRAPH + {0xAF8F, 0x7621}, //7507 #CJK UNIFIED IDEOGRAPH + {0xAF90, 0x7623}, //7508 #CJK UNIFIED IDEOGRAPH + {0xAF91, 0x7627}, //7509 #CJK UNIFIED IDEOGRAPH + {0xAF92, 0x7628}, //7510 #CJK UNIFIED IDEOGRAPH + {0xAF93, 0x762C}, //7511 #CJK UNIFIED IDEOGRAPH + {0xAF94, 0x762E}, //7512 #CJK UNIFIED IDEOGRAPH + {0xAF95, 0x762F}, //7513 #CJK UNIFIED IDEOGRAPH + {0xAF96, 0x7631}, //7514 #CJK UNIFIED IDEOGRAPH + {0xAF97, 0x7632}, //7515 #CJK UNIFIED IDEOGRAPH + {0xAF98, 0x7636}, //7516 #CJK UNIFIED IDEOGRAPH + {0xAF99, 0x7637}, //7517 #CJK UNIFIED IDEOGRAPH + {0xAF9A, 0x7639}, //7518 #CJK UNIFIED IDEOGRAPH + {0xAF9B, 0x763A}, //7519 #CJK UNIFIED IDEOGRAPH + {0xAF9C, 0x763B}, //7520 #CJK UNIFIED IDEOGRAPH + {0xAF9D, 0x763D}, //7521 #CJK UNIFIED IDEOGRAPH + {0xAF9E, 0x7641}, //7522 #CJK UNIFIED IDEOGRAPH + {0xAF9F, 0x7642}, //7523 #CJK UNIFIED IDEOGRAPH + {0xAFA0, 0x7644}, //7524 #CJK UNIFIED IDEOGRAPH + {0xB040, 0x7645}, //7525 #CJK UNIFIED IDEOGRAPH + {0xB041, 0x7646}, //7526 #CJK UNIFIED IDEOGRAPH + {0xB042, 0x7647}, //7527 #CJK UNIFIED IDEOGRAPH + {0xB043, 0x7648}, //7528 #CJK UNIFIED IDEOGRAPH + {0xB044, 0x7649}, //7529 #CJK UNIFIED IDEOGRAPH + {0xB045, 0x764A}, //7530 #CJK UNIFIED IDEOGRAPH + {0xB046, 0x764B}, //7531 #CJK UNIFIED IDEOGRAPH + {0xB047, 0x764E}, //7532 #CJK UNIFIED IDEOGRAPH + {0xB048, 0x764F}, //7533 #CJK UNIFIED IDEOGRAPH + {0xB049, 0x7650}, //7534 #CJK UNIFIED IDEOGRAPH + {0xB04A, 0x7651}, //7535 #CJK UNIFIED IDEOGRAPH + {0xB04B, 0x7652}, //7536 #CJK UNIFIED IDEOGRAPH + {0xB04C, 0x7653}, //7537 #CJK UNIFIED IDEOGRAPH + {0xB04D, 0x7655}, //7538 #CJK UNIFIED IDEOGRAPH + {0xB04E, 0x7657}, //7539 #CJK UNIFIED IDEOGRAPH + {0xB04F, 0x7658}, //7540 #CJK UNIFIED IDEOGRAPH + {0xB050, 0x7659}, //7541 #CJK UNIFIED IDEOGRAPH + {0xB051, 0x765A}, //7542 #CJK UNIFIED IDEOGRAPH + {0xB052, 0x765B}, //7543 #CJK UNIFIED IDEOGRAPH + {0xB053, 0x765D}, //7544 #CJK UNIFIED IDEOGRAPH + {0xB054, 0x765F}, //7545 #CJK UNIFIED IDEOGRAPH + {0xB055, 0x7660}, //7546 #CJK UNIFIED IDEOGRAPH + {0xB056, 0x7661}, //7547 #CJK UNIFIED IDEOGRAPH + {0xB057, 0x7662}, //7548 #CJK UNIFIED IDEOGRAPH + {0xB058, 0x7664}, //7549 #CJK UNIFIED IDEOGRAPH + {0xB059, 0x7665}, //7550 #CJK UNIFIED IDEOGRAPH + {0xB05A, 0x7666}, //7551 #CJK UNIFIED IDEOGRAPH + {0xB05B, 0x7667}, //7552 #CJK UNIFIED IDEOGRAPH + {0xB05C, 0x7668}, //7553 #CJK UNIFIED IDEOGRAPH + {0xB05D, 0x7669}, //7554 #CJK UNIFIED IDEOGRAPH + {0xB05E, 0x766A}, //7555 #CJK UNIFIED IDEOGRAPH + {0xB05F, 0x766C}, //7556 #CJK UNIFIED IDEOGRAPH + {0xB060, 0x766D}, //7557 #CJK UNIFIED IDEOGRAPH + {0xB061, 0x766E}, //7558 #CJK UNIFIED IDEOGRAPH + {0xB062, 0x7670}, //7559 #CJK UNIFIED IDEOGRAPH + {0xB063, 0x7671}, //7560 #CJK UNIFIED IDEOGRAPH + {0xB064, 0x7672}, //7561 #CJK UNIFIED IDEOGRAPH + {0xB065, 0x7673}, //7562 #CJK UNIFIED IDEOGRAPH + {0xB066, 0x7674}, //7563 #CJK UNIFIED IDEOGRAPH + {0xB067, 0x7675}, //7564 #CJK UNIFIED IDEOGRAPH + {0xB068, 0x7676}, //7565 #CJK UNIFIED IDEOGRAPH + {0xB069, 0x7677}, //7566 #CJK UNIFIED IDEOGRAPH + {0xB06A, 0x7679}, //7567 #CJK UNIFIED IDEOGRAPH + {0xB06B, 0x767A}, //7568 #CJK UNIFIED IDEOGRAPH + {0xB06C, 0x767C}, //7569 #CJK UNIFIED IDEOGRAPH + {0xB06D, 0x767F}, //7570 #CJK UNIFIED IDEOGRAPH + {0xB06E, 0x7680}, //7571 #CJK UNIFIED IDEOGRAPH + {0xB06F, 0x7681}, //7572 #CJK UNIFIED IDEOGRAPH + {0xB070, 0x7683}, //7573 #CJK UNIFIED IDEOGRAPH + {0xB071, 0x7685}, //7574 #CJK UNIFIED IDEOGRAPH + {0xB072, 0x7689}, //7575 #CJK UNIFIED IDEOGRAPH + {0xB073, 0x768A}, //7576 #CJK UNIFIED IDEOGRAPH + {0xB074, 0x768C}, //7577 #CJK UNIFIED IDEOGRAPH + {0xB075, 0x768D}, //7578 #CJK UNIFIED IDEOGRAPH + {0xB076, 0x768F}, //7579 #CJK UNIFIED IDEOGRAPH + {0xB077, 0x7690}, //7580 #CJK UNIFIED IDEOGRAPH + {0xB078, 0x7692}, //7581 #CJK UNIFIED IDEOGRAPH + {0xB079, 0x7694}, //7582 #CJK UNIFIED IDEOGRAPH + {0xB07A, 0x7695}, //7583 #CJK UNIFIED IDEOGRAPH + {0xB07B, 0x7697}, //7584 #CJK UNIFIED IDEOGRAPH + {0xB07C, 0x7698}, //7585 #CJK UNIFIED IDEOGRAPH + {0xB07D, 0x769A}, //7586 #CJK UNIFIED IDEOGRAPH + {0xB07E, 0x769B}, //7587 #CJK UNIFIED IDEOGRAPH + {0xB080, 0x769C}, //7588 #CJK UNIFIED IDEOGRAPH + {0xB081, 0x769D}, //7589 #CJK UNIFIED IDEOGRAPH + {0xB082, 0x769E}, //7590 #CJK UNIFIED IDEOGRAPH + {0xB083, 0x769F}, //7591 #CJK UNIFIED IDEOGRAPH + {0xB084, 0x76A0}, //7592 #CJK UNIFIED IDEOGRAPH + {0xB085, 0x76A1}, //7593 #CJK UNIFIED IDEOGRAPH + {0xB086, 0x76A2}, //7594 #CJK UNIFIED IDEOGRAPH + {0xB087, 0x76A3}, //7595 #CJK UNIFIED IDEOGRAPH + {0xB088, 0x76A5}, //7596 #CJK UNIFIED IDEOGRAPH + {0xB089, 0x76A6}, //7597 #CJK UNIFIED IDEOGRAPH + {0xB08A, 0x76A7}, //7598 #CJK UNIFIED IDEOGRAPH + {0xB08B, 0x76A8}, //7599 #CJK UNIFIED IDEOGRAPH + {0xB08C, 0x76A9}, //7600 #CJK UNIFIED IDEOGRAPH + {0xB08D, 0x76AA}, //7601 #CJK UNIFIED IDEOGRAPH + {0xB08E, 0x76AB}, //7602 #CJK UNIFIED IDEOGRAPH + {0xB08F, 0x76AC}, //7603 #CJK UNIFIED IDEOGRAPH + {0xB090, 0x76AD}, //7604 #CJK UNIFIED IDEOGRAPH + {0xB091, 0x76AF}, //7605 #CJK UNIFIED IDEOGRAPH + {0xB092, 0x76B0}, //7606 #CJK UNIFIED IDEOGRAPH + {0xB093, 0x76B3}, //7607 #CJK UNIFIED IDEOGRAPH + {0xB094, 0x76B5}, //7608 #CJK UNIFIED IDEOGRAPH + {0xB095, 0x76B6}, //7609 #CJK UNIFIED IDEOGRAPH + {0xB096, 0x76B7}, //7610 #CJK UNIFIED IDEOGRAPH + {0xB097, 0x76B8}, //7611 #CJK UNIFIED IDEOGRAPH + {0xB098, 0x76B9}, //7612 #CJK UNIFIED IDEOGRAPH + {0xB099, 0x76BA}, //7613 #CJK UNIFIED IDEOGRAPH + {0xB09A, 0x76BB}, //7614 #CJK UNIFIED IDEOGRAPH + {0xB09B, 0x76BC}, //7615 #CJK UNIFIED IDEOGRAPH + {0xB09C, 0x76BD}, //7616 #CJK UNIFIED IDEOGRAPH + {0xB09D, 0x76BE}, //7617 #CJK UNIFIED IDEOGRAPH + {0xB09E, 0x76C0}, //7618 #CJK UNIFIED IDEOGRAPH + {0xB09F, 0x76C1}, //7619 #CJK UNIFIED IDEOGRAPH + {0xB0A0, 0x76C3}, //7620 #CJK UNIFIED IDEOGRAPH + {0xB0A1, 0x554A}, //7621 #CJK UNIFIED IDEOGRAPH + {0xB0A2, 0x963F}, //7622 #CJK UNIFIED IDEOGRAPH + {0xB0A3, 0x57C3}, //7623 #CJK UNIFIED IDEOGRAPH + {0xB0A4, 0x6328}, //7624 #CJK UNIFIED IDEOGRAPH + {0xB0A5, 0x54CE}, //7625 #CJK UNIFIED IDEOGRAPH + {0xB0A6, 0x5509}, //7626 #CJK UNIFIED IDEOGRAPH + {0xB0A7, 0x54C0}, //7627 #CJK UNIFIED IDEOGRAPH + {0xB0A8, 0x7691}, //7628 #CJK UNIFIED IDEOGRAPH + {0xB0A9, 0x764C}, //7629 #CJK UNIFIED IDEOGRAPH + {0xB0AA, 0x853C}, //7630 #CJK UNIFIED IDEOGRAPH + {0xB0AB, 0x77EE}, //7631 #CJK UNIFIED IDEOGRAPH + {0xB0AC, 0x827E}, //7632 #CJK UNIFIED IDEOGRAPH + {0xB0AD, 0x788D}, //7633 #CJK UNIFIED IDEOGRAPH + {0xB0AE, 0x7231}, //7634 #CJK UNIFIED IDEOGRAPH + {0xB0AF, 0x9698}, //7635 #CJK UNIFIED IDEOGRAPH + {0xB0B0, 0x978D}, //7636 #CJK UNIFIED IDEOGRAPH + {0xB0B1, 0x6C28}, //7637 #CJK UNIFIED IDEOGRAPH + {0xB0B2, 0x5B89}, //7638 #CJK UNIFIED IDEOGRAPH + {0xB0B3, 0x4FFA}, //7639 #CJK UNIFIED IDEOGRAPH + {0xB0B4, 0x6309}, //7640 #CJK UNIFIED IDEOGRAPH + {0xB0B5, 0x6697}, //7641 #CJK UNIFIED IDEOGRAPH + {0xB0B6, 0x5CB8}, //7642 #CJK UNIFIED IDEOGRAPH + {0xB0B7, 0x80FA}, //7643 #CJK UNIFIED IDEOGRAPH + {0xB0B8, 0x6848}, //7644 #CJK UNIFIED IDEOGRAPH + {0xB0B9, 0x80AE}, //7645 #CJK UNIFIED IDEOGRAPH + {0xB0BA, 0x6602}, //7646 #CJK UNIFIED IDEOGRAPH + {0xB0BB, 0x76CE}, //7647 #CJK UNIFIED IDEOGRAPH + {0xB0BC, 0x51F9}, //7648 #CJK UNIFIED IDEOGRAPH + {0xB0BD, 0x6556}, //7649 #CJK UNIFIED IDEOGRAPH + {0xB0BE, 0x71AC}, //7650 #CJK UNIFIED IDEOGRAPH + {0xB0BF, 0x7FF1}, //7651 #CJK UNIFIED IDEOGRAPH + {0xB0C0, 0x8884}, //7652 #CJK UNIFIED IDEOGRAPH + {0xB0C1, 0x50B2}, //7653 #CJK UNIFIED IDEOGRAPH + {0xB0C2, 0x5965}, //7654 #CJK UNIFIED IDEOGRAPH + {0xB0C3, 0x61CA}, //7655 #CJK UNIFIED IDEOGRAPH + {0xB0C4, 0x6FB3}, //7656 #CJK UNIFIED IDEOGRAPH + {0xB0C5, 0x82AD}, //7657 #CJK UNIFIED IDEOGRAPH + {0xB0C6, 0x634C}, //7658 #CJK UNIFIED IDEOGRAPH + {0xB0C7, 0x6252}, //7659 #CJK UNIFIED IDEOGRAPH + {0xB0C8, 0x53ED}, //7660 #CJK UNIFIED IDEOGRAPH + {0xB0C9, 0x5427}, //7661 #CJK UNIFIED IDEOGRAPH + {0xB0CA, 0x7B06}, //7662 #CJK UNIFIED IDEOGRAPH + {0xB0CB, 0x516B}, //7663 #CJK UNIFIED IDEOGRAPH + {0xB0CC, 0x75A4}, //7664 #CJK UNIFIED IDEOGRAPH + {0xB0CD, 0x5DF4}, //7665 #CJK UNIFIED IDEOGRAPH + {0xB0CE, 0x62D4}, //7666 #CJK UNIFIED IDEOGRAPH + {0xB0CF, 0x8DCB}, //7667 #CJK UNIFIED IDEOGRAPH + {0xB0D0, 0x9776}, //7668 #CJK UNIFIED IDEOGRAPH + {0xB0D1, 0x628A}, //7669 #CJK UNIFIED IDEOGRAPH + {0xB0D2, 0x8019}, //7670 #CJK UNIFIED IDEOGRAPH + {0xB0D3, 0x575D}, //7671 #CJK UNIFIED IDEOGRAPH + {0xB0D4, 0x9738}, //7672 #CJK UNIFIED IDEOGRAPH + {0xB0D5, 0x7F62}, //7673 #CJK UNIFIED IDEOGRAPH + {0xB0D6, 0x7238}, //7674 #CJK UNIFIED IDEOGRAPH + {0xB0D7, 0x767D}, //7675 #CJK UNIFIED IDEOGRAPH + {0xB0D8, 0x67CF}, //7676 #CJK UNIFIED IDEOGRAPH + {0xB0D9, 0x767E}, //7677 #CJK UNIFIED IDEOGRAPH + {0xB0DA, 0x6446}, //7678 #CJK UNIFIED IDEOGRAPH + {0xB0DB, 0x4F70}, //7679 #CJK UNIFIED IDEOGRAPH + {0xB0DC, 0x8D25}, //7680 #CJK UNIFIED IDEOGRAPH + {0xB0DD, 0x62DC}, //7681 #CJK UNIFIED IDEOGRAPH + {0xB0DE, 0x7A17}, //7682 #CJK UNIFIED IDEOGRAPH + {0xB0DF, 0x6591}, //7683 #CJK UNIFIED IDEOGRAPH + {0xB0E0, 0x73ED}, //7684 #CJK UNIFIED IDEOGRAPH + {0xB0E1, 0x642C}, //7685 #CJK UNIFIED IDEOGRAPH + {0xB0E2, 0x6273}, //7686 #CJK UNIFIED IDEOGRAPH + {0xB0E3, 0x822C}, //7687 #CJK UNIFIED IDEOGRAPH + {0xB0E4, 0x9881}, //7688 #CJK UNIFIED IDEOGRAPH + {0xB0E5, 0x677F}, //7689 #CJK UNIFIED IDEOGRAPH + {0xB0E6, 0x7248}, //7690 #CJK UNIFIED IDEOGRAPH + {0xB0E7, 0x626E}, //7691 #CJK UNIFIED IDEOGRAPH + {0xB0E8, 0x62CC}, //7692 #CJK UNIFIED IDEOGRAPH + {0xB0E9, 0x4F34}, //7693 #CJK UNIFIED IDEOGRAPH + {0xB0EA, 0x74E3}, //7694 #CJK UNIFIED IDEOGRAPH + {0xB0EB, 0x534A}, //7695 #CJK UNIFIED IDEOGRAPH + {0xB0EC, 0x529E}, //7696 #CJK UNIFIED IDEOGRAPH + {0xB0ED, 0x7ECA}, //7697 #CJK UNIFIED IDEOGRAPH + {0xB0EE, 0x90A6}, //7698 #CJK UNIFIED IDEOGRAPH + {0xB0EF, 0x5E2E}, //7699 #CJK UNIFIED IDEOGRAPH + {0xB0F0, 0x6886}, //7700 #CJK UNIFIED IDEOGRAPH + {0xB0F1, 0x699C}, //7701 #CJK UNIFIED IDEOGRAPH + {0xB0F2, 0x8180}, //7702 #CJK UNIFIED IDEOGRAPH + {0xB0F3, 0x7ED1}, //7703 #CJK UNIFIED IDEOGRAPH + {0xB0F4, 0x68D2}, //7704 #CJK UNIFIED IDEOGRAPH + {0xB0F5, 0x78C5}, //7705 #CJK UNIFIED IDEOGRAPH + {0xB0F6, 0x868C}, //7706 #CJK UNIFIED IDEOGRAPH + {0xB0F7, 0x9551}, //7707 #CJK UNIFIED IDEOGRAPH + {0xB0F8, 0x508D}, //7708 #CJK UNIFIED IDEOGRAPH + {0xB0F9, 0x8C24}, //7709 #CJK UNIFIED IDEOGRAPH + {0xB0FA, 0x82DE}, //7710 #CJK UNIFIED IDEOGRAPH + {0xB0FB, 0x80DE}, //7711 #CJK UNIFIED IDEOGRAPH + {0xB0FC, 0x5305}, //7712 #CJK UNIFIED IDEOGRAPH + {0xB0FD, 0x8912}, //7713 #CJK UNIFIED IDEOGRAPH + {0xB0FE, 0x5265}, //7714 #CJK UNIFIED IDEOGRAPH + {0xB140, 0x76C4}, //7715 #CJK UNIFIED IDEOGRAPH + {0xB141, 0x76C7}, //7716 #CJK UNIFIED IDEOGRAPH + {0xB142, 0x76C9}, //7717 #CJK UNIFIED IDEOGRAPH + {0xB143, 0x76CB}, //7718 #CJK UNIFIED IDEOGRAPH + {0xB144, 0x76CC}, //7719 #CJK UNIFIED IDEOGRAPH + {0xB145, 0x76D3}, //7720 #CJK UNIFIED IDEOGRAPH + {0xB146, 0x76D5}, //7721 #CJK UNIFIED IDEOGRAPH + {0xB147, 0x76D9}, //7722 #CJK UNIFIED IDEOGRAPH + {0xB148, 0x76DA}, //7723 #CJK UNIFIED IDEOGRAPH + {0xB149, 0x76DC}, //7724 #CJK UNIFIED IDEOGRAPH + {0xB14A, 0x76DD}, //7725 #CJK UNIFIED IDEOGRAPH + {0xB14B, 0x76DE}, //7726 #CJK UNIFIED IDEOGRAPH + {0xB14C, 0x76E0}, //7727 #CJK UNIFIED IDEOGRAPH + {0xB14D, 0x76E1}, //7728 #CJK UNIFIED IDEOGRAPH + {0xB14E, 0x76E2}, //7729 #CJK UNIFIED IDEOGRAPH + {0xB14F, 0x76E3}, //7730 #CJK UNIFIED IDEOGRAPH + {0xB150, 0x76E4}, //7731 #CJK UNIFIED IDEOGRAPH + {0xB151, 0x76E6}, //7732 #CJK UNIFIED IDEOGRAPH + {0xB152, 0x76E7}, //7733 #CJK UNIFIED IDEOGRAPH + {0xB153, 0x76E8}, //7734 #CJK UNIFIED IDEOGRAPH + {0xB154, 0x76E9}, //7735 #CJK UNIFIED IDEOGRAPH + {0xB155, 0x76EA}, //7736 #CJK UNIFIED IDEOGRAPH + {0xB156, 0x76EB}, //7737 #CJK UNIFIED IDEOGRAPH + {0xB157, 0x76EC}, //7738 #CJK UNIFIED IDEOGRAPH + {0xB158, 0x76ED}, //7739 #CJK UNIFIED IDEOGRAPH + {0xB159, 0x76F0}, //7740 #CJK UNIFIED IDEOGRAPH + {0xB15A, 0x76F3}, //7741 #CJK UNIFIED IDEOGRAPH + {0xB15B, 0x76F5}, //7742 #CJK UNIFIED IDEOGRAPH + {0xB15C, 0x76F6}, //7743 #CJK UNIFIED IDEOGRAPH + {0xB15D, 0x76F7}, //7744 #CJK UNIFIED IDEOGRAPH + {0xB15E, 0x76FA}, //7745 #CJK UNIFIED IDEOGRAPH + {0xB15F, 0x76FB}, //7746 #CJK UNIFIED IDEOGRAPH + {0xB160, 0x76FD}, //7747 #CJK UNIFIED IDEOGRAPH + {0xB161, 0x76FF}, //7748 #CJK UNIFIED IDEOGRAPH + {0xB162, 0x7700}, //7749 #CJK UNIFIED IDEOGRAPH + {0xB163, 0x7702}, //7750 #CJK UNIFIED IDEOGRAPH + {0xB164, 0x7703}, //7751 #CJK UNIFIED IDEOGRAPH + {0xB165, 0x7705}, //7752 #CJK UNIFIED IDEOGRAPH + {0xB166, 0x7706}, //7753 #CJK UNIFIED IDEOGRAPH + {0xB167, 0x770A}, //7754 #CJK UNIFIED IDEOGRAPH + {0xB168, 0x770C}, //7755 #CJK UNIFIED IDEOGRAPH + {0xB169, 0x770E}, //7756 #CJK UNIFIED IDEOGRAPH + {0xB16A, 0x770F}, //7757 #CJK UNIFIED IDEOGRAPH + {0xB16B, 0x7710}, //7758 #CJK UNIFIED IDEOGRAPH + {0xB16C, 0x7711}, //7759 #CJK UNIFIED IDEOGRAPH + {0xB16D, 0x7712}, //7760 #CJK UNIFIED IDEOGRAPH + {0xB16E, 0x7713}, //7761 #CJK UNIFIED IDEOGRAPH + {0xB16F, 0x7714}, //7762 #CJK UNIFIED IDEOGRAPH + {0xB170, 0x7715}, //7763 #CJK UNIFIED IDEOGRAPH + {0xB171, 0x7716}, //7764 #CJK UNIFIED IDEOGRAPH + {0xB172, 0x7717}, //7765 #CJK UNIFIED IDEOGRAPH + {0xB173, 0x7718}, //7766 #CJK UNIFIED IDEOGRAPH + {0xB174, 0x771B}, //7767 #CJK UNIFIED IDEOGRAPH + {0xB175, 0x771C}, //7768 #CJK UNIFIED IDEOGRAPH + {0xB176, 0x771D}, //7769 #CJK UNIFIED IDEOGRAPH + {0xB177, 0x771E}, //7770 #CJK UNIFIED IDEOGRAPH + {0xB178, 0x7721}, //7771 #CJK UNIFIED IDEOGRAPH + {0xB179, 0x7723}, //7772 #CJK UNIFIED IDEOGRAPH + {0xB17A, 0x7724}, //7773 #CJK UNIFIED IDEOGRAPH + {0xB17B, 0x7725}, //7774 #CJK UNIFIED IDEOGRAPH + {0xB17C, 0x7727}, //7775 #CJK UNIFIED IDEOGRAPH + {0xB17D, 0x772A}, //7776 #CJK UNIFIED IDEOGRAPH + {0xB17E, 0x772B}, //7777 #CJK UNIFIED IDEOGRAPH + {0xB180, 0x772C}, //7778 #CJK UNIFIED IDEOGRAPH + {0xB181, 0x772E}, //7779 #CJK UNIFIED IDEOGRAPH + {0xB182, 0x7730}, //7780 #CJK UNIFIED IDEOGRAPH + {0xB183, 0x7731}, //7781 #CJK UNIFIED IDEOGRAPH + {0xB184, 0x7732}, //7782 #CJK UNIFIED IDEOGRAPH + {0xB185, 0x7733}, //7783 #CJK UNIFIED IDEOGRAPH + {0xB186, 0x7734}, //7784 #CJK UNIFIED IDEOGRAPH + {0xB187, 0x7739}, //7785 #CJK UNIFIED IDEOGRAPH + {0xB188, 0x773B}, //7786 #CJK UNIFIED IDEOGRAPH + {0xB189, 0x773D}, //7787 #CJK UNIFIED IDEOGRAPH + {0xB18A, 0x773E}, //7788 #CJK UNIFIED IDEOGRAPH + {0xB18B, 0x773F}, //7789 #CJK UNIFIED IDEOGRAPH + {0xB18C, 0x7742}, //7790 #CJK UNIFIED IDEOGRAPH + {0xB18D, 0x7744}, //7791 #CJK UNIFIED IDEOGRAPH + {0xB18E, 0x7745}, //7792 #CJK UNIFIED IDEOGRAPH + {0xB18F, 0x7746}, //7793 #CJK UNIFIED IDEOGRAPH + {0xB190, 0x7748}, //7794 #CJK UNIFIED IDEOGRAPH + {0xB191, 0x7749}, //7795 #CJK UNIFIED IDEOGRAPH + {0xB192, 0x774A}, //7796 #CJK UNIFIED IDEOGRAPH + {0xB193, 0x774B}, //7797 #CJK UNIFIED IDEOGRAPH + {0xB194, 0x774C}, //7798 #CJK UNIFIED IDEOGRAPH + {0xB195, 0x774D}, //7799 #CJK UNIFIED IDEOGRAPH + {0xB196, 0x774E}, //7800 #CJK UNIFIED IDEOGRAPH + {0xB197, 0x774F}, //7801 #CJK UNIFIED IDEOGRAPH + {0xB198, 0x7752}, //7802 #CJK UNIFIED IDEOGRAPH + {0xB199, 0x7753}, //7803 #CJK UNIFIED IDEOGRAPH + {0xB19A, 0x7754}, //7804 #CJK UNIFIED IDEOGRAPH + {0xB19B, 0x7755}, //7805 #CJK UNIFIED IDEOGRAPH + {0xB19C, 0x7756}, //7806 #CJK UNIFIED IDEOGRAPH + {0xB19D, 0x7757}, //7807 #CJK UNIFIED IDEOGRAPH + {0xB19E, 0x7758}, //7808 #CJK UNIFIED IDEOGRAPH + {0xB19F, 0x7759}, //7809 #CJK UNIFIED IDEOGRAPH + {0xB1A0, 0x775C}, //7810 #CJK UNIFIED IDEOGRAPH + {0xB1A1, 0x8584}, //7811 #CJK UNIFIED IDEOGRAPH + {0xB1A2, 0x96F9}, //7812 #CJK UNIFIED IDEOGRAPH + {0xB1A3, 0x4FDD}, //7813 #CJK UNIFIED IDEOGRAPH + {0xB1A4, 0x5821}, //7814 #CJK UNIFIED IDEOGRAPH + {0xB1A5, 0x9971}, //7815 #CJK UNIFIED IDEOGRAPH + {0xB1A6, 0x5B9D}, //7816 #CJK UNIFIED IDEOGRAPH + {0xB1A7, 0x62B1}, //7817 #CJK UNIFIED IDEOGRAPH + {0xB1A8, 0x62A5}, //7818 #CJK UNIFIED IDEOGRAPH + {0xB1A9, 0x66B4}, //7819 #CJK UNIFIED IDEOGRAPH + {0xB1AA, 0x8C79}, //7820 #CJK UNIFIED IDEOGRAPH + {0xB1AB, 0x9C8D}, //7821 #CJK UNIFIED IDEOGRAPH + {0xB1AC, 0x7206}, //7822 #CJK UNIFIED IDEOGRAPH + {0xB1AD, 0x676F}, //7823 #CJK UNIFIED IDEOGRAPH + {0xB1AE, 0x7891}, //7824 #CJK UNIFIED IDEOGRAPH + {0xB1AF, 0x60B2}, //7825 #CJK UNIFIED IDEOGRAPH + {0xB1B0, 0x5351}, //7826 #CJK UNIFIED IDEOGRAPH + {0xB1B1, 0x5317}, //7827 #CJK UNIFIED IDEOGRAPH + {0xB1B2, 0x8F88}, //7828 #CJK UNIFIED IDEOGRAPH + {0xB1B3, 0x80CC}, //7829 #CJK UNIFIED IDEOGRAPH + {0xB1B4, 0x8D1D}, //7830 #CJK UNIFIED IDEOGRAPH + {0xB1B5, 0x94A1}, //7831 #CJK UNIFIED IDEOGRAPH + {0xB1B6, 0x500D}, //7832 #CJK UNIFIED IDEOGRAPH + {0xB1B7, 0x72C8}, //7833 #CJK UNIFIED IDEOGRAPH + {0xB1B8, 0x5907}, //7834 #CJK UNIFIED IDEOGRAPH + {0xB1B9, 0x60EB}, //7835 #CJK UNIFIED IDEOGRAPH + {0xB1BA, 0x7119}, //7836 #CJK UNIFIED IDEOGRAPH + {0xB1BB, 0x88AB}, //7837 #CJK UNIFIED IDEOGRAPH + {0xB1BC, 0x5954}, //7838 #CJK UNIFIED IDEOGRAPH + {0xB1BD, 0x82EF}, //7839 #CJK UNIFIED IDEOGRAPH + {0xB1BE, 0x672C}, //7840 #CJK UNIFIED IDEOGRAPH + {0xB1BF, 0x7B28}, //7841 #CJK UNIFIED IDEOGRAPH + {0xB1C0, 0x5D29}, //7842 #CJK UNIFIED IDEOGRAPH + {0xB1C1, 0x7EF7}, //7843 #CJK UNIFIED IDEOGRAPH + {0xB1C2, 0x752D}, //7844 #CJK UNIFIED IDEOGRAPH + {0xB1C3, 0x6CF5}, //7845 #CJK UNIFIED IDEOGRAPH + {0xB1C4, 0x8E66}, //7846 #CJK UNIFIED IDEOGRAPH + {0xB1C5, 0x8FF8}, //7847 #CJK UNIFIED IDEOGRAPH + {0xB1C6, 0x903C}, //7848 #CJK UNIFIED IDEOGRAPH + {0xB1C7, 0x9F3B}, //7849 #CJK UNIFIED IDEOGRAPH + {0xB1C8, 0x6BD4}, //7850 #CJK UNIFIED IDEOGRAPH + {0xB1C9, 0x9119}, //7851 #CJK UNIFIED IDEOGRAPH + {0xB1CA, 0x7B14}, //7852 #CJK UNIFIED IDEOGRAPH + {0xB1CB, 0x5F7C}, //7853 #CJK UNIFIED IDEOGRAPH + {0xB1CC, 0x78A7}, //7854 #CJK UNIFIED IDEOGRAPH + {0xB1CD, 0x84D6}, //7855 #CJK UNIFIED IDEOGRAPH + {0xB1CE, 0x853D}, //7856 #CJK UNIFIED IDEOGRAPH + {0xB1CF, 0x6BD5}, //7857 #CJK UNIFIED IDEOGRAPH + {0xB1D0, 0x6BD9}, //7858 #CJK UNIFIED IDEOGRAPH + {0xB1D1, 0x6BD6}, //7859 #CJK UNIFIED IDEOGRAPH + {0xB1D2, 0x5E01}, //7860 #CJK UNIFIED IDEOGRAPH + {0xB1D3, 0x5E87}, //7861 #CJK UNIFIED IDEOGRAPH + {0xB1D4, 0x75F9}, //7862 #CJK UNIFIED IDEOGRAPH + {0xB1D5, 0x95ED}, //7863 #CJK UNIFIED IDEOGRAPH + {0xB1D6, 0x655D}, //7864 #CJK UNIFIED IDEOGRAPH + {0xB1D7, 0x5F0A}, //7865 #CJK UNIFIED IDEOGRAPH + {0xB1D8, 0x5FC5}, //7866 #CJK UNIFIED IDEOGRAPH + {0xB1D9, 0x8F9F}, //7867 #CJK UNIFIED IDEOGRAPH + {0xB1DA, 0x58C1}, //7868 #CJK UNIFIED IDEOGRAPH + {0xB1DB, 0x81C2}, //7869 #CJK UNIFIED IDEOGRAPH + {0xB1DC, 0x907F}, //7870 #CJK UNIFIED IDEOGRAPH + {0xB1DD, 0x965B}, //7871 #CJK UNIFIED IDEOGRAPH + {0xB1DE, 0x97AD}, //7872 #CJK UNIFIED IDEOGRAPH + {0xB1DF, 0x8FB9}, //7873 #CJK UNIFIED IDEOGRAPH + {0xB1E0, 0x7F16}, //7874 #CJK UNIFIED IDEOGRAPH + {0xB1E1, 0x8D2C}, //7875 #CJK UNIFIED IDEOGRAPH + {0xB1E2, 0x6241}, //7876 #CJK UNIFIED IDEOGRAPH + {0xB1E3, 0x4FBF}, //7877 #CJK UNIFIED IDEOGRAPH + {0xB1E4, 0x53D8}, //7878 #CJK UNIFIED IDEOGRAPH + {0xB1E5, 0x535E}, //7879 #CJK UNIFIED IDEOGRAPH + {0xB1E6, 0x8FA8}, //7880 #CJK UNIFIED IDEOGRAPH + {0xB1E7, 0x8FA9}, //7881 #CJK UNIFIED IDEOGRAPH + {0xB1E8, 0x8FAB}, //7882 #CJK UNIFIED IDEOGRAPH + {0xB1E9, 0x904D}, //7883 #CJK UNIFIED IDEOGRAPH + {0xB1EA, 0x6807}, //7884 #CJK UNIFIED IDEOGRAPH + {0xB1EB, 0x5F6A}, //7885 #CJK UNIFIED IDEOGRAPH + {0xB1EC, 0x8198}, //7886 #CJK UNIFIED IDEOGRAPH + {0xB1ED, 0x8868}, //7887 #CJK UNIFIED IDEOGRAPH + {0xB1EE, 0x9CD6}, //7888 #CJK UNIFIED IDEOGRAPH + {0xB1EF, 0x618B}, //7889 #CJK UNIFIED IDEOGRAPH + {0xB1F0, 0x522B}, //7890 #CJK UNIFIED IDEOGRAPH + {0xB1F1, 0x762A}, //7891 #CJK UNIFIED IDEOGRAPH + {0xB1F2, 0x5F6C}, //7892 #CJK UNIFIED IDEOGRAPH + {0xB1F3, 0x658C}, //7893 #CJK UNIFIED IDEOGRAPH + {0xB1F4, 0x6FD2}, //7894 #CJK UNIFIED IDEOGRAPH + {0xB1F5, 0x6EE8}, //7895 #CJK UNIFIED IDEOGRAPH + {0xB1F6, 0x5BBE}, //7896 #CJK UNIFIED IDEOGRAPH + {0xB1F7, 0x6448}, //7897 #CJK UNIFIED IDEOGRAPH + {0xB1F8, 0x5175}, //7898 #CJK UNIFIED IDEOGRAPH + {0xB1F9, 0x51B0}, //7899 #CJK UNIFIED IDEOGRAPH + {0xB1FA, 0x67C4}, //7900 #CJK UNIFIED IDEOGRAPH + {0xB1FB, 0x4E19}, //7901 #CJK UNIFIED IDEOGRAPH + {0xB1FC, 0x79C9}, //7902 #CJK UNIFIED IDEOGRAPH + {0xB1FD, 0x997C}, //7903 #CJK UNIFIED IDEOGRAPH + {0xB1FE, 0x70B3}, //7904 #CJK UNIFIED IDEOGRAPH + {0xB240, 0x775D}, //7905 #CJK UNIFIED IDEOGRAPH + {0xB241, 0x775E}, //7906 #CJK UNIFIED IDEOGRAPH + {0xB242, 0x775F}, //7907 #CJK UNIFIED IDEOGRAPH + {0xB243, 0x7760}, //7908 #CJK UNIFIED IDEOGRAPH + {0xB244, 0x7764}, //7909 #CJK UNIFIED IDEOGRAPH + {0xB245, 0x7767}, //7910 #CJK UNIFIED IDEOGRAPH + {0xB246, 0x7769}, //7911 #CJK UNIFIED IDEOGRAPH + {0xB247, 0x776A}, //7912 #CJK UNIFIED IDEOGRAPH + {0xB248, 0x776D}, //7913 #CJK UNIFIED IDEOGRAPH + {0xB249, 0x776E}, //7914 #CJK UNIFIED IDEOGRAPH + {0xB24A, 0x776F}, //7915 #CJK UNIFIED IDEOGRAPH + {0xB24B, 0x7770}, //7916 #CJK UNIFIED IDEOGRAPH + {0xB24C, 0x7771}, //7917 #CJK UNIFIED IDEOGRAPH + {0xB24D, 0x7772}, //7918 #CJK UNIFIED IDEOGRAPH + {0xB24E, 0x7773}, //7919 #CJK UNIFIED IDEOGRAPH + {0xB24F, 0x7774}, //7920 #CJK UNIFIED IDEOGRAPH + {0xB250, 0x7775}, //7921 #CJK UNIFIED IDEOGRAPH + {0xB251, 0x7776}, //7922 #CJK UNIFIED IDEOGRAPH + {0xB252, 0x7777}, //7923 #CJK UNIFIED IDEOGRAPH + {0xB253, 0x7778}, //7924 #CJK UNIFIED IDEOGRAPH + {0xB254, 0x777A}, //7925 #CJK UNIFIED IDEOGRAPH + {0xB255, 0x777B}, //7926 #CJK UNIFIED IDEOGRAPH + {0xB256, 0x777C}, //7927 #CJK UNIFIED IDEOGRAPH + {0xB257, 0x7781}, //7928 #CJK UNIFIED IDEOGRAPH + {0xB258, 0x7782}, //7929 #CJK UNIFIED IDEOGRAPH + {0xB259, 0x7783}, //7930 #CJK UNIFIED IDEOGRAPH + {0xB25A, 0x7786}, //7931 #CJK UNIFIED IDEOGRAPH + {0xB25B, 0x7787}, //7932 #CJK UNIFIED IDEOGRAPH + {0xB25C, 0x7788}, //7933 #CJK UNIFIED IDEOGRAPH + {0xB25D, 0x7789}, //7934 #CJK UNIFIED IDEOGRAPH + {0xB25E, 0x778A}, //7935 #CJK UNIFIED IDEOGRAPH + {0xB25F, 0x778B}, //7936 #CJK UNIFIED IDEOGRAPH + {0xB260, 0x778F}, //7937 #CJK UNIFIED IDEOGRAPH + {0xB261, 0x7790}, //7938 #CJK UNIFIED IDEOGRAPH + {0xB262, 0x7793}, //7939 #CJK UNIFIED IDEOGRAPH + {0xB263, 0x7794}, //7940 #CJK UNIFIED IDEOGRAPH + {0xB264, 0x7795}, //7941 #CJK UNIFIED IDEOGRAPH + {0xB265, 0x7796}, //7942 #CJK UNIFIED IDEOGRAPH + {0xB266, 0x7797}, //7943 #CJK UNIFIED IDEOGRAPH + {0xB267, 0x7798}, //7944 #CJK UNIFIED IDEOGRAPH + {0xB268, 0x7799}, //7945 #CJK UNIFIED IDEOGRAPH + {0xB269, 0x779A}, //7946 #CJK UNIFIED IDEOGRAPH + {0xB26A, 0x779B}, //7947 #CJK UNIFIED IDEOGRAPH + {0xB26B, 0x779C}, //7948 #CJK UNIFIED IDEOGRAPH + {0xB26C, 0x779D}, //7949 #CJK UNIFIED IDEOGRAPH + {0xB26D, 0x779E}, //7950 #CJK UNIFIED IDEOGRAPH + {0xB26E, 0x77A1}, //7951 #CJK UNIFIED IDEOGRAPH + {0xB26F, 0x77A3}, //7952 #CJK UNIFIED IDEOGRAPH + {0xB270, 0x77A4}, //7953 #CJK UNIFIED IDEOGRAPH + {0xB271, 0x77A6}, //7954 #CJK UNIFIED IDEOGRAPH + {0xB272, 0x77A8}, //7955 #CJK UNIFIED IDEOGRAPH + {0xB273, 0x77AB}, //7956 #CJK UNIFIED IDEOGRAPH + {0xB274, 0x77AD}, //7957 #CJK UNIFIED IDEOGRAPH + {0xB275, 0x77AE}, //7958 #CJK UNIFIED IDEOGRAPH + {0xB276, 0x77AF}, //7959 #CJK UNIFIED IDEOGRAPH + {0xB277, 0x77B1}, //7960 #CJK UNIFIED IDEOGRAPH + {0xB278, 0x77B2}, //7961 #CJK UNIFIED IDEOGRAPH + {0xB279, 0x77B4}, //7962 #CJK UNIFIED IDEOGRAPH + {0xB27A, 0x77B6}, //7963 #CJK UNIFIED IDEOGRAPH + {0xB27B, 0x77B7}, //7964 #CJK UNIFIED IDEOGRAPH + {0xB27C, 0x77B8}, //7965 #CJK UNIFIED IDEOGRAPH + {0xB27D, 0x77B9}, //7966 #CJK UNIFIED IDEOGRAPH + {0xB27E, 0x77BA}, //7967 #CJK UNIFIED IDEOGRAPH + {0xB280, 0x77BC}, //7968 #CJK UNIFIED IDEOGRAPH + {0xB281, 0x77BE}, //7969 #CJK UNIFIED IDEOGRAPH + {0xB282, 0x77C0}, //7970 #CJK UNIFIED IDEOGRAPH + {0xB283, 0x77C1}, //7971 #CJK UNIFIED IDEOGRAPH + {0xB284, 0x77C2}, //7972 #CJK UNIFIED IDEOGRAPH + {0xB285, 0x77C3}, //7973 #CJK UNIFIED IDEOGRAPH + {0xB286, 0x77C4}, //7974 #CJK UNIFIED IDEOGRAPH + {0xB287, 0x77C5}, //7975 #CJK UNIFIED IDEOGRAPH + {0xB288, 0x77C6}, //7976 #CJK UNIFIED IDEOGRAPH + {0xB289, 0x77C7}, //7977 #CJK UNIFIED IDEOGRAPH + {0xB28A, 0x77C8}, //7978 #CJK UNIFIED IDEOGRAPH + {0xB28B, 0x77C9}, //7979 #CJK UNIFIED IDEOGRAPH + {0xB28C, 0x77CA}, //7980 #CJK UNIFIED IDEOGRAPH + {0xB28D, 0x77CB}, //7981 #CJK UNIFIED IDEOGRAPH + {0xB28E, 0x77CC}, //7982 #CJK UNIFIED IDEOGRAPH + {0xB28F, 0x77CE}, //7983 #CJK UNIFIED IDEOGRAPH + {0xB290, 0x77CF}, //7984 #CJK UNIFIED IDEOGRAPH + {0xB291, 0x77D0}, //7985 #CJK UNIFIED IDEOGRAPH + {0xB292, 0x77D1}, //7986 #CJK UNIFIED IDEOGRAPH + {0xB293, 0x77D2}, //7987 #CJK UNIFIED IDEOGRAPH + {0xB294, 0x77D3}, //7988 #CJK UNIFIED IDEOGRAPH + {0xB295, 0x77D4}, //7989 #CJK UNIFIED IDEOGRAPH + {0xB296, 0x77D5}, //7990 #CJK UNIFIED IDEOGRAPH + {0xB297, 0x77D6}, //7991 #CJK UNIFIED IDEOGRAPH + {0xB298, 0x77D8}, //7992 #CJK UNIFIED IDEOGRAPH + {0xB299, 0x77D9}, //7993 #CJK UNIFIED IDEOGRAPH + {0xB29A, 0x77DA}, //7994 #CJK UNIFIED IDEOGRAPH + {0xB29B, 0x77DD}, //7995 #CJK UNIFIED IDEOGRAPH + {0xB29C, 0x77DE}, //7996 #CJK UNIFIED IDEOGRAPH + {0xB29D, 0x77DF}, //7997 #CJK UNIFIED IDEOGRAPH + {0xB29E, 0x77E0}, //7998 #CJK UNIFIED IDEOGRAPH + {0xB29F, 0x77E1}, //7999 #CJK UNIFIED IDEOGRAPH + {0xB2A0, 0x77E4}, //8000 #CJK UNIFIED IDEOGRAPH + {0xB2A1, 0x75C5}, //8001 #CJK UNIFIED IDEOGRAPH + {0xB2A2, 0x5E76}, //8002 #CJK UNIFIED IDEOGRAPH + {0xB2A3, 0x73BB}, //8003 #CJK UNIFIED IDEOGRAPH + {0xB2A4, 0x83E0}, //8004 #CJK UNIFIED IDEOGRAPH + {0xB2A5, 0x64AD}, //8005 #CJK UNIFIED IDEOGRAPH + {0xB2A6, 0x62E8}, //8006 #CJK UNIFIED IDEOGRAPH + {0xB2A7, 0x94B5}, //8007 #CJK UNIFIED IDEOGRAPH + {0xB2A8, 0x6CE2}, //8008 #CJK UNIFIED IDEOGRAPH + {0xB2A9, 0x535A}, //8009 #CJK UNIFIED IDEOGRAPH + {0xB2AA, 0x52C3}, //8010 #CJK UNIFIED IDEOGRAPH + {0xB2AB, 0x640F}, //8011 #CJK UNIFIED IDEOGRAPH + {0xB2AC, 0x94C2}, //8012 #CJK UNIFIED IDEOGRAPH + {0xB2AD, 0x7B94}, //8013 #CJK UNIFIED IDEOGRAPH + {0xB2AE, 0x4F2F}, //8014 #CJK UNIFIED IDEOGRAPH + {0xB2AF, 0x5E1B}, //8015 #CJK UNIFIED IDEOGRAPH + {0xB2B0, 0x8236}, //8016 #CJK UNIFIED IDEOGRAPH + {0xB2B1, 0x8116}, //8017 #CJK UNIFIED IDEOGRAPH + {0xB2B2, 0x818A}, //8018 #CJK UNIFIED IDEOGRAPH + {0xB2B3, 0x6E24}, //8019 #CJK UNIFIED IDEOGRAPH + {0xB2B4, 0x6CCA}, //8020 #CJK UNIFIED IDEOGRAPH + {0xB2B5, 0x9A73}, //8021 #CJK UNIFIED IDEOGRAPH + {0xB2B6, 0x6355}, //8022 #CJK UNIFIED IDEOGRAPH + {0xB2B7, 0x535C}, //8023 #CJK UNIFIED IDEOGRAPH + {0xB2B8, 0x54FA}, //8024 #CJK UNIFIED IDEOGRAPH + {0xB2B9, 0x8865}, //8025 #CJK UNIFIED IDEOGRAPH + {0xB2BA, 0x57E0}, //8026 #CJK UNIFIED IDEOGRAPH + {0xB2BB, 0x4E0D}, //8027 #CJK UNIFIED IDEOGRAPH + {0xB2BC, 0x5E03}, //8028 #CJK UNIFIED IDEOGRAPH + {0xB2BD, 0x6B65}, //8029 #CJK UNIFIED IDEOGRAPH + {0xB2BE, 0x7C3F}, //8030 #CJK UNIFIED IDEOGRAPH + {0xB2BF, 0x90E8}, //8031 #CJK UNIFIED IDEOGRAPH + {0xB2C0, 0x6016}, //8032 #CJK UNIFIED IDEOGRAPH + {0xB2C1, 0x64E6}, //8033 #CJK UNIFIED IDEOGRAPH + {0xB2C2, 0x731C}, //8034 #CJK UNIFIED IDEOGRAPH + {0xB2C3, 0x88C1}, //8035 #CJK UNIFIED IDEOGRAPH + {0xB2C4, 0x6750}, //8036 #CJK UNIFIED IDEOGRAPH + {0xB2C5, 0x624D}, //8037 #CJK UNIFIED IDEOGRAPH + {0xB2C6, 0x8D22}, //8038 #CJK UNIFIED IDEOGRAPH + {0xB2C7, 0x776C}, //8039 #CJK UNIFIED IDEOGRAPH + {0xB2C8, 0x8E29}, //8040 #CJK UNIFIED IDEOGRAPH + {0xB2C9, 0x91C7}, //8041 #CJK UNIFIED IDEOGRAPH + {0xB2CA, 0x5F69}, //8042 #CJK UNIFIED IDEOGRAPH + {0xB2CB, 0x83DC}, //8043 #CJK UNIFIED IDEOGRAPH + {0xB2CC, 0x8521}, //8044 #CJK UNIFIED IDEOGRAPH + {0xB2CD, 0x9910}, //8045 #CJK UNIFIED IDEOGRAPH + {0xB2CE, 0x53C2}, //8046 #CJK UNIFIED IDEOGRAPH + {0xB2CF, 0x8695}, //8047 #CJK UNIFIED IDEOGRAPH + {0xB2D0, 0x6B8B}, //8048 #CJK UNIFIED IDEOGRAPH + {0xB2D1, 0x60ED}, //8049 #CJK UNIFIED IDEOGRAPH + {0xB2D2, 0x60E8}, //8050 #CJK UNIFIED IDEOGRAPH + {0xB2D3, 0x707F}, //8051 #CJK UNIFIED IDEOGRAPH + {0xB2D4, 0x82CD}, //8052 #CJK UNIFIED IDEOGRAPH + {0xB2D5, 0x8231}, //8053 #CJK UNIFIED IDEOGRAPH + {0xB2D6, 0x4ED3}, //8054 #CJK UNIFIED IDEOGRAPH + {0xB2D7, 0x6CA7}, //8055 #CJK UNIFIED IDEOGRAPH + {0xB2D8, 0x85CF}, //8056 #CJK UNIFIED IDEOGRAPH + {0xB2D9, 0x64CD}, //8057 #CJK UNIFIED IDEOGRAPH + {0xB2DA, 0x7CD9}, //8058 #CJK UNIFIED IDEOGRAPH + {0xB2DB, 0x69FD}, //8059 #CJK UNIFIED IDEOGRAPH + {0xB2DC, 0x66F9}, //8060 #CJK UNIFIED IDEOGRAPH + {0xB2DD, 0x8349}, //8061 #CJK UNIFIED IDEOGRAPH + {0xB2DE, 0x5395}, //8062 #CJK UNIFIED IDEOGRAPH + {0xB2DF, 0x7B56}, //8063 #CJK UNIFIED IDEOGRAPH + {0xB2E0, 0x4FA7}, //8064 #CJK UNIFIED IDEOGRAPH + {0xB2E1, 0x518C}, //8065 #CJK UNIFIED IDEOGRAPH + {0xB2E2, 0x6D4B}, //8066 #CJK UNIFIED IDEOGRAPH + {0xB2E3, 0x5C42}, //8067 #CJK UNIFIED IDEOGRAPH + {0xB2E4, 0x8E6D}, //8068 #CJK UNIFIED IDEOGRAPH + {0xB2E5, 0x63D2}, //8069 #CJK UNIFIED IDEOGRAPH + {0xB2E6, 0x53C9}, //8070 #CJK UNIFIED IDEOGRAPH + {0xB2E7, 0x832C}, //8071 #CJK UNIFIED IDEOGRAPH + {0xB2E8, 0x8336}, //8072 #CJK UNIFIED IDEOGRAPH + {0xB2E9, 0x67E5}, //8073 #CJK UNIFIED IDEOGRAPH + {0xB2EA, 0x78B4}, //8074 #CJK UNIFIED IDEOGRAPH + {0xB2EB, 0x643D}, //8075 #CJK UNIFIED IDEOGRAPH + {0xB2EC, 0x5BDF}, //8076 #CJK UNIFIED IDEOGRAPH + {0xB2ED, 0x5C94}, //8077 #CJK UNIFIED IDEOGRAPH + {0xB2EE, 0x5DEE}, //8078 #CJK UNIFIED IDEOGRAPH + {0xB2EF, 0x8BE7}, //8079 #CJK UNIFIED IDEOGRAPH + {0xB2F0, 0x62C6}, //8080 #CJK UNIFIED IDEOGRAPH + {0xB2F1, 0x67F4}, //8081 #CJK UNIFIED IDEOGRAPH + {0xB2F2, 0x8C7A}, //8082 #CJK UNIFIED IDEOGRAPH + {0xB2F3, 0x6400}, //8083 #CJK UNIFIED IDEOGRAPH + {0xB2F4, 0x63BA}, //8084 #CJK UNIFIED IDEOGRAPH + {0xB2F5, 0x8749}, //8085 #CJK UNIFIED IDEOGRAPH + {0xB2F6, 0x998B}, //8086 #CJK UNIFIED IDEOGRAPH + {0xB2F7, 0x8C17}, //8087 #CJK UNIFIED IDEOGRAPH + {0xB2F8, 0x7F20}, //8088 #CJK UNIFIED IDEOGRAPH + {0xB2F9, 0x94F2}, //8089 #CJK UNIFIED IDEOGRAPH + {0xB2FA, 0x4EA7}, //8090 #CJK UNIFIED IDEOGRAPH + {0xB2FB, 0x9610}, //8091 #CJK UNIFIED IDEOGRAPH + {0xB2FC, 0x98A4}, //8092 #CJK UNIFIED IDEOGRAPH + {0xB2FD, 0x660C}, //8093 #CJK UNIFIED IDEOGRAPH + {0xB2FE, 0x7316}, //8094 #CJK UNIFIED IDEOGRAPH + {0xB340, 0x77E6}, //8095 #CJK UNIFIED IDEOGRAPH + {0xB341, 0x77E8}, //8096 #CJK UNIFIED IDEOGRAPH + {0xB342, 0x77EA}, //8097 #CJK UNIFIED IDEOGRAPH + {0xB343, 0x77EF}, //8098 #CJK UNIFIED IDEOGRAPH + {0xB344, 0x77F0}, //8099 #CJK UNIFIED IDEOGRAPH + {0xB345, 0x77F1}, //8100 #CJK UNIFIED IDEOGRAPH + {0xB346, 0x77F2}, //8101 #CJK UNIFIED IDEOGRAPH + {0xB347, 0x77F4}, //8102 #CJK UNIFIED IDEOGRAPH + {0xB348, 0x77F5}, //8103 #CJK UNIFIED IDEOGRAPH + {0xB349, 0x77F7}, //8104 #CJK UNIFIED IDEOGRAPH + {0xB34A, 0x77F9}, //8105 #CJK UNIFIED IDEOGRAPH + {0xB34B, 0x77FA}, //8106 #CJK UNIFIED IDEOGRAPH + {0xB34C, 0x77FB}, //8107 #CJK UNIFIED IDEOGRAPH + {0xB34D, 0x77FC}, //8108 #CJK UNIFIED IDEOGRAPH + {0xB34E, 0x7803}, //8109 #CJK UNIFIED IDEOGRAPH + {0xB34F, 0x7804}, //8110 #CJK UNIFIED IDEOGRAPH + {0xB350, 0x7805}, //8111 #CJK UNIFIED IDEOGRAPH + {0xB351, 0x7806}, //8112 #CJK UNIFIED IDEOGRAPH + {0xB352, 0x7807}, //8113 #CJK UNIFIED IDEOGRAPH + {0xB353, 0x7808}, //8114 #CJK UNIFIED IDEOGRAPH + {0xB354, 0x780A}, //8115 #CJK UNIFIED IDEOGRAPH + {0xB355, 0x780B}, //8116 #CJK UNIFIED IDEOGRAPH + {0xB356, 0x780E}, //8117 #CJK UNIFIED IDEOGRAPH + {0xB357, 0x780F}, //8118 #CJK UNIFIED IDEOGRAPH + {0xB358, 0x7810}, //8119 #CJK UNIFIED IDEOGRAPH + {0xB359, 0x7813}, //8120 #CJK UNIFIED IDEOGRAPH + {0xB35A, 0x7815}, //8121 #CJK UNIFIED IDEOGRAPH + {0xB35B, 0x7819}, //8122 #CJK UNIFIED IDEOGRAPH + {0xB35C, 0x781B}, //8123 #CJK UNIFIED IDEOGRAPH + {0xB35D, 0x781E}, //8124 #CJK UNIFIED IDEOGRAPH + {0xB35E, 0x7820}, //8125 #CJK UNIFIED IDEOGRAPH + {0xB35F, 0x7821}, //8126 #CJK UNIFIED IDEOGRAPH + {0xB360, 0x7822}, //8127 #CJK UNIFIED IDEOGRAPH + {0xB361, 0x7824}, //8128 #CJK UNIFIED IDEOGRAPH + {0xB362, 0x7828}, //8129 #CJK UNIFIED IDEOGRAPH + {0xB363, 0x782A}, //8130 #CJK UNIFIED IDEOGRAPH + {0xB364, 0x782B}, //8131 #CJK UNIFIED IDEOGRAPH + {0xB365, 0x782E}, //8132 #CJK UNIFIED IDEOGRAPH + {0xB366, 0x782F}, //8133 #CJK UNIFIED IDEOGRAPH + {0xB367, 0x7831}, //8134 #CJK UNIFIED IDEOGRAPH + {0xB368, 0x7832}, //8135 #CJK UNIFIED IDEOGRAPH + {0xB369, 0x7833}, //8136 #CJK UNIFIED IDEOGRAPH + {0xB36A, 0x7835}, //8137 #CJK UNIFIED IDEOGRAPH + {0xB36B, 0x7836}, //8138 #CJK UNIFIED IDEOGRAPH + {0xB36C, 0x783D}, //8139 #CJK UNIFIED IDEOGRAPH + {0xB36D, 0x783F}, //8140 #CJK UNIFIED IDEOGRAPH + {0xB36E, 0x7841}, //8141 #CJK UNIFIED IDEOGRAPH + {0xB36F, 0x7842}, //8142 #CJK UNIFIED IDEOGRAPH + {0xB370, 0x7843}, //8143 #CJK UNIFIED IDEOGRAPH + {0xB371, 0x7844}, //8144 #CJK UNIFIED IDEOGRAPH + {0xB372, 0x7846}, //8145 #CJK UNIFIED IDEOGRAPH + {0xB373, 0x7848}, //8146 #CJK UNIFIED IDEOGRAPH + {0xB374, 0x7849}, //8147 #CJK UNIFIED IDEOGRAPH + {0xB375, 0x784A}, //8148 #CJK UNIFIED IDEOGRAPH + {0xB376, 0x784B}, //8149 #CJK UNIFIED IDEOGRAPH + {0xB377, 0x784D}, //8150 #CJK UNIFIED IDEOGRAPH + {0xB378, 0x784F}, //8151 #CJK UNIFIED IDEOGRAPH + {0xB379, 0x7851}, //8152 #CJK UNIFIED IDEOGRAPH + {0xB37A, 0x7853}, //8153 #CJK UNIFIED IDEOGRAPH + {0xB37B, 0x7854}, //8154 #CJK UNIFIED IDEOGRAPH + {0xB37C, 0x7858}, //8155 #CJK UNIFIED IDEOGRAPH + {0xB37D, 0x7859}, //8156 #CJK UNIFIED IDEOGRAPH + {0xB37E, 0x785A}, //8157 #CJK UNIFIED IDEOGRAPH + {0xB380, 0x785B}, //8158 #CJK UNIFIED IDEOGRAPH + {0xB381, 0x785C}, //8159 #CJK UNIFIED IDEOGRAPH + {0xB382, 0x785E}, //8160 #CJK UNIFIED IDEOGRAPH + {0xB383, 0x785F}, //8161 #CJK UNIFIED IDEOGRAPH + {0xB384, 0x7860}, //8162 #CJK UNIFIED IDEOGRAPH + {0xB385, 0x7861}, //8163 #CJK UNIFIED IDEOGRAPH + {0xB386, 0x7862}, //8164 #CJK UNIFIED IDEOGRAPH + {0xB387, 0x7863}, //8165 #CJK UNIFIED IDEOGRAPH + {0xB388, 0x7864}, //8166 #CJK UNIFIED IDEOGRAPH + {0xB389, 0x7865}, //8167 #CJK UNIFIED IDEOGRAPH + {0xB38A, 0x7866}, //8168 #CJK UNIFIED IDEOGRAPH + {0xB38B, 0x7867}, //8169 #CJK UNIFIED IDEOGRAPH + {0xB38C, 0x7868}, //8170 #CJK UNIFIED IDEOGRAPH + {0xB38D, 0x7869}, //8171 #CJK UNIFIED IDEOGRAPH + {0xB38E, 0x786F}, //8172 #CJK UNIFIED IDEOGRAPH + {0xB38F, 0x7870}, //8173 #CJK UNIFIED IDEOGRAPH + {0xB390, 0x7871}, //8174 #CJK UNIFIED IDEOGRAPH + {0xB391, 0x7872}, //8175 #CJK UNIFIED IDEOGRAPH + {0xB392, 0x7873}, //8176 #CJK UNIFIED IDEOGRAPH + {0xB393, 0x7874}, //8177 #CJK UNIFIED IDEOGRAPH + {0xB394, 0x7875}, //8178 #CJK UNIFIED IDEOGRAPH + {0xB395, 0x7876}, //8179 #CJK UNIFIED IDEOGRAPH + {0xB396, 0x7878}, //8180 #CJK UNIFIED IDEOGRAPH + {0xB397, 0x7879}, //8181 #CJK UNIFIED IDEOGRAPH + {0xB398, 0x787A}, //8182 #CJK UNIFIED IDEOGRAPH + {0xB399, 0x787B}, //8183 #CJK UNIFIED IDEOGRAPH + {0xB39A, 0x787D}, //8184 #CJK UNIFIED IDEOGRAPH + {0xB39B, 0x787E}, //8185 #CJK UNIFIED IDEOGRAPH + {0xB39C, 0x787F}, //8186 #CJK UNIFIED IDEOGRAPH + {0xB39D, 0x7880}, //8187 #CJK UNIFIED IDEOGRAPH + {0xB39E, 0x7881}, //8188 #CJK UNIFIED IDEOGRAPH + {0xB39F, 0x7882}, //8189 #CJK UNIFIED IDEOGRAPH + {0xB3A0, 0x7883}, //8190 #CJK UNIFIED IDEOGRAPH + {0xB3A1, 0x573A}, //8191 #CJK UNIFIED IDEOGRAPH + {0xB3A2, 0x5C1D}, //8192 #CJK UNIFIED IDEOGRAPH + {0xB3A3, 0x5E38}, //8193 #CJK UNIFIED IDEOGRAPH + {0xB3A4, 0x957F}, //8194 #CJK UNIFIED IDEOGRAPH + {0xB3A5, 0x507F}, //8195 #CJK UNIFIED IDEOGRAPH + {0xB3A6, 0x80A0}, //8196 #CJK UNIFIED IDEOGRAPH + {0xB3A7, 0x5382}, //8197 #CJK UNIFIED IDEOGRAPH + {0xB3A8, 0x655E}, //8198 #CJK UNIFIED IDEOGRAPH + {0xB3A9, 0x7545}, //8199 #CJK UNIFIED IDEOGRAPH + {0xB3AA, 0x5531}, //8200 #CJK UNIFIED IDEOGRAPH + {0xB3AB, 0x5021}, //8201 #CJK UNIFIED IDEOGRAPH + {0xB3AC, 0x8D85}, //8202 #CJK UNIFIED IDEOGRAPH + {0xB3AD, 0x6284}, //8203 #CJK UNIFIED IDEOGRAPH + {0xB3AE, 0x949E}, //8204 #CJK UNIFIED IDEOGRAPH + {0xB3AF, 0x671D}, //8205 #CJK UNIFIED IDEOGRAPH + {0xB3B0, 0x5632}, //8206 #CJK UNIFIED IDEOGRAPH + {0xB3B1, 0x6F6E}, //8207 #CJK UNIFIED IDEOGRAPH + {0xB3B2, 0x5DE2}, //8208 #CJK UNIFIED IDEOGRAPH + {0xB3B3, 0x5435}, //8209 #CJK UNIFIED IDEOGRAPH + {0xB3B4, 0x7092}, //8210 #CJK UNIFIED IDEOGRAPH + {0xB3B5, 0x8F66}, //8211 #CJK UNIFIED IDEOGRAPH + {0xB3B6, 0x626F}, //8212 #CJK UNIFIED IDEOGRAPH + {0xB3B7, 0x64A4}, //8213 #CJK UNIFIED IDEOGRAPH + {0xB3B8, 0x63A3}, //8214 #CJK UNIFIED IDEOGRAPH + {0xB3B9, 0x5F7B}, //8215 #CJK UNIFIED IDEOGRAPH + {0xB3BA, 0x6F88}, //8216 #CJK UNIFIED IDEOGRAPH + {0xB3BB, 0x90F4}, //8217 #CJK UNIFIED IDEOGRAPH + {0xB3BC, 0x81E3}, //8218 #CJK UNIFIED IDEOGRAPH + {0xB3BD, 0x8FB0}, //8219 #CJK UNIFIED IDEOGRAPH + {0xB3BE, 0x5C18}, //8220 #CJK UNIFIED IDEOGRAPH + {0xB3BF, 0x6668}, //8221 #CJK UNIFIED IDEOGRAPH + {0xB3C0, 0x5FF1}, //8222 #CJK UNIFIED IDEOGRAPH + {0xB3C1, 0x6C89}, //8223 #CJK UNIFIED IDEOGRAPH + {0xB3C2, 0x9648}, //8224 #CJK UNIFIED IDEOGRAPH + {0xB3C3, 0x8D81}, //8225 #CJK UNIFIED IDEOGRAPH + {0xB3C4, 0x886C}, //8226 #CJK UNIFIED IDEOGRAPH + {0xB3C5, 0x6491}, //8227 #CJK UNIFIED IDEOGRAPH + {0xB3C6, 0x79F0}, //8228 #CJK UNIFIED IDEOGRAPH + {0xB3C7, 0x57CE}, //8229 #CJK UNIFIED IDEOGRAPH + {0xB3C8, 0x6A59}, //8230 #CJK UNIFIED IDEOGRAPH + {0xB3C9, 0x6210}, //8231 #CJK UNIFIED IDEOGRAPH + {0xB3CA, 0x5448}, //8232 #CJK UNIFIED IDEOGRAPH + {0xB3CB, 0x4E58}, //8233 #CJK UNIFIED IDEOGRAPH + {0xB3CC, 0x7A0B}, //8234 #CJK UNIFIED IDEOGRAPH + {0xB3CD, 0x60E9}, //8235 #CJK UNIFIED IDEOGRAPH + {0xB3CE, 0x6F84}, //8236 #CJK UNIFIED IDEOGRAPH + {0xB3CF, 0x8BDA}, //8237 #CJK UNIFIED IDEOGRAPH + {0xB3D0, 0x627F}, //8238 #CJK UNIFIED IDEOGRAPH + {0xB3D1, 0x901E}, //8239 #CJK UNIFIED IDEOGRAPH + {0xB3D2, 0x9A8B}, //8240 #CJK UNIFIED IDEOGRAPH + {0xB3D3, 0x79E4}, //8241 #CJK UNIFIED IDEOGRAPH + {0xB3D4, 0x5403}, //8242 #CJK UNIFIED IDEOGRAPH + {0xB3D5, 0x75F4}, //8243 #CJK UNIFIED IDEOGRAPH + {0xB3D6, 0x6301}, //8244 #CJK UNIFIED IDEOGRAPH + {0xB3D7, 0x5319}, //8245 #CJK UNIFIED IDEOGRAPH + {0xB3D8, 0x6C60}, //8246 #CJK UNIFIED IDEOGRAPH + {0xB3D9, 0x8FDF}, //8247 #CJK UNIFIED IDEOGRAPH + {0xB3DA, 0x5F1B}, //8248 #CJK UNIFIED IDEOGRAPH + {0xB3DB, 0x9A70}, //8249 #CJK UNIFIED IDEOGRAPH + {0xB3DC, 0x803B}, //8250 #CJK UNIFIED IDEOGRAPH + {0xB3DD, 0x9F7F}, //8251 #CJK UNIFIED IDEOGRAPH + {0xB3DE, 0x4F88}, //8252 #CJK UNIFIED IDEOGRAPH + {0xB3DF, 0x5C3A}, //8253 #CJK UNIFIED IDEOGRAPH + {0xB3E0, 0x8D64}, //8254 #CJK UNIFIED IDEOGRAPH + {0xB3E1, 0x7FC5}, //8255 #CJK UNIFIED IDEOGRAPH + {0xB3E2, 0x65A5}, //8256 #CJK UNIFIED IDEOGRAPH + {0xB3E3, 0x70BD}, //8257 #CJK UNIFIED IDEOGRAPH + {0xB3E4, 0x5145}, //8258 #CJK UNIFIED IDEOGRAPH + {0xB3E5, 0x51B2}, //8259 #CJK UNIFIED IDEOGRAPH + {0xB3E6, 0x866B}, //8260 #CJK UNIFIED IDEOGRAPH + {0xB3E7, 0x5D07}, //8261 #CJK UNIFIED IDEOGRAPH + {0xB3E8, 0x5BA0}, //8262 #CJK UNIFIED IDEOGRAPH + {0xB3E9, 0x62BD}, //8263 #CJK UNIFIED IDEOGRAPH + {0xB3EA, 0x916C}, //8264 #CJK UNIFIED IDEOGRAPH + {0xB3EB, 0x7574}, //8265 #CJK UNIFIED IDEOGRAPH + {0xB3EC, 0x8E0C}, //8266 #CJK UNIFIED IDEOGRAPH + {0xB3ED, 0x7A20}, //8267 #CJK UNIFIED IDEOGRAPH + {0xB3EE, 0x6101}, //8268 #CJK UNIFIED IDEOGRAPH + {0xB3EF, 0x7B79}, //8269 #CJK UNIFIED IDEOGRAPH + {0xB3F0, 0x4EC7}, //8270 #CJK UNIFIED IDEOGRAPH + {0xB3F1, 0x7EF8}, //8271 #CJK UNIFIED IDEOGRAPH + {0xB3F2, 0x7785}, //8272 #CJK UNIFIED IDEOGRAPH + {0xB3F3, 0x4E11}, //8273 #CJK UNIFIED IDEOGRAPH + {0xB3F4, 0x81ED}, //8274 #CJK UNIFIED IDEOGRAPH + {0xB3F5, 0x521D}, //8275 #CJK UNIFIED IDEOGRAPH + {0xB3F6, 0x51FA}, //8276 #CJK UNIFIED IDEOGRAPH + {0xB3F7, 0x6A71}, //8277 #CJK UNIFIED IDEOGRAPH + {0xB3F8, 0x53A8}, //8278 #CJK UNIFIED IDEOGRAPH + {0xB3F9, 0x8E87}, //8279 #CJK UNIFIED IDEOGRAPH + {0xB3FA, 0x9504}, //8280 #CJK UNIFIED IDEOGRAPH + {0xB3FB, 0x96CF}, //8281 #CJK UNIFIED IDEOGRAPH + {0xB3FC, 0x6EC1}, //8282 #CJK UNIFIED IDEOGRAPH + {0xB3FD, 0x9664}, //8283 #CJK UNIFIED IDEOGRAPH + {0xB3FE, 0x695A}, //8284 #CJK UNIFIED IDEOGRAPH + {0xB440, 0x7884}, //8285 #CJK UNIFIED IDEOGRAPH + {0xB441, 0x7885}, //8286 #CJK UNIFIED IDEOGRAPH + {0xB442, 0x7886}, //8287 #CJK UNIFIED IDEOGRAPH + {0xB443, 0x7888}, //8288 #CJK UNIFIED IDEOGRAPH + {0xB444, 0x788A}, //8289 #CJK UNIFIED IDEOGRAPH + {0xB445, 0x788B}, //8290 #CJK UNIFIED IDEOGRAPH + {0xB446, 0x788F}, //8291 #CJK UNIFIED IDEOGRAPH + {0xB447, 0x7890}, //8292 #CJK UNIFIED IDEOGRAPH + {0xB448, 0x7892}, //8293 #CJK UNIFIED IDEOGRAPH + {0xB449, 0x7894}, //8294 #CJK UNIFIED IDEOGRAPH + {0xB44A, 0x7895}, //8295 #CJK UNIFIED IDEOGRAPH + {0xB44B, 0x7896}, //8296 #CJK UNIFIED IDEOGRAPH + {0xB44C, 0x7899}, //8297 #CJK UNIFIED IDEOGRAPH + {0xB44D, 0x789D}, //8298 #CJK UNIFIED IDEOGRAPH + {0xB44E, 0x789E}, //8299 #CJK UNIFIED IDEOGRAPH + {0xB44F, 0x78A0}, //8300 #CJK UNIFIED IDEOGRAPH + {0xB450, 0x78A2}, //8301 #CJK UNIFIED IDEOGRAPH + {0xB451, 0x78A4}, //8302 #CJK UNIFIED IDEOGRAPH + {0xB452, 0x78A6}, //8303 #CJK UNIFIED IDEOGRAPH + {0xB453, 0x78A8}, //8304 #CJK UNIFIED IDEOGRAPH + {0xB454, 0x78A9}, //8305 #CJK UNIFIED IDEOGRAPH + {0xB455, 0x78AA}, //8306 #CJK UNIFIED IDEOGRAPH + {0xB456, 0x78AB}, //8307 #CJK UNIFIED IDEOGRAPH + {0xB457, 0x78AC}, //8308 #CJK UNIFIED IDEOGRAPH + {0xB458, 0x78AD}, //8309 #CJK UNIFIED IDEOGRAPH + {0xB459, 0x78AE}, //8310 #CJK UNIFIED IDEOGRAPH + {0xB45A, 0x78AF}, //8311 #CJK UNIFIED IDEOGRAPH + {0xB45B, 0x78B5}, //8312 #CJK UNIFIED IDEOGRAPH + {0xB45C, 0x78B6}, //8313 #CJK UNIFIED IDEOGRAPH + {0xB45D, 0x78B7}, //8314 #CJK UNIFIED IDEOGRAPH + {0xB45E, 0x78B8}, //8315 #CJK UNIFIED IDEOGRAPH + {0xB45F, 0x78BA}, //8316 #CJK UNIFIED IDEOGRAPH + {0xB460, 0x78BB}, //8317 #CJK UNIFIED IDEOGRAPH + {0xB461, 0x78BC}, //8318 #CJK UNIFIED IDEOGRAPH + {0xB462, 0x78BD}, //8319 #CJK UNIFIED IDEOGRAPH + {0xB463, 0x78BF}, //8320 #CJK UNIFIED IDEOGRAPH + {0xB464, 0x78C0}, //8321 #CJK UNIFIED IDEOGRAPH + {0xB465, 0x78C2}, //8322 #CJK UNIFIED IDEOGRAPH + {0xB466, 0x78C3}, //8323 #CJK UNIFIED IDEOGRAPH + {0xB467, 0x78C4}, //8324 #CJK UNIFIED IDEOGRAPH + {0xB468, 0x78C6}, //8325 #CJK UNIFIED IDEOGRAPH + {0xB469, 0x78C7}, //8326 #CJK UNIFIED IDEOGRAPH + {0xB46A, 0x78C8}, //8327 #CJK UNIFIED IDEOGRAPH + {0xB46B, 0x78CC}, //8328 #CJK UNIFIED IDEOGRAPH + {0xB46C, 0x78CD}, //8329 #CJK UNIFIED IDEOGRAPH + {0xB46D, 0x78CE}, //8330 #CJK UNIFIED IDEOGRAPH + {0xB46E, 0x78CF}, //8331 #CJK UNIFIED IDEOGRAPH + {0xB46F, 0x78D1}, //8332 #CJK UNIFIED IDEOGRAPH + {0xB470, 0x78D2}, //8333 #CJK UNIFIED IDEOGRAPH + {0xB471, 0x78D3}, //8334 #CJK UNIFIED IDEOGRAPH + {0xB472, 0x78D6}, //8335 #CJK UNIFIED IDEOGRAPH + {0xB473, 0x78D7}, //8336 #CJK UNIFIED IDEOGRAPH + {0xB474, 0x78D8}, //8337 #CJK UNIFIED IDEOGRAPH + {0xB475, 0x78DA}, //8338 #CJK UNIFIED IDEOGRAPH + {0xB476, 0x78DB}, //8339 #CJK UNIFIED IDEOGRAPH + {0xB477, 0x78DC}, //8340 #CJK UNIFIED IDEOGRAPH + {0xB478, 0x78DD}, //8341 #CJK UNIFIED IDEOGRAPH + {0xB479, 0x78DE}, //8342 #CJK UNIFIED IDEOGRAPH + {0xB47A, 0x78DF}, //8343 #CJK UNIFIED IDEOGRAPH + {0xB47B, 0x78E0}, //8344 #CJK UNIFIED IDEOGRAPH + {0xB47C, 0x78E1}, //8345 #CJK UNIFIED IDEOGRAPH + {0xB47D, 0x78E2}, //8346 #CJK UNIFIED IDEOGRAPH + {0xB47E, 0x78E3}, //8347 #CJK UNIFIED IDEOGRAPH + {0xB480, 0x78E4}, //8348 #CJK UNIFIED IDEOGRAPH + {0xB481, 0x78E5}, //8349 #CJK UNIFIED IDEOGRAPH + {0xB482, 0x78E6}, //8350 #CJK UNIFIED IDEOGRAPH + {0xB483, 0x78E7}, //8351 #CJK UNIFIED IDEOGRAPH + {0xB484, 0x78E9}, //8352 #CJK UNIFIED IDEOGRAPH + {0xB485, 0x78EA}, //8353 #CJK UNIFIED IDEOGRAPH + {0xB486, 0x78EB}, //8354 #CJK UNIFIED IDEOGRAPH + {0xB487, 0x78ED}, //8355 #CJK UNIFIED IDEOGRAPH + {0xB488, 0x78EE}, //8356 #CJK UNIFIED IDEOGRAPH + {0xB489, 0x78EF}, //8357 #CJK UNIFIED IDEOGRAPH + {0xB48A, 0x78F0}, //8358 #CJK UNIFIED IDEOGRAPH + {0xB48B, 0x78F1}, //8359 #CJK UNIFIED IDEOGRAPH + {0xB48C, 0x78F3}, //8360 #CJK UNIFIED IDEOGRAPH + {0xB48D, 0x78F5}, //8361 #CJK UNIFIED IDEOGRAPH + {0xB48E, 0x78F6}, //8362 #CJK UNIFIED IDEOGRAPH + {0xB48F, 0x78F8}, //8363 #CJK UNIFIED IDEOGRAPH + {0xB490, 0x78F9}, //8364 #CJK UNIFIED IDEOGRAPH + {0xB491, 0x78FB}, //8365 #CJK UNIFIED IDEOGRAPH + {0xB492, 0x78FC}, //8366 #CJK UNIFIED IDEOGRAPH + {0xB493, 0x78FD}, //8367 #CJK UNIFIED IDEOGRAPH + {0xB494, 0x78FE}, //8368 #CJK UNIFIED IDEOGRAPH + {0xB495, 0x78FF}, //8369 #CJK UNIFIED IDEOGRAPH + {0xB496, 0x7900}, //8370 #CJK UNIFIED IDEOGRAPH + {0xB497, 0x7902}, //8371 #CJK UNIFIED IDEOGRAPH + {0xB498, 0x7903}, //8372 #CJK UNIFIED IDEOGRAPH + {0xB499, 0x7904}, //8373 #CJK UNIFIED IDEOGRAPH + {0xB49A, 0x7906}, //8374 #CJK UNIFIED IDEOGRAPH + {0xB49B, 0x7907}, //8375 #CJK UNIFIED IDEOGRAPH + {0xB49C, 0x7908}, //8376 #CJK UNIFIED IDEOGRAPH + {0xB49D, 0x7909}, //8377 #CJK UNIFIED IDEOGRAPH + {0xB49E, 0x790A}, //8378 #CJK UNIFIED IDEOGRAPH + {0xB49F, 0x790B}, //8379 #CJK UNIFIED IDEOGRAPH + {0xB4A0, 0x790C}, //8380 #CJK UNIFIED IDEOGRAPH + {0xB4A1, 0x7840}, //8381 #CJK UNIFIED IDEOGRAPH + {0xB4A2, 0x50A8}, //8382 #CJK UNIFIED IDEOGRAPH + {0xB4A3, 0x77D7}, //8383 #CJK UNIFIED IDEOGRAPH + {0xB4A4, 0x6410}, //8384 #CJK UNIFIED IDEOGRAPH + {0xB4A5, 0x89E6}, //8385 #CJK UNIFIED IDEOGRAPH + {0xB4A6, 0x5904}, //8386 #CJK UNIFIED IDEOGRAPH + {0xB4A7, 0x63E3}, //8387 #CJK UNIFIED IDEOGRAPH + {0xB4A8, 0x5DDD}, //8388 #CJK UNIFIED IDEOGRAPH + {0xB4A9, 0x7A7F}, //8389 #CJK UNIFIED IDEOGRAPH + {0xB4AA, 0x693D}, //8390 #CJK UNIFIED IDEOGRAPH + {0xB4AB, 0x4F20}, //8391 #CJK UNIFIED IDEOGRAPH + {0xB4AC, 0x8239}, //8392 #CJK UNIFIED IDEOGRAPH + {0xB4AD, 0x5598}, //8393 #CJK UNIFIED IDEOGRAPH + {0xB4AE, 0x4E32}, //8394 #CJK UNIFIED IDEOGRAPH + {0xB4AF, 0x75AE}, //8395 #CJK UNIFIED IDEOGRAPH + {0xB4B0, 0x7A97}, //8396 #CJK UNIFIED IDEOGRAPH + {0xB4B1, 0x5E62}, //8397 #CJK UNIFIED IDEOGRAPH + {0xB4B2, 0x5E8A}, //8398 #CJK UNIFIED IDEOGRAPH + {0xB4B3, 0x95EF}, //8399 #CJK UNIFIED IDEOGRAPH + {0xB4B4, 0x521B}, //8400 #CJK UNIFIED IDEOGRAPH + {0xB4B5, 0x5439}, //8401 #CJK UNIFIED IDEOGRAPH + {0xB4B6, 0x708A}, //8402 #CJK UNIFIED IDEOGRAPH + {0xB4B7, 0x6376}, //8403 #CJK UNIFIED IDEOGRAPH + {0xB4B8, 0x9524}, //8404 #CJK UNIFIED IDEOGRAPH + {0xB4B9, 0x5782}, //8405 #CJK UNIFIED IDEOGRAPH + {0xB4BA, 0x6625}, //8406 #CJK UNIFIED IDEOGRAPH + {0xB4BB, 0x693F}, //8407 #CJK UNIFIED IDEOGRAPH + {0xB4BC, 0x9187}, //8408 #CJK UNIFIED IDEOGRAPH + {0xB4BD, 0x5507}, //8409 #CJK UNIFIED IDEOGRAPH + {0xB4BE, 0x6DF3}, //8410 #CJK UNIFIED IDEOGRAPH + {0xB4BF, 0x7EAF}, //8411 #CJK UNIFIED IDEOGRAPH + {0xB4C0, 0x8822}, //8412 #CJK UNIFIED IDEOGRAPH + {0xB4C1, 0x6233}, //8413 #CJK UNIFIED IDEOGRAPH + {0xB4C2, 0x7EF0}, //8414 #CJK UNIFIED IDEOGRAPH + {0xB4C3, 0x75B5}, //8415 #CJK UNIFIED IDEOGRAPH + {0xB4C4, 0x8328}, //8416 #CJK UNIFIED IDEOGRAPH + {0xB4C5, 0x78C1}, //8417 #CJK UNIFIED IDEOGRAPH + {0xB4C6, 0x96CC}, //8418 #CJK UNIFIED IDEOGRAPH + {0xB4C7, 0x8F9E}, //8419 #CJK UNIFIED IDEOGRAPH + {0xB4C8, 0x6148}, //8420 #CJK UNIFIED IDEOGRAPH + {0xB4C9, 0x74F7}, //8421 #CJK UNIFIED IDEOGRAPH + {0xB4CA, 0x8BCD}, //8422 #CJK UNIFIED IDEOGRAPH + {0xB4CB, 0x6B64}, //8423 #CJK UNIFIED IDEOGRAPH + {0xB4CC, 0x523A}, //8424 #CJK UNIFIED IDEOGRAPH + {0xB4CD, 0x8D50}, //8425 #CJK UNIFIED IDEOGRAPH + {0xB4CE, 0x6B21}, //8426 #CJK UNIFIED IDEOGRAPH + {0xB4CF, 0x806A}, //8427 #CJK UNIFIED IDEOGRAPH + {0xB4D0, 0x8471}, //8428 #CJK UNIFIED IDEOGRAPH + {0xB4D1, 0x56F1}, //8429 #CJK UNIFIED IDEOGRAPH + {0xB4D2, 0x5306}, //8430 #CJK UNIFIED IDEOGRAPH + {0xB4D3, 0x4ECE}, //8431 #CJK UNIFIED IDEOGRAPH + {0xB4D4, 0x4E1B}, //8432 #CJK UNIFIED IDEOGRAPH + {0xB4D5, 0x51D1}, //8433 #CJK UNIFIED IDEOGRAPH + {0xB4D6, 0x7C97}, //8434 #CJK UNIFIED IDEOGRAPH + {0xB4D7, 0x918B}, //8435 #CJK UNIFIED IDEOGRAPH + {0xB4D8, 0x7C07}, //8436 #CJK UNIFIED IDEOGRAPH + {0xB4D9, 0x4FC3}, //8437 #CJK UNIFIED IDEOGRAPH + {0xB4DA, 0x8E7F}, //8438 #CJK UNIFIED IDEOGRAPH + {0xB4DB, 0x7BE1}, //8439 #CJK UNIFIED IDEOGRAPH + {0xB4DC, 0x7A9C}, //8440 #CJK UNIFIED IDEOGRAPH + {0xB4DD, 0x6467}, //8441 #CJK UNIFIED IDEOGRAPH + {0xB4DE, 0x5D14}, //8442 #CJK UNIFIED IDEOGRAPH + {0xB4DF, 0x50AC}, //8443 #CJK UNIFIED IDEOGRAPH + {0xB4E0, 0x8106}, //8444 #CJK UNIFIED IDEOGRAPH + {0xB4E1, 0x7601}, //8445 #CJK UNIFIED IDEOGRAPH + {0xB4E2, 0x7CB9}, //8446 #CJK UNIFIED IDEOGRAPH + {0xB4E3, 0x6DEC}, //8447 #CJK UNIFIED IDEOGRAPH + {0xB4E4, 0x7FE0}, //8448 #CJK UNIFIED IDEOGRAPH + {0xB4E5, 0x6751}, //8449 #CJK UNIFIED IDEOGRAPH + {0xB4E6, 0x5B58}, //8450 #CJK UNIFIED IDEOGRAPH + {0xB4E7, 0x5BF8}, //8451 #CJK UNIFIED IDEOGRAPH + {0xB4E8, 0x78CB}, //8452 #CJK UNIFIED IDEOGRAPH + {0xB4E9, 0x64AE}, //8453 #CJK UNIFIED IDEOGRAPH + {0xB4EA, 0x6413}, //8454 #CJK UNIFIED IDEOGRAPH + {0xB4EB, 0x63AA}, //8455 #CJK UNIFIED IDEOGRAPH + {0xB4EC, 0x632B}, //8456 #CJK UNIFIED IDEOGRAPH + {0xB4ED, 0x9519}, //8457 #CJK UNIFIED IDEOGRAPH + {0xB4EE, 0x642D}, //8458 #CJK UNIFIED IDEOGRAPH + {0xB4EF, 0x8FBE}, //8459 #CJK UNIFIED IDEOGRAPH + {0xB4F0, 0x7B54}, //8460 #CJK UNIFIED IDEOGRAPH + {0xB4F1, 0x7629}, //8461 #CJK UNIFIED IDEOGRAPH + {0xB4F2, 0x6253}, //8462 #CJK UNIFIED IDEOGRAPH + {0xB4F3, 0x5927}, //8463 #CJK UNIFIED IDEOGRAPH + {0xB4F4, 0x5446}, //8464 #CJK UNIFIED IDEOGRAPH + {0xB4F5, 0x6B79}, //8465 #CJK UNIFIED IDEOGRAPH + {0xB4F6, 0x50A3}, //8466 #CJK UNIFIED IDEOGRAPH + {0xB4F7, 0x6234}, //8467 #CJK UNIFIED IDEOGRAPH + {0xB4F8, 0x5E26}, //8468 #CJK UNIFIED IDEOGRAPH + {0xB4F9, 0x6B86}, //8469 #CJK UNIFIED IDEOGRAPH + {0xB4FA, 0x4EE3}, //8470 #CJK UNIFIED IDEOGRAPH + {0xB4FB, 0x8D37}, //8471 #CJK UNIFIED IDEOGRAPH + {0xB4FC, 0x888B}, //8472 #CJK UNIFIED IDEOGRAPH + {0xB4FD, 0x5F85}, //8473 #CJK UNIFIED IDEOGRAPH + {0xB4FE, 0x902E}, //8474 #CJK UNIFIED IDEOGRAPH + {0xB540, 0x790D}, //8475 #CJK UNIFIED IDEOGRAPH + {0xB541, 0x790E}, //8476 #CJK UNIFIED IDEOGRAPH + {0xB542, 0x790F}, //8477 #CJK UNIFIED IDEOGRAPH + {0xB543, 0x7910}, //8478 #CJK UNIFIED IDEOGRAPH + {0xB544, 0x7911}, //8479 #CJK UNIFIED IDEOGRAPH + {0xB545, 0x7912}, //8480 #CJK UNIFIED IDEOGRAPH + {0xB546, 0x7914}, //8481 #CJK UNIFIED IDEOGRAPH + {0xB547, 0x7915}, //8482 #CJK UNIFIED IDEOGRAPH + {0xB548, 0x7916}, //8483 #CJK UNIFIED IDEOGRAPH + {0xB549, 0x7917}, //8484 #CJK UNIFIED IDEOGRAPH + {0xB54A, 0x7918}, //8485 #CJK UNIFIED IDEOGRAPH + {0xB54B, 0x7919}, //8486 #CJK UNIFIED IDEOGRAPH + {0xB54C, 0x791A}, //8487 #CJK UNIFIED IDEOGRAPH + {0xB54D, 0x791B}, //8488 #CJK UNIFIED IDEOGRAPH + {0xB54E, 0x791C}, //8489 #CJK UNIFIED IDEOGRAPH + {0xB54F, 0x791D}, //8490 #CJK UNIFIED IDEOGRAPH + {0xB550, 0x791F}, //8491 #CJK UNIFIED IDEOGRAPH + {0xB551, 0x7920}, //8492 #CJK UNIFIED IDEOGRAPH + {0xB552, 0x7921}, //8493 #CJK UNIFIED IDEOGRAPH + {0xB553, 0x7922}, //8494 #CJK UNIFIED IDEOGRAPH + {0xB554, 0x7923}, //8495 #CJK UNIFIED IDEOGRAPH + {0xB555, 0x7925}, //8496 #CJK UNIFIED IDEOGRAPH + {0xB556, 0x7926}, //8497 #CJK UNIFIED IDEOGRAPH + {0xB557, 0x7927}, //8498 #CJK UNIFIED IDEOGRAPH + {0xB558, 0x7928}, //8499 #CJK UNIFIED IDEOGRAPH + {0xB559, 0x7929}, //8500 #CJK UNIFIED IDEOGRAPH + {0xB55A, 0x792A}, //8501 #CJK UNIFIED IDEOGRAPH + {0xB55B, 0x792B}, //8502 #CJK UNIFIED IDEOGRAPH + {0xB55C, 0x792C}, //8503 #CJK UNIFIED IDEOGRAPH + {0xB55D, 0x792D}, //8504 #CJK UNIFIED IDEOGRAPH + {0xB55E, 0x792E}, //8505 #CJK UNIFIED IDEOGRAPH + {0xB55F, 0x792F}, //8506 #CJK UNIFIED IDEOGRAPH + {0xB560, 0x7930}, //8507 #CJK UNIFIED IDEOGRAPH + {0xB561, 0x7931}, //8508 #CJK UNIFIED IDEOGRAPH + {0xB562, 0x7932}, //8509 #CJK UNIFIED IDEOGRAPH + {0xB563, 0x7933}, //8510 #CJK UNIFIED IDEOGRAPH + {0xB564, 0x7935}, //8511 #CJK UNIFIED IDEOGRAPH + {0xB565, 0x7936}, //8512 #CJK UNIFIED IDEOGRAPH + {0xB566, 0x7937}, //8513 #CJK UNIFIED IDEOGRAPH + {0xB567, 0x7938}, //8514 #CJK UNIFIED IDEOGRAPH + {0xB568, 0x7939}, //8515 #CJK UNIFIED IDEOGRAPH + {0xB569, 0x793D}, //8516 #CJK UNIFIED IDEOGRAPH + {0xB56A, 0x793F}, //8517 #CJK UNIFIED IDEOGRAPH + {0xB56B, 0x7942}, //8518 #CJK UNIFIED IDEOGRAPH + {0xB56C, 0x7943}, //8519 #CJK UNIFIED IDEOGRAPH + {0xB56D, 0x7944}, //8520 #CJK UNIFIED IDEOGRAPH + {0xB56E, 0x7945}, //8521 #CJK UNIFIED IDEOGRAPH + {0xB56F, 0x7947}, //8522 #CJK UNIFIED IDEOGRAPH + {0xB570, 0x794A}, //8523 #CJK UNIFIED IDEOGRAPH + {0xB571, 0x794B}, //8524 #CJK UNIFIED IDEOGRAPH + {0xB572, 0x794C}, //8525 #CJK UNIFIED IDEOGRAPH + {0xB573, 0x794D}, //8526 #CJK UNIFIED IDEOGRAPH + {0xB574, 0x794E}, //8527 #CJK UNIFIED IDEOGRAPH + {0xB575, 0x794F}, //8528 #CJK UNIFIED IDEOGRAPH + {0xB576, 0x7950}, //8529 #CJK UNIFIED IDEOGRAPH + {0xB577, 0x7951}, //8530 #CJK UNIFIED IDEOGRAPH + {0xB578, 0x7952}, //8531 #CJK UNIFIED IDEOGRAPH + {0xB579, 0x7954}, //8532 #CJK UNIFIED IDEOGRAPH + {0xB57A, 0x7955}, //8533 #CJK UNIFIED IDEOGRAPH + {0xB57B, 0x7958}, //8534 #CJK UNIFIED IDEOGRAPH + {0xB57C, 0x7959}, //8535 #CJK UNIFIED IDEOGRAPH + {0xB57D, 0x7961}, //8536 #CJK UNIFIED IDEOGRAPH + {0xB57E, 0x7963}, //8537 #CJK UNIFIED IDEOGRAPH + {0xB580, 0x7964}, //8538 #CJK UNIFIED IDEOGRAPH + {0xB581, 0x7966}, //8539 #CJK UNIFIED IDEOGRAPH + {0xB582, 0x7969}, //8540 #CJK UNIFIED IDEOGRAPH + {0xB583, 0x796A}, //8541 #CJK UNIFIED IDEOGRAPH + {0xB584, 0x796B}, //8542 #CJK UNIFIED IDEOGRAPH + {0xB585, 0x796C}, //8543 #CJK UNIFIED IDEOGRAPH + {0xB586, 0x796E}, //8544 #CJK UNIFIED IDEOGRAPH + {0xB587, 0x7970}, //8545 #CJK UNIFIED IDEOGRAPH + {0xB588, 0x7971}, //8546 #CJK UNIFIED IDEOGRAPH + {0xB589, 0x7972}, //8547 #CJK UNIFIED IDEOGRAPH + {0xB58A, 0x7973}, //8548 #CJK UNIFIED IDEOGRAPH + {0xB58B, 0x7974}, //8549 #CJK UNIFIED IDEOGRAPH + {0xB58C, 0x7975}, //8550 #CJK UNIFIED IDEOGRAPH + {0xB58D, 0x7976}, //8551 #CJK UNIFIED IDEOGRAPH + {0xB58E, 0x7979}, //8552 #CJK UNIFIED IDEOGRAPH + {0xB58F, 0x797B}, //8553 #CJK UNIFIED IDEOGRAPH + {0xB590, 0x797C}, //8554 #CJK UNIFIED IDEOGRAPH + {0xB591, 0x797D}, //8555 #CJK UNIFIED IDEOGRAPH + {0xB592, 0x797E}, //8556 #CJK UNIFIED IDEOGRAPH + {0xB593, 0x797F}, //8557 #CJK UNIFIED IDEOGRAPH + {0xB594, 0x7982}, //8558 #CJK UNIFIED IDEOGRAPH + {0xB595, 0x7983}, //8559 #CJK UNIFIED IDEOGRAPH + {0xB596, 0x7986}, //8560 #CJK UNIFIED IDEOGRAPH + {0xB597, 0x7987}, //8561 #CJK UNIFIED IDEOGRAPH + {0xB598, 0x7988}, //8562 #CJK UNIFIED IDEOGRAPH + {0xB599, 0x7989}, //8563 #CJK UNIFIED IDEOGRAPH + {0xB59A, 0x798B}, //8564 #CJK UNIFIED IDEOGRAPH + {0xB59B, 0x798C}, //8565 #CJK UNIFIED IDEOGRAPH + {0xB59C, 0x798D}, //8566 #CJK UNIFIED IDEOGRAPH + {0xB59D, 0x798E}, //8567 #CJK UNIFIED IDEOGRAPH + {0xB59E, 0x7990}, //8568 #CJK UNIFIED IDEOGRAPH + {0xB59F, 0x7991}, //8569 #CJK UNIFIED IDEOGRAPH + {0xB5A0, 0x7992}, //8570 #CJK UNIFIED IDEOGRAPH + {0xB5A1, 0x6020}, //8571 #CJK UNIFIED IDEOGRAPH + {0xB5A2, 0x803D}, //8572 #CJK UNIFIED IDEOGRAPH + {0xB5A3, 0x62C5}, //8573 #CJK UNIFIED IDEOGRAPH + {0xB5A4, 0x4E39}, //8574 #CJK UNIFIED IDEOGRAPH + {0xB5A5, 0x5355}, //8575 #CJK UNIFIED IDEOGRAPH + {0xB5A6, 0x90F8}, //8576 #CJK UNIFIED IDEOGRAPH + {0xB5A7, 0x63B8}, //8577 #CJK UNIFIED IDEOGRAPH + {0xB5A8, 0x80C6}, //8578 #CJK UNIFIED IDEOGRAPH + {0xB5A9, 0x65E6}, //8579 #CJK UNIFIED IDEOGRAPH + {0xB5AA, 0x6C2E}, //8580 #CJK UNIFIED IDEOGRAPH + {0xB5AB, 0x4F46}, //8581 #CJK UNIFIED IDEOGRAPH + {0xB5AC, 0x60EE}, //8582 #CJK UNIFIED IDEOGRAPH + {0xB5AD, 0x6DE1}, //8583 #CJK UNIFIED IDEOGRAPH + {0xB5AE, 0x8BDE}, //8584 #CJK UNIFIED IDEOGRAPH + {0xB5AF, 0x5F39}, //8585 #CJK UNIFIED IDEOGRAPH + {0xB5B0, 0x86CB}, //8586 #CJK UNIFIED IDEOGRAPH + {0xB5B1, 0x5F53}, //8587 #CJK UNIFIED IDEOGRAPH + {0xB5B2, 0x6321}, //8588 #CJK UNIFIED IDEOGRAPH + {0xB5B3, 0x515A}, //8589 #CJK UNIFIED IDEOGRAPH + {0xB5B4, 0x8361}, //8590 #CJK UNIFIED IDEOGRAPH + {0xB5B5, 0x6863}, //8591 #CJK UNIFIED IDEOGRAPH + {0xB5B6, 0x5200}, //8592 #CJK UNIFIED IDEOGRAPH + {0xB5B7, 0x6363}, //8593 #CJK UNIFIED IDEOGRAPH + {0xB5B8, 0x8E48}, //8594 #CJK UNIFIED IDEOGRAPH + {0xB5B9, 0x5012}, //8595 #CJK UNIFIED IDEOGRAPH + {0xB5BA, 0x5C9B}, //8596 #CJK UNIFIED IDEOGRAPH + {0xB5BB, 0x7977}, //8597 #CJK UNIFIED IDEOGRAPH + {0xB5BC, 0x5BFC}, //8598 #CJK UNIFIED IDEOGRAPH + {0xB5BD, 0x5230}, //8599 #CJK UNIFIED IDEOGRAPH + {0xB5BE, 0x7A3B}, //8600 #CJK UNIFIED IDEOGRAPH + {0xB5BF, 0x60BC}, //8601 #CJK UNIFIED IDEOGRAPH + {0xB5C0, 0x9053}, //8602 #CJK UNIFIED IDEOGRAPH + {0xB5C1, 0x76D7}, //8603 #CJK UNIFIED IDEOGRAPH + {0xB5C2, 0x5FB7}, //8604 #CJK UNIFIED IDEOGRAPH + {0xB5C3, 0x5F97}, //8605 #CJK UNIFIED IDEOGRAPH + {0xB5C4, 0x7684}, //8606 #CJK UNIFIED IDEOGRAPH + {0xB5C5, 0x8E6C}, //8607 #CJK UNIFIED IDEOGRAPH + {0xB5C6, 0x706F}, //8608 #CJK UNIFIED IDEOGRAPH + {0xB5C7, 0x767B}, //8609 #CJK UNIFIED IDEOGRAPH + {0xB5C8, 0x7B49}, //8610 #CJK UNIFIED IDEOGRAPH + {0xB5C9, 0x77AA}, //8611 #CJK UNIFIED IDEOGRAPH + {0xB5CA, 0x51F3}, //8612 #CJK UNIFIED IDEOGRAPH + {0xB5CB, 0x9093}, //8613 #CJK UNIFIED IDEOGRAPH + {0xB5CC, 0x5824}, //8614 #CJK UNIFIED IDEOGRAPH + {0xB5CD, 0x4F4E}, //8615 #CJK UNIFIED IDEOGRAPH + {0xB5CE, 0x6EF4}, //8616 #CJK UNIFIED IDEOGRAPH + {0xB5CF, 0x8FEA}, //8617 #CJK UNIFIED IDEOGRAPH + {0xB5D0, 0x654C}, //8618 #CJK UNIFIED IDEOGRAPH + {0xB5D1, 0x7B1B}, //8619 #CJK UNIFIED IDEOGRAPH + {0xB5D2, 0x72C4}, //8620 #CJK UNIFIED IDEOGRAPH + {0xB5D3, 0x6DA4}, //8621 #CJK UNIFIED IDEOGRAPH + {0xB5D4, 0x7FDF}, //8622 #CJK UNIFIED IDEOGRAPH + {0xB5D5, 0x5AE1}, //8623 #CJK UNIFIED IDEOGRAPH + {0xB5D6, 0x62B5}, //8624 #CJK UNIFIED IDEOGRAPH + {0xB5D7, 0x5E95}, //8625 #CJK UNIFIED IDEOGRAPH + {0xB5D8, 0x5730}, //8626 #CJK UNIFIED IDEOGRAPH + {0xB5D9, 0x8482}, //8627 #CJK UNIFIED IDEOGRAPH + {0xB5DA, 0x7B2C}, //8628 #CJK UNIFIED IDEOGRAPH + {0xB5DB, 0x5E1D}, //8629 #CJK UNIFIED IDEOGRAPH + {0xB5DC, 0x5F1F}, //8630 #CJK UNIFIED IDEOGRAPH + {0xB5DD, 0x9012}, //8631 #CJK UNIFIED IDEOGRAPH + {0xB5DE, 0x7F14}, //8632 #CJK UNIFIED IDEOGRAPH + {0xB5DF, 0x98A0}, //8633 #CJK UNIFIED IDEOGRAPH + {0xB5E0, 0x6382}, //8634 #CJK UNIFIED IDEOGRAPH + {0xB5E1, 0x6EC7}, //8635 #CJK UNIFIED IDEOGRAPH + {0xB5E2, 0x7898}, //8636 #CJK UNIFIED IDEOGRAPH + {0xB5E3, 0x70B9}, //8637 #CJK UNIFIED IDEOGRAPH + {0xB5E4, 0x5178}, //8638 #CJK UNIFIED IDEOGRAPH + {0xB5E5, 0x975B}, //8639 #CJK UNIFIED IDEOGRAPH + {0xB5E6, 0x57AB}, //8640 #CJK UNIFIED IDEOGRAPH + {0xB5E7, 0x7535}, //8641 #CJK UNIFIED IDEOGRAPH + {0xB5E8, 0x4F43}, //8642 #CJK UNIFIED IDEOGRAPH + {0xB5E9, 0x7538}, //8643 #CJK UNIFIED IDEOGRAPH + {0xB5EA, 0x5E97}, //8644 #CJK UNIFIED IDEOGRAPH + {0xB5EB, 0x60E6}, //8645 #CJK UNIFIED IDEOGRAPH + {0xB5EC, 0x5960}, //8646 #CJK UNIFIED IDEOGRAPH + {0xB5ED, 0x6DC0}, //8647 #CJK UNIFIED IDEOGRAPH + {0xB5EE, 0x6BBF}, //8648 #CJK UNIFIED IDEOGRAPH + {0xB5EF, 0x7889}, //8649 #CJK UNIFIED IDEOGRAPH + {0xB5F0, 0x53FC}, //8650 #CJK UNIFIED IDEOGRAPH + {0xB5F1, 0x96D5}, //8651 #CJK UNIFIED IDEOGRAPH + {0xB5F2, 0x51CB}, //8652 #CJK UNIFIED IDEOGRAPH + {0xB5F3, 0x5201}, //8653 #CJK UNIFIED IDEOGRAPH + {0xB5F4, 0x6389}, //8654 #CJK UNIFIED IDEOGRAPH + {0xB5F5, 0x540A}, //8655 #CJK UNIFIED IDEOGRAPH + {0xB5F6, 0x9493}, //8656 #CJK UNIFIED IDEOGRAPH + {0xB5F7, 0x8C03}, //8657 #CJK UNIFIED IDEOGRAPH + {0xB5F8, 0x8DCC}, //8658 #CJK UNIFIED IDEOGRAPH + {0xB5F9, 0x7239}, //8659 #CJK UNIFIED IDEOGRAPH + {0xB5FA, 0x789F}, //8660 #CJK UNIFIED IDEOGRAPH + {0xB5FB, 0x8776}, //8661 #CJK UNIFIED IDEOGRAPH + {0xB5FC, 0x8FED}, //8662 #CJK UNIFIED IDEOGRAPH + {0xB5FD, 0x8C0D}, //8663 #CJK UNIFIED IDEOGRAPH + {0xB5FE, 0x53E0}, //8664 #CJK UNIFIED IDEOGRAPH + {0xB640, 0x7993}, //8665 #CJK UNIFIED IDEOGRAPH + {0xB641, 0x7994}, //8666 #CJK UNIFIED IDEOGRAPH + {0xB642, 0x7995}, //8667 #CJK UNIFIED IDEOGRAPH + {0xB643, 0x7996}, //8668 #CJK UNIFIED IDEOGRAPH + {0xB644, 0x7997}, //8669 #CJK UNIFIED IDEOGRAPH + {0xB645, 0x7998}, //8670 #CJK UNIFIED IDEOGRAPH + {0xB646, 0x7999}, //8671 #CJK UNIFIED IDEOGRAPH + {0xB647, 0x799B}, //8672 #CJK UNIFIED IDEOGRAPH + {0xB648, 0x799C}, //8673 #CJK UNIFIED IDEOGRAPH + {0xB649, 0x799D}, //8674 #CJK UNIFIED IDEOGRAPH + {0xB64A, 0x799E}, //8675 #CJK UNIFIED IDEOGRAPH + {0xB64B, 0x799F}, //8676 #CJK UNIFIED IDEOGRAPH + {0xB64C, 0x79A0}, //8677 #CJK UNIFIED IDEOGRAPH + {0xB64D, 0x79A1}, //8678 #CJK UNIFIED IDEOGRAPH + {0xB64E, 0x79A2}, //8679 #CJK UNIFIED IDEOGRAPH + {0xB64F, 0x79A3}, //8680 #CJK UNIFIED IDEOGRAPH + {0xB650, 0x79A4}, //8681 #CJK UNIFIED IDEOGRAPH + {0xB651, 0x79A5}, //8682 #CJK UNIFIED IDEOGRAPH + {0xB652, 0x79A6}, //8683 #CJK UNIFIED IDEOGRAPH + {0xB653, 0x79A8}, //8684 #CJK UNIFIED IDEOGRAPH + {0xB654, 0x79A9}, //8685 #CJK UNIFIED IDEOGRAPH + {0xB655, 0x79AA}, //8686 #CJK UNIFIED IDEOGRAPH + {0xB656, 0x79AB}, //8687 #CJK UNIFIED IDEOGRAPH + {0xB657, 0x79AC}, //8688 #CJK UNIFIED IDEOGRAPH + {0xB658, 0x79AD}, //8689 #CJK UNIFIED IDEOGRAPH + {0xB659, 0x79AE}, //8690 #CJK UNIFIED IDEOGRAPH + {0xB65A, 0x79AF}, //8691 #CJK UNIFIED IDEOGRAPH + {0xB65B, 0x79B0}, //8692 #CJK UNIFIED IDEOGRAPH + {0xB65C, 0x79B1}, //8693 #CJK UNIFIED IDEOGRAPH + {0xB65D, 0x79B2}, //8694 #CJK UNIFIED IDEOGRAPH + {0xB65E, 0x79B4}, //8695 #CJK UNIFIED IDEOGRAPH + {0xB65F, 0x79B5}, //8696 #CJK UNIFIED IDEOGRAPH + {0xB660, 0x79B6}, //8697 #CJK UNIFIED IDEOGRAPH + {0xB661, 0x79B7}, //8698 #CJK UNIFIED IDEOGRAPH + {0xB662, 0x79B8}, //8699 #CJK UNIFIED IDEOGRAPH + {0xB663, 0x79BC}, //8700 #CJK UNIFIED IDEOGRAPH + {0xB664, 0x79BF}, //8701 #CJK UNIFIED IDEOGRAPH + {0xB665, 0x79C2}, //8702 #CJK UNIFIED IDEOGRAPH + {0xB666, 0x79C4}, //8703 #CJK UNIFIED IDEOGRAPH + {0xB667, 0x79C5}, //8704 #CJK UNIFIED IDEOGRAPH + {0xB668, 0x79C7}, //8705 #CJK UNIFIED IDEOGRAPH + {0xB669, 0x79C8}, //8706 #CJK UNIFIED IDEOGRAPH + {0xB66A, 0x79CA}, //8707 #CJK UNIFIED IDEOGRAPH + {0xB66B, 0x79CC}, //8708 #CJK UNIFIED IDEOGRAPH + {0xB66C, 0x79CE}, //8709 #CJK UNIFIED IDEOGRAPH + {0xB66D, 0x79CF}, //8710 #CJK UNIFIED IDEOGRAPH + {0xB66E, 0x79D0}, //8711 #CJK UNIFIED IDEOGRAPH + {0xB66F, 0x79D3}, //8712 #CJK UNIFIED IDEOGRAPH + {0xB670, 0x79D4}, //8713 #CJK UNIFIED IDEOGRAPH + {0xB671, 0x79D6}, //8714 #CJK UNIFIED IDEOGRAPH + {0xB672, 0x79D7}, //8715 #CJK UNIFIED IDEOGRAPH + {0xB673, 0x79D9}, //8716 #CJK UNIFIED IDEOGRAPH + {0xB674, 0x79DA}, //8717 #CJK UNIFIED IDEOGRAPH + {0xB675, 0x79DB}, //8718 #CJK UNIFIED IDEOGRAPH + {0xB676, 0x79DC}, //8719 #CJK UNIFIED IDEOGRAPH + {0xB677, 0x79DD}, //8720 #CJK UNIFIED IDEOGRAPH + {0xB678, 0x79DE}, //8721 #CJK UNIFIED IDEOGRAPH + {0xB679, 0x79E0}, //8722 #CJK UNIFIED IDEOGRAPH + {0xB67A, 0x79E1}, //8723 #CJK UNIFIED IDEOGRAPH + {0xB67B, 0x79E2}, //8724 #CJK UNIFIED IDEOGRAPH + {0xB67C, 0x79E5}, //8725 #CJK UNIFIED IDEOGRAPH + {0xB67D, 0x79E8}, //8726 #CJK UNIFIED IDEOGRAPH + {0xB67E, 0x79EA}, //8727 #CJK UNIFIED IDEOGRAPH + {0xB680, 0x79EC}, //8728 #CJK UNIFIED IDEOGRAPH + {0xB681, 0x79EE}, //8729 #CJK UNIFIED IDEOGRAPH + {0xB682, 0x79F1}, //8730 #CJK UNIFIED IDEOGRAPH + {0xB683, 0x79F2}, //8731 #CJK UNIFIED IDEOGRAPH + {0xB684, 0x79F3}, //8732 #CJK UNIFIED IDEOGRAPH + {0xB685, 0x79F4}, //8733 #CJK UNIFIED IDEOGRAPH + {0xB686, 0x79F5}, //8734 #CJK UNIFIED IDEOGRAPH + {0xB687, 0x79F6}, //8735 #CJK UNIFIED IDEOGRAPH + {0xB688, 0x79F7}, //8736 #CJK UNIFIED IDEOGRAPH + {0xB689, 0x79F9}, //8737 #CJK UNIFIED IDEOGRAPH + {0xB68A, 0x79FA}, //8738 #CJK UNIFIED IDEOGRAPH + {0xB68B, 0x79FC}, //8739 #CJK UNIFIED IDEOGRAPH + {0xB68C, 0x79FE}, //8740 #CJK UNIFIED IDEOGRAPH + {0xB68D, 0x79FF}, //8741 #CJK UNIFIED IDEOGRAPH + {0xB68E, 0x7A01}, //8742 #CJK UNIFIED IDEOGRAPH + {0xB68F, 0x7A04}, //8743 #CJK UNIFIED IDEOGRAPH + {0xB690, 0x7A05}, //8744 #CJK UNIFIED IDEOGRAPH + {0xB691, 0x7A07}, //8745 #CJK UNIFIED IDEOGRAPH + {0xB692, 0x7A08}, //8746 #CJK UNIFIED IDEOGRAPH + {0xB693, 0x7A09}, //8747 #CJK UNIFIED IDEOGRAPH + {0xB694, 0x7A0A}, //8748 #CJK UNIFIED IDEOGRAPH + {0xB695, 0x7A0C}, //8749 #CJK UNIFIED IDEOGRAPH + {0xB696, 0x7A0F}, //8750 #CJK UNIFIED IDEOGRAPH + {0xB697, 0x7A10}, //8751 #CJK UNIFIED IDEOGRAPH + {0xB698, 0x7A11}, //8752 #CJK UNIFIED IDEOGRAPH + {0xB699, 0x7A12}, //8753 #CJK UNIFIED IDEOGRAPH + {0xB69A, 0x7A13}, //8754 #CJK UNIFIED IDEOGRAPH + {0xB69B, 0x7A15}, //8755 #CJK UNIFIED IDEOGRAPH + {0xB69C, 0x7A16}, //8756 #CJK UNIFIED IDEOGRAPH + {0xB69D, 0x7A18}, //8757 #CJK UNIFIED IDEOGRAPH + {0xB69E, 0x7A19}, //8758 #CJK UNIFIED IDEOGRAPH + {0xB69F, 0x7A1B}, //8759 #CJK UNIFIED IDEOGRAPH + {0xB6A0, 0x7A1C}, //8760 #CJK UNIFIED IDEOGRAPH + {0xB6A1, 0x4E01}, //8761 #CJK UNIFIED IDEOGRAPH + {0xB6A2, 0x76EF}, //8762 #CJK UNIFIED IDEOGRAPH + {0xB6A3, 0x53EE}, //8763 #CJK UNIFIED IDEOGRAPH + {0xB6A4, 0x9489}, //8764 #CJK UNIFIED IDEOGRAPH + {0xB6A5, 0x9876}, //8765 #CJK UNIFIED IDEOGRAPH + {0xB6A6, 0x9F0E}, //8766 #CJK UNIFIED IDEOGRAPH + {0xB6A7, 0x952D}, //8767 #CJK UNIFIED IDEOGRAPH + {0xB6A8, 0x5B9A}, //8768 #CJK UNIFIED IDEOGRAPH + {0xB6A9, 0x8BA2}, //8769 #CJK UNIFIED IDEOGRAPH + {0xB6AA, 0x4E22}, //8770 #CJK UNIFIED IDEOGRAPH + {0xB6AB, 0x4E1C}, //8771 #CJK UNIFIED IDEOGRAPH + {0xB6AC, 0x51AC}, //8772 #CJK UNIFIED IDEOGRAPH + {0xB6AD, 0x8463}, //8773 #CJK UNIFIED IDEOGRAPH + {0xB6AE, 0x61C2}, //8774 #CJK UNIFIED IDEOGRAPH + {0xB6AF, 0x52A8}, //8775 #CJK UNIFIED IDEOGRAPH + {0xB6B0, 0x680B}, //8776 #CJK UNIFIED IDEOGRAPH + {0xB6B1, 0x4F97}, //8777 #CJK UNIFIED IDEOGRAPH + {0xB6B2, 0x606B}, //8778 #CJK UNIFIED IDEOGRAPH + {0xB6B3, 0x51BB}, //8779 #CJK UNIFIED IDEOGRAPH + {0xB6B4, 0x6D1E}, //8780 #CJK UNIFIED IDEOGRAPH + {0xB6B5, 0x515C}, //8781 #CJK UNIFIED IDEOGRAPH + {0xB6B6, 0x6296}, //8782 #CJK UNIFIED IDEOGRAPH + {0xB6B7, 0x6597}, //8783 #CJK UNIFIED IDEOGRAPH + {0xB6B8, 0x9661}, //8784 #CJK UNIFIED IDEOGRAPH + {0xB6B9, 0x8C46}, //8785 #CJK UNIFIED IDEOGRAPH + {0xB6BA, 0x9017}, //8786 #CJK UNIFIED IDEOGRAPH + {0xB6BB, 0x75D8}, //8787 #CJK UNIFIED IDEOGRAPH + {0xB6BC, 0x90FD}, //8788 #CJK UNIFIED IDEOGRAPH + {0xB6BD, 0x7763}, //8789 #CJK UNIFIED IDEOGRAPH + {0xB6BE, 0x6BD2}, //8790 #CJK UNIFIED IDEOGRAPH + {0xB6BF, 0x728A}, //8791 #CJK UNIFIED IDEOGRAPH + {0xB6C0, 0x72EC}, //8792 #CJK UNIFIED IDEOGRAPH + {0xB6C1, 0x8BFB}, //8793 #CJK UNIFIED IDEOGRAPH + {0xB6C2, 0x5835}, //8794 #CJK UNIFIED IDEOGRAPH + {0xB6C3, 0x7779}, //8795 #CJK UNIFIED IDEOGRAPH + {0xB6C4, 0x8D4C}, //8796 #CJK UNIFIED IDEOGRAPH + {0xB6C5, 0x675C}, //8797 #CJK UNIFIED IDEOGRAPH + {0xB6C6, 0x9540}, //8798 #CJK UNIFIED IDEOGRAPH + {0xB6C7, 0x809A}, //8799 #CJK UNIFIED IDEOGRAPH + {0xB6C8, 0x5EA6}, //8800 #CJK UNIFIED IDEOGRAPH + {0xB6C9, 0x6E21}, //8801 #CJK UNIFIED IDEOGRAPH + {0xB6CA, 0x5992}, //8802 #CJK UNIFIED IDEOGRAPH + {0xB6CB, 0x7AEF}, //8803 #CJK UNIFIED IDEOGRAPH + {0xB6CC, 0x77ED}, //8804 #CJK UNIFIED IDEOGRAPH + {0xB6CD, 0x953B}, //8805 #CJK UNIFIED IDEOGRAPH + {0xB6CE, 0x6BB5}, //8806 #CJK UNIFIED IDEOGRAPH + {0xB6CF, 0x65AD}, //8807 #CJK UNIFIED IDEOGRAPH + {0xB6D0, 0x7F0E}, //8808 #CJK UNIFIED IDEOGRAPH + {0xB6D1, 0x5806}, //8809 #CJK UNIFIED IDEOGRAPH + {0xB6D2, 0x5151}, //8810 #CJK UNIFIED IDEOGRAPH + {0xB6D3, 0x961F}, //8811 #CJK UNIFIED IDEOGRAPH + {0xB6D4, 0x5BF9}, //8812 #CJK UNIFIED IDEOGRAPH + {0xB6D5, 0x58A9}, //8813 #CJK UNIFIED IDEOGRAPH + {0xB6D6, 0x5428}, //8814 #CJK UNIFIED IDEOGRAPH + {0xB6D7, 0x8E72}, //8815 #CJK UNIFIED IDEOGRAPH + {0xB6D8, 0x6566}, //8816 #CJK UNIFIED IDEOGRAPH + {0xB6D9, 0x987F}, //8817 #CJK UNIFIED IDEOGRAPH + {0xB6DA, 0x56E4}, //8818 #CJK UNIFIED IDEOGRAPH + {0xB6DB, 0x949D}, //8819 #CJK UNIFIED IDEOGRAPH + {0xB6DC, 0x76FE}, //8820 #CJK UNIFIED IDEOGRAPH + {0xB6DD, 0x9041}, //8821 #CJK UNIFIED IDEOGRAPH + {0xB6DE, 0x6387}, //8822 #CJK UNIFIED IDEOGRAPH + {0xB6DF, 0x54C6}, //8823 #CJK UNIFIED IDEOGRAPH + {0xB6E0, 0x591A}, //8824 #CJK UNIFIED IDEOGRAPH + {0xB6E1, 0x593A}, //8825 #CJK UNIFIED IDEOGRAPH + {0xB6E2, 0x579B}, //8826 #CJK UNIFIED IDEOGRAPH + {0xB6E3, 0x8EB2}, //8827 #CJK UNIFIED IDEOGRAPH + {0xB6E4, 0x6735}, //8828 #CJK UNIFIED IDEOGRAPH + {0xB6E5, 0x8DFA}, //8829 #CJK UNIFIED IDEOGRAPH + {0xB6E6, 0x8235}, //8830 #CJK UNIFIED IDEOGRAPH + {0xB6E7, 0x5241}, //8831 #CJK UNIFIED IDEOGRAPH + {0xB6E8, 0x60F0}, //8832 #CJK UNIFIED IDEOGRAPH + {0xB6E9, 0x5815}, //8833 #CJK UNIFIED IDEOGRAPH + {0xB6EA, 0x86FE}, //8834 #CJK UNIFIED IDEOGRAPH + {0xB6EB, 0x5CE8}, //8835 #CJK UNIFIED IDEOGRAPH + {0xB6EC, 0x9E45}, //8836 #CJK UNIFIED IDEOGRAPH + {0xB6ED, 0x4FC4}, //8837 #CJK UNIFIED IDEOGRAPH + {0xB6EE, 0x989D}, //8838 #CJK UNIFIED IDEOGRAPH + {0xB6EF, 0x8BB9}, //8839 #CJK UNIFIED IDEOGRAPH + {0xB6F0, 0x5A25}, //8840 #CJK UNIFIED IDEOGRAPH + {0xB6F1, 0x6076}, //8841 #CJK UNIFIED IDEOGRAPH + {0xB6F2, 0x5384}, //8842 #CJK UNIFIED IDEOGRAPH + {0xB6F3, 0x627C}, //8843 #CJK UNIFIED IDEOGRAPH + {0xB6F4, 0x904F}, //8844 #CJK UNIFIED IDEOGRAPH + {0xB6F5, 0x9102}, //8845 #CJK UNIFIED IDEOGRAPH + {0xB6F6, 0x997F}, //8846 #CJK UNIFIED IDEOGRAPH + {0xB6F7, 0x6069}, //8847 #CJK UNIFIED IDEOGRAPH + {0xB6F8, 0x800C}, //8848 #CJK UNIFIED IDEOGRAPH + {0xB6F9, 0x513F}, //8849 #CJK UNIFIED IDEOGRAPH + {0xB6FA, 0x8033}, //8850 #CJK UNIFIED IDEOGRAPH + {0xB6FB, 0x5C14}, //8851 #CJK UNIFIED IDEOGRAPH + {0xB6FC, 0x9975}, //8852 #CJK UNIFIED IDEOGRAPH + {0xB6FD, 0x6D31}, //8853 #CJK UNIFIED IDEOGRAPH + {0xB6FE, 0x4E8C}, //8854 #CJK UNIFIED IDEOGRAPH + {0xB740, 0x7A1D}, //8855 #CJK UNIFIED IDEOGRAPH + {0xB741, 0x7A1F}, //8856 #CJK UNIFIED IDEOGRAPH + {0xB742, 0x7A21}, //8857 #CJK UNIFIED IDEOGRAPH + {0xB743, 0x7A22}, //8858 #CJK UNIFIED IDEOGRAPH + {0xB744, 0x7A24}, //8859 #CJK UNIFIED IDEOGRAPH + {0xB745, 0x7A25}, //8860 #CJK UNIFIED IDEOGRAPH + {0xB746, 0x7A26}, //8861 #CJK UNIFIED IDEOGRAPH + {0xB747, 0x7A27}, //8862 #CJK UNIFIED IDEOGRAPH + {0xB748, 0x7A28}, //8863 #CJK UNIFIED IDEOGRAPH + {0xB749, 0x7A29}, //8864 #CJK UNIFIED IDEOGRAPH + {0xB74A, 0x7A2A}, //8865 #CJK UNIFIED IDEOGRAPH + {0xB74B, 0x7A2B}, //8866 #CJK UNIFIED IDEOGRAPH + {0xB74C, 0x7A2C}, //8867 #CJK UNIFIED IDEOGRAPH + {0xB74D, 0x7A2D}, //8868 #CJK UNIFIED IDEOGRAPH + {0xB74E, 0x7A2E}, //8869 #CJK UNIFIED IDEOGRAPH + {0xB74F, 0x7A2F}, //8870 #CJK UNIFIED IDEOGRAPH + {0xB750, 0x7A30}, //8871 #CJK UNIFIED IDEOGRAPH + {0xB751, 0x7A31}, //8872 #CJK UNIFIED IDEOGRAPH + {0xB752, 0x7A32}, //8873 #CJK UNIFIED IDEOGRAPH + {0xB753, 0x7A34}, //8874 #CJK UNIFIED IDEOGRAPH + {0xB754, 0x7A35}, //8875 #CJK UNIFIED IDEOGRAPH + {0xB755, 0x7A36}, //8876 #CJK UNIFIED IDEOGRAPH + {0xB756, 0x7A38}, //8877 #CJK UNIFIED IDEOGRAPH + {0xB757, 0x7A3A}, //8878 #CJK UNIFIED IDEOGRAPH + {0xB758, 0x7A3E}, //8879 #CJK UNIFIED IDEOGRAPH + {0xB759, 0x7A40}, //8880 #CJK UNIFIED IDEOGRAPH + {0xB75A, 0x7A41}, //8881 #CJK UNIFIED IDEOGRAPH + {0xB75B, 0x7A42}, //8882 #CJK UNIFIED IDEOGRAPH + {0xB75C, 0x7A43}, //8883 #CJK UNIFIED IDEOGRAPH + {0xB75D, 0x7A44}, //8884 #CJK UNIFIED IDEOGRAPH + {0xB75E, 0x7A45}, //8885 #CJK UNIFIED IDEOGRAPH + {0xB75F, 0x7A47}, //8886 #CJK UNIFIED IDEOGRAPH + {0xB760, 0x7A48}, //8887 #CJK UNIFIED IDEOGRAPH + {0xB761, 0x7A49}, //8888 #CJK UNIFIED IDEOGRAPH + {0xB762, 0x7A4A}, //8889 #CJK UNIFIED IDEOGRAPH + {0xB763, 0x7A4B}, //8890 #CJK UNIFIED IDEOGRAPH + {0xB764, 0x7A4C}, //8891 #CJK UNIFIED IDEOGRAPH + {0xB765, 0x7A4D}, //8892 #CJK UNIFIED IDEOGRAPH + {0xB766, 0x7A4E}, //8893 #CJK UNIFIED IDEOGRAPH + {0xB767, 0x7A4F}, //8894 #CJK UNIFIED IDEOGRAPH + {0xB768, 0x7A50}, //8895 #CJK UNIFIED IDEOGRAPH + {0xB769, 0x7A52}, //8896 #CJK UNIFIED IDEOGRAPH + {0xB76A, 0x7A53}, //8897 #CJK UNIFIED IDEOGRAPH + {0xB76B, 0x7A54}, //8898 #CJK UNIFIED IDEOGRAPH + {0xB76C, 0x7A55}, //8899 #CJK UNIFIED IDEOGRAPH + {0xB76D, 0x7A56}, //8900 #CJK UNIFIED IDEOGRAPH + {0xB76E, 0x7A58}, //8901 #CJK UNIFIED IDEOGRAPH + {0xB76F, 0x7A59}, //8902 #CJK UNIFIED IDEOGRAPH + {0xB770, 0x7A5A}, //8903 #CJK UNIFIED IDEOGRAPH + {0xB771, 0x7A5B}, //8904 #CJK UNIFIED IDEOGRAPH + {0xB772, 0x7A5C}, //8905 #CJK UNIFIED IDEOGRAPH + {0xB773, 0x7A5D}, //8906 #CJK UNIFIED IDEOGRAPH + {0xB774, 0x7A5E}, //8907 #CJK UNIFIED IDEOGRAPH + {0xB775, 0x7A5F}, //8908 #CJK UNIFIED IDEOGRAPH + {0xB776, 0x7A60}, //8909 #CJK UNIFIED IDEOGRAPH + {0xB777, 0x7A61}, //8910 #CJK UNIFIED IDEOGRAPH + {0xB778, 0x7A62}, //8911 #CJK UNIFIED IDEOGRAPH + {0xB779, 0x7A63}, //8912 #CJK UNIFIED IDEOGRAPH + {0xB77A, 0x7A64}, //8913 #CJK UNIFIED IDEOGRAPH + {0xB77B, 0x7A65}, //8914 #CJK UNIFIED IDEOGRAPH + {0xB77C, 0x7A66}, //8915 #CJK UNIFIED IDEOGRAPH + {0xB77D, 0x7A67}, //8916 #CJK UNIFIED IDEOGRAPH + {0xB77E, 0x7A68}, //8917 #CJK UNIFIED IDEOGRAPH + {0xB780, 0x7A69}, //8918 #CJK UNIFIED IDEOGRAPH + {0xB781, 0x7A6A}, //8919 #CJK UNIFIED IDEOGRAPH + {0xB782, 0x7A6B}, //8920 #CJK UNIFIED IDEOGRAPH + {0xB783, 0x7A6C}, //8921 #CJK UNIFIED IDEOGRAPH + {0xB784, 0x7A6D}, //8922 #CJK UNIFIED IDEOGRAPH + {0xB785, 0x7A6E}, //8923 #CJK UNIFIED IDEOGRAPH + {0xB786, 0x7A6F}, //8924 #CJK UNIFIED IDEOGRAPH + {0xB787, 0x7A71}, //8925 #CJK UNIFIED IDEOGRAPH + {0xB788, 0x7A72}, //8926 #CJK UNIFIED IDEOGRAPH + {0xB789, 0x7A73}, //8927 #CJK UNIFIED IDEOGRAPH + {0xB78A, 0x7A75}, //8928 #CJK UNIFIED IDEOGRAPH + {0xB78B, 0x7A7B}, //8929 #CJK UNIFIED IDEOGRAPH + {0xB78C, 0x7A7C}, //8930 #CJK UNIFIED IDEOGRAPH + {0xB78D, 0x7A7D}, //8931 #CJK UNIFIED IDEOGRAPH + {0xB78E, 0x7A7E}, //8932 #CJK UNIFIED IDEOGRAPH + {0xB78F, 0x7A82}, //8933 #CJK UNIFIED IDEOGRAPH + {0xB790, 0x7A85}, //8934 #CJK UNIFIED IDEOGRAPH + {0xB791, 0x7A87}, //8935 #CJK UNIFIED IDEOGRAPH + {0xB792, 0x7A89}, //8936 #CJK UNIFIED IDEOGRAPH + {0xB793, 0x7A8A}, //8937 #CJK UNIFIED IDEOGRAPH + {0xB794, 0x7A8B}, //8938 #CJK UNIFIED IDEOGRAPH + {0xB795, 0x7A8C}, //8939 #CJK UNIFIED IDEOGRAPH + {0xB796, 0x7A8E}, //8940 #CJK UNIFIED IDEOGRAPH + {0xB797, 0x7A8F}, //8941 #CJK UNIFIED IDEOGRAPH + {0xB798, 0x7A90}, //8942 #CJK UNIFIED IDEOGRAPH + {0xB799, 0x7A93}, //8943 #CJK UNIFIED IDEOGRAPH + {0xB79A, 0x7A94}, //8944 #CJK UNIFIED IDEOGRAPH + {0xB79B, 0x7A99}, //8945 #CJK UNIFIED IDEOGRAPH + {0xB79C, 0x7A9A}, //8946 #CJK UNIFIED IDEOGRAPH + {0xB79D, 0x7A9B}, //8947 #CJK UNIFIED IDEOGRAPH + {0xB79E, 0x7A9E}, //8948 #CJK UNIFIED IDEOGRAPH + {0xB79F, 0x7AA1}, //8949 #CJK UNIFIED IDEOGRAPH + {0xB7A0, 0x7AA2}, //8950 #CJK UNIFIED IDEOGRAPH + {0xB7A1, 0x8D30}, //8951 #CJK UNIFIED IDEOGRAPH + {0xB7A2, 0x53D1}, //8952 #CJK UNIFIED IDEOGRAPH + {0xB7A3, 0x7F5A}, //8953 #CJK UNIFIED IDEOGRAPH + {0xB7A4, 0x7B4F}, //8954 #CJK UNIFIED IDEOGRAPH + {0xB7A5, 0x4F10}, //8955 #CJK UNIFIED IDEOGRAPH + {0xB7A6, 0x4E4F}, //8956 #CJK UNIFIED IDEOGRAPH + {0xB7A7, 0x9600}, //8957 #CJK UNIFIED IDEOGRAPH + {0xB7A8, 0x6CD5}, //8958 #CJK UNIFIED IDEOGRAPH + {0xB7A9, 0x73D0}, //8959 #CJK UNIFIED IDEOGRAPH + {0xB7AA, 0x85E9}, //8960 #CJK UNIFIED IDEOGRAPH + {0xB7AB, 0x5E06}, //8961 #CJK UNIFIED IDEOGRAPH + {0xB7AC, 0x756A}, //8962 #CJK UNIFIED IDEOGRAPH + {0xB7AD, 0x7FFB}, //8963 #CJK UNIFIED IDEOGRAPH + {0xB7AE, 0x6A0A}, //8964 #CJK UNIFIED IDEOGRAPH + {0xB7AF, 0x77FE}, //8965 #CJK UNIFIED IDEOGRAPH + {0xB7B0, 0x9492}, //8966 #CJK UNIFIED IDEOGRAPH + {0xB7B1, 0x7E41}, //8967 #CJK UNIFIED IDEOGRAPH + {0xB7B2, 0x51E1}, //8968 #CJK UNIFIED IDEOGRAPH + {0xB7B3, 0x70E6}, //8969 #CJK UNIFIED IDEOGRAPH + {0xB7B4, 0x53CD}, //8970 #CJK UNIFIED IDEOGRAPH + {0xB7B5, 0x8FD4}, //8971 #CJK UNIFIED IDEOGRAPH + {0xB7B6, 0x8303}, //8972 #CJK UNIFIED IDEOGRAPH + {0xB7B7, 0x8D29}, //8973 #CJK UNIFIED IDEOGRAPH + {0xB7B8, 0x72AF}, //8974 #CJK UNIFIED IDEOGRAPH + {0xB7B9, 0x996D}, //8975 #CJK UNIFIED IDEOGRAPH + {0xB7BA, 0x6CDB}, //8976 #CJK UNIFIED IDEOGRAPH + {0xB7BB, 0x574A}, //8977 #CJK UNIFIED IDEOGRAPH + {0xB7BC, 0x82B3}, //8978 #CJK UNIFIED IDEOGRAPH + {0xB7BD, 0x65B9}, //8979 #CJK UNIFIED IDEOGRAPH + {0xB7BE, 0x80AA}, //8980 #CJK UNIFIED IDEOGRAPH + {0xB7BF, 0x623F}, //8981 #CJK UNIFIED IDEOGRAPH + {0xB7C0, 0x9632}, //8982 #CJK UNIFIED IDEOGRAPH + {0xB7C1, 0x59A8}, //8983 #CJK UNIFIED IDEOGRAPH + {0xB7C2, 0x4EFF}, //8984 #CJK UNIFIED IDEOGRAPH + {0xB7C3, 0x8BBF}, //8985 #CJK UNIFIED IDEOGRAPH + {0xB7C4, 0x7EBA}, //8986 #CJK UNIFIED IDEOGRAPH + {0xB7C5, 0x653E}, //8987 #CJK UNIFIED IDEOGRAPH + {0xB7C6, 0x83F2}, //8988 #CJK UNIFIED IDEOGRAPH + {0xB7C7, 0x975E}, //8989 #CJK UNIFIED IDEOGRAPH + {0xB7C8, 0x5561}, //8990 #CJK UNIFIED IDEOGRAPH + {0xB7C9, 0x98DE}, //8991 #CJK UNIFIED IDEOGRAPH + {0xB7CA, 0x80A5}, //8992 #CJK UNIFIED IDEOGRAPH + {0xB7CB, 0x532A}, //8993 #CJK UNIFIED IDEOGRAPH + {0xB7CC, 0x8BFD}, //8994 #CJK UNIFIED IDEOGRAPH + {0xB7CD, 0x5420}, //8995 #CJK UNIFIED IDEOGRAPH + {0xB7CE, 0x80BA}, //8996 #CJK UNIFIED IDEOGRAPH + {0xB7CF, 0x5E9F}, //8997 #CJK UNIFIED IDEOGRAPH + {0xB7D0, 0x6CB8}, //8998 #CJK UNIFIED IDEOGRAPH + {0xB7D1, 0x8D39}, //8999 #CJK UNIFIED IDEOGRAPH + {0xB7D2, 0x82AC}, //9000 #CJK UNIFIED IDEOGRAPH + {0xB7D3, 0x915A}, //9001 #CJK UNIFIED IDEOGRAPH + {0xB7D4, 0x5429}, //9002 #CJK UNIFIED IDEOGRAPH + {0xB7D5, 0x6C1B}, //9003 #CJK UNIFIED IDEOGRAPH + {0xB7D6, 0x5206}, //9004 #CJK UNIFIED IDEOGRAPH + {0xB7D7, 0x7EB7}, //9005 #CJK UNIFIED IDEOGRAPH + {0xB7D8, 0x575F}, //9006 #CJK UNIFIED IDEOGRAPH + {0xB7D9, 0x711A}, //9007 #CJK UNIFIED IDEOGRAPH + {0xB7DA, 0x6C7E}, //9008 #CJK UNIFIED IDEOGRAPH + {0xB7DB, 0x7C89}, //9009 #CJK UNIFIED IDEOGRAPH + {0xB7DC, 0x594B}, //9010 #CJK UNIFIED IDEOGRAPH + {0xB7DD, 0x4EFD}, //9011 #CJK UNIFIED IDEOGRAPH + {0xB7DE, 0x5FFF}, //9012 #CJK UNIFIED IDEOGRAPH + {0xB7DF, 0x6124}, //9013 #CJK UNIFIED IDEOGRAPH + {0xB7E0, 0x7CAA}, //9014 #CJK UNIFIED IDEOGRAPH + {0xB7E1, 0x4E30}, //9015 #CJK UNIFIED IDEOGRAPH + {0xB7E2, 0x5C01}, //9016 #CJK UNIFIED IDEOGRAPH + {0xB7E3, 0x67AB}, //9017 #CJK UNIFIED IDEOGRAPH + {0xB7E4, 0x8702}, //9018 #CJK UNIFIED IDEOGRAPH + {0xB7E5, 0x5CF0}, //9019 #CJK UNIFIED IDEOGRAPH + {0xB7E6, 0x950B}, //9020 #CJK UNIFIED IDEOGRAPH + {0xB7E7, 0x98CE}, //9021 #CJK UNIFIED IDEOGRAPH + {0xB7E8, 0x75AF}, //9022 #CJK UNIFIED IDEOGRAPH + {0xB7E9, 0x70FD}, //9023 #CJK UNIFIED IDEOGRAPH + {0xB7EA, 0x9022}, //9024 #CJK UNIFIED IDEOGRAPH + {0xB7EB, 0x51AF}, //9025 #CJK UNIFIED IDEOGRAPH + {0xB7EC, 0x7F1D}, //9026 #CJK UNIFIED IDEOGRAPH + {0xB7ED, 0x8BBD}, //9027 #CJK UNIFIED IDEOGRAPH + {0xB7EE, 0x5949}, //9028 #CJK UNIFIED IDEOGRAPH + {0xB7EF, 0x51E4}, //9029 #CJK UNIFIED IDEOGRAPH + {0xB7F0, 0x4F5B}, //9030 #CJK UNIFIED IDEOGRAPH + {0xB7F1, 0x5426}, //9031 #CJK UNIFIED IDEOGRAPH + {0xB7F2, 0x592B}, //9032 #CJK UNIFIED IDEOGRAPH + {0xB7F3, 0x6577}, //9033 #CJK UNIFIED IDEOGRAPH + {0xB7F4, 0x80A4}, //9034 #CJK UNIFIED IDEOGRAPH + {0xB7F5, 0x5B75}, //9035 #CJK UNIFIED IDEOGRAPH + {0xB7F6, 0x6276}, //9036 #CJK UNIFIED IDEOGRAPH + {0xB7F7, 0x62C2}, //9037 #CJK UNIFIED IDEOGRAPH + {0xB7F8, 0x8F90}, //9038 #CJK UNIFIED IDEOGRAPH + {0xB7F9, 0x5E45}, //9039 #CJK UNIFIED IDEOGRAPH + {0xB7FA, 0x6C1F}, //9040 #CJK UNIFIED IDEOGRAPH + {0xB7FB, 0x7B26}, //9041 #CJK UNIFIED IDEOGRAPH + {0xB7FC, 0x4F0F}, //9042 #CJK UNIFIED IDEOGRAPH + {0xB7FD, 0x4FD8}, //9043 #CJK UNIFIED IDEOGRAPH + {0xB7FE, 0x670D}, //9044 #CJK UNIFIED IDEOGRAPH + {0xB840, 0x7AA3}, //9045 #CJK UNIFIED IDEOGRAPH + {0xB841, 0x7AA4}, //9046 #CJK UNIFIED IDEOGRAPH + {0xB842, 0x7AA7}, //9047 #CJK UNIFIED IDEOGRAPH + {0xB843, 0x7AA9}, //9048 #CJK UNIFIED IDEOGRAPH + {0xB844, 0x7AAA}, //9049 #CJK UNIFIED IDEOGRAPH + {0xB845, 0x7AAB}, //9050 #CJK UNIFIED IDEOGRAPH + {0xB846, 0x7AAE}, //9051 #CJK UNIFIED IDEOGRAPH + {0xB847, 0x7AAF}, //9052 #CJK UNIFIED IDEOGRAPH + {0xB848, 0x7AB0}, //9053 #CJK UNIFIED IDEOGRAPH + {0xB849, 0x7AB1}, //9054 #CJK UNIFIED IDEOGRAPH + {0xB84A, 0x7AB2}, //9055 #CJK UNIFIED IDEOGRAPH + {0xB84B, 0x7AB4}, //9056 #CJK UNIFIED IDEOGRAPH + {0xB84C, 0x7AB5}, //9057 #CJK UNIFIED IDEOGRAPH + {0xB84D, 0x7AB6}, //9058 #CJK UNIFIED IDEOGRAPH + {0xB84E, 0x7AB7}, //9059 #CJK UNIFIED IDEOGRAPH + {0xB84F, 0x7AB8}, //9060 #CJK UNIFIED IDEOGRAPH + {0xB850, 0x7AB9}, //9061 #CJK UNIFIED IDEOGRAPH + {0xB851, 0x7ABA}, //9062 #CJK UNIFIED IDEOGRAPH + {0xB852, 0x7ABB}, //9063 #CJK UNIFIED IDEOGRAPH + {0xB853, 0x7ABC}, //9064 #CJK UNIFIED IDEOGRAPH + {0xB854, 0x7ABD}, //9065 #CJK UNIFIED IDEOGRAPH + {0xB855, 0x7ABE}, //9066 #CJK UNIFIED IDEOGRAPH + {0xB856, 0x7AC0}, //9067 #CJK UNIFIED IDEOGRAPH + {0xB857, 0x7AC1}, //9068 #CJK UNIFIED IDEOGRAPH + {0xB858, 0x7AC2}, //9069 #CJK UNIFIED IDEOGRAPH + {0xB859, 0x7AC3}, //9070 #CJK UNIFIED IDEOGRAPH + {0xB85A, 0x7AC4}, //9071 #CJK UNIFIED IDEOGRAPH + {0xB85B, 0x7AC5}, //9072 #CJK UNIFIED IDEOGRAPH + {0xB85C, 0x7AC6}, //9073 #CJK UNIFIED IDEOGRAPH + {0xB85D, 0x7AC7}, //9074 #CJK UNIFIED IDEOGRAPH + {0xB85E, 0x7AC8}, //9075 #CJK UNIFIED IDEOGRAPH + {0xB85F, 0x7AC9}, //9076 #CJK UNIFIED IDEOGRAPH + {0xB860, 0x7ACA}, //9077 #CJK UNIFIED IDEOGRAPH + {0xB861, 0x7ACC}, //9078 #CJK UNIFIED IDEOGRAPH + {0xB862, 0x7ACD}, //9079 #CJK UNIFIED IDEOGRAPH + {0xB863, 0x7ACE}, //9080 #CJK UNIFIED IDEOGRAPH + {0xB864, 0x7ACF}, //9081 #CJK UNIFIED IDEOGRAPH + {0xB865, 0x7AD0}, //9082 #CJK UNIFIED IDEOGRAPH + {0xB866, 0x7AD1}, //9083 #CJK UNIFIED IDEOGRAPH + {0xB867, 0x7AD2}, //9084 #CJK UNIFIED IDEOGRAPH + {0xB868, 0x7AD3}, //9085 #CJK UNIFIED IDEOGRAPH + {0xB869, 0x7AD4}, //9086 #CJK UNIFIED IDEOGRAPH + {0xB86A, 0x7AD5}, //9087 #CJK UNIFIED IDEOGRAPH + {0xB86B, 0x7AD7}, //9088 #CJK UNIFIED IDEOGRAPH + {0xB86C, 0x7AD8}, //9089 #CJK UNIFIED IDEOGRAPH + {0xB86D, 0x7ADA}, //9090 #CJK UNIFIED IDEOGRAPH + {0xB86E, 0x7ADB}, //9091 #CJK UNIFIED IDEOGRAPH + {0xB86F, 0x7ADC}, //9092 #CJK UNIFIED IDEOGRAPH + {0xB870, 0x7ADD}, //9093 #CJK UNIFIED IDEOGRAPH + {0xB871, 0x7AE1}, //9094 #CJK UNIFIED IDEOGRAPH + {0xB872, 0x7AE2}, //9095 #CJK UNIFIED IDEOGRAPH + {0xB873, 0x7AE4}, //9096 #CJK UNIFIED IDEOGRAPH + {0xB874, 0x7AE7}, //9097 #CJK UNIFIED IDEOGRAPH + {0xB875, 0x7AE8}, //9098 #CJK UNIFIED IDEOGRAPH + {0xB876, 0x7AE9}, //9099 #CJK UNIFIED IDEOGRAPH + {0xB877, 0x7AEA}, //9100 #CJK UNIFIED IDEOGRAPH + {0xB878, 0x7AEB}, //9101 #CJK UNIFIED IDEOGRAPH + {0xB879, 0x7AEC}, //9102 #CJK UNIFIED IDEOGRAPH + {0xB87A, 0x7AEE}, //9103 #CJK UNIFIED IDEOGRAPH + {0xB87B, 0x7AF0}, //9104 #CJK UNIFIED IDEOGRAPH + {0xB87C, 0x7AF1}, //9105 #CJK UNIFIED IDEOGRAPH + {0xB87D, 0x7AF2}, //9106 #CJK UNIFIED IDEOGRAPH + {0xB87E, 0x7AF3}, //9107 #CJK UNIFIED IDEOGRAPH + {0xB880, 0x7AF4}, //9108 #CJK UNIFIED IDEOGRAPH + {0xB881, 0x7AF5}, //9109 #CJK UNIFIED IDEOGRAPH + {0xB882, 0x7AF6}, //9110 #CJK UNIFIED IDEOGRAPH + {0xB883, 0x7AF7}, //9111 #CJK UNIFIED IDEOGRAPH + {0xB884, 0x7AF8}, //9112 #CJK UNIFIED IDEOGRAPH + {0xB885, 0x7AFB}, //9113 #CJK UNIFIED IDEOGRAPH + {0xB886, 0x7AFC}, //9114 #CJK UNIFIED IDEOGRAPH + {0xB887, 0x7AFE}, //9115 #CJK UNIFIED IDEOGRAPH + {0xB888, 0x7B00}, //9116 #CJK UNIFIED IDEOGRAPH + {0xB889, 0x7B01}, //9117 #CJK UNIFIED IDEOGRAPH + {0xB88A, 0x7B02}, //9118 #CJK UNIFIED IDEOGRAPH + {0xB88B, 0x7B05}, //9119 #CJK UNIFIED IDEOGRAPH + {0xB88C, 0x7B07}, //9120 #CJK UNIFIED IDEOGRAPH + {0xB88D, 0x7B09}, //9121 #CJK UNIFIED IDEOGRAPH + {0xB88E, 0x7B0C}, //9122 #CJK UNIFIED IDEOGRAPH + {0xB88F, 0x7B0D}, //9123 #CJK UNIFIED IDEOGRAPH + {0xB890, 0x7B0E}, //9124 #CJK UNIFIED IDEOGRAPH + {0xB891, 0x7B10}, //9125 #CJK UNIFIED IDEOGRAPH + {0xB892, 0x7B12}, //9126 #CJK UNIFIED IDEOGRAPH + {0xB893, 0x7B13}, //9127 #CJK UNIFIED IDEOGRAPH + {0xB894, 0x7B16}, //9128 #CJK UNIFIED IDEOGRAPH + {0xB895, 0x7B17}, //9129 #CJK UNIFIED IDEOGRAPH + {0xB896, 0x7B18}, //9130 #CJK UNIFIED IDEOGRAPH + {0xB897, 0x7B1A}, //9131 #CJK UNIFIED IDEOGRAPH + {0xB898, 0x7B1C}, //9132 #CJK UNIFIED IDEOGRAPH + {0xB899, 0x7B1D}, //9133 #CJK UNIFIED IDEOGRAPH + {0xB89A, 0x7B1F}, //9134 #CJK UNIFIED IDEOGRAPH + {0xB89B, 0x7B21}, //9135 #CJK UNIFIED IDEOGRAPH + {0xB89C, 0x7B22}, //9136 #CJK UNIFIED IDEOGRAPH + {0xB89D, 0x7B23}, //9137 #CJK UNIFIED IDEOGRAPH + {0xB89E, 0x7B27}, //9138 #CJK UNIFIED IDEOGRAPH + {0xB89F, 0x7B29}, //9139 #CJK UNIFIED IDEOGRAPH + {0xB8A0, 0x7B2D}, //9140 #CJK UNIFIED IDEOGRAPH + {0xB8A1, 0x6D6E}, //9141 #CJK UNIFIED IDEOGRAPH + {0xB8A2, 0x6DAA}, //9142 #CJK UNIFIED IDEOGRAPH + {0xB8A3, 0x798F}, //9143 #CJK UNIFIED IDEOGRAPH + {0xB8A4, 0x88B1}, //9144 #CJK UNIFIED IDEOGRAPH + {0xB8A5, 0x5F17}, //9145 #CJK UNIFIED IDEOGRAPH + {0xB8A6, 0x752B}, //9146 #CJK UNIFIED IDEOGRAPH + {0xB8A7, 0x629A}, //9147 #CJK UNIFIED IDEOGRAPH + {0xB8A8, 0x8F85}, //9148 #CJK UNIFIED IDEOGRAPH + {0xB8A9, 0x4FEF}, //9149 #CJK UNIFIED IDEOGRAPH + {0xB8AA, 0x91DC}, //9150 #CJK UNIFIED IDEOGRAPH + {0xB8AB, 0x65A7}, //9151 #CJK UNIFIED IDEOGRAPH + {0xB8AC, 0x812F}, //9152 #CJK UNIFIED IDEOGRAPH + {0xB8AD, 0x8151}, //9153 #CJK UNIFIED IDEOGRAPH + {0xB8AE, 0x5E9C}, //9154 #CJK UNIFIED IDEOGRAPH + {0xB8AF, 0x8150}, //9155 #CJK UNIFIED IDEOGRAPH + {0xB8B0, 0x8D74}, //9156 #CJK UNIFIED IDEOGRAPH + {0xB8B1, 0x526F}, //9157 #CJK UNIFIED IDEOGRAPH + {0xB8B2, 0x8986}, //9158 #CJK UNIFIED IDEOGRAPH + {0xB8B3, 0x8D4B}, //9159 #CJK UNIFIED IDEOGRAPH + {0xB8B4, 0x590D}, //9160 #CJK UNIFIED IDEOGRAPH + {0xB8B5, 0x5085}, //9161 #CJK UNIFIED IDEOGRAPH + {0xB8B6, 0x4ED8}, //9162 #CJK UNIFIED IDEOGRAPH + {0xB8B7, 0x961C}, //9163 #CJK UNIFIED IDEOGRAPH + {0xB8B8, 0x7236}, //9164 #CJK UNIFIED IDEOGRAPH + {0xB8B9, 0x8179}, //9165 #CJK UNIFIED IDEOGRAPH + {0xB8BA, 0x8D1F}, //9166 #CJK UNIFIED IDEOGRAPH + {0xB8BB, 0x5BCC}, //9167 #CJK UNIFIED IDEOGRAPH + {0xB8BC, 0x8BA3}, //9168 #CJK UNIFIED IDEOGRAPH + {0xB8BD, 0x9644}, //9169 #CJK UNIFIED IDEOGRAPH + {0xB8BE, 0x5987}, //9170 #CJK UNIFIED IDEOGRAPH + {0xB8BF, 0x7F1A}, //9171 #CJK UNIFIED IDEOGRAPH + {0xB8C0, 0x5490}, //9172 #CJK UNIFIED IDEOGRAPH + {0xB8C1, 0x5676}, //9173 #CJK UNIFIED IDEOGRAPH + {0xB8C2, 0x560E}, //9174 #CJK UNIFIED IDEOGRAPH + {0xB8C3, 0x8BE5}, //9175 #CJK UNIFIED IDEOGRAPH + {0xB8C4, 0x6539}, //9176 #CJK UNIFIED IDEOGRAPH + {0xB8C5, 0x6982}, //9177 #CJK UNIFIED IDEOGRAPH + {0xB8C6, 0x9499}, //9178 #CJK UNIFIED IDEOGRAPH + {0xB8C7, 0x76D6}, //9179 #CJK UNIFIED IDEOGRAPH + {0xB8C8, 0x6E89}, //9180 #CJK UNIFIED IDEOGRAPH + {0xB8C9, 0x5E72}, //9181 #CJK UNIFIED IDEOGRAPH + {0xB8CA, 0x7518}, //9182 #CJK UNIFIED IDEOGRAPH + {0xB8CB, 0x6746}, //9183 #CJK UNIFIED IDEOGRAPH + {0xB8CC, 0x67D1}, //9184 #CJK UNIFIED IDEOGRAPH + {0xB8CD, 0x7AFF}, //9185 #CJK UNIFIED IDEOGRAPH + {0xB8CE, 0x809D}, //9186 #CJK UNIFIED IDEOGRAPH + {0xB8CF, 0x8D76}, //9187 #CJK UNIFIED IDEOGRAPH + {0xB8D0, 0x611F}, //9188 #CJK UNIFIED IDEOGRAPH + {0xB8D1, 0x79C6}, //9189 #CJK UNIFIED IDEOGRAPH + {0xB8D2, 0x6562}, //9190 #CJK UNIFIED IDEOGRAPH + {0xB8D3, 0x8D63}, //9191 #CJK UNIFIED IDEOGRAPH + {0xB8D4, 0x5188}, //9192 #CJK UNIFIED IDEOGRAPH + {0xB8D5, 0x521A}, //9193 #CJK UNIFIED IDEOGRAPH + {0xB8D6, 0x94A2}, //9194 #CJK UNIFIED IDEOGRAPH + {0xB8D7, 0x7F38}, //9195 #CJK UNIFIED IDEOGRAPH + {0xB8D8, 0x809B}, //9196 #CJK UNIFIED IDEOGRAPH + {0xB8D9, 0x7EB2}, //9197 #CJK UNIFIED IDEOGRAPH + {0xB8DA, 0x5C97}, //9198 #CJK UNIFIED IDEOGRAPH + {0xB8DB, 0x6E2F}, //9199 #CJK UNIFIED IDEOGRAPH + {0xB8DC, 0x6760}, //9200 #CJK UNIFIED IDEOGRAPH + {0xB8DD, 0x7BD9}, //9201 #CJK UNIFIED IDEOGRAPH + {0xB8DE, 0x768B}, //9202 #CJK UNIFIED IDEOGRAPH + {0xB8DF, 0x9AD8}, //9203 #CJK UNIFIED IDEOGRAPH + {0xB8E0, 0x818F}, //9204 #CJK UNIFIED IDEOGRAPH + {0xB8E1, 0x7F94}, //9205 #CJK UNIFIED IDEOGRAPH + {0xB8E2, 0x7CD5}, //9206 #CJK UNIFIED IDEOGRAPH + {0xB8E3, 0x641E}, //9207 #CJK UNIFIED IDEOGRAPH + {0xB8E4, 0x9550}, //9208 #CJK UNIFIED IDEOGRAPH + {0xB8E5, 0x7A3F}, //9209 #CJK UNIFIED IDEOGRAPH + {0xB8E6, 0x544A}, //9210 #CJK UNIFIED IDEOGRAPH + {0xB8E7, 0x54E5}, //9211 #CJK UNIFIED IDEOGRAPH + {0xB8E8, 0x6B4C}, //9212 #CJK UNIFIED IDEOGRAPH + {0xB8E9, 0x6401}, //9213 #CJK UNIFIED IDEOGRAPH + {0xB8EA, 0x6208}, //9214 #CJK UNIFIED IDEOGRAPH + {0xB8EB, 0x9E3D}, //9215 #CJK UNIFIED IDEOGRAPH + {0xB8EC, 0x80F3}, //9216 #CJK UNIFIED IDEOGRAPH + {0xB8ED, 0x7599}, //9217 #CJK UNIFIED IDEOGRAPH + {0xB8EE, 0x5272}, //9218 #CJK UNIFIED IDEOGRAPH + {0xB8EF, 0x9769}, //9219 #CJK UNIFIED IDEOGRAPH + {0xB8F0, 0x845B}, //9220 #CJK UNIFIED IDEOGRAPH + {0xB8F1, 0x683C}, //9221 #CJK UNIFIED IDEOGRAPH + {0xB8F2, 0x86E4}, //9222 #CJK UNIFIED IDEOGRAPH + {0xB8F3, 0x9601}, //9223 #CJK UNIFIED IDEOGRAPH + {0xB8F4, 0x9694}, //9224 #CJK UNIFIED IDEOGRAPH + {0xB8F5, 0x94EC}, //9225 #CJK UNIFIED IDEOGRAPH + {0xB8F6, 0x4E2A}, //9226 #CJK UNIFIED IDEOGRAPH + {0xB8F7, 0x5404}, //9227 #CJK UNIFIED IDEOGRAPH + {0xB8F8, 0x7ED9}, //9228 #CJK UNIFIED IDEOGRAPH + {0xB8F9, 0x6839}, //9229 #CJK UNIFIED IDEOGRAPH + {0xB8FA, 0x8DDF}, //9230 #CJK UNIFIED IDEOGRAPH + {0xB8FB, 0x8015}, //9231 #CJK UNIFIED IDEOGRAPH + {0xB8FC, 0x66F4}, //9232 #CJK UNIFIED IDEOGRAPH + {0xB8FD, 0x5E9A}, //9233 #CJK UNIFIED IDEOGRAPH + {0xB8FE, 0x7FB9}, //9234 #CJK UNIFIED IDEOGRAPH + {0xB940, 0x7B2F}, //9235 #CJK UNIFIED IDEOGRAPH + {0xB941, 0x7B30}, //9236 #CJK UNIFIED IDEOGRAPH + {0xB942, 0x7B32}, //9237 #CJK UNIFIED IDEOGRAPH + {0xB943, 0x7B34}, //9238 #CJK UNIFIED IDEOGRAPH + {0xB944, 0x7B35}, //9239 #CJK UNIFIED IDEOGRAPH + {0xB945, 0x7B36}, //9240 #CJK UNIFIED IDEOGRAPH + {0xB946, 0x7B37}, //9241 #CJK UNIFIED IDEOGRAPH + {0xB947, 0x7B39}, //9242 #CJK UNIFIED IDEOGRAPH + {0xB948, 0x7B3B}, //9243 #CJK UNIFIED IDEOGRAPH + {0xB949, 0x7B3D}, //9244 #CJK UNIFIED IDEOGRAPH + {0xB94A, 0x7B3F}, //9245 #CJK UNIFIED IDEOGRAPH + {0xB94B, 0x7B40}, //9246 #CJK UNIFIED IDEOGRAPH + {0xB94C, 0x7B41}, //9247 #CJK UNIFIED IDEOGRAPH + {0xB94D, 0x7B42}, //9248 #CJK UNIFIED IDEOGRAPH + {0xB94E, 0x7B43}, //9249 #CJK UNIFIED IDEOGRAPH + {0xB94F, 0x7B44}, //9250 #CJK UNIFIED IDEOGRAPH + {0xB950, 0x7B46}, //9251 #CJK UNIFIED IDEOGRAPH + {0xB951, 0x7B48}, //9252 #CJK UNIFIED IDEOGRAPH + {0xB952, 0x7B4A}, //9253 #CJK UNIFIED IDEOGRAPH + {0xB953, 0x7B4D}, //9254 #CJK UNIFIED IDEOGRAPH + {0xB954, 0x7B4E}, //9255 #CJK UNIFIED IDEOGRAPH + {0xB955, 0x7B53}, //9256 #CJK UNIFIED IDEOGRAPH + {0xB956, 0x7B55}, //9257 #CJK UNIFIED IDEOGRAPH + {0xB957, 0x7B57}, //9258 #CJK UNIFIED IDEOGRAPH + {0xB958, 0x7B59}, //9259 #CJK UNIFIED IDEOGRAPH + {0xB959, 0x7B5C}, //9260 #CJK UNIFIED IDEOGRAPH + {0xB95A, 0x7B5E}, //9261 #CJK UNIFIED IDEOGRAPH + {0xB95B, 0x7B5F}, //9262 #CJK UNIFIED IDEOGRAPH + {0xB95C, 0x7B61}, //9263 #CJK UNIFIED IDEOGRAPH + {0xB95D, 0x7B63}, //9264 #CJK UNIFIED IDEOGRAPH + {0xB95E, 0x7B64}, //9265 #CJK UNIFIED IDEOGRAPH + {0xB95F, 0x7B65}, //9266 #CJK UNIFIED IDEOGRAPH + {0xB960, 0x7B66}, //9267 #CJK UNIFIED IDEOGRAPH + {0xB961, 0x7B67}, //9268 #CJK UNIFIED IDEOGRAPH + {0xB962, 0x7B68}, //9269 #CJK UNIFIED IDEOGRAPH + {0xB963, 0x7B69}, //9270 #CJK UNIFIED IDEOGRAPH + {0xB964, 0x7B6A}, //9271 #CJK UNIFIED IDEOGRAPH + {0xB965, 0x7B6B}, //9272 #CJK UNIFIED IDEOGRAPH + {0xB966, 0x7B6C}, //9273 #CJK UNIFIED IDEOGRAPH + {0xB967, 0x7B6D}, //9274 #CJK UNIFIED IDEOGRAPH + {0xB968, 0x7B6F}, //9275 #CJK UNIFIED IDEOGRAPH + {0xB969, 0x7B70}, //9276 #CJK UNIFIED IDEOGRAPH + {0xB96A, 0x7B73}, //9277 #CJK UNIFIED IDEOGRAPH + {0xB96B, 0x7B74}, //9278 #CJK UNIFIED IDEOGRAPH + {0xB96C, 0x7B76}, //9279 #CJK UNIFIED IDEOGRAPH + {0xB96D, 0x7B78}, //9280 #CJK UNIFIED IDEOGRAPH + {0xB96E, 0x7B7A}, //9281 #CJK UNIFIED IDEOGRAPH + {0xB96F, 0x7B7C}, //9282 #CJK UNIFIED IDEOGRAPH + {0xB970, 0x7B7D}, //9283 #CJK UNIFIED IDEOGRAPH + {0xB971, 0x7B7F}, //9284 #CJK UNIFIED IDEOGRAPH + {0xB972, 0x7B81}, //9285 #CJK UNIFIED IDEOGRAPH + {0xB973, 0x7B82}, //9286 #CJK UNIFIED IDEOGRAPH + {0xB974, 0x7B83}, //9287 #CJK UNIFIED IDEOGRAPH + {0xB975, 0x7B84}, //9288 #CJK UNIFIED IDEOGRAPH + {0xB976, 0x7B86}, //9289 #CJK UNIFIED IDEOGRAPH + {0xB977, 0x7B87}, //9290 #CJK UNIFIED IDEOGRAPH + {0xB978, 0x7B88}, //9291 #CJK UNIFIED IDEOGRAPH + {0xB979, 0x7B89}, //9292 #CJK UNIFIED IDEOGRAPH + {0xB97A, 0x7B8A}, //9293 #CJK UNIFIED IDEOGRAPH + {0xB97B, 0x7B8B}, //9294 #CJK UNIFIED IDEOGRAPH + {0xB97C, 0x7B8C}, //9295 #CJK UNIFIED IDEOGRAPH + {0xB97D, 0x7B8E}, //9296 #CJK UNIFIED IDEOGRAPH + {0xB97E, 0x7B8F}, //9297 #CJK UNIFIED IDEOGRAPH + {0xB980, 0x7B91}, //9298 #CJK UNIFIED IDEOGRAPH + {0xB981, 0x7B92}, //9299 #CJK UNIFIED IDEOGRAPH + {0xB982, 0x7B93}, //9300 #CJK UNIFIED IDEOGRAPH + {0xB983, 0x7B96}, //9301 #CJK UNIFIED IDEOGRAPH + {0xB984, 0x7B98}, //9302 #CJK UNIFIED IDEOGRAPH + {0xB985, 0x7B99}, //9303 #CJK UNIFIED IDEOGRAPH + {0xB986, 0x7B9A}, //9304 #CJK UNIFIED IDEOGRAPH + {0xB987, 0x7B9B}, //9305 #CJK UNIFIED IDEOGRAPH + {0xB988, 0x7B9E}, //9306 #CJK UNIFIED IDEOGRAPH + {0xB989, 0x7B9F}, //9307 #CJK UNIFIED IDEOGRAPH + {0xB98A, 0x7BA0}, //9308 #CJK UNIFIED IDEOGRAPH + {0xB98B, 0x7BA3}, //9309 #CJK UNIFIED IDEOGRAPH + {0xB98C, 0x7BA4}, //9310 #CJK UNIFIED IDEOGRAPH + {0xB98D, 0x7BA5}, //9311 #CJK UNIFIED IDEOGRAPH + {0xB98E, 0x7BAE}, //9312 #CJK UNIFIED IDEOGRAPH + {0xB98F, 0x7BAF}, //9313 #CJK UNIFIED IDEOGRAPH + {0xB990, 0x7BB0}, //9314 #CJK UNIFIED IDEOGRAPH + {0xB991, 0x7BB2}, //9315 #CJK UNIFIED IDEOGRAPH + {0xB992, 0x7BB3}, //9316 #CJK UNIFIED IDEOGRAPH + {0xB993, 0x7BB5}, //9317 #CJK UNIFIED IDEOGRAPH + {0xB994, 0x7BB6}, //9318 #CJK UNIFIED IDEOGRAPH + {0xB995, 0x7BB7}, //9319 #CJK UNIFIED IDEOGRAPH + {0xB996, 0x7BB9}, //9320 #CJK UNIFIED IDEOGRAPH + {0xB997, 0x7BBA}, //9321 #CJK UNIFIED IDEOGRAPH + {0xB998, 0x7BBB}, //9322 #CJK UNIFIED IDEOGRAPH + {0xB999, 0x7BBC}, //9323 #CJK UNIFIED IDEOGRAPH + {0xB99A, 0x7BBD}, //9324 #CJK UNIFIED IDEOGRAPH + {0xB99B, 0x7BBE}, //9325 #CJK UNIFIED IDEOGRAPH + {0xB99C, 0x7BBF}, //9326 #CJK UNIFIED IDEOGRAPH + {0xB99D, 0x7BC0}, //9327 #CJK UNIFIED IDEOGRAPH + {0xB99E, 0x7BC2}, //9328 #CJK UNIFIED IDEOGRAPH + {0xB99F, 0x7BC3}, //9329 #CJK UNIFIED IDEOGRAPH + {0xB9A0, 0x7BC4}, //9330 #CJK UNIFIED IDEOGRAPH + {0xB9A1, 0x57C2}, //9331 #CJK UNIFIED IDEOGRAPH + {0xB9A2, 0x803F}, //9332 #CJK UNIFIED IDEOGRAPH + {0xB9A3, 0x6897}, //9333 #CJK UNIFIED IDEOGRAPH + {0xB9A4, 0x5DE5}, //9334 #CJK UNIFIED IDEOGRAPH + {0xB9A5, 0x653B}, //9335 #CJK UNIFIED IDEOGRAPH + {0xB9A6, 0x529F}, //9336 #CJK UNIFIED IDEOGRAPH + {0xB9A7, 0x606D}, //9337 #CJK UNIFIED IDEOGRAPH + {0xB9A8, 0x9F9A}, //9338 #CJK UNIFIED IDEOGRAPH + {0xB9A9, 0x4F9B}, //9339 #CJK UNIFIED IDEOGRAPH + {0xB9AA, 0x8EAC}, //9340 #CJK UNIFIED IDEOGRAPH + {0xB9AB, 0x516C}, //9341 #CJK UNIFIED IDEOGRAPH + {0xB9AC, 0x5BAB}, //9342 #CJK UNIFIED IDEOGRAPH + {0xB9AD, 0x5F13}, //9343 #CJK UNIFIED IDEOGRAPH + {0xB9AE, 0x5DE9}, //9344 #CJK UNIFIED IDEOGRAPH + {0xB9AF, 0x6C5E}, //9345 #CJK UNIFIED IDEOGRAPH + {0xB9B0, 0x62F1}, //9346 #CJK UNIFIED IDEOGRAPH + {0xB9B1, 0x8D21}, //9347 #CJK UNIFIED IDEOGRAPH + {0xB9B2, 0x5171}, //9348 #CJK UNIFIED IDEOGRAPH + {0xB9B3, 0x94A9}, //9349 #CJK UNIFIED IDEOGRAPH + {0xB9B4, 0x52FE}, //9350 #CJK UNIFIED IDEOGRAPH + {0xB9B5, 0x6C9F}, //9351 #CJK UNIFIED IDEOGRAPH + {0xB9B6, 0x82DF}, //9352 #CJK UNIFIED IDEOGRAPH + {0xB9B7, 0x72D7}, //9353 #CJK UNIFIED IDEOGRAPH + {0xB9B8, 0x57A2}, //9354 #CJK UNIFIED IDEOGRAPH + {0xB9B9, 0x6784}, //9355 #CJK UNIFIED IDEOGRAPH + {0xB9BA, 0x8D2D}, //9356 #CJK UNIFIED IDEOGRAPH + {0xB9BB, 0x591F}, //9357 #CJK UNIFIED IDEOGRAPH + {0xB9BC, 0x8F9C}, //9358 #CJK UNIFIED IDEOGRAPH + {0xB9BD, 0x83C7}, //9359 #CJK UNIFIED IDEOGRAPH + {0xB9BE, 0x5495}, //9360 #CJK UNIFIED IDEOGRAPH + {0xB9BF, 0x7B8D}, //9361 #CJK UNIFIED IDEOGRAPH + {0xB9C0, 0x4F30}, //9362 #CJK UNIFIED IDEOGRAPH + {0xB9C1, 0x6CBD}, //9363 #CJK UNIFIED IDEOGRAPH + {0xB9C2, 0x5B64}, //9364 #CJK UNIFIED IDEOGRAPH + {0xB9C3, 0x59D1}, //9365 #CJK UNIFIED IDEOGRAPH + {0xB9C4, 0x9F13}, //9366 #CJK UNIFIED IDEOGRAPH + {0xB9C5, 0x53E4}, //9367 #CJK UNIFIED IDEOGRAPH + {0xB9C6, 0x86CA}, //9368 #CJK UNIFIED IDEOGRAPH + {0xB9C7, 0x9AA8}, //9369 #CJK UNIFIED IDEOGRAPH + {0xB9C8, 0x8C37}, //9370 #CJK UNIFIED IDEOGRAPH + {0xB9C9, 0x80A1}, //9371 #CJK UNIFIED IDEOGRAPH + {0xB9CA, 0x6545}, //9372 #CJK UNIFIED IDEOGRAPH + {0xB9CB, 0x987E}, //9373 #CJK UNIFIED IDEOGRAPH + {0xB9CC, 0x56FA}, //9374 #CJK UNIFIED IDEOGRAPH + {0xB9CD, 0x96C7}, //9375 #CJK UNIFIED IDEOGRAPH + {0xB9CE, 0x522E}, //9376 #CJK UNIFIED IDEOGRAPH + {0xB9CF, 0x74DC}, //9377 #CJK UNIFIED IDEOGRAPH + {0xB9D0, 0x5250}, //9378 #CJK UNIFIED IDEOGRAPH + {0xB9D1, 0x5BE1}, //9379 #CJK UNIFIED IDEOGRAPH + {0xB9D2, 0x6302}, //9380 #CJK UNIFIED IDEOGRAPH + {0xB9D3, 0x8902}, //9381 #CJK UNIFIED IDEOGRAPH + {0xB9D4, 0x4E56}, //9382 #CJK UNIFIED IDEOGRAPH + {0xB9D5, 0x62D0}, //9383 #CJK UNIFIED IDEOGRAPH + {0xB9D6, 0x602A}, //9384 #CJK UNIFIED IDEOGRAPH + {0xB9D7, 0x68FA}, //9385 #CJK UNIFIED IDEOGRAPH + {0xB9D8, 0x5173}, //9386 #CJK UNIFIED IDEOGRAPH + {0xB9D9, 0x5B98}, //9387 #CJK UNIFIED IDEOGRAPH + {0xB9DA, 0x51A0}, //9388 #CJK UNIFIED IDEOGRAPH + {0xB9DB, 0x89C2}, //9389 #CJK UNIFIED IDEOGRAPH + {0xB9DC, 0x7BA1}, //9390 #CJK UNIFIED IDEOGRAPH + {0xB9DD, 0x9986}, //9391 #CJK UNIFIED IDEOGRAPH + {0xB9DE, 0x7F50}, //9392 #CJK UNIFIED IDEOGRAPH + {0xB9DF, 0x60EF}, //9393 #CJK UNIFIED IDEOGRAPH + {0xB9E0, 0x704C}, //9394 #CJK UNIFIED IDEOGRAPH + {0xB9E1, 0x8D2F}, //9395 #CJK UNIFIED IDEOGRAPH + {0xB9E2, 0x5149}, //9396 #CJK UNIFIED IDEOGRAPH + {0xB9E3, 0x5E7F}, //9397 #CJK UNIFIED IDEOGRAPH + {0xB9E4, 0x901B}, //9398 #CJK UNIFIED IDEOGRAPH + {0xB9E5, 0x7470}, //9399 #CJK UNIFIED IDEOGRAPH + {0xB9E6, 0x89C4}, //9400 #CJK UNIFIED IDEOGRAPH + {0xB9E7, 0x572D}, //9401 #CJK UNIFIED IDEOGRAPH + {0xB9E8, 0x7845}, //9402 #CJK UNIFIED IDEOGRAPH + {0xB9E9, 0x5F52}, //9403 #CJK UNIFIED IDEOGRAPH + {0xB9EA, 0x9F9F}, //9404 #CJK UNIFIED IDEOGRAPH + {0xB9EB, 0x95FA}, //9405 #CJK UNIFIED IDEOGRAPH + {0xB9EC, 0x8F68}, //9406 #CJK UNIFIED IDEOGRAPH + {0xB9ED, 0x9B3C}, //9407 #CJK UNIFIED IDEOGRAPH + {0xB9EE, 0x8BE1}, //9408 #CJK UNIFIED IDEOGRAPH + {0xB9EF, 0x7678}, //9409 #CJK UNIFIED IDEOGRAPH + {0xB9F0, 0x6842}, //9410 #CJK UNIFIED IDEOGRAPH + {0xB9F1, 0x67DC}, //9411 #CJK UNIFIED IDEOGRAPH + {0xB9F2, 0x8DEA}, //9412 #CJK UNIFIED IDEOGRAPH + {0xB9F3, 0x8D35}, //9413 #CJK UNIFIED IDEOGRAPH + {0xB9F4, 0x523D}, //9414 #CJK UNIFIED IDEOGRAPH + {0xB9F5, 0x8F8A}, //9415 #CJK UNIFIED IDEOGRAPH + {0xB9F6, 0x6EDA}, //9416 #CJK UNIFIED IDEOGRAPH + {0xB9F7, 0x68CD}, //9417 #CJK UNIFIED IDEOGRAPH + {0xB9F8, 0x9505}, //9418 #CJK UNIFIED IDEOGRAPH + {0xB9F9, 0x90ED}, //9419 #CJK UNIFIED IDEOGRAPH + {0xB9FA, 0x56FD}, //9420 #CJK UNIFIED IDEOGRAPH + {0xB9FB, 0x679C}, //9421 #CJK UNIFIED IDEOGRAPH + {0xB9FC, 0x88F9}, //9422 #CJK UNIFIED IDEOGRAPH + {0xB9FD, 0x8FC7}, //9423 #CJK UNIFIED IDEOGRAPH + {0xB9FE, 0x54C8}, //9424 #CJK UNIFIED IDEOGRAPH + {0xBA40, 0x7BC5}, //9425 #CJK UNIFIED IDEOGRAPH + {0xBA41, 0x7BC8}, //9426 #CJK UNIFIED IDEOGRAPH + {0xBA42, 0x7BC9}, //9427 #CJK UNIFIED IDEOGRAPH + {0xBA43, 0x7BCA}, //9428 #CJK UNIFIED IDEOGRAPH + {0xBA44, 0x7BCB}, //9429 #CJK UNIFIED IDEOGRAPH + {0xBA45, 0x7BCD}, //9430 #CJK UNIFIED IDEOGRAPH + {0xBA46, 0x7BCE}, //9431 #CJK UNIFIED IDEOGRAPH + {0xBA47, 0x7BCF}, //9432 #CJK UNIFIED IDEOGRAPH + {0xBA48, 0x7BD0}, //9433 #CJK UNIFIED IDEOGRAPH + {0xBA49, 0x7BD2}, //9434 #CJK UNIFIED IDEOGRAPH + {0xBA4A, 0x7BD4}, //9435 #CJK UNIFIED IDEOGRAPH + {0xBA4B, 0x7BD5}, //9436 #CJK UNIFIED IDEOGRAPH + {0xBA4C, 0x7BD6}, //9437 #CJK UNIFIED IDEOGRAPH + {0xBA4D, 0x7BD7}, //9438 #CJK UNIFIED IDEOGRAPH + {0xBA4E, 0x7BD8}, //9439 #CJK UNIFIED IDEOGRAPH + {0xBA4F, 0x7BDB}, //9440 #CJK UNIFIED IDEOGRAPH + {0xBA50, 0x7BDC}, //9441 #CJK UNIFIED IDEOGRAPH + {0xBA51, 0x7BDE}, //9442 #CJK UNIFIED IDEOGRAPH + {0xBA52, 0x7BDF}, //9443 #CJK UNIFIED IDEOGRAPH + {0xBA53, 0x7BE0}, //9444 #CJK UNIFIED IDEOGRAPH + {0xBA54, 0x7BE2}, //9445 #CJK UNIFIED IDEOGRAPH + {0xBA55, 0x7BE3}, //9446 #CJK UNIFIED IDEOGRAPH + {0xBA56, 0x7BE4}, //9447 #CJK UNIFIED IDEOGRAPH + {0xBA57, 0x7BE7}, //9448 #CJK UNIFIED IDEOGRAPH + {0xBA58, 0x7BE8}, //9449 #CJK UNIFIED IDEOGRAPH + {0xBA59, 0x7BE9}, //9450 #CJK UNIFIED IDEOGRAPH + {0xBA5A, 0x7BEB}, //9451 #CJK UNIFIED IDEOGRAPH + {0xBA5B, 0x7BEC}, //9452 #CJK UNIFIED IDEOGRAPH + {0xBA5C, 0x7BED}, //9453 #CJK UNIFIED IDEOGRAPH + {0xBA5D, 0x7BEF}, //9454 #CJK UNIFIED IDEOGRAPH + {0xBA5E, 0x7BF0}, //9455 #CJK UNIFIED IDEOGRAPH + {0xBA5F, 0x7BF2}, //9456 #CJK UNIFIED IDEOGRAPH + {0xBA60, 0x7BF3}, //9457 #CJK UNIFIED IDEOGRAPH + {0xBA61, 0x7BF4}, //9458 #CJK UNIFIED IDEOGRAPH + {0xBA62, 0x7BF5}, //9459 #CJK UNIFIED IDEOGRAPH + {0xBA63, 0x7BF6}, //9460 #CJK UNIFIED IDEOGRAPH + {0xBA64, 0x7BF8}, //9461 #CJK UNIFIED IDEOGRAPH + {0xBA65, 0x7BF9}, //9462 #CJK UNIFIED IDEOGRAPH + {0xBA66, 0x7BFA}, //9463 #CJK UNIFIED IDEOGRAPH + {0xBA67, 0x7BFB}, //9464 #CJK UNIFIED IDEOGRAPH + {0xBA68, 0x7BFD}, //9465 #CJK UNIFIED IDEOGRAPH + {0xBA69, 0x7BFF}, //9466 #CJK UNIFIED IDEOGRAPH + {0xBA6A, 0x7C00}, //9467 #CJK UNIFIED IDEOGRAPH + {0xBA6B, 0x7C01}, //9468 #CJK UNIFIED IDEOGRAPH + {0xBA6C, 0x7C02}, //9469 #CJK UNIFIED IDEOGRAPH + {0xBA6D, 0x7C03}, //9470 #CJK UNIFIED IDEOGRAPH + {0xBA6E, 0x7C04}, //9471 #CJK UNIFIED IDEOGRAPH + {0xBA6F, 0x7C05}, //9472 #CJK UNIFIED IDEOGRAPH + {0xBA70, 0x7C06}, //9473 #CJK UNIFIED IDEOGRAPH + {0xBA71, 0x7C08}, //9474 #CJK UNIFIED IDEOGRAPH + {0xBA72, 0x7C09}, //9475 #CJK UNIFIED IDEOGRAPH + {0xBA73, 0x7C0A}, //9476 #CJK UNIFIED IDEOGRAPH + {0xBA74, 0x7C0D}, //9477 #CJK UNIFIED IDEOGRAPH + {0xBA75, 0x7C0E}, //9478 #CJK UNIFIED IDEOGRAPH + {0xBA76, 0x7C10}, //9479 #CJK UNIFIED IDEOGRAPH + {0xBA77, 0x7C11}, //9480 #CJK UNIFIED IDEOGRAPH + {0xBA78, 0x7C12}, //9481 #CJK UNIFIED IDEOGRAPH + {0xBA79, 0x7C13}, //9482 #CJK UNIFIED IDEOGRAPH + {0xBA7A, 0x7C14}, //9483 #CJK UNIFIED IDEOGRAPH + {0xBA7B, 0x7C15}, //9484 #CJK UNIFIED IDEOGRAPH + {0xBA7C, 0x7C17}, //9485 #CJK UNIFIED IDEOGRAPH + {0xBA7D, 0x7C18}, //9486 #CJK UNIFIED IDEOGRAPH + {0xBA7E, 0x7C19}, //9487 #CJK UNIFIED IDEOGRAPH + {0xBA80, 0x7C1A}, //9488 #CJK UNIFIED IDEOGRAPH + {0xBA81, 0x7C1B}, //9489 #CJK UNIFIED IDEOGRAPH + {0xBA82, 0x7C1C}, //9490 #CJK UNIFIED IDEOGRAPH + {0xBA83, 0x7C1D}, //9491 #CJK UNIFIED IDEOGRAPH + {0xBA84, 0x7C1E}, //9492 #CJK UNIFIED IDEOGRAPH + {0xBA85, 0x7C20}, //9493 #CJK UNIFIED IDEOGRAPH + {0xBA86, 0x7C21}, //9494 #CJK UNIFIED IDEOGRAPH + {0xBA87, 0x7C22}, //9495 #CJK UNIFIED IDEOGRAPH + {0xBA88, 0x7C23}, //9496 #CJK UNIFIED IDEOGRAPH + {0xBA89, 0x7C24}, //9497 #CJK UNIFIED IDEOGRAPH + {0xBA8A, 0x7C25}, //9498 #CJK UNIFIED IDEOGRAPH + {0xBA8B, 0x7C28}, //9499 #CJK UNIFIED IDEOGRAPH + {0xBA8C, 0x7C29}, //9500 #CJK UNIFIED IDEOGRAPH + {0xBA8D, 0x7C2B}, //9501 #CJK UNIFIED IDEOGRAPH + {0xBA8E, 0x7C2C}, //9502 #CJK UNIFIED IDEOGRAPH + {0xBA8F, 0x7C2D}, //9503 #CJK UNIFIED IDEOGRAPH + {0xBA90, 0x7C2E}, //9504 #CJK UNIFIED IDEOGRAPH + {0xBA91, 0x7C2F}, //9505 #CJK UNIFIED IDEOGRAPH + {0xBA92, 0x7C30}, //9506 #CJK UNIFIED IDEOGRAPH + {0xBA93, 0x7C31}, //9507 #CJK UNIFIED IDEOGRAPH + {0xBA94, 0x7C32}, //9508 #CJK UNIFIED IDEOGRAPH + {0xBA95, 0x7C33}, //9509 #CJK UNIFIED IDEOGRAPH + {0xBA96, 0x7C34}, //9510 #CJK UNIFIED IDEOGRAPH + {0xBA97, 0x7C35}, //9511 #CJK UNIFIED IDEOGRAPH + {0xBA98, 0x7C36}, //9512 #CJK UNIFIED IDEOGRAPH + {0xBA99, 0x7C37}, //9513 #CJK UNIFIED IDEOGRAPH + {0xBA9A, 0x7C39}, //9514 #CJK UNIFIED IDEOGRAPH + {0xBA9B, 0x7C3A}, //9515 #CJK UNIFIED IDEOGRAPH + {0xBA9C, 0x7C3B}, //9516 #CJK UNIFIED IDEOGRAPH + {0xBA9D, 0x7C3C}, //9517 #CJK UNIFIED IDEOGRAPH + {0xBA9E, 0x7C3D}, //9518 #CJK UNIFIED IDEOGRAPH + {0xBA9F, 0x7C3E}, //9519 #CJK UNIFIED IDEOGRAPH + {0xBAA0, 0x7C42}, //9520 #CJK UNIFIED IDEOGRAPH + {0xBAA1, 0x9AB8}, //9521 #CJK UNIFIED IDEOGRAPH + {0xBAA2, 0x5B69}, //9522 #CJK UNIFIED IDEOGRAPH + {0xBAA3, 0x6D77}, //9523 #CJK UNIFIED IDEOGRAPH + {0xBAA4, 0x6C26}, //9524 #CJK UNIFIED IDEOGRAPH + {0xBAA5, 0x4EA5}, //9525 #CJK UNIFIED IDEOGRAPH + {0xBAA6, 0x5BB3}, //9526 #CJK UNIFIED IDEOGRAPH + {0xBAA7, 0x9A87}, //9527 #CJK UNIFIED IDEOGRAPH + {0xBAA8, 0x9163}, //9528 #CJK UNIFIED IDEOGRAPH + {0xBAA9, 0x61A8}, //9529 #CJK UNIFIED IDEOGRAPH + {0xBAAA, 0x90AF}, //9530 #CJK UNIFIED IDEOGRAPH + {0xBAAB, 0x97E9}, //9531 #CJK UNIFIED IDEOGRAPH + {0xBAAC, 0x542B}, //9532 #CJK UNIFIED IDEOGRAPH + {0xBAAD, 0x6DB5}, //9533 #CJK UNIFIED IDEOGRAPH + {0xBAAE, 0x5BD2}, //9534 #CJK UNIFIED IDEOGRAPH + {0xBAAF, 0x51FD}, //9535 #CJK UNIFIED IDEOGRAPH + {0xBAB0, 0x558A}, //9536 #CJK UNIFIED IDEOGRAPH + {0xBAB1, 0x7F55}, //9537 #CJK UNIFIED IDEOGRAPH + {0xBAB2, 0x7FF0}, //9538 #CJK UNIFIED IDEOGRAPH + {0xBAB3, 0x64BC}, //9539 #CJK UNIFIED IDEOGRAPH + {0xBAB4, 0x634D}, //9540 #CJK UNIFIED IDEOGRAPH + {0xBAB5, 0x65F1}, //9541 #CJK UNIFIED IDEOGRAPH + {0xBAB6, 0x61BE}, //9542 #CJK UNIFIED IDEOGRAPH + {0xBAB7, 0x608D}, //9543 #CJK UNIFIED IDEOGRAPH + {0xBAB8, 0x710A}, //9544 #CJK UNIFIED IDEOGRAPH + {0xBAB9, 0x6C57}, //9545 #CJK UNIFIED IDEOGRAPH + {0xBABA, 0x6C49}, //9546 #CJK UNIFIED IDEOGRAPH + {0xBABB, 0x592F}, //9547 #CJK UNIFIED IDEOGRAPH + {0xBABC, 0x676D}, //9548 #CJK UNIFIED IDEOGRAPH + {0xBABD, 0x822A}, //9549 #CJK UNIFIED IDEOGRAPH + {0xBABE, 0x58D5}, //9550 #CJK UNIFIED IDEOGRAPH + {0xBABF, 0x568E}, //9551 #CJK UNIFIED IDEOGRAPH + {0xBAC0, 0x8C6A}, //9552 #CJK UNIFIED IDEOGRAPH + {0xBAC1, 0x6BEB}, //9553 #CJK UNIFIED IDEOGRAPH + {0xBAC2, 0x90DD}, //9554 #CJK UNIFIED IDEOGRAPH + {0xBAC3, 0x597D}, //9555 #CJK UNIFIED IDEOGRAPH + {0xBAC4, 0x8017}, //9556 #CJK UNIFIED IDEOGRAPH + {0xBAC5, 0x53F7}, //9557 #CJK UNIFIED IDEOGRAPH + {0xBAC6, 0x6D69}, //9558 #CJK UNIFIED IDEOGRAPH + {0xBAC7, 0x5475}, //9559 #CJK UNIFIED IDEOGRAPH + {0xBAC8, 0x559D}, //9560 #CJK UNIFIED IDEOGRAPH + {0xBAC9, 0x8377}, //9561 #CJK UNIFIED IDEOGRAPH + {0xBACA, 0x83CF}, //9562 #CJK UNIFIED IDEOGRAPH + {0xBACB, 0x6838}, //9563 #CJK UNIFIED IDEOGRAPH + {0xBACC, 0x79BE}, //9564 #CJK UNIFIED IDEOGRAPH + {0xBACD, 0x548C}, //9565 #CJK UNIFIED IDEOGRAPH + {0xBACE, 0x4F55}, //9566 #CJK UNIFIED IDEOGRAPH + {0xBACF, 0x5408}, //9567 #CJK UNIFIED IDEOGRAPH + {0xBAD0, 0x76D2}, //9568 #CJK UNIFIED IDEOGRAPH + {0xBAD1, 0x8C89}, //9569 #CJK UNIFIED IDEOGRAPH + {0xBAD2, 0x9602}, //9570 #CJK UNIFIED IDEOGRAPH + {0xBAD3, 0x6CB3}, //9571 #CJK UNIFIED IDEOGRAPH + {0xBAD4, 0x6DB8}, //9572 #CJK UNIFIED IDEOGRAPH + {0xBAD5, 0x8D6B}, //9573 #CJK UNIFIED IDEOGRAPH + {0xBAD6, 0x8910}, //9574 #CJK UNIFIED IDEOGRAPH + {0xBAD7, 0x9E64}, //9575 #CJK UNIFIED IDEOGRAPH + {0xBAD8, 0x8D3A}, //9576 #CJK UNIFIED IDEOGRAPH + {0xBAD9, 0x563F}, //9577 #CJK UNIFIED IDEOGRAPH + {0xBADA, 0x9ED1}, //9578 #CJK UNIFIED IDEOGRAPH + {0xBADB, 0x75D5}, //9579 #CJK UNIFIED IDEOGRAPH + {0xBADC, 0x5F88}, //9580 #CJK UNIFIED IDEOGRAPH + {0xBADD, 0x72E0}, //9581 #CJK UNIFIED IDEOGRAPH + {0xBADE, 0x6068}, //9582 #CJK UNIFIED IDEOGRAPH + {0xBADF, 0x54FC}, //9583 #CJK UNIFIED IDEOGRAPH + {0xBAE0, 0x4EA8}, //9584 #CJK UNIFIED IDEOGRAPH + {0xBAE1, 0x6A2A}, //9585 #CJK UNIFIED IDEOGRAPH + {0xBAE2, 0x8861}, //9586 #CJK UNIFIED IDEOGRAPH + {0xBAE3, 0x6052}, //9587 #CJK UNIFIED IDEOGRAPH + {0xBAE4, 0x8F70}, //9588 #CJK UNIFIED IDEOGRAPH + {0xBAE5, 0x54C4}, //9589 #CJK UNIFIED IDEOGRAPH + {0xBAE6, 0x70D8}, //9590 #CJK UNIFIED IDEOGRAPH + {0xBAE7, 0x8679}, //9591 #CJK UNIFIED IDEOGRAPH + {0xBAE8, 0x9E3F}, //9592 #CJK UNIFIED IDEOGRAPH + {0xBAE9, 0x6D2A}, //9593 #CJK UNIFIED IDEOGRAPH + {0xBAEA, 0x5B8F}, //9594 #CJK UNIFIED IDEOGRAPH + {0xBAEB, 0x5F18}, //9595 #CJK UNIFIED IDEOGRAPH + {0xBAEC, 0x7EA2}, //9596 #CJK UNIFIED IDEOGRAPH + {0xBAED, 0x5589}, //9597 #CJK UNIFIED IDEOGRAPH + {0xBAEE, 0x4FAF}, //9598 #CJK UNIFIED IDEOGRAPH + {0xBAEF, 0x7334}, //9599 #CJK UNIFIED IDEOGRAPH + {0xBAF0, 0x543C}, //9600 #CJK UNIFIED IDEOGRAPH + {0xBAF1, 0x539A}, //9601 #CJK UNIFIED IDEOGRAPH + {0xBAF2, 0x5019}, //9602 #CJK UNIFIED IDEOGRAPH + {0xBAF3, 0x540E}, //9603 #CJK UNIFIED IDEOGRAPH + {0xBAF4, 0x547C}, //9604 #CJK UNIFIED IDEOGRAPH + {0xBAF5, 0x4E4E}, //9605 #CJK UNIFIED IDEOGRAPH + {0xBAF6, 0x5FFD}, //9606 #CJK UNIFIED IDEOGRAPH + {0xBAF7, 0x745A}, //9607 #CJK UNIFIED IDEOGRAPH + {0xBAF8, 0x58F6}, //9608 #CJK UNIFIED IDEOGRAPH + {0xBAF9, 0x846B}, //9609 #CJK UNIFIED IDEOGRAPH + {0xBAFA, 0x80E1}, //9610 #CJK UNIFIED IDEOGRAPH + {0xBAFB, 0x8774}, //9611 #CJK UNIFIED IDEOGRAPH + {0xBAFC, 0x72D0}, //9612 #CJK UNIFIED IDEOGRAPH + {0xBAFD, 0x7CCA}, //9613 #CJK UNIFIED IDEOGRAPH + {0xBAFE, 0x6E56}, //9614 #CJK UNIFIED IDEOGRAPH + {0xBB40, 0x7C43}, //9615 #CJK UNIFIED IDEOGRAPH + {0xBB41, 0x7C44}, //9616 #CJK UNIFIED IDEOGRAPH + {0xBB42, 0x7C45}, //9617 #CJK UNIFIED IDEOGRAPH + {0xBB43, 0x7C46}, //9618 #CJK UNIFIED IDEOGRAPH + {0xBB44, 0x7C47}, //9619 #CJK UNIFIED IDEOGRAPH + {0xBB45, 0x7C48}, //9620 #CJK UNIFIED IDEOGRAPH + {0xBB46, 0x7C49}, //9621 #CJK UNIFIED IDEOGRAPH + {0xBB47, 0x7C4A}, //9622 #CJK UNIFIED IDEOGRAPH + {0xBB48, 0x7C4B}, //9623 #CJK UNIFIED IDEOGRAPH + {0xBB49, 0x7C4C}, //9624 #CJK UNIFIED IDEOGRAPH + {0xBB4A, 0x7C4E}, //9625 #CJK UNIFIED IDEOGRAPH + {0xBB4B, 0x7C4F}, //9626 #CJK UNIFIED IDEOGRAPH + {0xBB4C, 0x7C50}, //9627 #CJK UNIFIED IDEOGRAPH + {0xBB4D, 0x7C51}, //9628 #CJK UNIFIED IDEOGRAPH + {0xBB4E, 0x7C52}, //9629 #CJK UNIFIED IDEOGRAPH + {0xBB4F, 0x7C53}, //9630 #CJK UNIFIED IDEOGRAPH + {0xBB50, 0x7C54}, //9631 #CJK UNIFIED IDEOGRAPH + {0xBB51, 0x7C55}, //9632 #CJK UNIFIED IDEOGRAPH + {0xBB52, 0x7C56}, //9633 #CJK UNIFIED IDEOGRAPH + {0xBB53, 0x7C57}, //9634 #CJK UNIFIED IDEOGRAPH + {0xBB54, 0x7C58}, //9635 #CJK UNIFIED IDEOGRAPH + {0xBB55, 0x7C59}, //9636 #CJK UNIFIED IDEOGRAPH + {0xBB56, 0x7C5A}, //9637 #CJK UNIFIED IDEOGRAPH + {0xBB57, 0x7C5B}, //9638 #CJK UNIFIED IDEOGRAPH + {0xBB58, 0x7C5C}, //9639 #CJK UNIFIED IDEOGRAPH + {0xBB59, 0x7C5D}, //9640 #CJK UNIFIED IDEOGRAPH + {0xBB5A, 0x7C5E}, //9641 #CJK UNIFIED IDEOGRAPH + {0xBB5B, 0x7C5F}, //9642 #CJK UNIFIED IDEOGRAPH + {0xBB5C, 0x7C60}, //9643 #CJK UNIFIED IDEOGRAPH + {0xBB5D, 0x7C61}, //9644 #CJK UNIFIED IDEOGRAPH + {0xBB5E, 0x7C62}, //9645 #CJK UNIFIED IDEOGRAPH + {0xBB5F, 0x7C63}, //9646 #CJK UNIFIED IDEOGRAPH + {0xBB60, 0x7C64}, //9647 #CJK UNIFIED IDEOGRAPH + {0xBB61, 0x7C65}, //9648 #CJK UNIFIED IDEOGRAPH + {0xBB62, 0x7C66}, //9649 #CJK UNIFIED IDEOGRAPH + {0xBB63, 0x7C67}, //9650 #CJK UNIFIED IDEOGRAPH + {0xBB64, 0x7C68}, //9651 #CJK UNIFIED IDEOGRAPH + {0xBB65, 0x7C69}, //9652 #CJK UNIFIED IDEOGRAPH + {0xBB66, 0x7C6A}, //9653 #CJK UNIFIED IDEOGRAPH + {0xBB67, 0x7C6B}, //9654 #CJK UNIFIED IDEOGRAPH + {0xBB68, 0x7C6C}, //9655 #CJK UNIFIED IDEOGRAPH + {0xBB69, 0x7C6D}, //9656 #CJK UNIFIED IDEOGRAPH + {0xBB6A, 0x7C6E}, //9657 #CJK UNIFIED IDEOGRAPH + {0xBB6B, 0x7C6F}, //9658 #CJK UNIFIED IDEOGRAPH + {0xBB6C, 0x7C70}, //9659 #CJK UNIFIED IDEOGRAPH + {0xBB6D, 0x7C71}, //9660 #CJK UNIFIED IDEOGRAPH + {0xBB6E, 0x7C72}, //9661 #CJK UNIFIED IDEOGRAPH + {0xBB6F, 0x7C75}, //9662 #CJK UNIFIED IDEOGRAPH + {0xBB70, 0x7C76}, //9663 #CJK UNIFIED IDEOGRAPH + {0xBB71, 0x7C77}, //9664 #CJK UNIFIED IDEOGRAPH + {0xBB72, 0x7C78}, //9665 #CJK UNIFIED IDEOGRAPH + {0xBB73, 0x7C79}, //9666 #CJK UNIFIED IDEOGRAPH + {0xBB74, 0x7C7A}, //9667 #CJK UNIFIED IDEOGRAPH + {0xBB75, 0x7C7E}, //9668 #CJK UNIFIED IDEOGRAPH + {0xBB76, 0x7C7F}, //9669 #CJK UNIFIED IDEOGRAPH + {0xBB77, 0x7C80}, //9670 #CJK UNIFIED IDEOGRAPH + {0xBB78, 0x7C81}, //9671 #CJK UNIFIED IDEOGRAPH + {0xBB79, 0x7C82}, //9672 #CJK UNIFIED IDEOGRAPH + {0xBB7A, 0x7C83}, //9673 #CJK UNIFIED IDEOGRAPH + {0xBB7B, 0x7C84}, //9674 #CJK UNIFIED IDEOGRAPH + {0xBB7C, 0x7C85}, //9675 #CJK UNIFIED IDEOGRAPH + {0xBB7D, 0x7C86}, //9676 #CJK UNIFIED IDEOGRAPH + {0xBB7E, 0x7C87}, //9677 #CJK UNIFIED IDEOGRAPH + {0xBB80, 0x7C88}, //9678 #CJK UNIFIED IDEOGRAPH + {0xBB81, 0x7C8A}, //9679 #CJK UNIFIED IDEOGRAPH + {0xBB82, 0x7C8B}, //9680 #CJK UNIFIED IDEOGRAPH + {0xBB83, 0x7C8C}, //9681 #CJK UNIFIED IDEOGRAPH + {0xBB84, 0x7C8D}, //9682 #CJK UNIFIED IDEOGRAPH + {0xBB85, 0x7C8E}, //9683 #CJK UNIFIED IDEOGRAPH + {0xBB86, 0x7C8F}, //9684 #CJK UNIFIED IDEOGRAPH + {0xBB87, 0x7C90}, //9685 #CJK UNIFIED IDEOGRAPH + {0xBB88, 0x7C93}, //9686 #CJK UNIFIED IDEOGRAPH + {0xBB89, 0x7C94}, //9687 #CJK UNIFIED IDEOGRAPH + {0xBB8A, 0x7C96}, //9688 #CJK UNIFIED IDEOGRAPH + {0xBB8B, 0x7C99}, //9689 #CJK UNIFIED IDEOGRAPH + {0xBB8C, 0x7C9A}, //9690 #CJK UNIFIED IDEOGRAPH + {0xBB8D, 0x7C9B}, //9691 #CJK UNIFIED IDEOGRAPH + {0xBB8E, 0x7CA0}, //9692 #CJK UNIFIED IDEOGRAPH + {0xBB8F, 0x7CA1}, //9693 #CJK UNIFIED IDEOGRAPH + {0xBB90, 0x7CA3}, //9694 #CJK UNIFIED IDEOGRAPH + {0xBB91, 0x7CA6}, //9695 #CJK UNIFIED IDEOGRAPH + {0xBB92, 0x7CA7}, //9696 #CJK UNIFIED IDEOGRAPH + {0xBB93, 0x7CA8}, //9697 #CJK UNIFIED IDEOGRAPH + {0xBB94, 0x7CA9}, //9698 #CJK UNIFIED IDEOGRAPH + {0xBB95, 0x7CAB}, //9699 #CJK UNIFIED IDEOGRAPH + {0xBB96, 0x7CAC}, //9700 #CJK UNIFIED IDEOGRAPH + {0xBB97, 0x7CAD}, //9701 #CJK UNIFIED IDEOGRAPH + {0xBB98, 0x7CAF}, //9702 #CJK UNIFIED IDEOGRAPH + {0xBB99, 0x7CB0}, //9703 #CJK UNIFIED IDEOGRAPH + {0xBB9A, 0x7CB4}, //9704 #CJK UNIFIED IDEOGRAPH + {0xBB9B, 0x7CB5}, //9705 #CJK UNIFIED IDEOGRAPH + {0xBB9C, 0x7CB6}, //9706 #CJK UNIFIED IDEOGRAPH + {0xBB9D, 0x7CB7}, //9707 #CJK UNIFIED IDEOGRAPH + {0xBB9E, 0x7CB8}, //9708 #CJK UNIFIED IDEOGRAPH + {0xBB9F, 0x7CBA}, //9709 #CJK UNIFIED IDEOGRAPH + {0xBBA0, 0x7CBB}, //9710 #CJK UNIFIED IDEOGRAPH + {0xBBA1, 0x5F27}, //9711 #CJK UNIFIED IDEOGRAPH + {0xBBA2, 0x864E}, //9712 #CJK UNIFIED IDEOGRAPH + {0xBBA3, 0x552C}, //9713 #CJK UNIFIED IDEOGRAPH + {0xBBA4, 0x62A4}, //9714 #CJK UNIFIED IDEOGRAPH + {0xBBA5, 0x4E92}, //9715 #CJK UNIFIED IDEOGRAPH + {0xBBA6, 0x6CAA}, //9716 #CJK UNIFIED IDEOGRAPH + {0xBBA7, 0x6237}, //9717 #CJK UNIFIED IDEOGRAPH + {0xBBA8, 0x82B1}, //9718 #CJK UNIFIED IDEOGRAPH + {0xBBA9, 0x54D7}, //9719 #CJK UNIFIED IDEOGRAPH + {0xBBAA, 0x534E}, //9720 #CJK UNIFIED IDEOGRAPH + {0xBBAB, 0x733E}, //9721 #CJK UNIFIED IDEOGRAPH + {0xBBAC, 0x6ED1}, //9722 #CJK UNIFIED IDEOGRAPH + {0xBBAD, 0x753B}, //9723 #CJK UNIFIED IDEOGRAPH + {0xBBAE, 0x5212}, //9724 #CJK UNIFIED IDEOGRAPH + {0xBBAF, 0x5316}, //9725 #CJK UNIFIED IDEOGRAPH + {0xBBB0, 0x8BDD}, //9726 #CJK UNIFIED IDEOGRAPH + {0xBBB1, 0x69D0}, //9727 #CJK UNIFIED IDEOGRAPH + {0xBBB2, 0x5F8A}, //9728 #CJK UNIFIED IDEOGRAPH + {0xBBB3, 0x6000}, //9729 #CJK UNIFIED IDEOGRAPH + {0xBBB4, 0x6DEE}, //9730 #CJK UNIFIED IDEOGRAPH + {0xBBB5, 0x574F}, //9731 #CJK UNIFIED IDEOGRAPH + {0xBBB6, 0x6B22}, //9732 #CJK UNIFIED IDEOGRAPH + {0xBBB7, 0x73AF}, //9733 #CJK UNIFIED IDEOGRAPH + {0xBBB8, 0x6853}, //9734 #CJK UNIFIED IDEOGRAPH + {0xBBB9, 0x8FD8}, //9735 #CJK UNIFIED IDEOGRAPH + {0xBBBA, 0x7F13}, //9736 #CJK UNIFIED IDEOGRAPH + {0xBBBB, 0x6362}, //9737 #CJK UNIFIED IDEOGRAPH + {0xBBBC, 0x60A3}, //9738 #CJK UNIFIED IDEOGRAPH + {0xBBBD, 0x5524}, //9739 #CJK UNIFIED IDEOGRAPH + {0xBBBE, 0x75EA}, //9740 #CJK UNIFIED IDEOGRAPH + {0xBBBF, 0x8C62}, //9741 #CJK UNIFIED IDEOGRAPH + {0xBBC0, 0x7115}, //9742 #CJK UNIFIED IDEOGRAPH + {0xBBC1, 0x6DA3}, //9743 #CJK UNIFIED IDEOGRAPH + {0xBBC2, 0x5BA6}, //9744 #CJK UNIFIED IDEOGRAPH + {0xBBC3, 0x5E7B}, //9745 #CJK UNIFIED IDEOGRAPH + {0xBBC4, 0x8352}, //9746 #CJK UNIFIED IDEOGRAPH + {0xBBC5, 0x614C}, //9747 #CJK UNIFIED IDEOGRAPH + {0xBBC6, 0x9EC4}, //9748 #CJK UNIFIED IDEOGRAPH + {0xBBC7, 0x78FA}, //9749 #CJK UNIFIED IDEOGRAPH + {0xBBC8, 0x8757}, //9750 #CJK UNIFIED IDEOGRAPH + {0xBBC9, 0x7C27}, //9751 #CJK UNIFIED IDEOGRAPH + {0xBBCA, 0x7687}, //9752 #CJK UNIFIED IDEOGRAPH + {0xBBCB, 0x51F0}, //9753 #CJK UNIFIED IDEOGRAPH + {0xBBCC, 0x60F6}, //9754 #CJK UNIFIED IDEOGRAPH + {0xBBCD, 0x714C}, //9755 #CJK UNIFIED IDEOGRAPH + {0xBBCE, 0x6643}, //9756 #CJK UNIFIED IDEOGRAPH + {0xBBCF, 0x5E4C}, //9757 #CJK UNIFIED IDEOGRAPH + {0xBBD0, 0x604D}, //9758 #CJK UNIFIED IDEOGRAPH + {0xBBD1, 0x8C0E}, //9759 #CJK UNIFIED IDEOGRAPH + {0xBBD2, 0x7070}, //9760 #CJK UNIFIED IDEOGRAPH + {0xBBD3, 0x6325}, //9761 #CJK UNIFIED IDEOGRAPH + {0xBBD4, 0x8F89}, //9762 #CJK UNIFIED IDEOGRAPH + {0xBBD5, 0x5FBD}, //9763 #CJK UNIFIED IDEOGRAPH + {0xBBD6, 0x6062}, //9764 #CJK UNIFIED IDEOGRAPH + {0xBBD7, 0x86D4}, //9765 #CJK UNIFIED IDEOGRAPH + {0xBBD8, 0x56DE}, //9766 #CJK UNIFIED IDEOGRAPH + {0xBBD9, 0x6BC1}, //9767 #CJK UNIFIED IDEOGRAPH + {0xBBDA, 0x6094}, //9768 #CJK UNIFIED IDEOGRAPH + {0xBBDB, 0x6167}, //9769 #CJK UNIFIED IDEOGRAPH + {0xBBDC, 0x5349}, //9770 #CJK UNIFIED IDEOGRAPH + {0xBBDD, 0x60E0}, //9771 #CJK UNIFIED IDEOGRAPH + {0xBBDE, 0x6666}, //9772 #CJK UNIFIED IDEOGRAPH + {0xBBDF, 0x8D3F}, //9773 #CJK UNIFIED IDEOGRAPH + {0xBBE0, 0x79FD}, //9774 #CJK UNIFIED IDEOGRAPH + {0xBBE1, 0x4F1A}, //9775 #CJK UNIFIED IDEOGRAPH + {0xBBE2, 0x70E9}, //9776 #CJK UNIFIED IDEOGRAPH + {0xBBE3, 0x6C47}, //9777 #CJK UNIFIED IDEOGRAPH + {0xBBE4, 0x8BB3}, //9778 #CJK UNIFIED IDEOGRAPH + {0xBBE5, 0x8BF2}, //9779 #CJK UNIFIED IDEOGRAPH + {0xBBE6, 0x7ED8}, //9780 #CJK UNIFIED IDEOGRAPH + {0xBBE7, 0x8364}, //9781 #CJK UNIFIED IDEOGRAPH + {0xBBE8, 0x660F}, //9782 #CJK UNIFIED IDEOGRAPH + {0xBBE9, 0x5A5A}, //9783 #CJK UNIFIED IDEOGRAPH + {0xBBEA, 0x9B42}, //9784 #CJK UNIFIED IDEOGRAPH + {0xBBEB, 0x6D51}, //9785 #CJK UNIFIED IDEOGRAPH + {0xBBEC, 0x6DF7}, //9786 #CJK UNIFIED IDEOGRAPH + {0xBBED, 0x8C41}, //9787 #CJK UNIFIED IDEOGRAPH + {0xBBEE, 0x6D3B}, //9788 #CJK UNIFIED IDEOGRAPH + {0xBBEF, 0x4F19}, //9789 #CJK UNIFIED IDEOGRAPH + {0xBBF0, 0x706B}, //9790 #CJK UNIFIED IDEOGRAPH + {0xBBF1, 0x83B7}, //9791 #CJK UNIFIED IDEOGRAPH + {0xBBF2, 0x6216}, //9792 #CJK UNIFIED IDEOGRAPH + {0xBBF3, 0x60D1}, //9793 #CJK UNIFIED IDEOGRAPH + {0xBBF4, 0x970D}, //9794 #CJK UNIFIED IDEOGRAPH + {0xBBF5, 0x8D27}, //9795 #CJK UNIFIED IDEOGRAPH + {0xBBF6, 0x7978}, //9796 #CJK UNIFIED IDEOGRAPH + {0xBBF7, 0x51FB}, //9797 #CJK UNIFIED IDEOGRAPH + {0xBBF8, 0x573E}, //9798 #CJK UNIFIED IDEOGRAPH + {0xBBF9, 0x57FA}, //9799 #CJK UNIFIED IDEOGRAPH + {0xBBFA, 0x673A}, //9800 #CJK UNIFIED IDEOGRAPH + {0xBBFB, 0x7578}, //9801 #CJK UNIFIED IDEOGRAPH + {0xBBFC, 0x7A3D}, //9802 #CJK UNIFIED IDEOGRAPH + {0xBBFD, 0x79EF}, //9803 #CJK UNIFIED IDEOGRAPH + {0xBBFE, 0x7B95}, //9804 #CJK UNIFIED IDEOGRAPH + {0xBC40, 0x7CBF}, //9805 #CJK UNIFIED IDEOGRAPH + {0xBC41, 0x7CC0}, //9806 #CJK UNIFIED IDEOGRAPH + {0xBC42, 0x7CC2}, //9807 #CJK UNIFIED IDEOGRAPH + {0xBC43, 0x7CC3}, //9808 #CJK UNIFIED IDEOGRAPH + {0xBC44, 0x7CC4}, //9809 #CJK UNIFIED IDEOGRAPH + {0xBC45, 0x7CC6}, //9810 #CJK UNIFIED IDEOGRAPH + {0xBC46, 0x7CC9}, //9811 #CJK UNIFIED IDEOGRAPH + {0xBC47, 0x7CCB}, //9812 #CJK UNIFIED IDEOGRAPH + {0xBC48, 0x7CCE}, //9813 #CJK UNIFIED IDEOGRAPH + {0xBC49, 0x7CCF}, //9814 #CJK UNIFIED IDEOGRAPH + {0xBC4A, 0x7CD0}, //9815 #CJK UNIFIED IDEOGRAPH + {0xBC4B, 0x7CD1}, //9816 #CJK UNIFIED IDEOGRAPH + {0xBC4C, 0x7CD2}, //9817 #CJK UNIFIED IDEOGRAPH + {0xBC4D, 0x7CD3}, //9818 #CJK UNIFIED IDEOGRAPH + {0xBC4E, 0x7CD4}, //9819 #CJK UNIFIED IDEOGRAPH + {0xBC4F, 0x7CD8}, //9820 #CJK UNIFIED IDEOGRAPH + {0xBC50, 0x7CDA}, //9821 #CJK UNIFIED IDEOGRAPH + {0xBC51, 0x7CDB}, //9822 #CJK UNIFIED IDEOGRAPH + {0xBC52, 0x7CDD}, //9823 #CJK UNIFIED IDEOGRAPH + {0xBC53, 0x7CDE}, //9824 #CJK UNIFIED IDEOGRAPH + {0xBC54, 0x7CE1}, //9825 #CJK UNIFIED IDEOGRAPH + {0xBC55, 0x7CE2}, //9826 #CJK UNIFIED IDEOGRAPH + {0xBC56, 0x7CE3}, //9827 #CJK UNIFIED IDEOGRAPH + {0xBC57, 0x7CE4}, //9828 #CJK UNIFIED IDEOGRAPH + {0xBC58, 0x7CE5}, //9829 #CJK UNIFIED IDEOGRAPH + {0xBC59, 0x7CE6}, //9830 #CJK UNIFIED IDEOGRAPH + {0xBC5A, 0x7CE7}, //9831 #CJK UNIFIED IDEOGRAPH + {0xBC5B, 0x7CE9}, //9832 #CJK UNIFIED IDEOGRAPH + {0xBC5C, 0x7CEA}, //9833 #CJK UNIFIED IDEOGRAPH + {0xBC5D, 0x7CEB}, //9834 #CJK UNIFIED IDEOGRAPH + {0xBC5E, 0x7CEC}, //9835 #CJK UNIFIED IDEOGRAPH + {0xBC5F, 0x7CED}, //9836 #CJK UNIFIED IDEOGRAPH + {0xBC60, 0x7CEE}, //9837 #CJK UNIFIED IDEOGRAPH + {0xBC61, 0x7CF0}, //9838 #CJK UNIFIED IDEOGRAPH + {0xBC62, 0x7CF1}, //9839 #CJK UNIFIED IDEOGRAPH + {0xBC63, 0x7CF2}, //9840 #CJK UNIFIED IDEOGRAPH + {0xBC64, 0x7CF3}, //9841 #CJK UNIFIED IDEOGRAPH + {0xBC65, 0x7CF4}, //9842 #CJK UNIFIED IDEOGRAPH + {0xBC66, 0x7CF5}, //9843 #CJK UNIFIED IDEOGRAPH + {0xBC67, 0x7CF6}, //9844 #CJK UNIFIED IDEOGRAPH + {0xBC68, 0x7CF7}, //9845 #CJK UNIFIED IDEOGRAPH + {0xBC69, 0x7CF9}, //9846 #CJK UNIFIED IDEOGRAPH + {0xBC6A, 0x7CFA}, //9847 #CJK UNIFIED IDEOGRAPH + {0xBC6B, 0x7CFC}, //9848 #CJK UNIFIED IDEOGRAPH + {0xBC6C, 0x7CFD}, //9849 #CJK UNIFIED IDEOGRAPH + {0xBC6D, 0x7CFE}, //9850 #CJK UNIFIED IDEOGRAPH + {0xBC6E, 0x7CFF}, //9851 #CJK UNIFIED IDEOGRAPH + {0xBC6F, 0x7D00}, //9852 #CJK UNIFIED IDEOGRAPH + {0xBC70, 0x7D01}, //9853 #CJK UNIFIED IDEOGRAPH + {0xBC71, 0x7D02}, //9854 #CJK UNIFIED IDEOGRAPH + {0xBC72, 0x7D03}, //9855 #CJK UNIFIED IDEOGRAPH + {0xBC73, 0x7D04}, //9856 #CJK UNIFIED IDEOGRAPH + {0xBC74, 0x7D05}, //9857 #CJK UNIFIED IDEOGRAPH + {0xBC75, 0x7D06}, //9858 #CJK UNIFIED IDEOGRAPH + {0xBC76, 0x7D07}, //9859 #CJK UNIFIED IDEOGRAPH + {0xBC77, 0x7D08}, //9860 #CJK UNIFIED IDEOGRAPH + {0xBC78, 0x7D09}, //9861 #CJK UNIFIED IDEOGRAPH + {0xBC79, 0x7D0B}, //9862 #CJK UNIFIED IDEOGRAPH + {0xBC7A, 0x7D0C}, //9863 #CJK UNIFIED IDEOGRAPH + {0xBC7B, 0x7D0D}, //9864 #CJK UNIFIED IDEOGRAPH + {0xBC7C, 0x7D0E}, //9865 #CJK UNIFIED IDEOGRAPH + {0xBC7D, 0x7D0F}, //9866 #CJK UNIFIED IDEOGRAPH + {0xBC7E, 0x7D10}, //9867 #CJK UNIFIED IDEOGRAPH + {0xBC80, 0x7D11}, //9868 #CJK UNIFIED IDEOGRAPH + {0xBC81, 0x7D12}, //9869 #CJK UNIFIED IDEOGRAPH + {0xBC82, 0x7D13}, //9870 #CJK UNIFIED IDEOGRAPH + {0xBC83, 0x7D14}, //9871 #CJK UNIFIED IDEOGRAPH + {0xBC84, 0x7D15}, //9872 #CJK UNIFIED IDEOGRAPH + {0xBC85, 0x7D16}, //9873 #CJK UNIFIED IDEOGRAPH + {0xBC86, 0x7D17}, //9874 #CJK UNIFIED IDEOGRAPH + {0xBC87, 0x7D18}, //9875 #CJK UNIFIED IDEOGRAPH + {0xBC88, 0x7D19}, //9876 #CJK UNIFIED IDEOGRAPH + {0xBC89, 0x7D1A}, //9877 #CJK UNIFIED IDEOGRAPH + {0xBC8A, 0x7D1B}, //9878 #CJK UNIFIED IDEOGRAPH + {0xBC8B, 0x7D1C}, //9879 #CJK UNIFIED IDEOGRAPH + {0xBC8C, 0x7D1D}, //9880 #CJK UNIFIED IDEOGRAPH + {0xBC8D, 0x7D1E}, //9881 #CJK UNIFIED IDEOGRAPH + {0xBC8E, 0x7D1F}, //9882 #CJK UNIFIED IDEOGRAPH + {0xBC8F, 0x7D21}, //9883 #CJK UNIFIED IDEOGRAPH + {0xBC90, 0x7D23}, //9884 #CJK UNIFIED IDEOGRAPH + {0xBC91, 0x7D24}, //9885 #CJK UNIFIED IDEOGRAPH + {0xBC92, 0x7D25}, //9886 #CJK UNIFIED IDEOGRAPH + {0xBC93, 0x7D26}, //9887 #CJK UNIFIED IDEOGRAPH + {0xBC94, 0x7D28}, //9888 #CJK UNIFIED IDEOGRAPH + {0xBC95, 0x7D29}, //9889 #CJK UNIFIED IDEOGRAPH + {0xBC96, 0x7D2A}, //9890 #CJK UNIFIED IDEOGRAPH + {0xBC97, 0x7D2C}, //9891 #CJK UNIFIED IDEOGRAPH + {0xBC98, 0x7D2D}, //9892 #CJK UNIFIED IDEOGRAPH + {0xBC99, 0x7D2E}, //9893 #CJK UNIFIED IDEOGRAPH + {0xBC9A, 0x7D30}, //9894 #CJK UNIFIED IDEOGRAPH + {0xBC9B, 0x7D31}, //9895 #CJK UNIFIED IDEOGRAPH + {0xBC9C, 0x7D32}, //9896 #CJK UNIFIED IDEOGRAPH + {0xBC9D, 0x7D33}, //9897 #CJK UNIFIED IDEOGRAPH + {0xBC9E, 0x7D34}, //9898 #CJK UNIFIED IDEOGRAPH + {0xBC9F, 0x7D35}, //9899 #CJK UNIFIED IDEOGRAPH + {0xBCA0, 0x7D36}, //9900 #CJK UNIFIED IDEOGRAPH + {0xBCA1, 0x808C}, //9901 #CJK UNIFIED IDEOGRAPH + {0xBCA2, 0x9965}, //9902 #CJK UNIFIED IDEOGRAPH + {0xBCA3, 0x8FF9}, //9903 #CJK UNIFIED IDEOGRAPH + {0xBCA4, 0x6FC0}, //9904 #CJK UNIFIED IDEOGRAPH + {0xBCA5, 0x8BA5}, //9905 #CJK UNIFIED IDEOGRAPH + {0xBCA6, 0x9E21}, //9906 #CJK UNIFIED IDEOGRAPH + {0xBCA7, 0x59EC}, //9907 #CJK UNIFIED IDEOGRAPH + {0xBCA8, 0x7EE9}, //9908 #CJK UNIFIED IDEOGRAPH + {0xBCA9, 0x7F09}, //9909 #CJK UNIFIED IDEOGRAPH + {0xBCAA, 0x5409}, //9910 #CJK UNIFIED IDEOGRAPH + {0xBCAB, 0x6781}, //9911 #CJK UNIFIED IDEOGRAPH + {0xBCAC, 0x68D8}, //9912 #CJK UNIFIED IDEOGRAPH + {0xBCAD, 0x8F91}, //9913 #CJK UNIFIED IDEOGRAPH + {0xBCAE, 0x7C4D}, //9914 #CJK UNIFIED IDEOGRAPH + {0xBCAF, 0x96C6}, //9915 #CJK UNIFIED IDEOGRAPH + {0xBCB0, 0x53CA}, //9916 #CJK UNIFIED IDEOGRAPH + {0xBCB1, 0x6025}, //9917 #CJK UNIFIED IDEOGRAPH + {0xBCB2, 0x75BE}, //9918 #CJK UNIFIED IDEOGRAPH + {0xBCB3, 0x6C72}, //9919 #CJK UNIFIED IDEOGRAPH + {0xBCB4, 0x5373}, //9920 #CJK UNIFIED IDEOGRAPH + {0xBCB5, 0x5AC9}, //9921 #CJK UNIFIED IDEOGRAPH + {0xBCB6, 0x7EA7}, //9922 #CJK UNIFIED IDEOGRAPH + {0xBCB7, 0x6324}, //9923 #CJK UNIFIED IDEOGRAPH + {0xBCB8, 0x51E0}, //9924 #CJK UNIFIED IDEOGRAPH + {0xBCB9, 0x810A}, //9925 #CJK UNIFIED IDEOGRAPH + {0xBCBA, 0x5DF1}, //9926 #CJK UNIFIED IDEOGRAPH + {0xBCBB, 0x84DF}, //9927 #CJK UNIFIED IDEOGRAPH + {0xBCBC, 0x6280}, //9928 #CJK UNIFIED IDEOGRAPH + {0xBCBD, 0x5180}, //9929 #CJK UNIFIED IDEOGRAPH + {0xBCBE, 0x5B63}, //9930 #CJK UNIFIED IDEOGRAPH + {0xBCBF, 0x4F0E}, //9931 #CJK UNIFIED IDEOGRAPH + {0xBCC0, 0x796D}, //9932 #CJK UNIFIED IDEOGRAPH + {0xBCC1, 0x5242}, //9933 #CJK UNIFIED IDEOGRAPH + {0xBCC2, 0x60B8}, //9934 #CJK UNIFIED IDEOGRAPH + {0xBCC3, 0x6D4E}, //9935 #CJK UNIFIED IDEOGRAPH + {0xBCC4, 0x5BC4}, //9936 #CJK UNIFIED IDEOGRAPH + {0xBCC5, 0x5BC2}, //9937 #CJK UNIFIED IDEOGRAPH + {0xBCC6, 0x8BA1}, //9938 #CJK UNIFIED IDEOGRAPH + {0xBCC7, 0x8BB0}, //9939 #CJK UNIFIED IDEOGRAPH + {0xBCC8, 0x65E2}, //9940 #CJK UNIFIED IDEOGRAPH + {0xBCC9, 0x5FCC}, //9941 #CJK UNIFIED IDEOGRAPH + {0xBCCA, 0x9645}, //9942 #CJK UNIFIED IDEOGRAPH + {0xBCCB, 0x5993}, //9943 #CJK UNIFIED IDEOGRAPH + {0xBCCC, 0x7EE7}, //9944 #CJK UNIFIED IDEOGRAPH + {0xBCCD, 0x7EAA}, //9945 #CJK UNIFIED IDEOGRAPH + {0xBCCE, 0x5609}, //9946 #CJK UNIFIED IDEOGRAPH + {0xBCCF, 0x67B7}, //9947 #CJK UNIFIED IDEOGRAPH + {0xBCD0, 0x5939}, //9948 #CJK UNIFIED IDEOGRAPH + {0xBCD1, 0x4F73}, //9949 #CJK UNIFIED IDEOGRAPH + {0xBCD2, 0x5BB6}, //9950 #CJK UNIFIED IDEOGRAPH + {0xBCD3, 0x52A0}, //9951 #CJK UNIFIED IDEOGRAPH + {0xBCD4, 0x835A}, //9952 #CJK UNIFIED IDEOGRAPH + {0xBCD5, 0x988A}, //9953 #CJK UNIFIED IDEOGRAPH + {0xBCD6, 0x8D3E}, //9954 #CJK UNIFIED IDEOGRAPH + {0xBCD7, 0x7532}, //9955 #CJK UNIFIED IDEOGRAPH + {0xBCD8, 0x94BE}, //9956 #CJK UNIFIED IDEOGRAPH + {0xBCD9, 0x5047}, //9957 #CJK UNIFIED IDEOGRAPH + {0xBCDA, 0x7A3C}, //9958 #CJK UNIFIED IDEOGRAPH + {0xBCDB, 0x4EF7}, //9959 #CJK UNIFIED IDEOGRAPH + {0xBCDC, 0x67B6}, //9960 #CJK UNIFIED IDEOGRAPH + {0xBCDD, 0x9A7E}, //9961 #CJK UNIFIED IDEOGRAPH + {0xBCDE, 0x5AC1}, //9962 #CJK UNIFIED IDEOGRAPH + {0xBCDF, 0x6B7C}, //9963 #CJK UNIFIED IDEOGRAPH + {0xBCE0, 0x76D1}, //9964 #CJK UNIFIED IDEOGRAPH + {0xBCE1, 0x575A}, //9965 #CJK UNIFIED IDEOGRAPH + {0xBCE2, 0x5C16}, //9966 #CJK UNIFIED IDEOGRAPH + {0xBCE3, 0x7B3A}, //9967 #CJK UNIFIED IDEOGRAPH + {0xBCE4, 0x95F4}, //9968 #CJK UNIFIED IDEOGRAPH + {0xBCE5, 0x714E}, //9969 #CJK UNIFIED IDEOGRAPH + {0xBCE6, 0x517C}, //9970 #CJK UNIFIED IDEOGRAPH + {0xBCE7, 0x80A9}, //9971 #CJK UNIFIED IDEOGRAPH + {0xBCE8, 0x8270}, //9972 #CJK UNIFIED IDEOGRAPH + {0xBCE9, 0x5978}, //9973 #CJK UNIFIED IDEOGRAPH + {0xBCEA, 0x7F04}, //9974 #CJK UNIFIED IDEOGRAPH + {0xBCEB, 0x8327}, //9975 #CJK UNIFIED IDEOGRAPH + {0xBCEC, 0x68C0}, //9976 #CJK UNIFIED IDEOGRAPH + {0xBCED, 0x67EC}, //9977 #CJK UNIFIED IDEOGRAPH + {0xBCEE, 0x78B1}, //9978 #CJK UNIFIED IDEOGRAPH + {0xBCEF, 0x7877}, //9979 #CJK UNIFIED IDEOGRAPH + {0xBCF0, 0x62E3}, //9980 #CJK UNIFIED IDEOGRAPH + {0xBCF1, 0x6361}, //9981 #CJK UNIFIED IDEOGRAPH + {0xBCF2, 0x7B80}, //9982 #CJK UNIFIED IDEOGRAPH + {0xBCF3, 0x4FED}, //9983 #CJK UNIFIED IDEOGRAPH + {0xBCF4, 0x526A}, //9984 #CJK UNIFIED IDEOGRAPH + {0xBCF5, 0x51CF}, //9985 #CJK UNIFIED IDEOGRAPH + {0xBCF6, 0x8350}, //9986 #CJK UNIFIED IDEOGRAPH + {0xBCF7, 0x69DB}, //9987 #CJK UNIFIED IDEOGRAPH + {0xBCF8, 0x9274}, //9988 #CJK UNIFIED IDEOGRAPH + {0xBCF9, 0x8DF5}, //9989 #CJK UNIFIED IDEOGRAPH + {0xBCFA, 0x8D31}, //9990 #CJK UNIFIED IDEOGRAPH + {0xBCFB, 0x89C1}, //9991 #CJK UNIFIED IDEOGRAPH + {0xBCFC, 0x952E}, //9992 #CJK UNIFIED IDEOGRAPH + {0xBCFD, 0x7BAD}, //9993 #CJK UNIFIED IDEOGRAPH + {0xBCFE, 0x4EF6}, //9994 #CJK UNIFIED IDEOGRAPH + {0xBD40, 0x7D37}, //9995 #CJK UNIFIED IDEOGRAPH + {0xBD41, 0x7D38}, //9996 #CJK UNIFIED IDEOGRAPH + {0xBD42, 0x7D39}, //9997 #CJK UNIFIED IDEOGRAPH + {0xBD43, 0x7D3A}, //9998 #CJK UNIFIED IDEOGRAPH + {0xBD44, 0x7D3B}, //9999 #CJK UNIFIED IDEOGRAPH + {0xBD45, 0x7D3C}, //10000 #CJK UNIFIED IDEOGRAPH + {0xBD46, 0x7D3D}, //10001 #CJK UNIFIED IDEOGRAPH + {0xBD47, 0x7D3E}, //10002 #CJK UNIFIED IDEOGRAPH + {0xBD48, 0x7D3F}, //10003 #CJK UNIFIED IDEOGRAPH + {0xBD49, 0x7D40}, //10004 #CJK UNIFIED IDEOGRAPH + {0xBD4A, 0x7D41}, //10005 #CJK UNIFIED IDEOGRAPH + {0xBD4B, 0x7D42}, //10006 #CJK UNIFIED IDEOGRAPH + {0xBD4C, 0x7D43}, //10007 #CJK UNIFIED IDEOGRAPH + {0xBD4D, 0x7D44}, //10008 #CJK UNIFIED IDEOGRAPH + {0xBD4E, 0x7D45}, //10009 #CJK UNIFIED IDEOGRAPH + {0xBD4F, 0x7D46}, //10010 #CJK UNIFIED IDEOGRAPH + {0xBD50, 0x7D47}, //10011 #CJK UNIFIED IDEOGRAPH + {0xBD51, 0x7D48}, //10012 #CJK UNIFIED IDEOGRAPH + {0xBD52, 0x7D49}, //10013 #CJK UNIFIED IDEOGRAPH + {0xBD53, 0x7D4A}, //10014 #CJK UNIFIED IDEOGRAPH + {0xBD54, 0x7D4B}, //10015 #CJK UNIFIED IDEOGRAPH + {0xBD55, 0x7D4C}, //10016 #CJK UNIFIED IDEOGRAPH + {0xBD56, 0x7D4D}, //10017 #CJK UNIFIED IDEOGRAPH + {0xBD57, 0x7D4E}, //10018 #CJK UNIFIED IDEOGRAPH + {0xBD58, 0x7D4F}, //10019 #CJK UNIFIED IDEOGRAPH + {0xBD59, 0x7D50}, //10020 #CJK UNIFIED IDEOGRAPH + {0xBD5A, 0x7D51}, //10021 #CJK UNIFIED IDEOGRAPH + {0xBD5B, 0x7D52}, //10022 #CJK UNIFIED IDEOGRAPH + {0xBD5C, 0x7D53}, //10023 #CJK UNIFIED IDEOGRAPH + {0xBD5D, 0x7D54}, //10024 #CJK UNIFIED IDEOGRAPH + {0xBD5E, 0x7D55}, //10025 #CJK UNIFIED IDEOGRAPH + {0xBD5F, 0x7D56}, //10026 #CJK UNIFIED IDEOGRAPH + {0xBD60, 0x7D57}, //10027 #CJK UNIFIED IDEOGRAPH + {0xBD61, 0x7D58}, //10028 #CJK UNIFIED IDEOGRAPH + {0xBD62, 0x7D59}, //10029 #CJK UNIFIED IDEOGRAPH + {0xBD63, 0x7D5A}, //10030 #CJK UNIFIED IDEOGRAPH + {0xBD64, 0x7D5B}, //10031 #CJK UNIFIED IDEOGRAPH + {0xBD65, 0x7D5C}, //10032 #CJK UNIFIED IDEOGRAPH + {0xBD66, 0x7D5D}, //10033 #CJK UNIFIED IDEOGRAPH + {0xBD67, 0x7D5E}, //10034 #CJK UNIFIED IDEOGRAPH + {0xBD68, 0x7D5F}, //10035 #CJK UNIFIED IDEOGRAPH + {0xBD69, 0x7D60}, //10036 #CJK UNIFIED IDEOGRAPH + {0xBD6A, 0x7D61}, //10037 #CJK UNIFIED IDEOGRAPH + {0xBD6B, 0x7D62}, //10038 #CJK UNIFIED IDEOGRAPH + {0xBD6C, 0x7D63}, //10039 #CJK UNIFIED IDEOGRAPH + {0xBD6D, 0x7D64}, //10040 #CJK UNIFIED IDEOGRAPH + {0xBD6E, 0x7D65}, //10041 #CJK UNIFIED IDEOGRAPH + {0xBD6F, 0x7D66}, //10042 #CJK UNIFIED IDEOGRAPH + {0xBD70, 0x7D67}, //10043 #CJK UNIFIED IDEOGRAPH + {0xBD71, 0x7D68}, //10044 #CJK UNIFIED IDEOGRAPH + {0xBD72, 0x7D69}, //10045 #CJK UNIFIED IDEOGRAPH + {0xBD73, 0x7D6A}, //10046 #CJK UNIFIED IDEOGRAPH + {0xBD74, 0x7D6B}, //10047 #CJK UNIFIED IDEOGRAPH + {0xBD75, 0x7D6C}, //10048 #CJK UNIFIED IDEOGRAPH + {0xBD76, 0x7D6D}, //10049 #CJK UNIFIED IDEOGRAPH + {0xBD77, 0x7D6F}, //10050 #CJK UNIFIED IDEOGRAPH + {0xBD78, 0x7D70}, //10051 #CJK UNIFIED IDEOGRAPH + {0xBD79, 0x7D71}, //10052 #CJK UNIFIED IDEOGRAPH + {0xBD7A, 0x7D72}, //10053 #CJK UNIFIED IDEOGRAPH + {0xBD7B, 0x7D73}, //10054 #CJK UNIFIED IDEOGRAPH + {0xBD7C, 0x7D74}, //10055 #CJK UNIFIED IDEOGRAPH + {0xBD7D, 0x7D75}, //10056 #CJK UNIFIED IDEOGRAPH + {0xBD7E, 0x7D76}, //10057 #CJK UNIFIED IDEOGRAPH + {0xBD80, 0x7D78}, //10058 #CJK UNIFIED IDEOGRAPH + {0xBD81, 0x7D79}, //10059 #CJK UNIFIED IDEOGRAPH + {0xBD82, 0x7D7A}, //10060 #CJK UNIFIED IDEOGRAPH + {0xBD83, 0x7D7B}, //10061 #CJK UNIFIED IDEOGRAPH + {0xBD84, 0x7D7C}, //10062 #CJK UNIFIED IDEOGRAPH + {0xBD85, 0x7D7D}, //10063 #CJK UNIFIED IDEOGRAPH + {0xBD86, 0x7D7E}, //10064 #CJK UNIFIED IDEOGRAPH + {0xBD87, 0x7D7F}, //10065 #CJK UNIFIED IDEOGRAPH + {0xBD88, 0x7D80}, //10066 #CJK UNIFIED IDEOGRAPH + {0xBD89, 0x7D81}, //10067 #CJK UNIFIED IDEOGRAPH + {0xBD8A, 0x7D82}, //10068 #CJK UNIFIED IDEOGRAPH + {0xBD8B, 0x7D83}, //10069 #CJK UNIFIED IDEOGRAPH + {0xBD8C, 0x7D84}, //10070 #CJK UNIFIED IDEOGRAPH + {0xBD8D, 0x7D85}, //10071 #CJK UNIFIED IDEOGRAPH + {0xBD8E, 0x7D86}, //10072 #CJK UNIFIED IDEOGRAPH + {0xBD8F, 0x7D87}, //10073 #CJK UNIFIED IDEOGRAPH + {0xBD90, 0x7D88}, //10074 #CJK UNIFIED IDEOGRAPH + {0xBD91, 0x7D89}, //10075 #CJK UNIFIED IDEOGRAPH + {0xBD92, 0x7D8A}, //10076 #CJK UNIFIED IDEOGRAPH + {0xBD93, 0x7D8B}, //10077 #CJK UNIFIED IDEOGRAPH + {0xBD94, 0x7D8C}, //10078 #CJK UNIFIED IDEOGRAPH + {0xBD95, 0x7D8D}, //10079 #CJK UNIFIED IDEOGRAPH + {0xBD96, 0x7D8E}, //10080 #CJK UNIFIED IDEOGRAPH + {0xBD97, 0x7D8F}, //10081 #CJK UNIFIED IDEOGRAPH + {0xBD98, 0x7D90}, //10082 #CJK UNIFIED IDEOGRAPH + {0xBD99, 0x7D91}, //10083 #CJK UNIFIED IDEOGRAPH + {0xBD9A, 0x7D92}, //10084 #CJK UNIFIED IDEOGRAPH + {0xBD9B, 0x7D93}, //10085 #CJK UNIFIED IDEOGRAPH + {0xBD9C, 0x7D94}, //10086 #CJK UNIFIED IDEOGRAPH + {0xBD9D, 0x7D95}, //10087 #CJK UNIFIED IDEOGRAPH + {0xBD9E, 0x7D96}, //10088 #CJK UNIFIED IDEOGRAPH + {0xBD9F, 0x7D97}, //10089 #CJK UNIFIED IDEOGRAPH + {0xBDA0, 0x7D98}, //10090 #CJK UNIFIED IDEOGRAPH + {0xBDA1, 0x5065}, //10091 #CJK UNIFIED IDEOGRAPH + {0xBDA2, 0x8230}, //10092 #CJK UNIFIED IDEOGRAPH + {0xBDA3, 0x5251}, //10093 #CJK UNIFIED IDEOGRAPH + {0xBDA4, 0x996F}, //10094 #CJK UNIFIED IDEOGRAPH + {0xBDA5, 0x6E10}, //10095 #CJK UNIFIED IDEOGRAPH + {0xBDA6, 0x6E85}, //10096 #CJK UNIFIED IDEOGRAPH + {0xBDA7, 0x6DA7}, //10097 #CJK UNIFIED IDEOGRAPH + {0xBDA8, 0x5EFA}, //10098 #CJK UNIFIED IDEOGRAPH + {0xBDA9, 0x50F5}, //10099 #CJK UNIFIED IDEOGRAPH + {0xBDAA, 0x59DC}, //10100 #CJK UNIFIED IDEOGRAPH + {0xBDAB, 0x5C06}, //10101 #CJK UNIFIED IDEOGRAPH + {0xBDAC, 0x6D46}, //10102 #CJK UNIFIED IDEOGRAPH + {0xBDAD, 0x6C5F}, //10103 #CJK UNIFIED IDEOGRAPH + {0xBDAE, 0x7586}, //10104 #CJK UNIFIED IDEOGRAPH + {0xBDAF, 0x848B}, //10105 #CJK UNIFIED IDEOGRAPH + {0xBDB0, 0x6868}, //10106 #CJK UNIFIED IDEOGRAPH + {0xBDB1, 0x5956}, //10107 #CJK UNIFIED IDEOGRAPH + {0xBDB2, 0x8BB2}, //10108 #CJK UNIFIED IDEOGRAPH + {0xBDB3, 0x5320}, //10109 #CJK UNIFIED IDEOGRAPH + {0xBDB4, 0x9171}, //10110 #CJK UNIFIED IDEOGRAPH + {0xBDB5, 0x964D}, //10111 #CJK UNIFIED IDEOGRAPH + {0xBDB6, 0x8549}, //10112 #CJK UNIFIED IDEOGRAPH + {0xBDB7, 0x6912}, //10113 #CJK UNIFIED IDEOGRAPH + {0xBDB8, 0x7901}, //10114 #CJK UNIFIED IDEOGRAPH + {0xBDB9, 0x7126}, //10115 #CJK UNIFIED IDEOGRAPH + {0xBDBA, 0x80F6}, //10116 #CJK UNIFIED IDEOGRAPH + {0xBDBB, 0x4EA4}, //10117 #CJK UNIFIED IDEOGRAPH + {0xBDBC, 0x90CA}, //10118 #CJK UNIFIED IDEOGRAPH + {0xBDBD, 0x6D47}, //10119 #CJK UNIFIED IDEOGRAPH + {0xBDBE, 0x9A84}, //10120 #CJK UNIFIED IDEOGRAPH + {0xBDBF, 0x5A07}, //10121 #CJK UNIFIED IDEOGRAPH + {0xBDC0, 0x56BC}, //10122 #CJK UNIFIED IDEOGRAPH + {0xBDC1, 0x6405}, //10123 #CJK UNIFIED IDEOGRAPH + {0xBDC2, 0x94F0}, //10124 #CJK UNIFIED IDEOGRAPH + {0xBDC3, 0x77EB}, //10125 #CJK UNIFIED IDEOGRAPH + {0xBDC4, 0x4FA5}, //10126 #CJK UNIFIED IDEOGRAPH + {0xBDC5, 0x811A}, //10127 #CJK UNIFIED IDEOGRAPH + {0xBDC6, 0x72E1}, //10128 #CJK UNIFIED IDEOGRAPH + {0xBDC7, 0x89D2}, //10129 #CJK UNIFIED IDEOGRAPH + {0xBDC8, 0x997A}, //10130 #CJK UNIFIED IDEOGRAPH + {0xBDC9, 0x7F34}, //10131 #CJK UNIFIED IDEOGRAPH + {0xBDCA, 0x7EDE}, //10132 #CJK UNIFIED IDEOGRAPH + {0xBDCB, 0x527F}, //10133 #CJK UNIFIED IDEOGRAPH + {0xBDCC, 0x6559}, //10134 #CJK UNIFIED IDEOGRAPH + {0xBDCD, 0x9175}, //10135 #CJK UNIFIED IDEOGRAPH + {0xBDCE, 0x8F7F}, //10136 #CJK UNIFIED IDEOGRAPH + {0xBDCF, 0x8F83}, //10137 #CJK UNIFIED IDEOGRAPH + {0xBDD0, 0x53EB}, //10138 #CJK UNIFIED IDEOGRAPH + {0xBDD1, 0x7A96}, //10139 #CJK UNIFIED IDEOGRAPH + {0xBDD2, 0x63ED}, //10140 #CJK UNIFIED IDEOGRAPH + {0xBDD3, 0x63A5}, //10141 #CJK UNIFIED IDEOGRAPH + {0xBDD4, 0x7686}, //10142 #CJK UNIFIED IDEOGRAPH + {0xBDD5, 0x79F8}, //10143 #CJK UNIFIED IDEOGRAPH + {0xBDD6, 0x8857}, //10144 #CJK UNIFIED IDEOGRAPH + {0xBDD7, 0x9636}, //10145 #CJK UNIFIED IDEOGRAPH + {0xBDD8, 0x622A}, //10146 #CJK UNIFIED IDEOGRAPH + {0xBDD9, 0x52AB}, //10147 #CJK UNIFIED IDEOGRAPH + {0xBDDA, 0x8282}, //10148 #CJK UNIFIED IDEOGRAPH + {0xBDDB, 0x6854}, //10149 #CJK UNIFIED IDEOGRAPH + {0xBDDC, 0x6770}, //10150 #CJK UNIFIED IDEOGRAPH + {0xBDDD, 0x6377}, //10151 #CJK UNIFIED IDEOGRAPH + {0xBDDE, 0x776B}, //10152 #CJK UNIFIED IDEOGRAPH + {0xBDDF, 0x7AED}, //10153 #CJK UNIFIED IDEOGRAPH + {0xBDE0, 0x6D01}, //10154 #CJK UNIFIED IDEOGRAPH + {0xBDE1, 0x7ED3}, //10155 #CJK UNIFIED IDEOGRAPH + {0xBDE2, 0x89E3}, //10156 #CJK UNIFIED IDEOGRAPH + {0xBDE3, 0x59D0}, //10157 #CJK UNIFIED IDEOGRAPH + {0xBDE4, 0x6212}, //10158 #CJK UNIFIED IDEOGRAPH + {0xBDE5, 0x85C9}, //10159 #CJK UNIFIED IDEOGRAPH + {0xBDE6, 0x82A5}, //10160 #CJK UNIFIED IDEOGRAPH + {0xBDE7, 0x754C}, //10161 #CJK UNIFIED IDEOGRAPH + {0xBDE8, 0x501F}, //10162 #CJK UNIFIED IDEOGRAPH + {0xBDE9, 0x4ECB}, //10163 #CJK UNIFIED IDEOGRAPH + {0xBDEA, 0x75A5}, //10164 #CJK UNIFIED IDEOGRAPH + {0xBDEB, 0x8BEB}, //10165 #CJK UNIFIED IDEOGRAPH + {0xBDEC, 0x5C4A}, //10166 #CJK UNIFIED IDEOGRAPH + {0xBDED, 0x5DFE}, //10167 #CJK UNIFIED IDEOGRAPH + {0xBDEE, 0x7B4B}, //10168 #CJK UNIFIED IDEOGRAPH + {0xBDEF, 0x65A4}, //10169 #CJK UNIFIED IDEOGRAPH + {0xBDF0, 0x91D1}, //10170 #CJK UNIFIED IDEOGRAPH + {0xBDF1, 0x4ECA}, //10171 #CJK UNIFIED IDEOGRAPH + {0xBDF2, 0x6D25}, //10172 #CJK UNIFIED IDEOGRAPH + {0xBDF3, 0x895F}, //10173 #CJK UNIFIED IDEOGRAPH + {0xBDF4, 0x7D27}, //10174 #CJK UNIFIED IDEOGRAPH + {0xBDF5, 0x9526}, //10175 #CJK UNIFIED IDEOGRAPH + {0xBDF6, 0x4EC5}, //10176 #CJK UNIFIED IDEOGRAPH + {0xBDF7, 0x8C28}, //10177 #CJK UNIFIED IDEOGRAPH + {0xBDF8, 0x8FDB}, //10178 #CJK UNIFIED IDEOGRAPH + {0xBDF9, 0x9773}, //10179 #CJK UNIFIED IDEOGRAPH + {0xBDFA, 0x664B}, //10180 #CJK UNIFIED IDEOGRAPH + {0xBDFB, 0x7981}, //10181 #CJK UNIFIED IDEOGRAPH + {0xBDFC, 0x8FD1}, //10182 #CJK UNIFIED IDEOGRAPH + {0xBDFD, 0x70EC}, //10183 #CJK UNIFIED IDEOGRAPH + {0xBDFE, 0x6D78}, //10184 #CJK UNIFIED IDEOGRAPH + {0xBE40, 0x7D99}, //10185 #CJK UNIFIED IDEOGRAPH + {0xBE41, 0x7D9A}, //10186 #CJK UNIFIED IDEOGRAPH + {0xBE42, 0x7D9B}, //10187 #CJK UNIFIED IDEOGRAPH + {0xBE43, 0x7D9C}, //10188 #CJK UNIFIED IDEOGRAPH + {0xBE44, 0x7D9D}, //10189 #CJK UNIFIED IDEOGRAPH + {0xBE45, 0x7D9E}, //10190 #CJK UNIFIED IDEOGRAPH + {0xBE46, 0x7D9F}, //10191 #CJK UNIFIED IDEOGRAPH + {0xBE47, 0x7DA0}, //10192 #CJK UNIFIED IDEOGRAPH + {0xBE48, 0x7DA1}, //10193 #CJK UNIFIED IDEOGRAPH + {0xBE49, 0x7DA2}, //10194 #CJK UNIFIED IDEOGRAPH + {0xBE4A, 0x7DA3}, //10195 #CJK UNIFIED IDEOGRAPH + {0xBE4B, 0x7DA4}, //10196 #CJK UNIFIED IDEOGRAPH + {0xBE4C, 0x7DA5}, //10197 #CJK UNIFIED IDEOGRAPH + {0xBE4D, 0x7DA7}, //10198 #CJK UNIFIED IDEOGRAPH + {0xBE4E, 0x7DA8}, //10199 #CJK UNIFIED IDEOGRAPH + {0xBE4F, 0x7DA9}, //10200 #CJK UNIFIED IDEOGRAPH + {0xBE50, 0x7DAA}, //10201 #CJK UNIFIED IDEOGRAPH + {0xBE51, 0x7DAB}, //10202 #CJK UNIFIED IDEOGRAPH + {0xBE52, 0x7DAC}, //10203 #CJK UNIFIED IDEOGRAPH + {0xBE53, 0x7DAD}, //10204 #CJK UNIFIED IDEOGRAPH + {0xBE54, 0x7DAF}, //10205 #CJK UNIFIED IDEOGRAPH + {0xBE55, 0x7DB0}, //10206 #CJK UNIFIED IDEOGRAPH + {0xBE56, 0x7DB1}, //10207 #CJK UNIFIED IDEOGRAPH + {0xBE57, 0x7DB2}, //10208 #CJK UNIFIED IDEOGRAPH + {0xBE58, 0x7DB3}, //10209 #CJK UNIFIED IDEOGRAPH + {0xBE59, 0x7DB4}, //10210 #CJK UNIFIED IDEOGRAPH + {0xBE5A, 0x7DB5}, //10211 #CJK UNIFIED IDEOGRAPH + {0xBE5B, 0x7DB6}, //10212 #CJK UNIFIED IDEOGRAPH + {0xBE5C, 0x7DB7}, //10213 #CJK UNIFIED IDEOGRAPH + {0xBE5D, 0x7DB8}, //10214 #CJK UNIFIED IDEOGRAPH + {0xBE5E, 0x7DB9}, //10215 #CJK UNIFIED IDEOGRAPH + {0xBE5F, 0x7DBA}, //10216 #CJK UNIFIED IDEOGRAPH + {0xBE60, 0x7DBB}, //10217 #CJK UNIFIED IDEOGRAPH + {0xBE61, 0x7DBC}, //10218 #CJK UNIFIED IDEOGRAPH + {0xBE62, 0x7DBD}, //10219 #CJK UNIFIED IDEOGRAPH + {0xBE63, 0x7DBE}, //10220 #CJK UNIFIED IDEOGRAPH + {0xBE64, 0x7DBF}, //10221 #CJK UNIFIED IDEOGRAPH + {0xBE65, 0x7DC0}, //10222 #CJK UNIFIED IDEOGRAPH + {0xBE66, 0x7DC1}, //10223 #CJK UNIFIED IDEOGRAPH + {0xBE67, 0x7DC2}, //10224 #CJK UNIFIED IDEOGRAPH + {0xBE68, 0x7DC3}, //10225 #CJK UNIFIED IDEOGRAPH + {0xBE69, 0x7DC4}, //10226 #CJK UNIFIED IDEOGRAPH + {0xBE6A, 0x7DC5}, //10227 #CJK UNIFIED IDEOGRAPH + {0xBE6B, 0x7DC6}, //10228 #CJK UNIFIED IDEOGRAPH + {0xBE6C, 0x7DC7}, //10229 #CJK UNIFIED IDEOGRAPH + {0xBE6D, 0x7DC8}, //10230 #CJK UNIFIED IDEOGRAPH + {0xBE6E, 0x7DC9}, //10231 #CJK UNIFIED IDEOGRAPH + {0xBE6F, 0x7DCA}, //10232 #CJK UNIFIED IDEOGRAPH + {0xBE70, 0x7DCB}, //10233 #CJK UNIFIED IDEOGRAPH + {0xBE71, 0x7DCC}, //10234 #CJK UNIFIED IDEOGRAPH + {0xBE72, 0x7DCD}, //10235 #CJK UNIFIED IDEOGRAPH + {0xBE73, 0x7DCE}, //10236 #CJK UNIFIED IDEOGRAPH + {0xBE74, 0x7DCF}, //10237 #CJK UNIFIED IDEOGRAPH + {0xBE75, 0x7DD0}, //10238 #CJK UNIFIED IDEOGRAPH + {0xBE76, 0x7DD1}, //10239 #CJK UNIFIED IDEOGRAPH + {0xBE77, 0x7DD2}, //10240 #CJK UNIFIED IDEOGRAPH + {0xBE78, 0x7DD3}, //10241 #CJK UNIFIED IDEOGRAPH + {0xBE79, 0x7DD4}, //10242 #CJK UNIFIED IDEOGRAPH + {0xBE7A, 0x7DD5}, //10243 #CJK UNIFIED IDEOGRAPH + {0xBE7B, 0x7DD6}, //10244 #CJK UNIFIED IDEOGRAPH + {0xBE7C, 0x7DD7}, //10245 #CJK UNIFIED IDEOGRAPH + {0xBE7D, 0x7DD8}, //10246 #CJK UNIFIED IDEOGRAPH + {0xBE7E, 0x7DD9}, //10247 #CJK UNIFIED IDEOGRAPH + {0xBE80, 0x7DDA}, //10248 #CJK UNIFIED IDEOGRAPH + {0xBE81, 0x7DDB}, //10249 #CJK UNIFIED IDEOGRAPH + {0xBE82, 0x7DDC}, //10250 #CJK UNIFIED IDEOGRAPH + {0xBE83, 0x7DDD}, //10251 #CJK UNIFIED IDEOGRAPH + {0xBE84, 0x7DDE}, //10252 #CJK UNIFIED IDEOGRAPH + {0xBE85, 0x7DDF}, //10253 #CJK UNIFIED IDEOGRAPH + {0xBE86, 0x7DE0}, //10254 #CJK UNIFIED IDEOGRAPH + {0xBE87, 0x7DE1}, //10255 #CJK UNIFIED IDEOGRAPH + {0xBE88, 0x7DE2}, //10256 #CJK UNIFIED IDEOGRAPH + {0xBE89, 0x7DE3}, //10257 #CJK UNIFIED IDEOGRAPH + {0xBE8A, 0x7DE4}, //10258 #CJK UNIFIED IDEOGRAPH + {0xBE8B, 0x7DE5}, //10259 #CJK UNIFIED IDEOGRAPH + {0xBE8C, 0x7DE6}, //10260 #CJK UNIFIED IDEOGRAPH + {0xBE8D, 0x7DE7}, //10261 #CJK UNIFIED IDEOGRAPH + {0xBE8E, 0x7DE8}, //10262 #CJK UNIFIED IDEOGRAPH + {0xBE8F, 0x7DE9}, //10263 #CJK UNIFIED IDEOGRAPH + {0xBE90, 0x7DEA}, //10264 #CJK UNIFIED IDEOGRAPH + {0xBE91, 0x7DEB}, //10265 #CJK UNIFIED IDEOGRAPH + {0xBE92, 0x7DEC}, //10266 #CJK UNIFIED IDEOGRAPH + {0xBE93, 0x7DED}, //10267 #CJK UNIFIED IDEOGRAPH + {0xBE94, 0x7DEE}, //10268 #CJK UNIFIED IDEOGRAPH + {0xBE95, 0x7DEF}, //10269 #CJK UNIFIED IDEOGRAPH + {0xBE96, 0x7DF0}, //10270 #CJK UNIFIED IDEOGRAPH + {0xBE97, 0x7DF1}, //10271 #CJK UNIFIED IDEOGRAPH + {0xBE98, 0x7DF2}, //10272 #CJK UNIFIED IDEOGRAPH + {0xBE99, 0x7DF3}, //10273 #CJK UNIFIED IDEOGRAPH + {0xBE9A, 0x7DF4}, //10274 #CJK UNIFIED IDEOGRAPH + {0xBE9B, 0x7DF5}, //10275 #CJK UNIFIED IDEOGRAPH + {0xBE9C, 0x7DF6}, //10276 #CJK UNIFIED IDEOGRAPH + {0xBE9D, 0x7DF7}, //10277 #CJK UNIFIED IDEOGRAPH + {0xBE9E, 0x7DF8}, //10278 #CJK UNIFIED IDEOGRAPH + {0xBE9F, 0x7DF9}, //10279 #CJK UNIFIED IDEOGRAPH + {0xBEA0, 0x7DFA}, //10280 #CJK UNIFIED IDEOGRAPH + {0xBEA1, 0x5C3D}, //10281 #CJK UNIFIED IDEOGRAPH + {0xBEA2, 0x52B2}, //10282 #CJK UNIFIED IDEOGRAPH + {0xBEA3, 0x8346}, //10283 #CJK UNIFIED IDEOGRAPH + {0xBEA4, 0x5162}, //10284 #CJK UNIFIED IDEOGRAPH + {0xBEA5, 0x830E}, //10285 #CJK UNIFIED IDEOGRAPH + {0xBEA6, 0x775B}, //10286 #CJK UNIFIED IDEOGRAPH + {0xBEA7, 0x6676}, //10287 #CJK UNIFIED IDEOGRAPH + {0xBEA8, 0x9CB8}, //10288 #CJK UNIFIED IDEOGRAPH + {0xBEA9, 0x4EAC}, //10289 #CJK UNIFIED IDEOGRAPH + {0xBEAA, 0x60CA}, //10290 #CJK UNIFIED IDEOGRAPH + {0xBEAB, 0x7CBE}, //10291 #CJK UNIFIED IDEOGRAPH + {0xBEAC, 0x7CB3}, //10292 #CJK UNIFIED IDEOGRAPH + {0xBEAD, 0x7ECF}, //10293 #CJK UNIFIED IDEOGRAPH + {0xBEAE, 0x4E95}, //10294 #CJK UNIFIED IDEOGRAPH + {0xBEAF, 0x8B66}, //10295 #CJK UNIFIED IDEOGRAPH + {0xBEB0, 0x666F}, //10296 #CJK UNIFIED IDEOGRAPH + {0xBEB1, 0x9888}, //10297 #CJK UNIFIED IDEOGRAPH + {0xBEB2, 0x9759}, //10298 #CJK UNIFIED IDEOGRAPH + {0xBEB3, 0x5883}, //10299 #CJK UNIFIED IDEOGRAPH + {0xBEB4, 0x656C}, //10300 #CJK UNIFIED IDEOGRAPH + {0xBEB5, 0x955C}, //10301 #CJK UNIFIED IDEOGRAPH + {0xBEB6, 0x5F84}, //10302 #CJK UNIFIED IDEOGRAPH + {0xBEB7, 0x75C9}, //10303 #CJK UNIFIED IDEOGRAPH + {0xBEB8, 0x9756}, //10304 #CJK UNIFIED IDEOGRAPH + {0xBEB9, 0x7ADF}, //10305 #CJK UNIFIED IDEOGRAPH + {0xBEBA, 0x7ADE}, //10306 #CJK UNIFIED IDEOGRAPH + {0xBEBB, 0x51C0}, //10307 #CJK UNIFIED IDEOGRAPH + {0xBEBC, 0x70AF}, //10308 #CJK UNIFIED IDEOGRAPH + {0xBEBD, 0x7A98}, //10309 #CJK UNIFIED IDEOGRAPH + {0xBEBE, 0x63EA}, //10310 #CJK UNIFIED IDEOGRAPH + {0xBEBF, 0x7A76}, //10311 #CJK UNIFIED IDEOGRAPH + {0xBEC0, 0x7EA0}, //10312 #CJK UNIFIED IDEOGRAPH + {0xBEC1, 0x7396}, //10313 #CJK UNIFIED IDEOGRAPH + {0xBEC2, 0x97ED}, //10314 #CJK UNIFIED IDEOGRAPH + {0xBEC3, 0x4E45}, //10315 #CJK UNIFIED IDEOGRAPH + {0xBEC4, 0x7078}, //10316 #CJK UNIFIED IDEOGRAPH + {0xBEC5, 0x4E5D}, //10317 #CJK UNIFIED IDEOGRAPH + {0xBEC6, 0x9152}, //10318 #CJK UNIFIED IDEOGRAPH + {0xBEC7, 0x53A9}, //10319 #CJK UNIFIED IDEOGRAPH + {0xBEC8, 0x6551}, //10320 #CJK UNIFIED IDEOGRAPH + {0xBEC9, 0x65E7}, //10321 #CJK UNIFIED IDEOGRAPH + {0xBECA, 0x81FC}, //10322 #CJK UNIFIED IDEOGRAPH + {0xBECB, 0x8205}, //10323 #CJK UNIFIED IDEOGRAPH + {0xBECC, 0x548E}, //10324 #CJK UNIFIED IDEOGRAPH + {0xBECD, 0x5C31}, //10325 #CJK UNIFIED IDEOGRAPH + {0xBECE, 0x759A}, //10326 #CJK UNIFIED IDEOGRAPH + {0xBECF, 0x97A0}, //10327 #CJK UNIFIED IDEOGRAPH + {0xBED0, 0x62D8}, //10328 #CJK UNIFIED IDEOGRAPH + {0xBED1, 0x72D9}, //10329 #CJK UNIFIED IDEOGRAPH + {0xBED2, 0x75BD}, //10330 #CJK UNIFIED IDEOGRAPH + {0xBED3, 0x5C45}, //10331 #CJK UNIFIED IDEOGRAPH + {0xBED4, 0x9A79}, //10332 #CJK UNIFIED IDEOGRAPH + {0xBED5, 0x83CA}, //10333 #CJK UNIFIED IDEOGRAPH + {0xBED6, 0x5C40}, //10334 #CJK UNIFIED IDEOGRAPH + {0xBED7, 0x5480}, //10335 #CJK UNIFIED IDEOGRAPH + {0xBED8, 0x77E9}, //10336 #CJK UNIFIED IDEOGRAPH + {0xBED9, 0x4E3E}, //10337 #CJK UNIFIED IDEOGRAPH + {0xBEDA, 0x6CAE}, //10338 #CJK UNIFIED IDEOGRAPH + {0xBEDB, 0x805A}, //10339 #CJK UNIFIED IDEOGRAPH + {0xBEDC, 0x62D2}, //10340 #CJK UNIFIED IDEOGRAPH + {0xBEDD, 0x636E}, //10341 #CJK UNIFIED IDEOGRAPH + {0xBEDE, 0x5DE8}, //10342 #CJK UNIFIED IDEOGRAPH + {0xBEDF, 0x5177}, //10343 #CJK UNIFIED IDEOGRAPH + {0xBEE0, 0x8DDD}, //10344 #CJK UNIFIED IDEOGRAPH + {0xBEE1, 0x8E1E}, //10345 #CJK UNIFIED IDEOGRAPH + {0xBEE2, 0x952F}, //10346 #CJK UNIFIED IDEOGRAPH + {0xBEE3, 0x4FF1}, //10347 #CJK UNIFIED IDEOGRAPH + {0xBEE4, 0x53E5}, //10348 #CJK UNIFIED IDEOGRAPH + {0xBEE5, 0x60E7}, //10349 #CJK UNIFIED IDEOGRAPH + {0xBEE6, 0x70AC}, //10350 #CJK UNIFIED IDEOGRAPH + {0xBEE7, 0x5267}, //10351 #CJK UNIFIED IDEOGRAPH + {0xBEE8, 0x6350}, //10352 #CJK UNIFIED IDEOGRAPH + {0xBEE9, 0x9E43}, //10353 #CJK UNIFIED IDEOGRAPH + {0xBEEA, 0x5A1F}, //10354 #CJK UNIFIED IDEOGRAPH + {0xBEEB, 0x5026}, //10355 #CJK UNIFIED IDEOGRAPH + {0xBEEC, 0x7737}, //10356 #CJK UNIFIED IDEOGRAPH + {0xBEED, 0x5377}, //10357 #CJK UNIFIED IDEOGRAPH + {0xBEEE, 0x7EE2}, //10358 #CJK UNIFIED IDEOGRAPH + {0xBEEF, 0x6485}, //10359 #CJK UNIFIED IDEOGRAPH + {0xBEF0, 0x652B}, //10360 #CJK UNIFIED IDEOGRAPH + {0xBEF1, 0x6289}, //10361 #CJK UNIFIED IDEOGRAPH + {0xBEF2, 0x6398}, //10362 #CJK UNIFIED IDEOGRAPH + {0xBEF3, 0x5014}, //10363 #CJK UNIFIED IDEOGRAPH + {0xBEF4, 0x7235}, //10364 #CJK UNIFIED IDEOGRAPH + {0xBEF5, 0x89C9}, //10365 #CJK UNIFIED IDEOGRAPH + {0xBEF6, 0x51B3}, //10366 #CJK UNIFIED IDEOGRAPH + {0xBEF7, 0x8BC0}, //10367 #CJK UNIFIED IDEOGRAPH + {0xBEF8, 0x7EDD}, //10368 #CJK UNIFIED IDEOGRAPH + {0xBEF9, 0x5747}, //10369 #CJK UNIFIED IDEOGRAPH + {0xBEFA, 0x83CC}, //10370 #CJK UNIFIED IDEOGRAPH + {0xBEFB, 0x94A7}, //10371 #CJK UNIFIED IDEOGRAPH + {0xBEFC, 0x519B}, //10372 #CJK UNIFIED IDEOGRAPH + {0xBEFD, 0x541B}, //10373 #CJK UNIFIED IDEOGRAPH + {0xBEFE, 0x5CFB}, //10374 #CJK UNIFIED IDEOGRAPH + {0xBF40, 0x7DFB}, //10375 #CJK UNIFIED IDEOGRAPH + {0xBF41, 0x7DFC}, //10376 #CJK UNIFIED IDEOGRAPH + {0xBF42, 0x7DFD}, //10377 #CJK UNIFIED IDEOGRAPH + {0xBF43, 0x7DFE}, //10378 #CJK UNIFIED IDEOGRAPH + {0xBF44, 0x7DFF}, //10379 #CJK UNIFIED IDEOGRAPH + {0xBF45, 0x7E00}, //10380 #CJK UNIFIED IDEOGRAPH + {0xBF46, 0x7E01}, //10381 #CJK UNIFIED IDEOGRAPH + {0xBF47, 0x7E02}, //10382 #CJK UNIFIED IDEOGRAPH + {0xBF48, 0x7E03}, //10383 #CJK UNIFIED IDEOGRAPH + {0xBF49, 0x7E04}, //10384 #CJK UNIFIED IDEOGRAPH + {0xBF4A, 0x7E05}, //10385 #CJK UNIFIED IDEOGRAPH + {0xBF4B, 0x7E06}, //10386 #CJK UNIFIED IDEOGRAPH + {0xBF4C, 0x7E07}, //10387 #CJK UNIFIED IDEOGRAPH + {0xBF4D, 0x7E08}, //10388 #CJK UNIFIED IDEOGRAPH + {0xBF4E, 0x7E09}, //10389 #CJK UNIFIED IDEOGRAPH + {0xBF4F, 0x7E0A}, //10390 #CJK UNIFIED IDEOGRAPH + {0xBF50, 0x7E0B}, //10391 #CJK UNIFIED IDEOGRAPH + {0xBF51, 0x7E0C}, //10392 #CJK UNIFIED IDEOGRAPH + {0xBF52, 0x7E0D}, //10393 #CJK UNIFIED IDEOGRAPH + {0xBF53, 0x7E0E}, //10394 #CJK UNIFIED IDEOGRAPH + {0xBF54, 0x7E0F}, //10395 #CJK UNIFIED IDEOGRAPH + {0xBF55, 0x7E10}, //10396 #CJK UNIFIED IDEOGRAPH + {0xBF56, 0x7E11}, //10397 #CJK UNIFIED IDEOGRAPH + {0xBF57, 0x7E12}, //10398 #CJK UNIFIED IDEOGRAPH + {0xBF58, 0x7E13}, //10399 #CJK UNIFIED IDEOGRAPH + {0xBF59, 0x7E14}, //10400 #CJK UNIFIED IDEOGRAPH + {0xBF5A, 0x7E15}, //10401 #CJK UNIFIED IDEOGRAPH + {0xBF5B, 0x7E16}, //10402 #CJK UNIFIED IDEOGRAPH + {0xBF5C, 0x7E17}, //10403 #CJK UNIFIED IDEOGRAPH + {0xBF5D, 0x7E18}, //10404 #CJK UNIFIED IDEOGRAPH + {0xBF5E, 0x7E19}, //10405 #CJK UNIFIED IDEOGRAPH + {0xBF5F, 0x7E1A}, //10406 #CJK UNIFIED IDEOGRAPH + {0xBF60, 0x7E1B}, //10407 #CJK UNIFIED IDEOGRAPH + {0xBF61, 0x7E1C}, //10408 #CJK UNIFIED IDEOGRAPH + {0xBF62, 0x7E1D}, //10409 #CJK UNIFIED IDEOGRAPH + {0xBF63, 0x7E1E}, //10410 #CJK UNIFIED IDEOGRAPH + {0xBF64, 0x7E1F}, //10411 #CJK UNIFIED IDEOGRAPH + {0xBF65, 0x7E20}, //10412 #CJK UNIFIED IDEOGRAPH + {0xBF66, 0x7E21}, //10413 #CJK UNIFIED IDEOGRAPH + {0xBF67, 0x7E22}, //10414 #CJK UNIFIED IDEOGRAPH + {0xBF68, 0x7E23}, //10415 #CJK UNIFIED IDEOGRAPH + {0xBF69, 0x7E24}, //10416 #CJK UNIFIED IDEOGRAPH + {0xBF6A, 0x7E25}, //10417 #CJK UNIFIED IDEOGRAPH + {0xBF6B, 0x7E26}, //10418 #CJK UNIFIED IDEOGRAPH + {0xBF6C, 0x7E27}, //10419 #CJK UNIFIED IDEOGRAPH + {0xBF6D, 0x7E28}, //10420 #CJK UNIFIED IDEOGRAPH + {0xBF6E, 0x7E29}, //10421 #CJK UNIFIED IDEOGRAPH + {0xBF6F, 0x7E2A}, //10422 #CJK UNIFIED IDEOGRAPH + {0xBF70, 0x7E2B}, //10423 #CJK UNIFIED IDEOGRAPH + {0xBF71, 0x7E2C}, //10424 #CJK UNIFIED IDEOGRAPH + {0xBF72, 0x7E2D}, //10425 #CJK UNIFIED IDEOGRAPH + {0xBF73, 0x7E2E}, //10426 #CJK UNIFIED IDEOGRAPH + {0xBF74, 0x7E2F}, //10427 #CJK UNIFIED IDEOGRAPH + {0xBF75, 0x7E30}, //10428 #CJK UNIFIED IDEOGRAPH + {0xBF76, 0x7E31}, //10429 #CJK UNIFIED IDEOGRAPH + {0xBF77, 0x7E32}, //10430 #CJK UNIFIED IDEOGRAPH + {0xBF78, 0x7E33}, //10431 #CJK UNIFIED IDEOGRAPH + {0xBF79, 0x7E34}, //10432 #CJK UNIFIED IDEOGRAPH + {0xBF7A, 0x7E35}, //10433 #CJK UNIFIED IDEOGRAPH + {0xBF7B, 0x7E36}, //10434 #CJK UNIFIED IDEOGRAPH + {0xBF7C, 0x7E37}, //10435 #CJK UNIFIED IDEOGRAPH + {0xBF7D, 0x7E38}, //10436 #CJK UNIFIED IDEOGRAPH + {0xBF7E, 0x7E39}, //10437 #CJK UNIFIED IDEOGRAPH + {0xBF80, 0x7E3A}, //10438 #CJK UNIFIED IDEOGRAPH + {0xBF81, 0x7E3C}, //10439 #CJK UNIFIED IDEOGRAPH + {0xBF82, 0x7E3D}, //10440 #CJK UNIFIED IDEOGRAPH + {0xBF83, 0x7E3E}, //10441 #CJK UNIFIED IDEOGRAPH + {0xBF84, 0x7E3F}, //10442 #CJK UNIFIED IDEOGRAPH + {0xBF85, 0x7E40}, //10443 #CJK UNIFIED IDEOGRAPH + {0xBF86, 0x7E42}, //10444 #CJK UNIFIED IDEOGRAPH + {0xBF87, 0x7E43}, //10445 #CJK UNIFIED IDEOGRAPH + {0xBF88, 0x7E44}, //10446 #CJK UNIFIED IDEOGRAPH + {0xBF89, 0x7E45}, //10447 #CJK UNIFIED IDEOGRAPH + {0xBF8A, 0x7E46}, //10448 #CJK UNIFIED IDEOGRAPH + {0xBF8B, 0x7E48}, //10449 #CJK UNIFIED IDEOGRAPH + {0xBF8C, 0x7E49}, //10450 #CJK UNIFIED IDEOGRAPH + {0xBF8D, 0x7E4A}, //10451 #CJK UNIFIED IDEOGRAPH + {0xBF8E, 0x7E4B}, //10452 #CJK UNIFIED IDEOGRAPH + {0xBF8F, 0x7E4C}, //10453 #CJK UNIFIED IDEOGRAPH + {0xBF90, 0x7E4D}, //10454 #CJK UNIFIED IDEOGRAPH + {0xBF91, 0x7E4E}, //10455 #CJK UNIFIED IDEOGRAPH + {0xBF92, 0x7E4F}, //10456 #CJK UNIFIED IDEOGRAPH + {0xBF93, 0x7E50}, //10457 #CJK UNIFIED IDEOGRAPH + {0xBF94, 0x7E51}, //10458 #CJK UNIFIED IDEOGRAPH + {0xBF95, 0x7E52}, //10459 #CJK UNIFIED IDEOGRAPH + {0xBF96, 0x7E53}, //10460 #CJK UNIFIED IDEOGRAPH + {0xBF97, 0x7E54}, //10461 #CJK UNIFIED IDEOGRAPH + {0xBF98, 0x7E55}, //10462 #CJK UNIFIED IDEOGRAPH + {0xBF99, 0x7E56}, //10463 #CJK UNIFIED IDEOGRAPH + {0xBF9A, 0x7E57}, //10464 #CJK UNIFIED IDEOGRAPH + {0xBF9B, 0x7E58}, //10465 #CJK UNIFIED IDEOGRAPH + {0xBF9C, 0x7E59}, //10466 #CJK UNIFIED IDEOGRAPH + {0xBF9D, 0x7E5A}, //10467 #CJK UNIFIED IDEOGRAPH + {0xBF9E, 0x7E5B}, //10468 #CJK UNIFIED IDEOGRAPH + {0xBF9F, 0x7E5C}, //10469 #CJK UNIFIED IDEOGRAPH + {0xBFA0, 0x7E5D}, //10470 #CJK UNIFIED IDEOGRAPH + {0xBFA1, 0x4FCA}, //10471 #CJK UNIFIED IDEOGRAPH + {0xBFA2, 0x7AE3}, //10472 #CJK UNIFIED IDEOGRAPH + {0xBFA3, 0x6D5A}, //10473 #CJK UNIFIED IDEOGRAPH + {0xBFA4, 0x90E1}, //10474 #CJK UNIFIED IDEOGRAPH + {0xBFA5, 0x9A8F}, //10475 #CJK UNIFIED IDEOGRAPH + {0xBFA6, 0x5580}, //10476 #CJK UNIFIED IDEOGRAPH + {0xBFA7, 0x5496}, //10477 #CJK UNIFIED IDEOGRAPH + {0xBFA8, 0x5361}, //10478 #CJK UNIFIED IDEOGRAPH + {0xBFA9, 0x54AF}, //10479 #CJK UNIFIED IDEOGRAPH + {0xBFAA, 0x5F00}, //10480 #CJK UNIFIED IDEOGRAPH + {0xBFAB, 0x63E9}, //10481 #CJK UNIFIED IDEOGRAPH + {0xBFAC, 0x6977}, //10482 #CJK UNIFIED IDEOGRAPH + {0xBFAD, 0x51EF}, //10483 #CJK UNIFIED IDEOGRAPH + {0xBFAE, 0x6168}, //10484 #CJK UNIFIED IDEOGRAPH + {0xBFAF, 0x520A}, //10485 #CJK UNIFIED IDEOGRAPH + {0xBFB0, 0x582A}, //10486 #CJK UNIFIED IDEOGRAPH + {0xBFB1, 0x52D8}, //10487 #CJK UNIFIED IDEOGRAPH + {0xBFB2, 0x574E}, //10488 #CJK UNIFIED IDEOGRAPH + {0xBFB3, 0x780D}, //10489 #CJK UNIFIED IDEOGRAPH + {0xBFB4, 0x770B}, //10490 #CJK UNIFIED IDEOGRAPH + {0xBFB5, 0x5EB7}, //10491 #CJK UNIFIED IDEOGRAPH + {0xBFB6, 0x6177}, //10492 #CJK UNIFIED IDEOGRAPH + {0xBFB7, 0x7CE0}, //10493 #CJK UNIFIED IDEOGRAPH + {0xBFB8, 0x625B}, //10494 #CJK UNIFIED IDEOGRAPH + {0xBFB9, 0x6297}, //10495 #CJK UNIFIED IDEOGRAPH + {0xBFBA, 0x4EA2}, //10496 #CJK UNIFIED IDEOGRAPH + {0xBFBB, 0x7095}, //10497 #CJK UNIFIED IDEOGRAPH + {0xBFBC, 0x8003}, //10498 #CJK UNIFIED IDEOGRAPH + {0xBFBD, 0x62F7}, //10499 #CJK UNIFIED IDEOGRAPH + {0xBFBE, 0x70E4}, //10500 #CJK UNIFIED IDEOGRAPH + {0xBFBF, 0x9760}, //10501 #CJK UNIFIED IDEOGRAPH + {0xBFC0, 0x5777}, //10502 #CJK UNIFIED IDEOGRAPH + {0xBFC1, 0x82DB}, //10503 #CJK UNIFIED IDEOGRAPH + {0xBFC2, 0x67EF}, //10504 #CJK UNIFIED IDEOGRAPH + {0xBFC3, 0x68F5}, //10505 #CJK UNIFIED IDEOGRAPH + {0xBFC4, 0x78D5}, //10506 #CJK UNIFIED IDEOGRAPH + {0xBFC5, 0x9897}, //10507 #CJK UNIFIED IDEOGRAPH + {0xBFC6, 0x79D1}, //10508 #CJK UNIFIED IDEOGRAPH + {0xBFC7, 0x58F3}, //10509 #CJK UNIFIED IDEOGRAPH + {0xBFC8, 0x54B3}, //10510 #CJK UNIFIED IDEOGRAPH + {0xBFC9, 0x53EF}, //10511 #CJK UNIFIED IDEOGRAPH + {0xBFCA, 0x6E34}, //10512 #CJK UNIFIED IDEOGRAPH + {0xBFCB, 0x514B}, //10513 #CJK UNIFIED IDEOGRAPH + {0xBFCC, 0x523B}, //10514 #CJK UNIFIED IDEOGRAPH + {0xBFCD, 0x5BA2}, //10515 #CJK UNIFIED IDEOGRAPH + {0xBFCE, 0x8BFE}, //10516 #CJK UNIFIED IDEOGRAPH + {0xBFCF, 0x80AF}, //10517 #CJK UNIFIED IDEOGRAPH + {0xBFD0, 0x5543}, //10518 #CJK UNIFIED IDEOGRAPH + {0xBFD1, 0x57A6}, //10519 #CJK UNIFIED IDEOGRAPH + {0xBFD2, 0x6073}, //10520 #CJK UNIFIED IDEOGRAPH + {0xBFD3, 0x5751}, //10521 #CJK UNIFIED IDEOGRAPH + {0xBFD4, 0x542D}, //10522 #CJK UNIFIED IDEOGRAPH + {0xBFD5, 0x7A7A}, //10523 #CJK UNIFIED IDEOGRAPH + {0xBFD6, 0x6050}, //10524 #CJK UNIFIED IDEOGRAPH + {0xBFD7, 0x5B54}, //10525 #CJK UNIFIED IDEOGRAPH + {0xBFD8, 0x63A7}, //10526 #CJK UNIFIED IDEOGRAPH + {0xBFD9, 0x62A0}, //10527 #CJK UNIFIED IDEOGRAPH + {0xBFDA, 0x53E3}, //10528 #CJK UNIFIED IDEOGRAPH + {0xBFDB, 0x6263}, //10529 #CJK UNIFIED IDEOGRAPH + {0xBFDC, 0x5BC7}, //10530 #CJK UNIFIED IDEOGRAPH + {0xBFDD, 0x67AF}, //10531 #CJK UNIFIED IDEOGRAPH + {0xBFDE, 0x54ED}, //10532 #CJK UNIFIED IDEOGRAPH + {0xBFDF, 0x7A9F}, //10533 #CJK UNIFIED IDEOGRAPH + {0xBFE0, 0x82E6}, //10534 #CJK UNIFIED IDEOGRAPH + {0xBFE1, 0x9177}, //10535 #CJK UNIFIED IDEOGRAPH + {0xBFE2, 0x5E93}, //10536 #CJK UNIFIED IDEOGRAPH + {0xBFE3, 0x88E4}, //10537 #CJK UNIFIED IDEOGRAPH + {0xBFE4, 0x5938}, //10538 #CJK UNIFIED IDEOGRAPH + {0xBFE5, 0x57AE}, //10539 #CJK UNIFIED IDEOGRAPH + {0xBFE6, 0x630E}, //10540 #CJK UNIFIED IDEOGRAPH + {0xBFE7, 0x8DE8}, //10541 #CJK UNIFIED IDEOGRAPH + {0xBFE8, 0x80EF}, //10542 #CJK UNIFIED IDEOGRAPH + {0xBFE9, 0x5757}, //10543 #CJK UNIFIED IDEOGRAPH + {0xBFEA, 0x7B77}, //10544 #CJK UNIFIED IDEOGRAPH + {0xBFEB, 0x4FA9}, //10545 #CJK UNIFIED IDEOGRAPH + {0xBFEC, 0x5FEB}, //10546 #CJK UNIFIED IDEOGRAPH + {0xBFED, 0x5BBD}, //10547 #CJK UNIFIED IDEOGRAPH + {0xBFEE, 0x6B3E}, //10548 #CJK UNIFIED IDEOGRAPH + {0xBFEF, 0x5321}, //10549 #CJK UNIFIED IDEOGRAPH + {0xBFF0, 0x7B50}, //10550 #CJK UNIFIED IDEOGRAPH + {0xBFF1, 0x72C2}, //10551 #CJK UNIFIED IDEOGRAPH + {0xBFF2, 0x6846}, //10552 #CJK UNIFIED IDEOGRAPH + {0xBFF3, 0x77FF}, //10553 #CJK UNIFIED IDEOGRAPH + {0xBFF4, 0x7736}, //10554 #CJK UNIFIED IDEOGRAPH + {0xBFF5, 0x65F7}, //10555 #CJK UNIFIED IDEOGRAPH + {0xBFF6, 0x51B5}, //10556 #CJK UNIFIED IDEOGRAPH + {0xBFF7, 0x4E8F}, //10557 #CJK UNIFIED IDEOGRAPH + {0xBFF8, 0x76D4}, //10558 #CJK UNIFIED IDEOGRAPH + {0xBFF9, 0x5CBF}, //10559 #CJK UNIFIED IDEOGRAPH + {0xBFFA, 0x7AA5}, //10560 #CJK UNIFIED IDEOGRAPH + {0xBFFB, 0x8475}, //10561 #CJK UNIFIED IDEOGRAPH + {0xBFFC, 0x594E}, //10562 #CJK UNIFIED IDEOGRAPH + {0xBFFD, 0x9B41}, //10563 #CJK UNIFIED IDEOGRAPH + {0xBFFE, 0x5080}, //10564 #CJK UNIFIED IDEOGRAPH + {0xC040, 0x7E5E}, //10565 #CJK UNIFIED IDEOGRAPH + {0xC041, 0x7E5F}, //10566 #CJK UNIFIED IDEOGRAPH + {0xC042, 0x7E60}, //10567 #CJK UNIFIED IDEOGRAPH + {0xC043, 0x7E61}, //10568 #CJK UNIFIED IDEOGRAPH + {0xC044, 0x7E62}, //10569 #CJK UNIFIED IDEOGRAPH + {0xC045, 0x7E63}, //10570 #CJK UNIFIED IDEOGRAPH + {0xC046, 0x7E64}, //10571 #CJK UNIFIED IDEOGRAPH + {0xC047, 0x7E65}, //10572 #CJK UNIFIED IDEOGRAPH + {0xC048, 0x7E66}, //10573 #CJK UNIFIED IDEOGRAPH + {0xC049, 0x7E67}, //10574 #CJK UNIFIED IDEOGRAPH + {0xC04A, 0x7E68}, //10575 #CJK UNIFIED IDEOGRAPH + {0xC04B, 0x7E69}, //10576 #CJK UNIFIED IDEOGRAPH + {0xC04C, 0x7E6A}, //10577 #CJK UNIFIED IDEOGRAPH + {0xC04D, 0x7E6B}, //10578 #CJK UNIFIED IDEOGRAPH + {0xC04E, 0x7E6C}, //10579 #CJK UNIFIED IDEOGRAPH + {0xC04F, 0x7E6D}, //10580 #CJK UNIFIED IDEOGRAPH + {0xC050, 0x7E6E}, //10581 #CJK UNIFIED IDEOGRAPH + {0xC051, 0x7E6F}, //10582 #CJK UNIFIED IDEOGRAPH + {0xC052, 0x7E70}, //10583 #CJK UNIFIED IDEOGRAPH + {0xC053, 0x7E71}, //10584 #CJK UNIFIED IDEOGRAPH + {0xC054, 0x7E72}, //10585 #CJK UNIFIED IDEOGRAPH + {0xC055, 0x7E73}, //10586 #CJK UNIFIED IDEOGRAPH + {0xC056, 0x7E74}, //10587 #CJK UNIFIED IDEOGRAPH + {0xC057, 0x7E75}, //10588 #CJK UNIFIED IDEOGRAPH + {0xC058, 0x7E76}, //10589 #CJK UNIFIED IDEOGRAPH + {0xC059, 0x7E77}, //10590 #CJK UNIFIED IDEOGRAPH + {0xC05A, 0x7E78}, //10591 #CJK UNIFIED IDEOGRAPH + {0xC05B, 0x7E79}, //10592 #CJK UNIFIED IDEOGRAPH + {0xC05C, 0x7E7A}, //10593 #CJK UNIFIED IDEOGRAPH + {0xC05D, 0x7E7B}, //10594 #CJK UNIFIED IDEOGRAPH + {0xC05E, 0x7E7C}, //10595 #CJK UNIFIED IDEOGRAPH + {0xC05F, 0x7E7D}, //10596 #CJK UNIFIED IDEOGRAPH + {0xC060, 0x7E7E}, //10597 #CJK UNIFIED IDEOGRAPH + {0xC061, 0x7E7F}, //10598 #CJK UNIFIED IDEOGRAPH + {0xC062, 0x7E80}, //10599 #CJK UNIFIED IDEOGRAPH + {0xC063, 0x7E81}, //10600 #CJK UNIFIED IDEOGRAPH + {0xC064, 0x7E83}, //10601 #CJK UNIFIED IDEOGRAPH + {0xC065, 0x7E84}, //10602 #CJK UNIFIED IDEOGRAPH + {0xC066, 0x7E85}, //10603 #CJK UNIFIED IDEOGRAPH + {0xC067, 0x7E86}, //10604 #CJK UNIFIED IDEOGRAPH + {0xC068, 0x7E87}, //10605 #CJK UNIFIED IDEOGRAPH + {0xC069, 0x7E88}, //10606 #CJK UNIFIED IDEOGRAPH + {0xC06A, 0x7E89}, //10607 #CJK UNIFIED IDEOGRAPH + {0xC06B, 0x7E8A}, //10608 #CJK UNIFIED IDEOGRAPH + {0xC06C, 0x7E8B}, //10609 #CJK UNIFIED IDEOGRAPH + {0xC06D, 0x7E8C}, //10610 #CJK UNIFIED IDEOGRAPH + {0xC06E, 0x7E8D}, //10611 #CJK UNIFIED IDEOGRAPH + {0xC06F, 0x7E8E}, //10612 #CJK UNIFIED IDEOGRAPH + {0xC070, 0x7E8F}, //10613 #CJK UNIFIED IDEOGRAPH + {0xC071, 0x7E90}, //10614 #CJK UNIFIED IDEOGRAPH + {0xC072, 0x7E91}, //10615 #CJK UNIFIED IDEOGRAPH + {0xC073, 0x7E92}, //10616 #CJK UNIFIED IDEOGRAPH + {0xC074, 0x7E93}, //10617 #CJK UNIFIED IDEOGRAPH + {0xC075, 0x7E94}, //10618 #CJK UNIFIED IDEOGRAPH + {0xC076, 0x7E95}, //10619 #CJK UNIFIED IDEOGRAPH + {0xC077, 0x7E96}, //10620 #CJK UNIFIED IDEOGRAPH + {0xC078, 0x7E97}, //10621 #CJK UNIFIED IDEOGRAPH + {0xC079, 0x7E98}, //10622 #CJK UNIFIED IDEOGRAPH + {0xC07A, 0x7E99}, //10623 #CJK UNIFIED IDEOGRAPH + {0xC07B, 0x7E9A}, //10624 #CJK UNIFIED IDEOGRAPH + {0xC07C, 0x7E9C}, //10625 #CJK UNIFIED IDEOGRAPH + {0xC07D, 0x7E9D}, //10626 #CJK UNIFIED IDEOGRAPH + {0xC07E, 0x7E9E}, //10627 #CJK UNIFIED IDEOGRAPH + {0xC080, 0x7EAE}, //10628 #CJK UNIFIED IDEOGRAPH + {0xC081, 0x7EB4}, //10629 #CJK UNIFIED IDEOGRAPH + {0xC082, 0x7EBB}, //10630 #CJK UNIFIED IDEOGRAPH + {0xC083, 0x7EBC}, //10631 #CJK UNIFIED IDEOGRAPH + {0xC084, 0x7ED6}, //10632 #CJK UNIFIED IDEOGRAPH + {0xC085, 0x7EE4}, //10633 #CJK UNIFIED IDEOGRAPH + {0xC086, 0x7EEC}, //10634 #CJK UNIFIED IDEOGRAPH + {0xC087, 0x7EF9}, //10635 #CJK UNIFIED IDEOGRAPH + {0xC088, 0x7F0A}, //10636 #CJK UNIFIED IDEOGRAPH + {0xC089, 0x7F10}, //10637 #CJK UNIFIED IDEOGRAPH + {0xC08A, 0x7F1E}, //10638 #CJK UNIFIED IDEOGRAPH + {0xC08B, 0x7F37}, //10639 #CJK UNIFIED IDEOGRAPH + {0xC08C, 0x7F39}, //10640 #CJK UNIFIED IDEOGRAPH + {0xC08D, 0x7F3B}, //10641 #CJK UNIFIED IDEOGRAPH + {0xC08E, 0x7F3C}, //10642 #CJK UNIFIED IDEOGRAPH + {0xC08F, 0x7F3D}, //10643 #CJK UNIFIED IDEOGRAPH + {0xC090, 0x7F3E}, //10644 #CJK UNIFIED IDEOGRAPH + {0xC091, 0x7F3F}, //10645 #CJK UNIFIED IDEOGRAPH + {0xC092, 0x7F40}, //10646 #CJK UNIFIED IDEOGRAPH + {0xC093, 0x7F41}, //10647 #CJK UNIFIED IDEOGRAPH + {0xC094, 0x7F43}, //10648 #CJK UNIFIED IDEOGRAPH + {0xC095, 0x7F46}, //10649 #CJK UNIFIED IDEOGRAPH + {0xC096, 0x7F47}, //10650 #CJK UNIFIED IDEOGRAPH + {0xC097, 0x7F48}, //10651 #CJK UNIFIED IDEOGRAPH + {0xC098, 0x7F49}, //10652 #CJK UNIFIED IDEOGRAPH + {0xC099, 0x7F4A}, //10653 #CJK UNIFIED IDEOGRAPH + {0xC09A, 0x7F4B}, //10654 #CJK UNIFIED IDEOGRAPH + {0xC09B, 0x7F4C}, //10655 #CJK UNIFIED IDEOGRAPH + {0xC09C, 0x7F4D}, //10656 #CJK UNIFIED IDEOGRAPH + {0xC09D, 0x7F4E}, //10657 #CJK UNIFIED IDEOGRAPH + {0xC09E, 0x7F4F}, //10658 #CJK UNIFIED IDEOGRAPH + {0xC09F, 0x7F52}, //10659 #CJK UNIFIED IDEOGRAPH + {0xC0A0, 0x7F53}, //10660 #CJK UNIFIED IDEOGRAPH + {0xC0A1, 0x9988}, //10661 #CJK UNIFIED IDEOGRAPH + {0xC0A2, 0x6127}, //10662 #CJK UNIFIED IDEOGRAPH + {0xC0A3, 0x6E83}, //10663 #CJK UNIFIED IDEOGRAPH + {0xC0A4, 0x5764}, //10664 #CJK UNIFIED IDEOGRAPH + {0xC0A5, 0x6606}, //10665 #CJK UNIFIED IDEOGRAPH + {0xC0A6, 0x6346}, //10666 #CJK UNIFIED IDEOGRAPH + {0xC0A7, 0x56F0}, //10667 #CJK UNIFIED IDEOGRAPH + {0xC0A8, 0x62EC}, //10668 #CJK UNIFIED IDEOGRAPH + {0xC0A9, 0x6269}, //10669 #CJK UNIFIED IDEOGRAPH + {0xC0AA, 0x5ED3}, //10670 #CJK UNIFIED IDEOGRAPH + {0xC0AB, 0x9614}, //10671 #CJK UNIFIED IDEOGRAPH + {0xC0AC, 0x5783}, //10672 #CJK UNIFIED IDEOGRAPH + {0xC0AD, 0x62C9}, //10673 #CJK UNIFIED IDEOGRAPH + {0xC0AE, 0x5587}, //10674 #CJK UNIFIED IDEOGRAPH + {0xC0AF, 0x8721}, //10675 #CJK UNIFIED IDEOGRAPH + {0xC0B0, 0x814A}, //10676 #CJK UNIFIED IDEOGRAPH + {0xC0B1, 0x8FA3}, //10677 #CJK UNIFIED IDEOGRAPH + {0xC0B2, 0x5566}, //10678 #CJK UNIFIED IDEOGRAPH + {0xC0B3, 0x83B1}, //10679 #CJK UNIFIED IDEOGRAPH + {0xC0B4, 0x6765}, //10680 #CJK UNIFIED IDEOGRAPH + {0xC0B5, 0x8D56}, //10681 #CJK UNIFIED IDEOGRAPH + {0xC0B6, 0x84DD}, //10682 #CJK UNIFIED IDEOGRAPH + {0xC0B7, 0x5A6A}, //10683 #CJK UNIFIED IDEOGRAPH + {0xC0B8, 0x680F}, //10684 #CJK UNIFIED IDEOGRAPH + {0xC0B9, 0x62E6}, //10685 #CJK UNIFIED IDEOGRAPH + {0xC0BA, 0x7BEE}, //10686 #CJK UNIFIED IDEOGRAPH + {0xC0BB, 0x9611}, //10687 #CJK UNIFIED IDEOGRAPH + {0xC0BC, 0x5170}, //10688 #CJK UNIFIED IDEOGRAPH + {0xC0BD, 0x6F9C}, //10689 #CJK UNIFIED IDEOGRAPH + {0xC0BE, 0x8C30}, //10690 #CJK UNIFIED IDEOGRAPH + {0xC0BF, 0x63FD}, //10691 #CJK UNIFIED IDEOGRAPH + {0xC0C0, 0x89C8}, //10692 #CJK UNIFIED IDEOGRAPH + {0xC0C1, 0x61D2}, //10693 #CJK UNIFIED IDEOGRAPH + {0xC0C2, 0x7F06}, //10694 #CJK UNIFIED IDEOGRAPH + {0xC0C3, 0x70C2}, //10695 #CJK UNIFIED IDEOGRAPH + {0xC0C4, 0x6EE5}, //10696 #CJK UNIFIED IDEOGRAPH + {0xC0C5, 0x7405}, //10697 #CJK UNIFIED IDEOGRAPH + {0xC0C6, 0x6994}, //10698 #CJK UNIFIED IDEOGRAPH + {0xC0C7, 0x72FC}, //10699 #CJK UNIFIED IDEOGRAPH + {0xC0C8, 0x5ECA}, //10700 #CJK UNIFIED IDEOGRAPH + {0xC0C9, 0x90CE}, //10701 #CJK UNIFIED IDEOGRAPH + {0xC0CA, 0x6717}, //10702 #CJK UNIFIED IDEOGRAPH + {0xC0CB, 0x6D6A}, //10703 #CJK UNIFIED IDEOGRAPH + {0xC0CC, 0x635E}, //10704 #CJK UNIFIED IDEOGRAPH + {0xC0CD, 0x52B3}, //10705 #CJK UNIFIED IDEOGRAPH + {0xC0CE, 0x7262}, //10706 #CJK UNIFIED IDEOGRAPH + {0xC0CF, 0x8001}, //10707 #CJK UNIFIED IDEOGRAPH + {0xC0D0, 0x4F6C}, //10708 #CJK UNIFIED IDEOGRAPH + {0xC0D1, 0x59E5}, //10709 #CJK UNIFIED IDEOGRAPH + {0xC0D2, 0x916A}, //10710 #CJK UNIFIED IDEOGRAPH + {0xC0D3, 0x70D9}, //10711 #CJK UNIFIED IDEOGRAPH + {0xC0D4, 0x6D9D}, //10712 #CJK UNIFIED IDEOGRAPH + {0xC0D5, 0x52D2}, //10713 #CJK UNIFIED IDEOGRAPH + {0xC0D6, 0x4E50}, //10714 #CJK UNIFIED IDEOGRAPH + {0xC0D7, 0x96F7}, //10715 #CJK UNIFIED IDEOGRAPH + {0xC0D8, 0x956D}, //10716 #CJK UNIFIED IDEOGRAPH + {0xC0D9, 0x857E}, //10717 #CJK UNIFIED IDEOGRAPH + {0xC0DA, 0x78CA}, //10718 #CJK UNIFIED IDEOGRAPH + {0xC0DB, 0x7D2F}, //10719 #CJK UNIFIED IDEOGRAPH + {0xC0DC, 0x5121}, //10720 #CJK UNIFIED IDEOGRAPH + {0xC0DD, 0x5792}, //10721 #CJK UNIFIED IDEOGRAPH + {0xC0DE, 0x64C2}, //10722 #CJK UNIFIED IDEOGRAPH + {0xC0DF, 0x808B}, //10723 #CJK UNIFIED IDEOGRAPH + {0xC0E0, 0x7C7B}, //10724 #CJK UNIFIED IDEOGRAPH + {0xC0E1, 0x6CEA}, //10725 #CJK UNIFIED IDEOGRAPH + {0xC0E2, 0x68F1}, //10726 #CJK UNIFIED IDEOGRAPH + {0xC0E3, 0x695E}, //10727 #CJK UNIFIED IDEOGRAPH + {0xC0E4, 0x51B7}, //10728 #CJK UNIFIED IDEOGRAPH + {0xC0E5, 0x5398}, //10729 #CJK UNIFIED IDEOGRAPH + {0xC0E6, 0x68A8}, //10730 #CJK UNIFIED IDEOGRAPH + {0xC0E7, 0x7281}, //10731 #CJK UNIFIED IDEOGRAPH + {0xC0E8, 0x9ECE}, //10732 #CJK UNIFIED IDEOGRAPH + {0xC0E9, 0x7BF1}, //10733 #CJK UNIFIED IDEOGRAPH + {0xC0EA, 0x72F8}, //10734 #CJK UNIFIED IDEOGRAPH + {0xC0EB, 0x79BB}, //10735 #CJK UNIFIED IDEOGRAPH + {0xC0EC, 0x6F13}, //10736 #CJK UNIFIED IDEOGRAPH + {0xC0ED, 0x7406}, //10737 #CJK UNIFIED IDEOGRAPH + {0xC0EE, 0x674E}, //10738 #CJK UNIFIED IDEOGRAPH + {0xC0EF, 0x91CC}, //10739 #CJK UNIFIED IDEOGRAPH + {0xC0F0, 0x9CA4}, //10740 #CJK UNIFIED IDEOGRAPH + {0xC0F1, 0x793C}, //10741 #CJK UNIFIED IDEOGRAPH + {0xC0F2, 0x8389}, //10742 #CJK UNIFIED IDEOGRAPH + {0xC0F3, 0x8354}, //10743 #CJK UNIFIED IDEOGRAPH + {0xC0F4, 0x540F}, //10744 #CJK UNIFIED IDEOGRAPH + {0xC0F5, 0x6817}, //10745 #CJK UNIFIED IDEOGRAPH + {0xC0F6, 0x4E3D}, //10746 #CJK UNIFIED IDEOGRAPH + {0xC0F7, 0x5389}, //10747 #CJK UNIFIED IDEOGRAPH + {0xC0F8, 0x52B1}, //10748 #CJK UNIFIED IDEOGRAPH + {0xC0F9, 0x783E}, //10749 #CJK UNIFIED IDEOGRAPH + {0xC0FA, 0x5386}, //10750 #CJK UNIFIED IDEOGRAPH + {0xC0FB, 0x5229}, //10751 #CJK UNIFIED IDEOGRAPH + {0xC0FC, 0x5088}, //10752 #CJK UNIFIED IDEOGRAPH + {0xC0FD, 0x4F8B}, //10753 #CJK UNIFIED IDEOGRAPH + {0xC0FE, 0x4FD0}, //10754 #CJK UNIFIED IDEOGRAPH + {0xC140, 0x7F56}, //10755 #CJK UNIFIED IDEOGRAPH + {0xC141, 0x7F59}, //10756 #CJK UNIFIED IDEOGRAPH + {0xC142, 0x7F5B}, //10757 #CJK UNIFIED IDEOGRAPH + {0xC143, 0x7F5C}, //10758 #CJK UNIFIED IDEOGRAPH + {0xC144, 0x7F5D}, //10759 #CJK UNIFIED IDEOGRAPH + {0xC145, 0x7F5E}, //10760 #CJK UNIFIED IDEOGRAPH + {0xC146, 0x7F60}, //10761 #CJK UNIFIED IDEOGRAPH + {0xC147, 0x7F63}, //10762 #CJK UNIFIED IDEOGRAPH + {0xC148, 0x7F64}, //10763 #CJK UNIFIED IDEOGRAPH + {0xC149, 0x7F65}, //10764 #CJK UNIFIED IDEOGRAPH + {0xC14A, 0x7F66}, //10765 #CJK UNIFIED IDEOGRAPH + {0xC14B, 0x7F67}, //10766 #CJK UNIFIED IDEOGRAPH + {0xC14C, 0x7F6B}, //10767 #CJK UNIFIED IDEOGRAPH + {0xC14D, 0x7F6C}, //10768 #CJK UNIFIED IDEOGRAPH + {0xC14E, 0x7F6D}, //10769 #CJK UNIFIED IDEOGRAPH + {0xC14F, 0x7F6F}, //10770 #CJK UNIFIED IDEOGRAPH + {0xC150, 0x7F70}, //10771 #CJK UNIFIED IDEOGRAPH + {0xC151, 0x7F73}, //10772 #CJK UNIFIED IDEOGRAPH + {0xC152, 0x7F75}, //10773 #CJK UNIFIED IDEOGRAPH + {0xC153, 0x7F76}, //10774 #CJK UNIFIED IDEOGRAPH + {0xC154, 0x7F77}, //10775 #CJK UNIFIED IDEOGRAPH + {0xC155, 0x7F78}, //10776 #CJK UNIFIED IDEOGRAPH + {0xC156, 0x7F7A}, //10777 #CJK UNIFIED IDEOGRAPH + {0xC157, 0x7F7B}, //10778 #CJK UNIFIED IDEOGRAPH + {0xC158, 0x7F7C}, //10779 #CJK UNIFIED IDEOGRAPH + {0xC159, 0x7F7D}, //10780 #CJK UNIFIED IDEOGRAPH + {0xC15A, 0x7F7F}, //10781 #CJK UNIFIED IDEOGRAPH + {0xC15B, 0x7F80}, //10782 #CJK UNIFIED IDEOGRAPH + {0xC15C, 0x7F82}, //10783 #CJK UNIFIED IDEOGRAPH + {0xC15D, 0x7F83}, //10784 #CJK UNIFIED IDEOGRAPH + {0xC15E, 0x7F84}, //10785 #CJK UNIFIED IDEOGRAPH + {0xC15F, 0x7F85}, //10786 #CJK UNIFIED IDEOGRAPH + {0xC160, 0x7F86}, //10787 #CJK UNIFIED IDEOGRAPH + {0xC161, 0x7F87}, //10788 #CJK UNIFIED IDEOGRAPH + {0xC162, 0x7F88}, //10789 #CJK UNIFIED IDEOGRAPH + {0xC163, 0x7F89}, //10790 #CJK UNIFIED IDEOGRAPH + {0xC164, 0x7F8B}, //10791 #CJK UNIFIED IDEOGRAPH + {0xC165, 0x7F8D}, //10792 #CJK UNIFIED IDEOGRAPH + {0xC166, 0x7F8F}, //10793 #CJK UNIFIED IDEOGRAPH + {0xC167, 0x7F90}, //10794 #CJK UNIFIED IDEOGRAPH + {0xC168, 0x7F91}, //10795 #CJK UNIFIED IDEOGRAPH + {0xC169, 0x7F92}, //10796 #CJK UNIFIED IDEOGRAPH + {0xC16A, 0x7F93}, //10797 #CJK UNIFIED IDEOGRAPH + {0xC16B, 0x7F95}, //10798 #CJK UNIFIED IDEOGRAPH + {0xC16C, 0x7F96}, //10799 #CJK UNIFIED IDEOGRAPH + {0xC16D, 0x7F97}, //10800 #CJK UNIFIED IDEOGRAPH + {0xC16E, 0x7F98}, //10801 #CJK UNIFIED IDEOGRAPH + {0xC16F, 0x7F99}, //10802 #CJK UNIFIED IDEOGRAPH + {0xC170, 0x7F9B}, //10803 #CJK UNIFIED IDEOGRAPH + {0xC171, 0x7F9C}, //10804 #CJK UNIFIED IDEOGRAPH + {0xC172, 0x7FA0}, //10805 #CJK UNIFIED IDEOGRAPH + {0xC173, 0x7FA2}, //10806 #CJK UNIFIED IDEOGRAPH + {0xC174, 0x7FA3}, //10807 #CJK UNIFIED IDEOGRAPH + {0xC175, 0x7FA5}, //10808 #CJK UNIFIED IDEOGRAPH + {0xC176, 0x7FA6}, //10809 #CJK UNIFIED IDEOGRAPH + {0xC177, 0x7FA8}, //10810 #CJK UNIFIED IDEOGRAPH + {0xC178, 0x7FA9}, //10811 #CJK UNIFIED IDEOGRAPH + {0xC179, 0x7FAA}, //10812 #CJK UNIFIED IDEOGRAPH + {0xC17A, 0x7FAB}, //10813 #CJK UNIFIED IDEOGRAPH + {0xC17B, 0x7FAC}, //10814 #CJK UNIFIED IDEOGRAPH + {0xC17C, 0x7FAD}, //10815 #CJK UNIFIED IDEOGRAPH + {0xC17D, 0x7FAE}, //10816 #CJK UNIFIED IDEOGRAPH + {0xC17E, 0x7FB1}, //10817 #CJK UNIFIED IDEOGRAPH + {0xC180, 0x7FB3}, //10818 #CJK UNIFIED IDEOGRAPH + {0xC181, 0x7FB4}, //10819 #CJK UNIFIED IDEOGRAPH + {0xC182, 0x7FB5}, //10820 #CJK UNIFIED IDEOGRAPH + {0xC183, 0x7FB6}, //10821 #CJK UNIFIED IDEOGRAPH + {0xC184, 0x7FB7}, //10822 #CJK UNIFIED IDEOGRAPH + {0xC185, 0x7FBA}, //10823 #CJK UNIFIED IDEOGRAPH + {0xC186, 0x7FBB}, //10824 #CJK UNIFIED IDEOGRAPH + {0xC187, 0x7FBE}, //10825 #CJK UNIFIED IDEOGRAPH + {0xC188, 0x7FC0}, //10826 #CJK UNIFIED IDEOGRAPH + {0xC189, 0x7FC2}, //10827 #CJK UNIFIED IDEOGRAPH + {0xC18A, 0x7FC3}, //10828 #CJK UNIFIED IDEOGRAPH + {0xC18B, 0x7FC4}, //10829 #CJK UNIFIED IDEOGRAPH + {0xC18C, 0x7FC6}, //10830 #CJK UNIFIED IDEOGRAPH + {0xC18D, 0x7FC7}, //10831 #CJK UNIFIED IDEOGRAPH + {0xC18E, 0x7FC8}, //10832 #CJK UNIFIED IDEOGRAPH + {0xC18F, 0x7FC9}, //10833 #CJK UNIFIED IDEOGRAPH + {0xC190, 0x7FCB}, //10834 #CJK UNIFIED IDEOGRAPH + {0xC191, 0x7FCD}, //10835 #CJK UNIFIED IDEOGRAPH + {0xC192, 0x7FCF}, //10836 #CJK UNIFIED IDEOGRAPH + {0xC193, 0x7FD0}, //10837 #CJK UNIFIED IDEOGRAPH + {0xC194, 0x7FD1}, //10838 #CJK UNIFIED IDEOGRAPH + {0xC195, 0x7FD2}, //10839 #CJK UNIFIED IDEOGRAPH + {0xC196, 0x7FD3}, //10840 #CJK UNIFIED IDEOGRAPH + {0xC197, 0x7FD6}, //10841 #CJK UNIFIED IDEOGRAPH + {0xC198, 0x7FD7}, //10842 #CJK UNIFIED IDEOGRAPH + {0xC199, 0x7FD9}, //10843 #CJK UNIFIED IDEOGRAPH + {0xC19A, 0x7FDA}, //10844 #CJK UNIFIED IDEOGRAPH + {0xC19B, 0x7FDB}, //10845 #CJK UNIFIED IDEOGRAPH + {0xC19C, 0x7FDC}, //10846 #CJK UNIFIED IDEOGRAPH + {0xC19D, 0x7FDD}, //10847 #CJK UNIFIED IDEOGRAPH + {0xC19E, 0x7FDE}, //10848 #CJK UNIFIED IDEOGRAPH + {0xC19F, 0x7FE2}, //10849 #CJK UNIFIED IDEOGRAPH + {0xC1A0, 0x7FE3}, //10850 #CJK UNIFIED IDEOGRAPH + {0xC1A1, 0x75E2}, //10851 #CJK UNIFIED IDEOGRAPH + {0xC1A2, 0x7ACB}, //10852 #CJK UNIFIED IDEOGRAPH + {0xC1A3, 0x7C92}, //10853 #CJK UNIFIED IDEOGRAPH + {0xC1A4, 0x6CA5}, //10854 #CJK UNIFIED IDEOGRAPH + {0xC1A5, 0x96B6}, //10855 #CJK UNIFIED IDEOGRAPH + {0xC1A6, 0x529B}, //10856 #CJK UNIFIED IDEOGRAPH + {0xC1A7, 0x7483}, //10857 #CJK UNIFIED IDEOGRAPH + {0xC1A8, 0x54E9}, //10858 #CJK UNIFIED IDEOGRAPH + {0xC1A9, 0x4FE9}, //10859 #CJK UNIFIED IDEOGRAPH + {0xC1AA, 0x8054}, //10860 #CJK UNIFIED IDEOGRAPH + {0xC1AB, 0x83B2}, //10861 #CJK UNIFIED IDEOGRAPH + {0xC1AC, 0x8FDE}, //10862 #CJK UNIFIED IDEOGRAPH + {0xC1AD, 0x9570}, //10863 #CJK UNIFIED IDEOGRAPH + {0xC1AE, 0x5EC9}, //10864 #CJK UNIFIED IDEOGRAPH + {0xC1AF, 0x601C}, //10865 #CJK UNIFIED IDEOGRAPH + {0xC1B0, 0x6D9F}, //10866 #CJK UNIFIED IDEOGRAPH + {0xC1B1, 0x5E18}, //10867 #CJK UNIFIED IDEOGRAPH + {0xC1B2, 0x655B}, //10868 #CJK UNIFIED IDEOGRAPH + {0xC1B3, 0x8138}, //10869 #CJK UNIFIED IDEOGRAPH + {0xC1B4, 0x94FE}, //10870 #CJK UNIFIED IDEOGRAPH + {0xC1B5, 0x604B}, //10871 #CJK UNIFIED IDEOGRAPH + {0xC1B6, 0x70BC}, //10872 #CJK UNIFIED IDEOGRAPH + {0xC1B7, 0x7EC3}, //10873 #CJK UNIFIED IDEOGRAPH + {0xC1B8, 0x7CAE}, //10874 #CJK UNIFIED IDEOGRAPH + {0xC1B9, 0x51C9}, //10875 #CJK UNIFIED IDEOGRAPH + {0xC1BA, 0x6881}, //10876 #CJK UNIFIED IDEOGRAPH + {0xC1BB, 0x7CB1}, //10877 #CJK UNIFIED IDEOGRAPH + {0xC1BC, 0x826F}, //10878 #CJK UNIFIED IDEOGRAPH + {0xC1BD, 0x4E24}, //10879 #CJK UNIFIED IDEOGRAPH + {0xC1BE, 0x8F86}, //10880 #CJK UNIFIED IDEOGRAPH + {0xC1BF, 0x91CF}, //10881 #CJK UNIFIED IDEOGRAPH + {0xC1C0, 0x667E}, //10882 #CJK UNIFIED IDEOGRAPH + {0xC1C1, 0x4EAE}, //10883 #CJK UNIFIED IDEOGRAPH + {0xC1C2, 0x8C05}, //10884 #CJK UNIFIED IDEOGRAPH + {0xC1C3, 0x64A9}, //10885 #CJK UNIFIED IDEOGRAPH + {0xC1C4, 0x804A}, //10886 #CJK UNIFIED IDEOGRAPH + {0xC1C5, 0x50DA}, //10887 #CJK UNIFIED IDEOGRAPH + {0xC1C6, 0x7597}, //10888 #CJK UNIFIED IDEOGRAPH + {0xC1C7, 0x71CE}, //10889 #CJK UNIFIED IDEOGRAPH + {0xC1C8, 0x5BE5}, //10890 #CJK UNIFIED IDEOGRAPH + {0xC1C9, 0x8FBD}, //10891 #CJK UNIFIED IDEOGRAPH + {0xC1CA, 0x6F66}, //10892 #CJK UNIFIED IDEOGRAPH + {0xC1CB, 0x4E86}, //10893 #CJK UNIFIED IDEOGRAPH + {0xC1CC, 0x6482}, //10894 #CJK UNIFIED IDEOGRAPH + {0xC1CD, 0x9563}, //10895 #CJK UNIFIED IDEOGRAPH + {0xC1CE, 0x5ED6}, //10896 #CJK UNIFIED IDEOGRAPH + {0xC1CF, 0x6599}, //10897 #CJK UNIFIED IDEOGRAPH + {0xC1D0, 0x5217}, //10898 #CJK UNIFIED IDEOGRAPH + {0xC1D1, 0x88C2}, //10899 #CJK UNIFIED IDEOGRAPH + {0xC1D2, 0x70C8}, //10900 #CJK UNIFIED IDEOGRAPH + {0xC1D3, 0x52A3}, //10901 #CJK UNIFIED IDEOGRAPH + {0xC1D4, 0x730E}, //10902 #CJK UNIFIED IDEOGRAPH + {0xC1D5, 0x7433}, //10903 #CJK UNIFIED IDEOGRAPH + {0xC1D6, 0x6797}, //10904 #CJK UNIFIED IDEOGRAPH + {0xC1D7, 0x78F7}, //10905 #CJK UNIFIED IDEOGRAPH + {0xC1D8, 0x9716}, //10906 #CJK UNIFIED IDEOGRAPH + {0xC1D9, 0x4E34}, //10907 #CJK UNIFIED IDEOGRAPH + {0xC1DA, 0x90BB}, //10908 #CJK UNIFIED IDEOGRAPH + {0xC1DB, 0x9CDE}, //10909 #CJK UNIFIED IDEOGRAPH + {0xC1DC, 0x6DCB}, //10910 #CJK UNIFIED IDEOGRAPH + {0xC1DD, 0x51DB}, //10911 #CJK UNIFIED IDEOGRAPH + {0xC1DE, 0x8D41}, //10912 #CJK UNIFIED IDEOGRAPH + {0xC1DF, 0x541D}, //10913 #CJK UNIFIED IDEOGRAPH + {0xC1E0, 0x62CE}, //10914 #CJK UNIFIED IDEOGRAPH + {0xC1E1, 0x73B2}, //10915 #CJK UNIFIED IDEOGRAPH + {0xC1E2, 0x83F1}, //10916 #CJK UNIFIED IDEOGRAPH + {0xC1E3, 0x96F6}, //10917 #CJK UNIFIED IDEOGRAPH + {0xC1E4, 0x9F84}, //10918 #CJK UNIFIED IDEOGRAPH + {0xC1E5, 0x94C3}, //10919 #CJK UNIFIED IDEOGRAPH + {0xC1E6, 0x4F36}, //10920 #CJK UNIFIED IDEOGRAPH + {0xC1E7, 0x7F9A}, //10921 #CJK UNIFIED IDEOGRAPH + {0xC1E8, 0x51CC}, //10922 #CJK UNIFIED IDEOGRAPH + {0xC1E9, 0x7075}, //10923 #CJK UNIFIED IDEOGRAPH + {0xC1EA, 0x9675}, //10924 #CJK UNIFIED IDEOGRAPH + {0xC1EB, 0x5CAD}, //10925 #CJK UNIFIED IDEOGRAPH + {0xC1EC, 0x9886}, //10926 #CJK UNIFIED IDEOGRAPH + {0xC1ED, 0x53E6}, //10927 #CJK UNIFIED IDEOGRAPH + {0xC1EE, 0x4EE4}, //10928 #CJK UNIFIED IDEOGRAPH + {0xC1EF, 0x6E9C}, //10929 #CJK UNIFIED IDEOGRAPH + {0xC1F0, 0x7409}, //10930 #CJK UNIFIED IDEOGRAPH + {0xC1F1, 0x69B4}, //10931 #CJK UNIFIED IDEOGRAPH + {0xC1F2, 0x786B}, //10932 #CJK UNIFIED IDEOGRAPH + {0xC1F3, 0x998F}, //10933 #CJK UNIFIED IDEOGRAPH + {0xC1F4, 0x7559}, //10934 #CJK UNIFIED IDEOGRAPH + {0xC1F5, 0x5218}, //10935 #CJK UNIFIED IDEOGRAPH + {0xC1F6, 0x7624}, //10936 #CJK UNIFIED IDEOGRAPH + {0xC1F7, 0x6D41}, //10937 #CJK UNIFIED IDEOGRAPH + {0xC1F8, 0x67F3}, //10938 #CJK UNIFIED IDEOGRAPH + {0xC1F9, 0x516D}, //10939 #CJK UNIFIED IDEOGRAPH + {0xC1FA, 0x9F99}, //10940 #CJK UNIFIED IDEOGRAPH + {0xC1FB, 0x804B}, //10941 #CJK UNIFIED IDEOGRAPH + {0xC1FC, 0x5499}, //10942 #CJK UNIFIED IDEOGRAPH + {0xC1FD, 0x7B3C}, //10943 #CJK UNIFIED IDEOGRAPH + {0xC1FE, 0x7ABF}, //10944 #CJK UNIFIED IDEOGRAPH + {0xC240, 0x7FE4}, //10945 #CJK UNIFIED IDEOGRAPH + {0xC241, 0x7FE7}, //10946 #CJK UNIFIED IDEOGRAPH + {0xC242, 0x7FE8}, //10947 #CJK UNIFIED IDEOGRAPH + {0xC243, 0x7FEA}, //10948 #CJK UNIFIED IDEOGRAPH + {0xC244, 0x7FEB}, //10949 #CJK UNIFIED IDEOGRAPH + {0xC245, 0x7FEC}, //10950 #CJK UNIFIED IDEOGRAPH + {0xC246, 0x7FED}, //10951 #CJK UNIFIED IDEOGRAPH + {0xC247, 0x7FEF}, //10952 #CJK UNIFIED IDEOGRAPH + {0xC248, 0x7FF2}, //10953 #CJK UNIFIED IDEOGRAPH + {0xC249, 0x7FF4}, //10954 #CJK UNIFIED IDEOGRAPH + {0xC24A, 0x7FF5}, //10955 #CJK UNIFIED IDEOGRAPH + {0xC24B, 0x7FF6}, //10956 #CJK UNIFIED IDEOGRAPH + {0xC24C, 0x7FF7}, //10957 #CJK UNIFIED IDEOGRAPH + {0xC24D, 0x7FF8}, //10958 #CJK UNIFIED IDEOGRAPH + {0xC24E, 0x7FF9}, //10959 #CJK UNIFIED IDEOGRAPH + {0xC24F, 0x7FFA}, //10960 #CJK UNIFIED IDEOGRAPH + {0xC250, 0x7FFD}, //10961 #CJK UNIFIED IDEOGRAPH + {0xC251, 0x7FFE}, //10962 #CJK UNIFIED IDEOGRAPH + {0xC252, 0x7FFF}, //10963 #CJK UNIFIED IDEOGRAPH + {0xC253, 0x8002}, //10964 #CJK UNIFIED IDEOGRAPH + {0xC254, 0x8007}, //10965 #CJK UNIFIED IDEOGRAPH + {0xC255, 0x8008}, //10966 #CJK UNIFIED IDEOGRAPH + {0xC256, 0x8009}, //10967 #CJK UNIFIED IDEOGRAPH + {0xC257, 0x800A}, //10968 #CJK UNIFIED IDEOGRAPH + {0xC258, 0x800E}, //10969 #CJK UNIFIED IDEOGRAPH + {0xC259, 0x800F}, //10970 #CJK UNIFIED IDEOGRAPH + {0xC25A, 0x8011}, //10971 #CJK UNIFIED IDEOGRAPH + {0xC25B, 0x8013}, //10972 #CJK UNIFIED IDEOGRAPH + {0xC25C, 0x801A}, //10973 #CJK UNIFIED IDEOGRAPH + {0xC25D, 0x801B}, //10974 #CJK UNIFIED IDEOGRAPH + {0xC25E, 0x801D}, //10975 #CJK UNIFIED IDEOGRAPH + {0xC25F, 0x801E}, //10976 #CJK UNIFIED IDEOGRAPH + {0xC260, 0x801F}, //10977 #CJK UNIFIED IDEOGRAPH + {0xC261, 0x8021}, //10978 #CJK UNIFIED IDEOGRAPH + {0xC262, 0x8023}, //10979 #CJK UNIFIED IDEOGRAPH + {0xC263, 0x8024}, //10980 #CJK UNIFIED IDEOGRAPH + {0xC264, 0x802B}, //10981 #CJK UNIFIED IDEOGRAPH + {0xC265, 0x802C}, //10982 #CJK UNIFIED IDEOGRAPH + {0xC266, 0x802D}, //10983 #CJK UNIFIED IDEOGRAPH + {0xC267, 0x802E}, //10984 #CJK UNIFIED IDEOGRAPH + {0xC268, 0x802F}, //10985 #CJK UNIFIED IDEOGRAPH + {0xC269, 0x8030}, //10986 #CJK UNIFIED IDEOGRAPH + {0xC26A, 0x8032}, //10987 #CJK UNIFIED IDEOGRAPH + {0xC26B, 0x8034}, //10988 #CJK UNIFIED IDEOGRAPH + {0xC26C, 0x8039}, //10989 #CJK UNIFIED IDEOGRAPH + {0xC26D, 0x803A}, //10990 #CJK UNIFIED IDEOGRAPH + {0xC26E, 0x803C}, //10991 #CJK UNIFIED IDEOGRAPH + {0xC26F, 0x803E}, //10992 #CJK UNIFIED IDEOGRAPH + {0xC270, 0x8040}, //10993 #CJK UNIFIED IDEOGRAPH + {0xC271, 0x8041}, //10994 #CJK UNIFIED IDEOGRAPH + {0xC272, 0x8044}, //10995 #CJK UNIFIED IDEOGRAPH + {0xC273, 0x8045}, //10996 #CJK UNIFIED IDEOGRAPH + {0xC274, 0x8047}, //10997 #CJK UNIFIED IDEOGRAPH + {0xC275, 0x8048}, //10998 #CJK UNIFIED IDEOGRAPH + {0xC276, 0x8049}, //10999 #CJK UNIFIED IDEOGRAPH + {0xC277, 0x804E}, //11000 #CJK UNIFIED IDEOGRAPH + {0xC278, 0x804F}, //11001 #CJK UNIFIED IDEOGRAPH + {0xC279, 0x8050}, //11002 #CJK UNIFIED IDEOGRAPH + {0xC27A, 0x8051}, //11003 #CJK UNIFIED IDEOGRAPH + {0xC27B, 0x8053}, //11004 #CJK UNIFIED IDEOGRAPH + {0xC27C, 0x8055}, //11005 #CJK UNIFIED IDEOGRAPH + {0xC27D, 0x8056}, //11006 #CJK UNIFIED IDEOGRAPH + {0xC27E, 0x8057}, //11007 #CJK UNIFIED IDEOGRAPH + {0xC280, 0x8059}, //11008 #CJK UNIFIED IDEOGRAPH + {0xC281, 0x805B}, //11009 #CJK UNIFIED IDEOGRAPH + {0xC282, 0x805C}, //11010 #CJK UNIFIED IDEOGRAPH + {0xC283, 0x805D}, //11011 #CJK UNIFIED IDEOGRAPH + {0xC284, 0x805E}, //11012 #CJK UNIFIED IDEOGRAPH + {0xC285, 0x805F}, //11013 #CJK UNIFIED IDEOGRAPH + {0xC286, 0x8060}, //11014 #CJK UNIFIED IDEOGRAPH + {0xC287, 0x8061}, //11015 #CJK UNIFIED IDEOGRAPH + {0xC288, 0x8062}, //11016 #CJK UNIFIED IDEOGRAPH + {0xC289, 0x8063}, //11017 #CJK UNIFIED IDEOGRAPH + {0xC28A, 0x8064}, //11018 #CJK UNIFIED IDEOGRAPH + {0xC28B, 0x8065}, //11019 #CJK UNIFIED IDEOGRAPH + {0xC28C, 0x8066}, //11020 #CJK UNIFIED IDEOGRAPH + {0xC28D, 0x8067}, //11021 #CJK UNIFIED IDEOGRAPH + {0xC28E, 0x8068}, //11022 #CJK UNIFIED IDEOGRAPH + {0xC28F, 0x806B}, //11023 #CJK UNIFIED IDEOGRAPH + {0xC290, 0x806C}, //11024 #CJK UNIFIED IDEOGRAPH + {0xC291, 0x806D}, //11025 #CJK UNIFIED IDEOGRAPH + {0xC292, 0x806E}, //11026 #CJK UNIFIED IDEOGRAPH + {0xC293, 0x806F}, //11027 #CJK UNIFIED IDEOGRAPH + {0xC294, 0x8070}, //11028 #CJK UNIFIED IDEOGRAPH + {0xC295, 0x8072}, //11029 #CJK UNIFIED IDEOGRAPH + {0xC296, 0x8073}, //11030 #CJK UNIFIED IDEOGRAPH + {0xC297, 0x8074}, //11031 #CJK UNIFIED IDEOGRAPH + {0xC298, 0x8075}, //11032 #CJK UNIFIED IDEOGRAPH + {0xC299, 0x8076}, //11033 #CJK UNIFIED IDEOGRAPH + {0xC29A, 0x8077}, //11034 #CJK UNIFIED IDEOGRAPH + {0xC29B, 0x8078}, //11035 #CJK UNIFIED IDEOGRAPH + {0xC29C, 0x8079}, //11036 #CJK UNIFIED IDEOGRAPH + {0xC29D, 0x807A}, //11037 #CJK UNIFIED IDEOGRAPH + {0xC29E, 0x807B}, //11038 #CJK UNIFIED IDEOGRAPH + {0xC29F, 0x807C}, //11039 #CJK UNIFIED IDEOGRAPH + {0xC2A0, 0x807D}, //11040 #CJK UNIFIED IDEOGRAPH + {0xC2A1, 0x9686}, //11041 #CJK UNIFIED IDEOGRAPH + {0xC2A2, 0x5784}, //11042 #CJK UNIFIED IDEOGRAPH + {0xC2A3, 0x62E2}, //11043 #CJK UNIFIED IDEOGRAPH + {0xC2A4, 0x9647}, //11044 #CJK UNIFIED IDEOGRAPH + {0xC2A5, 0x697C}, //11045 #CJK UNIFIED IDEOGRAPH + {0xC2A6, 0x5A04}, //11046 #CJK UNIFIED IDEOGRAPH + {0xC2A7, 0x6402}, //11047 #CJK UNIFIED IDEOGRAPH + {0xC2A8, 0x7BD3}, //11048 #CJK UNIFIED IDEOGRAPH + {0xC2A9, 0x6F0F}, //11049 #CJK UNIFIED IDEOGRAPH + {0xC2AA, 0x964B}, //11050 #CJK UNIFIED IDEOGRAPH + {0xC2AB, 0x82A6}, //11051 #CJK UNIFIED IDEOGRAPH + {0xC2AC, 0x5362}, //11052 #CJK UNIFIED IDEOGRAPH + {0xC2AD, 0x9885}, //11053 #CJK UNIFIED IDEOGRAPH + {0xC2AE, 0x5E90}, //11054 #CJK UNIFIED IDEOGRAPH + {0xC2AF, 0x7089}, //11055 #CJK UNIFIED IDEOGRAPH + {0xC2B0, 0x63B3}, //11056 #CJK UNIFIED IDEOGRAPH + {0xC2B1, 0x5364}, //11057 #CJK UNIFIED IDEOGRAPH + {0xC2B2, 0x864F}, //11058 #CJK UNIFIED IDEOGRAPH + {0xC2B3, 0x9C81}, //11059 #CJK UNIFIED IDEOGRAPH + {0xC2B4, 0x9E93}, //11060 #CJK UNIFIED IDEOGRAPH + {0xC2B5, 0x788C}, //11061 #CJK UNIFIED IDEOGRAPH + {0xC2B6, 0x9732}, //11062 #CJK UNIFIED IDEOGRAPH + {0xC2B7, 0x8DEF}, //11063 #CJK UNIFIED IDEOGRAPH + {0xC2B8, 0x8D42}, //11064 #CJK UNIFIED IDEOGRAPH + {0xC2B9, 0x9E7F}, //11065 #CJK UNIFIED IDEOGRAPH + {0xC2BA, 0x6F5E}, //11066 #CJK UNIFIED IDEOGRAPH + {0xC2BB, 0x7984}, //11067 #CJK UNIFIED IDEOGRAPH + {0xC2BC, 0x5F55}, //11068 #CJK UNIFIED IDEOGRAPH + {0xC2BD, 0x9646}, //11069 #CJK UNIFIED IDEOGRAPH + {0xC2BE, 0x622E}, //11070 #CJK UNIFIED IDEOGRAPH + {0xC2BF, 0x9A74}, //11071 #CJK UNIFIED IDEOGRAPH + {0xC2C0, 0x5415}, //11072 #CJK UNIFIED IDEOGRAPH + {0xC2C1, 0x94DD}, //11073 #CJK UNIFIED IDEOGRAPH + {0xC2C2, 0x4FA3}, //11074 #CJK UNIFIED IDEOGRAPH + {0xC2C3, 0x65C5}, //11075 #CJK UNIFIED IDEOGRAPH + {0xC2C4, 0x5C65}, //11076 #CJK UNIFIED IDEOGRAPH + {0xC2C5, 0x5C61}, //11077 #CJK UNIFIED IDEOGRAPH + {0xC2C6, 0x7F15}, //11078 #CJK UNIFIED IDEOGRAPH + {0xC2C7, 0x8651}, //11079 #CJK UNIFIED IDEOGRAPH + {0xC2C8, 0x6C2F}, //11080 #CJK UNIFIED IDEOGRAPH + {0xC2C9, 0x5F8B}, //11081 #CJK UNIFIED IDEOGRAPH + {0xC2CA, 0x7387}, //11082 #CJK UNIFIED IDEOGRAPH + {0xC2CB, 0x6EE4}, //11083 #CJK UNIFIED IDEOGRAPH + {0xC2CC, 0x7EFF}, //11084 #CJK UNIFIED IDEOGRAPH + {0xC2CD, 0x5CE6}, //11085 #CJK UNIFIED IDEOGRAPH + {0xC2CE, 0x631B}, //11086 #CJK UNIFIED IDEOGRAPH + {0xC2CF, 0x5B6A}, //11087 #CJK UNIFIED IDEOGRAPH + {0xC2D0, 0x6EE6}, //11088 #CJK UNIFIED IDEOGRAPH + {0xC2D1, 0x5375}, //11089 #CJK UNIFIED IDEOGRAPH + {0xC2D2, 0x4E71}, //11090 #CJK UNIFIED IDEOGRAPH + {0xC2D3, 0x63A0}, //11091 #CJK UNIFIED IDEOGRAPH + {0xC2D4, 0x7565}, //11092 #CJK UNIFIED IDEOGRAPH + {0xC2D5, 0x62A1}, //11093 #CJK UNIFIED IDEOGRAPH + {0xC2D6, 0x8F6E}, //11094 #CJK UNIFIED IDEOGRAPH + {0xC2D7, 0x4F26}, //11095 #CJK UNIFIED IDEOGRAPH + {0xC2D8, 0x4ED1}, //11096 #CJK UNIFIED IDEOGRAPH + {0xC2D9, 0x6CA6}, //11097 #CJK UNIFIED IDEOGRAPH + {0xC2DA, 0x7EB6}, //11098 #CJK UNIFIED IDEOGRAPH + {0xC2DB, 0x8BBA}, //11099 #CJK UNIFIED IDEOGRAPH + {0xC2DC, 0x841D}, //11100 #CJK UNIFIED IDEOGRAPH + {0xC2DD, 0x87BA}, //11101 #CJK UNIFIED IDEOGRAPH + {0xC2DE, 0x7F57}, //11102 #CJK UNIFIED IDEOGRAPH + {0xC2DF, 0x903B}, //11103 #CJK UNIFIED IDEOGRAPH + {0xC2E0, 0x9523}, //11104 #CJK UNIFIED IDEOGRAPH + {0xC2E1, 0x7BA9}, //11105 #CJK UNIFIED IDEOGRAPH + {0xC2E2, 0x9AA1}, //11106 #CJK UNIFIED IDEOGRAPH + {0xC2E3, 0x88F8}, //11107 #CJK UNIFIED IDEOGRAPH + {0xC2E4, 0x843D}, //11108 #CJK UNIFIED IDEOGRAPH + {0xC2E5, 0x6D1B}, //11109 #CJK UNIFIED IDEOGRAPH + {0xC2E6, 0x9A86}, //11110 #CJK UNIFIED IDEOGRAPH + {0xC2E7, 0x7EDC}, //11111 #CJK UNIFIED IDEOGRAPH + {0xC2E8, 0x5988}, //11112 #CJK UNIFIED IDEOGRAPH + {0xC2E9, 0x9EBB}, //11113 #CJK UNIFIED IDEOGRAPH + {0xC2EA, 0x739B}, //11114 #CJK UNIFIED IDEOGRAPH + {0xC2EB, 0x7801}, //11115 #CJK UNIFIED IDEOGRAPH + {0xC2EC, 0x8682}, //11116 #CJK UNIFIED IDEOGRAPH + {0xC2ED, 0x9A6C}, //11117 #CJK UNIFIED IDEOGRAPH + {0xC2EE, 0x9A82}, //11118 #CJK UNIFIED IDEOGRAPH + {0xC2EF, 0x561B}, //11119 #CJK UNIFIED IDEOGRAPH + {0xC2F0, 0x5417}, //11120 #CJK UNIFIED IDEOGRAPH + {0xC2F1, 0x57CB}, //11121 #CJK UNIFIED IDEOGRAPH + {0xC2F2, 0x4E70}, //11122 #CJK UNIFIED IDEOGRAPH + {0xC2F3, 0x9EA6}, //11123 #CJK UNIFIED IDEOGRAPH + {0xC2F4, 0x5356}, //11124 #CJK UNIFIED IDEOGRAPH + {0xC2F5, 0x8FC8}, //11125 #CJK UNIFIED IDEOGRAPH + {0xC2F6, 0x8109}, //11126 #CJK UNIFIED IDEOGRAPH + {0xC2F7, 0x7792}, //11127 #CJK UNIFIED IDEOGRAPH + {0xC2F8, 0x9992}, //11128 #CJK UNIFIED IDEOGRAPH + {0xC2F9, 0x86EE}, //11129 #CJK UNIFIED IDEOGRAPH + {0xC2FA, 0x6EE1}, //11130 #CJK UNIFIED IDEOGRAPH + {0xC2FB, 0x8513}, //11131 #CJK UNIFIED IDEOGRAPH + {0xC2FC, 0x66FC}, //11132 #CJK UNIFIED IDEOGRAPH + {0xC2FD, 0x6162}, //11133 #CJK UNIFIED IDEOGRAPH + {0xC2FE, 0x6F2B}, //11134 #CJK UNIFIED IDEOGRAPH + {0xC340, 0x807E}, //11135 #CJK UNIFIED IDEOGRAPH + {0xC341, 0x8081}, //11136 #CJK UNIFIED IDEOGRAPH + {0xC342, 0x8082}, //11137 #CJK UNIFIED IDEOGRAPH + {0xC343, 0x8085}, //11138 #CJK UNIFIED IDEOGRAPH + {0xC344, 0x8088}, //11139 #CJK UNIFIED IDEOGRAPH + {0xC345, 0x808A}, //11140 #CJK UNIFIED IDEOGRAPH + {0xC346, 0x808D}, //11141 #CJK UNIFIED IDEOGRAPH + {0xC347, 0x808E}, //11142 #CJK UNIFIED IDEOGRAPH + {0xC348, 0x808F}, //11143 #CJK UNIFIED IDEOGRAPH + {0xC349, 0x8090}, //11144 #CJK UNIFIED IDEOGRAPH + {0xC34A, 0x8091}, //11145 #CJK UNIFIED IDEOGRAPH + {0xC34B, 0x8092}, //11146 #CJK UNIFIED IDEOGRAPH + {0xC34C, 0x8094}, //11147 #CJK UNIFIED IDEOGRAPH + {0xC34D, 0x8095}, //11148 #CJK UNIFIED IDEOGRAPH + {0xC34E, 0x8097}, //11149 #CJK UNIFIED IDEOGRAPH + {0xC34F, 0x8099}, //11150 #CJK UNIFIED IDEOGRAPH + {0xC350, 0x809E}, //11151 #CJK UNIFIED IDEOGRAPH + {0xC351, 0x80A3}, //11152 #CJK UNIFIED IDEOGRAPH + {0xC352, 0x80A6}, //11153 #CJK UNIFIED IDEOGRAPH + {0xC353, 0x80A7}, //11154 #CJK UNIFIED IDEOGRAPH + {0xC354, 0x80A8}, //11155 #CJK UNIFIED IDEOGRAPH + {0xC355, 0x80AC}, //11156 #CJK UNIFIED IDEOGRAPH + {0xC356, 0x80B0}, //11157 #CJK UNIFIED IDEOGRAPH + {0xC357, 0x80B3}, //11158 #CJK UNIFIED IDEOGRAPH + {0xC358, 0x80B5}, //11159 #CJK UNIFIED IDEOGRAPH + {0xC359, 0x80B6}, //11160 #CJK UNIFIED IDEOGRAPH + {0xC35A, 0x80B8}, //11161 #CJK UNIFIED IDEOGRAPH + {0xC35B, 0x80B9}, //11162 #CJK UNIFIED IDEOGRAPH + {0xC35C, 0x80BB}, //11163 #CJK UNIFIED IDEOGRAPH + {0xC35D, 0x80C5}, //11164 #CJK UNIFIED IDEOGRAPH + {0xC35E, 0x80C7}, //11165 #CJK UNIFIED IDEOGRAPH + {0xC35F, 0x80C8}, //11166 #CJK UNIFIED IDEOGRAPH + {0xC360, 0x80C9}, //11167 #CJK UNIFIED IDEOGRAPH + {0xC361, 0x80CA}, //11168 #CJK UNIFIED IDEOGRAPH + {0xC362, 0x80CB}, //11169 #CJK UNIFIED IDEOGRAPH + {0xC363, 0x80CF}, //11170 #CJK UNIFIED IDEOGRAPH + {0xC364, 0x80D0}, //11171 #CJK UNIFIED IDEOGRAPH + {0xC365, 0x80D1}, //11172 #CJK UNIFIED IDEOGRAPH + {0xC366, 0x80D2}, //11173 #CJK UNIFIED IDEOGRAPH + {0xC367, 0x80D3}, //11174 #CJK UNIFIED IDEOGRAPH + {0xC368, 0x80D4}, //11175 #CJK UNIFIED IDEOGRAPH + {0xC369, 0x80D5}, //11176 #CJK UNIFIED IDEOGRAPH + {0xC36A, 0x80D8}, //11177 #CJK UNIFIED IDEOGRAPH + {0xC36B, 0x80DF}, //11178 #CJK UNIFIED IDEOGRAPH + {0xC36C, 0x80E0}, //11179 #CJK UNIFIED IDEOGRAPH + {0xC36D, 0x80E2}, //11180 #CJK UNIFIED IDEOGRAPH + {0xC36E, 0x80E3}, //11181 #CJK UNIFIED IDEOGRAPH + {0xC36F, 0x80E6}, //11182 #CJK UNIFIED IDEOGRAPH + {0xC370, 0x80EE}, //11183 #CJK UNIFIED IDEOGRAPH + {0xC371, 0x80F5}, //11184 #CJK UNIFIED IDEOGRAPH + {0xC372, 0x80F7}, //11185 #CJK UNIFIED IDEOGRAPH + {0xC373, 0x80F9}, //11186 #CJK UNIFIED IDEOGRAPH + {0xC374, 0x80FB}, //11187 #CJK UNIFIED IDEOGRAPH + {0xC375, 0x80FE}, //11188 #CJK UNIFIED IDEOGRAPH + {0xC376, 0x80FF}, //11189 #CJK UNIFIED IDEOGRAPH + {0xC377, 0x8100}, //11190 #CJK UNIFIED IDEOGRAPH + {0xC378, 0x8101}, //11191 #CJK UNIFIED IDEOGRAPH + {0xC379, 0x8103}, //11192 #CJK UNIFIED IDEOGRAPH + {0xC37A, 0x8104}, //11193 #CJK UNIFIED IDEOGRAPH + {0xC37B, 0x8105}, //11194 #CJK UNIFIED IDEOGRAPH + {0xC37C, 0x8107}, //11195 #CJK UNIFIED IDEOGRAPH + {0xC37D, 0x8108}, //11196 #CJK UNIFIED IDEOGRAPH + {0xC37E, 0x810B}, //11197 #CJK UNIFIED IDEOGRAPH + {0xC380, 0x810C}, //11198 #CJK UNIFIED IDEOGRAPH + {0xC381, 0x8115}, //11199 #CJK UNIFIED IDEOGRAPH + {0xC382, 0x8117}, //11200 #CJK UNIFIED IDEOGRAPH + {0xC383, 0x8119}, //11201 #CJK UNIFIED IDEOGRAPH + {0xC384, 0x811B}, //11202 #CJK UNIFIED IDEOGRAPH + {0xC385, 0x811C}, //11203 #CJK UNIFIED IDEOGRAPH + {0xC386, 0x811D}, //11204 #CJK UNIFIED IDEOGRAPH + {0xC387, 0x811F}, //11205 #CJK UNIFIED IDEOGRAPH + {0xC388, 0x8120}, //11206 #CJK UNIFIED IDEOGRAPH + {0xC389, 0x8121}, //11207 #CJK UNIFIED IDEOGRAPH + {0xC38A, 0x8122}, //11208 #CJK UNIFIED IDEOGRAPH + {0xC38B, 0x8123}, //11209 #CJK UNIFIED IDEOGRAPH + {0xC38C, 0x8124}, //11210 #CJK UNIFIED IDEOGRAPH + {0xC38D, 0x8125}, //11211 #CJK UNIFIED IDEOGRAPH + {0xC38E, 0x8126}, //11212 #CJK UNIFIED IDEOGRAPH + {0xC38F, 0x8127}, //11213 #CJK UNIFIED IDEOGRAPH + {0xC390, 0x8128}, //11214 #CJK UNIFIED IDEOGRAPH + {0xC391, 0x8129}, //11215 #CJK UNIFIED IDEOGRAPH + {0xC392, 0x812A}, //11216 #CJK UNIFIED IDEOGRAPH + {0xC393, 0x812B}, //11217 #CJK UNIFIED IDEOGRAPH + {0xC394, 0x812D}, //11218 #CJK UNIFIED IDEOGRAPH + {0xC395, 0x812E}, //11219 #CJK UNIFIED IDEOGRAPH + {0xC396, 0x8130}, //11220 #CJK UNIFIED IDEOGRAPH + {0xC397, 0x8133}, //11221 #CJK UNIFIED IDEOGRAPH + {0xC398, 0x8134}, //11222 #CJK UNIFIED IDEOGRAPH + {0xC399, 0x8135}, //11223 #CJK UNIFIED IDEOGRAPH + {0xC39A, 0x8137}, //11224 #CJK UNIFIED IDEOGRAPH + {0xC39B, 0x8139}, //11225 #CJK UNIFIED IDEOGRAPH + {0xC39C, 0x813A}, //11226 #CJK UNIFIED IDEOGRAPH + {0xC39D, 0x813B}, //11227 #CJK UNIFIED IDEOGRAPH + {0xC39E, 0x813C}, //11228 #CJK UNIFIED IDEOGRAPH + {0xC39F, 0x813D}, //11229 #CJK UNIFIED IDEOGRAPH + {0xC3A0, 0x813F}, //11230 #CJK UNIFIED IDEOGRAPH + {0xC3A1, 0x8C29}, //11231 #CJK UNIFIED IDEOGRAPH + {0xC3A2, 0x8292}, //11232 #CJK UNIFIED IDEOGRAPH + {0xC3A3, 0x832B}, //11233 #CJK UNIFIED IDEOGRAPH + {0xC3A4, 0x76F2}, //11234 #CJK UNIFIED IDEOGRAPH + {0xC3A5, 0x6C13}, //11235 #CJK UNIFIED IDEOGRAPH + {0xC3A6, 0x5FD9}, //11236 #CJK UNIFIED IDEOGRAPH + {0xC3A7, 0x83BD}, //11237 #CJK UNIFIED IDEOGRAPH + {0xC3A8, 0x732B}, //11238 #CJK UNIFIED IDEOGRAPH + {0xC3A9, 0x8305}, //11239 #CJK UNIFIED IDEOGRAPH + {0xC3AA, 0x951A}, //11240 #CJK UNIFIED IDEOGRAPH + {0xC3AB, 0x6BDB}, //11241 #CJK UNIFIED IDEOGRAPH + {0xC3AC, 0x77DB}, //11242 #CJK UNIFIED IDEOGRAPH + {0xC3AD, 0x94C6}, //11243 #CJK UNIFIED IDEOGRAPH + {0xC3AE, 0x536F}, //11244 #CJK UNIFIED IDEOGRAPH + {0xC3AF, 0x8302}, //11245 #CJK UNIFIED IDEOGRAPH + {0xC3B0, 0x5192}, //11246 #CJK UNIFIED IDEOGRAPH + {0xC3B1, 0x5E3D}, //11247 #CJK UNIFIED IDEOGRAPH + {0xC3B2, 0x8C8C}, //11248 #CJK UNIFIED IDEOGRAPH + {0xC3B3, 0x8D38}, //11249 #CJK UNIFIED IDEOGRAPH + {0xC3B4, 0x4E48}, //11250 #CJK UNIFIED IDEOGRAPH + {0xC3B5, 0x73AB}, //11251 #CJK UNIFIED IDEOGRAPH + {0xC3B6, 0x679A}, //11252 #CJK UNIFIED IDEOGRAPH + {0xC3B7, 0x6885}, //11253 #CJK UNIFIED IDEOGRAPH + {0xC3B8, 0x9176}, //11254 #CJK UNIFIED IDEOGRAPH + {0xC3B9, 0x9709}, //11255 #CJK UNIFIED IDEOGRAPH + {0xC3BA, 0x7164}, //11256 #CJK UNIFIED IDEOGRAPH + {0xC3BB, 0x6CA1}, //11257 #CJK UNIFIED IDEOGRAPH + {0xC3BC, 0x7709}, //11258 #CJK UNIFIED IDEOGRAPH + {0xC3BD, 0x5A92}, //11259 #CJK UNIFIED IDEOGRAPH + {0xC3BE, 0x9541}, //11260 #CJK UNIFIED IDEOGRAPH + {0xC3BF, 0x6BCF}, //11261 #CJK UNIFIED IDEOGRAPH + {0xC3C0, 0x7F8E}, //11262 #CJK UNIFIED IDEOGRAPH + {0xC3C1, 0x6627}, //11263 #CJK UNIFIED IDEOGRAPH + {0xC3C2, 0x5BD0}, //11264 #CJK UNIFIED IDEOGRAPH + {0xC3C3, 0x59B9}, //11265 #CJK UNIFIED IDEOGRAPH + {0xC3C4, 0x5A9A}, //11266 #CJK UNIFIED IDEOGRAPH + {0xC3C5, 0x95E8}, //11267 #CJK UNIFIED IDEOGRAPH + {0xC3C6, 0x95F7}, //11268 #CJK UNIFIED IDEOGRAPH + {0xC3C7, 0x4EEC}, //11269 #CJK UNIFIED IDEOGRAPH + {0xC3C8, 0x840C}, //11270 #CJK UNIFIED IDEOGRAPH + {0xC3C9, 0x8499}, //11271 #CJK UNIFIED IDEOGRAPH + {0xC3CA, 0x6AAC}, //11272 #CJK UNIFIED IDEOGRAPH + {0xC3CB, 0x76DF}, //11273 #CJK UNIFIED IDEOGRAPH + {0xC3CC, 0x9530}, //11274 #CJK UNIFIED IDEOGRAPH + {0xC3CD, 0x731B}, //11275 #CJK UNIFIED IDEOGRAPH + {0xC3CE, 0x68A6}, //11276 #CJK UNIFIED IDEOGRAPH + {0xC3CF, 0x5B5F}, //11277 #CJK UNIFIED IDEOGRAPH + {0xC3D0, 0x772F}, //11278 #CJK UNIFIED IDEOGRAPH + {0xC3D1, 0x919A}, //11279 #CJK UNIFIED IDEOGRAPH + {0xC3D2, 0x9761}, //11280 #CJK UNIFIED IDEOGRAPH + {0xC3D3, 0x7CDC}, //11281 #CJK UNIFIED IDEOGRAPH + {0xC3D4, 0x8FF7}, //11282 #CJK UNIFIED IDEOGRAPH + {0xC3D5, 0x8C1C}, //11283 #CJK UNIFIED IDEOGRAPH + {0xC3D6, 0x5F25}, //11284 #CJK UNIFIED IDEOGRAPH + {0xC3D7, 0x7C73}, //11285 #CJK UNIFIED IDEOGRAPH + {0xC3D8, 0x79D8}, //11286 #CJK UNIFIED IDEOGRAPH + {0xC3D9, 0x89C5}, //11287 #CJK UNIFIED IDEOGRAPH + {0xC3DA, 0x6CCC}, //11288 #CJK UNIFIED IDEOGRAPH + {0xC3DB, 0x871C}, //11289 #CJK UNIFIED IDEOGRAPH + {0xC3DC, 0x5BC6}, //11290 #CJK UNIFIED IDEOGRAPH + {0xC3DD, 0x5E42}, //11291 #CJK UNIFIED IDEOGRAPH + {0xC3DE, 0x68C9}, //11292 #CJK UNIFIED IDEOGRAPH + {0xC3DF, 0x7720}, //11293 #CJK UNIFIED IDEOGRAPH + {0xC3E0, 0x7EF5}, //11294 #CJK UNIFIED IDEOGRAPH + {0xC3E1, 0x5195}, //11295 #CJK UNIFIED IDEOGRAPH + {0xC3E2, 0x514D}, //11296 #CJK UNIFIED IDEOGRAPH + {0xC3E3, 0x52C9}, //11297 #CJK UNIFIED IDEOGRAPH + {0xC3E4, 0x5A29}, //11298 #CJK UNIFIED IDEOGRAPH + {0xC3E5, 0x7F05}, //11299 #CJK UNIFIED IDEOGRAPH + {0xC3E6, 0x9762}, //11300 #CJK UNIFIED IDEOGRAPH + {0xC3E7, 0x82D7}, //11301 #CJK UNIFIED IDEOGRAPH + {0xC3E8, 0x63CF}, //11302 #CJK UNIFIED IDEOGRAPH + {0xC3E9, 0x7784}, //11303 #CJK UNIFIED IDEOGRAPH + {0xC3EA, 0x85D0}, //11304 #CJK UNIFIED IDEOGRAPH + {0xC3EB, 0x79D2}, //11305 #CJK UNIFIED IDEOGRAPH + {0xC3EC, 0x6E3A}, //11306 #CJK UNIFIED IDEOGRAPH + {0xC3ED, 0x5E99}, //11307 #CJK UNIFIED IDEOGRAPH + {0xC3EE, 0x5999}, //11308 #CJK UNIFIED IDEOGRAPH + {0xC3EF, 0x8511}, //11309 #CJK UNIFIED IDEOGRAPH + {0xC3F0, 0x706D}, //11310 #CJK UNIFIED IDEOGRAPH + {0xC3F1, 0x6C11}, //11311 #CJK UNIFIED IDEOGRAPH + {0xC3F2, 0x62BF}, //11312 #CJK UNIFIED IDEOGRAPH + {0xC3F3, 0x76BF}, //11313 #CJK UNIFIED IDEOGRAPH + {0xC3F4, 0x654F}, //11314 #CJK UNIFIED IDEOGRAPH + {0xC3F5, 0x60AF}, //11315 #CJK UNIFIED IDEOGRAPH + {0xC3F6, 0x95FD}, //11316 #CJK UNIFIED IDEOGRAPH + {0xC3F7, 0x660E}, //11317 #CJK UNIFIED IDEOGRAPH + {0xC3F8, 0x879F}, //11318 #CJK UNIFIED IDEOGRAPH + {0xC3F9, 0x9E23}, //11319 #CJK UNIFIED IDEOGRAPH + {0xC3FA, 0x94ED}, //11320 #CJK UNIFIED IDEOGRAPH + {0xC3FB, 0x540D}, //11321 #CJK UNIFIED IDEOGRAPH + {0xC3FC, 0x547D}, //11322 #CJK UNIFIED IDEOGRAPH + {0xC3FD, 0x8C2C}, //11323 #CJK UNIFIED IDEOGRAPH + {0xC3FE, 0x6478}, //11324 #CJK UNIFIED IDEOGRAPH + {0xC440, 0x8140}, //11325 #CJK UNIFIED IDEOGRAPH + {0xC441, 0x8141}, //11326 #CJK UNIFIED IDEOGRAPH + {0xC442, 0x8142}, //11327 #CJK UNIFIED IDEOGRAPH + {0xC443, 0x8143}, //11328 #CJK UNIFIED IDEOGRAPH + {0xC444, 0x8144}, //11329 #CJK UNIFIED IDEOGRAPH + {0xC445, 0x8145}, //11330 #CJK UNIFIED IDEOGRAPH + {0xC446, 0x8147}, //11331 #CJK UNIFIED IDEOGRAPH + {0xC447, 0x8149}, //11332 #CJK UNIFIED IDEOGRAPH + {0xC448, 0x814D}, //11333 #CJK UNIFIED IDEOGRAPH + {0xC449, 0x814E}, //11334 #CJK UNIFIED IDEOGRAPH + {0xC44A, 0x814F}, //11335 #CJK UNIFIED IDEOGRAPH + {0xC44B, 0x8152}, //11336 #CJK UNIFIED IDEOGRAPH + {0xC44C, 0x8156}, //11337 #CJK UNIFIED IDEOGRAPH + {0xC44D, 0x8157}, //11338 #CJK UNIFIED IDEOGRAPH + {0xC44E, 0x8158}, //11339 #CJK UNIFIED IDEOGRAPH + {0xC44F, 0x815B}, //11340 #CJK UNIFIED IDEOGRAPH + {0xC450, 0x815C}, //11341 #CJK UNIFIED IDEOGRAPH + {0xC451, 0x815D}, //11342 #CJK UNIFIED IDEOGRAPH + {0xC452, 0x815E}, //11343 #CJK UNIFIED IDEOGRAPH + {0xC453, 0x815F}, //11344 #CJK UNIFIED IDEOGRAPH + {0xC454, 0x8161}, //11345 #CJK UNIFIED IDEOGRAPH + {0xC455, 0x8162}, //11346 #CJK UNIFIED IDEOGRAPH + {0xC456, 0x8163}, //11347 #CJK UNIFIED IDEOGRAPH + {0xC457, 0x8164}, //11348 #CJK UNIFIED IDEOGRAPH + {0xC458, 0x8166}, //11349 #CJK UNIFIED IDEOGRAPH + {0xC459, 0x8168}, //11350 #CJK UNIFIED IDEOGRAPH + {0xC45A, 0x816A}, //11351 #CJK UNIFIED IDEOGRAPH + {0xC45B, 0x816B}, //11352 #CJK UNIFIED IDEOGRAPH + {0xC45C, 0x816C}, //11353 #CJK UNIFIED IDEOGRAPH + {0xC45D, 0x816F}, //11354 #CJK UNIFIED IDEOGRAPH + {0xC45E, 0x8172}, //11355 #CJK UNIFIED IDEOGRAPH + {0xC45F, 0x8173}, //11356 #CJK UNIFIED IDEOGRAPH + {0xC460, 0x8175}, //11357 #CJK UNIFIED IDEOGRAPH + {0xC461, 0x8176}, //11358 #CJK UNIFIED IDEOGRAPH + {0xC462, 0x8177}, //11359 #CJK UNIFIED IDEOGRAPH + {0xC463, 0x8178}, //11360 #CJK UNIFIED IDEOGRAPH + {0xC464, 0x8181}, //11361 #CJK UNIFIED IDEOGRAPH + {0xC465, 0x8183}, //11362 #CJK UNIFIED IDEOGRAPH + {0xC466, 0x8184}, //11363 #CJK UNIFIED IDEOGRAPH + {0xC467, 0x8185}, //11364 #CJK UNIFIED IDEOGRAPH + {0xC468, 0x8186}, //11365 #CJK UNIFIED IDEOGRAPH + {0xC469, 0x8187}, //11366 #CJK UNIFIED IDEOGRAPH + {0xC46A, 0x8189}, //11367 #CJK UNIFIED IDEOGRAPH + {0xC46B, 0x818B}, //11368 #CJK UNIFIED IDEOGRAPH + {0xC46C, 0x818C}, //11369 #CJK UNIFIED IDEOGRAPH + {0xC46D, 0x818D}, //11370 #CJK UNIFIED IDEOGRAPH + {0xC46E, 0x818E}, //11371 #CJK UNIFIED IDEOGRAPH + {0xC46F, 0x8190}, //11372 #CJK UNIFIED IDEOGRAPH + {0xC470, 0x8192}, //11373 #CJK UNIFIED IDEOGRAPH + {0xC471, 0x8193}, //11374 #CJK UNIFIED IDEOGRAPH + {0xC472, 0x8194}, //11375 #CJK UNIFIED IDEOGRAPH + {0xC473, 0x8195}, //11376 #CJK UNIFIED IDEOGRAPH + {0xC474, 0x8196}, //11377 #CJK UNIFIED IDEOGRAPH + {0xC475, 0x8197}, //11378 #CJK UNIFIED IDEOGRAPH + {0xC476, 0x8199}, //11379 #CJK UNIFIED IDEOGRAPH + {0xC477, 0x819A}, //11380 #CJK UNIFIED IDEOGRAPH + {0xC478, 0x819E}, //11381 #CJK UNIFIED IDEOGRAPH + {0xC479, 0x819F}, //11382 #CJK UNIFIED IDEOGRAPH + {0xC47A, 0x81A0}, //11383 #CJK UNIFIED IDEOGRAPH + {0xC47B, 0x81A1}, //11384 #CJK UNIFIED IDEOGRAPH + {0xC47C, 0x81A2}, //11385 #CJK UNIFIED IDEOGRAPH + {0xC47D, 0x81A4}, //11386 #CJK UNIFIED IDEOGRAPH + {0xC47E, 0x81A5}, //11387 #CJK UNIFIED IDEOGRAPH + {0xC480, 0x81A7}, //11388 #CJK UNIFIED IDEOGRAPH + {0xC481, 0x81A9}, //11389 #CJK UNIFIED IDEOGRAPH + {0xC482, 0x81AB}, //11390 #CJK UNIFIED IDEOGRAPH + {0xC483, 0x81AC}, //11391 #CJK UNIFIED IDEOGRAPH + {0xC484, 0x81AD}, //11392 #CJK UNIFIED IDEOGRAPH + {0xC485, 0x81AE}, //11393 #CJK UNIFIED IDEOGRAPH + {0xC486, 0x81AF}, //11394 #CJK UNIFIED IDEOGRAPH + {0xC487, 0x81B0}, //11395 #CJK UNIFIED IDEOGRAPH + {0xC488, 0x81B1}, //11396 #CJK UNIFIED IDEOGRAPH + {0xC489, 0x81B2}, //11397 #CJK UNIFIED IDEOGRAPH + {0xC48A, 0x81B4}, //11398 #CJK UNIFIED IDEOGRAPH + {0xC48B, 0x81B5}, //11399 #CJK UNIFIED IDEOGRAPH + {0xC48C, 0x81B6}, //11400 #CJK UNIFIED IDEOGRAPH + {0xC48D, 0x81B7}, //11401 #CJK UNIFIED IDEOGRAPH + {0xC48E, 0x81B8}, //11402 #CJK UNIFIED IDEOGRAPH + {0xC48F, 0x81B9}, //11403 #CJK UNIFIED IDEOGRAPH + {0xC490, 0x81BC}, //11404 #CJK UNIFIED IDEOGRAPH + {0xC491, 0x81BD}, //11405 #CJK UNIFIED IDEOGRAPH + {0xC492, 0x81BE}, //11406 #CJK UNIFIED IDEOGRAPH + {0xC493, 0x81BF}, //11407 #CJK UNIFIED IDEOGRAPH + {0xC494, 0x81C4}, //11408 #CJK UNIFIED IDEOGRAPH + {0xC495, 0x81C5}, //11409 #CJK UNIFIED IDEOGRAPH + {0xC496, 0x81C7}, //11410 #CJK UNIFIED IDEOGRAPH + {0xC497, 0x81C8}, //11411 #CJK UNIFIED IDEOGRAPH + {0xC498, 0x81C9}, //11412 #CJK UNIFIED IDEOGRAPH + {0xC499, 0x81CB}, //11413 #CJK UNIFIED IDEOGRAPH + {0xC49A, 0x81CD}, //11414 #CJK UNIFIED IDEOGRAPH + {0xC49B, 0x81CE}, //11415 #CJK UNIFIED IDEOGRAPH + {0xC49C, 0x81CF}, //11416 #CJK UNIFIED IDEOGRAPH + {0xC49D, 0x81D0}, //11417 #CJK UNIFIED IDEOGRAPH + {0xC49E, 0x81D1}, //11418 #CJK UNIFIED IDEOGRAPH + {0xC49F, 0x81D2}, //11419 #CJK UNIFIED IDEOGRAPH + {0xC4A0, 0x81D3}, //11420 #CJK UNIFIED IDEOGRAPH + {0xC4A1, 0x6479}, //11421 #CJK UNIFIED IDEOGRAPH + {0xC4A2, 0x8611}, //11422 #CJK UNIFIED IDEOGRAPH + {0xC4A3, 0x6A21}, //11423 #CJK UNIFIED IDEOGRAPH + {0xC4A4, 0x819C}, //11424 #CJK UNIFIED IDEOGRAPH + {0xC4A5, 0x78E8}, //11425 #CJK UNIFIED IDEOGRAPH + {0xC4A6, 0x6469}, //11426 #CJK UNIFIED IDEOGRAPH + {0xC4A7, 0x9B54}, //11427 #CJK UNIFIED IDEOGRAPH + {0xC4A8, 0x62B9}, //11428 #CJK UNIFIED IDEOGRAPH + {0xC4A9, 0x672B}, //11429 #CJK UNIFIED IDEOGRAPH + {0xC4AA, 0x83AB}, //11430 #CJK UNIFIED IDEOGRAPH + {0xC4AB, 0x58A8}, //11431 #CJK UNIFIED IDEOGRAPH + {0xC4AC, 0x9ED8}, //11432 #CJK UNIFIED IDEOGRAPH + {0xC4AD, 0x6CAB}, //11433 #CJK UNIFIED IDEOGRAPH + {0xC4AE, 0x6F20}, //11434 #CJK UNIFIED IDEOGRAPH + {0xC4AF, 0x5BDE}, //11435 #CJK UNIFIED IDEOGRAPH + {0xC4B0, 0x964C}, //11436 #CJK UNIFIED IDEOGRAPH + {0xC4B1, 0x8C0B}, //11437 #CJK UNIFIED IDEOGRAPH + {0xC4B2, 0x725F}, //11438 #CJK UNIFIED IDEOGRAPH + {0xC4B3, 0x67D0}, //11439 #CJK UNIFIED IDEOGRAPH + {0xC4B4, 0x62C7}, //11440 #CJK UNIFIED IDEOGRAPH + {0xC4B5, 0x7261}, //11441 #CJK UNIFIED IDEOGRAPH + {0xC4B6, 0x4EA9}, //11442 #CJK UNIFIED IDEOGRAPH + {0xC4B7, 0x59C6}, //11443 #CJK UNIFIED IDEOGRAPH + {0xC4B8, 0x6BCD}, //11444 #CJK UNIFIED IDEOGRAPH + {0xC4B9, 0x5893}, //11445 #CJK UNIFIED IDEOGRAPH + {0xC4BA, 0x66AE}, //11446 #CJK UNIFIED IDEOGRAPH + {0xC4BB, 0x5E55}, //11447 #CJK UNIFIED IDEOGRAPH + {0xC4BC, 0x52DF}, //11448 #CJK UNIFIED IDEOGRAPH + {0xC4BD, 0x6155}, //11449 #CJK UNIFIED IDEOGRAPH + {0xC4BE, 0x6728}, //11450 #CJK UNIFIED IDEOGRAPH + {0xC4BF, 0x76EE}, //11451 #CJK UNIFIED IDEOGRAPH + {0xC4C0, 0x7766}, //11452 #CJK UNIFIED IDEOGRAPH + {0xC4C1, 0x7267}, //11453 #CJK UNIFIED IDEOGRAPH + {0xC4C2, 0x7A46}, //11454 #CJK UNIFIED IDEOGRAPH + {0xC4C3, 0x62FF}, //11455 #CJK UNIFIED IDEOGRAPH + {0xC4C4, 0x54EA}, //11456 #CJK UNIFIED IDEOGRAPH + {0xC4C5, 0x5450}, //11457 #CJK UNIFIED IDEOGRAPH + {0xC4C6, 0x94A0}, //11458 #CJK UNIFIED IDEOGRAPH + {0xC4C7, 0x90A3}, //11459 #CJK UNIFIED IDEOGRAPH + {0xC4C8, 0x5A1C}, //11460 #CJK UNIFIED IDEOGRAPH + {0xC4C9, 0x7EB3}, //11461 #CJK UNIFIED IDEOGRAPH + {0xC4CA, 0x6C16}, //11462 #CJK UNIFIED IDEOGRAPH + {0xC4CB, 0x4E43}, //11463 #CJK UNIFIED IDEOGRAPH + {0xC4CC, 0x5976}, //11464 #CJK UNIFIED IDEOGRAPH + {0xC4CD, 0x8010}, //11465 #CJK UNIFIED IDEOGRAPH + {0xC4CE, 0x5948}, //11466 #CJK UNIFIED IDEOGRAPH + {0xC4CF, 0x5357}, //11467 #CJK UNIFIED IDEOGRAPH + {0xC4D0, 0x7537}, //11468 #CJK UNIFIED IDEOGRAPH + {0xC4D1, 0x96BE}, //11469 #CJK UNIFIED IDEOGRAPH + {0xC4D2, 0x56CA}, //11470 #CJK UNIFIED IDEOGRAPH + {0xC4D3, 0x6320}, //11471 #CJK UNIFIED IDEOGRAPH + {0xC4D4, 0x8111}, //11472 #CJK UNIFIED IDEOGRAPH + {0xC4D5, 0x607C}, //11473 #CJK UNIFIED IDEOGRAPH + {0xC4D6, 0x95F9}, //11474 #CJK UNIFIED IDEOGRAPH + {0xC4D7, 0x6DD6}, //11475 #CJK UNIFIED IDEOGRAPH + {0xC4D8, 0x5462}, //11476 #CJK UNIFIED IDEOGRAPH + {0xC4D9, 0x9981}, //11477 #CJK UNIFIED IDEOGRAPH + {0xC4DA, 0x5185}, //11478 #CJK UNIFIED IDEOGRAPH + {0xC4DB, 0x5AE9}, //11479 #CJK UNIFIED IDEOGRAPH + {0xC4DC, 0x80FD}, //11480 #CJK UNIFIED IDEOGRAPH + {0xC4DD, 0x59AE}, //11481 #CJK UNIFIED IDEOGRAPH + {0xC4DE, 0x9713}, //11482 #CJK UNIFIED IDEOGRAPH + {0xC4DF, 0x502A}, //11483 #CJK UNIFIED IDEOGRAPH + {0xC4E0, 0x6CE5}, //11484 #CJK UNIFIED IDEOGRAPH + {0xC4E1, 0x5C3C}, //11485 #CJK UNIFIED IDEOGRAPH + {0xC4E2, 0x62DF}, //11486 #CJK UNIFIED IDEOGRAPH + {0xC4E3, 0x4F60}, //11487 #CJK UNIFIED IDEOGRAPH + {0xC4E4, 0x533F}, //11488 #CJK UNIFIED IDEOGRAPH + {0xC4E5, 0x817B}, //11489 #CJK UNIFIED IDEOGRAPH + {0xC4E6, 0x9006}, //11490 #CJK UNIFIED IDEOGRAPH + {0xC4E7, 0x6EBA}, //11491 #CJK UNIFIED IDEOGRAPH + {0xC4E8, 0x852B}, //11492 #CJK UNIFIED IDEOGRAPH + {0xC4E9, 0x62C8}, //11493 #CJK UNIFIED IDEOGRAPH + {0xC4EA, 0x5E74}, //11494 #CJK UNIFIED IDEOGRAPH + {0xC4EB, 0x78BE}, //11495 #CJK UNIFIED IDEOGRAPH + {0xC4EC, 0x64B5}, //11496 #CJK UNIFIED IDEOGRAPH + {0xC4ED, 0x637B}, //11497 #CJK UNIFIED IDEOGRAPH + {0xC4EE, 0x5FF5}, //11498 #CJK UNIFIED IDEOGRAPH + {0xC4EF, 0x5A18}, //11499 #CJK UNIFIED IDEOGRAPH + {0xC4F0, 0x917F}, //11500 #CJK UNIFIED IDEOGRAPH + {0xC4F1, 0x9E1F}, //11501 #CJK UNIFIED IDEOGRAPH + {0xC4F2, 0x5C3F}, //11502 #CJK UNIFIED IDEOGRAPH + {0xC4F3, 0x634F}, //11503 #CJK UNIFIED IDEOGRAPH + {0xC4F4, 0x8042}, //11504 #CJK UNIFIED IDEOGRAPH + {0xC4F5, 0x5B7D}, //11505 #CJK UNIFIED IDEOGRAPH + {0xC4F6, 0x556E}, //11506 #CJK UNIFIED IDEOGRAPH + {0xC4F7, 0x954A}, //11507 #CJK UNIFIED IDEOGRAPH + {0xC4F8, 0x954D}, //11508 #CJK UNIFIED IDEOGRAPH + {0xC4F9, 0x6D85}, //11509 #CJK UNIFIED IDEOGRAPH + {0xC4FA, 0x60A8}, //11510 #CJK UNIFIED IDEOGRAPH + {0xC4FB, 0x67E0}, //11511 #CJK UNIFIED IDEOGRAPH + {0xC4FC, 0x72DE}, //11512 #CJK UNIFIED IDEOGRAPH + {0xC4FD, 0x51DD}, //11513 #CJK UNIFIED IDEOGRAPH + {0xC4FE, 0x5B81}, //11514 #CJK UNIFIED IDEOGRAPH + {0xC540, 0x81D4}, //11515 #CJK UNIFIED IDEOGRAPH + {0xC541, 0x81D5}, //11516 #CJK UNIFIED IDEOGRAPH + {0xC542, 0x81D6}, //11517 #CJK UNIFIED IDEOGRAPH + {0xC543, 0x81D7}, //11518 #CJK UNIFIED IDEOGRAPH + {0xC544, 0x81D8}, //11519 #CJK UNIFIED IDEOGRAPH + {0xC545, 0x81D9}, //11520 #CJK UNIFIED IDEOGRAPH + {0xC546, 0x81DA}, //11521 #CJK UNIFIED IDEOGRAPH + {0xC547, 0x81DB}, //11522 #CJK UNIFIED IDEOGRAPH + {0xC548, 0x81DC}, //11523 #CJK UNIFIED IDEOGRAPH + {0xC549, 0x81DD}, //11524 #CJK UNIFIED IDEOGRAPH + {0xC54A, 0x81DE}, //11525 #CJK UNIFIED IDEOGRAPH + {0xC54B, 0x81DF}, //11526 #CJK UNIFIED IDEOGRAPH + {0xC54C, 0x81E0}, //11527 #CJK UNIFIED IDEOGRAPH + {0xC54D, 0x81E1}, //11528 #CJK UNIFIED IDEOGRAPH + {0xC54E, 0x81E2}, //11529 #CJK UNIFIED IDEOGRAPH + {0xC54F, 0x81E4}, //11530 #CJK UNIFIED IDEOGRAPH + {0xC550, 0x81E5}, //11531 #CJK UNIFIED IDEOGRAPH + {0xC551, 0x81E6}, //11532 #CJK UNIFIED IDEOGRAPH + {0xC552, 0x81E8}, //11533 #CJK UNIFIED IDEOGRAPH + {0xC553, 0x81E9}, //11534 #CJK UNIFIED IDEOGRAPH + {0xC554, 0x81EB}, //11535 #CJK UNIFIED IDEOGRAPH + {0xC555, 0x81EE}, //11536 #CJK UNIFIED IDEOGRAPH + {0xC556, 0x81EF}, //11537 #CJK UNIFIED IDEOGRAPH + {0xC557, 0x81F0}, //11538 #CJK UNIFIED IDEOGRAPH + {0xC558, 0x81F1}, //11539 #CJK UNIFIED IDEOGRAPH + {0xC559, 0x81F2}, //11540 #CJK UNIFIED IDEOGRAPH + {0xC55A, 0x81F5}, //11541 #CJK UNIFIED IDEOGRAPH + {0xC55B, 0x81F6}, //11542 #CJK UNIFIED IDEOGRAPH + {0xC55C, 0x81F7}, //11543 #CJK UNIFIED IDEOGRAPH + {0xC55D, 0x81F8}, //11544 #CJK UNIFIED IDEOGRAPH + {0xC55E, 0x81F9}, //11545 #CJK UNIFIED IDEOGRAPH + {0xC55F, 0x81FA}, //11546 #CJK UNIFIED IDEOGRAPH + {0xC560, 0x81FD}, //11547 #CJK UNIFIED IDEOGRAPH + {0xC561, 0x81FF}, //11548 #CJK UNIFIED IDEOGRAPH + {0xC562, 0x8203}, //11549 #CJK UNIFIED IDEOGRAPH + {0xC563, 0x8207}, //11550 #CJK UNIFIED IDEOGRAPH + {0xC564, 0x8208}, //11551 #CJK UNIFIED IDEOGRAPH + {0xC565, 0x8209}, //11552 #CJK UNIFIED IDEOGRAPH + {0xC566, 0x820A}, //11553 #CJK UNIFIED IDEOGRAPH + {0xC567, 0x820B}, //11554 #CJK UNIFIED IDEOGRAPH + {0xC568, 0x820E}, //11555 #CJK UNIFIED IDEOGRAPH + {0xC569, 0x820F}, //11556 #CJK UNIFIED IDEOGRAPH + {0xC56A, 0x8211}, //11557 #CJK UNIFIED IDEOGRAPH + {0xC56B, 0x8213}, //11558 #CJK UNIFIED IDEOGRAPH + {0xC56C, 0x8215}, //11559 #CJK UNIFIED IDEOGRAPH + {0xC56D, 0x8216}, //11560 #CJK UNIFIED IDEOGRAPH + {0xC56E, 0x8217}, //11561 #CJK UNIFIED IDEOGRAPH + {0xC56F, 0x8218}, //11562 #CJK UNIFIED IDEOGRAPH + {0xC570, 0x8219}, //11563 #CJK UNIFIED IDEOGRAPH + {0xC571, 0x821A}, //11564 #CJK UNIFIED IDEOGRAPH + {0xC572, 0x821D}, //11565 #CJK UNIFIED IDEOGRAPH + {0xC573, 0x8220}, //11566 #CJK UNIFIED IDEOGRAPH + {0xC574, 0x8224}, //11567 #CJK UNIFIED IDEOGRAPH + {0xC575, 0x8225}, //11568 #CJK UNIFIED IDEOGRAPH + {0xC576, 0x8226}, //11569 #CJK UNIFIED IDEOGRAPH + {0xC577, 0x8227}, //11570 #CJK UNIFIED IDEOGRAPH + {0xC578, 0x8229}, //11571 #CJK UNIFIED IDEOGRAPH + {0xC579, 0x822E}, //11572 #CJK UNIFIED IDEOGRAPH + {0xC57A, 0x8232}, //11573 #CJK UNIFIED IDEOGRAPH + {0xC57B, 0x823A}, //11574 #CJK UNIFIED IDEOGRAPH + {0xC57C, 0x823C}, //11575 #CJK UNIFIED IDEOGRAPH + {0xC57D, 0x823D}, //11576 #CJK UNIFIED IDEOGRAPH + {0xC57E, 0x823F}, //11577 #CJK UNIFIED IDEOGRAPH + {0xC580, 0x8240}, //11578 #CJK UNIFIED IDEOGRAPH + {0xC581, 0x8241}, //11579 #CJK UNIFIED IDEOGRAPH + {0xC582, 0x8242}, //11580 #CJK UNIFIED IDEOGRAPH + {0xC583, 0x8243}, //11581 #CJK UNIFIED IDEOGRAPH + {0xC584, 0x8245}, //11582 #CJK UNIFIED IDEOGRAPH + {0xC585, 0x8246}, //11583 #CJK UNIFIED IDEOGRAPH + {0xC586, 0x8248}, //11584 #CJK UNIFIED IDEOGRAPH + {0xC587, 0x824A}, //11585 #CJK UNIFIED IDEOGRAPH + {0xC588, 0x824C}, //11586 #CJK UNIFIED IDEOGRAPH + {0xC589, 0x824D}, //11587 #CJK UNIFIED IDEOGRAPH + {0xC58A, 0x824E}, //11588 #CJK UNIFIED IDEOGRAPH + {0xC58B, 0x8250}, //11589 #CJK UNIFIED IDEOGRAPH + {0xC58C, 0x8251}, //11590 #CJK UNIFIED IDEOGRAPH + {0xC58D, 0x8252}, //11591 #CJK UNIFIED IDEOGRAPH + {0xC58E, 0x8253}, //11592 #CJK UNIFIED IDEOGRAPH + {0xC58F, 0x8254}, //11593 #CJK UNIFIED IDEOGRAPH + {0xC590, 0x8255}, //11594 #CJK UNIFIED IDEOGRAPH + {0xC591, 0x8256}, //11595 #CJK UNIFIED IDEOGRAPH + {0xC592, 0x8257}, //11596 #CJK UNIFIED IDEOGRAPH + {0xC593, 0x8259}, //11597 #CJK UNIFIED IDEOGRAPH + {0xC594, 0x825B}, //11598 #CJK UNIFIED IDEOGRAPH + {0xC595, 0x825C}, //11599 #CJK UNIFIED IDEOGRAPH + {0xC596, 0x825D}, //11600 #CJK UNIFIED IDEOGRAPH + {0xC597, 0x825E}, //11601 #CJK UNIFIED IDEOGRAPH + {0xC598, 0x8260}, //11602 #CJK UNIFIED IDEOGRAPH + {0xC599, 0x8261}, //11603 #CJK UNIFIED IDEOGRAPH + {0xC59A, 0x8262}, //11604 #CJK UNIFIED IDEOGRAPH + {0xC59B, 0x8263}, //11605 #CJK UNIFIED IDEOGRAPH + {0xC59C, 0x8264}, //11606 #CJK UNIFIED IDEOGRAPH + {0xC59D, 0x8265}, //11607 #CJK UNIFIED IDEOGRAPH + {0xC59E, 0x8266}, //11608 #CJK UNIFIED IDEOGRAPH + {0xC59F, 0x8267}, //11609 #CJK UNIFIED IDEOGRAPH + {0xC5A0, 0x8269}, //11610 #CJK UNIFIED IDEOGRAPH + {0xC5A1, 0x62E7}, //11611 #CJK UNIFIED IDEOGRAPH + {0xC5A2, 0x6CDE}, //11612 #CJK UNIFIED IDEOGRAPH + {0xC5A3, 0x725B}, //11613 #CJK UNIFIED IDEOGRAPH + {0xC5A4, 0x626D}, //11614 #CJK UNIFIED IDEOGRAPH + {0xC5A5, 0x94AE}, //11615 #CJK UNIFIED IDEOGRAPH + {0xC5A6, 0x7EBD}, //11616 #CJK UNIFIED IDEOGRAPH + {0xC5A7, 0x8113}, //11617 #CJK UNIFIED IDEOGRAPH + {0xC5A8, 0x6D53}, //11618 #CJK UNIFIED IDEOGRAPH + {0xC5A9, 0x519C}, //11619 #CJK UNIFIED IDEOGRAPH + {0xC5AA, 0x5F04}, //11620 #CJK UNIFIED IDEOGRAPH + {0xC5AB, 0x5974}, //11621 #CJK UNIFIED IDEOGRAPH + {0xC5AC, 0x52AA}, //11622 #CJK UNIFIED IDEOGRAPH + {0xC5AD, 0x6012}, //11623 #CJK UNIFIED IDEOGRAPH + {0xC5AE, 0x5973}, //11624 #CJK UNIFIED IDEOGRAPH + {0xC5AF, 0x6696}, //11625 #CJK UNIFIED IDEOGRAPH + {0xC5B0, 0x8650}, //11626 #CJK UNIFIED IDEOGRAPH + {0xC5B1, 0x759F}, //11627 #CJK UNIFIED IDEOGRAPH + {0xC5B2, 0x632A}, //11628 #CJK UNIFIED IDEOGRAPH + {0xC5B3, 0x61E6}, //11629 #CJK UNIFIED IDEOGRAPH + {0xC5B4, 0x7CEF}, //11630 #CJK UNIFIED IDEOGRAPH + {0xC5B5, 0x8BFA}, //11631 #CJK UNIFIED IDEOGRAPH + {0xC5B6, 0x54E6}, //11632 #CJK UNIFIED IDEOGRAPH + {0xC5B7, 0x6B27}, //11633 #CJK UNIFIED IDEOGRAPH + {0xC5B8, 0x9E25}, //11634 #CJK UNIFIED IDEOGRAPH + {0xC5B9, 0x6BB4}, //11635 #CJK UNIFIED IDEOGRAPH + {0xC5BA, 0x85D5}, //11636 #CJK UNIFIED IDEOGRAPH + {0xC5BB, 0x5455}, //11637 #CJK UNIFIED IDEOGRAPH + {0xC5BC, 0x5076}, //11638 #CJK UNIFIED IDEOGRAPH + {0xC5BD, 0x6CA4}, //11639 #CJK UNIFIED IDEOGRAPH + {0xC5BE, 0x556A}, //11640 #CJK UNIFIED IDEOGRAPH + {0xC5BF, 0x8DB4}, //11641 #CJK UNIFIED IDEOGRAPH + {0xC5C0, 0x722C}, //11642 #CJK UNIFIED IDEOGRAPH + {0xC5C1, 0x5E15}, //11643 #CJK UNIFIED IDEOGRAPH + {0xC5C2, 0x6015}, //11644 #CJK UNIFIED IDEOGRAPH + {0xC5C3, 0x7436}, //11645 #CJK UNIFIED IDEOGRAPH + {0xC5C4, 0x62CD}, //11646 #CJK UNIFIED IDEOGRAPH + {0xC5C5, 0x6392}, //11647 #CJK UNIFIED IDEOGRAPH + {0xC5C6, 0x724C}, //11648 #CJK UNIFIED IDEOGRAPH + {0xC5C7, 0x5F98}, //11649 #CJK UNIFIED IDEOGRAPH + {0xC5C8, 0x6E43}, //11650 #CJK UNIFIED IDEOGRAPH + {0xC5C9, 0x6D3E}, //11651 #CJK UNIFIED IDEOGRAPH + {0xC5CA, 0x6500}, //11652 #CJK UNIFIED IDEOGRAPH + {0xC5CB, 0x6F58}, //11653 #CJK UNIFIED IDEOGRAPH + {0xC5CC, 0x76D8}, //11654 #CJK UNIFIED IDEOGRAPH + {0xC5CD, 0x78D0}, //11655 #CJK UNIFIED IDEOGRAPH + {0xC5CE, 0x76FC}, //11656 #CJK UNIFIED IDEOGRAPH + {0xC5CF, 0x7554}, //11657 #CJK UNIFIED IDEOGRAPH + {0xC5D0, 0x5224}, //11658 #CJK UNIFIED IDEOGRAPH + {0xC5D1, 0x53DB}, //11659 #CJK UNIFIED IDEOGRAPH + {0xC5D2, 0x4E53}, //11660 #CJK UNIFIED IDEOGRAPH + {0xC5D3, 0x5E9E}, //11661 #CJK UNIFIED IDEOGRAPH + {0xC5D4, 0x65C1}, //11662 #CJK UNIFIED IDEOGRAPH + {0xC5D5, 0x802A}, //11663 #CJK UNIFIED IDEOGRAPH + {0xC5D6, 0x80D6}, //11664 #CJK UNIFIED IDEOGRAPH + {0xC5D7, 0x629B}, //11665 #CJK UNIFIED IDEOGRAPH + {0xC5D8, 0x5486}, //11666 #CJK UNIFIED IDEOGRAPH + {0xC5D9, 0x5228}, //11667 #CJK UNIFIED IDEOGRAPH + {0xC5DA, 0x70AE}, //11668 #CJK UNIFIED IDEOGRAPH + {0xC5DB, 0x888D}, //11669 #CJK UNIFIED IDEOGRAPH + {0xC5DC, 0x8DD1}, //11670 #CJK UNIFIED IDEOGRAPH + {0xC5DD, 0x6CE1}, //11671 #CJK UNIFIED IDEOGRAPH + {0xC5DE, 0x5478}, //11672 #CJK UNIFIED IDEOGRAPH + {0xC5DF, 0x80DA}, //11673 #CJK UNIFIED IDEOGRAPH + {0xC5E0, 0x57F9}, //11674 #CJK UNIFIED IDEOGRAPH + {0xC5E1, 0x88F4}, //11675 #CJK UNIFIED IDEOGRAPH + {0xC5E2, 0x8D54}, //11676 #CJK UNIFIED IDEOGRAPH + {0xC5E3, 0x966A}, //11677 #CJK UNIFIED IDEOGRAPH + {0xC5E4, 0x914D}, //11678 #CJK UNIFIED IDEOGRAPH + {0xC5E5, 0x4F69}, //11679 #CJK UNIFIED IDEOGRAPH + {0xC5E6, 0x6C9B}, //11680 #CJK UNIFIED IDEOGRAPH + {0xC5E7, 0x55B7}, //11681 #CJK UNIFIED IDEOGRAPH + {0xC5E8, 0x76C6}, //11682 #CJK UNIFIED IDEOGRAPH + {0xC5E9, 0x7830}, //11683 #CJK UNIFIED IDEOGRAPH + {0xC5EA, 0x62A8}, //11684 #CJK UNIFIED IDEOGRAPH + {0xC5EB, 0x70F9}, //11685 #CJK UNIFIED IDEOGRAPH + {0xC5EC, 0x6F8E}, //11686 #CJK UNIFIED IDEOGRAPH + {0xC5ED, 0x5F6D}, //11687 #CJK UNIFIED IDEOGRAPH + {0xC5EE, 0x84EC}, //11688 #CJK UNIFIED IDEOGRAPH + {0xC5EF, 0x68DA}, //11689 #CJK UNIFIED IDEOGRAPH + {0xC5F0, 0x787C}, //11690 #CJK UNIFIED IDEOGRAPH + {0xC5F1, 0x7BF7}, //11691 #CJK UNIFIED IDEOGRAPH + {0xC5F2, 0x81A8}, //11692 #CJK UNIFIED IDEOGRAPH + {0xC5F3, 0x670B}, //11693 #CJK UNIFIED IDEOGRAPH + {0xC5F4, 0x9E4F}, //11694 #CJK UNIFIED IDEOGRAPH + {0xC5F5, 0x6367}, //11695 #CJK UNIFIED IDEOGRAPH + {0xC5F6, 0x78B0}, //11696 #CJK UNIFIED IDEOGRAPH + {0xC5F7, 0x576F}, //11697 #CJK UNIFIED IDEOGRAPH + {0xC5F8, 0x7812}, //11698 #CJK UNIFIED IDEOGRAPH + {0xC5F9, 0x9739}, //11699 #CJK UNIFIED IDEOGRAPH + {0xC5FA, 0x6279}, //11700 #CJK UNIFIED IDEOGRAPH + {0xC5FB, 0x62AB}, //11701 #CJK UNIFIED IDEOGRAPH + {0xC5FC, 0x5288}, //11702 #CJK UNIFIED IDEOGRAPH + {0xC5FD, 0x7435}, //11703 #CJK UNIFIED IDEOGRAPH + {0xC5FE, 0x6BD7}, //11704 #CJK UNIFIED IDEOGRAPH + {0xC640, 0x826A}, //11705 #CJK UNIFIED IDEOGRAPH + {0xC641, 0x826B}, //11706 #CJK UNIFIED IDEOGRAPH + {0xC642, 0x826C}, //11707 #CJK UNIFIED IDEOGRAPH + {0xC643, 0x826D}, //11708 #CJK UNIFIED IDEOGRAPH + {0xC644, 0x8271}, //11709 #CJK UNIFIED IDEOGRAPH + {0xC645, 0x8275}, //11710 #CJK UNIFIED IDEOGRAPH + {0xC646, 0x8276}, //11711 #CJK UNIFIED IDEOGRAPH + {0xC647, 0x8277}, //11712 #CJK UNIFIED IDEOGRAPH + {0xC648, 0x8278}, //11713 #CJK UNIFIED IDEOGRAPH + {0xC649, 0x827B}, //11714 #CJK UNIFIED IDEOGRAPH + {0xC64A, 0x827C}, //11715 #CJK UNIFIED IDEOGRAPH + {0xC64B, 0x8280}, //11716 #CJK UNIFIED IDEOGRAPH + {0xC64C, 0x8281}, //11717 #CJK UNIFIED IDEOGRAPH + {0xC64D, 0x8283}, //11718 #CJK UNIFIED IDEOGRAPH + {0xC64E, 0x8285}, //11719 #CJK UNIFIED IDEOGRAPH + {0xC64F, 0x8286}, //11720 #CJK UNIFIED IDEOGRAPH + {0xC650, 0x8287}, //11721 #CJK UNIFIED IDEOGRAPH + {0xC651, 0x8289}, //11722 #CJK UNIFIED IDEOGRAPH + {0xC652, 0x828C}, //11723 #CJK UNIFIED IDEOGRAPH + {0xC653, 0x8290}, //11724 #CJK UNIFIED IDEOGRAPH + {0xC654, 0x8293}, //11725 #CJK UNIFIED IDEOGRAPH + {0xC655, 0x8294}, //11726 #CJK UNIFIED IDEOGRAPH + {0xC656, 0x8295}, //11727 #CJK UNIFIED IDEOGRAPH + {0xC657, 0x8296}, //11728 #CJK UNIFIED IDEOGRAPH + {0xC658, 0x829A}, //11729 #CJK UNIFIED IDEOGRAPH + {0xC659, 0x829B}, //11730 #CJK UNIFIED IDEOGRAPH + {0xC65A, 0x829E}, //11731 #CJK UNIFIED IDEOGRAPH + {0xC65B, 0x82A0}, //11732 #CJK UNIFIED IDEOGRAPH + {0xC65C, 0x82A2}, //11733 #CJK UNIFIED IDEOGRAPH + {0xC65D, 0x82A3}, //11734 #CJK UNIFIED IDEOGRAPH + {0xC65E, 0x82A7}, //11735 #CJK UNIFIED IDEOGRAPH + {0xC65F, 0x82B2}, //11736 #CJK UNIFIED IDEOGRAPH + {0xC660, 0x82B5}, //11737 #CJK UNIFIED IDEOGRAPH + {0xC661, 0x82B6}, //11738 #CJK UNIFIED IDEOGRAPH + {0xC662, 0x82BA}, //11739 #CJK UNIFIED IDEOGRAPH + {0xC663, 0x82BB}, //11740 #CJK UNIFIED IDEOGRAPH + {0xC664, 0x82BC}, //11741 #CJK UNIFIED IDEOGRAPH + {0xC665, 0x82BF}, //11742 #CJK UNIFIED IDEOGRAPH + {0xC666, 0x82C0}, //11743 #CJK UNIFIED IDEOGRAPH + {0xC667, 0x82C2}, //11744 #CJK UNIFIED IDEOGRAPH + {0xC668, 0x82C3}, //11745 #CJK UNIFIED IDEOGRAPH + {0xC669, 0x82C5}, //11746 #CJK UNIFIED IDEOGRAPH + {0xC66A, 0x82C6}, //11747 #CJK UNIFIED IDEOGRAPH + {0xC66B, 0x82C9}, //11748 #CJK UNIFIED IDEOGRAPH + {0xC66C, 0x82D0}, //11749 #CJK UNIFIED IDEOGRAPH + {0xC66D, 0x82D6}, //11750 #CJK UNIFIED IDEOGRAPH + {0xC66E, 0x82D9}, //11751 #CJK UNIFIED IDEOGRAPH + {0xC66F, 0x82DA}, //11752 #CJK UNIFIED IDEOGRAPH + {0xC670, 0x82DD}, //11753 #CJK UNIFIED IDEOGRAPH + {0xC671, 0x82E2}, //11754 #CJK UNIFIED IDEOGRAPH + {0xC672, 0x82E7}, //11755 #CJK UNIFIED IDEOGRAPH + {0xC673, 0x82E8}, //11756 #CJK UNIFIED IDEOGRAPH + {0xC674, 0x82E9}, //11757 #CJK UNIFIED IDEOGRAPH + {0xC675, 0x82EA}, //11758 #CJK UNIFIED IDEOGRAPH + {0xC676, 0x82EC}, //11759 #CJK UNIFIED IDEOGRAPH + {0xC677, 0x82ED}, //11760 #CJK UNIFIED IDEOGRAPH + {0xC678, 0x82EE}, //11761 #CJK UNIFIED IDEOGRAPH + {0xC679, 0x82F0}, //11762 #CJK UNIFIED IDEOGRAPH + {0xC67A, 0x82F2}, //11763 #CJK UNIFIED IDEOGRAPH + {0xC67B, 0x82F3}, //11764 #CJK UNIFIED IDEOGRAPH + {0xC67C, 0x82F5}, //11765 #CJK UNIFIED IDEOGRAPH + {0xC67D, 0x82F6}, //11766 #CJK UNIFIED IDEOGRAPH + {0xC67E, 0x82F8}, //11767 #CJK UNIFIED IDEOGRAPH + {0xC680, 0x82FA}, //11768 #CJK UNIFIED IDEOGRAPH + {0xC681, 0x82FC}, //11769 #CJK UNIFIED IDEOGRAPH + {0xC682, 0x82FD}, //11770 #CJK UNIFIED IDEOGRAPH + {0xC683, 0x82FE}, //11771 #CJK UNIFIED IDEOGRAPH + {0xC684, 0x82FF}, //11772 #CJK UNIFIED IDEOGRAPH + {0xC685, 0x8300}, //11773 #CJK UNIFIED IDEOGRAPH + {0xC686, 0x830A}, //11774 #CJK UNIFIED IDEOGRAPH + {0xC687, 0x830B}, //11775 #CJK UNIFIED IDEOGRAPH + {0xC688, 0x830D}, //11776 #CJK UNIFIED IDEOGRAPH + {0xC689, 0x8310}, //11777 #CJK UNIFIED IDEOGRAPH + {0xC68A, 0x8312}, //11778 #CJK UNIFIED IDEOGRAPH + {0xC68B, 0x8313}, //11779 #CJK UNIFIED IDEOGRAPH + {0xC68C, 0x8316}, //11780 #CJK UNIFIED IDEOGRAPH + {0xC68D, 0x8318}, //11781 #CJK UNIFIED IDEOGRAPH + {0xC68E, 0x8319}, //11782 #CJK UNIFIED IDEOGRAPH + {0xC68F, 0x831D}, //11783 #CJK UNIFIED IDEOGRAPH + {0xC690, 0x831E}, //11784 #CJK UNIFIED IDEOGRAPH + {0xC691, 0x831F}, //11785 #CJK UNIFIED IDEOGRAPH + {0xC692, 0x8320}, //11786 #CJK UNIFIED IDEOGRAPH + {0xC693, 0x8321}, //11787 #CJK UNIFIED IDEOGRAPH + {0xC694, 0x8322}, //11788 #CJK UNIFIED IDEOGRAPH + {0xC695, 0x8323}, //11789 #CJK UNIFIED IDEOGRAPH + {0xC696, 0x8324}, //11790 #CJK UNIFIED IDEOGRAPH + {0xC697, 0x8325}, //11791 #CJK UNIFIED IDEOGRAPH + {0xC698, 0x8326}, //11792 #CJK UNIFIED IDEOGRAPH + {0xC699, 0x8329}, //11793 #CJK UNIFIED IDEOGRAPH + {0xC69A, 0x832A}, //11794 #CJK UNIFIED IDEOGRAPH + {0xC69B, 0x832E}, //11795 #CJK UNIFIED IDEOGRAPH + {0xC69C, 0x8330}, //11796 #CJK UNIFIED IDEOGRAPH + {0xC69D, 0x8332}, //11797 #CJK UNIFIED IDEOGRAPH + {0xC69E, 0x8337}, //11798 #CJK UNIFIED IDEOGRAPH + {0xC69F, 0x833B}, //11799 #CJK UNIFIED IDEOGRAPH + {0xC6A0, 0x833D}, //11800 #CJK UNIFIED IDEOGRAPH + {0xC6A1, 0x5564}, //11801 #CJK UNIFIED IDEOGRAPH + {0xC6A2, 0x813E}, //11802 #CJK UNIFIED IDEOGRAPH + {0xC6A3, 0x75B2}, //11803 #CJK UNIFIED IDEOGRAPH + {0xC6A4, 0x76AE}, //11804 #CJK UNIFIED IDEOGRAPH + {0xC6A5, 0x5339}, //11805 #CJK UNIFIED IDEOGRAPH + {0xC6A6, 0x75DE}, //11806 #CJK UNIFIED IDEOGRAPH + {0xC6A7, 0x50FB}, //11807 #CJK UNIFIED IDEOGRAPH + {0xC6A8, 0x5C41}, //11808 #CJK UNIFIED IDEOGRAPH + {0xC6A9, 0x8B6C}, //11809 #CJK UNIFIED IDEOGRAPH + {0xC6AA, 0x7BC7}, //11810 #CJK UNIFIED IDEOGRAPH + {0xC6AB, 0x504F}, //11811 #CJK UNIFIED IDEOGRAPH + {0xC6AC, 0x7247}, //11812 #CJK UNIFIED IDEOGRAPH + {0xC6AD, 0x9A97}, //11813 #CJK UNIFIED IDEOGRAPH + {0xC6AE, 0x98D8}, //11814 #CJK UNIFIED IDEOGRAPH + {0xC6AF, 0x6F02}, //11815 #CJK UNIFIED IDEOGRAPH + {0xC6B0, 0x74E2}, //11816 #CJK UNIFIED IDEOGRAPH + {0xC6B1, 0x7968}, //11817 #CJK UNIFIED IDEOGRAPH + {0xC6B2, 0x6487}, //11818 #CJK UNIFIED IDEOGRAPH + {0xC6B3, 0x77A5}, //11819 #CJK UNIFIED IDEOGRAPH + {0xC6B4, 0x62FC}, //11820 #CJK UNIFIED IDEOGRAPH + {0xC6B5, 0x9891}, //11821 #CJK UNIFIED IDEOGRAPH + {0xC6B6, 0x8D2B}, //11822 #CJK UNIFIED IDEOGRAPH + {0xC6B7, 0x54C1}, //11823 #CJK UNIFIED IDEOGRAPH + {0xC6B8, 0x8058}, //11824 #CJK UNIFIED IDEOGRAPH + {0xC6B9, 0x4E52}, //11825 #CJK UNIFIED IDEOGRAPH + {0xC6BA, 0x576A}, //11826 #CJK UNIFIED IDEOGRAPH + {0xC6BB, 0x82F9}, //11827 #CJK UNIFIED IDEOGRAPH + {0xC6BC, 0x840D}, //11828 #CJK UNIFIED IDEOGRAPH + {0xC6BD, 0x5E73}, //11829 #CJK UNIFIED IDEOGRAPH + {0xC6BE, 0x51ED}, //11830 #CJK UNIFIED IDEOGRAPH + {0xC6BF, 0x74F6}, //11831 #CJK UNIFIED IDEOGRAPH + {0xC6C0, 0x8BC4}, //11832 #CJK UNIFIED IDEOGRAPH + {0xC6C1, 0x5C4F}, //11833 #CJK UNIFIED IDEOGRAPH + {0xC6C2, 0x5761}, //11834 #CJK UNIFIED IDEOGRAPH + {0xC6C3, 0x6CFC}, //11835 #CJK UNIFIED IDEOGRAPH + {0xC6C4, 0x9887}, //11836 #CJK UNIFIED IDEOGRAPH + {0xC6C5, 0x5A46}, //11837 #CJK UNIFIED IDEOGRAPH + {0xC6C6, 0x7834}, //11838 #CJK UNIFIED IDEOGRAPH + {0xC6C7, 0x9B44}, //11839 #CJK UNIFIED IDEOGRAPH + {0xC6C8, 0x8FEB}, //11840 #CJK UNIFIED IDEOGRAPH + {0xC6C9, 0x7C95}, //11841 #CJK UNIFIED IDEOGRAPH + {0xC6CA, 0x5256}, //11842 #CJK UNIFIED IDEOGRAPH + {0xC6CB, 0x6251}, //11843 #CJK UNIFIED IDEOGRAPH + {0xC6CC, 0x94FA}, //11844 #CJK UNIFIED IDEOGRAPH + {0xC6CD, 0x4EC6}, //11845 #CJK UNIFIED IDEOGRAPH + {0xC6CE, 0x8386}, //11846 #CJK UNIFIED IDEOGRAPH + {0xC6CF, 0x8461}, //11847 #CJK UNIFIED IDEOGRAPH + {0xC6D0, 0x83E9}, //11848 #CJK UNIFIED IDEOGRAPH + {0xC6D1, 0x84B2}, //11849 #CJK UNIFIED IDEOGRAPH + {0xC6D2, 0x57D4}, //11850 #CJK UNIFIED IDEOGRAPH + {0xC6D3, 0x6734}, //11851 #CJK UNIFIED IDEOGRAPH + {0xC6D4, 0x5703}, //11852 #CJK UNIFIED IDEOGRAPH + {0xC6D5, 0x666E}, //11853 #CJK UNIFIED IDEOGRAPH + {0xC6D6, 0x6D66}, //11854 #CJK UNIFIED IDEOGRAPH + {0xC6D7, 0x8C31}, //11855 #CJK UNIFIED IDEOGRAPH + {0xC6D8, 0x66DD}, //11856 #CJK UNIFIED IDEOGRAPH + {0xC6D9, 0x7011}, //11857 #CJK UNIFIED IDEOGRAPH + {0xC6DA, 0x671F}, //11858 #CJK UNIFIED IDEOGRAPH + {0xC6DB, 0x6B3A}, //11859 #CJK UNIFIED IDEOGRAPH + {0xC6DC, 0x6816}, //11860 #CJK UNIFIED IDEOGRAPH + {0xC6DD, 0x621A}, //11861 #CJK UNIFIED IDEOGRAPH + {0xC6DE, 0x59BB}, //11862 #CJK UNIFIED IDEOGRAPH + {0xC6DF, 0x4E03}, //11863 #CJK UNIFIED IDEOGRAPH + {0xC6E0, 0x51C4}, //11864 #CJK UNIFIED IDEOGRAPH + {0xC6E1, 0x6F06}, //11865 #CJK UNIFIED IDEOGRAPH + {0xC6E2, 0x67D2}, //11866 #CJK UNIFIED IDEOGRAPH + {0xC6E3, 0x6C8F}, //11867 #CJK UNIFIED IDEOGRAPH + {0xC6E4, 0x5176}, //11868 #CJK UNIFIED IDEOGRAPH + {0xC6E5, 0x68CB}, //11869 #CJK UNIFIED IDEOGRAPH + {0xC6E6, 0x5947}, //11870 #CJK UNIFIED IDEOGRAPH + {0xC6E7, 0x6B67}, //11871 #CJK UNIFIED IDEOGRAPH + {0xC6E8, 0x7566}, //11872 #CJK UNIFIED IDEOGRAPH + {0xC6E9, 0x5D0E}, //11873 #CJK UNIFIED IDEOGRAPH + {0xC6EA, 0x8110}, //11874 #CJK UNIFIED IDEOGRAPH + {0xC6EB, 0x9F50}, //11875 #CJK UNIFIED IDEOGRAPH + {0xC6EC, 0x65D7}, //11876 #CJK UNIFIED IDEOGRAPH + {0xC6ED, 0x7948}, //11877 #CJK UNIFIED IDEOGRAPH + {0xC6EE, 0x7941}, //11878 #CJK UNIFIED IDEOGRAPH + {0xC6EF, 0x9A91}, //11879 #CJK UNIFIED IDEOGRAPH + {0xC6F0, 0x8D77}, //11880 #CJK UNIFIED IDEOGRAPH + {0xC6F1, 0x5C82}, //11881 #CJK UNIFIED IDEOGRAPH + {0xC6F2, 0x4E5E}, //11882 #CJK UNIFIED IDEOGRAPH + {0xC6F3, 0x4F01}, //11883 #CJK UNIFIED IDEOGRAPH + {0xC6F4, 0x542F}, //11884 #CJK UNIFIED IDEOGRAPH + {0xC6F5, 0x5951}, //11885 #CJK UNIFIED IDEOGRAPH + {0xC6F6, 0x780C}, //11886 #CJK UNIFIED IDEOGRAPH + {0xC6F7, 0x5668}, //11887 #CJK UNIFIED IDEOGRAPH + {0xC6F8, 0x6C14}, //11888 #CJK UNIFIED IDEOGRAPH + {0xC6F9, 0x8FC4}, //11889 #CJK UNIFIED IDEOGRAPH + {0xC6FA, 0x5F03}, //11890 #CJK UNIFIED IDEOGRAPH + {0xC6FB, 0x6C7D}, //11891 #CJK UNIFIED IDEOGRAPH + {0xC6FC, 0x6CE3}, //11892 #CJK UNIFIED IDEOGRAPH + {0xC6FD, 0x8BAB}, //11893 #CJK UNIFIED IDEOGRAPH + {0xC6FE, 0x6390}, //11894 #CJK UNIFIED IDEOGRAPH + {0xC740, 0x833E}, //11895 #CJK UNIFIED IDEOGRAPH + {0xC741, 0x833F}, //11896 #CJK UNIFIED IDEOGRAPH + {0xC742, 0x8341}, //11897 #CJK UNIFIED IDEOGRAPH + {0xC743, 0x8342}, //11898 #CJK UNIFIED IDEOGRAPH + {0xC744, 0x8344}, //11899 #CJK UNIFIED IDEOGRAPH + {0xC745, 0x8345}, //11900 #CJK UNIFIED IDEOGRAPH + {0xC746, 0x8348}, //11901 #CJK UNIFIED IDEOGRAPH + {0xC747, 0x834A}, //11902 #CJK UNIFIED IDEOGRAPH + {0xC748, 0x834B}, //11903 #CJK UNIFIED IDEOGRAPH + {0xC749, 0x834C}, //11904 #CJK UNIFIED IDEOGRAPH + {0xC74A, 0x834D}, //11905 #CJK UNIFIED IDEOGRAPH + {0xC74B, 0x834E}, //11906 #CJK UNIFIED IDEOGRAPH + {0xC74C, 0x8353}, //11907 #CJK UNIFIED IDEOGRAPH + {0xC74D, 0x8355}, //11908 #CJK UNIFIED IDEOGRAPH + {0xC74E, 0x8356}, //11909 #CJK UNIFIED IDEOGRAPH + {0xC74F, 0x8357}, //11910 #CJK UNIFIED IDEOGRAPH + {0xC750, 0x8358}, //11911 #CJK UNIFIED IDEOGRAPH + {0xC751, 0x8359}, //11912 #CJK UNIFIED IDEOGRAPH + {0xC752, 0x835D}, //11913 #CJK UNIFIED IDEOGRAPH + {0xC753, 0x8362}, //11914 #CJK UNIFIED IDEOGRAPH + {0xC754, 0x8370}, //11915 #CJK UNIFIED IDEOGRAPH + {0xC755, 0x8371}, //11916 #CJK UNIFIED IDEOGRAPH + {0xC756, 0x8372}, //11917 #CJK UNIFIED IDEOGRAPH + {0xC757, 0x8373}, //11918 #CJK UNIFIED IDEOGRAPH + {0xC758, 0x8374}, //11919 #CJK UNIFIED IDEOGRAPH + {0xC759, 0x8375}, //11920 #CJK UNIFIED IDEOGRAPH + {0xC75A, 0x8376}, //11921 #CJK UNIFIED IDEOGRAPH + {0xC75B, 0x8379}, //11922 #CJK UNIFIED IDEOGRAPH + {0xC75C, 0x837A}, //11923 #CJK UNIFIED IDEOGRAPH + {0xC75D, 0x837E}, //11924 #CJK UNIFIED IDEOGRAPH + {0xC75E, 0x837F}, //11925 #CJK UNIFIED IDEOGRAPH + {0xC75F, 0x8380}, //11926 #CJK UNIFIED IDEOGRAPH + {0xC760, 0x8381}, //11927 #CJK UNIFIED IDEOGRAPH + {0xC761, 0x8382}, //11928 #CJK UNIFIED IDEOGRAPH + {0xC762, 0x8383}, //11929 #CJK UNIFIED IDEOGRAPH + {0xC763, 0x8384}, //11930 #CJK UNIFIED IDEOGRAPH + {0xC764, 0x8387}, //11931 #CJK UNIFIED IDEOGRAPH + {0xC765, 0x8388}, //11932 #CJK UNIFIED IDEOGRAPH + {0xC766, 0x838A}, //11933 #CJK UNIFIED IDEOGRAPH + {0xC767, 0x838B}, //11934 #CJK UNIFIED IDEOGRAPH + {0xC768, 0x838C}, //11935 #CJK UNIFIED IDEOGRAPH + {0xC769, 0x838D}, //11936 #CJK UNIFIED IDEOGRAPH + {0xC76A, 0x838F}, //11937 #CJK UNIFIED IDEOGRAPH + {0xC76B, 0x8390}, //11938 #CJK UNIFIED IDEOGRAPH + {0xC76C, 0x8391}, //11939 #CJK UNIFIED IDEOGRAPH + {0xC76D, 0x8394}, //11940 #CJK UNIFIED IDEOGRAPH + {0xC76E, 0x8395}, //11941 #CJK UNIFIED IDEOGRAPH + {0xC76F, 0x8396}, //11942 #CJK UNIFIED IDEOGRAPH + {0xC770, 0x8397}, //11943 #CJK UNIFIED IDEOGRAPH + {0xC771, 0x8399}, //11944 #CJK UNIFIED IDEOGRAPH + {0xC772, 0x839A}, //11945 #CJK UNIFIED IDEOGRAPH + {0xC773, 0x839D}, //11946 #CJK UNIFIED IDEOGRAPH + {0xC774, 0x839F}, //11947 #CJK UNIFIED IDEOGRAPH + {0xC775, 0x83A1}, //11948 #CJK UNIFIED IDEOGRAPH + {0xC776, 0x83A2}, //11949 #CJK UNIFIED IDEOGRAPH + {0xC777, 0x83A3}, //11950 #CJK UNIFIED IDEOGRAPH + {0xC778, 0x83A4}, //11951 #CJK UNIFIED IDEOGRAPH + {0xC779, 0x83A5}, //11952 #CJK UNIFIED IDEOGRAPH + {0xC77A, 0x83A6}, //11953 #CJK UNIFIED IDEOGRAPH + {0xC77B, 0x83A7}, //11954 #CJK UNIFIED IDEOGRAPH + {0xC77C, 0x83AC}, //11955 #CJK UNIFIED IDEOGRAPH + {0xC77D, 0x83AD}, //11956 #CJK UNIFIED IDEOGRAPH + {0xC77E, 0x83AE}, //11957 #CJK UNIFIED IDEOGRAPH + {0xC780, 0x83AF}, //11958 #CJK UNIFIED IDEOGRAPH + {0xC781, 0x83B5}, //11959 #CJK UNIFIED IDEOGRAPH + {0xC782, 0x83BB}, //11960 #CJK UNIFIED IDEOGRAPH + {0xC783, 0x83BE}, //11961 #CJK UNIFIED IDEOGRAPH + {0xC784, 0x83BF}, //11962 #CJK UNIFIED IDEOGRAPH + {0xC785, 0x83C2}, //11963 #CJK UNIFIED IDEOGRAPH + {0xC786, 0x83C3}, //11964 #CJK UNIFIED IDEOGRAPH + {0xC787, 0x83C4}, //11965 #CJK UNIFIED IDEOGRAPH + {0xC788, 0x83C6}, //11966 #CJK UNIFIED IDEOGRAPH + {0xC789, 0x83C8}, //11967 #CJK UNIFIED IDEOGRAPH + {0xC78A, 0x83C9}, //11968 #CJK UNIFIED IDEOGRAPH + {0xC78B, 0x83CB}, //11969 #CJK UNIFIED IDEOGRAPH + {0xC78C, 0x83CD}, //11970 #CJK UNIFIED IDEOGRAPH + {0xC78D, 0x83CE}, //11971 #CJK UNIFIED IDEOGRAPH + {0xC78E, 0x83D0}, //11972 #CJK UNIFIED IDEOGRAPH + {0xC78F, 0x83D1}, //11973 #CJK UNIFIED IDEOGRAPH + {0xC790, 0x83D2}, //11974 #CJK UNIFIED IDEOGRAPH + {0xC791, 0x83D3}, //11975 #CJK UNIFIED IDEOGRAPH + {0xC792, 0x83D5}, //11976 #CJK UNIFIED IDEOGRAPH + {0xC793, 0x83D7}, //11977 #CJK UNIFIED IDEOGRAPH + {0xC794, 0x83D9}, //11978 #CJK UNIFIED IDEOGRAPH + {0xC795, 0x83DA}, //11979 #CJK UNIFIED IDEOGRAPH + {0xC796, 0x83DB}, //11980 #CJK UNIFIED IDEOGRAPH + {0xC797, 0x83DE}, //11981 #CJK UNIFIED IDEOGRAPH + {0xC798, 0x83E2}, //11982 #CJK UNIFIED IDEOGRAPH + {0xC799, 0x83E3}, //11983 #CJK UNIFIED IDEOGRAPH + {0xC79A, 0x83E4}, //11984 #CJK UNIFIED IDEOGRAPH + {0xC79B, 0x83E6}, //11985 #CJK UNIFIED IDEOGRAPH + {0xC79C, 0x83E7}, //11986 #CJK UNIFIED IDEOGRAPH + {0xC79D, 0x83E8}, //11987 #CJK UNIFIED IDEOGRAPH + {0xC79E, 0x83EB}, //11988 #CJK UNIFIED IDEOGRAPH + {0xC79F, 0x83EC}, //11989 #CJK UNIFIED IDEOGRAPH + {0xC7A0, 0x83ED}, //11990 #CJK UNIFIED IDEOGRAPH + {0xC7A1, 0x6070}, //11991 #CJK UNIFIED IDEOGRAPH + {0xC7A2, 0x6D3D}, //11992 #CJK UNIFIED IDEOGRAPH + {0xC7A3, 0x7275}, //11993 #CJK UNIFIED IDEOGRAPH + {0xC7A4, 0x6266}, //11994 #CJK UNIFIED IDEOGRAPH + {0xC7A5, 0x948E}, //11995 #CJK UNIFIED IDEOGRAPH + {0xC7A6, 0x94C5}, //11996 #CJK UNIFIED IDEOGRAPH + {0xC7A7, 0x5343}, //11997 #CJK UNIFIED IDEOGRAPH + {0xC7A8, 0x8FC1}, //11998 #CJK UNIFIED IDEOGRAPH + {0xC7A9, 0x7B7E}, //11999 #CJK UNIFIED IDEOGRAPH + {0xC7AA, 0x4EDF}, //12000 #CJK UNIFIED IDEOGRAPH + {0xC7AB, 0x8C26}, //12001 #CJK UNIFIED IDEOGRAPH + {0xC7AC, 0x4E7E}, //12002 #CJK UNIFIED IDEOGRAPH + {0xC7AD, 0x9ED4}, //12003 #CJK UNIFIED IDEOGRAPH + {0xC7AE, 0x94B1}, //12004 #CJK UNIFIED IDEOGRAPH + {0xC7AF, 0x94B3}, //12005 #CJK UNIFIED IDEOGRAPH + {0xC7B0, 0x524D}, //12006 #CJK UNIFIED IDEOGRAPH + {0xC7B1, 0x6F5C}, //12007 #CJK UNIFIED IDEOGRAPH + {0xC7B2, 0x9063}, //12008 #CJK UNIFIED IDEOGRAPH + {0xC7B3, 0x6D45}, //12009 #CJK UNIFIED IDEOGRAPH + {0xC7B4, 0x8C34}, //12010 #CJK UNIFIED IDEOGRAPH + {0xC7B5, 0x5811}, //12011 #CJK UNIFIED IDEOGRAPH + {0xC7B6, 0x5D4C}, //12012 #CJK UNIFIED IDEOGRAPH + {0xC7B7, 0x6B20}, //12013 #CJK UNIFIED IDEOGRAPH + {0xC7B8, 0x6B49}, //12014 #CJK UNIFIED IDEOGRAPH + {0xC7B9, 0x67AA}, //12015 #CJK UNIFIED IDEOGRAPH + {0xC7BA, 0x545B}, //12016 #CJK UNIFIED IDEOGRAPH + {0xC7BB, 0x8154}, //12017 #CJK UNIFIED IDEOGRAPH + {0xC7BC, 0x7F8C}, //12018 #CJK UNIFIED IDEOGRAPH + {0xC7BD, 0x5899}, //12019 #CJK UNIFIED IDEOGRAPH + {0xC7BE, 0x8537}, //12020 #CJK UNIFIED IDEOGRAPH + {0xC7BF, 0x5F3A}, //12021 #CJK UNIFIED IDEOGRAPH + {0xC7C0, 0x62A2}, //12022 #CJK UNIFIED IDEOGRAPH + {0xC7C1, 0x6A47}, //12023 #CJK UNIFIED IDEOGRAPH + {0xC7C2, 0x9539}, //12024 #CJK UNIFIED IDEOGRAPH + {0xC7C3, 0x6572}, //12025 #CJK UNIFIED IDEOGRAPH + {0xC7C4, 0x6084}, //12026 #CJK UNIFIED IDEOGRAPH + {0xC7C5, 0x6865}, //12027 #CJK UNIFIED IDEOGRAPH + {0xC7C6, 0x77A7}, //12028 #CJK UNIFIED IDEOGRAPH + {0xC7C7, 0x4E54}, //12029 #CJK UNIFIED IDEOGRAPH + {0xC7C8, 0x4FA8}, //12030 #CJK UNIFIED IDEOGRAPH + {0xC7C9, 0x5DE7}, //12031 #CJK UNIFIED IDEOGRAPH + {0xC7CA, 0x9798}, //12032 #CJK UNIFIED IDEOGRAPH + {0xC7CB, 0x64AC}, //12033 #CJK UNIFIED IDEOGRAPH + {0xC7CC, 0x7FD8}, //12034 #CJK UNIFIED IDEOGRAPH + {0xC7CD, 0x5CED}, //12035 #CJK UNIFIED IDEOGRAPH + {0xC7CE, 0x4FCF}, //12036 #CJK UNIFIED IDEOGRAPH + {0xC7CF, 0x7A8D}, //12037 #CJK UNIFIED IDEOGRAPH + {0xC7D0, 0x5207}, //12038 #CJK UNIFIED IDEOGRAPH + {0xC7D1, 0x8304}, //12039 #CJK UNIFIED IDEOGRAPH + {0xC7D2, 0x4E14}, //12040 #CJK UNIFIED IDEOGRAPH + {0xC7D3, 0x602F}, //12041 #CJK UNIFIED IDEOGRAPH + {0xC7D4, 0x7A83}, //12042 #CJK UNIFIED IDEOGRAPH + {0xC7D5, 0x94A6}, //12043 #CJK UNIFIED IDEOGRAPH + {0xC7D6, 0x4FB5}, //12044 #CJK UNIFIED IDEOGRAPH + {0xC7D7, 0x4EB2}, //12045 #CJK UNIFIED IDEOGRAPH + {0xC7D8, 0x79E6}, //12046 #CJK UNIFIED IDEOGRAPH + {0xC7D9, 0x7434}, //12047 #CJK UNIFIED IDEOGRAPH + {0xC7DA, 0x52E4}, //12048 #CJK UNIFIED IDEOGRAPH + {0xC7DB, 0x82B9}, //12049 #CJK UNIFIED IDEOGRAPH + {0xC7DC, 0x64D2}, //12050 #CJK UNIFIED IDEOGRAPH + {0xC7DD, 0x79BD}, //12051 #CJK UNIFIED IDEOGRAPH + {0xC7DE, 0x5BDD}, //12052 #CJK UNIFIED IDEOGRAPH + {0xC7DF, 0x6C81}, //12053 #CJK UNIFIED IDEOGRAPH + {0xC7E0, 0x9752}, //12054 #CJK UNIFIED IDEOGRAPH + {0xC7E1, 0x8F7B}, //12055 #CJK UNIFIED IDEOGRAPH + {0xC7E2, 0x6C22}, //12056 #CJK UNIFIED IDEOGRAPH + {0xC7E3, 0x503E}, //12057 #CJK UNIFIED IDEOGRAPH + {0xC7E4, 0x537F}, //12058 #CJK UNIFIED IDEOGRAPH + {0xC7E5, 0x6E05}, //12059 #CJK UNIFIED IDEOGRAPH + {0xC7E6, 0x64CE}, //12060 #CJK UNIFIED IDEOGRAPH + {0xC7E7, 0x6674}, //12061 #CJK UNIFIED IDEOGRAPH + {0xC7E8, 0x6C30}, //12062 #CJK UNIFIED IDEOGRAPH + {0xC7E9, 0x60C5}, //12063 #CJK UNIFIED IDEOGRAPH + {0xC7EA, 0x9877}, //12064 #CJK UNIFIED IDEOGRAPH + {0xC7EB, 0x8BF7}, //12065 #CJK UNIFIED IDEOGRAPH + {0xC7EC, 0x5E86}, //12066 #CJK UNIFIED IDEOGRAPH + {0xC7ED, 0x743C}, //12067 #CJK UNIFIED IDEOGRAPH + {0xC7EE, 0x7A77}, //12068 #CJK UNIFIED IDEOGRAPH + {0xC7EF, 0x79CB}, //12069 #CJK UNIFIED IDEOGRAPH + {0xC7F0, 0x4E18}, //12070 #CJK UNIFIED IDEOGRAPH + {0xC7F1, 0x90B1}, //12071 #CJK UNIFIED IDEOGRAPH + {0xC7F2, 0x7403}, //12072 #CJK UNIFIED IDEOGRAPH + {0xC7F3, 0x6C42}, //12073 #CJK UNIFIED IDEOGRAPH + {0xC7F4, 0x56DA}, //12074 #CJK UNIFIED IDEOGRAPH + {0xC7F5, 0x914B}, //12075 #CJK UNIFIED IDEOGRAPH + {0xC7F6, 0x6CC5}, //12076 #CJK UNIFIED IDEOGRAPH + {0xC7F7, 0x8D8B}, //12077 #CJK UNIFIED IDEOGRAPH + {0xC7F8, 0x533A}, //12078 #CJK UNIFIED IDEOGRAPH + {0xC7F9, 0x86C6}, //12079 #CJK UNIFIED IDEOGRAPH + {0xC7FA, 0x66F2}, //12080 #CJK UNIFIED IDEOGRAPH + {0xC7FB, 0x8EAF}, //12081 #CJK UNIFIED IDEOGRAPH + {0xC7FC, 0x5C48}, //12082 #CJK UNIFIED IDEOGRAPH + {0xC7FD, 0x9A71}, //12083 #CJK UNIFIED IDEOGRAPH + {0xC7FE, 0x6E20}, //12084 #CJK UNIFIED IDEOGRAPH + {0xC840, 0x83EE}, //12085 #CJK UNIFIED IDEOGRAPH + {0xC841, 0x83EF}, //12086 #CJK UNIFIED IDEOGRAPH + {0xC842, 0x83F3}, //12087 #CJK UNIFIED IDEOGRAPH + {0xC843, 0x83F4}, //12088 #CJK UNIFIED IDEOGRAPH + {0xC844, 0x83F5}, //12089 #CJK UNIFIED IDEOGRAPH + {0xC845, 0x83F6}, //12090 #CJK UNIFIED IDEOGRAPH + {0xC846, 0x83F7}, //12091 #CJK UNIFIED IDEOGRAPH + {0xC847, 0x83FA}, //12092 #CJK UNIFIED IDEOGRAPH + {0xC848, 0x83FB}, //12093 #CJK UNIFIED IDEOGRAPH + {0xC849, 0x83FC}, //12094 #CJK UNIFIED IDEOGRAPH + {0xC84A, 0x83FE}, //12095 #CJK UNIFIED IDEOGRAPH + {0xC84B, 0x83FF}, //12096 #CJK UNIFIED IDEOGRAPH + {0xC84C, 0x8400}, //12097 #CJK UNIFIED IDEOGRAPH + {0xC84D, 0x8402}, //12098 #CJK UNIFIED IDEOGRAPH + {0xC84E, 0x8405}, //12099 #CJK UNIFIED IDEOGRAPH + {0xC84F, 0x8407}, //12100 #CJK UNIFIED IDEOGRAPH + {0xC850, 0x8408}, //12101 #CJK UNIFIED IDEOGRAPH + {0xC851, 0x8409}, //12102 #CJK UNIFIED IDEOGRAPH + {0xC852, 0x840A}, //12103 #CJK UNIFIED IDEOGRAPH + {0xC853, 0x8410}, //12104 #CJK UNIFIED IDEOGRAPH + {0xC854, 0x8412}, //12105 #CJK UNIFIED IDEOGRAPH + {0xC855, 0x8413}, //12106 #CJK UNIFIED IDEOGRAPH + {0xC856, 0x8414}, //12107 #CJK UNIFIED IDEOGRAPH + {0xC857, 0x8415}, //12108 #CJK UNIFIED IDEOGRAPH + {0xC858, 0x8416}, //12109 #CJK UNIFIED IDEOGRAPH + {0xC859, 0x8417}, //12110 #CJK UNIFIED IDEOGRAPH + {0xC85A, 0x8419}, //12111 #CJK UNIFIED IDEOGRAPH + {0xC85B, 0x841A}, //12112 #CJK UNIFIED IDEOGRAPH + {0xC85C, 0x841B}, //12113 #CJK UNIFIED IDEOGRAPH + {0xC85D, 0x841E}, //12114 #CJK UNIFIED IDEOGRAPH + {0xC85E, 0x841F}, //12115 #CJK UNIFIED IDEOGRAPH + {0xC85F, 0x8420}, //12116 #CJK UNIFIED IDEOGRAPH + {0xC860, 0x8421}, //12117 #CJK UNIFIED IDEOGRAPH + {0xC861, 0x8422}, //12118 #CJK UNIFIED IDEOGRAPH + {0xC862, 0x8423}, //12119 #CJK UNIFIED IDEOGRAPH + {0xC863, 0x8429}, //12120 #CJK UNIFIED IDEOGRAPH + {0xC864, 0x842A}, //12121 #CJK UNIFIED IDEOGRAPH + {0xC865, 0x842B}, //12122 #CJK UNIFIED IDEOGRAPH + {0xC866, 0x842C}, //12123 #CJK UNIFIED IDEOGRAPH + {0xC867, 0x842D}, //12124 #CJK UNIFIED IDEOGRAPH + {0xC868, 0x842E}, //12125 #CJK UNIFIED IDEOGRAPH + {0xC869, 0x842F}, //12126 #CJK UNIFIED IDEOGRAPH + {0xC86A, 0x8430}, //12127 #CJK UNIFIED IDEOGRAPH + {0xC86B, 0x8432}, //12128 #CJK UNIFIED IDEOGRAPH + {0xC86C, 0x8433}, //12129 #CJK UNIFIED IDEOGRAPH + {0xC86D, 0x8434}, //12130 #CJK UNIFIED IDEOGRAPH + {0xC86E, 0x8435}, //12131 #CJK UNIFIED IDEOGRAPH + {0xC86F, 0x8436}, //12132 #CJK UNIFIED IDEOGRAPH + {0xC870, 0x8437}, //12133 #CJK UNIFIED IDEOGRAPH + {0xC871, 0x8439}, //12134 #CJK UNIFIED IDEOGRAPH + {0xC872, 0x843A}, //12135 #CJK UNIFIED IDEOGRAPH + {0xC873, 0x843B}, //12136 #CJK UNIFIED IDEOGRAPH + {0xC874, 0x843E}, //12137 #CJK UNIFIED IDEOGRAPH + {0xC875, 0x843F}, //12138 #CJK UNIFIED IDEOGRAPH + {0xC876, 0x8440}, //12139 #CJK UNIFIED IDEOGRAPH + {0xC877, 0x8441}, //12140 #CJK UNIFIED IDEOGRAPH + {0xC878, 0x8442}, //12141 #CJK UNIFIED IDEOGRAPH + {0xC879, 0x8443}, //12142 #CJK UNIFIED IDEOGRAPH + {0xC87A, 0x8444}, //12143 #CJK UNIFIED IDEOGRAPH + {0xC87B, 0x8445}, //12144 #CJK UNIFIED IDEOGRAPH + {0xC87C, 0x8447}, //12145 #CJK UNIFIED IDEOGRAPH + {0xC87D, 0x8448}, //12146 #CJK UNIFIED IDEOGRAPH + {0xC87E, 0x8449}, //12147 #CJK UNIFIED IDEOGRAPH + {0xC880, 0x844A}, //12148 #CJK UNIFIED IDEOGRAPH + {0xC881, 0x844B}, //12149 #CJK UNIFIED IDEOGRAPH + {0xC882, 0x844C}, //12150 #CJK UNIFIED IDEOGRAPH + {0xC883, 0x844D}, //12151 #CJK UNIFIED IDEOGRAPH + {0xC884, 0x844E}, //12152 #CJK UNIFIED IDEOGRAPH + {0xC885, 0x844F}, //12153 #CJK UNIFIED IDEOGRAPH + {0xC886, 0x8450}, //12154 #CJK UNIFIED IDEOGRAPH + {0xC887, 0x8452}, //12155 #CJK UNIFIED IDEOGRAPH + {0xC888, 0x8453}, //12156 #CJK UNIFIED IDEOGRAPH + {0xC889, 0x8454}, //12157 #CJK UNIFIED IDEOGRAPH + {0xC88A, 0x8455}, //12158 #CJK UNIFIED IDEOGRAPH + {0xC88B, 0x8456}, //12159 #CJK UNIFIED IDEOGRAPH + {0xC88C, 0x8458}, //12160 #CJK UNIFIED IDEOGRAPH + {0xC88D, 0x845D}, //12161 #CJK UNIFIED IDEOGRAPH + {0xC88E, 0x845E}, //12162 #CJK UNIFIED IDEOGRAPH + {0xC88F, 0x845F}, //12163 #CJK UNIFIED IDEOGRAPH + {0xC890, 0x8460}, //12164 #CJK UNIFIED IDEOGRAPH + {0xC891, 0x8462}, //12165 #CJK UNIFIED IDEOGRAPH + {0xC892, 0x8464}, //12166 #CJK UNIFIED IDEOGRAPH + {0xC893, 0x8465}, //12167 #CJK UNIFIED IDEOGRAPH + {0xC894, 0x8466}, //12168 #CJK UNIFIED IDEOGRAPH + {0xC895, 0x8467}, //12169 #CJK UNIFIED IDEOGRAPH + {0xC896, 0x8468}, //12170 #CJK UNIFIED IDEOGRAPH + {0xC897, 0x846A}, //12171 #CJK UNIFIED IDEOGRAPH + {0xC898, 0x846E}, //12172 #CJK UNIFIED IDEOGRAPH + {0xC899, 0x846F}, //12173 #CJK UNIFIED IDEOGRAPH + {0xC89A, 0x8470}, //12174 #CJK UNIFIED IDEOGRAPH + {0xC89B, 0x8472}, //12175 #CJK UNIFIED IDEOGRAPH + {0xC89C, 0x8474}, //12176 #CJK UNIFIED IDEOGRAPH + {0xC89D, 0x8477}, //12177 #CJK UNIFIED IDEOGRAPH + {0xC89E, 0x8479}, //12178 #CJK UNIFIED IDEOGRAPH + {0xC89F, 0x847B}, //12179 #CJK UNIFIED IDEOGRAPH + {0xC8A0, 0x847C}, //12180 #CJK UNIFIED IDEOGRAPH + {0xC8A1, 0x53D6}, //12181 #CJK UNIFIED IDEOGRAPH + {0xC8A2, 0x5A36}, //12182 #CJK UNIFIED IDEOGRAPH + {0xC8A3, 0x9F8B}, //12183 #CJK UNIFIED IDEOGRAPH + {0xC8A4, 0x8DA3}, //12184 #CJK UNIFIED IDEOGRAPH + {0xC8A5, 0x53BB}, //12185 #CJK UNIFIED IDEOGRAPH + {0xC8A6, 0x5708}, //12186 #CJK UNIFIED IDEOGRAPH + {0xC8A7, 0x98A7}, //12187 #CJK UNIFIED IDEOGRAPH + {0xC8A8, 0x6743}, //12188 #CJK UNIFIED IDEOGRAPH + {0xC8A9, 0x919B}, //12189 #CJK UNIFIED IDEOGRAPH + {0xC8AA, 0x6CC9}, //12190 #CJK UNIFIED IDEOGRAPH + {0xC8AB, 0x5168}, //12191 #CJK UNIFIED IDEOGRAPH + {0xC8AC, 0x75CA}, //12192 #CJK UNIFIED IDEOGRAPH + {0xC8AD, 0x62F3}, //12193 #CJK UNIFIED IDEOGRAPH + {0xC8AE, 0x72AC}, //12194 #CJK UNIFIED IDEOGRAPH + {0xC8AF, 0x5238}, //12195 #CJK UNIFIED IDEOGRAPH + {0xC8B0, 0x529D}, //12196 #CJK UNIFIED IDEOGRAPH + {0xC8B1, 0x7F3A}, //12197 #CJK UNIFIED IDEOGRAPH + {0xC8B2, 0x7094}, //12198 #CJK UNIFIED IDEOGRAPH + {0xC8B3, 0x7638}, //12199 #CJK UNIFIED IDEOGRAPH + {0xC8B4, 0x5374}, //12200 #CJK UNIFIED IDEOGRAPH + {0xC8B5, 0x9E4A}, //12201 #CJK UNIFIED IDEOGRAPH + {0xC8B6, 0x69B7}, //12202 #CJK UNIFIED IDEOGRAPH + {0xC8B7, 0x786E}, //12203 #CJK UNIFIED IDEOGRAPH + {0xC8B8, 0x96C0}, //12204 #CJK UNIFIED IDEOGRAPH + {0xC8B9, 0x88D9}, //12205 #CJK UNIFIED IDEOGRAPH + {0xC8BA, 0x7FA4}, //12206 #CJK UNIFIED IDEOGRAPH + {0xC8BB, 0x7136}, //12207 #CJK UNIFIED IDEOGRAPH + {0xC8BC, 0x71C3}, //12208 #CJK UNIFIED IDEOGRAPH + {0xC8BD, 0x5189}, //12209 #CJK UNIFIED IDEOGRAPH + {0xC8BE, 0x67D3}, //12210 #CJK UNIFIED IDEOGRAPH + {0xC8BF, 0x74E4}, //12211 #CJK UNIFIED IDEOGRAPH + {0xC8C0, 0x58E4}, //12212 #CJK UNIFIED IDEOGRAPH + {0xC8C1, 0x6518}, //12213 #CJK UNIFIED IDEOGRAPH + {0xC8C2, 0x56B7}, //12214 #CJK UNIFIED IDEOGRAPH + {0xC8C3, 0x8BA9}, //12215 #CJK UNIFIED IDEOGRAPH + {0xC8C4, 0x9976}, //12216 #CJK UNIFIED IDEOGRAPH + {0xC8C5, 0x6270}, //12217 #CJK UNIFIED IDEOGRAPH + {0xC8C6, 0x7ED5}, //12218 #CJK UNIFIED IDEOGRAPH + {0xC8C7, 0x60F9}, //12219 #CJK UNIFIED IDEOGRAPH + {0xC8C8, 0x70ED}, //12220 #CJK UNIFIED IDEOGRAPH + {0xC8C9, 0x58EC}, //12221 #CJK UNIFIED IDEOGRAPH + {0xC8CA, 0x4EC1}, //12222 #CJK UNIFIED IDEOGRAPH + {0xC8CB, 0x4EBA}, //12223 #CJK UNIFIED IDEOGRAPH + {0xC8CC, 0x5FCD}, //12224 #CJK UNIFIED IDEOGRAPH + {0xC8CD, 0x97E7}, //12225 #CJK UNIFIED IDEOGRAPH + {0xC8CE, 0x4EFB}, //12226 #CJK UNIFIED IDEOGRAPH + {0xC8CF, 0x8BA4}, //12227 #CJK UNIFIED IDEOGRAPH + {0xC8D0, 0x5203}, //12228 #CJK UNIFIED IDEOGRAPH + {0xC8D1, 0x598A}, //12229 #CJK UNIFIED IDEOGRAPH + {0xC8D2, 0x7EAB}, //12230 #CJK UNIFIED IDEOGRAPH + {0xC8D3, 0x6254}, //12231 #CJK UNIFIED IDEOGRAPH + {0xC8D4, 0x4ECD}, //12232 #CJK UNIFIED IDEOGRAPH + {0xC8D5, 0x65E5}, //12233 #CJK UNIFIED IDEOGRAPH + {0xC8D6, 0x620E}, //12234 #CJK UNIFIED IDEOGRAPH + {0xC8D7, 0x8338}, //12235 #CJK UNIFIED IDEOGRAPH + {0xC8D8, 0x84C9}, //12236 #CJK UNIFIED IDEOGRAPH + {0xC8D9, 0x8363}, //12237 #CJK UNIFIED IDEOGRAPH + {0xC8DA, 0x878D}, //12238 #CJK UNIFIED IDEOGRAPH + {0xC8DB, 0x7194}, //12239 #CJK UNIFIED IDEOGRAPH + {0xC8DC, 0x6EB6}, //12240 #CJK UNIFIED IDEOGRAPH + {0xC8DD, 0x5BB9}, //12241 #CJK UNIFIED IDEOGRAPH + {0xC8DE, 0x7ED2}, //12242 #CJK UNIFIED IDEOGRAPH + {0xC8DF, 0x5197}, //12243 #CJK UNIFIED IDEOGRAPH + {0xC8E0, 0x63C9}, //12244 #CJK UNIFIED IDEOGRAPH + {0xC8E1, 0x67D4}, //12245 #CJK UNIFIED IDEOGRAPH + {0xC8E2, 0x8089}, //12246 #CJK UNIFIED IDEOGRAPH + {0xC8E3, 0x8339}, //12247 #CJK UNIFIED IDEOGRAPH + {0xC8E4, 0x8815}, //12248 #CJK UNIFIED IDEOGRAPH + {0xC8E5, 0x5112}, //12249 #CJK UNIFIED IDEOGRAPH + {0xC8E6, 0x5B7A}, //12250 #CJK UNIFIED IDEOGRAPH + {0xC8E7, 0x5982}, //12251 #CJK UNIFIED IDEOGRAPH + {0xC8E8, 0x8FB1}, //12252 #CJK UNIFIED IDEOGRAPH + {0xC8E9, 0x4E73}, //12253 #CJK UNIFIED IDEOGRAPH + {0xC8EA, 0x6C5D}, //12254 #CJK UNIFIED IDEOGRAPH + {0xC8EB, 0x5165}, //12255 #CJK UNIFIED IDEOGRAPH + {0xC8EC, 0x8925}, //12256 #CJK UNIFIED IDEOGRAPH + {0xC8ED, 0x8F6F}, //12257 #CJK UNIFIED IDEOGRAPH + {0xC8EE, 0x962E}, //12258 #CJK UNIFIED IDEOGRAPH + {0xC8EF, 0x854A}, //12259 #CJK UNIFIED IDEOGRAPH + {0xC8F0, 0x745E}, //12260 #CJK UNIFIED IDEOGRAPH + {0xC8F1, 0x9510}, //12261 #CJK UNIFIED IDEOGRAPH + {0xC8F2, 0x95F0}, //12262 #CJK UNIFIED IDEOGRAPH + {0xC8F3, 0x6DA6}, //12263 #CJK UNIFIED IDEOGRAPH + {0xC8F4, 0x82E5}, //12264 #CJK UNIFIED IDEOGRAPH + {0xC8F5, 0x5F31}, //12265 #CJK UNIFIED IDEOGRAPH + {0xC8F6, 0x6492}, //12266 #CJK UNIFIED IDEOGRAPH + {0xC8F7, 0x6D12}, //12267 #CJK UNIFIED IDEOGRAPH + {0xC8F8, 0x8428}, //12268 #CJK UNIFIED IDEOGRAPH + {0xC8F9, 0x816E}, //12269 #CJK UNIFIED IDEOGRAPH + {0xC8FA, 0x9CC3}, //12270 #CJK UNIFIED IDEOGRAPH + {0xC8FB, 0x585E}, //12271 #CJK UNIFIED IDEOGRAPH + {0xC8FC, 0x8D5B}, //12272 #CJK UNIFIED IDEOGRAPH + {0xC8FD, 0x4E09}, //12273 #CJK UNIFIED IDEOGRAPH + {0xC8FE, 0x53C1}, //12274 #CJK UNIFIED IDEOGRAPH + {0xC940, 0x847D}, //12275 #CJK UNIFIED IDEOGRAPH + {0xC941, 0x847E}, //12276 #CJK UNIFIED IDEOGRAPH + {0xC942, 0x847F}, //12277 #CJK UNIFIED IDEOGRAPH + {0xC943, 0x8480}, //12278 #CJK UNIFIED IDEOGRAPH + {0xC944, 0x8481}, //12279 #CJK UNIFIED IDEOGRAPH + {0xC945, 0x8483}, //12280 #CJK UNIFIED IDEOGRAPH + {0xC946, 0x8484}, //12281 #CJK UNIFIED IDEOGRAPH + {0xC947, 0x8485}, //12282 #CJK UNIFIED IDEOGRAPH + {0xC948, 0x8486}, //12283 #CJK UNIFIED IDEOGRAPH + {0xC949, 0x848A}, //12284 #CJK UNIFIED IDEOGRAPH + {0xC94A, 0x848D}, //12285 #CJK UNIFIED IDEOGRAPH + {0xC94B, 0x848F}, //12286 #CJK UNIFIED IDEOGRAPH + {0xC94C, 0x8490}, //12287 #CJK UNIFIED IDEOGRAPH + {0xC94D, 0x8491}, //12288 #CJK UNIFIED IDEOGRAPH + {0xC94E, 0x8492}, //12289 #CJK UNIFIED IDEOGRAPH + {0xC94F, 0x8493}, //12290 #CJK UNIFIED IDEOGRAPH + {0xC950, 0x8494}, //12291 #CJK UNIFIED IDEOGRAPH + {0xC951, 0x8495}, //12292 #CJK UNIFIED IDEOGRAPH + {0xC952, 0x8496}, //12293 #CJK UNIFIED IDEOGRAPH + {0xC953, 0x8498}, //12294 #CJK UNIFIED IDEOGRAPH + {0xC954, 0x849A}, //12295 #CJK UNIFIED IDEOGRAPH + {0xC955, 0x849B}, //12296 #CJK UNIFIED IDEOGRAPH + {0xC956, 0x849D}, //12297 #CJK UNIFIED IDEOGRAPH + {0xC957, 0x849E}, //12298 #CJK UNIFIED IDEOGRAPH + {0xC958, 0x849F}, //12299 #CJK UNIFIED IDEOGRAPH + {0xC959, 0x84A0}, //12300 #CJK UNIFIED IDEOGRAPH + {0xC95A, 0x84A2}, //12301 #CJK UNIFIED IDEOGRAPH + {0xC95B, 0x84A3}, //12302 #CJK UNIFIED IDEOGRAPH + {0xC95C, 0x84A4}, //12303 #CJK UNIFIED IDEOGRAPH + {0xC95D, 0x84A5}, //12304 #CJK UNIFIED IDEOGRAPH + {0xC95E, 0x84A6}, //12305 #CJK UNIFIED IDEOGRAPH + {0xC95F, 0x84A7}, //12306 #CJK UNIFIED IDEOGRAPH + {0xC960, 0x84A8}, //12307 #CJK UNIFIED IDEOGRAPH + {0xC961, 0x84A9}, //12308 #CJK UNIFIED IDEOGRAPH + {0xC962, 0x84AA}, //12309 #CJK UNIFIED IDEOGRAPH + {0xC963, 0x84AB}, //12310 #CJK UNIFIED IDEOGRAPH + {0xC964, 0x84AC}, //12311 #CJK UNIFIED IDEOGRAPH + {0xC965, 0x84AD}, //12312 #CJK UNIFIED IDEOGRAPH + {0xC966, 0x84AE}, //12313 #CJK UNIFIED IDEOGRAPH + {0xC967, 0x84B0}, //12314 #CJK UNIFIED IDEOGRAPH + {0xC968, 0x84B1}, //12315 #CJK UNIFIED IDEOGRAPH + {0xC969, 0x84B3}, //12316 #CJK UNIFIED IDEOGRAPH + {0xC96A, 0x84B5}, //12317 #CJK UNIFIED IDEOGRAPH + {0xC96B, 0x84B6}, //12318 #CJK UNIFIED IDEOGRAPH + {0xC96C, 0x84B7}, //12319 #CJK UNIFIED IDEOGRAPH + {0xC96D, 0x84BB}, //12320 #CJK UNIFIED IDEOGRAPH + {0xC96E, 0x84BC}, //12321 #CJK UNIFIED IDEOGRAPH + {0xC96F, 0x84BE}, //12322 #CJK UNIFIED IDEOGRAPH + {0xC970, 0x84C0}, //12323 #CJK UNIFIED IDEOGRAPH + {0xC971, 0x84C2}, //12324 #CJK UNIFIED IDEOGRAPH + {0xC972, 0x84C3}, //12325 #CJK UNIFIED IDEOGRAPH + {0xC973, 0x84C5}, //12326 #CJK UNIFIED IDEOGRAPH + {0xC974, 0x84C6}, //12327 #CJK UNIFIED IDEOGRAPH + {0xC975, 0x84C7}, //12328 #CJK UNIFIED IDEOGRAPH + {0xC976, 0x84C8}, //12329 #CJK UNIFIED IDEOGRAPH + {0xC977, 0x84CB}, //12330 #CJK UNIFIED IDEOGRAPH + {0xC978, 0x84CC}, //12331 #CJK UNIFIED IDEOGRAPH + {0xC979, 0x84CE}, //12332 #CJK UNIFIED IDEOGRAPH + {0xC97A, 0x84CF}, //12333 #CJK UNIFIED IDEOGRAPH + {0xC97B, 0x84D2}, //12334 #CJK UNIFIED IDEOGRAPH + {0xC97C, 0x84D4}, //12335 #CJK UNIFIED IDEOGRAPH + {0xC97D, 0x84D5}, //12336 #CJK UNIFIED IDEOGRAPH + {0xC97E, 0x84D7}, //12337 #CJK UNIFIED IDEOGRAPH + {0xC980, 0x84D8}, //12338 #CJK UNIFIED IDEOGRAPH + {0xC981, 0x84D9}, //12339 #CJK UNIFIED IDEOGRAPH + {0xC982, 0x84DA}, //12340 #CJK UNIFIED IDEOGRAPH + {0xC983, 0x84DB}, //12341 #CJK UNIFIED IDEOGRAPH + {0xC984, 0x84DC}, //12342 #CJK UNIFIED IDEOGRAPH + {0xC985, 0x84DE}, //12343 #CJK UNIFIED IDEOGRAPH + {0xC986, 0x84E1}, //12344 #CJK UNIFIED IDEOGRAPH + {0xC987, 0x84E2}, //12345 #CJK UNIFIED IDEOGRAPH + {0xC988, 0x84E4}, //12346 #CJK UNIFIED IDEOGRAPH + {0xC989, 0x84E7}, //12347 #CJK UNIFIED IDEOGRAPH + {0xC98A, 0x84E8}, //12348 #CJK UNIFIED IDEOGRAPH + {0xC98B, 0x84E9}, //12349 #CJK UNIFIED IDEOGRAPH + {0xC98C, 0x84EA}, //12350 #CJK UNIFIED IDEOGRAPH + {0xC98D, 0x84EB}, //12351 #CJK UNIFIED IDEOGRAPH + {0xC98E, 0x84ED}, //12352 #CJK UNIFIED IDEOGRAPH + {0xC98F, 0x84EE}, //12353 #CJK UNIFIED IDEOGRAPH + {0xC990, 0x84EF}, //12354 #CJK UNIFIED IDEOGRAPH + {0xC991, 0x84F1}, //12355 #CJK UNIFIED IDEOGRAPH + {0xC992, 0x84F2}, //12356 #CJK UNIFIED IDEOGRAPH + {0xC993, 0x84F3}, //12357 #CJK UNIFIED IDEOGRAPH + {0xC994, 0x84F4}, //12358 #CJK UNIFIED IDEOGRAPH + {0xC995, 0x84F5}, //12359 #CJK UNIFIED IDEOGRAPH + {0xC996, 0x84F6}, //12360 #CJK UNIFIED IDEOGRAPH + {0xC997, 0x84F7}, //12361 #CJK UNIFIED IDEOGRAPH + {0xC998, 0x84F8}, //12362 #CJK UNIFIED IDEOGRAPH + {0xC999, 0x84F9}, //12363 #CJK UNIFIED IDEOGRAPH + {0xC99A, 0x84FA}, //12364 #CJK UNIFIED IDEOGRAPH + {0xC99B, 0x84FB}, //12365 #CJK UNIFIED IDEOGRAPH + {0xC99C, 0x84FD}, //12366 #CJK UNIFIED IDEOGRAPH + {0xC99D, 0x84FE}, //12367 #CJK UNIFIED IDEOGRAPH + {0xC99E, 0x8500}, //12368 #CJK UNIFIED IDEOGRAPH + {0xC99F, 0x8501}, //12369 #CJK UNIFIED IDEOGRAPH + {0xC9A0, 0x8502}, //12370 #CJK UNIFIED IDEOGRAPH + {0xC9A1, 0x4F1E}, //12371 #CJK UNIFIED IDEOGRAPH + {0xC9A2, 0x6563}, //12372 #CJK UNIFIED IDEOGRAPH + {0xC9A3, 0x6851}, //12373 #CJK UNIFIED IDEOGRAPH + {0xC9A4, 0x55D3}, //12374 #CJK UNIFIED IDEOGRAPH + {0xC9A5, 0x4E27}, //12375 #CJK UNIFIED IDEOGRAPH + {0xC9A6, 0x6414}, //12376 #CJK UNIFIED IDEOGRAPH + {0xC9A7, 0x9A9A}, //12377 #CJK UNIFIED IDEOGRAPH + {0xC9A8, 0x626B}, //12378 #CJK UNIFIED IDEOGRAPH + {0xC9A9, 0x5AC2}, //12379 #CJK UNIFIED IDEOGRAPH + {0xC9AA, 0x745F}, //12380 #CJK UNIFIED IDEOGRAPH + {0xC9AB, 0x8272}, //12381 #CJK UNIFIED IDEOGRAPH + {0xC9AC, 0x6DA9}, //12382 #CJK UNIFIED IDEOGRAPH + {0xC9AD, 0x68EE}, //12383 #CJK UNIFIED IDEOGRAPH + {0xC9AE, 0x50E7}, //12384 #CJK UNIFIED IDEOGRAPH + {0xC9AF, 0x838E}, //12385 #CJK UNIFIED IDEOGRAPH + {0xC9B0, 0x7802}, //12386 #CJK UNIFIED IDEOGRAPH + {0xC9B1, 0x6740}, //12387 #CJK UNIFIED IDEOGRAPH + {0xC9B2, 0x5239}, //12388 #CJK UNIFIED IDEOGRAPH + {0xC9B3, 0x6C99}, //12389 #CJK UNIFIED IDEOGRAPH + {0xC9B4, 0x7EB1}, //12390 #CJK UNIFIED IDEOGRAPH + {0xC9B5, 0x50BB}, //12391 #CJK UNIFIED IDEOGRAPH + {0xC9B6, 0x5565}, //12392 #CJK UNIFIED IDEOGRAPH + {0xC9B7, 0x715E}, //12393 #CJK UNIFIED IDEOGRAPH + {0xC9B8, 0x7B5B}, //12394 #CJK UNIFIED IDEOGRAPH + {0xC9B9, 0x6652}, //12395 #CJK UNIFIED IDEOGRAPH + {0xC9BA, 0x73CA}, //12396 #CJK UNIFIED IDEOGRAPH + {0xC9BB, 0x82EB}, //12397 #CJK UNIFIED IDEOGRAPH + {0xC9BC, 0x6749}, //12398 #CJK UNIFIED IDEOGRAPH + {0xC9BD, 0x5C71}, //12399 #CJK UNIFIED IDEOGRAPH + {0xC9BE, 0x5220}, //12400 #CJK UNIFIED IDEOGRAPH + {0xC9BF, 0x717D}, //12401 #CJK UNIFIED IDEOGRAPH + {0xC9C0, 0x886B}, //12402 #CJK UNIFIED IDEOGRAPH + {0xC9C1, 0x95EA}, //12403 #CJK UNIFIED IDEOGRAPH + {0xC9C2, 0x9655}, //12404 #CJK UNIFIED IDEOGRAPH + {0xC9C3, 0x64C5}, //12405 #CJK UNIFIED IDEOGRAPH + {0xC9C4, 0x8D61}, //12406 #CJK UNIFIED IDEOGRAPH + {0xC9C5, 0x81B3}, //12407 #CJK UNIFIED IDEOGRAPH + {0xC9C6, 0x5584}, //12408 #CJK UNIFIED IDEOGRAPH + {0xC9C7, 0x6C55}, //12409 #CJK UNIFIED IDEOGRAPH + {0xC9C8, 0x6247}, //12410 #CJK UNIFIED IDEOGRAPH + {0xC9C9, 0x7F2E}, //12411 #CJK UNIFIED IDEOGRAPH + {0xC9CA, 0x5892}, //12412 #CJK UNIFIED IDEOGRAPH + {0xC9CB, 0x4F24}, //12413 #CJK UNIFIED IDEOGRAPH + {0xC9CC, 0x5546}, //12414 #CJK UNIFIED IDEOGRAPH + {0xC9CD, 0x8D4F}, //12415 #CJK UNIFIED IDEOGRAPH + {0xC9CE, 0x664C}, //12416 #CJK UNIFIED IDEOGRAPH + {0xC9CF, 0x4E0A}, //12417 #CJK UNIFIED IDEOGRAPH + {0xC9D0, 0x5C1A}, //12418 #CJK UNIFIED IDEOGRAPH + {0xC9D1, 0x88F3}, //12419 #CJK UNIFIED IDEOGRAPH + {0xC9D2, 0x68A2}, //12420 #CJK UNIFIED IDEOGRAPH + {0xC9D3, 0x634E}, //12421 #CJK UNIFIED IDEOGRAPH + {0xC9D4, 0x7A0D}, //12422 #CJK UNIFIED IDEOGRAPH + {0xC9D5, 0x70E7}, //12423 #CJK UNIFIED IDEOGRAPH + {0xC9D6, 0x828D}, //12424 #CJK UNIFIED IDEOGRAPH + {0xC9D7, 0x52FA}, //12425 #CJK UNIFIED IDEOGRAPH + {0xC9D8, 0x97F6}, //12426 #CJK UNIFIED IDEOGRAPH + {0xC9D9, 0x5C11}, //12427 #CJK UNIFIED IDEOGRAPH + {0xC9DA, 0x54E8}, //12428 #CJK UNIFIED IDEOGRAPH + {0xC9DB, 0x90B5}, //12429 #CJK UNIFIED IDEOGRAPH + {0xC9DC, 0x7ECD}, //12430 #CJK UNIFIED IDEOGRAPH + {0xC9DD, 0x5962}, //12431 #CJK UNIFIED IDEOGRAPH + {0xC9DE, 0x8D4A}, //12432 #CJK UNIFIED IDEOGRAPH + {0xC9DF, 0x86C7}, //12433 #CJK UNIFIED IDEOGRAPH + {0xC9E0, 0x820C}, //12434 #CJK UNIFIED IDEOGRAPH + {0xC9E1, 0x820D}, //12435 #CJK UNIFIED IDEOGRAPH + {0xC9E2, 0x8D66}, //12436 #CJK UNIFIED IDEOGRAPH + {0xC9E3, 0x6444}, //12437 #CJK UNIFIED IDEOGRAPH + {0xC9E4, 0x5C04}, //12438 #CJK UNIFIED IDEOGRAPH + {0xC9E5, 0x6151}, //12439 #CJK UNIFIED IDEOGRAPH + {0xC9E6, 0x6D89}, //12440 #CJK UNIFIED IDEOGRAPH + {0xC9E7, 0x793E}, //12441 #CJK UNIFIED IDEOGRAPH + {0xC9E8, 0x8BBE}, //12442 #CJK UNIFIED IDEOGRAPH + {0xC9E9, 0x7837}, //12443 #CJK UNIFIED IDEOGRAPH + {0xC9EA, 0x7533}, //12444 #CJK UNIFIED IDEOGRAPH + {0xC9EB, 0x547B}, //12445 #CJK UNIFIED IDEOGRAPH + {0xC9EC, 0x4F38}, //12446 #CJK UNIFIED IDEOGRAPH + {0xC9ED, 0x8EAB}, //12447 #CJK UNIFIED IDEOGRAPH + {0xC9EE, 0x6DF1}, //12448 #CJK UNIFIED IDEOGRAPH + {0xC9EF, 0x5A20}, //12449 #CJK UNIFIED IDEOGRAPH + {0xC9F0, 0x7EC5}, //12450 #CJK UNIFIED IDEOGRAPH + {0xC9F1, 0x795E}, //12451 #CJK UNIFIED IDEOGRAPH + {0xC9F2, 0x6C88}, //12452 #CJK UNIFIED IDEOGRAPH + {0xC9F3, 0x5BA1}, //12453 #CJK UNIFIED IDEOGRAPH + {0xC9F4, 0x5A76}, //12454 #CJK UNIFIED IDEOGRAPH + {0xC9F5, 0x751A}, //12455 #CJK UNIFIED IDEOGRAPH + {0xC9F6, 0x80BE}, //12456 #CJK UNIFIED IDEOGRAPH + {0xC9F7, 0x614E}, //12457 #CJK UNIFIED IDEOGRAPH + {0xC9F8, 0x6E17}, //12458 #CJK UNIFIED IDEOGRAPH + {0xC9F9, 0x58F0}, //12459 #CJK UNIFIED IDEOGRAPH + {0xC9FA, 0x751F}, //12460 #CJK UNIFIED IDEOGRAPH + {0xC9FB, 0x7525}, //12461 #CJK UNIFIED IDEOGRAPH + {0xC9FC, 0x7272}, //12462 #CJK UNIFIED IDEOGRAPH + {0xC9FD, 0x5347}, //12463 #CJK UNIFIED IDEOGRAPH + {0xC9FE, 0x7EF3}, //12464 #CJK UNIFIED IDEOGRAPH + {0xCA40, 0x8503}, //12465 #CJK UNIFIED IDEOGRAPH + {0xCA41, 0x8504}, //12466 #CJK UNIFIED IDEOGRAPH + {0xCA42, 0x8505}, //12467 #CJK UNIFIED IDEOGRAPH + {0xCA43, 0x8506}, //12468 #CJK UNIFIED IDEOGRAPH + {0xCA44, 0x8507}, //12469 #CJK UNIFIED IDEOGRAPH + {0xCA45, 0x8508}, //12470 #CJK UNIFIED IDEOGRAPH + {0xCA46, 0x8509}, //12471 #CJK UNIFIED IDEOGRAPH + {0xCA47, 0x850A}, //12472 #CJK UNIFIED IDEOGRAPH + {0xCA48, 0x850B}, //12473 #CJK UNIFIED IDEOGRAPH + {0xCA49, 0x850D}, //12474 #CJK UNIFIED IDEOGRAPH + {0xCA4A, 0x850E}, //12475 #CJK UNIFIED IDEOGRAPH + {0xCA4B, 0x850F}, //12476 #CJK UNIFIED IDEOGRAPH + {0xCA4C, 0x8510}, //12477 #CJK UNIFIED IDEOGRAPH + {0xCA4D, 0x8512}, //12478 #CJK UNIFIED IDEOGRAPH + {0xCA4E, 0x8514}, //12479 #CJK UNIFIED IDEOGRAPH + {0xCA4F, 0x8515}, //12480 #CJK UNIFIED IDEOGRAPH + {0xCA50, 0x8516}, //12481 #CJK UNIFIED IDEOGRAPH + {0xCA51, 0x8518}, //12482 #CJK UNIFIED IDEOGRAPH + {0xCA52, 0x8519}, //12483 #CJK UNIFIED IDEOGRAPH + {0xCA53, 0x851B}, //12484 #CJK UNIFIED IDEOGRAPH + {0xCA54, 0x851C}, //12485 #CJK UNIFIED IDEOGRAPH + {0xCA55, 0x851D}, //12486 #CJK UNIFIED IDEOGRAPH + {0xCA56, 0x851E}, //12487 #CJK UNIFIED IDEOGRAPH + {0xCA57, 0x8520}, //12488 #CJK UNIFIED IDEOGRAPH + {0xCA58, 0x8522}, //12489 #CJK UNIFIED IDEOGRAPH + {0xCA59, 0x8523}, //12490 #CJK UNIFIED IDEOGRAPH + {0xCA5A, 0x8524}, //12491 #CJK UNIFIED IDEOGRAPH + {0xCA5B, 0x8525}, //12492 #CJK UNIFIED IDEOGRAPH + {0xCA5C, 0x8526}, //12493 #CJK UNIFIED IDEOGRAPH + {0xCA5D, 0x8527}, //12494 #CJK UNIFIED IDEOGRAPH + {0xCA5E, 0x8528}, //12495 #CJK UNIFIED IDEOGRAPH + {0xCA5F, 0x8529}, //12496 #CJK UNIFIED IDEOGRAPH + {0xCA60, 0x852A}, //12497 #CJK UNIFIED IDEOGRAPH + {0xCA61, 0x852D}, //12498 #CJK UNIFIED IDEOGRAPH + {0xCA62, 0x852E}, //12499 #CJK UNIFIED IDEOGRAPH + {0xCA63, 0x852F}, //12500 #CJK UNIFIED IDEOGRAPH + {0xCA64, 0x8530}, //12501 #CJK UNIFIED IDEOGRAPH + {0xCA65, 0x8531}, //12502 #CJK UNIFIED IDEOGRAPH + {0xCA66, 0x8532}, //12503 #CJK UNIFIED IDEOGRAPH + {0xCA67, 0x8533}, //12504 #CJK UNIFIED IDEOGRAPH + {0xCA68, 0x8534}, //12505 #CJK UNIFIED IDEOGRAPH + {0xCA69, 0x8535}, //12506 #CJK UNIFIED IDEOGRAPH + {0xCA6A, 0x8536}, //12507 #CJK UNIFIED IDEOGRAPH + {0xCA6B, 0x853E}, //12508 #CJK UNIFIED IDEOGRAPH + {0xCA6C, 0x853F}, //12509 #CJK UNIFIED IDEOGRAPH + {0xCA6D, 0x8540}, //12510 #CJK UNIFIED IDEOGRAPH + {0xCA6E, 0x8541}, //12511 #CJK UNIFIED IDEOGRAPH + {0xCA6F, 0x8542}, //12512 #CJK UNIFIED IDEOGRAPH + {0xCA70, 0x8544}, //12513 #CJK UNIFIED IDEOGRAPH + {0xCA71, 0x8545}, //12514 #CJK UNIFIED IDEOGRAPH + {0xCA72, 0x8546}, //12515 #CJK UNIFIED IDEOGRAPH + {0xCA73, 0x8547}, //12516 #CJK UNIFIED IDEOGRAPH + {0xCA74, 0x854B}, //12517 #CJK UNIFIED IDEOGRAPH + {0xCA75, 0x854C}, //12518 #CJK UNIFIED IDEOGRAPH + {0xCA76, 0x854D}, //12519 #CJK UNIFIED IDEOGRAPH + {0xCA77, 0x854E}, //12520 #CJK UNIFIED IDEOGRAPH + {0xCA78, 0x854F}, //12521 #CJK UNIFIED IDEOGRAPH + {0xCA79, 0x8550}, //12522 #CJK UNIFIED IDEOGRAPH + {0xCA7A, 0x8551}, //12523 #CJK UNIFIED IDEOGRAPH + {0xCA7B, 0x8552}, //12524 #CJK UNIFIED IDEOGRAPH + {0xCA7C, 0x8553}, //12525 #CJK UNIFIED IDEOGRAPH + {0xCA7D, 0x8554}, //12526 #CJK UNIFIED IDEOGRAPH + {0xCA7E, 0x8555}, //12527 #CJK UNIFIED IDEOGRAPH + {0xCA80, 0x8557}, //12528 #CJK UNIFIED IDEOGRAPH + {0xCA81, 0x8558}, //12529 #CJK UNIFIED IDEOGRAPH + {0xCA82, 0x855A}, //12530 #CJK UNIFIED IDEOGRAPH + {0xCA83, 0x855B}, //12531 #CJK UNIFIED IDEOGRAPH + {0xCA84, 0x855C}, //12532 #CJK UNIFIED IDEOGRAPH + {0xCA85, 0x855D}, //12533 #CJK UNIFIED IDEOGRAPH + {0xCA86, 0x855F}, //12534 #CJK UNIFIED IDEOGRAPH + {0xCA87, 0x8560}, //12535 #CJK UNIFIED IDEOGRAPH + {0xCA88, 0x8561}, //12536 #CJK UNIFIED IDEOGRAPH + {0xCA89, 0x8562}, //12537 #CJK UNIFIED IDEOGRAPH + {0xCA8A, 0x8563}, //12538 #CJK UNIFIED IDEOGRAPH + {0xCA8B, 0x8565}, //12539 #CJK UNIFIED IDEOGRAPH + {0xCA8C, 0x8566}, //12540 #CJK UNIFIED IDEOGRAPH + {0xCA8D, 0x8567}, //12541 #CJK UNIFIED IDEOGRAPH + {0xCA8E, 0x8569}, //12542 #CJK UNIFIED IDEOGRAPH + {0xCA8F, 0x856A}, //12543 #CJK UNIFIED IDEOGRAPH + {0xCA90, 0x856B}, //12544 #CJK UNIFIED IDEOGRAPH + {0xCA91, 0x856C}, //12545 #CJK UNIFIED IDEOGRAPH + {0xCA92, 0x856D}, //12546 #CJK UNIFIED IDEOGRAPH + {0xCA93, 0x856E}, //12547 #CJK UNIFIED IDEOGRAPH + {0xCA94, 0x856F}, //12548 #CJK UNIFIED IDEOGRAPH + {0xCA95, 0x8570}, //12549 #CJK UNIFIED IDEOGRAPH + {0xCA96, 0x8571}, //12550 #CJK UNIFIED IDEOGRAPH + {0xCA97, 0x8573}, //12551 #CJK UNIFIED IDEOGRAPH + {0xCA98, 0x8575}, //12552 #CJK UNIFIED IDEOGRAPH + {0xCA99, 0x8576}, //12553 #CJK UNIFIED IDEOGRAPH + {0xCA9A, 0x8577}, //12554 #CJK UNIFIED IDEOGRAPH + {0xCA9B, 0x8578}, //12555 #CJK UNIFIED IDEOGRAPH + {0xCA9C, 0x857C}, //12556 #CJK UNIFIED IDEOGRAPH + {0xCA9D, 0x857D}, //12557 #CJK UNIFIED IDEOGRAPH + {0xCA9E, 0x857F}, //12558 #CJK UNIFIED IDEOGRAPH + {0xCA9F, 0x8580}, //12559 #CJK UNIFIED IDEOGRAPH + {0xCAA0, 0x8581}, //12560 #CJK UNIFIED IDEOGRAPH + {0xCAA1, 0x7701}, //12561 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x76DB}, //12562 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5269}, //12563 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x80DC}, //12564 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x5723}, //12565 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x5E08}, //12566 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x5931}, //12567 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x72EE}, //12568 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x65BD}, //12569 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x6E7F}, //12570 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x8BD7}, //12571 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x5C38}, //12572 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x8671}, //12573 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x5341}, //12574 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x77F3}, //12575 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x62FE}, //12576 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x65F6}, //12577 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x4EC0}, //12578 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x98DF}, //12579 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x8680}, //12580 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x5B9E}, //12581 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x8BC6}, //12582 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x53F2}, //12583 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x77E2}, //12584 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x4F7F}, //12585 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x5C4E}, //12586 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x9A76}, //12587 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x59CB}, //12588 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x5F0F}, //12589 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x793A}, //12590 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x58EB}, //12591 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x4E16}, //12592 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x67FF}, //12593 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x4E8B}, //12594 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x62ED}, //12595 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x8A93}, //12596 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x901D}, //12597 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x52BF}, //12598 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x662F}, //12599 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x55DC}, //12600 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x566C}, //12601 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x9002}, //12602 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x4ED5}, //12603 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x4F8D}, //12604 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x91CA}, //12605 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x9970}, //12606 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x6C0F}, //12607 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x5E02}, //12608 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x6043}, //12609 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x5BA4}, //12610 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x89C6}, //12611 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x8BD5}, //12612 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x6536}, //12613 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x624B}, //12614 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x9996}, //12615 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x5B88}, //12616 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x5BFF}, //12617 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x6388}, //12618 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x552E}, //12619 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x53D7}, //12620 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x7626}, //12621 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x517D}, //12622 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x852C}, //12623 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x67A2}, //12624 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x68B3}, //12625 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x6B8A}, //12626 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x6292}, //12627 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x8F93}, //12628 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x53D4}, //12629 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x8212}, //12630 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x6DD1}, //12631 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x758F}, //12632 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x4E66}, //12633 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x8D4E}, //12634 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x5B70}, //12635 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x719F}, //12636 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x85AF}, //12637 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x6691}, //12638 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x66D9}, //12639 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x7F72}, //12640 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x8700}, //12641 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x9ECD}, //12642 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x9F20}, //12643 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x5C5E}, //12644 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x672F}, //12645 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x8FF0}, //12646 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x6811}, //12647 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x675F}, //12648 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x620D}, //12649 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x7AD6}, //12650 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x5885}, //12651 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x5EB6}, //12652 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x6570}, //12653 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x6F31}, //12654 #CJK UNIFIED IDEOGRAPH + {0xCB40, 0x8582}, //12655 #CJK UNIFIED IDEOGRAPH + {0xCB41, 0x8583}, //12656 #CJK UNIFIED IDEOGRAPH + {0xCB42, 0x8586}, //12657 #CJK UNIFIED IDEOGRAPH + {0xCB43, 0x8588}, //12658 #CJK UNIFIED IDEOGRAPH + {0xCB44, 0x8589}, //12659 #CJK UNIFIED IDEOGRAPH + {0xCB45, 0x858A}, //12660 #CJK UNIFIED IDEOGRAPH + {0xCB46, 0x858B}, //12661 #CJK UNIFIED IDEOGRAPH + {0xCB47, 0x858C}, //12662 #CJK UNIFIED IDEOGRAPH + {0xCB48, 0x858D}, //12663 #CJK UNIFIED IDEOGRAPH + {0xCB49, 0x858E}, //12664 #CJK UNIFIED IDEOGRAPH + {0xCB4A, 0x8590}, //12665 #CJK UNIFIED IDEOGRAPH + {0xCB4B, 0x8591}, //12666 #CJK UNIFIED IDEOGRAPH + {0xCB4C, 0x8592}, //12667 #CJK UNIFIED IDEOGRAPH + {0xCB4D, 0x8593}, //12668 #CJK UNIFIED IDEOGRAPH + {0xCB4E, 0x8594}, //12669 #CJK UNIFIED IDEOGRAPH + {0xCB4F, 0x8595}, //12670 #CJK UNIFIED IDEOGRAPH + {0xCB50, 0x8596}, //12671 #CJK UNIFIED IDEOGRAPH + {0xCB51, 0x8597}, //12672 #CJK UNIFIED IDEOGRAPH + {0xCB52, 0x8598}, //12673 #CJK UNIFIED IDEOGRAPH + {0xCB53, 0x8599}, //12674 #CJK UNIFIED IDEOGRAPH + {0xCB54, 0x859A}, //12675 #CJK UNIFIED IDEOGRAPH + {0xCB55, 0x859D}, //12676 #CJK UNIFIED IDEOGRAPH + {0xCB56, 0x859E}, //12677 #CJK UNIFIED IDEOGRAPH + {0xCB57, 0x859F}, //12678 #CJK UNIFIED IDEOGRAPH + {0xCB58, 0x85A0}, //12679 #CJK UNIFIED IDEOGRAPH + {0xCB59, 0x85A1}, //12680 #CJK UNIFIED IDEOGRAPH + {0xCB5A, 0x85A2}, //12681 #CJK UNIFIED IDEOGRAPH + {0xCB5B, 0x85A3}, //12682 #CJK UNIFIED IDEOGRAPH + {0xCB5C, 0x85A5}, //12683 #CJK UNIFIED IDEOGRAPH + {0xCB5D, 0x85A6}, //12684 #CJK UNIFIED IDEOGRAPH + {0xCB5E, 0x85A7}, //12685 #CJK UNIFIED IDEOGRAPH + {0xCB5F, 0x85A9}, //12686 #CJK UNIFIED IDEOGRAPH + {0xCB60, 0x85AB}, //12687 #CJK UNIFIED IDEOGRAPH + {0xCB61, 0x85AC}, //12688 #CJK UNIFIED IDEOGRAPH + {0xCB62, 0x85AD}, //12689 #CJK UNIFIED IDEOGRAPH + {0xCB63, 0x85B1}, //12690 #CJK UNIFIED IDEOGRAPH + {0xCB64, 0x85B2}, //12691 #CJK UNIFIED IDEOGRAPH + {0xCB65, 0x85B3}, //12692 #CJK UNIFIED IDEOGRAPH + {0xCB66, 0x85B4}, //12693 #CJK UNIFIED IDEOGRAPH + {0xCB67, 0x85B5}, //12694 #CJK UNIFIED IDEOGRAPH + {0xCB68, 0x85B6}, //12695 #CJK UNIFIED IDEOGRAPH + {0xCB69, 0x85B8}, //12696 #CJK UNIFIED IDEOGRAPH + {0xCB6A, 0x85BA}, //12697 #CJK UNIFIED IDEOGRAPH + {0xCB6B, 0x85BB}, //12698 #CJK UNIFIED IDEOGRAPH + {0xCB6C, 0x85BC}, //12699 #CJK UNIFIED IDEOGRAPH + {0xCB6D, 0x85BD}, //12700 #CJK UNIFIED IDEOGRAPH + {0xCB6E, 0x85BE}, //12701 #CJK UNIFIED IDEOGRAPH + {0xCB6F, 0x85BF}, //12702 #CJK UNIFIED IDEOGRAPH + {0xCB70, 0x85C0}, //12703 #CJK UNIFIED IDEOGRAPH + {0xCB71, 0x85C2}, //12704 #CJK UNIFIED IDEOGRAPH + {0xCB72, 0x85C3}, //12705 #CJK UNIFIED IDEOGRAPH + {0xCB73, 0x85C4}, //12706 #CJK UNIFIED IDEOGRAPH + {0xCB74, 0x85C5}, //12707 #CJK UNIFIED IDEOGRAPH + {0xCB75, 0x85C6}, //12708 #CJK UNIFIED IDEOGRAPH + {0xCB76, 0x85C7}, //12709 #CJK UNIFIED IDEOGRAPH + {0xCB77, 0x85C8}, //12710 #CJK UNIFIED IDEOGRAPH + {0xCB78, 0x85CA}, //12711 #CJK UNIFIED IDEOGRAPH + {0xCB79, 0x85CB}, //12712 #CJK UNIFIED IDEOGRAPH + {0xCB7A, 0x85CC}, //12713 #CJK UNIFIED IDEOGRAPH + {0xCB7B, 0x85CD}, //12714 #CJK UNIFIED IDEOGRAPH + {0xCB7C, 0x85CE}, //12715 #CJK UNIFIED IDEOGRAPH + {0xCB7D, 0x85D1}, //12716 #CJK UNIFIED IDEOGRAPH + {0xCB7E, 0x85D2}, //12717 #CJK UNIFIED IDEOGRAPH + {0xCB80, 0x85D4}, //12718 #CJK UNIFIED IDEOGRAPH + {0xCB81, 0x85D6}, //12719 #CJK UNIFIED IDEOGRAPH + {0xCB82, 0x85D7}, //12720 #CJK UNIFIED IDEOGRAPH + {0xCB83, 0x85D8}, //12721 #CJK UNIFIED IDEOGRAPH + {0xCB84, 0x85D9}, //12722 #CJK UNIFIED IDEOGRAPH + {0xCB85, 0x85DA}, //12723 #CJK UNIFIED IDEOGRAPH + {0xCB86, 0x85DB}, //12724 #CJK UNIFIED IDEOGRAPH + {0xCB87, 0x85DD}, //12725 #CJK UNIFIED IDEOGRAPH + {0xCB88, 0x85DE}, //12726 #CJK UNIFIED IDEOGRAPH + {0xCB89, 0x85DF}, //12727 #CJK UNIFIED IDEOGRAPH + {0xCB8A, 0x85E0}, //12728 #CJK UNIFIED IDEOGRAPH + {0xCB8B, 0x85E1}, //12729 #CJK UNIFIED IDEOGRAPH + {0xCB8C, 0x85E2}, //12730 #CJK UNIFIED IDEOGRAPH + {0xCB8D, 0x85E3}, //12731 #CJK UNIFIED IDEOGRAPH + {0xCB8E, 0x85E5}, //12732 #CJK UNIFIED IDEOGRAPH + {0xCB8F, 0x85E6}, //12733 #CJK UNIFIED IDEOGRAPH + {0xCB90, 0x85E7}, //12734 #CJK UNIFIED IDEOGRAPH + {0xCB91, 0x85E8}, //12735 #CJK UNIFIED IDEOGRAPH + {0xCB92, 0x85EA}, //12736 #CJK UNIFIED IDEOGRAPH + {0xCB93, 0x85EB}, //12737 #CJK UNIFIED IDEOGRAPH + {0xCB94, 0x85EC}, //12738 #CJK UNIFIED IDEOGRAPH + {0xCB95, 0x85ED}, //12739 #CJK UNIFIED IDEOGRAPH + {0xCB96, 0x85EE}, //12740 #CJK UNIFIED IDEOGRAPH + {0xCB97, 0x85EF}, //12741 #CJK UNIFIED IDEOGRAPH + {0xCB98, 0x85F0}, //12742 #CJK UNIFIED IDEOGRAPH + {0xCB99, 0x85F1}, //12743 #CJK UNIFIED IDEOGRAPH + {0xCB9A, 0x85F2}, //12744 #CJK UNIFIED IDEOGRAPH + {0xCB9B, 0x85F3}, //12745 #CJK UNIFIED IDEOGRAPH + {0xCB9C, 0x85F4}, //12746 #CJK UNIFIED IDEOGRAPH + {0xCB9D, 0x85F5}, //12747 #CJK UNIFIED IDEOGRAPH + {0xCB9E, 0x85F6}, //12748 #CJK UNIFIED IDEOGRAPH + {0xCB9F, 0x85F7}, //12749 #CJK UNIFIED IDEOGRAPH + {0xCBA0, 0x85F8}, //12750 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x6055}, //12751 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x5237}, //12752 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x800D}, //12753 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x6454}, //12754 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x8870}, //12755 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x7529}, //12756 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x5E05}, //12757 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x6813}, //12758 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x62F4}, //12759 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x971C}, //12760 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x53CC}, //12761 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x723D}, //12762 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x8C01}, //12763 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x6C34}, //12764 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x7761}, //12765 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x7A0E}, //12766 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x542E}, //12767 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x77AC}, //12768 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x987A}, //12769 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x821C}, //12770 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x8BF4}, //12771 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x7855}, //12772 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x6714}, //12773 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x70C1}, //12774 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x65AF}, //12775 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x6495}, //12776 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x5636}, //12777 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x601D}, //12778 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x79C1}, //12779 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x53F8}, //12780 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4E1D}, //12781 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x6B7B}, //12782 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x8086}, //12783 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x5BFA}, //12784 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x55E3}, //12785 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x56DB}, //12786 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x4F3A}, //12787 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x4F3C}, //12788 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x9972}, //12789 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x5DF3}, //12790 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x677E}, //12791 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x8038}, //12792 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x6002}, //12793 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x9882}, //12794 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x9001}, //12795 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x5B8B}, //12796 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x8BBC}, //12797 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0x8BF5}, //12798 #CJK UNIFIED IDEOGRAPH + {0xCBD1, 0x641C}, //12799 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x8258}, //12800 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x64DE}, //12801 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x55FD}, //12802 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x82CF}, //12803 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0x9165}, //12804 #CJK UNIFIED IDEOGRAPH + {0xCBD7, 0x4FD7}, //12805 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x7D20}, //12806 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x901F}, //12807 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x7C9F}, //12808 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x50F3}, //12809 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x5851}, //12810 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x6EAF}, //12811 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x5BBF}, //12812 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x8BC9}, //12813 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x8083}, //12814 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x9178}, //12815 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x849C}, //12816 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x7B97}, //12817 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x867D}, //12818 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x968B}, //12819 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x968F}, //12820 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0x7EE5}, //12821 #CJK UNIFIED IDEOGRAPH + {0xCBE8, 0x9AD3}, //12822 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x788E}, //12823 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x5C81}, //12824 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x7A57}, //12825 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x9042}, //12826 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x96A7}, //12827 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x795F}, //12828 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5B59}, //12829 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x635F}, //12830 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x7B0B}, //12831 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x84D1}, //12832 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x68AD}, //12833 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x5506}, //12834 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x7F29}, //12835 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x7410}, //12836 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x7D22}, //12837 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x9501}, //12838 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x6240}, //12839 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x584C}, //12840 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x4ED6}, //12841 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x5B83}, //12842 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5979}, //12843 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x5854}, //12844 #CJK UNIFIED IDEOGRAPH + {0xCC40, 0x85F9}, //12845 #CJK UNIFIED IDEOGRAPH + {0xCC41, 0x85FA}, //12846 #CJK UNIFIED IDEOGRAPH + {0xCC42, 0x85FC}, //12847 #CJK UNIFIED IDEOGRAPH + {0xCC43, 0x85FD}, //12848 #CJK UNIFIED IDEOGRAPH + {0xCC44, 0x85FE}, //12849 #CJK UNIFIED IDEOGRAPH + {0xCC45, 0x8600}, //12850 #CJK UNIFIED IDEOGRAPH + {0xCC46, 0x8601}, //12851 #CJK UNIFIED IDEOGRAPH + {0xCC47, 0x8602}, //12852 #CJK UNIFIED IDEOGRAPH + {0xCC48, 0x8603}, //12853 #CJK UNIFIED IDEOGRAPH + {0xCC49, 0x8604}, //12854 #CJK UNIFIED IDEOGRAPH + {0xCC4A, 0x8606}, //12855 #CJK UNIFIED IDEOGRAPH + {0xCC4B, 0x8607}, //12856 #CJK UNIFIED IDEOGRAPH + {0xCC4C, 0x8608}, //12857 #CJK UNIFIED IDEOGRAPH + {0xCC4D, 0x8609}, //12858 #CJK UNIFIED IDEOGRAPH + {0xCC4E, 0x860A}, //12859 #CJK UNIFIED IDEOGRAPH + {0xCC4F, 0x860B}, //12860 #CJK UNIFIED IDEOGRAPH + {0xCC50, 0x860C}, //12861 #CJK UNIFIED IDEOGRAPH + {0xCC51, 0x860D}, //12862 #CJK UNIFIED IDEOGRAPH + {0xCC52, 0x860E}, //12863 #CJK UNIFIED IDEOGRAPH + {0xCC53, 0x860F}, //12864 #CJK UNIFIED IDEOGRAPH + {0xCC54, 0x8610}, //12865 #CJK UNIFIED IDEOGRAPH + {0xCC55, 0x8612}, //12866 #CJK UNIFIED IDEOGRAPH + {0xCC56, 0x8613}, //12867 #CJK UNIFIED IDEOGRAPH + {0xCC57, 0x8614}, //12868 #CJK UNIFIED IDEOGRAPH + {0xCC58, 0x8615}, //12869 #CJK UNIFIED IDEOGRAPH + {0xCC59, 0x8617}, //12870 #CJK UNIFIED IDEOGRAPH + {0xCC5A, 0x8618}, //12871 #CJK UNIFIED IDEOGRAPH + {0xCC5B, 0x8619}, //12872 #CJK UNIFIED IDEOGRAPH + {0xCC5C, 0x861A}, //12873 #CJK UNIFIED IDEOGRAPH + {0xCC5D, 0x861B}, //12874 #CJK UNIFIED IDEOGRAPH + {0xCC5E, 0x861C}, //12875 #CJK UNIFIED IDEOGRAPH + {0xCC5F, 0x861D}, //12876 #CJK UNIFIED IDEOGRAPH + {0xCC60, 0x861E}, //12877 #CJK UNIFIED IDEOGRAPH + {0xCC61, 0x861F}, //12878 #CJK UNIFIED IDEOGRAPH + {0xCC62, 0x8620}, //12879 #CJK UNIFIED IDEOGRAPH + {0xCC63, 0x8621}, //12880 #CJK UNIFIED IDEOGRAPH + {0xCC64, 0x8622}, //12881 #CJK UNIFIED IDEOGRAPH + {0xCC65, 0x8623}, //12882 #CJK UNIFIED IDEOGRAPH + {0xCC66, 0x8624}, //12883 #CJK UNIFIED IDEOGRAPH + {0xCC67, 0x8625}, //12884 #CJK UNIFIED IDEOGRAPH + {0xCC68, 0x8626}, //12885 #CJK UNIFIED IDEOGRAPH + {0xCC69, 0x8628}, //12886 #CJK UNIFIED IDEOGRAPH + {0xCC6A, 0x862A}, //12887 #CJK UNIFIED IDEOGRAPH + {0xCC6B, 0x862B}, //12888 #CJK UNIFIED IDEOGRAPH + {0xCC6C, 0x862C}, //12889 #CJK UNIFIED IDEOGRAPH + {0xCC6D, 0x862D}, //12890 #CJK UNIFIED IDEOGRAPH + {0xCC6E, 0x862E}, //12891 #CJK UNIFIED IDEOGRAPH + {0xCC6F, 0x862F}, //12892 #CJK UNIFIED IDEOGRAPH + {0xCC70, 0x8630}, //12893 #CJK UNIFIED IDEOGRAPH + {0xCC71, 0x8631}, //12894 #CJK UNIFIED IDEOGRAPH + {0xCC72, 0x8632}, //12895 #CJK UNIFIED IDEOGRAPH + {0xCC73, 0x8633}, //12896 #CJK UNIFIED IDEOGRAPH + {0xCC74, 0x8634}, //12897 #CJK UNIFIED IDEOGRAPH + {0xCC75, 0x8635}, //12898 #CJK UNIFIED IDEOGRAPH + {0xCC76, 0x8636}, //12899 #CJK UNIFIED IDEOGRAPH + {0xCC77, 0x8637}, //12900 #CJK UNIFIED IDEOGRAPH + {0xCC78, 0x8639}, //12901 #CJK UNIFIED IDEOGRAPH + {0xCC79, 0x863A}, //12902 #CJK UNIFIED IDEOGRAPH + {0xCC7A, 0x863B}, //12903 #CJK UNIFIED IDEOGRAPH + {0xCC7B, 0x863D}, //12904 #CJK UNIFIED IDEOGRAPH + {0xCC7C, 0x863E}, //12905 #CJK UNIFIED IDEOGRAPH + {0xCC7D, 0x863F}, //12906 #CJK UNIFIED IDEOGRAPH + {0xCC7E, 0x8640}, //12907 #CJK UNIFIED IDEOGRAPH + {0xCC80, 0x8641}, //12908 #CJK UNIFIED IDEOGRAPH + {0xCC81, 0x8642}, //12909 #CJK UNIFIED IDEOGRAPH + {0xCC82, 0x8643}, //12910 #CJK UNIFIED IDEOGRAPH + {0xCC83, 0x8644}, //12911 #CJK UNIFIED IDEOGRAPH + {0xCC84, 0x8645}, //12912 #CJK UNIFIED IDEOGRAPH + {0xCC85, 0x8646}, //12913 #CJK UNIFIED IDEOGRAPH + {0xCC86, 0x8647}, //12914 #CJK UNIFIED IDEOGRAPH + {0xCC87, 0x8648}, //12915 #CJK UNIFIED IDEOGRAPH + {0xCC88, 0x8649}, //12916 #CJK UNIFIED IDEOGRAPH + {0xCC89, 0x864A}, //12917 #CJK UNIFIED IDEOGRAPH + {0xCC8A, 0x864B}, //12918 #CJK UNIFIED IDEOGRAPH + {0xCC8B, 0x864C}, //12919 #CJK UNIFIED IDEOGRAPH + {0xCC8C, 0x8652}, //12920 #CJK UNIFIED IDEOGRAPH + {0xCC8D, 0x8653}, //12921 #CJK UNIFIED IDEOGRAPH + {0xCC8E, 0x8655}, //12922 #CJK UNIFIED IDEOGRAPH + {0xCC8F, 0x8656}, //12923 #CJK UNIFIED IDEOGRAPH + {0xCC90, 0x8657}, //12924 #CJK UNIFIED IDEOGRAPH + {0xCC91, 0x8658}, //12925 #CJK UNIFIED IDEOGRAPH + {0xCC92, 0x8659}, //12926 #CJK UNIFIED IDEOGRAPH + {0xCC93, 0x865B}, //12927 #CJK UNIFIED IDEOGRAPH + {0xCC94, 0x865C}, //12928 #CJK UNIFIED IDEOGRAPH + {0xCC95, 0x865D}, //12929 #CJK UNIFIED IDEOGRAPH + {0xCC96, 0x865F}, //12930 #CJK UNIFIED IDEOGRAPH + {0xCC97, 0x8660}, //12931 #CJK UNIFIED IDEOGRAPH + {0xCC98, 0x8661}, //12932 #CJK UNIFIED IDEOGRAPH + {0xCC99, 0x8663}, //12933 #CJK UNIFIED IDEOGRAPH + {0xCC9A, 0x8664}, //12934 #CJK UNIFIED IDEOGRAPH + {0xCC9B, 0x8665}, //12935 #CJK UNIFIED IDEOGRAPH + {0xCC9C, 0x8666}, //12936 #CJK UNIFIED IDEOGRAPH + {0xCC9D, 0x8667}, //12937 #CJK UNIFIED IDEOGRAPH + {0xCC9E, 0x8668}, //12938 #CJK UNIFIED IDEOGRAPH + {0xCC9F, 0x8669}, //12939 #CJK UNIFIED IDEOGRAPH + {0xCCA0, 0x866A}, //12940 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x736D}, //12941 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x631E}, //12942 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x8E4B}, //12943 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x8E0F}, //12944 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x80CE}, //12945 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x82D4}, //12946 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x62AC}, //12947 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x53F0}, //12948 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x6CF0}, //12949 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x915E}, //12950 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x592A}, //12951 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6001}, //12952 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6C70}, //12953 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x574D}, //12954 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x644A}, //12955 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x8D2A}, //12956 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x762B}, //12957 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x6EE9}, //12958 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x575B}, //12959 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x6A80}, //12960 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x75F0}, //12961 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x6F6D}, //12962 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x8C2D}, //12963 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x8C08}, //12964 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x5766}, //12965 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x6BEF}, //12966 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x8892}, //12967 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x78B3}, //12968 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x63A2}, //12969 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x53F9}, //12970 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x70AD}, //12971 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x6C64}, //12972 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x5858}, //12973 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x642A}, //12974 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x5802}, //12975 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x68E0}, //12976 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x819B}, //12977 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x5510}, //12978 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x7CD6}, //12979 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x5018}, //12980 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x8EBA}, //12981 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x6DCC}, //12982 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x8D9F}, //12983 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x70EB}, //12984 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x638F}, //12985 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x6D9B}, //12986 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x6ED4}, //12987 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x7EE6}, //12988 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x8404}, //12989 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x6843}, //12990 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x9003}, //12991 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x6DD8}, //12992 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x9676}, //12993 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x8BA8}, //12994 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x5957}, //12995 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x7279}, //12996 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x85E4}, //12997 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x817E}, //12998 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x75BC}, //12999 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x8A8A}, //13000 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x68AF}, //13001 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x5254}, //13002 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x8E22}, //13003 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x9511}, //13004 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x63D0}, //13005 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x9898}, //13006 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x8E44}, //13007 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x557C}, //13008 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x4F53}, //13009 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x66FF}, //13010 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x568F}, //13011 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x60D5}, //13012 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x6D95}, //13013 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x5243}, //13014 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x5C49}, //13015 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x5929}, //13016 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x6DFB}, //13017 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x586B}, //13018 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x7530}, //13019 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x751C}, //13020 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x606C}, //13021 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x8214}, //13022 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x8146}, //13023 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x6311}, //13024 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x6761}, //13025 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x8FE2}, //13026 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x773A}, //13027 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x8DF3}, //13028 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x8D34}, //13029 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x94C1}, //13030 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x5E16}, //13031 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x5385}, //13032 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x542C}, //13033 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x70C3}, //13034 #CJK UNIFIED IDEOGRAPH + {0xCD40, 0x866D}, //13035 #CJK UNIFIED IDEOGRAPH + {0xCD41, 0x866F}, //13036 #CJK UNIFIED IDEOGRAPH + {0xCD42, 0x8670}, //13037 #CJK UNIFIED IDEOGRAPH + {0xCD43, 0x8672}, //13038 #CJK UNIFIED IDEOGRAPH + {0xCD44, 0x8673}, //13039 #CJK UNIFIED IDEOGRAPH + {0xCD45, 0x8674}, //13040 #CJK UNIFIED IDEOGRAPH + {0xCD46, 0x8675}, //13041 #CJK UNIFIED IDEOGRAPH + {0xCD47, 0x8676}, //13042 #CJK UNIFIED IDEOGRAPH + {0xCD48, 0x8677}, //13043 #CJK UNIFIED IDEOGRAPH + {0xCD49, 0x8678}, //13044 #CJK UNIFIED IDEOGRAPH + {0xCD4A, 0x8683}, //13045 #CJK UNIFIED IDEOGRAPH + {0xCD4B, 0x8684}, //13046 #CJK UNIFIED IDEOGRAPH + {0xCD4C, 0x8685}, //13047 #CJK UNIFIED IDEOGRAPH + {0xCD4D, 0x8686}, //13048 #CJK UNIFIED IDEOGRAPH + {0xCD4E, 0x8687}, //13049 #CJK UNIFIED IDEOGRAPH + {0xCD4F, 0x8688}, //13050 #CJK UNIFIED IDEOGRAPH + {0xCD50, 0x8689}, //13051 #CJK UNIFIED IDEOGRAPH + {0xCD51, 0x868E}, //13052 #CJK UNIFIED IDEOGRAPH + {0xCD52, 0x868F}, //13053 #CJK UNIFIED IDEOGRAPH + {0xCD53, 0x8690}, //13054 #CJK UNIFIED IDEOGRAPH + {0xCD54, 0x8691}, //13055 #CJK UNIFIED IDEOGRAPH + {0xCD55, 0x8692}, //13056 #CJK UNIFIED IDEOGRAPH + {0xCD56, 0x8694}, //13057 #CJK UNIFIED IDEOGRAPH + {0xCD57, 0x8696}, //13058 #CJK UNIFIED IDEOGRAPH + {0xCD58, 0x8697}, //13059 #CJK UNIFIED IDEOGRAPH + {0xCD59, 0x8698}, //13060 #CJK UNIFIED IDEOGRAPH + {0xCD5A, 0x8699}, //13061 #CJK UNIFIED IDEOGRAPH + {0xCD5B, 0x869A}, //13062 #CJK UNIFIED IDEOGRAPH + {0xCD5C, 0x869B}, //13063 #CJK UNIFIED IDEOGRAPH + {0xCD5D, 0x869E}, //13064 #CJK UNIFIED IDEOGRAPH + {0xCD5E, 0x869F}, //13065 #CJK UNIFIED IDEOGRAPH + {0xCD5F, 0x86A0}, //13066 #CJK UNIFIED IDEOGRAPH + {0xCD60, 0x86A1}, //13067 #CJK UNIFIED IDEOGRAPH + {0xCD61, 0x86A2}, //13068 #CJK UNIFIED IDEOGRAPH + {0xCD62, 0x86A5}, //13069 #CJK UNIFIED IDEOGRAPH + {0xCD63, 0x86A6}, //13070 #CJK UNIFIED IDEOGRAPH + {0xCD64, 0x86AB}, //13071 #CJK UNIFIED IDEOGRAPH + {0xCD65, 0x86AD}, //13072 #CJK UNIFIED IDEOGRAPH + {0xCD66, 0x86AE}, //13073 #CJK UNIFIED IDEOGRAPH + {0xCD67, 0x86B2}, //13074 #CJK UNIFIED IDEOGRAPH + {0xCD68, 0x86B3}, //13075 #CJK UNIFIED IDEOGRAPH + {0xCD69, 0x86B7}, //13076 #CJK UNIFIED IDEOGRAPH + {0xCD6A, 0x86B8}, //13077 #CJK UNIFIED IDEOGRAPH + {0xCD6B, 0x86B9}, //13078 #CJK UNIFIED IDEOGRAPH + {0xCD6C, 0x86BB}, //13079 #CJK UNIFIED IDEOGRAPH + {0xCD6D, 0x86BC}, //13080 #CJK UNIFIED IDEOGRAPH + {0xCD6E, 0x86BD}, //13081 #CJK UNIFIED IDEOGRAPH + {0xCD6F, 0x86BE}, //13082 #CJK UNIFIED IDEOGRAPH + {0xCD70, 0x86BF}, //13083 #CJK UNIFIED IDEOGRAPH + {0xCD71, 0x86C1}, //13084 #CJK UNIFIED IDEOGRAPH + {0xCD72, 0x86C2}, //13085 #CJK UNIFIED IDEOGRAPH + {0xCD73, 0x86C3}, //13086 #CJK UNIFIED IDEOGRAPH + {0xCD74, 0x86C5}, //13087 #CJK UNIFIED IDEOGRAPH + {0xCD75, 0x86C8}, //13088 #CJK UNIFIED IDEOGRAPH + {0xCD76, 0x86CC}, //13089 #CJK UNIFIED IDEOGRAPH + {0xCD77, 0x86CD}, //13090 #CJK UNIFIED IDEOGRAPH + {0xCD78, 0x86D2}, //13091 #CJK UNIFIED IDEOGRAPH + {0xCD79, 0x86D3}, //13092 #CJK UNIFIED IDEOGRAPH + {0xCD7A, 0x86D5}, //13093 #CJK UNIFIED IDEOGRAPH + {0xCD7B, 0x86D6}, //13094 #CJK UNIFIED IDEOGRAPH + {0xCD7C, 0x86D7}, //13095 #CJK UNIFIED IDEOGRAPH + {0xCD7D, 0x86DA}, //13096 #CJK UNIFIED IDEOGRAPH + {0xCD7E, 0x86DC}, //13097 #CJK UNIFIED IDEOGRAPH + {0xCD80, 0x86DD}, //13098 #CJK UNIFIED IDEOGRAPH + {0xCD81, 0x86E0}, //13099 #CJK UNIFIED IDEOGRAPH + {0xCD82, 0x86E1}, //13100 #CJK UNIFIED IDEOGRAPH + {0xCD83, 0x86E2}, //13101 #CJK UNIFIED IDEOGRAPH + {0xCD84, 0x86E3}, //13102 #CJK UNIFIED IDEOGRAPH + {0xCD85, 0x86E5}, //13103 #CJK UNIFIED IDEOGRAPH + {0xCD86, 0x86E6}, //13104 #CJK UNIFIED IDEOGRAPH + {0xCD87, 0x86E7}, //13105 #CJK UNIFIED IDEOGRAPH + {0xCD88, 0x86E8}, //13106 #CJK UNIFIED IDEOGRAPH + {0xCD89, 0x86EA}, //13107 #CJK UNIFIED IDEOGRAPH + {0xCD8A, 0x86EB}, //13108 #CJK UNIFIED IDEOGRAPH + {0xCD8B, 0x86EC}, //13109 #CJK UNIFIED IDEOGRAPH + {0xCD8C, 0x86EF}, //13110 #CJK UNIFIED IDEOGRAPH + {0xCD8D, 0x86F5}, //13111 #CJK UNIFIED IDEOGRAPH + {0xCD8E, 0x86F6}, //13112 #CJK UNIFIED IDEOGRAPH + {0xCD8F, 0x86F7}, //13113 #CJK UNIFIED IDEOGRAPH + {0xCD90, 0x86FA}, //13114 #CJK UNIFIED IDEOGRAPH + {0xCD91, 0x86FB}, //13115 #CJK UNIFIED IDEOGRAPH + {0xCD92, 0x86FC}, //13116 #CJK UNIFIED IDEOGRAPH + {0xCD93, 0x86FD}, //13117 #CJK UNIFIED IDEOGRAPH + {0xCD94, 0x86FF}, //13118 #CJK UNIFIED IDEOGRAPH + {0xCD95, 0x8701}, //13119 #CJK UNIFIED IDEOGRAPH + {0xCD96, 0x8704}, //13120 #CJK UNIFIED IDEOGRAPH + {0xCD97, 0x8705}, //13121 #CJK UNIFIED IDEOGRAPH + {0xCD98, 0x8706}, //13122 #CJK UNIFIED IDEOGRAPH + {0xCD99, 0x870B}, //13123 #CJK UNIFIED IDEOGRAPH + {0xCD9A, 0x870C}, //13124 #CJK UNIFIED IDEOGRAPH + {0xCD9B, 0x870E}, //13125 #CJK UNIFIED IDEOGRAPH + {0xCD9C, 0x870F}, //13126 #CJK UNIFIED IDEOGRAPH + {0xCD9D, 0x8710}, //13127 #CJK UNIFIED IDEOGRAPH + {0xCD9E, 0x8711}, //13128 #CJK UNIFIED IDEOGRAPH + {0xCD9F, 0x8714}, //13129 #CJK UNIFIED IDEOGRAPH + {0xCDA0, 0x8716}, //13130 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x6C40}, //13131 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x5EF7}, //13132 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x505C}, //13133 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x4EAD}, //13134 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x5EAD}, //13135 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x633A}, //13136 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x8247}, //13137 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x901A}, //13138 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x6850}, //13139 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x916E}, //13140 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x77B3}, //13141 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x540C}, //13142 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x94DC}, //13143 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x5F64}, //13144 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x7AE5}, //13145 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x6876}, //13146 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x6345}, //13147 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x7B52}, //13148 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x7EDF}, //13149 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x75DB}, //13150 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x5077}, //13151 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x6295}, //13152 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x5934}, //13153 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x900F}, //13154 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x51F8}, //13155 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x79C3}, //13156 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x7A81}, //13157 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x56FE}, //13158 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x5F92}, //13159 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x9014}, //13160 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x6D82}, //13161 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x5C60}, //13162 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x571F}, //13163 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x5410}, //13164 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x5154}, //13165 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x6E4D}, //13166 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x56E2}, //13167 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x63A8}, //13168 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x9893}, //13169 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x817F}, //13170 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x8715}, //13171 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x892A}, //13172 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x9000}, //13173 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x541E}, //13174 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x5C6F}, //13175 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x81C0}, //13176 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0x62D6}, //13177 #CJK UNIFIED IDEOGRAPH + {0xCDD0, 0x6258}, //13178 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x8131}, //13179 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x9E35}, //13180 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x9640}, //13181 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x9A6E}, //13182 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x9A7C}, //13183 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x692D}, //13184 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x59A5}, //13185 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x62D3}, //13186 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x553E}, //13187 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x6316}, //13188 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x54C7}, //13189 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x86D9}, //13190 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x6D3C}, //13191 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x5A03}, //13192 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x74E6}, //13193 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x889C}, //13194 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x6B6A}, //13195 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x5916}, //13196 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x8C4C}, //13197 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x5F2F}, //13198 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x6E7E}, //13199 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x73A9}, //13200 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x987D}, //13201 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0x4E38}, //13202 #CJK UNIFIED IDEOGRAPH + {0xCDE9, 0x70F7}, //13203 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x5B8C}, //13204 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x7897}, //13205 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x633D}, //13206 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x665A}, //13207 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x7696}, //13208 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x60CB}, //13209 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x5B9B}, //13210 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x5A49}, //13211 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x4E07}, //13212 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x8155}, //13213 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x6C6A}, //13214 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x738B}, //13215 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x4EA1}, //13216 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x6789}, //13217 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x7F51}, //13218 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x5F80}, //13219 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x65FA}, //13220 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x671B}, //13221 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x5FD8}, //13222 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x5984}, //13223 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x5A01}, //13224 #CJK UNIFIED IDEOGRAPH + {0xCE40, 0x8719}, //13225 #CJK UNIFIED IDEOGRAPH + {0xCE41, 0x871B}, //13226 #CJK UNIFIED IDEOGRAPH + {0xCE42, 0x871D}, //13227 #CJK UNIFIED IDEOGRAPH + {0xCE43, 0x871F}, //13228 #CJK UNIFIED IDEOGRAPH + {0xCE44, 0x8720}, //13229 #CJK UNIFIED IDEOGRAPH + {0xCE45, 0x8724}, //13230 #CJK UNIFIED IDEOGRAPH + {0xCE46, 0x8726}, //13231 #CJK UNIFIED IDEOGRAPH + {0xCE47, 0x8727}, //13232 #CJK UNIFIED IDEOGRAPH + {0xCE48, 0x8728}, //13233 #CJK UNIFIED IDEOGRAPH + {0xCE49, 0x872A}, //13234 #CJK UNIFIED IDEOGRAPH + {0xCE4A, 0x872B}, //13235 #CJK UNIFIED IDEOGRAPH + {0xCE4B, 0x872C}, //13236 #CJK UNIFIED IDEOGRAPH + {0xCE4C, 0x872D}, //13237 #CJK UNIFIED IDEOGRAPH + {0xCE4D, 0x872F}, //13238 #CJK UNIFIED IDEOGRAPH + {0xCE4E, 0x8730}, //13239 #CJK UNIFIED IDEOGRAPH + {0xCE4F, 0x8732}, //13240 #CJK UNIFIED IDEOGRAPH + {0xCE50, 0x8733}, //13241 #CJK UNIFIED IDEOGRAPH + {0xCE51, 0x8735}, //13242 #CJK UNIFIED IDEOGRAPH + {0xCE52, 0x8736}, //13243 #CJK UNIFIED IDEOGRAPH + {0xCE53, 0x8738}, //13244 #CJK UNIFIED IDEOGRAPH + {0xCE54, 0x8739}, //13245 #CJK UNIFIED IDEOGRAPH + {0xCE55, 0x873A}, //13246 #CJK UNIFIED IDEOGRAPH + {0xCE56, 0x873C}, //13247 #CJK UNIFIED IDEOGRAPH + {0xCE57, 0x873D}, //13248 #CJK UNIFIED IDEOGRAPH + {0xCE58, 0x8740}, //13249 #CJK UNIFIED IDEOGRAPH + {0xCE59, 0x8741}, //13250 #CJK UNIFIED IDEOGRAPH + {0xCE5A, 0x8742}, //13251 #CJK UNIFIED IDEOGRAPH + {0xCE5B, 0x8743}, //13252 #CJK UNIFIED IDEOGRAPH + {0xCE5C, 0x8744}, //13253 #CJK UNIFIED IDEOGRAPH + {0xCE5D, 0x8745}, //13254 #CJK UNIFIED IDEOGRAPH + {0xCE5E, 0x8746}, //13255 #CJK UNIFIED IDEOGRAPH + {0xCE5F, 0x874A}, //13256 #CJK UNIFIED IDEOGRAPH + {0xCE60, 0x874B}, //13257 #CJK UNIFIED IDEOGRAPH + {0xCE61, 0x874D}, //13258 #CJK UNIFIED IDEOGRAPH + {0xCE62, 0x874F}, //13259 #CJK UNIFIED IDEOGRAPH + {0xCE63, 0x8750}, //13260 #CJK UNIFIED IDEOGRAPH + {0xCE64, 0x8751}, //13261 #CJK UNIFIED IDEOGRAPH + {0xCE65, 0x8752}, //13262 #CJK UNIFIED IDEOGRAPH + {0xCE66, 0x8754}, //13263 #CJK UNIFIED IDEOGRAPH + {0xCE67, 0x8755}, //13264 #CJK UNIFIED IDEOGRAPH + {0xCE68, 0x8756}, //13265 #CJK UNIFIED IDEOGRAPH + {0xCE69, 0x8758}, //13266 #CJK UNIFIED IDEOGRAPH + {0xCE6A, 0x875A}, //13267 #CJK UNIFIED IDEOGRAPH + {0xCE6B, 0x875B}, //13268 #CJK UNIFIED IDEOGRAPH + {0xCE6C, 0x875C}, //13269 #CJK UNIFIED IDEOGRAPH + {0xCE6D, 0x875D}, //13270 #CJK UNIFIED IDEOGRAPH + {0xCE6E, 0x875E}, //13271 #CJK UNIFIED IDEOGRAPH + {0xCE6F, 0x875F}, //13272 #CJK UNIFIED IDEOGRAPH + {0xCE70, 0x8761}, //13273 #CJK UNIFIED IDEOGRAPH + {0xCE71, 0x8762}, //13274 #CJK UNIFIED IDEOGRAPH + {0xCE72, 0x8766}, //13275 #CJK UNIFIED IDEOGRAPH + {0xCE73, 0x8767}, //13276 #CJK UNIFIED IDEOGRAPH + {0xCE74, 0x8768}, //13277 #CJK UNIFIED IDEOGRAPH + {0xCE75, 0x8769}, //13278 #CJK UNIFIED IDEOGRAPH + {0xCE76, 0x876A}, //13279 #CJK UNIFIED IDEOGRAPH + {0xCE77, 0x876B}, //13280 #CJK UNIFIED IDEOGRAPH + {0xCE78, 0x876C}, //13281 #CJK UNIFIED IDEOGRAPH + {0xCE79, 0x876D}, //13282 #CJK UNIFIED IDEOGRAPH + {0xCE7A, 0x876F}, //13283 #CJK UNIFIED IDEOGRAPH + {0xCE7B, 0x8771}, //13284 #CJK UNIFIED IDEOGRAPH + {0xCE7C, 0x8772}, //13285 #CJK UNIFIED IDEOGRAPH + {0xCE7D, 0x8773}, //13286 #CJK UNIFIED IDEOGRAPH + {0xCE7E, 0x8775}, //13287 #CJK UNIFIED IDEOGRAPH + {0xCE80, 0x8777}, //13288 #CJK UNIFIED IDEOGRAPH + {0xCE81, 0x8778}, //13289 #CJK UNIFIED IDEOGRAPH + {0xCE82, 0x8779}, //13290 #CJK UNIFIED IDEOGRAPH + {0xCE83, 0x877A}, //13291 #CJK UNIFIED IDEOGRAPH + {0xCE84, 0x877F}, //13292 #CJK UNIFIED IDEOGRAPH + {0xCE85, 0x8780}, //13293 #CJK UNIFIED IDEOGRAPH + {0xCE86, 0x8781}, //13294 #CJK UNIFIED IDEOGRAPH + {0xCE87, 0x8784}, //13295 #CJK UNIFIED IDEOGRAPH + {0xCE88, 0x8786}, //13296 #CJK UNIFIED IDEOGRAPH + {0xCE89, 0x8787}, //13297 #CJK UNIFIED IDEOGRAPH + {0xCE8A, 0x8789}, //13298 #CJK UNIFIED IDEOGRAPH + {0xCE8B, 0x878A}, //13299 #CJK UNIFIED IDEOGRAPH + {0xCE8C, 0x878C}, //13300 #CJK UNIFIED IDEOGRAPH + {0xCE8D, 0x878E}, //13301 #CJK UNIFIED IDEOGRAPH + {0xCE8E, 0x878F}, //13302 #CJK UNIFIED IDEOGRAPH + {0xCE8F, 0x8790}, //13303 #CJK UNIFIED IDEOGRAPH + {0xCE90, 0x8791}, //13304 #CJK UNIFIED IDEOGRAPH + {0xCE91, 0x8792}, //13305 #CJK UNIFIED IDEOGRAPH + {0xCE92, 0x8794}, //13306 #CJK UNIFIED IDEOGRAPH + {0xCE93, 0x8795}, //13307 #CJK UNIFIED IDEOGRAPH + {0xCE94, 0x8796}, //13308 #CJK UNIFIED IDEOGRAPH + {0xCE95, 0x8798}, //13309 #CJK UNIFIED IDEOGRAPH + {0xCE96, 0x8799}, //13310 #CJK UNIFIED IDEOGRAPH + {0xCE97, 0x879A}, //13311 #CJK UNIFIED IDEOGRAPH + {0xCE98, 0x879B}, //13312 #CJK UNIFIED IDEOGRAPH + {0xCE99, 0x879C}, //13313 #CJK UNIFIED IDEOGRAPH + {0xCE9A, 0x879D}, //13314 #CJK UNIFIED IDEOGRAPH + {0xCE9B, 0x879E}, //13315 #CJK UNIFIED IDEOGRAPH + {0xCE9C, 0x87A0}, //13316 #CJK UNIFIED IDEOGRAPH + {0xCE9D, 0x87A1}, //13317 #CJK UNIFIED IDEOGRAPH + {0xCE9E, 0x87A2}, //13318 #CJK UNIFIED IDEOGRAPH + {0xCE9F, 0x87A3}, //13319 #CJK UNIFIED IDEOGRAPH + {0xCEA0, 0x87A4}, //13320 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x5DCD}, //13321 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x5FAE}, //13322 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x5371}, //13323 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x97E6}, //13324 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x8FDD}, //13325 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x6845}, //13326 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x56F4}, //13327 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x552F}, //13328 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x60DF}, //13329 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x4E3A}, //13330 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x6F4D}, //13331 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x7EF4}, //13332 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0x82C7}, //13333 #CJK UNIFIED IDEOGRAPH + {0xCEAE, 0x840E}, //13334 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x59D4}, //13335 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x4F1F}, //13336 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x4F2A}, //13337 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x5C3E}, //13338 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x7EAC}, //13339 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x672A}, //13340 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x851A}, //13341 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x5473}, //13342 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x754F}, //13343 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x80C3}, //13344 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x5582}, //13345 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x9B4F}, //13346 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x4F4D}, //13347 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x6E2D}, //13348 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x8C13}, //13349 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x5C09}, //13350 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x6170}, //13351 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x536B}, //13352 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x761F}, //13353 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x6E29}, //13354 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x868A}, //13355 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x6587}, //13356 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x95FB}, //13357 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x7EB9}, //13358 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x543B}, //13359 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x7A33}, //13360 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x7D0A}, //13361 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x95EE}, //13362 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x55E1}, //13363 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x7FC1}, //13364 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x74EE}, //13365 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x631D}, //13366 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x8717}, //13367 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x6DA1}, //13368 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x7A9D}, //13369 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x6211}, //13370 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x65A1}, //13371 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x5367}, //13372 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x63E1}, //13373 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x6C83}, //13374 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x5DEB}, //13375 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x545C}, //13376 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x94A8}, //13377 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x4E4C}, //13378 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x6C61}, //13379 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x8BEC}, //13380 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x5C4B}, //13381 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x65E0}, //13382 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x829C}, //13383 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x68A7}, //13384 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x543E}, //13385 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x5434}, //13386 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x6BCB}, //13387 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x6B66}, //13388 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x4E94}, //13389 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x6342}, //13390 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x5348}, //13391 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x821E}, //13392 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x4F0D}, //13393 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x4FAE}, //13394 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x575E}, //13395 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x620A}, //13396 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x96FE}, //13397 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x6664}, //13398 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x7269}, //13399 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x52FF}, //13400 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x52A1}, //13401 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x609F}, //13402 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x8BEF}, //13403 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x6614}, //13404 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x7199}, //13405 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x6790}, //13406 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x897F}, //13407 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x7852}, //13408 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x77FD}, //13409 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x6670}, //13410 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x563B}, //13411 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x5438}, //13412 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x9521}, //13413 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x727A}, //13414 #CJK UNIFIED IDEOGRAPH + {0xCF40, 0x87A5}, //13415 #CJK UNIFIED IDEOGRAPH + {0xCF41, 0x87A6}, //13416 #CJK UNIFIED IDEOGRAPH + {0xCF42, 0x87A7}, //13417 #CJK UNIFIED IDEOGRAPH + {0xCF43, 0x87A9}, //13418 #CJK UNIFIED IDEOGRAPH + {0xCF44, 0x87AA}, //13419 #CJK UNIFIED IDEOGRAPH + {0xCF45, 0x87AE}, //13420 #CJK UNIFIED IDEOGRAPH + {0xCF46, 0x87B0}, //13421 #CJK UNIFIED IDEOGRAPH + {0xCF47, 0x87B1}, //13422 #CJK UNIFIED IDEOGRAPH + {0xCF48, 0x87B2}, //13423 #CJK UNIFIED IDEOGRAPH + {0xCF49, 0x87B4}, //13424 #CJK UNIFIED IDEOGRAPH + {0xCF4A, 0x87B6}, //13425 #CJK UNIFIED IDEOGRAPH + {0xCF4B, 0x87B7}, //13426 #CJK UNIFIED IDEOGRAPH + {0xCF4C, 0x87B8}, //13427 #CJK UNIFIED IDEOGRAPH + {0xCF4D, 0x87B9}, //13428 #CJK UNIFIED IDEOGRAPH + {0xCF4E, 0x87BB}, //13429 #CJK UNIFIED IDEOGRAPH + {0xCF4F, 0x87BC}, //13430 #CJK UNIFIED IDEOGRAPH + {0xCF50, 0x87BE}, //13431 #CJK UNIFIED IDEOGRAPH + {0xCF51, 0x87BF}, //13432 #CJK UNIFIED IDEOGRAPH + {0xCF52, 0x87C1}, //13433 #CJK UNIFIED IDEOGRAPH + {0xCF53, 0x87C2}, //13434 #CJK UNIFIED IDEOGRAPH + {0xCF54, 0x87C3}, //13435 #CJK UNIFIED IDEOGRAPH + {0xCF55, 0x87C4}, //13436 #CJK UNIFIED IDEOGRAPH + {0xCF56, 0x87C5}, //13437 #CJK UNIFIED IDEOGRAPH + {0xCF57, 0x87C7}, //13438 #CJK UNIFIED IDEOGRAPH + {0xCF58, 0x87C8}, //13439 #CJK UNIFIED IDEOGRAPH + {0xCF59, 0x87C9}, //13440 #CJK UNIFIED IDEOGRAPH + {0xCF5A, 0x87CC}, //13441 #CJK UNIFIED IDEOGRAPH + {0xCF5B, 0x87CD}, //13442 #CJK UNIFIED IDEOGRAPH + {0xCF5C, 0x87CE}, //13443 #CJK UNIFIED IDEOGRAPH + {0xCF5D, 0x87CF}, //13444 #CJK UNIFIED IDEOGRAPH + {0xCF5E, 0x87D0}, //13445 #CJK UNIFIED IDEOGRAPH + {0xCF5F, 0x87D4}, //13446 #CJK UNIFIED IDEOGRAPH + {0xCF60, 0x87D5}, //13447 #CJK UNIFIED IDEOGRAPH + {0xCF61, 0x87D6}, //13448 #CJK UNIFIED IDEOGRAPH + {0xCF62, 0x87D7}, //13449 #CJK UNIFIED IDEOGRAPH + {0xCF63, 0x87D8}, //13450 #CJK UNIFIED IDEOGRAPH + {0xCF64, 0x87D9}, //13451 #CJK UNIFIED IDEOGRAPH + {0xCF65, 0x87DA}, //13452 #CJK UNIFIED IDEOGRAPH + {0xCF66, 0x87DC}, //13453 #CJK UNIFIED IDEOGRAPH + {0xCF67, 0x87DD}, //13454 #CJK UNIFIED IDEOGRAPH + {0xCF68, 0x87DE}, //13455 #CJK UNIFIED IDEOGRAPH + {0xCF69, 0x87DF}, //13456 #CJK UNIFIED IDEOGRAPH + {0xCF6A, 0x87E1}, //13457 #CJK UNIFIED IDEOGRAPH + {0xCF6B, 0x87E2}, //13458 #CJK UNIFIED IDEOGRAPH + {0xCF6C, 0x87E3}, //13459 #CJK UNIFIED IDEOGRAPH + {0xCF6D, 0x87E4}, //13460 #CJK UNIFIED IDEOGRAPH + {0xCF6E, 0x87E6}, //13461 #CJK UNIFIED IDEOGRAPH + {0xCF6F, 0x87E7}, //13462 #CJK UNIFIED IDEOGRAPH + {0xCF70, 0x87E8}, //13463 #CJK UNIFIED IDEOGRAPH + {0xCF71, 0x87E9}, //13464 #CJK UNIFIED IDEOGRAPH + {0xCF72, 0x87EB}, //13465 #CJK UNIFIED IDEOGRAPH + {0xCF73, 0x87EC}, //13466 #CJK UNIFIED IDEOGRAPH + {0xCF74, 0x87ED}, //13467 #CJK UNIFIED IDEOGRAPH + {0xCF75, 0x87EF}, //13468 #CJK UNIFIED IDEOGRAPH + {0xCF76, 0x87F0}, //13469 #CJK UNIFIED IDEOGRAPH + {0xCF77, 0x87F1}, //13470 #CJK UNIFIED IDEOGRAPH + {0xCF78, 0x87F2}, //13471 #CJK UNIFIED IDEOGRAPH + {0xCF79, 0x87F3}, //13472 #CJK UNIFIED IDEOGRAPH + {0xCF7A, 0x87F4}, //13473 #CJK UNIFIED IDEOGRAPH + {0xCF7B, 0x87F5}, //13474 #CJK UNIFIED IDEOGRAPH + {0xCF7C, 0x87F6}, //13475 #CJK UNIFIED IDEOGRAPH + {0xCF7D, 0x87F7}, //13476 #CJK UNIFIED IDEOGRAPH + {0xCF7E, 0x87F8}, //13477 #CJK UNIFIED IDEOGRAPH + {0xCF80, 0x87FA}, //13478 #CJK UNIFIED IDEOGRAPH + {0xCF81, 0x87FB}, //13479 #CJK UNIFIED IDEOGRAPH + {0xCF82, 0x87FC}, //13480 #CJK UNIFIED IDEOGRAPH + {0xCF83, 0x87FD}, //13481 #CJK UNIFIED IDEOGRAPH + {0xCF84, 0x87FF}, //13482 #CJK UNIFIED IDEOGRAPH + {0xCF85, 0x8800}, //13483 #CJK UNIFIED IDEOGRAPH + {0xCF86, 0x8801}, //13484 #CJK UNIFIED IDEOGRAPH + {0xCF87, 0x8802}, //13485 #CJK UNIFIED IDEOGRAPH + {0xCF88, 0x8804}, //13486 #CJK UNIFIED IDEOGRAPH + {0xCF89, 0x8805}, //13487 #CJK UNIFIED IDEOGRAPH + {0xCF8A, 0x8806}, //13488 #CJK UNIFIED IDEOGRAPH + {0xCF8B, 0x8807}, //13489 #CJK UNIFIED IDEOGRAPH + {0xCF8C, 0x8808}, //13490 #CJK UNIFIED IDEOGRAPH + {0xCF8D, 0x8809}, //13491 #CJK UNIFIED IDEOGRAPH + {0xCF8E, 0x880B}, //13492 #CJK UNIFIED IDEOGRAPH + {0xCF8F, 0x880C}, //13493 #CJK UNIFIED IDEOGRAPH + {0xCF90, 0x880D}, //13494 #CJK UNIFIED IDEOGRAPH + {0xCF91, 0x880E}, //13495 #CJK UNIFIED IDEOGRAPH + {0xCF92, 0x880F}, //13496 #CJK UNIFIED IDEOGRAPH + {0xCF93, 0x8810}, //13497 #CJK UNIFIED IDEOGRAPH + {0xCF94, 0x8811}, //13498 #CJK UNIFIED IDEOGRAPH + {0xCF95, 0x8812}, //13499 #CJK UNIFIED IDEOGRAPH + {0xCF96, 0x8814}, //13500 #CJK UNIFIED IDEOGRAPH + {0xCF97, 0x8817}, //13501 #CJK UNIFIED IDEOGRAPH + {0xCF98, 0x8818}, //13502 #CJK UNIFIED IDEOGRAPH + {0xCF99, 0x8819}, //13503 #CJK UNIFIED IDEOGRAPH + {0xCF9A, 0x881A}, //13504 #CJK UNIFIED IDEOGRAPH + {0xCF9B, 0x881C}, //13505 #CJK UNIFIED IDEOGRAPH + {0xCF9C, 0x881D}, //13506 #CJK UNIFIED IDEOGRAPH + {0xCF9D, 0x881E}, //13507 #CJK UNIFIED IDEOGRAPH + {0xCF9E, 0x881F}, //13508 #CJK UNIFIED IDEOGRAPH + {0xCF9F, 0x8820}, //13509 #CJK UNIFIED IDEOGRAPH + {0xCFA0, 0x8823}, //13510 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x7A00}, //13511 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x606F}, //13512 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x5E0C}, //13513 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x6089}, //13514 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x819D}, //13515 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x5915}, //13516 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x60DC}, //13517 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x7184}, //13518 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x70EF}, //13519 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x6EAA}, //13520 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x6C50}, //13521 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x7280}, //13522 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6A84}, //13523 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x88AD}, //13524 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x5E2D}, //13525 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x4E60}, //13526 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x5AB3}, //13527 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x559C}, //13528 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x94E3}, //13529 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x6D17}, //13530 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x7CFB}, //13531 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x9699}, //13532 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x620F}, //13533 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7EC6}, //13534 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x778E}, //13535 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x867E}, //13536 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x5323}, //13537 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x971E}, //13538 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x8F96}, //13539 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x6687}, //13540 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x5CE1}, //13541 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x4FA0}, //13542 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x72ED}, //13543 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x4E0B}, //13544 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x53A6}, //13545 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x590F}, //13546 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x5413}, //13547 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x6380}, //13548 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x9528}, //13549 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x5148}, //13550 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x4ED9}, //13551 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x9C9C}, //13552 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x7EA4}, //13553 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x54B8}, //13554 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x8D24}, //13555 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x8854}, //13556 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x8237}, //13557 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x95F2}, //13558 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x6D8E}, //13559 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x5F26}, //13560 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x5ACC}, //13561 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x663E}, //13562 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x9669}, //13563 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x73B0}, //13564 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x732E}, //13565 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x53BF}, //13566 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x817A}, //13567 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x9985}, //13568 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x7FA1}, //13569 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x5BAA}, //13570 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x9677}, //13571 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x9650}, //13572 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x7EBF}, //13573 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x76F8}, //13574 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x53A2}, //13575 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x9576}, //13576 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x9999}, //13577 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x7BB1}, //13578 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x8944}, //13579 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x6E58}, //13580 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x4E61}, //13581 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x7FD4}, //13582 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x7965}, //13583 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x8BE6}, //13584 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x60F3}, //13585 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x54CD}, //13586 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x4EAB}, //13587 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x9879}, //13588 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x5DF7}, //13589 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x6A61}, //13590 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x50CF}, //13591 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x5411}, //13592 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x8C61}, //13593 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x8427}, //13594 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x785D}, //13595 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x9704}, //13596 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x524A}, //13597 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x54EE}, //13598 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x56A3}, //13599 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x9500}, //13600 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0x6D88}, //13601 #CJK UNIFIED IDEOGRAPH + {0xCFFC, 0x5BB5}, //13602 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x6DC6}, //13603 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x6653}, //13604 #CJK UNIFIED IDEOGRAPH + {0xD040, 0x8824}, //13605 #CJK UNIFIED IDEOGRAPH + {0xD041, 0x8825}, //13606 #CJK UNIFIED IDEOGRAPH + {0xD042, 0x8826}, //13607 #CJK UNIFIED IDEOGRAPH + {0xD043, 0x8827}, //13608 #CJK UNIFIED IDEOGRAPH + {0xD044, 0x8828}, //13609 #CJK UNIFIED IDEOGRAPH + {0xD045, 0x8829}, //13610 #CJK UNIFIED IDEOGRAPH + {0xD046, 0x882A}, //13611 #CJK UNIFIED IDEOGRAPH + {0xD047, 0x882B}, //13612 #CJK UNIFIED IDEOGRAPH + {0xD048, 0x882C}, //13613 #CJK UNIFIED IDEOGRAPH + {0xD049, 0x882D}, //13614 #CJK UNIFIED IDEOGRAPH + {0xD04A, 0x882E}, //13615 #CJK UNIFIED IDEOGRAPH + {0xD04B, 0x882F}, //13616 #CJK UNIFIED IDEOGRAPH + {0xD04C, 0x8830}, //13617 #CJK UNIFIED IDEOGRAPH + {0xD04D, 0x8831}, //13618 #CJK UNIFIED IDEOGRAPH + {0xD04E, 0x8833}, //13619 #CJK UNIFIED IDEOGRAPH + {0xD04F, 0x8834}, //13620 #CJK UNIFIED IDEOGRAPH + {0xD050, 0x8835}, //13621 #CJK UNIFIED IDEOGRAPH + {0xD051, 0x8836}, //13622 #CJK UNIFIED IDEOGRAPH + {0xD052, 0x8837}, //13623 #CJK UNIFIED IDEOGRAPH + {0xD053, 0x8838}, //13624 #CJK UNIFIED IDEOGRAPH + {0xD054, 0x883A}, //13625 #CJK UNIFIED IDEOGRAPH + {0xD055, 0x883B}, //13626 #CJK UNIFIED IDEOGRAPH + {0xD056, 0x883D}, //13627 #CJK UNIFIED IDEOGRAPH + {0xD057, 0x883E}, //13628 #CJK UNIFIED IDEOGRAPH + {0xD058, 0x883F}, //13629 #CJK UNIFIED IDEOGRAPH + {0xD059, 0x8841}, //13630 #CJK UNIFIED IDEOGRAPH + {0xD05A, 0x8842}, //13631 #CJK UNIFIED IDEOGRAPH + {0xD05B, 0x8843}, //13632 #CJK UNIFIED IDEOGRAPH + {0xD05C, 0x8846}, //13633 #CJK UNIFIED IDEOGRAPH + {0xD05D, 0x8847}, //13634 #CJK UNIFIED IDEOGRAPH + {0xD05E, 0x8848}, //13635 #CJK UNIFIED IDEOGRAPH + {0xD05F, 0x8849}, //13636 #CJK UNIFIED IDEOGRAPH + {0xD060, 0x884A}, //13637 #CJK UNIFIED IDEOGRAPH + {0xD061, 0x884B}, //13638 #CJK UNIFIED IDEOGRAPH + {0xD062, 0x884E}, //13639 #CJK UNIFIED IDEOGRAPH + {0xD063, 0x884F}, //13640 #CJK UNIFIED IDEOGRAPH + {0xD064, 0x8850}, //13641 #CJK UNIFIED IDEOGRAPH + {0xD065, 0x8851}, //13642 #CJK UNIFIED IDEOGRAPH + {0xD066, 0x8852}, //13643 #CJK UNIFIED IDEOGRAPH + {0xD067, 0x8853}, //13644 #CJK UNIFIED IDEOGRAPH + {0xD068, 0x8855}, //13645 #CJK UNIFIED IDEOGRAPH + {0xD069, 0x8856}, //13646 #CJK UNIFIED IDEOGRAPH + {0xD06A, 0x8858}, //13647 #CJK UNIFIED IDEOGRAPH + {0xD06B, 0x885A}, //13648 #CJK UNIFIED IDEOGRAPH + {0xD06C, 0x885B}, //13649 #CJK UNIFIED IDEOGRAPH + {0xD06D, 0x885C}, //13650 #CJK UNIFIED IDEOGRAPH + {0xD06E, 0x885D}, //13651 #CJK UNIFIED IDEOGRAPH + {0xD06F, 0x885E}, //13652 #CJK UNIFIED IDEOGRAPH + {0xD070, 0x885F}, //13653 #CJK UNIFIED IDEOGRAPH + {0xD071, 0x8860}, //13654 #CJK UNIFIED IDEOGRAPH + {0xD072, 0x8866}, //13655 #CJK UNIFIED IDEOGRAPH + {0xD073, 0x8867}, //13656 #CJK UNIFIED IDEOGRAPH + {0xD074, 0x886A}, //13657 #CJK UNIFIED IDEOGRAPH + {0xD075, 0x886D}, //13658 #CJK UNIFIED IDEOGRAPH + {0xD076, 0x886F}, //13659 #CJK UNIFIED IDEOGRAPH + {0xD077, 0x8871}, //13660 #CJK UNIFIED IDEOGRAPH + {0xD078, 0x8873}, //13661 #CJK UNIFIED IDEOGRAPH + {0xD079, 0x8874}, //13662 #CJK UNIFIED IDEOGRAPH + {0xD07A, 0x8875}, //13663 #CJK UNIFIED IDEOGRAPH + {0xD07B, 0x8876}, //13664 #CJK UNIFIED IDEOGRAPH + {0xD07C, 0x8878}, //13665 #CJK UNIFIED IDEOGRAPH + {0xD07D, 0x8879}, //13666 #CJK UNIFIED IDEOGRAPH + {0xD07E, 0x887A}, //13667 #CJK UNIFIED IDEOGRAPH + {0xD080, 0x887B}, //13668 #CJK UNIFIED IDEOGRAPH + {0xD081, 0x887C}, //13669 #CJK UNIFIED IDEOGRAPH + {0xD082, 0x8880}, //13670 #CJK UNIFIED IDEOGRAPH + {0xD083, 0x8883}, //13671 #CJK UNIFIED IDEOGRAPH + {0xD084, 0x8886}, //13672 #CJK UNIFIED IDEOGRAPH + {0xD085, 0x8887}, //13673 #CJK UNIFIED IDEOGRAPH + {0xD086, 0x8889}, //13674 #CJK UNIFIED IDEOGRAPH + {0xD087, 0x888A}, //13675 #CJK UNIFIED IDEOGRAPH + {0xD088, 0x888C}, //13676 #CJK UNIFIED IDEOGRAPH + {0xD089, 0x888E}, //13677 #CJK UNIFIED IDEOGRAPH + {0xD08A, 0x888F}, //13678 #CJK UNIFIED IDEOGRAPH + {0xD08B, 0x8890}, //13679 #CJK UNIFIED IDEOGRAPH + {0xD08C, 0x8891}, //13680 #CJK UNIFIED IDEOGRAPH + {0xD08D, 0x8893}, //13681 #CJK UNIFIED IDEOGRAPH + {0xD08E, 0x8894}, //13682 #CJK UNIFIED IDEOGRAPH + {0xD08F, 0x8895}, //13683 #CJK UNIFIED IDEOGRAPH + {0xD090, 0x8897}, //13684 #CJK UNIFIED IDEOGRAPH + {0xD091, 0x8898}, //13685 #CJK UNIFIED IDEOGRAPH + {0xD092, 0x8899}, //13686 #CJK UNIFIED IDEOGRAPH + {0xD093, 0x889A}, //13687 #CJK UNIFIED IDEOGRAPH + {0xD094, 0x889B}, //13688 #CJK UNIFIED IDEOGRAPH + {0xD095, 0x889D}, //13689 #CJK UNIFIED IDEOGRAPH + {0xD096, 0x889E}, //13690 #CJK UNIFIED IDEOGRAPH + {0xD097, 0x889F}, //13691 #CJK UNIFIED IDEOGRAPH + {0xD098, 0x88A0}, //13692 #CJK UNIFIED IDEOGRAPH + {0xD099, 0x88A1}, //13693 #CJK UNIFIED IDEOGRAPH + {0xD09A, 0x88A3}, //13694 #CJK UNIFIED IDEOGRAPH + {0xD09B, 0x88A5}, //13695 #CJK UNIFIED IDEOGRAPH + {0xD09C, 0x88A6}, //13696 #CJK UNIFIED IDEOGRAPH + {0xD09D, 0x88A7}, //13697 #CJK UNIFIED IDEOGRAPH + {0xD09E, 0x88A8}, //13698 #CJK UNIFIED IDEOGRAPH + {0xD09F, 0x88A9}, //13699 #CJK UNIFIED IDEOGRAPH + {0xD0A0, 0x88AA}, //13700 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x5C0F}, //13701 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0x5B5D}, //13702 #CJK UNIFIED IDEOGRAPH + {0xD0A3, 0x6821}, //13703 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x8096}, //13704 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x5578}, //13705 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x7B11}, //13706 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x6548}, //13707 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x6954}, //13708 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x4E9B}, //13709 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x6B47}, //13710 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x874E}, //13711 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x978B}, //13712 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x534F}, //13713 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x631F}, //13714 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x643A}, //13715 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x90AA}, //13716 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x659C}, //13717 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x80C1}, //13718 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x8C10}, //13719 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x5199}, //13720 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x68B0}, //13721 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x5378}, //13722 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x87F9}, //13723 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0x61C8}, //13724 #CJK UNIFIED IDEOGRAPH + {0xD0B9, 0x6CC4}, //13725 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x6CFB}, //13726 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x8C22}, //13727 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x5C51}, //13728 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x85AA}, //13729 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x82AF}, //13730 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x950C}, //13731 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x6B23}, //13732 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x8F9B}, //13733 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x65B0}, //13734 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x5FFB}, //13735 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x5FC3}, //13736 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x4FE1}, //13737 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x8845}, //13738 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x661F}, //13739 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x8165}, //13740 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x7329}, //13741 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x60FA}, //13742 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x5174}, //13743 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x5211}, //13744 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x578B}, //13745 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x5F62}, //13746 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x90A2}, //13747 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0x884C}, //13748 #CJK UNIFIED IDEOGRAPH + {0xD0D1, 0x9192}, //13749 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5E78}, //13750 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x674F}, //13751 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x6027}, //13752 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x59D3}, //13753 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x5144}, //13754 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x51F6}, //13755 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x80F8}, //13756 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x5308}, //13757 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x6C79}, //13758 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x96C4}, //13759 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x718A}, //13760 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0x4F11}, //13761 #CJK UNIFIED IDEOGRAPH + {0xD0DE, 0x4FEE}, //13762 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x7F9E}, //13763 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x673D}, //13764 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x55C5}, //13765 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x9508}, //13766 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x79C0}, //13767 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x8896}, //13768 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x7EE3}, //13769 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x589F}, //13770 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x620C}, //13771 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x9700}, //13772 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x865A}, //13773 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x5618}, //13774 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x987B}, //13775 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5F90}, //13776 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x8BB8}, //13777 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x84C4}, //13778 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x9157}, //13779 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x53D9}, //13780 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x65ED}, //13781 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x5E8F}, //13782 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x755C}, //13783 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x6064}, //13784 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x7D6E}, //13785 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x5A7F}, //13786 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x7EEA}, //13787 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x7EED}, //13788 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x8F69}, //13789 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x55A7}, //13790 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x5BA3}, //13791 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x60AC}, //13792 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x65CB}, //13793 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x7384}, //13794 #CJK UNIFIED IDEOGRAPH + {0xD140, 0x88AC}, //13795 #CJK UNIFIED IDEOGRAPH + {0xD141, 0x88AE}, //13796 #CJK UNIFIED IDEOGRAPH + {0xD142, 0x88AF}, //13797 #CJK UNIFIED IDEOGRAPH + {0xD143, 0x88B0}, //13798 #CJK UNIFIED IDEOGRAPH + {0xD144, 0x88B2}, //13799 #CJK UNIFIED IDEOGRAPH + {0xD145, 0x88B3}, //13800 #CJK UNIFIED IDEOGRAPH + {0xD146, 0x88B4}, //13801 #CJK UNIFIED IDEOGRAPH + {0xD147, 0x88B5}, //13802 #CJK UNIFIED IDEOGRAPH + {0xD148, 0x88B6}, //13803 #CJK UNIFIED IDEOGRAPH + {0xD149, 0x88B8}, //13804 #CJK UNIFIED IDEOGRAPH + {0xD14A, 0x88B9}, //13805 #CJK UNIFIED IDEOGRAPH + {0xD14B, 0x88BA}, //13806 #CJK UNIFIED IDEOGRAPH + {0xD14C, 0x88BB}, //13807 #CJK UNIFIED IDEOGRAPH + {0xD14D, 0x88BD}, //13808 #CJK UNIFIED IDEOGRAPH + {0xD14E, 0x88BE}, //13809 #CJK UNIFIED IDEOGRAPH + {0xD14F, 0x88BF}, //13810 #CJK UNIFIED IDEOGRAPH + {0xD150, 0x88C0}, //13811 #CJK UNIFIED IDEOGRAPH + {0xD151, 0x88C3}, //13812 #CJK UNIFIED IDEOGRAPH + {0xD152, 0x88C4}, //13813 #CJK UNIFIED IDEOGRAPH + {0xD153, 0x88C7}, //13814 #CJK UNIFIED IDEOGRAPH + {0xD154, 0x88C8}, //13815 #CJK UNIFIED IDEOGRAPH + {0xD155, 0x88CA}, //13816 #CJK UNIFIED IDEOGRAPH + {0xD156, 0x88CB}, //13817 #CJK UNIFIED IDEOGRAPH + {0xD157, 0x88CC}, //13818 #CJK UNIFIED IDEOGRAPH + {0xD158, 0x88CD}, //13819 #CJK UNIFIED IDEOGRAPH + {0xD159, 0x88CF}, //13820 #CJK UNIFIED IDEOGRAPH + {0xD15A, 0x88D0}, //13821 #CJK UNIFIED IDEOGRAPH + {0xD15B, 0x88D1}, //13822 #CJK UNIFIED IDEOGRAPH + {0xD15C, 0x88D3}, //13823 #CJK UNIFIED IDEOGRAPH + {0xD15D, 0x88D6}, //13824 #CJK UNIFIED IDEOGRAPH + {0xD15E, 0x88D7}, //13825 #CJK UNIFIED IDEOGRAPH + {0xD15F, 0x88DA}, //13826 #CJK UNIFIED IDEOGRAPH + {0xD160, 0x88DB}, //13827 #CJK UNIFIED IDEOGRAPH + {0xD161, 0x88DC}, //13828 #CJK UNIFIED IDEOGRAPH + {0xD162, 0x88DD}, //13829 #CJK UNIFIED IDEOGRAPH + {0xD163, 0x88DE}, //13830 #CJK UNIFIED IDEOGRAPH + {0xD164, 0x88E0}, //13831 #CJK UNIFIED IDEOGRAPH + {0xD165, 0x88E1}, //13832 #CJK UNIFIED IDEOGRAPH + {0xD166, 0x88E6}, //13833 #CJK UNIFIED IDEOGRAPH + {0xD167, 0x88E7}, //13834 #CJK UNIFIED IDEOGRAPH + {0xD168, 0x88E9}, //13835 #CJK UNIFIED IDEOGRAPH + {0xD169, 0x88EA}, //13836 #CJK UNIFIED IDEOGRAPH + {0xD16A, 0x88EB}, //13837 #CJK UNIFIED IDEOGRAPH + {0xD16B, 0x88EC}, //13838 #CJK UNIFIED IDEOGRAPH + {0xD16C, 0x88ED}, //13839 #CJK UNIFIED IDEOGRAPH + {0xD16D, 0x88EE}, //13840 #CJK UNIFIED IDEOGRAPH + {0xD16E, 0x88EF}, //13841 #CJK UNIFIED IDEOGRAPH + {0xD16F, 0x88F2}, //13842 #CJK UNIFIED IDEOGRAPH + {0xD170, 0x88F5}, //13843 #CJK UNIFIED IDEOGRAPH + {0xD171, 0x88F6}, //13844 #CJK UNIFIED IDEOGRAPH + {0xD172, 0x88F7}, //13845 #CJK UNIFIED IDEOGRAPH + {0xD173, 0x88FA}, //13846 #CJK UNIFIED IDEOGRAPH + {0xD174, 0x88FB}, //13847 #CJK UNIFIED IDEOGRAPH + {0xD175, 0x88FD}, //13848 #CJK UNIFIED IDEOGRAPH + {0xD176, 0x88FF}, //13849 #CJK UNIFIED IDEOGRAPH + {0xD177, 0x8900}, //13850 #CJK UNIFIED IDEOGRAPH + {0xD178, 0x8901}, //13851 #CJK UNIFIED IDEOGRAPH + {0xD179, 0x8903}, //13852 #CJK UNIFIED IDEOGRAPH + {0xD17A, 0x8904}, //13853 #CJK UNIFIED IDEOGRAPH + {0xD17B, 0x8905}, //13854 #CJK UNIFIED IDEOGRAPH + {0xD17C, 0x8906}, //13855 #CJK UNIFIED IDEOGRAPH + {0xD17D, 0x8907}, //13856 #CJK UNIFIED IDEOGRAPH + {0xD17E, 0x8908}, //13857 #CJK UNIFIED IDEOGRAPH + {0xD180, 0x8909}, //13858 #CJK UNIFIED IDEOGRAPH + {0xD181, 0x890B}, //13859 #CJK UNIFIED IDEOGRAPH + {0xD182, 0x890C}, //13860 #CJK UNIFIED IDEOGRAPH + {0xD183, 0x890D}, //13861 #CJK UNIFIED IDEOGRAPH + {0xD184, 0x890E}, //13862 #CJK UNIFIED IDEOGRAPH + {0xD185, 0x890F}, //13863 #CJK UNIFIED IDEOGRAPH + {0xD186, 0x8911}, //13864 #CJK UNIFIED IDEOGRAPH + {0xD187, 0x8914}, //13865 #CJK UNIFIED IDEOGRAPH + {0xD188, 0x8915}, //13866 #CJK UNIFIED IDEOGRAPH + {0xD189, 0x8916}, //13867 #CJK UNIFIED IDEOGRAPH + {0xD18A, 0x8917}, //13868 #CJK UNIFIED IDEOGRAPH + {0xD18B, 0x8918}, //13869 #CJK UNIFIED IDEOGRAPH + {0xD18C, 0x891C}, //13870 #CJK UNIFIED IDEOGRAPH + {0xD18D, 0x891D}, //13871 #CJK UNIFIED IDEOGRAPH + {0xD18E, 0x891E}, //13872 #CJK UNIFIED IDEOGRAPH + {0xD18F, 0x891F}, //13873 #CJK UNIFIED IDEOGRAPH + {0xD190, 0x8920}, //13874 #CJK UNIFIED IDEOGRAPH + {0xD191, 0x8922}, //13875 #CJK UNIFIED IDEOGRAPH + {0xD192, 0x8923}, //13876 #CJK UNIFIED IDEOGRAPH + {0xD193, 0x8924}, //13877 #CJK UNIFIED IDEOGRAPH + {0xD194, 0x8926}, //13878 #CJK UNIFIED IDEOGRAPH + {0xD195, 0x8927}, //13879 #CJK UNIFIED IDEOGRAPH + {0xD196, 0x8928}, //13880 #CJK UNIFIED IDEOGRAPH + {0xD197, 0x8929}, //13881 #CJK UNIFIED IDEOGRAPH + {0xD198, 0x892C}, //13882 #CJK UNIFIED IDEOGRAPH + {0xD199, 0x892D}, //13883 #CJK UNIFIED IDEOGRAPH + {0xD19A, 0x892E}, //13884 #CJK UNIFIED IDEOGRAPH + {0xD19B, 0x892F}, //13885 #CJK UNIFIED IDEOGRAPH + {0xD19C, 0x8931}, //13886 #CJK UNIFIED IDEOGRAPH + {0xD19D, 0x8932}, //13887 #CJK UNIFIED IDEOGRAPH + {0xD19E, 0x8933}, //13888 #CJK UNIFIED IDEOGRAPH + {0xD19F, 0x8935}, //13889 #CJK UNIFIED IDEOGRAPH + {0xD1A0, 0x8937}, //13890 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x9009}, //13891 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x7663}, //13892 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x7729}, //13893 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x7EDA}, //13894 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x9774}, //13895 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x859B}, //13896 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x5B66}, //13897 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x7A74}, //13898 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x96EA}, //13899 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x8840}, //13900 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x52CB}, //13901 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x718F}, //13902 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x5FAA}, //13903 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x65EC}, //13904 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x8BE2}, //13905 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x5BFB}, //13906 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x9A6F}, //13907 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x5DE1}, //13908 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x6B89}, //13909 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x6C5B}, //13910 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x8BAD}, //13911 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x8BAF}, //13912 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x900A}, //13913 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x8FC5}, //13914 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x538B}, //13915 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x62BC}, //13916 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x9E26}, //13917 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x9E2D}, //13918 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x5440}, //13919 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x4E2B}, //13920 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x82BD}, //13921 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x7259}, //13922 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x869C}, //13923 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x5D16}, //13924 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x8859}, //13925 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x6DAF}, //13926 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x96C5}, //13927 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x54D1}, //13928 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x4E9A}, //13929 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x8BB6}, //13930 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x7109}, //13931 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x54BD}, //13932 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x9609}, //13933 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x70DF}, //13934 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x6DF9}, //13935 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x76D0}, //13936 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x4E25}, //13937 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x7814}, //13938 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x8712}, //13939 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x5CA9}, //13940 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x5EF6}, //13941 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0x8A00}, //13942 #CJK UNIFIED IDEOGRAPH + {0xD1D5, 0x989C}, //13943 #CJK UNIFIED IDEOGRAPH + {0xD1D6, 0x960E}, //13944 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x708E}, //13945 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0x6CBF}, //13946 #CJK UNIFIED IDEOGRAPH + {0xD1D9, 0x5944}, //13947 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x63A9}, //13948 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0x773C}, //13949 #CJK UNIFIED IDEOGRAPH + {0xD1DC, 0x884D}, //13950 #CJK UNIFIED IDEOGRAPH + {0xD1DD, 0x6F14}, //13951 #CJK UNIFIED IDEOGRAPH + {0xD1DE, 0x8273}, //13952 #CJK UNIFIED IDEOGRAPH + {0xD1DF, 0x5830}, //13953 #CJK UNIFIED IDEOGRAPH + {0xD1E0, 0x71D5}, //13954 #CJK UNIFIED IDEOGRAPH + {0xD1E1, 0x538C}, //13955 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0x781A}, //13956 #CJK UNIFIED IDEOGRAPH + {0xD1E3, 0x96C1}, //13957 #CJK UNIFIED IDEOGRAPH + {0xD1E4, 0x5501}, //13958 #CJK UNIFIED IDEOGRAPH + {0xD1E5, 0x5F66}, //13959 #CJK UNIFIED IDEOGRAPH + {0xD1E6, 0x7130}, //13960 #CJK UNIFIED IDEOGRAPH + {0xD1E7, 0x5BB4}, //13961 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0x8C1A}, //13962 #CJK UNIFIED IDEOGRAPH + {0xD1E9, 0x9A8C}, //13963 #CJK UNIFIED IDEOGRAPH + {0xD1EA, 0x6B83}, //13964 #CJK UNIFIED IDEOGRAPH + {0xD1EB, 0x592E}, //13965 #CJK UNIFIED IDEOGRAPH + {0xD1EC, 0x9E2F}, //13966 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0x79E7}, //13967 #CJK UNIFIED IDEOGRAPH + {0xD1EE, 0x6768}, //13968 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0x626C}, //13969 #CJK UNIFIED IDEOGRAPH + {0xD1F0, 0x4F6F}, //13970 #CJK UNIFIED IDEOGRAPH + {0xD1F1, 0x75A1}, //13971 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0x7F8A}, //13972 #CJK UNIFIED IDEOGRAPH + {0xD1F3, 0x6D0B}, //13973 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x9633}, //13974 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x6C27}, //13975 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0x4EF0}, //13976 #CJK UNIFIED IDEOGRAPH + {0xD1F7, 0x75D2}, //13977 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x517B}, //13978 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6837}, //13979 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0x6F3E}, //13980 #CJK UNIFIED IDEOGRAPH + {0xD1FB, 0x9080}, //13981 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0x8170}, //13982 #CJK UNIFIED IDEOGRAPH + {0xD1FD, 0x5996}, //13983 #CJK UNIFIED IDEOGRAPH + {0xD1FE, 0x7476}, //13984 #CJK UNIFIED IDEOGRAPH + {0xD240, 0x8938}, //13985 #CJK UNIFIED IDEOGRAPH + {0xD241, 0x8939}, //13986 #CJK UNIFIED IDEOGRAPH + {0xD242, 0x893A}, //13987 #CJK UNIFIED IDEOGRAPH + {0xD243, 0x893B}, //13988 #CJK UNIFIED IDEOGRAPH + {0xD244, 0x893C}, //13989 #CJK UNIFIED IDEOGRAPH + {0xD245, 0x893D}, //13990 #CJK UNIFIED IDEOGRAPH + {0xD246, 0x893E}, //13991 #CJK UNIFIED IDEOGRAPH + {0xD247, 0x893F}, //13992 #CJK UNIFIED IDEOGRAPH + {0xD248, 0x8940}, //13993 #CJK UNIFIED IDEOGRAPH + {0xD249, 0x8942}, //13994 #CJK UNIFIED IDEOGRAPH + {0xD24A, 0x8943}, //13995 #CJK UNIFIED IDEOGRAPH + {0xD24B, 0x8945}, //13996 #CJK UNIFIED IDEOGRAPH + {0xD24C, 0x8946}, //13997 #CJK UNIFIED IDEOGRAPH + {0xD24D, 0x8947}, //13998 #CJK UNIFIED IDEOGRAPH + {0xD24E, 0x8948}, //13999 #CJK UNIFIED IDEOGRAPH + {0xD24F, 0x8949}, //14000 #CJK UNIFIED IDEOGRAPH + {0xD250, 0x894A}, //14001 #CJK UNIFIED IDEOGRAPH + {0xD251, 0x894B}, //14002 #CJK UNIFIED IDEOGRAPH + {0xD252, 0x894C}, //14003 #CJK UNIFIED IDEOGRAPH + {0xD253, 0x894D}, //14004 #CJK UNIFIED IDEOGRAPH + {0xD254, 0x894E}, //14005 #CJK UNIFIED IDEOGRAPH + {0xD255, 0x894F}, //14006 #CJK UNIFIED IDEOGRAPH + {0xD256, 0x8950}, //14007 #CJK UNIFIED IDEOGRAPH + {0xD257, 0x8951}, //14008 #CJK UNIFIED IDEOGRAPH + {0xD258, 0x8952}, //14009 #CJK UNIFIED IDEOGRAPH + {0xD259, 0x8953}, //14010 #CJK UNIFIED IDEOGRAPH + {0xD25A, 0x8954}, //14011 #CJK UNIFIED IDEOGRAPH + {0xD25B, 0x8955}, //14012 #CJK UNIFIED IDEOGRAPH + {0xD25C, 0x8956}, //14013 #CJK UNIFIED IDEOGRAPH + {0xD25D, 0x8957}, //14014 #CJK UNIFIED IDEOGRAPH + {0xD25E, 0x8958}, //14015 #CJK UNIFIED IDEOGRAPH + {0xD25F, 0x8959}, //14016 #CJK UNIFIED IDEOGRAPH + {0xD260, 0x895A}, //14017 #CJK UNIFIED IDEOGRAPH + {0xD261, 0x895B}, //14018 #CJK UNIFIED IDEOGRAPH + {0xD262, 0x895C}, //14019 #CJK UNIFIED IDEOGRAPH + {0xD263, 0x895D}, //14020 #CJK UNIFIED IDEOGRAPH + {0xD264, 0x8960}, //14021 #CJK UNIFIED IDEOGRAPH + {0xD265, 0x8961}, //14022 #CJK UNIFIED IDEOGRAPH + {0xD266, 0x8962}, //14023 #CJK UNIFIED IDEOGRAPH + {0xD267, 0x8963}, //14024 #CJK UNIFIED IDEOGRAPH + {0xD268, 0x8964}, //14025 #CJK UNIFIED IDEOGRAPH + {0xD269, 0x8965}, //14026 #CJK UNIFIED IDEOGRAPH + {0xD26A, 0x8967}, //14027 #CJK UNIFIED IDEOGRAPH + {0xD26B, 0x8968}, //14028 #CJK UNIFIED IDEOGRAPH + {0xD26C, 0x8969}, //14029 #CJK UNIFIED IDEOGRAPH + {0xD26D, 0x896A}, //14030 #CJK UNIFIED IDEOGRAPH + {0xD26E, 0x896B}, //14031 #CJK UNIFIED IDEOGRAPH + {0xD26F, 0x896C}, //14032 #CJK UNIFIED IDEOGRAPH + {0xD270, 0x896D}, //14033 #CJK UNIFIED IDEOGRAPH + {0xD271, 0x896E}, //14034 #CJK UNIFIED IDEOGRAPH + {0xD272, 0x896F}, //14035 #CJK UNIFIED IDEOGRAPH + {0xD273, 0x8970}, //14036 #CJK UNIFIED IDEOGRAPH + {0xD274, 0x8971}, //14037 #CJK UNIFIED IDEOGRAPH + {0xD275, 0x8972}, //14038 #CJK UNIFIED IDEOGRAPH + {0xD276, 0x8973}, //14039 #CJK UNIFIED IDEOGRAPH + {0xD277, 0x8974}, //14040 #CJK UNIFIED IDEOGRAPH + {0xD278, 0x8975}, //14041 #CJK UNIFIED IDEOGRAPH + {0xD279, 0x8976}, //14042 #CJK UNIFIED IDEOGRAPH + {0xD27A, 0x8977}, //14043 #CJK UNIFIED IDEOGRAPH + {0xD27B, 0x8978}, //14044 #CJK UNIFIED IDEOGRAPH + {0xD27C, 0x8979}, //14045 #CJK UNIFIED IDEOGRAPH + {0xD27D, 0x897A}, //14046 #CJK UNIFIED IDEOGRAPH + {0xD27E, 0x897C}, //14047 #CJK UNIFIED IDEOGRAPH + {0xD280, 0x897D}, //14048 #CJK UNIFIED IDEOGRAPH + {0xD281, 0x897E}, //14049 #CJK UNIFIED IDEOGRAPH + {0xD282, 0x8980}, //14050 #CJK UNIFIED IDEOGRAPH + {0xD283, 0x8982}, //14051 #CJK UNIFIED IDEOGRAPH + {0xD284, 0x8984}, //14052 #CJK UNIFIED IDEOGRAPH + {0xD285, 0x8985}, //14053 #CJK UNIFIED IDEOGRAPH + {0xD286, 0x8987}, //14054 #CJK UNIFIED IDEOGRAPH + {0xD287, 0x8988}, //14055 #CJK UNIFIED IDEOGRAPH + {0xD288, 0x8989}, //14056 #CJK UNIFIED IDEOGRAPH + {0xD289, 0x898A}, //14057 #CJK UNIFIED IDEOGRAPH + {0xD28A, 0x898B}, //14058 #CJK UNIFIED IDEOGRAPH + {0xD28B, 0x898C}, //14059 #CJK UNIFIED IDEOGRAPH + {0xD28C, 0x898D}, //14060 #CJK UNIFIED IDEOGRAPH + {0xD28D, 0x898E}, //14061 #CJK UNIFIED IDEOGRAPH + {0xD28E, 0x898F}, //14062 #CJK UNIFIED IDEOGRAPH + {0xD28F, 0x8990}, //14063 #CJK UNIFIED IDEOGRAPH + {0xD290, 0x8991}, //14064 #CJK UNIFIED IDEOGRAPH + {0xD291, 0x8992}, //14065 #CJK UNIFIED IDEOGRAPH + {0xD292, 0x8993}, //14066 #CJK UNIFIED IDEOGRAPH + {0xD293, 0x8994}, //14067 #CJK UNIFIED IDEOGRAPH + {0xD294, 0x8995}, //14068 #CJK UNIFIED IDEOGRAPH + {0xD295, 0x8996}, //14069 #CJK UNIFIED IDEOGRAPH + {0xD296, 0x8997}, //14070 #CJK UNIFIED IDEOGRAPH + {0xD297, 0x8998}, //14071 #CJK UNIFIED IDEOGRAPH + {0xD298, 0x8999}, //14072 #CJK UNIFIED IDEOGRAPH + {0xD299, 0x899A}, //14073 #CJK UNIFIED IDEOGRAPH + {0xD29A, 0x899B}, //14074 #CJK UNIFIED IDEOGRAPH + {0xD29B, 0x899C}, //14075 #CJK UNIFIED IDEOGRAPH + {0xD29C, 0x899D}, //14076 #CJK UNIFIED IDEOGRAPH + {0xD29D, 0x899E}, //14077 #CJK UNIFIED IDEOGRAPH + {0xD29E, 0x899F}, //14078 #CJK UNIFIED IDEOGRAPH + {0xD29F, 0x89A0}, //14079 #CJK UNIFIED IDEOGRAPH + {0xD2A0, 0x89A1}, //14080 #CJK UNIFIED IDEOGRAPH + {0xD2A1, 0x6447}, //14081 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0x5C27}, //14082 #CJK UNIFIED IDEOGRAPH + {0xD2A3, 0x9065}, //14083 #CJK UNIFIED IDEOGRAPH + {0xD2A4, 0x7A91}, //14084 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x8C23}, //14085 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x59DA}, //14086 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0x54AC}, //14087 #CJK UNIFIED IDEOGRAPH + {0xD2A8, 0x8200}, //14088 #CJK UNIFIED IDEOGRAPH + {0xD2A9, 0x836F}, //14089 #CJK UNIFIED IDEOGRAPH + {0xD2AA, 0x8981}, //14090 #CJK UNIFIED IDEOGRAPH + {0xD2AB, 0x8000}, //14091 #CJK UNIFIED IDEOGRAPH + {0xD2AC, 0x6930}, //14092 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0x564E}, //14093 #CJK UNIFIED IDEOGRAPH + {0xD2AE, 0x8036}, //14094 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x7237}, //14095 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x91CE}, //14096 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x51B6}, //14097 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0x4E5F}, //14098 #CJK UNIFIED IDEOGRAPH + {0xD2B3, 0x9875}, //14099 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x6396}, //14100 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x4E1A}, //14101 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x53F6}, //14102 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x66F3}, //14103 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x814B}, //14104 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x591C}, //14105 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x6DB2}, //14106 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x4E00}, //14107 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x58F9}, //14108 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x533B}, //14109 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0x63D6}, //14110 #CJK UNIFIED IDEOGRAPH + {0xD2BF, 0x94F1}, //14111 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x4F9D}, //14112 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x4F0A}, //14113 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0x8863}, //14114 #CJK UNIFIED IDEOGRAPH + {0xD2C3, 0x9890}, //14115 #CJK UNIFIED IDEOGRAPH + {0xD2C4, 0x5937}, //14116 #CJK UNIFIED IDEOGRAPH + {0xD2C5, 0x9057}, //14117 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0x79FB}, //14118 #CJK UNIFIED IDEOGRAPH + {0xD2C7, 0x4EEA}, //14119 #CJK UNIFIED IDEOGRAPH + {0xD2C8, 0x80F0}, //14120 #CJK UNIFIED IDEOGRAPH + {0xD2C9, 0x7591}, //14121 #CJK UNIFIED IDEOGRAPH + {0xD2CA, 0x6C82}, //14122 #CJK UNIFIED IDEOGRAPH + {0xD2CB, 0x5B9C}, //14123 #CJK UNIFIED IDEOGRAPH + {0xD2CC, 0x59E8}, //14124 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0x5F5D}, //14125 #CJK UNIFIED IDEOGRAPH + {0xD2CE, 0x6905}, //14126 #CJK UNIFIED IDEOGRAPH + {0xD2CF, 0x8681}, //14127 #CJK UNIFIED IDEOGRAPH + {0xD2D0, 0x501A}, //14128 #CJK UNIFIED IDEOGRAPH + {0xD2D1, 0x5DF2}, //14129 #CJK UNIFIED IDEOGRAPH + {0xD2D2, 0x4E59}, //14130 #CJK UNIFIED IDEOGRAPH + {0xD2D3, 0x77E3}, //14131 #CJK UNIFIED IDEOGRAPH + {0xD2D4, 0x4EE5}, //14132 #CJK UNIFIED IDEOGRAPH + {0xD2D5, 0x827A}, //14133 #CJK UNIFIED IDEOGRAPH + {0xD2D6, 0x6291}, //14134 #CJK UNIFIED IDEOGRAPH + {0xD2D7, 0x6613}, //14135 #CJK UNIFIED IDEOGRAPH + {0xD2D8, 0x9091}, //14136 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0x5C79}, //14137 #CJK UNIFIED IDEOGRAPH + {0xD2DA, 0x4EBF}, //14138 #CJK UNIFIED IDEOGRAPH + {0xD2DB, 0x5F79}, //14139 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x81C6}, //14140 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x9038}, //14141 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0x8084}, //14142 #CJK UNIFIED IDEOGRAPH + {0xD2DF, 0x75AB}, //14143 #CJK UNIFIED IDEOGRAPH + {0xD2E0, 0x4EA6}, //14144 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0x88D4}, //14145 #CJK UNIFIED IDEOGRAPH + {0xD2E2, 0x610F}, //14146 #CJK UNIFIED IDEOGRAPH + {0xD2E3, 0x6BC5}, //14147 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0x5FC6}, //14148 #CJK UNIFIED IDEOGRAPH + {0xD2E5, 0x4E49}, //14149 #CJK UNIFIED IDEOGRAPH + {0xD2E6, 0x76CA}, //14150 #CJK UNIFIED IDEOGRAPH + {0xD2E7, 0x6EA2}, //14151 #CJK UNIFIED IDEOGRAPH + {0xD2E8, 0x8BE3}, //14152 #CJK UNIFIED IDEOGRAPH + {0xD2E9, 0x8BAE}, //14153 #CJK UNIFIED IDEOGRAPH + {0xD2EA, 0x8C0A}, //14154 #CJK UNIFIED IDEOGRAPH + {0xD2EB, 0x8BD1}, //14155 #CJK UNIFIED IDEOGRAPH + {0xD2EC, 0x5F02}, //14156 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x7FFC}, //14157 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x7FCC}, //14158 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x7ECE}, //14159 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0x8335}, //14160 #CJK UNIFIED IDEOGRAPH + {0xD2F1, 0x836B}, //14161 #CJK UNIFIED IDEOGRAPH + {0xD2F2, 0x56E0}, //14162 #CJK UNIFIED IDEOGRAPH + {0xD2F3, 0x6BB7}, //14163 #CJK UNIFIED IDEOGRAPH + {0xD2F4, 0x97F3}, //14164 #CJK UNIFIED IDEOGRAPH + {0xD2F5, 0x9634}, //14165 #CJK UNIFIED IDEOGRAPH + {0xD2F6, 0x59FB}, //14166 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0x541F}, //14167 #CJK UNIFIED IDEOGRAPH + {0xD2F8, 0x94F6}, //14168 #CJK UNIFIED IDEOGRAPH + {0xD2F9, 0x6DEB}, //14169 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x5BC5}, //14170 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x996E}, //14171 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x5C39}, //14172 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x5F15}, //14173 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x9690}, //14174 #CJK UNIFIED IDEOGRAPH + {0xD340, 0x89A2}, //14175 #CJK UNIFIED IDEOGRAPH + {0xD341, 0x89A3}, //14176 #CJK UNIFIED IDEOGRAPH + {0xD342, 0x89A4}, //14177 #CJK UNIFIED IDEOGRAPH + {0xD343, 0x89A5}, //14178 #CJK UNIFIED IDEOGRAPH + {0xD344, 0x89A6}, //14179 #CJK UNIFIED IDEOGRAPH + {0xD345, 0x89A7}, //14180 #CJK UNIFIED IDEOGRAPH + {0xD346, 0x89A8}, //14181 #CJK UNIFIED IDEOGRAPH + {0xD347, 0x89A9}, //14182 #CJK UNIFIED IDEOGRAPH + {0xD348, 0x89AA}, //14183 #CJK UNIFIED IDEOGRAPH + {0xD349, 0x89AB}, //14184 #CJK UNIFIED IDEOGRAPH + {0xD34A, 0x89AC}, //14185 #CJK UNIFIED IDEOGRAPH + {0xD34B, 0x89AD}, //14186 #CJK UNIFIED IDEOGRAPH + {0xD34C, 0x89AE}, //14187 #CJK UNIFIED IDEOGRAPH + {0xD34D, 0x89AF}, //14188 #CJK UNIFIED IDEOGRAPH + {0xD34E, 0x89B0}, //14189 #CJK UNIFIED IDEOGRAPH + {0xD34F, 0x89B1}, //14190 #CJK UNIFIED IDEOGRAPH + {0xD350, 0x89B2}, //14191 #CJK UNIFIED IDEOGRAPH + {0xD351, 0x89B3}, //14192 #CJK UNIFIED IDEOGRAPH + {0xD352, 0x89B4}, //14193 #CJK UNIFIED IDEOGRAPH + {0xD353, 0x89B5}, //14194 #CJK UNIFIED IDEOGRAPH + {0xD354, 0x89B6}, //14195 #CJK UNIFIED IDEOGRAPH + {0xD355, 0x89B7}, //14196 #CJK UNIFIED IDEOGRAPH + {0xD356, 0x89B8}, //14197 #CJK UNIFIED IDEOGRAPH + {0xD357, 0x89B9}, //14198 #CJK UNIFIED IDEOGRAPH + {0xD358, 0x89BA}, //14199 #CJK UNIFIED IDEOGRAPH + {0xD359, 0x89BB}, //14200 #CJK UNIFIED IDEOGRAPH + {0xD35A, 0x89BC}, //14201 #CJK UNIFIED IDEOGRAPH + {0xD35B, 0x89BD}, //14202 #CJK UNIFIED IDEOGRAPH + {0xD35C, 0x89BE}, //14203 #CJK UNIFIED IDEOGRAPH + {0xD35D, 0x89BF}, //14204 #CJK UNIFIED IDEOGRAPH + {0xD35E, 0x89C0}, //14205 #CJK UNIFIED IDEOGRAPH + {0xD35F, 0x89C3}, //14206 #CJK UNIFIED IDEOGRAPH + {0xD360, 0x89CD}, //14207 #CJK UNIFIED IDEOGRAPH + {0xD361, 0x89D3}, //14208 #CJK UNIFIED IDEOGRAPH + {0xD362, 0x89D4}, //14209 #CJK UNIFIED IDEOGRAPH + {0xD363, 0x89D5}, //14210 #CJK UNIFIED IDEOGRAPH + {0xD364, 0x89D7}, //14211 #CJK UNIFIED IDEOGRAPH + {0xD365, 0x89D8}, //14212 #CJK UNIFIED IDEOGRAPH + {0xD366, 0x89D9}, //14213 #CJK UNIFIED IDEOGRAPH + {0xD367, 0x89DB}, //14214 #CJK UNIFIED IDEOGRAPH + {0xD368, 0x89DD}, //14215 #CJK UNIFIED IDEOGRAPH + {0xD369, 0x89DF}, //14216 #CJK UNIFIED IDEOGRAPH + {0xD36A, 0x89E0}, //14217 #CJK UNIFIED IDEOGRAPH + {0xD36B, 0x89E1}, //14218 #CJK UNIFIED IDEOGRAPH + {0xD36C, 0x89E2}, //14219 #CJK UNIFIED IDEOGRAPH + {0xD36D, 0x89E4}, //14220 #CJK UNIFIED IDEOGRAPH + {0xD36E, 0x89E7}, //14221 #CJK UNIFIED IDEOGRAPH + {0xD36F, 0x89E8}, //14222 #CJK UNIFIED IDEOGRAPH + {0xD370, 0x89E9}, //14223 #CJK UNIFIED IDEOGRAPH + {0xD371, 0x89EA}, //14224 #CJK UNIFIED IDEOGRAPH + {0xD372, 0x89EC}, //14225 #CJK UNIFIED IDEOGRAPH + {0xD373, 0x89ED}, //14226 #CJK UNIFIED IDEOGRAPH + {0xD374, 0x89EE}, //14227 #CJK UNIFIED IDEOGRAPH + {0xD375, 0x89F0}, //14228 #CJK UNIFIED IDEOGRAPH + {0xD376, 0x89F1}, //14229 #CJK UNIFIED IDEOGRAPH + {0xD377, 0x89F2}, //14230 #CJK UNIFIED IDEOGRAPH + {0xD378, 0x89F4}, //14231 #CJK UNIFIED IDEOGRAPH + {0xD379, 0x89F5}, //14232 #CJK UNIFIED IDEOGRAPH + {0xD37A, 0x89F6}, //14233 #CJK UNIFIED IDEOGRAPH + {0xD37B, 0x89F7}, //14234 #CJK UNIFIED IDEOGRAPH + {0xD37C, 0x89F8}, //14235 #CJK UNIFIED IDEOGRAPH + {0xD37D, 0x89F9}, //14236 #CJK UNIFIED IDEOGRAPH + {0xD37E, 0x89FA}, //14237 #CJK UNIFIED IDEOGRAPH + {0xD380, 0x89FB}, //14238 #CJK UNIFIED IDEOGRAPH + {0xD381, 0x89FC}, //14239 #CJK UNIFIED IDEOGRAPH + {0xD382, 0x89FD}, //14240 #CJK UNIFIED IDEOGRAPH + {0xD383, 0x89FE}, //14241 #CJK UNIFIED IDEOGRAPH + {0xD384, 0x89FF}, //14242 #CJK UNIFIED IDEOGRAPH + {0xD385, 0x8A01}, //14243 #CJK UNIFIED IDEOGRAPH + {0xD386, 0x8A02}, //14244 #CJK UNIFIED IDEOGRAPH + {0xD387, 0x8A03}, //14245 #CJK UNIFIED IDEOGRAPH + {0xD388, 0x8A04}, //14246 #CJK UNIFIED IDEOGRAPH + {0xD389, 0x8A05}, //14247 #CJK UNIFIED IDEOGRAPH + {0xD38A, 0x8A06}, //14248 #CJK UNIFIED IDEOGRAPH + {0xD38B, 0x8A08}, //14249 #CJK UNIFIED IDEOGRAPH + {0xD38C, 0x8A09}, //14250 #CJK UNIFIED IDEOGRAPH + {0xD38D, 0x8A0A}, //14251 #CJK UNIFIED IDEOGRAPH + {0xD38E, 0x8A0B}, //14252 #CJK UNIFIED IDEOGRAPH + {0xD38F, 0x8A0C}, //14253 #CJK UNIFIED IDEOGRAPH + {0xD390, 0x8A0D}, //14254 #CJK UNIFIED IDEOGRAPH + {0xD391, 0x8A0E}, //14255 #CJK UNIFIED IDEOGRAPH + {0xD392, 0x8A0F}, //14256 #CJK UNIFIED IDEOGRAPH + {0xD393, 0x8A10}, //14257 #CJK UNIFIED IDEOGRAPH + {0xD394, 0x8A11}, //14258 #CJK UNIFIED IDEOGRAPH + {0xD395, 0x8A12}, //14259 #CJK UNIFIED IDEOGRAPH + {0xD396, 0x8A13}, //14260 #CJK UNIFIED IDEOGRAPH + {0xD397, 0x8A14}, //14261 #CJK UNIFIED IDEOGRAPH + {0xD398, 0x8A15}, //14262 #CJK UNIFIED IDEOGRAPH + {0xD399, 0x8A16}, //14263 #CJK UNIFIED IDEOGRAPH + {0xD39A, 0x8A17}, //14264 #CJK UNIFIED IDEOGRAPH + {0xD39B, 0x8A18}, //14265 #CJK UNIFIED IDEOGRAPH + {0xD39C, 0x8A19}, //14266 #CJK UNIFIED IDEOGRAPH + {0xD39D, 0x8A1A}, //14267 #CJK UNIFIED IDEOGRAPH + {0xD39E, 0x8A1B}, //14268 #CJK UNIFIED IDEOGRAPH + {0xD39F, 0x8A1C}, //14269 #CJK UNIFIED IDEOGRAPH + {0xD3A0, 0x8A1D}, //14270 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x5370}, //14271 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x82F1}, //14272 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x6A31}, //14273 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x5A74}, //14274 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x9E70}, //14275 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x5E94}, //14276 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x7F28}, //14277 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x83B9}, //14278 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x8424}, //14279 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x8425}, //14280 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x8367}, //14281 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x8747}, //14282 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x8FCE}, //14283 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x8D62}, //14284 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x76C8}, //14285 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x5F71}, //14286 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x9896}, //14287 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x786C}, //14288 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x6620}, //14289 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x54DF}, //14290 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x62E5}, //14291 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x4F63}, //14292 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x81C3}, //14293 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x75C8}, //14294 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x5EB8}, //14295 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x96CD}, //14296 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x8E0A}, //14297 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x86F9}, //14298 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x548F}, //14299 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x6CF3}, //14300 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x6D8C}, //14301 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x6C38}, //14302 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x607F}, //14303 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x52C7}, //14304 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x7528}, //14305 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x5E7D}, //14306 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x4F18}, //14307 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x60A0}, //14308 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x5FE7}, //14309 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x5C24}, //14310 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x7531}, //14311 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x90AE}, //14312 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x94C0}, //14313 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x72B9}, //14314 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x6CB9}, //14315 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x6E38}, //14316 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x9149}, //14317 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x6709}, //14318 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x53CB}, //14319 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x53F3}, //14320 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x4F51}, //14321 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x91C9}, //14322 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x8BF1}, //14323 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x53C8}, //14324 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x5E7C}, //14325 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x8FC2}, //14326 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x6DE4}, //14327 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x4E8E}, //14328 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x76C2}, //14329 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x6986}, //14330 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x865E}, //14331 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x611A}, //14332 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x8206}, //14333 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x4F59}, //14334 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x4FDE}, //14335 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x903E}, //14336 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x9C7C}, //14337 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x6109}, //14338 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x6E1D}, //14339 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x6E14}, //14340 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x9685}, //14341 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x4E88}, //14342 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x5A31}, //14343 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x96E8}, //14344 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x4E0E}, //14345 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x5C7F}, //14346 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x79B9}, //14347 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x5B87}, //14348 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x8BED}, //14349 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x7FBD}, //14350 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x7389}, //14351 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x57DF}, //14352 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x828B}, //14353 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x90C1}, //14354 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x5401}, //14355 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x9047}, //14356 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x55BB}, //14357 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x5CEA}, //14358 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x5FA1}, //14359 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x6108}, //14360 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x6B32}, //14361 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x72F1}, //14362 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x80B2}, //14363 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x8A89}, //14364 #CJK UNIFIED IDEOGRAPH + {0xD440, 0x8A1E}, //14365 #CJK UNIFIED IDEOGRAPH + {0xD441, 0x8A1F}, //14366 #CJK UNIFIED IDEOGRAPH + {0xD442, 0x8A20}, //14367 #CJK UNIFIED IDEOGRAPH + {0xD443, 0x8A21}, //14368 #CJK UNIFIED IDEOGRAPH + {0xD444, 0x8A22}, //14369 #CJK UNIFIED IDEOGRAPH + {0xD445, 0x8A23}, //14370 #CJK UNIFIED IDEOGRAPH + {0xD446, 0x8A24}, //14371 #CJK UNIFIED IDEOGRAPH + {0xD447, 0x8A25}, //14372 #CJK UNIFIED IDEOGRAPH + {0xD448, 0x8A26}, //14373 #CJK UNIFIED IDEOGRAPH + {0xD449, 0x8A27}, //14374 #CJK UNIFIED IDEOGRAPH + {0xD44A, 0x8A28}, //14375 #CJK UNIFIED IDEOGRAPH + {0xD44B, 0x8A29}, //14376 #CJK UNIFIED IDEOGRAPH + {0xD44C, 0x8A2A}, //14377 #CJK UNIFIED IDEOGRAPH + {0xD44D, 0x8A2B}, //14378 #CJK UNIFIED IDEOGRAPH + {0xD44E, 0x8A2C}, //14379 #CJK UNIFIED IDEOGRAPH + {0xD44F, 0x8A2D}, //14380 #CJK UNIFIED IDEOGRAPH + {0xD450, 0x8A2E}, //14381 #CJK UNIFIED IDEOGRAPH + {0xD451, 0x8A2F}, //14382 #CJK UNIFIED IDEOGRAPH + {0xD452, 0x8A30}, //14383 #CJK UNIFIED IDEOGRAPH + {0xD453, 0x8A31}, //14384 #CJK UNIFIED IDEOGRAPH + {0xD454, 0x8A32}, //14385 #CJK UNIFIED IDEOGRAPH + {0xD455, 0x8A33}, //14386 #CJK UNIFIED IDEOGRAPH + {0xD456, 0x8A34}, //14387 #CJK UNIFIED IDEOGRAPH + {0xD457, 0x8A35}, //14388 #CJK UNIFIED IDEOGRAPH + {0xD458, 0x8A36}, //14389 #CJK UNIFIED IDEOGRAPH + {0xD459, 0x8A37}, //14390 #CJK UNIFIED IDEOGRAPH + {0xD45A, 0x8A38}, //14391 #CJK UNIFIED IDEOGRAPH + {0xD45B, 0x8A39}, //14392 #CJK UNIFIED IDEOGRAPH + {0xD45C, 0x8A3A}, //14393 #CJK UNIFIED IDEOGRAPH + {0xD45D, 0x8A3B}, //14394 #CJK UNIFIED IDEOGRAPH + {0xD45E, 0x8A3C}, //14395 #CJK UNIFIED IDEOGRAPH + {0xD45F, 0x8A3D}, //14396 #CJK UNIFIED IDEOGRAPH + {0xD460, 0x8A3F}, //14397 #CJK UNIFIED IDEOGRAPH + {0xD461, 0x8A40}, //14398 #CJK UNIFIED IDEOGRAPH + {0xD462, 0x8A41}, //14399 #CJK UNIFIED IDEOGRAPH + {0xD463, 0x8A42}, //14400 #CJK UNIFIED IDEOGRAPH + {0xD464, 0x8A43}, //14401 #CJK UNIFIED IDEOGRAPH + {0xD465, 0x8A44}, //14402 #CJK UNIFIED IDEOGRAPH + {0xD466, 0x8A45}, //14403 #CJK UNIFIED IDEOGRAPH + {0xD467, 0x8A46}, //14404 #CJK UNIFIED IDEOGRAPH + {0xD468, 0x8A47}, //14405 #CJK UNIFIED IDEOGRAPH + {0xD469, 0x8A49}, //14406 #CJK UNIFIED IDEOGRAPH + {0xD46A, 0x8A4A}, //14407 #CJK UNIFIED IDEOGRAPH + {0xD46B, 0x8A4B}, //14408 #CJK UNIFIED IDEOGRAPH + {0xD46C, 0x8A4C}, //14409 #CJK UNIFIED IDEOGRAPH + {0xD46D, 0x8A4D}, //14410 #CJK UNIFIED IDEOGRAPH + {0xD46E, 0x8A4E}, //14411 #CJK UNIFIED IDEOGRAPH + {0xD46F, 0x8A4F}, //14412 #CJK UNIFIED IDEOGRAPH + {0xD470, 0x8A50}, //14413 #CJK UNIFIED IDEOGRAPH + {0xD471, 0x8A51}, //14414 #CJK UNIFIED IDEOGRAPH + {0xD472, 0x8A52}, //14415 #CJK UNIFIED IDEOGRAPH + {0xD473, 0x8A53}, //14416 #CJK UNIFIED IDEOGRAPH + {0xD474, 0x8A54}, //14417 #CJK UNIFIED IDEOGRAPH + {0xD475, 0x8A55}, //14418 #CJK UNIFIED IDEOGRAPH + {0xD476, 0x8A56}, //14419 #CJK UNIFIED IDEOGRAPH + {0xD477, 0x8A57}, //14420 #CJK UNIFIED IDEOGRAPH + {0xD478, 0x8A58}, //14421 #CJK UNIFIED IDEOGRAPH + {0xD479, 0x8A59}, //14422 #CJK UNIFIED IDEOGRAPH + {0xD47A, 0x8A5A}, //14423 #CJK UNIFIED IDEOGRAPH + {0xD47B, 0x8A5B}, //14424 #CJK UNIFIED IDEOGRAPH + {0xD47C, 0x8A5C}, //14425 #CJK UNIFIED IDEOGRAPH + {0xD47D, 0x8A5D}, //14426 #CJK UNIFIED IDEOGRAPH + {0xD47E, 0x8A5E}, //14427 #CJK UNIFIED IDEOGRAPH + {0xD480, 0x8A5F}, //14428 #CJK UNIFIED IDEOGRAPH + {0xD481, 0x8A60}, //14429 #CJK UNIFIED IDEOGRAPH + {0xD482, 0x8A61}, //14430 #CJK UNIFIED IDEOGRAPH + {0xD483, 0x8A62}, //14431 #CJK UNIFIED IDEOGRAPH + {0xD484, 0x8A63}, //14432 #CJK UNIFIED IDEOGRAPH + {0xD485, 0x8A64}, //14433 #CJK UNIFIED IDEOGRAPH + {0xD486, 0x8A65}, //14434 #CJK UNIFIED IDEOGRAPH + {0xD487, 0x8A66}, //14435 #CJK UNIFIED IDEOGRAPH + {0xD488, 0x8A67}, //14436 #CJK UNIFIED IDEOGRAPH + {0xD489, 0x8A68}, //14437 #CJK UNIFIED IDEOGRAPH + {0xD48A, 0x8A69}, //14438 #CJK UNIFIED IDEOGRAPH + {0xD48B, 0x8A6A}, //14439 #CJK UNIFIED IDEOGRAPH + {0xD48C, 0x8A6B}, //14440 #CJK UNIFIED IDEOGRAPH + {0xD48D, 0x8A6C}, //14441 #CJK UNIFIED IDEOGRAPH + {0xD48E, 0x8A6D}, //14442 #CJK UNIFIED IDEOGRAPH + {0xD48F, 0x8A6E}, //14443 #CJK UNIFIED IDEOGRAPH + {0xD490, 0x8A6F}, //14444 #CJK UNIFIED IDEOGRAPH + {0xD491, 0x8A70}, //14445 #CJK UNIFIED IDEOGRAPH + {0xD492, 0x8A71}, //14446 #CJK UNIFIED IDEOGRAPH + {0xD493, 0x8A72}, //14447 #CJK UNIFIED IDEOGRAPH + {0xD494, 0x8A73}, //14448 #CJK UNIFIED IDEOGRAPH + {0xD495, 0x8A74}, //14449 #CJK UNIFIED IDEOGRAPH + {0xD496, 0x8A75}, //14450 #CJK UNIFIED IDEOGRAPH + {0xD497, 0x8A76}, //14451 #CJK UNIFIED IDEOGRAPH + {0xD498, 0x8A77}, //14452 #CJK UNIFIED IDEOGRAPH + {0xD499, 0x8A78}, //14453 #CJK UNIFIED IDEOGRAPH + {0xD49A, 0x8A7A}, //14454 #CJK UNIFIED IDEOGRAPH + {0xD49B, 0x8A7B}, //14455 #CJK UNIFIED IDEOGRAPH + {0xD49C, 0x8A7C}, //14456 #CJK UNIFIED IDEOGRAPH + {0xD49D, 0x8A7D}, //14457 #CJK UNIFIED IDEOGRAPH + {0xD49E, 0x8A7E}, //14458 #CJK UNIFIED IDEOGRAPH + {0xD49F, 0x8A7F}, //14459 #CJK UNIFIED IDEOGRAPH + {0xD4A0, 0x8A80}, //14460 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x6D74}, //14461 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x5BD3}, //14462 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x88D5}, //14463 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x9884}, //14464 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x8C6B}, //14465 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x9A6D}, //14466 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x9E33}, //14467 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x6E0A}, //14468 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x51A4}, //14469 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x5143}, //14470 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x57A3}, //14471 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x8881}, //14472 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x539F}, //14473 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x63F4}, //14474 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x8F95}, //14475 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x56ED}, //14476 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x5458}, //14477 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x5706}, //14478 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x733F}, //14479 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x6E90}, //14480 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x7F18}, //14481 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x8FDC}, //14482 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x82D1}, //14483 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x613F}, //14484 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x6028}, //14485 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x9662}, //14486 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x66F0}, //14487 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x7EA6}, //14488 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x8D8A}, //14489 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x8DC3}, //14490 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x94A5}, //14491 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x5CB3}, //14492 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x7CA4}, //14493 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x6708}, //14494 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x60A6}, //14495 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x9605}, //14496 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x8018}, //14497 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x4E91}, //14498 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x90E7}, //14499 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x5300}, //14500 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x9668}, //14501 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x5141}, //14502 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x8FD0}, //14503 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x8574}, //14504 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x915D}, //14505 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x6655}, //14506 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x97F5}, //14507 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x5B55}, //14508 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x531D}, //14509 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x7838}, //14510 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x6742}, //14511 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x683D}, //14512 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x54C9}, //14513 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x707E}, //14514 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x5BB0}, //14515 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x8F7D}, //14516 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x518D}, //14517 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x5728}, //14518 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x54B1}, //14519 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x6512}, //14520 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x6682}, //14521 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x8D5E}, //14522 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x8D43}, //14523 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x810F}, //14524 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x846C}, //14525 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x906D}, //14526 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x7CDF}, //14527 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x51FF}, //14528 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x85FB}, //14529 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0x67A3}, //14530 #CJK UNIFIED IDEOGRAPH + {0xD4E7, 0x65E9}, //14531 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x6FA1}, //14532 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x86A4}, //14533 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x8E81}, //14534 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x566A}, //14535 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x9020}, //14536 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x7682}, //14537 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x7076}, //14538 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x71E5}, //14539 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x8D23}, //14540 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x62E9}, //14541 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x5219}, //14542 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x6CFD}, //14543 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x8D3C}, //14544 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x600E}, //14545 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x589E}, //14546 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x618E}, //14547 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x66FE}, //14548 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x8D60}, //14549 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x624E}, //14550 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x55B3}, //14551 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0x6E23}, //14552 #CJK UNIFIED IDEOGRAPH + {0xD4FD, 0x672D}, //14553 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x8F67}, //14554 #CJK UNIFIED IDEOGRAPH + {0xD540, 0x8A81}, //14555 #CJK UNIFIED IDEOGRAPH + {0xD541, 0x8A82}, //14556 #CJK UNIFIED IDEOGRAPH + {0xD542, 0x8A83}, //14557 #CJK UNIFIED IDEOGRAPH + {0xD543, 0x8A84}, //14558 #CJK UNIFIED IDEOGRAPH + {0xD544, 0x8A85}, //14559 #CJK UNIFIED IDEOGRAPH + {0xD545, 0x8A86}, //14560 #CJK UNIFIED IDEOGRAPH + {0xD546, 0x8A87}, //14561 #CJK UNIFIED IDEOGRAPH + {0xD547, 0x8A88}, //14562 #CJK UNIFIED IDEOGRAPH + {0xD548, 0x8A8B}, //14563 #CJK UNIFIED IDEOGRAPH + {0xD549, 0x8A8C}, //14564 #CJK UNIFIED IDEOGRAPH + {0xD54A, 0x8A8D}, //14565 #CJK UNIFIED IDEOGRAPH + {0xD54B, 0x8A8E}, //14566 #CJK UNIFIED IDEOGRAPH + {0xD54C, 0x8A8F}, //14567 #CJK UNIFIED IDEOGRAPH + {0xD54D, 0x8A90}, //14568 #CJK UNIFIED IDEOGRAPH + {0xD54E, 0x8A91}, //14569 #CJK UNIFIED IDEOGRAPH + {0xD54F, 0x8A92}, //14570 #CJK UNIFIED IDEOGRAPH + {0xD550, 0x8A94}, //14571 #CJK UNIFIED IDEOGRAPH + {0xD551, 0x8A95}, //14572 #CJK UNIFIED IDEOGRAPH + {0xD552, 0x8A96}, //14573 #CJK UNIFIED IDEOGRAPH + {0xD553, 0x8A97}, //14574 #CJK UNIFIED IDEOGRAPH + {0xD554, 0x8A98}, //14575 #CJK UNIFIED IDEOGRAPH + {0xD555, 0x8A99}, //14576 #CJK UNIFIED IDEOGRAPH + {0xD556, 0x8A9A}, //14577 #CJK UNIFIED IDEOGRAPH + {0xD557, 0x8A9B}, //14578 #CJK UNIFIED IDEOGRAPH + {0xD558, 0x8A9C}, //14579 #CJK UNIFIED IDEOGRAPH + {0xD559, 0x8A9D}, //14580 #CJK UNIFIED IDEOGRAPH + {0xD55A, 0x8A9E}, //14581 #CJK UNIFIED IDEOGRAPH + {0xD55B, 0x8A9F}, //14582 #CJK UNIFIED IDEOGRAPH + {0xD55C, 0x8AA0}, //14583 #CJK UNIFIED IDEOGRAPH + {0xD55D, 0x8AA1}, //14584 #CJK UNIFIED IDEOGRAPH + {0xD55E, 0x8AA2}, //14585 #CJK UNIFIED IDEOGRAPH + {0xD55F, 0x8AA3}, //14586 #CJK UNIFIED IDEOGRAPH + {0xD560, 0x8AA4}, //14587 #CJK UNIFIED IDEOGRAPH + {0xD561, 0x8AA5}, //14588 #CJK UNIFIED IDEOGRAPH + {0xD562, 0x8AA6}, //14589 #CJK UNIFIED IDEOGRAPH + {0xD563, 0x8AA7}, //14590 #CJK UNIFIED IDEOGRAPH + {0xD564, 0x8AA8}, //14591 #CJK UNIFIED IDEOGRAPH + {0xD565, 0x8AA9}, //14592 #CJK UNIFIED IDEOGRAPH + {0xD566, 0x8AAA}, //14593 #CJK UNIFIED IDEOGRAPH + {0xD567, 0x8AAB}, //14594 #CJK UNIFIED IDEOGRAPH + {0xD568, 0x8AAC}, //14595 #CJK UNIFIED IDEOGRAPH + {0xD569, 0x8AAD}, //14596 #CJK UNIFIED IDEOGRAPH + {0xD56A, 0x8AAE}, //14597 #CJK UNIFIED IDEOGRAPH + {0xD56B, 0x8AAF}, //14598 #CJK UNIFIED IDEOGRAPH + {0xD56C, 0x8AB0}, //14599 #CJK UNIFIED IDEOGRAPH + {0xD56D, 0x8AB1}, //14600 #CJK UNIFIED IDEOGRAPH + {0xD56E, 0x8AB2}, //14601 #CJK UNIFIED IDEOGRAPH + {0xD56F, 0x8AB3}, //14602 #CJK UNIFIED IDEOGRAPH + {0xD570, 0x8AB4}, //14603 #CJK UNIFIED IDEOGRAPH + {0xD571, 0x8AB5}, //14604 #CJK UNIFIED IDEOGRAPH + {0xD572, 0x8AB6}, //14605 #CJK UNIFIED IDEOGRAPH + {0xD573, 0x8AB7}, //14606 #CJK UNIFIED IDEOGRAPH + {0xD574, 0x8AB8}, //14607 #CJK UNIFIED IDEOGRAPH + {0xD575, 0x8AB9}, //14608 #CJK UNIFIED IDEOGRAPH + {0xD576, 0x8ABA}, //14609 #CJK UNIFIED IDEOGRAPH + {0xD577, 0x8ABB}, //14610 #CJK UNIFIED IDEOGRAPH + {0xD578, 0x8ABC}, //14611 #CJK UNIFIED IDEOGRAPH + {0xD579, 0x8ABD}, //14612 #CJK UNIFIED IDEOGRAPH + {0xD57A, 0x8ABE}, //14613 #CJK UNIFIED IDEOGRAPH + {0xD57B, 0x8ABF}, //14614 #CJK UNIFIED IDEOGRAPH + {0xD57C, 0x8AC0}, //14615 #CJK UNIFIED IDEOGRAPH + {0xD57D, 0x8AC1}, //14616 #CJK UNIFIED IDEOGRAPH + {0xD57E, 0x8AC2}, //14617 #CJK UNIFIED IDEOGRAPH + {0xD580, 0x8AC3}, //14618 #CJK UNIFIED IDEOGRAPH + {0xD581, 0x8AC4}, //14619 #CJK UNIFIED IDEOGRAPH + {0xD582, 0x8AC5}, //14620 #CJK UNIFIED IDEOGRAPH + {0xD583, 0x8AC6}, //14621 #CJK UNIFIED IDEOGRAPH + {0xD584, 0x8AC7}, //14622 #CJK UNIFIED IDEOGRAPH + {0xD585, 0x8AC8}, //14623 #CJK UNIFIED IDEOGRAPH + {0xD586, 0x8AC9}, //14624 #CJK UNIFIED IDEOGRAPH + {0xD587, 0x8ACA}, //14625 #CJK UNIFIED IDEOGRAPH + {0xD588, 0x8ACB}, //14626 #CJK UNIFIED IDEOGRAPH + {0xD589, 0x8ACC}, //14627 #CJK UNIFIED IDEOGRAPH + {0xD58A, 0x8ACD}, //14628 #CJK UNIFIED IDEOGRAPH + {0xD58B, 0x8ACE}, //14629 #CJK UNIFIED IDEOGRAPH + {0xD58C, 0x8ACF}, //14630 #CJK UNIFIED IDEOGRAPH + {0xD58D, 0x8AD0}, //14631 #CJK UNIFIED IDEOGRAPH + {0xD58E, 0x8AD1}, //14632 #CJK UNIFIED IDEOGRAPH + {0xD58F, 0x8AD2}, //14633 #CJK UNIFIED IDEOGRAPH + {0xD590, 0x8AD3}, //14634 #CJK UNIFIED IDEOGRAPH + {0xD591, 0x8AD4}, //14635 #CJK UNIFIED IDEOGRAPH + {0xD592, 0x8AD5}, //14636 #CJK UNIFIED IDEOGRAPH + {0xD593, 0x8AD6}, //14637 #CJK UNIFIED IDEOGRAPH + {0xD594, 0x8AD7}, //14638 #CJK UNIFIED IDEOGRAPH + {0xD595, 0x8AD8}, //14639 #CJK UNIFIED IDEOGRAPH + {0xD596, 0x8AD9}, //14640 #CJK UNIFIED IDEOGRAPH + {0xD597, 0x8ADA}, //14641 #CJK UNIFIED IDEOGRAPH + {0xD598, 0x8ADB}, //14642 #CJK UNIFIED IDEOGRAPH + {0xD599, 0x8ADC}, //14643 #CJK UNIFIED IDEOGRAPH + {0xD59A, 0x8ADD}, //14644 #CJK UNIFIED IDEOGRAPH + {0xD59B, 0x8ADE}, //14645 #CJK UNIFIED IDEOGRAPH + {0xD59C, 0x8ADF}, //14646 #CJK UNIFIED IDEOGRAPH + {0xD59D, 0x8AE0}, //14647 #CJK UNIFIED IDEOGRAPH + {0xD59E, 0x8AE1}, //14648 #CJK UNIFIED IDEOGRAPH + {0xD59F, 0x8AE2}, //14649 #CJK UNIFIED IDEOGRAPH + {0xD5A0, 0x8AE3}, //14650 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x94E1}, //14651 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x95F8}, //14652 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x7728}, //14653 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x6805}, //14654 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0x69A8}, //14655 #CJK UNIFIED IDEOGRAPH + {0xD5A6, 0x548B}, //14656 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x4E4D}, //14657 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x70B8}, //14658 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x8BC8}, //14659 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x6458}, //14660 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0x658B}, //14661 #CJK UNIFIED IDEOGRAPH + {0xD5AC, 0x5B85}, //14662 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x7A84}, //14663 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0x503A}, //14664 #CJK UNIFIED IDEOGRAPH + {0xD5AF, 0x5BE8}, //14665 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x77BB}, //14666 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6BE1}, //14667 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x8A79}, //14668 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x7C98}, //14669 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x6CBE}, //14670 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x76CF}, //14671 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x65A9}, //14672 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x8F97}, //14673 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x5D2D}, //14674 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x5C55}, //14675 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x8638}, //14676 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x6808}, //14677 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x5360}, //14678 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6218}, //14679 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x7AD9}, //14680 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x6E5B}, //14681 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x7EFD}, //14682 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x6A1F}, //14683 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x7AE0}, //14684 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x5F70}, //14685 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x6F33}, //14686 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x5F20}, //14687 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x638C}, //14688 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6DA8}, //14689 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6756}, //14690 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x4E08}, //14691 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x5E10}, //14692 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x8D26}, //14693 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x4ED7}, //14694 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x80C0}, //14695 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x7634}, //14696 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x969C}, //14697 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x62DB}, //14698 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x662D}, //14699 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x627E}, //14700 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x6CBC}, //14701 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x8D75}, //14702 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x7167}, //14703 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x7F69}, //14704 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x5146}, //14705 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x8087}, //14706 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x53EC}, //14707 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x906E}, //14708 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x6298}, //14709 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x54F2}, //14710 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x86F0}, //14711 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x8F99}, //14712 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x8005}, //14713 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x9517}, //14714 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x8517}, //14715 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x8FD9}, //14716 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x6D59}, //14717 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x73CD}, //14718 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x659F}, //14719 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x771F}, //14720 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x7504}, //14721 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x7827}, //14722 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x81FB}, //14723 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x8D1E}, //14724 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x9488}, //14725 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x4FA6}, //14726 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x6795}, //14727 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x75B9}, //14728 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x8BCA}, //14729 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x9707}, //14730 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x632F}, //14731 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x9547}, //14732 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x9635}, //14733 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x84B8}, //14734 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x6323}, //14735 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x7741}, //14736 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x5F81}, //14737 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x72F0}, //14738 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x4E89}, //14739 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x6014}, //14740 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6574}, //14741 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x62EF}, //14742 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6B63}, //14743 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x653F}, //14744 #CJK UNIFIED IDEOGRAPH + {0xD640, 0x8AE4}, //14745 #CJK UNIFIED IDEOGRAPH + {0xD641, 0x8AE5}, //14746 #CJK UNIFIED IDEOGRAPH + {0xD642, 0x8AE6}, //14747 #CJK UNIFIED IDEOGRAPH + {0xD643, 0x8AE7}, //14748 #CJK UNIFIED IDEOGRAPH + {0xD644, 0x8AE8}, //14749 #CJK UNIFIED IDEOGRAPH + {0xD645, 0x8AE9}, //14750 #CJK UNIFIED IDEOGRAPH + {0xD646, 0x8AEA}, //14751 #CJK UNIFIED IDEOGRAPH + {0xD647, 0x8AEB}, //14752 #CJK UNIFIED IDEOGRAPH + {0xD648, 0x8AEC}, //14753 #CJK UNIFIED IDEOGRAPH + {0xD649, 0x8AED}, //14754 #CJK UNIFIED IDEOGRAPH + {0xD64A, 0x8AEE}, //14755 #CJK UNIFIED IDEOGRAPH + {0xD64B, 0x8AEF}, //14756 #CJK UNIFIED IDEOGRAPH + {0xD64C, 0x8AF0}, //14757 #CJK UNIFIED IDEOGRAPH + {0xD64D, 0x8AF1}, //14758 #CJK UNIFIED IDEOGRAPH + {0xD64E, 0x8AF2}, //14759 #CJK UNIFIED IDEOGRAPH + {0xD64F, 0x8AF3}, //14760 #CJK UNIFIED IDEOGRAPH + {0xD650, 0x8AF4}, //14761 #CJK UNIFIED IDEOGRAPH + {0xD651, 0x8AF5}, //14762 #CJK UNIFIED IDEOGRAPH + {0xD652, 0x8AF6}, //14763 #CJK UNIFIED IDEOGRAPH + {0xD653, 0x8AF7}, //14764 #CJK UNIFIED IDEOGRAPH + {0xD654, 0x8AF8}, //14765 #CJK UNIFIED IDEOGRAPH + {0xD655, 0x8AF9}, //14766 #CJK UNIFIED IDEOGRAPH + {0xD656, 0x8AFA}, //14767 #CJK UNIFIED IDEOGRAPH + {0xD657, 0x8AFB}, //14768 #CJK UNIFIED IDEOGRAPH + {0xD658, 0x8AFC}, //14769 #CJK UNIFIED IDEOGRAPH + {0xD659, 0x8AFD}, //14770 #CJK UNIFIED IDEOGRAPH + {0xD65A, 0x8AFE}, //14771 #CJK UNIFIED IDEOGRAPH + {0xD65B, 0x8AFF}, //14772 #CJK UNIFIED IDEOGRAPH + {0xD65C, 0x8B00}, //14773 #CJK UNIFIED IDEOGRAPH + {0xD65D, 0x8B01}, //14774 #CJK UNIFIED IDEOGRAPH + {0xD65E, 0x8B02}, //14775 #CJK UNIFIED IDEOGRAPH + {0xD65F, 0x8B03}, //14776 #CJK UNIFIED IDEOGRAPH + {0xD660, 0x8B04}, //14777 #CJK UNIFIED IDEOGRAPH + {0xD661, 0x8B05}, //14778 #CJK UNIFIED IDEOGRAPH + {0xD662, 0x8B06}, //14779 #CJK UNIFIED IDEOGRAPH + {0xD663, 0x8B08}, //14780 #CJK UNIFIED IDEOGRAPH + {0xD664, 0x8B09}, //14781 #CJK UNIFIED IDEOGRAPH + {0xD665, 0x8B0A}, //14782 #CJK UNIFIED IDEOGRAPH + {0xD666, 0x8B0B}, //14783 #CJK UNIFIED IDEOGRAPH + {0xD667, 0x8B0C}, //14784 #CJK UNIFIED IDEOGRAPH + {0xD668, 0x8B0D}, //14785 #CJK UNIFIED IDEOGRAPH + {0xD669, 0x8B0E}, //14786 #CJK UNIFIED IDEOGRAPH + {0xD66A, 0x8B0F}, //14787 #CJK UNIFIED IDEOGRAPH + {0xD66B, 0x8B10}, //14788 #CJK UNIFIED IDEOGRAPH + {0xD66C, 0x8B11}, //14789 #CJK UNIFIED IDEOGRAPH + {0xD66D, 0x8B12}, //14790 #CJK UNIFIED IDEOGRAPH + {0xD66E, 0x8B13}, //14791 #CJK UNIFIED IDEOGRAPH + {0xD66F, 0x8B14}, //14792 #CJK UNIFIED IDEOGRAPH + {0xD670, 0x8B15}, //14793 #CJK UNIFIED IDEOGRAPH + {0xD671, 0x8B16}, //14794 #CJK UNIFIED IDEOGRAPH + {0xD672, 0x8B17}, //14795 #CJK UNIFIED IDEOGRAPH + {0xD673, 0x8B18}, //14796 #CJK UNIFIED IDEOGRAPH + {0xD674, 0x8B19}, //14797 #CJK UNIFIED IDEOGRAPH + {0xD675, 0x8B1A}, //14798 #CJK UNIFIED IDEOGRAPH + {0xD676, 0x8B1B}, //14799 #CJK UNIFIED IDEOGRAPH + {0xD677, 0x8B1C}, //14800 #CJK UNIFIED IDEOGRAPH + {0xD678, 0x8B1D}, //14801 #CJK UNIFIED IDEOGRAPH + {0xD679, 0x8B1E}, //14802 #CJK UNIFIED IDEOGRAPH + {0xD67A, 0x8B1F}, //14803 #CJK UNIFIED IDEOGRAPH + {0xD67B, 0x8B20}, //14804 #CJK UNIFIED IDEOGRAPH + {0xD67C, 0x8B21}, //14805 #CJK UNIFIED IDEOGRAPH + {0xD67D, 0x8B22}, //14806 #CJK UNIFIED IDEOGRAPH + {0xD67E, 0x8B23}, //14807 #CJK UNIFIED IDEOGRAPH + {0xD680, 0x8B24}, //14808 #CJK UNIFIED IDEOGRAPH + {0xD681, 0x8B25}, //14809 #CJK UNIFIED IDEOGRAPH + {0xD682, 0x8B27}, //14810 #CJK UNIFIED IDEOGRAPH + {0xD683, 0x8B28}, //14811 #CJK UNIFIED IDEOGRAPH + {0xD684, 0x8B29}, //14812 #CJK UNIFIED IDEOGRAPH + {0xD685, 0x8B2A}, //14813 #CJK UNIFIED IDEOGRAPH + {0xD686, 0x8B2B}, //14814 #CJK UNIFIED IDEOGRAPH + {0xD687, 0x8B2C}, //14815 #CJK UNIFIED IDEOGRAPH + {0xD688, 0x8B2D}, //14816 #CJK UNIFIED IDEOGRAPH + {0xD689, 0x8B2E}, //14817 #CJK UNIFIED IDEOGRAPH + {0xD68A, 0x8B2F}, //14818 #CJK UNIFIED IDEOGRAPH + {0xD68B, 0x8B30}, //14819 #CJK UNIFIED IDEOGRAPH + {0xD68C, 0x8B31}, //14820 #CJK UNIFIED IDEOGRAPH + {0xD68D, 0x8B32}, //14821 #CJK UNIFIED IDEOGRAPH + {0xD68E, 0x8B33}, //14822 #CJK UNIFIED IDEOGRAPH + {0xD68F, 0x8B34}, //14823 #CJK UNIFIED IDEOGRAPH + {0xD690, 0x8B35}, //14824 #CJK UNIFIED IDEOGRAPH + {0xD691, 0x8B36}, //14825 #CJK UNIFIED IDEOGRAPH + {0xD692, 0x8B37}, //14826 #CJK UNIFIED IDEOGRAPH + {0xD693, 0x8B38}, //14827 #CJK UNIFIED IDEOGRAPH + {0xD694, 0x8B39}, //14828 #CJK UNIFIED IDEOGRAPH + {0xD695, 0x8B3A}, //14829 #CJK UNIFIED IDEOGRAPH + {0xD696, 0x8B3B}, //14830 #CJK UNIFIED IDEOGRAPH + {0xD697, 0x8B3C}, //14831 #CJK UNIFIED IDEOGRAPH + {0xD698, 0x8B3D}, //14832 #CJK UNIFIED IDEOGRAPH + {0xD699, 0x8B3E}, //14833 #CJK UNIFIED IDEOGRAPH + {0xD69A, 0x8B3F}, //14834 #CJK UNIFIED IDEOGRAPH + {0xD69B, 0x8B40}, //14835 #CJK UNIFIED IDEOGRAPH + {0xD69C, 0x8B41}, //14836 #CJK UNIFIED IDEOGRAPH + {0xD69D, 0x8B42}, //14837 #CJK UNIFIED IDEOGRAPH + {0xD69E, 0x8B43}, //14838 #CJK UNIFIED IDEOGRAPH + {0xD69F, 0x8B44}, //14839 #CJK UNIFIED IDEOGRAPH + {0xD6A0, 0x8B45}, //14840 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x5E27}, //14841 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x75C7}, //14842 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x90D1}, //14843 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x8BC1}, //14844 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x829D}, //14845 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x679D}, //14846 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x652F}, //14847 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x5431}, //14848 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x8718}, //14849 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x77E5}, //14850 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x80A2}, //14851 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x8102}, //14852 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x6C41}, //14853 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x4E4B}, //14854 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x7EC7}, //14855 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x804C}, //14856 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x76F4}, //14857 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x690D}, //14858 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x6B96}, //14859 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x6267}, //14860 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x503C}, //14861 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x4F84}, //14862 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x5740}, //14863 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0x6307}, //14864 #CJK UNIFIED IDEOGRAPH + {0xD6B9, 0x6B62}, //14865 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x8DBE}, //14866 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x53EA}, //14867 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x65E8}, //14868 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7EB8}, //14869 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x5FD7}, //14870 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x631A}, //14871 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x63B7}, //14872 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x81F3}, //14873 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x81F4}, //14874 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x7F6E}, //14875 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x5E1C}, //14876 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x5CD9}, //14877 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x5236}, //14878 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x667A}, //14879 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x79E9}, //14880 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x7A1A}, //14881 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x8D28}, //14882 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x7099}, //14883 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x75D4}, //14884 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0x6EDE}, //14885 #CJK UNIFIED IDEOGRAPH + {0xD6CE, 0x6CBB}, //14886 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x7A92}, //14887 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x4E2D}, //14888 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x76C5}, //14889 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x5FE0}, //14890 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x949F}, //14891 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x8877}, //14892 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x7EC8}, //14893 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x79CD}, //14894 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x80BF}, //14895 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x91CD}, //14896 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x4EF2}, //14897 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x4F17}, //14898 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x821F}, //14899 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x5468}, //14900 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x5DDE}, //14901 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x6D32}, //14902 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x8BCC}, //14903 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7CA5}, //14904 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x8F74}, //14905 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x8098}, //14906 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x5E1A}, //14907 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x5492}, //14908 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x76B1}, //14909 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x5B99}, //14910 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x663C}, //14911 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x9AA4}, //14912 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x73E0}, //14913 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x682A}, //14914 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x86DB}, //14915 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x6731}, //14916 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x732A}, //14917 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x8BF8}, //14918 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x8BDB}, //14919 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x9010}, //14920 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x7AF9}, //14921 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x70DB}, //14922 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x716E}, //14923 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x62C4}, //14924 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x77A9}, //14925 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x5631}, //14926 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x4E3B}, //14927 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x8457}, //14928 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x67F1}, //14929 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x52A9}, //14930 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x86C0}, //14931 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x8D2E}, //14932 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x94F8}, //14933 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x7B51}, //14934 #CJK UNIFIED IDEOGRAPH + {0xD740, 0x8B46}, //14935 #CJK UNIFIED IDEOGRAPH + {0xD741, 0x8B47}, //14936 #CJK UNIFIED IDEOGRAPH + {0xD742, 0x8B48}, //14937 #CJK UNIFIED IDEOGRAPH + {0xD743, 0x8B49}, //14938 #CJK UNIFIED IDEOGRAPH + {0xD744, 0x8B4A}, //14939 #CJK UNIFIED IDEOGRAPH + {0xD745, 0x8B4B}, //14940 #CJK UNIFIED IDEOGRAPH + {0xD746, 0x8B4C}, //14941 #CJK UNIFIED IDEOGRAPH + {0xD747, 0x8B4D}, //14942 #CJK UNIFIED IDEOGRAPH + {0xD748, 0x8B4E}, //14943 #CJK UNIFIED IDEOGRAPH + {0xD749, 0x8B4F}, //14944 #CJK UNIFIED IDEOGRAPH + {0xD74A, 0x8B50}, //14945 #CJK UNIFIED IDEOGRAPH + {0xD74B, 0x8B51}, //14946 #CJK UNIFIED IDEOGRAPH + {0xD74C, 0x8B52}, //14947 #CJK UNIFIED IDEOGRAPH + {0xD74D, 0x8B53}, //14948 #CJK UNIFIED IDEOGRAPH + {0xD74E, 0x8B54}, //14949 #CJK UNIFIED IDEOGRAPH + {0xD74F, 0x8B55}, //14950 #CJK UNIFIED IDEOGRAPH + {0xD750, 0x8B56}, //14951 #CJK UNIFIED IDEOGRAPH + {0xD751, 0x8B57}, //14952 #CJK UNIFIED IDEOGRAPH + {0xD752, 0x8B58}, //14953 #CJK UNIFIED IDEOGRAPH + {0xD753, 0x8B59}, //14954 #CJK UNIFIED IDEOGRAPH + {0xD754, 0x8B5A}, //14955 #CJK UNIFIED IDEOGRAPH + {0xD755, 0x8B5B}, //14956 #CJK UNIFIED IDEOGRAPH + {0xD756, 0x8B5C}, //14957 #CJK UNIFIED IDEOGRAPH + {0xD757, 0x8B5D}, //14958 #CJK UNIFIED IDEOGRAPH + {0xD758, 0x8B5E}, //14959 #CJK UNIFIED IDEOGRAPH + {0xD759, 0x8B5F}, //14960 #CJK UNIFIED IDEOGRAPH + {0xD75A, 0x8B60}, //14961 #CJK UNIFIED IDEOGRAPH + {0xD75B, 0x8B61}, //14962 #CJK UNIFIED IDEOGRAPH + {0xD75C, 0x8B62}, //14963 #CJK UNIFIED IDEOGRAPH + {0xD75D, 0x8B63}, //14964 #CJK UNIFIED IDEOGRAPH + {0xD75E, 0x8B64}, //14965 #CJK UNIFIED IDEOGRAPH + {0xD75F, 0x8B65}, //14966 #CJK UNIFIED IDEOGRAPH + {0xD760, 0x8B67}, //14967 #CJK UNIFIED IDEOGRAPH + {0xD761, 0x8B68}, //14968 #CJK UNIFIED IDEOGRAPH + {0xD762, 0x8B69}, //14969 #CJK UNIFIED IDEOGRAPH + {0xD763, 0x8B6A}, //14970 #CJK UNIFIED IDEOGRAPH + {0xD764, 0x8B6B}, //14971 #CJK UNIFIED IDEOGRAPH + {0xD765, 0x8B6D}, //14972 #CJK UNIFIED IDEOGRAPH + {0xD766, 0x8B6E}, //14973 #CJK UNIFIED IDEOGRAPH + {0xD767, 0x8B6F}, //14974 #CJK UNIFIED IDEOGRAPH + {0xD768, 0x8B70}, //14975 #CJK UNIFIED IDEOGRAPH + {0xD769, 0x8B71}, //14976 #CJK UNIFIED IDEOGRAPH + {0xD76A, 0x8B72}, //14977 #CJK UNIFIED IDEOGRAPH + {0xD76B, 0x8B73}, //14978 #CJK UNIFIED IDEOGRAPH + {0xD76C, 0x8B74}, //14979 #CJK UNIFIED IDEOGRAPH + {0xD76D, 0x8B75}, //14980 #CJK UNIFIED IDEOGRAPH + {0xD76E, 0x8B76}, //14981 #CJK UNIFIED IDEOGRAPH + {0xD76F, 0x8B77}, //14982 #CJK UNIFIED IDEOGRAPH + {0xD770, 0x8B78}, //14983 #CJK UNIFIED IDEOGRAPH + {0xD771, 0x8B79}, //14984 #CJK UNIFIED IDEOGRAPH + {0xD772, 0x8B7A}, //14985 #CJK UNIFIED IDEOGRAPH + {0xD773, 0x8B7B}, //14986 #CJK UNIFIED IDEOGRAPH + {0xD774, 0x8B7C}, //14987 #CJK UNIFIED IDEOGRAPH + {0xD775, 0x8B7D}, //14988 #CJK UNIFIED IDEOGRAPH + {0xD776, 0x8B7E}, //14989 #CJK UNIFIED IDEOGRAPH + {0xD777, 0x8B7F}, //14990 #CJK UNIFIED IDEOGRAPH + {0xD778, 0x8B80}, //14991 #CJK UNIFIED IDEOGRAPH + {0xD779, 0x8B81}, //14992 #CJK UNIFIED IDEOGRAPH + {0xD77A, 0x8B82}, //14993 #CJK UNIFIED IDEOGRAPH + {0xD77B, 0x8B83}, //14994 #CJK UNIFIED IDEOGRAPH + {0xD77C, 0x8B84}, //14995 #CJK UNIFIED IDEOGRAPH + {0xD77D, 0x8B85}, //14996 #CJK UNIFIED IDEOGRAPH + {0xD77E, 0x8B86}, //14997 #CJK UNIFIED IDEOGRAPH + {0xD780, 0x8B87}, //14998 #CJK UNIFIED IDEOGRAPH + {0xD781, 0x8B88}, //14999 #CJK UNIFIED IDEOGRAPH + {0xD782, 0x8B89}, //15000 #CJK UNIFIED IDEOGRAPH + {0xD783, 0x8B8A}, //15001 #CJK UNIFIED IDEOGRAPH + {0xD784, 0x8B8B}, //15002 #CJK UNIFIED IDEOGRAPH + {0xD785, 0x8B8C}, //15003 #CJK UNIFIED IDEOGRAPH + {0xD786, 0x8B8D}, //15004 #CJK UNIFIED IDEOGRAPH + {0xD787, 0x8B8E}, //15005 #CJK UNIFIED IDEOGRAPH + {0xD788, 0x8B8F}, //15006 #CJK UNIFIED IDEOGRAPH + {0xD789, 0x8B90}, //15007 #CJK UNIFIED IDEOGRAPH + {0xD78A, 0x8B91}, //15008 #CJK UNIFIED IDEOGRAPH + {0xD78B, 0x8B92}, //15009 #CJK UNIFIED IDEOGRAPH + {0xD78C, 0x8B93}, //15010 #CJK UNIFIED IDEOGRAPH + {0xD78D, 0x8B94}, //15011 #CJK UNIFIED IDEOGRAPH + {0xD78E, 0x8B95}, //15012 #CJK UNIFIED IDEOGRAPH + {0xD78F, 0x8B96}, //15013 #CJK UNIFIED IDEOGRAPH + {0xD790, 0x8B97}, //15014 #CJK UNIFIED IDEOGRAPH + {0xD791, 0x8B98}, //15015 #CJK UNIFIED IDEOGRAPH + {0xD792, 0x8B99}, //15016 #CJK UNIFIED IDEOGRAPH + {0xD793, 0x8B9A}, //15017 #CJK UNIFIED IDEOGRAPH + {0xD794, 0x8B9B}, //15018 #CJK UNIFIED IDEOGRAPH + {0xD795, 0x8B9C}, //15019 #CJK UNIFIED IDEOGRAPH + {0xD796, 0x8B9D}, //15020 #CJK UNIFIED IDEOGRAPH + {0xD797, 0x8B9E}, //15021 #CJK UNIFIED IDEOGRAPH + {0xD798, 0x8B9F}, //15022 #CJK UNIFIED IDEOGRAPH + {0xD799, 0x8BAC}, //15023 #CJK UNIFIED IDEOGRAPH + {0xD79A, 0x8BB1}, //15024 #CJK UNIFIED IDEOGRAPH + {0xD79B, 0x8BBB}, //15025 #CJK UNIFIED IDEOGRAPH + {0xD79C, 0x8BC7}, //15026 #CJK UNIFIED IDEOGRAPH + {0xD79D, 0x8BD0}, //15027 #CJK UNIFIED IDEOGRAPH + {0xD79E, 0x8BEA}, //15028 #CJK UNIFIED IDEOGRAPH + {0xD79F, 0x8C09}, //15029 #CJK UNIFIED IDEOGRAPH + {0xD7A0, 0x8C1E}, //15030 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x4F4F}, //15031 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x6CE8}, //15032 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x795D}, //15033 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x9A7B}, //15034 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x6293}, //15035 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x722A}, //15036 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x62FD}, //15037 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x4E13}, //15038 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x7816}, //15039 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x8F6C}, //15040 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x64B0}, //15041 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x8D5A}, //15042 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x7BC6}, //15043 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x6869}, //15044 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x5E84}, //15045 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x88C5}, //15046 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x5986}, //15047 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x649E}, //15048 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x58EE}, //15049 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x72B6}, //15050 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x690E}, //15051 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x9525}, //15052 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x8FFD}, //15053 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x8D58}, //15054 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x5760}, //15055 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x7F00}, //15056 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x8C06}, //15057 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x51C6}, //15058 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x6349}, //15059 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x62D9}, //15060 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x5353}, //15061 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x684C}, //15062 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x7422}, //15063 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x8301}, //15064 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x914C}, //15065 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x5544}, //15066 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x7740}, //15067 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x707C}, //15068 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x6D4A}, //15069 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x5179}, //15070 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x54A8}, //15071 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x8D44}, //15072 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0x59FF}, //15073 #CJK UNIFIED IDEOGRAPH + {0xD7CC, 0x6ECB}, //15074 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x6DC4}, //15075 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x5B5C}, //15076 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x7D2B}, //15077 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x4ED4}, //15078 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x7C7D}, //15079 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x6ED3}, //15080 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x5B50}, //15081 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x81EA}, //15082 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x6E0D}, //15083 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x5B57}, //15084 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x9B03}, //15085 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x68D5}, //15086 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x8E2A}, //15087 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x5B97}, //15088 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x7EFC}, //15089 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x603B}, //15090 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x7EB5}, //15091 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x90B9}, //15092 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x8D70}, //15093 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x594F}, //15094 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x63CD}, //15095 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x79DF}, //15096 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x8DB3}, //15097 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0x5352}, //15098 #CJK UNIFIED IDEOGRAPH + {0xD7E5, 0x65CF}, //15099 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x7956}, //15100 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x8BC5}, //15101 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x963B}, //15102 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x7EC4}, //15103 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x94BB}, //15104 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x7E82}, //15105 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x5634}, //15106 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x9189}, //15107 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x6700}, //15108 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x7F6A}, //15109 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x5C0A}, //15110 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x9075}, //15111 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x6628}, //15112 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x5DE6}, //15113 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x4F50}, //15114 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x67DE}, //15115 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x505A}, //15116 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x4F5C}, //15117 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x5750}, //15118 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x5EA7}, //15119 #CJK UNIFIED IDEOGRAPH + {0xD840, 0x8C38}, //15120 #CJK UNIFIED IDEOGRAPH + {0xD841, 0x8C39}, //15121 #CJK UNIFIED IDEOGRAPH + {0xD842, 0x8C3A}, //15122 #CJK UNIFIED IDEOGRAPH + {0xD843, 0x8C3B}, //15123 #CJK UNIFIED IDEOGRAPH + {0xD844, 0x8C3C}, //15124 #CJK UNIFIED IDEOGRAPH + {0xD845, 0x8C3D}, //15125 #CJK UNIFIED IDEOGRAPH + {0xD846, 0x8C3E}, //15126 #CJK UNIFIED IDEOGRAPH + {0xD847, 0x8C3F}, //15127 #CJK UNIFIED IDEOGRAPH + {0xD848, 0x8C40}, //15128 #CJK UNIFIED IDEOGRAPH + {0xD849, 0x8C42}, //15129 #CJK UNIFIED IDEOGRAPH + {0xD84A, 0x8C43}, //15130 #CJK UNIFIED IDEOGRAPH + {0xD84B, 0x8C44}, //15131 #CJK UNIFIED IDEOGRAPH + {0xD84C, 0x8C45}, //15132 #CJK UNIFIED IDEOGRAPH + {0xD84D, 0x8C48}, //15133 #CJK UNIFIED IDEOGRAPH + {0xD84E, 0x8C4A}, //15134 #CJK UNIFIED IDEOGRAPH + {0xD84F, 0x8C4B}, //15135 #CJK UNIFIED IDEOGRAPH + {0xD850, 0x8C4D}, //15136 #CJK UNIFIED IDEOGRAPH + {0xD851, 0x8C4E}, //15137 #CJK UNIFIED IDEOGRAPH + {0xD852, 0x8C4F}, //15138 #CJK UNIFIED IDEOGRAPH + {0xD853, 0x8C50}, //15139 #CJK UNIFIED IDEOGRAPH + {0xD854, 0x8C51}, //15140 #CJK UNIFIED IDEOGRAPH + {0xD855, 0x8C52}, //15141 #CJK UNIFIED IDEOGRAPH + {0xD856, 0x8C53}, //15142 #CJK UNIFIED IDEOGRAPH + {0xD857, 0x8C54}, //15143 #CJK UNIFIED IDEOGRAPH + {0xD858, 0x8C56}, //15144 #CJK UNIFIED IDEOGRAPH + {0xD859, 0x8C57}, //15145 #CJK UNIFIED IDEOGRAPH + {0xD85A, 0x8C58}, //15146 #CJK UNIFIED IDEOGRAPH + {0xD85B, 0x8C59}, //15147 #CJK UNIFIED IDEOGRAPH + {0xD85C, 0x8C5B}, //15148 #CJK UNIFIED IDEOGRAPH + {0xD85D, 0x8C5C}, //15149 #CJK UNIFIED IDEOGRAPH + {0xD85E, 0x8C5D}, //15150 #CJK UNIFIED IDEOGRAPH + {0xD85F, 0x8C5E}, //15151 #CJK UNIFIED IDEOGRAPH + {0xD860, 0x8C5F}, //15152 #CJK UNIFIED IDEOGRAPH + {0xD861, 0x8C60}, //15153 #CJK UNIFIED IDEOGRAPH + {0xD862, 0x8C63}, //15154 #CJK UNIFIED IDEOGRAPH + {0xD863, 0x8C64}, //15155 #CJK UNIFIED IDEOGRAPH + {0xD864, 0x8C65}, //15156 #CJK UNIFIED IDEOGRAPH + {0xD865, 0x8C66}, //15157 #CJK UNIFIED IDEOGRAPH + {0xD866, 0x8C67}, //15158 #CJK UNIFIED IDEOGRAPH + {0xD867, 0x8C68}, //15159 #CJK UNIFIED IDEOGRAPH + {0xD868, 0x8C69}, //15160 #CJK UNIFIED IDEOGRAPH + {0xD869, 0x8C6C}, //15161 #CJK UNIFIED IDEOGRAPH + {0xD86A, 0x8C6D}, //15162 #CJK UNIFIED IDEOGRAPH + {0xD86B, 0x8C6E}, //15163 #CJK UNIFIED IDEOGRAPH + {0xD86C, 0x8C6F}, //15164 #CJK UNIFIED IDEOGRAPH + {0xD86D, 0x8C70}, //15165 #CJK UNIFIED IDEOGRAPH + {0xD86E, 0x8C71}, //15166 #CJK UNIFIED IDEOGRAPH + {0xD86F, 0x8C72}, //15167 #CJK UNIFIED IDEOGRAPH + {0xD870, 0x8C74}, //15168 #CJK UNIFIED IDEOGRAPH + {0xD871, 0x8C75}, //15169 #CJK UNIFIED IDEOGRAPH + {0xD872, 0x8C76}, //15170 #CJK UNIFIED IDEOGRAPH + {0xD873, 0x8C77}, //15171 #CJK UNIFIED IDEOGRAPH + {0xD874, 0x8C7B}, //15172 #CJK UNIFIED IDEOGRAPH + {0xD875, 0x8C7C}, //15173 #CJK UNIFIED IDEOGRAPH + {0xD876, 0x8C7D}, //15174 #CJK UNIFIED IDEOGRAPH + {0xD877, 0x8C7E}, //15175 #CJK UNIFIED IDEOGRAPH + {0xD878, 0x8C7F}, //15176 #CJK UNIFIED IDEOGRAPH + {0xD879, 0x8C80}, //15177 #CJK UNIFIED IDEOGRAPH + {0xD87A, 0x8C81}, //15178 #CJK UNIFIED IDEOGRAPH + {0xD87B, 0x8C83}, //15179 #CJK UNIFIED IDEOGRAPH + {0xD87C, 0x8C84}, //15180 #CJK UNIFIED IDEOGRAPH + {0xD87D, 0x8C86}, //15181 #CJK UNIFIED IDEOGRAPH + {0xD87E, 0x8C87}, //15182 #CJK UNIFIED IDEOGRAPH + {0xD880, 0x8C88}, //15183 #CJK UNIFIED IDEOGRAPH + {0xD881, 0x8C8B}, //15184 #CJK UNIFIED IDEOGRAPH + {0xD882, 0x8C8D}, //15185 #CJK UNIFIED IDEOGRAPH + {0xD883, 0x8C8E}, //15186 #CJK UNIFIED IDEOGRAPH + {0xD884, 0x8C8F}, //15187 #CJK UNIFIED IDEOGRAPH + {0xD885, 0x8C90}, //15188 #CJK UNIFIED IDEOGRAPH + {0xD886, 0x8C91}, //15189 #CJK UNIFIED IDEOGRAPH + {0xD887, 0x8C92}, //15190 #CJK UNIFIED IDEOGRAPH + {0xD888, 0x8C93}, //15191 #CJK UNIFIED IDEOGRAPH + {0xD889, 0x8C95}, //15192 #CJK UNIFIED IDEOGRAPH + {0xD88A, 0x8C96}, //15193 #CJK UNIFIED IDEOGRAPH + {0xD88B, 0x8C97}, //15194 #CJK UNIFIED IDEOGRAPH + {0xD88C, 0x8C99}, //15195 #CJK UNIFIED IDEOGRAPH + {0xD88D, 0x8C9A}, //15196 #CJK UNIFIED IDEOGRAPH + {0xD88E, 0x8C9B}, //15197 #CJK UNIFIED IDEOGRAPH + {0xD88F, 0x8C9C}, //15198 #CJK UNIFIED IDEOGRAPH + {0xD890, 0x8C9D}, //15199 #CJK UNIFIED IDEOGRAPH + {0xD891, 0x8C9E}, //15200 #CJK UNIFIED IDEOGRAPH + {0xD892, 0x8C9F}, //15201 #CJK UNIFIED IDEOGRAPH + {0xD893, 0x8CA0}, //15202 #CJK UNIFIED IDEOGRAPH + {0xD894, 0x8CA1}, //15203 #CJK UNIFIED IDEOGRAPH + {0xD895, 0x8CA2}, //15204 #CJK UNIFIED IDEOGRAPH + {0xD896, 0x8CA3}, //15205 #CJK UNIFIED IDEOGRAPH + {0xD897, 0x8CA4}, //15206 #CJK UNIFIED IDEOGRAPH + {0xD898, 0x8CA5}, //15207 #CJK UNIFIED IDEOGRAPH + {0xD899, 0x8CA6}, //15208 #CJK UNIFIED IDEOGRAPH + {0xD89A, 0x8CA7}, //15209 #CJK UNIFIED IDEOGRAPH + {0xD89B, 0x8CA8}, //15210 #CJK UNIFIED IDEOGRAPH + {0xD89C, 0x8CA9}, //15211 #CJK UNIFIED IDEOGRAPH + {0xD89D, 0x8CAA}, //15212 #CJK UNIFIED IDEOGRAPH + {0xD89E, 0x8CAB}, //15213 #CJK UNIFIED IDEOGRAPH + {0xD89F, 0x8CAC}, //15214 #CJK UNIFIED IDEOGRAPH + {0xD8A0, 0x8CAD}, //15215 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x4E8D}, //15216 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x4E0C}, //15217 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x5140}, //15218 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x4E10}, //15219 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x5EFF}, //15220 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x5345}, //15221 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x4E15}, //15222 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x4E98}, //15223 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x4E1E}, //15224 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x9B32}, //15225 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x5B6C}, //15226 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x5669}, //15227 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x4E28}, //15228 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x79BA}, //15229 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x4E3F}, //15230 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x5315}, //15231 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x4E47}, //15232 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x592D}, //15233 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x723B}, //15234 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x536E}, //15235 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x6C10}, //15236 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x56DF}, //15237 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x80E4}, //15238 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x9997}, //15239 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x6BD3}, //15240 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x777E}, //15241 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x9F17}, //15242 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x4E36}, //15243 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x4E9F}, //15244 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x9F10}, //15245 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x4E5C}, //15246 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x4E69}, //15247 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x4E93}, //15248 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x8288}, //15249 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x5B5B}, //15250 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x556C}, //15251 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x560F}, //15252 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x4EC4}, //15253 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x538D}, //15254 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x539D}, //15255 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x53A3}, //15256 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x53A5}, //15257 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x53AE}, //15258 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x9765}, //15259 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x8D5D}, //15260 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x531A}, //15261 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x53F5}, //15262 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x5326}, //15263 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x532E}, //15264 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x533E}, //15265 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x8D5C}, //15266 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x5366}, //15267 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x5363}, //15268 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x5202}, //15269 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x5208}, //15270 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x520E}, //15271 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x522D}, //15272 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5233}, //15273 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x523F}, //15274 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x5240}, //15275 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x524C}, //15276 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x525E}, //15277 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x5261}, //15278 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x525C}, //15279 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x84AF}, //15280 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x527D}, //15281 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x5282}, //15282 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x5281}, //15283 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x5290}, //15284 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x5293}, //15285 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x5182}, //15286 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x7F54}, //15287 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x4EBB}, //15288 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x4EC3}, //15289 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x4EC9}, //15290 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x4EC2}, //15291 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x4EE8}, //15292 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x4EE1}, //15293 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x4EEB}, //15294 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x4EDE}, //15295 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x4F1B}, //15296 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x4EF3}, //15297 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x4F22}, //15298 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x4F64}, //15299 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x4EF5}, //15300 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x4F25}, //15301 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x4F27}, //15302 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x4F09}, //15303 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x4F2B}, //15304 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x4F5E}, //15305 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x4F67}, //15306 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x6538}, //15307 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x4F5A}, //15308 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x4F5D}, //15309 #CJK UNIFIED IDEOGRAPH + {0xD940, 0x8CAE}, //15310 #CJK UNIFIED IDEOGRAPH + {0xD941, 0x8CAF}, //15311 #CJK UNIFIED IDEOGRAPH + {0xD942, 0x8CB0}, //15312 #CJK UNIFIED IDEOGRAPH + {0xD943, 0x8CB1}, //15313 #CJK UNIFIED IDEOGRAPH + {0xD944, 0x8CB2}, //15314 #CJK UNIFIED IDEOGRAPH + {0xD945, 0x8CB3}, //15315 #CJK UNIFIED IDEOGRAPH + {0xD946, 0x8CB4}, //15316 #CJK UNIFIED IDEOGRAPH + {0xD947, 0x8CB5}, //15317 #CJK UNIFIED IDEOGRAPH + {0xD948, 0x8CB6}, //15318 #CJK UNIFIED IDEOGRAPH + {0xD949, 0x8CB7}, //15319 #CJK UNIFIED IDEOGRAPH + {0xD94A, 0x8CB8}, //15320 #CJK UNIFIED IDEOGRAPH + {0xD94B, 0x8CB9}, //15321 #CJK UNIFIED IDEOGRAPH + {0xD94C, 0x8CBA}, //15322 #CJK UNIFIED IDEOGRAPH + {0xD94D, 0x8CBB}, //15323 #CJK UNIFIED IDEOGRAPH + {0xD94E, 0x8CBC}, //15324 #CJK UNIFIED IDEOGRAPH + {0xD94F, 0x8CBD}, //15325 #CJK UNIFIED IDEOGRAPH + {0xD950, 0x8CBE}, //15326 #CJK UNIFIED IDEOGRAPH + {0xD951, 0x8CBF}, //15327 #CJK UNIFIED IDEOGRAPH + {0xD952, 0x8CC0}, //15328 #CJK UNIFIED IDEOGRAPH + {0xD953, 0x8CC1}, //15329 #CJK UNIFIED IDEOGRAPH + {0xD954, 0x8CC2}, //15330 #CJK UNIFIED IDEOGRAPH + {0xD955, 0x8CC3}, //15331 #CJK UNIFIED IDEOGRAPH + {0xD956, 0x8CC4}, //15332 #CJK UNIFIED IDEOGRAPH + {0xD957, 0x8CC5}, //15333 #CJK UNIFIED IDEOGRAPH + {0xD958, 0x8CC6}, //15334 #CJK UNIFIED IDEOGRAPH + {0xD959, 0x8CC7}, //15335 #CJK UNIFIED IDEOGRAPH + {0xD95A, 0x8CC8}, //15336 #CJK UNIFIED IDEOGRAPH + {0xD95B, 0x8CC9}, //15337 #CJK UNIFIED IDEOGRAPH + {0xD95C, 0x8CCA}, //15338 #CJK UNIFIED IDEOGRAPH + {0xD95D, 0x8CCB}, //15339 #CJK UNIFIED IDEOGRAPH + {0xD95E, 0x8CCC}, //15340 #CJK UNIFIED IDEOGRAPH + {0xD95F, 0x8CCD}, //15341 #CJK UNIFIED IDEOGRAPH + {0xD960, 0x8CCE}, //15342 #CJK UNIFIED IDEOGRAPH + {0xD961, 0x8CCF}, //15343 #CJK UNIFIED IDEOGRAPH + {0xD962, 0x8CD0}, //15344 #CJK UNIFIED IDEOGRAPH + {0xD963, 0x8CD1}, //15345 #CJK UNIFIED IDEOGRAPH + {0xD964, 0x8CD2}, //15346 #CJK UNIFIED IDEOGRAPH + {0xD965, 0x8CD3}, //15347 #CJK UNIFIED IDEOGRAPH + {0xD966, 0x8CD4}, //15348 #CJK UNIFIED IDEOGRAPH + {0xD967, 0x8CD5}, //15349 #CJK UNIFIED IDEOGRAPH + {0xD968, 0x8CD6}, //15350 #CJK UNIFIED IDEOGRAPH + {0xD969, 0x8CD7}, //15351 #CJK UNIFIED IDEOGRAPH + {0xD96A, 0x8CD8}, //15352 #CJK UNIFIED IDEOGRAPH + {0xD96B, 0x8CD9}, //15353 #CJK UNIFIED IDEOGRAPH + {0xD96C, 0x8CDA}, //15354 #CJK UNIFIED IDEOGRAPH + {0xD96D, 0x8CDB}, //15355 #CJK UNIFIED IDEOGRAPH + {0xD96E, 0x8CDC}, //15356 #CJK UNIFIED IDEOGRAPH + {0xD96F, 0x8CDD}, //15357 #CJK UNIFIED IDEOGRAPH + {0xD970, 0x8CDE}, //15358 #CJK UNIFIED IDEOGRAPH + {0xD971, 0x8CDF}, //15359 #CJK UNIFIED IDEOGRAPH + {0xD972, 0x8CE0}, //15360 #CJK UNIFIED IDEOGRAPH + {0xD973, 0x8CE1}, //15361 #CJK UNIFIED IDEOGRAPH + {0xD974, 0x8CE2}, //15362 #CJK UNIFIED IDEOGRAPH + {0xD975, 0x8CE3}, //15363 #CJK UNIFIED IDEOGRAPH + {0xD976, 0x8CE4}, //15364 #CJK UNIFIED IDEOGRAPH + {0xD977, 0x8CE5}, //15365 #CJK UNIFIED IDEOGRAPH + {0xD978, 0x8CE6}, //15366 #CJK UNIFIED IDEOGRAPH + {0xD979, 0x8CE7}, //15367 #CJK UNIFIED IDEOGRAPH + {0xD97A, 0x8CE8}, //15368 #CJK UNIFIED IDEOGRAPH + {0xD97B, 0x8CE9}, //15369 #CJK UNIFIED IDEOGRAPH + {0xD97C, 0x8CEA}, //15370 #CJK UNIFIED IDEOGRAPH + {0xD97D, 0x8CEB}, //15371 #CJK UNIFIED IDEOGRAPH + {0xD97E, 0x8CEC}, //15372 #CJK UNIFIED IDEOGRAPH + {0xD980, 0x8CED}, //15373 #CJK UNIFIED IDEOGRAPH + {0xD981, 0x8CEE}, //15374 #CJK UNIFIED IDEOGRAPH + {0xD982, 0x8CEF}, //15375 #CJK UNIFIED IDEOGRAPH + {0xD983, 0x8CF0}, //15376 #CJK UNIFIED IDEOGRAPH + {0xD984, 0x8CF1}, //15377 #CJK UNIFIED IDEOGRAPH + {0xD985, 0x8CF2}, //15378 #CJK UNIFIED IDEOGRAPH + {0xD986, 0x8CF3}, //15379 #CJK UNIFIED IDEOGRAPH + {0xD987, 0x8CF4}, //15380 #CJK UNIFIED IDEOGRAPH + {0xD988, 0x8CF5}, //15381 #CJK UNIFIED IDEOGRAPH + {0xD989, 0x8CF6}, //15382 #CJK UNIFIED IDEOGRAPH + {0xD98A, 0x8CF7}, //15383 #CJK UNIFIED IDEOGRAPH + {0xD98B, 0x8CF8}, //15384 #CJK UNIFIED IDEOGRAPH + {0xD98C, 0x8CF9}, //15385 #CJK UNIFIED IDEOGRAPH + {0xD98D, 0x8CFA}, //15386 #CJK UNIFIED IDEOGRAPH + {0xD98E, 0x8CFB}, //15387 #CJK UNIFIED IDEOGRAPH + {0xD98F, 0x8CFC}, //15388 #CJK UNIFIED IDEOGRAPH + {0xD990, 0x8CFD}, //15389 #CJK UNIFIED IDEOGRAPH + {0xD991, 0x8CFE}, //15390 #CJK UNIFIED IDEOGRAPH + {0xD992, 0x8CFF}, //15391 #CJK UNIFIED IDEOGRAPH + {0xD993, 0x8D00}, //15392 #CJK UNIFIED IDEOGRAPH + {0xD994, 0x8D01}, //15393 #CJK UNIFIED IDEOGRAPH + {0xD995, 0x8D02}, //15394 #CJK UNIFIED IDEOGRAPH + {0xD996, 0x8D03}, //15395 #CJK UNIFIED IDEOGRAPH + {0xD997, 0x8D04}, //15396 #CJK UNIFIED IDEOGRAPH + {0xD998, 0x8D05}, //15397 #CJK UNIFIED IDEOGRAPH + {0xD999, 0x8D06}, //15398 #CJK UNIFIED IDEOGRAPH + {0xD99A, 0x8D07}, //15399 #CJK UNIFIED IDEOGRAPH + {0xD99B, 0x8D08}, //15400 #CJK UNIFIED IDEOGRAPH + {0xD99C, 0x8D09}, //15401 #CJK UNIFIED IDEOGRAPH + {0xD99D, 0x8D0A}, //15402 #CJK UNIFIED IDEOGRAPH + {0xD99E, 0x8D0B}, //15403 #CJK UNIFIED IDEOGRAPH + {0xD99F, 0x8D0C}, //15404 #CJK UNIFIED IDEOGRAPH + {0xD9A0, 0x8D0D}, //15405 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x4F5F}, //15406 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x4F57}, //15407 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x4F32}, //15408 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x4F3D}, //15409 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x4F76}, //15410 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x4F74}, //15411 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x4F91}, //15412 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x4F89}, //15413 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x4F83}, //15414 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x4F8F}, //15415 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x4F7E}, //15416 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x4F7B}, //15417 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x4FAA}, //15418 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x4F7C}, //15419 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x4FAC}, //15420 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x4F94}, //15421 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x4FE6}, //15422 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x4FE8}, //15423 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x4FEA}, //15424 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x4FC5}, //15425 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x4FDA}, //15426 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x4FE3}, //15427 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x4FDC}, //15428 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x4FD1}, //15429 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x4FDF}, //15430 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x4FF8}, //15431 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x5029}, //15432 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x504C}, //15433 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x4FF3}, //15434 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x502C}, //15435 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x500F}, //15436 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x502E}, //15437 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x502D}, //15438 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x4FFE}, //15439 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x501C}, //15440 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x500C}, //15441 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x5025}, //15442 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x5028}, //15443 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x507E}, //15444 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x5043}, //15445 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x5055}, //15446 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x5048}, //15447 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x504E}, //15448 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x506C}, //15449 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x507B}, //15450 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x50A5}, //15451 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x50A7}, //15452 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x50A9}, //15453 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x50BA}, //15454 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x50D6}, //15455 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x5106}, //15456 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x50ED}, //15457 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x50EC}, //15458 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x50E6}, //15459 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x50EE}, //15460 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x5107}, //15461 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x510B}, //15462 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x4EDD}, //15463 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6C3D}, //15464 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x4F58}, //15465 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x4F65}, //15466 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x4FCE}, //15467 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x9FA0}, //15468 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x6C46}, //15469 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x7C74}, //15470 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x516E}, //15471 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x5DFD}, //15472 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x9EC9}, //15473 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x9998}, //15474 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x5181}, //15475 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x5914}, //15476 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x52F9}, //15477 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x530D}, //15478 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x8A07}, //15479 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x5310}, //15480 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x51EB}, //15481 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x5919}, //15482 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x5155}, //15483 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x4EA0}, //15484 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x5156}, //15485 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x4EB3}, //15486 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x886E}, //15487 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x88A4}, //15488 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x4EB5}, //15489 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x8114}, //15490 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x88D2}, //15491 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x7980}, //15492 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x5B34}, //15493 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x8803}, //15494 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x7FB8}, //15495 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x51AB}, //15496 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x51B1}, //15497 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x51BD}, //15498 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x51BC}, //15499 #CJK UNIFIED IDEOGRAPH + {0xDA40, 0x8D0E}, //15500 #CJK UNIFIED IDEOGRAPH + {0xDA41, 0x8D0F}, //15501 #CJK UNIFIED IDEOGRAPH + {0xDA42, 0x8D10}, //15502 #CJK UNIFIED IDEOGRAPH + {0xDA43, 0x8D11}, //15503 #CJK UNIFIED IDEOGRAPH + {0xDA44, 0x8D12}, //15504 #CJK UNIFIED IDEOGRAPH + {0xDA45, 0x8D13}, //15505 #CJK UNIFIED IDEOGRAPH + {0xDA46, 0x8D14}, //15506 #CJK UNIFIED IDEOGRAPH + {0xDA47, 0x8D15}, //15507 #CJK UNIFIED IDEOGRAPH + {0xDA48, 0x8D16}, //15508 #CJK UNIFIED IDEOGRAPH + {0xDA49, 0x8D17}, //15509 #CJK UNIFIED IDEOGRAPH + {0xDA4A, 0x8D18}, //15510 #CJK UNIFIED IDEOGRAPH + {0xDA4B, 0x8D19}, //15511 #CJK UNIFIED IDEOGRAPH + {0xDA4C, 0x8D1A}, //15512 #CJK UNIFIED IDEOGRAPH + {0xDA4D, 0x8D1B}, //15513 #CJK UNIFIED IDEOGRAPH + {0xDA4E, 0x8D1C}, //15514 #CJK UNIFIED IDEOGRAPH + {0xDA4F, 0x8D20}, //15515 #CJK UNIFIED IDEOGRAPH + {0xDA50, 0x8D51}, //15516 #CJK UNIFIED IDEOGRAPH + {0xDA51, 0x8D52}, //15517 #CJK UNIFIED IDEOGRAPH + {0xDA52, 0x8D57}, //15518 #CJK UNIFIED IDEOGRAPH + {0xDA53, 0x8D5F}, //15519 #CJK UNIFIED IDEOGRAPH + {0xDA54, 0x8D65}, //15520 #CJK UNIFIED IDEOGRAPH + {0xDA55, 0x8D68}, //15521 #CJK UNIFIED IDEOGRAPH + {0xDA56, 0x8D69}, //15522 #CJK UNIFIED IDEOGRAPH + {0xDA57, 0x8D6A}, //15523 #CJK UNIFIED IDEOGRAPH + {0xDA58, 0x8D6C}, //15524 #CJK UNIFIED IDEOGRAPH + {0xDA59, 0x8D6E}, //15525 #CJK UNIFIED IDEOGRAPH + {0xDA5A, 0x8D6F}, //15526 #CJK UNIFIED IDEOGRAPH + {0xDA5B, 0x8D71}, //15527 #CJK UNIFIED IDEOGRAPH + {0xDA5C, 0x8D72}, //15528 #CJK UNIFIED IDEOGRAPH + {0xDA5D, 0x8D78}, //15529 #CJK UNIFIED IDEOGRAPH + {0xDA5E, 0x8D79}, //15530 #CJK UNIFIED IDEOGRAPH + {0xDA5F, 0x8D7A}, //15531 #CJK UNIFIED IDEOGRAPH + {0xDA60, 0x8D7B}, //15532 #CJK UNIFIED IDEOGRAPH + {0xDA61, 0x8D7C}, //15533 #CJK UNIFIED IDEOGRAPH + {0xDA62, 0x8D7D}, //15534 #CJK UNIFIED IDEOGRAPH + {0xDA63, 0x8D7E}, //15535 #CJK UNIFIED IDEOGRAPH + {0xDA64, 0x8D7F}, //15536 #CJK UNIFIED IDEOGRAPH + {0xDA65, 0x8D80}, //15537 #CJK UNIFIED IDEOGRAPH + {0xDA66, 0x8D82}, //15538 #CJK UNIFIED IDEOGRAPH + {0xDA67, 0x8D83}, //15539 #CJK UNIFIED IDEOGRAPH + {0xDA68, 0x8D86}, //15540 #CJK UNIFIED IDEOGRAPH + {0xDA69, 0x8D87}, //15541 #CJK UNIFIED IDEOGRAPH + {0xDA6A, 0x8D88}, //15542 #CJK UNIFIED IDEOGRAPH + {0xDA6B, 0x8D89}, //15543 #CJK UNIFIED IDEOGRAPH + {0xDA6C, 0x8D8C}, //15544 #CJK UNIFIED IDEOGRAPH + {0xDA6D, 0x8D8D}, //15545 #CJK UNIFIED IDEOGRAPH + {0xDA6E, 0x8D8E}, //15546 #CJK UNIFIED IDEOGRAPH + {0xDA6F, 0x8D8F}, //15547 #CJK UNIFIED IDEOGRAPH + {0xDA70, 0x8D90}, //15548 #CJK UNIFIED IDEOGRAPH + {0xDA71, 0x8D92}, //15549 #CJK UNIFIED IDEOGRAPH + {0xDA72, 0x8D93}, //15550 #CJK UNIFIED IDEOGRAPH + {0xDA73, 0x8D95}, //15551 #CJK UNIFIED IDEOGRAPH + {0xDA74, 0x8D96}, //15552 #CJK UNIFIED IDEOGRAPH + {0xDA75, 0x8D97}, //15553 #CJK UNIFIED IDEOGRAPH + {0xDA76, 0x8D98}, //15554 #CJK UNIFIED IDEOGRAPH + {0xDA77, 0x8D99}, //15555 #CJK UNIFIED IDEOGRAPH + {0xDA78, 0x8D9A}, //15556 #CJK UNIFIED IDEOGRAPH + {0xDA79, 0x8D9B}, //15557 #CJK UNIFIED IDEOGRAPH + {0xDA7A, 0x8D9C}, //15558 #CJK UNIFIED IDEOGRAPH + {0xDA7B, 0x8D9D}, //15559 #CJK UNIFIED IDEOGRAPH + {0xDA7C, 0x8D9E}, //15560 #CJK UNIFIED IDEOGRAPH + {0xDA7D, 0x8DA0}, //15561 #CJK UNIFIED IDEOGRAPH + {0xDA7E, 0x8DA1}, //15562 #CJK UNIFIED IDEOGRAPH + {0xDA80, 0x8DA2}, //15563 #CJK UNIFIED IDEOGRAPH + {0xDA81, 0x8DA4}, //15564 #CJK UNIFIED IDEOGRAPH + {0xDA82, 0x8DA5}, //15565 #CJK UNIFIED IDEOGRAPH + {0xDA83, 0x8DA6}, //15566 #CJK UNIFIED IDEOGRAPH + {0xDA84, 0x8DA7}, //15567 #CJK UNIFIED IDEOGRAPH + {0xDA85, 0x8DA8}, //15568 #CJK UNIFIED IDEOGRAPH + {0xDA86, 0x8DA9}, //15569 #CJK UNIFIED IDEOGRAPH + {0xDA87, 0x8DAA}, //15570 #CJK UNIFIED IDEOGRAPH + {0xDA88, 0x8DAB}, //15571 #CJK UNIFIED IDEOGRAPH + {0xDA89, 0x8DAC}, //15572 #CJK UNIFIED IDEOGRAPH + {0xDA8A, 0x8DAD}, //15573 #CJK UNIFIED IDEOGRAPH + {0xDA8B, 0x8DAE}, //15574 #CJK UNIFIED IDEOGRAPH + {0xDA8C, 0x8DAF}, //15575 #CJK UNIFIED IDEOGRAPH + {0xDA8D, 0x8DB0}, //15576 #CJK UNIFIED IDEOGRAPH + {0xDA8E, 0x8DB2}, //15577 #CJK UNIFIED IDEOGRAPH + {0xDA8F, 0x8DB6}, //15578 #CJK UNIFIED IDEOGRAPH + {0xDA90, 0x8DB7}, //15579 #CJK UNIFIED IDEOGRAPH + {0xDA91, 0x8DB9}, //15580 #CJK UNIFIED IDEOGRAPH + {0xDA92, 0x8DBB}, //15581 #CJK UNIFIED IDEOGRAPH + {0xDA93, 0x8DBD}, //15582 #CJK UNIFIED IDEOGRAPH + {0xDA94, 0x8DC0}, //15583 #CJK UNIFIED IDEOGRAPH + {0xDA95, 0x8DC1}, //15584 #CJK UNIFIED IDEOGRAPH + {0xDA96, 0x8DC2}, //15585 #CJK UNIFIED IDEOGRAPH + {0xDA97, 0x8DC5}, //15586 #CJK UNIFIED IDEOGRAPH + {0xDA98, 0x8DC7}, //15587 #CJK UNIFIED IDEOGRAPH + {0xDA99, 0x8DC8}, //15588 #CJK UNIFIED IDEOGRAPH + {0xDA9A, 0x8DC9}, //15589 #CJK UNIFIED IDEOGRAPH + {0xDA9B, 0x8DCA}, //15590 #CJK UNIFIED IDEOGRAPH + {0xDA9C, 0x8DCD}, //15591 #CJK UNIFIED IDEOGRAPH + {0xDA9D, 0x8DD0}, //15592 #CJK UNIFIED IDEOGRAPH + {0xDA9E, 0x8DD2}, //15593 #CJK UNIFIED IDEOGRAPH + {0xDA9F, 0x8DD3}, //15594 #CJK UNIFIED IDEOGRAPH + {0xDAA0, 0x8DD4}, //15595 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x51C7}, //15596 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x5196}, //15597 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x51A2}, //15598 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x51A5}, //15599 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x8BA0}, //15600 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x8BA6}, //15601 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x8BA7}, //15602 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x8BAA}, //15603 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x8BB4}, //15604 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x8BB5}, //15605 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x8BB7}, //15606 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x8BC2}, //15607 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x8BC3}, //15608 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x8BCB}, //15609 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x8BCF}, //15610 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x8BCE}, //15611 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x8BD2}, //15612 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x8BD3}, //15613 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x8BD4}, //15614 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x8BD6}, //15615 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x8BD8}, //15616 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x8BD9}, //15617 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x8BDC}, //15618 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x8BDF}, //15619 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x8BE0}, //15620 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x8BE4}, //15621 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x8BE8}, //15622 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x8BE9}, //15623 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x8BEE}, //15624 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x8BF0}, //15625 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x8BF3}, //15626 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x8BF6}, //15627 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x8BF9}, //15628 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x8BFC}, //15629 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x8BFF}, //15630 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x8C00}, //15631 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x8C02}, //15632 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x8C04}, //15633 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x8C07}, //15634 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x8C0C}, //15635 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x8C0F}, //15636 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x8C11}, //15637 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x8C12}, //15638 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x8C14}, //15639 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x8C15}, //15640 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x8C16}, //15641 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x8C19}, //15642 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x8C1B}, //15643 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x8C18}, //15644 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x8C1D}, //15645 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x8C1F}, //15646 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x8C20}, //15647 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x8C21}, //15648 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x8C25}, //15649 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x8C27}, //15650 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x8C2A}, //15651 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x8C2B}, //15652 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x8C2E}, //15653 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x8C2F}, //15654 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x8C32}, //15655 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x8C33}, //15656 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x8C35}, //15657 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x8C36}, //15658 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x5369}, //15659 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x537A}, //15660 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x961D}, //15661 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x9622}, //15662 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x9621}, //15663 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x9631}, //15664 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x962A}, //15665 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x963D}, //15666 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x963C}, //15667 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x9642}, //15668 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x9649}, //15669 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x9654}, //15670 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x965F}, //15671 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x9667}, //15672 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x966C}, //15673 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x9672}, //15674 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x9674}, //15675 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x9688}, //15676 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x968D}, //15677 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x9697}, //15678 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x96B0}, //15679 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x9097}, //15680 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x909B}, //15681 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x909D}, //15682 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x9099}, //15683 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x90AC}, //15684 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x90A1}, //15685 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x90B4}, //15686 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x90B3}, //15687 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x90B6}, //15688 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x90BA}, //15689 #CJK UNIFIED IDEOGRAPH + {0xDB40, 0x8DD5}, //15690 #CJK UNIFIED IDEOGRAPH + {0xDB41, 0x8DD8}, //15691 #CJK UNIFIED IDEOGRAPH + {0xDB42, 0x8DD9}, //15692 #CJK UNIFIED IDEOGRAPH + {0xDB43, 0x8DDC}, //15693 #CJK UNIFIED IDEOGRAPH + {0xDB44, 0x8DE0}, //15694 #CJK UNIFIED IDEOGRAPH + {0xDB45, 0x8DE1}, //15695 #CJK UNIFIED IDEOGRAPH + {0xDB46, 0x8DE2}, //15696 #CJK UNIFIED IDEOGRAPH + {0xDB47, 0x8DE5}, //15697 #CJK UNIFIED IDEOGRAPH + {0xDB48, 0x8DE6}, //15698 #CJK UNIFIED IDEOGRAPH + {0xDB49, 0x8DE7}, //15699 #CJK UNIFIED IDEOGRAPH + {0xDB4A, 0x8DE9}, //15700 #CJK UNIFIED IDEOGRAPH + {0xDB4B, 0x8DED}, //15701 #CJK UNIFIED IDEOGRAPH + {0xDB4C, 0x8DEE}, //15702 #CJK UNIFIED IDEOGRAPH + {0xDB4D, 0x8DF0}, //15703 #CJK UNIFIED IDEOGRAPH + {0xDB4E, 0x8DF1}, //15704 #CJK UNIFIED IDEOGRAPH + {0xDB4F, 0x8DF2}, //15705 #CJK UNIFIED IDEOGRAPH + {0xDB50, 0x8DF4}, //15706 #CJK UNIFIED IDEOGRAPH + {0xDB51, 0x8DF6}, //15707 #CJK UNIFIED IDEOGRAPH + {0xDB52, 0x8DFC}, //15708 #CJK UNIFIED IDEOGRAPH + {0xDB53, 0x8DFE}, //15709 #CJK UNIFIED IDEOGRAPH + {0xDB54, 0x8DFF}, //15710 #CJK UNIFIED IDEOGRAPH + {0xDB55, 0x8E00}, //15711 #CJK UNIFIED IDEOGRAPH + {0xDB56, 0x8E01}, //15712 #CJK UNIFIED IDEOGRAPH + {0xDB57, 0x8E02}, //15713 #CJK UNIFIED IDEOGRAPH + {0xDB58, 0x8E03}, //15714 #CJK UNIFIED IDEOGRAPH + {0xDB59, 0x8E04}, //15715 #CJK UNIFIED IDEOGRAPH + {0xDB5A, 0x8E06}, //15716 #CJK UNIFIED IDEOGRAPH + {0xDB5B, 0x8E07}, //15717 #CJK UNIFIED IDEOGRAPH + {0xDB5C, 0x8E08}, //15718 #CJK UNIFIED IDEOGRAPH + {0xDB5D, 0x8E0B}, //15719 #CJK UNIFIED IDEOGRAPH + {0xDB5E, 0x8E0D}, //15720 #CJK UNIFIED IDEOGRAPH + {0xDB5F, 0x8E0E}, //15721 #CJK UNIFIED IDEOGRAPH + {0xDB60, 0x8E10}, //15722 #CJK UNIFIED IDEOGRAPH + {0xDB61, 0x8E11}, //15723 #CJK UNIFIED IDEOGRAPH + {0xDB62, 0x8E12}, //15724 #CJK UNIFIED IDEOGRAPH + {0xDB63, 0x8E13}, //15725 #CJK UNIFIED IDEOGRAPH + {0xDB64, 0x8E15}, //15726 #CJK UNIFIED IDEOGRAPH + {0xDB65, 0x8E16}, //15727 #CJK UNIFIED IDEOGRAPH + {0xDB66, 0x8E17}, //15728 #CJK UNIFIED IDEOGRAPH + {0xDB67, 0x8E18}, //15729 #CJK UNIFIED IDEOGRAPH + {0xDB68, 0x8E19}, //15730 #CJK UNIFIED IDEOGRAPH + {0xDB69, 0x8E1A}, //15731 #CJK UNIFIED IDEOGRAPH + {0xDB6A, 0x8E1B}, //15732 #CJK UNIFIED IDEOGRAPH + {0xDB6B, 0x8E1C}, //15733 #CJK UNIFIED IDEOGRAPH + {0xDB6C, 0x8E20}, //15734 #CJK UNIFIED IDEOGRAPH + {0xDB6D, 0x8E21}, //15735 #CJK UNIFIED IDEOGRAPH + {0xDB6E, 0x8E24}, //15736 #CJK UNIFIED IDEOGRAPH + {0xDB6F, 0x8E25}, //15737 #CJK UNIFIED IDEOGRAPH + {0xDB70, 0x8E26}, //15738 #CJK UNIFIED IDEOGRAPH + {0xDB71, 0x8E27}, //15739 #CJK UNIFIED IDEOGRAPH + {0xDB72, 0x8E28}, //15740 #CJK UNIFIED IDEOGRAPH + {0xDB73, 0x8E2B}, //15741 #CJK UNIFIED IDEOGRAPH + {0xDB74, 0x8E2D}, //15742 #CJK UNIFIED IDEOGRAPH + {0xDB75, 0x8E30}, //15743 #CJK UNIFIED IDEOGRAPH + {0xDB76, 0x8E32}, //15744 #CJK UNIFIED IDEOGRAPH + {0xDB77, 0x8E33}, //15745 #CJK UNIFIED IDEOGRAPH + {0xDB78, 0x8E34}, //15746 #CJK UNIFIED IDEOGRAPH + {0xDB79, 0x8E36}, //15747 #CJK UNIFIED IDEOGRAPH + {0xDB7A, 0x8E37}, //15748 #CJK UNIFIED IDEOGRAPH + {0xDB7B, 0x8E38}, //15749 #CJK UNIFIED IDEOGRAPH + {0xDB7C, 0x8E3B}, //15750 #CJK UNIFIED IDEOGRAPH + {0xDB7D, 0x8E3C}, //15751 #CJK UNIFIED IDEOGRAPH + {0xDB7E, 0x8E3E}, //15752 #CJK UNIFIED IDEOGRAPH + {0xDB80, 0x8E3F}, //15753 #CJK UNIFIED IDEOGRAPH + {0xDB81, 0x8E43}, //15754 #CJK UNIFIED IDEOGRAPH + {0xDB82, 0x8E45}, //15755 #CJK UNIFIED IDEOGRAPH + {0xDB83, 0x8E46}, //15756 #CJK UNIFIED IDEOGRAPH + {0xDB84, 0x8E4C}, //15757 #CJK UNIFIED IDEOGRAPH + {0xDB85, 0x8E4D}, //15758 #CJK UNIFIED IDEOGRAPH + {0xDB86, 0x8E4E}, //15759 #CJK UNIFIED IDEOGRAPH + {0xDB87, 0x8E4F}, //15760 #CJK UNIFIED IDEOGRAPH + {0xDB88, 0x8E50}, //15761 #CJK UNIFIED IDEOGRAPH + {0xDB89, 0x8E53}, //15762 #CJK UNIFIED IDEOGRAPH + {0xDB8A, 0x8E54}, //15763 #CJK UNIFIED IDEOGRAPH + {0xDB8B, 0x8E55}, //15764 #CJK UNIFIED IDEOGRAPH + {0xDB8C, 0x8E56}, //15765 #CJK UNIFIED IDEOGRAPH + {0xDB8D, 0x8E57}, //15766 #CJK UNIFIED IDEOGRAPH + {0xDB8E, 0x8E58}, //15767 #CJK UNIFIED IDEOGRAPH + {0xDB8F, 0x8E5A}, //15768 #CJK UNIFIED IDEOGRAPH + {0xDB90, 0x8E5B}, //15769 #CJK UNIFIED IDEOGRAPH + {0xDB91, 0x8E5C}, //15770 #CJK UNIFIED IDEOGRAPH + {0xDB92, 0x8E5D}, //15771 #CJK UNIFIED IDEOGRAPH + {0xDB93, 0x8E5E}, //15772 #CJK UNIFIED IDEOGRAPH + {0xDB94, 0x8E5F}, //15773 #CJK UNIFIED IDEOGRAPH + {0xDB95, 0x8E60}, //15774 #CJK UNIFIED IDEOGRAPH + {0xDB96, 0x8E61}, //15775 #CJK UNIFIED IDEOGRAPH + {0xDB97, 0x8E62}, //15776 #CJK UNIFIED IDEOGRAPH + {0xDB98, 0x8E63}, //15777 #CJK UNIFIED IDEOGRAPH + {0xDB99, 0x8E64}, //15778 #CJK UNIFIED IDEOGRAPH + {0xDB9A, 0x8E65}, //15779 #CJK UNIFIED IDEOGRAPH + {0xDB9B, 0x8E67}, //15780 #CJK UNIFIED IDEOGRAPH + {0xDB9C, 0x8E68}, //15781 #CJK UNIFIED IDEOGRAPH + {0xDB9D, 0x8E6A}, //15782 #CJK UNIFIED IDEOGRAPH + {0xDB9E, 0x8E6B}, //15783 #CJK UNIFIED IDEOGRAPH + {0xDB9F, 0x8E6E}, //15784 #CJK UNIFIED IDEOGRAPH + {0xDBA0, 0x8E71}, //15785 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x90B8}, //15786 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x90B0}, //15787 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x90CF}, //15788 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x90C5}, //15789 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x90BE}, //15790 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x90D0}, //15791 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x90C4}, //15792 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x90C7}, //15793 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x90D3}, //15794 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x90E6}, //15795 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x90E2}, //15796 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x90DC}, //15797 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x90D7}, //15798 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x90DB}, //15799 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x90EB}, //15800 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x90EF}, //15801 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x90FE}, //15802 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x9104}, //15803 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x9122}, //15804 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x911E}, //15805 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x9123}, //15806 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x9131}, //15807 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x912F}, //15808 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x9139}, //15809 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x9143}, //15810 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x9146}, //15811 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x520D}, //15812 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x5942}, //15813 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x52A2}, //15814 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x52AC}, //15815 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x52AD}, //15816 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x52BE}, //15817 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x54FF}, //15818 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x52D0}, //15819 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x52D6}, //15820 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x52F0}, //15821 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0x53DF}, //15822 #CJK UNIFIED IDEOGRAPH + {0xDBC6, 0x71EE}, //15823 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x77CD}, //15824 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x5EF4}, //15825 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x51F5}, //15826 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x51FC}, //15827 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x9B2F}, //15828 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x53B6}, //15829 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x5F01}, //15830 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x755A}, //15831 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x5DEF}, //15832 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x574C}, //15833 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x57A9}, //15834 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x57A1}, //15835 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x587E}, //15836 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x58BC}, //15837 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x58C5}, //15838 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x58D1}, //15839 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x5729}, //15840 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x572C}, //15841 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x572A}, //15842 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x5733}, //15843 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x5739}, //15844 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x572E}, //15845 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x572F}, //15846 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x575C}, //15847 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x573B}, //15848 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x5742}, //15849 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x5769}, //15850 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x5785}, //15851 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x576B}, //15852 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0x5786}, //15853 #CJK UNIFIED IDEOGRAPH + {0xDBE5, 0x577C}, //15854 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x577B}, //15855 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x5768}, //15856 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x576D}, //15857 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x5776}, //15858 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x5773}, //15859 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x57AD}, //15860 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x57A4}, //15861 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x578C}, //15862 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x57B2}, //15863 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x57CF}, //15864 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x57A7}, //15865 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x57B4}, //15866 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x5793}, //15867 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x57A0}, //15868 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x57D5}, //15869 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x57D8}, //15870 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x57DA}, //15871 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x57D9}, //15872 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x57D2}, //15873 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x57B8}, //15874 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x57F4}, //15875 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x57EF}, //15876 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x57F8}, //15877 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x57E4}, //15878 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x57DD}, //15879 #CJK UNIFIED IDEOGRAPH + {0xDC40, 0x8E73}, //15880 #CJK UNIFIED IDEOGRAPH + {0xDC41, 0x8E75}, //15881 #CJK UNIFIED IDEOGRAPH + {0xDC42, 0x8E77}, //15882 #CJK UNIFIED IDEOGRAPH + {0xDC43, 0x8E78}, //15883 #CJK UNIFIED IDEOGRAPH + {0xDC44, 0x8E79}, //15884 #CJK UNIFIED IDEOGRAPH + {0xDC45, 0x8E7A}, //15885 #CJK UNIFIED IDEOGRAPH + {0xDC46, 0x8E7B}, //15886 #CJK UNIFIED IDEOGRAPH + {0xDC47, 0x8E7D}, //15887 #CJK UNIFIED IDEOGRAPH + {0xDC48, 0x8E7E}, //15888 #CJK UNIFIED IDEOGRAPH + {0xDC49, 0x8E80}, //15889 #CJK UNIFIED IDEOGRAPH + {0xDC4A, 0x8E82}, //15890 #CJK UNIFIED IDEOGRAPH + {0xDC4B, 0x8E83}, //15891 #CJK UNIFIED IDEOGRAPH + {0xDC4C, 0x8E84}, //15892 #CJK UNIFIED IDEOGRAPH + {0xDC4D, 0x8E86}, //15893 #CJK UNIFIED IDEOGRAPH + {0xDC4E, 0x8E88}, //15894 #CJK UNIFIED IDEOGRAPH + {0xDC4F, 0x8E89}, //15895 #CJK UNIFIED IDEOGRAPH + {0xDC50, 0x8E8A}, //15896 #CJK UNIFIED IDEOGRAPH + {0xDC51, 0x8E8B}, //15897 #CJK UNIFIED IDEOGRAPH + {0xDC52, 0x8E8C}, //15898 #CJK UNIFIED IDEOGRAPH + {0xDC53, 0x8E8D}, //15899 #CJK UNIFIED IDEOGRAPH + {0xDC54, 0x8E8E}, //15900 #CJK UNIFIED IDEOGRAPH + {0xDC55, 0x8E91}, //15901 #CJK UNIFIED IDEOGRAPH + {0xDC56, 0x8E92}, //15902 #CJK UNIFIED IDEOGRAPH + {0xDC57, 0x8E93}, //15903 #CJK UNIFIED IDEOGRAPH + {0xDC58, 0x8E95}, //15904 #CJK UNIFIED IDEOGRAPH + {0xDC59, 0x8E96}, //15905 #CJK UNIFIED IDEOGRAPH + {0xDC5A, 0x8E97}, //15906 #CJK UNIFIED IDEOGRAPH + {0xDC5B, 0x8E98}, //15907 #CJK UNIFIED IDEOGRAPH + {0xDC5C, 0x8E99}, //15908 #CJK UNIFIED IDEOGRAPH + {0xDC5D, 0x8E9A}, //15909 #CJK UNIFIED IDEOGRAPH + {0xDC5E, 0x8E9B}, //15910 #CJK UNIFIED IDEOGRAPH + {0xDC5F, 0x8E9D}, //15911 #CJK UNIFIED IDEOGRAPH + {0xDC60, 0x8E9F}, //15912 #CJK UNIFIED IDEOGRAPH + {0xDC61, 0x8EA0}, //15913 #CJK UNIFIED IDEOGRAPH + {0xDC62, 0x8EA1}, //15914 #CJK UNIFIED IDEOGRAPH + {0xDC63, 0x8EA2}, //15915 #CJK UNIFIED IDEOGRAPH + {0xDC64, 0x8EA3}, //15916 #CJK UNIFIED IDEOGRAPH + {0xDC65, 0x8EA4}, //15917 #CJK UNIFIED IDEOGRAPH + {0xDC66, 0x8EA5}, //15918 #CJK UNIFIED IDEOGRAPH + {0xDC67, 0x8EA6}, //15919 #CJK UNIFIED IDEOGRAPH + {0xDC68, 0x8EA7}, //15920 #CJK UNIFIED IDEOGRAPH + {0xDC69, 0x8EA8}, //15921 #CJK UNIFIED IDEOGRAPH + {0xDC6A, 0x8EA9}, //15922 #CJK UNIFIED IDEOGRAPH + {0xDC6B, 0x8EAA}, //15923 #CJK UNIFIED IDEOGRAPH + {0xDC6C, 0x8EAD}, //15924 #CJK UNIFIED IDEOGRAPH + {0xDC6D, 0x8EAE}, //15925 #CJK UNIFIED IDEOGRAPH + {0xDC6E, 0x8EB0}, //15926 #CJK UNIFIED IDEOGRAPH + {0xDC6F, 0x8EB1}, //15927 #CJK UNIFIED IDEOGRAPH + {0xDC70, 0x8EB3}, //15928 #CJK UNIFIED IDEOGRAPH + {0xDC71, 0x8EB4}, //15929 #CJK UNIFIED IDEOGRAPH + {0xDC72, 0x8EB5}, //15930 #CJK UNIFIED IDEOGRAPH + {0xDC73, 0x8EB6}, //15931 #CJK UNIFIED IDEOGRAPH + {0xDC74, 0x8EB7}, //15932 #CJK UNIFIED IDEOGRAPH + {0xDC75, 0x8EB8}, //15933 #CJK UNIFIED IDEOGRAPH + {0xDC76, 0x8EB9}, //15934 #CJK UNIFIED IDEOGRAPH + {0xDC77, 0x8EBB}, //15935 #CJK UNIFIED IDEOGRAPH + {0xDC78, 0x8EBC}, //15936 #CJK UNIFIED IDEOGRAPH + {0xDC79, 0x8EBD}, //15937 #CJK UNIFIED IDEOGRAPH + {0xDC7A, 0x8EBE}, //15938 #CJK UNIFIED IDEOGRAPH + {0xDC7B, 0x8EBF}, //15939 #CJK UNIFIED IDEOGRAPH + {0xDC7C, 0x8EC0}, //15940 #CJK UNIFIED IDEOGRAPH + {0xDC7D, 0x8EC1}, //15941 #CJK UNIFIED IDEOGRAPH + {0xDC7E, 0x8EC2}, //15942 #CJK UNIFIED IDEOGRAPH + {0xDC80, 0x8EC3}, //15943 #CJK UNIFIED IDEOGRAPH + {0xDC81, 0x8EC4}, //15944 #CJK UNIFIED IDEOGRAPH + {0xDC82, 0x8EC5}, //15945 #CJK UNIFIED IDEOGRAPH + {0xDC83, 0x8EC6}, //15946 #CJK UNIFIED IDEOGRAPH + {0xDC84, 0x8EC7}, //15947 #CJK UNIFIED IDEOGRAPH + {0xDC85, 0x8EC8}, //15948 #CJK UNIFIED IDEOGRAPH + {0xDC86, 0x8EC9}, //15949 #CJK UNIFIED IDEOGRAPH + {0xDC87, 0x8ECA}, //15950 #CJK UNIFIED IDEOGRAPH + {0xDC88, 0x8ECB}, //15951 #CJK UNIFIED IDEOGRAPH + {0xDC89, 0x8ECC}, //15952 #CJK UNIFIED IDEOGRAPH + {0xDC8A, 0x8ECD}, //15953 #CJK UNIFIED IDEOGRAPH + {0xDC8B, 0x8ECF}, //15954 #CJK UNIFIED IDEOGRAPH + {0xDC8C, 0x8ED0}, //15955 #CJK UNIFIED IDEOGRAPH + {0xDC8D, 0x8ED1}, //15956 #CJK UNIFIED IDEOGRAPH + {0xDC8E, 0x8ED2}, //15957 #CJK UNIFIED IDEOGRAPH + {0xDC8F, 0x8ED3}, //15958 #CJK UNIFIED IDEOGRAPH + {0xDC90, 0x8ED4}, //15959 #CJK UNIFIED IDEOGRAPH + {0xDC91, 0x8ED5}, //15960 #CJK UNIFIED IDEOGRAPH + {0xDC92, 0x8ED6}, //15961 #CJK UNIFIED IDEOGRAPH + {0xDC93, 0x8ED7}, //15962 #CJK UNIFIED IDEOGRAPH + {0xDC94, 0x8ED8}, //15963 #CJK UNIFIED IDEOGRAPH + {0xDC95, 0x8ED9}, //15964 #CJK UNIFIED IDEOGRAPH + {0xDC96, 0x8EDA}, //15965 #CJK UNIFIED IDEOGRAPH + {0xDC97, 0x8EDB}, //15966 #CJK UNIFIED IDEOGRAPH + {0xDC98, 0x8EDC}, //15967 #CJK UNIFIED IDEOGRAPH + {0xDC99, 0x8EDD}, //15968 #CJK UNIFIED IDEOGRAPH + {0xDC9A, 0x8EDE}, //15969 #CJK UNIFIED IDEOGRAPH + {0xDC9B, 0x8EDF}, //15970 #CJK UNIFIED IDEOGRAPH + {0xDC9C, 0x8EE0}, //15971 #CJK UNIFIED IDEOGRAPH + {0xDC9D, 0x8EE1}, //15972 #CJK UNIFIED IDEOGRAPH + {0xDC9E, 0x8EE2}, //15973 #CJK UNIFIED IDEOGRAPH + {0xDC9F, 0x8EE3}, //15974 #CJK UNIFIED IDEOGRAPH + {0xDCA0, 0x8EE4}, //15975 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x580B}, //15976 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x580D}, //15977 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x57FD}, //15978 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x57ED}, //15979 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0x5800}, //15980 #CJK UNIFIED IDEOGRAPH + {0xDCA6, 0x581E}, //15981 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x5819}, //15982 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x5844}, //15983 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x5820}, //15984 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x5865}, //15985 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x586C}, //15986 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x5881}, //15987 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x5889}, //15988 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x589A}, //15989 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x5880}, //15990 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x99A8}, //15991 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x9F19}, //15992 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x61FF}, //15993 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x8279}, //15994 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x827D}, //15995 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x827F}, //15996 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x828F}, //15997 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x828A}, //15998 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x82A8}, //15999 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x8284}, //16000 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x828E}, //16001 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x8291}, //16002 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x8297}, //16003 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x8299}, //16004 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x82AB}, //16005 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x82B8}, //16006 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x82BE}, //16007 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x82B0}, //16008 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x82C8}, //16009 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x82CA}, //16010 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x82E3}, //16011 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x8298}, //16012 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x82B7}, //16013 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x82AE}, //16014 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x82CB}, //16015 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x82CC}, //16016 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x82C1}, //16017 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x82A9}, //16018 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x82B4}, //16019 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x82A1}, //16020 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x82AA}, //16021 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x829F}, //16022 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x82C4}, //16023 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x82CE}, //16024 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x82A4}, //16025 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x82E1}, //16026 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x8309}, //16027 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x82F7}, //16028 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x82E4}, //16029 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x830F}, //16030 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x8307}, //16031 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x82DC}, //16032 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x82F4}, //16033 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x82D2}, //16034 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x82D8}, //16035 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x830C}, //16036 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x82FB}, //16037 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x82D3}, //16038 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x8311}, //16039 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x831A}, //16040 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x8306}, //16041 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x8314}, //16042 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x8315}, //16043 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x82E0}, //16044 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x82D5}, //16045 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x831C}, //16046 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x8351}, //16047 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x835B}, //16048 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x835C}, //16049 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x8308}, //16050 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x8392}, //16051 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x833C}, //16052 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x8334}, //16053 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x8331}, //16054 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x839B}, //16055 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x835E}, //16056 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x832F}, //16057 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x834F}, //16058 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x8347}, //16059 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x8343}, //16060 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x835F}, //16061 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x8340}, //16062 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x8317}, //16063 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x8360}, //16064 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x832D}, //16065 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x833A}, //16066 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x8333}, //16067 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x8366}, //16068 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x8365}, //16069 #CJK UNIFIED IDEOGRAPH + {0xDD40, 0x8EE5}, //16070 #CJK UNIFIED IDEOGRAPH + {0xDD41, 0x8EE6}, //16071 #CJK UNIFIED IDEOGRAPH + {0xDD42, 0x8EE7}, //16072 #CJK UNIFIED IDEOGRAPH + {0xDD43, 0x8EE8}, //16073 #CJK UNIFIED IDEOGRAPH + {0xDD44, 0x8EE9}, //16074 #CJK UNIFIED IDEOGRAPH + {0xDD45, 0x8EEA}, //16075 #CJK UNIFIED IDEOGRAPH + {0xDD46, 0x8EEB}, //16076 #CJK UNIFIED IDEOGRAPH + {0xDD47, 0x8EEC}, //16077 #CJK UNIFIED IDEOGRAPH + {0xDD48, 0x8EED}, //16078 #CJK UNIFIED IDEOGRAPH + {0xDD49, 0x8EEE}, //16079 #CJK UNIFIED IDEOGRAPH + {0xDD4A, 0x8EEF}, //16080 #CJK UNIFIED IDEOGRAPH + {0xDD4B, 0x8EF0}, //16081 #CJK UNIFIED IDEOGRAPH + {0xDD4C, 0x8EF1}, //16082 #CJK UNIFIED IDEOGRAPH + {0xDD4D, 0x8EF2}, //16083 #CJK UNIFIED IDEOGRAPH + {0xDD4E, 0x8EF3}, //16084 #CJK UNIFIED IDEOGRAPH + {0xDD4F, 0x8EF4}, //16085 #CJK UNIFIED IDEOGRAPH + {0xDD50, 0x8EF5}, //16086 #CJK UNIFIED IDEOGRAPH + {0xDD51, 0x8EF6}, //16087 #CJK UNIFIED IDEOGRAPH + {0xDD52, 0x8EF7}, //16088 #CJK UNIFIED IDEOGRAPH + {0xDD53, 0x8EF8}, //16089 #CJK UNIFIED IDEOGRAPH + {0xDD54, 0x8EF9}, //16090 #CJK UNIFIED IDEOGRAPH + {0xDD55, 0x8EFA}, //16091 #CJK UNIFIED IDEOGRAPH + {0xDD56, 0x8EFB}, //16092 #CJK UNIFIED IDEOGRAPH + {0xDD57, 0x8EFC}, //16093 #CJK UNIFIED IDEOGRAPH + {0xDD58, 0x8EFD}, //16094 #CJK UNIFIED IDEOGRAPH + {0xDD59, 0x8EFE}, //16095 #CJK UNIFIED IDEOGRAPH + {0xDD5A, 0x8EFF}, //16096 #CJK UNIFIED IDEOGRAPH + {0xDD5B, 0x8F00}, //16097 #CJK UNIFIED IDEOGRAPH + {0xDD5C, 0x8F01}, //16098 #CJK UNIFIED IDEOGRAPH + {0xDD5D, 0x8F02}, //16099 #CJK UNIFIED IDEOGRAPH + {0xDD5E, 0x8F03}, //16100 #CJK UNIFIED IDEOGRAPH + {0xDD5F, 0x8F04}, //16101 #CJK UNIFIED IDEOGRAPH + {0xDD60, 0x8F05}, //16102 #CJK UNIFIED IDEOGRAPH + {0xDD61, 0x8F06}, //16103 #CJK UNIFIED IDEOGRAPH + {0xDD62, 0x8F07}, //16104 #CJK UNIFIED IDEOGRAPH + {0xDD63, 0x8F08}, //16105 #CJK UNIFIED IDEOGRAPH + {0xDD64, 0x8F09}, //16106 #CJK UNIFIED IDEOGRAPH + {0xDD65, 0x8F0A}, //16107 #CJK UNIFIED IDEOGRAPH + {0xDD66, 0x8F0B}, //16108 #CJK UNIFIED IDEOGRAPH + {0xDD67, 0x8F0C}, //16109 #CJK UNIFIED IDEOGRAPH + {0xDD68, 0x8F0D}, //16110 #CJK UNIFIED IDEOGRAPH + {0xDD69, 0x8F0E}, //16111 #CJK UNIFIED IDEOGRAPH + {0xDD6A, 0x8F0F}, //16112 #CJK UNIFIED IDEOGRAPH + {0xDD6B, 0x8F10}, //16113 #CJK UNIFIED IDEOGRAPH + {0xDD6C, 0x8F11}, //16114 #CJK UNIFIED IDEOGRAPH + {0xDD6D, 0x8F12}, //16115 #CJK UNIFIED IDEOGRAPH + {0xDD6E, 0x8F13}, //16116 #CJK UNIFIED IDEOGRAPH + {0xDD6F, 0x8F14}, //16117 #CJK UNIFIED IDEOGRAPH + {0xDD70, 0x8F15}, //16118 #CJK UNIFIED IDEOGRAPH + {0xDD71, 0x8F16}, //16119 #CJK UNIFIED IDEOGRAPH + {0xDD72, 0x8F17}, //16120 #CJK UNIFIED IDEOGRAPH + {0xDD73, 0x8F18}, //16121 #CJK UNIFIED IDEOGRAPH + {0xDD74, 0x8F19}, //16122 #CJK UNIFIED IDEOGRAPH + {0xDD75, 0x8F1A}, //16123 #CJK UNIFIED IDEOGRAPH + {0xDD76, 0x8F1B}, //16124 #CJK UNIFIED IDEOGRAPH + {0xDD77, 0x8F1C}, //16125 #CJK UNIFIED IDEOGRAPH + {0xDD78, 0x8F1D}, //16126 #CJK UNIFIED IDEOGRAPH + {0xDD79, 0x8F1E}, //16127 #CJK UNIFIED IDEOGRAPH + {0xDD7A, 0x8F1F}, //16128 #CJK UNIFIED IDEOGRAPH + {0xDD7B, 0x8F20}, //16129 #CJK UNIFIED IDEOGRAPH + {0xDD7C, 0x8F21}, //16130 #CJK UNIFIED IDEOGRAPH + {0xDD7D, 0x8F22}, //16131 #CJK UNIFIED IDEOGRAPH + {0xDD7E, 0x8F23}, //16132 #CJK UNIFIED IDEOGRAPH + {0xDD80, 0x8F24}, //16133 #CJK UNIFIED IDEOGRAPH + {0xDD81, 0x8F25}, //16134 #CJK UNIFIED IDEOGRAPH + {0xDD82, 0x8F26}, //16135 #CJK UNIFIED IDEOGRAPH + {0xDD83, 0x8F27}, //16136 #CJK UNIFIED IDEOGRAPH + {0xDD84, 0x8F28}, //16137 #CJK UNIFIED IDEOGRAPH + {0xDD85, 0x8F29}, //16138 #CJK UNIFIED IDEOGRAPH + {0xDD86, 0x8F2A}, //16139 #CJK UNIFIED IDEOGRAPH + {0xDD87, 0x8F2B}, //16140 #CJK UNIFIED IDEOGRAPH + {0xDD88, 0x8F2C}, //16141 #CJK UNIFIED IDEOGRAPH + {0xDD89, 0x8F2D}, //16142 #CJK UNIFIED IDEOGRAPH + {0xDD8A, 0x8F2E}, //16143 #CJK UNIFIED IDEOGRAPH + {0xDD8B, 0x8F2F}, //16144 #CJK UNIFIED IDEOGRAPH + {0xDD8C, 0x8F30}, //16145 #CJK UNIFIED IDEOGRAPH + {0xDD8D, 0x8F31}, //16146 #CJK UNIFIED IDEOGRAPH + {0xDD8E, 0x8F32}, //16147 #CJK UNIFIED IDEOGRAPH + {0xDD8F, 0x8F33}, //16148 #CJK UNIFIED IDEOGRAPH + {0xDD90, 0x8F34}, //16149 #CJK UNIFIED IDEOGRAPH + {0xDD91, 0x8F35}, //16150 #CJK UNIFIED IDEOGRAPH + {0xDD92, 0x8F36}, //16151 #CJK UNIFIED IDEOGRAPH + {0xDD93, 0x8F37}, //16152 #CJK UNIFIED IDEOGRAPH + {0xDD94, 0x8F38}, //16153 #CJK UNIFIED IDEOGRAPH + {0xDD95, 0x8F39}, //16154 #CJK UNIFIED IDEOGRAPH + {0xDD96, 0x8F3A}, //16155 #CJK UNIFIED IDEOGRAPH + {0xDD97, 0x8F3B}, //16156 #CJK UNIFIED IDEOGRAPH + {0xDD98, 0x8F3C}, //16157 #CJK UNIFIED IDEOGRAPH + {0xDD99, 0x8F3D}, //16158 #CJK UNIFIED IDEOGRAPH + {0xDD9A, 0x8F3E}, //16159 #CJK UNIFIED IDEOGRAPH + {0xDD9B, 0x8F3F}, //16160 #CJK UNIFIED IDEOGRAPH + {0xDD9C, 0x8F40}, //16161 #CJK UNIFIED IDEOGRAPH + {0xDD9D, 0x8F41}, //16162 #CJK UNIFIED IDEOGRAPH + {0xDD9E, 0x8F42}, //16163 #CJK UNIFIED IDEOGRAPH + {0xDD9F, 0x8F43}, //16164 #CJK UNIFIED IDEOGRAPH + {0xDDA0, 0x8F44}, //16165 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x8368}, //16166 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x831B}, //16167 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x8369}, //16168 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x836C}, //16169 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0x836A}, //16170 #CJK UNIFIED IDEOGRAPH + {0xDDA6, 0x836D}, //16171 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x836E}, //16172 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x83B0}, //16173 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x8378}, //16174 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x83B3}, //16175 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x83B4}, //16176 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x83A0}, //16177 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x83AA}, //16178 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x8393}, //16179 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x839C}, //16180 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x8385}, //16181 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x837C}, //16182 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x83B6}, //16183 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x83A9}, //16184 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x837D}, //16185 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x83B8}, //16186 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x837B}, //16187 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x8398}, //16188 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x839E}, //16189 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x83A8}, //16190 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x83BA}, //16191 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x83BC}, //16192 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x83C1}, //16193 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x8401}, //16194 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x83E5}, //16195 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x83D8}, //16196 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x5807}, //16197 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x8418}, //16198 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x840B}, //16199 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x83DD}, //16200 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x83FD}, //16201 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x83D6}, //16202 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x841C}, //16203 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x8438}, //16204 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x8411}, //16205 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x8406}, //16206 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x83D4}, //16207 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x83DF}, //16208 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x840F}, //16209 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x8403}, //16210 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x83F8}, //16211 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x83F9}, //16212 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x83EA}, //16213 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x83C5}, //16214 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x83C0}, //16215 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x8426}, //16216 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x83F0}, //16217 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0x83E1}, //16218 #CJK UNIFIED IDEOGRAPH + {0xDDD6, 0x845C}, //16219 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x8451}, //16220 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x845A}, //16221 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x8459}, //16222 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x8473}, //16223 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x8487}, //16224 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x8488}, //16225 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x847A}, //16226 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x8489}, //16227 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x8478}, //16228 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x843C}, //16229 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x8446}, //16230 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x8469}, //16231 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x8476}, //16232 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x848C}, //16233 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x848E}, //16234 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x8431}, //16235 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x846D}, //16236 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x84C1}, //16237 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x84CD}, //16238 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x84D0}, //16239 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x84E6}, //16240 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x84BD}, //16241 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x84D3}, //16242 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x84CA}, //16243 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x84BF}, //16244 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x84BA}, //16245 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x84E0}, //16246 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x84A1}, //16247 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x84B9}, //16248 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0x84B4}, //16249 #CJK UNIFIED IDEOGRAPH + {0xDDF5, 0x8497}, //16250 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x84E5}, //16251 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x84E3}, //16252 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x850C}, //16253 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x750D}, //16254 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x8538}, //16255 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x84F0}, //16256 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0x8539}, //16257 #CJK UNIFIED IDEOGRAPH + {0xDDFD, 0x851F}, //16258 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x853A}, //16259 #CJK UNIFIED IDEOGRAPH + {0xDE40, 0x8F45}, //16260 #CJK UNIFIED IDEOGRAPH + {0xDE41, 0x8F46}, //16261 #CJK UNIFIED IDEOGRAPH + {0xDE42, 0x8F47}, //16262 #CJK UNIFIED IDEOGRAPH + {0xDE43, 0x8F48}, //16263 #CJK UNIFIED IDEOGRAPH + {0xDE44, 0x8F49}, //16264 #CJK UNIFIED IDEOGRAPH + {0xDE45, 0x8F4A}, //16265 #CJK UNIFIED IDEOGRAPH + {0xDE46, 0x8F4B}, //16266 #CJK UNIFIED IDEOGRAPH + {0xDE47, 0x8F4C}, //16267 #CJK UNIFIED IDEOGRAPH + {0xDE48, 0x8F4D}, //16268 #CJK UNIFIED IDEOGRAPH + {0xDE49, 0x8F4E}, //16269 #CJK UNIFIED IDEOGRAPH + {0xDE4A, 0x8F4F}, //16270 #CJK UNIFIED IDEOGRAPH + {0xDE4B, 0x8F50}, //16271 #CJK UNIFIED IDEOGRAPH + {0xDE4C, 0x8F51}, //16272 #CJK UNIFIED IDEOGRAPH + {0xDE4D, 0x8F52}, //16273 #CJK UNIFIED IDEOGRAPH + {0xDE4E, 0x8F53}, //16274 #CJK UNIFIED IDEOGRAPH + {0xDE4F, 0x8F54}, //16275 #CJK UNIFIED IDEOGRAPH + {0xDE50, 0x8F55}, //16276 #CJK UNIFIED IDEOGRAPH + {0xDE51, 0x8F56}, //16277 #CJK UNIFIED IDEOGRAPH + {0xDE52, 0x8F57}, //16278 #CJK UNIFIED IDEOGRAPH + {0xDE53, 0x8F58}, //16279 #CJK UNIFIED IDEOGRAPH + {0xDE54, 0x8F59}, //16280 #CJK UNIFIED IDEOGRAPH + {0xDE55, 0x8F5A}, //16281 #CJK UNIFIED IDEOGRAPH + {0xDE56, 0x8F5B}, //16282 #CJK UNIFIED IDEOGRAPH + {0xDE57, 0x8F5C}, //16283 #CJK UNIFIED IDEOGRAPH + {0xDE58, 0x8F5D}, //16284 #CJK UNIFIED IDEOGRAPH + {0xDE59, 0x8F5E}, //16285 #CJK UNIFIED IDEOGRAPH + {0xDE5A, 0x8F5F}, //16286 #CJK UNIFIED IDEOGRAPH + {0xDE5B, 0x8F60}, //16287 #CJK UNIFIED IDEOGRAPH + {0xDE5C, 0x8F61}, //16288 #CJK UNIFIED IDEOGRAPH + {0xDE5D, 0x8F62}, //16289 #CJK UNIFIED IDEOGRAPH + {0xDE5E, 0x8F63}, //16290 #CJK UNIFIED IDEOGRAPH + {0xDE5F, 0x8F64}, //16291 #CJK UNIFIED IDEOGRAPH + {0xDE60, 0x8F65}, //16292 #CJK UNIFIED IDEOGRAPH + {0xDE61, 0x8F6A}, //16293 #CJK UNIFIED IDEOGRAPH + {0xDE62, 0x8F80}, //16294 #CJK UNIFIED IDEOGRAPH + {0xDE63, 0x8F8C}, //16295 #CJK UNIFIED IDEOGRAPH + {0xDE64, 0x8F92}, //16296 #CJK UNIFIED IDEOGRAPH + {0xDE65, 0x8F9D}, //16297 #CJK UNIFIED IDEOGRAPH + {0xDE66, 0x8FA0}, //16298 #CJK UNIFIED IDEOGRAPH + {0xDE67, 0x8FA1}, //16299 #CJK UNIFIED IDEOGRAPH + {0xDE68, 0x8FA2}, //16300 #CJK UNIFIED IDEOGRAPH + {0xDE69, 0x8FA4}, //16301 #CJK UNIFIED IDEOGRAPH + {0xDE6A, 0x8FA5}, //16302 #CJK UNIFIED IDEOGRAPH + {0xDE6B, 0x8FA6}, //16303 #CJK UNIFIED IDEOGRAPH + {0xDE6C, 0x8FA7}, //16304 #CJK UNIFIED IDEOGRAPH + {0xDE6D, 0x8FAA}, //16305 #CJK UNIFIED IDEOGRAPH + {0xDE6E, 0x8FAC}, //16306 #CJK UNIFIED IDEOGRAPH + {0xDE6F, 0x8FAD}, //16307 #CJK UNIFIED IDEOGRAPH + {0xDE70, 0x8FAE}, //16308 #CJK UNIFIED IDEOGRAPH + {0xDE71, 0x8FAF}, //16309 #CJK UNIFIED IDEOGRAPH + {0xDE72, 0x8FB2}, //16310 #CJK UNIFIED IDEOGRAPH + {0xDE73, 0x8FB3}, //16311 #CJK UNIFIED IDEOGRAPH + {0xDE74, 0x8FB4}, //16312 #CJK UNIFIED IDEOGRAPH + {0xDE75, 0x8FB5}, //16313 #CJK UNIFIED IDEOGRAPH + {0xDE76, 0x8FB7}, //16314 #CJK UNIFIED IDEOGRAPH + {0xDE77, 0x8FB8}, //16315 #CJK UNIFIED IDEOGRAPH + {0xDE78, 0x8FBA}, //16316 #CJK UNIFIED IDEOGRAPH + {0xDE79, 0x8FBB}, //16317 #CJK UNIFIED IDEOGRAPH + {0xDE7A, 0x8FBC}, //16318 #CJK UNIFIED IDEOGRAPH + {0xDE7B, 0x8FBF}, //16319 #CJK UNIFIED IDEOGRAPH + {0xDE7C, 0x8FC0}, //16320 #CJK UNIFIED IDEOGRAPH + {0xDE7D, 0x8FC3}, //16321 #CJK UNIFIED IDEOGRAPH + {0xDE7E, 0x8FC6}, //16322 #CJK UNIFIED IDEOGRAPH + {0xDE80, 0x8FC9}, //16323 #CJK UNIFIED IDEOGRAPH + {0xDE81, 0x8FCA}, //16324 #CJK UNIFIED IDEOGRAPH + {0xDE82, 0x8FCB}, //16325 #CJK UNIFIED IDEOGRAPH + {0xDE83, 0x8FCC}, //16326 #CJK UNIFIED IDEOGRAPH + {0xDE84, 0x8FCD}, //16327 #CJK UNIFIED IDEOGRAPH + {0xDE85, 0x8FCF}, //16328 #CJK UNIFIED IDEOGRAPH + {0xDE86, 0x8FD2}, //16329 #CJK UNIFIED IDEOGRAPH + {0xDE87, 0x8FD6}, //16330 #CJK UNIFIED IDEOGRAPH + {0xDE88, 0x8FD7}, //16331 #CJK UNIFIED IDEOGRAPH + {0xDE89, 0x8FDA}, //16332 #CJK UNIFIED IDEOGRAPH + {0xDE8A, 0x8FE0}, //16333 #CJK UNIFIED IDEOGRAPH + {0xDE8B, 0x8FE1}, //16334 #CJK UNIFIED IDEOGRAPH + {0xDE8C, 0x8FE3}, //16335 #CJK UNIFIED IDEOGRAPH + {0xDE8D, 0x8FE7}, //16336 #CJK UNIFIED IDEOGRAPH + {0xDE8E, 0x8FEC}, //16337 #CJK UNIFIED IDEOGRAPH + {0xDE8F, 0x8FEF}, //16338 #CJK UNIFIED IDEOGRAPH + {0xDE90, 0x8FF1}, //16339 #CJK UNIFIED IDEOGRAPH + {0xDE91, 0x8FF2}, //16340 #CJK UNIFIED IDEOGRAPH + {0xDE92, 0x8FF4}, //16341 #CJK UNIFIED IDEOGRAPH + {0xDE93, 0x8FF5}, //16342 #CJK UNIFIED IDEOGRAPH + {0xDE94, 0x8FF6}, //16343 #CJK UNIFIED IDEOGRAPH + {0xDE95, 0x8FFA}, //16344 #CJK UNIFIED IDEOGRAPH + {0xDE96, 0x8FFB}, //16345 #CJK UNIFIED IDEOGRAPH + {0xDE97, 0x8FFC}, //16346 #CJK UNIFIED IDEOGRAPH + {0xDE98, 0x8FFE}, //16347 #CJK UNIFIED IDEOGRAPH + {0xDE99, 0x8FFF}, //16348 #CJK UNIFIED IDEOGRAPH + {0xDE9A, 0x9007}, //16349 #CJK UNIFIED IDEOGRAPH + {0xDE9B, 0x9008}, //16350 #CJK UNIFIED IDEOGRAPH + {0xDE9C, 0x900C}, //16351 #CJK UNIFIED IDEOGRAPH + {0xDE9D, 0x900E}, //16352 #CJK UNIFIED IDEOGRAPH + {0xDE9E, 0x9013}, //16353 #CJK UNIFIED IDEOGRAPH + {0xDE9F, 0x9015}, //16354 #CJK UNIFIED IDEOGRAPH + {0xDEA0, 0x9018}, //16355 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x8556}, //16356 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x853B}, //16357 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x84FF}, //16358 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x84FC}, //16359 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x8559}, //16360 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x8548}, //16361 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x8568}, //16362 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x8564}, //16363 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x855E}, //16364 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x857A}, //16365 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x77A2}, //16366 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x8543}, //16367 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x8572}, //16368 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x857B}, //16369 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x85A4}, //16370 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x85A8}, //16371 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x8587}, //16372 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x858F}, //16373 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x8579}, //16374 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x85AE}, //16375 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x859C}, //16376 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x8585}, //16377 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x85B9}, //16378 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x85B7}, //16379 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x85B0}, //16380 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x85D3}, //16381 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x85C1}, //16382 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x85DC}, //16383 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x85FF}, //16384 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x8627}, //16385 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x8605}, //16386 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x8629}, //16387 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x8616}, //16388 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x863C}, //16389 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x5EFE}, //16390 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x5F08}, //16391 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x593C}, //16392 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x5941}, //16393 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x8037}, //16394 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x5955}, //16395 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x595A}, //16396 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x5958}, //16397 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x530F}, //16398 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x5C22}, //16399 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x5C25}, //16400 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x5C2C}, //16401 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x5C34}, //16402 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x624C}, //16403 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x626A}, //16404 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x629F}, //16405 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x62BB}, //16406 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x62CA}, //16407 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x62DA}, //16408 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x62D7}, //16409 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x62EE}, //16410 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x6322}, //16411 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x62F6}, //16412 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x6339}, //16413 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x634B}, //16414 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x6343}, //16415 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x63AD}, //16416 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x63F6}, //16417 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x6371}, //16418 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x637A}, //16419 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x638E}, //16420 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x63B4}, //16421 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x636D}, //16422 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x63AC}, //16423 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x638A}, //16424 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x6369}, //16425 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x63AE}, //16426 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x63BC}, //16427 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x63F2}, //16428 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x63F8}, //16429 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x63E0}, //16430 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x63FF}, //16431 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x63C4}, //16432 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x63DE}, //16433 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x63CE}, //16434 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x6452}, //16435 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x63C6}, //16436 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x63BE}, //16437 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x6445}, //16438 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x6441}, //16439 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x640B}, //16440 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x641B}, //16441 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x6420}, //16442 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x640C}, //16443 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x6426}, //16444 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x6421}, //16445 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x645E}, //16446 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0x6484}, //16447 #CJK UNIFIED IDEOGRAPH + {0xDEFD, 0x646D}, //16448 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0x6496}, //16449 #CJK UNIFIED IDEOGRAPH + {0xDF40, 0x9019}, //16450 #CJK UNIFIED IDEOGRAPH + {0xDF41, 0x901C}, //16451 #CJK UNIFIED IDEOGRAPH + {0xDF42, 0x9023}, //16452 #CJK UNIFIED IDEOGRAPH + {0xDF43, 0x9024}, //16453 #CJK UNIFIED IDEOGRAPH + {0xDF44, 0x9025}, //16454 #CJK UNIFIED IDEOGRAPH + {0xDF45, 0x9027}, //16455 #CJK UNIFIED IDEOGRAPH + {0xDF46, 0x9028}, //16456 #CJK UNIFIED IDEOGRAPH + {0xDF47, 0x9029}, //16457 #CJK UNIFIED IDEOGRAPH + {0xDF48, 0x902A}, //16458 #CJK UNIFIED IDEOGRAPH + {0xDF49, 0x902B}, //16459 #CJK UNIFIED IDEOGRAPH + {0xDF4A, 0x902C}, //16460 #CJK UNIFIED IDEOGRAPH + {0xDF4B, 0x9030}, //16461 #CJK UNIFIED IDEOGRAPH + {0xDF4C, 0x9031}, //16462 #CJK UNIFIED IDEOGRAPH + {0xDF4D, 0x9032}, //16463 #CJK UNIFIED IDEOGRAPH + {0xDF4E, 0x9033}, //16464 #CJK UNIFIED IDEOGRAPH + {0xDF4F, 0x9034}, //16465 #CJK UNIFIED IDEOGRAPH + {0xDF50, 0x9037}, //16466 #CJK UNIFIED IDEOGRAPH + {0xDF51, 0x9039}, //16467 #CJK UNIFIED IDEOGRAPH + {0xDF52, 0x903A}, //16468 #CJK UNIFIED IDEOGRAPH + {0xDF53, 0x903D}, //16469 #CJK UNIFIED IDEOGRAPH + {0xDF54, 0x903F}, //16470 #CJK UNIFIED IDEOGRAPH + {0xDF55, 0x9040}, //16471 #CJK UNIFIED IDEOGRAPH + {0xDF56, 0x9043}, //16472 #CJK UNIFIED IDEOGRAPH + {0xDF57, 0x9045}, //16473 #CJK UNIFIED IDEOGRAPH + {0xDF58, 0x9046}, //16474 #CJK UNIFIED IDEOGRAPH + {0xDF59, 0x9048}, //16475 #CJK UNIFIED IDEOGRAPH + {0xDF5A, 0x9049}, //16476 #CJK UNIFIED IDEOGRAPH + {0xDF5B, 0x904A}, //16477 #CJK UNIFIED IDEOGRAPH + {0xDF5C, 0x904B}, //16478 #CJK UNIFIED IDEOGRAPH + {0xDF5D, 0x904C}, //16479 #CJK UNIFIED IDEOGRAPH + {0xDF5E, 0x904E}, //16480 #CJK UNIFIED IDEOGRAPH + {0xDF5F, 0x9054}, //16481 #CJK UNIFIED IDEOGRAPH + {0xDF60, 0x9055}, //16482 #CJK UNIFIED IDEOGRAPH + {0xDF61, 0x9056}, //16483 #CJK UNIFIED IDEOGRAPH + {0xDF62, 0x9059}, //16484 #CJK UNIFIED IDEOGRAPH + {0xDF63, 0x905A}, //16485 #CJK UNIFIED IDEOGRAPH + {0xDF64, 0x905C}, //16486 #CJK UNIFIED IDEOGRAPH + {0xDF65, 0x905D}, //16487 #CJK UNIFIED IDEOGRAPH + {0xDF66, 0x905E}, //16488 #CJK UNIFIED IDEOGRAPH + {0xDF67, 0x905F}, //16489 #CJK UNIFIED IDEOGRAPH + {0xDF68, 0x9060}, //16490 #CJK UNIFIED IDEOGRAPH + {0xDF69, 0x9061}, //16491 #CJK UNIFIED IDEOGRAPH + {0xDF6A, 0x9064}, //16492 #CJK UNIFIED IDEOGRAPH + {0xDF6B, 0x9066}, //16493 #CJK UNIFIED IDEOGRAPH + {0xDF6C, 0x9067}, //16494 #CJK UNIFIED IDEOGRAPH + {0xDF6D, 0x9069}, //16495 #CJK UNIFIED IDEOGRAPH + {0xDF6E, 0x906A}, //16496 #CJK UNIFIED IDEOGRAPH + {0xDF6F, 0x906B}, //16497 #CJK UNIFIED IDEOGRAPH + {0xDF70, 0x906C}, //16498 #CJK UNIFIED IDEOGRAPH + {0xDF71, 0x906F}, //16499 #CJK UNIFIED IDEOGRAPH + {0xDF72, 0x9070}, //16500 #CJK UNIFIED IDEOGRAPH + {0xDF73, 0x9071}, //16501 #CJK UNIFIED IDEOGRAPH + {0xDF74, 0x9072}, //16502 #CJK UNIFIED IDEOGRAPH + {0xDF75, 0x9073}, //16503 #CJK UNIFIED IDEOGRAPH + {0xDF76, 0x9076}, //16504 #CJK UNIFIED IDEOGRAPH + {0xDF77, 0x9077}, //16505 #CJK UNIFIED IDEOGRAPH + {0xDF78, 0x9078}, //16506 #CJK UNIFIED IDEOGRAPH + {0xDF79, 0x9079}, //16507 #CJK UNIFIED IDEOGRAPH + {0xDF7A, 0x907A}, //16508 #CJK UNIFIED IDEOGRAPH + {0xDF7B, 0x907B}, //16509 #CJK UNIFIED IDEOGRAPH + {0xDF7C, 0x907C}, //16510 #CJK UNIFIED IDEOGRAPH + {0xDF7D, 0x907E}, //16511 #CJK UNIFIED IDEOGRAPH + {0xDF7E, 0x9081}, //16512 #CJK UNIFIED IDEOGRAPH + {0xDF80, 0x9084}, //16513 #CJK UNIFIED IDEOGRAPH + {0xDF81, 0x9085}, //16514 #CJK UNIFIED IDEOGRAPH + {0xDF82, 0x9086}, //16515 #CJK UNIFIED IDEOGRAPH + {0xDF83, 0x9087}, //16516 #CJK UNIFIED IDEOGRAPH + {0xDF84, 0x9089}, //16517 #CJK UNIFIED IDEOGRAPH + {0xDF85, 0x908A}, //16518 #CJK UNIFIED IDEOGRAPH + {0xDF86, 0x908C}, //16519 #CJK UNIFIED IDEOGRAPH + {0xDF87, 0x908D}, //16520 #CJK UNIFIED IDEOGRAPH + {0xDF88, 0x908E}, //16521 #CJK UNIFIED IDEOGRAPH + {0xDF89, 0x908F}, //16522 #CJK UNIFIED IDEOGRAPH + {0xDF8A, 0x9090}, //16523 #CJK UNIFIED IDEOGRAPH + {0xDF8B, 0x9092}, //16524 #CJK UNIFIED IDEOGRAPH + {0xDF8C, 0x9094}, //16525 #CJK UNIFIED IDEOGRAPH + {0xDF8D, 0x9096}, //16526 #CJK UNIFIED IDEOGRAPH + {0xDF8E, 0x9098}, //16527 #CJK UNIFIED IDEOGRAPH + {0xDF8F, 0x909A}, //16528 #CJK UNIFIED IDEOGRAPH + {0xDF90, 0x909C}, //16529 #CJK UNIFIED IDEOGRAPH + {0xDF91, 0x909E}, //16530 #CJK UNIFIED IDEOGRAPH + {0xDF92, 0x909F}, //16531 #CJK UNIFIED IDEOGRAPH + {0xDF93, 0x90A0}, //16532 #CJK UNIFIED IDEOGRAPH + {0xDF94, 0x90A4}, //16533 #CJK UNIFIED IDEOGRAPH + {0xDF95, 0x90A5}, //16534 #CJK UNIFIED IDEOGRAPH + {0xDF96, 0x90A7}, //16535 #CJK UNIFIED IDEOGRAPH + {0xDF97, 0x90A8}, //16536 #CJK UNIFIED IDEOGRAPH + {0xDF98, 0x90A9}, //16537 #CJK UNIFIED IDEOGRAPH + {0xDF99, 0x90AB}, //16538 #CJK UNIFIED IDEOGRAPH + {0xDF9A, 0x90AD}, //16539 #CJK UNIFIED IDEOGRAPH + {0xDF9B, 0x90B2}, //16540 #CJK UNIFIED IDEOGRAPH + {0xDF9C, 0x90B7}, //16541 #CJK UNIFIED IDEOGRAPH + {0xDF9D, 0x90BC}, //16542 #CJK UNIFIED IDEOGRAPH + {0xDF9E, 0x90BD}, //16543 #CJK UNIFIED IDEOGRAPH + {0xDF9F, 0x90BF}, //16544 #CJK UNIFIED IDEOGRAPH + {0xDFA0, 0x90C0}, //16545 #CJK UNIFIED IDEOGRAPH + {0xDFA1, 0x647A}, //16546 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x64B7}, //16547 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x64B8}, //16548 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x6499}, //16549 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x64BA}, //16550 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x64C0}, //16551 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x64D0}, //16552 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x64D7}, //16553 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x64E4}, //16554 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x64E2}, //16555 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x6509}, //16556 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x6525}, //16557 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x652E}, //16558 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x5F0B}, //16559 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x5FD2}, //16560 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x7519}, //16561 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x5F11}, //16562 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x535F}, //16563 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0x53F1}, //16564 #CJK UNIFIED IDEOGRAPH + {0xDFB4, 0x53FD}, //16565 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x53E9}, //16566 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x53E8}, //16567 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x53FB}, //16568 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x5412}, //16569 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x5416}, //16570 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x5406}, //16571 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x544B}, //16572 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x5452}, //16573 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x5453}, //16574 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x5454}, //16575 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x5456}, //16576 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x5443}, //16577 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x5421}, //16578 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x5457}, //16579 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x5459}, //16580 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x5423}, //16581 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x5432}, //16582 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x5482}, //16583 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x5494}, //16584 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x5477}, //16585 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x5471}, //16586 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x5464}, //16587 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x549A}, //16588 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x549B}, //16589 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x5484}, //16590 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x5476}, //16591 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x5466}, //16592 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x549D}, //16593 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x54D0}, //16594 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x54AD}, //16595 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x54C2}, //16596 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x54B4}, //16597 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x54D2}, //16598 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x54A7}, //16599 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x54A6}, //16600 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x54D3}, //16601 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x54D4}, //16602 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x5472}, //16603 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x54A3}, //16604 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x54D5}, //16605 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x54BB}, //16606 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x54BF}, //16607 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x54CC}, //16608 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x54D9}, //16609 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0x54DA}, //16610 #CJK UNIFIED IDEOGRAPH + {0xDFE2, 0x54DC}, //16611 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x54A9}, //16612 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x54AA}, //16613 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x54A4}, //16614 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x54DD}, //16615 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x54CF}, //16616 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0x54DE}, //16617 #CJK UNIFIED IDEOGRAPH + {0xDFE9, 0x551B}, //16618 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x54E7}, //16619 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x5520}, //16620 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x54FD}, //16621 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x5514}, //16622 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x54F3}, //16623 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x5522}, //16624 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x5523}, //16625 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x550F}, //16626 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x5511}, //16627 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x5527}, //16628 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x552A}, //16629 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x5567}, //16630 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x558F}, //16631 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x55B5}, //16632 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x5549}, //16633 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x556D}, //16634 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x5541}, //16635 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x5555}, //16636 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x553F}, //16637 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x5550}, //16638 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x553C}, //16639 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x90C2}, //16640 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x90C3}, //16641 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x90C6}, //16642 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x90C8}, //16643 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x90C9}, //16644 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x90CB}, //16645 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x90CC}, //16646 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x90CD}, //16647 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x90D2}, //16648 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x90D4}, //16649 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x90D5}, //16650 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x90D6}, //16651 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x90D8}, //16652 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x90D9}, //16653 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x90DA}, //16654 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x90DE}, //16655 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x90DF}, //16656 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x90E0}, //16657 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x90E3}, //16658 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x90E4}, //16659 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x90E5}, //16660 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x90E9}, //16661 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x90EA}, //16662 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x90EC}, //16663 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x90EE}, //16664 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x90F0}, //16665 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x90F1}, //16666 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x90F2}, //16667 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x90F3}, //16668 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x90F5}, //16669 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x90F6}, //16670 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x90F7}, //16671 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x90F9}, //16672 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x90FA}, //16673 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x90FB}, //16674 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x90FC}, //16675 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x90FF}, //16676 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x9100}, //16677 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x9101}, //16678 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x9103}, //16679 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x9105}, //16680 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x9106}, //16681 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x9107}, //16682 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x9108}, //16683 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x9109}, //16684 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x910A}, //16685 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x910B}, //16686 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x910C}, //16687 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x910D}, //16688 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x910E}, //16689 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x910F}, //16690 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x9110}, //16691 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x9111}, //16692 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x9112}, //16693 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x9113}, //16694 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x9114}, //16695 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x9115}, //16696 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x9116}, //16697 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x9117}, //16698 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x9118}, //16699 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x911A}, //16700 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x911B}, //16701 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x911C}, //16702 #CJK UNIFIED IDEOGRAPH + {0xE080, 0x911D}, //16703 #CJK UNIFIED IDEOGRAPH + {0xE081, 0x911F}, //16704 #CJK UNIFIED IDEOGRAPH + {0xE082, 0x9120}, //16705 #CJK UNIFIED IDEOGRAPH + {0xE083, 0x9121}, //16706 #CJK UNIFIED IDEOGRAPH + {0xE084, 0x9124}, //16707 #CJK UNIFIED IDEOGRAPH + {0xE085, 0x9125}, //16708 #CJK UNIFIED IDEOGRAPH + {0xE086, 0x9126}, //16709 #CJK UNIFIED IDEOGRAPH + {0xE087, 0x9127}, //16710 #CJK UNIFIED IDEOGRAPH + {0xE088, 0x9128}, //16711 #CJK UNIFIED IDEOGRAPH + {0xE089, 0x9129}, //16712 #CJK UNIFIED IDEOGRAPH + {0xE08A, 0x912A}, //16713 #CJK UNIFIED IDEOGRAPH + {0xE08B, 0x912B}, //16714 #CJK UNIFIED IDEOGRAPH + {0xE08C, 0x912C}, //16715 #CJK UNIFIED IDEOGRAPH + {0xE08D, 0x912D}, //16716 #CJK UNIFIED IDEOGRAPH + {0xE08E, 0x912E}, //16717 #CJK UNIFIED IDEOGRAPH + {0xE08F, 0x9130}, //16718 #CJK UNIFIED IDEOGRAPH + {0xE090, 0x9132}, //16719 #CJK UNIFIED IDEOGRAPH + {0xE091, 0x9133}, //16720 #CJK UNIFIED IDEOGRAPH + {0xE092, 0x9134}, //16721 #CJK UNIFIED IDEOGRAPH + {0xE093, 0x9135}, //16722 #CJK UNIFIED IDEOGRAPH + {0xE094, 0x9136}, //16723 #CJK UNIFIED IDEOGRAPH + {0xE095, 0x9137}, //16724 #CJK UNIFIED IDEOGRAPH + {0xE096, 0x9138}, //16725 #CJK UNIFIED IDEOGRAPH + {0xE097, 0x913A}, //16726 #CJK UNIFIED IDEOGRAPH + {0xE098, 0x913B}, //16727 #CJK UNIFIED IDEOGRAPH + {0xE099, 0x913C}, //16728 #CJK UNIFIED IDEOGRAPH + {0xE09A, 0x913D}, //16729 #CJK UNIFIED IDEOGRAPH + {0xE09B, 0x913E}, //16730 #CJK UNIFIED IDEOGRAPH + {0xE09C, 0x913F}, //16731 #CJK UNIFIED IDEOGRAPH + {0xE09D, 0x9140}, //16732 #CJK UNIFIED IDEOGRAPH + {0xE09E, 0x9141}, //16733 #CJK UNIFIED IDEOGRAPH + {0xE09F, 0x9142}, //16734 #CJK UNIFIED IDEOGRAPH + {0xE0A0, 0x9144}, //16735 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x5537}, //16736 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x5556}, //16737 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x5575}, //16738 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x5576}, //16739 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x5577}, //16740 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x5533}, //16741 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x5530}, //16742 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x555C}, //16743 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x558B}, //16744 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x55D2}, //16745 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x5583}, //16746 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x55B1}, //16747 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x55B9}, //16748 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x5588}, //16749 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x5581}, //16750 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x559F}, //16751 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x557E}, //16752 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x55D6}, //16753 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x5591}, //16754 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x557B}, //16755 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x55DF}, //16756 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x55BD}, //16757 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x55BE}, //16758 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x5594}, //16759 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x5599}, //16760 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x55EA}, //16761 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x55F7}, //16762 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x55C9}, //16763 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x561F}, //16764 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x55D1}, //16765 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x55EB}, //16766 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x55EC}, //16767 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x55D4}, //16768 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x55E6}, //16769 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x55DD}, //16770 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x55C4}, //16771 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x55EF}, //16772 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x55E5}, //16773 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x55F2}, //16774 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x55F3}, //16775 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x55CC}, //16776 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x55CD}, //16777 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x55E8}, //16778 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x55F5}, //16779 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x55E4}, //16780 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x8F94}, //16781 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x561E}, //16782 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x5608}, //16783 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x560C}, //16784 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x5601}, //16785 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x5624}, //16786 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x5623}, //16787 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x55FE}, //16788 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x5600}, //16789 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x5627}, //16790 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x562D}, //16791 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x5658}, //16792 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x5639}, //16793 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x5657}, //16794 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x562C}, //16795 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x564D}, //16796 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x5662}, //16797 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x5659}, //16798 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x565C}, //16799 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x564C}, //16800 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x5654}, //16801 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x5686}, //16802 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x5664}, //16803 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x5671}, //16804 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x566B}, //16805 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x567B}, //16806 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x567C}, //16807 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x5685}, //16808 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x5693}, //16809 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x56AF}, //16810 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x56D4}, //16811 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x56D7}, //16812 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x56DD}, //16813 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x56E1}, //16814 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x56F5}, //16815 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x56EB}, //16816 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x56F9}, //16817 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x56FF}, //16818 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x5704}, //16819 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x570A}, //16820 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x5709}, //16821 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x571C}, //16822 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x5E0F}, //16823 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x5E19}, //16824 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x5E14}, //16825 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x5E11}, //16826 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x5E31}, //16827 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x5E3B}, //16828 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x5E3C}, //16829 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x9145}, //16830 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x9147}, //16831 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x9148}, //16832 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x9151}, //16833 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x9153}, //16834 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x9154}, //16835 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x9155}, //16836 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x9156}, //16837 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x9158}, //16838 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x9159}, //16839 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x915B}, //16840 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x915C}, //16841 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x915F}, //16842 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x9160}, //16843 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x9166}, //16844 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x9167}, //16845 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x9168}, //16846 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x916B}, //16847 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x916D}, //16848 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x9173}, //16849 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x917A}, //16850 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x917B}, //16851 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x917C}, //16852 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x9180}, //16853 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x9181}, //16854 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x9182}, //16855 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x9183}, //16856 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x9184}, //16857 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x9186}, //16858 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x9188}, //16859 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x918A}, //16860 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x918E}, //16861 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x918F}, //16862 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x9193}, //16863 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x9194}, //16864 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x9195}, //16865 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x9196}, //16866 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x9197}, //16867 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x9198}, //16868 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x9199}, //16869 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x919C}, //16870 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x919D}, //16871 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x919E}, //16872 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x919F}, //16873 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x91A0}, //16874 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x91A1}, //16875 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x91A4}, //16876 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x91A5}, //16877 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x91A6}, //16878 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x91A7}, //16879 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x91A8}, //16880 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x91A9}, //16881 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x91AB}, //16882 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x91AC}, //16883 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x91B0}, //16884 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x91B1}, //16885 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x91B2}, //16886 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x91B3}, //16887 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x91B6}, //16888 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x91B7}, //16889 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x91B8}, //16890 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x91B9}, //16891 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x91BB}, //16892 #CJK UNIFIED IDEOGRAPH + {0xE180, 0x91BC}, //16893 #CJK UNIFIED IDEOGRAPH + {0xE181, 0x91BD}, //16894 #CJK UNIFIED IDEOGRAPH + {0xE182, 0x91BE}, //16895 #CJK UNIFIED IDEOGRAPH + {0xE183, 0x91BF}, //16896 #CJK UNIFIED IDEOGRAPH + {0xE184, 0x91C0}, //16897 #CJK UNIFIED IDEOGRAPH + {0xE185, 0x91C1}, //16898 #CJK UNIFIED IDEOGRAPH + {0xE186, 0x91C2}, //16899 #CJK UNIFIED IDEOGRAPH + {0xE187, 0x91C3}, //16900 #CJK UNIFIED IDEOGRAPH + {0xE188, 0x91C4}, //16901 #CJK UNIFIED IDEOGRAPH + {0xE189, 0x91C5}, //16902 #CJK UNIFIED IDEOGRAPH + {0xE18A, 0x91C6}, //16903 #CJK UNIFIED IDEOGRAPH + {0xE18B, 0x91C8}, //16904 #CJK UNIFIED IDEOGRAPH + {0xE18C, 0x91CB}, //16905 #CJK UNIFIED IDEOGRAPH + {0xE18D, 0x91D0}, //16906 #CJK UNIFIED IDEOGRAPH + {0xE18E, 0x91D2}, //16907 #CJK UNIFIED IDEOGRAPH + {0xE18F, 0x91D3}, //16908 #CJK UNIFIED IDEOGRAPH + {0xE190, 0x91D4}, //16909 #CJK UNIFIED IDEOGRAPH + {0xE191, 0x91D5}, //16910 #CJK UNIFIED IDEOGRAPH + {0xE192, 0x91D6}, //16911 #CJK UNIFIED IDEOGRAPH + {0xE193, 0x91D7}, //16912 #CJK UNIFIED IDEOGRAPH + {0xE194, 0x91D8}, //16913 #CJK UNIFIED IDEOGRAPH + {0xE195, 0x91D9}, //16914 #CJK UNIFIED IDEOGRAPH + {0xE196, 0x91DA}, //16915 #CJK UNIFIED IDEOGRAPH + {0xE197, 0x91DB}, //16916 #CJK UNIFIED IDEOGRAPH + {0xE198, 0x91DD}, //16917 #CJK UNIFIED IDEOGRAPH + {0xE199, 0x91DE}, //16918 #CJK UNIFIED IDEOGRAPH + {0xE19A, 0x91DF}, //16919 #CJK UNIFIED IDEOGRAPH + {0xE19B, 0x91E0}, //16920 #CJK UNIFIED IDEOGRAPH + {0xE19C, 0x91E1}, //16921 #CJK UNIFIED IDEOGRAPH + {0xE19D, 0x91E2}, //16922 #CJK UNIFIED IDEOGRAPH + {0xE19E, 0x91E3}, //16923 #CJK UNIFIED IDEOGRAPH + {0xE19F, 0x91E4}, //16924 #CJK UNIFIED IDEOGRAPH + {0xE1A0, 0x91E5}, //16925 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x5E37}, //16926 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x5E44}, //16927 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x5E54}, //16928 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x5E5B}, //16929 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x5E5E}, //16930 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x5E61}, //16931 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x5C8C}, //16932 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x5C7A}, //16933 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x5C8D}, //16934 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x5C90}, //16935 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x5C96}, //16936 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x5C88}, //16937 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x5C98}, //16938 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x5C99}, //16939 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x5C91}, //16940 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x5C9A}, //16941 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5C9C}, //16942 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5CB5}, //16943 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5CA2}, //16944 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5CBD}, //16945 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5CAC}, //16946 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x5CAB}, //16947 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x5CB1}, //16948 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x5CA3}, //16949 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x5CC1}, //16950 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x5CB7}, //16951 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x5CC4}, //16952 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x5CD2}, //16953 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x5CE4}, //16954 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x5CCB}, //16955 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x5CE5}, //16956 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x5D02}, //16957 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x5D03}, //16958 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x5D27}, //16959 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x5D26}, //16960 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x5D2E}, //16961 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x5D24}, //16962 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x5D1E}, //16963 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x5D06}, //16964 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x5D1B}, //16965 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x5D58}, //16966 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x5D3E}, //16967 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x5D34}, //16968 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x5D3D}, //16969 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x5D6C}, //16970 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x5D5B}, //16971 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x5D6F}, //16972 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x5D5D}, //16973 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x5D6B}, //16974 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x5D4B}, //16975 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x5D4A}, //16976 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x5D69}, //16977 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x5D74}, //16978 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x5D82}, //16979 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x5D99}, //16980 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x5D9D}, //16981 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x8C73}, //16982 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x5DB7}, //16983 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x5DC5}, //16984 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x5F73}, //16985 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x5F77}, //16986 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x5F82}, //16987 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x5F87}, //16988 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x5F89}, //16989 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x5F8C}, //16990 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x5F95}, //16991 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x5F99}, //16992 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x5F9C}, //16993 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x5FA8}, //16994 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x5FAD}, //16995 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x5FB5}, //16996 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x5FBC}, //16997 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x8862}, //16998 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x5F61}, //16999 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x72AD}, //17000 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x72B0}, //17001 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x72B4}, //17002 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x72B7}, //17003 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x72B8}, //17004 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x72C3}, //17005 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x72C1}, //17006 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x72CE}, //17007 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x72CD}, //17008 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x72D2}, //17009 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x72E8}, //17010 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x72EF}, //17011 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x72E9}, //17012 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x72F2}, //17013 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x72F4}, //17014 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x72F7}, //17015 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x7301}, //17016 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x72F3}, //17017 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x7303}, //17018 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x72FA}, //17019 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x91E6}, //17020 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x91E7}, //17021 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x91E8}, //17022 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x91E9}, //17023 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x91EA}, //17024 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x91EB}, //17025 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x91EC}, //17026 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x91ED}, //17027 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x91EE}, //17028 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x91EF}, //17029 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x91F0}, //17030 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x91F1}, //17031 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x91F2}, //17032 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x91F3}, //17033 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x91F4}, //17034 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x91F5}, //17035 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x91F6}, //17036 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x91F7}, //17037 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x91F8}, //17038 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x91F9}, //17039 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x91FA}, //17040 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x91FB}, //17041 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x91FC}, //17042 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x91FD}, //17043 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x91FE}, //17044 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x91FF}, //17045 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x9200}, //17046 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x9201}, //17047 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x9202}, //17048 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x9203}, //17049 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x9204}, //17050 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x9205}, //17051 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x9206}, //17052 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x9207}, //17053 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x9208}, //17054 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x9209}, //17055 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x920A}, //17056 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x920B}, //17057 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x920C}, //17058 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x920D}, //17059 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x920E}, //17060 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x920F}, //17061 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x9210}, //17062 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x9211}, //17063 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x9212}, //17064 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x9213}, //17065 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x9214}, //17066 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x9215}, //17067 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x9216}, //17068 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x9217}, //17069 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x9218}, //17070 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x9219}, //17071 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x921A}, //17072 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x921B}, //17073 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x921C}, //17074 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x921D}, //17075 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x921E}, //17076 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x921F}, //17077 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x9220}, //17078 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x9221}, //17079 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x9222}, //17080 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x9223}, //17081 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x9224}, //17082 #CJK UNIFIED IDEOGRAPH + {0xE280, 0x9225}, //17083 #CJK UNIFIED IDEOGRAPH + {0xE281, 0x9226}, //17084 #CJK UNIFIED IDEOGRAPH + {0xE282, 0x9227}, //17085 #CJK UNIFIED IDEOGRAPH + {0xE283, 0x9228}, //17086 #CJK UNIFIED IDEOGRAPH + {0xE284, 0x9229}, //17087 #CJK UNIFIED IDEOGRAPH + {0xE285, 0x922A}, //17088 #CJK UNIFIED IDEOGRAPH + {0xE286, 0x922B}, //17089 #CJK UNIFIED IDEOGRAPH + {0xE287, 0x922C}, //17090 #CJK UNIFIED IDEOGRAPH + {0xE288, 0x922D}, //17091 #CJK UNIFIED IDEOGRAPH + {0xE289, 0x922E}, //17092 #CJK UNIFIED IDEOGRAPH + {0xE28A, 0x922F}, //17093 #CJK UNIFIED IDEOGRAPH + {0xE28B, 0x9230}, //17094 #CJK UNIFIED IDEOGRAPH + {0xE28C, 0x9231}, //17095 #CJK UNIFIED IDEOGRAPH + {0xE28D, 0x9232}, //17096 #CJK UNIFIED IDEOGRAPH + {0xE28E, 0x9233}, //17097 #CJK UNIFIED IDEOGRAPH + {0xE28F, 0x9234}, //17098 #CJK UNIFIED IDEOGRAPH + {0xE290, 0x9235}, //17099 #CJK UNIFIED IDEOGRAPH + {0xE291, 0x9236}, //17100 #CJK UNIFIED IDEOGRAPH + {0xE292, 0x9237}, //17101 #CJK UNIFIED IDEOGRAPH + {0xE293, 0x9238}, //17102 #CJK UNIFIED IDEOGRAPH + {0xE294, 0x9239}, //17103 #CJK UNIFIED IDEOGRAPH + {0xE295, 0x923A}, //17104 #CJK UNIFIED IDEOGRAPH + {0xE296, 0x923B}, //17105 #CJK UNIFIED IDEOGRAPH + {0xE297, 0x923C}, //17106 #CJK UNIFIED IDEOGRAPH + {0xE298, 0x923D}, //17107 #CJK UNIFIED IDEOGRAPH + {0xE299, 0x923E}, //17108 #CJK UNIFIED IDEOGRAPH + {0xE29A, 0x923F}, //17109 #CJK UNIFIED IDEOGRAPH + {0xE29B, 0x9240}, //17110 #CJK UNIFIED IDEOGRAPH + {0xE29C, 0x9241}, //17111 #CJK UNIFIED IDEOGRAPH + {0xE29D, 0x9242}, //17112 #CJK UNIFIED IDEOGRAPH + {0xE29E, 0x9243}, //17113 #CJK UNIFIED IDEOGRAPH + {0xE29F, 0x9244}, //17114 #CJK UNIFIED IDEOGRAPH + {0xE2A0, 0x9245}, //17115 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x72FB}, //17116 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x7317}, //17117 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x7313}, //17118 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x7321}, //17119 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x730A}, //17120 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x731E}, //17121 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x731D}, //17122 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x7315}, //17123 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x7322}, //17124 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x7339}, //17125 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x7325}, //17126 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x732C}, //17127 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x7338}, //17128 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7331}, //17129 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7350}, //17130 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x734D}, //17131 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7357}, //17132 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7360}, //17133 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x736C}, //17134 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x736F}, //17135 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x737E}, //17136 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x821B}, //17137 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x5925}, //17138 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x98E7}, //17139 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x5924}, //17140 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x5902}, //17141 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x9963}, //17142 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x9967}, //17143 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x9968}, //17144 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x9969}, //17145 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x996A}, //17146 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x996B}, //17147 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x996C}, //17148 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x9974}, //17149 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x9977}, //17150 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x997D}, //17151 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x9980}, //17152 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x9984}, //17153 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x9987}, //17154 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x998A}, //17155 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x998D}, //17156 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x9990}, //17157 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x9991}, //17158 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x9993}, //17159 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x9994}, //17160 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x9995}, //17161 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x5E80}, //17162 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x5E91}, //17163 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x5E8B}, //17164 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x5E96}, //17165 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x5EA5}, //17166 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x5EA0}, //17167 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x5EB9}, //17168 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x5EB5}, //17169 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x5EBE}, //17170 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x5EB3}, //17171 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x8D53}, //17172 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x5ED2}, //17173 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x5ED1}, //17174 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x5EDB}, //17175 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x5EE8}, //17176 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x5EEA}, //17177 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x81BA}, //17178 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x5FC4}, //17179 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x5FC9}, //17180 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x5FD6}, //17181 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x5FCF}, //17182 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x6003}, //17183 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x5FEE}, //17184 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x6004}, //17185 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x5FE1}, //17186 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x5FE4}, //17187 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x5FFE}, //17188 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x6005}, //17189 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x6006}, //17190 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x5FEA}, //17191 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x5FED}, //17192 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x5FF8}, //17193 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x6019}, //17194 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x6035}, //17195 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x6026}, //17196 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x601B}, //17197 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x600F}, //17198 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x600D}, //17199 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x6029}, //17200 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x602B}, //17201 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x600A}, //17202 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x603F}, //17203 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x6021}, //17204 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x6078}, //17205 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x6079}, //17206 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x607B}, //17207 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x607A}, //17208 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x6042}, //17209 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x9246}, //17210 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x9247}, //17211 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x9248}, //17212 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x9249}, //17213 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x924A}, //17214 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x924B}, //17215 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x924C}, //17216 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x924D}, //17217 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x924E}, //17218 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x924F}, //17219 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x9250}, //17220 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x9251}, //17221 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x9252}, //17222 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x9253}, //17223 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x9254}, //17224 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x9255}, //17225 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x9256}, //17226 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x9257}, //17227 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x9258}, //17228 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x9259}, //17229 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x925A}, //17230 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x925B}, //17231 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x925C}, //17232 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x925D}, //17233 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x925E}, //17234 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x925F}, //17235 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x9260}, //17236 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x9261}, //17237 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x9262}, //17238 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x9263}, //17239 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x9264}, //17240 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x9265}, //17241 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x9266}, //17242 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x9267}, //17243 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x9268}, //17244 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x9269}, //17245 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x926A}, //17246 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x926B}, //17247 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x926C}, //17248 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x926D}, //17249 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x926E}, //17250 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x926F}, //17251 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x9270}, //17252 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x9271}, //17253 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x9272}, //17254 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x9273}, //17255 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x9275}, //17256 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x9276}, //17257 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x9277}, //17258 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x9278}, //17259 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x9279}, //17260 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x927A}, //17261 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x927B}, //17262 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x927C}, //17263 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x927D}, //17264 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x927E}, //17265 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x927F}, //17266 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x9280}, //17267 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x9281}, //17268 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x9282}, //17269 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x9283}, //17270 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x9284}, //17271 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x9285}, //17272 #CJK UNIFIED IDEOGRAPH + {0xE380, 0x9286}, //17273 #CJK UNIFIED IDEOGRAPH + {0xE381, 0x9287}, //17274 #CJK UNIFIED IDEOGRAPH + {0xE382, 0x9288}, //17275 #CJK UNIFIED IDEOGRAPH + {0xE383, 0x9289}, //17276 #CJK UNIFIED IDEOGRAPH + {0xE384, 0x928A}, //17277 #CJK UNIFIED IDEOGRAPH + {0xE385, 0x928B}, //17278 #CJK UNIFIED IDEOGRAPH + {0xE386, 0x928C}, //17279 #CJK UNIFIED IDEOGRAPH + {0xE387, 0x928D}, //17280 #CJK UNIFIED IDEOGRAPH + {0xE388, 0x928F}, //17281 #CJK UNIFIED IDEOGRAPH + {0xE389, 0x9290}, //17282 #CJK UNIFIED IDEOGRAPH + {0xE38A, 0x9291}, //17283 #CJK UNIFIED IDEOGRAPH + {0xE38B, 0x9292}, //17284 #CJK UNIFIED IDEOGRAPH + {0xE38C, 0x9293}, //17285 #CJK UNIFIED IDEOGRAPH + {0xE38D, 0x9294}, //17286 #CJK UNIFIED IDEOGRAPH + {0xE38E, 0x9295}, //17287 #CJK UNIFIED IDEOGRAPH + {0xE38F, 0x9296}, //17288 #CJK UNIFIED IDEOGRAPH + {0xE390, 0x9297}, //17289 #CJK UNIFIED IDEOGRAPH + {0xE391, 0x9298}, //17290 #CJK UNIFIED IDEOGRAPH + {0xE392, 0x9299}, //17291 #CJK UNIFIED IDEOGRAPH + {0xE393, 0x929A}, //17292 #CJK UNIFIED IDEOGRAPH + {0xE394, 0x929B}, //17293 #CJK UNIFIED IDEOGRAPH + {0xE395, 0x929C}, //17294 #CJK UNIFIED IDEOGRAPH + {0xE396, 0x929D}, //17295 #CJK UNIFIED IDEOGRAPH + {0xE397, 0x929E}, //17296 #CJK UNIFIED IDEOGRAPH + {0xE398, 0x929F}, //17297 #CJK UNIFIED IDEOGRAPH + {0xE399, 0x92A0}, //17298 #CJK UNIFIED IDEOGRAPH + {0xE39A, 0x92A1}, //17299 #CJK UNIFIED IDEOGRAPH + {0xE39B, 0x92A2}, //17300 #CJK UNIFIED IDEOGRAPH + {0xE39C, 0x92A3}, //17301 #CJK UNIFIED IDEOGRAPH + {0xE39D, 0x92A4}, //17302 #CJK UNIFIED IDEOGRAPH + {0xE39E, 0x92A5}, //17303 #CJK UNIFIED IDEOGRAPH + {0xE39F, 0x92A6}, //17304 #CJK UNIFIED IDEOGRAPH + {0xE3A0, 0x92A7}, //17305 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x606A}, //17306 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x607D}, //17307 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x6096}, //17308 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x609A}, //17309 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x60AD}, //17310 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x609D}, //17311 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x6083}, //17312 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x6092}, //17313 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x608C}, //17314 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x609B}, //17315 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x60EC}, //17316 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x60BB}, //17317 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x60B1}, //17318 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x60DD}, //17319 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x60D8}, //17320 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x60C6}, //17321 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x60DA}, //17322 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x60B4}, //17323 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x6120}, //17324 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x6126}, //17325 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x6115}, //17326 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x6123}, //17327 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x60F4}, //17328 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x6100}, //17329 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x610E}, //17330 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x612B}, //17331 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x614A}, //17332 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x6175}, //17333 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x61AC}, //17334 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x6194}, //17335 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x61A7}, //17336 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x61B7}, //17337 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x61D4}, //17338 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x61F5}, //17339 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x5FDD}, //17340 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x96B3}, //17341 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x95E9}, //17342 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x95EB}, //17343 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x95F1}, //17344 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x95F3}, //17345 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x95F5}, //17346 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x95F6}, //17347 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x95FC}, //17348 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x95FE}, //17349 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x9603}, //17350 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x9604}, //17351 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x9606}, //17352 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x9608}, //17353 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x960A}, //17354 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x960B}, //17355 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x960C}, //17356 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x960D}, //17357 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x960F}, //17358 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x9612}, //17359 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x9615}, //17360 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x9616}, //17361 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x9617}, //17362 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x9619}, //17363 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x961A}, //17364 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x4E2C}, //17365 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x723F}, //17366 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x6215}, //17367 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x6C35}, //17368 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x6C54}, //17369 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x6C5C}, //17370 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x6C4A}, //17371 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x6CA3}, //17372 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x6C85}, //17373 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x6C90}, //17374 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x6C94}, //17375 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x6C8C}, //17376 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x6C68}, //17377 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x6C69}, //17378 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x6C74}, //17379 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x6C76}, //17380 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x6C86}, //17381 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x6CA9}, //17382 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x6CD0}, //17383 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x6CD4}, //17384 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x6CAD}, //17385 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x6CF7}, //17386 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x6CF8}, //17387 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x6CF1}, //17388 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x6CD7}, //17389 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x6CB2}, //17390 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x6CE0}, //17391 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x6CD6}, //17392 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x6CFA}, //17393 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x6CEB}, //17394 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x6CEE}, //17395 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x6CB1}, //17396 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x6CD3}, //17397 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x6CEF}, //17398 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x6CFE}, //17399 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x92A8}, //17400 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x92A9}, //17401 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x92AA}, //17402 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x92AB}, //17403 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x92AC}, //17404 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x92AD}, //17405 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x92AF}, //17406 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x92B0}, //17407 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x92B1}, //17408 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x92B2}, //17409 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x92B3}, //17410 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x92B4}, //17411 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x92B5}, //17412 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x92B6}, //17413 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x92B7}, //17414 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x92B8}, //17415 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x92B9}, //17416 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x92BA}, //17417 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x92BB}, //17418 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x92BC}, //17419 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x92BD}, //17420 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x92BE}, //17421 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x92BF}, //17422 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x92C0}, //17423 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x92C1}, //17424 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x92C2}, //17425 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x92C3}, //17426 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x92C4}, //17427 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x92C5}, //17428 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x92C6}, //17429 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x92C7}, //17430 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x92C9}, //17431 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x92CA}, //17432 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x92CB}, //17433 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x92CC}, //17434 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x92CD}, //17435 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x92CE}, //17436 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x92CF}, //17437 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x92D0}, //17438 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x92D1}, //17439 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x92D2}, //17440 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x92D3}, //17441 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x92D4}, //17442 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x92D5}, //17443 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x92D6}, //17444 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x92D7}, //17445 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x92D8}, //17446 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x92D9}, //17447 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x92DA}, //17448 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x92DB}, //17449 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x92DC}, //17450 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x92DD}, //17451 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x92DE}, //17452 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x92DF}, //17453 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x92E0}, //17454 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x92E1}, //17455 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x92E2}, //17456 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x92E3}, //17457 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x92E4}, //17458 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x92E5}, //17459 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x92E6}, //17460 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x92E7}, //17461 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x92E8}, //17462 #CJK UNIFIED IDEOGRAPH + {0xE480, 0x92E9}, //17463 #CJK UNIFIED IDEOGRAPH + {0xE481, 0x92EA}, //17464 #CJK UNIFIED IDEOGRAPH + {0xE482, 0x92EB}, //17465 #CJK UNIFIED IDEOGRAPH + {0xE483, 0x92EC}, //17466 #CJK UNIFIED IDEOGRAPH + {0xE484, 0x92ED}, //17467 #CJK UNIFIED IDEOGRAPH + {0xE485, 0x92EE}, //17468 #CJK UNIFIED IDEOGRAPH + {0xE486, 0x92EF}, //17469 #CJK UNIFIED IDEOGRAPH + {0xE487, 0x92F0}, //17470 #CJK UNIFIED IDEOGRAPH + {0xE488, 0x92F1}, //17471 #CJK UNIFIED IDEOGRAPH + {0xE489, 0x92F2}, //17472 #CJK UNIFIED IDEOGRAPH + {0xE48A, 0x92F3}, //17473 #CJK UNIFIED IDEOGRAPH + {0xE48B, 0x92F4}, //17474 #CJK UNIFIED IDEOGRAPH + {0xE48C, 0x92F5}, //17475 #CJK UNIFIED IDEOGRAPH + {0xE48D, 0x92F6}, //17476 #CJK UNIFIED IDEOGRAPH + {0xE48E, 0x92F7}, //17477 #CJK UNIFIED IDEOGRAPH + {0xE48F, 0x92F8}, //17478 #CJK UNIFIED IDEOGRAPH + {0xE490, 0x92F9}, //17479 #CJK UNIFIED IDEOGRAPH + {0xE491, 0x92FA}, //17480 #CJK UNIFIED IDEOGRAPH + {0xE492, 0x92FB}, //17481 #CJK UNIFIED IDEOGRAPH + {0xE493, 0x92FC}, //17482 #CJK UNIFIED IDEOGRAPH + {0xE494, 0x92FD}, //17483 #CJK UNIFIED IDEOGRAPH + {0xE495, 0x92FE}, //17484 #CJK UNIFIED IDEOGRAPH + {0xE496, 0x92FF}, //17485 #CJK UNIFIED IDEOGRAPH + {0xE497, 0x9300}, //17486 #CJK UNIFIED IDEOGRAPH + {0xE498, 0x9301}, //17487 #CJK UNIFIED IDEOGRAPH + {0xE499, 0x9302}, //17488 #CJK UNIFIED IDEOGRAPH + {0xE49A, 0x9303}, //17489 #CJK UNIFIED IDEOGRAPH + {0xE49B, 0x9304}, //17490 #CJK UNIFIED IDEOGRAPH + {0xE49C, 0x9305}, //17491 #CJK UNIFIED IDEOGRAPH + {0xE49D, 0x9306}, //17492 #CJK UNIFIED IDEOGRAPH + {0xE49E, 0x9307}, //17493 #CJK UNIFIED IDEOGRAPH + {0xE49F, 0x9308}, //17494 #CJK UNIFIED IDEOGRAPH + {0xE4A0, 0x9309}, //17495 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x6D39}, //17496 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x6D27}, //17497 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x6D0C}, //17498 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x6D43}, //17499 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x6D48}, //17500 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x6D07}, //17501 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x6D04}, //17502 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x6D19}, //17503 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x6D0E}, //17504 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x6D2B}, //17505 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x6D4D}, //17506 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x6D2E}, //17507 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x6D35}, //17508 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x6D1A}, //17509 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x6D4F}, //17510 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x6D52}, //17511 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x6D54}, //17512 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x6D33}, //17513 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x6D91}, //17514 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x6D6F}, //17515 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x6D9E}, //17516 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x6DA0}, //17517 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x6D5E}, //17518 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x6D93}, //17519 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x6D94}, //17520 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x6D5C}, //17521 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x6D60}, //17522 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x6D7C}, //17523 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x6D63}, //17524 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x6E1A}, //17525 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x6DC7}, //17526 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x6DC5}, //17527 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x6DDE}, //17528 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x6E0E}, //17529 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x6DBF}, //17530 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x6DE0}, //17531 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x6E11}, //17532 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x6DE6}, //17533 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x6DDD}, //17534 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x6DD9}, //17535 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x6E16}, //17536 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x6DAB}, //17537 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x6E0C}, //17538 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x6DAE}, //17539 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x6E2B}, //17540 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x6E6E}, //17541 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x6E4E}, //17542 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x6E6B}, //17543 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x6EB2}, //17544 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x6E5F}, //17545 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x6E86}, //17546 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x6E53}, //17547 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x6E54}, //17548 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x6E32}, //17549 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x6E25}, //17550 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x6E44}, //17551 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x6EDF}, //17552 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x6EB1}, //17553 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x6E98}, //17554 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x6EE0}, //17555 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x6F2D}, //17556 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x6EE2}, //17557 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x6EA5}, //17558 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x6EA7}, //17559 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x6EBD}, //17560 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x6EBB}, //17561 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x6EB7}, //17562 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x6ED7}, //17563 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x6EB4}, //17564 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x6ECF}, //17565 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x6E8F}, //17566 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x6EC2}, //17567 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x6E9F}, //17568 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x6F62}, //17569 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x6F46}, //17570 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x6F47}, //17571 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x6F24}, //17572 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x6F15}, //17573 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x6EF9}, //17574 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x6F2F}, //17575 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x6F36}, //17576 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x6F4B}, //17577 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x6F74}, //17578 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x6F2A}, //17579 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x6F09}, //17580 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x6F29}, //17581 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x6F89}, //17582 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x6F8D}, //17583 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x6F8C}, //17584 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x6F78}, //17585 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x6F72}, //17586 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x6F7C}, //17587 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x6F7A}, //17588 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x6FD1}, //17589 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x930A}, //17590 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x930B}, //17591 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x930C}, //17592 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x930D}, //17593 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x930E}, //17594 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x930F}, //17595 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x9310}, //17596 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x9311}, //17597 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x9312}, //17598 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x9313}, //17599 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x9314}, //17600 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x9315}, //17601 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x9316}, //17602 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x9317}, //17603 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x9318}, //17604 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x9319}, //17605 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x931A}, //17606 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x931B}, //17607 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x931C}, //17608 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x931D}, //17609 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x931E}, //17610 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x931F}, //17611 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x9320}, //17612 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x9321}, //17613 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x9322}, //17614 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x9323}, //17615 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x9324}, //17616 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x9325}, //17617 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x9326}, //17618 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x9327}, //17619 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x9328}, //17620 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x9329}, //17621 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x932A}, //17622 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x932B}, //17623 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x932C}, //17624 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x932D}, //17625 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x932E}, //17626 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x932F}, //17627 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x9330}, //17628 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x9331}, //17629 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x9332}, //17630 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x9333}, //17631 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x9334}, //17632 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x9335}, //17633 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x9336}, //17634 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x9337}, //17635 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x9338}, //17636 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x9339}, //17637 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x933A}, //17638 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x933B}, //17639 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x933C}, //17640 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x933D}, //17641 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x933F}, //17642 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x9340}, //17643 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x9341}, //17644 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x9342}, //17645 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x9343}, //17646 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x9344}, //17647 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x9345}, //17648 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x9346}, //17649 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x9347}, //17650 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x9348}, //17651 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x9349}, //17652 #CJK UNIFIED IDEOGRAPH + {0xE580, 0x934A}, //17653 #CJK UNIFIED IDEOGRAPH + {0xE581, 0x934B}, //17654 #CJK UNIFIED IDEOGRAPH + {0xE582, 0x934C}, //17655 #CJK UNIFIED IDEOGRAPH + {0xE583, 0x934D}, //17656 #CJK UNIFIED IDEOGRAPH + {0xE584, 0x934E}, //17657 #CJK UNIFIED IDEOGRAPH + {0xE585, 0x934F}, //17658 #CJK UNIFIED IDEOGRAPH + {0xE586, 0x9350}, //17659 #CJK UNIFIED IDEOGRAPH + {0xE587, 0x9351}, //17660 #CJK UNIFIED IDEOGRAPH + {0xE588, 0x9352}, //17661 #CJK UNIFIED IDEOGRAPH + {0xE589, 0x9353}, //17662 #CJK UNIFIED IDEOGRAPH + {0xE58A, 0x9354}, //17663 #CJK UNIFIED IDEOGRAPH + {0xE58B, 0x9355}, //17664 #CJK UNIFIED IDEOGRAPH + {0xE58C, 0x9356}, //17665 #CJK UNIFIED IDEOGRAPH + {0xE58D, 0x9357}, //17666 #CJK UNIFIED IDEOGRAPH + {0xE58E, 0x9358}, //17667 #CJK UNIFIED IDEOGRAPH + {0xE58F, 0x9359}, //17668 #CJK UNIFIED IDEOGRAPH + {0xE590, 0x935A}, //17669 #CJK UNIFIED IDEOGRAPH + {0xE591, 0x935B}, //17670 #CJK UNIFIED IDEOGRAPH + {0xE592, 0x935C}, //17671 #CJK UNIFIED IDEOGRAPH + {0xE593, 0x935D}, //17672 #CJK UNIFIED IDEOGRAPH + {0xE594, 0x935E}, //17673 #CJK UNIFIED IDEOGRAPH + {0xE595, 0x935F}, //17674 #CJK UNIFIED IDEOGRAPH + {0xE596, 0x9360}, //17675 #CJK UNIFIED IDEOGRAPH + {0xE597, 0x9361}, //17676 #CJK UNIFIED IDEOGRAPH + {0xE598, 0x9362}, //17677 #CJK UNIFIED IDEOGRAPH + {0xE599, 0x9363}, //17678 #CJK UNIFIED IDEOGRAPH + {0xE59A, 0x9364}, //17679 #CJK UNIFIED IDEOGRAPH + {0xE59B, 0x9365}, //17680 #CJK UNIFIED IDEOGRAPH + {0xE59C, 0x9366}, //17681 #CJK UNIFIED IDEOGRAPH + {0xE59D, 0x9367}, //17682 #CJK UNIFIED IDEOGRAPH + {0xE59E, 0x9368}, //17683 #CJK UNIFIED IDEOGRAPH + {0xE59F, 0x9369}, //17684 #CJK UNIFIED IDEOGRAPH + {0xE5A0, 0x936B}, //17685 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x6FC9}, //17686 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x6FA7}, //17687 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x6FB9}, //17688 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x6FB6}, //17689 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x6FC2}, //17690 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x6FE1}, //17691 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x6FEE}, //17692 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x6FDE}, //17693 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x6FE0}, //17694 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x6FEF}, //17695 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x701A}, //17696 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x7023}, //17697 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x701B}, //17698 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x7039}, //17699 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x7035}, //17700 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x704F}, //17701 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x705E}, //17702 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x5B80}, //17703 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x5B84}, //17704 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x5B95}, //17705 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x5B93}, //17706 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x5BA5}, //17707 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x5BB8}, //17708 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x752F}, //17709 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x9A9E}, //17710 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x6434}, //17711 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x5BE4}, //17712 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x5BEE}, //17713 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x8930}, //17714 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x5BF0}, //17715 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x8E47}, //17716 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x8B07}, //17717 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x8FB6}, //17718 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x8FD3}, //17719 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x8FD5}, //17720 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x8FE5}, //17721 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x8FEE}, //17722 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x8FE4}, //17723 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x8FE9}, //17724 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x8FE6}, //17725 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x8FF3}, //17726 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x8FE8}, //17727 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x9005}, //17728 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x9004}, //17729 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x900B}, //17730 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x9026}, //17731 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x9011}, //17732 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x900D}, //17733 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x9016}, //17734 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x9021}, //17735 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x9035}, //17736 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x9036}, //17737 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x902D}, //17738 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x902F}, //17739 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x9044}, //17740 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x9051}, //17741 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x9052}, //17742 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x9050}, //17743 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x9068}, //17744 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x9058}, //17745 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x9062}, //17746 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x905B}, //17747 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x66B9}, //17748 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x9074}, //17749 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x907D}, //17750 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x9082}, //17751 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x9088}, //17752 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x9083}, //17753 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x908B}, //17754 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x5F50}, //17755 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x5F57}, //17756 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x5F56}, //17757 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x5F58}, //17758 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x5C3B}, //17759 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x54AB}, //17760 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x5C50}, //17761 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x5C59}, //17762 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x5B71}, //17763 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x5C63}, //17764 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x5C66}, //17765 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x7FBC}, //17766 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x5F2A}, //17767 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x5F29}, //17768 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x5F2D}, //17769 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x8274}, //17770 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x5F3C}, //17771 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x9B3B}, //17772 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x5C6E}, //17773 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x5981}, //17774 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x5983}, //17775 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x598D}, //17776 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x59A9}, //17777 #CJK UNIFIED IDEOGRAPH + {0xE5FD, 0x59AA}, //17778 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0x59A3}, //17779 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x936C}, //17780 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x936D}, //17781 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x936E}, //17782 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x936F}, //17783 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x9370}, //17784 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x9371}, //17785 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x9372}, //17786 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x9373}, //17787 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x9374}, //17788 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x9375}, //17789 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x9376}, //17790 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x9377}, //17791 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x9378}, //17792 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x9379}, //17793 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x937A}, //17794 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x937B}, //17795 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x937C}, //17796 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x937D}, //17797 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x937E}, //17798 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x937F}, //17799 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x9380}, //17800 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x9381}, //17801 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x9382}, //17802 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x9383}, //17803 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x9384}, //17804 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x9385}, //17805 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x9386}, //17806 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x9387}, //17807 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x9388}, //17808 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x9389}, //17809 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x938A}, //17810 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x938B}, //17811 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x938C}, //17812 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x938D}, //17813 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x938E}, //17814 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x9390}, //17815 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x9391}, //17816 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x9392}, //17817 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x9393}, //17818 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x9394}, //17819 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x9395}, //17820 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x9396}, //17821 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x9397}, //17822 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x9398}, //17823 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x9399}, //17824 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x939A}, //17825 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x939B}, //17826 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x939C}, //17827 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x939D}, //17828 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x939E}, //17829 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x939F}, //17830 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x93A0}, //17831 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x93A1}, //17832 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x93A2}, //17833 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x93A3}, //17834 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x93A4}, //17835 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x93A5}, //17836 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x93A6}, //17837 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x93A7}, //17838 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x93A8}, //17839 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x93A9}, //17840 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x93AA}, //17841 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x93AB}, //17842 #CJK UNIFIED IDEOGRAPH + {0xE680, 0x93AC}, //17843 #CJK UNIFIED IDEOGRAPH + {0xE681, 0x93AD}, //17844 #CJK UNIFIED IDEOGRAPH + {0xE682, 0x93AE}, //17845 #CJK UNIFIED IDEOGRAPH + {0xE683, 0x93AF}, //17846 #CJK UNIFIED IDEOGRAPH + {0xE684, 0x93B0}, //17847 #CJK UNIFIED IDEOGRAPH + {0xE685, 0x93B1}, //17848 #CJK UNIFIED IDEOGRAPH + {0xE686, 0x93B2}, //17849 #CJK UNIFIED IDEOGRAPH + {0xE687, 0x93B3}, //17850 #CJK UNIFIED IDEOGRAPH + {0xE688, 0x93B4}, //17851 #CJK UNIFIED IDEOGRAPH + {0xE689, 0x93B5}, //17852 #CJK UNIFIED IDEOGRAPH + {0xE68A, 0x93B6}, //17853 #CJK UNIFIED IDEOGRAPH + {0xE68B, 0x93B7}, //17854 #CJK UNIFIED IDEOGRAPH + {0xE68C, 0x93B8}, //17855 #CJK UNIFIED IDEOGRAPH + {0xE68D, 0x93B9}, //17856 #CJK UNIFIED IDEOGRAPH + {0xE68E, 0x93BA}, //17857 #CJK UNIFIED IDEOGRAPH + {0xE68F, 0x93BB}, //17858 #CJK UNIFIED IDEOGRAPH + {0xE690, 0x93BC}, //17859 #CJK UNIFIED IDEOGRAPH + {0xE691, 0x93BD}, //17860 #CJK UNIFIED IDEOGRAPH + {0xE692, 0x93BE}, //17861 #CJK UNIFIED IDEOGRAPH + {0xE693, 0x93BF}, //17862 #CJK UNIFIED IDEOGRAPH + {0xE694, 0x93C0}, //17863 #CJK UNIFIED IDEOGRAPH + {0xE695, 0x93C1}, //17864 #CJK UNIFIED IDEOGRAPH + {0xE696, 0x93C2}, //17865 #CJK UNIFIED IDEOGRAPH + {0xE697, 0x93C3}, //17866 #CJK UNIFIED IDEOGRAPH + {0xE698, 0x93C4}, //17867 #CJK UNIFIED IDEOGRAPH + {0xE699, 0x93C5}, //17868 #CJK UNIFIED IDEOGRAPH + {0xE69A, 0x93C6}, //17869 #CJK UNIFIED IDEOGRAPH + {0xE69B, 0x93C7}, //17870 #CJK UNIFIED IDEOGRAPH + {0xE69C, 0x93C8}, //17871 #CJK UNIFIED IDEOGRAPH + {0xE69D, 0x93C9}, //17872 #CJK UNIFIED IDEOGRAPH + {0xE69E, 0x93CB}, //17873 #CJK UNIFIED IDEOGRAPH + {0xE69F, 0x93CC}, //17874 #CJK UNIFIED IDEOGRAPH + {0xE6A0, 0x93CD}, //17875 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x5997}, //17876 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x59CA}, //17877 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x59AB}, //17878 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x599E}, //17879 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x59A4}, //17880 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x59D2}, //17881 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x59B2}, //17882 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x59AF}, //17883 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x59D7}, //17884 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x59BE}, //17885 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x5A05}, //17886 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x5A06}, //17887 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x59DD}, //17888 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x5A08}, //17889 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x59E3}, //17890 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x59D8}, //17891 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x59F9}, //17892 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x5A0C}, //17893 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x5A09}, //17894 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x5A32}, //17895 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x5A34}, //17896 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x5A11}, //17897 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x5A23}, //17898 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x5A13}, //17899 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x5A40}, //17900 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x5A67}, //17901 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x5A4A}, //17902 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x5A55}, //17903 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x5A3C}, //17904 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x5A62}, //17905 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x5A75}, //17906 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x80EC}, //17907 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x5AAA}, //17908 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x5A9B}, //17909 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x5A77}, //17910 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x5A7A}, //17911 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x5ABE}, //17912 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x5AEB}, //17913 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x5AB2}, //17914 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x5AD2}, //17915 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x5AD4}, //17916 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x5AB8}, //17917 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x5AE0}, //17918 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x5AE3}, //17919 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x5AF1}, //17920 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x5AD6}, //17921 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x5AE6}, //17922 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x5AD8}, //17923 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x5ADC}, //17924 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x5B09}, //17925 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x5B17}, //17926 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x5B16}, //17927 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x5B32}, //17928 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x5B37}, //17929 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x5B40}, //17930 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x5C15}, //17931 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x5C1C}, //17932 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x5B5A}, //17933 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x5B65}, //17934 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x5B73}, //17935 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x5B51}, //17936 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x5B53}, //17937 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x5B62}, //17938 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x9A75}, //17939 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x9A77}, //17940 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x9A78}, //17941 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x9A7A}, //17942 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x9A7F}, //17943 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x9A7D}, //17944 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x9A80}, //17945 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x9A81}, //17946 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x9A85}, //17947 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x9A88}, //17948 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x9A8A}, //17949 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x9A90}, //17950 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x9A92}, //17951 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x9A93}, //17952 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x9A96}, //17953 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x9A98}, //17954 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x9A9B}, //17955 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x9A9C}, //17956 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x9A9D}, //17957 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x9A9F}, //17958 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x9AA0}, //17959 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x9AA2}, //17960 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x9AA3}, //17961 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x9AA5}, //17962 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x9AA7}, //17963 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x7E9F}, //17964 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x7EA1}, //17965 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x7EA3}, //17966 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x7EA5}, //17967 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x7EA8}, //17968 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x7EA9}, //17969 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x93CE}, //17970 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x93CF}, //17971 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x93D0}, //17972 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x93D1}, //17973 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x93D2}, //17974 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x93D3}, //17975 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x93D4}, //17976 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x93D5}, //17977 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x93D7}, //17978 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x93D8}, //17979 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x93D9}, //17980 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x93DA}, //17981 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x93DB}, //17982 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x93DC}, //17983 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x93DD}, //17984 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x93DE}, //17985 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x93DF}, //17986 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x93E0}, //17987 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x93E1}, //17988 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x93E2}, //17989 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x93E3}, //17990 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x93E4}, //17991 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x93E5}, //17992 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x93E6}, //17993 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x93E7}, //17994 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x93E8}, //17995 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x93E9}, //17996 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x93EA}, //17997 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x93EB}, //17998 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x93EC}, //17999 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x93ED}, //18000 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x93EE}, //18001 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x93EF}, //18002 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x93F0}, //18003 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x93F1}, //18004 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x93F2}, //18005 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x93F3}, //18006 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x93F4}, //18007 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x93F5}, //18008 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x93F6}, //18009 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x93F7}, //18010 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x93F8}, //18011 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x93F9}, //18012 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x93FA}, //18013 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x93FB}, //18014 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x93FC}, //18015 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x93FD}, //18016 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x93FE}, //18017 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x93FF}, //18018 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x9400}, //18019 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x9401}, //18020 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x9402}, //18021 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x9403}, //18022 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x9404}, //18023 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x9405}, //18024 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x9406}, //18025 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x9407}, //18026 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x9408}, //18027 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x9409}, //18028 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x940A}, //18029 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x940B}, //18030 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x940C}, //18031 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x940D}, //18032 #CJK UNIFIED IDEOGRAPH + {0xE780, 0x940E}, //18033 #CJK UNIFIED IDEOGRAPH + {0xE781, 0x940F}, //18034 #CJK UNIFIED IDEOGRAPH + {0xE782, 0x9410}, //18035 #CJK UNIFIED IDEOGRAPH + {0xE783, 0x9411}, //18036 #CJK UNIFIED IDEOGRAPH + {0xE784, 0x9412}, //18037 #CJK UNIFIED IDEOGRAPH + {0xE785, 0x9413}, //18038 #CJK UNIFIED IDEOGRAPH + {0xE786, 0x9414}, //18039 #CJK UNIFIED IDEOGRAPH + {0xE787, 0x9415}, //18040 #CJK UNIFIED IDEOGRAPH + {0xE788, 0x9416}, //18041 #CJK UNIFIED IDEOGRAPH + {0xE789, 0x9417}, //18042 #CJK UNIFIED IDEOGRAPH + {0xE78A, 0x9418}, //18043 #CJK UNIFIED IDEOGRAPH + {0xE78B, 0x9419}, //18044 #CJK UNIFIED IDEOGRAPH + {0xE78C, 0x941A}, //18045 #CJK UNIFIED IDEOGRAPH + {0xE78D, 0x941B}, //18046 #CJK UNIFIED IDEOGRAPH + {0xE78E, 0x941C}, //18047 #CJK UNIFIED IDEOGRAPH + {0xE78F, 0x941D}, //18048 #CJK UNIFIED IDEOGRAPH + {0xE790, 0x941E}, //18049 #CJK UNIFIED IDEOGRAPH + {0xE791, 0x941F}, //18050 #CJK UNIFIED IDEOGRAPH + {0xE792, 0x9420}, //18051 #CJK UNIFIED IDEOGRAPH + {0xE793, 0x9421}, //18052 #CJK UNIFIED IDEOGRAPH + {0xE794, 0x9422}, //18053 #CJK UNIFIED IDEOGRAPH + {0xE795, 0x9423}, //18054 #CJK UNIFIED IDEOGRAPH + {0xE796, 0x9424}, //18055 #CJK UNIFIED IDEOGRAPH + {0xE797, 0x9425}, //18056 #CJK UNIFIED IDEOGRAPH + {0xE798, 0x9426}, //18057 #CJK UNIFIED IDEOGRAPH + {0xE799, 0x9427}, //18058 #CJK UNIFIED IDEOGRAPH + {0xE79A, 0x9428}, //18059 #CJK UNIFIED IDEOGRAPH + {0xE79B, 0x9429}, //18060 #CJK UNIFIED IDEOGRAPH + {0xE79C, 0x942A}, //18061 #CJK UNIFIED IDEOGRAPH + {0xE79D, 0x942B}, //18062 #CJK UNIFIED IDEOGRAPH + {0xE79E, 0x942C}, //18063 #CJK UNIFIED IDEOGRAPH + {0xE79F, 0x942D}, //18064 #CJK UNIFIED IDEOGRAPH + {0xE7A0, 0x942E}, //18065 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x7EAD}, //18066 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x7EB0}, //18067 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x7EBE}, //18068 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x7EC0}, //18069 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x7EC1}, //18070 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x7EC2}, //18071 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x7EC9}, //18072 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x7ECB}, //18073 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x7ECC}, //18074 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x7ED0}, //18075 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x7ED4}, //18076 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x7ED7}, //18077 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x7EDB}, //18078 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x7EE0}, //18079 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x7EE1}, //18080 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x7EE8}, //18081 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x7EEB}, //18082 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x7EEE}, //18083 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x7EEF}, //18084 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x7EF1}, //18085 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x7EF2}, //18086 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x7F0D}, //18087 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x7EF6}, //18088 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x7EFA}, //18089 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x7EFB}, //18090 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x7EFE}, //18091 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x7F01}, //18092 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x7F02}, //18093 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x7F03}, //18094 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x7F07}, //18095 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x7F08}, //18096 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x7F0B}, //18097 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x7F0C}, //18098 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x7F0F}, //18099 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x7F11}, //18100 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x7F12}, //18101 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x7F17}, //18102 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x7F19}, //18103 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x7F1C}, //18104 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x7F1B}, //18105 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x7F1F}, //18106 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x7F21}, //18107 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x7F22}, //18108 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x7F23}, //18109 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x7F24}, //18110 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x7F25}, //18111 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x7F26}, //18112 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x7F27}, //18113 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x7F2A}, //18114 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x7F2B}, //18115 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x7F2C}, //18116 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x7F2D}, //18117 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x7F2F}, //18118 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x7F30}, //18119 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x7F31}, //18120 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x7F32}, //18121 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x7F33}, //18122 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x7F35}, //18123 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x5E7A}, //18124 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x757F}, //18125 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x5DDB}, //18126 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x753E}, //18127 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x9095}, //18128 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x738E}, //18129 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x7391}, //18130 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x73AE}, //18131 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x73A2}, //18132 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x739F}, //18133 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x73CF}, //18134 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x73C2}, //18135 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x73D1}, //18136 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x73B7}, //18137 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x73B3}, //18138 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x73C0}, //18139 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x73C9}, //18140 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x73C8}, //18141 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x73E5}, //18142 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x73D9}, //18143 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x987C}, //18144 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x740A}, //18145 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x73E9}, //18146 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x73E7}, //18147 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x73DE}, //18148 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x73BA}, //18149 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x73F2}, //18150 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x740F}, //18151 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x742A}, //18152 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x745B}, //18153 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x7426}, //18154 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x7425}, //18155 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x7428}, //18156 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x7430}, //18157 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x742E}, //18158 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x742C}, //18159 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x942F}, //18160 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x9430}, //18161 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x9431}, //18162 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x9432}, //18163 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x9433}, //18164 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x9434}, //18165 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x9435}, //18166 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x9436}, //18167 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x9437}, //18168 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x9438}, //18169 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x9439}, //18170 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x943A}, //18171 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x943B}, //18172 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x943C}, //18173 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x943D}, //18174 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x943F}, //18175 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x9440}, //18176 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x9441}, //18177 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x9442}, //18178 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x9443}, //18179 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x9444}, //18180 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x9445}, //18181 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x9446}, //18182 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x9447}, //18183 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x9448}, //18184 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x9449}, //18185 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x944A}, //18186 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x944B}, //18187 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x944C}, //18188 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x944D}, //18189 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x944E}, //18190 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x944F}, //18191 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9450}, //18192 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9451}, //18193 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x9452}, //18194 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x9453}, //18195 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x9454}, //18196 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x9455}, //18197 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x9456}, //18198 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x9457}, //18199 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x9458}, //18200 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x9459}, //18201 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x945A}, //18202 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x945B}, //18203 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x945C}, //18204 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x945D}, //18205 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x945E}, //18206 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x945F}, //18207 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x9460}, //18208 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x9461}, //18209 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x9462}, //18210 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x9463}, //18211 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x9464}, //18212 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x9465}, //18213 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x9466}, //18214 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x9467}, //18215 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x9468}, //18216 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x9469}, //18217 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x946A}, //18218 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x946C}, //18219 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x946D}, //18220 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x946E}, //18221 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x946F}, //18222 #CJK UNIFIED IDEOGRAPH + {0xE880, 0x9470}, //18223 #CJK UNIFIED IDEOGRAPH + {0xE881, 0x9471}, //18224 #CJK UNIFIED IDEOGRAPH + {0xE882, 0x9472}, //18225 #CJK UNIFIED IDEOGRAPH + {0xE883, 0x9473}, //18226 #CJK UNIFIED IDEOGRAPH + {0xE884, 0x9474}, //18227 #CJK UNIFIED IDEOGRAPH + {0xE885, 0x9475}, //18228 #CJK UNIFIED IDEOGRAPH + {0xE886, 0x9476}, //18229 #CJK UNIFIED IDEOGRAPH + {0xE887, 0x9477}, //18230 #CJK UNIFIED IDEOGRAPH + {0xE888, 0x9478}, //18231 #CJK UNIFIED IDEOGRAPH + {0xE889, 0x9479}, //18232 #CJK UNIFIED IDEOGRAPH + {0xE88A, 0x947A}, //18233 #CJK UNIFIED IDEOGRAPH + {0xE88B, 0x947B}, //18234 #CJK UNIFIED IDEOGRAPH + {0xE88C, 0x947C}, //18235 #CJK UNIFIED IDEOGRAPH + {0xE88D, 0x947D}, //18236 #CJK UNIFIED IDEOGRAPH + {0xE88E, 0x947E}, //18237 #CJK UNIFIED IDEOGRAPH + {0xE88F, 0x947F}, //18238 #CJK UNIFIED IDEOGRAPH + {0xE890, 0x9480}, //18239 #CJK UNIFIED IDEOGRAPH + {0xE891, 0x9481}, //18240 #CJK UNIFIED IDEOGRAPH + {0xE892, 0x9482}, //18241 #CJK UNIFIED IDEOGRAPH + {0xE893, 0x9483}, //18242 #CJK UNIFIED IDEOGRAPH + {0xE894, 0x9484}, //18243 #CJK UNIFIED IDEOGRAPH + {0xE895, 0x9491}, //18244 #CJK UNIFIED IDEOGRAPH + {0xE896, 0x9496}, //18245 #CJK UNIFIED IDEOGRAPH + {0xE897, 0x9498}, //18246 #CJK UNIFIED IDEOGRAPH + {0xE898, 0x94C7}, //18247 #CJK UNIFIED IDEOGRAPH + {0xE899, 0x94CF}, //18248 #CJK UNIFIED IDEOGRAPH + {0xE89A, 0x94D3}, //18249 #CJK UNIFIED IDEOGRAPH + {0xE89B, 0x94D4}, //18250 #CJK UNIFIED IDEOGRAPH + {0xE89C, 0x94DA}, //18251 #CJK UNIFIED IDEOGRAPH + {0xE89D, 0x94E6}, //18252 #CJK UNIFIED IDEOGRAPH + {0xE89E, 0x94FB}, //18253 #CJK UNIFIED IDEOGRAPH + {0xE89F, 0x951C}, //18254 #CJK UNIFIED IDEOGRAPH + {0xE8A0, 0x9520}, //18255 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x741B}, //18256 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x741A}, //18257 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x7441}, //18258 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x745C}, //18259 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x7457}, //18260 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x7455}, //18261 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x7459}, //18262 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x7477}, //18263 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x746D}, //18264 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x747E}, //18265 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x749C}, //18266 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x748E}, //18267 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x7480}, //18268 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x7481}, //18269 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x7487}, //18270 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x748B}, //18271 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x749E}, //18272 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x74A8}, //18273 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x74A9}, //18274 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x7490}, //18275 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x74A7}, //18276 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x74D2}, //18277 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x74BA}, //18278 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x97EA}, //18279 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x97EB}, //18280 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x97EC}, //18281 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x674C}, //18282 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x6753}, //18283 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x675E}, //18284 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x6748}, //18285 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x6769}, //18286 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x67A5}, //18287 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x6787}, //18288 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x676A}, //18289 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x6773}, //18290 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x6798}, //18291 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x67A7}, //18292 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x6775}, //18293 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x67A8}, //18294 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x679E}, //18295 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x67AD}, //18296 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x678B}, //18297 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x6777}, //18298 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x677C}, //18299 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x67F0}, //18300 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x6809}, //18301 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x67D8}, //18302 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x680A}, //18303 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x67E9}, //18304 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x67B0}, //18305 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x680C}, //18306 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x67D9}, //18307 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x67B5}, //18308 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x67DA}, //18309 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x67B3}, //18310 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x67DD}, //18311 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x6800}, //18312 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x67C3}, //18313 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x67B8}, //18314 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x67E2}, //18315 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x680E}, //18316 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x67C1}, //18317 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x67FD}, //18318 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x6832}, //18319 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x6833}, //18320 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x6860}, //18321 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x6861}, //18322 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x684E}, //18323 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x6862}, //18324 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x6844}, //18325 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x6864}, //18326 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x6883}, //18327 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x681D}, //18328 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x6855}, //18329 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x6866}, //18330 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x6841}, //18331 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x6867}, //18332 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x6840}, //18333 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x683E}, //18334 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x684A}, //18335 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x6849}, //18336 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x6829}, //18337 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x68B5}, //18338 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x688F}, //18339 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x6874}, //18340 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x6877}, //18341 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x6893}, //18342 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x686B}, //18343 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x68C2}, //18344 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x696E}, //18345 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x68FC}, //18346 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x691F}, //18347 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x6920}, //18348 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0x68F9}, //18349 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x9527}, //18350 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x9533}, //18351 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x953D}, //18352 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x9543}, //18353 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x9548}, //18354 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x954B}, //18355 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x9555}, //18356 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x955A}, //18357 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x9560}, //18358 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x956E}, //18359 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x9574}, //18360 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x9575}, //18361 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x9577}, //18362 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x9578}, //18363 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x9579}, //18364 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x957A}, //18365 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x957B}, //18366 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x957C}, //18367 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x957D}, //18368 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x957E}, //18369 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x9580}, //18370 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x9581}, //18371 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x9582}, //18372 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x9583}, //18373 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x9584}, //18374 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x9585}, //18375 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x9586}, //18376 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x9587}, //18377 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x9588}, //18378 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x9589}, //18379 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x958A}, //18380 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x958B}, //18381 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x958C}, //18382 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x958D}, //18383 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x958E}, //18384 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x958F}, //18385 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x9590}, //18386 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x9591}, //18387 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x9592}, //18388 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x9593}, //18389 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x9594}, //18390 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x9595}, //18391 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x9596}, //18392 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x9597}, //18393 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x9598}, //18394 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x9599}, //18395 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x959A}, //18396 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x959B}, //18397 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x959C}, //18398 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x959D}, //18399 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x959E}, //18400 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x959F}, //18401 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x95A0}, //18402 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x95A1}, //18403 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x95A2}, //18404 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x95A3}, //18405 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x95A4}, //18406 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x95A5}, //18407 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x95A6}, //18408 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x95A7}, //18409 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x95A8}, //18410 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x95A9}, //18411 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x95AA}, //18412 #CJK UNIFIED IDEOGRAPH + {0xE980, 0x95AB}, //18413 #CJK UNIFIED IDEOGRAPH + {0xE981, 0x95AC}, //18414 #CJK UNIFIED IDEOGRAPH + {0xE982, 0x95AD}, //18415 #CJK UNIFIED IDEOGRAPH + {0xE983, 0x95AE}, //18416 #CJK UNIFIED IDEOGRAPH + {0xE984, 0x95AF}, //18417 #CJK UNIFIED IDEOGRAPH + {0xE985, 0x95B0}, //18418 #CJK UNIFIED IDEOGRAPH + {0xE986, 0x95B1}, //18419 #CJK UNIFIED IDEOGRAPH + {0xE987, 0x95B2}, //18420 #CJK UNIFIED IDEOGRAPH + {0xE988, 0x95B3}, //18421 #CJK UNIFIED IDEOGRAPH + {0xE989, 0x95B4}, //18422 #CJK UNIFIED IDEOGRAPH + {0xE98A, 0x95B5}, //18423 #CJK UNIFIED IDEOGRAPH + {0xE98B, 0x95B6}, //18424 #CJK UNIFIED IDEOGRAPH + {0xE98C, 0x95B7}, //18425 #CJK UNIFIED IDEOGRAPH + {0xE98D, 0x95B8}, //18426 #CJK UNIFIED IDEOGRAPH + {0xE98E, 0x95B9}, //18427 #CJK UNIFIED IDEOGRAPH + {0xE98F, 0x95BA}, //18428 #CJK UNIFIED IDEOGRAPH + {0xE990, 0x95BB}, //18429 #CJK UNIFIED IDEOGRAPH + {0xE991, 0x95BC}, //18430 #CJK UNIFIED IDEOGRAPH + {0xE992, 0x95BD}, //18431 #CJK UNIFIED IDEOGRAPH + {0xE993, 0x95BE}, //18432 #CJK UNIFIED IDEOGRAPH + {0xE994, 0x95BF}, //18433 #CJK UNIFIED IDEOGRAPH + {0xE995, 0x95C0}, //18434 #CJK UNIFIED IDEOGRAPH + {0xE996, 0x95C1}, //18435 #CJK UNIFIED IDEOGRAPH + {0xE997, 0x95C2}, //18436 #CJK UNIFIED IDEOGRAPH + {0xE998, 0x95C3}, //18437 #CJK UNIFIED IDEOGRAPH + {0xE999, 0x95C4}, //18438 #CJK UNIFIED IDEOGRAPH + {0xE99A, 0x95C5}, //18439 #CJK UNIFIED IDEOGRAPH + {0xE99B, 0x95C6}, //18440 #CJK UNIFIED IDEOGRAPH + {0xE99C, 0x95C7}, //18441 #CJK UNIFIED IDEOGRAPH + {0xE99D, 0x95C8}, //18442 #CJK UNIFIED IDEOGRAPH + {0xE99E, 0x95C9}, //18443 #CJK UNIFIED IDEOGRAPH + {0xE99F, 0x95CA}, //18444 #CJK UNIFIED IDEOGRAPH + {0xE9A0, 0x95CB}, //18445 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x6924}, //18446 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x68F0}, //18447 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x690B}, //18448 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x6901}, //18449 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x6957}, //18450 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x68E3}, //18451 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x6910}, //18452 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x6971}, //18453 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x6939}, //18454 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x6960}, //18455 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x6942}, //18456 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x695D}, //18457 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x6984}, //18458 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x696B}, //18459 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x6980}, //18460 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x6998}, //18461 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x6978}, //18462 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x6934}, //18463 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x69CC}, //18464 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x6987}, //18465 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x6988}, //18466 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x69CE}, //18467 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x6989}, //18468 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x6966}, //18469 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x6963}, //18470 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x6979}, //18471 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x699B}, //18472 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x69A7}, //18473 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x69BB}, //18474 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x69AB}, //18475 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x69AD}, //18476 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x69D4}, //18477 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x69B1}, //18478 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x69C1}, //18479 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x69CA}, //18480 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x69DF}, //18481 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x6995}, //18482 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x69E0}, //18483 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x698D}, //18484 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x69FF}, //18485 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x6A2F}, //18486 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x69ED}, //18487 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x6A17}, //18488 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x6A18}, //18489 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x6A65}, //18490 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x69F2}, //18491 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x6A44}, //18492 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x6A3E}, //18493 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x6AA0}, //18494 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x6A50}, //18495 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x6A5B}, //18496 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x6A35}, //18497 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x6A8E}, //18498 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x6A79}, //18499 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x6A3D}, //18500 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6A28}, //18501 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x6A58}, //18502 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x6A7C}, //18503 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x6A91}, //18504 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x6A90}, //18505 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x6AA9}, //18506 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x6A97}, //18507 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x6AAB}, //18508 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x7337}, //18509 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x7352}, //18510 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x6B81}, //18511 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x6B82}, //18512 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x6B87}, //18513 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x6B84}, //18514 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x6B92}, //18515 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x6B93}, //18516 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x6B8D}, //18517 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x6B9A}, //18518 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x6B9B}, //18519 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x6BA1}, //18520 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x6BAA}, //18521 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x8F6B}, //18522 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x8F6D}, //18523 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x8F71}, //18524 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x8F72}, //18525 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x8F73}, //18526 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x8F75}, //18527 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x8F76}, //18528 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x8F78}, //18529 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x8F77}, //18530 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x8F79}, //18531 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x8F7A}, //18532 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x8F7C}, //18533 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x8F7E}, //18534 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x8F81}, //18535 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x8F82}, //18536 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x8F84}, //18537 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x8F87}, //18538 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x8F8B}, //18539 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x95CC}, //18540 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x95CD}, //18541 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x95CE}, //18542 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x95CF}, //18543 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x95D0}, //18544 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x95D1}, //18545 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x95D2}, //18546 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x95D3}, //18547 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x95D4}, //18548 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x95D5}, //18549 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x95D6}, //18550 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x95D7}, //18551 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x95D8}, //18552 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x95D9}, //18553 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x95DA}, //18554 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x95DB}, //18555 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x95DC}, //18556 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x95DD}, //18557 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x95DE}, //18558 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x95DF}, //18559 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x95E0}, //18560 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x95E1}, //18561 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x95E2}, //18562 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x95E3}, //18563 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x95E4}, //18564 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x95E5}, //18565 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x95E6}, //18566 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x95E7}, //18567 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x95EC}, //18568 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x95FF}, //18569 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x9607}, //18570 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x9613}, //18571 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x9618}, //18572 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x961B}, //18573 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x961E}, //18574 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x9620}, //18575 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x9623}, //18576 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x9624}, //18577 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x9625}, //18578 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x9626}, //18579 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x9627}, //18580 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x9628}, //18581 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x9629}, //18582 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x962B}, //18583 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x962C}, //18584 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x962D}, //18585 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x962F}, //18586 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x9630}, //18587 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x9637}, //18588 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x9638}, //18589 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x9639}, //18590 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x963A}, //18591 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x963E}, //18592 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x9641}, //18593 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x9643}, //18594 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x964A}, //18595 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x964E}, //18596 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x964F}, //18597 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x9651}, //18598 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x9652}, //18599 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x9653}, //18600 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x9656}, //18601 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x9657}, //18602 #CJK UNIFIED IDEOGRAPH + {0xEA80, 0x9658}, //18603 #CJK UNIFIED IDEOGRAPH + {0xEA81, 0x9659}, //18604 #CJK UNIFIED IDEOGRAPH + {0xEA82, 0x965A}, //18605 #CJK UNIFIED IDEOGRAPH + {0xEA83, 0x965C}, //18606 #CJK UNIFIED IDEOGRAPH + {0xEA84, 0x965D}, //18607 #CJK UNIFIED IDEOGRAPH + {0xEA85, 0x965E}, //18608 #CJK UNIFIED IDEOGRAPH + {0xEA86, 0x9660}, //18609 #CJK UNIFIED IDEOGRAPH + {0xEA87, 0x9663}, //18610 #CJK UNIFIED IDEOGRAPH + {0xEA88, 0x9665}, //18611 #CJK UNIFIED IDEOGRAPH + {0xEA89, 0x9666}, //18612 #CJK UNIFIED IDEOGRAPH + {0xEA8A, 0x966B}, //18613 #CJK UNIFIED IDEOGRAPH + {0xEA8B, 0x966D}, //18614 #CJK UNIFIED IDEOGRAPH + {0xEA8C, 0x966E}, //18615 #CJK UNIFIED IDEOGRAPH + {0xEA8D, 0x966F}, //18616 #CJK UNIFIED IDEOGRAPH + {0xEA8E, 0x9670}, //18617 #CJK UNIFIED IDEOGRAPH + {0xEA8F, 0x9671}, //18618 #CJK UNIFIED IDEOGRAPH + {0xEA90, 0x9673}, //18619 #CJK UNIFIED IDEOGRAPH + {0xEA91, 0x9678}, //18620 #CJK UNIFIED IDEOGRAPH + {0xEA92, 0x9679}, //18621 #CJK UNIFIED IDEOGRAPH + {0xEA93, 0x967A}, //18622 #CJK UNIFIED IDEOGRAPH + {0xEA94, 0x967B}, //18623 #CJK UNIFIED IDEOGRAPH + {0xEA95, 0x967C}, //18624 #CJK UNIFIED IDEOGRAPH + {0xEA96, 0x967D}, //18625 #CJK UNIFIED IDEOGRAPH + {0xEA97, 0x967E}, //18626 #CJK UNIFIED IDEOGRAPH + {0xEA98, 0x967F}, //18627 #CJK UNIFIED IDEOGRAPH + {0xEA99, 0x9680}, //18628 #CJK UNIFIED IDEOGRAPH + {0xEA9A, 0x9681}, //18629 #CJK UNIFIED IDEOGRAPH + {0xEA9B, 0x9682}, //18630 #CJK UNIFIED IDEOGRAPH + {0xEA9C, 0x9683}, //18631 #CJK UNIFIED IDEOGRAPH + {0xEA9D, 0x9684}, //18632 #CJK UNIFIED IDEOGRAPH + {0xEA9E, 0x9687}, //18633 #CJK UNIFIED IDEOGRAPH + {0xEA9F, 0x9689}, //18634 #CJK UNIFIED IDEOGRAPH + {0xEAA0, 0x968A}, //18635 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x8F8D}, //18636 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x8F8E}, //18637 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x8F8F}, //18638 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x8F98}, //18639 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x8F9A}, //18640 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x8ECE}, //18641 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x620B}, //18642 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x6217}, //18643 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x621B}, //18644 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x621F}, //18645 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x6222}, //18646 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x6221}, //18647 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x6225}, //18648 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x6224}, //18649 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x622C}, //18650 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x81E7}, //18651 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x74EF}, //18652 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x74F4}, //18653 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x74FF}, //18654 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x750F}, //18655 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x7511}, //18656 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x7513}, //18657 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x6534}, //18658 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x65EE}, //18659 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x65EF}, //18660 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x65F0}, //18661 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x660A}, //18662 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x6619}, //18663 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x6772}, //18664 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x6603}, //18665 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x6615}, //18666 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x6600}, //18667 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0x7085}, //18668 #CJK UNIFIED IDEOGRAPH + {0xEAC2, 0x66F7}, //18669 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x661D}, //18670 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x6634}, //18671 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x6631}, //18672 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x6636}, //18673 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x6635}, //18674 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x8006}, //18675 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x665F}, //18676 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x6654}, //18677 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x6641}, //18678 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x664F}, //18679 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x6656}, //18680 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x6661}, //18681 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x6657}, //18682 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x6677}, //18683 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x6684}, //18684 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x668C}, //18685 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x66A7}, //18686 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x669D}, //18687 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x66BE}, //18688 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x66DB}, //18689 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x66DC}, //18690 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x66E6}, //18691 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x66E9}, //18692 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x8D32}, //18693 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x8D33}, //18694 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x8D36}, //18695 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x8D3B}, //18696 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x8D3D}, //18697 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x8D40}, //18698 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x8D45}, //18699 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x8D46}, //18700 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x8D48}, //18701 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x8D49}, //18702 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x8D47}, //18703 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0x8D4D}, //18704 #CJK UNIFIED IDEOGRAPH + {0xEAE6, 0x8D55}, //18705 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x8D59}, //18706 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x89C7}, //18707 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x89CA}, //18708 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x89CB}, //18709 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x89CC}, //18710 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x89CE}, //18711 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x89CF}, //18712 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x89D0}, //18713 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x89D1}, //18714 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x726E}, //18715 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x729F}, //18716 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x725D}, //18717 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x7266}, //18718 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0x726F}, //18719 #CJK UNIFIED IDEOGRAPH + {0xEAF5, 0x727E}, //18720 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x727F}, //18721 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0x7284}, //18722 #CJK UNIFIED IDEOGRAPH + {0xEAF8, 0x728B}, //18723 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x728D}, //18724 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x728F}, //18725 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x7292}, //18726 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0x6308}, //18727 #CJK UNIFIED IDEOGRAPH + {0xEAFD, 0x6332}, //18728 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0x63B0}, //18729 #CJK UNIFIED IDEOGRAPH + {0xEB40, 0x968C}, //18730 #CJK UNIFIED IDEOGRAPH + {0xEB41, 0x968E}, //18731 #CJK UNIFIED IDEOGRAPH + {0xEB42, 0x9691}, //18732 #CJK UNIFIED IDEOGRAPH + {0xEB43, 0x9692}, //18733 #CJK UNIFIED IDEOGRAPH + {0xEB44, 0x9693}, //18734 #CJK UNIFIED IDEOGRAPH + {0xEB45, 0x9695}, //18735 #CJK UNIFIED IDEOGRAPH + {0xEB46, 0x9696}, //18736 #CJK UNIFIED IDEOGRAPH + {0xEB47, 0x969A}, //18737 #CJK UNIFIED IDEOGRAPH + {0xEB48, 0x969B}, //18738 #CJK UNIFIED IDEOGRAPH + {0xEB49, 0x969D}, //18739 #CJK UNIFIED IDEOGRAPH + {0xEB4A, 0x969E}, //18740 #CJK UNIFIED IDEOGRAPH + {0xEB4B, 0x969F}, //18741 #CJK UNIFIED IDEOGRAPH + {0xEB4C, 0x96A0}, //18742 #CJK UNIFIED IDEOGRAPH + {0xEB4D, 0x96A1}, //18743 #CJK UNIFIED IDEOGRAPH + {0xEB4E, 0x96A2}, //18744 #CJK UNIFIED IDEOGRAPH + {0xEB4F, 0x96A3}, //18745 #CJK UNIFIED IDEOGRAPH + {0xEB50, 0x96A4}, //18746 #CJK UNIFIED IDEOGRAPH + {0xEB51, 0x96A5}, //18747 #CJK UNIFIED IDEOGRAPH + {0xEB52, 0x96A6}, //18748 #CJK UNIFIED IDEOGRAPH + {0xEB53, 0x96A8}, //18749 #CJK UNIFIED IDEOGRAPH + {0xEB54, 0x96A9}, //18750 #CJK UNIFIED IDEOGRAPH + {0xEB55, 0x96AA}, //18751 #CJK UNIFIED IDEOGRAPH + {0xEB56, 0x96AB}, //18752 #CJK UNIFIED IDEOGRAPH + {0xEB57, 0x96AC}, //18753 #CJK UNIFIED IDEOGRAPH + {0xEB58, 0x96AD}, //18754 #CJK UNIFIED IDEOGRAPH + {0xEB59, 0x96AE}, //18755 #CJK UNIFIED IDEOGRAPH + {0xEB5A, 0x96AF}, //18756 #CJK UNIFIED IDEOGRAPH + {0xEB5B, 0x96B1}, //18757 #CJK UNIFIED IDEOGRAPH + {0xEB5C, 0x96B2}, //18758 #CJK UNIFIED IDEOGRAPH + {0xEB5D, 0x96B4}, //18759 #CJK UNIFIED IDEOGRAPH + {0xEB5E, 0x96B5}, //18760 #CJK UNIFIED IDEOGRAPH + {0xEB5F, 0x96B7}, //18761 #CJK UNIFIED IDEOGRAPH + {0xEB60, 0x96B8}, //18762 #CJK UNIFIED IDEOGRAPH + {0xEB61, 0x96BA}, //18763 #CJK UNIFIED IDEOGRAPH + {0xEB62, 0x96BB}, //18764 #CJK UNIFIED IDEOGRAPH + {0xEB63, 0x96BF}, //18765 #CJK UNIFIED IDEOGRAPH + {0xEB64, 0x96C2}, //18766 #CJK UNIFIED IDEOGRAPH + {0xEB65, 0x96C3}, //18767 #CJK UNIFIED IDEOGRAPH + {0xEB66, 0x96C8}, //18768 #CJK UNIFIED IDEOGRAPH + {0xEB67, 0x96CA}, //18769 #CJK UNIFIED IDEOGRAPH + {0xEB68, 0x96CB}, //18770 #CJK UNIFIED IDEOGRAPH + {0xEB69, 0x96D0}, //18771 #CJK UNIFIED IDEOGRAPH + {0xEB6A, 0x96D1}, //18772 #CJK UNIFIED IDEOGRAPH + {0xEB6B, 0x96D3}, //18773 #CJK UNIFIED IDEOGRAPH + {0xEB6C, 0x96D4}, //18774 #CJK UNIFIED IDEOGRAPH + {0xEB6D, 0x96D6}, //18775 #CJK UNIFIED IDEOGRAPH + {0xEB6E, 0x96D7}, //18776 #CJK UNIFIED IDEOGRAPH + {0xEB6F, 0x96D8}, //18777 #CJK UNIFIED IDEOGRAPH + {0xEB70, 0x96D9}, //18778 #CJK UNIFIED IDEOGRAPH + {0xEB71, 0x96DA}, //18779 #CJK UNIFIED IDEOGRAPH + {0xEB72, 0x96DB}, //18780 #CJK UNIFIED IDEOGRAPH + {0xEB73, 0x96DC}, //18781 #CJK UNIFIED IDEOGRAPH + {0xEB74, 0x96DD}, //18782 #CJK UNIFIED IDEOGRAPH + {0xEB75, 0x96DE}, //18783 #CJK UNIFIED IDEOGRAPH + {0xEB76, 0x96DF}, //18784 #CJK UNIFIED IDEOGRAPH + {0xEB77, 0x96E1}, //18785 #CJK UNIFIED IDEOGRAPH + {0xEB78, 0x96E2}, //18786 #CJK UNIFIED IDEOGRAPH + {0xEB79, 0x96E3}, //18787 #CJK UNIFIED IDEOGRAPH + {0xEB7A, 0x96E4}, //18788 #CJK UNIFIED IDEOGRAPH + {0xEB7B, 0x96E5}, //18789 #CJK UNIFIED IDEOGRAPH + {0xEB7C, 0x96E6}, //18790 #CJK UNIFIED IDEOGRAPH + {0xEB7D, 0x96E7}, //18791 #CJK UNIFIED IDEOGRAPH + {0xEB7E, 0x96EB}, //18792 #CJK UNIFIED IDEOGRAPH + {0xEB80, 0x96EC}, //18793 #CJK UNIFIED IDEOGRAPH + {0xEB81, 0x96ED}, //18794 #CJK UNIFIED IDEOGRAPH + {0xEB82, 0x96EE}, //18795 #CJK UNIFIED IDEOGRAPH + {0xEB83, 0x96F0}, //18796 #CJK UNIFIED IDEOGRAPH + {0xEB84, 0x96F1}, //18797 #CJK UNIFIED IDEOGRAPH + {0xEB85, 0x96F2}, //18798 #CJK UNIFIED IDEOGRAPH + {0xEB86, 0x96F4}, //18799 #CJK UNIFIED IDEOGRAPH + {0xEB87, 0x96F5}, //18800 #CJK UNIFIED IDEOGRAPH + {0xEB88, 0x96F8}, //18801 #CJK UNIFIED IDEOGRAPH + {0xEB89, 0x96FA}, //18802 #CJK UNIFIED IDEOGRAPH + {0xEB8A, 0x96FB}, //18803 #CJK UNIFIED IDEOGRAPH + {0xEB8B, 0x96FC}, //18804 #CJK UNIFIED IDEOGRAPH + {0xEB8C, 0x96FD}, //18805 #CJK UNIFIED IDEOGRAPH + {0xEB8D, 0x96FF}, //18806 #CJK UNIFIED IDEOGRAPH + {0xEB8E, 0x9702}, //18807 #CJK UNIFIED IDEOGRAPH + {0xEB8F, 0x9703}, //18808 #CJK UNIFIED IDEOGRAPH + {0xEB90, 0x9705}, //18809 #CJK UNIFIED IDEOGRAPH + {0xEB91, 0x970A}, //18810 #CJK UNIFIED IDEOGRAPH + {0xEB92, 0x970B}, //18811 #CJK UNIFIED IDEOGRAPH + {0xEB93, 0x970C}, //18812 #CJK UNIFIED IDEOGRAPH + {0xEB94, 0x9710}, //18813 #CJK UNIFIED IDEOGRAPH + {0xEB95, 0x9711}, //18814 #CJK UNIFIED IDEOGRAPH + {0xEB96, 0x9712}, //18815 #CJK UNIFIED IDEOGRAPH + {0xEB97, 0x9714}, //18816 #CJK UNIFIED IDEOGRAPH + {0xEB98, 0x9715}, //18817 #CJK UNIFIED IDEOGRAPH + {0xEB99, 0x9717}, //18818 #CJK UNIFIED IDEOGRAPH + {0xEB9A, 0x9718}, //18819 #CJK UNIFIED IDEOGRAPH + {0xEB9B, 0x9719}, //18820 #CJK UNIFIED IDEOGRAPH + {0xEB9C, 0x971A}, //18821 #CJK UNIFIED IDEOGRAPH + {0xEB9D, 0x971B}, //18822 #CJK UNIFIED IDEOGRAPH + {0xEB9E, 0x971D}, //18823 #CJK UNIFIED IDEOGRAPH + {0xEB9F, 0x971F}, //18824 #CJK UNIFIED IDEOGRAPH + {0xEBA0, 0x9720}, //18825 #CJK UNIFIED IDEOGRAPH + {0xEBA1, 0x643F}, //18826 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x64D8}, //18827 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x8004}, //18828 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0x6BEA}, //18829 #CJK UNIFIED IDEOGRAPH + {0xEBA5, 0x6BF3}, //18830 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x6BFD}, //18831 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0x6BF5}, //18832 #CJK UNIFIED IDEOGRAPH + {0xEBA8, 0x6BF9}, //18833 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0x6C05}, //18834 #CJK UNIFIED IDEOGRAPH + {0xEBAA, 0x6C07}, //18835 #CJK UNIFIED IDEOGRAPH + {0xEBAB, 0x6C06}, //18836 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x6C0D}, //18837 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x6C15}, //18838 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x6C18}, //18839 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x6C19}, //18840 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x6C1A}, //18841 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x6C21}, //18842 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x6C29}, //18843 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x6C24}, //18844 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x6C2A}, //18845 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x6C32}, //18846 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x6535}, //18847 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x6555}, //18848 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x656B}, //18849 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x724D}, //18850 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0x7252}, //18851 #CJK UNIFIED IDEOGRAPH + {0xEBBB, 0x7256}, //18852 #CJK UNIFIED IDEOGRAPH + {0xEBBC, 0x7230}, //18853 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0x8662}, //18854 #CJK UNIFIED IDEOGRAPH + {0xEBBE, 0x5216}, //18855 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x809F}, //18856 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x809C}, //18857 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0x8093}, //18858 #CJK UNIFIED IDEOGRAPH + {0xEBC2, 0x80BC}, //18859 #CJK UNIFIED IDEOGRAPH + {0xEBC3, 0x670A}, //18860 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x80BD}, //18861 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x80B1}, //18862 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0x80AB}, //18863 #CJK UNIFIED IDEOGRAPH + {0xEBC7, 0x80AD}, //18864 #CJK UNIFIED IDEOGRAPH + {0xEBC8, 0x80B4}, //18865 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x80B7}, //18866 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x80E7}, //18867 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x80E8}, //18868 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0x80E9}, //18869 #CJK UNIFIED IDEOGRAPH + {0xEBCD, 0x80EA}, //18870 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x80DB}, //18871 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0x80C2}, //18872 #CJK UNIFIED IDEOGRAPH + {0xEBD0, 0x80C4}, //18873 #CJK UNIFIED IDEOGRAPH + {0xEBD1, 0x80D9}, //18874 #CJK UNIFIED IDEOGRAPH + {0xEBD2, 0x80CD}, //18875 #CJK UNIFIED IDEOGRAPH + {0xEBD3, 0x80D7}, //18876 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x6710}, //18877 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x80DD}, //18878 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x80EB}, //18879 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x80F1}, //18880 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0x80F4}, //18881 #CJK UNIFIED IDEOGRAPH + {0xEBD9, 0x80ED}, //18882 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x810D}, //18883 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x810E}, //18884 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x80F2}, //18885 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x80FC}, //18886 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x6715}, //18887 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x8112}, //18888 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x8C5A}, //18889 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x8136}, //18890 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x811E}, //18891 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x812C}, //18892 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x8118}, //18893 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x8132}, //18894 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x8148}, //18895 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x814C}, //18896 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x8153}, //18897 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x8174}, //18898 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x8159}, //18899 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x815A}, //18900 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x8171}, //18901 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x8160}, //18902 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x8169}, //18903 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x817C}, //18904 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x817D}, //18905 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x816D}, //18906 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x8167}, //18907 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x584D}, //18908 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x5AB5}, //18909 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x8188}, //18910 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x8182}, //18911 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x8191}, //18912 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x6ED5}, //18913 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x81A3}, //18914 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x81AA}, //18915 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x81CC}, //18916 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x6726}, //18917 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x81CA}, //18918 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x81BB}, //18919 #CJK UNIFIED IDEOGRAPH + {0xEC40, 0x9721}, //18920 #CJK UNIFIED IDEOGRAPH + {0xEC41, 0x9722}, //18921 #CJK UNIFIED IDEOGRAPH + {0xEC42, 0x9723}, //18922 #CJK UNIFIED IDEOGRAPH + {0xEC43, 0x9724}, //18923 #CJK UNIFIED IDEOGRAPH + {0xEC44, 0x9725}, //18924 #CJK UNIFIED IDEOGRAPH + {0xEC45, 0x9726}, //18925 #CJK UNIFIED IDEOGRAPH + {0xEC46, 0x9727}, //18926 #CJK UNIFIED IDEOGRAPH + {0xEC47, 0x9728}, //18927 #CJK UNIFIED IDEOGRAPH + {0xEC48, 0x9729}, //18928 #CJK UNIFIED IDEOGRAPH + {0xEC49, 0x972B}, //18929 #CJK UNIFIED IDEOGRAPH + {0xEC4A, 0x972C}, //18930 #CJK UNIFIED IDEOGRAPH + {0xEC4B, 0x972E}, //18931 #CJK UNIFIED IDEOGRAPH + {0xEC4C, 0x972F}, //18932 #CJK UNIFIED IDEOGRAPH + {0xEC4D, 0x9731}, //18933 #CJK UNIFIED IDEOGRAPH + {0xEC4E, 0x9733}, //18934 #CJK UNIFIED IDEOGRAPH + {0xEC4F, 0x9734}, //18935 #CJK UNIFIED IDEOGRAPH + {0xEC50, 0x9735}, //18936 #CJK UNIFIED IDEOGRAPH + {0xEC51, 0x9736}, //18937 #CJK UNIFIED IDEOGRAPH + {0xEC52, 0x9737}, //18938 #CJK UNIFIED IDEOGRAPH + {0xEC53, 0x973A}, //18939 #CJK UNIFIED IDEOGRAPH + {0xEC54, 0x973B}, //18940 #CJK UNIFIED IDEOGRAPH + {0xEC55, 0x973C}, //18941 #CJK UNIFIED IDEOGRAPH + {0xEC56, 0x973D}, //18942 #CJK UNIFIED IDEOGRAPH + {0xEC57, 0x973F}, //18943 #CJK UNIFIED IDEOGRAPH + {0xEC58, 0x9740}, //18944 #CJK UNIFIED IDEOGRAPH + {0xEC59, 0x9741}, //18945 #CJK UNIFIED IDEOGRAPH + {0xEC5A, 0x9742}, //18946 #CJK UNIFIED IDEOGRAPH + {0xEC5B, 0x9743}, //18947 #CJK UNIFIED IDEOGRAPH + {0xEC5C, 0x9744}, //18948 #CJK UNIFIED IDEOGRAPH + {0xEC5D, 0x9745}, //18949 #CJK UNIFIED IDEOGRAPH + {0xEC5E, 0x9746}, //18950 #CJK UNIFIED IDEOGRAPH + {0xEC5F, 0x9747}, //18951 #CJK UNIFIED IDEOGRAPH + {0xEC60, 0x9748}, //18952 #CJK UNIFIED IDEOGRAPH + {0xEC61, 0x9749}, //18953 #CJK UNIFIED IDEOGRAPH + {0xEC62, 0x974A}, //18954 #CJK UNIFIED IDEOGRAPH + {0xEC63, 0x974B}, //18955 #CJK UNIFIED IDEOGRAPH + {0xEC64, 0x974C}, //18956 #CJK UNIFIED IDEOGRAPH + {0xEC65, 0x974D}, //18957 #CJK UNIFIED IDEOGRAPH + {0xEC66, 0x974E}, //18958 #CJK UNIFIED IDEOGRAPH + {0xEC67, 0x974F}, //18959 #CJK UNIFIED IDEOGRAPH + {0xEC68, 0x9750}, //18960 #CJK UNIFIED IDEOGRAPH + {0xEC69, 0x9751}, //18961 #CJK UNIFIED IDEOGRAPH + {0xEC6A, 0x9754}, //18962 #CJK UNIFIED IDEOGRAPH + {0xEC6B, 0x9755}, //18963 #CJK UNIFIED IDEOGRAPH + {0xEC6C, 0x9757}, //18964 #CJK UNIFIED IDEOGRAPH + {0xEC6D, 0x9758}, //18965 #CJK UNIFIED IDEOGRAPH + {0xEC6E, 0x975A}, //18966 #CJK UNIFIED IDEOGRAPH + {0xEC6F, 0x975C}, //18967 #CJK UNIFIED IDEOGRAPH + {0xEC70, 0x975D}, //18968 #CJK UNIFIED IDEOGRAPH + {0xEC71, 0x975F}, //18969 #CJK UNIFIED IDEOGRAPH + {0xEC72, 0x9763}, //18970 #CJK UNIFIED IDEOGRAPH + {0xEC73, 0x9764}, //18971 #CJK UNIFIED IDEOGRAPH + {0xEC74, 0x9766}, //18972 #CJK UNIFIED IDEOGRAPH + {0xEC75, 0x9767}, //18973 #CJK UNIFIED IDEOGRAPH + {0xEC76, 0x9768}, //18974 #CJK UNIFIED IDEOGRAPH + {0xEC77, 0x976A}, //18975 #CJK UNIFIED IDEOGRAPH + {0xEC78, 0x976B}, //18976 #CJK UNIFIED IDEOGRAPH + {0xEC79, 0x976C}, //18977 #CJK UNIFIED IDEOGRAPH + {0xEC7A, 0x976D}, //18978 #CJK UNIFIED IDEOGRAPH + {0xEC7B, 0x976E}, //18979 #CJK UNIFIED IDEOGRAPH + {0xEC7C, 0x976F}, //18980 #CJK UNIFIED IDEOGRAPH + {0xEC7D, 0x9770}, //18981 #CJK UNIFIED IDEOGRAPH + {0xEC7E, 0x9771}, //18982 #CJK UNIFIED IDEOGRAPH + {0xEC80, 0x9772}, //18983 #CJK UNIFIED IDEOGRAPH + {0xEC81, 0x9775}, //18984 #CJK UNIFIED IDEOGRAPH + {0xEC82, 0x9777}, //18985 #CJK UNIFIED IDEOGRAPH + {0xEC83, 0x9778}, //18986 #CJK UNIFIED IDEOGRAPH + {0xEC84, 0x9779}, //18987 #CJK UNIFIED IDEOGRAPH + {0xEC85, 0x977A}, //18988 #CJK UNIFIED IDEOGRAPH + {0xEC86, 0x977B}, //18989 #CJK UNIFIED IDEOGRAPH + {0xEC87, 0x977D}, //18990 #CJK UNIFIED IDEOGRAPH + {0xEC88, 0x977E}, //18991 #CJK UNIFIED IDEOGRAPH + {0xEC89, 0x977F}, //18992 #CJK UNIFIED IDEOGRAPH + {0xEC8A, 0x9780}, //18993 #CJK UNIFIED IDEOGRAPH + {0xEC8B, 0x9781}, //18994 #CJK UNIFIED IDEOGRAPH + {0xEC8C, 0x9782}, //18995 #CJK UNIFIED IDEOGRAPH + {0xEC8D, 0x9783}, //18996 #CJK UNIFIED IDEOGRAPH + {0xEC8E, 0x9784}, //18997 #CJK UNIFIED IDEOGRAPH + {0xEC8F, 0x9786}, //18998 #CJK UNIFIED IDEOGRAPH + {0xEC90, 0x9787}, //18999 #CJK UNIFIED IDEOGRAPH + {0xEC91, 0x9788}, //19000 #CJK UNIFIED IDEOGRAPH + {0xEC92, 0x9789}, //19001 #CJK UNIFIED IDEOGRAPH + {0xEC93, 0x978A}, //19002 #CJK UNIFIED IDEOGRAPH + {0xEC94, 0x978C}, //19003 #CJK UNIFIED IDEOGRAPH + {0xEC95, 0x978E}, //19004 #CJK UNIFIED IDEOGRAPH + {0xEC96, 0x978F}, //19005 #CJK UNIFIED IDEOGRAPH + {0xEC97, 0x9790}, //19006 #CJK UNIFIED IDEOGRAPH + {0xEC98, 0x9793}, //19007 #CJK UNIFIED IDEOGRAPH + {0xEC99, 0x9795}, //19008 #CJK UNIFIED IDEOGRAPH + {0xEC9A, 0x9796}, //19009 #CJK UNIFIED IDEOGRAPH + {0xEC9B, 0x9797}, //19010 #CJK UNIFIED IDEOGRAPH + {0xEC9C, 0x9799}, //19011 #CJK UNIFIED IDEOGRAPH + {0xEC9D, 0x979A}, //19012 #CJK UNIFIED IDEOGRAPH + {0xEC9E, 0x979B}, //19013 #CJK UNIFIED IDEOGRAPH + {0xEC9F, 0x979C}, //19014 #CJK UNIFIED IDEOGRAPH + {0xECA0, 0x979D}, //19015 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x81C1}, //19016 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x81A6}, //19017 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x6B24}, //19018 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x6B37}, //19019 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x6B39}, //19020 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0x6B43}, //19021 #CJK UNIFIED IDEOGRAPH + {0xECA7, 0x6B46}, //19022 #CJK UNIFIED IDEOGRAPH + {0xECA8, 0x6B59}, //19023 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x98D1}, //19024 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0x98D2}, //19025 #CJK UNIFIED IDEOGRAPH + {0xECAB, 0x98D3}, //19026 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x98D5}, //19027 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x98D9}, //19028 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x98DA}, //19029 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0x6BB3}, //19030 #CJK UNIFIED IDEOGRAPH + {0xECB0, 0x5F40}, //19031 #CJK UNIFIED IDEOGRAPH + {0xECB1, 0x6BC2}, //19032 #CJK UNIFIED IDEOGRAPH + {0xECB2, 0x89F3}, //19033 #CJK UNIFIED IDEOGRAPH + {0xECB3, 0x6590}, //19034 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x9F51}, //19035 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0x6593}, //19036 #CJK UNIFIED IDEOGRAPH + {0xECB6, 0x65BC}, //19037 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x65C6}, //19038 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0x65C4}, //19039 #CJK UNIFIED IDEOGRAPH + {0xECB9, 0x65C3}, //19040 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0x65CC}, //19041 #CJK UNIFIED IDEOGRAPH + {0xECBB, 0x65CE}, //19042 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x65D2}, //19043 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x65D6}, //19044 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x7080}, //19045 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x709C}, //19046 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0x7096}, //19047 #CJK UNIFIED IDEOGRAPH + {0xECC1, 0x709D}, //19048 #CJK UNIFIED IDEOGRAPH + {0xECC2, 0x70BB}, //19049 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x70C0}, //19050 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x70B7}, //19051 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0x70AB}, //19052 #CJK UNIFIED IDEOGRAPH + {0xECC6, 0x70B1}, //19053 #CJK UNIFIED IDEOGRAPH + {0xECC7, 0x70E8}, //19054 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x70CA}, //19055 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0x7110}, //19056 #CJK UNIFIED IDEOGRAPH + {0xECCA, 0x7113}, //19057 #CJK UNIFIED IDEOGRAPH + {0xECCB, 0x7116}, //19058 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x712F}, //19059 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x7131}, //19060 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x7173}, //19061 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x715C}, //19062 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x7168}, //19063 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x7145}, //19064 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x7172}, //19065 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x714A}, //19066 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x7178}, //19067 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0x717A}, //19068 #CJK UNIFIED IDEOGRAPH + {0xECD6, 0x7198}, //19069 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x71B3}, //19070 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x71B5}, //19071 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x71A8}, //19072 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x71A0}, //19073 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x71E0}, //19074 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x71D4}, //19075 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0x71E7}, //19076 #CJK UNIFIED IDEOGRAPH + {0xECDE, 0x71F9}, //19077 #CJK UNIFIED IDEOGRAPH + {0xECDF, 0x721D}, //19078 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x7228}, //19079 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0x706C}, //19080 #CJK UNIFIED IDEOGRAPH + {0xECE2, 0x7118}, //19081 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x7166}, //19082 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0x71B9}, //19083 #CJK UNIFIED IDEOGRAPH + {0xECE5, 0x623E}, //19084 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x623D}, //19085 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0x6243}, //19086 #CJK UNIFIED IDEOGRAPH + {0xECE8, 0x6248}, //19087 #CJK UNIFIED IDEOGRAPH + {0xECE9, 0x6249}, //19088 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x793B}, //19089 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x7940}, //19090 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x7946}, //19091 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x7949}, //19092 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x795B}, //19093 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x795C}, //19094 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x7953}, //19095 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x795A}, //19096 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x7962}, //19097 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x7957}, //19098 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x7960}, //19099 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x796F}, //19100 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x7967}, //19101 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0x797A}, //19102 #CJK UNIFIED IDEOGRAPH + {0xECF8, 0x7985}, //19103 #CJK UNIFIED IDEOGRAPH + {0xECF9, 0x798A}, //19104 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0x799A}, //19105 #CJK UNIFIED IDEOGRAPH + {0xECFB, 0x79A7}, //19106 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x79B3}, //19107 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x5FD1}, //19108 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x5FD0}, //19109 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x979E}, //19110 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x979F}, //19111 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x97A1}, //19112 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x97A2}, //19113 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x97A4}, //19114 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x97A5}, //19115 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x97A6}, //19116 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x97A7}, //19117 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x97A8}, //19118 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x97A9}, //19119 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x97AA}, //19120 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x97AC}, //19121 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x97AE}, //19122 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x97B0}, //19123 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x97B1}, //19124 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x97B3}, //19125 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x97B5}, //19126 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x97B6}, //19127 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x97B7}, //19128 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x97B8}, //19129 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x97B9}, //19130 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x97BA}, //19131 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x97BB}, //19132 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x97BC}, //19133 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x97BD}, //19134 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x97BE}, //19135 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x97BF}, //19136 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x97C0}, //19137 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x97C1}, //19138 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x97C2}, //19139 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x97C3}, //19140 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x97C4}, //19141 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x97C5}, //19142 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x97C6}, //19143 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x97C7}, //19144 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x97C8}, //19145 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x97C9}, //19146 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x97CA}, //19147 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x97CB}, //19148 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x97CC}, //19149 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x97CD}, //19150 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x97CE}, //19151 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x97CF}, //19152 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x97D0}, //19153 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x97D1}, //19154 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x97D2}, //19155 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x97D3}, //19156 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x97D4}, //19157 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x97D5}, //19158 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x97D6}, //19159 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x97D7}, //19160 #CJK UNIFIED IDEOGRAPH + {0xED73, 0x97D8}, //19161 #CJK UNIFIED IDEOGRAPH + {0xED74, 0x97D9}, //19162 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x97DA}, //19163 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x97DB}, //19164 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x97DC}, //19165 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x97DD}, //19166 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x97DE}, //19167 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x97DF}, //19168 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x97E0}, //19169 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x97E1}, //19170 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x97E2}, //19171 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0x97E3}, //19172 #CJK UNIFIED IDEOGRAPH + {0xED80, 0x97E4}, //19173 #CJK UNIFIED IDEOGRAPH + {0xED81, 0x97E5}, //19174 #CJK UNIFIED IDEOGRAPH + {0xED82, 0x97E8}, //19175 #CJK UNIFIED IDEOGRAPH + {0xED83, 0x97EE}, //19176 #CJK UNIFIED IDEOGRAPH + {0xED84, 0x97EF}, //19177 #CJK UNIFIED IDEOGRAPH + {0xED85, 0x97F0}, //19178 #CJK UNIFIED IDEOGRAPH + {0xED86, 0x97F1}, //19179 #CJK UNIFIED IDEOGRAPH + {0xED87, 0x97F2}, //19180 #CJK UNIFIED IDEOGRAPH + {0xED88, 0x97F4}, //19181 #CJK UNIFIED IDEOGRAPH + {0xED89, 0x97F7}, //19182 #CJK UNIFIED IDEOGRAPH + {0xED8A, 0x97F8}, //19183 #CJK UNIFIED IDEOGRAPH + {0xED8B, 0x97F9}, //19184 #CJK UNIFIED IDEOGRAPH + {0xED8C, 0x97FA}, //19185 #CJK UNIFIED IDEOGRAPH + {0xED8D, 0x97FB}, //19186 #CJK UNIFIED IDEOGRAPH + {0xED8E, 0x97FC}, //19187 #CJK UNIFIED IDEOGRAPH + {0xED8F, 0x97FD}, //19188 #CJK UNIFIED IDEOGRAPH + {0xED90, 0x97FE}, //19189 #CJK UNIFIED IDEOGRAPH + {0xED91, 0x97FF}, //19190 #CJK UNIFIED IDEOGRAPH + {0xED92, 0x9800}, //19191 #CJK UNIFIED IDEOGRAPH + {0xED93, 0x9801}, //19192 #CJK UNIFIED IDEOGRAPH + {0xED94, 0x9802}, //19193 #CJK UNIFIED IDEOGRAPH + {0xED95, 0x9803}, //19194 #CJK UNIFIED IDEOGRAPH + {0xED96, 0x9804}, //19195 #CJK UNIFIED IDEOGRAPH + {0xED97, 0x9805}, //19196 #CJK UNIFIED IDEOGRAPH + {0xED98, 0x9806}, //19197 #CJK UNIFIED IDEOGRAPH + {0xED99, 0x9807}, //19198 #CJK UNIFIED IDEOGRAPH + {0xED9A, 0x9808}, //19199 #CJK UNIFIED IDEOGRAPH + {0xED9B, 0x9809}, //19200 #CJK UNIFIED IDEOGRAPH + {0xED9C, 0x980A}, //19201 #CJK UNIFIED IDEOGRAPH + {0xED9D, 0x980B}, //19202 #CJK UNIFIED IDEOGRAPH + {0xED9E, 0x980C}, //19203 #CJK UNIFIED IDEOGRAPH + {0xED9F, 0x980D}, //19204 #CJK UNIFIED IDEOGRAPH + {0xEDA0, 0x980E}, //19205 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x603C}, //19206 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x605D}, //19207 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x605A}, //19208 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x6067}, //19209 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x6041}, //19210 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x6059}, //19211 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x6063}, //19212 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x60AB}, //19213 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x6106}, //19214 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x610D}, //19215 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x615D}, //19216 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x61A9}, //19217 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x619D}, //19218 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x61CB}, //19219 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x61D1}, //19220 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x6206}, //19221 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x8080}, //19222 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x807F}, //19223 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x6C93}, //19224 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x6CF6}, //19225 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x6DFC}, //19226 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x77F6}, //19227 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x77F8}, //19228 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x7800}, //19229 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7809}, //19230 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x7817}, //19231 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x7818}, //19232 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x7811}, //19233 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x65AB}, //19234 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x782D}, //19235 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x781C}, //19236 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x781D}, //19237 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x7839}, //19238 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x783A}, //19239 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x783B}, //19240 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x781F}, //19241 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x783C}, //19242 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x7825}, //19243 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x782C}, //19244 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x7823}, //19245 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7829}, //19246 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x784E}, //19247 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x786D}, //19248 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x7856}, //19249 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x7857}, //19250 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x7826}, //19251 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x7850}, //19252 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x7847}, //19253 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x784C}, //19254 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x786A}, //19255 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x789B}, //19256 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x7893}, //19257 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x789A}, //19258 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x7887}, //19259 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x789C}, //19260 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x78A1}, //19261 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x78A3}, //19262 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x78B2}, //19263 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x78B9}, //19264 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x78A5}, //19265 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x78D4}, //19266 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x78D9}, //19267 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x78C9}, //19268 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x78EC}, //19269 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x78F2}, //19270 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x7905}, //19271 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x78F4}, //19272 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x7913}, //19273 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x7924}, //19274 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x791E}, //19275 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x7934}, //19276 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x9F9B}, //19277 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x9EF9}, //19278 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x9EFB}, //19279 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x9EFC}, //19280 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x76F1}, //19281 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x7704}, //19282 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x770D}, //19283 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x76F9}, //19284 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x7707}, //19285 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7708}, //19286 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x771A}, //19287 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x7722}, //19288 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x7719}, //19289 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x772D}, //19290 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x7726}, //19291 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x7735}, //19292 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x7738}, //19293 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x7750}, //19294 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x7751}, //19295 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x7747}, //19296 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x7743}, //19297 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x775A}, //19298 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x7768}, //19299 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x980F}, //19300 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x9810}, //19301 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0x9811}, //19302 #CJK UNIFIED IDEOGRAPH + {0xEE43, 0x9812}, //19303 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x9813}, //19304 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x9814}, //19305 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x9815}, //19306 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x9816}, //19307 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x9817}, //19308 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x9818}, //19309 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x9819}, //19310 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x981A}, //19311 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x981B}, //19312 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x981C}, //19313 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x981D}, //19314 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x981E}, //19315 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x981F}, //19316 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x9820}, //19317 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x9821}, //19318 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x9822}, //19319 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x9823}, //19320 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x9824}, //19321 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x9825}, //19322 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x9826}, //19323 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x9827}, //19324 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0x9828}, //19325 #CJK UNIFIED IDEOGRAPH + {0xEE5A, 0x9829}, //19326 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x982A}, //19327 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x982B}, //19328 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x982C}, //19329 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x982D}, //19330 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x982E}, //19331 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x982F}, //19332 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0x9830}, //19333 #CJK UNIFIED IDEOGRAPH + {0xEE62, 0x9831}, //19334 #CJK UNIFIED IDEOGRAPH + {0xEE63, 0x9832}, //19335 #CJK UNIFIED IDEOGRAPH + {0xEE64, 0x9833}, //19336 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0x9834}, //19337 #CJK UNIFIED IDEOGRAPH + {0xEE66, 0x9835}, //19338 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x9836}, //19339 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x9837}, //19340 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0x9838}, //19341 #CJK UNIFIED IDEOGRAPH + {0xEE6A, 0x9839}, //19342 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x983A}, //19343 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0x983B}, //19344 #CJK UNIFIED IDEOGRAPH + {0xEE6D, 0x983C}, //19345 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x983D}, //19346 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x983E}, //19347 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x983F}, //19348 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x9840}, //19349 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x9841}, //19350 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x9842}, //19351 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x9843}, //19352 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0x9844}, //19353 #CJK UNIFIED IDEOGRAPH + {0xEE76, 0x9845}, //19354 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x9846}, //19355 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x9847}, //19356 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x9848}, //19357 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x9849}, //19358 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x984A}, //19359 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x984B}, //19360 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x984C}, //19361 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x984D}, //19362 #CJK UNIFIED IDEOGRAPH + {0xEE80, 0x984E}, //19363 #CJK UNIFIED IDEOGRAPH + {0xEE81, 0x984F}, //19364 #CJK UNIFIED IDEOGRAPH + {0xEE82, 0x9850}, //19365 #CJK UNIFIED IDEOGRAPH + {0xEE83, 0x9851}, //19366 #CJK UNIFIED IDEOGRAPH + {0xEE84, 0x9852}, //19367 #CJK UNIFIED IDEOGRAPH + {0xEE85, 0x9853}, //19368 #CJK UNIFIED IDEOGRAPH + {0xEE86, 0x9854}, //19369 #CJK UNIFIED IDEOGRAPH + {0xEE87, 0x9855}, //19370 #CJK UNIFIED IDEOGRAPH + {0xEE88, 0x9856}, //19371 #CJK UNIFIED IDEOGRAPH + {0xEE89, 0x9857}, //19372 #CJK UNIFIED IDEOGRAPH + {0xEE8A, 0x9858}, //19373 #CJK UNIFIED IDEOGRAPH + {0xEE8B, 0x9859}, //19374 #CJK UNIFIED IDEOGRAPH + {0xEE8C, 0x985A}, //19375 #CJK UNIFIED IDEOGRAPH + {0xEE8D, 0x985B}, //19376 #CJK UNIFIED IDEOGRAPH + {0xEE8E, 0x985C}, //19377 #CJK UNIFIED IDEOGRAPH + {0xEE8F, 0x985D}, //19378 #CJK UNIFIED IDEOGRAPH + {0xEE90, 0x985E}, //19379 #CJK UNIFIED IDEOGRAPH + {0xEE91, 0x985F}, //19380 #CJK UNIFIED IDEOGRAPH + {0xEE92, 0x9860}, //19381 #CJK UNIFIED IDEOGRAPH + {0xEE93, 0x9861}, //19382 #CJK UNIFIED IDEOGRAPH + {0xEE94, 0x9862}, //19383 #CJK UNIFIED IDEOGRAPH + {0xEE95, 0x9863}, //19384 #CJK UNIFIED IDEOGRAPH + {0xEE96, 0x9864}, //19385 #CJK UNIFIED IDEOGRAPH + {0xEE97, 0x9865}, //19386 #CJK UNIFIED IDEOGRAPH + {0xEE98, 0x9866}, //19387 #CJK UNIFIED IDEOGRAPH + {0xEE99, 0x9867}, //19388 #CJK UNIFIED IDEOGRAPH + {0xEE9A, 0x9868}, //19389 #CJK UNIFIED IDEOGRAPH + {0xEE9B, 0x9869}, //19390 #CJK UNIFIED IDEOGRAPH + {0xEE9C, 0x986A}, //19391 #CJK UNIFIED IDEOGRAPH + {0xEE9D, 0x986B}, //19392 #CJK UNIFIED IDEOGRAPH + {0xEE9E, 0x986C}, //19393 #CJK UNIFIED IDEOGRAPH + {0xEE9F, 0x986D}, //19394 #CJK UNIFIED IDEOGRAPH + {0xEEA0, 0x986E}, //19395 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x7762}, //19396 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x7765}, //19397 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x777F}, //19398 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x778D}, //19399 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x777D}, //19400 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x7780}, //19401 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x778C}, //19402 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x7791}, //19403 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x779F}, //19404 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x77A0}, //19405 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x77B0}, //19406 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x77B5}, //19407 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x77BD}, //19408 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x753A}, //19409 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x7540}, //19410 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x754E}, //19411 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x754B}, //19412 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x7548}, //19413 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x755B}, //19414 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x7572}, //19415 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x7579}, //19416 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x7583}, //19417 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x7F58}, //19418 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x7F61}, //19419 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x7F5F}, //19420 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x8A48}, //19421 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x7F68}, //19422 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x7F74}, //19423 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x7F71}, //19424 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x7F79}, //19425 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x7F81}, //19426 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x7F7E}, //19427 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x76CD}, //19428 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x76E5}, //19429 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x8832}, //19430 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9485}, //19431 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x9486}, //19432 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x9487}, //19433 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x948B}, //19434 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x948A}, //19435 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x948C}, //19436 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x948D}, //19437 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x948F}, //19438 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x9490}, //19439 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x9494}, //19440 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x9497}, //19441 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x9495}, //19442 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x949A}, //19443 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x949B}, //19444 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x949C}, //19445 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x94A3}, //19446 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x94A4}, //19447 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x94AB}, //19448 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x94AA}, //19449 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x94AD}, //19450 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x94AC}, //19451 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x94AF}, //19452 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x94B0}, //19453 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0x94B2}, //19454 #CJK UNIFIED IDEOGRAPH + {0xEEDC, 0x94B4}, //19455 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x94B6}, //19456 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x94B7}, //19457 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x94B8}, //19458 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x94B9}, //19459 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x94BA}, //19460 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x94BC}, //19461 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x94BD}, //19462 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x94BF}, //19463 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x94C4}, //19464 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x94C8}, //19465 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x94C9}, //19466 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x94CA}, //19467 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x94CB}, //19468 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x94CC}, //19469 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x94CD}, //19470 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x94CE}, //19471 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x94D0}, //19472 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x94D1}, //19473 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x94D2}, //19474 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x94D5}, //19475 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x94D6}, //19476 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x94D7}, //19477 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x94D9}, //19478 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x94D8}, //19479 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x94DB}, //19480 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x94DE}, //19481 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x94DF}, //19482 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x94E0}, //19483 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x94E2}, //19484 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x94E4}, //19485 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x94E5}, //19486 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x94E7}, //19487 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x94E8}, //19488 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x94EA}, //19489 #CJK UNIFIED IDEOGRAPH + {0xEF40, 0x986F}, //19490 #CJK UNIFIED IDEOGRAPH + {0xEF41, 0x9870}, //19491 #CJK UNIFIED IDEOGRAPH + {0xEF42, 0x9871}, //19492 #CJK UNIFIED IDEOGRAPH + {0xEF43, 0x9872}, //19493 #CJK UNIFIED IDEOGRAPH + {0xEF44, 0x9873}, //19494 #CJK UNIFIED IDEOGRAPH + {0xEF45, 0x9874}, //19495 #CJK UNIFIED IDEOGRAPH + {0xEF46, 0x988B}, //19496 #CJK UNIFIED IDEOGRAPH + {0xEF47, 0x988E}, //19497 #CJK UNIFIED IDEOGRAPH + {0xEF48, 0x9892}, //19498 #CJK UNIFIED IDEOGRAPH + {0xEF49, 0x9895}, //19499 #CJK UNIFIED IDEOGRAPH + {0xEF4A, 0x9899}, //19500 #CJK UNIFIED IDEOGRAPH + {0xEF4B, 0x98A3}, //19501 #CJK UNIFIED IDEOGRAPH + {0xEF4C, 0x98A8}, //19502 #CJK UNIFIED IDEOGRAPH + {0xEF4D, 0x98A9}, //19503 #CJK UNIFIED IDEOGRAPH + {0xEF4E, 0x98AA}, //19504 #CJK UNIFIED IDEOGRAPH + {0xEF4F, 0x98AB}, //19505 #CJK UNIFIED IDEOGRAPH + {0xEF50, 0x98AC}, //19506 #CJK UNIFIED IDEOGRAPH + {0xEF51, 0x98AD}, //19507 #CJK UNIFIED IDEOGRAPH + {0xEF52, 0x98AE}, //19508 #CJK UNIFIED IDEOGRAPH + {0xEF53, 0x98AF}, //19509 #CJK UNIFIED IDEOGRAPH + {0xEF54, 0x98B0}, //19510 #CJK UNIFIED IDEOGRAPH + {0xEF55, 0x98B1}, //19511 #CJK UNIFIED IDEOGRAPH + {0xEF56, 0x98B2}, //19512 #CJK UNIFIED IDEOGRAPH + {0xEF57, 0x98B3}, //19513 #CJK UNIFIED IDEOGRAPH + {0xEF58, 0x98B4}, //19514 #CJK UNIFIED IDEOGRAPH + {0xEF59, 0x98B5}, //19515 #CJK UNIFIED IDEOGRAPH + {0xEF5A, 0x98B6}, //19516 #CJK UNIFIED IDEOGRAPH + {0xEF5B, 0x98B7}, //19517 #CJK UNIFIED IDEOGRAPH + {0xEF5C, 0x98B8}, //19518 #CJK UNIFIED IDEOGRAPH + {0xEF5D, 0x98B9}, //19519 #CJK UNIFIED IDEOGRAPH + {0xEF5E, 0x98BA}, //19520 #CJK UNIFIED IDEOGRAPH + {0xEF5F, 0x98BB}, //19521 #CJK UNIFIED IDEOGRAPH + {0xEF60, 0x98BC}, //19522 #CJK UNIFIED IDEOGRAPH + {0xEF61, 0x98BD}, //19523 #CJK UNIFIED IDEOGRAPH + {0xEF62, 0x98BE}, //19524 #CJK UNIFIED IDEOGRAPH + {0xEF63, 0x98BF}, //19525 #CJK UNIFIED IDEOGRAPH + {0xEF64, 0x98C0}, //19526 #CJK UNIFIED IDEOGRAPH + {0xEF65, 0x98C1}, //19527 #CJK UNIFIED IDEOGRAPH + {0xEF66, 0x98C2}, //19528 #CJK UNIFIED IDEOGRAPH + {0xEF67, 0x98C3}, //19529 #CJK UNIFIED IDEOGRAPH + {0xEF68, 0x98C4}, //19530 #CJK UNIFIED IDEOGRAPH + {0xEF69, 0x98C5}, //19531 #CJK UNIFIED IDEOGRAPH + {0xEF6A, 0x98C6}, //19532 #CJK UNIFIED IDEOGRAPH + {0xEF6B, 0x98C7}, //19533 #CJK UNIFIED IDEOGRAPH + {0xEF6C, 0x98C8}, //19534 #CJK UNIFIED IDEOGRAPH + {0xEF6D, 0x98C9}, //19535 #CJK UNIFIED IDEOGRAPH + {0xEF6E, 0x98CA}, //19536 #CJK UNIFIED IDEOGRAPH + {0xEF6F, 0x98CB}, //19537 #CJK UNIFIED IDEOGRAPH + {0xEF70, 0x98CC}, //19538 #CJK UNIFIED IDEOGRAPH + {0xEF71, 0x98CD}, //19539 #CJK UNIFIED IDEOGRAPH + {0xEF72, 0x98CF}, //19540 #CJK UNIFIED IDEOGRAPH + {0xEF73, 0x98D0}, //19541 #CJK UNIFIED IDEOGRAPH + {0xEF74, 0x98D4}, //19542 #CJK UNIFIED IDEOGRAPH + {0xEF75, 0x98D6}, //19543 #CJK UNIFIED IDEOGRAPH + {0xEF76, 0x98D7}, //19544 #CJK UNIFIED IDEOGRAPH + {0xEF77, 0x98DB}, //19545 #CJK UNIFIED IDEOGRAPH + {0xEF78, 0x98DC}, //19546 #CJK UNIFIED IDEOGRAPH + {0xEF79, 0x98DD}, //19547 #CJK UNIFIED IDEOGRAPH + {0xEF7A, 0x98E0}, //19548 #CJK UNIFIED IDEOGRAPH + {0xEF7B, 0x98E1}, //19549 #CJK UNIFIED IDEOGRAPH + {0xEF7C, 0x98E2}, //19550 #CJK UNIFIED IDEOGRAPH + {0xEF7D, 0x98E3}, //19551 #CJK UNIFIED IDEOGRAPH + {0xEF7E, 0x98E4}, //19552 #CJK UNIFIED IDEOGRAPH + {0xEF80, 0x98E5}, //19553 #CJK UNIFIED IDEOGRAPH + {0xEF81, 0x98E6}, //19554 #CJK UNIFIED IDEOGRAPH + {0xEF82, 0x98E9}, //19555 #CJK UNIFIED IDEOGRAPH + {0xEF83, 0x98EA}, //19556 #CJK UNIFIED IDEOGRAPH + {0xEF84, 0x98EB}, //19557 #CJK UNIFIED IDEOGRAPH + {0xEF85, 0x98EC}, //19558 #CJK UNIFIED IDEOGRAPH + {0xEF86, 0x98ED}, //19559 #CJK UNIFIED IDEOGRAPH + {0xEF87, 0x98EE}, //19560 #CJK UNIFIED IDEOGRAPH + {0xEF88, 0x98EF}, //19561 #CJK UNIFIED IDEOGRAPH + {0xEF89, 0x98F0}, //19562 #CJK UNIFIED IDEOGRAPH + {0xEF8A, 0x98F1}, //19563 #CJK UNIFIED IDEOGRAPH + {0xEF8B, 0x98F2}, //19564 #CJK UNIFIED IDEOGRAPH + {0xEF8C, 0x98F3}, //19565 #CJK UNIFIED IDEOGRAPH + {0xEF8D, 0x98F4}, //19566 #CJK UNIFIED IDEOGRAPH + {0xEF8E, 0x98F5}, //19567 #CJK UNIFIED IDEOGRAPH + {0xEF8F, 0x98F6}, //19568 #CJK UNIFIED IDEOGRAPH + {0xEF90, 0x98F7}, //19569 #CJK UNIFIED IDEOGRAPH + {0xEF91, 0x98F8}, //19570 #CJK UNIFIED IDEOGRAPH + {0xEF92, 0x98F9}, //19571 #CJK UNIFIED IDEOGRAPH + {0xEF93, 0x98FA}, //19572 #CJK UNIFIED IDEOGRAPH + {0xEF94, 0x98FB}, //19573 #CJK UNIFIED IDEOGRAPH + {0xEF95, 0x98FC}, //19574 #CJK UNIFIED IDEOGRAPH + {0xEF96, 0x98FD}, //19575 #CJK UNIFIED IDEOGRAPH + {0xEF97, 0x98FE}, //19576 #CJK UNIFIED IDEOGRAPH + {0xEF98, 0x98FF}, //19577 #CJK UNIFIED IDEOGRAPH + {0xEF99, 0x9900}, //19578 #CJK UNIFIED IDEOGRAPH + {0xEF9A, 0x9901}, //19579 #CJK UNIFIED IDEOGRAPH + {0xEF9B, 0x9902}, //19580 #CJK UNIFIED IDEOGRAPH + {0xEF9C, 0x9903}, //19581 #CJK UNIFIED IDEOGRAPH + {0xEF9D, 0x9904}, //19582 #CJK UNIFIED IDEOGRAPH + {0xEF9E, 0x9905}, //19583 #CJK UNIFIED IDEOGRAPH + {0xEF9F, 0x9906}, //19584 #CJK UNIFIED IDEOGRAPH + {0xEFA0, 0x9907}, //19585 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x94E9}, //19586 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x94EB}, //19587 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x94EE}, //19588 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x94EF}, //19589 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x94F3}, //19590 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x94F4}, //19591 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x94F5}, //19592 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x94F7}, //19593 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x94F9}, //19594 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x94FC}, //19595 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x94FD}, //19596 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x94FF}, //19597 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x9503}, //19598 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x9502}, //19599 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x9506}, //19600 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9507}, //19601 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9509}, //19602 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x950A}, //19603 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x950D}, //19604 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x950E}, //19605 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x950F}, //19606 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x9512}, //19607 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x9513}, //19608 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x9514}, //19609 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x9515}, //19610 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x9516}, //19611 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x9518}, //19612 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x951B}, //19613 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x951D}, //19614 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x951E}, //19615 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x951F}, //19616 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x9522}, //19617 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x952A}, //19618 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x952B}, //19619 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x9529}, //19620 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x952C}, //19621 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x9531}, //19622 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x9532}, //19623 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x9534}, //19624 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x9536}, //19625 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x9537}, //19626 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x9538}, //19627 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x953C}, //19628 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x953E}, //19629 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x953F}, //19630 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x9542}, //19631 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x9535}, //19632 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x9544}, //19633 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x9545}, //19634 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x9546}, //19635 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x9549}, //19636 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x954C}, //19637 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x954E}, //19638 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x954F}, //19639 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x9552}, //19640 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x9553}, //19641 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x9554}, //19642 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x9556}, //19643 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x9557}, //19644 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x9558}, //19645 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x9559}, //19646 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x955B}, //19647 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x955E}, //19648 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x955F}, //19649 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x955D}, //19650 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x9561}, //19651 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x9562}, //19652 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x9564}, //19653 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x9565}, //19654 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x9566}, //19655 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x9567}, //19656 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x9568}, //19657 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x9569}, //19658 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x956A}, //19659 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x956B}, //19660 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x956C}, //19661 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x956F}, //19662 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x9571}, //19663 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x9572}, //19664 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x9573}, //19665 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x953A}, //19666 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x77E7}, //19667 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x77EC}, //19668 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x96C9}, //19669 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x79D5}, //19670 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x79ED}, //19671 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x79E3}, //19672 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x79EB}, //19673 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x7A06}, //19674 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x5D47}, //19675 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x7A03}, //19676 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x7A02}, //19677 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x7A1E}, //19678 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x7A14}, //19679 #CJK UNIFIED IDEOGRAPH + {0xF040, 0x9908}, //19680 #CJK UNIFIED IDEOGRAPH + {0xF041, 0x9909}, //19681 #CJK UNIFIED IDEOGRAPH + {0xF042, 0x990A}, //19682 #CJK UNIFIED IDEOGRAPH + {0xF043, 0x990B}, //19683 #CJK UNIFIED IDEOGRAPH + {0xF044, 0x990C}, //19684 #CJK UNIFIED IDEOGRAPH + {0xF045, 0x990E}, //19685 #CJK UNIFIED IDEOGRAPH + {0xF046, 0x990F}, //19686 #CJK UNIFIED IDEOGRAPH + {0xF047, 0x9911}, //19687 #CJK UNIFIED IDEOGRAPH + {0xF048, 0x9912}, //19688 #CJK UNIFIED IDEOGRAPH + {0xF049, 0x9913}, //19689 #CJK UNIFIED IDEOGRAPH + {0xF04A, 0x9914}, //19690 #CJK UNIFIED IDEOGRAPH + {0xF04B, 0x9915}, //19691 #CJK UNIFIED IDEOGRAPH + {0xF04C, 0x9916}, //19692 #CJK UNIFIED IDEOGRAPH + {0xF04D, 0x9917}, //19693 #CJK UNIFIED IDEOGRAPH + {0xF04E, 0x9918}, //19694 #CJK UNIFIED IDEOGRAPH + {0xF04F, 0x9919}, //19695 #CJK UNIFIED IDEOGRAPH + {0xF050, 0x991A}, //19696 #CJK UNIFIED IDEOGRAPH + {0xF051, 0x991B}, //19697 #CJK UNIFIED IDEOGRAPH + {0xF052, 0x991C}, //19698 #CJK UNIFIED IDEOGRAPH + {0xF053, 0x991D}, //19699 #CJK UNIFIED IDEOGRAPH + {0xF054, 0x991E}, //19700 #CJK UNIFIED IDEOGRAPH + {0xF055, 0x991F}, //19701 #CJK UNIFIED IDEOGRAPH + {0xF056, 0x9920}, //19702 #CJK UNIFIED IDEOGRAPH + {0xF057, 0x9921}, //19703 #CJK UNIFIED IDEOGRAPH + {0xF058, 0x9922}, //19704 #CJK UNIFIED IDEOGRAPH + {0xF059, 0x9923}, //19705 #CJK UNIFIED IDEOGRAPH + {0xF05A, 0x9924}, //19706 #CJK UNIFIED IDEOGRAPH + {0xF05B, 0x9925}, //19707 #CJK UNIFIED IDEOGRAPH + {0xF05C, 0x9926}, //19708 #CJK UNIFIED IDEOGRAPH + {0xF05D, 0x9927}, //19709 #CJK UNIFIED IDEOGRAPH + {0xF05E, 0x9928}, //19710 #CJK UNIFIED IDEOGRAPH + {0xF05F, 0x9929}, //19711 #CJK UNIFIED IDEOGRAPH + {0xF060, 0x992A}, //19712 #CJK UNIFIED IDEOGRAPH + {0xF061, 0x992B}, //19713 #CJK UNIFIED IDEOGRAPH + {0xF062, 0x992C}, //19714 #CJK UNIFIED IDEOGRAPH + {0xF063, 0x992D}, //19715 #CJK UNIFIED IDEOGRAPH + {0xF064, 0x992F}, //19716 #CJK UNIFIED IDEOGRAPH + {0xF065, 0x9930}, //19717 #CJK UNIFIED IDEOGRAPH + {0xF066, 0x9931}, //19718 #CJK UNIFIED IDEOGRAPH + {0xF067, 0x9932}, //19719 #CJK UNIFIED IDEOGRAPH + {0xF068, 0x9933}, //19720 #CJK UNIFIED IDEOGRAPH + {0xF069, 0x9934}, //19721 #CJK UNIFIED IDEOGRAPH + {0xF06A, 0x9935}, //19722 #CJK UNIFIED IDEOGRAPH + {0xF06B, 0x9936}, //19723 #CJK UNIFIED IDEOGRAPH + {0xF06C, 0x9937}, //19724 #CJK UNIFIED IDEOGRAPH + {0xF06D, 0x9938}, //19725 #CJK UNIFIED IDEOGRAPH + {0xF06E, 0x9939}, //19726 #CJK UNIFIED IDEOGRAPH + {0xF06F, 0x993A}, //19727 #CJK UNIFIED IDEOGRAPH + {0xF070, 0x993B}, //19728 #CJK UNIFIED IDEOGRAPH + {0xF071, 0x993C}, //19729 #CJK UNIFIED IDEOGRAPH + {0xF072, 0x993D}, //19730 #CJK UNIFIED IDEOGRAPH + {0xF073, 0x993E}, //19731 #CJK UNIFIED IDEOGRAPH + {0xF074, 0x993F}, //19732 #CJK UNIFIED IDEOGRAPH + {0xF075, 0x9940}, //19733 #CJK UNIFIED IDEOGRAPH + {0xF076, 0x9941}, //19734 #CJK UNIFIED IDEOGRAPH + {0xF077, 0x9942}, //19735 #CJK UNIFIED IDEOGRAPH + {0xF078, 0x9943}, //19736 #CJK UNIFIED IDEOGRAPH + {0xF079, 0x9944}, //19737 #CJK UNIFIED IDEOGRAPH + {0xF07A, 0x9945}, //19738 #CJK UNIFIED IDEOGRAPH + {0xF07B, 0x9946}, //19739 #CJK UNIFIED IDEOGRAPH + {0xF07C, 0x9947}, //19740 #CJK UNIFIED IDEOGRAPH + {0xF07D, 0x9948}, //19741 #CJK UNIFIED IDEOGRAPH + {0xF07E, 0x9949}, //19742 #CJK UNIFIED IDEOGRAPH + {0xF080, 0x994A}, //19743 #CJK UNIFIED IDEOGRAPH + {0xF081, 0x994B}, //19744 #CJK UNIFIED IDEOGRAPH + {0xF082, 0x994C}, //19745 #CJK UNIFIED IDEOGRAPH + {0xF083, 0x994D}, //19746 #CJK UNIFIED IDEOGRAPH + {0xF084, 0x994E}, //19747 #CJK UNIFIED IDEOGRAPH + {0xF085, 0x994F}, //19748 #CJK UNIFIED IDEOGRAPH + {0xF086, 0x9950}, //19749 #CJK UNIFIED IDEOGRAPH + {0xF087, 0x9951}, //19750 #CJK UNIFIED IDEOGRAPH + {0xF088, 0x9952}, //19751 #CJK UNIFIED IDEOGRAPH + {0xF089, 0x9953}, //19752 #CJK UNIFIED IDEOGRAPH + {0xF08A, 0x9956}, //19753 #CJK UNIFIED IDEOGRAPH + {0xF08B, 0x9957}, //19754 #CJK UNIFIED IDEOGRAPH + {0xF08C, 0x9958}, //19755 #CJK UNIFIED IDEOGRAPH + {0xF08D, 0x9959}, //19756 #CJK UNIFIED IDEOGRAPH + {0xF08E, 0x995A}, //19757 #CJK UNIFIED IDEOGRAPH + {0xF08F, 0x995B}, //19758 #CJK UNIFIED IDEOGRAPH + {0xF090, 0x995C}, //19759 #CJK UNIFIED IDEOGRAPH + {0xF091, 0x995D}, //19760 #CJK UNIFIED IDEOGRAPH + {0xF092, 0x995E}, //19761 #CJK UNIFIED IDEOGRAPH + {0xF093, 0x995F}, //19762 #CJK UNIFIED IDEOGRAPH + {0xF094, 0x9960}, //19763 #CJK UNIFIED IDEOGRAPH + {0xF095, 0x9961}, //19764 #CJK UNIFIED IDEOGRAPH + {0xF096, 0x9962}, //19765 #CJK UNIFIED IDEOGRAPH + {0xF097, 0x9964}, //19766 #CJK UNIFIED IDEOGRAPH + {0xF098, 0x9966}, //19767 #CJK UNIFIED IDEOGRAPH + {0xF099, 0x9973}, //19768 #CJK UNIFIED IDEOGRAPH + {0xF09A, 0x9978}, //19769 #CJK UNIFIED IDEOGRAPH + {0xF09B, 0x9979}, //19770 #CJK UNIFIED IDEOGRAPH + {0xF09C, 0x997B}, //19771 #CJK UNIFIED IDEOGRAPH + {0xF09D, 0x997E}, //19772 #CJK UNIFIED IDEOGRAPH + {0xF09E, 0x9982}, //19773 #CJK UNIFIED IDEOGRAPH + {0xF09F, 0x9983}, //19774 #CJK UNIFIED IDEOGRAPH + {0xF0A0, 0x9989}, //19775 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x7A39}, //19776 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x7A37}, //19777 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x7A51}, //19778 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x9ECF}, //19779 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x99A5}, //19780 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x7A70}, //19781 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x7688}, //19782 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x768E}, //19783 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x7693}, //19784 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x7699}, //19785 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x76A4}, //19786 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x74DE}, //19787 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x74E0}, //19788 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x752C}, //19789 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x9E20}, //19790 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x9E22}, //19791 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x9E28}, //19792 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x9E29}, //19793 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x9E2A}, //19794 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x9E2B}, //19795 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x9E2C}, //19796 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x9E32}, //19797 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x9E31}, //19798 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x9E36}, //19799 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x9E38}, //19800 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x9E37}, //19801 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x9E39}, //19802 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x9E3A}, //19803 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x9E3E}, //19804 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x9E41}, //19805 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x9E42}, //19806 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x9E44}, //19807 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x9E46}, //19808 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x9E47}, //19809 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x9E48}, //19810 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x9E49}, //19811 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x9E4B}, //19812 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x9E4C}, //19813 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x9E4E}, //19814 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x9E51}, //19815 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x9E55}, //19816 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x9E57}, //19817 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x9E5A}, //19818 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x9E5B}, //19819 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x9E5C}, //19820 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x9E5E}, //19821 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x9E63}, //19822 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x9E66}, //19823 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x9E67}, //19824 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x9E68}, //19825 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x9E69}, //19826 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x9E6A}, //19827 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x9E6B}, //19828 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x9E6C}, //19829 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x9E71}, //19830 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x9E6D}, //19831 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x9E73}, //19832 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x7592}, //19833 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x7594}, //19834 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x7596}, //19835 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x75A0}, //19836 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x759D}, //19837 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x75AC}, //19838 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x75A3}, //19839 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x75B3}, //19840 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x75B4}, //19841 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x75B8}, //19842 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x75C4}, //19843 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x75B1}, //19844 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x75B0}, //19845 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x75C3}, //19846 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x75C2}, //19847 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x75D6}, //19848 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x75CD}, //19849 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x75E3}, //19850 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x75E8}, //19851 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x75E6}, //19852 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x75E4}, //19853 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x75EB}, //19854 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x75E7}, //19855 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x7603}, //19856 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x75F1}, //19857 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x75FC}, //19858 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x75FF}, //19859 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x7610}, //19860 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x7600}, //19861 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x7605}, //19862 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x760C}, //19863 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x7617}, //19864 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x760A}, //19865 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x7625}, //19866 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x7618}, //19867 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x7615}, //19868 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x7619}, //19869 #CJK UNIFIED IDEOGRAPH + {0xF140, 0x998C}, //19870 #CJK UNIFIED IDEOGRAPH + {0xF141, 0x998E}, //19871 #CJK UNIFIED IDEOGRAPH + {0xF142, 0x999A}, //19872 #CJK UNIFIED IDEOGRAPH + {0xF143, 0x999B}, //19873 #CJK UNIFIED IDEOGRAPH + {0xF144, 0x999C}, //19874 #CJK UNIFIED IDEOGRAPH + {0xF145, 0x999D}, //19875 #CJK UNIFIED IDEOGRAPH + {0xF146, 0x999E}, //19876 #CJK UNIFIED IDEOGRAPH + {0xF147, 0x999F}, //19877 #CJK UNIFIED IDEOGRAPH + {0xF148, 0x99A0}, //19878 #CJK UNIFIED IDEOGRAPH + {0xF149, 0x99A1}, //19879 #CJK UNIFIED IDEOGRAPH + {0xF14A, 0x99A2}, //19880 #CJK UNIFIED IDEOGRAPH + {0xF14B, 0x99A3}, //19881 #CJK UNIFIED IDEOGRAPH + {0xF14C, 0x99A4}, //19882 #CJK UNIFIED IDEOGRAPH + {0xF14D, 0x99A6}, //19883 #CJK UNIFIED IDEOGRAPH + {0xF14E, 0x99A7}, //19884 #CJK UNIFIED IDEOGRAPH + {0xF14F, 0x99A9}, //19885 #CJK UNIFIED IDEOGRAPH + {0xF150, 0x99AA}, //19886 #CJK UNIFIED IDEOGRAPH + {0xF151, 0x99AB}, //19887 #CJK UNIFIED IDEOGRAPH + {0xF152, 0x99AC}, //19888 #CJK UNIFIED IDEOGRAPH + {0xF153, 0x99AD}, //19889 #CJK UNIFIED IDEOGRAPH + {0xF154, 0x99AE}, //19890 #CJK UNIFIED IDEOGRAPH + {0xF155, 0x99AF}, //19891 #CJK UNIFIED IDEOGRAPH + {0xF156, 0x99B0}, //19892 #CJK UNIFIED IDEOGRAPH + {0xF157, 0x99B1}, //19893 #CJK UNIFIED IDEOGRAPH + {0xF158, 0x99B2}, //19894 #CJK UNIFIED IDEOGRAPH + {0xF159, 0x99B3}, //19895 #CJK UNIFIED IDEOGRAPH + {0xF15A, 0x99B4}, //19896 #CJK UNIFIED IDEOGRAPH + {0xF15B, 0x99B5}, //19897 #CJK UNIFIED IDEOGRAPH + {0xF15C, 0x99B6}, //19898 #CJK UNIFIED IDEOGRAPH + {0xF15D, 0x99B7}, //19899 #CJK UNIFIED IDEOGRAPH + {0xF15E, 0x99B8}, //19900 #CJK UNIFIED IDEOGRAPH + {0xF15F, 0x99B9}, //19901 #CJK UNIFIED IDEOGRAPH + {0xF160, 0x99BA}, //19902 #CJK UNIFIED IDEOGRAPH + {0xF161, 0x99BB}, //19903 #CJK UNIFIED IDEOGRAPH + {0xF162, 0x99BC}, //19904 #CJK UNIFIED IDEOGRAPH + {0xF163, 0x99BD}, //19905 #CJK UNIFIED IDEOGRAPH + {0xF164, 0x99BE}, //19906 #CJK UNIFIED IDEOGRAPH + {0xF165, 0x99BF}, //19907 #CJK UNIFIED IDEOGRAPH + {0xF166, 0x99C0}, //19908 #CJK UNIFIED IDEOGRAPH + {0xF167, 0x99C1}, //19909 #CJK UNIFIED IDEOGRAPH + {0xF168, 0x99C2}, //19910 #CJK UNIFIED IDEOGRAPH + {0xF169, 0x99C3}, //19911 #CJK UNIFIED IDEOGRAPH + {0xF16A, 0x99C4}, //19912 #CJK UNIFIED IDEOGRAPH + {0xF16B, 0x99C5}, //19913 #CJK UNIFIED IDEOGRAPH + {0xF16C, 0x99C6}, //19914 #CJK UNIFIED IDEOGRAPH + {0xF16D, 0x99C7}, //19915 #CJK UNIFIED IDEOGRAPH + {0xF16E, 0x99C8}, //19916 #CJK UNIFIED IDEOGRAPH + {0xF16F, 0x99C9}, //19917 #CJK UNIFIED IDEOGRAPH + {0xF170, 0x99CA}, //19918 #CJK UNIFIED IDEOGRAPH + {0xF171, 0x99CB}, //19919 #CJK UNIFIED IDEOGRAPH + {0xF172, 0x99CC}, //19920 #CJK UNIFIED IDEOGRAPH + {0xF173, 0x99CD}, //19921 #CJK UNIFIED IDEOGRAPH + {0xF174, 0x99CE}, //19922 #CJK UNIFIED IDEOGRAPH + {0xF175, 0x99CF}, //19923 #CJK UNIFIED IDEOGRAPH + {0xF176, 0x99D0}, //19924 #CJK UNIFIED IDEOGRAPH + {0xF177, 0x99D1}, //19925 #CJK UNIFIED IDEOGRAPH + {0xF178, 0x99D2}, //19926 #CJK UNIFIED IDEOGRAPH + {0xF179, 0x99D3}, //19927 #CJK UNIFIED IDEOGRAPH + {0xF17A, 0x99D4}, //19928 #CJK UNIFIED IDEOGRAPH + {0xF17B, 0x99D5}, //19929 #CJK UNIFIED IDEOGRAPH + {0xF17C, 0x99D6}, //19930 #CJK UNIFIED IDEOGRAPH + {0xF17D, 0x99D7}, //19931 #CJK UNIFIED IDEOGRAPH + {0xF17E, 0x99D8}, //19932 #CJK UNIFIED IDEOGRAPH + {0xF180, 0x99D9}, //19933 #CJK UNIFIED IDEOGRAPH + {0xF181, 0x99DA}, //19934 #CJK UNIFIED IDEOGRAPH + {0xF182, 0x99DB}, //19935 #CJK UNIFIED IDEOGRAPH + {0xF183, 0x99DC}, //19936 #CJK UNIFIED IDEOGRAPH + {0xF184, 0x99DD}, //19937 #CJK UNIFIED IDEOGRAPH + {0xF185, 0x99DE}, //19938 #CJK UNIFIED IDEOGRAPH + {0xF186, 0x99DF}, //19939 #CJK UNIFIED IDEOGRAPH + {0xF187, 0x99E0}, //19940 #CJK UNIFIED IDEOGRAPH + {0xF188, 0x99E1}, //19941 #CJK UNIFIED IDEOGRAPH + {0xF189, 0x99E2}, //19942 #CJK UNIFIED IDEOGRAPH + {0xF18A, 0x99E3}, //19943 #CJK UNIFIED IDEOGRAPH + {0xF18B, 0x99E4}, //19944 #CJK UNIFIED IDEOGRAPH + {0xF18C, 0x99E5}, //19945 #CJK UNIFIED IDEOGRAPH + {0xF18D, 0x99E6}, //19946 #CJK UNIFIED IDEOGRAPH + {0xF18E, 0x99E7}, //19947 #CJK UNIFIED IDEOGRAPH + {0xF18F, 0x99E8}, //19948 #CJK UNIFIED IDEOGRAPH + {0xF190, 0x99E9}, //19949 #CJK UNIFIED IDEOGRAPH + {0xF191, 0x99EA}, //19950 #CJK UNIFIED IDEOGRAPH + {0xF192, 0x99EB}, //19951 #CJK UNIFIED IDEOGRAPH + {0xF193, 0x99EC}, //19952 #CJK UNIFIED IDEOGRAPH + {0xF194, 0x99ED}, //19953 #CJK UNIFIED IDEOGRAPH + {0xF195, 0x99EE}, //19954 #CJK UNIFIED IDEOGRAPH + {0xF196, 0x99EF}, //19955 #CJK UNIFIED IDEOGRAPH + {0xF197, 0x99F0}, //19956 #CJK UNIFIED IDEOGRAPH + {0xF198, 0x99F1}, //19957 #CJK UNIFIED IDEOGRAPH + {0xF199, 0x99F2}, //19958 #CJK UNIFIED IDEOGRAPH + {0xF19A, 0x99F3}, //19959 #CJK UNIFIED IDEOGRAPH + {0xF19B, 0x99F4}, //19960 #CJK UNIFIED IDEOGRAPH + {0xF19C, 0x99F5}, //19961 #CJK UNIFIED IDEOGRAPH + {0xF19D, 0x99F6}, //19962 #CJK UNIFIED IDEOGRAPH + {0xF19E, 0x99F7}, //19963 #CJK UNIFIED IDEOGRAPH + {0xF19F, 0x99F8}, //19964 #CJK UNIFIED IDEOGRAPH + {0xF1A0, 0x99F9}, //19965 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x761B}, //19966 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x763C}, //19967 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x7622}, //19968 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x7620}, //19969 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x7640}, //19970 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x762D}, //19971 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x7630}, //19972 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x763F}, //19973 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x7635}, //19974 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x7643}, //19975 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x763E}, //19976 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x7633}, //19977 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x764D}, //19978 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x765E}, //19979 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x7654}, //19980 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x765C}, //19981 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x7656}, //19982 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x766B}, //19983 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x766F}, //19984 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x7FCA}, //19985 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x7AE6}, //19986 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x7A78}, //19987 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x7A79}, //19988 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x7A80}, //19989 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x7A86}, //19990 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x7A88}, //19991 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x7A95}, //19992 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x7AA6}, //19993 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x7AA0}, //19994 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x7AAC}, //19995 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x7AA8}, //19996 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x7AAD}, //19997 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x7AB3}, //19998 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x8864}, //19999 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x8869}, //20000 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x8872}, //20001 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x887D}, //20002 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x887F}, //20003 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x8882}, //20004 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x88A2}, //20005 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x88C6}, //20006 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x88B7}, //20007 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x88BC}, //20008 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x88C9}, //20009 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x88E2}, //20010 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x88CE}, //20011 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x88E3}, //20012 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x88E5}, //20013 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x88F1}, //20014 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x891A}, //20015 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x88FC}, //20016 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x88E8}, //20017 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x88FE}, //20018 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x88F0}, //20019 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x8921}, //20020 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x8919}, //20021 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x8913}, //20022 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x891B}, //20023 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x890A}, //20024 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x8934}, //20025 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x892B}, //20026 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x8936}, //20027 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x8941}, //20028 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x8966}, //20029 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x897B}, //20030 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x758B}, //20031 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x80E5}, //20032 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x76B2}, //20033 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x76B4}, //20034 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x77DC}, //20035 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x8012}, //20036 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x8014}, //20037 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x8016}, //20038 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x801C}, //20039 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x8020}, //20040 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x8022}, //20041 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x8025}, //20042 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x8026}, //20043 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x8027}, //20044 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x8029}, //20045 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x8028}, //20046 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x8031}, //20047 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x800B}, //20048 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x8035}, //20049 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x8043}, //20050 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x8046}, //20051 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x804D}, //20052 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x8052}, //20053 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x8069}, //20054 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x8071}, //20055 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x8983}, //20056 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x9878}, //20057 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x9880}, //20058 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x9883}, //20059 #CJK UNIFIED IDEOGRAPH + {0xF240, 0x99FA}, //20060 #CJK UNIFIED IDEOGRAPH + {0xF241, 0x99FB}, //20061 #CJK UNIFIED IDEOGRAPH + {0xF242, 0x99FC}, //20062 #CJK UNIFIED IDEOGRAPH + {0xF243, 0x99FD}, //20063 #CJK UNIFIED IDEOGRAPH + {0xF244, 0x99FE}, //20064 #CJK UNIFIED IDEOGRAPH + {0xF245, 0x99FF}, //20065 #CJK UNIFIED IDEOGRAPH + {0xF246, 0x9A00}, //20066 #CJK UNIFIED IDEOGRAPH + {0xF247, 0x9A01}, //20067 #CJK UNIFIED IDEOGRAPH + {0xF248, 0x9A02}, //20068 #CJK UNIFIED IDEOGRAPH + {0xF249, 0x9A03}, //20069 #CJK UNIFIED IDEOGRAPH + {0xF24A, 0x9A04}, //20070 #CJK UNIFIED IDEOGRAPH + {0xF24B, 0x9A05}, //20071 #CJK UNIFIED IDEOGRAPH + {0xF24C, 0x9A06}, //20072 #CJK UNIFIED IDEOGRAPH + {0xF24D, 0x9A07}, //20073 #CJK UNIFIED IDEOGRAPH + {0xF24E, 0x9A08}, //20074 #CJK UNIFIED IDEOGRAPH + {0xF24F, 0x9A09}, //20075 #CJK UNIFIED IDEOGRAPH + {0xF250, 0x9A0A}, //20076 #CJK UNIFIED IDEOGRAPH + {0xF251, 0x9A0B}, //20077 #CJK UNIFIED IDEOGRAPH + {0xF252, 0x9A0C}, //20078 #CJK UNIFIED IDEOGRAPH + {0xF253, 0x9A0D}, //20079 #CJK UNIFIED IDEOGRAPH + {0xF254, 0x9A0E}, //20080 #CJK UNIFIED IDEOGRAPH + {0xF255, 0x9A0F}, //20081 #CJK UNIFIED IDEOGRAPH + {0xF256, 0x9A10}, //20082 #CJK UNIFIED IDEOGRAPH + {0xF257, 0x9A11}, //20083 #CJK UNIFIED IDEOGRAPH + {0xF258, 0x9A12}, //20084 #CJK UNIFIED IDEOGRAPH + {0xF259, 0x9A13}, //20085 #CJK UNIFIED IDEOGRAPH + {0xF25A, 0x9A14}, //20086 #CJK UNIFIED IDEOGRAPH + {0xF25B, 0x9A15}, //20087 #CJK UNIFIED IDEOGRAPH + {0xF25C, 0x9A16}, //20088 #CJK UNIFIED IDEOGRAPH + {0xF25D, 0x9A17}, //20089 #CJK UNIFIED IDEOGRAPH + {0xF25E, 0x9A18}, //20090 #CJK UNIFIED IDEOGRAPH + {0xF25F, 0x9A19}, //20091 #CJK UNIFIED IDEOGRAPH + {0xF260, 0x9A1A}, //20092 #CJK UNIFIED IDEOGRAPH + {0xF261, 0x9A1B}, //20093 #CJK UNIFIED IDEOGRAPH + {0xF262, 0x9A1C}, //20094 #CJK UNIFIED IDEOGRAPH + {0xF263, 0x9A1D}, //20095 #CJK UNIFIED IDEOGRAPH + {0xF264, 0x9A1E}, //20096 #CJK UNIFIED IDEOGRAPH + {0xF265, 0x9A1F}, //20097 #CJK UNIFIED IDEOGRAPH + {0xF266, 0x9A20}, //20098 #CJK UNIFIED IDEOGRAPH + {0xF267, 0x9A21}, //20099 #CJK UNIFIED IDEOGRAPH + {0xF268, 0x9A22}, //20100 #CJK UNIFIED IDEOGRAPH + {0xF269, 0x9A23}, //20101 #CJK UNIFIED IDEOGRAPH + {0xF26A, 0x9A24}, //20102 #CJK UNIFIED IDEOGRAPH + {0xF26B, 0x9A25}, //20103 #CJK UNIFIED IDEOGRAPH + {0xF26C, 0x9A26}, //20104 #CJK UNIFIED IDEOGRAPH + {0xF26D, 0x9A27}, //20105 #CJK UNIFIED IDEOGRAPH + {0xF26E, 0x9A28}, //20106 #CJK UNIFIED IDEOGRAPH + {0xF26F, 0x9A29}, //20107 #CJK UNIFIED IDEOGRAPH + {0xF270, 0x9A2A}, //20108 #CJK UNIFIED IDEOGRAPH + {0xF271, 0x9A2B}, //20109 #CJK UNIFIED IDEOGRAPH + {0xF272, 0x9A2C}, //20110 #CJK UNIFIED IDEOGRAPH + {0xF273, 0x9A2D}, //20111 #CJK UNIFIED IDEOGRAPH + {0xF274, 0x9A2E}, //20112 #CJK UNIFIED IDEOGRAPH + {0xF275, 0x9A2F}, //20113 #CJK UNIFIED IDEOGRAPH + {0xF276, 0x9A30}, //20114 #CJK UNIFIED IDEOGRAPH + {0xF277, 0x9A31}, //20115 #CJK UNIFIED IDEOGRAPH + {0xF278, 0x9A32}, //20116 #CJK UNIFIED IDEOGRAPH + {0xF279, 0x9A33}, //20117 #CJK UNIFIED IDEOGRAPH + {0xF27A, 0x9A34}, //20118 #CJK UNIFIED IDEOGRAPH + {0xF27B, 0x9A35}, //20119 #CJK UNIFIED IDEOGRAPH + {0xF27C, 0x9A36}, //20120 #CJK UNIFIED IDEOGRAPH + {0xF27D, 0x9A37}, //20121 #CJK UNIFIED IDEOGRAPH + {0xF27E, 0x9A38}, //20122 #CJK UNIFIED IDEOGRAPH + {0xF280, 0x9A39}, //20123 #CJK UNIFIED IDEOGRAPH + {0xF281, 0x9A3A}, //20124 #CJK UNIFIED IDEOGRAPH + {0xF282, 0x9A3B}, //20125 #CJK UNIFIED IDEOGRAPH + {0xF283, 0x9A3C}, //20126 #CJK UNIFIED IDEOGRAPH + {0xF284, 0x9A3D}, //20127 #CJK UNIFIED IDEOGRAPH + {0xF285, 0x9A3E}, //20128 #CJK UNIFIED IDEOGRAPH + {0xF286, 0x9A3F}, //20129 #CJK UNIFIED IDEOGRAPH + {0xF287, 0x9A40}, //20130 #CJK UNIFIED IDEOGRAPH + {0xF288, 0x9A41}, //20131 #CJK UNIFIED IDEOGRAPH + {0xF289, 0x9A42}, //20132 #CJK UNIFIED IDEOGRAPH + {0xF28A, 0x9A43}, //20133 #CJK UNIFIED IDEOGRAPH + {0xF28B, 0x9A44}, //20134 #CJK UNIFIED IDEOGRAPH + {0xF28C, 0x9A45}, //20135 #CJK UNIFIED IDEOGRAPH + {0xF28D, 0x9A46}, //20136 #CJK UNIFIED IDEOGRAPH + {0xF28E, 0x9A47}, //20137 #CJK UNIFIED IDEOGRAPH + {0xF28F, 0x9A48}, //20138 #CJK UNIFIED IDEOGRAPH + {0xF290, 0x9A49}, //20139 #CJK UNIFIED IDEOGRAPH + {0xF291, 0x9A4A}, //20140 #CJK UNIFIED IDEOGRAPH + {0xF292, 0x9A4B}, //20141 #CJK UNIFIED IDEOGRAPH + {0xF293, 0x9A4C}, //20142 #CJK UNIFIED IDEOGRAPH + {0xF294, 0x9A4D}, //20143 #CJK UNIFIED IDEOGRAPH + {0xF295, 0x9A4E}, //20144 #CJK UNIFIED IDEOGRAPH + {0xF296, 0x9A4F}, //20145 #CJK UNIFIED IDEOGRAPH + {0xF297, 0x9A50}, //20146 #CJK UNIFIED IDEOGRAPH + {0xF298, 0x9A51}, //20147 #CJK UNIFIED IDEOGRAPH + {0xF299, 0x9A52}, //20148 #CJK UNIFIED IDEOGRAPH + {0xF29A, 0x9A53}, //20149 #CJK UNIFIED IDEOGRAPH + {0xF29B, 0x9A54}, //20150 #CJK UNIFIED IDEOGRAPH + {0xF29C, 0x9A55}, //20151 #CJK UNIFIED IDEOGRAPH + {0xF29D, 0x9A56}, //20152 #CJK UNIFIED IDEOGRAPH + {0xF29E, 0x9A57}, //20153 #CJK UNIFIED IDEOGRAPH + {0xF29F, 0x9A58}, //20154 #CJK UNIFIED IDEOGRAPH + {0xF2A0, 0x9A59}, //20155 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x9889}, //20156 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x988C}, //20157 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x988D}, //20158 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x988F}, //20159 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x9894}, //20160 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x989A}, //20161 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x989B}, //20162 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x989E}, //20163 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x989F}, //20164 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x98A1}, //20165 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x98A2}, //20166 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x98A5}, //20167 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x98A6}, //20168 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x864D}, //20169 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x8654}, //20170 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x866C}, //20171 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x866E}, //20172 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x867F}, //20173 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x867A}, //20174 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x867C}, //20175 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x867B}, //20176 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x86A8}, //20177 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x868D}, //20178 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x868B}, //20179 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x86AC}, //20180 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x869D}, //20181 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x86A7}, //20182 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x86A3}, //20183 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0x86AA}, //20184 #CJK UNIFIED IDEOGRAPH + {0xF2BE, 0x8693}, //20185 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x86A9}, //20186 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x86B6}, //20187 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x86C4}, //20188 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x86B5}, //20189 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x86CE}, //20190 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x86B0}, //20191 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x86BA}, //20192 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x86B1}, //20193 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x86AF}, //20194 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x86C9}, //20195 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x86CF}, //20196 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x86B4}, //20197 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x86E9}, //20198 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x86F1}, //20199 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x86F2}, //20200 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x86ED}, //20201 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x86F3}, //20202 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x86D0}, //20203 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x8713}, //20204 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x86DE}, //20205 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x86F4}, //20206 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x86DF}, //20207 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x86D8}, //20208 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x86D1}, //20209 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x8703}, //20210 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x8707}, //20211 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x86F8}, //20212 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x8708}, //20213 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x870A}, //20214 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x870D}, //20215 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x8709}, //20216 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x8723}, //20217 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x873B}, //20218 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x871E}, //20219 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x8725}, //20220 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x872E}, //20221 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x871A}, //20222 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x873E}, //20223 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x8748}, //20224 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x8734}, //20225 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x8731}, //20226 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x8729}, //20227 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x8737}, //20228 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x873F}, //20229 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x8782}, //20230 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x8722}, //20231 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x877D}, //20232 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x877E}, //20233 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x877B}, //20234 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x8760}, //20235 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x8770}, //20236 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x874C}, //20237 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x876E}, //20238 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x878B}, //20239 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x8753}, //20240 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8763}, //20241 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x877C}, //20242 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x8764}, //20243 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x8759}, //20244 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0x8765}, //20245 #CJK UNIFIED IDEOGRAPH + {0xF2FB, 0x8793}, //20246 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x87AF}, //20247 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x87A8}, //20248 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x87D2}, //20249 #CJK UNIFIED IDEOGRAPH + {0xF340, 0x9A5A}, //20250 #CJK UNIFIED IDEOGRAPH + {0xF341, 0x9A5B}, //20251 #CJK UNIFIED IDEOGRAPH + {0xF342, 0x9A5C}, //20252 #CJK UNIFIED IDEOGRAPH + {0xF343, 0x9A5D}, //20253 #CJK UNIFIED IDEOGRAPH + {0xF344, 0x9A5E}, //20254 #CJK UNIFIED IDEOGRAPH + {0xF345, 0x9A5F}, //20255 #CJK UNIFIED IDEOGRAPH + {0xF346, 0x9A60}, //20256 #CJK UNIFIED IDEOGRAPH + {0xF347, 0x9A61}, //20257 #CJK UNIFIED IDEOGRAPH + {0xF348, 0x9A62}, //20258 #CJK UNIFIED IDEOGRAPH + {0xF349, 0x9A63}, //20259 #CJK UNIFIED IDEOGRAPH + {0xF34A, 0x9A64}, //20260 #CJK UNIFIED IDEOGRAPH + {0xF34B, 0x9A65}, //20261 #CJK UNIFIED IDEOGRAPH + {0xF34C, 0x9A66}, //20262 #CJK UNIFIED IDEOGRAPH + {0xF34D, 0x9A67}, //20263 #CJK UNIFIED IDEOGRAPH + {0xF34E, 0x9A68}, //20264 #CJK UNIFIED IDEOGRAPH + {0xF34F, 0x9A69}, //20265 #CJK UNIFIED IDEOGRAPH + {0xF350, 0x9A6A}, //20266 #CJK UNIFIED IDEOGRAPH + {0xF351, 0x9A6B}, //20267 #CJK UNIFIED IDEOGRAPH + {0xF352, 0x9A72}, //20268 #CJK UNIFIED IDEOGRAPH + {0xF353, 0x9A83}, //20269 #CJK UNIFIED IDEOGRAPH + {0xF354, 0x9A89}, //20270 #CJK UNIFIED IDEOGRAPH + {0xF355, 0x9A8D}, //20271 #CJK UNIFIED IDEOGRAPH + {0xF356, 0x9A8E}, //20272 #CJK UNIFIED IDEOGRAPH + {0xF357, 0x9A94}, //20273 #CJK UNIFIED IDEOGRAPH + {0xF358, 0x9A95}, //20274 #CJK UNIFIED IDEOGRAPH + {0xF359, 0x9A99}, //20275 #CJK UNIFIED IDEOGRAPH + {0xF35A, 0x9AA6}, //20276 #CJK UNIFIED IDEOGRAPH + {0xF35B, 0x9AA9}, //20277 #CJK UNIFIED IDEOGRAPH + {0xF35C, 0x9AAA}, //20278 #CJK UNIFIED IDEOGRAPH + {0xF35D, 0x9AAB}, //20279 #CJK UNIFIED IDEOGRAPH + {0xF35E, 0x9AAC}, //20280 #CJK UNIFIED IDEOGRAPH + {0xF35F, 0x9AAD}, //20281 #CJK UNIFIED IDEOGRAPH + {0xF360, 0x9AAE}, //20282 #CJK UNIFIED IDEOGRAPH + {0xF361, 0x9AAF}, //20283 #CJK UNIFIED IDEOGRAPH + {0xF362, 0x9AB2}, //20284 #CJK UNIFIED IDEOGRAPH + {0xF363, 0x9AB3}, //20285 #CJK UNIFIED IDEOGRAPH + {0xF364, 0x9AB4}, //20286 #CJK UNIFIED IDEOGRAPH + {0xF365, 0x9AB5}, //20287 #CJK UNIFIED IDEOGRAPH + {0xF366, 0x9AB9}, //20288 #CJK UNIFIED IDEOGRAPH + {0xF367, 0x9ABB}, //20289 #CJK UNIFIED IDEOGRAPH + {0xF368, 0x9ABD}, //20290 #CJK UNIFIED IDEOGRAPH + {0xF369, 0x9ABE}, //20291 #CJK UNIFIED IDEOGRAPH + {0xF36A, 0x9ABF}, //20292 #CJK UNIFIED IDEOGRAPH + {0xF36B, 0x9AC3}, //20293 #CJK UNIFIED IDEOGRAPH + {0xF36C, 0x9AC4}, //20294 #CJK UNIFIED IDEOGRAPH + {0xF36D, 0x9AC6}, //20295 #CJK UNIFIED IDEOGRAPH + {0xF36E, 0x9AC7}, //20296 #CJK UNIFIED IDEOGRAPH + {0xF36F, 0x9AC8}, //20297 #CJK UNIFIED IDEOGRAPH + {0xF370, 0x9AC9}, //20298 #CJK UNIFIED IDEOGRAPH + {0xF371, 0x9ACA}, //20299 #CJK UNIFIED IDEOGRAPH + {0xF372, 0x9ACD}, //20300 #CJK UNIFIED IDEOGRAPH + {0xF373, 0x9ACE}, //20301 #CJK UNIFIED IDEOGRAPH + {0xF374, 0x9ACF}, //20302 #CJK UNIFIED IDEOGRAPH + {0xF375, 0x9AD0}, //20303 #CJK UNIFIED IDEOGRAPH + {0xF376, 0x9AD2}, //20304 #CJK UNIFIED IDEOGRAPH + {0xF377, 0x9AD4}, //20305 #CJK UNIFIED IDEOGRAPH + {0xF378, 0x9AD5}, //20306 #CJK UNIFIED IDEOGRAPH + {0xF379, 0x9AD6}, //20307 #CJK UNIFIED IDEOGRAPH + {0xF37A, 0x9AD7}, //20308 #CJK UNIFIED IDEOGRAPH + {0xF37B, 0x9AD9}, //20309 #CJK UNIFIED IDEOGRAPH + {0xF37C, 0x9ADA}, //20310 #CJK UNIFIED IDEOGRAPH + {0xF37D, 0x9ADB}, //20311 #CJK UNIFIED IDEOGRAPH + {0xF37E, 0x9ADC}, //20312 #CJK UNIFIED IDEOGRAPH + {0xF380, 0x9ADD}, //20313 #CJK UNIFIED IDEOGRAPH + {0xF381, 0x9ADE}, //20314 #CJK UNIFIED IDEOGRAPH + {0xF382, 0x9AE0}, //20315 #CJK UNIFIED IDEOGRAPH + {0xF383, 0x9AE2}, //20316 #CJK UNIFIED IDEOGRAPH + {0xF384, 0x9AE3}, //20317 #CJK UNIFIED IDEOGRAPH + {0xF385, 0x9AE4}, //20318 #CJK UNIFIED IDEOGRAPH + {0xF386, 0x9AE5}, //20319 #CJK UNIFIED IDEOGRAPH + {0xF387, 0x9AE7}, //20320 #CJK UNIFIED IDEOGRAPH + {0xF388, 0x9AE8}, //20321 #CJK UNIFIED IDEOGRAPH + {0xF389, 0x9AE9}, //20322 #CJK UNIFIED IDEOGRAPH + {0xF38A, 0x9AEA}, //20323 #CJK UNIFIED IDEOGRAPH + {0xF38B, 0x9AEC}, //20324 #CJK UNIFIED IDEOGRAPH + {0xF38C, 0x9AEE}, //20325 #CJK UNIFIED IDEOGRAPH + {0xF38D, 0x9AF0}, //20326 #CJK UNIFIED IDEOGRAPH + {0xF38E, 0x9AF1}, //20327 #CJK UNIFIED IDEOGRAPH + {0xF38F, 0x9AF2}, //20328 #CJK UNIFIED IDEOGRAPH + {0xF390, 0x9AF3}, //20329 #CJK UNIFIED IDEOGRAPH + {0xF391, 0x9AF4}, //20330 #CJK UNIFIED IDEOGRAPH + {0xF392, 0x9AF5}, //20331 #CJK UNIFIED IDEOGRAPH + {0xF393, 0x9AF6}, //20332 #CJK UNIFIED IDEOGRAPH + {0xF394, 0x9AF7}, //20333 #CJK UNIFIED IDEOGRAPH + {0xF395, 0x9AF8}, //20334 #CJK UNIFIED IDEOGRAPH + {0xF396, 0x9AFA}, //20335 #CJK UNIFIED IDEOGRAPH + {0xF397, 0x9AFC}, //20336 #CJK UNIFIED IDEOGRAPH + {0xF398, 0x9AFD}, //20337 #CJK UNIFIED IDEOGRAPH + {0xF399, 0x9AFE}, //20338 #CJK UNIFIED IDEOGRAPH + {0xF39A, 0x9AFF}, //20339 #CJK UNIFIED IDEOGRAPH + {0xF39B, 0x9B00}, //20340 #CJK UNIFIED IDEOGRAPH + {0xF39C, 0x9B01}, //20341 #CJK UNIFIED IDEOGRAPH + {0xF39D, 0x9B02}, //20342 #CJK UNIFIED IDEOGRAPH + {0xF39E, 0x9B04}, //20343 #CJK UNIFIED IDEOGRAPH + {0xF39F, 0x9B05}, //20344 #CJK UNIFIED IDEOGRAPH + {0xF3A0, 0x9B06}, //20345 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x87C6}, //20346 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x8788}, //20347 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x8785}, //20348 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x87AD}, //20349 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x8797}, //20350 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x8783}, //20351 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x87AB}, //20352 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x87E5}, //20353 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x87AC}, //20354 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x87B5}, //20355 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x87B3}, //20356 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x87CB}, //20357 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x87D3}, //20358 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x87BD}, //20359 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x87D1}, //20360 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x87C0}, //20361 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0x87CA}, //20362 #CJK UNIFIED IDEOGRAPH + {0xF3B2, 0x87DB}, //20363 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x87EA}, //20364 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x87E0}, //20365 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x87EE}, //20366 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x8816}, //20367 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x8813}, //20368 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x87FE}, //20369 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x880A}, //20370 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x881B}, //20371 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x8821}, //20372 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x8839}, //20373 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x883C}, //20374 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x7F36}, //20375 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x7F42}, //20376 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x7F44}, //20377 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x7F45}, //20378 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x8210}, //20379 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x7AFA}, //20380 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x7AFD}, //20381 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x7B08}, //20382 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x7B03}, //20383 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x7B04}, //20384 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x7B15}, //20385 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x7B0A}, //20386 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x7B2B}, //20387 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x7B0F}, //20388 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x7B47}, //20389 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x7B38}, //20390 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x7B2A}, //20391 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x7B19}, //20392 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x7B2E}, //20393 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x7B31}, //20394 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x7B20}, //20395 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x7B25}, //20396 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x7B24}, //20397 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x7B33}, //20398 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x7B3E}, //20399 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x7B1E}, //20400 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x7B58}, //20401 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x7B5A}, //20402 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x7B45}, //20403 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x7B75}, //20404 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x7B4C}, //20405 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x7B5D}, //20406 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x7B60}, //20407 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x7B6E}, //20408 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x7B7B}, //20409 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x7B62}, //20410 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x7B72}, //20411 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x7B71}, //20412 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x7B90}, //20413 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x7BA6}, //20414 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x7BA7}, //20415 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x7BB8}, //20416 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x7BAC}, //20417 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x7B9D}, //20418 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x7BA8}, //20419 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x7B85}, //20420 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x7BAA}, //20421 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x7B9C}, //20422 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x7BA2}, //20423 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x7BAB}, //20424 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x7BB4}, //20425 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x7BD1}, //20426 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x7BC1}, //20427 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x7BCC}, //20428 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x7BDD}, //20429 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x7BDA}, //20430 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x7BE5}, //20431 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x7BE6}, //20432 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x7BEA}, //20433 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x7C0C}, //20434 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x7BFE}, //20435 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x7BFC}, //20436 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x7C0F}, //20437 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x7C16}, //20438 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x7C0B}, //20439 #CJK UNIFIED IDEOGRAPH + {0xF440, 0x9B07}, //20440 #CJK UNIFIED IDEOGRAPH + {0xF441, 0x9B09}, //20441 #CJK UNIFIED IDEOGRAPH + {0xF442, 0x9B0A}, //20442 #CJK UNIFIED IDEOGRAPH + {0xF443, 0x9B0B}, //20443 #CJK UNIFIED IDEOGRAPH + {0xF444, 0x9B0C}, //20444 #CJK UNIFIED IDEOGRAPH + {0xF445, 0x9B0D}, //20445 #CJK UNIFIED IDEOGRAPH + {0xF446, 0x9B0E}, //20446 #CJK UNIFIED IDEOGRAPH + {0xF447, 0x9B10}, //20447 #CJK UNIFIED IDEOGRAPH + {0xF448, 0x9B11}, //20448 #CJK UNIFIED IDEOGRAPH + {0xF449, 0x9B12}, //20449 #CJK UNIFIED IDEOGRAPH + {0xF44A, 0x9B14}, //20450 #CJK UNIFIED IDEOGRAPH + {0xF44B, 0x9B15}, //20451 #CJK UNIFIED IDEOGRAPH + {0xF44C, 0x9B16}, //20452 #CJK UNIFIED IDEOGRAPH + {0xF44D, 0x9B17}, //20453 #CJK UNIFIED IDEOGRAPH + {0xF44E, 0x9B18}, //20454 #CJK UNIFIED IDEOGRAPH + {0xF44F, 0x9B19}, //20455 #CJK UNIFIED IDEOGRAPH + {0xF450, 0x9B1A}, //20456 #CJK UNIFIED IDEOGRAPH + {0xF451, 0x9B1B}, //20457 #CJK UNIFIED IDEOGRAPH + {0xF452, 0x9B1C}, //20458 #CJK UNIFIED IDEOGRAPH + {0xF453, 0x9B1D}, //20459 #CJK UNIFIED IDEOGRAPH + {0xF454, 0x9B1E}, //20460 #CJK UNIFIED IDEOGRAPH + {0xF455, 0x9B20}, //20461 #CJK UNIFIED IDEOGRAPH + {0xF456, 0x9B21}, //20462 #CJK UNIFIED IDEOGRAPH + {0xF457, 0x9B22}, //20463 #CJK UNIFIED IDEOGRAPH + {0xF458, 0x9B24}, //20464 #CJK UNIFIED IDEOGRAPH + {0xF459, 0x9B25}, //20465 #CJK UNIFIED IDEOGRAPH + {0xF45A, 0x9B26}, //20466 #CJK UNIFIED IDEOGRAPH + {0xF45B, 0x9B27}, //20467 #CJK UNIFIED IDEOGRAPH + {0xF45C, 0x9B28}, //20468 #CJK UNIFIED IDEOGRAPH + {0xF45D, 0x9B29}, //20469 #CJK UNIFIED IDEOGRAPH + {0xF45E, 0x9B2A}, //20470 #CJK UNIFIED IDEOGRAPH + {0xF45F, 0x9B2B}, //20471 #CJK UNIFIED IDEOGRAPH + {0xF460, 0x9B2C}, //20472 #CJK UNIFIED IDEOGRAPH + {0xF461, 0x9B2D}, //20473 #CJK UNIFIED IDEOGRAPH + {0xF462, 0x9B2E}, //20474 #CJK UNIFIED IDEOGRAPH + {0xF463, 0x9B30}, //20475 #CJK UNIFIED IDEOGRAPH + {0xF464, 0x9B31}, //20476 #CJK UNIFIED IDEOGRAPH + {0xF465, 0x9B33}, //20477 #CJK UNIFIED IDEOGRAPH + {0xF466, 0x9B34}, //20478 #CJK UNIFIED IDEOGRAPH + {0xF467, 0x9B35}, //20479 #CJK UNIFIED IDEOGRAPH + {0xF468, 0x9B36}, //20480 #CJK UNIFIED IDEOGRAPH + {0xF469, 0x9B37}, //20481 #CJK UNIFIED IDEOGRAPH + {0xF46A, 0x9B38}, //20482 #CJK UNIFIED IDEOGRAPH + {0xF46B, 0x9B39}, //20483 #CJK UNIFIED IDEOGRAPH + {0xF46C, 0x9B3A}, //20484 #CJK UNIFIED IDEOGRAPH + {0xF46D, 0x9B3D}, //20485 #CJK UNIFIED IDEOGRAPH + {0xF46E, 0x9B3E}, //20486 #CJK UNIFIED IDEOGRAPH + {0xF46F, 0x9B3F}, //20487 #CJK UNIFIED IDEOGRAPH + {0xF470, 0x9B40}, //20488 #CJK UNIFIED IDEOGRAPH + {0xF471, 0x9B46}, //20489 #CJK UNIFIED IDEOGRAPH + {0xF472, 0x9B4A}, //20490 #CJK UNIFIED IDEOGRAPH + {0xF473, 0x9B4B}, //20491 #CJK UNIFIED IDEOGRAPH + {0xF474, 0x9B4C}, //20492 #CJK UNIFIED IDEOGRAPH + {0xF475, 0x9B4E}, //20493 #CJK UNIFIED IDEOGRAPH + {0xF476, 0x9B50}, //20494 #CJK UNIFIED IDEOGRAPH + {0xF477, 0x9B52}, //20495 #CJK UNIFIED IDEOGRAPH + {0xF478, 0x9B53}, //20496 #CJK UNIFIED IDEOGRAPH + {0xF479, 0x9B55}, //20497 #CJK UNIFIED IDEOGRAPH + {0xF47A, 0x9B56}, //20498 #CJK UNIFIED IDEOGRAPH + {0xF47B, 0x9B57}, //20499 #CJK UNIFIED IDEOGRAPH + {0xF47C, 0x9B58}, //20500 #CJK UNIFIED IDEOGRAPH + {0xF47D, 0x9B59}, //20501 #CJK UNIFIED IDEOGRAPH + {0xF47E, 0x9B5A}, //20502 #CJK UNIFIED IDEOGRAPH + {0xF480, 0x9B5B}, //20503 #CJK UNIFIED IDEOGRAPH + {0xF481, 0x9B5C}, //20504 #CJK UNIFIED IDEOGRAPH + {0xF482, 0x9B5D}, //20505 #CJK UNIFIED IDEOGRAPH + {0xF483, 0x9B5E}, //20506 #CJK UNIFIED IDEOGRAPH + {0xF484, 0x9B5F}, //20507 #CJK UNIFIED IDEOGRAPH + {0xF485, 0x9B60}, //20508 #CJK UNIFIED IDEOGRAPH + {0xF486, 0x9B61}, //20509 #CJK UNIFIED IDEOGRAPH + {0xF487, 0x9B62}, //20510 #CJK UNIFIED IDEOGRAPH + {0xF488, 0x9B63}, //20511 #CJK UNIFIED IDEOGRAPH + {0xF489, 0x9B64}, //20512 #CJK UNIFIED IDEOGRAPH + {0xF48A, 0x9B65}, //20513 #CJK UNIFIED IDEOGRAPH + {0xF48B, 0x9B66}, //20514 #CJK UNIFIED IDEOGRAPH + {0xF48C, 0x9B67}, //20515 #CJK UNIFIED IDEOGRAPH + {0xF48D, 0x9B68}, //20516 #CJK UNIFIED IDEOGRAPH + {0xF48E, 0x9B69}, //20517 #CJK UNIFIED IDEOGRAPH + {0xF48F, 0x9B6A}, //20518 #CJK UNIFIED IDEOGRAPH + {0xF490, 0x9B6B}, //20519 #CJK UNIFIED IDEOGRAPH + {0xF491, 0x9B6C}, //20520 #CJK UNIFIED IDEOGRAPH + {0xF492, 0x9B6D}, //20521 #CJK UNIFIED IDEOGRAPH + {0xF493, 0x9B6E}, //20522 #CJK UNIFIED IDEOGRAPH + {0xF494, 0x9B6F}, //20523 #CJK UNIFIED IDEOGRAPH + {0xF495, 0x9B70}, //20524 #CJK UNIFIED IDEOGRAPH + {0xF496, 0x9B71}, //20525 #CJK UNIFIED IDEOGRAPH + {0xF497, 0x9B72}, //20526 #CJK UNIFIED IDEOGRAPH + {0xF498, 0x9B73}, //20527 #CJK UNIFIED IDEOGRAPH + {0xF499, 0x9B74}, //20528 #CJK UNIFIED IDEOGRAPH + {0xF49A, 0x9B75}, //20529 #CJK UNIFIED IDEOGRAPH + {0xF49B, 0x9B76}, //20530 #CJK UNIFIED IDEOGRAPH + {0xF49C, 0x9B77}, //20531 #CJK UNIFIED IDEOGRAPH + {0xF49D, 0x9B78}, //20532 #CJK UNIFIED IDEOGRAPH + {0xF49E, 0x9B79}, //20533 #CJK UNIFIED IDEOGRAPH + {0xF49F, 0x9B7A}, //20534 #CJK UNIFIED IDEOGRAPH + {0xF4A0, 0x9B7B}, //20535 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x7C1F}, //20536 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x7C2A}, //20537 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x7C26}, //20538 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x7C38}, //20539 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x7C41}, //20540 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x7C40}, //20541 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0x81FE}, //20542 #CJK UNIFIED IDEOGRAPH + {0xF4A8, 0x8201}, //20543 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x8202}, //20544 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x8204}, //20545 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x81EC}, //20546 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x8844}, //20547 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x8221}, //20548 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x8222}, //20549 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x8223}, //20550 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x822D}, //20551 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x822F}, //20552 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8228}, //20553 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x822B}, //20554 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x8238}, //20555 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x823B}, //20556 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x8233}, //20557 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x8234}, //20558 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x823E}, //20559 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x8244}, //20560 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x8249}, //20561 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x824B}, //20562 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x824F}, //20563 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x825A}, //20564 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x825F}, //20565 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x8268}, //20566 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x887E}, //20567 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8885}, //20568 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x8888}, //20569 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x88D8}, //20570 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x88DF}, //20571 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x895E}, //20572 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x7F9D}, //20573 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x7F9F}, //20574 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x7FA7}, //20575 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x7FAF}, //20576 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x7FB0}, //20577 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x7FB2}, //20578 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x7C7C}, //20579 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x6549}, //20580 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x7C91}, //20581 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x7C9D}, //20582 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x7C9C}, //20583 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x7C9E}, //20584 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x7CA2}, //20585 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x7CB2}, //20586 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x7CBC}, //20587 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x7CBD}, //20588 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x7CC1}, //20589 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x7CC7}, //20590 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x7CCC}, //20591 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x7CCD}, //20592 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x7CC8}, //20593 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x7CC5}, //20594 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x7CD7}, //20595 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x7CE8}, //20596 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x826E}, //20597 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x66A8}, //20598 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x7FBF}, //20599 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x7FCE}, //20600 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x7FD5}, //20601 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x7FE5}, //20602 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x7FE1}, //20603 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x7FE6}, //20604 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x7FE9}, //20605 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x7FEE}, //20606 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x7FF3}, //20607 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x7CF8}, //20608 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x7D77}, //20609 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x7DA6}, //20610 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x7DAE}, //20611 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x7E47}, //20612 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0x7E9B}, //20613 #CJK UNIFIED IDEOGRAPH + {0xF4EF, 0x9EB8}, //20614 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x9EB4}, //20615 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x8D73}, //20616 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x8D84}, //20617 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x8D94}, //20618 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x8D91}, //20619 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x8DB1}, //20620 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x8D67}, //20621 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x8D6D}, //20622 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x8C47}, //20623 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x8C49}, //20624 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x914A}, //20625 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x9150}, //20626 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x914E}, //20627 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x914F}, //20628 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x9164}, //20629 #CJK UNIFIED IDEOGRAPH + {0xF540, 0x9B7C}, //20630 #CJK UNIFIED IDEOGRAPH + {0xF541, 0x9B7D}, //20631 #CJK UNIFIED IDEOGRAPH + {0xF542, 0x9B7E}, //20632 #CJK UNIFIED IDEOGRAPH + {0xF543, 0x9B7F}, //20633 #CJK UNIFIED IDEOGRAPH + {0xF544, 0x9B80}, //20634 #CJK UNIFIED IDEOGRAPH + {0xF545, 0x9B81}, //20635 #CJK UNIFIED IDEOGRAPH + {0xF546, 0x9B82}, //20636 #CJK UNIFIED IDEOGRAPH + {0xF547, 0x9B83}, //20637 #CJK UNIFIED IDEOGRAPH + {0xF548, 0x9B84}, //20638 #CJK UNIFIED IDEOGRAPH + {0xF549, 0x9B85}, //20639 #CJK UNIFIED IDEOGRAPH + {0xF54A, 0x9B86}, //20640 #CJK UNIFIED IDEOGRAPH + {0xF54B, 0x9B87}, //20641 #CJK UNIFIED IDEOGRAPH + {0xF54C, 0x9B88}, //20642 #CJK UNIFIED IDEOGRAPH + {0xF54D, 0x9B89}, //20643 #CJK UNIFIED IDEOGRAPH + {0xF54E, 0x9B8A}, //20644 #CJK UNIFIED IDEOGRAPH + {0xF54F, 0x9B8B}, //20645 #CJK UNIFIED IDEOGRAPH + {0xF550, 0x9B8C}, //20646 #CJK UNIFIED IDEOGRAPH + {0xF551, 0x9B8D}, //20647 #CJK UNIFIED IDEOGRAPH + {0xF552, 0x9B8E}, //20648 #CJK UNIFIED IDEOGRAPH + {0xF553, 0x9B8F}, //20649 #CJK UNIFIED IDEOGRAPH + {0xF554, 0x9B90}, //20650 #CJK UNIFIED IDEOGRAPH + {0xF555, 0x9B91}, //20651 #CJK UNIFIED IDEOGRAPH + {0xF556, 0x9B92}, //20652 #CJK UNIFIED IDEOGRAPH + {0xF557, 0x9B93}, //20653 #CJK UNIFIED IDEOGRAPH + {0xF558, 0x9B94}, //20654 #CJK UNIFIED IDEOGRAPH + {0xF559, 0x9B95}, //20655 #CJK UNIFIED IDEOGRAPH + {0xF55A, 0x9B96}, //20656 #CJK UNIFIED IDEOGRAPH + {0xF55B, 0x9B97}, //20657 #CJK UNIFIED IDEOGRAPH + {0xF55C, 0x9B98}, //20658 #CJK UNIFIED IDEOGRAPH + {0xF55D, 0x9B99}, //20659 #CJK UNIFIED IDEOGRAPH + {0xF55E, 0x9B9A}, //20660 #CJK UNIFIED IDEOGRAPH + {0xF55F, 0x9B9B}, //20661 #CJK UNIFIED IDEOGRAPH + {0xF560, 0x9B9C}, //20662 #CJK UNIFIED IDEOGRAPH + {0xF561, 0x9B9D}, //20663 #CJK UNIFIED IDEOGRAPH + {0xF562, 0x9B9E}, //20664 #CJK UNIFIED IDEOGRAPH + {0xF563, 0x9B9F}, //20665 #CJK UNIFIED IDEOGRAPH + {0xF564, 0x9BA0}, //20666 #CJK UNIFIED IDEOGRAPH + {0xF565, 0x9BA1}, //20667 #CJK UNIFIED IDEOGRAPH + {0xF566, 0x9BA2}, //20668 #CJK UNIFIED IDEOGRAPH + {0xF567, 0x9BA3}, //20669 #CJK UNIFIED IDEOGRAPH + {0xF568, 0x9BA4}, //20670 #CJK UNIFIED IDEOGRAPH + {0xF569, 0x9BA5}, //20671 #CJK UNIFIED IDEOGRAPH + {0xF56A, 0x9BA6}, //20672 #CJK UNIFIED IDEOGRAPH + {0xF56B, 0x9BA7}, //20673 #CJK UNIFIED IDEOGRAPH + {0xF56C, 0x9BA8}, //20674 #CJK UNIFIED IDEOGRAPH + {0xF56D, 0x9BA9}, //20675 #CJK UNIFIED IDEOGRAPH + {0xF56E, 0x9BAA}, //20676 #CJK UNIFIED IDEOGRAPH + {0xF56F, 0x9BAB}, //20677 #CJK UNIFIED IDEOGRAPH + {0xF570, 0x9BAC}, //20678 #CJK UNIFIED IDEOGRAPH + {0xF571, 0x9BAD}, //20679 #CJK UNIFIED IDEOGRAPH + {0xF572, 0x9BAE}, //20680 #CJK UNIFIED IDEOGRAPH + {0xF573, 0x9BAF}, //20681 #CJK UNIFIED IDEOGRAPH + {0xF574, 0x9BB0}, //20682 #CJK UNIFIED IDEOGRAPH + {0xF575, 0x9BB1}, //20683 #CJK UNIFIED IDEOGRAPH + {0xF576, 0x9BB2}, //20684 #CJK UNIFIED IDEOGRAPH + {0xF577, 0x9BB3}, //20685 #CJK UNIFIED IDEOGRAPH + {0xF578, 0x9BB4}, //20686 #CJK UNIFIED IDEOGRAPH + {0xF579, 0x9BB5}, //20687 #CJK UNIFIED IDEOGRAPH + {0xF57A, 0x9BB6}, //20688 #CJK UNIFIED IDEOGRAPH + {0xF57B, 0x9BB7}, //20689 #CJK UNIFIED IDEOGRAPH + {0xF57C, 0x9BB8}, //20690 #CJK UNIFIED IDEOGRAPH + {0xF57D, 0x9BB9}, //20691 #CJK UNIFIED IDEOGRAPH + {0xF57E, 0x9BBA}, //20692 #CJK UNIFIED IDEOGRAPH + {0xF580, 0x9BBB}, //20693 #CJK UNIFIED IDEOGRAPH + {0xF581, 0x9BBC}, //20694 #CJK UNIFIED IDEOGRAPH + {0xF582, 0x9BBD}, //20695 #CJK UNIFIED IDEOGRAPH + {0xF583, 0x9BBE}, //20696 #CJK UNIFIED IDEOGRAPH + {0xF584, 0x9BBF}, //20697 #CJK UNIFIED IDEOGRAPH + {0xF585, 0x9BC0}, //20698 #CJK UNIFIED IDEOGRAPH + {0xF586, 0x9BC1}, //20699 #CJK UNIFIED IDEOGRAPH + {0xF587, 0x9BC2}, //20700 #CJK UNIFIED IDEOGRAPH + {0xF588, 0x9BC3}, //20701 #CJK UNIFIED IDEOGRAPH + {0xF589, 0x9BC4}, //20702 #CJK UNIFIED IDEOGRAPH + {0xF58A, 0x9BC5}, //20703 #CJK UNIFIED IDEOGRAPH + {0xF58B, 0x9BC6}, //20704 #CJK UNIFIED IDEOGRAPH + {0xF58C, 0x9BC7}, //20705 #CJK UNIFIED IDEOGRAPH + {0xF58D, 0x9BC8}, //20706 #CJK UNIFIED IDEOGRAPH + {0xF58E, 0x9BC9}, //20707 #CJK UNIFIED IDEOGRAPH + {0xF58F, 0x9BCA}, //20708 #CJK UNIFIED IDEOGRAPH + {0xF590, 0x9BCB}, //20709 #CJK UNIFIED IDEOGRAPH + {0xF591, 0x9BCC}, //20710 #CJK UNIFIED IDEOGRAPH + {0xF592, 0x9BCD}, //20711 #CJK UNIFIED IDEOGRAPH + {0xF593, 0x9BCE}, //20712 #CJK UNIFIED IDEOGRAPH + {0xF594, 0x9BCF}, //20713 #CJK UNIFIED IDEOGRAPH + {0xF595, 0x9BD0}, //20714 #CJK UNIFIED IDEOGRAPH + {0xF596, 0x9BD1}, //20715 #CJK UNIFIED IDEOGRAPH + {0xF597, 0x9BD2}, //20716 #CJK UNIFIED IDEOGRAPH + {0xF598, 0x9BD3}, //20717 #CJK UNIFIED IDEOGRAPH + {0xF599, 0x9BD4}, //20718 #CJK UNIFIED IDEOGRAPH + {0xF59A, 0x9BD5}, //20719 #CJK UNIFIED IDEOGRAPH + {0xF59B, 0x9BD6}, //20720 #CJK UNIFIED IDEOGRAPH + {0xF59C, 0x9BD7}, //20721 #CJK UNIFIED IDEOGRAPH + {0xF59D, 0x9BD8}, //20722 #CJK UNIFIED IDEOGRAPH + {0xF59E, 0x9BD9}, //20723 #CJK UNIFIED IDEOGRAPH + {0xF59F, 0x9BDA}, //20724 #CJK UNIFIED IDEOGRAPH + {0xF5A0, 0x9BDB}, //20725 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x9162}, //20726 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x9161}, //20727 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x9170}, //20728 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x9169}, //20729 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x916F}, //20730 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x917D}, //20731 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x917E}, //20732 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x9172}, //20733 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x9174}, //20734 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x9179}, //20735 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x918C}, //20736 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x9185}, //20737 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x9190}, //20738 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x918D}, //20739 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x9191}, //20740 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x91A2}, //20741 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x91A3}, //20742 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x91AA}, //20743 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x91AD}, //20744 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x91AE}, //20745 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x91AF}, //20746 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x91B5}, //20747 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x91B4}, //20748 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x91BA}, //20749 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x8C55}, //20750 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x9E7E}, //20751 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x8DB8}, //20752 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x8DEB}, //20753 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x8E05}, //20754 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x8E59}, //20755 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x8E69}, //20756 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x8DB5}, //20757 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x8DBF}, //20758 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x8DBC}, //20759 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x8DBA}, //20760 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x8DC4}, //20761 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x8DD6}, //20762 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x8DD7}, //20763 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x8DDA}, //20764 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x8DDE}, //20765 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x8DCE}, //20766 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x8DCF}, //20767 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x8DDB}, //20768 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x8DC6}, //20769 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x8DEC}, //20770 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x8DF7}, //20771 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x8DF8}, //20772 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x8DE3}, //20773 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x8DF9}, //20774 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x8DFB}, //20775 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x8DE4}, //20776 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x8E09}, //20777 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x8DFD}, //20778 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x8E14}, //20779 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x8E1D}, //20780 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x8E1F}, //20781 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x8E2C}, //20782 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x8E2E}, //20783 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x8E23}, //20784 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x8E2F}, //20785 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x8E3A}, //20786 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x8E40}, //20787 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x8E39}, //20788 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x8E35}, //20789 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x8E3D}, //20790 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x8E31}, //20791 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x8E49}, //20792 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x8E41}, //20793 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x8E42}, //20794 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x8E51}, //20795 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x8E52}, //20796 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x8E4A}, //20797 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x8E70}, //20798 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x8E76}, //20799 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x8E7C}, //20800 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x8E6F}, //20801 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x8E74}, //20802 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x8E85}, //20803 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x8E8F}, //20804 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x8E94}, //20805 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x8E90}, //20806 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x8E9C}, //20807 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x8E9E}, //20808 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x8C78}, //20809 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x8C82}, //20810 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x8C8A}, //20811 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x8C85}, //20812 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x8C98}, //20813 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x8C94}, //20814 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x659B}, //20815 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x89D6}, //20816 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x89DE}, //20817 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x89DA}, //20818 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x89DC}, //20819 #CJK UNIFIED IDEOGRAPH + {0xF640, 0x9BDC}, //20820 #CJK UNIFIED IDEOGRAPH + {0xF641, 0x9BDD}, //20821 #CJK UNIFIED IDEOGRAPH + {0xF642, 0x9BDE}, //20822 #CJK UNIFIED IDEOGRAPH + {0xF643, 0x9BDF}, //20823 #CJK UNIFIED IDEOGRAPH + {0xF644, 0x9BE0}, //20824 #CJK UNIFIED IDEOGRAPH + {0xF645, 0x9BE1}, //20825 #CJK UNIFIED IDEOGRAPH + {0xF646, 0x9BE2}, //20826 #CJK UNIFIED IDEOGRAPH + {0xF647, 0x9BE3}, //20827 #CJK UNIFIED IDEOGRAPH + {0xF648, 0x9BE4}, //20828 #CJK UNIFIED IDEOGRAPH + {0xF649, 0x9BE5}, //20829 #CJK UNIFIED IDEOGRAPH + {0xF64A, 0x9BE6}, //20830 #CJK UNIFIED IDEOGRAPH + {0xF64B, 0x9BE7}, //20831 #CJK UNIFIED IDEOGRAPH + {0xF64C, 0x9BE8}, //20832 #CJK UNIFIED IDEOGRAPH + {0xF64D, 0x9BE9}, //20833 #CJK UNIFIED IDEOGRAPH + {0xF64E, 0x9BEA}, //20834 #CJK UNIFIED IDEOGRAPH + {0xF64F, 0x9BEB}, //20835 #CJK UNIFIED IDEOGRAPH + {0xF650, 0x9BEC}, //20836 #CJK UNIFIED IDEOGRAPH + {0xF651, 0x9BED}, //20837 #CJK UNIFIED IDEOGRAPH + {0xF652, 0x9BEE}, //20838 #CJK UNIFIED IDEOGRAPH + {0xF653, 0x9BEF}, //20839 #CJK UNIFIED IDEOGRAPH + {0xF654, 0x9BF0}, //20840 #CJK UNIFIED IDEOGRAPH + {0xF655, 0x9BF1}, //20841 #CJK UNIFIED IDEOGRAPH + {0xF656, 0x9BF2}, //20842 #CJK UNIFIED IDEOGRAPH + {0xF657, 0x9BF3}, //20843 #CJK UNIFIED IDEOGRAPH + {0xF658, 0x9BF4}, //20844 #CJK UNIFIED IDEOGRAPH + {0xF659, 0x9BF5}, //20845 #CJK UNIFIED IDEOGRAPH + {0xF65A, 0x9BF6}, //20846 #CJK UNIFIED IDEOGRAPH + {0xF65B, 0x9BF7}, //20847 #CJK UNIFIED IDEOGRAPH + {0xF65C, 0x9BF8}, //20848 #CJK UNIFIED IDEOGRAPH + {0xF65D, 0x9BF9}, //20849 #CJK UNIFIED IDEOGRAPH + {0xF65E, 0x9BFA}, //20850 #CJK UNIFIED IDEOGRAPH + {0xF65F, 0x9BFB}, //20851 #CJK UNIFIED IDEOGRAPH + {0xF660, 0x9BFC}, //20852 #CJK UNIFIED IDEOGRAPH + {0xF661, 0x9BFD}, //20853 #CJK UNIFIED IDEOGRAPH + {0xF662, 0x9BFE}, //20854 #CJK UNIFIED IDEOGRAPH + {0xF663, 0x9BFF}, //20855 #CJK UNIFIED IDEOGRAPH + {0xF664, 0x9C00}, //20856 #CJK UNIFIED IDEOGRAPH + {0xF665, 0x9C01}, //20857 #CJK UNIFIED IDEOGRAPH + {0xF666, 0x9C02}, //20858 #CJK UNIFIED IDEOGRAPH + {0xF667, 0x9C03}, //20859 #CJK UNIFIED IDEOGRAPH + {0xF668, 0x9C04}, //20860 #CJK UNIFIED IDEOGRAPH + {0xF669, 0x9C05}, //20861 #CJK UNIFIED IDEOGRAPH + {0xF66A, 0x9C06}, //20862 #CJK UNIFIED IDEOGRAPH + {0xF66B, 0x9C07}, //20863 #CJK UNIFIED IDEOGRAPH + {0xF66C, 0x9C08}, //20864 #CJK UNIFIED IDEOGRAPH + {0xF66D, 0x9C09}, //20865 #CJK UNIFIED IDEOGRAPH + {0xF66E, 0x9C0A}, //20866 #CJK UNIFIED IDEOGRAPH + {0xF66F, 0x9C0B}, //20867 #CJK UNIFIED IDEOGRAPH + {0xF670, 0x9C0C}, //20868 #CJK UNIFIED IDEOGRAPH + {0xF671, 0x9C0D}, //20869 #CJK UNIFIED IDEOGRAPH + {0xF672, 0x9C0E}, //20870 #CJK UNIFIED IDEOGRAPH + {0xF673, 0x9C0F}, //20871 #CJK UNIFIED IDEOGRAPH + {0xF674, 0x9C10}, //20872 #CJK UNIFIED IDEOGRAPH + {0xF675, 0x9C11}, //20873 #CJK UNIFIED IDEOGRAPH + {0xF676, 0x9C12}, //20874 #CJK UNIFIED IDEOGRAPH + {0xF677, 0x9C13}, //20875 #CJK UNIFIED IDEOGRAPH + {0xF678, 0x9C14}, //20876 #CJK UNIFIED IDEOGRAPH + {0xF679, 0x9C15}, //20877 #CJK UNIFIED IDEOGRAPH + {0xF67A, 0x9C16}, //20878 #CJK UNIFIED IDEOGRAPH + {0xF67B, 0x9C17}, //20879 #CJK UNIFIED IDEOGRAPH + {0xF67C, 0x9C18}, //20880 #CJK UNIFIED IDEOGRAPH + {0xF67D, 0x9C19}, //20881 #CJK UNIFIED IDEOGRAPH + {0xF67E, 0x9C1A}, //20882 #CJK UNIFIED IDEOGRAPH + {0xF680, 0x9C1B}, //20883 #CJK UNIFIED IDEOGRAPH + {0xF681, 0x9C1C}, //20884 #CJK UNIFIED IDEOGRAPH + {0xF682, 0x9C1D}, //20885 #CJK UNIFIED IDEOGRAPH + {0xF683, 0x9C1E}, //20886 #CJK UNIFIED IDEOGRAPH + {0xF684, 0x9C1F}, //20887 #CJK UNIFIED IDEOGRAPH + {0xF685, 0x9C20}, //20888 #CJK UNIFIED IDEOGRAPH + {0xF686, 0x9C21}, //20889 #CJK UNIFIED IDEOGRAPH + {0xF687, 0x9C22}, //20890 #CJK UNIFIED IDEOGRAPH + {0xF688, 0x9C23}, //20891 #CJK UNIFIED IDEOGRAPH + {0xF689, 0x9C24}, //20892 #CJK UNIFIED IDEOGRAPH + {0xF68A, 0x9C25}, //20893 #CJK UNIFIED IDEOGRAPH + {0xF68B, 0x9C26}, //20894 #CJK UNIFIED IDEOGRAPH + {0xF68C, 0x9C27}, //20895 #CJK UNIFIED IDEOGRAPH + {0xF68D, 0x9C28}, //20896 #CJK UNIFIED IDEOGRAPH + {0xF68E, 0x9C29}, //20897 #CJK UNIFIED IDEOGRAPH + {0xF68F, 0x9C2A}, //20898 #CJK UNIFIED IDEOGRAPH + {0xF690, 0x9C2B}, //20899 #CJK UNIFIED IDEOGRAPH + {0xF691, 0x9C2C}, //20900 #CJK UNIFIED IDEOGRAPH + {0xF692, 0x9C2D}, //20901 #CJK UNIFIED IDEOGRAPH + {0xF693, 0x9C2E}, //20902 #CJK UNIFIED IDEOGRAPH + {0xF694, 0x9C2F}, //20903 #CJK UNIFIED IDEOGRAPH + {0xF695, 0x9C30}, //20904 #CJK UNIFIED IDEOGRAPH + {0xF696, 0x9C31}, //20905 #CJK UNIFIED IDEOGRAPH + {0xF697, 0x9C32}, //20906 #CJK UNIFIED IDEOGRAPH + {0xF698, 0x9C33}, //20907 #CJK UNIFIED IDEOGRAPH + {0xF699, 0x9C34}, //20908 #CJK UNIFIED IDEOGRAPH + {0xF69A, 0x9C35}, //20909 #CJK UNIFIED IDEOGRAPH + {0xF69B, 0x9C36}, //20910 #CJK UNIFIED IDEOGRAPH + {0xF69C, 0x9C37}, //20911 #CJK UNIFIED IDEOGRAPH + {0xF69D, 0x9C38}, //20912 #CJK UNIFIED IDEOGRAPH + {0xF69E, 0x9C39}, //20913 #CJK UNIFIED IDEOGRAPH + {0xF69F, 0x9C3A}, //20914 #CJK UNIFIED IDEOGRAPH + {0xF6A0, 0x9C3B}, //20915 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x89E5}, //20916 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x89EB}, //20917 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x89EF}, //20918 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x8A3E}, //20919 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x8B26}, //20920 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x9753}, //20921 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x96E9}, //20922 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x96F3}, //20923 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x96EF}, //20924 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x9706}, //20925 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x9701}, //20926 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x9708}, //20927 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x970F}, //20928 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x970E}, //20929 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x972A}, //20930 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x972D}, //20931 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x9730}, //20932 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x973E}, //20933 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x9F80}, //20934 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x9F83}, //20935 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x9F85}, //20936 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x9F86}, //20937 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x9F87}, //20938 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x9F88}, //20939 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x9F89}, //20940 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x9F8A}, //20941 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x9F8C}, //20942 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x9EFE}, //20943 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x9F0B}, //20944 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x9F0D}, //20945 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x96B9}, //20946 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x96BC}, //20947 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x96BD}, //20948 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x96CE}, //20949 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x96D2}, //20950 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x77BF}, //20951 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x96E0}, //20952 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x928E}, //20953 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x92AE}, //20954 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x92C8}, //20955 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x933E}, //20956 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x936A}, //20957 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x93CA}, //20958 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x938F}, //20959 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x943E}, //20960 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x946B}, //20961 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x9C7F}, //20962 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x9C82}, //20963 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x9C85}, //20964 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x9C86}, //20965 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x9C87}, //20966 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x9C88}, //20967 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x7A23}, //20968 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x9C8B}, //20969 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x9C8E}, //20970 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x9C90}, //20971 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x9C91}, //20972 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x9C92}, //20973 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x9C94}, //20974 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x9C95}, //20975 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x9C9A}, //20976 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x9C9B}, //20977 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x9C9E}, //20978 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x9C9F}, //20979 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x9CA0}, //20980 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x9CA1}, //20981 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x9CA2}, //20982 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x9CA3}, //20983 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x9CA5}, //20984 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x9CA6}, //20985 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x9CA7}, //20986 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x9CA8}, //20987 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x9CA9}, //20988 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x9CAB}, //20989 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x9CAD}, //20990 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x9CAE}, //20991 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x9CB0}, //20992 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x9CB1}, //20993 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x9CB2}, //20994 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x9CB3}, //20995 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x9CB4}, //20996 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x9CB5}, //20997 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x9CB6}, //20998 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0x9CB7}, //20999 #CJK UNIFIED IDEOGRAPH + {0xF6F5, 0x9CBA}, //21000 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0x9CBB}, //21001 #CJK UNIFIED IDEOGRAPH + {0xF6F7, 0x9CBC}, //21002 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x9CBD}, //21003 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x9CC4}, //21004 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x9CC5}, //21005 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x9CC6}, //21006 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x9CC7}, //21007 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x9CCA}, //21008 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x9CCB}, //21009 #CJK UNIFIED IDEOGRAPH + {0xF740, 0x9C3C}, //21010 #CJK UNIFIED IDEOGRAPH + {0xF741, 0x9C3D}, //21011 #CJK UNIFIED IDEOGRAPH + {0xF742, 0x9C3E}, //21012 #CJK UNIFIED IDEOGRAPH + {0xF743, 0x9C3F}, //21013 #CJK UNIFIED IDEOGRAPH + {0xF744, 0x9C40}, //21014 #CJK UNIFIED IDEOGRAPH + {0xF745, 0x9C41}, //21015 #CJK UNIFIED IDEOGRAPH + {0xF746, 0x9C42}, //21016 #CJK UNIFIED IDEOGRAPH + {0xF747, 0x9C43}, //21017 #CJK UNIFIED IDEOGRAPH + {0xF748, 0x9C44}, //21018 #CJK UNIFIED IDEOGRAPH + {0xF749, 0x9C45}, //21019 #CJK UNIFIED IDEOGRAPH + {0xF74A, 0x9C46}, //21020 #CJK UNIFIED IDEOGRAPH + {0xF74B, 0x9C47}, //21021 #CJK UNIFIED IDEOGRAPH + {0xF74C, 0x9C48}, //21022 #CJK UNIFIED IDEOGRAPH + {0xF74D, 0x9C49}, //21023 #CJK UNIFIED IDEOGRAPH + {0xF74E, 0x9C4A}, //21024 #CJK UNIFIED IDEOGRAPH + {0xF74F, 0x9C4B}, //21025 #CJK UNIFIED IDEOGRAPH + {0xF750, 0x9C4C}, //21026 #CJK UNIFIED IDEOGRAPH + {0xF751, 0x9C4D}, //21027 #CJK UNIFIED IDEOGRAPH + {0xF752, 0x9C4E}, //21028 #CJK UNIFIED IDEOGRAPH + {0xF753, 0x9C4F}, //21029 #CJK UNIFIED IDEOGRAPH + {0xF754, 0x9C50}, //21030 #CJK UNIFIED IDEOGRAPH + {0xF755, 0x9C51}, //21031 #CJK UNIFIED IDEOGRAPH + {0xF756, 0x9C52}, //21032 #CJK UNIFIED IDEOGRAPH + {0xF757, 0x9C53}, //21033 #CJK UNIFIED IDEOGRAPH + {0xF758, 0x9C54}, //21034 #CJK UNIFIED IDEOGRAPH + {0xF759, 0x9C55}, //21035 #CJK UNIFIED IDEOGRAPH + {0xF75A, 0x9C56}, //21036 #CJK UNIFIED IDEOGRAPH + {0xF75B, 0x9C57}, //21037 #CJK UNIFIED IDEOGRAPH + {0xF75C, 0x9C58}, //21038 #CJK UNIFIED IDEOGRAPH + {0xF75D, 0x9C59}, //21039 #CJK UNIFIED IDEOGRAPH + {0xF75E, 0x9C5A}, //21040 #CJK UNIFIED IDEOGRAPH + {0xF75F, 0x9C5B}, //21041 #CJK UNIFIED IDEOGRAPH + {0xF760, 0x9C5C}, //21042 #CJK UNIFIED IDEOGRAPH + {0xF761, 0x9C5D}, //21043 #CJK UNIFIED IDEOGRAPH + {0xF762, 0x9C5E}, //21044 #CJK UNIFIED IDEOGRAPH + {0xF763, 0x9C5F}, //21045 #CJK UNIFIED IDEOGRAPH + {0xF764, 0x9C60}, //21046 #CJK UNIFIED IDEOGRAPH + {0xF765, 0x9C61}, //21047 #CJK UNIFIED IDEOGRAPH + {0xF766, 0x9C62}, //21048 #CJK UNIFIED IDEOGRAPH + {0xF767, 0x9C63}, //21049 #CJK UNIFIED IDEOGRAPH + {0xF768, 0x9C64}, //21050 #CJK UNIFIED IDEOGRAPH + {0xF769, 0x9C65}, //21051 #CJK UNIFIED IDEOGRAPH + {0xF76A, 0x9C66}, //21052 #CJK UNIFIED IDEOGRAPH + {0xF76B, 0x9C67}, //21053 #CJK UNIFIED IDEOGRAPH + {0xF76C, 0x9C68}, //21054 #CJK UNIFIED IDEOGRAPH + {0xF76D, 0x9C69}, //21055 #CJK UNIFIED IDEOGRAPH + {0xF76E, 0x9C6A}, //21056 #CJK UNIFIED IDEOGRAPH + {0xF76F, 0x9C6B}, //21057 #CJK UNIFIED IDEOGRAPH + {0xF770, 0x9C6C}, //21058 #CJK UNIFIED IDEOGRAPH + {0xF771, 0x9C6D}, //21059 #CJK UNIFIED IDEOGRAPH + {0xF772, 0x9C6E}, //21060 #CJK UNIFIED IDEOGRAPH + {0xF773, 0x9C6F}, //21061 #CJK UNIFIED IDEOGRAPH + {0xF774, 0x9C70}, //21062 #CJK UNIFIED IDEOGRAPH + {0xF775, 0x9C71}, //21063 #CJK UNIFIED IDEOGRAPH + {0xF776, 0x9C72}, //21064 #CJK UNIFIED IDEOGRAPH + {0xF777, 0x9C73}, //21065 #CJK UNIFIED IDEOGRAPH + {0xF778, 0x9C74}, //21066 #CJK UNIFIED IDEOGRAPH + {0xF779, 0x9C75}, //21067 #CJK UNIFIED IDEOGRAPH + {0xF77A, 0x9C76}, //21068 #CJK UNIFIED IDEOGRAPH + {0xF77B, 0x9C77}, //21069 #CJK UNIFIED IDEOGRAPH + {0xF77C, 0x9C78}, //21070 #CJK UNIFIED IDEOGRAPH + {0xF77D, 0x9C79}, //21071 #CJK UNIFIED IDEOGRAPH + {0xF77E, 0x9C7A}, //21072 #CJK UNIFIED IDEOGRAPH + {0xF780, 0x9C7B}, //21073 #CJK UNIFIED IDEOGRAPH + {0xF781, 0x9C7D}, //21074 #CJK UNIFIED IDEOGRAPH + {0xF782, 0x9C7E}, //21075 #CJK UNIFIED IDEOGRAPH + {0xF783, 0x9C80}, //21076 #CJK UNIFIED IDEOGRAPH + {0xF784, 0x9C83}, //21077 #CJK UNIFIED IDEOGRAPH + {0xF785, 0x9C84}, //21078 #CJK UNIFIED IDEOGRAPH + {0xF786, 0x9C89}, //21079 #CJK UNIFIED IDEOGRAPH + {0xF787, 0x9C8A}, //21080 #CJK UNIFIED IDEOGRAPH + {0xF788, 0x9C8C}, //21081 #CJK UNIFIED IDEOGRAPH + {0xF789, 0x9C8F}, //21082 #CJK UNIFIED IDEOGRAPH + {0xF78A, 0x9C93}, //21083 #CJK UNIFIED IDEOGRAPH + {0xF78B, 0x9C96}, //21084 #CJK UNIFIED IDEOGRAPH + {0xF78C, 0x9C97}, //21085 #CJK UNIFIED IDEOGRAPH + {0xF78D, 0x9C98}, //21086 #CJK UNIFIED IDEOGRAPH + {0xF78E, 0x9C99}, //21087 #CJK UNIFIED IDEOGRAPH + {0xF78F, 0x9C9D}, //21088 #CJK UNIFIED IDEOGRAPH + {0xF790, 0x9CAA}, //21089 #CJK UNIFIED IDEOGRAPH + {0xF791, 0x9CAC}, //21090 #CJK UNIFIED IDEOGRAPH + {0xF792, 0x9CAF}, //21091 #CJK UNIFIED IDEOGRAPH + {0xF793, 0x9CB9}, //21092 #CJK UNIFIED IDEOGRAPH + {0xF794, 0x9CBE}, //21093 #CJK UNIFIED IDEOGRAPH + {0xF795, 0x9CBF}, //21094 #CJK UNIFIED IDEOGRAPH + {0xF796, 0x9CC0}, //21095 #CJK UNIFIED IDEOGRAPH + {0xF797, 0x9CC1}, //21096 #CJK UNIFIED IDEOGRAPH + {0xF798, 0x9CC2}, //21097 #CJK UNIFIED IDEOGRAPH + {0xF799, 0x9CC8}, //21098 #CJK UNIFIED IDEOGRAPH + {0xF79A, 0x9CC9}, //21099 #CJK UNIFIED IDEOGRAPH + {0xF79B, 0x9CD1}, //21100 #CJK UNIFIED IDEOGRAPH + {0xF79C, 0x9CD2}, //21101 #CJK UNIFIED IDEOGRAPH + {0xF79D, 0x9CDA}, //21102 #CJK UNIFIED IDEOGRAPH + {0xF79E, 0x9CDB}, //21103 #CJK UNIFIED IDEOGRAPH + {0xF79F, 0x9CE0}, //21104 #CJK UNIFIED IDEOGRAPH + {0xF7A0, 0x9CE1}, //21105 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9CCC}, //21106 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x9CCD}, //21107 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x9CCE}, //21108 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x9CCF}, //21109 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x9CD0}, //21110 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x9CD3}, //21111 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x9CD4}, //21112 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x9CD5}, //21113 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x9CD7}, //21114 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x9CD8}, //21115 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x9CD9}, //21116 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x9CDC}, //21117 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x9CDD}, //21118 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x9CDF}, //21119 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x9CE2}, //21120 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x977C}, //21121 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x9785}, //21122 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x9791}, //21123 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x9792}, //21124 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x9794}, //21125 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x97AF}, //21126 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x97AB}, //21127 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x97A3}, //21128 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0x97B2}, //21129 #CJK UNIFIED IDEOGRAPH + {0xF7B9, 0x97B4}, //21130 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x9AB1}, //21131 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x9AB0}, //21132 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x9AB7}, //21133 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x9E58}, //21134 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x9AB6}, //21135 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x9ABA}, //21136 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x9ABC}, //21137 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x9AC1}, //21138 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x9AC0}, //21139 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x9AC5}, //21140 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x9AC2}, //21141 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x9ACB}, //21142 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x9ACC}, //21143 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x9AD1}, //21144 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0x9B45}, //21145 #CJK UNIFIED IDEOGRAPH + {0xF7C9, 0x9B43}, //21146 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x9B47}, //21147 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x9B49}, //21148 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x9B48}, //21149 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x9B4D}, //21150 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x9B51}, //21151 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x98E8}, //21152 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x990D}, //21153 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x992E}, //21154 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x9955}, //21155 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0x9954}, //21156 #CJK UNIFIED IDEOGRAPH + {0xF7D4, 0x9ADF}, //21157 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x9AE1}, //21158 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x9AE6}, //21159 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x9AEF}, //21160 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x9AEB}, //21161 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x9AFB}, //21162 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x9AED}, //21163 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x9AF9}, //21164 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x9B08}, //21165 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x9B0F}, //21166 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x9B13}, //21167 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x9B1F}, //21168 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x9B23}, //21169 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x9EBD}, //21170 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x9EBE}, //21171 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x7E3B}, //21172 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x9E82}, //21173 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x9E87}, //21174 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x9E88}, //21175 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x9E8B}, //21176 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x9E92}, //21177 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x93D6}, //21178 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x9E9D}, //21179 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x9E9F}, //21180 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x9EDB}, //21181 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x9EDC}, //21182 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x9EDD}, //21183 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x9EE0}, //21184 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x9EDF}, //21185 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x9EE2}, //21186 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x9EE9}, //21187 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x9EE7}, //21188 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x9EE5}, //21189 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x9EEA}, //21190 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x9EEF}, //21191 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x9F22}, //21192 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x9F2C}, //21193 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x9F2F}, //21194 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x9F39}, //21195 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x9F37}, //21196 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x9F3D}, //21197 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x9F3E}, //21198 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x9F44}, //21199 #CJK UNIFIED IDEOGRAPH + {0xF840, 0x9CE3}, //21200 #CJK UNIFIED IDEOGRAPH + {0xF841, 0x9CE4}, //21201 #CJK UNIFIED IDEOGRAPH + {0xF842, 0x9CE5}, //21202 #CJK UNIFIED IDEOGRAPH + {0xF843, 0x9CE6}, //21203 #CJK UNIFIED IDEOGRAPH + {0xF844, 0x9CE7}, //21204 #CJK UNIFIED IDEOGRAPH + {0xF845, 0x9CE8}, //21205 #CJK UNIFIED IDEOGRAPH + {0xF846, 0x9CE9}, //21206 #CJK UNIFIED IDEOGRAPH + {0xF847, 0x9CEA}, //21207 #CJK UNIFIED IDEOGRAPH + {0xF848, 0x9CEB}, //21208 #CJK UNIFIED IDEOGRAPH + {0xF849, 0x9CEC}, //21209 #CJK UNIFIED IDEOGRAPH + {0xF84A, 0x9CED}, //21210 #CJK UNIFIED IDEOGRAPH + {0xF84B, 0x9CEE}, //21211 #CJK UNIFIED IDEOGRAPH + {0xF84C, 0x9CEF}, //21212 #CJK UNIFIED IDEOGRAPH + {0xF84D, 0x9CF0}, //21213 #CJK UNIFIED IDEOGRAPH + {0xF84E, 0x9CF1}, //21214 #CJK UNIFIED IDEOGRAPH + {0xF84F, 0x9CF2}, //21215 #CJK UNIFIED IDEOGRAPH + {0xF850, 0x9CF3}, //21216 #CJK UNIFIED IDEOGRAPH + {0xF851, 0x9CF4}, //21217 #CJK UNIFIED IDEOGRAPH + {0xF852, 0x9CF5}, //21218 #CJK UNIFIED IDEOGRAPH + {0xF853, 0x9CF6}, //21219 #CJK UNIFIED IDEOGRAPH + {0xF854, 0x9CF7}, //21220 #CJK UNIFIED IDEOGRAPH + {0xF855, 0x9CF8}, //21221 #CJK UNIFIED IDEOGRAPH + {0xF856, 0x9CF9}, //21222 #CJK UNIFIED IDEOGRAPH + {0xF857, 0x9CFA}, //21223 #CJK UNIFIED IDEOGRAPH + {0xF858, 0x9CFB}, //21224 #CJK UNIFIED IDEOGRAPH + {0xF859, 0x9CFC}, //21225 #CJK UNIFIED IDEOGRAPH + {0xF85A, 0x9CFD}, //21226 #CJK UNIFIED IDEOGRAPH + {0xF85B, 0x9CFE}, //21227 #CJK UNIFIED IDEOGRAPH + {0xF85C, 0x9CFF}, //21228 #CJK UNIFIED IDEOGRAPH + {0xF85D, 0x9D00}, //21229 #CJK UNIFIED IDEOGRAPH + {0xF85E, 0x9D01}, //21230 #CJK UNIFIED IDEOGRAPH + {0xF85F, 0x9D02}, //21231 #CJK UNIFIED IDEOGRAPH + {0xF860, 0x9D03}, //21232 #CJK UNIFIED IDEOGRAPH + {0xF861, 0x9D04}, //21233 #CJK UNIFIED IDEOGRAPH + {0xF862, 0x9D05}, //21234 #CJK UNIFIED IDEOGRAPH + {0xF863, 0x9D06}, //21235 #CJK UNIFIED IDEOGRAPH + {0xF864, 0x9D07}, //21236 #CJK UNIFIED IDEOGRAPH + {0xF865, 0x9D08}, //21237 #CJK UNIFIED IDEOGRAPH + {0xF866, 0x9D09}, //21238 #CJK UNIFIED IDEOGRAPH + {0xF867, 0x9D0A}, //21239 #CJK UNIFIED IDEOGRAPH + {0xF868, 0x9D0B}, //21240 #CJK UNIFIED IDEOGRAPH + {0xF869, 0x9D0C}, //21241 #CJK UNIFIED IDEOGRAPH + {0xF86A, 0x9D0D}, //21242 #CJK UNIFIED IDEOGRAPH + {0xF86B, 0x9D0E}, //21243 #CJK UNIFIED IDEOGRAPH + {0xF86C, 0x9D0F}, //21244 #CJK UNIFIED IDEOGRAPH + {0xF86D, 0x9D10}, //21245 #CJK UNIFIED IDEOGRAPH + {0xF86E, 0x9D11}, //21246 #CJK UNIFIED IDEOGRAPH + {0xF86F, 0x9D12}, //21247 #CJK UNIFIED IDEOGRAPH + {0xF870, 0x9D13}, //21248 #CJK UNIFIED IDEOGRAPH + {0xF871, 0x9D14}, //21249 #CJK UNIFIED IDEOGRAPH + {0xF872, 0x9D15}, //21250 #CJK UNIFIED IDEOGRAPH + {0xF873, 0x9D16}, //21251 #CJK UNIFIED IDEOGRAPH + {0xF874, 0x9D17}, //21252 #CJK UNIFIED IDEOGRAPH + {0xF875, 0x9D18}, //21253 #CJK UNIFIED IDEOGRAPH + {0xF876, 0x9D19}, //21254 #CJK UNIFIED IDEOGRAPH + {0xF877, 0x9D1A}, //21255 #CJK UNIFIED IDEOGRAPH + {0xF878, 0x9D1B}, //21256 #CJK UNIFIED IDEOGRAPH + {0xF879, 0x9D1C}, //21257 #CJK UNIFIED IDEOGRAPH + {0xF87A, 0x9D1D}, //21258 #CJK UNIFIED IDEOGRAPH + {0xF87B, 0x9D1E}, //21259 #CJK UNIFIED IDEOGRAPH + {0xF87C, 0x9D1F}, //21260 #CJK UNIFIED IDEOGRAPH + {0xF87D, 0x9D20}, //21261 #CJK UNIFIED IDEOGRAPH + {0xF87E, 0x9D21}, //21262 #CJK UNIFIED IDEOGRAPH + {0xF880, 0x9D22}, //21263 #CJK UNIFIED IDEOGRAPH + {0xF881, 0x9D23}, //21264 #CJK UNIFIED IDEOGRAPH + {0xF882, 0x9D24}, //21265 #CJK UNIFIED IDEOGRAPH + {0xF883, 0x9D25}, //21266 #CJK UNIFIED IDEOGRAPH + {0xF884, 0x9D26}, //21267 #CJK UNIFIED IDEOGRAPH + {0xF885, 0x9D27}, //21268 #CJK UNIFIED IDEOGRAPH + {0xF886, 0x9D28}, //21269 #CJK UNIFIED IDEOGRAPH + {0xF887, 0x9D29}, //21270 #CJK UNIFIED IDEOGRAPH + {0xF888, 0x9D2A}, //21271 #CJK UNIFIED IDEOGRAPH + {0xF889, 0x9D2B}, //21272 #CJK UNIFIED IDEOGRAPH + {0xF88A, 0x9D2C}, //21273 #CJK UNIFIED IDEOGRAPH + {0xF88B, 0x9D2D}, //21274 #CJK UNIFIED IDEOGRAPH + {0xF88C, 0x9D2E}, //21275 #CJK UNIFIED IDEOGRAPH + {0xF88D, 0x9D2F}, //21276 #CJK UNIFIED IDEOGRAPH + {0xF88E, 0x9D30}, //21277 #CJK UNIFIED IDEOGRAPH + {0xF88F, 0x9D31}, //21278 #CJK UNIFIED IDEOGRAPH + {0xF890, 0x9D32}, //21279 #CJK UNIFIED IDEOGRAPH + {0xF891, 0x9D33}, //21280 #CJK UNIFIED IDEOGRAPH + {0xF892, 0x9D34}, //21281 #CJK UNIFIED IDEOGRAPH + {0xF893, 0x9D35}, //21282 #CJK UNIFIED IDEOGRAPH + {0xF894, 0x9D36}, //21283 #CJK UNIFIED IDEOGRAPH + {0xF895, 0x9D37}, //21284 #CJK UNIFIED IDEOGRAPH + {0xF896, 0x9D38}, //21285 #CJK UNIFIED IDEOGRAPH + {0xF897, 0x9D39}, //21286 #CJK UNIFIED IDEOGRAPH + {0xF898, 0x9D3A}, //21287 #CJK UNIFIED IDEOGRAPH + {0xF899, 0x9D3B}, //21288 #CJK UNIFIED IDEOGRAPH + {0xF89A, 0x9D3C}, //21289 #CJK UNIFIED IDEOGRAPH + {0xF89B, 0x9D3D}, //21290 #CJK UNIFIED IDEOGRAPH + {0xF89C, 0x9D3E}, //21291 #CJK UNIFIED IDEOGRAPH + {0xF89D, 0x9D3F}, //21292 #CJK UNIFIED IDEOGRAPH + {0xF89E, 0x9D40}, //21293 #CJK UNIFIED IDEOGRAPH + {0xF89F, 0x9D41}, //21294 #CJK UNIFIED IDEOGRAPH + {0xF8A0, 0x9D42}, //21295 #CJK UNIFIED IDEOGRAPH + {0xF940, 0x9D43}, //21296 #CJK UNIFIED IDEOGRAPH + {0xF941, 0x9D44}, //21297 #CJK UNIFIED IDEOGRAPH + {0xF942, 0x9D45}, //21298 #CJK UNIFIED IDEOGRAPH + {0xF943, 0x9D46}, //21299 #CJK UNIFIED IDEOGRAPH + {0xF944, 0x9D47}, //21300 #CJK UNIFIED IDEOGRAPH + {0xF945, 0x9D48}, //21301 #CJK UNIFIED IDEOGRAPH + {0xF946, 0x9D49}, //21302 #CJK UNIFIED IDEOGRAPH + {0xF947, 0x9D4A}, //21303 #CJK UNIFIED IDEOGRAPH + {0xF948, 0x9D4B}, //21304 #CJK UNIFIED IDEOGRAPH + {0xF949, 0x9D4C}, //21305 #CJK UNIFIED IDEOGRAPH + {0xF94A, 0x9D4D}, //21306 #CJK UNIFIED IDEOGRAPH + {0xF94B, 0x9D4E}, //21307 #CJK UNIFIED IDEOGRAPH + {0xF94C, 0x9D4F}, //21308 #CJK UNIFIED IDEOGRAPH + {0xF94D, 0x9D50}, //21309 #CJK UNIFIED IDEOGRAPH + {0xF94E, 0x9D51}, //21310 #CJK UNIFIED IDEOGRAPH + {0xF94F, 0x9D52}, //21311 #CJK UNIFIED IDEOGRAPH + {0xF950, 0x9D53}, //21312 #CJK UNIFIED IDEOGRAPH + {0xF951, 0x9D54}, //21313 #CJK UNIFIED IDEOGRAPH + {0xF952, 0x9D55}, //21314 #CJK UNIFIED IDEOGRAPH + {0xF953, 0x9D56}, //21315 #CJK UNIFIED IDEOGRAPH + {0xF954, 0x9D57}, //21316 #CJK UNIFIED IDEOGRAPH + {0xF955, 0x9D58}, //21317 #CJK UNIFIED IDEOGRAPH + {0xF956, 0x9D59}, //21318 #CJK UNIFIED IDEOGRAPH + {0xF957, 0x9D5A}, //21319 #CJK UNIFIED IDEOGRAPH + {0xF958, 0x9D5B}, //21320 #CJK UNIFIED IDEOGRAPH + {0xF959, 0x9D5C}, //21321 #CJK UNIFIED IDEOGRAPH + {0xF95A, 0x9D5D}, //21322 #CJK UNIFIED IDEOGRAPH + {0xF95B, 0x9D5E}, //21323 #CJK UNIFIED IDEOGRAPH + {0xF95C, 0x9D5F}, //21324 #CJK UNIFIED IDEOGRAPH + {0xF95D, 0x9D60}, //21325 #CJK UNIFIED IDEOGRAPH + {0xF95E, 0x9D61}, //21326 #CJK UNIFIED IDEOGRAPH + {0xF95F, 0x9D62}, //21327 #CJK UNIFIED IDEOGRAPH + {0xF960, 0x9D63}, //21328 #CJK UNIFIED IDEOGRAPH + {0xF961, 0x9D64}, //21329 #CJK UNIFIED IDEOGRAPH + {0xF962, 0x9D65}, //21330 #CJK UNIFIED IDEOGRAPH + {0xF963, 0x9D66}, //21331 #CJK UNIFIED IDEOGRAPH + {0xF964, 0x9D67}, //21332 #CJK UNIFIED IDEOGRAPH + {0xF965, 0x9D68}, //21333 #CJK UNIFIED IDEOGRAPH + {0xF966, 0x9D69}, //21334 #CJK UNIFIED IDEOGRAPH + {0xF967, 0x9D6A}, //21335 #CJK UNIFIED IDEOGRAPH + {0xF968, 0x9D6B}, //21336 #CJK UNIFIED IDEOGRAPH + {0xF969, 0x9D6C}, //21337 #CJK UNIFIED IDEOGRAPH + {0xF96A, 0x9D6D}, //21338 #CJK UNIFIED IDEOGRAPH + {0xF96B, 0x9D6E}, //21339 #CJK UNIFIED IDEOGRAPH + {0xF96C, 0x9D6F}, //21340 #CJK UNIFIED IDEOGRAPH + {0xF96D, 0x9D70}, //21341 #CJK UNIFIED IDEOGRAPH + {0xF96E, 0x9D71}, //21342 #CJK UNIFIED IDEOGRAPH + {0xF96F, 0x9D72}, //21343 #CJK UNIFIED IDEOGRAPH + {0xF970, 0x9D73}, //21344 #CJK UNIFIED IDEOGRAPH + {0xF971, 0x9D74}, //21345 #CJK UNIFIED IDEOGRAPH + {0xF972, 0x9D75}, //21346 #CJK UNIFIED IDEOGRAPH + {0xF973, 0x9D76}, //21347 #CJK UNIFIED IDEOGRAPH + {0xF974, 0x9D77}, //21348 #CJK UNIFIED IDEOGRAPH + {0xF975, 0x9D78}, //21349 #CJK UNIFIED IDEOGRAPH + {0xF976, 0x9D79}, //21350 #CJK UNIFIED IDEOGRAPH + {0xF977, 0x9D7A}, //21351 #CJK UNIFIED IDEOGRAPH + {0xF978, 0x9D7B}, //21352 #CJK UNIFIED IDEOGRAPH + {0xF979, 0x9D7C}, //21353 #CJK UNIFIED IDEOGRAPH + {0xF97A, 0x9D7D}, //21354 #CJK UNIFIED IDEOGRAPH + {0xF97B, 0x9D7E}, //21355 #CJK UNIFIED IDEOGRAPH + {0xF97C, 0x9D7F}, //21356 #CJK UNIFIED IDEOGRAPH + {0xF97D, 0x9D80}, //21357 #CJK UNIFIED IDEOGRAPH + {0xF97E, 0x9D81}, //21358 #CJK UNIFIED IDEOGRAPH + {0xF980, 0x9D82}, //21359 #CJK UNIFIED IDEOGRAPH + {0xF981, 0x9D83}, //21360 #CJK UNIFIED IDEOGRAPH + {0xF982, 0x9D84}, //21361 #CJK UNIFIED IDEOGRAPH + {0xF983, 0x9D85}, //21362 #CJK UNIFIED IDEOGRAPH + {0xF984, 0x9D86}, //21363 #CJK UNIFIED IDEOGRAPH + {0xF985, 0x9D87}, //21364 #CJK UNIFIED IDEOGRAPH + {0xF986, 0x9D88}, //21365 #CJK UNIFIED IDEOGRAPH + {0xF987, 0x9D89}, //21366 #CJK UNIFIED IDEOGRAPH + {0xF988, 0x9D8A}, //21367 #CJK UNIFIED IDEOGRAPH + {0xF989, 0x9D8B}, //21368 #CJK UNIFIED IDEOGRAPH + {0xF98A, 0x9D8C}, //21369 #CJK UNIFIED IDEOGRAPH + {0xF98B, 0x9D8D}, //21370 #CJK UNIFIED IDEOGRAPH + {0xF98C, 0x9D8E}, //21371 #CJK UNIFIED IDEOGRAPH + {0xF98D, 0x9D8F}, //21372 #CJK UNIFIED IDEOGRAPH + {0xF98E, 0x9D90}, //21373 #CJK UNIFIED IDEOGRAPH + {0xF98F, 0x9D91}, //21374 #CJK UNIFIED IDEOGRAPH + {0xF990, 0x9D92}, //21375 #CJK UNIFIED IDEOGRAPH + {0xF991, 0x9D93}, //21376 #CJK UNIFIED IDEOGRAPH + {0xF992, 0x9D94}, //21377 #CJK UNIFIED IDEOGRAPH + {0xF993, 0x9D95}, //21378 #CJK UNIFIED IDEOGRAPH + {0xF994, 0x9D96}, //21379 #CJK UNIFIED IDEOGRAPH + {0xF995, 0x9D97}, //21380 #CJK UNIFIED IDEOGRAPH + {0xF996, 0x9D98}, //21381 #CJK UNIFIED IDEOGRAPH + {0xF997, 0x9D99}, //21382 #CJK UNIFIED IDEOGRAPH + {0xF998, 0x9D9A}, //21383 #CJK UNIFIED IDEOGRAPH + {0xF999, 0x9D9B}, //21384 #CJK UNIFIED IDEOGRAPH + {0xF99A, 0x9D9C}, //21385 #CJK UNIFIED IDEOGRAPH + {0xF99B, 0x9D9D}, //21386 #CJK UNIFIED IDEOGRAPH + {0xF99C, 0x9D9E}, //21387 #CJK UNIFIED IDEOGRAPH + {0xF99D, 0x9D9F}, //21388 #CJK UNIFIED IDEOGRAPH + {0xF99E, 0x9DA0}, //21389 #CJK UNIFIED IDEOGRAPH + {0xF99F, 0x9DA1}, //21390 #CJK UNIFIED IDEOGRAPH + {0xF9A0, 0x9DA2}, //21391 #CJK UNIFIED IDEOGRAPH + {0xFA40, 0x9DA3}, //21392 #CJK UNIFIED IDEOGRAPH + {0xFA41, 0x9DA4}, //21393 #CJK UNIFIED IDEOGRAPH + {0xFA42, 0x9DA5}, //21394 #CJK UNIFIED IDEOGRAPH + {0xFA43, 0x9DA6}, //21395 #CJK UNIFIED IDEOGRAPH + {0xFA44, 0x9DA7}, //21396 #CJK UNIFIED IDEOGRAPH + {0xFA45, 0x9DA8}, //21397 #CJK UNIFIED IDEOGRAPH + {0xFA46, 0x9DA9}, //21398 #CJK UNIFIED IDEOGRAPH + {0xFA47, 0x9DAA}, //21399 #CJK UNIFIED IDEOGRAPH + {0xFA48, 0x9DAB}, //21400 #CJK UNIFIED IDEOGRAPH + {0xFA49, 0x9DAC}, //21401 #CJK UNIFIED IDEOGRAPH + {0xFA4A, 0x9DAD}, //21402 #CJK UNIFIED IDEOGRAPH + {0xFA4B, 0x9DAE}, //21403 #CJK UNIFIED IDEOGRAPH + {0xFA4C, 0x9DAF}, //21404 #CJK UNIFIED IDEOGRAPH + {0xFA4D, 0x9DB0}, //21405 #CJK UNIFIED IDEOGRAPH + {0xFA4E, 0x9DB1}, //21406 #CJK UNIFIED IDEOGRAPH + {0xFA4F, 0x9DB2}, //21407 #CJK UNIFIED IDEOGRAPH + {0xFA50, 0x9DB3}, //21408 #CJK UNIFIED IDEOGRAPH + {0xFA51, 0x9DB4}, //21409 #CJK UNIFIED IDEOGRAPH + {0xFA52, 0x9DB5}, //21410 #CJK UNIFIED IDEOGRAPH + {0xFA53, 0x9DB6}, //21411 #CJK UNIFIED IDEOGRAPH + {0xFA54, 0x9DB7}, //21412 #CJK UNIFIED IDEOGRAPH + {0xFA55, 0x9DB8}, //21413 #CJK UNIFIED IDEOGRAPH + {0xFA56, 0x9DB9}, //21414 #CJK UNIFIED IDEOGRAPH + {0xFA57, 0x9DBA}, //21415 #CJK UNIFIED IDEOGRAPH + {0xFA58, 0x9DBB}, //21416 #CJK UNIFIED IDEOGRAPH + {0xFA59, 0x9DBC}, //21417 #CJK UNIFIED IDEOGRAPH + {0xFA5A, 0x9DBD}, //21418 #CJK UNIFIED IDEOGRAPH + {0xFA5B, 0x9DBE}, //21419 #CJK UNIFIED IDEOGRAPH + {0xFA5C, 0x9DBF}, //21420 #CJK UNIFIED IDEOGRAPH + {0xFA5D, 0x9DC0}, //21421 #CJK UNIFIED IDEOGRAPH + {0xFA5E, 0x9DC1}, //21422 #CJK UNIFIED IDEOGRAPH + {0xFA5F, 0x9DC2}, //21423 #CJK UNIFIED IDEOGRAPH + {0xFA60, 0x9DC3}, //21424 #CJK UNIFIED IDEOGRAPH + {0xFA61, 0x9DC4}, //21425 #CJK UNIFIED IDEOGRAPH + {0xFA62, 0x9DC5}, //21426 #CJK UNIFIED IDEOGRAPH + {0xFA63, 0x9DC6}, //21427 #CJK UNIFIED IDEOGRAPH + {0xFA64, 0x9DC7}, //21428 #CJK UNIFIED IDEOGRAPH + {0xFA65, 0x9DC8}, //21429 #CJK UNIFIED IDEOGRAPH + {0xFA66, 0x9DC9}, //21430 #CJK UNIFIED IDEOGRAPH + {0xFA67, 0x9DCA}, //21431 #CJK UNIFIED IDEOGRAPH + {0xFA68, 0x9DCB}, //21432 #CJK UNIFIED IDEOGRAPH + {0xFA69, 0x9DCC}, //21433 #CJK UNIFIED IDEOGRAPH + {0xFA6A, 0x9DCD}, //21434 #CJK UNIFIED IDEOGRAPH + {0xFA6B, 0x9DCE}, //21435 #CJK UNIFIED IDEOGRAPH + {0xFA6C, 0x9DCF}, //21436 #CJK UNIFIED IDEOGRAPH + {0xFA6D, 0x9DD0}, //21437 #CJK UNIFIED IDEOGRAPH + {0xFA6E, 0x9DD1}, //21438 #CJK UNIFIED IDEOGRAPH + {0xFA6F, 0x9DD2}, //21439 #CJK UNIFIED IDEOGRAPH + {0xFA70, 0x9DD3}, //21440 #CJK UNIFIED IDEOGRAPH + {0xFA71, 0x9DD4}, //21441 #CJK UNIFIED IDEOGRAPH + {0xFA72, 0x9DD5}, //21442 #CJK UNIFIED IDEOGRAPH + {0xFA73, 0x9DD6}, //21443 #CJK UNIFIED IDEOGRAPH + {0xFA74, 0x9DD7}, //21444 #CJK UNIFIED IDEOGRAPH + {0xFA75, 0x9DD8}, //21445 #CJK UNIFIED IDEOGRAPH + {0xFA76, 0x9DD9}, //21446 #CJK UNIFIED IDEOGRAPH + {0xFA77, 0x9DDA}, //21447 #CJK UNIFIED IDEOGRAPH + {0xFA78, 0x9DDB}, //21448 #CJK UNIFIED IDEOGRAPH + {0xFA79, 0x9DDC}, //21449 #CJK UNIFIED IDEOGRAPH + {0xFA7A, 0x9DDD}, //21450 #CJK UNIFIED IDEOGRAPH + {0xFA7B, 0x9DDE}, //21451 #CJK UNIFIED IDEOGRAPH + {0xFA7C, 0x9DDF}, //21452 #CJK UNIFIED IDEOGRAPH + {0xFA7D, 0x9DE0}, //21453 #CJK UNIFIED IDEOGRAPH + {0xFA7E, 0x9DE1}, //21454 #CJK UNIFIED IDEOGRAPH + {0xFA80, 0x9DE2}, //21455 #CJK UNIFIED IDEOGRAPH + {0xFA81, 0x9DE3}, //21456 #CJK UNIFIED IDEOGRAPH + {0xFA82, 0x9DE4}, //21457 #CJK UNIFIED IDEOGRAPH + {0xFA83, 0x9DE5}, //21458 #CJK UNIFIED IDEOGRAPH + {0xFA84, 0x9DE6}, //21459 #CJK UNIFIED IDEOGRAPH + {0xFA85, 0x9DE7}, //21460 #CJK UNIFIED IDEOGRAPH + {0xFA86, 0x9DE8}, //21461 #CJK UNIFIED IDEOGRAPH + {0xFA87, 0x9DE9}, //21462 #CJK UNIFIED IDEOGRAPH + {0xFA88, 0x9DEA}, //21463 #CJK UNIFIED IDEOGRAPH + {0xFA89, 0x9DEB}, //21464 #CJK UNIFIED IDEOGRAPH + {0xFA8A, 0x9DEC}, //21465 #CJK UNIFIED IDEOGRAPH + {0xFA8B, 0x9DED}, //21466 #CJK UNIFIED IDEOGRAPH + {0xFA8C, 0x9DEE}, //21467 #CJK UNIFIED IDEOGRAPH + {0xFA8D, 0x9DEF}, //21468 #CJK UNIFIED IDEOGRAPH + {0xFA8E, 0x9DF0}, //21469 #CJK UNIFIED IDEOGRAPH + {0xFA8F, 0x9DF1}, //21470 #CJK UNIFIED IDEOGRAPH + {0xFA90, 0x9DF2}, //21471 #CJK UNIFIED IDEOGRAPH + {0xFA91, 0x9DF3}, //21472 #CJK UNIFIED IDEOGRAPH + {0xFA92, 0x9DF4}, //21473 #CJK UNIFIED IDEOGRAPH + {0xFA93, 0x9DF5}, //21474 #CJK UNIFIED IDEOGRAPH + {0xFA94, 0x9DF6}, //21475 #CJK UNIFIED IDEOGRAPH + {0xFA95, 0x9DF7}, //21476 #CJK UNIFIED IDEOGRAPH + {0xFA96, 0x9DF8}, //21477 #CJK UNIFIED IDEOGRAPH + {0xFA97, 0x9DF9}, //21478 #CJK UNIFIED IDEOGRAPH + {0xFA98, 0x9DFA}, //21479 #CJK UNIFIED IDEOGRAPH + {0xFA99, 0x9DFB}, //21480 #CJK UNIFIED IDEOGRAPH + {0xFA9A, 0x9DFC}, //21481 #CJK UNIFIED IDEOGRAPH + {0xFA9B, 0x9DFD}, //21482 #CJK UNIFIED IDEOGRAPH + {0xFA9C, 0x9DFE}, //21483 #CJK UNIFIED IDEOGRAPH + {0xFA9D, 0x9DFF}, //21484 #CJK UNIFIED IDEOGRAPH + {0xFA9E, 0x9E00}, //21485 #CJK UNIFIED IDEOGRAPH + {0xFA9F, 0x9E01}, //21486 #CJK UNIFIED IDEOGRAPH + {0xFAA0, 0x9E02}, //21487 #CJK UNIFIED IDEOGRAPH + {0xFB40, 0x9E03}, //21488 #CJK UNIFIED IDEOGRAPH + {0xFB41, 0x9E04}, //21489 #CJK UNIFIED IDEOGRAPH + {0xFB42, 0x9E05}, //21490 #CJK UNIFIED IDEOGRAPH + {0xFB43, 0x9E06}, //21491 #CJK UNIFIED IDEOGRAPH + {0xFB44, 0x9E07}, //21492 #CJK UNIFIED IDEOGRAPH + {0xFB45, 0x9E08}, //21493 #CJK UNIFIED IDEOGRAPH + {0xFB46, 0x9E09}, //21494 #CJK UNIFIED IDEOGRAPH + {0xFB47, 0x9E0A}, //21495 #CJK UNIFIED IDEOGRAPH + {0xFB48, 0x9E0B}, //21496 #CJK UNIFIED IDEOGRAPH + {0xFB49, 0x9E0C}, //21497 #CJK UNIFIED IDEOGRAPH + {0xFB4A, 0x9E0D}, //21498 #CJK UNIFIED IDEOGRAPH + {0xFB4B, 0x9E0E}, //21499 #CJK UNIFIED IDEOGRAPH + {0xFB4C, 0x9E0F}, //21500 #CJK UNIFIED IDEOGRAPH + {0xFB4D, 0x9E10}, //21501 #CJK UNIFIED IDEOGRAPH + {0xFB4E, 0x9E11}, //21502 #CJK UNIFIED IDEOGRAPH + {0xFB4F, 0x9E12}, //21503 #CJK UNIFIED IDEOGRAPH + {0xFB50, 0x9E13}, //21504 #CJK UNIFIED IDEOGRAPH + {0xFB51, 0x9E14}, //21505 #CJK UNIFIED IDEOGRAPH + {0xFB52, 0x9E15}, //21506 #CJK UNIFIED IDEOGRAPH + {0xFB53, 0x9E16}, //21507 #CJK UNIFIED IDEOGRAPH + {0xFB54, 0x9E17}, //21508 #CJK UNIFIED IDEOGRAPH + {0xFB55, 0x9E18}, //21509 #CJK UNIFIED IDEOGRAPH + {0xFB56, 0x9E19}, //21510 #CJK UNIFIED IDEOGRAPH + {0xFB57, 0x9E1A}, //21511 #CJK UNIFIED IDEOGRAPH + {0xFB58, 0x9E1B}, //21512 #CJK UNIFIED IDEOGRAPH + {0xFB59, 0x9E1C}, //21513 #CJK UNIFIED IDEOGRAPH + {0xFB5A, 0x9E1D}, //21514 #CJK UNIFIED IDEOGRAPH + {0xFB5B, 0x9E1E}, //21515 #CJK UNIFIED IDEOGRAPH + {0xFB5C, 0x9E24}, //21516 #CJK UNIFIED IDEOGRAPH + {0xFB5D, 0x9E27}, //21517 #CJK UNIFIED IDEOGRAPH + {0xFB5E, 0x9E2E}, //21518 #CJK UNIFIED IDEOGRAPH + {0xFB5F, 0x9E30}, //21519 #CJK UNIFIED IDEOGRAPH + {0xFB60, 0x9E34}, //21520 #CJK UNIFIED IDEOGRAPH + {0xFB61, 0x9E3B}, //21521 #CJK UNIFIED IDEOGRAPH + {0xFB62, 0x9E3C}, //21522 #CJK UNIFIED IDEOGRAPH + {0xFB63, 0x9E40}, //21523 #CJK UNIFIED IDEOGRAPH + {0xFB64, 0x9E4D}, //21524 #CJK UNIFIED IDEOGRAPH + {0xFB65, 0x9E50}, //21525 #CJK UNIFIED IDEOGRAPH + {0xFB66, 0x9E52}, //21526 #CJK UNIFIED IDEOGRAPH + {0xFB67, 0x9E53}, //21527 #CJK UNIFIED IDEOGRAPH + {0xFB68, 0x9E54}, //21528 #CJK UNIFIED IDEOGRAPH + {0xFB69, 0x9E56}, //21529 #CJK UNIFIED IDEOGRAPH + {0xFB6A, 0x9E59}, //21530 #CJK UNIFIED IDEOGRAPH + {0xFB6B, 0x9E5D}, //21531 #CJK UNIFIED IDEOGRAPH + {0xFB6C, 0x9E5F}, //21532 #CJK UNIFIED IDEOGRAPH + {0xFB6D, 0x9E60}, //21533 #CJK UNIFIED IDEOGRAPH + {0xFB6E, 0x9E61}, //21534 #CJK UNIFIED IDEOGRAPH + {0xFB6F, 0x9E62}, //21535 #CJK UNIFIED IDEOGRAPH + {0xFB70, 0x9E65}, //21536 #CJK UNIFIED IDEOGRAPH + {0xFB71, 0x9E6E}, //21537 #CJK UNIFIED IDEOGRAPH + {0xFB72, 0x9E6F}, //21538 #CJK UNIFIED IDEOGRAPH + {0xFB73, 0x9E72}, //21539 #CJK UNIFIED IDEOGRAPH + {0xFB74, 0x9E74}, //21540 #CJK UNIFIED IDEOGRAPH + {0xFB75, 0x9E75}, //21541 #CJK UNIFIED IDEOGRAPH + {0xFB76, 0x9E76}, //21542 #CJK UNIFIED IDEOGRAPH + {0xFB77, 0x9E77}, //21543 #CJK UNIFIED IDEOGRAPH + {0xFB78, 0x9E78}, //21544 #CJK UNIFIED IDEOGRAPH + {0xFB79, 0x9E79}, //21545 #CJK UNIFIED IDEOGRAPH + {0xFB7A, 0x9E7A}, //21546 #CJK UNIFIED IDEOGRAPH + {0xFB7B, 0x9E7B}, //21547 #CJK UNIFIED IDEOGRAPH + {0xFB7C, 0x9E7C}, //21548 #CJK UNIFIED IDEOGRAPH + {0xFB7D, 0x9E7D}, //21549 #CJK UNIFIED IDEOGRAPH + {0xFB7E, 0x9E80}, //21550 #CJK UNIFIED IDEOGRAPH + {0xFB80, 0x9E81}, //21551 #CJK UNIFIED IDEOGRAPH + {0xFB81, 0x9E83}, //21552 #CJK UNIFIED IDEOGRAPH + {0xFB82, 0x9E84}, //21553 #CJK UNIFIED IDEOGRAPH + {0xFB83, 0x9E85}, //21554 #CJK UNIFIED IDEOGRAPH + {0xFB84, 0x9E86}, //21555 #CJK UNIFIED IDEOGRAPH + {0xFB85, 0x9E89}, //21556 #CJK UNIFIED IDEOGRAPH + {0xFB86, 0x9E8A}, //21557 #CJK UNIFIED IDEOGRAPH + {0xFB87, 0x9E8C}, //21558 #CJK UNIFIED IDEOGRAPH + {0xFB88, 0x9E8D}, //21559 #CJK UNIFIED IDEOGRAPH + {0xFB89, 0x9E8E}, //21560 #CJK UNIFIED IDEOGRAPH + {0xFB8A, 0x9E8F}, //21561 #CJK UNIFIED IDEOGRAPH + {0xFB8B, 0x9E90}, //21562 #CJK UNIFIED IDEOGRAPH + {0xFB8C, 0x9E91}, //21563 #CJK UNIFIED IDEOGRAPH + {0xFB8D, 0x9E94}, //21564 #CJK UNIFIED IDEOGRAPH + {0xFB8E, 0x9E95}, //21565 #CJK UNIFIED IDEOGRAPH + {0xFB8F, 0x9E96}, //21566 #CJK UNIFIED IDEOGRAPH + {0xFB90, 0x9E97}, //21567 #CJK UNIFIED IDEOGRAPH + {0xFB91, 0x9E98}, //21568 #CJK UNIFIED IDEOGRAPH + {0xFB92, 0x9E99}, //21569 #CJK UNIFIED IDEOGRAPH + {0xFB93, 0x9E9A}, //21570 #CJK UNIFIED IDEOGRAPH + {0xFB94, 0x9E9B}, //21571 #CJK UNIFIED IDEOGRAPH + {0xFB95, 0x9E9C}, //21572 #CJK UNIFIED IDEOGRAPH + {0xFB96, 0x9E9E}, //21573 #CJK UNIFIED IDEOGRAPH + {0xFB97, 0x9EA0}, //21574 #CJK UNIFIED IDEOGRAPH + {0xFB98, 0x9EA1}, //21575 #CJK UNIFIED IDEOGRAPH + {0xFB99, 0x9EA2}, //21576 #CJK UNIFIED IDEOGRAPH + {0xFB9A, 0x9EA3}, //21577 #CJK UNIFIED IDEOGRAPH + {0xFB9B, 0x9EA4}, //21578 #CJK UNIFIED IDEOGRAPH + {0xFB9C, 0x9EA5}, //21579 #CJK UNIFIED IDEOGRAPH + {0xFB9D, 0x9EA7}, //21580 #CJK UNIFIED IDEOGRAPH + {0xFB9E, 0x9EA8}, //21581 #CJK UNIFIED IDEOGRAPH + {0xFB9F, 0x9EA9}, //21582 #CJK UNIFIED IDEOGRAPH + {0xFBA0, 0x9EAA}, //21583 #CJK UNIFIED IDEOGRAPH + {0xFC40, 0x9EAB}, //21584 #CJK UNIFIED IDEOGRAPH + {0xFC41, 0x9EAC}, //21585 #CJK UNIFIED IDEOGRAPH + {0xFC42, 0x9EAD}, //21586 #CJK UNIFIED IDEOGRAPH + {0xFC43, 0x9EAE}, //21587 #CJK UNIFIED IDEOGRAPH + {0xFC44, 0x9EAF}, //21588 #CJK UNIFIED IDEOGRAPH + {0xFC45, 0x9EB0}, //21589 #CJK UNIFIED IDEOGRAPH + {0xFC46, 0x9EB1}, //21590 #CJK UNIFIED IDEOGRAPH + {0xFC47, 0x9EB2}, //21591 #CJK UNIFIED IDEOGRAPH + {0xFC48, 0x9EB3}, //21592 #CJK UNIFIED IDEOGRAPH + {0xFC49, 0x9EB5}, //21593 #CJK UNIFIED IDEOGRAPH + {0xFC4A, 0x9EB6}, //21594 #CJK UNIFIED IDEOGRAPH + {0xFC4B, 0x9EB7}, //21595 #CJK UNIFIED IDEOGRAPH + {0xFC4C, 0x9EB9}, //21596 #CJK UNIFIED IDEOGRAPH + {0xFC4D, 0x9EBA}, //21597 #CJK UNIFIED IDEOGRAPH + {0xFC4E, 0x9EBC}, //21598 #CJK UNIFIED IDEOGRAPH + {0xFC4F, 0x9EBF}, //21599 #CJK UNIFIED IDEOGRAPH + {0xFC50, 0x9EC0}, //21600 #CJK UNIFIED IDEOGRAPH + {0xFC51, 0x9EC1}, //21601 #CJK UNIFIED IDEOGRAPH + {0xFC52, 0x9EC2}, //21602 #CJK UNIFIED IDEOGRAPH + {0xFC53, 0x9EC3}, //21603 #CJK UNIFIED IDEOGRAPH + {0xFC54, 0x9EC5}, //21604 #CJK UNIFIED IDEOGRAPH + {0xFC55, 0x9EC6}, //21605 #CJK UNIFIED IDEOGRAPH + {0xFC56, 0x9EC7}, //21606 #CJK UNIFIED IDEOGRAPH + {0xFC57, 0x9EC8}, //21607 #CJK UNIFIED IDEOGRAPH + {0xFC58, 0x9ECA}, //21608 #CJK UNIFIED IDEOGRAPH + {0xFC59, 0x9ECB}, //21609 #CJK UNIFIED IDEOGRAPH + {0xFC5A, 0x9ECC}, //21610 #CJK UNIFIED IDEOGRAPH + {0xFC5B, 0x9ED0}, //21611 #CJK UNIFIED IDEOGRAPH + {0xFC5C, 0x9ED2}, //21612 #CJK UNIFIED IDEOGRAPH + {0xFC5D, 0x9ED3}, //21613 #CJK UNIFIED IDEOGRAPH + {0xFC5E, 0x9ED5}, //21614 #CJK UNIFIED IDEOGRAPH + {0xFC5F, 0x9ED6}, //21615 #CJK UNIFIED IDEOGRAPH + {0xFC60, 0x9ED7}, //21616 #CJK UNIFIED IDEOGRAPH + {0xFC61, 0x9ED9}, //21617 #CJK UNIFIED IDEOGRAPH + {0xFC62, 0x9EDA}, //21618 #CJK UNIFIED IDEOGRAPH + {0xFC63, 0x9EDE}, //21619 #CJK UNIFIED IDEOGRAPH + {0xFC64, 0x9EE1}, //21620 #CJK UNIFIED IDEOGRAPH + {0xFC65, 0x9EE3}, //21621 #CJK UNIFIED IDEOGRAPH + {0xFC66, 0x9EE4}, //21622 #CJK UNIFIED IDEOGRAPH + {0xFC67, 0x9EE6}, //21623 #CJK UNIFIED IDEOGRAPH + {0xFC68, 0x9EE8}, //21624 #CJK UNIFIED IDEOGRAPH + {0xFC69, 0x9EEB}, //21625 #CJK UNIFIED IDEOGRAPH + {0xFC6A, 0x9EEC}, //21626 #CJK UNIFIED IDEOGRAPH + {0xFC6B, 0x9EED}, //21627 #CJK UNIFIED IDEOGRAPH + {0xFC6C, 0x9EEE}, //21628 #CJK UNIFIED IDEOGRAPH + {0xFC6D, 0x9EF0}, //21629 #CJK UNIFIED IDEOGRAPH + {0xFC6E, 0x9EF1}, //21630 #CJK UNIFIED IDEOGRAPH + {0xFC6F, 0x9EF2}, //21631 #CJK UNIFIED IDEOGRAPH + {0xFC70, 0x9EF3}, //21632 #CJK UNIFIED IDEOGRAPH + {0xFC71, 0x9EF4}, //21633 #CJK UNIFIED IDEOGRAPH + {0xFC72, 0x9EF5}, //21634 #CJK UNIFIED IDEOGRAPH + {0xFC73, 0x9EF6}, //21635 #CJK UNIFIED IDEOGRAPH + {0xFC74, 0x9EF7}, //21636 #CJK UNIFIED IDEOGRAPH + {0xFC75, 0x9EF8}, //21637 #CJK UNIFIED IDEOGRAPH + {0xFC76, 0x9EFA}, //21638 #CJK UNIFIED IDEOGRAPH + {0xFC77, 0x9EFD}, //21639 #CJK UNIFIED IDEOGRAPH + {0xFC78, 0x9EFF}, //21640 #CJK UNIFIED IDEOGRAPH + {0xFC79, 0x9F00}, //21641 #CJK UNIFIED IDEOGRAPH + {0xFC7A, 0x9F01}, //21642 #CJK UNIFIED IDEOGRAPH + {0xFC7B, 0x9F02}, //21643 #CJK UNIFIED IDEOGRAPH + {0xFC7C, 0x9F03}, //21644 #CJK UNIFIED IDEOGRAPH + {0xFC7D, 0x9F04}, //21645 #CJK UNIFIED IDEOGRAPH + {0xFC7E, 0x9F05}, //21646 #CJK UNIFIED IDEOGRAPH + {0xFC80, 0x9F06}, //21647 #CJK UNIFIED IDEOGRAPH + {0xFC81, 0x9F07}, //21648 #CJK UNIFIED IDEOGRAPH + {0xFC82, 0x9F08}, //21649 #CJK UNIFIED IDEOGRAPH + {0xFC83, 0x9F09}, //21650 #CJK UNIFIED IDEOGRAPH + {0xFC84, 0x9F0A}, //21651 #CJK UNIFIED IDEOGRAPH + {0xFC85, 0x9F0C}, //21652 #CJK UNIFIED IDEOGRAPH + {0xFC86, 0x9F0F}, //21653 #CJK UNIFIED IDEOGRAPH + {0xFC87, 0x9F11}, //21654 #CJK UNIFIED IDEOGRAPH + {0xFC88, 0x9F12}, //21655 #CJK UNIFIED IDEOGRAPH + {0xFC89, 0x9F14}, //21656 #CJK UNIFIED IDEOGRAPH + {0xFC8A, 0x9F15}, //21657 #CJK UNIFIED IDEOGRAPH + {0xFC8B, 0x9F16}, //21658 #CJK UNIFIED IDEOGRAPH + {0xFC8C, 0x9F18}, //21659 #CJK UNIFIED IDEOGRAPH + {0xFC8D, 0x9F1A}, //21660 #CJK UNIFIED IDEOGRAPH + {0xFC8E, 0x9F1B}, //21661 #CJK UNIFIED IDEOGRAPH + {0xFC8F, 0x9F1C}, //21662 #CJK UNIFIED IDEOGRAPH + {0xFC90, 0x9F1D}, //21663 #CJK UNIFIED IDEOGRAPH + {0xFC91, 0x9F1E}, //21664 #CJK UNIFIED IDEOGRAPH + {0xFC92, 0x9F1F}, //21665 #CJK UNIFIED IDEOGRAPH + {0xFC93, 0x9F21}, //21666 #CJK UNIFIED IDEOGRAPH + {0xFC94, 0x9F23}, //21667 #CJK UNIFIED IDEOGRAPH + {0xFC95, 0x9F24}, //21668 #CJK UNIFIED IDEOGRAPH + {0xFC96, 0x9F25}, //21669 #CJK UNIFIED IDEOGRAPH + {0xFC97, 0x9F26}, //21670 #CJK UNIFIED IDEOGRAPH + {0xFC98, 0x9F27}, //21671 #CJK UNIFIED IDEOGRAPH + {0xFC99, 0x9F28}, //21672 #CJK UNIFIED IDEOGRAPH + {0xFC9A, 0x9F29}, //21673 #CJK UNIFIED IDEOGRAPH + {0xFC9B, 0x9F2A}, //21674 #CJK UNIFIED IDEOGRAPH + {0xFC9C, 0x9F2B}, //21675 #CJK UNIFIED IDEOGRAPH + {0xFC9D, 0x9F2D}, //21676 #CJK UNIFIED IDEOGRAPH + {0xFC9E, 0x9F2E}, //21677 #CJK UNIFIED IDEOGRAPH + {0xFC9F, 0x9F30}, //21678 #CJK UNIFIED IDEOGRAPH + {0xFCA0, 0x9F31}, //21679 #CJK UNIFIED IDEOGRAPH + {0xFD40, 0x9F32}, //21680 #CJK UNIFIED IDEOGRAPH + {0xFD41, 0x9F33}, //21681 #CJK UNIFIED IDEOGRAPH + {0xFD42, 0x9F34}, //21682 #CJK UNIFIED IDEOGRAPH + {0xFD43, 0x9F35}, //21683 #CJK UNIFIED IDEOGRAPH + {0xFD44, 0x9F36}, //21684 #CJK UNIFIED IDEOGRAPH + {0xFD45, 0x9F38}, //21685 #CJK UNIFIED IDEOGRAPH + {0xFD46, 0x9F3A}, //21686 #CJK UNIFIED IDEOGRAPH + {0xFD47, 0x9F3C}, //21687 #CJK UNIFIED IDEOGRAPH + {0xFD48, 0x9F3F}, //21688 #CJK UNIFIED IDEOGRAPH + {0xFD49, 0x9F40}, //21689 #CJK UNIFIED IDEOGRAPH + {0xFD4A, 0x9F41}, //21690 #CJK UNIFIED IDEOGRAPH + {0xFD4B, 0x9F42}, //21691 #CJK UNIFIED IDEOGRAPH + {0xFD4C, 0x9F43}, //21692 #CJK UNIFIED IDEOGRAPH + {0xFD4D, 0x9F45}, //21693 #CJK UNIFIED IDEOGRAPH + {0xFD4E, 0x9F46}, //21694 #CJK UNIFIED IDEOGRAPH + {0xFD4F, 0x9F47}, //21695 #CJK UNIFIED IDEOGRAPH + {0xFD50, 0x9F48}, //21696 #CJK UNIFIED IDEOGRAPH + {0xFD51, 0x9F49}, //21697 #CJK UNIFIED IDEOGRAPH + {0xFD52, 0x9F4A}, //21698 #CJK UNIFIED IDEOGRAPH + {0xFD53, 0x9F4B}, //21699 #CJK UNIFIED IDEOGRAPH + {0xFD54, 0x9F4C}, //21700 #CJK UNIFIED IDEOGRAPH + {0xFD55, 0x9F4D}, //21701 #CJK UNIFIED IDEOGRAPH + {0xFD56, 0x9F4E}, //21702 #CJK UNIFIED IDEOGRAPH + {0xFD57, 0x9F4F}, //21703 #CJK UNIFIED IDEOGRAPH + {0xFD58, 0x9F52}, //21704 #CJK UNIFIED IDEOGRAPH + {0xFD59, 0x9F53}, //21705 #CJK UNIFIED IDEOGRAPH + {0xFD5A, 0x9F54}, //21706 #CJK UNIFIED IDEOGRAPH + {0xFD5B, 0x9F55}, //21707 #CJK UNIFIED IDEOGRAPH + {0xFD5C, 0x9F56}, //21708 #CJK UNIFIED IDEOGRAPH + {0xFD5D, 0x9F57}, //21709 #CJK UNIFIED IDEOGRAPH + {0xFD5E, 0x9F58}, //21710 #CJK UNIFIED IDEOGRAPH + {0xFD5F, 0x9F59}, //21711 #CJK UNIFIED IDEOGRAPH + {0xFD60, 0x9F5A}, //21712 #CJK UNIFIED IDEOGRAPH + {0xFD61, 0x9F5B}, //21713 #CJK UNIFIED IDEOGRAPH + {0xFD62, 0x9F5C}, //21714 #CJK UNIFIED IDEOGRAPH + {0xFD63, 0x9F5D}, //21715 #CJK UNIFIED IDEOGRAPH + {0xFD64, 0x9F5E}, //21716 #CJK UNIFIED IDEOGRAPH + {0xFD65, 0x9F5F}, //21717 #CJK UNIFIED IDEOGRAPH + {0xFD66, 0x9F60}, //21718 #CJK UNIFIED IDEOGRAPH + {0xFD67, 0x9F61}, //21719 #CJK UNIFIED IDEOGRAPH + {0xFD68, 0x9F62}, //21720 #CJK UNIFIED IDEOGRAPH + {0xFD69, 0x9F63}, //21721 #CJK UNIFIED IDEOGRAPH + {0xFD6A, 0x9F64}, //21722 #CJK UNIFIED IDEOGRAPH + {0xFD6B, 0x9F65}, //21723 #CJK UNIFIED IDEOGRAPH + {0xFD6C, 0x9F66}, //21724 #CJK UNIFIED IDEOGRAPH + {0xFD6D, 0x9F67}, //21725 #CJK UNIFIED IDEOGRAPH + {0xFD6E, 0x9F68}, //21726 #CJK UNIFIED IDEOGRAPH + {0xFD6F, 0x9F69}, //21727 #CJK UNIFIED IDEOGRAPH + {0xFD70, 0x9F6A}, //21728 #CJK UNIFIED IDEOGRAPH + {0xFD71, 0x9F6B}, //21729 #CJK UNIFIED IDEOGRAPH + {0xFD72, 0x9F6C}, //21730 #CJK UNIFIED IDEOGRAPH + {0xFD73, 0x9F6D}, //21731 #CJK UNIFIED IDEOGRAPH + {0xFD74, 0x9F6E}, //21732 #CJK UNIFIED IDEOGRAPH + {0xFD75, 0x9F6F}, //21733 #CJK UNIFIED IDEOGRAPH + {0xFD76, 0x9F70}, //21734 #CJK UNIFIED IDEOGRAPH + {0xFD77, 0x9F71}, //21735 #CJK UNIFIED IDEOGRAPH + {0xFD78, 0x9F72}, //21736 #CJK UNIFIED IDEOGRAPH + {0xFD79, 0x9F73}, //21737 #CJK UNIFIED IDEOGRAPH + {0xFD7A, 0x9F74}, //21738 #CJK UNIFIED IDEOGRAPH + {0xFD7B, 0x9F75}, //21739 #CJK UNIFIED IDEOGRAPH + {0xFD7C, 0x9F76}, //21740 #CJK UNIFIED IDEOGRAPH + {0xFD7D, 0x9F77}, //21741 #CJK UNIFIED IDEOGRAPH + {0xFD7E, 0x9F78}, //21742 #CJK UNIFIED IDEOGRAPH + {0xFD80, 0x9F79}, //21743 #CJK UNIFIED IDEOGRAPH + {0xFD81, 0x9F7A}, //21744 #CJK UNIFIED IDEOGRAPH + {0xFD82, 0x9F7B}, //21745 #CJK UNIFIED IDEOGRAPH + {0xFD83, 0x9F7C}, //21746 #CJK UNIFIED IDEOGRAPH + {0xFD84, 0x9F7D}, //21747 #CJK UNIFIED IDEOGRAPH + {0xFD85, 0x9F7E}, //21748 #CJK UNIFIED IDEOGRAPH + {0xFD86, 0x9F81}, //21749 #CJK UNIFIED IDEOGRAPH + {0xFD87, 0x9F82}, //21750 #CJK UNIFIED IDEOGRAPH + {0xFD88, 0x9F8D}, //21751 #CJK UNIFIED IDEOGRAPH + {0xFD89, 0x9F8E}, //21752 #CJK UNIFIED IDEOGRAPH + {0xFD8A, 0x9F8F}, //21753 #CJK UNIFIED IDEOGRAPH + {0xFD8B, 0x9F90}, //21754 #CJK UNIFIED IDEOGRAPH + {0xFD8C, 0x9F91}, //21755 #CJK UNIFIED IDEOGRAPH + {0xFD8D, 0x9F92}, //21756 #CJK UNIFIED IDEOGRAPH + {0xFD8E, 0x9F93}, //21757 #CJK UNIFIED IDEOGRAPH + {0xFD8F, 0x9F94}, //21758 #CJK UNIFIED IDEOGRAPH + {0xFD90, 0x9F95}, //21759 #CJK UNIFIED IDEOGRAPH + {0xFD91, 0x9F96}, //21760 #CJK UNIFIED IDEOGRAPH + {0xFD92, 0x9F97}, //21761 #CJK UNIFIED IDEOGRAPH + {0xFD93, 0x9F98}, //21762 #CJK UNIFIED IDEOGRAPH + {0xFD94, 0x9F9C}, //21763 #CJK UNIFIED IDEOGRAPH + {0xFD95, 0x9F9D}, //21764 #CJK UNIFIED IDEOGRAPH + {0xFD96, 0x9F9E}, //21765 #CJK UNIFIED IDEOGRAPH + {0xFD97, 0x9FA1}, //21766 #CJK UNIFIED IDEOGRAPH + {0xFD98, 0x9FA2}, //21767 #CJK UNIFIED IDEOGRAPH + {0xFD99, 0x9FA3}, //21768 #CJK UNIFIED IDEOGRAPH + {0xFD9A, 0x9FA4}, //21769 #CJK UNIFIED IDEOGRAPH + {0xFD9B, 0x9FA5}, //21770 #CJK UNIFIED IDEOGRAPH + {0xFD9C, 0xF92C}, //21771 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9D, 0xF979}, //21772 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9E, 0xF995}, //21773 #CJK COMPATIBILITY IDEOGRAPH + {0xFD9F, 0xF9E7}, //21774 #CJK COMPATIBILITY IDEOGRAPH + {0xFDA0, 0xF9F1}, //21775 #CJK COMPATIBILITY IDEOGRAPH + {0xFE40, 0xFA0C}, //21776 #CJK COMPATIBILITY IDEOGRAPH + {0xFE41, 0xFA0D}, //21777 #CJK COMPATIBILITY IDEOGRAPH + {0xFE42, 0xFA0E}, //21778 #CJK COMPATIBILITY IDEOGRAPH + {0xFE43, 0xFA0F}, //21779 #CJK COMPATIBILITY IDEOGRAPH + {0xFE44, 0xFA11}, //21780 #CJK COMPATIBILITY IDEOGRAPH + {0xFE45, 0xFA13}, //21781 #CJK COMPATIBILITY IDEOGRAPH + {0xFE46, 0xFA14}, //21782 #CJK COMPATIBILITY IDEOGRAPH + {0xFE47, 0xFA18}, //21783 #CJK COMPATIBILITY IDEOGRAPH + {0xFE48, 0xFA1F}, //21784 #CJK COMPATIBILITY IDEOGRAPH + {0xFE49, 0xFA20}, //21785 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4A, 0xFA21}, //21786 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4B, 0xFA23}, //21787 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4C, 0xFA24}, //21788 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4D, 0xFA27}, //21789 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4E, 0xFA28}, //21790 #CJK COMPATIBILITY IDEOGRAPH + {0xFE4F, 0xFA29} //21791 #CJK COMPATIBILITY IDEOGRAPH +}; + +#endif // DRW_CPTABLE936_H diff --git a/extlib/libdxfrw/intern/drw_cptable949.h b/extlib/libdxfrw/intern/drw_cptable949.h new file mode 100644 index 0000000..3276b60 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable949.h @@ -0,0 +1,17199 @@ +#ifndef DRW_CPTABLE949_H +#define DRW_CPTABLE949_H + +//Korean Extended Wansung + +//first entry in this table are 0x80 +#define CPOFFSET949 0x80 +#define CPLENGHT949 17048 +#define NOTFOUND949 0x003F + +//Table 949 one byte +static const int DRW_Table949[1] = { +}; + +//Table 949 lead byte +//pairs of start/end in DRW_DoubleTable949 +static const int DRW_LeadTable949[] = { + 0, //1#DBCS LEAD BYTE 0x81 + 178, //2#DBCS LEAD BYTE 0x82 + 356, //3#DBCS LEAD BYTE 0x83 + 564, //4#DBCS LEAD BYTE 0x84 + 712, //5#DBCS LEAD BYTE 0x85 + 890, //6#DBCS LEAD BYTE 0x86 + 1068, //7#DBCS LEAD BYTE 0x87 + 1246, //8#DBCS LEAD BYTE 0x88 + 1424, //9#DBCS LEAD BYTE 0x89 + 1602, //10#DBCS LEAD BYTE 0x8A + 1780, //11#DBCS LEAD BYTE 0x8B + 1958, //12#DBCS LEAD BYTE 0x8C + 2136, //13#DBCS LEAD BYTE 0x8D + 2314, //14#DBCS LEAD BYTE 0x8E + 2492, //15#DBCS LEAD BYTE 0x8F + 2670, //16#DBCS LEAD BYTE 0x90 + 2848, //17#DBCS LEAD BYTE 0x91 + 3026, //18#DBCS LEAD BYTE 0x92 + 3204, //19#DBCS LEAD BYTE 0x93 + 3382, //20#DBCS LEAD BYTE 0x94 + 3560, //21#DBCS LEAD BYTE 0x95 + 3738, //22#DBCS LEAD BYTE 0x96 + 3916, //23#DBCS LEAD BYTE 0x97 + 4094, //24#DBCS LEAD BYTE 0x98 + 4272, //25#DBCS LEAD BYTE 0x99 + 4450, //26#DBCS LEAD BYTE 0x9A + 4628, //27#DBCS LEAD BYTE 0x9B + 4806, //28#DBCS LEAD BYTE 0x9C + 4984, //29#DBCS LEAD BYTE 0x9D + 5162, //30#DBCS LEAD BYTE 0x9E + 5340, //31#DBCS LEAD BYTE 0x9F + 5518, //32#DBCS LEAD BYTE 0xA0 + 5696, //33#DBCS LEAD BYTE 0xA1 + 5874, //34#DBCS LEAD BYTE 0xA2 + 6029, //35#DBCS LEAD BYTE 0xA3 + 6207, //36#DBCS LEAD BYTE 0xA4 + 6385, //37#DBCS LEAD BYTE 0xA5 + 6537, //38#DBCS LEAD BYTE 0xA6 + 6689, //39#DBCS LEAD BYTE 0xA7 + 6852, //40#DBCS LEAD BYTE 0xA8 + 7027, //41#DBCS LEAD BYTE 0xA9 + 7205, //42#DBCS LEAD BYTE 0xAA + 7372, //43#DBCS LEAD BYTE 0xAB + 7542, //44#DBCS LEAD BYTE 0xAC + 7692, //45#DBCS LEAD BYTE 0xAD + 7776, //46#DBCS LEAD BYTE 0xAE + 7860, //47#DBCS LEAD BYTE 0xAF + 7944, //48#DBCS LEAD BYTE 0xB0 + 8122, //49#DBCS LEAD BYTE 0xB1 + 8300, //50#DBCS LEAD BYTE 0xB2 + 8478, //51#DBCS LEAD BYTE 0xB3 + 8656, //52#DBCS LEAD BYTE 0xB4 + 8834, //53#DBCS LEAD BYTE 0xB5 + 9012, //54#DBCS LEAD BYTE 0xB6 + 9190, //55#DBCS LEAD BYTE 0xB7 + 9368, //56#DBCS LEAD BYTE 0xB8 + 9546, //57#DBCS LEAD BYTE 0xB9 + 9724, //58#DBCS LEAD BYTE 0xBA + 9902, //59#DBCS LEAD BYTE 0xBB + 10080, //60#DBCS LEAD BYTE 0xBC + 10258, //61#DBCS LEAD BYTE 0xBD + 10436, //62#DBCS LEAD BYTE 0xBE + 10614, //63#DBCS LEAD BYTE 0xBF + 10792, //64#DBCS LEAD BYTE 0xC0 + 10970, //65#DBCS LEAD BYTE 0xC1 + 11148, //66#DBCS LEAD BYTE 0xC2 + 11326, //67#DBCS LEAD BYTE 0xC3 + 11504, //68#DBCS LEAD BYTE 0xC4 + 11682, //69#DBCS LEAD BYTE 0xC5 + 11860, //70#DBCS LEAD BYTE 0xC6 + 11972, //71#DBCS LEAD BYTE 0xC7 + 12066, //72#DBCS LEAD BYTE 0xC8 + 12160, //73#DBCS LEAD BYTE 0xC9, empty + 12160, //74#DBCS LEAD BYTE 0xCA + 12254, //75#DBCS LEAD BYTE 0xCB + 12348, //76#DBCS LEAD BYTE 0xCC + 12442, //77#DBCS LEAD BYTE 0xCD + 12536, //78#DBCS LEAD BYTE 0xCE + 12630, //79#DBCS LEAD BYTE 0xCF + 12724, //80#DBCS LEAD BYTE 0xD0 + 12818, //81#DBCS LEAD BYTE 0xD1 + 12912, //82#DBCS LEAD BYTE 0xD2 + 13006, //83#DBCS LEAD BYTE 0xD3 + 13100, //84#DBCS LEAD BYTE 0xD4 + 13194, //85#DBCS LEAD BYTE 0xD5 + 13288, //86#DBCS LEAD BYTE 0xD6 + 13382, //87#DBCS LEAD BYTE 0xD7 + 13476, //88#DBCS LEAD BYTE 0xD8 + 13570, //89#DBCS LEAD BYTE 0xD9 + 13664, //90#DBCS LEAD BYTE 0xDA + 13758, //91#DBCS LEAD BYTE 0xDB + 13852, //92#DBCS LEAD BYTE 0xDC + 13946, //93#DBCS LEAD BYTE 0xDD + 14040, //94#DBCS LEAD BYTE 0xDE + 14134, //95#DBCS LEAD BYTE 0xDF + 14228, //96#DBCS LEAD BYTE 0xE0 + 14322, //97#DBCS LEAD BYTE 0xE1 + 14416, //98#DBCS LEAD BYTE 0xE2 + 14510, //99#DBCS LEAD BYTE 0xE3 + 14604, //100#DBCS LEAD BYTE 0xE4 + 14698, //101#DBCS LEAD BYTE 0xE5 + 14792, //102#DBCS LEAD BYTE 0xE6 + 14886, //103#DBCS LEAD BYTE 0xE7 + 14980, //104#DBCS LEAD BYTE 0xE8 + 15074, //105#DBCS LEAD BYTE 0xE9 + 15168, //106#DBCS LEAD BYTE 0xEA + 15262, //107#DBCS LEAD BYTE 0xEB + 15356, //108#DBCS LEAD BYTE 0xEC + 15450, //109#DBCS LEAD BYTE 0xED + 15544, //110#DBCS LEAD BYTE 0xEE + 15638, //111#DBCS LEAD BYTE 0xEF + 15732, //112#DBCS LEAD BYTE 0xF0 + 15826, //113#DBCS LEAD BYTE 0xF1 + 15920, //114#DBCS LEAD BYTE 0xF2 + 16014, //115#DBCS LEAD BYTE 0xF3 + 16108, //116#DBCS LEAD BYTE 0xF4 + 16202, //117#DBCS LEAD BYTE 0xF5 + 16296, //118#DBCS LEAD BYTE 0xF6 + 16390, //119#DBCS LEAD BYTE 0xF7 + 16484, //120#DBCS LEAD BYTE 0xF8 + 16578, //121#DBCS LEAD BYTE 0xF9 + 16672, //122#DBCS LEAD BYTE 0xFA + 16766, //123#DBCS LEAD BYTE 0xFB + 16860, //124#DBCS LEAD BYTE 0xFC + 16954, //125#DBCS LEAD BYTE 0xFD + 17047, //126#DBCS LEAD BYTE 0xFE, empty + 17047, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 949 tail byte +static const int DRW_DoubleTable949[][2] = { + {0x8141, 0xAC02}, //1 #HANGUL SYLLABLE KIYEOK A SSANGKIYEOK + {0x8142, 0xAC03}, //2 #HANGUL SYLLABLE KIYEOK A KIYEOKSIOS + {0x8143, 0xAC05}, //3 #HANGUL SYLLABLE KIYEOK A NIEUNCIEUC + {0x8144, 0xAC06}, //4 #HANGUL SYLLABLE KIYEOK A NIEUNHIEUH + {0x8145, 0xAC0B}, //5 #HANGUL SYLLABLE KIYEOK A RIEULPIEUP + {0x8146, 0xAC0C}, //6 #HANGUL SYLLABLE KIYEOK A RIEULSIOS + {0x8147, 0xAC0D}, //7 #HANGUL SYLLABLE KIYEOK A RIEULTHIEUTH + {0x8148, 0xAC0E}, //8 #HANGUL SYLLABLE KIYEOK A RIEULPHIEUPH + {0x8149, 0xAC0F}, //9 #HANGUL SYLLABLE KIYEOK A RIEULHIEUH + {0x814A, 0xAC18}, //10 #HANGUL SYLLABLE KIYEOK A KHIEUKH + {0x814B, 0xAC1E}, //11 #HANGUL SYLLABLE KIYEOK AE SSANGKIYEOK + {0x814C, 0xAC1F}, //12 #HANGUL SYLLABLE KIYEOK AE KIYEOKSIOS + {0x814D, 0xAC21}, //13 #HANGUL SYLLABLE KIYEOK AE NIEUNCIEUC + {0x814E, 0xAC22}, //14 #HANGUL SYLLABLE KIYEOK AE NIEUNHIEUH + {0x814F, 0xAC23}, //15 #HANGUL SYLLABLE KIYEOK AE TIKEUT + {0x8150, 0xAC25}, //16 #HANGUL SYLLABLE KIYEOK AE RIEULKIYEOK + {0x8151, 0xAC26}, //17 #HANGUL SYLLABLE KIYEOK AE RIEULMIEUM + {0x8152, 0xAC27}, //18 #HANGUL SYLLABLE KIYEOK AE RIEULPIEUP + {0x8153, 0xAC28}, //19 #HANGUL SYLLABLE KIYEOK AE RIEULSIOS + {0x8154, 0xAC29}, //20 #HANGUL SYLLABLE KIYEOK AE RIEULTHIEUTH + {0x8155, 0xAC2A}, //21 #HANGUL SYLLABLE KIYEOK AE RIEULPHIEUPH + {0x8156, 0xAC2B}, //22 #HANGUL SYLLABLE KIYEOK AE RIEULHIEUH + {0x8157, 0xAC2E}, //23 #HANGUL SYLLABLE KIYEOK AE PIEUPSIOS + {0x8158, 0xAC32}, //24 #HANGUL SYLLABLE KIYEOK AE CIEUC + {0x8159, 0xAC33}, //25 #HANGUL SYLLABLE KIYEOK AE CHIEUCH + {0x815A, 0xAC34}, //26 #HANGUL SYLLABLE KIYEOK AE KHIEUKH + {0x8161, 0xAC35}, //27 #HANGUL SYLLABLE KIYEOK AE THIEUTH + {0x8162, 0xAC36}, //28 #HANGUL SYLLABLE KIYEOK AE PHIEUPH + {0x8163, 0xAC37}, //29 #HANGUL SYLLABLE KIYEOK AE HIEUH + {0x8164, 0xAC3A}, //30 #HANGUL SYLLABLE KIYEOK YA SSANGKIYEOK + {0x8165, 0xAC3B}, //31 #HANGUL SYLLABLE KIYEOK YA KIYEOKSIOS + {0x8166, 0xAC3D}, //32 #HANGUL SYLLABLE KIYEOK YA NIEUNCIEUC + {0x8167, 0xAC3E}, //33 #HANGUL SYLLABLE KIYEOK YA NIEUNHIEUH + {0x8168, 0xAC3F}, //34 #HANGUL SYLLABLE KIYEOK YA TIKEUT + {0x8169, 0xAC41}, //35 #HANGUL SYLLABLE KIYEOK YA RIEULKIYEOK + {0x816A, 0xAC42}, //36 #HANGUL SYLLABLE KIYEOK YA RIEULMIEUM + {0x816B, 0xAC43}, //37 #HANGUL SYLLABLE KIYEOK YA RIEULPIEUP + {0x816C, 0xAC44}, //38 #HANGUL SYLLABLE KIYEOK YA RIEULSIOS + {0x816D, 0xAC45}, //39 #HANGUL SYLLABLE KIYEOK YA RIEULTHIEUTH + {0x816E, 0xAC46}, //40 #HANGUL SYLLABLE KIYEOK YA RIEULPHIEUPH + {0x816F, 0xAC47}, //41 #HANGUL SYLLABLE KIYEOK YA RIEULHIEUH + {0x8170, 0xAC48}, //42 #HANGUL SYLLABLE KIYEOK YA MIEUM + {0x8171, 0xAC49}, //43 #HANGUL SYLLABLE KIYEOK YA PIEUP + {0x8172, 0xAC4A}, //44 #HANGUL SYLLABLE KIYEOK YA PIEUPSIOS + {0x8173, 0xAC4C}, //45 #HANGUL SYLLABLE KIYEOK YA SSANGSIOS + {0x8174, 0xAC4E}, //46 #HANGUL SYLLABLE KIYEOK YA CIEUC + {0x8175, 0xAC4F}, //47 #HANGUL SYLLABLE KIYEOK YA CHIEUCH + {0x8176, 0xAC50}, //48 #HANGUL SYLLABLE KIYEOK YA KHIEUKH + {0x8177, 0xAC51}, //49 #HANGUL SYLLABLE KIYEOK YA THIEUTH + {0x8178, 0xAC52}, //50 #HANGUL SYLLABLE KIYEOK YA PHIEUPH + {0x8179, 0xAC53}, //51 #HANGUL SYLLABLE KIYEOK YA HIEUH + {0x817A, 0xAC55}, //52 #HANGUL SYLLABLE KIYEOK YAE KIYEOK + {0x8181, 0xAC56}, //53 #HANGUL SYLLABLE KIYEOK YAE SSANGKIYEOK + {0x8182, 0xAC57}, //54 #HANGUL SYLLABLE KIYEOK YAE KIYEOKSIOS + {0x8183, 0xAC59}, //55 #HANGUL SYLLABLE KIYEOK YAE NIEUNCIEUC + {0x8184, 0xAC5A}, //56 #HANGUL SYLLABLE KIYEOK YAE NIEUNHIEUH + {0x8185, 0xAC5B}, //57 #HANGUL SYLLABLE KIYEOK YAE TIKEUT + {0x8186, 0xAC5D}, //58 #HANGUL SYLLABLE KIYEOK YAE RIEULKIYEOK + {0x8187, 0xAC5E}, //59 #HANGUL SYLLABLE KIYEOK YAE RIEULMIEUM + {0x8188, 0xAC5F}, //60 #HANGUL SYLLABLE KIYEOK YAE RIEULPIEUP + {0x8189, 0xAC60}, //61 #HANGUL SYLLABLE KIYEOK YAE RIEULSIOS + {0x818A, 0xAC61}, //62 #HANGUL SYLLABLE KIYEOK YAE RIEULTHIEUTH + {0x818B, 0xAC62}, //63 #HANGUL SYLLABLE KIYEOK YAE RIEULPHIEUPH + {0x818C, 0xAC63}, //64 #HANGUL SYLLABLE KIYEOK YAE RIEULHIEUH + {0x818D, 0xAC64}, //65 #HANGUL SYLLABLE KIYEOK YAE MIEUM + {0x818E, 0xAC65}, //66 #HANGUL SYLLABLE KIYEOK YAE PIEUP + {0x818F, 0xAC66}, //67 #HANGUL SYLLABLE KIYEOK YAE PIEUPSIOS + {0x8190, 0xAC67}, //68 #HANGUL SYLLABLE KIYEOK YAE SIOS + {0x8191, 0xAC68}, //69 #HANGUL SYLLABLE KIYEOK YAE SSANGSIOS + {0x8192, 0xAC69}, //70 #HANGUL SYLLABLE KIYEOK YAE IEUNG + {0x8193, 0xAC6A}, //71 #HANGUL SYLLABLE KIYEOK YAE CIEUC + {0x8194, 0xAC6B}, //72 #HANGUL SYLLABLE KIYEOK YAE CHIEUCH + {0x8195, 0xAC6C}, //73 #HANGUL SYLLABLE KIYEOK YAE KHIEUKH + {0x8196, 0xAC6D}, //74 #HANGUL SYLLABLE KIYEOK YAE THIEUTH + {0x8197, 0xAC6E}, //75 #HANGUL SYLLABLE KIYEOK YAE PHIEUPH + {0x8198, 0xAC6F}, //76 #HANGUL SYLLABLE KIYEOK YAE HIEUH + {0x8199, 0xAC72}, //77 #HANGUL SYLLABLE KIYEOK EO SSANGKIYEOK + {0x819A, 0xAC73}, //78 #HANGUL SYLLABLE KIYEOK EO KIYEOKSIOS + {0x819B, 0xAC75}, //79 #HANGUL SYLLABLE KIYEOK EO NIEUNCIEUC + {0x819C, 0xAC76}, //80 #HANGUL SYLLABLE KIYEOK EO NIEUNHIEUH + {0x819D, 0xAC79}, //81 #HANGUL SYLLABLE KIYEOK EO RIEULKIYEOK + {0x819E, 0xAC7B}, //82 #HANGUL SYLLABLE KIYEOK EO RIEULPIEUP + {0x819F, 0xAC7C}, //83 #HANGUL SYLLABLE KIYEOK EO RIEULSIOS + {0x81A0, 0xAC7D}, //84 #HANGUL SYLLABLE KIYEOK EO RIEULTHIEUTH + {0x81A1, 0xAC7E}, //85 #HANGUL SYLLABLE KIYEOK EO RIEULPHIEUPH + {0x81A2, 0xAC7F}, //86 #HANGUL SYLLABLE KIYEOK EO RIEULHIEUH + {0x81A3, 0xAC82}, //87 #HANGUL SYLLABLE KIYEOK EO PIEUPSIOS + {0x81A4, 0xAC87}, //88 #HANGUL SYLLABLE KIYEOK EO CHIEUCH + {0x81A5, 0xAC88}, //89 #HANGUL SYLLABLE KIYEOK EO KHIEUKH + {0x81A6, 0xAC8D}, //90 #HANGUL SYLLABLE KIYEOK E KIYEOK + {0x81A7, 0xAC8E}, //91 #HANGUL SYLLABLE KIYEOK E SSANGKIYEOK + {0x81A8, 0xAC8F}, //92 #HANGUL SYLLABLE KIYEOK E KIYEOKSIOS + {0x81A9, 0xAC91}, //93 #HANGUL SYLLABLE KIYEOK E NIEUNCIEUC + {0x81AA, 0xAC92}, //94 #HANGUL SYLLABLE KIYEOK E NIEUNHIEUH + {0x81AB, 0xAC93}, //95 #HANGUL SYLLABLE KIYEOK E TIKEUT + {0x81AC, 0xAC95}, //96 #HANGUL SYLLABLE KIYEOK E RIEULKIYEOK + {0x81AD, 0xAC96}, //97 #HANGUL SYLLABLE KIYEOK E RIEULMIEUM + {0x81AE, 0xAC97}, //98 #HANGUL SYLLABLE KIYEOK E RIEULPIEUP + {0x81AF, 0xAC98}, //99 #HANGUL SYLLABLE KIYEOK E RIEULSIOS + {0x81B0, 0xAC99}, //100 #HANGUL SYLLABLE KIYEOK E RIEULTHIEUTH + {0x81B1, 0xAC9A}, //101 #HANGUL SYLLABLE KIYEOK E RIEULPHIEUPH + {0x81B2, 0xAC9B}, //102 #HANGUL SYLLABLE KIYEOK E RIEULHIEUH + {0x81B3, 0xAC9E}, //103 #HANGUL SYLLABLE KIYEOK E PIEUPSIOS + {0x81B4, 0xACA2}, //104 #HANGUL SYLLABLE KIYEOK E CIEUC + {0x81B5, 0xACA3}, //105 #HANGUL SYLLABLE KIYEOK E CHIEUCH + {0x81B6, 0xACA4}, //106 #HANGUL SYLLABLE KIYEOK E KHIEUKH + {0x81B7, 0xACA5}, //107 #HANGUL SYLLABLE KIYEOK E THIEUTH + {0x81B8, 0xACA6}, //108 #HANGUL SYLLABLE KIYEOK E PHIEUPH + {0x81B9, 0xACA7}, //109 #HANGUL SYLLABLE KIYEOK E HIEUH + {0x81BA, 0xACAB}, //110 #HANGUL SYLLABLE KIYEOK YEO KIYEOKSIOS + {0x81BB, 0xACAD}, //111 #HANGUL SYLLABLE KIYEOK YEO NIEUNCIEUC + {0x81BC, 0xACAE}, //112 #HANGUL SYLLABLE KIYEOK YEO NIEUNHIEUH + {0x81BD, 0xACB1}, //113 #HANGUL SYLLABLE KIYEOK YEO RIEULKIYEOK + {0x81BE, 0xACB2}, //114 #HANGUL SYLLABLE KIYEOK YEO RIEULMIEUM + {0x81BF, 0xACB3}, //115 #HANGUL SYLLABLE KIYEOK YEO RIEULPIEUP + {0x81C0, 0xACB4}, //116 #HANGUL SYLLABLE KIYEOK YEO RIEULSIOS + {0x81C1, 0xACB5}, //117 #HANGUL SYLLABLE KIYEOK YEO RIEULTHIEUTH + {0x81C2, 0xACB6}, //118 #HANGUL SYLLABLE KIYEOK YEO RIEULPHIEUPH + {0x81C3, 0xACB7}, //119 #HANGUL SYLLABLE KIYEOK YEO RIEULHIEUH + {0x81C4, 0xACBA}, //120 #HANGUL SYLLABLE KIYEOK YEO PIEUPSIOS + {0x81C5, 0xACBE}, //121 #HANGUL SYLLABLE KIYEOK YEO CIEUC + {0x81C6, 0xACBF}, //122 #HANGUL SYLLABLE KIYEOK YEO CHIEUCH + {0x81C7, 0xACC0}, //123 #HANGUL SYLLABLE KIYEOK YEO KHIEUKH + {0x81C8, 0xACC2}, //124 #HANGUL SYLLABLE KIYEOK YEO PHIEUPH + {0x81C9, 0xACC3}, //125 #HANGUL SYLLABLE KIYEOK YEO HIEUH + {0x81CA, 0xACC5}, //126 #HANGUL SYLLABLE KIYEOK YE KIYEOK + {0x81CB, 0xACC6}, //127 #HANGUL SYLLABLE KIYEOK YE SSANGKIYEOK + {0x81CC, 0xACC7}, //128 #HANGUL SYLLABLE KIYEOK YE KIYEOKSIOS + {0x81CD, 0xACC9}, //129 #HANGUL SYLLABLE KIYEOK YE NIEUNCIEUC + {0x81CE, 0xACCA}, //130 #HANGUL SYLLABLE KIYEOK YE NIEUNHIEUH + {0x81CF, 0xACCB}, //131 #HANGUL SYLLABLE KIYEOK YE TIKEUT + {0x81D0, 0xACCD}, //132 #HANGUL SYLLABLE KIYEOK YE RIEULKIYEOK + {0x81D1, 0xACCE}, //133 #HANGUL SYLLABLE KIYEOK YE RIEULMIEUM + {0x81D2, 0xACCF}, //134 #HANGUL SYLLABLE KIYEOK YE RIEULPIEUP + {0x81D3, 0xACD0}, //135 #HANGUL SYLLABLE KIYEOK YE RIEULSIOS + {0x81D4, 0xACD1}, //136 #HANGUL SYLLABLE KIYEOK YE RIEULTHIEUTH + {0x81D5, 0xACD2}, //137 #HANGUL SYLLABLE KIYEOK YE RIEULPHIEUPH + {0x81D6, 0xACD3}, //138 #HANGUL SYLLABLE KIYEOK YE RIEULHIEUH + {0x81D7, 0xACD4}, //139 #HANGUL SYLLABLE KIYEOK YE MIEUM + {0x81D8, 0xACD6}, //140 #HANGUL SYLLABLE KIYEOK YE PIEUPSIOS + {0x81D9, 0xACD8}, //141 #HANGUL SYLLABLE KIYEOK YE SSANGSIOS + {0x81DA, 0xACD9}, //142 #HANGUL SYLLABLE KIYEOK YE IEUNG + {0x81DB, 0xACDA}, //143 #HANGUL SYLLABLE KIYEOK YE CIEUC + {0x81DC, 0xACDB}, //144 #HANGUL SYLLABLE KIYEOK YE CHIEUCH + {0x81DD, 0xACDC}, //145 #HANGUL SYLLABLE KIYEOK YE KHIEUKH + {0x81DE, 0xACDD}, //146 #HANGUL SYLLABLE KIYEOK YE THIEUTH + {0x81DF, 0xACDE}, //147 #HANGUL SYLLABLE KIYEOK YE PHIEUPH + {0x81E0, 0xACDF}, //148 #HANGUL SYLLABLE KIYEOK YE HIEUH + {0x81E1, 0xACE2}, //149 #HANGUL SYLLABLE KIYEOK O SSANGKIYEOK + {0x81E2, 0xACE3}, //150 #HANGUL SYLLABLE KIYEOK O KIYEOKSIOS + {0x81E3, 0xACE5}, //151 #HANGUL SYLLABLE KIYEOK O NIEUNCIEUC + {0x81E4, 0xACE6}, //152 #HANGUL SYLLABLE KIYEOK O NIEUNHIEUH + {0x81E5, 0xACE9}, //153 #HANGUL SYLLABLE KIYEOK O RIEULKIYEOK + {0x81E6, 0xACEB}, //154 #HANGUL SYLLABLE KIYEOK O RIEULPIEUP + {0x81E7, 0xACED}, //155 #HANGUL SYLLABLE KIYEOK O RIEULTHIEUTH + {0x81E8, 0xACEE}, //156 #HANGUL SYLLABLE KIYEOK O RIEULPHIEUPH + {0x81E9, 0xACF2}, //157 #HANGUL SYLLABLE KIYEOK O PIEUPSIOS + {0x81EA, 0xACF4}, //158 #HANGUL SYLLABLE KIYEOK O SSANGSIOS + {0x81EB, 0xACF7}, //159 #HANGUL SYLLABLE KIYEOK O CHIEUCH + {0x81EC, 0xACF8}, //160 #HANGUL SYLLABLE KIYEOK O KHIEUKH + {0x81ED, 0xACF9}, //161 #HANGUL SYLLABLE KIYEOK O THIEUTH + {0x81EE, 0xACFA}, //162 #HANGUL SYLLABLE KIYEOK O PHIEUPH + {0x81EF, 0xACFB}, //163 #HANGUL SYLLABLE KIYEOK O HIEUH + {0x81F0, 0xACFE}, //164 #HANGUL SYLLABLE KIYEOK WA SSANGKIYEOK + {0x81F1, 0xACFF}, //165 #HANGUL SYLLABLE KIYEOK WA KIYEOKSIOS + {0x81F2, 0xAD01}, //166 #HANGUL SYLLABLE KIYEOK WA NIEUNCIEUC + {0x81F3, 0xAD02}, //167 #HANGUL SYLLABLE KIYEOK WA NIEUNHIEUH + {0x81F4, 0xAD03}, //168 #HANGUL SYLLABLE KIYEOK WA TIKEUT + {0x81F5, 0xAD05}, //169 #HANGUL SYLLABLE KIYEOK WA RIEULKIYEOK + {0x81F6, 0xAD07}, //170 #HANGUL SYLLABLE KIYEOK WA RIEULPIEUP + {0x81F7, 0xAD08}, //171 #HANGUL SYLLABLE KIYEOK WA RIEULSIOS + {0x81F8, 0xAD09}, //172 #HANGUL SYLLABLE KIYEOK WA RIEULTHIEUTH + {0x81F9, 0xAD0A}, //173 #HANGUL SYLLABLE KIYEOK WA RIEULPHIEUPH + {0x81FA, 0xAD0B}, //174 #HANGUL SYLLABLE KIYEOK WA RIEULHIEUH + {0x81FB, 0xAD0E}, //175 #HANGUL SYLLABLE KIYEOK WA PIEUPSIOS + {0x81FC, 0xAD10}, //176 #HANGUL SYLLABLE KIYEOK WA SSANGSIOS + {0x81FD, 0xAD12}, //177 #HANGUL SYLLABLE KIYEOK WA CIEUC + {0x81FE, 0xAD13}, //178 #HANGUL SYLLABLE KIYEOK WA CHIEUCH + {0x8241, 0xAD14}, //179 #HANGUL SYLLABLE KIYEOK WA KHIEUKH + {0x8242, 0xAD15}, //180 #HANGUL SYLLABLE KIYEOK WA THIEUTH + {0x8243, 0xAD16}, //181 #HANGUL SYLLABLE KIYEOK WA PHIEUPH + {0x8244, 0xAD17}, //182 #HANGUL SYLLABLE KIYEOK WA HIEUH + {0x8245, 0xAD19}, //183 #HANGUL SYLLABLE KIYEOK WAE KIYEOK + {0x8246, 0xAD1A}, //184 #HANGUL SYLLABLE KIYEOK WAE SSANGKIYEOK + {0x8247, 0xAD1B}, //185 #HANGUL SYLLABLE KIYEOK WAE KIYEOKSIOS + {0x8248, 0xAD1D}, //186 #HANGUL SYLLABLE KIYEOK WAE NIEUNCIEUC + {0x8249, 0xAD1E}, //187 #HANGUL SYLLABLE KIYEOK WAE NIEUNHIEUH + {0x824A, 0xAD1F}, //188 #HANGUL SYLLABLE KIYEOK WAE TIKEUT + {0x824B, 0xAD21}, //189 #HANGUL SYLLABLE KIYEOK WAE RIEULKIYEOK + {0x824C, 0xAD22}, //190 #HANGUL SYLLABLE KIYEOK WAE RIEULMIEUM + {0x824D, 0xAD23}, //191 #HANGUL SYLLABLE KIYEOK WAE RIEULPIEUP + {0x824E, 0xAD24}, //192 #HANGUL SYLLABLE KIYEOK WAE RIEULSIOS + {0x824F, 0xAD25}, //193 #HANGUL SYLLABLE KIYEOK WAE RIEULTHIEUTH + {0x8250, 0xAD26}, //194 #HANGUL SYLLABLE KIYEOK WAE RIEULPHIEUPH + {0x8251, 0xAD27}, //195 #HANGUL SYLLABLE KIYEOK WAE RIEULHIEUH + {0x8252, 0xAD28}, //196 #HANGUL SYLLABLE KIYEOK WAE MIEUM + {0x8253, 0xAD2A}, //197 #HANGUL SYLLABLE KIYEOK WAE PIEUPSIOS + {0x8254, 0xAD2B}, //198 #HANGUL SYLLABLE KIYEOK WAE SIOS + {0x8255, 0xAD2E}, //199 #HANGUL SYLLABLE KIYEOK WAE CIEUC + {0x8256, 0xAD2F}, //200 #HANGUL SYLLABLE KIYEOK WAE CHIEUCH + {0x8257, 0xAD30}, //201 #HANGUL SYLLABLE KIYEOK WAE KHIEUKH + {0x8258, 0xAD31}, //202 #HANGUL SYLLABLE KIYEOK WAE THIEUTH + {0x8259, 0xAD32}, //203 #HANGUL SYLLABLE KIYEOK WAE PHIEUPH + {0x825A, 0xAD33}, //204 #HANGUL SYLLABLE KIYEOK WAE HIEUH + {0x8261, 0xAD36}, //205 #HANGUL SYLLABLE KIYEOK OE SSANGKIYEOK + {0x8262, 0xAD37}, //206 #HANGUL SYLLABLE KIYEOK OE KIYEOKSIOS + {0x8263, 0xAD39}, //207 #HANGUL SYLLABLE KIYEOK OE NIEUNCIEUC + {0x8264, 0xAD3A}, //208 #HANGUL SYLLABLE KIYEOK OE NIEUNHIEUH + {0x8265, 0xAD3B}, //209 #HANGUL SYLLABLE KIYEOK OE TIKEUT + {0x8266, 0xAD3D}, //210 #HANGUL SYLLABLE KIYEOK OE RIEULKIYEOK + {0x8267, 0xAD3E}, //211 #HANGUL SYLLABLE KIYEOK OE RIEULMIEUM + {0x8268, 0xAD3F}, //212 #HANGUL SYLLABLE KIYEOK OE RIEULPIEUP + {0x8269, 0xAD40}, //213 #HANGUL SYLLABLE KIYEOK OE RIEULSIOS + {0x826A, 0xAD41}, //214 #HANGUL SYLLABLE KIYEOK OE RIEULTHIEUTH + {0x826B, 0xAD42}, //215 #HANGUL SYLLABLE KIYEOK OE RIEULPHIEUPH + {0x826C, 0xAD43}, //216 #HANGUL SYLLABLE KIYEOK OE RIEULHIEUH + {0x826D, 0xAD46}, //217 #HANGUL SYLLABLE KIYEOK OE PIEUPSIOS + {0x826E, 0xAD48}, //218 #HANGUL SYLLABLE KIYEOK OE SSANGSIOS + {0x826F, 0xAD4A}, //219 #HANGUL SYLLABLE KIYEOK OE CIEUC + {0x8270, 0xAD4B}, //220 #HANGUL SYLLABLE KIYEOK OE CHIEUCH + {0x8271, 0xAD4C}, //221 #HANGUL SYLLABLE KIYEOK OE KHIEUKH + {0x8272, 0xAD4D}, //222 #HANGUL SYLLABLE KIYEOK OE THIEUTH + {0x8273, 0xAD4E}, //223 #HANGUL SYLLABLE KIYEOK OE PHIEUPH + {0x8274, 0xAD4F}, //224 #HANGUL SYLLABLE KIYEOK OE HIEUH + {0x8275, 0xAD51}, //225 #HANGUL SYLLABLE KIYEOK YO KIYEOK + {0x8276, 0xAD52}, //226 #HANGUL SYLLABLE KIYEOK YO SSANGKIYEOK + {0x8277, 0xAD53}, //227 #HANGUL SYLLABLE KIYEOK YO KIYEOKSIOS + {0x8278, 0xAD55}, //228 #HANGUL SYLLABLE KIYEOK YO NIEUNCIEUC + {0x8279, 0xAD56}, //229 #HANGUL SYLLABLE KIYEOK YO NIEUNHIEUH + {0x827A, 0xAD57}, //230 #HANGUL SYLLABLE KIYEOK YO TIKEUT + {0x8281, 0xAD59}, //231 #HANGUL SYLLABLE KIYEOK YO RIEULKIYEOK + {0x8282, 0xAD5A}, //232 #HANGUL SYLLABLE KIYEOK YO RIEULMIEUM + {0x8283, 0xAD5B}, //233 #HANGUL SYLLABLE KIYEOK YO RIEULPIEUP + {0x8284, 0xAD5C}, //234 #HANGUL SYLLABLE KIYEOK YO RIEULSIOS + {0x8285, 0xAD5D}, //235 #HANGUL SYLLABLE KIYEOK YO RIEULTHIEUTH + {0x8286, 0xAD5E}, //236 #HANGUL SYLLABLE KIYEOK YO RIEULPHIEUPH + {0x8287, 0xAD5F}, //237 #HANGUL SYLLABLE KIYEOK YO RIEULHIEUH + {0x8288, 0xAD60}, //238 #HANGUL SYLLABLE KIYEOK YO MIEUM + {0x8289, 0xAD62}, //239 #HANGUL SYLLABLE KIYEOK YO PIEUPSIOS + {0x828A, 0xAD64}, //240 #HANGUL SYLLABLE KIYEOK YO SSANGSIOS + {0x828B, 0xAD65}, //241 #HANGUL SYLLABLE KIYEOK YO IEUNG + {0x828C, 0xAD66}, //242 #HANGUL SYLLABLE KIYEOK YO CIEUC + {0x828D, 0xAD67}, //243 #HANGUL SYLLABLE KIYEOK YO CHIEUCH + {0x828E, 0xAD68}, //244 #HANGUL SYLLABLE KIYEOK YO KHIEUKH + {0x828F, 0xAD69}, //245 #HANGUL SYLLABLE KIYEOK YO THIEUTH + {0x8290, 0xAD6A}, //246 #HANGUL SYLLABLE KIYEOK YO PHIEUPH + {0x8291, 0xAD6B}, //247 #HANGUL SYLLABLE KIYEOK YO HIEUH + {0x8292, 0xAD6E}, //248 #HANGUL SYLLABLE KIYEOK U SSANGKIYEOK + {0x8293, 0xAD6F}, //249 #HANGUL SYLLABLE KIYEOK U KIYEOKSIOS + {0x8294, 0xAD71}, //250 #HANGUL SYLLABLE KIYEOK U NIEUNCIEUC + {0x8295, 0xAD72}, //251 #HANGUL SYLLABLE KIYEOK U NIEUNHIEUH + {0x8296, 0xAD77}, //252 #HANGUL SYLLABLE KIYEOK U RIEULPIEUP + {0x8297, 0xAD78}, //253 #HANGUL SYLLABLE KIYEOK U RIEULSIOS + {0x8298, 0xAD79}, //254 #HANGUL SYLLABLE KIYEOK U RIEULTHIEUTH + {0x8299, 0xAD7A}, //255 #HANGUL SYLLABLE KIYEOK U RIEULPHIEUPH + {0x829A, 0xAD7E}, //256 #HANGUL SYLLABLE KIYEOK U PIEUPSIOS + {0x829B, 0xAD80}, //257 #HANGUL SYLLABLE KIYEOK U SSANGSIOS + {0x829C, 0xAD83}, //258 #HANGUL SYLLABLE KIYEOK U CHIEUCH + {0x829D, 0xAD84}, //259 #HANGUL SYLLABLE KIYEOK U KHIEUKH + {0x829E, 0xAD85}, //260 #HANGUL SYLLABLE KIYEOK U THIEUTH + {0x829F, 0xAD86}, //261 #HANGUL SYLLABLE KIYEOK U PHIEUPH + {0x82A0, 0xAD87}, //262 #HANGUL SYLLABLE KIYEOK U HIEUH + {0x82A1, 0xAD8A}, //263 #HANGUL SYLLABLE KIYEOK WEO SSANGKIYEOK + {0x82A2, 0xAD8B}, //264 #HANGUL SYLLABLE KIYEOK WEO KIYEOKSIOS + {0x82A3, 0xAD8D}, //265 #HANGUL SYLLABLE KIYEOK WEO NIEUNCIEUC + {0x82A4, 0xAD8E}, //266 #HANGUL SYLLABLE KIYEOK WEO NIEUNHIEUH + {0x82A5, 0xAD8F}, //267 #HANGUL SYLLABLE KIYEOK WEO TIKEUT + {0x82A6, 0xAD91}, //268 #HANGUL SYLLABLE KIYEOK WEO RIEULKIYEOK + {0x82A7, 0xAD92}, //269 #HANGUL SYLLABLE KIYEOK WEO RIEULMIEUM + {0x82A8, 0xAD93}, //270 #HANGUL SYLLABLE KIYEOK WEO RIEULPIEUP + {0x82A9, 0xAD94}, //271 #HANGUL SYLLABLE KIYEOK WEO RIEULSIOS + {0x82AA, 0xAD95}, //272 #HANGUL SYLLABLE KIYEOK WEO RIEULTHIEUTH + {0x82AB, 0xAD96}, //273 #HANGUL SYLLABLE KIYEOK WEO RIEULPHIEUPH + {0x82AC, 0xAD97}, //274 #HANGUL SYLLABLE KIYEOK WEO RIEULHIEUH + {0x82AD, 0xAD98}, //275 #HANGUL SYLLABLE KIYEOK WEO MIEUM + {0x82AE, 0xAD99}, //276 #HANGUL SYLLABLE KIYEOK WEO PIEUP + {0x82AF, 0xAD9A}, //277 #HANGUL SYLLABLE KIYEOK WEO PIEUPSIOS + {0x82B0, 0xAD9B}, //278 #HANGUL SYLLABLE KIYEOK WEO SIOS + {0x82B1, 0xAD9E}, //279 #HANGUL SYLLABLE KIYEOK WEO CIEUC + {0x82B2, 0xAD9F}, //280 #HANGUL SYLLABLE KIYEOK WEO CHIEUCH + {0x82B3, 0xADA0}, //281 #HANGUL SYLLABLE KIYEOK WEO KHIEUKH + {0x82B4, 0xADA1}, //282 #HANGUL SYLLABLE KIYEOK WEO THIEUTH + {0x82B5, 0xADA2}, //283 #HANGUL SYLLABLE KIYEOK WEO PHIEUPH + {0x82B6, 0xADA3}, //284 #HANGUL SYLLABLE KIYEOK WEO HIEUH + {0x82B7, 0xADA5}, //285 #HANGUL SYLLABLE KIYEOK WE KIYEOK + {0x82B8, 0xADA6}, //286 #HANGUL SYLLABLE KIYEOK WE SSANGKIYEOK + {0x82B9, 0xADA7}, //287 #HANGUL SYLLABLE KIYEOK WE KIYEOKSIOS + {0x82BA, 0xADA8}, //288 #HANGUL SYLLABLE KIYEOK WE NIEUN + {0x82BB, 0xADA9}, //289 #HANGUL SYLLABLE KIYEOK WE NIEUNCIEUC + {0x82BC, 0xADAA}, //290 #HANGUL SYLLABLE KIYEOK WE NIEUNHIEUH + {0x82BD, 0xADAB}, //291 #HANGUL SYLLABLE KIYEOK WE TIKEUT + {0x82BE, 0xADAC}, //292 #HANGUL SYLLABLE KIYEOK WE RIEUL + {0x82BF, 0xADAD}, //293 #HANGUL SYLLABLE KIYEOK WE RIEULKIYEOK + {0x82C0, 0xADAE}, //294 #HANGUL SYLLABLE KIYEOK WE RIEULMIEUM + {0x82C1, 0xADAF}, //295 #HANGUL SYLLABLE KIYEOK WE RIEULPIEUP + {0x82C2, 0xADB0}, //296 #HANGUL SYLLABLE KIYEOK WE RIEULSIOS + {0x82C3, 0xADB1}, //297 #HANGUL SYLLABLE KIYEOK WE RIEULTHIEUTH + {0x82C4, 0xADB2}, //298 #HANGUL SYLLABLE KIYEOK WE RIEULPHIEUPH + {0x82C5, 0xADB3}, //299 #HANGUL SYLLABLE KIYEOK WE RIEULHIEUH + {0x82C6, 0xADB4}, //300 #HANGUL SYLLABLE KIYEOK WE MIEUM + {0x82C7, 0xADB5}, //301 #HANGUL SYLLABLE KIYEOK WE PIEUP + {0x82C8, 0xADB6}, //302 #HANGUL SYLLABLE KIYEOK WE PIEUPSIOS + {0x82C9, 0xADB8}, //303 #HANGUL SYLLABLE KIYEOK WE SSANGSIOS + {0x82CA, 0xADB9}, //304 #HANGUL SYLLABLE KIYEOK WE IEUNG + {0x82CB, 0xADBA}, //305 #HANGUL SYLLABLE KIYEOK WE CIEUC + {0x82CC, 0xADBB}, //306 #HANGUL SYLLABLE KIYEOK WE CHIEUCH + {0x82CD, 0xADBC}, //307 #HANGUL SYLLABLE KIYEOK WE KHIEUKH + {0x82CE, 0xADBD}, //308 #HANGUL SYLLABLE KIYEOK WE THIEUTH + {0x82CF, 0xADBE}, //309 #HANGUL SYLLABLE KIYEOK WE PHIEUPH + {0x82D0, 0xADBF}, //310 #HANGUL SYLLABLE KIYEOK WE HIEUH + {0x82D1, 0xADC2}, //311 #HANGUL SYLLABLE KIYEOK WI SSANGKIYEOK + {0x82D2, 0xADC3}, //312 #HANGUL SYLLABLE KIYEOK WI KIYEOKSIOS + {0x82D3, 0xADC5}, //313 #HANGUL SYLLABLE KIYEOK WI NIEUNCIEUC + {0x82D4, 0xADC6}, //314 #HANGUL SYLLABLE KIYEOK WI NIEUNHIEUH + {0x82D5, 0xADC7}, //315 #HANGUL SYLLABLE KIYEOK WI TIKEUT + {0x82D6, 0xADC9}, //316 #HANGUL SYLLABLE KIYEOK WI RIEULKIYEOK + {0x82D7, 0xADCA}, //317 #HANGUL SYLLABLE KIYEOK WI RIEULMIEUM + {0x82D8, 0xADCB}, //318 #HANGUL SYLLABLE KIYEOK WI RIEULPIEUP + {0x82D9, 0xADCC}, //319 #HANGUL SYLLABLE KIYEOK WI RIEULSIOS + {0x82DA, 0xADCD}, //320 #HANGUL SYLLABLE KIYEOK WI RIEULTHIEUTH + {0x82DB, 0xADCE}, //321 #HANGUL SYLLABLE KIYEOK WI RIEULPHIEUPH + {0x82DC, 0xADCF}, //322 #HANGUL SYLLABLE KIYEOK WI RIEULHIEUH + {0x82DD, 0xADD2}, //323 #HANGUL SYLLABLE KIYEOK WI PIEUPSIOS + {0x82DE, 0xADD4}, //324 #HANGUL SYLLABLE KIYEOK WI SSANGSIOS + {0x82DF, 0xADD5}, //325 #HANGUL SYLLABLE KIYEOK WI IEUNG + {0x82E0, 0xADD6}, //326 #HANGUL SYLLABLE KIYEOK WI CIEUC + {0x82E1, 0xADD7}, //327 #HANGUL SYLLABLE KIYEOK WI CHIEUCH + {0x82E2, 0xADD8}, //328 #HANGUL SYLLABLE KIYEOK WI KHIEUKH + {0x82E3, 0xADD9}, //329 #HANGUL SYLLABLE KIYEOK WI THIEUTH + {0x82E4, 0xADDA}, //330 #HANGUL SYLLABLE KIYEOK WI PHIEUPH + {0x82E5, 0xADDB}, //331 #HANGUL SYLLABLE KIYEOK WI HIEUH + {0x82E6, 0xADDD}, //332 #HANGUL SYLLABLE KIYEOK YU KIYEOK + {0x82E7, 0xADDE}, //333 #HANGUL SYLLABLE KIYEOK YU SSANGKIYEOK + {0x82E8, 0xADDF}, //334 #HANGUL SYLLABLE KIYEOK YU KIYEOKSIOS + {0x82E9, 0xADE1}, //335 #HANGUL SYLLABLE KIYEOK YU NIEUNCIEUC + {0x82EA, 0xADE2}, //336 #HANGUL SYLLABLE KIYEOK YU NIEUNHIEUH + {0x82EB, 0xADE3}, //337 #HANGUL SYLLABLE KIYEOK YU TIKEUT + {0x82EC, 0xADE5}, //338 #HANGUL SYLLABLE KIYEOK YU RIEULKIYEOK + {0x82ED, 0xADE6}, //339 #HANGUL SYLLABLE KIYEOK YU RIEULMIEUM + {0x82EE, 0xADE7}, //340 #HANGUL SYLLABLE KIYEOK YU RIEULPIEUP + {0x82EF, 0xADE8}, //341 #HANGUL SYLLABLE KIYEOK YU RIEULSIOS + {0x82F0, 0xADE9}, //342 #HANGUL SYLLABLE KIYEOK YU RIEULTHIEUTH + {0x82F1, 0xADEA}, //343 #HANGUL SYLLABLE KIYEOK YU RIEULPHIEUPH + {0x82F2, 0xADEB}, //344 #HANGUL SYLLABLE KIYEOK YU RIEULHIEUH + {0x82F3, 0xADEC}, //345 #HANGUL SYLLABLE KIYEOK YU MIEUM + {0x82F4, 0xADED}, //346 #HANGUL SYLLABLE KIYEOK YU PIEUP + {0x82F5, 0xADEE}, //347 #HANGUL SYLLABLE KIYEOK YU PIEUPSIOS + {0x82F6, 0xADEF}, //348 #HANGUL SYLLABLE KIYEOK YU SIOS + {0x82F7, 0xADF0}, //349 #HANGUL SYLLABLE KIYEOK YU SSANGSIOS + {0x82F8, 0xADF1}, //350 #HANGUL SYLLABLE KIYEOK YU IEUNG + {0x82F9, 0xADF2}, //351 #HANGUL SYLLABLE KIYEOK YU CIEUC + {0x82FA, 0xADF3}, //352 #HANGUL SYLLABLE KIYEOK YU CHIEUCH + {0x82FB, 0xADF4}, //353 #HANGUL SYLLABLE KIYEOK YU KHIEUKH + {0x82FC, 0xADF5}, //354 #HANGUL SYLLABLE KIYEOK YU THIEUTH + {0x82FD, 0xADF6}, //355 #HANGUL SYLLABLE KIYEOK YU PHIEUPH + {0x82FE, 0xADF7}, //356 #HANGUL SYLLABLE KIYEOK YU HIEUH + {0x8341, 0xADFA}, //357 #HANGUL SYLLABLE KIYEOK EU SSANGKIYEOK + {0x8342, 0xADFB}, //358 #HANGUL SYLLABLE KIYEOK EU KIYEOKSIOS + {0x8343, 0xADFD}, //359 #HANGUL SYLLABLE KIYEOK EU NIEUNCIEUC + {0x8344, 0xADFE}, //360 #HANGUL SYLLABLE KIYEOK EU NIEUNHIEUH + {0x8345, 0xAE02}, //361 #HANGUL SYLLABLE KIYEOK EU RIEULMIEUM + {0x8346, 0xAE03}, //362 #HANGUL SYLLABLE KIYEOK EU RIEULPIEUP + {0x8347, 0xAE04}, //363 #HANGUL SYLLABLE KIYEOK EU RIEULSIOS + {0x8348, 0xAE05}, //364 #HANGUL SYLLABLE KIYEOK EU RIEULTHIEUTH + {0x8349, 0xAE06}, //365 #HANGUL SYLLABLE KIYEOK EU RIEULPHIEUPH + {0x834A, 0xAE07}, //366 #HANGUL SYLLABLE KIYEOK EU RIEULHIEUH + {0x834B, 0xAE0A}, //367 #HANGUL SYLLABLE KIYEOK EU PIEUPSIOS + {0x834C, 0xAE0C}, //368 #HANGUL SYLLABLE KIYEOK EU SSANGSIOS + {0x834D, 0xAE0E}, //369 #HANGUL SYLLABLE KIYEOK EU CIEUC + {0x834E, 0xAE0F}, //370 #HANGUL SYLLABLE KIYEOK EU CHIEUCH + {0x834F, 0xAE10}, //371 #HANGUL SYLLABLE KIYEOK EU KHIEUKH + {0x8350, 0xAE11}, //372 #HANGUL SYLLABLE KIYEOK EU THIEUTH + {0x8351, 0xAE12}, //373 #HANGUL SYLLABLE KIYEOK EU PHIEUPH + {0x8352, 0xAE13}, //374 #HANGUL SYLLABLE KIYEOK EU HIEUH + {0x8353, 0xAE15}, //375 #HANGUL SYLLABLE KIYEOK YI KIYEOK + {0x8354, 0xAE16}, //376 #HANGUL SYLLABLE KIYEOK YI SSANGKIYEOK + {0x8355, 0xAE17}, //377 #HANGUL SYLLABLE KIYEOK YI KIYEOKSIOS + {0x8356, 0xAE18}, //378 #HANGUL SYLLABLE KIYEOK YI NIEUN + {0x8357, 0xAE19}, //379 #HANGUL SYLLABLE KIYEOK YI NIEUNCIEUC + {0x8358, 0xAE1A}, //380 #HANGUL SYLLABLE KIYEOK YI NIEUNHIEUH + {0x8359, 0xAE1B}, //381 #HANGUL SYLLABLE KIYEOK YI TIKEUT + {0x835A, 0xAE1C}, //382 #HANGUL SYLLABLE KIYEOK YI RIEUL + {0x8361, 0xAE1D}, //383 #HANGUL SYLLABLE KIYEOK YI RIEULKIYEOK + {0x8362, 0xAE1E}, //384 #HANGUL SYLLABLE KIYEOK YI RIEULMIEUM + {0x8363, 0xAE1F}, //385 #HANGUL SYLLABLE KIYEOK YI RIEULPIEUP + {0x8364, 0xAE20}, //386 #HANGUL SYLLABLE KIYEOK YI RIEULSIOS + {0x8365, 0xAE21}, //387 #HANGUL SYLLABLE KIYEOK YI RIEULTHIEUTH + {0x8366, 0xAE22}, //388 #HANGUL SYLLABLE KIYEOK YI RIEULPHIEUPH + {0x8367, 0xAE23}, //389 #HANGUL SYLLABLE KIYEOK YI RIEULHIEUH + {0x8368, 0xAE24}, //390 #HANGUL SYLLABLE KIYEOK YI MIEUM + {0x8369, 0xAE25}, //391 #HANGUL SYLLABLE KIYEOK YI PIEUP + {0x836A, 0xAE26}, //392 #HANGUL SYLLABLE KIYEOK YI PIEUPSIOS + {0x836B, 0xAE27}, //393 #HANGUL SYLLABLE KIYEOK YI SIOS + {0x836C, 0xAE28}, //394 #HANGUL SYLLABLE KIYEOK YI SSANGSIOS + {0x836D, 0xAE29}, //395 #HANGUL SYLLABLE KIYEOK YI IEUNG + {0x836E, 0xAE2A}, //396 #HANGUL SYLLABLE KIYEOK YI CIEUC + {0x836F, 0xAE2B}, //397 #HANGUL SYLLABLE KIYEOK YI CHIEUCH + {0x8370, 0xAE2C}, //398 #HANGUL SYLLABLE KIYEOK YI KHIEUKH + {0x8371, 0xAE2D}, //399 #HANGUL SYLLABLE KIYEOK YI THIEUTH + {0x8372, 0xAE2E}, //400 #HANGUL SYLLABLE KIYEOK YI PHIEUPH + {0x8373, 0xAE2F}, //401 #HANGUL SYLLABLE KIYEOK YI HIEUH + {0x8374, 0xAE32}, //402 #HANGUL SYLLABLE KIYEOK I SSANGKIYEOK + {0x8375, 0xAE33}, //403 #HANGUL SYLLABLE KIYEOK I KIYEOKSIOS + {0x8376, 0xAE35}, //404 #HANGUL SYLLABLE KIYEOK I NIEUNCIEUC + {0x8377, 0xAE36}, //405 #HANGUL SYLLABLE KIYEOK I NIEUNHIEUH + {0x8378, 0xAE39}, //406 #HANGUL SYLLABLE KIYEOK I RIEULKIYEOK + {0x8379, 0xAE3B}, //407 #HANGUL SYLLABLE KIYEOK I RIEULPIEUP + {0x837A, 0xAE3C}, //408 #HANGUL SYLLABLE KIYEOK I RIEULSIOS + {0x8381, 0xAE3D}, //409 #HANGUL SYLLABLE KIYEOK I RIEULTHIEUTH + {0x8382, 0xAE3E}, //410 #HANGUL SYLLABLE KIYEOK I RIEULPHIEUPH + {0x8383, 0xAE3F}, //411 #HANGUL SYLLABLE KIYEOK I RIEULHIEUH + {0x8384, 0xAE42}, //412 #HANGUL SYLLABLE KIYEOK I PIEUPSIOS + {0x8385, 0xAE44}, //413 #HANGUL SYLLABLE KIYEOK I SSANGSIOS + {0x8386, 0xAE47}, //414 #HANGUL SYLLABLE KIYEOK I CHIEUCH + {0x8387, 0xAE48}, //415 #HANGUL SYLLABLE KIYEOK I KHIEUKH + {0x8388, 0xAE49}, //416 #HANGUL SYLLABLE KIYEOK I THIEUTH + {0x8389, 0xAE4B}, //417 #HANGUL SYLLABLE KIYEOK I HIEUH + {0x838A, 0xAE4F}, //418 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOKSIOS + {0x838B, 0xAE51}, //419 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNCIEUC + {0x838C, 0xAE52}, //420 #HANGUL SYLLABLE SSANGKIYEOK A NIEUNHIEUH + {0x838D, 0xAE53}, //421 #HANGUL SYLLABLE SSANGKIYEOK A TIKEUT + {0x838E, 0xAE55}, //422 #HANGUL SYLLABLE SSANGKIYEOK A RIEULKIYEOK + {0x838F, 0xAE57}, //423 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPIEUP + {0x8390, 0xAE58}, //424 #HANGUL SYLLABLE SSANGKIYEOK A RIEULSIOS + {0x8391, 0xAE59}, //425 #HANGUL SYLLABLE SSANGKIYEOK A RIEULTHIEUTH + {0x8392, 0xAE5A}, //426 #HANGUL SYLLABLE SSANGKIYEOK A RIEULPHIEUPH + {0x8393, 0xAE5B}, //427 #HANGUL SYLLABLE SSANGKIYEOK A RIEULHIEUH + {0x8394, 0xAE5E}, //428 #HANGUL SYLLABLE SSANGKIYEOK A PIEUPSIOS + {0x8395, 0xAE62}, //429 #HANGUL SYLLABLE SSANGKIYEOK A CIEUC + {0x8396, 0xAE63}, //430 #HANGUL SYLLABLE SSANGKIYEOK A CHIEUCH + {0x8397, 0xAE64}, //431 #HANGUL SYLLABLE SSANGKIYEOK A KHIEUKH + {0x8398, 0xAE66}, //432 #HANGUL SYLLABLE SSANGKIYEOK A PHIEUPH + {0x8399, 0xAE67}, //433 #HANGUL SYLLABLE SSANGKIYEOK A HIEUH + {0x839A, 0xAE6A}, //434 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGKIYEOK + {0x839B, 0xAE6B}, //435 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOKSIOS + {0x839C, 0xAE6D}, //436 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNCIEUC + {0x839D, 0xAE6E}, //437 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUNHIEUH + {0x839E, 0xAE6F}, //438 #HANGUL SYLLABLE SSANGKIYEOK AE TIKEUT + {0x839F, 0xAE71}, //439 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULKIYEOK + {0x83A0, 0xAE72}, //440 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULMIEUM + {0x83A1, 0xAE73}, //441 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPIEUP + {0x83A2, 0xAE74}, //442 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULSIOS + {0x83A3, 0xAE75}, //443 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULTHIEUTH + {0x83A4, 0xAE76}, //444 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULPHIEUPH + {0x83A5, 0xAE77}, //445 #HANGUL SYLLABLE SSANGKIYEOK AE RIEULHIEUH + {0x83A6, 0xAE7A}, //446 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUPSIOS + {0x83A7, 0xAE7E}, //447 #HANGUL SYLLABLE SSANGKIYEOK AE CIEUC + {0x83A8, 0xAE7F}, //448 #HANGUL SYLLABLE SSANGKIYEOK AE CHIEUCH + {0x83A9, 0xAE80}, //449 #HANGUL SYLLABLE SSANGKIYEOK AE KHIEUKH + {0x83AA, 0xAE81}, //450 #HANGUL SYLLABLE SSANGKIYEOK AE THIEUTH + {0x83AB, 0xAE82}, //451 #HANGUL SYLLABLE SSANGKIYEOK AE PHIEUPH + {0x83AC, 0xAE83}, //452 #HANGUL SYLLABLE SSANGKIYEOK AE HIEUH + {0x83AD, 0xAE86}, //453 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGKIYEOK + {0x83AE, 0xAE87}, //454 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOKSIOS + {0x83AF, 0xAE88}, //455 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUN + {0x83B0, 0xAE89}, //456 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNCIEUC + {0x83B1, 0xAE8A}, //457 #HANGUL SYLLABLE SSANGKIYEOK YA NIEUNHIEUH + {0x83B2, 0xAE8B}, //458 #HANGUL SYLLABLE SSANGKIYEOK YA TIKEUT + {0x83B3, 0xAE8D}, //459 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULKIYEOK + {0x83B4, 0xAE8E}, //460 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULMIEUM + {0x83B5, 0xAE8F}, //461 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPIEUP + {0x83B6, 0xAE90}, //462 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULSIOS + {0x83B7, 0xAE91}, //463 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULTHIEUTH + {0x83B8, 0xAE92}, //464 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULPHIEUPH + {0x83B9, 0xAE93}, //465 #HANGUL SYLLABLE SSANGKIYEOK YA RIEULHIEUH + {0x83BA, 0xAE94}, //466 #HANGUL SYLLABLE SSANGKIYEOK YA MIEUM + {0x83BB, 0xAE95}, //467 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUP + {0x83BC, 0xAE96}, //468 #HANGUL SYLLABLE SSANGKIYEOK YA PIEUPSIOS + {0x83BD, 0xAE97}, //469 #HANGUL SYLLABLE SSANGKIYEOK YA SIOS + {0x83BE, 0xAE98}, //470 #HANGUL SYLLABLE SSANGKIYEOK YA SSANGSIOS + {0x83BF, 0xAE99}, //471 #HANGUL SYLLABLE SSANGKIYEOK YA IEUNG + {0x83C0, 0xAE9A}, //472 #HANGUL SYLLABLE SSANGKIYEOK YA CIEUC + {0x83C1, 0xAE9B}, //473 #HANGUL SYLLABLE SSANGKIYEOK YA CHIEUCH + {0x83C2, 0xAE9C}, //474 #HANGUL SYLLABLE SSANGKIYEOK YA KHIEUKH + {0x83C3, 0xAE9D}, //475 #HANGUL SYLLABLE SSANGKIYEOK YA THIEUTH + {0x83C4, 0xAE9E}, //476 #HANGUL SYLLABLE SSANGKIYEOK YA PHIEUPH + {0x83C5, 0xAE9F}, //477 #HANGUL SYLLABLE SSANGKIYEOK YA HIEUH + {0x83C6, 0xAEA0}, //478 #HANGUL SYLLABLE SSANGKIYEOK YAE + {0x83C7, 0xAEA1}, //479 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOK + {0x83C8, 0xAEA2}, //480 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGKIYEOK + {0x83C9, 0xAEA3}, //481 #HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOKSIOS + {0x83CA, 0xAEA4}, //482 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUN + {0x83CB, 0xAEA5}, //483 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNCIEUC + {0x83CC, 0xAEA6}, //484 #HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNHIEUH + {0x83CD, 0xAEA7}, //485 #HANGUL SYLLABLE SSANGKIYEOK YAE TIKEUT + {0x83CE, 0xAEA8}, //486 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEUL + {0x83CF, 0xAEA9}, //487 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULKIYEOK + {0x83D0, 0xAEAA}, //488 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULMIEUM + {0x83D1, 0xAEAB}, //489 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPIEUP + {0x83D2, 0xAEAC}, //490 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULSIOS + {0x83D3, 0xAEAD}, //491 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULTHIEUTH + {0x83D4, 0xAEAE}, //492 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPHIEUPH + {0x83D5, 0xAEAF}, //493 #HANGUL SYLLABLE SSANGKIYEOK YAE RIEULHIEUH + {0x83D6, 0xAEB0}, //494 #HANGUL SYLLABLE SSANGKIYEOK YAE MIEUM + {0x83D7, 0xAEB1}, //495 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUP + {0x83D8, 0xAEB2}, //496 #HANGUL SYLLABLE SSANGKIYEOK YAE PIEUPSIOS + {0x83D9, 0xAEB3}, //497 #HANGUL SYLLABLE SSANGKIYEOK YAE SIOS + {0x83DA, 0xAEB4}, //498 #HANGUL SYLLABLE SSANGKIYEOK YAE SSANGSIOS + {0x83DB, 0xAEB5}, //499 #HANGUL SYLLABLE SSANGKIYEOK YAE IEUNG + {0x83DC, 0xAEB6}, //500 #HANGUL SYLLABLE SSANGKIYEOK YAE CIEUC + {0x83DD, 0xAEB7}, //501 #HANGUL SYLLABLE SSANGKIYEOK YAE CHIEUCH + {0x83DE, 0xAEB8}, //502 #HANGUL SYLLABLE SSANGKIYEOK YAE KHIEUKH + {0x83DF, 0xAEB9}, //503 #HANGUL SYLLABLE SSANGKIYEOK YAE THIEUTH + {0x83E0, 0xAEBA}, //504 #HANGUL SYLLABLE SSANGKIYEOK YAE PHIEUPH + {0x83E1, 0xAEBB}, //505 #HANGUL SYLLABLE SSANGKIYEOK YAE HIEUH + {0x83E2, 0xAEBF}, //506 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOKSIOS + {0x83E3, 0xAEC1}, //507 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNCIEUC + {0x83E4, 0xAEC2}, //508 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUNHIEUH + {0x83E5, 0xAEC3}, //509 #HANGUL SYLLABLE SSANGKIYEOK EO TIKEUT + {0x83E6, 0xAEC5}, //510 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULKIYEOK + {0x83E7, 0xAEC6}, //511 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULMIEUM + {0x83E8, 0xAEC7}, //512 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPIEUP + {0x83E9, 0xAEC8}, //513 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULSIOS + {0x83EA, 0xAEC9}, //514 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULTHIEUTH + {0x83EB, 0xAECA}, //515 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULPHIEUPH + {0x83EC, 0xAECB}, //516 #HANGUL SYLLABLE SSANGKIYEOK EO RIEULHIEUH + {0x83ED, 0xAECE}, //517 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUPSIOS + {0x83EE, 0xAED2}, //518 #HANGUL SYLLABLE SSANGKIYEOK EO CIEUC + {0x83EF, 0xAED3}, //519 #HANGUL SYLLABLE SSANGKIYEOK EO CHIEUCH + {0x83F0, 0xAED4}, //520 #HANGUL SYLLABLE SSANGKIYEOK EO KHIEUKH + {0x83F1, 0xAED5}, //521 #HANGUL SYLLABLE SSANGKIYEOK EO THIEUTH + {0x83F2, 0xAED6}, //522 #HANGUL SYLLABLE SSANGKIYEOK EO PHIEUPH + {0x83F3, 0xAED7}, //523 #HANGUL SYLLABLE SSANGKIYEOK EO HIEUH + {0x83F4, 0xAEDA}, //524 #HANGUL SYLLABLE SSANGKIYEOK E SSANGKIYEOK + {0x83F5, 0xAEDB}, //525 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOKSIOS + {0x83F6, 0xAEDD}, //526 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNCIEUC + {0x83F7, 0xAEDE}, //527 #HANGUL SYLLABLE SSANGKIYEOK E NIEUNHIEUH + {0x83F8, 0xAEDF}, //528 #HANGUL SYLLABLE SSANGKIYEOK E TIKEUT + {0x83F9, 0xAEE0}, //529 #HANGUL SYLLABLE SSANGKIYEOK E RIEUL + {0x83FA, 0xAEE1}, //530 #HANGUL SYLLABLE SSANGKIYEOK E RIEULKIYEOK + {0x83FB, 0xAEE2}, //531 #HANGUL SYLLABLE SSANGKIYEOK E RIEULMIEUM + {0x83FC, 0xAEE3}, //532 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPIEUP + {0x83FD, 0xAEE4}, //533 #HANGUL SYLLABLE SSANGKIYEOK E RIEULSIOS + {0x83FE, 0xAEE5}, //534 #HANGUL SYLLABLE SSANGKIYEOK E RIEULTHIEUTH + {0x8441, 0xAEE6}, //535 #HANGUL SYLLABLE SSANGKIYEOK E RIEULPHIEUPH + {0x8442, 0xAEE7}, //536 #HANGUL SYLLABLE SSANGKIYEOK E RIEULHIEUH + {0x8443, 0xAEE9}, //537 #HANGUL SYLLABLE SSANGKIYEOK E PIEUP + {0x8444, 0xAEEA}, //538 #HANGUL SYLLABLE SSANGKIYEOK E PIEUPSIOS + {0x8445, 0xAEEC}, //539 #HANGUL SYLLABLE SSANGKIYEOK E SSANGSIOS + {0x8446, 0xAEEE}, //540 #HANGUL SYLLABLE SSANGKIYEOK E CIEUC + {0x8447, 0xAEEF}, //541 #HANGUL SYLLABLE SSANGKIYEOK E CHIEUCH + {0x8448, 0xAEF0}, //542 #HANGUL SYLLABLE SSANGKIYEOK E KHIEUKH + {0x8449, 0xAEF1}, //543 #HANGUL SYLLABLE SSANGKIYEOK E THIEUTH + {0x844A, 0xAEF2}, //544 #HANGUL SYLLABLE SSANGKIYEOK E PHIEUPH + {0x844B, 0xAEF3}, //545 #HANGUL SYLLABLE SSANGKIYEOK E HIEUH + {0x844C, 0xAEF5}, //546 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOK + {0x844D, 0xAEF6}, //547 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGKIYEOK + {0x844E, 0xAEF7}, //548 #HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOKSIOS + {0x844F, 0xAEF9}, //549 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNCIEUC + {0x8450, 0xAEFA}, //550 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNHIEUH + {0x8451, 0xAEFB}, //551 #HANGUL SYLLABLE SSANGKIYEOK YEO TIKEUT + {0x8452, 0xAEFD}, //552 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULKIYEOK + {0x8453, 0xAEFE}, //553 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULMIEUM + {0x8454, 0xAEFF}, //554 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPIEUP + {0x8455, 0xAF00}, //555 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULSIOS + {0x8456, 0xAF01}, //556 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULTHIEUTH + {0x8457, 0xAF02}, //557 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPHIEUPH + {0x8458, 0xAF03}, //558 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEULHIEUH + {0x8459, 0xAF04}, //559 #HANGUL SYLLABLE SSANGKIYEOK YEO MIEUM + {0x845A, 0xAF05}, //560 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUP + {0x8461, 0xAF06}, //561 #HANGUL SYLLABLE SSANGKIYEOK YEO PIEUPSIOS + {0x8462, 0xAF09}, //562 #HANGUL SYLLABLE SSANGKIYEOK YEO IEUNG + {0x8463, 0xAF0A}, //563 #HANGUL SYLLABLE SSANGKIYEOK YEO CIEUC + {0x8464, 0xAF0B}, //564 #HANGUL SYLLABLE SSANGKIYEOK YEO CHIEUCH + {0x8465, 0xAF0C}, //565 #HANGUL SYLLABLE SSANGKIYEOK YEO KHIEUKH + {0x8466, 0xAF0E}, //566 #HANGUL SYLLABLE SSANGKIYEOK YEO PHIEUPH + {0x8467, 0xAF0F}, //567 #HANGUL SYLLABLE SSANGKIYEOK YEO HIEUH + {0x8468, 0xAF11}, //568 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOK + {0x8469, 0xAF12}, //569 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGKIYEOK + {0x846A, 0xAF13}, //570 #HANGUL SYLLABLE SSANGKIYEOK YE KIYEOKSIOS + {0x846B, 0xAF14}, //571 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUN + {0x846C, 0xAF15}, //572 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNCIEUC + {0x846D, 0xAF16}, //573 #HANGUL SYLLABLE SSANGKIYEOK YE NIEUNHIEUH + {0x846E, 0xAF17}, //574 #HANGUL SYLLABLE SSANGKIYEOK YE TIKEUT + {0x846F, 0xAF18}, //575 #HANGUL SYLLABLE SSANGKIYEOK YE RIEUL + {0x8470, 0xAF19}, //576 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULKIYEOK + {0x8471, 0xAF1A}, //577 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULMIEUM + {0x8472, 0xAF1B}, //578 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPIEUP + {0x8473, 0xAF1C}, //579 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULSIOS + {0x8474, 0xAF1D}, //580 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULTHIEUTH + {0x8475, 0xAF1E}, //581 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULPHIEUPH + {0x8476, 0xAF1F}, //582 #HANGUL SYLLABLE SSANGKIYEOK YE RIEULHIEUH + {0x8477, 0xAF20}, //583 #HANGUL SYLLABLE SSANGKIYEOK YE MIEUM + {0x8478, 0xAF21}, //584 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUP + {0x8479, 0xAF22}, //585 #HANGUL SYLLABLE SSANGKIYEOK YE PIEUPSIOS + {0x847A, 0xAF23}, //586 #HANGUL SYLLABLE SSANGKIYEOK YE SIOS + {0x8481, 0xAF24}, //587 #HANGUL SYLLABLE SSANGKIYEOK YE SSANGSIOS + {0x8482, 0xAF25}, //588 #HANGUL SYLLABLE SSANGKIYEOK YE IEUNG + {0x8483, 0xAF26}, //589 #HANGUL SYLLABLE SSANGKIYEOK YE CIEUC + {0x8484, 0xAF27}, //590 #HANGUL SYLLABLE SSANGKIYEOK YE CHIEUCH + {0x8485, 0xAF28}, //591 #HANGUL SYLLABLE SSANGKIYEOK YE KHIEUKH + {0x8486, 0xAF29}, //592 #HANGUL SYLLABLE SSANGKIYEOK YE THIEUTH + {0x8487, 0xAF2A}, //593 #HANGUL SYLLABLE SSANGKIYEOK YE PHIEUPH + {0x8488, 0xAF2B}, //594 #HANGUL SYLLABLE SSANGKIYEOK YE HIEUH + {0x8489, 0xAF2E}, //595 #HANGUL SYLLABLE SSANGKIYEOK O SSANGKIYEOK + {0x848A, 0xAF2F}, //596 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOKSIOS + {0x848B, 0xAF31}, //597 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNCIEUC + {0x848C, 0xAF33}, //598 #HANGUL SYLLABLE SSANGKIYEOK O TIKEUT + {0x848D, 0xAF35}, //599 #HANGUL SYLLABLE SSANGKIYEOK O RIEULKIYEOK + {0x848E, 0xAF36}, //600 #HANGUL SYLLABLE SSANGKIYEOK O RIEULMIEUM + {0x848F, 0xAF37}, //601 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPIEUP + {0x8490, 0xAF38}, //602 #HANGUL SYLLABLE SSANGKIYEOK O RIEULSIOS + {0x8491, 0xAF39}, //603 #HANGUL SYLLABLE SSANGKIYEOK O RIEULTHIEUTH + {0x8492, 0xAF3A}, //604 #HANGUL SYLLABLE SSANGKIYEOK O RIEULPHIEUPH + {0x8493, 0xAF3B}, //605 #HANGUL SYLLABLE SSANGKIYEOK O RIEULHIEUH + {0x8494, 0xAF3E}, //606 #HANGUL SYLLABLE SSANGKIYEOK O PIEUPSIOS + {0x8495, 0xAF40}, //607 #HANGUL SYLLABLE SSANGKIYEOK O SSANGSIOS + {0x8496, 0xAF44}, //608 #HANGUL SYLLABLE SSANGKIYEOK O KHIEUKH + {0x8497, 0xAF45}, //609 #HANGUL SYLLABLE SSANGKIYEOK O THIEUTH + {0x8498, 0xAF46}, //610 #HANGUL SYLLABLE SSANGKIYEOK O PHIEUPH + {0x8499, 0xAF47}, //611 #HANGUL SYLLABLE SSANGKIYEOK O HIEUH + {0x849A, 0xAF4A}, //612 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGKIYEOK + {0x849B, 0xAF4B}, //613 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOKSIOS + {0x849C, 0xAF4C}, //614 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUN + {0x849D, 0xAF4D}, //615 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNCIEUC + {0x849E, 0xAF4E}, //616 #HANGUL SYLLABLE SSANGKIYEOK WA NIEUNHIEUH + {0x849F, 0xAF4F}, //617 #HANGUL SYLLABLE SSANGKIYEOK WA TIKEUT + {0x84A0, 0xAF51}, //618 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULKIYEOK + {0x84A1, 0xAF52}, //619 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULMIEUM + {0x84A2, 0xAF53}, //620 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPIEUP + {0x84A3, 0xAF54}, //621 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULSIOS + {0x84A4, 0xAF55}, //622 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULTHIEUTH + {0x84A5, 0xAF56}, //623 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULPHIEUPH + {0x84A6, 0xAF57}, //624 #HANGUL SYLLABLE SSANGKIYEOK WA RIEULHIEUH + {0x84A7, 0xAF58}, //625 #HANGUL SYLLABLE SSANGKIYEOK WA MIEUM + {0x84A8, 0xAF59}, //626 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUP + {0x84A9, 0xAF5A}, //627 #HANGUL SYLLABLE SSANGKIYEOK WA PIEUPSIOS + {0x84AA, 0xAF5B}, //628 #HANGUL SYLLABLE SSANGKIYEOK WA SIOS + {0x84AB, 0xAF5E}, //629 #HANGUL SYLLABLE SSANGKIYEOK WA CIEUC + {0x84AC, 0xAF5F}, //630 #HANGUL SYLLABLE SSANGKIYEOK WA CHIEUCH + {0x84AD, 0xAF60}, //631 #HANGUL SYLLABLE SSANGKIYEOK WA KHIEUKH + {0x84AE, 0xAF61}, //632 #HANGUL SYLLABLE SSANGKIYEOK WA THIEUTH + {0x84AF, 0xAF62}, //633 #HANGUL SYLLABLE SSANGKIYEOK WA PHIEUPH + {0x84B0, 0xAF63}, //634 #HANGUL SYLLABLE SSANGKIYEOK WA HIEUH + {0x84B1, 0xAF66}, //635 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGKIYEOK + {0x84B2, 0xAF67}, //636 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOKSIOS + {0x84B3, 0xAF68}, //637 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUN + {0x84B4, 0xAF69}, //638 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNCIEUC + {0x84B5, 0xAF6A}, //639 #HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNHIEUH + {0x84B6, 0xAF6B}, //640 #HANGUL SYLLABLE SSANGKIYEOK WAE TIKEUT + {0x84B7, 0xAF6C}, //641 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEUL + {0x84B8, 0xAF6D}, //642 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULKIYEOK + {0x84B9, 0xAF6E}, //643 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULMIEUM + {0x84BA, 0xAF6F}, //644 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPIEUP + {0x84BB, 0xAF70}, //645 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULSIOS + {0x84BC, 0xAF71}, //646 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULTHIEUTH + {0x84BD, 0xAF72}, //647 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPHIEUPH + {0x84BE, 0xAF73}, //648 #HANGUL SYLLABLE SSANGKIYEOK WAE RIEULHIEUH + {0x84BF, 0xAF74}, //649 #HANGUL SYLLABLE SSANGKIYEOK WAE MIEUM + {0x84C0, 0xAF75}, //650 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUP + {0x84C1, 0xAF76}, //651 #HANGUL SYLLABLE SSANGKIYEOK WAE PIEUPSIOS + {0x84C2, 0xAF77}, //652 #HANGUL SYLLABLE SSANGKIYEOK WAE SIOS + {0x84C3, 0xAF78}, //653 #HANGUL SYLLABLE SSANGKIYEOK WAE SSANGSIOS + {0x84C4, 0xAF7A}, //654 #HANGUL SYLLABLE SSANGKIYEOK WAE CIEUC + {0x84C5, 0xAF7B}, //655 #HANGUL SYLLABLE SSANGKIYEOK WAE CHIEUCH + {0x84C6, 0xAF7C}, //656 #HANGUL SYLLABLE SSANGKIYEOK WAE KHIEUKH + {0x84C7, 0xAF7D}, //657 #HANGUL SYLLABLE SSANGKIYEOK WAE THIEUTH + {0x84C8, 0xAF7E}, //658 #HANGUL SYLLABLE SSANGKIYEOK WAE PHIEUPH + {0x84C9, 0xAF7F}, //659 #HANGUL SYLLABLE SSANGKIYEOK WAE HIEUH + {0x84CA, 0xAF81}, //660 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOK + {0x84CB, 0xAF82}, //661 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGKIYEOK + {0x84CC, 0xAF83}, //662 #HANGUL SYLLABLE SSANGKIYEOK OE KIYEOKSIOS + {0x84CD, 0xAF85}, //663 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNCIEUC + {0x84CE, 0xAF86}, //664 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUNHIEUH + {0x84CF, 0xAF87}, //665 #HANGUL SYLLABLE SSANGKIYEOK OE TIKEUT + {0x84D0, 0xAF89}, //666 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULKIYEOK + {0x84D1, 0xAF8A}, //667 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULMIEUM + {0x84D2, 0xAF8B}, //668 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPIEUP + {0x84D3, 0xAF8C}, //669 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULSIOS + {0x84D4, 0xAF8D}, //670 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULTHIEUTH + {0x84D5, 0xAF8E}, //671 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULPHIEUPH + {0x84D6, 0xAF8F}, //672 #HANGUL SYLLABLE SSANGKIYEOK OE RIEULHIEUH + {0x84D7, 0xAF92}, //673 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUPSIOS + {0x84D8, 0xAF93}, //674 #HANGUL SYLLABLE SSANGKIYEOK OE SIOS + {0x84D9, 0xAF94}, //675 #HANGUL SYLLABLE SSANGKIYEOK OE SSANGSIOS + {0x84DA, 0xAF96}, //676 #HANGUL SYLLABLE SSANGKIYEOK OE CIEUC + {0x84DB, 0xAF97}, //677 #HANGUL SYLLABLE SSANGKIYEOK OE CHIEUCH + {0x84DC, 0xAF98}, //678 #HANGUL SYLLABLE SSANGKIYEOK OE KHIEUKH + {0x84DD, 0xAF99}, //679 #HANGUL SYLLABLE SSANGKIYEOK OE THIEUTH + {0x84DE, 0xAF9A}, //680 #HANGUL SYLLABLE SSANGKIYEOK OE PHIEUPH + {0x84DF, 0xAF9B}, //681 #HANGUL SYLLABLE SSANGKIYEOK OE HIEUH + {0x84E0, 0xAF9D}, //682 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOK + {0x84E1, 0xAF9E}, //683 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGKIYEOK + {0x84E2, 0xAF9F}, //684 #HANGUL SYLLABLE SSANGKIYEOK YO KIYEOKSIOS + {0x84E3, 0xAFA0}, //685 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUN + {0x84E4, 0xAFA1}, //686 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNCIEUC + {0x84E5, 0xAFA2}, //687 #HANGUL SYLLABLE SSANGKIYEOK YO NIEUNHIEUH + {0x84E6, 0xAFA3}, //688 #HANGUL SYLLABLE SSANGKIYEOK YO TIKEUT + {0x84E7, 0xAFA4}, //689 #HANGUL SYLLABLE SSANGKIYEOK YO RIEUL + {0x84E8, 0xAFA5}, //690 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULKIYEOK + {0x84E9, 0xAFA6}, //691 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULMIEUM + {0x84EA, 0xAFA7}, //692 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPIEUP + {0x84EB, 0xAFA8}, //693 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULSIOS + {0x84EC, 0xAFA9}, //694 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULTHIEUTH + {0x84ED, 0xAFAA}, //695 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULPHIEUPH + {0x84EE, 0xAFAB}, //696 #HANGUL SYLLABLE SSANGKIYEOK YO RIEULHIEUH + {0x84EF, 0xAFAC}, //697 #HANGUL SYLLABLE SSANGKIYEOK YO MIEUM + {0x84F0, 0xAFAD}, //698 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUP + {0x84F1, 0xAFAE}, //699 #HANGUL SYLLABLE SSANGKIYEOK YO PIEUPSIOS + {0x84F2, 0xAFAF}, //700 #HANGUL SYLLABLE SSANGKIYEOK YO SIOS + {0x84F3, 0xAFB0}, //701 #HANGUL SYLLABLE SSANGKIYEOK YO SSANGSIOS + {0x84F4, 0xAFB1}, //702 #HANGUL SYLLABLE SSANGKIYEOK YO IEUNG + {0x84F5, 0xAFB2}, //703 #HANGUL SYLLABLE SSANGKIYEOK YO CIEUC + {0x84F6, 0xAFB3}, //704 #HANGUL SYLLABLE SSANGKIYEOK YO CHIEUCH + {0x84F7, 0xAFB4}, //705 #HANGUL SYLLABLE SSANGKIYEOK YO KHIEUKH + {0x84F8, 0xAFB5}, //706 #HANGUL SYLLABLE SSANGKIYEOK YO THIEUTH + {0x84F9, 0xAFB6}, //707 #HANGUL SYLLABLE SSANGKIYEOK YO PHIEUPH + {0x84FA, 0xAFB7}, //708 #HANGUL SYLLABLE SSANGKIYEOK YO HIEUH + {0x84FB, 0xAFBA}, //709 #HANGUL SYLLABLE SSANGKIYEOK U SSANGKIYEOK + {0x84FC, 0xAFBB}, //710 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOKSIOS + {0x84FD, 0xAFBD}, //711 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNCIEUC + {0x84FE, 0xAFBE}, //712 #HANGUL SYLLABLE SSANGKIYEOK U NIEUNHIEUH + {0x8541, 0xAFBF}, //713 #HANGUL SYLLABLE SSANGKIYEOK U TIKEUT + {0x8542, 0xAFC1}, //714 #HANGUL SYLLABLE SSANGKIYEOK U RIEULKIYEOK + {0x8543, 0xAFC2}, //715 #HANGUL SYLLABLE SSANGKIYEOK U RIEULMIEUM + {0x8544, 0xAFC3}, //716 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPIEUP + {0x8545, 0xAFC4}, //717 #HANGUL SYLLABLE SSANGKIYEOK U RIEULSIOS + {0x8546, 0xAFC5}, //718 #HANGUL SYLLABLE SSANGKIYEOK U RIEULTHIEUTH + {0x8547, 0xAFC6}, //719 #HANGUL SYLLABLE SSANGKIYEOK U RIEULPHIEUPH + {0x8548, 0xAFCA}, //720 #HANGUL SYLLABLE SSANGKIYEOK U PIEUPSIOS + {0x8549, 0xAFCC}, //721 #HANGUL SYLLABLE SSANGKIYEOK U SSANGSIOS + {0x854A, 0xAFCF}, //722 #HANGUL SYLLABLE SSANGKIYEOK U CHIEUCH + {0x854B, 0xAFD0}, //723 #HANGUL SYLLABLE SSANGKIYEOK U KHIEUKH + {0x854C, 0xAFD1}, //724 #HANGUL SYLLABLE SSANGKIYEOK U THIEUTH + {0x854D, 0xAFD2}, //725 #HANGUL SYLLABLE SSANGKIYEOK U PHIEUPH + {0x854E, 0xAFD3}, //726 #HANGUL SYLLABLE SSANGKIYEOK U HIEUH + {0x854F, 0xAFD5}, //727 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOK + {0x8550, 0xAFD6}, //728 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGKIYEOK + {0x8551, 0xAFD7}, //729 #HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOKSIOS + {0x8552, 0xAFD8}, //730 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUN + {0x8553, 0xAFD9}, //731 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNCIEUC + {0x8554, 0xAFDA}, //732 #HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNHIEUH + {0x8555, 0xAFDB}, //733 #HANGUL SYLLABLE SSANGKIYEOK WEO TIKEUT + {0x8556, 0xAFDD}, //734 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULKIYEOK + {0x8557, 0xAFDE}, //735 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULMIEUM + {0x8558, 0xAFDF}, //736 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPIEUP + {0x8559, 0xAFE0}, //737 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULSIOS + {0x855A, 0xAFE1}, //738 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULTHIEUTH + {0x8561, 0xAFE2}, //739 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPHIEUPH + {0x8562, 0xAFE3}, //740 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEULHIEUH + {0x8563, 0xAFE4}, //741 #HANGUL SYLLABLE SSANGKIYEOK WEO MIEUM + {0x8564, 0xAFE5}, //742 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUP + {0x8565, 0xAFE6}, //743 #HANGUL SYLLABLE SSANGKIYEOK WEO PIEUPSIOS + {0x8566, 0xAFE7}, //744 #HANGUL SYLLABLE SSANGKIYEOK WEO SIOS + {0x8567, 0xAFEA}, //745 #HANGUL SYLLABLE SSANGKIYEOK WEO CIEUC + {0x8568, 0xAFEB}, //746 #HANGUL SYLLABLE SSANGKIYEOK WEO CHIEUCH + {0x8569, 0xAFEC}, //747 #HANGUL SYLLABLE SSANGKIYEOK WEO KHIEUKH + {0x856A, 0xAFED}, //748 #HANGUL SYLLABLE SSANGKIYEOK WEO THIEUTH + {0x856B, 0xAFEE}, //749 #HANGUL SYLLABLE SSANGKIYEOK WEO PHIEUPH + {0x856C, 0xAFEF}, //750 #HANGUL SYLLABLE SSANGKIYEOK WEO HIEUH + {0x856D, 0xAFF2}, //751 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGKIYEOK + {0x856E, 0xAFF3}, //752 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOKSIOS + {0x856F, 0xAFF5}, //753 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNCIEUC + {0x8570, 0xAFF6}, //754 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUNHIEUH + {0x8571, 0xAFF7}, //755 #HANGUL SYLLABLE SSANGKIYEOK WE TIKEUT + {0x8572, 0xAFF9}, //756 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULKIYEOK + {0x8573, 0xAFFA}, //757 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULMIEUM + {0x8574, 0xAFFB}, //758 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPIEUP + {0x8575, 0xAFFC}, //759 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULSIOS + {0x8576, 0xAFFD}, //760 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULTHIEUTH + {0x8577, 0xAFFE}, //761 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULPHIEUPH + {0x8578, 0xAFFF}, //762 #HANGUL SYLLABLE SSANGKIYEOK WE RIEULHIEUH + {0x8579, 0xB002}, //763 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUPSIOS + {0x857A, 0xB003}, //764 #HANGUL SYLLABLE SSANGKIYEOK WE SIOS + {0x8581, 0xB005}, //765 #HANGUL SYLLABLE SSANGKIYEOK WE IEUNG + {0x8582, 0xB006}, //766 #HANGUL SYLLABLE SSANGKIYEOK WE CIEUC + {0x8583, 0xB007}, //767 #HANGUL SYLLABLE SSANGKIYEOK WE CHIEUCH + {0x8584, 0xB008}, //768 #HANGUL SYLLABLE SSANGKIYEOK WE KHIEUKH + {0x8585, 0xB009}, //769 #HANGUL SYLLABLE SSANGKIYEOK WE THIEUTH + {0x8586, 0xB00A}, //770 #HANGUL SYLLABLE SSANGKIYEOK WE PHIEUPH + {0x8587, 0xB00B}, //771 #HANGUL SYLLABLE SSANGKIYEOK WE HIEUH + {0x8588, 0xB00D}, //772 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOK + {0x8589, 0xB00E}, //773 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGKIYEOK + {0x858A, 0xB00F}, //774 #HANGUL SYLLABLE SSANGKIYEOK WI KIYEOKSIOS + {0x858B, 0xB011}, //775 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNCIEUC + {0x858C, 0xB012}, //776 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUNHIEUH + {0x858D, 0xB013}, //777 #HANGUL SYLLABLE SSANGKIYEOK WI TIKEUT + {0x858E, 0xB015}, //778 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULKIYEOK + {0x858F, 0xB016}, //779 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULMIEUM + {0x8590, 0xB017}, //780 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPIEUP + {0x8591, 0xB018}, //781 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULSIOS + {0x8592, 0xB019}, //782 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULTHIEUTH + {0x8593, 0xB01A}, //783 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULPHIEUPH + {0x8594, 0xB01B}, //784 #HANGUL SYLLABLE SSANGKIYEOK WI RIEULHIEUH + {0x8595, 0xB01E}, //785 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUPSIOS + {0x8596, 0xB01F}, //786 #HANGUL SYLLABLE SSANGKIYEOK WI SIOS + {0x8597, 0xB020}, //787 #HANGUL SYLLABLE SSANGKIYEOK WI SSANGSIOS + {0x8598, 0xB021}, //788 #HANGUL SYLLABLE SSANGKIYEOK WI IEUNG + {0x8599, 0xB022}, //789 #HANGUL SYLLABLE SSANGKIYEOK WI CIEUC + {0x859A, 0xB023}, //790 #HANGUL SYLLABLE SSANGKIYEOK WI CHIEUCH + {0x859B, 0xB024}, //791 #HANGUL SYLLABLE SSANGKIYEOK WI KHIEUKH + {0x859C, 0xB025}, //792 #HANGUL SYLLABLE SSANGKIYEOK WI THIEUTH + {0x859D, 0xB026}, //793 #HANGUL SYLLABLE SSANGKIYEOK WI PHIEUPH + {0x859E, 0xB027}, //794 #HANGUL SYLLABLE SSANGKIYEOK WI HIEUH + {0x859F, 0xB029}, //795 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOK + {0x85A0, 0xB02A}, //796 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGKIYEOK + {0x85A1, 0xB02B}, //797 #HANGUL SYLLABLE SSANGKIYEOK YU KIYEOKSIOS + {0x85A2, 0xB02C}, //798 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUN + {0x85A3, 0xB02D}, //799 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNCIEUC + {0x85A4, 0xB02E}, //800 #HANGUL SYLLABLE SSANGKIYEOK YU NIEUNHIEUH + {0x85A5, 0xB02F}, //801 #HANGUL SYLLABLE SSANGKIYEOK YU TIKEUT + {0x85A6, 0xB030}, //802 #HANGUL SYLLABLE SSANGKIYEOK YU RIEUL + {0x85A7, 0xB031}, //803 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULKIYEOK + {0x85A8, 0xB032}, //804 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULMIEUM + {0x85A9, 0xB033}, //805 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPIEUP + {0x85AA, 0xB034}, //806 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULSIOS + {0x85AB, 0xB035}, //807 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULTHIEUTH + {0x85AC, 0xB036}, //808 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULPHIEUPH + {0x85AD, 0xB037}, //809 #HANGUL SYLLABLE SSANGKIYEOK YU RIEULHIEUH + {0x85AE, 0xB038}, //810 #HANGUL SYLLABLE SSANGKIYEOK YU MIEUM + {0x85AF, 0xB039}, //811 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUP + {0x85B0, 0xB03A}, //812 #HANGUL SYLLABLE SSANGKIYEOK YU PIEUPSIOS + {0x85B1, 0xB03B}, //813 #HANGUL SYLLABLE SSANGKIYEOK YU SIOS + {0x85B2, 0xB03C}, //814 #HANGUL SYLLABLE SSANGKIYEOK YU SSANGSIOS + {0x85B3, 0xB03D}, //815 #HANGUL SYLLABLE SSANGKIYEOK YU IEUNG + {0x85B4, 0xB03E}, //816 #HANGUL SYLLABLE SSANGKIYEOK YU CIEUC + {0x85B5, 0xB03F}, //817 #HANGUL SYLLABLE SSANGKIYEOK YU CHIEUCH + {0x85B6, 0xB040}, //818 #HANGUL SYLLABLE SSANGKIYEOK YU KHIEUKH + {0x85B7, 0xB041}, //819 #HANGUL SYLLABLE SSANGKIYEOK YU THIEUTH + {0x85B8, 0xB042}, //820 #HANGUL SYLLABLE SSANGKIYEOK YU PHIEUPH + {0x85B9, 0xB043}, //821 #HANGUL SYLLABLE SSANGKIYEOK YU HIEUH + {0x85BA, 0xB046}, //822 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGKIYEOK + {0x85BB, 0xB047}, //823 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOKSIOS + {0x85BC, 0xB049}, //824 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNCIEUC + {0x85BD, 0xB04B}, //825 #HANGUL SYLLABLE SSANGKIYEOK EU TIKEUT + {0x85BE, 0xB04D}, //826 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULKIYEOK + {0x85BF, 0xB04F}, //827 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPIEUP + {0x85C0, 0xB050}, //828 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULSIOS + {0x85C1, 0xB051}, //829 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULTHIEUTH + {0x85C2, 0xB052}, //830 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULPHIEUPH + {0x85C3, 0xB056}, //831 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUPSIOS + {0x85C4, 0xB058}, //832 #HANGUL SYLLABLE SSANGKIYEOK EU SSANGSIOS + {0x85C5, 0xB05A}, //833 #HANGUL SYLLABLE SSANGKIYEOK EU CIEUC + {0x85C6, 0xB05B}, //834 #HANGUL SYLLABLE SSANGKIYEOK EU CHIEUCH + {0x85C7, 0xB05C}, //835 #HANGUL SYLLABLE SSANGKIYEOK EU KHIEUKH + {0x85C8, 0xB05E}, //836 #HANGUL SYLLABLE SSANGKIYEOK EU PHIEUPH + {0x85C9, 0xB05F}, //837 #HANGUL SYLLABLE SSANGKIYEOK EU HIEUH + {0x85CA, 0xB060}, //838 #HANGUL SYLLABLE SSANGKIYEOK YI + {0x85CB, 0xB061}, //839 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOK + {0x85CC, 0xB062}, //840 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGKIYEOK + {0x85CD, 0xB063}, //841 #HANGUL SYLLABLE SSANGKIYEOK YI KIYEOKSIOS + {0x85CE, 0xB064}, //842 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUN + {0x85CF, 0xB065}, //843 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNCIEUC + {0x85D0, 0xB066}, //844 #HANGUL SYLLABLE SSANGKIYEOK YI NIEUNHIEUH + {0x85D1, 0xB067}, //845 #HANGUL SYLLABLE SSANGKIYEOK YI TIKEUT + {0x85D2, 0xB068}, //846 #HANGUL SYLLABLE SSANGKIYEOK YI RIEUL + {0x85D3, 0xB069}, //847 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULKIYEOK + {0x85D4, 0xB06A}, //848 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULMIEUM + {0x85D5, 0xB06B}, //849 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPIEUP + {0x85D6, 0xB06C}, //850 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULSIOS + {0x85D7, 0xB06D}, //851 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULTHIEUTH + {0x85D8, 0xB06E}, //852 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULPHIEUPH + {0x85D9, 0xB06F}, //853 #HANGUL SYLLABLE SSANGKIYEOK YI RIEULHIEUH + {0x85DA, 0xB070}, //854 #HANGUL SYLLABLE SSANGKIYEOK YI MIEUM + {0x85DB, 0xB071}, //855 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUP + {0x85DC, 0xB072}, //856 #HANGUL SYLLABLE SSANGKIYEOK YI PIEUPSIOS + {0x85DD, 0xB073}, //857 #HANGUL SYLLABLE SSANGKIYEOK YI SIOS + {0x85DE, 0xB074}, //858 #HANGUL SYLLABLE SSANGKIYEOK YI SSANGSIOS + {0x85DF, 0xB075}, //859 #HANGUL SYLLABLE SSANGKIYEOK YI IEUNG + {0x85E0, 0xB076}, //860 #HANGUL SYLLABLE SSANGKIYEOK YI CIEUC + {0x85E1, 0xB077}, //861 #HANGUL SYLLABLE SSANGKIYEOK YI CHIEUCH + {0x85E2, 0xB078}, //862 #HANGUL SYLLABLE SSANGKIYEOK YI KHIEUKH + {0x85E3, 0xB079}, //863 #HANGUL SYLLABLE SSANGKIYEOK YI THIEUTH + {0x85E4, 0xB07A}, //864 #HANGUL SYLLABLE SSANGKIYEOK YI PHIEUPH + {0x85E5, 0xB07B}, //865 #HANGUL SYLLABLE SSANGKIYEOK YI HIEUH + {0x85E6, 0xB07E}, //866 #HANGUL SYLLABLE SSANGKIYEOK I SSANGKIYEOK + {0x85E7, 0xB07F}, //867 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOKSIOS + {0x85E8, 0xB081}, //868 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNCIEUC + {0x85E9, 0xB082}, //869 #HANGUL SYLLABLE SSANGKIYEOK I NIEUNHIEUH + {0x85EA, 0xB083}, //870 #HANGUL SYLLABLE SSANGKIYEOK I TIKEUT + {0x85EB, 0xB085}, //871 #HANGUL SYLLABLE SSANGKIYEOK I RIEULKIYEOK + {0x85EC, 0xB086}, //872 #HANGUL SYLLABLE SSANGKIYEOK I RIEULMIEUM + {0x85ED, 0xB087}, //873 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPIEUP + {0x85EE, 0xB088}, //874 #HANGUL SYLLABLE SSANGKIYEOK I RIEULSIOS + {0x85EF, 0xB089}, //875 #HANGUL SYLLABLE SSANGKIYEOK I RIEULTHIEUTH + {0x85F0, 0xB08A}, //876 #HANGUL SYLLABLE SSANGKIYEOK I RIEULPHIEUPH + {0x85F1, 0xB08B}, //877 #HANGUL SYLLABLE SSANGKIYEOK I RIEULHIEUH + {0x85F2, 0xB08E}, //878 #HANGUL SYLLABLE SSANGKIYEOK I PIEUPSIOS + {0x85F3, 0xB090}, //879 #HANGUL SYLLABLE SSANGKIYEOK I SSANGSIOS + {0x85F4, 0xB092}, //880 #HANGUL SYLLABLE SSANGKIYEOK I CIEUC + {0x85F5, 0xB093}, //881 #HANGUL SYLLABLE SSANGKIYEOK I CHIEUCH + {0x85F6, 0xB094}, //882 #HANGUL SYLLABLE SSANGKIYEOK I KHIEUKH + {0x85F7, 0xB095}, //883 #HANGUL SYLLABLE SSANGKIYEOK I THIEUTH + {0x85F8, 0xB096}, //884 #HANGUL SYLLABLE SSANGKIYEOK I PHIEUPH + {0x85F9, 0xB097}, //885 #HANGUL SYLLABLE SSANGKIYEOK I HIEUH + {0x85FA, 0xB09B}, //886 #HANGUL SYLLABLE NIEUN A KIYEOKSIOS + {0x85FB, 0xB09D}, //887 #HANGUL SYLLABLE NIEUN A NIEUNCIEUC + {0x85FC, 0xB09E}, //888 #HANGUL SYLLABLE NIEUN A NIEUNHIEUH + {0x85FD, 0xB0A3}, //889 #HANGUL SYLLABLE NIEUN A RIEULPIEUP + {0x85FE, 0xB0A4}, //890 #HANGUL SYLLABLE NIEUN A RIEULSIOS + {0x8641, 0xB0A5}, //891 #HANGUL SYLLABLE NIEUN A RIEULTHIEUTH + {0x8642, 0xB0A6}, //892 #HANGUL SYLLABLE NIEUN A RIEULPHIEUPH + {0x8643, 0xB0A7}, //893 #HANGUL SYLLABLE NIEUN A RIEULHIEUH + {0x8644, 0xB0AA}, //894 #HANGUL SYLLABLE NIEUN A PIEUPSIOS + {0x8645, 0xB0B0}, //895 #HANGUL SYLLABLE NIEUN A KHIEUKH + {0x8646, 0xB0B2}, //896 #HANGUL SYLLABLE NIEUN A PHIEUPH + {0x8647, 0xB0B6}, //897 #HANGUL SYLLABLE NIEUN AE SSANGKIYEOK + {0x8648, 0xB0B7}, //898 #HANGUL SYLLABLE NIEUN AE KIYEOKSIOS + {0x8649, 0xB0B9}, //899 #HANGUL SYLLABLE NIEUN AE NIEUNCIEUC + {0x864A, 0xB0BA}, //900 #HANGUL SYLLABLE NIEUN AE NIEUNHIEUH + {0x864B, 0xB0BB}, //901 #HANGUL SYLLABLE NIEUN AE TIKEUT + {0x864C, 0xB0BD}, //902 #HANGUL SYLLABLE NIEUN AE RIEULKIYEOK + {0x864D, 0xB0BE}, //903 #HANGUL SYLLABLE NIEUN AE RIEULMIEUM + {0x864E, 0xB0BF}, //904 #HANGUL SYLLABLE NIEUN AE RIEULPIEUP + {0x864F, 0xB0C0}, //905 #HANGUL SYLLABLE NIEUN AE RIEULSIOS + {0x8650, 0xB0C1}, //906 #HANGUL SYLLABLE NIEUN AE RIEULTHIEUTH + {0x8651, 0xB0C2}, //907 #HANGUL SYLLABLE NIEUN AE RIEULPHIEUPH + {0x8652, 0xB0C3}, //908 #HANGUL SYLLABLE NIEUN AE RIEULHIEUH + {0x8653, 0xB0C6}, //909 #HANGUL SYLLABLE NIEUN AE PIEUPSIOS + {0x8654, 0xB0CA}, //910 #HANGUL SYLLABLE NIEUN AE CIEUC + {0x8655, 0xB0CB}, //911 #HANGUL SYLLABLE NIEUN AE CHIEUCH + {0x8656, 0xB0CC}, //912 #HANGUL SYLLABLE NIEUN AE KHIEUKH + {0x8657, 0xB0CD}, //913 #HANGUL SYLLABLE NIEUN AE THIEUTH + {0x8658, 0xB0CE}, //914 #HANGUL SYLLABLE NIEUN AE PHIEUPH + {0x8659, 0xB0CF}, //915 #HANGUL SYLLABLE NIEUN AE HIEUH + {0x865A, 0xB0D2}, //916 #HANGUL SYLLABLE NIEUN YA SSANGKIYEOK + {0x8661, 0xB0D3}, //917 #HANGUL SYLLABLE NIEUN YA KIYEOKSIOS + {0x8662, 0xB0D5}, //918 #HANGUL SYLLABLE NIEUN YA NIEUNCIEUC + {0x8663, 0xB0D6}, //919 #HANGUL SYLLABLE NIEUN YA NIEUNHIEUH + {0x8664, 0xB0D7}, //920 #HANGUL SYLLABLE NIEUN YA TIKEUT + {0x8665, 0xB0D9}, //921 #HANGUL SYLLABLE NIEUN YA RIEULKIYEOK + {0x8666, 0xB0DA}, //922 #HANGUL SYLLABLE NIEUN YA RIEULMIEUM + {0x8667, 0xB0DB}, //923 #HANGUL SYLLABLE NIEUN YA RIEULPIEUP + {0x8668, 0xB0DC}, //924 #HANGUL SYLLABLE NIEUN YA RIEULSIOS + {0x8669, 0xB0DD}, //925 #HANGUL SYLLABLE NIEUN YA RIEULTHIEUTH + {0x866A, 0xB0DE}, //926 #HANGUL SYLLABLE NIEUN YA RIEULPHIEUPH + {0x866B, 0xB0DF}, //927 #HANGUL SYLLABLE NIEUN YA RIEULHIEUH + {0x866C, 0xB0E1}, //928 #HANGUL SYLLABLE NIEUN YA PIEUP + {0x866D, 0xB0E2}, //929 #HANGUL SYLLABLE NIEUN YA PIEUPSIOS + {0x866E, 0xB0E3}, //930 #HANGUL SYLLABLE NIEUN YA SIOS + {0x866F, 0xB0E4}, //931 #HANGUL SYLLABLE NIEUN YA SSANGSIOS + {0x8670, 0xB0E6}, //932 #HANGUL SYLLABLE NIEUN YA CIEUC + {0x8671, 0xB0E7}, //933 #HANGUL SYLLABLE NIEUN YA CHIEUCH + {0x8672, 0xB0E8}, //934 #HANGUL SYLLABLE NIEUN YA KHIEUKH + {0x8673, 0xB0E9}, //935 #HANGUL SYLLABLE NIEUN YA THIEUTH + {0x8674, 0xB0EA}, //936 #HANGUL SYLLABLE NIEUN YA PHIEUPH + {0x8675, 0xB0EB}, //937 #HANGUL SYLLABLE NIEUN YA HIEUH + {0x8676, 0xB0EC}, //938 #HANGUL SYLLABLE NIEUN YAE + {0x8677, 0xB0ED}, //939 #HANGUL SYLLABLE NIEUN YAE KIYEOK + {0x8678, 0xB0EE}, //940 #HANGUL SYLLABLE NIEUN YAE SSANGKIYEOK + {0x8679, 0xB0EF}, //941 #HANGUL SYLLABLE NIEUN YAE KIYEOKSIOS + {0x867A, 0xB0F0}, //942 #HANGUL SYLLABLE NIEUN YAE NIEUN + {0x8681, 0xB0F1}, //943 #HANGUL SYLLABLE NIEUN YAE NIEUNCIEUC + {0x8682, 0xB0F2}, //944 #HANGUL SYLLABLE NIEUN YAE NIEUNHIEUH + {0x8683, 0xB0F3}, //945 #HANGUL SYLLABLE NIEUN YAE TIKEUT + {0x8684, 0xB0F4}, //946 #HANGUL SYLLABLE NIEUN YAE RIEUL + {0x8685, 0xB0F5}, //947 #HANGUL SYLLABLE NIEUN YAE RIEULKIYEOK + {0x8686, 0xB0F6}, //948 #HANGUL SYLLABLE NIEUN YAE RIEULMIEUM + {0x8687, 0xB0F7}, //949 #HANGUL SYLLABLE NIEUN YAE RIEULPIEUP + {0x8688, 0xB0F8}, //950 #HANGUL SYLLABLE NIEUN YAE RIEULSIOS + {0x8689, 0xB0F9}, //951 #HANGUL SYLLABLE NIEUN YAE RIEULTHIEUTH + {0x868A, 0xB0FA}, //952 #HANGUL SYLLABLE NIEUN YAE RIEULPHIEUPH + {0x868B, 0xB0FB}, //953 #HANGUL SYLLABLE NIEUN YAE RIEULHIEUH + {0x868C, 0xB0FC}, //954 #HANGUL SYLLABLE NIEUN YAE MIEUM + {0x868D, 0xB0FD}, //955 #HANGUL SYLLABLE NIEUN YAE PIEUP + {0x868E, 0xB0FE}, //956 #HANGUL SYLLABLE NIEUN YAE PIEUPSIOS + {0x868F, 0xB0FF}, //957 #HANGUL SYLLABLE NIEUN YAE SIOS + {0x8690, 0xB100}, //958 #HANGUL SYLLABLE NIEUN YAE SSANGSIOS + {0x8691, 0xB101}, //959 #HANGUL SYLLABLE NIEUN YAE IEUNG + {0x8692, 0xB102}, //960 #HANGUL SYLLABLE NIEUN YAE CIEUC + {0x8693, 0xB103}, //961 #HANGUL SYLLABLE NIEUN YAE CHIEUCH + {0x8694, 0xB104}, //962 #HANGUL SYLLABLE NIEUN YAE KHIEUKH + {0x8695, 0xB105}, //963 #HANGUL SYLLABLE NIEUN YAE THIEUTH + {0x8696, 0xB106}, //964 #HANGUL SYLLABLE NIEUN YAE PHIEUPH + {0x8697, 0xB107}, //965 #HANGUL SYLLABLE NIEUN YAE HIEUH + {0x8698, 0xB10A}, //966 #HANGUL SYLLABLE NIEUN EO SSANGKIYEOK + {0x8699, 0xB10D}, //967 #HANGUL SYLLABLE NIEUN EO NIEUNCIEUC + {0x869A, 0xB10E}, //968 #HANGUL SYLLABLE NIEUN EO NIEUNHIEUH + {0x869B, 0xB10F}, //969 #HANGUL SYLLABLE NIEUN EO TIKEUT + {0x869C, 0xB111}, //970 #HANGUL SYLLABLE NIEUN EO RIEULKIYEOK + {0x869D, 0xB114}, //971 #HANGUL SYLLABLE NIEUN EO RIEULSIOS + {0x869E, 0xB115}, //972 #HANGUL SYLLABLE NIEUN EO RIEULTHIEUTH + {0x869F, 0xB116}, //973 #HANGUL SYLLABLE NIEUN EO RIEULPHIEUPH + {0x86A0, 0xB117}, //974 #HANGUL SYLLABLE NIEUN EO RIEULHIEUH + {0x86A1, 0xB11A}, //975 #HANGUL SYLLABLE NIEUN EO PIEUPSIOS + {0x86A2, 0xB11E}, //976 #HANGUL SYLLABLE NIEUN EO CIEUC + {0x86A3, 0xB11F}, //977 #HANGUL SYLLABLE NIEUN EO CHIEUCH + {0x86A4, 0xB120}, //978 #HANGUL SYLLABLE NIEUN EO KHIEUKH + {0x86A5, 0xB121}, //979 #HANGUL SYLLABLE NIEUN EO THIEUTH + {0x86A6, 0xB122}, //980 #HANGUL SYLLABLE NIEUN EO PHIEUPH + {0x86A7, 0xB126}, //981 #HANGUL SYLLABLE NIEUN E SSANGKIYEOK + {0x86A8, 0xB127}, //982 #HANGUL SYLLABLE NIEUN E KIYEOKSIOS + {0x86A9, 0xB129}, //983 #HANGUL SYLLABLE NIEUN E NIEUNCIEUC + {0x86AA, 0xB12A}, //984 #HANGUL SYLLABLE NIEUN E NIEUNHIEUH + {0x86AB, 0xB12B}, //985 #HANGUL SYLLABLE NIEUN E TIKEUT + {0x86AC, 0xB12D}, //986 #HANGUL SYLLABLE NIEUN E RIEULKIYEOK + {0x86AD, 0xB12E}, //987 #HANGUL SYLLABLE NIEUN E RIEULMIEUM + {0x86AE, 0xB12F}, //988 #HANGUL SYLLABLE NIEUN E RIEULPIEUP + {0x86AF, 0xB130}, //989 #HANGUL SYLLABLE NIEUN E RIEULSIOS + {0x86B0, 0xB131}, //990 #HANGUL SYLLABLE NIEUN E RIEULTHIEUTH + {0x86B1, 0xB132}, //991 #HANGUL SYLLABLE NIEUN E RIEULPHIEUPH + {0x86B2, 0xB133}, //992 #HANGUL SYLLABLE NIEUN E RIEULHIEUH + {0x86B3, 0xB136}, //993 #HANGUL SYLLABLE NIEUN E PIEUPSIOS + {0x86B4, 0xB13A}, //994 #HANGUL SYLLABLE NIEUN E CIEUC + {0x86B5, 0xB13B}, //995 #HANGUL SYLLABLE NIEUN E CHIEUCH + {0x86B6, 0xB13C}, //996 #HANGUL SYLLABLE NIEUN E KHIEUKH + {0x86B7, 0xB13D}, //997 #HANGUL SYLLABLE NIEUN E THIEUTH + {0x86B8, 0xB13E}, //998 #HANGUL SYLLABLE NIEUN E PHIEUPH + {0x86B9, 0xB13F}, //999 #HANGUL SYLLABLE NIEUN E HIEUH + {0x86BA, 0xB142}, //1000 #HANGUL SYLLABLE NIEUN YEO SSANGKIYEOK + {0x86BB, 0xB143}, //1001 #HANGUL SYLLABLE NIEUN YEO KIYEOKSIOS + {0x86BC, 0xB145}, //1002 #HANGUL SYLLABLE NIEUN YEO NIEUNCIEUC + {0x86BD, 0xB146}, //1003 #HANGUL SYLLABLE NIEUN YEO NIEUNHIEUH + {0x86BE, 0xB147}, //1004 #HANGUL SYLLABLE NIEUN YEO TIKEUT + {0x86BF, 0xB149}, //1005 #HANGUL SYLLABLE NIEUN YEO RIEULKIYEOK + {0x86C0, 0xB14A}, //1006 #HANGUL SYLLABLE NIEUN YEO RIEULMIEUM + {0x86C1, 0xB14B}, //1007 #HANGUL SYLLABLE NIEUN YEO RIEULPIEUP + {0x86C2, 0xB14C}, //1008 #HANGUL SYLLABLE NIEUN YEO RIEULSIOS + {0x86C3, 0xB14D}, //1009 #HANGUL SYLLABLE NIEUN YEO RIEULTHIEUTH + {0x86C4, 0xB14E}, //1010 #HANGUL SYLLABLE NIEUN YEO RIEULPHIEUPH + {0x86C5, 0xB14F}, //1011 #HANGUL SYLLABLE NIEUN YEO RIEULHIEUH + {0x86C6, 0xB152}, //1012 #HANGUL SYLLABLE NIEUN YEO PIEUPSIOS + {0x86C7, 0xB153}, //1013 #HANGUL SYLLABLE NIEUN YEO SIOS + {0x86C8, 0xB156}, //1014 #HANGUL SYLLABLE NIEUN YEO CIEUC + {0x86C9, 0xB157}, //1015 #HANGUL SYLLABLE NIEUN YEO CHIEUCH + {0x86CA, 0xB159}, //1016 #HANGUL SYLLABLE NIEUN YEO THIEUTH + {0x86CB, 0xB15A}, //1017 #HANGUL SYLLABLE NIEUN YEO PHIEUPH + {0x86CC, 0xB15B}, //1018 #HANGUL SYLLABLE NIEUN YEO HIEUH + {0x86CD, 0xB15D}, //1019 #HANGUL SYLLABLE NIEUN YE KIYEOK + {0x86CE, 0xB15E}, //1020 #HANGUL SYLLABLE NIEUN YE SSANGKIYEOK + {0x86CF, 0xB15F}, //1021 #HANGUL SYLLABLE NIEUN YE KIYEOKSIOS + {0x86D0, 0xB161}, //1022 #HANGUL SYLLABLE NIEUN YE NIEUNCIEUC + {0x86D1, 0xB162}, //1023 #HANGUL SYLLABLE NIEUN YE NIEUNHIEUH + {0x86D2, 0xB163}, //1024 #HANGUL SYLLABLE NIEUN YE TIKEUT + {0x86D3, 0xB164}, //1025 #HANGUL SYLLABLE NIEUN YE RIEUL + {0x86D4, 0xB165}, //1026 #HANGUL SYLLABLE NIEUN YE RIEULKIYEOK + {0x86D5, 0xB166}, //1027 #HANGUL SYLLABLE NIEUN YE RIEULMIEUM + {0x86D6, 0xB167}, //1028 #HANGUL SYLLABLE NIEUN YE RIEULPIEUP + {0x86D7, 0xB168}, //1029 #HANGUL SYLLABLE NIEUN YE RIEULSIOS + {0x86D8, 0xB169}, //1030 #HANGUL SYLLABLE NIEUN YE RIEULTHIEUTH + {0x86D9, 0xB16A}, //1031 #HANGUL SYLLABLE NIEUN YE RIEULPHIEUPH + {0x86DA, 0xB16B}, //1032 #HANGUL SYLLABLE NIEUN YE RIEULHIEUH + {0x86DB, 0xB16C}, //1033 #HANGUL SYLLABLE NIEUN YE MIEUM + {0x86DC, 0xB16D}, //1034 #HANGUL SYLLABLE NIEUN YE PIEUP + {0x86DD, 0xB16E}, //1035 #HANGUL SYLLABLE NIEUN YE PIEUPSIOS + {0x86DE, 0xB16F}, //1036 #HANGUL SYLLABLE NIEUN YE SIOS + {0x86DF, 0xB170}, //1037 #HANGUL SYLLABLE NIEUN YE SSANGSIOS + {0x86E0, 0xB171}, //1038 #HANGUL SYLLABLE NIEUN YE IEUNG + {0x86E1, 0xB172}, //1039 #HANGUL SYLLABLE NIEUN YE CIEUC + {0x86E2, 0xB173}, //1040 #HANGUL SYLLABLE NIEUN YE CHIEUCH + {0x86E3, 0xB174}, //1041 #HANGUL SYLLABLE NIEUN YE KHIEUKH + {0x86E4, 0xB175}, //1042 #HANGUL SYLLABLE NIEUN YE THIEUTH + {0x86E5, 0xB176}, //1043 #HANGUL SYLLABLE NIEUN YE PHIEUPH + {0x86E6, 0xB177}, //1044 #HANGUL SYLLABLE NIEUN YE HIEUH + {0x86E7, 0xB17A}, //1045 #HANGUL SYLLABLE NIEUN O SSANGKIYEOK + {0x86E8, 0xB17B}, //1046 #HANGUL SYLLABLE NIEUN O KIYEOKSIOS + {0x86E9, 0xB17D}, //1047 #HANGUL SYLLABLE NIEUN O NIEUNCIEUC + {0x86EA, 0xB17E}, //1048 #HANGUL SYLLABLE NIEUN O NIEUNHIEUH + {0x86EB, 0xB17F}, //1049 #HANGUL SYLLABLE NIEUN O TIKEUT + {0x86EC, 0xB181}, //1050 #HANGUL SYLLABLE NIEUN O RIEULKIYEOK + {0x86ED, 0xB183}, //1051 #HANGUL SYLLABLE NIEUN O RIEULPIEUP + {0x86EE, 0xB184}, //1052 #HANGUL SYLLABLE NIEUN O RIEULSIOS + {0x86EF, 0xB185}, //1053 #HANGUL SYLLABLE NIEUN O RIEULTHIEUTH + {0x86F0, 0xB186}, //1054 #HANGUL SYLLABLE NIEUN O RIEULPHIEUPH + {0x86F1, 0xB187}, //1055 #HANGUL SYLLABLE NIEUN O RIEULHIEUH + {0x86F2, 0xB18A}, //1056 #HANGUL SYLLABLE NIEUN O PIEUPSIOS + {0x86F3, 0xB18C}, //1057 #HANGUL SYLLABLE NIEUN O SSANGSIOS + {0x86F4, 0xB18E}, //1058 #HANGUL SYLLABLE NIEUN O CIEUC + {0x86F5, 0xB18F}, //1059 #HANGUL SYLLABLE NIEUN O CHIEUCH + {0x86F6, 0xB190}, //1060 #HANGUL SYLLABLE NIEUN O KHIEUKH + {0x86F7, 0xB191}, //1061 #HANGUL SYLLABLE NIEUN O THIEUTH + {0x86F8, 0xB195}, //1062 #HANGUL SYLLABLE NIEUN WA KIYEOK + {0x86F9, 0xB196}, //1063 #HANGUL SYLLABLE NIEUN WA SSANGKIYEOK + {0x86FA, 0xB197}, //1064 #HANGUL SYLLABLE NIEUN WA KIYEOKSIOS + {0x86FB, 0xB199}, //1065 #HANGUL SYLLABLE NIEUN WA NIEUNCIEUC + {0x86FC, 0xB19A}, //1066 #HANGUL SYLLABLE NIEUN WA NIEUNHIEUH + {0x86FD, 0xB19B}, //1067 #HANGUL SYLLABLE NIEUN WA TIKEUT + {0x86FE, 0xB19D}, //1068 #HANGUL SYLLABLE NIEUN WA RIEULKIYEOK + {0x8741, 0xB19E}, //1069 #HANGUL SYLLABLE NIEUN WA RIEULMIEUM + {0x8742, 0xB19F}, //1070 #HANGUL SYLLABLE NIEUN WA RIEULPIEUP + {0x8743, 0xB1A0}, //1071 #HANGUL SYLLABLE NIEUN WA RIEULSIOS + {0x8744, 0xB1A1}, //1072 #HANGUL SYLLABLE NIEUN WA RIEULTHIEUTH + {0x8745, 0xB1A2}, //1073 #HANGUL SYLLABLE NIEUN WA RIEULPHIEUPH + {0x8746, 0xB1A3}, //1074 #HANGUL SYLLABLE NIEUN WA RIEULHIEUH + {0x8747, 0xB1A4}, //1075 #HANGUL SYLLABLE NIEUN WA MIEUM + {0x8748, 0xB1A5}, //1076 #HANGUL SYLLABLE NIEUN WA PIEUP + {0x8749, 0xB1A6}, //1077 #HANGUL SYLLABLE NIEUN WA PIEUPSIOS + {0x874A, 0xB1A7}, //1078 #HANGUL SYLLABLE NIEUN WA SIOS + {0x874B, 0xB1A9}, //1079 #HANGUL SYLLABLE NIEUN WA IEUNG + {0x874C, 0xB1AA}, //1080 #HANGUL SYLLABLE NIEUN WA CIEUC + {0x874D, 0xB1AB}, //1081 #HANGUL SYLLABLE NIEUN WA CHIEUCH + {0x874E, 0xB1AC}, //1082 #HANGUL SYLLABLE NIEUN WA KHIEUKH + {0x874F, 0xB1AD}, //1083 #HANGUL SYLLABLE NIEUN WA THIEUTH + {0x8750, 0xB1AE}, //1084 #HANGUL SYLLABLE NIEUN WA PHIEUPH + {0x8751, 0xB1AF}, //1085 #HANGUL SYLLABLE NIEUN WA HIEUH + {0x8752, 0xB1B0}, //1086 #HANGUL SYLLABLE NIEUN WAE + {0x8753, 0xB1B1}, //1087 #HANGUL SYLLABLE NIEUN WAE KIYEOK + {0x8754, 0xB1B2}, //1088 #HANGUL SYLLABLE NIEUN WAE SSANGKIYEOK + {0x8755, 0xB1B3}, //1089 #HANGUL SYLLABLE NIEUN WAE KIYEOKSIOS + {0x8756, 0xB1B4}, //1090 #HANGUL SYLLABLE NIEUN WAE NIEUN + {0x8757, 0xB1B5}, //1091 #HANGUL SYLLABLE NIEUN WAE NIEUNCIEUC + {0x8758, 0xB1B6}, //1092 #HANGUL SYLLABLE NIEUN WAE NIEUNHIEUH + {0x8759, 0xB1B7}, //1093 #HANGUL SYLLABLE NIEUN WAE TIKEUT + {0x875A, 0xB1B8}, //1094 #HANGUL SYLLABLE NIEUN WAE RIEUL + {0x8761, 0xB1B9}, //1095 #HANGUL SYLLABLE NIEUN WAE RIEULKIYEOK + {0x8762, 0xB1BA}, //1096 #HANGUL SYLLABLE NIEUN WAE RIEULMIEUM + {0x8763, 0xB1BB}, //1097 #HANGUL SYLLABLE NIEUN WAE RIEULPIEUP + {0x8764, 0xB1BC}, //1098 #HANGUL SYLLABLE NIEUN WAE RIEULSIOS + {0x8765, 0xB1BD}, //1099 #HANGUL SYLLABLE NIEUN WAE RIEULTHIEUTH + {0x8766, 0xB1BE}, //1100 #HANGUL SYLLABLE NIEUN WAE RIEULPHIEUPH + {0x8767, 0xB1BF}, //1101 #HANGUL SYLLABLE NIEUN WAE RIEULHIEUH + {0x8768, 0xB1C0}, //1102 #HANGUL SYLLABLE NIEUN WAE MIEUM + {0x8769, 0xB1C1}, //1103 #HANGUL SYLLABLE NIEUN WAE PIEUP + {0x876A, 0xB1C2}, //1104 #HANGUL SYLLABLE NIEUN WAE PIEUPSIOS + {0x876B, 0xB1C3}, //1105 #HANGUL SYLLABLE NIEUN WAE SIOS + {0x876C, 0xB1C4}, //1106 #HANGUL SYLLABLE NIEUN WAE SSANGSIOS + {0x876D, 0xB1C5}, //1107 #HANGUL SYLLABLE NIEUN WAE IEUNG + {0x876E, 0xB1C6}, //1108 #HANGUL SYLLABLE NIEUN WAE CIEUC + {0x876F, 0xB1C7}, //1109 #HANGUL SYLLABLE NIEUN WAE CHIEUCH + {0x8770, 0xB1C8}, //1110 #HANGUL SYLLABLE NIEUN WAE KHIEUKH + {0x8771, 0xB1C9}, //1111 #HANGUL SYLLABLE NIEUN WAE THIEUTH + {0x8772, 0xB1CA}, //1112 #HANGUL SYLLABLE NIEUN WAE PHIEUPH + {0x8773, 0xB1CB}, //1113 #HANGUL SYLLABLE NIEUN WAE HIEUH + {0x8774, 0xB1CD}, //1114 #HANGUL SYLLABLE NIEUN OE KIYEOK + {0x8775, 0xB1CE}, //1115 #HANGUL SYLLABLE NIEUN OE SSANGKIYEOK + {0x8776, 0xB1CF}, //1116 #HANGUL SYLLABLE NIEUN OE KIYEOKSIOS + {0x8777, 0xB1D1}, //1117 #HANGUL SYLLABLE NIEUN OE NIEUNCIEUC + {0x8778, 0xB1D2}, //1118 #HANGUL SYLLABLE NIEUN OE NIEUNHIEUH + {0x8779, 0xB1D3}, //1119 #HANGUL SYLLABLE NIEUN OE TIKEUT + {0x877A, 0xB1D5}, //1120 #HANGUL SYLLABLE NIEUN OE RIEULKIYEOK + {0x8781, 0xB1D6}, //1121 #HANGUL SYLLABLE NIEUN OE RIEULMIEUM + {0x8782, 0xB1D7}, //1122 #HANGUL SYLLABLE NIEUN OE RIEULPIEUP + {0x8783, 0xB1D8}, //1123 #HANGUL SYLLABLE NIEUN OE RIEULSIOS + {0x8784, 0xB1D9}, //1124 #HANGUL SYLLABLE NIEUN OE RIEULTHIEUTH + {0x8785, 0xB1DA}, //1125 #HANGUL SYLLABLE NIEUN OE RIEULPHIEUPH + {0x8786, 0xB1DB}, //1126 #HANGUL SYLLABLE NIEUN OE RIEULHIEUH + {0x8787, 0xB1DE}, //1127 #HANGUL SYLLABLE NIEUN OE PIEUPSIOS + {0x8788, 0xB1E0}, //1128 #HANGUL SYLLABLE NIEUN OE SSANGSIOS + {0x8789, 0xB1E1}, //1129 #HANGUL SYLLABLE NIEUN OE IEUNG + {0x878A, 0xB1E2}, //1130 #HANGUL SYLLABLE NIEUN OE CIEUC + {0x878B, 0xB1E3}, //1131 #HANGUL SYLLABLE NIEUN OE CHIEUCH + {0x878C, 0xB1E4}, //1132 #HANGUL SYLLABLE NIEUN OE KHIEUKH + {0x878D, 0xB1E5}, //1133 #HANGUL SYLLABLE NIEUN OE THIEUTH + {0x878E, 0xB1E6}, //1134 #HANGUL SYLLABLE NIEUN OE PHIEUPH + {0x878F, 0xB1E7}, //1135 #HANGUL SYLLABLE NIEUN OE HIEUH + {0x8790, 0xB1EA}, //1136 #HANGUL SYLLABLE NIEUN YO SSANGKIYEOK + {0x8791, 0xB1EB}, //1137 #HANGUL SYLLABLE NIEUN YO KIYEOKSIOS + {0x8792, 0xB1ED}, //1138 #HANGUL SYLLABLE NIEUN YO NIEUNCIEUC + {0x8793, 0xB1EE}, //1139 #HANGUL SYLLABLE NIEUN YO NIEUNHIEUH + {0x8794, 0xB1EF}, //1140 #HANGUL SYLLABLE NIEUN YO TIKEUT + {0x8795, 0xB1F1}, //1141 #HANGUL SYLLABLE NIEUN YO RIEULKIYEOK + {0x8796, 0xB1F2}, //1142 #HANGUL SYLLABLE NIEUN YO RIEULMIEUM + {0x8797, 0xB1F3}, //1143 #HANGUL SYLLABLE NIEUN YO RIEULPIEUP + {0x8798, 0xB1F4}, //1144 #HANGUL SYLLABLE NIEUN YO RIEULSIOS + {0x8799, 0xB1F5}, //1145 #HANGUL SYLLABLE NIEUN YO RIEULTHIEUTH + {0x879A, 0xB1F6}, //1146 #HANGUL SYLLABLE NIEUN YO RIEULPHIEUPH + {0x879B, 0xB1F7}, //1147 #HANGUL SYLLABLE NIEUN YO RIEULHIEUH + {0x879C, 0xB1F8}, //1148 #HANGUL SYLLABLE NIEUN YO MIEUM + {0x879D, 0xB1FA}, //1149 #HANGUL SYLLABLE NIEUN YO PIEUPSIOS + {0x879E, 0xB1FC}, //1150 #HANGUL SYLLABLE NIEUN YO SSANGSIOS + {0x879F, 0xB1FE}, //1151 #HANGUL SYLLABLE NIEUN YO CIEUC + {0x87A0, 0xB1FF}, //1152 #HANGUL SYLLABLE NIEUN YO CHIEUCH + {0x87A1, 0xB200}, //1153 #HANGUL SYLLABLE NIEUN YO KHIEUKH + {0x87A2, 0xB201}, //1154 #HANGUL SYLLABLE NIEUN YO THIEUTH + {0x87A3, 0xB202}, //1155 #HANGUL SYLLABLE NIEUN YO PHIEUPH + {0x87A4, 0xB203}, //1156 #HANGUL SYLLABLE NIEUN YO HIEUH + {0x87A5, 0xB206}, //1157 #HANGUL SYLLABLE NIEUN U SSANGKIYEOK + {0x87A6, 0xB207}, //1158 #HANGUL SYLLABLE NIEUN U KIYEOKSIOS + {0x87A7, 0xB209}, //1159 #HANGUL SYLLABLE NIEUN U NIEUNCIEUC + {0x87A8, 0xB20A}, //1160 #HANGUL SYLLABLE NIEUN U NIEUNHIEUH + {0x87A9, 0xB20D}, //1161 #HANGUL SYLLABLE NIEUN U RIEULKIYEOK + {0x87AA, 0xB20E}, //1162 #HANGUL SYLLABLE NIEUN U RIEULMIEUM + {0x87AB, 0xB20F}, //1163 #HANGUL SYLLABLE NIEUN U RIEULPIEUP + {0x87AC, 0xB210}, //1164 #HANGUL SYLLABLE NIEUN U RIEULSIOS + {0x87AD, 0xB211}, //1165 #HANGUL SYLLABLE NIEUN U RIEULTHIEUTH + {0x87AE, 0xB212}, //1166 #HANGUL SYLLABLE NIEUN U RIEULPHIEUPH + {0x87AF, 0xB213}, //1167 #HANGUL SYLLABLE NIEUN U RIEULHIEUH + {0x87B0, 0xB216}, //1168 #HANGUL SYLLABLE NIEUN U PIEUPSIOS + {0x87B1, 0xB218}, //1169 #HANGUL SYLLABLE NIEUN U SSANGSIOS + {0x87B2, 0xB21A}, //1170 #HANGUL SYLLABLE NIEUN U CIEUC + {0x87B3, 0xB21B}, //1171 #HANGUL SYLLABLE NIEUN U CHIEUCH + {0x87B4, 0xB21C}, //1172 #HANGUL SYLLABLE NIEUN U KHIEUKH + {0x87B5, 0xB21D}, //1173 #HANGUL SYLLABLE NIEUN U THIEUTH + {0x87B6, 0xB21E}, //1174 #HANGUL SYLLABLE NIEUN U PHIEUPH + {0x87B7, 0xB21F}, //1175 #HANGUL SYLLABLE NIEUN U HIEUH + {0x87B8, 0xB221}, //1176 #HANGUL SYLLABLE NIEUN WEO KIYEOK + {0x87B9, 0xB222}, //1177 #HANGUL SYLLABLE NIEUN WEO SSANGKIYEOK + {0x87BA, 0xB223}, //1178 #HANGUL SYLLABLE NIEUN WEO KIYEOKSIOS + {0x87BB, 0xB224}, //1179 #HANGUL SYLLABLE NIEUN WEO NIEUN + {0x87BC, 0xB225}, //1180 #HANGUL SYLLABLE NIEUN WEO NIEUNCIEUC + {0x87BD, 0xB226}, //1181 #HANGUL SYLLABLE NIEUN WEO NIEUNHIEUH + {0x87BE, 0xB227}, //1182 #HANGUL SYLLABLE NIEUN WEO TIKEUT + {0x87BF, 0xB228}, //1183 #HANGUL SYLLABLE NIEUN WEO RIEUL + {0x87C0, 0xB229}, //1184 #HANGUL SYLLABLE NIEUN WEO RIEULKIYEOK + {0x87C1, 0xB22A}, //1185 #HANGUL SYLLABLE NIEUN WEO RIEULMIEUM + {0x87C2, 0xB22B}, //1186 #HANGUL SYLLABLE NIEUN WEO RIEULPIEUP + {0x87C3, 0xB22C}, //1187 #HANGUL SYLLABLE NIEUN WEO RIEULSIOS + {0x87C4, 0xB22D}, //1188 #HANGUL SYLLABLE NIEUN WEO RIEULTHIEUTH + {0x87C5, 0xB22E}, //1189 #HANGUL SYLLABLE NIEUN WEO RIEULPHIEUPH + {0x87C6, 0xB22F}, //1190 #HANGUL SYLLABLE NIEUN WEO RIEULHIEUH + {0x87C7, 0xB230}, //1191 #HANGUL SYLLABLE NIEUN WEO MIEUM + {0x87C8, 0xB231}, //1192 #HANGUL SYLLABLE NIEUN WEO PIEUP + {0x87C9, 0xB232}, //1193 #HANGUL SYLLABLE NIEUN WEO PIEUPSIOS + {0x87CA, 0xB233}, //1194 #HANGUL SYLLABLE NIEUN WEO SIOS + {0x87CB, 0xB235}, //1195 #HANGUL SYLLABLE NIEUN WEO IEUNG + {0x87CC, 0xB236}, //1196 #HANGUL SYLLABLE NIEUN WEO CIEUC + {0x87CD, 0xB237}, //1197 #HANGUL SYLLABLE NIEUN WEO CHIEUCH + {0x87CE, 0xB238}, //1198 #HANGUL SYLLABLE NIEUN WEO KHIEUKH + {0x87CF, 0xB239}, //1199 #HANGUL SYLLABLE NIEUN WEO THIEUTH + {0x87D0, 0xB23A}, //1200 #HANGUL SYLLABLE NIEUN WEO PHIEUPH + {0x87D1, 0xB23B}, //1201 #HANGUL SYLLABLE NIEUN WEO HIEUH + {0x87D2, 0xB23D}, //1202 #HANGUL SYLLABLE NIEUN WE KIYEOK + {0x87D3, 0xB23E}, //1203 #HANGUL SYLLABLE NIEUN WE SSANGKIYEOK + {0x87D4, 0xB23F}, //1204 #HANGUL SYLLABLE NIEUN WE KIYEOKSIOS + {0x87D5, 0xB240}, //1205 #HANGUL SYLLABLE NIEUN WE NIEUN + {0x87D6, 0xB241}, //1206 #HANGUL SYLLABLE NIEUN WE NIEUNCIEUC + {0x87D7, 0xB242}, //1207 #HANGUL SYLLABLE NIEUN WE NIEUNHIEUH + {0x87D8, 0xB243}, //1208 #HANGUL SYLLABLE NIEUN WE TIKEUT + {0x87D9, 0xB244}, //1209 #HANGUL SYLLABLE NIEUN WE RIEUL + {0x87DA, 0xB245}, //1210 #HANGUL SYLLABLE NIEUN WE RIEULKIYEOK + {0x87DB, 0xB246}, //1211 #HANGUL SYLLABLE NIEUN WE RIEULMIEUM + {0x87DC, 0xB247}, //1212 #HANGUL SYLLABLE NIEUN WE RIEULPIEUP + {0x87DD, 0xB248}, //1213 #HANGUL SYLLABLE NIEUN WE RIEULSIOS + {0x87DE, 0xB249}, //1214 #HANGUL SYLLABLE NIEUN WE RIEULTHIEUTH + {0x87DF, 0xB24A}, //1215 #HANGUL SYLLABLE NIEUN WE RIEULPHIEUPH + {0x87E0, 0xB24B}, //1216 #HANGUL SYLLABLE NIEUN WE RIEULHIEUH + {0x87E1, 0xB24C}, //1217 #HANGUL SYLLABLE NIEUN WE MIEUM + {0x87E2, 0xB24D}, //1218 #HANGUL SYLLABLE NIEUN WE PIEUP + {0x87E3, 0xB24E}, //1219 #HANGUL SYLLABLE NIEUN WE PIEUPSIOS + {0x87E4, 0xB24F}, //1220 #HANGUL SYLLABLE NIEUN WE SIOS + {0x87E5, 0xB250}, //1221 #HANGUL SYLLABLE NIEUN WE SSANGSIOS + {0x87E6, 0xB251}, //1222 #HANGUL SYLLABLE NIEUN WE IEUNG + {0x87E7, 0xB252}, //1223 #HANGUL SYLLABLE NIEUN WE CIEUC + {0x87E8, 0xB253}, //1224 #HANGUL SYLLABLE NIEUN WE CHIEUCH + {0x87E9, 0xB254}, //1225 #HANGUL SYLLABLE NIEUN WE KHIEUKH + {0x87EA, 0xB255}, //1226 #HANGUL SYLLABLE NIEUN WE THIEUTH + {0x87EB, 0xB256}, //1227 #HANGUL SYLLABLE NIEUN WE PHIEUPH + {0x87EC, 0xB257}, //1228 #HANGUL SYLLABLE NIEUN WE HIEUH + {0x87ED, 0xB259}, //1229 #HANGUL SYLLABLE NIEUN WI KIYEOK + {0x87EE, 0xB25A}, //1230 #HANGUL SYLLABLE NIEUN WI SSANGKIYEOK + {0x87EF, 0xB25B}, //1231 #HANGUL SYLLABLE NIEUN WI KIYEOKSIOS + {0x87F0, 0xB25D}, //1232 #HANGUL SYLLABLE NIEUN WI NIEUNCIEUC + {0x87F1, 0xB25E}, //1233 #HANGUL SYLLABLE NIEUN WI NIEUNHIEUH + {0x87F2, 0xB25F}, //1234 #HANGUL SYLLABLE NIEUN WI TIKEUT + {0x87F3, 0xB261}, //1235 #HANGUL SYLLABLE NIEUN WI RIEULKIYEOK + {0x87F4, 0xB262}, //1236 #HANGUL SYLLABLE NIEUN WI RIEULMIEUM + {0x87F5, 0xB263}, //1237 #HANGUL SYLLABLE NIEUN WI RIEULPIEUP + {0x87F6, 0xB264}, //1238 #HANGUL SYLLABLE NIEUN WI RIEULSIOS + {0x87F7, 0xB265}, //1239 #HANGUL SYLLABLE NIEUN WI RIEULTHIEUTH + {0x87F8, 0xB266}, //1240 #HANGUL SYLLABLE NIEUN WI RIEULPHIEUPH + {0x87F9, 0xB267}, //1241 #HANGUL SYLLABLE NIEUN WI RIEULHIEUH + {0x87FA, 0xB26A}, //1242 #HANGUL SYLLABLE NIEUN WI PIEUPSIOS + {0x87FB, 0xB26B}, //1243 #HANGUL SYLLABLE NIEUN WI SIOS + {0x87FC, 0xB26C}, //1244 #HANGUL SYLLABLE NIEUN WI SSANGSIOS + {0x87FD, 0xB26D}, //1245 #HANGUL SYLLABLE NIEUN WI IEUNG + {0x87FE, 0xB26E}, //1246 #HANGUL SYLLABLE NIEUN WI CIEUC + {0x8841, 0xB26F}, //1247 #HANGUL SYLLABLE NIEUN WI CHIEUCH + {0x8842, 0xB270}, //1248 #HANGUL SYLLABLE NIEUN WI KHIEUKH + {0x8843, 0xB271}, //1249 #HANGUL SYLLABLE NIEUN WI THIEUTH + {0x8844, 0xB272}, //1250 #HANGUL SYLLABLE NIEUN WI PHIEUPH + {0x8845, 0xB273}, //1251 #HANGUL SYLLABLE NIEUN WI HIEUH + {0x8846, 0xB276}, //1252 #HANGUL SYLLABLE NIEUN YU SSANGKIYEOK + {0x8847, 0xB277}, //1253 #HANGUL SYLLABLE NIEUN YU KIYEOKSIOS + {0x8848, 0xB278}, //1254 #HANGUL SYLLABLE NIEUN YU NIEUN + {0x8849, 0xB279}, //1255 #HANGUL SYLLABLE NIEUN YU NIEUNCIEUC + {0x884A, 0xB27A}, //1256 #HANGUL SYLLABLE NIEUN YU NIEUNHIEUH + {0x884B, 0xB27B}, //1257 #HANGUL SYLLABLE NIEUN YU TIKEUT + {0x884C, 0xB27D}, //1258 #HANGUL SYLLABLE NIEUN YU RIEULKIYEOK + {0x884D, 0xB27E}, //1259 #HANGUL SYLLABLE NIEUN YU RIEULMIEUM + {0x884E, 0xB27F}, //1260 #HANGUL SYLLABLE NIEUN YU RIEULPIEUP + {0x884F, 0xB280}, //1261 #HANGUL SYLLABLE NIEUN YU RIEULSIOS + {0x8850, 0xB281}, //1262 #HANGUL SYLLABLE NIEUN YU RIEULTHIEUTH + {0x8851, 0xB282}, //1263 #HANGUL SYLLABLE NIEUN YU RIEULPHIEUPH + {0x8852, 0xB283}, //1264 #HANGUL SYLLABLE NIEUN YU RIEULHIEUH + {0x8853, 0xB286}, //1265 #HANGUL SYLLABLE NIEUN YU PIEUPSIOS + {0x8854, 0xB287}, //1266 #HANGUL SYLLABLE NIEUN YU SIOS + {0x8855, 0xB288}, //1267 #HANGUL SYLLABLE NIEUN YU SSANGSIOS + {0x8856, 0xB28A}, //1268 #HANGUL SYLLABLE NIEUN YU CIEUC + {0x8857, 0xB28B}, //1269 #HANGUL SYLLABLE NIEUN YU CHIEUCH + {0x8858, 0xB28C}, //1270 #HANGUL SYLLABLE NIEUN YU KHIEUKH + {0x8859, 0xB28D}, //1271 #HANGUL SYLLABLE NIEUN YU THIEUTH + {0x885A, 0xB28E}, //1272 #HANGUL SYLLABLE NIEUN YU PHIEUPH + {0x8861, 0xB28F}, //1273 #HANGUL SYLLABLE NIEUN YU HIEUH + {0x8862, 0xB292}, //1274 #HANGUL SYLLABLE NIEUN EU SSANGKIYEOK + {0x8863, 0xB293}, //1275 #HANGUL SYLLABLE NIEUN EU KIYEOKSIOS + {0x8864, 0xB295}, //1276 #HANGUL SYLLABLE NIEUN EU NIEUNCIEUC + {0x8865, 0xB296}, //1277 #HANGUL SYLLABLE NIEUN EU NIEUNHIEUH + {0x8866, 0xB297}, //1278 #HANGUL SYLLABLE NIEUN EU TIKEUT + {0x8867, 0xB29B}, //1279 #HANGUL SYLLABLE NIEUN EU RIEULPIEUP + {0x8868, 0xB29C}, //1280 #HANGUL SYLLABLE NIEUN EU RIEULSIOS + {0x8869, 0xB29D}, //1281 #HANGUL SYLLABLE NIEUN EU RIEULTHIEUTH + {0x886A, 0xB29E}, //1282 #HANGUL SYLLABLE NIEUN EU RIEULPHIEUPH + {0x886B, 0xB29F}, //1283 #HANGUL SYLLABLE NIEUN EU RIEULHIEUH + {0x886C, 0xB2A2}, //1284 #HANGUL SYLLABLE NIEUN EU PIEUPSIOS + {0x886D, 0xB2A4}, //1285 #HANGUL SYLLABLE NIEUN EU SSANGSIOS + {0x886E, 0xB2A7}, //1286 #HANGUL SYLLABLE NIEUN EU CHIEUCH + {0x886F, 0xB2A8}, //1287 #HANGUL SYLLABLE NIEUN EU KHIEUKH + {0x8870, 0xB2A9}, //1288 #HANGUL SYLLABLE NIEUN EU THIEUTH + {0x8871, 0xB2AB}, //1289 #HANGUL SYLLABLE NIEUN EU HIEUH + {0x8872, 0xB2AD}, //1290 #HANGUL SYLLABLE NIEUN YI KIYEOK + {0x8873, 0xB2AE}, //1291 #HANGUL SYLLABLE NIEUN YI SSANGKIYEOK + {0x8874, 0xB2AF}, //1292 #HANGUL SYLLABLE NIEUN YI KIYEOKSIOS + {0x8875, 0xB2B1}, //1293 #HANGUL SYLLABLE NIEUN YI NIEUNCIEUC + {0x8876, 0xB2B2}, //1294 #HANGUL SYLLABLE NIEUN YI NIEUNHIEUH + {0x8877, 0xB2B3}, //1295 #HANGUL SYLLABLE NIEUN YI TIKEUT + {0x8878, 0xB2B5}, //1296 #HANGUL SYLLABLE NIEUN YI RIEULKIYEOK + {0x8879, 0xB2B6}, //1297 #HANGUL SYLLABLE NIEUN YI RIEULMIEUM + {0x887A, 0xB2B7}, //1298 #HANGUL SYLLABLE NIEUN YI RIEULPIEUP + {0x8881, 0xB2B8}, //1299 #HANGUL SYLLABLE NIEUN YI RIEULSIOS + {0x8882, 0xB2B9}, //1300 #HANGUL SYLLABLE NIEUN YI RIEULTHIEUTH + {0x8883, 0xB2BA}, //1301 #HANGUL SYLLABLE NIEUN YI RIEULPHIEUPH + {0x8884, 0xB2BB}, //1302 #HANGUL SYLLABLE NIEUN YI RIEULHIEUH + {0x8885, 0xB2BC}, //1303 #HANGUL SYLLABLE NIEUN YI MIEUM + {0x8886, 0xB2BD}, //1304 #HANGUL SYLLABLE NIEUN YI PIEUP + {0x8887, 0xB2BE}, //1305 #HANGUL SYLLABLE NIEUN YI PIEUPSIOS + {0x8888, 0xB2BF}, //1306 #HANGUL SYLLABLE NIEUN YI SIOS + {0x8889, 0xB2C0}, //1307 #HANGUL SYLLABLE NIEUN YI SSANGSIOS + {0x888A, 0xB2C1}, //1308 #HANGUL SYLLABLE NIEUN YI IEUNG + {0x888B, 0xB2C2}, //1309 #HANGUL SYLLABLE NIEUN YI CIEUC + {0x888C, 0xB2C3}, //1310 #HANGUL SYLLABLE NIEUN YI CHIEUCH + {0x888D, 0xB2C4}, //1311 #HANGUL SYLLABLE NIEUN YI KHIEUKH + {0x888E, 0xB2C5}, //1312 #HANGUL SYLLABLE NIEUN YI THIEUTH + {0x888F, 0xB2C6}, //1313 #HANGUL SYLLABLE NIEUN YI PHIEUPH + {0x8890, 0xB2C7}, //1314 #HANGUL SYLLABLE NIEUN YI HIEUH + {0x8891, 0xB2CA}, //1315 #HANGUL SYLLABLE NIEUN I SSANGKIYEOK + {0x8892, 0xB2CB}, //1316 #HANGUL SYLLABLE NIEUN I KIYEOKSIOS + {0x8893, 0xB2CD}, //1317 #HANGUL SYLLABLE NIEUN I NIEUNCIEUC + {0x8894, 0xB2CE}, //1318 #HANGUL SYLLABLE NIEUN I NIEUNHIEUH + {0x8895, 0xB2CF}, //1319 #HANGUL SYLLABLE NIEUN I TIKEUT + {0x8896, 0xB2D1}, //1320 #HANGUL SYLLABLE NIEUN I RIEULKIYEOK + {0x8897, 0xB2D3}, //1321 #HANGUL SYLLABLE NIEUN I RIEULPIEUP + {0x8898, 0xB2D4}, //1322 #HANGUL SYLLABLE NIEUN I RIEULSIOS + {0x8899, 0xB2D5}, //1323 #HANGUL SYLLABLE NIEUN I RIEULTHIEUTH + {0x889A, 0xB2D6}, //1324 #HANGUL SYLLABLE NIEUN I RIEULPHIEUPH + {0x889B, 0xB2D7}, //1325 #HANGUL SYLLABLE NIEUN I RIEULHIEUH + {0x889C, 0xB2DA}, //1326 #HANGUL SYLLABLE NIEUN I PIEUPSIOS + {0x889D, 0xB2DC}, //1327 #HANGUL SYLLABLE NIEUN I SSANGSIOS + {0x889E, 0xB2DE}, //1328 #HANGUL SYLLABLE NIEUN I CIEUC + {0x889F, 0xB2DF}, //1329 #HANGUL SYLLABLE NIEUN I CHIEUCH + {0x88A0, 0xB2E0}, //1330 #HANGUL SYLLABLE NIEUN I KHIEUKH + {0x88A1, 0xB2E1}, //1331 #HANGUL SYLLABLE NIEUN I THIEUTH + {0x88A2, 0xB2E3}, //1332 #HANGUL SYLLABLE NIEUN I HIEUH + {0x88A3, 0xB2E7}, //1333 #HANGUL SYLLABLE TIKEUT A KIYEOKSIOS + {0x88A4, 0xB2E9}, //1334 #HANGUL SYLLABLE TIKEUT A NIEUNCIEUC + {0x88A5, 0xB2EA}, //1335 #HANGUL SYLLABLE TIKEUT A NIEUNHIEUH + {0x88A6, 0xB2F0}, //1336 #HANGUL SYLLABLE TIKEUT A RIEULSIOS + {0x88A7, 0xB2F1}, //1337 #HANGUL SYLLABLE TIKEUT A RIEULTHIEUTH + {0x88A8, 0xB2F2}, //1338 #HANGUL SYLLABLE TIKEUT A RIEULPHIEUPH + {0x88A9, 0xB2F6}, //1339 #HANGUL SYLLABLE TIKEUT A PIEUPSIOS + {0x88AA, 0xB2FC}, //1340 #HANGUL SYLLABLE TIKEUT A KHIEUKH + {0x88AB, 0xB2FD}, //1341 #HANGUL SYLLABLE TIKEUT A THIEUTH + {0x88AC, 0xB2FE}, //1342 #HANGUL SYLLABLE TIKEUT A PHIEUPH + {0x88AD, 0xB302}, //1343 #HANGUL SYLLABLE TIKEUT AE SSANGKIYEOK + {0x88AE, 0xB303}, //1344 #HANGUL SYLLABLE TIKEUT AE KIYEOKSIOS + {0x88AF, 0xB305}, //1345 #HANGUL SYLLABLE TIKEUT AE NIEUNCIEUC + {0x88B0, 0xB306}, //1346 #HANGUL SYLLABLE TIKEUT AE NIEUNHIEUH + {0x88B1, 0xB307}, //1347 #HANGUL SYLLABLE TIKEUT AE TIKEUT + {0x88B2, 0xB309}, //1348 #HANGUL SYLLABLE TIKEUT AE RIEULKIYEOK + {0x88B3, 0xB30A}, //1349 #HANGUL SYLLABLE TIKEUT AE RIEULMIEUM + {0x88B4, 0xB30B}, //1350 #HANGUL SYLLABLE TIKEUT AE RIEULPIEUP + {0x88B5, 0xB30C}, //1351 #HANGUL SYLLABLE TIKEUT AE RIEULSIOS + {0x88B6, 0xB30D}, //1352 #HANGUL SYLLABLE TIKEUT AE RIEULTHIEUTH + {0x88B7, 0xB30E}, //1353 #HANGUL SYLLABLE TIKEUT AE RIEULPHIEUPH + {0x88B8, 0xB30F}, //1354 #HANGUL SYLLABLE TIKEUT AE RIEULHIEUH + {0x88B9, 0xB312}, //1355 #HANGUL SYLLABLE TIKEUT AE PIEUPSIOS + {0x88BA, 0xB316}, //1356 #HANGUL SYLLABLE TIKEUT AE CIEUC + {0x88BB, 0xB317}, //1357 #HANGUL SYLLABLE TIKEUT AE CHIEUCH + {0x88BC, 0xB318}, //1358 #HANGUL SYLLABLE TIKEUT AE KHIEUKH + {0x88BD, 0xB319}, //1359 #HANGUL SYLLABLE TIKEUT AE THIEUTH + {0x88BE, 0xB31A}, //1360 #HANGUL SYLLABLE TIKEUT AE PHIEUPH + {0x88BF, 0xB31B}, //1361 #HANGUL SYLLABLE TIKEUT AE HIEUH + {0x88C0, 0xB31D}, //1362 #HANGUL SYLLABLE TIKEUT YA KIYEOK + {0x88C1, 0xB31E}, //1363 #HANGUL SYLLABLE TIKEUT YA SSANGKIYEOK + {0x88C2, 0xB31F}, //1364 #HANGUL SYLLABLE TIKEUT YA KIYEOKSIOS + {0x88C3, 0xB320}, //1365 #HANGUL SYLLABLE TIKEUT YA NIEUN + {0x88C4, 0xB321}, //1366 #HANGUL SYLLABLE TIKEUT YA NIEUNCIEUC + {0x88C5, 0xB322}, //1367 #HANGUL SYLLABLE TIKEUT YA NIEUNHIEUH + {0x88C6, 0xB323}, //1368 #HANGUL SYLLABLE TIKEUT YA TIKEUT + {0x88C7, 0xB324}, //1369 #HANGUL SYLLABLE TIKEUT YA RIEUL + {0x88C8, 0xB325}, //1370 #HANGUL SYLLABLE TIKEUT YA RIEULKIYEOK + {0x88C9, 0xB326}, //1371 #HANGUL SYLLABLE TIKEUT YA RIEULMIEUM + {0x88CA, 0xB327}, //1372 #HANGUL SYLLABLE TIKEUT YA RIEULPIEUP + {0x88CB, 0xB328}, //1373 #HANGUL SYLLABLE TIKEUT YA RIEULSIOS + {0x88CC, 0xB329}, //1374 #HANGUL SYLLABLE TIKEUT YA RIEULTHIEUTH + {0x88CD, 0xB32A}, //1375 #HANGUL SYLLABLE TIKEUT YA RIEULPHIEUPH + {0x88CE, 0xB32B}, //1376 #HANGUL SYLLABLE TIKEUT YA RIEULHIEUH + {0x88CF, 0xB32C}, //1377 #HANGUL SYLLABLE TIKEUT YA MIEUM + {0x88D0, 0xB32D}, //1378 #HANGUL SYLLABLE TIKEUT YA PIEUP + {0x88D1, 0xB32E}, //1379 #HANGUL SYLLABLE TIKEUT YA PIEUPSIOS + {0x88D2, 0xB32F}, //1380 #HANGUL SYLLABLE TIKEUT YA SIOS + {0x88D3, 0xB330}, //1381 #HANGUL SYLLABLE TIKEUT YA SSANGSIOS + {0x88D4, 0xB331}, //1382 #HANGUL SYLLABLE TIKEUT YA IEUNG + {0x88D5, 0xB332}, //1383 #HANGUL SYLLABLE TIKEUT YA CIEUC + {0x88D6, 0xB333}, //1384 #HANGUL SYLLABLE TIKEUT YA CHIEUCH + {0x88D7, 0xB334}, //1385 #HANGUL SYLLABLE TIKEUT YA KHIEUKH + {0x88D8, 0xB335}, //1386 #HANGUL SYLLABLE TIKEUT YA THIEUTH + {0x88D9, 0xB336}, //1387 #HANGUL SYLLABLE TIKEUT YA PHIEUPH + {0x88DA, 0xB337}, //1388 #HANGUL SYLLABLE TIKEUT YA HIEUH + {0x88DB, 0xB338}, //1389 #HANGUL SYLLABLE TIKEUT YAE + {0x88DC, 0xB339}, //1390 #HANGUL SYLLABLE TIKEUT YAE KIYEOK + {0x88DD, 0xB33A}, //1391 #HANGUL SYLLABLE TIKEUT YAE SSANGKIYEOK + {0x88DE, 0xB33B}, //1392 #HANGUL SYLLABLE TIKEUT YAE KIYEOKSIOS + {0x88DF, 0xB33C}, //1393 #HANGUL SYLLABLE TIKEUT YAE NIEUN + {0x88E0, 0xB33D}, //1394 #HANGUL SYLLABLE TIKEUT YAE NIEUNCIEUC + {0x88E1, 0xB33E}, //1395 #HANGUL SYLLABLE TIKEUT YAE NIEUNHIEUH + {0x88E2, 0xB33F}, //1396 #HANGUL SYLLABLE TIKEUT YAE TIKEUT + {0x88E3, 0xB340}, //1397 #HANGUL SYLLABLE TIKEUT YAE RIEUL + {0x88E4, 0xB341}, //1398 #HANGUL SYLLABLE TIKEUT YAE RIEULKIYEOK + {0x88E5, 0xB342}, //1399 #HANGUL SYLLABLE TIKEUT YAE RIEULMIEUM + {0x88E6, 0xB343}, //1400 #HANGUL SYLLABLE TIKEUT YAE RIEULPIEUP + {0x88E7, 0xB344}, //1401 #HANGUL SYLLABLE TIKEUT YAE RIEULSIOS + {0x88E8, 0xB345}, //1402 #HANGUL SYLLABLE TIKEUT YAE RIEULTHIEUTH + {0x88E9, 0xB346}, //1403 #HANGUL SYLLABLE TIKEUT YAE RIEULPHIEUPH + {0x88EA, 0xB347}, //1404 #HANGUL SYLLABLE TIKEUT YAE RIEULHIEUH + {0x88EB, 0xB348}, //1405 #HANGUL SYLLABLE TIKEUT YAE MIEUM + {0x88EC, 0xB349}, //1406 #HANGUL SYLLABLE TIKEUT YAE PIEUP + {0x88ED, 0xB34A}, //1407 #HANGUL SYLLABLE TIKEUT YAE PIEUPSIOS + {0x88EE, 0xB34B}, //1408 #HANGUL SYLLABLE TIKEUT YAE SIOS + {0x88EF, 0xB34C}, //1409 #HANGUL SYLLABLE TIKEUT YAE SSANGSIOS + {0x88F0, 0xB34D}, //1410 #HANGUL SYLLABLE TIKEUT YAE IEUNG + {0x88F1, 0xB34E}, //1411 #HANGUL SYLLABLE TIKEUT YAE CIEUC + {0x88F2, 0xB34F}, //1412 #HANGUL SYLLABLE TIKEUT YAE CHIEUCH + {0x88F3, 0xB350}, //1413 #HANGUL SYLLABLE TIKEUT YAE KHIEUKH + {0x88F4, 0xB351}, //1414 #HANGUL SYLLABLE TIKEUT YAE THIEUTH + {0x88F5, 0xB352}, //1415 #HANGUL SYLLABLE TIKEUT YAE PHIEUPH + {0x88F6, 0xB353}, //1416 #HANGUL SYLLABLE TIKEUT YAE HIEUH + {0x88F7, 0xB357}, //1417 #HANGUL SYLLABLE TIKEUT EO KIYEOKSIOS + {0x88F8, 0xB359}, //1418 #HANGUL SYLLABLE TIKEUT EO NIEUNCIEUC + {0x88F9, 0xB35A}, //1419 #HANGUL SYLLABLE TIKEUT EO NIEUNHIEUH + {0x88FA, 0xB35D}, //1420 #HANGUL SYLLABLE TIKEUT EO RIEULKIYEOK + {0x88FB, 0xB360}, //1421 #HANGUL SYLLABLE TIKEUT EO RIEULSIOS + {0x88FC, 0xB361}, //1422 #HANGUL SYLLABLE TIKEUT EO RIEULTHIEUTH + {0x88FD, 0xB362}, //1423 #HANGUL SYLLABLE TIKEUT EO RIEULPHIEUPH + {0x88FE, 0xB363}, //1424 #HANGUL SYLLABLE TIKEUT EO RIEULHIEUH + {0x8941, 0xB366}, //1425 #HANGUL SYLLABLE TIKEUT EO PIEUPSIOS + {0x8942, 0xB368}, //1426 #HANGUL SYLLABLE TIKEUT EO SSANGSIOS + {0x8943, 0xB36A}, //1427 #HANGUL SYLLABLE TIKEUT EO CIEUC + {0x8944, 0xB36C}, //1428 #HANGUL SYLLABLE TIKEUT EO KHIEUKH + {0x8945, 0xB36D}, //1429 #HANGUL SYLLABLE TIKEUT EO THIEUTH + {0x8946, 0xB36F}, //1430 #HANGUL SYLLABLE TIKEUT EO HIEUH + {0x8947, 0xB372}, //1431 #HANGUL SYLLABLE TIKEUT E SSANGKIYEOK + {0x8948, 0xB373}, //1432 #HANGUL SYLLABLE TIKEUT E KIYEOKSIOS + {0x8949, 0xB375}, //1433 #HANGUL SYLLABLE TIKEUT E NIEUNCIEUC + {0x894A, 0xB376}, //1434 #HANGUL SYLLABLE TIKEUT E NIEUNHIEUH + {0x894B, 0xB377}, //1435 #HANGUL SYLLABLE TIKEUT E TIKEUT + {0x894C, 0xB379}, //1436 #HANGUL SYLLABLE TIKEUT E RIEULKIYEOK + {0x894D, 0xB37A}, //1437 #HANGUL SYLLABLE TIKEUT E RIEULMIEUM + {0x894E, 0xB37B}, //1438 #HANGUL SYLLABLE TIKEUT E RIEULPIEUP + {0x894F, 0xB37C}, //1439 #HANGUL SYLLABLE TIKEUT E RIEULSIOS + {0x8950, 0xB37D}, //1440 #HANGUL SYLLABLE TIKEUT E RIEULTHIEUTH + {0x8951, 0xB37E}, //1441 #HANGUL SYLLABLE TIKEUT E RIEULPHIEUPH + {0x8952, 0xB37F}, //1442 #HANGUL SYLLABLE TIKEUT E RIEULHIEUH + {0x8953, 0xB382}, //1443 #HANGUL SYLLABLE TIKEUT E PIEUPSIOS + {0x8954, 0xB386}, //1444 #HANGUL SYLLABLE TIKEUT E CIEUC + {0x8955, 0xB387}, //1445 #HANGUL SYLLABLE TIKEUT E CHIEUCH + {0x8956, 0xB388}, //1446 #HANGUL SYLLABLE TIKEUT E KHIEUKH + {0x8957, 0xB389}, //1447 #HANGUL SYLLABLE TIKEUT E THIEUTH + {0x8958, 0xB38A}, //1448 #HANGUL SYLLABLE TIKEUT E PHIEUPH + {0x8959, 0xB38B}, //1449 #HANGUL SYLLABLE TIKEUT E HIEUH + {0x895A, 0xB38D}, //1450 #HANGUL SYLLABLE TIKEUT YEO KIYEOK + {0x8961, 0xB38E}, //1451 #HANGUL SYLLABLE TIKEUT YEO SSANGKIYEOK + {0x8962, 0xB38F}, //1452 #HANGUL SYLLABLE TIKEUT YEO KIYEOKSIOS + {0x8963, 0xB391}, //1453 #HANGUL SYLLABLE TIKEUT YEO NIEUNCIEUC + {0x8964, 0xB392}, //1454 #HANGUL SYLLABLE TIKEUT YEO NIEUNHIEUH + {0x8965, 0xB393}, //1455 #HANGUL SYLLABLE TIKEUT YEO TIKEUT + {0x8966, 0xB395}, //1456 #HANGUL SYLLABLE TIKEUT YEO RIEULKIYEOK + {0x8967, 0xB396}, //1457 #HANGUL SYLLABLE TIKEUT YEO RIEULMIEUM + {0x8968, 0xB397}, //1458 #HANGUL SYLLABLE TIKEUT YEO RIEULPIEUP + {0x8969, 0xB398}, //1459 #HANGUL SYLLABLE TIKEUT YEO RIEULSIOS + {0x896A, 0xB399}, //1460 #HANGUL SYLLABLE TIKEUT YEO RIEULTHIEUTH + {0x896B, 0xB39A}, //1461 #HANGUL SYLLABLE TIKEUT YEO RIEULPHIEUPH + {0x896C, 0xB39B}, //1462 #HANGUL SYLLABLE TIKEUT YEO RIEULHIEUH + {0x896D, 0xB39C}, //1463 #HANGUL SYLLABLE TIKEUT YEO MIEUM + {0x896E, 0xB39D}, //1464 #HANGUL SYLLABLE TIKEUT YEO PIEUP + {0x896F, 0xB39E}, //1465 #HANGUL SYLLABLE TIKEUT YEO PIEUPSIOS + {0x8970, 0xB39F}, //1466 #HANGUL SYLLABLE TIKEUT YEO SIOS + {0x8971, 0xB3A2}, //1467 #HANGUL SYLLABLE TIKEUT YEO CIEUC + {0x8972, 0xB3A3}, //1468 #HANGUL SYLLABLE TIKEUT YEO CHIEUCH + {0x8973, 0xB3A4}, //1469 #HANGUL SYLLABLE TIKEUT YEO KHIEUKH + {0x8974, 0xB3A5}, //1470 #HANGUL SYLLABLE TIKEUT YEO THIEUTH + {0x8975, 0xB3A6}, //1471 #HANGUL SYLLABLE TIKEUT YEO PHIEUPH + {0x8976, 0xB3A7}, //1472 #HANGUL SYLLABLE TIKEUT YEO HIEUH + {0x8977, 0xB3A9}, //1473 #HANGUL SYLLABLE TIKEUT YE KIYEOK + {0x8978, 0xB3AA}, //1474 #HANGUL SYLLABLE TIKEUT YE SSANGKIYEOK + {0x8979, 0xB3AB}, //1475 #HANGUL SYLLABLE TIKEUT YE KIYEOKSIOS + {0x897A, 0xB3AD}, //1476 #HANGUL SYLLABLE TIKEUT YE NIEUNCIEUC + {0x8981, 0xB3AE}, //1477 #HANGUL SYLLABLE TIKEUT YE NIEUNHIEUH + {0x8982, 0xB3AF}, //1478 #HANGUL SYLLABLE TIKEUT YE TIKEUT + {0x8983, 0xB3B0}, //1479 #HANGUL SYLLABLE TIKEUT YE RIEUL + {0x8984, 0xB3B1}, //1480 #HANGUL SYLLABLE TIKEUT YE RIEULKIYEOK + {0x8985, 0xB3B2}, //1481 #HANGUL SYLLABLE TIKEUT YE RIEULMIEUM + {0x8986, 0xB3B3}, //1482 #HANGUL SYLLABLE TIKEUT YE RIEULPIEUP + {0x8987, 0xB3B4}, //1483 #HANGUL SYLLABLE TIKEUT YE RIEULSIOS + {0x8988, 0xB3B5}, //1484 #HANGUL SYLLABLE TIKEUT YE RIEULTHIEUTH + {0x8989, 0xB3B6}, //1485 #HANGUL SYLLABLE TIKEUT YE RIEULPHIEUPH + {0x898A, 0xB3B7}, //1486 #HANGUL SYLLABLE TIKEUT YE RIEULHIEUH + {0x898B, 0xB3B8}, //1487 #HANGUL SYLLABLE TIKEUT YE MIEUM + {0x898C, 0xB3B9}, //1488 #HANGUL SYLLABLE TIKEUT YE PIEUP + {0x898D, 0xB3BA}, //1489 #HANGUL SYLLABLE TIKEUT YE PIEUPSIOS + {0x898E, 0xB3BB}, //1490 #HANGUL SYLLABLE TIKEUT YE SIOS + {0x898F, 0xB3BC}, //1491 #HANGUL SYLLABLE TIKEUT YE SSANGSIOS + {0x8990, 0xB3BD}, //1492 #HANGUL SYLLABLE TIKEUT YE IEUNG + {0x8991, 0xB3BE}, //1493 #HANGUL SYLLABLE TIKEUT YE CIEUC + {0x8992, 0xB3BF}, //1494 #HANGUL SYLLABLE TIKEUT YE CHIEUCH + {0x8993, 0xB3C0}, //1495 #HANGUL SYLLABLE TIKEUT YE KHIEUKH + {0x8994, 0xB3C1}, //1496 #HANGUL SYLLABLE TIKEUT YE THIEUTH + {0x8995, 0xB3C2}, //1497 #HANGUL SYLLABLE TIKEUT YE PHIEUPH + {0x8996, 0xB3C3}, //1498 #HANGUL SYLLABLE TIKEUT YE HIEUH + {0x8997, 0xB3C6}, //1499 #HANGUL SYLLABLE TIKEUT O SSANGKIYEOK + {0x8998, 0xB3C7}, //1500 #HANGUL SYLLABLE TIKEUT O KIYEOKSIOS + {0x8999, 0xB3C9}, //1501 #HANGUL SYLLABLE TIKEUT O NIEUNCIEUC + {0x899A, 0xB3CA}, //1502 #HANGUL SYLLABLE TIKEUT O NIEUNHIEUH + {0x899B, 0xB3CD}, //1503 #HANGUL SYLLABLE TIKEUT O RIEULKIYEOK + {0x899C, 0xB3CF}, //1504 #HANGUL SYLLABLE TIKEUT O RIEULPIEUP + {0x899D, 0xB3D1}, //1505 #HANGUL SYLLABLE TIKEUT O RIEULTHIEUTH + {0x899E, 0xB3D2}, //1506 #HANGUL SYLLABLE TIKEUT O RIEULPHIEUPH + {0x899F, 0xB3D3}, //1507 #HANGUL SYLLABLE TIKEUT O RIEULHIEUH + {0x89A0, 0xB3D6}, //1508 #HANGUL SYLLABLE TIKEUT O PIEUPSIOS + {0x89A1, 0xB3D8}, //1509 #HANGUL SYLLABLE TIKEUT O SSANGSIOS + {0x89A2, 0xB3DA}, //1510 #HANGUL SYLLABLE TIKEUT O CIEUC + {0x89A3, 0xB3DC}, //1511 #HANGUL SYLLABLE TIKEUT O KHIEUKH + {0x89A4, 0xB3DE}, //1512 #HANGUL SYLLABLE TIKEUT O PHIEUPH + {0x89A5, 0xB3DF}, //1513 #HANGUL SYLLABLE TIKEUT O HIEUH + {0x89A6, 0xB3E1}, //1514 #HANGUL SYLLABLE TIKEUT WA KIYEOK + {0x89A7, 0xB3E2}, //1515 #HANGUL SYLLABLE TIKEUT WA SSANGKIYEOK + {0x89A8, 0xB3E3}, //1516 #HANGUL SYLLABLE TIKEUT WA KIYEOKSIOS + {0x89A9, 0xB3E5}, //1517 #HANGUL SYLLABLE TIKEUT WA NIEUNCIEUC + {0x89AA, 0xB3E6}, //1518 #HANGUL SYLLABLE TIKEUT WA NIEUNHIEUH + {0x89AB, 0xB3E7}, //1519 #HANGUL SYLLABLE TIKEUT WA TIKEUT + {0x89AC, 0xB3E9}, //1520 #HANGUL SYLLABLE TIKEUT WA RIEULKIYEOK + {0x89AD, 0xB3EA}, //1521 #HANGUL SYLLABLE TIKEUT WA RIEULMIEUM + {0x89AE, 0xB3EB}, //1522 #HANGUL SYLLABLE TIKEUT WA RIEULPIEUP + {0x89AF, 0xB3EC}, //1523 #HANGUL SYLLABLE TIKEUT WA RIEULSIOS + {0x89B0, 0xB3ED}, //1524 #HANGUL SYLLABLE TIKEUT WA RIEULTHIEUTH + {0x89B1, 0xB3EE}, //1525 #HANGUL SYLLABLE TIKEUT WA RIEULPHIEUPH + {0x89B2, 0xB3EF}, //1526 #HANGUL SYLLABLE TIKEUT WA RIEULHIEUH + {0x89B3, 0xB3F0}, //1527 #HANGUL SYLLABLE TIKEUT WA MIEUM + {0x89B4, 0xB3F1}, //1528 #HANGUL SYLLABLE TIKEUT WA PIEUP + {0x89B5, 0xB3F2}, //1529 #HANGUL SYLLABLE TIKEUT WA PIEUPSIOS + {0x89B6, 0xB3F3}, //1530 #HANGUL SYLLABLE TIKEUT WA SIOS + {0x89B7, 0xB3F4}, //1531 #HANGUL SYLLABLE TIKEUT WA SSANGSIOS + {0x89B8, 0xB3F5}, //1532 #HANGUL SYLLABLE TIKEUT WA IEUNG + {0x89B9, 0xB3F6}, //1533 #HANGUL SYLLABLE TIKEUT WA CIEUC + {0x89BA, 0xB3F7}, //1534 #HANGUL SYLLABLE TIKEUT WA CHIEUCH + {0x89BB, 0xB3F8}, //1535 #HANGUL SYLLABLE TIKEUT WA KHIEUKH + {0x89BC, 0xB3F9}, //1536 #HANGUL SYLLABLE TIKEUT WA THIEUTH + {0x89BD, 0xB3FA}, //1537 #HANGUL SYLLABLE TIKEUT WA PHIEUPH + {0x89BE, 0xB3FB}, //1538 #HANGUL SYLLABLE TIKEUT WA HIEUH + {0x89BF, 0xB3FD}, //1539 #HANGUL SYLLABLE TIKEUT WAE KIYEOK + {0x89C0, 0xB3FE}, //1540 #HANGUL SYLLABLE TIKEUT WAE SSANGKIYEOK + {0x89C1, 0xB3FF}, //1541 #HANGUL SYLLABLE TIKEUT WAE KIYEOKSIOS + {0x89C2, 0xB400}, //1542 #HANGUL SYLLABLE TIKEUT WAE NIEUN + {0x89C3, 0xB401}, //1543 #HANGUL SYLLABLE TIKEUT WAE NIEUNCIEUC + {0x89C4, 0xB402}, //1544 #HANGUL SYLLABLE TIKEUT WAE NIEUNHIEUH + {0x89C5, 0xB403}, //1545 #HANGUL SYLLABLE TIKEUT WAE TIKEUT + {0x89C6, 0xB404}, //1546 #HANGUL SYLLABLE TIKEUT WAE RIEUL + {0x89C7, 0xB405}, //1547 #HANGUL SYLLABLE TIKEUT WAE RIEULKIYEOK + {0x89C8, 0xB406}, //1548 #HANGUL SYLLABLE TIKEUT WAE RIEULMIEUM + {0x89C9, 0xB407}, //1549 #HANGUL SYLLABLE TIKEUT WAE RIEULPIEUP + {0x89CA, 0xB408}, //1550 #HANGUL SYLLABLE TIKEUT WAE RIEULSIOS + {0x89CB, 0xB409}, //1551 #HANGUL SYLLABLE TIKEUT WAE RIEULTHIEUTH + {0x89CC, 0xB40A}, //1552 #HANGUL SYLLABLE TIKEUT WAE RIEULPHIEUPH + {0x89CD, 0xB40B}, //1553 #HANGUL SYLLABLE TIKEUT WAE RIEULHIEUH + {0x89CE, 0xB40C}, //1554 #HANGUL SYLLABLE TIKEUT WAE MIEUM + {0x89CF, 0xB40D}, //1555 #HANGUL SYLLABLE TIKEUT WAE PIEUP + {0x89D0, 0xB40E}, //1556 #HANGUL SYLLABLE TIKEUT WAE PIEUPSIOS + {0x89D1, 0xB40F}, //1557 #HANGUL SYLLABLE TIKEUT WAE SIOS + {0x89D2, 0xB411}, //1558 #HANGUL SYLLABLE TIKEUT WAE IEUNG + {0x89D3, 0xB412}, //1559 #HANGUL SYLLABLE TIKEUT WAE CIEUC + {0x89D4, 0xB413}, //1560 #HANGUL SYLLABLE TIKEUT WAE CHIEUCH + {0x89D5, 0xB414}, //1561 #HANGUL SYLLABLE TIKEUT WAE KHIEUKH + {0x89D6, 0xB415}, //1562 #HANGUL SYLLABLE TIKEUT WAE THIEUTH + {0x89D7, 0xB416}, //1563 #HANGUL SYLLABLE TIKEUT WAE PHIEUPH + {0x89D8, 0xB417}, //1564 #HANGUL SYLLABLE TIKEUT WAE HIEUH + {0x89D9, 0xB419}, //1565 #HANGUL SYLLABLE TIKEUT OE KIYEOK + {0x89DA, 0xB41A}, //1566 #HANGUL SYLLABLE TIKEUT OE SSANGKIYEOK + {0x89DB, 0xB41B}, //1567 #HANGUL SYLLABLE TIKEUT OE KIYEOKSIOS + {0x89DC, 0xB41D}, //1568 #HANGUL SYLLABLE TIKEUT OE NIEUNCIEUC + {0x89DD, 0xB41E}, //1569 #HANGUL SYLLABLE TIKEUT OE NIEUNHIEUH + {0x89DE, 0xB41F}, //1570 #HANGUL SYLLABLE TIKEUT OE TIKEUT + {0x89DF, 0xB421}, //1571 #HANGUL SYLLABLE TIKEUT OE RIEULKIYEOK + {0x89E0, 0xB422}, //1572 #HANGUL SYLLABLE TIKEUT OE RIEULMIEUM + {0x89E1, 0xB423}, //1573 #HANGUL SYLLABLE TIKEUT OE RIEULPIEUP + {0x89E2, 0xB424}, //1574 #HANGUL SYLLABLE TIKEUT OE RIEULSIOS + {0x89E3, 0xB425}, //1575 #HANGUL SYLLABLE TIKEUT OE RIEULTHIEUTH + {0x89E4, 0xB426}, //1576 #HANGUL SYLLABLE TIKEUT OE RIEULPHIEUPH + {0x89E5, 0xB427}, //1577 #HANGUL SYLLABLE TIKEUT OE RIEULHIEUH + {0x89E6, 0xB42A}, //1578 #HANGUL SYLLABLE TIKEUT OE PIEUPSIOS + {0x89E7, 0xB42C}, //1579 #HANGUL SYLLABLE TIKEUT OE SSANGSIOS + {0x89E8, 0xB42D}, //1580 #HANGUL SYLLABLE TIKEUT OE IEUNG + {0x89E9, 0xB42E}, //1581 #HANGUL SYLLABLE TIKEUT OE CIEUC + {0x89EA, 0xB42F}, //1582 #HANGUL SYLLABLE TIKEUT OE CHIEUCH + {0x89EB, 0xB430}, //1583 #HANGUL SYLLABLE TIKEUT OE KHIEUKH + {0x89EC, 0xB431}, //1584 #HANGUL SYLLABLE TIKEUT OE THIEUTH + {0x89ED, 0xB432}, //1585 #HANGUL SYLLABLE TIKEUT OE PHIEUPH + {0x89EE, 0xB433}, //1586 #HANGUL SYLLABLE TIKEUT OE HIEUH + {0x89EF, 0xB435}, //1587 #HANGUL SYLLABLE TIKEUT YO KIYEOK + {0x89F0, 0xB436}, //1588 #HANGUL SYLLABLE TIKEUT YO SSANGKIYEOK + {0x89F1, 0xB437}, //1589 #HANGUL SYLLABLE TIKEUT YO KIYEOKSIOS + {0x89F2, 0xB438}, //1590 #HANGUL SYLLABLE TIKEUT YO NIEUN + {0x89F3, 0xB439}, //1591 #HANGUL SYLLABLE TIKEUT YO NIEUNCIEUC + {0x89F4, 0xB43A}, //1592 #HANGUL SYLLABLE TIKEUT YO NIEUNHIEUH + {0x89F5, 0xB43B}, //1593 #HANGUL SYLLABLE TIKEUT YO TIKEUT + {0x89F6, 0xB43C}, //1594 #HANGUL SYLLABLE TIKEUT YO RIEUL + {0x89F7, 0xB43D}, //1595 #HANGUL SYLLABLE TIKEUT YO RIEULKIYEOK + {0x89F8, 0xB43E}, //1596 #HANGUL SYLLABLE TIKEUT YO RIEULMIEUM + {0x89F9, 0xB43F}, //1597 #HANGUL SYLLABLE TIKEUT YO RIEULPIEUP + {0x89FA, 0xB440}, //1598 #HANGUL SYLLABLE TIKEUT YO RIEULSIOS + {0x89FB, 0xB441}, //1599 #HANGUL SYLLABLE TIKEUT YO RIEULTHIEUTH + {0x89FC, 0xB442}, //1600 #HANGUL SYLLABLE TIKEUT YO RIEULPHIEUPH + {0x89FD, 0xB443}, //1601 #HANGUL SYLLABLE TIKEUT YO RIEULHIEUH + {0x89FE, 0xB444}, //1602 #HANGUL SYLLABLE TIKEUT YO MIEUM + {0x8A41, 0xB445}, //1603 #HANGUL SYLLABLE TIKEUT YO PIEUP + {0x8A42, 0xB446}, //1604 #HANGUL SYLLABLE TIKEUT YO PIEUPSIOS + {0x8A43, 0xB447}, //1605 #HANGUL SYLLABLE TIKEUT YO SIOS + {0x8A44, 0xB448}, //1606 #HANGUL SYLLABLE TIKEUT YO SSANGSIOS + {0x8A45, 0xB449}, //1607 #HANGUL SYLLABLE TIKEUT YO IEUNG + {0x8A46, 0xB44A}, //1608 #HANGUL SYLLABLE TIKEUT YO CIEUC + {0x8A47, 0xB44B}, //1609 #HANGUL SYLLABLE TIKEUT YO CHIEUCH + {0x8A48, 0xB44C}, //1610 #HANGUL SYLLABLE TIKEUT YO KHIEUKH + {0x8A49, 0xB44D}, //1611 #HANGUL SYLLABLE TIKEUT YO THIEUTH + {0x8A4A, 0xB44E}, //1612 #HANGUL SYLLABLE TIKEUT YO PHIEUPH + {0x8A4B, 0xB44F}, //1613 #HANGUL SYLLABLE TIKEUT YO HIEUH + {0x8A4C, 0xB452}, //1614 #HANGUL SYLLABLE TIKEUT U SSANGKIYEOK + {0x8A4D, 0xB453}, //1615 #HANGUL SYLLABLE TIKEUT U KIYEOKSIOS + {0x8A4E, 0xB455}, //1616 #HANGUL SYLLABLE TIKEUT U NIEUNCIEUC + {0x8A4F, 0xB456}, //1617 #HANGUL SYLLABLE TIKEUT U NIEUNHIEUH + {0x8A50, 0xB457}, //1618 #HANGUL SYLLABLE TIKEUT U TIKEUT + {0x8A51, 0xB459}, //1619 #HANGUL SYLLABLE TIKEUT U RIEULKIYEOK + {0x8A52, 0xB45A}, //1620 #HANGUL SYLLABLE TIKEUT U RIEULMIEUM + {0x8A53, 0xB45B}, //1621 #HANGUL SYLLABLE TIKEUT U RIEULPIEUP + {0x8A54, 0xB45C}, //1622 #HANGUL SYLLABLE TIKEUT U RIEULSIOS + {0x8A55, 0xB45D}, //1623 #HANGUL SYLLABLE TIKEUT U RIEULTHIEUTH + {0x8A56, 0xB45E}, //1624 #HANGUL SYLLABLE TIKEUT U RIEULPHIEUPH + {0x8A57, 0xB45F}, //1625 #HANGUL SYLLABLE TIKEUT U RIEULHIEUH + {0x8A58, 0xB462}, //1626 #HANGUL SYLLABLE TIKEUT U PIEUPSIOS + {0x8A59, 0xB464}, //1627 #HANGUL SYLLABLE TIKEUT U SSANGSIOS + {0x8A5A, 0xB466}, //1628 #HANGUL SYLLABLE TIKEUT U CIEUC + {0x8A61, 0xB467}, //1629 #HANGUL SYLLABLE TIKEUT U CHIEUCH + {0x8A62, 0xB468}, //1630 #HANGUL SYLLABLE TIKEUT U KHIEUKH + {0x8A63, 0xB469}, //1631 #HANGUL SYLLABLE TIKEUT U THIEUTH + {0x8A64, 0xB46A}, //1632 #HANGUL SYLLABLE TIKEUT U PHIEUPH + {0x8A65, 0xB46B}, //1633 #HANGUL SYLLABLE TIKEUT U HIEUH + {0x8A66, 0xB46D}, //1634 #HANGUL SYLLABLE TIKEUT WEO KIYEOK + {0x8A67, 0xB46E}, //1635 #HANGUL SYLLABLE TIKEUT WEO SSANGKIYEOK + {0x8A68, 0xB46F}, //1636 #HANGUL SYLLABLE TIKEUT WEO KIYEOKSIOS + {0x8A69, 0xB470}, //1637 #HANGUL SYLLABLE TIKEUT WEO NIEUN + {0x8A6A, 0xB471}, //1638 #HANGUL SYLLABLE TIKEUT WEO NIEUNCIEUC + {0x8A6B, 0xB472}, //1639 #HANGUL SYLLABLE TIKEUT WEO NIEUNHIEUH + {0x8A6C, 0xB473}, //1640 #HANGUL SYLLABLE TIKEUT WEO TIKEUT + {0x8A6D, 0xB474}, //1641 #HANGUL SYLLABLE TIKEUT WEO RIEUL + {0x8A6E, 0xB475}, //1642 #HANGUL SYLLABLE TIKEUT WEO RIEULKIYEOK + {0x8A6F, 0xB476}, //1643 #HANGUL SYLLABLE TIKEUT WEO RIEULMIEUM + {0x8A70, 0xB477}, //1644 #HANGUL SYLLABLE TIKEUT WEO RIEULPIEUP + {0x8A71, 0xB478}, //1645 #HANGUL SYLLABLE TIKEUT WEO RIEULSIOS + {0x8A72, 0xB479}, //1646 #HANGUL SYLLABLE TIKEUT WEO RIEULTHIEUTH + {0x8A73, 0xB47A}, //1647 #HANGUL SYLLABLE TIKEUT WEO RIEULPHIEUPH + {0x8A74, 0xB47B}, //1648 #HANGUL SYLLABLE TIKEUT WEO RIEULHIEUH + {0x8A75, 0xB47C}, //1649 #HANGUL SYLLABLE TIKEUT WEO MIEUM + {0x8A76, 0xB47D}, //1650 #HANGUL SYLLABLE TIKEUT WEO PIEUP + {0x8A77, 0xB47E}, //1651 #HANGUL SYLLABLE TIKEUT WEO PIEUPSIOS + {0x8A78, 0xB47F}, //1652 #HANGUL SYLLABLE TIKEUT WEO SIOS + {0x8A79, 0xB481}, //1653 #HANGUL SYLLABLE TIKEUT WEO IEUNG + {0x8A7A, 0xB482}, //1654 #HANGUL SYLLABLE TIKEUT WEO CIEUC + {0x8A81, 0xB483}, //1655 #HANGUL SYLLABLE TIKEUT WEO CHIEUCH + {0x8A82, 0xB484}, //1656 #HANGUL SYLLABLE TIKEUT WEO KHIEUKH + {0x8A83, 0xB485}, //1657 #HANGUL SYLLABLE TIKEUT WEO THIEUTH + {0x8A84, 0xB486}, //1658 #HANGUL SYLLABLE TIKEUT WEO PHIEUPH + {0x8A85, 0xB487}, //1659 #HANGUL SYLLABLE TIKEUT WEO HIEUH + {0x8A86, 0xB489}, //1660 #HANGUL SYLLABLE TIKEUT WE KIYEOK + {0x8A87, 0xB48A}, //1661 #HANGUL SYLLABLE TIKEUT WE SSANGKIYEOK + {0x8A88, 0xB48B}, //1662 #HANGUL SYLLABLE TIKEUT WE KIYEOKSIOS + {0x8A89, 0xB48C}, //1663 #HANGUL SYLLABLE TIKEUT WE NIEUN + {0x8A8A, 0xB48D}, //1664 #HANGUL SYLLABLE TIKEUT WE NIEUNCIEUC + {0x8A8B, 0xB48E}, //1665 #HANGUL SYLLABLE TIKEUT WE NIEUNHIEUH + {0x8A8C, 0xB48F}, //1666 #HANGUL SYLLABLE TIKEUT WE TIKEUT + {0x8A8D, 0xB490}, //1667 #HANGUL SYLLABLE TIKEUT WE RIEUL + {0x8A8E, 0xB491}, //1668 #HANGUL SYLLABLE TIKEUT WE RIEULKIYEOK + {0x8A8F, 0xB492}, //1669 #HANGUL SYLLABLE TIKEUT WE RIEULMIEUM + {0x8A90, 0xB493}, //1670 #HANGUL SYLLABLE TIKEUT WE RIEULPIEUP + {0x8A91, 0xB494}, //1671 #HANGUL SYLLABLE TIKEUT WE RIEULSIOS + {0x8A92, 0xB495}, //1672 #HANGUL SYLLABLE TIKEUT WE RIEULTHIEUTH + {0x8A93, 0xB496}, //1673 #HANGUL SYLLABLE TIKEUT WE RIEULPHIEUPH + {0x8A94, 0xB497}, //1674 #HANGUL SYLLABLE TIKEUT WE RIEULHIEUH + {0x8A95, 0xB498}, //1675 #HANGUL SYLLABLE TIKEUT WE MIEUM + {0x8A96, 0xB499}, //1676 #HANGUL SYLLABLE TIKEUT WE PIEUP + {0x8A97, 0xB49A}, //1677 #HANGUL SYLLABLE TIKEUT WE PIEUPSIOS + {0x8A98, 0xB49B}, //1678 #HANGUL SYLLABLE TIKEUT WE SIOS + {0x8A99, 0xB49C}, //1679 #HANGUL SYLLABLE TIKEUT WE SSANGSIOS + {0x8A9A, 0xB49E}, //1680 #HANGUL SYLLABLE TIKEUT WE CIEUC + {0x8A9B, 0xB49F}, //1681 #HANGUL SYLLABLE TIKEUT WE CHIEUCH + {0x8A9C, 0xB4A0}, //1682 #HANGUL SYLLABLE TIKEUT WE KHIEUKH + {0x8A9D, 0xB4A1}, //1683 #HANGUL SYLLABLE TIKEUT WE THIEUTH + {0x8A9E, 0xB4A2}, //1684 #HANGUL SYLLABLE TIKEUT WE PHIEUPH + {0x8A9F, 0xB4A3}, //1685 #HANGUL SYLLABLE TIKEUT WE HIEUH + {0x8AA0, 0xB4A5}, //1686 #HANGUL SYLLABLE TIKEUT WI KIYEOK + {0x8AA1, 0xB4A6}, //1687 #HANGUL SYLLABLE TIKEUT WI SSANGKIYEOK + {0x8AA2, 0xB4A7}, //1688 #HANGUL SYLLABLE TIKEUT WI KIYEOKSIOS + {0x8AA3, 0xB4A9}, //1689 #HANGUL SYLLABLE TIKEUT WI NIEUNCIEUC + {0x8AA4, 0xB4AA}, //1690 #HANGUL SYLLABLE TIKEUT WI NIEUNHIEUH + {0x8AA5, 0xB4AB}, //1691 #HANGUL SYLLABLE TIKEUT WI TIKEUT + {0x8AA6, 0xB4AD}, //1692 #HANGUL SYLLABLE TIKEUT WI RIEULKIYEOK + {0x8AA7, 0xB4AE}, //1693 #HANGUL SYLLABLE TIKEUT WI RIEULMIEUM + {0x8AA8, 0xB4AF}, //1694 #HANGUL SYLLABLE TIKEUT WI RIEULPIEUP + {0x8AA9, 0xB4B0}, //1695 #HANGUL SYLLABLE TIKEUT WI RIEULSIOS + {0x8AAA, 0xB4B1}, //1696 #HANGUL SYLLABLE TIKEUT WI RIEULTHIEUTH + {0x8AAB, 0xB4B2}, //1697 #HANGUL SYLLABLE TIKEUT WI RIEULPHIEUPH + {0x8AAC, 0xB4B3}, //1698 #HANGUL SYLLABLE TIKEUT WI RIEULHIEUH + {0x8AAD, 0xB4B4}, //1699 #HANGUL SYLLABLE TIKEUT WI MIEUM + {0x8AAE, 0xB4B6}, //1700 #HANGUL SYLLABLE TIKEUT WI PIEUPSIOS + {0x8AAF, 0xB4B8}, //1701 #HANGUL SYLLABLE TIKEUT WI SSANGSIOS + {0x8AB0, 0xB4BA}, //1702 #HANGUL SYLLABLE TIKEUT WI CIEUC + {0x8AB1, 0xB4BB}, //1703 #HANGUL SYLLABLE TIKEUT WI CHIEUCH + {0x8AB2, 0xB4BC}, //1704 #HANGUL SYLLABLE TIKEUT WI KHIEUKH + {0x8AB3, 0xB4BD}, //1705 #HANGUL SYLLABLE TIKEUT WI THIEUTH + {0x8AB4, 0xB4BE}, //1706 #HANGUL SYLLABLE TIKEUT WI PHIEUPH + {0x8AB5, 0xB4BF}, //1707 #HANGUL SYLLABLE TIKEUT WI HIEUH + {0x8AB6, 0xB4C1}, //1708 #HANGUL SYLLABLE TIKEUT YU KIYEOK + {0x8AB7, 0xB4C2}, //1709 #HANGUL SYLLABLE TIKEUT YU SSANGKIYEOK + {0x8AB8, 0xB4C3}, //1710 #HANGUL SYLLABLE TIKEUT YU KIYEOKSIOS + {0x8AB9, 0xB4C5}, //1711 #HANGUL SYLLABLE TIKEUT YU NIEUNCIEUC + {0x8ABA, 0xB4C6}, //1712 #HANGUL SYLLABLE TIKEUT YU NIEUNHIEUH + {0x8ABB, 0xB4C7}, //1713 #HANGUL SYLLABLE TIKEUT YU TIKEUT + {0x8ABC, 0xB4C9}, //1714 #HANGUL SYLLABLE TIKEUT YU RIEULKIYEOK + {0x8ABD, 0xB4CA}, //1715 #HANGUL SYLLABLE TIKEUT YU RIEULMIEUM + {0x8ABE, 0xB4CB}, //1716 #HANGUL SYLLABLE TIKEUT YU RIEULPIEUP + {0x8ABF, 0xB4CC}, //1717 #HANGUL SYLLABLE TIKEUT YU RIEULSIOS + {0x8AC0, 0xB4CD}, //1718 #HANGUL SYLLABLE TIKEUT YU RIEULTHIEUTH + {0x8AC1, 0xB4CE}, //1719 #HANGUL SYLLABLE TIKEUT YU RIEULPHIEUPH + {0x8AC2, 0xB4CF}, //1720 #HANGUL SYLLABLE TIKEUT YU RIEULHIEUH + {0x8AC3, 0xB4D1}, //1721 #HANGUL SYLLABLE TIKEUT YU PIEUP + {0x8AC4, 0xB4D2}, //1722 #HANGUL SYLLABLE TIKEUT YU PIEUPSIOS + {0x8AC5, 0xB4D3}, //1723 #HANGUL SYLLABLE TIKEUT YU SIOS + {0x8AC6, 0xB4D4}, //1724 #HANGUL SYLLABLE TIKEUT YU SSANGSIOS + {0x8AC7, 0xB4D6}, //1725 #HANGUL SYLLABLE TIKEUT YU CIEUC + {0x8AC8, 0xB4D7}, //1726 #HANGUL SYLLABLE TIKEUT YU CHIEUCH + {0x8AC9, 0xB4D8}, //1727 #HANGUL SYLLABLE TIKEUT YU KHIEUKH + {0x8ACA, 0xB4D9}, //1728 #HANGUL SYLLABLE TIKEUT YU THIEUTH + {0x8ACB, 0xB4DA}, //1729 #HANGUL SYLLABLE TIKEUT YU PHIEUPH + {0x8ACC, 0xB4DB}, //1730 #HANGUL SYLLABLE TIKEUT YU HIEUH + {0x8ACD, 0xB4DE}, //1731 #HANGUL SYLLABLE TIKEUT EU SSANGKIYEOK + {0x8ACE, 0xB4DF}, //1732 #HANGUL SYLLABLE TIKEUT EU KIYEOKSIOS + {0x8ACF, 0xB4E1}, //1733 #HANGUL SYLLABLE TIKEUT EU NIEUNCIEUC + {0x8AD0, 0xB4E2}, //1734 #HANGUL SYLLABLE TIKEUT EU NIEUNHIEUH + {0x8AD1, 0xB4E5}, //1735 #HANGUL SYLLABLE TIKEUT EU RIEULKIYEOK + {0x8AD2, 0xB4E7}, //1736 #HANGUL SYLLABLE TIKEUT EU RIEULPIEUP + {0x8AD3, 0xB4E8}, //1737 #HANGUL SYLLABLE TIKEUT EU RIEULSIOS + {0x8AD4, 0xB4E9}, //1738 #HANGUL SYLLABLE TIKEUT EU RIEULTHIEUTH + {0x8AD5, 0xB4EA}, //1739 #HANGUL SYLLABLE TIKEUT EU RIEULPHIEUPH + {0x8AD6, 0xB4EB}, //1740 #HANGUL SYLLABLE TIKEUT EU RIEULHIEUH + {0x8AD7, 0xB4EE}, //1741 #HANGUL SYLLABLE TIKEUT EU PIEUPSIOS + {0x8AD8, 0xB4F0}, //1742 #HANGUL SYLLABLE TIKEUT EU SSANGSIOS + {0x8AD9, 0xB4F2}, //1743 #HANGUL SYLLABLE TIKEUT EU CIEUC + {0x8ADA, 0xB4F3}, //1744 #HANGUL SYLLABLE TIKEUT EU CHIEUCH + {0x8ADB, 0xB4F4}, //1745 #HANGUL SYLLABLE TIKEUT EU KHIEUKH + {0x8ADC, 0xB4F5}, //1746 #HANGUL SYLLABLE TIKEUT EU THIEUTH + {0x8ADD, 0xB4F6}, //1747 #HANGUL SYLLABLE TIKEUT EU PHIEUPH + {0x8ADE, 0xB4F7}, //1748 #HANGUL SYLLABLE TIKEUT EU HIEUH + {0x8ADF, 0xB4F9}, //1749 #HANGUL SYLLABLE TIKEUT YI KIYEOK + {0x8AE0, 0xB4FA}, //1750 #HANGUL SYLLABLE TIKEUT YI SSANGKIYEOK + {0x8AE1, 0xB4FB}, //1751 #HANGUL SYLLABLE TIKEUT YI KIYEOKSIOS + {0x8AE2, 0xB4FC}, //1752 #HANGUL SYLLABLE TIKEUT YI NIEUN + {0x8AE3, 0xB4FD}, //1753 #HANGUL SYLLABLE TIKEUT YI NIEUNCIEUC + {0x8AE4, 0xB4FE}, //1754 #HANGUL SYLLABLE TIKEUT YI NIEUNHIEUH + {0x8AE5, 0xB4FF}, //1755 #HANGUL SYLLABLE TIKEUT YI TIKEUT + {0x8AE6, 0xB500}, //1756 #HANGUL SYLLABLE TIKEUT YI RIEUL + {0x8AE7, 0xB501}, //1757 #HANGUL SYLLABLE TIKEUT YI RIEULKIYEOK + {0x8AE8, 0xB502}, //1758 #HANGUL SYLLABLE TIKEUT YI RIEULMIEUM + {0x8AE9, 0xB503}, //1759 #HANGUL SYLLABLE TIKEUT YI RIEULPIEUP + {0x8AEA, 0xB504}, //1760 #HANGUL SYLLABLE TIKEUT YI RIEULSIOS + {0x8AEB, 0xB505}, //1761 #HANGUL SYLLABLE TIKEUT YI RIEULTHIEUTH + {0x8AEC, 0xB506}, //1762 #HANGUL SYLLABLE TIKEUT YI RIEULPHIEUPH + {0x8AED, 0xB507}, //1763 #HANGUL SYLLABLE TIKEUT YI RIEULHIEUH + {0x8AEE, 0xB508}, //1764 #HANGUL SYLLABLE TIKEUT YI MIEUM + {0x8AEF, 0xB509}, //1765 #HANGUL SYLLABLE TIKEUT YI PIEUP + {0x8AF0, 0xB50A}, //1766 #HANGUL SYLLABLE TIKEUT YI PIEUPSIOS + {0x8AF1, 0xB50B}, //1767 #HANGUL SYLLABLE TIKEUT YI SIOS + {0x8AF2, 0xB50C}, //1768 #HANGUL SYLLABLE TIKEUT YI SSANGSIOS + {0x8AF3, 0xB50D}, //1769 #HANGUL SYLLABLE TIKEUT YI IEUNG + {0x8AF4, 0xB50E}, //1770 #HANGUL SYLLABLE TIKEUT YI CIEUC + {0x8AF5, 0xB50F}, //1771 #HANGUL SYLLABLE TIKEUT YI CHIEUCH + {0x8AF6, 0xB510}, //1772 #HANGUL SYLLABLE TIKEUT YI KHIEUKH + {0x8AF7, 0xB511}, //1773 #HANGUL SYLLABLE TIKEUT YI THIEUTH + {0x8AF8, 0xB512}, //1774 #HANGUL SYLLABLE TIKEUT YI PHIEUPH + {0x8AF9, 0xB513}, //1775 #HANGUL SYLLABLE TIKEUT YI HIEUH + {0x8AFA, 0xB516}, //1776 #HANGUL SYLLABLE TIKEUT I SSANGKIYEOK + {0x8AFB, 0xB517}, //1777 #HANGUL SYLLABLE TIKEUT I KIYEOKSIOS + {0x8AFC, 0xB519}, //1778 #HANGUL SYLLABLE TIKEUT I NIEUNCIEUC + {0x8AFD, 0xB51A}, //1779 #HANGUL SYLLABLE TIKEUT I NIEUNHIEUH + {0x8AFE, 0xB51D}, //1780 #HANGUL SYLLABLE TIKEUT I RIEULKIYEOK + {0x8B41, 0xB51E}, //1781 #HANGUL SYLLABLE TIKEUT I RIEULMIEUM + {0x8B42, 0xB51F}, //1782 #HANGUL SYLLABLE TIKEUT I RIEULPIEUP + {0x8B43, 0xB520}, //1783 #HANGUL SYLLABLE TIKEUT I RIEULSIOS + {0x8B44, 0xB521}, //1784 #HANGUL SYLLABLE TIKEUT I RIEULTHIEUTH + {0x8B45, 0xB522}, //1785 #HANGUL SYLLABLE TIKEUT I RIEULPHIEUPH + {0x8B46, 0xB523}, //1786 #HANGUL SYLLABLE TIKEUT I RIEULHIEUH + {0x8B47, 0xB526}, //1787 #HANGUL SYLLABLE TIKEUT I PIEUPSIOS + {0x8B48, 0xB52B}, //1788 #HANGUL SYLLABLE TIKEUT I CHIEUCH + {0x8B49, 0xB52C}, //1789 #HANGUL SYLLABLE TIKEUT I KHIEUKH + {0x8B4A, 0xB52D}, //1790 #HANGUL SYLLABLE TIKEUT I THIEUTH + {0x8B4B, 0xB52E}, //1791 #HANGUL SYLLABLE TIKEUT I PHIEUPH + {0x8B4C, 0xB52F}, //1792 #HANGUL SYLLABLE TIKEUT I HIEUH + {0x8B4D, 0xB532}, //1793 #HANGUL SYLLABLE SSANGTIKEUT A SSANGKIYEOK + {0x8B4E, 0xB533}, //1794 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOKSIOS + {0x8B4F, 0xB535}, //1795 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNCIEUC + {0x8B50, 0xB536}, //1796 #HANGUL SYLLABLE SSANGTIKEUT A NIEUNHIEUH + {0x8B51, 0xB537}, //1797 #HANGUL SYLLABLE SSANGTIKEUT A TIKEUT + {0x8B52, 0xB539}, //1798 #HANGUL SYLLABLE SSANGTIKEUT A RIEULKIYEOK + {0x8B53, 0xB53A}, //1799 #HANGUL SYLLABLE SSANGTIKEUT A RIEULMIEUM + {0x8B54, 0xB53B}, //1800 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPIEUP + {0x8B55, 0xB53C}, //1801 #HANGUL SYLLABLE SSANGTIKEUT A RIEULSIOS + {0x8B56, 0xB53D}, //1802 #HANGUL SYLLABLE SSANGTIKEUT A RIEULTHIEUTH + {0x8B57, 0xB53E}, //1803 #HANGUL SYLLABLE SSANGTIKEUT A RIEULPHIEUPH + {0x8B58, 0xB53F}, //1804 #HANGUL SYLLABLE SSANGTIKEUT A RIEULHIEUH + {0x8B59, 0xB542}, //1805 #HANGUL SYLLABLE SSANGTIKEUT A PIEUPSIOS + {0x8B5A, 0xB546}, //1806 #HANGUL SYLLABLE SSANGTIKEUT A CIEUC + {0x8B61, 0xB547}, //1807 #HANGUL SYLLABLE SSANGTIKEUT A CHIEUCH + {0x8B62, 0xB548}, //1808 #HANGUL SYLLABLE SSANGTIKEUT A KHIEUKH + {0x8B63, 0xB549}, //1809 #HANGUL SYLLABLE SSANGTIKEUT A THIEUTH + {0x8B64, 0xB54A}, //1810 #HANGUL SYLLABLE SSANGTIKEUT A PHIEUPH + {0x8B65, 0xB54E}, //1811 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGKIYEOK + {0x8B66, 0xB54F}, //1812 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOKSIOS + {0x8B67, 0xB551}, //1813 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNCIEUC + {0x8B68, 0xB552}, //1814 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUNHIEUH + {0x8B69, 0xB553}, //1815 #HANGUL SYLLABLE SSANGTIKEUT AE TIKEUT + {0x8B6A, 0xB555}, //1816 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULKIYEOK + {0x8B6B, 0xB556}, //1817 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULMIEUM + {0x8B6C, 0xB557}, //1818 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPIEUP + {0x8B6D, 0xB558}, //1819 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULSIOS + {0x8B6E, 0xB559}, //1820 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULTHIEUTH + {0x8B6F, 0xB55A}, //1821 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULPHIEUPH + {0x8B70, 0xB55B}, //1822 #HANGUL SYLLABLE SSANGTIKEUT AE RIEULHIEUH + {0x8B71, 0xB55E}, //1823 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUPSIOS + {0x8B72, 0xB562}, //1824 #HANGUL SYLLABLE SSANGTIKEUT AE CIEUC + {0x8B73, 0xB563}, //1825 #HANGUL SYLLABLE SSANGTIKEUT AE CHIEUCH + {0x8B74, 0xB564}, //1826 #HANGUL SYLLABLE SSANGTIKEUT AE KHIEUKH + {0x8B75, 0xB565}, //1827 #HANGUL SYLLABLE SSANGTIKEUT AE THIEUTH + {0x8B76, 0xB566}, //1828 #HANGUL SYLLABLE SSANGTIKEUT AE PHIEUPH + {0x8B77, 0xB567}, //1829 #HANGUL SYLLABLE SSANGTIKEUT AE HIEUH + {0x8B78, 0xB568}, //1830 #HANGUL SYLLABLE SSANGTIKEUT YA + {0x8B79, 0xB569}, //1831 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOK + {0x8B7A, 0xB56A}, //1832 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGKIYEOK + {0x8B81, 0xB56B}, //1833 #HANGUL SYLLABLE SSANGTIKEUT YA KIYEOKSIOS + {0x8B82, 0xB56C}, //1834 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUN + {0x8B83, 0xB56D}, //1835 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNCIEUC + {0x8B84, 0xB56E}, //1836 #HANGUL SYLLABLE SSANGTIKEUT YA NIEUNHIEUH + {0x8B85, 0xB56F}, //1837 #HANGUL SYLLABLE SSANGTIKEUT YA TIKEUT + {0x8B86, 0xB570}, //1838 #HANGUL SYLLABLE SSANGTIKEUT YA RIEUL + {0x8B87, 0xB571}, //1839 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULKIYEOK + {0x8B88, 0xB572}, //1840 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULMIEUM + {0x8B89, 0xB573}, //1841 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPIEUP + {0x8B8A, 0xB574}, //1842 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULSIOS + {0x8B8B, 0xB575}, //1843 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULTHIEUTH + {0x8B8C, 0xB576}, //1844 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULPHIEUPH + {0x8B8D, 0xB577}, //1845 #HANGUL SYLLABLE SSANGTIKEUT YA RIEULHIEUH + {0x8B8E, 0xB578}, //1846 #HANGUL SYLLABLE SSANGTIKEUT YA MIEUM + {0x8B8F, 0xB579}, //1847 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUP + {0x8B90, 0xB57A}, //1848 #HANGUL SYLLABLE SSANGTIKEUT YA PIEUPSIOS + {0x8B91, 0xB57B}, //1849 #HANGUL SYLLABLE SSANGTIKEUT YA SIOS + {0x8B92, 0xB57C}, //1850 #HANGUL SYLLABLE SSANGTIKEUT YA SSANGSIOS + {0x8B93, 0xB57D}, //1851 #HANGUL SYLLABLE SSANGTIKEUT YA IEUNG + {0x8B94, 0xB57E}, //1852 #HANGUL SYLLABLE SSANGTIKEUT YA CIEUC + {0x8B95, 0xB57F}, //1853 #HANGUL SYLLABLE SSANGTIKEUT YA CHIEUCH + {0x8B96, 0xB580}, //1854 #HANGUL SYLLABLE SSANGTIKEUT YA KHIEUKH + {0x8B97, 0xB581}, //1855 #HANGUL SYLLABLE SSANGTIKEUT YA THIEUTH + {0x8B98, 0xB582}, //1856 #HANGUL SYLLABLE SSANGTIKEUT YA PHIEUPH + {0x8B99, 0xB583}, //1857 #HANGUL SYLLABLE SSANGTIKEUT YA HIEUH + {0x8B9A, 0xB584}, //1858 #HANGUL SYLLABLE SSANGTIKEUT YAE + {0x8B9B, 0xB585}, //1859 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOK + {0x8B9C, 0xB586}, //1860 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGKIYEOK + {0x8B9D, 0xB587}, //1861 #HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOKSIOS + {0x8B9E, 0xB588}, //1862 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUN + {0x8B9F, 0xB589}, //1863 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNCIEUC + {0x8BA0, 0xB58A}, //1864 #HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNHIEUH + {0x8BA1, 0xB58B}, //1865 #HANGUL SYLLABLE SSANGTIKEUT YAE TIKEUT + {0x8BA2, 0xB58C}, //1866 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEUL + {0x8BA3, 0xB58D}, //1867 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULKIYEOK + {0x8BA4, 0xB58E}, //1868 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULMIEUM + {0x8BA5, 0xB58F}, //1869 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPIEUP + {0x8BA6, 0xB590}, //1870 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULSIOS + {0x8BA7, 0xB591}, //1871 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULTHIEUTH + {0x8BA8, 0xB592}, //1872 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPHIEUPH + {0x8BA9, 0xB593}, //1873 #HANGUL SYLLABLE SSANGTIKEUT YAE RIEULHIEUH + {0x8BAA, 0xB594}, //1874 #HANGUL SYLLABLE SSANGTIKEUT YAE MIEUM + {0x8BAB, 0xB595}, //1875 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUP + {0x8BAC, 0xB596}, //1876 #HANGUL SYLLABLE SSANGTIKEUT YAE PIEUPSIOS + {0x8BAD, 0xB597}, //1877 #HANGUL SYLLABLE SSANGTIKEUT YAE SIOS + {0x8BAE, 0xB598}, //1878 #HANGUL SYLLABLE SSANGTIKEUT YAE SSANGSIOS + {0x8BAF, 0xB599}, //1879 #HANGUL SYLLABLE SSANGTIKEUT YAE IEUNG + {0x8BB0, 0xB59A}, //1880 #HANGUL SYLLABLE SSANGTIKEUT YAE CIEUC + {0x8BB1, 0xB59B}, //1881 #HANGUL SYLLABLE SSANGTIKEUT YAE CHIEUCH + {0x8BB2, 0xB59C}, //1882 #HANGUL SYLLABLE SSANGTIKEUT YAE KHIEUKH + {0x8BB3, 0xB59D}, //1883 #HANGUL SYLLABLE SSANGTIKEUT YAE THIEUTH + {0x8BB4, 0xB59E}, //1884 #HANGUL SYLLABLE SSANGTIKEUT YAE PHIEUPH + {0x8BB5, 0xB59F}, //1885 #HANGUL SYLLABLE SSANGTIKEUT YAE HIEUH + {0x8BB6, 0xB5A2}, //1886 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGKIYEOK + {0x8BB7, 0xB5A3}, //1887 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOKSIOS + {0x8BB8, 0xB5A5}, //1888 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNCIEUC + {0x8BB9, 0xB5A6}, //1889 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUNHIEUH + {0x8BBA, 0xB5A7}, //1890 #HANGUL SYLLABLE SSANGTIKEUT EO TIKEUT + {0x8BBB, 0xB5A9}, //1891 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULKIYEOK + {0x8BBC, 0xB5AC}, //1892 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULSIOS + {0x8BBD, 0xB5AD}, //1893 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULTHIEUTH + {0x8BBE, 0xB5AE}, //1894 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPHIEUPH + {0x8BBF, 0xB5AF}, //1895 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULHIEUH + {0x8BC0, 0xB5B2}, //1896 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUPSIOS + {0x8BC1, 0xB5B6}, //1897 #HANGUL SYLLABLE SSANGTIKEUT EO CIEUC + {0x8BC2, 0xB5B7}, //1898 #HANGUL SYLLABLE SSANGTIKEUT EO CHIEUCH + {0x8BC3, 0xB5B8}, //1899 #HANGUL SYLLABLE SSANGTIKEUT EO KHIEUKH + {0x8BC4, 0xB5B9}, //1900 #HANGUL SYLLABLE SSANGTIKEUT EO THIEUTH + {0x8BC5, 0xB5BA}, //1901 #HANGUL SYLLABLE SSANGTIKEUT EO PHIEUPH + {0x8BC6, 0xB5BE}, //1902 #HANGUL SYLLABLE SSANGTIKEUT E SSANGKIYEOK + {0x8BC7, 0xB5BF}, //1903 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOKSIOS + {0x8BC8, 0xB5C1}, //1904 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNCIEUC + {0x8BC9, 0xB5C2}, //1905 #HANGUL SYLLABLE SSANGTIKEUT E NIEUNHIEUH + {0x8BCA, 0xB5C3}, //1906 #HANGUL SYLLABLE SSANGTIKEUT E TIKEUT + {0x8BCB, 0xB5C5}, //1907 #HANGUL SYLLABLE SSANGTIKEUT E RIEULKIYEOK + {0x8BCC, 0xB5C6}, //1908 #HANGUL SYLLABLE SSANGTIKEUT E RIEULMIEUM + {0x8BCD, 0xB5C7}, //1909 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPIEUP + {0x8BCE, 0xB5C8}, //1910 #HANGUL SYLLABLE SSANGTIKEUT E RIEULSIOS + {0x8BCF, 0xB5C9}, //1911 #HANGUL SYLLABLE SSANGTIKEUT E RIEULTHIEUTH + {0x8BD0, 0xB5CA}, //1912 #HANGUL SYLLABLE SSANGTIKEUT E RIEULPHIEUPH + {0x8BD1, 0xB5CB}, //1913 #HANGUL SYLLABLE SSANGTIKEUT E RIEULHIEUH + {0x8BD2, 0xB5CE}, //1914 #HANGUL SYLLABLE SSANGTIKEUT E PIEUPSIOS + {0x8BD3, 0xB5D2}, //1915 #HANGUL SYLLABLE SSANGTIKEUT E CIEUC + {0x8BD4, 0xB5D3}, //1916 #HANGUL SYLLABLE SSANGTIKEUT E CHIEUCH + {0x8BD5, 0xB5D4}, //1917 #HANGUL SYLLABLE SSANGTIKEUT E KHIEUKH + {0x8BD6, 0xB5D5}, //1918 #HANGUL SYLLABLE SSANGTIKEUT E THIEUTH + {0x8BD7, 0xB5D6}, //1919 #HANGUL SYLLABLE SSANGTIKEUT E PHIEUPH + {0x8BD8, 0xB5D7}, //1920 #HANGUL SYLLABLE SSANGTIKEUT E HIEUH + {0x8BD9, 0xB5D9}, //1921 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOK + {0x8BDA, 0xB5DA}, //1922 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGKIYEOK + {0x8BDB, 0xB5DB}, //1923 #HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOKSIOS + {0x8BDC, 0xB5DC}, //1924 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUN + {0x8BDD, 0xB5DD}, //1925 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNCIEUC + {0x8BDE, 0xB5DE}, //1926 #HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNHIEUH + {0x8BDF, 0xB5DF}, //1927 #HANGUL SYLLABLE SSANGTIKEUT YEO TIKEUT + {0x8BE0, 0xB5E0}, //1928 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEUL + {0x8BE1, 0xB5E1}, //1929 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULKIYEOK + {0x8BE2, 0xB5E2}, //1930 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULMIEUM + {0x8BE3, 0xB5E3}, //1931 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPIEUP + {0x8BE4, 0xB5E4}, //1932 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULSIOS + {0x8BE5, 0xB5E5}, //1933 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULTHIEUTH + {0x8BE6, 0xB5E6}, //1934 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPHIEUPH + {0x8BE7, 0xB5E7}, //1935 #HANGUL SYLLABLE SSANGTIKEUT YEO RIEULHIEUH + {0x8BE8, 0xB5E8}, //1936 #HANGUL SYLLABLE SSANGTIKEUT YEO MIEUM + {0x8BE9, 0xB5E9}, //1937 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUP + {0x8BEA, 0xB5EA}, //1938 #HANGUL SYLLABLE SSANGTIKEUT YEO PIEUPSIOS + {0x8BEB, 0xB5EB}, //1939 #HANGUL SYLLABLE SSANGTIKEUT YEO SIOS + {0x8BEC, 0xB5ED}, //1940 #HANGUL SYLLABLE SSANGTIKEUT YEO IEUNG + {0x8BED, 0xB5EE}, //1941 #HANGUL SYLLABLE SSANGTIKEUT YEO CIEUC + {0x8BEE, 0xB5EF}, //1942 #HANGUL SYLLABLE SSANGTIKEUT YEO CHIEUCH + {0x8BEF, 0xB5F0}, //1943 #HANGUL SYLLABLE SSANGTIKEUT YEO KHIEUKH + {0x8BF0, 0xB5F1}, //1944 #HANGUL SYLLABLE SSANGTIKEUT YEO THIEUTH + {0x8BF1, 0xB5F2}, //1945 #HANGUL SYLLABLE SSANGTIKEUT YEO PHIEUPH + {0x8BF2, 0xB5F3}, //1946 #HANGUL SYLLABLE SSANGTIKEUT YEO HIEUH + {0x8BF3, 0xB5F4}, //1947 #HANGUL SYLLABLE SSANGTIKEUT YE + {0x8BF4, 0xB5F5}, //1948 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOK + {0x8BF5, 0xB5F6}, //1949 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGKIYEOK + {0x8BF6, 0xB5F7}, //1950 #HANGUL SYLLABLE SSANGTIKEUT YE KIYEOKSIOS + {0x8BF7, 0xB5F8}, //1951 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUN + {0x8BF8, 0xB5F9}, //1952 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNCIEUC + {0x8BF9, 0xB5FA}, //1953 #HANGUL SYLLABLE SSANGTIKEUT YE NIEUNHIEUH + {0x8BFA, 0xB5FB}, //1954 #HANGUL SYLLABLE SSANGTIKEUT YE TIKEUT + {0x8BFB, 0xB5FC}, //1955 #HANGUL SYLLABLE SSANGTIKEUT YE RIEUL + {0x8BFC, 0xB5FD}, //1956 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULKIYEOK + {0x8BFD, 0xB5FE}, //1957 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULMIEUM + {0x8BFE, 0xB5FF}, //1958 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPIEUP + {0x8C41, 0xB600}, //1959 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULSIOS + {0x8C42, 0xB601}, //1960 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULTHIEUTH + {0x8C43, 0xB602}, //1961 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULPHIEUPH + {0x8C44, 0xB603}, //1962 #HANGUL SYLLABLE SSANGTIKEUT YE RIEULHIEUH + {0x8C45, 0xB604}, //1963 #HANGUL SYLLABLE SSANGTIKEUT YE MIEUM + {0x8C46, 0xB605}, //1964 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUP + {0x8C47, 0xB606}, //1965 #HANGUL SYLLABLE SSANGTIKEUT YE PIEUPSIOS + {0x8C48, 0xB607}, //1966 #HANGUL SYLLABLE SSANGTIKEUT YE SIOS + {0x8C49, 0xB608}, //1967 #HANGUL SYLLABLE SSANGTIKEUT YE SSANGSIOS + {0x8C4A, 0xB609}, //1968 #HANGUL SYLLABLE SSANGTIKEUT YE IEUNG + {0x8C4B, 0xB60A}, //1969 #HANGUL SYLLABLE SSANGTIKEUT YE CIEUC + {0x8C4C, 0xB60B}, //1970 #HANGUL SYLLABLE SSANGTIKEUT YE CHIEUCH + {0x8C4D, 0xB60C}, //1971 #HANGUL SYLLABLE SSANGTIKEUT YE KHIEUKH + {0x8C4E, 0xB60D}, //1972 #HANGUL SYLLABLE SSANGTIKEUT YE THIEUTH + {0x8C4F, 0xB60E}, //1973 #HANGUL SYLLABLE SSANGTIKEUT YE PHIEUPH + {0x8C50, 0xB60F}, //1974 #HANGUL SYLLABLE SSANGTIKEUT YE HIEUH + {0x8C51, 0xB612}, //1975 #HANGUL SYLLABLE SSANGTIKEUT O SSANGKIYEOK + {0x8C52, 0xB613}, //1976 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOKSIOS + {0x8C53, 0xB615}, //1977 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNCIEUC + {0x8C54, 0xB616}, //1978 #HANGUL SYLLABLE SSANGTIKEUT O NIEUNHIEUH + {0x8C55, 0xB617}, //1979 #HANGUL SYLLABLE SSANGTIKEUT O TIKEUT + {0x8C56, 0xB619}, //1980 #HANGUL SYLLABLE SSANGTIKEUT O RIEULKIYEOK + {0x8C57, 0xB61A}, //1981 #HANGUL SYLLABLE SSANGTIKEUT O RIEULMIEUM + {0x8C58, 0xB61B}, //1982 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPIEUP + {0x8C59, 0xB61C}, //1983 #HANGUL SYLLABLE SSANGTIKEUT O RIEULSIOS + {0x8C5A, 0xB61D}, //1984 #HANGUL SYLLABLE SSANGTIKEUT O RIEULTHIEUTH + {0x8C61, 0xB61E}, //1985 #HANGUL SYLLABLE SSANGTIKEUT O RIEULPHIEUPH + {0x8C62, 0xB61F}, //1986 #HANGUL SYLLABLE SSANGTIKEUT O RIEULHIEUH + {0x8C63, 0xB620}, //1987 #HANGUL SYLLABLE SSANGTIKEUT O MIEUM + {0x8C64, 0xB621}, //1988 #HANGUL SYLLABLE SSANGTIKEUT O PIEUP + {0x8C65, 0xB622}, //1989 #HANGUL SYLLABLE SSANGTIKEUT O PIEUPSIOS + {0x8C66, 0xB623}, //1990 #HANGUL SYLLABLE SSANGTIKEUT O SIOS + {0x8C67, 0xB624}, //1991 #HANGUL SYLLABLE SSANGTIKEUT O SSANGSIOS + {0x8C68, 0xB626}, //1992 #HANGUL SYLLABLE SSANGTIKEUT O CIEUC + {0x8C69, 0xB627}, //1993 #HANGUL SYLLABLE SSANGTIKEUT O CHIEUCH + {0x8C6A, 0xB628}, //1994 #HANGUL SYLLABLE SSANGTIKEUT O KHIEUKH + {0x8C6B, 0xB629}, //1995 #HANGUL SYLLABLE SSANGTIKEUT O THIEUTH + {0x8C6C, 0xB62A}, //1996 #HANGUL SYLLABLE SSANGTIKEUT O PHIEUPH + {0x8C6D, 0xB62B}, //1997 #HANGUL SYLLABLE SSANGTIKEUT O HIEUH + {0x8C6E, 0xB62D}, //1998 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOK + {0x8C6F, 0xB62E}, //1999 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGKIYEOK + {0x8C70, 0xB62F}, //2000 #HANGUL SYLLABLE SSANGTIKEUT WA KIYEOKSIOS + {0x8C71, 0xB630}, //2001 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUN + {0x8C72, 0xB631}, //2002 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNCIEUC + {0x8C73, 0xB632}, //2003 #HANGUL SYLLABLE SSANGTIKEUT WA NIEUNHIEUH + {0x8C74, 0xB633}, //2004 #HANGUL SYLLABLE SSANGTIKEUT WA TIKEUT + {0x8C75, 0xB635}, //2005 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULKIYEOK + {0x8C76, 0xB636}, //2006 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULMIEUM + {0x8C77, 0xB637}, //2007 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPIEUP + {0x8C78, 0xB638}, //2008 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULSIOS + {0x8C79, 0xB639}, //2009 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULTHIEUTH + {0x8C7A, 0xB63A}, //2010 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULPHIEUPH + {0x8C81, 0xB63B}, //2011 #HANGUL SYLLABLE SSANGTIKEUT WA RIEULHIEUH + {0x8C82, 0xB63C}, //2012 #HANGUL SYLLABLE SSANGTIKEUT WA MIEUM + {0x8C83, 0xB63D}, //2013 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUP + {0x8C84, 0xB63E}, //2014 #HANGUL SYLLABLE SSANGTIKEUT WA PIEUPSIOS + {0x8C85, 0xB63F}, //2015 #HANGUL SYLLABLE SSANGTIKEUT WA SIOS + {0x8C86, 0xB640}, //2016 #HANGUL SYLLABLE SSANGTIKEUT WA SSANGSIOS + {0x8C87, 0xB641}, //2017 #HANGUL SYLLABLE SSANGTIKEUT WA IEUNG + {0x8C88, 0xB642}, //2018 #HANGUL SYLLABLE SSANGTIKEUT WA CIEUC + {0x8C89, 0xB643}, //2019 #HANGUL SYLLABLE SSANGTIKEUT WA CHIEUCH + {0x8C8A, 0xB644}, //2020 #HANGUL SYLLABLE SSANGTIKEUT WA KHIEUKH + {0x8C8B, 0xB645}, //2021 #HANGUL SYLLABLE SSANGTIKEUT WA THIEUTH + {0x8C8C, 0xB646}, //2022 #HANGUL SYLLABLE SSANGTIKEUT WA PHIEUPH + {0x8C8D, 0xB647}, //2023 #HANGUL SYLLABLE SSANGTIKEUT WA HIEUH + {0x8C8E, 0xB649}, //2024 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOK + {0x8C8F, 0xB64A}, //2025 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGKIYEOK + {0x8C90, 0xB64B}, //2026 #HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOKSIOS + {0x8C91, 0xB64C}, //2027 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUN + {0x8C92, 0xB64D}, //2028 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNCIEUC + {0x8C93, 0xB64E}, //2029 #HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNHIEUH + {0x8C94, 0xB64F}, //2030 #HANGUL SYLLABLE SSANGTIKEUT WAE TIKEUT + {0x8C95, 0xB650}, //2031 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEUL + {0x8C96, 0xB651}, //2032 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULKIYEOK + {0x8C97, 0xB652}, //2033 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULMIEUM + {0x8C98, 0xB653}, //2034 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPIEUP + {0x8C99, 0xB654}, //2035 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULSIOS + {0x8C9A, 0xB655}, //2036 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULTHIEUTH + {0x8C9B, 0xB656}, //2037 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPHIEUPH + {0x8C9C, 0xB657}, //2038 #HANGUL SYLLABLE SSANGTIKEUT WAE RIEULHIEUH + {0x8C9D, 0xB658}, //2039 #HANGUL SYLLABLE SSANGTIKEUT WAE MIEUM + {0x8C9E, 0xB659}, //2040 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUP + {0x8C9F, 0xB65A}, //2041 #HANGUL SYLLABLE SSANGTIKEUT WAE PIEUPSIOS + {0x8CA0, 0xB65B}, //2042 #HANGUL SYLLABLE SSANGTIKEUT WAE SIOS + {0x8CA1, 0xB65C}, //2043 #HANGUL SYLLABLE SSANGTIKEUT WAE SSANGSIOS + {0x8CA2, 0xB65D}, //2044 #HANGUL SYLLABLE SSANGTIKEUT WAE IEUNG + {0x8CA3, 0xB65E}, //2045 #HANGUL SYLLABLE SSANGTIKEUT WAE CIEUC + {0x8CA4, 0xB65F}, //2046 #HANGUL SYLLABLE SSANGTIKEUT WAE CHIEUCH + {0x8CA5, 0xB660}, //2047 #HANGUL SYLLABLE SSANGTIKEUT WAE KHIEUKH + {0x8CA6, 0xB661}, //2048 #HANGUL SYLLABLE SSANGTIKEUT WAE THIEUTH + {0x8CA7, 0xB662}, //2049 #HANGUL SYLLABLE SSANGTIKEUT WAE PHIEUPH + {0x8CA8, 0xB663}, //2050 #HANGUL SYLLABLE SSANGTIKEUT WAE HIEUH + {0x8CA9, 0xB665}, //2051 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOK + {0x8CAA, 0xB666}, //2052 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGKIYEOK + {0x8CAB, 0xB667}, //2053 #HANGUL SYLLABLE SSANGTIKEUT OE KIYEOKSIOS + {0x8CAC, 0xB669}, //2054 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNCIEUC + {0x8CAD, 0xB66A}, //2055 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUNHIEUH + {0x8CAE, 0xB66B}, //2056 #HANGUL SYLLABLE SSANGTIKEUT OE TIKEUT + {0x8CAF, 0xB66C}, //2057 #HANGUL SYLLABLE SSANGTIKEUT OE RIEUL + {0x8CB0, 0xB66D}, //2058 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULKIYEOK + {0x8CB1, 0xB66E}, //2059 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULMIEUM + {0x8CB2, 0xB66F}, //2060 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPIEUP + {0x8CB3, 0xB670}, //2061 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULSIOS + {0x8CB4, 0xB671}, //2062 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULTHIEUTH + {0x8CB5, 0xB672}, //2063 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULPHIEUPH + {0x8CB6, 0xB673}, //2064 #HANGUL SYLLABLE SSANGTIKEUT OE RIEULHIEUH + {0x8CB7, 0xB674}, //2065 #HANGUL SYLLABLE SSANGTIKEUT OE MIEUM + {0x8CB8, 0xB675}, //2066 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUP + {0x8CB9, 0xB676}, //2067 #HANGUL SYLLABLE SSANGTIKEUT OE PIEUPSIOS + {0x8CBA, 0xB677}, //2068 #HANGUL SYLLABLE SSANGTIKEUT OE SIOS + {0x8CBB, 0xB678}, //2069 #HANGUL SYLLABLE SSANGTIKEUT OE SSANGSIOS + {0x8CBC, 0xB679}, //2070 #HANGUL SYLLABLE SSANGTIKEUT OE IEUNG + {0x8CBD, 0xB67A}, //2071 #HANGUL SYLLABLE SSANGTIKEUT OE CIEUC + {0x8CBE, 0xB67B}, //2072 #HANGUL SYLLABLE SSANGTIKEUT OE CHIEUCH + {0x8CBF, 0xB67C}, //2073 #HANGUL SYLLABLE SSANGTIKEUT OE KHIEUKH + {0x8CC0, 0xB67D}, //2074 #HANGUL SYLLABLE SSANGTIKEUT OE THIEUTH + {0x8CC1, 0xB67E}, //2075 #HANGUL SYLLABLE SSANGTIKEUT OE PHIEUPH + {0x8CC2, 0xB67F}, //2076 #HANGUL SYLLABLE SSANGTIKEUT OE HIEUH + {0x8CC3, 0xB680}, //2077 #HANGUL SYLLABLE SSANGTIKEUT YO + {0x8CC4, 0xB681}, //2078 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOK + {0x8CC5, 0xB682}, //2079 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGKIYEOK + {0x8CC6, 0xB683}, //2080 #HANGUL SYLLABLE SSANGTIKEUT YO KIYEOKSIOS + {0x8CC7, 0xB684}, //2081 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUN + {0x8CC8, 0xB685}, //2082 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNCIEUC + {0x8CC9, 0xB686}, //2083 #HANGUL SYLLABLE SSANGTIKEUT YO NIEUNHIEUH + {0x8CCA, 0xB687}, //2084 #HANGUL SYLLABLE SSANGTIKEUT YO TIKEUT + {0x8CCB, 0xB688}, //2085 #HANGUL SYLLABLE SSANGTIKEUT YO RIEUL + {0x8CCC, 0xB689}, //2086 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULKIYEOK + {0x8CCD, 0xB68A}, //2087 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULMIEUM + {0x8CCE, 0xB68B}, //2088 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPIEUP + {0x8CCF, 0xB68C}, //2089 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULSIOS + {0x8CD0, 0xB68D}, //2090 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULTHIEUTH + {0x8CD1, 0xB68E}, //2091 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULPHIEUPH + {0x8CD2, 0xB68F}, //2092 #HANGUL SYLLABLE SSANGTIKEUT YO RIEULHIEUH + {0x8CD3, 0xB690}, //2093 #HANGUL SYLLABLE SSANGTIKEUT YO MIEUM + {0x8CD4, 0xB691}, //2094 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUP + {0x8CD5, 0xB692}, //2095 #HANGUL SYLLABLE SSANGTIKEUT YO PIEUPSIOS + {0x8CD6, 0xB693}, //2096 #HANGUL SYLLABLE SSANGTIKEUT YO SIOS + {0x8CD7, 0xB694}, //2097 #HANGUL SYLLABLE SSANGTIKEUT YO SSANGSIOS + {0x8CD8, 0xB695}, //2098 #HANGUL SYLLABLE SSANGTIKEUT YO IEUNG + {0x8CD9, 0xB696}, //2099 #HANGUL SYLLABLE SSANGTIKEUT YO CIEUC + {0x8CDA, 0xB697}, //2100 #HANGUL SYLLABLE SSANGTIKEUT YO CHIEUCH + {0x8CDB, 0xB698}, //2101 #HANGUL SYLLABLE SSANGTIKEUT YO KHIEUKH + {0x8CDC, 0xB699}, //2102 #HANGUL SYLLABLE SSANGTIKEUT YO THIEUTH + {0x8CDD, 0xB69A}, //2103 #HANGUL SYLLABLE SSANGTIKEUT YO PHIEUPH + {0x8CDE, 0xB69B}, //2104 #HANGUL SYLLABLE SSANGTIKEUT YO HIEUH + {0x8CDF, 0xB69E}, //2105 #HANGUL SYLLABLE SSANGTIKEUT U SSANGKIYEOK + {0x8CE0, 0xB69F}, //2106 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOKSIOS + {0x8CE1, 0xB6A1}, //2107 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNCIEUC + {0x8CE2, 0xB6A2}, //2108 #HANGUL SYLLABLE SSANGTIKEUT U NIEUNHIEUH + {0x8CE3, 0xB6A3}, //2109 #HANGUL SYLLABLE SSANGTIKEUT U TIKEUT + {0x8CE4, 0xB6A5}, //2110 #HANGUL SYLLABLE SSANGTIKEUT U RIEULKIYEOK + {0x8CE5, 0xB6A6}, //2111 #HANGUL SYLLABLE SSANGTIKEUT U RIEULMIEUM + {0x8CE6, 0xB6A7}, //2112 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPIEUP + {0x8CE7, 0xB6A8}, //2113 #HANGUL SYLLABLE SSANGTIKEUT U RIEULSIOS + {0x8CE8, 0xB6A9}, //2114 #HANGUL SYLLABLE SSANGTIKEUT U RIEULTHIEUTH + {0x8CE9, 0xB6AA}, //2115 #HANGUL SYLLABLE SSANGTIKEUT U RIEULPHIEUPH + {0x8CEA, 0xB6AD}, //2116 #HANGUL SYLLABLE SSANGTIKEUT U PIEUP + {0x8CEB, 0xB6AE}, //2117 #HANGUL SYLLABLE SSANGTIKEUT U PIEUPSIOS + {0x8CEC, 0xB6AF}, //2118 #HANGUL SYLLABLE SSANGTIKEUT U SIOS + {0x8CED, 0xB6B0}, //2119 #HANGUL SYLLABLE SSANGTIKEUT U SSANGSIOS + {0x8CEE, 0xB6B2}, //2120 #HANGUL SYLLABLE SSANGTIKEUT U CIEUC + {0x8CEF, 0xB6B3}, //2121 #HANGUL SYLLABLE SSANGTIKEUT U CHIEUCH + {0x8CF0, 0xB6B4}, //2122 #HANGUL SYLLABLE SSANGTIKEUT U KHIEUKH + {0x8CF1, 0xB6B5}, //2123 #HANGUL SYLLABLE SSANGTIKEUT U THIEUTH + {0x8CF2, 0xB6B6}, //2124 #HANGUL SYLLABLE SSANGTIKEUT U PHIEUPH + {0x8CF3, 0xB6B7}, //2125 #HANGUL SYLLABLE SSANGTIKEUT U HIEUH + {0x8CF4, 0xB6B8}, //2126 #HANGUL SYLLABLE SSANGTIKEUT WEO + {0x8CF5, 0xB6B9}, //2127 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOK + {0x8CF6, 0xB6BA}, //2128 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGKIYEOK + {0x8CF7, 0xB6BB}, //2129 #HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOKSIOS + {0x8CF8, 0xB6BC}, //2130 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUN + {0x8CF9, 0xB6BD}, //2131 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNCIEUC + {0x8CFA, 0xB6BE}, //2132 #HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNHIEUH + {0x8CFB, 0xB6BF}, //2133 #HANGUL SYLLABLE SSANGTIKEUT WEO TIKEUT + {0x8CFC, 0xB6C0}, //2134 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEUL + {0x8CFD, 0xB6C1}, //2135 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULKIYEOK + {0x8CFE, 0xB6C2}, //2136 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULMIEUM + {0x8D41, 0xB6C3}, //2137 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPIEUP + {0x8D42, 0xB6C4}, //2138 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULSIOS + {0x8D43, 0xB6C5}, //2139 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULTHIEUTH + {0x8D44, 0xB6C6}, //2140 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPHIEUPH + {0x8D45, 0xB6C7}, //2141 #HANGUL SYLLABLE SSANGTIKEUT WEO RIEULHIEUH + {0x8D46, 0xB6C8}, //2142 #HANGUL SYLLABLE SSANGTIKEUT WEO MIEUM + {0x8D47, 0xB6C9}, //2143 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUP + {0x8D48, 0xB6CA}, //2144 #HANGUL SYLLABLE SSANGTIKEUT WEO PIEUPSIOS + {0x8D49, 0xB6CB}, //2145 #HANGUL SYLLABLE SSANGTIKEUT WEO SIOS + {0x8D4A, 0xB6CC}, //2146 #HANGUL SYLLABLE SSANGTIKEUT WEO SSANGSIOS + {0x8D4B, 0xB6CD}, //2147 #HANGUL SYLLABLE SSANGTIKEUT WEO IEUNG + {0x8D4C, 0xB6CE}, //2148 #HANGUL SYLLABLE SSANGTIKEUT WEO CIEUC + {0x8D4D, 0xB6CF}, //2149 #HANGUL SYLLABLE SSANGTIKEUT WEO CHIEUCH + {0x8D4E, 0xB6D0}, //2150 #HANGUL SYLLABLE SSANGTIKEUT WEO KHIEUKH + {0x8D4F, 0xB6D1}, //2151 #HANGUL SYLLABLE SSANGTIKEUT WEO THIEUTH + {0x8D50, 0xB6D2}, //2152 #HANGUL SYLLABLE SSANGTIKEUT WEO PHIEUPH + {0x8D51, 0xB6D3}, //2153 #HANGUL SYLLABLE SSANGTIKEUT WEO HIEUH + {0x8D52, 0xB6D5}, //2154 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOK + {0x8D53, 0xB6D6}, //2155 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGKIYEOK + {0x8D54, 0xB6D7}, //2156 #HANGUL SYLLABLE SSANGTIKEUT WE KIYEOKSIOS + {0x8D55, 0xB6D8}, //2157 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUN + {0x8D56, 0xB6D9}, //2158 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNCIEUC + {0x8D57, 0xB6DA}, //2159 #HANGUL SYLLABLE SSANGTIKEUT WE NIEUNHIEUH + {0x8D58, 0xB6DB}, //2160 #HANGUL SYLLABLE SSANGTIKEUT WE TIKEUT + {0x8D59, 0xB6DC}, //2161 #HANGUL SYLLABLE SSANGTIKEUT WE RIEUL + {0x8D5A, 0xB6DD}, //2162 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULKIYEOK + {0x8D61, 0xB6DE}, //2163 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULMIEUM + {0x8D62, 0xB6DF}, //2164 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPIEUP + {0x8D63, 0xB6E0}, //2165 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULSIOS + {0x8D64, 0xB6E1}, //2166 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULTHIEUTH + {0x8D65, 0xB6E2}, //2167 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULPHIEUPH + {0x8D66, 0xB6E3}, //2168 #HANGUL SYLLABLE SSANGTIKEUT WE RIEULHIEUH + {0x8D67, 0xB6E4}, //2169 #HANGUL SYLLABLE SSANGTIKEUT WE MIEUM + {0x8D68, 0xB6E5}, //2170 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUP + {0x8D69, 0xB6E6}, //2171 #HANGUL SYLLABLE SSANGTIKEUT WE PIEUPSIOS + {0x8D6A, 0xB6E7}, //2172 #HANGUL SYLLABLE SSANGTIKEUT WE SIOS + {0x8D6B, 0xB6E8}, //2173 #HANGUL SYLLABLE SSANGTIKEUT WE SSANGSIOS + {0x8D6C, 0xB6E9}, //2174 #HANGUL SYLLABLE SSANGTIKEUT WE IEUNG + {0x8D6D, 0xB6EA}, //2175 #HANGUL SYLLABLE SSANGTIKEUT WE CIEUC + {0x8D6E, 0xB6EB}, //2176 #HANGUL SYLLABLE SSANGTIKEUT WE CHIEUCH + {0x8D6F, 0xB6EC}, //2177 #HANGUL SYLLABLE SSANGTIKEUT WE KHIEUKH + {0x8D70, 0xB6ED}, //2178 #HANGUL SYLLABLE SSANGTIKEUT WE THIEUTH + {0x8D71, 0xB6EE}, //2179 #HANGUL SYLLABLE SSANGTIKEUT WE PHIEUPH + {0x8D72, 0xB6EF}, //2180 #HANGUL SYLLABLE SSANGTIKEUT WE HIEUH + {0x8D73, 0xB6F1}, //2181 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOK + {0x8D74, 0xB6F2}, //2182 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGKIYEOK + {0x8D75, 0xB6F3}, //2183 #HANGUL SYLLABLE SSANGTIKEUT WI KIYEOKSIOS + {0x8D76, 0xB6F5}, //2184 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNCIEUC + {0x8D77, 0xB6F6}, //2185 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUNHIEUH + {0x8D78, 0xB6F7}, //2186 #HANGUL SYLLABLE SSANGTIKEUT WI TIKEUT + {0x8D79, 0xB6F9}, //2187 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULKIYEOK + {0x8D7A, 0xB6FA}, //2188 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULMIEUM + {0x8D81, 0xB6FB}, //2189 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPIEUP + {0x8D82, 0xB6FC}, //2190 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULSIOS + {0x8D83, 0xB6FD}, //2191 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULTHIEUTH + {0x8D84, 0xB6FE}, //2192 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULPHIEUPH + {0x8D85, 0xB6FF}, //2193 #HANGUL SYLLABLE SSANGTIKEUT WI RIEULHIEUH + {0x8D86, 0xB702}, //2194 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUPSIOS + {0x8D87, 0xB703}, //2195 #HANGUL SYLLABLE SSANGTIKEUT WI SIOS + {0x8D88, 0xB704}, //2196 #HANGUL SYLLABLE SSANGTIKEUT WI SSANGSIOS + {0x8D89, 0xB706}, //2197 #HANGUL SYLLABLE SSANGTIKEUT WI CIEUC + {0x8D8A, 0xB707}, //2198 #HANGUL SYLLABLE SSANGTIKEUT WI CHIEUCH + {0x8D8B, 0xB708}, //2199 #HANGUL SYLLABLE SSANGTIKEUT WI KHIEUKH + {0x8D8C, 0xB709}, //2200 #HANGUL SYLLABLE SSANGTIKEUT WI THIEUTH + {0x8D8D, 0xB70A}, //2201 #HANGUL SYLLABLE SSANGTIKEUT WI PHIEUPH + {0x8D8E, 0xB70B}, //2202 #HANGUL SYLLABLE SSANGTIKEUT WI HIEUH + {0x8D8F, 0xB70C}, //2203 #HANGUL SYLLABLE SSANGTIKEUT YU + {0x8D90, 0xB70D}, //2204 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOK + {0x8D91, 0xB70E}, //2205 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGKIYEOK + {0x8D92, 0xB70F}, //2206 #HANGUL SYLLABLE SSANGTIKEUT YU KIYEOKSIOS + {0x8D93, 0xB710}, //2207 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUN + {0x8D94, 0xB711}, //2208 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNCIEUC + {0x8D95, 0xB712}, //2209 #HANGUL SYLLABLE SSANGTIKEUT YU NIEUNHIEUH + {0x8D96, 0xB713}, //2210 #HANGUL SYLLABLE SSANGTIKEUT YU TIKEUT + {0x8D97, 0xB714}, //2211 #HANGUL SYLLABLE SSANGTIKEUT YU RIEUL + {0x8D98, 0xB715}, //2212 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULKIYEOK + {0x8D99, 0xB716}, //2213 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULMIEUM + {0x8D9A, 0xB717}, //2214 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPIEUP + {0x8D9B, 0xB718}, //2215 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULSIOS + {0x8D9C, 0xB719}, //2216 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULTHIEUTH + {0x8D9D, 0xB71A}, //2217 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULPHIEUPH + {0x8D9E, 0xB71B}, //2218 #HANGUL SYLLABLE SSANGTIKEUT YU RIEULHIEUH + {0x8D9F, 0xB71C}, //2219 #HANGUL SYLLABLE SSANGTIKEUT YU MIEUM + {0x8DA0, 0xB71D}, //2220 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUP + {0x8DA1, 0xB71E}, //2221 #HANGUL SYLLABLE SSANGTIKEUT YU PIEUPSIOS + {0x8DA2, 0xB71F}, //2222 #HANGUL SYLLABLE SSANGTIKEUT YU SIOS + {0x8DA3, 0xB720}, //2223 #HANGUL SYLLABLE SSANGTIKEUT YU SSANGSIOS + {0x8DA4, 0xB721}, //2224 #HANGUL SYLLABLE SSANGTIKEUT YU IEUNG + {0x8DA5, 0xB722}, //2225 #HANGUL SYLLABLE SSANGTIKEUT YU CIEUC + {0x8DA6, 0xB723}, //2226 #HANGUL SYLLABLE SSANGTIKEUT YU CHIEUCH + {0x8DA7, 0xB724}, //2227 #HANGUL SYLLABLE SSANGTIKEUT YU KHIEUKH + {0x8DA8, 0xB725}, //2228 #HANGUL SYLLABLE SSANGTIKEUT YU THIEUTH + {0x8DA9, 0xB726}, //2229 #HANGUL SYLLABLE SSANGTIKEUT YU PHIEUPH + {0x8DAA, 0xB727}, //2230 #HANGUL SYLLABLE SSANGTIKEUT YU HIEUH + {0x8DAB, 0xB72A}, //2231 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGKIYEOK + {0x8DAC, 0xB72B}, //2232 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOKSIOS + {0x8DAD, 0xB72D}, //2233 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNCIEUC + {0x8DAE, 0xB72E}, //2234 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUNHIEUH + {0x8DAF, 0xB731}, //2235 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULKIYEOK + {0x8DB0, 0xB732}, //2236 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULMIEUM + {0x8DB1, 0xB733}, //2237 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPIEUP + {0x8DB2, 0xB734}, //2238 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULSIOS + {0x8DB3, 0xB735}, //2239 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULTHIEUTH + {0x8DB4, 0xB736}, //2240 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULPHIEUPH + {0x8DB5, 0xB737}, //2241 #HANGUL SYLLABLE SSANGTIKEUT EU RIEULHIEUH + {0x8DB6, 0xB73A}, //2242 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUPSIOS + {0x8DB7, 0xB73C}, //2243 #HANGUL SYLLABLE SSANGTIKEUT EU SSANGSIOS + {0x8DB8, 0xB73D}, //2244 #HANGUL SYLLABLE SSANGTIKEUT EU IEUNG + {0x8DB9, 0xB73E}, //2245 #HANGUL SYLLABLE SSANGTIKEUT EU CIEUC + {0x8DBA, 0xB73F}, //2246 #HANGUL SYLLABLE SSANGTIKEUT EU CHIEUCH + {0x8DBB, 0xB740}, //2247 #HANGUL SYLLABLE SSANGTIKEUT EU KHIEUKH + {0x8DBC, 0xB741}, //2248 #HANGUL SYLLABLE SSANGTIKEUT EU THIEUTH + {0x8DBD, 0xB742}, //2249 #HANGUL SYLLABLE SSANGTIKEUT EU PHIEUPH + {0x8DBE, 0xB743}, //2250 #HANGUL SYLLABLE SSANGTIKEUT EU HIEUH + {0x8DBF, 0xB745}, //2251 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOK + {0x8DC0, 0xB746}, //2252 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGKIYEOK + {0x8DC1, 0xB747}, //2253 #HANGUL SYLLABLE SSANGTIKEUT YI KIYEOKSIOS + {0x8DC2, 0xB749}, //2254 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNCIEUC + {0x8DC3, 0xB74A}, //2255 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUNHIEUH + {0x8DC4, 0xB74B}, //2256 #HANGUL SYLLABLE SSANGTIKEUT YI TIKEUT + {0x8DC5, 0xB74D}, //2257 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULKIYEOK + {0x8DC6, 0xB74E}, //2258 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULMIEUM + {0x8DC7, 0xB74F}, //2259 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPIEUP + {0x8DC8, 0xB750}, //2260 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULSIOS + {0x8DC9, 0xB751}, //2261 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULTHIEUTH + {0x8DCA, 0xB752}, //2262 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULPHIEUPH + {0x8DCB, 0xB753}, //2263 #HANGUL SYLLABLE SSANGTIKEUT YI RIEULHIEUH + {0x8DCC, 0xB756}, //2264 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUPSIOS + {0x8DCD, 0xB757}, //2265 #HANGUL SYLLABLE SSANGTIKEUT YI SIOS + {0x8DCE, 0xB758}, //2266 #HANGUL SYLLABLE SSANGTIKEUT YI SSANGSIOS + {0x8DCF, 0xB759}, //2267 #HANGUL SYLLABLE SSANGTIKEUT YI IEUNG + {0x8DD0, 0xB75A}, //2268 #HANGUL SYLLABLE SSANGTIKEUT YI CIEUC + {0x8DD1, 0xB75B}, //2269 #HANGUL SYLLABLE SSANGTIKEUT YI CHIEUCH + {0x8DD2, 0xB75C}, //2270 #HANGUL SYLLABLE SSANGTIKEUT YI KHIEUKH + {0x8DD3, 0xB75D}, //2271 #HANGUL SYLLABLE SSANGTIKEUT YI THIEUTH + {0x8DD4, 0xB75E}, //2272 #HANGUL SYLLABLE SSANGTIKEUT YI PHIEUPH + {0x8DD5, 0xB75F}, //2273 #HANGUL SYLLABLE SSANGTIKEUT YI HIEUH + {0x8DD6, 0xB761}, //2274 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOK + {0x8DD7, 0xB762}, //2275 #HANGUL SYLLABLE SSANGTIKEUT I SSANGKIYEOK + {0x8DD8, 0xB763}, //2276 #HANGUL SYLLABLE SSANGTIKEUT I KIYEOKSIOS + {0x8DD9, 0xB765}, //2277 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNCIEUC + {0x8DDA, 0xB766}, //2278 #HANGUL SYLLABLE SSANGTIKEUT I NIEUNHIEUH + {0x8DDB, 0xB767}, //2279 #HANGUL SYLLABLE SSANGTIKEUT I TIKEUT + {0x8DDC, 0xB769}, //2280 #HANGUL SYLLABLE SSANGTIKEUT I RIEULKIYEOK + {0x8DDD, 0xB76A}, //2281 #HANGUL SYLLABLE SSANGTIKEUT I RIEULMIEUM + {0x8DDE, 0xB76B}, //2282 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPIEUP + {0x8DDF, 0xB76C}, //2283 #HANGUL SYLLABLE SSANGTIKEUT I RIEULSIOS + {0x8DE0, 0xB76D}, //2284 #HANGUL SYLLABLE SSANGTIKEUT I RIEULTHIEUTH + {0x8DE1, 0xB76E}, //2285 #HANGUL SYLLABLE SSANGTIKEUT I RIEULPHIEUPH + {0x8DE2, 0xB76F}, //2286 #HANGUL SYLLABLE SSANGTIKEUT I RIEULHIEUH + {0x8DE3, 0xB772}, //2287 #HANGUL SYLLABLE SSANGTIKEUT I PIEUPSIOS + {0x8DE4, 0xB774}, //2288 #HANGUL SYLLABLE SSANGTIKEUT I SSANGSIOS + {0x8DE5, 0xB776}, //2289 #HANGUL SYLLABLE SSANGTIKEUT I CIEUC + {0x8DE6, 0xB777}, //2290 #HANGUL SYLLABLE SSANGTIKEUT I CHIEUCH + {0x8DE7, 0xB778}, //2291 #HANGUL SYLLABLE SSANGTIKEUT I KHIEUKH + {0x8DE8, 0xB779}, //2292 #HANGUL SYLLABLE SSANGTIKEUT I THIEUTH + {0x8DE9, 0xB77A}, //2293 #HANGUL SYLLABLE SSANGTIKEUT I PHIEUPH + {0x8DEA, 0xB77B}, //2294 #HANGUL SYLLABLE SSANGTIKEUT I HIEUH + {0x8DEB, 0xB77E}, //2295 #HANGUL SYLLABLE RIEUL A SSANGKIYEOK + {0x8DEC, 0xB77F}, //2296 #HANGUL SYLLABLE RIEUL A KIYEOKSIOS + {0x8DED, 0xB781}, //2297 #HANGUL SYLLABLE RIEUL A NIEUNCIEUC + {0x8DEE, 0xB782}, //2298 #HANGUL SYLLABLE RIEUL A NIEUNHIEUH + {0x8DEF, 0xB783}, //2299 #HANGUL SYLLABLE RIEUL A TIKEUT + {0x8DF0, 0xB785}, //2300 #HANGUL SYLLABLE RIEUL A RIEULKIYEOK + {0x8DF1, 0xB786}, //2301 #HANGUL SYLLABLE RIEUL A RIEULMIEUM + {0x8DF2, 0xB787}, //2302 #HANGUL SYLLABLE RIEUL A RIEULPIEUP + {0x8DF3, 0xB788}, //2303 #HANGUL SYLLABLE RIEUL A RIEULSIOS + {0x8DF4, 0xB789}, //2304 #HANGUL SYLLABLE RIEUL A RIEULTHIEUTH + {0x8DF5, 0xB78A}, //2305 #HANGUL SYLLABLE RIEUL A RIEULPHIEUPH + {0x8DF6, 0xB78B}, //2306 #HANGUL SYLLABLE RIEUL A RIEULHIEUH + {0x8DF7, 0xB78E}, //2307 #HANGUL SYLLABLE RIEUL A PIEUPSIOS + {0x8DF8, 0xB793}, //2308 #HANGUL SYLLABLE RIEUL A CHIEUCH + {0x8DF9, 0xB794}, //2309 #HANGUL SYLLABLE RIEUL A KHIEUKH + {0x8DFA, 0xB795}, //2310 #HANGUL SYLLABLE RIEUL A THIEUTH + {0x8DFB, 0xB79A}, //2311 #HANGUL SYLLABLE RIEUL AE SSANGKIYEOK + {0x8DFC, 0xB79B}, //2312 #HANGUL SYLLABLE RIEUL AE KIYEOKSIOS + {0x8DFD, 0xB79D}, //2313 #HANGUL SYLLABLE RIEUL AE NIEUNCIEUC + {0x8DFE, 0xB79E}, //2314 #HANGUL SYLLABLE RIEUL AE NIEUNHIEUH + {0x8E41, 0xB79F}, //2315 #HANGUL SYLLABLE RIEUL AE TIKEUT + {0x8E42, 0xB7A1}, //2316 #HANGUL SYLLABLE RIEUL AE RIEULKIYEOK + {0x8E43, 0xB7A2}, //2317 #HANGUL SYLLABLE RIEUL AE RIEULMIEUM + {0x8E44, 0xB7A3}, //2318 #HANGUL SYLLABLE RIEUL AE RIEULPIEUP + {0x8E45, 0xB7A4}, //2319 #HANGUL SYLLABLE RIEUL AE RIEULSIOS + {0x8E46, 0xB7A5}, //2320 #HANGUL SYLLABLE RIEUL AE RIEULTHIEUTH + {0x8E47, 0xB7A6}, //2321 #HANGUL SYLLABLE RIEUL AE RIEULPHIEUPH + {0x8E48, 0xB7A7}, //2322 #HANGUL SYLLABLE RIEUL AE RIEULHIEUH + {0x8E49, 0xB7AA}, //2323 #HANGUL SYLLABLE RIEUL AE PIEUPSIOS + {0x8E4A, 0xB7AE}, //2324 #HANGUL SYLLABLE RIEUL AE CIEUC + {0x8E4B, 0xB7AF}, //2325 #HANGUL SYLLABLE RIEUL AE CHIEUCH + {0x8E4C, 0xB7B0}, //2326 #HANGUL SYLLABLE RIEUL AE KHIEUKH + {0x8E4D, 0xB7B1}, //2327 #HANGUL SYLLABLE RIEUL AE THIEUTH + {0x8E4E, 0xB7B2}, //2328 #HANGUL SYLLABLE RIEUL AE PHIEUPH + {0x8E4F, 0xB7B3}, //2329 #HANGUL SYLLABLE RIEUL AE HIEUH + {0x8E50, 0xB7B6}, //2330 #HANGUL SYLLABLE RIEUL YA SSANGKIYEOK + {0x8E51, 0xB7B7}, //2331 #HANGUL SYLLABLE RIEUL YA KIYEOKSIOS + {0x8E52, 0xB7B9}, //2332 #HANGUL SYLLABLE RIEUL YA NIEUNCIEUC + {0x8E53, 0xB7BA}, //2333 #HANGUL SYLLABLE RIEUL YA NIEUNHIEUH + {0x8E54, 0xB7BB}, //2334 #HANGUL SYLLABLE RIEUL YA TIKEUT + {0x8E55, 0xB7BC}, //2335 #HANGUL SYLLABLE RIEUL YA RIEUL + {0x8E56, 0xB7BD}, //2336 #HANGUL SYLLABLE RIEUL YA RIEULKIYEOK + {0x8E57, 0xB7BE}, //2337 #HANGUL SYLLABLE RIEUL YA RIEULMIEUM + {0x8E58, 0xB7BF}, //2338 #HANGUL SYLLABLE RIEUL YA RIEULPIEUP + {0x8E59, 0xB7C0}, //2339 #HANGUL SYLLABLE RIEUL YA RIEULSIOS + {0x8E5A, 0xB7C1}, //2340 #HANGUL SYLLABLE RIEUL YA RIEULTHIEUTH + {0x8E61, 0xB7C2}, //2341 #HANGUL SYLLABLE RIEUL YA RIEULPHIEUPH + {0x8E62, 0xB7C3}, //2342 #HANGUL SYLLABLE RIEUL YA RIEULHIEUH + {0x8E63, 0xB7C4}, //2343 #HANGUL SYLLABLE RIEUL YA MIEUM + {0x8E64, 0xB7C5}, //2344 #HANGUL SYLLABLE RIEUL YA PIEUP + {0x8E65, 0xB7C6}, //2345 #HANGUL SYLLABLE RIEUL YA PIEUPSIOS + {0x8E66, 0xB7C8}, //2346 #HANGUL SYLLABLE RIEUL YA SSANGSIOS + {0x8E67, 0xB7CA}, //2347 #HANGUL SYLLABLE RIEUL YA CIEUC + {0x8E68, 0xB7CB}, //2348 #HANGUL SYLLABLE RIEUL YA CHIEUCH + {0x8E69, 0xB7CC}, //2349 #HANGUL SYLLABLE RIEUL YA KHIEUKH + {0x8E6A, 0xB7CD}, //2350 #HANGUL SYLLABLE RIEUL YA THIEUTH + {0x8E6B, 0xB7CE}, //2351 #HANGUL SYLLABLE RIEUL YA PHIEUPH + {0x8E6C, 0xB7CF}, //2352 #HANGUL SYLLABLE RIEUL YA HIEUH + {0x8E6D, 0xB7D0}, //2353 #HANGUL SYLLABLE RIEUL YAE + {0x8E6E, 0xB7D1}, //2354 #HANGUL SYLLABLE RIEUL YAE KIYEOK + {0x8E6F, 0xB7D2}, //2355 #HANGUL SYLLABLE RIEUL YAE SSANGKIYEOK + {0x8E70, 0xB7D3}, //2356 #HANGUL SYLLABLE RIEUL YAE KIYEOKSIOS + {0x8E71, 0xB7D4}, //2357 #HANGUL SYLLABLE RIEUL YAE NIEUN + {0x8E72, 0xB7D5}, //2358 #HANGUL SYLLABLE RIEUL YAE NIEUNCIEUC + {0x8E73, 0xB7D6}, //2359 #HANGUL SYLLABLE RIEUL YAE NIEUNHIEUH + {0x8E74, 0xB7D7}, //2360 #HANGUL SYLLABLE RIEUL YAE TIKEUT + {0x8E75, 0xB7D8}, //2361 #HANGUL SYLLABLE RIEUL YAE RIEUL + {0x8E76, 0xB7D9}, //2362 #HANGUL SYLLABLE RIEUL YAE RIEULKIYEOK + {0x8E77, 0xB7DA}, //2363 #HANGUL SYLLABLE RIEUL YAE RIEULMIEUM + {0x8E78, 0xB7DB}, //2364 #HANGUL SYLLABLE RIEUL YAE RIEULPIEUP + {0x8E79, 0xB7DC}, //2365 #HANGUL SYLLABLE RIEUL YAE RIEULSIOS + {0x8E7A, 0xB7DD}, //2366 #HANGUL SYLLABLE RIEUL YAE RIEULTHIEUTH + {0x8E81, 0xB7DE}, //2367 #HANGUL SYLLABLE RIEUL YAE RIEULPHIEUPH + {0x8E82, 0xB7DF}, //2368 #HANGUL SYLLABLE RIEUL YAE RIEULHIEUH + {0x8E83, 0xB7E0}, //2369 #HANGUL SYLLABLE RIEUL YAE MIEUM + {0x8E84, 0xB7E1}, //2370 #HANGUL SYLLABLE RIEUL YAE PIEUP + {0x8E85, 0xB7E2}, //2371 #HANGUL SYLLABLE RIEUL YAE PIEUPSIOS + {0x8E86, 0xB7E3}, //2372 #HANGUL SYLLABLE RIEUL YAE SIOS + {0x8E87, 0xB7E4}, //2373 #HANGUL SYLLABLE RIEUL YAE SSANGSIOS + {0x8E88, 0xB7E5}, //2374 #HANGUL SYLLABLE RIEUL YAE IEUNG + {0x8E89, 0xB7E6}, //2375 #HANGUL SYLLABLE RIEUL YAE CIEUC + {0x8E8A, 0xB7E7}, //2376 #HANGUL SYLLABLE RIEUL YAE CHIEUCH + {0x8E8B, 0xB7E8}, //2377 #HANGUL SYLLABLE RIEUL YAE KHIEUKH + {0x8E8C, 0xB7E9}, //2378 #HANGUL SYLLABLE RIEUL YAE THIEUTH + {0x8E8D, 0xB7EA}, //2379 #HANGUL SYLLABLE RIEUL YAE PHIEUPH + {0x8E8E, 0xB7EB}, //2380 #HANGUL SYLLABLE RIEUL YAE HIEUH + {0x8E8F, 0xB7EE}, //2381 #HANGUL SYLLABLE RIEUL EO SSANGKIYEOK + {0x8E90, 0xB7EF}, //2382 #HANGUL SYLLABLE RIEUL EO KIYEOKSIOS + {0x8E91, 0xB7F1}, //2383 #HANGUL SYLLABLE RIEUL EO NIEUNCIEUC + {0x8E92, 0xB7F2}, //2384 #HANGUL SYLLABLE RIEUL EO NIEUNHIEUH + {0x8E93, 0xB7F3}, //2385 #HANGUL SYLLABLE RIEUL EO TIKEUT + {0x8E94, 0xB7F5}, //2386 #HANGUL SYLLABLE RIEUL EO RIEULKIYEOK + {0x8E95, 0xB7F6}, //2387 #HANGUL SYLLABLE RIEUL EO RIEULMIEUM + {0x8E96, 0xB7F7}, //2388 #HANGUL SYLLABLE RIEUL EO RIEULPIEUP + {0x8E97, 0xB7F8}, //2389 #HANGUL SYLLABLE RIEUL EO RIEULSIOS + {0x8E98, 0xB7F9}, //2390 #HANGUL SYLLABLE RIEUL EO RIEULTHIEUTH + {0x8E99, 0xB7FA}, //2391 #HANGUL SYLLABLE RIEUL EO RIEULPHIEUPH + {0x8E9A, 0xB7FB}, //2392 #HANGUL SYLLABLE RIEUL EO RIEULHIEUH + {0x8E9B, 0xB7FE}, //2393 #HANGUL SYLLABLE RIEUL EO PIEUPSIOS + {0x8E9C, 0xB802}, //2394 #HANGUL SYLLABLE RIEUL EO CIEUC + {0x8E9D, 0xB803}, //2395 #HANGUL SYLLABLE RIEUL EO CHIEUCH + {0x8E9E, 0xB804}, //2396 #HANGUL SYLLABLE RIEUL EO KHIEUKH + {0x8E9F, 0xB805}, //2397 #HANGUL SYLLABLE RIEUL EO THIEUTH + {0x8EA0, 0xB806}, //2398 #HANGUL SYLLABLE RIEUL EO PHIEUPH + {0x8EA1, 0xB80A}, //2399 #HANGUL SYLLABLE RIEUL E SSANGKIYEOK + {0x8EA2, 0xB80B}, //2400 #HANGUL SYLLABLE RIEUL E KIYEOKSIOS + {0x8EA3, 0xB80D}, //2401 #HANGUL SYLLABLE RIEUL E NIEUNCIEUC + {0x8EA4, 0xB80E}, //2402 #HANGUL SYLLABLE RIEUL E NIEUNHIEUH + {0x8EA5, 0xB80F}, //2403 #HANGUL SYLLABLE RIEUL E TIKEUT + {0x8EA6, 0xB811}, //2404 #HANGUL SYLLABLE RIEUL E RIEULKIYEOK + {0x8EA7, 0xB812}, //2405 #HANGUL SYLLABLE RIEUL E RIEULMIEUM + {0x8EA8, 0xB813}, //2406 #HANGUL SYLLABLE RIEUL E RIEULPIEUP + {0x8EA9, 0xB814}, //2407 #HANGUL SYLLABLE RIEUL E RIEULSIOS + {0x8EAA, 0xB815}, //2408 #HANGUL SYLLABLE RIEUL E RIEULTHIEUTH + {0x8EAB, 0xB816}, //2409 #HANGUL SYLLABLE RIEUL E RIEULPHIEUPH + {0x8EAC, 0xB817}, //2410 #HANGUL SYLLABLE RIEUL E RIEULHIEUH + {0x8EAD, 0xB81A}, //2411 #HANGUL SYLLABLE RIEUL E PIEUPSIOS + {0x8EAE, 0xB81C}, //2412 #HANGUL SYLLABLE RIEUL E SSANGSIOS + {0x8EAF, 0xB81E}, //2413 #HANGUL SYLLABLE RIEUL E CIEUC + {0x8EB0, 0xB81F}, //2414 #HANGUL SYLLABLE RIEUL E CHIEUCH + {0x8EB1, 0xB820}, //2415 #HANGUL SYLLABLE RIEUL E KHIEUKH + {0x8EB2, 0xB821}, //2416 #HANGUL SYLLABLE RIEUL E THIEUTH + {0x8EB3, 0xB822}, //2417 #HANGUL SYLLABLE RIEUL E PHIEUPH + {0x8EB4, 0xB823}, //2418 #HANGUL SYLLABLE RIEUL E HIEUH + {0x8EB5, 0xB826}, //2419 #HANGUL SYLLABLE RIEUL YEO SSANGKIYEOK + {0x8EB6, 0xB827}, //2420 #HANGUL SYLLABLE RIEUL YEO KIYEOKSIOS + {0x8EB7, 0xB829}, //2421 #HANGUL SYLLABLE RIEUL YEO NIEUNCIEUC + {0x8EB8, 0xB82A}, //2422 #HANGUL SYLLABLE RIEUL YEO NIEUNHIEUH + {0x8EB9, 0xB82B}, //2423 #HANGUL SYLLABLE RIEUL YEO TIKEUT + {0x8EBA, 0xB82D}, //2424 #HANGUL SYLLABLE RIEUL YEO RIEULKIYEOK + {0x8EBB, 0xB82E}, //2425 #HANGUL SYLLABLE RIEUL YEO RIEULMIEUM + {0x8EBC, 0xB82F}, //2426 #HANGUL SYLLABLE RIEUL YEO RIEULPIEUP + {0x8EBD, 0xB830}, //2427 #HANGUL SYLLABLE RIEUL YEO RIEULSIOS + {0x8EBE, 0xB831}, //2428 #HANGUL SYLLABLE RIEUL YEO RIEULTHIEUTH + {0x8EBF, 0xB832}, //2429 #HANGUL SYLLABLE RIEUL YEO RIEULPHIEUPH + {0x8EC0, 0xB833}, //2430 #HANGUL SYLLABLE RIEUL YEO RIEULHIEUH + {0x8EC1, 0xB836}, //2431 #HANGUL SYLLABLE RIEUL YEO PIEUPSIOS + {0x8EC2, 0xB83A}, //2432 #HANGUL SYLLABLE RIEUL YEO CIEUC + {0x8EC3, 0xB83B}, //2433 #HANGUL SYLLABLE RIEUL YEO CHIEUCH + {0x8EC4, 0xB83C}, //2434 #HANGUL SYLLABLE RIEUL YEO KHIEUKH + {0x8EC5, 0xB83D}, //2435 #HANGUL SYLLABLE RIEUL YEO THIEUTH + {0x8EC6, 0xB83E}, //2436 #HANGUL SYLLABLE RIEUL YEO PHIEUPH + {0x8EC7, 0xB83F}, //2437 #HANGUL SYLLABLE RIEUL YEO HIEUH + {0x8EC8, 0xB841}, //2438 #HANGUL SYLLABLE RIEUL YE KIYEOK + {0x8EC9, 0xB842}, //2439 #HANGUL SYLLABLE RIEUL YE SSANGKIYEOK + {0x8ECA, 0xB843}, //2440 #HANGUL SYLLABLE RIEUL YE KIYEOKSIOS + {0x8ECB, 0xB845}, //2441 #HANGUL SYLLABLE RIEUL YE NIEUNCIEUC + {0x8ECC, 0xB846}, //2442 #HANGUL SYLLABLE RIEUL YE NIEUNHIEUH + {0x8ECD, 0xB847}, //2443 #HANGUL SYLLABLE RIEUL YE TIKEUT + {0x8ECE, 0xB848}, //2444 #HANGUL SYLLABLE RIEUL YE RIEUL + {0x8ECF, 0xB849}, //2445 #HANGUL SYLLABLE RIEUL YE RIEULKIYEOK + {0x8ED0, 0xB84A}, //2446 #HANGUL SYLLABLE RIEUL YE RIEULMIEUM + {0x8ED1, 0xB84B}, //2447 #HANGUL SYLLABLE RIEUL YE RIEULPIEUP + {0x8ED2, 0xB84C}, //2448 #HANGUL SYLLABLE RIEUL YE RIEULSIOS + {0x8ED3, 0xB84D}, //2449 #HANGUL SYLLABLE RIEUL YE RIEULTHIEUTH + {0x8ED4, 0xB84E}, //2450 #HANGUL SYLLABLE RIEUL YE RIEULPHIEUPH + {0x8ED5, 0xB84F}, //2451 #HANGUL SYLLABLE RIEUL YE RIEULHIEUH + {0x8ED6, 0xB850}, //2452 #HANGUL SYLLABLE RIEUL YE MIEUM + {0x8ED7, 0xB852}, //2453 #HANGUL SYLLABLE RIEUL YE PIEUPSIOS + {0x8ED8, 0xB854}, //2454 #HANGUL SYLLABLE RIEUL YE SSANGSIOS + {0x8ED9, 0xB855}, //2455 #HANGUL SYLLABLE RIEUL YE IEUNG + {0x8EDA, 0xB856}, //2456 #HANGUL SYLLABLE RIEUL YE CIEUC + {0x8EDB, 0xB857}, //2457 #HANGUL SYLLABLE RIEUL YE CHIEUCH + {0x8EDC, 0xB858}, //2458 #HANGUL SYLLABLE RIEUL YE KHIEUKH + {0x8EDD, 0xB859}, //2459 #HANGUL SYLLABLE RIEUL YE THIEUTH + {0x8EDE, 0xB85A}, //2460 #HANGUL SYLLABLE RIEUL YE PHIEUPH + {0x8EDF, 0xB85B}, //2461 #HANGUL SYLLABLE RIEUL YE HIEUH + {0x8EE0, 0xB85E}, //2462 #HANGUL SYLLABLE RIEUL O SSANGKIYEOK + {0x8EE1, 0xB85F}, //2463 #HANGUL SYLLABLE RIEUL O KIYEOKSIOS + {0x8EE2, 0xB861}, //2464 #HANGUL SYLLABLE RIEUL O NIEUNCIEUC + {0x8EE3, 0xB862}, //2465 #HANGUL SYLLABLE RIEUL O NIEUNHIEUH + {0x8EE4, 0xB863}, //2466 #HANGUL SYLLABLE RIEUL O TIKEUT + {0x8EE5, 0xB865}, //2467 #HANGUL SYLLABLE RIEUL O RIEULKIYEOK + {0x8EE6, 0xB866}, //2468 #HANGUL SYLLABLE RIEUL O RIEULMIEUM + {0x8EE7, 0xB867}, //2469 #HANGUL SYLLABLE RIEUL O RIEULPIEUP + {0x8EE8, 0xB868}, //2470 #HANGUL SYLLABLE RIEUL O RIEULSIOS + {0x8EE9, 0xB869}, //2471 #HANGUL SYLLABLE RIEUL O RIEULTHIEUTH + {0x8EEA, 0xB86A}, //2472 #HANGUL SYLLABLE RIEUL O RIEULPHIEUPH + {0x8EEB, 0xB86B}, //2473 #HANGUL SYLLABLE RIEUL O RIEULHIEUH + {0x8EEC, 0xB86E}, //2474 #HANGUL SYLLABLE RIEUL O PIEUPSIOS + {0x8EED, 0xB870}, //2475 #HANGUL SYLLABLE RIEUL O SSANGSIOS + {0x8EEE, 0xB872}, //2476 #HANGUL SYLLABLE RIEUL O CIEUC + {0x8EEF, 0xB873}, //2477 #HANGUL SYLLABLE RIEUL O CHIEUCH + {0x8EF0, 0xB874}, //2478 #HANGUL SYLLABLE RIEUL O KHIEUKH + {0x8EF1, 0xB875}, //2479 #HANGUL SYLLABLE RIEUL O THIEUTH + {0x8EF2, 0xB876}, //2480 #HANGUL SYLLABLE RIEUL O PHIEUPH + {0x8EF3, 0xB877}, //2481 #HANGUL SYLLABLE RIEUL O HIEUH + {0x8EF4, 0xB879}, //2482 #HANGUL SYLLABLE RIEUL WA KIYEOK + {0x8EF5, 0xB87A}, //2483 #HANGUL SYLLABLE RIEUL WA SSANGKIYEOK + {0x8EF6, 0xB87B}, //2484 #HANGUL SYLLABLE RIEUL WA KIYEOKSIOS + {0x8EF7, 0xB87D}, //2485 #HANGUL SYLLABLE RIEUL WA NIEUNCIEUC + {0x8EF8, 0xB87E}, //2486 #HANGUL SYLLABLE RIEUL WA NIEUNHIEUH + {0x8EF9, 0xB87F}, //2487 #HANGUL SYLLABLE RIEUL WA TIKEUT + {0x8EFA, 0xB880}, //2488 #HANGUL SYLLABLE RIEUL WA RIEUL + {0x8EFB, 0xB881}, //2489 #HANGUL SYLLABLE RIEUL WA RIEULKIYEOK + {0x8EFC, 0xB882}, //2490 #HANGUL SYLLABLE RIEUL WA RIEULMIEUM + {0x8EFD, 0xB883}, //2491 #HANGUL SYLLABLE RIEUL WA RIEULPIEUP + {0x8EFE, 0xB884}, //2492 #HANGUL SYLLABLE RIEUL WA RIEULSIOS + {0x8F41, 0xB885}, //2493 #HANGUL SYLLABLE RIEUL WA RIEULTHIEUTH + {0x8F42, 0xB886}, //2494 #HANGUL SYLLABLE RIEUL WA RIEULPHIEUPH + {0x8F43, 0xB887}, //2495 #HANGUL SYLLABLE RIEUL WA RIEULHIEUH + {0x8F44, 0xB888}, //2496 #HANGUL SYLLABLE RIEUL WA MIEUM + {0x8F45, 0xB889}, //2497 #HANGUL SYLLABLE RIEUL WA PIEUP + {0x8F46, 0xB88A}, //2498 #HANGUL SYLLABLE RIEUL WA PIEUPSIOS + {0x8F47, 0xB88B}, //2499 #HANGUL SYLLABLE RIEUL WA SIOS + {0x8F48, 0xB88C}, //2500 #HANGUL SYLLABLE RIEUL WA SSANGSIOS + {0x8F49, 0xB88E}, //2501 #HANGUL SYLLABLE RIEUL WA CIEUC + {0x8F4A, 0xB88F}, //2502 #HANGUL SYLLABLE RIEUL WA CHIEUCH + {0x8F4B, 0xB890}, //2503 #HANGUL SYLLABLE RIEUL WA KHIEUKH + {0x8F4C, 0xB891}, //2504 #HANGUL SYLLABLE RIEUL WA THIEUTH + {0x8F4D, 0xB892}, //2505 #HANGUL SYLLABLE RIEUL WA PHIEUPH + {0x8F4E, 0xB893}, //2506 #HANGUL SYLLABLE RIEUL WA HIEUH + {0x8F4F, 0xB894}, //2507 #HANGUL SYLLABLE RIEUL WAE + {0x8F50, 0xB895}, //2508 #HANGUL SYLLABLE RIEUL WAE KIYEOK + {0x8F51, 0xB896}, //2509 #HANGUL SYLLABLE RIEUL WAE SSANGKIYEOK + {0x8F52, 0xB897}, //2510 #HANGUL SYLLABLE RIEUL WAE KIYEOKSIOS + {0x8F53, 0xB898}, //2511 #HANGUL SYLLABLE RIEUL WAE NIEUN + {0x8F54, 0xB899}, //2512 #HANGUL SYLLABLE RIEUL WAE NIEUNCIEUC + {0x8F55, 0xB89A}, //2513 #HANGUL SYLLABLE RIEUL WAE NIEUNHIEUH + {0x8F56, 0xB89B}, //2514 #HANGUL SYLLABLE RIEUL WAE TIKEUT + {0x8F57, 0xB89C}, //2515 #HANGUL SYLLABLE RIEUL WAE RIEUL + {0x8F58, 0xB89D}, //2516 #HANGUL SYLLABLE RIEUL WAE RIEULKIYEOK + {0x8F59, 0xB89E}, //2517 #HANGUL SYLLABLE RIEUL WAE RIEULMIEUM + {0x8F5A, 0xB89F}, //2518 #HANGUL SYLLABLE RIEUL WAE RIEULPIEUP + {0x8F61, 0xB8A0}, //2519 #HANGUL SYLLABLE RIEUL WAE RIEULSIOS + {0x8F62, 0xB8A1}, //2520 #HANGUL SYLLABLE RIEUL WAE RIEULTHIEUTH + {0x8F63, 0xB8A2}, //2521 #HANGUL SYLLABLE RIEUL WAE RIEULPHIEUPH + {0x8F64, 0xB8A3}, //2522 #HANGUL SYLLABLE RIEUL WAE RIEULHIEUH + {0x8F65, 0xB8A4}, //2523 #HANGUL SYLLABLE RIEUL WAE MIEUM + {0x8F66, 0xB8A5}, //2524 #HANGUL SYLLABLE RIEUL WAE PIEUP + {0x8F67, 0xB8A6}, //2525 #HANGUL SYLLABLE RIEUL WAE PIEUPSIOS + {0x8F68, 0xB8A7}, //2526 #HANGUL SYLLABLE RIEUL WAE SIOS + {0x8F69, 0xB8A9}, //2527 #HANGUL SYLLABLE RIEUL WAE IEUNG + {0x8F6A, 0xB8AA}, //2528 #HANGUL SYLLABLE RIEUL WAE CIEUC + {0x8F6B, 0xB8AB}, //2529 #HANGUL SYLLABLE RIEUL WAE CHIEUCH + {0x8F6C, 0xB8AC}, //2530 #HANGUL SYLLABLE RIEUL WAE KHIEUKH + {0x8F6D, 0xB8AD}, //2531 #HANGUL SYLLABLE RIEUL WAE THIEUTH + {0x8F6E, 0xB8AE}, //2532 #HANGUL SYLLABLE RIEUL WAE PHIEUPH + {0x8F6F, 0xB8AF}, //2533 #HANGUL SYLLABLE RIEUL WAE HIEUH + {0x8F70, 0xB8B1}, //2534 #HANGUL SYLLABLE RIEUL OE KIYEOK + {0x8F71, 0xB8B2}, //2535 #HANGUL SYLLABLE RIEUL OE SSANGKIYEOK + {0x8F72, 0xB8B3}, //2536 #HANGUL SYLLABLE RIEUL OE KIYEOKSIOS + {0x8F73, 0xB8B5}, //2537 #HANGUL SYLLABLE RIEUL OE NIEUNCIEUC + {0x8F74, 0xB8B6}, //2538 #HANGUL SYLLABLE RIEUL OE NIEUNHIEUH + {0x8F75, 0xB8B7}, //2539 #HANGUL SYLLABLE RIEUL OE TIKEUT + {0x8F76, 0xB8B9}, //2540 #HANGUL SYLLABLE RIEUL OE RIEULKIYEOK + {0x8F77, 0xB8BA}, //2541 #HANGUL SYLLABLE RIEUL OE RIEULMIEUM + {0x8F78, 0xB8BB}, //2542 #HANGUL SYLLABLE RIEUL OE RIEULPIEUP + {0x8F79, 0xB8BC}, //2543 #HANGUL SYLLABLE RIEUL OE RIEULSIOS + {0x8F7A, 0xB8BD}, //2544 #HANGUL SYLLABLE RIEUL OE RIEULTHIEUTH + {0x8F81, 0xB8BE}, //2545 #HANGUL SYLLABLE RIEUL OE RIEULPHIEUPH + {0x8F82, 0xB8BF}, //2546 #HANGUL SYLLABLE RIEUL OE RIEULHIEUH + {0x8F83, 0xB8C2}, //2547 #HANGUL SYLLABLE RIEUL OE PIEUPSIOS + {0x8F84, 0xB8C4}, //2548 #HANGUL SYLLABLE RIEUL OE SSANGSIOS + {0x8F85, 0xB8C6}, //2549 #HANGUL SYLLABLE RIEUL OE CIEUC + {0x8F86, 0xB8C7}, //2550 #HANGUL SYLLABLE RIEUL OE CHIEUCH + {0x8F87, 0xB8C8}, //2551 #HANGUL SYLLABLE RIEUL OE KHIEUKH + {0x8F88, 0xB8C9}, //2552 #HANGUL SYLLABLE RIEUL OE THIEUTH + {0x8F89, 0xB8CA}, //2553 #HANGUL SYLLABLE RIEUL OE PHIEUPH + {0x8F8A, 0xB8CB}, //2554 #HANGUL SYLLABLE RIEUL OE HIEUH + {0x8F8B, 0xB8CD}, //2555 #HANGUL SYLLABLE RIEUL YO KIYEOK + {0x8F8C, 0xB8CE}, //2556 #HANGUL SYLLABLE RIEUL YO SSANGKIYEOK + {0x8F8D, 0xB8CF}, //2557 #HANGUL SYLLABLE RIEUL YO KIYEOKSIOS + {0x8F8E, 0xB8D1}, //2558 #HANGUL SYLLABLE RIEUL YO NIEUNCIEUC + {0x8F8F, 0xB8D2}, //2559 #HANGUL SYLLABLE RIEUL YO NIEUNHIEUH + {0x8F90, 0xB8D3}, //2560 #HANGUL SYLLABLE RIEUL YO TIKEUT + {0x8F91, 0xB8D5}, //2561 #HANGUL SYLLABLE RIEUL YO RIEULKIYEOK + {0x8F92, 0xB8D6}, //2562 #HANGUL SYLLABLE RIEUL YO RIEULMIEUM + {0x8F93, 0xB8D7}, //2563 #HANGUL SYLLABLE RIEUL YO RIEULPIEUP + {0x8F94, 0xB8D8}, //2564 #HANGUL SYLLABLE RIEUL YO RIEULSIOS + {0x8F95, 0xB8D9}, //2565 #HANGUL SYLLABLE RIEUL YO RIEULTHIEUTH + {0x8F96, 0xB8DA}, //2566 #HANGUL SYLLABLE RIEUL YO RIEULPHIEUPH + {0x8F97, 0xB8DB}, //2567 #HANGUL SYLLABLE RIEUL YO RIEULHIEUH + {0x8F98, 0xB8DC}, //2568 #HANGUL SYLLABLE RIEUL YO MIEUM + {0x8F99, 0xB8DE}, //2569 #HANGUL SYLLABLE RIEUL YO PIEUPSIOS + {0x8F9A, 0xB8E0}, //2570 #HANGUL SYLLABLE RIEUL YO SSANGSIOS + {0x8F9B, 0xB8E2}, //2571 #HANGUL SYLLABLE RIEUL YO CIEUC + {0x8F9C, 0xB8E3}, //2572 #HANGUL SYLLABLE RIEUL YO CHIEUCH + {0x8F9D, 0xB8E4}, //2573 #HANGUL SYLLABLE RIEUL YO KHIEUKH + {0x8F9E, 0xB8E5}, //2574 #HANGUL SYLLABLE RIEUL YO THIEUTH + {0x8F9F, 0xB8E6}, //2575 #HANGUL SYLLABLE RIEUL YO PHIEUPH + {0x8FA0, 0xB8E7}, //2576 #HANGUL SYLLABLE RIEUL YO HIEUH + {0x8FA1, 0xB8EA}, //2577 #HANGUL SYLLABLE RIEUL U SSANGKIYEOK + {0x8FA2, 0xB8EB}, //2578 #HANGUL SYLLABLE RIEUL U KIYEOKSIOS + {0x8FA3, 0xB8ED}, //2579 #HANGUL SYLLABLE RIEUL U NIEUNCIEUC + {0x8FA4, 0xB8EE}, //2580 #HANGUL SYLLABLE RIEUL U NIEUNHIEUH + {0x8FA5, 0xB8EF}, //2581 #HANGUL SYLLABLE RIEUL U TIKEUT + {0x8FA6, 0xB8F1}, //2582 #HANGUL SYLLABLE RIEUL U RIEULKIYEOK + {0x8FA7, 0xB8F2}, //2583 #HANGUL SYLLABLE RIEUL U RIEULMIEUM + {0x8FA8, 0xB8F3}, //2584 #HANGUL SYLLABLE RIEUL U RIEULPIEUP + {0x8FA9, 0xB8F4}, //2585 #HANGUL SYLLABLE RIEUL U RIEULSIOS + {0x8FAA, 0xB8F5}, //2586 #HANGUL SYLLABLE RIEUL U RIEULTHIEUTH + {0x8FAB, 0xB8F6}, //2587 #HANGUL SYLLABLE RIEUL U RIEULPHIEUPH + {0x8FAC, 0xB8F7}, //2588 #HANGUL SYLLABLE RIEUL U RIEULHIEUH + {0x8FAD, 0xB8FA}, //2589 #HANGUL SYLLABLE RIEUL U PIEUPSIOS + {0x8FAE, 0xB8FC}, //2590 #HANGUL SYLLABLE RIEUL U SSANGSIOS + {0x8FAF, 0xB8FE}, //2591 #HANGUL SYLLABLE RIEUL U CIEUC + {0x8FB0, 0xB8FF}, //2592 #HANGUL SYLLABLE RIEUL U CHIEUCH + {0x8FB1, 0xB900}, //2593 #HANGUL SYLLABLE RIEUL U KHIEUKH + {0x8FB2, 0xB901}, //2594 #HANGUL SYLLABLE RIEUL U THIEUTH + {0x8FB3, 0xB902}, //2595 #HANGUL SYLLABLE RIEUL U PHIEUPH + {0x8FB4, 0xB903}, //2596 #HANGUL SYLLABLE RIEUL U HIEUH + {0x8FB5, 0xB905}, //2597 #HANGUL SYLLABLE RIEUL WEO KIYEOK + {0x8FB6, 0xB906}, //2598 #HANGUL SYLLABLE RIEUL WEO SSANGKIYEOK + {0x8FB7, 0xB907}, //2599 #HANGUL SYLLABLE RIEUL WEO KIYEOKSIOS + {0x8FB8, 0xB908}, //2600 #HANGUL SYLLABLE RIEUL WEO NIEUN + {0x8FB9, 0xB909}, //2601 #HANGUL SYLLABLE RIEUL WEO NIEUNCIEUC + {0x8FBA, 0xB90A}, //2602 #HANGUL SYLLABLE RIEUL WEO NIEUNHIEUH + {0x8FBB, 0xB90B}, //2603 #HANGUL SYLLABLE RIEUL WEO TIKEUT + {0x8FBC, 0xB90C}, //2604 #HANGUL SYLLABLE RIEUL WEO RIEUL + {0x8FBD, 0xB90D}, //2605 #HANGUL SYLLABLE RIEUL WEO RIEULKIYEOK + {0x8FBE, 0xB90E}, //2606 #HANGUL SYLLABLE RIEUL WEO RIEULMIEUM + {0x8FBF, 0xB90F}, //2607 #HANGUL SYLLABLE RIEUL WEO RIEULPIEUP + {0x8FC0, 0xB910}, //2608 #HANGUL SYLLABLE RIEUL WEO RIEULSIOS + {0x8FC1, 0xB911}, //2609 #HANGUL SYLLABLE RIEUL WEO RIEULTHIEUTH + {0x8FC2, 0xB912}, //2610 #HANGUL SYLLABLE RIEUL WEO RIEULPHIEUPH + {0x8FC3, 0xB913}, //2611 #HANGUL SYLLABLE RIEUL WEO RIEULHIEUH + {0x8FC4, 0xB914}, //2612 #HANGUL SYLLABLE RIEUL WEO MIEUM + {0x8FC5, 0xB915}, //2613 #HANGUL SYLLABLE RIEUL WEO PIEUP + {0x8FC6, 0xB916}, //2614 #HANGUL SYLLABLE RIEUL WEO PIEUPSIOS + {0x8FC7, 0xB917}, //2615 #HANGUL SYLLABLE RIEUL WEO SIOS + {0x8FC8, 0xB919}, //2616 #HANGUL SYLLABLE RIEUL WEO IEUNG + {0x8FC9, 0xB91A}, //2617 #HANGUL SYLLABLE RIEUL WEO CIEUC + {0x8FCA, 0xB91B}, //2618 #HANGUL SYLLABLE RIEUL WEO CHIEUCH + {0x8FCB, 0xB91C}, //2619 #HANGUL SYLLABLE RIEUL WEO KHIEUKH + {0x8FCC, 0xB91D}, //2620 #HANGUL SYLLABLE RIEUL WEO THIEUTH + {0x8FCD, 0xB91E}, //2621 #HANGUL SYLLABLE RIEUL WEO PHIEUPH + {0x8FCE, 0xB91F}, //2622 #HANGUL SYLLABLE RIEUL WEO HIEUH + {0x8FCF, 0xB921}, //2623 #HANGUL SYLLABLE RIEUL WE KIYEOK + {0x8FD0, 0xB922}, //2624 #HANGUL SYLLABLE RIEUL WE SSANGKIYEOK + {0x8FD1, 0xB923}, //2625 #HANGUL SYLLABLE RIEUL WE KIYEOKSIOS + {0x8FD2, 0xB924}, //2626 #HANGUL SYLLABLE RIEUL WE NIEUN + {0x8FD3, 0xB925}, //2627 #HANGUL SYLLABLE RIEUL WE NIEUNCIEUC + {0x8FD4, 0xB926}, //2628 #HANGUL SYLLABLE RIEUL WE NIEUNHIEUH + {0x8FD5, 0xB927}, //2629 #HANGUL SYLLABLE RIEUL WE TIKEUT + {0x8FD6, 0xB928}, //2630 #HANGUL SYLLABLE RIEUL WE RIEUL + {0x8FD7, 0xB929}, //2631 #HANGUL SYLLABLE RIEUL WE RIEULKIYEOK + {0x8FD8, 0xB92A}, //2632 #HANGUL SYLLABLE RIEUL WE RIEULMIEUM + {0x8FD9, 0xB92B}, //2633 #HANGUL SYLLABLE RIEUL WE RIEULPIEUP + {0x8FDA, 0xB92C}, //2634 #HANGUL SYLLABLE RIEUL WE RIEULSIOS + {0x8FDB, 0xB92D}, //2635 #HANGUL SYLLABLE RIEUL WE RIEULTHIEUTH + {0x8FDC, 0xB92E}, //2636 #HANGUL SYLLABLE RIEUL WE RIEULPHIEUPH + {0x8FDD, 0xB92F}, //2637 #HANGUL SYLLABLE RIEUL WE RIEULHIEUH + {0x8FDE, 0xB930}, //2638 #HANGUL SYLLABLE RIEUL WE MIEUM + {0x8FDF, 0xB931}, //2639 #HANGUL SYLLABLE RIEUL WE PIEUP + {0x8FE0, 0xB932}, //2640 #HANGUL SYLLABLE RIEUL WE PIEUPSIOS + {0x8FE1, 0xB933}, //2641 #HANGUL SYLLABLE RIEUL WE SIOS + {0x8FE2, 0xB934}, //2642 #HANGUL SYLLABLE RIEUL WE SSANGSIOS + {0x8FE3, 0xB935}, //2643 #HANGUL SYLLABLE RIEUL WE IEUNG + {0x8FE4, 0xB936}, //2644 #HANGUL SYLLABLE RIEUL WE CIEUC + {0x8FE5, 0xB937}, //2645 #HANGUL SYLLABLE RIEUL WE CHIEUCH + {0x8FE6, 0xB938}, //2646 #HANGUL SYLLABLE RIEUL WE KHIEUKH + {0x8FE7, 0xB939}, //2647 #HANGUL SYLLABLE RIEUL WE THIEUTH + {0x8FE8, 0xB93A}, //2648 #HANGUL SYLLABLE RIEUL WE PHIEUPH + {0x8FE9, 0xB93B}, //2649 #HANGUL SYLLABLE RIEUL WE HIEUH + {0x8FEA, 0xB93E}, //2650 #HANGUL SYLLABLE RIEUL WI SSANGKIYEOK + {0x8FEB, 0xB93F}, //2651 #HANGUL SYLLABLE RIEUL WI KIYEOKSIOS + {0x8FEC, 0xB941}, //2652 #HANGUL SYLLABLE RIEUL WI NIEUNCIEUC + {0x8FED, 0xB942}, //2653 #HANGUL SYLLABLE RIEUL WI NIEUNHIEUH + {0x8FEE, 0xB943}, //2654 #HANGUL SYLLABLE RIEUL WI TIKEUT + {0x8FEF, 0xB945}, //2655 #HANGUL SYLLABLE RIEUL WI RIEULKIYEOK + {0x8FF0, 0xB946}, //2656 #HANGUL SYLLABLE RIEUL WI RIEULMIEUM + {0x8FF1, 0xB947}, //2657 #HANGUL SYLLABLE RIEUL WI RIEULPIEUP + {0x8FF2, 0xB948}, //2658 #HANGUL SYLLABLE RIEUL WI RIEULSIOS + {0x8FF3, 0xB949}, //2659 #HANGUL SYLLABLE RIEUL WI RIEULTHIEUTH + {0x8FF4, 0xB94A}, //2660 #HANGUL SYLLABLE RIEUL WI RIEULPHIEUPH + {0x8FF5, 0xB94B}, //2661 #HANGUL SYLLABLE RIEUL WI RIEULHIEUH + {0x8FF6, 0xB94D}, //2662 #HANGUL SYLLABLE RIEUL WI PIEUP + {0x8FF7, 0xB94E}, //2663 #HANGUL SYLLABLE RIEUL WI PIEUPSIOS + {0x8FF8, 0xB950}, //2664 #HANGUL SYLLABLE RIEUL WI SSANGSIOS + {0x8FF9, 0xB952}, //2665 #HANGUL SYLLABLE RIEUL WI CIEUC + {0x8FFA, 0xB953}, //2666 #HANGUL SYLLABLE RIEUL WI CHIEUCH + {0x8FFB, 0xB954}, //2667 #HANGUL SYLLABLE RIEUL WI KHIEUKH + {0x8FFC, 0xB955}, //2668 #HANGUL SYLLABLE RIEUL WI THIEUTH + {0x8FFD, 0xB956}, //2669 #HANGUL SYLLABLE RIEUL WI PHIEUPH + {0x8FFE, 0xB957}, //2670 #HANGUL SYLLABLE RIEUL WI HIEUH + {0x9041, 0xB95A}, //2671 #HANGUL SYLLABLE RIEUL YU SSANGKIYEOK + {0x9042, 0xB95B}, //2672 #HANGUL SYLLABLE RIEUL YU KIYEOKSIOS + {0x9043, 0xB95D}, //2673 #HANGUL SYLLABLE RIEUL YU NIEUNCIEUC + {0x9044, 0xB95E}, //2674 #HANGUL SYLLABLE RIEUL YU NIEUNHIEUH + {0x9045, 0xB95F}, //2675 #HANGUL SYLLABLE RIEUL YU TIKEUT + {0x9046, 0xB961}, //2676 #HANGUL SYLLABLE RIEUL YU RIEULKIYEOK + {0x9047, 0xB962}, //2677 #HANGUL SYLLABLE RIEUL YU RIEULMIEUM + {0x9048, 0xB963}, //2678 #HANGUL SYLLABLE RIEUL YU RIEULPIEUP + {0x9049, 0xB964}, //2679 #HANGUL SYLLABLE RIEUL YU RIEULSIOS + {0x904A, 0xB965}, //2680 #HANGUL SYLLABLE RIEUL YU RIEULTHIEUTH + {0x904B, 0xB966}, //2681 #HANGUL SYLLABLE RIEUL YU RIEULPHIEUPH + {0x904C, 0xB967}, //2682 #HANGUL SYLLABLE RIEUL YU RIEULHIEUH + {0x904D, 0xB96A}, //2683 #HANGUL SYLLABLE RIEUL YU PIEUPSIOS + {0x904E, 0xB96C}, //2684 #HANGUL SYLLABLE RIEUL YU SSANGSIOS + {0x904F, 0xB96E}, //2685 #HANGUL SYLLABLE RIEUL YU CIEUC + {0x9050, 0xB96F}, //2686 #HANGUL SYLLABLE RIEUL YU CHIEUCH + {0x9051, 0xB970}, //2687 #HANGUL SYLLABLE RIEUL YU KHIEUKH + {0x9052, 0xB971}, //2688 #HANGUL SYLLABLE RIEUL YU THIEUTH + {0x9053, 0xB972}, //2689 #HANGUL SYLLABLE RIEUL YU PHIEUPH + {0x9054, 0xB973}, //2690 #HANGUL SYLLABLE RIEUL YU HIEUH + {0x9055, 0xB976}, //2691 #HANGUL SYLLABLE RIEUL EU SSANGKIYEOK + {0x9056, 0xB977}, //2692 #HANGUL SYLLABLE RIEUL EU KIYEOKSIOS + {0x9057, 0xB979}, //2693 #HANGUL SYLLABLE RIEUL EU NIEUNCIEUC + {0x9058, 0xB97A}, //2694 #HANGUL SYLLABLE RIEUL EU NIEUNHIEUH + {0x9059, 0xB97B}, //2695 #HANGUL SYLLABLE RIEUL EU TIKEUT + {0x905A, 0xB97D}, //2696 #HANGUL SYLLABLE RIEUL EU RIEULKIYEOK + {0x9061, 0xB97E}, //2697 #HANGUL SYLLABLE RIEUL EU RIEULMIEUM + {0x9062, 0xB97F}, //2698 #HANGUL SYLLABLE RIEUL EU RIEULPIEUP + {0x9063, 0xB980}, //2699 #HANGUL SYLLABLE RIEUL EU RIEULSIOS + {0x9064, 0xB981}, //2700 #HANGUL SYLLABLE RIEUL EU RIEULTHIEUTH + {0x9065, 0xB982}, //2701 #HANGUL SYLLABLE RIEUL EU RIEULPHIEUPH + {0x9066, 0xB983}, //2702 #HANGUL SYLLABLE RIEUL EU RIEULHIEUH + {0x9067, 0xB986}, //2703 #HANGUL SYLLABLE RIEUL EU PIEUPSIOS + {0x9068, 0xB988}, //2704 #HANGUL SYLLABLE RIEUL EU SSANGSIOS + {0x9069, 0xB98B}, //2705 #HANGUL SYLLABLE RIEUL EU CHIEUCH + {0x906A, 0xB98C}, //2706 #HANGUL SYLLABLE RIEUL EU KHIEUKH + {0x906B, 0xB98F}, //2707 #HANGUL SYLLABLE RIEUL EU HIEUH + {0x906C, 0xB990}, //2708 #HANGUL SYLLABLE RIEUL YI + {0x906D, 0xB991}, //2709 #HANGUL SYLLABLE RIEUL YI KIYEOK + {0x906E, 0xB992}, //2710 #HANGUL SYLLABLE RIEUL YI SSANGKIYEOK + {0x906F, 0xB993}, //2711 #HANGUL SYLLABLE RIEUL YI KIYEOKSIOS + {0x9070, 0xB994}, //2712 #HANGUL SYLLABLE RIEUL YI NIEUN + {0x9071, 0xB995}, //2713 #HANGUL SYLLABLE RIEUL YI NIEUNCIEUC + {0x9072, 0xB996}, //2714 #HANGUL SYLLABLE RIEUL YI NIEUNHIEUH + {0x9073, 0xB997}, //2715 #HANGUL SYLLABLE RIEUL YI TIKEUT + {0x9074, 0xB998}, //2716 #HANGUL SYLLABLE RIEUL YI RIEUL + {0x9075, 0xB999}, //2717 #HANGUL SYLLABLE RIEUL YI RIEULKIYEOK + {0x9076, 0xB99A}, //2718 #HANGUL SYLLABLE RIEUL YI RIEULMIEUM + {0x9077, 0xB99B}, //2719 #HANGUL SYLLABLE RIEUL YI RIEULPIEUP + {0x9078, 0xB99C}, //2720 #HANGUL SYLLABLE RIEUL YI RIEULSIOS + {0x9079, 0xB99D}, //2721 #HANGUL SYLLABLE RIEUL YI RIEULTHIEUTH + {0x907A, 0xB99E}, //2722 #HANGUL SYLLABLE RIEUL YI RIEULPHIEUPH + {0x9081, 0xB99F}, //2723 #HANGUL SYLLABLE RIEUL YI RIEULHIEUH + {0x9082, 0xB9A0}, //2724 #HANGUL SYLLABLE RIEUL YI MIEUM + {0x9083, 0xB9A1}, //2725 #HANGUL SYLLABLE RIEUL YI PIEUP + {0x9084, 0xB9A2}, //2726 #HANGUL SYLLABLE RIEUL YI PIEUPSIOS + {0x9085, 0xB9A3}, //2727 #HANGUL SYLLABLE RIEUL YI SIOS + {0x9086, 0xB9A4}, //2728 #HANGUL SYLLABLE RIEUL YI SSANGSIOS + {0x9087, 0xB9A5}, //2729 #HANGUL SYLLABLE RIEUL YI IEUNG + {0x9088, 0xB9A6}, //2730 #HANGUL SYLLABLE RIEUL YI CIEUC + {0x9089, 0xB9A7}, //2731 #HANGUL SYLLABLE RIEUL YI CHIEUCH + {0x908A, 0xB9A8}, //2732 #HANGUL SYLLABLE RIEUL YI KHIEUKH + {0x908B, 0xB9A9}, //2733 #HANGUL SYLLABLE RIEUL YI THIEUTH + {0x908C, 0xB9AA}, //2734 #HANGUL SYLLABLE RIEUL YI PHIEUPH + {0x908D, 0xB9AB}, //2735 #HANGUL SYLLABLE RIEUL YI HIEUH + {0x908E, 0xB9AE}, //2736 #HANGUL SYLLABLE RIEUL I SSANGKIYEOK + {0x908F, 0xB9AF}, //2737 #HANGUL SYLLABLE RIEUL I KIYEOKSIOS + {0x9090, 0xB9B1}, //2738 #HANGUL SYLLABLE RIEUL I NIEUNCIEUC + {0x9091, 0xB9B2}, //2739 #HANGUL SYLLABLE RIEUL I NIEUNHIEUH + {0x9092, 0xB9B3}, //2740 #HANGUL SYLLABLE RIEUL I TIKEUT + {0x9093, 0xB9B5}, //2741 #HANGUL SYLLABLE RIEUL I RIEULKIYEOK + {0x9094, 0xB9B6}, //2742 #HANGUL SYLLABLE RIEUL I RIEULMIEUM + {0x9095, 0xB9B7}, //2743 #HANGUL SYLLABLE RIEUL I RIEULPIEUP + {0x9096, 0xB9B8}, //2744 #HANGUL SYLLABLE RIEUL I RIEULSIOS + {0x9097, 0xB9B9}, //2745 #HANGUL SYLLABLE RIEUL I RIEULTHIEUTH + {0x9098, 0xB9BA}, //2746 #HANGUL SYLLABLE RIEUL I RIEULPHIEUPH + {0x9099, 0xB9BB}, //2747 #HANGUL SYLLABLE RIEUL I RIEULHIEUH + {0x909A, 0xB9BE}, //2748 #HANGUL SYLLABLE RIEUL I PIEUPSIOS + {0x909B, 0xB9C0}, //2749 #HANGUL SYLLABLE RIEUL I SSANGSIOS + {0x909C, 0xB9C2}, //2750 #HANGUL SYLLABLE RIEUL I CIEUC + {0x909D, 0xB9C3}, //2751 #HANGUL SYLLABLE RIEUL I CHIEUCH + {0x909E, 0xB9C4}, //2752 #HANGUL SYLLABLE RIEUL I KHIEUKH + {0x909F, 0xB9C5}, //2753 #HANGUL SYLLABLE RIEUL I THIEUTH + {0x90A0, 0xB9C6}, //2754 #HANGUL SYLLABLE RIEUL I PHIEUPH + {0x90A1, 0xB9C7}, //2755 #HANGUL SYLLABLE RIEUL I HIEUH + {0x90A2, 0xB9CA}, //2756 #HANGUL SYLLABLE MIEUM A SSANGKIYEOK + {0x90A3, 0xB9CB}, //2757 #HANGUL SYLLABLE MIEUM A KIYEOKSIOS + {0x90A4, 0xB9CD}, //2758 #HANGUL SYLLABLE MIEUM A NIEUNCIEUC + {0x90A5, 0xB9D3}, //2759 #HANGUL SYLLABLE MIEUM A RIEULPIEUP + {0x90A6, 0xB9D4}, //2760 #HANGUL SYLLABLE MIEUM A RIEULSIOS + {0x90A7, 0xB9D5}, //2761 #HANGUL SYLLABLE MIEUM A RIEULTHIEUTH + {0x90A8, 0xB9D6}, //2762 #HANGUL SYLLABLE MIEUM A RIEULPHIEUPH + {0x90A9, 0xB9D7}, //2763 #HANGUL SYLLABLE MIEUM A RIEULHIEUH + {0x90AA, 0xB9DA}, //2764 #HANGUL SYLLABLE MIEUM A PIEUPSIOS + {0x90AB, 0xB9DC}, //2765 #HANGUL SYLLABLE MIEUM A SSANGSIOS + {0x90AC, 0xB9DF}, //2766 #HANGUL SYLLABLE MIEUM A CHIEUCH + {0x90AD, 0xB9E0}, //2767 #HANGUL SYLLABLE MIEUM A KHIEUKH + {0x90AE, 0xB9E2}, //2768 #HANGUL SYLLABLE MIEUM A PHIEUPH + {0x90AF, 0xB9E6}, //2769 #HANGUL SYLLABLE MIEUM AE SSANGKIYEOK + {0x90B0, 0xB9E7}, //2770 #HANGUL SYLLABLE MIEUM AE KIYEOKSIOS + {0x90B1, 0xB9E9}, //2771 #HANGUL SYLLABLE MIEUM AE NIEUNCIEUC + {0x90B2, 0xB9EA}, //2772 #HANGUL SYLLABLE MIEUM AE NIEUNHIEUH + {0x90B3, 0xB9EB}, //2773 #HANGUL SYLLABLE MIEUM AE TIKEUT + {0x90B4, 0xB9ED}, //2774 #HANGUL SYLLABLE MIEUM AE RIEULKIYEOK + {0x90B5, 0xB9EE}, //2775 #HANGUL SYLLABLE MIEUM AE RIEULMIEUM + {0x90B6, 0xB9EF}, //2776 #HANGUL SYLLABLE MIEUM AE RIEULPIEUP + {0x90B7, 0xB9F0}, //2777 #HANGUL SYLLABLE MIEUM AE RIEULSIOS + {0x90B8, 0xB9F1}, //2778 #HANGUL SYLLABLE MIEUM AE RIEULTHIEUTH + {0x90B9, 0xB9F2}, //2779 #HANGUL SYLLABLE MIEUM AE RIEULPHIEUPH + {0x90BA, 0xB9F3}, //2780 #HANGUL SYLLABLE MIEUM AE RIEULHIEUH + {0x90BB, 0xB9F6}, //2781 #HANGUL SYLLABLE MIEUM AE PIEUPSIOS + {0x90BC, 0xB9FB}, //2782 #HANGUL SYLLABLE MIEUM AE CHIEUCH + {0x90BD, 0xB9FC}, //2783 #HANGUL SYLLABLE MIEUM AE KHIEUKH + {0x90BE, 0xB9FD}, //2784 #HANGUL SYLLABLE MIEUM AE THIEUTH + {0x90BF, 0xB9FE}, //2785 #HANGUL SYLLABLE MIEUM AE PHIEUPH + {0x90C0, 0xB9FF}, //2786 #HANGUL SYLLABLE MIEUM AE HIEUH + {0x90C1, 0xBA02}, //2787 #HANGUL SYLLABLE MIEUM YA SSANGKIYEOK + {0x90C2, 0xBA03}, //2788 #HANGUL SYLLABLE MIEUM YA KIYEOKSIOS + {0x90C3, 0xBA04}, //2789 #HANGUL SYLLABLE MIEUM YA NIEUN + {0x90C4, 0xBA05}, //2790 #HANGUL SYLLABLE MIEUM YA NIEUNCIEUC + {0x90C5, 0xBA06}, //2791 #HANGUL SYLLABLE MIEUM YA NIEUNHIEUH + {0x90C6, 0xBA07}, //2792 #HANGUL SYLLABLE MIEUM YA TIKEUT + {0x90C7, 0xBA09}, //2793 #HANGUL SYLLABLE MIEUM YA RIEULKIYEOK + {0x90C8, 0xBA0A}, //2794 #HANGUL SYLLABLE MIEUM YA RIEULMIEUM + {0x90C9, 0xBA0B}, //2795 #HANGUL SYLLABLE MIEUM YA RIEULPIEUP + {0x90CA, 0xBA0C}, //2796 #HANGUL SYLLABLE MIEUM YA RIEULSIOS + {0x90CB, 0xBA0D}, //2797 #HANGUL SYLLABLE MIEUM YA RIEULTHIEUTH + {0x90CC, 0xBA0E}, //2798 #HANGUL SYLLABLE MIEUM YA RIEULPHIEUPH + {0x90CD, 0xBA0F}, //2799 #HANGUL SYLLABLE MIEUM YA RIEULHIEUH + {0x90CE, 0xBA10}, //2800 #HANGUL SYLLABLE MIEUM YA MIEUM + {0x90CF, 0xBA11}, //2801 #HANGUL SYLLABLE MIEUM YA PIEUP + {0x90D0, 0xBA12}, //2802 #HANGUL SYLLABLE MIEUM YA PIEUPSIOS + {0x90D1, 0xBA13}, //2803 #HANGUL SYLLABLE MIEUM YA SIOS + {0x90D2, 0xBA14}, //2804 #HANGUL SYLLABLE MIEUM YA SSANGSIOS + {0x90D3, 0xBA16}, //2805 #HANGUL SYLLABLE MIEUM YA CIEUC + {0x90D4, 0xBA17}, //2806 #HANGUL SYLLABLE MIEUM YA CHIEUCH + {0x90D5, 0xBA18}, //2807 #HANGUL SYLLABLE MIEUM YA KHIEUKH + {0x90D6, 0xBA19}, //2808 #HANGUL SYLLABLE MIEUM YA THIEUTH + {0x90D7, 0xBA1A}, //2809 #HANGUL SYLLABLE MIEUM YA PHIEUPH + {0x90D8, 0xBA1B}, //2810 #HANGUL SYLLABLE MIEUM YA HIEUH + {0x90D9, 0xBA1C}, //2811 #HANGUL SYLLABLE MIEUM YAE + {0x90DA, 0xBA1D}, //2812 #HANGUL SYLLABLE MIEUM YAE KIYEOK + {0x90DB, 0xBA1E}, //2813 #HANGUL SYLLABLE MIEUM YAE SSANGKIYEOK + {0x90DC, 0xBA1F}, //2814 #HANGUL SYLLABLE MIEUM YAE KIYEOKSIOS + {0x90DD, 0xBA20}, //2815 #HANGUL SYLLABLE MIEUM YAE NIEUN + {0x90DE, 0xBA21}, //2816 #HANGUL SYLLABLE MIEUM YAE NIEUNCIEUC + {0x90DF, 0xBA22}, //2817 #HANGUL SYLLABLE MIEUM YAE NIEUNHIEUH + {0x90E0, 0xBA23}, //2818 #HANGUL SYLLABLE MIEUM YAE TIKEUT + {0x90E1, 0xBA24}, //2819 #HANGUL SYLLABLE MIEUM YAE RIEUL + {0x90E2, 0xBA25}, //2820 #HANGUL SYLLABLE MIEUM YAE RIEULKIYEOK + {0x90E3, 0xBA26}, //2821 #HANGUL SYLLABLE MIEUM YAE RIEULMIEUM + {0x90E4, 0xBA27}, //2822 #HANGUL SYLLABLE MIEUM YAE RIEULPIEUP + {0x90E5, 0xBA28}, //2823 #HANGUL SYLLABLE MIEUM YAE RIEULSIOS + {0x90E6, 0xBA29}, //2824 #HANGUL SYLLABLE MIEUM YAE RIEULTHIEUTH + {0x90E7, 0xBA2A}, //2825 #HANGUL SYLLABLE MIEUM YAE RIEULPHIEUPH + {0x90E8, 0xBA2B}, //2826 #HANGUL SYLLABLE MIEUM YAE RIEULHIEUH + {0x90E9, 0xBA2C}, //2827 #HANGUL SYLLABLE MIEUM YAE MIEUM + {0x90EA, 0xBA2D}, //2828 #HANGUL SYLLABLE MIEUM YAE PIEUP + {0x90EB, 0xBA2E}, //2829 #HANGUL SYLLABLE MIEUM YAE PIEUPSIOS + {0x90EC, 0xBA2F}, //2830 #HANGUL SYLLABLE MIEUM YAE SIOS + {0x90ED, 0xBA30}, //2831 #HANGUL SYLLABLE MIEUM YAE SSANGSIOS + {0x90EE, 0xBA31}, //2832 #HANGUL SYLLABLE MIEUM YAE IEUNG + {0x90EF, 0xBA32}, //2833 #HANGUL SYLLABLE MIEUM YAE CIEUC + {0x90F0, 0xBA33}, //2834 #HANGUL SYLLABLE MIEUM YAE CHIEUCH + {0x90F1, 0xBA34}, //2835 #HANGUL SYLLABLE MIEUM YAE KHIEUKH + {0x90F2, 0xBA35}, //2836 #HANGUL SYLLABLE MIEUM YAE THIEUTH + {0x90F3, 0xBA36}, //2837 #HANGUL SYLLABLE MIEUM YAE PHIEUPH + {0x90F4, 0xBA37}, //2838 #HANGUL SYLLABLE MIEUM YAE HIEUH + {0x90F5, 0xBA3A}, //2839 #HANGUL SYLLABLE MIEUM EO SSANGKIYEOK + {0x90F6, 0xBA3B}, //2840 #HANGUL SYLLABLE MIEUM EO KIYEOKSIOS + {0x90F7, 0xBA3D}, //2841 #HANGUL SYLLABLE MIEUM EO NIEUNCIEUC + {0x90F8, 0xBA3E}, //2842 #HANGUL SYLLABLE MIEUM EO NIEUNHIEUH + {0x90F9, 0xBA3F}, //2843 #HANGUL SYLLABLE MIEUM EO TIKEUT + {0x90FA, 0xBA41}, //2844 #HANGUL SYLLABLE MIEUM EO RIEULKIYEOK + {0x90FB, 0xBA43}, //2845 #HANGUL SYLLABLE MIEUM EO RIEULPIEUP + {0x90FC, 0xBA44}, //2846 #HANGUL SYLLABLE MIEUM EO RIEULSIOS + {0x90FD, 0xBA45}, //2847 #HANGUL SYLLABLE MIEUM EO RIEULTHIEUTH + {0x90FE, 0xBA46}, //2848 #HANGUL SYLLABLE MIEUM EO RIEULPHIEUPH + {0x9141, 0xBA47}, //2849 #HANGUL SYLLABLE MIEUM EO RIEULHIEUH + {0x9142, 0xBA4A}, //2850 #HANGUL SYLLABLE MIEUM EO PIEUPSIOS + {0x9143, 0xBA4C}, //2851 #HANGUL SYLLABLE MIEUM EO SSANGSIOS + {0x9144, 0xBA4F}, //2852 #HANGUL SYLLABLE MIEUM EO CHIEUCH + {0x9145, 0xBA50}, //2853 #HANGUL SYLLABLE MIEUM EO KHIEUKH + {0x9146, 0xBA51}, //2854 #HANGUL SYLLABLE MIEUM EO THIEUTH + {0x9147, 0xBA52}, //2855 #HANGUL SYLLABLE MIEUM EO PHIEUPH + {0x9148, 0xBA56}, //2856 #HANGUL SYLLABLE MIEUM E SSANGKIYEOK + {0x9149, 0xBA57}, //2857 #HANGUL SYLLABLE MIEUM E KIYEOKSIOS + {0x914A, 0xBA59}, //2858 #HANGUL SYLLABLE MIEUM E NIEUNCIEUC + {0x914B, 0xBA5A}, //2859 #HANGUL SYLLABLE MIEUM E NIEUNHIEUH + {0x914C, 0xBA5B}, //2860 #HANGUL SYLLABLE MIEUM E TIKEUT + {0x914D, 0xBA5D}, //2861 #HANGUL SYLLABLE MIEUM E RIEULKIYEOK + {0x914E, 0xBA5E}, //2862 #HANGUL SYLLABLE MIEUM E RIEULMIEUM + {0x914F, 0xBA5F}, //2863 #HANGUL SYLLABLE MIEUM E RIEULPIEUP + {0x9150, 0xBA60}, //2864 #HANGUL SYLLABLE MIEUM E RIEULSIOS + {0x9151, 0xBA61}, //2865 #HANGUL SYLLABLE MIEUM E RIEULTHIEUTH + {0x9152, 0xBA62}, //2866 #HANGUL SYLLABLE MIEUM E RIEULPHIEUPH + {0x9153, 0xBA63}, //2867 #HANGUL SYLLABLE MIEUM E RIEULHIEUH + {0x9154, 0xBA66}, //2868 #HANGUL SYLLABLE MIEUM E PIEUPSIOS + {0x9155, 0xBA6A}, //2869 #HANGUL SYLLABLE MIEUM E CIEUC + {0x9156, 0xBA6B}, //2870 #HANGUL SYLLABLE MIEUM E CHIEUCH + {0x9157, 0xBA6C}, //2871 #HANGUL SYLLABLE MIEUM E KHIEUKH + {0x9158, 0xBA6D}, //2872 #HANGUL SYLLABLE MIEUM E THIEUTH + {0x9159, 0xBA6E}, //2873 #HANGUL SYLLABLE MIEUM E PHIEUPH + {0x915A, 0xBA6F}, //2874 #HANGUL SYLLABLE MIEUM E HIEUH + {0x9161, 0xBA72}, //2875 #HANGUL SYLLABLE MIEUM YEO SSANGKIYEOK + {0x9162, 0xBA73}, //2876 #HANGUL SYLLABLE MIEUM YEO KIYEOKSIOS + {0x9163, 0xBA75}, //2877 #HANGUL SYLLABLE MIEUM YEO NIEUNCIEUC + {0x9164, 0xBA76}, //2878 #HANGUL SYLLABLE MIEUM YEO NIEUNHIEUH + {0x9165, 0xBA77}, //2879 #HANGUL SYLLABLE MIEUM YEO TIKEUT + {0x9166, 0xBA79}, //2880 #HANGUL SYLLABLE MIEUM YEO RIEULKIYEOK + {0x9167, 0xBA7A}, //2881 #HANGUL SYLLABLE MIEUM YEO RIEULMIEUM + {0x9168, 0xBA7B}, //2882 #HANGUL SYLLABLE MIEUM YEO RIEULPIEUP + {0x9169, 0xBA7C}, //2883 #HANGUL SYLLABLE MIEUM YEO RIEULSIOS + {0x916A, 0xBA7D}, //2884 #HANGUL SYLLABLE MIEUM YEO RIEULTHIEUTH + {0x916B, 0xBA7E}, //2885 #HANGUL SYLLABLE MIEUM YEO RIEULPHIEUPH + {0x916C, 0xBA7F}, //2886 #HANGUL SYLLABLE MIEUM YEO RIEULHIEUH + {0x916D, 0xBA80}, //2887 #HANGUL SYLLABLE MIEUM YEO MIEUM + {0x916E, 0xBA81}, //2888 #HANGUL SYLLABLE MIEUM YEO PIEUP + {0x916F, 0xBA82}, //2889 #HANGUL SYLLABLE MIEUM YEO PIEUPSIOS + {0x9170, 0xBA86}, //2890 #HANGUL SYLLABLE MIEUM YEO CIEUC + {0x9171, 0xBA88}, //2891 #HANGUL SYLLABLE MIEUM YEO KHIEUKH + {0x9172, 0xBA89}, //2892 #HANGUL SYLLABLE MIEUM YEO THIEUTH + {0x9173, 0xBA8A}, //2893 #HANGUL SYLLABLE MIEUM YEO PHIEUPH + {0x9174, 0xBA8B}, //2894 #HANGUL SYLLABLE MIEUM YEO HIEUH + {0x9175, 0xBA8D}, //2895 #HANGUL SYLLABLE MIEUM YE KIYEOK + {0x9176, 0xBA8E}, //2896 #HANGUL SYLLABLE MIEUM YE SSANGKIYEOK + {0x9177, 0xBA8F}, //2897 #HANGUL SYLLABLE MIEUM YE KIYEOKSIOS + {0x9178, 0xBA90}, //2898 #HANGUL SYLLABLE MIEUM YE NIEUN + {0x9179, 0xBA91}, //2899 #HANGUL SYLLABLE MIEUM YE NIEUNCIEUC + {0x917A, 0xBA92}, //2900 #HANGUL SYLLABLE MIEUM YE NIEUNHIEUH + {0x9181, 0xBA93}, //2901 #HANGUL SYLLABLE MIEUM YE TIKEUT + {0x9182, 0xBA94}, //2902 #HANGUL SYLLABLE MIEUM YE RIEUL + {0x9183, 0xBA95}, //2903 #HANGUL SYLLABLE MIEUM YE RIEULKIYEOK + {0x9184, 0xBA96}, //2904 #HANGUL SYLLABLE MIEUM YE RIEULMIEUM + {0x9185, 0xBA97}, //2905 #HANGUL SYLLABLE MIEUM YE RIEULPIEUP + {0x9186, 0xBA98}, //2906 #HANGUL SYLLABLE MIEUM YE RIEULSIOS + {0x9187, 0xBA99}, //2907 #HANGUL SYLLABLE MIEUM YE RIEULTHIEUTH + {0x9188, 0xBA9A}, //2908 #HANGUL SYLLABLE MIEUM YE RIEULPHIEUPH + {0x9189, 0xBA9B}, //2909 #HANGUL SYLLABLE MIEUM YE RIEULHIEUH + {0x918A, 0xBA9C}, //2910 #HANGUL SYLLABLE MIEUM YE MIEUM + {0x918B, 0xBA9D}, //2911 #HANGUL SYLLABLE MIEUM YE PIEUP + {0x918C, 0xBA9E}, //2912 #HANGUL SYLLABLE MIEUM YE PIEUPSIOS + {0x918D, 0xBA9F}, //2913 #HANGUL SYLLABLE MIEUM YE SIOS + {0x918E, 0xBAA0}, //2914 #HANGUL SYLLABLE MIEUM YE SSANGSIOS + {0x918F, 0xBAA1}, //2915 #HANGUL SYLLABLE MIEUM YE IEUNG + {0x9190, 0xBAA2}, //2916 #HANGUL SYLLABLE MIEUM YE CIEUC + {0x9191, 0xBAA3}, //2917 #HANGUL SYLLABLE MIEUM YE CHIEUCH + {0x9192, 0xBAA4}, //2918 #HANGUL SYLLABLE MIEUM YE KHIEUKH + {0x9193, 0xBAA5}, //2919 #HANGUL SYLLABLE MIEUM YE THIEUTH + {0x9194, 0xBAA6}, //2920 #HANGUL SYLLABLE MIEUM YE PHIEUPH + {0x9195, 0xBAA7}, //2921 #HANGUL SYLLABLE MIEUM YE HIEUH + {0x9196, 0xBAAA}, //2922 #HANGUL SYLLABLE MIEUM O SSANGKIYEOK + {0x9197, 0xBAAD}, //2923 #HANGUL SYLLABLE MIEUM O NIEUNCIEUC + {0x9198, 0xBAAE}, //2924 #HANGUL SYLLABLE MIEUM O NIEUNHIEUH + {0x9199, 0xBAAF}, //2925 #HANGUL SYLLABLE MIEUM O TIKEUT + {0x919A, 0xBAB1}, //2926 #HANGUL SYLLABLE MIEUM O RIEULKIYEOK + {0x919B, 0xBAB3}, //2927 #HANGUL SYLLABLE MIEUM O RIEULPIEUP + {0x919C, 0xBAB4}, //2928 #HANGUL SYLLABLE MIEUM O RIEULSIOS + {0x919D, 0xBAB5}, //2929 #HANGUL SYLLABLE MIEUM O RIEULTHIEUTH + {0x919E, 0xBAB6}, //2930 #HANGUL SYLLABLE MIEUM O RIEULPHIEUPH + {0x919F, 0xBAB7}, //2931 #HANGUL SYLLABLE MIEUM O RIEULHIEUH + {0x91A0, 0xBABA}, //2932 #HANGUL SYLLABLE MIEUM O PIEUPSIOS + {0x91A1, 0xBABC}, //2933 #HANGUL SYLLABLE MIEUM O SSANGSIOS + {0x91A2, 0xBABE}, //2934 #HANGUL SYLLABLE MIEUM O CIEUC + {0x91A3, 0xBABF}, //2935 #HANGUL SYLLABLE MIEUM O CHIEUCH + {0x91A4, 0xBAC0}, //2936 #HANGUL SYLLABLE MIEUM O KHIEUKH + {0x91A5, 0xBAC1}, //2937 #HANGUL SYLLABLE MIEUM O THIEUTH + {0x91A6, 0xBAC2}, //2938 #HANGUL SYLLABLE MIEUM O PHIEUPH + {0x91A7, 0xBAC3}, //2939 #HANGUL SYLLABLE MIEUM O HIEUH + {0x91A8, 0xBAC5}, //2940 #HANGUL SYLLABLE MIEUM WA KIYEOK + {0x91A9, 0xBAC6}, //2941 #HANGUL SYLLABLE MIEUM WA SSANGKIYEOK + {0x91AA, 0xBAC7}, //2942 #HANGUL SYLLABLE MIEUM WA KIYEOKSIOS + {0x91AB, 0xBAC9}, //2943 #HANGUL SYLLABLE MIEUM WA NIEUNCIEUC + {0x91AC, 0xBACA}, //2944 #HANGUL SYLLABLE MIEUM WA NIEUNHIEUH + {0x91AD, 0xBACB}, //2945 #HANGUL SYLLABLE MIEUM WA TIKEUT + {0x91AE, 0xBACC}, //2946 #HANGUL SYLLABLE MIEUM WA RIEUL + {0x91AF, 0xBACD}, //2947 #HANGUL SYLLABLE MIEUM WA RIEULKIYEOK + {0x91B0, 0xBACE}, //2948 #HANGUL SYLLABLE MIEUM WA RIEULMIEUM + {0x91B1, 0xBACF}, //2949 #HANGUL SYLLABLE MIEUM WA RIEULPIEUP + {0x91B2, 0xBAD0}, //2950 #HANGUL SYLLABLE MIEUM WA RIEULSIOS + {0x91B3, 0xBAD1}, //2951 #HANGUL SYLLABLE MIEUM WA RIEULTHIEUTH + {0x91B4, 0xBAD2}, //2952 #HANGUL SYLLABLE MIEUM WA RIEULPHIEUPH + {0x91B5, 0xBAD3}, //2953 #HANGUL SYLLABLE MIEUM WA RIEULHIEUH + {0x91B6, 0xBAD4}, //2954 #HANGUL SYLLABLE MIEUM WA MIEUM + {0x91B7, 0xBAD5}, //2955 #HANGUL SYLLABLE MIEUM WA PIEUP + {0x91B8, 0xBAD6}, //2956 #HANGUL SYLLABLE MIEUM WA PIEUPSIOS + {0x91B9, 0xBAD7}, //2957 #HANGUL SYLLABLE MIEUM WA SIOS + {0x91BA, 0xBADA}, //2958 #HANGUL SYLLABLE MIEUM WA CIEUC + {0x91BB, 0xBADB}, //2959 #HANGUL SYLLABLE MIEUM WA CHIEUCH + {0x91BC, 0xBADC}, //2960 #HANGUL SYLLABLE MIEUM WA KHIEUKH + {0x91BD, 0xBADD}, //2961 #HANGUL SYLLABLE MIEUM WA THIEUTH + {0x91BE, 0xBADE}, //2962 #HANGUL SYLLABLE MIEUM WA PHIEUPH + {0x91BF, 0xBADF}, //2963 #HANGUL SYLLABLE MIEUM WA HIEUH + {0x91C0, 0xBAE0}, //2964 #HANGUL SYLLABLE MIEUM WAE + {0x91C1, 0xBAE1}, //2965 #HANGUL SYLLABLE MIEUM WAE KIYEOK + {0x91C2, 0xBAE2}, //2966 #HANGUL SYLLABLE MIEUM WAE SSANGKIYEOK + {0x91C3, 0xBAE3}, //2967 #HANGUL SYLLABLE MIEUM WAE KIYEOKSIOS + {0x91C4, 0xBAE4}, //2968 #HANGUL SYLLABLE MIEUM WAE NIEUN + {0x91C5, 0xBAE5}, //2969 #HANGUL SYLLABLE MIEUM WAE NIEUNCIEUC + {0x91C6, 0xBAE6}, //2970 #HANGUL SYLLABLE MIEUM WAE NIEUNHIEUH + {0x91C7, 0xBAE7}, //2971 #HANGUL SYLLABLE MIEUM WAE TIKEUT + {0x91C8, 0xBAE8}, //2972 #HANGUL SYLLABLE MIEUM WAE RIEUL + {0x91C9, 0xBAE9}, //2973 #HANGUL SYLLABLE MIEUM WAE RIEULKIYEOK + {0x91CA, 0xBAEA}, //2974 #HANGUL SYLLABLE MIEUM WAE RIEULMIEUM + {0x91CB, 0xBAEB}, //2975 #HANGUL SYLLABLE MIEUM WAE RIEULPIEUP + {0x91CC, 0xBAEC}, //2976 #HANGUL SYLLABLE MIEUM WAE RIEULSIOS + {0x91CD, 0xBAED}, //2977 #HANGUL SYLLABLE MIEUM WAE RIEULTHIEUTH + {0x91CE, 0xBAEE}, //2978 #HANGUL SYLLABLE MIEUM WAE RIEULPHIEUPH + {0x91CF, 0xBAEF}, //2979 #HANGUL SYLLABLE MIEUM WAE RIEULHIEUH + {0x91D0, 0xBAF0}, //2980 #HANGUL SYLLABLE MIEUM WAE MIEUM + {0x91D1, 0xBAF1}, //2981 #HANGUL SYLLABLE MIEUM WAE PIEUP + {0x91D2, 0xBAF2}, //2982 #HANGUL SYLLABLE MIEUM WAE PIEUPSIOS + {0x91D3, 0xBAF3}, //2983 #HANGUL SYLLABLE MIEUM WAE SIOS + {0x91D4, 0xBAF4}, //2984 #HANGUL SYLLABLE MIEUM WAE SSANGSIOS + {0x91D5, 0xBAF5}, //2985 #HANGUL SYLLABLE MIEUM WAE IEUNG + {0x91D6, 0xBAF6}, //2986 #HANGUL SYLLABLE MIEUM WAE CIEUC + {0x91D7, 0xBAF7}, //2987 #HANGUL SYLLABLE MIEUM WAE CHIEUCH + {0x91D8, 0xBAF8}, //2988 #HANGUL SYLLABLE MIEUM WAE KHIEUKH + {0x91D9, 0xBAF9}, //2989 #HANGUL SYLLABLE MIEUM WAE THIEUTH + {0x91DA, 0xBAFA}, //2990 #HANGUL SYLLABLE MIEUM WAE PHIEUPH + {0x91DB, 0xBAFB}, //2991 #HANGUL SYLLABLE MIEUM WAE HIEUH + {0x91DC, 0xBAFD}, //2992 #HANGUL SYLLABLE MIEUM OE KIYEOK + {0x91DD, 0xBAFE}, //2993 #HANGUL SYLLABLE MIEUM OE SSANGKIYEOK + {0x91DE, 0xBAFF}, //2994 #HANGUL SYLLABLE MIEUM OE KIYEOKSIOS + {0x91DF, 0xBB01}, //2995 #HANGUL SYLLABLE MIEUM OE NIEUNCIEUC + {0x91E0, 0xBB02}, //2996 #HANGUL SYLLABLE MIEUM OE NIEUNHIEUH + {0x91E1, 0xBB03}, //2997 #HANGUL SYLLABLE MIEUM OE TIKEUT + {0x91E2, 0xBB05}, //2998 #HANGUL SYLLABLE MIEUM OE RIEULKIYEOK + {0x91E3, 0xBB06}, //2999 #HANGUL SYLLABLE MIEUM OE RIEULMIEUM + {0x91E4, 0xBB07}, //3000 #HANGUL SYLLABLE MIEUM OE RIEULPIEUP + {0x91E5, 0xBB08}, //3001 #HANGUL SYLLABLE MIEUM OE RIEULSIOS + {0x91E6, 0xBB09}, //3002 #HANGUL SYLLABLE MIEUM OE RIEULTHIEUTH + {0x91E7, 0xBB0A}, //3003 #HANGUL SYLLABLE MIEUM OE RIEULPHIEUPH + {0x91E8, 0xBB0B}, //3004 #HANGUL SYLLABLE MIEUM OE RIEULHIEUH + {0x91E9, 0xBB0C}, //3005 #HANGUL SYLLABLE MIEUM OE MIEUM + {0x91EA, 0xBB0E}, //3006 #HANGUL SYLLABLE MIEUM OE PIEUPSIOS + {0x91EB, 0xBB10}, //3007 #HANGUL SYLLABLE MIEUM OE SSANGSIOS + {0x91EC, 0xBB12}, //3008 #HANGUL SYLLABLE MIEUM OE CIEUC + {0x91ED, 0xBB13}, //3009 #HANGUL SYLLABLE MIEUM OE CHIEUCH + {0x91EE, 0xBB14}, //3010 #HANGUL SYLLABLE MIEUM OE KHIEUKH + {0x91EF, 0xBB15}, //3011 #HANGUL SYLLABLE MIEUM OE THIEUTH + {0x91F0, 0xBB16}, //3012 #HANGUL SYLLABLE MIEUM OE PHIEUPH + {0x91F1, 0xBB17}, //3013 #HANGUL SYLLABLE MIEUM OE HIEUH + {0x91F2, 0xBB19}, //3014 #HANGUL SYLLABLE MIEUM YO KIYEOK + {0x91F3, 0xBB1A}, //3015 #HANGUL SYLLABLE MIEUM YO SSANGKIYEOK + {0x91F4, 0xBB1B}, //3016 #HANGUL SYLLABLE MIEUM YO KIYEOKSIOS + {0x91F5, 0xBB1D}, //3017 #HANGUL SYLLABLE MIEUM YO NIEUNCIEUC + {0x91F6, 0xBB1E}, //3018 #HANGUL SYLLABLE MIEUM YO NIEUNHIEUH + {0x91F7, 0xBB1F}, //3019 #HANGUL SYLLABLE MIEUM YO TIKEUT + {0x91F8, 0xBB21}, //3020 #HANGUL SYLLABLE MIEUM YO RIEULKIYEOK + {0x91F9, 0xBB22}, //3021 #HANGUL SYLLABLE MIEUM YO RIEULMIEUM + {0x91FA, 0xBB23}, //3022 #HANGUL SYLLABLE MIEUM YO RIEULPIEUP + {0x91FB, 0xBB24}, //3023 #HANGUL SYLLABLE MIEUM YO RIEULSIOS + {0x91FC, 0xBB25}, //3024 #HANGUL SYLLABLE MIEUM YO RIEULTHIEUTH + {0x91FD, 0xBB26}, //3025 #HANGUL SYLLABLE MIEUM YO RIEULPHIEUPH + {0x91FE, 0xBB27}, //3026 #HANGUL SYLLABLE MIEUM YO RIEULHIEUH + {0x9241, 0xBB28}, //3027 #HANGUL SYLLABLE MIEUM YO MIEUM + {0x9242, 0xBB2A}, //3028 #HANGUL SYLLABLE MIEUM YO PIEUPSIOS + {0x9243, 0xBB2C}, //3029 #HANGUL SYLLABLE MIEUM YO SSANGSIOS + {0x9244, 0xBB2D}, //3030 #HANGUL SYLLABLE MIEUM YO IEUNG + {0x9245, 0xBB2E}, //3031 #HANGUL SYLLABLE MIEUM YO CIEUC + {0x9246, 0xBB2F}, //3032 #HANGUL SYLLABLE MIEUM YO CHIEUCH + {0x9247, 0xBB30}, //3033 #HANGUL SYLLABLE MIEUM YO KHIEUKH + {0x9248, 0xBB31}, //3034 #HANGUL SYLLABLE MIEUM YO THIEUTH + {0x9249, 0xBB32}, //3035 #HANGUL SYLLABLE MIEUM YO PHIEUPH + {0x924A, 0xBB33}, //3036 #HANGUL SYLLABLE MIEUM YO HIEUH + {0x924B, 0xBB37}, //3037 #HANGUL SYLLABLE MIEUM U KIYEOKSIOS + {0x924C, 0xBB39}, //3038 #HANGUL SYLLABLE MIEUM U NIEUNCIEUC + {0x924D, 0xBB3A}, //3039 #HANGUL SYLLABLE MIEUM U NIEUNHIEUH + {0x924E, 0xBB3F}, //3040 #HANGUL SYLLABLE MIEUM U RIEULPIEUP + {0x924F, 0xBB40}, //3041 #HANGUL SYLLABLE MIEUM U RIEULSIOS + {0x9250, 0xBB41}, //3042 #HANGUL SYLLABLE MIEUM U RIEULTHIEUTH + {0x9251, 0xBB42}, //3043 #HANGUL SYLLABLE MIEUM U RIEULPHIEUPH + {0x9252, 0xBB43}, //3044 #HANGUL SYLLABLE MIEUM U RIEULHIEUH + {0x9253, 0xBB46}, //3045 #HANGUL SYLLABLE MIEUM U PIEUPSIOS + {0x9254, 0xBB48}, //3046 #HANGUL SYLLABLE MIEUM U SSANGSIOS + {0x9255, 0xBB4A}, //3047 #HANGUL SYLLABLE MIEUM U CIEUC + {0x9256, 0xBB4B}, //3048 #HANGUL SYLLABLE MIEUM U CHIEUCH + {0x9257, 0xBB4C}, //3049 #HANGUL SYLLABLE MIEUM U KHIEUKH + {0x9258, 0xBB4E}, //3050 #HANGUL SYLLABLE MIEUM U PHIEUPH + {0x9259, 0xBB51}, //3051 #HANGUL SYLLABLE MIEUM WEO KIYEOK + {0x925A, 0xBB52}, //3052 #HANGUL SYLLABLE MIEUM WEO SSANGKIYEOK + {0x9261, 0xBB53}, //3053 #HANGUL SYLLABLE MIEUM WEO KIYEOKSIOS + {0x9262, 0xBB55}, //3054 #HANGUL SYLLABLE MIEUM WEO NIEUNCIEUC + {0x9263, 0xBB56}, //3055 #HANGUL SYLLABLE MIEUM WEO NIEUNHIEUH + {0x9264, 0xBB57}, //3056 #HANGUL SYLLABLE MIEUM WEO TIKEUT + {0x9265, 0xBB59}, //3057 #HANGUL SYLLABLE MIEUM WEO RIEULKIYEOK + {0x9266, 0xBB5A}, //3058 #HANGUL SYLLABLE MIEUM WEO RIEULMIEUM + {0x9267, 0xBB5B}, //3059 #HANGUL SYLLABLE MIEUM WEO RIEULPIEUP + {0x9268, 0xBB5C}, //3060 #HANGUL SYLLABLE MIEUM WEO RIEULSIOS + {0x9269, 0xBB5D}, //3061 #HANGUL SYLLABLE MIEUM WEO RIEULTHIEUTH + {0x926A, 0xBB5E}, //3062 #HANGUL SYLLABLE MIEUM WEO RIEULPHIEUPH + {0x926B, 0xBB5F}, //3063 #HANGUL SYLLABLE MIEUM WEO RIEULHIEUH + {0x926C, 0xBB60}, //3064 #HANGUL SYLLABLE MIEUM WEO MIEUM + {0x926D, 0xBB62}, //3065 #HANGUL SYLLABLE MIEUM WEO PIEUPSIOS + {0x926E, 0xBB64}, //3066 #HANGUL SYLLABLE MIEUM WEO SSANGSIOS + {0x926F, 0xBB65}, //3067 #HANGUL SYLLABLE MIEUM WEO IEUNG + {0x9270, 0xBB66}, //3068 #HANGUL SYLLABLE MIEUM WEO CIEUC + {0x9271, 0xBB67}, //3069 #HANGUL SYLLABLE MIEUM WEO CHIEUCH + {0x9272, 0xBB68}, //3070 #HANGUL SYLLABLE MIEUM WEO KHIEUKH + {0x9273, 0xBB69}, //3071 #HANGUL SYLLABLE MIEUM WEO THIEUTH + {0x9274, 0xBB6A}, //3072 #HANGUL SYLLABLE MIEUM WEO PHIEUPH + {0x9275, 0xBB6B}, //3073 #HANGUL SYLLABLE MIEUM WEO HIEUH + {0x9276, 0xBB6D}, //3074 #HANGUL SYLLABLE MIEUM WE KIYEOK + {0x9277, 0xBB6E}, //3075 #HANGUL SYLLABLE MIEUM WE SSANGKIYEOK + {0x9278, 0xBB6F}, //3076 #HANGUL SYLLABLE MIEUM WE KIYEOKSIOS + {0x9279, 0xBB70}, //3077 #HANGUL SYLLABLE MIEUM WE NIEUN + {0x927A, 0xBB71}, //3078 #HANGUL SYLLABLE MIEUM WE NIEUNCIEUC + {0x9281, 0xBB72}, //3079 #HANGUL SYLLABLE MIEUM WE NIEUNHIEUH + {0x9282, 0xBB73}, //3080 #HANGUL SYLLABLE MIEUM WE TIKEUT + {0x9283, 0xBB74}, //3081 #HANGUL SYLLABLE MIEUM WE RIEUL + {0x9284, 0xBB75}, //3082 #HANGUL SYLLABLE MIEUM WE RIEULKIYEOK + {0x9285, 0xBB76}, //3083 #HANGUL SYLLABLE MIEUM WE RIEULMIEUM + {0x9286, 0xBB77}, //3084 #HANGUL SYLLABLE MIEUM WE RIEULPIEUP + {0x9287, 0xBB78}, //3085 #HANGUL SYLLABLE MIEUM WE RIEULSIOS + {0x9288, 0xBB79}, //3086 #HANGUL SYLLABLE MIEUM WE RIEULTHIEUTH + {0x9289, 0xBB7A}, //3087 #HANGUL SYLLABLE MIEUM WE RIEULPHIEUPH + {0x928A, 0xBB7B}, //3088 #HANGUL SYLLABLE MIEUM WE RIEULHIEUH + {0x928B, 0xBB7C}, //3089 #HANGUL SYLLABLE MIEUM WE MIEUM + {0x928C, 0xBB7D}, //3090 #HANGUL SYLLABLE MIEUM WE PIEUP + {0x928D, 0xBB7E}, //3091 #HANGUL SYLLABLE MIEUM WE PIEUPSIOS + {0x928E, 0xBB7F}, //3092 #HANGUL SYLLABLE MIEUM WE SIOS + {0x928F, 0xBB80}, //3093 #HANGUL SYLLABLE MIEUM WE SSANGSIOS + {0x9290, 0xBB81}, //3094 #HANGUL SYLLABLE MIEUM WE IEUNG + {0x9291, 0xBB82}, //3095 #HANGUL SYLLABLE MIEUM WE CIEUC + {0x9292, 0xBB83}, //3096 #HANGUL SYLLABLE MIEUM WE CHIEUCH + {0x9293, 0xBB84}, //3097 #HANGUL SYLLABLE MIEUM WE KHIEUKH + {0x9294, 0xBB85}, //3098 #HANGUL SYLLABLE MIEUM WE THIEUTH + {0x9295, 0xBB86}, //3099 #HANGUL SYLLABLE MIEUM WE PHIEUPH + {0x9296, 0xBB87}, //3100 #HANGUL SYLLABLE MIEUM WE HIEUH + {0x9297, 0xBB89}, //3101 #HANGUL SYLLABLE MIEUM WI KIYEOK + {0x9298, 0xBB8A}, //3102 #HANGUL SYLLABLE MIEUM WI SSANGKIYEOK + {0x9299, 0xBB8B}, //3103 #HANGUL SYLLABLE MIEUM WI KIYEOKSIOS + {0x929A, 0xBB8D}, //3104 #HANGUL SYLLABLE MIEUM WI NIEUNCIEUC + {0x929B, 0xBB8E}, //3105 #HANGUL SYLLABLE MIEUM WI NIEUNHIEUH + {0x929C, 0xBB8F}, //3106 #HANGUL SYLLABLE MIEUM WI TIKEUT + {0x929D, 0xBB91}, //3107 #HANGUL SYLLABLE MIEUM WI RIEULKIYEOK + {0x929E, 0xBB92}, //3108 #HANGUL SYLLABLE MIEUM WI RIEULMIEUM + {0x929F, 0xBB93}, //3109 #HANGUL SYLLABLE MIEUM WI RIEULPIEUP + {0x92A0, 0xBB94}, //3110 #HANGUL SYLLABLE MIEUM WI RIEULSIOS + {0x92A1, 0xBB95}, //3111 #HANGUL SYLLABLE MIEUM WI RIEULTHIEUTH + {0x92A2, 0xBB96}, //3112 #HANGUL SYLLABLE MIEUM WI RIEULPHIEUPH + {0x92A3, 0xBB97}, //3113 #HANGUL SYLLABLE MIEUM WI RIEULHIEUH + {0x92A4, 0xBB98}, //3114 #HANGUL SYLLABLE MIEUM WI MIEUM + {0x92A5, 0xBB99}, //3115 #HANGUL SYLLABLE MIEUM WI PIEUP + {0x92A6, 0xBB9A}, //3116 #HANGUL SYLLABLE MIEUM WI PIEUPSIOS + {0x92A7, 0xBB9B}, //3117 #HANGUL SYLLABLE MIEUM WI SIOS + {0x92A8, 0xBB9C}, //3118 #HANGUL SYLLABLE MIEUM WI SSANGSIOS + {0x92A9, 0xBB9D}, //3119 #HANGUL SYLLABLE MIEUM WI IEUNG + {0x92AA, 0xBB9E}, //3120 #HANGUL SYLLABLE MIEUM WI CIEUC + {0x92AB, 0xBB9F}, //3121 #HANGUL SYLLABLE MIEUM WI CHIEUCH + {0x92AC, 0xBBA0}, //3122 #HANGUL SYLLABLE MIEUM WI KHIEUKH + {0x92AD, 0xBBA1}, //3123 #HANGUL SYLLABLE MIEUM WI THIEUTH + {0x92AE, 0xBBA2}, //3124 #HANGUL SYLLABLE MIEUM WI PHIEUPH + {0x92AF, 0xBBA3}, //3125 #HANGUL SYLLABLE MIEUM WI HIEUH + {0x92B0, 0xBBA5}, //3126 #HANGUL SYLLABLE MIEUM YU KIYEOK + {0x92B1, 0xBBA6}, //3127 #HANGUL SYLLABLE MIEUM YU SSANGKIYEOK + {0x92B2, 0xBBA7}, //3128 #HANGUL SYLLABLE MIEUM YU KIYEOKSIOS + {0x92B3, 0xBBA9}, //3129 #HANGUL SYLLABLE MIEUM YU NIEUNCIEUC + {0x92B4, 0xBBAA}, //3130 #HANGUL SYLLABLE MIEUM YU NIEUNHIEUH + {0x92B5, 0xBBAB}, //3131 #HANGUL SYLLABLE MIEUM YU TIKEUT + {0x92B6, 0xBBAD}, //3132 #HANGUL SYLLABLE MIEUM YU RIEULKIYEOK + {0x92B7, 0xBBAE}, //3133 #HANGUL SYLLABLE MIEUM YU RIEULMIEUM + {0x92B8, 0xBBAF}, //3134 #HANGUL SYLLABLE MIEUM YU RIEULPIEUP + {0x92B9, 0xBBB0}, //3135 #HANGUL SYLLABLE MIEUM YU RIEULSIOS + {0x92BA, 0xBBB1}, //3136 #HANGUL SYLLABLE MIEUM YU RIEULTHIEUTH + {0x92BB, 0xBBB2}, //3137 #HANGUL SYLLABLE MIEUM YU RIEULPHIEUPH + {0x92BC, 0xBBB3}, //3138 #HANGUL SYLLABLE MIEUM YU RIEULHIEUH + {0x92BD, 0xBBB5}, //3139 #HANGUL SYLLABLE MIEUM YU PIEUP + {0x92BE, 0xBBB6}, //3140 #HANGUL SYLLABLE MIEUM YU PIEUPSIOS + {0x92BF, 0xBBB8}, //3141 #HANGUL SYLLABLE MIEUM YU SSANGSIOS + {0x92C0, 0xBBB9}, //3142 #HANGUL SYLLABLE MIEUM YU IEUNG + {0x92C1, 0xBBBA}, //3143 #HANGUL SYLLABLE MIEUM YU CIEUC + {0x92C2, 0xBBBB}, //3144 #HANGUL SYLLABLE MIEUM YU CHIEUCH + {0x92C3, 0xBBBC}, //3145 #HANGUL SYLLABLE MIEUM YU KHIEUKH + {0x92C4, 0xBBBD}, //3146 #HANGUL SYLLABLE MIEUM YU THIEUTH + {0x92C5, 0xBBBE}, //3147 #HANGUL SYLLABLE MIEUM YU PHIEUPH + {0x92C6, 0xBBBF}, //3148 #HANGUL SYLLABLE MIEUM YU HIEUH + {0x92C7, 0xBBC1}, //3149 #HANGUL SYLLABLE MIEUM EU KIYEOK + {0x92C8, 0xBBC2}, //3150 #HANGUL SYLLABLE MIEUM EU SSANGKIYEOK + {0x92C9, 0xBBC3}, //3151 #HANGUL SYLLABLE MIEUM EU KIYEOKSIOS + {0x92CA, 0xBBC5}, //3152 #HANGUL SYLLABLE MIEUM EU NIEUNCIEUC + {0x92CB, 0xBBC6}, //3153 #HANGUL SYLLABLE MIEUM EU NIEUNHIEUH + {0x92CC, 0xBBC7}, //3154 #HANGUL SYLLABLE MIEUM EU TIKEUT + {0x92CD, 0xBBC9}, //3155 #HANGUL SYLLABLE MIEUM EU RIEULKIYEOK + {0x92CE, 0xBBCA}, //3156 #HANGUL SYLLABLE MIEUM EU RIEULMIEUM + {0x92CF, 0xBBCB}, //3157 #HANGUL SYLLABLE MIEUM EU RIEULPIEUP + {0x92D0, 0xBBCC}, //3158 #HANGUL SYLLABLE MIEUM EU RIEULSIOS + {0x92D1, 0xBBCD}, //3159 #HANGUL SYLLABLE MIEUM EU RIEULTHIEUTH + {0x92D2, 0xBBCE}, //3160 #HANGUL SYLLABLE MIEUM EU RIEULPHIEUPH + {0x92D3, 0xBBCF}, //3161 #HANGUL SYLLABLE MIEUM EU RIEULHIEUH + {0x92D4, 0xBBD1}, //3162 #HANGUL SYLLABLE MIEUM EU PIEUP + {0x92D5, 0xBBD2}, //3163 #HANGUL SYLLABLE MIEUM EU PIEUPSIOS + {0x92D6, 0xBBD4}, //3164 #HANGUL SYLLABLE MIEUM EU SSANGSIOS + {0x92D7, 0xBBD5}, //3165 #HANGUL SYLLABLE MIEUM EU IEUNG + {0x92D8, 0xBBD6}, //3166 #HANGUL SYLLABLE MIEUM EU CIEUC + {0x92D9, 0xBBD7}, //3167 #HANGUL SYLLABLE MIEUM EU CHIEUCH + {0x92DA, 0xBBD8}, //3168 #HANGUL SYLLABLE MIEUM EU KHIEUKH + {0x92DB, 0xBBD9}, //3169 #HANGUL SYLLABLE MIEUM EU THIEUTH + {0x92DC, 0xBBDA}, //3170 #HANGUL SYLLABLE MIEUM EU PHIEUPH + {0x92DD, 0xBBDB}, //3171 #HANGUL SYLLABLE MIEUM EU HIEUH + {0x92DE, 0xBBDC}, //3172 #HANGUL SYLLABLE MIEUM YI + {0x92DF, 0xBBDD}, //3173 #HANGUL SYLLABLE MIEUM YI KIYEOK + {0x92E0, 0xBBDE}, //3174 #HANGUL SYLLABLE MIEUM YI SSANGKIYEOK + {0x92E1, 0xBBDF}, //3175 #HANGUL SYLLABLE MIEUM YI KIYEOKSIOS + {0x92E2, 0xBBE0}, //3176 #HANGUL SYLLABLE MIEUM YI NIEUN + {0x92E3, 0xBBE1}, //3177 #HANGUL SYLLABLE MIEUM YI NIEUNCIEUC + {0x92E4, 0xBBE2}, //3178 #HANGUL SYLLABLE MIEUM YI NIEUNHIEUH + {0x92E5, 0xBBE3}, //3179 #HANGUL SYLLABLE MIEUM YI TIKEUT + {0x92E6, 0xBBE4}, //3180 #HANGUL SYLLABLE MIEUM YI RIEUL + {0x92E7, 0xBBE5}, //3181 #HANGUL SYLLABLE MIEUM YI RIEULKIYEOK + {0x92E8, 0xBBE6}, //3182 #HANGUL SYLLABLE MIEUM YI RIEULMIEUM + {0x92E9, 0xBBE7}, //3183 #HANGUL SYLLABLE MIEUM YI RIEULPIEUP + {0x92EA, 0xBBE8}, //3184 #HANGUL SYLLABLE MIEUM YI RIEULSIOS + {0x92EB, 0xBBE9}, //3185 #HANGUL SYLLABLE MIEUM YI RIEULTHIEUTH + {0x92EC, 0xBBEA}, //3186 #HANGUL SYLLABLE MIEUM YI RIEULPHIEUPH + {0x92ED, 0xBBEB}, //3187 #HANGUL SYLLABLE MIEUM YI RIEULHIEUH + {0x92EE, 0xBBEC}, //3188 #HANGUL SYLLABLE MIEUM YI MIEUM + {0x92EF, 0xBBED}, //3189 #HANGUL SYLLABLE MIEUM YI PIEUP + {0x92F0, 0xBBEE}, //3190 #HANGUL SYLLABLE MIEUM YI PIEUPSIOS + {0x92F1, 0xBBEF}, //3191 #HANGUL SYLLABLE MIEUM YI SIOS + {0x92F2, 0xBBF0}, //3192 #HANGUL SYLLABLE MIEUM YI SSANGSIOS + {0x92F3, 0xBBF1}, //3193 #HANGUL SYLLABLE MIEUM YI IEUNG + {0x92F4, 0xBBF2}, //3194 #HANGUL SYLLABLE MIEUM YI CIEUC + {0x92F5, 0xBBF3}, //3195 #HANGUL SYLLABLE MIEUM YI CHIEUCH + {0x92F6, 0xBBF4}, //3196 #HANGUL SYLLABLE MIEUM YI KHIEUKH + {0x92F7, 0xBBF5}, //3197 #HANGUL SYLLABLE MIEUM YI THIEUTH + {0x92F8, 0xBBF6}, //3198 #HANGUL SYLLABLE MIEUM YI PHIEUPH + {0x92F9, 0xBBF7}, //3199 #HANGUL SYLLABLE MIEUM YI HIEUH + {0x92FA, 0xBBFA}, //3200 #HANGUL SYLLABLE MIEUM I SSANGKIYEOK + {0x92FB, 0xBBFB}, //3201 #HANGUL SYLLABLE MIEUM I KIYEOKSIOS + {0x92FC, 0xBBFD}, //3202 #HANGUL SYLLABLE MIEUM I NIEUNCIEUC + {0x92FD, 0xBBFE}, //3203 #HANGUL SYLLABLE MIEUM I NIEUNHIEUH + {0x92FE, 0xBC01}, //3204 #HANGUL SYLLABLE MIEUM I RIEULKIYEOK + {0x9341, 0xBC03}, //3205 #HANGUL SYLLABLE MIEUM I RIEULPIEUP + {0x9342, 0xBC04}, //3206 #HANGUL SYLLABLE MIEUM I RIEULSIOS + {0x9343, 0xBC05}, //3207 #HANGUL SYLLABLE MIEUM I RIEULTHIEUTH + {0x9344, 0xBC06}, //3208 #HANGUL SYLLABLE MIEUM I RIEULPHIEUPH + {0x9345, 0xBC07}, //3209 #HANGUL SYLLABLE MIEUM I RIEULHIEUH + {0x9346, 0xBC0A}, //3210 #HANGUL SYLLABLE MIEUM I PIEUPSIOS + {0x9347, 0xBC0E}, //3211 #HANGUL SYLLABLE MIEUM I CIEUC + {0x9348, 0xBC10}, //3212 #HANGUL SYLLABLE MIEUM I KHIEUKH + {0x9349, 0xBC12}, //3213 #HANGUL SYLLABLE MIEUM I PHIEUPH + {0x934A, 0xBC13}, //3214 #HANGUL SYLLABLE MIEUM I HIEUH + {0x934B, 0xBC19}, //3215 #HANGUL SYLLABLE PIEUP A NIEUNCIEUC + {0x934C, 0xBC1A}, //3216 #HANGUL SYLLABLE PIEUP A NIEUNHIEUH + {0x934D, 0xBC20}, //3217 #HANGUL SYLLABLE PIEUP A RIEULSIOS + {0x934E, 0xBC21}, //3218 #HANGUL SYLLABLE PIEUP A RIEULTHIEUTH + {0x934F, 0xBC22}, //3219 #HANGUL SYLLABLE PIEUP A RIEULPHIEUPH + {0x9350, 0xBC23}, //3220 #HANGUL SYLLABLE PIEUP A RIEULHIEUH + {0x9351, 0xBC26}, //3221 #HANGUL SYLLABLE PIEUP A PIEUPSIOS + {0x9352, 0xBC28}, //3222 #HANGUL SYLLABLE PIEUP A SSANGSIOS + {0x9353, 0xBC2A}, //3223 #HANGUL SYLLABLE PIEUP A CIEUC + {0x9354, 0xBC2B}, //3224 #HANGUL SYLLABLE PIEUP A CHIEUCH + {0x9355, 0xBC2C}, //3225 #HANGUL SYLLABLE PIEUP A KHIEUKH + {0x9356, 0xBC2E}, //3226 #HANGUL SYLLABLE PIEUP A PHIEUPH + {0x9357, 0xBC2F}, //3227 #HANGUL SYLLABLE PIEUP A HIEUH + {0x9358, 0xBC32}, //3228 #HANGUL SYLLABLE PIEUP AE SSANGKIYEOK + {0x9359, 0xBC33}, //3229 #HANGUL SYLLABLE PIEUP AE KIYEOKSIOS + {0x935A, 0xBC35}, //3230 #HANGUL SYLLABLE PIEUP AE NIEUNCIEUC + {0x9361, 0xBC36}, //3231 #HANGUL SYLLABLE PIEUP AE NIEUNHIEUH + {0x9362, 0xBC37}, //3232 #HANGUL SYLLABLE PIEUP AE TIKEUT + {0x9363, 0xBC39}, //3233 #HANGUL SYLLABLE PIEUP AE RIEULKIYEOK + {0x9364, 0xBC3A}, //3234 #HANGUL SYLLABLE PIEUP AE RIEULMIEUM + {0x9365, 0xBC3B}, //3235 #HANGUL SYLLABLE PIEUP AE RIEULPIEUP + {0x9366, 0xBC3C}, //3236 #HANGUL SYLLABLE PIEUP AE RIEULSIOS + {0x9367, 0xBC3D}, //3237 #HANGUL SYLLABLE PIEUP AE RIEULTHIEUTH + {0x9368, 0xBC3E}, //3238 #HANGUL SYLLABLE PIEUP AE RIEULPHIEUPH + {0x9369, 0xBC3F}, //3239 #HANGUL SYLLABLE PIEUP AE RIEULHIEUH + {0x936A, 0xBC42}, //3240 #HANGUL SYLLABLE PIEUP AE PIEUPSIOS + {0x936B, 0xBC46}, //3241 #HANGUL SYLLABLE PIEUP AE CIEUC + {0x936C, 0xBC47}, //3242 #HANGUL SYLLABLE PIEUP AE CHIEUCH + {0x936D, 0xBC48}, //3243 #HANGUL SYLLABLE PIEUP AE KHIEUKH + {0x936E, 0xBC4A}, //3244 #HANGUL SYLLABLE PIEUP AE PHIEUPH + {0x936F, 0xBC4B}, //3245 #HANGUL SYLLABLE PIEUP AE HIEUH + {0x9370, 0xBC4E}, //3246 #HANGUL SYLLABLE PIEUP YA SSANGKIYEOK + {0x9371, 0xBC4F}, //3247 #HANGUL SYLLABLE PIEUP YA KIYEOKSIOS + {0x9372, 0xBC51}, //3248 #HANGUL SYLLABLE PIEUP YA NIEUNCIEUC + {0x9373, 0xBC52}, //3249 #HANGUL SYLLABLE PIEUP YA NIEUNHIEUH + {0x9374, 0xBC53}, //3250 #HANGUL SYLLABLE PIEUP YA TIKEUT + {0x9375, 0xBC54}, //3251 #HANGUL SYLLABLE PIEUP YA RIEUL + {0x9376, 0xBC55}, //3252 #HANGUL SYLLABLE PIEUP YA RIEULKIYEOK + {0x9377, 0xBC56}, //3253 #HANGUL SYLLABLE PIEUP YA RIEULMIEUM + {0x9378, 0xBC57}, //3254 #HANGUL SYLLABLE PIEUP YA RIEULPIEUP + {0x9379, 0xBC58}, //3255 #HANGUL SYLLABLE PIEUP YA RIEULSIOS + {0x937A, 0xBC59}, //3256 #HANGUL SYLLABLE PIEUP YA RIEULTHIEUTH + {0x9381, 0xBC5A}, //3257 #HANGUL SYLLABLE PIEUP YA RIEULPHIEUPH + {0x9382, 0xBC5B}, //3258 #HANGUL SYLLABLE PIEUP YA RIEULHIEUH + {0x9383, 0xBC5C}, //3259 #HANGUL SYLLABLE PIEUP YA MIEUM + {0x9384, 0xBC5E}, //3260 #HANGUL SYLLABLE PIEUP YA PIEUPSIOS + {0x9385, 0xBC5F}, //3261 #HANGUL SYLLABLE PIEUP YA SIOS + {0x9386, 0xBC60}, //3262 #HANGUL SYLLABLE PIEUP YA SSANGSIOS + {0x9387, 0xBC61}, //3263 #HANGUL SYLLABLE PIEUP YA IEUNG + {0x9388, 0xBC62}, //3264 #HANGUL SYLLABLE PIEUP YA CIEUC + {0x9389, 0xBC63}, //3265 #HANGUL SYLLABLE PIEUP YA CHIEUCH + {0x938A, 0xBC64}, //3266 #HANGUL SYLLABLE PIEUP YA KHIEUKH + {0x938B, 0xBC65}, //3267 #HANGUL SYLLABLE PIEUP YA THIEUTH + {0x938C, 0xBC66}, //3268 #HANGUL SYLLABLE PIEUP YA PHIEUPH + {0x938D, 0xBC67}, //3269 #HANGUL SYLLABLE PIEUP YA HIEUH + {0x938E, 0xBC68}, //3270 #HANGUL SYLLABLE PIEUP YAE + {0x938F, 0xBC69}, //3271 #HANGUL SYLLABLE PIEUP YAE KIYEOK + {0x9390, 0xBC6A}, //3272 #HANGUL SYLLABLE PIEUP YAE SSANGKIYEOK + {0x9391, 0xBC6B}, //3273 #HANGUL SYLLABLE PIEUP YAE KIYEOKSIOS + {0x9392, 0xBC6C}, //3274 #HANGUL SYLLABLE PIEUP YAE NIEUN + {0x9393, 0xBC6D}, //3275 #HANGUL SYLLABLE PIEUP YAE NIEUNCIEUC + {0x9394, 0xBC6E}, //3276 #HANGUL SYLLABLE PIEUP YAE NIEUNHIEUH + {0x9395, 0xBC6F}, //3277 #HANGUL SYLLABLE PIEUP YAE TIKEUT + {0x9396, 0xBC70}, //3278 #HANGUL SYLLABLE PIEUP YAE RIEUL + {0x9397, 0xBC71}, //3279 #HANGUL SYLLABLE PIEUP YAE RIEULKIYEOK + {0x9398, 0xBC72}, //3280 #HANGUL SYLLABLE PIEUP YAE RIEULMIEUM + {0x9399, 0xBC73}, //3281 #HANGUL SYLLABLE PIEUP YAE RIEULPIEUP + {0x939A, 0xBC74}, //3282 #HANGUL SYLLABLE PIEUP YAE RIEULSIOS + {0x939B, 0xBC75}, //3283 #HANGUL SYLLABLE PIEUP YAE RIEULTHIEUTH + {0x939C, 0xBC76}, //3284 #HANGUL SYLLABLE PIEUP YAE RIEULPHIEUPH + {0x939D, 0xBC77}, //3285 #HANGUL SYLLABLE PIEUP YAE RIEULHIEUH + {0x939E, 0xBC78}, //3286 #HANGUL SYLLABLE PIEUP YAE MIEUM + {0x939F, 0xBC79}, //3287 #HANGUL SYLLABLE PIEUP YAE PIEUP + {0x93A0, 0xBC7A}, //3288 #HANGUL SYLLABLE PIEUP YAE PIEUPSIOS + {0x93A1, 0xBC7B}, //3289 #HANGUL SYLLABLE PIEUP YAE SIOS + {0x93A2, 0xBC7C}, //3290 #HANGUL SYLLABLE PIEUP YAE SSANGSIOS + {0x93A3, 0xBC7D}, //3291 #HANGUL SYLLABLE PIEUP YAE IEUNG + {0x93A4, 0xBC7E}, //3292 #HANGUL SYLLABLE PIEUP YAE CIEUC + {0x93A5, 0xBC7F}, //3293 #HANGUL SYLLABLE PIEUP YAE CHIEUCH + {0x93A6, 0xBC80}, //3294 #HANGUL SYLLABLE PIEUP YAE KHIEUKH + {0x93A7, 0xBC81}, //3295 #HANGUL SYLLABLE PIEUP YAE THIEUTH + {0x93A8, 0xBC82}, //3296 #HANGUL SYLLABLE PIEUP YAE PHIEUPH + {0x93A9, 0xBC83}, //3297 #HANGUL SYLLABLE PIEUP YAE HIEUH + {0x93AA, 0xBC86}, //3298 #HANGUL SYLLABLE PIEUP EO SSANGKIYEOK + {0x93AB, 0xBC87}, //3299 #HANGUL SYLLABLE PIEUP EO KIYEOKSIOS + {0x93AC, 0xBC89}, //3300 #HANGUL SYLLABLE PIEUP EO NIEUNCIEUC + {0x93AD, 0xBC8A}, //3301 #HANGUL SYLLABLE PIEUP EO NIEUNHIEUH + {0x93AE, 0xBC8D}, //3302 #HANGUL SYLLABLE PIEUP EO RIEULKIYEOK + {0x93AF, 0xBC8F}, //3303 #HANGUL SYLLABLE PIEUP EO RIEULPIEUP + {0x93B0, 0xBC90}, //3304 #HANGUL SYLLABLE PIEUP EO RIEULSIOS + {0x93B1, 0xBC91}, //3305 #HANGUL SYLLABLE PIEUP EO RIEULTHIEUTH + {0x93B2, 0xBC92}, //3306 #HANGUL SYLLABLE PIEUP EO RIEULPHIEUPH + {0x93B3, 0xBC93}, //3307 #HANGUL SYLLABLE PIEUP EO RIEULHIEUH + {0x93B4, 0xBC96}, //3308 #HANGUL SYLLABLE PIEUP EO PIEUPSIOS + {0x93B5, 0xBC98}, //3309 #HANGUL SYLLABLE PIEUP EO SSANGSIOS + {0x93B6, 0xBC9B}, //3310 #HANGUL SYLLABLE PIEUP EO CHIEUCH + {0x93B7, 0xBC9C}, //3311 #HANGUL SYLLABLE PIEUP EO KHIEUKH + {0x93B8, 0xBC9D}, //3312 #HANGUL SYLLABLE PIEUP EO THIEUTH + {0x93B9, 0xBC9E}, //3313 #HANGUL SYLLABLE PIEUP EO PHIEUPH + {0x93BA, 0xBC9F}, //3314 #HANGUL SYLLABLE PIEUP EO HIEUH + {0x93BB, 0xBCA2}, //3315 #HANGUL SYLLABLE PIEUP E SSANGKIYEOK + {0x93BC, 0xBCA3}, //3316 #HANGUL SYLLABLE PIEUP E KIYEOKSIOS + {0x93BD, 0xBCA5}, //3317 #HANGUL SYLLABLE PIEUP E NIEUNCIEUC + {0x93BE, 0xBCA6}, //3318 #HANGUL SYLLABLE PIEUP E NIEUNHIEUH + {0x93BF, 0xBCA9}, //3319 #HANGUL SYLLABLE PIEUP E RIEULKIYEOK + {0x93C0, 0xBCAA}, //3320 #HANGUL SYLLABLE PIEUP E RIEULMIEUM + {0x93C1, 0xBCAB}, //3321 #HANGUL SYLLABLE PIEUP E RIEULPIEUP + {0x93C2, 0xBCAC}, //3322 #HANGUL SYLLABLE PIEUP E RIEULSIOS + {0x93C3, 0xBCAD}, //3323 #HANGUL SYLLABLE PIEUP E RIEULTHIEUTH + {0x93C4, 0xBCAE}, //3324 #HANGUL SYLLABLE PIEUP E RIEULPHIEUPH + {0x93C5, 0xBCAF}, //3325 #HANGUL SYLLABLE PIEUP E RIEULHIEUH + {0x93C6, 0xBCB2}, //3326 #HANGUL SYLLABLE PIEUP E PIEUPSIOS + {0x93C7, 0xBCB6}, //3327 #HANGUL SYLLABLE PIEUP E CIEUC + {0x93C8, 0xBCB7}, //3328 #HANGUL SYLLABLE PIEUP E CHIEUCH + {0x93C9, 0xBCB8}, //3329 #HANGUL SYLLABLE PIEUP E KHIEUKH + {0x93CA, 0xBCB9}, //3330 #HANGUL SYLLABLE PIEUP E THIEUTH + {0x93CB, 0xBCBA}, //3331 #HANGUL SYLLABLE PIEUP E PHIEUPH + {0x93CC, 0xBCBB}, //3332 #HANGUL SYLLABLE PIEUP E HIEUH + {0x93CD, 0xBCBE}, //3333 #HANGUL SYLLABLE PIEUP YEO SSANGKIYEOK + {0x93CE, 0xBCBF}, //3334 #HANGUL SYLLABLE PIEUP YEO KIYEOKSIOS + {0x93CF, 0xBCC1}, //3335 #HANGUL SYLLABLE PIEUP YEO NIEUNCIEUC + {0x93D0, 0xBCC2}, //3336 #HANGUL SYLLABLE PIEUP YEO NIEUNHIEUH + {0x93D1, 0xBCC3}, //3337 #HANGUL SYLLABLE PIEUP YEO TIKEUT + {0x93D2, 0xBCC5}, //3338 #HANGUL SYLLABLE PIEUP YEO RIEULKIYEOK + {0x93D3, 0xBCC6}, //3339 #HANGUL SYLLABLE PIEUP YEO RIEULMIEUM + {0x93D4, 0xBCC7}, //3340 #HANGUL SYLLABLE PIEUP YEO RIEULPIEUP + {0x93D5, 0xBCC8}, //3341 #HANGUL SYLLABLE PIEUP YEO RIEULSIOS + {0x93D6, 0xBCC9}, //3342 #HANGUL SYLLABLE PIEUP YEO RIEULTHIEUTH + {0x93D7, 0xBCCA}, //3343 #HANGUL SYLLABLE PIEUP YEO RIEULPHIEUPH + {0x93D8, 0xBCCB}, //3344 #HANGUL SYLLABLE PIEUP YEO RIEULHIEUH + {0x93D9, 0xBCCC}, //3345 #HANGUL SYLLABLE PIEUP YEO MIEUM + {0x93DA, 0xBCCE}, //3346 #HANGUL SYLLABLE PIEUP YEO PIEUPSIOS + {0x93DB, 0xBCD2}, //3347 #HANGUL SYLLABLE PIEUP YEO CIEUC + {0x93DC, 0xBCD3}, //3348 #HANGUL SYLLABLE PIEUP YEO CHIEUCH + {0x93DD, 0xBCD4}, //3349 #HANGUL SYLLABLE PIEUP YEO KHIEUKH + {0x93DE, 0xBCD6}, //3350 #HANGUL SYLLABLE PIEUP YEO PHIEUPH + {0x93DF, 0xBCD7}, //3351 #HANGUL SYLLABLE PIEUP YEO HIEUH + {0x93E0, 0xBCD9}, //3352 #HANGUL SYLLABLE PIEUP YE KIYEOK + {0x93E1, 0xBCDA}, //3353 #HANGUL SYLLABLE PIEUP YE SSANGKIYEOK + {0x93E2, 0xBCDB}, //3354 #HANGUL SYLLABLE PIEUP YE KIYEOKSIOS + {0x93E3, 0xBCDD}, //3355 #HANGUL SYLLABLE PIEUP YE NIEUNCIEUC + {0x93E4, 0xBCDE}, //3356 #HANGUL SYLLABLE PIEUP YE NIEUNHIEUH + {0x93E5, 0xBCDF}, //3357 #HANGUL SYLLABLE PIEUP YE TIKEUT + {0x93E6, 0xBCE0}, //3358 #HANGUL SYLLABLE PIEUP YE RIEUL + {0x93E7, 0xBCE1}, //3359 #HANGUL SYLLABLE PIEUP YE RIEULKIYEOK + {0x93E8, 0xBCE2}, //3360 #HANGUL SYLLABLE PIEUP YE RIEULMIEUM + {0x93E9, 0xBCE3}, //3361 #HANGUL SYLLABLE PIEUP YE RIEULPIEUP + {0x93EA, 0xBCE4}, //3362 #HANGUL SYLLABLE PIEUP YE RIEULSIOS + {0x93EB, 0xBCE5}, //3363 #HANGUL SYLLABLE PIEUP YE RIEULTHIEUTH + {0x93EC, 0xBCE6}, //3364 #HANGUL SYLLABLE PIEUP YE RIEULPHIEUPH + {0x93ED, 0xBCE7}, //3365 #HANGUL SYLLABLE PIEUP YE RIEULHIEUH + {0x93EE, 0xBCE8}, //3366 #HANGUL SYLLABLE PIEUP YE MIEUM + {0x93EF, 0xBCE9}, //3367 #HANGUL SYLLABLE PIEUP YE PIEUP + {0x93F0, 0xBCEA}, //3368 #HANGUL SYLLABLE PIEUP YE PIEUPSIOS + {0x93F1, 0xBCEB}, //3369 #HANGUL SYLLABLE PIEUP YE SIOS + {0x93F2, 0xBCEC}, //3370 #HANGUL SYLLABLE PIEUP YE SSANGSIOS + {0x93F3, 0xBCED}, //3371 #HANGUL SYLLABLE PIEUP YE IEUNG + {0x93F4, 0xBCEE}, //3372 #HANGUL SYLLABLE PIEUP YE CIEUC + {0x93F5, 0xBCEF}, //3373 #HANGUL SYLLABLE PIEUP YE CHIEUCH + {0x93F6, 0xBCF0}, //3374 #HANGUL SYLLABLE PIEUP YE KHIEUKH + {0x93F7, 0xBCF1}, //3375 #HANGUL SYLLABLE PIEUP YE THIEUTH + {0x93F8, 0xBCF2}, //3376 #HANGUL SYLLABLE PIEUP YE PHIEUPH + {0x93F9, 0xBCF3}, //3377 #HANGUL SYLLABLE PIEUP YE HIEUH + {0x93FA, 0xBCF7}, //3378 #HANGUL SYLLABLE PIEUP O KIYEOKSIOS + {0x93FB, 0xBCF9}, //3379 #HANGUL SYLLABLE PIEUP O NIEUNCIEUC + {0x93FC, 0xBCFA}, //3380 #HANGUL SYLLABLE PIEUP O NIEUNHIEUH + {0x93FD, 0xBCFB}, //3381 #HANGUL SYLLABLE PIEUP O TIKEUT + {0x93FE, 0xBCFD}, //3382 #HANGUL SYLLABLE PIEUP O RIEULKIYEOK + {0x9441, 0xBCFE}, //3383 #HANGUL SYLLABLE PIEUP O RIEULMIEUM + {0x9442, 0xBCFF}, //3384 #HANGUL SYLLABLE PIEUP O RIEULPIEUP + {0x9443, 0xBD00}, //3385 #HANGUL SYLLABLE PIEUP O RIEULSIOS + {0x9444, 0xBD01}, //3386 #HANGUL SYLLABLE PIEUP O RIEULTHIEUTH + {0x9445, 0xBD02}, //3387 #HANGUL SYLLABLE PIEUP O RIEULPHIEUPH + {0x9446, 0xBD03}, //3388 #HANGUL SYLLABLE PIEUP O RIEULHIEUH + {0x9447, 0xBD06}, //3389 #HANGUL SYLLABLE PIEUP O PIEUPSIOS + {0x9448, 0xBD08}, //3390 #HANGUL SYLLABLE PIEUP O SSANGSIOS + {0x9449, 0xBD0A}, //3391 #HANGUL SYLLABLE PIEUP O CIEUC + {0x944A, 0xBD0B}, //3392 #HANGUL SYLLABLE PIEUP O CHIEUCH + {0x944B, 0xBD0C}, //3393 #HANGUL SYLLABLE PIEUP O KHIEUKH + {0x944C, 0xBD0D}, //3394 #HANGUL SYLLABLE PIEUP O THIEUTH + {0x944D, 0xBD0E}, //3395 #HANGUL SYLLABLE PIEUP O PHIEUPH + {0x944E, 0xBD0F}, //3396 #HANGUL SYLLABLE PIEUP O HIEUH + {0x944F, 0xBD11}, //3397 #HANGUL SYLLABLE PIEUP WA KIYEOK + {0x9450, 0xBD12}, //3398 #HANGUL SYLLABLE PIEUP WA SSANGKIYEOK + {0x9451, 0xBD13}, //3399 #HANGUL SYLLABLE PIEUP WA KIYEOKSIOS + {0x9452, 0xBD15}, //3400 #HANGUL SYLLABLE PIEUP WA NIEUNCIEUC + {0x9453, 0xBD16}, //3401 #HANGUL SYLLABLE PIEUP WA NIEUNHIEUH + {0x9454, 0xBD17}, //3402 #HANGUL SYLLABLE PIEUP WA TIKEUT + {0x9455, 0xBD18}, //3403 #HANGUL SYLLABLE PIEUP WA RIEUL + {0x9456, 0xBD19}, //3404 #HANGUL SYLLABLE PIEUP WA RIEULKIYEOK + {0x9457, 0xBD1A}, //3405 #HANGUL SYLLABLE PIEUP WA RIEULMIEUM + {0x9458, 0xBD1B}, //3406 #HANGUL SYLLABLE PIEUP WA RIEULPIEUP + {0x9459, 0xBD1C}, //3407 #HANGUL SYLLABLE PIEUP WA RIEULSIOS + {0x945A, 0xBD1D}, //3408 #HANGUL SYLLABLE PIEUP WA RIEULTHIEUTH + {0x9461, 0xBD1E}, //3409 #HANGUL SYLLABLE PIEUP WA RIEULPHIEUPH + {0x9462, 0xBD1F}, //3410 #HANGUL SYLLABLE PIEUP WA RIEULHIEUH + {0x9463, 0xBD20}, //3411 #HANGUL SYLLABLE PIEUP WA MIEUM + {0x9464, 0xBD21}, //3412 #HANGUL SYLLABLE PIEUP WA PIEUP + {0x9465, 0xBD22}, //3413 #HANGUL SYLLABLE PIEUP WA PIEUPSIOS + {0x9466, 0xBD23}, //3414 #HANGUL SYLLABLE PIEUP WA SIOS + {0x9467, 0xBD25}, //3415 #HANGUL SYLLABLE PIEUP WA IEUNG + {0x9468, 0xBD26}, //3416 #HANGUL SYLLABLE PIEUP WA CIEUC + {0x9469, 0xBD27}, //3417 #HANGUL SYLLABLE PIEUP WA CHIEUCH + {0x946A, 0xBD28}, //3418 #HANGUL SYLLABLE PIEUP WA KHIEUKH + {0x946B, 0xBD29}, //3419 #HANGUL SYLLABLE PIEUP WA THIEUTH + {0x946C, 0xBD2A}, //3420 #HANGUL SYLLABLE PIEUP WA PHIEUPH + {0x946D, 0xBD2B}, //3421 #HANGUL SYLLABLE PIEUP WA HIEUH + {0x946E, 0xBD2D}, //3422 #HANGUL SYLLABLE PIEUP WAE KIYEOK + {0x946F, 0xBD2E}, //3423 #HANGUL SYLLABLE PIEUP WAE SSANGKIYEOK + {0x9470, 0xBD2F}, //3424 #HANGUL SYLLABLE PIEUP WAE KIYEOKSIOS + {0x9471, 0xBD30}, //3425 #HANGUL SYLLABLE PIEUP WAE NIEUN + {0x9472, 0xBD31}, //3426 #HANGUL SYLLABLE PIEUP WAE NIEUNCIEUC + {0x9473, 0xBD32}, //3427 #HANGUL SYLLABLE PIEUP WAE NIEUNHIEUH + {0x9474, 0xBD33}, //3428 #HANGUL SYLLABLE PIEUP WAE TIKEUT + {0x9475, 0xBD34}, //3429 #HANGUL SYLLABLE PIEUP WAE RIEUL + {0x9476, 0xBD35}, //3430 #HANGUL SYLLABLE PIEUP WAE RIEULKIYEOK + {0x9477, 0xBD36}, //3431 #HANGUL SYLLABLE PIEUP WAE RIEULMIEUM + {0x9478, 0xBD37}, //3432 #HANGUL SYLLABLE PIEUP WAE RIEULPIEUP + {0x9479, 0xBD38}, //3433 #HANGUL SYLLABLE PIEUP WAE RIEULSIOS + {0x947A, 0xBD39}, //3434 #HANGUL SYLLABLE PIEUP WAE RIEULTHIEUTH + {0x9481, 0xBD3A}, //3435 #HANGUL SYLLABLE PIEUP WAE RIEULPHIEUPH + {0x9482, 0xBD3B}, //3436 #HANGUL SYLLABLE PIEUP WAE RIEULHIEUH + {0x9483, 0xBD3C}, //3437 #HANGUL SYLLABLE PIEUP WAE MIEUM + {0x9484, 0xBD3D}, //3438 #HANGUL SYLLABLE PIEUP WAE PIEUP + {0x9485, 0xBD3E}, //3439 #HANGUL SYLLABLE PIEUP WAE PIEUPSIOS + {0x9486, 0xBD3F}, //3440 #HANGUL SYLLABLE PIEUP WAE SIOS + {0x9487, 0xBD41}, //3441 #HANGUL SYLLABLE PIEUP WAE IEUNG + {0x9488, 0xBD42}, //3442 #HANGUL SYLLABLE PIEUP WAE CIEUC + {0x9489, 0xBD43}, //3443 #HANGUL SYLLABLE PIEUP WAE CHIEUCH + {0x948A, 0xBD44}, //3444 #HANGUL SYLLABLE PIEUP WAE KHIEUKH + {0x948B, 0xBD45}, //3445 #HANGUL SYLLABLE PIEUP WAE THIEUTH + {0x948C, 0xBD46}, //3446 #HANGUL SYLLABLE PIEUP WAE PHIEUPH + {0x948D, 0xBD47}, //3447 #HANGUL SYLLABLE PIEUP WAE HIEUH + {0x948E, 0xBD4A}, //3448 #HANGUL SYLLABLE PIEUP OE SSANGKIYEOK + {0x948F, 0xBD4B}, //3449 #HANGUL SYLLABLE PIEUP OE KIYEOKSIOS + {0x9490, 0xBD4D}, //3450 #HANGUL SYLLABLE PIEUP OE NIEUNCIEUC + {0x9491, 0xBD4E}, //3451 #HANGUL SYLLABLE PIEUP OE NIEUNHIEUH + {0x9492, 0xBD4F}, //3452 #HANGUL SYLLABLE PIEUP OE TIKEUT + {0x9493, 0xBD51}, //3453 #HANGUL SYLLABLE PIEUP OE RIEULKIYEOK + {0x9494, 0xBD52}, //3454 #HANGUL SYLLABLE PIEUP OE RIEULMIEUM + {0x9495, 0xBD53}, //3455 #HANGUL SYLLABLE PIEUP OE RIEULPIEUP + {0x9496, 0xBD54}, //3456 #HANGUL SYLLABLE PIEUP OE RIEULSIOS + {0x9497, 0xBD55}, //3457 #HANGUL SYLLABLE PIEUP OE RIEULTHIEUTH + {0x9498, 0xBD56}, //3458 #HANGUL SYLLABLE PIEUP OE RIEULPHIEUPH + {0x9499, 0xBD57}, //3459 #HANGUL SYLLABLE PIEUP OE RIEULHIEUH + {0x949A, 0xBD5A}, //3460 #HANGUL SYLLABLE PIEUP OE PIEUPSIOS + {0x949B, 0xBD5B}, //3461 #HANGUL SYLLABLE PIEUP OE SIOS + {0x949C, 0xBD5C}, //3462 #HANGUL SYLLABLE PIEUP OE SSANGSIOS + {0x949D, 0xBD5D}, //3463 #HANGUL SYLLABLE PIEUP OE IEUNG + {0x949E, 0xBD5E}, //3464 #HANGUL SYLLABLE PIEUP OE CIEUC + {0x949F, 0xBD5F}, //3465 #HANGUL SYLLABLE PIEUP OE CHIEUCH + {0x94A0, 0xBD60}, //3466 #HANGUL SYLLABLE PIEUP OE KHIEUKH + {0x94A1, 0xBD61}, //3467 #HANGUL SYLLABLE PIEUP OE THIEUTH + {0x94A2, 0xBD62}, //3468 #HANGUL SYLLABLE PIEUP OE PHIEUPH + {0x94A3, 0xBD63}, //3469 #HANGUL SYLLABLE PIEUP OE HIEUH + {0x94A4, 0xBD65}, //3470 #HANGUL SYLLABLE PIEUP YO KIYEOK + {0x94A5, 0xBD66}, //3471 #HANGUL SYLLABLE PIEUP YO SSANGKIYEOK + {0x94A6, 0xBD67}, //3472 #HANGUL SYLLABLE PIEUP YO KIYEOKSIOS + {0x94A7, 0xBD69}, //3473 #HANGUL SYLLABLE PIEUP YO NIEUNCIEUC + {0x94A8, 0xBD6A}, //3474 #HANGUL SYLLABLE PIEUP YO NIEUNHIEUH + {0x94A9, 0xBD6B}, //3475 #HANGUL SYLLABLE PIEUP YO TIKEUT + {0x94AA, 0xBD6C}, //3476 #HANGUL SYLLABLE PIEUP YO RIEUL + {0x94AB, 0xBD6D}, //3477 #HANGUL SYLLABLE PIEUP YO RIEULKIYEOK + {0x94AC, 0xBD6E}, //3478 #HANGUL SYLLABLE PIEUP YO RIEULMIEUM + {0x94AD, 0xBD6F}, //3479 #HANGUL SYLLABLE PIEUP YO RIEULPIEUP + {0x94AE, 0xBD70}, //3480 #HANGUL SYLLABLE PIEUP YO RIEULSIOS + {0x94AF, 0xBD71}, //3481 #HANGUL SYLLABLE PIEUP YO RIEULTHIEUTH + {0x94B0, 0xBD72}, //3482 #HANGUL SYLLABLE PIEUP YO RIEULPHIEUPH + {0x94B1, 0xBD73}, //3483 #HANGUL SYLLABLE PIEUP YO RIEULHIEUH + {0x94B2, 0xBD74}, //3484 #HANGUL SYLLABLE PIEUP YO MIEUM + {0x94B3, 0xBD75}, //3485 #HANGUL SYLLABLE PIEUP YO PIEUP + {0x94B4, 0xBD76}, //3486 #HANGUL SYLLABLE PIEUP YO PIEUPSIOS + {0x94B5, 0xBD77}, //3487 #HANGUL SYLLABLE PIEUP YO SIOS + {0x94B6, 0xBD78}, //3488 #HANGUL SYLLABLE PIEUP YO SSANGSIOS + {0x94B7, 0xBD79}, //3489 #HANGUL SYLLABLE PIEUP YO IEUNG + {0x94B8, 0xBD7A}, //3490 #HANGUL SYLLABLE PIEUP YO CIEUC + {0x94B9, 0xBD7B}, //3491 #HANGUL SYLLABLE PIEUP YO CHIEUCH + {0x94BA, 0xBD7C}, //3492 #HANGUL SYLLABLE PIEUP YO KHIEUKH + {0x94BB, 0xBD7D}, //3493 #HANGUL SYLLABLE PIEUP YO THIEUTH + {0x94BC, 0xBD7E}, //3494 #HANGUL SYLLABLE PIEUP YO PHIEUPH + {0x94BD, 0xBD7F}, //3495 #HANGUL SYLLABLE PIEUP YO HIEUH + {0x94BE, 0xBD82}, //3496 #HANGUL SYLLABLE PIEUP U SSANGKIYEOK + {0x94BF, 0xBD83}, //3497 #HANGUL SYLLABLE PIEUP U KIYEOKSIOS + {0x94C0, 0xBD85}, //3498 #HANGUL SYLLABLE PIEUP U NIEUNCIEUC + {0x94C1, 0xBD86}, //3499 #HANGUL SYLLABLE PIEUP U NIEUNHIEUH + {0x94C2, 0xBD8B}, //3500 #HANGUL SYLLABLE PIEUP U RIEULPIEUP + {0x94C3, 0xBD8C}, //3501 #HANGUL SYLLABLE PIEUP U RIEULSIOS + {0x94C4, 0xBD8D}, //3502 #HANGUL SYLLABLE PIEUP U RIEULTHIEUTH + {0x94C5, 0xBD8E}, //3503 #HANGUL SYLLABLE PIEUP U RIEULPHIEUPH + {0x94C6, 0xBD8F}, //3504 #HANGUL SYLLABLE PIEUP U RIEULHIEUH + {0x94C7, 0xBD92}, //3505 #HANGUL SYLLABLE PIEUP U PIEUPSIOS + {0x94C8, 0xBD94}, //3506 #HANGUL SYLLABLE PIEUP U SSANGSIOS + {0x94C9, 0xBD96}, //3507 #HANGUL SYLLABLE PIEUP U CIEUC + {0x94CA, 0xBD97}, //3508 #HANGUL SYLLABLE PIEUP U CHIEUCH + {0x94CB, 0xBD98}, //3509 #HANGUL SYLLABLE PIEUP U KHIEUKH + {0x94CC, 0xBD9B}, //3510 #HANGUL SYLLABLE PIEUP U HIEUH + {0x94CD, 0xBD9D}, //3511 #HANGUL SYLLABLE PIEUP WEO KIYEOK + {0x94CE, 0xBD9E}, //3512 #HANGUL SYLLABLE PIEUP WEO SSANGKIYEOK + {0x94CF, 0xBD9F}, //3513 #HANGUL SYLLABLE PIEUP WEO KIYEOKSIOS + {0x94D0, 0xBDA0}, //3514 #HANGUL SYLLABLE PIEUP WEO NIEUN + {0x94D1, 0xBDA1}, //3515 #HANGUL SYLLABLE PIEUP WEO NIEUNCIEUC + {0x94D2, 0xBDA2}, //3516 #HANGUL SYLLABLE PIEUP WEO NIEUNHIEUH + {0x94D3, 0xBDA3}, //3517 #HANGUL SYLLABLE PIEUP WEO TIKEUT + {0x94D4, 0xBDA5}, //3518 #HANGUL SYLLABLE PIEUP WEO RIEULKIYEOK + {0x94D5, 0xBDA6}, //3519 #HANGUL SYLLABLE PIEUP WEO RIEULMIEUM + {0x94D6, 0xBDA7}, //3520 #HANGUL SYLLABLE PIEUP WEO RIEULPIEUP + {0x94D7, 0xBDA8}, //3521 #HANGUL SYLLABLE PIEUP WEO RIEULSIOS + {0x94D8, 0xBDA9}, //3522 #HANGUL SYLLABLE PIEUP WEO RIEULTHIEUTH + {0x94D9, 0xBDAA}, //3523 #HANGUL SYLLABLE PIEUP WEO RIEULPHIEUPH + {0x94DA, 0xBDAB}, //3524 #HANGUL SYLLABLE PIEUP WEO RIEULHIEUH + {0x94DB, 0xBDAC}, //3525 #HANGUL SYLLABLE PIEUP WEO MIEUM + {0x94DC, 0xBDAD}, //3526 #HANGUL SYLLABLE PIEUP WEO PIEUP + {0x94DD, 0xBDAE}, //3527 #HANGUL SYLLABLE PIEUP WEO PIEUPSIOS + {0x94DE, 0xBDAF}, //3528 #HANGUL SYLLABLE PIEUP WEO SIOS + {0x94DF, 0xBDB1}, //3529 #HANGUL SYLLABLE PIEUP WEO IEUNG + {0x94E0, 0xBDB2}, //3530 #HANGUL SYLLABLE PIEUP WEO CIEUC + {0x94E1, 0xBDB3}, //3531 #HANGUL SYLLABLE PIEUP WEO CHIEUCH + {0x94E2, 0xBDB4}, //3532 #HANGUL SYLLABLE PIEUP WEO KHIEUKH + {0x94E3, 0xBDB5}, //3533 #HANGUL SYLLABLE PIEUP WEO THIEUTH + {0x94E4, 0xBDB6}, //3534 #HANGUL SYLLABLE PIEUP WEO PHIEUPH + {0x94E5, 0xBDB7}, //3535 #HANGUL SYLLABLE PIEUP WEO HIEUH + {0x94E6, 0xBDB9}, //3536 #HANGUL SYLLABLE PIEUP WE KIYEOK + {0x94E7, 0xBDBA}, //3537 #HANGUL SYLLABLE PIEUP WE SSANGKIYEOK + {0x94E8, 0xBDBB}, //3538 #HANGUL SYLLABLE PIEUP WE KIYEOKSIOS + {0x94E9, 0xBDBC}, //3539 #HANGUL SYLLABLE PIEUP WE NIEUN + {0x94EA, 0xBDBD}, //3540 #HANGUL SYLLABLE PIEUP WE NIEUNCIEUC + {0x94EB, 0xBDBE}, //3541 #HANGUL SYLLABLE PIEUP WE NIEUNHIEUH + {0x94EC, 0xBDBF}, //3542 #HANGUL SYLLABLE PIEUP WE TIKEUT + {0x94ED, 0xBDC0}, //3543 #HANGUL SYLLABLE PIEUP WE RIEUL + {0x94EE, 0xBDC1}, //3544 #HANGUL SYLLABLE PIEUP WE RIEULKIYEOK + {0x94EF, 0xBDC2}, //3545 #HANGUL SYLLABLE PIEUP WE RIEULMIEUM + {0x94F0, 0xBDC3}, //3546 #HANGUL SYLLABLE PIEUP WE RIEULPIEUP + {0x94F1, 0xBDC4}, //3547 #HANGUL SYLLABLE PIEUP WE RIEULSIOS + {0x94F2, 0xBDC5}, //3548 #HANGUL SYLLABLE PIEUP WE RIEULTHIEUTH + {0x94F3, 0xBDC6}, //3549 #HANGUL SYLLABLE PIEUP WE RIEULPHIEUPH + {0x94F4, 0xBDC7}, //3550 #HANGUL SYLLABLE PIEUP WE RIEULHIEUH + {0x94F5, 0xBDC8}, //3551 #HANGUL SYLLABLE PIEUP WE MIEUM + {0x94F6, 0xBDC9}, //3552 #HANGUL SYLLABLE PIEUP WE PIEUP + {0x94F7, 0xBDCA}, //3553 #HANGUL SYLLABLE PIEUP WE PIEUPSIOS + {0x94F8, 0xBDCB}, //3554 #HANGUL SYLLABLE PIEUP WE SIOS + {0x94F9, 0xBDCC}, //3555 #HANGUL SYLLABLE PIEUP WE SSANGSIOS + {0x94FA, 0xBDCD}, //3556 #HANGUL SYLLABLE PIEUP WE IEUNG + {0x94FB, 0xBDCE}, //3557 #HANGUL SYLLABLE PIEUP WE CIEUC + {0x94FC, 0xBDCF}, //3558 #HANGUL SYLLABLE PIEUP WE CHIEUCH + {0x94FD, 0xBDD0}, //3559 #HANGUL SYLLABLE PIEUP WE KHIEUKH + {0x94FE, 0xBDD1}, //3560 #HANGUL SYLLABLE PIEUP WE THIEUTH + {0x9541, 0xBDD2}, //3561 #HANGUL SYLLABLE PIEUP WE PHIEUPH + {0x9542, 0xBDD3}, //3562 #HANGUL SYLLABLE PIEUP WE HIEUH + {0x9543, 0xBDD6}, //3563 #HANGUL SYLLABLE PIEUP WI SSANGKIYEOK + {0x9544, 0xBDD7}, //3564 #HANGUL SYLLABLE PIEUP WI KIYEOKSIOS + {0x9545, 0xBDD9}, //3565 #HANGUL SYLLABLE PIEUP WI NIEUNCIEUC + {0x9546, 0xBDDA}, //3566 #HANGUL SYLLABLE PIEUP WI NIEUNHIEUH + {0x9547, 0xBDDB}, //3567 #HANGUL SYLLABLE PIEUP WI TIKEUT + {0x9548, 0xBDDD}, //3568 #HANGUL SYLLABLE PIEUP WI RIEULKIYEOK + {0x9549, 0xBDDE}, //3569 #HANGUL SYLLABLE PIEUP WI RIEULMIEUM + {0x954A, 0xBDDF}, //3570 #HANGUL SYLLABLE PIEUP WI RIEULPIEUP + {0x954B, 0xBDE0}, //3571 #HANGUL SYLLABLE PIEUP WI RIEULSIOS + {0x954C, 0xBDE1}, //3572 #HANGUL SYLLABLE PIEUP WI RIEULTHIEUTH + {0x954D, 0xBDE2}, //3573 #HANGUL SYLLABLE PIEUP WI RIEULPHIEUPH + {0x954E, 0xBDE3}, //3574 #HANGUL SYLLABLE PIEUP WI RIEULHIEUH + {0x954F, 0xBDE4}, //3575 #HANGUL SYLLABLE PIEUP WI MIEUM + {0x9550, 0xBDE5}, //3576 #HANGUL SYLLABLE PIEUP WI PIEUP + {0x9551, 0xBDE6}, //3577 #HANGUL SYLLABLE PIEUP WI PIEUPSIOS + {0x9552, 0xBDE7}, //3578 #HANGUL SYLLABLE PIEUP WI SIOS + {0x9553, 0xBDE8}, //3579 #HANGUL SYLLABLE PIEUP WI SSANGSIOS + {0x9554, 0xBDEA}, //3580 #HANGUL SYLLABLE PIEUP WI CIEUC + {0x9555, 0xBDEB}, //3581 #HANGUL SYLLABLE PIEUP WI CHIEUCH + {0x9556, 0xBDEC}, //3582 #HANGUL SYLLABLE PIEUP WI KHIEUKH + {0x9557, 0xBDED}, //3583 #HANGUL SYLLABLE PIEUP WI THIEUTH + {0x9558, 0xBDEE}, //3584 #HANGUL SYLLABLE PIEUP WI PHIEUPH + {0x9559, 0xBDEF}, //3585 #HANGUL SYLLABLE PIEUP WI HIEUH + {0x955A, 0xBDF1}, //3586 #HANGUL SYLLABLE PIEUP YU KIYEOK + {0x9561, 0xBDF2}, //3587 #HANGUL SYLLABLE PIEUP YU SSANGKIYEOK + {0x9562, 0xBDF3}, //3588 #HANGUL SYLLABLE PIEUP YU KIYEOKSIOS + {0x9563, 0xBDF5}, //3589 #HANGUL SYLLABLE PIEUP YU NIEUNCIEUC + {0x9564, 0xBDF6}, //3590 #HANGUL SYLLABLE PIEUP YU NIEUNHIEUH + {0x9565, 0xBDF7}, //3591 #HANGUL SYLLABLE PIEUP YU TIKEUT + {0x9566, 0xBDF9}, //3592 #HANGUL SYLLABLE PIEUP YU RIEULKIYEOK + {0x9567, 0xBDFA}, //3593 #HANGUL SYLLABLE PIEUP YU RIEULMIEUM + {0x9568, 0xBDFB}, //3594 #HANGUL SYLLABLE PIEUP YU RIEULPIEUP + {0x9569, 0xBDFC}, //3595 #HANGUL SYLLABLE PIEUP YU RIEULSIOS + {0x956A, 0xBDFD}, //3596 #HANGUL SYLLABLE PIEUP YU RIEULTHIEUTH + {0x956B, 0xBDFE}, //3597 #HANGUL SYLLABLE PIEUP YU RIEULPHIEUPH + {0x956C, 0xBDFF}, //3598 #HANGUL SYLLABLE PIEUP YU RIEULHIEUH + {0x956D, 0xBE01}, //3599 #HANGUL SYLLABLE PIEUP YU PIEUP + {0x956E, 0xBE02}, //3600 #HANGUL SYLLABLE PIEUP YU PIEUPSIOS + {0x956F, 0xBE04}, //3601 #HANGUL SYLLABLE PIEUP YU SSANGSIOS + {0x9570, 0xBE06}, //3602 #HANGUL SYLLABLE PIEUP YU CIEUC + {0x9571, 0xBE07}, //3603 #HANGUL SYLLABLE PIEUP YU CHIEUCH + {0x9572, 0xBE08}, //3604 #HANGUL SYLLABLE PIEUP YU KHIEUKH + {0x9573, 0xBE09}, //3605 #HANGUL SYLLABLE PIEUP YU THIEUTH + {0x9574, 0xBE0A}, //3606 #HANGUL SYLLABLE PIEUP YU PHIEUPH + {0x9575, 0xBE0B}, //3607 #HANGUL SYLLABLE PIEUP YU HIEUH + {0x9576, 0xBE0E}, //3608 #HANGUL SYLLABLE PIEUP EU SSANGKIYEOK + {0x9577, 0xBE0F}, //3609 #HANGUL SYLLABLE PIEUP EU KIYEOKSIOS + {0x9578, 0xBE11}, //3610 #HANGUL SYLLABLE PIEUP EU NIEUNCIEUC + {0x9579, 0xBE12}, //3611 #HANGUL SYLLABLE PIEUP EU NIEUNHIEUH + {0x957A, 0xBE13}, //3612 #HANGUL SYLLABLE PIEUP EU TIKEUT + {0x9581, 0xBE15}, //3613 #HANGUL SYLLABLE PIEUP EU RIEULKIYEOK + {0x9582, 0xBE16}, //3614 #HANGUL SYLLABLE PIEUP EU RIEULMIEUM + {0x9583, 0xBE17}, //3615 #HANGUL SYLLABLE PIEUP EU RIEULPIEUP + {0x9584, 0xBE18}, //3616 #HANGUL SYLLABLE PIEUP EU RIEULSIOS + {0x9585, 0xBE19}, //3617 #HANGUL SYLLABLE PIEUP EU RIEULTHIEUTH + {0x9586, 0xBE1A}, //3618 #HANGUL SYLLABLE PIEUP EU RIEULPHIEUPH + {0x9587, 0xBE1B}, //3619 #HANGUL SYLLABLE PIEUP EU RIEULHIEUH + {0x9588, 0xBE1E}, //3620 #HANGUL SYLLABLE PIEUP EU PIEUPSIOS + {0x9589, 0xBE20}, //3621 #HANGUL SYLLABLE PIEUP EU SSANGSIOS + {0x958A, 0xBE21}, //3622 #HANGUL SYLLABLE PIEUP EU IEUNG + {0x958B, 0xBE22}, //3623 #HANGUL SYLLABLE PIEUP EU CIEUC + {0x958C, 0xBE23}, //3624 #HANGUL SYLLABLE PIEUP EU CHIEUCH + {0x958D, 0xBE24}, //3625 #HANGUL SYLLABLE PIEUP EU KHIEUKH + {0x958E, 0xBE25}, //3626 #HANGUL SYLLABLE PIEUP EU THIEUTH + {0x958F, 0xBE26}, //3627 #HANGUL SYLLABLE PIEUP EU PHIEUPH + {0x9590, 0xBE27}, //3628 #HANGUL SYLLABLE PIEUP EU HIEUH + {0x9591, 0xBE28}, //3629 #HANGUL SYLLABLE PIEUP YI + {0x9592, 0xBE29}, //3630 #HANGUL SYLLABLE PIEUP YI KIYEOK + {0x9593, 0xBE2A}, //3631 #HANGUL SYLLABLE PIEUP YI SSANGKIYEOK + {0x9594, 0xBE2B}, //3632 #HANGUL SYLLABLE PIEUP YI KIYEOKSIOS + {0x9595, 0xBE2C}, //3633 #HANGUL SYLLABLE PIEUP YI NIEUN + {0x9596, 0xBE2D}, //3634 #HANGUL SYLLABLE PIEUP YI NIEUNCIEUC + {0x9597, 0xBE2E}, //3635 #HANGUL SYLLABLE PIEUP YI NIEUNHIEUH + {0x9598, 0xBE2F}, //3636 #HANGUL SYLLABLE PIEUP YI TIKEUT + {0x9599, 0xBE30}, //3637 #HANGUL SYLLABLE PIEUP YI RIEUL + {0x959A, 0xBE31}, //3638 #HANGUL SYLLABLE PIEUP YI RIEULKIYEOK + {0x959B, 0xBE32}, //3639 #HANGUL SYLLABLE PIEUP YI RIEULMIEUM + {0x959C, 0xBE33}, //3640 #HANGUL SYLLABLE PIEUP YI RIEULPIEUP + {0x959D, 0xBE34}, //3641 #HANGUL SYLLABLE PIEUP YI RIEULSIOS + {0x959E, 0xBE35}, //3642 #HANGUL SYLLABLE PIEUP YI RIEULTHIEUTH + {0x959F, 0xBE36}, //3643 #HANGUL SYLLABLE PIEUP YI RIEULPHIEUPH + {0x95A0, 0xBE37}, //3644 #HANGUL SYLLABLE PIEUP YI RIEULHIEUH + {0x95A1, 0xBE38}, //3645 #HANGUL SYLLABLE PIEUP YI MIEUM + {0x95A2, 0xBE39}, //3646 #HANGUL SYLLABLE PIEUP YI PIEUP + {0x95A3, 0xBE3A}, //3647 #HANGUL SYLLABLE PIEUP YI PIEUPSIOS + {0x95A4, 0xBE3B}, //3648 #HANGUL SYLLABLE PIEUP YI SIOS + {0x95A5, 0xBE3C}, //3649 #HANGUL SYLLABLE PIEUP YI SSANGSIOS + {0x95A6, 0xBE3D}, //3650 #HANGUL SYLLABLE PIEUP YI IEUNG + {0x95A7, 0xBE3E}, //3651 #HANGUL SYLLABLE PIEUP YI CIEUC + {0x95A8, 0xBE3F}, //3652 #HANGUL SYLLABLE PIEUP YI CHIEUCH + {0x95A9, 0xBE40}, //3653 #HANGUL SYLLABLE PIEUP YI KHIEUKH + {0x95AA, 0xBE41}, //3654 #HANGUL SYLLABLE PIEUP YI THIEUTH + {0x95AB, 0xBE42}, //3655 #HANGUL SYLLABLE PIEUP YI PHIEUPH + {0x95AC, 0xBE43}, //3656 #HANGUL SYLLABLE PIEUP YI HIEUH + {0x95AD, 0xBE46}, //3657 #HANGUL SYLLABLE PIEUP I SSANGKIYEOK + {0x95AE, 0xBE47}, //3658 #HANGUL SYLLABLE PIEUP I KIYEOKSIOS + {0x95AF, 0xBE49}, //3659 #HANGUL SYLLABLE PIEUP I NIEUNCIEUC + {0x95B0, 0xBE4A}, //3660 #HANGUL SYLLABLE PIEUP I NIEUNHIEUH + {0x95B1, 0xBE4B}, //3661 #HANGUL SYLLABLE PIEUP I TIKEUT + {0x95B2, 0xBE4D}, //3662 #HANGUL SYLLABLE PIEUP I RIEULKIYEOK + {0x95B3, 0xBE4F}, //3663 #HANGUL SYLLABLE PIEUP I RIEULPIEUP + {0x95B4, 0xBE50}, //3664 #HANGUL SYLLABLE PIEUP I RIEULSIOS + {0x95B5, 0xBE51}, //3665 #HANGUL SYLLABLE PIEUP I RIEULTHIEUTH + {0x95B6, 0xBE52}, //3666 #HANGUL SYLLABLE PIEUP I RIEULPHIEUPH + {0x95B7, 0xBE53}, //3667 #HANGUL SYLLABLE PIEUP I RIEULHIEUH + {0x95B8, 0xBE56}, //3668 #HANGUL SYLLABLE PIEUP I PIEUPSIOS + {0x95B9, 0xBE58}, //3669 #HANGUL SYLLABLE PIEUP I SSANGSIOS + {0x95BA, 0xBE5C}, //3670 #HANGUL SYLLABLE PIEUP I KHIEUKH + {0x95BB, 0xBE5D}, //3671 #HANGUL SYLLABLE PIEUP I THIEUTH + {0x95BC, 0xBE5E}, //3672 #HANGUL SYLLABLE PIEUP I PHIEUPH + {0x95BD, 0xBE5F}, //3673 #HANGUL SYLLABLE PIEUP I HIEUH + {0x95BE, 0xBE62}, //3674 #HANGUL SYLLABLE SSANGPIEUP A SSANGKIYEOK + {0x95BF, 0xBE63}, //3675 #HANGUL SYLLABLE SSANGPIEUP A KIYEOKSIOS + {0x95C0, 0xBE65}, //3676 #HANGUL SYLLABLE SSANGPIEUP A NIEUNCIEUC + {0x95C1, 0xBE66}, //3677 #HANGUL SYLLABLE SSANGPIEUP A NIEUNHIEUH + {0x95C2, 0xBE67}, //3678 #HANGUL SYLLABLE SSANGPIEUP A TIKEUT + {0x95C3, 0xBE69}, //3679 #HANGUL SYLLABLE SSANGPIEUP A RIEULKIYEOK + {0x95C4, 0xBE6B}, //3680 #HANGUL SYLLABLE SSANGPIEUP A RIEULPIEUP + {0x95C5, 0xBE6C}, //3681 #HANGUL SYLLABLE SSANGPIEUP A RIEULSIOS + {0x95C6, 0xBE6D}, //3682 #HANGUL SYLLABLE SSANGPIEUP A RIEULTHIEUTH + {0x95C7, 0xBE6E}, //3683 #HANGUL SYLLABLE SSANGPIEUP A RIEULPHIEUPH + {0x95C8, 0xBE6F}, //3684 #HANGUL SYLLABLE SSANGPIEUP A RIEULHIEUH + {0x95C9, 0xBE72}, //3685 #HANGUL SYLLABLE SSANGPIEUP A PIEUPSIOS + {0x95CA, 0xBE76}, //3686 #HANGUL SYLLABLE SSANGPIEUP A CIEUC + {0x95CB, 0xBE77}, //3687 #HANGUL SYLLABLE SSANGPIEUP A CHIEUCH + {0x95CC, 0xBE78}, //3688 #HANGUL SYLLABLE SSANGPIEUP A KHIEUKH + {0x95CD, 0xBE79}, //3689 #HANGUL SYLLABLE SSANGPIEUP A THIEUTH + {0x95CE, 0xBE7A}, //3690 #HANGUL SYLLABLE SSANGPIEUP A PHIEUPH + {0x95CF, 0xBE7E}, //3691 #HANGUL SYLLABLE SSANGPIEUP AE SSANGKIYEOK + {0x95D0, 0xBE7F}, //3692 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOKSIOS + {0x95D1, 0xBE81}, //3693 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNCIEUC + {0x95D2, 0xBE82}, //3694 #HANGUL SYLLABLE SSANGPIEUP AE NIEUNHIEUH + {0x95D3, 0xBE83}, //3695 #HANGUL SYLLABLE SSANGPIEUP AE TIKEUT + {0x95D4, 0xBE85}, //3696 #HANGUL SYLLABLE SSANGPIEUP AE RIEULKIYEOK + {0x95D5, 0xBE86}, //3697 #HANGUL SYLLABLE SSANGPIEUP AE RIEULMIEUM + {0x95D6, 0xBE87}, //3698 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPIEUP + {0x95D7, 0xBE88}, //3699 #HANGUL SYLLABLE SSANGPIEUP AE RIEULSIOS + {0x95D8, 0xBE89}, //3700 #HANGUL SYLLABLE SSANGPIEUP AE RIEULTHIEUTH + {0x95D9, 0xBE8A}, //3701 #HANGUL SYLLABLE SSANGPIEUP AE RIEULPHIEUPH + {0x95DA, 0xBE8B}, //3702 #HANGUL SYLLABLE SSANGPIEUP AE RIEULHIEUH + {0x95DB, 0xBE8E}, //3703 #HANGUL SYLLABLE SSANGPIEUP AE PIEUPSIOS + {0x95DC, 0xBE92}, //3704 #HANGUL SYLLABLE SSANGPIEUP AE CIEUC + {0x95DD, 0xBE93}, //3705 #HANGUL SYLLABLE SSANGPIEUP AE CHIEUCH + {0x95DE, 0xBE94}, //3706 #HANGUL SYLLABLE SSANGPIEUP AE KHIEUKH + {0x95DF, 0xBE95}, //3707 #HANGUL SYLLABLE SSANGPIEUP AE THIEUTH + {0x95E0, 0xBE96}, //3708 #HANGUL SYLLABLE SSANGPIEUP AE PHIEUPH + {0x95E1, 0xBE97}, //3709 #HANGUL SYLLABLE SSANGPIEUP AE HIEUH + {0x95E2, 0xBE9A}, //3710 #HANGUL SYLLABLE SSANGPIEUP YA SSANGKIYEOK + {0x95E3, 0xBE9B}, //3711 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOKSIOS + {0x95E4, 0xBE9C}, //3712 #HANGUL SYLLABLE SSANGPIEUP YA NIEUN + {0x95E5, 0xBE9D}, //3713 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNCIEUC + {0x95E6, 0xBE9E}, //3714 #HANGUL SYLLABLE SSANGPIEUP YA NIEUNHIEUH + {0x95E7, 0xBE9F}, //3715 #HANGUL SYLLABLE SSANGPIEUP YA TIKEUT + {0x95E8, 0xBEA0}, //3716 #HANGUL SYLLABLE SSANGPIEUP YA RIEUL + {0x95E9, 0xBEA1}, //3717 #HANGUL SYLLABLE SSANGPIEUP YA RIEULKIYEOK + {0x95EA, 0xBEA2}, //3718 #HANGUL SYLLABLE SSANGPIEUP YA RIEULMIEUM + {0x95EB, 0xBEA3}, //3719 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPIEUP + {0x95EC, 0xBEA4}, //3720 #HANGUL SYLLABLE SSANGPIEUP YA RIEULSIOS + {0x95ED, 0xBEA5}, //3721 #HANGUL SYLLABLE SSANGPIEUP YA RIEULTHIEUTH + {0x95EE, 0xBEA6}, //3722 #HANGUL SYLLABLE SSANGPIEUP YA RIEULPHIEUPH + {0x95EF, 0xBEA7}, //3723 #HANGUL SYLLABLE SSANGPIEUP YA RIEULHIEUH + {0x95F0, 0xBEA9}, //3724 #HANGUL SYLLABLE SSANGPIEUP YA PIEUP + {0x95F1, 0xBEAA}, //3725 #HANGUL SYLLABLE SSANGPIEUP YA PIEUPSIOS + {0x95F2, 0xBEAB}, //3726 #HANGUL SYLLABLE SSANGPIEUP YA SIOS + {0x95F3, 0xBEAC}, //3727 #HANGUL SYLLABLE SSANGPIEUP YA SSANGSIOS + {0x95F4, 0xBEAD}, //3728 #HANGUL SYLLABLE SSANGPIEUP YA IEUNG + {0x95F5, 0xBEAE}, //3729 #HANGUL SYLLABLE SSANGPIEUP YA CIEUC + {0x95F6, 0xBEAF}, //3730 #HANGUL SYLLABLE SSANGPIEUP YA CHIEUCH + {0x95F7, 0xBEB0}, //3731 #HANGUL SYLLABLE SSANGPIEUP YA KHIEUKH + {0x95F8, 0xBEB1}, //3732 #HANGUL SYLLABLE SSANGPIEUP YA THIEUTH + {0x95F9, 0xBEB2}, //3733 #HANGUL SYLLABLE SSANGPIEUP YA PHIEUPH + {0x95FA, 0xBEB3}, //3734 #HANGUL SYLLABLE SSANGPIEUP YA HIEUH + {0x95FB, 0xBEB4}, //3735 #HANGUL SYLLABLE SSANGPIEUP YAE + {0x95FC, 0xBEB5}, //3736 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOK + {0x95FD, 0xBEB6}, //3737 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGKIYEOK + {0x95FE, 0xBEB7}, //3738 #HANGUL SYLLABLE SSANGPIEUP YAE KIYEOKSIOS + {0x9641, 0xBEB8}, //3739 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUN + {0x9642, 0xBEB9}, //3740 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNCIEUC + {0x9643, 0xBEBA}, //3741 #HANGUL SYLLABLE SSANGPIEUP YAE NIEUNHIEUH + {0x9644, 0xBEBB}, //3742 #HANGUL SYLLABLE SSANGPIEUP YAE TIKEUT + {0x9645, 0xBEBC}, //3743 #HANGUL SYLLABLE SSANGPIEUP YAE RIEUL + {0x9646, 0xBEBD}, //3744 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULKIYEOK + {0x9647, 0xBEBE}, //3745 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULMIEUM + {0x9648, 0xBEBF}, //3746 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPIEUP + {0x9649, 0xBEC0}, //3747 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULSIOS + {0x964A, 0xBEC1}, //3748 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULTHIEUTH + {0x964B, 0xBEC2}, //3749 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULPHIEUPH + {0x964C, 0xBEC3}, //3750 #HANGUL SYLLABLE SSANGPIEUP YAE RIEULHIEUH + {0x964D, 0xBEC4}, //3751 #HANGUL SYLLABLE SSANGPIEUP YAE MIEUM + {0x964E, 0xBEC5}, //3752 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUP + {0x964F, 0xBEC6}, //3753 #HANGUL SYLLABLE SSANGPIEUP YAE PIEUPSIOS + {0x9650, 0xBEC7}, //3754 #HANGUL SYLLABLE SSANGPIEUP YAE SIOS + {0x9651, 0xBEC8}, //3755 #HANGUL SYLLABLE SSANGPIEUP YAE SSANGSIOS + {0x9652, 0xBEC9}, //3756 #HANGUL SYLLABLE SSANGPIEUP YAE IEUNG + {0x9653, 0xBECA}, //3757 #HANGUL SYLLABLE SSANGPIEUP YAE CIEUC + {0x9654, 0xBECB}, //3758 #HANGUL SYLLABLE SSANGPIEUP YAE CHIEUCH + {0x9655, 0xBECC}, //3759 #HANGUL SYLLABLE SSANGPIEUP YAE KHIEUKH + {0x9656, 0xBECD}, //3760 #HANGUL SYLLABLE SSANGPIEUP YAE THIEUTH + {0x9657, 0xBECE}, //3761 #HANGUL SYLLABLE SSANGPIEUP YAE PHIEUPH + {0x9658, 0xBECF}, //3762 #HANGUL SYLLABLE SSANGPIEUP YAE HIEUH + {0x9659, 0xBED2}, //3763 #HANGUL SYLLABLE SSANGPIEUP EO SSANGKIYEOK + {0x965A, 0xBED3}, //3764 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOKSIOS + {0x9661, 0xBED5}, //3765 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNCIEUC + {0x9662, 0xBED6}, //3766 #HANGUL SYLLABLE SSANGPIEUP EO NIEUNHIEUH + {0x9663, 0xBED9}, //3767 #HANGUL SYLLABLE SSANGPIEUP EO RIEULKIYEOK + {0x9664, 0xBEDA}, //3768 #HANGUL SYLLABLE SSANGPIEUP EO RIEULMIEUM + {0x9665, 0xBEDB}, //3769 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPIEUP + {0x9666, 0xBEDC}, //3770 #HANGUL SYLLABLE SSANGPIEUP EO RIEULSIOS + {0x9667, 0xBEDD}, //3771 #HANGUL SYLLABLE SSANGPIEUP EO RIEULTHIEUTH + {0x9668, 0xBEDE}, //3772 #HANGUL SYLLABLE SSANGPIEUP EO RIEULPHIEUPH + {0x9669, 0xBEDF}, //3773 #HANGUL SYLLABLE SSANGPIEUP EO RIEULHIEUH + {0x966A, 0xBEE1}, //3774 #HANGUL SYLLABLE SSANGPIEUP EO PIEUP + {0x966B, 0xBEE2}, //3775 #HANGUL SYLLABLE SSANGPIEUP EO PIEUPSIOS + {0x966C, 0xBEE6}, //3776 #HANGUL SYLLABLE SSANGPIEUP EO CIEUC + {0x966D, 0xBEE7}, //3777 #HANGUL SYLLABLE SSANGPIEUP EO CHIEUCH + {0x966E, 0xBEE8}, //3778 #HANGUL SYLLABLE SSANGPIEUP EO KHIEUKH + {0x966F, 0xBEE9}, //3779 #HANGUL SYLLABLE SSANGPIEUP EO THIEUTH + {0x9670, 0xBEEA}, //3780 #HANGUL SYLLABLE SSANGPIEUP EO PHIEUPH + {0x9671, 0xBEEB}, //3781 #HANGUL SYLLABLE SSANGPIEUP EO HIEUH + {0x9672, 0xBEED}, //3782 #HANGUL SYLLABLE SSANGPIEUP E KIYEOK + {0x9673, 0xBEEE}, //3783 #HANGUL SYLLABLE SSANGPIEUP E SSANGKIYEOK + {0x9674, 0xBEEF}, //3784 #HANGUL SYLLABLE SSANGPIEUP E KIYEOKSIOS + {0x9675, 0xBEF0}, //3785 #HANGUL SYLLABLE SSANGPIEUP E NIEUN + {0x9676, 0xBEF1}, //3786 #HANGUL SYLLABLE SSANGPIEUP E NIEUNCIEUC + {0x9677, 0xBEF2}, //3787 #HANGUL SYLLABLE SSANGPIEUP E NIEUNHIEUH + {0x9678, 0xBEF3}, //3788 #HANGUL SYLLABLE SSANGPIEUP E TIKEUT + {0x9679, 0xBEF4}, //3789 #HANGUL SYLLABLE SSANGPIEUP E RIEUL + {0x967A, 0xBEF5}, //3790 #HANGUL SYLLABLE SSANGPIEUP E RIEULKIYEOK + {0x9681, 0xBEF6}, //3791 #HANGUL SYLLABLE SSANGPIEUP E RIEULMIEUM + {0x9682, 0xBEF7}, //3792 #HANGUL SYLLABLE SSANGPIEUP E RIEULPIEUP + {0x9683, 0xBEF8}, //3793 #HANGUL SYLLABLE SSANGPIEUP E RIEULSIOS + {0x9684, 0xBEF9}, //3794 #HANGUL SYLLABLE SSANGPIEUP E RIEULTHIEUTH + {0x9685, 0xBEFA}, //3795 #HANGUL SYLLABLE SSANGPIEUP E RIEULPHIEUPH + {0x9686, 0xBEFB}, //3796 #HANGUL SYLLABLE SSANGPIEUP E RIEULHIEUH + {0x9687, 0xBEFC}, //3797 #HANGUL SYLLABLE SSANGPIEUP E MIEUM + {0x9688, 0xBEFD}, //3798 #HANGUL SYLLABLE SSANGPIEUP E PIEUP + {0x9689, 0xBEFE}, //3799 #HANGUL SYLLABLE SSANGPIEUP E PIEUPSIOS + {0x968A, 0xBEFF}, //3800 #HANGUL SYLLABLE SSANGPIEUP E SIOS + {0x968B, 0xBF00}, //3801 #HANGUL SYLLABLE SSANGPIEUP E SSANGSIOS + {0x968C, 0xBF02}, //3802 #HANGUL SYLLABLE SSANGPIEUP E CIEUC + {0x968D, 0xBF03}, //3803 #HANGUL SYLLABLE SSANGPIEUP E CHIEUCH + {0x968E, 0xBF04}, //3804 #HANGUL SYLLABLE SSANGPIEUP E KHIEUKH + {0x968F, 0xBF05}, //3805 #HANGUL SYLLABLE SSANGPIEUP E THIEUTH + {0x9690, 0xBF06}, //3806 #HANGUL SYLLABLE SSANGPIEUP E PHIEUPH + {0x9691, 0xBF07}, //3807 #HANGUL SYLLABLE SSANGPIEUP E HIEUH + {0x9692, 0xBF0A}, //3808 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGKIYEOK + {0x9693, 0xBF0B}, //3809 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOKSIOS + {0x9694, 0xBF0C}, //3810 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUN + {0x9695, 0xBF0D}, //3811 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNCIEUC + {0x9696, 0xBF0E}, //3812 #HANGUL SYLLABLE SSANGPIEUP YEO NIEUNHIEUH + {0x9697, 0xBF0F}, //3813 #HANGUL SYLLABLE SSANGPIEUP YEO TIKEUT + {0x9698, 0xBF10}, //3814 #HANGUL SYLLABLE SSANGPIEUP YEO RIEUL + {0x9699, 0xBF11}, //3815 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULKIYEOK + {0x969A, 0xBF12}, //3816 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULMIEUM + {0x969B, 0xBF13}, //3817 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPIEUP + {0x969C, 0xBF14}, //3818 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULSIOS + {0x969D, 0xBF15}, //3819 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULTHIEUTH + {0x969E, 0xBF16}, //3820 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULPHIEUPH + {0x969F, 0xBF17}, //3821 #HANGUL SYLLABLE SSANGPIEUP YEO RIEULHIEUH + {0x96A0, 0xBF1A}, //3822 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUPSIOS + {0x96A1, 0xBF1E}, //3823 #HANGUL SYLLABLE SSANGPIEUP YEO CIEUC + {0x96A2, 0xBF1F}, //3824 #HANGUL SYLLABLE SSANGPIEUP YEO CHIEUCH + {0x96A3, 0xBF20}, //3825 #HANGUL SYLLABLE SSANGPIEUP YEO KHIEUKH + {0x96A4, 0xBF21}, //3826 #HANGUL SYLLABLE SSANGPIEUP YEO THIEUTH + {0x96A5, 0xBF22}, //3827 #HANGUL SYLLABLE SSANGPIEUP YEO PHIEUPH + {0x96A6, 0xBF23}, //3828 #HANGUL SYLLABLE SSANGPIEUP YEO HIEUH + {0x96A7, 0xBF24}, //3829 #HANGUL SYLLABLE SSANGPIEUP YE + {0x96A8, 0xBF25}, //3830 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOK + {0x96A9, 0xBF26}, //3831 #HANGUL SYLLABLE SSANGPIEUP YE SSANGKIYEOK + {0x96AA, 0xBF27}, //3832 #HANGUL SYLLABLE SSANGPIEUP YE KIYEOKSIOS + {0x96AB, 0xBF28}, //3833 #HANGUL SYLLABLE SSANGPIEUP YE NIEUN + {0x96AC, 0xBF29}, //3834 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNCIEUC + {0x96AD, 0xBF2A}, //3835 #HANGUL SYLLABLE SSANGPIEUP YE NIEUNHIEUH + {0x96AE, 0xBF2B}, //3836 #HANGUL SYLLABLE SSANGPIEUP YE TIKEUT + {0x96AF, 0xBF2C}, //3837 #HANGUL SYLLABLE SSANGPIEUP YE RIEUL + {0x96B0, 0xBF2D}, //3838 #HANGUL SYLLABLE SSANGPIEUP YE RIEULKIYEOK + {0x96B1, 0xBF2E}, //3839 #HANGUL SYLLABLE SSANGPIEUP YE RIEULMIEUM + {0x96B2, 0xBF2F}, //3840 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPIEUP + {0x96B3, 0xBF30}, //3841 #HANGUL SYLLABLE SSANGPIEUP YE RIEULSIOS + {0x96B4, 0xBF31}, //3842 #HANGUL SYLLABLE SSANGPIEUP YE RIEULTHIEUTH + {0x96B5, 0xBF32}, //3843 #HANGUL SYLLABLE SSANGPIEUP YE RIEULPHIEUPH + {0x96B6, 0xBF33}, //3844 #HANGUL SYLLABLE SSANGPIEUP YE RIEULHIEUH + {0x96B7, 0xBF34}, //3845 #HANGUL SYLLABLE SSANGPIEUP YE MIEUM + {0x96B8, 0xBF35}, //3846 #HANGUL SYLLABLE SSANGPIEUP YE PIEUP + {0x96B9, 0xBF36}, //3847 #HANGUL SYLLABLE SSANGPIEUP YE PIEUPSIOS + {0x96BA, 0xBF37}, //3848 #HANGUL SYLLABLE SSANGPIEUP YE SIOS + {0x96BB, 0xBF38}, //3849 #HANGUL SYLLABLE SSANGPIEUP YE SSANGSIOS + {0x96BC, 0xBF39}, //3850 #HANGUL SYLLABLE SSANGPIEUP YE IEUNG + {0x96BD, 0xBF3A}, //3851 #HANGUL SYLLABLE SSANGPIEUP YE CIEUC + {0x96BE, 0xBF3B}, //3852 #HANGUL SYLLABLE SSANGPIEUP YE CHIEUCH + {0x96BF, 0xBF3C}, //3853 #HANGUL SYLLABLE SSANGPIEUP YE KHIEUKH + {0x96C0, 0xBF3D}, //3854 #HANGUL SYLLABLE SSANGPIEUP YE THIEUTH + {0x96C1, 0xBF3E}, //3855 #HANGUL SYLLABLE SSANGPIEUP YE PHIEUPH + {0x96C2, 0xBF3F}, //3856 #HANGUL SYLLABLE SSANGPIEUP YE HIEUH + {0x96C3, 0xBF42}, //3857 #HANGUL SYLLABLE SSANGPIEUP O SSANGKIYEOK + {0x96C4, 0xBF43}, //3858 #HANGUL SYLLABLE SSANGPIEUP O KIYEOKSIOS + {0x96C5, 0xBF45}, //3859 #HANGUL SYLLABLE SSANGPIEUP O NIEUNCIEUC + {0x96C6, 0xBF46}, //3860 #HANGUL SYLLABLE SSANGPIEUP O NIEUNHIEUH + {0x96C7, 0xBF47}, //3861 #HANGUL SYLLABLE SSANGPIEUP O TIKEUT + {0x96C8, 0xBF49}, //3862 #HANGUL SYLLABLE SSANGPIEUP O RIEULKIYEOK + {0x96C9, 0xBF4A}, //3863 #HANGUL SYLLABLE SSANGPIEUP O RIEULMIEUM + {0x96CA, 0xBF4B}, //3864 #HANGUL SYLLABLE SSANGPIEUP O RIEULPIEUP + {0x96CB, 0xBF4C}, //3865 #HANGUL SYLLABLE SSANGPIEUP O RIEULSIOS + {0x96CC, 0xBF4D}, //3866 #HANGUL SYLLABLE SSANGPIEUP O RIEULTHIEUTH + {0x96CD, 0xBF4E}, //3867 #HANGUL SYLLABLE SSANGPIEUP O RIEULPHIEUPH + {0x96CE, 0xBF4F}, //3868 #HANGUL SYLLABLE SSANGPIEUP O RIEULHIEUH + {0x96CF, 0xBF52}, //3869 #HANGUL SYLLABLE SSANGPIEUP O PIEUPSIOS + {0x96D0, 0xBF53}, //3870 #HANGUL SYLLABLE SSANGPIEUP O SIOS + {0x96D1, 0xBF54}, //3871 #HANGUL SYLLABLE SSANGPIEUP O SSANGSIOS + {0x96D2, 0xBF56}, //3872 #HANGUL SYLLABLE SSANGPIEUP O CIEUC + {0x96D3, 0xBF57}, //3873 #HANGUL SYLLABLE SSANGPIEUP O CHIEUCH + {0x96D4, 0xBF58}, //3874 #HANGUL SYLLABLE SSANGPIEUP O KHIEUKH + {0x96D5, 0xBF59}, //3875 #HANGUL SYLLABLE SSANGPIEUP O THIEUTH + {0x96D6, 0xBF5A}, //3876 #HANGUL SYLLABLE SSANGPIEUP O PHIEUPH + {0x96D7, 0xBF5B}, //3877 #HANGUL SYLLABLE SSANGPIEUP O HIEUH + {0x96D8, 0xBF5C}, //3878 #HANGUL SYLLABLE SSANGPIEUP WA + {0x96D9, 0xBF5D}, //3879 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOK + {0x96DA, 0xBF5E}, //3880 #HANGUL SYLLABLE SSANGPIEUP WA SSANGKIYEOK + {0x96DB, 0xBF5F}, //3881 #HANGUL SYLLABLE SSANGPIEUP WA KIYEOKSIOS + {0x96DC, 0xBF60}, //3882 #HANGUL SYLLABLE SSANGPIEUP WA NIEUN + {0x96DD, 0xBF61}, //3883 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNCIEUC + {0x96DE, 0xBF62}, //3884 #HANGUL SYLLABLE SSANGPIEUP WA NIEUNHIEUH + {0x96DF, 0xBF63}, //3885 #HANGUL SYLLABLE SSANGPIEUP WA TIKEUT + {0x96E0, 0xBF64}, //3886 #HANGUL SYLLABLE SSANGPIEUP WA RIEUL + {0x96E1, 0xBF65}, //3887 #HANGUL SYLLABLE SSANGPIEUP WA RIEULKIYEOK + {0x96E2, 0xBF66}, //3888 #HANGUL SYLLABLE SSANGPIEUP WA RIEULMIEUM + {0x96E3, 0xBF67}, //3889 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPIEUP + {0x96E4, 0xBF68}, //3890 #HANGUL SYLLABLE SSANGPIEUP WA RIEULSIOS + {0x96E5, 0xBF69}, //3891 #HANGUL SYLLABLE SSANGPIEUP WA RIEULTHIEUTH + {0x96E6, 0xBF6A}, //3892 #HANGUL SYLLABLE SSANGPIEUP WA RIEULPHIEUPH + {0x96E7, 0xBF6B}, //3893 #HANGUL SYLLABLE SSANGPIEUP WA RIEULHIEUH + {0x96E8, 0xBF6C}, //3894 #HANGUL SYLLABLE SSANGPIEUP WA MIEUM + {0x96E9, 0xBF6D}, //3895 #HANGUL SYLLABLE SSANGPIEUP WA PIEUP + {0x96EA, 0xBF6E}, //3896 #HANGUL SYLLABLE SSANGPIEUP WA PIEUPSIOS + {0x96EB, 0xBF6F}, //3897 #HANGUL SYLLABLE SSANGPIEUP WA SIOS + {0x96EC, 0xBF70}, //3898 #HANGUL SYLLABLE SSANGPIEUP WA SSANGSIOS + {0x96ED, 0xBF71}, //3899 #HANGUL SYLLABLE SSANGPIEUP WA IEUNG + {0x96EE, 0xBF72}, //3900 #HANGUL SYLLABLE SSANGPIEUP WA CIEUC + {0x96EF, 0xBF73}, //3901 #HANGUL SYLLABLE SSANGPIEUP WA CHIEUCH + {0x96F0, 0xBF74}, //3902 #HANGUL SYLLABLE SSANGPIEUP WA KHIEUKH + {0x96F1, 0xBF75}, //3903 #HANGUL SYLLABLE SSANGPIEUP WA THIEUTH + {0x96F2, 0xBF76}, //3904 #HANGUL SYLLABLE SSANGPIEUP WA PHIEUPH + {0x96F3, 0xBF77}, //3905 #HANGUL SYLLABLE SSANGPIEUP WA HIEUH + {0x96F4, 0xBF78}, //3906 #HANGUL SYLLABLE SSANGPIEUP WAE + {0x96F5, 0xBF79}, //3907 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOK + {0x96F6, 0xBF7A}, //3908 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGKIYEOK + {0x96F7, 0xBF7B}, //3909 #HANGUL SYLLABLE SSANGPIEUP WAE KIYEOKSIOS + {0x96F8, 0xBF7C}, //3910 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUN + {0x96F9, 0xBF7D}, //3911 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNCIEUC + {0x96FA, 0xBF7E}, //3912 #HANGUL SYLLABLE SSANGPIEUP WAE NIEUNHIEUH + {0x96FB, 0xBF7F}, //3913 #HANGUL SYLLABLE SSANGPIEUP WAE TIKEUT + {0x96FC, 0xBF80}, //3914 #HANGUL SYLLABLE SSANGPIEUP WAE RIEUL + {0x96FD, 0xBF81}, //3915 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULKIYEOK + {0x96FE, 0xBF82}, //3916 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULMIEUM + {0x9741, 0xBF83}, //3917 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPIEUP + {0x9742, 0xBF84}, //3918 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULSIOS + {0x9743, 0xBF85}, //3919 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULTHIEUTH + {0x9744, 0xBF86}, //3920 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULPHIEUPH + {0x9745, 0xBF87}, //3921 #HANGUL SYLLABLE SSANGPIEUP WAE RIEULHIEUH + {0x9746, 0xBF88}, //3922 #HANGUL SYLLABLE SSANGPIEUP WAE MIEUM + {0x9747, 0xBF89}, //3923 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUP + {0x9748, 0xBF8A}, //3924 #HANGUL SYLLABLE SSANGPIEUP WAE PIEUPSIOS + {0x9749, 0xBF8B}, //3925 #HANGUL SYLLABLE SSANGPIEUP WAE SIOS + {0x974A, 0xBF8C}, //3926 #HANGUL SYLLABLE SSANGPIEUP WAE SSANGSIOS + {0x974B, 0xBF8D}, //3927 #HANGUL SYLLABLE SSANGPIEUP WAE IEUNG + {0x974C, 0xBF8E}, //3928 #HANGUL SYLLABLE SSANGPIEUP WAE CIEUC + {0x974D, 0xBF8F}, //3929 #HANGUL SYLLABLE SSANGPIEUP WAE CHIEUCH + {0x974E, 0xBF90}, //3930 #HANGUL SYLLABLE SSANGPIEUP WAE KHIEUKH + {0x974F, 0xBF91}, //3931 #HANGUL SYLLABLE SSANGPIEUP WAE THIEUTH + {0x9750, 0xBF92}, //3932 #HANGUL SYLLABLE SSANGPIEUP WAE PHIEUPH + {0x9751, 0xBF93}, //3933 #HANGUL SYLLABLE SSANGPIEUP WAE HIEUH + {0x9752, 0xBF95}, //3934 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOK + {0x9753, 0xBF96}, //3935 #HANGUL SYLLABLE SSANGPIEUP OE SSANGKIYEOK + {0x9754, 0xBF97}, //3936 #HANGUL SYLLABLE SSANGPIEUP OE KIYEOKSIOS + {0x9755, 0xBF98}, //3937 #HANGUL SYLLABLE SSANGPIEUP OE NIEUN + {0x9756, 0xBF99}, //3938 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNCIEUC + {0x9757, 0xBF9A}, //3939 #HANGUL SYLLABLE SSANGPIEUP OE NIEUNHIEUH + {0x9758, 0xBF9B}, //3940 #HANGUL SYLLABLE SSANGPIEUP OE TIKEUT + {0x9759, 0xBF9C}, //3941 #HANGUL SYLLABLE SSANGPIEUP OE RIEUL + {0x975A, 0xBF9D}, //3942 #HANGUL SYLLABLE SSANGPIEUP OE RIEULKIYEOK + {0x9761, 0xBF9E}, //3943 #HANGUL SYLLABLE SSANGPIEUP OE RIEULMIEUM + {0x9762, 0xBF9F}, //3944 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPIEUP + {0x9763, 0xBFA0}, //3945 #HANGUL SYLLABLE SSANGPIEUP OE RIEULSIOS + {0x9764, 0xBFA1}, //3946 #HANGUL SYLLABLE SSANGPIEUP OE RIEULTHIEUTH + {0x9765, 0xBFA2}, //3947 #HANGUL SYLLABLE SSANGPIEUP OE RIEULPHIEUPH + {0x9766, 0xBFA3}, //3948 #HANGUL SYLLABLE SSANGPIEUP OE RIEULHIEUH + {0x9767, 0xBFA4}, //3949 #HANGUL SYLLABLE SSANGPIEUP OE MIEUM + {0x9768, 0xBFA5}, //3950 #HANGUL SYLLABLE SSANGPIEUP OE PIEUP + {0x9769, 0xBFA6}, //3951 #HANGUL SYLLABLE SSANGPIEUP OE PIEUPSIOS + {0x976A, 0xBFA7}, //3952 #HANGUL SYLLABLE SSANGPIEUP OE SIOS + {0x976B, 0xBFA8}, //3953 #HANGUL SYLLABLE SSANGPIEUP OE SSANGSIOS + {0x976C, 0xBFA9}, //3954 #HANGUL SYLLABLE SSANGPIEUP OE IEUNG + {0x976D, 0xBFAA}, //3955 #HANGUL SYLLABLE SSANGPIEUP OE CIEUC + {0x976E, 0xBFAB}, //3956 #HANGUL SYLLABLE SSANGPIEUP OE CHIEUCH + {0x976F, 0xBFAC}, //3957 #HANGUL SYLLABLE SSANGPIEUP OE KHIEUKH + {0x9770, 0xBFAD}, //3958 #HANGUL SYLLABLE SSANGPIEUP OE THIEUTH + {0x9771, 0xBFAE}, //3959 #HANGUL SYLLABLE SSANGPIEUP OE PHIEUPH + {0x9772, 0xBFAF}, //3960 #HANGUL SYLLABLE SSANGPIEUP OE HIEUH + {0x9773, 0xBFB1}, //3961 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOK + {0x9774, 0xBFB2}, //3962 #HANGUL SYLLABLE SSANGPIEUP YO SSANGKIYEOK + {0x9775, 0xBFB3}, //3963 #HANGUL SYLLABLE SSANGPIEUP YO KIYEOKSIOS + {0x9776, 0xBFB4}, //3964 #HANGUL SYLLABLE SSANGPIEUP YO NIEUN + {0x9777, 0xBFB5}, //3965 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNCIEUC + {0x9778, 0xBFB6}, //3966 #HANGUL SYLLABLE SSANGPIEUP YO NIEUNHIEUH + {0x9779, 0xBFB7}, //3967 #HANGUL SYLLABLE SSANGPIEUP YO TIKEUT + {0x977A, 0xBFB8}, //3968 #HANGUL SYLLABLE SSANGPIEUP YO RIEUL + {0x9781, 0xBFB9}, //3969 #HANGUL SYLLABLE SSANGPIEUP YO RIEULKIYEOK + {0x9782, 0xBFBA}, //3970 #HANGUL SYLLABLE SSANGPIEUP YO RIEULMIEUM + {0x9783, 0xBFBB}, //3971 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPIEUP + {0x9784, 0xBFBC}, //3972 #HANGUL SYLLABLE SSANGPIEUP YO RIEULSIOS + {0x9785, 0xBFBD}, //3973 #HANGUL SYLLABLE SSANGPIEUP YO RIEULTHIEUTH + {0x9786, 0xBFBE}, //3974 #HANGUL SYLLABLE SSANGPIEUP YO RIEULPHIEUPH + {0x9787, 0xBFBF}, //3975 #HANGUL SYLLABLE SSANGPIEUP YO RIEULHIEUH + {0x9788, 0xBFC0}, //3976 #HANGUL SYLLABLE SSANGPIEUP YO MIEUM + {0x9789, 0xBFC1}, //3977 #HANGUL SYLLABLE SSANGPIEUP YO PIEUP + {0x978A, 0xBFC2}, //3978 #HANGUL SYLLABLE SSANGPIEUP YO PIEUPSIOS + {0x978B, 0xBFC3}, //3979 #HANGUL SYLLABLE SSANGPIEUP YO SIOS + {0x978C, 0xBFC4}, //3980 #HANGUL SYLLABLE SSANGPIEUP YO SSANGSIOS + {0x978D, 0xBFC6}, //3981 #HANGUL SYLLABLE SSANGPIEUP YO CIEUC + {0x978E, 0xBFC7}, //3982 #HANGUL SYLLABLE SSANGPIEUP YO CHIEUCH + {0x978F, 0xBFC8}, //3983 #HANGUL SYLLABLE SSANGPIEUP YO KHIEUKH + {0x9790, 0xBFC9}, //3984 #HANGUL SYLLABLE SSANGPIEUP YO THIEUTH + {0x9791, 0xBFCA}, //3985 #HANGUL SYLLABLE SSANGPIEUP YO PHIEUPH + {0x9792, 0xBFCB}, //3986 #HANGUL SYLLABLE SSANGPIEUP YO HIEUH + {0x9793, 0xBFCE}, //3987 #HANGUL SYLLABLE SSANGPIEUP U SSANGKIYEOK + {0x9794, 0xBFCF}, //3988 #HANGUL SYLLABLE SSANGPIEUP U KIYEOKSIOS + {0x9795, 0xBFD1}, //3989 #HANGUL SYLLABLE SSANGPIEUP U NIEUNCIEUC + {0x9796, 0xBFD2}, //3990 #HANGUL SYLLABLE SSANGPIEUP U NIEUNHIEUH + {0x9797, 0xBFD3}, //3991 #HANGUL SYLLABLE SSANGPIEUP U TIKEUT + {0x9798, 0xBFD5}, //3992 #HANGUL SYLLABLE SSANGPIEUP U RIEULKIYEOK + {0x9799, 0xBFD6}, //3993 #HANGUL SYLLABLE SSANGPIEUP U RIEULMIEUM + {0x979A, 0xBFD7}, //3994 #HANGUL SYLLABLE SSANGPIEUP U RIEULPIEUP + {0x979B, 0xBFD8}, //3995 #HANGUL SYLLABLE SSANGPIEUP U RIEULSIOS + {0x979C, 0xBFD9}, //3996 #HANGUL SYLLABLE SSANGPIEUP U RIEULTHIEUTH + {0x979D, 0xBFDA}, //3997 #HANGUL SYLLABLE SSANGPIEUP U RIEULPHIEUPH + {0x979E, 0xBFDB}, //3998 #HANGUL SYLLABLE SSANGPIEUP U RIEULHIEUH + {0x979F, 0xBFDD}, //3999 #HANGUL SYLLABLE SSANGPIEUP U PIEUP + {0x97A0, 0xBFDE}, //4000 #HANGUL SYLLABLE SSANGPIEUP U PIEUPSIOS + {0x97A1, 0xBFE0}, //4001 #HANGUL SYLLABLE SSANGPIEUP U SSANGSIOS + {0x97A2, 0xBFE2}, //4002 #HANGUL SYLLABLE SSANGPIEUP U CIEUC + {0x97A3, 0xBFE3}, //4003 #HANGUL SYLLABLE SSANGPIEUP U CHIEUCH + {0x97A4, 0xBFE4}, //4004 #HANGUL SYLLABLE SSANGPIEUP U KHIEUKH + {0x97A5, 0xBFE5}, //4005 #HANGUL SYLLABLE SSANGPIEUP U THIEUTH + {0x97A6, 0xBFE6}, //4006 #HANGUL SYLLABLE SSANGPIEUP U PHIEUPH + {0x97A7, 0xBFE7}, //4007 #HANGUL SYLLABLE SSANGPIEUP U HIEUH + {0x97A8, 0xBFE8}, //4008 #HANGUL SYLLABLE SSANGPIEUP WEO + {0x97A9, 0xBFE9}, //4009 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOK + {0x97AA, 0xBFEA}, //4010 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGKIYEOK + {0x97AB, 0xBFEB}, //4011 #HANGUL SYLLABLE SSANGPIEUP WEO KIYEOKSIOS + {0x97AC, 0xBFEC}, //4012 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUN + {0x97AD, 0xBFED}, //4013 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNCIEUC + {0x97AE, 0xBFEE}, //4014 #HANGUL SYLLABLE SSANGPIEUP WEO NIEUNHIEUH + {0x97AF, 0xBFEF}, //4015 #HANGUL SYLLABLE SSANGPIEUP WEO TIKEUT + {0x97B0, 0xBFF0}, //4016 #HANGUL SYLLABLE SSANGPIEUP WEO RIEUL + {0x97B1, 0xBFF1}, //4017 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULKIYEOK + {0x97B2, 0xBFF2}, //4018 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULMIEUM + {0x97B3, 0xBFF3}, //4019 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPIEUP + {0x97B4, 0xBFF4}, //4020 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULSIOS + {0x97B5, 0xBFF5}, //4021 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULTHIEUTH + {0x97B6, 0xBFF6}, //4022 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULPHIEUPH + {0x97B7, 0xBFF7}, //4023 #HANGUL SYLLABLE SSANGPIEUP WEO RIEULHIEUH + {0x97B8, 0xBFF8}, //4024 #HANGUL SYLLABLE SSANGPIEUP WEO MIEUM + {0x97B9, 0xBFF9}, //4025 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUP + {0x97BA, 0xBFFA}, //4026 #HANGUL SYLLABLE SSANGPIEUP WEO PIEUPSIOS + {0x97BB, 0xBFFB}, //4027 #HANGUL SYLLABLE SSANGPIEUP WEO SIOS + {0x97BC, 0xBFFC}, //4028 #HANGUL SYLLABLE SSANGPIEUP WEO SSANGSIOS + {0x97BD, 0xBFFD}, //4029 #HANGUL SYLLABLE SSANGPIEUP WEO IEUNG + {0x97BE, 0xBFFE}, //4030 #HANGUL SYLLABLE SSANGPIEUP WEO CIEUC + {0x97BF, 0xBFFF}, //4031 #HANGUL SYLLABLE SSANGPIEUP WEO CHIEUCH + {0x97C0, 0xC000}, //4032 #HANGUL SYLLABLE SSANGPIEUP WEO KHIEUKH + {0x97C1, 0xC001}, //4033 #HANGUL SYLLABLE SSANGPIEUP WEO THIEUTH + {0x97C2, 0xC002}, //4034 #HANGUL SYLLABLE SSANGPIEUP WEO PHIEUPH + {0x97C3, 0xC003}, //4035 #HANGUL SYLLABLE SSANGPIEUP WEO HIEUH + {0x97C4, 0xC004}, //4036 #HANGUL SYLLABLE SSANGPIEUP WE + {0x97C5, 0xC005}, //4037 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOK + {0x97C6, 0xC006}, //4038 #HANGUL SYLLABLE SSANGPIEUP WE SSANGKIYEOK + {0x97C7, 0xC007}, //4039 #HANGUL SYLLABLE SSANGPIEUP WE KIYEOKSIOS + {0x97C8, 0xC008}, //4040 #HANGUL SYLLABLE SSANGPIEUP WE NIEUN + {0x97C9, 0xC009}, //4041 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNCIEUC + {0x97CA, 0xC00A}, //4042 #HANGUL SYLLABLE SSANGPIEUP WE NIEUNHIEUH + {0x97CB, 0xC00B}, //4043 #HANGUL SYLLABLE SSANGPIEUP WE TIKEUT + {0x97CC, 0xC00C}, //4044 #HANGUL SYLLABLE SSANGPIEUP WE RIEUL + {0x97CD, 0xC00D}, //4045 #HANGUL SYLLABLE SSANGPIEUP WE RIEULKIYEOK + {0x97CE, 0xC00E}, //4046 #HANGUL SYLLABLE SSANGPIEUP WE RIEULMIEUM + {0x97CF, 0xC00F}, //4047 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPIEUP + {0x97D0, 0xC010}, //4048 #HANGUL SYLLABLE SSANGPIEUP WE RIEULSIOS + {0x97D1, 0xC011}, //4049 #HANGUL SYLLABLE SSANGPIEUP WE RIEULTHIEUTH + {0x97D2, 0xC012}, //4050 #HANGUL SYLLABLE SSANGPIEUP WE RIEULPHIEUPH + {0x97D3, 0xC013}, //4051 #HANGUL SYLLABLE SSANGPIEUP WE RIEULHIEUH + {0x97D4, 0xC014}, //4052 #HANGUL SYLLABLE SSANGPIEUP WE MIEUM + {0x97D5, 0xC015}, //4053 #HANGUL SYLLABLE SSANGPIEUP WE PIEUP + {0x97D6, 0xC016}, //4054 #HANGUL SYLLABLE SSANGPIEUP WE PIEUPSIOS + {0x97D7, 0xC017}, //4055 #HANGUL SYLLABLE SSANGPIEUP WE SIOS + {0x97D8, 0xC018}, //4056 #HANGUL SYLLABLE SSANGPIEUP WE SSANGSIOS + {0x97D9, 0xC019}, //4057 #HANGUL SYLLABLE SSANGPIEUP WE IEUNG + {0x97DA, 0xC01A}, //4058 #HANGUL SYLLABLE SSANGPIEUP WE CIEUC + {0x97DB, 0xC01B}, //4059 #HANGUL SYLLABLE SSANGPIEUP WE CHIEUCH + {0x97DC, 0xC01C}, //4060 #HANGUL SYLLABLE SSANGPIEUP WE KHIEUKH + {0x97DD, 0xC01D}, //4061 #HANGUL SYLLABLE SSANGPIEUP WE THIEUTH + {0x97DE, 0xC01E}, //4062 #HANGUL SYLLABLE SSANGPIEUP WE PHIEUPH + {0x97DF, 0xC01F}, //4063 #HANGUL SYLLABLE SSANGPIEUP WE HIEUH + {0x97E0, 0xC020}, //4064 #HANGUL SYLLABLE SSANGPIEUP WI + {0x97E1, 0xC021}, //4065 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOK + {0x97E2, 0xC022}, //4066 #HANGUL SYLLABLE SSANGPIEUP WI SSANGKIYEOK + {0x97E3, 0xC023}, //4067 #HANGUL SYLLABLE SSANGPIEUP WI KIYEOKSIOS + {0x97E4, 0xC024}, //4068 #HANGUL SYLLABLE SSANGPIEUP WI NIEUN + {0x97E5, 0xC025}, //4069 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNCIEUC + {0x97E6, 0xC026}, //4070 #HANGUL SYLLABLE SSANGPIEUP WI NIEUNHIEUH + {0x97E7, 0xC027}, //4071 #HANGUL SYLLABLE SSANGPIEUP WI TIKEUT + {0x97E8, 0xC028}, //4072 #HANGUL SYLLABLE SSANGPIEUP WI RIEUL + {0x97E9, 0xC029}, //4073 #HANGUL SYLLABLE SSANGPIEUP WI RIEULKIYEOK + {0x97EA, 0xC02A}, //4074 #HANGUL SYLLABLE SSANGPIEUP WI RIEULMIEUM + {0x97EB, 0xC02B}, //4075 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPIEUP + {0x97EC, 0xC02C}, //4076 #HANGUL SYLLABLE SSANGPIEUP WI RIEULSIOS + {0x97ED, 0xC02D}, //4077 #HANGUL SYLLABLE SSANGPIEUP WI RIEULTHIEUTH + {0x97EE, 0xC02E}, //4078 #HANGUL SYLLABLE SSANGPIEUP WI RIEULPHIEUPH + {0x97EF, 0xC02F}, //4079 #HANGUL SYLLABLE SSANGPIEUP WI RIEULHIEUH + {0x97F0, 0xC030}, //4080 #HANGUL SYLLABLE SSANGPIEUP WI MIEUM + {0x97F1, 0xC031}, //4081 #HANGUL SYLLABLE SSANGPIEUP WI PIEUP + {0x97F2, 0xC032}, //4082 #HANGUL SYLLABLE SSANGPIEUP WI PIEUPSIOS + {0x97F3, 0xC033}, //4083 #HANGUL SYLLABLE SSANGPIEUP WI SIOS + {0x97F4, 0xC034}, //4084 #HANGUL SYLLABLE SSANGPIEUP WI SSANGSIOS + {0x97F5, 0xC035}, //4085 #HANGUL SYLLABLE SSANGPIEUP WI IEUNG + {0x97F6, 0xC036}, //4086 #HANGUL SYLLABLE SSANGPIEUP WI CIEUC + {0x97F7, 0xC037}, //4087 #HANGUL SYLLABLE SSANGPIEUP WI CHIEUCH + {0x97F8, 0xC038}, //4088 #HANGUL SYLLABLE SSANGPIEUP WI KHIEUKH + {0x97F9, 0xC039}, //4089 #HANGUL SYLLABLE SSANGPIEUP WI THIEUTH + {0x97FA, 0xC03A}, //4090 #HANGUL SYLLABLE SSANGPIEUP WI PHIEUPH + {0x97FB, 0xC03B}, //4091 #HANGUL SYLLABLE SSANGPIEUP WI HIEUH + {0x97FC, 0xC03D}, //4092 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOK + {0x97FD, 0xC03E}, //4093 #HANGUL SYLLABLE SSANGPIEUP YU SSANGKIYEOK + {0x97FE, 0xC03F}, //4094 #HANGUL SYLLABLE SSANGPIEUP YU KIYEOKSIOS + {0x9841, 0xC040}, //4095 #HANGUL SYLLABLE SSANGPIEUP YU NIEUN + {0x9842, 0xC041}, //4096 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNCIEUC + {0x9843, 0xC042}, //4097 #HANGUL SYLLABLE SSANGPIEUP YU NIEUNHIEUH + {0x9844, 0xC043}, //4098 #HANGUL SYLLABLE SSANGPIEUP YU TIKEUT + {0x9845, 0xC044}, //4099 #HANGUL SYLLABLE SSANGPIEUP YU RIEUL + {0x9846, 0xC045}, //4100 #HANGUL SYLLABLE SSANGPIEUP YU RIEULKIYEOK + {0x9847, 0xC046}, //4101 #HANGUL SYLLABLE SSANGPIEUP YU RIEULMIEUM + {0x9848, 0xC047}, //4102 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPIEUP + {0x9849, 0xC048}, //4103 #HANGUL SYLLABLE SSANGPIEUP YU RIEULSIOS + {0x984A, 0xC049}, //4104 #HANGUL SYLLABLE SSANGPIEUP YU RIEULTHIEUTH + {0x984B, 0xC04A}, //4105 #HANGUL SYLLABLE SSANGPIEUP YU RIEULPHIEUPH + {0x984C, 0xC04B}, //4106 #HANGUL SYLLABLE SSANGPIEUP YU RIEULHIEUH + {0x984D, 0xC04C}, //4107 #HANGUL SYLLABLE SSANGPIEUP YU MIEUM + {0x984E, 0xC04D}, //4108 #HANGUL SYLLABLE SSANGPIEUP YU PIEUP + {0x984F, 0xC04E}, //4109 #HANGUL SYLLABLE SSANGPIEUP YU PIEUPSIOS + {0x9850, 0xC04F}, //4110 #HANGUL SYLLABLE SSANGPIEUP YU SIOS + {0x9851, 0xC050}, //4111 #HANGUL SYLLABLE SSANGPIEUP YU SSANGSIOS + {0x9852, 0xC052}, //4112 #HANGUL SYLLABLE SSANGPIEUP YU CIEUC + {0x9853, 0xC053}, //4113 #HANGUL SYLLABLE SSANGPIEUP YU CHIEUCH + {0x9854, 0xC054}, //4114 #HANGUL SYLLABLE SSANGPIEUP YU KHIEUKH + {0x9855, 0xC055}, //4115 #HANGUL SYLLABLE SSANGPIEUP YU THIEUTH + {0x9856, 0xC056}, //4116 #HANGUL SYLLABLE SSANGPIEUP YU PHIEUPH + {0x9857, 0xC057}, //4117 #HANGUL SYLLABLE SSANGPIEUP YU HIEUH + {0x9858, 0xC059}, //4118 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOK + {0x9859, 0xC05A}, //4119 #HANGUL SYLLABLE SSANGPIEUP EU SSANGKIYEOK + {0x985A, 0xC05B}, //4120 #HANGUL SYLLABLE SSANGPIEUP EU KIYEOKSIOS + {0x9861, 0xC05D}, //4121 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNCIEUC + {0x9862, 0xC05E}, //4122 #HANGUL SYLLABLE SSANGPIEUP EU NIEUNHIEUH + {0x9863, 0xC05F}, //4123 #HANGUL SYLLABLE SSANGPIEUP EU TIKEUT + {0x9864, 0xC061}, //4124 #HANGUL SYLLABLE SSANGPIEUP EU RIEULKIYEOK + {0x9865, 0xC062}, //4125 #HANGUL SYLLABLE SSANGPIEUP EU RIEULMIEUM + {0x9866, 0xC063}, //4126 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPIEUP + {0x9867, 0xC064}, //4127 #HANGUL SYLLABLE SSANGPIEUP EU RIEULSIOS + {0x9868, 0xC065}, //4128 #HANGUL SYLLABLE SSANGPIEUP EU RIEULTHIEUTH + {0x9869, 0xC066}, //4129 #HANGUL SYLLABLE SSANGPIEUP EU RIEULPHIEUPH + {0x986A, 0xC067}, //4130 #HANGUL SYLLABLE SSANGPIEUP EU RIEULHIEUH + {0x986B, 0xC06A}, //4131 #HANGUL SYLLABLE SSANGPIEUP EU PIEUPSIOS + {0x986C, 0xC06B}, //4132 #HANGUL SYLLABLE SSANGPIEUP EU SIOS + {0x986D, 0xC06C}, //4133 #HANGUL SYLLABLE SSANGPIEUP EU SSANGSIOS + {0x986E, 0xC06D}, //4134 #HANGUL SYLLABLE SSANGPIEUP EU IEUNG + {0x986F, 0xC06E}, //4135 #HANGUL SYLLABLE SSANGPIEUP EU CIEUC + {0x9870, 0xC06F}, //4136 #HANGUL SYLLABLE SSANGPIEUP EU CHIEUCH + {0x9871, 0xC070}, //4137 #HANGUL SYLLABLE SSANGPIEUP EU KHIEUKH + {0x9872, 0xC071}, //4138 #HANGUL SYLLABLE SSANGPIEUP EU THIEUTH + {0x9873, 0xC072}, //4139 #HANGUL SYLLABLE SSANGPIEUP EU PHIEUPH + {0x9874, 0xC073}, //4140 #HANGUL SYLLABLE SSANGPIEUP EU HIEUH + {0x9875, 0xC074}, //4141 #HANGUL SYLLABLE SSANGPIEUP YI + {0x9876, 0xC075}, //4142 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOK + {0x9877, 0xC076}, //4143 #HANGUL SYLLABLE SSANGPIEUP YI SSANGKIYEOK + {0x9878, 0xC077}, //4144 #HANGUL SYLLABLE SSANGPIEUP YI KIYEOKSIOS + {0x9879, 0xC078}, //4145 #HANGUL SYLLABLE SSANGPIEUP YI NIEUN + {0x987A, 0xC079}, //4146 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNCIEUC + {0x9881, 0xC07A}, //4147 #HANGUL SYLLABLE SSANGPIEUP YI NIEUNHIEUH + {0x9882, 0xC07B}, //4148 #HANGUL SYLLABLE SSANGPIEUP YI TIKEUT + {0x9883, 0xC07C}, //4149 #HANGUL SYLLABLE SSANGPIEUP YI RIEUL + {0x9884, 0xC07D}, //4150 #HANGUL SYLLABLE SSANGPIEUP YI RIEULKIYEOK + {0x9885, 0xC07E}, //4151 #HANGUL SYLLABLE SSANGPIEUP YI RIEULMIEUM + {0x9886, 0xC07F}, //4152 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPIEUP + {0x9887, 0xC080}, //4153 #HANGUL SYLLABLE SSANGPIEUP YI RIEULSIOS + {0x9888, 0xC081}, //4154 #HANGUL SYLLABLE SSANGPIEUP YI RIEULTHIEUTH + {0x9889, 0xC082}, //4155 #HANGUL SYLLABLE SSANGPIEUP YI RIEULPHIEUPH + {0x988A, 0xC083}, //4156 #HANGUL SYLLABLE SSANGPIEUP YI RIEULHIEUH + {0x988B, 0xC084}, //4157 #HANGUL SYLLABLE SSANGPIEUP YI MIEUM + {0x988C, 0xC085}, //4158 #HANGUL SYLLABLE SSANGPIEUP YI PIEUP + {0x988D, 0xC086}, //4159 #HANGUL SYLLABLE SSANGPIEUP YI PIEUPSIOS + {0x988E, 0xC087}, //4160 #HANGUL SYLLABLE SSANGPIEUP YI SIOS + {0x988F, 0xC088}, //4161 #HANGUL SYLLABLE SSANGPIEUP YI SSANGSIOS + {0x9890, 0xC089}, //4162 #HANGUL SYLLABLE SSANGPIEUP YI IEUNG + {0x9891, 0xC08A}, //4163 #HANGUL SYLLABLE SSANGPIEUP YI CIEUC + {0x9892, 0xC08B}, //4164 #HANGUL SYLLABLE SSANGPIEUP YI CHIEUCH + {0x9893, 0xC08C}, //4165 #HANGUL SYLLABLE SSANGPIEUP YI KHIEUKH + {0x9894, 0xC08D}, //4166 #HANGUL SYLLABLE SSANGPIEUP YI THIEUTH + {0x9895, 0xC08E}, //4167 #HANGUL SYLLABLE SSANGPIEUP YI PHIEUPH + {0x9896, 0xC08F}, //4168 #HANGUL SYLLABLE SSANGPIEUP YI HIEUH + {0x9897, 0xC092}, //4169 #HANGUL SYLLABLE SSANGPIEUP I SSANGKIYEOK + {0x9898, 0xC093}, //4170 #HANGUL SYLLABLE SSANGPIEUP I KIYEOKSIOS + {0x9899, 0xC095}, //4171 #HANGUL SYLLABLE SSANGPIEUP I NIEUNCIEUC + {0x989A, 0xC096}, //4172 #HANGUL SYLLABLE SSANGPIEUP I NIEUNHIEUH + {0x989B, 0xC097}, //4173 #HANGUL SYLLABLE SSANGPIEUP I TIKEUT + {0x989C, 0xC099}, //4174 #HANGUL SYLLABLE SSANGPIEUP I RIEULKIYEOK + {0x989D, 0xC09A}, //4175 #HANGUL SYLLABLE SSANGPIEUP I RIEULMIEUM + {0x989E, 0xC09B}, //4176 #HANGUL SYLLABLE SSANGPIEUP I RIEULPIEUP + {0x989F, 0xC09C}, //4177 #HANGUL SYLLABLE SSANGPIEUP I RIEULSIOS + {0x98A0, 0xC09D}, //4178 #HANGUL SYLLABLE SSANGPIEUP I RIEULTHIEUTH + {0x98A1, 0xC09E}, //4179 #HANGUL SYLLABLE SSANGPIEUP I RIEULPHIEUPH + {0x98A2, 0xC09F}, //4180 #HANGUL SYLLABLE SSANGPIEUP I RIEULHIEUH + {0x98A3, 0xC0A2}, //4181 #HANGUL SYLLABLE SSANGPIEUP I PIEUPSIOS + {0x98A4, 0xC0A4}, //4182 #HANGUL SYLLABLE SSANGPIEUP I SSANGSIOS + {0x98A5, 0xC0A6}, //4183 #HANGUL SYLLABLE SSANGPIEUP I CIEUC + {0x98A6, 0xC0A7}, //4184 #HANGUL SYLLABLE SSANGPIEUP I CHIEUCH + {0x98A7, 0xC0A8}, //4185 #HANGUL SYLLABLE SSANGPIEUP I KHIEUKH + {0x98A8, 0xC0A9}, //4186 #HANGUL SYLLABLE SSANGPIEUP I THIEUTH + {0x98A9, 0xC0AA}, //4187 #HANGUL SYLLABLE SSANGPIEUP I PHIEUPH + {0x98AA, 0xC0AB}, //4188 #HANGUL SYLLABLE SSANGPIEUP I HIEUH + {0x98AB, 0xC0AE}, //4189 #HANGUL SYLLABLE SIOS A SSANGKIYEOK + {0x98AC, 0xC0B1}, //4190 #HANGUL SYLLABLE SIOS A NIEUNCIEUC + {0x98AD, 0xC0B2}, //4191 #HANGUL SYLLABLE SIOS A NIEUNHIEUH + {0x98AE, 0xC0B7}, //4192 #HANGUL SYLLABLE SIOS A RIEULPIEUP + {0x98AF, 0xC0B8}, //4193 #HANGUL SYLLABLE SIOS A RIEULSIOS + {0x98B0, 0xC0B9}, //4194 #HANGUL SYLLABLE SIOS A RIEULTHIEUTH + {0x98B1, 0xC0BA}, //4195 #HANGUL SYLLABLE SIOS A RIEULPHIEUPH + {0x98B2, 0xC0BB}, //4196 #HANGUL SYLLABLE SIOS A RIEULHIEUH + {0x98B3, 0xC0BE}, //4197 #HANGUL SYLLABLE SIOS A PIEUPSIOS + {0x98B4, 0xC0C2}, //4198 #HANGUL SYLLABLE SIOS A CIEUC + {0x98B5, 0xC0C3}, //4199 #HANGUL SYLLABLE SIOS A CHIEUCH + {0x98B6, 0xC0C4}, //4200 #HANGUL SYLLABLE SIOS A KHIEUKH + {0x98B7, 0xC0C6}, //4201 #HANGUL SYLLABLE SIOS A PHIEUPH + {0x98B8, 0xC0C7}, //4202 #HANGUL SYLLABLE SIOS A HIEUH + {0x98B9, 0xC0CA}, //4203 #HANGUL SYLLABLE SIOS AE SSANGKIYEOK + {0x98BA, 0xC0CB}, //4204 #HANGUL SYLLABLE SIOS AE KIYEOKSIOS + {0x98BB, 0xC0CD}, //4205 #HANGUL SYLLABLE SIOS AE NIEUNCIEUC + {0x98BC, 0xC0CE}, //4206 #HANGUL SYLLABLE SIOS AE NIEUNHIEUH + {0x98BD, 0xC0CF}, //4207 #HANGUL SYLLABLE SIOS AE TIKEUT + {0x98BE, 0xC0D1}, //4208 #HANGUL SYLLABLE SIOS AE RIEULKIYEOK + {0x98BF, 0xC0D2}, //4209 #HANGUL SYLLABLE SIOS AE RIEULMIEUM + {0x98C0, 0xC0D3}, //4210 #HANGUL SYLLABLE SIOS AE RIEULPIEUP + {0x98C1, 0xC0D4}, //4211 #HANGUL SYLLABLE SIOS AE RIEULSIOS + {0x98C2, 0xC0D5}, //4212 #HANGUL SYLLABLE SIOS AE RIEULTHIEUTH + {0x98C3, 0xC0D6}, //4213 #HANGUL SYLLABLE SIOS AE RIEULPHIEUPH + {0x98C4, 0xC0D7}, //4214 #HANGUL SYLLABLE SIOS AE RIEULHIEUH + {0x98C5, 0xC0DA}, //4215 #HANGUL SYLLABLE SIOS AE PIEUPSIOS + {0x98C6, 0xC0DE}, //4216 #HANGUL SYLLABLE SIOS AE CIEUC + {0x98C7, 0xC0DF}, //4217 #HANGUL SYLLABLE SIOS AE CHIEUCH + {0x98C8, 0xC0E0}, //4218 #HANGUL SYLLABLE SIOS AE KHIEUKH + {0x98C9, 0xC0E1}, //4219 #HANGUL SYLLABLE SIOS AE THIEUTH + {0x98CA, 0xC0E2}, //4220 #HANGUL SYLLABLE SIOS AE PHIEUPH + {0x98CB, 0xC0E3}, //4221 #HANGUL SYLLABLE SIOS AE HIEUH + {0x98CC, 0xC0E6}, //4222 #HANGUL SYLLABLE SIOS YA SSANGKIYEOK + {0x98CD, 0xC0E7}, //4223 #HANGUL SYLLABLE SIOS YA KIYEOKSIOS + {0x98CE, 0xC0E9}, //4224 #HANGUL SYLLABLE SIOS YA NIEUNCIEUC + {0x98CF, 0xC0EA}, //4225 #HANGUL SYLLABLE SIOS YA NIEUNHIEUH + {0x98D0, 0xC0EB}, //4226 #HANGUL SYLLABLE SIOS YA TIKEUT + {0x98D1, 0xC0ED}, //4227 #HANGUL SYLLABLE SIOS YA RIEULKIYEOK + {0x98D2, 0xC0EE}, //4228 #HANGUL SYLLABLE SIOS YA RIEULMIEUM + {0x98D3, 0xC0EF}, //4229 #HANGUL SYLLABLE SIOS YA RIEULPIEUP + {0x98D4, 0xC0F0}, //4230 #HANGUL SYLLABLE SIOS YA RIEULSIOS + {0x98D5, 0xC0F1}, //4231 #HANGUL SYLLABLE SIOS YA RIEULTHIEUTH + {0x98D6, 0xC0F2}, //4232 #HANGUL SYLLABLE SIOS YA RIEULPHIEUPH + {0x98D7, 0xC0F3}, //4233 #HANGUL SYLLABLE SIOS YA RIEULHIEUH + {0x98D8, 0xC0F6}, //4234 #HANGUL SYLLABLE SIOS YA PIEUPSIOS + {0x98D9, 0xC0F8}, //4235 #HANGUL SYLLABLE SIOS YA SSANGSIOS + {0x98DA, 0xC0FA}, //4236 #HANGUL SYLLABLE SIOS YA CIEUC + {0x98DB, 0xC0FB}, //4237 #HANGUL SYLLABLE SIOS YA CHIEUCH + {0x98DC, 0xC0FC}, //4238 #HANGUL SYLLABLE SIOS YA KHIEUKH + {0x98DD, 0xC0FD}, //4239 #HANGUL SYLLABLE SIOS YA THIEUTH + {0x98DE, 0xC0FE}, //4240 #HANGUL SYLLABLE SIOS YA PHIEUPH + {0x98DF, 0xC0FF}, //4241 #HANGUL SYLLABLE SIOS YA HIEUH + {0x98E0, 0xC101}, //4242 #HANGUL SYLLABLE SIOS YAE KIYEOK + {0x98E1, 0xC102}, //4243 #HANGUL SYLLABLE SIOS YAE SSANGKIYEOK + {0x98E2, 0xC103}, //4244 #HANGUL SYLLABLE SIOS YAE KIYEOKSIOS + {0x98E3, 0xC105}, //4245 #HANGUL SYLLABLE SIOS YAE NIEUNCIEUC + {0x98E4, 0xC106}, //4246 #HANGUL SYLLABLE SIOS YAE NIEUNHIEUH + {0x98E5, 0xC107}, //4247 #HANGUL SYLLABLE SIOS YAE TIKEUT + {0x98E6, 0xC109}, //4248 #HANGUL SYLLABLE SIOS YAE RIEULKIYEOK + {0x98E7, 0xC10A}, //4249 #HANGUL SYLLABLE SIOS YAE RIEULMIEUM + {0x98E8, 0xC10B}, //4250 #HANGUL SYLLABLE SIOS YAE RIEULPIEUP + {0x98E9, 0xC10C}, //4251 #HANGUL SYLLABLE SIOS YAE RIEULSIOS + {0x98EA, 0xC10D}, //4252 #HANGUL SYLLABLE SIOS YAE RIEULTHIEUTH + {0x98EB, 0xC10E}, //4253 #HANGUL SYLLABLE SIOS YAE RIEULPHIEUPH + {0x98EC, 0xC10F}, //4254 #HANGUL SYLLABLE SIOS YAE RIEULHIEUH + {0x98ED, 0xC111}, //4255 #HANGUL SYLLABLE SIOS YAE PIEUP + {0x98EE, 0xC112}, //4256 #HANGUL SYLLABLE SIOS YAE PIEUPSIOS + {0x98EF, 0xC113}, //4257 #HANGUL SYLLABLE SIOS YAE SIOS + {0x98F0, 0xC114}, //4258 #HANGUL SYLLABLE SIOS YAE SSANGSIOS + {0x98F1, 0xC116}, //4259 #HANGUL SYLLABLE SIOS YAE CIEUC + {0x98F2, 0xC117}, //4260 #HANGUL SYLLABLE SIOS YAE CHIEUCH + {0x98F3, 0xC118}, //4261 #HANGUL SYLLABLE SIOS YAE KHIEUKH + {0x98F4, 0xC119}, //4262 #HANGUL SYLLABLE SIOS YAE THIEUTH + {0x98F5, 0xC11A}, //4263 #HANGUL SYLLABLE SIOS YAE PHIEUPH + {0x98F6, 0xC11B}, //4264 #HANGUL SYLLABLE SIOS YAE HIEUH + {0x98F7, 0xC121}, //4265 #HANGUL SYLLABLE SIOS EO NIEUNCIEUC + {0x98F8, 0xC122}, //4266 #HANGUL SYLLABLE SIOS EO NIEUNHIEUH + {0x98F9, 0xC125}, //4267 #HANGUL SYLLABLE SIOS EO RIEULKIYEOK + {0x98FA, 0xC128}, //4268 #HANGUL SYLLABLE SIOS EO RIEULSIOS + {0x98FB, 0xC129}, //4269 #HANGUL SYLLABLE SIOS EO RIEULTHIEUTH + {0x98FC, 0xC12A}, //4270 #HANGUL SYLLABLE SIOS EO RIEULPHIEUPH + {0x98FD, 0xC12B}, //4271 #HANGUL SYLLABLE SIOS EO RIEULHIEUH + {0x98FE, 0xC12E}, //4272 #HANGUL SYLLABLE SIOS EO PIEUPSIOS + {0x9941, 0xC132}, //4273 #HANGUL SYLLABLE SIOS EO CIEUC + {0x9942, 0xC133}, //4274 #HANGUL SYLLABLE SIOS EO CHIEUCH + {0x9943, 0xC134}, //4275 #HANGUL SYLLABLE SIOS EO KHIEUKH + {0x9944, 0xC135}, //4276 #HANGUL SYLLABLE SIOS EO THIEUTH + {0x9945, 0xC137}, //4277 #HANGUL SYLLABLE SIOS EO HIEUH + {0x9946, 0xC13A}, //4278 #HANGUL SYLLABLE SIOS E SSANGKIYEOK + {0x9947, 0xC13B}, //4279 #HANGUL SYLLABLE SIOS E KIYEOKSIOS + {0x9948, 0xC13D}, //4280 #HANGUL SYLLABLE SIOS E NIEUNCIEUC + {0x9949, 0xC13E}, //4281 #HANGUL SYLLABLE SIOS E NIEUNHIEUH + {0x994A, 0xC13F}, //4282 #HANGUL SYLLABLE SIOS E TIKEUT + {0x994B, 0xC141}, //4283 #HANGUL SYLLABLE SIOS E RIEULKIYEOK + {0x994C, 0xC142}, //4284 #HANGUL SYLLABLE SIOS E RIEULMIEUM + {0x994D, 0xC143}, //4285 #HANGUL SYLLABLE SIOS E RIEULPIEUP + {0x994E, 0xC144}, //4286 #HANGUL SYLLABLE SIOS E RIEULSIOS + {0x994F, 0xC145}, //4287 #HANGUL SYLLABLE SIOS E RIEULTHIEUTH + {0x9950, 0xC146}, //4288 #HANGUL SYLLABLE SIOS E RIEULPHIEUPH + {0x9951, 0xC147}, //4289 #HANGUL SYLLABLE SIOS E RIEULHIEUH + {0x9952, 0xC14A}, //4290 #HANGUL SYLLABLE SIOS E PIEUPSIOS + {0x9953, 0xC14E}, //4291 #HANGUL SYLLABLE SIOS E CIEUC + {0x9954, 0xC14F}, //4292 #HANGUL SYLLABLE SIOS E CHIEUCH + {0x9955, 0xC150}, //4293 #HANGUL SYLLABLE SIOS E KHIEUKH + {0x9956, 0xC151}, //4294 #HANGUL SYLLABLE SIOS E THIEUTH + {0x9957, 0xC152}, //4295 #HANGUL SYLLABLE SIOS E PHIEUPH + {0x9958, 0xC153}, //4296 #HANGUL SYLLABLE SIOS E HIEUH + {0x9959, 0xC156}, //4297 #HANGUL SYLLABLE SIOS YEO SSANGKIYEOK + {0x995A, 0xC157}, //4298 #HANGUL SYLLABLE SIOS YEO KIYEOKSIOS + {0x9961, 0xC159}, //4299 #HANGUL SYLLABLE SIOS YEO NIEUNCIEUC + {0x9962, 0xC15A}, //4300 #HANGUL SYLLABLE SIOS YEO NIEUNHIEUH + {0x9963, 0xC15B}, //4301 #HANGUL SYLLABLE SIOS YEO TIKEUT + {0x9964, 0xC15D}, //4302 #HANGUL SYLLABLE SIOS YEO RIEULKIYEOK + {0x9965, 0xC15E}, //4303 #HANGUL SYLLABLE SIOS YEO RIEULMIEUM + {0x9966, 0xC15F}, //4304 #HANGUL SYLLABLE SIOS YEO RIEULPIEUP + {0x9967, 0xC160}, //4305 #HANGUL SYLLABLE SIOS YEO RIEULSIOS + {0x9968, 0xC161}, //4306 #HANGUL SYLLABLE SIOS YEO RIEULTHIEUTH + {0x9969, 0xC162}, //4307 #HANGUL SYLLABLE SIOS YEO RIEULPHIEUPH + {0x996A, 0xC163}, //4308 #HANGUL SYLLABLE SIOS YEO RIEULHIEUH + {0x996B, 0xC166}, //4309 #HANGUL SYLLABLE SIOS YEO PIEUPSIOS + {0x996C, 0xC16A}, //4310 #HANGUL SYLLABLE SIOS YEO CIEUC + {0x996D, 0xC16B}, //4311 #HANGUL SYLLABLE SIOS YEO CHIEUCH + {0x996E, 0xC16C}, //4312 #HANGUL SYLLABLE SIOS YEO KHIEUKH + {0x996F, 0xC16D}, //4313 #HANGUL SYLLABLE SIOS YEO THIEUTH + {0x9970, 0xC16E}, //4314 #HANGUL SYLLABLE SIOS YEO PHIEUPH + {0x9971, 0xC16F}, //4315 #HANGUL SYLLABLE SIOS YEO HIEUH + {0x9972, 0xC171}, //4316 #HANGUL SYLLABLE SIOS YE KIYEOK + {0x9973, 0xC172}, //4317 #HANGUL SYLLABLE SIOS YE SSANGKIYEOK + {0x9974, 0xC173}, //4318 #HANGUL SYLLABLE SIOS YE KIYEOKSIOS + {0x9975, 0xC175}, //4319 #HANGUL SYLLABLE SIOS YE NIEUNCIEUC + {0x9976, 0xC176}, //4320 #HANGUL SYLLABLE SIOS YE NIEUNHIEUH + {0x9977, 0xC177}, //4321 #HANGUL SYLLABLE SIOS YE TIKEUT + {0x9978, 0xC179}, //4322 #HANGUL SYLLABLE SIOS YE RIEULKIYEOK + {0x9979, 0xC17A}, //4323 #HANGUL SYLLABLE SIOS YE RIEULMIEUM + {0x997A, 0xC17B}, //4324 #HANGUL SYLLABLE SIOS YE RIEULPIEUP + {0x9981, 0xC17C}, //4325 #HANGUL SYLLABLE SIOS YE RIEULSIOS + {0x9982, 0xC17D}, //4326 #HANGUL SYLLABLE SIOS YE RIEULTHIEUTH + {0x9983, 0xC17E}, //4327 #HANGUL SYLLABLE SIOS YE RIEULPHIEUPH + {0x9984, 0xC17F}, //4328 #HANGUL SYLLABLE SIOS YE RIEULHIEUH + {0x9985, 0xC180}, //4329 #HANGUL SYLLABLE SIOS YE MIEUM + {0x9986, 0xC181}, //4330 #HANGUL SYLLABLE SIOS YE PIEUP + {0x9987, 0xC182}, //4331 #HANGUL SYLLABLE SIOS YE PIEUPSIOS + {0x9988, 0xC183}, //4332 #HANGUL SYLLABLE SIOS YE SIOS + {0x9989, 0xC184}, //4333 #HANGUL SYLLABLE SIOS YE SSANGSIOS + {0x998A, 0xC186}, //4334 #HANGUL SYLLABLE SIOS YE CIEUC + {0x998B, 0xC187}, //4335 #HANGUL SYLLABLE SIOS YE CHIEUCH + {0x998C, 0xC188}, //4336 #HANGUL SYLLABLE SIOS YE KHIEUKH + {0x998D, 0xC189}, //4337 #HANGUL SYLLABLE SIOS YE THIEUTH + {0x998E, 0xC18A}, //4338 #HANGUL SYLLABLE SIOS YE PHIEUPH + {0x998F, 0xC18B}, //4339 #HANGUL SYLLABLE SIOS YE HIEUH + {0x9990, 0xC18F}, //4340 #HANGUL SYLLABLE SIOS O KIYEOKSIOS + {0x9991, 0xC191}, //4341 #HANGUL SYLLABLE SIOS O NIEUNCIEUC + {0x9992, 0xC192}, //4342 #HANGUL SYLLABLE SIOS O NIEUNHIEUH + {0x9993, 0xC193}, //4343 #HANGUL SYLLABLE SIOS O TIKEUT + {0x9994, 0xC195}, //4344 #HANGUL SYLLABLE SIOS O RIEULKIYEOK + {0x9995, 0xC197}, //4345 #HANGUL SYLLABLE SIOS O RIEULPIEUP + {0x9996, 0xC198}, //4346 #HANGUL SYLLABLE SIOS O RIEULSIOS + {0x9997, 0xC199}, //4347 #HANGUL SYLLABLE SIOS O RIEULTHIEUTH + {0x9998, 0xC19A}, //4348 #HANGUL SYLLABLE SIOS O RIEULPHIEUPH + {0x9999, 0xC19B}, //4349 #HANGUL SYLLABLE SIOS O RIEULHIEUH + {0x999A, 0xC19E}, //4350 #HANGUL SYLLABLE SIOS O PIEUPSIOS + {0x999B, 0xC1A0}, //4351 #HANGUL SYLLABLE SIOS O SSANGSIOS + {0x999C, 0xC1A2}, //4352 #HANGUL SYLLABLE SIOS O CIEUC + {0x999D, 0xC1A3}, //4353 #HANGUL SYLLABLE SIOS O CHIEUCH + {0x999E, 0xC1A4}, //4354 #HANGUL SYLLABLE SIOS O KHIEUKH + {0x999F, 0xC1A6}, //4355 #HANGUL SYLLABLE SIOS O PHIEUPH + {0x99A0, 0xC1A7}, //4356 #HANGUL SYLLABLE SIOS O HIEUH + {0x99A1, 0xC1AA}, //4357 #HANGUL SYLLABLE SIOS WA SSANGKIYEOK + {0x99A2, 0xC1AB}, //4358 #HANGUL SYLLABLE SIOS WA KIYEOKSIOS + {0x99A3, 0xC1AD}, //4359 #HANGUL SYLLABLE SIOS WA NIEUNCIEUC + {0x99A4, 0xC1AE}, //4360 #HANGUL SYLLABLE SIOS WA NIEUNHIEUH + {0x99A5, 0xC1AF}, //4361 #HANGUL SYLLABLE SIOS WA TIKEUT + {0x99A6, 0xC1B1}, //4362 #HANGUL SYLLABLE SIOS WA RIEULKIYEOK + {0x99A7, 0xC1B2}, //4363 #HANGUL SYLLABLE SIOS WA RIEULMIEUM + {0x99A8, 0xC1B3}, //4364 #HANGUL SYLLABLE SIOS WA RIEULPIEUP + {0x99A9, 0xC1B4}, //4365 #HANGUL SYLLABLE SIOS WA RIEULSIOS + {0x99AA, 0xC1B5}, //4366 #HANGUL SYLLABLE SIOS WA RIEULTHIEUTH + {0x99AB, 0xC1B6}, //4367 #HANGUL SYLLABLE SIOS WA RIEULPHIEUPH + {0x99AC, 0xC1B7}, //4368 #HANGUL SYLLABLE SIOS WA RIEULHIEUH + {0x99AD, 0xC1B8}, //4369 #HANGUL SYLLABLE SIOS WA MIEUM + {0x99AE, 0xC1B9}, //4370 #HANGUL SYLLABLE SIOS WA PIEUP + {0x99AF, 0xC1BA}, //4371 #HANGUL SYLLABLE SIOS WA PIEUPSIOS + {0x99B0, 0xC1BB}, //4372 #HANGUL SYLLABLE SIOS WA SIOS + {0x99B1, 0xC1BC}, //4373 #HANGUL SYLLABLE SIOS WA SSANGSIOS + {0x99B2, 0xC1BE}, //4374 #HANGUL SYLLABLE SIOS WA CIEUC + {0x99B3, 0xC1BF}, //4375 #HANGUL SYLLABLE SIOS WA CHIEUCH + {0x99B4, 0xC1C0}, //4376 #HANGUL SYLLABLE SIOS WA KHIEUKH + {0x99B5, 0xC1C1}, //4377 #HANGUL SYLLABLE SIOS WA THIEUTH + {0x99B6, 0xC1C2}, //4378 #HANGUL SYLLABLE SIOS WA PHIEUPH + {0x99B7, 0xC1C3}, //4379 #HANGUL SYLLABLE SIOS WA HIEUH + {0x99B8, 0xC1C5}, //4380 #HANGUL SYLLABLE SIOS WAE KIYEOK + {0x99B9, 0xC1C6}, //4381 #HANGUL SYLLABLE SIOS WAE SSANGKIYEOK + {0x99BA, 0xC1C7}, //4382 #HANGUL SYLLABLE SIOS WAE KIYEOKSIOS + {0x99BB, 0xC1C9}, //4383 #HANGUL SYLLABLE SIOS WAE NIEUNCIEUC + {0x99BC, 0xC1CA}, //4384 #HANGUL SYLLABLE SIOS WAE NIEUNHIEUH + {0x99BD, 0xC1CB}, //4385 #HANGUL SYLLABLE SIOS WAE TIKEUT + {0x99BE, 0xC1CD}, //4386 #HANGUL SYLLABLE SIOS WAE RIEULKIYEOK + {0x99BF, 0xC1CE}, //4387 #HANGUL SYLLABLE SIOS WAE RIEULMIEUM + {0x99C0, 0xC1CF}, //4388 #HANGUL SYLLABLE SIOS WAE RIEULPIEUP + {0x99C1, 0xC1D0}, //4389 #HANGUL SYLLABLE SIOS WAE RIEULSIOS + {0x99C2, 0xC1D1}, //4390 #HANGUL SYLLABLE SIOS WAE RIEULTHIEUTH + {0x99C3, 0xC1D2}, //4391 #HANGUL SYLLABLE SIOS WAE RIEULPHIEUPH + {0x99C4, 0xC1D3}, //4392 #HANGUL SYLLABLE SIOS WAE RIEULHIEUH + {0x99C5, 0xC1D5}, //4393 #HANGUL SYLLABLE SIOS WAE PIEUP + {0x99C6, 0xC1D6}, //4394 #HANGUL SYLLABLE SIOS WAE PIEUPSIOS + {0x99C7, 0xC1D9}, //4395 #HANGUL SYLLABLE SIOS WAE IEUNG + {0x99C8, 0xC1DA}, //4396 #HANGUL SYLLABLE SIOS WAE CIEUC + {0x99C9, 0xC1DB}, //4397 #HANGUL SYLLABLE SIOS WAE CHIEUCH + {0x99CA, 0xC1DC}, //4398 #HANGUL SYLLABLE SIOS WAE KHIEUKH + {0x99CB, 0xC1DD}, //4399 #HANGUL SYLLABLE SIOS WAE THIEUTH + {0x99CC, 0xC1DE}, //4400 #HANGUL SYLLABLE SIOS WAE PHIEUPH + {0x99CD, 0xC1DF}, //4401 #HANGUL SYLLABLE SIOS WAE HIEUH + {0x99CE, 0xC1E1}, //4402 #HANGUL SYLLABLE SIOS OE KIYEOK + {0x99CF, 0xC1E2}, //4403 #HANGUL SYLLABLE SIOS OE SSANGKIYEOK + {0x99D0, 0xC1E3}, //4404 #HANGUL SYLLABLE SIOS OE KIYEOKSIOS + {0x99D1, 0xC1E5}, //4405 #HANGUL SYLLABLE SIOS OE NIEUNCIEUC + {0x99D2, 0xC1E6}, //4406 #HANGUL SYLLABLE SIOS OE NIEUNHIEUH + {0x99D3, 0xC1E7}, //4407 #HANGUL SYLLABLE SIOS OE TIKEUT + {0x99D4, 0xC1E9}, //4408 #HANGUL SYLLABLE SIOS OE RIEULKIYEOK + {0x99D5, 0xC1EA}, //4409 #HANGUL SYLLABLE SIOS OE RIEULMIEUM + {0x99D6, 0xC1EB}, //4410 #HANGUL SYLLABLE SIOS OE RIEULPIEUP + {0x99D7, 0xC1EC}, //4411 #HANGUL SYLLABLE SIOS OE RIEULSIOS + {0x99D8, 0xC1ED}, //4412 #HANGUL SYLLABLE SIOS OE RIEULTHIEUTH + {0x99D9, 0xC1EE}, //4413 #HANGUL SYLLABLE SIOS OE RIEULPHIEUPH + {0x99DA, 0xC1EF}, //4414 #HANGUL SYLLABLE SIOS OE RIEULHIEUH + {0x99DB, 0xC1F2}, //4415 #HANGUL SYLLABLE SIOS OE PIEUPSIOS + {0x99DC, 0xC1F4}, //4416 #HANGUL SYLLABLE SIOS OE SSANGSIOS + {0x99DD, 0xC1F5}, //4417 #HANGUL SYLLABLE SIOS OE IEUNG + {0x99DE, 0xC1F6}, //4418 #HANGUL SYLLABLE SIOS OE CIEUC + {0x99DF, 0xC1F7}, //4419 #HANGUL SYLLABLE SIOS OE CHIEUCH + {0x99E0, 0xC1F8}, //4420 #HANGUL SYLLABLE SIOS OE KHIEUKH + {0x99E1, 0xC1F9}, //4421 #HANGUL SYLLABLE SIOS OE THIEUTH + {0x99E2, 0xC1FA}, //4422 #HANGUL SYLLABLE SIOS OE PHIEUPH + {0x99E3, 0xC1FB}, //4423 #HANGUL SYLLABLE SIOS OE HIEUH + {0x99E4, 0xC1FE}, //4424 #HANGUL SYLLABLE SIOS YO SSANGKIYEOK + {0x99E5, 0xC1FF}, //4425 #HANGUL SYLLABLE SIOS YO KIYEOKSIOS + {0x99E6, 0xC201}, //4426 #HANGUL SYLLABLE SIOS YO NIEUNCIEUC + {0x99E7, 0xC202}, //4427 #HANGUL SYLLABLE SIOS YO NIEUNHIEUH + {0x99E8, 0xC203}, //4428 #HANGUL SYLLABLE SIOS YO TIKEUT + {0x99E9, 0xC205}, //4429 #HANGUL SYLLABLE SIOS YO RIEULKIYEOK + {0x99EA, 0xC206}, //4430 #HANGUL SYLLABLE SIOS YO RIEULMIEUM + {0x99EB, 0xC207}, //4431 #HANGUL SYLLABLE SIOS YO RIEULPIEUP + {0x99EC, 0xC208}, //4432 #HANGUL SYLLABLE SIOS YO RIEULSIOS + {0x99ED, 0xC209}, //4433 #HANGUL SYLLABLE SIOS YO RIEULTHIEUTH + {0x99EE, 0xC20A}, //4434 #HANGUL SYLLABLE SIOS YO RIEULPHIEUPH + {0x99EF, 0xC20B}, //4435 #HANGUL SYLLABLE SIOS YO RIEULHIEUH + {0x99F0, 0xC20E}, //4436 #HANGUL SYLLABLE SIOS YO PIEUPSIOS + {0x99F1, 0xC210}, //4437 #HANGUL SYLLABLE SIOS YO SSANGSIOS + {0x99F2, 0xC212}, //4438 #HANGUL SYLLABLE SIOS YO CIEUC + {0x99F3, 0xC213}, //4439 #HANGUL SYLLABLE SIOS YO CHIEUCH + {0x99F4, 0xC214}, //4440 #HANGUL SYLLABLE SIOS YO KHIEUKH + {0x99F5, 0xC215}, //4441 #HANGUL SYLLABLE SIOS YO THIEUTH + {0x99F6, 0xC216}, //4442 #HANGUL SYLLABLE SIOS YO PHIEUPH + {0x99F7, 0xC217}, //4443 #HANGUL SYLLABLE SIOS YO HIEUH + {0x99F8, 0xC21A}, //4444 #HANGUL SYLLABLE SIOS U SSANGKIYEOK + {0x99F9, 0xC21B}, //4445 #HANGUL SYLLABLE SIOS U KIYEOKSIOS + {0x99FA, 0xC21D}, //4446 #HANGUL SYLLABLE SIOS U NIEUNCIEUC + {0x99FB, 0xC21E}, //4447 #HANGUL SYLLABLE SIOS U NIEUNHIEUH + {0x99FC, 0xC221}, //4448 #HANGUL SYLLABLE SIOS U RIEULKIYEOK + {0x99FD, 0xC222}, //4449 #HANGUL SYLLABLE SIOS U RIEULMIEUM + {0x99FE, 0xC223}, //4450 #HANGUL SYLLABLE SIOS U RIEULPIEUP + {0x9A41, 0xC224}, //4451 #HANGUL SYLLABLE SIOS U RIEULSIOS + {0x9A42, 0xC225}, //4452 #HANGUL SYLLABLE SIOS U RIEULTHIEUTH + {0x9A43, 0xC226}, //4453 #HANGUL SYLLABLE SIOS U RIEULPHIEUPH + {0x9A44, 0xC227}, //4454 #HANGUL SYLLABLE SIOS U RIEULHIEUH + {0x9A45, 0xC22A}, //4455 #HANGUL SYLLABLE SIOS U PIEUPSIOS + {0x9A46, 0xC22C}, //4456 #HANGUL SYLLABLE SIOS U SSANGSIOS + {0x9A47, 0xC22E}, //4457 #HANGUL SYLLABLE SIOS U CIEUC + {0x9A48, 0xC230}, //4458 #HANGUL SYLLABLE SIOS U KHIEUKH + {0x9A49, 0xC233}, //4459 #HANGUL SYLLABLE SIOS U HIEUH + {0x9A4A, 0xC235}, //4460 #HANGUL SYLLABLE SIOS WEO KIYEOK + {0x9A4B, 0xC236}, //4461 #HANGUL SYLLABLE SIOS WEO SSANGKIYEOK + {0x9A4C, 0xC237}, //4462 #HANGUL SYLLABLE SIOS WEO KIYEOKSIOS + {0x9A4D, 0xC238}, //4463 #HANGUL SYLLABLE SIOS WEO NIEUN + {0x9A4E, 0xC239}, //4464 #HANGUL SYLLABLE SIOS WEO NIEUNCIEUC + {0x9A4F, 0xC23A}, //4465 #HANGUL SYLLABLE SIOS WEO NIEUNHIEUH + {0x9A50, 0xC23B}, //4466 #HANGUL SYLLABLE SIOS WEO TIKEUT + {0x9A51, 0xC23C}, //4467 #HANGUL SYLLABLE SIOS WEO RIEUL + {0x9A52, 0xC23D}, //4468 #HANGUL SYLLABLE SIOS WEO RIEULKIYEOK + {0x9A53, 0xC23E}, //4469 #HANGUL SYLLABLE SIOS WEO RIEULMIEUM + {0x9A54, 0xC23F}, //4470 #HANGUL SYLLABLE SIOS WEO RIEULPIEUP + {0x9A55, 0xC240}, //4471 #HANGUL SYLLABLE SIOS WEO RIEULSIOS + {0x9A56, 0xC241}, //4472 #HANGUL SYLLABLE SIOS WEO RIEULTHIEUTH + {0x9A57, 0xC242}, //4473 #HANGUL SYLLABLE SIOS WEO RIEULPHIEUPH + {0x9A58, 0xC243}, //4474 #HANGUL SYLLABLE SIOS WEO RIEULHIEUH + {0x9A59, 0xC244}, //4475 #HANGUL SYLLABLE SIOS WEO MIEUM + {0x9A5A, 0xC245}, //4476 #HANGUL SYLLABLE SIOS WEO PIEUP + {0x9A61, 0xC246}, //4477 #HANGUL SYLLABLE SIOS WEO PIEUPSIOS + {0x9A62, 0xC247}, //4478 #HANGUL SYLLABLE SIOS WEO SIOS + {0x9A63, 0xC249}, //4479 #HANGUL SYLLABLE SIOS WEO IEUNG + {0x9A64, 0xC24A}, //4480 #HANGUL SYLLABLE SIOS WEO CIEUC + {0x9A65, 0xC24B}, //4481 #HANGUL SYLLABLE SIOS WEO CHIEUCH + {0x9A66, 0xC24C}, //4482 #HANGUL SYLLABLE SIOS WEO KHIEUKH + {0x9A67, 0xC24D}, //4483 #HANGUL SYLLABLE SIOS WEO THIEUTH + {0x9A68, 0xC24E}, //4484 #HANGUL SYLLABLE SIOS WEO PHIEUPH + {0x9A69, 0xC24F}, //4485 #HANGUL SYLLABLE SIOS WEO HIEUH + {0x9A6A, 0xC252}, //4486 #HANGUL SYLLABLE SIOS WE SSANGKIYEOK + {0x9A6B, 0xC253}, //4487 #HANGUL SYLLABLE SIOS WE KIYEOKSIOS + {0x9A6C, 0xC255}, //4488 #HANGUL SYLLABLE SIOS WE NIEUNCIEUC + {0x9A6D, 0xC256}, //4489 #HANGUL SYLLABLE SIOS WE NIEUNHIEUH + {0x9A6E, 0xC257}, //4490 #HANGUL SYLLABLE SIOS WE TIKEUT + {0x9A6F, 0xC259}, //4491 #HANGUL SYLLABLE SIOS WE RIEULKIYEOK + {0x9A70, 0xC25A}, //4492 #HANGUL SYLLABLE SIOS WE RIEULMIEUM + {0x9A71, 0xC25B}, //4493 #HANGUL SYLLABLE SIOS WE RIEULPIEUP + {0x9A72, 0xC25C}, //4494 #HANGUL SYLLABLE SIOS WE RIEULSIOS + {0x9A73, 0xC25D}, //4495 #HANGUL SYLLABLE SIOS WE RIEULTHIEUTH + {0x9A74, 0xC25E}, //4496 #HANGUL SYLLABLE SIOS WE RIEULPHIEUPH + {0x9A75, 0xC25F}, //4497 #HANGUL SYLLABLE SIOS WE RIEULHIEUH + {0x9A76, 0xC261}, //4498 #HANGUL SYLLABLE SIOS WE PIEUP + {0x9A77, 0xC262}, //4499 #HANGUL SYLLABLE SIOS WE PIEUPSIOS + {0x9A78, 0xC263}, //4500 #HANGUL SYLLABLE SIOS WE SIOS + {0x9A79, 0xC264}, //4501 #HANGUL SYLLABLE SIOS WE SSANGSIOS + {0x9A7A, 0xC266}, //4502 #HANGUL SYLLABLE SIOS WE CIEUC + {0x9A81, 0xC267}, //4503 #HANGUL SYLLABLE SIOS WE CHIEUCH + {0x9A82, 0xC268}, //4504 #HANGUL SYLLABLE SIOS WE KHIEUKH + {0x9A83, 0xC269}, //4505 #HANGUL SYLLABLE SIOS WE THIEUTH + {0x9A84, 0xC26A}, //4506 #HANGUL SYLLABLE SIOS WE PHIEUPH + {0x9A85, 0xC26B}, //4507 #HANGUL SYLLABLE SIOS WE HIEUH + {0x9A86, 0xC26E}, //4508 #HANGUL SYLLABLE SIOS WI SSANGKIYEOK + {0x9A87, 0xC26F}, //4509 #HANGUL SYLLABLE SIOS WI KIYEOKSIOS + {0x9A88, 0xC271}, //4510 #HANGUL SYLLABLE SIOS WI NIEUNCIEUC + {0x9A89, 0xC272}, //4511 #HANGUL SYLLABLE SIOS WI NIEUNHIEUH + {0x9A8A, 0xC273}, //4512 #HANGUL SYLLABLE SIOS WI TIKEUT + {0x9A8B, 0xC275}, //4513 #HANGUL SYLLABLE SIOS WI RIEULKIYEOK + {0x9A8C, 0xC276}, //4514 #HANGUL SYLLABLE SIOS WI RIEULMIEUM + {0x9A8D, 0xC277}, //4515 #HANGUL SYLLABLE SIOS WI RIEULPIEUP + {0x9A8E, 0xC278}, //4516 #HANGUL SYLLABLE SIOS WI RIEULSIOS + {0x9A8F, 0xC279}, //4517 #HANGUL SYLLABLE SIOS WI RIEULTHIEUTH + {0x9A90, 0xC27A}, //4518 #HANGUL SYLLABLE SIOS WI RIEULPHIEUPH + {0x9A91, 0xC27B}, //4519 #HANGUL SYLLABLE SIOS WI RIEULHIEUH + {0x9A92, 0xC27E}, //4520 #HANGUL SYLLABLE SIOS WI PIEUPSIOS + {0x9A93, 0xC280}, //4521 #HANGUL SYLLABLE SIOS WI SSANGSIOS + {0x9A94, 0xC282}, //4522 #HANGUL SYLLABLE SIOS WI CIEUC + {0x9A95, 0xC283}, //4523 #HANGUL SYLLABLE SIOS WI CHIEUCH + {0x9A96, 0xC284}, //4524 #HANGUL SYLLABLE SIOS WI KHIEUKH + {0x9A97, 0xC285}, //4525 #HANGUL SYLLABLE SIOS WI THIEUTH + {0x9A98, 0xC286}, //4526 #HANGUL SYLLABLE SIOS WI PHIEUPH + {0x9A99, 0xC287}, //4527 #HANGUL SYLLABLE SIOS WI HIEUH + {0x9A9A, 0xC28A}, //4528 #HANGUL SYLLABLE SIOS YU SSANGKIYEOK + {0x9A9B, 0xC28B}, //4529 #HANGUL SYLLABLE SIOS YU KIYEOKSIOS + {0x9A9C, 0xC28C}, //4530 #HANGUL SYLLABLE SIOS YU NIEUN + {0x9A9D, 0xC28D}, //4531 #HANGUL SYLLABLE SIOS YU NIEUNCIEUC + {0x9A9E, 0xC28E}, //4532 #HANGUL SYLLABLE SIOS YU NIEUNHIEUH + {0x9A9F, 0xC28F}, //4533 #HANGUL SYLLABLE SIOS YU TIKEUT + {0x9AA0, 0xC291}, //4534 #HANGUL SYLLABLE SIOS YU RIEULKIYEOK + {0x9AA1, 0xC292}, //4535 #HANGUL SYLLABLE SIOS YU RIEULMIEUM + {0x9AA2, 0xC293}, //4536 #HANGUL SYLLABLE SIOS YU RIEULPIEUP + {0x9AA3, 0xC294}, //4537 #HANGUL SYLLABLE SIOS YU RIEULSIOS + {0x9AA4, 0xC295}, //4538 #HANGUL SYLLABLE SIOS YU RIEULTHIEUTH + {0x9AA5, 0xC296}, //4539 #HANGUL SYLLABLE SIOS YU RIEULPHIEUPH + {0x9AA6, 0xC297}, //4540 #HANGUL SYLLABLE SIOS YU RIEULHIEUH + {0x9AA7, 0xC299}, //4541 #HANGUL SYLLABLE SIOS YU PIEUP + {0x9AA8, 0xC29A}, //4542 #HANGUL SYLLABLE SIOS YU PIEUPSIOS + {0x9AA9, 0xC29C}, //4543 #HANGUL SYLLABLE SIOS YU SSANGSIOS + {0x9AAA, 0xC29E}, //4544 #HANGUL SYLLABLE SIOS YU CIEUC + {0x9AAB, 0xC29F}, //4545 #HANGUL SYLLABLE SIOS YU CHIEUCH + {0x9AAC, 0xC2A0}, //4546 #HANGUL SYLLABLE SIOS YU KHIEUKH + {0x9AAD, 0xC2A1}, //4547 #HANGUL SYLLABLE SIOS YU THIEUTH + {0x9AAE, 0xC2A2}, //4548 #HANGUL SYLLABLE SIOS YU PHIEUPH + {0x9AAF, 0xC2A3}, //4549 #HANGUL SYLLABLE SIOS YU HIEUH + {0x9AB0, 0xC2A6}, //4550 #HANGUL SYLLABLE SIOS EU SSANGKIYEOK + {0x9AB1, 0xC2A7}, //4551 #HANGUL SYLLABLE SIOS EU KIYEOKSIOS + {0x9AB2, 0xC2A9}, //4552 #HANGUL SYLLABLE SIOS EU NIEUNCIEUC + {0x9AB3, 0xC2AA}, //4553 #HANGUL SYLLABLE SIOS EU NIEUNHIEUH + {0x9AB4, 0xC2AB}, //4554 #HANGUL SYLLABLE SIOS EU TIKEUT + {0x9AB5, 0xC2AE}, //4555 #HANGUL SYLLABLE SIOS EU RIEULMIEUM + {0x9AB6, 0xC2AF}, //4556 #HANGUL SYLLABLE SIOS EU RIEULPIEUP + {0x9AB7, 0xC2B0}, //4557 #HANGUL SYLLABLE SIOS EU RIEULSIOS + {0x9AB8, 0xC2B1}, //4558 #HANGUL SYLLABLE SIOS EU RIEULTHIEUTH + {0x9AB9, 0xC2B2}, //4559 #HANGUL SYLLABLE SIOS EU RIEULPHIEUPH + {0x9ABA, 0xC2B3}, //4560 #HANGUL SYLLABLE SIOS EU RIEULHIEUH + {0x9ABB, 0xC2B6}, //4561 #HANGUL SYLLABLE SIOS EU PIEUPSIOS + {0x9ABC, 0xC2B8}, //4562 #HANGUL SYLLABLE SIOS EU SSANGSIOS + {0x9ABD, 0xC2BA}, //4563 #HANGUL SYLLABLE SIOS EU CIEUC + {0x9ABE, 0xC2BB}, //4564 #HANGUL SYLLABLE SIOS EU CHIEUCH + {0x9ABF, 0xC2BC}, //4565 #HANGUL SYLLABLE SIOS EU KHIEUKH + {0x9AC0, 0xC2BD}, //4566 #HANGUL SYLLABLE SIOS EU THIEUTH + {0x9AC1, 0xC2BE}, //4567 #HANGUL SYLLABLE SIOS EU PHIEUPH + {0x9AC2, 0xC2BF}, //4568 #HANGUL SYLLABLE SIOS EU HIEUH + {0x9AC3, 0xC2C0}, //4569 #HANGUL SYLLABLE SIOS YI + {0x9AC4, 0xC2C1}, //4570 #HANGUL SYLLABLE SIOS YI KIYEOK + {0x9AC5, 0xC2C2}, //4571 #HANGUL SYLLABLE SIOS YI SSANGKIYEOK + {0x9AC6, 0xC2C3}, //4572 #HANGUL SYLLABLE SIOS YI KIYEOKSIOS + {0x9AC7, 0xC2C4}, //4573 #HANGUL SYLLABLE SIOS YI NIEUN + {0x9AC8, 0xC2C5}, //4574 #HANGUL SYLLABLE SIOS YI NIEUNCIEUC + {0x9AC9, 0xC2C6}, //4575 #HANGUL SYLLABLE SIOS YI NIEUNHIEUH + {0x9ACA, 0xC2C7}, //4576 #HANGUL SYLLABLE SIOS YI TIKEUT + {0x9ACB, 0xC2C8}, //4577 #HANGUL SYLLABLE SIOS YI RIEUL + {0x9ACC, 0xC2C9}, //4578 #HANGUL SYLLABLE SIOS YI RIEULKIYEOK + {0x9ACD, 0xC2CA}, //4579 #HANGUL SYLLABLE SIOS YI RIEULMIEUM + {0x9ACE, 0xC2CB}, //4580 #HANGUL SYLLABLE SIOS YI RIEULPIEUP + {0x9ACF, 0xC2CC}, //4581 #HANGUL SYLLABLE SIOS YI RIEULSIOS + {0x9AD0, 0xC2CD}, //4582 #HANGUL SYLLABLE SIOS YI RIEULTHIEUTH + {0x9AD1, 0xC2CE}, //4583 #HANGUL SYLLABLE SIOS YI RIEULPHIEUPH + {0x9AD2, 0xC2CF}, //4584 #HANGUL SYLLABLE SIOS YI RIEULHIEUH + {0x9AD3, 0xC2D0}, //4585 #HANGUL SYLLABLE SIOS YI MIEUM + {0x9AD4, 0xC2D1}, //4586 #HANGUL SYLLABLE SIOS YI PIEUP + {0x9AD5, 0xC2D2}, //4587 #HANGUL SYLLABLE SIOS YI PIEUPSIOS + {0x9AD6, 0xC2D3}, //4588 #HANGUL SYLLABLE SIOS YI SIOS + {0x9AD7, 0xC2D4}, //4589 #HANGUL SYLLABLE SIOS YI SSANGSIOS + {0x9AD8, 0xC2D5}, //4590 #HANGUL SYLLABLE SIOS YI IEUNG + {0x9AD9, 0xC2D6}, //4591 #HANGUL SYLLABLE SIOS YI CIEUC + {0x9ADA, 0xC2D7}, //4592 #HANGUL SYLLABLE SIOS YI CHIEUCH + {0x9ADB, 0xC2D8}, //4593 #HANGUL SYLLABLE SIOS YI KHIEUKH + {0x9ADC, 0xC2D9}, //4594 #HANGUL SYLLABLE SIOS YI THIEUTH + {0x9ADD, 0xC2DA}, //4595 #HANGUL SYLLABLE SIOS YI PHIEUPH + {0x9ADE, 0xC2DB}, //4596 #HANGUL SYLLABLE SIOS YI HIEUH + {0x9ADF, 0xC2DE}, //4597 #HANGUL SYLLABLE SIOS I SSANGKIYEOK + {0x9AE0, 0xC2DF}, //4598 #HANGUL SYLLABLE SIOS I KIYEOKSIOS + {0x9AE1, 0xC2E1}, //4599 #HANGUL SYLLABLE SIOS I NIEUNCIEUC + {0x9AE2, 0xC2E2}, //4600 #HANGUL SYLLABLE SIOS I NIEUNHIEUH + {0x9AE3, 0xC2E5}, //4601 #HANGUL SYLLABLE SIOS I RIEULKIYEOK + {0x9AE4, 0xC2E6}, //4602 #HANGUL SYLLABLE SIOS I RIEULMIEUM + {0x9AE5, 0xC2E7}, //4603 #HANGUL SYLLABLE SIOS I RIEULPIEUP + {0x9AE6, 0xC2E8}, //4604 #HANGUL SYLLABLE SIOS I RIEULSIOS + {0x9AE7, 0xC2E9}, //4605 #HANGUL SYLLABLE SIOS I RIEULTHIEUTH + {0x9AE8, 0xC2EA}, //4606 #HANGUL SYLLABLE SIOS I RIEULPHIEUPH + {0x9AE9, 0xC2EE}, //4607 #HANGUL SYLLABLE SIOS I PIEUPSIOS + {0x9AEA, 0xC2F0}, //4608 #HANGUL SYLLABLE SIOS I SSANGSIOS + {0x9AEB, 0xC2F2}, //4609 #HANGUL SYLLABLE SIOS I CIEUC + {0x9AEC, 0xC2F3}, //4610 #HANGUL SYLLABLE SIOS I CHIEUCH + {0x9AED, 0xC2F4}, //4611 #HANGUL SYLLABLE SIOS I KHIEUKH + {0x9AEE, 0xC2F5}, //4612 #HANGUL SYLLABLE SIOS I THIEUTH + {0x9AEF, 0xC2F7}, //4613 #HANGUL SYLLABLE SIOS I HIEUH + {0x9AF0, 0xC2FA}, //4614 #HANGUL SYLLABLE SSANGSIOS A SSANGKIYEOK + {0x9AF1, 0xC2FD}, //4615 #HANGUL SYLLABLE SSANGSIOS A NIEUNCIEUC + {0x9AF2, 0xC2FE}, //4616 #HANGUL SYLLABLE SSANGSIOS A NIEUNHIEUH + {0x9AF3, 0xC2FF}, //4617 #HANGUL SYLLABLE SSANGSIOS A TIKEUT + {0x9AF4, 0xC301}, //4618 #HANGUL SYLLABLE SSANGSIOS A RIEULKIYEOK + {0x9AF5, 0xC302}, //4619 #HANGUL SYLLABLE SSANGSIOS A RIEULMIEUM + {0x9AF6, 0xC303}, //4620 #HANGUL SYLLABLE SSANGSIOS A RIEULPIEUP + {0x9AF7, 0xC304}, //4621 #HANGUL SYLLABLE SSANGSIOS A RIEULSIOS + {0x9AF8, 0xC305}, //4622 #HANGUL SYLLABLE SSANGSIOS A RIEULTHIEUTH + {0x9AF9, 0xC306}, //4623 #HANGUL SYLLABLE SSANGSIOS A RIEULPHIEUPH + {0x9AFA, 0xC307}, //4624 #HANGUL SYLLABLE SSANGSIOS A RIEULHIEUH + {0x9AFB, 0xC30A}, //4625 #HANGUL SYLLABLE SSANGSIOS A PIEUPSIOS + {0x9AFC, 0xC30B}, //4626 #HANGUL SYLLABLE SSANGSIOS A SIOS + {0x9AFD, 0xC30E}, //4627 #HANGUL SYLLABLE SSANGSIOS A CIEUC + {0x9AFE, 0xC30F}, //4628 #HANGUL SYLLABLE SSANGSIOS A CHIEUCH + {0x9B41, 0xC310}, //4629 #HANGUL SYLLABLE SSANGSIOS A KHIEUKH + {0x9B42, 0xC311}, //4630 #HANGUL SYLLABLE SSANGSIOS A THIEUTH + {0x9B43, 0xC312}, //4631 #HANGUL SYLLABLE SSANGSIOS A PHIEUPH + {0x9B44, 0xC316}, //4632 #HANGUL SYLLABLE SSANGSIOS AE SSANGKIYEOK + {0x9B45, 0xC317}, //4633 #HANGUL SYLLABLE SSANGSIOS AE KIYEOKSIOS + {0x9B46, 0xC319}, //4634 #HANGUL SYLLABLE SSANGSIOS AE NIEUNCIEUC + {0x9B47, 0xC31A}, //4635 #HANGUL SYLLABLE SSANGSIOS AE NIEUNHIEUH + {0x9B48, 0xC31B}, //4636 #HANGUL SYLLABLE SSANGSIOS AE TIKEUT + {0x9B49, 0xC31D}, //4637 #HANGUL SYLLABLE SSANGSIOS AE RIEULKIYEOK + {0x9B4A, 0xC31E}, //4638 #HANGUL SYLLABLE SSANGSIOS AE RIEULMIEUM + {0x9B4B, 0xC31F}, //4639 #HANGUL SYLLABLE SSANGSIOS AE RIEULPIEUP + {0x9B4C, 0xC320}, //4640 #HANGUL SYLLABLE SSANGSIOS AE RIEULSIOS + {0x9B4D, 0xC321}, //4641 #HANGUL SYLLABLE SSANGSIOS AE RIEULTHIEUTH + {0x9B4E, 0xC322}, //4642 #HANGUL SYLLABLE SSANGSIOS AE RIEULPHIEUPH + {0x9B4F, 0xC323}, //4643 #HANGUL SYLLABLE SSANGSIOS AE RIEULHIEUH + {0x9B50, 0xC326}, //4644 #HANGUL SYLLABLE SSANGSIOS AE PIEUPSIOS + {0x9B51, 0xC327}, //4645 #HANGUL SYLLABLE SSANGSIOS AE SIOS + {0x9B52, 0xC32A}, //4646 #HANGUL SYLLABLE SSANGSIOS AE CIEUC + {0x9B53, 0xC32B}, //4647 #HANGUL SYLLABLE SSANGSIOS AE CHIEUCH + {0x9B54, 0xC32C}, //4648 #HANGUL SYLLABLE SSANGSIOS AE KHIEUKH + {0x9B55, 0xC32D}, //4649 #HANGUL SYLLABLE SSANGSIOS AE THIEUTH + {0x9B56, 0xC32E}, //4650 #HANGUL SYLLABLE SSANGSIOS AE PHIEUPH + {0x9B57, 0xC32F}, //4651 #HANGUL SYLLABLE SSANGSIOS AE HIEUH + {0x9B58, 0xC330}, //4652 #HANGUL SYLLABLE SSANGSIOS YA + {0x9B59, 0xC331}, //4653 #HANGUL SYLLABLE SSANGSIOS YA KIYEOK + {0x9B5A, 0xC332}, //4654 #HANGUL SYLLABLE SSANGSIOS YA SSANGKIYEOK + {0x9B61, 0xC333}, //4655 #HANGUL SYLLABLE SSANGSIOS YA KIYEOKSIOS + {0x9B62, 0xC334}, //4656 #HANGUL SYLLABLE SSANGSIOS YA NIEUN + {0x9B63, 0xC335}, //4657 #HANGUL SYLLABLE SSANGSIOS YA NIEUNCIEUC + {0x9B64, 0xC336}, //4658 #HANGUL SYLLABLE SSANGSIOS YA NIEUNHIEUH + {0x9B65, 0xC337}, //4659 #HANGUL SYLLABLE SSANGSIOS YA TIKEUT + {0x9B66, 0xC338}, //4660 #HANGUL SYLLABLE SSANGSIOS YA RIEUL + {0x9B67, 0xC339}, //4661 #HANGUL SYLLABLE SSANGSIOS YA RIEULKIYEOK + {0x9B68, 0xC33A}, //4662 #HANGUL SYLLABLE SSANGSIOS YA RIEULMIEUM + {0x9B69, 0xC33B}, //4663 #HANGUL SYLLABLE SSANGSIOS YA RIEULPIEUP + {0x9B6A, 0xC33C}, //4664 #HANGUL SYLLABLE SSANGSIOS YA RIEULSIOS + {0x9B6B, 0xC33D}, //4665 #HANGUL SYLLABLE SSANGSIOS YA RIEULTHIEUTH + {0x9B6C, 0xC33E}, //4666 #HANGUL SYLLABLE SSANGSIOS YA RIEULPHIEUPH + {0x9B6D, 0xC33F}, //4667 #HANGUL SYLLABLE SSANGSIOS YA RIEULHIEUH + {0x9B6E, 0xC340}, //4668 #HANGUL SYLLABLE SSANGSIOS YA MIEUM + {0x9B6F, 0xC341}, //4669 #HANGUL SYLLABLE SSANGSIOS YA PIEUP + {0x9B70, 0xC342}, //4670 #HANGUL SYLLABLE SSANGSIOS YA PIEUPSIOS + {0x9B71, 0xC343}, //4671 #HANGUL SYLLABLE SSANGSIOS YA SIOS + {0x9B72, 0xC344}, //4672 #HANGUL SYLLABLE SSANGSIOS YA SSANGSIOS + {0x9B73, 0xC346}, //4673 #HANGUL SYLLABLE SSANGSIOS YA CIEUC + {0x9B74, 0xC347}, //4674 #HANGUL SYLLABLE SSANGSIOS YA CHIEUCH + {0x9B75, 0xC348}, //4675 #HANGUL SYLLABLE SSANGSIOS YA KHIEUKH + {0x9B76, 0xC349}, //4676 #HANGUL SYLLABLE SSANGSIOS YA THIEUTH + {0x9B77, 0xC34A}, //4677 #HANGUL SYLLABLE SSANGSIOS YA PHIEUPH + {0x9B78, 0xC34B}, //4678 #HANGUL SYLLABLE SSANGSIOS YA HIEUH + {0x9B79, 0xC34C}, //4679 #HANGUL SYLLABLE SSANGSIOS YAE + {0x9B7A, 0xC34D}, //4680 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOK + {0x9B81, 0xC34E}, //4681 #HANGUL SYLLABLE SSANGSIOS YAE SSANGKIYEOK + {0x9B82, 0xC34F}, //4682 #HANGUL SYLLABLE SSANGSIOS YAE KIYEOKSIOS + {0x9B83, 0xC350}, //4683 #HANGUL SYLLABLE SSANGSIOS YAE NIEUN + {0x9B84, 0xC351}, //4684 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNCIEUC + {0x9B85, 0xC352}, //4685 #HANGUL SYLLABLE SSANGSIOS YAE NIEUNHIEUH + {0x9B86, 0xC353}, //4686 #HANGUL SYLLABLE SSANGSIOS YAE TIKEUT + {0x9B87, 0xC354}, //4687 #HANGUL SYLLABLE SSANGSIOS YAE RIEUL + {0x9B88, 0xC355}, //4688 #HANGUL SYLLABLE SSANGSIOS YAE RIEULKIYEOK + {0x9B89, 0xC356}, //4689 #HANGUL SYLLABLE SSANGSIOS YAE RIEULMIEUM + {0x9B8A, 0xC357}, //4690 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPIEUP + {0x9B8B, 0xC358}, //4691 #HANGUL SYLLABLE SSANGSIOS YAE RIEULSIOS + {0x9B8C, 0xC359}, //4692 #HANGUL SYLLABLE SSANGSIOS YAE RIEULTHIEUTH + {0x9B8D, 0xC35A}, //4693 #HANGUL SYLLABLE SSANGSIOS YAE RIEULPHIEUPH + {0x9B8E, 0xC35B}, //4694 #HANGUL SYLLABLE SSANGSIOS YAE RIEULHIEUH + {0x9B8F, 0xC35C}, //4695 #HANGUL SYLLABLE SSANGSIOS YAE MIEUM + {0x9B90, 0xC35D}, //4696 #HANGUL SYLLABLE SSANGSIOS YAE PIEUP + {0x9B91, 0xC35E}, //4697 #HANGUL SYLLABLE SSANGSIOS YAE PIEUPSIOS + {0x9B92, 0xC35F}, //4698 #HANGUL SYLLABLE SSANGSIOS YAE SIOS + {0x9B93, 0xC360}, //4699 #HANGUL SYLLABLE SSANGSIOS YAE SSANGSIOS + {0x9B94, 0xC361}, //4700 #HANGUL SYLLABLE SSANGSIOS YAE IEUNG + {0x9B95, 0xC362}, //4701 #HANGUL SYLLABLE SSANGSIOS YAE CIEUC + {0x9B96, 0xC363}, //4702 #HANGUL SYLLABLE SSANGSIOS YAE CHIEUCH + {0x9B97, 0xC364}, //4703 #HANGUL SYLLABLE SSANGSIOS YAE KHIEUKH + {0x9B98, 0xC365}, //4704 #HANGUL SYLLABLE SSANGSIOS YAE THIEUTH + {0x9B99, 0xC366}, //4705 #HANGUL SYLLABLE SSANGSIOS YAE PHIEUPH + {0x9B9A, 0xC367}, //4706 #HANGUL SYLLABLE SSANGSIOS YAE HIEUH + {0x9B9B, 0xC36A}, //4707 #HANGUL SYLLABLE SSANGSIOS EO SSANGKIYEOK + {0x9B9C, 0xC36B}, //4708 #HANGUL SYLLABLE SSANGSIOS EO KIYEOKSIOS + {0x9B9D, 0xC36D}, //4709 #HANGUL SYLLABLE SSANGSIOS EO NIEUNCIEUC + {0x9B9E, 0xC36E}, //4710 #HANGUL SYLLABLE SSANGSIOS EO NIEUNHIEUH + {0x9B9F, 0xC36F}, //4711 #HANGUL SYLLABLE SSANGSIOS EO TIKEUT + {0x9BA0, 0xC371}, //4712 #HANGUL SYLLABLE SSANGSIOS EO RIEULKIYEOK + {0x9BA1, 0xC373}, //4713 #HANGUL SYLLABLE SSANGSIOS EO RIEULPIEUP + {0x9BA2, 0xC374}, //4714 #HANGUL SYLLABLE SSANGSIOS EO RIEULSIOS + {0x9BA3, 0xC375}, //4715 #HANGUL SYLLABLE SSANGSIOS EO RIEULTHIEUTH + {0x9BA4, 0xC376}, //4716 #HANGUL SYLLABLE SSANGSIOS EO RIEULPHIEUPH + {0x9BA5, 0xC377}, //4717 #HANGUL SYLLABLE SSANGSIOS EO RIEULHIEUH + {0x9BA6, 0xC37A}, //4718 #HANGUL SYLLABLE SSANGSIOS EO PIEUPSIOS + {0x9BA7, 0xC37B}, //4719 #HANGUL SYLLABLE SSANGSIOS EO SIOS + {0x9BA8, 0xC37E}, //4720 #HANGUL SYLLABLE SSANGSIOS EO CIEUC + {0x9BA9, 0xC37F}, //4721 #HANGUL SYLLABLE SSANGSIOS EO CHIEUCH + {0x9BAA, 0xC380}, //4722 #HANGUL SYLLABLE SSANGSIOS EO KHIEUKH + {0x9BAB, 0xC381}, //4723 #HANGUL SYLLABLE SSANGSIOS EO THIEUTH + {0x9BAC, 0xC382}, //4724 #HANGUL SYLLABLE SSANGSIOS EO PHIEUPH + {0x9BAD, 0xC383}, //4725 #HANGUL SYLLABLE SSANGSIOS EO HIEUH + {0x9BAE, 0xC385}, //4726 #HANGUL SYLLABLE SSANGSIOS E KIYEOK + {0x9BAF, 0xC386}, //4727 #HANGUL SYLLABLE SSANGSIOS E SSANGKIYEOK + {0x9BB0, 0xC387}, //4728 #HANGUL SYLLABLE SSANGSIOS E KIYEOKSIOS + {0x9BB1, 0xC389}, //4729 #HANGUL SYLLABLE SSANGSIOS E NIEUNCIEUC + {0x9BB2, 0xC38A}, //4730 #HANGUL SYLLABLE SSANGSIOS E NIEUNHIEUH + {0x9BB3, 0xC38B}, //4731 #HANGUL SYLLABLE SSANGSIOS E TIKEUT + {0x9BB4, 0xC38D}, //4732 #HANGUL SYLLABLE SSANGSIOS E RIEULKIYEOK + {0x9BB5, 0xC38E}, //4733 #HANGUL SYLLABLE SSANGSIOS E RIEULMIEUM + {0x9BB6, 0xC38F}, //4734 #HANGUL SYLLABLE SSANGSIOS E RIEULPIEUP + {0x9BB7, 0xC390}, //4735 #HANGUL SYLLABLE SSANGSIOS E RIEULSIOS + {0x9BB8, 0xC391}, //4736 #HANGUL SYLLABLE SSANGSIOS E RIEULTHIEUTH + {0x9BB9, 0xC392}, //4737 #HANGUL SYLLABLE SSANGSIOS E RIEULPHIEUPH + {0x9BBA, 0xC393}, //4738 #HANGUL SYLLABLE SSANGSIOS E RIEULHIEUH + {0x9BBB, 0xC394}, //4739 #HANGUL SYLLABLE SSANGSIOS E MIEUM + {0x9BBC, 0xC395}, //4740 #HANGUL SYLLABLE SSANGSIOS E PIEUP + {0x9BBD, 0xC396}, //4741 #HANGUL SYLLABLE SSANGSIOS E PIEUPSIOS + {0x9BBE, 0xC397}, //4742 #HANGUL SYLLABLE SSANGSIOS E SIOS + {0x9BBF, 0xC398}, //4743 #HANGUL SYLLABLE SSANGSIOS E SSANGSIOS + {0x9BC0, 0xC399}, //4744 #HANGUL SYLLABLE SSANGSIOS E IEUNG + {0x9BC1, 0xC39A}, //4745 #HANGUL SYLLABLE SSANGSIOS E CIEUC + {0x9BC2, 0xC39B}, //4746 #HANGUL SYLLABLE SSANGSIOS E CHIEUCH + {0x9BC3, 0xC39C}, //4747 #HANGUL SYLLABLE SSANGSIOS E KHIEUKH + {0x9BC4, 0xC39D}, //4748 #HANGUL SYLLABLE SSANGSIOS E THIEUTH + {0x9BC5, 0xC39E}, //4749 #HANGUL SYLLABLE SSANGSIOS E PHIEUPH + {0x9BC6, 0xC39F}, //4750 #HANGUL SYLLABLE SSANGSIOS E HIEUH + {0x9BC7, 0xC3A0}, //4751 #HANGUL SYLLABLE SSANGSIOS YEO + {0x9BC8, 0xC3A1}, //4752 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOK + {0x9BC9, 0xC3A2}, //4753 #HANGUL SYLLABLE SSANGSIOS YEO SSANGKIYEOK + {0x9BCA, 0xC3A3}, //4754 #HANGUL SYLLABLE SSANGSIOS YEO KIYEOKSIOS + {0x9BCB, 0xC3A4}, //4755 #HANGUL SYLLABLE SSANGSIOS YEO NIEUN + {0x9BCC, 0xC3A5}, //4756 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNCIEUC + {0x9BCD, 0xC3A6}, //4757 #HANGUL SYLLABLE SSANGSIOS YEO NIEUNHIEUH + {0x9BCE, 0xC3A7}, //4758 #HANGUL SYLLABLE SSANGSIOS YEO TIKEUT + {0x9BCF, 0xC3A8}, //4759 #HANGUL SYLLABLE SSANGSIOS YEO RIEUL + {0x9BD0, 0xC3A9}, //4760 #HANGUL SYLLABLE SSANGSIOS YEO RIEULKIYEOK + {0x9BD1, 0xC3AA}, //4761 #HANGUL SYLLABLE SSANGSIOS YEO RIEULMIEUM + {0x9BD2, 0xC3AB}, //4762 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPIEUP + {0x9BD3, 0xC3AC}, //4763 #HANGUL SYLLABLE SSANGSIOS YEO RIEULSIOS + {0x9BD4, 0xC3AD}, //4764 #HANGUL SYLLABLE SSANGSIOS YEO RIEULTHIEUTH + {0x9BD5, 0xC3AE}, //4765 #HANGUL SYLLABLE SSANGSIOS YEO RIEULPHIEUPH + {0x9BD6, 0xC3AF}, //4766 #HANGUL SYLLABLE SSANGSIOS YEO RIEULHIEUH + {0x9BD7, 0xC3B0}, //4767 #HANGUL SYLLABLE SSANGSIOS YEO MIEUM + {0x9BD8, 0xC3B1}, //4768 #HANGUL SYLLABLE SSANGSIOS YEO PIEUP + {0x9BD9, 0xC3B2}, //4769 #HANGUL SYLLABLE SSANGSIOS YEO PIEUPSIOS + {0x9BDA, 0xC3B3}, //4770 #HANGUL SYLLABLE SSANGSIOS YEO SIOS + {0x9BDB, 0xC3B4}, //4771 #HANGUL SYLLABLE SSANGSIOS YEO SSANGSIOS + {0x9BDC, 0xC3B5}, //4772 #HANGUL SYLLABLE SSANGSIOS YEO IEUNG + {0x9BDD, 0xC3B6}, //4773 #HANGUL SYLLABLE SSANGSIOS YEO CIEUC + {0x9BDE, 0xC3B7}, //4774 #HANGUL SYLLABLE SSANGSIOS YEO CHIEUCH + {0x9BDF, 0xC3B8}, //4775 #HANGUL SYLLABLE SSANGSIOS YEO KHIEUKH + {0x9BE0, 0xC3B9}, //4776 #HANGUL SYLLABLE SSANGSIOS YEO THIEUTH + {0x9BE1, 0xC3BA}, //4777 #HANGUL SYLLABLE SSANGSIOS YEO PHIEUPH + {0x9BE2, 0xC3BB}, //4778 #HANGUL SYLLABLE SSANGSIOS YEO HIEUH + {0x9BE3, 0xC3BC}, //4779 #HANGUL SYLLABLE SSANGSIOS YE + {0x9BE4, 0xC3BD}, //4780 #HANGUL SYLLABLE SSANGSIOS YE KIYEOK + {0x9BE5, 0xC3BE}, //4781 #HANGUL SYLLABLE SSANGSIOS YE SSANGKIYEOK + {0x9BE6, 0xC3BF}, //4782 #HANGUL SYLLABLE SSANGSIOS YE KIYEOKSIOS + {0x9BE7, 0xC3C1}, //4783 #HANGUL SYLLABLE SSANGSIOS YE NIEUNCIEUC + {0x9BE8, 0xC3C2}, //4784 #HANGUL SYLLABLE SSANGSIOS YE NIEUNHIEUH + {0x9BE9, 0xC3C3}, //4785 #HANGUL SYLLABLE SSANGSIOS YE TIKEUT + {0x9BEA, 0xC3C4}, //4786 #HANGUL SYLLABLE SSANGSIOS YE RIEUL + {0x9BEB, 0xC3C5}, //4787 #HANGUL SYLLABLE SSANGSIOS YE RIEULKIYEOK + {0x9BEC, 0xC3C6}, //4788 #HANGUL SYLLABLE SSANGSIOS YE RIEULMIEUM + {0x9BED, 0xC3C7}, //4789 #HANGUL SYLLABLE SSANGSIOS YE RIEULPIEUP + {0x9BEE, 0xC3C8}, //4790 #HANGUL SYLLABLE SSANGSIOS YE RIEULSIOS + {0x9BEF, 0xC3C9}, //4791 #HANGUL SYLLABLE SSANGSIOS YE RIEULTHIEUTH + {0x9BF0, 0xC3CA}, //4792 #HANGUL SYLLABLE SSANGSIOS YE RIEULPHIEUPH + {0x9BF1, 0xC3CB}, //4793 #HANGUL SYLLABLE SSANGSIOS YE RIEULHIEUH + {0x9BF2, 0xC3CC}, //4794 #HANGUL SYLLABLE SSANGSIOS YE MIEUM + {0x9BF3, 0xC3CD}, //4795 #HANGUL SYLLABLE SSANGSIOS YE PIEUP + {0x9BF4, 0xC3CE}, //4796 #HANGUL SYLLABLE SSANGSIOS YE PIEUPSIOS + {0x9BF5, 0xC3CF}, //4797 #HANGUL SYLLABLE SSANGSIOS YE SIOS + {0x9BF6, 0xC3D0}, //4798 #HANGUL SYLLABLE SSANGSIOS YE SSANGSIOS + {0x9BF7, 0xC3D1}, //4799 #HANGUL SYLLABLE SSANGSIOS YE IEUNG + {0x9BF8, 0xC3D2}, //4800 #HANGUL SYLLABLE SSANGSIOS YE CIEUC + {0x9BF9, 0xC3D3}, //4801 #HANGUL SYLLABLE SSANGSIOS YE CHIEUCH + {0x9BFA, 0xC3D4}, //4802 #HANGUL SYLLABLE SSANGSIOS YE KHIEUKH + {0x9BFB, 0xC3D5}, //4803 #HANGUL SYLLABLE SSANGSIOS YE THIEUTH + {0x9BFC, 0xC3D6}, //4804 #HANGUL SYLLABLE SSANGSIOS YE PHIEUPH + {0x9BFD, 0xC3D7}, //4805 #HANGUL SYLLABLE SSANGSIOS YE HIEUH + {0x9BFE, 0xC3DA}, //4806 #HANGUL SYLLABLE SSANGSIOS O SSANGKIYEOK + {0x9C41, 0xC3DB}, //4807 #HANGUL SYLLABLE SSANGSIOS O KIYEOKSIOS + {0x9C42, 0xC3DD}, //4808 #HANGUL SYLLABLE SSANGSIOS O NIEUNCIEUC + {0x9C43, 0xC3DE}, //4809 #HANGUL SYLLABLE SSANGSIOS O NIEUNHIEUH + {0x9C44, 0xC3E1}, //4810 #HANGUL SYLLABLE SSANGSIOS O RIEULKIYEOK + {0x9C45, 0xC3E3}, //4811 #HANGUL SYLLABLE SSANGSIOS O RIEULPIEUP + {0x9C46, 0xC3E4}, //4812 #HANGUL SYLLABLE SSANGSIOS O RIEULSIOS + {0x9C47, 0xC3E5}, //4813 #HANGUL SYLLABLE SSANGSIOS O RIEULTHIEUTH + {0x9C48, 0xC3E6}, //4814 #HANGUL SYLLABLE SSANGSIOS O RIEULPHIEUPH + {0x9C49, 0xC3E7}, //4815 #HANGUL SYLLABLE SSANGSIOS O RIEULHIEUH + {0x9C4A, 0xC3EA}, //4816 #HANGUL SYLLABLE SSANGSIOS O PIEUPSIOS + {0x9C4B, 0xC3EB}, //4817 #HANGUL SYLLABLE SSANGSIOS O SIOS + {0x9C4C, 0xC3EC}, //4818 #HANGUL SYLLABLE SSANGSIOS O SSANGSIOS + {0x9C4D, 0xC3EE}, //4819 #HANGUL SYLLABLE SSANGSIOS O CIEUC + {0x9C4E, 0xC3EF}, //4820 #HANGUL SYLLABLE SSANGSIOS O CHIEUCH + {0x9C4F, 0xC3F0}, //4821 #HANGUL SYLLABLE SSANGSIOS O KHIEUKH + {0x9C50, 0xC3F1}, //4822 #HANGUL SYLLABLE SSANGSIOS O THIEUTH + {0x9C51, 0xC3F2}, //4823 #HANGUL SYLLABLE SSANGSIOS O PHIEUPH + {0x9C52, 0xC3F3}, //4824 #HANGUL SYLLABLE SSANGSIOS O HIEUH + {0x9C53, 0xC3F6}, //4825 #HANGUL SYLLABLE SSANGSIOS WA SSANGKIYEOK + {0x9C54, 0xC3F7}, //4826 #HANGUL SYLLABLE SSANGSIOS WA KIYEOKSIOS + {0x9C55, 0xC3F9}, //4827 #HANGUL SYLLABLE SSANGSIOS WA NIEUNCIEUC + {0x9C56, 0xC3FA}, //4828 #HANGUL SYLLABLE SSANGSIOS WA NIEUNHIEUH + {0x9C57, 0xC3FB}, //4829 #HANGUL SYLLABLE SSANGSIOS WA TIKEUT + {0x9C58, 0xC3FC}, //4830 #HANGUL SYLLABLE SSANGSIOS WA RIEUL + {0x9C59, 0xC3FD}, //4831 #HANGUL SYLLABLE SSANGSIOS WA RIEULKIYEOK + {0x9C5A, 0xC3FE}, //4832 #HANGUL SYLLABLE SSANGSIOS WA RIEULMIEUM + {0x9C61, 0xC3FF}, //4833 #HANGUL SYLLABLE SSANGSIOS WA RIEULPIEUP + {0x9C62, 0xC400}, //4834 #HANGUL SYLLABLE SSANGSIOS WA RIEULSIOS + {0x9C63, 0xC401}, //4835 #HANGUL SYLLABLE SSANGSIOS WA RIEULTHIEUTH + {0x9C64, 0xC402}, //4836 #HANGUL SYLLABLE SSANGSIOS WA RIEULPHIEUPH + {0x9C65, 0xC403}, //4837 #HANGUL SYLLABLE SSANGSIOS WA RIEULHIEUH + {0x9C66, 0xC404}, //4838 #HANGUL SYLLABLE SSANGSIOS WA MIEUM + {0x9C67, 0xC405}, //4839 #HANGUL SYLLABLE SSANGSIOS WA PIEUP + {0x9C68, 0xC406}, //4840 #HANGUL SYLLABLE SSANGSIOS WA PIEUPSIOS + {0x9C69, 0xC407}, //4841 #HANGUL SYLLABLE SSANGSIOS WA SIOS + {0x9C6A, 0xC409}, //4842 #HANGUL SYLLABLE SSANGSIOS WA IEUNG + {0x9C6B, 0xC40A}, //4843 #HANGUL SYLLABLE SSANGSIOS WA CIEUC + {0x9C6C, 0xC40B}, //4844 #HANGUL SYLLABLE SSANGSIOS WA CHIEUCH + {0x9C6D, 0xC40C}, //4845 #HANGUL SYLLABLE SSANGSIOS WA KHIEUKH + {0x9C6E, 0xC40D}, //4846 #HANGUL SYLLABLE SSANGSIOS WA THIEUTH + {0x9C6F, 0xC40E}, //4847 #HANGUL SYLLABLE SSANGSIOS WA PHIEUPH + {0x9C70, 0xC40F}, //4848 #HANGUL SYLLABLE SSANGSIOS WA HIEUH + {0x9C71, 0xC411}, //4849 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOK + {0x9C72, 0xC412}, //4850 #HANGUL SYLLABLE SSANGSIOS WAE SSANGKIYEOK + {0x9C73, 0xC413}, //4851 #HANGUL SYLLABLE SSANGSIOS WAE KIYEOKSIOS + {0x9C74, 0xC414}, //4852 #HANGUL SYLLABLE SSANGSIOS WAE NIEUN + {0x9C75, 0xC415}, //4853 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNCIEUC + {0x9C76, 0xC416}, //4854 #HANGUL SYLLABLE SSANGSIOS WAE NIEUNHIEUH + {0x9C77, 0xC417}, //4855 #HANGUL SYLLABLE SSANGSIOS WAE TIKEUT + {0x9C78, 0xC418}, //4856 #HANGUL SYLLABLE SSANGSIOS WAE RIEUL + {0x9C79, 0xC419}, //4857 #HANGUL SYLLABLE SSANGSIOS WAE RIEULKIYEOK + {0x9C7A, 0xC41A}, //4858 #HANGUL SYLLABLE SSANGSIOS WAE RIEULMIEUM + {0x9C81, 0xC41B}, //4859 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPIEUP + {0x9C82, 0xC41C}, //4860 #HANGUL SYLLABLE SSANGSIOS WAE RIEULSIOS + {0x9C83, 0xC41D}, //4861 #HANGUL SYLLABLE SSANGSIOS WAE RIEULTHIEUTH + {0x9C84, 0xC41E}, //4862 #HANGUL SYLLABLE SSANGSIOS WAE RIEULPHIEUPH + {0x9C85, 0xC41F}, //4863 #HANGUL SYLLABLE SSANGSIOS WAE RIEULHIEUH + {0x9C86, 0xC420}, //4864 #HANGUL SYLLABLE SSANGSIOS WAE MIEUM + {0x9C87, 0xC421}, //4865 #HANGUL SYLLABLE SSANGSIOS WAE PIEUP + {0x9C88, 0xC422}, //4866 #HANGUL SYLLABLE SSANGSIOS WAE PIEUPSIOS + {0x9C89, 0xC423}, //4867 #HANGUL SYLLABLE SSANGSIOS WAE SIOS + {0x9C8A, 0xC425}, //4868 #HANGUL SYLLABLE SSANGSIOS WAE IEUNG + {0x9C8B, 0xC426}, //4869 #HANGUL SYLLABLE SSANGSIOS WAE CIEUC + {0x9C8C, 0xC427}, //4870 #HANGUL SYLLABLE SSANGSIOS WAE CHIEUCH + {0x9C8D, 0xC428}, //4871 #HANGUL SYLLABLE SSANGSIOS WAE KHIEUKH + {0x9C8E, 0xC429}, //4872 #HANGUL SYLLABLE SSANGSIOS WAE THIEUTH + {0x9C8F, 0xC42A}, //4873 #HANGUL SYLLABLE SSANGSIOS WAE PHIEUPH + {0x9C90, 0xC42B}, //4874 #HANGUL SYLLABLE SSANGSIOS WAE HIEUH + {0x9C91, 0xC42D}, //4875 #HANGUL SYLLABLE SSANGSIOS OE KIYEOK + {0x9C92, 0xC42E}, //4876 #HANGUL SYLLABLE SSANGSIOS OE SSANGKIYEOK + {0x9C93, 0xC42F}, //4877 #HANGUL SYLLABLE SSANGSIOS OE KIYEOKSIOS + {0x9C94, 0xC431}, //4878 #HANGUL SYLLABLE SSANGSIOS OE NIEUNCIEUC + {0x9C95, 0xC432}, //4879 #HANGUL SYLLABLE SSANGSIOS OE NIEUNHIEUH + {0x9C96, 0xC433}, //4880 #HANGUL SYLLABLE SSANGSIOS OE TIKEUT + {0x9C97, 0xC435}, //4881 #HANGUL SYLLABLE SSANGSIOS OE RIEULKIYEOK + {0x9C98, 0xC436}, //4882 #HANGUL SYLLABLE SSANGSIOS OE RIEULMIEUM + {0x9C99, 0xC437}, //4883 #HANGUL SYLLABLE SSANGSIOS OE RIEULPIEUP + {0x9C9A, 0xC438}, //4884 #HANGUL SYLLABLE SSANGSIOS OE RIEULSIOS + {0x9C9B, 0xC439}, //4885 #HANGUL SYLLABLE SSANGSIOS OE RIEULTHIEUTH + {0x9C9C, 0xC43A}, //4886 #HANGUL SYLLABLE SSANGSIOS OE RIEULPHIEUPH + {0x9C9D, 0xC43B}, //4887 #HANGUL SYLLABLE SSANGSIOS OE RIEULHIEUH + {0x9C9E, 0xC43E}, //4888 #HANGUL SYLLABLE SSANGSIOS OE PIEUPSIOS + {0x9C9F, 0xC43F}, //4889 #HANGUL SYLLABLE SSANGSIOS OE SIOS + {0x9CA0, 0xC440}, //4890 #HANGUL SYLLABLE SSANGSIOS OE SSANGSIOS + {0x9CA1, 0xC441}, //4891 #HANGUL SYLLABLE SSANGSIOS OE IEUNG + {0x9CA2, 0xC442}, //4892 #HANGUL SYLLABLE SSANGSIOS OE CIEUC + {0x9CA3, 0xC443}, //4893 #HANGUL SYLLABLE SSANGSIOS OE CHIEUCH + {0x9CA4, 0xC444}, //4894 #HANGUL SYLLABLE SSANGSIOS OE KHIEUKH + {0x9CA5, 0xC445}, //4895 #HANGUL SYLLABLE SSANGSIOS OE THIEUTH + {0x9CA6, 0xC446}, //4896 #HANGUL SYLLABLE SSANGSIOS OE PHIEUPH + {0x9CA7, 0xC447}, //4897 #HANGUL SYLLABLE SSANGSIOS OE HIEUH + {0x9CA8, 0xC449}, //4898 #HANGUL SYLLABLE SSANGSIOS YO KIYEOK + {0x9CA9, 0xC44A}, //4899 #HANGUL SYLLABLE SSANGSIOS YO SSANGKIYEOK + {0x9CAA, 0xC44B}, //4900 #HANGUL SYLLABLE SSANGSIOS YO KIYEOKSIOS + {0x9CAB, 0xC44C}, //4901 #HANGUL SYLLABLE SSANGSIOS YO NIEUN + {0x9CAC, 0xC44D}, //4902 #HANGUL SYLLABLE SSANGSIOS YO NIEUNCIEUC + {0x9CAD, 0xC44E}, //4903 #HANGUL SYLLABLE SSANGSIOS YO NIEUNHIEUH + {0x9CAE, 0xC44F}, //4904 #HANGUL SYLLABLE SSANGSIOS YO TIKEUT + {0x9CAF, 0xC450}, //4905 #HANGUL SYLLABLE SSANGSIOS YO RIEUL + {0x9CB0, 0xC451}, //4906 #HANGUL SYLLABLE SSANGSIOS YO RIEULKIYEOK + {0x9CB1, 0xC452}, //4907 #HANGUL SYLLABLE SSANGSIOS YO RIEULMIEUM + {0x9CB2, 0xC453}, //4908 #HANGUL SYLLABLE SSANGSIOS YO RIEULPIEUP + {0x9CB3, 0xC454}, //4909 #HANGUL SYLLABLE SSANGSIOS YO RIEULSIOS + {0x9CB4, 0xC455}, //4910 #HANGUL SYLLABLE SSANGSIOS YO RIEULTHIEUTH + {0x9CB5, 0xC456}, //4911 #HANGUL SYLLABLE SSANGSIOS YO RIEULPHIEUPH + {0x9CB6, 0xC457}, //4912 #HANGUL SYLLABLE SSANGSIOS YO RIEULHIEUH + {0x9CB7, 0xC458}, //4913 #HANGUL SYLLABLE SSANGSIOS YO MIEUM + {0x9CB8, 0xC459}, //4914 #HANGUL SYLLABLE SSANGSIOS YO PIEUP + {0x9CB9, 0xC45A}, //4915 #HANGUL SYLLABLE SSANGSIOS YO PIEUPSIOS + {0x9CBA, 0xC45B}, //4916 #HANGUL SYLLABLE SSANGSIOS YO SIOS + {0x9CBB, 0xC45C}, //4917 #HANGUL SYLLABLE SSANGSIOS YO SSANGSIOS + {0x9CBC, 0xC45D}, //4918 #HANGUL SYLLABLE SSANGSIOS YO IEUNG + {0x9CBD, 0xC45E}, //4919 #HANGUL SYLLABLE SSANGSIOS YO CIEUC + {0x9CBE, 0xC45F}, //4920 #HANGUL SYLLABLE SSANGSIOS YO CHIEUCH + {0x9CBF, 0xC460}, //4921 #HANGUL SYLLABLE SSANGSIOS YO KHIEUKH + {0x9CC0, 0xC461}, //4922 #HANGUL SYLLABLE SSANGSIOS YO THIEUTH + {0x9CC1, 0xC462}, //4923 #HANGUL SYLLABLE SSANGSIOS YO PHIEUPH + {0x9CC2, 0xC463}, //4924 #HANGUL SYLLABLE SSANGSIOS YO HIEUH + {0x9CC3, 0xC466}, //4925 #HANGUL SYLLABLE SSANGSIOS U SSANGKIYEOK + {0x9CC4, 0xC467}, //4926 #HANGUL SYLLABLE SSANGSIOS U KIYEOKSIOS + {0x9CC5, 0xC469}, //4927 #HANGUL SYLLABLE SSANGSIOS U NIEUNCIEUC + {0x9CC6, 0xC46A}, //4928 #HANGUL SYLLABLE SSANGSIOS U NIEUNHIEUH + {0x9CC7, 0xC46B}, //4929 #HANGUL SYLLABLE SSANGSIOS U TIKEUT + {0x9CC8, 0xC46D}, //4930 #HANGUL SYLLABLE SSANGSIOS U RIEULKIYEOK + {0x9CC9, 0xC46E}, //4931 #HANGUL SYLLABLE SSANGSIOS U RIEULMIEUM + {0x9CCA, 0xC46F}, //4932 #HANGUL SYLLABLE SSANGSIOS U RIEULPIEUP + {0x9CCB, 0xC470}, //4933 #HANGUL SYLLABLE SSANGSIOS U RIEULSIOS + {0x9CCC, 0xC471}, //4934 #HANGUL SYLLABLE SSANGSIOS U RIEULTHIEUTH + {0x9CCD, 0xC472}, //4935 #HANGUL SYLLABLE SSANGSIOS U RIEULPHIEUPH + {0x9CCE, 0xC473}, //4936 #HANGUL SYLLABLE SSANGSIOS U RIEULHIEUH + {0x9CCF, 0xC476}, //4937 #HANGUL SYLLABLE SSANGSIOS U PIEUPSIOS + {0x9CD0, 0xC477}, //4938 #HANGUL SYLLABLE SSANGSIOS U SIOS + {0x9CD1, 0xC478}, //4939 #HANGUL SYLLABLE SSANGSIOS U SSANGSIOS + {0x9CD2, 0xC47A}, //4940 #HANGUL SYLLABLE SSANGSIOS U CIEUC + {0x9CD3, 0xC47B}, //4941 #HANGUL SYLLABLE SSANGSIOS U CHIEUCH + {0x9CD4, 0xC47C}, //4942 #HANGUL SYLLABLE SSANGSIOS U KHIEUKH + {0x9CD5, 0xC47D}, //4943 #HANGUL SYLLABLE SSANGSIOS U THIEUTH + {0x9CD6, 0xC47E}, //4944 #HANGUL SYLLABLE SSANGSIOS U PHIEUPH + {0x9CD7, 0xC47F}, //4945 #HANGUL SYLLABLE SSANGSIOS U HIEUH + {0x9CD8, 0xC481}, //4946 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOK + {0x9CD9, 0xC482}, //4947 #HANGUL SYLLABLE SSANGSIOS WEO SSANGKIYEOK + {0x9CDA, 0xC483}, //4948 #HANGUL SYLLABLE SSANGSIOS WEO KIYEOKSIOS + {0x9CDB, 0xC484}, //4949 #HANGUL SYLLABLE SSANGSIOS WEO NIEUN + {0x9CDC, 0xC485}, //4950 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNCIEUC + {0x9CDD, 0xC486}, //4951 #HANGUL SYLLABLE SSANGSIOS WEO NIEUNHIEUH + {0x9CDE, 0xC487}, //4952 #HANGUL SYLLABLE SSANGSIOS WEO TIKEUT + {0x9CDF, 0xC488}, //4953 #HANGUL SYLLABLE SSANGSIOS WEO RIEUL + {0x9CE0, 0xC489}, //4954 #HANGUL SYLLABLE SSANGSIOS WEO RIEULKIYEOK + {0x9CE1, 0xC48A}, //4955 #HANGUL SYLLABLE SSANGSIOS WEO RIEULMIEUM + {0x9CE2, 0xC48B}, //4956 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPIEUP + {0x9CE3, 0xC48C}, //4957 #HANGUL SYLLABLE SSANGSIOS WEO RIEULSIOS + {0x9CE4, 0xC48D}, //4958 #HANGUL SYLLABLE SSANGSIOS WEO RIEULTHIEUTH + {0x9CE5, 0xC48E}, //4959 #HANGUL SYLLABLE SSANGSIOS WEO RIEULPHIEUPH + {0x9CE6, 0xC48F}, //4960 #HANGUL SYLLABLE SSANGSIOS WEO RIEULHIEUH + {0x9CE7, 0xC490}, //4961 #HANGUL SYLLABLE SSANGSIOS WEO MIEUM + {0x9CE8, 0xC491}, //4962 #HANGUL SYLLABLE SSANGSIOS WEO PIEUP + {0x9CE9, 0xC492}, //4963 #HANGUL SYLLABLE SSANGSIOS WEO PIEUPSIOS + {0x9CEA, 0xC493}, //4964 #HANGUL SYLLABLE SSANGSIOS WEO SIOS + {0x9CEB, 0xC495}, //4965 #HANGUL SYLLABLE SSANGSIOS WEO IEUNG + {0x9CEC, 0xC496}, //4966 #HANGUL SYLLABLE SSANGSIOS WEO CIEUC + {0x9CED, 0xC497}, //4967 #HANGUL SYLLABLE SSANGSIOS WEO CHIEUCH + {0x9CEE, 0xC498}, //4968 #HANGUL SYLLABLE SSANGSIOS WEO KHIEUKH + {0x9CEF, 0xC499}, //4969 #HANGUL SYLLABLE SSANGSIOS WEO THIEUTH + {0x9CF0, 0xC49A}, //4970 #HANGUL SYLLABLE SSANGSIOS WEO PHIEUPH + {0x9CF1, 0xC49B}, //4971 #HANGUL SYLLABLE SSANGSIOS WEO HIEUH + {0x9CF2, 0xC49D}, //4972 #HANGUL SYLLABLE SSANGSIOS WE KIYEOK + {0x9CF3, 0xC49E}, //4973 #HANGUL SYLLABLE SSANGSIOS WE SSANGKIYEOK + {0x9CF4, 0xC49F}, //4974 #HANGUL SYLLABLE SSANGSIOS WE KIYEOKSIOS + {0x9CF5, 0xC4A0}, //4975 #HANGUL SYLLABLE SSANGSIOS WE NIEUN + {0x9CF6, 0xC4A1}, //4976 #HANGUL SYLLABLE SSANGSIOS WE NIEUNCIEUC + {0x9CF7, 0xC4A2}, //4977 #HANGUL SYLLABLE SSANGSIOS WE NIEUNHIEUH + {0x9CF8, 0xC4A3}, //4978 #HANGUL SYLLABLE SSANGSIOS WE TIKEUT + {0x9CF9, 0xC4A4}, //4979 #HANGUL SYLLABLE SSANGSIOS WE RIEUL + {0x9CFA, 0xC4A5}, //4980 #HANGUL SYLLABLE SSANGSIOS WE RIEULKIYEOK + {0x9CFB, 0xC4A6}, //4981 #HANGUL SYLLABLE SSANGSIOS WE RIEULMIEUM + {0x9CFC, 0xC4A7}, //4982 #HANGUL SYLLABLE SSANGSIOS WE RIEULPIEUP + {0x9CFD, 0xC4A8}, //4983 #HANGUL SYLLABLE SSANGSIOS WE RIEULSIOS + {0x9CFE, 0xC4A9}, //4984 #HANGUL SYLLABLE SSANGSIOS WE RIEULTHIEUTH + {0x9D41, 0xC4AA}, //4985 #HANGUL SYLLABLE SSANGSIOS WE RIEULPHIEUPH + {0x9D42, 0xC4AB}, //4986 #HANGUL SYLLABLE SSANGSIOS WE RIEULHIEUH + {0x9D43, 0xC4AC}, //4987 #HANGUL SYLLABLE SSANGSIOS WE MIEUM + {0x9D44, 0xC4AD}, //4988 #HANGUL SYLLABLE SSANGSIOS WE PIEUP + {0x9D45, 0xC4AE}, //4989 #HANGUL SYLLABLE SSANGSIOS WE PIEUPSIOS + {0x9D46, 0xC4AF}, //4990 #HANGUL SYLLABLE SSANGSIOS WE SIOS + {0x9D47, 0xC4B0}, //4991 #HANGUL SYLLABLE SSANGSIOS WE SSANGSIOS + {0x9D48, 0xC4B1}, //4992 #HANGUL SYLLABLE SSANGSIOS WE IEUNG + {0x9D49, 0xC4B2}, //4993 #HANGUL SYLLABLE SSANGSIOS WE CIEUC + {0x9D4A, 0xC4B3}, //4994 #HANGUL SYLLABLE SSANGSIOS WE CHIEUCH + {0x9D4B, 0xC4B4}, //4995 #HANGUL SYLLABLE SSANGSIOS WE KHIEUKH + {0x9D4C, 0xC4B5}, //4996 #HANGUL SYLLABLE SSANGSIOS WE THIEUTH + {0x9D4D, 0xC4B6}, //4997 #HANGUL SYLLABLE SSANGSIOS WE PHIEUPH + {0x9D4E, 0xC4B7}, //4998 #HANGUL SYLLABLE SSANGSIOS WE HIEUH + {0x9D4F, 0xC4B9}, //4999 #HANGUL SYLLABLE SSANGSIOS WI KIYEOK + {0x9D50, 0xC4BA}, //5000 #HANGUL SYLLABLE SSANGSIOS WI SSANGKIYEOK + {0x9D51, 0xC4BB}, //5001 #HANGUL SYLLABLE SSANGSIOS WI KIYEOKSIOS + {0x9D52, 0xC4BD}, //5002 #HANGUL SYLLABLE SSANGSIOS WI NIEUNCIEUC + {0x9D53, 0xC4BE}, //5003 #HANGUL SYLLABLE SSANGSIOS WI NIEUNHIEUH + {0x9D54, 0xC4BF}, //5004 #HANGUL SYLLABLE SSANGSIOS WI TIKEUT + {0x9D55, 0xC4C0}, //5005 #HANGUL SYLLABLE SSANGSIOS WI RIEUL + {0x9D56, 0xC4C1}, //5006 #HANGUL SYLLABLE SSANGSIOS WI RIEULKIYEOK + {0x9D57, 0xC4C2}, //5007 #HANGUL SYLLABLE SSANGSIOS WI RIEULMIEUM + {0x9D58, 0xC4C3}, //5008 #HANGUL SYLLABLE SSANGSIOS WI RIEULPIEUP + {0x9D59, 0xC4C4}, //5009 #HANGUL SYLLABLE SSANGSIOS WI RIEULSIOS + {0x9D5A, 0xC4C5}, //5010 #HANGUL SYLLABLE SSANGSIOS WI RIEULTHIEUTH + {0x9D61, 0xC4C6}, //5011 #HANGUL SYLLABLE SSANGSIOS WI RIEULPHIEUPH + {0x9D62, 0xC4C7}, //5012 #HANGUL SYLLABLE SSANGSIOS WI RIEULHIEUH + {0x9D63, 0xC4C8}, //5013 #HANGUL SYLLABLE SSANGSIOS WI MIEUM + {0x9D64, 0xC4C9}, //5014 #HANGUL SYLLABLE SSANGSIOS WI PIEUP + {0x9D65, 0xC4CA}, //5015 #HANGUL SYLLABLE SSANGSIOS WI PIEUPSIOS + {0x9D66, 0xC4CB}, //5016 #HANGUL SYLLABLE SSANGSIOS WI SIOS + {0x9D67, 0xC4CC}, //5017 #HANGUL SYLLABLE SSANGSIOS WI SSANGSIOS + {0x9D68, 0xC4CD}, //5018 #HANGUL SYLLABLE SSANGSIOS WI IEUNG + {0x9D69, 0xC4CE}, //5019 #HANGUL SYLLABLE SSANGSIOS WI CIEUC + {0x9D6A, 0xC4CF}, //5020 #HANGUL SYLLABLE SSANGSIOS WI CHIEUCH + {0x9D6B, 0xC4D0}, //5021 #HANGUL SYLLABLE SSANGSIOS WI KHIEUKH + {0x9D6C, 0xC4D1}, //5022 #HANGUL SYLLABLE SSANGSIOS WI THIEUTH + {0x9D6D, 0xC4D2}, //5023 #HANGUL SYLLABLE SSANGSIOS WI PHIEUPH + {0x9D6E, 0xC4D3}, //5024 #HANGUL SYLLABLE SSANGSIOS WI HIEUH + {0x9D6F, 0xC4D4}, //5025 #HANGUL SYLLABLE SSANGSIOS YU + {0x9D70, 0xC4D5}, //5026 #HANGUL SYLLABLE SSANGSIOS YU KIYEOK + {0x9D71, 0xC4D6}, //5027 #HANGUL SYLLABLE SSANGSIOS YU SSANGKIYEOK + {0x9D72, 0xC4D7}, //5028 #HANGUL SYLLABLE SSANGSIOS YU KIYEOKSIOS + {0x9D73, 0xC4D8}, //5029 #HANGUL SYLLABLE SSANGSIOS YU NIEUN + {0x9D74, 0xC4D9}, //5030 #HANGUL SYLLABLE SSANGSIOS YU NIEUNCIEUC + {0x9D75, 0xC4DA}, //5031 #HANGUL SYLLABLE SSANGSIOS YU NIEUNHIEUH + {0x9D76, 0xC4DB}, //5032 #HANGUL SYLLABLE SSANGSIOS YU TIKEUT + {0x9D77, 0xC4DC}, //5033 #HANGUL SYLLABLE SSANGSIOS YU RIEUL + {0x9D78, 0xC4DD}, //5034 #HANGUL SYLLABLE SSANGSIOS YU RIEULKIYEOK + {0x9D79, 0xC4DE}, //5035 #HANGUL SYLLABLE SSANGSIOS YU RIEULMIEUM + {0x9D7A, 0xC4DF}, //5036 #HANGUL SYLLABLE SSANGSIOS YU RIEULPIEUP + {0x9D81, 0xC4E0}, //5037 #HANGUL SYLLABLE SSANGSIOS YU RIEULSIOS + {0x9D82, 0xC4E1}, //5038 #HANGUL SYLLABLE SSANGSIOS YU RIEULTHIEUTH + {0x9D83, 0xC4E2}, //5039 #HANGUL SYLLABLE SSANGSIOS YU RIEULPHIEUPH + {0x9D84, 0xC4E3}, //5040 #HANGUL SYLLABLE SSANGSIOS YU RIEULHIEUH + {0x9D85, 0xC4E4}, //5041 #HANGUL SYLLABLE SSANGSIOS YU MIEUM + {0x9D86, 0xC4E5}, //5042 #HANGUL SYLLABLE SSANGSIOS YU PIEUP + {0x9D87, 0xC4E6}, //5043 #HANGUL SYLLABLE SSANGSIOS YU PIEUPSIOS + {0x9D88, 0xC4E7}, //5044 #HANGUL SYLLABLE SSANGSIOS YU SIOS + {0x9D89, 0xC4E8}, //5045 #HANGUL SYLLABLE SSANGSIOS YU SSANGSIOS + {0x9D8A, 0xC4EA}, //5046 #HANGUL SYLLABLE SSANGSIOS YU CIEUC + {0x9D8B, 0xC4EB}, //5047 #HANGUL SYLLABLE SSANGSIOS YU CHIEUCH + {0x9D8C, 0xC4EC}, //5048 #HANGUL SYLLABLE SSANGSIOS YU KHIEUKH + {0x9D8D, 0xC4ED}, //5049 #HANGUL SYLLABLE SSANGSIOS YU THIEUTH + {0x9D8E, 0xC4EE}, //5050 #HANGUL SYLLABLE SSANGSIOS YU PHIEUPH + {0x9D8F, 0xC4EF}, //5051 #HANGUL SYLLABLE SSANGSIOS YU HIEUH + {0x9D90, 0xC4F2}, //5052 #HANGUL SYLLABLE SSANGSIOS EU SSANGKIYEOK + {0x9D91, 0xC4F3}, //5053 #HANGUL SYLLABLE SSANGSIOS EU KIYEOKSIOS + {0x9D92, 0xC4F5}, //5054 #HANGUL SYLLABLE SSANGSIOS EU NIEUNCIEUC + {0x9D93, 0xC4F6}, //5055 #HANGUL SYLLABLE SSANGSIOS EU NIEUNHIEUH + {0x9D94, 0xC4F7}, //5056 #HANGUL SYLLABLE SSANGSIOS EU TIKEUT + {0x9D95, 0xC4F9}, //5057 #HANGUL SYLLABLE SSANGSIOS EU RIEULKIYEOK + {0x9D96, 0xC4FB}, //5058 #HANGUL SYLLABLE SSANGSIOS EU RIEULPIEUP + {0x9D97, 0xC4FC}, //5059 #HANGUL SYLLABLE SSANGSIOS EU RIEULSIOS + {0x9D98, 0xC4FD}, //5060 #HANGUL SYLLABLE SSANGSIOS EU RIEULTHIEUTH + {0x9D99, 0xC4FE}, //5061 #HANGUL SYLLABLE SSANGSIOS EU RIEULPHIEUPH + {0x9D9A, 0xC502}, //5062 #HANGUL SYLLABLE SSANGSIOS EU PIEUPSIOS + {0x9D9B, 0xC503}, //5063 #HANGUL SYLLABLE SSANGSIOS EU SIOS + {0x9D9C, 0xC504}, //5064 #HANGUL SYLLABLE SSANGSIOS EU SSANGSIOS + {0x9D9D, 0xC505}, //5065 #HANGUL SYLLABLE SSANGSIOS EU IEUNG + {0x9D9E, 0xC506}, //5066 #HANGUL SYLLABLE SSANGSIOS EU CIEUC + {0x9D9F, 0xC507}, //5067 #HANGUL SYLLABLE SSANGSIOS EU CHIEUCH + {0x9DA0, 0xC508}, //5068 #HANGUL SYLLABLE SSANGSIOS EU KHIEUKH + {0x9DA1, 0xC509}, //5069 #HANGUL SYLLABLE SSANGSIOS EU THIEUTH + {0x9DA2, 0xC50A}, //5070 #HANGUL SYLLABLE SSANGSIOS EU PHIEUPH + {0x9DA3, 0xC50B}, //5071 #HANGUL SYLLABLE SSANGSIOS EU HIEUH + {0x9DA4, 0xC50D}, //5072 #HANGUL SYLLABLE SSANGSIOS YI KIYEOK + {0x9DA5, 0xC50E}, //5073 #HANGUL SYLLABLE SSANGSIOS YI SSANGKIYEOK + {0x9DA6, 0xC50F}, //5074 #HANGUL SYLLABLE SSANGSIOS YI KIYEOKSIOS + {0x9DA7, 0xC511}, //5075 #HANGUL SYLLABLE SSANGSIOS YI NIEUNCIEUC + {0x9DA8, 0xC512}, //5076 #HANGUL SYLLABLE SSANGSIOS YI NIEUNHIEUH + {0x9DA9, 0xC513}, //5077 #HANGUL SYLLABLE SSANGSIOS YI TIKEUT + {0x9DAA, 0xC515}, //5078 #HANGUL SYLLABLE SSANGSIOS YI RIEULKIYEOK + {0x9DAB, 0xC516}, //5079 #HANGUL SYLLABLE SSANGSIOS YI RIEULMIEUM + {0x9DAC, 0xC517}, //5080 #HANGUL SYLLABLE SSANGSIOS YI RIEULPIEUP + {0x9DAD, 0xC518}, //5081 #HANGUL SYLLABLE SSANGSIOS YI RIEULSIOS + {0x9DAE, 0xC519}, //5082 #HANGUL SYLLABLE SSANGSIOS YI RIEULTHIEUTH + {0x9DAF, 0xC51A}, //5083 #HANGUL SYLLABLE SSANGSIOS YI RIEULPHIEUPH + {0x9DB0, 0xC51B}, //5084 #HANGUL SYLLABLE SSANGSIOS YI RIEULHIEUH + {0x9DB1, 0xC51D}, //5085 #HANGUL SYLLABLE SSANGSIOS YI PIEUP + {0x9DB2, 0xC51E}, //5086 #HANGUL SYLLABLE SSANGSIOS YI PIEUPSIOS + {0x9DB3, 0xC51F}, //5087 #HANGUL SYLLABLE SSANGSIOS YI SIOS + {0x9DB4, 0xC520}, //5088 #HANGUL SYLLABLE SSANGSIOS YI SSANGSIOS + {0x9DB5, 0xC521}, //5089 #HANGUL SYLLABLE SSANGSIOS YI IEUNG + {0x9DB6, 0xC522}, //5090 #HANGUL SYLLABLE SSANGSIOS YI CIEUC + {0x9DB7, 0xC523}, //5091 #HANGUL SYLLABLE SSANGSIOS YI CHIEUCH + {0x9DB8, 0xC524}, //5092 #HANGUL SYLLABLE SSANGSIOS YI KHIEUKH + {0x9DB9, 0xC525}, //5093 #HANGUL SYLLABLE SSANGSIOS YI THIEUTH + {0x9DBA, 0xC526}, //5094 #HANGUL SYLLABLE SSANGSIOS YI PHIEUPH + {0x9DBB, 0xC527}, //5095 #HANGUL SYLLABLE SSANGSIOS YI HIEUH + {0x9DBC, 0xC52A}, //5096 #HANGUL SYLLABLE SSANGSIOS I SSANGKIYEOK + {0x9DBD, 0xC52B}, //5097 #HANGUL SYLLABLE SSANGSIOS I KIYEOKSIOS + {0x9DBE, 0xC52D}, //5098 #HANGUL SYLLABLE SSANGSIOS I NIEUNCIEUC + {0x9DBF, 0xC52E}, //5099 #HANGUL SYLLABLE SSANGSIOS I NIEUNHIEUH + {0x9DC0, 0xC52F}, //5100 #HANGUL SYLLABLE SSANGSIOS I TIKEUT + {0x9DC1, 0xC531}, //5101 #HANGUL SYLLABLE SSANGSIOS I RIEULKIYEOK + {0x9DC2, 0xC532}, //5102 #HANGUL SYLLABLE SSANGSIOS I RIEULMIEUM + {0x9DC3, 0xC533}, //5103 #HANGUL SYLLABLE SSANGSIOS I RIEULPIEUP + {0x9DC4, 0xC534}, //5104 #HANGUL SYLLABLE SSANGSIOS I RIEULSIOS + {0x9DC5, 0xC535}, //5105 #HANGUL SYLLABLE SSANGSIOS I RIEULTHIEUTH + {0x9DC6, 0xC536}, //5106 #HANGUL SYLLABLE SSANGSIOS I RIEULPHIEUPH + {0x9DC7, 0xC537}, //5107 #HANGUL SYLLABLE SSANGSIOS I RIEULHIEUH + {0x9DC8, 0xC53A}, //5108 #HANGUL SYLLABLE SSANGSIOS I PIEUPSIOS + {0x9DC9, 0xC53C}, //5109 #HANGUL SYLLABLE SSANGSIOS I SSANGSIOS + {0x9DCA, 0xC53E}, //5110 #HANGUL SYLLABLE SSANGSIOS I CIEUC + {0x9DCB, 0xC53F}, //5111 #HANGUL SYLLABLE SSANGSIOS I CHIEUCH + {0x9DCC, 0xC540}, //5112 #HANGUL SYLLABLE SSANGSIOS I KHIEUKH + {0x9DCD, 0xC541}, //5113 #HANGUL SYLLABLE SSANGSIOS I THIEUTH + {0x9DCE, 0xC542}, //5114 #HANGUL SYLLABLE SSANGSIOS I PHIEUPH + {0x9DCF, 0xC543}, //5115 #HANGUL SYLLABLE SSANGSIOS I HIEUH + {0x9DD0, 0xC546}, //5116 #HANGUL SYLLABLE IEUNG A SSANGKIYEOK + {0x9DD1, 0xC547}, //5117 #HANGUL SYLLABLE IEUNG A KIYEOKSIOS + {0x9DD2, 0xC54B}, //5118 #HANGUL SYLLABLE IEUNG A TIKEUT + {0x9DD3, 0xC54F}, //5119 #HANGUL SYLLABLE IEUNG A RIEULPIEUP + {0x9DD4, 0xC550}, //5120 #HANGUL SYLLABLE IEUNG A RIEULSIOS + {0x9DD5, 0xC551}, //5121 #HANGUL SYLLABLE IEUNG A RIEULTHIEUTH + {0x9DD6, 0xC552}, //5122 #HANGUL SYLLABLE IEUNG A RIEULPHIEUPH + {0x9DD7, 0xC556}, //5123 #HANGUL SYLLABLE IEUNG A PIEUPSIOS + {0x9DD8, 0xC55A}, //5124 #HANGUL SYLLABLE IEUNG A CIEUC + {0x9DD9, 0xC55B}, //5125 #HANGUL SYLLABLE IEUNG A CHIEUCH + {0x9DDA, 0xC55C}, //5126 #HANGUL SYLLABLE IEUNG A KHIEUKH + {0x9DDB, 0xC55F}, //5127 #HANGUL SYLLABLE IEUNG A HIEUH + {0x9DDC, 0xC562}, //5128 #HANGUL SYLLABLE IEUNG AE SSANGKIYEOK + {0x9DDD, 0xC563}, //5129 #HANGUL SYLLABLE IEUNG AE KIYEOKSIOS + {0x9DDE, 0xC565}, //5130 #HANGUL SYLLABLE IEUNG AE NIEUNCIEUC + {0x9DDF, 0xC566}, //5131 #HANGUL SYLLABLE IEUNG AE NIEUNHIEUH + {0x9DE0, 0xC567}, //5132 #HANGUL SYLLABLE IEUNG AE TIKEUT + {0x9DE1, 0xC569}, //5133 #HANGUL SYLLABLE IEUNG AE RIEULKIYEOK + {0x9DE2, 0xC56A}, //5134 #HANGUL SYLLABLE IEUNG AE RIEULMIEUM + {0x9DE3, 0xC56B}, //5135 #HANGUL SYLLABLE IEUNG AE RIEULPIEUP + {0x9DE4, 0xC56C}, //5136 #HANGUL SYLLABLE IEUNG AE RIEULSIOS + {0x9DE5, 0xC56D}, //5137 #HANGUL SYLLABLE IEUNG AE RIEULTHIEUTH + {0x9DE6, 0xC56E}, //5138 #HANGUL SYLLABLE IEUNG AE RIEULPHIEUPH + {0x9DE7, 0xC56F}, //5139 #HANGUL SYLLABLE IEUNG AE RIEULHIEUH + {0x9DE8, 0xC572}, //5140 #HANGUL SYLLABLE IEUNG AE PIEUPSIOS + {0x9DE9, 0xC576}, //5141 #HANGUL SYLLABLE IEUNG AE CIEUC + {0x9DEA, 0xC577}, //5142 #HANGUL SYLLABLE IEUNG AE CHIEUCH + {0x9DEB, 0xC578}, //5143 #HANGUL SYLLABLE IEUNG AE KHIEUKH + {0x9DEC, 0xC579}, //5144 #HANGUL SYLLABLE IEUNG AE THIEUTH + {0x9DED, 0xC57A}, //5145 #HANGUL SYLLABLE IEUNG AE PHIEUPH + {0x9DEE, 0xC57B}, //5146 #HANGUL SYLLABLE IEUNG AE HIEUH + {0x9DEF, 0xC57E}, //5147 #HANGUL SYLLABLE IEUNG YA SSANGKIYEOK + {0x9DF0, 0xC57F}, //5148 #HANGUL SYLLABLE IEUNG YA KIYEOKSIOS + {0x9DF1, 0xC581}, //5149 #HANGUL SYLLABLE IEUNG YA NIEUNCIEUC + {0x9DF2, 0xC582}, //5150 #HANGUL SYLLABLE IEUNG YA NIEUNHIEUH + {0x9DF3, 0xC583}, //5151 #HANGUL SYLLABLE IEUNG YA TIKEUT + {0x9DF4, 0xC585}, //5152 #HANGUL SYLLABLE IEUNG YA RIEULKIYEOK + {0x9DF5, 0xC586}, //5153 #HANGUL SYLLABLE IEUNG YA RIEULMIEUM + {0x9DF6, 0xC588}, //5154 #HANGUL SYLLABLE IEUNG YA RIEULSIOS + {0x9DF7, 0xC589}, //5155 #HANGUL SYLLABLE IEUNG YA RIEULTHIEUTH + {0x9DF8, 0xC58A}, //5156 #HANGUL SYLLABLE IEUNG YA RIEULPHIEUPH + {0x9DF9, 0xC58B}, //5157 #HANGUL SYLLABLE IEUNG YA RIEULHIEUH + {0x9DFA, 0xC58E}, //5158 #HANGUL SYLLABLE IEUNG YA PIEUPSIOS + {0x9DFB, 0xC590}, //5159 #HANGUL SYLLABLE IEUNG YA SSANGSIOS + {0x9DFC, 0xC592}, //5160 #HANGUL SYLLABLE IEUNG YA CIEUC + {0x9DFD, 0xC593}, //5161 #HANGUL SYLLABLE IEUNG YA CHIEUCH + {0x9DFE, 0xC594}, //5162 #HANGUL SYLLABLE IEUNG YA KHIEUKH + {0x9E41, 0xC596}, //5163 #HANGUL SYLLABLE IEUNG YA PHIEUPH + {0x9E42, 0xC599}, //5164 #HANGUL SYLLABLE IEUNG YAE KIYEOK + {0x9E43, 0xC59A}, //5165 #HANGUL SYLLABLE IEUNG YAE SSANGKIYEOK + {0x9E44, 0xC59B}, //5166 #HANGUL SYLLABLE IEUNG YAE KIYEOKSIOS + {0x9E45, 0xC59D}, //5167 #HANGUL SYLLABLE IEUNG YAE NIEUNCIEUC + {0x9E46, 0xC59E}, //5168 #HANGUL SYLLABLE IEUNG YAE NIEUNHIEUH + {0x9E47, 0xC59F}, //5169 #HANGUL SYLLABLE IEUNG YAE TIKEUT + {0x9E48, 0xC5A1}, //5170 #HANGUL SYLLABLE IEUNG YAE RIEULKIYEOK + {0x9E49, 0xC5A2}, //5171 #HANGUL SYLLABLE IEUNG YAE RIEULMIEUM + {0x9E4A, 0xC5A3}, //5172 #HANGUL SYLLABLE IEUNG YAE RIEULPIEUP + {0x9E4B, 0xC5A4}, //5173 #HANGUL SYLLABLE IEUNG YAE RIEULSIOS + {0x9E4C, 0xC5A5}, //5174 #HANGUL SYLLABLE IEUNG YAE RIEULTHIEUTH + {0x9E4D, 0xC5A6}, //5175 #HANGUL SYLLABLE IEUNG YAE RIEULPHIEUPH + {0x9E4E, 0xC5A7}, //5176 #HANGUL SYLLABLE IEUNG YAE RIEULHIEUH + {0x9E4F, 0xC5A8}, //5177 #HANGUL SYLLABLE IEUNG YAE MIEUM + {0x9E50, 0xC5AA}, //5178 #HANGUL SYLLABLE IEUNG YAE PIEUPSIOS + {0x9E51, 0xC5AB}, //5179 #HANGUL SYLLABLE IEUNG YAE SIOS + {0x9E52, 0xC5AC}, //5180 #HANGUL SYLLABLE IEUNG YAE SSANGSIOS + {0x9E53, 0xC5AD}, //5181 #HANGUL SYLLABLE IEUNG YAE IEUNG + {0x9E54, 0xC5AE}, //5182 #HANGUL SYLLABLE IEUNG YAE CIEUC + {0x9E55, 0xC5AF}, //5183 #HANGUL SYLLABLE IEUNG YAE CHIEUCH + {0x9E56, 0xC5B0}, //5184 #HANGUL SYLLABLE IEUNG YAE KHIEUKH + {0x9E57, 0xC5B1}, //5185 #HANGUL SYLLABLE IEUNG YAE THIEUTH + {0x9E58, 0xC5B2}, //5186 #HANGUL SYLLABLE IEUNG YAE PHIEUPH + {0x9E59, 0xC5B3}, //5187 #HANGUL SYLLABLE IEUNG YAE HIEUH + {0x9E5A, 0xC5B6}, //5188 #HANGUL SYLLABLE IEUNG EO SSANGKIYEOK + {0x9E61, 0xC5B7}, //5189 #HANGUL SYLLABLE IEUNG EO KIYEOKSIOS + {0x9E62, 0xC5BA}, //5190 #HANGUL SYLLABLE IEUNG EO NIEUNHIEUH + {0x9E63, 0xC5BF}, //5191 #HANGUL SYLLABLE IEUNG EO RIEULPIEUP + {0x9E64, 0xC5C0}, //5192 #HANGUL SYLLABLE IEUNG EO RIEULSIOS + {0x9E65, 0xC5C1}, //5193 #HANGUL SYLLABLE IEUNG EO RIEULTHIEUTH + {0x9E66, 0xC5C2}, //5194 #HANGUL SYLLABLE IEUNG EO RIEULPHIEUPH + {0x9E67, 0xC5C3}, //5195 #HANGUL SYLLABLE IEUNG EO RIEULHIEUH + {0x9E68, 0xC5CB}, //5196 #HANGUL SYLLABLE IEUNG EO CHIEUCH + {0x9E69, 0xC5CD}, //5197 #HANGUL SYLLABLE IEUNG EO THIEUTH + {0x9E6A, 0xC5CF}, //5198 #HANGUL SYLLABLE IEUNG EO HIEUH + {0x9E6B, 0xC5D2}, //5199 #HANGUL SYLLABLE IEUNG E SSANGKIYEOK + {0x9E6C, 0xC5D3}, //5200 #HANGUL SYLLABLE IEUNG E KIYEOKSIOS + {0x9E6D, 0xC5D5}, //5201 #HANGUL SYLLABLE IEUNG E NIEUNCIEUC + {0x9E6E, 0xC5D6}, //5202 #HANGUL SYLLABLE IEUNG E NIEUNHIEUH + {0x9E6F, 0xC5D7}, //5203 #HANGUL SYLLABLE IEUNG E TIKEUT + {0x9E70, 0xC5D9}, //5204 #HANGUL SYLLABLE IEUNG E RIEULKIYEOK + {0x9E71, 0xC5DA}, //5205 #HANGUL SYLLABLE IEUNG E RIEULMIEUM + {0x9E72, 0xC5DB}, //5206 #HANGUL SYLLABLE IEUNG E RIEULPIEUP + {0x9E73, 0xC5DC}, //5207 #HANGUL SYLLABLE IEUNG E RIEULSIOS + {0x9E74, 0xC5DD}, //5208 #HANGUL SYLLABLE IEUNG E RIEULTHIEUTH + {0x9E75, 0xC5DE}, //5209 #HANGUL SYLLABLE IEUNG E RIEULPHIEUPH + {0x9E76, 0xC5DF}, //5210 #HANGUL SYLLABLE IEUNG E RIEULHIEUH + {0x9E77, 0xC5E2}, //5211 #HANGUL SYLLABLE IEUNG E PIEUPSIOS + {0x9E78, 0xC5E4}, //5212 #HANGUL SYLLABLE IEUNG E SSANGSIOS + {0x9E79, 0xC5E6}, //5213 #HANGUL SYLLABLE IEUNG E CIEUC + {0x9E7A, 0xC5E7}, //5214 #HANGUL SYLLABLE IEUNG E CHIEUCH + {0x9E81, 0xC5E8}, //5215 #HANGUL SYLLABLE IEUNG E KHIEUKH + {0x9E82, 0xC5E9}, //5216 #HANGUL SYLLABLE IEUNG E THIEUTH + {0x9E83, 0xC5EA}, //5217 #HANGUL SYLLABLE IEUNG E PHIEUPH + {0x9E84, 0xC5EB}, //5218 #HANGUL SYLLABLE IEUNG E HIEUH + {0x9E85, 0xC5EF}, //5219 #HANGUL SYLLABLE IEUNG YEO KIYEOKSIOS + {0x9E86, 0xC5F1}, //5220 #HANGUL SYLLABLE IEUNG YEO NIEUNCIEUC + {0x9E87, 0xC5F2}, //5221 #HANGUL SYLLABLE IEUNG YEO NIEUNHIEUH + {0x9E88, 0xC5F3}, //5222 #HANGUL SYLLABLE IEUNG YEO TIKEUT + {0x9E89, 0xC5F5}, //5223 #HANGUL SYLLABLE IEUNG YEO RIEULKIYEOK + {0x9E8A, 0xC5F8}, //5224 #HANGUL SYLLABLE IEUNG YEO RIEULSIOS + {0x9E8B, 0xC5F9}, //5225 #HANGUL SYLLABLE IEUNG YEO RIEULTHIEUTH + {0x9E8C, 0xC5FA}, //5226 #HANGUL SYLLABLE IEUNG YEO RIEULPHIEUPH + {0x9E8D, 0xC5FB}, //5227 #HANGUL SYLLABLE IEUNG YEO RIEULHIEUH + {0x9E8E, 0xC602}, //5228 #HANGUL SYLLABLE IEUNG YEO CIEUC + {0x9E8F, 0xC603}, //5229 #HANGUL SYLLABLE IEUNG YEO CHIEUCH + {0x9E90, 0xC604}, //5230 #HANGUL SYLLABLE IEUNG YEO KHIEUKH + {0x9E91, 0xC609}, //5231 #HANGUL SYLLABLE IEUNG YE KIYEOK + {0x9E92, 0xC60A}, //5232 #HANGUL SYLLABLE IEUNG YE SSANGKIYEOK + {0x9E93, 0xC60B}, //5233 #HANGUL SYLLABLE IEUNG YE KIYEOKSIOS + {0x9E94, 0xC60D}, //5234 #HANGUL SYLLABLE IEUNG YE NIEUNCIEUC + {0x9E95, 0xC60E}, //5235 #HANGUL SYLLABLE IEUNG YE NIEUNHIEUH + {0x9E96, 0xC60F}, //5236 #HANGUL SYLLABLE IEUNG YE TIKEUT + {0x9E97, 0xC611}, //5237 #HANGUL SYLLABLE IEUNG YE RIEULKIYEOK + {0x9E98, 0xC612}, //5238 #HANGUL SYLLABLE IEUNG YE RIEULMIEUM + {0x9E99, 0xC613}, //5239 #HANGUL SYLLABLE IEUNG YE RIEULPIEUP + {0x9E9A, 0xC614}, //5240 #HANGUL SYLLABLE IEUNG YE RIEULSIOS + {0x9E9B, 0xC615}, //5241 #HANGUL SYLLABLE IEUNG YE RIEULTHIEUTH + {0x9E9C, 0xC616}, //5242 #HANGUL SYLLABLE IEUNG YE RIEULPHIEUPH + {0x9E9D, 0xC617}, //5243 #HANGUL SYLLABLE IEUNG YE RIEULHIEUH + {0x9E9E, 0xC61A}, //5244 #HANGUL SYLLABLE IEUNG YE PIEUPSIOS + {0x9E9F, 0xC61D}, //5245 #HANGUL SYLLABLE IEUNG YE IEUNG + {0x9EA0, 0xC61E}, //5246 #HANGUL SYLLABLE IEUNG YE CIEUC + {0x9EA1, 0xC61F}, //5247 #HANGUL SYLLABLE IEUNG YE CHIEUCH + {0x9EA2, 0xC620}, //5248 #HANGUL SYLLABLE IEUNG YE KHIEUKH + {0x9EA3, 0xC621}, //5249 #HANGUL SYLLABLE IEUNG YE THIEUTH + {0x9EA4, 0xC622}, //5250 #HANGUL SYLLABLE IEUNG YE PHIEUPH + {0x9EA5, 0xC623}, //5251 #HANGUL SYLLABLE IEUNG YE HIEUH + {0x9EA6, 0xC626}, //5252 #HANGUL SYLLABLE IEUNG O SSANGKIYEOK + {0x9EA7, 0xC627}, //5253 #HANGUL SYLLABLE IEUNG O KIYEOKSIOS + {0x9EA8, 0xC629}, //5254 #HANGUL SYLLABLE IEUNG O NIEUNCIEUC + {0x9EA9, 0xC62A}, //5255 #HANGUL SYLLABLE IEUNG O NIEUNHIEUH + {0x9EAA, 0xC62B}, //5256 #HANGUL SYLLABLE IEUNG O TIKEUT + {0x9EAB, 0xC62F}, //5257 #HANGUL SYLLABLE IEUNG O RIEULPIEUP + {0x9EAC, 0xC631}, //5258 #HANGUL SYLLABLE IEUNG O RIEULTHIEUTH + {0x9EAD, 0xC632}, //5259 #HANGUL SYLLABLE IEUNG O RIEULPHIEUPH + {0x9EAE, 0xC636}, //5260 #HANGUL SYLLABLE IEUNG O PIEUPSIOS + {0x9EAF, 0xC638}, //5261 #HANGUL SYLLABLE IEUNG O SSANGSIOS + {0x9EB0, 0xC63A}, //5262 #HANGUL SYLLABLE IEUNG O CIEUC + {0x9EB1, 0xC63C}, //5263 #HANGUL SYLLABLE IEUNG O KHIEUKH + {0x9EB2, 0xC63D}, //5264 #HANGUL SYLLABLE IEUNG O THIEUTH + {0x9EB3, 0xC63E}, //5265 #HANGUL SYLLABLE IEUNG O PHIEUPH + {0x9EB4, 0xC63F}, //5266 #HANGUL SYLLABLE IEUNG O HIEUH + {0x9EB5, 0xC642}, //5267 #HANGUL SYLLABLE IEUNG WA SSANGKIYEOK + {0x9EB6, 0xC643}, //5268 #HANGUL SYLLABLE IEUNG WA KIYEOKSIOS + {0x9EB7, 0xC645}, //5269 #HANGUL SYLLABLE IEUNG WA NIEUNCIEUC + {0x9EB8, 0xC646}, //5270 #HANGUL SYLLABLE IEUNG WA NIEUNHIEUH + {0x9EB9, 0xC647}, //5271 #HANGUL SYLLABLE IEUNG WA TIKEUT + {0x9EBA, 0xC649}, //5272 #HANGUL SYLLABLE IEUNG WA RIEULKIYEOK + {0x9EBB, 0xC64A}, //5273 #HANGUL SYLLABLE IEUNG WA RIEULMIEUM + {0x9EBC, 0xC64B}, //5274 #HANGUL SYLLABLE IEUNG WA RIEULPIEUP + {0x9EBD, 0xC64C}, //5275 #HANGUL SYLLABLE IEUNG WA RIEULSIOS + {0x9EBE, 0xC64D}, //5276 #HANGUL SYLLABLE IEUNG WA RIEULTHIEUTH + {0x9EBF, 0xC64E}, //5277 #HANGUL SYLLABLE IEUNG WA RIEULPHIEUPH + {0x9EC0, 0xC64F}, //5278 #HANGUL SYLLABLE IEUNG WA RIEULHIEUH + {0x9EC1, 0xC652}, //5279 #HANGUL SYLLABLE IEUNG WA PIEUPSIOS + {0x9EC2, 0xC656}, //5280 #HANGUL SYLLABLE IEUNG WA CIEUC + {0x9EC3, 0xC657}, //5281 #HANGUL SYLLABLE IEUNG WA CHIEUCH + {0x9EC4, 0xC658}, //5282 #HANGUL SYLLABLE IEUNG WA KHIEUKH + {0x9EC5, 0xC659}, //5283 #HANGUL SYLLABLE IEUNG WA THIEUTH + {0x9EC6, 0xC65A}, //5284 #HANGUL SYLLABLE IEUNG WA PHIEUPH + {0x9EC7, 0xC65B}, //5285 #HANGUL SYLLABLE IEUNG WA HIEUH + {0x9EC8, 0xC65E}, //5286 #HANGUL SYLLABLE IEUNG WAE SSANGKIYEOK + {0x9EC9, 0xC65F}, //5287 #HANGUL SYLLABLE IEUNG WAE KIYEOKSIOS + {0x9ECA, 0xC661}, //5288 #HANGUL SYLLABLE IEUNG WAE NIEUNCIEUC + {0x9ECB, 0xC662}, //5289 #HANGUL SYLLABLE IEUNG WAE NIEUNHIEUH + {0x9ECC, 0xC663}, //5290 #HANGUL SYLLABLE IEUNG WAE TIKEUT + {0x9ECD, 0xC664}, //5291 #HANGUL SYLLABLE IEUNG WAE RIEUL + {0x9ECE, 0xC665}, //5292 #HANGUL SYLLABLE IEUNG WAE RIEULKIYEOK + {0x9ECF, 0xC666}, //5293 #HANGUL SYLLABLE IEUNG WAE RIEULMIEUM + {0x9ED0, 0xC667}, //5294 #HANGUL SYLLABLE IEUNG WAE RIEULPIEUP + {0x9ED1, 0xC668}, //5295 #HANGUL SYLLABLE IEUNG WAE RIEULSIOS + {0x9ED2, 0xC669}, //5296 #HANGUL SYLLABLE IEUNG WAE RIEULTHIEUTH + {0x9ED3, 0xC66A}, //5297 #HANGUL SYLLABLE IEUNG WAE RIEULPHIEUPH + {0x9ED4, 0xC66B}, //5298 #HANGUL SYLLABLE IEUNG WAE RIEULHIEUH + {0x9ED5, 0xC66D}, //5299 #HANGUL SYLLABLE IEUNG WAE PIEUP + {0x9ED6, 0xC66E}, //5300 #HANGUL SYLLABLE IEUNG WAE PIEUPSIOS + {0x9ED7, 0xC670}, //5301 #HANGUL SYLLABLE IEUNG WAE SSANGSIOS + {0x9ED8, 0xC672}, //5302 #HANGUL SYLLABLE IEUNG WAE CIEUC + {0x9ED9, 0xC673}, //5303 #HANGUL SYLLABLE IEUNG WAE CHIEUCH + {0x9EDA, 0xC674}, //5304 #HANGUL SYLLABLE IEUNG WAE KHIEUKH + {0x9EDB, 0xC675}, //5305 #HANGUL SYLLABLE IEUNG WAE THIEUTH + {0x9EDC, 0xC676}, //5306 #HANGUL SYLLABLE IEUNG WAE PHIEUPH + {0x9EDD, 0xC677}, //5307 #HANGUL SYLLABLE IEUNG WAE HIEUH + {0x9EDE, 0xC67A}, //5308 #HANGUL SYLLABLE IEUNG OE SSANGKIYEOK + {0x9EDF, 0xC67B}, //5309 #HANGUL SYLLABLE IEUNG OE KIYEOKSIOS + {0x9EE0, 0xC67D}, //5310 #HANGUL SYLLABLE IEUNG OE NIEUNCIEUC + {0x9EE1, 0xC67E}, //5311 #HANGUL SYLLABLE IEUNG OE NIEUNHIEUH + {0x9EE2, 0xC67F}, //5312 #HANGUL SYLLABLE IEUNG OE TIKEUT + {0x9EE3, 0xC681}, //5313 #HANGUL SYLLABLE IEUNG OE RIEULKIYEOK + {0x9EE4, 0xC682}, //5314 #HANGUL SYLLABLE IEUNG OE RIEULMIEUM + {0x9EE5, 0xC683}, //5315 #HANGUL SYLLABLE IEUNG OE RIEULPIEUP + {0x9EE6, 0xC684}, //5316 #HANGUL SYLLABLE IEUNG OE RIEULSIOS + {0x9EE7, 0xC685}, //5317 #HANGUL SYLLABLE IEUNG OE RIEULTHIEUTH + {0x9EE8, 0xC686}, //5318 #HANGUL SYLLABLE IEUNG OE RIEULPHIEUPH + {0x9EE9, 0xC687}, //5319 #HANGUL SYLLABLE IEUNG OE RIEULHIEUH + {0x9EEA, 0xC68A}, //5320 #HANGUL SYLLABLE IEUNG OE PIEUPSIOS + {0x9EEB, 0xC68C}, //5321 #HANGUL SYLLABLE IEUNG OE SSANGSIOS + {0x9EEC, 0xC68E}, //5322 #HANGUL SYLLABLE IEUNG OE CIEUC + {0x9EED, 0xC68F}, //5323 #HANGUL SYLLABLE IEUNG OE CHIEUCH + {0x9EEE, 0xC690}, //5324 #HANGUL SYLLABLE IEUNG OE KHIEUKH + {0x9EEF, 0xC691}, //5325 #HANGUL SYLLABLE IEUNG OE THIEUTH + {0x9EF0, 0xC692}, //5326 #HANGUL SYLLABLE IEUNG OE PHIEUPH + {0x9EF1, 0xC693}, //5327 #HANGUL SYLLABLE IEUNG OE HIEUH + {0x9EF2, 0xC696}, //5328 #HANGUL SYLLABLE IEUNG YO SSANGKIYEOK + {0x9EF3, 0xC697}, //5329 #HANGUL SYLLABLE IEUNG YO KIYEOKSIOS + {0x9EF4, 0xC699}, //5330 #HANGUL SYLLABLE IEUNG YO NIEUNCIEUC + {0x9EF5, 0xC69A}, //5331 #HANGUL SYLLABLE IEUNG YO NIEUNHIEUH + {0x9EF6, 0xC69B}, //5332 #HANGUL SYLLABLE IEUNG YO TIKEUT + {0x9EF7, 0xC69D}, //5333 #HANGUL SYLLABLE IEUNG YO RIEULKIYEOK + {0x9EF8, 0xC69E}, //5334 #HANGUL SYLLABLE IEUNG YO RIEULMIEUM + {0x9EF9, 0xC69F}, //5335 #HANGUL SYLLABLE IEUNG YO RIEULPIEUP + {0x9EFA, 0xC6A0}, //5336 #HANGUL SYLLABLE IEUNG YO RIEULSIOS + {0x9EFB, 0xC6A1}, //5337 #HANGUL SYLLABLE IEUNG YO RIEULTHIEUTH + {0x9EFC, 0xC6A2}, //5338 #HANGUL SYLLABLE IEUNG YO RIEULPHIEUPH + {0x9EFD, 0xC6A3}, //5339 #HANGUL SYLLABLE IEUNG YO RIEULHIEUH + {0x9EFE, 0xC6A6}, //5340 #HANGUL SYLLABLE IEUNG YO PIEUPSIOS + {0x9F41, 0xC6A8}, //5341 #HANGUL SYLLABLE IEUNG YO SSANGSIOS + {0x9F42, 0xC6AA}, //5342 #HANGUL SYLLABLE IEUNG YO CIEUC + {0x9F43, 0xC6AB}, //5343 #HANGUL SYLLABLE IEUNG YO CHIEUCH + {0x9F44, 0xC6AC}, //5344 #HANGUL SYLLABLE IEUNG YO KHIEUKH + {0x9F45, 0xC6AD}, //5345 #HANGUL SYLLABLE IEUNG YO THIEUTH + {0x9F46, 0xC6AE}, //5346 #HANGUL SYLLABLE IEUNG YO PHIEUPH + {0x9F47, 0xC6AF}, //5347 #HANGUL SYLLABLE IEUNG YO HIEUH + {0x9F48, 0xC6B2}, //5348 #HANGUL SYLLABLE IEUNG U SSANGKIYEOK + {0x9F49, 0xC6B3}, //5349 #HANGUL SYLLABLE IEUNG U KIYEOKSIOS + {0x9F4A, 0xC6B5}, //5350 #HANGUL SYLLABLE IEUNG U NIEUNCIEUC + {0x9F4B, 0xC6B6}, //5351 #HANGUL SYLLABLE IEUNG U NIEUNHIEUH + {0x9F4C, 0xC6B7}, //5352 #HANGUL SYLLABLE IEUNG U TIKEUT + {0x9F4D, 0xC6BB}, //5353 #HANGUL SYLLABLE IEUNG U RIEULPIEUP + {0x9F4E, 0xC6BC}, //5354 #HANGUL SYLLABLE IEUNG U RIEULSIOS + {0x9F4F, 0xC6BD}, //5355 #HANGUL SYLLABLE IEUNG U RIEULTHIEUTH + {0x9F50, 0xC6BE}, //5356 #HANGUL SYLLABLE IEUNG U RIEULPHIEUPH + {0x9F51, 0xC6BF}, //5357 #HANGUL SYLLABLE IEUNG U RIEULHIEUH + {0x9F52, 0xC6C2}, //5358 #HANGUL SYLLABLE IEUNG U PIEUPSIOS + {0x9F53, 0xC6C4}, //5359 #HANGUL SYLLABLE IEUNG U SSANGSIOS + {0x9F54, 0xC6C6}, //5360 #HANGUL SYLLABLE IEUNG U CIEUC + {0x9F55, 0xC6C7}, //5361 #HANGUL SYLLABLE IEUNG U CHIEUCH + {0x9F56, 0xC6C8}, //5362 #HANGUL SYLLABLE IEUNG U KHIEUKH + {0x9F57, 0xC6C9}, //5363 #HANGUL SYLLABLE IEUNG U THIEUTH + {0x9F58, 0xC6CA}, //5364 #HANGUL SYLLABLE IEUNG U PHIEUPH + {0x9F59, 0xC6CB}, //5365 #HANGUL SYLLABLE IEUNG U HIEUH + {0x9F5A, 0xC6CE}, //5366 #HANGUL SYLLABLE IEUNG WEO SSANGKIYEOK + {0x9F61, 0xC6CF}, //5367 #HANGUL SYLLABLE IEUNG WEO KIYEOKSIOS + {0x9F62, 0xC6D1}, //5368 #HANGUL SYLLABLE IEUNG WEO NIEUNCIEUC + {0x9F63, 0xC6D2}, //5369 #HANGUL SYLLABLE IEUNG WEO NIEUNHIEUH + {0x9F64, 0xC6D3}, //5370 #HANGUL SYLLABLE IEUNG WEO TIKEUT + {0x9F65, 0xC6D5}, //5371 #HANGUL SYLLABLE IEUNG WEO RIEULKIYEOK + {0x9F66, 0xC6D6}, //5372 #HANGUL SYLLABLE IEUNG WEO RIEULMIEUM + {0x9F67, 0xC6D7}, //5373 #HANGUL SYLLABLE IEUNG WEO RIEULPIEUP + {0x9F68, 0xC6D8}, //5374 #HANGUL SYLLABLE IEUNG WEO RIEULSIOS + {0x9F69, 0xC6D9}, //5375 #HANGUL SYLLABLE IEUNG WEO RIEULTHIEUTH + {0x9F6A, 0xC6DA}, //5376 #HANGUL SYLLABLE IEUNG WEO RIEULPHIEUPH + {0x9F6B, 0xC6DB}, //5377 #HANGUL SYLLABLE IEUNG WEO RIEULHIEUH + {0x9F6C, 0xC6DE}, //5378 #HANGUL SYLLABLE IEUNG WEO PIEUPSIOS + {0x9F6D, 0xC6DF}, //5379 #HANGUL SYLLABLE IEUNG WEO SIOS + {0x9F6E, 0xC6E2}, //5380 #HANGUL SYLLABLE IEUNG WEO CIEUC + {0x9F6F, 0xC6E3}, //5381 #HANGUL SYLLABLE IEUNG WEO CHIEUCH + {0x9F70, 0xC6E4}, //5382 #HANGUL SYLLABLE IEUNG WEO KHIEUKH + {0x9F71, 0xC6E5}, //5383 #HANGUL SYLLABLE IEUNG WEO THIEUTH + {0x9F72, 0xC6E6}, //5384 #HANGUL SYLLABLE IEUNG WEO PHIEUPH + {0x9F73, 0xC6E7}, //5385 #HANGUL SYLLABLE IEUNG WEO HIEUH + {0x9F74, 0xC6EA}, //5386 #HANGUL SYLLABLE IEUNG WE SSANGKIYEOK + {0x9F75, 0xC6EB}, //5387 #HANGUL SYLLABLE IEUNG WE KIYEOKSIOS + {0x9F76, 0xC6ED}, //5388 #HANGUL SYLLABLE IEUNG WE NIEUNCIEUC + {0x9F77, 0xC6EE}, //5389 #HANGUL SYLLABLE IEUNG WE NIEUNHIEUH + {0x9F78, 0xC6EF}, //5390 #HANGUL SYLLABLE IEUNG WE TIKEUT + {0x9F79, 0xC6F1}, //5391 #HANGUL SYLLABLE IEUNG WE RIEULKIYEOK + {0x9F7A, 0xC6F2}, //5392 #HANGUL SYLLABLE IEUNG WE RIEULMIEUM + {0x9F81, 0xC6F3}, //5393 #HANGUL SYLLABLE IEUNG WE RIEULPIEUP + {0x9F82, 0xC6F4}, //5394 #HANGUL SYLLABLE IEUNG WE RIEULSIOS + {0x9F83, 0xC6F5}, //5395 #HANGUL SYLLABLE IEUNG WE RIEULTHIEUTH + {0x9F84, 0xC6F6}, //5396 #HANGUL SYLLABLE IEUNG WE RIEULPHIEUPH + {0x9F85, 0xC6F7}, //5397 #HANGUL SYLLABLE IEUNG WE RIEULHIEUH + {0x9F86, 0xC6FA}, //5398 #HANGUL SYLLABLE IEUNG WE PIEUPSIOS + {0x9F87, 0xC6FB}, //5399 #HANGUL SYLLABLE IEUNG WE SIOS + {0x9F88, 0xC6FC}, //5400 #HANGUL SYLLABLE IEUNG WE SSANGSIOS + {0x9F89, 0xC6FE}, //5401 #HANGUL SYLLABLE IEUNG WE CIEUC + {0x9F8A, 0xC6FF}, //5402 #HANGUL SYLLABLE IEUNG WE CHIEUCH + {0x9F8B, 0xC700}, //5403 #HANGUL SYLLABLE IEUNG WE KHIEUKH + {0x9F8C, 0xC701}, //5404 #HANGUL SYLLABLE IEUNG WE THIEUTH + {0x9F8D, 0xC702}, //5405 #HANGUL SYLLABLE IEUNG WE PHIEUPH + {0x9F8E, 0xC703}, //5406 #HANGUL SYLLABLE IEUNG WE HIEUH + {0x9F8F, 0xC706}, //5407 #HANGUL SYLLABLE IEUNG WI SSANGKIYEOK + {0x9F90, 0xC707}, //5408 #HANGUL SYLLABLE IEUNG WI KIYEOKSIOS + {0x9F91, 0xC709}, //5409 #HANGUL SYLLABLE IEUNG WI NIEUNCIEUC + {0x9F92, 0xC70A}, //5410 #HANGUL SYLLABLE IEUNG WI NIEUNHIEUH + {0x9F93, 0xC70B}, //5411 #HANGUL SYLLABLE IEUNG WI TIKEUT + {0x9F94, 0xC70D}, //5412 #HANGUL SYLLABLE IEUNG WI RIEULKIYEOK + {0x9F95, 0xC70E}, //5413 #HANGUL SYLLABLE IEUNG WI RIEULMIEUM + {0x9F96, 0xC70F}, //5414 #HANGUL SYLLABLE IEUNG WI RIEULPIEUP + {0x9F97, 0xC710}, //5415 #HANGUL SYLLABLE IEUNG WI RIEULSIOS + {0x9F98, 0xC711}, //5416 #HANGUL SYLLABLE IEUNG WI RIEULTHIEUTH + {0x9F99, 0xC712}, //5417 #HANGUL SYLLABLE IEUNG WI RIEULPHIEUPH + {0x9F9A, 0xC713}, //5418 #HANGUL SYLLABLE IEUNG WI RIEULHIEUH + {0x9F9B, 0xC716}, //5419 #HANGUL SYLLABLE IEUNG WI PIEUPSIOS + {0x9F9C, 0xC718}, //5420 #HANGUL SYLLABLE IEUNG WI SSANGSIOS + {0x9F9D, 0xC71A}, //5421 #HANGUL SYLLABLE IEUNG WI CIEUC + {0x9F9E, 0xC71B}, //5422 #HANGUL SYLLABLE IEUNG WI CHIEUCH + {0x9F9F, 0xC71C}, //5423 #HANGUL SYLLABLE IEUNG WI KHIEUKH + {0x9FA0, 0xC71D}, //5424 #HANGUL SYLLABLE IEUNG WI THIEUTH + {0x9FA1, 0xC71E}, //5425 #HANGUL SYLLABLE IEUNG WI PHIEUPH + {0x9FA2, 0xC71F}, //5426 #HANGUL SYLLABLE IEUNG WI HIEUH + {0x9FA3, 0xC722}, //5427 #HANGUL SYLLABLE IEUNG YU SSANGKIYEOK + {0x9FA4, 0xC723}, //5428 #HANGUL SYLLABLE IEUNG YU KIYEOKSIOS + {0x9FA5, 0xC725}, //5429 #HANGUL SYLLABLE IEUNG YU NIEUNCIEUC + {0x9FA6, 0xC726}, //5430 #HANGUL SYLLABLE IEUNG YU NIEUNHIEUH + {0x9FA7, 0xC727}, //5431 #HANGUL SYLLABLE IEUNG YU TIKEUT + {0x9FA8, 0xC729}, //5432 #HANGUL SYLLABLE IEUNG YU RIEULKIYEOK + {0x9FA9, 0xC72A}, //5433 #HANGUL SYLLABLE IEUNG YU RIEULMIEUM + {0x9FAA, 0xC72B}, //5434 #HANGUL SYLLABLE IEUNG YU RIEULPIEUP + {0x9FAB, 0xC72C}, //5435 #HANGUL SYLLABLE IEUNG YU RIEULSIOS + {0x9FAC, 0xC72D}, //5436 #HANGUL SYLLABLE IEUNG YU RIEULTHIEUTH + {0x9FAD, 0xC72E}, //5437 #HANGUL SYLLABLE IEUNG YU RIEULPHIEUPH + {0x9FAE, 0xC72F}, //5438 #HANGUL SYLLABLE IEUNG YU RIEULHIEUH + {0x9FAF, 0xC732}, //5439 #HANGUL SYLLABLE IEUNG YU PIEUPSIOS + {0x9FB0, 0xC734}, //5440 #HANGUL SYLLABLE IEUNG YU SSANGSIOS + {0x9FB1, 0xC736}, //5441 #HANGUL SYLLABLE IEUNG YU CIEUC + {0x9FB2, 0xC738}, //5442 #HANGUL SYLLABLE IEUNG YU KHIEUKH + {0x9FB3, 0xC739}, //5443 #HANGUL SYLLABLE IEUNG YU THIEUTH + {0x9FB4, 0xC73A}, //5444 #HANGUL SYLLABLE IEUNG YU PHIEUPH + {0x9FB5, 0xC73B}, //5445 #HANGUL SYLLABLE IEUNG YU HIEUH + {0x9FB6, 0xC73E}, //5446 #HANGUL SYLLABLE IEUNG EU SSANGKIYEOK + {0x9FB7, 0xC73F}, //5447 #HANGUL SYLLABLE IEUNG EU KIYEOKSIOS + {0x9FB8, 0xC741}, //5448 #HANGUL SYLLABLE IEUNG EU NIEUNCIEUC + {0x9FB9, 0xC742}, //5449 #HANGUL SYLLABLE IEUNG EU NIEUNHIEUH + {0x9FBA, 0xC743}, //5450 #HANGUL SYLLABLE IEUNG EU TIKEUT + {0x9FBB, 0xC745}, //5451 #HANGUL SYLLABLE IEUNG EU RIEULKIYEOK + {0x9FBC, 0xC746}, //5452 #HANGUL SYLLABLE IEUNG EU RIEULMIEUM + {0x9FBD, 0xC747}, //5453 #HANGUL SYLLABLE IEUNG EU RIEULPIEUP + {0x9FBE, 0xC748}, //5454 #HANGUL SYLLABLE IEUNG EU RIEULSIOS + {0x9FBF, 0xC749}, //5455 #HANGUL SYLLABLE IEUNG EU RIEULTHIEUTH + {0x9FC0, 0xC74B}, //5456 #HANGUL SYLLABLE IEUNG EU RIEULHIEUH + {0x9FC1, 0xC74E}, //5457 #HANGUL SYLLABLE IEUNG EU PIEUPSIOS + {0x9FC2, 0xC750}, //5458 #HANGUL SYLLABLE IEUNG EU SSANGSIOS + {0x9FC3, 0xC759}, //5459 #HANGUL SYLLABLE IEUNG YI KIYEOK + {0x9FC4, 0xC75A}, //5460 #HANGUL SYLLABLE IEUNG YI SSANGKIYEOK + {0x9FC5, 0xC75B}, //5461 #HANGUL SYLLABLE IEUNG YI KIYEOKSIOS + {0x9FC6, 0xC75D}, //5462 #HANGUL SYLLABLE IEUNG YI NIEUNCIEUC + {0x9FC7, 0xC75E}, //5463 #HANGUL SYLLABLE IEUNG YI NIEUNHIEUH + {0x9FC8, 0xC75F}, //5464 #HANGUL SYLLABLE IEUNG YI TIKEUT + {0x9FC9, 0xC761}, //5465 #HANGUL SYLLABLE IEUNG YI RIEULKIYEOK + {0x9FCA, 0xC762}, //5466 #HANGUL SYLLABLE IEUNG YI RIEULMIEUM + {0x9FCB, 0xC763}, //5467 #HANGUL SYLLABLE IEUNG YI RIEULPIEUP + {0x9FCC, 0xC764}, //5468 #HANGUL SYLLABLE IEUNG YI RIEULSIOS + {0x9FCD, 0xC765}, //5469 #HANGUL SYLLABLE IEUNG YI RIEULTHIEUTH + {0x9FCE, 0xC766}, //5470 #HANGUL SYLLABLE IEUNG YI RIEULPHIEUPH + {0x9FCF, 0xC767}, //5471 #HANGUL SYLLABLE IEUNG YI RIEULHIEUH + {0x9FD0, 0xC769}, //5472 #HANGUL SYLLABLE IEUNG YI PIEUP + {0x9FD1, 0xC76A}, //5473 #HANGUL SYLLABLE IEUNG YI PIEUPSIOS + {0x9FD2, 0xC76C}, //5474 #HANGUL SYLLABLE IEUNG YI SSANGSIOS + {0x9FD3, 0xC76D}, //5475 #HANGUL SYLLABLE IEUNG YI IEUNG + {0x9FD4, 0xC76E}, //5476 #HANGUL SYLLABLE IEUNG YI CIEUC + {0x9FD5, 0xC76F}, //5477 #HANGUL SYLLABLE IEUNG YI CHIEUCH + {0x9FD6, 0xC770}, //5478 #HANGUL SYLLABLE IEUNG YI KHIEUKH + {0x9FD7, 0xC771}, //5479 #HANGUL SYLLABLE IEUNG YI THIEUTH + {0x9FD8, 0xC772}, //5480 #HANGUL SYLLABLE IEUNG YI PHIEUPH + {0x9FD9, 0xC773}, //5481 #HANGUL SYLLABLE IEUNG YI HIEUH + {0x9FDA, 0xC776}, //5482 #HANGUL SYLLABLE IEUNG I SSANGKIYEOK + {0x9FDB, 0xC777}, //5483 #HANGUL SYLLABLE IEUNG I KIYEOKSIOS + {0x9FDC, 0xC779}, //5484 #HANGUL SYLLABLE IEUNG I NIEUNCIEUC + {0x9FDD, 0xC77A}, //5485 #HANGUL SYLLABLE IEUNG I NIEUNHIEUH + {0x9FDE, 0xC77B}, //5486 #HANGUL SYLLABLE IEUNG I TIKEUT + {0x9FDF, 0xC77F}, //5487 #HANGUL SYLLABLE IEUNG I RIEULPIEUP + {0x9FE0, 0xC780}, //5488 #HANGUL SYLLABLE IEUNG I RIEULSIOS + {0x9FE1, 0xC781}, //5489 #HANGUL SYLLABLE IEUNG I RIEULTHIEUTH + {0x9FE2, 0xC782}, //5490 #HANGUL SYLLABLE IEUNG I RIEULPHIEUPH + {0x9FE3, 0xC786}, //5491 #HANGUL SYLLABLE IEUNG I PIEUPSIOS + {0x9FE4, 0xC78B}, //5492 #HANGUL SYLLABLE IEUNG I CHIEUCH + {0x9FE5, 0xC78C}, //5493 #HANGUL SYLLABLE IEUNG I KHIEUKH + {0x9FE6, 0xC78D}, //5494 #HANGUL SYLLABLE IEUNG I THIEUTH + {0x9FE7, 0xC78F}, //5495 #HANGUL SYLLABLE IEUNG I HIEUH + {0x9FE8, 0xC792}, //5496 #HANGUL SYLLABLE CIEUC A SSANGKIYEOK + {0x9FE9, 0xC793}, //5497 #HANGUL SYLLABLE CIEUC A KIYEOKSIOS + {0x9FEA, 0xC795}, //5498 #HANGUL SYLLABLE CIEUC A NIEUNCIEUC + {0x9FEB, 0xC799}, //5499 #HANGUL SYLLABLE CIEUC A RIEULKIYEOK + {0x9FEC, 0xC79B}, //5500 #HANGUL SYLLABLE CIEUC A RIEULPIEUP + {0x9FED, 0xC79C}, //5501 #HANGUL SYLLABLE CIEUC A RIEULSIOS + {0x9FEE, 0xC79D}, //5502 #HANGUL SYLLABLE CIEUC A RIEULTHIEUTH + {0x9FEF, 0xC79E}, //5503 #HANGUL SYLLABLE CIEUC A RIEULPHIEUPH + {0x9FF0, 0xC79F}, //5504 #HANGUL SYLLABLE CIEUC A RIEULHIEUH + {0x9FF1, 0xC7A2}, //5505 #HANGUL SYLLABLE CIEUC A PIEUPSIOS + {0x9FF2, 0xC7A7}, //5506 #HANGUL SYLLABLE CIEUC A CHIEUCH + {0x9FF3, 0xC7A8}, //5507 #HANGUL SYLLABLE CIEUC A KHIEUKH + {0x9FF4, 0xC7A9}, //5508 #HANGUL SYLLABLE CIEUC A THIEUTH + {0x9FF5, 0xC7AA}, //5509 #HANGUL SYLLABLE CIEUC A PHIEUPH + {0x9FF6, 0xC7AB}, //5510 #HANGUL SYLLABLE CIEUC A HIEUH + {0x9FF7, 0xC7AE}, //5511 #HANGUL SYLLABLE CIEUC AE SSANGKIYEOK + {0x9FF8, 0xC7AF}, //5512 #HANGUL SYLLABLE CIEUC AE KIYEOKSIOS + {0x9FF9, 0xC7B1}, //5513 #HANGUL SYLLABLE CIEUC AE NIEUNCIEUC + {0x9FFA, 0xC7B2}, //5514 #HANGUL SYLLABLE CIEUC AE NIEUNHIEUH + {0x9FFB, 0xC7B3}, //5515 #HANGUL SYLLABLE CIEUC AE TIKEUT + {0x9FFC, 0xC7B5}, //5516 #HANGUL SYLLABLE CIEUC AE RIEULKIYEOK + {0x9FFD, 0xC7B6}, //5517 #HANGUL SYLLABLE CIEUC AE RIEULMIEUM + {0x9FFE, 0xC7B7}, //5518 #HANGUL SYLLABLE CIEUC AE RIEULPIEUP + {0xA041, 0xC7B8}, //5519 #HANGUL SYLLABLE CIEUC AE RIEULSIOS + {0xA042, 0xC7B9}, //5520 #HANGUL SYLLABLE CIEUC AE RIEULTHIEUTH + {0xA043, 0xC7BA}, //5521 #HANGUL SYLLABLE CIEUC AE RIEULPHIEUPH + {0xA044, 0xC7BB}, //5522 #HANGUL SYLLABLE CIEUC AE RIEULHIEUH + {0xA045, 0xC7BE}, //5523 #HANGUL SYLLABLE CIEUC AE PIEUPSIOS + {0xA046, 0xC7C2}, //5524 #HANGUL SYLLABLE CIEUC AE CIEUC + {0xA047, 0xC7C3}, //5525 #HANGUL SYLLABLE CIEUC AE CHIEUCH + {0xA048, 0xC7C4}, //5526 #HANGUL SYLLABLE CIEUC AE KHIEUKH + {0xA049, 0xC7C5}, //5527 #HANGUL SYLLABLE CIEUC AE THIEUTH + {0xA04A, 0xC7C6}, //5528 #HANGUL SYLLABLE CIEUC AE PHIEUPH + {0xA04B, 0xC7C7}, //5529 #HANGUL SYLLABLE CIEUC AE HIEUH + {0xA04C, 0xC7CA}, //5530 #HANGUL SYLLABLE CIEUC YA SSANGKIYEOK + {0xA04D, 0xC7CB}, //5531 #HANGUL SYLLABLE CIEUC YA KIYEOKSIOS + {0xA04E, 0xC7CD}, //5532 #HANGUL SYLLABLE CIEUC YA NIEUNCIEUC + {0xA04F, 0xC7CF}, //5533 #HANGUL SYLLABLE CIEUC YA TIKEUT + {0xA050, 0xC7D1}, //5534 #HANGUL SYLLABLE CIEUC YA RIEULKIYEOK + {0xA051, 0xC7D2}, //5535 #HANGUL SYLLABLE CIEUC YA RIEULMIEUM + {0xA052, 0xC7D3}, //5536 #HANGUL SYLLABLE CIEUC YA RIEULPIEUP + {0xA053, 0xC7D4}, //5537 #HANGUL SYLLABLE CIEUC YA RIEULSIOS + {0xA054, 0xC7D5}, //5538 #HANGUL SYLLABLE CIEUC YA RIEULTHIEUTH + {0xA055, 0xC7D6}, //5539 #HANGUL SYLLABLE CIEUC YA RIEULPHIEUPH + {0xA056, 0xC7D7}, //5540 #HANGUL SYLLABLE CIEUC YA RIEULHIEUH + {0xA057, 0xC7D9}, //5541 #HANGUL SYLLABLE CIEUC YA PIEUP + {0xA058, 0xC7DA}, //5542 #HANGUL SYLLABLE CIEUC YA PIEUPSIOS + {0xA059, 0xC7DB}, //5543 #HANGUL SYLLABLE CIEUC YA SIOS + {0xA05A, 0xC7DC}, //5544 #HANGUL SYLLABLE CIEUC YA SSANGSIOS + {0xA061, 0xC7DE}, //5545 #HANGUL SYLLABLE CIEUC YA CIEUC + {0xA062, 0xC7DF}, //5546 #HANGUL SYLLABLE CIEUC YA CHIEUCH + {0xA063, 0xC7E0}, //5547 #HANGUL SYLLABLE CIEUC YA KHIEUKH + {0xA064, 0xC7E1}, //5548 #HANGUL SYLLABLE CIEUC YA THIEUTH + {0xA065, 0xC7E2}, //5549 #HANGUL SYLLABLE CIEUC YA PHIEUPH + {0xA066, 0xC7E3}, //5550 #HANGUL SYLLABLE CIEUC YA HIEUH + {0xA067, 0xC7E5}, //5551 #HANGUL SYLLABLE CIEUC YAE KIYEOK + {0xA068, 0xC7E6}, //5552 #HANGUL SYLLABLE CIEUC YAE SSANGKIYEOK + {0xA069, 0xC7E7}, //5553 #HANGUL SYLLABLE CIEUC YAE KIYEOKSIOS + {0xA06A, 0xC7E9}, //5554 #HANGUL SYLLABLE CIEUC YAE NIEUNCIEUC + {0xA06B, 0xC7EA}, //5555 #HANGUL SYLLABLE CIEUC YAE NIEUNHIEUH + {0xA06C, 0xC7EB}, //5556 #HANGUL SYLLABLE CIEUC YAE TIKEUT + {0xA06D, 0xC7ED}, //5557 #HANGUL SYLLABLE CIEUC YAE RIEULKIYEOK + {0xA06E, 0xC7EE}, //5558 #HANGUL SYLLABLE CIEUC YAE RIEULMIEUM + {0xA06F, 0xC7EF}, //5559 #HANGUL SYLLABLE CIEUC YAE RIEULPIEUP + {0xA070, 0xC7F0}, //5560 #HANGUL SYLLABLE CIEUC YAE RIEULSIOS + {0xA071, 0xC7F1}, //5561 #HANGUL SYLLABLE CIEUC YAE RIEULTHIEUTH + {0xA072, 0xC7F2}, //5562 #HANGUL SYLLABLE CIEUC YAE RIEULPHIEUPH + {0xA073, 0xC7F3}, //5563 #HANGUL SYLLABLE CIEUC YAE RIEULHIEUH + {0xA074, 0xC7F4}, //5564 #HANGUL SYLLABLE CIEUC YAE MIEUM + {0xA075, 0xC7F5}, //5565 #HANGUL SYLLABLE CIEUC YAE PIEUP + {0xA076, 0xC7F6}, //5566 #HANGUL SYLLABLE CIEUC YAE PIEUPSIOS + {0xA077, 0xC7F7}, //5567 #HANGUL SYLLABLE CIEUC YAE SIOS + {0xA078, 0xC7F8}, //5568 #HANGUL SYLLABLE CIEUC YAE SSANGSIOS + {0xA079, 0xC7F9}, //5569 #HANGUL SYLLABLE CIEUC YAE IEUNG + {0xA07A, 0xC7FA}, //5570 #HANGUL SYLLABLE CIEUC YAE CIEUC + {0xA081, 0xC7FB}, //5571 #HANGUL SYLLABLE CIEUC YAE CHIEUCH + {0xA082, 0xC7FC}, //5572 #HANGUL SYLLABLE CIEUC YAE KHIEUKH + {0xA083, 0xC7FD}, //5573 #HANGUL SYLLABLE CIEUC YAE THIEUTH + {0xA084, 0xC7FE}, //5574 #HANGUL SYLLABLE CIEUC YAE PHIEUPH + {0xA085, 0xC7FF}, //5575 #HANGUL SYLLABLE CIEUC YAE HIEUH + {0xA086, 0xC802}, //5576 #HANGUL SYLLABLE CIEUC EO SSANGKIYEOK + {0xA087, 0xC803}, //5577 #HANGUL SYLLABLE CIEUC EO KIYEOKSIOS + {0xA088, 0xC805}, //5578 #HANGUL SYLLABLE CIEUC EO NIEUNCIEUC + {0xA089, 0xC806}, //5579 #HANGUL SYLLABLE CIEUC EO NIEUNHIEUH + {0xA08A, 0xC807}, //5580 #HANGUL SYLLABLE CIEUC EO TIKEUT + {0xA08B, 0xC809}, //5581 #HANGUL SYLLABLE CIEUC EO RIEULKIYEOK + {0xA08C, 0xC80B}, //5582 #HANGUL SYLLABLE CIEUC EO RIEULPIEUP + {0xA08D, 0xC80C}, //5583 #HANGUL SYLLABLE CIEUC EO RIEULSIOS + {0xA08E, 0xC80D}, //5584 #HANGUL SYLLABLE CIEUC EO RIEULTHIEUTH + {0xA08F, 0xC80E}, //5585 #HANGUL SYLLABLE CIEUC EO RIEULPHIEUPH + {0xA090, 0xC80F}, //5586 #HANGUL SYLLABLE CIEUC EO RIEULHIEUH + {0xA091, 0xC812}, //5587 #HANGUL SYLLABLE CIEUC EO PIEUPSIOS + {0xA092, 0xC814}, //5588 #HANGUL SYLLABLE CIEUC EO SSANGSIOS + {0xA093, 0xC817}, //5589 #HANGUL SYLLABLE CIEUC EO CHIEUCH + {0xA094, 0xC818}, //5590 #HANGUL SYLLABLE CIEUC EO KHIEUKH + {0xA095, 0xC819}, //5591 #HANGUL SYLLABLE CIEUC EO THIEUTH + {0xA096, 0xC81A}, //5592 #HANGUL SYLLABLE CIEUC EO PHIEUPH + {0xA097, 0xC81B}, //5593 #HANGUL SYLLABLE CIEUC EO HIEUH + {0xA098, 0xC81E}, //5594 #HANGUL SYLLABLE CIEUC E SSANGKIYEOK + {0xA099, 0xC81F}, //5595 #HANGUL SYLLABLE CIEUC E KIYEOKSIOS + {0xA09A, 0xC821}, //5596 #HANGUL SYLLABLE CIEUC E NIEUNCIEUC + {0xA09B, 0xC822}, //5597 #HANGUL SYLLABLE CIEUC E NIEUNHIEUH + {0xA09C, 0xC823}, //5598 #HANGUL SYLLABLE CIEUC E TIKEUT + {0xA09D, 0xC825}, //5599 #HANGUL SYLLABLE CIEUC E RIEULKIYEOK + {0xA09E, 0xC826}, //5600 #HANGUL SYLLABLE CIEUC E RIEULMIEUM + {0xA09F, 0xC827}, //5601 #HANGUL SYLLABLE CIEUC E RIEULPIEUP + {0xA0A0, 0xC828}, //5602 #HANGUL SYLLABLE CIEUC E RIEULSIOS + {0xA0A1, 0xC829}, //5603 #HANGUL SYLLABLE CIEUC E RIEULTHIEUTH + {0xA0A2, 0xC82A}, //5604 #HANGUL SYLLABLE CIEUC E RIEULPHIEUPH + {0xA0A3, 0xC82B}, //5605 #HANGUL SYLLABLE CIEUC E RIEULHIEUH + {0xA0A4, 0xC82E}, //5606 #HANGUL SYLLABLE CIEUC E PIEUPSIOS + {0xA0A5, 0xC830}, //5607 #HANGUL SYLLABLE CIEUC E SSANGSIOS + {0xA0A6, 0xC832}, //5608 #HANGUL SYLLABLE CIEUC E CIEUC + {0xA0A7, 0xC833}, //5609 #HANGUL SYLLABLE CIEUC E CHIEUCH + {0xA0A8, 0xC834}, //5610 #HANGUL SYLLABLE CIEUC E KHIEUKH + {0xA0A9, 0xC835}, //5611 #HANGUL SYLLABLE CIEUC E THIEUTH + {0xA0AA, 0xC836}, //5612 #HANGUL SYLLABLE CIEUC E PHIEUPH + {0xA0AB, 0xC837}, //5613 #HANGUL SYLLABLE CIEUC E HIEUH + {0xA0AC, 0xC839}, //5614 #HANGUL SYLLABLE CIEUC YEO KIYEOK + {0xA0AD, 0xC83A}, //5615 #HANGUL SYLLABLE CIEUC YEO SSANGKIYEOK + {0xA0AE, 0xC83B}, //5616 #HANGUL SYLLABLE CIEUC YEO KIYEOKSIOS + {0xA0AF, 0xC83D}, //5617 #HANGUL SYLLABLE CIEUC YEO NIEUNCIEUC + {0xA0B0, 0xC83E}, //5618 #HANGUL SYLLABLE CIEUC YEO NIEUNHIEUH + {0xA0B1, 0xC83F}, //5619 #HANGUL SYLLABLE CIEUC YEO TIKEUT + {0xA0B2, 0xC841}, //5620 #HANGUL SYLLABLE CIEUC YEO RIEULKIYEOK + {0xA0B3, 0xC842}, //5621 #HANGUL SYLLABLE CIEUC YEO RIEULMIEUM + {0xA0B4, 0xC843}, //5622 #HANGUL SYLLABLE CIEUC YEO RIEULPIEUP + {0xA0B5, 0xC844}, //5623 #HANGUL SYLLABLE CIEUC YEO RIEULSIOS + {0xA0B6, 0xC845}, //5624 #HANGUL SYLLABLE CIEUC YEO RIEULTHIEUTH + {0xA0B7, 0xC846}, //5625 #HANGUL SYLLABLE CIEUC YEO RIEULPHIEUPH + {0xA0B8, 0xC847}, //5626 #HANGUL SYLLABLE CIEUC YEO RIEULHIEUH + {0xA0B9, 0xC84A}, //5627 #HANGUL SYLLABLE CIEUC YEO PIEUPSIOS + {0xA0BA, 0xC84B}, //5628 #HANGUL SYLLABLE CIEUC YEO SIOS + {0xA0BB, 0xC84E}, //5629 #HANGUL SYLLABLE CIEUC YEO CIEUC + {0xA0BC, 0xC84F}, //5630 #HANGUL SYLLABLE CIEUC YEO CHIEUCH + {0xA0BD, 0xC850}, //5631 #HANGUL SYLLABLE CIEUC YEO KHIEUKH + {0xA0BE, 0xC851}, //5632 #HANGUL SYLLABLE CIEUC YEO THIEUTH + {0xA0BF, 0xC852}, //5633 #HANGUL SYLLABLE CIEUC YEO PHIEUPH + {0xA0C0, 0xC853}, //5634 #HANGUL SYLLABLE CIEUC YEO HIEUH + {0xA0C1, 0xC855}, //5635 #HANGUL SYLLABLE CIEUC YE KIYEOK + {0xA0C2, 0xC856}, //5636 #HANGUL SYLLABLE CIEUC YE SSANGKIYEOK + {0xA0C3, 0xC857}, //5637 #HANGUL SYLLABLE CIEUC YE KIYEOKSIOS + {0xA0C4, 0xC858}, //5638 #HANGUL SYLLABLE CIEUC YE NIEUN + {0xA0C5, 0xC859}, //5639 #HANGUL SYLLABLE CIEUC YE NIEUNCIEUC + {0xA0C6, 0xC85A}, //5640 #HANGUL SYLLABLE CIEUC YE NIEUNHIEUH + {0xA0C7, 0xC85B}, //5641 #HANGUL SYLLABLE CIEUC YE TIKEUT + {0xA0C8, 0xC85C}, //5642 #HANGUL SYLLABLE CIEUC YE RIEUL + {0xA0C9, 0xC85D}, //5643 #HANGUL SYLLABLE CIEUC YE RIEULKIYEOK + {0xA0CA, 0xC85E}, //5644 #HANGUL SYLLABLE CIEUC YE RIEULMIEUM + {0xA0CB, 0xC85F}, //5645 #HANGUL SYLLABLE CIEUC YE RIEULPIEUP + {0xA0CC, 0xC860}, //5646 #HANGUL SYLLABLE CIEUC YE RIEULSIOS + {0xA0CD, 0xC861}, //5647 #HANGUL SYLLABLE CIEUC YE RIEULTHIEUTH + {0xA0CE, 0xC862}, //5648 #HANGUL SYLLABLE CIEUC YE RIEULPHIEUPH + {0xA0CF, 0xC863}, //5649 #HANGUL SYLLABLE CIEUC YE RIEULHIEUH + {0xA0D0, 0xC864}, //5650 #HANGUL SYLLABLE CIEUC YE MIEUM + {0xA0D1, 0xC865}, //5651 #HANGUL SYLLABLE CIEUC YE PIEUP + {0xA0D2, 0xC866}, //5652 #HANGUL SYLLABLE CIEUC YE PIEUPSIOS + {0xA0D3, 0xC867}, //5653 #HANGUL SYLLABLE CIEUC YE SIOS + {0xA0D4, 0xC868}, //5654 #HANGUL SYLLABLE CIEUC YE SSANGSIOS + {0xA0D5, 0xC869}, //5655 #HANGUL SYLLABLE CIEUC YE IEUNG + {0xA0D6, 0xC86A}, //5656 #HANGUL SYLLABLE CIEUC YE CIEUC + {0xA0D7, 0xC86B}, //5657 #HANGUL SYLLABLE CIEUC YE CHIEUCH + {0xA0D8, 0xC86C}, //5658 #HANGUL SYLLABLE CIEUC YE KHIEUKH + {0xA0D9, 0xC86D}, //5659 #HANGUL SYLLABLE CIEUC YE THIEUTH + {0xA0DA, 0xC86E}, //5660 #HANGUL SYLLABLE CIEUC YE PHIEUPH + {0xA0DB, 0xC86F}, //5661 #HANGUL SYLLABLE CIEUC YE HIEUH + {0xA0DC, 0xC872}, //5662 #HANGUL SYLLABLE CIEUC O SSANGKIYEOK + {0xA0DD, 0xC873}, //5663 #HANGUL SYLLABLE CIEUC O KIYEOKSIOS + {0xA0DE, 0xC875}, //5664 #HANGUL SYLLABLE CIEUC O NIEUNCIEUC + {0xA0DF, 0xC876}, //5665 #HANGUL SYLLABLE CIEUC O NIEUNHIEUH + {0xA0E0, 0xC877}, //5666 #HANGUL SYLLABLE CIEUC O TIKEUT + {0xA0E1, 0xC879}, //5667 #HANGUL SYLLABLE CIEUC O RIEULKIYEOK + {0xA0E2, 0xC87B}, //5668 #HANGUL SYLLABLE CIEUC O RIEULPIEUP + {0xA0E3, 0xC87C}, //5669 #HANGUL SYLLABLE CIEUC O RIEULSIOS + {0xA0E4, 0xC87D}, //5670 #HANGUL SYLLABLE CIEUC O RIEULTHIEUTH + {0xA0E5, 0xC87E}, //5671 #HANGUL SYLLABLE CIEUC O RIEULPHIEUPH + {0xA0E6, 0xC87F}, //5672 #HANGUL SYLLABLE CIEUC O RIEULHIEUH + {0xA0E7, 0xC882}, //5673 #HANGUL SYLLABLE CIEUC O PIEUPSIOS + {0xA0E8, 0xC884}, //5674 #HANGUL SYLLABLE CIEUC O SSANGSIOS + {0xA0E9, 0xC888}, //5675 #HANGUL SYLLABLE CIEUC O KHIEUKH + {0xA0EA, 0xC889}, //5676 #HANGUL SYLLABLE CIEUC O THIEUTH + {0xA0EB, 0xC88A}, //5677 #HANGUL SYLLABLE CIEUC O PHIEUPH + {0xA0EC, 0xC88E}, //5678 #HANGUL SYLLABLE CIEUC WA SSANGKIYEOK + {0xA0ED, 0xC88F}, //5679 #HANGUL SYLLABLE CIEUC WA KIYEOKSIOS + {0xA0EE, 0xC890}, //5680 #HANGUL SYLLABLE CIEUC WA NIEUN + {0xA0EF, 0xC891}, //5681 #HANGUL SYLLABLE CIEUC WA NIEUNCIEUC + {0xA0F0, 0xC892}, //5682 #HANGUL SYLLABLE CIEUC WA NIEUNHIEUH + {0xA0F1, 0xC893}, //5683 #HANGUL SYLLABLE CIEUC WA TIKEUT + {0xA0F2, 0xC895}, //5684 #HANGUL SYLLABLE CIEUC WA RIEULKIYEOK + {0xA0F3, 0xC896}, //5685 #HANGUL SYLLABLE CIEUC WA RIEULMIEUM + {0xA0F4, 0xC897}, //5686 #HANGUL SYLLABLE CIEUC WA RIEULPIEUP + {0xA0F5, 0xC898}, //5687 #HANGUL SYLLABLE CIEUC WA RIEULSIOS + {0xA0F6, 0xC899}, //5688 #HANGUL SYLLABLE CIEUC WA RIEULTHIEUTH + {0xA0F7, 0xC89A}, //5689 #HANGUL SYLLABLE CIEUC WA RIEULPHIEUPH + {0xA0F8, 0xC89B}, //5690 #HANGUL SYLLABLE CIEUC WA RIEULHIEUH + {0xA0F9, 0xC89C}, //5691 #HANGUL SYLLABLE CIEUC WA MIEUM + {0xA0FA, 0xC89E}, //5692 #HANGUL SYLLABLE CIEUC WA PIEUPSIOS + {0xA0FB, 0xC8A0}, //5693 #HANGUL SYLLABLE CIEUC WA SSANGSIOS + {0xA0FC, 0xC8A2}, //5694 #HANGUL SYLLABLE CIEUC WA CIEUC + {0xA0FD, 0xC8A3}, //5695 #HANGUL SYLLABLE CIEUC WA CHIEUCH + {0xA0FE, 0xC8A4}, //5696 #HANGUL SYLLABLE CIEUC WA KHIEUKH + {0xA141, 0xC8A5}, //5697 #HANGUL SYLLABLE CIEUC WA THIEUTH + {0xA142, 0xC8A6}, //5698 #HANGUL SYLLABLE CIEUC WA PHIEUPH + {0xA143, 0xC8A7}, //5699 #HANGUL SYLLABLE CIEUC WA HIEUH + {0xA144, 0xC8A9}, //5700 #HANGUL SYLLABLE CIEUC WAE KIYEOK + {0xA145, 0xC8AA}, //5701 #HANGUL SYLLABLE CIEUC WAE SSANGKIYEOK + {0xA146, 0xC8AB}, //5702 #HANGUL SYLLABLE CIEUC WAE KIYEOKSIOS + {0xA147, 0xC8AC}, //5703 #HANGUL SYLLABLE CIEUC WAE NIEUN + {0xA148, 0xC8AD}, //5704 #HANGUL SYLLABLE CIEUC WAE NIEUNCIEUC + {0xA149, 0xC8AE}, //5705 #HANGUL SYLLABLE CIEUC WAE NIEUNHIEUH + {0xA14A, 0xC8AF}, //5706 #HANGUL SYLLABLE CIEUC WAE TIKEUT + {0xA14B, 0xC8B0}, //5707 #HANGUL SYLLABLE CIEUC WAE RIEUL + {0xA14C, 0xC8B1}, //5708 #HANGUL SYLLABLE CIEUC WAE RIEULKIYEOK + {0xA14D, 0xC8B2}, //5709 #HANGUL SYLLABLE CIEUC WAE RIEULMIEUM + {0xA14E, 0xC8B3}, //5710 #HANGUL SYLLABLE CIEUC WAE RIEULPIEUP + {0xA14F, 0xC8B4}, //5711 #HANGUL SYLLABLE CIEUC WAE RIEULSIOS + {0xA150, 0xC8B5}, //5712 #HANGUL SYLLABLE CIEUC WAE RIEULTHIEUTH + {0xA151, 0xC8B6}, //5713 #HANGUL SYLLABLE CIEUC WAE RIEULPHIEUPH + {0xA152, 0xC8B7}, //5714 #HANGUL SYLLABLE CIEUC WAE RIEULHIEUH + {0xA153, 0xC8B8}, //5715 #HANGUL SYLLABLE CIEUC WAE MIEUM + {0xA154, 0xC8B9}, //5716 #HANGUL SYLLABLE CIEUC WAE PIEUP + {0xA155, 0xC8BA}, //5717 #HANGUL SYLLABLE CIEUC WAE PIEUPSIOS + {0xA156, 0xC8BB}, //5718 #HANGUL SYLLABLE CIEUC WAE SIOS + {0xA157, 0xC8BE}, //5719 #HANGUL SYLLABLE CIEUC WAE CIEUC + {0xA158, 0xC8BF}, //5720 #HANGUL SYLLABLE CIEUC WAE CHIEUCH + {0xA159, 0xC8C0}, //5721 #HANGUL SYLLABLE CIEUC WAE KHIEUKH + {0xA15A, 0xC8C1}, //5722 #HANGUL SYLLABLE CIEUC WAE THIEUTH + {0xA161, 0xC8C2}, //5723 #HANGUL SYLLABLE CIEUC WAE PHIEUPH + {0xA162, 0xC8C3}, //5724 #HANGUL SYLLABLE CIEUC WAE HIEUH + {0xA163, 0xC8C5}, //5725 #HANGUL SYLLABLE CIEUC OE KIYEOK + {0xA164, 0xC8C6}, //5726 #HANGUL SYLLABLE CIEUC OE SSANGKIYEOK + {0xA165, 0xC8C7}, //5727 #HANGUL SYLLABLE CIEUC OE KIYEOKSIOS + {0xA166, 0xC8C9}, //5728 #HANGUL SYLLABLE CIEUC OE NIEUNCIEUC + {0xA167, 0xC8CA}, //5729 #HANGUL SYLLABLE CIEUC OE NIEUNHIEUH + {0xA168, 0xC8CB}, //5730 #HANGUL SYLLABLE CIEUC OE TIKEUT + {0xA169, 0xC8CD}, //5731 #HANGUL SYLLABLE CIEUC OE RIEULKIYEOK + {0xA16A, 0xC8CE}, //5732 #HANGUL SYLLABLE CIEUC OE RIEULMIEUM + {0xA16B, 0xC8CF}, //5733 #HANGUL SYLLABLE CIEUC OE RIEULPIEUP + {0xA16C, 0xC8D0}, //5734 #HANGUL SYLLABLE CIEUC OE RIEULSIOS + {0xA16D, 0xC8D1}, //5735 #HANGUL SYLLABLE CIEUC OE RIEULTHIEUTH + {0xA16E, 0xC8D2}, //5736 #HANGUL SYLLABLE CIEUC OE RIEULPHIEUPH + {0xA16F, 0xC8D3}, //5737 #HANGUL SYLLABLE CIEUC OE RIEULHIEUH + {0xA170, 0xC8D6}, //5738 #HANGUL SYLLABLE CIEUC OE PIEUPSIOS + {0xA171, 0xC8D8}, //5739 #HANGUL SYLLABLE CIEUC OE SSANGSIOS + {0xA172, 0xC8DA}, //5740 #HANGUL SYLLABLE CIEUC OE CIEUC + {0xA173, 0xC8DB}, //5741 #HANGUL SYLLABLE CIEUC OE CHIEUCH + {0xA174, 0xC8DC}, //5742 #HANGUL SYLLABLE CIEUC OE KHIEUKH + {0xA175, 0xC8DD}, //5743 #HANGUL SYLLABLE CIEUC OE THIEUTH + {0xA176, 0xC8DE}, //5744 #HANGUL SYLLABLE CIEUC OE PHIEUPH + {0xA177, 0xC8DF}, //5745 #HANGUL SYLLABLE CIEUC OE HIEUH + {0xA178, 0xC8E2}, //5746 #HANGUL SYLLABLE CIEUC YO SSANGKIYEOK + {0xA179, 0xC8E3}, //5747 #HANGUL SYLLABLE CIEUC YO KIYEOKSIOS + {0xA17A, 0xC8E5}, //5748 #HANGUL SYLLABLE CIEUC YO NIEUNCIEUC + {0xA181, 0xC8E6}, //5749 #HANGUL SYLLABLE CIEUC YO NIEUNHIEUH + {0xA182, 0xC8E7}, //5750 #HANGUL SYLLABLE CIEUC YO TIKEUT + {0xA183, 0xC8E8}, //5751 #HANGUL SYLLABLE CIEUC YO RIEUL + {0xA184, 0xC8E9}, //5752 #HANGUL SYLLABLE CIEUC YO RIEULKIYEOK + {0xA185, 0xC8EA}, //5753 #HANGUL SYLLABLE CIEUC YO RIEULMIEUM + {0xA186, 0xC8EB}, //5754 #HANGUL SYLLABLE CIEUC YO RIEULPIEUP + {0xA187, 0xC8EC}, //5755 #HANGUL SYLLABLE CIEUC YO RIEULSIOS + {0xA188, 0xC8ED}, //5756 #HANGUL SYLLABLE CIEUC YO RIEULTHIEUTH + {0xA189, 0xC8EE}, //5757 #HANGUL SYLLABLE CIEUC YO RIEULPHIEUPH + {0xA18A, 0xC8EF}, //5758 #HANGUL SYLLABLE CIEUC YO RIEULHIEUH + {0xA18B, 0xC8F0}, //5759 #HANGUL SYLLABLE CIEUC YO MIEUM + {0xA18C, 0xC8F1}, //5760 #HANGUL SYLLABLE CIEUC YO PIEUP + {0xA18D, 0xC8F2}, //5761 #HANGUL SYLLABLE CIEUC YO PIEUPSIOS + {0xA18E, 0xC8F3}, //5762 #HANGUL SYLLABLE CIEUC YO SIOS + {0xA18F, 0xC8F4}, //5763 #HANGUL SYLLABLE CIEUC YO SSANGSIOS + {0xA190, 0xC8F6}, //5764 #HANGUL SYLLABLE CIEUC YO CIEUC + {0xA191, 0xC8F7}, //5765 #HANGUL SYLLABLE CIEUC YO CHIEUCH + {0xA192, 0xC8F8}, //5766 #HANGUL SYLLABLE CIEUC YO KHIEUKH + {0xA193, 0xC8F9}, //5767 #HANGUL SYLLABLE CIEUC YO THIEUTH + {0xA194, 0xC8FA}, //5768 #HANGUL SYLLABLE CIEUC YO PHIEUPH + {0xA195, 0xC8FB}, //5769 #HANGUL SYLLABLE CIEUC YO HIEUH + {0xA196, 0xC8FE}, //5770 #HANGUL SYLLABLE CIEUC U SSANGKIYEOK + {0xA197, 0xC8FF}, //5771 #HANGUL SYLLABLE CIEUC U KIYEOKSIOS + {0xA198, 0xC901}, //5772 #HANGUL SYLLABLE CIEUC U NIEUNCIEUC + {0xA199, 0xC902}, //5773 #HANGUL SYLLABLE CIEUC U NIEUNHIEUH + {0xA19A, 0xC903}, //5774 #HANGUL SYLLABLE CIEUC U TIKEUT + {0xA19B, 0xC907}, //5775 #HANGUL SYLLABLE CIEUC U RIEULPIEUP + {0xA19C, 0xC908}, //5776 #HANGUL SYLLABLE CIEUC U RIEULSIOS + {0xA19D, 0xC909}, //5777 #HANGUL SYLLABLE CIEUC U RIEULTHIEUTH + {0xA19E, 0xC90A}, //5778 #HANGUL SYLLABLE CIEUC U RIEULPHIEUPH + {0xA19F, 0xC90B}, //5779 #HANGUL SYLLABLE CIEUC U RIEULHIEUH + {0xA1A0, 0xC90E}, //5780 #HANGUL SYLLABLE CIEUC U PIEUPSIOS + {0xA1A1, 0x3000}, //5781 #IDEOGRAPHIC SPACE + {0xA1A2, 0x3001}, //5782 #IDEOGRAPHIC COMMA + {0xA1A3, 0x3002}, //5783 #IDEOGRAPHIC FULL STOP + {0xA1A4, 0x00B7}, //5784 #MIDDLE DOT + {0xA1A5, 0x2025}, //5785 #TWO DOT LEADER + {0xA1A6, 0x2026}, //5786 #HORIZONTAL ELLIPSIS + {0xA1A7, 0x00A8}, //5787 #DIAERESIS + {0xA1A8, 0x3003}, //5788 #DITTO MARK + {0xA1A9, 0x00AD}, //5789 #SOFT HYPHEN + {0xA1AA, 0x2015}, //5790 #HORIZONTAL BAR + {0xA1AB, 0x2225}, //5791 #PARALLEL TO + {0xA1AC, 0xFF3C}, //5792 #FULLWIDTH REVERSE SOLIDUS + {0xA1AD, 0x223C}, //5793 #TILDE OPERATOR + {0xA1AE, 0x2018}, //5794 #LEFT SINGLE QUOTATION MARK + {0xA1AF, 0x2019}, //5795 #RIGHT SINGLE QUOTATION MARK + {0xA1B0, 0x201C}, //5796 #LEFT DOUBLE QUOTATION MARK + {0xA1B1, 0x201D}, //5797 #RIGHT DOUBLE QUOTATION MARK + {0xA1B2, 0x3014}, //5798 #LEFT TORTOISE SHELL BRACKET + {0xA1B3, 0x3015}, //5799 #RIGHT TORTOISE SHELL BRACKET + {0xA1B4, 0x3008}, //5800 #LEFT ANGLE BRACKET + {0xA1B5, 0x3009}, //5801 #RIGHT ANGLE BRACKET + {0xA1B6, 0x300A}, //5802 #LEFT DOUBLE ANGLE BRACKET + {0xA1B7, 0x300B}, //5803 #RIGHT DOUBLE ANGLE BRACKET + {0xA1B8, 0x300C}, //5804 #LEFT CORNER BRACKET + {0xA1B9, 0x300D}, //5805 #RIGHT CORNER BRACKET + {0xA1BA, 0x300E}, //5806 #LEFT WHITE CORNER BRACKET + {0xA1BB, 0x300F}, //5807 #RIGHT WHITE CORNER BRACKET + {0xA1BC, 0x3010}, //5808 #LEFT BLACK LENTICULAR BRACKET + {0xA1BD, 0x3011}, //5809 #RIGHT BLACK LENTICULAR BRACKET + {0xA1BE, 0x00B1}, //5810 #PLUS-MINUS SIGN + {0xA1BF, 0x00D7}, //5811 #MULTIPLICATION SIGN + {0xA1C0, 0x00F7}, //5812 #DIVISION SIGN + {0xA1C1, 0x2260}, //5813 #NOT EQUAL TO + {0xA1C2, 0x2264}, //5814 #LESS-THAN OR EQUAL TO + {0xA1C3, 0x2265}, //5815 #GREATER-THAN OR EQUAL TO + {0xA1C4, 0x221E}, //5816 #INFINITY + {0xA1C5, 0x2234}, //5817 #THEREFORE + {0xA1C6, 0x00B0}, //5818 #DEGREE SIGN + {0xA1C7, 0x2032}, //5819 #PRIME + {0xA1C8, 0x2033}, //5820 #DOUBLE PRIME + {0xA1C9, 0x2103}, //5821 #DEGREE CELSIUS + {0xA1CA, 0x212B}, //5822 #ANGSTROM SIGN + {0xA1CB, 0xFFE0}, //5823 #FULLWIDTH CENT SIGN + {0xA1CC, 0xFFE1}, //5824 #FULLWIDTH POUND SIGN + {0xA1CD, 0xFFE5}, //5825 #FULLWIDTH YEN SIGN + {0xA1CE, 0x2642}, //5826 #MALE SIGN + {0xA1CF, 0x2640}, //5827 #FEMALE SIGN + {0xA1D0, 0x2220}, //5828 #ANGLE + {0xA1D1, 0x22A5}, //5829 #UP TACK + {0xA1D2, 0x2312}, //5830 #ARC + {0xA1D3, 0x2202}, //5831 #PARTIAL DIFFERENTIAL + {0xA1D4, 0x2207}, //5832 #NABLA + {0xA1D5, 0x2261}, //5833 #IDENTICAL TO + {0xA1D6, 0x2252}, //5834 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA1D7, 0x00A7}, //5835 #SECTION SIGN + {0xA1D8, 0x203B}, //5836 #REFERENCE MARK + {0xA1D9, 0x2606}, //5837 #WHITE STAR + {0xA1DA, 0x2605}, //5838 #BLACK STAR + {0xA1DB, 0x25CB}, //5839 #WHITE CIRCLE + {0xA1DC, 0x25CF}, //5840 #BLACK CIRCLE + {0xA1DD, 0x25CE}, //5841 #BULLSEYE + {0xA1DE, 0x25C7}, //5842 #WHITE DIAMOND + {0xA1DF, 0x25C6}, //5843 #BLACK DIAMOND + {0xA1E0, 0x25A1}, //5844 #WHITE SQUARE + {0xA1E1, 0x25A0}, //5845 #BLACK SQUARE + {0xA1E2, 0x25B3}, //5846 #WHITE UP-POINTING TRIANGLE + {0xA1E3, 0x25B2}, //5847 #BLACK UP-POINTING TRIANGLE + {0xA1E4, 0x25BD}, //5848 #WHITE DOWN-POINTING TRIANGLE + {0xA1E5, 0x25BC}, //5849 #BLACK DOWN-POINTING TRIANGLE + {0xA1E6, 0x2192}, //5850 #RIGHTWARDS ARROW + {0xA1E7, 0x2190}, //5851 #LEFTWARDS ARROW + {0xA1E8, 0x2191}, //5852 #UPWARDS ARROW + {0xA1E9, 0x2193}, //5853 #DOWNWARDS ARROW + {0xA1EA, 0x2194}, //5854 #LEFT RIGHT ARROW + {0xA1EB, 0x3013}, //5855 #GETA MARK + {0xA1EC, 0x226A}, //5856 #MUCH LESS-THAN + {0xA1ED, 0x226B}, //5857 #MUCH GREATER-THAN + {0xA1EE, 0x221A}, //5858 #SQUARE ROOT + {0xA1EF, 0x223D}, //5859 #REVERSED TILDE + {0xA1F0, 0x221D}, //5860 #PROPORTIONAL TO + {0xA1F1, 0x2235}, //5861 #BECAUSE + {0xA1F2, 0x222B}, //5862 #INTEGRAL + {0xA1F3, 0x222C}, //5863 #DOUBLE INTEGRAL + {0xA1F4, 0x2208}, //5864 #ELEMENT OF + {0xA1F5, 0x220B}, //5865 #CONTAINS AS MEMBER + {0xA1F6, 0x2286}, //5866 #SUBSET OF OR EQUAL TO + {0xA1F7, 0x2287}, //5867 #SUPERSET OF OR EQUAL TO + {0xA1F8, 0x2282}, //5868 #SUBSET OF + {0xA1F9, 0x2283}, //5869 #SUPERSET OF + {0xA1FA, 0x222A}, //5870 #UNION + {0xA1FB, 0x2229}, //5871 #INTERSECTION + {0xA1FC, 0x2227}, //5872 #LOGICAL AND + {0xA1FD, 0x2228}, //5873 #LOGICAL OR + {0xA1FE, 0xFFE2}, //5874 #FULLWIDTH NOT SIGN + {0xA241, 0xC910}, //5875 #HANGUL SYLLABLE CIEUC U SSANGSIOS + {0xA242, 0xC912}, //5876 #HANGUL SYLLABLE CIEUC U CIEUC + {0xA243, 0xC913}, //5877 #HANGUL SYLLABLE CIEUC U CHIEUCH + {0xA244, 0xC914}, //5878 #HANGUL SYLLABLE CIEUC U KHIEUKH + {0xA245, 0xC915}, //5879 #HANGUL SYLLABLE CIEUC U THIEUTH + {0xA246, 0xC916}, //5880 #HANGUL SYLLABLE CIEUC U PHIEUPH + {0xA247, 0xC917}, //5881 #HANGUL SYLLABLE CIEUC U HIEUH + {0xA248, 0xC919}, //5882 #HANGUL SYLLABLE CIEUC WEO KIYEOK + {0xA249, 0xC91A}, //5883 #HANGUL SYLLABLE CIEUC WEO SSANGKIYEOK + {0xA24A, 0xC91B}, //5884 #HANGUL SYLLABLE CIEUC WEO KIYEOKSIOS + {0xA24B, 0xC91C}, //5885 #HANGUL SYLLABLE CIEUC WEO NIEUN + {0xA24C, 0xC91D}, //5886 #HANGUL SYLLABLE CIEUC WEO NIEUNCIEUC + {0xA24D, 0xC91E}, //5887 #HANGUL SYLLABLE CIEUC WEO NIEUNHIEUH + {0xA24E, 0xC91F}, //5888 #HANGUL SYLLABLE CIEUC WEO TIKEUT + {0xA24F, 0xC920}, //5889 #HANGUL SYLLABLE CIEUC WEO RIEUL + {0xA250, 0xC921}, //5890 #HANGUL SYLLABLE CIEUC WEO RIEULKIYEOK + {0xA251, 0xC922}, //5891 #HANGUL SYLLABLE CIEUC WEO RIEULMIEUM + {0xA252, 0xC923}, //5892 #HANGUL SYLLABLE CIEUC WEO RIEULPIEUP + {0xA253, 0xC924}, //5893 #HANGUL SYLLABLE CIEUC WEO RIEULSIOS + {0xA254, 0xC925}, //5894 #HANGUL SYLLABLE CIEUC WEO RIEULTHIEUTH + {0xA255, 0xC926}, //5895 #HANGUL SYLLABLE CIEUC WEO RIEULPHIEUPH + {0xA256, 0xC927}, //5896 #HANGUL SYLLABLE CIEUC WEO RIEULHIEUH + {0xA257, 0xC928}, //5897 #HANGUL SYLLABLE CIEUC WEO MIEUM + {0xA258, 0xC929}, //5898 #HANGUL SYLLABLE CIEUC WEO PIEUP + {0xA259, 0xC92A}, //5899 #HANGUL SYLLABLE CIEUC WEO PIEUPSIOS + {0xA25A, 0xC92B}, //5900 #HANGUL SYLLABLE CIEUC WEO SIOS + {0xA261, 0xC92D}, //5901 #HANGUL SYLLABLE CIEUC WEO IEUNG + {0xA262, 0xC92E}, //5902 #HANGUL SYLLABLE CIEUC WEO CIEUC + {0xA263, 0xC92F}, //5903 #HANGUL SYLLABLE CIEUC WEO CHIEUCH + {0xA264, 0xC930}, //5904 #HANGUL SYLLABLE CIEUC WEO KHIEUKH + {0xA265, 0xC931}, //5905 #HANGUL SYLLABLE CIEUC WEO THIEUTH + {0xA266, 0xC932}, //5906 #HANGUL SYLLABLE CIEUC WEO PHIEUPH + {0xA267, 0xC933}, //5907 #HANGUL SYLLABLE CIEUC WEO HIEUH + {0xA268, 0xC935}, //5908 #HANGUL SYLLABLE CIEUC WE KIYEOK + {0xA269, 0xC936}, //5909 #HANGUL SYLLABLE CIEUC WE SSANGKIYEOK + {0xA26A, 0xC937}, //5910 #HANGUL SYLLABLE CIEUC WE KIYEOKSIOS + {0xA26B, 0xC938}, //5911 #HANGUL SYLLABLE CIEUC WE NIEUN + {0xA26C, 0xC939}, //5912 #HANGUL SYLLABLE CIEUC WE NIEUNCIEUC + {0xA26D, 0xC93A}, //5913 #HANGUL SYLLABLE CIEUC WE NIEUNHIEUH + {0xA26E, 0xC93B}, //5914 #HANGUL SYLLABLE CIEUC WE TIKEUT + {0xA26F, 0xC93C}, //5915 #HANGUL SYLLABLE CIEUC WE RIEUL + {0xA270, 0xC93D}, //5916 #HANGUL SYLLABLE CIEUC WE RIEULKIYEOK + {0xA271, 0xC93E}, //5917 #HANGUL SYLLABLE CIEUC WE RIEULMIEUM + {0xA272, 0xC93F}, //5918 #HANGUL SYLLABLE CIEUC WE RIEULPIEUP + {0xA273, 0xC940}, //5919 #HANGUL SYLLABLE CIEUC WE RIEULSIOS + {0xA274, 0xC941}, //5920 #HANGUL SYLLABLE CIEUC WE RIEULTHIEUTH + {0xA275, 0xC942}, //5921 #HANGUL SYLLABLE CIEUC WE RIEULPHIEUPH + {0xA276, 0xC943}, //5922 #HANGUL SYLLABLE CIEUC WE RIEULHIEUH + {0xA277, 0xC944}, //5923 #HANGUL SYLLABLE CIEUC WE MIEUM + {0xA278, 0xC945}, //5924 #HANGUL SYLLABLE CIEUC WE PIEUP + {0xA279, 0xC946}, //5925 #HANGUL SYLLABLE CIEUC WE PIEUPSIOS + {0xA27A, 0xC947}, //5926 #HANGUL SYLLABLE CIEUC WE SIOS + {0xA281, 0xC948}, //5927 #HANGUL SYLLABLE CIEUC WE SSANGSIOS + {0xA282, 0xC949}, //5928 #HANGUL SYLLABLE CIEUC WE IEUNG + {0xA283, 0xC94A}, //5929 #HANGUL SYLLABLE CIEUC WE CIEUC + {0xA284, 0xC94B}, //5930 #HANGUL SYLLABLE CIEUC WE CHIEUCH + {0xA285, 0xC94C}, //5931 #HANGUL SYLLABLE CIEUC WE KHIEUKH + {0xA286, 0xC94D}, //5932 #HANGUL SYLLABLE CIEUC WE THIEUTH + {0xA287, 0xC94E}, //5933 #HANGUL SYLLABLE CIEUC WE PHIEUPH + {0xA288, 0xC94F}, //5934 #HANGUL SYLLABLE CIEUC WE HIEUH + {0xA289, 0xC952}, //5935 #HANGUL SYLLABLE CIEUC WI SSANGKIYEOK + {0xA28A, 0xC953}, //5936 #HANGUL SYLLABLE CIEUC WI KIYEOKSIOS + {0xA28B, 0xC955}, //5937 #HANGUL SYLLABLE CIEUC WI NIEUNCIEUC + {0xA28C, 0xC956}, //5938 #HANGUL SYLLABLE CIEUC WI NIEUNHIEUH + {0xA28D, 0xC957}, //5939 #HANGUL SYLLABLE CIEUC WI TIKEUT + {0xA28E, 0xC959}, //5940 #HANGUL SYLLABLE CIEUC WI RIEULKIYEOK + {0xA28F, 0xC95A}, //5941 #HANGUL SYLLABLE CIEUC WI RIEULMIEUM + {0xA290, 0xC95B}, //5942 #HANGUL SYLLABLE CIEUC WI RIEULPIEUP + {0xA291, 0xC95C}, //5943 #HANGUL SYLLABLE CIEUC WI RIEULSIOS + {0xA292, 0xC95D}, //5944 #HANGUL SYLLABLE CIEUC WI RIEULTHIEUTH + {0xA293, 0xC95E}, //5945 #HANGUL SYLLABLE CIEUC WI RIEULPHIEUPH + {0xA294, 0xC95F}, //5946 #HANGUL SYLLABLE CIEUC WI RIEULHIEUH + {0xA295, 0xC962}, //5947 #HANGUL SYLLABLE CIEUC WI PIEUPSIOS + {0xA296, 0xC964}, //5948 #HANGUL SYLLABLE CIEUC WI SSANGSIOS + {0xA297, 0xC965}, //5949 #HANGUL SYLLABLE CIEUC WI IEUNG + {0xA298, 0xC966}, //5950 #HANGUL SYLLABLE CIEUC WI CIEUC + {0xA299, 0xC967}, //5951 #HANGUL SYLLABLE CIEUC WI CHIEUCH + {0xA29A, 0xC968}, //5952 #HANGUL SYLLABLE CIEUC WI KHIEUKH + {0xA29B, 0xC969}, //5953 #HANGUL SYLLABLE CIEUC WI THIEUTH + {0xA29C, 0xC96A}, //5954 #HANGUL SYLLABLE CIEUC WI PHIEUPH + {0xA29D, 0xC96B}, //5955 #HANGUL SYLLABLE CIEUC WI HIEUH + {0xA29E, 0xC96D}, //5956 #HANGUL SYLLABLE CIEUC YU KIYEOK + {0xA29F, 0xC96E}, //5957 #HANGUL SYLLABLE CIEUC YU SSANGKIYEOK + {0xA2A0, 0xC96F}, //5958 #HANGUL SYLLABLE CIEUC YU KIYEOKSIOS + {0xA2A1, 0x21D2}, //5959 #RIGHTWARDS DOUBLE ARROW + {0xA2A2, 0x21D4}, //5960 #LEFT RIGHT DOUBLE ARROW + {0xA2A3, 0x2200}, //5961 #FOR ALL + {0xA2A4, 0x2203}, //5962 #THERE EXISTS + {0xA2A5, 0x00B4}, //5963 #ACUTE ACCENT + {0xA2A6, 0xFF5E}, //5964 #FULLWIDTH TILDE + {0xA2A7, 0x02C7}, //5965 #CARON + {0xA2A8, 0x02D8}, //5966 #BREVE + {0xA2A9, 0x02DD}, //5967 #DOUBLE ACUTE ACCENT + {0xA2AA, 0x02DA}, //5968 #RING ABOVE + {0xA2AB, 0x02D9}, //5969 #DOT ABOVE + {0xA2AC, 0x00B8}, //5970 #CEDILLA + {0xA2AD, 0x02DB}, //5971 #OGONEK + {0xA2AE, 0x00A1}, //5972 #INVERTED EXCLAMATION MARK + {0xA2AF, 0x00BF}, //5973 #INVERTED QUESTION MARK + {0xA2B0, 0x02D0}, //5974 #MODIFIER LETTER TRIANGULAR COLON + {0xA2B1, 0x222E}, //5975 #CONTOUR INTEGRAL + {0xA2B2, 0x2211}, //5976 #N-ARY SUMMATION + {0xA2B3, 0x220F}, //5977 #N-ARY PRODUCT + {0xA2B4, 0x00A4}, //5978 #CURRENCY SIGN + {0xA2B5, 0x2109}, //5979 #DEGREE FAHRENHEIT + {0xA2B6, 0x2030}, //5980 #PER MILLE SIGN + {0xA2B7, 0x25C1}, //5981 #WHITE LEFT-POINTING TRIANGLE + {0xA2B8, 0x25C0}, //5982 #BLACK LEFT-POINTING TRIANGLE + {0xA2B9, 0x25B7}, //5983 #WHITE RIGHT-POINTING TRIANGLE + {0xA2BA, 0x25B6}, //5984 #BLACK RIGHT-POINTING TRIANGLE + {0xA2BB, 0x2664}, //5985 #WHITE SPADE SUIT + {0xA2BC, 0x2660}, //5986 #BLACK SPADE SUIT + {0xA2BD, 0x2661}, //5987 #WHITE HEART SUIT + {0xA2BE, 0x2665}, //5988 #BLACK HEART SUIT + {0xA2BF, 0x2667}, //5989 #WHITE CLUB SUIT + {0xA2C0, 0x2663}, //5990 #BLACK CLUB SUIT + {0xA2C1, 0x2299}, //5991 #CIRCLED DOT OPERATOR + {0xA2C2, 0x25C8}, //5992 #WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND + {0xA2C3, 0x25A3}, //5993 #WHITE SQUARE CONTAINING BLACK SMALL SQUARE + {0xA2C4, 0x25D0}, //5994 #CIRCLE WITH LEFT HALF BLACK + {0xA2C5, 0x25D1}, //5995 #CIRCLE WITH RIGHT HALF BLACK + {0xA2C6, 0x2592}, //5996 #MEDIUM SHADE + {0xA2C7, 0x25A4}, //5997 #SQUARE WITH HORIZONTAL FILL + {0xA2C8, 0x25A5}, //5998 #SQUARE WITH VERTICAL FILL + {0xA2C9, 0x25A8}, //5999 #SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL + {0xA2CA, 0x25A7}, //6000 #SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL + {0xA2CB, 0x25A6}, //6001 #SQUARE WITH ORTHOGONAL CROSSHATCH FILL + {0xA2CC, 0x25A9}, //6002 #SQUARE WITH DIAGONAL CROSSHATCH FILL + {0xA2CD, 0x2668}, //6003 #HOT SPRINGS + {0xA2CE, 0x260F}, //6004 #WHITE TELEPHONE + {0xA2CF, 0x260E}, //6005 #BLACK TELEPHONE + {0xA2D0, 0x261C}, //6006 #WHITE LEFT POINTING INDEX + {0xA2D1, 0x261E}, //6007 #WHITE RIGHT POINTING INDEX + {0xA2D2, 0x00B6}, //6008 #PILCROW SIGN + {0xA2D3, 0x2020}, //6009 #DAGGER + {0xA2D4, 0x2021}, //6010 #DOUBLE DAGGER + {0xA2D5, 0x2195}, //6011 #UP DOWN ARROW + {0xA2D6, 0x2197}, //6012 #NORTH EAST ARROW + {0xA2D7, 0x2199}, //6013 #SOUTH WEST ARROW + {0xA2D8, 0x2196}, //6014 #NORTH WEST ARROW + {0xA2D9, 0x2198}, //6015 #SOUTH EAST ARROW + {0xA2DA, 0x266D}, //6016 #MUSIC FLAT SIGN + {0xA2DB, 0x2669}, //6017 #QUARTER NOTE + {0xA2DC, 0x266A}, //6018 #EIGHTH NOTE + {0xA2DD, 0x266C}, //6019 #BEAMED SIXTEENTH NOTES + {0xA2DE, 0x327F}, //6020 #KOREAN STANDARD SYMBOL + {0xA2DF, 0x321C}, //6021 #PARENTHESIZED HANGUL CIEUC U + {0xA2E0, 0x2116}, //6022 #NUMERO SIGN + {0xA2E1, 0x33C7}, //6023 #SQUARE CO + {0xA2E2, 0x2122}, //6024 #TRADE MARK SIGN + {0xA2E3, 0x33C2}, //6025 #SQUARE AM + {0xA2E4, 0x33D8}, //6026 #SQUARE PM + {0xA2E5, 0x2121}, //6027 #TELEPHONE SIGN + {0xA2E6, 0x20AC}, //6028 #EURO SIGN + {0xA2E7, 0x00AE}, //6029 #REGISTERED SIGN + {0xA341, 0xC971}, //6030 #HANGUL SYLLABLE CIEUC YU NIEUNCIEUC + {0xA342, 0xC972}, //6031 #HANGUL SYLLABLE CIEUC YU NIEUNHIEUH + {0xA343, 0xC973}, //6032 #HANGUL SYLLABLE CIEUC YU TIKEUT + {0xA344, 0xC975}, //6033 #HANGUL SYLLABLE CIEUC YU RIEULKIYEOK + {0xA345, 0xC976}, //6034 #HANGUL SYLLABLE CIEUC YU RIEULMIEUM + {0xA346, 0xC977}, //6035 #HANGUL SYLLABLE CIEUC YU RIEULPIEUP + {0xA347, 0xC978}, //6036 #HANGUL SYLLABLE CIEUC YU RIEULSIOS + {0xA348, 0xC979}, //6037 #HANGUL SYLLABLE CIEUC YU RIEULTHIEUTH + {0xA349, 0xC97A}, //6038 #HANGUL SYLLABLE CIEUC YU RIEULPHIEUPH + {0xA34A, 0xC97B}, //6039 #HANGUL SYLLABLE CIEUC YU RIEULHIEUH + {0xA34B, 0xC97D}, //6040 #HANGUL SYLLABLE CIEUC YU PIEUP + {0xA34C, 0xC97E}, //6041 #HANGUL SYLLABLE CIEUC YU PIEUPSIOS + {0xA34D, 0xC97F}, //6042 #HANGUL SYLLABLE CIEUC YU SIOS + {0xA34E, 0xC980}, //6043 #HANGUL SYLLABLE CIEUC YU SSANGSIOS + {0xA34F, 0xC981}, //6044 #HANGUL SYLLABLE CIEUC YU IEUNG + {0xA350, 0xC982}, //6045 #HANGUL SYLLABLE CIEUC YU CIEUC + {0xA351, 0xC983}, //6046 #HANGUL SYLLABLE CIEUC YU CHIEUCH + {0xA352, 0xC984}, //6047 #HANGUL SYLLABLE CIEUC YU KHIEUKH + {0xA353, 0xC985}, //6048 #HANGUL SYLLABLE CIEUC YU THIEUTH + {0xA354, 0xC986}, //6049 #HANGUL SYLLABLE CIEUC YU PHIEUPH + {0xA355, 0xC987}, //6050 #HANGUL SYLLABLE CIEUC YU HIEUH + {0xA356, 0xC98A}, //6051 #HANGUL SYLLABLE CIEUC EU SSANGKIYEOK + {0xA357, 0xC98B}, //6052 #HANGUL SYLLABLE CIEUC EU KIYEOKSIOS + {0xA358, 0xC98D}, //6053 #HANGUL SYLLABLE CIEUC EU NIEUNCIEUC + {0xA359, 0xC98E}, //6054 #HANGUL SYLLABLE CIEUC EU NIEUNHIEUH + {0xA35A, 0xC98F}, //6055 #HANGUL SYLLABLE CIEUC EU TIKEUT + {0xA361, 0xC991}, //6056 #HANGUL SYLLABLE CIEUC EU RIEULKIYEOK + {0xA362, 0xC992}, //6057 #HANGUL SYLLABLE CIEUC EU RIEULMIEUM + {0xA363, 0xC993}, //6058 #HANGUL SYLLABLE CIEUC EU RIEULPIEUP + {0xA364, 0xC994}, //6059 #HANGUL SYLLABLE CIEUC EU RIEULSIOS + {0xA365, 0xC995}, //6060 #HANGUL SYLLABLE CIEUC EU RIEULTHIEUTH + {0xA366, 0xC996}, //6061 #HANGUL SYLLABLE CIEUC EU RIEULPHIEUPH + {0xA367, 0xC997}, //6062 #HANGUL SYLLABLE CIEUC EU RIEULHIEUH + {0xA368, 0xC99A}, //6063 #HANGUL SYLLABLE CIEUC EU PIEUPSIOS + {0xA369, 0xC99C}, //6064 #HANGUL SYLLABLE CIEUC EU SSANGSIOS + {0xA36A, 0xC99E}, //6065 #HANGUL SYLLABLE CIEUC EU CIEUC + {0xA36B, 0xC99F}, //6066 #HANGUL SYLLABLE CIEUC EU CHIEUCH + {0xA36C, 0xC9A0}, //6067 #HANGUL SYLLABLE CIEUC EU KHIEUKH + {0xA36D, 0xC9A1}, //6068 #HANGUL SYLLABLE CIEUC EU THIEUTH + {0xA36E, 0xC9A2}, //6069 #HANGUL SYLLABLE CIEUC EU PHIEUPH + {0xA36F, 0xC9A3}, //6070 #HANGUL SYLLABLE CIEUC EU HIEUH + {0xA370, 0xC9A4}, //6071 #HANGUL SYLLABLE CIEUC YI + {0xA371, 0xC9A5}, //6072 #HANGUL SYLLABLE CIEUC YI KIYEOK + {0xA372, 0xC9A6}, //6073 #HANGUL SYLLABLE CIEUC YI SSANGKIYEOK + {0xA373, 0xC9A7}, //6074 #HANGUL SYLLABLE CIEUC YI KIYEOKSIOS + {0xA374, 0xC9A8}, //6075 #HANGUL SYLLABLE CIEUC YI NIEUN + {0xA375, 0xC9A9}, //6076 #HANGUL SYLLABLE CIEUC YI NIEUNCIEUC + {0xA376, 0xC9AA}, //6077 #HANGUL SYLLABLE CIEUC YI NIEUNHIEUH + {0xA377, 0xC9AB}, //6078 #HANGUL SYLLABLE CIEUC YI TIKEUT + {0xA378, 0xC9AC}, //6079 #HANGUL SYLLABLE CIEUC YI RIEUL + {0xA379, 0xC9AD}, //6080 #HANGUL SYLLABLE CIEUC YI RIEULKIYEOK + {0xA37A, 0xC9AE}, //6081 #HANGUL SYLLABLE CIEUC YI RIEULMIEUM + {0xA381, 0xC9AF}, //6082 #HANGUL SYLLABLE CIEUC YI RIEULPIEUP + {0xA382, 0xC9B0}, //6083 #HANGUL SYLLABLE CIEUC YI RIEULSIOS + {0xA383, 0xC9B1}, //6084 #HANGUL SYLLABLE CIEUC YI RIEULTHIEUTH + {0xA384, 0xC9B2}, //6085 #HANGUL SYLLABLE CIEUC YI RIEULPHIEUPH + {0xA385, 0xC9B3}, //6086 #HANGUL SYLLABLE CIEUC YI RIEULHIEUH + {0xA386, 0xC9B4}, //6087 #HANGUL SYLLABLE CIEUC YI MIEUM + {0xA387, 0xC9B5}, //6088 #HANGUL SYLLABLE CIEUC YI PIEUP + {0xA388, 0xC9B6}, //6089 #HANGUL SYLLABLE CIEUC YI PIEUPSIOS + {0xA389, 0xC9B7}, //6090 #HANGUL SYLLABLE CIEUC YI SIOS + {0xA38A, 0xC9B8}, //6091 #HANGUL SYLLABLE CIEUC YI SSANGSIOS + {0xA38B, 0xC9B9}, //6092 #HANGUL SYLLABLE CIEUC YI IEUNG + {0xA38C, 0xC9BA}, //6093 #HANGUL SYLLABLE CIEUC YI CIEUC + {0xA38D, 0xC9BB}, //6094 #HANGUL SYLLABLE CIEUC YI CHIEUCH + {0xA38E, 0xC9BC}, //6095 #HANGUL SYLLABLE CIEUC YI KHIEUKH + {0xA38F, 0xC9BD}, //6096 #HANGUL SYLLABLE CIEUC YI THIEUTH + {0xA390, 0xC9BE}, //6097 #HANGUL SYLLABLE CIEUC YI PHIEUPH + {0xA391, 0xC9BF}, //6098 #HANGUL SYLLABLE CIEUC YI HIEUH + {0xA392, 0xC9C2}, //6099 #HANGUL SYLLABLE CIEUC I SSANGKIYEOK + {0xA393, 0xC9C3}, //6100 #HANGUL SYLLABLE CIEUC I KIYEOKSIOS + {0xA394, 0xC9C5}, //6101 #HANGUL SYLLABLE CIEUC I NIEUNCIEUC + {0xA395, 0xC9C6}, //6102 #HANGUL SYLLABLE CIEUC I NIEUNHIEUH + {0xA396, 0xC9C9}, //6103 #HANGUL SYLLABLE CIEUC I RIEULKIYEOK + {0xA397, 0xC9CB}, //6104 #HANGUL SYLLABLE CIEUC I RIEULPIEUP + {0xA398, 0xC9CC}, //6105 #HANGUL SYLLABLE CIEUC I RIEULSIOS + {0xA399, 0xC9CD}, //6106 #HANGUL SYLLABLE CIEUC I RIEULTHIEUTH + {0xA39A, 0xC9CE}, //6107 #HANGUL SYLLABLE CIEUC I RIEULPHIEUPH + {0xA39B, 0xC9CF}, //6108 #HANGUL SYLLABLE CIEUC I RIEULHIEUH + {0xA39C, 0xC9D2}, //6109 #HANGUL SYLLABLE CIEUC I PIEUPSIOS + {0xA39D, 0xC9D4}, //6110 #HANGUL SYLLABLE CIEUC I SSANGSIOS + {0xA39E, 0xC9D7}, //6111 #HANGUL SYLLABLE CIEUC I CHIEUCH + {0xA39F, 0xC9D8}, //6112 #HANGUL SYLLABLE CIEUC I KHIEUKH + {0xA3A0, 0xC9DB}, //6113 #HANGUL SYLLABLE CIEUC I HIEUH + {0xA3A1, 0xFF01}, //6114 #FULLWIDTH EXCLAMATION MARK + {0xA3A2, 0xFF02}, //6115 #FULLWIDTH QUOTATION MARK + {0xA3A3, 0xFF03}, //6116 #FULLWIDTH NUMBER SIGN + {0xA3A4, 0xFF04}, //6117 #FULLWIDTH DOLLAR SIGN + {0xA3A5, 0xFF05}, //6118 #FULLWIDTH PERCENT SIGN + {0xA3A6, 0xFF06}, //6119 #FULLWIDTH AMPERSAND + {0xA3A7, 0xFF07}, //6120 #FULLWIDTH APOSTROPHE + {0xA3A8, 0xFF08}, //6121 #FULLWIDTH LEFT PARENTHESIS + {0xA3A9, 0xFF09}, //6122 #FULLWIDTH RIGHT PARENTHESIS + {0xA3AA, 0xFF0A}, //6123 #FULLWIDTH ASTERISK + {0xA3AB, 0xFF0B}, //6124 #FULLWIDTH PLUS SIGN + {0xA3AC, 0xFF0C}, //6125 #FULLWIDTH COMMA + {0xA3AD, 0xFF0D}, //6126 #FULLWIDTH HYPHEN-MINUS + {0xA3AE, 0xFF0E}, //6127 #FULLWIDTH FULL STOP + {0xA3AF, 0xFF0F}, //6128 #FULLWIDTH SOLIDUS + {0xA3B0, 0xFF10}, //6129 #FULLWIDTH DIGIT ZERO + {0xA3B1, 0xFF11}, //6130 #FULLWIDTH DIGIT ONE + {0xA3B2, 0xFF12}, //6131 #FULLWIDTH DIGIT TWO + {0xA3B3, 0xFF13}, //6132 #FULLWIDTH DIGIT THREE + {0xA3B4, 0xFF14}, //6133 #FULLWIDTH DIGIT FOUR + {0xA3B5, 0xFF15}, //6134 #FULLWIDTH DIGIT FIVE + {0xA3B6, 0xFF16}, //6135 #FULLWIDTH DIGIT SIX + {0xA3B7, 0xFF17}, //6136 #FULLWIDTH DIGIT SEVEN + {0xA3B8, 0xFF18}, //6137 #FULLWIDTH DIGIT EIGHT + {0xA3B9, 0xFF19}, //6138 #FULLWIDTH DIGIT NINE + {0xA3BA, 0xFF1A}, //6139 #FULLWIDTH COLON + {0xA3BB, 0xFF1B}, //6140 #FULLWIDTH SEMICOLON + {0xA3BC, 0xFF1C}, //6141 #FULLWIDTH LESS-THAN SIGN + {0xA3BD, 0xFF1D}, //6142 #FULLWIDTH EQUALS SIGN + {0xA3BE, 0xFF1E}, //6143 #FULLWIDTH GREATER-THAN SIGN + {0xA3BF, 0xFF1F}, //6144 #FULLWIDTH QUESTION MARK + {0xA3C0, 0xFF20}, //6145 #FULLWIDTH COMMERCIAL AT + {0xA3C1, 0xFF21}, //6146 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA3C2, 0xFF22}, //6147 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA3C3, 0xFF23}, //6148 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA3C4, 0xFF24}, //6149 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA3C5, 0xFF25}, //6150 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA3C6, 0xFF26}, //6151 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA3C7, 0xFF27}, //6152 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA3C8, 0xFF28}, //6153 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA3C9, 0xFF29}, //6154 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA3CA, 0xFF2A}, //6155 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA3CB, 0xFF2B}, //6156 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA3CC, 0xFF2C}, //6157 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA3CD, 0xFF2D}, //6158 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA3CE, 0xFF2E}, //6159 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA3CF, 0xFF2F}, //6160 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA3D0, 0xFF30}, //6161 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA3D1, 0xFF31}, //6162 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA3D2, 0xFF32}, //6163 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA3D3, 0xFF33}, //6164 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA3D4, 0xFF34}, //6165 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA3D5, 0xFF35}, //6166 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA3D6, 0xFF36}, //6167 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA3D7, 0xFF37}, //6168 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA3D8, 0xFF38}, //6169 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA3D9, 0xFF39}, //6170 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA3DA, 0xFF3A}, //6171 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA3DB, 0xFF3B}, //6172 #FULLWIDTH LEFT SQUARE BRACKET + {0xA3DC, 0xFFE6}, //6173 #FULLWIDTH WON SIGN + {0xA3DD, 0xFF3D}, //6174 #FULLWIDTH RIGHT SQUARE BRACKET + {0xA3DE, 0xFF3E}, //6175 #FULLWIDTH CIRCUMFLEX ACCENT + {0xA3DF, 0xFF3F}, //6176 #FULLWIDTH LOW LINE + {0xA3E0, 0xFF40}, //6177 #FULLWIDTH GRAVE ACCENT + {0xA3E1, 0xFF41}, //6178 #FULLWIDTH LATIN SMALL LETTER A + {0xA3E2, 0xFF42}, //6179 #FULLWIDTH LATIN SMALL LETTER B + {0xA3E3, 0xFF43}, //6180 #FULLWIDTH LATIN SMALL LETTER C + {0xA3E4, 0xFF44}, //6181 #FULLWIDTH LATIN SMALL LETTER D + {0xA3E5, 0xFF45}, //6182 #FULLWIDTH LATIN SMALL LETTER E + {0xA3E6, 0xFF46}, //6183 #FULLWIDTH LATIN SMALL LETTER F + {0xA3E7, 0xFF47}, //6184 #FULLWIDTH LATIN SMALL LETTER G + {0xA3E8, 0xFF48}, //6185 #FULLWIDTH LATIN SMALL LETTER H + {0xA3E9, 0xFF49}, //6186 #FULLWIDTH LATIN SMALL LETTER I + {0xA3EA, 0xFF4A}, //6187 #FULLWIDTH LATIN SMALL LETTER J + {0xA3EB, 0xFF4B}, //6188 #FULLWIDTH LATIN SMALL LETTER K + {0xA3EC, 0xFF4C}, //6189 #FULLWIDTH LATIN SMALL LETTER L + {0xA3ED, 0xFF4D}, //6190 #FULLWIDTH LATIN SMALL LETTER M + {0xA3EE, 0xFF4E}, //6191 #FULLWIDTH LATIN SMALL LETTER N + {0xA3EF, 0xFF4F}, //6192 #FULLWIDTH LATIN SMALL LETTER O + {0xA3F0, 0xFF50}, //6193 #FULLWIDTH LATIN SMALL LETTER P + {0xA3F1, 0xFF51}, //6194 #FULLWIDTH LATIN SMALL LETTER Q + {0xA3F2, 0xFF52}, //6195 #FULLWIDTH LATIN SMALL LETTER R + {0xA3F3, 0xFF53}, //6196 #FULLWIDTH LATIN SMALL LETTER S + {0xA3F4, 0xFF54}, //6197 #FULLWIDTH LATIN SMALL LETTER T + {0xA3F5, 0xFF55}, //6198 #FULLWIDTH LATIN SMALL LETTER U + {0xA3F6, 0xFF56}, //6199 #FULLWIDTH LATIN SMALL LETTER V + {0xA3F7, 0xFF57}, //6200 #FULLWIDTH LATIN SMALL LETTER W + {0xA3F8, 0xFF58}, //6201 #FULLWIDTH LATIN SMALL LETTER X + {0xA3F9, 0xFF59}, //6202 #FULLWIDTH LATIN SMALL LETTER Y + {0xA3FA, 0xFF5A}, //6203 #FULLWIDTH LATIN SMALL LETTER Z + {0xA3FB, 0xFF5B}, //6204 #FULLWIDTH LEFT CURLY BRACKET + {0xA3FC, 0xFF5C}, //6205 #FULLWIDTH VERTICAL LINE + {0xA3FD, 0xFF5D}, //6206 #FULLWIDTH RIGHT CURLY BRACKET + {0xA3FE, 0xFFE3}, //6207 #FULLWIDTH MACRON + {0xA441, 0xC9DE}, //6208 #HANGUL SYLLABLE SSANGCIEUC A SSANGKIYEOK + {0xA442, 0xC9DF}, //6209 #HANGUL SYLLABLE SSANGCIEUC A KIYEOKSIOS + {0xA443, 0xC9E1}, //6210 #HANGUL SYLLABLE SSANGCIEUC A NIEUNCIEUC + {0xA444, 0xC9E3}, //6211 #HANGUL SYLLABLE SSANGCIEUC A TIKEUT + {0xA445, 0xC9E5}, //6212 #HANGUL SYLLABLE SSANGCIEUC A RIEULKIYEOK + {0xA446, 0xC9E6}, //6213 #HANGUL SYLLABLE SSANGCIEUC A RIEULMIEUM + {0xA447, 0xC9E8}, //6214 #HANGUL SYLLABLE SSANGCIEUC A RIEULSIOS + {0xA448, 0xC9E9}, //6215 #HANGUL SYLLABLE SSANGCIEUC A RIEULTHIEUTH + {0xA449, 0xC9EA}, //6216 #HANGUL SYLLABLE SSANGCIEUC A RIEULPHIEUPH + {0xA44A, 0xC9EB}, //6217 #HANGUL SYLLABLE SSANGCIEUC A RIEULHIEUH + {0xA44B, 0xC9EE}, //6218 #HANGUL SYLLABLE SSANGCIEUC A PIEUPSIOS + {0xA44C, 0xC9F2}, //6219 #HANGUL SYLLABLE SSANGCIEUC A CIEUC + {0xA44D, 0xC9F3}, //6220 #HANGUL SYLLABLE SSANGCIEUC A CHIEUCH + {0xA44E, 0xC9F4}, //6221 #HANGUL SYLLABLE SSANGCIEUC A KHIEUKH + {0xA44F, 0xC9F5}, //6222 #HANGUL SYLLABLE SSANGCIEUC A THIEUTH + {0xA450, 0xC9F6}, //6223 #HANGUL SYLLABLE SSANGCIEUC A PHIEUPH + {0xA451, 0xC9F7}, //6224 #HANGUL SYLLABLE SSANGCIEUC A HIEUH + {0xA452, 0xC9FA}, //6225 #HANGUL SYLLABLE SSANGCIEUC AE SSANGKIYEOK + {0xA453, 0xC9FB}, //6226 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOKSIOS + {0xA454, 0xC9FD}, //6227 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNCIEUC + {0xA455, 0xC9FE}, //6228 #HANGUL SYLLABLE SSANGCIEUC AE NIEUNHIEUH + {0xA456, 0xC9FF}, //6229 #HANGUL SYLLABLE SSANGCIEUC AE TIKEUT + {0xA457, 0xCA01}, //6230 #HANGUL SYLLABLE SSANGCIEUC AE RIEULKIYEOK + {0xA458, 0xCA02}, //6231 #HANGUL SYLLABLE SSANGCIEUC AE RIEULMIEUM + {0xA459, 0xCA03}, //6232 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPIEUP + {0xA45A, 0xCA04}, //6233 #HANGUL SYLLABLE SSANGCIEUC AE RIEULSIOS + {0xA461, 0xCA05}, //6234 #HANGUL SYLLABLE SSANGCIEUC AE RIEULTHIEUTH + {0xA462, 0xCA06}, //6235 #HANGUL SYLLABLE SSANGCIEUC AE RIEULPHIEUPH + {0xA463, 0xCA07}, //6236 #HANGUL SYLLABLE SSANGCIEUC AE RIEULHIEUH + {0xA464, 0xCA0A}, //6237 #HANGUL SYLLABLE SSANGCIEUC AE PIEUPSIOS + {0xA465, 0xCA0E}, //6238 #HANGUL SYLLABLE SSANGCIEUC AE CIEUC + {0xA466, 0xCA0F}, //6239 #HANGUL SYLLABLE SSANGCIEUC AE CHIEUCH + {0xA467, 0xCA10}, //6240 #HANGUL SYLLABLE SSANGCIEUC AE KHIEUKH + {0xA468, 0xCA11}, //6241 #HANGUL SYLLABLE SSANGCIEUC AE THIEUTH + {0xA469, 0xCA12}, //6242 #HANGUL SYLLABLE SSANGCIEUC AE PHIEUPH + {0xA46A, 0xCA13}, //6243 #HANGUL SYLLABLE SSANGCIEUC AE HIEUH + {0xA46B, 0xCA15}, //6244 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOK + {0xA46C, 0xCA16}, //6245 #HANGUL SYLLABLE SSANGCIEUC YA SSANGKIYEOK + {0xA46D, 0xCA17}, //6246 #HANGUL SYLLABLE SSANGCIEUC YA KIYEOKSIOS + {0xA46E, 0xCA19}, //6247 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNCIEUC + {0xA46F, 0xCA1A}, //6248 #HANGUL SYLLABLE SSANGCIEUC YA NIEUNHIEUH + {0xA470, 0xCA1B}, //6249 #HANGUL SYLLABLE SSANGCIEUC YA TIKEUT + {0xA471, 0xCA1C}, //6250 #HANGUL SYLLABLE SSANGCIEUC YA RIEUL + {0xA472, 0xCA1D}, //6251 #HANGUL SYLLABLE SSANGCIEUC YA RIEULKIYEOK + {0xA473, 0xCA1E}, //6252 #HANGUL SYLLABLE SSANGCIEUC YA RIEULMIEUM + {0xA474, 0xCA1F}, //6253 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPIEUP + {0xA475, 0xCA20}, //6254 #HANGUL SYLLABLE SSANGCIEUC YA RIEULSIOS + {0xA476, 0xCA21}, //6255 #HANGUL SYLLABLE SSANGCIEUC YA RIEULTHIEUTH + {0xA477, 0xCA22}, //6256 #HANGUL SYLLABLE SSANGCIEUC YA RIEULPHIEUPH + {0xA478, 0xCA23}, //6257 #HANGUL SYLLABLE SSANGCIEUC YA RIEULHIEUH + {0xA479, 0xCA24}, //6258 #HANGUL SYLLABLE SSANGCIEUC YA MIEUM + {0xA47A, 0xCA25}, //6259 #HANGUL SYLLABLE SSANGCIEUC YA PIEUP + {0xA481, 0xCA26}, //6260 #HANGUL SYLLABLE SSANGCIEUC YA PIEUPSIOS + {0xA482, 0xCA27}, //6261 #HANGUL SYLLABLE SSANGCIEUC YA SIOS + {0xA483, 0xCA28}, //6262 #HANGUL SYLLABLE SSANGCIEUC YA SSANGSIOS + {0xA484, 0xCA2A}, //6263 #HANGUL SYLLABLE SSANGCIEUC YA CIEUC + {0xA485, 0xCA2B}, //6264 #HANGUL SYLLABLE SSANGCIEUC YA CHIEUCH + {0xA486, 0xCA2C}, //6265 #HANGUL SYLLABLE SSANGCIEUC YA KHIEUKH + {0xA487, 0xCA2D}, //6266 #HANGUL SYLLABLE SSANGCIEUC YA THIEUTH + {0xA488, 0xCA2E}, //6267 #HANGUL SYLLABLE SSANGCIEUC YA PHIEUPH + {0xA489, 0xCA2F}, //6268 #HANGUL SYLLABLE SSANGCIEUC YA HIEUH + {0xA48A, 0xCA30}, //6269 #HANGUL SYLLABLE SSANGCIEUC YAE + {0xA48B, 0xCA31}, //6270 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOK + {0xA48C, 0xCA32}, //6271 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGKIYEOK + {0xA48D, 0xCA33}, //6272 #HANGUL SYLLABLE SSANGCIEUC YAE KIYEOKSIOS + {0xA48E, 0xCA34}, //6273 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUN + {0xA48F, 0xCA35}, //6274 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNCIEUC + {0xA490, 0xCA36}, //6275 #HANGUL SYLLABLE SSANGCIEUC YAE NIEUNHIEUH + {0xA491, 0xCA37}, //6276 #HANGUL SYLLABLE SSANGCIEUC YAE TIKEUT + {0xA492, 0xCA38}, //6277 #HANGUL SYLLABLE SSANGCIEUC YAE RIEUL + {0xA493, 0xCA39}, //6278 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULKIYEOK + {0xA494, 0xCA3A}, //6279 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULMIEUM + {0xA495, 0xCA3B}, //6280 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPIEUP + {0xA496, 0xCA3C}, //6281 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULSIOS + {0xA497, 0xCA3D}, //6282 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULTHIEUTH + {0xA498, 0xCA3E}, //6283 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULPHIEUPH + {0xA499, 0xCA3F}, //6284 #HANGUL SYLLABLE SSANGCIEUC YAE RIEULHIEUH + {0xA49A, 0xCA40}, //6285 #HANGUL SYLLABLE SSANGCIEUC YAE MIEUM + {0xA49B, 0xCA41}, //6286 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUP + {0xA49C, 0xCA42}, //6287 #HANGUL SYLLABLE SSANGCIEUC YAE PIEUPSIOS + {0xA49D, 0xCA43}, //6288 #HANGUL SYLLABLE SSANGCIEUC YAE SIOS + {0xA49E, 0xCA44}, //6289 #HANGUL SYLLABLE SSANGCIEUC YAE SSANGSIOS + {0xA49F, 0xCA45}, //6290 #HANGUL SYLLABLE SSANGCIEUC YAE IEUNG + {0xA4A0, 0xCA46}, //6291 #HANGUL SYLLABLE SSANGCIEUC YAE CIEUC + {0xA4A1, 0x3131}, //6292 #HANGUL LETTER KIYEOK + {0xA4A2, 0x3132}, //6293 #HANGUL LETTER SSANGKIYEOK + {0xA4A3, 0x3133}, //6294 #HANGUL LETTER KIYEOK-SIOS + {0xA4A4, 0x3134}, //6295 #HANGUL LETTER NIEUN + {0xA4A5, 0x3135}, //6296 #HANGUL LETTER NIEUN-CIEUC + {0xA4A6, 0x3136}, //6297 #HANGUL LETTER NIEUN-HIEUH + {0xA4A7, 0x3137}, //6298 #HANGUL LETTER TIKEUT + {0xA4A8, 0x3138}, //6299 #HANGUL LETTER SSANGTIKEUT + {0xA4A9, 0x3139}, //6300 #HANGUL LETTER RIEUL + {0xA4AA, 0x313A}, //6301 #HANGUL LETTER RIEUL-KIYEOK + {0xA4AB, 0x313B}, //6302 #HANGUL LETTER RIEUL-MIEUM + {0xA4AC, 0x313C}, //6303 #HANGUL LETTER RIEUL-PIEUP + {0xA4AD, 0x313D}, //6304 #HANGUL LETTER RIEUL-SIOS + {0xA4AE, 0x313E}, //6305 #HANGUL LETTER RIEUL-THIEUTH + {0xA4AF, 0x313F}, //6306 #HANGUL LETTER RIEUL-PHIEUPH + {0xA4B0, 0x3140}, //6307 #HANGUL LETTER RIEUL-HIEUH + {0xA4B1, 0x3141}, //6308 #HANGUL LETTER MIEUM + {0xA4B2, 0x3142}, //6309 #HANGUL LETTER PIEUP + {0xA4B3, 0x3143}, //6310 #HANGUL LETTER SSANGPIEUP + {0xA4B4, 0x3144}, //6311 #HANGUL LETTER PIEUP-SIOS + {0xA4B5, 0x3145}, //6312 #HANGUL LETTER SIOS + {0xA4B6, 0x3146}, //6313 #HANGUL LETTER SSANGSIOS + {0xA4B7, 0x3147}, //6314 #HANGUL LETTER IEUNG + {0xA4B8, 0x3148}, //6315 #HANGUL LETTER CIEUC + {0xA4B9, 0x3149}, //6316 #HANGUL LETTER SSANGCIEUC + {0xA4BA, 0x314A}, //6317 #HANGUL LETTER CHIEUCH + {0xA4BB, 0x314B}, //6318 #HANGUL LETTER KHIEUKH + {0xA4BC, 0x314C}, //6319 #HANGUL LETTER THIEUTH + {0xA4BD, 0x314D}, //6320 #HANGUL LETTER PHIEUPH + {0xA4BE, 0x314E}, //6321 #HANGUL LETTER HIEUH + {0xA4BF, 0x314F}, //6322 #HANGUL LETTER A + {0xA4C0, 0x3150}, //6323 #HANGUL LETTER AE + {0xA4C1, 0x3151}, //6324 #HANGUL LETTER YA + {0xA4C2, 0x3152}, //6325 #HANGUL LETTER YAE + {0xA4C3, 0x3153}, //6326 #HANGUL LETTER EO + {0xA4C4, 0x3154}, //6327 #HANGUL LETTER E + {0xA4C5, 0x3155}, //6328 #HANGUL LETTER YEO + {0xA4C6, 0x3156}, //6329 #HANGUL LETTER YE + {0xA4C7, 0x3157}, //6330 #HANGUL LETTER O + {0xA4C8, 0x3158}, //6331 #HANGUL LETTER WA + {0xA4C9, 0x3159}, //6332 #HANGUL LETTER WAE + {0xA4CA, 0x315A}, //6333 #HANGUL LETTER OE + {0xA4CB, 0x315B}, //6334 #HANGUL LETTER YO + {0xA4CC, 0x315C}, //6335 #HANGUL LETTER U + {0xA4CD, 0x315D}, //6336 #HANGUL LETTER WEO + {0xA4CE, 0x315E}, //6337 #HANGUL LETTER WE + {0xA4CF, 0x315F}, //6338 #HANGUL LETTER WI + {0xA4D0, 0x3160}, //6339 #HANGUL LETTER YU + {0xA4D1, 0x3161}, //6340 #HANGUL LETTER EU + {0xA4D2, 0x3162}, //6341 #HANGUL LETTER YI + {0xA4D3, 0x3163}, //6342 #HANGUL LETTER I + {0xA4D4, 0x3164}, //6343 #HANGUL FILLER + {0xA4D5, 0x3165}, //6344 #HANGUL LETTER SSANGNIEUN + {0xA4D6, 0x3166}, //6345 #HANGUL LETTER NIEUN-TIKEUT + {0xA4D7, 0x3167}, //6346 #HANGUL LETTER NIEUN-SIOS + {0xA4D8, 0x3168}, //6347 #HANGUL LETTER NIEUN-PANSIOS + {0xA4D9, 0x3169}, //6348 #HANGUL LETTER RIEUL-KIYEOK-SIOS + {0xA4DA, 0x316A}, //6349 #HANGUL LETTER RIEUL-TIKEUT + {0xA4DB, 0x316B}, //6350 #HANGUL LETTER RIEUL-PIEUP-SIOS + {0xA4DC, 0x316C}, //6351 #HANGUL LETTER RIEUL-PANSIOS + {0xA4DD, 0x316D}, //6352 #HANGUL LETTER RIEUL-YEORINHIEUH + {0xA4DE, 0x316E}, //6353 #HANGUL LETTER MIEUM-PIEUP + {0xA4DF, 0x316F}, //6354 #HANGUL LETTER MIEUM-SIOS + {0xA4E0, 0x3170}, //6355 #HANGUL LETTER MIEUM-PANSIOS + {0xA4E1, 0x3171}, //6356 #HANGUL LETTER KAPYEOUNMIEUM + {0xA4E2, 0x3172}, //6357 #HANGUL LETTER PIEUP-KIYEOK + {0xA4E3, 0x3173}, //6358 #HANGUL LETTER PIEUP-TIKEUT + {0xA4E4, 0x3174}, //6359 #HANGUL LETTER PIEUP-SIOS-KIYEOK + {0xA4E5, 0x3175}, //6360 #HANGUL LETTER PIEUP-SIOS-TIKEUT + {0xA4E6, 0x3176}, //6361 #HANGUL LETTER PIEUP-CIEUC + {0xA4E7, 0x3177}, //6362 #HANGUL LETTER PIEUP-THIEUTH + {0xA4E8, 0x3178}, //6363 #HANGUL LETTER KAPYEOUNPIEUP + {0xA4E9, 0x3179}, //6364 #HANGUL LETTER KAPYEOUNSSANGPIEUP + {0xA4EA, 0x317A}, //6365 #HANGUL LETTER SIOS-KIYEOK + {0xA4EB, 0x317B}, //6366 #HANGUL LETTER SIOS-NIEUN + {0xA4EC, 0x317C}, //6367 #HANGUL LETTER SIOS-TIKEUT + {0xA4ED, 0x317D}, //6368 #HANGUL LETTER SIOS-PIEUP + {0xA4EE, 0x317E}, //6369 #HANGUL LETTER SIOS-CIEUC + {0xA4EF, 0x317F}, //6370 #HANGUL LETTER PANSIOS + {0xA4F0, 0x3180}, //6371 #HANGUL LETTER SSANGIEUNG + {0xA4F1, 0x3181}, //6372 #HANGUL LETTER YESIEUNG + {0xA4F2, 0x3182}, //6373 #HANGUL LETTER YESIEUNG-SIOS + {0xA4F3, 0x3183}, //6374 #HANGUL LETTER YESIEUNG-PANSIOS + {0xA4F4, 0x3184}, //6375 #HANGUL LETTER KAPYEOUNPHIEUPH + {0xA4F5, 0x3185}, //6376 #HANGUL LETTER SSANGHIEUH + {0xA4F6, 0x3186}, //6377 #HANGUL LETTER YEORINHIEUH + {0xA4F7, 0x3187}, //6378 #HANGUL LETTER YO-YA + {0xA4F8, 0x3188}, //6379 #HANGUL LETTER YO-YAE + {0xA4F9, 0x3189}, //6380 #HANGUL LETTER YO-I + {0xA4FA, 0x318A}, //6381 #HANGUL LETTER YU-YEO + {0xA4FB, 0x318B}, //6382 #HANGUL LETTER YU-YE + {0xA4FC, 0x318C}, //6383 #HANGUL LETTER YU-I + {0xA4FD, 0x318D}, //6384 #HANGUL LETTER ARAEA + {0xA4FE, 0x318E}, //6385 #HANGUL LETTER ARAEAE + {0xA541, 0xCA47}, //6386 #HANGUL SYLLABLE SSANGCIEUC YAE CHIEUCH + {0xA542, 0xCA48}, //6387 #HANGUL SYLLABLE SSANGCIEUC YAE KHIEUKH + {0xA543, 0xCA49}, //6388 #HANGUL SYLLABLE SSANGCIEUC YAE THIEUTH + {0xA544, 0xCA4A}, //6389 #HANGUL SYLLABLE SSANGCIEUC YAE PHIEUPH + {0xA545, 0xCA4B}, //6390 #HANGUL SYLLABLE SSANGCIEUC YAE HIEUH + {0xA546, 0xCA4E}, //6391 #HANGUL SYLLABLE SSANGCIEUC EO SSANGKIYEOK + {0xA547, 0xCA4F}, //6392 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOKSIOS + {0xA548, 0xCA51}, //6393 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNCIEUC + {0xA549, 0xCA52}, //6394 #HANGUL SYLLABLE SSANGCIEUC EO NIEUNHIEUH + {0xA54A, 0xCA53}, //6395 #HANGUL SYLLABLE SSANGCIEUC EO TIKEUT + {0xA54B, 0xCA55}, //6396 #HANGUL SYLLABLE SSANGCIEUC EO RIEULKIYEOK + {0xA54C, 0xCA56}, //6397 #HANGUL SYLLABLE SSANGCIEUC EO RIEULMIEUM + {0xA54D, 0xCA57}, //6398 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPIEUP + {0xA54E, 0xCA58}, //6399 #HANGUL SYLLABLE SSANGCIEUC EO RIEULSIOS + {0xA54F, 0xCA59}, //6400 #HANGUL SYLLABLE SSANGCIEUC EO RIEULTHIEUTH + {0xA550, 0xCA5A}, //6401 #HANGUL SYLLABLE SSANGCIEUC EO RIEULPHIEUPH + {0xA551, 0xCA5B}, //6402 #HANGUL SYLLABLE SSANGCIEUC EO RIEULHIEUH + {0xA552, 0xCA5E}, //6403 #HANGUL SYLLABLE SSANGCIEUC EO PIEUPSIOS + {0xA553, 0xCA62}, //6404 #HANGUL SYLLABLE SSANGCIEUC EO CIEUC + {0xA554, 0xCA63}, //6405 #HANGUL SYLLABLE SSANGCIEUC EO CHIEUCH + {0xA555, 0xCA64}, //6406 #HANGUL SYLLABLE SSANGCIEUC EO KHIEUKH + {0xA556, 0xCA65}, //6407 #HANGUL SYLLABLE SSANGCIEUC EO THIEUTH + {0xA557, 0xCA66}, //6408 #HANGUL SYLLABLE SSANGCIEUC EO PHIEUPH + {0xA558, 0xCA67}, //6409 #HANGUL SYLLABLE SSANGCIEUC EO HIEUH + {0xA559, 0xCA69}, //6410 #HANGUL SYLLABLE SSANGCIEUC E KIYEOK + {0xA55A, 0xCA6A}, //6411 #HANGUL SYLLABLE SSANGCIEUC E SSANGKIYEOK + {0xA561, 0xCA6B}, //6412 #HANGUL SYLLABLE SSANGCIEUC E KIYEOKSIOS + {0xA562, 0xCA6C}, //6413 #HANGUL SYLLABLE SSANGCIEUC E NIEUN + {0xA563, 0xCA6D}, //6414 #HANGUL SYLLABLE SSANGCIEUC E NIEUNCIEUC + {0xA564, 0xCA6E}, //6415 #HANGUL SYLLABLE SSANGCIEUC E NIEUNHIEUH + {0xA565, 0xCA6F}, //6416 #HANGUL SYLLABLE SSANGCIEUC E TIKEUT + {0xA566, 0xCA70}, //6417 #HANGUL SYLLABLE SSANGCIEUC E RIEUL + {0xA567, 0xCA71}, //6418 #HANGUL SYLLABLE SSANGCIEUC E RIEULKIYEOK + {0xA568, 0xCA72}, //6419 #HANGUL SYLLABLE SSANGCIEUC E RIEULMIEUM + {0xA569, 0xCA73}, //6420 #HANGUL SYLLABLE SSANGCIEUC E RIEULPIEUP + {0xA56A, 0xCA74}, //6421 #HANGUL SYLLABLE SSANGCIEUC E RIEULSIOS + {0xA56B, 0xCA75}, //6422 #HANGUL SYLLABLE SSANGCIEUC E RIEULTHIEUTH + {0xA56C, 0xCA76}, //6423 #HANGUL SYLLABLE SSANGCIEUC E RIEULPHIEUPH + {0xA56D, 0xCA77}, //6424 #HANGUL SYLLABLE SSANGCIEUC E RIEULHIEUH + {0xA56E, 0xCA78}, //6425 #HANGUL SYLLABLE SSANGCIEUC E MIEUM + {0xA56F, 0xCA79}, //6426 #HANGUL SYLLABLE SSANGCIEUC E PIEUP + {0xA570, 0xCA7A}, //6427 #HANGUL SYLLABLE SSANGCIEUC E PIEUPSIOS + {0xA571, 0xCA7B}, //6428 #HANGUL SYLLABLE SSANGCIEUC E SIOS + {0xA572, 0xCA7C}, //6429 #HANGUL SYLLABLE SSANGCIEUC E SSANGSIOS + {0xA573, 0xCA7E}, //6430 #HANGUL SYLLABLE SSANGCIEUC E CIEUC + {0xA574, 0xCA7F}, //6431 #HANGUL SYLLABLE SSANGCIEUC E CHIEUCH + {0xA575, 0xCA80}, //6432 #HANGUL SYLLABLE SSANGCIEUC E KHIEUKH + {0xA576, 0xCA81}, //6433 #HANGUL SYLLABLE SSANGCIEUC E THIEUTH + {0xA577, 0xCA82}, //6434 #HANGUL SYLLABLE SSANGCIEUC E PHIEUPH + {0xA578, 0xCA83}, //6435 #HANGUL SYLLABLE SSANGCIEUC E HIEUH + {0xA579, 0xCA85}, //6436 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOK + {0xA57A, 0xCA86}, //6437 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGKIYEOK + {0xA581, 0xCA87}, //6438 #HANGUL SYLLABLE SSANGCIEUC YEO KIYEOKSIOS + {0xA582, 0xCA88}, //6439 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUN + {0xA583, 0xCA89}, //6440 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNCIEUC + {0xA584, 0xCA8A}, //6441 #HANGUL SYLLABLE SSANGCIEUC YEO NIEUNHIEUH + {0xA585, 0xCA8B}, //6442 #HANGUL SYLLABLE SSANGCIEUC YEO TIKEUT + {0xA586, 0xCA8C}, //6443 #HANGUL SYLLABLE SSANGCIEUC YEO RIEUL + {0xA587, 0xCA8D}, //6444 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULKIYEOK + {0xA588, 0xCA8E}, //6445 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULMIEUM + {0xA589, 0xCA8F}, //6446 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPIEUP + {0xA58A, 0xCA90}, //6447 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULSIOS + {0xA58B, 0xCA91}, //6448 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULTHIEUTH + {0xA58C, 0xCA92}, //6449 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULPHIEUPH + {0xA58D, 0xCA93}, //6450 #HANGUL SYLLABLE SSANGCIEUC YEO RIEULHIEUH + {0xA58E, 0xCA94}, //6451 #HANGUL SYLLABLE SSANGCIEUC YEO MIEUM + {0xA58F, 0xCA95}, //6452 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUP + {0xA590, 0xCA96}, //6453 #HANGUL SYLLABLE SSANGCIEUC YEO PIEUPSIOS + {0xA591, 0xCA97}, //6454 #HANGUL SYLLABLE SSANGCIEUC YEO SIOS + {0xA592, 0xCA99}, //6455 #HANGUL SYLLABLE SSANGCIEUC YEO IEUNG + {0xA593, 0xCA9A}, //6456 #HANGUL SYLLABLE SSANGCIEUC YEO CIEUC + {0xA594, 0xCA9B}, //6457 #HANGUL SYLLABLE SSANGCIEUC YEO CHIEUCH + {0xA595, 0xCA9C}, //6458 #HANGUL SYLLABLE SSANGCIEUC YEO KHIEUKH + {0xA596, 0xCA9D}, //6459 #HANGUL SYLLABLE SSANGCIEUC YEO THIEUTH + {0xA597, 0xCA9E}, //6460 #HANGUL SYLLABLE SSANGCIEUC YEO PHIEUPH + {0xA598, 0xCA9F}, //6461 #HANGUL SYLLABLE SSANGCIEUC YEO HIEUH + {0xA599, 0xCAA0}, //6462 #HANGUL SYLLABLE SSANGCIEUC YE + {0xA59A, 0xCAA1}, //6463 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOK + {0xA59B, 0xCAA2}, //6464 #HANGUL SYLLABLE SSANGCIEUC YE SSANGKIYEOK + {0xA59C, 0xCAA3}, //6465 #HANGUL SYLLABLE SSANGCIEUC YE KIYEOKSIOS + {0xA59D, 0xCAA4}, //6466 #HANGUL SYLLABLE SSANGCIEUC YE NIEUN + {0xA59E, 0xCAA5}, //6467 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNCIEUC + {0xA59F, 0xCAA6}, //6468 #HANGUL SYLLABLE SSANGCIEUC YE NIEUNHIEUH + {0xA5A0, 0xCAA7}, //6469 #HANGUL SYLLABLE SSANGCIEUC YE TIKEUT + {0xA5A1, 0x2170}, //6470 #SMALL ROMAN NUMERAL ONE + {0xA5A2, 0x2171}, //6471 #SMALL ROMAN NUMERAL TWO + {0xA5A3, 0x2172}, //6472 #SMALL ROMAN NUMERAL THREE + {0xA5A4, 0x2173}, //6473 #SMALL ROMAN NUMERAL FOUR + {0xA5A5, 0x2174}, //6474 #SMALL ROMAN NUMERAL FIVE + {0xA5A6, 0x2175}, //6475 #SMALL ROMAN NUMERAL SIX + {0xA5A7, 0x2176}, //6476 #SMALL ROMAN NUMERAL SEVEN + {0xA5A8, 0x2177}, //6477 #SMALL ROMAN NUMERAL EIGHT + {0xA5A9, 0x2178}, //6478 #SMALL ROMAN NUMERAL NINE + {0xA5AA, 0x2179}, //6479 #SMALL ROMAN NUMERAL TEN + {0xA5B0, 0x2160}, //6480 #ROMAN NUMERAL ONE + {0xA5B1, 0x2161}, //6481 #ROMAN NUMERAL TWO + {0xA5B2, 0x2162}, //6482 #ROMAN NUMERAL THREE + {0xA5B3, 0x2163}, //6483 #ROMAN NUMERAL FOUR + {0xA5B4, 0x2164}, //6484 #ROMAN NUMERAL FIVE + {0xA5B5, 0x2165}, //6485 #ROMAN NUMERAL SIX + {0xA5B6, 0x2166}, //6486 #ROMAN NUMERAL SEVEN + {0xA5B7, 0x2167}, //6487 #ROMAN NUMERAL EIGHT + {0xA5B8, 0x2168}, //6488 #ROMAN NUMERAL NINE + {0xA5B9, 0x2169}, //6489 #ROMAN NUMERAL TEN + {0xA5C1, 0x0391}, //6490 #GREEK CAPITAL LETTER ALPHA + {0xA5C2, 0x0392}, //6491 #GREEK CAPITAL LETTER BETA + {0xA5C3, 0x0393}, //6492 #GREEK CAPITAL LETTER GAMMA + {0xA5C4, 0x0394}, //6493 #GREEK CAPITAL LETTER DELTA + {0xA5C5, 0x0395}, //6494 #GREEK CAPITAL LETTER EPSILON + {0xA5C6, 0x0396}, //6495 #GREEK CAPITAL LETTER ZETA + {0xA5C7, 0x0397}, //6496 #GREEK CAPITAL LETTER ETA + {0xA5C8, 0x0398}, //6497 #GREEK CAPITAL LETTER THETA + {0xA5C9, 0x0399}, //6498 #GREEK CAPITAL LETTER IOTA + {0xA5CA, 0x039A}, //6499 #GREEK CAPITAL LETTER KAPPA + {0xA5CB, 0x039B}, //6500 #GREEK CAPITAL LETTER LAMDA + {0xA5CC, 0x039C}, //6501 #GREEK CAPITAL LETTER MU + {0xA5CD, 0x039D}, //6502 #GREEK CAPITAL LETTER NU + {0xA5CE, 0x039E}, //6503 #GREEK CAPITAL LETTER XI + {0xA5CF, 0x039F}, //6504 #GREEK CAPITAL LETTER OMICRON + {0xA5D0, 0x03A0}, //6505 #GREEK CAPITAL LETTER PI + {0xA5D1, 0x03A1}, //6506 #GREEK CAPITAL LETTER RHO + {0xA5D2, 0x03A3}, //6507 #GREEK CAPITAL LETTER SIGMA + {0xA5D3, 0x03A4}, //6508 #GREEK CAPITAL LETTER TAU + {0xA5D4, 0x03A5}, //6509 #GREEK CAPITAL LETTER UPSILON + {0xA5D5, 0x03A6}, //6510 #GREEK CAPITAL LETTER PHI + {0xA5D6, 0x03A7}, //6511 #GREEK CAPITAL LETTER CHI + {0xA5D7, 0x03A8}, //6512 #GREEK CAPITAL LETTER PSI + {0xA5D8, 0x03A9}, //6513 #GREEK CAPITAL LETTER OMEGA + {0xA5E1, 0x03B1}, //6514 #GREEK SMALL LETTER ALPHA + {0xA5E2, 0x03B2}, //6515 #GREEK SMALL LETTER BETA + {0xA5E3, 0x03B3}, //6516 #GREEK SMALL LETTER GAMMA + {0xA5E4, 0x03B4}, //6517 #GREEK SMALL LETTER DELTA + {0xA5E5, 0x03B5}, //6518 #GREEK SMALL LETTER EPSILON + {0xA5E6, 0x03B6}, //6519 #GREEK SMALL LETTER ZETA + {0xA5E7, 0x03B7}, //6520 #GREEK SMALL LETTER ETA + {0xA5E8, 0x03B8}, //6521 #GREEK SMALL LETTER THETA + {0xA5E9, 0x03B9}, //6522 #GREEK SMALL LETTER IOTA + {0xA5EA, 0x03BA}, //6523 #GREEK SMALL LETTER KAPPA + {0xA5EB, 0x03BB}, //6524 #GREEK SMALL LETTER LAMDA + {0xA5EC, 0x03BC}, //6525 #GREEK SMALL LETTER MU + {0xA5ED, 0x03BD}, //6526 #GREEK SMALL LETTER NU + {0xA5EE, 0x03BE}, //6527 #GREEK SMALL LETTER XI + {0xA5EF, 0x03BF}, //6528 #GREEK SMALL LETTER OMICRON + {0xA5F0, 0x03C0}, //6529 #GREEK SMALL LETTER PI + {0xA5F1, 0x03C1}, //6530 #GREEK SMALL LETTER RHO + {0xA5F2, 0x03C3}, //6531 #GREEK SMALL LETTER SIGMA + {0xA5F3, 0x03C4}, //6532 #GREEK SMALL LETTER TAU + {0xA5F4, 0x03C5}, //6533 #GREEK SMALL LETTER UPSILON + {0xA5F5, 0x03C6}, //6534 #GREEK SMALL LETTER PHI + {0xA5F6, 0x03C7}, //6535 #GREEK SMALL LETTER CHI + {0xA5F7, 0x03C8}, //6536 #GREEK SMALL LETTER PSI + {0xA5F8, 0x03C9}, //6537 #GREEK SMALL LETTER OMEGA + {0xA641, 0xCAA8}, //6538 #HANGUL SYLLABLE SSANGCIEUC YE RIEUL + {0xA642, 0xCAA9}, //6539 #HANGUL SYLLABLE SSANGCIEUC YE RIEULKIYEOK + {0xA643, 0xCAAA}, //6540 #HANGUL SYLLABLE SSANGCIEUC YE RIEULMIEUM + {0xA644, 0xCAAB}, //6541 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPIEUP + {0xA645, 0xCAAC}, //6542 #HANGUL SYLLABLE SSANGCIEUC YE RIEULSIOS + {0xA646, 0xCAAD}, //6543 #HANGUL SYLLABLE SSANGCIEUC YE RIEULTHIEUTH + {0xA647, 0xCAAE}, //6544 #HANGUL SYLLABLE SSANGCIEUC YE RIEULPHIEUPH + {0xA648, 0xCAAF}, //6545 #HANGUL SYLLABLE SSANGCIEUC YE RIEULHIEUH + {0xA649, 0xCAB0}, //6546 #HANGUL SYLLABLE SSANGCIEUC YE MIEUM + {0xA64A, 0xCAB1}, //6547 #HANGUL SYLLABLE SSANGCIEUC YE PIEUP + {0xA64B, 0xCAB2}, //6548 #HANGUL SYLLABLE SSANGCIEUC YE PIEUPSIOS + {0xA64C, 0xCAB3}, //6549 #HANGUL SYLLABLE SSANGCIEUC YE SIOS + {0xA64D, 0xCAB4}, //6550 #HANGUL SYLLABLE SSANGCIEUC YE SSANGSIOS + {0xA64E, 0xCAB5}, //6551 #HANGUL SYLLABLE SSANGCIEUC YE IEUNG + {0xA64F, 0xCAB6}, //6552 #HANGUL SYLLABLE SSANGCIEUC YE CIEUC + {0xA650, 0xCAB7}, //6553 #HANGUL SYLLABLE SSANGCIEUC YE CHIEUCH + {0xA651, 0xCAB8}, //6554 #HANGUL SYLLABLE SSANGCIEUC YE KHIEUKH + {0xA652, 0xCAB9}, //6555 #HANGUL SYLLABLE SSANGCIEUC YE THIEUTH + {0xA653, 0xCABA}, //6556 #HANGUL SYLLABLE SSANGCIEUC YE PHIEUPH + {0xA654, 0xCABB}, //6557 #HANGUL SYLLABLE SSANGCIEUC YE HIEUH + {0xA655, 0xCABE}, //6558 #HANGUL SYLLABLE SSANGCIEUC O SSANGKIYEOK + {0xA656, 0xCABF}, //6559 #HANGUL SYLLABLE SSANGCIEUC O KIYEOKSIOS + {0xA657, 0xCAC1}, //6560 #HANGUL SYLLABLE SSANGCIEUC O NIEUNCIEUC + {0xA658, 0xCAC2}, //6561 #HANGUL SYLLABLE SSANGCIEUC O NIEUNHIEUH + {0xA659, 0xCAC3}, //6562 #HANGUL SYLLABLE SSANGCIEUC O TIKEUT + {0xA65A, 0xCAC5}, //6563 #HANGUL SYLLABLE SSANGCIEUC O RIEULKIYEOK + {0xA661, 0xCAC6}, //6564 #HANGUL SYLLABLE SSANGCIEUC O RIEULMIEUM + {0xA662, 0xCAC7}, //6565 #HANGUL SYLLABLE SSANGCIEUC O RIEULPIEUP + {0xA663, 0xCAC8}, //6566 #HANGUL SYLLABLE SSANGCIEUC O RIEULSIOS + {0xA664, 0xCAC9}, //6567 #HANGUL SYLLABLE SSANGCIEUC O RIEULTHIEUTH + {0xA665, 0xCACA}, //6568 #HANGUL SYLLABLE SSANGCIEUC O RIEULPHIEUPH + {0xA666, 0xCACB}, //6569 #HANGUL SYLLABLE SSANGCIEUC O RIEULHIEUH + {0xA667, 0xCACE}, //6570 #HANGUL SYLLABLE SSANGCIEUC O PIEUPSIOS + {0xA668, 0xCAD0}, //6571 #HANGUL SYLLABLE SSANGCIEUC O SSANGSIOS + {0xA669, 0xCAD2}, //6572 #HANGUL SYLLABLE SSANGCIEUC O CIEUC + {0xA66A, 0xCAD4}, //6573 #HANGUL SYLLABLE SSANGCIEUC O KHIEUKH + {0xA66B, 0xCAD5}, //6574 #HANGUL SYLLABLE SSANGCIEUC O THIEUTH + {0xA66C, 0xCAD6}, //6575 #HANGUL SYLLABLE SSANGCIEUC O PHIEUPH + {0xA66D, 0xCAD7}, //6576 #HANGUL SYLLABLE SSANGCIEUC O HIEUH + {0xA66E, 0xCADA}, //6577 #HANGUL SYLLABLE SSANGCIEUC WA SSANGKIYEOK + {0xA66F, 0xCADB}, //6578 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOKSIOS + {0xA670, 0xCADC}, //6579 #HANGUL SYLLABLE SSANGCIEUC WA NIEUN + {0xA671, 0xCADD}, //6580 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNCIEUC + {0xA672, 0xCADE}, //6581 #HANGUL SYLLABLE SSANGCIEUC WA NIEUNHIEUH + {0xA673, 0xCADF}, //6582 #HANGUL SYLLABLE SSANGCIEUC WA TIKEUT + {0xA674, 0xCAE1}, //6583 #HANGUL SYLLABLE SSANGCIEUC WA RIEULKIYEOK + {0xA675, 0xCAE2}, //6584 #HANGUL SYLLABLE SSANGCIEUC WA RIEULMIEUM + {0xA676, 0xCAE3}, //6585 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPIEUP + {0xA677, 0xCAE4}, //6586 #HANGUL SYLLABLE SSANGCIEUC WA RIEULSIOS + {0xA678, 0xCAE5}, //6587 #HANGUL SYLLABLE SSANGCIEUC WA RIEULTHIEUTH + {0xA679, 0xCAE6}, //6588 #HANGUL SYLLABLE SSANGCIEUC WA RIEULPHIEUPH + {0xA67A, 0xCAE7}, //6589 #HANGUL SYLLABLE SSANGCIEUC WA RIEULHIEUH + {0xA681, 0xCAE8}, //6590 #HANGUL SYLLABLE SSANGCIEUC WA MIEUM + {0xA682, 0xCAE9}, //6591 #HANGUL SYLLABLE SSANGCIEUC WA PIEUP + {0xA683, 0xCAEA}, //6592 #HANGUL SYLLABLE SSANGCIEUC WA PIEUPSIOS + {0xA684, 0xCAEB}, //6593 #HANGUL SYLLABLE SSANGCIEUC WA SIOS + {0xA685, 0xCAED}, //6594 #HANGUL SYLLABLE SSANGCIEUC WA IEUNG + {0xA686, 0xCAEE}, //6595 #HANGUL SYLLABLE SSANGCIEUC WA CIEUC + {0xA687, 0xCAEF}, //6596 #HANGUL SYLLABLE SSANGCIEUC WA CHIEUCH + {0xA688, 0xCAF0}, //6597 #HANGUL SYLLABLE SSANGCIEUC WA KHIEUKH + {0xA689, 0xCAF1}, //6598 #HANGUL SYLLABLE SSANGCIEUC WA THIEUTH + {0xA68A, 0xCAF2}, //6599 #HANGUL SYLLABLE SSANGCIEUC WA PHIEUPH + {0xA68B, 0xCAF3}, //6600 #HANGUL SYLLABLE SSANGCIEUC WA HIEUH + {0xA68C, 0xCAF5}, //6601 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOK + {0xA68D, 0xCAF6}, //6602 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGKIYEOK + {0xA68E, 0xCAF7}, //6603 #HANGUL SYLLABLE SSANGCIEUC WAE KIYEOKSIOS + {0xA68F, 0xCAF8}, //6604 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUN + {0xA690, 0xCAF9}, //6605 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNCIEUC + {0xA691, 0xCAFA}, //6606 #HANGUL SYLLABLE SSANGCIEUC WAE NIEUNHIEUH + {0xA692, 0xCAFB}, //6607 #HANGUL SYLLABLE SSANGCIEUC WAE TIKEUT + {0xA693, 0xCAFC}, //6608 #HANGUL SYLLABLE SSANGCIEUC WAE RIEUL + {0xA694, 0xCAFD}, //6609 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULKIYEOK + {0xA695, 0xCAFE}, //6610 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULMIEUM + {0xA696, 0xCAFF}, //6611 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPIEUP + {0xA697, 0xCB00}, //6612 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULSIOS + {0xA698, 0xCB01}, //6613 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULTHIEUTH + {0xA699, 0xCB02}, //6614 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULPHIEUPH + {0xA69A, 0xCB03}, //6615 #HANGUL SYLLABLE SSANGCIEUC WAE RIEULHIEUH + {0xA69B, 0xCB04}, //6616 #HANGUL SYLLABLE SSANGCIEUC WAE MIEUM + {0xA69C, 0xCB05}, //6617 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUP + {0xA69D, 0xCB06}, //6618 #HANGUL SYLLABLE SSANGCIEUC WAE PIEUPSIOS + {0xA69E, 0xCB07}, //6619 #HANGUL SYLLABLE SSANGCIEUC WAE SIOS + {0xA69F, 0xCB09}, //6620 #HANGUL SYLLABLE SSANGCIEUC WAE IEUNG + {0xA6A0, 0xCB0A}, //6621 #HANGUL SYLLABLE SSANGCIEUC WAE CIEUC + {0xA6A1, 0x2500}, //6622 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA6A2, 0x2502}, //6623 #BOX DRAWINGS LIGHT VERTICAL + {0xA6A3, 0x250C}, //6624 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA6A4, 0x2510}, //6625 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA6A5, 0x2518}, //6626 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA6A6, 0x2514}, //6627 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA6A7, 0x251C}, //6628 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA6A8, 0x252C}, //6629 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA6A9, 0x2524}, //6630 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA6AA, 0x2534}, //6631 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA6AB, 0x253C}, //6632 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA6AC, 0x2501}, //6633 #BOX DRAWINGS HEAVY HORIZONTAL + {0xA6AD, 0x2503}, //6634 #BOX DRAWINGS HEAVY VERTICAL + {0xA6AE, 0x250F}, //6635 #BOX DRAWINGS HEAVY DOWN AND RIGHT + {0xA6AF, 0x2513}, //6636 #BOX DRAWINGS HEAVY DOWN AND LEFT + {0xA6B0, 0x251B}, //6637 #BOX DRAWINGS HEAVY UP AND LEFT + {0xA6B1, 0x2517}, //6638 #BOX DRAWINGS HEAVY UP AND RIGHT + {0xA6B2, 0x2523}, //6639 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT + {0xA6B3, 0x2533}, //6640 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + {0xA6B4, 0x252B}, //6641 #BOX DRAWINGS HEAVY VERTICAL AND LEFT + {0xA6B5, 0x253B}, //6642 #BOX DRAWINGS HEAVY UP AND HORIZONTAL + {0xA6B6, 0x254B}, //6643 #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + {0xA6B7, 0x2520}, //6644 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + {0xA6B8, 0x252F}, //6645 #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + {0xA6B9, 0x2528}, //6646 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + {0xA6BA, 0x2537}, //6647 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + {0xA6BB, 0x253F}, //6648 #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + {0xA6BC, 0x251D}, //6649 #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + {0xA6BD, 0x2530}, //6650 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + {0xA6BE, 0x2525}, //6651 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + {0xA6BF, 0x2538}, //6652 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + {0xA6C0, 0x2542}, //6653 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + {0xA6C1, 0x2512}, //6654 #BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT + {0xA6C2, 0x2511}, //6655 #BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY + {0xA6C3, 0x251A}, //6656 #BOX DRAWINGS UP HEAVY AND LEFT LIGHT + {0xA6C4, 0x2519}, //6657 #BOX DRAWINGS UP LIGHT AND LEFT HEAVY + {0xA6C5, 0x2516}, //6658 #BOX DRAWINGS UP HEAVY AND RIGHT LIGHT + {0xA6C6, 0x2515}, //6659 #BOX DRAWINGS UP LIGHT AND RIGHT HEAVY + {0xA6C7, 0x250E}, //6660 #BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT + {0xA6C8, 0x250D}, //6661 #BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY + {0xA6C9, 0x251E}, //6662 #BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT + {0xA6CA, 0x251F}, //6663 #BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT + {0xA6CB, 0x2521}, //6664 #BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY + {0xA6CC, 0x2522}, //6665 #BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY + {0xA6CD, 0x2526}, //6666 #BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT + {0xA6CE, 0x2527}, //6667 #BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT + {0xA6CF, 0x2529}, //6668 #BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY + {0xA6D0, 0x252A}, //6669 #BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY + {0xA6D1, 0x252D}, //6670 #BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT + {0xA6D2, 0x252E}, //6671 #BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT + {0xA6D3, 0x2531}, //6672 #BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY + {0xA6D4, 0x2532}, //6673 #BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY + {0xA6D5, 0x2535}, //6674 #BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT + {0xA6D6, 0x2536}, //6675 #BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT + {0xA6D7, 0x2539}, //6676 #BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY + {0xA6D8, 0x253A}, //6677 #BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY + {0xA6D9, 0x253D}, //6678 #BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT + {0xA6DA, 0x253E}, //6679 #BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT + {0xA6DB, 0x2540}, //6680 #BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT + {0xA6DC, 0x2541}, //6681 #BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT + {0xA6DD, 0x2543}, //6682 #BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT + {0xA6DE, 0x2544}, //6683 #BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT + {0xA6DF, 0x2545}, //6684 #BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT + {0xA6E0, 0x2546}, //6685 #BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT + {0xA6E1, 0x2547}, //6686 #BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY + {0xA6E2, 0x2548}, //6687 #BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY + {0xA6E3, 0x2549}, //6688 #BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY + {0xA6E4, 0x254A}, //6689 #BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY + {0xA741, 0xCB0B}, //6690 #HANGUL SYLLABLE SSANGCIEUC WAE CHIEUCH + {0xA742, 0xCB0C}, //6691 #HANGUL SYLLABLE SSANGCIEUC WAE KHIEUKH + {0xA743, 0xCB0D}, //6692 #HANGUL SYLLABLE SSANGCIEUC WAE THIEUTH + {0xA744, 0xCB0E}, //6693 #HANGUL SYLLABLE SSANGCIEUC WAE PHIEUPH + {0xA745, 0xCB0F}, //6694 #HANGUL SYLLABLE SSANGCIEUC WAE HIEUH + {0xA746, 0xCB11}, //6695 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOK + {0xA747, 0xCB12}, //6696 #HANGUL SYLLABLE SSANGCIEUC OE SSANGKIYEOK + {0xA748, 0xCB13}, //6697 #HANGUL SYLLABLE SSANGCIEUC OE KIYEOKSIOS + {0xA749, 0xCB15}, //6698 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNCIEUC + {0xA74A, 0xCB16}, //6699 #HANGUL SYLLABLE SSANGCIEUC OE NIEUNHIEUH + {0xA74B, 0xCB17}, //6700 #HANGUL SYLLABLE SSANGCIEUC OE TIKEUT + {0xA74C, 0xCB19}, //6701 #HANGUL SYLLABLE SSANGCIEUC OE RIEULKIYEOK + {0xA74D, 0xCB1A}, //6702 #HANGUL SYLLABLE SSANGCIEUC OE RIEULMIEUM + {0xA74E, 0xCB1B}, //6703 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPIEUP + {0xA74F, 0xCB1C}, //6704 #HANGUL SYLLABLE SSANGCIEUC OE RIEULSIOS + {0xA750, 0xCB1D}, //6705 #HANGUL SYLLABLE SSANGCIEUC OE RIEULTHIEUTH + {0xA751, 0xCB1E}, //6706 #HANGUL SYLLABLE SSANGCIEUC OE RIEULPHIEUPH + {0xA752, 0xCB1F}, //6707 #HANGUL SYLLABLE SSANGCIEUC OE RIEULHIEUH + {0xA753, 0xCB22}, //6708 #HANGUL SYLLABLE SSANGCIEUC OE PIEUPSIOS + {0xA754, 0xCB23}, //6709 #HANGUL SYLLABLE SSANGCIEUC OE SIOS + {0xA755, 0xCB24}, //6710 #HANGUL SYLLABLE SSANGCIEUC OE SSANGSIOS + {0xA756, 0xCB25}, //6711 #HANGUL SYLLABLE SSANGCIEUC OE IEUNG + {0xA757, 0xCB26}, //6712 #HANGUL SYLLABLE SSANGCIEUC OE CIEUC + {0xA758, 0xCB27}, //6713 #HANGUL SYLLABLE SSANGCIEUC OE CHIEUCH + {0xA759, 0xCB28}, //6714 #HANGUL SYLLABLE SSANGCIEUC OE KHIEUKH + {0xA75A, 0xCB29}, //6715 #HANGUL SYLLABLE SSANGCIEUC OE THIEUTH + {0xA761, 0xCB2A}, //6716 #HANGUL SYLLABLE SSANGCIEUC OE PHIEUPH + {0xA762, 0xCB2B}, //6717 #HANGUL SYLLABLE SSANGCIEUC OE HIEUH + {0xA763, 0xCB2C}, //6718 #HANGUL SYLLABLE SSANGCIEUC YO + {0xA764, 0xCB2D}, //6719 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOK + {0xA765, 0xCB2E}, //6720 #HANGUL SYLLABLE SSANGCIEUC YO SSANGKIYEOK + {0xA766, 0xCB2F}, //6721 #HANGUL SYLLABLE SSANGCIEUC YO KIYEOKSIOS + {0xA767, 0xCB30}, //6722 #HANGUL SYLLABLE SSANGCIEUC YO NIEUN + {0xA768, 0xCB31}, //6723 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNCIEUC + {0xA769, 0xCB32}, //6724 #HANGUL SYLLABLE SSANGCIEUC YO NIEUNHIEUH + {0xA76A, 0xCB33}, //6725 #HANGUL SYLLABLE SSANGCIEUC YO TIKEUT + {0xA76B, 0xCB34}, //6726 #HANGUL SYLLABLE SSANGCIEUC YO RIEUL + {0xA76C, 0xCB35}, //6727 #HANGUL SYLLABLE SSANGCIEUC YO RIEULKIYEOK + {0xA76D, 0xCB36}, //6728 #HANGUL SYLLABLE SSANGCIEUC YO RIEULMIEUM + {0xA76E, 0xCB37}, //6729 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPIEUP + {0xA76F, 0xCB38}, //6730 #HANGUL SYLLABLE SSANGCIEUC YO RIEULSIOS + {0xA770, 0xCB39}, //6731 #HANGUL SYLLABLE SSANGCIEUC YO RIEULTHIEUTH + {0xA771, 0xCB3A}, //6732 #HANGUL SYLLABLE SSANGCIEUC YO RIEULPHIEUPH + {0xA772, 0xCB3B}, //6733 #HANGUL SYLLABLE SSANGCIEUC YO RIEULHIEUH + {0xA773, 0xCB3C}, //6734 #HANGUL SYLLABLE SSANGCIEUC YO MIEUM + {0xA774, 0xCB3D}, //6735 #HANGUL SYLLABLE SSANGCIEUC YO PIEUP + {0xA775, 0xCB3E}, //6736 #HANGUL SYLLABLE SSANGCIEUC YO PIEUPSIOS + {0xA776, 0xCB3F}, //6737 #HANGUL SYLLABLE SSANGCIEUC YO SIOS + {0xA777, 0xCB40}, //6738 #HANGUL SYLLABLE SSANGCIEUC YO SSANGSIOS + {0xA778, 0xCB42}, //6739 #HANGUL SYLLABLE SSANGCIEUC YO CIEUC + {0xA779, 0xCB43}, //6740 #HANGUL SYLLABLE SSANGCIEUC YO CHIEUCH + {0xA77A, 0xCB44}, //6741 #HANGUL SYLLABLE SSANGCIEUC YO KHIEUKH + {0xA781, 0xCB45}, //6742 #HANGUL SYLLABLE SSANGCIEUC YO THIEUTH + {0xA782, 0xCB46}, //6743 #HANGUL SYLLABLE SSANGCIEUC YO PHIEUPH + {0xA783, 0xCB47}, //6744 #HANGUL SYLLABLE SSANGCIEUC YO HIEUH + {0xA784, 0xCB4A}, //6745 #HANGUL SYLLABLE SSANGCIEUC U SSANGKIYEOK + {0xA785, 0xCB4B}, //6746 #HANGUL SYLLABLE SSANGCIEUC U KIYEOKSIOS + {0xA786, 0xCB4D}, //6747 #HANGUL SYLLABLE SSANGCIEUC U NIEUNCIEUC + {0xA787, 0xCB4E}, //6748 #HANGUL SYLLABLE SSANGCIEUC U NIEUNHIEUH + {0xA788, 0xCB4F}, //6749 #HANGUL SYLLABLE SSANGCIEUC U TIKEUT + {0xA789, 0xCB51}, //6750 #HANGUL SYLLABLE SSANGCIEUC U RIEULKIYEOK + {0xA78A, 0xCB52}, //6751 #HANGUL SYLLABLE SSANGCIEUC U RIEULMIEUM + {0xA78B, 0xCB53}, //6752 #HANGUL SYLLABLE SSANGCIEUC U RIEULPIEUP + {0xA78C, 0xCB54}, //6753 #HANGUL SYLLABLE SSANGCIEUC U RIEULSIOS + {0xA78D, 0xCB55}, //6754 #HANGUL SYLLABLE SSANGCIEUC U RIEULTHIEUTH + {0xA78E, 0xCB56}, //6755 #HANGUL SYLLABLE SSANGCIEUC U RIEULPHIEUPH + {0xA78F, 0xCB57}, //6756 #HANGUL SYLLABLE SSANGCIEUC U RIEULHIEUH + {0xA790, 0xCB5A}, //6757 #HANGUL SYLLABLE SSANGCIEUC U PIEUPSIOS + {0xA791, 0xCB5B}, //6758 #HANGUL SYLLABLE SSANGCIEUC U SIOS + {0xA792, 0xCB5C}, //6759 #HANGUL SYLLABLE SSANGCIEUC U SSANGSIOS + {0xA793, 0xCB5E}, //6760 #HANGUL SYLLABLE SSANGCIEUC U CIEUC + {0xA794, 0xCB5F}, //6761 #HANGUL SYLLABLE SSANGCIEUC U CHIEUCH + {0xA795, 0xCB60}, //6762 #HANGUL SYLLABLE SSANGCIEUC U KHIEUKH + {0xA796, 0xCB61}, //6763 #HANGUL SYLLABLE SSANGCIEUC U THIEUTH + {0xA797, 0xCB62}, //6764 #HANGUL SYLLABLE SSANGCIEUC U PHIEUPH + {0xA798, 0xCB63}, //6765 #HANGUL SYLLABLE SSANGCIEUC U HIEUH + {0xA799, 0xCB65}, //6766 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOK + {0xA79A, 0xCB66}, //6767 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGKIYEOK + {0xA79B, 0xCB67}, //6768 #HANGUL SYLLABLE SSANGCIEUC WEO KIYEOKSIOS + {0xA79C, 0xCB68}, //6769 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUN + {0xA79D, 0xCB69}, //6770 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNCIEUC + {0xA79E, 0xCB6A}, //6771 #HANGUL SYLLABLE SSANGCIEUC WEO NIEUNHIEUH + {0xA79F, 0xCB6B}, //6772 #HANGUL SYLLABLE SSANGCIEUC WEO TIKEUT + {0xA7A0, 0xCB6C}, //6773 #HANGUL SYLLABLE SSANGCIEUC WEO RIEUL + {0xA7A1, 0x3395}, //6774 #SQUARE MU L + {0xA7A2, 0x3396}, //6775 #SQUARE ML + {0xA7A3, 0x3397}, //6776 #SQUARE DL + {0xA7A4, 0x2113}, //6777 #SCRIPT SMALL L + {0xA7A5, 0x3398}, //6778 #SQUARE KL + {0xA7A6, 0x33C4}, //6779 #SQUARE CC + {0xA7A7, 0x33A3}, //6780 #SQUARE MM CUBED + {0xA7A8, 0x33A4}, //6781 #SQUARE CM CUBED + {0xA7A9, 0x33A5}, //6782 #SQUARE M CUBED + {0xA7AA, 0x33A6}, //6783 #SQUARE KM CUBED + {0xA7AB, 0x3399}, //6784 #SQUARE FM + {0xA7AC, 0x339A}, //6785 #SQUARE NM + {0xA7AD, 0x339B}, //6786 #SQUARE MU M + {0xA7AE, 0x339C}, //6787 #SQUARE MM + {0xA7AF, 0x339D}, //6788 #SQUARE CM + {0xA7B0, 0x339E}, //6789 #SQUARE KM + {0xA7B1, 0x339F}, //6790 #SQUARE MM SQUARED + {0xA7B2, 0x33A0}, //6791 #SQUARE CM SQUARED + {0xA7B3, 0x33A1}, //6792 #SQUARE M SQUARED + {0xA7B4, 0x33A2}, //6793 #SQUARE KM SQUARED + {0xA7B5, 0x33CA}, //6794 #SQUARE HA + {0xA7B6, 0x338D}, //6795 #SQUARE MU G + {0xA7B7, 0x338E}, //6796 #SQUARE MG + {0xA7B8, 0x338F}, //6797 #SQUARE KG + {0xA7B9, 0x33CF}, //6798 #SQUARE KT + {0xA7BA, 0x3388}, //6799 #SQUARE CAL + {0xA7BB, 0x3389}, //6800 #SQUARE KCAL + {0xA7BC, 0x33C8}, //6801 #SQUARE DB + {0xA7BD, 0x33A7}, //6802 #SQUARE M OVER S + {0xA7BE, 0x33A8}, //6803 #SQUARE M OVER S SQUARED + {0xA7BF, 0x33B0}, //6804 #SQUARE PS + {0xA7C0, 0x33B1}, //6805 #SQUARE NS + {0xA7C1, 0x33B2}, //6806 #SQUARE MU S + {0xA7C2, 0x33B3}, //6807 #SQUARE MS + {0xA7C3, 0x33B4}, //6808 #SQUARE PV + {0xA7C4, 0x33B5}, //6809 #SQUARE NV + {0xA7C5, 0x33B6}, //6810 #SQUARE MU V + {0xA7C6, 0x33B7}, //6811 #SQUARE MV + {0xA7C7, 0x33B8}, //6812 #SQUARE KV + {0xA7C8, 0x33B9}, //6813 #SQUARE MV MEGA + {0xA7C9, 0x3380}, //6814 #SQUARE PA AMPS + {0xA7CA, 0x3381}, //6815 #SQUARE NA + {0xA7CB, 0x3382}, //6816 #SQUARE MU A + {0xA7CC, 0x3383}, //6817 #SQUARE MA + {0xA7CD, 0x3384}, //6818 #SQUARE KA + {0xA7CE, 0x33BA}, //6819 #SQUARE PW + {0xA7CF, 0x33BB}, //6820 #SQUARE NW + {0xA7D0, 0x33BC}, //6821 #SQUARE MU W + {0xA7D1, 0x33BD}, //6822 #SQUARE MW + {0xA7D2, 0x33BE}, //6823 #SQUARE KW + {0xA7D3, 0x33BF}, //6824 #SQUARE MW MEGA + {0xA7D4, 0x3390}, //6825 #SQUARE HZ + {0xA7D5, 0x3391}, //6826 #SQUARE KHZ + {0xA7D6, 0x3392}, //6827 #SQUARE MHZ + {0xA7D7, 0x3393}, //6828 #SQUARE GHZ + {0xA7D8, 0x3394}, //6829 #SQUARE THZ + {0xA7D9, 0x2126}, //6830 #OHM SIGN + {0xA7DA, 0x33C0}, //6831 #SQUARE K OHM + {0xA7DB, 0x33C1}, //6832 #SQUARE M OHM + {0xA7DC, 0x338A}, //6833 #SQUARE PF + {0xA7DD, 0x338B}, //6834 #SQUARE NF + {0xA7DE, 0x338C}, //6835 #SQUARE MU F + {0xA7DF, 0x33D6}, //6836 #SQUARE MOL + {0xA7E0, 0x33C5}, //6837 #SQUARE CD + {0xA7E1, 0x33AD}, //6838 #SQUARE RAD + {0xA7E2, 0x33AE}, //6839 #SQUARE RAD OVER S + {0xA7E3, 0x33AF}, //6840 #SQUARE RAD OVER S SQUARED + {0xA7E4, 0x33DB}, //6841 #SQUARE SR + {0xA7E5, 0x33A9}, //6842 #SQUARE PA + {0xA7E6, 0x33AA}, //6843 #SQUARE KPA + {0xA7E7, 0x33AB}, //6844 #SQUARE MPA + {0xA7E8, 0x33AC}, //6845 #SQUARE GPA + {0xA7E9, 0x33DD}, //6846 #SQUARE WB + {0xA7EA, 0x33D0}, //6847 #SQUARE LM + {0xA7EB, 0x33D3}, //6848 #SQUARE LX + {0xA7EC, 0x33C3}, //6849 #SQUARE BQ + {0xA7ED, 0x33C9}, //6850 #SQUARE GY + {0xA7EE, 0x33DC}, //6851 #SQUARE SV + {0xA7EF, 0x33C6}, //6852 #SQUARE C OVER KG + {0xA841, 0xCB6D}, //6853 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULKIYEOK + {0xA842, 0xCB6E}, //6854 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULMIEUM + {0xA843, 0xCB6F}, //6855 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPIEUP + {0xA844, 0xCB70}, //6856 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULSIOS + {0xA845, 0xCB71}, //6857 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULTHIEUTH + {0xA846, 0xCB72}, //6858 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULPHIEUPH + {0xA847, 0xCB73}, //6859 #HANGUL SYLLABLE SSANGCIEUC WEO RIEULHIEUH + {0xA848, 0xCB74}, //6860 #HANGUL SYLLABLE SSANGCIEUC WEO MIEUM + {0xA849, 0xCB75}, //6861 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUP + {0xA84A, 0xCB76}, //6862 #HANGUL SYLLABLE SSANGCIEUC WEO PIEUPSIOS + {0xA84B, 0xCB77}, //6863 #HANGUL SYLLABLE SSANGCIEUC WEO SIOS + {0xA84C, 0xCB7A}, //6864 #HANGUL SYLLABLE SSANGCIEUC WEO CIEUC + {0xA84D, 0xCB7B}, //6865 #HANGUL SYLLABLE SSANGCIEUC WEO CHIEUCH + {0xA84E, 0xCB7C}, //6866 #HANGUL SYLLABLE SSANGCIEUC WEO KHIEUKH + {0xA84F, 0xCB7D}, //6867 #HANGUL SYLLABLE SSANGCIEUC WEO THIEUTH + {0xA850, 0xCB7E}, //6868 #HANGUL SYLLABLE SSANGCIEUC WEO PHIEUPH + {0xA851, 0xCB7F}, //6869 #HANGUL SYLLABLE SSANGCIEUC WEO HIEUH + {0xA852, 0xCB80}, //6870 #HANGUL SYLLABLE SSANGCIEUC WE + {0xA853, 0xCB81}, //6871 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOK + {0xA854, 0xCB82}, //6872 #HANGUL SYLLABLE SSANGCIEUC WE SSANGKIYEOK + {0xA855, 0xCB83}, //6873 #HANGUL SYLLABLE SSANGCIEUC WE KIYEOKSIOS + {0xA856, 0xCB84}, //6874 #HANGUL SYLLABLE SSANGCIEUC WE NIEUN + {0xA857, 0xCB85}, //6875 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNCIEUC + {0xA858, 0xCB86}, //6876 #HANGUL SYLLABLE SSANGCIEUC WE NIEUNHIEUH + {0xA859, 0xCB87}, //6877 #HANGUL SYLLABLE SSANGCIEUC WE TIKEUT + {0xA85A, 0xCB88}, //6878 #HANGUL SYLLABLE SSANGCIEUC WE RIEUL + {0xA861, 0xCB89}, //6879 #HANGUL SYLLABLE SSANGCIEUC WE RIEULKIYEOK + {0xA862, 0xCB8A}, //6880 #HANGUL SYLLABLE SSANGCIEUC WE RIEULMIEUM + {0xA863, 0xCB8B}, //6881 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPIEUP + {0xA864, 0xCB8C}, //6882 #HANGUL SYLLABLE SSANGCIEUC WE RIEULSIOS + {0xA865, 0xCB8D}, //6883 #HANGUL SYLLABLE SSANGCIEUC WE RIEULTHIEUTH + {0xA866, 0xCB8E}, //6884 #HANGUL SYLLABLE SSANGCIEUC WE RIEULPHIEUPH + {0xA867, 0xCB8F}, //6885 #HANGUL SYLLABLE SSANGCIEUC WE RIEULHIEUH + {0xA868, 0xCB90}, //6886 #HANGUL SYLLABLE SSANGCIEUC WE MIEUM + {0xA869, 0xCB91}, //6887 #HANGUL SYLLABLE SSANGCIEUC WE PIEUP + {0xA86A, 0xCB92}, //6888 #HANGUL SYLLABLE SSANGCIEUC WE PIEUPSIOS + {0xA86B, 0xCB93}, //6889 #HANGUL SYLLABLE SSANGCIEUC WE SIOS + {0xA86C, 0xCB94}, //6890 #HANGUL SYLLABLE SSANGCIEUC WE SSANGSIOS + {0xA86D, 0xCB95}, //6891 #HANGUL SYLLABLE SSANGCIEUC WE IEUNG + {0xA86E, 0xCB96}, //6892 #HANGUL SYLLABLE SSANGCIEUC WE CIEUC + {0xA86F, 0xCB97}, //6893 #HANGUL SYLLABLE SSANGCIEUC WE CHIEUCH + {0xA870, 0xCB98}, //6894 #HANGUL SYLLABLE SSANGCIEUC WE KHIEUKH + {0xA871, 0xCB99}, //6895 #HANGUL SYLLABLE SSANGCIEUC WE THIEUTH + {0xA872, 0xCB9A}, //6896 #HANGUL SYLLABLE SSANGCIEUC WE PHIEUPH + {0xA873, 0xCB9B}, //6897 #HANGUL SYLLABLE SSANGCIEUC WE HIEUH + {0xA874, 0xCB9D}, //6898 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOK + {0xA875, 0xCB9E}, //6899 #HANGUL SYLLABLE SSANGCIEUC WI SSANGKIYEOK + {0xA876, 0xCB9F}, //6900 #HANGUL SYLLABLE SSANGCIEUC WI KIYEOKSIOS + {0xA877, 0xCBA0}, //6901 #HANGUL SYLLABLE SSANGCIEUC WI NIEUN + {0xA878, 0xCBA1}, //6902 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNCIEUC + {0xA879, 0xCBA2}, //6903 #HANGUL SYLLABLE SSANGCIEUC WI NIEUNHIEUH + {0xA87A, 0xCBA3}, //6904 #HANGUL SYLLABLE SSANGCIEUC WI TIKEUT + {0xA881, 0xCBA4}, //6905 #HANGUL SYLLABLE SSANGCIEUC WI RIEUL + {0xA882, 0xCBA5}, //6906 #HANGUL SYLLABLE SSANGCIEUC WI RIEULKIYEOK + {0xA883, 0xCBA6}, //6907 #HANGUL SYLLABLE SSANGCIEUC WI RIEULMIEUM + {0xA884, 0xCBA7}, //6908 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPIEUP + {0xA885, 0xCBA8}, //6909 #HANGUL SYLLABLE SSANGCIEUC WI RIEULSIOS + {0xA886, 0xCBA9}, //6910 #HANGUL SYLLABLE SSANGCIEUC WI RIEULTHIEUTH + {0xA887, 0xCBAA}, //6911 #HANGUL SYLLABLE SSANGCIEUC WI RIEULPHIEUPH + {0xA888, 0xCBAB}, //6912 #HANGUL SYLLABLE SSANGCIEUC WI RIEULHIEUH + {0xA889, 0xCBAC}, //6913 #HANGUL SYLLABLE SSANGCIEUC WI MIEUM + {0xA88A, 0xCBAD}, //6914 #HANGUL SYLLABLE SSANGCIEUC WI PIEUP + {0xA88B, 0xCBAE}, //6915 #HANGUL SYLLABLE SSANGCIEUC WI PIEUPSIOS + {0xA88C, 0xCBAF}, //6916 #HANGUL SYLLABLE SSANGCIEUC WI SIOS + {0xA88D, 0xCBB0}, //6917 #HANGUL SYLLABLE SSANGCIEUC WI SSANGSIOS + {0xA88E, 0xCBB1}, //6918 #HANGUL SYLLABLE SSANGCIEUC WI IEUNG + {0xA88F, 0xCBB2}, //6919 #HANGUL SYLLABLE SSANGCIEUC WI CIEUC + {0xA890, 0xCBB3}, //6920 #HANGUL SYLLABLE SSANGCIEUC WI CHIEUCH + {0xA891, 0xCBB4}, //6921 #HANGUL SYLLABLE SSANGCIEUC WI KHIEUKH + {0xA892, 0xCBB5}, //6922 #HANGUL SYLLABLE SSANGCIEUC WI THIEUTH + {0xA893, 0xCBB6}, //6923 #HANGUL SYLLABLE SSANGCIEUC WI PHIEUPH + {0xA894, 0xCBB7}, //6924 #HANGUL SYLLABLE SSANGCIEUC WI HIEUH + {0xA895, 0xCBB9}, //6925 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOK + {0xA896, 0xCBBA}, //6926 #HANGUL SYLLABLE SSANGCIEUC YU SSANGKIYEOK + {0xA897, 0xCBBB}, //6927 #HANGUL SYLLABLE SSANGCIEUC YU KIYEOKSIOS + {0xA898, 0xCBBC}, //6928 #HANGUL SYLLABLE SSANGCIEUC YU NIEUN + {0xA899, 0xCBBD}, //6929 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNCIEUC + {0xA89A, 0xCBBE}, //6930 #HANGUL SYLLABLE SSANGCIEUC YU NIEUNHIEUH + {0xA89B, 0xCBBF}, //6931 #HANGUL SYLLABLE SSANGCIEUC YU TIKEUT + {0xA89C, 0xCBC0}, //6932 #HANGUL SYLLABLE SSANGCIEUC YU RIEUL + {0xA89D, 0xCBC1}, //6933 #HANGUL SYLLABLE SSANGCIEUC YU RIEULKIYEOK + {0xA89E, 0xCBC2}, //6934 #HANGUL SYLLABLE SSANGCIEUC YU RIEULMIEUM + {0xA89F, 0xCBC3}, //6935 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPIEUP + {0xA8A0, 0xCBC4}, //6936 #HANGUL SYLLABLE SSANGCIEUC YU RIEULSIOS + {0xA8A1, 0x00C6}, //6937 #LATIN CAPITAL LETTER AE + {0xA8A2, 0x00D0}, //6938 #LATIN CAPITAL LETTER ETH + {0xA8A3, 0x00AA}, //6939 #FEMININE ORDINAL INDICATOR + {0xA8A4, 0x0126}, //6940 #LATIN CAPITAL LETTER H WITH STROKE + {0xA8A6, 0x0132}, //6941 #LATIN CAPITAL LIGATURE IJ + {0xA8A8, 0x013F}, //6942 #LATIN CAPITAL LETTER L WITH MIDDLE DOT + {0xA8A9, 0x0141}, //6943 #LATIN CAPITAL LETTER L WITH STROKE + {0xA8AA, 0x00D8}, //6944 #LATIN CAPITAL LETTER O WITH STROKE + {0xA8AB, 0x0152}, //6945 #LATIN CAPITAL LIGATURE OE + {0xA8AC, 0x00BA}, //6946 #MASCULINE ORDINAL INDICATOR + {0xA8AD, 0x00DE}, //6947 #LATIN CAPITAL LETTER THORN + {0xA8AE, 0x0166}, //6948 #LATIN CAPITAL LETTER T WITH STROKE + {0xA8AF, 0x014A}, //6949 #LATIN CAPITAL LETTER ENG + {0xA8B1, 0x3260}, //6950 #CIRCLED HANGUL KIYEOK + {0xA8B2, 0x3261}, //6951 #CIRCLED HANGUL NIEUN + {0xA8B3, 0x3262}, //6952 #CIRCLED HANGUL TIKEUT + {0xA8B4, 0x3263}, //6953 #CIRCLED HANGUL RIEUL + {0xA8B5, 0x3264}, //6954 #CIRCLED HANGUL MIEUM + {0xA8B6, 0x3265}, //6955 #CIRCLED HANGUL PIEUP + {0xA8B7, 0x3266}, //6956 #CIRCLED HANGUL SIOS + {0xA8B8, 0x3267}, //6957 #CIRCLED HANGUL IEUNG + {0xA8B9, 0x3268}, //6958 #CIRCLED HANGUL CIEUC + {0xA8BA, 0x3269}, //6959 #CIRCLED HANGUL CHIEUCH + {0xA8BB, 0x326A}, //6960 #CIRCLED HANGUL KHIEUKH + {0xA8BC, 0x326B}, //6961 #CIRCLED HANGUL THIEUTH + {0xA8BD, 0x326C}, //6962 #CIRCLED HANGUL PHIEUPH + {0xA8BE, 0x326D}, //6963 #CIRCLED HANGUL HIEUH + {0xA8BF, 0x326E}, //6964 #CIRCLED HANGUL KIYEOK A + {0xA8C0, 0x326F}, //6965 #CIRCLED HANGUL NIEUN A + {0xA8C1, 0x3270}, //6966 #CIRCLED HANGUL TIKEUT A + {0xA8C2, 0x3271}, //6967 #CIRCLED HANGUL RIEUL A + {0xA8C3, 0x3272}, //6968 #CIRCLED HANGUL MIEUM A + {0xA8C4, 0x3273}, //6969 #CIRCLED HANGUL PIEUP A + {0xA8C5, 0x3274}, //6970 #CIRCLED HANGUL SIOS A + {0xA8C6, 0x3275}, //6971 #CIRCLED HANGUL IEUNG A + {0xA8C7, 0x3276}, //6972 #CIRCLED HANGUL CIEUC A + {0xA8C8, 0x3277}, //6973 #CIRCLED HANGUL CHIEUCH A + {0xA8C9, 0x3278}, //6974 #CIRCLED HANGUL KHIEUKH A + {0xA8CA, 0x3279}, //6975 #CIRCLED HANGUL THIEUTH A + {0xA8CB, 0x327A}, //6976 #CIRCLED HANGUL PHIEUPH A + {0xA8CC, 0x327B}, //6977 #CIRCLED HANGUL HIEUH A + {0xA8CD, 0x24D0}, //6978 #CIRCLED LATIN SMALL LETTER A + {0xA8CE, 0x24D1}, //6979 #CIRCLED LATIN SMALL LETTER B + {0xA8CF, 0x24D2}, //6980 #CIRCLED LATIN SMALL LETTER C + {0xA8D0, 0x24D3}, //6981 #CIRCLED LATIN SMALL LETTER D + {0xA8D1, 0x24D4}, //6982 #CIRCLED LATIN SMALL LETTER E + {0xA8D2, 0x24D5}, //6983 #CIRCLED LATIN SMALL LETTER F + {0xA8D3, 0x24D6}, //6984 #CIRCLED LATIN SMALL LETTER G + {0xA8D4, 0x24D7}, //6985 #CIRCLED LATIN SMALL LETTER H + {0xA8D5, 0x24D8}, //6986 #CIRCLED LATIN SMALL LETTER I + {0xA8D6, 0x24D9}, //6987 #CIRCLED LATIN SMALL LETTER J + {0xA8D7, 0x24DA}, //6988 #CIRCLED LATIN SMALL LETTER K + {0xA8D8, 0x24DB}, //6989 #CIRCLED LATIN SMALL LETTER L + {0xA8D9, 0x24DC}, //6990 #CIRCLED LATIN SMALL LETTER M + {0xA8DA, 0x24DD}, //6991 #CIRCLED LATIN SMALL LETTER N + {0xA8DB, 0x24DE}, //6992 #CIRCLED LATIN SMALL LETTER O + {0xA8DC, 0x24DF}, //6993 #CIRCLED LATIN SMALL LETTER P + {0xA8DD, 0x24E0}, //6994 #CIRCLED LATIN SMALL LETTER Q + {0xA8DE, 0x24E1}, //6995 #CIRCLED LATIN SMALL LETTER R + {0xA8DF, 0x24E2}, //6996 #CIRCLED LATIN SMALL LETTER S + {0xA8E0, 0x24E3}, //6997 #CIRCLED LATIN SMALL LETTER T + {0xA8E1, 0x24E4}, //6998 #CIRCLED LATIN SMALL LETTER U + {0xA8E2, 0x24E5}, //6999 #CIRCLED LATIN SMALL LETTER V + {0xA8E3, 0x24E6}, //7000 #CIRCLED LATIN SMALL LETTER W + {0xA8E4, 0x24E7}, //7001 #CIRCLED LATIN SMALL LETTER X + {0xA8E5, 0x24E8}, //7002 #CIRCLED LATIN SMALL LETTER Y + {0xA8E6, 0x24E9}, //7003 #CIRCLED LATIN SMALL LETTER Z + {0xA8E7, 0x2460}, //7004 #CIRCLED DIGIT ONE + {0xA8E8, 0x2461}, //7005 #CIRCLED DIGIT TWO + {0xA8E9, 0x2462}, //7006 #CIRCLED DIGIT THREE + {0xA8EA, 0x2463}, //7007 #CIRCLED DIGIT FOUR + {0xA8EB, 0x2464}, //7008 #CIRCLED DIGIT FIVE + {0xA8EC, 0x2465}, //7009 #CIRCLED DIGIT SIX + {0xA8ED, 0x2466}, //7010 #CIRCLED DIGIT SEVEN + {0xA8EE, 0x2467}, //7011 #CIRCLED DIGIT EIGHT + {0xA8EF, 0x2468}, //7012 #CIRCLED DIGIT NINE + {0xA8F0, 0x2469}, //7013 #CIRCLED NUMBER TEN + {0xA8F1, 0x246A}, //7014 #CIRCLED NUMBER ELEVEN + {0xA8F2, 0x246B}, //7015 #CIRCLED NUMBER TWELVE + {0xA8F3, 0x246C}, //7016 #CIRCLED NUMBER THIRTEEN + {0xA8F4, 0x246D}, //7017 #CIRCLED NUMBER FOURTEEN + {0xA8F5, 0x246E}, //7018 #CIRCLED NUMBER FIFTEEN + {0xA8F6, 0x00BD}, //7019 #VULGAR FRACTION ONE HALF + {0xA8F7, 0x2153}, //7020 #VULGAR FRACTION ONE THIRD + {0xA8F8, 0x2154}, //7021 #VULGAR FRACTION TWO THIRDS + {0xA8F9, 0x00BC}, //7022 #VULGAR FRACTION ONE QUARTER + {0xA8FA, 0x00BE}, //7023 #VULGAR FRACTION THREE QUARTERS + {0xA8FB, 0x215B}, //7024 #VULGAR FRACTION ONE EIGHTH + {0xA8FC, 0x215C}, //7025 #VULGAR FRACTION THREE EIGHTHS + {0xA8FD, 0x215D}, //7026 #VULGAR FRACTION FIVE EIGHTHS + {0xA8FE, 0x215E}, //7027 #VULGAR FRACTION SEVEN EIGHTHS + {0xA941, 0xCBC5}, //7028 #HANGUL SYLLABLE SSANGCIEUC YU RIEULTHIEUTH + {0xA942, 0xCBC6}, //7029 #HANGUL SYLLABLE SSANGCIEUC YU RIEULPHIEUPH + {0xA943, 0xCBC7}, //7030 #HANGUL SYLLABLE SSANGCIEUC YU RIEULHIEUH + {0xA944, 0xCBC8}, //7031 #HANGUL SYLLABLE SSANGCIEUC YU MIEUM + {0xA945, 0xCBC9}, //7032 #HANGUL SYLLABLE SSANGCIEUC YU PIEUP + {0xA946, 0xCBCA}, //7033 #HANGUL SYLLABLE SSANGCIEUC YU PIEUPSIOS + {0xA947, 0xCBCB}, //7034 #HANGUL SYLLABLE SSANGCIEUC YU SIOS + {0xA948, 0xCBCC}, //7035 #HANGUL SYLLABLE SSANGCIEUC YU SSANGSIOS + {0xA949, 0xCBCD}, //7036 #HANGUL SYLLABLE SSANGCIEUC YU IEUNG + {0xA94A, 0xCBCE}, //7037 #HANGUL SYLLABLE SSANGCIEUC YU CIEUC + {0xA94B, 0xCBCF}, //7038 #HANGUL SYLLABLE SSANGCIEUC YU CHIEUCH + {0xA94C, 0xCBD0}, //7039 #HANGUL SYLLABLE SSANGCIEUC YU KHIEUKH + {0xA94D, 0xCBD1}, //7040 #HANGUL SYLLABLE SSANGCIEUC YU THIEUTH + {0xA94E, 0xCBD2}, //7041 #HANGUL SYLLABLE SSANGCIEUC YU PHIEUPH + {0xA94F, 0xCBD3}, //7042 #HANGUL SYLLABLE SSANGCIEUC YU HIEUH + {0xA950, 0xCBD5}, //7043 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOK + {0xA951, 0xCBD6}, //7044 #HANGUL SYLLABLE SSANGCIEUC EU SSANGKIYEOK + {0xA952, 0xCBD7}, //7045 #HANGUL SYLLABLE SSANGCIEUC EU KIYEOKSIOS + {0xA953, 0xCBD8}, //7046 #HANGUL SYLLABLE SSANGCIEUC EU NIEUN + {0xA954, 0xCBD9}, //7047 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNCIEUC + {0xA955, 0xCBDA}, //7048 #HANGUL SYLLABLE SSANGCIEUC EU NIEUNHIEUH + {0xA956, 0xCBDB}, //7049 #HANGUL SYLLABLE SSANGCIEUC EU TIKEUT + {0xA957, 0xCBDC}, //7050 #HANGUL SYLLABLE SSANGCIEUC EU RIEUL + {0xA958, 0xCBDD}, //7051 #HANGUL SYLLABLE SSANGCIEUC EU RIEULKIYEOK + {0xA959, 0xCBDE}, //7052 #HANGUL SYLLABLE SSANGCIEUC EU RIEULMIEUM + {0xA95A, 0xCBDF}, //7053 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPIEUP + {0xA961, 0xCBE0}, //7054 #HANGUL SYLLABLE SSANGCIEUC EU RIEULSIOS + {0xA962, 0xCBE1}, //7055 #HANGUL SYLLABLE SSANGCIEUC EU RIEULTHIEUTH + {0xA963, 0xCBE2}, //7056 #HANGUL SYLLABLE SSANGCIEUC EU RIEULPHIEUPH + {0xA964, 0xCBE3}, //7057 #HANGUL SYLLABLE SSANGCIEUC EU RIEULHIEUH + {0xA965, 0xCBE5}, //7058 #HANGUL SYLLABLE SSANGCIEUC EU PIEUP + {0xA966, 0xCBE6}, //7059 #HANGUL SYLLABLE SSANGCIEUC EU PIEUPSIOS + {0xA967, 0xCBE8}, //7060 #HANGUL SYLLABLE SSANGCIEUC EU SSANGSIOS + {0xA968, 0xCBEA}, //7061 #HANGUL SYLLABLE SSANGCIEUC EU CIEUC + {0xA969, 0xCBEB}, //7062 #HANGUL SYLLABLE SSANGCIEUC EU CHIEUCH + {0xA96A, 0xCBEC}, //7063 #HANGUL SYLLABLE SSANGCIEUC EU KHIEUKH + {0xA96B, 0xCBED}, //7064 #HANGUL SYLLABLE SSANGCIEUC EU THIEUTH + {0xA96C, 0xCBEE}, //7065 #HANGUL SYLLABLE SSANGCIEUC EU PHIEUPH + {0xA96D, 0xCBEF}, //7066 #HANGUL SYLLABLE SSANGCIEUC EU HIEUH + {0xA96E, 0xCBF0}, //7067 #HANGUL SYLLABLE SSANGCIEUC YI + {0xA96F, 0xCBF1}, //7068 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOK + {0xA970, 0xCBF2}, //7069 #HANGUL SYLLABLE SSANGCIEUC YI SSANGKIYEOK + {0xA971, 0xCBF3}, //7070 #HANGUL SYLLABLE SSANGCIEUC YI KIYEOKSIOS + {0xA972, 0xCBF4}, //7071 #HANGUL SYLLABLE SSANGCIEUC YI NIEUN + {0xA973, 0xCBF5}, //7072 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNCIEUC + {0xA974, 0xCBF6}, //7073 #HANGUL SYLLABLE SSANGCIEUC YI NIEUNHIEUH + {0xA975, 0xCBF7}, //7074 #HANGUL SYLLABLE SSANGCIEUC YI TIKEUT + {0xA976, 0xCBF8}, //7075 #HANGUL SYLLABLE SSANGCIEUC YI RIEUL + {0xA977, 0xCBF9}, //7076 #HANGUL SYLLABLE SSANGCIEUC YI RIEULKIYEOK + {0xA978, 0xCBFA}, //7077 #HANGUL SYLLABLE SSANGCIEUC YI RIEULMIEUM + {0xA979, 0xCBFB}, //7078 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPIEUP + {0xA97A, 0xCBFC}, //7079 #HANGUL SYLLABLE SSANGCIEUC YI RIEULSIOS + {0xA981, 0xCBFD}, //7080 #HANGUL SYLLABLE SSANGCIEUC YI RIEULTHIEUTH + {0xA982, 0xCBFE}, //7081 #HANGUL SYLLABLE SSANGCIEUC YI RIEULPHIEUPH + {0xA983, 0xCBFF}, //7082 #HANGUL SYLLABLE SSANGCIEUC YI RIEULHIEUH + {0xA984, 0xCC00}, //7083 #HANGUL SYLLABLE SSANGCIEUC YI MIEUM + {0xA985, 0xCC01}, //7084 #HANGUL SYLLABLE SSANGCIEUC YI PIEUP + {0xA986, 0xCC02}, //7085 #HANGUL SYLLABLE SSANGCIEUC YI PIEUPSIOS + {0xA987, 0xCC03}, //7086 #HANGUL SYLLABLE SSANGCIEUC YI SIOS + {0xA988, 0xCC04}, //7087 #HANGUL SYLLABLE SSANGCIEUC YI SSANGSIOS + {0xA989, 0xCC05}, //7088 #HANGUL SYLLABLE SSANGCIEUC YI IEUNG + {0xA98A, 0xCC06}, //7089 #HANGUL SYLLABLE SSANGCIEUC YI CIEUC + {0xA98B, 0xCC07}, //7090 #HANGUL SYLLABLE SSANGCIEUC YI CHIEUCH + {0xA98C, 0xCC08}, //7091 #HANGUL SYLLABLE SSANGCIEUC YI KHIEUKH + {0xA98D, 0xCC09}, //7092 #HANGUL SYLLABLE SSANGCIEUC YI THIEUTH + {0xA98E, 0xCC0A}, //7093 #HANGUL SYLLABLE SSANGCIEUC YI PHIEUPH + {0xA98F, 0xCC0B}, //7094 #HANGUL SYLLABLE SSANGCIEUC YI HIEUH + {0xA990, 0xCC0E}, //7095 #HANGUL SYLLABLE SSANGCIEUC I SSANGKIYEOK + {0xA991, 0xCC0F}, //7096 #HANGUL SYLLABLE SSANGCIEUC I KIYEOKSIOS + {0xA992, 0xCC11}, //7097 #HANGUL SYLLABLE SSANGCIEUC I NIEUNCIEUC + {0xA993, 0xCC12}, //7098 #HANGUL SYLLABLE SSANGCIEUC I NIEUNHIEUH + {0xA994, 0xCC13}, //7099 #HANGUL SYLLABLE SSANGCIEUC I TIKEUT + {0xA995, 0xCC15}, //7100 #HANGUL SYLLABLE SSANGCIEUC I RIEULKIYEOK + {0xA996, 0xCC16}, //7101 #HANGUL SYLLABLE SSANGCIEUC I RIEULMIEUM + {0xA997, 0xCC17}, //7102 #HANGUL SYLLABLE SSANGCIEUC I RIEULPIEUP + {0xA998, 0xCC18}, //7103 #HANGUL SYLLABLE SSANGCIEUC I RIEULSIOS + {0xA999, 0xCC19}, //7104 #HANGUL SYLLABLE SSANGCIEUC I RIEULTHIEUTH + {0xA99A, 0xCC1A}, //7105 #HANGUL SYLLABLE SSANGCIEUC I RIEULPHIEUPH + {0xA99B, 0xCC1B}, //7106 #HANGUL SYLLABLE SSANGCIEUC I RIEULHIEUH + {0xA99C, 0xCC1E}, //7107 #HANGUL SYLLABLE SSANGCIEUC I PIEUPSIOS + {0xA99D, 0xCC1F}, //7108 #HANGUL SYLLABLE SSANGCIEUC I SIOS + {0xA99E, 0xCC20}, //7109 #HANGUL SYLLABLE SSANGCIEUC I SSANGSIOS + {0xA99F, 0xCC23}, //7110 #HANGUL SYLLABLE SSANGCIEUC I CHIEUCH + {0xA9A0, 0xCC24}, //7111 #HANGUL SYLLABLE SSANGCIEUC I KHIEUKH + {0xA9A1, 0x00E6}, //7112 #LATIN SMALL LETTER AE + {0xA9A2, 0x0111}, //7113 #LATIN SMALL LETTER D WITH STROKE + {0xA9A3, 0x00F0}, //7114 #LATIN SMALL LETTER ETH + {0xA9A4, 0x0127}, //7115 #LATIN SMALL LETTER H WITH STROKE + {0xA9A5, 0x0131}, //7116 #LATIN SMALL LETTER DOTLESS I + {0xA9A6, 0x0133}, //7117 #LATIN SMALL LIGATURE IJ + {0xA9A7, 0x0138}, //7118 #LATIN SMALL LETTER KRA + {0xA9A8, 0x0140}, //7119 #LATIN SMALL LETTER L WITH MIDDLE DOT + {0xA9A9, 0x0142}, //7120 #LATIN SMALL LETTER L WITH STROKE + {0xA9AA, 0x00F8}, //7121 #LATIN SMALL LETTER O WITH STROKE + {0xA9AB, 0x0153}, //7122 #LATIN SMALL LIGATURE OE + {0xA9AC, 0x00DF}, //7123 #LATIN SMALL LETTER SHARP S + {0xA9AD, 0x00FE}, //7124 #LATIN SMALL LETTER THORN + {0xA9AE, 0x0167}, //7125 #LATIN SMALL LETTER T WITH STROKE + {0xA9AF, 0x014B}, //7126 #LATIN SMALL LETTER ENG + {0xA9B0, 0x0149}, //7127 #LATIN SMALL LETTER N PRECEDED BY APOSTROPHE + {0xA9B1, 0x3200}, //7128 #PARENTHESIZED HANGUL KIYEOK + {0xA9B2, 0x3201}, //7129 #PARENTHESIZED HANGUL NIEUN + {0xA9B3, 0x3202}, //7130 #PARENTHESIZED HANGUL TIKEUT + {0xA9B4, 0x3203}, //7131 #PARENTHESIZED HANGUL RIEUL + {0xA9B5, 0x3204}, //7132 #PARENTHESIZED HANGUL MIEUM + {0xA9B6, 0x3205}, //7133 #PARENTHESIZED HANGUL PIEUP + {0xA9B7, 0x3206}, //7134 #PARENTHESIZED HANGUL SIOS + {0xA9B8, 0x3207}, //7135 #PARENTHESIZED HANGUL IEUNG + {0xA9B9, 0x3208}, //7136 #PARENTHESIZED HANGUL CIEUC + {0xA9BA, 0x3209}, //7137 #PARENTHESIZED HANGUL CHIEUCH + {0xA9BB, 0x320A}, //7138 #PARENTHESIZED HANGUL KHIEUKH + {0xA9BC, 0x320B}, //7139 #PARENTHESIZED HANGUL THIEUTH + {0xA9BD, 0x320C}, //7140 #PARENTHESIZED HANGUL PHIEUPH + {0xA9BE, 0x320D}, //7141 #PARENTHESIZED HANGUL HIEUH + {0xA9BF, 0x320E}, //7142 #PARENTHESIZED HANGUL KIYEOK A + {0xA9C0, 0x320F}, //7143 #PARENTHESIZED HANGUL NIEUN A + {0xA9C1, 0x3210}, //7144 #PARENTHESIZED HANGUL TIKEUT A + {0xA9C2, 0x3211}, //7145 #PARENTHESIZED HANGUL RIEUL A + {0xA9C3, 0x3212}, //7146 #PARENTHESIZED HANGUL MIEUM A + {0xA9C4, 0x3213}, //7147 #PARENTHESIZED HANGUL PIEUP A + {0xA9C5, 0x3214}, //7148 #PARENTHESIZED HANGUL SIOS A + {0xA9C6, 0x3215}, //7149 #PARENTHESIZED HANGUL IEUNG A + {0xA9C7, 0x3216}, //7150 #PARENTHESIZED HANGUL CIEUC A + {0xA9C8, 0x3217}, //7151 #PARENTHESIZED HANGUL CHIEUCH A + {0xA9C9, 0x3218}, //7152 #PARENTHESIZED HANGUL KHIEUKH A + {0xA9CA, 0x3219}, //7153 #PARENTHESIZED HANGUL THIEUTH A + {0xA9CB, 0x321A}, //7154 #PARENTHESIZED HANGUL PHIEUPH A + {0xA9CC, 0x321B}, //7155 #PARENTHESIZED HANGUL HIEUH A + {0xA9CD, 0x249C}, //7156 #PARENTHESIZED LATIN SMALL LETTER A + {0xA9CE, 0x249D}, //7157 #PARENTHESIZED LATIN SMALL LETTER B + {0xA9CF, 0x249E}, //7158 #PARENTHESIZED LATIN SMALL LETTER C + {0xA9D0, 0x249F}, //7159 #PARENTHESIZED LATIN SMALL LETTER D + {0xA9D1, 0x24A0}, //7160 #PARENTHESIZED LATIN SMALL LETTER E + {0xA9D2, 0x24A1}, //7161 #PARENTHESIZED LATIN SMALL LETTER F + {0xA9D3, 0x24A2}, //7162 #PARENTHESIZED LATIN SMALL LETTER G + {0xA9D4, 0x24A3}, //7163 #PARENTHESIZED LATIN SMALL LETTER H + {0xA9D5, 0x24A4}, //7164 #PARENTHESIZED LATIN SMALL LETTER I + {0xA9D6, 0x24A5}, //7165 #PARENTHESIZED LATIN SMALL LETTER J + {0xA9D7, 0x24A6}, //7166 #PARENTHESIZED LATIN SMALL LETTER K + {0xA9D8, 0x24A7}, //7167 #PARENTHESIZED LATIN SMALL LETTER L + {0xA9D9, 0x24A8}, //7168 #PARENTHESIZED LATIN SMALL LETTER M + {0xA9DA, 0x24A9}, //7169 #PARENTHESIZED LATIN SMALL LETTER N + {0xA9DB, 0x24AA}, //7170 #PARENTHESIZED LATIN SMALL LETTER O + {0xA9DC, 0x24AB}, //7171 #PARENTHESIZED LATIN SMALL LETTER P + {0xA9DD, 0x24AC}, //7172 #PARENTHESIZED LATIN SMALL LETTER Q + {0xA9DE, 0x24AD}, //7173 #PARENTHESIZED LATIN SMALL LETTER R + {0xA9DF, 0x24AE}, //7174 #PARENTHESIZED LATIN SMALL LETTER S + {0xA9E0, 0x24AF}, //7175 #PARENTHESIZED LATIN SMALL LETTER T + {0xA9E1, 0x24B0}, //7176 #PARENTHESIZED LATIN SMALL LETTER U + {0xA9E2, 0x24B1}, //7177 #PARENTHESIZED LATIN SMALL LETTER V + {0xA9E3, 0x24B2}, //7178 #PARENTHESIZED LATIN SMALL LETTER W + {0xA9E4, 0x24B3}, //7179 #PARENTHESIZED LATIN SMALL LETTER X + {0xA9E5, 0x24B4}, //7180 #PARENTHESIZED LATIN SMALL LETTER Y + {0xA9E6, 0x24B5}, //7181 #PARENTHESIZED LATIN SMALL LETTER Z + {0xA9E7, 0x2474}, //7182 #PARENTHESIZED DIGIT ONE + {0xA9E8, 0x2475}, //7183 #PARENTHESIZED DIGIT TWO + {0xA9E9, 0x2476}, //7184 #PARENTHESIZED DIGIT THREE + {0xA9EA, 0x2477}, //7185 #PARENTHESIZED DIGIT FOUR + {0xA9EB, 0x2478}, //7186 #PARENTHESIZED DIGIT FIVE + {0xA9EC, 0x2479}, //7187 #PARENTHESIZED DIGIT SIX + {0xA9ED, 0x247A}, //7188 #PARENTHESIZED DIGIT SEVEN + {0xA9EE, 0x247B}, //7189 #PARENTHESIZED DIGIT EIGHT + {0xA9EF, 0x247C}, //7190 #PARENTHESIZED DIGIT NINE + {0xA9F0, 0x247D}, //7191 #PARENTHESIZED NUMBER TEN + {0xA9F1, 0x247E}, //7192 #PARENTHESIZED NUMBER ELEVEN + {0xA9F2, 0x247F}, //7193 #PARENTHESIZED NUMBER TWELVE + {0xA9F3, 0x2480}, //7194 #PARENTHESIZED NUMBER THIRTEEN + {0xA9F4, 0x2481}, //7195 #PARENTHESIZED NUMBER FOURTEEN + {0xA9F5, 0x2482}, //7196 #PARENTHESIZED NUMBER FIFTEEN + {0xA9F6, 0x00B9}, //7197 #SUPERSCRIPT ONE + {0xA9F7, 0x00B2}, //7198 #SUPERSCRIPT TWO + {0xA9F8, 0x00B3}, //7199 #SUPERSCRIPT THREE + {0xA9F9, 0x2074}, //7200 #SUPERSCRIPT FOUR + {0xA9FA, 0x207F}, //7201 #SUPERSCRIPT LATIN SMALL LETTER N + {0xA9FB, 0x2081}, //7202 #SUBSCRIPT ONE + {0xA9FC, 0x2082}, //7203 #SUBSCRIPT TWO + {0xA9FD, 0x2083}, //7204 #SUBSCRIPT THREE + {0xA9FE, 0x2084}, //7205 #SUBSCRIPT FOUR + {0xAA41, 0xCC25}, //7206 #HANGUL SYLLABLE SSANGCIEUC I THIEUTH + {0xAA42, 0xCC26}, //7207 #HANGUL SYLLABLE SSANGCIEUC I PHIEUPH + {0xAA43, 0xCC2A}, //7208 #HANGUL SYLLABLE CHIEUCH A SSANGKIYEOK + {0xAA44, 0xCC2B}, //7209 #HANGUL SYLLABLE CHIEUCH A KIYEOKSIOS + {0xAA45, 0xCC2D}, //7210 #HANGUL SYLLABLE CHIEUCH A NIEUNCIEUC + {0xAA46, 0xCC2F}, //7211 #HANGUL SYLLABLE CHIEUCH A TIKEUT + {0xAA47, 0xCC31}, //7212 #HANGUL SYLLABLE CHIEUCH A RIEULKIYEOK + {0xAA48, 0xCC32}, //7213 #HANGUL SYLLABLE CHIEUCH A RIEULMIEUM + {0xAA49, 0xCC33}, //7214 #HANGUL SYLLABLE CHIEUCH A RIEULPIEUP + {0xAA4A, 0xCC34}, //7215 #HANGUL SYLLABLE CHIEUCH A RIEULSIOS + {0xAA4B, 0xCC35}, //7216 #HANGUL SYLLABLE CHIEUCH A RIEULTHIEUTH + {0xAA4C, 0xCC36}, //7217 #HANGUL SYLLABLE CHIEUCH A RIEULPHIEUPH + {0xAA4D, 0xCC37}, //7218 #HANGUL SYLLABLE CHIEUCH A RIEULHIEUH + {0xAA4E, 0xCC3A}, //7219 #HANGUL SYLLABLE CHIEUCH A PIEUPSIOS + {0xAA4F, 0xCC3F}, //7220 #HANGUL SYLLABLE CHIEUCH A CHIEUCH + {0xAA50, 0xCC40}, //7221 #HANGUL SYLLABLE CHIEUCH A KHIEUKH + {0xAA51, 0xCC41}, //7222 #HANGUL SYLLABLE CHIEUCH A THIEUTH + {0xAA52, 0xCC42}, //7223 #HANGUL SYLLABLE CHIEUCH A PHIEUPH + {0xAA53, 0xCC43}, //7224 #HANGUL SYLLABLE CHIEUCH A HIEUH + {0xAA54, 0xCC46}, //7225 #HANGUL SYLLABLE CHIEUCH AE SSANGKIYEOK + {0xAA55, 0xCC47}, //7226 #HANGUL SYLLABLE CHIEUCH AE KIYEOKSIOS + {0xAA56, 0xCC49}, //7227 #HANGUL SYLLABLE CHIEUCH AE NIEUNCIEUC + {0xAA57, 0xCC4A}, //7228 #HANGUL SYLLABLE CHIEUCH AE NIEUNHIEUH + {0xAA58, 0xCC4B}, //7229 #HANGUL SYLLABLE CHIEUCH AE TIKEUT + {0xAA59, 0xCC4D}, //7230 #HANGUL SYLLABLE CHIEUCH AE RIEULKIYEOK + {0xAA5A, 0xCC4E}, //7231 #HANGUL SYLLABLE CHIEUCH AE RIEULMIEUM + {0xAA61, 0xCC4F}, //7232 #HANGUL SYLLABLE CHIEUCH AE RIEULPIEUP + {0xAA62, 0xCC50}, //7233 #HANGUL SYLLABLE CHIEUCH AE RIEULSIOS + {0xAA63, 0xCC51}, //7234 #HANGUL SYLLABLE CHIEUCH AE RIEULTHIEUTH + {0xAA64, 0xCC52}, //7235 #HANGUL SYLLABLE CHIEUCH AE RIEULPHIEUPH + {0xAA65, 0xCC53}, //7236 #HANGUL SYLLABLE CHIEUCH AE RIEULHIEUH + {0xAA66, 0xCC56}, //7237 #HANGUL SYLLABLE CHIEUCH AE PIEUPSIOS + {0xAA67, 0xCC5A}, //7238 #HANGUL SYLLABLE CHIEUCH AE CIEUC + {0xAA68, 0xCC5B}, //7239 #HANGUL SYLLABLE CHIEUCH AE CHIEUCH + {0xAA69, 0xCC5C}, //7240 #HANGUL SYLLABLE CHIEUCH AE KHIEUKH + {0xAA6A, 0xCC5D}, //7241 #HANGUL SYLLABLE CHIEUCH AE THIEUTH + {0xAA6B, 0xCC5E}, //7242 #HANGUL SYLLABLE CHIEUCH AE PHIEUPH + {0xAA6C, 0xCC5F}, //7243 #HANGUL SYLLABLE CHIEUCH AE HIEUH + {0xAA6D, 0xCC61}, //7244 #HANGUL SYLLABLE CHIEUCH YA KIYEOK + {0xAA6E, 0xCC62}, //7245 #HANGUL SYLLABLE CHIEUCH YA SSANGKIYEOK + {0xAA6F, 0xCC63}, //7246 #HANGUL SYLLABLE CHIEUCH YA KIYEOKSIOS + {0xAA70, 0xCC65}, //7247 #HANGUL SYLLABLE CHIEUCH YA NIEUNCIEUC + {0xAA71, 0xCC67}, //7248 #HANGUL SYLLABLE CHIEUCH YA TIKEUT + {0xAA72, 0xCC69}, //7249 #HANGUL SYLLABLE CHIEUCH YA RIEULKIYEOK + {0xAA73, 0xCC6A}, //7250 #HANGUL SYLLABLE CHIEUCH YA RIEULMIEUM + {0xAA74, 0xCC6B}, //7251 #HANGUL SYLLABLE CHIEUCH YA RIEULPIEUP + {0xAA75, 0xCC6C}, //7252 #HANGUL SYLLABLE CHIEUCH YA RIEULSIOS + {0xAA76, 0xCC6D}, //7253 #HANGUL SYLLABLE CHIEUCH YA RIEULTHIEUTH + {0xAA77, 0xCC6E}, //7254 #HANGUL SYLLABLE CHIEUCH YA RIEULPHIEUPH + {0xAA78, 0xCC6F}, //7255 #HANGUL SYLLABLE CHIEUCH YA RIEULHIEUH + {0xAA79, 0xCC71}, //7256 #HANGUL SYLLABLE CHIEUCH YA PIEUP + {0xAA7A, 0xCC72}, //7257 #HANGUL SYLLABLE CHIEUCH YA PIEUPSIOS + {0xAA81, 0xCC73}, //7258 #HANGUL SYLLABLE CHIEUCH YA SIOS + {0xAA82, 0xCC74}, //7259 #HANGUL SYLLABLE CHIEUCH YA SSANGSIOS + {0xAA83, 0xCC76}, //7260 #HANGUL SYLLABLE CHIEUCH YA CIEUC + {0xAA84, 0xCC77}, //7261 #HANGUL SYLLABLE CHIEUCH YA CHIEUCH + {0xAA85, 0xCC78}, //7262 #HANGUL SYLLABLE CHIEUCH YA KHIEUKH + {0xAA86, 0xCC79}, //7263 #HANGUL SYLLABLE CHIEUCH YA THIEUTH + {0xAA87, 0xCC7A}, //7264 #HANGUL SYLLABLE CHIEUCH YA PHIEUPH + {0xAA88, 0xCC7B}, //7265 #HANGUL SYLLABLE CHIEUCH YA HIEUH + {0xAA89, 0xCC7C}, //7266 #HANGUL SYLLABLE CHIEUCH YAE + {0xAA8A, 0xCC7D}, //7267 #HANGUL SYLLABLE CHIEUCH YAE KIYEOK + {0xAA8B, 0xCC7E}, //7268 #HANGUL SYLLABLE CHIEUCH YAE SSANGKIYEOK + {0xAA8C, 0xCC7F}, //7269 #HANGUL SYLLABLE CHIEUCH YAE KIYEOKSIOS + {0xAA8D, 0xCC80}, //7270 #HANGUL SYLLABLE CHIEUCH YAE NIEUN + {0xAA8E, 0xCC81}, //7271 #HANGUL SYLLABLE CHIEUCH YAE NIEUNCIEUC + {0xAA8F, 0xCC82}, //7272 #HANGUL SYLLABLE CHIEUCH YAE NIEUNHIEUH + {0xAA90, 0xCC83}, //7273 #HANGUL SYLLABLE CHIEUCH YAE TIKEUT + {0xAA91, 0xCC84}, //7274 #HANGUL SYLLABLE CHIEUCH YAE RIEUL + {0xAA92, 0xCC85}, //7275 #HANGUL SYLLABLE CHIEUCH YAE RIEULKIYEOK + {0xAA93, 0xCC86}, //7276 #HANGUL SYLLABLE CHIEUCH YAE RIEULMIEUM + {0xAA94, 0xCC87}, //7277 #HANGUL SYLLABLE CHIEUCH YAE RIEULPIEUP + {0xAA95, 0xCC88}, //7278 #HANGUL SYLLABLE CHIEUCH YAE RIEULSIOS + {0xAA96, 0xCC89}, //7279 #HANGUL SYLLABLE CHIEUCH YAE RIEULTHIEUTH + {0xAA97, 0xCC8A}, //7280 #HANGUL SYLLABLE CHIEUCH YAE RIEULPHIEUPH + {0xAA98, 0xCC8B}, //7281 #HANGUL SYLLABLE CHIEUCH YAE RIEULHIEUH + {0xAA99, 0xCC8C}, //7282 #HANGUL SYLLABLE CHIEUCH YAE MIEUM + {0xAA9A, 0xCC8D}, //7283 #HANGUL SYLLABLE CHIEUCH YAE PIEUP + {0xAA9B, 0xCC8E}, //7284 #HANGUL SYLLABLE CHIEUCH YAE PIEUPSIOS + {0xAA9C, 0xCC8F}, //7285 #HANGUL SYLLABLE CHIEUCH YAE SIOS + {0xAA9D, 0xCC90}, //7286 #HANGUL SYLLABLE CHIEUCH YAE SSANGSIOS + {0xAA9E, 0xCC91}, //7287 #HANGUL SYLLABLE CHIEUCH YAE IEUNG + {0xAA9F, 0xCC92}, //7288 #HANGUL SYLLABLE CHIEUCH YAE CIEUC + {0xAAA0, 0xCC93}, //7289 #HANGUL SYLLABLE CHIEUCH YAE CHIEUCH + {0xAAA1, 0x3041}, //7290 #HIRAGANA LETTER SMALL A + {0xAAA2, 0x3042}, //7291 #HIRAGANA LETTER A + {0xAAA3, 0x3043}, //7292 #HIRAGANA LETTER SMALL I + {0xAAA4, 0x3044}, //7293 #HIRAGANA LETTER I + {0xAAA5, 0x3045}, //7294 #HIRAGANA LETTER SMALL U + {0xAAA6, 0x3046}, //7295 #HIRAGANA LETTER U + {0xAAA7, 0x3047}, //7296 #HIRAGANA LETTER SMALL E + {0xAAA8, 0x3048}, //7297 #HIRAGANA LETTER E + {0xAAA9, 0x3049}, //7298 #HIRAGANA LETTER SMALL O + {0xAAAA, 0x304A}, //7299 #HIRAGANA LETTER O + {0xAAAB, 0x304B}, //7300 #HIRAGANA LETTER KA + {0xAAAC, 0x304C}, //7301 #HIRAGANA LETTER GA + {0xAAAD, 0x304D}, //7302 #HIRAGANA LETTER KI + {0xAAAE, 0x304E}, //7303 #HIRAGANA LETTER GI + {0xAAAF, 0x304F}, //7304 #HIRAGANA LETTER KU + {0xAAB0, 0x3050}, //7305 #HIRAGANA LETTER GU + {0xAAB1, 0x3051}, //7306 #HIRAGANA LETTER KE + {0xAAB2, 0x3052}, //7307 #HIRAGANA LETTER GE + {0xAAB3, 0x3053}, //7308 #HIRAGANA LETTER KO + {0xAAB4, 0x3054}, //7309 #HIRAGANA LETTER GO + {0xAAB5, 0x3055}, //7310 #HIRAGANA LETTER SA + {0xAAB6, 0x3056}, //7311 #HIRAGANA LETTER ZA + {0xAAB7, 0x3057}, //7312 #HIRAGANA LETTER SI + {0xAAB8, 0x3058}, //7313 #HIRAGANA LETTER ZI + {0xAAB9, 0x3059}, //7314 #HIRAGANA LETTER SU + {0xAABA, 0x305A}, //7315 #HIRAGANA LETTER ZU + {0xAABB, 0x305B}, //7316 #HIRAGANA LETTER SE + {0xAABC, 0x305C}, //7317 #HIRAGANA LETTER ZE + {0xAABD, 0x305D}, //7318 #HIRAGANA LETTER SO + {0xAABE, 0x305E}, //7319 #HIRAGANA LETTER ZO + {0xAABF, 0x305F}, //7320 #HIRAGANA LETTER TA + {0xAAC0, 0x3060}, //7321 #HIRAGANA LETTER DA + {0xAAC1, 0x3061}, //7322 #HIRAGANA LETTER TI + {0xAAC2, 0x3062}, //7323 #HIRAGANA LETTER DI + {0xAAC3, 0x3063}, //7324 #HIRAGANA LETTER SMALL TU + {0xAAC4, 0x3064}, //7325 #HIRAGANA LETTER TU + {0xAAC5, 0x3065}, //7326 #HIRAGANA LETTER DU + {0xAAC6, 0x3066}, //7327 #HIRAGANA LETTER TE + {0xAAC7, 0x3067}, //7328 #HIRAGANA LETTER DE + {0xAAC8, 0x3068}, //7329 #HIRAGANA LETTER TO + {0xAAC9, 0x3069}, //7330 #HIRAGANA LETTER DO + {0xAACA, 0x306A}, //7331 #HIRAGANA LETTER NA + {0xAACB, 0x306B}, //7332 #HIRAGANA LETTER NI + {0xAACC, 0x306C}, //7333 #HIRAGANA LETTER NU + {0xAACD, 0x306D}, //7334 #HIRAGANA LETTER NE + {0xAACE, 0x306E}, //7335 #HIRAGANA LETTER NO + {0xAACF, 0x306F}, //7336 #HIRAGANA LETTER HA + {0xAAD0, 0x3070}, //7337 #HIRAGANA LETTER BA + {0xAAD1, 0x3071}, //7338 #HIRAGANA LETTER PA + {0xAAD2, 0x3072}, //7339 #HIRAGANA LETTER HI + {0xAAD3, 0x3073}, //7340 #HIRAGANA LETTER BI + {0xAAD4, 0x3074}, //7341 #HIRAGANA LETTER PI + {0xAAD5, 0x3075}, //7342 #HIRAGANA LETTER HU + {0xAAD6, 0x3076}, //7343 #HIRAGANA LETTER BU + {0xAAD7, 0x3077}, //7344 #HIRAGANA LETTER PU + {0xAAD8, 0x3078}, //7345 #HIRAGANA LETTER HE + {0xAAD9, 0x3079}, //7346 #HIRAGANA LETTER BE + {0xAADA, 0x307A}, //7347 #HIRAGANA LETTER PE + {0xAADB, 0x307B}, //7348 #HIRAGANA LETTER HO + {0xAADC, 0x307C}, //7349 #HIRAGANA LETTER BO + {0xAADD, 0x307D}, //7350 #HIRAGANA LETTER PO + {0xAADE, 0x307E}, //7351 #HIRAGANA LETTER MA + {0xAADF, 0x307F}, //7352 #HIRAGANA LETTER MI + {0xAAE0, 0x3080}, //7353 #HIRAGANA LETTER MU + {0xAAE1, 0x3081}, //7354 #HIRAGANA LETTER ME + {0xAAE2, 0x3082}, //7355 #HIRAGANA LETTER MO + {0xAAE3, 0x3083}, //7356 #HIRAGANA LETTER SMALL YA + {0xAAE4, 0x3084}, //7357 #HIRAGANA LETTER YA + {0xAAE5, 0x3085}, //7358 #HIRAGANA LETTER SMALL YU + {0xAAE6, 0x3086}, //7359 #HIRAGANA LETTER YU + {0xAAE7, 0x3087}, //7360 #HIRAGANA LETTER SMALL YO + {0xAAE8, 0x3088}, //7361 #HIRAGANA LETTER YO + {0xAAE9, 0x3089}, //7362 #HIRAGANA LETTER RA + {0xAAEA, 0x308A}, //7363 #HIRAGANA LETTER RI + {0xAAEB, 0x308B}, //7364 #HIRAGANA LETTER RU + {0xAAEC, 0x308C}, //7365 #HIRAGANA LETTER RE + {0xAAED, 0x308D}, //7366 #HIRAGANA LETTER RO + {0xAAEE, 0x308E}, //7367 #HIRAGANA LETTER SMALL WA + {0xAAEF, 0x308F}, //7368 #HIRAGANA LETTER WA + {0xAAF0, 0x3090}, //7369 #HIRAGANA LETTER WI + {0xAAF1, 0x3091}, //7370 #HIRAGANA LETTER WE + {0xAAF2, 0x3092}, //7371 #HIRAGANA LETTER WO + {0xAAF3, 0x3093}, //7372 #HIRAGANA LETTER N + {0xAB41, 0xCC94}, //7373 #HANGUL SYLLABLE CHIEUCH YAE KHIEUKH + {0xAB42, 0xCC95}, //7374 #HANGUL SYLLABLE CHIEUCH YAE THIEUTH + {0xAB43, 0xCC96}, //7375 #HANGUL SYLLABLE CHIEUCH YAE PHIEUPH + {0xAB44, 0xCC97}, //7376 #HANGUL SYLLABLE CHIEUCH YAE HIEUH + {0xAB45, 0xCC9A}, //7377 #HANGUL SYLLABLE CHIEUCH EO SSANGKIYEOK + {0xAB46, 0xCC9B}, //7378 #HANGUL SYLLABLE CHIEUCH EO KIYEOKSIOS + {0xAB47, 0xCC9D}, //7379 #HANGUL SYLLABLE CHIEUCH EO NIEUNCIEUC + {0xAB48, 0xCC9E}, //7380 #HANGUL SYLLABLE CHIEUCH EO NIEUNHIEUH + {0xAB49, 0xCC9F}, //7381 #HANGUL SYLLABLE CHIEUCH EO TIKEUT + {0xAB4A, 0xCCA1}, //7382 #HANGUL SYLLABLE CHIEUCH EO RIEULKIYEOK + {0xAB4B, 0xCCA2}, //7383 #HANGUL SYLLABLE CHIEUCH EO RIEULMIEUM + {0xAB4C, 0xCCA3}, //7384 #HANGUL SYLLABLE CHIEUCH EO RIEULPIEUP + {0xAB4D, 0xCCA4}, //7385 #HANGUL SYLLABLE CHIEUCH EO RIEULSIOS + {0xAB4E, 0xCCA5}, //7386 #HANGUL SYLLABLE CHIEUCH EO RIEULTHIEUTH + {0xAB4F, 0xCCA6}, //7387 #HANGUL SYLLABLE CHIEUCH EO RIEULPHIEUPH + {0xAB50, 0xCCA7}, //7388 #HANGUL SYLLABLE CHIEUCH EO RIEULHIEUH + {0xAB51, 0xCCAA}, //7389 #HANGUL SYLLABLE CHIEUCH EO PIEUPSIOS + {0xAB52, 0xCCAE}, //7390 #HANGUL SYLLABLE CHIEUCH EO CIEUC + {0xAB53, 0xCCAF}, //7391 #HANGUL SYLLABLE CHIEUCH EO CHIEUCH + {0xAB54, 0xCCB0}, //7392 #HANGUL SYLLABLE CHIEUCH EO KHIEUKH + {0xAB55, 0xCCB1}, //7393 #HANGUL SYLLABLE CHIEUCH EO THIEUTH + {0xAB56, 0xCCB2}, //7394 #HANGUL SYLLABLE CHIEUCH EO PHIEUPH + {0xAB57, 0xCCB3}, //7395 #HANGUL SYLLABLE CHIEUCH EO HIEUH + {0xAB58, 0xCCB6}, //7396 #HANGUL SYLLABLE CHIEUCH E SSANGKIYEOK + {0xAB59, 0xCCB7}, //7397 #HANGUL SYLLABLE CHIEUCH E KIYEOKSIOS + {0xAB5A, 0xCCB9}, //7398 #HANGUL SYLLABLE CHIEUCH E NIEUNCIEUC + {0xAB61, 0xCCBA}, //7399 #HANGUL SYLLABLE CHIEUCH E NIEUNHIEUH + {0xAB62, 0xCCBB}, //7400 #HANGUL SYLLABLE CHIEUCH E TIKEUT + {0xAB63, 0xCCBD}, //7401 #HANGUL SYLLABLE CHIEUCH E RIEULKIYEOK + {0xAB64, 0xCCBE}, //7402 #HANGUL SYLLABLE CHIEUCH E RIEULMIEUM + {0xAB65, 0xCCBF}, //7403 #HANGUL SYLLABLE CHIEUCH E RIEULPIEUP + {0xAB66, 0xCCC0}, //7404 #HANGUL SYLLABLE CHIEUCH E RIEULSIOS + {0xAB67, 0xCCC1}, //7405 #HANGUL SYLLABLE CHIEUCH E RIEULTHIEUTH + {0xAB68, 0xCCC2}, //7406 #HANGUL SYLLABLE CHIEUCH E RIEULPHIEUPH + {0xAB69, 0xCCC3}, //7407 #HANGUL SYLLABLE CHIEUCH E RIEULHIEUH + {0xAB6A, 0xCCC6}, //7408 #HANGUL SYLLABLE CHIEUCH E PIEUPSIOS + {0xAB6B, 0xCCC8}, //7409 #HANGUL SYLLABLE CHIEUCH E SSANGSIOS + {0xAB6C, 0xCCCA}, //7410 #HANGUL SYLLABLE CHIEUCH E CIEUC + {0xAB6D, 0xCCCB}, //7411 #HANGUL SYLLABLE CHIEUCH E CHIEUCH + {0xAB6E, 0xCCCC}, //7412 #HANGUL SYLLABLE CHIEUCH E KHIEUKH + {0xAB6F, 0xCCCD}, //7413 #HANGUL SYLLABLE CHIEUCH E THIEUTH + {0xAB70, 0xCCCE}, //7414 #HANGUL SYLLABLE CHIEUCH E PHIEUPH + {0xAB71, 0xCCCF}, //7415 #HANGUL SYLLABLE CHIEUCH E HIEUH + {0xAB72, 0xCCD1}, //7416 #HANGUL SYLLABLE CHIEUCH YEO KIYEOK + {0xAB73, 0xCCD2}, //7417 #HANGUL SYLLABLE CHIEUCH YEO SSANGKIYEOK + {0xAB74, 0xCCD3}, //7418 #HANGUL SYLLABLE CHIEUCH YEO KIYEOKSIOS + {0xAB75, 0xCCD5}, //7419 #HANGUL SYLLABLE CHIEUCH YEO NIEUNCIEUC + {0xAB76, 0xCCD6}, //7420 #HANGUL SYLLABLE CHIEUCH YEO NIEUNHIEUH + {0xAB77, 0xCCD7}, //7421 #HANGUL SYLLABLE CHIEUCH YEO TIKEUT + {0xAB78, 0xCCD8}, //7422 #HANGUL SYLLABLE CHIEUCH YEO RIEUL + {0xAB79, 0xCCD9}, //7423 #HANGUL SYLLABLE CHIEUCH YEO RIEULKIYEOK + {0xAB7A, 0xCCDA}, //7424 #HANGUL SYLLABLE CHIEUCH YEO RIEULMIEUM + {0xAB81, 0xCCDB}, //7425 #HANGUL SYLLABLE CHIEUCH YEO RIEULPIEUP + {0xAB82, 0xCCDC}, //7426 #HANGUL SYLLABLE CHIEUCH YEO RIEULSIOS + {0xAB83, 0xCCDD}, //7427 #HANGUL SYLLABLE CHIEUCH YEO RIEULTHIEUTH + {0xAB84, 0xCCDE}, //7428 #HANGUL SYLLABLE CHIEUCH YEO RIEULPHIEUPH + {0xAB85, 0xCCDF}, //7429 #HANGUL SYLLABLE CHIEUCH YEO RIEULHIEUH + {0xAB86, 0xCCE0}, //7430 #HANGUL SYLLABLE CHIEUCH YEO MIEUM + {0xAB87, 0xCCE1}, //7431 #HANGUL SYLLABLE CHIEUCH YEO PIEUP + {0xAB88, 0xCCE2}, //7432 #HANGUL SYLLABLE CHIEUCH YEO PIEUPSIOS + {0xAB89, 0xCCE3}, //7433 #HANGUL SYLLABLE CHIEUCH YEO SIOS + {0xAB8A, 0xCCE5}, //7434 #HANGUL SYLLABLE CHIEUCH YEO IEUNG + {0xAB8B, 0xCCE6}, //7435 #HANGUL SYLLABLE CHIEUCH YEO CIEUC + {0xAB8C, 0xCCE7}, //7436 #HANGUL SYLLABLE CHIEUCH YEO CHIEUCH + {0xAB8D, 0xCCE8}, //7437 #HANGUL SYLLABLE CHIEUCH YEO KHIEUKH + {0xAB8E, 0xCCE9}, //7438 #HANGUL SYLLABLE CHIEUCH YEO THIEUTH + {0xAB8F, 0xCCEA}, //7439 #HANGUL SYLLABLE CHIEUCH YEO PHIEUPH + {0xAB90, 0xCCEB}, //7440 #HANGUL SYLLABLE CHIEUCH YEO HIEUH + {0xAB91, 0xCCED}, //7441 #HANGUL SYLLABLE CHIEUCH YE KIYEOK + {0xAB92, 0xCCEE}, //7442 #HANGUL SYLLABLE CHIEUCH YE SSANGKIYEOK + {0xAB93, 0xCCEF}, //7443 #HANGUL SYLLABLE CHIEUCH YE KIYEOKSIOS + {0xAB94, 0xCCF1}, //7444 #HANGUL SYLLABLE CHIEUCH YE NIEUNCIEUC + {0xAB95, 0xCCF2}, //7445 #HANGUL SYLLABLE CHIEUCH YE NIEUNHIEUH + {0xAB96, 0xCCF3}, //7446 #HANGUL SYLLABLE CHIEUCH YE TIKEUT + {0xAB97, 0xCCF4}, //7447 #HANGUL SYLLABLE CHIEUCH YE RIEUL + {0xAB98, 0xCCF5}, //7448 #HANGUL SYLLABLE CHIEUCH YE RIEULKIYEOK + {0xAB99, 0xCCF6}, //7449 #HANGUL SYLLABLE CHIEUCH YE RIEULMIEUM + {0xAB9A, 0xCCF7}, //7450 #HANGUL SYLLABLE CHIEUCH YE RIEULPIEUP + {0xAB9B, 0xCCF8}, //7451 #HANGUL SYLLABLE CHIEUCH YE RIEULSIOS + {0xAB9C, 0xCCF9}, //7452 #HANGUL SYLLABLE CHIEUCH YE RIEULTHIEUTH + {0xAB9D, 0xCCFA}, //7453 #HANGUL SYLLABLE CHIEUCH YE RIEULPHIEUPH + {0xAB9E, 0xCCFB}, //7454 #HANGUL SYLLABLE CHIEUCH YE RIEULHIEUH + {0xAB9F, 0xCCFC}, //7455 #HANGUL SYLLABLE CHIEUCH YE MIEUM + {0xABA0, 0xCCFD}, //7456 #HANGUL SYLLABLE CHIEUCH YE PIEUP + {0xABA1, 0x30A1}, //7457 #KATAKANA LETTER SMALL A + {0xABA2, 0x30A2}, //7458 #KATAKANA LETTER A + {0xABA3, 0x30A3}, //7459 #KATAKANA LETTER SMALL I + {0xABA4, 0x30A4}, //7460 #KATAKANA LETTER I + {0xABA5, 0x30A5}, //7461 #KATAKANA LETTER SMALL U + {0xABA6, 0x30A6}, //7462 #KATAKANA LETTER U + {0xABA7, 0x30A7}, //7463 #KATAKANA LETTER SMALL E + {0xABA8, 0x30A8}, //7464 #KATAKANA LETTER E + {0xABA9, 0x30A9}, //7465 #KATAKANA LETTER SMALL O + {0xABAA, 0x30AA}, //7466 #KATAKANA LETTER O + {0xABAB, 0x30AB}, //7467 #KATAKANA LETTER KA + {0xABAC, 0x30AC}, //7468 #KATAKANA LETTER GA + {0xABAD, 0x30AD}, //7469 #KATAKANA LETTER KI + {0xABAE, 0x30AE}, //7470 #KATAKANA LETTER GI + {0xABAF, 0x30AF}, //7471 #KATAKANA LETTER KU + {0xABB0, 0x30B0}, //7472 #KATAKANA LETTER GU + {0xABB1, 0x30B1}, //7473 #KATAKANA LETTER KE + {0xABB2, 0x30B2}, //7474 #KATAKANA LETTER GE + {0xABB3, 0x30B3}, //7475 #KATAKANA LETTER KO + {0xABB4, 0x30B4}, //7476 #KATAKANA LETTER GO + {0xABB5, 0x30B5}, //7477 #KATAKANA LETTER SA + {0xABB6, 0x30B6}, //7478 #KATAKANA LETTER ZA + {0xABB7, 0x30B7}, //7479 #KATAKANA LETTER SI + {0xABB8, 0x30B8}, //7480 #KATAKANA LETTER ZI + {0xABB9, 0x30B9}, //7481 #KATAKANA LETTER SU + {0xABBA, 0x30BA}, //7482 #KATAKANA LETTER ZU + {0xABBB, 0x30BB}, //7483 #KATAKANA LETTER SE + {0xABBC, 0x30BC}, //7484 #KATAKANA LETTER ZE + {0xABBD, 0x30BD}, //7485 #KATAKANA LETTER SO + {0xABBE, 0x30BE}, //7486 #KATAKANA LETTER ZO + {0xABBF, 0x30BF}, //7487 #KATAKANA LETTER TA + {0xABC0, 0x30C0}, //7488 #KATAKANA LETTER DA + {0xABC1, 0x30C1}, //7489 #KATAKANA LETTER TI + {0xABC2, 0x30C2}, //7490 #KATAKANA LETTER DI + {0xABC3, 0x30C3}, //7491 #KATAKANA LETTER SMALL TU + {0xABC4, 0x30C4}, //7492 #KATAKANA LETTER TU + {0xABC5, 0x30C5}, //7493 #KATAKANA LETTER DU + {0xABC6, 0x30C6}, //7494 #KATAKANA LETTER TE + {0xABC7, 0x30C7}, //7495 #KATAKANA LETTER DE + {0xABC8, 0x30C8}, //7496 #KATAKANA LETTER TO + {0xABC9, 0x30C9}, //7497 #KATAKANA LETTER DO + {0xABCA, 0x30CA}, //7498 #KATAKANA LETTER NA + {0xABCB, 0x30CB}, //7499 #KATAKANA LETTER NI + {0xABCC, 0x30CC}, //7500 #KATAKANA LETTER NU + {0xABCD, 0x30CD}, //7501 #KATAKANA LETTER NE + {0xABCE, 0x30CE}, //7502 #KATAKANA LETTER NO + {0xABCF, 0x30CF}, //7503 #KATAKANA LETTER HA + {0xABD0, 0x30D0}, //7504 #KATAKANA LETTER BA + {0xABD1, 0x30D1}, //7505 #KATAKANA LETTER PA + {0xABD2, 0x30D2}, //7506 #KATAKANA LETTER HI + {0xABD3, 0x30D3}, //7507 #KATAKANA LETTER BI + {0xABD4, 0x30D4}, //7508 #KATAKANA LETTER PI + {0xABD5, 0x30D5}, //7509 #KATAKANA LETTER HU + {0xABD6, 0x30D6}, //7510 #KATAKANA LETTER BU + {0xABD7, 0x30D7}, //7511 #KATAKANA LETTER PU + {0xABD8, 0x30D8}, //7512 #KATAKANA LETTER HE + {0xABD9, 0x30D9}, //7513 #KATAKANA LETTER BE + {0xABDA, 0x30DA}, //7514 #KATAKANA LETTER PE + {0xABDB, 0x30DB}, //7515 #KATAKANA LETTER HO + {0xABDC, 0x30DC}, //7516 #KATAKANA LETTER BO + {0xABDD, 0x30DD}, //7517 #KATAKANA LETTER PO + {0xABDE, 0x30DE}, //7518 #KATAKANA LETTER MA + {0xABDF, 0x30DF}, //7519 #KATAKANA LETTER MI + {0xABE0, 0x30E0}, //7520 #KATAKANA LETTER MU + {0xABE1, 0x30E1}, //7521 #KATAKANA LETTER ME + {0xABE2, 0x30E2}, //7522 #KATAKANA LETTER MO + {0xABE3, 0x30E3}, //7523 #KATAKANA LETTER SMALL YA + {0xABE4, 0x30E4}, //7524 #KATAKANA LETTER YA + {0xABE5, 0x30E5}, //7525 #KATAKANA LETTER SMALL YU + {0xABE6, 0x30E6}, //7526 #KATAKANA LETTER YU + {0xABE7, 0x30E7}, //7527 #KATAKANA LETTER SMALL YO + {0xABE8, 0x30E8}, //7528 #KATAKANA LETTER YO + {0xABE9, 0x30E9}, //7529 #KATAKANA LETTER RA + {0xABEA, 0x30EA}, //7530 #KATAKANA LETTER RI + {0xABEB, 0x30EB}, //7531 #KATAKANA LETTER RU + {0xABEC, 0x30EC}, //7532 #KATAKANA LETTER RE + {0xABED, 0x30ED}, //7533 #KATAKANA LETTER RO + {0xABEE, 0x30EE}, //7534 #KATAKANA LETTER SMALL WA + {0xABEF, 0x30EF}, //7535 #KATAKANA LETTER WA + {0xABF0, 0x30F0}, //7536 #KATAKANA LETTER WI + {0xABF1, 0x30F1}, //7537 #KATAKANA LETTER WE + {0xABF2, 0x30F2}, //7538 #KATAKANA LETTER WO + {0xABF3, 0x30F3}, //7539 #KATAKANA LETTER N + {0xABF4, 0x30F4}, //7540 #KATAKANA LETTER VU + {0xABF5, 0x30F5}, //7541 #KATAKANA LETTER SMALL KA + {0xABF6, 0x30F6}, //7542 #KATAKANA LETTER SMALL KE + {0xAC41, 0xCCFE}, //7543 #HANGUL SYLLABLE CHIEUCH YE PIEUPSIOS + {0xAC42, 0xCCFF}, //7544 #HANGUL SYLLABLE CHIEUCH YE SIOS + {0xAC43, 0xCD00}, //7545 #HANGUL SYLLABLE CHIEUCH YE SSANGSIOS + {0xAC44, 0xCD02}, //7546 #HANGUL SYLLABLE CHIEUCH YE CIEUC + {0xAC45, 0xCD03}, //7547 #HANGUL SYLLABLE CHIEUCH YE CHIEUCH + {0xAC46, 0xCD04}, //7548 #HANGUL SYLLABLE CHIEUCH YE KHIEUKH + {0xAC47, 0xCD05}, //7549 #HANGUL SYLLABLE CHIEUCH YE THIEUTH + {0xAC48, 0xCD06}, //7550 #HANGUL SYLLABLE CHIEUCH YE PHIEUPH + {0xAC49, 0xCD07}, //7551 #HANGUL SYLLABLE CHIEUCH YE HIEUH + {0xAC4A, 0xCD0A}, //7552 #HANGUL SYLLABLE CHIEUCH O SSANGKIYEOK + {0xAC4B, 0xCD0B}, //7553 #HANGUL SYLLABLE CHIEUCH O KIYEOKSIOS + {0xAC4C, 0xCD0D}, //7554 #HANGUL SYLLABLE CHIEUCH O NIEUNCIEUC + {0xAC4D, 0xCD0E}, //7555 #HANGUL SYLLABLE CHIEUCH O NIEUNHIEUH + {0xAC4E, 0xCD0F}, //7556 #HANGUL SYLLABLE CHIEUCH O TIKEUT + {0xAC4F, 0xCD11}, //7557 #HANGUL SYLLABLE CHIEUCH O RIEULKIYEOK + {0xAC50, 0xCD12}, //7558 #HANGUL SYLLABLE CHIEUCH O RIEULMIEUM + {0xAC51, 0xCD13}, //7559 #HANGUL SYLLABLE CHIEUCH O RIEULPIEUP + {0xAC52, 0xCD14}, //7560 #HANGUL SYLLABLE CHIEUCH O RIEULSIOS + {0xAC53, 0xCD15}, //7561 #HANGUL SYLLABLE CHIEUCH O RIEULTHIEUTH + {0xAC54, 0xCD16}, //7562 #HANGUL SYLLABLE CHIEUCH O RIEULPHIEUPH + {0xAC55, 0xCD17}, //7563 #HANGUL SYLLABLE CHIEUCH O RIEULHIEUH + {0xAC56, 0xCD1A}, //7564 #HANGUL SYLLABLE CHIEUCH O PIEUPSIOS + {0xAC57, 0xCD1C}, //7565 #HANGUL SYLLABLE CHIEUCH O SSANGSIOS + {0xAC58, 0xCD1E}, //7566 #HANGUL SYLLABLE CHIEUCH O CIEUC + {0xAC59, 0xCD1F}, //7567 #HANGUL SYLLABLE CHIEUCH O CHIEUCH + {0xAC5A, 0xCD20}, //7568 #HANGUL SYLLABLE CHIEUCH O KHIEUKH + {0xAC61, 0xCD21}, //7569 #HANGUL SYLLABLE CHIEUCH O THIEUTH + {0xAC62, 0xCD22}, //7570 #HANGUL SYLLABLE CHIEUCH O PHIEUPH + {0xAC63, 0xCD23}, //7571 #HANGUL SYLLABLE CHIEUCH O HIEUH + {0xAC64, 0xCD25}, //7572 #HANGUL SYLLABLE CHIEUCH WA KIYEOK + {0xAC65, 0xCD26}, //7573 #HANGUL SYLLABLE CHIEUCH WA SSANGKIYEOK + {0xAC66, 0xCD27}, //7574 #HANGUL SYLLABLE CHIEUCH WA KIYEOKSIOS + {0xAC67, 0xCD29}, //7575 #HANGUL SYLLABLE CHIEUCH WA NIEUNCIEUC + {0xAC68, 0xCD2A}, //7576 #HANGUL SYLLABLE CHIEUCH WA NIEUNHIEUH + {0xAC69, 0xCD2B}, //7577 #HANGUL SYLLABLE CHIEUCH WA TIKEUT + {0xAC6A, 0xCD2D}, //7578 #HANGUL SYLLABLE CHIEUCH WA RIEULKIYEOK + {0xAC6B, 0xCD2E}, //7579 #HANGUL SYLLABLE CHIEUCH WA RIEULMIEUM + {0xAC6C, 0xCD2F}, //7580 #HANGUL SYLLABLE CHIEUCH WA RIEULPIEUP + {0xAC6D, 0xCD30}, //7581 #HANGUL SYLLABLE CHIEUCH WA RIEULSIOS + {0xAC6E, 0xCD31}, //7582 #HANGUL SYLLABLE CHIEUCH WA RIEULTHIEUTH + {0xAC6F, 0xCD32}, //7583 #HANGUL SYLLABLE CHIEUCH WA RIEULPHIEUPH + {0xAC70, 0xCD33}, //7584 #HANGUL SYLLABLE CHIEUCH WA RIEULHIEUH + {0xAC71, 0xCD34}, //7585 #HANGUL SYLLABLE CHIEUCH WA MIEUM + {0xAC72, 0xCD35}, //7586 #HANGUL SYLLABLE CHIEUCH WA PIEUP + {0xAC73, 0xCD36}, //7587 #HANGUL SYLLABLE CHIEUCH WA PIEUPSIOS + {0xAC74, 0xCD37}, //7588 #HANGUL SYLLABLE CHIEUCH WA SIOS + {0xAC75, 0xCD38}, //7589 #HANGUL SYLLABLE CHIEUCH WA SSANGSIOS + {0xAC76, 0xCD3A}, //7590 #HANGUL SYLLABLE CHIEUCH WA CIEUC + {0xAC77, 0xCD3B}, //7591 #HANGUL SYLLABLE CHIEUCH WA CHIEUCH + {0xAC78, 0xCD3C}, //7592 #HANGUL SYLLABLE CHIEUCH WA KHIEUKH + {0xAC79, 0xCD3D}, //7593 #HANGUL SYLLABLE CHIEUCH WA THIEUTH + {0xAC7A, 0xCD3E}, //7594 #HANGUL SYLLABLE CHIEUCH WA PHIEUPH + {0xAC81, 0xCD3F}, //7595 #HANGUL SYLLABLE CHIEUCH WA HIEUH + {0xAC82, 0xCD40}, //7596 #HANGUL SYLLABLE CHIEUCH WAE + {0xAC83, 0xCD41}, //7597 #HANGUL SYLLABLE CHIEUCH WAE KIYEOK + {0xAC84, 0xCD42}, //7598 #HANGUL SYLLABLE CHIEUCH WAE SSANGKIYEOK + {0xAC85, 0xCD43}, //7599 #HANGUL SYLLABLE CHIEUCH WAE KIYEOKSIOS + {0xAC86, 0xCD44}, //7600 #HANGUL SYLLABLE CHIEUCH WAE NIEUN + {0xAC87, 0xCD45}, //7601 #HANGUL SYLLABLE CHIEUCH WAE NIEUNCIEUC + {0xAC88, 0xCD46}, //7602 #HANGUL SYLLABLE CHIEUCH WAE NIEUNHIEUH + {0xAC89, 0xCD47}, //7603 #HANGUL SYLLABLE CHIEUCH WAE TIKEUT + {0xAC8A, 0xCD48}, //7604 #HANGUL SYLLABLE CHIEUCH WAE RIEUL + {0xAC8B, 0xCD49}, //7605 #HANGUL SYLLABLE CHIEUCH WAE RIEULKIYEOK + {0xAC8C, 0xCD4A}, //7606 #HANGUL SYLLABLE CHIEUCH WAE RIEULMIEUM + {0xAC8D, 0xCD4B}, //7607 #HANGUL SYLLABLE CHIEUCH WAE RIEULPIEUP + {0xAC8E, 0xCD4C}, //7608 #HANGUL SYLLABLE CHIEUCH WAE RIEULSIOS + {0xAC8F, 0xCD4D}, //7609 #HANGUL SYLLABLE CHIEUCH WAE RIEULTHIEUTH + {0xAC90, 0xCD4E}, //7610 #HANGUL SYLLABLE CHIEUCH WAE RIEULPHIEUPH + {0xAC91, 0xCD4F}, //7611 #HANGUL SYLLABLE CHIEUCH WAE RIEULHIEUH + {0xAC92, 0xCD50}, //7612 #HANGUL SYLLABLE CHIEUCH WAE MIEUM + {0xAC93, 0xCD51}, //7613 #HANGUL SYLLABLE CHIEUCH WAE PIEUP + {0xAC94, 0xCD52}, //7614 #HANGUL SYLLABLE CHIEUCH WAE PIEUPSIOS + {0xAC95, 0xCD53}, //7615 #HANGUL SYLLABLE CHIEUCH WAE SIOS + {0xAC96, 0xCD54}, //7616 #HANGUL SYLLABLE CHIEUCH WAE SSANGSIOS + {0xAC97, 0xCD55}, //7617 #HANGUL SYLLABLE CHIEUCH WAE IEUNG + {0xAC98, 0xCD56}, //7618 #HANGUL SYLLABLE CHIEUCH WAE CIEUC + {0xAC99, 0xCD57}, //7619 #HANGUL SYLLABLE CHIEUCH WAE CHIEUCH + {0xAC9A, 0xCD58}, //7620 #HANGUL SYLLABLE CHIEUCH WAE KHIEUKH + {0xAC9B, 0xCD59}, //7621 #HANGUL SYLLABLE CHIEUCH WAE THIEUTH + {0xAC9C, 0xCD5A}, //7622 #HANGUL SYLLABLE CHIEUCH WAE PHIEUPH + {0xAC9D, 0xCD5B}, //7623 #HANGUL SYLLABLE CHIEUCH WAE HIEUH + {0xAC9E, 0xCD5D}, //7624 #HANGUL SYLLABLE CHIEUCH OE KIYEOK + {0xAC9F, 0xCD5E}, //7625 #HANGUL SYLLABLE CHIEUCH OE SSANGKIYEOK + {0xACA0, 0xCD5F}, //7626 #HANGUL SYLLABLE CHIEUCH OE KIYEOKSIOS + {0xACA1, 0x0410}, //7627 #CYRILLIC CAPITAL LETTER A + {0xACA2, 0x0411}, //7628 #CYRILLIC CAPITAL LETTER BE + {0xACA3, 0x0412}, //7629 #CYRILLIC CAPITAL LETTER VE + {0xACA4, 0x0413}, //7630 #CYRILLIC CAPITAL LETTER GHE + {0xACA5, 0x0414}, //7631 #CYRILLIC CAPITAL LETTER DE + {0xACA6, 0x0415}, //7632 #CYRILLIC CAPITAL LETTER IE + {0xACA7, 0x0401}, //7633 #CYRILLIC CAPITAL LETTER IO + {0xACA8, 0x0416}, //7634 #CYRILLIC CAPITAL LETTER ZHE + {0xACA9, 0x0417}, //7635 #CYRILLIC CAPITAL LETTER ZE + {0xACAA, 0x0418}, //7636 #CYRILLIC CAPITAL LETTER I + {0xACAB, 0x0419}, //7637 #CYRILLIC CAPITAL LETTER SHORT I + {0xACAC, 0x041A}, //7638 #CYRILLIC CAPITAL LETTER KA + {0xACAD, 0x041B}, //7639 #CYRILLIC CAPITAL LETTER EL + {0xACAE, 0x041C}, //7640 #CYRILLIC CAPITAL LETTER EM + {0xACAF, 0x041D}, //7641 #CYRILLIC CAPITAL LETTER EN + {0xACB0, 0x041E}, //7642 #CYRILLIC CAPITAL LETTER O + {0xACB1, 0x041F}, //7643 #CYRILLIC CAPITAL LETTER PE + {0xACB2, 0x0420}, //7644 #CYRILLIC CAPITAL LETTER ER + {0xACB3, 0x0421}, //7645 #CYRILLIC CAPITAL LETTER ES + {0xACB4, 0x0422}, //7646 #CYRILLIC CAPITAL LETTER TE + {0xACB5, 0x0423}, //7647 #CYRILLIC CAPITAL LETTER U + {0xACB6, 0x0424}, //7648 #CYRILLIC CAPITAL LETTER EF + {0xACB7, 0x0425}, //7649 #CYRILLIC CAPITAL LETTER HA + {0xACB8, 0x0426}, //7650 #CYRILLIC CAPITAL LETTER TSE + {0xACB9, 0x0427}, //7651 #CYRILLIC CAPITAL LETTER CHE + {0xACBA, 0x0428}, //7652 #CYRILLIC CAPITAL LETTER SHA + {0xACBB, 0x0429}, //7653 #CYRILLIC CAPITAL LETTER SHCHA + {0xACBC, 0x042A}, //7654 #CYRILLIC CAPITAL LETTER HARD SIGN + {0xACBD, 0x042B}, //7655 #CYRILLIC CAPITAL LETTER YERU + {0xACBE, 0x042C}, //7656 #CYRILLIC CAPITAL LETTER SOFT SIGN + {0xACBF, 0x042D}, //7657 #CYRILLIC CAPITAL LETTER E + {0xACC0, 0x042E}, //7658 #CYRILLIC CAPITAL LETTER YU + {0xACC1, 0x042F}, //7659 #CYRILLIC CAPITAL LETTER YA + {0xACD1, 0x0430}, //7660 #CYRILLIC SMALL LETTER A + {0xACD2, 0x0431}, //7661 #CYRILLIC SMALL LETTER BE + {0xACD3, 0x0432}, //7662 #CYRILLIC SMALL LETTER VE + {0xACD4, 0x0433}, //7663 #CYRILLIC SMALL LETTER GHE + {0xACD5, 0x0434}, //7664 #CYRILLIC SMALL LETTER DE + {0xACD6, 0x0435}, //7665 #CYRILLIC SMALL LETTER IE + {0xACD7, 0x0451}, //7666 #CYRILLIC SMALL LETTER IO + {0xACD8, 0x0436}, //7667 #CYRILLIC SMALL LETTER ZHE + {0xACD9, 0x0437}, //7668 #CYRILLIC SMALL LETTER ZE + {0xACDA, 0x0438}, //7669 #CYRILLIC SMALL LETTER I + {0xACDB, 0x0439}, //7670 #CYRILLIC SMALL LETTER SHORT I + {0xACDC, 0x043A}, //7671 #CYRILLIC SMALL LETTER KA + {0xACDD, 0x043B}, //7672 #CYRILLIC SMALL LETTER EL + {0xACDE, 0x043C}, //7673 #CYRILLIC SMALL LETTER EM + {0xACDF, 0x043D}, //7674 #CYRILLIC SMALL LETTER EN + {0xACE0, 0x043E}, //7675 #CYRILLIC SMALL LETTER O + {0xACE1, 0x043F}, //7676 #CYRILLIC SMALL LETTER PE + {0xACE2, 0x0440}, //7677 #CYRILLIC SMALL LETTER ER + {0xACE3, 0x0441}, //7678 #CYRILLIC SMALL LETTER ES + {0xACE4, 0x0442}, //7679 #CYRILLIC SMALL LETTER TE + {0xACE5, 0x0443}, //7680 #CYRILLIC SMALL LETTER U + {0xACE6, 0x0444}, //7681 #CYRILLIC SMALL LETTER EF + {0xACE7, 0x0445}, //7682 #CYRILLIC SMALL LETTER HA + {0xACE8, 0x0446}, //7683 #CYRILLIC SMALL LETTER TSE + {0xACE9, 0x0447}, //7684 #CYRILLIC SMALL LETTER CHE + {0xACEA, 0x0448}, //7685 #CYRILLIC SMALL LETTER SHA + {0xACEB, 0x0449}, //7686 #CYRILLIC SMALL LETTER SHCHA + {0xACEC, 0x044A}, //7687 #CYRILLIC SMALL LETTER HARD SIGN + {0xACED, 0x044B}, //7688 #CYRILLIC SMALL LETTER YERU + {0xACEE, 0x044C}, //7689 #CYRILLIC SMALL LETTER SOFT SIGN + {0xACEF, 0x044D}, //7690 #CYRILLIC SMALL LETTER E + {0xACF0, 0x044E}, //7691 #CYRILLIC SMALL LETTER YU + {0xACF1, 0x044F}, //7692 #CYRILLIC SMALL LETTER YA + {0xAD41, 0xCD61}, //7693 #HANGUL SYLLABLE CHIEUCH OE NIEUNCIEUC + {0xAD42, 0xCD62}, //7694 #HANGUL SYLLABLE CHIEUCH OE NIEUNHIEUH + {0xAD43, 0xCD63}, //7695 #HANGUL SYLLABLE CHIEUCH OE TIKEUT + {0xAD44, 0xCD65}, //7696 #HANGUL SYLLABLE CHIEUCH OE RIEULKIYEOK + {0xAD45, 0xCD66}, //7697 #HANGUL SYLLABLE CHIEUCH OE RIEULMIEUM + {0xAD46, 0xCD67}, //7698 #HANGUL SYLLABLE CHIEUCH OE RIEULPIEUP + {0xAD47, 0xCD68}, //7699 #HANGUL SYLLABLE CHIEUCH OE RIEULSIOS + {0xAD48, 0xCD69}, //7700 #HANGUL SYLLABLE CHIEUCH OE RIEULTHIEUTH + {0xAD49, 0xCD6A}, //7701 #HANGUL SYLLABLE CHIEUCH OE RIEULPHIEUPH + {0xAD4A, 0xCD6B}, //7702 #HANGUL SYLLABLE CHIEUCH OE RIEULHIEUH + {0xAD4B, 0xCD6E}, //7703 #HANGUL SYLLABLE CHIEUCH OE PIEUPSIOS + {0xAD4C, 0xCD70}, //7704 #HANGUL SYLLABLE CHIEUCH OE SSANGSIOS + {0xAD4D, 0xCD72}, //7705 #HANGUL SYLLABLE CHIEUCH OE CIEUC + {0xAD4E, 0xCD73}, //7706 #HANGUL SYLLABLE CHIEUCH OE CHIEUCH + {0xAD4F, 0xCD74}, //7707 #HANGUL SYLLABLE CHIEUCH OE KHIEUKH + {0xAD50, 0xCD75}, //7708 #HANGUL SYLLABLE CHIEUCH OE THIEUTH + {0xAD51, 0xCD76}, //7709 #HANGUL SYLLABLE CHIEUCH OE PHIEUPH + {0xAD52, 0xCD77}, //7710 #HANGUL SYLLABLE CHIEUCH OE HIEUH + {0xAD53, 0xCD79}, //7711 #HANGUL SYLLABLE CHIEUCH YO KIYEOK + {0xAD54, 0xCD7A}, //7712 #HANGUL SYLLABLE CHIEUCH YO SSANGKIYEOK + {0xAD55, 0xCD7B}, //7713 #HANGUL SYLLABLE CHIEUCH YO KIYEOKSIOS + {0xAD56, 0xCD7C}, //7714 #HANGUL SYLLABLE CHIEUCH YO NIEUN + {0xAD57, 0xCD7D}, //7715 #HANGUL SYLLABLE CHIEUCH YO NIEUNCIEUC + {0xAD58, 0xCD7E}, //7716 #HANGUL SYLLABLE CHIEUCH YO NIEUNHIEUH + {0xAD59, 0xCD7F}, //7717 #HANGUL SYLLABLE CHIEUCH YO TIKEUT + {0xAD5A, 0xCD80}, //7718 #HANGUL SYLLABLE CHIEUCH YO RIEUL + {0xAD61, 0xCD81}, //7719 #HANGUL SYLLABLE CHIEUCH YO RIEULKIYEOK + {0xAD62, 0xCD82}, //7720 #HANGUL SYLLABLE CHIEUCH YO RIEULMIEUM + {0xAD63, 0xCD83}, //7721 #HANGUL SYLLABLE CHIEUCH YO RIEULPIEUP + {0xAD64, 0xCD84}, //7722 #HANGUL SYLLABLE CHIEUCH YO RIEULSIOS + {0xAD65, 0xCD85}, //7723 #HANGUL SYLLABLE CHIEUCH YO RIEULTHIEUTH + {0xAD66, 0xCD86}, //7724 #HANGUL SYLLABLE CHIEUCH YO RIEULPHIEUPH + {0xAD67, 0xCD87}, //7725 #HANGUL SYLLABLE CHIEUCH YO RIEULHIEUH + {0xAD68, 0xCD89}, //7726 #HANGUL SYLLABLE CHIEUCH YO PIEUP + {0xAD69, 0xCD8A}, //7727 #HANGUL SYLLABLE CHIEUCH YO PIEUPSIOS + {0xAD6A, 0xCD8B}, //7728 #HANGUL SYLLABLE CHIEUCH YO SIOS + {0xAD6B, 0xCD8C}, //7729 #HANGUL SYLLABLE CHIEUCH YO SSANGSIOS + {0xAD6C, 0xCD8D}, //7730 #HANGUL SYLLABLE CHIEUCH YO IEUNG + {0xAD6D, 0xCD8E}, //7731 #HANGUL SYLLABLE CHIEUCH YO CIEUC + {0xAD6E, 0xCD8F}, //7732 #HANGUL SYLLABLE CHIEUCH YO CHIEUCH + {0xAD6F, 0xCD90}, //7733 #HANGUL SYLLABLE CHIEUCH YO KHIEUKH + {0xAD70, 0xCD91}, //7734 #HANGUL SYLLABLE CHIEUCH YO THIEUTH + {0xAD71, 0xCD92}, //7735 #HANGUL SYLLABLE CHIEUCH YO PHIEUPH + {0xAD72, 0xCD93}, //7736 #HANGUL SYLLABLE CHIEUCH YO HIEUH + {0xAD73, 0xCD96}, //7737 #HANGUL SYLLABLE CHIEUCH U SSANGKIYEOK + {0xAD74, 0xCD97}, //7738 #HANGUL SYLLABLE CHIEUCH U KIYEOKSIOS + {0xAD75, 0xCD99}, //7739 #HANGUL SYLLABLE CHIEUCH U NIEUNCIEUC + {0xAD76, 0xCD9A}, //7740 #HANGUL SYLLABLE CHIEUCH U NIEUNHIEUH + {0xAD77, 0xCD9B}, //7741 #HANGUL SYLLABLE CHIEUCH U TIKEUT + {0xAD78, 0xCD9D}, //7742 #HANGUL SYLLABLE CHIEUCH U RIEULKIYEOK + {0xAD79, 0xCD9E}, //7743 #HANGUL SYLLABLE CHIEUCH U RIEULMIEUM + {0xAD7A, 0xCD9F}, //7744 #HANGUL SYLLABLE CHIEUCH U RIEULPIEUP + {0xAD81, 0xCDA0}, //7745 #HANGUL SYLLABLE CHIEUCH U RIEULSIOS + {0xAD82, 0xCDA1}, //7746 #HANGUL SYLLABLE CHIEUCH U RIEULTHIEUTH + {0xAD83, 0xCDA2}, //7747 #HANGUL SYLLABLE CHIEUCH U RIEULPHIEUPH + {0xAD84, 0xCDA3}, //7748 #HANGUL SYLLABLE CHIEUCH U RIEULHIEUH + {0xAD85, 0xCDA6}, //7749 #HANGUL SYLLABLE CHIEUCH U PIEUPSIOS + {0xAD86, 0xCDA8}, //7750 #HANGUL SYLLABLE CHIEUCH U SSANGSIOS + {0xAD87, 0xCDAA}, //7751 #HANGUL SYLLABLE CHIEUCH U CIEUC + {0xAD88, 0xCDAB}, //7752 #HANGUL SYLLABLE CHIEUCH U CHIEUCH + {0xAD89, 0xCDAC}, //7753 #HANGUL SYLLABLE CHIEUCH U KHIEUKH + {0xAD8A, 0xCDAD}, //7754 #HANGUL SYLLABLE CHIEUCH U THIEUTH + {0xAD8B, 0xCDAE}, //7755 #HANGUL SYLLABLE CHIEUCH U PHIEUPH + {0xAD8C, 0xCDAF}, //7756 #HANGUL SYLLABLE CHIEUCH U HIEUH + {0xAD8D, 0xCDB1}, //7757 #HANGUL SYLLABLE CHIEUCH WEO KIYEOK + {0xAD8E, 0xCDB2}, //7758 #HANGUL SYLLABLE CHIEUCH WEO SSANGKIYEOK + {0xAD8F, 0xCDB3}, //7759 #HANGUL SYLLABLE CHIEUCH WEO KIYEOKSIOS + {0xAD90, 0xCDB4}, //7760 #HANGUL SYLLABLE CHIEUCH WEO NIEUN + {0xAD91, 0xCDB5}, //7761 #HANGUL SYLLABLE CHIEUCH WEO NIEUNCIEUC + {0xAD92, 0xCDB6}, //7762 #HANGUL SYLLABLE CHIEUCH WEO NIEUNHIEUH + {0xAD93, 0xCDB7}, //7763 #HANGUL SYLLABLE CHIEUCH WEO TIKEUT + {0xAD94, 0xCDB8}, //7764 #HANGUL SYLLABLE CHIEUCH WEO RIEUL + {0xAD95, 0xCDB9}, //7765 #HANGUL SYLLABLE CHIEUCH WEO RIEULKIYEOK + {0xAD96, 0xCDBA}, //7766 #HANGUL SYLLABLE CHIEUCH WEO RIEULMIEUM + {0xAD97, 0xCDBB}, //7767 #HANGUL SYLLABLE CHIEUCH WEO RIEULPIEUP + {0xAD98, 0xCDBC}, //7768 #HANGUL SYLLABLE CHIEUCH WEO RIEULSIOS + {0xAD99, 0xCDBD}, //7769 #HANGUL SYLLABLE CHIEUCH WEO RIEULTHIEUTH + {0xAD9A, 0xCDBE}, //7770 #HANGUL SYLLABLE CHIEUCH WEO RIEULPHIEUPH + {0xAD9B, 0xCDBF}, //7771 #HANGUL SYLLABLE CHIEUCH WEO RIEULHIEUH + {0xAD9C, 0xCDC0}, //7772 #HANGUL SYLLABLE CHIEUCH WEO MIEUM + {0xAD9D, 0xCDC1}, //7773 #HANGUL SYLLABLE CHIEUCH WEO PIEUP + {0xAD9E, 0xCDC2}, //7774 #HANGUL SYLLABLE CHIEUCH WEO PIEUPSIOS + {0xAD9F, 0xCDC3}, //7775 #HANGUL SYLLABLE CHIEUCH WEO SIOS + {0xADA0, 0xCDC5}, //7776 #HANGUL SYLLABLE CHIEUCH WEO IEUNG + {0xAE41, 0xCDC6}, //7777 #HANGUL SYLLABLE CHIEUCH WEO CIEUC + {0xAE42, 0xCDC7}, //7778 #HANGUL SYLLABLE CHIEUCH WEO CHIEUCH + {0xAE43, 0xCDC8}, //7779 #HANGUL SYLLABLE CHIEUCH WEO KHIEUKH + {0xAE44, 0xCDC9}, //7780 #HANGUL SYLLABLE CHIEUCH WEO THIEUTH + {0xAE45, 0xCDCA}, //7781 #HANGUL SYLLABLE CHIEUCH WEO PHIEUPH + {0xAE46, 0xCDCB}, //7782 #HANGUL SYLLABLE CHIEUCH WEO HIEUH + {0xAE47, 0xCDCD}, //7783 #HANGUL SYLLABLE CHIEUCH WE KIYEOK + {0xAE48, 0xCDCE}, //7784 #HANGUL SYLLABLE CHIEUCH WE SSANGKIYEOK + {0xAE49, 0xCDCF}, //7785 #HANGUL SYLLABLE CHIEUCH WE KIYEOKSIOS + {0xAE4A, 0xCDD1}, //7786 #HANGUL SYLLABLE CHIEUCH WE NIEUNCIEUC + {0xAE4B, 0xCDD2}, //7787 #HANGUL SYLLABLE CHIEUCH WE NIEUNHIEUH + {0xAE4C, 0xCDD3}, //7788 #HANGUL SYLLABLE CHIEUCH WE TIKEUT + {0xAE4D, 0xCDD4}, //7789 #HANGUL SYLLABLE CHIEUCH WE RIEUL + {0xAE4E, 0xCDD5}, //7790 #HANGUL SYLLABLE CHIEUCH WE RIEULKIYEOK + {0xAE4F, 0xCDD6}, //7791 #HANGUL SYLLABLE CHIEUCH WE RIEULMIEUM + {0xAE50, 0xCDD7}, //7792 #HANGUL SYLLABLE CHIEUCH WE RIEULPIEUP + {0xAE51, 0xCDD8}, //7793 #HANGUL SYLLABLE CHIEUCH WE RIEULSIOS + {0xAE52, 0xCDD9}, //7794 #HANGUL SYLLABLE CHIEUCH WE RIEULTHIEUTH + {0xAE53, 0xCDDA}, //7795 #HANGUL SYLLABLE CHIEUCH WE RIEULPHIEUPH + {0xAE54, 0xCDDB}, //7796 #HANGUL SYLLABLE CHIEUCH WE RIEULHIEUH + {0xAE55, 0xCDDC}, //7797 #HANGUL SYLLABLE CHIEUCH WE MIEUM + {0xAE56, 0xCDDD}, //7798 #HANGUL SYLLABLE CHIEUCH WE PIEUP + {0xAE57, 0xCDDE}, //7799 #HANGUL SYLLABLE CHIEUCH WE PIEUPSIOS + {0xAE58, 0xCDDF}, //7800 #HANGUL SYLLABLE CHIEUCH WE SIOS + {0xAE59, 0xCDE0}, //7801 #HANGUL SYLLABLE CHIEUCH WE SSANGSIOS + {0xAE5A, 0xCDE1}, //7802 #HANGUL SYLLABLE CHIEUCH WE IEUNG + {0xAE61, 0xCDE2}, //7803 #HANGUL SYLLABLE CHIEUCH WE CIEUC + {0xAE62, 0xCDE3}, //7804 #HANGUL SYLLABLE CHIEUCH WE CHIEUCH + {0xAE63, 0xCDE4}, //7805 #HANGUL SYLLABLE CHIEUCH WE KHIEUKH + {0xAE64, 0xCDE5}, //7806 #HANGUL SYLLABLE CHIEUCH WE THIEUTH + {0xAE65, 0xCDE6}, //7807 #HANGUL SYLLABLE CHIEUCH WE PHIEUPH + {0xAE66, 0xCDE7}, //7808 #HANGUL SYLLABLE CHIEUCH WE HIEUH + {0xAE67, 0xCDE9}, //7809 #HANGUL SYLLABLE CHIEUCH WI KIYEOK + {0xAE68, 0xCDEA}, //7810 #HANGUL SYLLABLE CHIEUCH WI SSANGKIYEOK + {0xAE69, 0xCDEB}, //7811 #HANGUL SYLLABLE CHIEUCH WI KIYEOKSIOS + {0xAE6A, 0xCDED}, //7812 #HANGUL SYLLABLE CHIEUCH WI NIEUNCIEUC + {0xAE6B, 0xCDEE}, //7813 #HANGUL SYLLABLE CHIEUCH WI NIEUNHIEUH + {0xAE6C, 0xCDEF}, //7814 #HANGUL SYLLABLE CHIEUCH WI TIKEUT + {0xAE6D, 0xCDF1}, //7815 #HANGUL SYLLABLE CHIEUCH WI RIEULKIYEOK + {0xAE6E, 0xCDF2}, //7816 #HANGUL SYLLABLE CHIEUCH WI RIEULMIEUM + {0xAE6F, 0xCDF3}, //7817 #HANGUL SYLLABLE CHIEUCH WI RIEULPIEUP + {0xAE70, 0xCDF4}, //7818 #HANGUL SYLLABLE CHIEUCH WI RIEULSIOS + {0xAE71, 0xCDF5}, //7819 #HANGUL SYLLABLE CHIEUCH WI RIEULTHIEUTH + {0xAE72, 0xCDF6}, //7820 #HANGUL SYLLABLE CHIEUCH WI RIEULPHIEUPH + {0xAE73, 0xCDF7}, //7821 #HANGUL SYLLABLE CHIEUCH WI RIEULHIEUH + {0xAE74, 0xCDFA}, //7822 #HANGUL SYLLABLE CHIEUCH WI PIEUPSIOS + {0xAE75, 0xCDFC}, //7823 #HANGUL SYLLABLE CHIEUCH WI SSANGSIOS + {0xAE76, 0xCDFE}, //7824 #HANGUL SYLLABLE CHIEUCH WI CIEUC + {0xAE77, 0xCDFF}, //7825 #HANGUL SYLLABLE CHIEUCH WI CHIEUCH + {0xAE78, 0xCE00}, //7826 #HANGUL SYLLABLE CHIEUCH WI KHIEUKH + {0xAE79, 0xCE01}, //7827 #HANGUL SYLLABLE CHIEUCH WI THIEUTH + {0xAE7A, 0xCE02}, //7828 #HANGUL SYLLABLE CHIEUCH WI PHIEUPH + {0xAE81, 0xCE03}, //7829 #HANGUL SYLLABLE CHIEUCH WI HIEUH + {0xAE82, 0xCE05}, //7830 #HANGUL SYLLABLE CHIEUCH YU KIYEOK + {0xAE83, 0xCE06}, //7831 #HANGUL SYLLABLE CHIEUCH YU SSANGKIYEOK + {0xAE84, 0xCE07}, //7832 #HANGUL SYLLABLE CHIEUCH YU KIYEOKSIOS + {0xAE85, 0xCE09}, //7833 #HANGUL SYLLABLE CHIEUCH YU NIEUNCIEUC + {0xAE86, 0xCE0A}, //7834 #HANGUL SYLLABLE CHIEUCH YU NIEUNHIEUH + {0xAE87, 0xCE0B}, //7835 #HANGUL SYLLABLE CHIEUCH YU TIKEUT + {0xAE88, 0xCE0D}, //7836 #HANGUL SYLLABLE CHIEUCH YU RIEULKIYEOK + {0xAE89, 0xCE0E}, //7837 #HANGUL SYLLABLE CHIEUCH YU RIEULMIEUM + {0xAE8A, 0xCE0F}, //7838 #HANGUL SYLLABLE CHIEUCH YU RIEULPIEUP + {0xAE8B, 0xCE10}, //7839 #HANGUL SYLLABLE CHIEUCH YU RIEULSIOS + {0xAE8C, 0xCE11}, //7840 #HANGUL SYLLABLE CHIEUCH YU RIEULTHIEUTH + {0xAE8D, 0xCE12}, //7841 #HANGUL SYLLABLE CHIEUCH YU RIEULPHIEUPH + {0xAE8E, 0xCE13}, //7842 #HANGUL SYLLABLE CHIEUCH YU RIEULHIEUH + {0xAE8F, 0xCE15}, //7843 #HANGUL SYLLABLE CHIEUCH YU PIEUP + {0xAE90, 0xCE16}, //7844 #HANGUL SYLLABLE CHIEUCH YU PIEUPSIOS + {0xAE91, 0xCE17}, //7845 #HANGUL SYLLABLE CHIEUCH YU SIOS + {0xAE92, 0xCE18}, //7846 #HANGUL SYLLABLE CHIEUCH YU SSANGSIOS + {0xAE93, 0xCE1A}, //7847 #HANGUL SYLLABLE CHIEUCH YU CIEUC + {0xAE94, 0xCE1B}, //7848 #HANGUL SYLLABLE CHIEUCH YU CHIEUCH + {0xAE95, 0xCE1C}, //7849 #HANGUL SYLLABLE CHIEUCH YU KHIEUKH + {0xAE96, 0xCE1D}, //7850 #HANGUL SYLLABLE CHIEUCH YU THIEUTH + {0xAE97, 0xCE1E}, //7851 #HANGUL SYLLABLE CHIEUCH YU PHIEUPH + {0xAE98, 0xCE1F}, //7852 #HANGUL SYLLABLE CHIEUCH YU HIEUH + {0xAE99, 0xCE22}, //7853 #HANGUL SYLLABLE CHIEUCH EU SSANGKIYEOK + {0xAE9A, 0xCE23}, //7854 #HANGUL SYLLABLE CHIEUCH EU KIYEOKSIOS + {0xAE9B, 0xCE25}, //7855 #HANGUL SYLLABLE CHIEUCH EU NIEUNCIEUC + {0xAE9C, 0xCE26}, //7856 #HANGUL SYLLABLE CHIEUCH EU NIEUNHIEUH + {0xAE9D, 0xCE27}, //7857 #HANGUL SYLLABLE CHIEUCH EU TIKEUT + {0xAE9E, 0xCE29}, //7858 #HANGUL SYLLABLE CHIEUCH EU RIEULKIYEOK + {0xAE9F, 0xCE2A}, //7859 #HANGUL SYLLABLE CHIEUCH EU RIEULMIEUM + {0xAEA0, 0xCE2B}, //7860 #HANGUL SYLLABLE CHIEUCH EU RIEULPIEUP + {0xAF41, 0xCE2C}, //7861 #HANGUL SYLLABLE CHIEUCH EU RIEULSIOS + {0xAF42, 0xCE2D}, //7862 #HANGUL SYLLABLE CHIEUCH EU RIEULTHIEUTH + {0xAF43, 0xCE2E}, //7863 #HANGUL SYLLABLE CHIEUCH EU RIEULPHIEUPH + {0xAF44, 0xCE2F}, //7864 #HANGUL SYLLABLE CHIEUCH EU RIEULHIEUH + {0xAF45, 0xCE32}, //7865 #HANGUL SYLLABLE CHIEUCH EU PIEUPSIOS + {0xAF46, 0xCE34}, //7866 #HANGUL SYLLABLE CHIEUCH EU SSANGSIOS + {0xAF47, 0xCE36}, //7867 #HANGUL SYLLABLE CHIEUCH EU CIEUC + {0xAF48, 0xCE37}, //7868 #HANGUL SYLLABLE CHIEUCH EU CHIEUCH + {0xAF49, 0xCE38}, //7869 #HANGUL SYLLABLE CHIEUCH EU KHIEUKH + {0xAF4A, 0xCE39}, //7870 #HANGUL SYLLABLE CHIEUCH EU THIEUTH + {0xAF4B, 0xCE3A}, //7871 #HANGUL SYLLABLE CHIEUCH EU PHIEUPH + {0xAF4C, 0xCE3B}, //7872 #HANGUL SYLLABLE CHIEUCH EU HIEUH + {0xAF4D, 0xCE3C}, //7873 #HANGUL SYLLABLE CHIEUCH YI + {0xAF4E, 0xCE3D}, //7874 #HANGUL SYLLABLE CHIEUCH YI KIYEOK + {0xAF4F, 0xCE3E}, //7875 #HANGUL SYLLABLE CHIEUCH YI SSANGKIYEOK + {0xAF50, 0xCE3F}, //7876 #HANGUL SYLLABLE CHIEUCH YI KIYEOKSIOS + {0xAF51, 0xCE40}, //7877 #HANGUL SYLLABLE CHIEUCH YI NIEUN + {0xAF52, 0xCE41}, //7878 #HANGUL SYLLABLE CHIEUCH YI NIEUNCIEUC + {0xAF53, 0xCE42}, //7879 #HANGUL SYLLABLE CHIEUCH YI NIEUNHIEUH + {0xAF54, 0xCE43}, //7880 #HANGUL SYLLABLE CHIEUCH YI TIKEUT + {0xAF55, 0xCE44}, //7881 #HANGUL SYLLABLE CHIEUCH YI RIEUL + {0xAF56, 0xCE45}, //7882 #HANGUL SYLLABLE CHIEUCH YI RIEULKIYEOK + {0xAF57, 0xCE46}, //7883 #HANGUL SYLLABLE CHIEUCH YI RIEULMIEUM + {0xAF58, 0xCE47}, //7884 #HANGUL SYLLABLE CHIEUCH YI RIEULPIEUP + {0xAF59, 0xCE48}, //7885 #HANGUL SYLLABLE CHIEUCH YI RIEULSIOS + {0xAF5A, 0xCE49}, //7886 #HANGUL SYLLABLE CHIEUCH YI RIEULTHIEUTH + {0xAF61, 0xCE4A}, //7887 #HANGUL SYLLABLE CHIEUCH YI RIEULPHIEUPH + {0xAF62, 0xCE4B}, //7888 #HANGUL SYLLABLE CHIEUCH YI RIEULHIEUH + {0xAF63, 0xCE4C}, //7889 #HANGUL SYLLABLE CHIEUCH YI MIEUM + {0xAF64, 0xCE4D}, //7890 #HANGUL SYLLABLE CHIEUCH YI PIEUP + {0xAF65, 0xCE4E}, //7891 #HANGUL SYLLABLE CHIEUCH YI PIEUPSIOS + {0xAF66, 0xCE4F}, //7892 #HANGUL SYLLABLE CHIEUCH YI SIOS + {0xAF67, 0xCE50}, //7893 #HANGUL SYLLABLE CHIEUCH YI SSANGSIOS + {0xAF68, 0xCE51}, //7894 #HANGUL SYLLABLE CHIEUCH YI IEUNG + {0xAF69, 0xCE52}, //7895 #HANGUL SYLLABLE CHIEUCH YI CIEUC + {0xAF6A, 0xCE53}, //7896 #HANGUL SYLLABLE CHIEUCH YI CHIEUCH + {0xAF6B, 0xCE54}, //7897 #HANGUL SYLLABLE CHIEUCH YI KHIEUKH + {0xAF6C, 0xCE55}, //7898 #HANGUL SYLLABLE CHIEUCH YI THIEUTH + {0xAF6D, 0xCE56}, //7899 #HANGUL SYLLABLE CHIEUCH YI PHIEUPH + {0xAF6E, 0xCE57}, //7900 #HANGUL SYLLABLE CHIEUCH YI HIEUH + {0xAF6F, 0xCE5A}, //7901 #HANGUL SYLLABLE CHIEUCH I SSANGKIYEOK + {0xAF70, 0xCE5B}, //7902 #HANGUL SYLLABLE CHIEUCH I KIYEOKSIOS + {0xAF71, 0xCE5D}, //7903 #HANGUL SYLLABLE CHIEUCH I NIEUNCIEUC + {0xAF72, 0xCE5E}, //7904 #HANGUL SYLLABLE CHIEUCH I NIEUNHIEUH + {0xAF73, 0xCE62}, //7905 #HANGUL SYLLABLE CHIEUCH I RIEULMIEUM + {0xAF74, 0xCE63}, //7906 #HANGUL SYLLABLE CHIEUCH I RIEULPIEUP + {0xAF75, 0xCE64}, //7907 #HANGUL SYLLABLE CHIEUCH I RIEULSIOS + {0xAF76, 0xCE65}, //7908 #HANGUL SYLLABLE CHIEUCH I RIEULTHIEUTH + {0xAF77, 0xCE66}, //7909 #HANGUL SYLLABLE CHIEUCH I RIEULPHIEUPH + {0xAF78, 0xCE67}, //7910 #HANGUL SYLLABLE CHIEUCH I RIEULHIEUH + {0xAF79, 0xCE6A}, //7911 #HANGUL SYLLABLE CHIEUCH I PIEUPSIOS + {0xAF7A, 0xCE6C}, //7912 #HANGUL SYLLABLE CHIEUCH I SSANGSIOS + {0xAF81, 0xCE6E}, //7913 #HANGUL SYLLABLE CHIEUCH I CIEUC + {0xAF82, 0xCE6F}, //7914 #HANGUL SYLLABLE CHIEUCH I CHIEUCH + {0xAF83, 0xCE70}, //7915 #HANGUL SYLLABLE CHIEUCH I KHIEUKH + {0xAF84, 0xCE71}, //7916 #HANGUL SYLLABLE CHIEUCH I THIEUTH + {0xAF85, 0xCE72}, //7917 #HANGUL SYLLABLE CHIEUCH I PHIEUPH + {0xAF86, 0xCE73}, //7918 #HANGUL SYLLABLE CHIEUCH I HIEUH + {0xAF87, 0xCE76}, //7919 #HANGUL SYLLABLE KHIEUKH A SSANGKIYEOK + {0xAF88, 0xCE77}, //7920 #HANGUL SYLLABLE KHIEUKH A KIYEOKSIOS + {0xAF89, 0xCE79}, //7921 #HANGUL SYLLABLE KHIEUKH A NIEUNCIEUC + {0xAF8A, 0xCE7A}, //7922 #HANGUL SYLLABLE KHIEUKH A NIEUNHIEUH + {0xAF8B, 0xCE7B}, //7923 #HANGUL SYLLABLE KHIEUKH A TIKEUT + {0xAF8C, 0xCE7D}, //7924 #HANGUL SYLLABLE KHIEUKH A RIEULKIYEOK + {0xAF8D, 0xCE7E}, //7925 #HANGUL SYLLABLE KHIEUKH A RIEULMIEUM + {0xAF8E, 0xCE7F}, //7926 #HANGUL SYLLABLE KHIEUKH A RIEULPIEUP + {0xAF8F, 0xCE80}, //7927 #HANGUL SYLLABLE KHIEUKH A RIEULSIOS + {0xAF90, 0xCE81}, //7928 #HANGUL SYLLABLE KHIEUKH A RIEULTHIEUTH + {0xAF91, 0xCE82}, //7929 #HANGUL SYLLABLE KHIEUKH A RIEULPHIEUPH + {0xAF92, 0xCE83}, //7930 #HANGUL SYLLABLE KHIEUKH A RIEULHIEUH + {0xAF93, 0xCE86}, //7931 #HANGUL SYLLABLE KHIEUKH A PIEUPSIOS + {0xAF94, 0xCE88}, //7932 #HANGUL SYLLABLE KHIEUKH A SSANGSIOS + {0xAF95, 0xCE8A}, //7933 #HANGUL SYLLABLE KHIEUKH A CIEUC + {0xAF96, 0xCE8B}, //7934 #HANGUL SYLLABLE KHIEUKH A CHIEUCH + {0xAF97, 0xCE8C}, //7935 #HANGUL SYLLABLE KHIEUKH A KHIEUKH + {0xAF98, 0xCE8D}, //7936 #HANGUL SYLLABLE KHIEUKH A THIEUTH + {0xAF99, 0xCE8E}, //7937 #HANGUL SYLLABLE KHIEUKH A PHIEUPH + {0xAF9A, 0xCE8F}, //7938 #HANGUL SYLLABLE KHIEUKH A HIEUH + {0xAF9B, 0xCE92}, //7939 #HANGUL SYLLABLE KHIEUKH AE SSANGKIYEOK + {0xAF9C, 0xCE93}, //7940 #HANGUL SYLLABLE KHIEUKH AE KIYEOKSIOS + {0xAF9D, 0xCE95}, //7941 #HANGUL SYLLABLE KHIEUKH AE NIEUNCIEUC + {0xAF9E, 0xCE96}, //7942 #HANGUL SYLLABLE KHIEUKH AE NIEUNHIEUH + {0xAF9F, 0xCE97}, //7943 #HANGUL SYLLABLE KHIEUKH AE TIKEUT + {0xAFA0, 0xCE99}, //7944 #HANGUL SYLLABLE KHIEUKH AE RIEULKIYEOK + {0xB041, 0xCE9A}, //7945 #HANGUL SYLLABLE KHIEUKH AE RIEULMIEUM + {0xB042, 0xCE9B}, //7946 #HANGUL SYLLABLE KHIEUKH AE RIEULPIEUP + {0xB043, 0xCE9C}, //7947 #HANGUL SYLLABLE KHIEUKH AE RIEULSIOS + {0xB044, 0xCE9D}, //7948 #HANGUL SYLLABLE KHIEUKH AE RIEULTHIEUTH + {0xB045, 0xCE9E}, //7949 #HANGUL SYLLABLE KHIEUKH AE RIEULPHIEUPH + {0xB046, 0xCE9F}, //7950 #HANGUL SYLLABLE KHIEUKH AE RIEULHIEUH + {0xB047, 0xCEA2}, //7951 #HANGUL SYLLABLE KHIEUKH AE PIEUPSIOS + {0xB048, 0xCEA6}, //7952 #HANGUL SYLLABLE KHIEUKH AE CIEUC + {0xB049, 0xCEA7}, //7953 #HANGUL SYLLABLE KHIEUKH AE CHIEUCH + {0xB04A, 0xCEA8}, //7954 #HANGUL SYLLABLE KHIEUKH AE KHIEUKH + {0xB04B, 0xCEA9}, //7955 #HANGUL SYLLABLE KHIEUKH AE THIEUTH + {0xB04C, 0xCEAA}, //7956 #HANGUL SYLLABLE KHIEUKH AE PHIEUPH + {0xB04D, 0xCEAB}, //7957 #HANGUL SYLLABLE KHIEUKH AE HIEUH + {0xB04E, 0xCEAE}, //7958 #HANGUL SYLLABLE KHIEUKH YA SSANGKIYEOK + {0xB04F, 0xCEAF}, //7959 #HANGUL SYLLABLE KHIEUKH YA KIYEOKSIOS + {0xB050, 0xCEB0}, //7960 #HANGUL SYLLABLE KHIEUKH YA NIEUN + {0xB051, 0xCEB1}, //7961 #HANGUL SYLLABLE KHIEUKH YA NIEUNCIEUC + {0xB052, 0xCEB2}, //7962 #HANGUL SYLLABLE KHIEUKH YA NIEUNHIEUH + {0xB053, 0xCEB3}, //7963 #HANGUL SYLLABLE KHIEUKH YA TIKEUT + {0xB054, 0xCEB4}, //7964 #HANGUL SYLLABLE KHIEUKH YA RIEUL + {0xB055, 0xCEB5}, //7965 #HANGUL SYLLABLE KHIEUKH YA RIEULKIYEOK + {0xB056, 0xCEB6}, //7966 #HANGUL SYLLABLE KHIEUKH YA RIEULMIEUM + {0xB057, 0xCEB7}, //7967 #HANGUL SYLLABLE KHIEUKH YA RIEULPIEUP + {0xB058, 0xCEB8}, //7968 #HANGUL SYLLABLE KHIEUKH YA RIEULSIOS + {0xB059, 0xCEB9}, //7969 #HANGUL SYLLABLE KHIEUKH YA RIEULTHIEUTH + {0xB05A, 0xCEBA}, //7970 #HANGUL SYLLABLE KHIEUKH YA RIEULPHIEUPH + {0xB061, 0xCEBB}, //7971 #HANGUL SYLLABLE KHIEUKH YA RIEULHIEUH + {0xB062, 0xCEBC}, //7972 #HANGUL SYLLABLE KHIEUKH YA MIEUM + {0xB063, 0xCEBD}, //7973 #HANGUL SYLLABLE KHIEUKH YA PIEUP + {0xB064, 0xCEBE}, //7974 #HANGUL SYLLABLE KHIEUKH YA PIEUPSIOS + {0xB065, 0xCEBF}, //7975 #HANGUL SYLLABLE KHIEUKH YA SIOS + {0xB066, 0xCEC0}, //7976 #HANGUL SYLLABLE KHIEUKH YA SSANGSIOS + {0xB067, 0xCEC2}, //7977 #HANGUL SYLLABLE KHIEUKH YA CIEUC + {0xB068, 0xCEC3}, //7978 #HANGUL SYLLABLE KHIEUKH YA CHIEUCH + {0xB069, 0xCEC4}, //7979 #HANGUL SYLLABLE KHIEUKH YA KHIEUKH + {0xB06A, 0xCEC5}, //7980 #HANGUL SYLLABLE KHIEUKH YA THIEUTH + {0xB06B, 0xCEC6}, //7981 #HANGUL SYLLABLE KHIEUKH YA PHIEUPH + {0xB06C, 0xCEC7}, //7982 #HANGUL SYLLABLE KHIEUKH YA HIEUH + {0xB06D, 0xCEC8}, //7983 #HANGUL SYLLABLE KHIEUKH YAE + {0xB06E, 0xCEC9}, //7984 #HANGUL SYLLABLE KHIEUKH YAE KIYEOK + {0xB06F, 0xCECA}, //7985 #HANGUL SYLLABLE KHIEUKH YAE SSANGKIYEOK + {0xB070, 0xCECB}, //7986 #HANGUL SYLLABLE KHIEUKH YAE KIYEOKSIOS + {0xB071, 0xCECC}, //7987 #HANGUL SYLLABLE KHIEUKH YAE NIEUN + {0xB072, 0xCECD}, //7988 #HANGUL SYLLABLE KHIEUKH YAE NIEUNCIEUC + {0xB073, 0xCECE}, //7989 #HANGUL SYLLABLE KHIEUKH YAE NIEUNHIEUH + {0xB074, 0xCECF}, //7990 #HANGUL SYLLABLE KHIEUKH YAE TIKEUT + {0xB075, 0xCED0}, //7991 #HANGUL SYLLABLE KHIEUKH YAE RIEUL + {0xB076, 0xCED1}, //7992 #HANGUL SYLLABLE KHIEUKH YAE RIEULKIYEOK + {0xB077, 0xCED2}, //7993 #HANGUL SYLLABLE KHIEUKH YAE RIEULMIEUM + {0xB078, 0xCED3}, //7994 #HANGUL SYLLABLE KHIEUKH YAE RIEULPIEUP + {0xB079, 0xCED4}, //7995 #HANGUL SYLLABLE KHIEUKH YAE RIEULSIOS + {0xB07A, 0xCED5}, //7996 #HANGUL SYLLABLE KHIEUKH YAE RIEULTHIEUTH + {0xB081, 0xCED6}, //7997 #HANGUL SYLLABLE KHIEUKH YAE RIEULPHIEUPH + {0xB082, 0xCED7}, //7998 #HANGUL SYLLABLE KHIEUKH YAE RIEULHIEUH + {0xB083, 0xCED8}, //7999 #HANGUL SYLLABLE KHIEUKH YAE MIEUM + {0xB084, 0xCED9}, //8000 #HANGUL SYLLABLE KHIEUKH YAE PIEUP + {0xB085, 0xCEDA}, //8001 #HANGUL SYLLABLE KHIEUKH YAE PIEUPSIOS + {0xB086, 0xCEDB}, //8002 #HANGUL SYLLABLE KHIEUKH YAE SIOS + {0xB087, 0xCEDC}, //8003 #HANGUL SYLLABLE KHIEUKH YAE SSANGSIOS + {0xB088, 0xCEDD}, //8004 #HANGUL SYLLABLE KHIEUKH YAE IEUNG + {0xB089, 0xCEDE}, //8005 #HANGUL SYLLABLE KHIEUKH YAE CIEUC + {0xB08A, 0xCEDF}, //8006 #HANGUL SYLLABLE KHIEUKH YAE CHIEUCH + {0xB08B, 0xCEE0}, //8007 #HANGUL SYLLABLE KHIEUKH YAE KHIEUKH + {0xB08C, 0xCEE1}, //8008 #HANGUL SYLLABLE KHIEUKH YAE THIEUTH + {0xB08D, 0xCEE2}, //8009 #HANGUL SYLLABLE KHIEUKH YAE PHIEUPH + {0xB08E, 0xCEE3}, //8010 #HANGUL SYLLABLE KHIEUKH YAE HIEUH + {0xB08F, 0xCEE6}, //8011 #HANGUL SYLLABLE KHIEUKH EO SSANGKIYEOK + {0xB090, 0xCEE7}, //8012 #HANGUL SYLLABLE KHIEUKH EO KIYEOKSIOS + {0xB091, 0xCEE9}, //8013 #HANGUL SYLLABLE KHIEUKH EO NIEUNCIEUC + {0xB092, 0xCEEA}, //8014 #HANGUL SYLLABLE KHIEUKH EO NIEUNHIEUH + {0xB093, 0xCEED}, //8015 #HANGUL SYLLABLE KHIEUKH EO RIEULKIYEOK + {0xB094, 0xCEEE}, //8016 #HANGUL SYLLABLE KHIEUKH EO RIEULMIEUM + {0xB095, 0xCEEF}, //8017 #HANGUL SYLLABLE KHIEUKH EO RIEULPIEUP + {0xB096, 0xCEF0}, //8018 #HANGUL SYLLABLE KHIEUKH EO RIEULSIOS + {0xB097, 0xCEF1}, //8019 #HANGUL SYLLABLE KHIEUKH EO RIEULTHIEUTH + {0xB098, 0xCEF2}, //8020 #HANGUL SYLLABLE KHIEUKH EO RIEULPHIEUPH + {0xB099, 0xCEF3}, //8021 #HANGUL SYLLABLE KHIEUKH EO RIEULHIEUH + {0xB09A, 0xCEF6}, //8022 #HANGUL SYLLABLE KHIEUKH EO PIEUPSIOS + {0xB09B, 0xCEFA}, //8023 #HANGUL SYLLABLE KHIEUKH EO CIEUC + {0xB09C, 0xCEFB}, //8024 #HANGUL SYLLABLE KHIEUKH EO CHIEUCH + {0xB09D, 0xCEFC}, //8025 #HANGUL SYLLABLE KHIEUKH EO KHIEUKH + {0xB09E, 0xCEFD}, //8026 #HANGUL SYLLABLE KHIEUKH EO THIEUTH + {0xB09F, 0xCEFE}, //8027 #HANGUL SYLLABLE KHIEUKH EO PHIEUPH + {0xB0A0, 0xCEFF}, //8028 #HANGUL SYLLABLE KHIEUKH EO HIEUH + {0xB0A1, 0xAC00}, //8029 #HANGUL SYLLABLE KIYEOK A + {0xB0A2, 0xAC01}, //8030 #HANGUL SYLLABLE KIYEOK A KIYEOK + {0xB0A3, 0xAC04}, //8031 #HANGUL SYLLABLE KIYEOK A NIEUN + {0xB0A4, 0xAC07}, //8032 #HANGUL SYLLABLE KIYEOK A TIKEUT + {0xB0A5, 0xAC08}, //8033 #HANGUL SYLLABLE KIYEOK A RIEUL + {0xB0A6, 0xAC09}, //8034 #HANGUL SYLLABLE KIYEOK A RIEULKIYEOK + {0xB0A7, 0xAC0A}, //8035 #HANGUL SYLLABLE KIYEOK A RIEULMIEUM + {0xB0A8, 0xAC10}, //8036 #HANGUL SYLLABLE KIYEOK A MIEUM + {0xB0A9, 0xAC11}, //8037 #HANGUL SYLLABLE KIYEOK A PIEUP + {0xB0AA, 0xAC12}, //8038 #HANGUL SYLLABLE KIYEOK A PIEUPSIOS + {0xB0AB, 0xAC13}, //8039 #HANGUL SYLLABLE KIYEOK A SIOS + {0xB0AC, 0xAC14}, //8040 #HANGUL SYLLABLE KIYEOK A SSANGSIOS + {0xB0AD, 0xAC15}, //8041 #HANGUL SYLLABLE KIYEOK A IEUNG + {0xB0AE, 0xAC16}, //8042 #HANGUL SYLLABLE KIYEOK A CIEUC + {0xB0AF, 0xAC17}, //8043 #HANGUL SYLLABLE KIYEOK A CHIEUCH + {0xB0B0, 0xAC19}, //8044 #HANGUL SYLLABLE KIYEOK A THIEUTH + {0xB0B1, 0xAC1A}, //8045 #HANGUL SYLLABLE KIYEOK A PHIEUPH + {0xB0B2, 0xAC1B}, //8046 #HANGUL SYLLABLE KIYEOK A HIEUH + {0xB0B3, 0xAC1C}, //8047 #HANGUL SYLLABLE KIYEOK AE + {0xB0B4, 0xAC1D}, //8048 #HANGUL SYLLABLE KIYEOK AE KIYEOK + {0xB0B5, 0xAC20}, //8049 #HANGUL SYLLABLE KIYEOK AE NIEUN + {0xB0B6, 0xAC24}, //8050 #HANGUL SYLLABLE KIYEOK AE RIEUL + {0xB0B7, 0xAC2C}, //8051 #HANGUL SYLLABLE KIYEOK AE MIEUM + {0xB0B8, 0xAC2D}, //8052 #HANGUL SYLLABLE KIYEOK AE PIEUP + {0xB0B9, 0xAC2F}, //8053 #HANGUL SYLLABLE KIYEOK AE SIOS + {0xB0BA, 0xAC30}, //8054 #HANGUL SYLLABLE KIYEOK AE SSANGSIOS + {0xB0BB, 0xAC31}, //8055 #HANGUL SYLLABLE KIYEOK AE IEUNG + {0xB0BC, 0xAC38}, //8056 #HANGUL SYLLABLE KIYEOK YA + {0xB0BD, 0xAC39}, //8057 #HANGUL SYLLABLE KIYEOK YA KIYEOK + {0xB0BE, 0xAC3C}, //8058 #HANGUL SYLLABLE KIYEOK YA NIEUN + {0xB0BF, 0xAC40}, //8059 #HANGUL SYLLABLE KIYEOK YA RIEUL + {0xB0C0, 0xAC4B}, //8060 #HANGUL SYLLABLE KIYEOK YA SIOS + {0xB0C1, 0xAC4D}, //8061 #HANGUL SYLLABLE KIYEOK YA IEUNG + {0xB0C2, 0xAC54}, //8062 #HANGUL SYLLABLE KIYEOK YAE + {0xB0C3, 0xAC58}, //8063 #HANGUL SYLLABLE KIYEOK YAE NIEUN + {0xB0C4, 0xAC5C}, //8064 #HANGUL SYLLABLE KIYEOK YAE RIEUL + {0xB0C5, 0xAC70}, //8065 #HANGUL SYLLABLE KIYEOK EO + {0xB0C6, 0xAC71}, //8066 #HANGUL SYLLABLE KIYEOK EO KIYEOK + {0xB0C7, 0xAC74}, //8067 #HANGUL SYLLABLE KIYEOK EO NIEUN + {0xB0C8, 0xAC77}, //8068 #HANGUL SYLLABLE KIYEOK EO TIKEUT + {0xB0C9, 0xAC78}, //8069 #HANGUL SYLLABLE KIYEOK EO RIEUL + {0xB0CA, 0xAC7A}, //8070 #HANGUL SYLLABLE KIYEOK EO RIEULMIEUM + {0xB0CB, 0xAC80}, //8071 #HANGUL SYLLABLE KIYEOK EO MIEUM + {0xB0CC, 0xAC81}, //8072 #HANGUL SYLLABLE KIYEOK EO PIEUP + {0xB0CD, 0xAC83}, //8073 #HANGUL SYLLABLE KIYEOK EO SIOS + {0xB0CE, 0xAC84}, //8074 #HANGUL SYLLABLE KIYEOK EO SSANGSIOS + {0xB0CF, 0xAC85}, //8075 #HANGUL SYLLABLE KIYEOK EO IEUNG + {0xB0D0, 0xAC86}, //8076 #HANGUL SYLLABLE KIYEOK EO CIEUC + {0xB0D1, 0xAC89}, //8077 #HANGUL SYLLABLE KIYEOK EO THIEUTH + {0xB0D2, 0xAC8A}, //8078 #HANGUL SYLLABLE KIYEOK EO PHIEUPH + {0xB0D3, 0xAC8B}, //8079 #HANGUL SYLLABLE KIYEOK EO HIEUH + {0xB0D4, 0xAC8C}, //8080 #HANGUL SYLLABLE KIYEOK E + {0xB0D5, 0xAC90}, //8081 #HANGUL SYLLABLE KIYEOK E NIEUN + {0xB0D6, 0xAC94}, //8082 #HANGUL SYLLABLE KIYEOK E RIEUL + {0xB0D7, 0xAC9C}, //8083 #HANGUL SYLLABLE KIYEOK E MIEUM + {0xB0D8, 0xAC9D}, //8084 #HANGUL SYLLABLE KIYEOK E PIEUP + {0xB0D9, 0xAC9F}, //8085 #HANGUL SYLLABLE KIYEOK E SIOS + {0xB0DA, 0xACA0}, //8086 #HANGUL SYLLABLE KIYEOK E SSANGSIOS + {0xB0DB, 0xACA1}, //8087 #HANGUL SYLLABLE KIYEOK E IEUNG + {0xB0DC, 0xACA8}, //8088 #HANGUL SYLLABLE KIYEOK YEO + {0xB0DD, 0xACA9}, //8089 #HANGUL SYLLABLE KIYEOK YEO KIYEOK + {0xB0DE, 0xACAA}, //8090 #HANGUL SYLLABLE KIYEOK YEO SSANGKIYEOK + {0xB0DF, 0xACAC}, //8091 #HANGUL SYLLABLE KIYEOK YEO NIEUN + {0xB0E0, 0xACAF}, //8092 #HANGUL SYLLABLE KIYEOK YEO TIKEUT + {0xB0E1, 0xACB0}, //8093 #HANGUL SYLLABLE KIYEOK YEO RIEUL + {0xB0E2, 0xACB8}, //8094 #HANGUL SYLLABLE KIYEOK YEO MIEUM + {0xB0E3, 0xACB9}, //8095 #HANGUL SYLLABLE KIYEOK YEO PIEUP + {0xB0E4, 0xACBB}, //8096 #HANGUL SYLLABLE KIYEOK YEO SIOS + {0xB0E5, 0xACBC}, //8097 #HANGUL SYLLABLE KIYEOK YEO SSANGSIOS + {0xB0E6, 0xACBD}, //8098 #HANGUL SYLLABLE KIYEOK YEO IEUNG + {0xB0E7, 0xACC1}, //8099 #HANGUL SYLLABLE KIYEOK YEO THIEUTH + {0xB0E8, 0xACC4}, //8100 #HANGUL SYLLABLE KIYEOK YE + {0xB0E9, 0xACC8}, //8101 #HANGUL SYLLABLE KIYEOK YE NIEUN + {0xB0EA, 0xACCC}, //8102 #HANGUL SYLLABLE KIYEOK YE RIEUL + {0xB0EB, 0xACD5}, //8103 #HANGUL SYLLABLE KIYEOK YE PIEUP + {0xB0EC, 0xACD7}, //8104 #HANGUL SYLLABLE KIYEOK YE SIOS + {0xB0ED, 0xACE0}, //8105 #HANGUL SYLLABLE KIYEOK O + {0xB0EE, 0xACE1}, //8106 #HANGUL SYLLABLE KIYEOK O KIYEOK + {0xB0EF, 0xACE4}, //8107 #HANGUL SYLLABLE KIYEOK O NIEUN + {0xB0F0, 0xACE7}, //8108 #HANGUL SYLLABLE KIYEOK O TIKEUT + {0xB0F1, 0xACE8}, //8109 #HANGUL SYLLABLE KIYEOK O RIEUL + {0xB0F2, 0xACEA}, //8110 #HANGUL SYLLABLE KIYEOK O RIEULMIEUM + {0xB0F3, 0xACEC}, //8111 #HANGUL SYLLABLE KIYEOK O RIEULSIOS + {0xB0F4, 0xACEF}, //8112 #HANGUL SYLLABLE KIYEOK O RIEULHIEUH + {0xB0F5, 0xACF0}, //8113 #HANGUL SYLLABLE KIYEOK O MIEUM + {0xB0F6, 0xACF1}, //8114 #HANGUL SYLLABLE KIYEOK O PIEUP + {0xB0F7, 0xACF3}, //8115 #HANGUL SYLLABLE KIYEOK O SIOS + {0xB0F8, 0xACF5}, //8116 #HANGUL SYLLABLE KIYEOK O IEUNG + {0xB0F9, 0xACF6}, //8117 #HANGUL SYLLABLE KIYEOK O CIEUC + {0xB0FA, 0xACFC}, //8118 #HANGUL SYLLABLE KIYEOK WA + {0xB0FB, 0xACFD}, //8119 #HANGUL SYLLABLE KIYEOK WA KIYEOK + {0xB0FC, 0xAD00}, //8120 #HANGUL SYLLABLE KIYEOK WA NIEUN + {0xB0FD, 0xAD04}, //8121 #HANGUL SYLLABLE KIYEOK WA RIEUL + {0xB0FE, 0xAD06}, //8122 #HANGUL SYLLABLE KIYEOK WA RIEULMIEUM + {0xB141, 0xCF02}, //8123 #HANGUL SYLLABLE KHIEUKH E SSANGKIYEOK + {0xB142, 0xCF03}, //8124 #HANGUL SYLLABLE KHIEUKH E KIYEOKSIOS + {0xB143, 0xCF05}, //8125 #HANGUL SYLLABLE KHIEUKH E NIEUNCIEUC + {0xB144, 0xCF06}, //8126 #HANGUL SYLLABLE KHIEUKH E NIEUNHIEUH + {0xB145, 0xCF07}, //8127 #HANGUL SYLLABLE KHIEUKH E TIKEUT + {0xB146, 0xCF09}, //8128 #HANGUL SYLLABLE KHIEUKH E RIEULKIYEOK + {0xB147, 0xCF0A}, //8129 #HANGUL SYLLABLE KHIEUKH E RIEULMIEUM + {0xB148, 0xCF0B}, //8130 #HANGUL SYLLABLE KHIEUKH E RIEULPIEUP + {0xB149, 0xCF0C}, //8131 #HANGUL SYLLABLE KHIEUKH E RIEULSIOS + {0xB14A, 0xCF0D}, //8132 #HANGUL SYLLABLE KHIEUKH E RIEULTHIEUTH + {0xB14B, 0xCF0E}, //8133 #HANGUL SYLLABLE KHIEUKH E RIEULPHIEUPH + {0xB14C, 0xCF0F}, //8134 #HANGUL SYLLABLE KHIEUKH E RIEULHIEUH + {0xB14D, 0xCF12}, //8135 #HANGUL SYLLABLE KHIEUKH E PIEUPSIOS + {0xB14E, 0xCF14}, //8136 #HANGUL SYLLABLE KHIEUKH E SSANGSIOS + {0xB14F, 0xCF16}, //8137 #HANGUL SYLLABLE KHIEUKH E CIEUC + {0xB150, 0xCF17}, //8138 #HANGUL SYLLABLE KHIEUKH E CHIEUCH + {0xB151, 0xCF18}, //8139 #HANGUL SYLLABLE KHIEUKH E KHIEUKH + {0xB152, 0xCF19}, //8140 #HANGUL SYLLABLE KHIEUKH E THIEUTH + {0xB153, 0xCF1A}, //8141 #HANGUL SYLLABLE KHIEUKH E PHIEUPH + {0xB154, 0xCF1B}, //8142 #HANGUL SYLLABLE KHIEUKH E HIEUH + {0xB155, 0xCF1D}, //8143 #HANGUL SYLLABLE KHIEUKH YEO KIYEOK + {0xB156, 0xCF1E}, //8144 #HANGUL SYLLABLE KHIEUKH YEO SSANGKIYEOK + {0xB157, 0xCF1F}, //8145 #HANGUL SYLLABLE KHIEUKH YEO KIYEOKSIOS + {0xB158, 0xCF21}, //8146 #HANGUL SYLLABLE KHIEUKH YEO NIEUNCIEUC + {0xB159, 0xCF22}, //8147 #HANGUL SYLLABLE KHIEUKH YEO NIEUNHIEUH + {0xB15A, 0xCF23}, //8148 #HANGUL SYLLABLE KHIEUKH YEO TIKEUT + {0xB161, 0xCF25}, //8149 #HANGUL SYLLABLE KHIEUKH YEO RIEULKIYEOK + {0xB162, 0xCF26}, //8150 #HANGUL SYLLABLE KHIEUKH YEO RIEULMIEUM + {0xB163, 0xCF27}, //8151 #HANGUL SYLLABLE KHIEUKH YEO RIEULPIEUP + {0xB164, 0xCF28}, //8152 #HANGUL SYLLABLE KHIEUKH YEO RIEULSIOS + {0xB165, 0xCF29}, //8153 #HANGUL SYLLABLE KHIEUKH YEO RIEULTHIEUTH + {0xB166, 0xCF2A}, //8154 #HANGUL SYLLABLE KHIEUKH YEO RIEULPHIEUPH + {0xB167, 0xCF2B}, //8155 #HANGUL SYLLABLE KHIEUKH YEO RIEULHIEUH + {0xB168, 0xCF2E}, //8156 #HANGUL SYLLABLE KHIEUKH YEO PIEUPSIOS + {0xB169, 0xCF32}, //8157 #HANGUL SYLLABLE KHIEUKH YEO CIEUC + {0xB16A, 0xCF33}, //8158 #HANGUL SYLLABLE KHIEUKH YEO CHIEUCH + {0xB16B, 0xCF34}, //8159 #HANGUL SYLLABLE KHIEUKH YEO KHIEUKH + {0xB16C, 0xCF35}, //8160 #HANGUL SYLLABLE KHIEUKH YEO THIEUTH + {0xB16D, 0xCF36}, //8161 #HANGUL SYLLABLE KHIEUKH YEO PHIEUPH + {0xB16E, 0xCF37}, //8162 #HANGUL SYLLABLE KHIEUKH YEO HIEUH + {0xB16F, 0xCF39}, //8163 #HANGUL SYLLABLE KHIEUKH YE KIYEOK + {0xB170, 0xCF3A}, //8164 #HANGUL SYLLABLE KHIEUKH YE SSANGKIYEOK + {0xB171, 0xCF3B}, //8165 #HANGUL SYLLABLE KHIEUKH YE KIYEOKSIOS + {0xB172, 0xCF3C}, //8166 #HANGUL SYLLABLE KHIEUKH YE NIEUN + {0xB173, 0xCF3D}, //8167 #HANGUL SYLLABLE KHIEUKH YE NIEUNCIEUC + {0xB174, 0xCF3E}, //8168 #HANGUL SYLLABLE KHIEUKH YE NIEUNHIEUH + {0xB175, 0xCF3F}, //8169 #HANGUL SYLLABLE KHIEUKH YE TIKEUT + {0xB176, 0xCF40}, //8170 #HANGUL SYLLABLE KHIEUKH YE RIEUL + {0xB177, 0xCF41}, //8171 #HANGUL SYLLABLE KHIEUKH YE RIEULKIYEOK + {0xB178, 0xCF42}, //8172 #HANGUL SYLLABLE KHIEUKH YE RIEULMIEUM + {0xB179, 0xCF43}, //8173 #HANGUL SYLLABLE KHIEUKH YE RIEULPIEUP + {0xB17A, 0xCF44}, //8174 #HANGUL SYLLABLE KHIEUKH YE RIEULSIOS + {0xB181, 0xCF45}, //8175 #HANGUL SYLLABLE KHIEUKH YE RIEULTHIEUTH + {0xB182, 0xCF46}, //8176 #HANGUL SYLLABLE KHIEUKH YE RIEULPHIEUPH + {0xB183, 0xCF47}, //8177 #HANGUL SYLLABLE KHIEUKH YE RIEULHIEUH + {0xB184, 0xCF48}, //8178 #HANGUL SYLLABLE KHIEUKH YE MIEUM + {0xB185, 0xCF49}, //8179 #HANGUL SYLLABLE KHIEUKH YE PIEUP + {0xB186, 0xCF4A}, //8180 #HANGUL SYLLABLE KHIEUKH YE PIEUPSIOS + {0xB187, 0xCF4B}, //8181 #HANGUL SYLLABLE KHIEUKH YE SIOS + {0xB188, 0xCF4C}, //8182 #HANGUL SYLLABLE KHIEUKH YE SSANGSIOS + {0xB189, 0xCF4D}, //8183 #HANGUL SYLLABLE KHIEUKH YE IEUNG + {0xB18A, 0xCF4E}, //8184 #HANGUL SYLLABLE KHIEUKH YE CIEUC + {0xB18B, 0xCF4F}, //8185 #HANGUL SYLLABLE KHIEUKH YE CHIEUCH + {0xB18C, 0xCF50}, //8186 #HANGUL SYLLABLE KHIEUKH YE KHIEUKH + {0xB18D, 0xCF51}, //8187 #HANGUL SYLLABLE KHIEUKH YE THIEUTH + {0xB18E, 0xCF52}, //8188 #HANGUL SYLLABLE KHIEUKH YE PHIEUPH + {0xB18F, 0xCF53}, //8189 #HANGUL SYLLABLE KHIEUKH YE HIEUH + {0xB190, 0xCF56}, //8190 #HANGUL SYLLABLE KHIEUKH O SSANGKIYEOK + {0xB191, 0xCF57}, //8191 #HANGUL SYLLABLE KHIEUKH O KIYEOKSIOS + {0xB192, 0xCF59}, //8192 #HANGUL SYLLABLE KHIEUKH O NIEUNCIEUC + {0xB193, 0xCF5A}, //8193 #HANGUL SYLLABLE KHIEUKH O NIEUNHIEUH + {0xB194, 0xCF5B}, //8194 #HANGUL SYLLABLE KHIEUKH O TIKEUT + {0xB195, 0xCF5D}, //8195 #HANGUL SYLLABLE KHIEUKH O RIEULKIYEOK + {0xB196, 0xCF5E}, //8196 #HANGUL SYLLABLE KHIEUKH O RIEULMIEUM + {0xB197, 0xCF5F}, //8197 #HANGUL SYLLABLE KHIEUKH O RIEULPIEUP + {0xB198, 0xCF60}, //8198 #HANGUL SYLLABLE KHIEUKH O RIEULSIOS + {0xB199, 0xCF61}, //8199 #HANGUL SYLLABLE KHIEUKH O RIEULTHIEUTH + {0xB19A, 0xCF62}, //8200 #HANGUL SYLLABLE KHIEUKH O RIEULPHIEUPH + {0xB19B, 0xCF63}, //8201 #HANGUL SYLLABLE KHIEUKH O RIEULHIEUH + {0xB19C, 0xCF66}, //8202 #HANGUL SYLLABLE KHIEUKH O PIEUPSIOS + {0xB19D, 0xCF68}, //8203 #HANGUL SYLLABLE KHIEUKH O SSANGSIOS + {0xB19E, 0xCF6A}, //8204 #HANGUL SYLLABLE KHIEUKH O CIEUC + {0xB19F, 0xCF6B}, //8205 #HANGUL SYLLABLE KHIEUKH O CHIEUCH + {0xB1A0, 0xCF6C}, //8206 #HANGUL SYLLABLE KHIEUKH O KHIEUKH + {0xB1A1, 0xAD0C}, //8207 #HANGUL SYLLABLE KIYEOK WA MIEUM + {0xB1A2, 0xAD0D}, //8208 #HANGUL SYLLABLE KIYEOK WA PIEUP + {0xB1A3, 0xAD0F}, //8209 #HANGUL SYLLABLE KIYEOK WA SIOS + {0xB1A4, 0xAD11}, //8210 #HANGUL SYLLABLE KIYEOK WA IEUNG + {0xB1A5, 0xAD18}, //8211 #HANGUL SYLLABLE KIYEOK WAE + {0xB1A6, 0xAD1C}, //8212 #HANGUL SYLLABLE KIYEOK WAE NIEUN + {0xB1A7, 0xAD20}, //8213 #HANGUL SYLLABLE KIYEOK WAE RIEUL + {0xB1A8, 0xAD29}, //8214 #HANGUL SYLLABLE KIYEOK WAE PIEUP + {0xB1A9, 0xAD2C}, //8215 #HANGUL SYLLABLE KIYEOK WAE SSANGSIOS + {0xB1AA, 0xAD2D}, //8216 #HANGUL SYLLABLE KIYEOK WAE IEUNG + {0xB1AB, 0xAD34}, //8217 #HANGUL SYLLABLE KIYEOK OE + {0xB1AC, 0xAD35}, //8218 #HANGUL SYLLABLE KIYEOK OE KIYEOK + {0xB1AD, 0xAD38}, //8219 #HANGUL SYLLABLE KIYEOK OE NIEUN + {0xB1AE, 0xAD3C}, //8220 #HANGUL SYLLABLE KIYEOK OE RIEUL + {0xB1AF, 0xAD44}, //8221 #HANGUL SYLLABLE KIYEOK OE MIEUM + {0xB1B0, 0xAD45}, //8222 #HANGUL SYLLABLE KIYEOK OE PIEUP + {0xB1B1, 0xAD47}, //8223 #HANGUL SYLLABLE KIYEOK OE SIOS + {0xB1B2, 0xAD49}, //8224 #HANGUL SYLLABLE KIYEOK OE IEUNG + {0xB1B3, 0xAD50}, //8225 #HANGUL SYLLABLE KIYEOK YO + {0xB1B4, 0xAD54}, //8226 #HANGUL SYLLABLE KIYEOK YO NIEUN + {0xB1B5, 0xAD58}, //8227 #HANGUL SYLLABLE KIYEOK YO RIEUL + {0xB1B6, 0xAD61}, //8228 #HANGUL SYLLABLE KIYEOK YO PIEUP + {0xB1B7, 0xAD63}, //8229 #HANGUL SYLLABLE KIYEOK YO SIOS + {0xB1B8, 0xAD6C}, //8230 #HANGUL SYLLABLE KIYEOK U + {0xB1B9, 0xAD6D}, //8231 #HANGUL SYLLABLE KIYEOK U KIYEOK + {0xB1BA, 0xAD70}, //8232 #HANGUL SYLLABLE KIYEOK U NIEUN + {0xB1BB, 0xAD73}, //8233 #HANGUL SYLLABLE KIYEOK U TIKEUT + {0xB1BC, 0xAD74}, //8234 #HANGUL SYLLABLE KIYEOK U RIEUL + {0xB1BD, 0xAD75}, //8235 #HANGUL SYLLABLE KIYEOK U RIEULKIYEOK + {0xB1BE, 0xAD76}, //8236 #HANGUL SYLLABLE KIYEOK U RIEULMIEUM + {0xB1BF, 0xAD7B}, //8237 #HANGUL SYLLABLE KIYEOK U RIEULHIEUH + {0xB1C0, 0xAD7C}, //8238 #HANGUL SYLLABLE KIYEOK U MIEUM + {0xB1C1, 0xAD7D}, //8239 #HANGUL SYLLABLE KIYEOK U PIEUP + {0xB1C2, 0xAD7F}, //8240 #HANGUL SYLLABLE KIYEOK U SIOS + {0xB1C3, 0xAD81}, //8241 #HANGUL SYLLABLE KIYEOK U IEUNG + {0xB1C4, 0xAD82}, //8242 #HANGUL SYLLABLE KIYEOK U CIEUC + {0xB1C5, 0xAD88}, //8243 #HANGUL SYLLABLE KIYEOK WEO + {0xB1C6, 0xAD89}, //8244 #HANGUL SYLLABLE KIYEOK WEO KIYEOK + {0xB1C7, 0xAD8C}, //8245 #HANGUL SYLLABLE KIYEOK WEO NIEUN + {0xB1C8, 0xAD90}, //8246 #HANGUL SYLLABLE KIYEOK WEO RIEUL + {0xB1C9, 0xAD9C}, //8247 #HANGUL SYLLABLE KIYEOK WEO SSANGSIOS + {0xB1CA, 0xAD9D}, //8248 #HANGUL SYLLABLE KIYEOK WEO IEUNG + {0xB1CB, 0xADA4}, //8249 #HANGUL SYLLABLE KIYEOK WE + {0xB1CC, 0xADB7}, //8250 #HANGUL SYLLABLE KIYEOK WE SIOS + {0xB1CD, 0xADC0}, //8251 #HANGUL SYLLABLE KIYEOK WI + {0xB1CE, 0xADC1}, //8252 #HANGUL SYLLABLE KIYEOK WI KIYEOK + {0xB1CF, 0xADC4}, //8253 #HANGUL SYLLABLE KIYEOK WI NIEUN + {0xB1D0, 0xADC8}, //8254 #HANGUL SYLLABLE KIYEOK WI RIEUL + {0xB1D1, 0xADD0}, //8255 #HANGUL SYLLABLE KIYEOK WI MIEUM + {0xB1D2, 0xADD1}, //8256 #HANGUL SYLLABLE KIYEOK WI PIEUP + {0xB1D3, 0xADD3}, //8257 #HANGUL SYLLABLE KIYEOK WI SIOS + {0xB1D4, 0xADDC}, //8258 #HANGUL SYLLABLE KIYEOK YU + {0xB1D5, 0xADE0}, //8259 #HANGUL SYLLABLE KIYEOK YU NIEUN + {0xB1D6, 0xADE4}, //8260 #HANGUL SYLLABLE KIYEOK YU RIEUL + {0xB1D7, 0xADF8}, //8261 #HANGUL SYLLABLE KIYEOK EU + {0xB1D8, 0xADF9}, //8262 #HANGUL SYLLABLE KIYEOK EU KIYEOK + {0xB1D9, 0xADFC}, //8263 #HANGUL SYLLABLE KIYEOK EU NIEUN + {0xB1DA, 0xADFF}, //8264 #HANGUL SYLLABLE KIYEOK EU TIKEUT + {0xB1DB, 0xAE00}, //8265 #HANGUL SYLLABLE KIYEOK EU RIEUL + {0xB1DC, 0xAE01}, //8266 #HANGUL SYLLABLE KIYEOK EU RIEULKIYEOK + {0xB1DD, 0xAE08}, //8267 #HANGUL SYLLABLE KIYEOK EU MIEUM + {0xB1DE, 0xAE09}, //8268 #HANGUL SYLLABLE KIYEOK EU PIEUP + {0xB1DF, 0xAE0B}, //8269 #HANGUL SYLLABLE KIYEOK EU SIOS + {0xB1E0, 0xAE0D}, //8270 #HANGUL SYLLABLE KIYEOK EU IEUNG + {0xB1E1, 0xAE14}, //8271 #HANGUL SYLLABLE KIYEOK YI + {0xB1E2, 0xAE30}, //8272 #HANGUL SYLLABLE KIYEOK I + {0xB1E3, 0xAE31}, //8273 #HANGUL SYLLABLE KIYEOK I KIYEOK + {0xB1E4, 0xAE34}, //8274 #HANGUL SYLLABLE KIYEOK I NIEUN + {0xB1E5, 0xAE37}, //8275 #HANGUL SYLLABLE KIYEOK I TIKEUT + {0xB1E6, 0xAE38}, //8276 #HANGUL SYLLABLE KIYEOK I RIEUL + {0xB1E7, 0xAE3A}, //8277 #HANGUL SYLLABLE KIYEOK I RIEULMIEUM + {0xB1E8, 0xAE40}, //8278 #HANGUL SYLLABLE KIYEOK I MIEUM + {0xB1E9, 0xAE41}, //8279 #HANGUL SYLLABLE KIYEOK I PIEUP + {0xB1EA, 0xAE43}, //8280 #HANGUL SYLLABLE KIYEOK I SIOS + {0xB1EB, 0xAE45}, //8281 #HANGUL SYLLABLE KIYEOK I IEUNG + {0xB1EC, 0xAE46}, //8282 #HANGUL SYLLABLE KIYEOK I CIEUC + {0xB1ED, 0xAE4A}, //8283 #HANGUL SYLLABLE KIYEOK I PHIEUPH + {0xB1EE, 0xAE4C}, //8284 #HANGUL SYLLABLE SSANGKIYEOK A + {0xB1EF, 0xAE4D}, //8285 #HANGUL SYLLABLE SSANGKIYEOK A KIYEOK + {0xB1F0, 0xAE4E}, //8286 #HANGUL SYLLABLE SSANGKIYEOK A SSANGKIYEOK + {0xB1F1, 0xAE50}, //8287 #HANGUL SYLLABLE SSANGKIYEOK A NIEUN + {0xB1F2, 0xAE54}, //8288 #HANGUL SYLLABLE SSANGKIYEOK A RIEUL + {0xB1F3, 0xAE56}, //8289 #HANGUL SYLLABLE SSANGKIYEOK A RIEULMIEUM + {0xB1F4, 0xAE5C}, //8290 #HANGUL SYLLABLE SSANGKIYEOK A MIEUM + {0xB1F5, 0xAE5D}, //8291 #HANGUL SYLLABLE SSANGKIYEOK A PIEUP + {0xB1F6, 0xAE5F}, //8292 #HANGUL SYLLABLE SSANGKIYEOK A SIOS + {0xB1F7, 0xAE60}, //8293 #HANGUL SYLLABLE SSANGKIYEOK A SSANGSIOS + {0xB1F8, 0xAE61}, //8294 #HANGUL SYLLABLE SSANGKIYEOK A IEUNG + {0xB1F9, 0xAE65}, //8295 #HANGUL SYLLABLE SSANGKIYEOK A THIEUTH + {0xB1FA, 0xAE68}, //8296 #HANGUL SYLLABLE SSANGKIYEOK AE + {0xB1FB, 0xAE69}, //8297 #HANGUL SYLLABLE SSANGKIYEOK AE KIYEOK + {0xB1FC, 0xAE6C}, //8298 #HANGUL SYLLABLE SSANGKIYEOK AE NIEUN + {0xB1FD, 0xAE70}, //8299 #HANGUL SYLLABLE SSANGKIYEOK AE RIEUL + {0xB1FE, 0xAE78}, //8300 #HANGUL SYLLABLE SSANGKIYEOK AE MIEUM + {0xB241, 0xCF6D}, //8301 #HANGUL SYLLABLE KHIEUKH O THIEUTH + {0xB242, 0xCF6E}, //8302 #HANGUL SYLLABLE KHIEUKH O PHIEUPH + {0xB243, 0xCF6F}, //8303 #HANGUL SYLLABLE KHIEUKH O HIEUH + {0xB244, 0xCF72}, //8304 #HANGUL SYLLABLE KHIEUKH WA SSANGKIYEOK + {0xB245, 0xCF73}, //8305 #HANGUL SYLLABLE KHIEUKH WA KIYEOKSIOS + {0xB246, 0xCF75}, //8306 #HANGUL SYLLABLE KHIEUKH WA NIEUNCIEUC + {0xB247, 0xCF76}, //8307 #HANGUL SYLLABLE KHIEUKH WA NIEUNHIEUH + {0xB248, 0xCF77}, //8308 #HANGUL SYLLABLE KHIEUKH WA TIKEUT + {0xB249, 0xCF79}, //8309 #HANGUL SYLLABLE KHIEUKH WA RIEULKIYEOK + {0xB24A, 0xCF7A}, //8310 #HANGUL SYLLABLE KHIEUKH WA RIEULMIEUM + {0xB24B, 0xCF7B}, //8311 #HANGUL SYLLABLE KHIEUKH WA RIEULPIEUP + {0xB24C, 0xCF7C}, //8312 #HANGUL SYLLABLE KHIEUKH WA RIEULSIOS + {0xB24D, 0xCF7D}, //8313 #HANGUL SYLLABLE KHIEUKH WA RIEULTHIEUTH + {0xB24E, 0xCF7E}, //8314 #HANGUL SYLLABLE KHIEUKH WA RIEULPHIEUPH + {0xB24F, 0xCF7F}, //8315 #HANGUL SYLLABLE KHIEUKH WA RIEULHIEUH + {0xB250, 0xCF81}, //8316 #HANGUL SYLLABLE KHIEUKH WA PIEUP + {0xB251, 0xCF82}, //8317 #HANGUL SYLLABLE KHIEUKH WA PIEUPSIOS + {0xB252, 0xCF83}, //8318 #HANGUL SYLLABLE KHIEUKH WA SIOS + {0xB253, 0xCF84}, //8319 #HANGUL SYLLABLE KHIEUKH WA SSANGSIOS + {0xB254, 0xCF86}, //8320 #HANGUL SYLLABLE KHIEUKH WA CIEUC + {0xB255, 0xCF87}, //8321 #HANGUL SYLLABLE KHIEUKH WA CHIEUCH + {0xB256, 0xCF88}, //8322 #HANGUL SYLLABLE KHIEUKH WA KHIEUKH + {0xB257, 0xCF89}, //8323 #HANGUL SYLLABLE KHIEUKH WA THIEUTH + {0xB258, 0xCF8A}, //8324 #HANGUL SYLLABLE KHIEUKH WA PHIEUPH + {0xB259, 0xCF8B}, //8325 #HANGUL SYLLABLE KHIEUKH WA HIEUH + {0xB25A, 0xCF8D}, //8326 #HANGUL SYLLABLE KHIEUKH WAE KIYEOK + {0xB261, 0xCF8E}, //8327 #HANGUL SYLLABLE KHIEUKH WAE SSANGKIYEOK + {0xB262, 0xCF8F}, //8328 #HANGUL SYLLABLE KHIEUKH WAE KIYEOKSIOS + {0xB263, 0xCF90}, //8329 #HANGUL SYLLABLE KHIEUKH WAE NIEUN + {0xB264, 0xCF91}, //8330 #HANGUL SYLLABLE KHIEUKH WAE NIEUNCIEUC + {0xB265, 0xCF92}, //8331 #HANGUL SYLLABLE KHIEUKH WAE NIEUNHIEUH + {0xB266, 0xCF93}, //8332 #HANGUL SYLLABLE KHIEUKH WAE TIKEUT + {0xB267, 0xCF94}, //8333 #HANGUL SYLLABLE KHIEUKH WAE RIEUL + {0xB268, 0xCF95}, //8334 #HANGUL SYLLABLE KHIEUKH WAE RIEULKIYEOK + {0xB269, 0xCF96}, //8335 #HANGUL SYLLABLE KHIEUKH WAE RIEULMIEUM + {0xB26A, 0xCF97}, //8336 #HANGUL SYLLABLE KHIEUKH WAE RIEULPIEUP + {0xB26B, 0xCF98}, //8337 #HANGUL SYLLABLE KHIEUKH WAE RIEULSIOS + {0xB26C, 0xCF99}, //8338 #HANGUL SYLLABLE KHIEUKH WAE RIEULTHIEUTH + {0xB26D, 0xCF9A}, //8339 #HANGUL SYLLABLE KHIEUKH WAE RIEULPHIEUPH + {0xB26E, 0xCF9B}, //8340 #HANGUL SYLLABLE KHIEUKH WAE RIEULHIEUH + {0xB26F, 0xCF9C}, //8341 #HANGUL SYLLABLE KHIEUKH WAE MIEUM + {0xB270, 0xCF9D}, //8342 #HANGUL SYLLABLE KHIEUKH WAE PIEUP + {0xB271, 0xCF9E}, //8343 #HANGUL SYLLABLE KHIEUKH WAE PIEUPSIOS + {0xB272, 0xCF9F}, //8344 #HANGUL SYLLABLE KHIEUKH WAE SIOS + {0xB273, 0xCFA0}, //8345 #HANGUL SYLLABLE KHIEUKH WAE SSANGSIOS + {0xB274, 0xCFA2}, //8346 #HANGUL SYLLABLE KHIEUKH WAE CIEUC + {0xB275, 0xCFA3}, //8347 #HANGUL SYLLABLE KHIEUKH WAE CHIEUCH + {0xB276, 0xCFA4}, //8348 #HANGUL SYLLABLE KHIEUKH WAE KHIEUKH + {0xB277, 0xCFA5}, //8349 #HANGUL SYLLABLE KHIEUKH WAE THIEUTH + {0xB278, 0xCFA6}, //8350 #HANGUL SYLLABLE KHIEUKH WAE PHIEUPH + {0xB279, 0xCFA7}, //8351 #HANGUL SYLLABLE KHIEUKH WAE HIEUH + {0xB27A, 0xCFA9}, //8352 #HANGUL SYLLABLE KHIEUKH OE KIYEOK + {0xB281, 0xCFAA}, //8353 #HANGUL SYLLABLE KHIEUKH OE SSANGKIYEOK + {0xB282, 0xCFAB}, //8354 #HANGUL SYLLABLE KHIEUKH OE KIYEOKSIOS + {0xB283, 0xCFAC}, //8355 #HANGUL SYLLABLE KHIEUKH OE NIEUN + {0xB284, 0xCFAD}, //8356 #HANGUL SYLLABLE KHIEUKH OE NIEUNCIEUC + {0xB285, 0xCFAE}, //8357 #HANGUL SYLLABLE KHIEUKH OE NIEUNHIEUH + {0xB286, 0xCFAF}, //8358 #HANGUL SYLLABLE KHIEUKH OE TIKEUT + {0xB287, 0xCFB1}, //8359 #HANGUL SYLLABLE KHIEUKH OE RIEULKIYEOK + {0xB288, 0xCFB2}, //8360 #HANGUL SYLLABLE KHIEUKH OE RIEULMIEUM + {0xB289, 0xCFB3}, //8361 #HANGUL SYLLABLE KHIEUKH OE RIEULPIEUP + {0xB28A, 0xCFB4}, //8362 #HANGUL SYLLABLE KHIEUKH OE RIEULSIOS + {0xB28B, 0xCFB5}, //8363 #HANGUL SYLLABLE KHIEUKH OE RIEULTHIEUTH + {0xB28C, 0xCFB6}, //8364 #HANGUL SYLLABLE KHIEUKH OE RIEULPHIEUPH + {0xB28D, 0xCFB7}, //8365 #HANGUL SYLLABLE KHIEUKH OE RIEULHIEUH + {0xB28E, 0xCFB8}, //8366 #HANGUL SYLLABLE KHIEUKH OE MIEUM + {0xB28F, 0xCFB9}, //8367 #HANGUL SYLLABLE KHIEUKH OE PIEUP + {0xB290, 0xCFBA}, //8368 #HANGUL SYLLABLE KHIEUKH OE PIEUPSIOS + {0xB291, 0xCFBB}, //8369 #HANGUL SYLLABLE KHIEUKH OE SIOS + {0xB292, 0xCFBC}, //8370 #HANGUL SYLLABLE KHIEUKH OE SSANGSIOS + {0xB293, 0xCFBD}, //8371 #HANGUL SYLLABLE KHIEUKH OE IEUNG + {0xB294, 0xCFBE}, //8372 #HANGUL SYLLABLE KHIEUKH OE CIEUC + {0xB295, 0xCFBF}, //8373 #HANGUL SYLLABLE KHIEUKH OE CHIEUCH + {0xB296, 0xCFC0}, //8374 #HANGUL SYLLABLE KHIEUKH OE KHIEUKH + {0xB297, 0xCFC1}, //8375 #HANGUL SYLLABLE KHIEUKH OE THIEUTH + {0xB298, 0xCFC2}, //8376 #HANGUL SYLLABLE KHIEUKH OE PHIEUPH + {0xB299, 0xCFC3}, //8377 #HANGUL SYLLABLE KHIEUKH OE HIEUH + {0xB29A, 0xCFC5}, //8378 #HANGUL SYLLABLE KHIEUKH YO KIYEOK + {0xB29B, 0xCFC6}, //8379 #HANGUL SYLLABLE KHIEUKH YO SSANGKIYEOK + {0xB29C, 0xCFC7}, //8380 #HANGUL SYLLABLE KHIEUKH YO KIYEOKSIOS + {0xB29D, 0xCFC8}, //8381 #HANGUL SYLLABLE KHIEUKH YO NIEUN + {0xB29E, 0xCFC9}, //8382 #HANGUL SYLLABLE KHIEUKH YO NIEUNCIEUC + {0xB29F, 0xCFCA}, //8383 #HANGUL SYLLABLE KHIEUKH YO NIEUNHIEUH + {0xB2A0, 0xCFCB}, //8384 #HANGUL SYLLABLE KHIEUKH YO TIKEUT + {0xB2A1, 0xAE79}, //8385 #HANGUL SYLLABLE SSANGKIYEOK AE PIEUP + {0xB2A2, 0xAE7B}, //8386 #HANGUL SYLLABLE SSANGKIYEOK AE SIOS + {0xB2A3, 0xAE7C}, //8387 #HANGUL SYLLABLE SSANGKIYEOK AE SSANGSIOS + {0xB2A4, 0xAE7D}, //8388 #HANGUL SYLLABLE SSANGKIYEOK AE IEUNG + {0xB2A5, 0xAE84}, //8389 #HANGUL SYLLABLE SSANGKIYEOK YA + {0xB2A6, 0xAE85}, //8390 #HANGUL SYLLABLE SSANGKIYEOK YA KIYEOK + {0xB2A7, 0xAE8C}, //8391 #HANGUL SYLLABLE SSANGKIYEOK YA RIEUL + {0xB2A8, 0xAEBC}, //8392 #HANGUL SYLLABLE SSANGKIYEOK EO + {0xB2A9, 0xAEBD}, //8393 #HANGUL SYLLABLE SSANGKIYEOK EO KIYEOK + {0xB2AA, 0xAEBE}, //8394 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGKIYEOK + {0xB2AB, 0xAEC0}, //8395 #HANGUL SYLLABLE SSANGKIYEOK EO NIEUN + {0xB2AC, 0xAEC4}, //8396 #HANGUL SYLLABLE SSANGKIYEOK EO RIEUL + {0xB2AD, 0xAECC}, //8397 #HANGUL SYLLABLE SSANGKIYEOK EO MIEUM + {0xB2AE, 0xAECD}, //8398 #HANGUL SYLLABLE SSANGKIYEOK EO PIEUP + {0xB2AF, 0xAECF}, //8399 #HANGUL SYLLABLE SSANGKIYEOK EO SIOS + {0xB2B0, 0xAED0}, //8400 #HANGUL SYLLABLE SSANGKIYEOK EO SSANGSIOS + {0xB2B1, 0xAED1}, //8401 #HANGUL SYLLABLE SSANGKIYEOK EO IEUNG + {0xB2B2, 0xAED8}, //8402 #HANGUL SYLLABLE SSANGKIYEOK E + {0xB2B3, 0xAED9}, //8403 #HANGUL SYLLABLE SSANGKIYEOK E KIYEOK + {0xB2B4, 0xAEDC}, //8404 #HANGUL SYLLABLE SSANGKIYEOK E NIEUN + {0xB2B5, 0xAEE8}, //8405 #HANGUL SYLLABLE SSANGKIYEOK E MIEUM + {0xB2B6, 0xAEEB}, //8406 #HANGUL SYLLABLE SSANGKIYEOK E SIOS + {0xB2B7, 0xAEED}, //8407 #HANGUL SYLLABLE SSANGKIYEOK E IEUNG + {0xB2B8, 0xAEF4}, //8408 #HANGUL SYLLABLE SSANGKIYEOK YEO + {0xB2B9, 0xAEF8}, //8409 #HANGUL SYLLABLE SSANGKIYEOK YEO NIEUN + {0xB2BA, 0xAEFC}, //8410 #HANGUL SYLLABLE SSANGKIYEOK YEO RIEUL + {0xB2BB, 0xAF07}, //8411 #HANGUL SYLLABLE SSANGKIYEOK YEO SIOS + {0xB2BC, 0xAF08}, //8412 #HANGUL SYLLABLE SSANGKIYEOK YEO SSANGSIOS + {0xB2BD, 0xAF0D}, //8413 #HANGUL SYLLABLE SSANGKIYEOK YEO THIEUTH + {0xB2BE, 0xAF10}, //8414 #HANGUL SYLLABLE SSANGKIYEOK YE + {0xB2BF, 0xAF2C}, //8415 #HANGUL SYLLABLE SSANGKIYEOK O + {0xB2C0, 0xAF2D}, //8416 #HANGUL SYLLABLE SSANGKIYEOK O KIYEOK + {0xB2C1, 0xAF30}, //8417 #HANGUL SYLLABLE SSANGKIYEOK O NIEUN + {0xB2C2, 0xAF32}, //8418 #HANGUL SYLLABLE SSANGKIYEOK O NIEUNHIEUH + {0xB2C3, 0xAF34}, //8419 #HANGUL SYLLABLE SSANGKIYEOK O RIEUL + {0xB2C4, 0xAF3C}, //8420 #HANGUL SYLLABLE SSANGKIYEOK O MIEUM + {0xB2C5, 0xAF3D}, //8421 #HANGUL SYLLABLE SSANGKIYEOK O PIEUP + {0xB2C6, 0xAF3F}, //8422 #HANGUL SYLLABLE SSANGKIYEOK O SIOS + {0xB2C7, 0xAF41}, //8423 #HANGUL SYLLABLE SSANGKIYEOK O IEUNG + {0xB2C8, 0xAF42}, //8424 #HANGUL SYLLABLE SSANGKIYEOK O CIEUC + {0xB2C9, 0xAF43}, //8425 #HANGUL SYLLABLE SSANGKIYEOK O CHIEUCH + {0xB2CA, 0xAF48}, //8426 #HANGUL SYLLABLE SSANGKIYEOK WA + {0xB2CB, 0xAF49}, //8427 #HANGUL SYLLABLE SSANGKIYEOK WA KIYEOK + {0xB2CC, 0xAF50}, //8428 #HANGUL SYLLABLE SSANGKIYEOK WA RIEUL + {0xB2CD, 0xAF5C}, //8429 #HANGUL SYLLABLE SSANGKIYEOK WA SSANGSIOS + {0xB2CE, 0xAF5D}, //8430 #HANGUL SYLLABLE SSANGKIYEOK WA IEUNG + {0xB2CF, 0xAF64}, //8431 #HANGUL SYLLABLE SSANGKIYEOK WAE + {0xB2D0, 0xAF65}, //8432 #HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOK + {0xB2D1, 0xAF79}, //8433 #HANGUL SYLLABLE SSANGKIYEOK WAE IEUNG + {0xB2D2, 0xAF80}, //8434 #HANGUL SYLLABLE SSANGKIYEOK OE + {0xB2D3, 0xAF84}, //8435 #HANGUL SYLLABLE SSANGKIYEOK OE NIEUN + {0xB2D4, 0xAF88}, //8436 #HANGUL SYLLABLE SSANGKIYEOK OE RIEUL + {0xB2D5, 0xAF90}, //8437 #HANGUL SYLLABLE SSANGKIYEOK OE MIEUM + {0xB2D6, 0xAF91}, //8438 #HANGUL SYLLABLE SSANGKIYEOK OE PIEUP + {0xB2D7, 0xAF95}, //8439 #HANGUL SYLLABLE SSANGKIYEOK OE IEUNG + {0xB2D8, 0xAF9C}, //8440 #HANGUL SYLLABLE SSANGKIYEOK YO + {0xB2D9, 0xAFB8}, //8441 #HANGUL SYLLABLE SSANGKIYEOK U + {0xB2DA, 0xAFB9}, //8442 #HANGUL SYLLABLE SSANGKIYEOK U KIYEOK + {0xB2DB, 0xAFBC}, //8443 #HANGUL SYLLABLE SSANGKIYEOK U NIEUN + {0xB2DC, 0xAFC0}, //8444 #HANGUL SYLLABLE SSANGKIYEOK U RIEUL + {0xB2DD, 0xAFC7}, //8445 #HANGUL SYLLABLE SSANGKIYEOK U RIEULHIEUH + {0xB2DE, 0xAFC8}, //8446 #HANGUL SYLLABLE SSANGKIYEOK U MIEUM + {0xB2DF, 0xAFC9}, //8447 #HANGUL SYLLABLE SSANGKIYEOK U PIEUP + {0xB2E0, 0xAFCB}, //8448 #HANGUL SYLLABLE SSANGKIYEOK U SIOS + {0xB2E1, 0xAFCD}, //8449 #HANGUL SYLLABLE SSANGKIYEOK U IEUNG + {0xB2E2, 0xAFCE}, //8450 #HANGUL SYLLABLE SSANGKIYEOK U CIEUC + {0xB2E3, 0xAFD4}, //8451 #HANGUL SYLLABLE SSANGKIYEOK WEO + {0xB2E4, 0xAFDC}, //8452 #HANGUL SYLLABLE SSANGKIYEOK WEO RIEUL + {0xB2E5, 0xAFE8}, //8453 #HANGUL SYLLABLE SSANGKIYEOK WEO SSANGSIOS + {0xB2E6, 0xAFE9}, //8454 #HANGUL SYLLABLE SSANGKIYEOK WEO IEUNG + {0xB2E7, 0xAFF0}, //8455 #HANGUL SYLLABLE SSANGKIYEOK WE + {0xB2E8, 0xAFF1}, //8456 #HANGUL SYLLABLE SSANGKIYEOK WE KIYEOK + {0xB2E9, 0xAFF4}, //8457 #HANGUL SYLLABLE SSANGKIYEOK WE NIEUN + {0xB2EA, 0xAFF8}, //8458 #HANGUL SYLLABLE SSANGKIYEOK WE RIEUL + {0xB2EB, 0xB000}, //8459 #HANGUL SYLLABLE SSANGKIYEOK WE MIEUM + {0xB2EC, 0xB001}, //8460 #HANGUL SYLLABLE SSANGKIYEOK WE PIEUP + {0xB2ED, 0xB004}, //8461 #HANGUL SYLLABLE SSANGKIYEOK WE SSANGSIOS + {0xB2EE, 0xB00C}, //8462 #HANGUL SYLLABLE SSANGKIYEOK WI + {0xB2EF, 0xB010}, //8463 #HANGUL SYLLABLE SSANGKIYEOK WI NIEUN + {0xB2F0, 0xB014}, //8464 #HANGUL SYLLABLE SSANGKIYEOK WI RIEUL + {0xB2F1, 0xB01C}, //8465 #HANGUL SYLLABLE SSANGKIYEOK WI MIEUM + {0xB2F2, 0xB01D}, //8466 #HANGUL SYLLABLE SSANGKIYEOK WI PIEUP + {0xB2F3, 0xB028}, //8467 #HANGUL SYLLABLE SSANGKIYEOK YU + {0xB2F4, 0xB044}, //8468 #HANGUL SYLLABLE SSANGKIYEOK EU + {0xB2F5, 0xB045}, //8469 #HANGUL SYLLABLE SSANGKIYEOK EU KIYEOK + {0xB2F6, 0xB048}, //8470 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUN + {0xB2F7, 0xB04A}, //8471 #HANGUL SYLLABLE SSANGKIYEOK EU NIEUNHIEUH + {0xB2F8, 0xB04C}, //8472 #HANGUL SYLLABLE SSANGKIYEOK EU RIEUL + {0xB2F9, 0xB04E}, //8473 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULMIEUM + {0xB2FA, 0xB053}, //8474 #HANGUL SYLLABLE SSANGKIYEOK EU RIEULHIEUH + {0xB2FB, 0xB054}, //8475 #HANGUL SYLLABLE SSANGKIYEOK EU MIEUM + {0xB2FC, 0xB055}, //8476 #HANGUL SYLLABLE SSANGKIYEOK EU PIEUP + {0xB2FD, 0xB057}, //8477 #HANGUL SYLLABLE SSANGKIYEOK EU SIOS + {0xB2FE, 0xB059}, //8478 #HANGUL SYLLABLE SSANGKIYEOK EU IEUNG + {0xB341, 0xCFCC}, //8479 #HANGUL SYLLABLE KHIEUKH YO RIEUL + {0xB342, 0xCFCD}, //8480 #HANGUL SYLLABLE KHIEUKH YO RIEULKIYEOK + {0xB343, 0xCFCE}, //8481 #HANGUL SYLLABLE KHIEUKH YO RIEULMIEUM + {0xB344, 0xCFCF}, //8482 #HANGUL SYLLABLE KHIEUKH YO RIEULPIEUP + {0xB345, 0xCFD0}, //8483 #HANGUL SYLLABLE KHIEUKH YO RIEULSIOS + {0xB346, 0xCFD1}, //8484 #HANGUL SYLLABLE KHIEUKH YO RIEULTHIEUTH + {0xB347, 0xCFD2}, //8485 #HANGUL SYLLABLE KHIEUKH YO RIEULPHIEUPH + {0xB348, 0xCFD3}, //8486 #HANGUL SYLLABLE KHIEUKH YO RIEULHIEUH + {0xB349, 0xCFD4}, //8487 #HANGUL SYLLABLE KHIEUKH YO MIEUM + {0xB34A, 0xCFD5}, //8488 #HANGUL SYLLABLE KHIEUKH YO PIEUP + {0xB34B, 0xCFD6}, //8489 #HANGUL SYLLABLE KHIEUKH YO PIEUPSIOS + {0xB34C, 0xCFD7}, //8490 #HANGUL SYLLABLE KHIEUKH YO SIOS + {0xB34D, 0xCFD8}, //8491 #HANGUL SYLLABLE KHIEUKH YO SSANGSIOS + {0xB34E, 0xCFD9}, //8492 #HANGUL SYLLABLE KHIEUKH YO IEUNG + {0xB34F, 0xCFDA}, //8493 #HANGUL SYLLABLE KHIEUKH YO CIEUC + {0xB350, 0xCFDB}, //8494 #HANGUL SYLLABLE KHIEUKH YO CHIEUCH + {0xB351, 0xCFDC}, //8495 #HANGUL SYLLABLE KHIEUKH YO KHIEUKH + {0xB352, 0xCFDD}, //8496 #HANGUL SYLLABLE KHIEUKH YO THIEUTH + {0xB353, 0xCFDE}, //8497 #HANGUL SYLLABLE KHIEUKH YO PHIEUPH + {0xB354, 0xCFDF}, //8498 #HANGUL SYLLABLE KHIEUKH YO HIEUH + {0xB355, 0xCFE2}, //8499 #HANGUL SYLLABLE KHIEUKH U SSANGKIYEOK + {0xB356, 0xCFE3}, //8500 #HANGUL SYLLABLE KHIEUKH U KIYEOKSIOS + {0xB357, 0xCFE5}, //8501 #HANGUL SYLLABLE KHIEUKH U NIEUNCIEUC + {0xB358, 0xCFE6}, //8502 #HANGUL SYLLABLE KHIEUKH U NIEUNHIEUH + {0xB359, 0xCFE7}, //8503 #HANGUL SYLLABLE KHIEUKH U TIKEUT + {0xB35A, 0xCFE9}, //8504 #HANGUL SYLLABLE KHIEUKH U RIEULKIYEOK + {0xB361, 0xCFEA}, //8505 #HANGUL SYLLABLE KHIEUKH U RIEULMIEUM + {0xB362, 0xCFEB}, //8506 #HANGUL SYLLABLE KHIEUKH U RIEULPIEUP + {0xB363, 0xCFEC}, //8507 #HANGUL SYLLABLE KHIEUKH U RIEULSIOS + {0xB364, 0xCFED}, //8508 #HANGUL SYLLABLE KHIEUKH U RIEULTHIEUTH + {0xB365, 0xCFEE}, //8509 #HANGUL SYLLABLE KHIEUKH U RIEULPHIEUPH + {0xB366, 0xCFEF}, //8510 #HANGUL SYLLABLE KHIEUKH U RIEULHIEUH + {0xB367, 0xCFF2}, //8511 #HANGUL SYLLABLE KHIEUKH U PIEUPSIOS + {0xB368, 0xCFF4}, //8512 #HANGUL SYLLABLE KHIEUKH U SSANGSIOS + {0xB369, 0xCFF6}, //8513 #HANGUL SYLLABLE KHIEUKH U CIEUC + {0xB36A, 0xCFF7}, //8514 #HANGUL SYLLABLE KHIEUKH U CHIEUCH + {0xB36B, 0xCFF8}, //8515 #HANGUL SYLLABLE KHIEUKH U KHIEUKH + {0xB36C, 0xCFF9}, //8516 #HANGUL SYLLABLE KHIEUKH U THIEUTH + {0xB36D, 0xCFFA}, //8517 #HANGUL SYLLABLE KHIEUKH U PHIEUPH + {0xB36E, 0xCFFB}, //8518 #HANGUL SYLLABLE KHIEUKH U HIEUH + {0xB36F, 0xCFFD}, //8519 #HANGUL SYLLABLE KHIEUKH WEO KIYEOK + {0xB370, 0xCFFE}, //8520 #HANGUL SYLLABLE KHIEUKH WEO SSANGKIYEOK + {0xB371, 0xCFFF}, //8521 #HANGUL SYLLABLE KHIEUKH WEO KIYEOKSIOS + {0xB372, 0xD001}, //8522 #HANGUL SYLLABLE KHIEUKH WEO NIEUNCIEUC + {0xB373, 0xD002}, //8523 #HANGUL SYLLABLE KHIEUKH WEO NIEUNHIEUH + {0xB374, 0xD003}, //8524 #HANGUL SYLLABLE KHIEUKH WEO TIKEUT + {0xB375, 0xD005}, //8525 #HANGUL SYLLABLE KHIEUKH WEO RIEULKIYEOK + {0xB376, 0xD006}, //8526 #HANGUL SYLLABLE KHIEUKH WEO RIEULMIEUM + {0xB377, 0xD007}, //8527 #HANGUL SYLLABLE KHIEUKH WEO RIEULPIEUP + {0xB378, 0xD008}, //8528 #HANGUL SYLLABLE KHIEUKH WEO RIEULSIOS + {0xB379, 0xD009}, //8529 #HANGUL SYLLABLE KHIEUKH WEO RIEULTHIEUTH + {0xB37A, 0xD00A}, //8530 #HANGUL SYLLABLE KHIEUKH WEO RIEULPHIEUPH + {0xB381, 0xD00B}, //8531 #HANGUL SYLLABLE KHIEUKH WEO RIEULHIEUH + {0xB382, 0xD00C}, //8532 #HANGUL SYLLABLE KHIEUKH WEO MIEUM + {0xB383, 0xD00D}, //8533 #HANGUL SYLLABLE KHIEUKH WEO PIEUP + {0xB384, 0xD00E}, //8534 #HANGUL SYLLABLE KHIEUKH WEO PIEUPSIOS + {0xB385, 0xD00F}, //8535 #HANGUL SYLLABLE KHIEUKH WEO SIOS + {0xB386, 0xD010}, //8536 #HANGUL SYLLABLE KHIEUKH WEO SSANGSIOS + {0xB387, 0xD012}, //8537 #HANGUL SYLLABLE KHIEUKH WEO CIEUC + {0xB388, 0xD013}, //8538 #HANGUL SYLLABLE KHIEUKH WEO CHIEUCH + {0xB389, 0xD014}, //8539 #HANGUL SYLLABLE KHIEUKH WEO KHIEUKH + {0xB38A, 0xD015}, //8540 #HANGUL SYLLABLE KHIEUKH WEO THIEUTH + {0xB38B, 0xD016}, //8541 #HANGUL SYLLABLE KHIEUKH WEO PHIEUPH + {0xB38C, 0xD017}, //8542 #HANGUL SYLLABLE KHIEUKH WEO HIEUH + {0xB38D, 0xD019}, //8543 #HANGUL SYLLABLE KHIEUKH WE KIYEOK + {0xB38E, 0xD01A}, //8544 #HANGUL SYLLABLE KHIEUKH WE SSANGKIYEOK + {0xB38F, 0xD01B}, //8545 #HANGUL SYLLABLE KHIEUKH WE KIYEOKSIOS + {0xB390, 0xD01C}, //8546 #HANGUL SYLLABLE KHIEUKH WE NIEUN + {0xB391, 0xD01D}, //8547 #HANGUL SYLLABLE KHIEUKH WE NIEUNCIEUC + {0xB392, 0xD01E}, //8548 #HANGUL SYLLABLE KHIEUKH WE NIEUNHIEUH + {0xB393, 0xD01F}, //8549 #HANGUL SYLLABLE KHIEUKH WE TIKEUT + {0xB394, 0xD020}, //8550 #HANGUL SYLLABLE KHIEUKH WE RIEUL + {0xB395, 0xD021}, //8551 #HANGUL SYLLABLE KHIEUKH WE RIEULKIYEOK + {0xB396, 0xD022}, //8552 #HANGUL SYLLABLE KHIEUKH WE RIEULMIEUM + {0xB397, 0xD023}, //8553 #HANGUL SYLLABLE KHIEUKH WE RIEULPIEUP + {0xB398, 0xD024}, //8554 #HANGUL SYLLABLE KHIEUKH WE RIEULSIOS + {0xB399, 0xD025}, //8555 #HANGUL SYLLABLE KHIEUKH WE RIEULTHIEUTH + {0xB39A, 0xD026}, //8556 #HANGUL SYLLABLE KHIEUKH WE RIEULPHIEUPH + {0xB39B, 0xD027}, //8557 #HANGUL SYLLABLE KHIEUKH WE RIEULHIEUH + {0xB39C, 0xD028}, //8558 #HANGUL SYLLABLE KHIEUKH WE MIEUM + {0xB39D, 0xD029}, //8559 #HANGUL SYLLABLE KHIEUKH WE PIEUP + {0xB39E, 0xD02A}, //8560 #HANGUL SYLLABLE KHIEUKH WE PIEUPSIOS + {0xB39F, 0xD02B}, //8561 #HANGUL SYLLABLE KHIEUKH WE SIOS + {0xB3A0, 0xD02C}, //8562 #HANGUL SYLLABLE KHIEUKH WE SSANGSIOS + {0xB3A1, 0xB05D}, //8563 #HANGUL SYLLABLE SSANGKIYEOK EU THIEUTH + {0xB3A2, 0xB07C}, //8564 #HANGUL SYLLABLE SSANGKIYEOK I + {0xB3A3, 0xB07D}, //8565 #HANGUL SYLLABLE SSANGKIYEOK I KIYEOK + {0xB3A4, 0xB080}, //8566 #HANGUL SYLLABLE SSANGKIYEOK I NIEUN + {0xB3A5, 0xB084}, //8567 #HANGUL SYLLABLE SSANGKIYEOK I RIEUL + {0xB3A6, 0xB08C}, //8568 #HANGUL SYLLABLE SSANGKIYEOK I MIEUM + {0xB3A7, 0xB08D}, //8569 #HANGUL SYLLABLE SSANGKIYEOK I PIEUP + {0xB3A8, 0xB08F}, //8570 #HANGUL SYLLABLE SSANGKIYEOK I SIOS + {0xB3A9, 0xB091}, //8571 #HANGUL SYLLABLE SSANGKIYEOK I IEUNG + {0xB3AA, 0xB098}, //8572 #HANGUL SYLLABLE NIEUN A + {0xB3AB, 0xB099}, //8573 #HANGUL SYLLABLE NIEUN A KIYEOK + {0xB3AC, 0xB09A}, //8574 #HANGUL SYLLABLE NIEUN A SSANGKIYEOK + {0xB3AD, 0xB09C}, //8575 #HANGUL SYLLABLE NIEUN A NIEUN + {0xB3AE, 0xB09F}, //8576 #HANGUL SYLLABLE NIEUN A TIKEUT + {0xB3AF, 0xB0A0}, //8577 #HANGUL SYLLABLE NIEUN A RIEUL + {0xB3B0, 0xB0A1}, //8578 #HANGUL SYLLABLE NIEUN A RIEULKIYEOK + {0xB3B1, 0xB0A2}, //8579 #HANGUL SYLLABLE NIEUN A RIEULMIEUM + {0xB3B2, 0xB0A8}, //8580 #HANGUL SYLLABLE NIEUN A MIEUM + {0xB3B3, 0xB0A9}, //8581 #HANGUL SYLLABLE NIEUN A PIEUP + {0xB3B4, 0xB0AB}, //8582 #HANGUL SYLLABLE NIEUN A SIOS + {0xB3B5, 0xB0AC}, //8583 #HANGUL SYLLABLE NIEUN A SSANGSIOS + {0xB3B6, 0xB0AD}, //8584 #HANGUL SYLLABLE NIEUN A IEUNG + {0xB3B7, 0xB0AE}, //8585 #HANGUL SYLLABLE NIEUN A CIEUC + {0xB3B8, 0xB0AF}, //8586 #HANGUL SYLLABLE NIEUN A CHIEUCH + {0xB3B9, 0xB0B1}, //8587 #HANGUL SYLLABLE NIEUN A THIEUTH + {0xB3BA, 0xB0B3}, //8588 #HANGUL SYLLABLE NIEUN A HIEUH + {0xB3BB, 0xB0B4}, //8589 #HANGUL SYLLABLE NIEUN AE + {0xB3BC, 0xB0B5}, //8590 #HANGUL SYLLABLE NIEUN AE KIYEOK + {0xB3BD, 0xB0B8}, //8591 #HANGUL SYLLABLE NIEUN AE NIEUN + {0xB3BE, 0xB0BC}, //8592 #HANGUL SYLLABLE NIEUN AE RIEUL + {0xB3BF, 0xB0C4}, //8593 #HANGUL SYLLABLE NIEUN AE MIEUM + {0xB3C0, 0xB0C5}, //8594 #HANGUL SYLLABLE NIEUN AE PIEUP + {0xB3C1, 0xB0C7}, //8595 #HANGUL SYLLABLE NIEUN AE SIOS + {0xB3C2, 0xB0C8}, //8596 #HANGUL SYLLABLE NIEUN AE SSANGSIOS + {0xB3C3, 0xB0C9}, //8597 #HANGUL SYLLABLE NIEUN AE IEUNG + {0xB3C4, 0xB0D0}, //8598 #HANGUL SYLLABLE NIEUN YA + {0xB3C5, 0xB0D1}, //8599 #HANGUL SYLLABLE NIEUN YA KIYEOK + {0xB3C6, 0xB0D4}, //8600 #HANGUL SYLLABLE NIEUN YA NIEUN + {0xB3C7, 0xB0D8}, //8601 #HANGUL SYLLABLE NIEUN YA RIEUL + {0xB3C8, 0xB0E0}, //8602 #HANGUL SYLLABLE NIEUN YA MIEUM + {0xB3C9, 0xB0E5}, //8603 #HANGUL SYLLABLE NIEUN YA IEUNG + {0xB3CA, 0xB108}, //8604 #HANGUL SYLLABLE NIEUN EO + {0xB3CB, 0xB109}, //8605 #HANGUL SYLLABLE NIEUN EO KIYEOK + {0xB3CC, 0xB10B}, //8606 #HANGUL SYLLABLE NIEUN EO KIYEOKSIOS + {0xB3CD, 0xB10C}, //8607 #HANGUL SYLLABLE NIEUN EO NIEUN + {0xB3CE, 0xB110}, //8608 #HANGUL SYLLABLE NIEUN EO RIEUL + {0xB3CF, 0xB112}, //8609 #HANGUL SYLLABLE NIEUN EO RIEULMIEUM + {0xB3D0, 0xB113}, //8610 #HANGUL SYLLABLE NIEUN EO RIEULPIEUP + {0xB3D1, 0xB118}, //8611 #HANGUL SYLLABLE NIEUN EO MIEUM + {0xB3D2, 0xB119}, //8612 #HANGUL SYLLABLE NIEUN EO PIEUP + {0xB3D3, 0xB11B}, //8613 #HANGUL SYLLABLE NIEUN EO SIOS + {0xB3D4, 0xB11C}, //8614 #HANGUL SYLLABLE NIEUN EO SSANGSIOS + {0xB3D5, 0xB11D}, //8615 #HANGUL SYLLABLE NIEUN EO IEUNG + {0xB3D6, 0xB123}, //8616 #HANGUL SYLLABLE NIEUN EO HIEUH + {0xB3D7, 0xB124}, //8617 #HANGUL SYLLABLE NIEUN E + {0xB3D8, 0xB125}, //8618 #HANGUL SYLLABLE NIEUN E KIYEOK + {0xB3D9, 0xB128}, //8619 #HANGUL SYLLABLE NIEUN E NIEUN + {0xB3DA, 0xB12C}, //8620 #HANGUL SYLLABLE NIEUN E RIEUL + {0xB3DB, 0xB134}, //8621 #HANGUL SYLLABLE NIEUN E MIEUM + {0xB3DC, 0xB135}, //8622 #HANGUL SYLLABLE NIEUN E PIEUP + {0xB3DD, 0xB137}, //8623 #HANGUL SYLLABLE NIEUN E SIOS + {0xB3DE, 0xB138}, //8624 #HANGUL SYLLABLE NIEUN E SSANGSIOS + {0xB3DF, 0xB139}, //8625 #HANGUL SYLLABLE NIEUN E IEUNG + {0xB3E0, 0xB140}, //8626 #HANGUL SYLLABLE NIEUN YEO + {0xB3E1, 0xB141}, //8627 #HANGUL SYLLABLE NIEUN YEO KIYEOK + {0xB3E2, 0xB144}, //8628 #HANGUL SYLLABLE NIEUN YEO NIEUN + {0xB3E3, 0xB148}, //8629 #HANGUL SYLLABLE NIEUN YEO RIEUL + {0xB3E4, 0xB150}, //8630 #HANGUL SYLLABLE NIEUN YEO MIEUM + {0xB3E5, 0xB151}, //8631 #HANGUL SYLLABLE NIEUN YEO PIEUP + {0xB3E6, 0xB154}, //8632 #HANGUL SYLLABLE NIEUN YEO SSANGSIOS + {0xB3E7, 0xB155}, //8633 #HANGUL SYLLABLE NIEUN YEO IEUNG + {0xB3E8, 0xB158}, //8634 #HANGUL SYLLABLE NIEUN YEO KHIEUKH + {0xB3E9, 0xB15C}, //8635 #HANGUL SYLLABLE NIEUN YE + {0xB3EA, 0xB160}, //8636 #HANGUL SYLLABLE NIEUN YE NIEUN + {0xB3EB, 0xB178}, //8637 #HANGUL SYLLABLE NIEUN O + {0xB3EC, 0xB179}, //8638 #HANGUL SYLLABLE NIEUN O KIYEOK + {0xB3ED, 0xB17C}, //8639 #HANGUL SYLLABLE NIEUN O NIEUN + {0xB3EE, 0xB180}, //8640 #HANGUL SYLLABLE NIEUN O RIEUL + {0xB3EF, 0xB182}, //8641 #HANGUL SYLLABLE NIEUN O RIEULMIEUM + {0xB3F0, 0xB188}, //8642 #HANGUL SYLLABLE NIEUN O MIEUM + {0xB3F1, 0xB189}, //8643 #HANGUL SYLLABLE NIEUN O PIEUP + {0xB3F2, 0xB18B}, //8644 #HANGUL SYLLABLE NIEUN O SIOS + {0xB3F3, 0xB18D}, //8645 #HANGUL SYLLABLE NIEUN O IEUNG + {0xB3F4, 0xB192}, //8646 #HANGUL SYLLABLE NIEUN O PHIEUPH + {0xB3F5, 0xB193}, //8647 #HANGUL SYLLABLE NIEUN O HIEUH + {0xB3F6, 0xB194}, //8648 #HANGUL SYLLABLE NIEUN WA + {0xB3F7, 0xB198}, //8649 #HANGUL SYLLABLE NIEUN WA NIEUN + {0xB3F8, 0xB19C}, //8650 #HANGUL SYLLABLE NIEUN WA RIEUL + {0xB3F9, 0xB1A8}, //8651 #HANGUL SYLLABLE NIEUN WA SSANGSIOS + {0xB3FA, 0xB1CC}, //8652 #HANGUL SYLLABLE NIEUN OE + {0xB3FB, 0xB1D0}, //8653 #HANGUL SYLLABLE NIEUN OE NIEUN + {0xB3FC, 0xB1D4}, //8654 #HANGUL SYLLABLE NIEUN OE RIEUL + {0xB3FD, 0xB1DC}, //8655 #HANGUL SYLLABLE NIEUN OE MIEUM + {0xB3FE, 0xB1DD}, //8656 #HANGUL SYLLABLE NIEUN OE PIEUP + {0xB441, 0xD02E}, //8657 #HANGUL SYLLABLE KHIEUKH WE CIEUC + {0xB442, 0xD02F}, //8658 #HANGUL SYLLABLE KHIEUKH WE CHIEUCH + {0xB443, 0xD030}, //8659 #HANGUL SYLLABLE KHIEUKH WE KHIEUKH + {0xB444, 0xD031}, //8660 #HANGUL SYLLABLE KHIEUKH WE THIEUTH + {0xB445, 0xD032}, //8661 #HANGUL SYLLABLE KHIEUKH WE PHIEUPH + {0xB446, 0xD033}, //8662 #HANGUL SYLLABLE KHIEUKH WE HIEUH + {0xB447, 0xD036}, //8663 #HANGUL SYLLABLE KHIEUKH WI SSANGKIYEOK + {0xB448, 0xD037}, //8664 #HANGUL SYLLABLE KHIEUKH WI KIYEOKSIOS + {0xB449, 0xD039}, //8665 #HANGUL SYLLABLE KHIEUKH WI NIEUNCIEUC + {0xB44A, 0xD03A}, //8666 #HANGUL SYLLABLE KHIEUKH WI NIEUNHIEUH + {0xB44B, 0xD03B}, //8667 #HANGUL SYLLABLE KHIEUKH WI TIKEUT + {0xB44C, 0xD03D}, //8668 #HANGUL SYLLABLE KHIEUKH WI RIEULKIYEOK + {0xB44D, 0xD03E}, //8669 #HANGUL SYLLABLE KHIEUKH WI RIEULMIEUM + {0xB44E, 0xD03F}, //8670 #HANGUL SYLLABLE KHIEUKH WI RIEULPIEUP + {0xB44F, 0xD040}, //8671 #HANGUL SYLLABLE KHIEUKH WI RIEULSIOS + {0xB450, 0xD041}, //8672 #HANGUL SYLLABLE KHIEUKH WI RIEULTHIEUTH + {0xB451, 0xD042}, //8673 #HANGUL SYLLABLE KHIEUKH WI RIEULPHIEUPH + {0xB452, 0xD043}, //8674 #HANGUL SYLLABLE KHIEUKH WI RIEULHIEUH + {0xB453, 0xD046}, //8675 #HANGUL SYLLABLE KHIEUKH WI PIEUPSIOS + {0xB454, 0xD048}, //8676 #HANGUL SYLLABLE KHIEUKH WI SSANGSIOS + {0xB455, 0xD04A}, //8677 #HANGUL SYLLABLE KHIEUKH WI CIEUC + {0xB456, 0xD04B}, //8678 #HANGUL SYLLABLE KHIEUKH WI CHIEUCH + {0xB457, 0xD04C}, //8679 #HANGUL SYLLABLE KHIEUKH WI KHIEUKH + {0xB458, 0xD04D}, //8680 #HANGUL SYLLABLE KHIEUKH WI THIEUTH + {0xB459, 0xD04E}, //8681 #HANGUL SYLLABLE KHIEUKH WI PHIEUPH + {0xB45A, 0xD04F}, //8682 #HANGUL SYLLABLE KHIEUKH WI HIEUH + {0xB461, 0xD051}, //8683 #HANGUL SYLLABLE KHIEUKH YU KIYEOK + {0xB462, 0xD052}, //8684 #HANGUL SYLLABLE KHIEUKH YU SSANGKIYEOK + {0xB463, 0xD053}, //8685 #HANGUL SYLLABLE KHIEUKH YU KIYEOKSIOS + {0xB464, 0xD055}, //8686 #HANGUL SYLLABLE KHIEUKH YU NIEUNCIEUC + {0xB465, 0xD056}, //8687 #HANGUL SYLLABLE KHIEUKH YU NIEUNHIEUH + {0xB466, 0xD057}, //8688 #HANGUL SYLLABLE KHIEUKH YU TIKEUT + {0xB467, 0xD059}, //8689 #HANGUL SYLLABLE KHIEUKH YU RIEULKIYEOK + {0xB468, 0xD05A}, //8690 #HANGUL SYLLABLE KHIEUKH YU RIEULMIEUM + {0xB469, 0xD05B}, //8691 #HANGUL SYLLABLE KHIEUKH YU RIEULPIEUP + {0xB46A, 0xD05C}, //8692 #HANGUL SYLLABLE KHIEUKH YU RIEULSIOS + {0xB46B, 0xD05D}, //8693 #HANGUL SYLLABLE KHIEUKH YU RIEULTHIEUTH + {0xB46C, 0xD05E}, //8694 #HANGUL SYLLABLE KHIEUKH YU RIEULPHIEUPH + {0xB46D, 0xD05F}, //8695 #HANGUL SYLLABLE KHIEUKH YU RIEULHIEUH + {0xB46E, 0xD061}, //8696 #HANGUL SYLLABLE KHIEUKH YU PIEUP + {0xB46F, 0xD062}, //8697 #HANGUL SYLLABLE KHIEUKH YU PIEUPSIOS + {0xB470, 0xD063}, //8698 #HANGUL SYLLABLE KHIEUKH YU SIOS + {0xB471, 0xD064}, //8699 #HANGUL SYLLABLE KHIEUKH YU SSANGSIOS + {0xB472, 0xD065}, //8700 #HANGUL SYLLABLE KHIEUKH YU IEUNG + {0xB473, 0xD066}, //8701 #HANGUL SYLLABLE KHIEUKH YU CIEUC + {0xB474, 0xD067}, //8702 #HANGUL SYLLABLE KHIEUKH YU CHIEUCH + {0xB475, 0xD068}, //8703 #HANGUL SYLLABLE KHIEUKH YU KHIEUKH + {0xB476, 0xD069}, //8704 #HANGUL SYLLABLE KHIEUKH YU THIEUTH + {0xB477, 0xD06A}, //8705 #HANGUL SYLLABLE KHIEUKH YU PHIEUPH + {0xB478, 0xD06B}, //8706 #HANGUL SYLLABLE KHIEUKH YU HIEUH + {0xB479, 0xD06E}, //8707 #HANGUL SYLLABLE KHIEUKH EU SSANGKIYEOK + {0xB47A, 0xD06F}, //8708 #HANGUL SYLLABLE KHIEUKH EU KIYEOKSIOS + {0xB481, 0xD071}, //8709 #HANGUL SYLLABLE KHIEUKH EU NIEUNCIEUC + {0xB482, 0xD072}, //8710 #HANGUL SYLLABLE KHIEUKH EU NIEUNHIEUH + {0xB483, 0xD073}, //8711 #HANGUL SYLLABLE KHIEUKH EU TIKEUT + {0xB484, 0xD075}, //8712 #HANGUL SYLLABLE KHIEUKH EU RIEULKIYEOK + {0xB485, 0xD076}, //8713 #HANGUL SYLLABLE KHIEUKH EU RIEULMIEUM + {0xB486, 0xD077}, //8714 #HANGUL SYLLABLE KHIEUKH EU RIEULPIEUP + {0xB487, 0xD078}, //8715 #HANGUL SYLLABLE KHIEUKH EU RIEULSIOS + {0xB488, 0xD079}, //8716 #HANGUL SYLLABLE KHIEUKH EU RIEULTHIEUTH + {0xB489, 0xD07A}, //8717 #HANGUL SYLLABLE KHIEUKH EU RIEULPHIEUPH + {0xB48A, 0xD07B}, //8718 #HANGUL SYLLABLE KHIEUKH EU RIEULHIEUH + {0xB48B, 0xD07E}, //8719 #HANGUL SYLLABLE KHIEUKH EU PIEUPSIOS + {0xB48C, 0xD07F}, //8720 #HANGUL SYLLABLE KHIEUKH EU SIOS + {0xB48D, 0xD080}, //8721 #HANGUL SYLLABLE KHIEUKH EU SSANGSIOS + {0xB48E, 0xD082}, //8722 #HANGUL SYLLABLE KHIEUKH EU CIEUC + {0xB48F, 0xD083}, //8723 #HANGUL SYLLABLE KHIEUKH EU CHIEUCH + {0xB490, 0xD084}, //8724 #HANGUL SYLLABLE KHIEUKH EU KHIEUKH + {0xB491, 0xD085}, //8725 #HANGUL SYLLABLE KHIEUKH EU THIEUTH + {0xB492, 0xD086}, //8726 #HANGUL SYLLABLE KHIEUKH EU PHIEUPH + {0xB493, 0xD087}, //8727 #HANGUL SYLLABLE KHIEUKH EU HIEUH + {0xB494, 0xD088}, //8728 #HANGUL SYLLABLE KHIEUKH YI + {0xB495, 0xD089}, //8729 #HANGUL SYLLABLE KHIEUKH YI KIYEOK + {0xB496, 0xD08A}, //8730 #HANGUL SYLLABLE KHIEUKH YI SSANGKIYEOK + {0xB497, 0xD08B}, //8731 #HANGUL SYLLABLE KHIEUKH YI KIYEOKSIOS + {0xB498, 0xD08C}, //8732 #HANGUL SYLLABLE KHIEUKH YI NIEUN + {0xB499, 0xD08D}, //8733 #HANGUL SYLLABLE KHIEUKH YI NIEUNCIEUC + {0xB49A, 0xD08E}, //8734 #HANGUL SYLLABLE KHIEUKH YI NIEUNHIEUH + {0xB49B, 0xD08F}, //8735 #HANGUL SYLLABLE KHIEUKH YI TIKEUT + {0xB49C, 0xD090}, //8736 #HANGUL SYLLABLE KHIEUKH YI RIEUL + {0xB49D, 0xD091}, //8737 #HANGUL SYLLABLE KHIEUKH YI RIEULKIYEOK + {0xB49E, 0xD092}, //8738 #HANGUL SYLLABLE KHIEUKH YI RIEULMIEUM + {0xB49F, 0xD093}, //8739 #HANGUL SYLLABLE KHIEUKH YI RIEULPIEUP + {0xB4A0, 0xD094}, //8740 #HANGUL SYLLABLE KHIEUKH YI RIEULSIOS + {0xB4A1, 0xB1DF}, //8741 #HANGUL SYLLABLE NIEUN OE SIOS + {0xB4A2, 0xB1E8}, //8742 #HANGUL SYLLABLE NIEUN YO + {0xB4A3, 0xB1E9}, //8743 #HANGUL SYLLABLE NIEUN YO KIYEOK + {0xB4A4, 0xB1EC}, //8744 #HANGUL SYLLABLE NIEUN YO NIEUN + {0xB4A5, 0xB1F0}, //8745 #HANGUL SYLLABLE NIEUN YO RIEUL + {0xB4A6, 0xB1F9}, //8746 #HANGUL SYLLABLE NIEUN YO PIEUP + {0xB4A7, 0xB1FB}, //8747 #HANGUL SYLLABLE NIEUN YO SIOS + {0xB4A8, 0xB1FD}, //8748 #HANGUL SYLLABLE NIEUN YO IEUNG + {0xB4A9, 0xB204}, //8749 #HANGUL SYLLABLE NIEUN U + {0xB4AA, 0xB205}, //8750 #HANGUL SYLLABLE NIEUN U KIYEOK + {0xB4AB, 0xB208}, //8751 #HANGUL SYLLABLE NIEUN U NIEUN + {0xB4AC, 0xB20B}, //8752 #HANGUL SYLLABLE NIEUN U TIKEUT + {0xB4AD, 0xB20C}, //8753 #HANGUL SYLLABLE NIEUN U RIEUL + {0xB4AE, 0xB214}, //8754 #HANGUL SYLLABLE NIEUN U MIEUM + {0xB4AF, 0xB215}, //8755 #HANGUL SYLLABLE NIEUN U PIEUP + {0xB4B0, 0xB217}, //8756 #HANGUL SYLLABLE NIEUN U SIOS + {0xB4B1, 0xB219}, //8757 #HANGUL SYLLABLE NIEUN U IEUNG + {0xB4B2, 0xB220}, //8758 #HANGUL SYLLABLE NIEUN WEO + {0xB4B3, 0xB234}, //8759 #HANGUL SYLLABLE NIEUN WEO SSANGSIOS + {0xB4B4, 0xB23C}, //8760 #HANGUL SYLLABLE NIEUN WE + {0xB4B5, 0xB258}, //8761 #HANGUL SYLLABLE NIEUN WI + {0xB4B6, 0xB25C}, //8762 #HANGUL SYLLABLE NIEUN WI NIEUN + {0xB4B7, 0xB260}, //8763 #HANGUL SYLLABLE NIEUN WI RIEUL + {0xB4B8, 0xB268}, //8764 #HANGUL SYLLABLE NIEUN WI MIEUM + {0xB4B9, 0xB269}, //8765 #HANGUL SYLLABLE NIEUN WI PIEUP + {0xB4BA, 0xB274}, //8766 #HANGUL SYLLABLE NIEUN YU + {0xB4BB, 0xB275}, //8767 #HANGUL SYLLABLE NIEUN YU KIYEOK + {0xB4BC, 0xB27C}, //8768 #HANGUL SYLLABLE NIEUN YU RIEUL + {0xB4BD, 0xB284}, //8769 #HANGUL SYLLABLE NIEUN YU MIEUM + {0xB4BE, 0xB285}, //8770 #HANGUL SYLLABLE NIEUN YU PIEUP + {0xB4BF, 0xB289}, //8771 #HANGUL SYLLABLE NIEUN YU IEUNG + {0xB4C0, 0xB290}, //8772 #HANGUL SYLLABLE NIEUN EU + {0xB4C1, 0xB291}, //8773 #HANGUL SYLLABLE NIEUN EU KIYEOK + {0xB4C2, 0xB294}, //8774 #HANGUL SYLLABLE NIEUN EU NIEUN + {0xB4C3, 0xB298}, //8775 #HANGUL SYLLABLE NIEUN EU RIEUL + {0xB4C4, 0xB299}, //8776 #HANGUL SYLLABLE NIEUN EU RIEULKIYEOK + {0xB4C5, 0xB29A}, //8777 #HANGUL SYLLABLE NIEUN EU RIEULMIEUM + {0xB4C6, 0xB2A0}, //8778 #HANGUL SYLLABLE NIEUN EU MIEUM + {0xB4C7, 0xB2A1}, //8779 #HANGUL SYLLABLE NIEUN EU PIEUP + {0xB4C8, 0xB2A3}, //8780 #HANGUL SYLLABLE NIEUN EU SIOS + {0xB4C9, 0xB2A5}, //8781 #HANGUL SYLLABLE NIEUN EU IEUNG + {0xB4CA, 0xB2A6}, //8782 #HANGUL SYLLABLE NIEUN EU CIEUC + {0xB4CB, 0xB2AA}, //8783 #HANGUL SYLLABLE NIEUN EU PHIEUPH + {0xB4CC, 0xB2AC}, //8784 #HANGUL SYLLABLE NIEUN YI + {0xB4CD, 0xB2B0}, //8785 #HANGUL SYLLABLE NIEUN YI NIEUN + {0xB4CE, 0xB2B4}, //8786 #HANGUL SYLLABLE NIEUN YI RIEUL + {0xB4CF, 0xB2C8}, //8787 #HANGUL SYLLABLE NIEUN I + {0xB4D0, 0xB2C9}, //8788 #HANGUL SYLLABLE NIEUN I KIYEOK + {0xB4D1, 0xB2CC}, //8789 #HANGUL SYLLABLE NIEUN I NIEUN + {0xB4D2, 0xB2D0}, //8790 #HANGUL SYLLABLE NIEUN I RIEUL + {0xB4D3, 0xB2D2}, //8791 #HANGUL SYLLABLE NIEUN I RIEULMIEUM + {0xB4D4, 0xB2D8}, //8792 #HANGUL SYLLABLE NIEUN I MIEUM + {0xB4D5, 0xB2D9}, //8793 #HANGUL SYLLABLE NIEUN I PIEUP + {0xB4D6, 0xB2DB}, //8794 #HANGUL SYLLABLE NIEUN I SIOS + {0xB4D7, 0xB2DD}, //8795 #HANGUL SYLLABLE NIEUN I IEUNG + {0xB4D8, 0xB2E2}, //8796 #HANGUL SYLLABLE NIEUN I PHIEUPH + {0xB4D9, 0xB2E4}, //8797 #HANGUL SYLLABLE TIKEUT A + {0xB4DA, 0xB2E5}, //8798 #HANGUL SYLLABLE TIKEUT A KIYEOK + {0xB4DB, 0xB2E6}, //8799 #HANGUL SYLLABLE TIKEUT A SSANGKIYEOK + {0xB4DC, 0xB2E8}, //8800 #HANGUL SYLLABLE TIKEUT A NIEUN + {0xB4DD, 0xB2EB}, //8801 #HANGUL SYLLABLE TIKEUT A TIKEUT + {0xB4DE, 0xB2EC}, //8802 #HANGUL SYLLABLE TIKEUT A RIEUL + {0xB4DF, 0xB2ED}, //8803 #HANGUL SYLLABLE TIKEUT A RIEULKIYEOK + {0xB4E0, 0xB2EE}, //8804 #HANGUL SYLLABLE TIKEUT A RIEULMIEUM + {0xB4E1, 0xB2EF}, //8805 #HANGUL SYLLABLE TIKEUT A RIEULPIEUP + {0xB4E2, 0xB2F3}, //8806 #HANGUL SYLLABLE TIKEUT A RIEULHIEUH + {0xB4E3, 0xB2F4}, //8807 #HANGUL SYLLABLE TIKEUT A MIEUM + {0xB4E4, 0xB2F5}, //8808 #HANGUL SYLLABLE TIKEUT A PIEUP + {0xB4E5, 0xB2F7}, //8809 #HANGUL SYLLABLE TIKEUT A SIOS + {0xB4E6, 0xB2F8}, //8810 #HANGUL SYLLABLE TIKEUT A SSANGSIOS + {0xB4E7, 0xB2F9}, //8811 #HANGUL SYLLABLE TIKEUT A IEUNG + {0xB4E8, 0xB2FA}, //8812 #HANGUL SYLLABLE TIKEUT A CIEUC + {0xB4E9, 0xB2FB}, //8813 #HANGUL SYLLABLE TIKEUT A CHIEUCH + {0xB4EA, 0xB2FF}, //8814 #HANGUL SYLLABLE TIKEUT A HIEUH + {0xB4EB, 0xB300}, //8815 #HANGUL SYLLABLE TIKEUT AE + {0xB4EC, 0xB301}, //8816 #HANGUL SYLLABLE TIKEUT AE KIYEOK + {0xB4ED, 0xB304}, //8817 #HANGUL SYLLABLE TIKEUT AE NIEUN + {0xB4EE, 0xB308}, //8818 #HANGUL SYLLABLE TIKEUT AE RIEUL + {0xB4EF, 0xB310}, //8819 #HANGUL SYLLABLE TIKEUT AE MIEUM + {0xB4F0, 0xB311}, //8820 #HANGUL SYLLABLE TIKEUT AE PIEUP + {0xB4F1, 0xB313}, //8821 #HANGUL SYLLABLE TIKEUT AE SIOS + {0xB4F2, 0xB314}, //8822 #HANGUL SYLLABLE TIKEUT AE SSANGSIOS + {0xB4F3, 0xB315}, //8823 #HANGUL SYLLABLE TIKEUT AE IEUNG + {0xB4F4, 0xB31C}, //8824 #HANGUL SYLLABLE TIKEUT YA + {0xB4F5, 0xB354}, //8825 #HANGUL SYLLABLE TIKEUT EO + {0xB4F6, 0xB355}, //8826 #HANGUL SYLLABLE TIKEUT EO KIYEOK + {0xB4F7, 0xB356}, //8827 #HANGUL SYLLABLE TIKEUT EO SSANGKIYEOK + {0xB4F8, 0xB358}, //8828 #HANGUL SYLLABLE TIKEUT EO NIEUN + {0xB4F9, 0xB35B}, //8829 #HANGUL SYLLABLE TIKEUT EO TIKEUT + {0xB4FA, 0xB35C}, //8830 #HANGUL SYLLABLE TIKEUT EO RIEUL + {0xB4FB, 0xB35E}, //8831 #HANGUL SYLLABLE TIKEUT EO RIEULMIEUM + {0xB4FC, 0xB35F}, //8832 #HANGUL SYLLABLE TIKEUT EO RIEULPIEUP + {0xB4FD, 0xB364}, //8833 #HANGUL SYLLABLE TIKEUT EO MIEUM + {0xB4FE, 0xB365}, //8834 #HANGUL SYLLABLE TIKEUT EO PIEUP + {0xB541, 0xD095}, //8835 #HANGUL SYLLABLE KHIEUKH YI RIEULTHIEUTH + {0xB542, 0xD096}, //8836 #HANGUL SYLLABLE KHIEUKH YI RIEULPHIEUPH + {0xB543, 0xD097}, //8837 #HANGUL SYLLABLE KHIEUKH YI RIEULHIEUH + {0xB544, 0xD098}, //8838 #HANGUL SYLLABLE KHIEUKH YI MIEUM + {0xB545, 0xD099}, //8839 #HANGUL SYLLABLE KHIEUKH YI PIEUP + {0xB546, 0xD09A}, //8840 #HANGUL SYLLABLE KHIEUKH YI PIEUPSIOS + {0xB547, 0xD09B}, //8841 #HANGUL SYLLABLE KHIEUKH YI SIOS + {0xB548, 0xD09C}, //8842 #HANGUL SYLLABLE KHIEUKH YI SSANGSIOS + {0xB549, 0xD09D}, //8843 #HANGUL SYLLABLE KHIEUKH YI IEUNG + {0xB54A, 0xD09E}, //8844 #HANGUL SYLLABLE KHIEUKH YI CIEUC + {0xB54B, 0xD09F}, //8845 #HANGUL SYLLABLE KHIEUKH YI CHIEUCH + {0xB54C, 0xD0A0}, //8846 #HANGUL SYLLABLE KHIEUKH YI KHIEUKH + {0xB54D, 0xD0A1}, //8847 #HANGUL SYLLABLE KHIEUKH YI THIEUTH + {0xB54E, 0xD0A2}, //8848 #HANGUL SYLLABLE KHIEUKH YI PHIEUPH + {0xB54F, 0xD0A3}, //8849 #HANGUL SYLLABLE KHIEUKH YI HIEUH + {0xB550, 0xD0A6}, //8850 #HANGUL SYLLABLE KHIEUKH I SSANGKIYEOK + {0xB551, 0xD0A7}, //8851 #HANGUL SYLLABLE KHIEUKH I KIYEOKSIOS + {0xB552, 0xD0A9}, //8852 #HANGUL SYLLABLE KHIEUKH I NIEUNCIEUC + {0xB553, 0xD0AA}, //8853 #HANGUL SYLLABLE KHIEUKH I NIEUNHIEUH + {0xB554, 0xD0AB}, //8854 #HANGUL SYLLABLE KHIEUKH I TIKEUT + {0xB555, 0xD0AD}, //8855 #HANGUL SYLLABLE KHIEUKH I RIEULKIYEOK + {0xB556, 0xD0AE}, //8856 #HANGUL SYLLABLE KHIEUKH I RIEULMIEUM + {0xB557, 0xD0AF}, //8857 #HANGUL SYLLABLE KHIEUKH I RIEULPIEUP + {0xB558, 0xD0B0}, //8858 #HANGUL SYLLABLE KHIEUKH I RIEULSIOS + {0xB559, 0xD0B1}, //8859 #HANGUL SYLLABLE KHIEUKH I RIEULTHIEUTH + {0xB55A, 0xD0B2}, //8860 #HANGUL SYLLABLE KHIEUKH I RIEULPHIEUPH + {0xB561, 0xD0B3}, //8861 #HANGUL SYLLABLE KHIEUKH I RIEULHIEUH + {0xB562, 0xD0B6}, //8862 #HANGUL SYLLABLE KHIEUKH I PIEUPSIOS + {0xB563, 0xD0B8}, //8863 #HANGUL SYLLABLE KHIEUKH I SSANGSIOS + {0xB564, 0xD0BA}, //8864 #HANGUL SYLLABLE KHIEUKH I CIEUC + {0xB565, 0xD0BB}, //8865 #HANGUL SYLLABLE KHIEUKH I CHIEUCH + {0xB566, 0xD0BC}, //8866 #HANGUL SYLLABLE KHIEUKH I KHIEUKH + {0xB567, 0xD0BD}, //8867 #HANGUL SYLLABLE KHIEUKH I THIEUTH + {0xB568, 0xD0BE}, //8868 #HANGUL SYLLABLE KHIEUKH I PHIEUPH + {0xB569, 0xD0BF}, //8869 #HANGUL SYLLABLE KHIEUKH I HIEUH + {0xB56A, 0xD0C2}, //8870 #HANGUL SYLLABLE THIEUTH A SSANGKIYEOK + {0xB56B, 0xD0C3}, //8871 #HANGUL SYLLABLE THIEUTH A KIYEOKSIOS + {0xB56C, 0xD0C5}, //8872 #HANGUL SYLLABLE THIEUTH A NIEUNCIEUC + {0xB56D, 0xD0C6}, //8873 #HANGUL SYLLABLE THIEUTH A NIEUNHIEUH + {0xB56E, 0xD0C7}, //8874 #HANGUL SYLLABLE THIEUTH A TIKEUT + {0xB56F, 0xD0CA}, //8875 #HANGUL SYLLABLE THIEUTH A RIEULMIEUM + {0xB570, 0xD0CB}, //8876 #HANGUL SYLLABLE THIEUTH A RIEULPIEUP + {0xB571, 0xD0CC}, //8877 #HANGUL SYLLABLE THIEUTH A RIEULSIOS + {0xB572, 0xD0CD}, //8878 #HANGUL SYLLABLE THIEUTH A RIEULTHIEUTH + {0xB573, 0xD0CE}, //8879 #HANGUL SYLLABLE THIEUTH A RIEULPHIEUPH + {0xB574, 0xD0CF}, //8880 #HANGUL SYLLABLE THIEUTH A RIEULHIEUH + {0xB575, 0xD0D2}, //8881 #HANGUL SYLLABLE THIEUTH A PIEUPSIOS + {0xB576, 0xD0D6}, //8882 #HANGUL SYLLABLE THIEUTH A CIEUC + {0xB577, 0xD0D7}, //8883 #HANGUL SYLLABLE THIEUTH A CHIEUCH + {0xB578, 0xD0D8}, //8884 #HANGUL SYLLABLE THIEUTH A KHIEUKH + {0xB579, 0xD0D9}, //8885 #HANGUL SYLLABLE THIEUTH A THIEUTH + {0xB57A, 0xD0DA}, //8886 #HANGUL SYLLABLE THIEUTH A PHIEUPH + {0xB581, 0xD0DB}, //8887 #HANGUL SYLLABLE THIEUTH A HIEUH + {0xB582, 0xD0DE}, //8888 #HANGUL SYLLABLE THIEUTH AE SSANGKIYEOK + {0xB583, 0xD0DF}, //8889 #HANGUL SYLLABLE THIEUTH AE KIYEOKSIOS + {0xB584, 0xD0E1}, //8890 #HANGUL SYLLABLE THIEUTH AE NIEUNCIEUC + {0xB585, 0xD0E2}, //8891 #HANGUL SYLLABLE THIEUTH AE NIEUNHIEUH + {0xB586, 0xD0E3}, //8892 #HANGUL SYLLABLE THIEUTH AE TIKEUT + {0xB587, 0xD0E5}, //8893 #HANGUL SYLLABLE THIEUTH AE RIEULKIYEOK + {0xB588, 0xD0E6}, //8894 #HANGUL SYLLABLE THIEUTH AE RIEULMIEUM + {0xB589, 0xD0E7}, //8895 #HANGUL SYLLABLE THIEUTH AE RIEULPIEUP + {0xB58A, 0xD0E8}, //8896 #HANGUL SYLLABLE THIEUTH AE RIEULSIOS + {0xB58B, 0xD0E9}, //8897 #HANGUL SYLLABLE THIEUTH AE RIEULTHIEUTH + {0xB58C, 0xD0EA}, //8898 #HANGUL SYLLABLE THIEUTH AE RIEULPHIEUPH + {0xB58D, 0xD0EB}, //8899 #HANGUL SYLLABLE THIEUTH AE RIEULHIEUH + {0xB58E, 0xD0EE}, //8900 #HANGUL SYLLABLE THIEUTH AE PIEUPSIOS + {0xB58F, 0xD0F2}, //8901 #HANGUL SYLLABLE THIEUTH AE CIEUC + {0xB590, 0xD0F3}, //8902 #HANGUL SYLLABLE THIEUTH AE CHIEUCH + {0xB591, 0xD0F4}, //8903 #HANGUL SYLLABLE THIEUTH AE KHIEUKH + {0xB592, 0xD0F5}, //8904 #HANGUL SYLLABLE THIEUTH AE THIEUTH + {0xB593, 0xD0F6}, //8905 #HANGUL SYLLABLE THIEUTH AE PHIEUPH + {0xB594, 0xD0F7}, //8906 #HANGUL SYLLABLE THIEUTH AE HIEUH + {0xB595, 0xD0F9}, //8907 #HANGUL SYLLABLE THIEUTH YA KIYEOK + {0xB596, 0xD0FA}, //8908 #HANGUL SYLLABLE THIEUTH YA SSANGKIYEOK + {0xB597, 0xD0FB}, //8909 #HANGUL SYLLABLE THIEUTH YA KIYEOKSIOS + {0xB598, 0xD0FC}, //8910 #HANGUL SYLLABLE THIEUTH YA NIEUN + {0xB599, 0xD0FD}, //8911 #HANGUL SYLLABLE THIEUTH YA NIEUNCIEUC + {0xB59A, 0xD0FE}, //8912 #HANGUL SYLLABLE THIEUTH YA NIEUNHIEUH + {0xB59B, 0xD0FF}, //8913 #HANGUL SYLLABLE THIEUTH YA TIKEUT + {0xB59C, 0xD100}, //8914 #HANGUL SYLLABLE THIEUTH YA RIEUL + {0xB59D, 0xD101}, //8915 #HANGUL SYLLABLE THIEUTH YA RIEULKIYEOK + {0xB59E, 0xD102}, //8916 #HANGUL SYLLABLE THIEUTH YA RIEULMIEUM + {0xB59F, 0xD103}, //8917 #HANGUL SYLLABLE THIEUTH YA RIEULPIEUP + {0xB5A0, 0xD104}, //8918 #HANGUL SYLLABLE THIEUTH YA RIEULSIOS + {0xB5A1, 0xB367}, //8919 #HANGUL SYLLABLE TIKEUT EO SIOS + {0xB5A2, 0xB369}, //8920 #HANGUL SYLLABLE TIKEUT EO IEUNG + {0xB5A3, 0xB36B}, //8921 #HANGUL SYLLABLE TIKEUT EO CHIEUCH + {0xB5A4, 0xB36E}, //8922 #HANGUL SYLLABLE TIKEUT EO PHIEUPH + {0xB5A5, 0xB370}, //8923 #HANGUL SYLLABLE TIKEUT E + {0xB5A6, 0xB371}, //8924 #HANGUL SYLLABLE TIKEUT E KIYEOK + {0xB5A7, 0xB374}, //8925 #HANGUL SYLLABLE TIKEUT E NIEUN + {0xB5A8, 0xB378}, //8926 #HANGUL SYLLABLE TIKEUT E RIEUL + {0xB5A9, 0xB380}, //8927 #HANGUL SYLLABLE TIKEUT E MIEUM + {0xB5AA, 0xB381}, //8928 #HANGUL SYLLABLE TIKEUT E PIEUP + {0xB5AB, 0xB383}, //8929 #HANGUL SYLLABLE TIKEUT E SIOS + {0xB5AC, 0xB384}, //8930 #HANGUL SYLLABLE TIKEUT E SSANGSIOS + {0xB5AD, 0xB385}, //8931 #HANGUL SYLLABLE TIKEUT E IEUNG + {0xB5AE, 0xB38C}, //8932 #HANGUL SYLLABLE TIKEUT YEO + {0xB5AF, 0xB390}, //8933 #HANGUL SYLLABLE TIKEUT YEO NIEUN + {0xB5B0, 0xB394}, //8934 #HANGUL SYLLABLE TIKEUT YEO RIEUL + {0xB5B1, 0xB3A0}, //8935 #HANGUL SYLLABLE TIKEUT YEO SSANGSIOS + {0xB5B2, 0xB3A1}, //8936 #HANGUL SYLLABLE TIKEUT YEO IEUNG + {0xB5B3, 0xB3A8}, //8937 #HANGUL SYLLABLE TIKEUT YE + {0xB5B4, 0xB3AC}, //8938 #HANGUL SYLLABLE TIKEUT YE NIEUN + {0xB5B5, 0xB3C4}, //8939 #HANGUL SYLLABLE TIKEUT O + {0xB5B6, 0xB3C5}, //8940 #HANGUL SYLLABLE TIKEUT O KIYEOK + {0xB5B7, 0xB3C8}, //8941 #HANGUL SYLLABLE TIKEUT O NIEUN + {0xB5B8, 0xB3CB}, //8942 #HANGUL SYLLABLE TIKEUT O TIKEUT + {0xB5B9, 0xB3CC}, //8943 #HANGUL SYLLABLE TIKEUT O RIEUL + {0xB5BA, 0xB3CE}, //8944 #HANGUL SYLLABLE TIKEUT O RIEULMIEUM + {0xB5BB, 0xB3D0}, //8945 #HANGUL SYLLABLE TIKEUT O RIEULSIOS + {0xB5BC, 0xB3D4}, //8946 #HANGUL SYLLABLE TIKEUT O MIEUM + {0xB5BD, 0xB3D5}, //8947 #HANGUL SYLLABLE TIKEUT O PIEUP + {0xB5BE, 0xB3D7}, //8948 #HANGUL SYLLABLE TIKEUT O SIOS + {0xB5BF, 0xB3D9}, //8949 #HANGUL SYLLABLE TIKEUT O IEUNG + {0xB5C0, 0xB3DB}, //8950 #HANGUL SYLLABLE TIKEUT O CHIEUCH + {0xB5C1, 0xB3DD}, //8951 #HANGUL SYLLABLE TIKEUT O THIEUTH + {0xB5C2, 0xB3E0}, //8952 #HANGUL SYLLABLE TIKEUT WA + {0xB5C3, 0xB3E4}, //8953 #HANGUL SYLLABLE TIKEUT WA NIEUN + {0xB5C4, 0xB3E8}, //8954 #HANGUL SYLLABLE TIKEUT WA RIEUL + {0xB5C5, 0xB3FC}, //8955 #HANGUL SYLLABLE TIKEUT WAE + {0xB5C6, 0xB410}, //8956 #HANGUL SYLLABLE TIKEUT WAE SSANGSIOS + {0xB5C7, 0xB418}, //8957 #HANGUL SYLLABLE TIKEUT OE + {0xB5C8, 0xB41C}, //8958 #HANGUL SYLLABLE TIKEUT OE NIEUN + {0xB5C9, 0xB420}, //8959 #HANGUL SYLLABLE TIKEUT OE RIEUL + {0xB5CA, 0xB428}, //8960 #HANGUL SYLLABLE TIKEUT OE MIEUM + {0xB5CB, 0xB429}, //8961 #HANGUL SYLLABLE TIKEUT OE PIEUP + {0xB5CC, 0xB42B}, //8962 #HANGUL SYLLABLE TIKEUT OE SIOS + {0xB5CD, 0xB434}, //8963 #HANGUL SYLLABLE TIKEUT YO + {0xB5CE, 0xB450}, //8964 #HANGUL SYLLABLE TIKEUT U + {0xB5CF, 0xB451}, //8965 #HANGUL SYLLABLE TIKEUT U KIYEOK + {0xB5D0, 0xB454}, //8966 #HANGUL SYLLABLE TIKEUT U NIEUN + {0xB5D1, 0xB458}, //8967 #HANGUL SYLLABLE TIKEUT U RIEUL + {0xB5D2, 0xB460}, //8968 #HANGUL SYLLABLE TIKEUT U MIEUM + {0xB5D3, 0xB461}, //8969 #HANGUL SYLLABLE TIKEUT U PIEUP + {0xB5D4, 0xB463}, //8970 #HANGUL SYLLABLE TIKEUT U SIOS + {0xB5D5, 0xB465}, //8971 #HANGUL SYLLABLE TIKEUT U IEUNG + {0xB5D6, 0xB46C}, //8972 #HANGUL SYLLABLE TIKEUT WEO + {0xB5D7, 0xB480}, //8973 #HANGUL SYLLABLE TIKEUT WEO SSANGSIOS + {0xB5D8, 0xB488}, //8974 #HANGUL SYLLABLE TIKEUT WE + {0xB5D9, 0xB49D}, //8975 #HANGUL SYLLABLE TIKEUT WE IEUNG + {0xB5DA, 0xB4A4}, //8976 #HANGUL SYLLABLE TIKEUT WI + {0xB5DB, 0xB4A8}, //8977 #HANGUL SYLLABLE TIKEUT WI NIEUN + {0xB5DC, 0xB4AC}, //8978 #HANGUL SYLLABLE TIKEUT WI RIEUL + {0xB5DD, 0xB4B5}, //8979 #HANGUL SYLLABLE TIKEUT WI PIEUP + {0xB5DE, 0xB4B7}, //8980 #HANGUL SYLLABLE TIKEUT WI SIOS + {0xB5DF, 0xB4B9}, //8981 #HANGUL SYLLABLE TIKEUT WI IEUNG + {0xB5E0, 0xB4C0}, //8982 #HANGUL SYLLABLE TIKEUT YU + {0xB5E1, 0xB4C4}, //8983 #HANGUL SYLLABLE TIKEUT YU NIEUN + {0xB5E2, 0xB4C8}, //8984 #HANGUL SYLLABLE TIKEUT YU RIEUL + {0xB5E3, 0xB4D0}, //8985 #HANGUL SYLLABLE TIKEUT YU MIEUM + {0xB5E4, 0xB4D5}, //8986 #HANGUL SYLLABLE TIKEUT YU IEUNG + {0xB5E5, 0xB4DC}, //8987 #HANGUL SYLLABLE TIKEUT EU + {0xB5E6, 0xB4DD}, //8988 #HANGUL SYLLABLE TIKEUT EU KIYEOK + {0xB5E7, 0xB4E0}, //8989 #HANGUL SYLLABLE TIKEUT EU NIEUN + {0xB5E8, 0xB4E3}, //8990 #HANGUL SYLLABLE TIKEUT EU TIKEUT + {0xB5E9, 0xB4E4}, //8991 #HANGUL SYLLABLE TIKEUT EU RIEUL + {0xB5EA, 0xB4E6}, //8992 #HANGUL SYLLABLE TIKEUT EU RIEULMIEUM + {0xB5EB, 0xB4EC}, //8993 #HANGUL SYLLABLE TIKEUT EU MIEUM + {0xB5EC, 0xB4ED}, //8994 #HANGUL SYLLABLE TIKEUT EU PIEUP + {0xB5ED, 0xB4EF}, //8995 #HANGUL SYLLABLE TIKEUT EU SIOS + {0xB5EE, 0xB4F1}, //8996 #HANGUL SYLLABLE TIKEUT EU IEUNG + {0xB5EF, 0xB4F8}, //8997 #HANGUL SYLLABLE TIKEUT YI + {0xB5F0, 0xB514}, //8998 #HANGUL SYLLABLE TIKEUT I + {0xB5F1, 0xB515}, //8999 #HANGUL SYLLABLE TIKEUT I KIYEOK + {0xB5F2, 0xB518}, //9000 #HANGUL SYLLABLE TIKEUT I NIEUN + {0xB5F3, 0xB51B}, //9001 #HANGUL SYLLABLE TIKEUT I TIKEUT + {0xB5F4, 0xB51C}, //9002 #HANGUL SYLLABLE TIKEUT I RIEUL + {0xB5F5, 0xB524}, //9003 #HANGUL SYLLABLE TIKEUT I MIEUM + {0xB5F6, 0xB525}, //9004 #HANGUL SYLLABLE TIKEUT I PIEUP + {0xB5F7, 0xB527}, //9005 #HANGUL SYLLABLE TIKEUT I SIOS + {0xB5F8, 0xB528}, //9006 #HANGUL SYLLABLE TIKEUT I SSANGSIOS + {0xB5F9, 0xB529}, //9007 #HANGUL SYLLABLE TIKEUT I IEUNG + {0xB5FA, 0xB52A}, //9008 #HANGUL SYLLABLE TIKEUT I CIEUC + {0xB5FB, 0xB530}, //9009 #HANGUL SYLLABLE SSANGTIKEUT A + {0xB5FC, 0xB531}, //9010 #HANGUL SYLLABLE SSANGTIKEUT A KIYEOK + {0xB5FD, 0xB534}, //9011 #HANGUL SYLLABLE SSANGTIKEUT A NIEUN + {0xB5FE, 0xB538}, //9012 #HANGUL SYLLABLE SSANGTIKEUT A RIEUL + {0xB641, 0xD105}, //9013 #HANGUL SYLLABLE THIEUTH YA RIEULTHIEUTH + {0xB642, 0xD106}, //9014 #HANGUL SYLLABLE THIEUTH YA RIEULPHIEUPH + {0xB643, 0xD107}, //9015 #HANGUL SYLLABLE THIEUTH YA RIEULHIEUH + {0xB644, 0xD108}, //9016 #HANGUL SYLLABLE THIEUTH YA MIEUM + {0xB645, 0xD109}, //9017 #HANGUL SYLLABLE THIEUTH YA PIEUP + {0xB646, 0xD10A}, //9018 #HANGUL SYLLABLE THIEUTH YA PIEUPSIOS + {0xB647, 0xD10B}, //9019 #HANGUL SYLLABLE THIEUTH YA SIOS + {0xB648, 0xD10C}, //9020 #HANGUL SYLLABLE THIEUTH YA SSANGSIOS + {0xB649, 0xD10E}, //9021 #HANGUL SYLLABLE THIEUTH YA CIEUC + {0xB64A, 0xD10F}, //9022 #HANGUL SYLLABLE THIEUTH YA CHIEUCH + {0xB64B, 0xD110}, //9023 #HANGUL SYLLABLE THIEUTH YA KHIEUKH + {0xB64C, 0xD111}, //9024 #HANGUL SYLLABLE THIEUTH YA THIEUTH + {0xB64D, 0xD112}, //9025 #HANGUL SYLLABLE THIEUTH YA PHIEUPH + {0xB64E, 0xD113}, //9026 #HANGUL SYLLABLE THIEUTH YA HIEUH + {0xB64F, 0xD114}, //9027 #HANGUL SYLLABLE THIEUTH YAE + {0xB650, 0xD115}, //9028 #HANGUL SYLLABLE THIEUTH YAE KIYEOK + {0xB651, 0xD116}, //9029 #HANGUL SYLLABLE THIEUTH YAE SSANGKIYEOK + {0xB652, 0xD117}, //9030 #HANGUL SYLLABLE THIEUTH YAE KIYEOKSIOS + {0xB653, 0xD118}, //9031 #HANGUL SYLLABLE THIEUTH YAE NIEUN + {0xB654, 0xD119}, //9032 #HANGUL SYLLABLE THIEUTH YAE NIEUNCIEUC + {0xB655, 0xD11A}, //9033 #HANGUL SYLLABLE THIEUTH YAE NIEUNHIEUH + {0xB656, 0xD11B}, //9034 #HANGUL SYLLABLE THIEUTH YAE TIKEUT + {0xB657, 0xD11C}, //9035 #HANGUL SYLLABLE THIEUTH YAE RIEUL + {0xB658, 0xD11D}, //9036 #HANGUL SYLLABLE THIEUTH YAE RIEULKIYEOK + {0xB659, 0xD11E}, //9037 #HANGUL SYLLABLE THIEUTH YAE RIEULMIEUM + {0xB65A, 0xD11F}, //9038 #HANGUL SYLLABLE THIEUTH YAE RIEULPIEUP + {0xB661, 0xD120}, //9039 #HANGUL SYLLABLE THIEUTH YAE RIEULSIOS + {0xB662, 0xD121}, //9040 #HANGUL SYLLABLE THIEUTH YAE RIEULTHIEUTH + {0xB663, 0xD122}, //9041 #HANGUL SYLLABLE THIEUTH YAE RIEULPHIEUPH + {0xB664, 0xD123}, //9042 #HANGUL SYLLABLE THIEUTH YAE RIEULHIEUH + {0xB665, 0xD124}, //9043 #HANGUL SYLLABLE THIEUTH YAE MIEUM + {0xB666, 0xD125}, //9044 #HANGUL SYLLABLE THIEUTH YAE PIEUP + {0xB667, 0xD126}, //9045 #HANGUL SYLLABLE THIEUTH YAE PIEUPSIOS + {0xB668, 0xD127}, //9046 #HANGUL SYLLABLE THIEUTH YAE SIOS + {0xB669, 0xD128}, //9047 #HANGUL SYLLABLE THIEUTH YAE SSANGSIOS + {0xB66A, 0xD129}, //9048 #HANGUL SYLLABLE THIEUTH YAE IEUNG + {0xB66B, 0xD12A}, //9049 #HANGUL SYLLABLE THIEUTH YAE CIEUC + {0xB66C, 0xD12B}, //9050 #HANGUL SYLLABLE THIEUTH YAE CHIEUCH + {0xB66D, 0xD12C}, //9051 #HANGUL SYLLABLE THIEUTH YAE KHIEUKH + {0xB66E, 0xD12D}, //9052 #HANGUL SYLLABLE THIEUTH YAE THIEUTH + {0xB66F, 0xD12E}, //9053 #HANGUL SYLLABLE THIEUTH YAE PHIEUPH + {0xB670, 0xD12F}, //9054 #HANGUL SYLLABLE THIEUTH YAE HIEUH + {0xB671, 0xD132}, //9055 #HANGUL SYLLABLE THIEUTH EO SSANGKIYEOK + {0xB672, 0xD133}, //9056 #HANGUL SYLLABLE THIEUTH EO KIYEOKSIOS + {0xB673, 0xD135}, //9057 #HANGUL SYLLABLE THIEUTH EO NIEUNCIEUC + {0xB674, 0xD136}, //9058 #HANGUL SYLLABLE THIEUTH EO NIEUNHIEUH + {0xB675, 0xD137}, //9059 #HANGUL SYLLABLE THIEUTH EO TIKEUT + {0xB676, 0xD139}, //9060 #HANGUL SYLLABLE THIEUTH EO RIEULKIYEOK + {0xB677, 0xD13B}, //9061 #HANGUL SYLLABLE THIEUTH EO RIEULPIEUP + {0xB678, 0xD13C}, //9062 #HANGUL SYLLABLE THIEUTH EO RIEULSIOS + {0xB679, 0xD13D}, //9063 #HANGUL SYLLABLE THIEUTH EO RIEULTHIEUTH + {0xB67A, 0xD13E}, //9064 #HANGUL SYLLABLE THIEUTH EO RIEULPHIEUPH + {0xB681, 0xD13F}, //9065 #HANGUL SYLLABLE THIEUTH EO RIEULHIEUH + {0xB682, 0xD142}, //9066 #HANGUL SYLLABLE THIEUTH EO PIEUPSIOS + {0xB683, 0xD146}, //9067 #HANGUL SYLLABLE THIEUTH EO CIEUC + {0xB684, 0xD147}, //9068 #HANGUL SYLLABLE THIEUTH EO CHIEUCH + {0xB685, 0xD148}, //9069 #HANGUL SYLLABLE THIEUTH EO KHIEUKH + {0xB686, 0xD149}, //9070 #HANGUL SYLLABLE THIEUTH EO THIEUTH + {0xB687, 0xD14A}, //9071 #HANGUL SYLLABLE THIEUTH EO PHIEUPH + {0xB688, 0xD14B}, //9072 #HANGUL SYLLABLE THIEUTH EO HIEUH + {0xB689, 0xD14E}, //9073 #HANGUL SYLLABLE THIEUTH E SSANGKIYEOK + {0xB68A, 0xD14F}, //9074 #HANGUL SYLLABLE THIEUTH E KIYEOKSIOS + {0xB68B, 0xD151}, //9075 #HANGUL SYLLABLE THIEUTH E NIEUNCIEUC + {0xB68C, 0xD152}, //9076 #HANGUL SYLLABLE THIEUTH E NIEUNHIEUH + {0xB68D, 0xD153}, //9077 #HANGUL SYLLABLE THIEUTH E TIKEUT + {0xB68E, 0xD155}, //9078 #HANGUL SYLLABLE THIEUTH E RIEULKIYEOK + {0xB68F, 0xD156}, //9079 #HANGUL SYLLABLE THIEUTH E RIEULMIEUM + {0xB690, 0xD157}, //9080 #HANGUL SYLLABLE THIEUTH E RIEULPIEUP + {0xB691, 0xD158}, //9081 #HANGUL SYLLABLE THIEUTH E RIEULSIOS + {0xB692, 0xD159}, //9082 #HANGUL SYLLABLE THIEUTH E RIEULTHIEUTH + {0xB693, 0xD15A}, //9083 #HANGUL SYLLABLE THIEUTH E RIEULPHIEUPH + {0xB694, 0xD15B}, //9084 #HANGUL SYLLABLE THIEUTH E RIEULHIEUH + {0xB695, 0xD15E}, //9085 #HANGUL SYLLABLE THIEUTH E PIEUPSIOS + {0xB696, 0xD160}, //9086 #HANGUL SYLLABLE THIEUTH E SSANGSIOS + {0xB697, 0xD162}, //9087 #HANGUL SYLLABLE THIEUTH E CIEUC + {0xB698, 0xD163}, //9088 #HANGUL SYLLABLE THIEUTH E CHIEUCH + {0xB699, 0xD164}, //9089 #HANGUL SYLLABLE THIEUTH E KHIEUKH + {0xB69A, 0xD165}, //9090 #HANGUL SYLLABLE THIEUTH E THIEUTH + {0xB69B, 0xD166}, //9091 #HANGUL SYLLABLE THIEUTH E PHIEUPH + {0xB69C, 0xD167}, //9092 #HANGUL SYLLABLE THIEUTH E HIEUH + {0xB69D, 0xD169}, //9093 #HANGUL SYLLABLE THIEUTH YEO KIYEOK + {0xB69E, 0xD16A}, //9094 #HANGUL SYLLABLE THIEUTH YEO SSANGKIYEOK + {0xB69F, 0xD16B}, //9095 #HANGUL SYLLABLE THIEUTH YEO KIYEOKSIOS + {0xB6A0, 0xD16D}, //9096 #HANGUL SYLLABLE THIEUTH YEO NIEUNCIEUC + {0xB6A1, 0xB540}, //9097 #HANGUL SYLLABLE SSANGTIKEUT A MIEUM + {0xB6A2, 0xB541}, //9098 #HANGUL SYLLABLE SSANGTIKEUT A PIEUP + {0xB6A3, 0xB543}, //9099 #HANGUL SYLLABLE SSANGTIKEUT A SIOS + {0xB6A4, 0xB544}, //9100 #HANGUL SYLLABLE SSANGTIKEUT A SSANGSIOS + {0xB6A5, 0xB545}, //9101 #HANGUL SYLLABLE SSANGTIKEUT A IEUNG + {0xB6A6, 0xB54B}, //9102 #HANGUL SYLLABLE SSANGTIKEUT A HIEUH + {0xB6A7, 0xB54C}, //9103 #HANGUL SYLLABLE SSANGTIKEUT AE + {0xB6A8, 0xB54D}, //9104 #HANGUL SYLLABLE SSANGTIKEUT AE KIYEOK + {0xB6A9, 0xB550}, //9105 #HANGUL SYLLABLE SSANGTIKEUT AE NIEUN + {0xB6AA, 0xB554}, //9106 #HANGUL SYLLABLE SSANGTIKEUT AE RIEUL + {0xB6AB, 0xB55C}, //9107 #HANGUL SYLLABLE SSANGTIKEUT AE MIEUM + {0xB6AC, 0xB55D}, //9108 #HANGUL SYLLABLE SSANGTIKEUT AE PIEUP + {0xB6AD, 0xB55F}, //9109 #HANGUL SYLLABLE SSANGTIKEUT AE SIOS + {0xB6AE, 0xB560}, //9110 #HANGUL SYLLABLE SSANGTIKEUT AE SSANGSIOS + {0xB6AF, 0xB561}, //9111 #HANGUL SYLLABLE SSANGTIKEUT AE IEUNG + {0xB6B0, 0xB5A0}, //9112 #HANGUL SYLLABLE SSANGTIKEUT EO + {0xB6B1, 0xB5A1}, //9113 #HANGUL SYLLABLE SSANGTIKEUT EO KIYEOK + {0xB6B2, 0xB5A4}, //9114 #HANGUL SYLLABLE SSANGTIKEUT EO NIEUN + {0xB6B3, 0xB5A8}, //9115 #HANGUL SYLLABLE SSANGTIKEUT EO RIEUL + {0xB6B4, 0xB5AA}, //9116 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULMIEUM + {0xB6B5, 0xB5AB}, //9117 #HANGUL SYLLABLE SSANGTIKEUT EO RIEULPIEUP + {0xB6B6, 0xB5B0}, //9118 #HANGUL SYLLABLE SSANGTIKEUT EO MIEUM + {0xB6B7, 0xB5B1}, //9119 #HANGUL SYLLABLE SSANGTIKEUT EO PIEUP + {0xB6B8, 0xB5B3}, //9120 #HANGUL SYLLABLE SSANGTIKEUT EO SIOS + {0xB6B9, 0xB5B4}, //9121 #HANGUL SYLLABLE SSANGTIKEUT EO SSANGSIOS + {0xB6BA, 0xB5B5}, //9122 #HANGUL SYLLABLE SSANGTIKEUT EO IEUNG + {0xB6BB, 0xB5BB}, //9123 #HANGUL SYLLABLE SSANGTIKEUT EO HIEUH + {0xB6BC, 0xB5BC}, //9124 #HANGUL SYLLABLE SSANGTIKEUT E + {0xB6BD, 0xB5BD}, //9125 #HANGUL SYLLABLE SSANGTIKEUT E KIYEOK + {0xB6BE, 0xB5C0}, //9126 #HANGUL SYLLABLE SSANGTIKEUT E NIEUN + {0xB6BF, 0xB5C4}, //9127 #HANGUL SYLLABLE SSANGTIKEUT E RIEUL + {0xB6C0, 0xB5CC}, //9128 #HANGUL SYLLABLE SSANGTIKEUT E MIEUM + {0xB6C1, 0xB5CD}, //9129 #HANGUL SYLLABLE SSANGTIKEUT E PIEUP + {0xB6C2, 0xB5CF}, //9130 #HANGUL SYLLABLE SSANGTIKEUT E SIOS + {0xB6C3, 0xB5D0}, //9131 #HANGUL SYLLABLE SSANGTIKEUT E SSANGSIOS + {0xB6C4, 0xB5D1}, //9132 #HANGUL SYLLABLE SSANGTIKEUT E IEUNG + {0xB6C5, 0xB5D8}, //9133 #HANGUL SYLLABLE SSANGTIKEUT YEO + {0xB6C6, 0xB5EC}, //9134 #HANGUL SYLLABLE SSANGTIKEUT YEO SSANGSIOS + {0xB6C7, 0xB610}, //9135 #HANGUL SYLLABLE SSANGTIKEUT O + {0xB6C8, 0xB611}, //9136 #HANGUL SYLLABLE SSANGTIKEUT O KIYEOK + {0xB6C9, 0xB614}, //9137 #HANGUL SYLLABLE SSANGTIKEUT O NIEUN + {0xB6CA, 0xB618}, //9138 #HANGUL SYLLABLE SSANGTIKEUT O RIEUL + {0xB6CB, 0xB625}, //9139 #HANGUL SYLLABLE SSANGTIKEUT O IEUNG + {0xB6CC, 0xB62C}, //9140 #HANGUL SYLLABLE SSANGTIKEUT WA + {0xB6CD, 0xB634}, //9141 #HANGUL SYLLABLE SSANGTIKEUT WA RIEUL + {0xB6CE, 0xB648}, //9142 #HANGUL SYLLABLE SSANGTIKEUT WAE + {0xB6CF, 0xB664}, //9143 #HANGUL SYLLABLE SSANGTIKEUT OE + {0xB6D0, 0xB668}, //9144 #HANGUL SYLLABLE SSANGTIKEUT OE NIEUN + {0xB6D1, 0xB69C}, //9145 #HANGUL SYLLABLE SSANGTIKEUT U + {0xB6D2, 0xB69D}, //9146 #HANGUL SYLLABLE SSANGTIKEUT U KIYEOK + {0xB6D3, 0xB6A0}, //9147 #HANGUL SYLLABLE SSANGTIKEUT U NIEUN + {0xB6D4, 0xB6A4}, //9148 #HANGUL SYLLABLE SSANGTIKEUT U RIEUL + {0xB6D5, 0xB6AB}, //9149 #HANGUL SYLLABLE SSANGTIKEUT U RIEULHIEUH + {0xB6D6, 0xB6AC}, //9150 #HANGUL SYLLABLE SSANGTIKEUT U MIEUM + {0xB6D7, 0xB6B1}, //9151 #HANGUL SYLLABLE SSANGTIKEUT U IEUNG + {0xB6D8, 0xB6D4}, //9152 #HANGUL SYLLABLE SSANGTIKEUT WE + {0xB6D9, 0xB6F0}, //9153 #HANGUL SYLLABLE SSANGTIKEUT WI + {0xB6DA, 0xB6F4}, //9154 #HANGUL SYLLABLE SSANGTIKEUT WI NIEUN + {0xB6DB, 0xB6F8}, //9155 #HANGUL SYLLABLE SSANGTIKEUT WI RIEUL + {0xB6DC, 0xB700}, //9156 #HANGUL SYLLABLE SSANGTIKEUT WI MIEUM + {0xB6DD, 0xB701}, //9157 #HANGUL SYLLABLE SSANGTIKEUT WI PIEUP + {0xB6DE, 0xB705}, //9158 #HANGUL SYLLABLE SSANGTIKEUT WI IEUNG + {0xB6DF, 0xB728}, //9159 #HANGUL SYLLABLE SSANGTIKEUT EU + {0xB6E0, 0xB729}, //9160 #HANGUL SYLLABLE SSANGTIKEUT EU KIYEOK + {0xB6E1, 0xB72C}, //9161 #HANGUL SYLLABLE SSANGTIKEUT EU NIEUN + {0xB6E2, 0xB72F}, //9162 #HANGUL SYLLABLE SSANGTIKEUT EU TIKEUT + {0xB6E3, 0xB730}, //9163 #HANGUL SYLLABLE SSANGTIKEUT EU RIEUL + {0xB6E4, 0xB738}, //9164 #HANGUL SYLLABLE SSANGTIKEUT EU MIEUM + {0xB6E5, 0xB739}, //9165 #HANGUL SYLLABLE SSANGTIKEUT EU PIEUP + {0xB6E6, 0xB73B}, //9166 #HANGUL SYLLABLE SSANGTIKEUT EU SIOS + {0xB6E7, 0xB744}, //9167 #HANGUL SYLLABLE SSANGTIKEUT YI + {0xB6E8, 0xB748}, //9168 #HANGUL SYLLABLE SSANGTIKEUT YI NIEUN + {0xB6E9, 0xB74C}, //9169 #HANGUL SYLLABLE SSANGTIKEUT YI RIEUL + {0xB6EA, 0xB754}, //9170 #HANGUL SYLLABLE SSANGTIKEUT YI MIEUM + {0xB6EB, 0xB755}, //9171 #HANGUL SYLLABLE SSANGTIKEUT YI PIEUP + {0xB6EC, 0xB760}, //9172 #HANGUL SYLLABLE SSANGTIKEUT I + {0xB6ED, 0xB764}, //9173 #HANGUL SYLLABLE SSANGTIKEUT I NIEUN + {0xB6EE, 0xB768}, //9174 #HANGUL SYLLABLE SSANGTIKEUT I RIEUL + {0xB6EF, 0xB770}, //9175 #HANGUL SYLLABLE SSANGTIKEUT I MIEUM + {0xB6F0, 0xB771}, //9176 #HANGUL SYLLABLE SSANGTIKEUT I PIEUP + {0xB6F1, 0xB773}, //9177 #HANGUL SYLLABLE SSANGTIKEUT I SIOS + {0xB6F2, 0xB775}, //9178 #HANGUL SYLLABLE SSANGTIKEUT I IEUNG + {0xB6F3, 0xB77C}, //9179 #HANGUL SYLLABLE RIEUL A + {0xB6F4, 0xB77D}, //9180 #HANGUL SYLLABLE RIEUL A KIYEOK + {0xB6F5, 0xB780}, //9181 #HANGUL SYLLABLE RIEUL A NIEUN + {0xB6F6, 0xB784}, //9182 #HANGUL SYLLABLE RIEUL A RIEUL + {0xB6F7, 0xB78C}, //9183 #HANGUL SYLLABLE RIEUL A MIEUM + {0xB6F8, 0xB78D}, //9184 #HANGUL SYLLABLE RIEUL A PIEUP + {0xB6F9, 0xB78F}, //9185 #HANGUL SYLLABLE RIEUL A SIOS + {0xB6FA, 0xB790}, //9186 #HANGUL SYLLABLE RIEUL A SSANGSIOS + {0xB6FB, 0xB791}, //9187 #HANGUL SYLLABLE RIEUL A IEUNG + {0xB6FC, 0xB792}, //9188 #HANGUL SYLLABLE RIEUL A CIEUC + {0xB6FD, 0xB796}, //9189 #HANGUL SYLLABLE RIEUL A PHIEUPH + {0xB6FE, 0xB797}, //9190 #HANGUL SYLLABLE RIEUL A HIEUH + {0xB741, 0xD16E}, //9191 #HANGUL SYLLABLE THIEUTH YEO NIEUNHIEUH + {0xB742, 0xD16F}, //9192 #HANGUL SYLLABLE THIEUTH YEO TIKEUT + {0xB743, 0xD170}, //9193 #HANGUL SYLLABLE THIEUTH YEO RIEUL + {0xB744, 0xD171}, //9194 #HANGUL SYLLABLE THIEUTH YEO RIEULKIYEOK + {0xB745, 0xD172}, //9195 #HANGUL SYLLABLE THIEUTH YEO RIEULMIEUM + {0xB746, 0xD173}, //9196 #HANGUL SYLLABLE THIEUTH YEO RIEULPIEUP + {0xB747, 0xD174}, //9197 #HANGUL SYLLABLE THIEUTH YEO RIEULSIOS + {0xB748, 0xD175}, //9198 #HANGUL SYLLABLE THIEUTH YEO RIEULTHIEUTH + {0xB749, 0xD176}, //9199 #HANGUL SYLLABLE THIEUTH YEO RIEULPHIEUPH + {0xB74A, 0xD177}, //9200 #HANGUL SYLLABLE THIEUTH YEO RIEULHIEUH + {0xB74B, 0xD178}, //9201 #HANGUL SYLLABLE THIEUTH YEO MIEUM + {0xB74C, 0xD179}, //9202 #HANGUL SYLLABLE THIEUTH YEO PIEUP + {0xB74D, 0xD17A}, //9203 #HANGUL SYLLABLE THIEUTH YEO PIEUPSIOS + {0xB74E, 0xD17B}, //9204 #HANGUL SYLLABLE THIEUTH YEO SIOS + {0xB74F, 0xD17D}, //9205 #HANGUL SYLLABLE THIEUTH YEO IEUNG + {0xB750, 0xD17E}, //9206 #HANGUL SYLLABLE THIEUTH YEO CIEUC + {0xB751, 0xD17F}, //9207 #HANGUL SYLLABLE THIEUTH YEO CHIEUCH + {0xB752, 0xD180}, //9208 #HANGUL SYLLABLE THIEUTH YEO KHIEUKH + {0xB753, 0xD181}, //9209 #HANGUL SYLLABLE THIEUTH YEO THIEUTH + {0xB754, 0xD182}, //9210 #HANGUL SYLLABLE THIEUTH YEO PHIEUPH + {0xB755, 0xD183}, //9211 #HANGUL SYLLABLE THIEUTH YEO HIEUH + {0xB756, 0xD185}, //9212 #HANGUL SYLLABLE THIEUTH YE KIYEOK + {0xB757, 0xD186}, //9213 #HANGUL SYLLABLE THIEUTH YE SSANGKIYEOK + {0xB758, 0xD187}, //9214 #HANGUL SYLLABLE THIEUTH YE KIYEOKSIOS + {0xB759, 0xD189}, //9215 #HANGUL SYLLABLE THIEUTH YE NIEUNCIEUC + {0xB75A, 0xD18A}, //9216 #HANGUL SYLLABLE THIEUTH YE NIEUNHIEUH + {0xB761, 0xD18B}, //9217 #HANGUL SYLLABLE THIEUTH YE TIKEUT + {0xB762, 0xD18C}, //9218 #HANGUL SYLLABLE THIEUTH YE RIEUL + {0xB763, 0xD18D}, //9219 #HANGUL SYLLABLE THIEUTH YE RIEULKIYEOK + {0xB764, 0xD18E}, //9220 #HANGUL SYLLABLE THIEUTH YE RIEULMIEUM + {0xB765, 0xD18F}, //9221 #HANGUL SYLLABLE THIEUTH YE RIEULPIEUP + {0xB766, 0xD190}, //9222 #HANGUL SYLLABLE THIEUTH YE RIEULSIOS + {0xB767, 0xD191}, //9223 #HANGUL SYLLABLE THIEUTH YE RIEULTHIEUTH + {0xB768, 0xD192}, //9224 #HANGUL SYLLABLE THIEUTH YE RIEULPHIEUPH + {0xB769, 0xD193}, //9225 #HANGUL SYLLABLE THIEUTH YE RIEULHIEUH + {0xB76A, 0xD194}, //9226 #HANGUL SYLLABLE THIEUTH YE MIEUM + {0xB76B, 0xD195}, //9227 #HANGUL SYLLABLE THIEUTH YE PIEUP + {0xB76C, 0xD196}, //9228 #HANGUL SYLLABLE THIEUTH YE PIEUPSIOS + {0xB76D, 0xD197}, //9229 #HANGUL SYLLABLE THIEUTH YE SIOS + {0xB76E, 0xD198}, //9230 #HANGUL SYLLABLE THIEUTH YE SSANGSIOS + {0xB76F, 0xD199}, //9231 #HANGUL SYLLABLE THIEUTH YE IEUNG + {0xB770, 0xD19A}, //9232 #HANGUL SYLLABLE THIEUTH YE CIEUC + {0xB771, 0xD19B}, //9233 #HANGUL SYLLABLE THIEUTH YE CHIEUCH + {0xB772, 0xD19C}, //9234 #HANGUL SYLLABLE THIEUTH YE KHIEUKH + {0xB773, 0xD19D}, //9235 #HANGUL SYLLABLE THIEUTH YE THIEUTH + {0xB774, 0xD19E}, //9236 #HANGUL SYLLABLE THIEUTH YE PHIEUPH + {0xB775, 0xD19F}, //9237 #HANGUL SYLLABLE THIEUTH YE HIEUH + {0xB776, 0xD1A2}, //9238 #HANGUL SYLLABLE THIEUTH O SSANGKIYEOK + {0xB777, 0xD1A3}, //9239 #HANGUL SYLLABLE THIEUTH O KIYEOKSIOS + {0xB778, 0xD1A5}, //9240 #HANGUL SYLLABLE THIEUTH O NIEUNCIEUC + {0xB779, 0xD1A6}, //9241 #HANGUL SYLLABLE THIEUTH O NIEUNHIEUH + {0xB77A, 0xD1A7}, //9242 #HANGUL SYLLABLE THIEUTH O TIKEUT + {0xB781, 0xD1A9}, //9243 #HANGUL SYLLABLE THIEUTH O RIEULKIYEOK + {0xB782, 0xD1AA}, //9244 #HANGUL SYLLABLE THIEUTH O RIEULMIEUM + {0xB783, 0xD1AB}, //9245 #HANGUL SYLLABLE THIEUTH O RIEULPIEUP + {0xB784, 0xD1AC}, //9246 #HANGUL SYLLABLE THIEUTH O RIEULSIOS + {0xB785, 0xD1AD}, //9247 #HANGUL SYLLABLE THIEUTH O RIEULTHIEUTH + {0xB786, 0xD1AE}, //9248 #HANGUL SYLLABLE THIEUTH O RIEULPHIEUPH + {0xB787, 0xD1AF}, //9249 #HANGUL SYLLABLE THIEUTH O RIEULHIEUH + {0xB788, 0xD1B2}, //9250 #HANGUL SYLLABLE THIEUTH O PIEUPSIOS + {0xB789, 0xD1B4}, //9251 #HANGUL SYLLABLE THIEUTH O SSANGSIOS + {0xB78A, 0xD1B6}, //9252 #HANGUL SYLLABLE THIEUTH O CIEUC + {0xB78B, 0xD1B7}, //9253 #HANGUL SYLLABLE THIEUTH O CHIEUCH + {0xB78C, 0xD1B8}, //9254 #HANGUL SYLLABLE THIEUTH O KHIEUKH + {0xB78D, 0xD1B9}, //9255 #HANGUL SYLLABLE THIEUTH O THIEUTH + {0xB78E, 0xD1BB}, //9256 #HANGUL SYLLABLE THIEUTH O HIEUH + {0xB78F, 0xD1BD}, //9257 #HANGUL SYLLABLE THIEUTH WA KIYEOK + {0xB790, 0xD1BE}, //9258 #HANGUL SYLLABLE THIEUTH WA SSANGKIYEOK + {0xB791, 0xD1BF}, //9259 #HANGUL SYLLABLE THIEUTH WA KIYEOKSIOS + {0xB792, 0xD1C1}, //9260 #HANGUL SYLLABLE THIEUTH WA NIEUNCIEUC + {0xB793, 0xD1C2}, //9261 #HANGUL SYLLABLE THIEUTH WA NIEUNHIEUH + {0xB794, 0xD1C3}, //9262 #HANGUL SYLLABLE THIEUTH WA TIKEUT + {0xB795, 0xD1C4}, //9263 #HANGUL SYLLABLE THIEUTH WA RIEUL + {0xB796, 0xD1C5}, //9264 #HANGUL SYLLABLE THIEUTH WA RIEULKIYEOK + {0xB797, 0xD1C6}, //9265 #HANGUL SYLLABLE THIEUTH WA RIEULMIEUM + {0xB798, 0xD1C7}, //9266 #HANGUL SYLLABLE THIEUTH WA RIEULPIEUP + {0xB799, 0xD1C8}, //9267 #HANGUL SYLLABLE THIEUTH WA RIEULSIOS + {0xB79A, 0xD1C9}, //9268 #HANGUL SYLLABLE THIEUTH WA RIEULTHIEUTH + {0xB79B, 0xD1CA}, //9269 #HANGUL SYLLABLE THIEUTH WA RIEULPHIEUPH + {0xB79C, 0xD1CB}, //9270 #HANGUL SYLLABLE THIEUTH WA RIEULHIEUH + {0xB79D, 0xD1CC}, //9271 #HANGUL SYLLABLE THIEUTH WA MIEUM + {0xB79E, 0xD1CD}, //9272 #HANGUL SYLLABLE THIEUTH WA PIEUP + {0xB79F, 0xD1CE}, //9273 #HANGUL SYLLABLE THIEUTH WA PIEUPSIOS + {0xB7A0, 0xD1CF}, //9274 #HANGUL SYLLABLE THIEUTH WA SIOS + {0xB7A1, 0xB798}, //9275 #HANGUL SYLLABLE RIEUL AE + {0xB7A2, 0xB799}, //9276 #HANGUL SYLLABLE RIEUL AE KIYEOK + {0xB7A3, 0xB79C}, //9277 #HANGUL SYLLABLE RIEUL AE NIEUN + {0xB7A4, 0xB7A0}, //9278 #HANGUL SYLLABLE RIEUL AE RIEUL + {0xB7A5, 0xB7A8}, //9279 #HANGUL SYLLABLE RIEUL AE MIEUM + {0xB7A6, 0xB7A9}, //9280 #HANGUL SYLLABLE RIEUL AE PIEUP + {0xB7A7, 0xB7AB}, //9281 #HANGUL SYLLABLE RIEUL AE SIOS + {0xB7A8, 0xB7AC}, //9282 #HANGUL SYLLABLE RIEUL AE SSANGSIOS + {0xB7A9, 0xB7AD}, //9283 #HANGUL SYLLABLE RIEUL AE IEUNG + {0xB7AA, 0xB7B4}, //9284 #HANGUL SYLLABLE RIEUL YA + {0xB7AB, 0xB7B5}, //9285 #HANGUL SYLLABLE RIEUL YA KIYEOK + {0xB7AC, 0xB7B8}, //9286 #HANGUL SYLLABLE RIEUL YA NIEUN + {0xB7AD, 0xB7C7}, //9287 #HANGUL SYLLABLE RIEUL YA SIOS + {0xB7AE, 0xB7C9}, //9288 #HANGUL SYLLABLE RIEUL YA IEUNG + {0xB7AF, 0xB7EC}, //9289 #HANGUL SYLLABLE RIEUL EO + {0xB7B0, 0xB7ED}, //9290 #HANGUL SYLLABLE RIEUL EO KIYEOK + {0xB7B1, 0xB7F0}, //9291 #HANGUL SYLLABLE RIEUL EO NIEUN + {0xB7B2, 0xB7F4}, //9292 #HANGUL SYLLABLE RIEUL EO RIEUL + {0xB7B3, 0xB7FC}, //9293 #HANGUL SYLLABLE RIEUL EO MIEUM + {0xB7B4, 0xB7FD}, //9294 #HANGUL SYLLABLE RIEUL EO PIEUP + {0xB7B5, 0xB7FF}, //9295 #HANGUL SYLLABLE RIEUL EO SIOS + {0xB7B6, 0xB800}, //9296 #HANGUL SYLLABLE RIEUL EO SSANGSIOS + {0xB7B7, 0xB801}, //9297 #HANGUL SYLLABLE RIEUL EO IEUNG + {0xB7B8, 0xB807}, //9298 #HANGUL SYLLABLE RIEUL EO HIEUH + {0xB7B9, 0xB808}, //9299 #HANGUL SYLLABLE RIEUL E + {0xB7BA, 0xB809}, //9300 #HANGUL SYLLABLE RIEUL E KIYEOK + {0xB7BB, 0xB80C}, //9301 #HANGUL SYLLABLE RIEUL E NIEUN + {0xB7BC, 0xB810}, //9302 #HANGUL SYLLABLE RIEUL E RIEUL + {0xB7BD, 0xB818}, //9303 #HANGUL SYLLABLE RIEUL E MIEUM + {0xB7BE, 0xB819}, //9304 #HANGUL SYLLABLE RIEUL E PIEUP + {0xB7BF, 0xB81B}, //9305 #HANGUL SYLLABLE RIEUL E SIOS + {0xB7C0, 0xB81D}, //9306 #HANGUL SYLLABLE RIEUL E IEUNG + {0xB7C1, 0xB824}, //9307 #HANGUL SYLLABLE RIEUL YEO + {0xB7C2, 0xB825}, //9308 #HANGUL SYLLABLE RIEUL YEO KIYEOK + {0xB7C3, 0xB828}, //9309 #HANGUL SYLLABLE RIEUL YEO NIEUN + {0xB7C4, 0xB82C}, //9310 #HANGUL SYLLABLE RIEUL YEO RIEUL + {0xB7C5, 0xB834}, //9311 #HANGUL SYLLABLE RIEUL YEO MIEUM + {0xB7C6, 0xB835}, //9312 #HANGUL SYLLABLE RIEUL YEO PIEUP + {0xB7C7, 0xB837}, //9313 #HANGUL SYLLABLE RIEUL YEO SIOS + {0xB7C8, 0xB838}, //9314 #HANGUL SYLLABLE RIEUL YEO SSANGSIOS + {0xB7C9, 0xB839}, //9315 #HANGUL SYLLABLE RIEUL YEO IEUNG + {0xB7CA, 0xB840}, //9316 #HANGUL SYLLABLE RIEUL YE + {0xB7CB, 0xB844}, //9317 #HANGUL SYLLABLE RIEUL YE NIEUN + {0xB7CC, 0xB851}, //9318 #HANGUL SYLLABLE RIEUL YE PIEUP + {0xB7CD, 0xB853}, //9319 #HANGUL SYLLABLE RIEUL YE SIOS + {0xB7CE, 0xB85C}, //9320 #HANGUL SYLLABLE RIEUL O + {0xB7CF, 0xB85D}, //9321 #HANGUL SYLLABLE RIEUL O KIYEOK + {0xB7D0, 0xB860}, //9322 #HANGUL SYLLABLE RIEUL O NIEUN + {0xB7D1, 0xB864}, //9323 #HANGUL SYLLABLE RIEUL O RIEUL + {0xB7D2, 0xB86C}, //9324 #HANGUL SYLLABLE RIEUL O MIEUM + {0xB7D3, 0xB86D}, //9325 #HANGUL SYLLABLE RIEUL O PIEUP + {0xB7D4, 0xB86F}, //9326 #HANGUL SYLLABLE RIEUL O SIOS + {0xB7D5, 0xB871}, //9327 #HANGUL SYLLABLE RIEUL O IEUNG + {0xB7D6, 0xB878}, //9328 #HANGUL SYLLABLE RIEUL WA + {0xB7D7, 0xB87C}, //9329 #HANGUL SYLLABLE RIEUL WA NIEUN + {0xB7D8, 0xB88D}, //9330 #HANGUL SYLLABLE RIEUL WA IEUNG + {0xB7D9, 0xB8A8}, //9331 #HANGUL SYLLABLE RIEUL WAE SSANGSIOS + {0xB7DA, 0xB8B0}, //9332 #HANGUL SYLLABLE RIEUL OE + {0xB7DB, 0xB8B4}, //9333 #HANGUL SYLLABLE RIEUL OE NIEUN + {0xB7DC, 0xB8B8}, //9334 #HANGUL SYLLABLE RIEUL OE RIEUL + {0xB7DD, 0xB8C0}, //9335 #HANGUL SYLLABLE RIEUL OE MIEUM + {0xB7DE, 0xB8C1}, //9336 #HANGUL SYLLABLE RIEUL OE PIEUP + {0xB7DF, 0xB8C3}, //9337 #HANGUL SYLLABLE RIEUL OE SIOS + {0xB7E0, 0xB8C5}, //9338 #HANGUL SYLLABLE RIEUL OE IEUNG + {0xB7E1, 0xB8CC}, //9339 #HANGUL SYLLABLE RIEUL YO + {0xB7E2, 0xB8D0}, //9340 #HANGUL SYLLABLE RIEUL YO NIEUN + {0xB7E3, 0xB8D4}, //9341 #HANGUL SYLLABLE RIEUL YO RIEUL + {0xB7E4, 0xB8DD}, //9342 #HANGUL SYLLABLE RIEUL YO PIEUP + {0xB7E5, 0xB8DF}, //9343 #HANGUL SYLLABLE RIEUL YO SIOS + {0xB7E6, 0xB8E1}, //9344 #HANGUL SYLLABLE RIEUL YO IEUNG + {0xB7E7, 0xB8E8}, //9345 #HANGUL SYLLABLE RIEUL U + {0xB7E8, 0xB8E9}, //9346 #HANGUL SYLLABLE RIEUL U KIYEOK + {0xB7E9, 0xB8EC}, //9347 #HANGUL SYLLABLE RIEUL U NIEUN + {0xB7EA, 0xB8F0}, //9348 #HANGUL SYLLABLE RIEUL U RIEUL + {0xB7EB, 0xB8F8}, //9349 #HANGUL SYLLABLE RIEUL U MIEUM + {0xB7EC, 0xB8F9}, //9350 #HANGUL SYLLABLE RIEUL U PIEUP + {0xB7ED, 0xB8FB}, //9351 #HANGUL SYLLABLE RIEUL U SIOS + {0xB7EE, 0xB8FD}, //9352 #HANGUL SYLLABLE RIEUL U IEUNG + {0xB7EF, 0xB904}, //9353 #HANGUL SYLLABLE RIEUL WEO + {0xB7F0, 0xB918}, //9354 #HANGUL SYLLABLE RIEUL WEO SSANGSIOS + {0xB7F1, 0xB920}, //9355 #HANGUL SYLLABLE RIEUL WE + {0xB7F2, 0xB93C}, //9356 #HANGUL SYLLABLE RIEUL WI + {0xB7F3, 0xB93D}, //9357 #HANGUL SYLLABLE RIEUL WI KIYEOK + {0xB7F4, 0xB940}, //9358 #HANGUL SYLLABLE RIEUL WI NIEUN + {0xB7F5, 0xB944}, //9359 #HANGUL SYLLABLE RIEUL WI RIEUL + {0xB7F6, 0xB94C}, //9360 #HANGUL SYLLABLE RIEUL WI MIEUM + {0xB7F7, 0xB94F}, //9361 #HANGUL SYLLABLE RIEUL WI SIOS + {0xB7F8, 0xB951}, //9362 #HANGUL SYLLABLE RIEUL WI IEUNG + {0xB7F9, 0xB958}, //9363 #HANGUL SYLLABLE RIEUL YU + {0xB7FA, 0xB959}, //9364 #HANGUL SYLLABLE RIEUL YU KIYEOK + {0xB7FB, 0xB95C}, //9365 #HANGUL SYLLABLE RIEUL YU NIEUN + {0xB7FC, 0xB960}, //9366 #HANGUL SYLLABLE RIEUL YU RIEUL + {0xB7FD, 0xB968}, //9367 #HANGUL SYLLABLE RIEUL YU MIEUM + {0xB7FE, 0xB969}, //9368 #HANGUL SYLLABLE RIEUL YU PIEUP + {0xB841, 0xD1D0}, //9369 #HANGUL SYLLABLE THIEUTH WA SSANGSIOS + {0xB842, 0xD1D1}, //9370 #HANGUL SYLLABLE THIEUTH WA IEUNG + {0xB843, 0xD1D2}, //9371 #HANGUL SYLLABLE THIEUTH WA CIEUC + {0xB844, 0xD1D3}, //9372 #HANGUL SYLLABLE THIEUTH WA CHIEUCH + {0xB845, 0xD1D4}, //9373 #HANGUL SYLLABLE THIEUTH WA KHIEUKH + {0xB846, 0xD1D5}, //9374 #HANGUL SYLLABLE THIEUTH WA THIEUTH + {0xB847, 0xD1D6}, //9375 #HANGUL SYLLABLE THIEUTH WA PHIEUPH + {0xB848, 0xD1D7}, //9376 #HANGUL SYLLABLE THIEUTH WA HIEUH + {0xB849, 0xD1D9}, //9377 #HANGUL SYLLABLE THIEUTH WAE KIYEOK + {0xB84A, 0xD1DA}, //9378 #HANGUL SYLLABLE THIEUTH WAE SSANGKIYEOK + {0xB84B, 0xD1DB}, //9379 #HANGUL SYLLABLE THIEUTH WAE KIYEOKSIOS + {0xB84C, 0xD1DC}, //9380 #HANGUL SYLLABLE THIEUTH WAE NIEUN + {0xB84D, 0xD1DD}, //9381 #HANGUL SYLLABLE THIEUTH WAE NIEUNCIEUC + {0xB84E, 0xD1DE}, //9382 #HANGUL SYLLABLE THIEUTH WAE NIEUNHIEUH + {0xB84F, 0xD1DF}, //9383 #HANGUL SYLLABLE THIEUTH WAE TIKEUT + {0xB850, 0xD1E0}, //9384 #HANGUL SYLLABLE THIEUTH WAE RIEUL + {0xB851, 0xD1E1}, //9385 #HANGUL SYLLABLE THIEUTH WAE RIEULKIYEOK + {0xB852, 0xD1E2}, //9386 #HANGUL SYLLABLE THIEUTH WAE RIEULMIEUM + {0xB853, 0xD1E3}, //9387 #HANGUL SYLLABLE THIEUTH WAE RIEULPIEUP + {0xB854, 0xD1E4}, //9388 #HANGUL SYLLABLE THIEUTH WAE RIEULSIOS + {0xB855, 0xD1E5}, //9389 #HANGUL SYLLABLE THIEUTH WAE RIEULTHIEUTH + {0xB856, 0xD1E6}, //9390 #HANGUL SYLLABLE THIEUTH WAE RIEULPHIEUPH + {0xB857, 0xD1E7}, //9391 #HANGUL SYLLABLE THIEUTH WAE RIEULHIEUH + {0xB858, 0xD1E8}, //9392 #HANGUL SYLLABLE THIEUTH WAE MIEUM + {0xB859, 0xD1E9}, //9393 #HANGUL SYLLABLE THIEUTH WAE PIEUP + {0xB85A, 0xD1EA}, //9394 #HANGUL SYLLABLE THIEUTH WAE PIEUPSIOS + {0xB861, 0xD1EB}, //9395 #HANGUL SYLLABLE THIEUTH WAE SIOS + {0xB862, 0xD1EC}, //9396 #HANGUL SYLLABLE THIEUTH WAE SSANGSIOS + {0xB863, 0xD1ED}, //9397 #HANGUL SYLLABLE THIEUTH WAE IEUNG + {0xB864, 0xD1EE}, //9398 #HANGUL SYLLABLE THIEUTH WAE CIEUC + {0xB865, 0xD1EF}, //9399 #HANGUL SYLLABLE THIEUTH WAE CHIEUCH + {0xB866, 0xD1F0}, //9400 #HANGUL SYLLABLE THIEUTH WAE KHIEUKH + {0xB867, 0xD1F1}, //9401 #HANGUL SYLLABLE THIEUTH WAE THIEUTH + {0xB868, 0xD1F2}, //9402 #HANGUL SYLLABLE THIEUTH WAE PHIEUPH + {0xB869, 0xD1F3}, //9403 #HANGUL SYLLABLE THIEUTH WAE HIEUH + {0xB86A, 0xD1F5}, //9404 #HANGUL SYLLABLE THIEUTH OE KIYEOK + {0xB86B, 0xD1F6}, //9405 #HANGUL SYLLABLE THIEUTH OE SSANGKIYEOK + {0xB86C, 0xD1F7}, //9406 #HANGUL SYLLABLE THIEUTH OE KIYEOKSIOS + {0xB86D, 0xD1F9}, //9407 #HANGUL SYLLABLE THIEUTH OE NIEUNCIEUC + {0xB86E, 0xD1FA}, //9408 #HANGUL SYLLABLE THIEUTH OE NIEUNHIEUH + {0xB86F, 0xD1FB}, //9409 #HANGUL SYLLABLE THIEUTH OE TIKEUT + {0xB870, 0xD1FC}, //9410 #HANGUL SYLLABLE THIEUTH OE RIEUL + {0xB871, 0xD1FD}, //9411 #HANGUL SYLLABLE THIEUTH OE RIEULKIYEOK + {0xB872, 0xD1FE}, //9412 #HANGUL SYLLABLE THIEUTH OE RIEULMIEUM + {0xB873, 0xD1FF}, //9413 #HANGUL SYLLABLE THIEUTH OE RIEULPIEUP + {0xB874, 0xD200}, //9414 #HANGUL SYLLABLE THIEUTH OE RIEULSIOS + {0xB875, 0xD201}, //9415 #HANGUL SYLLABLE THIEUTH OE RIEULTHIEUTH + {0xB876, 0xD202}, //9416 #HANGUL SYLLABLE THIEUTH OE RIEULPHIEUPH + {0xB877, 0xD203}, //9417 #HANGUL SYLLABLE THIEUTH OE RIEULHIEUH + {0xB878, 0xD204}, //9418 #HANGUL SYLLABLE THIEUTH OE MIEUM + {0xB879, 0xD205}, //9419 #HANGUL SYLLABLE THIEUTH OE PIEUP + {0xB87A, 0xD206}, //9420 #HANGUL SYLLABLE THIEUTH OE PIEUPSIOS + {0xB881, 0xD208}, //9421 #HANGUL SYLLABLE THIEUTH OE SSANGSIOS + {0xB882, 0xD20A}, //9422 #HANGUL SYLLABLE THIEUTH OE CIEUC + {0xB883, 0xD20B}, //9423 #HANGUL SYLLABLE THIEUTH OE CHIEUCH + {0xB884, 0xD20C}, //9424 #HANGUL SYLLABLE THIEUTH OE KHIEUKH + {0xB885, 0xD20D}, //9425 #HANGUL SYLLABLE THIEUTH OE THIEUTH + {0xB886, 0xD20E}, //9426 #HANGUL SYLLABLE THIEUTH OE PHIEUPH + {0xB887, 0xD20F}, //9427 #HANGUL SYLLABLE THIEUTH OE HIEUH + {0xB888, 0xD211}, //9428 #HANGUL SYLLABLE THIEUTH YO KIYEOK + {0xB889, 0xD212}, //9429 #HANGUL SYLLABLE THIEUTH YO SSANGKIYEOK + {0xB88A, 0xD213}, //9430 #HANGUL SYLLABLE THIEUTH YO KIYEOKSIOS + {0xB88B, 0xD214}, //9431 #HANGUL SYLLABLE THIEUTH YO NIEUN + {0xB88C, 0xD215}, //9432 #HANGUL SYLLABLE THIEUTH YO NIEUNCIEUC + {0xB88D, 0xD216}, //9433 #HANGUL SYLLABLE THIEUTH YO NIEUNHIEUH + {0xB88E, 0xD217}, //9434 #HANGUL SYLLABLE THIEUTH YO TIKEUT + {0xB88F, 0xD218}, //9435 #HANGUL SYLLABLE THIEUTH YO RIEUL + {0xB890, 0xD219}, //9436 #HANGUL SYLLABLE THIEUTH YO RIEULKIYEOK + {0xB891, 0xD21A}, //9437 #HANGUL SYLLABLE THIEUTH YO RIEULMIEUM + {0xB892, 0xD21B}, //9438 #HANGUL SYLLABLE THIEUTH YO RIEULPIEUP + {0xB893, 0xD21C}, //9439 #HANGUL SYLLABLE THIEUTH YO RIEULSIOS + {0xB894, 0xD21D}, //9440 #HANGUL SYLLABLE THIEUTH YO RIEULTHIEUTH + {0xB895, 0xD21E}, //9441 #HANGUL SYLLABLE THIEUTH YO RIEULPHIEUPH + {0xB896, 0xD21F}, //9442 #HANGUL SYLLABLE THIEUTH YO RIEULHIEUH + {0xB897, 0xD220}, //9443 #HANGUL SYLLABLE THIEUTH YO MIEUM + {0xB898, 0xD221}, //9444 #HANGUL SYLLABLE THIEUTH YO PIEUP + {0xB899, 0xD222}, //9445 #HANGUL SYLLABLE THIEUTH YO PIEUPSIOS + {0xB89A, 0xD223}, //9446 #HANGUL SYLLABLE THIEUTH YO SIOS + {0xB89B, 0xD224}, //9447 #HANGUL SYLLABLE THIEUTH YO SSANGSIOS + {0xB89C, 0xD225}, //9448 #HANGUL SYLLABLE THIEUTH YO IEUNG + {0xB89D, 0xD226}, //9449 #HANGUL SYLLABLE THIEUTH YO CIEUC + {0xB89E, 0xD227}, //9450 #HANGUL SYLLABLE THIEUTH YO CHIEUCH + {0xB89F, 0xD228}, //9451 #HANGUL SYLLABLE THIEUTH YO KHIEUKH + {0xB8A0, 0xD229}, //9452 #HANGUL SYLLABLE THIEUTH YO THIEUTH + {0xB8A1, 0xB96B}, //9453 #HANGUL SYLLABLE RIEUL YU SIOS + {0xB8A2, 0xB96D}, //9454 #HANGUL SYLLABLE RIEUL YU IEUNG + {0xB8A3, 0xB974}, //9455 #HANGUL SYLLABLE RIEUL EU + {0xB8A4, 0xB975}, //9456 #HANGUL SYLLABLE RIEUL EU KIYEOK + {0xB8A5, 0xB978}, //9457 #HANGUL SYLLABLE RIEUL EU NIEUN + {0xB8A6, 0xB97C}, //9458 #HANGUL SYLLABLE RIEUL EU RIEUL + {0xB8A7, 0xB984}, //9459 #HANGUL SYLLABLE RIEUL EU MIEUM + {0xB8A8, 0xB985}, //9460 #HANGUL SYLLABLE RIEUL EU PIEUP + {0xB8A9, 0xB987}, //9461 #HANGUL SYLLABLE RIEUL EU SIOS + {0xB8AA, 0xB989}, //9462 #HANGUL SYLLABLE RIEUL EU IEUNG + {0xB8AB, 0xB98A}, //9463 #HANGUL SYLLABLE RIEUL EU CIEUC + {0xB8AC, 0xB98D}, //9464 #HANGUL SYLLABLE RIEUL EU THIEUTH + {0xB8AD, 0xB98E}, //9465 #HANGUL SYLLABLE RIEUL EU PHIEUPH + {0xB8AE, 0xB9AC}, //9466 #HANGUL SYLLABLE RIEUL I + {0xB8AF, 0xB9AD}, //9467 #HANGUL SYLLABLE RIEUL I KIYEOK + {0xB8B0, 0xB9B0}, //9468 #HANGUL SYLLABLE RIEUL I NIEUN + {0xB8B1, 0xB9B4}, //9469 #HANGUL SYLLABLE RIEUL I RIEUL + {0xB8B2, 0xB9BC}, //9470 #HANGUL SYLLABLE RIEUL I MIEUM + {0xB8B3, 0xB9BD}, //9471 #HANGUL SYLLABLE RIEUL I PIEUP + {0xB8B4, 0xB9BF}, //9472 #HANGUL SYLLABLE RIEUL I SIOS + {0xB8B5, 0xB9C1}, //9473 #HANGUL SYLLABLE RIEUL I IEUNG + {0xB8B6, 0xB9C8}, //9474 #HANGUL SYLLABLE MIEUM A + {0xB8B7, 0xB9C9}, //9475 #HANGUL SYLLABLE MIEUM A KIYEOK + {0xB8B8, 0xB9CC}, //9476 #HANGUL SYLLABLE MIEUM A NIEUN + {0xB8B9, 0xB9CE}, //9477 #HANGUL SYLLABLE MIEUM A NIEUNHIEUH + {0xB8BA, 0xB9CF}, //9478 #HANGUL SYLLABLE MIEUM A TIKEUT + {0xB8BB, 0xB9D0}, //9479 #HANGUL SYLLABLE MIEUM A RIEUL + {0xB8BC, 0xB9D1}, //9480 #HANGUL SYLLABLE MIEUM A RIEULKIYEOK + {0xB8BD, 0xB9D2}, //9481 #HANGUL SYLLABLE MIEUM A RIEULMIEUM + {0xB8BE, 0xB9D8}, //9482 #HANGUL SYLLABLE MIEUM A MIEUM + {0xB8BF, 0xB9D9}, //9483 #HANGUL SYLLABLE MIEUM A PIEUP + {0xB8C0, 0xB9DB}, //9484 #HANGUL SYLLABLE MIEUM A SIOS + {0xB8C1, 0xB9DD}, //9485 #HANGUL SYLLABLE MIEUM A IEUNG + {0xB8C2, 0xB9DE}, //9486 #HANGUL SYLLABLE MIEUM A CIEUC + {0xB8C3, 0xB9E1}, //9487 #HANGUL SYLLABLE MIEUM A THIEUTH + {0xB8C4, 0xB9E3}, //9488 #HANGUL SYLLABLE MIEUM A HIEUH + {0xB8C5, 0xB9E4}, //9489 #HANGUL SYLLABLE MIEUM AE + {0xB8C6, 0xB9E5}, //9490 #HANGUL SYLLABLE MIEUM AE KIYEOK + {0xB8C7, 0xB9E8}, //9491 #HANGUL SYLLABLE MIEUM AE NIEUN + {0xB8C8, 0xB9EC}, //9492 #HANGUL SYLLABLE MIEUM AE RIEUL + {0xB8C9, 0xB9F4}, //9493 #HANGUL SYLLABLE MIEUM AE MIEUM + {0xB8CA, 0xB9F5}, //9494 #HANGUL SYLLABLE MIEUM AE PIEUP + {0xB8CB, 0xB9F7}, //9495 #HANGUL SYLLABLE MIEUM AE SIOS + {0xB8CC, 0xB9F8}, //9496 #HANGUL SYLLABLE MIEUM AE SSANGSIOS + {0xB8CD, 0xB9F9}, //9497 #HANGUL SYLLABLE MIEUM AE IEUNG + {0xB8CE, 0xB9FA}, //9498 #HANGUL SYLLABLE MIEUM AE CIEUC + {0xB8CF, 0xBA00}, //9499 #HANGUL SYLLABLE MIEUM YA + {0xB8D0, 0xBA01}, //9500 #HANGUL SYLLABLE MIEUM YA KIYEOK + {0xB8D1, 0xBA08}, //9501 #HANGUL SYLLABLE MIEUM YA RIEUL + {0xB8D2, 0xBA15}, //9502 #HANGUL SYLLABLE MIEUM YA IEUNG + {0xB8D3, 0xBA38}, //9503 #HANGUL SYLLABLE MIEUM EO + {0xB8D4, 0xBA39}, //9504 #HANGUL SYLLABLE MIEUM EO KIYEOK + {0xB8D5, 0xBA3C}, //9505 #HANGUL SYLLABLE MIEUM EO NIEUN + {0xB8D6, 0xBA40}, //9506 #HANGUL SYLLABLE MIEUM EO RIEUL + {0xB8D7, 0xBA42}, //9507 #HANGUL SYLLABLE MIEUM EO RIEULMIEUM + {0xB8D8, 0xBA48}, //9508 #HANGUL SYLLABLE MIEUM EO MIEUM + {0xB8D9, 0xBA49}, //9509 #HANGUL SYLLABLE MIEUM EO PIEUP + {0xB8DA, 0xBA4B}, //9510 #HANGUL SYLLABLE MIEUM EO SIOS + {0xB8DB, 0xBA4D}, //9511 #HANGUL SYLLABLE MIEUM EO IEUNG + {0xB8DC, 0xBA4E}, //9512 #HANGUL SYLLABLE MIEUM EO CIEUC + {0xB8DD, 0xBA53}, //9513 #HANGUL SYLLABLE MIEUM EO HIEUH + {0xB8DE, 0xBA54}, //9514 #HANGUL SYLLABLE MIEUM E + {0xB8DF, 0xBA55}, //9515 #HANGUL SYLLABLE MIEUM E KIYEOK + {0xB8E0, 0xBA58}, //9516 #HANGUL SYLLABLE MIEUM E NIEUN + {0xB8E1, 0xBA5C}, //9517 #HANGUL SYLLABLE MIEUM E RIEUL + {0xB8E2, 0xBA64}, //9518 #HANGUL SYLLABLE MIEUM E MIEUM + {0xB8E3, 0xBA65}, //9519 #HANGUL SYLLABLE MIEUM E PIEUP + {0xB8E4, 0xBA67}, //9520 #HANGUL SYLLABLE MIEUM E SIOS + {0xB8E5, 0xBA68}, //9521 #HANGUL SYLLABLE MIEUM E SSANGSIOS + {0xB8E6, 0xBA69}, //9522 #HANGUL SYLLABLE MIEUM E IEUNG + {0xB8E7, 0xBA70}, //9523 #HANGUL SYLLABLE MIEUM YEO + {0xB8E8, 0xBA71}, //9524 #HANGUL SYLLABLE MIEUM YEO KIYEOK + {0xB8E9, 0xBA74}, //9525 #HANGUL SYLLABLE MIEUM YEO NIEUN + {0xB8EA, 0xBA78}, //9526 #HANGUL SYLLABLE MIEUM YEO RIEUL + {0xB8EB, 0xBA83}, //9527 #HANGUL SYLLABLE MIEUM YEO SIOS + {0xB8EC, 0xBA84}, //9528 #HANGUL SYLLABLE MIEUM YEO SSANGSIOS + {0xB8ED, 0xBA85}, //9529 #HANGUL SYLLABLE MIEUM YEO IEUNG + {0xB8EE, 0xBA87}, //9530 #HANGUL SYLLABLE MIEUM YEO CHIEUCH + {0xB8EF, 0xBA8C}, //9531 #HANGUL SYLLABLE MIEUM YE + {0xB8F0, 0xBAA8}, //9532 #HANGUL SYLLABLE MIEUM O + {0xB8F1, 0xBAA9}, //9533 #HANGUL SYLLABLE MIEUM O KIYEOK + {0xB8F2, 0xBAAB}, //9534 #HANGUL SYLLABLE MIEUM O KIYEOKSIOS + {0xB8F3, 0xBAAC}, //9535 #HANGUL SYLLABLE MIEUM O NIEUN + {0xB8F4, 0xBAB0}, //9536 #HANGUL SYLLABLE MIEUM O RIEUL + {0xB8F5, 0xBAB2}, //9537 #HANGUL SYLLABLE MIEUM O RIEULMIEUM + {0xB8F6, 0xBAB8}, //9538 #HANGUL SYLLABLE MIEUM O MIEUM + {0xB8F7, 0xBAB9}, //9539 #HANGUL SYLLABLE MIEUM O PIEUP + {0xB8F8, 0xBABB}, //9540 #HANGUL SYLLABLE MIEUM O SIOS + {0xB8F9, 0xBABD}, //9541 #HANGUL SYLLABLE MIEUM O IEUNG + {0xB8FA, 0xBAC4}, //9542 #HANGUL SYLLABLE MIEUM WA + {0xB8FB, 0xBAC8}, //9543 #HANGUL SYLLABLE MIEUM WA NIEUN + {0xB8FC, 0xBAD8}, //9544 #HANGUL SYLLABLE MIEUM WA SSANGSIOS + {0xB8FD, 0xBAD9}, //9545 #HANGUL SYLLABLE MIEUM WA IEUNG + {0xB8FE, 0xBAFC}, //9546 #HANGUL SYLLABLE MIEUM OE + {0xB941, 0xD22A}, //9547 #HANGUL SYLLABLE THIEUTH YO PHIEUPH + {0xB942, 0xD22B}, //9548 #HANGUL SYLLABLE THIEUTH YO HIEUH + {0xB943, 0xD22E}, //9549 #HANGUL SYLLABLE THIEUTH U SSANGKIYEOK + {0xB944, 0xD22F}, //9550 #HANGUL SYLLABLE THIEUTH U KIYEOKSIOS + {0xB945, 0xD231}, //9551 #HANGUL SYLLABLE THIEUTH U NIEUNCIEUC + {0xB946, 0xD232}, //9552 #HANGUL SYLLABLE THIEUTH U NIEUNHIEUH + {0xB947, 0xD233}, //9553 #HANGUL SYLLABLE THIEUTH U TIKEUT + {0xB948, 0xD235}, //9554 #HANGUL SYLLABLE THIEUTH U RIEULKIYEOK + {0xB949, 0xD236}, //9555 #HANGUL SYLLABLE THIEUTH U RIEULMIEUM + {0xB94A, 0xD237}, //9556 #HANGUL SYLLABLE THIEUTH U RIEULPIEUP + {0xB94B, 0xD238}, //9557 #HANGUL SYLLABLE THIEUTH U RIEULSIOS + {0xB94C, 0xD239}, //9558 #HANGUL SYLLABLE THIEUTH U RIEULTHIEUTH + {0xB94D, 0xD23A}, //9559 #HANGUL SYLLABLE THIEUTH U RIEULPHIEUPH + {0xB94E, 0xD23B}, //9560 #HANGUL SYLLABLE THIEUTH U RIEULHIEUH + {0xB94F, 0xD23E}, //9561 #HANGUL SYLLABLE THIEUTH U PIEUPSIOS + {0xB950, 0xD240}, //9562 #HANGUL SYLLABLE THIEUTH U SSANGSIOS + {0xB951, 0xD242}, //9563 #HANGUL SYLLABLE THIEUTH U CIEUC + {0xB952, 0xD243}, //9564 #HANGUL SYLLABLE THIEUTH U CHIEUCH + {0xB953, 0xD244}, //9565 #HANGUL SYLLABLE THIEUTH U KHIEUKH + {0xB954, 0xD245}, //9566 #HANGUL SYLLABLE THIEUTH U THIEUTH + {0xB955, 0xD246}, //9567 #HANGUL SYLLABLE THIEUTH U PHIEUPH + {0xB956, 0xD247}, //9568 #HANGUL SYLLABLE THIEUTH U HIEUH + {0xB957, 0xD249}, //9569 #HANGUL SYLLABLE THIEUTH WEO KIYEOK + {0xB958, 0xD24A}, //9570 #HANGUL SYLLABLE THIEUTH WEO SSANGKIYEOK + {0xB959, 0xD24B}, //9571 #HANGUL SYLLABLE THIEUTH WEO KIYEOKSIOS + {0xB95A, 0xD24C}, //9572 #HANGUL SYLLABLE THIEUTH WEO NIEUN + {0xB961, 0xD24D}, //9573 #HANGUL SYLLABLE THIEUTH WEO NIEUNCIEUC + {0xB962, 0xD24E}, //9574 #HANGUL SYLLABLE THIEUTH WEO NIEUNHIEUH + {0xB963, 0xD24F}, //9575 #HANGUL SYLLABLE THIEUTH WEO TIKEUT + {0xB964, 0xD250}, //9576 #HANGUL SYLLABLE THIEUTH WEO RIEUL + {0xB965, 0xD251}, //9577 #HANGUL SYLLABLE THIEUTH WEO RIEULKIYEOK + {0xB966, 0xD252}, //9578 #HANGUL SYLLABLE THIEUTH WEO RIEULMIEUM + {0xB967, 0xD253}, //9579 #HANGUL SYLLABLE THIEUTH WEO RIEULPIEUP + {0xB968, 0xD254}, //9580 #HANGUL SYLLABLE THIEUTH WEO RIEULSIOS + {0xB969, 0xD255}, //9581 #HANGUL SYLLABLE THIEUTH WEO RIEULTHIEUTH + {0xB96A, 0xD256}, //9582 #HANGUL SYLLABLE THIEUTH WEO RIEULPHIEUPH + {0xB96B, 0xD257}, //9583 #HANGUL SYLLABLE THIEUTH WEO RIEULHIEUH + {0xB96C, 0xD258}, //9584 #HANGUL SYLLABLE THIEUTH WEO MIEUM + {0xB96D, 0xD259}, //9585 #HANGUL SYLLABLE THIEUTH WEO PIEUP + {0xB96E, 0xD25A}, //9586 #HANGUL SYLLABLE THIEUTH WEO PIEUPSIOS + {0xB96F, 0xD25B}, //9587 #HANGUL SYLLABLE THIEUTH WEO SIOS + {0xB970, 0xD25D}, //9588 #HANGUL SYLLABLE THIEUTH WEO IEUNG + {0xB971, 0xD25E}, //9589 #HANGUL SYLLABLE THIEUTH WEO CIEUC + {0xB972, 0xD25F}, //9590 #HANGUL SYLLABLE THIEUTH WEO CHIEUCH + {0xB973, 0xD260}, //9591 #HANGUL SYLLABLE THIEUTH WEO KHIEUKH + {0xB974, 0xD261}, //9592 #HANGUL SYLLABLE THIEUTH WEO THIEUTH + {0xB975, 0xD262}, //9593 #HANGUL SYLLABLE THIEUTH WEO PHIEUPH + {0xB976, 0xD263}, //9594 #HANGUL SYLLABLE THIEUTH WEO HIEUH + {0xB977, 0xD265}, //9595 #HANGUL SYLLABLE THIEUTH WE KIYEOK + {0xB978, 0xD266}, //9596 #HANGUL SYLLABLE THIEUTH WE SSANGKIYEOK + {0xB979, 0xD267}, //9597 #HANGUL SYLLABLE THIEUTH WE KIYEOKSIOS + {0xB97A, 0xD268}, //9598 #HANGUL SYLLABLE THIEUTH WE NIEUN + {0xB981, 0xD269}, //9599 #HANGUL SYLLABLE THIEUTH WE NIEUNCIEUC + {0xB982, 0xD26A}, //9600 #HANGUL SYLLABLE THIEUTH WE NIEUNHIEUH + {0xB983, 0xD26B}, //9601 #HANGUL SYLLABLE THIEUTH WE TIKEUT + {0xB984, 0xD26C}, //9602 #HANGUL SYLLABLE THIEUTH WE RIEUL + {0xB985, 0xD26D}, //9603 #HANGUL SYLLABLE THIEUTH WE RIEULKIYEOK + {0xB986, 0xD26E}, //9604 #HANGUL SYLLABLE THIEUTH WE RIEULMIEUM + {0xB987, 0xD26F}, //9605 #HANGUL SYLLABLE THIEUTH WE RIEULPIEUP + {0xB988, 0xD270}, //9606 #HANGUL SYLLABLE THIEUTH WE RIEULSIOS + {0xB989, 0xD271}, //9607 #HANGUL SYLLABLE THIEUTH WE RIEULTHIEUTH + {0xB98A, 0xD272}, //9608 #HANGUL SYLLABLE THIEUTH WE RIEULPHIEUPH + {0xB98B, 0xD273}, //9609 #HANGUL SYLLABLE THIEUTH WE RIEULHIEUH + {0xB98C, 0xD274}, //9610 #HANGUL SYLLABLE THIEUTH WE MIEUM + {0xB98D, 0xD275}, //9611 #HANGUL SYLLABLE THIEUTH WE PIEUP + {0xB98E, 0xD276}, //9612 #HANGUL SYLLABLE THIEUTH WE PIEUPSIOS + {0xB98F, 0xD277}, //9613 #HANGUL SYLLABLE THIEUTH WE SIOS + {0xB990, 0xD278}, //9614 #HANGUL SYLLABLE THIEUTH WE SSANGSIOS + {0xB991, 0xD279}, //9615 #HANGUL SYLLABLE THIEUTH WE IEUNG + {0xB992, 0xD27A}, //9616 #HANGUL SYLLABLE THIEUTH WE CIEUC + {0xB993, 0xD27B}, //9617 #HANGUL SYLLABLE THIEUTH WE CHIEUCH + {0xB994, 0xD27C}, //9618 #HANGUL SYLLABLE THIEUTH WE KHIEUKH + {0xB995, 0xD27D}, //9619 #HANGUL SYLLABLE THIEUTH WE THIEUTH + {0xB996, 0xD27E}, //9620 #HANGUL SYLLABLE THIEUTH WE PHIEUPH + {0xB997, 0xD27F}, //9621 #HANGUL SYLLABLE THIEUTH WE HIEUH + {0xB998, 0xD282}, //9622 #HANGUL SYLLABLE THIEUTH WI SSANGKIYEOK + {0xB999, 0xD283}, //9623 #HANGUL SYLLABLE THIEUTH WI KIYEOKSIOS + {0xB99A, 0xD285}, //9624 #HANGUL SYLLABLE THIEUTH WI NIEUNCIEUC + {0xB99B, 0xD286}, //9625 #HANGUL SYLLABLE THIEUTH WI NIEUNHIEUH + {0xB99C, 0xD287}, //9626 #HANGUL SYLLABLE THIEUTH WI TIKEUT + {0xB99D, 0xD289}, //9627 #HANGUL SYLLABLE THIEUTH WI RIEULKIYEOK + {0xB99E, 0xD28A}, //9628 #HANGUL SYLLABLE THIEUTH WI RIEULMIEUM + {0xB99F, 0xD28B}, //9629 #HANGUL SYLLABLE THIEUTH WI RIEULPIEUP + {0xB9A0, 0xD28C}, //9630 #HANGUL SYLLABLE THIEUTH WI RIEULSIOS + {0xB9A1, 0xBB00}, //9631 #HANGUL SYLLABLE MIEUM OE NIEUN + {0xB9A2, 0xBB04}, //9632 #HANGUL SYLLABLE MIEUM OE RIEUL + {0xB9A3, 0xBB0D}, //9633 #HANGUL SYLLABLE MIEUM OE PIEUP + {0xB9A4, 0xBB0F}, //9634 #HANGUL SYLLABLE MIEUM OE SIOS + {0xB9A5, 0xBB11}, //9635 #HANGUL SYLLABLE MIEUM OE IEUNG + {0xB9A6, 0xBB18}, //9636 #HANGUL SYLLABLE MIEUM YO + {0xB9A7, 0xBB1C}, //9637 #HANGUL SYLLABLE MIEUM YO NIEUN + {0xB9A8, 0xBB20}, //9638 #HANGUL SYLLABLE MIEUM YO RIEUL + {0xB9A9, 0xBB29}, //9639 #HANGUL SYLLABLE MIEUM YO PIEUP + {0xB9AA, 0xBB2B}, //9640 #HANGUL SYLLABLE MIEUM YO SIOS + {0xB9AB, 0xBB34}, //9641 #HANGUL SYLLABLE MIEUM U + {0xB9AC, 0xBB35}, //9642 #HANGUL SYLLABLE MIEUM U KIYEOK + {0xB9AD, 0xBB36}, //9643 #HANGUL SYLLABLE MIEUM U SSANGKIYEOK + {0xB9AE, 0xBB38}, //9644 #HANGUL SYLLABLE MIEUM U NIEUN + {0xB9AF, 0xBB3B}, //9645 #HANGUL SYLLABLE MIEUM U TIKEUT + {0xB9B0, 0xBB3C}, //9646 #HANGUL SYLLABLE MIEUM U RIEUL + {0xB9B1, 0xBB3D}, //9647 #HANGUL SYLLABLE MIEUM U RIEULKIYEOK + {0xB9B2, 0xBB3E}, //9648 #HANGUL SYLLABLE MIEUM U RIEULMIEUM + {0xB9B3, 0xBB44}, //9649 #HANGUL SYLLABLE MIEUM U MIEUM + {0xB9B4, 0xBB45}, //9650 #HANGUL SYLLABLE MIEUM U PIEUP + {0xB9B5, 0xBB47}, //9651 #HANGUL SYLLABLE MIEUM U SIOS + {0xB9B6, 0xBB49}, //9652 #HANGUL SYLLABLE MIEUM U IEUNG + {0xB9B7, 0xBB4D}, //9653 #HANGUL SYLLABLE MIEUM U THIEUTH + {0xB9B8, 0xBB4F}, //9654 #HANGUL SYLLABLE MIEUM U HIEUH + {0xB9B9, 0xBB50}, //9655 #HANGUL SYLLABLE MIEUM WEO + {0xB9BA, 0xBB54}, //9656 #HANGUL SYLLABLE MIEUM WEO NIEUN + {0xB9BB, 0xBB58}, //9657 #HANGUL SYLLABLE MIEUM WEO RIEUL + {0xB9BC, 0xBB61}, //9658 #HANGUL SYLLABLE MIEUM WEO PIEUP + {0xB9BD, 0xBB63}, //9659 #HANGUL SYLLABLE MIEUM WEO SIOS + {0xB9BE, 0xBB6C}, //9660 #HANGUL SYLLABLE MIEUM WE + {0xB9BF, 0xBB88}, //9661 #HANGUL SYLLABLE MIEUM WI + {0xB9C0, 0xBB8C}, //9662 #HANGUL SYLLABLE MIEUM WI NIEUN + {0xB9C1, 0xBB90}, //9663 #HANGUL SYLLABLE MIEUM WI RIEUL + {0xB9C2, 0xBBA4}, //9664 #HANGUL SYLLABLE MIEUM YU + {0xB9C3, 0xBBA8}, //9665 #HANGUL SYLLABLE MIEUM YU NIEUN + {0xB9C4, 0xBBAC}, //9666 #HANGUL SYLLABLE MIEUM YU RIEUL + {0xB9C5, 0xBBB4}, //9667 #HANGUL SYLLABLE MIEUM YU MIEUM + {0xB9C6, 0xBBB7}, //9668 #HANGUL SYLLABLE MIEUM YU SIOS + {0xB9C7, 0xBBC0}, //9669 #HANGUL SYLLABLE MIEUM EU + {0xB9C8, 0xBBC4}, //9670 #HANGUL SYLLABLE MIEUM EU NIEUN + {0xB9C9, 0xBBC8}, //9671 #HANGUL SYLLABLE MIEUM EU RIEUL + {0xB9CA, 0xBBD0}, //9672 #HANGUL SYLLABLE MIEUM EU MIEUM + {0xB9CB, 0xBBD3}, //9673 #HANGUL SYLLABLE MIEUM EU SIOS + {0xB9CC, 0xBBF8}, //9674 #HANGUL SYLLABLE MIEUM I + {0xB9CD, 0xBBF9}, //9675 #HANGUL SYLLABLE MIEUM I KIYEOK + {0xB9CE, 0xBBFC}, //9676 #HANGUL SYLLABLE MIEUM I NIEUN + {0xB9CF, 0xBBFF}, //9677 #HANGUL SYLLABLE MIEUM I TIKEUT + {0xB9D0, 0xBC00}, //9678 #HANGUL SYLLABLE MIEUM I RIEUL + {0xB9D1, 0xBC02}, //9679 #HANGUL SYLLABLE MIEUM I RIEULMIEUM + {0xB9D2, 0xBC08}, //9680 #HANGUL SYLLABLE MIEUM I MIEUM + {0xB9D3, 0xBC09}, //9681 #HANGUL SYLLABLE MIEUM I PIEUP + {0xB9D4, 0xBC0B}, //9682 #HANGUL SYLLABLE MIEUM I SIOS + {0xB9D5, 0xBC0C}, //9683 #HANGUL SYLLABLE MIEUM I SSANGSIOS + {0xB9D6, 0xBC0D}, //9684 #HANGUL SYLLABLE MIEUM I IEUNG + {0xB9D7, 0xBC0F}, //9685 #HANGUL SYLLABLE MIEUM I CHIEUCH + {0xB9D8, 0xBC11}, //9686 #HANGUL SYLLABLE MIEUM I THIEUTH + {0xB9D9, 0xBC14}, //9687 #HANGUL SYLLABLE PIEUP A + {0xB9DA, 0xBC15}, //9688 #HANGUL SYLLABLE PIEUP A KIYEOK + {0xB9DB, 0xBC16}, //9689 #HANGUL SYLLABLE PIEUP A SSANGKIYEOK + {0xB9DC, 0xBC17}, //9690 #HANGUL SYLLABLE PIEUP A KIYEOKSIOS + {0xB9DD, 0xBC18}, //9691 #HANGUL SYLLABLE PIEUP A NIEUN + {0xB9DE, 0xBC1B}, //9692 #HANGUL SYLLABLE PIEUP A TIKEUT + {0xB9DF, 0xBC1C}, //9693 #HANGUL SYLLABLE PIEUP A RIEUL + {0xB9E0, 0xBC1D}, //9694 #HANGUL SYLLABLE PIEUP A RIEULKIYEOK + {0xB9E1, 0xBC1E}, //9695 #HANGUL SYLLABLE PIEUP A RIEULMIEUM + {0xB9E2, 0xBC1F}, //9696 #HANGUL SYLLABLE PIEUP A RIEULPIEUP + {0xB9E3, 0xBC24}, //9697 #HANGUL SYLLABLE PIEUP A MIEUM + {0xB9E4, 0xBC25}, //9698 #HANGUL SYLLABLE PIEUP A PIEUP + {0xB9E5, 0xBC27}, //9699 #HANGUL SYLLABLE PIEUP A SIOS + {0xB9E6, 0xBC29}, //9700 #HANGUL SYLLABLE PIEUP A IEUNG + {0xB9E7, 0xBC2D}, //9701 #HANGUL SYLLABLE PIEUP A THIEUTH + {0xB9E8, 0xBC30}, //9702 #HANGUL SYLLABLE PIEUP AE + {0xB9E9, 0xBC31}, //9703 #HANGUL SYLLABLE PIEUP AE KIYEOK + {0xB9EA, 0xBC34}, //9704 #HANGUL SYLLABLE PIEUP AE NIEUN + {0xB9EB, 0xBC38}, //9705 #HANGUL SYLLABLE PIEUP AE RIEUL + {0xB9EC, 0xBC40}, //9706 #HANGUL SYLLABLE PIEUP AE MIEUM + {0xB9ED, 0xBC41}, //9707 #HANGUL SYLLABLE PIEUP AE PIEUP + {0xB9EE, 0xBC43}, //9708 #HANGUL SYLLABLE PIEUP AE SIOS + {0xB9EF, 0xBC44}, //9709 #HANGUL SYLLABLE PIEUP AE SSANGSIOS + {0xB9F0, 0xBC45}, //9710 #HANGUL SYLLABLE PIEUP AE IEUNG + {0xB9F1, 0xBC49}, //9711 #HANGUL SYLLABLE PIEUP AE THIEUTH + {0xB9F2, 0xBC4C}, //9712 #HANGUL SYLLABLE PIEUP YA + {0xB9F3, 0xBC4D}, //9713 #HANGUL SYLLABLE PIEUP YA KIYEOK + {0xB9F4, 0xBC50}, //9714 #HANGUL SYLLABLE PIEUP YA NIEUN + {0xB9F5, 0xBC5D}, //9715 #HANGUL SYLLABLE PIEUP YA PIEUP + {0xB9F6, 0xBC84}, //9716 #HANGUL SYLLABLE PIEUP EO + {0xB9F7, 0xBC85}, //9717 #HANGUL SYLLABLE PIEUP EO KIYEOK + {0xB9F8, 0xBC88}, //9718 #HANGUL SYLLABLE PIEUP EO NIEUN + {0xB9F9, 0xBC8B}, //9719 #HANGUL SYLLABLE PIEUP EO TIKEUT + {0xB9FA, 0xBC8C}, //9720 #HANGUL SYLLABLE PIEUP EO RIEUL + {0xB9FB, 0xBC8E}, //9721 #HANGUL SYLLABLE PIEUP EO RIEULMIEUM + {0xB9FC, 0xBC94}, //9722 #HANGUL SYLLABLE PIEUP EO MIEUM + {0xB9FD, 0xBC95}, //9723 #HANGUL SYLLABLE PIEUP EO PIEUP + {0xB9FE, 0xBC97}, //9724 #HANGUL SYLLABLE PIEUP EO SIOS + {0xBA41, 0xD28D}, //9725 #HANGUL SYLLABLE THIEUTH WI RIEULTHIEUTH + {0xBA42, 0xD28E}, //9726 #HANGUL SYLLABLE THIEUTH WI RIEULPHIEUPH + {0xBA43, 0xD28F}, //9727 #HANGUL SYLLABLE THIEUTH WI RIEULHIEUH + {0xBA44, 0xD292}, //9728 #HANGUL SYLLABLE THIEUTH WI PIEUPSIOS + {0xBA45, 0xD293}, //9729 #HANGUL SYLLABLE THIEUTH WI SIOS + {0xBA46, 0xD294}, //9730 #HANGUL SYLLABLE THIEUTH WI SSANGSIOS + {0xBA47, 0xD296}, //9731 #HANGUL SYLLABLE THIEUTH WI CIEUC + {0xBA48, 0xD297}, //9732 #HANGUL SYLLABLE THIEUTH WI CHIEUCH + {0xBA49, 0xD298}, //9733 #HANGUL SYLLABLE THIEUTH WI KHIEUKH + {0xBA4A, 0xD299}, //9734 #HANGUL SYLLABLE THIEUTH WI THIEUTH + {0xBA4B, 0xD29A}, //9735 #HANGUL SYLLABLE THIEUTH WI PHIEUPH + {0xBA4C, 0xD29B}, //9736 #HANGUL SYLLABLE THIEUTH WI HIEUH + {0xBA4D, 0xD29D}, //9737 #HANGUL SYLLABLE THIEUTH YU KIYEOK + {0xBA4E, 0xD29E}, //9738 #HANGUL SYLLABLE THIEUTH YU SSANGKIYEOK + {0xBA4F, 0xD29F}, //9739 #HANGUL SYLLABLE THIEUTH YU KIYEOKSIOS + {0xBA50, 0xD2A1}, //9740 #HANGUL SYLLABLE THIEUTH YU NIEUNCIEUC + {0xBA51, 0xD2A2}, //9741 #HANGUL SYLLABLE THIEUTH YU NIEUNHIEUH + {0xBA52, 0xD2A3}, //9742 #HANGUL SYLLABLE THIEUTH YU TIKEUT + {0xBA53, 0xD2A5}, //9743 #HANGUL SYLLABLE THIEUTH YU RIEULKIYEOK + {0xBA54, 0xD2A6}, //9744 #HANGUL SYLLABLE THIEUTH YU RIEULMIEUM + {0xBA55, 0xD2A7}, //9745 #HANGUL SYLLABLE THIEUTH YU RIEULPIEUP + {0xBA56, 0xD2A8}, //9746 #HANGUL SYLLABLE THIEUTH YU RIEULSIOS + {0xBA57, 0xD2A9}, //9747 #HANGUL SYLLABLE THIEUTH YU RIEULTHIEUTH + {0xBA58, 0xD2AA}, //9748 #HANGUL SYLLABLE THIEUTH YU RIEULPHIEUPH + {0xBA59, 0xD2AB}, //9749 #HANGUL SYLLABLE THIEUTH YU RIEULHIEUH + {0xBA5A, 0xD2AD}, //9750 #HANGUL SYLLABLE THIEUTH YU PIEUP + {0xBA61, 0xD2AE}, //9751 #HANGUL SYLLABLE THIEUTH YU PIEUPSIOS + {0xBA62, 0xD2AF}, //9752 #HANGUL SYLLABLE THIEUTH YU SIOS + {0xBA63, 0xD2B0}, //9753 #HANGUL SYLLABLE THIEUTH YU SSANGSIOS + {0xBA64, 0xD2B2}, //9754 #HANGUL SYLLABLE THIEUTH YU CIEUC + {0xBA65, 0xD2B3}, //9755 #HANGUL SYLLABLE THIEUTH YU CHIEUCH + {0xBA66, 0xD2B4}, //9756 #HANGUL SYLLABLE THIEUTH YU KHIEUKH + {0xBA67, 0xD2B5}, //9757 #HANGUL SYLLABLE THIEUTH YU THIEUTH + {0xBA68, 0xD2B6}, //9758 #HANGUL SYLLABLE THIEUTH YU PHIEUPH + {0xBA69, 0xD2B7}, //9759 #HANGUL SYLLABLE THIEUTH YU HIEUH + {0xBA6A, 0xD2BA}, //9760 #HANGUL SYLLABLE THIEUTH EU SSANGKIYEOK + {0xBA6B, 0xD2BB}, //9761 #HANGUL SYLLABLE THIEUTH EU KIYEOKSIOS + {0xBA6C, 0xD2BD}, //9762 #HANGUL SYLLABLE THIEUTH EU NIEUNCIEUC + {0xBA6D, 0xD2BE}, //9763 #HANGUL SYLLABLE THIEUTH EU NIEUNHIEUH + {0xBA6E, 0xD2C1}, //9764 #HANGUL SYLLABLE THIEUTH EU RIEULKIYEOK + {0xBA6F, 0xD2C3}, //9765 #HANGUL SYLLABLE THIEUTH EU RIEULPIEUP + {0xBA70, 0xD2C4}, //9766 #HANGUL SYLLABLE THIEUTH EU RIEULSIOS + {0xBA71, 0xD2C5}, //9767 #HANGUL SYLLABLE THIEUTH EU RIEULTHIEUTH + {0xBA72, 0xD2C6}, //9768 #HANGUL SYLLABLE THIEUTH EU RIEULPHIEUPH + {0xBA73, 0xD2C7}, //9769 #HANGUL SYLLABLE THIEUTH EU RIEULHIEUH + {0xBA74, 0xD2CA}, //9770 #HANGUL SYLLABLE THIEUTH EU PIEUPSIOS + {0xBA75, 0xD2CC}, //9771 #HANGUL SYLLABLE THIEUTH EU SSANGSIOS + {0xBA76, 0xD2CD}, //9772 #HANGUL SYLLABLE THIEUTH EU IEUNG + {0xBA77, 0xD2CE}, //9773 #HANGUL SYLLABLE THIEUTH EU CIEUC + {0xBA78, 0xD2CF}, //9774 #HANGUL SYLLABLE THIEUTH EU CHIEUCH + {0xBA79, 0xD2D0}, //9775 #HANGUL SYLLABLE THIEUTH EU KHIEUKH + {0xBA7A, 0xD2D1}, //9776 #HANGUL SYLLABLE THIEUTH EU THIEUTH + {0xBA81, 0xD2D2}, //9777 #HANGUL SYLLABLE THIEUTH EU PHIEUPH + {0xBA82, 0xD2D3}, //9778 #HANGUL SYLLABLE THIEUTH EU HIEUH + {0xBA83, 0xD2D5}, //9779 #HANGUL SYLLABLE THIEUTH YI KIYEOK + {0xBA84, 0xD2D6}, //9780 #HANGUL SYLLABLE THIEUTH YI SSANGKIYEOK + {0xBA85, 0xD2D7}, //9781 #HANGUL SYLLABLE THIEUTH YI KIYEOKSIOS + {0xBA86, 0xD2D9}, //9782 #HANGUL SYLLABLE THIEUTH YI NIEUNCIEUC + {0xBA87, 0xD2DA}, //9783 #HANGUL SYLLABLE THIEUTH YI NIEUNHIEUH + {0xBA88, 0xD2DB}, //9784 #HANGUL SYLLABLE THIEUTH YI TIKEUT + {0xBA89, 0xD2DD}, //9785 #HANGUL SYLLABLE THIEUTH YI RIEULKIYEOK + {0xBA8A, 0xD2DE}, //9786 #HANGUL SYLLABLE THIEUTH YI RIEULMIEUM + {0xBA8B, 0xD2DF}, //9787 #HANGUL SYLLABLE THIEUTH YI RIEULPIEUP + {0xBA8C, 0xD2E0}, //9788 #HANGUL SYLLABLE THIEUTH YI RIEULSIOS + {0xBA8D, 0xD2E1}, //9789 #HANGUL SYLLABLE THIEUTH YI RIEULTHIEUTH + {0xBA8E, 0xD2E2}, //9790 #HANGUL SYLLABLE THIEUTH YI RIEULPHIEUPH + {0xBA8F, 0xD2E3}, //9791 #HANGUL SYLLABLE THIEUTH YI RIEULHIEUH + {0xBA90, 0xD2E6}, //9792 #HANGUL SYLLABLE THIEUTH YI PIEUPSIOS + {0xBA91, 0xD2E7}, //9793 #HANGUL SYLLABLE THIEUTH YI SIOS + {0xBA92, 0xD2E8}, //9794 #HANGUL SYLLABLE THIEUTH YI SSANGSIOS + {0xBA93, 0xD2E9}, //9795 #HANGUL SYLLABLE THIEUTH YI IEUNG + {0xBA94, 0xD2EA}, //9796 #HANGUL SYLLABLE THIEUTH YI CIEUC + {0xBA95, 0xD2EB}, //9797 #HANGUL SYLLABLE THIEUTH YI CHIEUCH + {0xBA96, 0xD2EC}, //9798 #HANGUL SYLLABLE THIEUTH YI KHIEUKH + {0xBA97, 0xD2ED}, //9799 #HANGUL SYLLABLE THIEUTH YI THIEUTH + {0xBA98, 0xD2EE}, //9800 #HANGUL SYLLABLE THIEUTH YI PHIEUPH + {0xBA99, 0xD2EF}, //9801 #HANGUL SYLLABLE THIEUTH YI HIEUH + {0xBA9A, 0xD2F2}, //9802 #HANGUL SYLLABLE THIEUTH I SSANGKIYEOK + {0xBA9B, 0xD2F3}, //9803 #HANGUL SYLLABLE THIEUTH I KIYEOKSIOS + {0xBA9C, 0xD2F5}, //9804 #HANGUL SYLLABLE THIEUTH I NIEUNCIEUC + {0xBA9D, 0xD2F6}, //9805 #HANGUL SYLLABLE THIEUTH I NIEUNHIEUH + {0xBA9E, 0xD2F7}, //9806 #HANGUL SYLLABLE THIEUTH I TIKEUT + {0xBA9F, 0xD2F9}, //9807 #HANGUL SYLLABLE THIEUTH I RIEULKIYEOK + {0xBAA0, 0xD2FA}, //9808 #HANGUL SYLLABLE THIEUTH I RIEULMIEUM + {0xBAA1, 0xBC99}, //9809 #HANGUL SYLLABLE PIEUP EO IEUNG + {0xBAA2, 0xBC9A}, //9810 #HANGUL SYLLABLE PIEUP EO CIEUC + {0xBAA3, 0xBCA0}, //9811 #HANGUL SYLLABLE PIEUP E + {0xBAA4, 0xBCA1}, //9812 #HANGUL SYLLABLE PIEUP E KIYEOK + {0xBAA5, 0xBCA4}, //9813 #HANGUL SYLLABLE PIEUP E NIEUN + {0xBAA6, 0xBCA7}, //9814 #HANGUL SYLLABLE PIEUP E TIKEUT + {0xBAA7, 0xBCA8}, //9815 #HANGUL SYLLABLE PIEUP E RIEUL + {0xBAA8, 0xBCB0}, //9816 #HANGUL SYLLABLE PIEUP E MIEUM + {0xBAA9, 0xBCB1}, //9817 #HANGUL SYLLABLE PIEUP E PIEUP + {0xBAAA, 0xBCB3}, //9818 #HANGUL SYLLABLE PIEUP E SIOS + {0xBAAB, 0xBCB4}, //9819 #HANGUL SYLLABLE PIEUP E SSANGSIOS + {0xBAAC, 0xBCB5}, //9820 #HANGUL SYLLABLE PIEUP E IEUNG + {0xBAAD, 0xBCBC}, //9821 #HANGUL SYLLABLE PIEUP YEO + {0xBAAE, 0xBCBD}, //9822 #HANGUL SYLLABLE PIEUP YEO KIYEOK + {0xBAAF, 0xBCC0}, //9823 #HANGUL SYLLABLE PIEUP YEO NIEUN + {0xBAB0, 0xBCC4}, //9824 #HANGUL SYLLABLE PIEUP YEO RIEUL + {0xBAB1, 0xBCCD}, //9825 #HANGUL SYLLABLE PIEUP YEO PIEUP + {0xBAB2, 0xBCCF}, //9826 #HANGUL SYLLABLE PIEUP YEO SIOS + {0xBAB3, 0xBCD0}, //9827 #HANGUL SYLLABLE PIEUP YEO SSANGSIOS + {0xBAB4, 0xBCD1}, //9828 #HANGUL SYLLABLE PIEUP YEO IEUNG + {0xBAB5, 0xBCD5}, //9829 #HANGUL SYLLABLE PIEUP YEO THIEUTH + {0xBAB6, 0xBCD8}, //9830 #HANGUL SYLLABLE PIEUP YE + {0xBAB7, 0xBCDC}, //9831 #HANGUL SYLLABLE PIEUP YE NIEUN + {0xBAB8, 0xBCF4}, //9832 #HANGUL SYLLABLE PIEUP O + {0xBAB9, 0xBCF5}, //9833 #HANGUL SYLLABLE PIEUP O KIYEOK + {0xBABA, 0xBCF6}, //9834 #HANGUL SYLLABLE PIEUP O SSANGKIYEOK + {0xBABB, 0xBCF8}, //9835 #HANGUL SYLLABLE PIEUP O NIEUN + {0xBABC, 0xBCFC}, //9836 #HANGUL SYLLABLE PIEUP O RIEUL + {0xBABD, 0xBD04}, //9837 #HANGUL SYLLABLE PIEUP O MIEUM + {0xBABE, 0xBD05}, //9838 #HANGUL SYLLABLE PIEUP O PIEUP + {0xBABF, 0xBD07}, //9839 #HANGUL SYLLABLE PIEUP O SIOS + {0xBAC0, 0xBD09}, //9840 #HANGUL SYLLABLE PIEUP O IEUNG + {0xBAC1, 0xBD10}, //9841 #HANGUL SYLLABLE PIEUP WA + {0xBAC2, 0xBD14}, //9842 #HANGUL SYLLABLE PIEUP WA NIEUN + {0xBAC3, 0xBD24}, //9843 #HANGUL SYLLABLE PIEUP WA SSANGSIOS + {0xBAC4, 0xBD2C}, //9844 #HANGUL SYLLABLE PIEUP WAE + {0xBAC5, 0xBD40}, //9845 #HANGUL SYLLABLE PIEUP WAE SSANGSIOS + {0xBAC6, 0xBD48}, //9846 #HANGUL SYLLABLE PIEUP OE + {0xBAC7, 0xBD49}, //9847 #HANGUL SYLLABLE PIEUP OE KIYEOK + {0xBAC8, 0xBD4C}, //9848 #HANGUL SYLLABLE PIEUP OE NIEUN + {0xBAC9, 0xBD50}, //9849 #HANGUL SYLLABLE PIEUP OE RIEUL + {0xBACA, 0xBD58}, //9850 #HANGUL SYLLABLE PIEUP OE MIEUM + {0xBACB, 0xBD59}, //9851 #HANGUL SYLLABLE PIEUP OE PIEUP + {0xBACC, 0xBD64}, //9852 #HANGUL SYLLABLE PIEUP YO + {0xBACD, 0xBD68}, //9853 #HANGUL SYLLABLE PIEUP YO NIEUN + {0xBACE, 0xBD80}, //9854 #HANGUL SYLLABLE PIEUP U + {0xBACF, 0xBD81}, //9855 #HANGUL SYLLABLE PIEUP U KIYEOK + {0xBAD0, 0xBD84}, //9856 #HANGUL SYLLABLE PIEUP U NIEUN + {0xBAD1, 0xBD87}, //9857 #HANGUL SYLLABLE PIEUP U TIKEUT + {0xBAD2, 0xBD88}, //9858 #HANGUL SYLLABLE PIEUP U RIEUL + {0xBAD3, 0xBD89}, //9859 #HANGUL SYLLABLE PIEUP U RIEULKIYEOK + {0xBAD4, 0xBD8A}, //9860 #HANGUL SYLLABLE PIEUP U RIEULMIEUM + {0xBAD5, 0xBD90}, //9861 #HANGUL SYLLABLE PIEUP U MIEUM + {0xBAD6, 0xBD91}, //9862 #HANGUL SYLLABLE PIEUP U PIEUP + {0xBAD7, 0xBD93}, //9863 #HANGUL SYLLABLE PIEUP U SIOS + {0xBAD8, 0xBD95}, //9864 #HANGUL SYLLABLE PIEUP U IEUNG + {0xBAD9, 0xBD99}, //9865 #HANGUL SYLLABLE PIEUP U THIEUTH + {0xBADA, 0xBD9A}, //9866 #HANGUL SYLLABLE PIEUP U PHIEUPH + {0xBADB, 0xBD9C}, //9867 #HANGUL SYLLABLE PIEUP WEO + {0xBADC, 0xBDA4}, //9868 #HANGUL SYLLABLE PIEUP WEO RIEUL + {0xBADD, 0xBDB0}, //9869 #HANGUL SYLLABLE PIEUP WEO SSANGSIOS + {0xBADE, 0xBDB8}, //9870 #HANGUL SYLLABLE PIEUP WE + {0xBADF, 0xBDD4}, //9871 #HANGUL SYLLABLE PIEUP WI + {0xBAE0, 0xBDD5}, //9872 #HANGUL SYLLABLE PIEUP WI KIYEOK + {0xBAE1, 0xBDD8}, //9873 #HANGUL SYLLABLE PIEUP WI NIEUN + {0xBAE2, 0xBDDC}, //9874 #HANGUL SYLLABLE PIEUP WI RIEUL + {0xBAE3, 0xBDE9}, //9875 #HANGUL SYLLABLE PIEUP WI IEUNG + {0xBAE4, 0xBDF0}, //9876 #HANGUL SYLLABLE PIEUP YU + {0xBAE5, 0xBDF4}, //9877 #HANGUL SYLLABLE PIEUP YU NIEUN + {0xBAE6, 0xBDF8}, //9878 #HANGUL SYLLABLE PIEUP YU RIEUL + {0xBAE7, 0xBE00}, //9879 #HANGUL SYLLABLE PIEUP YU MIEUM + {0xBAE8, 0xBE03}, //9880 #HANGUL SYLLABLE PIEUP YU SIOS + {0xBAE9, 0xBE05}, //9881 #HANGUL SYLLABLE PIEUP YU IEUNG + {0xBAEA, 0xBE0C}, //9882 #HANGUL SYLLABLE PIEUP EU + {0xBAEB, 0xBE0D}, //9883 #HANGUL SYLLABLE PIEUP EU KIYEOK + {0xBAEC, 0xBE10}, //9884 #HANGUL SYLLABLE PIEUP EU NIEUN + {0xBAED, 0xBE14}, //9885 #HANGUL SYLLABLE PIEUP EU RIEUL + {0xBAEE, 0xBE1C}, //9886 #HANGUL SYLLABLE PIEUP EU MIEUM + {0xBAEF, 0xBE1D}, //9887 #HANGUL SYLLABLE PIEUP EU PIEUP + {0xBAF0, 0xBE1F}, //9888 #HANGUL SYLLABLE PIEUP EU SIOS + {0xBAF1, 0xBE44}, //9889 #HANGUL SYLLABLE PIEUP I + {0xBAF2, 0xBE45}, //9890 #HANGUL SYLLABLE PIEUP I KIYEOK + {0xBAF3, 0xBE48}, //9891 #HANGUL SYLLABLE PIEUP I NIEUN + {0xBAF4, 0xBE4C}, //9892 #HANGUL SYLLABLE PIEUP I RIEUL + {0xBAF5, 0xBE4E}, //9893 #HANGUL SYLLABLE PIEUP I RIEULMIEUM + {0xBAF6, 0xBE54}, //9894 #HANGUL SYLLABLE PIEUP I MIEUM + {0xBAF7, 0xBE55}, //9895 #HANGUL SYLLABLE PIEUP I PIEUP + {0xBAF8, 0xBE57}, //9896 #HANGUL SYLLABLE PIEUP I SIOS + {0xBAF9, 0xBE59}, //9897 #HANGUL SYLLABLE PIEUP I IEUNG + {0xBAFA, 0xBE5A}, //9898 #HANGUL SYLLABLE PIEUP I CIEUC + {0xBAFB, 0xBE5B}, //9899 #HANGUL SYLLABLE PIEUP I CHIEUCH + {0xBAFC, 0xBE60}, //9900 #HANGUL SYLLABLE SSANGPIEUP A + {0xBAFD, 0xBE61}, //9901 #HANGUL SYLLABLE SSANGPIEUP A KIYEOK + {0xBAFE, 0xBE64}, //9902 #HANGUL SYLLABLE SSANGPIEUP A NIEUN + {0xBB41, 0xD2FB}, //9903 #HANGUL SYLLABLE THIEUTH I RIEULPIEUP + {0xBB42, 0xD2FC}, //9904 #HANGUL SYLLABLE THIEUTH I RIEULSIOS + {0xBB43, 0xD2FD}, //9905 #HANGUL SYLLABLE THIEUTH I RIEULTHIEUTH + {0xBB44, 0xD2FE}, //9906 #HANGUL SYLLABLE THIEUTH I RIEULPHIEUPH + {0xBB45, 0xD2FF}, //9907 #HANGUL SYLLABLE THIEUTH I RIEULHIEUH + {0xBB46, 0xD302}, //9908 #HANGUL SYLLABLE THIEUTH I PIEUPSIOS + {0xBB47, 0xD304}, //9909 #HANGUL SYLLABLE THIEUTH I SSANGSIOS + {0xBB48, 0xD306}, //9910 #HANGUL SYLLABLE THIEUTH I CIEUC + {0xBB49, 0xD307}, //9911 #HANGUL SYLLABLE THIEUTH I CHIEUCH + {0xBB4A, 0xD308}, //9912 #HANGUL SYLLABLE THIEUTH I KHIEUKH + {0xBB4B, 0xD309}, //9913 #HANGUL SYLLABLE THIEUTH I THIEUTH + {0xBB4C, 0xD30A}, //9914 #HANGUL SYLLABLE THIEUTH I PHIEUPH + {0xBB4D, 0xD30B}, //9915 #HANGUL SYLLABLE THIEUTH I HIEUH + {0xBB4E, 0xD30F}, //9916 #HANGUL SYLLABLE PHIEUPH A KIYEOKSIOS + {0xBB4F, 0xD311}, //9917 #HANGUL SYLLABLE PHIEUPH A NIEUNCIEUC + {0xBB50, 0xD312}, //9918 #HANGUL SYLLABLE PHIEUPH A NIEUNHIEUH + {0xBB51, 0xD313}, //9919 #HANGUL SYLLABLE PHIEUPH A TIKEUT + {0xBB52, 0xD315}, //9920 #HANGUL SYLLABLE PHIEUPH A RIEULKIYEOK + {0xBB53, 0xD317}, //9921 #HANGUL SYLLABLE PHIEUPH A RIEULPIEUP + {0xBB54, 0xD318}, //9922 #HANGUL SYLLABLE PHIEUPH A RIEULSIOS + {0xBB55, 0xD319}, //9923 #HANGUL SYLLABLE PHIEUPH A RIEULTHIEUTH + {0xBB56, 0xD31A}, //9924 #HANGUL SYLLABLE PHIEUPH A RIEULPHIEUPH + {0xBB57, 0xD31B}, //9925 #HANGUL SYLLABLE PHIEUPH A RIEULHIEUH + {0xBB58, 0xD31E}, //9926 #HANGUL SYLLABLE PHIEUPH A PIEUPSIOS + {0xBB59, 0xD322}, //9927 #HANGUL SYLLABLE PHIEUPH A CIEUC + {0xBB5A, 0xD323}, //9928 #HANGUL SYLLABLE PHIEUPH A CHIEUCH + {0xBB61, 0xD324}, //9929 #HANGUL SYLLABLE PHIEUPH A KHIEUKH + {0xBB62, 0xD326}, //9930 #HANGUL SYLLABLE PHIEUPH A PHIEUPH + {0xBB63, 0xD327}, //9931 #HANGUL SYLLABLE PHIEUPH A HIEUH + {0xBB64, 0xD32A}, //9932 #HANGUL SYLLABLE PHIEUPH AE SSANGKIYEOK + {0xBB65, 0xD32B}, //9933 #HANGUL SYLLABLE PHIEUPH AE KIYEOKSIOS + {0xBB66, 0xD32D}, //9934 #HANGUL SYLLABLE PHIEUPH AE NIEUNCIEUC + {0xBB67, 0xD32E}, //9935 #HANGUL SYLLABLE PHIEUPH AE NIEUNHIEUH + {0xBB68, 0xD32F}, //9936 #HANGUL SYLLABLE PHIEUPH AE TIKEUT + {0xBB69, 0xD331}, //9937 #HANGUL SYLLABLE PHIEUPH AE RIEULKIYEOK + {0xBB6A, 0xD332}, //9938 #HANGUL SYLLABLE PHIEUPH AE RIEULMIEUM + {0xBB6B, 0xD333}, //9939 #HANGUL SYLLABLE PHIEUPH AE RIEULPIEUP + {0xBB6C, 0xD334}, //9940 #HANGUL SYLLABLE PHIEUPH AE RIEULSIOS + {0xBB6D, 0xD335}, //9941 #HANGUL SYLLABLE PHIEUPH AE RIEULTHIEUTH + {0xBB6E, 0xD336}, //9942 #HANGUL SYLLABLE PHIEUPH AE RIEULPHIEUPH + {0xBB6F, 0xD337}, //9943 #HANGUL SYLLABLE PHIEUPH AE RIEULHIEUH + {0xBB70, 0xD33A}, //9944 #HANGUL SYLLABLE PHIEUPH AE PIEUPSIOS + {0xBB71, 0xD33E}, //9945 #HANGUL SYLLABLE PHIEUPH AE CIEUC + {0xBB72, 0xD33F}, //9946 #HANGUL SYLLABLE PHIEUPH AE CHIEUCH + {0xBB73, 0xD340}, //9947 #HANGUL SYLLABLE PHIEUPH AE KHIEUKH + {0xBB74, 0xD341}, //9948 #HANGUL SYLLABLE PHIEUPH AE THIEUTH + {0xBB75, 0xD342}, //9949 #HANGUL SYLLABLE PHIEUPH AE PHIEUPH + {0xBB76, 0xD343}, //9950 #HANGUL SYLLABLE PHIEUPH AE HIEUH + {0xBB77, 0xD346}, //9951 #HANGUL SYLLABLE PHIEUPH YA SSANGKIYEOK + {0xBB78, 0xD347}, //9952 #HANGUL SYLLABLE PHIEUPH YA KIYEOKSIOS + {0xBB79, 0xD348}, //9953 #HANGUL SYLLABLE PHIEUPH YA NIEUN + {0xBB7A, 0xD349}, //9954 #HANGUL SYLLABLE PHIEUPH YA NIEUNCIEUC + {0xBB81, 0xD34A}, //9955 #HANGUL SYLLABLE PHIEUPH YA NIEUNHIEUH + {0xBB82, 0xD34B}, //9956 #HANGUL SYLLABLE PHIEUPH YA TIKEUT + {0xBB83, 0xD34C}, //9957 #HANGUL SYLLABLE PHIEUPH YA RIEUL + {0xBB84, 0xD34D}, //9958 #HANGUL SYLLABLE PHIEUPH YA RIEULKIYEOK + {0xBB85, 0xD34E}, //9959 #HANGUL SYLLABLE PHIEUPH YA RIEULMIEUM + {0xBB86, 0xD34F}, //9960 #HANGUL SYLLABLE PHIEUPH YA RIEULPIEUP + {0xBB87, 0xD350}, //9961 #HANGUL SYLLABLE PHIEUPH YA RIEULSIOS + {0xBB88, 0xD351}, //9962 #HANGUL SYLLABLE PHIEUPH YA RIEULTHIEUTH + {0xBB89, 0xD352}, //9963 #HANGUL SYLLABLE PHIEUPH YA RIEULPHIEUPH + {0xBB8A, 0xD353}, //9964 #HANGUL SYLLABLE PHIEUPH YA RIEULHIEUH + {0xBB8B, 0xD354}, //9965 #HANGUL SYLLABLE PHIEUPH YA MIEUM + {0xBB8C, 0xD355}, //9966 #HANGUL SYLLABLE PHIEUPH YA PIEUP + {0xBB8D, 0xD356}, //9967 #HANGUL SYLLABLE PHIEUPH YA PIEUPSIOS + {0xBB8E, 0xD357}, //9968 #HANGUL SYLLABLE PHIEUPH YA SIOS + {0xBB8F, 0xD358}, //9969 #HANGUL SYLLABLE PHIEUPH YA SSANGSIOS + {0xBB90, 0xD359}, //9970 #HANGUL SYLLABLE PHIEUPH YA IEUNG + {0xBB91, 0xD35A}, //9971 #HANGUL SYLLABLE PHIEUPH YA CIEUC + {0xBB92, 0xD35B}, //9972 #HANGUL SYLLABLE PHIEUPH YA CHIEUCH + {0xBB93, 0xD35C}, //9973 #HANGUL SYLLABLE PHIEUPH YA KHIEUKH + {0xBB94, 0xD35D}, //9974 #HANGUL SYLLABLE PHIEUPH YA THIEUTH + {0xBB95, 0xD35E}, //9975 #HANGUL SYLLABLE PHIEUPH YA PHIEUPH + {0xBB96, 0xD35F}, //9976 #HANGUL SYLLABLE PHIEUPH YA HIEUH + {0xBB97, 0xD360}, //9977 #HANGUL SYLLABLE PHIEUPH YAE + {0xBB98, 0xD361}, //9978 #HANGUL SYLLABLE PHIEUPH YAE KIYEOK + {0xBB99, 0xD362}, //9979 #HANGUL SYLLABLE PHIEUPH YAE SSANGKIYEOK + {0xBB9A, 0xD363}, //9980 #HANGUL SYLLABLE PHIEUPH YAE KIYEOKSIOS + {0xBB9B, 0xD364}, //9981 #HANGUL SYLLABLE PHIEUPH YAE NIEUN + {0xBB9C, 0xD365}, //9982 #HANGUL SYLLABLE PHIEUPH YAE NIEUNCIEUC + {0xBB9D, 0xD366}, //9983 #HANGUL SYLLABLE PHIEUPH YAE NIEUNHIEUH + {0xBB9E, 0xD367}, //9984 #HANGUL SYLLABLE PHIEUPH YAE TIKEUT + {0xBB9F, 0xD368}, //9985 #HANGUL SYLLABLE PHIEUPH YAE RIEUL + {0xBBA0, 0xD369}, //9986 #HANGUL SYLLABLE PHIEUPH YAE RIEULKIYEOK + {0xBBA1, 0xBE68}, //9987 #HANGUL SYLLABLE SSANGPIEUP A RIEUL + {0xBBA2, 0xBE6A}, //9988 #HANGUL SYLLABLE SSANGPIEUP A RIEULMIEUM + {0xBBA3, 0xBE70}, //9989 #HANGUL SYLLABLE SSANGPIEUP A MIEUM + {0xBBA4, 0xBE71}, //9990 #HANGUL SYLLABLE SSANGPIEUP A PIEUP + {0xBBA5, 0xBE73}, //9991 #HANGUL SYLLABLE SSANGPIEUP A SIOS + {0xBBA6, 0xBE74}, //9992 #HANGUL SYLLABLE SSANGPIEUP A SSANGSIOS + {0xBBA7, 0xBE75}, //9993 #HANGUL SYLLABLE SSANGPIEUP A IEUNG + {0xBBA8, 0xBE7B}, //9994 #HANGUL SYLLABLE SSANGPIEUP A HIEUH + {0xBBA9, 0xBE7C}, //9995 #HANGUL SYLLABLE SSANGPIEUP AE + {0xBBAA, 0xBE7D}, //9996 #HANGUL SYLLABLE SSANGPIEUP AE KIYEOK + {0xBBAB, 0xBE80}, //9997 #HANGUL SYLLABLE SSANGPIEUP AE NIEUN + {0xBBAC, 0xBE84}, //9998 #HANGUL SYLLABLE SSANGPIEUP AE RIEUL + {0xBBAD, 0xBE8C}, //9999 #HANGUL SYLLABLE SSANGPIEUP AE MIEUM + {0xBBAE, 0xBE8D}, //10000 #HANGUL SYLLABLE SSANGPIEUP AE PIEUP + {0xBBAF, 0xBE8F}, //10001 #HANGUL SYLLABLE SSANGPIEUP AE SIOS + {0xBBB0, 0xBE90}, //10002 #HANGUL SYLLABLE SSANGPIEUP AE SSANGSIOS + {0xBBB1, 0xBE91}, //10003 #HANGUL SYLLABLE SSANGPIEUP AE IEUNG + {0xBBB2, 0xBE98}, //10004 #HANGUL SYLLABLE SSANGPIEUP YA + {0xBBB3, 0xBE99}, //10005 #HANGUL SYLLABLE SSANGPIEUP YA KIYEOK + {0xBBB4, 0xBEA8}, //10006 #HANGUL SYLLABLE SSANGPIEUP YA MIEUM + {0xBBB5, 0xBED0}, //10007 #HANGUL SYLLABLE SSANGPIEUP EO + {0xBBB6, 0xBED1}, //10008 #HANGUL SYLLABLE SSANGPIEUP EO KIYEOK + {0xBBB7, 0xBED4}, //10009 #HANGUL SYLLABLE SSANGPIEUP EO NIEUN + {0xBBB8, 0xBED7}, //10010 #HANGUL SYLLABLE SSANGPIEUP EO TIKEUT + {0xBBB9, 0xBED8}, //10011 #HANGUL SYLLABLE SSANGPIEUP EO RIEUL + {0xBBBA, 0xBEE0}, //10012 #HANGUL SYLLABLE SSANGPIEUP EO MIEUM + {0xBBBB, 0xBEE3}, //10013 #HANGUL SYLLABLE SSANGPIEUP EO SIOS + {0xBBBC, 0xBEE4}, //10014 #HANGUL SYLLABLE SSANGPIEUP EO SSANGSIOS + {0xBBBD, 0xBEE5}, //10015 #HANGUL SYLLABLE SSANGPIEUP EO IEUNG + {0xBBBE, 0xBEEC}, //10016 #HANGUL SYLLABLE SSANGPIEUP E + {0xBBBF, 0xBF01}, //10017 #HANGUL SYLLABLE SSANGPIEUP E IEUNG + {0xBBC0, 0xBF08}, //10018 #HANGUL SYLLABLE SSANGPIEUP YEO + {0xBBC1, 0xBF09}, //10019 #HANGUL SYLLABLE SSANGPIEUP YEO KIYEOK + {0xBBC2, 0xBF18}, //10020 #HANGUL SYLLABLE SSANGPIEUP YEO MIEUM + {0xBBC3, 0xBF19}, //10021 #HANGUL SYLLABLE SSANGPIEUP YEO PIEUP + {0xBBC4, 0xBF1B}, //10022 #HANGUL SYLLABLE SSANGPIEUP YEO SIOS + {0xBBC5, 0xBF1C}, //10023 #HANGUL SYLLABLE SSANGPIEUP YEO SSANGSIOS + {0xBBC6, 0xBF1D}, //10024 #HANGUL SYLLABLE SSANGPIEUP YEO IEUNG + {0xBBC7, 0xBF40}, //10025 #HANGUL SYLLABLE SSANGPIEUP O + {0xBBC8, 0xBF41}, //10026 #HANGUL SYLLABLE SSANGPIEUP O KIYEOK + {0xBBC9, 0xBF44}, //10027 #HANGUL SYLLABLE SSANGPIEUP O NIEUN + {0xBBCA, 0xBF48}, //10028 #HANGUL SYLLABLE SSANGPIEUP O RIEUL + {0xBBCB, 0xBF50}, //10029 #HANGUL SYLLABLE SSANGPIEUP O MIEUM + {0xBBCC, 0xBF51}, //10030 #HANGUL SYLLABLE SSANGPIEUP O PIEUP + {0xBBCD, 0xBF55}, //10031 #HANGUL SYLLABLE SSANGPIEUP O IEUNG + {0xBBCE, 0xBF94}, //10032 #HANGUL SYLLABLE SSANGPIEUP OE + {0xBBCF, 0xBFB0}, //10033 #HANGUL SYLLABLE SSANGPIEUP YO + {0xBBD0, 0xBFC5}, //10034 #HANGUL SYLLABLE SSANGPIEUP YO IEUNG + {0xBBD1, 0xBFCC}, //10035 #HANGUL SYLLABLE SSANGPIEUP U + {0xBBD2, 0xBFCD}, //10036 #HANGUL SYLLABLE SSANGPIEUP U KIYEOK + {0xBBD3, 0xBFD0}, //10037 #HANGUL SYLLABLE SSANGPIEUP U NIEUN + {0xBBD4, 0xBFD4}, //10038 #HANGUL SYLLABLE SSANGPIEUP U RIEUL + {0xBBD5, 0xBFDC}, //10039 #HANGUL SYLLABLE SSANGPIEUP U MIEUM + {0xBBD6, 0xBFDF}, //10040 #HANGUL SYLLABLE SSANGPIEUP U SIOS + {0xBBD7, 0xBFE1}, //10041 #HANGUL SYLLABLE SSANGPIEUP U IEUNG + {0xBBD8, 0xC03C}, //10042 #HANGUL SYLLABLE SSANGPIEUP YU + {0xBBD9, 0xC051}, //10043 #HANGUL SYLLABLE SSANGPIEUP YU IEUNG + {0xBBDA, 0xC058}, //10044 #HANGUL SYLLABLE SSANGPIEUP EU + {0xBBDB, 0xC05C}, //10045 #HANGUL SYLLABLE SSANGPIEUP EU NIEUN + {0xBBDC, 0xC060}, //10046 #HANGUL SYLLABLE SSANGPIEUP EU RIEUL + {0xBBDD, 0xC068}, //10047 #HANGUL SYLLABLE SSANGPIEUP EU MIEUM + {0xBBDE, 0xC069}, //10048 #HANGUL SYLLABLE SSANGPIEUP EU PIEUP + {0xBBDF, 0xC090}, //10049 #HANGUL SYLLABLE SSANGPIEUP I + {0xBBE0, 0xC091}, //10050 #HANGUL SYLLABLE SSANGPIEUP I KIYEOK + {0xBBE1, 0xC094}, //10051 #HANGUL SYLLABLE SSANGPIEUP I NIEUN + {0xBBE2, 0xC098}, //10052 #HANGUL SYLLABLE SSANGPIEUP I RIEUL + {0xBBE3, 0xC0A0}, //10053 #HANGUL SYLLABLE SSANGPIEUP I MIEUM + {0xBBE4, 0xC0A1}, //10054 #HANGUL SYLLABLE SSANGPIEUP I PIEUP + {0xBBE5, 0xC0A3}, //10055 #HANGUL SYLLABLE SSANGPIEUP I SIOS + {0xBBE6, 0xC0A5}, //10056 #HANGUL SYLLABLE SSANGPIEUP I IEUNG + {0xBBE7, 0xC0AC}, //10057 #HANGUL SYLLABLE SIOS A + {0xBBE8, 0xC0AD}, //10058 #HANGUL SYLLABLE SIOS A KIYEOK + {0xBBE9, 0xC0AF}, //10059 #HANGUL SYLLABLE SIOS A KIYEOKSIOS + {0xBBEA, 0xC0B0}, //10060 #HANGUL SYLLABLE SIOS A NIEUN + {0xBBEB, 0xC0B3}, //10061 #HANGUL SYLLABLE SIOS A TIKEUT + {0xBBEC, 0xC0B4}, //10062 #HANGUL SYLLABLE SIOS A RIEUL + {0xBBED, 0xC0B5}, //10063 #HANGUL SYLLABLE SIOS A RIEULKIYEOK + {0xBBEE, 0xC0B6}, //10064 #HANGUL SYLLABLE SIOS A RIEULMIEUM + {0xBBEF, 0xC0BC}, //10065 #HANGUL SYLLABLE SIOS A MIEUM + {0xBBF0, 0xC0BD}, //10066 #HANGUL SYLLABLE SIOS A PIEUP + {0xBBF1, 0xC0BF}, //10067 #HANGUL SYLLABLE SIOS A SIOS + {0xBBF2, 0xC0C0}, //10068 #HANGUL SYLLABLE SIOS A SSANGSIOS + {0xBBF3, 0xC0C1}, //10069 #HANGUL SYLLABLE SIOS A IEUNG + {0xBBF4, 0xC0C5}, //10070 #HANGUL SYLLABLE SIOS A THIEUTH + {0xBBF5, 0xC0C8}, //10071 #HANGUL SYLLABLE SIOS AE + {0xBBF6, 0xC0C9}, //10072 #HANGUL SYLLABLE SIOS AE KIYEOK + {0xBBF7, 0xC0CC}, //10073 #HANGUL SYLLABLE SIOS AE NIEUN + {0xBBF8, 0xC0D0}, //10074 #HANGUL SYLLABLE SIOS AE RIEUL + {0xBBF9, 0xC0D8}, //10075 #HANGUL SYLLABLE SIOS AE MIEUM + {0xBBFA, 0xC0D9}, //10076 #HANGUL SYLLABLE SIOS AE PIEUP + {0xBBFB, 0xC0DB}, //10077 #HANGUL SYLLABLE SIOS AE SIOS + {0xBBFC, 0xC0DC}, //10078 #HANGUL SYLLABLE SIOS AE SSANGSIOS + {0xBBFD, 0xC0DD}, //10079 #HANGUL SYLLABLE SIOS AE IEUNG + {0xBBFE, 0xC0E4}, //10080 #HANGUL SYLLABLE SIOS YA + {0xBC41, 0xD36A}, //10081 #HANGUL SYLLABLE PHIEUPH YAE RIEULMIEUM + {0xBC42, 0xD36B}, //10082 #HANGUL SYLLABLE PHIEUPH YAE RIEULPIEUP + {0xBC43, 0xD36C}, //10083 #HANGUL SYLLABLE PHIEUPH YAE RIEULSIOS + {0xBC44, 0xD36D}, //10084 #HANGUL SYLLABLE PHIEUPH YAE RIEULTHIEUTH + {0xBC45, 0xD36E}, //10085 #HANGUL SYLLABLE PHIEUPH YAE RIEULPHIEUPH + {0xBC46, 0xD36F}, //10086 #HANGUL SYLLABLE PHIEUPH YAE RIEULHIEUH + {0xBC47, 0xD370}, //10087 #HANGUL SYLLABLE PHIEUPH YAE MIEUM + {0xBC48, 0xD371}, //10088 #HANGUL SYLLABLE PHIEUPH YAE PIEUP + {0xBC49, 0xD372}, //10089 #HANGUL SYLLABLE PHIEUPH YAE PIEUPSIOS + {0xBC4A, 0xD373}, //10090 #HANGUL SYLLABLE PHIEUPH YAE SIOS + {0xBC4B, 0xD374}, //10091 #HANGUL SYLLABLE PHIEUPH YAE SSANGSIOS + {0xBC4C, 0xD375}, //10092 #HANGUL SYLLABLE PHIEUPH YAE IEUNG + {0xBC4D, 0xD376}, //10093 #HANGUL SYLLABLE PHIEUPH YAE CIEUC + {0xBC4E, 0xD377}, //10094 #HANGUL SYLLABLE PHIEUPH YAE CHIEUCH + {0xBC4F, 0xD378}, //10095 #HANGUL SYLLABLE PHIEUPH YAE KHIEUKH + {0xBC50, 0xD379}, //10096 #HANGUL SYLLABLE PHIEUPH YAE THIEUTH + {0xBC51, 0xD37A}, //10097 #HANGUL SYLLABLE PHIEUPH YAE PHIEUPH + {0xBC52, 0xD37B}, //10098 #HANGUL SYLLABLE PHIEUPH YAE HIEUH + {0xBC53, 0xD37E}, //10099 #HANGUL SYLLABLE PHIEUPH EO SSANGKIYEOK + {0xBC54, 0xD37F}, //10100 #HANGUL SYLLABLE PHIEUPH EO KIYEOKSIOS + {0xBC55, 0xD381}, //10101 #HANGUL SYLLABLE PHIEUPH EO NIEUNCIEUC + {0xBC56, 0xD382}, //10102 #HANGUL SYLLABLE PHIEUPH EO NIEUNHIEUH + {0xBC57, 0xD383}, //10103 #HANGUL SYLLABLE PHIEUPH EO TIKEUT + {0xBC58, 0xD385}, //10104 #HANGUL SYLLABLE PHIEUPH EO RIEULKIYEOK + {0xBC59, 0xD386}, //10105 #HANGUL SYLLABLE PHIEUPH EO RIEULMIEUM + {0xBC5A, 0xD387}, //10106 #HANGUL SYLLABLE PHIEUPH EO RIEULPIEUP + {0xBC61, 0xD388}, //10107 #HANGUL SYLLABLE PHIEUPH EO RIEULSIOS + {0xBC62, 0xD389}, //10108 #HANGUL SYLLABLE PHIEUPH EO RIEULTHIEUTH + {0xBC63, 0xD38A}, //10109 #HANGUL SYLLABLE PHIEUPH EO RIEULPHIEUPH + {0xBC64, 0xD38B}, //10110 #HANGUL SYLLABLE PHIEUPH EO RIEULHIEUH + {0xBC65, 0xD38E}, //10111 #HANGUL SYLLABLE PHIEUPH EO PIEUPSIOS + {0xBC66, 0xD392}, //10112 #HANGUL SYLLABLE PHIEUPH EO CIEUC + {0xBC67, 0xD393}, //10113 #HANGUL SYLLABLE PHIEUPH EO CHIEUCH + {0xBC68, 0xD394}, //10114 #HANGUL SYLLABLE PHIEUPH EO KHIEUKH + {0xBC69, 0xD395}, //10115 #HANGUL SYLLABLE PHIEUPH EO THIEUTH + {0xBC6A, 0xD396}, //10116 #HANGUL SYLLABLE PHIEUPH EO PHIEUPH + {0xBC6B, 0xD397}, //10117 #HANGUL SYLLABLE PHIEUPH EO HIEUH + {0xBC6C, 0xD39A}, //10118 #HANGUL SYLLABLE PHIEUPH E SSANGKIYEOK + {0xBC6D, 0xD39B}, //10119 #HANGUL SYLLABLE PHIEUPH E KIYEOKSIOS + {0xBC6E, 0xD39D}, //10120 #HANGUL SYLLABLE PHIEUPH E NIEUNCIEUC + {0xBC6F, 0xD39E}, //10121 #HANGUL SYLLABLE PHIEUPH E NIEUNHIEUH + {0xBC70, 0xD39F}, //10122 #HANGUL SYLLABLE PHIEUPH E TIKEUT + {0xBC71, 0xD3A1}, //10123 #HANGUL SYLLABLE PHIEUPH E RIEULKIYEOK + {0xBC72, 0xD3A2}, //10124 #HANGUL SYLLABLE PHIEUPH E RIEULMIEUM + {0xBC73, 0xD3A3}, //10125 #HANGUL SYLLABLE PHIEUPH E RIEULPIEUP + {0xBC74, 0xD3A4}, //10126 #HANGUL SYLLABLE PHIEUPH E RIEULSIOS + {0xBC75, 0xD3A5}, //10127 #HANGUL SYLLABLE PHIEUPH E RIEULTHIEUTH + {0xBC76, 0xD3A6}, //10128 #HANGUL SYLLABLE PHIEUPH E RIEULPHIEUPH + {0xBC77, 0xD3A7}, //10129 #HANGUL SYLLABLE PHIEUPH E RIEULHIEUH + {0xBC78, 0xD3AA}, //10130 #HANGUL SYLLABLE PHIEUPH E PIEUPSIOS + {0xBC79, 0xD3AC}, //10131 #HANGUL SYLLABLE PHIEUPH E SSANGSIOS + {0xBC7A, 0xD3AE}, //10132 #HANGUL SYLLABLE PHIEUPH E CIEUC + {0xBC81, 0xD3AF}, //10133 #HANGUL SYLLABLE PHIEUPH E CHIEUCH + {0xBC82, 0xD3B0}, //10134 #HANGUL SYLLABLE PHIEUPH E KHIEUKH + {0xBC83, 0xD3B1}, //10135 #HANGUL SYLLABLE PHIEUPH E THIEUTH + {0xBC84, 0xD3B2}, //10136 #HANGUL SYLLABLE PHIEUPH E PHIEUPH + {0xBC85, 0xD3B3}, //10137 #HANGUL SYLLABLE PHIEUPH E HIEUH + {0xBC86, 0xD3B5}, //10138 #HANGUL SYLLABLE PHIEUPH YEO KIYEOK + {0xBC87, 0xD3B6}, //10139 #HANGUL SYLLABLE PHIEUPH YEO SSANGKIYEOK + {0xBC88, 0xD3B7}, //10140 #HANGUL SYLLABLE PHIEUPH YEO KIYEOKSIOS + {0xBC89, 0xD3B9}, //10141 #HANGUL SYLLABLE PHIEUPH YEO NIEUNCIEUC + {0xBC8A, 0xD3BA}, //10142 #HANGUL SYLLABLE PHIEUPH YEO NIEUNHIEUH + {0xBC8B, 0xD3BB}, //10143 #HANGUL SYLLABLE PHIEUPH YEO TIKEUT + {0xBC8C, 0xD3BD}, //10144 #HANGUL SYLLABLE PHIEUPH YEO RIEULKIYEOK + {0xBC8D, 0xD3BE}, //10145 #HANGUL SYLLABLE PHIEUPH YEO RIEULMIEUM + {0xBC8E, 0xD3BF}, //10146 #HANGUL SYLLABLE PHIEUPH YEO RIEULPIEUP + {0xBC8F, 0xD3C0}, //10147 #HANGUL SYLLABLE PHIEUPH YEO RIEULSIOS + {0xBC90, 0xD3C1}, //10148 #HANGUL SYLLABLE PHIEUPH YEO RIEULTHIEUTH + {0xBC91, 0xD3C2}, //10149 #HANGUL SYLLABLE PHIEUPH YEO RIEULPHIEUPH + {0xBC92, 0xD3C3}, //10150 #HANGUL SYLLABLE PHIEUPH YEO RIEULHIEUH + {0xBC93, 0xD3C6}, //10151 #HANGUL SYLLABLE PHIEUPH YEO PIEUPSIOS + {0xBC94, 0xD3C7}, //10152 #HANGUL SYLLABLE PHIEUPH YEO SIOS + {0xBC95, 0xD3CA}, //10153 #HANGUL SYLLABLE PHIEUPH YEO CIEUC + {0xBC96, 0xD3CB}, //10154 #HANGUL SYLLABLE PHIEUPH YEO CHIEUCH + {0xBC97, 0xD3CC}, //10155 #HANGUL SYLLABLE PHIEUPH YEO KHIEUKH + {0xBC98, 0xD3CD}, //10156 #HANGUL SYLLABLE PHIEUPH YEO THIEUTH + {0xBC99, 0xD3CE}, //10157 #HANGUL SYLLABLE PHIEUPH YEO PHIEUPH + {0xBC9A, 0xD3CF}, //10158 #HANGUL SYLLABLE PHIEUPH YEO HIEUH + {0xBC9B, 0xD3D1}, //10159 #HANGUL SYLLABLE PHIEUPH YE KIYEOK + {0xBC9C, 0xD3D2}, //10160 #HANGUL SYLLABLE PHIEUPH YE SSANGKIYEOK + {0xBC9D, 0xD3D3}, //10161 #HANGUL SYLLABLE PHIEUPH YE KIYEOKSIOS + {0xBC9E, 0xD3D4}, //10162 #HANGUL SYLLABLE PHIEUPH YE NIEUN + {0xBC9F, 0xD3D5}, //10163 #HANGUL SYLLABLE PHIEUPH YE NIEUNCIEUC + {0xBCA0, 0xD3D6}, //10164 #HANGUL SYLLABLE PHIEUPH YE NIEUNHIEUH + {0xBCA1, 0xC0E5}, //10165 #HANGUL SYLLABLE SIOS YA KIYEOK + {0xBCA2, 0xC0E8}, //10166 #HANGUL SYLLABLE SIOS YA NIEUN + {0xBCA3, 0xC0EC}, //10167 #HANGUL SYLLABLE SIOS YA RIEUL + {0xBCA4, 0xC0F4}, //10168 #HANGUL SYLLABLE SIOS YA MIEUM + {0xBCA5, 0xC0F5}, //10169 #HANGUL SYLLABLE SIOS YA PIEUP + {0xBCA6, 0xC0F7}, //10170 #HANGUL SYLLABLE SIOS YA SIOS + {0xBCA7, 0xC0F9}, //10171 #HANGUL SYLLABLE SIOS YA IEUNG + {0xBCA8, 0xC100}, //10172 #HANGUL SYLLABLE SIOS YAE + {0xBCA9, 0xC104}, //10173 #HANGUL SYLLABLE SIOS YAE NIEUN + {0xBCAA, 0xC108}, //10174 #HANGUL SYLLABLE SIOS YAE RIEUL + {0xBCAB, 0xC110}, //10175 #HANGUL SYLLABLE SIOS YAE MIEUM + {0xBCAC, 0xC115}, //10176 #HANGUL SYLLABLE SIOS YAE IEUNG + {0xBCAD, 0xC11C}, //10177 #HANGUL SYLLABLE SIOS EO + {0xBCAE, 0xC11D}, //10178 #HANGUL SYLLABLE SIOS EO KIYEOK + {0xBCAF, 0xC11E}, //10179 #HANGUL SYLLABLE SIOS EO SSANGKIYEOK + {0xBCB0, 0xC11F}, //10180 #HANGUL SYLLABLE SIOS EO KIYEOKSIOS + {0xBCB1, 0xC120}, //10181 #HANGUL SYLLABLE SIOS EO NIEUN + {0xBCB2, 0xC123}, //10182 #HANGUL SYLLABLE SIOS EO TIKEUT + {0xBCB3, 0xC124}, //10183 #HANGUL SYLLABLE SIOS EO RIEUL + {0xBCB4, 0xC126}, //10184 #HANGUL SYLLABLE SIOS EO RIEULMIEUM + {0xBCB5, 0xC127}, //10185 #HANGUL SYLLABLE SIOS EO RIEULPIEUP + {0xBCB6, 0xC12C}, //10186 #HANGUL SYLLABLE SIOS EO MIEUM + {0xBCB7, 0xC12D}, //10187 #HANGUL SYLLABLE SIOS EO PIEUP + {0xBCB8, 0xC12F}, //10188 #HANGUL SYLLABLE SIOS EO SIOS + {0xBCB9, 0xC130}, //10189 #HANGUL SYLLABLE SIOS EO SSANGSIOS + {0xBCBA, 0xC131}, //10190 #HANGUL SYLLABLE SIOS EO IEUNG + {0xBCBB, 0xC136}, //10191 #HANGUL SYLLABLE SIOS EO PHIEUPH + {0xBCBC, 0xC138}, //10192 #HANGUL SYLLABLE SIOS E + {0xBCBD, 0xC139}, //10193 #HANGUL SYLLABLE SIOS E KIYEOK + {0xBCBE, 0xC13C}, //10194 #HANGUL SYLLABLE SIOS E NIEUN + {0xBCBF, 0xC140}, //10195 #HANGUL SYLLABLE SIOS E RIEUL + {0xBCC0, 0xC148}, //10196 #HANGUL SYLLABLE SIOS E MIEUM + {0xBCC1, 0xC149}, //10197 #HANGUL SYLLABLE SIOS E PIEUP + {0xBCC2, 0xC14B}, //10198 #HANGUL SYLLABLE SIOS E SIOS + {0xBCC3, 0xC14C}, //10199 #HANGUL SYLLABLE SIOS E SSANGSIOS + {0xBCC4, 0xC14D}, //10200 #HANGUL SYLLABLE SIOS E IEUNG + {0xBCC5, 0xC154}, //10201 #HANGUL SYLLABLE SIOS YEO + {0xBCC6, 0xC155}, //10202 #HANGUL SYLLABLE SIOS YEO KIYEOK + {0xBCC7, 0xC158}, //10203 #HANGUL SYLLABLE SIOS YEO NIEUN + {0xBCC8, 0xC15C}, //10204 #HANGUL SYLLABLE SIOS YEO RIEUL + {0xBCC9, 0xC164}, //10205 #HANGUL SYLLABLE SIOS YEO MIEUM + {0xBCCA, 0xC165}, //10206 #HANGUL SYLLABLE SIOS YEO PIEUP + {0xBCCB, 0xC167}, //10207 #HANGUL SYLLABLE SIOS YEO SIOS + {0xBCCC, 0xC168}, //10208 #HANGUL SYLLABLE SIOS YEO SSANGSIOS + {0xBCCD, 0xC169}, //10209 #HANGUL SYLLABLE SIOS YEO IEUNG + {0xBCCE, 0xC170}, //10210 #HANGUL SYLLABLE SIOS YE + {0xBCCF, 0xC174}, //10211 #HANGUL SYLLABLE SIOS YE NIEUN + {0xBCD0, 0xC178}, //10212 #HANGUL SYLLABLE SIOS YE RIEUL + {0xBCD1, 0xC185}, //10213 #HANGUL SYLLABLE SIOS YE IEUNG + {0xBCD2, 0xC18C}, //10214 #HANGUL SYLLABLE SIOS O + {0xBCD3, 0xC18D}, //10215 #HANGUL SYLLABLE SIOS O KIYEOK + {0xBCD4, 0xC18E}, //10216 #HANGUL SYLLABLE SIOS O SSANGKIYEOK + {0xBCD5, 0xC190}, //10217 #HANGUL SYLLABLE SIOS O NIEUN + {0xBCD6, 0xC194}, //10218 #HANGUL SYLLABLE SIOS O RIEUL + {0xBCD7, 0xC196}, //10219 #HANGUL SYLLABLE SIOS O RIEULMIEUM + {0xBCD8, 0xC19C}, //10220 #HANGUL SYLLABLE SIOS O MIEUM + {0xBCD9, 0xC19D}, //10221 #HANGUL SYLLABLE SIOS O PIEUP + {0xBCDA, 0xC19F}, //10222 #HANGUL SYLLABLE SIOS O SIOS + {0xBCDB, 0xC1A1}, //10223 #HANGUL SYLLABLE SIOS O IEUNG + {0xBCDC, 0xC1A5}, //10224 #HANGUL SYLLABLE SIOS O THIEUTH + {0xBCDD, 0xC1A8}, //10225 #HANGUL SYLLABLE SIOS WA + {0xBCDE, 0xC1A9}, //10226 #HANGUL SYLLABLE SIOS WA KIYEOK + {0xBCDF, 0xC1AC}, //10227 #HANGUL SYLLABLE SIOS WA NIEUN + {0xBCE0, 0xC1B0}, //10228 #HANGUL SYLLABLE SIOS WA RIEUL + {0xBCE1, 0xC1BD}, //10229 #HANGUL SYLLABLE SIOS WA IEUNG + {0xBCE2, 0xC1C4}, //10230 #HANGUL SYLLABLE SIOS WAE + {0xBCE3, 0xC1C8}, //10231 #HANGUL SYLLABLE SIOS WAE NIEUN + {0xBCE4, 0xC1CC}, //10232 #HANGUL SYLLABLE SIOS WAE RIEUL + {0xBCE5, 0xC1D4}, //10233 #HANGUL SYLLABLE SIOS WAE MIEUM + {0xBCE6, 0xC1D7}, //10234 #HANGUL SYLLABLE SIOS WAE SIOS + {0xBCE7, 0xC1D8}, //10235 #HANGUL SYLLABLE SIOS WAE SSANGSIOS + {0xBCE8, 0xC1E0}, //10236 #HANGUL SYLLABLE SIOS OE + {0xBCE9, 0xC1E4}, //10237 #HANGUL SYLLABLE SIOS OE NIEUN + {0xBCEA, 0xC1E8}, //10238 #HANGUL SYLLABLE SIOS OE RIEUL + {0xBCEB, 0xC1F0}, //10239 #HANGUL SYLLABLE SIOS OE MIEUM + {0xBCEC, 0xC1F1}, //10240 #HANGUL SYLLABLE SIOS OE PIEUP + {0xBCED, 0xC1F3}, //10241 #HANGUL SYLLABLE SIOS OE SIOS + {0xBCEE, 0xC1FC}, //10242 #HANGUL SYLLABLE SIOS YO + {0xBCEF, 0xC1FD}, //10243 #HANGUL SYLLABLE SIOS YO KIYEOK + {0xBCF0, 0xC200}, //10244 #HANGUL SYLLABLE SIOS YO NIEUN + {0xBCF1, 0xC204}, //10245 #HANGUL SYLLABLE SIOS YO RIEUL + {0xBCF2, 0xC20C}, //10246 #HANGUL SYLLABLE SIOS YO MIEUM + {0xBCF3, 0xC20D}, //10247 #HANGUL SYLLABLE SIOS YO PIEUP + {0xBCF4, 0xC20F}, //10248 #HANGUL SYLLABLE SIOS YO SIOS + {0xBCF5, 0xC211}, //10249 #HANGUL SYLLABLE SIOS YO IEUNG + {0xBCF6, 0xC218}, //10250 #HANGUL SYLLABLE SIOS U + {0xBCF7, 0xC219}, //10251 #HANGUL SYLLABLE SIOS U KIYEOK + {0xBCF8, 0xC21C}, //10252 #HANGUL SYLLABLE SIOS U NIEUN + {0xBCF9, 0xC21F}, //10253 #HANGUL SYLLABLE SIOS U TIKEUT + {0xBCFA, 0xC220}, //10254 #HANGUL SYLLABLE SIOS U RIEUL + {0xBCFB, 0xC228}, //10255 #HANGUL SYLLABLE SIOS U MIEUM + {0xBCFC, 0xC229}, //10256 #HANGUL SYLLABLE SIOS U PIEUP + {0xBCFD, 0xC22B}, //10257 #HANGUL SYLLABLE SIOS U SIOS + {0xBCFE, 0xC22D}, //10258 #HANGUL SYLLABLE SIOS U IEUNG + {0xBD41, 0xD3D7}, //10259 #HANGUL SYLLABLE PHIEUPH YE TIKEUT + {0xBD42, 0xD3D9}, //10260 #HANGUL SYLLABLE PHIEUPH YE RIEULKIYEOK + {0xBD43, 0xD3DA}, //10261 #HANGUL SYLLABLE PHIEUPH YE RIEULMIEUM + {0xBD44, 0xD3DB}, //10262 #HANGUL SYLLABLE PHIEUPH YE RIEULPIEUP + {0xBD45, 0xD3DC}, //10263 #HANGUL SYLLABLE PHIEUPH YE RIEULSIOS + {0xBD46, 0xD3DD}, //10264 #HANGUL SYLLABLE PHIEUPH YE RIEULTHIEUTH + {0xBD47, 0xD3DE}, //10265 #HANGUL SYLLABLE PHIEUPH YE RIEULPHIEUPH + {0xBD48, 0xD3DF}, //10266 #HANGUL SYLLABLE PHIEUPH YE RIEULHIEUH + {0xBD49, 0xD3E0}, //10267 #HANGUL SYLLABLE PHIEUPH YE MIEUM + {0xBD4A, 0xD3E2}, //10268 #HANGUL SYLLABLE PHIEUPH YE PIEUPSIOS + {0xBD4B, 0xD3E4}, //10269 #HANGUL SYLLABLE PHIEUPH YE SSANGSIOS + {0xBD4C, 0xD3E5}, //10270 #HANGUL SYLLABLE PHIEUPH YE IEUNG + {0xBD4D, 0xD3E6}, //10271 #HANGUL SYLLABLE PHIEUPH YE CIEUC + {0xBD4E, 0xD3E7}, //10272 #HANGUL SYLLABLE PHIEUPH YE CHIEUCH + {0xBD4F, 0xD3E8}, //10273 #HANGUL SYLLABLE PHIEUPH YE KHIEUKH + {0xBD50, 0xD3E9}, //10274 #HANGUL SYLLABLE PHIEUPH YE THIEUTH + {0xBD51, 0xD3EA}, //10275 #HANGUL SYLLABLE PHIEUPH YE PHIEUPH + {0xBD52, 0xD3EB}, //10276 #HANGUL SYLLABLE PHIEUPH YE HIEUH + {0xBD53, 0xD3EE}, //10277 #HANGUL SYLLABLE PHIEUPH O SSANGKIYEOK + {0xBD54, 0xD3EF}, //10278 #HANGUL SYLLABLE PHIEUPH O KIYEOKSIOS + {0xBD55, 0xD3F1}, //10279 #HANGUL SYLLABLE PHIEUPH O NIEUNCIEUC + {0xBD56, 0xD3F2}, //10280 #HANGUL SYLLABLE PHIEUPH O NIEUNHIEUH + {0xBD57, 0xD3F3}, //10281 #HANGUL SYLLABLE PHIEUPH O TIKEUT + {0xBD58, 0xD3F5}, //10282 #HANGUL SYLLABLE PHIEUPH O RIEULKIYEOK + {0xBD59, 0xD3F6}, //10283 #HANGUL SYLLABLE PHIEUPH O RIEULMIEUM + {0xBD5A, 0xD3F7}, //10284 #HANGUL SYLLABLE PHIEUPH O RIEULPIEUP + {0xBD61, 0xD3F8}, //10285 #HANGUL SYLLABLE PHIEUPH O RIEULSIOS + {0xBD62, 0xD3F9}, //10286 #HANGUL SYLLABLE PHIEUPH O RIEULTHIEUTH + {0xBD63, 0xD3FA}, //10287 #HANGUL SYLLABLE PHIEUPH O RIEULPHIEUPH + {0xBD64, 0xD3FB}, //10288 #HANGUL SYLLABLE PHIEUPH O RIEULHIEUH + {0xBD65, 0xD3FE}, //10289 #HANGUL SYLLABLE PHIEUPH O PIEUPSIOS + {0xBD66, 0xD400}, //10290 #HANGUL SYLLABLE PHIEUPH O SSANGSIOS + {0xBD67, 0xD402}, //10291 #HANGUL SYLLABLE PHIEUPH O CIEUC + {0xBD68, 0xD403}, //10292 #HANGUL SYLLABLE PHIEUPH O CHIEUCH + {0xBD69, 0xD404}, //10293 #HANGUL SYLLABLE PHIEUPH O KHIEUKH + {0xBD6A, 0xD405}, //10294 #HANGUL SYLLABLE PHIEUPH O THIEUTH + {0xBD6B, 0xD406}, //10295 #HANGUL SYLLABLE PHIEUPH O PHIEUPH + {0xBD6C, 0xD407}, //10296 #HANGUL SYLLABLE PHIEUPH O HIEUH + {0xBD6D, 0xD409}, //10297 #HANGUL SYLLABLE PHIEUPH WA KIYEOK + {0xBD6E, 0xD40A}, //10298 #HANGUL SYLLABLE PHIEUPH WA SSANGKIYEOK + {0xBD6F, 0xD40B}, //10299 #HANGUL SYLLABLE PHIEUPH WA KIYEOKSIOS + {0xBD70, 0xD40C}, //10300 #HANGUL SYLLABLE PHIEUPH WA NIEUN + {0xBD71, 0xD40D}, //10301 #HANGUL SYLLABLE PHIEUPH WA NIEUNCIEUC + {0xBD72, 0xD40E}, //10302 #HANGUL SYLLABLE PHIEUPH WA NIEUNHIEUH + {0xBD73, 0xD40F}, //10303 #HANGUL SYLLABLE PHIEUPH WA TIKEUT + {0xBD74, 0xD410}, //10304 #HANGUL SYLLABLE PHIEUPH WA RIEUL + {0xBD75, 0xD411}, //10305 #HANGUL SYLLABLE PHIEUPH WA RIEULKIYEOK + {0xBD76, 0xD412}, //10306 #HANGUL SYLLABLE PHIEUPH WA RIEULMIEUM + {0xBD77, 0xD413}, //10307 #HANGUL SYLLABLE PHIEUPH WA RIEULPIEUP + {0xBD78, 0xD414}, //10308 #HANGUL SYLLABLE PHIEUPH WA RIEULSIOS + {0xBD79, 0xD415}, //10309 #HANGUL SYLLABLE PHIEUPH WA RIEULTHIEUTH + {0xBD7A, 0xD416}, //10310 #HANGUL SYLLABLE PHIEUPH WA RIEULPHIEUPH + {0xBD81, 0xD417}, //10311 #HANGUL SYLLABLE PHIEUPH WA RIEULHIEUH + {0xBD82, 0xD418}, //10312 #HANGUL SYLLABLE PHIEUPH WA MIEUM + {0xBD83, 0xD419}, //10313 #HANGUL SYLLABLE PHIEUPH WA PIEUP + {0xBD84, 0xD41A}, //10314 #HANGUL SYLLABLE PHIEUPH WA PIEUPSIOS + {0xBD85, 0xD41B}, //10315 #HANGUL SYLLABLE PHIEUPH WA SIOS + {0xBD86, 0xD41C}, //10316 #HANGUL SYLLABLE PHIEUPH WA SSANGSIOS + {0xBD87, 0xD41E}, //10317 #HANGUL SYLLABLE PHIEUPH WA CIEUC + {0xBD88, 0xD41F}, //10318 #HANGUL SYLLABLE PHIEUPH WA CHIEUCH + {0xBD89, 0xD420}, //10319 #HANGUL SYLLABLE PHIEUPH WA KHIEUKH + {0xBD8A, 0xD421}, //10320 #HANGUL SYLLABLE PHIEUPH WA THIEUTH + {0xBD8B, 0xD422}, //10321 #HANGUL SYLLABLE PHIEUPH WA PHIEUPH + {0xBD8C, 0xD423}, //10322 #HANGUL SYLLABLE PHIEUPH WA HIEUH + {0xBD8D, 0xD424}, //10323 #HANGUL SYLLABLE PHIEUPH WAE + {0xBD8E, 0xD425}, //10324 #HANGUL SYLLABLE PHIEUPH WAE KIYEOK + {0xBD8F, 0xD426}, //10325 #HANGUL SYLLABLE PHIEUPH WAE SSANGKIYEOK + {0xBD90, 0xD427}, //10326 #HANGUL SYLLABLE PHIEUPH WAE KIYEOKSIOS + {0xBD91, 0xD428}, //10327 #HANGUL SYLLABLE PHIEUPH WAE NIEUN + {0xBD92, 0xD429}, //10328 #HANGUL SYLLABLE PHIEUPH WAE NIEUNCIEUC + {0xBD93, 0xD42A}, //10329 #HANGUL SYLLABLE PHIEUPH WAE NIEUNHIEUH + {0xBD94, 0xD42B}, //10330 #HANGUL SYLLABLE PHIEUPH WAE TIKEUT + {0xBD95, 0xD42C}, //10331 #HANGUL SYLLABLE PHIEUPH WAE RIEUL + {0xBD96, 0xD42D}, //10332 #HANGUL SYLLABLE PHIEUPH WAE RIEULKIYEOK + {0xBD97, 0xD42E}, //10333 #HANGUL SYLLABLE PHIEUPH WAE RIEULMIEUM + {0xBD98, 0xD42F}, //10334 #HANGUL SYLLABLE PHIEUPH WAE RIEULPIEUP + {0xBD99, 0xD430}, //10335 #HANGUL SYLLABLE PHIEUPH WAE RIEULSIOS + {0xBD9A, 0xD431}, //10336 #HANGUL SYLLABLE PHIEUPH WAE RIEULTHIEUTH + {0xBD9B, 0xD432}, //10337 #HANGUL SYLLABLE PHIEUPH WAE RIEULPHIEUPH + {0xBD9C, 0xD433}, //10338 #HANGUL SYLLABLE PHIEUPH WAE RIEULHIEUH + {0xBD9D, 0xD434}, //10339 #HANGUL SYLLABLE PHIEUPH WAE MIEUM + {0xBD9E, 0xD435}, //10340 #HANGUL SYLLABLE PHIEUPH WAE PIEUP + {0xBD9F, 0xD436}, //10341 #HANGUL SYLLABLE PHIEUPH WAE PIEUPSIOS + {0xBDA0, 0xD437}, //10342 #HANGUL SYLLABLE PHIEUPH WAE SIOS + {0xBDA1, 0xC22F}, //10343 #HANGUL SYLLABLE SIOS U CHIEUCH + {0xBDA2, 0xC231}, //10344 #HANGUL SYLLABLE SIOS U THIEUTH + {0xBDA3, 0xC232}, //10345 #HANGUL SYLLABLE SIOS U PHIEUPH + {0xBDA4, 0xC234}, //10346 #HANGUL SYLLABLE SIOS WEO + {0xBDA5, 0xC248}, //10347 #HANGUL SYLLABLE SIOS WEO SSANGSIOS + {0xBDA6, 0xC250}, //10348 #HANGUL SYLLABLE SIOS WE + {0xBDA7, 0xC251}, //10349 #HANGUL SYLLABLE SIOS WE KIYEOK + {0xBDA8, 0xC254}, //10350 #HANGUL SYLLABLE SIOS WE NIEUN + {0xBDA9, 0xC258}, //10351 #HANGUL SYLLABLE SIOS WE RIEUL + {0xBDAA, 0xC260}, //10352 #HANGUL SYLLABLE SIOS WE MIEUM + {0xBDAB, 0xC265}, //10353 #HANGUL SYLLABLE SIOS WE IEUNG + {0xBDAC, 0xC26C}, //10354 #HANGUL SYLLABLE SIOS WI + {0xBDAD, 0xC26D}, //10355 #HANGUL SYLLABLE SIOS WI KIYEOK + {0xBDAE, 0xC270}, //10356 #HANGUL SYLLABLE SIOS WI NIEUN + {0xBDAF, 0xC274}, //10357 #HANGUL SYLLABLE SIOS WI RIEUL + {0xBDB0, 0xC27C}, //10358 #HANGUL SYLLABLE SIOS WI MIEUM + {0xBDB1, 0xC27D}, //10359 #HANGUL SYLLABLE SIOS WI PIEUP + {0xBDB2, 0xC27F}, //10360 #HANGUL SYLLABLE SIOS WI SIOS + {0xBDB3, 0xC281}, //10361 #HANGUL SYLLABLE SIOS WI IEUNG + {0xBDB4, 0xC288}, //10362 #HANGUL SYLLABLE SIOS YU + {0xBDB5, 0xC289}, //10363 #HANGUL SYLLABLE SIOS YU KIYEOK + {0xBDB6, 0xC290}, //10364 #HANGUL SYLLABLE SIOS YU RIEUL + {0xBDB7, 0xC298}, //10365 #HANGUL SYLLABLE SIOS YU MIEUM + {0xBDB8, 0xC29B}, //10366 #HANGUL SYLLABLE SIOS YU SIOS + {0xBDB9, 0xC29D}, //10367 #HANGUL SYLLABLE SIOS YU IEUNG + {0xBDBA, 0xC2A4}, //10368 #HANGUL SYLLABLE SIOS EU + {0xBDBB, 0xC2A5}, //10369 #HANGUL SYLLABLE SIOS EU KIYEOK + {0xBDBC, 0xC2A8}, //10370 #HANGUL SYLLABLE SIOS EU NIEUN + {0xBDBD, 0xC2AC}, //10371 #HANGUL SYLLABLE SIOS EU RIEUL + {0xBDBE, 0xC2AD}, //10372 #HANGUL SYLLABLE SIOS EU RIEULKIYEOK + {0xBDBF, 0xC2B4}, //10373 #HANGUL SYLLABLE SIOS EU MIEUM + {0xBDC0, 0xC2B5}, //10374 #HANGUL SYLLABLE SIOS EU PIEUP + {0xBDC1, 0xC2B7}, //10375 #HANGUL SYLLABLE SIOS EU SIOS + {0xBDC2, 0xC2B9}, //10376 #HANGUL SYLLABLE SIOS EU IEUNG + {0xBDC3, 0xC2DC}, //10377 #HANGUL SYLLABLE SIOS I + {0xBDC4, 0xC2DD}, //10378 #HANGUL SYLLABLE SIOS I KIYEOK + {0xBDC5, 0xC2E0}, //10379 #HANGUL SYLLABLE SIOS I NIEUN + {0xBDC6, 0xC2E3}, //10380 #HANGUL SYLLABLE SIOS I TIKEUT + {0xBDC7, 0xC2E4}, //10381 #HANGUL SYLLABLE SIOS I RIEUL + {0xBDC8, 0xC2EB}, //10382 #HANGUL SYLLABLE SIOS I RIEULHIEUH + {0xBDC9, 0xC2EC}, //10383 #HANGUL SYLLABLE SIOS I MIEUM + {0xBDCA, 0xC2ED}, //10384 #HANGUL SYLLABLE SIOS I PIEUP + {0xBDCB, 0xC2EF}, //10385 #HANGUL SYLLABLE SIOS I SIOS + {0xBDCC, 0xC2F1}, //10386 #HANGUL SYLLABLE SIOS I IEUNG + {0xBDCD, 0xC2F6}, //10387 #HANGUL SYLLABLE SIOS I PHIEUPH + {0xBDCE, 0xC2F8}, //10388 #HANGUL SYLLABLE SSANGSIOS A + {0xBDCF, 0xC2F9}, //10389 #HANGUL SYLLABLE SSANGSIOS A KIYEOK + {0xBDD0, 0xC2FB}, //10390 #HANGUL SYLLABLE SSANGSIOS A KIYEOKSIOS + {0xBDD1, 0xC2FC}, //10391 #HANGUL SYLLABLE SSANGSIOS A NIEUN + {0xBDD2, 0xC300}, //10392 #HANGUL SYLLABLE SSANGSIOS A RIEUL + {0xBDD3, 0xC308}, //10393 #HANGUL SYLLABLE SSANGSIOS A MIEUM + {0xBDD4, 0xC309}, //10394 #HANGUL SYLLABLE SSANGSIOS A PIEUP + {0xBDD5, 0xC30C}, //10395 #HANGUL SYLLABLE SSANGSIOS A SSANGSIOS + {0xBDD6, 0xC30D}, //10396 #HANGUL SYLLABLE SSANGSIOS A IEUNG + {0xBDD7, 0xC313}, //10397 #HANGUL SYLLABLE SSANGSIOS A HIEUH + {0xBDD8, 0xC314}, //10398 #HANGUL SYLLABLE SSANGSIOS AE + {0xBDD9, 0xC315}, //10399 #HANGUL SYLLABLE SSANGSIOS AE KIYEOK + {0xBDDA, 0xC318}, //10400 #HANGUL SYLLABLE SSANGSIOS AE NIEUN + {0xBDDB, 0xC31C}, //10401 #HANGUL SYLLABLE SSANGSIOS AE RIEUL + {0xBDDC, 0xC324}, //10402 #HANGUL SYLLABLE SSANGSIOS AE MIEUM + {0xBDDD, 0xC325}, //10403 #HANGUL SYLLABLE SSANGSIOS AE PIEUP + {0xBDDE, 0xC328}, //10404 #HANGUL SYLLABLE SSANGSIOS AE SSANGSIOS + {0xBDDF, 0xC329}, //10405 #HANGUL SYLLABLE SSANGSIOS AE IEUNG + {0xBDE0, 0xC345}, //10406 #HANGUL SYLLABLE SSANGSIOS YA IEUNG + {0xBDE1, 0xC368}, //10407 #HANGUL SYLLABLE SSANGSIOS EO + {0xBDE2, 0xC369}, //10408 #HANGUL SYLLABLE SSANGSIOS EO KIYEOK + {0xBDE3, 0xC36C}, //10409 #HANGUL SYLLABLE SSANGSIOS EO NIEUN + {0xBDE4, 0xC370}, //10410 #HANGUL SYLLABLE SSANGSIOS EO RIEUL + {0xBDE5, 0xC372}, //10411 #HANGUL SYLLABLE SSANGSIOS EO RIEULMIEUM + {0xBDE6, 0xC378}, //10412 #HANGUL SYLLABLE SSANGSIOS EO MIEUM + {0xBDE7, 0xC379}, //10413 #HANGUL SYLLABLE SSANGSIOS EO PIEUP + {0xBDE8, 0xC37C}, //10414 #HANGUL SYLLABLE SSANGSIOS EO SSANGSIOS + {0xBDE9, 0xC37D}, //10415 #HANGUL SYLLABLE SSANGSIOS EO IEUNG + {0xBDEA, 0xC384}, //10416 #HANGUL SYLLABLE SSANGSIOS E + {0xBDEB, 0xC388}, //10417 #HANGUL SYLLABLE SSANGSIOS E NIEUN + {0xBDEC, 0xC38C}, //10418 #HANGUL SYLLABLE SSANGSIOS E RIEUL + {0xBDED, 0xC3C0}, //10419 #HANGUL SYLLABLE SSANGSIOS YE NIEUN + {0xBDEE, 0xC3D8}, //10420 #HANGUL SYLLABLE SSANGSIOS O + {0xBDEF, 0xC3D9}, //10421 #HANGUL SYLLABLE SSANGSIOS O KIYEOK + {0xBDF0, 0xC3DC}, //10422 #HANGUL SYLLABLE SSANGSIOS O NIEUN + {0xBDF1, 0xC3DF}, //10423 #HANGUL SYLLABLE SSANGSIOS O TIKEUT + {0xBDF2, 0xC3E0}, //10424 #HANGUL SYLLABLE SSANGSIOS O RIEUL + {0xBDF3, 0xC3E2}, //10425 #HANGUL SYLLABLE SSANGSIOS O RIEULMIEUM + {0xBDF4, 0xC3E8}, //10426 #HANGUL SYLLABLE SSANGSIOS O MIEUM + {0xBDF5, 0xC3E9}, //10427 #HANGUL SYLLABLE SSANGSIOS O PIEUP + {0xBDF6, 0xC3ED}, //10428 #HANGUL SYLLABLE SSANGSIOS O IEUNG + {0xBDF7, 0xC3F4}, //10429 #HANGUL SYLLABLE SSANGSIOS WA + {0xBDF8, 0xC3F5}, //10430 #HANGUL SYLLABLE SSANGSIOS WA KIYEOK + {0xBDF9, 0xC3F8}, //10431 #HANGUL SYLLABLE SSANGSIOS WA NIEUN + {0xBDFA, 0xC408}, //10432 #HANGUL SYLLABLE SSANGSIOS WA SSANGSIOS + {0xBDFB, 0xC410}, //10433 #HANGUL SYLLABLE SSANGSIOS WAE + {0xBDFC, 0xC424}, //10434 #HANGUL SYLLABLE SSANGSIOS WAE SSANGSIOS + {0xBDFD, 0xC42C}, //10435 #HANGUL SYLLABLE SSANGSIOS OE + {0xBDFE, 0xC430}, //10436 #HANGUL SYLLABLE SSANGSIOS OE NIEUN + {0xBE41, 0xD438}, //10437 #HANGUL SYLLABLE PHIEUPH WAE SSANGSIOS + {0xBE42, 0xD439}, //10438 #HANGUL SYLLABLE PHIEUPH WAE IEUNG + {0xBE43, 0xD43A}, //10439 #HANGUL SYLLABLE PHIEUPH WAE CIEUC + {0xBE44, 0xD43B}, //10440 #HANGUL SYLLABLE PHIEUPH WAE CHIEUCH + {0xBE45, 0xD43C}, //10441 #HANGUL SYLLABLE PHIEUPH WAE KHIEUKH + {0xBE46, 0xD43D}, //10442 #HANGUL SYLLABLE PHIEUPH WAE THIEUTH + {0xBE47, 0xD43E}, //10443 #HANGUL SYLLABLE PHIEUPH WAE PHIEUPH + {0xBE48, 0xD43F}, //10444 #HANGUL SYLLABLE PHIEUPH WAE HIEUH + {0xBE49, 0xD441}, //10445 #HANGUL SYLLABLE PHIEUPH OE KIYEOK + {0xBE4A, 0xD442}, //10446 #HANGUL SYLLABLE PHIEUPH OE SSANGKIYEOK + {0xBE4B, 0xD443}, //10447 #HANGUL SYLLABLE PHIEUPH OE KIYEOKSIOS + {0xBE4C, 0xD445}, //10448 #HANGUL SYLLABLE PHIEUPH OE NIEUNCIEUC + {0xBE4D, 0xD446}, //10449 #HANGUL SYLLABLE PHIEUPH OE NIEUNHIEUH + {0xBE4E, 0xD447}, //10450 #HANGUL SYLLABLE PHIEUPH OE TIKEUT + {0xBE4F, 0xD448}, //10451 #HANGUL SYLLABLE PHIEUPH OE RIEUL + {0xBE50, 0xD449}, //10452 #HANGUL SYLLABLE PHIEUPH OE RIEULKIYEOK + {0xBE51, 0xD44A}, //10453 #HANGUL SYLLABLE PHIEUPH OE RIEULMIEUM + {0xBE52, 0xD44B}, //10454 #HANGUL SYLLABLE PHIEUPH OE RIEULPIEUP + {0xBE53, 0xD44C}, //10455 #HANGUL SYLLABLE PHIEUPH OE RIEULSIOS + {0xBE54, 0xD44D}, //10456 #HANGUL SYLLABLE PHIEUPH OE RIEULTHIEUTH + {0xBE55, 0xD44E}, //10457 #HANGUL SYLLABLE PHIEUPH OE RIEULPHIEUPH + {0xBE56, 0xD44F}, //10458 #HANGUL SYLLABLE PHIEUPH OE RIEULHIEUH + {0xBE57, 0xD450}, //10459 #HANGUL SYLLABLE PHIEUPH OE MIEUM + {0xBE58, 0xD451}, //10460 #HANGUL SYLLABLE PHIEUPH OE PIEUP + {0xBE59, 0xD452}, //10461 #HANGUL SYLLABLE PHIEUPH OE PIEUPSIOS + {0xBE5A, 0xD453}, //10462 #HANGUL SYLLABLE PHIEUPH OE SIOS + {0xBE61, 0xD454}, //10463 #HANGUL SYLLABLE PHIEUPH OE SSANGSIOS + {0xBE62, 0xD455}, //10464 #HANGUL SYLLABLE PHIEUPH OE IEUNG + {0xBE63, 0xD456}, //10465 #HANGUL SYLLABLE PHIEUPH OE CIEUC + {0xBE64, 0xD457}, //10466 #HANGUL SYLLABLE PHIEUPH OE CHIEUCH + {0xBE65, 0xD458}, //10467 #HANGUL SYLLABLE PHIEUPH OE KHIEUKH + {0xBE66, 0xD459}, //10468 #HANGUL SYLLABLE PHIEUPH OE THIEUTH + {0xBE67, 0xD45A}, //10469 #HANGUL SYLLABLE PHIEUPH OE PHIEUPH + {0xBE68, 0xD45B}, //10470 #HANGUL SYLLABLE PHIEUPH OE HIEUH + {0xBE69, 0xD45D}, //10471 #HANGUL SYLLABLE PHIEUPH YO KIYEOK + {0xBE6A, 0xD45E}, //10472 #HANGUL SYLLABLE PHIEUPH YO SSANGKIYEOK + {0xBE6B, 0xD45F}, //10473 #HANGUL SYLLABLE PHIEUPH YO KIYEOKSIOS + {0xBE6C, 0xD461}, //10474 #HANGUL SYLLABLE PHIEUPH YO NIEUNCIEUC + {0xBE6D, 0xD462}, //10475 #HANGUL SYLLABLE PHIEUPH YO NIEUNHIEUH + {0xBE6E, 0xD463}, //10476 #HANGUL SYLLABLE PHIEUPH YO TIKEUT + {0xBE6F, 0xD465}, //10477 #HANGUL SYLLABLE PHIEUPH YO RIEULKIYEOK + {0xBE70, 0xD466}, //10478 #HANGUL SYLLABLE PHIEUPH YO RIEULMIEUM + {0xBE71, 0xD467}, //10479 #HANGUL SYLLABLE PHIEUPH YO RIEULPIEUP + {0xBE72, 0xD468}, //10480 #HANGUL SYLLABLE PHIEUPH YO RIEULSIOS + {0xBE73, 0xD469}, //10481 #HANGUL SYLLABLE PHIEUPH YO RIEULTHIEUTH + {0xBE74, 0xD46A}, //10482 #HANGUL SYLLABLE PHIEUPH YO RIEULPHIEUPH + {0xBE75, 0xD46B}, //10483 #HANGUL SYLLABLE PHIEUPH YO RIEULHIEUH + {0xBE76, 0xD46C}, //10484 #HANGUL SYLLABLE PHIEUPH YO MIEUM + {0xBE77, 0xD46E}, //10485 #HANGUL SYLLABLE PHIEUPH YO PIEUPSIOS + {0xBE78, 0xD470}, //10486 #HANGUL SYLLABLE PHIEUPH YO SSANGSIOS + {0xBE79, 0xD471}, //10487 #HANGUL SYLLABLE PHIEUPH YO IEUNG + {0xBE7A, 0xD472}, //10488 #HANGUL SYLLABLE PHIEUPH YO CIEUC + {0xBE81, 0xD473}, //10489 #HANGUL SYLLABLE PHIEUPH YO CHIEUCH + {0xBE82, 0xD474}, //10490 #HANGUL SYLLABLE PHIEUPH YO KHIEUKH + {0xBE83, 0xD475}, //10491 #HANGUL SYLLABLE PHIEUPH YO THIEUTH + {0xBE84, 0xD476}, //10492 #HANGUL SYLLABLE PHIEUPH YO PHIEUPH + {0xBE85, 0xD477}, //10493 #HANGUL SYLLABLE PHIEUPH YO HIEUH + {0xBE86, 0xD47A}, //10494 #HANGUL SYLLABLE PHIEUPH U SSANGKIYEOK + {0xBE87, 0xD47B}, //10495 #HANGUL SYLLABLE PHIEUPH U KIYEOKSIOS + {0xBE88, 0xD47D}, //10496 #HANGUL SYLLABLE PHIEUPH U NIEUNCIEUC + {0xBE89, 0xD47E}, //10497 #HANGUL SYLLABLE PHIEUPH U NIEUNHIEUH + {0xBE8A, 0xD481}, //10498 #HANGUL SYLLABLE PHIEUPH U RIEULKIYEOK + {0xBE8B, 0xD483}, //10499 #HANGUL SYLLABLE PHIEUPH U RIEULPIEUP + {0xBE8C, 0xD484}, //10500 #HANGUL SYLLABLE PHIEUPH U RIEULSIOS + {0xBE8D, 0xD485}, //10501 #HANGUL SYLLABLE PHIEUPH U RIEULTHIEUTH + {0xBE8E, 0xD486}, //10502 #HANGUL SYLLABLE PHIEUPH U RIEULPHIEUPH + {0xBE8F, 0xD487}, //10503 #HANGUL SYLLABLE PHIEUPH U RIEULHIEUH + {0xBE90, 0xD48A}, //10504 #HANGUL SYLLABLE PHIEUPH U PIEUPSIOS + {0xBE91, 0xD48C}, //10505 #HANGUL SYLLABLE PHIEUPH U SSANGSIOS + {0xBE92, 0xD48E}, //10506 #HANGUL SYLLABLE PHIEUPH U CIEUC + {0xBE93, 0xD48F}, //10507 #HANGUL SYLLABLE PHIEUPH U CHIEUCH + {0xBE94, 0xD490}, //10508 #HANGUL SYLLABLE PHIEUPH U KHIEUKH + {0xBE95, 0xD491}, //10509 #HANGUL SYLLABLE PHIEUPH U THIEUTH + {0xBE96, 0xD492}, //10510 #HANGUL SYLLABLE PHIEUPH U PHIEUPH + {0xBE97, 0xD493}, //10511 #HANGUL SYLLABLE PHIEUPH U HIEUH + {0xBE98, 0xD495}, //10512 #HANGUL SYLLABLE PHIEUPH WEO KIYEOK + {0xBE99, 0xD496}, //10513 #HANGUL SYLLABLE PHIEUPH WEO SSANGKIYEOK + {0xBE9A, 0xD497}, //10514 #HANGUL SYLLABLE PHIEUPH WEO KIYEOKSIOS + {0xBE9B, 0xD498}, //10515 #HANGUL SYLLABLE PHIEUPH WEO NIEUN + {0xBE9C, 0xD499}, //10516 #HANGUL SYLLABLE PHIEUPH WEO NIEUNCIEUC + {0xBE9D, 0xD49A}, //10517 #HANGUL SYLLABLE PHIEUPH WEO NIEUNHIEUH + {0xBE9E, 0xD49B}, //10518 #HANGUL SYLLABLE PHIEUPH WEO TIKEUT + {0xBE9F, 0xD49C}, //10519 #HANGUL SYLLABLE PHIEUPH WEO RIEUL + {0xBEA0, 0xD49D}, //10520 #HANGUL SYLLABLE PHIEUPH WEO RIEULKIYEOK + {0xBEA1, 0xC434}, //10521 #HANGUL SYLLABLE SSANGSIOS OE RIEUL + {0xBEA2, 0xC43C}, //10522 #HANGUL SYLLABLE SSANGSIOS OE MIEUM + {0xBEA3, 0xC43D}, //10523 #HANGUL SYLLABLE SSANGSIOS OE PIEUP + {0xBEA4, 0xC448}, //10524 #HANGUL SYLLABLE SSANGSIOS YO + {0xBEA5, 0xC464}, //10525 #HANGUL SYLLABLE SSANGSIOS U + {0xBEA6, 0xC465}, //10526 #HANGUL SYLLABLE SSANGSIOS U KIYEOK + {0xBEA7, 0xC468}, //10527 #HANGUL SYLLABLE SSANGSIOS U NIEUN + {0xBEA8, 0xC46C}, //10528 #HANGUL SYLLABLE SSANGSIOS U RIEUL + {0xBEA9, 0xC474}, //10529 #HANGUL SYLLABLE SSANGSIOS U MIEUM + {0xBEAA, 0xC475}, //10530 #HANGUL SYLLABLE SSANGSIOS U PIEUP + {0xBEAB, 0xC479}, //10531 #HANGUL SYLLABLE SSANGSIOS U IEUNG + {0xBEAC, 0xC480}, //10532 #HANGUL SYLLABLE SSANGSIOS WEO + {0xBEAD, 0xC494}, //10533 #HANGUL SYLLABLE SSANGSIOS WEO SSANGSIOS + {0xBEAE, 0xC49C}, //10534 #HANGUL SYLLABLE SSANGSIOS WE + {0xBEAF, 0xC4B8}, //10535 #HANGUL SYLLABLE SSANGSIOS WI + {0xBEB0, 0xC4BC}, //10536 #HANGUL SYLLABLE SSANGSIOS WI NIEUN + {0xBEB1, 0xC4E9}, //10537 #HANGUL SYLLABLE SSANGSIOS YU IEUNG + {0xBEB2, 0xC4F0}, //10538 #HANGUL SYLLABLE SSANGSIOS EU + {0xBEB3, 0xC4F1}, //10539 #HANGUL SYLLABLE SSANGSIOS EU KIYEOK + {0xBEB4, 0xC4F4}, //10540 #HANGUL SYLLABLE SSANGSIOS EU NIEUN + {0xBEB5, 0xC4F8}, //10541 #HANGUL SYLLABLE SSANGSIOS EU RIEUL + {0xBEB6, 0xC4FA}, //10542 #HANGUL SYLLABLE SSANGSIOS EU RIEULMIEUM + {0xBEB7, 0xC4FF}, //10543 #HANGUL SYLLABLE SSANGSIOS EU RIEULHIEUH + {0xBEB8, 0xC500}, //10544 #HANGUL SYLLABLE SSANGSIOS EU MIEUM + {0xBEB9, 0xC501}, //10545 #HANGUL SYLLABLE SSANGSIOS EU PIEUP + {0xBEBA, 0xC50C}, //10546 #HANGUL SYLLABLE SSANGSIOS YI + {0xBEBB, 0xC510}, //10547 #HANGUL SYLLABLE SSANGSIOS YI NIEUN + {0xBEBC, 0xC514}, //10548 #HANGUL SYLLABLE SSANGSIOS YI RIEUL + {0xBEBD, 0xC51C}, //10549 #HANGUL SYLLABLE SSANGSIOS YI MIEUM + {0xBEBE, 0xC528}, //10550 #HANGUL SYLLABLE SSANGSIOS I + {0xBEBF, 0xC529}, //10551 #HANGUL SYLLABLE SSANGSIOS I KIYEOK + {0xBEC0, 0xC52C}, //10552 #HANGUL SYLLABLE SSANGSIOS I NIEUN + {0xBEC1, 0xC530}, //10553 #HANGUL SYLLABLE SSANGSIOS I RIEUL + {0xBEC2, 0xC538}, //10554 #HANGUL SYLLABLE SSANGSIOS I MIEUM + {0xBEC3, 0xC539}, //10555 #HANGUL SYLLABLE SSANGSIOS I PIEUP + {0xBEC4, 0xC53B}, //10556 #HANGUL SYLLABLE SSANGSIOS I SIOS + {0xBEC5, 0xC53D}, //10557 #HANGUL SYLLABLE SSANGSIOS I IEUNG + {0xBEC6, 0xC544}, //10558 #HANGUL SYLLABLE IEUNG A + {0xBEC7, 0xC545}, //10559 #HANGUL SYLLABLE IEUNG A KIYEOK + {0xBEC8, 0xC548}, //10560 #HANGUL SYLLABLE IEUNG A NIEUN + {0xBEC9, 0xC549}, //10561 #HANGUL SYLLABLE IEUNG A NIEUNCIEUC + {0xBECA, 0xC54A}, //10562 #HANGUL SYLLABLE IEUNG A NIEUNHIEUH + {0xBECB, 0xC54C}, //10563 #HANGUL SYLLABLE IEUNG A RIEUL + {0xBECC, 0xC54D}, //10564 #HANGUL SYLLABLE IEUNG A RIEULKIYEOK + {0xBECD, 0xC54E}, //10565 #HANGUL SYLLABLE IEUNG A RIEULMIEUM + {0xBECE, 0xC553}, //10566 #HANGUL SYLLABLE IEUNG A RIEULHIEUH + {0xBECF, 0xC554}, //10567 #HANGUL SYLLABLE IEUNG A MIEUM + {0xBED0, 0xC555}, //10568 #HANGUL SYLLABLE IEUNG A PIEUP + {0xBED1, 0xC557}, //10569 #HANGUL SYLLABLE IEUNG A SIOS + {0xBED2, 0xC558}, //10570 #HANGUL SYLLABLE IEUNG A SSANGSIOS + {0xBED3, 0xC559}, //10571 #HANGUL SYLLABLE IEUNG A IEUNG + {0xBED4, 0xC55D}, //10572 #HANGUL SYLLABLE IEUNG A THIEUTH + {0xBED5, 0xC55E}, //10573 #HANGUL SYLLABLE IEUNG A PHIEUPH + {0xBED6, 0xC560}, //10574 #HANGUL SYLLABLE IEUNG AE + {0xBED7, 0xC561}, //10575 #HANGUL SYLLABLE IEUNG AE KIYEOK + {0xBED8, 0xC564}, //10576 #HANGUL SYLLABLE IEUNG AE NIEUN + {0xBED9, 0xC568}, //10577 #HANGUL SYLLABLE IEUNG AE RIEUL + {0xBEDA, 0xC570}, //10578 #HANGUL SYLLABLE IEUNG AE MIEUM + {0xBEDB, 0xC571}, //10579 #HANGUL SYLLABLE IEUNG AE PIEUP + {0xBEDC, 0xC573}, //10580 #HANGUL SYLLABLE IEUNG AE SIOS + {0xBEDD, 0xC574}, //10581 #HANGUL SYLLABLE IEUNG AE SSANGSIOS + {0xBEDE, 0xC575}, //10582 #HANGUL SYLLABLE IEUNG AE IEUNG + {0xBEDF, 0xC57C}, //10583 #HANGUL SYLLABLE IEUNG YA + {0xBEE0, 0xC57D}, //10584 #HANGUL SYLLABLE IEUNG YA KIYEOK + {0xBEE1, 0xC580}, //10585 #HANGUL SYLLABLE IEUNG YA NIEUN + {0xBEE2, 0xC584}, //10586 #HANGUL SYLLABLE IEUNG YA RIEUL + {0xBEE3, 0xC587}, //10587 #HANGUL SYLLABLE IEUNG YA RIEULPIEUP + {0xBEE4, 0xC58C}, //10588 #HANGUL SYLLABLE IEUNG YA MIEUM + {0xBEE5, 0xC58D}, //10589 #HANGUL SYLLABLE IEUNG YA PIEUP + {0xBEE6, 0xC58F}, //10590 #HANGUL SYLLABLE IEUNG YA SIOS + {0xBEE7, 0xC591}, //10591 #HANGUL SYLLABLE IEUNG YA IEUNG + {0xBEE8, 0xC595}, //10592 #HANGUL SYLLABLE IEUNG YA THIEUTH + {0xBEE9, 0xC597}, //10593 #HANGUL SYLLABLE IEUNG YA HIEUH + {0xBEEA, 0xC598}, //10594 #HANGUL SYLLABLE IEUNG YAE + {0xBEEB, 0xC59C}, //10595 #HANGUL SYLLABLE IEUNG YAE NIEUN + {0xBEEC, 0xC5A0}, //10596 #HANGUL SYLLABLE IEUNG YAE RIEUL + {0xBEED, 0xC5A9}, //10597 #HANGUL SYLLABLE IEUNG YAE PIEUP + {0xBEEE, 0xC5B4}, //10598 #HANGUL SYLLABLE IEUNG EO + {0xBEEF, 0xC5B5}, //10599 #HANGUL SYLLABLE IEUNG EO KIYEOK + {0xBEF0, 0xC5B8}, //10600 #HANGUL SYLLABLE IEUNG EO NIEUN + {0xBEF1, 0xC5B9}, //10601 #HANGUL SYLLABLE IEUNG EO NIEUNCIEUC + {0xBEF2, 0xC5BB}, //10602 #HANGUL SYLLABLE IEUNG EO TIKEUT + {0xBEF3, 0xC5BC}, //10603 #HANGUL SYLLABLE IEUNG EO RIEUL + {0xBEF4, 0xC5BD}, //10604 #HANGUL SYLLABLE IEUNG EO RIEULKIYEOK + {0xBEF5, 0xC5BE}, //10605 #HANGUL SYLLABLE IEUNG EO RIEULMIEUM + {0xBEF6, 0xC5C4}, //10606 #HANGUL SYLLABLE IEUNG EO MIEUM + {0xBEF7, 0xC5C5}, //10607 #HANGUL SYLLABLE IEUNG EO PIEUP + {0xBEF8, 0xC5C6}, //10608 #HANGUL SYLLABLE IEUNG EO PIEUPSIOS + {0xBEF9, 0xC5C7}, //10609 #HANGUL SYLLABLE IEUNG EO SIOS + {0xBEFA, 0xC5C8}, //10610 #HANGUL SYLLABLE IEUNG EO SSANGSIOS + {0xBEFB, 0xC5C9}, //10611 #HANGUL SYLLABLE IEUNG EO IEUNG + {0xBEFC, 0xC5CA}, //10612 #HANGUL SYLLABLE IEUNG EO CIEUC + {0xBEFD, 0xC5CC}, //10613 #HANGUL SYLLABLE IEUNG EO KHIEUKH + {0xBEFE, 0xC5CE}, //10614 #HANGUL SYLLABLE IEUNG EO PHIEUPH + {0xBF41, 0xD49E}, //10615 #HANGUL SYLLABLE PHIEUPH WEO RIEULMIEUM + {0xBF42, 0xD49F}, //10616 #HANGUL SYLLABLE PHIEUPH WEO RIEULPIEUP + {0xBF43, 0xD4A0}, //10617 #HANGUL SYLLABLE PHIEUPH WEO RIEULSIOS + {0xBF44, 0xD4A1}, //10618 #HANGUL SYLLABLE PHIEUPH WEO RIEULTHIEUTH + {0xBF45, 0xD4A2}, //10619 #HANGUL SYLLABLE PHIEUPH WEO RIEULPHIEUPH + {0xBF46, 0xD4A3}, //10620 #HANGUL SYLLABLE PHIEUPH WEO RIEULHIEUH + {0xBF47, 0xD4A4}, //10621 #HANGUL SYLLABLE PHIEUPH WEO MIEUM + {0xBF48, 0xD4A5}, //10622 #HANGUL SYLLABLE PHIEUPH WEO PIEUP + {0xBF49, 0xD4A6}, //10623 #HANGUL SYLLABLE PHIEUPH WEO PIEUPSIOS + {0xBF4A, 0xD4A7}, //10624 #HANGUL SYLLABLE PHIEUPH WEO SIOS + {0xBF4B, 0xD4A8}, //10625 #HANGUL SYLLABLE PHIEUPH WEO SSANGSIOS + {0xBF4C, 0xD4AA}, //10626 #HANGUL SYLLABLE PHIEUPH WEO CIEUC + {0xBF4D, 0xD4AB}, //10627 #HANGUL SYLLABLE PHIEUPH WEO CHIEUCH + {0xBF4E, 0xD4AC}, //10628 #HANGUL SYLLABLE PHIEUPH WEO KHIEUKH + {0xBF4F, 0xD4AD}, //10629 #HANGUL SYLLABLE PHIEUPH WEO THIEUTH + {0xBF50, 0xD4AE}, //10630 #HANGUL SYLLABLE PHIEUPH WEO PHIEUPH + {0xBF51, 0xD4AF}, //10631 #HANGUL SYLLABLE PHIEUPH WEO HIEUH + {0xBF52, 0xD4B0}, //10632 #HANGUL SYLLABLE PHIEUPH WE + {0xBF53, 0xD4B1}, //10633 #HANGUL SYLLABLE PHIEUPH WE KIYEOK + {0xBF54, 0xD4B2}, //10634 #HANGUL SYLLABLE PHIEUPH WE SSANGKIYEOK + {0xBF55, 0xD4B3}, //10635 #HANGUL SYLLABLE PHIEUPH WE KIYEOKSIOS + {0xBF56, 0xD4B4}, //10636 #HANGUL SYLLABLE PHIEUPH WE NIEUN + {0xBF57, 0xD4B5}, //10637 #HANGUL SYLLABLE PHIEUPH WE NIEUNCIEUC + {0xBF58, 0xD4B6}, //10638 #HANGUL SYLLABLE PHIEUPH WE NIEUNHIEUH + {0xBF59, 0xD4B7}, //10639 #HANGUL SYLLABLE PHIEUPH WE TIKEUT + {0xBF5A, 0xD4B8}, //10640 #HANGUL SYLLABLE PHIEUPH WE RIEUL + {0xBF61, 0xD4B9}, //10641 #HANGUL SYLLABLE PHIEUPH WE RIEULKIYEOK + {0xBF62, 0xD4BA}, //10642 #HANGUL SYLLABLE PHIEUPH WE RIEULMIEUM + {0xBF63, 0xD4BB}, //10643 #HANGUL SYLLABLE PHIEUPH WE RIEULPIEUP + {0xBF64, 0xD4BC}, //10644 #HANGUL SYLLABLE PHIEUPH WE RIEULSIOS + {0xBF65, 0xD4BD}, //10645 #HANGUL SYLLABLE PHIEUPH WE RIEULTHIEUTH + {0xBF66, 0xD4BE}, //10646 #HANGUL SYLLABLE PHIEUPH WE RIEULPHIEUPH + {0xBF67, 0xD4BF}, //10647 #HANGUL SYLLABLE PHIEUPH WE RIEULHIEUH + {0xBF68, 0xD4C0}, //10648 #HANGUL SYLLABLE PHIEUPH WE MIEUM + {0xBF69, 0xD4C1}, //10649 #HANGUL SYLLABLE PHIEUPH WE PIEUP + {0xBF6A, 0xD4C2}, //10650 #HANGUL SYLLABLE PHIEUPH WE PIEUPSIOS + {0xBF6B, 0xD4C3}, //10651 #HANGUL SYLLABLE PHIEUPH WE SIOS + {0xBF6C, 0xD4C4}, //10652 #HANGUL SYLLABLE PHIEUPH WE SSANGSIOS + {0xBF6D, 0xD4C5}, //10653 #HANGUL SYLLABLE PHIEUPH WE IEUNG + {0xBF6E, 0xD4C6}, //10654 #HANGUL SYLLABLE PHIEUPH WE CIEUC + {0xBF6F, 0xD4C7}, //10655 #HANGUL SYLLABLE PHIEUPH WE CHIEUCH + {0xBF70, 0xD4C8}, //10656 #HANGUL SYLLABLE PHIEUPH WE KHIEUKH + {0xBF71, 0xD4C9}, //10657 #HANGUL SYLLABLE PHIEUPH WE THIEUTH + {0xBF72, 0xD4CA}, //10658 #HANGUL SYLLABLE PHIEUPH WE PHIEUPH + {0xBF73, 0xD4CB}, //10659 #HANGUL SYLLABLE PHIEUPH WE HIEUH + {0xBF74, 0xD4CD}, //10660 #HANGUL SYLLABLE PHIEUPH WI KIYEOK + {0xBF75, 0xD4CE}, //10661 #HANGUL SYLLABLE PHIEUPH WI SSANGKIYEOK + {0xBF76, 0xD4CF}, //10662 #HANGUL SYLLABLE PHIEUPH WI KIYEOKSIOS + {0xBF77, 0xD4D1}, //10663 #HANGUL SYLLABLE PHIEUPH WI NIEUNCIEUC + {0xBF78, 0xD4D2}, //10664 #HANGUL SYLLABLE PHIEUPH WI NIEUNHIEUH + {0xBF79, 0xD4D3}, //10665 #HANGUL SYLLABLE PHIEUPH WI TIKEUT + {0xBF7A, 0xD4D5}, //10666 #HANGUL SYLLABLE PHIEUPH WI RIEULKIYEOK + {0xBF81, 0xD4D6}, //10667 #HANGUL SYLLABLE PHIEUPH WI RIEULMIEUM + {0xBF82, 0xD4D7}, //10668 #HANGUL SYLLABLE PHIEUPH WI RIEULPIEUP + {0xBF83, 0xD4D8}, //10669 #HANGUL SYLLABLE PHIEUPH WI RIEULSIOS + {0xBF84, 0xD4D9}, //10670 #HANGUL SYLLABLE PHIEUPH WI RIEULTHIEUTH + {0xBF85, 0xD4DA}, //10671 #HANGUL SYLLABLE PHIEUPH WI RIEULPHIEUPH + {0xBF86, 0xD4DB}, //10672 #HANGUL SYLLABLE PHIEUPH WI RIEULHIEUH + {0xBF87, 0xD4DD}, //10673 #HANGUL SYLLABLE PHIEUPH WI PIEUP + {0xBF88, 0xD4DE}, //10674 #HANGUL SYLLABLE PHIEUPH WI PIEUPSIOS + {0xBF89, 0xD4E0}, //10675 #HANGUL SYLLABLE PHIEUPH WI SSANGSIOS + {0xBF8A, 0xD4E1}, //10676 #HANGUL SYLLABLE PHIEUPH WI IEUNG + {0xBF8B, 0xD4E2}, //10677 #HANGUL SYLLABLE PHIEUPH WI CIEUC + {0xBF8C, 0xD4E3}, //10678 #HANGUL SYLLABLE PHIEUPH WI CHIEUCH + {0xBF8D, 0xD4E4}, //10679 #HANGUL SYLLABLE PHIEUPH WI KHIEUKH + {0xBF8E, 0xD4E5}, //10680 #HANGUL SYLLABLE PHIEUPH WI THIEUTH + {0xBF8F, 0xD4E6}, //10681 #HANGUL SYLLABLE PHIEUPH WI PHIEUPH + {0xBF90, 0xD4E7}, //10682 #HANGUL SYLLABLE PHIEUPH WI HIEUH + {0xBF91, 0xD4E9}, //10683 #HANGUL SYLLABLE PHIEUPH YU KIYEOK + {0xBF92, 0xD4EA}, //10684 #HANGUL SYLLABLE PHIEUPH YU SSANGKIYEOK + {0xBF93, 0xD4EB}, //10685 #HANGUL SYLLABLE PHIEUPH YU KIYEOKSIOS + {0xBF94, 0xD4ED}, //10686 #HANGUL SYLLABLE PHIEUPH YU NIEUNCIEUC + {0xBF95, 0xD4EE}, //10687 #HANGUL SYLLABLE PHIEUPH YU NIEUNHIEUH + {0xBF96, 0xD4EF}, //10688 #HANGUL SYLLABLE PHIEUPH YU TIKEUT + {0xBF97, 0xD4F1}, //10689 #HANGUL SYLLABLE PHIEUPH YU RIEULKIYEOK + {0xBF98, 0xD4F2}, //10690 #HANGUL SYLLABLE PHIEUPH YU RIEULMIEUM + {0xBF99, 0xD4F3}, //10691 #HANGUL SYLLABLE PHIEUPH YU RIEULPIEUP + {0xBF9A, 0xD4F4}, //10692 #HANGUL SYLLABLE PHIEUPH YU RIEULSIOS + {0xBF9B, 0xD4F5}, //10693 #HANGUL SYLLABLE PHIEUPH YU RIEULTHIEUTH + {0xBF9C, 0xD4F6}, //10694 #HANGUL SYLLABLE PHIEUPH YU RIEULPHIEUPH + {0xBF9D, 0xD4F7}, //10695 #HANGUL SYLLABLE PHIEUPH YU RIEULHIEUH + {0xBF9E, 0xD4F9}, //10696 #HANGUL SYLLABLE PHIEUPH YU PIEUP + {0xBF9F, 0xD4FA}, //10697 #HANGUL SYLLABLE PHIEUPH YU PIEUPSIOS + {0xBFA0, 0xD4FC}, //10698 #HANGUL SYLLABLE PHIEUPH YU SSANGSIOS + {0xBFA1, 0xC5D0}, //10699 #HANGUL SYLLABLE IEUNG E + {0xBFA2, 0xC5D1}, //10700 #HANGUL SYLLABLE IEUNG E KIYEOK + {0xBFA3, 0xC5D4}, //10701 #HANGUL SYLLABLE IEUNG E NIEUN + {0xBFA4, 0xC5D8}, //10702 #HANGUL SYLLABLE IEUNG E RIEUL + {0xBFA5, 0xC5E0}, //10703 #HANGUL SYLLABLE IEUNG E MIEUM + {0xBFA6, 0xC5E1}, //10704 #HANGUL SYLLABLE IEUNG E PIEUP + {0xBFA7, 0xC5E3}, //10705 #HANGUL SYLLABLE IEUNG E SIOS + {0xBFA8, 0xC5E5}, //10706 #HANGUL SYLLABLE IEUNG E IEUNG + {0xBFA9, 0xC5EC}, //10707 #HANGUL SYLLABLE IEUNG YEO + {0xBFAA, 0xC5ED}, //10708 #HANGUL SYLLABLE IEUNG YEO KIYEOK + {0xBFAB, 0xC5EE}, //10709 #HANGUL SYLLABLE IEUNG YEO SSANGKIYEOK + {0xBFAC, 0xC5F0}, //10710 #HANGUL SYLLABLE IEUNG YEO NIEUN + {0xBFAD, 0xC5F4}, //10711 #HANGUL SYLLABLE IEUNG YEO RIEUL + {0xBFAE, 0xC5F6}, //10712 #HANGUL SYLLABLE IEUNG YEO RIEULMIEUM + {0xBFAF, 0xC5F7}, //10713 #HANGUL SYLLABLE IEUNG YEO RIEULPIEUP + {0xBFB0, 0xC5FC}, //10714 #HANGUL SYLLABLE IEUNG YEO MIEUM + {0xBFB1, 0xC5FD}, //10715 #HANGUL SYLLABLE IEUNG YEO PIEUP + {0xBFB2, 0xC5FE}, //10716 #HANGUL SYLLABLE IEUNG YEO PIEUPSIOS + {0xBFB3, 0xC5FF}, //10717 #HANGUL SYLLABLE IEUNG YEO SIOS + {0xBFB4, 0xC600}, //10718 #HANGUL SYLLABLE IEUNG YEO SSANGSIOS + {0xBFB5, 0xC601}, //10719 #HANGUL SYLLABLE IEUNG YEO IEUNG + {0xBFB6, 0xC605}, //10720 #HANGUL SYLLABLE IEUNG YEO THIEUTH + {0xBFB7, 0xC606}, //10721 #HANGUL SYLLABLE IEUNG YEO PHIEUPH + {0xBFB8, 0xC607}, //10722 #HANGUL SYLLABLE IEUNG YEO HIEUH + {0xBFB9, 0xC608}, //10723 #HANGUL SYLLABLE IEUNG YE + {0xBFBA, 0xC60C}, //10724 #HANGUL SYLLABLE IEUNG YE NIEUN + {0xBFBB, 0xC610}, //10725 #HANGUL SYLLABLE IEUNG YE RIEUL + {0xBFBC, 0xC618}, //10726 #HANGUL SYLLABLE IEUNG YE MIEUM + {0xBFBD, 0xC619}, //10727 #HANGUL SYLLABLE IEUNG YE PIEUP + {0xBFBE, 0xC61B}, //10728 #HANGUL SYLLABLE IEUNG YE SIOS + {0xBFBF, 0xC61C}, //10729 #HANGUL SYLLABLE IEUNG YE SSANGSIOS + {0xBFC0, 0xC624}, //10730 #HANGUL SYLLABLE IEUNG O + {0xBFC1, 0xC625}, //10731 #HANGUL SYLLABLE IEUNG O KIYEOK + {0xBFC2, 0xC628}, //10732 #HANGUL SYLLABLE IEUNG O NIEUN + {0xBFC3, 0xC62C}, //10733 #HANGUL SYLLABLE IEUNG O RIEUL + {0xBFC4, 0xC62D}, //10734 #HANGUL SYLLABLE IEUNG O RIEULKIYEOK + {0xBFC5, 0xC62E}, //10735 #HANGUL SYLLABLE IEUNG O RIEULMIEUM + {0xBFC6, 0xC630}, //10736 #HANGUL SYLLABLE IEUNG O RIEULSIOS + {0xBFC7, 0xC633}, //10737 #HANGUL SYLLABLE IEUNG O RIEULHIEUH + {0xBFC8, 0xC634}, //10738 #HANGUL SYLLABLE IEUNG O MIEUM + {0xBFC9, 0xC635}, //10739 #HANGUL SYLLABLE IEUNG O PIEUP + {0xBFCA, 0xC637}, //10740 #HANGUL SYLLABLE IEUNG O SIOS + {0xBFCB, 0xC639}, //10741 #HANGUL SYLLABLE IEUNG O IEUNG + {0xBFCC, 0xC63B}, //10742 #HANGUL SYLLABLE IEUNG O CHIEUCH + {0xBFCD, 0xC640}, //10743 #HANGUL SYLLABLE IEUNG WA + {0xBFCE, 0xC641}, //10744 #HANGUL SYLLABLE IEUNG WA KIYEOK + {0xBFCF, 0xC644}, //10745 #HANGUL SYLLABLE IEUNG WA NIEUN + {0xBFD0, 0xC648}, //10746 #HANGUL SYLLABLE IEUNG WA RIEUL + {0xBFD1, 0xC650}, //10747 #HANGUL SYLLABLE IEUNG WA MIEUM + {0xBFD2, 0xC651}, //10748 #HANGUL SYLLABLE IEUNG WA PIEUP + {0xBFD3, 0xC653}, //10749 #HANGUL SYLLABLE IEUNG WA SIOS + {0xBFD4, 0xC654}, //10750 #HANGUL SYLLABLE IEUNG WA SSANGSIOS + {0xBFD5, 0xC655}, //10751 #HANGUL SYLLABLE IEUNG WA IEUNG + {0xBFD6, 0xC65C}, //10752 #HANGUL SYLLABLE IEUNG WAE + {0xBFD7, 0xC65D}, //10753 #HANGUL SYLLABLE IEUNG WAE KIYEOK + {0xBFD8, 0xC660}, //10754 #HANGUL SYLLABLE IEUNG WAE NIEUN + {0xBFD9, 0xC66C}, //10755 #HANGUL SYLLABLE IEUNG WAE MIEUM + {0xBFDA, 0xC66F}, //10756 #HANGUL SYLLABLE IEUNG WAE SIOS + {0xBFDB, 0xC671}, //10757 #HANGUL SYLLABLE IEUNG WAE IEUNG + {0xBFDC, 0xC678}, //10758 #HANGUL SYLLABLE IEUNG OE + {0xBFDD, 0xC679}, //10759 #HANGUL SYLLABLE IEUNG OE KIYEOK + {0xBFDE, 0xC67C}, //10760 #HANGUL SYLLABLE IEUNG OE NIEUN + {0xBFDF, 0xC680}, //10761 #HANGUL SYLLABLE IEUNG OE RIEUL + {0xBFE0, 0xC688}, //10762 #HANGUL SYLLABLE IEUNG OE MIEUM + {0xBFE1, 0xC689}, //10763 #HANGUL SYLLABLE IEUNG OE PIEUP + {0xBFE2, 0xC68B}, //10764 #HANGUL SYLLABLE IEUNG OE SIOS + {0xBFE3, 0xC68D}, //10765 #HANGUL SYLLABLE IEUNG OE IEUNG + {0xBFE4, 0xC694}, //10766 #HANGUL SYLLABLE IEUNG YO + {0xBFE5, 0xC695}, //10767 #HANGUL SYLLABLE IEUNG YO KIYEOK + {0xBFE6, 0xC698}, //10768 #HANGUL SYLLABLE IEUNG YO NIEUN + {0xBFE7, 0xC69C}, //10769 #HANGUL SYLLABLE IEUNG YO RIEUL + {0xBFE8, 0xC6A4}, //10770 #HANGUL SYLLABLE IEUNG YO MIEUM + {0xBFE9, 0xC6A5}, //10771 #HANGUL SYLLABLE IEUNG YO PIEUP + {0xBFEA, 0xC6A7}, //10772 #HANGUL SYLLABLE IEUNG YO SIOS + {0xBFEB, 0xC6A9}, //10773 #HANGUL SYLLABLE IEUNG YO IEUNG + {0xBFEC, 0xC6B0}, //10774 #HANGUL SYLLABLE IEUNG U + {0xBFED, 0xC6B1}, //10775 #HANGUL SYLLABLE IEUNG U KIYEOK + {0xBFEE, 0xC6B4}, //10776 #HANGUL SYLLABLE IEUNG U NIEUN + {0xBFEF, 0xC6B8}, //10777 #HANGUL SYLLABLE IEUNG U RIEUL + {0xBFF0, 0xC6B9}, //10778 #HANGUL SYLLABLE IEUNG U RIEULKIYEOK + {0xBFF1, 0xC6BA}, //10779 #HANGUL SYLLABLE IEUNG U RIEULMIEUM + {0xBFF2, 0xC6C0}, //10780 #HANGUL SYLLABLE IEUNG U MIEUM + {0xBFF3, 0xC6C1}, //10781 #HANGUL SYLLABLE IEUNG U PIEUP + {0xBFF4, 0xC6C3}, //10782 #HANGUL SYLLABLE IEUNG U SIOS + {0xBFF5, 0xC6C5}, //10783 #HANGUL SYLLABLE IEUNG U IEUNG + {0xBFF6, 0xC6CC}, //10784 #HANGUL SYLLABLE IEUNG WEO + {0xBFF7, 0xC6CD}, //10785 #HANGUL SYLLABLE IEUNG WEO KIYEOK + {0xBFF8, 0xC6D0}, //10786 #HANGUL SYLLABLE IEUNG WEO NIEUN + {0xBFF9, 0xC6D4}, //10787 #HANGUL SYLLABLE IEUNG WEO RIEUL + {0xBFFA, 0xC6DC}, //10788 #HANGUL SYLLABLE IEUNG WEO MIEUM + {0xBFFB, 0xC6DD}, //10789 #HANGUL SYLLABLE IEUNG WEO PIEUP + {0xBFFC, 0xC6E0}, //10790 #HANGUL SYLLABLE IEUNG WEO SSANGSIOS + {0xBFFD, 0xC6E1}, //10791 #HANGUL SYLLABLE IEUNG WEO IEUNG + {0xBFFE, 0xC6E8}, //10792 #HANGUL SYLLABLE IEUNG WE + {0xC041, 0xD4FE}, //10793 #HANGUL SYLLABLE PHIEUPH YU CIEUC + {0xC042, 0xD4FF}, //10794 #HANGUL SYLLABLE PHIEUPH YU CHIEUCH + {0xC043, 0xD500}, //10795 #HANGUL SYLLABLE PHIEUPH YU KHIEUKH + {0xC044, 0xD501}, //10796 #HANGUL SYLLABLE PHIEUPH YU THIEUTH + {0xC045, 0xD502}, //10797 #HANGUL SYLLABLE PHIEUPH YU PHIEUPH + {0xC046, 0xD503}, //10798 #HANGUL SYLLABLE PHIEUPH YU HIEUH + {0xC047, 0xD505}, //10799 #HANGUL SYLLABLE PHIEUPH EU KIYEOK + {0xC048, 0xD506}, //10800 #HANGUL SYLLABLE PHIEUPH EU SSANGKIYEOK + {0xC049, 0xD507}, //10801 #HANGUL SYLLABLE PHIEUPH EU KIYEOKSIOS + {0xC04A, 0xD509}, //10802 #HANGUL SYLLABLE PHIEUPH EU NIEUNCIEUC + {0xC04B, 0xD50A}, //10803 #HANGUL SYLLABLE PHIEUPH EU NIEUNHIEUH + {0xC04C, 0xD50B}, //10804 #HANGUL SYLLABLE PHIEUPH EU TIKEUT + {0xC04D, 0xD50D}, //10805 #HANGUL SYLLABLE PHIEUPH EU RIEULKIYEOK + {0xC04E, 0xD50E}, //10806 #HANGUL SYLLABLE PHIEUPH EU RIEULMIEUM + {0xC04F, 0xD50F}, //10807 #HANGUL SYLLABLE PHIEUPH EU RIEULPIEUP + {0xC050, 0xD510}, //10808 #HANGUL SYLLABLE PHIEUPH EU RIEULSIOS + {0xC051, 0xD511}, //10809 #HANGUL SYLLABLE PHIEUPH EU RIEULTHIEUTH + {0xC052, 0xD512}, //10810 #HANGUL SYLLABLE PHIEUPH EU RIEULPHIEUPH + {0xC053, 0xD513}, //10811 #HANGUL SYLLABLE PHIEUPH EU RIEULHIEUH + {0xC054, 0xD516}, //10812 #HANGUL SYLLABLE PHIEUPH EU PIEUPSIOS + {0xC055, 0xD518}, //10813 #HANGUL SYLLABLE PHIEUPH EU SSANGSIOS + {0xC056, 0xD519}, //10814 #HANGUL SYLLABLE PHIEUPH EU IEUNG + {0xC057, 0xD51A}, //10815 #HANGUL SYLLABLE PHIEUPH EU CIEUC + {0xC058, 0xD51B}, //10816 #HANGUL SYLLABLE PHIEUPH EU CHIEUCH + {0xC059, 0xD51C}, //10817 #HANGUL SYLLABLE PHIEUPH EU KHIEUKH + {0xC05A, 0xD51D}, //10818 #HANGUL SYLLABLE PHIEUPH EU THIEUTH + {0xC061, 0xD51E}, //10819 #HANGUL SYLLABLE PHIEUPH EU PHIEUPH + {0xC062, 0xD51F}, //10820 #HANGUL SYLLABLE PHIEUPH EU HIEUH + {0xC063, 0xD520}, //10821 #HANGUL SYLLABLE PHIEUPH YI + {0xC064, 0xD521}, //10822 #HANGUL SYLLABLE PHIEUPH YI KIYEOK + {0xC065, 0xD522}, //10823 #HANGUL SYLLABLE PHIEUPH YI SSANGKIYEOK + {0xC066, 0xD523}, //10824 #HANGUL SYLLABLE PHIEUPH YI KIYEOKSIOS + {0xC067, 0xD524}, //10825 #HANGUL SYLLABLE PHIEUPH YI NIEUN + {0xC068, 0xD525}, //10826 #HANGUL SYLLABLE PHIEUPH YI NIEUNCIEUC + {0xC069, 0xD526}, //10827 #HANGUL SYLLABLE PHIEUPH YI NIEUNHIEUH + {0xC06A, 0xD527}, //10828 #HANGUL SYLLABLE PHIEUPH YI TIKEUT + {0xC06B, 0xD528}, //10829 #HANGUL SYLLABLE PHIEUPH YI RIEUL + {0xC06C, 0xD529}, //10830 #HANGUL SYLLABLE PHIEUPH YI RIEULKIYEOK + {0xC06D, 0xD52A}, //10831 #HANGUL SYLLABLE PHIEUPH YI RIEULMIEUM + {0xC06E, 0xD52B}, //10832 #HANGUL SYLLABLE PHIEUPH YI RIEULPIEUP + {0xC06F, 0xD52C}, //10833 #HANGUL SYLLABLE PHIEUPH YI RIEULSIOS + {0xC070, 0xD52D}, //10834 #HANGUL SYLLABLE PHIEUPH YI RIEULTHIEUTH + {0xC071, 0xD52E}, //10835 #HANGUL SYLLABLE PHIEUPH YI RIEULPHIEUPH + {0xC072, 0xD52F}, //10836 #HANGUL SYLLABLE PHIEUPH YI RIEULHIEUH + {0xC073, 0xD530}, //10837 #HANGUL SYLLABLE PHIEUPH YI MIEUM + {0xC074, 0xD531}, //10838 #HANGUL SYLLABLE PHIEUPH YI PIEUP + {0xC075, 0xD532}, //10839 #HANGUL SYLLABLE PHIEUPH YI PIEUPSIOS + {0xC076, 0xD533}, //10840 #HANGUL SYLLABLE PHIEUPH YI SIOS + {0xC077, 0xD534}, //10841 #HANGUL SYLLABLE PHIEUPH YI SSANGSIOS + {0xC078, 0xD535}, //10842 #HANGUL SYLLABLE PHIEUPH YI IEUNG + {0xC079, 0xD536}, //10843 #HANGUL SYLLABLE PHIEUPH YI CIEUC + {0xC07A, 0xD537}, //10844 #HANGUL SYLLABLE PHIEUPH YI CHIEUCH + {0xC081, 0xD538}, //10845 #HANGUL SYLLABLE PHIEUPH YI KHIEUKH + {0xC082, 0xD539}, //10846 #HANGUL SYLLABLE PHIEUPH YI THIEUTH + {0xC083, 0xD53A}, //10847 #HANGUL SYLLABLE PHIEUPH YI PHIEUPH + {0xC084, 0xD53B}, //10848 #HANGUL SYLLABLE PHIEUPH YI HIEUH + {0xC085, 0xD53E}, //10849 #HANGUL SYLLABLE PHIEUPH I SSANGKIYEOK + {0xC086, 0xD53F}, //10850 #HANGUL SYLLABLE PHIEUPH I KIYEOKSIOS + {0xC087, 0xD541}, //10851 #HANGUL SYLLABLE PHIEUPH I NIEUNCIEUC + {0xC088, 0xD542}, //10852 #HANGUL SYLLABLE PHIEUPH I NIEUNHIEUH + {0xC089, 0xD543}, //10853 #HANGUL SYLLABLE PHIEUPH I TIKEUT + {0xC08A, 0xD545}, //10854 #HANGUL SYLLABLE PHIEUPH I RIEULKIYEOK + {0xC08B, 0xD546}, //10855 #HANGUL SYLLABLE PHIEUPH I RIEULMIEUM + {0xC08C, 0xD547}, //10856 #HANGUL SYLLABLE PHIEUPH I RIEULPIEUP + {0xC08D, 0xD548}, //10857 #HANGUL SYLLABLE PHIEUPH I RIEULSIOS + {0xC08E, 0xD549}, //10858 #HANGUL SYLLABLE PHIEUPH I RIEULTHIEUTH + {0xC08F, 0xD54A}, //10859 #HANGUL SYLLABLE PHIEUPH I RIEULPHIEUPH + {0xC090, 0xD54B}, //10860 #HANGUL SYLLABLE PHIEUPH I RIEULHIEUH + {0xC091, 0xD54E}, //10861 #HANGUL SYLLABLE PHIEUPH I PIEUPSIOS + {0xC092, 0xD550}, //10862 #HANGUL SYLLABLE PHIEUPH I SSANGSIOS + {0xC093, 0xD552}, //10863 #HANGUL SYLLABLE PHIEUPH I CIEUC + {0xC094, 0xD553}, //10864 #HANGUL SYLLABLE PHIEUPH I CHIEUCH + {0xC095, 0xD554}, //10865 #HANGUL SYLLABLE PHIEUPH I KHIEUKH + {0xC096, 0xD555}, //10866 #HANGUL SYLLABLE PHIEUPH I THIEUTH + {0xC097, 0xD556}, //10867 #HANGUL SYLLABLE PHIEUPH I PHIEUPH + {0xC098, 0xD557}, //10868 #HANGUL SYLLABLE PHIEUPH I HIEUH + {0xC099, 0xD55A}, //10869 #HANGUL SYLLABLE HIEUH A SSANGKIYEOK + {0xC09A, 0xD55B}, //10870 #HANGUL SYLLABLE HIEUH A KIYEOKSIOS + {0xC09B, 0xD55D}, //10871 #HANGUL SYLLABLE HIEUH A NIEUNCIEUC + {0xC09C, 0xD55E}, //10872 #HANGUL SYLLABLE HIEUH A NIEUNHIEUH + {0xC09D, 0xD55F}, //10873 #HANGUL SYLLABLE HIEUH A TIKEUT + {0xC09E, 0xD561}, //10874 #HANGUL SYLLABLE HIEUH A RIEULKIYEOK + {0xC09F, 0xD562}, //10875 #HANGUL SYLLABLE HIEUH A RIEULMIEUM + {0xC0A0, 0xD563}, //10876 #HANGUL SYLLABLE HIEUH A RIEULPIEUP + {0xC0A1, 0xC6E9}, //10877 #HANGUL SYLLABLE IEUNG WE KIYEOK + {0xC0A2, 0xC6EC}, //10878 #HANGUL SYLLABLE IEUNG WE NIEUN + {0xC0A3, 0xC6F0}, //10879 #HANGUL SYLLABLE IEUNG WE RIEUL + {0xC0A4, 0xC6F8}, //10880 #HANGUL SYLLABLE IEUNG WE MIEUM + {0xC0A5, 0xC6F9}, //10881 #HANGUL SYLLABLE IEUNG WE PIEUP + {0xC0A6, 0xC6FD}, //10882 #HANGUL SYLLABLE IEUNG WE IEUNG + {0xC0A7, 0xC704}, //10883 #HANGUL SYLLABLE IEUNG WI + {0xC0A8, 0xC705}, //10884 #HANGUL SYLLABLE IEUNG WI KIYEOK + {0xC0A9, 0xC708}, //10885 #HANGUL SYLLABLE IEUNG WI NIEUN + {0xC0AA, 0xC70C}, //10886 #HANGUL SYLLABLE IEUNG WI RIEUL + {0xC0AB, 0xC714}, //10887 #HANGUL SYLLABLE IEUNG WI MIEUM + {0xC0AC, 0xC715}, //10888 #HANGUL SYLLABLE IEUNG WI PIEUP + {0xC0AD, 0xC717}, //10889 #HANGUL SYLLABLE IEUNG WI SIOS + {0xC0AE, 0xC719}, //10890 #HANGUL SYLLABLE IEUNG WI IEUNG + {0xC0AF, 0xC720}, //10891 #HANGUL SYLLABLE IEUNG YU + {0xC0B0, 0xC721}, //10892 #HANGUL SYLLABLE IEUNG YU KIYEOK + {0xC0B1, 0xC724}, //10893 #HANGUL SYLLABLE IEUNG YU NIEUN + {0xC0B2, 0xC728}, //10894 #HANGUL SYLLABLE IEUNG YU RIEUL + {0xC0B3, 0xC730}, //10895 #HANGUL SYLLABLE IEUNG YU MIEUM + {0xC0B4, 0xC731}, //10896 #HANGUL SYLLABLE IEUNG YU PIEUP + {0xC0B5, 0xC733}, //10897 #HANGUL SYLLABLE IEUNG YU SIOS + {0xC0B6, 0xC735}, //10898 #HANGUL SYLLABLE IEUNG YU IEUNG + {0xC0B7, 0xC737}, //10899 #HANGUL SYLLABLE IEUNG YU CHIEUCH + {0xC0B8, 0xC73C}, //10900 #HANGUL SYLLABLE IEUNG EU + {0xC0B9, 0xC73D}, //10901 #HANGUL SYLLABLE IEUNG EU KIYEOK + {0xC0BA, 0xC740}, //10902 #HANGUL SYLLABLE IEUNG EU NIEUN + {0xC0BB, 0xC744}, //10903 #HANGUL SYLLABLE IEUNG EU RIEUL + {0xC0BC, 0xC74A}, //10904 #HANGUL SYLLABLE IEUNG EU RIEULPHIEUPH + {0xC0BD, 0xC74C}, //10905 #HANGUL SYLLABLE IEUNG EU MIEUM + {0xC0BE, 0xC74D}, //10906 #HANGUL SYLLABLE IEUNG EU PIEUP + {0xC0BF, 0xC74F}, //10907 #HANGUL SYLLABLE IEUNG EU SIOS + {0xC0C0, 0xC751}, //10908 #HANGUL SYLLABLE IEUNG EU IEUNG + {0xC0C1, 0xC752}, //10909 #HANGUL SYLLABLE IEUNG EU CIEUC + {0xC0C2, 0xC753}, //10910 #HANGUL SYLLABLE IEUNG EU CHIEUCH + {0xC0C3, 0xC754}, //10911 #HANGUL SYLLABLE IEUNG EU KHIEUKH + {0xC0C4, 0xC755}, //10912 #HANGUL SYLLABLE IEUNG EU THIEUTH + {0xC0C5, 0xC756}, //10913 #HANGUL SYLLABLE IEUNG EU PHIEUPH + {0xC0C6, 0xC757}, //10914 #HANGUL SYLLABLE IEUNG EU HIEUH + {0xC0C7, 0xC758}, //10915 #HANGUL SYLLABLE IEUNG YI + {0xC0C8, 0xC75C}, //10916 #HANGUL SYLLABLE IEUNG YI NIEUN + {0xC0C9, 0xC760}, //10917 #HANGUL SYLLABLE IEUNG YI RIEUL + {0xC0CA, 0xC768}, //10918 #HANGUL SYLLABLE IEUNG YI MIEUM + {0xC0CB, 0xC76B}, //10919 #HANGUL SYLLABLE IEUNG YI SIOS + {0xC0CC, 0xC774}, //10920 #HANGUL SYLLABLE IEUNG I + {0xC0CD, 0xC775}, //10921 #HANGUL SYLLABLE IEUNG I KIYEOK + {0xC0CE, 0xC778}, //10922 #HANGUL SYLLABLE IEUNG I NIEUN + {0xC0CF, 0xC77C}, //10923 #HANGUL SYLLABLE IEUNG I RIEUL + {0xC0D0, 0xC77D}, //10924 #HANGUL SYLLABLE IEUNG I RIEULKIYEOK + {0xC0D1, 0xC77E}, //10925 #HANGUL SYLLABLE IEUNG I RIEULMIEUM + {0xC0D2, 0xC783}, //10926 #HANGUL SYLLABLE IEUNG I RIEULHIEUH + {0xC0D3, 0xC784}, //10927 #HANGUL SYLLABLE IEUNG I MIEUM + {0xC0D4, 0xC785}, //10928 #HANGUL SYLLABLE IEUNG I PIEUP + {0xC0D5, 0xC787}, //10929 #HANGUL SYLLABLE IEUNG I SIOS + {0xC0D6, 0xC788}, //10930 #HANGUL SYLLABLE IEUNG I SSANGSIOS + {0xC0D7, 0xC789}, //10931 #HANGUL SYLLABLE IEUNG I IEUNG + {0xC0D8, 0xC78A}, //10932 #HANGUL SYLLABLE IEUNG I CIEUC + {0xC0D9, 0xC78E}, //10933 #HANGUL SYLLABLE IEUNG I PHIEUPH + {0xC0DA, 0xC790}, //10934 #HANGUL SYLLABLE CIEUC A + {0xC0DB, 0xC791}, //10935 #HANGUL SYLLABLE CIEUC A KIYEOK + {0xC0DC, 0xC794}, //10936 #HANGUL SYLLABLE CIEUC A NIEUN + {0xC0DD, 0xC796}, //10937 #HANGUL SYLLABLE CIEUC A NIEUNHIEUH + {0xC0DE, 0xC797}, //10938 #HANGUL SYLLABLE CIEUC A TIKEUT + {0xC0DF, 0xC798}, //10939 #HANGUL SYLLABLE CIEUC A RIEUL + {0xC0E0, 0xC79A}, //10940 #HANGUL SYLLABLE CIEUC A RIEULMIEUM + {0xC0E1, 0xC7A0}, //10941 #HANGUL SYLLABLE CIEUC A MIEUM + {0xC0E2, 0xC7A1}, //10942 #HANGUL SYLLABLE CIEUC A PIEUP + {0xC0E3, 0xC7A3}, //10943 #HANGUL SYLLABLE CIEUC A SIOS + {0xC0E4, 0xC7A4}, //10944 #HANGUL SYLLABLE CIEUC A SSANGSIOS + {0xC0E5, 0xC7A5}, //10945 #HANGUL SYLLABLE CIEUC A IEUNG + {0xC0E6, 0xC7A6}, //10946 #HANGUL SYLLABLE CIEUC A CIEUC + {0xC0E7, 0xC7AC}, //10947 #HANGUL SYLLABLE CIEUC AE + {0xC0E8, 0xC7AD}, //10948 #HANGUL SYLLABLE CIEUC AE KIYEOK + {0xC0E9, 0xC7B0}, //10949 #HANGUL SYLLABLE CIEUC AE NIEUN + {0xC0EA, 0xC7B4}, //10950 #HANGUL SYLLABLE CIEUC AE RIEUL + {0xC0EB, 0xC7BC}, //10951 #HANGUL SYLLABLE CIEUC AE MIEUM + {0xC0EC, 0xC7BD}, //10952 #HANGUL SYLLABLE CIEUC AE PIEUP + {0xC0ED, 0xC7BF}, //10953 #HANGUL SYLLABLE CIEUC AE SIOS + {0xC0EE, 0xC7C0}, //10954 #HANGUL SYLLABLE CIEUC AE SSANGSIOS + {0xC0EF, 0xC7C1}, //10955 #HANGUL SYLLABLE CIEUC AE IEUNG + {0xC0F0, 0xC7C8}, //10956 #HANGUL SYLLABLE CIEUC YA + {0xC0F1, 0xC7C9}, //10957 #HANGUL SYLLABLE CIEUC YA KIYEOK + {0xC0F2, 0xC7CC}, //10958 #HANGUL SYLLABLE CIEUC YA NIEUN + {0xC0F3, 0xC7CE}, //10959 #HANGUL SYLLABLE CIEUC YA NIEUNHIEUH + {0xC0F4, 0xC7D0}, //10960 #HANGUL SYLLABLE CIEUC YA RIEUL + {0xC0F5, 0xC7D8}, //10961 #HANGUL SYLLABLE CIEUC YA MIEUM + {0xC0F6, 0xC7DD}, //10962 #HANGUL SYLLABLE CIEUC YA IEUNG + {0xC0F7, 0xC7E4}, //10963 #HANGUL SYLLABLE CIEUC YAE + {0xC0F8, 0xC7E8}, //10964 #HANGUL SYLLABLE CIEUC YAE NIEUN + {0xC0F9, 0xC7EC}, //10965 #HANGUL SYLLABLE CIEUC YAE RIEUL + {0xC0FA, 0xC800}, //10966 #HANGUL SYLLABLE CIEUC EO + {0xC0FB, 0xC801}, //10967 #HANGUL SYLLABLE CIEUC EO KIYEOK + {0xC0FC, 0xC804}, //10968 #HANGUL SYLLABLE CIEUC EO NIEUN + {0xC0FD, 0xC808}, //10969 #HANGUL SYLLABLE CIEUC EO RIEUL + {0xC0FE, 0xC80A}, //10970 #HANGUL SYLLABLE CIEUC EO RIEULMIEUM + {0xC141, 0xD564}, //10971 #HANGUL SYLLABLE HIEUH A RIEULSIOS + {0xC142, 0xD566}, //10972 #HANGUL SYLLABLE HIEUH A RIEULPHIEUPH + {0xC143, 0xD567}, //10973 #HANGUL SYLLABLE HIEUH A RIEULHIEUH + {0xC144, 0xD56A}, //10974 #HANGUL SYLLABLE HIEUH A PIEUPSIOS + {0xC145, 0xD56C}, //10975 #HANGUL SYLLABLE HIEUH A SSANGSIOS + {0xC146, 0xD56E}, //10976 #HANGUL SYLLABLE HIEUH A CIEUC + {0xC147, 0xD56F}, //10977 #HANGUL SYLLABLE HIEUH A CHIEUCH + {0xC148, 0xD570}, //10978 #HANGUL SYLLABLE HIEUH A KHIEUKH + {0xC149, 0xD571}, //10979 #HANGUL SYLLABLE HIEUH A THIEUTH + {0xC14A, 0xD572}, //10980 #HANGUL SYLLABLE HIEUH A PHIEUPH + {0xC14B, 0xD573}, //10981 #HANGUL SYLLABLE HIEUH A HIEUH + {0xC14C, 0xD576}, //10982 #HANGUL SYLLABLE HIEUH AE SSANGKIYEOK + {0xC14D, 0xD577}, //10983 #HANGUL SYLLABLE HIEUH AE KIYEOKSIOS + {0xC14E, 0xD579}, //10984 #HANGUL SYLLABLE HIEUH AE NIEUNCIEUC + {0xC14F, 0xD57A}, //10985 #HANGUL SYLLABLE HIEUH AE NIEUNHIEUH + {0xC150, 0xD57B}, //10986 #HANGUL SYLLABLE HIEUH AE TIKEUT + {0xC151, 0xD57D}, //10987 #HANGUL SYLLABLE HIEUH AE RIEULKIYEOK + {0xC152, 0xD57E}, //10988 #HANGUL SYLLABLE HIEUH AE RIEULMIEUM + {0xC153, 0xD57F}, //10989 #HANGUL SYLLABLE HIEUH AE RIEULPIEUP + {0xC154, 0xD580}, //10990 #HANGUL SYLLABLE HIEUH AE RIEULSIOS + {0xC155, 0xD581}, //10991 #HANGUL SYLLABLE HIEUH AE RIEULTHIEUTH + {0xC156, 0xD582}, //10992 #HANGUL SYLLABLE HIEUH AE RIEULPHIEUPH + {0xC157, 0xD583}, //10993 #HANGUL SYLLABLE HIEUH AE RIEULHIEUH + {0xC158, 0xD586}, //10994 #HANGUL SYLLABLE HIEUH AE PIEUPSIOS + {0xC159, 0xD58A}, //10995 #HANGUL SYLLABLE HIEUH AE CIEUC + {0xC15A, 0xD58B}, //10996 #HANGUL SYLLABLE HIEUH AE CHIEUCH + {0xC161, 0xD58C}, //10997 #HANGUL SYLLABLE HIEUH AE KHIEUKH + {0xC162, 0xD58D}, //10998 #HANGUL SYLLABLE HIEUH AE THIEUTH + {0xC163, 0xD58E}, //10999 #HANGUL SYLLABLE HIEUH AE PHIEUPH + {0xC164, 0xD58F}, //11000 #HANGUL SYLLABLE HIEUH AE HIEUH + {0xC165, 0xD591}, //11001 #HANGUL SYLLABLE HIEUH YA KIYEOK + {0xC166, 0xD592}, //11002 #HANGUL SYLLABLE HIEUH YA SSANGKIYEOK + {0xC167, 0xD593}, //11003 #HANGUL SYLLABLE HIEUH YA KIYEOKSIOS + {0xC168, 0xD594}, //11004 #HANGUL SYLLABLE HIEUH YA NIEUN + {0xC169, 0xD595}, //11005 #HANGUL SYLLABLE HIEUH YA NIEUNCIEUC + {0xC16A, 0xD596}, //11006 #HANGUL SYLLABLE HIEUH YA NIEUNHIEUH + {0xC16B, 0xD597}, //11007 #HANGUL SYLLABLE HIEUH YA TIKEUT + {0xC16C, 0xD598}, //11008 #HANGUL SYLLABLE HIEUH YA RIEUL + {0xC16D, 0xD599}, //11009 #HANGUL SYLLABLE HIEUH YA RIEULKIYEOK + {0xC16E, 0xD59A}, //11010 #HANGUL SYLLABLE HIEUH YA RIEULMIEUM + {0xC16F, 0xD59B}, //11011 #HANGUL SYLLABLE HIEUH YA RIEULPIEUP + {0xC170, 0xD59C}, //11012 #HANGUL SYLLABLE HIEUH YA RIEULSIOS + {0xC171, 0xD59D}, //11013 #HANGUL SYLLABLE HIEUH YA RIEULTHIEUTH + {0xC172, 0xD59E}, //11014 #HANGUL SYLLABLE HIEUH YA RIEULPHIEUPH + {0xC173, 0xD59F}, //11015 #HANGUL SYLLABLE HIEUH YA RIEULHIEUH + {0xC174, 0xD5A0}, //11016 #HANGUL SYLLABLE HIEUH YA MIEUM + {0xC175, 0xD5A1}, //11017 #HANGUL SYLLABLE HIEUH YA PIEUP + {0xC176, 0xD5A2}, //11018 #HANGUL SYLLABLE HIEUH YA PIEUPSIOS + {0xC177, 0xD5A3}, //11019 #HANGUL SYLLABLE HIEUH YA SIOS + {0xC178, 0xD5A4}, //11020 #HANGUL SYLLABLE HIEUH YA SSANGSIOS + {0xC179, 0xD5A6}, //11021 #HANGUL SYLLABLE HIEUH YA CIEUC + {0xC17A, 0xD5A7}, //11022 #HANGUL SYLLABLE HIEUH YA CHIEUCH + {0xC181, 0xD5A8}, //11023 #HANGUL SYLLABLE HIEUH YA KHIEUKH + {0xC182, 0xD5A9}, //11024 #HANGUL SYLLABLE HIEUH YA THIEUTH + {0xC183, 0xD5AA}, //11025 #HANGUL SYLLABLE HIEUH YA PHIEUPH + {0xC184, 0xD5AB}, //11026 #HANGUL SYLLABLE HIEUH YA HIEUH + {0xC185, 0xD5AC}, //11027 #HANGUL SYLLABLE HIEUH YAE + {0xC186, 0xD5AD}, //11028 #HANGUL SYLLABLE HIEUH YAE KIYEOK + {0xC187, 0xD5AE}, //11029 #HANGUL SYLLABLE HIEUH YAE SSANGKIYEOK + {0xC188, 0xD5AF}, //11030 #HANGUL SYLLABLE HIEUH YAE KIYEOKSIOS + {0xC189, 0xD5B0}, //11031 #HANGUL SYLLABLE HIEUH YAE NIEUN + {0xC18A, 0xD5B1}, //11032 #HANGUL SYLLABLE HIEUH YAE NIEUNCIEUC + {0xC18B, 0xD5B2}, //11033 #HANGUL SYLLABLE HIEUH YAE NIEUNHIEUH + {0xC18C, 0xD5B3}, //11034 #HANGUL SYLLABLE HIEUH YAE TIKEUT + {0xC18D, 0xD5B4}, //11035 #HANGUL SYLLABLE HIEUH YAE RIEUL + {0xC18E, 0xD5B5}, //11036 #HANGUL SYLLABLE HIEUH YAE RIEULKIYEOK + {0xC18F, 0xD5B6}, //11037 #HANGUL SYLLABLE HIEUH YAE RIEULMIEUM + {0xC190, 0xD5B7}, //11038 #HANGUL SYLLABLE HIEUH YAE RIEULPIEUP + {0xC191, 0xD5B8}, //11039 #HANGUL SYLLABLE HIEUH YAE RIEULSIOS + {0xC192, 0xD5B9}, //11040 #HANGUL SYLLABLE HIEUH YAE RIEULTHIEUTH + {0xC193, 0xD5BA}, //11041 #HANGUL SYLLABLE HIEUH YAE RIEULPHIEUPH + {0xC194, 0xD5BB}, //11042 #HANGUL SYLLABLE HIEUH YAE RIEULHIEUH + {0xC195, 0xD5BC}, //11043 #HANGUL SYLLABLE HIEUH YAE MIEUM + {0xC196, 0xD5BD}, //11044 #HANGUL SYLLABLE HIEUH YAE PIEUP + {0xC197, 0xD5BE}, //11045 #HANGUL SYLLABLE HIEUH YAE PIEUPSIOS + {0xC198, 0xD5BF}, //11046 #HANGUL SYLLABLE HIEUH YAE SIOS + {0xC199, 0xD5C0}, //11047 #HANGUL SYLLABLE HIEUH YAE SSANGSIOS + {0xC19A, 0xD5C1}, //11048 #HANGUL SYLLABLE HIEUH YAE IEUNG + {0xC19B, 0xD5C2}, //11049 #HANGUL SYLLABLE HIEUH YAE CIEUC + {0xC19C, 0xD5C3}, //11050 #HANGUL SYLLABLE HIEUH YAE CHIEUCH + {0xC19D, 0xD5C4}, //11051 #HANGUL SYLLABLE HIEUH YAE KHIEUKH + {0xC19E, 0xD5C5}, //11052 #HANGUL SYLLABLE HIEUH YAE THIEUTH + {0xC19F, 0xD5C6}, //11053 #HANGUL SYLLABLE HIEUH YAE PHIEUPH + {0xC1A0, 0xD5C7}, //11054 #HANGUL SYLLABLE HIEUH YAE HIEUH + {0xC1A1, 0xC810}, //11055 #HANGUL SYLLABLE CIEUC EO MIEUM + {0xC1A2, 0xC811}, //11056 #HANGUL SYLLABLE CIEUC EO PIEUP + {0xC1A3, 0xC813}, //11057 #HANGUL SYLLABLE CIEUC EO SIOS + {0xC1A4, 0xC815}, //11058 #HANGUL SYLLABLE CIEUC EO IEUNG + {0xC1A5, 0xC816}, //11059 #HANGUL SYLLABLE CIEUC EO CIEUC + {0xC1A6, 0xC81C}, //11060 #HANGUL SYLLABLE CIEUC E + {0xC1A7, 0xC81D}, //11061 #HANGUL SYLLABLE CIEUC E KIYEOK + {0xC1A8, 0xC820}, //11062 #HANGUL SYLLABLE CIEUC E NIEUN + {0xC1A9, 0xC824}, //11063 #HANGUL SYLLABLE CIEUC E RIEUL + {0xC1AA, 0xC82C}, //11064 #HANGUL SYLLABLE CIEUC E MIEUM + {0xC1AB, 0xC82D}, //11065 #HANGUL SYLLABLE CIEUC E PIEUP + {0xC1AC, 0xC82F}, //11066 #HANGUL SYLLABLE CIEUC E SIOS + {0xC1AD, 0xC831}, //11067 #HANGUL SYLLABLE CIEUC E IEUNG + {0xC1AE, 0xC838}, //11068 #HANGUL SYLLABLE CIEUC YEO + {0xC1AF, 0xC83C}, //11069 #HANGUL SYLLABLE CIEUC YEO NIEUN + {0xC1B0, 0xC840}, //11070 #HANGUL SYLLABLE CIEUC YEO RIEUL + {0xC1B1, 0xC848}, //11071 #HANGUL SYLLABLE CIEUC YEO MIEUM + {0xC1B2, 0xC849}, //11072 #HANGUL SYLLABLE CIEUC YEO PIEUP + {0xC1B3, 0xC84C}, //11073 #HANGUL SYLLABLE CIEUC YEO SSANGSIOS + {0xC1B4, 0xC84D}, //11074 #HANGUL SYLLABLE CIEUC YEO IEUNG + {0xC1B5, 0xC854}, //11075 #HANGUL SYLLABLE CIEUC YE + {0xC1B6, 0xC870}, //11076 #HANGUL SYLLABLE CIEUC O + {0xC1B7, 0xC871}, //11077 #HANGUL SYLLABLE CIEUC O KIYEOK + {0xC1B8, 0xC874}, //11078 #HANGUL SYLLABLE CIEUC O NIEUN + {0xC1B9, 0xC878}, //11079 #HANGUL SYLLABLE CIEUC O RIEUL + {0xC1BA, 0xC87A}, //11080 #HANGUL SYLLABLE CIEUC O RIEULMIEUM + {0xC1BB, 0xC880}, //11081 #HANGUL SYLLABLE CIEUC O MIEUM + {0xC1BC, 0xC881}, //11082 #HANGUL SYLLABLE CIEUC O PIEUP + {0xC1BD, 0xC883}, //11083 #HANGUL SYLLABLE CIEUC O SIOS + {0xC1BE, 0xC885}, //11084 #HANGUL SYLLABLE CIEUC O IEUNG + {0xC1BF, 0xC886}, //11085 #HANGUL SYLLABLE CIEUC O CIEUC + {0xC1C0, 0xC887}, //11086 #HANGUL SYLLABLE CIEUC O CHIEUCH + {0xC1C1, 0xC88B}, //11087 #HANGUL SYLLABLE CIEUC O HIEUH + {0xC1C2, 0xC88C}, //11088 #HANGUL SYLLABLE CIEUC WA + {0xC1C3, 0xC88D}, //11089 #HANGUL SYLLABLE CIEUC WA KIYEOK + {0xC1C4, 0xC894}, //11090 #HANGUL SYLLABLE CIEUC WA RIEUL + {0xC1C5, 0xC89D}, //11091 #HANGUL SYLLABLE CIEUC WA PIEUP + {0xC1C6, 0xC89F}, //11092 #HANGUL SYLLABLE CIEUC WA SIOS + {0xC1C7, 0xC8A1}, //11093 #HANGUL SYLLABLE CIEUC WA IEUNG + {0xC1C8, 0xC8A8}, //11094 #HANGUL SYLLABLE CIEUC WAE + {0xC1C9, 0xC8BC}, //11095 #HANGUL SYLLABLE CIEUC WAE SSANGSIOS + {0xC1CA, 0xC8BD}, //11096 #HANGUL SYLLABLE CIEUC WAE IEUNG + {0xC1CB, 0xC8C4}, //11097 #HANGUL SYLLABLE CIEUC OE + {0xC1CC, 0xC8C8}, //11098 #HANGUL SYLLABLE CIEUC OE NIEUN + {0xC1CD, 0xC8CC}, //11099 #HANGUL SYLLABLE CIEUC OE RIEUL + {0xC1CE, 0xC8D4}, //11100 #HANGUL SYLLABLE CIEUC OE MIEUM + {0xC1CF, 0xC8D5}, //11101 #HANGUL SYLLABLE CIEUC OE PIEUP + {0xC1D0, 0xC8D7}, //11102 #HANGUL SYLLABLE CIEUC OE SIOS + {0xC1D1, 0xC8D9}, //11103 #HANGUL SYLLABLE CIEUC OE IEUNG + {0xC1D2, 0xC8E0}, //11104 #HANGUL SYLLABLE CIEUC YO + {0xC1D3, 0xC8E1}, //11105 #HANGUL SYLLABLE CIEUC YO KIYEOK + {0xC1D4, 0xC8E4}, //11106 #HANGUL SYLLABLE CIEUC YO NIEUN + {0xC1D5, 0xC8F5}, //11107 #HANGUL SYLLABLE CIEUC YO IEUNG + {0xC1D6, 0xC8FC}, //11108 #HANGUL SYLLABLE CIEUC U + {0xC1D7, 0xC8FD}, //11109 #HANGUL SYLLABLE CIEUC U KIYEOK + {0xC1D8, 0xC900}, //11110 #HANGUL SYLLABLE CIEUC U NIEUN + {0xC1D9, 0xC904}, //11111 #HANGUL SYLLABLE CIEUC U RIEUL + {0xC1DA, 0xC905}, //11112 #HANGUL SYLLABLE CIEUC U RIEULKIYEOK + {0xC1DB, 0xC906}, //11113 #HANGUL SYLLABLE CIEUC U RIEULMIEUM + {0xC1DC, 0xC90C}, //11114 #HANGUL SYLLABLE CIEUC U MIEUM + {0xC1DD, 0xC90D}, //11115 #HANGUL SYLLABLE CIEUC U PIEUP + {0xC1DE, 0xC90F}, //11116 #HANGUL SYLLABLE CIEUC U SIOS + {0xC1DF, 0xC911}, //11117 #HANGUL SYLLABLE CIEUC U IEUNG + {0xC1E0, 0xC918}, //11118 #HANGUL SYLLABLE CIEUC WEO + {0xC1E1, 0xC92C}, //11119 #HANGUL SYLLABLE CIEUC WEO SSANGSIOS + {0xC1E2, 0xC934}, //11120 #HANGUL SYLLABLE CIEUC WE + {0xC1E3, 0xC950}, //11121 #HANGUL SYLLABLE CIEUC WI + {0xC1E4, 0xC951}, //11122 #HANGUL SYLLABLE CIEUC WI KIYEOK + {0xC1E5, 0xC954}, //11123 #HANGUL SYLLABLE CIEUC WI NIEUN + {0xC1E6, 0xC958}, //11124 #HANGUL SYLLABLE CIEUC WI RIEUL + {0xC1E7, 0xC960}, //11125 #HANGUL SYLLABLE CIEUC WI MIEUM + {0xC1E8, 0xC961}, //11126 #HANGUL SYLLABLE CIEUC WI PIEUP + {0xC1E9, 0xC963}, //11127 #HANGUL SYLLABLE CIEUC WI SIOS + {0xC1EA, 0xC96C}, //11128 #HANGUL SYLLABLE CIEUC YU + {0xC1EB, 0xC970}, //11129 #HANGUL SYLLABLE CIEUC YU NIEUN + {0xC1EC, 0xC974}, //11130 #HANGUL SYLLABLE CIEUC YU RIEUL + {0xC1ED, 0xC97C}, //11131 #HANGUL SYLLABLE CIEUC YU MIEUM + {0xC1EE, 0xC988}, //11132 #HANGUL SYLLABLE CIEUC EU + {0xC1EF, 0xC989}, //11133 #HANGUL SYLLABLE CIEUC EU KIYEOK + {0xC1F0, 0xC98C}, //11134 #HANGUL SYLLABLE CIEUC EU NIEUN + {0xC1F1, 0xC990}, //11135 #HANGUL SYLLABLE CIEUC EU RIEUL + {0xC1F2, 0xC998}, //11136 #HANGUL SYLLABLE CIEUC EU MIEUM + {0xC1F3, 0xC999}, //11137 #HANGUL SYLLABLE CIEUC EU PIEUP + {0xC1F4, 0xC99B}, //11138 #HANGUL SYLLABLE CIEUC EU SIOS + {0xC1F5, 0xC99D}, //11139 #HANGUL SYLLABLE CIEUC EU IEUNG + {0xC1F6, 0xC9C0}, //11140 #HANGUL SYLLABLE CIEUC I + {0xC1F7, 0xC9C1}, //11141 #HANGUL SYLLABLE CIEUC I KIYEOK + {0xC1F8, 0xC9C4}, //11142 #HANGUL SYLLABLE CIEUC I NIEUN + {0xC1F9, 0xC9C7}, //11143 #HANGUL SYLLABLE CIEUC I TIKEUT + {0xC1FA, 0xC9C8}, //11144 #HANGUL SYLLABLE CIEUC I RIEUL + {0xC1FB, 0xC9CA}, //11145 #HANGUL SYLLABLE CIEUC I RIEULMIEUM + {0xC1FC, 0xC9D0}, //11146 #HANGUL SYLLABLE CIEUC I MIEUM + {0xC1FD, 0xC9D1}, //11147 #HANGUL SYLLABLE CIEUC I PIEUP + {0xC1FE, 0xC9D3}, //11148 #HANGUL SYLLABLE CIEUC I SIOS + {0xC241, 0xD5CA}, //11149 #HANGUL SYLLABLE HIEUH EO SSANGKIYEOK + {0xC242, 0xD5CB}, //11150 #HANGUL SYLLABLE HIEUH EO KIYEOKSIOS + {0xC243, 0xD5CD}, //11151 #HANGUL SYLLABLE HIEUH EO NIEUNCIEUC + {0xC244, 0xD5CE}, //11152 #HANGUL SYLLABLE HIEUH EO NIEUNHIEUH + {0xC245, 0xD5CF}, //11153 #HANGUL SYLLABLE HIEUH EO TIKEUT + {0xC246, 0xD5D1}, //11154 #HANGUL SYLLABLE HIEUH EO RIEULKIYEOK + {0xC247, 0xD5D3}, //11155 #HANGUL SYLLABLE HIEUH EO RIEULPIEUP + {0xC248, 0xD5D4}, //11156 #HANGUL SYLLABLE HIEUH EO RIEULSIOS + {0xC249, 0xD5D5}, //11157 #HANGUL SYLLABLE HIEUH EO RIEULTHIEUTH + {0xC24A, 0xD5D6}, //11158 #HANGUL SYLLABLE HIEUH EO RIEULPHIEUPH + {0xC24B, 0xD5D7}, //11159 #HANGUL SYLLABLE HIEUH EO RIEULHIEUH + {0xC24C, 0xD5DA}, //11160 #HANGUL SYLLABLE HIEUH EO PIEUPSIOS + {0xC24D, 0xD5DC}, //11161 #HANGUL SYLLABLE HIEUH EO SSANGSIOS + {0xC24E, 0xD5DE}, //11162 #HANGUL SYLLABLE HIEUH EO CIEUC + {0xC24F, 0xD5DF}, //11163 #HANGUL SYLLABLE HIEUH EO CHIEUCH + {0xC250, 0xD5E0}, //11164 #HANGUL SYLLABLE HIEUH EO KHIEUKH + {0xC251, 0xD5E1}, //11165 #HANGUL SYLLABLE HIEUH EO THIEUTH + {0xC252, 0xD5E2}, //11166 #HANGUL SYLLABLE HIEUH EO PHIEUPH + {0xC253, 0xD5E3}, //11167 #HANGUL SYLLABLE HIEUH EO HIEUH + {0xC254, 0xD5E6}, //11168 #HANGUL SYLLABLE HIEUH E SSANGKIYEOK + {0xC255, 0xD5E7}, //11169 #HANGUL SYLLABLE HIEUH E KIYEOKSIOS + {0xC256, 0xD5E9}, //11170 #HANGUL SYLLABLE HIEUH E NIEUNCIEUC + {0xC257, 0xD5EA}, //11171 #HANGUL SYLLABLE HIEUH E NIEUNHIEUH + {0xC258, 0xD5EB}, //11172 #HANGUL SYLLABLE HIEUH E TIKEUT + {0xC259, 0xD5ED}, //11173 #HANGUL SYLLABLE HIEUH E RIEULKIYEOK + {0xC25A, 0xD5EE}, //11174 #HANGUL SYLLABLE HIEUH E RIEULMIEUM + {0xC261, 0xD5EF}, //11175 #HANGUL SYLLABLE HIEUH E RIEULPIEUP + {0xC262, 0xD5F0}, //11176 #HANGUL SYLLABLE HIEUH E RIEULSIOS + {0xC263, 0xD5F1}, //11177 #HANGUL SYLLABLE HIEUH E RIEULTHIEUTH + {0xC264, 0xD5F2}, //11178 #HANGUL SYLLABLE HIEUH E RIEULPHIEUPH + {0xC265, 0xD5F3}, //11179 #HANGUL SYLLABLE HIEUH E RIEULHIEUH + {0xC266, 0xD5F6}, //11180 #HANGUL SYLLABLE HIEUH E PIEUPSIOS + {0xC267, 0xD5F8}, //11181 #HANGUL SYLLABLE HIEUH E SSANGSIOS + {0xC268, 0xD5FA}, //11182 #HANGUL SYLLABLE HIEUH E CIEUC + {0xC269, 0xD5FB}, //11183 #HANGUL SYLLABLE HIEUH E CHIEUCH + {0xC26A, 0xD5FC}, //11184 #HANGUL SYLLABLE HIEUH E KHIEUKH + {0xC26B, 0xD5FD}, //11185 #HANGUL SYLLABLE HIEUH E THIEUTH + {0xC26C, 0xD5FE}, //11186 #HANGUL SYLLABLE HIEUH E PHIEUPH + {0xC26D, 0xD5FF}, //11187 #HANGUL SYLLABLE HIEUH E HIEUH + {0xC26E, 0xD602}, //11188 #HANGUL SYLLABLE HIEUH YEO SSANGKIYEOK + {0xC26F, 0xD603}, //11189 #HANGUL SYLLABLE HIEUH YEO KIYEOKSIOS + {0xC270, 0xD605}, //11190 #HANGUL SYLLABLE HIEUH YEO NIEUNCIEUC + {0xC271, 0xD606}, //11191 #HANGUL SYLLABLE HIEUH YEO NIEUNHIEUH + {0xC272, 0xD607}, //11192 #HANGUL SYLLABLE HIEUH YEO TIKEUT + {0xC273, 0xD609}, //11193 #HANGUL SYLLABLE HIEUH YEO RIEULKIYEOK + {0xC274, 0xD60A}, //11194 #HANGUL SYLLABLE HIEUH YEO RIEULMIEUM + {0xC275, 0xD60B}, //11195 #HANGUL SYLLABLE HIEUH YEO RIEULPIEUP + {0xC276, 0xD60C}, //11196 #HANGUL SYLLABLE HIEUH YEO RIEULSIOS + {0xC277, 0xD60D}, //11197 #HANGUL SYLLABLE HIEUH YEO RIEULTHIEUTH + {0xC278, 0xD60E}, //11198 #HANGUL SYLLABLE HIEUH YEO RIEULPHIEUPH + {0xC279, 0xD60F}, //11199 #HANGUL SYLLABLE HIEUH YEO RIEULHIEUH + {0xC27A, 0xD612}, //11200 #HANGUL SYLLABLE HIEUH YEO PIEUPSIOS + {0xC281, 0xD616}, //11201 #HANGUL SYLLABLE HIEUH YEO CIEUC + {0xC282, 0xD617}, //11202 #HANGUL SYLLABLE HIEUH YEO CHIEUCH + {0xC283, 0xD618}, //11203 #HANGUL SYLLABLE HIEUH YEO KHIEUKH + {0xC284, 0xD619}, //11204 #HANGUL SYLLABLE HIEUH YEO THIEUTH + {0xC285, 0xD61A}, //11205 #HANGUL SYLLABLE HIEUH YEO PHIEUPH + {0xC286, 0xD61B}, //11206 #HANGUL SYLLABLE HIEUH YEO HIEUH + {0xC287, 0xD61D}, //11207 #HANGUL SYLLABLE HIEUH YE KIYEOK + {0xC288, 0xD61E}, //11208 #HANGUL SYLLABLE HIEUH YE SSANGKIYEOK + {0xC289, 0xD61F}, //11209 #HANGUL SYLLABLE HIEUH YE KIYEOKSIOS + {0xC28A, 0xD621}, //11210 #HANGUL SYLLABLE HIEUH YE NIEUNCIEUC + {0xC28B, 0xD622}, //11211 #HANGUL SYLLABLE HIEUH YE NIEUNHIEUH + {0xC28C, 0xD623}, //11212 #HANGUL SYLLABLE HIEUH YE TIKEUT + {0xC28D, 0xD625}, //11213 #HANGUL SYLLABLE HIEUH YE RIEULKIYEOK + {0xC28E, 0xD626}, //11214 #HANGUL SYLLABLE HIEUH YE RIEULMIEUM + {0xC28F, 0xD627}, //11215 #HANGUL SYLLABLE HIEUH YE RIEULPIEUP + {0xC290, 0xD628}, //11216 #HANGUL SYLLABLE HIEUH YE RIEULSIOS + {0xC291, 0xD629}, //11217 #HANGUL SYLLABLE HIEUH YE RIEULTHIEUTH + {0xC292, 0xD62A}, //11218 #HANGUL SYLLABLE HIEUH YE RIEULPHIEUPH + {0xC293, 0xD62B}, //11219 #HANGUL SYLLABLE HIEUH YE RIEULHIEUH + {0xC294, 0xD62C}, //11220 #HANGUL SYLLABLE HIEUH YE MIEUM + {0xC295, 0xD62E}, //11221 #HANGUL SYLLABLE HIEUH YE PIEUPSIOS + {0xC296, 0xD62F}, //11222 #HANGUL SYLLABLE HIEUH YE SIOS + {0xC297, 0xD630}, //11223 #HANGUL SYLLABLE HIEUH YE SSANGSIOS + {0xC298, 0xD631}, //11224 #HANGUL SYLLABLE HIEUH YE IEUNG + {0xC299, 0xD632}, //11225 #HANGUL SYLLABLE HIEUH YE CIEUC + {0xC29A, 0xD633}, //11226 #HANGUL SYLLABLE HIEUH YE CHIEUCH + {0xC29B, 0xD634}, //11227 #HANGUL SYLLABLE HIEUH YE KHIEUKH + {0xC29C, 0xD635}, //11228 #HANGUL SYLLABLE HIEUH YE THIEUTH + {0xC29D, 0xD636}, //11229 #HANGUL SYLLABLE HIEUH YE PHIEUPH + {0xC29E, 0xD637}, //11230 #HANGUL SYLLABLE HIEUH YE HIEUH + {0xC29F, 0xD63A}, //11231 #HANGUL SYLLABLE HIEUH O SSANGKIYEOK + {0xC2A0, 0xD63B}, //11232 #HANGUL SYLLABLE HIEUH O KIYEOKSIOS + {0xC2A1, 0xC9D5}, //11233 #HANGUL SYLLABLE CIEUC I IEUNG + {0xC2A2, 0xC9D6}, //11234 #HANGUL SYLLABLE CIEUC I CIEUC + {0xC2A3, 0xC9D9}, //11235 #HANGUL SYLLABLE CIEUC I THIEUTH + {0xC2A4, 0xC9DA}, //11236 #HANGUL SYLLABLE CIEUC I PHIEUPH + {0xC2A5, 0xC9DC}, //11237 #HANGUL SYLLABLE SSANGCIEUC A + {0xC2A6, 0xC9DD}, //11238 #HANGUL SYLLABLE SSANGCIEUC A KIYEOK + {0xC2A7, 0xC9E0}, //11239 #HANGUL SYLLABLE SSANGCIEUC A NIEUN + {0xC2A8, 0xC9E2}, //11240 #HANGUL SYLLABLE SSANGCIEUC A NIEUNHIEUH + {0xC2A9, 0xC9E4}, //11241 #HANGUL SYLLABLE SSANGCIEUC A RIEUL + {0xC2AA, 0xC9E7}, //11242 #HANGUL SYLLABLE SSANGCIEUC A RIEULPIEUP + {0xC2AB, 0xC9EC}, //11243 #HANGUL SYLLABLE SSANGCIEUC A MIEUM + {0xC2AC, 0xC9ED}, //11244 #HANGUL SYLLABLE SSANGCIEUC A PIEUP + {0xC2AD, 0xC9EF}, //11245 #HANGUL SYLLABLE SSANGCIEUC A SIOS + {0xC2AE, 0xC9F0}, //11246 #HANGUL SYLLABLE SSANGCIEUC A SSANGSIOS + {0xC2AF, 0xC9F1}, //11247 #HANGUL SYLLABLE SSANGCIEUC A IEUNG + {0xC2B0, 0xC9F8}, //11248 #HANGUL SYLLABLE SSANGCIEUC AE + {0xC2B1, 0xC9F9}, //11249 #HANGUL SYLLABLE SSANGCIEUC AE KIYEOK + {0xC2B2, 0xC9FC}, //11250 #HANGUL SYLLABLE SSANGCIEUC AE NIEUN + {0xC2B3, 0xCA00}, //11251 #HANGUL SYLLABLE SSANGCIEUC AE RIEUL + {0xC2B4, 0xCA08}, //11252 #HANGUL SYLLABLE SSANGCIEUC AE MIEUM + {0xC2B5, 0xCA09}, //11253 #HANGUL SYLLABLE SSANGCIEUC AE PIEUP + {0xC2B6, 0xCA0B}, //11254 #HANGUL SYLLABLE SSANGCIEUC AE SIOS + {0xC2B7, 0xCA0C}, //11255 #HANGUL SYLLABLE SSANGCIEUC AE SSANGSIOS + {0xC2B8, 0xCA0D}, //11256 #HANGUL SYLLABLE SSANGCIEUC AE IEUNG + {0xC2B9, 0xCA14}, //11257 #HANGUL SYLLABLE SSANGCIEUC YA + {0xC2BA, 0xCA18}, //11258 #HANGUL SYLLABLE SSANGCIEUC YA NIEUN + {0xC2BB, 0xCA29}, //11259 #HANGUL SYLLABLE SSANGCIEUC YA IEUNG + {0xC2BC, 0xCA4C}, //11260 #HANGUL SYLLABLE SSANGCIEUC EO + {0xC2BD, 0xCA4D}, //11261 #HANGUL SYLLABLE SSANGCIEUC EO KIYEOK + {0xC2BE, 0xCA50}, //11262 #HANGUL SYLLABLE SSANGCIEUC EO NIEUN + {0xC2BF, 0xCA54}, //11263 #HANGUL SYLLABLE SSANGCIEUC EO RIEUL + {0xC2C0, 0xCA5C}, //11264 #HANGUL SYLLABLE SSANGCIEUC EO MIEUM + {0xC2C1, 0xCA5D}, //11265 #HANGUL SYLLABLE SSANGCIEUC EO PIEUP + {0xC2C2, 0xCA5F}, //11266 #HANGUL SYLLABLE SSANGCIEUC EO SIOS + {0xC2C3, 0xCA60}, //11267 #HANGUL SYLLABLE SSANGCIEUC EO SSANGSIOS + {0xC2C4, 0xCA61}, //11268 #HANGUL SYLLABLE SSANGCIEUC EO IEUNG + {0xC2C5, 0xCA68}, //11269 #HANGUL SYLLABLE SSANGCIEUC E + {0xC2C6, 0xCA7D}, //11270 #HANGUL SYLLABLE SSANGCIEUC E IEUNG + {0xC2C7, 0xCA84}, //11271 #HANGUL SYLLABLE SSANGCIEUC YEO + {0xC2C8, 0xCA98}, //11272 #HANGUL SYLLABLE SSANGCIEUC YEO SSANGSIOS + {0xC2C9, 0xCABC}, //11273 #HANGUL SYLLABLE SSANGCIEUC O + {0xC2CA, 0xCABD}, //11274 #HANGUL SYLLABLE SSANGCIEUC O KIYEOK + {0xC2CB, 0xCAC0}, //11275 #HANGUL SYLLABLE SSANGCIEUC O NIEUN + {0xC2CC, 0xCAC4}, //11276 #HANGUL SYLLABLE SSANGCIEUC O RIEUL + {0xC2CD, 0xCACC}, //11277 #HANGUL SYLLABLE SSANGCIEUC O MIEUM + {0xC2CE, 0xCACD}, //11278 #HANGUL SYLLABLE SSANGCIEUC O PIEUP + {0xC2CF, 0xCACF}, //11279 #HANGUL SYLLABLE SSANGCIEUC O SIOS + {0xC2D0, 0xCAD1}, //11280 #HANGUL SYLLABLE SSANGCIEUC O IEUNG + {0xC2D1, 0xCAD3}, //11281 #HANGUL SYLLABLE SSANGCIEUC O CHIEUCH + {0xC2D2, 0xCAD8}, //11282 #HANGUL SYLLABLE SSANGCIEUC WA + {0xC2D3, 0xCAD9}, //11283 #HANGUL SYLLABLE SSANGCIEUC WA KIYEOK + {0xC2D4, 0xCAE0}, //11284 #HANGUL SYLLABLE SSANGCIEUC WA RIEUL + {0xC2D5, 0xCAEC}, //11285 #HANGUL SYLLABLE SSANGCIEUC WA SSANGSIOS + {0xC2D6, 0xCAF4}, //11286 #HANGUL SYLLABLE SSANGCIEUC WAE + {0xC2D7, 0xCB08}, //11287 #HANGUL SYLLABLE SSANGCIEUC WAE SSANGSIOS + {0xC2D8, 0xCB10}, //11288 #HANGUL SYLLABLE SSANGCIEUC OE + {0xC2D9, 0xCB14}, //11289 #HANGUL SYLLABLE SSANGCIEUC OE NIEUN + {0xC2DA, 0xCB18}, //11290 #HANGUL SYLLABLE SSANGCIEUC OE RIEUL + {0xC2DB, 0xCB20}, //11291 #HANGUL SYLLABLE SSANGCIEUC OE MIEUM + {0xC2DC, 0xCB21}, //11292 #HANGUL SYLLABLE SSANGCIEUC OE PIEUP + {0xC2DD, 0xCB41}, //11293 #HANGUL SYLLABLE SSANGCIEUC YO IEUNG + {0xC2DE, 0xCB48}, //11294 #HANGUL SYLLABLE SSANGCIEUC U + {0xC2DF, 0xCB49}, //11295 #HANGUL SYLLABLE SSANGCIEUC U KIYEOK + {0xC2E0, 0xCB4C}, //11296 #HANGUL SYLLABLE SSANGCIEUC U NIEUN + {0xC2E1, 0xCB50}, //11297 #HANGUL SYLLABLE SSANGCIEUC U RIEUL + {0xC2E2, 0xCB58}, //11298 #HANGUL SYLLABLE SSANGCIEUC U MIEUM + {0xC2E3, 0xCB59}, //11299 #HANGUL SYLLABLE SSANGCIEUC U PIEUP + {0xC2E4, 0xCB5D}, //11300 #HANGUL SYLLABLE SSANGCIEUC U IEUNG + {0xC2E5, 0xCB64}, //11301 #HANGUL SYLLABLE SSANGCIEUC WEO + {0xC2E6, 0xCB78}, //11302 #HANGUL SYLLABLE SSANGCIEUC WEO SSANGSIOS + {0xC2E7, 0xCB79}, //11303 #HANGUL SYLLABLE SSANGCIEUC WEO IEUNG + {0xC2E8, 0xCB9C}, //11304 #HANGUL SYLLABLE SSANGCIEUC WI + {0xC2E9, 0xCBB8}, //11305 #HANGUL SYLLABLE SSANGCIEUC YU + {0xC2EA, 0xCBD4}, //11306 #HANGUL SYLLABLE SSANGCIEUC EU + {0xC2EB, 0xCBE4}, //11307 #HANGUL SYLLABLE SSANGCIEUC EU MIEUM + {0xC2EC, 0xCBE7}, //11308 #HANGUL SYLLABLE SSANGCIEUC EU SIOS + {0xC2ED, 0xCBE9}, //11309 #HANGUL SYLLABLE SSANGCIEUC EU IEUNG + {0xC2EE, 0xCC0C}, //11310 #HANGUL SYLLABLE SSANGCIEUC I + {0xC2EF, 0xCC0D}, //11311 #HANGUL SYLLABLE SSANGCIEUC I KIYEOK + {0xC2F0, 0xCC10}, //11312 #HANGUL SYLLABLE SSANGCIEUC I NIEUN + {0xC2F1, 0xCC14}, //11313 #HANGUL SYLLABLE SSANGCIEUC I RIEUL + {0xC2F2, 0xCC1C}, //11314 #HANGUL SYLLABLE SSANGCIEUC I MIEUM + {0xC2F3, 0xCC1D}, //11315 #HANGUL SYLLABLE SSANGCIEUC I PIEUP + {0xC2F4, 0xCC21}, //11316 #HANGUL SYLLABLE SSANGCIEUC I IEUNG + {0xC2F5, 0xCC22}, //11317 #HANGUL SYLLABLE SSANGCIEUC I CIEUC + {0xC2F6, 0xCC27}, //11318 #HANGUL SYLLABLE SSANGCIEUC I HIEUH + {0xC2F7, 0xCC28}, //11319 #HANGUL SYLLABLE CHIEUCH A + {0xC2F8, 0xCC29}, //11320 #HANGUL SYLLABLE CHIEUCH A KIYEOK + {0xC2F9, 0xCC2C}, //11321 #HANGUL SYLLABLE CHIEUCH A NIEUN + {0xC2FA, 0xCC2E}, //11322 #HANGUL SYLLABLE CHIEUCH A NIEUNHIEUH + {0xC2FB, 0xCC30}, //11323 #HANGUL SYLLABLE CHIEUCH A RIEUL + {0xC2FC, 0xCC38}, //11324 #HANGUL SYLLABLE CHIEUCH A MIEUM + {0xC2FD, 0xCC39}, //11325 #HANGUL SYLLABLE CHIEUCH A PIEUP + {0xC2FE, 0xCC3B}, //11326 #HANGUL SYLLABLE CHIEUCH A SIOS + {0xC341, 0xD63D}, //11327 #HANGUL SYLLABLE HIEUH O NIEUNCIEUC + {0xC342, 0xD63E}, //11328 #HANGUL SYLLABLE HIEUH O NIEUNHIEUH + {0xC343, 0xD63F}, //11329 #HANGUL SYLLABLE HIEUH O TIKEUT + {0xC344, 0xD641}, //11330 #HANGUL SYLLABLE HIEUH O RIEULKIYEOK + {0xC345, 0xD642}, //11331 #HANGUL SYLLABLE HIEUH O RIEULMIEUM + {0xC346, 0xD643}, //11332 #HANGUL SYLLABLE HIEUH O RIEULPIEUP + {0xC347, 0xD644}, //11333 #HANGUL SYLLABLE HIEUH O RIEULSIOS + {0xC348, 0xD646}, //11334 #HANGUL SYLLABLE HIEUH O RIEULPHIEUPH + {0xC349, 0xD647}, //11335 #HANGUL SYLLABLE HIEUH O RIEULHIEUH + {0xC34A, 0xD64A}, //11336 #HANGUL SYLLABLE HIEUH O PIEUPSIOS + {0xC34B, 0xD64C}, //11337 #HANGUL SYLLABLE HIEUH O SSANGSIOS + {0xC34C, 0xD64E}, //11338 #HANGUL SYLLABLE HIEUH O CIEUC + {0xC34D, 0xD64F}, //11339 #HANGUL SYLLABLE HIEUH O CHIEUCH + {0xC34E, 0xD650}, //11340 #HANGUL SYLLABLE HIEUH O KHIEUKH + {0xC34F, 0xD652}, //11341 #HANGUL SYLLABLE HIEUH O PHIEUPH + {0xC350, 0xD653}, //11342 #HANGUL SYLLABLE HIEUH O HIEUH + {0xC351, 0xD656}, //11343 #HANGUL SYLLABLE HIEUH WA SSANGKIYEOK + {0xC352, 0xD657}, //11344 #HANGUL SYLLABLE HIEUH WA KIYEOKSIOS + {0xC353, 0xD659}, //11345 #HANGUL SYLLABLE HIEUH WA NIEUNCIEUC + {0xC354, 0xD65A}, //11346 #HANGUL SYLLABLE HIEUH WA NIEUNHIEUH + {0xC355, 0xD65B}, //11347 #HANGUL SYLLABLE HIEUH WA TIKEUT + {0xC356, 0xD65D}, //11348 #HANGUL SYLLABLE HIEUH WA RIEULKIYEOK + {0xC357, 0xD65E}, //11349 #HANGUL SYLLABLE HIEUH WA RIEULMIEUM + {0xC358, 0xD65F}, //11350 #HANGUL SYLLABLE HIEUH WA RIEULPIEUP + {0xC359, 0xD660}, //11351 #HANGUL SYLLABLE HIEUH WA RIEULSIOS + {0xC35A, 0xD661}, //11352 #HANGUL SYLLABLE HIEUH WA RIEULTHIEUTH + {0xC361, 0xD662}, //11353 #HANGUL SYLLABLE HIEUH WA RIEULPHIEUPH + {0xC362, 0xD663}, //11354 #HANGUL SYLLABLE HIEUH WA RIEULHIEUH + {0xC363, 0xD664}, //11355 #HANGUL SYLLABLE HIEUH WA MIEUM + {0xC364, 0xD665}, //11356 #HANGUL SYLLABLE HIEUH WA PIEUP + {0xC365, 0xD666}, //11357 #HANGUL SYLLABLE HIEUH WA PIEUPSIOS + {0xC366, 0xD668}, //11358 #HANGUL SYLLABLE HIEUH WA SSANGSIOS + {0xC367, 0xD66A}, //11359 #HANGUL SYLLABLE HIEUH WA CIEUC + {0xC368, 0xD66B}, //11360 #HANGUL SYLLABLE HIEUH WA CHIEUCH + {0xC369, 0xD66C}, //11361 #HANGUL SYLLABLE HIEUH WA KHIEUKH + {0xC36A, 0xD66D}, //11362 #HANGUL SYLLABLE HIEUH WA THIEUTH + {0xC36B, 0xD66E}, //11363 #HANGUL SYLLABLE HIEUH WA PHIEUPH + {0xC36C, 0xD66F}, //11364 #HANGUL SYLLABLE HIEUH WA HIEUH + {0xC36D, 0xD672}, //11365 #HANGUL SYLLABLE HIEUH WAE SSANGKIYEOK + {0xC36E, 0xD673}, //11366 #HANGUL SYLLABLE HIEUH WAE KIYEOKSIOS + {0xC36F, 0xD675}, //11367 #HANGUL SYLLABLE HIEUH WAE NIEUNCIEUC + {0xC370, 0xD676}, //11368 #HANGUL SYLLABLE HIEUH WAE NIEUNHIEUH + {0xC371, 0xD677}, //11369 #HANGUL SYLLABLE HIEUH WAE TIKEUT + {0xC372, 0xD678}, //11370 #HANGUL SYLLABLE HIEUH WAE RIEUL + {0xC373, 0xD679}, //11371 #HANGUL SYLLABLE HIEUH WAE RIEULKIYEOK + {0xC374, 0xD67A}, //11372 #HANGUL SYLLABLE HIEUH WAE RIEULMIEUM + {0xC375, 0xD67B}, //11373 #HANGUL SYLLABLE HIEUH WAE RIEULPIEUP + {0xC376, 0xD67C}, //11374 #HANGUL SYLLABLE HIEUH WAE RIEULSIOS + {0xC377, 0xD67D}, //11375 #HANGUL SYLLABLE HIEUH WAE RIEULTHIEUTH + {0xC378, 0xD67E}, //11376 #HANGUL SYLLABLE HIEUH WAE RIEULPHIEUPH + {0xC379, 0xD67F}, //11377 #HANGUL SYLLABLE HIEUH WAE RIEULHIEUH + {0xC37A, 0xD680}, //11378 #HANGUL SYLLABLE HIEUH WAE MIEUM + {0xC381, 0xD681}, //11379 #HANGUL SYLLABLE HIEUH WAE PIEUP + {0xC382, 0xD682}, //11380 #HANGUL SYLLABLE HIEUH WAE PIEUPSIOS + {0xC383, 0xD684}, //11381 #HANGUL SYLLABLE HIEUH WAE SSANGSIOS + {0xC384, 0xD686}, //11382 #HANGUL SYLLABLE HIEUH WAE CIEUC + {0xC385, 0xD687}, //11383 #HANGUL SYLLABLE HIEUH WAE CHIEUCH + {0xC386, 0xD688}, //11384 #HANGUL SYLLABLE HIEUH WAE KHIEUKH + {0xC387, 0xD689}, //11385 #HANGUL SYLLABLE HIEUH WAE THIEUTH + {0xC388, 0xD68A}, //11386 #HANGUL SYLLABLE HIEUH WAE PHIEUPH + {0xC389, 0xD68B}, //11387 #HANGUL SYLLABLE HIEUH WAE HIEUH + {0xC38A, 0xD68E}, //11388 #HANGUL SYLLABLE HIEUH OE SSANGKIYEOK + {0xC38B, 0xD68F}, //11389 #HANGUL SYLLABLE HIEUH OE KIYEOKSIOS + {0xC38C, 0xD691}, //11390 #HANGUL SYLLABLE HIEUH OE NIEUNCIEUC + {0xC38D, 0xD692}, //11391 #HANGUL SYLLABLE HIEUH OE NIEUNHIEUH + {0xC38E, 0xD693}, //11392 #HANGUL SYLLABLE HIEUH OE TIKEUT + {0xC38F, 0xD695}, //11393 #HANGUL SYLLABLE HIEUH OE RIEULKIYEOK + {0xC390, 0xD696}, //11394 #HANGUL SYLLABLE HIEUH OE RIEULMIEUM + {0xC391, 0xD697}, //11395 #HANGUL SYLLABLE HIEUH OE RIEULPIEUP + {0xC392, 0xD698}, //11396 #HANGUL SYLLABLE HIEUH OE RIEULSIOS + {0xC393, 0xD699}, //11397 #HANGUL SYLLABLE HIEUH OE RIEULTHIEUTH + {0xC394, 0xD69A}, //11398 #HANGUL SYLLABLE HIEUH OE RIEULPHIEUPH + {0xC395, 0xD69B}, //11399 #HANGUL SYLLABLE HIEUH OE RIEULHIEUH + {0xC396, 0xD69C}, //11400 #HANGUL SYLLABLE HIEUH OE MIEUM + {0xC397, 0xD69E}, //11401 #HANGUL SYLLABLE HIEUH OE PIEUPSIOS + {0xC398, 0xD6A0}, //11402 #HANGUL SYLLABLE HIEUH OE SSANGSIOS + {0xC399, 0xD6A2}, //11403 #HANGUL SYLLABLE HIEUH OE CIEUC + {0xC39A, 0xD6A3}, //11404 #HANGUL SYLLABLE HIEUH OE CHIEUCH + {0xC39B, 0xD6A4}, //11405 #HANGUL SYLLABLE HIEUH OE KHIEUKH + {0xC39C, 0xD6A5}, //11406 #HANGUL SYLLABLE HIEUH OE THIEUTH + {0xC39D, 0xD6A6}, //11407 #HANGUL SYLLABLE HIEUH OE PHIEUPH + {0xC39E, 0xD6A7}, //11408 #HANGUL SYLLABLE HIEUH OE HIEUH + {0xC39F, 0xD6A9}, //11409 #HANGUL SYLLABLE HIEUH YO KIYEOK + {0xC3A0, 0xD6AA}, //11410 #HANGUL SYLLABLE HIEUH YO SSANGKIYEOK + {0xC3A1, 0xCC3C}, //11411 #HANGUL SYLLABLE CHIEUCH A SSANGSIOS + {0xC3A2, 0xCC3D}, //11412 #HANGUL SYLLABLE CHIEUCH A IEUNG + {0xC3A3, 0xCC3E}, //11413 #HANGUL SYLLABLE CHIEUCH A CIEUC + {0xC3A4, 0xCC44}, //11414 #HANGUL SYLLABLE CHIEUCH AE + {0xC3A5, 0xCC45}, //11415 #HANGUL SYLLABLE CHIEUCH AE KIYEOK + {0xC3A6, 0xCC48}, //11416 #HANGUL SYLLABLE CHIEUCH AE NIEUN + {0xC3A7, 0xCC4C}, //11417 #HANGUL SYLLABLE CHIEUCH AE RIEUL + {0xC3A8, 0xCC54}, //11418 #HANGUL SYLLABLE CHIEUCH AE MIEUM + {0xC3A9, 0xCC55}, //11419 #HANGUL SYLLABLE CHIEUCH AE PIEUP + {0xC3AA, 0xCC57}, //11420 #HANGUL SYLLABLE CHIEUCH AE SIOS + {0xC3AB, 0xCC58}, //11421 #HANGUL SYLLABLE CHIEUCH AE SSANGSIOS + {0xC3AC, 0xCC59}, //11422 #HANGUL SYLLABLE CHIEUCH AE IEUNG + {0xC3AD, 0xCC60}, //11423 #HANGUL SYLLABLE CHIEUCH YA + {0xC3AE, 0xCC64}, //11424 #HANGUL SYLLABLE CHIEUCH YA NIEUN + {0xC3AF, 0xCC66}, //11425 #HANGUL SYLLABLE CHIEUCH YA NIEUNHIEUH + {0xC3B0, 0xCC68}, //11426 #HANGUL SYLLABLE CHIEUCH YA RIEUL + {0xC3B1, 0xCC70}, //11427 #HANGUL SYLLABLE CHIEUCH YA MIEUM + {0xC3B2, 0xCC75}, //11428 #HANGUL SYLLABLE CHIEUCH YA IEUNG + {0xC3B3, 0xCC98}, //11429 #HANGUL SYLLABLE CHIEUCH EO + {0xC3B4, 0xCC99}, //11430 #HANGUL SYLLABLE CHIEUCH EO KIYEOK + {0xC3B5, 0xCC9C}, //11431 #HANGUL SYLLABLE CHIEUCH EO NIEUN + {0xC3B6, 0xCCA0}, //11432 #HANGUL SYLLABLE CHIEUCH EO RIEUL + {0xC3B7, 0xCCA8}, //11433 #HANGUL SYLLABLE CHIEUCH EO MIEUM + {0xC3B8, 0xCCA9}, //11434 #HANGUL SYLLABLE CHIEUCH EO PIEUP + {0xC3B9, 0xCCAB}, //11435 #HANGUL SYLLABLE CHIEUCH EO SIOS + {0xC3BA, 0xCCAC}, //11436 #HANGUL SYLLABLE CHIEUCH EO SSANGSIOS + {0xC3BB, 0xCCAD}, //11437 #HANGUL SYLLABLE CHIEUCH EO IEUNG + {0xC3BC, 0xCCB4}, //11438 #HANGUL SYLLABLE CHIEUCH E + {0xC3BD, 0xCCB5}, //11439 #HANGUL SYLLABLE CHIEUCH E KIYEOK + {0xC3BE, 0xCCB8}, //11440 #HANGUL SYLLABLE CHIEUCH E NIEUN + {0xC3BF, 0xCCBC}, //11441 #HANGUL SYLLABLE CHIEUCH E RIEUL + {0xC3C0, 0xCCC4}, //11442 #HANGUL SYLLABLE CHIEUCH E MIEUM + {0xC3C1, 0xCCC5}, //11443 #HANGUL SYLLABLE CHIEUCH E PIEUP + {0xC3C2, 0xCCC7}, //11444 #HANGUL SYLLABLE CHIEUCH E SIOS + {0xC3C3, 0xCCC9}, //11445 #HANGUL SYLLABLE CHIEUCH E IEUNG + {0xC3C4, 0xCCD0}, //11446 #HANGUL SYLLABLE CHIEUCH YEO + {0xC3C5, 0xCCD4}, //11447 #HANGUL SYLLABLE CHIEUCH YEO NIEUN + {0xC3C6, 0xCCE4}, //11448 #HANGUL SYLLABLE CHIEUCH YEO SSANGSIOS + {0xC3C7, 0xCCEC}, //11449 #HANGUL SYLLABLE CHIEUCH YE + {0xC3C8, 0xCCF0}, //11450 #HANGUL SYLLABLE CHIEUCH YE NIEUN + {0xC3C9, 0xCD01}, //11451 #HANGUL SYLLABLE CHIEUCH YE IEUNG + {0xC3CA, 0xCD08}, //11452 #HANGUL SYLLABLE CHIEUCH O + {0xC3CB, 0xCD09}, //11453 #HANGUL SYLLABLE CHIEUCH O KIYEOK + {0xC3CC, 0xCD0C}, //11454 #HANGUL SYLLABLE CHIEUCH O NIEUN + {0xC3CD, 0xCD10}, //11455 #HANGUL SYLLABLE CHIEUCH O RIEUL + {0xC3CE, 0xCD18}, //11456 #HANGUL SYLLABLE CHIEUCH O MIEUM + {0xC3CF, 0xCD19}, //11457 #HANGUL SYLLABLE CHIEUCH O PIEUP + {0xC3D0, 0xCD1B}, //11458 #HANGUL SYLLABLE CHIEUCH O SIOS + {0xC3D1, 0xCD1D}, //11459 #HANGUL SYLLABLE CHIEUCH O IEUNG + {0xC3D2, 0xCD24}, //11460 #HANGUL SYLLABLE CHIEUCH WA + {0xC3D3, 0xCD28}, //11461 #HANGUL SYLLABLE CHIEUCH WA NIEUN + {0xC3D4, 0xCD2C}, //11462 #HANGUL SYLLABLE CHIEUCH WA RIEUL + {0xC3D5, 0xCD39}, //11463 #HANGUL SYLLABLE CHIEUCH WA IEUNG + {0xC3D6, 0xCD5C}, //11464 #HANGUL SYLLABLE CHIEUCH OE + {0xC3D7, 0xCD60}, //11465 #HANGUL SYLLABLE CHIEUCH OE NIEUN + {0xC3D8, 0xCD64}, //11466 #HANGUL SYLLABLE CHIEUCH OE RIEUL + {0xC3D9, 0xCD6C}, //11467 #HANGUL SYLLABLE CHIEUCH OE MIEUM + {0xC3DA, 0xCD6D}, //11468 #HANGUL SYLLABLE CHIEUCH OE PIEUP + {0xC3DB, 0xCD6F}, //11469 #HANGUL SYLLABLE CHIEUCH OE SIOS + {0xC3DC, 0xCD71}, //11470 #HANGUL SYLLABLE CHIEUCH OE IEUNG + {0xC3DD, 0xCD78}, //11471 #HANGUL SYLLABLE CHIEUCH YO + {0xC3DE, 0xCD88}, //11472 #HANGUL SYLLABLE CHIEUCH YO MIEUM + {0xC3DF, 0xCD94}, //11473 #HANGUL SYLLABLE CHIEUCH U + {0xC3E0, 0xCD95}, //11474 #HANGUL SYLLABLE CHIEUCH U KIYEOK + {0xC3E1, 0xCD98}, //11475 #HANGUL SYLLABLE CHIEUCH U NIEUN + {0xC3E2, 0xCD9C}, //11476 #HANGUL SYLLABLE CHIEUCH U RIEUL + {0xC3E3, 0xCDA4}, //11477 #HANGUL SYLLABLE CHIEUCH U MIEUM + {0xC3E4, 0xCDA5}, //11478 #HANGUL SYLLABLE CHIEUCH U PIEUP + {0xC3E5, 0xCDA7}, //11479 #HANGUL SYLLABLE CHIEUCH U SIOS + {0xC3E6, 0xCDA9}, //11480 #HANGUL SYLLABLE CHIEUCH U IEUNG + {0xC3E7, 0xCDB0}, //11481 #HANGUL SYLLABLE CHIEUCH WEO + {0xC3E8, 0xCDC4}, //11482 #HANGUL SYLLABLE CHIEUCH WEO SSANGSIOS + {0xC3E9, 0xCDCC}, //11483 #HANGUL SYLLABLE CHIEUCH WE + {0xC3EA, 0xCDD0}, //11484 #HANGUL SYLLABLE CHIEUCH WE NIEUN + {0xC3EB, 0xCDE8}, //11485 #HANGUL SYLLABLE CHIEUCH WI + {0xC3EC, 0xCDEC}, //11486 #HANGUL SYLLABLE CHIEUCH WI NIEUN + {0xC3ED, 0xCDF0}, //11487 #HANGUL SYLLABLE CHIEUCH WI RIEUL + {0xC3EE, 0xCDF8}, //11488 #HANGUL SYLLABLE CHIEUCH WI MIEUM + {0xC3EF, 0xCDF9}, //11489 #HANGUL SYLLABLE CHIEUCH WI PIEUP + {0xC3F0, 0xCDFB}, //11490 #HANGUL SYLLABLE CHIEUCH WI SIOS + {0xC3F1, 0xCDFD}, //11491 #HANGUL SYLLABLE CHIEUCH WI IEUNG + {0xC3F2, 0xCE04}, //11492 #HANGUL SYLLABLE CHIEUCH YU + {0xC3F3, 0xCE08}, //11493 #HANGUL SYLLABLE CHIEUCH YU NIEUN + {0xC3F4, 0xCE0C}, //11494 #HANGUL SYLLABLE CHIEUCH YU RIEUL + {0xC3F5, 0xCE14}, //11495 #HANGUL SYLLABLE CHIEUCH YU MIEUM + {0xC3F6, 0xCE19}, //11496 #HANGUL SYLLABLE CHIEUCH YU IEUNG + {0xC3F7, 0xCE20}, //11497 #HANGUL SYLLABLE CHIEUCH EU + {0xC3F8, 0xCE21}, //11498 #HANGUL SYLLABLE CHIEUCH EU KIYEOK + {0xC3F9, 0xCE24}, //11499 #HANGUL SYLLABLE CHIEUCH EU NIEUN + {0xC3FA, 0xCE28}, //11500 #HANGUL SYLLABLE CHIEUCH EU RIEUL + {0xC3FB, 0xCE30}, //11501 #HANGUL SYLLABLE CHIEUCH EU MIEUM + {0xC3FC, 0xCE31}, //11502 #HANGUL SYLLABLE CHIEUCH EU PIEUP + {0xC3FD, 0xCE33}, //11503 #HANGUL SYLLABLE CHIEUCH EU SIOS + {0xC3FE, 0xCE35}, //11504 #HANGUL SYLLABLE CHIEUCH EU IEUNG + {0xC441, 0xD6AB}, //11505 #HANGUL SYLLABLE HIEUH YO KIYEOKSIOS + {0xC442, 0xD6AD}, //11506 #HANGUL SYLLABLE HIEUH YO NIEUNCIEUC + {0xC443, 0xD6AE}, //11507 #HANGUL SYLLABLE HIEUH YO NIEUNHIEUH + {0xC444, 0xD6AF}, //11508 #HANGUL SYLLABLE HIEUH YO TIKEUT + {0xC445, 0xD6B1}, //11509 #HANGUL SYLLABLE HIEUH YO RIEULKIYEOK + {0xC446, 0xD6B2}, //11510 #HANGUL SYLLABLE HIEUH YO RIEULMIEUM + {0xC447, 0xD6B3}, //11511 #HANGUL SYLLABLE HIEUH YO RIEULPIEUP + {0xC448, 0xD6B4}, //11512 #HANGUL SYLLABLE HIEUH YO RIEULSIOS + {0xC449, 0xD6B5}, //11513 #HANGUL SYLLABLE HIEUH YO RIEULTHIEUTH + {0xC44A, 0xD6B6}, //11514 #HANGUL SYLLABLE HIEUH YO RIEULPHIEUPH + {0xC44B, 0xD6B7}, //11515 #HANGUL SYLLABLE HIEUH YO RIEULHIEUH + {0xC44C, 0xD6B8}, //11516 #HANGUL SYLLABLE HIEUH YO MIEUM + {0xC44D, 0xD6BA}, //11517 #HANGUL SYLLABLE HIEUH YO PIEUPSIOS + {0xC44E, 0xD6BC}, //11518 #HANGUL SYLLABLE HIEUH YO SSANGSIOS + {0xC44F, 0xD6BD}, //11519 #HANGUL SYLLABLE HIEUH YO IEUNG + {0xC450, 0xD6BE}, //11520 #HANGUL SYLLABLE HIEUH YO CIEUC + {0xC451, 0xD6BF}, //11521 #HANGUL SYLLABLE HIEUH YO CHIEUCH + {0xC452, 0xD6C0}, //11522 #HANGUL SYLLABLE HIEUH YO KHIEUKH + {0xC453, 0xD6C1}, //11523 #HANGUL SYLLABLE HIEUH YO THIEUTH + {0xC454, 0xD6C2}, //11524 #HANGUL SYLLABLE HIEUH YO PHIEUPH + {0xC455, 0xD6C3}, //11525 #HANGUL SYLLABLE HIEUH YO HIEUH + {0xC456, 0xD6C6}, //11526 #HANGUL SYLLABLE HIEUH U SSANGKIYEOK + {0xC457, 0xD6C7}, //11527 #HANGUL SYLLABLE HIEUH U KIYEOKSIOS + {0xC458, 0xD6C9}, //11528 #HANGUL SYLLABLE HIEUH U NIEUNCIEUC + {0xC459, 0xD6CA}, //11529 #HANGUL SYLLABLE HIEUH U NIEUNHIEUH + {0xC45A, 0xD6CB}, //11530 #HANGUL SYLLABLE HIEUH U TIKEUT + {0xC461, 0xD6CD}, //11531 #HANGUL SYLLABLE HIEUH U RIEULKIYEOK + {0xC462, 0xD6CE}, //11532 #HANGUL SYLLABLE HIEUH U RIEULMIEUM + {0xC463, 0xD6CF}, //11533 #HANGUL SYLLABLE HIEUH U RIEULPIEUP + {0xC464, 0xD6D0}, //11534 #HANGUL SYLLABLE HIEUH U RIEULSIOS + {0xC465, 0xD6D2}, //11535 #HANGUL SYLLABLE HIEUH U RIEULPHIEUPH + {0xC466, 0xD6D3}, //11536 #HANGUL SYLLABLE HIEUH U RIEULHIEUH + {0xC467, 0xD6D5}, //11537 #HANGUL SYLLABLE HIEUH U PIEUP + {0xC468, 0xD6D6}, //11538 #HANGUL SYLLABLE HIEUH U PIEUPSIOS + {0xC469, 0xD6D8}, //11539 #HANGUL SYLLABLE HIEUH U SSANGSIOS + {0xC46A, 0xD6DA}, //11540 #HANGUL SYLLABLE HIEUH U CIEUC + {0xC46B, 0xD6DB}, //11541 #HANGUL SYLLABLE HIEUH U CHIEUCH + {0xC46C, 0xD6DC}, //11542 #HANGUL SYLLABLE HIEUH U KHIEUKH + {0xC46D, 0xD6DD}, //11543 #HANGUL SYLLABLE HIEUH U THIEUTH + {0xC46E, 0xD6DE}, //11544 #HANGUL SYLLABLE HIEUH U PHIEUPH + {0xC46F, 0xD6DF}, //11545 #HANGUL SYLLABLE HIEUH U HIEUH + {0xC470, 0xD6E1}, //11546 #HANGUL SYLLABLE HIEUH WEO KIYEOK + {0xC471, 0xD6E2}, //11547 #HANGUL SYLLABLE HIEUH WEO SSANGKIYEOK + {0xC472, 0xD6E3}, //11548 #HANGUL SYLLABLE HIEUH WEO KIYEOKSIOS + {0xC473, 0xD6E5}, //11549 #HANGUL SYLLABLE HIEUH WEO NIEUNCIEUC + {0xC474, 0xD6E6}, //11550 #HANGUL SYLLABLE HIEUH WEO NIEUNHIEUH + {0xC475, 0xD6E7}, //11551 #HANGUL SYLLABLE HIEUH WEO TIKEUT + {0xC476, 0xD6E9}, //11552 #HANGUL SYLLABLE HIEUH WEO RIEULKIYEOK + {0xC477, 0xD6EA}, //11553 #HANGUL SYLLABLE HIEUH WEO RIEULMIEUM + {0xC478, 0xD6EB}, //11554 #HANGUL SYLLABLE HIEUH WEO RIEULPIEUP + {0xC479, 0xD6EC}, //11555 #HANGUL SYLLABLE HIEUH WEO RIEULSIOS + {0xC47A, 0xD6ED}, //11556 #HANGUL SYLLABLE HIEUH WEO RIEULTHIEUTH + {0xC481, 0xD6EE}, //11557 #HANGUL SYLLABLE HIEUH WEO RIEULPHIEUPH + {0xC482, 0xD6EF}, //11558 #HANGUL SYLLABLE HIEUH WEO RIEULHIEUH + {0xC483, 0xD6F1}, //11559 #HANGUL SYLLABLE HIEUH WEO PIEUP + {0xC484, 0xD6F2}, //11560 #HANGUL SYLLABLE HIEUH WEO PIEUPSIOS + {0xC485, 0xD6F3}, //11561 #HANGUL SYLLABLE HIEUH WEO SIOS + {0xC486, 0xD6F4}, //11562 #HANGUL SYLLABLE HIEUH WEO SSANGSIOS + {0xC487, 0xD6F6}, //11563 #HANGUL SYLLABLE HIEUH WEO CIEUC + {0xC488, 0xD6F7}, //11564 #HANGUL SYLLABLE HIEUH WEO CHIEUCH + {0xC489, 0xD6F8}, //11565 #HANGUL SYLLABLE HIEUH WEO KHIEUKH + {0xC48A, 0xD6F9}, //11566 #HANGUL SYLLABLE HIEUH WEO THIEUTH + {0xC48B, 0xD6FA}, //11567 #HANGUL SYLLABLE HIEUH WEO PHIEUPH + {0xC48C, 0xD6FB}, //11568 #HANGUL SYLLABLE HIEUH WEO HIEUH + {0xC48D, 0xD6FE}, //11569 #HANGUL SYLLABLE HIEUH WE SSANGKIYEOK + {0xC48E, 0xD6FF}, //11570 #HANGUL SYLLABLE HIEUH WE KIYEOKSIOS + {0xC48F, 0xD701}, //11571 #HANGUL SYLLABLE HIEUH WE NIEUNCIEUC + {0xC490, 0xD702}, //11572 #HANGUL SYLLABLE HIEUH WE NIEUNHIEUH + {0xC491, 0xD703}, //11573 #HANGUL SYLLABLE HIEUH WE TIKEUT + {0xC492, 0xD705}, //11574 #HANGUL SYLLABLE HIEUH WE RIEULKIYEOK + {0xC493, 0xD706}, //11575 #HANGUL SYLLABLE HIEUH WE RIEULMIEUM + {0xC494, 0xD707}, //11576 #HANGUL SYLLABLE HIEUH WE RIEULPIEUP + {0xC495, 0xD708}, //11577 #HANGUL SYLLABLE HIEUH WE RIEULSIOS + {0xC496, 0xD709}, //11578 #HANGUL SYLLABLE HIEUH WE RIEULTHIEUTH + {0xC497, 0xD70A}, //11579 #HANGUL SYLLABLE HIEUH WE RIEULPHIEUPH + {0xC498, 0xD70B}, //11580 #HANGUL SYLLABLE HIEUH WE RIEULHIEUH + {0xC499, 0xD70C}, //11581 #HANGUL SYLLABLE HIEUH WE MIEUM + {0xC49A, 0xD70D}, //11582 #HANGUL SYLLABLE HIEUH WE PIEUP + {0xC49B, 0xD70E}, //11583 #HANGUL SYLLABLE HIEUH WE PIEUPSIOS + {0xC49C, 0xD70F}, //11584 #HANGUL SYLLABLE HIEUH WE SIOS + {0xC49D, 0xD710}, //11585 #HANGUL SYLLABLE HIEUH WE SSANGSIOS + {0xC49E, 0xD712}, //11586 #HANGUL SYLLABLE HIEUH WE CIEUC + {0xC49F, 0xD713}, //11587 #HANGUL SYLLABLE HIEUH WE CHIEUCH + {0xC4A0, 0xD714}, //11588 #HANGUL SYLLABLE HIEUH WE KHIEUKH + {0xC4A1, 0xCE58}, //11589 #HANGUL SYLLABLE CHIEUCH I + {0xC4A2, 0xCE59}, //11590 #HANGUL SYLLABLE CHIEUCH I KIYEOK + {0xC4A3, 0xCE5C}, //11591 #HANGUL SYLLABLE CHIEUCH I NIEUN + {0xC4A4, 0xCE5F}, //11592 #HANGUL SYLLABLE CHIEUCH I TIKEUT + {0xC4A5, 0xCE60}, //11593 #HANGUL SYLLABLE CHIEUCH I RIEUL + {0xC4A6, 0xCE61}, //11594 #HANGUL SYLLABLE CHIEUCH I RIEULKIYEOK + {0xC4A7, 0xCE68}, //11595 #HANGUL SYLLABLE CHIEUCH I MIEUM + {0xC4A8, 0xCE69}, //11596 #HANGUL SYLLABLE CHIEUCH I PIEUP + {0xC4A9, 0xCE6B}, //11597 #HANGUL SYLLABLE CHIEUCH I SIOS + {0xC4AA, 0xCE6D}, //11598 #HANGUL SYLLABLE CHIEUCH I IEUNG + {0xC4AB, 0xCE74}, //11599 #HANGUL SYLLABLE KHIEUKH A + {0xC4AC, 0xCE75}, //11600 #HANGUL SYLLABLE KHIEUKH A KIYEOK + {0xC4AD, 0xCE78}, //11601 #HANGUL SYLLABLE KHIEUKH A NIEUN + {0xC4AE, 0xCE7C}, //11602 #HANGUL SYLLABLE KHIEUKH A RIEUL + {0xC4AF, 0xCE84}, //11603 #HANGUL SYLLABLE KHIEUKH A MIEUM + {0xC4B0, 0xCE85}, //11604 #HANGUL SYLLABLE KHIEUKH A PIEUP + {0xC4B1, 0xCE87}, //11605 #HANGUL SYLLABLE KHIEUKH A SIOS + {0xC4B2, 0xCE89}, //11606 #HANGUL SYLLABLE KHIEUKH A IEUNG + {0xC4B3, 0xCE90}, //11607 #HANGUL SYLLABLE KHIEUKH AE + {0xC4B4, 0xCE91}, //11608 #HANGUL SYLLABLE KHIEUKH AE KIYEOK + {0xC4B5, 0xCE94}, //11609 #HANGUL SYLLABLE KHIEUKH AE NIEUN + {0xC4B6, 0xCE98}, //11610 #HANGUL SYLLABLE KHIEUKH AE RIEUL + {0xC4B7, 0xCEA0}, //11611 #HANGUL SYLLABLE KHIEUKH AE MIEUM + {0xC4B8, 0xCEA1}, //11612 #HANGUL SYLLABLE KHIEUKH AE PIEUP + {0xC4B9, 0xCEA3}, //11613 #HANGUL SYLLABLE KHIEUKH AE SIOS + {0xC4BA, 0xCEA4}, //11614 #HANGUL SYLLABLE KHIEUKH AE SSANGSIOS + {0xC4BB, 0xCEA5}, //11615 #HANGUL SYLLABLE KHIEUKH AE IEUNG + {0xC4BC, 0xCEAC}, //11616 #HANGUL SYLLABLE KHIEUKH YA + {0xC4BD, 0xCEAD}, //11617 #HANGUL SYLLABLE KHIEUKH YA KIYEOK + {0xC4BE, 0xCEC1}, //11618 #HANGUL SYLLABLE KHIEUKH YA IEUNG + {0xC4BF, 0xCEE4}, //11619 #HANGUL SYLLABLE KHIEUKH EO + {0xC4C0, 0xCEE5}, //11620 #HANGUL SYLLABLE KHIEUKH EO KIYEOK + {0xC4C1, 0xCEE8}, //11621 #HANGUL SYLLABLE KHIEUKH EO NIEUN + {0xC4C2, 0xCEEB}, //11622 #HANGUL SYLLABLE KHIEUKH EO TIKEUT + {0xC4C3, 0xCEEC}, //11623 #HANGUL SYLLABLE KHIEUKH EO RIEUL + {0xC4C4, 0xCEF4}, //11624 #HANGUL SYLLABLE KHIEUKH EO MIEUM + {0xC4C5, 0xCEF5}, //11625 #HANGUL SYLLABLE KHIEUKH EO PIEUP + {0xC4C6, 0xCEF7}, //11626 #HANGUL SYLLABLE KHIEUKH EO SIOS + {0xC4C7, 0xCEF8}, //11627 #HANGUL SYLLABLE KHIEUKH EO SSANGSIOS + {0xC4C8, 0xCEF9}, //11628 #HANGUL SYLLABLE KHIEUKH EO IEUNG + {0xC4C9, 0xCF00}, //11629 #HANGUL SYLLABLE KHIEUKH E + {0xC4CA, 0xCF01}, //11630 #HANGUL SYLLABLE KHIEUKH E KIYEOK + {0xC4CB, 0xCF04}, //11631 #HANGUL SYLLABLE KHIEUKH E NIEUN + {0xC4CC, 0xCF08}, //11632 #HANGUL SYLLABLE KHIEUKH E RIEUL + {0xC4CD, 0xCF10}, //11633 #HANGUL SYLLABLE KHIEUKH E MIEUM + {0xC4CE, 0xCF11}, //11634 #HANGUL SYLLABLE KHIEUKH E PIEUP + {0xC4CF, 0xCF13}, //11635 #HANGUL SYLLABLE KHIEUKH E SIOS + {0xC4D0, 0xCF15}, //11636 #HANGUL SYLLABLE KHIEUKH E IEUNG + {0xC4D1, 0xCF1C}, //11637 #HANGUL SYLLABLE KHIEUKH YEO + {0xC4D2, 0xCF20}, //11638 #HANGUL SYLLABLE KHIEUKH YEO NIEUN + {0xC4D3, 0xCF24}, //11639 #HANGUL SYLLABLE KHIEUKH YEO RIEUL + {0xC4D4, 0xCF2C}, //11640 #HANGUL SYLLABLE KHIEUKH YEO MIEUM + {0xC4D5, 0xCF2D}, //11641 #HANGUL SYLLABLE KHIEUKH YEO PIEUP + {0xC4D6, 0xCF2F}, //11642 #HANGUL SYLLABLE KHIEUKH YEO SIOS + {0xC4D7, 0xCF30}, //11643 #HANGUL SYLLABLE KHIEUKH YEO SSANGSIOS + {0xC4D8, 0xCF31}, //11644 #HANGUL SYLLABLE KHIEUKH YEO IEUNG + {0xC4D9, 0xCF38}, //11645 #HANGUL SYLLABLE KHIEUKH YE + {0xC4DA, 0xCF54}, //11646 #HANGUL SYLLABLE KHIEUKH O + {0xC4DB, 0xCF55}, //11647 #HANGUL SYLLABLE KHIEUKH O KIYEOK + {0xC4DC, 0xCF58}, //11648 #HANGUL SYLLABLE KHIEUKH O NIEUN + {0xC4DD, 0xCF5C}, //11649 #HANGUL SYLLABLE KHIEUKH O RIEUL + {0xC4DE, 0xCF64}, //11650 #HANGUL SYLLABLE KHIEUKH O MIEUM + {0xC4DF, 0xCF65}, //11651 #HANGUL SYLLABLE KHIEUKH O PIEUP + {0xC4E0, 0xCF67}, //11652 #HANGUL SYLLABLE KHIEUKH O SIOS + {0xC4E1, 0xCF69}, //11653 #HANGUL SYLLABLE KHIEUKH O IEUNG + {0xC4E2, 0xCF70}, //11654 #HANGUL SYLLABLE KHIEUKH WA + {0xC4E3, 0xCF71}, //11655 #HANGUL SYLLABLE KHIEUKH WA KIYEOK + {0xC4E4, 0xCF74}, //11656 #HANGUL SYLLABLE KHIEUKH WA NIEUN + {0xC4E5, 0xCF78}, //11657 #HANGUL SYLLABLE KHIEUKH WA RIEUL + {0xC4E6, 0xCF80}, //11658 #HANGUL SYLLABLE KHIEUKH WA MIEUM + {0xC4E7, 0xCF85}, //11659 #HANGUL SYLLABLE KHIEUKH WA IEUNG + {0xC4E8, 0xCF8C}, //11660 #HANGUL SYLLABLE KHIEUKH WAE + {0xC4E9, 0xCFA1}, //11661 #HANGUL SYLLABLE KHIEUKH WAE IEUNG + {0xC4EA, 0xCFA8}, //11662 #HANGUL SYLLABLE KHIEUKH OE + {0xC4EB, 0xCFB0}, //11663 #HANGUL SYLLABLE KHIEUKH OE RIEUL + {0xC4EC, 0xCFC4}, //11664 #HANGUL SYLLABLE KHIEUKH YO + {0xC4ED, 0xCFE0}, //11665 #HANGUL SYLLABLE KHIEUKH U + {0xC4EE, 0xCFE1}, //11666 #HANGUL SYLLABLE KHIEUKH U KIYEOK + {0xC4EF, 0xCFE4}, //11667 #HANGUL SYLLABLE KHIEUKH U NIEUN + {0xC4F0, 0xCFE8}, //11668 #HANGUL SYLLABLE KHIEUKH U RIEUL + {0xC4F1, 0xCFF0}, //11669 #HANGUL SYLLABLE KHIEUKH U MIEUM + {0xC4F2, 0xCFF1}, //11670 #HANGUL SYLLABLE KHIEUKH U PIEUP + {0xC4F3, 0xCFF3}, //11671 #HANGUL SYLLABLE KHIEUKH U SIOS + {0xC4F4, 0xCFF5}, //11672 #HANGUL SYLLABLE KHIEUKH U IEUNG + {0xC4F5, 0xCFFC}, //11673 #HANGUL SYLLABLE KHIEUKH WEO + {0xC4F6, 0xD000}, //11674 #HANGUL SYLLABLE KHIEUKH WEO NIEUN + {0xC4F7, 0xD004}, //11675 #HANGUL SYLLABLE KHIEUKH WEO RIEUL + {0xC4F8, 0xD011}, //11676 #HANGUL SYLLABLE KHIEUKH WEO IEUNG + {0xC4F9, 0xD018}, //11677 #HANGUL SYLLABLE KHIEUKH WE + {0xC4FA, 0xD02D}, //11678 #HANGUL SYLLABLE KHIEUKH WE IEUNG + {0xC4FB, 0xD034}, //11679 #HANGUL SYLLABLE KHIEUKH WI + {0xC4FC, 0xD035}, //11680 #HANGUL SYLLABLE KHIEUKH WI KIYEOK + {0xC4FD, 0xD038}, //11681 #HANGUL SYLLABLE KHIEUKH WI NIEUN + {0xC4FE, 0xD03C}, //11682 #HANGUL SYLLABLE KHIEUKH WI RIEUL + {0xC541, 0xD715}, //11683 #HANGUL SYLLABLE HIEUH WE THIEUTH + {0xC542, 0xD716}, //11684 #HANGUL SYLLABLE HIEUH WE PHIEUPH + {0xC543, 0xD717}, //11685 #HANGUL SYLLABLE HIEUH WE HIEUH + {0xC544, 0xD71A}, //11686 #HANGUL SYLLABLE HIEUH WI SSANGKIYEOK + {0xC545, 0xD71B}, //11687 #HANGUL SYLLABLE HIEUH WI KIYEOKSIOS + {0xC546, 0xD71D}, //11688 #HANGUL SYLLABLE HIEUH WI NIEUNCIEUC + {0xC547, 0xD71E}, //11689 #HANGUL SYLLABLE HIEUH WI NIEUNHIEUH + {0xC548, 0xD71F}, //11690 #HANGUL SYLLABLE HIEUH WI TIKEUT + {0xC549, 0xD721}, //11691 #HANGUL SYLLABLE HIEUH WI RIEULKIYEOK + {0xC54A, 0xD722}, //11692 #HANGUL SYLLABLE HIEUH WI RIEULMIEUM + {0xC54B, 0xD723}, //11693 #HANGUL SYLLABLE HIEUH WI RIEULPIEUP + {0xC54C, 0xD724}, //11694 #HANGUL SYLLABLE HIEUH WI RIEULSIOS + {0xC54D, 0xD725}, //11695 #HANGUL SYLLABLE HIEUH WI RIEULTHIEUTH + {0xC54E, 0xD726}, //11696 #HANGUL SYLLABLE HIEUH WI RIEULPHIEUPH + {0xC54F, 0xD727}, //11697 #HANGUL SYLLABLE HIEUH WI RIEULHIEUH + {0xC550, 0xD72A}, //11698 #HANGUL SYLLABLE HIEUH WI PIEUPSIOS + {0xC551, 0xD72C}, //11699 #HANGUL SYLLABLE HIEUH WI SSANGSIOS + {0xC552, 0xD72E}, //11700 #HANGUL SYLLABLE HIEUH WI CIEUC + {0xC553, 0xD72F}, //11701 #HANGUL SYLLABLE HIEUH WI CHIEUCH + {0xC554, 0xD730}, //11702 #HANGUL SYLLABLE HIEUH WI KHIEUKH + {0xC555, 0xD731}, //11703 #HANGUL SYLLABLE HIEUH WI THIEUTH + {0xC556, 0xD732}, //11704 #HANGUL SYLLABLE HIEUH WI PHIEUPH + {0xC557, 0xD733}, //11705 #HANGUL SYLLABLE HIEUH WI HIEUH + {0xC558, 0xD736}, //11706 #HANGUL SYLLABLE HIEUH YU SSANGKIYEOK + {0xC559, 0xD737}, //11707 #HANGUL SYLLABLE HIEUH YU KIYEOKSIOS + {0xC55A, 0xD739}, //11708 #HANGUL SYLLABLE HIEUH YU NIEUNCIEUC + {0xC561, 0xD73A}, //11709 #HANGUL SYLLABLE HIEUH YU NIEUNHIEUH + {0xC562, 0xD73B}, //11710 #HANGUL SYLLABLE HIEUH YU TIKEUT + {0xC563, 0xD73D}, //11711 #HANGUL SYLLABLE HIEUH YU RIEULKIYEOK + {0xC564, 0xD73E}, //11712 #HANGUL SYLLABLE HIEUH YU RIEULMIEUM + {0xC565, 0xD73F}, //11713 #HANGUL SYLLABLE HIEUH YU RIEULPIEUP + {0xC566, 0xD740}, //11714 #HANGUL SYLLABLE HIEUH YU RIEULSIOS + {0xC567, 0xD741}, //11715 #HANGUL SYLLABLE HIEUH YU RIEULTHIEUTH + {0xC568, 0xD742}, //11716 #HANGUL SYLLABLE HIEUH YU RIEULPHIEUPH + {0xC569, 0xD743}, //11717 #HANGUL SYLLABLE HIEUH YU RIEULHIEUH + {0xC56A, 0xD745}, //11718 #HANGUL SYLLABLE HIEUH YU PIEUP + {0xC56B, 0xD746}, //11719 #HANGUL SYLLABLE HIEUH YU PIEUPSIOS + {0xC56C, 0xD748}, //11720 #HANGUL SYLLABLE HIEUH YU SSANGSIOS + {0xC56D, 0xD74A}, //11721 #HANGUL SYLLABLE HIEUH YU CIEUC + {0xC56E, 0xD74B}, //11722 #HANGUL SYLLABLE HIEUH YU CHIEUCH + {0xC56F, 0xD74C}, //11723 #HANGUL SYLLABLE HIEUH YU KHIEUKH + {0xC570, 0xD74D}, //11724 #HANGUL SYLLABLE HIEUH YU THIEUTH + {0xC571, 0xD74E}, //11725 #HANGUL SYLLABLE HIEUH YU PHIEUPH + {0xC572, 0xD74F}, //11726 #HANGUL SYLLABLE HIEUH YU HIEUH + {0xC573, 0xD752}, //11727 #HANGUL SYLLABLE HIEUH EU SSANGKIYEOK + {0xC574, 0xD753}, //11728 #HANGUL SYLLABLE HIEUH EU KIYEOKSIOS + {0xC575, 0xD755}, //11729 #HANGUL SYLLABLE HIEUH EU NIEUNCIEUC + {0xC576, 0xD75A}, //11730 #HANGUL SYLLABLE HIEUH EU RIEULMIEUM + {0xC577, 0xD75B}, //11731 #HANGUL SYLLABLE HIEUH EU RIEULPIEUP + {0xC578, 0xD75C}, //11732 #HANGUL SYLLABLE HIEUH EU RIEULSIOS + {0xC579, 0xD75D}, //11733 #HANGUL SYLLABLE HIEUH EU RIEULTHIEUTH + {0xC57A, 0xD75E}, //11734 #HANGUL SYLLABLE HIEUH EU RIEULPHIEUPH + {0xC581, 0xD75F}, //11735 #HANGUL SYLLABLE HIEUH EU RIEULHIEUH + {0xC582, 0xD762}, //11736 #HANGUL SYLLABLE HIEUH EU PIEUPSIOS + {0xC583, 0xD764}, //11737 #HANGUL SYLLABLE HIEUH EU SSANGSIOS + {0xC584, 0xD766}, //11738 #HANGUL SYLLABLE HIEUH EU CIEUC + {0xC585, 0xD767}, //11739 #HANGUL SYLLABLE HIEUH EU CHIEUCH + {0xC586, 0xD768}, //11740 #HANGUL SYLLABLE HIEUH EU KHIEUKH + {0xC587, 0xD76A}, //11741 #HANGUL SYLLABLE HIEUH EU PHIEUPH + {0xC588, 0xD76B}, //11742 #HANGUL SYLLABLE HIEUH EU HIEUH + {0xC589, 0xD76D}, //11743 #HANGUL SYLLABLE HIEUH YI KIYEOK + {0xC58A, 0xD76E}, //11744 #HANGUL SYLLABLE HIEUH YI SSANGKIYEOK + {0xC58B, 0xD76F}, //11745 #HANGUL SYLLABLE HIEUH YI KIYEOKSIOS + {0xC58C, 0xD771}, //11746 #HANGUL SYLLABLE HIEUH YI NIEUNCIEUC + {0xC58D, 0xD772}, //11747 #HANGUL SYLLABLE HIEUH YI NIEUNHIEUH + {0xC58E, 0xD773}, //11748 #HANGUL SYLLABLE HIEUH YI TIKEUT + {0xC58F, 0xD775}, //11749 #HANGUL SYLLABLE HIEUH YI RIEULKIYEOK + {0xC590, 0xD776}, //11750 #HANGUL SYLLABLE HIEUH YI RIEULMIEUM + {0xC591, 0xD777}, //11751 #HANGUL SYLLABLE HIEUH YI RIEULPIEUP + {0xC592, 0xD778}, //11752 #HANGUL SYLLABLE HIEUH YI RIEULSIOS + {0xC593, 0xD779}, //11753 #HANGUL SYLLABLE HIEUH YI RIEULTHIEUTH + {0xC594, 0xD77A}, //11754 #HANGUL SYLLABLE HIEUH YI RIEULPHIEUPH + {0xC595, 0xD77B}, //11755 #HANGUL SYLLABLE HIEUH YI RIEULHIEUH + {0xC596, 0xD77E}, //11756 #HANGUL SYLLABLE HIEUH YI PIEUPSIOS + {0xC597, 0xD77F}, //11757 #HANGUL SYLLABLE HIEUH YI SIOS + {0xC598, 0xD780}, //11758 #HANGUL SYLLABLE HIEUH YI SSANGSIOS + {0xC599, 0xD782}, //11759 #HANGUL SYLLABLE HIEUH YI CIEUC + {0xC59A, 0xD783}, //11760 #HANGUL SYLLABLE HIEUH YI CHIEUCH + {0xC59B, 0xD784}, //11761 #HANGUL SYLLABLE HIEUH YI KHIEUKH + {0xC59C, 0xD785}, //11762 #HANGUL SYLLABLE HIEUH YI THIEUTH + {0xC59D, 0xD786}, //11763 #HANGUL SYLLABLE HIEUH YI PHIEUPH + {0xC59E, 0xD787}, //11764 #HANGUL SYLLABLE HIEUH YI HIEUH + {0xC59F, 0xD78A}, //11765 #HANGUL SYLLABLE HIEUH I SSANGKIYEOK + {0xC5A0, 0xD78B}, //11766 #HANGUL SYLLABLE HIEUH I KIYEOKSIOS + {0xC5A1, 0xD044}, //11767 #HANGUL SYLLABLE KHIEUKH WI MIEUM + {0xC5A2, 0xD045}, //11768 #HANGUL SYLLABLE KHIEUKH WI PIEUP + {0xC5A3, 0xD047}, //11769 #HANGUL SYLLABLE KHIEUKH WI SIOS + {0xC5A4, 0xD049}, //11770 #HANGUL SYLLABLE KHIEUKH WI IEUNG + {0xC5A5, 0xD050}, //11771 #HANGUL SYLLABLE KHIEUKH YU + {0xC5A6, 0xD054}, //11772 #HANGUL SYLLABLE KHIEUKH YU NIEUN + {0xC5A7, 0xD058}, //11773 #HANGUL SYLLABLE KHIEUKH YU RIEUL + {0xC5A8, 0xD060}, //11774 #HANGUL SYLLABLE KHIEUKH YU MIEUM + {0xC5A9, 0xD06C}, //11775 #HANGUL SYLLABLE KHIEUKH EU + {0xC5AA, 0xD06D}, //11776 #HANGUL SYLLABLE KHIEUKH EU KIYEOK + {0xC5AB, 0xD070}, //11777 #HANGUL SYLLABLE KHIEUKH EU NIEUN + {0xC5AC, 0xD074}, //11778 #HANGUL SYLLABLE KHIEUKH EU RIEUL + {0xC5AD, 0xD07C}, //11779 #HANGUL SYLLABLE KHIEUKH EU MIEUM + {0xC5AE, 0xD07D}, //11780 #HANGUL SYLLABLE KHIEUKH EU PIEUP + {0xC5AF, 0xD081}, //11781 #HANGUL SYLLABLE KHIEUKH EU IEUNG + {0xC5B0, 0xD0A4}, //11782 #HANGUL SYLLABLE KHIEUKH I + {0xC5B1, 0xD0A5}, //11783 #HANGUL SYLLABLE KHIEUKH I KIYEOK + {0xC5B2, 0xD0A8}, //11784 #HANGUL SYLLABLE KHIEUKH I NIEUN + {0xC5B3, 0xD0AC}, //11785 #HANGUL SYLLABLE KHIEUKH I RIEUL + {0xC5B4, 0xD0B4}, //11786 #HANGUL SYLLABLE KHIEUKH I MIEUM + {0xC5B5, 0xD0B5}, //11787 #HANGUL SYLLABLE KHIEUKH I PIEUP + {0xC5B6, 0xD0B7}, //11788 #HANGUL SYLLABLE KHIEUKH I SIOS + {0xC5B7, 0xD0B9}, //11789 #HANGUL SYLLABLE KHIEUKH I IEUNG + {0xC5B8, 0xD0C0}, //11790 #HANGUL SYLLABLE THIEUTH A + {0xC5B9, 0xD0C1}, //11791 #HANGUL SYLLABLE THIEUTH A KIYEOK + {0xC5BA, 0xD0C4}, //11792 #HANGUL SYLLABLE THIEUTH A NIEUN + {0xC5BB, 0xD0C8}, //11793 #HANGUL SYLLABLE THIEUTH A RIEUL + {0xC5BC, 0xD0C9}, //11794 #HANGUL SYLLABLE THIEUTH A RIEULKIYEOK + {0xC5BD, 0xD0D0}, //11795 #HANGUL SYLLABLE THIEUTH A MIEUM + {0xC5BE, 0xD0D1}, //11796 #HANGUL SYLLABLE THIEUTH A PIEUP + {0xC5BF, 0xD0D3}, //11797 #HANGUL SYLLABLE THIEUTH A SIOS + {0xC5C0, 0xD0D4}, //11798 #HANGUL SYLLABLE THIEUTH A SSANGSIOS + {0xC5C1, 0xD0D5}, //11799 #HANGUL SYLLABLE THIEUTH A IEUNG + {0xC5C2, 0xD0DC}, //11800 #HANGUL SYLLABLE THIEUTH AE + {0xC5C3, 0xD0DD}, //11801 #HANGUL SYLLABLE THIEUTH AE KIYEOK + {0xC5C4, 0xD0E0}, //11802 #HANGUL SYLLABLE THIEUTH AE NIEUN + {0xC5C5, 0xD0E4}, //11803 #HANGUL SYLLABLE THIEUTH AE RIEUL + {0xC5C6, 0xD0EC}, //11804 #HANGUL SYLLABLE THIEUTH AE MIEUM + {0xC5C7, 0xD0ED}, //11805 #HANGUL SYLLABLE THIEUTH AE PIEUP + {0xC5C8, 0xD0EF}, //11806 #HANGUL SYLLABLE THIEUTH AE SIOS + {0xC5C9, 0xD0F0}, //11807 #HANGUL SYLLABLE THIEUTH AE SSANGSIOS + {0xC5CA, 0xD0F1}, //11808 #HANGUL SYLLABLE THIEUTH AE IEUNG + {0xC5CB, 0xD0F8}, //11809 #HANGUL SYLLABLE THIEUTH YA + {0xC5CC, 0xD10D}, //11810 #HANGUL SYLLABLE THIEUTH YA IEUNG + {0xC5CD, 0xD130}, //11811 #HANGUL SYLLABLE THIEUTH EO + {0xC5CE, 0xD131}, //11812 #HANGUL SYLLABLE THIEUTH EO KIYEOK + {0xC5CF, 0xD134}, //11813 #HANGUL SYLLABLE THIEUTH EO NIEUN + {0xC5D0, 0xD138}, //11814 #HANGUL SYLLABLE THIEUTH EO RIEUL + {0xC5D1, 0xD13A}, //11815 #HANGUL SYLLABLE THIEUTH EO RIEULMIEUM + {0xC5D2, 0xD140}, //11816 #HANGUL SYLLABLE THIEUTH EO MIEUM + {0xC5D3, 0xD141}, //11817 #HANGUL SYLLABLE THIEUTH EO PIEUP + {0xC5D4, 0xD143}, //11818 #HANGUL SYLLABLE THIEUTH EO SIOS + {0xC5D5, 0xD144}, //11819 #HANGUL SYLLABLE THIEUTH EO SSANGSIOS + {0xC5D6, 0xD145}, //11820 #HANGUL SYLLABLE THIEUTH EO IEUNG + {0xC5D7, 0xD14C}, //11821 #HANGUL SYLLABLE THIEUTH E + {0xC5D8, 0xD14D}, //11822 #HANGUL SYLLABLE THIEUTH E KIYEOK + {0xC5D9, 0xD150}, //11823 #HANGUL SYLLABLE THIEUTH E NIEUN + {0xC5DA, 0xD154}, //11824 #HANGUL SYLLABLE THIEUTH E RIEUL + {0xC5DB, 0xD15C}, //11825 #HANGUL SYLLABLE THIEUTH E MIEUM + {0xC5DC, 0xD15D}, //11826 #HANGUL SYLLABLE THIEUTH E PIEUP + {0xC5DD, 0xD15F}, //11827 #HANGUL SYLLABLE THIEUTH E SIOS + {0xC5DE, 0xD161}, //11828 #HANGUL SYLLABLE THIEUTH E IEUNG + {0xC5DF, 0xD168}, //11829 #HANGUL SYLLABLE THIEUTH YEO + {0xC5E0, 0xD16C}, //11830 #HANGUL SYLLABLE THIEUTH YEO NIEUN + {0xC5E1, 0xD17C}, //11831 #HANGUL SYLLABLE THIEUTH YEO SSANGSIOS + {0xC5E2, 0xD184}, //11832 #HANGUL SYLLABLE THIEUTH YE + {0xC5E3, 0xD188}, //11833 #HANGUL SYLLABLE THIEUTH YE NIEUN + {0xC5E4, 0xD1A0}, //11834 #HANGUL SYLLABLE THIEUTH O + {0xC5E5, 0xD1A1}, //11835 #HANGUL SYLLABLE THIEUTH O KIYEOK + {0xC5E6, 0xD1A4}, //11836 #HANGUL SYLLABLE THIEUTH O NIEUN + {0xC5E7, 0xD1A8}, //11837 #HANGUL SYLLABLE THIEUTH O RIEUL + {0xC5E8, 0xD1B0}, //11838 #HANGUL SYLLABLE THIEUTH O MIEUM + {0xC5E9, 0xD1B1}, //11839 #HANGUL SYLLABLE THIEUTH O PIEUP + {0xC5EA, 0xD1B3}, //11840 #HANGUL SYLLABLE THIEUTH O SIOS + {0xC5EB, 0xD1B5}, //11841 #HANGUL SYLLABLE THIEUTH O IEUNG + {0xC5EC, 0xD1BA}, //11842 #HANGUL SYLLABLE THIEUTH O PHIEUPH + {0xC5ED, 0xD1BC}, //11843 #HANGUL SYLLABLE THIEUTH WA + {0xC5EE, 0xD1C0}, //11844 #HANGUL SYLLABLE THIEUTH WA NIEUN + {0xC5EF, 0xD1D8}, //11845 #HANGUL SYLLABLE THIEUTH WAE + {0xC5F0, 0xD1F4}, //11846 #HANGUL SYLLABLE THIEUTH OE + {0xC5F1, 0xD1F8}, //11847 #HANGUL SYLLABLE THIEUTH OE NIEUN + {0xC5F2, 0xD207}, //11848 #HANGUL SYLLABLE THIEUTH OE SIOS + {0xC5F3, 0xD209}, //11849 #HANGUL SYLLABLE THIEUTH OE IEUNG + {0xC5F4, 0xD210}, //11850 #HANGUL SYLLABLE THIEUTH YO + {0xC5F5, 0xD22C}, //11851 #HANGUL SYLLABLE THIEUTH U + {0xC5F6, 0xD22D}, //11852 #HANGUL SYLLABLE THIEUTH U KIYEOK + {0xC5F7, 0xD230}, //11853 #HANGUL SYLLABLE THIEUTH U NIEUN + {0xC5F8, 0xD234}, //11854 #HANGUL SYLLABLE THIEUTH U RIEUL + {0xC5F9, 0xD23C}, //11855 #HANGUL SYLLABLE THIEUTH U MIEUM + {0xC5FA, 0xD23D}, //11856 #HANGUL SYLLABLE THIEUTH U PIEUP + {0xC5FB, 0xD23F}, //11857 #HANGUL SYLLABLE THIEUTH U SIOS + {0xC5FC, 0xD241}, //11858 #HANGUL SYLLABLE THIEUTH U IEUNG + {0xC5FD, 0xD248}, //11859 #HANGUL SYLLABLE THIEUTH WEO + {0xC5FE, 0xD25C}, //11860 #HANGUL SYLLABLE THIEUTH WEO SSANGSIOS + {0xC641, 0xD78D}, //11861 #HANGUL SYLLABLE HIEUH I NIEUNCIEUC + {0xC642, 0xD78E}, //11862 #HANGUL SYLLABLE HIEUH I NIEUNHIEUH + {0xC643, 0xD78F}, //11863 #HANGUL SYLLABLE HIEUH I TIKEUT + {0xC644, 0xD791}, //11864 #HANGUL SYLLABLE HIEUH I RIEULKIYEOK + {0xC645, 0xD792}, //11865 #HANGUL SYLLABLE HIEUH I RIEULMIEUM + {0xC646, 0xD793}, //11866 #HANGUL SYLLABLE HIEUH I RIEULPIEUP + {0xC647, 0xD794}, //11867 #HANGUL SYLLABLE HIEUH I RIEULSIOS + {0xC648, 0xD795}, //11868 #HANGUL SYLLABLE HIEUH I RIEULTHIEUTH + {0xC649, 0xD796}, //11869 #HANGUL SYLLABLE HIEUH I RIEULPHIEUPH + {0xC64A, 0xD797}, //11870 #HANGUL SYLLABLE HIEUH I RIEULHIEUH + {0xC64B, 0xD79A}, //11871 #HANGUL SYLLABLE HIEUH I PIEUPSIOS + {0xC64C, 0xD79C}, //11872 #HANGUL SYLLABLE HIEUH I SSANGSIOS + {0xC64D, 0xD79E}, //11873 #HANGUL SYLLABLE HIEUH I CIEUC + {0xC64E, 0xD79F}, //11874 #HANGUL SYLLABLE HIEUH I CHIEUCH + {0xC64F, 0xD7A0}, //11875 #HANGUL SYLLABLE HIEUH I KHIEUKH + {0xC650, 0xD7A1}, //11876 #HANGUL SYLLABLE HIEUH I THIEUTH + {0xC651, 0xD7A2}, //11877 #HANGUL SYLLABLE HIEUH I PHIEUPH + {0xC652, 0xD7A3}, //11878 #HANGUL SYLLABLE HIEUH I HIEUH + {0xC6A1, 0xD264}, //11879 #HANGUL SYLLABLE THIEUTH WE + {0xC6A2, 0xD280}, //11880 #HANGUL SYLLABLE THIEUTH WI + {0xC6A3, 0xD281}, //11881 #HANGUL SYLLABLE THIEUTH WI KIYEOK + {0xC6A4, 0xD284}, //11882 #HANGUL SYLLABLE THIEUTH WI NIEUN + {0xC6A5, 0xD288}, //11883 #HANGUL SYLLABLE THIEUTH WI RIEUL + {0xC6A6, 0xD290}, //11884 #HANGUL SYLLABLE THIEUTH WI MIEUM + {0xC6A7, 0xD291}, //11885 #HANGUL SYLLABLE THIEUTH WI PIEUP + {0xC6A8, 0xD295}, //11886 #HANGUL SYLLABLE THIEUTH WI IEUNG + {0xC6A9, 0xD29C}, //11887 #HANGUL SYLLABLE THIEUTH YU + {0xC6AA, 0xD2A0}, //11888 #HANGUL SYLLABLE THIEUTH YU NIEUN + {0xC6AB, 0xD2A4}, //11889 #HANGUL SYLLABLE THIEUTH YU RIEUL + {0xC6AC, 0xD2AC}, //11890 #HANGUL SYLLABLE THIEUTH YU MIEUM + {0xC6AD, 0xD2B1}, //11891 #HANGUL SYLLABLE THIEUTH YU IEUNG + {0xC6AE, 0xD2B8}, //11892 #HANGUL SYLLABLE THIEUTH EU + {0xC6AF, 0xD2B9}, //11893 #HANGUL SYLLABLE THIEUTH EU KIYEOK + {0xC6B0, 0xD2BC}, //11894 #HANGUL SYLLABLE THIEUTH EU NIEUN + {0xC6B1, 0xD2BF}, //11895 #HANGUL SYLLABLE THIEUTH EU TIKEUT + {0xC6B2, 0xD2C0}, //11896 #HANGUL SYLLABLE THIEUTH EU RIEUL + {0xC6B3, 0xD2C2}, //11897 #HANGUL SYLLABLE THIEUTH EU RIEULMIEUM + {0xC6B4, 0xD2C8}, //11898 #HANGUL SYLLABLE THIEUTH EU MIEUM + {0xC6B5, 0xD2C9}, //11899 #HANGUL SYLLABLE THIEUTH EU PIEUP + {0xC6B6, 0xD2CB}, //11900 #HANGUL SYLLABLE THIEUTH EU SIOS + {0xC6B7, 0xD2D4}, //11901 #HANGUL SYLLABLE THIEUTH YI + {0xC6B8, 0xD2D8}, //11902 #HANGUL SYLLABLE THIEUTH YI NIEUN + {0xC6B9, 0xD2DC}, //11903 #HANGUL SYLLABLE THIEUTH YI RIEUL + {0xC6BA, 0xD2E4}, //11904 #HANGUL SYLLABLE THIEUTH YI MIEUM + {0xC6BB, 0xD2E5}, //11905 #HANGUL SYLLABLE THIEUTH YI PIEUP + {0xC6BC, 0xD2F0}, //11906 #HANGUL SYLLABLE THIEUTH I + {0xC6BD, 0xD2F1}, //11907 #HANGUL SYLLABLE THIEUTH I KIYEOK + {0xC6BE, 0xD2F4}, //11908 #HANGUL SYLLABLE THIEUTH I NIEUN + {0xC6BF, 0xD2F8}, //11909 #HANGUL SYLLABLE THIEUTH I RIEUL + {0xC6C0, 0xD300}, //11910 #HANGUL SYLLABLE THIEUTH I MIEUM + {0xC6C1, 0xD301}, //11911 #HANGUL SYLLABLE THIEUTH I PIEUP + {0xC6C2, 0xD303}, //11912 #HANGUL SYLLABLE THIEUTH I SIOS + {0xC6C3, 0xD305}, //11913 #HANGUL SYLLABLE THIEUTH I IEUNG + {0xC6C4, 0xD30C}, //11914 #HANGUL SYLLABLE PHIEUPH A + {0xC6C5, 0xD30D}, //11915 #HANGUL SYLLABLE PHIEUPH A KIYEOK + {0xC6C6, 0xD30E}, //11916 #HANGUL SYLLABLE PHIEUPH A SSANGKIYEOK + {0xC6C7, 0xD310}, //11917 #HANGUL SYLLABLE PHIEUPH A NIEUN + {0xC6C8, 0xD314}, //11918 #HANGUL SYLLABLE PHIEUPH A RIEUL + {0xC6C9, 0xD316}, //11919 #HANGUL SYLLABLE PHIEUPH A RIEULMIEUM + {0xC6CA, 0xD31C}, //11920 #HANGUL SYLLABLE PHIEUPH A MIEUM + {0xC6CB, 0xD31D}, //11921 #HANGUL SYLLABLE PHIEUPH A PIEUP + {0xC6CC, 0xD31F}, //11922 #HANGUL SYLLABLE PHIEUPH A SIOS + {0xC6CD, 0xD320}, //11923 #HANGUL SYLLABLE PHIEUPH A SSANGSIOS + {0xC6CE, 0xD321}, //11924 #HANGUL SYLLABLE PHIEUPH A IEUNG + {0xC6CF, 0xD325}, //11925 #HANGUL SYLLABLE PHIEUPH A THIEUTH + {0xC6D0, 0xD328}, //11926 #HANGUL SYLLABLE PHIEUPH AE + {0xC6D1, 0xD329}, //11927 #HANGUL SYLLABLE PHIEUPH AE KIYEOK + {0xC6D2, 0xD32C}, //11928 #HANGUL SYLLABLE PHIEUPH AE NIEUN + {0xC6D3, 0xD330}, //11929 #HANGUL SYLLABLE PHIEUPH AE RIEUL + {0xC6D4, 0xD338}, //11930 #HANGUL SYLLABLE PHIEUPH AE MIEUM + {0xC6D5, 0xD339}, //11931 #HANGUL SYLLABLE PHIEUPH AE PIEUP + {0xC6D6, 0xD33B}, //11932 #HANGUL SYLLABLE PHIEUPH AE SIOS + {0xC6D7, 0xD33C}, //11933 #HANGUL SYLLABLE PHIEUPH AE SSANGSIOS + {0xC6D8, 0xD33D}, //11934 #HANGUL SYLLABLE PHIEUPH AE IEUNG + {0xC6D9, 0xD344}, //11935 #HANGUL SYLLABLE PHIEUPH YA + {0xC6DA, 0xD345}, //11936 #HANGUL SYLLABLE PHIEUPH YA KIYEOK + {0xC6DB, 0xD37C}, //11937 #HANGUL SYLLABLE PHIEUPH EO + {0xC6DC, 0xD37D}, //11938 #HANGUL SYLLABLE PHIEUPH EO KIYEOK + {0xC6DD, 0xD380}, //11939 #HANGUL SYLLABLE PHIEUPH EO NIEUN + {0xC6DE, 0xD384}, //11940 #HANGUL SYLLABLE PHIEUPH EO RIEUL + {0xC6DF, 0xD38C}, //11941 #HANGUL SYLLABLE PHIEUPH EO MIEUM + {0xC6E0, 0xD38D}, //11942 #HANGUL SYLLABLE PHIEUPH EO PIEUP + {0xC6E1, 0xD38F}, //11943 #HANGUL SYLLABLE PHIEUPH EO SIOS + {0xC6E2, 0xD390}, //11944 #HANGUL SYLLABLE PHIEUPH EO SSANGSIOS + {0xC6E3, 0xD391}, //11945 #HANGUL SYLLABLE PHIEUPH EO IEUNG + {0xC6E4, 0xD398}, //11946 #HANGUL SYLLABLE PHIEUPH E + {0xC6E5, 0xD399}, //11947 #HANGUL SYLLABLE PHIEUPH E KIYEOK + {0xC6E6, 0xD39C}, //11948 #HANGUL SYLLABLE PHIEUPH E NIEUN + {0xC6E7, 0xD3A0}, //11949 #HANGUL SYLLABLE PHIEUPH E RIEUL + {0xC6E8, 0xD3A8}, //11950 #HANGUL SYLLABLE PHIEUPH E MIEUM + {0xC6E9, 0xD3A9}, //11951 #HANGUL SYLLABLE PHIEUPH E PIEUP + {0xC6EA, 0xD3AB}, //11952 #HANGUL SYLLABLE PHIEUPH E SIOS + {0xC6EB, 0xD3AD}, //11953 #HANGUL SYLLABLE PHIEUPH E IEUNG + {0xC6EC, 0xD3B4}, //11954 #HANGUL SYLLABLE PHIEUPH YEO + {0xC6ED, 0xD3B8}, //11955 #HANGUL SYLLABLE PHIEUPH YEO NIEUN + {0xC6EE, 0xD3BC}, //11956 #HANGUL SYLLABLE PHIEUPH YEO RIEUL + {0xC6EF, 0xD3C4}, //11957 #HANGUL SYLLABLE PHIEUPH YEO MIEUM + {0xC6F0, 0xD3C5}, //11958 #HANGUL SYLLABLE PHIEUPH YEO PIEUP + {0xC6F1, 0xD3C8}, //11959 #HANGUL SYLLABLE PHIEUPH YEO SSANGSIOS + {0xC6F2, 0xD3C9}, //11960 #HANGUL SYLLABLE PHIEUPH YEO IEUNG + {0xC6F3, 0xD3D0}, //11961 #HANGUL SYLLABLE PHIEUPH YE + {0xC6F4, 0xD3D8}, //11962 #HANGUL SYLLABLE PHIEUPH YE RIEUL + {0xC6F5, 0xD3E1}, //11963 #HANGUL SYLLABLE PHIEUPH YE PIEUP + {0xC6F6, 0xD3E3}, //11964 #HANGUL SYLLABLE PHIEUPH YE SIOS + {0xC6F7, 0xD3EC}, //11965 #HANGUL SYLLABLE PHIEUPH O + {0xC6F8, 0xD3ED}, //11966 #HANGUL SYLLABLE PHIEUPH O KIYEOK + {0xC6F9, 0xD3F0}, //11967 #HANGUL SYLLABLE PHIEUPH O NIEUN + {0xC6FA, 0xD3F4}, //11968 #HANGUL SYLLABLE PHIEUPH O RIEUL + {0xC6FB, 0xD3FC}, //11969 #HANGUL SYLLABLE PHIEUPH O MIEUM + {0xC6FC, 0xD3FD}, //11970 #HANGUL SYLLABLE PHIEUPH O PIEUP + {0xC6FD, 0xD3FF}, //11971 #HANGUL SYLLABLE PHIEUPH O SIOS + {0xC6FE, 0xD401}, //11972 #HANGUL SYLLABLE PHIEUPH O IEUNG + {0xC7A1, 0xD408}, //11973 #HANGUL SYLLABLE PHIEUPH WA + {0xC7A2, 0xD41D}, //11974 #HANGUL SYLLABLE PHIEUPH WA IEUNG + {0xC7A3, 0xD440}, //11975 #HANGUL SYLLABLE PHIEUPH OE + {0xC7A4, 0xD444}, //11976 #HANGUL SYLLABLE PHIEUPH OE NIEUN + {0xC7A5, 0xD45C}, //11977 #HANGUL SYLLABLE PHIEUPH YO + {0xC7A6, 0xD460}, //11978 #HANGUL SYLLABLE PHIEUPH YO NIEUN + {0xC7A7, 0xD464}, //11979 #HANGUL SYLLABLE PHIEUPH YO RIEUL + {0xC7A8, 0xD46D}, //11980 #HANGUL SYLLABLE PHIEUPH YO PIEUP + {0xC7A9, 0xD46F}, //11981 #HANGUL SYLLABLE PHIEUPH YO SIOS + {0xC7AA, 0xD478}, //11982 #HANGUL SYLLABLE PHIEUPH U + {0xC7AB, 0xD479}, //11983 #HANGUL SYLLABLE PHIEUPH U KIYEOK + {0xC7AC, 0xD47C}, //11984 #HANGUL SYLLABLE PHIEUPH U NIEUN + {0xC7AD, 0xD47F}, //11985 #HANGUL SYLLABLE PHIEUPH U TIKEUT + {0xC7AE, 0xD480}, //11986 #HANGUL SYLLABLE PHIEUPH U RIEUL + {0xC7AF, 0xD482}, //11987 #HANGUL SYLLABLE PHIEUPH U RIEULMIEUM + {0xC7B0, 0xD488}, //11988 #HANGUL SYLLABLE PHIEUPH U MIEUM + {0xC7B1, 0xD489}, //11989 #HANGUL SYLLABLE PHIEUPH U PIEUP + {0xC7B2, 0xD48B}, //11990 #HANGUL SYLLABLE PHIEUPH U SIOS + {0xC7B3, 0xD48D}, //11991 #HANGUL SYLLABLE PHIEUPH U IEUNG + {0xC7B4, 0xD494}, //11992 #HANGUL SYLLABLE PHIEUPH WEO + {0xC7B5, 0xD4A9}, //11993 #HANGUL SYLLABLE PHIEUPH WEO IEUNG + {0xC7B6, 0xD4CC}, //11994 #HANGUL SYLLABLE PHIEUPH WI + {0xC7B7, 0xD4D0}, //11995 #HANGUL SYLLABLE PHIEUPH WI NIEUN + {0xC7B8, 0xD4D4}, //11996 #HANGUL SYLLABLE PHIEUPH WI RIEUL + {0xC7B9, 0xD4DC}, //11997 #HANGUL SYLLABLE PHIEUPH WI MIEUM + {0xC7BA, 0xD4DF}, //11998 #HANGUL SYLLABLE PHIEUPH WI SIOS + {0xC7BB, 0xD4E8}, //11999 #HANGUL SYLLABLE PHIEUPH YU + {0xC7BC, 0xD4EC}, //12000 #HANGUL SYLLABLE PHIEUPH YU NIEUN + {0xC7BD, 0xD4F0}, //12001 #HANGUL SYLLABLE PHIEUPH YU RIEUL + {0xC7BE, 0xD4F8}, //12002 #HANGUL SYLLABLE PHIEUPH YU MIEUM + {0xC7BF, 0xD4FB}, //12003 #HANGUL SYLLABLE PHIEUPH YU SIOS + {0xC7C0, 0xD4FD}, //12004 #HANGUL SYLLABLE PHIEUPH YU IEUNG + {0xC7C1, 0xD504}, //12005 #HANGUL SYLLABLE PHIEUPH EU + {0xC7C2, 0xD508}, //12006 #HANGUL SYLLABLE PHIEUPH EU NIEUN + {0xC7C3, 0xD50C}, //12007 #HANGUL SYLLABLE PHIEUPH EU RIEUL + {0xC7C4, 0xD514}, //12008 #HANGUL SYLLABLE PHIEUPH EU MIEUM + {0xC7C5, 0xD515}, //12009 #HANGUL SYLLABLE PHIEUPH EU PIEUP + {0xC7C6, 0xD517}, //12010 #HANGUL SYLLABLE PHIEUPH EU SIOS + {0xC7C7, 0xD53C}, //12011 #HANGUL SYLLABLE PHIEUPH I + {0xC7C8, 0xD53D}, //12012 #HANGUL SYLLABLE PHIEUPH I KIYEOK + {0xC7C9, 0xD540}, //12013 #HANGUL SYLLABLE PHIEUPH I NIEUN + {0xC7CA, 0xD544}, //12014 #HANGUL SYLLABLE PHIEUPH I RIEUL + {0xC7CB, 0xD54C}, //12015 #HANGUL SYLLABLE PHIEUPH I MIEUM + {0xC7CC, 0xD54D}, //12016 #HANGUL SYLLABLE PHIEUPH I PIEUP + {0xC7CD, 0xD54F}, //12017 #HANGUL SYLLABLE PHIEUPH I SIOS + {0xC7CE, 0xD551}, //12018 #HANGUL SYLLABLE PHIEUPH I IEUNG + {0xC7CF, 0xD558}, //12019 #HANGUL SYLLABLE HIEUH A + {0xC7D0, 0xD559}, //12020 #HANGUL SYLLABLE HIEUH A KIYEOK + {0xC7D1, 0xD55C}, //12021 #HANGUL SYLLABLE HIEUH A NIEUN + {0xC7D2, 0xD560}, //12022 #HANGUL SYLLABLE HIEUH A RIEUL + {0xC7D3, 0xD565}, //12023 #HANGUL SYLLABLE HIEUH A RIEULTHIEUTH + {0xC7D4, 0xD568}, //12024 #HANGUL SYLLABLE HIEUH A MIEUM + {0xC7D5, 0xD569}, //12025 #HANGUL SYLLABLE HIEUH A PIEUP + {0xC7D6, 0xD56B}, //12026 #HANGUL SYLLABLE HIEUH A SIOS + {0xC7D7, 0xD56D}, //12027 #HANGUL SYLLABLE HIEUH A IEUNG + {0xC7D8, 0xD574}, //12028 #HANGUL SYLLABLE HIEUH AE + {0xC7D9, 0xD575}, //12029 #HANGUL SYLLABLE HIEUH AE KIYEOK + {0xC7DA, 0xD578}, //12030 #HANGUL SYLLABLE HIEUH AE NIEUN + {0xC7DB, 0xD57C}, //12031 #HANGUL SYLLABLE HIEUH AE RIEUL + {0xC7DC, 0xD584}, //12032 #HANGUL SYLLABLE HIEUH AE MIEUM + {0xC7DD, 0xD585}, //12033 #HANGUL SYLLABLE HIEUH AE PIEUP + {0xC7DE, 0xD587}, //12034 #HANGUL SYLLABLE HIEUH AE SIOS + {0xC7DF, 0xD588}, //12035 #HANGUL SYLLABLE HIEUH AE SSANGSIOS + {0xC7E0, 0xD589}, //12036 #HANGUL SYLLABLE HIEUH AE IEUNG + {0xC7E1, 0xD590}, //12037 #HANGUL SYLLABLE HIEUH YA + {0xC7E2, 0xD5A5}, //12038 #HANGUL SYLLABLE HIEUH YA IEUNG + {0xC7E3, 0xD5C8}, //12039 #HANGUL SYLLABLE HIEUH EO + {0xC7E4, 0xD5C9}, //12040 #HANGUL SYLLABLE HIEUH EO KIYEOK + {0xC7E5, 0xD5CC}, //12041 #HANGUL SYLLABLE HIEUH EO NIEUN + {0xC7E6, 0xD5D0}, //12042 #HANGUL SYLLABLE HIEUH EO RIEUL + {0xC7E7, 0xD5D2}, //12043 #HANGUL SYLLABLE HIEUH EO RIEULMIEUM + {0xC7E8, 0xD5D8}, //12044 #HANGUL SYLLABLE HIEUH EO MIEUM + {0xC7E9, 0xD5D9}, //12045 #HANGUL SYLLABLE HIEUH EO PIEUP + {0xC7EA, 0xD5DB}, //12046 #HANGUL SYLLABLE HIEUH EO SIOS + {0xC7EB, 0xD5DD}, //12047 #HANGUL SYLLABLE HIEUH EO IEUNG + {0xC7EC, 0xD5E4}, //12048 #HANGUL SYLLABLE HIEUH E + {0xC7ED, 0xD5E5}, //12049 #HANGUL SYLLABLE HIEUH E KIYEOK + {0xC7EE, 0xD5E8}, //12050 #HANGUL SYLLABLE HIEUH E NIEUN + {0xC7EF, 0xD5EC}, //12051 #HANGUL SYLLABLE HIEUH E RIEUL + {0xC7F0, 0xD5F4}, //12052 #HANGUL SYLLABLE HIEUH E MIEUM + {0xC7F1, 0xD5F5}, //12053 #HANGUL SYLLABLE HIEUH E PIEUP + {0xC7F2, 0xD5F7}, //12054 #HANGUL SYLLABLE HIEUH E SIOS + {0xC7F3, 0xD5F9}, //12055 #HANGUL SYLLABLE HIEUH E IEUNG + {0xC7F4, 0xD600}, //12056 #HANGUL SYLLABLE HIEUH YEO + {0xC7F5, 0xD601}, //12057 #HANGUL SYLLABLE HIEUH YEO KIYEOK + {0xC7F6, 0xD604}, //12058 #HANGUL SYLLABLE HIEUH YEO NIEUN + {0xC7F7, 0xD608}, //12059 #HANGUL SYLLABLE HIEUH YEO RIEUL + {0xC7F8, 0xD610}, //12060 #HANGUL SYLLABLE HIEUH YEO MIEUM + {0xC7F9, 0xD611}, //12061 #HANGUL SYLLABLE HIEUH YEO PIEUP + {0xC7FA, 0xD613}, //12062 #HANGUL SYLLABLE HIEUH YEO SIOS + {0xC7FB, 0xD614}, //12063 #HANGUL SYLLABLE HIEUH YEO SSANGSIOS + {0xC7FC, 0xD615}, //12064 #HANGUL SYLLABLE HIEUH YEO IEUNG + {0xC7FD, 0xD61C}, //12065 #HANGUL SYLLABLE HIEUH YE + {0xC7FE, 0xD620}, //12066 #HANGUL SYLLABLE HIEUH YE NIEUN + {0xC8A1, 0xD624}, //12067 #HANGUL SYLLABLE HIEUH YE RIEUL + {0xC8A2, 0xD62D}, //12068 #HANGUL SYLLABLE HIEUH YE PIEUP + {0xC8A3, 0xD638}, //12069 #HANGUL SYLLABLE HIEUH O + {0xC8A4, 0xD639}, //12070 #HANGUL SYLLABLE HIEUH O KIYEOK + {0xC8A5, 0xD63C}, //12071 #HANGUL SYLLABLE HIEUH O NIEUN + {0xC8A6, 0xD640}, //12072 #HANGUL SYLLABLE HIEUH O RIEUL + {0xC8A7, 0xD645}, //12073 #HANGUL SYLLABLE HIEUH O RIEULTHIEUTH + {0xC8A8, 0xD648}, //12074 #HANGUL SYLLABLE HIEUH O MIEUM + {0xC8A9, 0xD649}, //12075 #HANGUL SYLLABLE HIEUH O PIEUP + {0xC8AA, 0xD64B}, //12076 #HANGUL SYLLABLE HIEUH O SIOS + {0xC8AB, 0xD64D}, //12077 #HANGUL SYLLABLE HIEUH O IEUNG + {0xC8AC, 0xD651}, //12078 #HANGUL SYLLABLE HIEUH O THIEUTH + {0xC8AD, 0xD654}, //12079 #HANGUL SYLLABLE HIEUH WA + {0xC8AE, 0xD655}, //12080 #HANGUL SYLLABLE HIEUH WA KIYEOK + {0xC8AF, 0xD658}, //12081 #HANGUL SYLLABLE HIEUH WA NIEUN + {0xC8B0, 0xD65C}, //12082 #HANGUL SYLLABLE HIEUH WA RIEUL + {0xC8B1, 0xD667}, //12083 #HANGUL SYLLABLE HIEUH WA SIOS + {0xC8B2, 0xD669}, //12084 #HANGUL SYLLABLE HIEUH WA IEUNG + {0xC8B3, 0xD670}, //12085 #HANGUL SYLLABLE HIEUH WAE + {0xC8B4, 0xD671}, //12086 #HANGUL SYLLABLE HIEUH WAE KIYEOK + {0xC8B5, 0xD674}, //12087 #HANGUL SYLLABLE HIEUH WAE NIEUN + {0xC8B6, 0xD683}, //12088 #HANGUL SYLLABLE HIEUH WAE SIOS + {0xC8B7, 0xD685}, //12089 #HANGUL SYLLABLE HIEUH WAE IEUNG + {0xC8B8, 0xD68C}, //12090 #HANGUL SYLLABLE HIEUH OE + {0xC8B9, 0xD68D}, //12091 #HANGUL SYLLABLE HIEUH OE KIYEOK + {0xC8BA, 0xD690}, //12092 #HANGUL SYLLABLE HIEUH OE NIEUN + {0xC8BB, 0xD694}, //12093 #HANGUL SYLLABLE HIEUH OE RIEUL + {0xC8BC, 0xD69D}, //12094 #HANGUL SYLLABLE HIEUH OE PIEUP + {0xC8BD, 0xD69F}, //12095 #HANGUL SYLLABLE HIEUH OE SIOS + {0xC8BE, 0xD6A1}, //12096 #HANGUL SYLLABLE HIEUH OE IEUNG + {0xC8BF, 0xD6A8}, //12097 #HANGUL SYLLABLE HIEUH YO + {0xC8C0, 0xD6AC}, //12098 #HANGUL SYLLABLE HIEUH YO NIEUN + {0xC8C1, 0xD6B0}, //12099 #HANGUL SYLLABLE HIEUH YO RIEUL + {0xC8C2, 0xD6B9}, //12100 #HANGUL SYLLABLE HIEUH YO PIEUP + {0xC8C3, 0xD6BB}, //12101 #HANGUL SYLLABLE HIEUH YO SIOS + {0xC8C4, 0xD6C4}, //12102 #HANGUL SYLLABLE HIEUH U + {0xC8C5, 0xD6C5}, //12103 #HANGUL SYLLABLE HIEUH U KIYEOK + {0xC8C6, 0xD6C8}, //12104 #HANGUL SYLLABLE HIEUH U NIEUN + {0xC8C7, 0xD6CC}, //12105 #HANGUL SYLLABLE HIEUH U RIEUL + {0xC8C8, 0xD6D1}, //12106 #HANGUL SYLLABLE HIEUH U RIEULTHIEUTH + {0xC8C9, 0xD6D4}, //12107 #HANGUL SYLLABLE HIEUH U MIEUM + {0xC8CA, 0xD6D7}, //12108 #HANGUL SYLLABLE HIEUH U SIOS + {0xC8CB, 0xD6D9}, //12109 #HANGUL SYLLABLE HIEUH U IEUNG + {0xC8CC, 0xD6E0}, //12110 #HANGUL SYLLABLE HIEUH WEO + {0xC8CD, 0xD6E4}, //12111 #HANGUL SYLLABLE HIEUH WEO NIEUN + {0xC8CE, 0xD6E8}, //12112 #HANGUL SYLLABLE HIEUH WEO RIEUL + {0xC8CF, 0xD6F0}, //12113 #HANGUL SYLLABLE HIEUH WEO MIEUM + {0xC8D0, 0xD6F5}, //12114 #HANGUL SYLLABLE HIEUH WEO IEUNG + {0xC8D1, 0xD6FC}, //12115 #HANGUL SYLLABLE HIEUH WE + {0xC8D2, 0xD6FD}, //12116 #HANGUL SYLLABLE HIEUH WE KIYEOK + {0xC8D3, 0xD700}, //12117 #HANGUL SYLLABLE HIEUH WE NIEUN + {0xC8D4, 0xD704}, //12118 #HANGUL SYLLABLE HIEUH WE RIEUL + {0xC8D5, 0xD711}, //12119 #HANGUL SYLLABLE HIEUH WE IEUNG + {0xC8D6, 0xD718}, //12120 #HANGUL SYLLABLE HIEUH WI + {0xC8D7, 0xD719}, //12121 #HANGUL SYLLABLE HIEUH WI KIYEOK + {0xC8D8, 0xD71C}, //12122 #HANGUL SYLLABLE HIEUH WI NIEUN + {0xC8D9, 0xD720}, //12123 #HANGUL SYLLABLE HIEUH WI RIEUL + {0xC8DA, 0xD728}, //12124 #HANGUL SYLLABLE HIEUH WI MIEUM + {0xC8DB, 0xD729}, //12125 #HANGUL SYLLABLE HIEUH WI PIEUP + {0xC8DC, 0xD72B}, //12126 #HANGUL SYLLABLE HIEUH WI SIOS + {0xC8DD, 0xD72D}, //12127 #HANGUL SYLLABLE HIEUH WI IEUNG + {0xC8DE, 0xD734}, //12128 #HANGUL SYLLABLE HIEUH YU + {0xC8DF, 0xD735}, //12129 #HANGUL SYLLABLE HIEUH YU KIYEOK + {0xC8E0, 0xD738}, //12130 #HANGUL SYLLABLE HIEUH YU NIEUN + {0xC8E1, 0xD73C}, //12131 #HANGUL SYLLABLE HIEUH YU RIEUL + {0xC8E2, 0xD744}, //12132 #HANGUL SYLLABLE HIEUH YU MIEUM + {0xC8E3, 0xD747}, //12133 #HANGUL SYLLABLE HIEUH YU SIOS + {0xC8E4, 0xD749}, //12134 #HANGUL SYLLABLE HIEUH YU IEUNG + {0xC8E5, 0xD750}, //12135 #HANGUL SYLLABLE HIEUH EU + {0xC8E6, 0xD751}, //12136 #HANGUL SYLLABLE HIEUH EU KIYEOK + {0xC8E7, 0xD754}, //12137 #HANGUL SYLLABLE HIEUH EU NIEUN + {0xC8E8, 0xD756}, //12138 #HANGUL SYLLABLE HIEUH EU NIEUNHIEUH + {0xC8E9, 0xD757}, //12139 #HANGUL SYLLABLE HIEUH EU TIKEUT + {0xC8EA, 0xD758}, //12140 #HANGUL SYLLABLE HIEUH EU RIEUL + {0xC8EB, 0xD759}, //12141 #HANGUL SYLLABLE HIEUH EU RIEULKIYEOK + {0xC8EC, 0xD760}, //12142 #HANGUL SYLLABLE HIEUH EU MIEUM + {0xC8ED, 0xD761}, //12143 #HANGUL SYLLABLE HIEUH EU PIEUP + {0xC8EE, 0xD763}, //12144 #HANGUL SYLLABLE HIEUH EU SIOS + {0xC8EF, 0xD765}, //12145 #HANGUL SYLLABLE HIEUH EU IEUNG + {0xC8F0, 0xD769}, //12146 #HANGUL SYLLABLE HIEUH EU THIEUTH + {0xC8F1, 0xD76C}, //12147 #HANGUL SYLLABLE HIEUH YI + {0xC8F2, 0xD770}, //12148 #HANGUL SYLLABLE HIEUH YI NIEUN + {0xC8F3, 0xD774}, //12149 #HANGUL SYLLABLE HIEUH YI RIEUL + {0xC8F4, 0xD77C}, //12150 #HANGUL SYLLABLE HIEUH YI MIEUM + {0xC8F5, 0xD77D}, //12151 #HANGUL SYLLABLE HIEUH YI PIEUP + {0xC8F6, 0xD781}, //12152 #HANGUL SYLLABLE HIEUH YI IEUNG + {0xC8F7, 0xD788}, //12153 #HANGUL SYLLABLE HIEUH I + {0xC8F8, 0xD789}, //12154 #HANGUL SYLLABLE HIEUH I KIYEOK + {0xC8F9, 0xD78C}, //12155 #HANGUL SYLLABLE HIEUH I NIEUN + {0xC8FA, 0xD790}, //12156 #HANGUL SYLLABLE HIEUH I RIEUL + {0xC8FB, 0xD798}, //12157 #HANGUL SYLLABLE HIEUH I MIEUM + {0xC8FC, 0xD799}, //12158 #HANGUL SYLLABLE HIEUH I PIEUP + {0xC8FD, 0xD79B}, //12159 #HANGUL SYLLABLE HIEUH I SIOS + {0xC8FE, 0xD79D}, //12160 #HANGUL SYLLABLE HIEUH I IEUNG + {0xCAA1, 0x4F3D}, //12161 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x4F73}, //12162 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5047}, //12163 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x50F9}, //12164 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x52A0}, //12165 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x53EF}, //12166 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x5475}, //12167 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x54E5}, //12168 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x5609}, //12169 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x5AC1}, //12170 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x5BB6}, //12171 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x6687}, //12172 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x67B6}, //12173 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x67B7}, //12174 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x67EF}, //12175 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x6B4C}, //12176 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x73C2}, //12177 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x75C2}, //12178 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x7A3C}, //12179 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x82DB}, //12180 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x8304}, //12181 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x8857}, //12182 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x8888}, //12183 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x8A36}, //12184 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x8CC8}, //12185 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x8DCF}, //12186 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x8EFB}, //12187 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x8FE6}, //12188 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x99D5}, //12189 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x523B}, //12190 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x5374}, //12191 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x5404}, //12192 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x606A}, //12193 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x6164}, //12194 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x6BBC}, //12195 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x73CF}, //12196 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x811A}, //12197 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x89BA}, //12198 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x89D2}, //12199 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x95A3}, //12200 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x4F83}, //12201 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x520A}, //12202 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x58BE}, //12203 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x5978}, //12204 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x59E6}, //12205 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x5E72}, //12206 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x5E79}, //12207 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x61C7}, //12208 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x63C0}, //12209 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x6746}, //12210 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x67EC}, //12211 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x687F}, //12212 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x6F97}, //12213 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x764E}, //12214 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x770B}, //12215 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x78F5}, //12216 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x7A08}, //12217 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x7AFF}, //12218 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x7C21}, //12219 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x809D}, //12220 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x826E}, //12221 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x8271}, //12222 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x8AEB}, //12223 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x9593}, //12224 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x4E6B}, //12225 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x559D}, //12226 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x66F7}, //12227 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x6E34}, //12228 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x78A3}, //12229 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x7AED}, //12230 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x845B}, //12231 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x8910}, //12232 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x874E}, //12233 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x97A8}, //12234 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x52D8}, //12235 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x574E}, //12236 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x582A}, //12237 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x5D4C}, //12238 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x611F}, //12239 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x61BE}, //12240 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x6221}, //12241 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x6562}, //12242 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x67D1}, //12243 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x6A44}, //12244 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x6E1B}, //12245 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x7518}, //12246 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x75B3}, //12247 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x76E3}, //12248 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x77B0}, //12249 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x7D3A}, //12250 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x90AF}, //12251 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x9451}, //12252 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x9452}, //12253 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x9F95}, //12254 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x5323}, //12255 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x5CAC}, //12256 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x7532}, //12257 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x80DB}, //12258 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x9240}, //12259 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x9598}, //12260 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x525B}, //12261 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x5808}, //12262 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x59DC}, //12263 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x5CA1}, //12264 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x5D17}, //12265 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x5EB7}, //12266 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x5F3A}, //12267 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x5F4A}, //12268 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x6177}, //12269 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x6C5F}, //12270 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x757A}, //12271 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x7586}, //12272 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x7CE0}, //12273 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x7D73}, //12274 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x7DB1}, //12275 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x7F8C}, //12276 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x8154}, //12277 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x8221}, //12278 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x8591}, //12279 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x8941}, //12280 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x8B1B}, //12281 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x92FC}, //12282 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x964D}, //12283 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x9C47}, //12284 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4ECB}, //12285 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x4EF7}, //12286 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x500B}, //12287 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x51F1}, //12288 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x584F}, //12289 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x6137}, //12290 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x613E}, //12291 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x6168}, //12292 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x6539}, //12293 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x69EA}, //12294 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x6F11}, //12295 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x75A5}, //12296 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x7686}, //12297 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x76D6}, //12298 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x7B87}, //12299 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x82A5}, //12300 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x84CB}, //12301 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0xF900}, //12302 #CJK COMPATIBILITY IDEOGRAPH + {0xCBD1, 0x93A7}, //12303 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x958B}, //12304 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x5580}, //12305 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x5BA2}, //12306 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x5751}, //12307 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0xF901}, //12308 #CJK COMPATIBILITY IDEOGRAPH + {0xCBD7, 0x7CB3}, //12309 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x7FB9}, //12310 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x91B5}, //12311 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x5028}, //12312 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x53BB}, //12313 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x5C45}, //12314 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x5DE8}, //12315 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x62D2}, //12316 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x636E}, //12317 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x64DA}, //12318 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x64E7}, //12319 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x6E20}, //12320 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x70AC}, //12321 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x795B}, //12322 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x8DDD}, //12323 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x8E1E}, //12324 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0xF902}, //12325 #CJK COMPATIBILITY IDEOGRAPH + {0xCBE8, 0x907D}, //12326 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x9245}, //12327 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x92F8}, //12328 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x4E7E}, //12329 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x4EF6}, //12330 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x5065}, //12331 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x5DFE}, //12332 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5EFA}, //12333 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x6106}, //12334 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x6957}, //12335 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x8171}, //12336 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x8654}, //12337 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x8E47}, //12338 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x9375}, //12339 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x9A2B}, //12340 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x4E5E}, //12341 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x5091}, //12342 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x6770}, //12343 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x6840}, //12344 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x5109}, //12345 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x528D}, //12346 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5292}, //12347 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x6AA2}, //12348 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x77BC}, //12349 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x9210}, //12350 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x9ED4}, //12351 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x52AB}, //12352 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x602F}, //12353 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x8FF2}, //12354 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x5048}, //12355 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x61A9}, //12356 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x63ED}, //12357 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x64CA}, //12358 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x683C}, //12359 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6A84}, //12360 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6FC0}, //12361 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x8188}, //12362 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x89A1}, //12363 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x9694}, //12364 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x5805}, //12365 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x727D}, //12366 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x72AC}, //12367 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x7504}, //12368 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x7D79}, //12369 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x7E6D}, //12370 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x80A9}, //12371 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x898B}, //12372 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x8B74}, //12373 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x9063}, //12374 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x9D51}, //12375 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x6289}, //12376 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x6C7A}, //12377 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x6F54}, //12378 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x7D50}, //12379 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x7F3A}, //12380 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x8A23}, //12381 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x517C}, //12382 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x614A}, //12383 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x7B9D}, //12384 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x8B19}, //12385 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x9257}, //12386 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x938C}, //12387 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x4EAC}, //12388 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x4FD3}, //12389 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x501E}, //12390 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x50BE}, //12391 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x5106}, //12392 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x52C1}, //12393 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x52CD}, //12394 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x537F}, //12395 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x5770}, //12396 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x5883}, //12397 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x5E9A}, //12398 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x5F91}, //12399 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x6176}, //12400 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x61AC}, //12401 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x64CE}, //12402 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x656C}, //12403 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x666F}, //12404 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x66BB}, //12405 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x66F4}, //12406 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x6897}, //12407 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x6D87}, //12408 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x7085}, //12409 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x70F1}, //12410 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x749F}, //12411 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x74A5}, //12412 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x74CA}, //12413 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x75D9}, //12414 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x786C}, //12415 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x78EC}, //12416 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x7ADF}, //12417 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x7AF6}, //12418 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x7D45}, //12419 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x7D93}, //12420 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x8015}, //12421 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x803F}, //12422 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x811B}, //12423 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x8396}, //12424 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x8B66}, //12425 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x8F15}, //12426 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x9015}, //12427 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x93E1}, //12428 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x9803}, //12429 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x9838}, //12430 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x9A5A}, //12431 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x9BE8}, //12432 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x4FC2}, //12433 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x5553}, //12434 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x583A}, //12435 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x5951}, //12436 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x5B63}, //12437 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x5C46}, //12438 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x60B8}, //12439 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x6212}, //12440 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x6842}, //12441 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x68B0}, //12442 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x68E8}, //12443 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x6EAA}, //12444 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x754C}, //12445 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x7678}, //12446 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x78CE}, //12447 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x7A3D}, //12448 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x7CFB}, //12449 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x7E6B}, //12450 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x7E7C}, //12451 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x8A08}, //12452 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x8AA1}, //12453 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x8C3F}, //12454 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x968E}, //12455 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x9DC4}, //12456 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x53E4}, //12457 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x53E9}, //12458 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x544A}, //12459 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x5471}, //12460 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x56FA}, //12461 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x59D1}, //12462 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x5B64}, //12463 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x5C3B}, //12464 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x5EAB}, //12465 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x62F7}, //12466 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x6537}, //12467 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x6545}, //12468 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x6572}, //12469 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x66A0}, //12470 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x67AF}, //12471 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x69C1}, //12472 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x6CBD}, //12473 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x75FC}, //12474 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x7690}, //12475 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x777E}, //12476 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x7A3F}, //12477 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x7F94}, //12478 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x8003}, //12479 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x80A1}, //12480 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x818F}, //12481 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x82E6}, //12482 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x82FD}, //12483 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x83F0}, //12484 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x85C1}, //12485 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x8831}, //12486 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x88B4}, //12487 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x8AA5}, //12488 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0xF903}, //12489 #CJK COMPATIBILITY IDEOGRAPH + {0xCDD0, 0x8F9C}, //12490 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x932E}, //12491 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x96C7}, //12492 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x9867}, //12493 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x9AD8}, //12494 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x9F13}, //12495 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x54ED}, //12496 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x659B}, //12497 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x66F2}, //12498 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x688F}, //12499 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x7A40}, //12500 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x8C37}, //12501 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x9D60}, //12502 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x56F0}, //12503 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x5764}, //12504 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x5D11}, //12505 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x6606}, //12506 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x68B1}, //12507 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x68CD}, //12508 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x6EFE}, //12509 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x7428}, //12510 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x889E}, //12511 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x9BE4}, //12512 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x6C68}, //12513 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0xF904}, //12514 #CJK COMPATIBILITY IDEOGRAPH + {0xCDE9, 0x9AA8}, //12515 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x4F9B}, //12516 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x516C}, //12517 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x5171}, //12518 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x529F}, //12519 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x5B54}, //12520 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x5DE5}, //12521 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x6050}, //12522 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x606D}, //12523 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x62F1}, //12524 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x63A7}, //12525 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x653B}, //12526 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x73D9}, //12527 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x7A7A}, //12528 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x86A3}, //12529 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x8CA2}, //12530 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x978F}, //12531 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x4E32}, //12532 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x5BE1}, //12533 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x6208}, //12534 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x679C}, //12535 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x74DC}, //12536 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x79D1}, //12537 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x83D3}, //12538 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x8A87}, //12539 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x8AB2}, //12540 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x8DE8}, //12541 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x904E}, //12542 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x934B}, //12543 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x9846}, //12544 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x5ED3}, //12545 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x69E8}, //12546 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x85FF}, //12547 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x90ED}, //12548 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0xF905}, //12549 #CJK COMPATIBILITY IDEOGRAPH + {0xCEAE, 0x51A0}, //12550 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x5B98}, //12551 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x5BEC}, //12552 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x6163}, //12553 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x68FA}, //12554 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x6B3E}, //12555 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x704C}, //12556 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x742F}, //12557 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x74D8}, //12558 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x7BA1}, //12559 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x7F50}, //12560 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x83C5}, //12561 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x89C0}, //12562 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x8CAB}, //12563 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x95DC}, //12564 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x9928}, //12565 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x522E}, //12566 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x605D}, //12567 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x62EC}, //12568 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x9002}, //12569 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x4F8A}, //12570 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x5149}, //12571 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x5321}, //12572 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x58D9}, //12573 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x5EE3}, //12574 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x66E0}, //12575 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x6D38}, //12576 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x709A}, //12577 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x72C2}, //12578 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x73D6}, //12579 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x7B50}, //12580 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x80F1}, //12581 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x945B}, //12582 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x5366}, //12583 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x639B}, //12584 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x7F6B}, //12585 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x4E56}, //12586 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x5080}, //12587 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x584A}, //12588 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x58DE}, //12589 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x602A}, //12590 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x6127}, //12591 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x62D0}, //12592 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x69D0}, //12593 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x9B41}, //12594 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x5B8F}, //12595 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x7D18}, //12596 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x80B1}, //12597 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x8F5F}, //12598 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x4EA4}, //12599 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x50D1}, //12600 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x54AC}, //12601 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x55AC}, //12602 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x5B0C}, //12603 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x5DA0}, //12604 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x5DE7}, //12605 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x652A}, //12606 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x654E}, //12607 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x6821}, //12608 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x6A4B}, //12609 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x72E1}, //12610 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x768E}, //12611 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x77EF}, //12612 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x7D5E}, //12613 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x7FF9}, //12614 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x81A0}, //12615 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x854E}, //12616 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x86DF}, //12617 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x8F03}, //12618 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x8F4E}, //12619 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x90CA}, //12620 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x9903}, //12621 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x9A55}, //12622 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x9BAB}, //12623 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x4E18}, //12624 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x4E45}, //12625 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x4E5D}, //12626 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x4EC7}, //12627 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x4FF1}, //12628 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x5177}, //12629 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x52FE}, //12630 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x5340}, //12631 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x53E3}, //12632 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x53E5}, //12633 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x548E}, //12634 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x5614}, //12635 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x5775}, //12636 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x57A2}, //12637 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x5BC7}, //12638 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x5D87}, //12639 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x5ED0}, //12640 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x61FC}, //12641 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x62D8}, //12642 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6551}, //12643 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x67B8}, //12644 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x67E9}, //12645 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x69CB}, //12646 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x6B50}, //12647 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x6BC6}, //12648 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x6BEC}, //12649 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x6C42}, //12650 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x6E9D}, //12651 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x7078}, //12652 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x72D7}, //12653 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7396}, //12654 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x7403}, //12655 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x77BF}, //12656 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x77E9}, //12657 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x7A76}, //12658 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x7D7F}, //12659 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x8009}, //12660 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x81FC}, //12661 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x8205}, //12662 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x820A}, //12663 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x82DF}, //12664 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x8862}, //12665 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x8B33}, //12666 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x8CFC}, //12667 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x8EC0}, //12668 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x9011}, //12669 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x90B1}, //12670 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x9264}, //12671 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x92B6}, //12672 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x99D2}, //12673 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x9A45}, //12674 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x9CE9}, //12675 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x9DD7}, //12676 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x9F9C}, //12677 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x570B}, //12678 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x5C40}, //12679 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x83CA}, //12680 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x97A0}, //12681 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x97AB}, //12682 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x9EB4}, //12683 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x541B}, //12684 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x7A98}, //12685 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x7FA4}, //12686 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x88D9}, //12687 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x8ECD}, //12688 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x90E1}, //12689 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x5800}, //12690 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x5C48}, //12691 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x6398}, //12692 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x7A9F}, //12693 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x5BAE}, //12694 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x5F13}, //12695 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x7A79}, //12696 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x7AAE}, //12697 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x828E}, //12698 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x8EAC}, //12699 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x5026}, //12700 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x5238}, //12701 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x52F8}, //12702 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x5377}, //12703 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x5708}, //12704 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x62F3}, //12705 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x6372}, //12706 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x6B0A}, //12707 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x6DC3}, //12708 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x7737}, //12709 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x53A5}, //12710 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x7357}, //12711 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x8568}, //12712 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x8E76}, //12713 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x95D5}, //12714 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x673A}, //12715 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x6AC3}, //12716 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x6F70}, //12717 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x8A6D}, //12718 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x8ECC}, //12719 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x994B}, //12720 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0xF906}, //12721 #CJK COMPATIBILITY IDEOGRAPH + {0xCFFC, 0x6677}, //12722 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x6B78}, //12723 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x8CB4}, //12724 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x9B3C}, //12725 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0xF907}, //12726 #CJK COMPATIBILITY IDEOGRAPH + {0xD0A3, 0x53EB}, //12727 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x572D}, //12728 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x594E}, //12729 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x63C6}, //12730 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x69FB}, //12731 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x73EA}, //12732 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x7845}, //12733 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x7ABA}, //12734 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x7AC5}, //12735 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x7CFE}, //12736 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x8475}, //12737 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x898F}, //12738 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x8D73}, //12739 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x9035}, //12740 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x95A8}, //12741 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x52FB}, //12742 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x5747}, //12743 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x7547}, //12744 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x7B60}, //12745 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x83CC}, //12746 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x921E}, //12747 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0xF908}, //12748 #CJK COMPATIBILITY IDEOGRAPH + {0xD0B9, 0x6A58}, //12749 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x514B}, //12750 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x524B}, //12751 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x5287}, //12752 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x621F}, //12753 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x68D8}, //12754 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x6975}, //12755 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x9699}, //12756 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x50C5}, //12757 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x52A4}, //12758 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x52E4}, //12759 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x61C3}, //12760 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x65A4}, //12761 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x6839}, //12762 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x69FF}, //12763 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x747E}, //12764 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x7B4B}, //12765 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x82B9}, //12766 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x83EB}, //12767 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x89B2}, //12768 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x8B39}, //12769 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x8FD1}, //12770 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x9949}, //12771 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0xF909}, //12772 #CJK COMPATIBILITY IDEOGRAPH + {0xD0D1, 0x4ECA}, //12773 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5997}, //12774 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x64D2}, //12775 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x6611}, //12776 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x6A8E}, //12777 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x7434}, //12778 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x7981}, //12779 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x79BD}, //12780 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x82A9}, //12781 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x887E}, //12782 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x887F}, //12783 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x895F}, //12784 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0xF90A}, //12785 #CJK COMPATIBILITY IDEOGRAPH + {0xD0DE, 0x9326}, //12786 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x4F0B}, //12787 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x53CA}, //12788 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x6025}, //12789 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x6271}, //12790 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x6C72}, //12791 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x7D1A}, //12792 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x7D66}, //12793 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x4E98}, //12794 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x5162}, //12795 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x77DC}, //12796 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x80AF}, //12797 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x4F01}, //12798 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x4F0E}, //12799 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5176}, //12800 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x5180}, //12801 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x55DC}, //12802 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x5668}, //12803 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x573B}, //12804 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x57FA}, //12805 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x57FC}, //12806 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x5914}, //12807 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x5947}, //12808 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x5993}, //12809 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x5BC4}, //12810 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x5C90}, //12811 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x5D0E}, //12812 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x5DF1}, //12813 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x5E7E}, //12814 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x5FCC}, //12815 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x6280}, //12816 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x65D7}, //12817 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x65E3}, //12818 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x671E}, //12819 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x671F}, //12820 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x675E}, //12821 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x68CB}, //12822 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x68C4}, //12823 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x6A5F}, //12824 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x6B3A}, //12825 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x6C23}, //12826 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x6C7D}, //12827 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x6C82}, //12828 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x6DC7}, //12829 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x7398}, //12830 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x7426}, //12831 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x742A}, //12832 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x7482}, //12833 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x74A3}, //12834 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x7578}, //12835 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x757F}, //12836 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x7881}, //12837 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x78EF}, //12838 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x7941}, //12839 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x7947}, //12840 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x7948}, //12841 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x797A}, //12842 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x7B95}, //12843 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x7D00}, //12844 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x7DBA}, //12845 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x7F88}, //12846 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x8006}, //12847 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x802D}, //12848 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x808C}, //12849 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x8A18}, //12850 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x8B4F}, //12851 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x8C48}, //12852 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x8D77}, //12853 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x9321}, //12854 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x9324}, //12855 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x98E2}, //12856 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x9951}, //12857 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x9A0E}, //12858 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x9A0F}, //12859 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x9A65}, //12860 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x9E92}, //12861 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x7DCA}, //12862 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x4F76}, //12863 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x5409}, //12864 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x62EE}, //12865 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x6854}, //12866 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x91D1}, //12867 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x55AB}, //12868 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x513A}, //12869 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0xF90B}, //12870 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D5, 0xF90C}, //12871 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D6, 0x5A1C}, //12872 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x61E6}, //12873 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0xF90D}, //12874 #CJK COMPATIBILITY IDEOGRAPH + {0xD1D9, 0x62CF}, //12875 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x62FF}, //12876 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0xF90E}, //12877 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DC, 0xF90F}, //12878 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DD, 0xF910}, //12879 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DE, 0xF911}, //12880 #CJK COMPATIBILITY IDEOGRAPH + {0xD1DF, 0xF912}, //12881 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E0, 0xF913}, //12882 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E1, 0x90A3}, //12883 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0xF914}, //12884 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E3, 0xF915}, //12885 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E4, 0xF916}, //12886 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E5, 0xF917}, //12887 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E6, 0xF918}, //12888 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E7, 0x8AFE}, //12889 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0xF919}, //12890 #CJK COMPATIBILITY IDEOGRAPH + {0xD1E9, 0xF91A}, //12891 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EA, 0xF91B}, //12892 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EB, 0xF91C}, //12893 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EC, 0x6696}, //12894 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0xF91D}, //12895 #CJK COMPATIBILITY IDEOGRAPH + {0xD1EE, 0x7156}, //12896 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0xF91E}, //12897 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F0, 0xF91F}, //12898 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F1, 0x96E3}, //12899 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0xF920}, //12900 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F3, 0x634F}, //12901 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x637A}, //12902 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x5357}, //12903 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0xF921}, //12904 #CJK COMPATIBILITY IDEOGRAPH + {0xD1F7, 0x678F}, //12905 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x6960}, //12906 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6E73}, //12907 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0xF922}, //12908 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FB, 0x7537}, //12909 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0xF923}, //12910 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FD, 0xF924}, //12911 #CJK COMPATIBILITY IDEOGRAPH + {0xD1FE, 0xF925}, //12912 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A1, 0x7D0D}, //12913 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0xF926}, //12914 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A3, 0xF927}, //12915 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A4, 0x8872}, //12916 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x56CA}, //12917 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x5A18}, //12918 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0xF928}, //12919 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A8, 0xF929}, //12920 #CJK COMPATIBILITY IDEOGRAPH + {0xD2A9, 0xF92A}, //12921 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AA, 0xF92B}, //12922 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AB, 0xF92C}, //12923 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AC, 0x4E43}, //12924 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0xF92D}, //12925 #CJK COMPATIBILITY IDEOGRAPH + {0xD2AE, 0x5167}, //12926 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x5948}, //12927 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x67F0}, //12928 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x8010}, //12929 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0xF92E}, //12930 #CJK COMPATIBILITY IDEOGRAPH + {0xD2B3, 0x5973}, //12931 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x5E74}, //12932 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x649A}, //12933 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x79CA}, //12934 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x5FF5}, //12935 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x606C}, //12936 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x62C8}, //12937 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x637B}, //12938 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x5BE7}, //12939 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x5BD7}, //12940 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x52AA}, //12941 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0xF92F}, //12942 #CJK COMPATIBILITY IDEOGRAPH + {0xD2BF, 0x5974}, //12943 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x5F29}, //12944 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x6012}, //12945 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0xF930}, //12946 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C3, 0xF931}, //12947 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C4, 0xF932}, //12948 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C5, 0x7459}, //12949 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0xF933}, //12950 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C7, 0xF934}, //12951 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C8, 0xF935}, //12952 #CJK COMPATIBILITY IDEOGRAPH + {0xD2C9, 0xF936}, //12953 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CA, 0xF937}, //12954 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CB, 0xF938}, //12955 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CC, 0x99D1}, //12956 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0xF939}, //12957 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CE, 0xF93A}, //12958 #CJK COMPATIBILITY IDEOGRAPH + {0xD2CF, 0xF93B}, //12959 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D0, 0xF93C}, //12960 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D1, 0xF93D}, //12961 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D2, 0xF93E}, //12962 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D3, 0xF93F}, //12963 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D4, 0xF940}, //12964 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D5, 0xF941}, //12965 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D6, 0xF942}, //12966 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D7, 0xF943}, //12967 #CJK COMPATIBILITY IDEOGRAPH + {0xD2D8, 0x6FC3}, //12968 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0xF944}, //12969 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DA, 0xF945}, //12970 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DB, 0x81BF}, //12971 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x8FB2}, //12972 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x60F1}, //12973 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0xF946}, //12974 #CJK COMPATIBILITY IDEOGRAPH + {0xD2DF, 0xF947}, //12975 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E0, 0x8166}, //12976 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0xF948}, //12977 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E2, 0xF949}, //12978 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E3, 0x5C3F}, //12979 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0xF94A}, //12980 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E5, 0xF94B}, //12981 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E6, 0xF94C}, //12982 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E7, 0xF94D}, //12983 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E8, 0xF94E}, //12984 #CJK COMPATIBILITY IDEOGRAPH + {0xD2E9, 0xF94F}, //12985 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EA, 0xF950}, //12986 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EB, 0xF951}, //12987 #CJK COMPATIBILITY IDEOGRAPH + {0xD2EC, 0x5AE9}, //12988 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x8A25}, //12989 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x677B}, //12990 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x7D10}, //12991 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0xF952}, //12992 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F1, 0xF953}, //12993 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F2, 0xF954}, //12994 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F3, 0xF955}, //12995 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F4, 0xF956}, //12996 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F5, 0xF957}, //12997 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F6, 0x80FD}, //12998 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0xF958}, //12999 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F8, 0xF959}, //13000 #CJK COMPATIBILITY IDEOGRAPH + {0xD2F9, 0x5C3C}, //13001 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x6CE5}, //13002 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x533F}, //13003 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x6EBA}, //13004 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x591A}, //13005 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x8336}, //13006 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x4E39}, //13007 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x4EB6}, //13008 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x4F46}, //13009 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x55AE}, //13010 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x5718}, //13011 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x58C7}, //13012 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x5F56}, //13013 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x65B7}, //13014 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x65E6}, //13015 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x6A80}, //13016 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x6BB5}, //13017 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x6E4D}, //13018 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x77ED}, //13019 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x7AEF}, //13020 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x7C1E}, //13021 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x7DDE}, //13022 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x86CB}, //13023 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x8892}, //13024 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x9132}, //13025 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x935B}, //13026 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x64BB}, //13027 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x6FBE}, //13028 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x737A}, //13029 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x75B8}, //13030 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x9054}, //13031 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x5556}, //13032 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x574D}, //13033 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x61BA}, //13034 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x64D4}, //13035 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x66C7}, //13036 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x6DE1}, //13037 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x6E5B}, //13038 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x6F6D}, //13039 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x6FB9}, //13040 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x75F0}, //13041 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x8043}, //13042 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x81BD}, //13043 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x8541}, //13044 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x8983}, //13045 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x8AC7}, //13046 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x8B5A}, //13047 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x931F}, //13048 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x6C93}, //13049 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x7553}, //13050 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x7B54}, //13051 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x8E0F}, //13052 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x905D}, //13053 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x5510}, //13054 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x5802}, //13055 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x5858}, //13056 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x5E62}, //13057 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x6207}, //13058 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x649E}, //13059 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x68E0}, //13060 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x7576}, //13061 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x7CD6}, //13062 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x87B3}, //13063 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x9EE8}, //13064 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x4EE3}, //13065 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x5788}, //13066 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x576E}, //13067 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x5927}, //13068 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x5C0D}, //13069 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x5CB1}, //13070 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x5E36}, //13071 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x5F85}, //13072 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x6234}, //13073 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x64E1}, //13074 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x73B3}, //13075 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x81FA}, //13076 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x888B}, //13077 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x8CB8}, //13078 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x968A}, //13079 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x9EDB}, //13080 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x5B85}, //13081 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x5FB7}, //13082 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x60B3}, //13083 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x5012}, //13084 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x5200}, //13085 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x5230}, //13086 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x5716}, //13087 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x5835}, //13088 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x5857}, //13089 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x5C0E}, //13090 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x5C60}, //13091 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x5CF6}, //13092 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x5D8B}, //13093 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x5EA6}, //13094 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x5F92}, //13095 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x60BC}, //13096 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x6311}, //13097 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x6389}, //13098 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x6417}, //13099 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x6843}, //13100 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x68F9}, //13101 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x6AC2}, //13102 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x6DD8}, //13103 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x6E21}, //13104 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x6ED4}, //13105 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x6FE4}, //13106 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x71FE}, //13107 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x76DC}, //13108 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x7779}, //13109 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x79B1}, //13110 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x7A3B}, //13111 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x8404}, //13112 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x89A9}, //13113 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x8CED}, //13114 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x8DF3}, //13115 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x8E48}, //13116 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x9003}, //13117 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x9014}, //13118 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x9053}, //13119 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x90FD}, //13120 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x934D}, //13121 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x9676}, //13122 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x97DC}, //13123 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x6BD2}, //13124 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x7006}, //13125 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x7258}, //13126 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x72A2}, //13127 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x7368}, //13128 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x7763}, //13129 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x79BF}, //13130 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x7BE4}, //13131 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x7E9B}, //13132 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x8B80}, //13133 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x58A9}, //13134 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x60C7}, //13135 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x6566}, //13136 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x65FD}, //13137 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x66BE}, //13138 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x6C8C}, //13139 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x711E}, //13140 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x71C9}, //13141 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x8C5A}, //13142 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x9813}, //13143 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x4E6D}, //13144 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x7A81}, //13145 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x4EDD}, //13146 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x51AC}, //13147 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x51CD}, //13148 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x52D5}, //13149 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x540C}, //13150 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x61A7}, //13151 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x6771}, //13152 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x6850}, //13153 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x68DF}, //13154 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x6D1E}, //13155 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x6F7C}, //13156 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x75BC}, //13157 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x77B3}, //13158 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x7AE5}, //13159 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x80F4}, //13160 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x8463}, //13161 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x9285}, //13162 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x515C}, //13163 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x6597}, //13164 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x675C}, //13165 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x6793}, //13166 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x75D8}, //13167 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x7AC7}, //13168 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x8373}, //13169 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0xF95A}, //13170 #CJK COMPATIBILITY IDEOGRAPH + {0xD4E7, 0x8C46}, //13171 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x9017}, //13172 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x982D}, //13173 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x5C6F}, //13174 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x81C0}, //13175 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x829A}, //13176 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x9041}, //13177 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x906F}, //13178 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x920D}, //13179 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x5F97}, //13180 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x5D9D}, //13181 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x6A59}, //13182 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x71C8}, //13183 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x767B}, //13184 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x7B49}, //13185 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x85E4}, //13186 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x8B04}, //13187 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x9127}, //13188 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x9A30}, //13189 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x5587}, //13190 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x61F6}, //13191 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0xF95B}, //13192 #CJK COMPATIBILITY IDEOGRAPH + {0xD4FD, 0x7669}, //13193 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x7F85}, //13194 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x863F}, //13195 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x87BA}, //13196 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x88F8}, //13197 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x908F}, //13198 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0xF95C}, //13199 #CJK COMPATIBILITY IDEOGRAPH + {0xD5A6, 0x6D1B}, //13200 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x70D9}, //13201 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x73DE}, //13202 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x7D61}, //13203 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x843D}, //13204 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0xF95D}, //13205 #CJK COMPATIBILITY IDEOGRAPH + {0xD5AC, 0x916A}, //13206 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x99F1}, //13207 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0xF95E}, //13208 #CJK COMPATIBILITY IDEOGRAPH + {0xD5AF, 0x4E82}, //13209 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x5375}, //13210 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6B04}, //13211 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x6B12}, //13212 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x703E}, //13213 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x721B}, //13214 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x862D}, //13215 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x9E1E}, //13216 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x524C}, //13217 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x8FA3}, //13218 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x5D50}, //13219 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x64E5}, //13220 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x652C}, //13221 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x6B16}, //13222 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6FEB}, //13223 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x7C43}, //13224 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x7E9C}, //13225 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x85CD}, //13226 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x8964}, //13227 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x89BD}, //13228 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x62C9}, //13229 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x81D8}, //13230 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x881F}, //13231 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x5ECA}, //13232 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6717}, //13233 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6D6A}, //13234 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x72FC}, //13235 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x7405}, //13236 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x746F}, //13237 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x8782}, //13238 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x90DE}, //13239 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x4F86}, //13240 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x5D0D}, //13241 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x5FA0}, //13242 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x840A}, //13243 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x51B7}, //13244 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x63A0}, //13245 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x7565}, //13246 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x4EAE}, //13247 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x5006}, //13248 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x5169}, //13249 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x51C9}, //13250 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x6881}, //13251 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x6A11}, //13252 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x7CAE}, //13253 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x7CB1}, //13254 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x7CE7}, //13255 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x826F}, //13256 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x8AD2}, //13257 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x8F1B}, //13258 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x91CF}, //13259 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x4FB6}, //13260 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x5137}, //13261 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x52F5}, //13262 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x5442}, //13263 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x5EEC}, //13264 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x616E}, //13265 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x623E}, //13266 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x65C5}, //13267 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x6ADA}, //13268 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x6FFE}, //13269 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x792A}, //13270 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x85DC}, //13271 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x8823}, //13272 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x95AD}, //13273 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x9A62}, //13274 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x9A6A}, //13275 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x9E97}, //13276 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x9ECE}, //13277 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x529B}, //13278 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x66C6}, //13279 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x6B77}, //13280 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x701D}, //13281 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x792B}, //13282 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x8F62}, //13283 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x9742}, //13284 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6190}, //13285 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x6200}, //13286 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6523}, //13287 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x6F23}, //13288 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x7149}, //13289 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x7489}, //13290 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x7DF4}, //13291 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x806F}, //13292 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x84EE}, //13293 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x8F26}, //13294 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x9023}, //13295 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x934A}, //13296 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x51BD}, //13297 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x5217}, //13298 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x52A3}, //13299 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x6D0C}, //13300 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x70C8}, //13301 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x88C2}, //13302 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x5EC9}, //13303 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x6582}, //13304 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x6BAE}, //13305 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x6FC2}, //13306 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x7C3E}, //13307 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x7375}, //13308 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x4EE4}, //13309 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x4F36}, //13310 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x56F9}, //13311 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0xF95F}, //13312 #CJK COMPATIBILITY IDEOGRAPH + {0xD6B9, 0x5CBA}, //13313 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x5DBA}, //13314 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x601C}, //13315 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x73B2}, //13316 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7B2D}, //13317 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x7F9A}, //13318 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x7FCE}, //13319 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x8046}, //13320 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x901E}, //13321 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x9234}, //13322 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x96F6}, //13323 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x9748}, //13324 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x9818}, //13325 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x9F61}, //13326 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x4F8B}, //13327 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x6FA7}, //13328 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x79AE}, //13329 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x91B4}, //13330 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x96B7}, //13331 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x52DE}, //13332 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0xF960}, //13333 #CJK COMPATIBILITY IDEOGRAPH + {0xD6CE, 0x6488}, //13334 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x64C4}, //13335 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x6AD3}, //13336 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x6F5E}, //13337 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x7018}, //13338 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x7210}, //13339 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x76E7}, //13340 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x8001}, //13341 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x8606}, //13342 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x865C}, //13343 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x8DEF}, //13344 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x8F05}, //13345 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x9732}, //13346 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x9B6F}, //13347 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x9DFA}, //13348 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x9E75}, //13349 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x788C}, //13350 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x797F}, //13351 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7DA0}, //13352 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x83C9}, //13353 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x9304}, //13354 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x9E7F}, //13355 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x9E93}, //13356 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x8AD6}, //13357 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x58DF}, //13358 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x5F04}, //13359 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x6727}, //13360 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x7027}, //13361 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x74CF}, //13362 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x7C60}, //13363 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x807E}, //13364 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x5121}, //13365 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x7028}, //13366 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x7262}, //13367 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x78CA}, //13368 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x8CC2}, //13369 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x8CDA}, //13370 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x8CF4}, //13371 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x96F7}, //13372 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x4E86}, //13373 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x50DA}, //13374 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x5BEE}, //13375 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x5ED6}, //13376 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x6599}, //13377 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x71CE}, //13378 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x7642}, //13379 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x77AD}, //13380 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x804A}, //13381 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x84FC}, //13382 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x907C}, //13383 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x9B27}, //13384 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x9F8D}, //13385 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x58D8}, //13386 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x5A41}, //13387 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x5C62}, //13388 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x6A13}, //13389 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x6DDA}, //13390 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x6F0F}, //13391 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x763B}, //13392 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x7D2F}, //13393 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x7E37}, //13394 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x851E}, //13395 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x8938}, //13396 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x93E4}, //13397 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x964B}, //13398 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x5289}, //13399 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x65D2}, //13400 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x67F3}, //13401 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x69B4}, //13402 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x6D41}, //13403 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x6E9C}, //13404 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x700F}, //13405 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x7409}, //13406 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x7460}, //13407 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x7559}, //13408 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x7624}, //13409 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x786B}, //13410 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x8B2C}, //13411 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x985E}, //13412 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x516D}, //13413 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x622E}, //13414 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x9678}, //13415 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x4F96}, //13416 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x502B}, //13417 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x5D19}, //13418 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x6DEA}, //13419 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x7DB8}, //13420 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x8F2A}, //13421 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x5F8B}, //13422 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x6144}, //13423 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x6817}, //13424 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0xF961}, //13425 #CJK COMPATIBILITY IDEOGRAPH + {0xD7CC, 0x9686}, //13426 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x52D2}, //13427 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x808B}, //13428 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x51DC}, //13429 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x51CC}, //13430 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x695E}, //13431 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x7A1C}, //13432 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x7DBE}, //13433 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x83F1}, //13434 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x9675}, //13435 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x4FDA}, //13436 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x5229}, //13437 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x5398}, //13438 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x540F}, //13439 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x550E}, //13440 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x5C65}, //13441 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x60A7}, //13442 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x674E}, //13443 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x68A8}, //13444 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x6D6C}, //13445 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x7281}, //13446 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x72F8}, //13447 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x7406}, //13448 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x7483}, //13449 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0xF962}, //13450 #CJK COMPATIBILITY IDEOGRAPH + {0xD7E5, 0x75E2}, //13451 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x7C6C}, //13452 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x7F79}, //13453 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x7FB8}, //13454 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x8389}, //13455 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x88CF}, //13456 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x88E1}, //13457 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x91CC}, //13458 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x91D0}, //13459 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x96E2}, //13460 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x9BC9}, //13461 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x541D}, //13462 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x6F7E}, //13463 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x71D0}, //13464 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x7498}, //13465 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x85FA}, //13466 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x8EAA}, //13467 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x96A3}, //13468 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x9C57}, //13469 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x9E9F}, //13470 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x6797}, //13471 #CJK UNIFIED IDEOGRAPH + {0xD7FA, 0x6DCB}, //13472 #CJK UNIFIED IDEOGRAPH + {0xD7FB, 0x7433}, //13473 #CJK UNIFIED IDEOGRAPH + {0xD7FC, 0x81E8}, //13474 #CJK UNIFIED IDEOGRAPH + {0xD7FD, 0x9716}, //13475 #CJK UNIFIED IDEOGRAPH + {0xD7FE, 0x782C}, //13476 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x7ACB}, //13477 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x7B20}, //13478 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x7C92}, //13479 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x6469}, //13480 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x746A}, //13481 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x75F2}, //13482 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x78BC}, //13483 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x78E8}, //13484 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x99AC}, //13485 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x9B54}, //13486 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x9EBB}, //13487 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x5BDE}, //13488 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x5E55}, //13489 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x6F20}, //13490 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x819C}, //13491 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x83AB}, //13492 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x9088}, //13493 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x4E07}, //13494 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x534D}, //13495 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x5A29}, //13496 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x5DD2}, //13497 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x5F4E}, //13498 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x6162}, //13499 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x633D}, //13500 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x6669}, //13501 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x66FC}, //13502 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x6EFF}, //13503 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x6F2B}, //13504 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x7063}, //13505 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x779E}, //13506 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x842C}, //13507 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x8513}, //13508 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x883B}, //13509 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x8F13}, //13510 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x9945}, //13511 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x9C3B}, //13512 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x551C}, //13513 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x62B9}, //13514 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x672B}, //13515 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x6CAB}, //13516 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x8309}, //13517 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x896A}, //13518 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x977A}, //13519 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x4EA1}, //13520 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x5984}, //13521 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x5FD8}, //13522 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x5FD9}, //13523 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x671B}, //13524 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x7DB2}, //13525 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x7F54}, //13526 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x8292}, //13527 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x832B}, //13528 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x83BD}, //13529 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x8F1E}, //13530 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x9099}, //13531 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x57CB}, //13532 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x59B9}, //13533 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5A92}, //13534 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x5BD0}, //13535 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x6627}, //13536 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x679A}, //13537 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x6885}, //13538 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x6BCF}, //13539 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x7164}, //13540 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x7F75}, //13541 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x8CB7}, //13542 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x8CE3}, //13543 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x9081}, //13544 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x9B45}, //13545 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x8108}, //13546 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x8C8A}, //13547 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x964C}, //13548 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x9A40}, //13549 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x9EA5}, //13550 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x5B5F}, //13551 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x6C13}, //13552 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x731B}, //13553 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x76F2}, //13554 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x76DF}, //13555 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x840C}, //13556 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x51AA}, //13557 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x8993}, //13558 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x514D}, //13559 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x5195}, //13560 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x52C9}, //13561 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x68C9}, //13562 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x6C94}, //13563 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x7704}, //13564 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x7720}, //13565 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x7DBF}, //13566 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x7DEC}, //13567 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x9762}, //13568 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x9EB5}, //13569 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x6EC5}, //13570 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x8511}, //13571 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x51A5}, //13572 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x540D}, //13573 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x547D}, //13574 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x660E}, //13575 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x669D}, //13576 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x6927}, //13577 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x6E9F}, //13578 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x76BF}, //13579 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x7791}, //13580 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x8317}, //13581 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x84C2}, //13582 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x879F}, //13583 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x9169}, //13584 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x9298}, //13585 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x9CF4}, //13586 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x8882}, //13587 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x4FAE}, //13588 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x5192}, //13589 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x52DF}, //13590 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x59C6}, //13591 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x5E3D}, //13592 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x6155}, //13593 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x6478}, //13594 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x6479}, //13595 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x66AE}, //13596 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x67D0}, //13597 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x6A21}, //13598 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x6BCD}, //13599 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x6BDB}, //13600 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x725F}, //13601 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x7261}, //13602 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x7441}, //13603 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x7738}, //13604 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x77DB}, //13605 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x8017}, //13606 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x82BC}, //13607 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x8305}, //13608 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x8B00}, //13609 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x8B28}, //13610 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x8C8C}, //13611 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x6728}, //13612 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x6C90}, //13613 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x7267}, //13614 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x76EE}, //13615 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x7766}, //13616 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x7A46}, //13617 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x9DA9}, //13618 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x6B7F}, //13619 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x6C92}, //13620 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x5922}, //13621 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x6726}, //13622 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x8499}, //13623 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x536F}, //13624 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x5893}, //13625 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x5999}, //13626 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x5EDF}, //13627 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x63CF}, //13628 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6634}, //13629 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x6773}, //13630 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x6E3A}, //13631 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x732B}, //13632 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x7AD7}, //13633 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x82D7}, //13634 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x9328}, //13635 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x52D9}, //13636 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x5DEB}, //13637 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x61AE}, //13638 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x61CB}, //13639 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x620A}, //13640 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x62C7}, //13641 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x64AB}, //13642 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x65E0}, //13643 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x6959}, //13644 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x6B66}, //13645 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x6BCB}, //13646 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x7121}, //13647 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x73F7}, //13648 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x755D}, //13649 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x7E46}, //13650 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x821E}, //13651 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x8302}, //13652 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x856A}, //13653 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x8AA3}, //13654 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x8CBF}, //13655 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x9727}, //13656 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x9D61}, //13657 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x58A8}, //13658 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x9ED8}, //13659 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x5011}, //13660 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x520E}, //13661 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x543B}, //13662 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x554F}, //13663 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x6587}, //13664 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x6C76}, //13665 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x7D0A}, //13666 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x7D0B}, //13667 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x805E}, //13668 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x868A}, //13669 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x9580}, //13670 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x96EF}, //13671 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x52FF}, //13672 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x6C95}, //13673 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x7269}, //13674 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x5473}, //13675 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x5A9A}, //13676 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x5C3E}, //13677 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x5D4B}, //13678 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x5F4C}, //13679 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x5FAE}, //13680 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x672A}, //13681 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x68B6}, //13682 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x6963}, //13683 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x6E3C}, //13684 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x6E44}, //13685 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x7709}, //13686 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x7C73}, //13687 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x7F8E}, //13688 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x8587}, //13689 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x8B0E}, //13690 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x8FF7}, //13691 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x9761}, //13692 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x9EF4}, //13693 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x5CB7}, //13694 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x60B6}, //13695 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x610D}, //13696 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x61AB}, //13697 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x654F}, //13698 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x65FB}, //13699 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x65FC}, //13700 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x6C11}, //13701 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x6CEF}, //13702 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x739F}, //13703 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x73C9}, //13704 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x7DE1}, //13705 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x9594}, //13706 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x5BC6}, //13707 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x871C}, //13708 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x8B10}, //13709 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x525D}, //13710 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x535A}, //13711 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x62CD}, //13712 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x640F}, //13713 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x64B2}, //13714 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x6734}, //13715 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x6A38}, //13716 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x6CCA}, //13717 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x73C0}, //13718 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x749E}, //13719 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x7B94}, //13720 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x7C95}, //13721 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x7E1B}, //13722 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x818A}, //13723 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x8236}, //13724 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x8584}, //13725 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x8FEB}, //13726 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x96F9}, //13727 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x99C1}, //13728 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x4F34}, //13729 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x534A}, //13730 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x53CD}, //13731 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x53DB}, //13732 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x62CC}, //13733 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x642C}, //13734 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x6500}, //13735 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x6591}, //13736 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x69C3}, //13737 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x6CEE}, //13738 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x6F58}, //13739 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x73ED}, //13740 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x7554}, //13741 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x7622}, //13742 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x76E4}, //13743 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x76FC}, //13744 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x78D0}, //13745 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x78FB}, //13746 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x792C}, //13747 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x7D46}, //13748 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x822C}, //13749 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x87E0}, //13750 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x8FD4}, //13751 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x9812}, //13752 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x98EF}, //13753 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x52C3}, //13754 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x62D4}, //13755 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x64A5}, //13756 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x6E24}, //13757 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x6F51}, //13758 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x767C}, //13759 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x8DCB}, //13760 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x91B1}, //13761 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x9262}, //13762 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x9AEE}, //13763 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x9B43}, //13764 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x5023}, //13765 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x508D}, //13766 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x574A}, //13767 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x59A8}, //13768 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x5C28}, //13769 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x5E47}, //13770 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x5F77}, //13771 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x623F}, //13772 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x653E}, //13773 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x65B9}, //13774 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x65C1}, //13775 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x6609}, //13776 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x678B}, //13777 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x699C}, //13778 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x6EC2}, //13779 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x78C5}, //13780 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x7D21}, //13781 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x80AA}, //13782 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x8180}, //13783 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x822B}, //13784 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x82B3}, //13785 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x84A1}, //13786 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x868C}, //13787 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x8A2A}, //13788 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x8B17}, //13789 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x90A6}, //13790 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x9632}, //13791 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x9F90}, //13792 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x500D}, //13793 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x4FF3}, //13794 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0xF963}, //13795 #CJK COMPATIBILITY IDEOGRAPH + {0xDBC6, 0x57F9}, //13796 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x5F98}, //13797 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x62DC}, //13798 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x6392}, //13799 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x676F}, //13800 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x6E43}, //13801 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x7119}, //13802 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x76C3}, //13803 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x80CC}, //13804 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x80DA}, //13805 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x88F4}, //13806 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x88F5}, //13807 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x8919}, //13808 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x8CE0}, //13809 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x8F29}, //13810 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x914D}, //13811 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x966A}, //13812 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x4F2F}, //13813 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x4F70}, //13814 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x5E1B}, //13815 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x67CF}, //13816 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x6822}, //13817 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x767D}, //13818 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x767E}, //13819 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x9B44}, //13820 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x5E61}, //13821 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x6A0A}, //13822 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x7169}, //13823 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x71D4}, //13824 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x756A}, //13825 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0xF964}, //13826 #CJK COMPATIBILITY IDEOGRAPH + {0xDBE5, 0x7E41}, //13827 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x8543}, //13828 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x85E9}, //13829 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x98DC}, //13830 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x4F10}, //13831 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x7B4F}, //13832 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x7F70}, //13833 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x95A5}, //13834 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x51E1}, //13835 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x5E06}, //13836 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x68B5}, //13837 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x6C3E}, //13838 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x6C4E}, //13839 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x6CDB}, //13840 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x72AF}, //13841 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x7BC4}, //13842 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x8303}, //13843 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x6CD5}, //13844 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x743A}, //13845 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x50FB}, //13846 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x5288}, //13847 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x58C1}, //13848 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x64D8}, //13849 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x6A97}, //13850 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x74A7}, //13851 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x7656}, //13852 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x78A7}, //13853 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x8617}, //13854 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x95E2}, //13855 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x9739}, //13856 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0xF965}, //13857 #CJK COMPATIBILITY IDEOGRAPH + {0xDCA6, 0x535E}, //13858 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x5F01}, //13859 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x8B8A}, //13860 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x8FA8}, //13861 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x8FAF}, //13862 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x908A}, //13863 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x5225}, //13864 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x77A5}, //13865 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x9C49}, //13866 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x9F08}, //13867 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x4E19}, //13868 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x5002}, //13869 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x5175}, //13870 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x5C5B}, //13871 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x5E77}, //13872 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x661E}, //13873 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x663A}, //13874 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x67C4}, //13875 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x68C5}, //13876 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x70B3}, //13877 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x7501}, //13878 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x75C5}, //13879 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x79C9}, //13880 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x7ADD}, //13881 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x8F27}, //13882 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x9920}, //13883 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x9A08}, //13884 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x4FDD}, //13885 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x5821}, //13886 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x5831}, //13887 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x5BF6}, //13888 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x666E}, //13889 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x6B65}, //13890 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x6D11}, //13891 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x6E7A}, //13892 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x6F7D}, //13893 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x73E4}, //13894 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x752B}, //13895 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x83E9}, //13896 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x88DC}, //13897 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x8913}, //13898 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x8B5C}, //13899 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x8F14}, //13900 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x4F0F}, //13901 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x50D5}, //13902 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x5310}, //13903 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x535C}, //13904 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x5B93}, //13905 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x5FA9}, //13906 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x670D}, //13907 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x798F}, //13908 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x8179}, //13909 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x832F}, //13910 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x8514}, //13911 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x8907}, //13912 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x8986}, //13913 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x8F39}, //13914 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x8F3B}, //13915 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x99A5}, //13916 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x9C12}, //13917 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x672C}, //13918 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x4E76}, //13919 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x4FF8}, //13920 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x5949}, //13921 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x5C01}, //13922 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x5CEF}, //13923 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x5CF0}, //13924 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x6367}, //13925 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x68D2}, //13926 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x70FD}, //13927 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x71A2}, //13928 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x742B}, //13929 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x7E2B}, //13930 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x84EC}, //13931 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x8702}, //13932 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x9022}, //13933 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x92D2}, //13934 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x9CF3}, //13935 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x4E0D}, //13936 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x4ED8}, //13937 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x4FEF}, //13938 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x5085}, //13939 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x5256}, //13940 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x526F}, //13941 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x5426}, //13942 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x5490}, //13943 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x57E0}, //13944 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x592B}, //13945 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x5A66}, //13946 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x5B5A}, //13947 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x5B75}, //13948 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x5BCC}, //13949 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x5E9C}, //13950 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0xF966}, //13951 #CJK COMPATIBILITY IDEOGRAPH + {0xDDA6, 0x6276}, //13952 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x6577}, //13953 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x65A7}, //13954 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x6D6E}, //13955 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x6EA5}, //13956 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x7236}, //13957 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x7B26}, //13958 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x7C3F}, //13959 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x7F36}, //13960 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x8150}, //13961 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x8151}, //13962 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x819A}, //13963 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x8240}, //13964 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x8299}, //13965 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x83A9}, //13966 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x8A03}, //13967 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x8CA0}, //13968 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x8CE6}, //13969 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x8CFB}, //13970 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x8D74}, //13971 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x8DBA}, //13972 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x90E8}, //13973 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x91DC}, //13974 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x961C}, //13975 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x9644}, //13976 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x99D9}, //13977 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x9CE7}, //13978 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x5317}, //13979 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x5206}, //13980 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x5429}, //13981 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x5674}, //13982 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x58B3}, //13983 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x5954}, //13984 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x596E}, //13985 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x5FFF}, //13986 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x61A4}, //13987 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x626E}, //13988 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x6610}, //13989 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x6C7E}, //13990 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x711A}, //13991 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x76C6}, //13992 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x7C89}, //13993 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x7CDE}, //13994 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x7D1B}, //13995 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x82AC}, //13996 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x8CC1}, //13997 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x96F0}, //13998 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0xF967}, //13999 #CJK COMPATIBILITY IDEOGRAPH + {0xDDD6, 0x4F5B}, //14000 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x5F17}, //14001 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x5F7F}, //14002 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x62C2}, //14003 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x5D29}, //14004 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x670B}, //14005 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x68DA}, //14006 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x787C}, //14007 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x7E43}, //14008 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x9D6C}, //14009 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x4E15}, //14010 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x5099}, //14011 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x5315}, //14012 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x532A}, //14013 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x5351}, //14014 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x5983}, //14015 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x5A62}, //14016 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x5E87}, //14017 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x60B2}, //14018 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x618A}, //14019 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x6249}, //14020 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x6279}, //14021 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x6590}, //14022 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x6787}, //14023 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x69A7}, //14024 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x6BD4}, //14025 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x6BD6}, //14026 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x6BD7}, //14027 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x6BD8}, //14028 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x6CB8}, //14029 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0xF968}, //14030 #CJK COMPATIBILITY IDEOGRAPH + {0xDDF5, 0x7435}, //14031 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x75FA}, //14032 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x7812}, //14033 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x7891}, //14034 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x79D5}, //14035 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x79D8}, //14036 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x7C83}, //14037 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0x7DCB}, //14038 #CJK UNIFIED IDEOGRAPH + {0xDDFD, 0x7FE1}, //14039 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x80A5}, //14040 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x813E}, //14041 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x81C2}, //14042 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x83F2}, //14043 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x871A}, //14044 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x88E8}, //14045 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x8AB9}, //14046 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x8B6C}, //14047 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x8CBB}, //14048 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x9119}, //14049 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x975E}, //14050 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x98DB}, //14051 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x9F3B}, //14052 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x56AC}, //14053 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x5B2A}, //14054 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x5F6C}, //14055 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x658C}, //14056 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x6AB3}, //14057 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x6BAF}, //14058 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x6D5C}, //14059 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x6FF1}, //14060 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x7015}, //14061 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x725D}, //14062 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x73AD}, //14063 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x8CA7}, //14064 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x8CD3}, //14065 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x983B}, //14066 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x6191}, //14067 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x6C37}, //14068 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x8058}, //14069 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x9A01}, //14070 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x4E4D}, //14071 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x4E8B}, //14072 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x4E9B}, //14073 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x4ED5}, //14074 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x4F3A}, //14075 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x4F3C}, //14076 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x4F7F}, //14077 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x4FDF}, //14078 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x50FF}, //14079 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x53F2}, //14080 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x53F8}, //14081 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x5506}, //14082 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x55E3}, //14083 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x56DB}, //14084 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x58EB}, //14085 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x5962}, //14086 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x5A11}, //14087 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x5BEB}, //14088 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x5BFA}, //14089 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x5C04}, //14090 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x5DF3}, //14091 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x5E2B}, //14092 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x5F99}, //14093 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x601D}, //14094 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x6368}, //14095 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x659C}, //14096 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x65AF}, //14097 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x67F6}, //14098 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x67FB}, //14099 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x68AD}, //14100 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x6B7B}, //14101 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x6C99}, //14102 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x6CD7}, //14103 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x6E23}, //14104 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x7009}, //14105 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x7345}, //14106 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x7802}, //14107 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x793E}, //14108 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x7940}, //14109 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x7960}, //14110 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x79C1}, //14111 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x7BE9}, //14112 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x7D17}, //14113 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x7D72}, //14114 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x8086}, //14115 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x820D}, //14116 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x838E}, //14117 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x84D1}, //14118 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x86C7}, //14119 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x88DF}, //14120 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x8A50}, //14121 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x8A5E}, //14122 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x8B1D}, //14123 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x8CDC}, //14124 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x8D66}, //14125 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x8FAD}, //14126 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x90AA}, //14127 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x98FC}, //14128 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x99DF}, //14129 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x9E9D}, //14130 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x524A}, //14131 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0xF969}, //14132 #CJK COMPATIBILITY IDEOGRAPH + {0xDEFD, 0x6714}, //14133 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0xF96A}, //14134 #CJK COMPATIBILITY IDEOGRAPH + {0xDFA1, 0x5098}, //14135 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x522A}, //14136 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x5C71}, //14137 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x6563}, //14138 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x6C55}, //14139 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x73CA}, //14140 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x7523}, //14141 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x759D}, //14142 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x7B97}, //14143 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x849C}, //14144 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x9178}, //14145 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x9730}, //14146 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x4E77}, //14147 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x6492}, //14148 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x6BBA}, //14149 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x715E}, //14150 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x85A9}, //14151 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x4E09}, //14152 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0xF96B}, //14153 #CJK COMPATIBILITY IDEOGRAPH + {0xDFB4, 0x6749}, //14154 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x68EE}, //14155 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x6E17}, //14156 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x829F}, //14157 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x8518}, //14158 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x886B}, //14159 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x63F7}, //14160 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x6F81}, //14161 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x9212}, //14162 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x98AF}, //14163 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x4E0A}, //14164 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x50B7}, //14165 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x50CF}, //14166 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x511F}, //14167 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x5546}, //14168 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x55AA}, //14169 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x5617}, //14170 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x5B40}, //14171 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x5C19}, //14172 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x5CE0}, //14173 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x5E38}, //14174 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x5E8A}, //14175 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x5EA0}, //14176 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x5EC2}, //14177 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x60F3}, //14178 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x6851}, //14179 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x6A61}, //14180 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x6E58}, //14181 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x723D}, //14182 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x7240}, //14183 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x72C0}, //14184 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x76F8}, //14185 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x7965}, //14186 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x7BB1}, //14187 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x7FD4}, //14188 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x88F3}, //14189 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x89F4}, //14190 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x8A73}, //14191 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x8C61}, //14192 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x8CDE}, //14193 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x971C}, //14194 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x585E}, //14195 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x74BD}, //14196 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x8CFD}, //14197 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x55C7}, //14198 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0xF96C}, //14199 #CJK COMPATIBILITY IDEOGRAPH + {0xDFE2, 0x7A61}, //14200 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x7D22}, //14201 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x8272}, //14202 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x7272}, //14203 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x751F}, //14204 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x7525}, //14205 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0xF96D}, //14206 #CJK COMPATIBILITY IDEOGRAPH + {0xDFE9, 0x7B19}, //14207 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x5885}, //14208 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x58FB}, //14209 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x5DBC}, //14210 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x5E8F}, //14211 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x5EB6}, //14212 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x5F90}, //14213 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x6055}, //14214 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x6292}, //14215 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x637F}, //14216 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x654D}, //14217 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x6691}, //14218 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x66D9}, //14219 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x66F8}, //14220 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x6816}, //14221 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x68F2}, //14222 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x7280}, //14223 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x745E}, //14224 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x7B6E}, //14225 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x7D6E}, //14226 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x7DD6}, //14227 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x7F72}, //14228 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x80E5}, //14229 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x8212}, //14230 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x85AF}, //14231 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x897F}, //14232 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x8A93}, //14233 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x901D}, //14234 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x92E4}, //14235 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x9ECD}, //14236 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x9F20}, //14237 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x5915}, //14238 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x596D}, //14239 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x5E2D}, //14240 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x60DC}, //14241 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x6614}, //14242 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x6673}, //14243 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x6790}, //14244 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x6C50}, //14245 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x6DC5}, //14246 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x6F5F}, //14247 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x77F3}, //14248 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x78A9}, //14249 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x84C6}, //14250 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x91CB}, //14251 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x932B}, //14252 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x4ED9}, //14253 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x50CA}, //14254 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x5148}, //14255 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x5584}, //14256 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x5B0B}, //14257 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x5BA3}, //14258 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x6247}, //14259 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x657E}, //14260 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x65CB}, //14261 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x6E32}, //14262 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x717D}, //14263 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x7401}, //14264 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x7444}, //14265 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x7487}, //14266 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x74BF}, //14267 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x766C}, //14268 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x79AA}, //14269 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x7DDA}, //14270 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x7E55}, //14271 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x7FA8}, //14272 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x817A}, //14273 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x81B3}, //14274 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x8239}, //14275 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x861A}, //14276 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x87EC}, //14277 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x8A75}, //14278 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x8DE3}, //14279 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x9078}, //14280 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x9291}, //14281 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x9425}, //14282 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x994D}, //14283 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x9BAE}, //14284 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x5368}, //14285 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x5C51}, //14286 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x6954}, //14287 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x6CC4}, //14288 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x6D29}, //14289 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x6E2B}, //14290 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x820C}, //14291 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x859B}, //14292 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x893B}, //14293 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x8A2D}, //14294 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x8AAA}, //14295 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x96EA}, //14296 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x9F67}, //14297 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x5261}, //14298 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x66B9}, //14299 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x6BB2}, //14300 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x7E96}, //14301 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x87FE}, //14302 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x8D0D}, //14303 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x9583}, //14304 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x965D}, //14305 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x651D}, //14306 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x6D89}, //14307 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x71EE}, //14308 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0xF96E}, //14309 #CJK COMPATIBILITY IDEOGRAPH + {0xE0F2, 0x57CE}, //14310 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x59D3}, //14311 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x5BAC}, //14312 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x6027}, //14313 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x60FA}, //14314 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x6210}, //14315 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x661F}, //14316 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x665F}, //14317 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x7329}, //14318 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x73F9}, //14319 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x76DB}, //14320 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x7701}, //14321 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x7B6C}, //14322 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x8056}, //14323 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x8072}, //14324 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x8165}, //14325 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x8AA0}, //14326 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x9192}, //14327 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x4E16}, //14328 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x52E2}, //14329 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x6B72}, //14330 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x6D17}, //14331 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x7A05}, //14332 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x7B39}, //14333 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x7D30}, //14334 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0xF96F}, //14335 #CJK COMPATIBILITY IDEOGRAPH + {0xE1AE, 0x8CB0}, //14336 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x53EC}, //14337 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x562F}, //14338 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5851}, //14339 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5BB5}, //14340 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5C0F}, //14341 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5C11}, //14342 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5DE2}, //14343 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x6240}, //14344 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x6383}, //14345 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x6414}, //14346 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x662D}, //14347 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x68B3}, //14348 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x6CBC}, //14349 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x6D88}, //14350 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x6EAF}, //14351 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x701F}, //14352 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x70A4}, //14353 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x71D2}, //14354 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x7526}, //14355 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x758F}, //14356 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x758E}, //14357 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x7619}, //14358 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x7B11}, //14359 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x7BE0}, //14360 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x7C2B}, //14361 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x7D20}, //14362 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x7D39}, //14363 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x852C}, //14364 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x856D}, //14365 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x8607}, //14366 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x8A34}, //14367 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x900D}, //14368 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x9061}, //14369 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x90B5}, //14370 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x92B7}, //14371 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x97F6}, //14372 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x9A37}, //14373 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x4FD7}, //14374 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x5C6C}, //14375 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x675F}, //14376 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x6D91}, //14377 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x7C9F}, //14378 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x7E8C}, //14379 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x8B16}, //14380 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x8D16}, //14381 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x901F}, //14382 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x5B6B}, //14383 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x5DFD}, //14384 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x640D}, //14385 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x84C0}, //14386 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x905C}, //14387 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x98E1}, //14388 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x7387}, //14389 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x5B8B}, //14390 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x609A}, //14391 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x677E}, //14392 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x6DDE}, //14393 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x8A1F}, //14394 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x8AA6}, //14395 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x9001}, //14396 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x980C}, //14397 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x5237}, //14398 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0xF970}, //14399 #CJK COMPATIBILITY IDEOGRAPH + {0xE1EE, 0x7051}, //14400 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x788E}, //14401 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x9396}, //14402 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x8870}, //14403 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x91D7}, //14404 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x4FEE}, //14405 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x53D7}, //14406 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x55FD}, //14407 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x56DA}, //14408 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x5782}, //14409 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x58FD}, //14410 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x5AC2}, //14411 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x5B88}, //14412 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x5CAB}, //14413 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x5CC0}, //14414 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x5E25}, //14415 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x6101}, //14416 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x620D}, //14417 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x624B}, //14418 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x6388}, //14419 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x641C}, //14420 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x6536}, //14421 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x6578}, //14422 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x6A39}, //14423 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x6B8A}, //14424 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x6C34}, //14425 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x6D19}, //14426 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x6F31}, //14427 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x71E7}, //14428 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x72E9}, //14429 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x7378}, //14430 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x7407}, //14431 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x74B2}, //14432 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x7626}, //14433 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x7761}, //14434 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x79C0}, //14435 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x7A57}, //14436 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x7AEA}, //14437 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x7CB9}, //14438 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x7D8F}, //14439 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x7DAC}, //14440 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x7E61}, //14441 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7F9E}, //14442 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x8129}, //14443 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x8331}, //14444 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x8490}, //14445 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x84DA}, //14446 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x85EA}, //14447 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x8896}, //14448 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x8AB0}, //14449 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x8B90}, //14450 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x8F38}, //14451 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x9042}, //14452 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x9083}, //14453 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x916C}, //14454 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x9296}, //14455 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x92B9}, //14456 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x968B}, //14457 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x96A7}, //14458 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x96A8}, //14459 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x96D6}, //14460 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x9700}, //14461 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x9808}, //14462 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x9996}, //14463 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x9AD3}, //14464 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x9B1A}, //14465 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x53D4}, //14466 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x587E}, //14467 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x5919}, //14468 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x5B70}, //14469 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x5BBF}, //14470 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x6DD1}, //14471 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x6F5A}, //14472 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x719F}, //14473 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7421}, //14474 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x74B9}, //14475 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x8085}, //14476 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x83FD}, //14477 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x5DE1}, //14478 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x5F87}, //14479 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x5FAA}, //14480 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x6042}, //14481 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x65EC}, //14482 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x6812}, //14483 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x696F}, //14484 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x6A53}, //14485 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x6B89}, //14486 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x6D35}, //14487 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x6DF3}, //14488 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x73E3}, //14489 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x76FE}, //14490 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x77AC}, //14491 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x7B4D}, //14492 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x7D14}, //14493 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x8123}, //14494 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x821C}, //14495 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x8340}, //14496 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x84F4}, //14497 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x8563}, //14498 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x8A62}, //14499 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x8AC4}, //14500 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x9187}, //14501 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x931E}, //14502 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x9806}, //14503 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x99B4}, //14504 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x620C}, //14505 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x8853}, //14506 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x8FF0}, //14507 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x9265}, //14508 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x5D07}, //14509 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x5D27}, //14510 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x5D69}, //14511 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x745F}, //14512 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x819D}, //14513 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x8768}, //14514 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x6FD5}, //14515 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x62FE}, //14516 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x7FD2}, //14517 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x8936}, //14518 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x8972}, //14519 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x4E1E}, //14520 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x4E58}, //14521 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x50E7}, //14522 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x52DD}, //14523 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x5347}, //14524 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x627F}, //14525 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x6607}, //14526 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x7E69}, //14527 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x8805}, //14528 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x965E}, //14529 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x4F8D}, //14530 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x5319}, //14531 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x5636}, //14532 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x59CB}, //14533 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x5AA4}, //14534 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x5C38}, //14535 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x5C4E}, //14536 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x5C4D}, //14537 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x5E02}, //14538 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x5F11}, //14539 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x6043}, //14540 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x65BD}, //14541 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x662F}, //14542 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x6642}, //14543 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x67BE}, //14544 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x67F4}, //14545 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x731C}, //14546 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x77E2}, //14547 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x793A}, //14548 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x7FC5}, //14549 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x8494}, //14550 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x84CD}, //14551 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x8996}, //14552 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x8A66}, //14553 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x8A69}, //14554 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x8AE1}, //14555 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x8C55}, //14556 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x8C7A}, //14557 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x57F4}, //14558 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x5BD4}, //14559 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x5F0F}, //14560 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x606F}, //14561 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x62ED}, //14562 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x690D}, //14563 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x6B96}, //14564 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x6E5C}, //14565 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x7184}, //14566 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x7BD2}, //14567 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x8755}, //14568 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x8B58}, //14569 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8EFE}, //14570 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x98DF}, //14571 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x98FE}, //14572 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x4F38}, //14573 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x4F81}, //14574 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x4FE1}, //14575 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x547B}, //14576 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x5A20}, //14577 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x5BB8}, //14578 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x613C}, //14579 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x65B0}, //14580 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x6668}, //14581 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x71FC}, //14582 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x7533}, //14583 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x795E}, //14584 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x7D33}, //14585 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x814E}, //14586 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x81E3}, //14587 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x8398}, //14588 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x85AA}, //14589 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x85CE}, //14590 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x8703}, //14591 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x8A0A}, //14592 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x8EAB}, //14593 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x8F9B}, //14594 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0xF971}, //14595 #CJK COMPATIBILITY IDEOGRAPH + {0xE3F6, 0x8FC5}, //14596 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x5931}, //14597 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x5BA4}, //14598 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x5BE6}, //14599 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x6089}, //14600 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x5BE9}, //14601 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x5C0B}, //14602 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x5FC3}, //14603 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x6C81}, //14604 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0xF972}, //14605 #CJK COMPATIBILITY IDEOGRAPH + {0xE4A2, 0x6DF1}, //14606 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x700B}, //14607 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x751A}, //14608 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x82AF}, //14609 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x8AF6}, //14610 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x4EC0}, //14611 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x5341}, //14612 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0xF973}, //14613 #CJK COMPATIBILITY IDEOGRAPH + {0xE4AA, 0x96D9}, //14614 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x6C0F}, //14615 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x4E9E}, //14616 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x4FC4}, //14617 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x5152}, //14618 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x555E}, //14619 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x5A25}, //14620 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x5CE8}, //14621 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x6211}, //14622 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x7259}, //14623 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x82BD}, //14624 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x83AA}, //14625 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x86FE}, //14626 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x8859}, //14627 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x8A1D}, //14628 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x963F}, //14629 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x96C5}, //14630 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x9913}, //14631 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x9D09}, //14632 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x9D5D}, //14633 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x580A}, //14634 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x5CB3}, //14635 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x5DBD}, //14636 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x5E44}, //14637 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x60E1}, //14638 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x6115}, //14639 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x63E1}, //14640 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x6A02}, //14641 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x6E25}, //14642 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x9102}, //14643 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x9354}, //14644 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x984E}, //14645 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x9C10}, //14646 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x9F77}, //14647 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x5B89}, //14648 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x5CB8}, //14649 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x6309}, //14650 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x664F}, //14651 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x6848}, //14652 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x773C}, //14653 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x96C1}, //14654 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x978D}, //14655 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x9854}, //14656 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x9B9F}, //14657 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x65A1}, //14658 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x8B01}, //14659 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x8ECB}, //14660 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x95BC}, //14661 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x5535}, //14662 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x5CA9}, //14663 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x5DD6}, //14664 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x5EB5}, //14665 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x6697}, //14666 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x764C}, //14667 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x83F4}, //14668 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x95C7}, //14669 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x58D3}, //14670 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x62BC}, //14671 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x72CE}, //14672 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x9D28}, //14673 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x4EF0}, //14674 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x592E}, //14675 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x600F}, //14676 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x663B}, //14677 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x6B83}, //14678 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x79E7}, //14679 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x9D26}, //14680 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x5393}, //14681 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x54C0}, //14682 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x57C3}, //14683 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x5D16}, //14684 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x611B}, //14685 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x66D6}, //14686 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x6DAF}, //14687 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x788D}, //14688 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x827E}, //14689 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x9698}, //14690 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x9744}, //14691 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x5384}, //14692 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x627C}, //14693 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x6396}, //14694 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x6DB2}, //14695 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x7E0A}, //14696 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x814B}, //14697 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x984D}, //14698 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x6AFB}, //14699 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x7F4C}, //14700 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x9DAF}, //14701 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x9E1A}, //14702 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x4E5F}, //14703 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x503B}, //14704 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x51B6}, //14705 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x591C}, //14706 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x60F9}, //14707 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x63F6}, //14708 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x6930}, //14709 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x723A}, //14710 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x8036}, //14711 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0xF974}, //14712 #CJK COMPATIBILITY IDEOGRAPH + {0xE5AF, 0x91CE}, //14713 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x5F31}, //14714 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0xF975}, //14715 #CJK COMPATIBILITY IDEOGRAPH + {0xE5B2, 0xF976}, //14716 #CJK COMPATIBILITY IDEOGRAPH + {0xE5B3, 0x7D04}, //14717 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x82E5}, //14718 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x846F}, //14719 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x84BB}, //14720 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x85E5}, //14721 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x8E8D}, //14722 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0xF977}, //14723 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BA, 0x4F6F}, //14724 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0xF978}, //14725 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BC, 0xF979}, //14726 #CJK COMPATIBILITY IDEOGRAPH + {0xE5BD, 0x58E4}, //14727 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x5B43}, //14728 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x6059}, //14729 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x63DA}, //14730 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x6518}, //14731 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x656D}, //14732 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x6698}, //14733 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0xF97A}, //14734 #CJK COMPATIBILITY IDEOGRAPH + {0xE5C5, 0x694A}, //14735 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x6A23}, //14736 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x6D0B}, //14737 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x7001}, //14738 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x716C}, //14739 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x75D2}, //14740 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x760D}, //14741 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x79B3}, //14742 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x7A70}, //14743 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0xF97B}, //14744 #CJK COMPATIBILITY IDEOGRAPH + {0xE5CF, 0x7F8A}, //14745 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0xF97C}, //14746 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D1, 0x8944}, //14747 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0xF97D}, //14748 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D3, 0x8B93}, //14749 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x91C0}, //14750 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x967D}, //14751 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0xF97E}, //14752 #CJK COMPATIBILITY IDEOGRAPH + {0xE5D7, 0x990A}, //14753 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x5704}, //14754 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x5FA1}, //14755 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x65BC}, //14756 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x6F01}, //14757 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x7600}, //14758 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x79A6}, //14759 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x8A9E}, //14760 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x99AD}, //14761 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x9B5A}, //14762 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x9F6C}, //14763 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x5104}, //14764 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x61B6}, //14765 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x6291}, //14766 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x6A8D}, //14767 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x81C6}, //14768 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x5043}, //14769 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x5830}, //14770 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x5F66}, //14771 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x7109}, //14772 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x8A00}, //14773 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x8AFA}, //14774 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x5B7C}, //14775 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x8616}, //14776 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x4FFA}, //14777 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x513C}, //14778 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x56B4}, //14779 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x5944}, //14780 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x63A9}, //14781 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x6DF9}, //14782 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x5DAA}, //14783 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x696D}, //14784 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x5186}, //14785 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x4E88}, //14786 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x4F59}, //14787 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0xF97F}, //14788 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FB, 0xF980}, //14789 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FC, 0xF981}, //14790 #CJK COMPATIBILITY IDEOGRAPH + {0xE5FD, 0x5982}, //14791 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0xF982}, //14792 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A1, 0xF983}, //14793 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A2, 0x6B5F}, //14794 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x6C5D}, //14795 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0xF984}, //14796 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A5, 0x74B5}, //14797 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x7916}, //14798 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0xF985}, //14799 #CJK COMPATIBILITY IDEOGRAPH + {0xE6A8, 0x8207}, //14800 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x8245}, //14801 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x8339}, //14802 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x8F3F}, //14803 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x8F5D}, //14804 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0xF986}, //14805 #CJK COMPATIBILITY IDEOGRAPH + {0xE6AE, 0x9918}, //14806 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0xF987}, //14807 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B0, 0xF988}, //14808 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B1, 0xF989}, //14809 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B2, 0x4EA6}, //14810 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0xF98A}, //14811 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B4, 0x57DF}, //14812 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x5F79}, //14813 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x6613}, //14814 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0xF98B}, //14815 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B8, 0xF98C}, //14816 #CJK COMPATIBILITY IDEOGRAPH + {0xE6B9, 0x75AB}, //14817 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x7E79}, //14818 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x8B6F}, //14819 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0xF98D}, //14820 #CJK COMPATIBILITY IDEOGRAPH + {0xE6BD, 0x9006}, //14821 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x9A5B}, //14822 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x56A5}, //14823 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x5827}, //14824 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x59F8}, //14825 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x5A1F}, //14826 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x5BB4}, //14827 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0xF98E}, //14828 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C5, 0x5EF6}, //14829 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0xF98F}, //14830 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C7, 0xF990}, //14831 #CJK COMPATIBILITY IDEOGRAPH + {0xE6C8, 0x6350}, //14832 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x633B}, //14833 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0xF991}, //14834 #CJK COMPATIBILITY IDEOGRAPH + {0xE6CB, 0x693D}, //14835 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x6C87}, //14836 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x6CBF}, //14837 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x6D8E}, //14838 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x6D93}, //14839 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x6DF5}, //14840 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x6F14}, //14841 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0xF992}, //14842 #CJK COMPATIBILITY IDEOGRAPH + {0xE6D3, 0x70DF}, //14843 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x7136}, //14844 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x7159}, //14845 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0xF993}, //14846 #CJK COMPATIBILITY IDEOGRAPH + {0xE6D7, 0x71C3}, //14847 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x71D5}, //14848 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0xF994}, //14849 #CJK COMPATIBILITY IDEOGRAPH + {0xE6DA, 0x784F}, //14850 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x786F}, //14851 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0xF995}, //14852 #CJK COMPATIBILITY IDEOGRAPH + {0xE6DD, 0x7B75}, //14853 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x7DE3}, //14854 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0xF996}, //14855 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E0, 0x7E2F}, //14856 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0xF997}, //14857 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E2, 0x884D}, //14858 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x8EDF}, //14859 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0xF998}, //14860 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E5, 0xF999}, //14861 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E6, 0xF99A}, //14862 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E7, 0x925B}, //14863 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0xF99B}, //14864 #CJK COMPATIBILITY IDEOGRAPH + {0xE6E9, 0x9CF6}, //14865 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0xF99C}, //14866 #CJK COMPATIBILITY IDEOGRAPH + {0xE6EB, 0xF99D}, //14867 #CJK COMPATIBILITY IDEOGRAPH + {0xE6EC, 0xF99E}, //14868 #CJK COMPATIBILITY IDEOGRAPH + {0xE6ED, 0x6085}, //14869 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x6D85}, //14870 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0xF99F}, //14871 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F0, 0x71B1}, //14872 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0xF9A0}, //14873 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F2, 0xF9A1}, //14874 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F3, 0x95B1}, //14875 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x53AD}, //14876 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0xF9A2}, //14877 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F6, 0xF9A3}, //14878 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F7, 0xF9A4}, //14879 #CJK COMPATIBILITY IDEOGRAPH + {0xE6F8, 0x67D3}, //14880 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0xF9A5}, //14881 #CJK COMPATIBILITY IDEOGRAPH + {0xE6FA, 0x708E}, //14882 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x7130}, //14883 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x7430}, //14884 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x8276}, //14885 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x82D2}, //14886 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0xF9A6}, //14887 #CJK COMPATIBILITY IDEOGRAPH + {0xE7A2, 0x95BB}, //14888 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x9AE5}, //14889 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x9E7D}, //14890 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x66C4}, //14891 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0xF9A7}, //14892 #CJK COMPATIBILITY IDEOGRAPH + {0xE7A7, 0x71C1}, //14893 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x8449}, //14894 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0xF9A8}, //14895 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AA, 0xF9A9}, //14896 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AB, 0x584B}, //14897 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0xF9AA}, //14898 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AD, 0xF9AB}, //14899 #CJK COMPATIBILITY IDEOGRAPH + {0xE7AE, 0x5DB8}, //14900 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x5F71}, //14901 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0xF9AC}, //14902 #CJK COMPATIBILITY IDEOGRAPH + {0xE7B1, 0x6620}, //14903 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x668E}, //14904 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x6979}, //14905 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x69AE}, //14906 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x6C38}, //14907 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x6CF3}, //14908 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x6E36}, //14909 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x6F41}, //14910 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x6FDA}, //14911 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x701B}, //14912 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x702F}, //14913 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x7150}, //14914 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x71DF}, //14915 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x7370}, //14916 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0xF9AD}, //14917 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C0, 0x745B}, //14918 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0xF9AE}, //14919 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C2, 0x74D4}, //14920 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x76C8}, //14921 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x7A4E}, //14922 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x7E93}, //14923 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0xF9AF}, //14924 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C7, 0xF9B0}, //14925 #CJK COMPATIBILITY IDEOGRAPH + {0xE7C8, 0x82F1}, //14926 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x8A60}, //14927 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x8FCE}, //14928 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0xF9B1}, //14929 #CJK COMPATIBILITY IDEOGRAPH + {0xE7CC, 0x9348}, //14930 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0xF9B2}, //14931 #CJK COMPATIBILITY IDEOGRAPH + {0xE7CE, 0x9719}, //14932 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0xF9B3}, //14933 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D0, 0xF9B4}, //14934 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D1, 0x4E42}, //14935 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x502A}, //14936 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0xF9B5}, //14937 #CJK COMPATIBILITY IDEOGRAPH + {0xE7D4, 0x5208}, //14938 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x53E1}, //14939 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x66F3}, //14940 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x6C6D}, //14941 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x6FCA}, //14942 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x730A}, //14943 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x777F}, //14944 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x7A62}, //14945 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x82AE}, //14946 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x85DD}, //14947 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x8602}, //14948 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0xF9B6}, //14949 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E0, 0x88D4}, //14950 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x8A63}, //14951 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x8B7D}, //14952 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x8C6B}, //14953 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0xF9B7}, //14954 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E5, 0x92B3}, //14955 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0xF9B8}, //14956 #CJK COMPATIBILITY IDEOGRAPH + {0xE7E7, 0x9713}, //14957 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x9810}, //14958 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x4E94}, //14959 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x4F0D}, //14960 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x4FC9}, //14961 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x50B2}, //14962 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x5348}, //14963 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x543E}, //14964 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x5433}, //14965 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x55DA}, //14966 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x5862}, //14967 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x58BA}, //14968 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x5967}, //14969 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x5A1B}, //14970 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x5BE4}, //14971 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x609F}, //14972 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0xF9B9}, //14973 #CJK COMPATIBILITY IDEOGRAPH + {0xE7F8, 0x61CA}, //14974 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x6556}, //14975 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x65FF}, //14976 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x6664}, //14977 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x68A7}, //14978 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x6C5A}, //14979 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x6FB3}, //14980 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x70CF}, //14981 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x71AC}, //14982 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x7352}, //14983 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x7B7D}, //14984 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x8708}, //14985 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x8AA4}, //14986 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x9C32}, //14987 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x9F07}, //14988 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x5C4B}, //14989 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x6C83}, //14990 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x7344}, //14991 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x7389}, //14992 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x923A}, //14993 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x6EAB}, //14994 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x7465}, //14995 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x761F}, //14996 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x7A69}, //14997 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x7E15}, //14998 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x860A}, //14999 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x5140}, //15000 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x58C5}, //15001 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x64C1}, //15002 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x74EE}, //15003 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x7515}, //15004 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x7670}, //15005 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x7FC1}, //15006 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9095}, //15007 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x96CD}, //15008 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9954}, //15009 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x6E26}, //15010 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x74E6}, //15011 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x7AA9}, //15012 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x7AAA}, //15013 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x81E5}, //15014 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x86D9}, //15015 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x8778}, //15016 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x8A1B}, //15017 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x5A49}, //15018 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x5B8C}, //15019 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x5B9B}, //15020 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x68A1}, //15021 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x6900}, //15022 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x6D63}, //15023 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x73A9}, //15024 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x7413}, //15025 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x742C}, //15026 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x7897}, //15027 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x7DE9}, //15028 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x7FEB}, //15029 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x8118}, //15030 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x8155}, //15031 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x839E}, //15032 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x8C4C}, //15033 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x962E}, //15034 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9811}, //15035 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x66F0}, //15036 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x5F80}, //15037 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x65FA}, //15038 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x6789}, //15039 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x6C6A}, //15040 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x738B}, //15041 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x502D}, //15042 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x5A03}, //15043 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x6B6A}, //15044 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x77EE}, //15045 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x5916}, //15046 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x5D6C}, //15047 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x5DCD}, //15048 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x7325}, //15049 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x754F}, //15050 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0xF9BA}, //15051 #CJK COMPATIBILITY IDEOGRAPH + {0xE8E8, 0xF9BB}, //15052 #CJK COMPATIBILITY IDEOGRAPH + {0xE8E9, 0x50E5}, //15053 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x51F9}, //15054 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x582F}, //15055 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x592D}, //15056 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x5996}, //15057 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x59DA}, //15058 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x5BE5}, //15059 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0xF9BC}, //15060 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F1, 0xF9BD}, //15061 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F2, 0x5DA2}, //15062 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x62D7}, //15063 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x6416}, //15064 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x6493}, //15065 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x64FE}, //15066 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0xF9BE}, //15067 #CJK COMPATIBILITY IDEOGRAPH + {0xE8F8, 0x66DC}, //15068 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0xF9BF}, //15069 #CJK COMPATIBILITY IDEOGRAPH + {0xE8FA, 0x6A48}, //15070 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0xF9C0}, //15071 #CJK COMPATIBILITY IDEOGRAPH + {0xE8FC, 0x71FF}, //15072 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x7464}, //15073 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0xF9C1}, //15074 #CJK COMPATIBILITY IDEOGRAPH + {0xE9A1, 0x7A88}, //15075 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x7AAF}, //15076 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x7E47}, //15077 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x7E5E}, //15078 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x8000}, //15079 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x8170}, //15080 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0xF9C2}, //15081 #CJK COMPATIBILITY IDEOGRAPH + {0xE9A8, 0x87EF}, //15082 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x8981}, //15083 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x8B20}, //15084 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x9059}, //15085 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0xF9C3}, //15086 #CJK COMPATIBILITY IDEOGRAPH + {0xE9AD, 0x9080}, //15087 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x9952}, //15088 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x617E}, //15089 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x6B32}, //15090 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x6D74}, //15091 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x7E1F}, //15092 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x8925}, //15093 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x8FB1}, //15094 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x4FD1}, //15095 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x50AD}, //15096 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x5197}, //15097 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x52C7}, //15098 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x57C7}, //15099 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x5889}, //15100 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x5BB9}, //15101 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x5EB8}, //15102 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x6142}, //15103 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x6995}, //15104 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x6D8C}, //15105 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x6E67}, //15106 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x6EB6}, //15107 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x7194}, //15108 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x7462}, //15109 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x7528}, //15110 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x752C}, //15111 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x8073}, //15112 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x8338}, //15113 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x84C9}, //15114 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x8E0A}, //15115 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x9394}, //15116 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x93DE}, //15117 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0xF9C4}, //15118 #CJK COMPATIBILITY IDEOGRAPH + {0xE9CD, 0x4E8E}, //15119 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x4F51}, //15120 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x5076}, //15121 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x512A}, //15122 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x53C8}, //15123 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x53CB}, //15124 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x53F3}, //15125 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x5B87}, //15126 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x5BD3}, //15127 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x5C24}, //15128 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x611A}, //15129 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6182}, //15130 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x65F4}, //15131 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x725B}, //15132 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x7397}, //15133 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x7440}, //15134 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x76C2}, //15135 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x7950}, //15136 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x7991}, //15137 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x79B9}, //15138 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x7D06}, //15139 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x7FBD}, //15140 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x828B}, //15141 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x85D5}, //15142 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x865E}, //15143 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x8FC2}, //15144 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x9047}, //15145 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x90F5}, //15146 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x91EA}, //15147 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x9685}, //15148 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x96E8}, //15149 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x96E9}, //15150 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x52D6}, //15151 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x5F67}, //15152 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x65ED}, //15153 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x6631}, //15154 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x682F}, //15155 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x715C}, //15156 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x7A36}, //15157 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x90C1}, //15158 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x980A}, //15159 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x4E91}, //15160 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0xF9C5}, //15161 #CJK COMPATIBILITY IDEOGRAPH + {0xE9F8, 0x6A52}, //15162 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x6B9E}, //15163 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x6F90}, //15164 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x7189}, //15165 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x8018}, //15166 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x82B8}, //15167 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x8553}, //15168 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x904B}, //15169 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x9695}, //15170 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x96F2}, //15171 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x97FB}, //15172 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x851A}, //15173 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x9B31}, //15174 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x4E90}, //15175 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x718A}, //15176 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x96C4}, //15177 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x5143}, //15178 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x539F}, //15179 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x54E1}, //15180 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x5713}, //15181 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x5712}, //15182 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x57A3}, //15183 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x5A9B}, //15184 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x5AC4}, //15185 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x5BC3}, //15186 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x6028}, //15187 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x613F}, //15188 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x63F4}, //15189 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x6C85}, //15190 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x6D39}, //15191 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x6E72}, //15192 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x6E90}, //15193 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x7230}, //15194 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x733F}, //15195 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x7457}, //15196 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x82D1}, //15197 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x8881}, //15198 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x8F45}, //15199 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x9060}, //15200 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0xF9C6}, //15201 #CJK COMPATIBILITY IDEOGRAPH + {0xEAC2, 0x9662}, //15202 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x9858}, //15203 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x9D1B}, //15204 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x6708}, //15205 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x8D8A}, //15206 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x925E}, //15207 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x4F4D}, //15208 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x5049}, //15209 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x50DE}, //15210 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x5371}, //15211 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x570D}, //15212 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x59D4}, //15213 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x5A01}, //15214 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x5C09}, //15215 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x6170}, //15216 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x6690}, //15217 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x6E2D}, //15218 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x7232}, //15219 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x744B}, //15220 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x7DEF}, //15221 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x80C3}, //15222 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x840E}, //15223 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x8466}, //15224 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x853F}, //15225 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x875F}, //15226 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x885B}, //15227 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x8918}, //15228 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x8B02}, //15229 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x9055}, //15230 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x97CB}, //15231 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x9B4F}, //15232 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x4E73}, //15233 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x4F91}, //15234 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x5112}, //15235 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x516A}, //15236 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0xF9C7}, //15237 #CJK COMPATIBILITY IDEOGRAPH + {0xEAE6, 0x552F}, //15238 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x55A9}, //15239 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x5B7A}, //15240 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x5BA5}, //15241 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x5E7C}, //15242 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x5E7D}, //15243 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x5EBE}, //15244 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x60A0}, //15245 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x60DF}, //15246 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x6108}, //15247 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x6109}, //15248 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x63C4}, //15249 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x6538}, //15250 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x6709}, //15251 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0xF9C8}, //15252 #CJK COMPATIBILITY IDEOGRAPH + {0xEAF5, 0x67D4}, //15253 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x67DA}, //15254 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0xF9C9}, //15255 #CJK COMPATIBILITY IDEOGRAPH + {0xEAF8, 0x6961}, //15256 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x6962}, //15257 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x6CB9}, //15258 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x6D27}, //15259 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0xF9CA}, //15260 #CJK COMPATIBILITY IDEOGRAPH + {0xEAFD, 0x6E38}, //15261 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0xF9CB}, //15262 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA1, 0x6FE1}, //15263 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x7336}, //15264 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x7337}, //15265 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0xF9CC}, //15266 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA5, 0x745C}, //15267 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x7531}, //15268 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0xF9CD}, //15269 #CJK COMPATIBILITY IDEOGRAPH + {0xEBA8, 0x7652}, //15270 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0xF9CE}, //15271 #CJK COMPATIBILITY IDEOGRAPH + {0xEBAA, 0xF9CF}, //15272 #CJK COMPATIBILITY IDEOGRAPH + {0xEBAB, 0x7DAD}, //15273 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x81FE}, //15274 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x8438}, //15275 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x88D5}, //15276 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x8A98}, //15277 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x8ADB}, //15278 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x8AED}, //15279 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x8E30}, //15280 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x8E42}, //15281 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x904A}, //15282 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x903E}, //15283 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x907A}, //15284 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x9149}, //15285 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x91C9}, //15286 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x936E}, //15287 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0xF9D0}, //15288 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBB, 0xF9D1}, //15289 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBC, 0x5809}, //15290 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0xF9D2}, //15291 #CJK COMPATIBILITY IDEOGRAPH + {0xEBBE, 0x6BD3}, //15292 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x8089}, //15293 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x80B2}, //15294 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0xF9D3}, //15295 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC2, 0xF9D4}, //15296 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC3, 0x5141}, //15297 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x596B}, //15298 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x5C39}, //15299 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0xF9D5}, //15300 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC7, 0xF9D6}, //15301 #CJK COMPATIBILITY IDEOGRAPH + {0xEBC8, 0x6F64}, //15302 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x73A7}, //15303 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x80E4}, //15304 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x8D07}, //15305 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0xF9D7}, //15306 #CJK COMPATIBILITY IDEOGRAPH + {0xEBCD, 0x9217}, //15307 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x958F}, //15308 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0xF9D8}, //15309 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD0, 0xF9D9}, //15310 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD1, 0xF9DA}, //15311 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD2, 0xF9DB}, //15312 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD3, 0x807F}, //15313 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x620E}, //15314 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x701C}, //15315 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x7D68}, //15316 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x878D}, //15317 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0xF9DC}, //15318 #CJK COMPATIBILITY IDEOGRAPH + {0xEBD9, 0x57A0}, //15319 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x6069}, //15320 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x6147}, //15321 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x6BB7}, //15322 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x8ABE}, //15323 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x9280}, //15324 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x96B1}, //15325 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x4E59}, //15326 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x541F}, //15327 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x6DEB}, //15328 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x852D}, //15329 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x9670}, //15330 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x97F3}, //15331 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x98EE}, //15332 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x63D6}, //15333 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x6CE3}, //15334 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x9091}, //15335 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x51DD}, //15336 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x61C9}, //15337 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x81BA}, //15338 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x9DF9}, //15339 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x4F9D}, //15340 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x501A}, //15341 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x5100}, //15342 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x5B9C}, //15343 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x610F}, //15344 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x61FF}, //15345 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x64EC}, //15346 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x6905}, //15347 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x6BC5}, //15348 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x7591}, //15349 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x77E3}, //15350 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x7FA9}, //15351 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x8264}, //15352 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x858F}, //15353 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x87FB}, //15354 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x8863}, //15355 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x8ABC}, //15356 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x8B70}, //15357 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x91AB}, //15358 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x4E8C}, //15359 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x4EE5}, //15360 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x4F0A}, //15361 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0xF9DD}, //15362 #CJK COMPATIBILITY IDEOGRAPH + {0xECA7, 0xF9DE}, //15363 #CJK COMPATIBILITY IDEOGRAPH + {0xECA8, 0x5937}, //15364 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x59E8}, //15365 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0xF9DF}, //15366 #CJK COMPATIBILITY IDEOGRAPH + {0xECAB, 0x5DF2}, //15367 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x5F1B}, //15368 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x5F5B}, //15369 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x6021}, //15370 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0xF9E0}, //15371 #CJK COMPATIBILITY IDEOGRAPH + {0xECB0, 0xF9E1}, //15372 #CJK COMPATIBILITY IDEOGRAPH + {0xECB1, 0xF9E2}, //15373 #CJK COMPATIBILITY IDEOGRAPH + {0xECB2, 0xF9E3}, //15374 #CJK COMPATIBILITY IDEOGRAPH + {0xECB3, 0x723E}, //15375 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x73E5}, //15376 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0xF9E4}, //15377 #CJK COMPATIBILITY IDEOGRAPH + {0xECB6, 0x7570}, //15378 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x75CD}, //15379 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0xF9E5}, //15380 #CJK COMPATIBILITY IDEOGRAPH + {0xECB9, 0x79FB}, //15381 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0xF9E6}, //15382 #CJK COMPATIBILITY IDEOGRAPH + {0xECBB, 0x800C}, //15383 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x8033}, //15384 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x8084}, //15385 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x82E1}, //15386 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x8351}, //15387 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0xF9E7}, //15388 #CJK COMPATIBILITY IDEOGRAPH + {0xECC1, 0xF9E8}, //15389 #CJK COMPATIBILITY IDEOGRAPH + {0xECC2, 0x8CBD}, //15390 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x8CB3}, //15391 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x9087}, //15392 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0xF9E9}, //15393 #CJK COMPATIBILITY IDEOGRAPH + {0xECC6, 0xF9EA}, //15394 #CJK COMPATIBILITY IDEOGRAPH + {0xECC7, 0x98F4}, //15395 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x990C}, //15396 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0xF9EB}, //15397 #CJK COMPATIBILITY IDEOGRAPH + {0xECCA, 0xF9EC}, //15398 #CJK COMPATIBILITY IDEOGRAPH + {0xECCB, 0x7037}, //15399 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x76CA}, //15400 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x7FCA}, //15401 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x7FCC}, //15402 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x7FFC}, //15403 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x8B1A}, //15404 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x4EBA}, //15405 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x4EC1}, //15406 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x5203}, //15407 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x5370}, //15408 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0xF9ED}, //15409 #CJK COMPATIBILITY IDEOGRAPH + {0xECD6, 0x54BD}, //15410 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x56E0}, //15411 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x59FB}, //15412 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x5BC5}, //15413 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x5F15}, //15414 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x5FCD}, //15415 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x6E6E}, //15416 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0xF9EE}, //15417 #CJK COMPATIBILITY IDEOGRAPH + {0xECDE, 0xF9EF}, //15418 #CJK COMPATIBILITY IDEOGRAPH + {0xECDF, 0x7D6A}, //15419 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x8335}, //15420 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0xF9F0}, //15421 #CJK COMPATIBILITY IDEOGRAPH + {0xECE2, 0x8693}, //15422 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x8A8D}, //15423 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0xF9F1}, //15424 #CJK COMPATIBILITY IDEOGRAPH + {0xECE5, 0x976D}, //15425 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x9777}, //15426 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0xF9F2}, //15427 #CJK COMPATIBILITY IDEOGRAPH + {0xECE8, 0xF9F3}, //15428 #CJK COMPATIBILITY IDEOGRAPH + {0xECE9, 0x4E00}, //15429 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x4F5A}, //15430 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x4F7E}, //15431 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x58F9}, //15432 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x65E5}, //15433 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x6EA2}, //15434 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x9038}, //15435 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x93B0}, //15436 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x99B9}, //15437 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x4EFB}, //15438 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x58EC}, //15439 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x598A}, //15440 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x59D9}, //15441 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x6041}, //15442 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0xF9F4}, //15443 #CJK COMPATIBILITY IDEOGRAPH + {0xECF8, 0xF9F5}, //15444 #CJK COMPATIBILITY IDEOGRAPH + {0xECF9, 0x7A14}, //15445 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0xF9F6}, //15446 #CJK COMPATIBILITY IDEOGRAPH + {0xECFB, 0x834F}, //15447 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x8CC3}, //15448 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x5165}, //15449 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x5344}, //15450 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0xF9F7}, //15451 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA2, 0xF9F8}, //15452 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA3, 0xF9F9}, //15453 #CJK COMPATIBILITY IDEOGRAPH + {0xEDA4, 0x4ECD}, //15454 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x5269}, //15455 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x5B55}, //15456 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x82BF}, //15457 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x4ED4}, //15458 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x523A}, //15459 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x54A8}, //15460 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x59C9}, //15461 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x59FF}, //15462 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x5B50}, //15463 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x5B57}, //15464 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x5B5C}, //15465 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x6063}, //15466 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x6148}, //15467 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x6ECB}, //15468 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x7099}, //15469 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x716E}, //15470 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x7386}, //15471 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x74F7}, //15472 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x75B5}, //15473 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x78C1}, //15474 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7D2B}, //15475 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x8005}, //15476 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x81EA}, //15477 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x8328}, //15478 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x8517}, //15479 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x85C9}, //15480 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x8AEE}, //15481 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x8CC7}, //15482 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x96CC}, //15483 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x4F5C}, //15484 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x52FA}, //15485 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x56BC}, //15486 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x65AB}, //15487 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x6628}, //15488 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x707C}, //15489 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x70B8}, //15490 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7235}, //15491 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x7DBD}, //15492 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x828D}, //15493 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x914C}, //15494 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x96C0}, //15495 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x9D72}, //15496 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x5B71}, //15497 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x68E7}, //15498 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x6B98}, //15499 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x6F7A}, //15500 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x76DE}, //15501 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x5C91}, //15502 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x66AB}, //15503 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x6F5B}, //15504 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x7BB4}, //15505 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x7C2A}, //15506 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x8836}, //15507 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x96DC}, //15508 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x4E08}, //15509 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x4ED7}, //15510 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x5320}, //15511 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x5834}, //15512 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x58BB}, //15513 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x58EF}, //15514 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x596C}, //15515 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x5C07}, //15516 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x5E33}, //15517 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x5E84}, //15518 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x5F35}, //15519 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x638C}, //15520 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x66B2}, //15521 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x6756}, //15522 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x6A1F}, //15523 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x6AA3}, //15524 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x6B0C}, //15525 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x6F3F}, //15526 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x7246}, //15527 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0xF9FA}, //15528 #CJK COMPATIBILITY IDEOGRAPH + {0xEDEF, 0x7350}, //15529 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x748B}, //15530 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x7AE0}, //15531 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x7CA7}, //15532 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x8178}, //15533 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x81DF}, //15534 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x81E7}, //15535 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x838A}, //15536 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x846C}, //15537 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x8523}, //15538 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x8594}, //15539 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x85CF}, //15540 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x88DD}, //15541 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x8D13}, //15542 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x91AC}, //15543 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x9577}, //15544 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x969C}, //15545 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x518D}, //15546 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x54C9}, //15547 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x5728}, //15548 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x5BB0}, //15549 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x624D}, //15550 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x6750}, //15551 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x683D}, //15552 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x6893}, //15553 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x6E3D}, //15554 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x6ED3}, //15555 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x707D}, //15556 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x7E21}, //15557 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x88C1}, //15558 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x8CA1}, //15559 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x8F09}, //15560 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x9F4B}, //15561 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x9F4E}, //15562 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x722D}, //15563 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x7B8F}, //15564 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x8ACD}, //15565 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x931A}, //15566 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x4F47}, //15567 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x4F4E}, //15568 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x5132}, //15569 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x5480}, //15570 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x59D0}, //15571 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x5E95}, //15572 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x62B5}, //15573 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x6775}, //15574 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x696E}, //15575 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x6A17}, //15576 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x6CAE}, //15577 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x6E1A}, //15578 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x72D9}, //15579 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x732A}, //15580 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x75BD}, //15581 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x7BB8}, //15582 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x7D35}, //15583 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x82E7}, //15584 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x83F9}, //15585 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x8457}, //15586 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x85F7}, //15587 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x8A5B}, //15588 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x8CAF}, //15589 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x8E87}, //15590 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x9019}, //15591 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x90B8}, //15592 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x96CE}, //15593 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x9F5F}, //15594 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x52E3}, //15595 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x540A}, //15596 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x5AE1}, //15597 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x5BC2}, //15598 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x6458}, //15599 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x6575}, //15600 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x6EF4}, //15601 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x72C4}, //15602 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0xF9FB}, //15603 #CJK COMPATIBILITY IDEOGRAPH + {0xEEDC, 0x7684}, //15604 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x7A4D}, //15605 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x7B1B}, //15606 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x7C4D}, //15607 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x7E3E}, //15608 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x7FDF}, //15609 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x837B}, //15610 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x8B2B}, //15611 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x8CCA}, //15612 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x8D64}, //15613 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x8DE1}, //15614 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x8E5F}, //15615 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x8FEA}, //15616 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x8FF9}, //15617 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x9069}, //15618 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x93D1}, //15619 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x4F43}, //15620 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x4F7A}, //15621 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x50B3}, //15622 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x5168}, //15623 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x5178}, //15624 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x524D}, //15625 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x526A}, //15626 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x5861}, //15627 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x587C}, //15628 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x5960}, //15629 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x5C08}, //15630 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x5C55}, //15631 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x5EDB}, //15632 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x609B}, //15633 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x6230}, //15634 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x6813}, //15635 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x6BBF}, //15636 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x6C08}, //15637 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x6FB1}, //15638 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x714E}, //15639 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x7420}, //15640 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x7530}, //15641 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x7538}, //15642 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x7551}, //15643 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x7672}, //15644 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x7B4C}, //15645 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x7B8B}, //15646 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x7BAD}, //15647 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x7BC6}, //15648 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x7E8F}, //15649 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x8A6E}, //15650 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x8F3E}, //15651 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x8F49}, //15652 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x923F}, //15653 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9293}, //15654 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9322}, //15655 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x942B}, //15656 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x96FB}, //15657 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x985A}, //15658 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x986B}, //15659 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x991E}, //15660 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x5207}, //15661 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x622A}, //15662 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x6298}, //15663 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x6D59}, //15664 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x7664}, //15665 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x7ACA}, //15666 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x7BC0}, //15667 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x7D76}, //15668 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x5360}, //15669 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x5CBE}, //15670 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x5E97}, //15671 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x6F38}, //15672 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x70B9}, //15673 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x7C98}, //15674 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x9711}, //15675 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x9B8E}, //15676 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x9EDE}, //15677 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x63A5}, //15678 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x647A}, //15679 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x8776}, //15680 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x4E01}, //15681 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x4E95}, //15682 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x4EAD}, //15683 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x505C}, //15684 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x5075}, //15685 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x5448}, //15686 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x59C3}, //15687 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x5B9A}, //15688 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x5E40}, //15689 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x5EAD}, //15690 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x5EF7}, //15691 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x5F81}, //15692 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x60C5}, //15693 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x633A}, //15694 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x653F}, //15695 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x6574}, //15696 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x65CC}, //15697 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x6676}, //15698 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x6678}, //15699 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x67FE}, //15700 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x6968}, //15701 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x6A89}, //15702 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x6B63}, //15703 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x6C40}, //15704 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x6DC0}, //15705 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x6DE8}, //15706 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x6E1F}, //15707 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x6E5E}, //15708 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x701E}, //15709 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x70A1}, //15710 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x738E}, //15711 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x73FD}, //15712 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x753A}, //15713 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x775B}, //15714 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x7887}, //15715 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x798E}, //15716 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x7A0B}, //15717 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x7A7D}, //15718 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x7CBE}, //15719 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x7D8E}, //15720 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x8247}, //15721 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x8A02}, //15722 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x8AEA}, //15723 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x8C9E}, //15724 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x912D}, //15725 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x914A}, //15726 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x91D8}, //15727 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x9266}, //15728 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x92CC}, //15729 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x9320}, //15730 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x9706}, //15731 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x9756}, //15732 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x975C}, //15733 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x9802}, //15734 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x9F0E}, //15735 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x5236}, //15736 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x5291}, //15737 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x557C}, //15738 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x5824}, //15739 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x5E1D}, //15740 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x5F1F}, //15741 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x608C}, //15742 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x63D0}, //15743 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x68AF}, //15744 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x6FDF}, //15745 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x796D}, //15746 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x7B2C}, //15747 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x81CD}, //15748 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x85BA}, //15749 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x88FD}, //15750 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x8AF8}, //15751 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x8E44}, //15752 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x918D}, //15753 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x9664}, //15754 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x969B}, //15755 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x973D}, //15756 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x984C}, //15757 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x9F4A}, //15758 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x4FCE}, //15759 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x5146}, //15760 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x51CB}, //15761 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x52A9}, //15762 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x5632}, //15763 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x5F14}, //15764 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x5F6B}, //15765 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x63AA}, //15766 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x64CD}, //15767 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x65E9}, //15768 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x6641}, //15769 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x66FA}, //15770 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x66F9}, //15771 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x671D}, //15772 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x689D}, //15773 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x68D7}, //15774 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x69FD}, //15775 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x6F15}, //15776 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x6F6E}, //15777 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x7167}, //15778 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x71E5}, //15779 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x722A}, //15780 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x74AA}, //15781 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x773A}, //15782 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x7956}, //15783 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x795A}, //15784 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x79DF}, //15785 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x7A20}, //15786 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x7A95}, //15787 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x7C97}, //15788 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x7CDF}, //15789 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x7D44}, //15790 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x7E70}, //15791 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x8087}, //15792 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x85FB}, //15793 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x86A4}, //15794 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x8A54}, //15795 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x8ABF}, //15796 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x8D99}, //15797 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x8E81}, //15798 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x9020}, //15799 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x906D}, //15800 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x91E3}, //15801 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x963B}, //15802 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x96D5}, //15803 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x9CE5}, //15804 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x65CF}, //15805 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x7C07}, //15806 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x8DB3}, //15807 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x93C3}, //15808 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x5B58}, //15809 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x5C0A}, //15810 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x5352}, //15811 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x62D9}, //15812 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x731D}, //15813 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x5027}, //15814 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x5B97}, //15815 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x5F9E}, //15816 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x60B0}, //15817 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x616B}, //15818 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x68D5}, //15819 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x6DD9}, //15820 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x742E}, //15821 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x7A2E}, //15822 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x7D42}, //15823 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x7D9C}, //15824 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x7E31}, //15825 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x816B}, //15826 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x8E2A}, //15827 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x8E35}, //15828 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x937E}, //15829 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x9418}, //15830 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x4F50}, //15831 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x5750}, //15832 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x5DE6}, //15833 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x5EA7}, //15834 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x632B}, //15835 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x7F6A}, //15836 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x4E3B}, //15837 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x4F4F}, //15838 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x4F8F}, //15839 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x505A}, //15840 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x59DD}, //15841 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x80C4}, //15842 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x546A}, //15843 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x5468}, //15844 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x55FE}, //15845 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x594F}, //15846 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x5B99}, //15847 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x5DDE}, //15848 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x5EDA}, //15849 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x665D}, //15850 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x6731}, //15851 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x67F1}, //15852 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x682A}, //15853 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x6CE8}, //15854 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x6D32}, //15855 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x6E4A}, //15856 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x6F8D}, //15857 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x70B7}, //15858 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x73E0}, //15859 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x7587}, //15860 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x7C4C}, //15861 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x7D02}, //15862 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x7D2C}, //15863 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x7DA2}, //15864 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x821F}, //15865 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x86DB}, //15866 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x8A3B}, //15867 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x8A85}, //15868 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x8D70}, //15869 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x8E8A}, //15870 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x8F33}, //15871 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x9031}, //15872 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x914E}, //15873 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x9152}, //15874 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x9444}, //15875 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x99D0}, //15876 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x7AF9}, //15877 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x7CA5}, //15878 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x4FCA}, //15879 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x5101}, //15880 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x51C6}, //15881 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x57C8}, //15882 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x5BEF}, //15883 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x5CFB}, //15884 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x6659}, //15885 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x6A3D}, //15886 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x6D5A}, //15887 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x6E96}, //15888 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x6FEC}, //15889 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x710C}, //15890 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x756F}, //15891 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x7AE3}, //15892 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x8822}, //15893 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x9021}, //15894 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x9075}, //15895 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x96CB}, //15896 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x99FF}, //15897 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x8301}, //15898 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x4E2D}, //15899 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x4EF2}, //15900 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x8846}, //15901 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x91CD}, //15902 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x537D}, //15903 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x6ADB}, //15904 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x696B}, //15905 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x6C41}, //15906 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x847A}, //15907 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x589E}, //15908 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x618E}, //15909 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x66FE}, //15910 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x62EF}, //15911 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x70DD}, //15912 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x7511}, //15913 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x75C7}, //15914 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x7E52}, //15915 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x84B8}, //15916 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x8B49}, //15917 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x8D08}, //15918 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x4E4B}, //15919 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x53EA}, //15920 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x54AB}, //15921 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x5730}, //15922 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x5740}, //15923 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x5FD7}, //15924 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x6301}, //15925 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x6307}, //15926 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x646F}, //15927 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x652F}, //15928 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x65E8}, //15929 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x667A}, //15930 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x679D}, //15931 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x67B3}, //15932 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x6B62}, //15933 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x6C60}, //15934 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x6C9A}, //15935 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x6F2C}, //15936 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x77E5}, //15937 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x7825}, //15938 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x7949}, //15939 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x7957}, //15940 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x7D19}, //15941 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x80A2}, //15942 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x8102}, //15943 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x81F3}, //15944 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x829D}, //15945 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x82B7}, //15946 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x8718}, //15947 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x8A8C}, //15948 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0xF9FC}, //15949 #CJK COMPATIBILITY IDEOGRAPH + {0xF2BE, 0x8D04}, //15950 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x8DBE}, //15951 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x9072}, //15952 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x76F4}, //15953 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x7A19}, //15954 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x7A37}, //15955 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x7E54}, //15956 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x8077}, //15957 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x5507}, //15958 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x55D4}, //15959 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x5875}, //15960 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x632F}, //15961 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x6422}, //15962 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x6649}, //15963 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x664B}, //15964 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x686D}, //15965 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x699B}, //15966 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x6B84}, //15967 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x6D25}, //15968 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x6EB1}, //15969 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x73CD}, //15970 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x7468}, //15971 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x74A1}, //15972 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x755B}, //15973 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x75B9}, //15974 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x76E1}, //15975 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x771E}, //15976 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x778B}, //15977 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x79E6}, //15978 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x7E09}, //15979 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x7E1D}, //15980 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x81FB}, //15981 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x852F}, //15982 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x8897}, //15983 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x8A3A}, //15984 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x8CD1}, //15985 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x8EEB}, //15986 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x8FB0}, //15987 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x9032}, //15988 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x93AD}, //15989 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x9663}, //15990 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x9673}, //15991 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x9707}, //15992 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x4F84}, //15993 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x53F1}, //15994 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x59EA}, //15995 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x5AC9}, //15996 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x5E19}, //15997 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x684E}, //15998 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x74C6}, //15999 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x75BE}, //16000 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x79E9}, //16001 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x7A92}, //16002 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x81A3}, //16003 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x86ED}, //16004 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x8CEA}, //16005 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8DCC}, //16006 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x8FED}, //16007 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x659F}, //16008 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x6715}, //16009 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0xF9FD}, //16010 #CJK COMPATIBILITY IDEOGRAPH + {0xF2FB, 0x57F7}, //16011 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x6F57}, //16012 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x7DDD}, //16013 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x8F2F}, //16014 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x93F6}, //16015 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x96C6}, //16016 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x5FB5}, //16017 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x61F2}, //16018 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x6F84}, //16019 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x4E14}, //16020 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x4F98}, //16021 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x501F}, //16022 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x53C9}, //16023 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x55DF}, //16024 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x5D6F}, //16025 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x5DEE}, //16026 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x6B21}, //16027 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x6B64}, //16028 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x78CB}, //16029 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x7B9A}, //16030 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0xF9FE}, //16031 #CJK COMPATIBILITY IDEOGRAPH + {0xF3B2, 0x8E49}, //16032 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x8ECA}, //16033 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x906E}, //16034 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x6349}, //16035 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x643E}, //16036 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x7740}, //16037 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x7A84}, //16038 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x932F}, //16039 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x947F}, //16040 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x9F6A}, //16041 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x64B0}, //16042 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x6FAF}, //16043 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x71E6}, //16044 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x74A8}, //16045 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x74DA}, //16046 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x7AC4}, //16047 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x7C12}, //16048 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x7E82}, //16049 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x7CB2}, //16050 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x7E98}, //16051 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x8B9A}, //16052 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x8D0A}, //16053 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x947D}, //16054 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x9910}, //16055 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x994C}, //16056 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x5239}, //16057 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x5BDF}, //16058 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x64E6}, //16059 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x672D}, //16060 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x7D2E}, //16061 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x50ED}, //16062 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x53C3}, //16063 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x5879}, //16064 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x6158}, //16065 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x6159}, //16066 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x61FA}, //16067 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x65AC}, //16068 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x7AD9}, //16069 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x8B92}, //16070 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x8B96}, //16071 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x5009}, //16072 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x5021}, //16073 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x5275}, //16074 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x5531}, //16075 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x5A3C}, //16076 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x5EE0}, //16077 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x5F70}, //16078 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x6134}, //16079 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x655E}, //16080 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x660C}, //16081 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x6636}, //16082 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x66A2}, //16083 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x69CD}, //16084 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x6EC4}, //16085 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x6F32}, //16086 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x7316}, //16087 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x7621}, //16088 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x7A93}, //16089 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x8139}, //16090 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x8259}, //16091 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x83D6}, //16092 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x84BC}, //16093 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x50B5}, //16094 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x57F0}, //16095 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x5BC0}, //16096 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x5BE8}, //16097 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x5F69}, //16098 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x63A1}, //16099 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x7826}, //16100 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x7DB5}, //16101 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x83DC}, //16102 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x8521}, //16103 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x91C7}, //16104 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x91F5}, //16105 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x518A}, //16106 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x67F5}, //16107 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x7B56}, //16108 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x8CAC}, //16109 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x51C4}, //16110 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x59BB}, //16111 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x60BD}, //16112 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x8655}, //16113 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x501C}, //16114 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0xF9FF}, //16115 #CJK COMPATIBILITY IDEOGRAPH + {0xF4A8, 0x5254}, //16116 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x5C3A}, //16117 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x617D}, //16118 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x621A}, //16119 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x62D3}, //16120 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x64F2}, //16121 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x65A5}, //16122 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x6ECC}, //16123 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x7620}, //16124 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x810A}, //16125 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8E60}, //16126 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x965F}, //16127 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x96BB}, //16128 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x4EDF}, //16129 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x5343}, //16130 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x5598}, //16131 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x5929}, //16132 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x5DDD}, //16133 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x64C5}, //16134 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x6CC9}, //16135 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x6DFA}, //16136 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x7394}, //16137 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x7A7F}, //16138 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x821B}, //16139 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x85A6}, //16140 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8CE4}, //16141 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x8E10}, //16142 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x9077}, //16143 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x91E7}, //16144 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x95E1}, //16145 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x9621}, //16146 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x97C6}, //16147 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x51F8}, //16148 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x54F2}, //16149 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x5586}, //16150 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x5FB9}, //16151 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x64A4}, //16152 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x6F88}, //16153 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x7DB4}, //16154 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x8F1F}, //16155 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x8F4D}, //16156 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x9435}, //16157 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x50C9}, //16158 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x5C16}, //16159 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x6CBE}, //16160 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x6DFB}, //16161 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x751B}, //16162 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x77BB}, //16163 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x7C3D}, //16164 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x7C64}, //16165 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x8A79}, //16166 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x8AC2}, //16167 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x581E}, //16168 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x59BE}, //16169 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x5E16}, //16170 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x6377}, //16171 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x7252}, //16172 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x758A}, //16173 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x776B}, //16174 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x8ADC}, //16175 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x8CBC}, //16176 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x8F12}, //16177 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x5EF3}, //16178 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x6674}, //16179 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x6DF8}, //16180 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x807D}, //16181 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x83C1}, //16182 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x8ACB}, //16183 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x9751}, //16184 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x9BD6}, //16185 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0xFA00}, //16186 #CJK COMPATIBILITY IDEOGRAPH + {0xF4EF, 0x5243}, //16187 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x66FF}, //16188 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x6D95}, //16189 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x6EEF}, //16190 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x7DE0}, //16191 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x8AE6}, //16192 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x902E}, //16193 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x905E}, //16194 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x9AD4}, //16195 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x521D}, //16196 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x527F}, //16197 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x54E8}, //16198 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x6194}, //16199 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x6284}, //16200 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x62DB}, //16201 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x68A2}, //16202 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x6912}, //16203 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x695A}, //16204 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x6A35}, //16205 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x7092}, //16206 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x7126}, //16207 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x785D}, //16208 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x7901}, //16209 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x790E}, //16210 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x79D2}, //16211 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x7A0D}, //16212 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x8096}, //16213 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x8278}, //16214 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x82D5}, //16215 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x8349}, //16216 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x8549}, //16217 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x8C82}, //16218 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x8D85}, //16219 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x9162}, //16220 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x918B}, //16221 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x91AE}, //16222 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x4FC3}, //16223 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x56D1}, //16224 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x71ED}, //16225 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x77D7}, //16226 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x8700}, //16227 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x89F8}, //16228 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x5BF8}, //16229 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x5FD6}, //16230 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x6751}, //16231 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x90A8}, //16232 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x53E2}, //16233 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x585A}, //16234 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x5BF5}, //16235 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x60A4}, //16236 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x6181}, //16237 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x6460}, //16238 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x7E3D}, //16239 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x8070}, //16240 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x8525}, //16241 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x9283}, //16242 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x64AE}, //16243 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x50AC}, //16244 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x5D14}, //16245 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x6700}, //16246 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x589C}, //16247 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x62BD}, //16248 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x63A8}, //16249 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x690E}, //16250 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x6978}, //16251 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x6A1E}, //16252 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x6E6B}, //16253 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x76BA}, //16254 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x79CB}, //16255 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x82BB}, //16256 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x8429}, //16257 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x8ACF}, //16258 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x8DA8}, //16259 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x8FFD}, //16260 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x9112}, //16261 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x914B}, //16262 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x919C}, //16263 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x9310}, //16264 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x9318}, //16265 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x939A}, //16266 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x96DB}, //16267 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x9A36}, //16268 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x9C0D}, //16269 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x4E11}, //16270 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x755C}, //16271 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x795D}, //16272 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x7AFA}, //16273 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x7B51}, //16274 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x7BC9}, //16275 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x7E2E}, //16276 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x84C4}, //16277 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x8E59}, //16278 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x8E74}, //16279 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x8EF8}, //16280 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x9010}, //16281 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x6625}, //16282 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x693F}, //16283 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x7443}, //16284 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x51FA}, //16285 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x672E}, //16286 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x9EDC}, //16287 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x5145}, //16288 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x5FE0}, //16289 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x6C96}, //16290 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x87F2}, //16291 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x885D}, //16292 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x8877}, //16293 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x60B4}, //16294 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x81B5}, //16295 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x8403}, //16296 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x8D05}, //16297 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x53D6}, //16298 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x5439}, //16299 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x5634}, //16300 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x5A36}, //16301 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x5C31}, //16302 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x708A}, //16303 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x7FE0}, //16304 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x805A}, //16305 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x8106}, //16306 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x81ED}, //16307 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x8DA3}, //16308 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x9189}, //16309 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x9A5F}, //16310 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x9DF2}, //16311 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x5074}, //16312 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x4EC4}, //16313 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x53A0}, //16314 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x60FB}, //16315 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x6E2C}, //16316 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x5C64}, //16317 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x4F88}, //16318 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x5024}, //16319 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x55E4}, //16320 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x5CD9}, //16321 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x5E5F}, //16322 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x6065}, //16323 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x6894}, //16324 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x6CBB}, //16325 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x6DC4}, //16326 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x71BE}, //16327 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x75D4}, //16328 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x75F4}, //16329 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x7661}, //16330 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x7A1A}, //16331 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x7A49}, //16332 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x7DC7}, //16333 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x7DFB}, //16334 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x7F6E}, //16335 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x81F4}, //16336 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x86A9}, //16337 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x8F1C}, //16338 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x96C9}, //16339 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x99B3}, //16340 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x9F52}, //16341 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x5247}, //16342 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x52C5}, //16343 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x98ED}, //16344 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x89AA}, //16345 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x4E03}, //16346 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x67D2}, //16347 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x6F06}, //16348 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x4FB5}, //16349 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x5BE2}, //16350 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x6795}, //16351 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x6C88}, //16352 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x6D78}, //16353 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x741B}, //16354 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x7827}, //16355 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x91DD}, //16356 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x937C}, //16357 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x87C4}, //16358 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x79E4}, //16359 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x7A31}, //16360 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x5FEB}, //16361 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x4ED6}, //16362 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x54A4}, //16363 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x553E}, //16364 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x58AE}, //16365 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x59A5}, //16366 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x60F0}, //16367 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x6253}, //16368 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x62D6}, //16369 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x6736}, //16370 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x6955}, //16371 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x8235}, //16372 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x9640}, //16373 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x99B1}, //16374 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x99DD}, //16375 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x502C}, //16376 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x5353}, //16377 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x5544}, //16378 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x577C}, //16379 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0xFA01}, //16380 #CJK COMPATIBILITY IDEOGRAPH + {0xF6F5, 0x6258}, //16381 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0xFA02}, //16382 #CJK COMPATIBILITY IDEOGRAPH + {0xF6F7, 0x64E2}, //16383 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x666B}, //16384 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x67DD}, //16385 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x6FC1}, //16386 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x6FEF}, //16387 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x7422}, //16388 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x7438}, //16389 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x8A17}, //16390 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9438}, //16391 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x5451}, //16392 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x5606}, //16393 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x5766}, //16394 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x5F48}, //16395 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x619A}, //16396 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x6B4E}, //16397 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x7058}, //16398 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x70AD}, //16399 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x7DBB}, //16400 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x8A95}, //16401 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x596A}, //16402 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x812B}, //16403 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x63A2}, //16404 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x7708}, //16405 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x803D}, //16406 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x8CAA}, //16407 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x5854}, //16408 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x642D}, //16409 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x69BB}, //16410 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x5B95}, //16411 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x5E11}, //16412 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x6E6F}, //16413 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0xFA03}, //16414 #CJK COMPATIBILITY IDEOGRAPH + {0xF7B9, 0x8569}, //16415 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x514C}, //16416 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x53F0}, //16417 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x592A}, //16418 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x6020}, //16419 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x614B}, //16420 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x6B86}, //16421 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x6C70}, //16422 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x6CF0}, //16423 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x7B1E}, //16424 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x80CE}, //16425 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x82D4}, //16426 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x8DC6}, //16427 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x90B0}, //16428 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x98B1}, //16429 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0xFA04}, //16430 #CJK COMPATIBILITY IDEOGRAPH + {0xF7C9, 0x64C7}, //16431 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x6FA4}, //16432 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x6491}, //16433 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x6504}, //16434 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x514E}, //16435 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x5410}, //16436 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x571F}, //16437 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x8A0E}, //16438 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x615F}, //16439 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x6876}, //16440 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0xFA05}, //16441 #CJK COMPATIBILITY IDEOGRAPH + {0xF7D4, 0x75DB}, //16442 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x7B52}, //16443 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x7D71}, //16444 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x901A}, //16445 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x5806}, //16446 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x69CC}, //16447 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x817F}, //16448 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x892A}, //16449 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x9000}, //16450 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x9839}, //16451 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x5078}, //16452 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x5957}, //16453 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x59AC}, //16454 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x6295}, //16455 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x900F}, //16456 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x9B2A}, //16457 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x615D}, //16458 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x7279}, //16459 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x95D6}, //16460 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x5761}, //16461 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x5A46}, //16462 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x5DF4}, //16463 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x628A}, //16464 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x64AD}, //16465 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x64FA}, //16466 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x6777}, //16467 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x6CE2}, //16468 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x6D3E}, //16469 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x722C}, //16470 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x7436}, //16471 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x7834}, //16472 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x7F77}, //16473 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x82AD}, //16474 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x8DDB}, //16475 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x9817}, //16476 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x5224}, //16477 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x5742}, //16478 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x677F}, //16479 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x7248}, //16480 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x74E3}, //16481 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x8CA9}, //16482 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x8FA6}, //16483 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x9211}, //16484 #CJK UNIFIED IDEOGRAPH + {0xF8A1, 0x962A}, //16485 #CJK UNIFIED IDEOGRAPH + {0xF8A2, 0x516B}, //16486 #CJK UNIFIED IDEOGRAPH + {0xF8A3, 0x53ED}, //16487 #CJK UNIFIED IDEOGRAPH + {0xF8A4, 0x634C}, //16488 #CJK UNIFIED IDEOGRAPH + {0xF8A5, 0x4F69}, //16489 #CJK UNIFIED IDEOGRAPH + {0xF8A6, 0x5504}, //16490 #CJK UNIFIED IDEOGRAPH + {0xF8A7, 0x6096}, //16491 #CJK UNIFIED IDEOGRAPH + {0xF8A8, 0x6557}, //16492 #CJK UNIFIED IDEOGRAPH + {0xF8A9, 0x6C9B}, //16493 #CJK UNIFIED IDEOGRAPH + {0xF8AA, 0x6D7F}, //16494 #CJK UNIFIED IDEOGRAPH + {0xF8AB, 0x724C}, //16495 #CJK UNIFIED IDEOGRAPH + {0xF8AC, 0x72FD}, //16496 #CJK UNIFIED IDEOGRAPH + {0xF8AD, 0x7A17}, //16497 #CJK UNIFIED IDEOGRAPH + {0xF8AE, 0x8987}, //16498 #CJK UNIFIED IDEOGRAPH + {0xF8AF, 0x8C9D}, //16499 #CJK UNIFIED IDEOGRAPH + {0xF8B0, 0x5F6D}, //16500 #CJK UNIFIED IDEOGRAPH + {0xF8B1, 0x6F8E}, //16501 #CJK UNIFIED IDEOGRAPH + {0xF8B2, 0x70F9}, //16502 #CJK UNIFIED IDEOGRAPH + {0xF8B3, 0x81A8}, //16503 #CJK UNIFIED IDEOGRAPH + {0xF8B4, 0x610E}, //16504 #CJK UNIFIED IDEOGRAPH + {0xF8B5, 0x4FBF}, //16505 #CJK UNIFIED IDEOGRAPH + {0xF8B6, 0x504F}, //16506 #CJK UNIFIED IDEOGRAPH + {0xF8B7, 0x6241}, //16507 #CJK UNIFIED IDEOGRAPH + {0xF8B8, 0x7247}, //16508 #CJK UNIFIED IDEOGRAPH + {0xF8B9, 0x7BC7}, //16509 #CJK UNIFIED IDEOGRAPH + {0xF8BA, 0x7DE8}, //16510 #CJK UNIFIED IDEOGRAPH + {0xF8BB, 0x7FE9}, //16511 #CJK UNIFIED IDEOGRAPH + {0xF8BC, 0x904D}, //16512 #CJK UNIFIED IDEOGRAPH + {0xF8BD, 0x97AD}, //16513 #CJK UNIFIED IDEOGRAPH + {0xF8BE, 0x9A19}, //16514 #CJK UNIFIED IDEOGRAPH + {0xF8BF, 0x8CB6}, //16515 #CJK UNIFIED IDEOGRAPH + {0xF8C0, 0x576A}, //16516 #CJK UNIFIED IDEOGRAPH + {0xF8C1, 0x5E73}, //16517 #CJK UNIFIED IDEOGRAPH + {0xF8C2, 0x67B0}, //16518 #CJK UNIFIED IDEOGRAPH + {0xF8C3, 0x840D}, //16519 #CJK UNIFIED IDEOGRAPH + {0xF8C4, 0x8A55}, //16520 #CJK UNIFIED IDEOGRAPH + {0xF8C5, 0x5420}, //16521 #CJK UNIFIED IDEOGRAPH + {0xF8C6, 0x5B16}, //16522 #CJK UNIFIED IDEOGRAPH + {0xF8C7, 0x5E63}, //16523 #CJK UNIFIED IDEOGRAPH + {0xF8C8, 0x5EE2}, //16524 #CJK UNIFIED IDEOGRAPH + {0xF8C9, 0x5F0A}, //16525 #CJK UNIFIED IDEOGRAPH + {0xF8CA, 0x6583}, //16526 #CJK UNIFIED IDEOGRAPH + {0xF8CB, 0x80BA}, //16527 #CJK UNIFIED IDEOGRAPH + {0xF8CC, 0x853D}, //16528 #CJK UNIFIED IDEOGRAPH + {0xF8CD, 0x9589}, //16529 #CJK UNIFIED IDEOGRAPH + {0xF8CE, 0x965B}, //16530 #CJK UNIFIED IDEOGRAPH + {0xF8CF, 0x4F48}, //16531 #CJK UNIFIED IDEOGRAPH + {0xF8D0, 0x5305}, //16532 #CJK UNIFIED IDEOGRAPH + {0xF8D1, 0x530D}, //16533 #CJK UNIFIED IDEOGRAPH + {0xF8D2, 0x530F}, //16534 #CJK UNIFIED IDEOGRAPH + {0xF8D3, 0x5486}, //16535 #CJK UNIFIED IDEOGRAPH + {0xF8D4, 0x54FA}, //16536 #CJK UNIFIED IDEOGRAPH + {0xF8D5, 0x5703}, //16537 #CJK UNIFIED IDEOGRAPH + {0xF8D6, 0x5E03}, //16538 #CJK UNIFIED IDEOGRAPH + {0xF8D7, 0x6016}, //16539 #CJK UNIFIED IDEOGRAPH + {0xF8D8, 0x629B}, //16540 #CJK UNIFIED IDEOGRAPH + {0xF8D9, 0x62B1}, //16541 #CJK UNIFIED IDEOGRAPH + {0xF8DA, 0x6355}, //16542 #CJK UNIFIED IDEOGRAPH + {0xF8DB, 0xFA06}, //16543 #CJK COMPATIBILITY IDEOGRAPH + {0xF8DC, 0x6CE1}, //16544 #CJK UNIFIED IDEOGRAPH + {0xF8DD, 0x6D66}, //16545 #CJK UNIFIED IDEOGRAPH + {0xF8DE, 0x75B1}, //16546 #CJK UNIFIED IDEOGRAPH + {0xF8DF, 0x7832}, //16547 #CJK UNIFIED IDEOGRAPH + {0xF8E0, 0x80DE}, //16548 #CJK UNIFIED IDEOGRAPH + {0xF8E1, 0x812F}, //16549 #CJK UNIFIED IDEOGRAPH + {0xF8E2, 0x82DE}, //16550 #CJK UNIFIED IDEOGRAPH + {0xF8E3, 0x8461}, //16551 #CJK UNIFIED IDEOGRAPH + {0xF8E4, 0x84B2}, //16552 #CJK UNIFIED IDEOGRAPH + {0xF8E5, 0x888D}, //16553 #CJK UNIFIED IDEOGRAPH + {0xF8E6, 0x8912}, //16554 #CJK UNIFIED IDEOGRAPH + {0xF8E7, 0x900B}, //16555 #CJK UNIFIED IDEOGRAPH + {0xF8E8, 0x92EA}, //16556 #CJK UNIFIED IDEOGRAPH + {0xF8E9, 0x98FD}, //16557 #CJK UNIFIED IDEOGRAPH + {0xF8EA, 0x9B91}, //16558 #CJK UNIFIED IDEOGRAPH + {0xF8EB, 0x5E45}, //16559 #CJK UNIFIED IDEOGRAPH + {0xF8EC, 0x66B4}, //16560 #CJK UNIFIED IDEOGRAPH + {0xF8ED, 0x66DD}, //16561 #CJK UNIFIED IDEOGRAPH + {0xF8EE, 0x7011}, //16562 #CJK UNIFIED IDEOGRAPH + {0xF8EF, 0x7206}, //16563 #CJK UNIFIED IDEOGRAPH + {0xF8F0, 0xFA07}, //16564 #CJK COMPATIBILITY IDEOGRAPH + {0xF8F1, 0x4FF5}, //16565 #CJK UNIFIED IDEOGRAPH + {0xF8F2, 0x527D}, //16566 #CJK UNIFIED IDEOGRAPH + {0xF8F3, 0x5F6A}, //16567 #CJK UNIFIED IDEOGRAPH + {0xF8F4, 0x6153}, //16568 #CJK UNIFIED IDEOGRAPH + {0xF8F5, 0x6753}, //16569 #CJK UNIFIED IDEOGRAPH + {0xF8F6, 0x6A19}, //16570 #CJK UNIFIED IDEOGRAPH + {0xF8F7, 0x6F02}, //16571 #CJK UNIFIED IDEOGRAPH + {0xF8F8, 0x74E2}, //16572 #CJK UNIFIED IDEOGRAPH + {0xF8F9, 0x7968}, //16573 #CJK UNIFIED IDEOGRAPH + {0xF8FA, 0x8868}, //16574 #CJK UNIFIED IDEOGRAPH + {0xF8FB, 0x8C79}, //16575 #CJK UNIFIED IDEOGRAPH + {0xF8FC, 0x98C7}, //16576 #CJK UNIFIED IDEOGRAPH + {0xF8FD, 0x98C4}, //16577 #CJK UNIFIED IDEOGRAPH + {0xF8FE, 0x9A43}, //16578 #CJK UNIFIED IDEOGRAPH + {0xF9A1, 0x54C1}, //16579 #CJK UNIFIED IDEOGRAPH + {0xF9A2, 0x7A1F}, //16580 #CJK UNIFIED IDEOGRAPH + {0xF9A3, 0x6953}, //16581 #CJK UNIFIED IDEOGRAPH + {0xF9A4, 0x8AF7}, //16582 #CJK UNIFIED IDEOGRAPH + {0xF9A5, 0x8C4A}, //16583 #CJK UNIFIED IDEOGRAPH + {0xF9A6, 0x98A8}, //16584 #CJK UNIFIED IDEOGRAPH + {0xF9A7, 0x99AE}, //16585 #CJK UNIFIED IDEOGRAPH + {0xF9A8, 0x5F7C}, //16586 #CJK UNIFIED IDEOGRAPH + {0xF9A9, 0x62AB}, //16587 #CJK UNIFIED IDEOGRAPH + {0xF9AA, 0x75B2}, //16588 #CJK UNIFIED IDEOGRAPH + {0xF9AB, 0x76AE}, //16589 #CJK UNIFIED IDEOGRAPH + {0xF9AC, 0x88AB}, //16590 #CJK UNIFIED IDEOGRAPH + {0xF9AD, 0x907F}, //16591 #CJK UNIFIED IDEOGRAPH + {0xF9AE, 0x9642}, //16592 #CJK UNIFIED IDEOGRAPH + {0xF9AF, 0x5339}, //16593 #CJK UNIFIED IDEOGRAPH + {0xF9B0, 0x5F3C}, //16594 #CJK UNIFIED IDEOGRAPH + {0xF9B1, 0x5FC5}, //16595 #CJK UNIFIED IDEOGRAPH + {0xF9B2, 0x6CCC}, //16596 #CJK UNIFIED IDEOGRAPH + {0xF9B3, 0x73CC}, //16597 #CJK UNIFIED IDEOGRAPH + {0xF9B4, 0x7562}, //16598 #CJK UNIFIED IDEOGRAPH + {0xF9B5, 0x758B}, //16599 #CJK UNIFIED IDEOGRAPH + {0xF9B6, 0x7B46}, //16600 #CJK UNIFIED IDEOGRAPH + {0xF9B7, 0x82FE}, //16601 #CJK UNIFIED IDEOGRAPH + {0xF9B8, 0x999D}, //16602 #CJK UNIFIED IDEOGRAPH + {0xF9B9, 0x4E4F}, //16603 #CJK UNIFIED IDEOGRAPH + {0xF9BA, 0x903C}, //16604 #CJK UNIFIED IDEOGRAPH + {0xF9BB, 0x4E0B}, //16605 #CJK UNIFIED IDEOGRAPH + {0xF9BC, 0x4F55}, //16606 #CJK UNIFIED IDEOGRAPH + {0xF9BD, 0x53A6}, //16607 #CJK UNIFIED IDEOGRAPH + {0xF9BE, 0x590F}, //16608 #CJK UNIFIED IDEOGRAPH + {0xF9BF, 0x5EC8}, //16609 #CJK UNIFIED IDEOGRAPH + {0xF9C0, 0x6630}, //16610 #CJK UNIFIED IDEOGRAPH + {0xF9C1, 0x6CB3}, //16611 #CJK UNIFIED IDEOGRAPH + {0xF9C2, 0x7455}, //16612 #CJK UNIFIED IDEOGRAPH + {0xF9C3, 0x8377}, //16613 #CJK UNIFIED IDEOGRAPH + {0xF9C4, 0x8766}, //16614 #CJK UNIFIED IDEOGRAPH + {0xF9C5, 0x8CC0}, //16615 #CJK UNIFIED IDEOGRAPH + {0xF9C6, 0x9050}, //16616 #CJK UNIFIED IDEOGRAPH + {0xF9C7, 0x971E}, //16617 #CJK UNIFIED IDEOGRAPH + {0xF9C8, 0x9C15}, //16618 #CJK UNIFIED IDEOGRAPH + {0xF9C9, 0x58D1}, //16619 #CJK UNIFIED IDEOGRAPH + {0xF9CA, 0x5B78}, //16620 #CJK UNIFIED IDEOGRAPH + {0xF9CB, 0x8650}, //16621 #CJK UNIFIED IDEOGRAPH + {0xF9CC, 0x8B14}, //16622 #CJK UNIFIED IDEOGRAPH + {0xF9CD, 0x9DB4}, //16623 #CJK UNIFIED IDEOGRAPH + {0xF9CE, 0x5BD2}, //16624 #CJK UNIFIED IDEOGRAPH + {0xF9CF, 0x6068}, //16625 #CJK UNIFIED IDEOGRAPH + {0xF9D0, 0x608D}, //16626 #CJK UNIFIED IDEOGRAPH + {0xF9D1, 0x65F1}, //16627 #CJK UNIFIED IDEOGRAPH + {0xF9D2, 0x6C57}, //16628 #CJK UNIFIED IDEOGRAPH + {0xF9D3, 0x6F22}, //16629 #CJK UNIFIED IDEOGRAPH + {0xF9D4, 0x6FA3}, //16630 #CJK UNIFIED IDEOGRAPH + {0xF9D5, 0x701A}, //16631 #CJK UNIFIED IDEOGRAPH + {0xF9D6, 0x7F55}, //16632 #CJK UNIFIED IDEOGRAPH + {0xF9D7, 0x7FF0}, //16633 #CJK UNIFIED IDEOGRAPH + {0xF9D8, 0x9591}, //16634 #CJK UNIFIED IDEOGRAPH + {0xF9D9, 0x9592}, //16635 #CJK UNIFIED IDEOGRAPH + {0xF9DA, 0x9650}, //16636 #CJK UNIFIED IDEOGRAPH + {0xF9DB, 0x97D3}, //16637 #CJK UNIFIED IDEOGRAPH + {0xF9DC, 0x5272}, //16638 #CJK UNIFIED IDEOGRAPH + {0xF9DD, 0x8F44}, //16639 #CJK UNIFIED IDEOGRAPH + {0xF9DE, 0x51FD}, //16640 #CJK UNIFIED IDEOGRAPH + {0xF9DF, 0x542B}, //16641 #CJK UNIFIED IDEOGRAPH + {0xF9E0, 0x54B8}, //16642 #CJK UNIFIED IDEOGRAPH + {0xF9E1, 0x5563}, //16643 #CJK UNIFIED IDEOGRAPH + {0xF9E2, 0x558A}, //16644 #CJK UNIFIED IDEOGRAPH + {0xF9E3, 0x6ABB}, //16645 #CJK UNIFIED IDEOGRAPH + {0xF9E4, 0x6DB5}, //16646 #CJK UNIFIED IDEOGRAPH + {0xF9E5, 0x7DD8}, //16647 #CJK UNIFIED IDEOGRAPH + {0xF9E6, 0x8266}, //16648 #CJK UNIFIED IDEOGRAPH + {0xF9E7, 0x929C}, //16649 #CJK UNIFIED IDEOGRAPH + {0xF9E8, 0x9677}, //16650 #CJK UNIFIED IDEOGRAPH + {0xF9E9, 0x9E79}, //16651 #CJK UNIFIED IDEOGRAPH + {0xF9EA, 0x5408}, //16652 #CJK UNIFIED IDEOGRAPH + {0xF9EB, 0x54C8}, //16653 #CJK UNIFIED IDEOGRAPH + {0xF9EC, 0x76D2}, //16654 #CJK UNIFIED IDEOGRAPH + {0xF9ED, 0x86E4}, //16655 #CJK UNIFIED IDEOGRAPH + {0xF9EE, 0x95A4}, //16656 #CJK UNIFIED IDEOGRAPH + {0xF9EF, 0x95D4}, //16657 #CJK UNIFIED IDEOGRAPH + {0xF9F0, 0x965C}, //16658 #CJK UNIFIED IDEOGRAPH + {0xF9F1, 0x4EA2}, //16659 #CJK UNIFIED IDEOGRAPH + {0xF9F2, 0x4F09}, //16660 #CJK UNIFIED IDEOGRAPH + {0xF9F3, 0x59EE}, //16661 #CJK UNIFIED IDEOGRAPH + {0xF9F4, 0x5AE6}, //16662 #CJK UNIFIED IDEOGRAPH + {0xF9F5, 0x5DF7}, //16663 #CJK UNIFIED IDEOGRAPH + {0xF9F6, 0x6052}, //16664 #CJK UNIFIED IDEOGRAPH + {0xF9F7, 0x6297}, //16665 #CJK UNIFIED IDEOGRAPH + {0xF9F8, 0x676D}, //16666 #CJK UNIFIED IDEOGRAPH + {0xF9F9, 0x6841}, //16667 #CJK UNIFIED IDEOGRAPH + {0xF9FA, 0x6C86}, //16668 #CJK UNIFIED IDEOGRAPH + {0xF9FB, 0x6E2F}, //16669 #CJK UNIFIED IDEOGRAPH + {0xF9FC, 0x7F38}, //16670 #CJK UNIFIED IDEOGRAPH + {0xF9FD, 0x809B}, //16671 #CJK UNIFIED IDEOGRAPH + {0xF9FE, 0x822A}, //16672 #CJK UNIFIED IDEOGRAPH + {0xFAA1, 0xFA08}, //16673 #CJK COMPATIBILITY IDEOGRAPH + {0xFAA2, 0xFA09}, //16674 #CJK COMPATIBILITY IDEOGRAPH + {0xFAA3, 0x9805}, //16675 #CJK UNIFIED IDEOGRAPH + {0xFAA4, 0x4EA5}, //16676 #CJK UNIFIED IDEOGRAPH + {0xFAA5, 0x5055}, //16677 #CJK UNIFIED IDEOGRAPH + {0xFAA6, 0x54B3}, //16678 #CJK UNIFIED IDEOGRAPH + {0xFAA7, 0x5793}, //16679 #CJK UNIFIED IDEOGRAPH + {0xFAA8, 0x595A}, //16680 #CJK UNIFIED IDEOGRAPH + {0xFAA9, 0x5B69}, //16681 #CJK UNIFIED IDEOGRAPH + {0xFAAA, 0x5BB3}, //16682 #CJK UNIFIED IDEOGRAPH + {0xFAAB, 0x61C8}, //16683 #CJK UNIFIED IDEOGRAPH + {0xFAAC, 0x6977}, //16684 #CJK UNIFIED IDEOGRAPH + {0xFAAD, 0x6D77}, //16685 #CJK UNIFIED IDEOGRAPH + {0xFAAE, 0x7023}, //16686 #CJK UNIFIED IDEOGRAPH + {0xFAAF, 0x87F9}, //16687 #CJK UNIFIED IDEOGRAPH + {0xFAB0, 0x89E3}, //16688 #CJK UNIFIED IDEOGRAPH + {0xFAB1, 0x8A72}, //16689 #CJK UNIFIED IDEOGRAPH + {0xFAB2, 0x8AE7}, //16690 #CJK UNIFIED IDEOGRAPH + {0xFAB3, 0x9082}, //16691 #CJK UNIFIED IDEOGRAPH + {0xFAB4, 0x99ED}, //16692 #CJK UNIFIED IDEOGRAPH + {0xFAB5, 0x9AB8}, //16693 #CJK UNIFIED IDEOGRAPH + {0xFAB6, 0x52BE}, //16694 #CJK UNIFIED IDEOGRAPH + {0xFAB7, 0x6838}, //16695 #CJK UNIFIED IDEOGRAPH + {0xFAB8, 0x5016}, //16696 #CJK UNIFIED IDEOGRAPH + {0xFAB9, 0x5E78}, //16697 #CJK UNIFIED IDEOGRAPH + {0xFABA, 0x674F}, //16698 #CJK UNIFIED IDEOGRAPH + {0xFABB, 0x8347}, //16699 #CJK UNIFIED IDEOGRAPH + {0xFABC, 0x884C}, //16700 #CJK UNIFIED IDEOGRAPH + {0xFABD, 0x4EAB}, //16701 #CJK UNIFIED IDEOGRAPH + {0xFABE, 0x5411}, //16702 #CJK UNIFIED IDEOGRAPH + {0xFABF, 0x56AE}, //16703 #CJK UNIFIED IDEOGRAPH + {0xFAC0, 0x73E6}, //16704 #CJK UNIFIED IDEOGRAPH + {0xFAC1, 0x9115}, //16705 #CJK UNIFIED IDEOGRAPH + {0xFAC2, 0x97FF}, //16706 #CJK UNIFIED IDEOGRAPH + {0xFAC3, 0x9909}, //16707 #CJK UNIFIED IDEOGRAPH + {0xFAC4, 0x9957}, //16708 #CJK UNIFIED IDEOGRAPH + {0xFAC5, 0x9999}, //16709 #CJK UNIFIED IDEOGRAPH + {0xFAC6, 0x5653}, //16710 #CJK UNIFIED IDEOGRAPH + {0xFAC7, 0x589F}, //16711 #CJK UNIFIED IDEOGRAPH + {0xFAC8, 0x865B}, //16712 #CJK UNIFIED IDEOGRAPH + {0xFAC9, 0x8A31}, //16713 #CJK UNIFIED IDEOGRAPH + {0xFACA, 0x61B2}, //16714 #CJK UNIFIED IDEOGRAPH + {0xFACB, 0x6AF6}, //16715 #CJK UNIFIED IDEOGRAPH + {0xFACC, 0x737B}, //16716 #CJK UNIFIED IDEOGRAPH + {0xFACD, 0x8ED2}, //16717 #CJK UNIFIED IDEOGRAPH + {0xFACE, 0x6B47}, //16718 #CJK UNIFIED IDEOGRAPH + {0xFACF, 0x96AA}, //16719 #CJK UNIFIED IDEOGRAPH + {0xFAD0, 0x9A57}, //16720 #CJK UNIFIED IDEOGRAPH + {0xFAD1, 0x5955}, //16721 #CJK UNIFIED IDEOGRAPH + {0xFAD2, 0x7200}, //16722 #CJK UNIFIED IDEOGRAPH + {0xFAD3, 0x8D6B}, //16723 #CJK UNIFIED IDEOGRAPH + {0xFAD4, 0x9769}, //16724 #CJK UNIFIED IDEOGRAPH + {0xFAD5, 0x4FD4}, //16725 #CJK UNIFIED IDEOGRAPH + {0xFAD6, 0x5CF4}, //16726 #CJK UNIFIED IDEOGRAPH + {0xFAD7, 0x5F26}, //16727 #CJK UNIFIED IDEOGRAPH + {0xFAD8, 0x61F8}, //16728 #CJK UNIFIED IDEOGRAPH + {0xFAD9, 0x665B}, //16729 #CJK UNIFIED IDEOGRAPH + {0xFADA, 0x6CEB}, //16730 #CJK UNIFIED IDEOGRAPH + {0xFADB, 0x70AB}, //16731 #CJK UNIFIED IDEOGRAPH + {0xFADC, 0x7384}, //16732 #CJK UNIFIED IDEOGRAPH + {0xFADD, 0x73B9}, //16733 #CJK UNIFIED IDEOGRAPH + {0xFADE, 0x73FE}, //16734 #CJK UNIFIED IDEOGRAPH + {0xFADF, 0x7729}, //16735 #CJK UNIFIED IDEOGRAPH + {0xFAE0, 0x774D}, //16736 #CJK UNIFIED IDEOGRAPH + {0xFAE1, 0x7D43}, //16737 #CJK UNIFIED IDEOGRAPH + {0xFAE2, 0x7D62}, //16738 #CJK UNIFIED IDEOGRAPH + {0xFAE3, 0x7E23}, //16739 #CJK UNIFIED IDEOGRAPH + {0xFAE4, 0x8237}, //16740 #CJK UNIFIED IDEOGRAPH + {0xFAE5, 0x8852}, //16741 #CJK UNIFIED IDEOGRAPH + {0xFAE6, 0xFA0A}, //16742 #CJK COMPATIBILITY IDEOGRAPH + {0xFAE7, 0x8CE2}, //16743 #CJK UNIFIED IDEOGRAPH + {0xFAE8, 0x9249}, //16744 #CJK UNIFIED IDEOGRAPH + {0xFAE9, 0x986F}, //16745 #CJK UNIFIED IDEOGRAPH + {0xFAEA, 0x5B51}, //16746 #CJK UNIFIED IDEOGRAPH + {0xFAEB, 0x7A74}, //16747 #CJK UNIFIED IDEOGRAPH + {0xFAEC, 0x8840}, //16748 #CJK UNIFIED IDEOGRAPH + {0xFAED, 0x9801}, //16749 #CJK UNIFIED IDEOGRAPH + {0xFAEE, 0x5ACC}, //16750 #CJK UNIFIED IDEOGRAPH + {0xFAEF, 0x4FE0}, //16751 #CJK UNIFIED IDEOGRAPH + {0xFAF0, 0x5354}, //16752 #CJK UNIFIED IDEOGRAPH + {0xFAF1, 0x593E}, //16753 #CJK UNIFIED IDEOGRAPH + {0xFAF2, 0x5CFD}, //16754 #CJK UNIFIED IDEOGRAPH + {0xFAF3, 0x633E}, //16755 #CJK UNIFIED IDEOGRAPH + {0xFAF4, 0x6D79}, //16756 #CJK UNIFIED IDEOGRAPH + {0xFAF5, 0x72F9}, //16757 #CJK UNIFIED IDEOGRAPH + {0xFAF6, 0x8105}, //16758 #CJK UNIFIED IDEOGRAPH + {0xFAF7, 0x8107}, //16759 #CJK UNIFIED IDEOGRAPH + {0xFAF8, 0x83A2}, //16760 #CJK UNIFIED IDEOGRAPH + {0xFAF9, 0x92CF}, //16761 #CJK UNIFIED IDEOGRAPH + {0xFAFA, 0x9830}, //16762 #CJK UNIFIED IDEOGRAPH + {0xFAFB, 0x4EA8}, //16763 #CJK UNIFIED IDEOGRAPH + {0xFAFC, 0x5144}, //16764 #CJK UNIFIED IDEOGRAPH + {0xFAFD, 0x5211}, //16765 #CJK UNIFIED IDEOGRAPH + {0xFAFE, 0x578B}, //16766 #CJK UNIFIED IDEOGRAPH + {0xFBA1, 0x5F62}, //16767 #CJK UNIFIED IDEOGRAPH + {0xFBA2, 0x6CC2}, //16768 #CJK UNIFIED IDEOGRAPH + {0xFBA3, 0x6ECE}, //16769 #CJK UNIFIED IDEOGRAPH + {0xFBA4, 0x7005}, //16770 #CJK UNIFIED IDEOGRAPH + {0xFBA5, 0x7050}, //16771 #CJK UNIFIED IDEOGRAPH + {0xFBA6, 0x70AF}, //16772 #CJK UNIFIED IDEOGRAPH + {0xFBA7, 0x7192}, //16773 #CJK UNIFIED IDEOGRAPH + {0xFBA8, 0x73E9}, //16774 #CJK UNIFIED IDEOGRAPH + {0xFBA9, 0x7469}, //16775 #CJK UNIFIED IDEOGRAPH + {0xFBAA, 0x834A}, //16776 #CJK UNIFIED IDEOGRAPH + {0xFBAB, 0x87A2}, //16777 #CJK UNIFIED IDEOGRAPH + {0xFBAC, 0x8861}, //16778 #CJK UNIFIED IDEOGRAPH + {0xFBAD, 0x9008}, //16779 #CJK UNIFIED IDEOGRAPH + {0xFBAE, 0x90A2}, //16780 #CJK UNIFIED IDEOGRAPH + {0xFBAF, 0x93A3}, //16781 #CJK UNIFIED IDEOGRAPH + {0xFBB0, 0x99A8}, //16782 #CJK UNIFIED IDEOGRAPH + {0xFBB1, 0x516E}, //16783 #CJK UNIFIED IDEOGRAPH + {0xFBB2, 0x5F57}, //16784 #CJK UNIFIED IDEOGRAPH + {0xFBB3, 0x60E0}, //16785 #CJK UNIFIED IDEOGRAPH + {0xFBB4, 0x6167}, //16786 #CJK UNIFIED IDEOGRAPH + {0xFBB5, 0x66B3}, //16787 #CJK UNIFIED IDEOGRAPH + {0xFBB6, 0x8559}, //16788 #CJK UNIFIED IDEOGRAPH + {0xFBB7, 0x8E4A}, //16789 #CJK UNIFIED IDEOGRAPH + {0xFBB8, 0x91AF}, //16790 #CJK UNIFIED IDEOGRAPH + {0xFBB9, 0x978B}, //16791 #CJK UNIFIED IDEOGRAPH + {0xFBBA, 0x4E4E}, //16792 #CJK UNIFIED IDEOGRAPH + {0xFBBB, 0x4E92}, //16793 #CJK UNIFIED IDEOGRAPH + {0xFBBC, 0x547C}, //16794 #CJK UNIFIED IDEOGRAPH + {0xFBBD, 0x58D5}, //16795 #CJK UNIFIED IDEOGRAPH + {0xFBBE, 0x58FA}, //16796 #CJK UNIFIED IDEOGRAPH + {0xFBBF, 0x597D}, //16797 #CJK UNIFIED IDEOGRAPH + {0xFBC0, 0x5CB5}, //16798 #CJK UNIFIED IDEOGRAPH + {0xFBC1, 0x5F27}, //16799 #CJK UNIFIED IDEOGRAPH + {0xFBC2, 0x6236}, //16800 #CJK UNIFIED IDEOGRAPH + {0xFBC3, 0x6248}, //16801 #CJK UNIFIED IDEOGRAPH + {0xFBC4, 0x660A}, //16802 #CJK UNIFIED IDEOGRAPH + {0xFBC5, 0x6667}, //16803 #CJK UNIFIED IDEOGRAPH + {0xFBC6, 0x6BEB}, //16804 #CJK UNIFIED IDEOGRAPH + {0xFBC7, 0x6D69}, //16805 #CJK UNIFIED IDEOGRAPH + {0xFBC8, 0x6DCF}, //16806 #CJK UNIFIED IDEOGRAPH + {0xFBC9, 0x6E56}, //16807 #CJK UNIFIED IDEOGRAPH + {0xFBCA, 0x6EF8}, //16808 #CJK UNIFIED IDEOGRAPH + {0xFBCB, 0x6F94}, //16809 #CJK UNIFIED IDEOGRAPH + {0xFBCC, 0x6FE0}, //16810 #CJK UNIFIED IDEOGRAPH + {0xFBCD, 0x6FE9}, //16811 #CJK UNIFIED IDEOGRAPH + {0xFBCE, 0x705D}, //16812 #CJK UNIFIED IDEOGRAPH + {0xFBCF, 0x72D0}, //16813 #CJK UNIFIED IDEOGRAPH + {0xFBD0, 0x7425}, //16814 #CJK UNIFIED IDEOGRAPH + {0xFBD1, 0x745A}, //16815 #CJK UNIFIED IDEOGRAPH + {0xFBD2, 0x74E0}, //16816 #CJK UNIFIED IDEOGRAPH + {0xFBD3, 0x7693}, //16817 #CJK UNIFIED IDEOGRAPH + {0xFBD4, 0x795C}, //16818 #CJK UNIFIED IDEOGRAPH + {0xFBD5, 0x7CCA}, //16819 #CJK UNIFIED IDEOGRAPH + {0xFBD6, 0x7E1E}, //16820 #CJK UNIFIED IDEOGRAPH + {0xFBD7, 0x80E1}, //16821 #CJK UNIFIED IDEOGRAPH + {0xFBD8, 0x82A6}, //16822 #CJK UNIFIED IDEOGRAPH + {0xFBD9, 0x846B}, //16823 #CJK UNIFIED IDEOGRAPH + {0xFBDA, 0x84BF}, //16824 #CJK UNIFIED IDEOGRAPH + {0xFBDB, 0x864E}, //16825 #CJK UNIFIED IDEOGRAPH + {0xFBDC, 0x865F}, //16826 #CJK UNIFIED IDEOGRAPH + {0xFBDD, 0x8774}, //16827 #CJK UNIFIED IDEOGRAPH + {0xFBDE, 0x8B77}, //16828 #CJK UNIFIED IDEOGRAPH + {0xFBDF, 0x8C6A}, //16829 #CJK UNIFIED IDEOGRAPH + {0xFBE0, 0x93AC}, //16830 #CJK UNIFIED IDEOGRAPH + {0xFBE1, 0x9800}, //16831 #CJK UNIFIED IDEOGRAPH + {0xFBE2, 0x9865}, //16832 #CJK UNIFIED IDEOGRAPH + {0xFBE3, 0x60D1}, //16833 #CJK UNIFIED IDEOGRAPH + {0xFBE4, 0x6216}, //16834 #CJK UNIFIED IDEOGRAPH + {0xFBE5, 0x9177}, //16835 #CJK UNIFIED IDEOGRAPH + {0xFBE6, 0x5A5A}, //16836 #CJK UNIFIED IDEOGRAPH + {0xFBE7, 0x660F}, //16837 #CJK UNIFIED IDEOGRAPH + {0xFBE8, 0x6DF7}, //16838 #CJK UNIFIED IDEOGRAPH + {0xFBE9, 0x6E3E}, //16839 #CJK UNIFIED IDEOGRAPH + {0xFBEA, 0x743F}, //16840 #CJK UNIFIED IDEOGRAPH + {0xFBEB, 0x9B42}, //16841 #CJK UNIFIED IDEOGRAPH + {0xFBEC, 0x5FFD}, //16842 #CJK UNIFIED IDEOGRAPH + {0xFBED, 0x60DA}, //16843 #CJK UNIFIED IDEOGRAPH + {0xFBEE, 0x7B0F}, //16844 #CJK UNIFIED IDEOGRAPH + {0xFBEF, 0x54C4}, //16845 #CJK UNIFIED IDEOGRAPH + {0xFBF0, 0x5F18}, //16846 #CJK UNIFIED IDEOGRAPH + {0xFBF1, 0x6C5E}, //16847 #CJK UNIFIED IDEOGRAPH + {0xFBF2, 0x6CD3}, //16848 #CJK UNIFIED IDEOGRAPH + {0xFBF3, 0x6D2A}, //16849 #CJK UNIFIED IDEOGRAPH + {0xFBF4, 0x70D8}, //16850 #CJK UNIFIED IDEOGRAPH + {0xFBF5, 0x7D05}, //16851 #CJK UNIFIED IDEOGRAPH + {0xFBF6, 0x8679}, //16852 #CJK UNIFIED IDEOGRAPH + {0xFBF7, 0x8A0C}, //16853 #CJK UNIFIED IDEOGRAPH + {0xFBF8, 0x9D3B}, //16854 #CJK UNIFIED IDEOGRAPH + {0xFBF9, 0x5316}, //16855 #CJK UNIFIED IDEOGRAPH + {0xFBFA, 0x548C}, //16856 #CJK UNIFIED IDEOGRAPH + {0xFBFB, 0x5B05}, //16857 #CJK UNIFIED IDEOGRAPH + {0xFBFC, 0x6A3A}, //16858 #CJK UNIFIED IDEOGRAPH + {0xFBFD, 0x706B}, //16859 #CJK UNIFIED IDEOGRAPH + {0xFBFE, 0x7575}, //16860 #CJK UNIFIED IDEOGRAPH + {0xFCA1, 0x798D}, //16861 #CJK UNIFIED IDEOGRAPH + {0xFCA2, 0x79BE}, //16862 #CJK UNIFIED IDEOGRAPH + {0xFCA3, 0x82B1}, //16863 #CJK UNIFIED IDEOGRAPH + {0xFCA4, 0x83EF}, //16864 #CJK UNIFIED IDEOGRAPH + {0xFCA5, 0x8A71}, //16865 #CJK UNIFIED IDEOGRAPH + {0xFCA6, 0x8B41}, //16866 #CJK UNIFIED IDEOGRAPH + {0xFCA7, 0x8CA8}, //16867 #CJK UNIFIED IDEOGRAPH + {0xFCA8, 0x9774}, //16868 #CJK UNIFIED IDEOGRAPH + {0xFCA9, 0xFA0B}, //16869 #CJK COMPATIBILITY IDEOGRAPH + {0xFCAA, 0x64F4}, //16870 #CJK UNIFIED IDEOGRAPH + {0xFCAB, 0x652B}, //16871 #CJK UNIFIED IDEOGRAPH + {0xFCAC, 0x78BA}, //16872 #CJK UNIFIED IDEOGRAPH + {0xFCAD, 0x78BB}, //16873 #CJK UNIFIED IDEOGRAPH + {0xFCAE, 0x7A6B}, //16874 #CJK UNIFIED IDEOGRAPH + {0xFCAF, 0x4E38}, //16875 #CJK UNIFIED IDEOGRAPH + {0xFCB0, 0x559A}, //16876 #CJK UNIFIED IDEOGRAPH + {0xFCB1, 0x5950}, //16877 #CJK UNIFIED IDEOGRAPH + {0xFCB2, 0x5BA6}, //16878 #CJK UNIFIED IDEOGRAPH + {0xFCB3, 0x5E7B}, //16879 #CJK UNIFIED IDEOGRAPH + {0xFCB4, 0x60A3}, //16880 #CJK UNIFIED IDEOGRAPH + {0xFCB5, 0x63DB}, //16881 #CJK UNIFIED IDEOGRAPH + {0xFCB6, 0x6B61}, //16882 #CJK UNIFIED IDEOGRAPH + {0xFCB7, 0x6665}, //16883 #CJK UNIFIED IDEOGRAPH + {0xFCB8, 0x6853}, //16884 #CJK UNIFIED IDEOGRAPH + {0xFCB9, 0x6E19}, //16885 #CJK UNIFIED IDEOGRAPH + {0xFCBA, 0x7165}, //16886 #CJK UNIFIED IDEOGRAPH + {0xFCBB, 0x74B0}, //16887 #CJK UNIFIED IDEOGRAPH + {0xFCBC, 0x7D08}, //16888 #CJK UNIFIED IDEOGRAPH + {0xFCBD, 0x9084}, //16889 #CJK UNIFIED IDEOGRAPH + {0xFCBE, 0x9A69}, //16890 #CJK UNIFIED IDEOGRAPH + {0xFCBF, 0x9C25}, //16891 #CJK UNIFIED IDEOGRAPH + {0xFCC0, 0x6D3B}, //16892 #CJK UNIFIED IDEOGRAPH + {0xFCC1, 0x6ED1}, //16893 #CJK UNIFIED IDEOGRAPH + {0xFCC2, 0x733E}, //16894 #CJK UNIFIED IDEOGRAPH + {0xFCC3, 0x8C41}, //16895 #CJK UNIFIED IDEOGRAPH + {0xFCC4, 0x95CA}, //16896 #CJK UNIFIED IDEOGRAPH + {0xFCC5, 0x51F0}, //16897 #CJK UNIFIED IDEOGRAPH + {0xFCC6, 0x5E4C}, //16898 #CJK UNIFIED IDEOGRAPH + {0xFCC7, 0x5FA8}, //16899 #CJK UNIFIED IDEOGRAPH + {0xFCC8, 0x604D}, //16900 #CJK UNIFIED IDEOGRAPH + {0xFCC9, 0x60F6}, //16901 #CJK UNIFIED IDEOGRAPH + {0xFCCA, 0x6130}, //16902 #CJK UNIFIED IDEOGRAPH + {0xFCCB, 0x614C}, //16903 #CJK UNIFIED IDEOGRAPH + {0xFCCC, 0x6643}, //16904 #CJK UNIFIED IDEOGRAPH + {0xFCCD, 0x6644}, //16905 #CJK UNIFIED IDEOGRAPH + {0xFCCE, 0x69A5}, //16906 #CJK UNIFIED IDEOGRAPH + {0xFCCF, 0x6CC1}, //16907 #CJK UNIFIED IDEOGRAPH + {0xFCD0, 0x6E5F}, //16908 #CJK UNIFIED IDEOGRAPH + {0xFCD1, 0x6EC9}, //16909 #CJK UNIFIED IDEOGRAPH + {0xFCD2, 0x6F62}, //16910 #CJK UNIFIED IDEOGRAPH + {0xFCD3, 0x714C}, //16911 #CJK UNIFIED IDEOGRAPH + {0xFCD4, 0x749C}, //16912 #CJK UNIFIED IDEOGRAPH + {0xFCD5, 0x7687}, //16913 #CJK UNIFIED IDEOGRAPH + {0xFCD6, 0x7BC1}, //16914 #CJK UNIFIED IDEOGRAPH + {0xFCD7, 0x7C27}, //16915 #CJK UNIFIED IDEOGRAPH + {0xFCD8, 0x8352}, //16916 #CJK UNIFIED IDEOGRAPH + {0xFCD9, 0x8757}, //16917 #CJK UNIFIED IDEOGRAPH + {0xFCDA, 0x9051}, //16918 #CJK UNIFIED IDEOGRAPH + {0xFCDB, 0x968D}, //16919 #CJK UNIFIED IDEOGRAPH + {0xFCDC, 0x9EC3}, //16920 #CJK UNIFIED IDEOGRAPH + {0xFCDD, 0x532F}, //16921 #CJK UNIFIED IDEOGRAPH + {0xFCDE, 0x56DE}, //16922 #CJK UNIFIED IDEOGRAPH + {0xFCDF, 0x5EFB}, //16923 #CJK UNIFIED IDEOGRAPH + {0xFCE0, 0x5F8A}, //16924 #CJK UNIFIED IDEOGRAPH + {0xFCE1, 0x6062}, //16925 #CJK UNIFIED IDEOGRAPH + {0xFCE2, 0x6094}, //16926 #CJK UNIFIED IDEOGRAPH + {0xFCE3, 0x61F7}, //16927 #CJK UNIFIED IDEOGRAPH + {0xFCE4, 0x6666}, //16928 #CJK UNIFIED IDEOGRAPH + {0xFCE5, 0x6703}, //16929 #CJK UNIFIED IDEOGRAPH + {0xFCE6, 0x6A9C}, //16930 #CJK UNIFIED IDEOGRAPH + {0xFCE7, 0x6DEE}, //16931 #CJK UNIFIED IDEOGRAPH + {0xFCE8, 0x6FAE}, //16932 #CJK UNIFIED IDEOGRAPH + {0xFCE9, 0x7070}, //16933 #CJK UNIFIED IDEOGRAPH + {0xFCEA, 0x736A}, //16934 #CJK UNIFIED IDEOGRAPH + {0xFCEB, 0x7E6A}, //16935 #CJK UNIFIED IDEOGRAPH + {0xFCEC, 0x81BE}, //16936 #CJK UNIFIED IDEOGRAPH + {0xFCED, 0x8334}, //16937 #CJK UNIFIED IDEOGRAPH + {0xFCEE, 0x86D4}, //16938 #CJK UNIFIED IDEOGRAPH + {0xFCEF, 0x8AA8}, //16939 #CJK UNIFIED IDEOGRAPH + {0xFCF0, 0x8CC4}, //16940 #CJK UNIFIED IDEOGRAPH + {0xFCF1, 0x5283}, //16941 #CJK UNIFIED IDEOGRAPH + {0xFCF2, 0x7372}, //16942 #CJK UNIFIED IDEOGRAPH + {0xFCF3, 0x5B96}, //16943 #CJK UNIFIED IDEOGRAPH + {0xFCF4, 0x6A6B}, //16944 #CJK UNIFIED IDEOGRAPH + {0xFCF5, 0x9404}, //16945 #CJK UNIFIED IDEOGRAPH + {0xFCF6, 0x54EE}, //16946 #CJK UNIFIED IDEOGRAPH + {0xFCF7, 0x5686}, //16947 #CJK UNIFIED IDEOGRAPH + {0xFCF8, 0x5B5D}, //16948 #CJK UNIFIED IDEOGRAPH + {0xFCF9, 0x6548}, //16949 #CJK UNIFIED IDEOGRAPH + {0xFCFA, 0x6585}, //16950 #CJK UNIFIED IDEOGRAPH + {0xFCFB, 0x66C9}, //16951 #CJK UNIFIED IDEOGRAPH + {0xFCFC, 0x689F}, //16952 #CJK UNIFIED IDEOGRAPH + {0xFCFD, 0x6D8D}, //16953 #CJK UNIFIED IDEOGRAPH + {0xFCFE, 0x6DC6}, //16954 #CJK UNIFIED IDEOGRAPH + {0xFDA1, 0x723B}, //16955 #CJK UNIFIED IDEOGRAPH + {0xFDA2, 0x80B4}, //16956 #CJK UNIFIED IDEOGRAPH + {0xFDA3, 0x9175}, //16957 #CJK UNIFIED IDEOGRAPH + {0xFDA4, 0x9A4D}, //16958 #CJK UNIFIED IDEOGRAPH + {0xFDA5, 0x4FAF}, //16959 #CJK UNIFIED IDEOGRAPH + {0xFDA6, 0x5019}, //16960 #CJK UNIFIED IDEOGRAPH + {0xFDA7, 0x539A}, //16961 #CJK UNIFIED IDEOGRAPH + {0xFDA8, 0x540E}, //16962 #CJK UNIFIED IDEOGRAPH + {0xFDA9, 0x543C}, //16963 #CJK UNIFIED IDEOGRAPH + {0xFDAA, 0x5589}, //16964 #CJK UNIFIED IDEOGRAPH + {0xFDAB, 0x55C5}, //16965 #CJK UNIFIED IDEOGRAPH + {0xFDAC, 0x5E3F}, //16966 #CJK UNIFIED IDEOGRAPH + {0xFDAD, 0x5F8C}, //16967 #CJK UNIFIED IDEOGRAPH + {0xFDAE, 0x673D}, //16968 #CJK UNIFIED IDEOGRAPH + {0xFDAF, 0x7166}, //16969 #CJK UNIFIED IDEOGRAPH + {0xFDB0, 0x73DD}, //16970 #CJK UNIFIED IDEOGRAPH + {0xFDB1, 0x9005}, //16971 #CJK UNIFIED IDEOGRAPH + {0xFDB2, 0x52DB}, //16972 #CJK UNIFIED IDEOGRAPH + {0xFDB3, 0x52F3}, //16973 #CJK UNIFIED IDEOGRAPH + {0xFDB4, 0x5864}, //16974 #CJK UNIFIED IDEOGRAPH + {0xFDB5, 0x58CE}, //16975 #CJK UNIFIED IDEOGRAPH + {0xFDB6, 0x7104}, //16976 #CJK UNIFIED IDEOGRAPH + {0xFDB7, 0x718F}, //16977 #CJK UNIFIED IDEOGRAPH + {0xFDB8, 0x71FB}, //16978 #CJK UNIFIED IDEOGRAPH + {0xFDB9, 0x85B0}, //16979 #CJK UNIFIED IDEOGRAPH + {0xFDBA, 0x8A13}, //16980 #CJK UNIFIED IDEOGRAPH + {0xFDBB, 0x6688}, //16981 #CJK UNIFIED IDEOGRAPH + {0xFDBC, 0x85A8}, //16982 #CJK UNIFIED IDEOGRAPH + {0xFDBD, 0x55A7}, //16983 #CJK UNIFIED IDEOGRAPH + {0xFDBE, 0x6684}, //16984 #CJK UNIFIED IDEOGRAPH + {0xFDBF, 0x714A}, //16985 #CJK UNIFIED IDEOGRAPH + {0xFDC0, 0x8431}, //16986 #CJK UNIFIED IDEOGRAPH + {0xFDC1, 0x5349}, //16987 #CJK UNIFIED IDEOGRAPH + {0xFDC2, 0x5599}, //16988 #CJK UNIFIED IDEOGRAPH + {0xFDC3, 0x6BC1}, //16989 #CJK UNIFIED IDEOGRAPH + {0xFDC4, 0x5F59}, //16990 #CJK UNIFIED IDEOGRAPH + {0xFDC5, 0x5FBD}, //16991 #CJK UNIFIED IDEOGRAPH + {0xFDC6, 0x63EE}, //16992 #CJK UNIFIED IDEOGRAPH + {0xFDC7, 0x6689}, //16993 #CJK UNIFIED IDEOGRAPH + {0xFDC8, 0x7147}, //16994 #CJK UNIFIED IDEOGRAPH + {0xFDC9, 0x8AF1}, //16995 #CJK UNIFIED IDEOGRAPH + {0xFDCA, 0x8F1D}, //16996 #CJK UNIFIED IDEOGRAPH + {0xFDCB, 0x9EBE}, //16997 #CJK UNIFIED IDEOGRAPH + {0xFDCC, 0x4F11}, //16998 #CJK UNIFIED IDEOGRAPH + {0xFDCD, 0x643A}, //16999 #CJK UNIFIED IDEOGRAPH + {0xFDCE, 0x70CB}, //17000 #CJK UNIFIED IDEOGRAPH + {0xFDCF, 0x7566}, //17001 #CJK UNIFIED IDEOGRAPH + {0xFDD0, 0x8667}, //17002 #CJK UNIFIED IDEOGRAPH + {0xFDD1, 0x6064}, //17003 #CJK UNIFIED IDEOGRAPH + {0xFDD2, 0x8B4E}, //17004 #CJK UNIFIED IDEOGRAPH + {0xFDD3, 0x9DF8}, //17005 #CJK UNIFIED IDEOGRAPH + {0xFDD4, 0x5147}, //17006 #CJK UNIFIED IDEOGRAPH + {0xFDD5, 0x51F6}, //17007 #CJK UNIFIED IDEOGRAPH + {0xFDD6, 0x5308}, //17008 #CJK UNIFIED IDEOGRAPH + {0xFDD7, 0x6D36}, //17009 #CJK UNIFIED IDEOGRAPH + {0xFDD8, 0x80F8}, //17010 #CJK UNIFIED IDEOGRAPH + {0xFDD9, 0x9ED1}, //17011 #CJK UNIFIED IDEOGRAPH + {0xFDDA, 0x6615}, //17012 #CJK UNIFIED IDEOGRAPH + {0xFDDB, 0x6B23}, //17013 #CJK UNIFIED IDEOGRAPH + {0xFDDC, 0x7098}, //17014 #CJK UNIFIED IDEOGRAPH + {0xFDDD, 0x75D5}, //17015 #CJK UNIFIED IDEOGRAPH + {0xFDDE, 0x5403}, //17016 #CJK UNIFIED IDEOGRAPH + {0xFDDF, 0x5C79}, //17017 #CJK UNIFIED IDEOGRAPH + {0xFDE0, 0x7D07}, //17018 #CJK UNIFIED IDEOGRAPH + {0xFDE1, 0x8A16}, //17019 #CJK UNIFIED IDEOGRAPH + {0xFDE2, 0x6B20}, //17020 #CJK UNIFIED IDEOGRAPH + {0xFDE3, 0x6B3D}, //17021 #CJK UNIFIED IDEOGRAPH + {0xFDE4, 0x6B46}, //17022 #CJK UNIFIED IDEOGRAPH + {0xFDE5, 0x5438}, //17023 #CJK UNIFIED IDEOGRAPH + {0xFDE6, 0x6070}, //17024 #CJK UNIFIED IDEOGRAPH + {0xFDE7, 0x6D3D}, //17025 #CJK UNIFIED IDEOGRAPH + {0xFDE8, 0x7FD5}, //17026 #CJK UNIFIED IDEOGRAPH + {0xFDE9, 0x8208}, //17027 #CJK UNIFIED IDEOGRAPH + {0xFDEA, 0x50D6}, //17028 #CJK UNIFIED IDEOGRAPH + {0xFDEB, 0x51DE}, //17029 #CJK UNIFIED IDEOGRAPH + {0xFDEC, 0x559C}, //17030 #CJK UNIFIED IDEOGRAPH + {0xFDED, 0x566B}, //17031 #CJK UNIFIED IDEOGRAPH + {0xFDEE, 0x56CD}, //17032 #CJK UNIFIED IDEOGRAPH + {0xFDEF, 0x59EC}, //17033 #CJK UNIFIED IDEOGRAPH + {0xFDF0, 0x5B09}, //17034 #CJK UNIFIED IDEOGRAPH + {0xFDF1, 0x5E0C}, //17035 #CJK UNIFIED IDEOGRAPH + {0xFDF2, 0x6199}, //17036 #CJK UNIFIED IDEOGRAPH + {0xFDF3, 0x6198}, //17037 #CJK UNIFIED IDEOGRAPH + {0xFDF4, 0x6231}, //17038 #CJK UNIFIED IDEOGRAPH + {0xFDF5, 0x665E}, //17039 #CJK UNIFIED IDEOGRAPH + {0xFDF6, 0x66E6}, //17040 #CJK UNIFIED IDEOGRAPH + {0xFDF7, 0x7199}, //17041 #CJK UNIFIED IDEOGRAPH + {0xFDF8, 0x71B9}, //17042 #CJK UNIFIED IDEOGRAPH + {0xFDF9, 0x71BA}, //17043 #CJK UNIFIED IDEOGRAPH + {0xFDFA, 0x72A7}, //17044 #CJK UNIFIED IDEOGRAPH + {0xFDFB, 0x79A7}, //17045 #CJK UNIFIED IDEOGRAPH + {0xFDFC, 0x7A00}, //17046 #CJK UNIFIED IDEOGRAPH + {0xFDFD, 0x7FB2}, //17047 #CJK UNIFIED IDEOGRAPH + {0xFDFE, 0x8A70}, //17048 #CJK UNIFIED IDEOGRAPH +}; + +#endif // DRW_CPTABLE949_H diff --git a/extlib/libdxfrw/intern/drw_cptable950.h b/extlib/libdxfrw/intern/drw_cptable950.h new file mode 100644 index 0000000..2afb89d --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptable950.h @@ -0,0 +1,13654 @@ +#ifndef DRW_CPTABLE950_H +#define DRW_CPTABLE950_H + +//Chinese (Taiwan, Hong Kong SAR) + +//first entry in this table are 0x80 +#define CPOFFSET950 0x80 +#define CPLENGHT950 13503 +#define NOTFOUND950 0x003F + +//Table 950 one byte +static const int DRW_Table950[1] = { +}; + +//Table 950 lead byte +//pairs of start/end in DRW_DoubleTable950 +static const int DRW_LeadTable950[] = { + 0, //1#DBCS LEAD BYTE 0x81, empty + 0, //2#DBCS LEAD BYTE 0x82, empty + 0, //3#DBCS LEAD BYTE 0x83, empty + 0, //4#DBCS LEAD BYTE 0x84, empty + 0, //5#DBCS LEAD BYTE 0x85, empty + 0, //6#DBCS LEAD BYTE 0x86, empty + 0, //7#DBCS LEAD BYTE 0x87, empty + 0, //8#DBCS LEAD BYTE 0x88, empty + 0, //9#DBCS LEAD BYTE 0x89, empty + 0, //10#DBCS LEAD BYTE 0x8A, empty + 0, //11#DBCS LEAD BYTE 0x8B, empty + 0, //12#DBCS LEAD BYTE 0x8C, empty + 0, //13#DBCS LEAD BYTE 0x8D, empty + 0, //14#DBCS LEAD BYTE 0x8E, empty + 0, //15#DBCS LEAD BYTE 0x8F, empty + 0, //16#DBCS LEAD BYTE 0x90, empty + 0, //17#DBCS LEAD BYTE 0x91, empty + 0, //18#DBCS LEAD BYTE 0x92, empty + 0, //19#DBCS LEAD BYTE 0x93, empty + 0, //20#DBCS LEAD BYTE 0x94, empty + 0, //21#DBCS LEAD BYTE 0x95, empty + 0, //22#DBCS LEAD BYTE 0x96, empty + 0, //23#DBCS LEAD BYTE 0x97, empty + 0, //24#DBCS LEAD BYTE 0x98, empty + 0, //25#DBCS LEAD BYTE 0x99, empty + 0, //26#DBCS LEAD BYTE 0x9A, empty + 0, //27#DBCS LEAD BYTE 0x9B, empty + 0, //28#DBCS LEAD BYTE 0x9C, empty + 0, //29#DBCS LEAD BYTE 0x9D, empty + 0, //30#DBCS LEAD BYTE 0x9E, empty + 0, //31#DBCS LEAD BYTE 0x9F, empty + 0, //32#DBCS LEAD BYTE 0xA0, empty + 0, //33#DBCS LEAD BYTE 0xA1 + 157, //34#DBCS LEAD BYTE 0xA2 + 314, //35#DBCS LEAD BYTE 0xA3 + 409, //36#DBCS LEAD BYTE 0xA4 + 566, //37#DBCS LEAD BYTE 0xA5 + 723, //38#DBCS LEAD BYTE 0xA6 + 880, //39#DBCS LEAD BYTE 0xA7 + 1037, //40#DBCS LEAD BYTE 0xA8 + 1194, //41#DBCS LEAD BYTE 0xA9 + 1351, //42#DBCS LEAD BYTE 0xAA + 1508, //43#DBCS LEAD BYTE 0xAB + 1665, //44#DBCS LEAD BYTE 0xAC + 1822, //45#DBCS LEAD BYTE 0xAD + 1979, //46#DBCS LEAD BYTE 0xAE + 2136, //47#DBCS LEAD BYTE 0xAF + 2293, //48#DBCS LEAD BYTE 0xB0 + 2450, //49#DBCS LEAD BYTE 0xB1 + 2607, //50#DBCS LEAD BYTE 0xB2 + 2764, //51#DBCS LEAD BYTE 0xB3 + 2921, //52#DBCS LEAD BYTE 0xB4 + 3078, //53#DBCS LEAD BYTE 0xB5 + 3235, //54#DBCS LEAD BYTE 0xB6 + 3392, //55#DBCS LEAD BYTE 0xB7 + 3549, //56#DBCS LEAD BYTE 0xB8 + 3706, //57#DBCS LEAD BYTE 0xB9 + 3863, //58#DBCS LEAD BYTE 0xBA + 4020, //59#DBCS LEAD BYTE 0xBB + 4177, //60#DBCS LEAD BYTE 0xBC + 4334, //61#DBCS LEAD BYTE 0xBD + 4491, //62#DBCS LEAD BYTE 0xBE + 4648, //63#DBCS LEAD BYTE 0xBF + 4805, //64#DBCS LEAD BYTE 0xC0 + 4962, //65#DBCS LEAD BYTE 0xC1 + 5119, //66#DBCS LEAD BYTE 0xC2 + 5276, //67#DBCS LEAD BYTE 0xC3 + 5443, //68#DBCS LEAD BYTE 0xC4 + 5590, //69#DBCS LEAD BYTE 0xC5 + 5747, //70#DBCS LEAD BYTE 0xC6 + 5810, //71#DBCS LEAD BYTE 0xC7, empty + 5810, //72#DBCS LEAD BYTE 0xC8, empty + 5810, //73#DBCS LEAD BYTE 0xC9 + 5967, //74#DBCS LEAD BYTE 0xCA + 6124, //75#DBCS LEAD BYTE 0xCB + 6281, //76#DBCS LEAD BYTE 0xCC + 6438, //77#DBCS LEAD BYTE 0xCD + 6595, //78#DBCS LEAD BYTE 0xCE + 6752, //79#DBCS LEAD BYTE 0xCF + 6909, //80#DBCS LEAD BYTE 0xD0 + 7066, //81#DBCS LEAD BYTE 0xD1 + 7223, //82#DBCS LEAD BYTE 0xD2 + 7380, //83#DBCS LEAD BYTE 0xD3 + 7537, //84#DBCS LEAD BYTE 0xD4 + 7694, //85#DBCS LEAD BYTE 0xD5 + 7851, //86#DBCS LEAD BYTE 0xD6 + 8008, //87#DBCS LEAD BYTE 0xD7 + 8165, //88#DBCS LEAD BYTE 0xD8 + 8322, //89#DBCS LEAD BYTE 0xD9 + 8479, //90#DBCS LEAD BYTE 0xDA + 8636, //91#DBCS LEAD BYTE 0xDB + 8793, //92#DBCS LEAD BYTE 0xDC + 8950, //93#DBCS LEAD BYTE 0xDD + 9107, //94#DBCS LEAD BYTE 0xDE + 9264, //95#DBCS LEAD BYTE 0xDF + 9421, //96#DBCS LEAD BYTE 0xE0 + 9578, //97#DBCS LEAD BYTE 0xE1 + 9735, //98#DBCS LEAD BYTE 0xE2 + 9892, //99#DBCS LEAD BYTE 0xE3 + 10049, //100#DBCS LEAD BYTE 0xE4 + 10206, //101#DBCS LEAD BYTE 0xE5 + 10363, //102#DBCS LEAD BYTE 0xE6 + 10520, //103#DBCS LEAD BYTE 0xE7 + 10677, //104#DBCS LEAD BYTE 0xE8 + 10834, //105#DBCS LEAD BYTE 0xE9 + 10991, //106#DBCS LEAD BYTE 0xEA + 11148, //107#DBCS LEAD BYTE 0xEB + 11305, //108#DBCS LEAD BYTE 0xEC + 11462, //109#DBCS LEAD BYTE 0xED + 11619, //110#DBCS LEAD BYTE 0xEE + 11776, //111#DBCS LEAD BYTE 0xEF + 11933, //112#DBCS LEAD BYTE 0xF0 + 12090, //113#DBCS LEAD BYTE 0xF1 + 12247, //114#DBCS LEAD BYTE 0xF2 + 12404, //115#DBCS LEAD BYTE 0xF3 + 12561, //116#DBCS LEAD BYTE 0xF4 + 12718, //117#DBCS LEAD BYTE 0xF5 + 12875, //118#DBCS LEAD BYTE 0xF6 + 13032, //119#DBCS LEAD BYTE 0xF7 + 13189, //120#DBCS LEAD BYTE 0xF8 + 13346, //121#DBCS LEAD BYTE 0xF9 + 13502, //122#DBCS LEAD BYTE 0xFA, empty + 13502, //123#DBCS LEAD BYTE 0xFB, empty + 13502, //124#DBCS LEAD BYTE 0xFC, empty + 13502, //125#DBCS LEAD BYTE 0xFD, empty + 13502, //126#DBCS LEAD BYTE 0xFE, empty + 13502, //127#UNDEFINED 0xFF, END OF TABLE +}; + +//Table 950 tail byte +static const int DRW_DoubleTable950[][2] = { + {0xA140, 0x3000}, //1 #IDEOGRAPHIC SPACE + {0xA141, 0xFF0C}, //2 #FULLWIDTH COMMA + {0xA142, 0x3001}, //3 #IDEOGRAPHIC COMMA + {0xA143, 0x3002}, //4 #IDEOGRAPHIC FULL STOP + {0xA144, 0xFF0E}, //5 #FULLWIDTH FULL STOP + {0xA145, 0x2027}, //6 #HYPHENATION POINT + {0xA146, 0xFF1B}, //7 #FULLWIDTH SEMICOLON + {0xA147, 0xFF1A}, //8 #FULLWIDTH COLON + {0xA148, 0xFF1F}, //9 #FULLWIDTH QUESTION MARK + {0xA149, 0xFF01}, //10 #FULLWIDTH EXCLAMATION MARK + {0xA14A, 0xFE30}, //11 #PRESENTATION FORM FOR VERTICAL TWO DOT LEADER + {0xA14B, 0x2026}, //12 #HORIZONTAL ELLIPSIS + {0xA14C, 0x2025}, //13 #TWO DOT LEADER + {0xA14D, 0xFE50}, //14 #SMALL COMMA + {0xA14E, 0xFE51}, //15 #SMALL IDEOGRAPHIC COMMA + {0xA14F, 0xFE52}, //16 #SMALL FULL STOP + {0xA150, 0x00B7}, //17 #MIDDLE DOT + {0xA151, 0xFE54}, //18 #SMALL SEMICOLON + {0xA152, 0xFE55}, //19 #SMALL COLON + {0xA153, 0xFE56}, //20 #SMALL QUESTION MARK + {0xA154, 0xFE57}, //21 #SMALL EXCLAMATION MARK + {0xA155, 0xFF5C}, //22 #FULLWIDTH VERTICAL LINE + {0xA156, 0x2013}, //23 #EN DASH + {0xA157, 0xFE31}, //24 #PRESENTATION FORM FOR VERTICAL EM DASH + {0xA158, 0x2014}, //25 #EM DASH + {0xA159, 0xFE33}, //26 #PRESENTATION FORM FOR VERTICAL LOW LINE + {0xA15A, 0x2574}, //27 #BOX DRAWINGS LIGHT LEFT + {0xA15B, 0xFE34}, //28 #PRESENTATION FORM FOR VERTICAL WAVY LOW LINE + {0xA15C, 0xFE4F}, //29 #WAVY LOW LINE + {0xA15D, 0xFF08}, //30 #FULLWIDTH LEFT PARENTHESIS + {0xA15E, 0xFF09}, //31 #FULLWIDTH RIGHT PARENTHESIS + {0xA15F, 0xFE35}, //32 #PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS + {0xA160, 0xFE36}, //33 #PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS + {0xA161, 0xFF5B}, //34 #FULLWIDTH LEFT CURLY BRACKET + {0xA162, 0xFF5D}, //35 #FULLWIDTH RIGHT CURLY BRACKET + {0xA163, 0xFE37}, //36 #PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET + {0xA164, 0xFE38}, //37 #PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET + {0xA165, 0x3014}, //38 #LEFT TORTOISE SHELL BRACKET + {0xA166, 0x3015}, //39 #RIGHT TORTOISE SHELL BRACKET + {0xA167, 0xFE39}, //40 #PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET + {0xA168, 0xFE3A}, //41 #PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET + {0xA169, 0x3010}, //42 #LEFT BLACK LENTICULAR BRACKET + {0xA16A, 0x3011}, //43 #RIGHT BLACK LENTICULAR BRACKET + {0xA16B, 0xFE3B}, //44 #PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET + {0xA16C, 0xFE3C}, //45 #PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET + {0xA16D, 0x300A}, //46 #LEFT DOUBLE ANGLE BRACKET + {0xA16E, 0x300B}, //47 #RIGHT DOUBLE ANGLE BRACKET + {0xA16F, 0xFE3D}, //48 #PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET + {0xA170, 0xFE3E}, //49 #PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET + {0xA171, 0x3008}, //50 #LEFT ANGLE BRACKET + {0xA172, 0x3009}, //51 #RIGHT ANGLE BRACKET + {0xA173, 0xFE3F}, //52 #PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET + {0xA174, 0xFE40}, //53 #PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET + {0xA175, 0x300C}, //54 #LEFT CORNER BRACKET + {0xA176, 0x300D}, //55 #RIGHT CORNER BRACKET + {0xA177, 0xFE41}, //56 #PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET + {0xA178, 0xFE42}, //57 #PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET + {0xA179, 0x300E}, //58 #LEFT WHITE CORNER BRACKET + {0xA17A, 0x300F}, //59 #RIGHT WHITE CORNER BRACKET + {0xA17B, 0xFE43}, //60 #PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET + {0xA17C, 0xFE44}, //61 #PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET + {0xA17D, 0xFE59}, //62 #SMALL LEFT PARENTHESIS + {0xA17E, 0xFE5A}, //63 #SMALL RIGHT PARENTHESIS + {0xA1A1, 0xFE5B}, //64 #SMALL LEFT CURLY BRACKET + {0xA1A2, 0xFE5C}, //65 #SMALL RIGHT CURLY BRACKET + {0xA1A3, 0xFE5D}, //66 #SMALL LEFT TORTOISE SHELL BRACKET + {0xA1A4, 0xFE5E}, //67 #SMALL RIGHT TORTOISE SHELL BRACKET + {0xA1A5, 0x2018}, //68 #LEFT SINGLE QUOTATION MARK + {0xA1A6, 0x2019}, //69 #RIGHT SINGLE QUOTATION MARK + {0xA1A7, 0x201C}, //70 #LEFT DOUBLE QUOTATION MARK + {0xA1A8, 0x201D}, //71 #RIGHT DOUBLE QUOTATION MARK + {0xA1A9, 0x301D}, //72 #REVERSED DOUBLE PRIME QUOTATION MARK + {0xA1AA, 0x301E}, //73 #DOUBLE PRIME QUOTATION MARK + {0xA1AB, 0x2035}, //74 #REVERSED PRIME + {0xA1AC, 0x2032}, //75 #PRIME + {0xA1AD, 0xFF03}, //76 #FULLWIDTH NUMBER SIGN + {0xA1AE, 0xFF06}, //77 #FULLWIDTH AMPERSAND + {0xA1AF, 0xFF0A}, //78 #FULLWIDTH ASTERISK + {0xA1B0, 0x203B}, //79 #REFERENCE MARK + {0xA1B1, 0x00A7}, //80 #SECTION SIGN + {0xA1B2, 0x3003}, //81 #DITTO MARK + {0xA1B3, 0x25CB}, //82 #WHITE CIRCLE + {0xA1B4, 0x25CF}, //83 #BLACK CIRCLE + {0xA1B5, 0x25B3}, //84 #WHITE UP-POINTING TRIANGLE + {0xA1B6, 0x25B2}, //85 #BLACK UP-POINTING TRIANGLE + {0xA1B7, 0x25CE}, //86 #BULLSEYE + {0xA1B8, 0x2606}, //87 #WHITE STAR + {0xA1B9, 0x2605}, //88 #BLACK STAR + {0xA1BA, 0x25C7}, //89 #WHITE DIAMOND + {0xA1BB, 0x25C6}, //90 #BLACK DIAMOND + {0xA1BC, 0x25A1}, //91 #WHITE SQUARE + {0xA1BD, 0x25A0}, //92 #BLACK SQUARE + {0xA1BE, 0x25BD}, //93 #WHITE DOWN-POINTING TRIANGLE + {0xA1BF, 0x25BC}, //94 #BLACK DOWN-POINTING TRIANGLE + {0xA1C0, 0x32A3}, //95 #CIRCLED IDEOGRAPH CORRECT + {0xA1C1, 0x2105}, //96 #CARE OF + {0xA1C2, 0x00AF}, //97 #MACRON + {0xA1C3, 0xFFE3}, //98 #FULLWIDTH MACRON + {0xA1C4, 0xFF3F}, //99 #FULLWIDTH LOW LINE + {0xA1C5, 0x02CD}, //100 #MODIFIER LETTER LOW MACRON + {0xA1C6, 0xFE49}, //101 #DASHED OVERLINE + {0xA1C7, 0xFE4A}, //102 #CENTRELINE OVERLINE + {0xA1C8, 0xFE4D}, //103 #DASHED LOW LINE + {0xA1C9, 0xFE4E}, //104 #CENTRELINE LOW LINE + {0xA1CA, 0xFE4B}, //105 #WAVY OVERLINE + {0xA1CB, 0xFE4C}, //106 #DOUBLE WAVY OVERLINE + {0xA1CC, 0xFE5F}, //107 #SMALL NUMBER SIGN + {0xA1CD, 0xFE60}, //108 #SMALL AMPERSAND + {0xA1CE, 0xFE61}, //109 #SMALL ASTERISK + {0xA1CF, 0xFF0B}, //110 #FULLWIDTH PLUS SIGN + {0xA1D0, 0xFF0D}, //111 #FULLWIDTH HYPHEN-MINUS + {0xA1D1, 0x00D7}, //112 #MULTIPLICATION SIGN + {0xA1D2, 0x00F7}, //113 #DIVISION SIGN + {0xA1D3, 0x00B1}, //114 #PLUS-MINUS SIGN + {0xA1D4, 0x221A}, //115 #SQUARE ROOT + {0xA1D5, 0xFF1C}, //116 #FULLWIDTH LESS-THAN SIGN + {0xA1D6, 0xFF1E}, //117 #FULLWIDTH GREATER-THAN SIGN + {0xA1D7, 0xFF1D}, //118 #FULLWIDTH EQUALS SIGN + {0xA1D8, 0x2266}, //119 #LESS-THAN OVER EQUAL TO + {0xA1D9, 0x2267}, //120 #GREATER-THAN OVER EQUAL TO + {0xA1DA, 0x2260}, //121 #NOT EQUAL TO + {0xA1DB, 0x221E}, //122 #INFINITY + {0xA1DC, 0x2252}, //123 #APPROXIMATELY EQUAL TO OR THE IMAGE OF + {0xA1DD, 0x2261}, //124 #IDENTICAL TO + {0xA1DE, 0xFE62}, //125 #SMALL PLUS SIGN + {0xA1DF, 0xFE63}, //126 #SMALL HYPHEN-MINUS + {0xA1E0, 0xFE64}, //127 #SMALL LESS-THAN SIGN + {0xA1E1, 0xFE65}, //128 #SMALL GREATER-THAN SIGN + {0xA1E2, 0xFE66}, //129 #SMALL EQUALS SIGN + {0xA1E3, 0xFF5E}, //130 #FULLWIDTH TILDE + {0xA1E4, 0x2229}, //131 #INTERSECTION + {0xA1E5, 0x222A}, //132 #UNION + {0xA1E6, 0x22A5}, //133 #UP TACK + {0xA1E7, 0x2220}, //134 #ANGLE + {0xA1E8, 0x221F}, //135 #RIGHT ANGLE + {0xA1E9, 0x22BF}, //136 #RIGHT TRIANGLE + {0xA1EA, 0x33D2}, //137 #SQUARE LOG + {0xA1EB, 0x33D1}, //138 #SQUARE LN + {0xA1EC, 0x222B}, //139 #INTEGRAL + {0xA1ED, 0x222E}, //140 #CONTOUR INTEGRAL + {0xA1EE, 0x2235}, //141 #BECAUSE + {0xA1EF, 0x2234}, //142 #THEREFORE + {0xA1F0, 0x2640}, //143 #FEMALE SIGN + {0xA1F1, 0x2642}, //144 #MALE SIGN + {0xA1F2, 0x2295}, //145 #CIRCLED PLUS + {0xA1F3, 0x2299}, //146 #CIRCLED DOT OPERATOR + {0xA1F4, 0x2191}, //147 #UPWARDS ARROW + {0xA1F5, 0x2193}, //148 #DOWNWARDS ARROW + {0xA1F6, 0x2190}, //149 #LEFTWARDS ARROW + {0xA1F7, 0x2192}, //150 #RIGHTWARDS ARROW + {0xA1F8, 0x2196}, //151 #NORTH WEST ARROW + {0xA1F9, 0x2197}, //152 #NORTH EAST ARROW + {0xA1FA, 0x2199}, //153 #SOUTH WEST ARROW + {0xA1FB, 0x2198}, //154 #SOUTH EAST ARROW + {0xA1FC, 0x2225}, //155 #PARALLEL TO + {0xA1FD, 0x2223}, //156 #DIVIDES + {0xA1FE, 0xFF0F}, //157 #FULLWIDTH SOLIDUS + {0xA240, 0xFF3C}, //158 #FULLWIDTH REVERSE SOLIDUS + {0xA241, 0x2215}, //159 #DIVISION SLASH + {0xA242, 0xFE68}, //160 #SMALL REVERSE SOLIDUS + {0xA243, 0xFF04}, //161 #FULLWIDTH DOLLAR SIGN + {0xA244, 0xFFE5}, //162 #FULLWIDTH YEN SIGN + {0xA245, 0x3012}, //163 #POSTAL MARK + {0xA246, 0xFFE0}, //164 #FULLWIDTH CENT SIGN + {0xA247, 0xFFE1}, //165 #FULLWIDTH POUND SIGN + {0xA248, 0xFF05}, //166 #FULLWIDTH PERCENT SIGN + {0xA249, 0xFF20}, //167 #FULLWIDTH COMMERCIAL AT + {0xA24A, 0x2103}, //168 #DEGREE CELSIUS + {0xA24B, 0x2109}, //169 #DEGREE FAHRENHEIT + {0xA24C, 0xFE69}, //170 #SMALL DOLLAR SIGN + {0xA24D, 0xFE6A}, //171 #SMALL PERCENT SIGN + {0xA24E, 0xFE6B}, //172 #SMALL COMMERCIAL AT + {0xA24F, 0x33D5}, //173 #SQUARE MIL + {0xA250, 0x339C}, //174 #SQUARE MM + {0xA251, 0x339D}, //175 #SQUARE CM + {0xA252, 0x339E}, //176 #SQUARE KM + {0xA253, 0x33CE}, //177 #SQUARE KM CAPITAL + {0xA254, 0x33A1}, //178 #SQUARE M SQUARED + {0xA255, 0x338E}, //179 #SQUARE MG + {0xA256, 0x338F}, //180 #SQUARE KG + {0xA257, 0x33C4}, //181 #SQUARE CC + {0xA258, 0x00B0}, //182 #DEGREE SIGN + {0xA259, 0x5159}, //183 #CJK UNIFIED IDEOGRAPH + {0xA25A, 0x515B}, //184 #CJK UNIFIED IDEOGRAPH + {0xA25B, 0x515E}, //185 #CJK UNIFIED IDEOGRAPH + {0xA25C, 0x515D}, //186 #CJK UNIFIED IDEOGRAPH + {0xA25D, 0x5161}, //187 #CJK UNIFIED IDEOGRAPH + {0xA25E, 0x5163}, //188 #CJK UNIFIED IDEOGRAPH + {0xA25F, 0x55E7}, //189 #CJK UNIFIED IDEOGRAPH + {0xA260, 0x74E9}, //190 #CJK UNIFIED IDEOGRAPH + {0xA261, 0x7CCE}, //191 #CJK UNIFIED IDEOGRAPH + {0xA262, 0x2581}, //192 #LOWER ONE EIGHTH BLOCK + {0xA263, 0x2582}, //193 #LOWER ONE QUARTER BLOCK + {0xA264, 0x2583}, //194 #LOWER THREE EIGHTHS BLOCK + {0xA265, 0x2584}, //195 #LOWER HALF BLOCK + {0xA266, 0x2585}, //196 #LOWER FIVE EIGHTHS BLOCK + {0xA267, 0x2586}, //197 #LOWER THREE QUARTERS BLOCK + {0xA268, 0x2587}, //198 #LOWER SEVEN EIGHTHS BLOCK + {0xA269, 0x2588}, //199 #FULL BLOCK + {0xA26A, 0x258F}, //200 #LEFT ONE EIGHTH BLOCK + {0xA26B, 0x258E}, //201 #LEFT ONE QUARTER BLOCK + {0xA26C, 0x258D}, //202 #LEFT THREE EIGHTHS BLOCK + {0xA26D, 0x258C}, //203 #LEFT HALF BLOCK + {0xA26E, 0x258B}, //204 #LEFT FIVE EIGHTHS BLOCK + {0xA26F, 0x258A}, //205 #LEFT THREE QUARTERS BLOCK + {0xA270, 0x2589}, //206 #LEFT SEVEN EIGHTHS BLOCK + {0xA271, 0x253C}, //207 #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + {0xA272, 0x2534}, //208 #BOX DRAWINGS LIGHT UP AND HORIZONTAL + {0xA273, 0x252C}, //209 #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + {0xA274, 0x2524}, //210 #BOX DRAWINGS LIGHT VERTICAL AND LEFT + {0xA275, 0x251C}, //211 #BOX DRAWINGS LIGHT VERTICAL AND RIGHT + {0xA276, 0x2594}, //212 #UPPER ONE EIGHTH BLOCK + {0xA277, 0x2500}, //213 #BOX DRAWINGS LIGHT HORIZONTAL + {0xA278, 0x2502}, //214 #BOX DRAWINGS LIGHT VERTICAL + {0xA279, 0x2595}, //215 #RIGHT ONE EIGHTH BLOCK + {0xA27A, 0x250C}, //216 #BOX DRAWINGS LIGHT DOWN AND RIGHT + {0xA27B, 0x2510}, //217 #BOX DRAWINGS LIGHT DOWN AND LEFT + {0xA27C, 0x2514}, //218 #BOX DRAWINGS LIGHT UP AND RIGHT + {0xA27D, 0x2518}, //219 #BOX DRAWINGS LIGHT UP AND LEFT + {0xA27E, 0x256D}, //220 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xA2A1, 0x256E}, //221 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xA2A2, 0x2570}, //222 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xA2A3, 0x256F}, //223 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xA2A4, 0x2550}, //224 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xA2A5, 0x255E}, //225 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xA2A6, 0x256A}, //226 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xA2A7, 0x2561}, //227 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xA2A8, 0x25E2}, //228 #BLACK LOWER RIGHT TRIANGLE + {0xA2A9, 0x25E3}, //229 #BLACK LOWER LEFT TRIANGLE + {0xA2AA, 0x25E5}, //230 #BLACK UPPER RIGHT TRIANGLE + {0xA2AB, 0x25E4}, //231 #BLACK UPPER LEFT TRIANGLE + {0xA2AC, 0x2571}, //232 #BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT + {0xA2AD, 0x2572}, //233 #BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT + {0xA2AE, 0x2573}, //234 #BOX DRAWINGS LIGHT DIAGONAL CROSS + {0xA2AF, 0xFF10}, //235 #FULLWIDTH DIGIT ZERO + {0xA2B0, 0xFF11}, //236 #FULLWIDTH DIGIT ONE + {0xA2B1, 0xFF12}, //237 #FULLWIDTH DIGIT TWO + {0xA2B2, 0xFF13}, //238 #FULLWIDTH DIGIT THREE + {0xA2B3, 0xFF14}, //239 #FULLWIDTH DIGIT FOUR + {0xA2B4, 0xFF15}, //240 #FULLWIDTH DIGIT FIVE + {0xA2B5, 0xFF16}, //241 #FULLWIDTH DIGIT SIX + {0xA2B6, 0xFF17}, //242 #FULLWIDTH DIGIT SEVEN + {0xA2B7, 0xFF18}, //243 #FULLWIDTH DIGIT EIGHT + {0xA2B8, 0xFF19}, //244 #FULLWIDTH DIGIT NINE + {0xA2B9, 0x2160}, //245 #ROMAN NUMERAL ONE + {0xA2BA, 0x2161}, //246 #ROMAN NUMERAL TWO + {0xA2BB, 0x2162}, //247 #ROMAN NUMERAL THREE + {0xA2BC, 0x2163}, //248 #ROMAN NUMERAL FOUR + {0xA2BD, 0x2164}, //249 #ROMAN NUMERAL FIVE + {0xA2BE, 0x2165}, //250 #ROMAN NUMERAL SIX + {0xA2BF, 0x2166}, //251 #ROMAN NUMERAL SEVEN + {0xA2C0, 0x2167}, //252 #ROMAN NUMERAL EIGHT + {0xA2C1, 0x2168}, //253 #ROMAN NUMERAL NINE + {0xA2C2, 0x2169}, //254 #ROMAN NUMERAL TEN + {0xA2C3, 0x3021}, //255 #HANGZHOU NUMERAL ONE + {0xA2C4, 0x3022}, //256 #HANGZHOU NUMERAL TWO + {0xA2C5, 0x3023}, //257 #HANGZHOU NUMERAL THREE + {0xA2C6, 0x3024}, //258 #HANGZHOU NUMERAL FOUR + {0xA2C7, 0x3025}, //259 #HANGZHOU NUMERAL FIVE + {0xA2C8, 0x3026}, //260 #HANGZHOU NUMERAL SIX + {0xA2C9, 0x3027}, //261 #HANGZHOU NUMERAL SEVEN + {0xA2CA, 0x3028}, //262 #HANGZHOU NUMERAL EIGHT + {0xA2CB, 0x3029}, //263 #HANGZHOU NUMERAL NINE + {0xA2CC, 0x5341}, //264 #CJK UNIFIED IDEOGRAPH + {0xA2CD, 0x5344}, //265 #CJK UNIFIED IDEOGRAPH + {0xA2CE, 0x5345}, //266 #CJK UNIFIED IDEOGRAPH + {0xA2CF, 0xFF21}, //267 #FULLWIDTH LATIN CAPITAL LETTER A + {0xA2D0, 0xFF22}, //268 #FULLWIDTH LATIN CAPITAL LETTER B + {0xA2D1, 0xFF23}, //269 #FULLWIDTH LATIN CAPITAL LETTER C + {0xA2D2, 0xFF24}, //270 #FULLWIDTH LATIN CAPITAL LETTER D + {0xA2D3, 0xFF25}, //271 #FULLWIDTH LATIN CAPITAL LETTER E + {0xA2D4, 0xFF26}, //272 #FULLWIDTH LATIN CAPITAL LETTER F + {0xA2D5, 0xFF27}, //273 #FULLWIDTH LATIN CAPITAL LETTER G + {0xA2D6, 0xFF28}, //274 #FULLWIDTH LATIN CAPITAL LETTER H + {0xA2D7, 0xFF29}, //275 #FULLWIDTH LATIN CAPITAL LETTER I + {0xA2D8, 0xFF2A}, //276 #FULLWIDTH LATIN CAPITAL LETTER J + {0xA2D9, 0xFF2B}, //277 #FULLWIDTH LATIN CAPITAL LETTER K + {0xA2DA, 0xFF2C}, //278 #FULLWIDTH LATIN CAPITAL LETTER L + {0xA2DB, 0xFF2D}, //279 #FULLWIDTH LATIN CAPITAL LETTER M + {0xA2DC, 0xFF2E}, //280 #FULLWIDTH LATIN CAPITAL LETTER N + {0xA2DD, 0xFF2F}, //281 #FULLWIDTH LATIN CAPITAL LETTER O + {0xA2DE, 0xFF30}, //282 #FULLWIDTH LATIN CAPITAL LETTER P + {0xA2DF, 0xFF31}, //283 #FULLWIDTH LATIN CAPITAL LETTER Q + {0xA2E0, 0xFF32}, //284 #FULLWIDTH LATIN CAPITAL LETTER R + {0xA2E1, 0xFF33}, //285 #FULLWIDTH LATIN CAPITAL LETTER S + {0xA2E2, 0xFF34}, //286 #FULLWIDTH LATIN CAPITAL LETTER T + {0xA2E3, 0xFF35}, //287 #FULLWIDTH LATIN CAPITAL LETTER U + {0xA2E4, 0xFF36}, //288 #FULLWIDTH LATIN CAPITAL LETTER V + {0xA2E5, 0xFF37}, //289 #FULLWIDTH LATIN CAPITAL LETTER W + {0xA2E6, 0xFF38}, //290 #FULLWIDTH LATIN CAPITAL LETTER X + {0xA2E7, 0xFF39}, //291 #FULLWIDTH LATIN CAPITAL LETTER Y + {0xA2E8, 0xFF3A}, //292 #FULLWIDTH LATIN CAPITAL LETTER Z + {0xA2E9, 0xFF41}, //293 #FULLWIDTH LATIN SMALL LETTER A + {0xA2EA, 0xFF42}, //294 #FULLWIDTH LATIN SMALL LETTER B + {0xA2EB, 0xFF43}, //295 #FULLWIDTH LATIN SMALL LETTER C + {0xA2EC, 0xFF44}, //296 #FULLWIDTH LATIN SMALL LETTER D + {0xA2ED, 0xFF45}, //297 #FULLWIDTH LATIN SMALL LETTER E + {0xA2EE, 0xFF46}, //298 #FULLWIDTH LATIN SMALL LETTER F + {0xA2EF, 0xFF47}, //299 #FULLWIDTH LATIN SMALL LETTER G + {0xA2F0, 0xFF48}, //300 #FULLWIDTH LATIN SMALL LETTER H + {0xA2F1, 0xFF49}, //301 #FULLWIDTH LATIN SMALL LETTER I + {0xA2F2, 0xFF4A}, //302 #FULLWIDTH LATIN SMALL LETTER J + {0xA2F3, 0xFF4B}, //303 #FULLWIDTH LATIN SMALL LETTER K + {0xA2F4, 0xFF4C}, //304 #FULLWIDTH LATIN SMALL LETTER L + {0xA2F5, 0xFF4D}, //305 #FULLWIDTH LATIN SMALL LETTER M + {0xA2F6, 0xFF4E}, //306 #FULLWIDTH LATIN SMALL LETTER N + {0xA2F7, 0xFF4F}, //307 #FULLWIDTH LATIN SMALL LETTER O + {0xA2F8, 0xFF50}, //308 #FULLWIDTH LATIN SMALL LETTER P + {0xA2F9, 0xFF51}, //309 #FULLWIDTH LATIN SMALL LETTER Q + {0xA2FA, 0xFF52}, //310 #FULLWIDTH LATIN SMALL LETTER R + {0xA2FB, 0xFF53}, //311 #FULLWIDTH LATIN SMALL LETTER S + {0xA2FC, 0xFF54}, //312 #FULLWIDTH LATIN SMALL LETTER T + {0xA2FD, 0xFF55}, //313 #FULLWIDTH LATIN SMALL LETTER U + {0xA2FE, 0xFF56}, //314 #FULLWIDTH LATIN SMALL LETTER V + {0xA340, 0xFF57}, //315 #FULLWIDTH LATIN SMALL LETTER W + {0xA341, 0xFF58}, //316 #FULLWIDTH LATIN SMALL LETTER X + {0xA342, 0xFF59}, //317 #FULLWIDTH LATIN SMALL LETTER Y + {0xA343, 0xFF5A}, //318 #FULLWIDTH LATIN SMALL LETTER Z + {0xA344, 0x0391}, //319 #GREEK CAPITAL LETTER ALPHA + {0xA345, 0x0392}, //320 #GREEK CAPITAL LETTER BETA + {0xA346, 0x0393}, //321 #GREEK CAPITAL LETTER GAMMA + {0xA347, 0x0394}, //322 #GREEK CAPITAL LETTER DELTA + {0xA348, 0x0395}, //323 #GREEK CAPITAL LETTER EPSILON + {0xA349, 0x0396}, //324 #GREEK CAPITAL LETTER ZETA + {0xA34A, 0x0397}, //325 #GREEK CAPITAL LETTER ETA + {0xA34B, 0x0398}, //326 #GREEK CAPITAL LETTER THETA + {0xA34C, 0x0399}, //327 #GREEK CAPITAL LETTER IOTA + {0xA34D, 0x039A}, //328 #GREEK CAPITAL LETTER KAPPA + {0xA34E, 0x039B}, //329 #GREEK CAPITAL LETTER LAMDA + {0xA34F, 0x039C}, //330 #GREEK CAPITAL LETTER MU + {0xA350, 0x039D}, //331 #GREEK CAPITAL LETTER NU + {0xA351, 0x039E}, //332 #GREEK CAPITAL LETTER XI + {0xA352, 0x039F}, //333 #GREEK CAPITAL LETTER OMICRON + {0xA353, 0x03A0}, //334 #GREEK CAPITAL LETTER PI + {0xA354, 0x03A1}, //335 #GREEK CAPITAL LETTER RHO + {0xA355, 0x03A3}, //336 #GREEK CAPITAL LETTER SIGMA + {0xA356, 0x03A4}, //337 #GREEK CAPITAL LETTER TAU + {0xA357, 0x03A5}, //338 #GREEK CAPITAL LETTER UPSILON + {0xA358, 0x03A6}, //339 #GREEK CAPITAL LETTER PHI + {0xA359, 0x03A7}, //340 #GREEK CAPITAL LETTER CHI + {0xA35A, 0x03A8}, //341 #GREEK CAPITAL LETTER PSI + {0xA35B, 0x03A9}, //342 #GREEK CAPITAL LETTER OMEGA + {0xA35C, 0x03B1}, //343 #GREEK SMALL LETTER ALPHA + {0xA35D, 0x03B2}, //344 #GREEK SMALL LETTER BETA + {0xA35E, 0x03B3}, //345 #GREEK SMALL LETTER GAMMA + {0xA35F, 0x03B4}, //346 #GREEK SMALL LETTER DELTA + {0xA360, 0x03B5}, //347 #GREEK SMALL LETTER EPSILON + {0xA361, 0x03B6}, //348 #GREEK SMALL LETTER ZETA + {0xA362, 0x03B7}, //349 #GREEK SMALL LETTER ETA + {0xA363, 0x03B8}, //350 #GREEK SMALL LETTER THETA + {0xA364, 0x03B9}, //351 #GREEK SMALL LETTER IOTA + {0xA365, 0x03BA}, //352 #GREEK SMALL LETTER KAPPA + {0xA366, 0x03BB}, //353 #GREEK SMALL LETTER LAMDA + {0xA367, 0x03BC}, //354 #GREEK SMALL LETTER MU + {0xA368, 0x03BD}, //355 #GREEK SMALL LETTER NU + {0xA369, 0x03BE}, //356 #GREEK SMALL LETTER XI + {0xA36A, 0x03BF}, //357 #GREEK SMALL LETTER OMICRON + {0xA36B, 0x03C0}, //358 #GREEK SMALL LETTER PI + {0xA36C, 0x03C1}, //359 #GREEK SMALL LETTER RHO + {0xA36D, 0x03C3}, //360 #GREEK SMALL LETTER SIGMA + {0xA36E, 0x03C4}, //361 #GREEK SMALL LETTER TAU + {0xA36F, 0x03C5}, //362 #GREEK SMALL LETTER UPSILON + {0xA370, 0x03C6}, //363 #GREEK SMALL LETTER PHI + {0xA371, 0x03C7}, //364 #GREEK SMALL LETTER CHI + {0xA372, 0x03C8}, //365 #GREEK SMALL LETTER PSI + {0xA373, 0x03C9}, //366 #GREEK SMALL LETTER OMEGA + {0xA374, 0x3105}, //367 #BOPOMOFO LETTER B + {0xA375, 0x3106}, //368 #BOPOMOFO LETTER P + {0xA376, 0x3107}, //369 #BOPOMOFO LETTER M + {0xA377, 0x3108}, //370 #BOPOMOFO LETTER F + {0xA378, 0x3109}, //371 #BOPOMOFO LETTER D + {0xA379, 0x310A}, //372 #BOPOMOFO LETTER T + {0xA37A, 0x310B}, //373 #BOPOMOFO LETTER N + {0xA37B, 0x310C}, //374 #BOPOMOFO LETTER L + {0xA37C, 0x310D}, //375 #BOPOMOFO LETTER G + {0xA37D, 0x310E}, //376 #BOPOMOFO LETTER K + {0xA37E, 0x310F}, //377 #BOPOMOFO LETTER H + {0xA3A1, 0x3110}, //378 #BOPOMOFO LETTER J + {0xA3A2, 0x3111}, //379 #BOPOMOFO LETTER Q + {0xA3A3, 0x3112}, //380 #BOPOMOFO LETTER X + {0xA3A4, 0x3113}, //381 #BOPOMOFO LETTER ZH + {0xA3A5, 0x3114}, //382 #BOPOMOFO LETTER CH + {0xA3A6, 0x3115}, //383 #BOPOMOFO LETTER SH + {0xA3A7, 0x3116}, //384 #BOPOMOFO LETTER R + {0xA3A8, 0x3117}, //385 #BOPOMOFO LETTER Z + {0xA3A9, 0x3118}, //386 #BOPOMOFO LETTER C + {0xA3AA, 0x3119}, //387 #BOPOMOFO LETTER S + {0xA3AB, 0x311A}, //388 #BOPOMOFO LETTER A + {0xA3AC, 0x311B}, //389 #BOPOMOFO LETTER O + {0xA3AD, 0x311C}, //390 #BOPOMOFO LETTER E + {0xA3AE, 0x311D}, //391 #BOPOMOFO LETTER EH + {0xA3AF, 0x311E}, //392 #BOPOMOFO LETTER AI + {0xA3B0, 0x311F}, //393 #BOPOMOFO LETTER EI + {0xA3B1, 0x3120}, //394 #BOPOMOFO LETTER AU + {0xA3B2, 0x3121}, //395 #BOPOMOFO LETTER OU + {0xA3B3, 0x3122}, //396 #BOPOMOFO LETTER AN + {0xA3B4, 0x3123}, //397 #BOPOMOFO LETTER EN + {0xA3B5, 0x3124}, //398 #BOPOMOFO LETTER ANG + {0xA3B6, 0x3125}, //399 #BOPOMOFO LETTER ENG + {0xA3B7, 0x3126}, //400 #BOPOMOFO LETTER ER + {0xA3B8, 0x3127}, //401 #BOPOMOFO LETTER I + {0xA3B9, 0x3128}, //402 #BOPOMOFO LETTER U + {0xA3BA, 0x3129}, //403 #BOPOMOFO LETTER IU + {0xA3BB, 0x02D9}, //404 #DOT ABOVE + {0xA3BC, 0x02C9}, //405 #MODIFIER LETTER MACRON + {0xA3BD, 0x02CA}, //406 #MODIFIER LETTER ACUTE ACCENT + {0xA3BE, 0x02C7}, //407 #CARON + {0xA3BF, 0x02CB}, //408 #MODIFIER LETTER GRAVE ACCENT + {0xA3E1, 0x20AC}, //409 #EURO SIGN + {0xA440, 0x4E00}, //410 #CJK UNIFIED IDEOGRAPH + {0xA441, 0x4E59}, //411 #CJK UNIFIED IDEOGRAPH + {0xA442, 0x4E01}, //412 #CJK UNIFIED IDEOGRAPH + {0xA443, 0x4E03}, //413 #CJK UNIFIED IDEOGRAPH + {0xA444, 0x4E43}, //414 #CJK UNIFIED IDEOGRAPH + {0xA445, 0x4E5D}, //415 #CJK UNIFIED IDEOGRAPH + {0xA446, 0x4E86}, //416 #CJK UNIFIED IDEOGRAPH + {0xA447, 0x4E8C}, //417 #CJK UNIFIED IDEOGRAPH + {0xA448, 0x4EBA}, //418 #CJK UNIFIED IDEOGRAPH + {0xA449, 0x513F}, //419 #CJK UNIFIED IDEOGRAPH + {0xA44A, 0x5165}, //420 #CJK UNIFIED IDEOGRAPH + {0xA44B, 0x516B}, //421 #CJK UNIFIED IDEOGRAPH + {0xA44C, 0x51E0}, //422 #CJK UNIFIED IDEOGRAPH + {0xA44D, 0x5200}, //423 #CJK UNIFIED IDEOGRAPH + {0xA44E, 0x5201}, //424 #CJK UNIFIED IDEOGRAPH + {0xA44F, 0x529B}, //425 #CJK UNIFIED IDEOGRAPH + {0xA450, 0x5315}, //426 #CJK UNIFIED IDEOGRAPH + {0xA451, 0x5341}, //427 #CJK UNIFIED IDEOGRAPH + {0xA452, 0x535C}, //428 #CJK UNIFIED IDEOGRAPH + {0xA453, 0x53C8}, //429 #CJK UNIFIED IDEOGRAPH + {0xA454, 0x4E09}, //430 #CJK UNIFIED IDEOGRAPH + {0xA455, 0x4E0B}, //431 #CJK UNIFIED IDEOGRAPH + {0xA456, 0x4E08}, //432 #CJK UNIFIED IDEOGRAPH + {0xA457, 0x4E0A}, //433 #CJK UNIFIED IDEOGRAPH + {0xA458, 0x4E2B}, //434 #CJK UNIFIED IDEOGRAPH + {0xA459, 0x4E38}, //435 #CJK UNIFIED IDEOGRAPH + {0xA45A, 0x51E1}, //436 #CJK UNIFIED IDEOGRAPH + {0xA45B, 0x4E45}, //437 #CJK UNIFIED IDEOGRAPH + {0xA45C, 0x4E48}, //438 #CJK UNIFIED IDEOGRAPH + {0xA45D, 0x4E5F}, //439 #CJK UNIFIED IDEOGRAPH + {0xA45E, 0x4E5E}, //440 #CJK UNIFIED IDEOGRAPH + {0xA45F, 0x4E8E}, //441 #CJK UNIFIED IDEOGRAPH + {0xA460, 0x4EA1}, //442 #CJK UNIFIED IDEOGRAPH + {0xA461, 0x5140}, //443 #CJK UNIFIED IDEOGRAPH + {0xA462, 0x5203}, //444 #CJK UNIFIED IDEOGRAPH + {0xA463, 0x52FA}, //445 #CJK UNIFIED IDEOGRAPH + {0xA464, 0x5343}, //446 #CJK UNIFIED IDEOGRAPH + {0xA465, 0x53C9}, //447 #CJK UNIFIED IDEOGRAPH + {0xA466, 0x53E3}, //448 #CJK UNIFIED IDEOGRAPH + {0xA467, 0x571F}, //449 #CJK UNIFIED IDEOGRAPH + {0xA468, 0x58EB}, //450 #CJK UNIFIED IDEOGRAPH + {0xA469, 0x5915}, //451 #CJK UNIFIED IDEOGRAPH + {0xA46A, 0x5927}, //452 #CJK UNIFIED IDEOGRAPH + {0xA46B, 0x5973}, //453 #CJK UNIFIED IDEOGRAPH + {0xA46C, 0x5B50}, //454 #CJK UNIFIED IDEOGRAPH + {0xA46D, 0x5B51}, //455 #CJK UNIFIED IDEOGRAPH + {0xA46E, 0x5B53}, //456 #CJK UNIFIED IDEOGRAPH + {0xA46F, 0x5BF8}, //457 #CJK UNIFIED IDEOGRAPH + {0xA470, 0x5C0F}, //458 #CJK UNIFIED IDEOGRAPH + {0xA471, 0x5C22}, //459 #CJK UNIFIED IDEOGRAPH + {0xA472, 0x5C38}, //460 #CJK UNIFIED IDEOGRAPH + {0xA473, 0x5C71}, //461 #CJK UNIFIED IDEOGRAPH + {0xA474, 0x5DDD}, //462 #CJK UNIFIED IDEOGRAPH + {0xA475, 0x5DE5}, //463 #CJK UNIFIED IDEOGRAPH + {0xA476, 0x5DF1}, //464 #CJK UNIFIED IDEOGRAPH + {0xA477, 0x5DF2}, //465 #CJK UNIFIED IDEOGRAPH + {0xA478, 0x5DF3}, //466 #CJK UNIFIED IDEOGRAPH + {0xA479, 0x5DFE}, //467 #CJK UNIFIED IDEOGRAPH + {0xA47A, 0x5E72}, //468 #CJK UNIFIED IDEOGRAPH + {0xA47B, 0x5EFE}, //469 #CJK UNIFIED IDEOGRAPH + {0xA47C, 0x5F0B}, //470 #CJK UNIFIED IDEOGRAPH + {0xA47D, 0x5F13}, //471 #CJK UNIFIED IDEOGRAPH + {0xA47E, 0x624D}, //472 #CJK UNIFIED IDEOGRAPH + {0xA4A1, 0x4E11}, //473 #CJK UNIFIED IDEOGRAPH + {0xA4A2, 0x4E10}, //474 #CJK UNIFIED IDEOGRAPH + {0xA4A3, 0x4E0D}, //475 #CJK UNIFIED IDEOGRAPH + {0xA4A4, 0x4E2D}, //476 #CJK UNIFIED IDEOGRAPH + {0xA4A5, 0x4E30}, //477 #CJK UNIFIED IDEOGRAPH + {0xA4A6, 0x4E39}, //478 #CJK UNIFIED IDEOGRAPH + {0xA4A7, 0x4E4B}, //479 #CJK UNIFIED IDEOGRAPH + {0xA4A8, 0x5C39}, //480 #CJK UNIFIED IDEOGRAPH + {0xA4A9, 0x4E88}, //481 #CJK UNIFIED IDEOGRAPH + {0xA4AA, 0x4E91}, //482 #CJK UNIFIED IDEOGRAPH + {0xA4AB, 0x4E95}, //483 #CJK UNIFIED IDEOGRAPH + {0xA4AC, 0x4E92}, //484 #CJK UNIFIED IDEOGRAPH + {0xA4AD, 0x4E94}, //485 #CJK UNIFIED IDEOGRAPH + {0xA4AE, 0x4EA2}, //486 #CJK UNIFIED IDEOGRAPH + {0xA4AF, 0x4EC1}, //487 #CJK UNIFIED IDEOGRAPH + {0xA4B0, 0x4EC0}, //488 #CJK UNIFIED IDEOGRAPH + {0xA4B1, 0x4EC3}, //489 #CJK UNIFIED IDEOGRAPH + {0xA4B2, 0x4EC6}, //490 #CJK UNIFIED IDEOGRAPH + {0xA4B3, 0x4EC7}, //491 #CJK UNIFIED IDEOGRAPH + {0xA4B4, 0x4ECD}, //492 #CJK UNIFIED IDEOGRAPH + {0xA4B5, 0x4ECA}, //493 #CJK UNIFIED IDEOGRAPH + {0xA4B6, 0x4ECB}, //494 #CJK UNIFIED IDEOGRAPH + {0xA4B7, 0x4EC4}, //495 #CJK UNIFIED IDEOGRAPH + {0xA4B8, 0x5143}, //496 #CJK UNIFIED IDEOGRAPH + {0xA4B9, 0x5141}, //497 #CJK UNIFIED IDEOGRAPH + {0xA4BA, 0x5167}, //498 #CJK UNIFIED IDEOGRAPH + {0xA4BB, 0x516D}, //499 #CJK UNIFIED IDEOGRAPH + {0xA4BC, 0x516E}, //500 #CJK UNIFIED IDEOGRAPH + {0xA4BD, 0x516C}, //501 #CJK UNIFIED IDEOGRAPH + {0xA4BE, 0x5197}, //502 #CJK UNIFIED IDEOGRAPH + {0xA4BF, 0x51F6}, //503 #CJK UNIFIED IDEOGRAPH + {0xA4C0, 0x5206}, //504 #CJK UNIFIED IDEOGRAPH + {0xA4C1, 0x5207}, //505 #CJK UNIFIED IDEOGRAPH + {0xA4C2, 0x5208}, //506 #CJK UNIFIED IDEOGRAPH + {0xA4C3, 0x52FB}, //507 #CJK UNIFIED IDEOGRAPH + {0xA4C4, 0x52FE}, //508 #CJK UNIFIED IDEOGRAPH + {0xA4C5, 0x52FF}, //509 #CJK UNIFIED IDEOGRAPH + {0xA4C6, 0x5316}, //510 #CJK UNIFIED IDEOGRAPH + {0xA4C7, 0x5339}, //511 #CJK UNIFIED IDEOGRAPH + {0xA4C8, 0x5348}, //512 #CJK UNIFIED IDEOGRAPH + {0xA4C9, 0x5347}, //513 #CJK UNIFIED IDEOGRAPH + {0xA4CA, 0x5345}, //514 #CJK UNIFIED IDEOGRAPH + {0xA4CB, 0x535E}, //515 #CJK UNIFIED IDEOGRAPH + {0xA4CC, 0x5384}, //516 #CJK UNIFIED IDEOGRAPH + {0xA4CD, 0x53CB}, //517 #CJK UNIFIED IDEOGRAPH + {0xA4CE, 0x53CA}, //518 #CJK UNIFIED IDEOGRAPH + {0xA4CF, 0x53CD}, //519 #CJK UNIFIED IDEOGRAPH + {0xA4D0, 0x58EC}, //520 #CJK UNIFIED IDEOGRAPH + {0xA4D1, 0x5929}, //521 #CJK UNIFIED IDEOGRAPH + {0xA4D2, 0x592B}, //522 #CJK UNIFIED IDEOGRAPH + {0xA4D3, 0x592A}, //523 #CJK UNIFIED IDEOGRAPH + {0xA4D4, 0x592D}, //524 #CJK UNIFIED IDEOGRAPH + {0xA4D5, 0x5B54}, //525 #CJK UNIFIED IDEOGRAPH + {0xA4D6, 0x5C11}, //526 #CJK UNIFIED IDEOGRAPH + {0xA4D7, 0x5C24}, //527 #CJK UNIFIED IDEOGRAPH + {0xA4D8, 0x5C3A}, //528 #CJK UNIFIED IDEOGRAPH + {0xA4D9, 0x5C6F}, //529 #CJK UNIFIED IDEOGRAPH + {0xA4DA, 0x5DF4}, //530 #CJK UNIFIED IDEOGRAPH + {0xA4DB, 0x5E7B}, //531 #CJK UNIFIED IDEOGRAPH + {0xA4DC, 0x5EFF}, //532 #CJK UNIFIED IDEOGRAPH + {0xA4DD, 0x5F14}, //533 #CJK UNIFIED IDEOGRAPH + {0xA4DE, 0x5F15}, //534 #CJK UNIFIED IDEOGRAPH + {0xA4DF, 0x5FC3}, //535 #CJK UNIFIED IDEOGRAPH + {0xA4E0, 0x6208}, //536 #CJK UNIFIED IDEOGRAPH + {0xA4E1, 0x6236}, //537 #CJK UNIFIED IDEOGRAPH + {0xA4E2, 0x624B}, //538 #CJK UNIFIED IDEOGRAPH + {0xA4E3, 0x624E}, //539 #CJK UNIFIED IDEOGRAPH + {0xA4E4, 0x652F}, //540 #CJK UNIFIED IDEOGRAPH + {0xA4E5, 0x6587}, //541 #CJK UNIFIED IDEOGRAPH + {0xA4E6, 0x6597}, //542 #CJK UNIFIED IDEOGRAPH + {0xA4E7, 0x65A4}, //543 #CJK UNIFIED IDEOGRAPH + {0xA4E8, 0x65B9}, //544 #CJK UNIFIED IDEOGRAPH + {0xA4E9, 0x65E5}, //545 #CJK UNIFIED IDEOGRAPH + {0xA4EA, 0x66F0}, //546 #CJK UNIFIED IDEOGRAPH + {0xA4EB, 0x6708}, //547 #CJK UNIFIED IDEOGRAPH + {0xA4EC, 0x6728}, //548 #CJK UNIFIED IDEOGRAPH + {0xA4ED, 0x6B20}, //549 #CJK UNIFIED IDEOGRAPH + {0xA4EE, 0x6B62}, //550 #CJK UNIFIED IDEOGRAPH + {0xA4EF, 0x6B79}, //551 #CJK UNIFIED IDEOGRAPH + {0xA4F0, 0x6BCB}, //552 #CJK UNIFIED IDEOGRAPH + {0xA4F1, 0x6BD4}, //553 #CJK UNIFIED IDEOGRAPH + {0xA4F2, 0x6BDB}, //554 #CJK UNIFIED IDEOGRAPH + {0xA4F3, 0x6C0F}, //555 #CJK UNIFIED IDEOGRAPH + {0xA4F4, 0x6C34}, //556 #CJK UNIFIED IDEOGRAPH + {0xA4F5, 0x706B}, //557 #CJK UNIFIED IDEOGRAPH + {0xA4F6, 0x722A}, //558 #CJK UNIFIED IDEOGRAPH + {0xA4F7, 0x7236}, //559 #CJK UNIFIED IDEOGRAPH + {0xA4F8, 0x723B}, //560 #CJK UNIFIED IDEOGRAPH + {0xA4F9, 0x7247}, //561 #CJK UNIFIED IDEOGRAPH + {0xA4FA, 0x7259}, //562 #CJK UNIFIED IDEOGRAPH + {0xA4FB, 0x725B}, //563 #CJK UNIFIED IDEOGRAPH + {0xA4FC, 0x72AC}, //564 #CJK UNIFIED IDEOGRAPH + {0xA4FD, 0x738B}, //565 #CJK UNIFIED IDEOGRAPH + {0xA4FE, 0x4E19}, //566 #CJK UNIFIED IDEOGRAPH + {0xA540, 0x4E16}, //567 #CJK UNIFIED IDEOGRAPH + {0xA541, 0x4E15}, //568 #CJK UNIFIED IDEOGRAPH + {0xA542, 0x4E14}, //569 #CJK UNIFIED IDEOGRAPH + {0xA543, 0x4E18}, //570 #CJK UNIFIED IDEOGRAPH + {0xA544, 0x4E3B}, //571 #CJK UNIFIED IDEOGRAPH + {0xA545, 0x4E4D}, //572 #CJK UNIFIED IDEOGRAPH + {0xA546, 0x4E4F}, //573 #CJK UNIFIED IDEOGRAPH + {0xA547, 0x4E4E}, //574 #CJK UNIFIED IDEOGRAPH + {0xA548, 0x4EE5}, //575 #CJK UNIFIED IDEOGRAPH + {0xA549, 0x4ED8}, //576 #CJK UNIFIED IDEOGRAPH + {0xA54A, 0x4ED4}, //577 #CJK UNIFIED IDEOGRAPH + {0xA54B, 0x4ED5}, //578 #CJK UNIFIED IDEOGRAPH + {0xA54C, 0x4ED6}, //579 #CJK UNIFIED IDEOGRAPH + {0xA54D, 0x4ED7}, //580 #CJK UNIFIED IDEOGRAPH + {0xA54E, 0x4EE3}, //581 #CJK UNIFIED IDEOGRAPH + {0xA54F, 0x4EE4}, //582 #CJK UNIFIED IDEOGRAPH + {0xA550, 0x4ED9}, //583 #CJK UNIFIED IDEOGRAPH + {0xA551, 0x4EDE}, //584 #CJK UNIFIED IDEOGRAPH + {0xA552, 0x5145}, //585 #CJK UNIFIED IDEOGRAPH + {0xA553, 0x5144}, //586 #CJK UNIFIED IDEOGRAPH + {0xA554, 0x5189}, //587 #CJK UNIFIED IDEOGRAPH + {0xA555, 0x518A}, //588 #CJK UNIFIED IDEOGRAPH + {0xA556, 0x51AC}, //589 #CJK UNIFIED IDEOGRAPH + {0xA557, 0x51F9}, //590 #CJK UNIFIED IDEOGRAPH + {0xA558, 0x51FA}, //591 #CJK UNIFIED IDEOGRAPH + {0xA559, 0x51F8}, //592 #CJK UNIFIED IDEOGRAPH + {0xA55A, 0x520A}, //593 #CJK UNIFIED IDEOGRAPH + {0xA55B, 0x52A0}, //594 #CJK UNIFIED IDEOGRAPH + {0xA55C, 0x529F}, //595 #CJK UNIFIED IDEOGRAPH + {0xA55D, 0x5305}, //596 #CJK UNIFIED IDEOGRAPH + {0xA55E, 0x5306}, //597 #CJK UNIFIED IDEOGRAPH + {0xA55F, 0x5317}, //598 #CJK UNIFIED IDEOGRAPH + {0xA560, 0x531D}, //599 #CJK UNIFIED IDEOGRAPH + {0xA561, 0x4EDF}, //600 #CJK UNIFIED IDEOGRAPH + {0xA562, 0x534A}, //601 #CJK UNIFIED IDEOGRAPH + {0xA563, 0x5349}, //602 #CJK UNIFIED IDEOGRAPH + {0xA564, 0x5361}, //603 #CJK UNIFIED IDEOGRAPH + {0xA565, 0x5360}, //604 #CJK UNIFIED IDEOGRAPH + {0xA566, 0x536F}, //605 #CJK UNIFIED IDEOGRAPH + {0xA567, 0x536E}, //606 #CJK UNIFIED IDEOGRAPH + {0xA568, 0x53BB}, //607 #CJK UNIFIED IDEOGRAPH + {0xA569, 0x53EF}, //608 #CJK UNIFIED IDEOGRAPH + {0xA56A, 0x53E4}, //609 #CJK UNIFIED IDEOGRAPH + {0xA56B, 0x53F3}, //610 #CJK UNIFIED IDEOGRAPH + {0xA56C, 0x53EC}, //611 #CJK UNIFIED IDEOGRAPH + {0xA56D, 0x53EE}, //612 #CJK UNIFIED IDEOGRAPH + {0xA56E, 0x53E9}, //613 #CJK UNIFIED IDEOGRAPH + {0xA56F, 0x53E8}, //614 #CJK UNIFIED IDEOGRAPH + {0xA570, 0x53FC}, //615 #CJK UNIFIED IDEOGRAPH + {0xA571, 0x53F8}, //616 #CJK UNIFIED IDEOGRAPH + {0xA572, 0x53F5}, //617 #CJK UNIFIED IDEOGRAPH + {0xA573, 0x53EB}, //618 #CJK UNIFIED IDEOGRAPH + {0xA574, 0x53E6}, //619 #CJK UNIFIED IDEOGRAPH + {0xA575, 0x53EA}, //620 #CJK UNIFIED IDEOGRAPH + {0xA576, 0x53F2}, //621 #CJK UNIFIED IDEOGRAPH + {0xA577, 0x53F1}, //622 #CJK UNIFIED IDEOGRAPH + {0xA578, 0x53F0}, //623 #CJK UNIFIED IDEOGRAPH + {0xA579, 0x53E5}, //624 #CJK UNIFIED IDEOGRAPH + {0xA57A, 0x53ED}, //625 #CJK UNIFIED IDEOGRAPH + {0xA57B, 0x53FB}, //626 #CJK UNIFIED IDEOGRAPH + {0xA57C, 0x56DB}, //627 #CJK UNIFIED IDEOGRAPH + {0xA57D, 0x56DA}, //628 #CJK UNIFIED IDEOGRAPH + {0xA57E, 0x5916}, //629 #CJK UNIFIED IDEOGRAPH + {0xA5A1, 0x592E}, //630 #CJK UNIFIED IDEOGRAPH + {0xA5A2, 0x5931}, //631 #CJK UNIFIED IDEOGRAPH + {0xA5A3, 0x5974}, //632 #CJK UNIFIED IDEOGRAPH + {0xA5A4, 0x5976}, //633 #CJK UNIFIED IDEOGRAPH + {0xA5A5, 0x5B55}, //634 #CJK UNIFIED IDEOGRAPH + {0xA5A6, 0x5B83}, //635 #CJK UNIFIED IDEOGRAPH + {0xA5A7, 0x5C3C}, //636 #CJK UNIFIED IDEOGRAPH + {0xA5A8, 0x5DE8}, //637 #CJK UNIFIED IDEOGRAPH + {0xA5A9, 0x5DE7}, //638 #CJK UNIFIED IDEOGRAPH + {0xA5AA, 0x5DE6}, //639 #CJK UNIFIED IDEOGRAPH + {0xA5AB, 0x5E02}, //640 #CJK UNIFIED IDEOGRAPH + {0xA5AC, 0x5E03}, //641 #CJK UNIFIED IDEOGRAPH + {0xA5AD, 0x5E73}, //642 #CJK UNIFIED IDEOGRAPH + {0xA5AE, 0x5E7C}, //643 #CJK UNIFIED IDEOGRAPH + {0xA5AF, 0x5F01}, //644 #CJK UNIFIED IDEOGRAPH + {0xA5B0, 0x5F18}, //645 #CJK UNIFIED IDEOGRAPH + {0xA5B1, 0x5F17}, //646 #CJK UNIFIED IDEOGRAPH + {0xA5B2, 0x5FC5}, //647 #CJK UNIFIED IDEOGRAPH + {0xA5B3, 0x620A}, //648 #CJK UNIFIED IDEOGRAPH + {0xA5B4, 0x6253}, //649 #CJK UNIFIED IDEOGRAPH + {0xA5B5, 0x6254}, //650 #CJK UNIFIED IDEOGRAPH + {0xA5B6, 0x6252}, //651 #CJK UNIFIED IDEOGRAPH + {0xA5B7, 0x6251}, //652 #CJK UNIFIED IDEOGRAPH + {0xA5B8, 0x65A5}, //653 #CJK UNIFIED IDEOGRAPH + {0xA5B9, 0x65E6}, //654 #CJK UNIFIED IDEOGRAPH + {0xA5BA, 0x672E}, //655 #CJK UNIFIED IDEOGRAPH + {0xA5BB, 0x672C}, //656 #CJK UNIFIED IDEOGRAPH + {0xA5BC, 0x672A}, //657 #CJK UNIFIED IDEOGRAPH + {0xA5BD, 0x672B}, //658 #CJK UNIFIED IDEOGRAPH + {0xA5BE, 0x672D}, //659 #CJK UNIFIED IDEOGRAPH + {0xA5BF, 0x6B63}, //660 #CJK UNIFIED IDEOGRAPH + {0xA5C0, 0x6BCD}, //661 #CJK UNIFIED IDEOGRAPH + {0xA5C1, 0x6C11}, //662 #CJK UNIFIED IDEOGRAPH + {0xA5C2, 0x6C10}, //663 #CJK UNIFIED IDEOGRAPH + {0xA5C3, 0x6C38}, //664 #CJK UNIFIED IDEOGRAPH + {0xA5C4, 0x6C41}, //665 #CJK UNIFIED IDEOGRAPH + {0xA5C5, 0x6C40}, //666 #CJK UNIFIED IDEOGRAPH + {0xA5C6, 0x6C3E}, //667 #CJK UNIFIED IDEOGRAPH + {0xA5C7, 0x72AF}, //668 #CJK UNIFIED IDEOGRAPH + {0xA5C8, 0x7384}, //669 #CJK UNIFIED IDEOGRAPH + {0xA5C9, 0x7389}, //670 #CJK UNIFIED IDEOGRAPH + {0xA5CA, 0x74DC}, //671 #CJK UNIFIED IDEOGRAPH + {0xA5CB, 0x74E6}, //672 #CJK UNIFIED IDEOGRAPH + {0xA5CC, 0x7518}, //673 #CJK UNIFIED IDEOGRAPH + {0xA5CD, 0x751F}, //674 #CJK UNIFIED IDEOGRAPH + {0xA5CE, 0x7528}, //675 #CJK UNIFIED IDEOGRAPH + {0xA5CF, 0x7529}, //676 #CJK UNIFIED IDEOGRAPH + {0xA5D0, 0x7530}, //677 #CJK UNIFIED IDEOGRAPH + {0xA5D1, 0x7531}, //678 #CJK UNIFIED IDEOGRAPH + {0xA5D2, 0x7532}, //679 #CJK UNIFIED IDEOGRAPH + {0xA5D3, 0x7533}, //680 #CJK UNIFIED IDEOGRAPH + {0xA5D4, 0x758B}, //681 #CJK UNIFIED IDEOGRAPH + {0xA5D5, 0x767D}, //682 #CJK UNIFIED IDEOGRAPH + {0xA5D6, 0x76AE}, //683 #CJK UNIFIED IDEOGRAPH + {0xA5D7, 0x76BF}, //684 #CJK UNIFIED IDEOGRAPH + {0xA5D8, 0x76EE}, //685 #CJK UNIFIED IDEOGRAPH + {0xA5D9, 0x77DB}, //686 #CJK UNIFIED IDEOGRAPH + {0xA5DA, 0x77E2}, //687 #CJK UNIFIED IDEOGRAPH + {0xA5DB, 0x77F3}, //688 #CJK UNIFIED IDEOGRAPH + {0xA5DC, 0x793A}, //689 #CJK UNIFIED IDEOGRAPH + {0xA5DD, 0x79BE}, //690 #CJK UNIFIED IDEOGRAPH + {0xA5DE, 0x7A74}, //691 #CJK UNIFIED IDEOGRAPH + {0xA5DF, 0x7ACB}, //692 #CJK UNIFIED IDEOGRAPH + {0xA5E0, 0x4E1E}, //693 #CJK UNIFIED IDEOGRAPH + {0xA5E1, 0x4E1F}, //694 #CJK UNIFIED IDEOGRAPH + {0xA5E2, 0x4E52}, //695 #CJK UNIFIED IDEOGRAPH + {0xA5E3, 0x4E53}, //696 #CJK UNIFIED IDEOGRAPH + {0xA5E4, 0x4E69}, //697 #CJK UNIFIED IDEOGRAPH + {0xA5E5, 0x4E99}, //698 #CJK UNIFIED IDEOGRAPH + {0xA5E6, 0x4EA4}, //699 #CJK UNIFIED IDEOGRAPH + {0xA5E7, 0x4EA6}, //700 #CJK UNIFIED IDEOGRAPH + {0xA5E8, 0x4EA5}, //701 #CJK UNIFIED IDEOGRAPH + {0xA5E9, 0x4EFF}, //702 #CJK UNIFIED IDEOGRAPH + {0xA5EA, 0x4F09}, //703 #CJK UNIFIED IDEOGRAPH + {0xA5EB, 0x4F19}, //704 #CJK UNIFIED IDEOGRAPH + {0xA5EC, 0x4F0A}, //705 #CJK UNIFIED IDEOGRAPH + {0xA5ED, 0x4F15}, //706 #CJK UNIFIED IDEOGRAPH + {0xA5EE, 0x4F0D}, //707 #CJK UNIFIED IDEOGRAPH + {0xA5EF, 0x4F10}, //708 #CJK UNIFIED IDEOGRAPH + {0xA5F0, 0x4F11}, //709 #CJK UNIFIED IDEOGRAPH + {0xA5F1, 0x4F0F}, //710 #CJK UNIFIED IDEOGRAPH + {0xA5F2, 0x4EF2}, //711 #CJK UNIFIED IDEOGRAPH + {0xA5F3, 0x4EF6}, //712 #CJK UNIFIED IDEOGRAPH + {0xA5F4, 0x4EFB}, //713 #CJK UNIFIED IDEOGRAPH + {0xA5F5, 0x4EF0}, //714 #CJK UNIFIED IDEOGRAPH + {0xA5F6, 0x4EF3}, //715 #CJK UNIFIED IDEOGRAPH + {0xA5F7, 0x4EFD}, //716 #CJK UNIFIED IDEOGRAPH + {0xA5F8, 0x4F01}, //717 #CJK UNIFIED IDEOGRAPH + {0xA5F9, 0x4F0B}, //718 #CJK UNIFIED IDEOGRAPH + {0xA5FA, 0x5149}, //719 #CJK UNIFIED IDEOGRAPH + {0xA5FB, 0x5147}, //720 #CJK UNIFIED IDEOGRAPH + {0xA5FC, 0x5146}, //721 #CJK UNIFIED IDEOGRAPH + {0xA5FD, 0x5148}, //722 #CJK UNIFIED IDEOGRAPH + {0xA5FE, 0x5168}, //723 #CJK UNIFIED IDEOGRAPH + {0xA640, 0x5171}, //724 #CJK UNIFIED IDEOGRAPH + {0xA641, 0x518D}, //725 #CJK UNIFIED IDEOGRAPH + {0xA642, 0x51B0}, //726 #CJK UNIFIED IDEOGRAPH + {0xA643, 0x5217}, //727 #CJK UNIFIED IDEOGRAPH + {0xA644, 0x5211}, //728 #CJK UNIFIED IDEOGRAPH + {0xA645, 0x5212}, //729 #CJK UNIFIED IDEOGRAPH + {0xA646, 0x520E}, //730 #CJK UNIFIED IDEOGRAPH + {0xA647, 0x5216}, //731 #CJK UNIFIED IDEOGRAPH + {0xA648, 0x52A3}, //732 #CJK UNIFIED IDEOGRAPH + {0xA649, 0x5308}, //733 #CJK UNIFIED IDEOGRAPH + {0xA64A, 0x5321}, //734 #CJK UNIFIED IDEOGRAPH + {0xA64B, 0x5320}, //735 #CJK UNIFIED IDEOGRAPH + {0xA64C, 0x5370}, //736 #CJK UNIFIED IDEOGRAPH + {0xA64D, 0x5371}, //737 #CJK UNIFIED IDEOGRAPH + {0xA64E, 0x5409}, //738 #CJK UNIFIED IDEOGRAPH + {0xA64F, 0x540F}, //739 #CJK UNIFIED IDEOGRAPH + {0xA650, 0x540C}, //740 #CJK UNIFIED IDEOGRAPH + {0xA651, 0x540A}, //741 #CJK UNIFIED IDEOGRAPH + {0xA652, 0x5410}, //742 #CJK UNIFIED IDEOGRAPH + {0xA653, 0x5401}, //743 #CJK UNIFIED IDEOGRAPH + {0xA654, 0x540B}, //744 #CJK UNIFIED IDEOGRAPH + {0xA655, 0x5404}, //745 #CJK UNIFIED IDEOGRAPH + {0xA656, 0x5411}, //746 #CJK UNIFIED IDEOGRAPH + {0xA657, 0x540D}, //747 #CJK UNIFIED IDEOGRAPH + {0xA658, 0x5408}, //748 #CJK UNIFIED IDEOGRAPH + {0xA659, 0x5403}, //749 #CJK UNIFIED IDEOGRAPH + {0xA65A, 0x540E}, //750 #CJK UNIFIED IDEOGRAPH + {0xA65B, 0x5406}, //751 #CJK UNIFIED IDEOGRAPH + {0xA65C, 0x5412}, //752 #CJK UNIFIED IDEOGRAPH + {0xA65D, 0x56E0}, //753 #CJK UNIFIED IDEOGRAPH + {0xA65E, 0x56DE}, //754 #CJK UNIFIED IDEOGRAPH + {0xA65F, 0x56DD}, //755 #CJK UNIFIED IDEOGRAPH + {0xA660, 0x5733}, //756 #CJK UNIFIED IDEOGRAPH + {0xA661, 0x5730}, //757 #CJK UNIFIED IDEOGRAPH + {0xA662, 0x5728}, //758 #CJK UNIFIED IDEOGRAPH + {0xA663, 0x572D}, //759 #CJK UNIFIED IDEOGRAPH + {0xA664, 0x572C}, //760 #CJK UNIFIED IDEOGRAPH + {0xA665, 0x572F}, //761 #CJK UNIFIED IDEOGRAPH + {0xA666, 0x5729}, //762 #CJK UNIFIED IDEOGRAPH + {0xA667, 0x5919}, //763 #CJK UNIFIED IDEOGRAPH + {0xA668, 0x591A}, //764 #CJK UNIFIED IDEOGRAPH + {0xA669, 0x5937}, //765 #CJK UNIFIED IDEOGRAPH + {0xA66A, 0x5938}, //766 #CJK UNIFIED IDEOGRAPH + {0xA66B, 0x5984}, //767 #CJK UNIFIED IDEOGRAPH + {0xA66C, 0x5978}, //768 #CJK UNIFIED IDEOGRAPH + {0xA66D, 0x5983}, //769 #CJK UNIFIED IDEOGRAPH + {0xA66E, 0x597D}, //770 #CJK UNIFIED IDEOGRAPH + {0xA66F, 0x5979}, //771 #CJK UNIFIED IDEOGRAPH + {0xA670, 0x5982}, //772 #CJK UNIFIED IDEOGRAPH + {0xA671, 0x5981}, //773 #CJK UNIFIED IDEOGRAPH + {0xA672, 0x5B57}, //774 #CJK UNIFIED IDEOGRAPH + {0xA673, 0x5B58}, //775 #CJK UNIFIED IDEOGRAPH + {0xA674, 0x5B87}, //776 #CJK UNIFIED IDEOGRAPH + {0xA675, 0x5B88}, //777 #CJK UNIFIED IDEOGRAPH + {0xA676, 0x5B85}, //778 #CJK UNIFIED IDEOGRAPH + {0xA677, 0x5B89}, //779 #CJK UNIFIED IDEOGRAPH + {0xA678, 0x5BFA}, //780 #CJK UNIFIED IDEOGRAPH + {0xA679, 0x5C16}, //781 #CJK UNIFIED IDEOGRAPH + {0xA67A, 0x5C79}, //782 #CJK UNIFIED IDEOGRAPH + {0xA67B, 0x5DDE}, //783 #CJK UNIFIED IDEOGRAPH + {0xA67C, 0x5E06}, //784 #CJK UNIFIED IDEOGRAPH + {0xA67D, 0x5E76}, //785 #CJK UNIFIED IDEOGRAPH + {0xA67E, 0x5E74}, //786 #CJK UNIFIED IDEOGRAPH + {0xA6A1, 0x5F0F}, //787 #CJK UNIFIED IDEOGRAPH + {0xA6A2, 0x5F1B}, //788 #CJK UNIFIED IDEOGRAPH + {0xA6A3, 0x5FD9}, //789 #CJK UNIFIED IDEOGRAPH + {0xA6A4, 0x5FD6}, //790 #CJK UNIFIED IDEOGRAPH + {0xA6A5, 0x620E}, //791 #CJK UNIFIED IDEOGRAPH + {0xA6A6, 0x620C}, //792 #CJK UNIFIED IDEOGRAPH + {0xA6A7, 0x620D}, //793 #CJK UNIFIED IDEOGRAPH + {0xA6A8, 0x6210}, //794 #CJK UNIFIED IDEOGRAPH + {0xA6A9, 0x6263}, //795 #CJK UNIFIED IDEOGRAPH + {0xA6AA, 0x625B}, //796 #CJK UNIFIED IDEOGRAPH + {0xA6AB, 0x6258}, //797 #CJK UNIFIED IDEOGRAPH + {0xA6AC, 0x6536}, //798 #CJK UNIFIED IDEOGRAPH + {0xA6AD, 0x65E9}, //799 #CJK UNIFIED IDEOGRAPH + {0xA6AE, 0x65E8}, //800 #CJK UNIFIED IDEOGRAPH + {0xA6AF, 0x65EC}, //801 #CJK UNIFIED IDEOGRAPH + {0xA6B0, 0x65ED}, //802 #CJK UNIFIED IDEOGRAPH + {0xA6B1, 0x66F2}, //803 #CJK UNIFIED IDEOGRAPH + {0xA6B2, 0x66F3}, //804 #CJK UNIFIED IDEOGRAPH + {0xA6B3, 0x6709}, //805 #CJK UNIFIED IDEOGRAPH + {0xA6B4, 0x673D}, //806 #CJK UNIFIED IDEOGRAPH + {0xA6B5, 0x6734}, //807 #CJK UNIFIED IDEOGRAPH + {0xA6B6, 0x6731}, //808 #CJK UNIFIED IDEOGRAPH + {0xA6B7, 0x6735}, //809 #CJK UNIFIED IDEOGRAPH + {0xA6B8, 0x6B21}, //810 #CJK UNIFIED IDEOGRAPH + {0xA6B9, 0x6B64}, //811 #CJK UNIFIED IDEOGRAPH + {0xA6BA, 0x6B7B}, //812 #CJK UNIFIED IDEOGRAPH + {0xA6BB, 0x6C16}, //813 #CJK UNIFIED IDEOGRAPH + {0xA6BC, 0x6C5D}, //814 #CJK UNIFIED IDEOGRAPH + {0xA6BD, 0x6C57}, //815 #CJK UNIFIED IDEOGRAPH + {0xA6BE, 0x6C59}, //816 #CJK UNIFIED IDEOGRAPH + {0xA6BF, 0x6C5F}, //817 #CJK UNIFIED IDEOGRAPH + {0xA6C0, 0x6C60}, //818 #CJK UNIFIED IDEOGRAPH + {0xA6C1, 0x6C50}, //819 #CJK UNIFIED IDEOGRAPH + {0xA6C2, 0x6C55}, //820 #CJK UNIFIED IDEOGRAPH + {0xA6C3, 0x6C61}, //821 #CJK UNIFIED IDEOGRAPH + {0xA6C4, 0x6C5B}, //822 #CJK UNIFIED IDEOGRAPH + {0xA6C5, 0x6C4D}, //823 #CJK UNIFIED IDEOGRAPH + {0xA6C6, 0x6C4E}, //824 #CJK UNIFIED IDEOGRAPH + {0xA6C7, 0x7070}, //825 #CJK UNIFIED IDEOGRAPH + {0xA6C8, 0x725F}, //826 #CJK UNIFIED IDEOGRAPH + {0xA6C9, 0x725D}, //827 #CJK UNIFIED IDEOGRAPH + {0xA6CA, 0x767E}, //828 #CJK UNIFIED IDEOGRAPH + {0xA6CB, 0x7AF9}, //829 #CJK UNIFIED IDEOGRAPH + {0xA6CC, 0x7C73}, //830 #CJK UNIFIED IDEOGRAPH + {0xA6CD, 0x7CF8}, //831 #CJK UNIFIED IDEOGRAPH + {0xA6CE, 0x7F36}, //832 #CJK UNIFIED IDEOGRAPH + {0xA6CF, 0x7F8A}, //833 #CJK UNIFIED IDEOGRAPH + {0xA6D0, 0x7FBD}, //834 #CJK UNIFIED IDEOGRAPH + {0xA6D1, 0x8001}, //835 #CJK UNIFIED IDEOGRAPH + {0xA6D2, 0x8003}, //836 #CJK UNIFIED IDEOGRAPH + {0xA6D3, 0x800C}, //837 #CJK UNIFIED IDEOGRAPH + {0xA6D4, 0x8012}, //838 #CJK UNIFIED IDEOGRAPH + {0xA6D5, 0x8033}, //839 #CJK UNIFIED IDEOGRAPH + {0xA6D6, 0x807F}, //840 #CJK UNIFIED IDEOGRAPH + {0xA6D7, 0x8089}, //841 #CJK UNIFIED IDEOGRAPH + {0xA6D8, 0x808B}, //842 #CJK UNIFIED IDEOGRAPH + {0xA6D9, 0x808C}, //843 #CJK UNIFIED IDEOGRAPH + {0xA6DA, 0x81E3}, //844 #CJK UNIFIED IDEOGRAPH + {0xA6DB, 0x81EA}, //845 #CJK UNIFIED IDEOGRAPH + {0xA6DC, 0x81F3}, //846 #CJK UNIFIED IDEOGRAPH + {0xA6DD, 0x81FC}, //847 #CJK UNIFIED IDEOGRAPH + {0xA6DE, 0x820C}, //848 #CJK UNIFIED IDEOGRAPH + {0xA6DF, 0x821B}, //849 #CJK UNIFIED IDEOGRAPH + {0xA6E0, 0x821F}, //850 #CJK UNIFIED IDEOGRAPH + {0xA6E1, 0x826E}, //851 #CJK UNIFIED IDEOGRAPH + {0xA6E2, 0x8272}, //852 #CJK UNIFIED IDEOGRAPH + {0xA6E3, 0x827E}, //853 #CJK UNIFIED IDEOGRAPH + {0xA6E4, 0x866B}, //854 #CJK UNIFIED IDEOGRAPH + {0xA6E5, 0x8840}, //855 #CJK UNIFIED IDEOGRAPH + {0xA6E6, 0x884C}, //856 #CJK UNIFIED IDEOGRAPH + {0xA6E7, 0x8863}, //857 #CJK UNIFIED IDEOGRAPH + {0xA6E8, 0x897F}, //858 #CJK UNIFIED IDEOGRAPH + {0xA6E9, 0x9621}, //859 #CJK UNIFIED IDEOGRAPH + {0xA6EA, 0x4E32}, //860 #CJK UNIFIED IDEOGRAPH + {0xA6EB, 0x4EA8}, //861 #CJK UNIFIED IDEOGRAPH + {0xA6EC, 0x4F4D}, //862 #CJK UNIFIED IDEOGRAPH + {0xA6ED, 0x4F4F}, //863 #CJK UNIFIED IDEOGRAPH + {0xA6EE, 0x4F47}, //864 #CJK UNIFIED IDEOGRAPH + {0xA6EF, 0x4F57}, //865 #CJK UNIFIED IDEOGRAPH + {0xA6F0, 0x4F5E}, //866 #CJK UNIFIED IDEOGRAPH + {0xA6F1, 0x4F34}, //867 #CJK UNIFIED IDEOGRAPH + {0xA6F2, 0x4F5B}, //868 #CJK UNIFIED IDEOGRAPH + {0xA6F3, 0x4F55}, //869 #CJK UNIFIED IDEOGRAPH + {0xA6F4, 0x4F30}, //870 #CJK UNIFIED IDEOGRAPH + {0xA6F5, 0x4F50}, //871 #CJK UNIFIED IDEOGRAPH + {0xA6F6, 0x4F51}, //872 #CJK UNIFIED IDEOGRAPH + {0xA6F7, 0x4F3D}, //873 #CJK UNIFIED IDEOGRAPH + {0xA6F8, 0x4F3A}, //874 #CJK UNIFIED IDEOGRAPH + {0xA6F9, 0x4F38}, //875 #CJK UNIFIED IDEOGRAPH + {0xA6FA, 0x4F43}, //876 #CJK UNIFIED IDEOGRAPH + {0xA6FB, 0x4F54}, //877 #CJK UNIFIED IDEOGRAPH + {0xA6FC, 0x4F3C}, //878 #CJK UNIFIED IDEOGRAPH + {0xA6FD, 0x4F46}, //879 #CJK UNIFIED IDEOGRAPH + {0xA6FE, 0x4F63}, //880 #CJK UNIFIED IDEOGRAPH + {0xA740, 0x4F5C}, //881 #CJK UNIFIED IDEOGRAPH + {0xA741, 0x4F60}, //882 #CJK UNIFIED IDEOGRAPH + {0xA742, 0x4F2F}, //883 #CJK UNIFIED IDEOGRAPH + {0xA743, 0x4F4E}, //884 #CJK UNIFIED IDEOGRAPH + {0xA744, 0x4F36}, //885 #CJK UNIFIED IDEOGRAPH + {0xA745, 0x4F59}, //886 #CJK UNIFIED IDEOGRAPH + {0xA746, 0x4F5D}, //887 #CJK UNIFIED IDEOGRAPH + {0xA747, 0x4F48}, //888 #CJK UNIFIED IDEOGRAPH + {0xA748, 0x4F5A}, //889 #CJK UNIFIED IDEOGRAPH + {0xA749, 0x514C}, //890 #CJK UNIFIED IDEOGRAPH + {0xA74A, 0x514B}, //891 #CJK UNIFIED IDEOGRAPH + {0xA74B, 0x514D}, //892 #CJK UNIFIED IDEOGRAPH + {0xA74C, 0x5175}, //893 #CJK UNIFIED IDEOGRAPH + {0xA74D, 0x51B6}, //894 #CJK UNIFIED IDEOGRAPH + {0xA74E, 0x51B7}, //895 #CJK UNIFIED IDEOGRAPH + {0xA74F, 0x5225}, //896 #CJK UNIFIED IDEOGRAPH + {0xA750, 0x5224}, //897 #CJK UNIFIED IDEOGRAPH + {0xA751, 0x5229}, //898 #CJK UNIFIED IDEOGRAPH + {0xA752, 0x522A}, //899 #CJK UNIFIED IDEOGRAPH + {0xA753, 0x5228}, //900 #CJK UNIFIED IDEOGRAPH + {0xA754, 0x52AB}, //901 #CJK UNIFIED IDEOGRAPH + {0xA755, 0x52A9}, //902 #CJK UNIFIED IDEOGRAPH + {0xA756, 0x52AA}, //903 #CJK UNIFIED IDEOGRAPH + {0xA757, 0x52AC}, //904 #CJK UNIFIED IDEOGRAPH + {0xA758, 0x5323}, //905 #CJK UNIFIED IDEOGRAPH + {0xA759, 0x5373}, //906 #CJK UNIFIED IDEOGRAPH + {0xA75A, 0x5375}, //907 #CJK UNIFIED IDEOGRAPH + {0xA75B, 0x541D}, //908 #CJK UNIFIED IDEOGRAPH + {0xA75C, 0x542D}, //909 #CJK UNIFIED IDEOGRAPH + {0xA75D, 0x541E}, //910 #CJK UNIFIED IDEOGRAPH + {0xA75E, 0x543E}, //911 #CJK UNIFIED IDEOGRAPH + {0xA75F, 0x5426}, //912 #CJK UNIFIED IDEOGRAPH + {0xA760, 0x544E}, //913 #CJK UNIFIED IDEOGRAPH + {0xA761, 0x5427}, //914 #CJK UNIFIED IDEOGRAPH + {0xA762, 0x5446}, //915 #CJK UNIFIED IDEOGRAPH + {0xA763, 0x5443}, //916 #CJK UNIFIED IDEOGRAPH + {0xA764, 0x5433}, //917 #CJK UNIFIED IDEOGRAPH + {0xA765, 0x5448}, //918 #CJK UNIFIED IDEOGRAPH + {0xA766, 0x5442}, //919 #CJK UNIFIED IDEOGRAPH + {0xA767, 0x541B}, //920 #CJK UNIFIED IDEOGRAPH + {0xA768, 0x5429}, //921 #CJK UNIFIED IDEOGRAPH + {0xA769, 0x544A}, //922 #CJK UNIFIED IDEOGRAPH + {0xA76A, 0x5439}, //923 #CJK UNIFIED IDEOGRAPH + {0xA76B, 0x543B}, //924 #CJK UNIFIED IDEOGRAPH + {0xA76C, 0x5438}, //925 #CJK UNIFIED IDEOGRAPH + {0xA76D, 0x542E}, //926 #CJK UNIFIED IDEOGRAPH + {0xA76E, 0x5435}, //927 #CJK UNIFIED IDEOGRAPH + {0xA76F, 0x5436}, //928 #CJK UNIFIED IDEOGRAPH + {0xA770, 0x5420}, //929 #CJK UNIFIED IDEOGRAPH + {0xA771, 0x543C}, //930 #CJK UNIFIED IDEOGRAPH + {0xA772, 0x5440}, //931 #CJK UNIFIED IDEOGRAPH + {0xA773, 0x5431}, //932 #CJK UNIFIED IDEOGRAPH + {0xA774, 0x542B}, //933 #CJK UNIFIED IDEOGRAPH + {0xA775, 0x541F}, //934 #CJK UNIFIED IDEOGRAPH + {0xA776, 0x542C}, //935 #CJK UNIFIED IDEOGRAPH + {0xA777, 0x56EA}, //936 #CJK UNIFIED IDEOGRAPH + {0xA778, 0x56F0}, //937 #CJK UNIFIED IDEOGRAPH + {0xA779, 0x56E4}, //938 #CJK UNIFIED IDEOGRAPH + {0xA77A, 0x56EB}, //939 #CJK UNIFIED IDEOGRAPH + {0xA77B, 0x574A}, //940 #CJK UNIFIED IDEOGRAPH + {0xA77C, 0x5751}, //941 #CJK UNIFIED IDEOGRAPH + {0xA77D, 0x5740}, //942 #CJK UNIFIED IDEOGRAPH + {0xA77E, 0x574D}, //943 #CJK UNIFIED IDEOGRAPH + {0xA7A1, 0x5747}, //944 #CJK UNIFIED IDEOGRAPH + {0xA7A2, 0x574E}, //945 #CJK UNIFIED IDEOGRAPH + {0xA7A3, 0x573E}, //946 #CJK UNIFIED IDEOGRAPH + {0xA7A4, 0x5750}, //947 #CJK UNIFIED IDEOGRAPH + {0xA7A5, 0x574F}, //948 #CJK UNIFIED IDEOGRAPH + {0xA7A6, 0x573B}, //949 #CJK UNIFIED IDEOGRAPH + {0xA7A7, 0x58EF}, //950 #CJK UNIFIED IDEOGRAPH + {0xA7A8, 0x593E}, //951 #CJK UNIFIED IDEOGRAPH + {0xA7A9, 0x599D}, //952 #CJK UNIFIED IDEOGRAPH + {0xA7AA, 0x5992}, //953 #CJK UNIFIED IDEOGRAPH + {0xA7AB, 0x59A8}, //954 #CJK UNIFIED IDEOGRAPH + {0xA7AC, 0x599E}, //955 #CJK UNIFIED IDEOGRAPH + {0xA7AD, 0x59A3}, //956 #CJK UNIFIED IDEOGRAPH + {0xA7AE, 0x5999}, //957 #CJK UNIFIED IDEOGRAPH + {0xA7AF, 0x5996}, //958 #CJK UNIFIED IDEOGRAPH + {0xA7B0, 0x598D}, //959 #CJK UNIFIED IDEOGRAPH + {0xA7B1, 0x59A4}, //960 #CJK UNIFIED IDEOGRAPH + {0xA7B2, 0x5993}, //961 #CJK UNIFIED IDEOGRAPH + {0xA7B3, 0x598A}, //962 #CJK UNIFIED IDEOGRAPH + {0xA7B4, 0x59A5}, //963 #CJK UNIFIED IDEOGRAPH + {0xA7B5, 0x5B5D}, //964 #CJK UNIFIED IDEOGRAPH + {0xA7B6, 0x5B5C}, //965 #CJK UNIFIED IDEOGRAPH + {0xA7B7, 0x5B5A}, //966 #CJK UNIFIED IDEOGRAPH + {0xA7B8, 0x5B5B}, //967 #CJK UNIFIED IDEOGRAPH + {0xA7B9, 0x5B8C}, //968 #CJK UNIFIED IDEOGRAPH + {0xA7BA, 0x5B8B}, //969 #CJK UNIFIED IDEOGRAPH + {0xA7BB, 0x5B8F}, //970 #CJK UNIFIED IDEOGRAPH + {0xA7BC, 0x5C2C}, //971 #CJK UNIFIED IDEOGRAPH + {0xA7BD, 0x5C40}, //972 #CJK UNIFIED IDEOGRAPH + {0xA7BE, 0x5C41}, //973 #CJK UNIFIED IDEOGRAPH + {0xA7BF, 0x5C3F}, //974 #CJK UNIFIED IDEOGRAPH + {0xA7C0, 0x5C3E}, //975 #CJK UNIFIED IDEOGRAPH + {0xA7C1, 0x5C90}, //976 #CJK UNIFIED IDEOGRAPH + {0xA7C2, 0x5C91}, //977 #CJK UNIFIED IDEOGRAPH + {0xA7C3, 0x5C94}, //978 #CJK UNIFIED IDEOGRAPH + {0xA7C4, 0x5C8C}, //979 #CJK UNIFIED IDEOGRAPH + {0xA7C5, 0x5DEB}, //980 #CJK UNIFIED IDEOGRAPH + {0xA7C6, 0x5E0C}, //981 #CJK UNIFIED IDEOGRAPH + {0xA7C7, 0x5E8F}, //982 #CJK UNIFIED IDEOGRAPH + {0xA7C8, 0x5E87}, //983 #CJK UNIFIED IDEOGRAPH + {0xA7C9, 0x5E8A}, //984 #CJK UNIFIED IDEOGRAPH + {0xA7CA, 0x5EF7}, //985 #CJK UNIFIED IDEOGRAPH + {0xA7CB, 0x5F04}, //986 #CJK UNIFIED IDEOGRAPH + {0xA7CC, 0x5F1F}, //987 #CJK UNIFIED IDEOGRAPH + {0xA7CD, 0x5F64}, //988 #CJK UNIFIED IDEOGRAPH + {0xA7CE, 0x5F62}, //989 #CJK UNIFIED IDEOGRAPH + {0xA7CF, 0x5F77}, //990 #CJK UNIFIED IDEOGRAPH + {0xA7D0, 0x5F79}, //991 #CJK UNIFIED IDEOGRAPH + {0xA7D1, 0x5FD8}, //992 #CJK UNIFIED IDEOGRAPH + {0xA7D2, 0x5FCC}, //993 #CJK UNIFIED IDEOGRAPH + {0xA7D3, 0x5FD7}, //994 #CJK UNIFIED IDEOGRAPH + {0xA7D4, 0x5FCD}, //995 #CJK UNIFIED IDEOGRAPH + {0xA7D5, 0x5FF1}, //996 #CJK UNIFIED IDEOGRAPH + {0xA7D6, 0x5FEB}, //997 #CJK UNIFIED IDEOGRAPH + {0xA7D7, 0x5FF8}, //998 #CJK UNIFIED IDEOGRAPH + {0xA7D8, 0x5FEA}, //999 #CJK UNIFIED IDEOGRAPH + {0xA7D9, 0x6212}, //1000 #CJK UNIFIED IDEOGRAPH + {0xA7DA, 0x6211}, //1001 #CJK UNIFIED IDEOGRAPH + {0xA7DB, 0x6284}, //1002 #CJK UNIFIED IDEOGRAPH + {0xA7DC, 0x6297}, //1003 #CJK UNIFIED IDEOGRAPH + {0xA7DD, 0x6296}, //1004 #CJK UNIFIED IDEOGRAPH + {0xA7DE, 0x6280}, //1005 #CJK UNIFIED IDEOGRAPH + {0xA7DF, 0x6276}, //1006 #CJK UNIFIED IDEOGRAPH + {0xA7E0, 0x6289}, //1007 #CJK UNIFIED IDEOGRAPH + {0xA7E1, 0x626D}, //1008 #CJK UNIFIED IDEOGRAPH + {0xA7E2, 0x628A}, //1009 #CJK UNIFIED IDEOGRAPH + {0xA7E3, 0x627C}, //1010 #CJK UNIFIED IDEOGRAPH + {0xA7E4, 0x627E}, //1011 #CJK UNIFIED IDEOGRAPH + {0xA7E5, 0x6279}, //1012 #CJK UNIFIED IDEOGRAPH + {0xA7E6, 0x6273}, //1013 #CJK UNIFIED IDEOGRAPH + {0xA7E7, 0x6292}, //1014 #CJK UNIFIED IDEOGRAPH + {0xA7E8, 0x626F}, //1015 #CJK UNIFIED IDEOGRAPH + {0xA7E9, 0x6298}, //1016 #CJK UNIFIED IDEOGRAPH + {0xA7EA, 0x626E}, //1017 #CJK UNIFIED IDEOGRAPH + {0xA7EB, 0x6295}, //1018 #CJK UNIFIED IDEOGRAPH + {0xA7EC, 0x6293}, //1019 #CJK UNIFIED IDEOGRAPH + {0xA7ED, 0x6291}, //1020 #CJK UNIFIED IDEOGRAPH + {0xA7EE, 0x6286}, //1021 #CJK UNIFIED IDEOGRAPH + {0xA7EF, 0x6539}, //1022 #CJK UNIFIED IDEOGRAPH + {0xA7F0, 0x653B}, //1023 #CJK UNIFIED IDEOGRAPH + {0xA7F1, 0x6538}, //1024 #CJK UNIFIED IDEOGRAPH + {0xA7F2, 0x65F1}, //1025 #CJK UNIFIED IDEOGRAPH + {0xA7F3, 0x66F4}, //1026 #CJK UNIFIED IDEOGRAPH + {0xA7F4, 0x675F}, //1027 #CJK UNIFIED IDEOGRAPH + {0xA7F5, 0x674E}, //1028 #CJK UNIFIED IDEOGRAPH + {0xA7F6, 0x674F}, //1029 #CJK UNIFIED IDEOGRAPH + {0xA7F7, 0x6750}, //1030 #CJK UNIFIED IDEOGRAPH + {0xA7F8, 0x6751}, //1031 #CJK UNIFIED IDEOGRAPH + {0xA7F9, 0x675C}, //1032 #CJK UNIFIED IDEOGRAPH + {0xA7FA, 0x6756}, //1033 #CJK UNIFIED IDEOGRAPH + {0xA7FB, 0x675E}, //1034 #CJK UNIFIED IDEOGRAPH + {0xA7FC, 0x6749}, //1035 #CJK UNIFIED IDEOGRAPH + {0xA7FD, 0x6746}, //1036 #CJK UNIFIED IDEOGRAPH + {0xA7FE, 0x6760}, //1037 #CJK UNIFIED IDEOGRAPH + {0xA840, 0x6753}, //1038 #CJK UNIFIED IDEOGRAPH + {0xA841, 0x6757}, //1039 #CJK UNIFIED IDEOGRAPH + {0xA842, 0x6B65}, //1040 #CJK UNIFIED IDEOGRAPH + {0xA843, 0x6BCF}, //1041 #CJK UNIFIED IDEOGRAPH + {0xA844, 0x6C42}, //1042 #CJK UNIFIED IDEOGRAPH + {0xA845, 0x6C5E}, //1043 #CJK UNIFIED IDEOGRAPH + {0xA846, 0x6C99}, //1044 #CJK UNIFIED IDEOGRAPH + {0xA847, 0x6C81}, //1045 #CJK UNIFIED IDEOGRAPH + {0xA848, 0x6C88}, //1046 #CJK UNIFIED IDEOGRAPH + {0xA849, 0x6C89}, //1047 #CJK UNIFIED IDEOGRAPH + {0xA84A, 0x6C85}, //1048 #CJK UNIFIED IDEOGRAPH + {0xA84B, 0x6C9B}, //1049 #CJK UNIFIED IDEOGRAPH + {0xA84C, 0x6C6A}, //1050 #CJK UNIFIED IDEOGRAPH + {0xA84D, 0x6C7A}, //1051 #CJK UNIFIED IDEOGRAPH + {0xA84E, 0x6C90}, //1052 #CJK UNIFIED IDEOGRAPH + {0xA84F, 0x6C70}, //1053 #CJK UNIFIED IDEOGRAPH + {0xA850, 0x6C8C}, //1054 #CJK UNIFIED IDEOGRAPH + {0xA851, 0x6C68}, //1055 #CJK UNIFIED IDEOGRAPH + {0xA852, 0x6C96}, //1056 #CJK UNIFIED IDEOGRAPH + {0xA853, 0x6C92}, //1057 #CJK UNIFIED IDEOGRAPH + {0xA854, 0x6C7D}, //1058 #CJK UNIFIED IDEOGRAPH + {0xA855, 0x6C83}, //1059 #CJK UNIFIED IDEOGRAPH + {0xA856, 0x6C72}, //1060 #CJK UNIFIED IDEOGRAPH + {0xA857, 0x6C7E}, //1061 #CJK UNIFIED IDEOGRAPH + {0xA858, 0x6C74}, //1062 #CJK UNIFIED IDEOGRAPH + {0xA859, 0x6C86}, //1063 #CJK UNIFIED IDEOGRAPH + {0xA85A, 0x6C76}, //1064 #CJK UNIFIED IDEOGRAPH + {0xA85B, 0x6C8D}, //1065 #CJK UNIFIED IDEOGRAPH + {0xA85C, 0x6C94}, //1066 #CJK UNIFIED IDEOGRAPH + {0xA85D, 0x6C98}, //1067 #CJK UNIFIED IDEOGRAPH + {0xA85E, 0x6C82}, //1068 #CJK UNIFIED IDEOGRAPH + {0xA85F, 0x7076}, //1069 #CJK UNIFIED IDEOGRAPH + {0xA860, 0x707C}, //1070 #CJK UNIFIED IDEOGRAPH + {0xA861, 0x707D}, //1071 #CJK UNIFIED IDEOGRAPH + {0xA862, 0x7078}, //1072 #CJK UNIFIED IDEOGRAPH + {0xA863, 0x7262}, //1073 #CJK UNIFIED IDEOGRAPH + {0xA864, 0x7261}, //1074 #CJK UNIFIED IDEOGRAPH + {0xA865, 0x7260}, //1075 #CJK UNIFIED IDEOGRAPH + {0xA866, 0x72C4}, //1076 #CJK UNIFIED IDEOGRAPH + {0xA867, 0x72C2}, //1077 #CJK UNIFIED IDEOGRAPH + {0xA868, 0x7396}, //1078 #CJK UNIFIED IDEOGRAPH + {0xA869, 0x752C}, //1079 #CJK UNIFIED IDEOGRAPH + {0xA86A, 0x752B}, //1080 #CJK UNIFIED IDEOGRAPH + {0xA86B, 0x7537}, //1081 #CJK UNIFIED IDEOGRAPH + {0xA86C, 0x7538}, //1082 #CJK UNIFIED IDEOGRAPH + {0xA86D, 0x7682}, //1083 #CJK UNIFIED IDEOGRAPH + {0xA86E, 0x76EF}, //1084 #CJK UNIFIED IDEOGRAPH + {0xA86F, 0x77E3}, //1085 #CJK UNIFIED IDEOGRAPH + {0xA870, 0x79C1}, //1086 #CJK UNIFIED IDEOGRAPH + {0xA871, 0x79C0}, //1087 #CJK UNIFIED IDEOGRAPH + {0xA872, 0x79BF}, //1088 #CJK UNIFIED IDEOGRAPH + {0xA873, 0x7A76}, //1089 #CJK UNIFIED IDEOGRAPH + {0xA874, 0x7CFB}, //1090 #CJK UNIFIED IDEOGRAPH + {0xA875, 0x7F55}, //1091 #CJK UNIFIED IDEOGRAPH + {0xA876, 0x8096}, //1092 #CJK UNIFIED IDEOGRAPH + {0xA877, 0x8093}, //1093 #CJK UNIFIED IDEOGRAPH + {0xA878, 0x809D}, //1094 #CJK UNIFIED IDEOGRAPH + {0xA879, 0x8098}, //1095 #CJK UNIFIED IDEOGRAPH + {0xA87A, 0x809B}, //1096 #CJK UNIFIED IDEOGRAPH + {0xA87B, 0x809A}, //1097 #CJK UNIFIED IDEOGRAPH + {0xA87C, 0x80B2}, //1098 #CJK UNIFIED IDEOGRAPH + {0xA87D, 0x826F}, //1099 #CJK UNIFIED IDEOGRAPH + {0xA87E, 0x8292}, //1100 #CJK UNIFIED IDEOGRAPH + {0xA8A1, 0x828B}, //1101 #CJK UNIFIED IDEOGRAPH + {0xA8A2, 0x828D}, //1102 #CJK UNIFIED IDEOGRAPH + {0xA8A3, 0x898B}, //1103 #CJK UNIFIED IDEOGRAPH + {0xA8A4, 0x89D2}, //1104 #CJK UNIFIED IDEOGRAPH + {0xA8A5, 0x8A00}, //1105 #CJK UNIFIED IDEOGRAPH + {0xA8A6, 0x8C37}, //1106 #CJK UNIFIED IDEOGRAPH + {0xA8A7, 0x8C46}, //1107 #CJK UNIFIED IDEOGRAPH + {0xA8A8, 0x8C55}, //1108 #CJK UNIFIED IDEOGRAPH + {0xA8A9, 0x8C9D}, //1109 #CJK UNIFIED IDEOGRAPH + {0xA8AA, 0x8D64}, //1110 #CJK UNIFIED IDEOGRAPH + {0xA8AB, 0x8D70}, //1111 #CJK UNIFIED IDEOGRAPH + {0xA8AC, 0x8DB3}, //1112 #CJK UNIFIED IDEOGRAPH + {0xA8AD, 0x8EAB}, //1113 #CJK UNIFIED IDEOGRAPH + {0xA8AE, 0x8ECA}, //1114 #CJK UNIFIED IDEOGRAPH + {0xA8AF, 0x8F9B}, //1115 #CJK UNIFIED IDEOGRAPH + {0xA8B0, 0x8FB0}, //1116 #CJK UNIFIED IDEOGRAPH + {0xA8B1, 0x8FC2}, //1117 #CJK UNIFIED IDEOGRAPH + {0xA8B2, 0x8FC6}, //1118 #CJK UNIFIED IDEOGRAPH + {0xA8B3, 0x8FC5}, //1119 #CJK UNIFIED IDEOGRAPH + {0xA8B4, 0x8FC4}, //1120 #CJK UNIFIED IDEOGRAPH + {0xA8B5, 0x5DE1}, //1121 #CJK UNIFIED IDEOGRAPH + {0xA8B6, 0x9091}, //1122 #CJK UNIFIED IDEOGRAPH + {0xA8B7, 0x90A2}, //1123 #CJK UNIFIED IDEOGRAPH + {0xA8B8, 0x90AA}, //1124 #CJK UNIFIED IDEOGRAPH + {0xA8B9, 0x90A6}, //1125 #CJK UNIFIED IDEOGRAPH + {0xA8BA, 0x90A3}, //1126 #CJK UNIFIED IDEOGRAPH + {0xA8BB, 0x9149}, //1127 #CJK UNIFIED IDEOGRAPH + {0xA8BC, 0x91C6}, //1128 #CJK UNIFIED IDEOGRAPH + {0xA8BD, 0x91CC}, //1129 #CJK UNIFIED IDEOGRAPH + {0xA8BE, 0x9632}, //1130 #CJK UNIFIED IDEOGRAPH + {0xA8BF, 0x962E}, //1131 #CJK UNIFIED IDEOGRAPH + {0xA8C0, 0x9631}, //1132 #CJK UNIFIED IDEOGRAPH + {0xA8C1, 0x962A}, //1133 #CJK UNIFIED IDEOGRAPH + {0xA8C2, 0x962C}, //1134 #CJK UNIFIED IDEOGRAPH + {0xA8C3, 0x4E26}, //1135 #CJK UNIFIED IDEOGRAPH + {0xA8C4, 0x4E56}, //1136 #CJK UNIFIED IDEOGRAPH + {0xA8C5, 0x4E73}, //1137 #CJK UNIFIED IDEOGRAPH + {0xA8C6, 0x4E8B}, //1138 #CJK UNIFIED IDEOGRAPH + {0xA8C7, 0x4E9B}, //1139 #CJK UNIFIED IDEOGRAPH + {0xA8C8, 0x4E9E}, //1140 #CJK UNIFIED IDEOGRAPH + {0xA8C9, 0x4EAB}, //1141 #CJK UNIFIED IDEOGRAPH + {0xA8CA, 0x4EAC}, //1142 #CJK UNIFIED IDEOGRAPH + {0xA8CB, 0x4F6F}, //1143 #CJK UNIFIED IDEOGRAPH + {0xA8CC, 0x4F9D}, //1144 #CJK UNIFIED IDEOGRAPH + {0xA8CD, 0x4F8D}, //1145 #CJK UNIFIED IDEOGRAPH + {0xA8CE, 0x4F73}, //1146 #CJK UNIFIED IDEOGRAPH + {0xA8CF, 0x4F7F}, //1147 #CJK UNIFIED IDEOGRAPH + {0xA8D0, 0x4F6C}, //1148 #CJK UNIFIED IDEOGRAPH + {0xA8D1, 0x4F9B}, //1149 #CJK UNIFIED IDEOGRAPH + {0xA8D2, 0x4F8B}, //1150 #CJK UNIFIED IDEOGRAPH + {0xA8D3, 0x4F86}, //1151 #CJK UNIFIED IDEOGRAPH + {0xA8D4, 0x4F83}, //1152 #CJK UNIFIED IDEOGRAPH + {0xA8D5, 0x4F70}, //1153 #CJK UNIFIED IDEOGRAPH + {0xA8D6, 0x4F75}, //1154 #CJK UNIFIED IDEOGRAPH + {0xA8D7, 0x4F88}, //1155 #CJK UNIFIED IDEOGRAPH + {0xA8D8, 0x4F69}, //1156 #CJK UNIFIED IDEOGRAPH + {0xA8D9, 0x4F7B}, //1157 #CJK UNIFIED IDEOGRAPH + {0xA8DA, 0x4F96}, //1158 #CJK UNIFIED IDEOGRAPH + {0xA8DB, 0x4F7E}, //1159 #CJK UNIFIED IDEOGRAPH + {0xA8DC, 0x4F8F}, //1160 #CJK UNIFIED IDEOGRAPH + {0xA8DD, 0x4F91}, //1161 #CJK UNIFIED IDEOGRAPH + {0xA8DE, 0x4F7A}, //1162 #CJK UNIFIED IDEOGRAPH + {0xA8DF, 0x5154}, //1163 #CJK UNIFIED IDEOGRAPH + {0xA8E0, 0x5152}, //1164 #CJK UNIFIED IDEOGRAPH + {0xA8E1, 0x5155}, //1165 #CJK UNIFIED IDEOGRAPH + {0xA8E2, 0x5169}, //1166 #CJK UNIFIED IDEOGRAPH + {0xA8E3, 0x5177}, //1167 #CJK UNIFIED IDEOGRAPH + {0xA8E4, 0x5176}, //1168 #CJK UNIFIED IDEOGRAPH + {0xA8E5, 0x5178}, //1169 #CJK UNIFIED IDEOGRAPH + {0xA8E6, 0x51BD}, //1170 #CJK UNIFIED IDEOGRAPH + {0xA8E7, 0x51FD}, //1171 #CJK UNIFIED IDEOGRAPH + {0xA8E8, 0x523B}, //1172 #CJK UNIFIED IDEOGRAPH + {0xA8E9, 0x5238}, //1173 #CJK UNIFIED IDEOGRAPH + {0xA8EA, 0x5237}, //1174 #CJK UNIFIED IDEOGRAPH + {0xA8EB, 0x523A}, //1175 #CJK UNIFIED IDEOGRAPH + {0xA8EC, 0x5230}, //1176 #CJK UNIFIED IDEOGRAPH + {0xA8ED, 0x522E}, //1177 #CJK UNIFIED IDEOGRAPH + {0xA8EE, 0x5236}, //1178 #CJK UNIFIED IDEOGRAPH + {0xA8EF, 0x5241}, //1179 #CJK UNIFIED IDEOGRAPH + {0xA8F0, 0x52BE}, //1180 #CJK UNIFIED IDEOGRAPH + {0xA8F1, 0x52BB}, //1181 #CJK UNIFIED IDEOGRAPH + {0xA8F2, 0x5352}, //1182 #CJK UNIFIED IDEOGRAPH + {0xA8F3, 0x5354}, //1183 #CJK UNIFIED IDEOGRAPH + {0xA8F4, 0x5353}, //1184 #CJK UNIFIED IDEOGRAPH + {0xA8F5, 0x5351}, //1185 #CJK UNIFIED IDEOGRAPH + {0xA8F6, 0x5366}, //1186 #CJK UNIFIED IDEOGRAPH + {0xA8F7, 0x5377}, //1187 #CJK UNIFIED IDEOGRAPH + {0xA8F8, 0x5378}, //1188 #CJK UNIFIED IDEOGRAPH + {0xA8F9, 0x5379}, //1189 #CJK UNIFIED IDEOGRAPH + {0xA8FA, 0x53D6}, //1190 #CJK UNIFIED IDEOGRAPH + {0xA8FB, 0x53D4}, //1191 #CJK UNIFIED IDEOGRAPH + {0xA8FC, 0x53D7}, //1192 #CJK UNIFIED IDEOGRAPH + {0xA8FD, 0x5473}, //1193 #CJK UNIFIED IDEOGRAPH + {0xA8FE, 0x5475}, //1194 #CJK UNIFIED IDEOGRAPH + {0xA940, 0x5496}, //1195 #CJK UNIFIED IDEOGRAPH + {0xA941, 0x5478}, //1196 #CJK UNIFIED IDEOGRAPH + {0xA942, 0x5495}, //1197 #CJK UNIFIED IDEOGRAPH + {0xA943, 0x5480}, //1198 #CJK UNIFIED IDEOGRAPH + {0xA944, 0x547B}, //1199 #CJK UNIFIED IDEOGRAPH + {0xA945, 0x5477}, //1200 #CJK UNIFIED IDEOGRAPH + {0xA946, 0x5484}, //1201 #CJK UNIFIED IDEOGRAPH + {0xA947, 0x5492}, //1202 #CJK UNIFIED IDEOGRAPH + {0xA948, 0x5486}, //1203 #CJK UNIFIED IDEOGRAPH + {0xA949, 0x547C}, //1204 #CJK UNIFIED IDEOGRAPH + {0xA94A, 0x5490}, //1205 #CJK UNIFIED IDEOGRAPH + {0xA94B, 0x5471}, //1206 #CJK UNIFIED IDEOGRAPH + {0xA94C, 0x5476}, //1207 #CJK UNIFIED IDEOGRAPH + {0xA94D, 0x548C}, //1208 #CJK UNIFIED IDEOGRAPH + {0xA94E, 0x549A}, //1209 #CJK UNIFIED IDEOGRAPH + {0xA94F, 0x5462}, //1210 #CJK UNIFIED IDEOGRAPH + {0xA950, 0x5468}, //1211 #CJK UNIFIED IDEOGRAPH + {0xA951, 0x548B}, //1212 #CJK UNIFIED IDEOGRAPH + {0xA952, 0x547D}, //1213 #CJK UNIFIED IDEOGRAPH + {0xA953, 0x548E}, //1214 #CJK UNIFIED IDEOGRAPH + {0xA954, 0x56FA}, //1215 #CJK UNIFIED IDEOGRAPH + {0xA955, 0x5783}, //1216 #CJK UNIFIED IDEOGRAPH + {0xA956, 0x5777}, //1217 #CJK UNIFIED IDEOGRAPH + {0xA957, 0x576A}, //1218 #CJK UNIFIED IDEOGRAPH + {0xA958, 0x5769}, //1219 #CJK UNIFIED IDEOGRAPH + {0xA959, 0x5761}, //1220 #CJK UNIFIED IDEOGRAPH + {0xA95A, 0x5766}, //1221 #CJK UNIFIED IDEOGRAPH + {0xA95B, 0x5764}, //1222 #CJK UNIFIED IDEOGRAPH + {0xA95C, 0x577C}, //1223 #CJK UNIFIED IDEOGRAPH + {0xA95D, 0x591C}, //1224 #CJK UNIFIED IDEOGRAPH + {0xA95E, 0x5949}, //1225 #CJK UNIFIED IDEOGRAPH + {0xA95F, 0x5947}, //1226 #CJK UNIFIED IDEOGRAPH + {0xA960, 0x5948}, //1227 #CJK UNIFIED IDEOGRAPH + {0xA961, 0x5944}, //1228 #CJK UNIFIED IDEOGRAPH + {0xA962, 0x5954}, //1229 #CJK UNIFIED IDEOGRAPH + {0xA963, 0x59BE}, //1230 #CJK UNIFIED IDEOGRAPH + {0xA964, 0x59BB}, //1231 #CJK UNIFIED IDEOGRAPH + {0xA965, 0x59D4}, //1232 #CJK UNIFIED IDEOGRAPH + {0xA966, 0x59B9}, //1233 #CJK UNIFIED IDEOGRAPH + {0xA967, 0x59AE}, //1234 #CJK UNIFIED IDEOGRAPH + {0xA968, 0x59D1}, //1235 #CJK UNIFIED IDEOGRAPH + {0xA969, 0x59C6}, //1236 #CJK UNIFIED IDEOGRAPH + {0xA96A, 0x59D0}, //1237 #CJK UNIFIED IDEOGRAPH + {0xA96B, 0x59CD}, //1238 #CJK UNIFIED IDEOGRAPH + {0xA96C, 0x59CB}, //1239 #CJK UNIFIED IDEOGRAPH + {0xA96D, 0x59D3}, //1240 #CJK UNIFIED IDEOGRAPH + {0xA96E, 0x59CA}, //1241 #CJK UNIFIED IDEOGRAPH + {0xA96F, 0x59AF}, //1242 #CJK UNIFIED IDEOGRAPH + {0xA970, 0x59B3}, //1243 #CJK UNIFIED IDEOGRAPH + {0xA971, 0x59D2}, //1244 #CJK UNIFIED IDEOGRAPH + {0xA972, 0x59C5}, //1245 #CJK UNIFIED IDEOGRAPH + {0xA973, 0x5B5F}, //1246 #CJK UNIFIED IDEOGRAPH + {0xA974, 0x5B64}, //1247 #CJK UNIFIED IDEOGRAPH + {0xA975, 0x5B63}, //1248 #CJK UNIFIED IDEOGRAPH + {0xA976, 0x5B97}, //1249 #CJK UNIFIED IDEOGRAPH + {0xA977, 0x5B9A}, //1250 #CJK UNIFIED IDEOGRAPH + {0xA978, 0x5B98}, //1251 #CJK UNIFIED IDEOGRAPH + {0xA979, 0x5B9C}, //1252 #CJK UNIFIED IDEOGRAPH + {0xA97A, 0x5B99}, //1253 #CJK UNIFIED IDEOGRAPH + {0xA97B, 0x5B9B}, //1254 #CJK UNIFIED IDEOGRAPH + {0xA97C, 0x5C1A}, //1255 #CJK UNIFIED IDEOGRAPH + {0xA97D, 0x5C48}, //1256 #CJK UNIFIED IDEOGRAPH + {0xA97E, 0x5C45}, //1257 #CJK UNIFIED IDEOGRAPH + {0xA9A1, 0x5C46}, //1258 #CJK UNIFIED IDEOGRAPH + {0xA9A2, 0x5CB7}, //1259 #CJK UNIFIED IDEOGRAPH + {0xA9A3, 0x5CA1}, //1260 #CJK UNIFIED IDEOGRAPH + {0xA9A4, 0x5CB8}, //1261 #CJK UNIFIED IDEOGRAPH + {0xA9A5, 0x5CA9}, //1262 #CJK UNIFIED IDEOGRAPH + {0xA9A6, 0x5CAB}, //1263 #CJK UNIFIED IDEOGRAPH + {0xA9A7, 0x5CB1}, //1264 #CJK UNIFIED IDEOGRAPH + {0xA9A8, 0x5CB3}, //1265 #CJK UNIFIED IDEOGRAPH + {0xA9A9, 0x5E18}, //1266 #CJK UNIFIED IDEOGRAPH + {0xA9AA, 0x5E1A}, //1267 #CJK UNIFIED IDEOGRAPH + {0xA9AB, 0x5E16}, //1268 #CJK UNIFIED IDEOGRAPH + {0xA9AC, 0x5E15}, //1269 #CJK UNIFIED IDEOGRAPH + {0xA9AD, 0x5E1B}, //1270 #CJK UNIFIED IDEOGRAPH + {0xA9AE, 0x5E11}, //1271 #CJK UNIFIED IDEOGRAPH + {0xA9AF, 0x5E78}, //1272 #CJK UNIFIED IDEOGRAPH + {0xA9B0, 0x5E9A}, //1273 #CJK UNIFIED IDEOGRAPH + {0xA9B1, 0x5E97}, //1274 #CJK UNIFIED IDEOGRAPH + {0xA9B2, 0x5E9C}, //1275 #CJK UNIFIED IDEOGRAPH + {0xA9B3, 0x5E95}, //1276 #CJK UNIFIED IDEOGRAPH + {0xA9B4, 0x5E96}, //1277 #CJK UNIFIED IDEOGRAPH + {0xA9B5, 0x5EF6}, //1278 #CJK UNIFIED IDEOGRAPH + {0xA9B6, 0x5F26}, //1279 #CJK UNIFIED IDEOGRAPH + {0xA9B7, 0x5F27}, //1280 #CJK UNIFIED IDEOGRAPH + {0xA9B8, 0x5F29}, //1281 #CJK UNIFIED IDEOGRAPH + {0xA9B9, 0x5F80}, //1282 #CJK UNIFIED IDEOGRAPH + {0xA9BA, 0x5F81}, //1283 #CJK UNIFIED IDEOGRAPH + {0xA9BB, 0x5F7F}, //1284 #CJK UNIFIED IDEOGRAPH + {0xA9BC, 0x5F7C}, //1285 #CJK UNIFIED IDEOGRAPH + {0xA9BD, 0x5FDD}, //1286 #CJK UNIFIED IDEOGRAPH + {0xA9BE, 0x5FE0}, //1287 #CJK UNIFIED IDEOGRAPH + {0xA9BF, 0x5FFD}, //1288 #CJK UNIFIED IDEOGRAPH + {0xA9C0, 0x5FF5}, //1289 #CJK UNIFIED IDEOGRAPH + {0xA9C1, 0x5FFF}, //1290 #CJK UNIFIED IDEOGRAPH + {0xA9C2, 0x600F}, //1291 #CJK UNIFIED IDEOGRAPH + {0xA9C3, 0x6014}, //1292 #CJK UNIFIED IDEOGRAPH + {0xA9C4, 0x602F}, //1293 #CJK UNIFIED IDEOGRAPH + {0xA9C5, 0x6035}, //1294 #CJK UNIFIED IDEOGRAPH + {0xA9C6, 0x6016}, //1295 #CJK UNIFIED IDEOGRAPH + {0xA9C7, 0x602A}, //1296 #CJK UNIFIED IDEOGRAPH + {0xA9C8, 0x6015}, //1297 #CJK UNIFIED IDEOGRAPH + {0xA9C9, 0x6021}, //1298 #CJK UNIFIED IDEOGRAPH + {0xA9CA, 0x6027}, //1299 #CJK UNIFIED IDEOGRAPH + {0xA9CB, 0x6029}, //1300 #CJK UNIFIED IDEOGRAPH + {0xA9CC, 0x602B}, //1301 #CJK UNIFIED IDEOGRAPH + {0xA9CD, 0x601B}, //1302 #CJK UNIFIED IDEOGRAPH + {0xA9CE, 0x6216}, //1303 #CJK UNIFIED IDEOGRAPH + {0xA9CF, 0x6215}, //1304 #CJK UNIFIED IDEOGRAPH + {0xA9D0, 0x623F}, //1305 #CJK UNIFIED IDEOGRAPH + {0xA9D1, 0x623E}, //1306 #CJK UNIFIED IDEOGRAPH + {0xA9D2, 0x6240}, //1307 #CJK UNIFIED IDEOGRAPH + {0xA9D3, 0x627F}, //1308 #CJK UNIFIED IDEOGRAPH + {0xA9D4, 0x62C9}, //1309 #CJK UNIFIED IDEOGRAPH + {0xA9D5, 0x62CC}, //1310 #CJK UNIFIED IDEOGRAPH + {0xA9D6, 0x62C4}, //1311 #CJK UNIFIED IDEOGRAPH + {0xA9D7, 0x62BF}, //1312 #CJK UNIFIED IDEOGRAPH + {0xA9D8, 0x62C2}, //1313 #CJK UNIFIED IDEOGRAPH + {0xA9D9, 0x62B9}, //1314 #CJK UNIFIED IDEOGRAPH + {0xA9DA, 0x62D2}, //1315 #CJK UNIFIED IDEOGRAPH + {0xA9DB, 0x62DB}, //1316 #CJK UNIFIED IDEOGRAPH + {0xA9DC, 0x62AB}, //1317 #CJK UNIFIED IDEOGRAPH + {0xA9DD, 0x62D3}, //1318 #CJK UNIFIED IDEOGRAPH + {0xA9DE, 0x62D4}, //1319 #CJK UNIFIED IDEOGRAPH + {0xA9DF, 0x62CB}, //1320 #CJK UNIFIED IDEOGRAPH + {0xA9E0, 0x62C8}, //1321 #CJK UNIFIED IDEOGRAPH + {0xA9E1, 0x62A8}, //1322 #CJK UNIFIED IDEOGRAPH + {0xA9E2, 0x62BD}, //1323 #CJK UNIFIED IDEOGRAPH + {0xA9E3, 0x62BC}, //1324 #CJK UNIFIED IDEOGRAPH + {0xA9E4, 0x62D0}, //1325 #CJK UNIFIED IDEOGRAPH + {0xA9E5, 0x62D9}, //1326 #CJK UNIFIED IDEOGRAPH + {0xA9E6, 0x62C7}, //1327 #CJK UNIFIED IDEOGRAPH + {0xA9E7, 0x62CD}, //1328 #CJK UNIFIED IDEOGRAPH + {0xA9E8, 0x62B5}, //1329 #CJK UNIFIED IDEOGRAPH + {0xA9E9, 0x62DA}, //1330 #CJK UNIFIED IDEOGRAPH + {0xA9EA, 0x62B1}, //1331 #CJK UNIFIED IDEOGRAPH + {0xA9EB, 0x62D8}, //1332 #CJK UNIFIED IDEOGRAPH + {0xA9EC, 0x62D6}, //1333 #CJK UNIFIED IDEOGRAPH + {0xA9ED, 0x62D7}, //1334 #CJK UNIFIED IDEOGRAPH + {0xA9EE, 0x62C6}, //1335 #CJK UNIFIED IDEOGRAPH + {0xA9EF, 0x62AC}, //1336 #CJK UNIFIED IDEOGRAPH + {0xA9F0, 0x62CE}, //1337 #CJK UNIFIED IDEOGRAPH + {0xA9F1, 0x653E}, //1338 #CJK UNIFIED IDEOGRAPH + {0xA9F2, 0x65A7}, //1339 #CJK UNIFIED IDEOGRAPH + {0xA9F3, 0x65BC}, //1340 #CJK UNIFIED IDEOGRAPH + {0xA9F4, 0x65FA}, //1341 #CJK UNIFIED IDEOGRAPH + {0xA9F5, 0x6614}, //1342 #CJK UNIFIED IDEOGRAPH + {0xA9F6, 0x6613}, //1343 #CJK UNIFIED IDEOGRAPH + {0xA9F7, 0x660C}, //1344 #CJK UNIFIED IDEOGRAPH + {0xA9F8, 0x6606}, //1345 #CJK UNIFIED IDEOGRAPH + {0xA9F9, 0x6602}, //1346 #CJK UNIFIED IDEOGRAPH + {0xA9FA, 0x660E}, //1347 #CJK UNIFIED IDEOGRAPH + {0xA9FB, 0x6600}, //1348 #CJK UNIFIED IDEOGRAPH + {0xA9FC, 0x660F}, //1349 #CJK UNIFIED IDEOGRAPH + {0xA9FD, 0x6615}, //1350 #CJK UNIFIED IDEOGRAPH + {0xA9FE, 0x660A}, //1351 #CJK UNIFIED IDEOGRAPH + {0xAA40, 0x6607}, //1352 #CJK UNIFIED IDEOGRAPH + {0xAA41, 0x670D}, //1353 #CJK UNIFIED IDEOGRAPH + {0xAA42, 0x670B}, //1354 #CJK UNIFIED IDEOGRAPH + {0xAA43, 0x676D}, //1355 #CJK UNIFIED IDEOGRAPH + {0xAA44, 0x678B}, //1356 #CJK UNIFIED IDEOGRAPH + {0xAA45, 0x6795}, //1357 #CJK UNIFIED IDEOGRAPH + {0xAA46, 0x6771}, //1358 #CJK UNIFIED IDEOGRAPH + {0xAA47, 0x679C}, //1359 #CJK UNIFIED IDEOGRAPH + {0xAA48, 0x6773}, //1360 #CJK UNIFIED IDEOGRAPH + {0xAA49, 0x6777}, //1361 #CJK UNIFIED IDEOGRAPH + {0xAA4A, 0x6787}, //1362 #CJK UNIFIED IDEOGRAPH + {0xAA4B, 0x679D}, //1363 #CJK UNIFIED IDEOGRAPH + {0xAA4C, 0x6797}, //1364 #CJK UNIFIED IDEOGRAPH + {0xAA4D, 0x676F}, //1365 #CJK UNIFIED IDEOGRAPH + {0xAA4E, 0x6770}, //1366 #CJK UNIFIED IDEOGRAPH + {0xAA4F, 0x677F}, //1367 #CJK UNIFIED IDEOGRAPH + {0xAA50, 0x6789}, //1368 #CJK UNIFIED IDEOGRAPH + {0xAA51, 0x677E}, //1369 #CJK UNIFIED IDEOGRAPH + {0xAA52, 0x6790}, //1370 #CJK UNIFIED IDEOGRAPH + {0xAA53, 0x6775}, //1371 #CJK UNIFIED IDEOGRAPH + {0xAA54, 0x679A}, //1372 #CJK UNIFIED IDEOGRAPH + {0xAA55, 0x6793}, //1373 #CJK UNIFIED IDEOGRAPH + {0xAA56, 0x677C}, //1374 #CJK UNIFIED IDEOGRAPH + {0xAA57, 0x676A}, //1375 #CJK UNIFIED IDEOGRAPH + {0xAA58, 0x6772}, //1376 #CJK UNIFIED IDEOGRAPH + {0xAA59, 0x6B23}, //1377 #CJK UNIFIED IDEOGRAPH + {0xAA5A, 0x6B66}, //1378 #CJK UNIFIED IDEOGRAPH + {0xAA5B, 0x6B67}, //1379 #CJK UNIFIED IDEOGRAPH + {0xAA5C, 0x6B7F}, //1380 #CJK UNIFIED IDEOGRAPH + {0xAA5D, 0x6C13}, //1381 #CJK UNIFIED IDEOGRAPH + {0xAA5E, 0x6C1B}, //1382 #CJK UNIFIED IDEOGRAPH + {0xAA5F, 0x6CE3}, //1383 #CJK UNIFIED IDEOGRAPH + {0xAA60, 0x6CE8}, //1384 #CJK UNIFIED IDEOGRAPH + {0xAA61, 0x6CF3}, //1385 #CJK UNIFIED IDEOGRAPH + {0xAA62, 0x6CB1}, //1386 #CJK UNIFIED IDEOGRAPH + {0xAA63, 0x6CCC}, //1387 #CJK UNIFIED IDEOGRAPH + {0xAA64, 0x6CE5}, //1388 #CJK UNIFIED IDEOGRAPH + {0xAA65, 0x6CB3}, //1389 #CJK UNIFIED IDEOGRAPH + {0xAA66, 0x6CBD}, //1390 #CJK UNIFIED IDEOGRAPH + {0xAA67, 0x6CBE}, //1391 #CJK UNIFIED IDEOGRAPH + {0xAA68, 0x6CBC}, //1392 #CJK UNIFIED IDEOGRAPH + {0xAA69, 0x6CE2}, //1393 #CJK UNIFIED IDEOGRAPH + {0xAA6A, 0x6CAB}, //1394 #CJK UNIFIED IDEOGRAPH + {0xAA6B, 0x6CD5}, //1395 #CJK UNIFIED IDEOGRAPH + {0xAA6C, 0x6CD3}, //1396 #CJK UNIFIED IDEOGRAPH + {0xAA6D, 0x6CB8}, //1397 #CJK UNIFIED IDEOGRAPH + {0xAA6E, 0x6CC4}, //1398 #CJK UNIFIED IDEOGRAPH + {0xAA6F, 0x6CB9}, //1399 #CJK UNIFIED IDEOGRAPH + {0xAA70, 0x6CC1}, //1400 #CJK UNIFIED IDEOGRAPH + {0xAA71, 0x6CAE}, //1401 #CJK UNIFIED IDEOGRAPH + {0xAA72, 0x6CD7}, //1402 #CJK UNIFIED IDEOGRAPH + {0xAA73, 0x6CC5}, //1403 #CJK UNIFIED IDEOGRAPH + {0xAA74, 0x6CF1}, //1404 #CJK UNIFIED IDEOGRAPH + {0xAA75, 0x6CBF}, //1405 #CJK UNIFIED IDEOGRAPH + {0xAA76, 0x6CBB}, //1406 #CJK UNIFIED IDEOGRAPH + {0xAA77, 0x6CE1}, //1407 #CJK UNIFIED IDEOGRAPH + {0xAA78, 0x6CDB}, //1408 #CJK UNIFIED IDEOGRAPH + {0xAA79, 0x6CCA}, //1409 #CJK UNIFIED IDEOGRAPH + {0xAA7A, 0x6CAC}, //1410 #CJK UNIFIED IDEOGRAPH + {0xAA7B, 0x6CEF}, //1411 #CJK UNIFIED IDEOGRAPH + {0xAA7C, 0x6CDC}, //1412 #CJK UNIFIED IDEOGRAPH + {0xAA7D, 0x6CD6}, //1413 #CJK UNIFIED IDEOGRAPH + {0xAA7E, 0x6CE0}, //1414 #CJK UNIFIED IDEOGRAPH + {0xAAA1, 0x7095}, //1415 #CJK UNIFIED IDEOGRAPH + {0xAAA2, 0x708E}, //1416 #CJK UNIFIED IDEOGRAPH + {0xAAA3, 0x7092}, //1417 #CJK UNIFIED IDEOGRAPH + {0xAAA4, 0x708A}, //1418 #CJK UNIFIED IDEOGRAPH + {0xAAA5, 0x7099}, //1419 #CJK UNIFIED IDEOGRAPH + {0xAAA6, 0x722C}, //1420 #CJK UNIFIED IDEOGRAPH + {0xAAA7, 0x722D}, //1421 #CJK UNIFIED IDEOGRAPH + {0xAAA8, 0x7238}, //1422 #CJK UNIFIED IDEOGRAPH + {0xAAA9, 0x7248}, //1423 #CJK UNIFIED IDEOGRAPH + {0xAAAA, 0x7267}, //1424 #CJK UNIFIED IDEOGRAPH + {0xAAAB, 0x7269}, //1425 #CJK UNIFIED IDEOGRAPH + {0xAAAC, 0x72C0}, //1426 #CJK UNIFIED IDEOGRAPH + {0xAAAD, 0x72CE}, //1427 #CJK UNIFIED IDEOGRAPH + {0xAAAE, 0x72D9}, //1428 #CJK UNIFIED IDEOGRAPH + {0xAAAF, 0x72D7}, //1429 #CJK UNIFIED IDEOGRAPH + {0xAAB0, 0x72D0}, //1430 #CJK UNIFIED IDEOGRAPH + {0xAAB1, 0x73A9}, //1431 #CJK UNIFIED IDEOGRAPH + {0xAAB2, 0x73A8}, //1432 #CJK UNIFIED IDEOGRAPH + {0xAAB3, 0x739F}, //1433 #CJK UNIFIED IDEOGRAPH + {0xAAB4, 0x73AB}, //1434 #CJK UNIFIED IDEOGRAPH + {0xAAB5, 0x73A5}, //1435 #CJK UNIFIED IDEOGRAPH + {0xAAB6, 0x753D}, //1436 #CJK UNIFIED IDEOGRAPH + {0xAAB7, 0x759D}, //1437 #CJK UNIFIED IDEOGRAPH + {0xAAB8, 0x7599}, //1438 #CJK UNIFIED IDEOGRAPH + {0xAAB9, 0x759A}, //1439 #CJK UNIFIED IDEOGRAPH + {0xAABA, 0x7684}, //1440 #CJK UNIFIED IDEOGRAPH + {0xAABB, 0x76C2}, //1441 #CJK UNIFIED IDEOGRAPH + {0xAABC, 0x76F2}, //1442 #CJK UNIFIED IDEOGRAPH + {0xAABD, 0x76F4}, //1443 #CJK UNIFIED IDEOGRAPH + {0xAABE, 0x77E5}, //1444 #CJK UNIFIED IDEOGRAPH + {0xAABF, 0x77FD}, //1445 #CJK UNIFIED IDEOGRAPH + {0xAAC0, 0x793E}, //1446 #CJK UNIFIED IDEOGRAPH + {0xAAC1, 0x7940}, //1447 #CJK UNIFIED IDEOGRAPH + {0xAAC2, 0x7941}, //1448 #CJK UNIFIED IDEOGRAPH + {0xAAC3, 0x79C9}, //1449 #CJK UNIFIED IDEOGRAPH + {0xAAC4, 0x79C8}, //1450 #CJK UNIFIED IDEOGRAPH + {0xAAC5, 0x7A7A}, //1451 #CJK UNIFIED IDEOGRAPH + {0xAAC6, 0x7A79}, //1452 #CJK UNIFIED IDEOGRAPH + {0xAAC7, 0x7AFA}, //1453 #CJK UNIFIED IDEOGRAPH + {0xAAC8, 0x7CFE}, //1454 #CJK UNIFIED IDEOGRAPH + {0xAAC9, 0x7F54}, //1455 #CJK UNIFIED IDEOGRAPH + {0xAACA, 0x7F8C}, //1456 #CJK UNIFIED IDEOGRAPH + {0xAACB, 0x7F8B}, //1457 #CJK UNIFIED IDEOGRAPH + {0xAACC, 0x8005}, //1458 #CJK UNIFIED IDEOGRAPH + {0xAACD, 0x80BA}, //1459 #CJK UNIFIED IDEOGRAPH + {0xAACE, 0x80A5}, //1460 #CJK UNIFIED IDEOGRAPH + {0xAACF, 0x80A2}, //1461 #CJK UNIFIED IDEOGRAPH + {0xAAD0, 0x80B1}, //1462 #CJK UNIFIED IDEOGRAPH + {0xAAD1, 0x80A1}, //1463 #CJK UNIFIED IDEOGRAPH + {0xAAD2, 0x80AB}, //1464 #CJK UNIFIED IDEOGRAPH + {0xAAD3, 0x80A9}, //1465 #CJK UNIFIED IDEOGRAPH + {0xAAD4, 0x80B4}, //1466 #CJK UNIFIED IDEOGRAPH + {0xAAD5, 0x80AA}, //1467 #CJK UNIFIED IDEOGRAPH + {0xAAD6, 0x80AF}, //1468 #CJK UNIFIED IDEOGRAPH + {0xAAD7, 0x81E5}, //1469 #CJK UNIFIED IDEOGRAPH + {0xAAD8, 0x81FE}, //1470 #CJK UNIFIED IDEOGRAPH + {0xAAD9, 0x820D}, //1471 #CJK UNIFIED IDEOGRAPH + {0xAADA, 0x82B3}, //1472 #CJK UNIFIED IDEOGRAPH + {0xAADB, 0x829D}, //1473 #CJK UNIFIED IDEOGRAPH + {0xAADC, 0x8299}, //1474 #CJK UNIFIED IDEOGRAPH + {0xAADD, 0x82AD}, //1475 #CJK UNIFIED IDEOGRAPH + {0xAADE, 0x82BD}, //1476 #CJK UNIFIED IDEOGRAPH + {0xAADF, 0x829F}, //1477 #CJK UNIFIED IDEOGRAPH + {0xAAE0, 0x82B9}, //1478 #CJK UNIFIED IDEOGRAPH + {0xAAE1, 0x82B1}, //1479 #CJK UNIFIED IDEOGRAPH + {0xAAE2, 0x82AC}, //1480 #CJK UNIFIED IDEOGRAPH + {0xAAE3, 0x82A5}, //1481 #CJK UNIFIED IDEOGRAPH + {0xAAE4, 0x82AF}, //1482 #CJK UNIFIED IDEOGRAPH + {0xAAE5, 0x82B8}, //1483 #CJK UNIFIED IDEOGRAPH + {0xAAE6, 0x82A3}, //1484 #CJK UNIFIED IDEOGRAPH + {0xAAE7, 0x82B0}, //1485 #CJK UNIFIED IDEOGRAPH + {0xAAE8, 0x82BE}, //1486 #CJK UNIFIED IDEOGRAPH + {0xAAE9, 0x82B7}, //1487 #CJK UNIFIED IDEOGRAPH + {0xAAEA, 0x864E}, //1488 #CJK UNIFIED IDEOGRAPH + {0xAAEB, 0x8671}, //1489 #CJK UNIFIED IDEOGRAPH + {0xAAEC, 0x521D}, //1490 #CJK UNIFIED IDEOGRAPH + {0xAAED, 0x8868}, //1491 #CJK UNIFIED IDEOGRAPH + {0xAAEE, 0x8ECB}, //1492 #CJK UNIFIED IDEOGRAPH + {0xAAEF, 0x8FCE}, //1493 #CJK UNIFIED IDEOGRAPH + {0xAAF0, 0x8FD4}, //1494 #CJK UNIFIED IDEOGRAPH + {0xAAF1, 0x8FD1}, //1495 #CJK UNIFIED IDEOGRAPH + {0xAAF2, 0x90B5}, //1496 #CJK UNIFIED IDEOGRAPH + {0xAAF3, 0x90B8}, //1497 #CJK UNIFIED IDEOGRAPH + {0xAAF4, 0x90B1}, //1498 #CJK UNIFIED IDEOGRAPH + {0xAAF5, 0x90B6}, //1499 #CJK UNIFIED IDEOGRAPH + {0xAAF6, 0x91C7}, //1500 #CJK UNIFIED IDEOGRAPH + {0xAAF7, 0x91D1}, //1501 #CJK UNIFIED IDEOGRAPH + {0xAAF8, 0x9577}, //1502 #CJK UNIFIED IDEOGRAPH + {0xAAF9, 0x9580}, //1503 #CJK UNIFIED IDEOGRAPH + {0xAAFA, 0x961C}, //1504 #CJK UNIFIED IDEOGRAPH + {0xAAFB, 0x9640}, //1505 #CJK UNIFIED IDEOGRAPH + {0xAAFC, 0x963F}, //1506 #CJK UNIFIED IDEOGRAPH + {0xAAFD, 0x963B}, //1507 #CJK UNIFIED IDEOGRAPH + {0xAAFE, 0x9644}, //1508 #CJK UNIFIED IDEOGRAPH + {0xAB40, 0x9642}, //1509 #CJK UNIFIED IDEOGRAPH + {0xAB41, 0x96B9}, //1510 #CJK UNIFIED IDEOGRAPH + {0xAB42, 0x96E8}, //1511 #CJK UNIFIED IDEOGRAPH + {0xAB43, 0x9752}, //1512 #CJK UNIFIED IDEOGRAPH + {0xAB44, 0x975E}, //1513 #CJK UNIFIED IDEOGRAPH + {0xAB45, 0x4E9F}, //1514 #CJK UNIFIED IDEOGRAPH + {0xAB46, 0x4EAD}, //1515 #CJK UNIFIED IDEOGRAPH + {0xAB47, 0x4EAE}, //1516 #CJK UNIFIED IDEOGRAPH + {0xAB48, 0x4FE1}, //1517 #CJK UNIFIED IDEOGRAPH + {0xAB49, 0x4FB5}, //1518 #CJK UNIFIED IDEOGRAPH + {0xAB4A, 0x4FAF}, //1519 #CJK UNIFIED IDEOGRAPH + {0xAB4B, 0x4FBF}, //1520 #CJK UNIFIED IDEOGRAPH + {0xAB4C, 0x4FE0}, //1521 #CJK UNIFIED IDEOGRAPH + {0xAB4D, 0x4FD1}, //1522 #CJK UNIFIED IDEOGRAPH + {0xAB4E, 0x4FCF}, //1523 #CJK UNIFIED IDEOGRAPH + {0xAB4F, 0x4FDD}, //1524 #CJK UNIFIED IDEOGRAPH + {0xAB50, 0x4FC3}, //1525 #CJK UNIFIED IDEOGRAPH + {0xAB51, 0x4FB6}, //1526 #CJK UNIFIED IDEOGRAPH + {0xAB52, 0x4FD8}, //1527 #CJK UNIFIED IDEOGRAPH + {0xAB53, 0x4FDF}, //1528 #CJK UNIFIED IDEOGRAPH + {0xAB54, 0x4FCA}, //1529 #CJK UNIFIED IDEOGRAPH + {0xAB55, 0x4FD7}, //1530 #CJK UNIFIED IDEOGRAPH + {0xAB56, 0x4FAE}, //1531 #CJK UNIFIED IDEOGRAPH + {0xAB57, 0x4FD0}, //1532 #CJK UNIFIED IDEOGRAPH + {0xAB58, 0x4FC4}, //1533 #CJK UNIFIED IDEOGRAPH + {0xAB59, 0x4FC2}, //1534 #CJK UNIFIED IDEOGRAPH + {0xAB5A, 0x4FDA}, //1535 #CJK UNIFIED IDEOGRAPH + {0xAB5B, 0x4FCE}, //1536 #CJK UNIFIED IDEOGRAPH + {0xAB5C, 0x4FDE}, //1537 #CJK UNIFIED IDEOGRAPH + {0xAB5D, 0x4FB7}, //1538 #CJK UNIFIED IDEOGRAPH + {0xAB5E, 0x5157}, //1539 #CJK UNIFIED IDEOGRAPH + {0xAB5F, 0x5192}, //1540 #CJK UNIFIED IDEOGRAPH + {0xAB60, 0x5191}, //1541 #CJK UNIFIED IDEOGRAPH + {0xAB61, 0x51A0}, //1542 #CJK UNIFIED IDEOGRAPH + {0xAB62, 0x524E}, //1543 #CJK UNIFIED IDEOGRAPH + {0xAB63, 0x5243}, //1544 #CJK UNIFIED IDEOGRAPH + {0xAB64, 0x524A}, //1545 #CJK UNIFIED IDEOGRAPH + {0xAB65, 0x524D}, //1546 #CJK UNIFIED IDEOGRAPH + {0xAB66, 0x524C}, //1547 #CJK UNIFIED IDEOGRAPH + {0xAB67, 0x524B}, //1548 #CJK UNIFIED IDEOGRAPH + {0xAB68, 0x5247}, //1549 #CJK UNIFIED IDEOGRAPH + {0xAB69, 0x52C7}, //1550 #CJK UNIFIED IDEOGRAPH + {0xAB6A, 0x52C9}, //1551 #CJK UNIFIED IDEOGRAPH + {0xAB6B, 0x52C3}, //1552 #CJK UNIFIED IDEOGRAPH + {0xAB6C, 0x52C1}, //1553 #CJK UNIFIED IDEOGRAPH + {0xAB6D, 0x530D}, //1554 #CJK UNIFIED IDEOGRAPH + {0xAB6E, 0x5357}, //1555 #CJK UNIFIED IDEOGRAPH + {0xAB6F, 0x537B}, //1556 #CJK UNIFIED IDEOGRAPH + {0xAB70, 0x539A}, //1557 #CJK UNIFIED IDEOGRAPH + {0xAB71, 0x53DB}, //1558 #CJK UNIFIED IDEOGRAPH + {0xAB72, 0x54AC}, //1559 #CJK UNIFIED IDEOGRAPH + {0xAB73, 0x54C0}, //1560 #CJK UNIFIED IDEOGRAPH + {0xAB74, 0x54A8}, //1561 #CJK UNIFIED IDEOGRAPH + {0xAB75, 0x54CE}, //1562 #CJK UNIFIED IDEOGRAPH + {0xAB76, 0x54C9}, //1563 #CJK UNIFIED IDEOGRAPH + {0xAB77, 0x54B8}, //1564 #CJK UNIFIED IDEOGRAPH + {0xAB78, 0x54A6}, //1565 #CJK UNIFIED IDEOGRAPH + {0xAB79, 0x54B3}, //1566 #CJK UNIFIED IDEOGRAPH + {0xAB7A, 0x54C7}, //1567 #CJK UNIFIED IDEOGRAPH + {0xAB7B, 0x54C2}, //1568 #CJK UNIFIED IDEOGRAPH + {0xAB7C, 0x54BD}, //1569 #CJK UNIFIED IDEOGRAPH + {0xAB7D, 0x54AA}, //1570 #CJK UNIFIED IDEOGRAPH + {0xAB7E, 0x54C1}, //1571 #CJK UNIFIED IDEOGRAPH + {0xABA1, 0x54C4}, //1572 #CJK UNIFIED IDEOGRAPH + {0xABA2, 0x54C8}, //1573 #CJK UNIFIED IDEOGRAPH + {0xABA3, 0x54AF}, //1574 #CJK UNIFIED IDEOGRAPH + {0xABA4, 0x54AB}, //1575 #CJK UNIFIED IDEOGRAPH + {0xABA5, 0x54B1}, //1576 #CJK UNIFIED IDEOGRAPH + {0xABA6, 0x54BB}, //1577 #CJK UNIFIED IDEOGRAPH + {0xABA7, 0x54A9}, //1578 #CJK UNIFIED IDEOGRAPH + {0xABA8, 0x54A7}, //1579 #CJK UNIFIED IDEOGRAPH + {0xABA9, 0x54BF}, //1580 #CJK UNIFIED IDEOGRAPH + {0xABAA, 0x56FF}, //1581 #CJK UNIFIED IDEOGRAPH + {0xABAB, 0x5782}, //1582 #CJK UNIFIED IDEOGRAPH + {0xABAC, 0x578B}, //1583 #CJK UNIFIED IDEOGRAPH + {0xABAD, 0x57A0}, //1584 #CJK UNIFIED IDEOGRAPH + {0xABAE, 0x57A3}, //1585 #CJK UNIFIED IDEOGRAPH + {0xABAF, 0x57A2}, //1586 #CJK UNIFIED IDEOGRAPH + {0xABB0, 0x57CE}, //1587 #CJK UNIFIED IDEOGRAPH + {0xABB1, 0x57AE}, //1588 #CJK UNIFIED IDEOGRAPH + {0xABB2, 0x5793}, //1589 #CJK UNIFIED IDEOGRAPH + {0xABB3, 0x5955}, //1590 #CJK UNIFIED IDEOGRAPH + {0xABB4, 0x5951}, //1591 #CJK UNIFIED IDEOGRAPH + {0xABB5, 0x594F}, //1592 #CJK UNIFIED IDEOGRAPH + {0xABB6, 0x594E}, //1593 #CJK UNIFIED IDEOGRAPH + {0xABB7, 0x5950}, //1594 #CJK UNIFIED IDEOGRAPH + {0xABB8, 0x59DC}, //1595 #CJK UNIFIED IDEOGRAPH + {0xABB9, 0x59D8}, //1596 #CJK UNIFIED IDEOGRAPH + {0xABBA, 0x59FF}, //1597 #CJK UNIFIED IDEOGRAPH + {0xABBB, 0x59E3}, //1598 #CJK UNIFIED IDEOGRAPH + {0xABBC, 0x59E8}, //1599 #CJK UNIFIED IDEOGRAPH + {0xABBD, 0x5A03}, //1600 #CJK UNIFIED IDEOGRAPH + {0xABBE, 0x59E5}, //1601 #CJK UNIFIED IDEOGRAPH + {0xABBF, 0x59EA}, //1602 #CJK UNIFIED IDEOGRAPH + {0xABC0, 0x59DA}, //1603 #CJK UNIFIED IDEOGRAPH + {0xABC1, 0x59E6}, //1604 #CJK UNIFIED IDEOGRAPH + {0xABC2, 0x5A01}, //1605 #CJK UNIFIED IDEOGRAPH + {0xABC3, 0x59FB}, //1606 #CJK UNIFIED IDEOGRAPH + {0xABC4, 0x5B69}, //1607 #CJK UNIFIED IDEOGRAPH + {0xABC5, 0x5BA3}, //1608 #CJK UNIFIED IDEOGRAPH + {0xABC6, 0x5BA6}, //1609 #CJK UNIFIED IDEOGRAPH + {0xABC7, 0x5BA4}, //1610 #CJK UNIFIED IDEOGRAPH + {0xABC8, 0x5BA2}, //1611 #CJK UNIFIED IDEOGRAPH + {0xABC9, 0x5BA5}, //1612 #CJK UNIFIED IDEOGRAPH + {0xABCA, 0x5C01}, //1613 #CJK UNIFIED IDEOGRAPH + {0xABCB, 0x5C4E}, //1614 #CJK UNIFIED IDEOGRAPH + {0xABCC, 0x5C4F}, //1615 #CJK UNIFIED IDEOGRAPH + {0xABCD, 0x5C4D}, //1616 #CJK UNIFIED IDEOGRAPH + {0xABCE, 0x5C4B}, //1617 #CJK UNIFIED IDEOGRAPH + {0xABCF, 0x5CD9}, //1618 #CJK UNIFIED IDEOGRAPH + {0xABD0, 0x5CD2}, //1619 #CJK UNIFIED IDEOGRAPH + {0xABD1, 0x5DF7}, //1620 #CJK UNIFIED IDEOGRAPH + {0xABD2, 0x5E1D}, //1621 #CJK UNIFIED IDEOGRAPH + {0xABD3, 0x5E25}, //1622 #CJK UNIFIED IDEOGRAPH + {0xABD4, 0x5E1F}, //1623 #CJK UNIFIED IDEOGRAPH + {0xABD5, 0x5E7D}, //1624 #CJK UNIFIED IDEOGRAPH + {0xABD6, 0x5EA0}, //1625 #CJK UNIFIED IDEOGRAPH + {0xABD7, 0x5EA6}, //1626 #CJK UNIFIED IDEOGRAPH + {0xABD8, 0x5EFA}, //1627 #CJK UNIFIED IDEOGRAPH + {0xABD9, 0x5F08}, //1628 #CJK UNIFIED IDEOGRAPH + {0xABDA, 0x5F2D}, //1629 #CJK UNIFIED IDEOGRAPH + {0xABDB, 0x5F65}, //1630 #CJK UNIFIED IDEOGRAPH + {0xABDC, 0x5F88}, //1631 #CJK UNIFIED IDEOGRAPH + {0xABDD, 0x5F85}, //1632 #CJK UNIFIED IDEOGRAPH + {0xABDE, 0x5F8A}, //1633 #CJK UNIFIED IDEOGRAPH + {0xABDF, 0x5F8B}, //1634 #CJK UNIFIED IDEOGRAPH + {0xABE0, 0x5F87}, //1635 #CJK UNIFIED IDEOGRAPH + {0xABE1, 0x5F8C}, //1636 #CJK UNIFIED IDEOGRAPH + {0xABE2, 0x5F89}, //1637 #CJK UNIFIED IDEOGRAPH + {0xABE3, 0x6012}, //1638 #CJK UNIFIED IDEOGRAPH + {0xABE4, 0x601D}, //1639 #CJK UNIFIED IDEOGRAPH + {0xABE5, 0x6020}, //1640 #CJK UNIFIED IDEOGRAPH + {0xABE6, 0x6025}, //1641 #CJK UNIFIED IDEOGRAPH + {0xABE7, 0x600E}, //1642 #CJK UNIFIED IDEOGRAPH + {0xABE8, 0x6028}, //1643 #CJK UNIFIED IDEOGRAPH + {0xABE9, 0x604D}, //1644 #CJK UNIFIED IDEOGRAPH + {0xABEA, 0x6070}, //1645 #CJK UNIFIED IDEOGRAPH + {0xABEB, 0x6068}, //1646 #CJK UNIFIED IDEOGRAPH + {0xABEC, 0x6062}, //1647 #CJK UNIFIED IDEOGRAPH + {0xABED, 0x6046}, //1648 #CJK UNIFIED IDEOGRAPH + {0xABEE, 0x6043}, //1649 #CJK UNIFIED IDEOGRAPH + {0xABEF, 0x606C}, //1650 #CJK UNIFIED IDEOGRAPH + {0xABF0, 0x606B}, //1651 #CJK UNIFIED IDEOGRAPH + {0xABF1, 0x606A}, //1652 #CJK UNIFIED IDEOGRAPH + {0xABF2, 0x6064}, //1653 #CJK UNIFIED IDEOGRAPH + {0xABF3, 0x6241}, //1654 #CJK UNIFIED IDEOGRAPH + {0xABF4, 0x62DC}, //1655 #CJK UNIFIED IDEOGRAPH + {0xABF5, 0x6316}, //1656 #CJK UNIFIED IDEOGRAPH + {0xABF6, 0x6309}, //1657 #CJK UNIFIED IDEOGRAPH + {0xABF7, 0x62FC}, //1658 #CJK UNIFIED IDEOGRAPH + {0xABF8, 0x62ED}, //1659 #CJK UNIFIED IDEOGRAPH + {0xABF9, 0x6301}, //1660 #CJK UNIFIED IDEOGRAPH + {0xABFA, 0x62EE}, //1661 #CJK UNIFIED IDEOGRAPH + {0xABFB, 0x62FD}, //1662 #CJK UNIFIED IDEOGRAPH + {0xABFC, 0x6307}, //1663 #CJK UNIFIED IDEOGRAPH + {0xABFD, 0x62F1}, //1664 #CJK UNIFIED IDEOGRAPH + {0xABFE, 0x62F7}, //1665 #CJK UNIFIED IDEOGRAPH + {0xAC40, 0x62EF}, //1666 #CJK UNIFIED IDEOGRAPH + {0xAC41, 0x62EC}, //1667 #CJK UNIFIED IDEOGRAPH + {0xAC42, 0x62FE}, //1668 #CJK UNIFIED IDEOGRAPH + {0xAC43, 0x62F4}, //1669 #CJK UNIFIED IDEOGRAPH + {0xAC44, 0x6311}, //1670 #CJK UNIFIED IDEOGRAPH + {0xAC45, 0x6302}, //1671 #CJK UNIFIED IDEOGRAPH + {0xAC46, 0x653F}, //1672 #CJK UNIFIED IDEOGRAPH + {0xAC47, 0x6545}, //1673 #CJK UNIFIED IDEOGRAPH + {0xAC48, 0x65AB}, //1674 #CJK UNIFIED IDEOGRAPH + {0xAC49, 0x65BD}, //1675 #CJK UNIFIED IDEOGRAPH + {0xAC4A, 0x65E2}, //1676 #CJK UNIFIED IDEOGRAPH + {0xAC4B, 0x6625}, //1677 #CJK UNIFIED IDEOGRAPH + {0xAC4C, 0x662D}, //1678 #CJK UNIFIED IDEOGRAPH + {0xAC4D, 0x6620}, //1679 #CJK UNIFIED IDEOGRAPH + {0xAC4E, 0x6627}, //1680 #CJK UNIFIED IDEOGRAPH + {0xAC4F, 0x662F}, //1681 #CJK UNIFIED IDEOGRAPH + {0xAC50, 0x661F}, //1682 #CJK UNIFIED IDEOGRAPH + {0xAC51, 0x6628}, //1683 #CJK UNIFIED IDEOGRAPH + {0xAC52, 0x6631}, //1684 #CJK UNIFIED IDEOGRAPH + {0xAC53, 0x6624}, //1685 #CJK UNIFIED IDEOGRAPH + {0xAC54, 0x66F7}, //1686 #CJK UNIFIED IDEOGRAPH + {0xAC55, 0x67FF}, //1687 #CJK UNIFIED IDEOGRAPH + {0xAC56, 0x67D3}, //1688 #CJK UNIFIED IDEOGRAPH + {0xAC57, 0x67F1}, //1689 #CJK UNIFIED IDEOGRAPH + {0xAC58, 0x67D4}, //1690 #CJK UNIFIED IDEOGRAPH + {0xAC59, 0x67D0}, //1691 #CJK UNIFIED IDEOGRAPH + {0xAC5A, 0x67EC}, //1692 #CJK UNIFIED IDEOGRAPH + {0xAC5B, 0x67B6}, //1693 #CJK UNIFIED IDEOGRAPH + {0xAC5C, 0x67AF}, //1694 #CJK UNIFIED IDEOGRAPH + {0xAC5D, 0x67F5}, //1695 #CJK UNIFIED IDEOGRAPH + {0xAC5E, 0x67E9}, //1696 #CJK UNIFIED IDEOGRAPH + {0xAC5F, 0x67EF}, //1697 #CJK UNIFIED IDEOGRAPH + {0xAC60, 0x67C4}, //1698 #CJK UNIFIED IDEOGRAPH + {0xAC61, 0x67D1}, //1699 #CJK UNIFIED IDEOGRAPH + {0xAC62, 0x67B4}, //1700 #CJK UNIFIED IDEOGRAPH + {0xAC63, 0x67DA}, //1701 #CJK UNIFIED IDEOGRAPH + {0xAC64, 0x67E5}, //1702 #CJK UNIFIED IDEOGRAPH + {0xAC65, 0x67B8}, //1703 #CJK UNIFIED IDEOGRAPH + {0xAC66, 0x67CF}, //1704 #CJK UNIFIED IDEOGRAPH + {0xAC67, 0x67DE}, //1705 #CJK UNIFIED IDEOGRAPH + {0xAC68, 0x67F3}, //1706 #CJK UNIFIED IDEOGRAPH + {0xAC69, 0x67B0}, //1707 #CJK UNIFIED IDEOGRAPH + {0xAC6A, 0x67D9}, //1708 #CJK UNIFIED IDEOGRAPH + {0xAC6B, 0x67E2}, //1709 #CJK UNIFIED IDEOGRAPH + {0xAC6C, 0x67DD}, //1710 #CJK UNIFIED IDEOGRAPH + {0xAC6D, 0x67D2}, //1711 #CJK UNIFIED IDEOGRAPH + {0xAC6E, 0x6B6A}, //1712 #CJK UNIFIED IDEOGRAPH + {0xAC6F, 0x6B83}, //1713 #CJK UNIFIED IDEOGRAPH + {0xAC70, 0x6B86}, //1714 #CJK UNIFIED IDEOGRAPH + {0xAC71, 0x6BB5}, //1715 #CJK UNIFIED IDEOGRAPH + {0xAC72, 0x6BD2}, //1716 #CJK UNIFIED IDEOGRAPH + {0xAC73, 0x6BD7}, //1717 #CJK UNIFIED IDEOGRAPH + {0xAC74, 0x6C1F}, //1718 #CJK UNIFIED IDEOGRAPH + {0xAC75, 0x6CC9}, //1719 #CJK UNIFIED IDEOGRAPH + {0xAC76, 0x6D0B}, //1720 #CJK UNIFIED IDEOGRAPH + {0xAC77, 0x6D32}, //1721 #CJK UNIFIED IDEOGRAPH + {0xAC78, 0x6D2A}, //1722 #CJK UNIFIED IDEOGRAPH + {0xAC79, 0x6D41}, //1723 #CJK UNIFIED IDEOGRAPH + {0xAC7A, 0x6D25}, //1724 #CJK UNIFIED IDEOGRAPH + {0xAC7B, 0x6D0C}, //1725 #CJK UNIFIED IDEOGRAPH + {0xAC7C, 0x6D31}, //1726 #CJK UNIFIED IDEOGRAPH + {0xAC7D, 0x6D1E}, //1727 #CJK UNIFIED IDEOGRAPH + {0xAC7E, 0x6D17}, //1728 #CJK UNIFIED IDEOGRAPH + {0xACA1, 0x6D3B}, //1729 #CJK UNIFIED IDEOGRAPH + {0xACA2, 0x6D3D}, //1730 #CJK UNIFIED IDEOGRAPH + {0xACA3, 0x6D3E}, //1731 #CJK UNIFIED IDEOGRAPH + {0xACA4, 0x6D36}, //1732 #CJK UNIFIED IDEOGRAPH + {0xACA5, 0x6D1B}, //1733 #CJK UNIFIED IDEOGRAPH + {0xACA6, 0x6CF5}, //1734 #CJK UNIFIED IDEOGRAPH + {0xACA7, 0x6D39}, //1735 #CJK UNIFIED IDEOGRAPH + {0xACA8, 0x6D27}, //1736 #CJK UNIFIED IDEOGRAPH + {0xACA9, 0x6D38}, //1737 #CJK UNIFIED IDEOGRAPH + {0xACAA, 0x6D29}, //1738 #CJK UNIFIED IDEOGRAPH + {0xACAB, 0x6D2E}, //1739 #CJK UNIFIED IDEOGRAPH + {0xACAC, 0x6D35}, //1740 #CJK UNIFIED IDEOGRAPH + {0xACAD, 0x6D0E}, //1741 #CJK UNIFIED IDEOGRAPH + {0xACAE, 0x6D2B}, //1742 #CJK UNIFIED IDEOGRAPH + {0xACAF, 0x70AB}, //1743 #CJK UNIFIED IDEOGRAPH + {0xACB0, 0x70BA}, //1744 #CJK UNIFIED IDEOGRAPH + {0xACB1, 0x70B3}, //1745 #CJK UNIFIED IDEOGRAPH + {0xACB2, 0x70AC}, //1746 #CJK UNIFIED IDEOGRAPH + {0xACB3, 0x70AF}, //1747 #CJK UNIFIED IDEOGRAPH + {0xACB4, 0x70AD}, //1748 #CJK UNIFIED IDEOGRAPH + {0xACB5, 0x70B8}, //1749 #CJK UNIFIED IDEOGRAPH + {0xACB6, 0x70AE}, //1750 #CJK UNIFIED IDEOGRAPH + {0xACB7, 0x70A4}, //1751 #CJK UNIFIED IDEOGRAPH + {0xACB8, 0x7230}, //1752 #CJK UNIFIED IDEOGRAPH + {0xACB9, 0x7272}, //1753 #CJK UNIFIED IDEOGRAPH + {0xACBA, 0x726F}, //1754 #CJK UNIFIED IDEOGRAPH + {0xACBB, 0x7274}, //1755 #CJK UNIFIED IDEOGRAPH + {0xACBC, 0x72E9}, //1756 #CJK UNIFIED IDEOGRAPH + {0xACBD, 0x72E0}, //1757 #CJK UNIFIED IDEOGRAPH + {0xACBE, 0x72E1}, //1758 #CJK UNIFIED IDEOGRAPH + {0xACBF, 0x73B7}, //1759 #CJK UNIFIED IDEOGRAPH + {0xACC0, 0x73CA}, //1760 #CJK UNIFIED IDEOGRAPH + {0xACC1, 0x73BB}, //1761 #CJK UNIFIED IDEOGRAPH + {0xACC2, 0x73B2}, //1762 #CJK UNIFIED IDEOGRAPH + {0xACC3, 0x73CD}, //1763 #CJK UNIFIED IDEOGRAPH + {0xACC4, 0x73C0}, //1764 #CJK UNIFIED IDEOGRAPH + {0xACC5, 0x73B3}, //1765 #CJK UNIFIED IDEOGRAPH + {0xACC6, 0x751A}, //1766 #CJK UNIFIED IDEOGRAPH + {0xACC7, 0x752D}, //1767 #CJK UNIFIED IDEOGRAPH + {0xACC8, 0x754F}, //1768 #CJK UNIFIED IDEOGRAPH + {0xACC9, 0x754C}, //1769 #CJK UNIFIED IDEOGRAPH + {0xACCA, 0x754E}, //1770 #CJK UNIFIED IDEOGRAPH + {0xACCB, 0x754B}, //1771 #CJK UNIFIED IDEOGRAPH + {0xACCC, 0x75AB}, //1772 #CJK UNIFIED IDEOGRAPH + {0xACCD, 0x75A4}, //1773 #CJK UNIFIED IDEOGRAPH + {0xACCE, 0x75A5}, //1774 #CJK UNIFIED IDEOGRAPH + {0xACCF, 0x75A2}, //1775 #CJK UNIFIED IDEOGRAPH + {0xACD0, 0x75A3}, //1776 #CJK UNIFIED IDEOGRAPH + {0xACD1, 0x7678}, //1777 #CJK UNIFIED IDEOGRAPH + {0xACD2, 0x7686}, //1778 #CJK UNIFIED IDEOGRAPH + {0xACD3, 0x7687}, //1779 #CJK UNIFIED IDEOGRAPH + {0xACD4, 0x7688}, //1780 #CJK UNIFIED IDEOGRAPH + {0xACD5, 0x76C8}, //1781 #CJK UNIFIED IDEOGRAPH + {0xACD6, 0x76C6}, //1782 #CJK UNIFIED IDEOGRAPH + {0xACD7, 0x76C3}, //1783 #CJK UNIFIED IDEOGRAPH + {0xACD8, 0x76C5}, //1784 #CJK UNIFIED IDEOGRAPH + {0xACD9, 0x7701}, //1785 #CJK UNIFIED IDEOGRAPH + {0xACDA, 0x76F9}, //1786 #CJK UNIFIED IDEOGRAPH + {0xACDB, 0x76F8}, //1787 #CJK UNIFIED IDEOGRAPH + {0xACDC, 0x7709}, //1788 #CJK UNIFIED IDEOGRAPH + {0xACDD, 0x770B}, //1789 #CJK UNIFIED IDEOGRAPH + {0xACDE, 0x76FE}, //1790 #CJK UNIFIED IDEOGRAPH + {0xACDF, 0x76FC}, //1791 #CJK UNIFIED IDEOGRAPH + {0xACE0, 0x7707}, //1792 #CJK UNIFIED IDEOGRAPH + {0xACE1, 0x77DC}, //1793 #CJK UNIFIED IDEOGRAPH + {0xACE2, 0x7802}, //1794 #CJK UNIFIED IDEOGRAPH + {0xACE3, 0x7814}, //1795 #CJK UNIFIED IDEOGRAPH + {0xACE4, 0x780C}, //1796 #CJK UNIFIED IDEOGRAPH + {0xACE5, 0x780D}, //1797 #CJK UNIFIED IDEOGRAPH + {0xACE6, 0x7946}, //1798 #CJK UNIFIED IDEOGRAPH + {0xACE7, 0x7949}, //1799 #CJK UNIFIED IDEOGRAPH + {0xACE8, 0x7948}, //1800 #CJK UNIFIED IDEOGRAPH + {0xACE9, 0x7947}, //1801 #CJK UNIFIED IDEOGRAPH + {0xACEA, 0x79B9}, //1802 #CJK UNIFIED IDEOGRAPH + {0xACEB, 0x79BA}, //1803 #CJK UNIFIED IDEOGRAPH + {0xACEC, 0x79D1}, //1804 #CJK UNIFIED IDEOGRAPH + {0xACED, 0x79D2}, //1805 #CJK UNIFIED IDEOGRAPH + {0xACEE, 0x79CB}, //1806 #CJK UNIFIED IDEOGRAPH + {0xACEF, 0x7A7F}, //1807 #CJK UNIFIED IDEOGRAPH + {0xACF0, 0x7A81}, //1808 #CJK UNIFIED IDEOGRAPH + {0xACF1, 0x7AFF}, //1809 #CJK UNIFIED IDEOGRAPH + {0xACF2, 0x7AFD}, //1810 #CJK UNIFIED IDEOGRAPH + {0xACF3, 0x7C7D}, //1811 #CJK UNIFIED IDEOGRAPH + {0xACF4, 0x7D02}, //1812 #CJK UNIFIED IDEOGRAPH + {0xACF5, 0x7D05}, //1813 #CJK UNIFIED IDEOGRAPH + {0xACF6, 0x7D00}, //1814 #CJK UNIFIED IDEOGRAPH + {0xACF7, 0x7D09}, //1815 #CJK UNIFIED IDEOGRAPH + {0xACF8, 0x7D07}, //1816 #CJK UNIFIED IDEOGRAPH + {0xACF9, 0x7D04}, //1817 #CJK UNIFIED IDEOGRAPH + {0xACFA, 0x7D06}, //1818 #CJK UNIFIED IDEOGRAPH + {0xACFB, 0x7F38}, //1819 #CJK UNIFIED IDEOGRAPH + {0xACFC, 0x7F8E}, //1820 #CJK UNIFIED IDEOGRAPH + {0xACFD, 0x7FBF}, //1821 #CJK UNIFIED IDEOGRAPH + {0xACFE, 0x8004}, //1822 #CJK UNIFIED IDEOGRAPH + {0xAD40, 0x8010}, //1823 #CJK UNIFIED IDEOGRAPH + {0xAD41, 0x800D}, //1824 #CJK UNIFIED IDEOGRAPH + {0xAD42, 0x8011}, //1825 #CJK UNIFIED IDEOGRAPH + {0xAD43, 0x8036}, //1826 #CJK UNIFIED IDEOGRAPH + {0xAD44, 0x80D6}, //1827 #CJK UNIFIED IDEOGRAPH + {0xAD45, 0x80E5}, //1828 #CJK UNIFIED IDEOGRAPH + {0xAD46, 0x80DA}, //1829 #CJK UNIFIED IDEOGRAPH + {0xAD47, 0x80C3}, //1830 #CJK UNIFIED IDEOGRAPH + {0xAD48, 0x80C4}, //1831 #CJK UNIFIED IDEOGRAPH + {0xAD49, 0x80CC}, //1832 #CJK UNIFIED IDEOGRAPH + {0xAD4A, 0x80E1}, //1833 #CJK UNIFIED IDEOGRAPH + {0xAD4B, 0x80DB}, //1834 #CJK UNIFIED IDEOGRAPH + {0xAD4C, 0x80CE}, //1835 #CJK UNIFIED IDEOGRAPH + {0xAD4D, 0x80DE}, //1836 #CJK UNIFIED IDEOGRAPH + {0xAD4E, 0x80E4}, //1837 #CJK UNIFIED IDEOGRAPH + {0xAD4F, 0x80DD}, //1838 #CJK UNIFIED IDEOGRAPH + {0xAD50, 0x81F4}, //1839 #CJK UNIFIED IDEOGRAPH + {0xAD51, 0x8222}, //1840 #CJK UNIFIED IDEOGRAPH + {0xAD52, 0x82E7}, //1841 #CJK UNIFIED IDEOGRAPH + {0xAD53, 0x8303}, //1842 #CJK UNIFIED IDEOGRAPH + {0xAD54, 0x8305}, //1843 #CJK UNIFIED IDEOGRAPH + {0xAD55, 0x82E3}, //1844 #CJK UNIFIED IDEOGRAPH + {0xAD56, 0x82DB}, //1845 #CJK UNIFIED IDEOGRAPH + {0xAD57, 0x82E6}, //1846 #CJK UNIFIED IDEOGRAPH + {0xAD58, 0x8304}, //1847 #CJK UNIFIED IDEOGRAPH + {0xAD59, 0x82E5}, //1848 #CJK UNIFIED IDEOGRAPH + {0xAD5A, 0x8302}, //1849 #CJK UNIFIED IDEOGRAPH + {0xAD5B, 0x8309}, //1850 #CJK UNIFIED IDEOGRAPH + {0xAD5C, 0x82D2}, //1851 #CJK UNIFIED IDEOGRAPH + {0xAD5D, 0x82D7}, //1852 #CJK UNIFIED IDEOGRAPH + {0xAD5E, 0x82F1}, //1853 #CJK UNIFIED IDEOGRAPH + {0xAD5F, 0x8301}, //1854 #CJK UNIFIED IDEOGRAPH + {0xAD60, 0x82DC}, //1855 #CJK UNIFIED IDEOGRAPH + {0xAD61, 0x82D4}, //1856 #CJK UNIFIED IDEOGRAPH + {0xAD62, 0x82D1}, //1857 #CJK UNIFIED IDEOGRAPH + {0xAD63, 0x82DE}, //1858 #CJK UNIFIED IDEOGRAPH + {0xAD64, 0x82D3}, //1859 #CJK UNIFIED IDEOGRAPH + {0xAD65, 0x82DF}, //1860 #CJK UNIFIED IDEOGRAPH + {0xAD66, 0x82EF}, //1861 #CJK UNIFIED IDEOGRAPH + {0xAD67, 0x8306}, //1862 #CJK UNIFIED IDEOGRAPH + {0xAD68, 0x8650}, //1863 #CJK UNIFIED IDEOGRAPH + {0xAD69, 0x8679}, //1864 #CJK UNIFIED IDEOGRAPH + {0xAD6A, 0x867B}, //1865 #CJK UNIFIED IDEOGRAPH + {0xAD6B, 0x867A}, //1866 #CJK UNIFIED IDEOGRAPH + {0xAD6C, 0x884D}, //1867 #CJK UNIFIED IDEOGRAPH + {0xAD6D, 0x886B}, //1868 #CJK UNIFIED IDEOGRAPH + {0xAD6E, 0x8981}, //1869 #CJK UNIFIED IDEOGRAPH + {0xAD6F, 0x89D4}, //1870 #CJK UNIFIED IDEOGRAPH + {0xAD70, 0x8A08}, //1871 #CJK UNIFIED IDEOGRAPH + {0xAD71, 0x8A02}, //1872 #CJK UNIFIED IDEOGRAPH + {0xAD72, 0x8A03}, //1873 #CJK UNIFIED IDEOGRAPH + {0xAD73, 0x8C9E}, //1874 #CJK UNIFIED IDEOGRAPH + {0xAD74, 0x8CA0}, //1875 #CJK UNIFIED IDEOGRAPH + {0xAD75, 0x8D74}, //1876 #CJK UNIFIED IDEOGRAPH + {0xAD76, 0x8D73}, //1877 #CJK UNIFIED IDEOGRAPH + {0xAD77, 0x8DB4}, //1878 #CJK UNIFIED IDEOGRAPH + {0xAD78, 0x8ECD}, //1879 #CJK UNIFIED IDEOGRAPH + {0xAD79, 0x8ECC}, //1880 #CJK UNIFIED IDEOGRAPH + {0xAD7A, 0x8FF0}, //1881 #CJK UNIFIED IDEOGRAPH + {0xAD7B, 0x8FE6}, //1882 #CJK UNIFIED IDEOGRAPH + {0xAD7C, 0x8FE2}, //1883 #CJK UNIFIED IDEOGRAPH + {0xAD7D, 0x8FEA}, //1884 #CJK UNIFIED IDEOGRAPH + {0xAD7E, 0x8FE5}, //1885 #CJK UNIFIED IDEOGRAPH + {0xADA1, 0x8FED}, //1886 #CJK UNIFIED IDEOGRAPH + {0xADA2, 0x8FEB}, //1887 #CJK UNIFIED IDEOGRAPH + {0xADA3, 0x8FE4}, //1888 #CJK UNIFIED IDEOGRAPH + {0xADA4, 0x8FE8}, //1889 #CJK UNIFIED IDEOGRAPH + {0xADA5, 0x90CA}, //1890 #CJK UNIFIED IDEOGRAPH + {0xADA6, 0x90CE}, //1891 #CJK UNIFIED IDEOGRAPH + {0xADA7, 0x90C1}, //1892 #CJK UNIFIED IDEOGRAPH + {0xADA8, 0x90C3}, //1893 #CJK UNIFIED IDEOGRAPH + {0xADA9, 0x914B}, //1894 #CJK UNIFIED IDEOGRAPH + {0xADAA, 0x914A}, //1895 #CJK UNIFIED IDEOGRAPH + {0xADAB, 0x91CD}, //1896 #CJK UNIFIED IDEOGRAPH + {0xADAC, 0x9582}, //1897 #CJK UNIFIED IDEOGRAPH + {0xADAD, 0x9650}, //1898 #CJK UNIFIED IDEOGRAPH + {0xADAE, 0x964B}, //1899 #CJK UNIFIED IDEOGRAPH + {0xADAF, 0x964C}, //1900 #CJK UNIFIED IDEOGRAPH + {0xADB0, 0x964D}, //1901 #CJK UNIFIED IDEOGRAPH + {0xADB1, 0x9762}, //1902 #CJK UNIFIED IDEOGRAPH + {0xADB2, 0x9769}, //1903 #CJK UNIFIED IDEOGRAPH + {0xADB3, 0x97CB}, //1904 #CJK UNIFIED IDEOGRAPH + {0xADB4, 0x97ED}, //1905 #CJK UNIFIED IDEOGRAPH + {0xADB5, 0x97F3}, //1906 #CJK UNIFIED IDEOGRAPH + {0xADB6, 0x9801}, //1907 #CJK UNIFIED IDEOGRAPH + {0xADB7, 0x98A8}, //1908 #CJK UNIFIED IDEOGRAPH + {0xADB8, 0x98DB}, //1909 #CJK UNIFIED IDEOGRAPH + {0xADB9, 0x98DF}, //1910 #CJK UNIFIED IDEOGRAPH + {0xADBA, 0x9996}, //1911 #CJK UNIFIED IDEOGRAPH + {0xADBB, 0x9999}, //1912 #CJK UNIFIED IDEOGRAPH + {0xADBC, 0x4E58}, //1913 #CJK UNIFIED IDEOGRAPH + {0xADBD, 0x4EB3}, //1914 #CJK UNIFIED IDEOGRAPH + {0xADBE, 0x500C}, //1915 #CJK UNIFIED IDEOGRAPH + {0xADBF, 0x500D}, //1916 #CJK UNIFIED IDEOGRAPH + {0xADC0, 0x5023}, //1917 #CJK UNIFIED IDEOGRAPH + {0xADC1, 0x4FEF}, //1918 #CJK UNIFIED IDEOGRAPH + {0xADC2, 0x5026}, //1919 #CJK UNIFIED IDEOGRAPH + {0xADC3, 0x5025}, //1920 #CJK UNIFIED IDEOGRAPH + {0xADC4, 0x4FF8}, //1921 #CJK UNIFIED IDEOGRAPH + {0xADC5, 0x5029}, //1922 #CJK UNIFIED IDEOGRAPH + {0xADC6, 0x5016}, //1923 #CJK UNIFIED IDEOGRAPH + {0xADC7, 0x5006}, //1924 #CJK UNIFIED IDEOGRAPH + {0xADC8, 0x503C}, //1925 #CJK UNIFIED IDEOGRAPH + {0xADC9, 0x501F}, //1926 #CJK UNIFIED IDEOGRAPH + {0xADCA, 0x501A}, //1927 #CJK UNIFIED IDEOGRAPH + {0xADCB, 0x5012}, //1928 #CJK UNIFIED IDEOGRAPH + {0xADCC, 0x5011}, //1929 #CJK UNIFIED IDEOGRAPH + {0xADCD, 0x4FFA}, //1930 #CJK UNIFIED IDEOGRAPH + {0xADCE, 0x5000}, //1931 #CJK UNIFIED IDEOGRAPH + {0xADCF, 0x5014}, //1932 #CJK UNIFIED IDEOGRAPH + {0xADD0, 0x5028}, //1933 #CJK UNIFIED IDEOGRAPH + {0xADD1, 0x4FF1}, //1934 #CJK UNIFIED IDEOGRAPH + {0xADD2, 0x5021}, //1935 #CJK UNIFIED IDEOGRAPH + {0xADD3, 0x500B}, //1936 #CJK UNIFIED IDEOGRAPH + {0xADD4, 0x5019}, //1937 #CJK UNIFIED IDEOGRAPH + {0xADD5, 0x5018}, //1938 #CJK UNIFIED IDEOGRAPH + {0xADD6, 0x4FF3}, //1939 #CJK UNIFIED IDEOGRAPH + {0xADD7, 0x4FEE}, //1940 #CJK UNIFIED IDEOGRAPH + {0xADD8, 0x502D}, //1941 #CJK UNIFIED IDEOGRAPH + {0xADD9, 0x502A}, //1942 #CJK UNIFIED IDEOGRAPH + {0xADDA, 0x4FFE}, //1943 #CJK UNIFIED IDEOGRAPH + {0xADDB, 0x502B}, //1944 #CJK UNIFIED IDEOGRAPH + {0xADDC, 0x5009}, //1945 #CJK UNIFIED IDEOGRAPH + {0xADDD, 0x517C}, //1946 #CJK UNIFIED IDEOGRAPH + {0xADDE, 0x51A4}, //1947 #CJK UNIFIED IDEOGRAPH + {0xADDF, 0x51A5}, //1948 #CJK UNIFIED IDEOGRAPH + {0xADE0, 0x51A2}, //1949 #CJK UNIFIED IDEOGRAPH + {0xADE1, 0x51CD}, //1950 #CJK UNIFIED IDEOGRAPH + {0xADE2, 0x51CC}, //1951 #CJK UNIFIED IDEOGRAPH + {0xADE3, 0x51C6}, //1952 #CJK UNIFIED IDEOGRAPH + {0xADE4, 0x51CB}, //1953 #CJK UNIFIED IDEOGRAPH + {0xADE5, 0x5256}, //1954 #CJK UNIFIED IDEOGRAPH + {0xADE6, 0x525C}, //1955 #CJK UNIFIED IDEOGRAPH + {0xADE7, 0x5254}, //1956 #CJK UNIFIED IDEOGRAPH + {0xADE8, 0x525B}, //1957 #CJK UNIFIED IDEOGRAPH + {0xADE9, 0x525D}, //1958 #CJK UNIFIED IDEOGRAPH + {0xADEA, 0x532A}, //1959 #CJK UNIFIED IDEOGRAPH + {0xADEB, 0x537F}, //1960 #CJK UNIFIED IDEOGRAPH + {0xADEC, 0x539F}, //1961 #CJK UNIFIED IDEOGRAPH + {0xADED, 0x539D}, //1962 #CJK UNIFIED IDEOGRAPH + {0xADEE, 0x53DF}, //1963 #CJK UNIFIED IDEOGRAPH + {0xADEF, 0x54E8}, //1964 #CJK UNIFIED IDEOGRAPH + {0xADF0, 0x5510}, //1965 #CJK UNIFIED IDEOGRAPH + {0xADF1, 0x5501}, //1966 #CJK UNIFIED IDEOGRAPH + {0xADF2, 0x5537}, //1967 #CJK UNIFIED IDEOGRAPH + {0xADF3, 0x54FC}, //1968 #CJK UNIFIED IDEOGRAPH + {0xADF4, 0x54E5}, //1969 #CJK UNIFIED IDEOGRAPH + {0xADF5, 0x54F2}, //1970 #CJK UNIFIED IDEOGRAPH + {0xADF6, 0x5506}, //1971 #CJK UNIFIED IDEOGRAPH + {0xADF7, 0x54FA}, //1972 #CJK UNIFIED IDEOGRAPH + {0xADF8, 0x5514}, //1973 #CJK UNIFIED IDEOGRAPH + {0xADF9, 0x54E9}, //1974 #CJK UNIFIED IDEOGRAPH + {0xADFA, 0x54ED}, //1975 #CJK UNIFIED IDEOGRAPH + {0xADFB, 0x54E1}, //1976 #CJK UNIFIED IDEOGRAPH + {0xADFC, 0x5509}, //1977 #CJK UNIFIED IDEOGRAPH + {0xADFD, 0x54EE}, //1978 #CJK UNIFIED IDEOGRAPH + {0xADFE, 0x54EA}, //1979 #CJK UNIFIED IDEOGRAPH + {0xAE40, 0x54E6}, //1980 #CJK UNIFIED IDEOGRAPH + {0xAE41, 0x5527}, //1981 #CJK UNIFIED IDEOGRAPH + {0xAE42, 0x5507}, //1982 #CJK UNIFIED IDEOGRAPH + {0xAE43, 0x54FD}, //1983 #CJK UNIFIED IDEOGRAPH + {0xAE44, 0x550F}, //1984 #CJK UNIFIED IDEOGRAPH + {0xAE45, 0x5703}, //1985 #CJK UNIFIED IDEOGRAPH + {0xAE46, 0x5704}, //1986 #CJK UNIFIED IDEOGRAPH + {0xAE47, 0x57C2}, //1987 #CJK UNIFIED IDEOGRAPH + {0xAE48, 0x57D4}, //1988 #CJK UNIFIED IDEOGRAPH + {0xAE49, 0x57CB}, //1989 #CJK UNIFIED IDEOGRAPH + {0xAE4A, 0x57C3}, //1990 #CJK UNIFIED IDEOGRAPH + {0xAE4B, 0x5809}, //1991 #CJK UNIFIED IDEOGRAPH + {0xAE4C, 0x590F}, //1992 #CJK UNIFIED IDEOGRAPH + {0xAE4D, 0x5957}, //1993 #CJK UNIFIED IDEOGRAPH + {0xAE4E, 0x5958}, //1994 #CJK UNIFIED IDEOGRAPH + {0xAE4F, 0x595A}, //1995 #CJK UNIFIED IDEOGRAPH + {0xAE50, 0x5A11}, //1996 #CJK UNIFIED IDEOGRAPH + {0xAE51, 0x5A18}, //1997 #CJK UNIFIED IDEOGRAPH + {0xAE52, 0x5A1C}, //1998 #CJK UNIFIED IDEOGRAPH + {0xAE53, 0x5A1F}, //1999 #CJK UNIFIED IDEOGRAPH + {0xAE54, 0x5A1B}, //2000 #CJK UNIFIED IDEOGRAPH + {0xAE55, 0x5A13}, //2001 #CJK UNIFIED IDEOGRAPH + {0xAE56, 0x59EC}, //2002 #CJK UNIFIED IDEOGRAPH + {0xAE57, 0x5A20}, //2003 #CJK UNIFIED IDEOGRAPH + {0xAE58, 0x5A23}, //2004 #CJK UNIFIED IDEOGRAPH + {0xAE59, 0x5A29}, //2005 #CJK UNIFIED IDEOGRAPH + {0xAE5A, 0x5A25}, //2006 #CJK UNIFIED IDEOGRAPH + {0xAE5B, 0x5A0C}, //2007 #CJK UNIFIED IDEOGRAPH + {0xAE5C, 0x5A09}, //2008 #CJK UNIFIED IDEOGRAPH + {0xAE5D, 0x5B6B}, //2009 #CJK UNIFIED IDEOGRAPH + {0xAE5E, 0x5C58}, //2010 #CJK UNIFIED IDEOGRAPH + {0xAE5F, 0x5BB0}, //2011 #CJK UNIFIED IDEOGRAPH + {0xAE60, 0x5BB3}, //2012 #CJK UNIFIED IDEOGRAPH + {0xAE61, 0x5BB6}, //2013 #CJK UNIFIED IDEOGRAPH + {0xAE62, 0x5BB4}, //2014 #CJK UNIFIED IDEOGRAPH + {0xAE63, 0x5BAE}, //2015 #CJK UNIFIED IDEOGRAPH + {0xAE64, 0x5BB5}, //2016 #CJK UNIFIED IDEOGRAPH + {0xAE65, 0x5BB9}, //2017 #CJK UNIFIED IDEOGRAPH + {0xAE66, 0x5BB8}, //2018 #CJK UNIFIED IDEOGRAPH + {0xAE67, 0x5C04}, //2019 #CJK UNIFIED IDEOGRAPH + {0xAE68, 0x5C51}, //2020 #CJK UNIFIED IDEOGRAPH + {0xAE69, 0x5C55}, //2021 #CJK UNIFIED IDEOGRAPH + {0xAE6A, 0x5C50}, //2022 #CJK UNIFIED IDEOGRAPH + {0xAE6B, 0x5CED}, //2023 #CJK UNIFIED IDEOGRAPH + {0xAE6C, 0x5CFD}, //2024 #CJK UNIFIED IDEOGRAPH + {0xAE6D, 0x5CFB}, //2025 #CJK UNIFIED IDEOGRAPH + {0xAE6E, 0x5CEA}, //2026 #CJK UNIFIED IDEOGRAPH + {0xAE6F, 0x5CE8}, //2027 #CJK UNIFIED IDEOGRAPH + {0xAE70, 0x5CF0}, //2028 #CJK UNIFIED IDEOGRAPH + {0xAE71, 0x5CF6}, //2029 #CJK UNIFIED IDEOGRAPH + {0xAE72, 0x5D01}, //2030 #CJK UNIFIED IDEOGRAPH + {0xAE73, 0x5CF4}, //2031 #CJK UNIFIED IDEOGRAPH + {0xAE74, 0x5DEE}, //2032 #CJK UNIFIED IDEOGRAPH + {0xAE75, 0x5E2D}, //2033 #CJK UNIFIED IDEOGRAPH + {0xAE76, 0x5E2B}, //2034 #CJK UNIFIED IDEOGRAPH + {0xAE77, 0x5EAB}, //2035 #CJK UNIFIED IDEOGRAPH + {0xAE78, 0x5EAD}, //2036 #CJK UNIFIED IDEOGRAPH + {0xAE79, 0x5EA7}, //2037 #CJK UNIFIED IDEOGRAPH + {0xAE7A, 0x5F31}, //2038 #CJK UNIFIED IDEOGRAPH + {0xAE7B, 0x5F92}, //2039 #CJK UNIFIED IDEOGRAPH + {0xAE7C, 0x5F91}, //2040 #CJK UNIFIED IDEOGRAPH + {0xAE7D, 0x5F90}, //2041 #CJK UNIFIED IDEOGRAPH + {0xAE7E, 0x6059}, //2042 #CJK UNIFIED IDEOGRAPH + {0xAEA1, 0x6063}, //2043 #CJK UNIFIED IDEOGRAPH + {0xAEA2, 0x6065}, //2044 #CJK UNIFIED IDEOGRAPH + {0xAEA3, 0x6050}, //2045 #CJK UNIFIED IDEOGRAPH + {0xAEA4, 0x6055}, //2046 #CJK UNIFIED IDEOGRAPH + {0xAEA5, 0x606D}, //2047 #CJK UNIFIED IDEOGRAPH + {0xAEA6, 0x6069}, //2048 #CJK UNIFIED IDEOGRAPH + {0xAEA7, 0x606F}, //2049 #CJK UNIFIED IDEOGRAPH + {0xAEA8, 0x6084}, //2050 #CJK UNIFIED IDEOGRAPH + {0xAEA9, 0x609F}, //2051 #CJK UNIFIED IDEOGRAPH + {0xAEAA, 0x609A}, //2052 #CJK UNIFIED IDEOGRAPH + {0xAEAB, 0x608D}, //2053 #CJK UNIFIED IDEOGRAPH + {0xAEAC, 0x6094}, //2054 #CJK UNIFIED IDEOGRAPH + {0xAEAD, 0x608C}, //2055 #CJK UNIFIED IDEOGRAPH + {0xAEAE, 0x6085}, //2056 #CJK UNIFIED IDEOGRAPH + {0xAEAF, 0x6096}, //2057 #CJK UNIFIED IDEOGRAPH + {0xAEB0, 0x6247}, //2058 #CJK UNIFIED IDEOGRAPH + {0xAEB1, 0x62F3}, //2059 #CJK UNIFIED IDEOGRAPH + {0xAEB2, 0x6308}, //2060 #CJK UNIFIED IDEOGRAPH + {0xAEB3, 0x62FF}, //2061 #CJK UNIFIED IDEOGRAPH + {0xAEB4, 0x634E}, //2062 #CJK UNIFIED IDEOGRAPH + {0xAEB5, 0x633E}, //2063 #CJK UNIFIED IDEOGRAPH + {0xAEB6, 0x632F}, //2064 #CJK UNIFIED IDEOGRAPH + {0xAEB7, 0x6355}, //2065 #CJK UNIFIED IDEOGRAPH + {0xAEB8, 0x6342}, //2066 #CJK UNIFIED IDEOGRAPH + {0xAEB9, 0x6346}, //2067 #CJK UNIFIED IDEOGRAPH + {0xAEBA, 0x634F}, //2068 #CJK UNIFIED IDEOGRAPH + {0xAEBB, 0x6349}, //2069 #CJK UNIFIED IDEOGRAPH + {0xAEBC, 0x633A}, //2070 #CJK UNIFIED IDEOGRAPH + {0xAEBD, 0x6350}, //2071 #CJK UNIFIED IDEOGRAPH + {0xAEBE, 0x633D}, //2072 #CJK UNIFIED IDEOGRAPH + {0xAEBF, 0x632A}, //2073 #CJK UNIFIED IDEOGRAPH + {0xAEC0, 0x632B}, //2074 #CJK UNIFIED IDEOGRAPH + {0xAEC1, 0x6328}, //2075 #CJK UNIFIED IDEOGRAPH + {0xAEC2, 0x634D}, //2076 #CJK UNIFIED IDEOGRAPH + {0xAEC3, 0x634C}, //2077 #CJK UNIFIED IDEOGRAPH + {0xAEC4, 0x6548}, //2078 #CJK UNIFIED IDEOGRAPH + {0xAEC5, 0x6549}, //2079 #CJK UNIFIED IDEOGRAPH + {0xAEC6, 0x6599}, //2080 #CJK UNIFIED IDEOGRAPH + {0xAEC7, 0x65C1}, //2081 #CJK UNIFIED IDEOGRAPH + {0xAEC8, 0x65C5}, //2082 #CJK UNIFIED IDEOGRAPH + {0xAEC9, 0x6642}, //2083 #CJK UNIFIED IDEOGRAPH + {0xAECA, 0x6649}, //2084 #CJK UNIFIED IDEOGRAPH + {0xAECB, 0x664F}, //2085 #CJK UNIFIED IDEOGRAPH + {0xAECC, 0x6643}, //2086 #CJK UNIFIED IDEOGRAPH + {0xAECD, 0x6652}, //2087 #CJK UNIFIED IDEOGRAPH + {0xAECE, 0x664C}, //2088 #CJK UNIFIED IDEOGRAPH + {0xAECF, 0x6645}, //2089 #CJK UNIFIED IDEOGRAPH + {0xAED0, 0x6641}, //2090 #CJK UNIFIED IDEOGRAPH + {0xAED1, 0x66F8}, //2091 #CJK UNIFIED IDEOGRAPH + {0xAED2, 0x6714}, //2092 #CJK UNIFIED IDEOGRAPH + {0xAED3, 0x6715}, //2093 #CJK UNIFIED IDEOGRAPH + {0xAED4, 0x6717}, //2094 #CJK UNIFIED IDEOGRAPH + {0xAED5, 0x6821}, //2095 #CJK UNIFIED IDEOGRAPH + {0xAED6, 0x6838}, //2096 #CJK UNIFIED IDEOGRAPH + {0xAED7, 0x6848}, //2097 #CJK UNIFIED IDEOGRAPH + {0xAED8, 0x6846}, //2098 #CJK UNIFIED IDEOGRAPH + {0xAED9, 0x6853}, //2099 #CJK UNIFIED IDEOGRAPH + {0xAEDA, 0x6839}, //2100 #CJK UNIFIED IDEOGRAPH + {0xAEDB, 0x6842}, //2101 #CJK UNIFIED IDEOGRAPH + {0xAEDC, 0x6854}, //2102 #CJK UNIFIED IDEOGRAPH + {0xAEDD, 0x6829}, //2103 #CJK UNIFIED IDEOGRAPH + {0xAEDE, 0x68B3}, //2104 #CJK UNIFIED IDEOGRAPH + {0xAEDF, 0x6817}, //2105 #CJK UNIFIED IDEOGRAPH + {0xAEE0, 0x684C}, //2106 #CJK UNIFIED IDEOGRAPH + {0xAEE1, 0x6851}, //2107 #CJK UNIFIED IDEOGRAPH + {0xAEE2, 0x683D}, //2108 #CJK UNIFIED IDEOGRAPH + {0xAEE3, 0x67F4}, //2109 #CJK UNIFIED IDEOGRAPH + {0xAEE4, 0x6850}, //2110 #CJK UNIFIED IDEOGRAPH + {0xAEE5, 0x6840}, //2111 #CJK UNIFIED IDEOGRAPH + {0xAEE6, 0x683C}, //2112 #CJK UNIFIED IDEOGRAPH + {0xAEE7, 0x6843}, //2113 #CJK UNIFIED IDEOGRAPH + {0xAEE8, 0x682A}, //2114 #CJK UNIFIED IDEOGRAPH + {0xAEE9, 0x6845}, //2115 #CJK UNIFIED IDEOGRAPH + {0xAEEA, 0x6813}, //2116 #CJK UNIFIED IDEOGRAPH + {0xAEEB, 0x6818}, //2117 #CJK UNIFIED IDEOGRAPH + {0xAEEC, 0x6841}, //2118 #CJK UNIFIED IDEOGRAPH + {0xAEED, 0x6B8A}, //2119 #CJK UNIFIED IDEOGRAPH + {0xAEEE, 0x6B89}, //2120 #CJK UNIFIED IDEOGRAPH + {0xAEEF, 0x6BB7}, //2121 #CJK UNIFIED IDEOGRAPH + {0xAEF0, 0x6C23}, //2122 #CJK UNIFIED IDEOGRAPH + {0xAEF1, 0x6C27}, //2123 #CJK UNIFIED IDEOGRAPH + {0xAEF2, 0x6C28}, //2124 #CJK UNIFIED IDEOGRAPH + {0xAEF3, 0x6C26}, //2125 #CJK UNIFIED IDEOGRAPH + {0xAEF4, 0x6C24}, //2126 #CJK UNIFIED IDEOGRAPH + {0xAEF5, 0x6CF0}, //2127 #CJK UNIFIED IDEOGRAPH + {0xAEF6, 0x6D6A}, //2128 #CJK UNIFIED IDEOGRAPH + {0xAEF7, 0x6D95}, //2129 #CJK UNIFIED IDEOGRAPH + {0xAEF8, 0x6D88}, //2130 #CJK UNIFIED IDEOGRAPH + {0xAEF9, 0x6D87}, //2131 #CJK UNIFIED IDEOGRAPH + {0xAEFA, 0x6D66}, //2132 #CJK UNIFIED IDEOGRAPH + {0xAEFB, 0x6D78}, //2133 #CJK UNIFIED IDEOGRAPH + {0xAEFC, 0x6D77}, //2134 #CJK UNIFIED IDEOGRAPH + {0xAEFD, 0x6D59}, //2135 #CJK UNIFIED IDEOGRAPH + {0xAEFE, 0x6D93}, //2136 #CJK UNIFIED IDEOGRAPH + {0xAF40, 0x6D6C}, //2137 #CJK UNIFIED IDEOGRAPH + {0xAF41, 0x6D89}, //2138 #CJK UNIFIED IDEOGRAPH + {0xAF42, 0x6D6E}, //2139 #CJK UNIFIED IDEOGRAPH + {0xAF43, 0x6D5A}, //2140 #CJK UNIFIED IDEOGRAPH + {0xAF44, 0x6D74}, //2141 #CJK UNIFIED IDEOGRAPH + {0xAF45, 0x6D69}, //2142 #CJK UNIFIED IDEOGRAPH + {0xAF46, 0x6D8C}, //2143 #CJK UNIFIED IDEOGRAPH + {0xAF47, 0x6D8A}, //2144 #CJK UNIFIED IDEOGRAPH + {0xAF48, 0x6D79}, //2145 #CJK UNIFIED IDEOGRAPH + {0xAF49, 0x6D85}, //2146 #CJK UNIFIED IDEOGRAPH + {0xAF4A, 0x6D65}, //2147 #CJK UNIFIED IDEOGRAPH + {0xAF4B, 0x6D94}, //2148 #CJK UNIFIED IDEOGRAPH + {0xAF4C, 0x70CA}, //2149 #CJK UNIFIED IDEOGRAPH + {0xAF4D, 0x70D8}, //2150 #CJK UNIFIED IDEOGRAPH + {0xAF4E, 0x70E4}, //2151 #CJK UNIFIED IDEOGRAPH + {0xAF4F, 0x70D9}, //2152 #CJK UNIFIED IDEOGRAPH + {0xAF50, 0x70C8}, //2153 #CJK UNIFIED IDEOGRAPH + {0xAF51, 0x70CF}, //2154 #CJK UNIFIED IDEOGRAPH + {0xAF52, 0x7239}, //2155 #CJK UNIFIED IDEOGRAPH + {0xAF53, 0x7279}, //2156 #CJK UNIFIED IDEOGRAPH + {0xAF54, 0x72FC}, //2157 #CJK UNIFIED IDEOGRAPH + {0xAF55, 0x72F9}, //2158 #CJK UNIFIED IDEOGRAPH + {0xAF56, 0x72FD}, //2159 #CJK UNIFIED IDEOGRAPH + {0xAF57, 0x72F8}, //2160 #CJK UNIFIED IDEOGRAPH + {0xAF58, 0x72F7}, //2161 #CJK UNIFIED IDEOGRAPH + {0xAF59, 0x7386}, //2162 #CJK UNIFIED IDEOGRAPH + {0xAF5A, 0x73ED}, //2163 #CJK UNIFIED IDEOGRAPH + {0xAF5B, 0x7409}, //2164 #CJK UNIFIED IDEOGRAPH + {0xAF5C, 0x73EE}, //2165 #CJK UNIFIED IDEOGRAPH + {0xAF5D, 0x73E0}, //2166 #CJK UNIFIED IDEOGRAPH + {0xAF5E, 0x73EA}, //2167 #CJK UNIFIED IDEOGRAPH + {0xAF5F, 0x73DE}, //2168 #CJK UNIFIED IDEOGRAPH + {0xAF60, 0x7554}, //2169 #CJK UNIFIED IDEOGRAPH + {0xAF61, 0x755D}, //2170 #CJK UNIFIED IDEOGRAPH + {0xAF62, 0x755C}, //2171 #CJK UNIFIED IDEOGRAPH + {0xAF63, 0x755A}, //2172 #CJK UNIFIED IDEOGRAPH + {0xAF64, 0x7559}, //2173 #CJK UNIFIED IDEOGRAPH + {0xAF65, 0x75BE}, //2174 #CJK UNIFIED IDEOGRAPH + {0xAF66, 0x75C5}, //2175 #CJK UNIFIED IDEOGRAPH + {0xAF67, 0x75C7}, //2176 #CJK UNIFIED IDEOGRAPH + {0xAF68, 0x75B2}, //2177 #CJK UNIFIED IDEOGRAPH + {0xAF69, 0x75B3}, //2178 #CJK UNIFIED IDEOGRAPH + {0xAF6A, 0x75BD}, //2179 #CJK UNIFIED IDEOGRAPH + {0xAF6B, 0x75BC}, //2180 #CJK UNIFIED IDEOGRAPH + {0xAF6C, 0x75B9}, //2181 #CJK UNIFIED IDEOGRAPH + {0xAF6D, 0x75C2}, //2182 #CJK UNIFIED IDEOGRAPH + {0xAF6E, 0x75B8}, //2183 #CJK UNIFIED IDEOGRAPH + {0xAF6F, 0x768B}, //2184 #CJK UNIFIED IDEOGRAPH + {0xAF70, 0x76B0}, //2185 #CJK UNIFIED IDEOGRAPH + {0xAF71, 0x76CA}, //2186 #CJK UNIFIED IDEOGRAPH + {0xAF72, 0x76CD}, //2187 #CJK UNIFIED IDEOGRAPH + {0xAF73, 0x76CE}, //2188 #CJK UNIFIED IDEOGRAPH + {0xAF74, 0x7729}, //2189 #CJK UNIFIED IDEOGRAPH + {0xAF75, 0x771F}, //2190 #CJK UNIFIED IDEOGRAPH + {0xAF76, 0x7720}, //2191 #CJK UNIFIED IDEOGRAPH + {0xAF77, 0x7728}, //2192 #CJK UNIFIED IDEOGRAPH + {0xAF78, 0x77E9}, //2193 #CJK UNIFIED IDEOGRAPH + {0xAF79, 0x7830}, //2194 #CJK UNIFIED IDEOGRAPH + {0xAF7A, 0x7827}, //2195 #CJK UNIFIED IDEOGRAPH + {0xAF7B, 0x7838}, //2196 #CJK UNIFIED IDEOGRAPH + {0xAF7C, 0x781D}, //2197 #CJK UNIFIED IDEOGRAPH + {0xAF7D, 0x7834}, //2198 #CJK UNIFIED IDEOGRAPH + {0xAF7E, 0x7837}, //2199 #CJK UNIFIED IDEOGRAPH + {0xAFA1, 0x7825}, //2200 #CJK UNIFIED IDEOGRAPH + {0xAFA2, 0x782D}, //2201 #CJK UNIFIED IDEOGRAPH + {0xAFA3, 0x7820}, //2202 #CJK UNIFIED IDEOGRAPH + {0xAFA4, 0x781F}, //2203 #CJK UNIFIED IDEOGRAPH + {0xAFA5, 0x7832}, //2204 #CJK UNIFIED IDEOGRAPH + {0xAFA6, 0x7955}, //2205 #CJK UNIFIED IDEOGRAPH + {0xAFA7, 0x7950}, //2206 #CJK UNIFIED IDEOGRAPH + {0xAFA8, 0x7960}, //2207 #CJK UNIFIED IDEOGRAPH + {0xAFA9, 0x795F}, //2208 #CJK UNIFIED IDEOGRAPH + {0xAFAA, 0x7956}, //2209 #CJK UNIFIED IDEOGRAPH + {0xAFAB, 0x795E}, //2210 #CJK UNIFIED IDEOGRAPH + {0xAFAC, 0x795D}, //2211 #CJK UNIFIED IDEOGRAPH + {0xAFAD, 0x7957}, //2212 #CJK UNIFIED IDEOGRAPH + {0xAFAE, 0x795A}, //2213 #CJK UNIFIED IDEOGRAPH + {0xAFAF, 0x79E4}, //2214 #CJK UNIFIED IDEOGRAPH + {0xAFB0, 0x79E3}, //2215 #CJK UNIFIED IDEOGRAPH + {0xAFB1, 0x79E7}, //2216 #CJK UNIFIED IDEOGRAPH + {0xAFB2, 0x79DF}, //2217 #CJK UNIFIED IDEOGRAPH + {0xAFB3, 0x79E6}, //2218 #CJK UNIFIED IDEOGRAPH + {0xAFB4, 0x79E9}, //2219 #CJK UNIFIED IDEOGRAPH + {0xAFB5, 0x79D8}, //2220 #CJK UNIFIED IDEOGRAPH + {0xAFB6, 0x7A84}, //2221 #CJK UNIFIED IDEOGRAPH + {0xAFB7, 0x7A88}, //2222 #CJK UNIFIED IDEOGRAPH + {0xAFB8, 0x7AD9}, //2223 #CJK UNIFIED IDEOGRAPH + {0xAFB9, 0x7B06}, //2224 #CJK UNIFIED IDEOGRAPH + {0xAFBA, 0x7B11}, //2225 #CJK UNIFIED IDEOGRAPH + {0xAFBB, 0x7C89}, //2226 #CJK UNIFIED IDEOGRAPH + {0xAFBC, 0x7D21}, //2227 #CJK UNIFIED IDEOGRAPH + {0xAFBD, 0x7D17}, //2228 #CJK UNIFIED IDEOGRAPH + {0xAFBE, 0x7D0B}, //2229 #CJK UNIFIED IDEOGRAPH + {0xAFBF, 0x7D0A}, //2230 #CJK UNIFIED IDEOGRAPH + {0xAFC0, 0x7D20}, //2231 #CJK UNIFIED IDEOGRAPH + {0xAFC1, 0x7D22}, //2232 #CJK UNIFIED IDEOGRAPH + {0xAFC2, 0x7D14}, //2233 #CJK UNIFIED IDEOGRAPH + {0xAFC3, 0x7D10}, //2234 #CJK UNIFIED IDEOGRAPH + {0xAFC4, 0x7D15}, //2235 #CJK UNIFIED IDEOGRAPH + {0xAFC5, 0x7D1A}, //2236 #CJK UNIFIED IDEOGRAPH + {0xAFC6, 0x7D1C}, //2237 #CJK UNIFIED IDEOGRAPH + {0xAFC7, 0x7D0D}, //2238 #CJK UNIFIED IDEOGRAPH + {0xAFC8, 0x7D19}, //2239 #CJK UNIFIED IDEOGRAPH + {0xAFC9, 0x7D1B}, //2240 #CJK UNIFIED IDEOGRAPH + {0xAFCA, 0x7F3A}, //2241 #CJK UNIFIED IDEOGRAPH + {0xAFCB, 0x7F5F}, //2242 #CJK UNIFIED IDEOGRAPH + {0xAFCC, 0x7F94}, //2243 #CJK UNIFIED IDEOGRAPH + {0xAFCD, 0x7FC5}, //2244 #CJK UNIFIED IDEOGRAPH + {0xAFCE, 0x7FC1}, //2245 #CJK UNIFIED IDEOGRAPH + {0xAFCF, 0x8006}, //2246 #CJK UNIFIED IDEOGRAPH + {0xAFD0, 0x8018}, //2247 #CJK UNIFIED IDEOGRAPH + {0xAFD1, 0x8015}, //2248 #CJK UNIFIED IDEOGRAPH + {0xAFD2, 0x8019}, //2249 #CJK UNIFIED IDEOGRAPH + {0xAFD3, 0x8017}, //2250 #CJK UNIFIED IDEOGRAPH + {0xAFD4, 0x803D}, //2251 #CJK UNIFIED IDEOGRAPH + {0xAFD5, 0x803F}, //2252 #CJK UNIFIED IDEOGRAPH + {0xAFD6, 0x80F1}, //2253 #CJK UNIFIED IDEOGRAPH + {0xAFD7, 0x8102}, //2254 #CJK UNIFIED IDEOGRAPH + {0xAFD8, 0x80F0}, //2255 #CJK UNIFIED IDEOGRAPH + {0xAFD9, 0x8105}, //2256 #CJK UNIFIED IDEOGRAPH + {0xAFDA, 0x80ED}, //2257 #CJK UNIFIED IDEOGRAPH + {0xAFDB, 0x80F4}, //2258 #CJK UNIFIED IDEOGRAPH + {0xAFDC, 0x8106}, //2259 #CJK UNIFIED IDEOGRAPH + {0xAFDD, 0x80F8}, //2260 #CJK UNIFIED IDEOGRAPH + {0xAFDE, 0x80F3}, //2261 #CJK UNIFIED IDEOGRAPH + {0xAFDF, 0x8108}, //2262 #CJK UNIFIED IDEOGRAPH + {0xAFE0, 0x80FD}, //2263 #CJK UNIFIED IDEOGRAPH + {0xAFE1, 0x810A}, //2264 #CJK UNIFIED IDEOGRAPH + {0xAFE2, 0x80FC}, //2265 #CJK UNIFIED IDEOGRAPH + {0xAFE3, 0x80EF}, //2266 #CJK UNIFIED IDEOGRAPH + {0xAFE4, 0x81ED}, //2267 #CJK UNIFIED IDEOGRAPH + {0xAFE5, 0x81EC}, //2268 #CJK UNIFIED IDEOGRAPH + {0xAFE6, 0x8200}, //2269 #CJK UNIFIED IDEOGRAPH + {0xAFE7, 0x8210}, //2270 #CJK UNIFIED IDEOGRAPH + {0xAFE8, 0x822A}, //2271 #CJK UNIFIED IDEOGRAPH + {0xAFE9, 0x822B}, //2272 #CJK UNIFIED IDEOGRAPH + {0xAFEA, 0x8228}, //2273 #CJK UNIFIED IDEOGRAPH + {0xAFEB, 0x822C}, //2274 #CJK UNIFIED IDEOGRAPH + {0xAFEC, 0x82BB}, //2275 #CJK UNIFIED IDEOGRAPH + {0xAFED, 0x832B}, //2276 #CJK UNIFIED IDEOGRAPH + {0xAFEE, 0x8352}, //2277 #CJK UNIFIED IDEOGRAPH + {0xAFEF, 0x8354}, //2278 #CJK UNIFIED IDEOGRAPH + {0xAFF0, 0x834A}, //2279 #CJK UNIFIED IDEOGRAPH + {0xAFF1, 0x8338}, //2280 #CJK UNIFIED IDEOGRAPH + {0xAFF2, 0x8350}, //2281 #CJK UNIFIED IDEOGRAPH + {0xAFF3, 0x8349}, //2282 #CJK UNIFIED IDEOGRAPH + {0xAFF4, 0x8335}, //2283 #CJK UNIFIED IDEOGRAPH + {0xAFF5, 0x8334}, //2284 #CJK UNIFIED IDEOGRAPH + {0xAFF6, 0x834F}, //2285 #CJK UNIFIED IDEOGRAPH + {0xAFF7, 0x8332}, //2286 #CJK UNIFIED IDEOGRAPH + {0xAFF8, 0x8339}, //2287 #CJK UNIFIED IDEOGRAPH + {0xAFF9, 0x8336}, //2288 #CJK UNIFIED IDEOGRAPH + {0xAFFA, 0x8317}, //2289 #CJK UNIFIED IDEOGRAPH + {0xAFFB, 0x8340}, //2290 #CJK UNIFIED IDEOGRAPH + {0xAFFC, 0x8331}, //2291 #CJK UNIFIED IDEOGRAPH + {0xAFFD, 0x8328}, //2292 #CJK UNIFIED IDEOGRAPH + {0xAFFE, 0x8343}, //2293 #CJK UNIFIED IDEOGRAPH + {0xB040, 0x8654}, //2294 #CJK UNIFIED IDEOGRAPH + {0xB041, 0x868A}, //2295 #CJK UNIFIED IDEOGRAPH + {0xB042, 0x86AA}, //2296 #CJK UNIFIED IDEOGRAPH + {0xB043, 0x8693}, //2297 #CJK UNIFIED IDEOGRAPH + {0xB044, 0x86A4}, //2298 #CJK UNIFIED IDEOGRAPH + {0xB045, 0x86A9}, //2299 #CJK UNIFIED IDEOGRAPH + {0xB046, 0x868C}, //2300 #CJK UNIFIED IDEOGRAPH + {0xB047, 0x86A3}, //2301 #CJK UNIFIED IDEOGRAPH + {0xB048, 0x869C}, //2302 #CJK UNIFIED IDEOGRAPH + {0xB049, 0x8870}, //2303 #CJK UNIFIED IDEOGRAPH + {0xB04A, 0x8877}, //2304 #CJK UNIFIED IDEOGRAPH + {0xB04B, 0x8881}, //2305 #CJK UNIFIED IDEOGRAPH + {0xB04C, 0x8882}, //2306 #CJK UNIFIED IDEOGRAPH + {0xB04D, 0x887D}, //2307 #CJK UNIFIED IDEOGRAPH + {0xB04E, 0x8879}, //2308 #CJK UNIFIED IDEOGRAPH + {0xB04F, 0x8A18}, //2309 #CJK UNIFIED IDEOGRAPH + {0xB050, 0x8A10}, //2310 #CJK UNIFIED IDEOGRAPH + {0xB051, 0x8A0E}, //2311 #CJK UNIFIED IDEOGRAPH + {0xB052, 0x8A0C}, //2312 #CJK UNIFIED IDEOGRAPH + {0xB053, 0x8A15}, //2313 #CJK UNIFIED IDEOGRAPH + {0xB054, 0x8A0A}, //2314 #CJK UNIFIED IDEOGRAPH + {0xB055, 0x8A17}, //2315 #CJK UNIFIED IDEOGRAPH + {0xB056, 0x8A13}, //2316 #CJK UNIFIED IDEOGRAPH + {0xB057, 0x8A16}, //2317 #CJK UNIFIED IDEOGRAPH + {0xB058, 0x8A0F}, //2318 #CJK UNIFIED IDEOGRAPH + {0xB059, 0x8A11}, //2319 #CJK UNIFIED IDEOGRAPH + {0xB05A, 0x8C48}, //2320 #CJK UNIFIED IDEOGRAPH + {0xB05B, 0x8C7A}, //2321 #CJK UNIFIED IDEOGRAPH + {0xB05C, 0x8C79}, //2322 #CJK UNIFIED IDEOGRAPH + {0xB05D, 0x8CA1}, //2323 #CJK UNIFIED IDEOGRAPH + {0xB05E, 0x8CA2}, //2324 #CJK UNIFIED IDEOGRAPH + {0xB05F, 0x8D77}, //2325 #CJK UNIFIED IDEOGRAPH + {0xB060, 0x8EAC}, //2326 #CJK UNIFIED IDEOGRAPH + {0xB061, 0x8ED2}, //2327 #CJK UNIFIED IDEOGRAPH + {0xB062, 0x8ED4}, //2328 #CJK UNIFIED IDEOGRAPH + {0xB063, 0x8ECF}, //2329 #CJK UNIFIED IDEOGRAPH + {0xB064, 0x8FB1}, //2330 #CJK UNIFIED IDEOGRAPH + {0xB065, 0x9001}, //2331 #CJK UNIFIED IDEOGRAPH + {0xB066, 0x9006}, //2332 #CJK UNIFIED IDEOGRAPH + {0xB067, 0x8FF7}, //2333 #CJK UNIFIED IDEOGRAPH + {0xB068, 0x9000}, //2334 #CJK UNIFIED IDEOGRAPH + {0xB069, 0x8FFA}, //2335 #CJK UNIFIED IDEOGRAPH + {0xB06A, 0x8FF4}, //2336 #CJK UNIFIED IDEOGRAPH + {0xB06B, 0x9003}, //2337 #CJK UNIFIED IDEOGRAPH + {0xB06C, 0x8FFD}, //2338 #CJK UNIFIED IDEOGRAPH + {0xB06D, 0x9005}, //2339 #CJK UNIFIED IDEOGRAPH + {0xB06E, 0x8FF8}, //2340 #CJK UNIFIED IDEOGRAPH + {0xB06F, 0x9095}, //2341 #CJK UNIFIED IDEOGRAPH + {0xB070, 0x90E1}, //2342 #CJK UNIFIED IDEOGRAPH + {0xB071, 0x90DD}, //2343 #CJK UNIFIED IDEOGRAPH + {0xB072, 0x90E2}, //2344 #CJK UNIFIED IDEOGRAPH + {0xB073, 0x9152}, //2345 #CJK UNIFIED IDEOGRAPH + {0xB074, 0x914D}, //2346 #CJK UNIFIED IDEOGRAPH + {0xB075, 0x914C}, //2347 #CJK UNIFIED IDEOGRAPH + {0xB076, 0x91D8}, //2348 #CJK UNIFIED IDEOGRAPH + {0xB077, 0x91DD}, //2349 #CJK UNIFIED IDEOGRAPH + {0xB078, 0x91D7}, //2350 #CJK UNIFIED IDEOGRAPH + {0xB079, 0x91DC}, //2351 #CJK UNIFIED IDEOGRAPH + {0xB07A, 0x91D9}, //2352 #CJK UNIFIED IDEOGRAPH + {0xB07B, 0x9583}, //2353 #CJK UNIFIED IDEOGRAPH + {0xB07C, 0x9662}, //2354 #CJK UNIFIED IDEOGRAPH + {0xB07D, 0x9663}, //2355 #CJK UNIFIED IDEOGRAPH + {0xB07E, 0x9661}, //2356 #CJK UNIFIED IDEOGRAPH + {0xB0A1, 0x965B}, //2357 #CJK UNIFIED IDEOGRAPH + {0xB0A2, 0x965D}, //2358 #CJK UNIFIED IDEOGRAPH + {0xB0A3, 0x9664}, //2359 #CJK UNIFIED IDEOGRAPH + {0xB0A4, 0x9658}, //2360 #CJK UNIFIED IDEOGRAPH + {0xB0A5, 0x965E}, //2361 #CJK UNIFIED IDEOGRAPH + {0xB0A6, 0x96BB}, //2362 #CJK UNIFIED IDEOGRAPH + {0xB0A7, 0x98E2}, //2363 #CJK UNIFIED IDEOGRAPH + {0xB0A8, 0x99AC}, //2364 #CJK UNIFIED IDEOGRAPH + {0xB0A9, 0x9AA8}, //2365 #CJK UNIFIED IDEOGRAPH + {0xB0AA, 0x9AD8}, //2366 #CJK UNIFIED IDEOGRAPH + {0xB0AB, 0x9B25}, //2367 #CJK UNIFIED IDEOGRAPH + {0xB0AC, 0x9B32}, //2368 #CJK UNIFIED IDEOGRAPH + {0xB0AD, 0x9B3C}, //2369 #CJK UNIFIED IDEOGRAPH + {0xB0AE, 0x4E7E}, //2370 #CJK UNIFIED IDEOGRAPH + {0xB0AF, 0x507A}, //2371 #CJK UNIFIED IDEOGRAPH + {0xB0B0, 0x507D}, //2372 #CJK UNIFIED IDEOGRAPH + {0xB0B1, 0x505C}, //2373 #CJK UNIFIED IDEOGRAPH + {0xB0B2, 0x5047}, //2374 #CJK UNIFIED IDEOGRAPH + {0xB0B3, 0x5043}, //2375 #CJK UNIFIED IDEOGRAPH + {0xB0B4, 0x504C}, //2376 #CJK UNIFIED IDEOGRAPH + {0xB0B5, 0x505A}, //2377 #CJK UNIFIED IDEOGRAPH + {0xB0B6, 0x5049}, //2378 #CJK UNIFIED IDEOGRAPH + {0xB0B7, 0x5065}, //2379 #CJK UNIFIED IDEOGRAPH + {0xB0B8, 0x5076}, //2380 #CJK UNIFIED IDEOGRAPH + {0xB0B9, 0x504E}, //2381 #CJK UNIFIED IDEOGRAPH + {0xB0BA, 0x5055}, //2382 #CJK UNIFIED IDEOGRAPH + {0xB0BB, 0x5075}, //2383 #CJK UNIFIED IDEOGRAPH + {0xB0BC, 0x5074}, //2384 #CJK UNIFIED IDEOGRAPH + {0xB0BD, 0x5077}, //2385 #CJK UNIFIED IDEOGRAPH + {0xB0BE, 0x504F}, //2386 #CJK UNIFIED IDEOGRAPH + {0xB0BF, 0x500F}, //2387 #CJK UNIFIED IDEOGRAPH + {0xB0C0, 0x506F}, //2388 #CJK UNIFIED IDEOGRAPH + {0xB0C1, 0x506D}, //2389 #CJK UNIFIED IDEOGRAPH + {0xB0C2, 0x515C}, //2390 #CJK UNIFIED IDEOGRAPH + {0xB0C3, 0x5195}, //2391 #CJK UNIFIED IDEOGRAPH + {0xB0C4, 0x51F0}, //2392 #CJK UNIFIED IDEOGRAPH + {0xB0C5, 0x526A}, //2393 #CJK UNIFIED IDEOGRAPH + {0xB0C6, 0x526F}, //2394 #CJK UNIFIED IDEOGRAPH + {0xB0C7, 0x52D2}, //2395 #CJK UNIFIED IDEOGRAPH + {0xB0C8, 0x52D9}, //2396 #CJK UNIFIED IDEOGRAPH + {0xB0C9, 0x52D8}, //2397 #CJK UNIFIED IDEOGRAPH + {0xB0CA, 0x52D5}, //2398 #CJK UNIFIED IDEOGRAPH + {0xB0CB, 0x5310}, //2399 #CJK UNIFIED IDEOGRAPH + {0xB0CC, 0x530F}, //2400 #CJK UNIFIED IDEOGRAPH + {0xB0CD, 0x5319}, //2401 #CJK UNIFIED IDEOGRAPH + {0xB0CE, 0x533F}, //2402 #CJK UNIFIED IDEOGRAPH + {0xB0CF, 0x5340}, //2403 #CJK UNIFIED IDEOGRAPH + {0xB0D0, 0x533E}, //2404 #CJK UNIFIED IDEOGRAPH + {0xB0D1, 0x53C3}, //2405 #CJK UNIFIED IDEOGRAPH + {0xB0D2, 0x66FC}, //2406 #CJK UNIFIED IDEOGRAPH + {0xB0D3, 0x5546}, //2407 #CJK UNIFIED IDEOGRAPH + {0xB0D4, 0x556A}, //2408 #CJK UNIFIED IDEOGRAPH + {0xB0D5, 0x5566}, //2409 #CJK UNIFIED IDEOGRAPH + {0xB0D6, 0x5544}, //2410 #CJK UNIFIED IDEOGRAPH + {0xB0D7, 0x555E}, //2411 #CJK UNIFIED IDEOGRAPH + {0xB0D8, 0x5561}, //2412 #CJK UNIFIED IDEOGRAPH + {0xB0D9, 0x5543}, //2413 #CJK UNIFIED IDEOGRAPH + {0xB0DA, 0x554A}, //2414 #CJK UNIFIED IDEOGRAPH + {0xB0DB, 0x5531}, //2415 #CJK UNIFIED IDEOGRAPH + {0xB0DC, 0x5556}, //2416 #CJK UNIFIED IDEOGRAPH + {0xB0DD, 0x554F}, //2417 #CJK UNIFIED IDEOGRAPH + {0xB0DE, 0x5555}, //2418 #CJK UNIFIED IDEOGRAPH + {0xB0DF, 0x552F}, //2419 #CJK UNIFIED IDEOGRAPH + {0xB0E0, 0x5564}, //2420 #CJK UNIFIED IDEOGRAPH + {0xB0E1, 0x5538}, //2421 #CJK UNIFIED IDEOGRAPH + {0xB0E2, 0x552E}, //2422 #CJK UNIFIED IDEOGRAPH + {0xB0E3, 0x555C}, //2423 #CJK UNIFIED IDEOGRAPH + {0xB0E4, 0x552C}, //2424 #CJK UNIFIED IDEOGRAPH + {0xB0E5, 0x5563}, //2425 #CJK UNIFIED IDEOGRAPH + {0xB0E6, 0x5533}, //2426 #CJK UNIFIED IDEOGRAPH + {0xB0E7, 0x5541}, //2427 #CJK UNIFIED IDEOGRAPH + {0xB0E8, 0x5557}, //2428 #CJK UNIFIED IDEOGRAPH + {0xB0E9, 0x5708}, //2429 #CJK UNIFIED IDEOGRAPH + {0xB0EA, 0x570B}, //2430 #CJK UNIFIED IDEOGRAPH + {0xB0EB, 0x5709}, //2431 #CJK UNIFIED IDEOGRAPH + {0xB0EC, 0x57DF}, //2432 #CJK UNIFIED IDEOGRAPH + {0xB0ED, 0x5805}, //2433 #CJK UNIFIED IDEOGRAPH + {0xB0EE, 0x580A}, //2434 #CJK UNIFIED IDEOGRAPH + {0xB0EF, 0x5806}, //2435 #CJK UNIFIED IDEOGRAPH + {0xB0F0, 0x57E0}, //2436 #CJK UNIFIED IDEOGRAPH + {0xB0F1, 0x57E4}, //2437 #CJK UNIFIED IDEOGRAPH + {0xB0F2, 0x57FA}, //2438 #CJK UNIFIED IDEOGRAPH + {0xB0F3, 0x5802}, //2439 #CJK UNIFIED IDEOGRAPH + {0xB0F4, 0x5835}, //2440 #CJK UNIFIED IDEOGRAPH + {0xB0F5, 0x57F7}, //2441 #CJK UNIFIED IDEOGRAPH + {0xB0F6, 0x57F9}, //2442 #CJK UNIFIED IDEOGRAPH + {0xB0F7, 0x5920}, //2443 #CJK UNIFIED IDEOGRAPH + {0xB0F8, 0x5962}, //2444 #CJK UNIFIED IDEOGRAPH + {0xB0F9, 0x5A36}, //2445 #CJK UNIFIED IDEOGRAPH + {0xB0FA, 0x5A41}, //2446 #CJK UNIFIED IDEOGRAPH + {0xB0FB, 0x5A49}, //2447 #CJK UNIFIED IDEOGRAPH + {0xB0FC, 0x5A66}, //2448 #CJK UNIFIED IDEOGRAPH + {0xB0FD, 0x5A6A}, //2449 #CJK UNIFIED IDEOGRAPH + {0xB0FE, 0x5A40}, //2450 #CJK UNIFIED IDEOGRAPH + {0xB140, 0x5A3C}, //2451 #CJK UNIFIED IDEOGRAPH + {0xB141, 0x5A62}, //2452 #CJK UNIFIED IDEOGRAPH + {0xB142, 0x5A5A}, //2453 #CJK UNIFIED IDEOGRAPH + {0xB143, 0x5A46}, //2454 #CJK UNIFIED IDEOGRAPH + {0xB144, 0x5A4A}, //2455 #CJK UNIFIED IDEOGRAPH + {0xB145, 0x5B70}, //2456 #CJK UNIFIED IDEOGRAPH + {0xB146, 0x5BC7}, //2457 #CJK UNIFIED IDEOGRAPH + {0xB147, 0x5BC5}, //2458 #CJK UNIFIED IDEOGRAPH + {0xB148, 0x5BC4}, //2459 #CJK UNIFIED IDEOGRAPH + {0xB149, 0x5BC2}, //2460 #CJK UNIFIED IDEOGRAPH + {0xB14A, 0x5BBF}, //2461 #CJK UNIFIED IDEOGRAPH + {0xB14B, 0x5BC6}, //2462 #CJK UNIFIED IDEOGRAPH + {0xB14C, 0x5C09}, //2463 #CJK UNIFIED IDEOGRAPH + {0xB14D, 0x5C08}, //2464 #CJK UNIFIED IDEOGRAPH + {0xB14E, 0x5C07}, //2465 #CJK UNIFIED IDEOGRAPH + {0xB14F, 0x5C60}, //2466 #CJK UNIFIED IDEOGRAPH + {0xB150, 0x5C5C}, //2467 #CJK UNIFIED IDEOGRAPH + {0xB151, 0x5C5D}, //2468 #CJK UNIFIED IDEOGRAPH + {0xB152, 0x5D07}, //2469 #CJK UNIFIED IDEOGRAPH + {0xB153, 0x5D06}, //2470 #CJK UNIFIED IDEOGRAPH + {0xB154, 0x5D0E}, //2471 #CJK UNIFIED IDEOGRAPH + {0xB155, 0x5D1B}, //2472 #CJK UNIFIED IDEOGRAPH + {0xB156, 0x5D16}, //2473 #CJK UNIFIED IDEOGRAPH + {0xB157, 0x5D22}, //2474 #CJK UNIFIED IDEOGRAPH + {0xB158, 0x5D11}, //2475 #CJK UNIFIED IDEOGRAPH + {0xB159, 0x5D29}, //2476 #CJK UNIFIED IDEOGRAPH + {0xB15A, 0x5D14}, //2477 #CJK UNIFIED IDEOGRAPH + {0xB15B, 0x5D19}, //2478 #CJK UNIFIED IDEOGRAPH + {0xB15C, 0x5D24}, //2479 #CJK UNIFIED IDEOGRAPH + {0xB15D, 0x5D27}, //2480 #CJK UNIFIED IDEOGRAPH + {0xB15E, 0x5D17}, //2481 #CJK UNIFIED IDEOGRAPH + {0xB15F, 0x5DE2}, //2482 #CJK UNIFIED IDEOGRAPH + {0xB160, 0x5E38}, //2483 #CJK UNIFIED IDEOGRAPH + {0xB161, 0x5E36}, //2484 #CJK UNIFIED IDEOGRAPH + {0xB162, 0x5E33}, //2485 #CJK UNIFIED IDEOGRAPH + {0xB163, 0x5E37}, //2486 #CJK UNIFIED IDEOGRAPH + {0xB164, 0x5EB7}, //2487 #CJK UNIFIED IDEOGRAPH + {0xB165, 0x5EB8}, //2488 #CJK UNIFIED IDEOGRAPH + {0xB166, 0x5EB6}, //2489 #CJK UNIFIED IDEOGRAPH + {0xB167, 0x5EB5}, //2490 #CJK UNIFIED IDEOGRAPH + {0xB168, 0x5EBE}, //2491 #CJK UNIFIED IDEOGRAPH + {0xB169, 0x5F35}, //2492 #CJK UNIFIED IDEOGRAPH + {0xB16A, 0x5F37}, //2493 #CJK UNIFIED IDEOGRAPH + {0xB16B, 0x5F57}, //2494 #CJK UNIFIED IDEOGRAPH + {0xB16C, 0x5F6C}, //2495 #CJK UNIFIED IDEOGRAPH + {0xB16D, 0x5F69}, //2496 #CJK UNIFIED IDEOGRAPH + {0xB16E, 0x5F6B}, //2497 #CJK UNIFIED IDEOGRAPH + {0xB16F, 0x5F97}, //2498 #CJK UNIFIED IDEOGRAPH + {0xB170, 0x5F99}, //2499 #CJK UNIFIED IDEOGRAPH + {0xB171, 0x5F9E}, //2500 #CJK UNIFIED IDEOGRAPH + {0xB172, 0x5F98}, //2501 #CJK UNIFIED IDEOGRAPH + {0xB173, 0x5FA1}, //2502 #CJK UNIFIED IDEOGRAPH + {0xB174, 0x5FA0}, //2503 #CJK UNIFIED IDEOGRAPH + {0xB175, 0x5F9C}, //2504 #CJK UNIFIED IDEOGRAPH + {0xB176, 0x607F}, //2505 #CJK UNIFIED IDEOGRAPH + {0xB177, 0x60A3}, //2506 #CJK UNIFIED IDEOGRAPH + {0xB178, 0x6089}, //2507 #CJK UNIFIED IDEOGRAPH + {0xB179, 0x60A0}, //2508 #CJK UNIFIED IDEOGRAPH + {0xB17A, 0x60A8}, //2509 #CJK UNIFIED IDEOGRAPH + {0xB17B, 0x60CB}, //2510 #CJK UNIFIED IDEOGRAPH + {0xB17C, 0x60B4}, //2511 #CJK UNIFIED IDEOGRAPH + {0xB17D, 0x60E6}, //2512 #CJK UNIFIED IDEOGRAPH + {0xB17E, 0x60BD}, //2513 #CJK UNIFIED IDEOGRAPH + {0xB1A1, 0x60C5}, //2514 #CJK UNIFIED IDEOGRAPH + {0xB1A2, 0x60BB}, //2515 #CJK UNIFIED IDEOGRAPH + {0xB1A3, 0x60B5}, //2516 #CJK UNIFIED IDEOGRAPH + {0xB1A4, 0x60DC}, //2517 #CJK UNIFIED IDEOGRAPH + {0xB1A5, 0x60BC}, //2518 #CJK UNIFIED IDEOGRAPH + {0xB1A6, 0x60D8}, //2519 #CJK UNIFIED IDEOGRAPH + {0xB1A7, 0x60D5}, //2520 #CJK UNIFIED IDEOGRAPH + {0xB1A8, 0x60C6}, //2521 #CJK UNIFIED IDEOGRAPH + {0xB1A9, 0x60DF}, //2522 #CJK UNIFIED IDEOGRAPH + {0xB1AA, 0x60B8}, //2523 #CJK UNIFIED IDEOGRAPH + {0xB1AB, 0x60DA}, //2524 #CJK UNIFIED IDEOGRAPH + {0xB1AC, 0x60C7}, //2525 #CJK UNIFIED IDEOGRAPH + {0xB1AD, 0x621A}, //2526 #CJK UNIFIED IDEOGRAPH + {0xB1AE, 0x621B}, //2527 #CJK UNIFIED IDEOGRAPH + {0xB1AF, 0x6248}, //2528 #CJK UNIFIED IDEOGRAPH + {0xB1B0, 0x63A0}, //2529 #CJK UNIFIED IDEOGRAPH + {0xB1B1, 0x63A7}, //2530 #CJK UNIFIED IDEOGRAPH + {0xB1B2, 0x6372}, //2531 #CJK UNIFIED IDEOGRAPH + {0xB1B3, 0x6396}, //2532 #CJK UNIFIED IDEOGRAPH + {0xB1B4, 0x63A2}, //2533 #CJK UNIFIED IDEOGRAPH + {0xB1B5, 0x63A5}, //2534 #CJK UNIFIED IDEOGRAPH + {0xB1B6, 0x6377}, //2535 #CJK UNIFIED IDEOGRAPH + {0xB1B7, 0x6367}, //2536 #CJK UNIFIED IDEOGRAPH + {0xB1B8, 0x6398}, //2537 #CJK UNIFIED IDEOGRAPH + {0xB1B9, 0x63AA}, //2538 #CJK UNIFIED IDEOGRAPH + {0xB1BA, 0x6371}, //2539 #CJK UNIFIED IDEOGRAPH + {0xB1BB, 0x63A9}, //2540 #CJK UNIFIED IDEOGRAPH + {0xB1BC, 0x6389}, //2541 #CJK UNIFIED IDEOGRAPH + {0xB1BD, 0x6383}, //2542 #CJK UNIFIED IDEOGRAPH + {0xB1BE, 0x639B}, //2543 #CJK UNIFIED IDEOGRAPH + {0xB1BF, 0x636B}, //2544 #CJK UNIFIED IDEOGRAPH + {0xB1C0, 0x63A8}, //2545 #CJK UNIFIED IDEOGRAPH + {0xB1C1, 0x6384}, //2546 #CJK UNIFIED IDEOGRAPH + {0xB1C2, 0x6388}, //2547 #CJK UNIFIED IDEOGRAPH + {0xB1C3, 0x6399}, //2548 #CJK UNIFIED IDEOGRAPH + {0xB1C4, 0x63A1}, //2549 #CJK UNIFIED IDEOGRAPH + {0xB1C5, 0x63AC}, //2550 #CJK UNIFIED IDEOGRAPH + {0xB1C6, 0x6392}, //2551 #CJK UNIFIED IDEOGRAPH + {0xB1C7, 0x638F}, //2552 #CJK UNIFIED IDEOGRAPH + {0xB1C8, 0x6380}, //2553 #CJK UNIFIED IDEOGRAPH + {0xB1C9, 0x637B}, //2554 #CJK UNIFIED IDEOGRAPH + {0xB1CA, 0x6369}, //2555 #CJK UNIFIED IDEOGRAPH + {0xB1CB, 0x6368}, //2556 #CJK UNIFIED IDEOGRAPH + {0xB1CC, 0x637A}, //2557 #CJK UNIFIED IDEOGRAPH + {0xB1CD, 0x655D}, //2558 #CJK UNIFIED IDEOGRAPH + {0xB1CE, 0x6556}, //2559 #CJK UNIFIED IDEOGRAPH + {0xB1CF, 0x6551}, //2560 #CJK UNIFIED IDEOGRAPH + {0xB1D0, 0x6559}, //2561 #CJK UNIFIED IDEOGRAPH + {0xB1D1, 0x6557}, //2562 #CJK UNIFIED IDEOGRAPH + {0xB1D2, 0x555F}, //2563 #CJK UNIFIED IDEOGRAPH + {0xB1D3, 0x654F}, //2564 #CJK UNIFIED IDEOGRAPH + {0xB1D4, 0x6558}, //2565 #CJK UNIFIED IDEOGRAPH + {0xB1D5, 0x6555}, //2566 #CJK UNIFIED IDEOGRAPH + {0xB1D6, 0x6554}, //2567 #CJK UNIFIED IDEOGRAPH + {0xB1D7, 0x659C}, //2568 #CJK UNIFIED IDEOGRAPH + {0xB1D8, 0x659B}, //2569 #CJK UNIFIED IDEOGRAPH + {0xB1D9, 0x65AC}, //2570 #CJK UNIFIED IDEOGRAPH + {0xB1DA, 0x65CF}, //2571 #CJK UNIFIED IDEOGRAPH + {0xB1DB, 0x65CB}, //2572 #CJK UNIFIED IDEOGRAPH + {0xB1DC, 0x65CC}, //2573 #CJK UNIFIED IDEOGRAPH + {0xB1DD, 0x65CE}, //2574 #CJK UNIFIED IDEOGRAPH + {0xB1DE, 0x665D}, //2575 #CJK UNIFIED IDEOGRAPH + {0xB1DF, 0x665A}, //2576 #CJK UNIFIED IDEOGRAPH + {0xB1E0, 0x6664}, //2577 #CJK UNIFIED IDEOGRAPH + {0xB1E1, 0x6668}, //2578 #CJK UNIFIED IDEOGRAPH + {0xB1E2, 0x6666}, //2579 #CJK UNIFIED IDEOGRAPH + {0xB1E3, 0x665E}, //2580 #CJK UNIFIED IDEOGRAPH + {0xB1E4, 0x66F9}, //2581 #CJK UNIFIED IDEOGRAPH + {0xB1E5, 0x52D7}, //2582 #CJK UNIFIED IDEOGRAPH + {0xB1E6, 0x671B}, //2583 #CJK UNIFIED IDEOGRAPH + {0xB1E7, 0x6881}, //2584 #CJK UNIFIED IDEOGRAPH + {0xB1E8, 0x68AF}, //2585 #CJK UNIFIED IDEOGRAPH + {0xB1E9, 0x68A2}, //2586 #CJK UNIFIED IDEOGRAPH + {0xB1EA, 0x6893}, //2587 #CJK UNIFIED IDEOGRAPH + {0xB1EB, 0x68B5}, //2588 #CJK UNIFIED IDEOGRAPH + {0xB1EC, 0x687F}, //2589 #CJK UNIFIED IDEOGRAPH + {0xB1ED, 0x6876}, //2590 #CJK UNIFIED IDEOGRAPH + {0xB1EE, 0x68B1}, //2591 #CJK UNIFIED IDEOGRAPH + {0xB1EF, 0x68A7}, //2592 #CJK UNIFIED IDEOGRAPH + {0xB1F0, 0x6897}, //2593 #CJK UNIFIED IDEOGRAPH + {0xB1F1, 0x68B0}, //2594 #CJK UNIFIED IDEOGRAPH + {0xB1F2, 0x6883}, //2595 #CJK UNIFIED IDEOGRAPH + {0xB1F3, 0x68C4}, //2596 #CJK UNIFIED IDEOGRAPH + {0xB1F4, 0x68AD}, //2597 #CJK UNIFIED IDEOGRAPH + {0xB1F5, 0x6886}, //2598 #CJK UNIFIED IDEOGRAPH + {0xB1F6, 0x6885}, //2599 #CJK UNIFIED IDEOGRAPH + {0xB1F7, 0x6894}, //2600 #CJK UNIFIED IDEOGRAPH + {0xB1F8, 0x689D}, //2601 #CJK UNIFIED IDEOGRAPH + {0xB1F9, 0x68A8}, //2602 #CJK UNIFIED IDEOGRAPH + {0xB1FA, 0x689F}, //2603 #CJK UNIFIED IDEOGRAPH + {0xB1FB, 0x68A1}, //2604 #CJK UNIFIED IDEOGRAPH + {0xB1FC, 0x6882}, //2605 #CJK UNIFIED IDEOGRAPH + {0xB1FD, 0x6B32}, //2606 #CJK UNIFIED IDEOGRAPH + {0xB1FE, 0x6BBA}, //2607 #CJK UNIFIED IDEOGRAPH + {0xB240, 0x6BEB}, //2608 #CJK UNIFIED IDEOGRAPH + {0xB241, 0x6BEC}, //2609 #CJK UNIFIED IDEOGRAPH + {0xB242, 0x6C2B}, //2610 #CJK UNIFIED IDEOGRAPH + {0xB243, 0x6D8E}, //2611 #CJK UNIFIED IDEOGRAPH + {0xB244, 0x6DBC}, //2612 #CJK UNIFIED IDEOGRAPH + {0xB245, 0x6DF3}, //2613 #CJK UNIFIED IDEOGRAPH + {0xB246, 0x6DD9}, //2614 #CJK UNIFIED IDEOGRAPH + {0xB247, 0x6DB2}, //2615 #CJK UNIFIED IDEOGRAPH + {0xB248, 0x6DE1}, //2616 #CJK UNIFIED IDEOGRAPH + {0xB249, 0x6DCC}, //2617 #CJK UNIFIED IDEOGRAPH + {0xB24A, 0x6DE4}, //2618 #CJK UNIFIED IDEOGRAPH + {0xB24B, 0x6DFB}, //2619 #CJK UNIFIED IDEOGRAPH + {0xB24C, 0x6DFA}, //2620 #CJK UNIFIED IDEOGRAPH + {0xB24D, 0x6E05}, //2621 #CJK UNIFIED IDEOGRAPH + {0xB24E, 0x6DC7}, //2622 #CJK UNIFIED IDEOGRAPH + {0xB24F, 0x6DCB}, //2623 #CJK UNIFIED IDEOGRAPH + {0xB250, 0x6DAF}, //2624 #CJK UNIFIED IDEOGRAPH + {0xB251, 0x6DD1}, //2625 #CJK UNIFIED IDEOGRAPH + {0xB252, 0x6DAE}, //2626 #CJK UNIFIED IDEOGRAPH + {0xB253, 0x6DDE}, //2627 #CJK UNIFIED IDEOGRAPH + {0xB254, 0x6DF9}, //2628 #CJK UNIFIED IDEOGRAPH + {0xB255, 0x6DB8}, //2629 #CJK UNIFIED IDEOGRAPH + {0xB256, 0x6DF7}, //2630 #CJK UNIFIED IDEOGRAPH + {0xB257, 0x6DF5}, //2631 #CJK UNIFIED IDEOGRAPH + {0xB258, 0x6DC5}, //2632 #CJK UNIFIED IDEOGRAPH + {0xB259, 0x6DD2}, //2633 #CJK UNIFIED IDEOGRAPH + {0xB25A, 0x6E1A}, //2634 #CJK UNIFIED IDEOGRAPH + {0xB25B, 0x6DB5}, //2635 #CJK UNIFIED IDEOGRAPH + {0xB25C, 0x6DDA}, //2636 #CJK UNIFIED IDEOGRAPH + {0xB25D, 0x6DEB}, //2637 #CJK UNIFIED IDEOGRAPH + {0xB25E, 0x6DD8}, //2638 #CJK UNIFIED IDEOGRAPH + {0xB25F, 0x6DEA}, //2639 #CJK UNIFIED IDEOGRAPH + {0xB260, 0x6DF1}, //2640 #CJK UNIFIED IDEOGRAPH + {0xB261, 0x6DEE}, //2641 #CJK UNIFIED IDEOGRAPH + {0xB262, 0x6DE8}, //2642 #CJK UNIFIED IDEOGRAPH + {0xB263, 0x6DC6}, //2643 #CJK UNIFIED IDEOGRAPH + {0xB264, 0x6DC4}, //2644 #CJK UNIFIED IDEOGRAPH + {0xB265, 0x6DAA}, //2645 #CJK UNIFIED IDEOGRAPH + {0xB266, 0x6DEC}, //2646 #CJK UNIFIED IDEOGRAPH + {0xB267, 0x6DBF}, //2647 #CJK UNIFIED IDEOGRAPH + {0xB268, 0x6DE6}, //2648 #CJK UNIFIED IDEOGRAPH + {0xB269, 0x70F9}, //2649 #CJK UNIFIED IDEOGRAPH + {0xB26A, 0x7109}, //2650 #CJK UNIFIED IDEOGRAPH + {0xB26B, 0x710A}, //2651 #CJK UNIFIED IDEOGRAPH + {0xB26C, 0x70FD}, //2652 #CJK UNIFIED IDEOGRAPH + {0xB26D, 0x70EF}, //2653 #CJK UNIFIED IDEOGRAPH + {0xB26E, 0x723D}, //2654 #CJK UNIFIED IDEOGRAPH + {0xB26F, 0x727D}, //2655 #CJK UNIFIED IDEOGRAPH + {0xB270, 0x7281}, //2656 #CJK UNIFIED IDEOGRAPH + {0xB271, 0x731C}, //2657 #CJK UNIFIED IDEOGRAPH + {0xB272, 0x731B}, //2658 #CJK UNIFIED IDEOGRAPH + {0xB273, 0x7316}, //2659 #CJK UNIFIED IDEOGRAPH + {0xB274, 0x7313}, //2660 #CJK UNIFIED IDEOGRAPH + {0xB275, 0x7319}, //2661 #CJK UNIFIED IDEOGRAPH + {0xB276, 0x7387}, //2662 #CJK UNIFIED IDEOGRAPH + {0xB277, 0x7405}, //2663 #CJK UNIFIED IDEOGRAPH + {0xB278, 0x740A}, //2664 #CJK UNIFIED IDEOGRAPH + {0xB279, 0x7403}, //2665 #CJK UNIFIED IDEOGRAPH + {0xB27A, 0x7406}, //2666 #CJK UNIFIED IDEOGRAPH + {0xB27B, 0x73FE}, //2667 #CJK UNIFIED IDEOGRAPH + {0xB27C, 0x740D}, //2668 #CJK UNIFIED IDEOGRAPH + {0xB27D, 0x74E0}, //2669 #CJK UNIFIED IDEOGRAPH + {0xB27E, 0x74F6}, //2670 #CJK UNIFIED IDEOGRAPH + {0xB2A1, 0x74F7}, //2671 #CJK UNIFIED IDEOGRAPH + {0xB2A2, 0x751C}, //2672 #CJK UNIFIED IDEOGRAPH + {0xB2A3, 0x7522}, //2673 #CJK UNIFIED IDEOGRAPH + {0xB2A4, 0x7565}, //2674 #CJK UNIFIED IDEOGRAPH + {0xB2A5, 0x7566}, //2675 #CJK UNIFIED IDEOGRAPH + {0xB2A6, 0x7562}, //2676 #CJK UNIFIED IDEOGRAPH + {0xB2A7, 0x7570}, //2677 #CJK UNIFIED IDEOGRAPH + {0xB2A8, 0x758F}, //2678 #CJK UNIFIED IDEOGRAPH + {0xB2A9, 0x75D4}, //2679 #CJK UNIFIED IDEOGRAPH + {0xB2AA, 0x75D5}, //2680 #CJK UNIFIED IDEOGRAPH + {0xB2AB, 0x75B5}, //2681 #CJK UNIFIED IDEOGRAPH + {0xB2AC, 0x75CA}, //2682 #CJK UNIFIED IDEOGRAPH + {0xB2AD, 0x75CD}, //2683 #CJK UNIFIED IDEOGRAPH + {0xB2AE, 0x768E}, //2684 #CJK UNIFIED IDEOGRAPH + {0xB2AF, 0x76D4}, //2685 #CJK UNIFIED IDEOGRAPH + {0xB2B0, 0x76D2}, //2686 #CJK UNIFIED IDEOGRAPH + {0xB2B1, 0x76DB}, //2687 #CJK UNIFIED IDEOGRAPH + {0xB2B2, 0x7737}, //2688 #CJK UNIFIED IDEOGRAPH + {0xB2B3, 0x773E}, //2689 #CJK UNIFIED IDEOGRAPH + {0xB2B4, 0x773C}, //2690 #CJK UNIFIED IDEOGRAPH + {0xB2B5, 0x7736}, //2691 #CJK UNIFIED IDEOGRAPH + {0xB2B6, 0x7738}, //2692 #CJK UNIFIED IDEOGRAPH + {0xB2B7, 0x773A}, //2693 #CJK UNIFIED IDEOGRAPH + {0xB2B8, 0x786B}, //2694 #CJK UNIFIED IDEOGRAPH + {0xB2B9, 0x7843}, //2695 #CJK UNIFIED IDEOGRAPH + {0xB2BA, 0x784E}, //2696 #CJK UNIFIED IDEOGRAPH + {0xB2BB, 0x7965}, //2697 #CJK UNIFIED IDEOGRAPH + {0xB2BC, 0x7968}, //2698 #CJK UNIFIED IDEOGRAPH + {0xB2BD, 0x796D}, //2699 #CJK UNIFIED IDEOGRAPH + {0xB2BE, 0x79FB}, //2700 #CJK UNIFIED IDEOGRAPH + {0xB2BF, 0x7A92}, //2701 #CJK UNIFIED IDEOGRAPH + {0xB2C0, 0x7A95}, //2702 #CJK UNIFIED IDEOGRAPH + {0xB2C1, 0x7B20}, //2703 #CJK UNIFIED IDEOGRAPH + {0xB2C2, 0x7B28}, //2704 #CJK UNIFIED IDEOGRAPH + {0xB2C3, 0x7B1B}, //2705 #CJK UNIFIED IDEOGRAPH + {0xB2C4, 0x7B2C}, //2706 #CJK UNIFIED IDEOGRAPH + {0xB2C5, 0x7B26}, //2707 #CJK UNIFIED IDEOGRAPH + {0xB2C6, 0x7B19}, //2708 #CJK UNIFIED IDEOGRAPH + {0xB2C7, 0x7B1E}, //2709 #CJK UNIFIED IDEOGRAPH + {0xB2C8, 0x7B2E}, //2710 #CJK UNIFIED IDEOGRAPH + {0xB2C9, 0x7C92}, //2711 #CJK UNIFIED IDEOGRAPH + {0xB2CA, 0x7C97}, //2712 #CJK UNIFIED IDEOGRAPH + {0xB2CB, 0x7C95}, //2713 #CJK UNIFIED IDEOGRAPH + {0xB2CC, 0x7D46}, //2714 #CJK UNIFIED IDEOGRAPH + {0xB2CD, 0x7D43}, //2715 #CJK UNIFIED IDEOGRAPH + {0xB2CE, 0x7D71}, //2716 #CJK UNIFIED IDEOGRAPH + {0xB2CF, 0x7D2E}, //2717 #CJK UNIFIED IDEOGRAPH + {0xB2D0, 0x7D39}, //2718 #CJK UNIFIED IDEOGRAPH + {0xB2D1, 0x7D3C}, //2719 #CJK UNIFIED IDEOGRAPH + {0xB2D2, 0x7D40}, //2720 #CJK UNIFIED IDEOGRAPH + {0xB2D3, 0x7D30}, //2721 #CJK UNIFIED IDEOGRAPH + {0xB2D4, 0x7D33}, //2722 #CJK UNIFIED IDEOGRAPH + {0xB2D5, 0x7D44}, //2723 #CJK UNIFIED IDEOGRAPH + {0xB2D6, 0x7D2F}, //2724 #CJK UNIFIED IDEOGRAPH + {0xB2D7, 0x7D42}, //2725 #CJK UNIFIED IDEOGRAPH + {0xB2D8, 0x7D32}, //2726 #CJK UNIFIED IDEOGRAPH + {0xB2D9, 0x7D31}, //2727 #CJK UNIFIED IDEOGRAPH + {0xB2DA, 0x7F3D}, //2728 #CJK UNIFIED IDEOGRAPH + {0xB2DB, 0x7F9E}, //2729 #CJK UNIFIED IDEOGRAPH + {0xB2DC, 0x7F9A}, //2730 #CJK UNIFIED IDEOGRAPH + {0xB2DD, 0x7FCC}, //2731 #CJK UNIFIED IDEOGRAPH + {0xB2DE, 0x7FCE}, //2732 #CJK UNIFIED IDEOGRAPH + {0xB2DF, 0x7FD2}, //2733 #CJK UNIFIED IDEOGRAPH + {0xB2E0, 0x801C}, //2734 #CJK UNIFIED IDEOGRAPH + {0xB2E1, 0x804A}, //2735 #CJK UNIFIED IDEOGRAPH + {0xB2E2, 0x8046}, //2736 #CJK UNIFIED IDEOGRAPH + {0xB2E3, 0x812F}, //2737 #CJK UNIFIED IDEOGRAPH + {0xB2E4, 0x8116}, //2738 #CJK UNIFIED IDEOGRAPH + {0xB2E5, 0x8123}, //2739 #CJK UNIFIED IDEOGRAPH + {0xB2E6, 0x812B}, //2740 #CJK UNIFIED IDEOGRAPH + {0xB2E7, 0x8129}, //2741 #CJK UNIFIED IDEOGRAPH + {0xB2E8, 0x8130}, //2742 #CJK UNIFIED IDEOGRAPH + {0xB2E9, 0x8124}, //2743 #CJK UNIFIED IDEOGRAPH + {0xB2EA, 0x8202}, //2744 #CJK UNIFIED IDEOGRAPH + {0xB2EB, 0x8235}, //2745 #CJK UNIFIED IDEOGRAPH + {0xB2EC, 0x8237}, //2746 #CJK UNIFIED IDEOGRAPH + {0xB2ED, 0x8236}, //2747 #CJK UNIFIED IDEOGRAPH + {0xB2EE, 0x8239}, //2748 #CJK UNIFIED IDEOGRAPH + {0xB2EF, 0x838E}, //2749 #CJK UNIFIED IDEOGRAPH + {0xB2F0, 0x839E}, //2750 #CJK UNIFIED IDEOGRAPH + {0xB2F1, 0x8398}, //2751 #CJK UNIFIED IDEOGRAPH + {0xB2F2, 0x8378}, //2752 #CJK UNIFIED IDEOGRAPH + {0xB2F3, 0x83A2}, //2753 #CJK UNIFIED IDEOGRAPH + {0xB2F4, 0x8396}, //2754 #CJK UNIFIED IDEOGRAPH + {0xB2F5, 0x83BD}, //2755 #CJK UNIFIED IDEOGRAPH + {0xB2F6, 0x83AB}, //2756 #CJK UNIFIED IDEOGRAPH + {0xB2F7, 0x8392}, //2757 #CJK UNIFIED IDEOGRAPH + {0xB2F8, 0x838A}, //2758 #CJK UNIFIED IDEOGRAPH + {0xB2F9, 0x8393}, //2759 #CJK UNIFIED IDEOGRAPH + {0xB2FA, 0x8389}, //2760 #CJK UNIFIED IDEOGRAPH + {0xB2FB, 0x83A0}, //2761 #CJK UNIFIED IDEOGRAPH + {0xB2FC, 0x8377}, //2762 #CJK UNIFIED IDEOGRAPH + {0xB2FD, 0x837B}, //2763 #CJK UNIFIED IDEOGRAPH + {0xB2FE, 0x837C}, //2764 #CJK UNIFIED IDEOGRAPH + {0xB340, 0x8386}, //2765 #CJK UNIFIED IDEOGRAPH + {0xB341, 0x83A7}, //2766 #CJK UNIFIED IDEOGRAPH + {0xB342, 0x8655}, //2767 #CJK UNIFIED IDEOGRAPH + {0xB343, 0x5F6A}, //2768 #CJK UNIFIED IDEOGRAPH + {0xB344, 0x86C7}, //2769 #CJK UNIFIED IDEOGRAPH + {0xB345, 0x86C0}, //2770 #CJK UNIFIED IDEOGRAPH + {0xB346, 0x86B6}, //2771 #CJK UNIFIED IDEOGRAPH + {0xB347, 0x86C4}, //2772 #CJK UNIFIED IDEOGRAPH + {0xB348, 0x86B5}, //2773 #CJK UNIFIED IDEOGRAPH + {0xB349, 0x86C6}, //2774 #CJK UNIFIED IDEOGRAPH + {0xB34A, 0x86CB}, //2775 #CJK UNIFIED IDEOGRAPH + {0xB34B, 0x86B1}, //2776 #CJK UNIFIED IDEOGRAPH + {0xB34C, 0x86AF}, //2777 #CJK UNIFIED IDEOGRAPH + {0xB34D, 0x86C9}, //2778 #CJK UNIFIED IDEOGRAPH + {0xB34E, 0x8853}, //2779 #CJK UNIFIED IDEOGRAPH + {0xB34F, 0x889E}, //2780 #CJK UNIFIED IDEOGRAPH + {0xB350, 0x8888}, //2781 #CJK UNIFIED IDEOGRAPH + {0xB351, 0x88AB}, //2782 #CJK UNIFIED IDEOGRAPH + {0xB352, 0x8892}, //2783 #CJK UNIFIED IDEOGRAPH + {0xB353, 0x8896}, //2784 #CJK UNIFIED IDEOGRAPH + {0xB354, 0x888D}, //2785 #CJK UNIFIED IDEOGRAPH + {0xB355, 0x888B}, //2786 #CJK UNIFIED IDEOGRAPH + {0xB356, 0x8993}, //2787 #CJK UNIFIED IDEOGRAPH + {0xB357, 0x898F}, //2788 #CJK UNIFIED IDEOGRAPH + {0xB358, 0x8A2A}, //2789 #CJK UNIFIED IDEOGRAPH + {0xB359, 0x8A1D}, //2790 #CJK UNIFIED IDEOGRAPH + {0xB35A, 0x8A23}, //2791 #CJK UNIFIED IDEOGRAPH + {0xB35B, 0x8A25}, //2792 #CJK UNIFIED IDEOGRAPH + {0xB35C, 0x8A31}, //2793 #CJK UNIFIED IDEOGRAPH + {0xB35D, 0x8A2D}, //2794 #CJK UNIFIED IDEOGRAPH + {0xB35E, 0x8A1F}, //2795 #CJK UNIFIED IDEOGRAPH + {0xB35F, 0x8A1B}, //2796 #CJK UNIFIED IDEOGRAPH + {0xB360, 0x8A22}, //2797 #CJK UNIFIED IDEOGRAPH + {0xB361, 0x8C49}, //2798 #CJK UNIFIED IDEOGRAPH + {0xB362, 0x8C5A}, //2799 #CJK UNIFIED IDEOGRAPH + {0xB363, 0x8CA9}, //2800 #CJK UNIFIED IDEOGRAPH + {0xB364, 0x8CAC}, //2801 #CJK UNIFIED IDEOGRAPH + {0xB365, 0x8CAB}, //2802 #CJK UNIFIED IDEOGRAPH + {0xB366, 0x8CA8}, //2803 #CJK UNIFIED IDEOGRAPH + {0xB367, 0x8CAA}, //2804 #CJK UNIFIED IDEOGRAPH + {0xB368, 0x8CA7}, //2805 #CJK UNIFIED IDEOGRAPH + {0xB369, 0x8D67}, //2806 #CJK UNIFIED IDEOGRAPH + {0xB36A, 0x8D66}, //2807 #CJK UNIFIED IDEOGRAPH + {0xB36B, 0x8DBE}, //2808 #CJK UNIFIED IDEOGRAPH + {0xB36C, 0x8DBA}, //2809 #CJK UNIFIED IDEOGRAPH + {0xB36D, 0x8EDB}, //2810 #CJK UNIFIED IDEOGRAPH + {0xB36E, 0x8EDF}, //2811 #CJK UNIFIED IDEOGRAPH + {0xB36F, 0x9019}, //2812 #CJK UNIFIED IDEOGRAPH + {0xB370, 0x900D}, //2813 #CJK UNIFIED IDEOGRAPH + {0xB371, 0x901A}, //2814 #CJK UNIFIED IDEOGRAPH + {0xB372, 0x9017}, //2815 #CJK UNIFIED IDEOGRAPH + {0xB373, 0x9023}, //2816 #CJK UNIFIED IDEOGRAPH + {0xB374, 0x901F}, //2817 #CJK UNIFIED IDEOGRAPH + {0xB375, 0x901D}, //2818 #CJK UNIFIED IDEOGRAPH + {0xB376, 0x9010}, //2819 #CJK UNIFIED IDEOGRAPH + {0xB377, 0x9015}, //2820 #CJK UNIFIED IDEOGRAPH + {0xB378, 0x901E}, //2821 #CJK UNIFIED IDEOGRAPH + {0xB379, 0x9020}, //2822 #CJK UNIFIED IDEOGRAPH + {0xB37A, 0x900F}, //2823 #CJK UNIFIED IDEOGRAPH + {0xB37B, 0x9022}, //2824 #CJK UNIFIED IDEOGRAPH + {0xB37C, 0x9016}, //2825 #CJK UNIFIED IDEOGRAPH + {0xB37D, 0x901B}, //2826 #CJK UNIFIED IDEOGRAPH + {0xB37E, 0x9014}, //2827 #CJK UNIFIED IDEOGRAPH + {0xB3A1, 0x90E8}, //2828 #CJK UNIFIED IDEOGRAPH + {0xB3A2, 0x90ED}, //2829 #CJK UNIFIED IDEOGRAPH + {0xB3A3, 0x90FD}, //2830 #CJK UNIFIED IDEOGRAPH + {0xB3A4, 0x9157}, //2831 #CJK UNIFIED IDEOGRAPH + {0xB3A5, 0x91CE}, //2832 #CJK UNIFIED IDEOGRAPH + {0xB3A6, 0x91F5}, //2833 #CJK UNIFIED IDEOGRAPH + {0xB3A7, 0x91E6}, //2834 #CJK UNIFIED IDEOGRAPH + {0xB3A8, 0x91E3}, //2835 #CJK UNIFIED IDEOGRAPH + {0xB3A9, 0x91E7}, //2836 #CJK UNIFIED IDEOGRAPH + {0xB3AA, 0x91ED}, //2837 #CJK UNIFIED IDEOGRAPH + {0xB3AB, 0x91E9}, //2838 #CJK UNIFIED IDEOGRAPH + {0xB3AC, 0x9589}, //2839 #CJK UNIFIED IDEOGRAPH + {0xB3AD, 0x966A}, //2840 #CJK UNIFIED IDEOGRAPH + {0xB3AE, 0x9675}, //2841 #CJK UNIFIED IDEOGRAPH + {0xB3AF, 0x9673}, //2842 #CJK UNIFIED IDEOGRAPH + {0xB3B0, 0x9678}, //2843 #CJK UNIFIED IDEOGRAPH + {0xB3B1, 0x9670}, //2844 #CJK UNIFIED IDEOGRAPH + {0xB3B2, 0x9674}, //2845 #CJK UNIFIED IDEOGRAPH + {0xB3B3, 0x9676}, //2846 #CJK UNIFIED IDEOGRAPH + {0xB3B4, 0x9677}, //2847 #CJK UNIFIED IDEOGRAPH + {0xB3B5, 0x966C}, //2848 #CJK UNIFIED IDEOGRAPH + {0xB3B6, 0x96C0}, //2849 #CJK UNIFIED IDEOGRAPH + {0xB3B7, 0x96EA}, //2850 #CJK UNIFIED IDEOGRAPH + {0xB3B8, 0x96E9}, //2851 #CJK UNIFIED IDEOGRAPH + {0xB3B9, 0x7AE0}, //2852 #CJK UNIFIED IDEOGRAPH + {0xB3BA, 0x7ADF}, //2853 #CJK UNIFIED IDEOGRAPH + {0xB3BB, 0x9802}, //2854 #CJK UNIFIED IDEOGRAPH + {0xB3BC, 0x9803}, //2855 #CJK UNIFIED IDEOGRAPH + {0xB3BD, 0x9B5A}, //2856 #CJK UNIFIED IDEOGRAPH + {0xB3BE, 0x9CE5}, //2857 #CJK UNIFIED IDEOGRAPH + {0xB3BF, 0x9E75}, //2858 #CJK UNIFIED IDEOGRAPH + {0xB3C0, 0x9E7F}, //2859 #CJK UNIFIED IDEOGRAPH + {0xB3C1, 0x9EA5}, //2860 #CJK UNIFIED IDEOGRAPH + {0xB3C2, 0x9EBB}, //2861 #CJK UNIFIED IDEOGRAPH + {0xB3C3, 0x50A2}, //2862 #CJK UNIFIED IDEOGRAPH + {0xB3C4, 0x508D}, //2863 #CJK UNIFIED IDEOGRAPH + {0xB3C5, 0x5085}, //2864 #CJK UNIFIED IDEOGRAPH + {0xB3C6, 0x5099}, //2865 #CJK UNIFIED IDEOGRAPH + {0xB3C7, 0x5091}, //2866 #CJK UNIFIED IDEOGRAPH + {0xB3C8, 0x5080}, //2867 #CJK UNIFIED IDEOGRAPH + {0xB3C9, 0x5096}, //2868 #CJK UNIFIED IDEOGRAPH + {0xB3CA, 0x5098}, //2869 #CJK UNIFIED IDEOGRAPH + {0xB3CB, 0x509A}, //2870 #CJK UNIFIED IDEOGRAPH + {0xB3CC, 0x6700}, //2871 #CJK UNIFIED IDEOGRAPH + {0xB3CD, 0x51F1}, //2872 #CJK UNIFIED IDEOGRAPH + {0xB3CE, 0x5272}, //2873 #CJK UNIFIED IDEOGRAPH + {0xB3CF, 0x5274}, //2874 #CJK UNIFIED IDEOGRAPH + {0xB3D0, 0x5275}, //2875 #CJK UNIFIED IDEOGRAPH + {0xB3D1, 0x5269}, //2876 #CJK UNIFIED IDEOGRAPH + {0xB3D2, 0x52DE}, //2877 #CJK UNIFIED IDEOGRAPH + {0xB3D3, 0x52DD}, //2878 #CJK UNIFIED IDEOGRAPH + {0xB3D4, 0x52DB}, //2879 #CJK UNIFIED IDEOGRAPH + {0xB3D5, 0x535A}, //2880 #CJK UNIFIED IDEOGRAPH + {0xB3D6, 0x53A5}, //2881 #CJK UNIFIED IDEOGRAPH + {0xB3D7, 0x557B}, //2882 #CJK UNIFIED IDEOGRAPH + {0xB3D8, 0x5580}, //2883 #CJK UNIFIED IDEOGRAPH + {0xB3D9, 0x55A7}, //2884 #CJK UNIFIED IDEOGRAPH + {0xB3DA, 0x557C}, //2885 #CJK UNIFIED IDEOGRAPH + {0xB3DB, 0x558A}, //2886 #CJK UNIFIED IDEOGRAPH + {0xB3DC, 0x559D}, //2887 #CJK UNIFIED IDEOGRAPH + {0xB3DD, 0x5598}, //2888 #CJK UNIFIED IDEOGRAPH + {0xB3DE, 0x5582}, //2889 #CJK UNIFIED IDEOGRAPH + {0xB3DF, 0x559C}, //2890 #CJK UNIFIED IDEOGRAPH + {0xB3E0, 0x55AA}, //2891 #CJK UNIFIED IDEOGRAPH + {0xB3E1, 0x5594}, //2892 #CJK UNIFIED IDEOGRAPH + {0xB3E2, 0x5587}, //2893 #CJK UNIFIED IDEOGRAPH + {0xB3E3, 0x558B}, //2894 #CJK UNIFIED IDEOGRAPH + {0xB3E4, 0x5583}, //2895 #CJK UNIFIED IDEOGRAPH + {0xB3E5, 0x55B3}, //2896 #CJK UNIFIED IDEOGRAPH + {0xB3E6, 0x55AE}, //2897 #CJK UNIFIED IDEOGRAPH + {0xB3E7, 0x559F}, //2898 #CJK UNIFIED IDEOGRAPH + {0xB3E8, 0x553E}, //2899 #CJK UNIFIED IDEOGRAPH + {0xB3E9, 0x55B2}, //2900 #CJK UNIFIED IDEOGRAPH + {0xB3EA, 0x559A}, //2901 #CJK UNIFIED IDEOGRAPH + {0xB3EB, 0x55BB}, //2902 #CJK UNIFIED IDEOGRAPH + {0xB3EC, 0x55AC}, //2903 #CJK UNIFIED IDEOGRAPH + {0xB3ED, 0x55B1}, //2904 #CJK UNIFIED IDEOGRAPH + {0xB3EE, 0x557E}, //2905 #CJK UNIFIED IDEOGRAPH + {0xB3EF, 0x5589}, //2906 #CJK UNIFIED IDEOGRAPH + {0xB3F0, 0x55AB}, //2907 #CJK UNIFIED IDEOGRAPH + {0xB3F1, 0x5599}, //2908 #CJK UNIFIED IDEOGRAPH + {0xB3F2, 0x570D}, //2909 #CJK UNIFIED IDEOGRAPH + {0xB3F3, 0x582F}, //2910 #CJK UNIFIED IDEOGRAPH + {0xB3F4, 0x582A}, //2911 #CJK UNIFIED IDEOGRAPH + {0xB3F5, 0x5834}, //2912 #CJK UNIFIED IDEOGRAPH + {0xB3F6, 0x5824}, //2913 #CJK UNIFIED IDEOGRAPH + {0xB3F7, 0x5830}, //2914 #CJK UNIFIED IDEOGRAPH + {0xB3F8, 0x5831}, //2915 #CJK UNIFIED IDEOGRAPH + {0xB3F9, 0x5821}, //2916 #CJK UNIFIED IDEOGRAPH + {0xB3FA, 0x581D}, //2917 #CJK UNIFIED IDEOGRAPH + {0xB3FB, 0x5820}, //2918 #CJK UNIFIED IDEOGRAPH + {0xB3FC, 0x58F9}, //2919 #CJK UNIFIED IDEOGRAPH + {0xB3FD, 0x58FA}, //2920 #CJK UNIFIED IDEOGRAPH + {0xB3FE, 0x5960}, //2921 #CJK UNIFIED IDEOGRAPH + {0xB440, 0x5A77}, //2922 #CJK UNIFIED IDEOGRAPH + {0xB441, 0x5A9A}, //2923 #CJK UNIFIED IDEOGRAPH + {0xB442, 0x5A7F}, //2924 #CJK UNIFIED IDEOGRAPH + {0xB443, 0x5A92}, //2925 #CJK UNIFIED IDEOGRAPH + {0xB444, 0x5A9B}, //2926 #CJK UNIFIED IDEOGRAPH + {0xB445, 0x5AA7}, //2927 #CJK UNIFIED IDEOGRAPH + {0xB446, 0x5B73}, //2928 #CJK UNIFIED IDEOGRAPH + {0xB447, 0x5B71}, //2929 #CJK UNIFIED IDEOGRAPH + {0xB448, 0x5BD2}, //2930 #CJK UNIFIED IDEOGRAPH + {0xB449, 0x5BCC}, //2931 #CJK UNIFIED IDEOGRAPH + {0xB44A, 0x5BD3}, //2932 #CJK UNIFIED IDEOGRAPH + {0xB44B, 0x5BD0}, //2933 #CJK UNIFIED IDEOGRAPH + {0xB44C, 0x5C0A}, //2934 #CJK UNIFIED IDEOGRAPH + {0xB44D, 0x5C0B}, //2935 #CJK UNIFIED IDEOGRAPH + {0xB44E, 0x5C31}, //2936 #CJK UNIFIED IDEOGRAPH + {0xB44F, 0x5D4C}, //2937 #CJK UNIFIED IDEOGRAPH + {0xB450, 0x5D50}, //2938 #CJK UNIFIED IDEOGRAPH + {0xB451, 0x5D34}, //2939 #CJK UNIFIED IDEOGRAPH + {0xB452, 0x5D47}, //2940 #CJK UNIFIED IDEOGRAPH + {0xB453, 0x5DFD}, //2941 #CJK UNIFIED IDEOGRAPH + {0xB454, 0x5E45}, //2942 #CJK UNIFIED IDEOGRAPH + {0xB455, 0x5E3D}, //2943 #CJK UNIFIED IDEOGRAPH + {0xB456, 0x5E40}, //2944 #CJK UNIFIED IDEOGRAPH + {0xB457, 0x5E43}, //2945 #CJK UNIFIED IDEOGRAPH + {0xB458, 0x5E7E}, //2946 #CJK UNIFIED IDEOGRAPH + {0xB459, 0x5ECA}, //2947 #CJK UNIFIED IDEOGRAPH + {0xB45A, 0x5EC1}, //2948 #CJK UNIFIED IDEOGRAPH + {0xB45B, 0x5EC2}, //2949 #CJK UNIFIED IDEOGRAPH + {0xB45C, 0x5EC4}, //2950 #CJK UNIFIED IDEOGRAPH + {0xB45D, 0x5F3C}, //2951 #CJK UNIFIED IDEOGRAPH + {0xB45E, 0x5F6D}, //2952 #CJK UNIFIED IDEOGRAPH + {0xB45F, 0x5FA9}, //2953 #CJK UNIFIED IDEOGRAPH + {0xB460, 0x5FAA}, //2954 #CJK UNIFIED IDEOGRAPH + {0xB461, 0x5FA8}, //2955 #CJK UNIFIED IDEOGRAPH + {0xB462, 0x60D1}, //2956 #CJK UNIFIED IDEOGRAPH + {0xB463, 0x60E1}, //2957 #CJK UNIFIED IDEOGRAPH + {0xB464, 0x60B2}, //2958 #CJK UNIFIED IDEOGRAPH + {0xB465, 0x60B6}, //2959 #CJK UNIFIED IDEOGRAPH + {0xB466, 0x60E0}, //2960 #CJK UNIFIED IDEOGRAPH + {0xB467, 0x611C}, //2961 #CJK UNIFIED IDEOGRAPH + {0xB468, 0x6123}, //2962 #CJK UNIFIED IDEOGRAPH + {0xB469, 0x60FA}, //2963 #CJK UNIFIED IDEOGRAPH + {0xB46A, 0x6115}, //2964 #CJK UNIFIED IDEOGRAPH + {0xB46B, 0x60F0}, //2965 #CJK UNIFIED IDEOGRAPH + {0xB46C, 0x60FB}, //2966 #CJK UNIFIED IDEOGRAPH + {0xB46D, 0x60F4}, //2967 #CJK UNIFIED IDEOGRAPH + {0xB46E, 0x6168}, //2968 #CJK UNIFIED IDEOGRAPH + {0xB46F, 0x60F1}, //2969 #CJK UNIFIED IDEOGRAPH + {0xB470, 0x610E}, //2970 #CJK UNIFIED IDEOGRAPH + {0xB471, 0x60F6}, //2971 #CJK UNIFIED IDEOGRAPH + {0xB472, 0x6109}, //2972 #CJK UNIFIED IDEOGRAPH + {0xB473, 0x6100}, //2973 #CJK UNIFIED IDEOGRAPH + {0xB474, 0x6112}, //2974 #CJK UNIFIED IDEOGRAPH + {0xB475, 0x621F}, //2975 #CJK UNIFIED IDEOGRAPH + {0xB476, 0x6249}, //2976 #CJK UNIFIED IDEOGRAPH + {0xB477, 0x63A3}, //2977 #CJK UNIFIED IDEOGRAPH + {0xB478, 0x638C}, //2978 #CJK UNIFIED IDEOGRAPH + {0xB479, 0x63CF}, //2979 #CJK UNIFIED IDEOGRAPH + {0xB47A, 0x63C0}, //2980 #CJK UNIFIED IDEOGRAPH + {0xB47B, 0x63E9}, //2981 #CJK UNIFIED IDEOGRAPH + {0xB47C, 0x63C9}, //2982 #CJK UNIFIED IDEOGRAPH + {0xB47D, 0x63C6}, //2983 #CJK UNIFIED IDEOGRAPH + {0xB47E, 0x63CD}, //2984 #CJK UNIFIED IDEOGRAPH + {0xB4A1, 0x63D2}, //2985 #CJK UNIFIED IDEOGRAPH + {0xB4A2, 0x63E3}, //2986 #CJK UNIFIED IDEOGRAPH + {0xB4A3, 0x63D0}, //2987 #CJK UNIFIED IDEOGRAPH + {0xB4A4, 0x63E1}, //2988 #CJK UNIFIED IDEOGRAPH + {0xB4A5, 0x63D6}, //2989 #CJK UNIFIED IDEOGRAPH + {0xB4A6, 0x63ED}, //2990 #CJK UNIFIED IDEOGRAPH + {0xB4A7, 0x63EE}, //2991 #CJK UNIFIED IDEOGRAPH + {0xB4A8, 0x6376}, //2992 #CJK UNIFIED IDEOGRAPH + {0xB4A9, 0x63F4}, //2993 #CJK UNIFIED IDEOGRAPH + {0xB4AA, 0x63EA}, //2994 #CJK UNIFIED IDEOGRAPH + {0xB4AB, 0x63DB}, //2995 #CJK UNIFIED IDEOGRAPH + {0xB4AC, 0x6452}, //2996 #CJK UNIFIED IDEOGRAPH + {0xB4AD, 0x63DA}, //2997 #CJK UNIFIED IDEOGRAPH + {0xB4AE, 0x63F9}, //2998 #CJK UNIFIED IDEOGRAPH + {0xB4AF, 0x655E}, //2999 #CJK UNIFIED IDEOGRAPH + {0xB4B0, 0x6566}, //3000 #CJK UNIFIED IDEOGRAPH + {0xB4B1, 0x6562}, //3001 #CJK UNIFIED IDEOGRAPH + {0xB4B2, 0x6563}, //3002 #CJK UNIFIED IDEOGRAPH + {0xB4B3, 0x6591}, //3003 #CJK UNIFIED IDEOGRAPH + {0xB4B4, 0x6590}, //3004 #CJK UNIFIED IDEOGRAPH + {0xB4B5, 0x65AF}, //3005 #CJK UNIFIED IDEOGRAPH + {0xB4B6, 0x666E}, //3006 #CJK UNIFIED IDEOGRAPH + {0xB4B7, 0x6670}, //3007 #CJK UNIFIED IDEOGRAPH + {0xB4B8, 0x6674}, //3008 #CJK UNIFIED IDEOGRAPH + {0xB4B9, 0x6676}, //3009 #CJK UNIFIED IDEOGRAPH + {0xB4BA, 0x666F}, //3010 #CJK UNIFIED IDEOGRAPH + {0xB4BB, 0x6691}, //3011 #CJK UNIFIED IDEOGRAPH + {0xB4BC, 0x667A}, //3012 #CJK UNIFIED IDEOGRAPH + {0xB4BD, 0x667E}, //3013 #CJK UNIFIED IDEOGRAPH + {0xB4BE, 0x6677}, //3014 #CJK UNIFIED IDEOGRAPH + {0xB4BF, 0x66FE}, //3015 #CJK UNIFIED IDEOGRAPH + {0xB4C0, 0x66FF}, //3016 #CJK UNIFIED IDEOGRAPH + {0xB4C1, 0x671F}, //3017 #CJK UNIFIED IDEOGRAPH + {0xB4C2, 0x671D}, //3018 #CJK UNIFIED IDEOGRAPH + {0xB4C3, 0x68FA}, //3019 #CJK UNIFIED IDEOGRAPH + {0xB4C4, 0x68D5}, //3020 #CJK UNIFIED IDEOGRAPH + {0xB4C5, 0x68E0}, //3021 #CJK UNIFIED IDEOGRAPH + {0xB4C6, 0x68D8}, //3022 #CJK UNIFIED IDEOGRAPH + {0xB4C7, 0x68D7}, //3023 #CJK UNIFIED IDEOGRAPH + {0xB4C8, 0x6905}, //3024 #CJK UNIFIED IDEOGRAPH + {0xB4C9, 0x68DF}, //3025 #CJK UNIFIED IDEOGRAPH + {0xB4CA, 0x68F5}, //3026 #CJK UNIFIED IDEOGRAPH + {0xB4CB, 0x68EE}, //3027 #CJK UNIFIED IDEOGRAPH + {0xB4CC, 0x68E7}, //3028 #CJK UNIFIED IDEOGRAPH + {0xB4CD, 0x68F9}, //3029 #CJK UNIFIED IDEOGRAPH + {0xB4CE, 0x68D2}, //3030 #CJK UNIFIED IDEOGRAPH + {0xB4CF, 0x68F2}, //3031 #CJK UNIFIED IDEOGRAPH + {0xB4D0, 0x68E3}, //3032 #CJK UNIFIED IDEOGRAPH + {0xB4D1, 0x68CB}, //3033 #CJK UNIFIED IDEOGRAPH + {0xB4D2, 0x68CD}, //3034 #CJK UNIFIED IDEOGRAPH + {0xB4D3, 0x690D}, //3035 #CJK UNIFIED IDEOGRAPH + {0xB4D4, 0x6912}, //3036 #CJK UNIFIED IDEOGRAPH + {0xB4D5, 0x690E}, //3037 #CJK UNIFIED IDEOGRAPH + {0xB4D6, 0x68C9}, //3038 #CJK UNIFIED IDEOGRAPH + {0xB4D7, 0x68DA}, //3039 #CJK UNIFIED IDEOGRAPH + {0xB4D8, 0x696E}, //3040 #CJK UNIFIED IDEOGRAPH + {0xB4D9, 0x68FB}, //3041 #CJK UNIFIED IDEOGRAPH + {0xB4DA, 0x6B3E}, //3042 #CJK UNIFIED IDEOGRAPH + {0xB4DB, 0x6B3A}, //3043 #CJK UNIFIED IDEOGRAPH + {0xB4DC, 0x6B3D}, //3044 #CJK UNIFIED IDEOGRAPH + {0xB4DD, 0x6B98}, //3045 #CJK UNIFIED IDEOGRAPH + {0xB4DE, 0x6B96}, //3046 #CJK UNIFIED IDEOGRAPH + {0xB4DF, 0x6BBC}, //3047 #CJK UNIFIED IDEOGRAPH + {0xB4E0, 0x6BEF}, //3048 #CJK UNIFIED IDEOGRAPH + {0xB4E1, 0x6C2E}, //3049 #CJK UNIFIED IDEOGRAPH + {0xB4E2, 0x6C2F}, //3050 #CJK UNIFIED IDEOGRAPH + {0xB4E3, 0x6C2C}, //3051 #CJK UNIFIED IDEOGRAPH + {0xB4E4, 0x6E2F}, //3052 #CJK UNIFIED IDEOGRAPH + {0xB4E5, 0x6E38}, //3053 #CJK UNIFIED IDEOGRAPH + {0xB4E6, 0x6E54}, //3054 #CJK UNIFIED IDEOGRAPH + {0xB4E7, 0x6E21}, //3055 #CJK UNIFIED IDEOGRAPH + {0xB4E8, 0x6E32}, //3056 #CJK UNIFIED IDEOGRAPH + {0xB4E9, 0x6E67}, //3057 #CJK UNIFIED IDEOGRAPH + {0xB4EA, 0x6E4A}, //3058 #CJK UNIFIED IDEOGRAPH + {0xB4EB, 0x6E20}, //3059 #CJK UNIFIED IDEOGRAPH + {0xB4EC, 0x6E25}, //3060 #CJK UNIFIED IDEOGRAPH + {0xB4ED, 0x6E23}, //3061 #CJK UNIFIED IDEOGRAPH + {0xB4EE, 0x6E1B}, //3062 #CJK UNIFIED IDEOGRAPH + {0xB4EF, 0x6E5B}, //3063 #CJK UNIFIED IDEOGRAPH + {0xB4F0, 0x6E58}, //3064 #CJK UNIFIED IDEOGRAPH + {0xB4F1, 0x6E24}, //3065 #CJK UNIFIED IDEOGRAPH + {0xB4F2, 0x6E56}, //3066 #CJK UNIFIED IDEOGRAPH + {0xB4F3, 0x6E6E}, //3067 #CJK UNIFIED IDEOGRAPH + {0xB4F4, 0x6E2D}, //3068 #CJK UNIFIED IDEOGRAPH + {0xB4F5, 0x6E26}, //3069 #CJK UNIFIED IDEOGRAPH + {0xB4F6, 0x6E6F}, //3070 #CJK UNIFIED IDEOGRAPH + {0xB4F7, 0x6E34}, //3071 #CJK UNIFIED IDEOGRAPH + {0xB4F8, 0x6E4D}, //3072 #CJK UNIFIED IDEOGRAPH + {0xB4F9, 0x6E3A}, //3073 #CJK UNIFIED IDEOGRAPH + {0xB4FA, 0x6E2C}, //3074 #CJK UNIFIED IDEOGRAPH + {0xB4FB, 0x6E43}, //3075 #CJK UNIFIED IDEOGRAPH + {0xB4FC, 0x6E1D}, //3076 #CJK UNIFIED IDEOGRAPH + {0xB4FD, 0x6E3E}, //3077 #CJK UNIFIED IDEOGRAPH + {0xB4FE, 0x6ECB}, //3078 #CJK UNIFIED IDEOGRAPH + {0xB540, 0x6E89}, //3079 #CJK UNIFIED IDEOGRAPH + {0xB541, 0x6E19}, //3080 #CJK UNIFIED IDEOGRAPH + {0xB542, 0x6E4E}, //3081 #CJK UNIFIED IDEOGRAPH + {0xB543, 0x6E63}, //3082 #CJK UNIFIED IDEOGRAPH + {0xB544, 0x6E44}, //3083 #CJK UNIFIED IDEOGRAPH + {0xB545, 0x6E72}, //3084 #CJK UNIFIED IDEOGRAPH + {0xB546, 0x6E69}, //3085 #CJK UNIFIED IDEOGRAPH + {0xB547, 0x6E5F}, //3086 #CJK UNIFIED IDEOGRAPH + {0xB548, 0x7119}, //3087 #CJK UNIFIED IDEOGRAPH + {0xB549, 0x711A}, //3088 #CJK UNIFIED IDEOGRAPH + {0xB54A, 0x7126}, //3089 #CJK UNIFIED IDEOGRAPH + {0xB54B, 0x7130}, //3090 #CJK UNIFIED IDEOGRAPH + {0xB54C, 0x7121}, //3091 #CJK UNIFIED IDEOGRAPH + {0xB54D, 0x7136}, //3092 #CJK UNIFIED IDEOGRAPH + {0xB54E, 0x716E}, //3093 #CJK UNIFIED IDEOGRAPH + {0xB54F, 0x711C}, //3094 #CJK UNIFIED IDEOGRAPH + {0xB550, 0x724C}, //3095 #CJK UNIFIED IDEOGRAPH + {0xB551, 0x7284}, //3096 #CJK UNIFIED IDEOGRAPH + {0xB552, 0x7280}, //3097 #CJK UNIFIED IDEOGRAPH + {0xB553, 0x7336}, //3098 #CJK UNIFIED IDEOGRAPH + {0xB554, 0x7325}, //3099 #CJK UNIFIED IDEOGRAPH + {0xB555, 0x7334}, //3100 #CJK UNIFIED IDEOGRAPH + {0xB556, 0x7329}, //3101 #CJK UNIFIED IDEOGRAPH + {0xB557, 0x743A}, //3102 #CJK UNIFIED IDEOGRAPH + {0xB558, 0x742A}, //3103 #CJK UNIFIED IDEOGRAPH + {0xB559, 0x7433}, //3104 #CJK UNIFIED IDEOGRAPH + {0xB55A, 0x7422}, //3105 #CJK UNIFIED IDEOGRAPH + {0xB55B, 0x7425}, //3106 #CJK UNIFIED IDEOGRAPH + {0xB55C, 0x7435}, //3107 #CJK UNIFIED IDEOGRAPH + {0xB55D, 0x7436}, //3108 #CJK UNIFIED IDEOGRAPH + {0xB55E, 0x7434}, //3109 #CJK UNIFIED IDEOGRAPH + {0xB55F, 0x742F}, //3110 #CJK UNIFIED IDEOGRAPH + {0xB560, 0x741B}, //3111 #CJK UNIFIED IDEOGRAPH + {0xB561, 0x7426}, //3112 #CJK UNIFIED IDEOGRAPH + {0xB562, 0x7428}, //3113 #CJK UNIFIED IDEOGRAPH + {0xB563, 0x7525}, //3114 #CJK UNIFIED IDEOGRAPH + {0xB564, 0x7526}, //3115 #CJK UNIFIED IDEOGRAPH + {0xB565, 0x756B}, //3116 #CJK UNIFIED IDEOGRAPH + {0xB566, 0x756A}, //3117 #CJK UNIFIED IDEOGRAPH + {0xB567, 0x75E2}, //3118 #CJK UNIFIED IDEOGRAPH + {0xB568, 0x75DB}, //3119 #CJK UNIFIED IDEOGRAPH + {0xB569, 0x75E3}, //3120 #CJK UNIFIED IDEOGRAPH + {0xB56A, 0x75D9}, //3121 #CJK UNIFIED IDEOGRAPH + {0xB56B, 0x75D8}, //3122 #CJK UNIFIED IDEOGRAPH + {0xB56C, 0x75DE}, //3123 #CJK UNIFIED IDEOGRAPH + {0xB56D, 0x75E0}, //3124 #CJK UNIFIED IDEOGRAPH + {0xB56E, 0x767B}, //3125 #CJK UNIFIED IDEOGRAPH + {0xB56F, 0x767C}, //3126 #CJK UNIFIED IDEOGRAPH + {0xB570, 0x7696}, //3127 #CJK UNIFIED IDEOGRAPH + {0xB571, 0x7693}, //3128 #CJK UNIFIED IDEOGRAPH + {0xB572, 0x76B4}, //3129 #CJK UNIFIED IDEOGRAPH + {0xB573, 0x76DC}, //3130 #CJK UNIFIED IDEOGRAPH + {0xB574, 0x774F}, //3131 #CJK UNIFIED IDEOGRAPH + {0xB575, 0x77ED}, //3132 #CJK UNIFIED IDEOGRAPH + {0xB576, 0x785D}, //3133 #CJK UNIFIED IDEOGRAPH + {0xB577, 0x786C}, //3134 #CJK UNIFIED IDEOGRAPH + {0xB578, 0x786F}, //3135 #CJK UNIFIED IDEOGRAPH + {0xB579, 0x7A0D}, //3136 #CJK UNIFIED IDEOGRAPH + {0xB57A, 0x7A08}, //3137 #CJK UNIFIED IDEOGRAPH + {0xB57B, 0x7A0B}, //3138 #CJK UNIFIED IDEOGRAPH + {0xB57C, 0x7A05}, //3139 #CJK UNIFIED IDEOGRAPH + {0xB57D, 0x7A00}, //3140 #CJK UNIFIED IDEOGRAPH + {0xB57E, 0x7A98}, //3141 #CJK UNIFIED IDEOGRAPH + {0xB5A1, 0x7A97}, //3142 #CJK UNIFIED IDEOGRAPH + {0xB5A2, 0x7A96}, //3143 #CJK UNIFIED IDEOGRAPH + {0xB5A3, 0x7AE5}, //3144 #CJK UNIFIED IDEOGRAPH + {0xB5A4, 0x7AE3}, //3145 #CJK UNIFIED IDEOGRAPH + {0xB5A5, 0x7B49}, //3146 #CJK UNIFIED IDEOGRAPH + {0xB5A6, 0x7B56}, //3147 #CJK UNIFIED IDEOGRAPH + {0xB5A7, 0x7B46}, //3148 #CJK UNIFIED IDEOGRAPH + {0xB5A8, 0x7B50}, //3149 #CJK UNIFIED IDEOGRAPH + {0xB5A9, 0x7B52}, //3150 #CJK UNIFIED IDEOGRAPH + {0xB5AA, 0x7B54}, //3151 #CJK UNIFIED IDEOGRAPH + {0xB5AB, 0x7B4D}, //3152 #CJK UNIFIED IDEOGRAPH + {0xB5AC, 0x7B4B}, //3153 #CJK UNIFIED IDEOGRAPH + {0xB5AD, 0x7B4F}, //3154 #CJK UNIFIED IDEOGRAPH + {0xB5AE, 0x7B51}, //3155 #CJK UNIFIED IDEOGRAPH + {0xB5AF, 0x7C9F}, //3156 #CJK UNIFIED IDEOGRAPH + {0xB5B0, 0x7CA5}, //3157 #CJK UNIFIED IDEOGRAPH + {0xB5B1, 0x7D5E}, //3158 #CJK UNIFIED IDEOGRAPH + {0xB5B2, 0x7D50}, //3159 #CJK UNIFIED IDEOGRAPH + {0xB5B3, 0x7D68}, //3160 #CJK UNIFIED IDEOGRAPH + {0xB5B4, 0x7D55}, //3161 #CJK UNIFIED IDEOGRAPH + {0xB5B5, 0x7D2B}, //3162 #CJK UNIFIED IDEOGRAPH + {0xB5B6, 0x7D6E}, //3163 #CJK UNIFIED IDEOGRAPH + {0xB5B7, 0x7D72}, //3164 #CJK UNIFIED IDEOGRAPH + {0xB5B8, 0x7D61}, //3165 #CJK UNIFIED IDEOGRAPH + {0xB5B9, 0x7D66}, //3166 #CJK UNIFIED IDEOGRAPH + {0xB5BA, 0x7D62}, //3167 #CJK UNIFIED IDEOGRAPH + {0xB5BB, 0x7D70}, //3168 #CJK UNIFIED IDEOGRAPH + {0xB5BC, 0x7D73}, //3169 #CJK UNIFIED IDEOGRAPH + {0xB5BD, 0x5584}, //3170 #CJK UNIFIED IDEOGRAPH + {0xB5BE, 0x7FD4}, //3171 #CJK UNIFIED IDEOGRAPH + {0xB5BF, 0x7FD5}, //3172 #CJK UNIFIED IDEOGRAPH + {0xB5C0, 0x800B}, //3173 #CJK UNIFIED IDEOGRAPH + {0xB5C1, 0x8052}, //3174 #CJK UNIFIED IDEOGRAPH + {0xB5C2, 0x8085}, //3175 #CJK UNIFIED IDEOGRAPH + {0xB5C3, 0x8155}, //3176 #CJK UNIFIED IDEOGRAPH + {0xB5C4, 0x8154}, //3177 #CJK UNIFIED IDEOGRAPH + {0xB5C5, 0x814B}, //3178 #CJK UNIFIED IDEOGRAPH + {0xB5C6, 0x8151}, //3179 #CJK UNIFIED IDEOGRAPH + {0xB5C7, 0x814E}, //3180 #CJK UNIFIED IDEOGRAPH + {0xB5C8, 0x8139}, //3181 #CJK UNIFIED IDEOGRAPH + {0xB5C9, 0x8146}, //3182 #CJK UNIFIED IDEOGRAPH + {0xB5CA, 0x813E}, //3183 #CJK UNIFIED IDEOGRAPH + {0xB5CB, 0x814C}, //3184 #CJK UNIFIED IDEOGRAPH + {0xB5CC, 0x8153}, //3185 #CJK UNIFIED IDEOGRAPH + {0xB5CD, 0x8174}, //3186 #CJK UNIFIED IDEOGRAPH + {0xB5CE, 0x8212}, //3187 #CJK UNIFIED IDEOGRAPH + {0xB5CF, 0x821C}, //3188 #CJK UNIFIED IDEOGRAPH + {0xB5D0, 0x83E9}, //3189 #CJK UNIFIED IDEOGRAPH + {0xB5D1, 0x8403}, //3190 #CJK UNIFIED IDEOGRAPH + {0xB5D2, 0x83F8}, //3191 #CJK UNIFIED IDEOGRAPH + {0xB5D3, 0x840D}, //3192 #CJK UNIFIED IDEOGRAPH + {0xB5D4, 0x83E0}, //3193 #CJK UNIFIED IDEOGRAPH + {0xB5D5, 0x83C5}, //3194 #CJK UNIFIED IDEOGRAPH + {0xB5D6, 0x840B}, //3195 #CJK UNIFIED IDEOGRAPH + {0xB5D7, 0x83C1}, //3196 #CJK UNIFIED IDEOGRAPH + {0xB5D8, 0x83EF}, //3197 #CJK UNIFIED IDEOGRAPH + {0xB5D9, 0x83F1}, //3198 #CJK UNIFIED IDEOGRAPH + {0xB5DA, 0x83F4}, //3199 #CJK UNIFIED IDEOGRAPH + {0xB5DB, 0x8457}, //3200 #CJK UNIFIED IDEOGRAPH + {0xB5DC, 0x840A}, //3201 #CJK UNIFIED IDEOGRAPH + {0xB5DD, 0x83F0}, //3202 #CJK UNIFIED IDEOGRAPH + {0xB5DE, 0x840C}, //3203 #CJK UNIFIED IDEOGRAPH + {0xB5DF, 0x83CC}, //3204 #CJK UNIFIED IDEOGRAPH + {0xB5E0, 0x83FD}, //3205 #CJK UNIFIED IDEOGRAPH + {0xB5E1, 0x83F2}, //3206 #CJK UNIFIED IDEOGRAPH + {0xB5E2, 0x83CA}, //3207 #CJK UNIFIED IDEOGRAPH + {0xB5E3, 0x8438}, //3208 #CJK UNIFIED IDEOGRAPH + {0xB5E4, 0x840E}, //3209 #CJK UNIFIED IDEOGRAPH + {0xB5E5, 0x8404}, //3210 #CJK UNIFIED IDEOGRAPH + {0xB5E6, 0x83DC}, //3211 #CJK UNIFIED IDEOGRAPH + {0xB5E7, 0x8407}, //3212 #CJK UNIFIED IDEOGRAPH + {0xB5E8, 0x83D4}, //3213 #CJK UNIFIED IDEOGRAPH + {0xB5E9, 0x83DF}, //3214 #CJK UNIFIED IDEOGRAPH + {0xB5EA, 0x865B}, //3215 #CJK UNIFIED IDEOGRAPH + {0xB5EB, 0x86DF}, //3216 #CJK UNIFIED IDEOGRAPH + {0xB5EC, 0x86D9}, //3217 #CJK UNIFIED IDEOGRAPH + {0xB5ED, 0x86ED}, //3218 #CJK UNIFIED IDEOGRAPH + {0xB5EE, 0x86D4}, //3219 #CJK UNIFIED IDEOGRAPH + {0xB5EF, 0x86DB}, //3220 #CJK UNIFIED IDEOGRAPH + {0xB5F0, 0x86E4}, //3221 #CJK UNIFIED IDEOGRAPH + {0xB5F1, 0x86D0}, //3222 #CJK UNIFIED IDEOGRAPH + {0xB5F2, 0x86DE}, //3223 #CJK UNIFIED IDEOGRAPH + {0xB5F3, 0x8857}, //3224 #CJK UNIFIED IDEOGRAPH + {0xB5F4, 0x88C1}, //3225 #CJK UNIFIED IDEOGRAPH + {0xB5F5, 0x88C2}, //3226 #CJK UNIFIED IDEOGRAPH + {0xB5F6, 0x88B1}, //3227 #CJK UNIFIED IDEOGRAPH + {0xB5F7, 0x8983}, //3228 #CJK UNIFIED IDEOGRAPH + {0xB5F8, 0x8996}, //3229 #CJK UNIFIED IDEOGRAPH + {0xB5F9, 0x8A3B}, //3230 #CJK UNIFIED IDEOGRAPH + {0xB5FA, 0x8A60}, //3231 #CJK UNIFIED IDEOGRAPH + {0xB5FB, 0x8A55}, //3232 #CJK UNIFIED IDEOGRAPH + {0xB5FC, 0x8A5E}, //3233 #CJK UNIFIED IDEOGRAPH + {0xB5FD, 0x8A3C}, //3234 #CJK UNIFIED IDEOGRAPH + {0xB5FE, 0x8A41}, //3235 #CJK UNIFIED IDEOGRAPH + {0xB640, 0x8A54}, //3236 #CJK UNIFIED IDEOGRAPH + {0xB641, 0x8A5B}, //3237 #CJK UNIFIED IDEOGRAPH + {0xB642, 0x8A50}, //3238 #CJK UNIFIED IDEOGRAPH + {0xB643, 0x8A46}, //3239 #CJK UNIFIED IDEOGRAPH + {0xB644, 0x8A34}, //3240 #CJK UNIFIED IDEOGRAPH + {0xB645, 0x8A3A}, //3241 #CJK UNIFIED IDEOGRAPH + {0xB646, 0x8A36}, //3242 #CJK UNIFIED IDEOGRAPH + {0xB647, 0x8A56}, //3243 #CJK UNIFIED IDEOGRAPH + {0xB648, 0x8C61}, //3244 #CJK UNIFIED IDEOGRAPH + {0xB649, 0x8C82}, //3245 #CJK UNIFIED IDEOGRAPH + {0xB64A, 0x8CAF}, //3246 #CJK UNIFIED IDEOGRAPH + {0xB64B, 0x8CBC}, //3247 #CJK UNIFIED IDEOGRAPH + {0xB64C, 0x8CB3}, //3248 #CJK UNIFIED IDEOGRAPH + {0xB64D, 0x8CBD}, //3249 #CJK UNIFIED IDEOGRAPH + {0xB64E, 0x8CC1}, //3250 #CJK UNIFIED IDEOGRAPH + {0xB64F, 0x8CBB}, //3251 #CJK UNIFIED IDEOGRAPH + {0xB650, 0x8CC0}, //3252 #CJK UNIFIED IDEOGRAPH + {0xB651, 0x8CB4}, //3253 #CJK UNIFIED IDEOGRAPH + {0xB652, 0x8CB7}, //3254 #CJK UNIFIED IDEOGRAPH + {0xB653, 0x8CB6}, //3255 #CJK UNIFIED IDEOGRAPH + {0xB654, 0x8CBF}, //3256 #CJK UNIFIED IDEOGRAPH + {0xB655, 0x8CB8}, //3257 #CJK UNIFIED IDEOGRAPH + {0xB656, 0x8D8A}, //3258 #CJK UNIFIED IDEOGRAPH + {0xB657, 0x8D85}, //3259 #CJK UNIFIED IDEOGRAPH + {0xB658, 0x8D81}, //3260 #CJK UNIFIED IDEOGRAPH + {0xB659, 0x8DCE}, //3261 #CJK UNIFIED IDEOGRAPH + {0xB65A, 0x8DDD}, //3262 #CJK UNIFIED IDEOGRAPH + {0xB65B, 0x8DCB}, //3263 #CJK UNIFIED IDEOGRAPH + {0xB65C, 0x8DDA}, //3264 #CJK UNIFIED IDEOGRAPH + {0xB65D, 0x8DD1}, //3265 #CJK UNIFIED IDEOGRAPH + {0xB65E, 0x8DCC}, //3266 #CJK UNIFIED IDEOGRAPH + {0xB65F, 0x8DDB}, //3267 #CJK UNIFIED IDEOGRAPH + {0xB660, 0x8DC6}, //3268 #CJK UNIFIED IDEOGRAPH + {0xB661, 0x8EFB}, //3269 #CJK UNIFIED IDEOGRAPH + {0xB662, 0x8EF8}, //3270 #CJK UNIFIED IDEOGRAPH + {0xB663, 0x8EFC}, //3271 #CJK UNIFIED IDEOGRAPH + {0xB664, 0x8F9C}, //3272 #CJK UNIFIED IDEOGRAPH + {0xB665, 0x902E}, //3273 #CJK UNIFIED IDEOGRAPH + {0xB666, 0x9035}, //3274 #CJK UNIFIED IDEOGRAPH + {0xB667, 0x9031}, //3275 #CJK UNIFIED IDEOGRAPH + {0xB668, 0x9038}, //3276 #CJK UNIFIED IDEOGRAPH + {0xB669, 0x9032}, //3277 #CJK UNIFIED IDEOGRAPH + {0xB66A, 0x9036}, //3278 #CJK UNIFIED IDEOGRAPH + {0xB66B, 0x9102}, //3279 #CJK UNIFIED IDEOGRAPH + {0xB66C, 0x90F5}, //3280 #CJK UNIFIED IDEOGRAPH + {0xB66D, 0x9109}, //3281 #CJK UNIFIED IDEOGRAPH + {0xB66E, 0x90FE}, //3282 #CJK UNIFIED IDEOGRAPH + {0xB66F, 0x9163}, //3283 #CJK UNIFIED IDEOGRAPH + {0xB670, 0x9165}, //3284 #CJK UNIFIED IDEOGRAPH + {0xB671, 0x91CF}, //3285 #CJK UNIFIED IDEOGRAPH + {0xB672, 0x9214}, //3286 #CJK UNIFIED IDEOGRAPH + {0xB673, 0x9215}, //3287 #CJK UNIFIED IDEOGRAPH + {0xB674, 0x9223}, //3288 #CJK UNIFIED IDEOGRAPH + {0xB675, 0x9209}, //3289 #CJK UNIFIED IDEOGRAPH + {0xB676, 0x921E}, //3290 #CJK UNIFIED IDEOGRAPH + {0xB677, 0x920D}, //3291 #CJK UNIFIED IDEOGRAPH + {0xB678, 0x9210}, //3292 #CJK UNIFIED IDEOGRAPH + {0xB679, 0x9207}, //3293 #CJK UNIFIED IDEOGRAPH + {0xB67A, 0x9211}, //3294 #CJK UNIFIED IDEOGRAPH + {0xB67B, 0x9594}, //3295 #CJK UNIFIED IDEOGRAPH + {0xB67C, 0x958F}, //3296 #CJK UNIFIED IDEOGRAPH + {0xB67D, 0x958B}, //3297 #CJK UNIFIED IDEOGRAPH + {0xB67E, 0x9591}, //3298 #CJK UNIFIED IDEOGRAPH + {0xB6A1, 0x9593}, //3299 #CJK UNIFIED IDEOGRAPH + {0xB6A2, 0x9592}, //3300 #CJK UNIFIED IDEOGRAPH + {0xB6A3, 0x958E}, //3301 #CJK UNIFIED IDEOGRAPH + {0xB6A4, 0x968A}, //3302 #CJK UNIFIED IDEOGRAPH + {0xB6A5, 0x968E}, //3303 #CJK UNIFIED IDEOGRAPH + {0xB6A6, 0x968B}, //3304 #CJK UNIFIED IDEOGRAPH + {0xB6A7, 0x967D}, //3305 #CJK UNIFIED IDEOGRAPH + {0xB6A8, 0x9685}, //3306 #CJK UNIFIED IDEOGRAPH + {0xB6A9, 0x9686}, //3307 #CJK UNIFIED IDEOGRAPH + {0xB6AA, 0x968D}, //3308 #CJK UNIFIED IDEOGRAPH + {0xB6AB, 0x9672}, //3309 #CJK UNIFIED IDEOGRAPH + {0xB6AC, 0x9684}, //3310 #CJK UNIFIED IDEOGRAPH + {0xB6AD, 0x96C1}, //3311 #CJK UNIFIED IDEOGRAPH + {0xB6AE, 0x96C5}, //3312 #CJK UNIFIED IDEOGRAPH + {0xB6AF, 0x96C4}, //3313 #CJK UNIFIED IDEOGRAPH + {0xB6B0, 0x96C6}, //3314 #CJK UNIFIED IDEOGRAPH + {0xB6B1, 0x96C7}, //3315 #CJK UNIFIED IDEOGRAPH + {0xB6B2, 0x96EF}, //3316 #CJK UNIFIED IDEOGRAPH + {0xB6B3, 0x96F2}, //3317 #CJK UNIFIED IDEOGRAPH + {0xB6B4, 0x97CC}, //3318 #CJK UNIFIED IDEOGRAPH + {0xB6B5, 0x9805}, //3319 #CJK UNIFIED IDEOGRAPH + {0xB6B6, 0x9806}, //3320 #CJK UNIFIED IDEOGRAPH + {0xB6B7, 0x9808}, //3321 #CJK UNIFIED IDEOGRAPH + {0xB6B8, 0x98E7}, //3322 #CJK UNIFIED IDEOGRAPH + {0xB6B9, 0x98EA}, //3323 #CJK UNIFIED IDEOGRAPH + {0xB6BA, 0x98EF}, //3324 #CJK UNIFIED IDEOGRAPH + {0xB6BB, 0x98E9}, //3325 #CJK UNIFIED IDEOGRAPH + {0xB6BC, 0x98F2}, //3326 #CJK UNIFIED IDEOGRAPH + {0xB6BD, 0x98ED}, //3327 #CJK UNIFIED IDEOGRAPH + {0xB6BE, 0x99AE}, //3328 #CJK UNIFIED IDEOGRAPH + {0xB6BF, 0x99AD}, //3329 #CJK UNIFIED IDEOGRAPH + {0xB6C0, 0x9EC3}, //3330 #CJK UNIFIED IDEOGRAPH + {0xB6C1, 0x9ECD}, //3331 #CJK UNIFIED IDEOGRAPH + {0xB6C2, 0x9ED1}, //3332 #CJK UNIFIED IDEOGRAPH + {0xB6C3, 0x4E82}, //3333 #CJK UNIFIED IDEOGRAPH + {0xB6C4, 0x50AD}, //3334 #CJK UNIFIED IDEOGRAPH + {0xB6C5, 0x50B5}, //3335 #CJK UNIFIED IDEOGRAPH + {0xB6C6, 0x50B2}, //3336 #CJK UNIFIED IDEOGRAPH + {0xB6C7, 0x50B3}, //3337 #CJK UNIFIED IDEOGRAPH + {0xB6C8, 0x50C5}, //3338 #CJK UNIFIED IDEOGRAPH + {0xB6C9, 0x50BE}, //3339 #CJK UNIFIED IDEOGRAPH + {0xB6CA, 0x50AC}, //3340 #CJK UNIFIED IDEOGRAPH + {0xB6CB, 0x50B7}, //3341 #CJK UNIFIED IDEOGRAPH + {0xB6CC, 0x50BB}, //3342 #CJK UNIFIED IDEOGRAPH + {0xB6CD, 0x50AF}, //3343 #CJK UNIFIED IDEOGRAPH + {0xB6CE, 0x50C7}, //3344 #CJK UNIFIED IDEOGRAPH + {0xB6CF, 0x527F}, //3345 #CJK UNIFIED IDEOGRAPH + {0xB6D0, 0x5277}, //3346 #CJK UNIFIED IDEOGRAPH + {0xB6D1, 0x527D}, //3347 #CJK UNIFIED IDEOGRAPH + {0xB6D2, 0x52DF}, //3348 #CJK UNIFIED IDEOGRAPH + {0xB6D3, 0x52E6}, //3349 #CJK UNIFIED IDEOGRAPH + {0xB6D4, 0x52E4}, //3350 #CJK UNIFIED IDEOGRAPH + {0xB6D5, 0x52E2}, //3351 #CJK UNIFIED IDEOGRAPH + {0xB6D6, 0x52E3}, //3352 #CJK UNIFIED IDEOGRAPH + {0xB6D7, 0x532F}, //3353 #CJK UNIFIED IDEOGRAPH + {0xB6D8, 0x55DF}, //3354 #CJK UNIFIED IDEOGRAPH + {0xB6D9, 0x55E8}, //3355 #CJK UNIFIED IDEOGRAPH + {0xB6DA, 0x55D3}, //3356 #CJK UNIFIED IDEOGRAPH + {0xB6DB, 0x55E6}, //3357 #CJK UNIFIED IDEOGRAPH + {0xB6DC, 0x55CE}, //3358 #CJK UNIFIED IDEOGRAPH + {0xB6DD, 0x55DC}, //3359 #CJK UNIFIED IDEOGRAPH + {0xB6DE, 0x55C7}, //3360 #CJK UNIFIED IDEOGRAPH + {0xB6DF, 0x55D1}, //3361 #CJK UNIFIED IDEOGRAPH + {0xB6E0, 0x55E3}, //3362 #CJK UNIFIED IDEOGRAPH + {0xB6E1, 0x55E4}, //3363 #CJK UNIFIED IDEOGRAPH + {0xB6E2, 0x55EF}, //3364 #CJK UNIFIED IDEOGRAPH + {0xB6E3, 0x55DA}, //3365 #CJK UNIFIED IDEOGRAPH + {0xB6E4, 0x55E1}, //3366 #CJK UNIFIED IDEOGRAPH + {0xB6E5, 0x55C5}, //3367 #CJK UNIFIED IDEOGRAPH + {0xB6E6, 0x55C6}, //3368 #CJK UNIFIED IDEOGRAPH + {0xB6E7, 0x55E5}, //3369 #CJK UNIFIED IDEOGRAPH + {0xB6E8, 0x55C9}, //3370 #CJK UNIFIED IDEOGRAPH + {0xB6E9, 0x5712}, //3371 #CJK UNIFIED IDEOGRAPH + {0xB6EA, 0x5713}, //3372 #CJK UNIFIED IDEOGRAPH + {0xB6EB, 0x585E}, //3373 #CJK UNIFIED IDEOGRAPH + {0xB6EC, 0x5851}, //3374 #CJK UNIFIED IDEOGRAPH + {0xB6ED, 0x5858}, //3375 #CJK UNIFIED IDEOGRAPH + {0xB6EE, 0x5857}, //3376 #CJK UNIFIED IDEOGRAPH + {0xB6EF, 0x585A}, //3377 #CJK UNIFIED IDEOGRAPH + {0xB6F0, 0x5854}, //3378 #CJK UNIFIED IDEOGRAPH + {0xB6F1, 0x586B}, //3379 #CJK UNIFIED IDEOGRAPH + {0xB6F2, 0x584C}, //3380 #CJK UNIFIED IDEOGRAPH + {0xB6F3, 0x586D}, //3381 #CJK UNIFIED IDEOGRAPH + {0xB6F4, 0x584A}, //3382 #CJK UNIFIED IDEOGRAPH + {0xB6F5, 0x5862}, //3383 #CJK UNIFIED IDEOGRAPH + {0xB6F6, 0x5852}, //3384 #CJK UNIFIED IDEOGRAPH + {0xB6F7, 0x584B}, //3385 #CJK UNIFIED IDEOGRAPH + {0xB6F8, 0x5967}, //3386 #CJK UNIFIED IDEOGRAPH + {0xB6F9, 0x5AC1}, //3387 #CJK UNIFIED IDEOGRAPH + {0xB6FA, 0x5AC9}, //3388 #CJK UNIFIED IDEOGRAPH + {0xB6FB, 0x5ACC}, //3389 #CJK UNIFIED IDEOGRAPH + {0xB6FC, 0x5ABE}, //3390 #CJK UNIFIED IDEOGRAPH + {0xB6FD, 0x5ABD}, //3391 #CJK UNIFIED IDEOGRAPH + {0xB6FE, 0x5ABC}, //3392 #CJK UNIFIED IDEOGRAPH + {0xB740, 0x5AB3}, //3393 #CJK UNIFIED IDEOGRAPH + {0xB741, 0x5AC2}, //3394 #CJK UNIFIED IDEOGRAPH + {0xB742, 0x5AB2}, //3395 #CJK UNIFIED IDEOGRAPH + {0xB743, 0x5D69}, //3396 #CJK UNIFIED IDEOGRAPH + {0xB744, 0x5D6F}, //3397 #CJK UNIFIED IDEOGRAPH + {0xB745, 0x5E4C}, //3398 #CJK UNIFIED IDEOGRAPH + {0xB746, 0x5E79}, //3399 #CJK UNIFIED IDEOGRAPH + {0xB747, 0x5EC9}, //3400 #CJK UNIFIED IDEOGRAPH + {0xB748, 0x5EC8}, //3401 #CJK UNIFIED IDEOGRAPH + {0xB749, 0x5F12}, //3402 #CJK UNIFIED IDEOGRAPH + {0xB74A, 0x5F59}, //3403 #CJK UNIFIED IDEOGRAPH + {0xB74B, 0x5FAC}, //3404 #CJK UNIFIED IDEOGRAPH + {0xB74C, 0x5FAE}, //3405 #CJK UNIFIED IDEOGRAPH + {0xB74D, 0x611A}, //3406 #CJK UNIFIED IDEOGRAPH + {0xB74E, 0x610F}, //3407 #CJK UNIFIED IDEOGRAPH + {0xB74F, 0x6148}, //3408 #CJK UNIFIED IDEOGRAPH + {0xB750, 0x611F}, //3409 #CJK UNIFIED IDEOGRAPH + {0xB751, 0x60F3}, //3410 #CJK UNIFIED IDEOGRAPH + {0xB752, 0x611B}, //3411 #CJK UNIFIED IDEOGRAPH + {0xB753, 0x60F9}, //3412 #CJK UNIFIED IDEOGRAPH + {0xB754, 0x6101}, //3413 #CJK UNIFIED IDEOGRAPH + {0xB755, 0x6108}, //3414 #CJK UNIFIED IDEOGRAPH + {0xB756, 0x614E}, //3415 #CJK UNIFIED IDEOGRAPH + {0xB757, 0x614C}, //3416 #CJK UNIFIED IDEOGRAPH + {0xB758, 0x6144}, //3417 #CJK UNIFIED IDEOGRAPH + {0xB759, 0x614D}, //3418 #CJK UNIFIED IDEOGRAPH + {0xB75A, 0x613E}, //3419 #CJK UNIFIED IDEOGRAPH + {0xB75B, 0x6134}, //3420 #CJK UNIFIED IDEOGRAPH + {0xB75C, 0x6127}, //3421 #CJK UNIFIED IDEOGRAPH + {0xB75D, 0x610D}, //3422 #CJK UNIFIED IDEOGRAPH + {0xB75E, 0x6106}, //3423 #CJK UNIFIED IDEOGRAPH + {0xB75F, 0x6137}, //3424 #CJK UNIFIED IDEOGRAPH + {0xB760, 0x6221}, //3425 #CJK UNIFIED IDEOGRAPH + {0xB761, 0x6222}, //3426 #CJK UNIFIED IDEOGRAPH + {0xB762, 0x6413}, //3427 #CJK UNIFIED IDEOGRAPH + {0xB763, 0x643E}, //3428 #CJK UNIFIED IDEOGRAPH + {0xB764, 0x641E}, //3429 #CJK UNIFIED IDEOGRAPH + {0xB765, 0x642A}, //3430 #CJK UNIFIED IDEOGRAPH + {0xB766, 0x642D}, //3431 #CJK UNIFIED IDEOGRAPH + {0xB767, 0x643D}, //3432 #CJK UNIFIED IDEOGRAPH + {0xB768, 0x642C}, //3433 #CJK UNIFIED IDEOGRAPH + {0xB769, 0x640F}, //3434 #CJK UNIFIED IDEOGRAPH + {0xB76A, 0x641C}, //3435 #CJK UNIFIED IDEOGRAPH + {0xB76B, 0x6414}, //3436 #CJK UNIFIED IDEOGRAPH + {0xB76C, 0x640D}, //3437 #CJK UNIFIED IDEOGRAPH + {0xB76D, 0x6436}, //3438 #CJK UNIFIED IDEOGRAPH + {0xB76E, 0x6416}, //3439 #CJK UNIFIED IDEOGRAPH + {0xB76F, 0x6417}, //3440 #CJK UNIFIED IDEOGRAPH + {0xB770, 0x6406}, //3441 #CJK UNIFIED IDEOGRAPH + {0xB771, 0x656C}, //3442 #CJK UNIFIED IDEOGRAPH + {0xB772, 0x659F}, //3443 #CJK UNIFIED IDEOGRAPH + {0xB773, 0x65B0}, //3444 #CJK UNIFIED IDEOGRAPH + {0xB774, 0x6697}, //3445 #CJK UNIFIED IDEOGRAPH + {0xB775, 0x6689}, //3446 #CJK UNIFIED IDEOGRAPH + {0xB776, 0x6687}, //3447 #CJK UNIFIED IDEOGRAPH + {0xB777, 0x6688}, //3448 #CJK UNIFIED IDEOGRAPH + {0xB778, 0x6696}, //3449 #CJK UNIFIED IDEOGRAPH + {0xB779, 0x6684}, //3450 #CJK UNIFIED IDEOGRAPH + {0xB77A, 0x6698}, //3451 #CJK UNIFIED IDEOGRAPH + {0xB77B, 0x668D}, //3452 #CJK UNIFIED IDEOGRAPH + {0xB77C, 0x6703}, //3453 #CJK UNIFIED IDEOGRAPH + {0xB77D, 0x6994}, //3454 #CJK UNIFIED IDEOGRAPH + {0xB77E, 0x696D}, //3455 #CJK UNIFIED IDEOGRAPH + {0xB7A1, 0x695A}, //3456 #CJK UNIFIED IDEOGRAPH + {0xB7A2, 0x6977}, //3457 #CJK UNIFIED IDEOGRAPH + {0xB7A3, 0x6960}, //3458 #CJK UNIFIED IDEOGRAPH + {0xB7A4, 0x6954}, //3459 #CJK UNIFIED IDEOGRAPH + {0xB7A5, 0x6975}, //3460 #CJK UNIFIED IDEOGRAPH + {0xB7A6, 0x6930}, //3461 #CJK UNIFIED IDEOGRAPH + {0xB7A7, 0x6982}, //3462 #CJK UNIFIED IDEOGRAPH + {0xB7A8, 0x694A}, //3463 #CJK UNIFIED IDEOGRAPH + {0xB7A9, 0x6968}, //3464 #CJK UNIFIED IDEOGRAPH + {0xB7AA, 0x696B}, //3465 #CJK UNIFIED IDEOGRAPH + {0xB7AB, 0x695E}, //3466 #CJK UNIFIED IDEOGRAPH + {0xB7AC, 0x6953}, //3467 #CJK UNIFIED IDEOGRAPH + {0xB7AD, 0x6979}, //3468 #CJK UNIFIED IDEOGRAPH + {0xB7AE, 0x6986}, //3469 #CJK UNIFIED IDEOGRAPH + {0xB7AF, 0x695D}, //3470 #CJK UNIFIED IDEOGRAPH + {0xB7B0, 0x6963}, //3471 #CJK UNIFIED IDEOGRAPH + {0xB7B1, 0x695B}, //3472 #CJK UNIFIED IDEOGRAPH + {0xB7B2, 0x6B47}, //3473 #CJK UNIFIED IDEOGRAPH + {0xB7B3, 0x6B72}, //3474 #CJK UNIFIED IDEOGRAPH + {0xB7B4, 0x6BC0}, //3475 #CJK UNIFIED IDEOGRAPH + {0xB7B5, 0x6BBF}, //3476 #CJK UNIFIED IDEOGRAPH + {0xB7B6, 0x6BD3}, //3477 #CJK UNIFIED IDEOGRAPH + {0xB7B7, 0x6BFD}, //3478 #CJK UNIFIED IDEOGRAPH + {0xB7B8, 0x6EA2}, //3479 #CJK UNIFIED IDEOGRAPH + {0xB7B9, 0x6EAF}, //3480 #CJK UNIFIED IDEOGRAPH + {0xB7BA, 0x6ED3}, //3481 #CJK UNIFIED IDEOGRAPH + {0xB7BB, 0x6EB6}, //3482 #CJK UNIFIED IDEOGRAPH + {0xB7BC, 0x6EC2}, //3483 #CJK UNIFIED IDEOGRAPH + {0xB7BD, 0x6E90}, //3484 #CJK UNIFIED IDEOGRAPH + {0xB7BE, 0x6E9D}, //3485 #CJK UNIFIED IDEOGRAPH + {0xB7BF, 0x6EC7}, //3486 #CJK UNIFIED IDEOGRAPH + {0xB7C0, 0x6EC5}, //3487 #CJK UNIFIED IDEOGRAPH + {0xB7C1, 0x6EA5}, //3488 #CJK UNIFIED IDEOGRAPH + {0xB7C2, 0x6E98}, //3489 #CJK UNIFIED IDEOGRAPH + {0xB7C3, 0x6EBC}, //3490 #CJK UNIFIED IDEOGRAPH + {0xB7C4, 0x6EBA}, //3491 #CJK UNIFIED IDEOGRAPH + {0xB7C5, 0x6EAB}, //3492 #CJK UNIFIED IDEOGRAPH + {0xB7C6, 0x6ED1}, //3493 #CJK UNIFIED IDEOGRAPH + {0xB7C7, 0x6E96}, //3494 #CJK UNIFIED IDEOGRAPH + {0xB7C8, 0x6E9C}, //3495 #CJK UNIFIED IDEOGRAPH + {0xB7C9, 0x6EC4}, //3496 #CJK UNIFIED IDEOGRAPH + {0xB7CA, 0x6ED4}, //3497 #CJK UNIFIED IDEOGRAPH + {0xB7CB, 0x6EAA}, //3498 #CJK UNIFIED IDEOGRAPH + {0xB7CC, 0x6EA7}, //3499 #CJK UNIFIED IDEOGRAPH + {0xB7CD, 0x6EB4}, //3500 #CJK UNIFIED IDEOGRAPH + {0xB7CE, 0x714E}, //3501 #CJK UNIFIED IDEOGRAPH + {0xB7CF, 0x7159}, //3502 #CJK UNIFIED IDEOGRAPH + {0xB7D0, 0x7169}, //3503 #CJK UNIFIED IDEOGRAPH + {0xB7D1, 0x7164}, //3504 #CJK UNIFIED IDEOGRAPH + {0xB7D2, 0x7149}, //3505 #CJK UNIFIED IDEOGRAPH + {0xB7D3, 0x7167}, //3506 #CJK UNIFIED IDEOGRAPH + {0xB7D4, 0x715C}, //3507 #CJK UNIFIED IDEOGRAPH + {0xB7D5, 0x716C}, //3508 #CJK UNIFIED IDEOGRAPH + {0xB7D6, 0x7166}, //3509 #CJK UNIFIED IDEOGRAPH + {0xB7D7, 0x714C}, //3510 #CJK UNIFIED IDEOGRAPH + {0xB7D8, 0x7165}, //3511 #CJK UNIFIED IDEOGRAPH + {0xB7D9, 0x715E}, //3512 #CJK UNIFIED IDEOGRAPH + {0xB7DA, 0x7146}, //3513 #CJK UNIFIED IDEOGRAPH + {0xB7DB, 0x7168}, //3514 #CJK UNIFIED IDEOGRAPH + {0xB7DC, 0x7156}, //3515 #CJK UNIFIED IDEOGRAPH + {0xB7DD, 0x723A}, //3516 #CJK UNIFIED IDEOGRAPH + {0xB7DE, 0x7252}, //3517 #CJK UNIFIED IDEOGRAPH + {0xB7DF, 0x7337}, //3518 #CJK UNIFIED IDEOGRAPH + {0xB7E0, 0x7345}, //3519 #CJK UNIFIED IDEOGRAPH + {0xB7E1, 0x733F}, //3520 #CJK UNIFIED IDEOGRAPH + {0xB7E2, 0x733E}, //3521 #CJK UNIFIED IDEOGRAPH + {0xB7E3, 0x746F}, //3522 #CJK UNIFIED IDEOGRAPH + {0xB7E4, 0x745A}, //3523 #CJK UNIFIED IDEOGRAPH + {0xB7E5, 0x7455}, //3524 #CJK UNIFIED IDEOGRAPH + {0xB7E6, 0x745F}, //3525 #CJK UNIFIED IDEOGRAPH + {0xB7E7, 0x745E}, //3526 #CJK UNIFIED IDEOGRAPH + {0xB7E8, 0x7441}, //3527 #CJK UNIFIED IDEOGRAPH + {0xB7E9, 0x743F}, //3528 #CJK UNIFIED IDEOGRAPH + {0xB7EA, 0x7459}, //3529 #CJK UNIFIED IDEOGRAPH + {0xB7EB, 0x745B}, //3530 #CJK UNIFIED IDEOGRAPH + {0xB7EC, 0x745C}, //3531 #CJK UNIFIED IDEOGRAPH + {0xB7ED, 0x7576}, //3532 #CJK UNIFIED IDEOGRAPH + {0xB7EE, 0x7578}, //3533 #CJK UNIFIED IDEOGRAPH + {0xB7EF, 0x7600}, //3534 #CJK UNIFIED IDEOGRAPH + {0xB7F0, 0x75F0}, //3535 #CJK UNIFIED IDEOGRAPH + {0xB7F1, 0x7601}, //3536 #CJK UNIFIED IDEOGRAPH + {0xB7F2, 0x75F2}, //3537 #CJK UNIFIED IDEOGRAPH + {0xB7F3, 0x75F1}, //3538 #CJK UNIFIED IDEOGRAPH + {0xB7F4, 0x75FA}, //3539 #CJK UNIFIED IDEOGRAPH + {0xB7F5, 0x75FF}, //3540 #CJK UNIFIED IDEOGRAPH + {0xB7F6, 0x75F4}, //3541 #CJK UNIFIED IDEOGRAPH + {0xB7F7, 0x75F3}, //3542 #CJK UNIFIED IDEOGRAPH + {0xB7F8, 0x76DE}, //3543 #CJK UNIFIED IDEOGRAPH + {0xB7F9, 0x76DF}, //3544 #CJK UNIFIED IDEOGRAPH + {0xB7FA, 0x775B}, //3545 #CJK UNIFIED IDEOGRAPH + {0xB7FB, 0x776B}, //3546 #CJK UNIFIED IDEOGRAPH + {0xB7FC, 0x7766}, //3547 #CJK UNIFIED IDEOGRAPH + {0xB7FD, 0x775E}, //3548 #CJK UNIFIED IDEOGRAPH + {0xB7FE, 0x7763}, //3549 #CJK UNIFIED IDEOGRAPH + {0xB840, 0x7779}, //3550 #CJK UNIFIED IDEOGRAPH + {0xB841, 0x776A}, //3551 #CJK UNIFIED IDEOGRAPH + {0xB842, 0x776C}, //3552 #CJK UNIFIED IDEOGRAPH + {0xB843, 0x775C}, //3553 #CJK UNIFIED IDEOGRAPH + {0xB844, 0x7765}, //3554 #CJK UNIFIED IDEOGRAPH + {0xB845, 0x7768}, //3555 #CJK UNIFIED IDEOGRAPH + {0xB846, 0x7762}, //3556 #CJK UNIFIED IDEOGRAPH + {0xB847, 0x77EE}, //3557 #CJK UNIFIED IDEOGRAPH + {0xB848, 0x788E}, //3558 #CJK UNIFIED IDEOGRAPH + {0xB849, 0x78B0}, //3559 #CJK UNIFIED IDEOGRAPH + {0xB84A, 0x7897}, //3560 #CJK UNIFIED IDEOGRAPH + {0xB84B, 0x7898}, //3561 #CJK UNIFIED IDEOGRAPH + {0xB84C, 0x788C}, //3562 #CJK UNIFIED IDEOGRAPH + {0xB84D, 0x7889}, //3563 #CJK UNIFIED IDEOGRAPH + {0xB84E, 0x787C}, //3564 #CJK UNIFIED IDEOGRAPH + {0xB84F, 0x7891}, //3565 #CJK UNIFIED IDEOGRAPH + {0xB850, 0x7893}, //3566 #CJK UNIFIED IDEOGRAPH + {0xB851, 0x787F}, //3567 #CJK UNIFIED IDEOGRAPH + {0xB852, 0x797A}, //3568 #CJK UNIFIED IDEOGRAPH + {0xB853, 0x797F}, //3569 #CJK UNIFIED IDEOGRAPH + {0xB854, 0x7981}, //3570 #CJK UNIFIED IDEOGRAPH + {0xB855, 0x842C}, //3571 #CJK UNIFIED IDEOGRAPH + {0xB856, 0x79BD}, //3572 #CJK UNIFIED IDEOGRAPH + {0xB857, 0x7A1C}, //3573 #CJK UNIFIED IDEOGRAPH + {0xB858, 0x7A1A}, //3574 #CJK UNIFIED IDEOGRAPH + {0xB859, 0x7A20}, //3575 #CJK UNIFIED IDEOGRAPH + {0xB85A, 0x7A14}, //3576 #CJK UNIFIED IDEOGRAPH + {0xB85B, 0x7A1F}, //3577 #CJK UNIFIED IDEOGRAPH + {0xB85C, 0x7A1E}, //3578 #CJK UNIFIED IDEOGRAPH + {0xB85D, 0x7A9F}, //3579 #CJK UNIFIED IDEOGRAPH + {0xB85E, 0x7AA0}, //3580 #CJK UNIFIED IDEOGRAPH + {0xB85F, 0x7B77}, //3581 #CJK UNIFIED IDEOGRAPH + {0xB860, 0x7BC0}, //3582 #CJK UNIFIED IDEOGRAPH + {0xB861, 0x7B60}, //3583 #CJK UNIFIED IDEOGRAPH + {0xB862, 0x7B6E}, //3584 #CJK UNIFIED IDEOGRAPH + {0xB863, 0x7B67}, //3585 #CJK UNIFIED IDEOGRAPH + {0xB864, 0x7CB1}, //3586 #CJK UNIFIED IDEOGRAPH + {0xB865, 0x7CB3}, //3587 #CJK UNIFIED IDEOGRAPH + {0xB866, 0x7CB5}, //3588 #CJK UNIFIED IDEOGRAPH + {0xB867, 0x7D93}, //3589 #CJK UNIFIED IDEOGRAPH + {0xB868, 0x7D79}, //3590 #CJK UNIFIED IDEOGRAPH + {0xB869, 0x7D91}, //3591 #CJK UNIFIED IDEOGRAPH + {0xB86A, 0x7D81}, //3592 #CJK UNIFIED IDEOGRAPH + {0xB86B, 0x7D8F}, //3593 #CJK UNIFIED IDEOGRAPH + {0xB86C, 0x7D5B}, //3594 #CJK UNIFIED IDEOGRAPH + {0xB86D, 0x7F6E}, //3595 #CJK UNIFIED IDEOGRAPH + {0xB86E, 0x7F69}, //3596 #CJK UNIFIED IDEOGRAPH + {0xB86F, 0x7F6A}, //3597 #CJK UNIFIED IDEOGRAPH + {0xB870, 0x7F72}, //3598 #CJK UNIFIED IDEOGRAPH + {0xB871, 0x7FA9}, //3599 #CJK UNIFIED IDEOGRAPH + {0xB872, 0x7FA8}, //3600 #CJK UNIFIED IDEOGRAPH + {0xB873, 0x7FA4}, //3601 #CJK UNIFIED IDEOGRAPH + {0xB874, 0x8056}, //3602 #CJK UNIFIED IDEOGRAPH + {0xB875, 0x8058}, //3603 #CJK UNIFIED IDEOGRAPH + {0xB876, 0x8086}, //3604 #CJK UNIFIED IDEOGRAPH + {0xB877, 0x8084}, //3605 #CJK UNIFIED IDEOGRAPH + {0xB878, 0x8171}, //3606 #CJK UNIFIED IDEOGRAPH + {0xB879, 0x8170}, //3607 #CJK UNIFIED IDEOGRAPH + {0xB87A, 0x8178}, //3608 #CJK UNIFIED IDEOGRAPH + {0xB87B, 0x8165}, //3609 #CJK UNIFIED IDEOGRAPH + {0xB87C, 0x816E}, //3610 #CJK UNIFIED IDEOGRAPH + {0xB87D, 0x8173}, //3611 #CJK UNIFIED IDEOGRAPH + {0xB87E, 0x816B}, //3612 #CJK UNIFIED IDEOGRAPH + {0xB8A1, 0x8179}, //3613 #CJK UNIFIED IDEOGRAPH + {0xB8A2, 0x817A}, //3614 #CJK UNIFIED IDEOGRAPH + {0xB8A3, 0x8166}, //3615 #CJK UNIFIED IDEOGRAPH + {0xB8A4, 0x8205}, //3616 #CJK UNIFIED IDEOGRAPH + {0xB8A5, 0x8247}, //3617 #CJK UNIFIED IDEOGRAPH + {0xB8A6, 0x8482}, //3618 #CJK UNIFIED IDEOGRAPH + {0xB8A7, 0x8477}, //3619 #CJK UNIFIED IDEOGRAPH + {0xB8A8, 0x843D}, //3620 #CJK UNIFIED IDEOGRAPH + {0xB8A9, 0x8431}, //3621 #CJK UNIFIED IDEOGRAPH + {0xB8AA, 0x8475}, //3622 #CJK UNIFIED IDEOGRAPH + {0xB8AB, 0x8466}, //3623 #CJK UNIFIED IDEOGRAPH + {0xB8AC, 0x846B}, //3624 #CJK UNIFIED IDEOGRAPH + {0xB8AD, 0x8449}, //3625 #CJK UNIFIED IDEOGRAPH + {0xB8AE, 0x846C}, //3626 #CJK UNIFIED IDEOGRAPH + {0xB8AF, 0x845B}, //3627 #CJK UNIFIED IDEOGRAPH + {0xB8B0, 0x843C}, //3628 #CJK UNIFIED IDEOGRAPH + {0xB8B1, 0x8435}, //3629 #CJK UNIFIED IDEOGRAPH + {0xB8B2, 0x8461}, //3630 #CJK UNIFIED IDEOGRAPH + {0xB8B3, 0x8463}, //3631 #CJK UNIFIED IDEOGRAPH + {0xB8B4, 0x8469}, //3632 #CJK UNIFIED IDEOGRAPH + {0xB8B5, 0x846D}, //3633 #CJK UNIFIED IDEOGRAPH + {0xB8B6, 0x8446}, //3634 #CJK UNIFIED IDEOGRAPH + {0xB8B7, 0x865E}, //3635 #CJK UNIFIED IDEOGRAPH + {0xB8B8, 0x865C}, //3636 #CJK UNIFIED IDEOGRAPH + {0xB8B9, 0x865F}, //3637 #CJK UNIFIED IDEOGRAPH + {0xB8BA, 0x86F9}, //3638 #CJK UNIFIED IDEOGRAPH + {0xB8BB, 0x8713}, //3639 #CJK UNIFIED IDEOGRAPH + {0xB8BC, 0x8708}, //3640 #CJK UNIFIED IDEOGRAPH + {0xB8BD, 0x8707}, //3641 #CJK UNIFIED IDEOGRAPH + {0xB8BE, 0x8700}, //3642 #CJK UNIFIED IDEOGRAPH + {0xB8BF, 0x86FE}, //3643 #CJK UNIFIED IDEOGRAPH + {0xB8C0, 0x86FB}, //3644 #CJK UNIFIED IDEOGRAPH + {0xB8C1, 0x8702}, //3645 #CJK UNIFIED IDEOGRAPH + {0xB8C2, 0x8703}, //3646 #CJK UNIFIED IDEOGRAPH + {0xB8C3, 0x8706}, //3647 #CJK UNIFIED IDEOGRAPH + {0xB8C4, 0x870A}, //3648 #CJK UNIFIED IDEOGRAPH + {0xB8C5, 0x8859}, //3649 #CJK UNIFIED IDEOGRAPH + {0xB8C6, 0x88DF}, //3650 #CJK UNIFIED IDEOGRAPH + {0xB8C7, 0x88D4}, //3651 #CJK UNIFIED IDEOGRAPH + {0xB8C8, 0x88D9}, //3652 #CJK UNIFIED IDEOGRAPH + {0xB8C9, 0x88DC}, //3653 #CJK UNIFIED IDEOGRAPH + {0xB8CA, 0x88D8}, //3654 #CJK UNIFIED IDEOGRAPH + {0xB8CB, 0x88DD}, //3655 #CJK UNIFIED IDEOGRAPH + {0xB8CC, 0x88E1}, //3656 #CJK UNIFIED IDEOGRAPH + {0xB8CD, 0x88CA}, //3657 #CJK UNIFIED IDEOGRAPH + {0xB8CE, 0x88D5}, //3658 #CJK UNIFIED IDEOGRAPH + {0xB8CF, 0x88D2}, //3659 #CJK UNIFIED IDEOGRAPH + {0xB8D0, 0x899C}, //3660 #CJK UNIFIED IDEOGRAPH + {0xB8D1, 0x89E3}, //3661 #CJK UNIFIED IDEOGRAPH + {0xB8D2, 0x8A6B}, //3662 #CJK UNIFIED IDEOGRAPH + {0xB8D3, 0x8A72}, //3663 #CJK UNIFIED IDEOGRAPH + {0xB8D4, 0x8A73}, //3664 #CJK UNIFIED IDEOGRAPH + {0xB8D5, 0x8A66}, //3665 #CJK UNIFIED IDEOGRAPH + {0xB8D6, 0x8A69}, //3666 #CJK UNIFIED IDEOGRAPH + {0xB8D7, 0x8A70}, //3667 #CJK UNIFIED IDEOGRAPH + {0xB8D8, 0x8A87}, //3668 #CJK UNIFIED IDEOGRAPH + {0xB8D9, 0x8A7C}, //3669 #CJK UNIFIED IDEOGRAPH + {0xB8DA, 0x8A63}, //3670 #CJK UNIFIED IDEOGRAPH + {0xB8DB, 0x8AA0}, //3671 #CJK UNIFIED IDEOGRAPH + {0xB8DC, 0x8A71}, //3672 #CJK UNIFIED IDEOGRAPH + {0xB8DD, 0x8A85}, //3673 #CJK UNIFIED IDEOGRAPH + {0xB8DE, 0x8A6D}, //3674 #CJK UNIFIED IDEOGRAPH + {0xB8DF, 0x8A62}, //3675 #CJK UNIFIED IDEOGRAPH + {0xB8E0, 0x8A6E}, //3676 #CJK UNIFIED IDEOGRAPH + {0xB8E1, 0x8A6C}, //3677 #CJK UNIFIED IDEOGRAPH + {0xB8E2, 0x8A79}, //3678 #CJK UNIFIED IDEOGRAPH + {0xB8E3, 0x8A7B}, //3679 #CJK UNIFIED IDEOGRAPH + {0xB8E4, 0x8A3E}, //3680 #CJK UNIFIED IDEOGRAPH + {0xB8E5, 0x8A68}, //3681 #CJK UNIFIED IDEOGRAPH + {0xB8E6, 0x8C62}, //3682 #CJK UNIFIED IDEOGRAPH + {0xB8E7, 0x8C8A}, //3683 #CJK UNIFIED IDEOGRAPH + {0xB8E8, 0x8C89}, //3684 #CJK UNIFIED IDEOGRAPH + {0xB8E9, 0x8CCA}, //3685 #CJK UNIFIED IDEOGRAPH + {0xB8EA, 0x8CC7}, //3686 #CJK UNIFIED IDEOGRAPH + {0xB8EB, 0x8CC8}, //3687 #CJK UNIFIED IDEOGRAPH + {0xB8EC, 0x8CC4}, //3688 #CJK UNIFIED IDEOGRAPH + {0xB8ED, 0x8CB2}, //3689 #CJK UNIFIED IDEOGRAPH + {0xB8EE, 0x8CC3}, //3690 #CJK UNIFIED IDEOGRAPH + {0xB8EF, 0x8CC2}, //3691 #CJK UNIFIED IDEOGRAPH + {0xB8F0, 0x8CC5}, //3692 #CJK UNIFIED IDEOGRAPH + {0xB8F1, 0x8DE1}, //3693 #CJK UNIFIED IDEOGRAPH + {0xB8F2, 0x8DDF}, //3694 #CJK UNIFIED IDEOGRAPH + {0xB8F3, 0x8DE8}, //3695 #CJK UNIFIED IDEOGRAPH + {0xB8F4, 0x8DEF}, //3696 #CJK UNIFIED IDEOGRAPH + {0xB8F5, 0x8DF3}, //3697 #CJK UNIFIED IDEOGRAPH + {0xB8F6, 0x8DFA}, //3698 #CJK UNIFIED IDEOGRAPH + {0xB8F7, 0x8DEA}, //3699 #CJK UNIFIED IDEOGRAPH + {0xB8F8, 0x8DE4}, //3700 #CJK UNIFIED IDEOGRAPH + {0xB8F9, 0x8DE6}, //3701 #CJK UNIFIED IDEOGRAPH + {0xB8FA, 0x8EB2}, //3702 #CJK UNIFIED IDEOGRAPH + {0xB8FB, 0x8F03}, //3703 #CJK UNIFIED IDEOGRAPH + {0xB8FC, 0x8F09}, //3704 #CJK UNIFIED IDEOGRAPH + {0xB8FD, 0x8EFE}, //3705 #CJK UNIFIED IDEOGRAPH + {0xB8FE, 0x8F0A}, //3706 #CJK UNIFIED IDEOGRAPH + {0xB940, 0x8F9F}, //3707 #CJK UNIFIED IDEOGRAPH + {0xB941, 0x8FB2}, //3708 #CJK UNIFIED IDEOGRAPH + {0xB942, 0x904B}, //3709 #CJK UNIFIED IDEOGRAPH + {0xB943, 0x904A}, //3710 #CJK UNIFIED IDEOGRAPH + {0xB944, 0x9053}, //3711 #CJK UNIFIED IDEOGRAPH + {0xB945, 0x9042}, //3712 #CJK UNIFIED IDEOGRAPH + {0xB946, 0x9054}, //3713 #CJK UNIFIED IDEOGRAPH + {0xB947, 0x903C}, //3714 #CJK UNIFIED IDEOGRAPH + {0xB948, 0x9055}, //3715 #CJK UNIFIED IDEOGRAPH + {0xB949, 0x9050}, //3716 #CJK UNIFIED IDEOGRAPH + {0xB94A, 0x9047}, //3717 #CJK UNIFIED IDEOGRAPH + {0xB94B, 0x904F}, //3718 #CJK UNIFIED IDEOGRAPH + {0xB94C, 0x904E}, //3719 #CJK UNIFIED IDEOGRAPH + {0xB94D, 0x904D}, //3720 #CJK UNIFIED IDEOGRAPH + {0xB94E, 0x9051}, //3721 #CJK UNIFIED IDEOGRAPH + {0xB94F, 0x903E}, //3722 #CJK UNIFIED IDEOGRAPH + {0xB950, 0x9041}, //3723 #CJK UNIFIED IDEOGRAPH + {0xB951, 0x9112}, //3724 #CJK UNIFIED IDEOGRAPH + {0xB952, 0x9117}, //3725 #CJK UNIFIED IDEOGRAPH + {0xB953, 0x916C}, //3726 #CJK UNIFIED IDEOGRAPH + {0xB954, 0x916A}, //3727 #CJK UNIFIED IDEOGRAPH + {0xB955, 0x9169}, //3728 #CJK UNIFIED IDEOGRAPH + {0xB956, 0x91C9}, //3729 #CJK UNIFIED IDEOGRAPH + {0xB957, 0x9237}, //3730 #CJK UNIFIED IDEOGRAPH + {0xB958, 0x9257}, //3731 #CJK UNIFIED IDEOGRAPH + {0xB959, 0x9238}, //3732 #CJK UNIFIED IDEOGRAPH + {0xB95A, 0x923D}, //3733 #CJK UNIFIED IDEOGRAPH + {0xB95B, 0x9240}, //3734 #CJK UNIFIED IDEOGRAPH + {0xB95C, 0x923E}, //3735 #CJK UNIFIED IDEOGRAPH + {0xB95D, 0x925B}, //3736 #CJK UNIFIED IDEOGRAPH + {0xB95E, 0x924B}, //3737 #CJK UNIFIED IDEOGRAPH + {0xB95F, 0x9264}, //3738 #CJK UNIFIED IDEOGRAPH + {0xB960, 0x9251}, //3739 #CJK UNIFIED IDEOGRAPH + {0xB961, 0x9234}, //3740 #CJK UNIFIED IDEOGRAPH + {0xB962, 0x9249}, //3741 #CJK UNIFIED IDEOGRAPH + {0xB963, 0x924D}, //3742 #CJK UNIFIED IDEOGRAPH + {0xB964, 0x9245}, //3743 #CJK UNIFIED IDEOGRAPH + {0xB965, 0x9239}, //3744 #CJK UNIFIED IDEOGRAPH + {0xB966, 0x923F}, //3745 #CJK UNIFIED IDEOGRAPH + {0xB967, 0x925A}, //3746 #CJK UNIFIED IDEOGRAPH + {0xB968, 0x9598}, //3747 #CJK UNIFIED IDEOGRAPH + {0xB969, 0x9698}, //3748 #CJK UNIFIED IDEOGRAPH + {0xB96A, 0x9694}, //3749 #CJK UNIFIED IDEOGRAPH + {0xB96B, 0x9695}, //3750 #CJK UNIFIED IDEOGRAPH + {0xB96C, 0x96CD}, //3751 #CJK UNIFIED IDEOGRAPH + {0xB96D, 0x96CB}, //3752 #CJK UNIFIED IDEOGRAPH + {0xB96E, 0x96C9}, //3753 #CJK UNIFIED IDEOGRAPH + {0xB96F, 0x96CA}, //3754 #CJK UNIFIED IDEOGRAPH + {0xB970, 0x96F7}, //3755 #CJK UNIFIED IDEOGRAPH + {0xB971, 0x96FB}, //3756 #CJK UNIFIED IDEOGRAPH + {0xB972, 0x96F9}, //3757 #CJK UNIFIED IDEOGRAPH + {0xB973, 0x96F6}, //3758 #CJK UNIFIED IDEOGRAPH + {0xB974, 0x9756}, //3759 #CJK UNIFIED IDEOGRAPH + {0xB975, 0x9774}, //3760 #CJK UNIFIED IDEOGRAPH + {0xB976, 0x9776}, //3761 #CJK UNIFIED IDEOGRAPH + {0xB977, 0x9810}, //3762 #CJK UNIFIED IDEOGRAPH + {0xB978, 0x9811}, //3763 #CJK UNIFIED IDEOGRAPH + {0xB979, 0x9813}, //3764 #CJK UNIFIED IDEOGRAPH + {0xB97A, 0x980A}, //3765 #CJK UNIFIED IDEOGRAPH + {0xB97B, 0x9812}, //3766 #CJK UNIFIED IDEOGRAPH + {0xB97C, 0x980C}, //3767 #CJK UNIFIED IDEOGRAPH + {0xB97D, 0x98FC}, //3768 #CJK UNIFIED IDEOGRAPH + {0xB97E, 0x98F4}, //3769 #CJK UNIFIED IDEOGRAPH + {0xB9A1, 0x98FD}, //3770 #CJK UNIFIED IDEOGRAPH + {0xB9A2, 0x98FE}, //3771 #CJK UNIFIED IDEOGRAPH + {0xB9A3, 0x99B3}, //3772 #CJK UNIFIED IDEOGRAPH + {0xB9A4, 0x99B1}, //3773 #CJK UNIFIED IDEOGRAPH + {0xB9A5, 0x99B4}, //3774 #CJK UNIFIED IDEOGRAPH + {0xB9A6, 0x9AE1}, //3775 #CJK UNIFIED IDEOGRAPH + {0xB9A7, 0x9CE9}, //3776 #CJK UNIFIED IDEOGRAPH + {0xB9A8, 0x9E82}, //3777 #CJK UNIFIED IDEOGRAPH + {0xB9A9, 0x9F0E}, //3778 #CJK UNIFIED IDEOGRAPH + {0xB9AA, 0x9F13}, //3779 #CJK UNIFIED IDEOGRAPH + {0xB9AB, 0x9F20}, //3780 #CJK UNIFIED IDEOGRAPH + {0xB9AC, 0x50E7}, //3781 #CJK UNIFIED IDEOGRAPH + {0xB9AD, 0x50EE}, //3782 #CJK UNIFIED IDEOGRAPH + {0xB9AE, 0x50E5}, //3783 #CJK UNIFIED IDEOGRAPH + {0xB9AF, 0x50D6}, //3784 #CJK UNIFIED IDEOGRAPH + {0xB9B0, 0x50ED}, //3785 #CJK UNIFIED IDEOGRAPH + {0xB9B1, 0x50DA}, //3786 #CJK UNIFIED IDEOGRAPH + {0xB9B2, 0x50D5}, //3787 #CJK UNIFIED IDEOGRAPH + {0xB9B3, 0x50CF}, //3788 #CJK UNIFIED IDEOGRAPH + {0xB9B4, 0x50D1}, //3789 #CJK UNIFIED IDEOGRAPH + {0xB9B5, 0x50F1}, //3790 #CJK UNIFIED IDEOGRAPH + {0xB9B6, 0x50CE}, //3791 #CJK UNIFIED IDEOGRAPH + {0xB9B7, 0x50E9}, //3792 #CJK UNIFIED IDEOGRAPH + {0xB9B8, 0x5162}, //3793 #CJK UNIFIED IDEOGRAPH + {0xB9B9, 0x51F3}, //3794 #CJK UNIFIED IDEOGRAPH + {0xB9BA, 0x5283}, //3795 #CJK UNIFIED IDEOGRAPH + {0xB9BB, 0x5282}, //3796 #CJK UNIFIED IDEOGRAPH + {0xB9BC, 0x5331}, //3797 #CJK UNIFIED IDEOGRAPH + {0xB9BD, 0x53AD}, //3798 #CJK UNIFIED IDEOGRAPH + {0xB9BE, 0x55FE}, //3799 #CJK UNIFIED IDEOGRAPH + {0xB9BF, 0x5600}, //3800 #CJK UNIFIED IDEOGRAPH + {0xB9C0, 0x561B}, //3801 #CJK UNIFIED IDEOGRAPH + {0xB9C1, 0x5617}, //3802 #CJK UNIFIED IDEOGRAPH + {0xB9C2, 0x55FD}, //3803 #CJK UNIFIED IDEOGRAPH + {0xB9C3, 0x5614}, //3804 #CJK UNIFIED IDEOGRAPH + {0xB9C4, 0x5606}, //3805 #CJK UNIFIED IDEOGRAPH + {0xB9C5, 0x5609}, //3806 #CJK UNIFIED IDEOGRAPH + {0xB9C6, 0x560D}, //3807 #CJK UNIFIED IDEOGRAPH + {0xB9C7, 0x560E}, //3808 #CJK UNIFIED IDEOGRAPH + {0xB9C8, 0x55F7}, //3809 #CJK UNIFIED IDEOGRAPH + {0xB9C9, 0x5616}, //3810 #CJK UNIFIED IDEOGRAPH + {0xB9CA, 0x561F}, //3811 #CJK UNIFIED IDEOGRAPH + {0xB9CB, 0x5608}, //3812 #CJK UNIFIED IDEOGRAPH + {0xB9CC, 0x5610}, //3813 #CJK UNIFIED IDEOGRAPH + {0xB9CD, 0x55F6}, //3814 #CJK UNIFIED IDEOGRAPH + {0xB9CE, 0x5718}, //3815 #CJK UNIFIED IDEOGRAPH + {0xB9CF, 0x5716}, //3816 #CJK UNIFIED IDEOGRAPH + {0xB9D0, 0x5875}, //3817 #CJK UNIFIED IDEOGRAPH + {0xB9D1, 0x587E}, //3818 #CJK UNIFIED IDEOGRAPH + {0xB9D2, 0x5883}, //3819 #CJK UNIFIED IDEOGRAPH + {0xB9D3, 0x5893}, //3820 #CJK UNIFIED IDEOGRAPH + {0xB9D4, 0x588A}, //3821 #CJK UNIFIED IDEOGRAPH + {0xB9D5, 0x5879}, //3822 #CJK UNIFIED IDEOGRAPH + {0xB9D6, 0x5885}, //3823 #CJK UNIFIED IDEOGRAPH + {0xB9D7, 0x587D}, //3824 #CJK UNIFIED IDEOGRAPH + {0xB9D8, 0x58FD}, //3825 #CJK UNIFIED IDEOGRAPH + {0xB9D9, 0x5925}, //3826 #CJK UNIFIED IDEOGRAPH + {0xB9DA, 0x5922}, //3827 #CJK UNIFIED IDEOGRAPH + {0xB9DB, 0x5924}, //3828 #CJK UNIFIED IDEOGRAPH + {0xB9DC, 0x596A}, //3829 #CJK UNIFIED IDEOGRAPH + {0xB9DD, 0x5969}, //3830 #CJK UNIFIED IDEOGRAPH + {0xB9DE, 0x5AE1}, //3831 #CJK UNIFIED IDEOGRAPH + {0xB9DF, 0x5AE6}, //3832 #CJK UNIFIED IDEOGRAPH + {0xB9E0, 0x5AE9}, //3833 #CJK UNIFIED IDEOGRAPH + {0xB9E1, 0x5AD7}, //3834 #CJK UNIFIED IDEOGRAPH + {0xB9E2, 0x5AD6}, //3835 #CJK UNIFIED IDEOGRAPH + {0xB9E3, 0x5AD8}, //3836 #CJK UNIFIED IDEOGRAPH + {0xB9E4, 0x5AE3}, //3837 #CJK UNIFIED IDEOGRAPH + {0xB9E5, 0x5B75}, //3838 #CJK UNIFIED IDEOGRAPH + {0xB9E6, 0x5BDE}, //3839 #CJK UNIFIED IDEOGRAPH + {0xB9E7, 0x5BE7}, //3840 #CJK UNIFIED IDEOGRAPH + {0xB9E8, 0x5BE1}, //3841 #CJK UNIFIED IDEOGRAPH + {0xB9E9, 0x5BE5}, //3842 #CJK UNIFIED IDEOGRAPH + {0xB9EA, 0x5BE6}, //3843 #CJK UNIFIED IDEOGRAPH + {0xB9EB, 0x5BE8}, //3844 #CJK UNIFIED IDEOGRAPH + {0xB9EC, 0x5BE2}, //3845 #CJK UNIFIED IDEOGRAPH + {0xB9ED, 0x5BE4}, //3846 #CJK UNIFIED IDEOGRAPH + {0xB9EE, 0x5BDF}, //3847 #CJK UNIFIED IDEOGRAPH + {0xB9EF, 0x5C0D}, //3848 #CJK UNIFIED IDEOGRAPH + {0xB9F0, 0x5C62}, //3849 #CJK UNIFIED IDEOGRAPH + {0xB9F1, 0x5D84}, //3850 #CJK UNIFIED IDEOGRAPH + {0xB9F2, 0x5D87}, //3851 #CJK UNIFIED IDEOGRAPH + {0xB9F3, 0x5E5B}, //3852 #CJK UNIFIED IDEOGRAPH + {0xB9F4, 0x5E63}, //3853 #CJK UNIFIED IDEOGRAPH + {0xB9F5, 0x5E55}, //3854 #CJK UNIFIED IDEOGRAPH + {0xB9F6, 0x5E57}, //3855 #CJK UNIFIED IDEOGRAPH + {0xB9F7, 0x5E54}, //3856 #CJK UNIFIED IDEOGRAPH + {0xB9F8, 0x5ED3}, //3857 #CJK UNIFIED IDEOGRAPH + {0xB9F9, 0x5ED6}, //3858 #CJK UNIFIED IDEOGRAPH + {0xB9FA, 0x5F0A}, //3859 #CJK UNIFIED IDEOGRAPH + {0xB9FB, 0x5F46}, //3860 #CJK UNIFIED IDEOGRAPH + {0xB9FC, 0x5F70}, //3861 #CJK UNIFIED IDEOGRAPH + {0xB9FD, 0x5FB9}, //3862 #CJK UNIFIED IDEOGRAPH + {0xB9FE, 0x6147}, //3863 #CJK UNIFIED IDEOGRAPH + {0xBA40, 0x613F}, //3864 #CJK UNIFIED IDEOGRAPH + {0xBA41, 0x614B}, //3865 #CJK UNIFIED IDEOGRAPH + {0xBA42, 0x6177}, //3866 #CJK UNIFIED IDEOGRAPH + {0xBA43, 0x6162}, //3867 #CJK UNIFIED IDEOGRAPH + {0xBA44, 0x6163}, //3868 #CJK UNIFIED IDEOGRAPH + {0xBA45, 0x615F}, //3869 #CJK UNIFIED IDEOGRAPH + {0xBA46, 0x615A}, //3870 #CJK UNIFIED IDEOGRAPH + {0xBA47, 0x6158}, //3871 #CJK UNIFIED IDEOGRAPH + {0xBA48, 0x6175}, //3872 #CJK UNIFIED IDEOGRAPH + {0xBA49, 0x622A}, //3873 #CJK UNIFIED IDEOGRAPH + {0xBA4A, 0x6487}, //3874 #CJK UNIFIED IDEOGRAPH + {0xBA4B, 0x6458}, //3875 #CJK UNIFIED IDEOGRAPH + {0xBA4C, 0x6454}, //3876 #CJK UNIFIED IDEOGRAPH + {0xBA4D, 0x64A4}, //3877 #CJK UNIFIED IDEOGRAPH + {0xBA4E, 0x6478}, //3878 #CJK UNIFIED IDEOGRAPH + {0xBA4F, 0x645F}, //3879 #CJK UNIFIED IDEOGRAPH + {0xBA50, 0x647A}, //3880 #CJK UNIFIED IDEOGRAPH + {0xBA51, 0x6451}, //3881 #CJK UNIFIED IDEOGRAPH + {0xBA52, 0x6467}, //3882 #CJK UNIFIED IDEOGRAPH + {0xBA53, 0x6434}, //3883 #CJK UNIFIED IDEOGRAPH + {0xBA54, 0x646D}, //3884 #CJK UNIFIED IDEOGRAPH + {0xBA55, 0x647B}, //3885 #CJK UNIFIED IDEOGRAPH + {0xBA56, 0x6572}, //3886 #CJK UNIFIED IDEOGRAPH + {0xBA57, 0x65A1}, //3887 #CJK UNIFIED IDEOGRAPH + {0xBA58, 0x65D7}, //3888 #CJK UNIFIED IDEOGRAPH + {0xBA59, 0x65D6}, //3889 #CJK UNIFIED IDEOGRAPH + {0xBA5A, 0x66A2}, //3890 #CJK UNIFIED IDEOGRAPH + {0xBA5B, 0x66A8}, //3891 #CJK UNIFIED IDEOGRAPH + {0xBA5C, 0x669D}, //3892 #CJK UNIFIED IDEOGRAPH + {0xBA5D, 0x699C}, //3893 #CJK UNIFIED IDEOGRAPH + {0xBA5E, 0x69A8}, //3894 #CJK UNIFIED IDEOGRAPH + {0xBA5F, 0x6995}, //3895 #CJK UNIFIED IDEOGRAPH + {0xBA60, 0x69C1}, //3896 #CJK UNIFIED IDEOGRAPH + {0xBA61, 0x69AE}, //3897 #CJK UNIFIED IDEOGRAPH + {0xBA62, 0x69D3}, //3898 #CJK UNIFIED IDEOGRAPH + {0xBA63, 0x69CB}, //3899 #CJK UNIFIED IDEOGRAPH + {0xBA64, 0x699B}, //3900 #CJK UNIFIED IDEOGRAPH + {0xBA65, 0x69B7}, //3901 #CJK UNIFIED IDEOGRAPH + {0xBA66, 0x69BB}, //3902 #CJK UNIFIED IDEOGRAPH + {0xBA67, 0x69AB}, //3903 #CJK UNIFIED IDEOGRAPH + {0xBA68, 0x69B4}, //3904 #CJK UNIFIED IDEOGRAPH + {0xBA69, 0x69D0}, //3905 #CJK UNIFIED IDEOGRAPH + {0xBA6A, 0x69CD}, //3906 #CJK UNIFIED IDEOGRAPH + {0xBA6B, 0x69AD}, //3907 #CJK UNIFIED IDEOGRAPH + {0xBA6C, 0x69CC}, //3908 #CJK UNIFIED IDEOGRAPH + {0xBA6D, 0x69A6}, //3909 #CJK UNIFIED IDEOGRAPH + {0xBA6E, 0x69C3}, //3910 #CJK UNIFIED IDEOGRAPH + {0xBA6F, 0x69A3}, //3911 #CJK UNIFIED IDEOGRAPH + {0xBA70, 0x6B49}, //3912 #CJK UNIFIED IDEOGRAPH + {0xBA71, 0x6B4C}, //3913 #CJK UNIFIED IDEOGRAPH + {0xBA72, 0x6C33}, //3914 #CJK UNIFIED IDEOGRAPH + {0xBA73, 0x6F33}, //3915 #CJK UNIFIED IDEOGRAPH + {0xBA74, 0x6F14}, //3916 #CJK UNIFIED IDEOGRAPH + {0xBA75, 0x6EFE}, //3917 #CJK UNIFIED IDEOGRAPH + {0xBA76, 0x6F13}, //3918 #CJK UNIFIED IDEOGRAPH + {0xBA77, 0x6EF4}, //3919 #CJK UNIFIED IDEOGRAPH + {0xBA78, 0x6F29}, //3920 #CJK UNIFIED IDEOGRAPH + {0xBA79, 0x6F3E}, //3921 #CJK UNIFIED IDEOGRAPH + {0xBA7A, 0x6F20}, //3922 #CJK UNIFIED IDEOGRAPH + {0xBA7B, 0x6F2C}, //3923 #CJK UNIFIED IDEOGRAPH + {0xBA7C, 0x6F0F}, //3924 #CJK UNIFIED IDEOGRAPH + {0xBA7D, 0x6F02}, //3925 #CJK UNIFIED IDEOGRAPH + {0xBA7E, 0x6F22}, //3926 #CJK UNIFIED IDEOGRAPH + {0xBAA1, 0x6EFF}, //3927 #CJK UNIFIED IDEOGRAPH + {0xBAA2, 0x6EEF}, //3928 #CJK UNIFIED IDEOGRAPH + {0xBAA3, 0x6F06}, //3929 #CJK UNIFIED IDEOGRAPH + {0xBAA4, 0x6F31}, //3930 #CJK UNIFIED IDEOGRAPH + {0xBAA5, 0x6F38}, //3931 #CJK UNIFIED IDEOGRAPH + {0xBAA6, 0x6F32}, //3932 #CJK UNIFIED IDEOGRAPH + {0xBAA7, 0x6F23}, //3933 #CJK UNIFIED IDEOGRAPH + {0xBAA8, 0x6F15}, //3934 #CJK UNIFIED IDEOGRAPH + {0xBAA9, 0x6F2B}, //3935 #CJK UNIFIED IDEOGRAPH + {0xBAAA, 0x6F2F}, //3936 #CJK UNIFIED IDEOGRAPH + {0xBAAB, 0x6F88}, //3937 #CJK UNIFIED IDEOGRAPH + {0xBAAC, 0x6F2A}, //3938 #CJK UNIFIED IDEOGRAPH + {0xBAAD, 0x6EEC}, //3939 #CJK UNIFIED IDEOGRAPH + {0xBAAE, 0x6F01}, //3940 #CJK UNIFIED IDEOGRAPH + {0xBAAF, 0x6EF2}, //3941 #CJK UNIFIED IDEOGRAPH + {0xBAB0, 0x6ECC}, //3942 #CJK UNIFIED IDEOGRAPH + {0xBAB1, 0x6EF7}, //3943 #CJK UNIFIED IDEOGRAPH + {0xBAB2, 0x7194}, //3944 #CJK UNIFIED IDEOGRAPH + {0xBAB3, 0x7199}, //3945 #CJK UNIFIED IDEOGRAPH + {0xBAB4, 0x717D}, //3946 #CJK UNIFIED IDEOGRAPH + {0xBAB5, 0x718A}, //3947 #CJK UNIFIED IDEOGRAPH + {0xBAB6, 0x7184}, //3948 #CJK UNIFIED IDEOGRAPH + {0xBAB7, 0x7192}, //3949 #CJK UNIFIED IDEOGRAPH + {0xBAB8, 0x723E}, //3950 #CJK UNIFIED IDEOGRAPH + {0xBAB9, 0x7292}, //3951 #CJK UNIFIED IDEOGRAPH + {0xBABA, 0x7296}, //3952 #CJK UNIFIED IDEOGRAPH + {0xBABB, 0x7344}, //3953 #CJK UNIFIED IDEOGRAPH + {0xBABC, 0x7350}, //3954 #CJK UNIFIED IDEOGRAPH + {0xBABD, 0x7464}, //3955 #CJK UNIFIED IDEOGRAPH + {0xBABE, 0x7463}, //3956 #CJK UNIFIED IDEOGRAPH + {0xBABF, 0x746A}, //3957 #CJK UNIFIED IDEOGRAPH + {0xBAC0, 0x7470}, //3958 #CJK UNIFIED IDEOGRAPH + {0xBAC1, 0x746D}, //3959 #CJK UNIFIED IDEOGRAPH + {0xBAC2, 0x7504}, //3960 #CJK UNIFIED IDEOGRAPH + {0xBAC3, 0x7591}, //3961 #CJK UNIFIED IDEOGRAPH + {0xBAC4, 0x7627}, //3962 #CJK UNIFIED IDEOGRAPH + {0xBAC5, 0x760D}, //3963 #CJK UNIFIED IDEOGRAPH + {0xBAC6, 0x760B}, //3964 #CJK UNIFIED IDEOGRAPH + {0xBAC7, 0x7609}, //3965 #CJK UNIFIED IDEOGRAPH + {0xBAC8, 0x7613}, //3966 #CJK UNIFIED IDEOGRAPH + {0xBAC9, 0x76E1}, //3967 #CJK UNIFIED IDEOGRAPH + {0xBACA, 0x76E3}, //3968 #CJK UNIFIED IDEOGRAPH + {0xBACB, 0x7784}, //3969 #CJK UNIFIED IDEOGRAPH + {0xBACC, 0x777D}, //3970 #CJK UNIFIED IDEOGRAPH + {0xBACD, 0x777F}, //3971 #CJK UNIFIED IDEOGRAPH + {0xBACE, 0x7761}, //3972 #CJK UNIFIED IDEOGRAPH + {0xBACF, 0x78C1}, //3973 #CJK UNIFIED IDEOGRAPH + {0xBAD0, 0x789F}, //3974 #CJK UNIFIED IDEOGRAPH + {0xBAD1, 0x78A7}, //3975 #CJK UNIFIED IDEOGRAPH + {0xBAD2, 0x78B3}, //3976 #CJK UNIFIED IDEOGRAPH + {0xBAD3, 0x78A9}, //3977 #CJK UNIFIED IDEOGRAPH + {0xBAD4, 0x78A3}, //3978 #CJK UNIFIED IDEOGRAPH + {0xBAD5, 0x798E}, //3979 #CJK UNIFIED IDEOGRAPH + {0xBAD6, 0x798F}, //3980 #CJK UNIFIED IDEOGRAPH + {0xBAD7, 0x798D}, //3981 #CJK UNIFIED IDEOGRAPH + {0xBAD8, 0x7A2E}, //3982 #CJK UNIFIED IDEOGRAPH + {0xBAD9, 0x7A31}, //3983 #CJK UNIFIED IDEOGRAPH + {0xBADA, 0x7AAA}, //3984 #CJK UNIFIED IDEOGRAPH + {0xBADB, 0x7AA9}, //3985 #CJK UNIFIED IDEOGRAPH + {0xBADC, 0x7AED}, //3986 #CJK UNIFIED IDEOGRAPH + {0xBADD, 0x7AEF}, //3987 #CJK UNIFIED IDEOGRAPH + {0xBADE, 0x7BA1}, //3988 #CJK UNIFIED IDEOGRAPH + {0xBADF, 0x7B95}, //3989 #CJK UNIFIED IDEOGRAPH + {0xBAE0, 0x7B8B}, //3990 #CJK UNIFIED IDEOGRAPH + {0xBAE1, 0x7B75}, //3991 #CJK UNIFIED IDEOGRAPH + {0xBAE2, 0x7B97}, //3992 #CJK UNIFIED IDEOGRAPH + {0xBAE3, 0x7B9D}, //3993 #CJK UNIFIED IDEOGRAPH + {0xBAE4, 0x7B94}, //3994 #CJK UNIFIED IDEOGRAPH + {0xBAE5, 0x7B8F}, //3995 #CJK UNIFIED IDEOGRAPH + {0xBAE6, 0x7BB8}, //3996 #CJK UNIFIED IDEOGRAPH + {0xBAE7, 0x7B87}, //3997 #CJK UNIFIED IDEOGRAPH + {0xBAE8, 0x7B84}, //3998 #CJK UNIFIED IDEOGRAPH + {0xBAE9, 0x7CB9}, //3999 #CJK UNIFIED IDEOGRAPH + {0xBAEA, 0x7CBD}, //4000 #CJK UNIFIED IDEOGRAPH + {0xBAEB, 0x7CBE}, //4001 #CJK UNIFIED IDEOGRAPH + {0xBAEC, 0x7DBB}, //4002 #CJK UNIFIED IDEOGRAPH + {0xBAED, 0x7DB0}, //4003 #CJK UNIFIED IDEOGRAPH + {0xBAEE, 0x7D9C}, //4004 #CJK UNIFIED IDEOGRAPH + {0xBAEF, 0x7DBD}, //4005 #CJK UNIFIED IDEOGRAPH + {0xBAF0, 0x7DBE}, //4006 #CJK UNIFIED IDEOGRAPH + {0xBAF1, 0x7DA0}, //4007 #CJK UNIFIED IDEOGRAPH + {0xBAF2, 0x7DCA}, //4008 #CJK UNIFIED IDEOGRAPH + {0xBAF3, 0x7DB4}, //4009 #CJK UNIFIED IDEOGRAPH + {0xBAF4, 0x7DB2}, //4010 #CJK UNIFIED IDEOGRAPH + {0xBAF5, 0x7DB1}, //4011 #CJK UNIFIED IDEOGRAPH + {0xBAF6, 0x7DBA}, //4012 #CJK UNIFIED IDEOGRAPH + {0xBAF7, 0x7DA2}, //4013 #CJK UNIFIED IDEOGRAPH + {0xBAF8, 0x7DBF}, //4014 #CJK UNIFIED IDEOGRAPH + {0xBAF9, 0x7DB5}, //4015 #CJK UNIFIED IDEOGRAPH + {0xBAFA, 0x7DB8}, //4016 #CJK UNIFIED IDEOGRAPH + {0xBAFB, 0x7DAD}, //4017 #CJK UNIFIED IDEOGRAPH + {0xBAFC, 0x7DD2}, //4018 #CJK UNIFIED IDEOGRAPH + {0xBAFD, 0x7DC7}, //4019 #CJK UNIFIED IDEOGRAPH + {0xBAFE, 0x7DAC}, //4020 #CJK UNIFIED IDEOGRAPH + {0xBB40, 0x7F70}, //4021 #CJK UNIFIED IDEOGRAPH + {0xBB41, 0x7FE0}, //4022 #CJK UNIFIED IDEOGRAPH + {0xBB42, 0x7FE1}, //4023 #CJK UNIFIED IDEOGRAPH + {0xBB43, 0x7FDF}, //4024 #CJK UNIFIED IDEOGRAPH + {0xBB44, 0x805E}, //4025 #CJK UNIFIED IDEOGRAPH + {0xBB45, 0x805A}, //4026 #CJK UNIFIED IDEOGRAPH + {0xBB46, 0x8087}, //4027 #CJK UNIFIED IDEOGRAPH + {0xBB47, 0x8150}, //4028 #CJK UNIFIED IDEOGRAPH + {0xBB48, 0x8180}, //4029 #CJK UNIFIED IDEOGRAPH + {0xBB49, 0x818F}, //4030 #CJK UNIFIED IDEOGRAPH + {0xBB4A, 0x8188}, //4031 #CJK UNIFIED IDEOGRAPH + {0xBB4B, 0x818A}, //4032 #CJK UNIFIED IDEOGRAPH + {0xBB4C, 0x817F}, //4033 #CJK UNIFIED IDEOGRAPH + {0xBB4D, 0x8182}, //4034 #CJK UNIFIED IDEOGRAPH + {0xBB4E, 0x81E7}, //4035 #CJK UNIFIED IDEOGRAPH + {0xBB4F, 0x81FA}, //4036 #CJK UNIFIED IDEOGRAPH + {0xBB50, 0x8207}, //4037 #CJK UNIFIED IDEOGRAPH + {0xBB51, 0x8214}, //4038 #CJK UNIFIED IDEOGRAPH + {0xBB52, 0x821E}, //4039 #CJK UNIFIED IDEOGRAPH + {0xBB53, 0x824B}, //4040 #CJK UNIFIED IDEOGRAPH + {0xBB54, 0x84C9}, //4041 #CJK UNIFIED IDEOGRAPH + {0xBB55, 0x84BF}, //4042 #CJK UNIFIED IDEOGRAPH + {0xBB56, 0x84C6}, //4043 #CJK UNIFIED IDEOGRAPH + {0xBB57, 0x84C4}, //4044 #CJK UNIFIED IDEOGRAPH + {0xBB58, 0x8499}, //4045 #CJK UNIFIED IDEOGRAPH + {0xBB59, 0x849E}, //4046 #CJK UNIFIED IDEOGRAPH + {0xBB5A, 0x84B2}, //4047 #CJK UNIFIED IDEOGRAPH + {0xBB5B, 0x849C}, //4048 #CJK UNIFIED IDEOGRAPH + {0xBB5C, 0x84CB}, //4049 #CJK UNIFIED IDEOGRAPH + {0xBB5D, 0x84B8}, //4050 #CJK UNIFIED IDEOGRAPH + {0xBB5E, 0x84C0}, //4051 #CJK UNIFIED IDEOGRAPH + {0xBB5F, 0x84D3}, //4052 #CJK UNIFIED IDEOGRAPH + {0xBB60, 0x8490}, //4053 #CJK UNIFIED IDEOGRAPH + {0xBB61, 0x84BC}, //4054 #CJK UNIFIED IDEOGRAPH + {0xBB62, 0x84D1}, //4055 #CJK UNIFIED IDEOGRAPH + {0xBB63, 0x84CA}, //4056 #CJK UNIFIED IDEOGRAPH + {0xBB64, 0x873F}, //4057 #CJK UNIFIED IDEOGRAPH + {0xBB65, 0x871C}, //4058 #CJK UNIFIED IDEOGRAPH + {0xBB66, 0x873B}, //4059 #CJK UNIFIED IDEOGRAPH + {0xBB67, 0x8722}, //4060 #CJK UNIFIED IDEOGRAPH + {0xBB68, 0x8725}, //4061 #CJK UNIFIED IDEOGRAPH + {0xBB69, 0x8734}, //4062 #CJK UNIFIED IDEOGRAPH + {0xBB6A, 0x8718}, //4063 #CJK UNIFIED IDEOGRAPH + {0xBB6B, 0x8755}, //4064 #CJK UNIFIED IDEOGRAPH + {0xBB6C, 0x8737}, //4065 #CJK UNIFIED IDEOGRAPH + {0xBB6D, 0x8729}, //4066 #CJK UNIFIED IDEOGRAPH + {0xBB6E, 0x88F3}, //4067 #CJK UNIFIED IDEOGRAPH + {0xBB6F, 0x8902}, //4068 #CJK UNIFIED IDEOGRAPH + {0xBB70, 0x88F4}, //4069 #CJK UNIFIED IDEOGRAPH + {0xBB71, 0x88F9}, //4070 #CJK UNIFIED IDEOGRAPH + {0xBB72, 0x88F8}, //4071 #CJK UNIFIED IDEOGRAPH + {0xBB73, 0x88FD}, //4072 #CJK UNIFIED IDEOGRAPH + {0xBB74, 0x88E8}, //4073 #CJK UNIFIED IDEOGRAPH + {0xBB75, 0x891A}, //4074 #CJK UNIFIED IDEOGRAPH + {0xBB76, 0x88EF}, //4075 #CJK UNIFIED IDEOGRAPH + {0xBB77, 0x8AA6}, //4076 #CJK UNIFIED IDEOGRAPH + {0xBB78, 0x8A8C}, //4077 #CJK UNIFIED IDEOGRAPH + {0xBB79, 0x8A9E}, //4078 #CJK UNIFIED IDEOGRAPH + {0xBB7A, 0x8AA3}, //4079 #CJK UNIFIED IDEOGRAPH + {0xBB7B, 0x8A8D}, //4080 #CJK UNIFIED IDEOGRAPH + {0xBB7C, 0x8AA1}, //4081 #CJK UNIFIED IDEOGRAPH + {0xBB7D, 0x8A93}, //4082 #CJK UNIFIED IDEOGRAPH + {0xBB7E, 0x8AA4}, //4083 #CJK UNIFIED IDEOGRAPH + {0xBBA1, 0x8AAA}, //4084 #CJK UNIFIED IDEOGRAPH + {0xBBA2, 0x8AA5}, //4085 #CJK UNIFIED IDEOGRAPH + {0xBBA3, 0x8AA8}, //4086 #CJK UNIFIED IDEOGRAPH + {0xBBA4, 0x8A98}, //4087 #CJK UNIFIED IDEOGRAPH + {0xBBA5, 0x8A91}, //4088 #CJK UNIFIED IDEOGRAPH + {0xBBA6, 0x8A9A}, //4089 #CJK UNIFIED IDEOGRAPH + {0xBBA7, 0x8AA7}, //4090 #CJK UNIFIED IDEOGRAPH + {0xBBA8, 0x8C6A}, //4091 #CJK UNIFIED IDEOGRAPH + {0xBBA9, 0x8C8D}, //4092 #CJK UNIFIED IDEOGRAPH + {0xBBAA, 0x8C8C}, //4093 #CJK UNIFIED IDEOGRAPH + {0xBBAB, 0x8CD3}, //4094 #CJK UNIFIED IDEOGRAPH + {0xBBAC, 0x8CD1}, //4095 #CJK UNIFIED IDEOGRAPH + {0xBBAD, 0x8CD2}, //4096 #CJK UNIFIED IDEOGRAPH + {0xBBAE, 0x8D6B}, //4097 #CJK UNIFIED IDEOGRAPH + {0xBBAF, 0x8D99}, //4098 #CJK UNIFIED IDEOGRAPH + {0xBBB0, 0x8D95}, //4099 #CJK UNIFIED IDEOGRAPH + {0xBBB1, 0x8DFC}, //4100 #CJK UNIFIED IDEOGRAPH + {0xBBB2, 0x8F14}, //4101 #CJK UNIFIED IDEOGRAPH + {0xBBB3, 0x8F12}, //4102 #CJK UNIFIED IDEOGRAPH + {0xBBB4, 0x8F15}, //4103 #CJK UNIFIED IDEOGRAPH + {0xBBB5, 0x8F13}, //4104 #CJK UNIFIED IDEOGRAPH + {0xBBB6, 0x8FA3}, //4105 #CJK UNIFIED IDEOGRAPH + {0xBBB7, 0x9060}, //4106 #CJK UNIFIED IDEOGRAPH + {0xBBB8, 0x9058}, //4107 #CJK UNIFIED IDEOGRAPH + {0xBBB9, 0x905C}, //4108 #CJK UNIFIED IDEOGRAPH + {0xBBBA, 0x9063}, //4109 #CJK UNIFIED IDEOGRAPH + {0xBBBB, 0x9059}, //4110 #CJK UNIFIED IDEOGRAPH + {0xBBBC, 0x905E}, //4111 #CJK UNIFIED IDEOGRAPH + {0xBBBD, 0x9062}, //4112 #CJK UNIFIED IDEOGRAPH + {0xBBBE, 0x905D}, //4113 #CJK UNIFIED IDEOGRAPH + {0xBBBF, 0x905B}, //4114 #CJK UNIFIED IDEOGRAPH + {0xBBC0, 0x9119}, //4115 #CJK UNIFIED IDEOGRAPH + {0xBBC1, 0x9118}, //4116 #CJK UNIFIED IDEOGRAPH + {0xBBC2, 0x911E}, //4117 #CJK UNIFIED IDEOGRAPH + {0xBBC3, 0x9175}, //4118 #CJK UNIFIED IDEOGRAPH + {0xBBC4, 0x9178}, //4119 #CJK UNIFIED IDEOGRAPH + {0xBBC5, 0x9177}, //4120 #CJK UNIFIED IDEOGRAPH + {0xBBC6, 0x9174}, //4121 #CJK UNIFIED IDEOGRAPH + {0xBBC7, 0x9278}, //4122 #CJK UNIFIED IDEOGRAPH + {0xBBC8, 0x9280}, //4123 #CJK UNIFIED IDEOGRAPH + {0xBBC9, 0x9285}, //4124 #CJK UNIFIED IDEOGRAPH + {0xBBCA, 0x9298}, //4125 #CJK UNIFIED IDEOGRAPH + {0xBBCB, 0x9296}, //4126 #CJK UNIFIED IDEOGRAPH + {0xBBCC, 0x927B}, //4127 #CJK UNIFIED IDEOGRAPH + {0xBBCD, 0x9293}, //4128 #CJK UNIFIED IDEOGRAPH + {0xBBCE, 0x929C}, //4129 #CJK UNIFIED IDEOGRAPH + {0xBBCF, 0x92A8}, //4130 #CJK UNIFIED IDEOGRAPH + {0xBBD0, 0x927C}, //4131 #CJK UNIFIED IDEOGRAPH + {0xBBD1, 0x9291}, //4132 #CJK UNIFIED IDEOGRAPH + {0xBBD2, 0x95A1}, //4133 #CJK UNIFIED IDEOGRAPH + {0xBBD3, 0x95A8}, //4134 #CJK UNIFIED IDEOGRAPH + {0xBBD4, 0x95A9}, //4135 #CJK UNIFIED IDEOGRAPH + {0xBBD5, 0x95A3}, //4136 #CJK UNIFIED IDEOGRAPH + {0xBBD6, 0x95A5}, //4137 #CJK UNIFIED IDEOGRAPH + {0xBBD7, 0x95A4}, //4138 #CJK UNIFIED IDEOGRAPH + {0xBBD8, 0x9699}, //4139 #CJK UNIFIED IDEOGRAPH + {0xBBD9, 0x969C}, //4140 #CJK UNIFIED IDEOGRAPH + {0xBBDA, 0x969B}, //4141 #CJK UNIFIED IDEOGRAPH + {0xBBDB, 0x96CC}, //4142 #CJK UNIFIED IDEOGRAPH + {0xBBDC, 0x96D2}, //4143 #CJK UNIFIED IDEOGRAPH + {0xBBDD, 0x9700}, //4144 #CJK UNIFIED IDEOGRAPH + {0xBBDE, 0x977C}, //4145 #CJK UNIFIED IDEOGRAPH + {0xBBDF, 0x9785}, //4146 #CJK UNIFIED IDEOGRAPH + {0xBBE0, 0x97F6}, //4147 #CJK UNIFIED IDEOGRAPH + {0xBBE1, 0x9817}, //4148 #CJK UNIFIED IDEOGRAPH + {0xBBE2, 0x9818}, //4149 #CJK UNIFIED IDEOGRAPH + {0xBBE3, 0x98AF}, //4150 #CJK UNIFIED IDEOGRAPH + {0xBBE4, 0x98B1}, //4151 #CJK UNIFIED IDEOGRAPH + {0xBBE5, 0x9903}, //4152 #CJK UNIFIED IDEOGRAPH + {0xBBE6, 0x9905}, //4153 #CJK UNIFIED IDEOGRAPH + {0xBBE7, 0x990C}, //4154 #CJK UNIFIED IDEOGRAPH + {0xBBE8, 0x9909}, //4155 #CJK UNIFIED IDEOGRAPH + {0xBBE9, 0x99C1}, //4156 #CJK UNIFIED IDEOGRAPH + {0xBBEA, 0x9AAF}, //4157 #CJK UNIFIED IDEOGRAPH + {0xBBEB, 0x9AB0}, //4158 #CJK UNIFIED IDEOGRAPH + {0xBBEC, 0x9AE6}, //4159 #CJK UNIFIED IDEOGRAPH + {0xBBED, 0x9B41}, //4160 #CJK UNIFIED IDEOGRAPH + {0xBBEE, 0x9B42}, //4161 #CJK UNIFIED IDEOGRAPH + {0xBBEF, 0x9CF4}, //4162 #CJK UNIFIED IDEOGRAPH + {0xBBF0, 0x9CF6}, //4163 #CJK UNIFIED IDEOGRAPH + {0xBBF1, 0x9CF3}, //4164 #CJK UNIFIED IDEOGRAPH + {0xBBF2, 0x9EBC}, //4165 #CJK UNIFIED IDEOGRAPH + {0xBBF3, 0x9F3B}, //4166 #CJK UNIFIED IDEOGRAPH + {0xBBF4, 0x9F4A}, //4167 #CJK UNIFIED IDEOGRAPH + {0xBBF5, 0x5104}, //4168 #CJK UNIFIED IDEOGRAPH + {0xBBF6, 0x5100}, //4169 #CJK UNIFIED IDEOGRAPH + {0xBBF7, 0x50FB}, //4170 #CJK UNIFIED IDEOGRAPH + {0xBBF8, 0x50F5}, //4171 #CJK UNIFIED IDEOGRAPH + {0xBBF9, 0x50F9}, //4172 #CJK UNIFIED IDEOGRAPH + {0xBBFA, 0x5102}, //4173 #CJK UNIFIED IDEOGRAPH + {0xBBFB, 0x5108}, //4174 #CJK UNIFIED IDEOGRAPH + {0xBBFC, 0x5109}, //4175 #CJK UNIFIED IDEOGRAPH + {0xBBFD, 0x5105}, //4176 #CJK UNIFIED IDEOGRAPH + {0xBBFE, 0x51DC}, //4177 #CJK UNIFIED IDEOGRAPH + {0xBC40, 0x5287}, //4178 #CJK UNIFIED IDEOGRAPH + {0xBC41, 0x5288}, //4179 #CJK UNIFIED IDEOGRAPH + {0xBC42, 0x5289}, //4180 #CJK UNIFIED IDEOGRAPH + {0xBC43, 0x528D}, //4181 #CJK UNIFIED IDEOGRAPH + {0xBC44, 0x528A}, //4182 #CJK UNIFIED IDEOGRAPH + {0xBC45, 0x52F0}, //4183 #CJK UNIFIED IDEOGRAPH + {0xBC46, 0x53B2}, //4184 #CJK UNIFIED IDEOGRAPH + {0xBC47, 0x562E}, //4185 #CJK UNIFIED IDEOGRAPH + {0xBC48, 0x563B}, //4186 #CJK UNIFIED IDEOGRAPH + {0xBC49, 0x5639}, //4187 #CJK UNIFIED IDEOGRAPH + {0xBC4A, 0x5632}, //4188 #CJK UNIFIED IDEOGRAPH + {0xBC4B, 0x563F}, //4189 #CJK UNIFIED IDEOGRAPH + {0xBC4C, 0x5634}, //4190 #CJK UNIFIED IDEOGRAPH + {0xBC4D, 0x5629}, //4191 #CJK UNIFIED IDEOGRAPH + {0xBC4E, 0x5653}, //4192 #CJK UNIFIED IDEOGRAPH + {0xBC4F, 0x564E}, //4193 #CJK UNIFIED IDEOGRAPH + {0xBC50, 0x5657}, //4194 #CJK UNIFIED IDEOGRAPH + {0xBC51, 0x5674}, //4195 #CJK UNIFIED IDEOGRAPH + {0xBC52, 0x5636}, //4196 #CJK UNIFIED IDEOGRAPH + {0xBC53, 0x562F}, //4197 #CJK UNIFIED IDEOGRAPH + {0xBC54, 0x5630}, //4198 #CJK UNIFIED IDEOGRAPH + {0xBC55, 0x5880}, //4199 #CJK UNIFIED IDEOGRAPH + {0xBC56, 0x589F}, //4200 #CJK UNIFIED IDEOGRAPH + {0xBC57, 0x589E}, //4201 #CJK UNIFIED IDEOGRAPH + {0xBC58, 0x58B3}, //4202 #CJK UNIFIED IDEOGRAPH + {0xBC59, 0x589C}, //4203 #CJK UNIFIED IDEOGRAPH + {0xBC5A, 0x58AE}, //4204 #CJK UNIFIED IDEOGRAPH + {0xBC5B, 0x58A9}, //4205 #CJK UNIFIED IDEOGRAPH + {0xBC5C, 0x58A6}, //4206 #CJK UNIFIED IDEOGRAPH + {0xBC5D, 0x596D}, //4207 #CJK UNIFIED IDEOGRAPH + {0xBC5E, 0x5B09}, //4208 #CJK UNIFIED IDEOGRAPH + {0xBC5F, 0x5AFB}, //4209 #CJK UNIFIED IDEOGRAPH + {0xBC60, 0x5B0B}, //4210 #CJK UNIFIED IDEOGRAPH + {0xBC61, 0x5AF5}, //4211 #CJK UNIFIED IDEOGRAPH + {0xBC62, 0x5B0C}, //4212 #CJK UNIFIED IDEOGRAPH + {0xBC63, 0x5B08}, //4213 #CJK UNIFIED IDEOGRAPH + {0xBC64, 0x5BEE}, //4214 #CJK UNIFIED IDEOGRAPH + {0xBC65, 0x5BEC}, //4215 #CJK UNIFIED IDEOGRAPH + {0xBC66, 0x5BE9}, //4216 #CJK UNIFIED IDEOGRAPH + {0xBC67, 0x5BEB}, //4217 #CJK UNIFIED IDEOGRAPH + {0xBC68, 0x5C64}, //4218 #CJK UNIFIED IDEOGRAPH + {0xBC69, 0x5C65}, //4219 #CJK UNIFIED IDEOGRAPH + {0xBC6A, 0x5D9D}, //4220 #CJK UNIFIED IDEOGRAPH + {0xBC6B, 0x5D94}, //4221 #CJK UNIFIED IDEOGRAPH + {0xBC6C, 0x5E62}, //4222 #CJK UNIFIED IDEOGRAPH + {0xBC6D, 0x5E5F}, //4223 #CJK UNIFIED IDEOGRAPH + {0xBC6E, 0x5E61}, //4224 #CJK UNIFIED IDEOGRAPH + {0xBC6F, 0x5EE2}, //4225 #CJK UNIFIED IDEOGRAPH + {0xBC70, 0x5EDA}, //4226 #CJK UNIFIED IDEOGRAPH + {0xBC71, 0x5EDF}, //4227 #CJK UNIFIED IDEOGRAPH + {0xBC72, 0x5EDD}, //4228 #CJK UNIFIED IDEOGRAPH + {0xBC73, 0x5EE3}, //4229 #CJK UNIFIED IDEOGRAPH + {0xBC74, 0x5EE0}, //4230 #CJK UNIFIED IDEOGRAPH + {0xBC75, 0x5F48}, //4231 #CJK UNIFIED IDEOGRAPH + {0xBC76, 0x5F71}, //4232 #CJK UNIFIED IDEOGRAPH + {0xBC77, 0x5FB7}, //4233 #CJK UNIFIED IDEOGRAPH + {0xBC78, 0x5FB5}, //4234 #CJK UNIFIED IDEOGRAPH + {0xBC79, 0x6176}, //4235 #CJK UNIFIED IDEOGRAPH + {0xBC7A, 0x6167}, //4236 #CJK UNIFIED IDEOGRAPH + {0xBC7B, 0x616E}, //4237 #CJK UNIFIED IDEOGRAPH + {0xBC7C, 0x615D}, //4238 #CJK UNIFIED IDEOGRAPH + {0xBC7D, 0x6155}, //4239 #CJK UNIFIED IDEOGRAPH + {0xBC7E, 0x6182}, //4240 #CJK UNIFIED IDEOGRAPH + {0xBCA1, 0x617C}, //4241 #CJK UNIFIED IDEOGRAPH + {0xBCA2, 0x6170}, //4242 #CJK UNIFIED IDEOGRAPH + {0xBCA3, 0x616B}, //4243 #CJK UNIFIED IDEOGRAPH + {0xBCA4, 0x617E}, //4244 #CJK UNIFIED IDEOGRAPH + {0xBCA5, 0x61A7}, //4245 #CJK UNIFIED IDEOGRAPH + {0xBCA6, 0x6190}, //4246 #CJK UNIFIED IDEOGRAPH + {0xBCA7, 0x61AB}, //4247 #CJK UNIFIED IDEOGRAPH + {0xBCA8, 0x618E}, //4248 #CJK UNIFIED IDEOGRAPH + {0xBCA9, 0x61AC}, //4249 #CJK UNIFIED IDEOGRAPH + {0xBCAA, 0x619A}, //4250 #CJK UNIFIED IDEOGRAPH + {0xBCAB, 0x61A4}, //4251 #CJK UNIFIED IDEOGRAPH + {0xBCAC, 0x6194}, //4252 #CJK UNIFIED IDEOGRAPH + {0xBCAD, 0x61AE}, //4253 #CJK UNIFIED IDEOGRAPH + {0xBCAE, 0x622E}, //4254 #CJK UNIFIED IDEOGRAPH + {0xBCAF, 0x6469}, //4255 #CJK UNIFIED IDEOGRAPH + {0xBCB0, 0x646F}, //4256 #CJK UNIFIED IDEOGRAPH + {0xBCB1, 0x6479}, //4257 #CJK UNIFIED IDEOGRAPH + {0xBCB2, 0x649E}, //4258 #CJK UNIFIED IDEOGRAPH + {0xBCB3, 0x64B2}, //4259 #CJK UNIFIED IDEOGRAPH + {0xBCB4, 0x6488}, //4260 #CJK UNIFIED IDEOGRAPH + {0xBCB5, 0x6490}, //4261 #CJK UNIFIED IDEOGRAPH + {0xBCB6, 0x64B0}, //4262 #CJK UNIFIED IDEOGRAPH + {0xBCB7, 0x64A5}, //4263 #CJK UNIFIED IDEOGRAPH + {0xBCB8, 0x6493}, //4264 #CJK UNIFIED IDEOGRAPH + {0xBCB9, 0x6495}, //4265 #CJK UNIFIED IDEOGRAPH + {0xBCBA, 0x64A9}, //4266 #CJK UNIFIED IDEOGRAPH + {0xBCBB, 0x6492}, //4267 #CJK UNIFIED IDEOGRAPH + {0xBCBC, 0x64AE}, //4268 #CJK UNIFIED IDEOGRAPH + {0xBCBD, 0x64AD}, //4269 #CJK UNIFIED IDEOGRAPH + {0xBCBE, 0x64AB}, //4270 #CJK UNIFIED IDEOGRAPH + {0xBCBF, 0x649A}, //4271 #CJK UNIFIED IDEOGRAPH + {0xBCC0, 0x64AC}, //4272 #CJK UNIFIED IDEOGRAPH + {0xBCC1, 0x6499}, //4273 #CJK UNIFIED IDEOGRAPH + {0xBCC2, 0x64A2}, //4274 #CJK UNIFIED IDEOGRAPH + {0xBCC3, 0x64B3}, //4275 #CJK UNIFIED IDEOGRAPH + {0xBCC4, 0x6575}, //4276 #CJK UNIFIED IDEOGRAPH + {0xBCC5, 0x6577}, //4277 #CJK UNIFIED IDEOGRAPH + {0xBCC6, 0x6578}, //4278 #CJK UNIFIED IDEOGRAPH + {0xBCC7, 0x66AE}, //4279 #CJK UNIFIED IDEOGRAPH + {0xBCC8, 0x66AB}, //4280 #CJK UNIFIED IDEOGRAPH + {0xBCC9, 0x66B4}, //4281 #CJK UNIFIED IDEOGRAPH + {0xBCCA, 0x66B1}, //4282 #CJK UNIFIED IDEOGRAPH + {0xBCCB, 0x6A23}, //4283 #CJK UNIFIED IDEOGRAPH + {0xBCCC, 0x6A1F}, //4284 #CJK UNIFIED IDEOGRAPH + {0xBCCD, 0x69E8}, //4285 #CJK UNIFIED IDEOGRAPH + {0xBCCE, 0x6A01}, //4286 #CJK UNIFIED IDEOGRAPH + {0xBCCF, 0x6A1E}, //4287 #CJK UNIFIED IDEOGRAPH + {0xBCD0, 0x6A19}, //4288 #CJK UNIFIED IDEOGRAPH + {0xBCD1, 0x69FD}, //4289 #CJK UNIFIED IDEOGRAPH + {0xBCD2, 0x6A21}, //4290 #CJK UNIFIED IDEOGRAPH + {0xBCD3, 0x6A13}, //4291 #CJK UNIFIED IDEOGRAPH + {0xBCD4, 0x6A0A}, //4292 #CJK UNIFIED IDEOGRAPH + {0xBCD5, 0x69F3}, //4293 #CJK UNIFIED IDEOGRAPH + {0xBCD6, 0x6A02}, //4294 #CJK UNIFIED IDEOGRAPH + {0xBCD7, 0x6A05}, //4295 #CJK UNIFIED IDEOGRAPH + {0xBCD8, 0x69ED}, //4296 #CJK UNIFIED IDEOGRAPH + {0xBCD9, 0x6A11}, //4297 #CJK UNIFIED IDEOGRAPH + {0xBCDA, 0x6B50}, //4298 #CJK UNIFIED IDEOGRAPH + {0xBCDB, 0x6B4E}, //4299 #CJK UNIFIED IDEOGRAPH + {0xBCDC, 0x6BA4}, //4300 #CJK UNIFIED IDEOGRAPH + {0xBCDD, 0x6BC5}, //4301 #CJK UNIFIED IDEOGRAPH + {0xBCDE, 0x6BC6}, //4302 #CJK UNIFIED IDEOGRAPH + {0xBCDF, 0x6F3F}, //4303 #CJK UNIFIED IDEOGRAPH + {0xBCE0, 0x6F7C}, //4304 #CJK UNIFIED IDEOGRAPH + {0xBCE1, 0x6F84}, //4305 #CJK UNIFIED IDEOGRAPH + {0xBCE2, 0x6F51}, //4306 #CJK UNIFIED IDEOGRAPH + {0xBCE3, 0x6F66}, //4307 #CJK UNIFIED IDEOGRAPH + {0xBCE4, 0x6F54}, //4308 #CJK UNIFIED IDEOGRAPH + {0xBCE5, 0x6F86}, //4309 #CJK UNIFIED IDEOGRAPH + {0xBCE6, 0x6F6D}, //4310 #CJK UNIFIED IDEOGRAPH + {0xBCE7, 0x6F5B}, //4311 #CJK UNIFIED IDEOGRAPH + {0xBCE8, 0x6F78}, //4312 #CJK UNIFIED IDEOGRAPH + {0xBCE9, 0x6F6E}, //4313 #CJK UNIFIED IDEOGRAPH + {0xBCEA, 0x6F8E}, //4314 #CJK UNIFIED IDEOGRAPH + {0xBCEB, 0x6F7A}, //4315 #CJK UNIFIED IDEOGRAPH + {0xBCEC, 0x6F70}, //4316 #CJK UNIFIED IDEOGRAPH + {0xBCED, 0x6F64}, //4317 #CJK UNIFIED IDEOGRAPH + {0xBCEE, 0x6F97}, //4318 #CJK UNIFIED IDEOGRAPH + {0xBCEF, 0x6F58}, //4319 #CJK UNIFIED IDEOGRAPH + {0xBCF0, 0x6ED5}, //4320 #CJK UNIFIED IDEOGRAPH + {0xBCF1, 0x6F6F}, //4321 #CJK UNIFIED IDEOGRAPH + {0xBCF2, 0x6F60}, //4322 #CJK UNIFIED IDEOGRAPH + {0xBCF3, 0x6F5F}, //4323 #CJK UNIFIED IDEOGRAPH + {0xBCF4, 0x719F}, //4324 #CJK UNIFIED IDEOGRAPH + {0xBCF5, 0x71AC}, //4325 #CJK UNIFIED IDEOGRAPH + {0xBCF6, 0x71B1}, //4326 #CJK UNIFIED IDEOGRAPH + {0xBCF7, 0x71A8}, //4327 #CJK UNIFIED IDEOGRAPH + {0xBCF8, 0x7256}, //4328 #CJK UNIFIED IDEOGRAPH + {0xBCF9, 0x729B}, //4329 #CJK UNIFIED IDEOGRAPH + {0xBCFA, 0x734E}, //4330 #CJK UNIFIED IDEOGRAPH + {0xBCFB, 0x7357}, //4331 #CJK UNIFIED IDEOGRAPH + {0xBCFC, 0x7469}, //4332 #CJK UNIFIED IDEOGRAPH + {0xBCFD, 0x748B}, //4333 #CJK UNIFIED IDEOGRAPH + {0xBCFE, 0x7483}, //4334 #CJK UNIFIED IDEOGRAPH + {0xBD40, 0x747E}, //4335 #CJK UNIFIED IDEOGRAPH + {0xBD41, 0x7480}, //4336 #CJK UNIFIED IDEOGRAPH + {0xBD42, 0x757F}, //4337 #CJK UNIFIED IDEOGRAPH + {0xBD43, 0x7620}, //4338 #CJK UNIFIED IDEOGRAPH + {0xBD44, 0x7629}, //4339 #CJK UNIFIED IDEOGRAPH + {0xBD45, 0x761F}, //4340 #CJK UNIFIED IDEOGRAPH + {0xBD46, 0x7624}, //4341 #CJK UNIFIED IDEOGRAPH + {0xBD47, 0x7626}, //4342 #CJK UNIFIED IDEOGRAPH + {0xBD48, 0x7621}, //4343 #CJK UNIFIED IDEOGRAPH + {0xBD49, 0x7622}, //4344 #CJK UNIFIED IDEOGRAPH + {0xBD4A, 0x769A}, //4345 #CJK UNIFIED IDEOGRAPH + {0xBD4B, 0x76BA}, //4346 #CJK UNIFIED IDEOGRAPH + {0xBD4C, 0x76E4}, //4347 #CJK UNIFIED IDEOGRAPH + {0xBD4D, 0x778E}, //4348 #CJK UNIFIED IDEOGRAPH + {0xBD4E, 0x7787}, //4349 #CJK UNIFIED IDEOGRAPH + {0xBD4F, 0x778C}, //4350 #CJK UNIFIED IDEOGRAPH + {0xBD50, 0x7791}, //4351 #CJK UNIFIED IDEOGRAPH + {0xBD51, 0x778B}, //4352 #CJK UNIFIED IDEOGRAPH + {0xBD52, 0x78CB}, //4353 #CJK UNIFIED IDEOGRAPH + {0xBD53, 0x78C5}, //4354 #CJK UNIFIED IDEOGRAPH + {0xBD54, 0x78BA}, //4355 #CJK UNIFIED IDEOGRAPH + {0xBD55, 0x78CA}, //4356 #CJK UNIFIED IDEOGRAPH + {0xBD56, 0x78BE}, //4357 #CJK UNIFIED IDEOGRAPH + {0xBD57, 0x78D5}, //4358 #CJK UNIFIED IDEOGRAPH + {0xBD58, 0x78BC}, //4359 #CJK UNIFIED IDEOGRAPH + {0xBD59, 0x78D0}, //4360 #CJK UNIFIED IDEOGRAPH + {0xBD5A, 0x7A3F}, //4361 #CJK UNIFIED IDEOGRAPH + {0xBD5B, 0x7A3C}, //4362 #CJK UNIFIED IDEOGRAPH + {0xBD5C, 0x7A40}, //4363 #CJK UNIFIED IDEOGRAPH + {0xBD5D, 0x7A3D}, //4364 #CJK UNIFIED IDEOGRAPH + {0xBD5E, 0x7A37}, //4365 #CJK UNIFIED IDEOGRAPH + {0xBD5F, 0x7A3B}, //4366 #CJK UNIFIED IDEOGRAPH + {0xBD60, 0x7AAF}, //4367 #CJK UNIFIED IDEOGRAPH + {0xBD61, 0x7AAE}, //4368 #CJK UNIFIED IDEOGRAPH + {0xBD62, 0x7BAD}, //4369 #CJK UNIFIED IDEOGRAPH + {0xBD63, 0x7BB1}, //4370 #CJK UNIFIED IDEOGRAPH + {0xBD64, 0x7BC4}, //4371 #CJK UNIFIED IDEOGRAPH + {0xBD65, 0x7BB4}, //4372 #CJK UNIFIED IDEOGRAPH + {0xBD66, 0x7BC6}, //4373 #CJK UNIFIED IDEOGRAPH + {0xBD67, 0x7BC7}, //4374 #CJK UNIFIED IDEOGRAPH + {0xBD68, 0x7BC1}, //4375 #CJK UNIFIED IDEOGRAPH + {0xBD69, 0x7BA0}, //4376 #CJK UNIFIED IDEOGRAPH + {0xBD6A, 0x7BCC}, //4377 #CJK UNIFIED IDEOGRAPH + {0xBD6B, 0x7CCA}, //4378 #CJK UNIFIED IDEOGRAPH + {0xBD6C, 0x7DE0}, //4379 #CJK UNIFIED IDEOGRAPH + {0xBD6D, 0x7DF4}, //4380 #CJK UNIFIED IDEOGRAPH + {0xBD6E, 0x7DEF}, //4381 #CJK UNIFIED IDEOGRAPH + {0xBD6F, 0x7DFB}, //4382 #CJK UNIFIED IDEOGRAPH + {0xBD70, 0x7DD8}, //4383 #CJK UNIFIED IDEOGRAPH + {0xBD71, 0x7DEC}, //4384 #CJK UNIFIED IDEOGRAPH + {0xBD72, 0x7DDD}, //4385 #CJK UNIFIED IDEOGRAPH + {0xBD73, 0x7DE8}, //4386 #CJK UNIFIED IDEOGRAPH + {0xBD74, 0x7DE3}, //4387 #CJK UNIFIED IDEOGRAPH + {0xBD75, 0x7DDA}, //4388 #CJK UNIFIED IDEOGRAPH + {0xBD76, 0x7DDE}, //4389 #CJK UNIFIED IDEOGRAPH + {0xBD77, 0x7DE9}, //4390 #CJK UNIFIED IDEOGRAPH + {0xBD78, 0x7D9E}, //4391 #CJK UNIFIED IDEOGRAPH + {0xBD79, 0x7DD9}, //4392 #CJK UNIFIED IDEOGRAPH + {0xBD7A, 0x7DF2}, //4393 #CJK UNIFIED IDEOGRAPH + {0xBD7B, 0x7DF9}, //4394 #CJK UNIFIED IDEOGRAPH + {0xBD7C, 0x7F75}, //4395 #CJK UNIFIED IDEOGRAPH + {0xBD7D, 0x7F77}, //4396 #CJK UNIFIED IDEOGRAPH + {0xBD7E, 0x7FAF}, //4397 #CJK UNIFIED IDEOGRAPH + {0xBDA1, 0x7FE9}, //4398 #CJK UNIFIED IDEOGRAPH + {0xBDA2, 0x8026}, //4399 #CJK UNIFIED IDEOGRAPH + {0xBDA3, 0x819B}, //4400 #CJK UNIFIED IDEOGRAPH + {0xBDA4, 0x819C}, //4401 #CJK UNIFIED IDEOGRAPH + {0xBDA5, 0x819D}, //4402 #CJK UNIFIED IDEOGRAPH + {0xBDA6, 0x81A0}, //4403 #CJK UNIFIED IDEOGRAPH + {0xBDA7, 0x819A}, //4404 #CJK UNIFIED IDEOGRAPH + {0xBDA8, 0x8198}, //4405 #CJK UNIFIED IDEOGRAPH + {0xBDA9, 0x8517}, //4406 #CJK UNIFIED IDEOGRAPH + {0xBDAA, 0x853D}, //4407 #CJK UNIFIED IDEOGRAPH + {0xBDAB, 0x851A}, //4408 #CJK UNIFIED IDEOGRAPH + {0xBDAC, 0x84EE}, //4409 #CJK UNIFIED IDEOGRAPH + {0xBDAD, 0x852C}, //4410 #CJK UNIFIED IDEOGRAPH + {0xBDAE, 0x852D}, //4411 #CJK UNIFIED IDEOGRAPH + {0xBDAF, 0x8513}, //4412 #CJK UNIFIED IDEOGRAPH + {0xBDB0, 0x8511}, //4413 #CJK UNIFIED IDEOGRAPH + {0xBDB1, 0x8523}, //4414 #CJK UNIFIED IDEOGRAPH + {0xBDB2, 0x8521}, //4415 #CJK UNIFIED IDEOGRAPH + {0xBDB3, 0x8514}, //4416 #CJK UNIFIED IDEOGRAPH + {0xBDB4, 0x84EC}, //4417 #CJK UNIFIED IDEOGRAPH + {0xBDB5, 0x8525}, //4418 #CJK UNIFIED IDEOGRAPH + {0xBDB6, 0x84FF}, //4419 #CJK UNIFIED IDEOGRAPH + {0xBDB7, 0x8506}, //4420 #CJK UNIFIED IDEOGRAPH + {0xBDB8, 0x8782}, //4421 #CJK UNIFIED IDEOGRAPH + {0xBDB9, 0x8774}, //4422 #CJK UNIFIED IDEOGRAPH + {0xBDBA, 0x8776}, //4423 #CJK UNIFIED IDEOGRAPH + {0xBDBB, 0x8760}, //4424 #CJK UNIFIED IDEOGRAPH + {0xBDBC, 0x8766}, //4425 #CJK UNIFIED IDEOGRAPH + {0xBDBD, 0x8778}, //4426 #CJK UNIFIED IDEOGRAPH + {0xBDBE, 0x8768}, //4427 #CJK UNIFIED IDEOGRAPH + {0xBDBF, 0x8759}, //4428 #CJK UNIFIED IDEOGRAPH + {0xBDC0, 0x8757}, //4429 #CJK UNIFIED IDEOGRAPH + {0xBDC1, 0x874C}, //4430 #CJK UNIFIED IDEOGRAPH + {0xBDC2, 0x8753}, //4431 #CJK UNIFIED IDEOGRAPH + {0xBDC3, 0x885B}, //4432 #CJK UNIFIED IDEOGRAPH + {0xBDC4, 0x885D}, //4433 #CJK UNIFIED IDEOGRAPH + {0xBDC5, 0x8910}, //4434 #CJK UNIFIED IDEOGRAPH + {0xBDC6, 0x8907}, //4435 #CJK UNIFIED IDEOGRAPH + {0xBDC7, 0x8912}, //4436 #CJK UNIFIED IDEOGRAPH + {0xBDC8, 0x8913}, //4437 #CJK UNIFIED IDEOGRAPH + {0xBDC9, 0x8915}, //4438 #CJK UNIFIED IDEOGRAPH + {0xBDCA, 0x890A}, //4439 #CJK UNIFIED IDEOGRAPH + {0xBDCB, 0x8ABC}, //4440 #CJK UNIFIED IDEOGRAPH + {0xBDCC, 0x8AD2}, //4441 #CJK UNIFIED IDEOGRAPH + {0xBDCD, 0x8AC7}, //4442 #CJK UNIFIED IDEOGRAPH + {0xBDCE, 0x8AC4}, //4443 #CJK UNIFIED IDEOGRAPH + {0xBDCF, 0x8A95}, //4444 #CJK UNIFIED IDEOGRAPH + {0xBDD0, 0x8ACB}, //4445 #CJK UNIFIED IDEOGRAPH + {0xBDD1, 0x8AF8}, //4446 #CJK UNIFIED IDEOGRAPH + {0xBDD2, 0x8AB2}, //4447 #CJK UNIFIED IDEOGRAPH + {0xBDD3, 0x8AC9}, //4448 #CJK UNIFIED IDEOGRAPH + {0xBDD4, 0x8AC2}, //4449 #CJK UNIFIED IDEOGRAPH + {0xBDD5, 0x8ABF}, //4450 #CJK UNIFIED IDEOGRAPH + {0xBDD6, 0x8AB0}, //4451 #CJK UNIFIED IDEOGRAPH + {0xBDD7, 0x8AD6}, //4452 #CJK UNIFIED IDEOGRAPH + {0xBDD8, 0x8ACD}, //4453 #CJK UNIFIED IDEOGRAPH + {0xBDD9, 0x8AB6}, //4454 #CJK UNIFIED IDEOGRAPH + {0xBDDA, 0x8AB9}, //4455 #CJK UNIFIED IDEOGRAPH + {0xBDDB, 0x8ADB}, //4456 #CJK UNIFIED IDEOGRAPH + {0xBDDC, 0x8C4C}, //4457 #CJK UNIFIED IDEOGRAPH + {0xBDDD, 0x8C4E}, //4458 #CJK UNIFIED IDEOGRAPH + {0xBDDE, 0x8C6C}, //4459 #CJK UNIFIED IDEOGRAPH + {0xBDDF, 0x8CE0}, //4460 #CJK UNIFIED IDEOGRAPH + {0xBDE0, 0x8CDE}, //4461 #CJK UNIFIED IDEOGRAPH + {0xBDE1, 0x8CE6}, //4462 #CJK UNIFIED IDEOGRAPH + {0xBDE2, 0x8CE4}, //4463 #CJK UNIFIED IDEOGRAPH + {0xBDE3, 0x8CEC}, //4464 #CJK UNIFIED IDEOGRAPH + {0xBDE4, 0x8CED}, //4465 #CJK UNIFIED IDEOGRAPH + {0xBDE5, 0x8CE2}, //4466 #CJK UNIFIED IDEOGRAPH + {0xBDE6, 0x8CE3}, //4467 #CJK UNIFIED IDEOGRAPH + {0xBDE7, 0x8CDC}, //4468 #CJK UNIFIED IDEOGRAPH + {0xBDE8, 0x8CEA}, //4469 #CJK UNIFIED IDEOGRAPH + {0xBDE9, 0x8CE1}, //4470 #CJK UNIFIED IDEOGRAPH + {0xBDEA, 0x8D6D}, //4471 #CJK UNIFIED IDEOGRAPH + {0xBDEB, 0x8D9F}, //4472 #CJK UNIFIED IDEOGRAPH + {0xBDEC, 0x8DA3}, //4473 #CJK UNIFIED IDEOGRAPH + {0xBDED, 0x8E2B}, //4474 #CJK UNIFIED IDEOGRAPH + {0xBDEE, 0x8E10}, //4475 #CJK UNIFIED IDEOGRAPH + {0xBDEF, 0x8E1D}, //4476 #CJK UNIFIED IDEOGRAPH + {0xBDF0, 0x8E22}, //4477 #CJK UNIFIED IDEOGRAPH + {0xBDF1, 0x8E0F}, //4478 #CJK UNIFIED IDEOGRAPH + {0xBDF2, 0x8E29}, //4479 #CJK UNIFIED IDEOGRAPH + {0xBDF3, 0x8E1F}, //4480 #CJK UNIFIED IDEOGRAPH + {0xBDF4, 0x8E21}, //4481 #CJK UNIFIED IDEOGRAPH + {0xBDF5, 0x8E1E}, //4482 #CJK UNIFIED IDEOGRAPH + {0xBDF6, 0x8EBA}, //4483 #CJK UNIFIED IDEOGRAPH + {0xBDF7, 0x8F1D}, //4484 #CJK UNIFIED IDEOGRAPH + {0xBDF8, 0x8F1B}, //4485 #CJK UNIFIED IDEOGRAPH + {0xBDF9, 0x8F1F}, //4486 #CJK UNIFIED IDEOGRAPH + {0xBDFA, 0x8F29}, //4487 #CJK UNIFIED IDEOGRAPH + {0xBDFB, 0x8F26}, //4488 #CJK UNIFIED IDEOGRAPH + {0xBDFC, 0x8F2A}, //4489 #CJK UNIFIED IDEOGRAPH + {0xBDFD, 0x8F1C}, //4490 #CJK UNIFIED IDEOGRAPH + {0xBDFE, 0x8F1E}, //4491 #CJK UNIFIED IDEOGRAPH + {0xBE40, 0x8F25}, //4492 #CJK UNIFIED IDEOGRAPH + {0xBE41, 0x9069}, //4493 #CJK UNIFIED IDEOGRAPH + {0xBE42, 0x906E}, //4494 #CJK UNIFIED IDEOGRAPH + {0xBE43, 0x9068}, //4495 #CJK UNIFIED IDEOGRAPH + {0xBE44, 0x906D}, //4496 #CJK UNIFIED IDEOGRAPH + {0xBE45, 0x9077}, //4497 #CJK UNIFIED IDEOGRAPH + {0xBE46, 0x9130}, //4498 #CJK UNIFIED IDEOGRAPH + {0xBE47, 0x912D}, //4499 #CJK UNIFIED IDEOGRAPH + {0xBE48, 0x9127}, //4500 #CJK UNIFIED IDEOGRAPH + {0xBE49, 0x9131}, //4501 #CJK UNIFIED IDEOGRAPH + {0xBE4A, 0x9187}, //4502 #CJK UNIFIED IDEOGRAPH + {0xBE4B, 0x9189}, //4503 #CJK UNIFIED IDEOGRAPH + {0xBE4C, 0x918B}, //4504 #CJK UNIFIED IDEOGRAPH + {0xBE4D, 0x9183}, //4505 #CJK UNIFIED IDEOGRAPH + {0xBE4E, 0x92C5}, //4506 #CJK UNIFIED IDEOGRAPH + {0xBE4F, 0x92BB}, //4507 #CJK UNIFIED IDEOGRAPH + {0xBE50, 0x92B7}, //4508 #CJK UNIFIED IDEOGRAPH + {0xBE51, 0x92EA}, //4509 #CJK UNIFIED IDEOGRAPH + {0xBE52, 0x92AC}, //4510 #CJK UNIFIED IDEOGRAPH + {0xBE53, 0x92E4}, //4511 #CJK UNIFIED IDEOGRAPH + {0xBE54, 0x92C1}, //4512 #CJK UNIFIED IDEOGRAPH + {0xBE55, 0x92B3}, //4513 #CJK UNIFIED IDEOGRAPH + {0xBE56, 0x92BC}, //4514 #CJK UNIFIED IDEOGRAPH + {0xBE57, 0x92D2}, //4515 #CJK UNIFIED IDEOGRAPH + {0xBE58, 0x92C7}, //4516 #CJK UNIFIED IDEOGRAPH + {0xBE59, 0x92F0}, //4517 #CJK UNIFIED IDEOGRAPH + {0xBE5A, 0x92B2}, //4518 #CJK UNIFIED IDEOGRAPH + {0xBE5B, 0x95AD}, //4519 #CJK UNIFIED IDEOGRAPH + {0xBE5C, 0x95B1}, //4520 #CJK UNIFIED IDEOGRAPH + {0xBE5D, 0x9704}, //4521 #CJK UNIFIED IDEOGRAPH + {0xBE5E, 0x9706}, //4522 #CJK UNIFIED IDEOGRAPH + {0xBE5F, 0x9707}, //4523 #CJK UNIFIED IDEOGRAPH + {0xBE60, 0x9709}, //4524 #CJK UNIFIED IDEOGRAPH + {0xBE61, 0x9760}, //4525 #CJK UNIFIED IDEOGRAPH + {0xBE62, 0x978D}, //4526 #CJK UNIFIED IDEOGRAPH + {0xBE63, 0x978B}, //4527 #CJK UNIFIED IDEOGRAPH + {0xBE64, 0x978F}, //4528 #CJK UNIFIED IDEOGRAPH + {0xBE65, 0x9821}, //4529 #CJK UNIFIED IDEOGRAPH + {0xBE66, 0x982B}, //4530 #CJK UNIFIED IDEOGRAPH + {0xBE67, 0x981C}, //4531 #CJK UNIFIED IDEOGRAPH + {0xBE68, 0x98B3}, //4532 #CJK UNIFIED IDEOGRAPH + {0xBE69, 0x990A}, //4533 #CJK UNIFIED IDEOGRAPH + {0xBE6A, 0x9913}, //4534 #CJK UNIFIED IDEOGRAPH + {0xBE6B, 0x9912}, //4535 #CJK UNIFIED IDEOGRAPH + {0xBE6C, 0x9918}, //4536 #CJK UNIFIED IDEOGRAPH + {0xBE6D, 0x99DD}, //4537 #CJK UNIFIED IDEOGRAPH + {0xBE6E, 0x99D0}, //4538 #CJK UNIFIED IDEOGRAPH + {0xBE6F, 0x99DF}, //4539 #CJK UNIFIED IDEOGRAPH + {0xBE70, 0x99DB}, //4540 #CJK UNIFIED IDEOGRAPH + {0xBE71, 0x99D1}, //4541 #CJK UNIFIED IDEOGRAPH + {0xBE72, 0x99D5}, //4542 #CJK UNIFIED IDEOGRAPH + {0xBE73, 0x99D2}, //4543 #CJK UNIFIED IDEOGRAPH + {0xBE74, 0x99D9}, //4544 #CJK UNIFIED IDEOGRAPH + {0xBE75, 0x9AB7}, //4545 #CJK UNIFIED IDEOGRAPH + {0xBE76, 0x9AEE}, //4546 #CJK UNIFIED IDEOGRAPH + {0xBE77, 0x9AEF}, //4547 #CJK UNIFIED IDEOGRAPH + {0xBE78, 0x9B27}, //4548 #CJK UNIFIED IDEOGRAPH + {0xBE79, 0x9B45}, //4549 #CJK UNIFIED IDEOGRAPH + {0xBE7A, 0x9B44}, //4550 #CJK UNIFIED IDEOGRAPH + {0xBE7B, 0x9B77}, //4551 #CJK UNIFIED IDEOGRAPH + {0xBE7C, 0x9B6F}, //4552 #CJK UNIFIED IDEOGRAPH + {0xBE7D, 0x9D06}, //4553 #CJK UNIFIED IDEOGRAPH + {0xBE7E, 0x9D09}, //4554 #CJK UNIFIED IDEOGRAPH + {0xBEA1, 0x9D03}, //4555 #CJK UNIFIED IDEOGRAPH + {0xBEA2, 0x9EA9}, //4556 #CJK UNIFIED IDEOGRAPH + {0xBEA3, 0x9EBE}, //4557 #CJK UNIFIED IDEOGRAPH + {0xBEA4, 0x9ECE}, //4558 #CJK UNIFIED IDEOGRAPH + {0xBEA5, 0x58A8}, //4559 #CJK UNIFIED IDEOGRAPH + {0xBEA6, 0x9F52}, //4560 #CJK UNIFIED IDEOGRAPH + {0xBEA7, 0x5112}, //4561 #CJK UNIFIED IDEOGRAPH + {0xBEA8, 0x5118}, //4562 #CJK UNIFIED IDEOGRAPH + {0xBEA9, 0x5114}, //4563 #CJK UNIFIED IDEOGRAPH + {0xBEAA, 0x5110}, //4564 #CJK UNIFIED IDEOGRAPH + {0xBEAB, 0x5115}, //4565 #CJK UNIFIED IDEOGRAPH + {0xBEAC, 0x5180}, //4566 #CJK UNIFIED IDEOGRAPH + {0xBEAD, 0x51AA}, //4567 #CJK UNIFIED IDEOGRAPH + {0xBEAE, 0x51DD}, //4568 #CJK UNIFIED IDEOGRAPH + {0xBEAF, 0x5291}, //4569 #CJK UNIFIED IDEOGRAPH + {0xBEB0, 0x5293}, //4570 #CJK UNIFIED IDEOGRAPH + {0xBEB1, 0x52F3}, //4571 #CJK UNIFIED IDEOGRAPH + {0xBEB2, 0x5659}, //4572 #CJK UNIFIED IDEOGRAPH + {0xBEB3, 0x566B}, //4573 #CJK UNIFIED IDEOGRAPH + {0xBEB4, 0x5679}, //4574 #CJK UNIFIED IDEOGRAPH + {0xBEB5, 0x5669}, //4575 #CJK UNIFIED IDEOGRAPH + {0xBEB6, 0x5664}, //4576 #CJK UNIFIED IDEOGRAPH + {0xBEB7, 0x5678}, //4577 #CJK UNIFIED IDEOGRAPH + {0xBEB8, 0x566A}, //4578 #CJK UNIFIED IDEOGRAPH + {0xBEB9, 0x5668}, //4579 #CJK UNIFIED IDEOGRAPH + {0xBEBA, 0x5665}, //4580 #CJK UNIFIED IDEOGRAPH + {0xBEBB, 0x5671}, //4581 #CJK UNIFIED IDEOGRAPH + {0xBEBC, 0x566F}, //4582 #CJK UNIFIED IDEOGRAPH + {0xBEBD, 0x566C}, //4583 #CJK UNIFIED IDEOGRAPH + {0xBEBE, 0x5662}, //4584 #CJK UNIFIED IDEOGRAPH + {0xBEBF, 0x5676}, //4585 #CJK UNIFIED IDEOGRAPH + {0xBEC0, 0x58C1}, //4586 #CJK UNIFIED IDEOGRAPH + {0xBEC1, 0x58BE}, //4587 #CJK UNIFIED IDEOGRAPH + {0xBEC2, 0x58C7}, //4588 #CJK UNIFIED IDEOGRAPH + {0xBEC3, 0x58C5}, //4589 #CJK UNIFIED IDEOGRAPH + {0xBEC4, 0x596E}, //4590 #CJK UNIFIED IDEOGRAPH + {0xBEC5, 0x5B1D}, //4591 #CJK UNIFIED IDEOGRAPH + {0xBEC6, 0x5B34}, //4592 #CJK UNIFIED IDEOGRAPH + {0xBEC7, 0x5B78}, //4593 #CJK UNIFIED IDEOGRAPH + {0xBEC8, 0x5BF0}, //4594 #CJK UNIFIED IDEOGRAPH + {0xBEC9, 0x5C0E}, //4595 #CJK UNIFIED IDEOGRAPH + {0xBECA, 0x5F4A}, //4596 #CJK UNIFIED IDEOGRAPH + {0xBECB, 0x61B2}, //4597 #CJK UNIFIED IDEOGRAPH + {0xBECC, 0x6191}, //4598 #CJK UNIFIED IDEOGRAPH + {0xBECD, 0x61A9}, //4599 #CJK UNIFIED IDEOGRAPH + {0xBECE, 0x618A}, //4600 #CJK UNIFIED IDEOGRAPH + {0xBECF, 0x61CD}, //4601 #CJK UNIFIED IDEOGRAPH + {0xBED0, 0x61B6}, //4602 #CJK UNIFIED IDEOGRAPH + {0xBED1, 0x61BE}, //4603 #CJK UNIFIED IDEOGRAPH + {0xBED2, 0x61CA}, //4604 #CJK UNIFIED IDEOGRAPH + {0xBED3, 0x61C8}, //4605 #CJK UNIFIED IDEOGRAPH + {0xBED4, 0x6230}, //4606 #CJK UNIFIED IDEOGRAPH + {0xBED5, 0x64C5}, //4607 #CJK UNIFIED IDEOGRAPH + {0xBED6, 0x64C1}, //4608 #CJK UNIFIED IDEOGRAPH + {0xBED7, 0x64CB}, //4609 #CJK UNIFIED IDEOGRAPH + {0xBED8, 0x64BB}, //4610 #CJK UNIFIED IDEOGRAPH + {0xBED9, 0x64BC}, //4611 #CJK UNIFIED IDEOGRAPH + {0xBEDA, 0x64DA}, //4612 #CJK UNIFIED IDEOGRAPH + {0xBEDB, 0x64C4}, //4613 #CJK UNIFIED IDEOGRAPH + {0xBEDC, 0x64C7}, //4614 #CJK UNIFIED IDEOGRAPH + {0xBEDD, 0x64C2}, //4615 #CJK UNIFIED IDEOGRAPH + {0xBEDE, 0x64CD}, //4616 #CJK UNIFIED IDEOGRAPH + {0xBEDF, 0x64BF}, //4617 #CJK UNIFIED IDEOGRAPH + {0xBEE0, 0x64D2}, //4618 #CJK UNIFIED IDEOGRAPH + {0xBEE1, 0x64D4}, //4619 #CJK UNIFIED IDEOGRAPH + {0xBEE2, 0x64BE}, //4620 #CJK UNIFIED IDEOGRAPH + {0xBEE3, 0x6574}, //4621 #CJK UNIFIED IDEOGRAPH + {0xBEE4, 0x66C6}, //4622 #CJK UNIFIED IDEOGRAPH + {0xBEE5, 0x66C9}, //4623 #CJK UNIFIED IDEOGRAPH + {0xBEE6, 0x66B9}, //4624 #CJK UNIFIED IDEOGRAPH + {0xBEE7, 0x66C4}, //4625 #CJK UNIFIED IDEOGRAPH + {0xBEE8, 0x66C7}, //4626 #CJK UNIFIED IDEOGRAPH + {0xBEE9, 0x66B8}, //4627 #CJK UNIFIED IDEOGRAPH + {0xBEEA, 0x6A3D}, //4628 #CJK UNIFIED IDEOGRAPH + {0xBEEB, 0x6A38}, //4629 #CJK UNIFIED IDEOGRAPH + {0xBEEC, 0x6A3A}, //4630 #CJK UNIFIED IDEOGRAPH + {0xBEED, 0x6A59}, //4631 #CJK UNIFIED IDEOGRAPH + {0xBEEE, 0x6A6B}, //4632 #CJK UNIFIED IDEOGRAPH + {0xBEEF, 0x6A58}, //4633 #CJK UNIFIED IDEOGRAPH + {0xBEF0, 0x6A39}, //4634 #CJK UNIFIED IDEOGRAPH + {0xBEF1, 0x6A44}, //4635 #CJK UNIFIED IDEOGRAPH + {0xBEF2, 0x6A62}, //4636 #CJK UNIFIED IDEOGRAPH + {0xBEF3, 0x6A61}, //4637 #CJK UNIFIED IDEOGRAPH + {0xBEF4, 0x6A4B}, //4638 #CJK UNIFIED IDEOGRAPH + {0xBEF5, 0x6A47}, //4639 #CJK UNIFIED IDEOGRAPH + {0xBEF6, 0x6A35}, //4640 #CJK UNIFIED IDEOGRAPH + {0xBEF7, 0x6A5F}, //4641 #CJK UNIFIED IDEOGRAPH + {0xBEF8, 0x6A48}, //4642 #CJK UNIFIED IDEOGRAPH + {0xBEF9, 0x6B59}, //4643 #CJK UNIFIED IDEOGRAPH + {0xBEFA, 0x6B77}, //4644 #CJK UNIFIED IDEOGRAPH + {0xBEFB, 0x6C05}, //4645 #CJK UNIFIED IDEOGRAPH + {0xBEFC, 0x6FC2}, //4646 #CJK UNIFIED IDEOGRAPH + {0xBEFD, 0x6FB1}, //4647 #CJK UNIFIED IDEOGRAPH + {0xBEFE, 0x6FA1}, //4648 #CJK UNIFIED IDEOGRAPH + {0xBF40, 0x6FC3}, //4649 #CJK UNIFIED IDEOGRAPH + {0xBF41, 0x6FA4}, //4650 #CJK UNIFIED IDEOGRAPH + {0xBF42, 0x6FC1}, //4651 #CJK UNIFIED IDEOGRAPH + {0xBF43, 0x6FA7}, //4652 #CJK UNIFIED IDEOGRAPH + {0xBF44, 0x6FB3}, //4653 #CJK UNIFIED IDEOGRAPH + {0xBF45, 0x6FC0}, //4654 #CJK UNIFIED IDEOGRAPH + {0xBF46, 0x6FB9}, //4655 #CJK UNIFIED IDEOGRAPH + {0xBF47, 0x6FB6}, //4656 #CJK UNIFIED IDEOGRAPH + {0xBF48, 0x6FA6}, //4657 #CJK UNIFIED IDEOGRAPH + {0xBF49, 0x6FA0}, //4658 #CJK UNIFIED IDEOGRAPH + {0xBF4A, 0x6FB4}, //4659 #CJK UNIFIED IDEOGRAPH + {0xBF4B, 0x71BE}, //4660 #CJK UNIFIED IDEOGRAPH + {0xBF4C, 0x71C9}, //4661 #CJK UNIFIED IDEOGRAPH + {0xBF4D, 0x71D0}, //4662 #CJK UNIFIED IDEOGRAPH + {0xBF4E, 0x71D2}, //4663 #CJK UNIFIED IDEOGRAPH + {0xBF4F, 0x71C8}, //4664 #CJK UNIFIED IDEOGRAPH + {0xBF50, 0x71D5}, //4665 #CJK UNIFIED IDEOGRAPH + {0xBF51, 0x71B9}, //4666 #CJK UNIFIED IDEOGRAPH + {0xBF52, 0x71CE}, //4667 #CJK UNIFIED IDEOGRAPH + {0xBF53, 0x71D9}, //4668 #CJK UNIFIED IDEOGRAPH + {0xBF54, 0x71DC}, //4669 #CJK UNIFIED IDEOGRAPH + {0xBF55, 0x71C3}, //4670 #CJK UNIFIED IDEOGRAPH + {0xBF56, 0x71C4}, //4671 #CJK UNIFIED IDEOGRAPH + {0xBF57, 0x7368}, //4672 #CJK UNIFIED IDEOGRAPH + {0xBF58, 0x749C}, //4673 #CJK UNIFIED IDEOGRAPH + {0xBF59, 0x74A3}, //4674 #CJK UNIFIED IDEOGRAPH + {0xBF5A, 0x7498}, //4675 #CJK UNIFIED IDEOGRAPH + {0xBF5B, 0x749F}, //4676 #CJK UNIFIED IDEOGRAPH + {0xBF5C, 0x749E}, //4677 #CJK UNIFIED IDEOGRAPH + {0xBF5D, 0x74E2}, //4678 #CJK UNIFIED IDEOGRAPH + {0xBF5E, 0x750C}, //4679 #CJK UNIFIED IDEOGRAPH + {0xBF5F, 0x750D}, //4680 #CJK UNIFIED IDEOGRAPH + {0xBF60, 0x7634}, //4681 #CJK UNIFIED IDEOGRAPH + {0xBF61, 0x7638}, //4682 #CJK UNIFIED IDEOGRAPH + {0xBF62, 0x763A}, //4683 #CJK UNIFIED IDEOGRAPH + {0xBF63, 0x76E7}, //4684 #CJK UNIFIED IDEOGRAPH + {0xBF64, 0x76E5}, //4685 #CJK UNIFIED IDEOGRAPH + {0xBF65, 0x77A0}, //4686 #CJK UNIFIED IDEOGRAPH + {0xBF66, 0x779E}, //4687 #CJK UNIFIED IDEOGRAPH + {0xBF67, 0x779F}, //4688 #CJK UNIFIED IDEOGRAPH + {0xBF68, 0x77A5}, //4689 #CJK UNIFIED IDEOGRAPH + {0xBF69, 0x78E8}, //4690 #CJK UNIFIED IDEOGRAPH + {0xBF6A, 0x78DA}, //4691 #CJK UNIFIED IDEOGRAPH + {0xBF6B, 0x78EC}, //4692 #CJK UNIFIED IDEOGRAPH + {0xBF6C, 0x78E7}, //4693 #CJK UNIFIED IDEOGRAPH + {0xBF6D, 0x79A6}, //4694 #CJK UNIFIED IDEOGRAPH + {0xBF6E, 0x7A4D}, //4695 #CJK UNIFIED IDEOGRAPH + {0xBF6F, 0x7A4E}, //4696 #CJK UNIFIED IDEOGRAPH + {0xBF70, 0x7A46}, //4697 #CJK UNIFIED IDEOGRAPH + {0xBF71, 0x7A4C}, //4698 #CJK UNIFIED IDEOGRAPH + {0xBF72, 0x7A4B}, //4699 #CJK UNIFIED IDEOGRAPH + {0xBF73, 0x7ABA}, //4700 #CJK UNIFIED IDEOGRAPH + {0xBF74, 0x7BD9}, //4701 #CJK UNIFIED IDEOGRAPH + {0xBF75, 0x7C11}, //4702 #CJK UNIFIED IDEOGRAPH + {0xBF76, 0x7BC9}, //4703 #CJK UNIFIED IDEOGRAPH + {0xBF77, 0x7BE4}, //4704 #CJK UNIFIED IDEOGRAPH + {0xBF78, 0x7BDB}, //4705 #CJK UNIFIED IDEOGRAPH + {0xBF79, 0x7BE1}, //4706 #CJK UNIFIED IDEOGRAPH + {0xBF7A, 0x7BE9}, //4707 #CJK UNIFIED IDEOGRAPH + {0xBF7B, 0x7BE6}, //4708 #CJK UNIFIED IDEOGRAPH + {0xBF7C, 0x7CD5}, //4709 #CJK UNIFIED IDEOGRAPH + {0xBF7D, 0x7CD6}, //4710 #CJK UNIFIED IDEOGRAPH + {0xBF7E, 0x7E0A}, //4711 #CJK UNIFIED IDEOGRAPH + {0xBFA1, 0x7E11}, //4712 #CJK UNIFIED IDEOGRAPH + {0xBFA2, 0x7E08}, //4713 #CJK UNIFIED IDEOGRAPH + {0xBFA3, 0x7E1B}, //4714 #CJK UNIFIED IDEOGRAPH + {0xBFA4, 0x7E23}, //4715 #CJK UNIFIED IDEOGRAPH + {0xBFA5, 0x7E1E}, //4716 #CJK UNIFIED IDEOGRAPH + {0xBFA6, 0x7E1D}, //4717 #CJK UNIFIED IDEOGRAPH + {0xBFA7, 0x7E09}, //4718 #CJK UNIFIED IDEOGRAPH + {0xBFA8, 0x7E10}, //4719 #CJK UNIFIED IDEOGRAPH + {0xBFA9, 0x7F79}, //4720 #CJK UNIFIED IDEOGRAPH + {0xBFAA, 0x7FB2}, //4721 #CJK UNIFIED IDEOGRAPH + {0xBFAB, 0x7FF0}, //4722 #CJK UNIFIED IDEOGRAPH + {0xBFAC, 0x7FF1}, //4723 #CJK UNIFIED IDEOGRAPH + {0xBFAD, 0x7FEE}, //4724 #CJK UNIFIED IDEOGRAPH + {0xBFAE, 0x8028}, //4725 #CJK UNIFIED IDEOGRAPH + {0xBFAF, 0x81B3}, //4726 #CJK UNIFIED IDEOGRAPH + {0xBFB0, 0x81A9}, //4727 #CJK UNIFIED IDEOGRAPH + {0xBFB1, 0x81A8}, //4728 #CJK UNIFIED IDEOGRAPH + {0xBFB2, 0x81FB}, //4729 #CJK UNIFIED IDEOGRAPH + {0xBFB3, 0x8208}, //4730 #CJK UNIFIED IDEOGRAPH + {0xBFB4, 0x8258}, //4731 #CJK UNIFIED IDEOGRAPH + {0xBFB5, 0x8259}, //4732 #CJK UNIFIED IDEOGRAPH + {0xBFB6, 0x854A}, //4733 #CJK UNIFIED IDEOGRAPH + {0xBFB7, 0x8559}, //4734 #CJK UNIFIED IDEOGRAPH + {0xBFB8, 0x8548}, //4735 #CJK UNIFIED IDEOGRAPH + {0xBFB9, 0x8568}, //4736 #CJK UNIFIED IDEOGRAPH + {0xBFBA, 0x8569}, //4737 #CJK UNIFIED IDEOGRAPH + {0xBFBB, 0x8543}, //4738 #CJK UNIFIED IDEOGRAPH + {0xBFBC, 0x8549}, //4739 #CJK UNIFIED IDEOGRAPH + {0xBFBD, 0x856D}, //4740 #CJK UNIFIED IDEOGRAPH + {0xBFBE, 0x856A}, //4741 #CJK UNIFIED IDEOGRAPH + {0xBFBF, 0x855E}, //4742 #CJK UNIFIED IDEOGRAPH + {0xBFC0, 0x8783}, //4743 #CJK UNIFIED IDEOGRAPH + {0xBFC1, 0x879F}, //4744 #CJK UNIFIED IDEOGRAPH + {0xBFC2, 0x879E}, //4745 #CJK UNIFIED IDEOGRAPH + {0xBFC3, 0x87A2}, //4746 #CJK UNIFIED IDEOGRAPH + {0xBFC4, 0x878D}, //4747 #CJK UNIFIED IDEOGRAPH + {0xBFC5, 0x8861}, //4748 #CJK UNIFIED IDEOGRAPH + {0xBFC6, 0x892A}, //4749 #CJK UNIFIED IDEOGRAPH + {0xBFC7, 0x8932}, //4750 #CJK UNIFIED IDEOGRAPH + {0xBFC8, 0x8925}, //4751 #CJK UNIFIED IDEOGRAPH + {0xBFC9, 0x892B}, //4752 #CJK UNIFIED IDEOGRAPH + {0xBFCA, 0x8921}, //4753 #CJK UNIFIED IDEOGRAPH + {0xBFCB, 0x89AA}, //4754 #CJK UNIFIED IDEOGRAPH + {0xBFCC, 0x89A6}, //4755 #CJK UNIFIED IDEOGRAPH + {0xBFCD, 0x8AE6}, //4756 #CJK UNIFIED IDEOGRAPH + {0xBFCE, 0x8AFA}, //4757 #CJK UNIFIED IDEOGRAPH + {0xBFCF, 0x8AEB}, //4758 #CJK UNIFIED IDEOGRAPH + {0xBFD0, 0x8AF1}, //4759 #CJK UNIFIED IDEOGRAPH + {0xBFD1, 0x8B00}, //4760 #CJK UNIFIED IDEOGRAPH + {0xBFD2, 0x8ADC}, //4761 #CJK UNIFIED IDEOGRAPH + {0xBFD3, 0x8AE7}, //4762 #CJK UNIFIED IDEOGRAPH + {0xBFD4, 0x8AEE}, //4763 #CJK UNIFIED IDEOGRAPH + {0xBFD5, 0x8AFE}, //4764 #CJK UNIFIED IDEOGRAPH + {0xBFD6, 0x8B01}, //4765 #CJK UNIFIED IDEOGRAPH + {0xBFD7, 0x8B02}, //4766 #CJK UNIFIED IDEOGRAPH + {0xBFD8, 0x8AF7}, //4767 #CJK UNIFIED IDEOGRAPH + {0xBFD9, 0x8AED}, //4768 #CJK UNIFIED IDEOGRAPH + {0xBFDA, 0x8AF3}, //4769 #CJK UNIFIED IDEOGRAPH + {0xBFDB, 0x8AF6}, //4770 #CJK UNIFIED IDEOGRAPH + {0xBFDC, 0x8AFC}, //4771 #CJK UNIFIED IDEOGRAPH + {0xBFDD, 0x8C6B}, //4772 #CJK UNIFIED IDEOGRAPH + {0xBFDE, 0x8C6D}, //4773 #CJK UNIFIED IDEOGRAPH + {0xBFDF, 0x8C93}, //4774 #CJK UNIFIED IDEOGRAPH + {0xBFE0, 0x8CF4}, //4775 #CJK UNIFIED IDEOGRAPH + {0xBFE1, 0x8E44}, //4776 #CJK UNIFIED IDEOGRAPH + {0xBFE2, 0x8E31}, //4777 #CJK UNIFIED IDEOGRAPH + {0xBFE3, 0x8E34}, //4778 #CJK UNIFIED IDEOGRAPH + {0xBFE4, 0x8E42}, //4779 #CJK UNIFIED IDEOGRAPH + {0xBFE5, 0x8E39}, //4780 #CJK UNIFIED IDEOGRAPH + {0xBFE6, 0x8E35}, //4781 #CJK UNIFIED IDEOGRAPH + {0xBFE7, 0x8F3B}, //4782 #CJK UNIFIED IDEOGRAPH + {0xBFE8, 0x8F2F}, //4783 #CJK UNIFIED IDEOGRAPH + {0xBFE9, 0x8F38}, //4784 #CJK UNIFIED IDEOGRAPH + {0xBFEA, 0x8F33}, //4785 #CJK UNIFIED IDEOGRAPH + {0xBFEB, 0x8FA8}, //4786 #CJK UNIFIED IDEOGRAPH + {0xBFEC, 0x8FA6}, //4787 #CJK UNIFIED IDEOGRAPH + {0xBFED, 0x9075}, //4788 #CJK UNIFIED IDEOGRAPH + {0xBFEE, 0x9074}, //4789 #CJK UNIFIED IDEOGRAPH + {0xBFEF, 0x9078}, //4790 #CJK UNIFIED IDEOGRAPH + {0xBFF0, 0x9072}, //4791 #CJK UNIFIED IDEOGRAPH + {0xBFF1, 0x907C}, //4792 #CJK UNIFIED IDEOGRAPH + {0xBFF2, 0x907A}, //4793 #CJK UNIFIED IDEOGRAPH + {0xBFF3, 0x9134}, //4794 #CJK UNIFIED IDEOGRAPH + {0xBFF4, 0x9192}, //4795 #CJK UNIFIED IDEOGRAPH + {0xBFF5, 0x9320}, //4796 #CJK UNIFIED IDEOGRAPH + {0xBFF6, 0x9336}, //4797 #CJK UNIFIED IDEOGRAPH + {0xBFF7, 0x92F8}, //4798 #CJK UNIFIED IDEOGRAPH + {0xBFF8, 0x9333}, //4799 #CJK UNIFIED IDEOGRAPH + {0xBFF9, 0x932F}, //4800 #CJK UNIFIED IDEOGRAPH + {0xBFFA, 0x9322}, //4801 #CJK UNIFIED IDEOGRAPH + {0xBFFB, 0x92FC}, //4802 #CJK UNIFIED IDEOGRAPH + {0xBFFC, 0x932B}, //4803 #CJK UNIFIED IDEOGRAPH + {0xBFFD, 0x9304}, //4804 #CJK UNIFIED IDEOGRAPH + {0xBFFE, 0x931A}, //4805 #CJK UNIFIED IDEOGRAPH + {0xC040, 0x9310}, //4806 #CJK UNIFIED IDEOGRAPH + {0xC041, 0x9326}, //4807 #CJK UNIFIED IDEOGRAPH + {0xC042, 0x9321}, //4808 #CJK UNIFIED IDEOGRAPH + {0xC043, 0x9315}, //4809 #CJK UNIFIED IDEOGRAPH + {0xC044, 0x932E}, //4810 #CJK UNIFIED IDEOGRAPH + {0xC045, 0x9319}, //4811 #CJK UNIFIED IDEOGRAPH + {0xC046, 0x95BB}, //4812 #CJK UNIFIED IDEOGRAPH + {0xC047, 0x96A7}, //4813 #CJK UNIFIED IDEOGRAPH + {0xC048, 0x96A8}, //4814 #CJK UNIFIED IDEOGRAPH + {0xC049, 0x96AA}, //4815 #CJK UNIFIED IDEOGRAPH + {0xC04A, 0x96D5}, //4816 #CJK UNIFIED IDEOGRAPH + {0xC04B, 0x970E}, //4817 #CJK UNIFIED IDEOGRAPH + {0xC04C, 0x9711}, //4818 #CJK UNIFIED IDEOGRAPH + {0xC04D, 0x9716}, //4819 #CJK UNIFIED IDEOGRAPH + {0xC04E, 0x970D}, //4820 #CJK UNIFIED IDEOGRAPH + {0xC04F, 0x9713}, //4821 #CJK UNIFIED IDEOGRAPH + {0xC050, 0x970F}, //4822 #CJK UNIFIED IDEOGRAPH + {0xC051, 0x975B}, //4823 #CJK UNIFIED IDEOGRAPH + {0xC052, 0x975C}, //4824 #CJK UNIFIED IDEOGRAPH + {0xC053, 0x9766}, //4825 #CJK UNIFIED IDEOGRAPH + {0xC054, 0x9798}, //4826 #CJK UNIFIED IDEOGRAPH + {0xC055, 0x9830}, //4827 #CJK UNIFIED IDEOGRAPH + {0xC056, 0x9838}, //4828 #CJK UNIFIED IDEOGRAPH + {0xC057, 0x983B}, //4829 #CJK UNIFIED IDEOGRAPH + {0xC058, 0x9837}, //4830 #CJK UNIFIED IDEOGRAPH + {0xC059, 0x982D}, //4831 #CJK UNIFIED IDEOGRAPH + {0xC05A, 0x9839}, //4832 #CJK UNIFIED IDEOGRAPH + {0xC05B, 0x9824}, //4833 #CJK UNIFIED IDEOGRAPH + {0xC05C, 0x9910}, //4834 #CJK UNIFIED IDEOGRAPH + {0xC05D, 0x9928}, //4835 #CJK UNIFIED IDEOGRAPH + {0xC05E, 0x991E}, //4836 #CJK UNIFIED IDEOGRAPH + {0xC05F, 0x991B}, //4837 #CJK UNIFIED IDEOGRAPH + {0xC060, 0x9921}, //4838 #CJK UNIFIED IDEOGRAPH + {0xC061, 0x991A}, //4839 #CJK UNIFIED IDEOGRAPH + {0xC062, 0x99ED}, //4840 #CJK UNIFIED IDEOGRAPH + {0xC063, 0x99E2}, //4841 #CJK UNIFIED IDEOGRAPH + {0xC064, 0x99F1}, //4842 #CJK UNIFIED IDEOGRAPH + {0xC065, 0x9AB8}, //4843 #CJK UNIFIED IDEOGRAPH + {0xC066, 0x9ABC}, //4844 #CJK UNIFIED IDEOGRAPH + {0xC067, 0x9AFB}, //4845 #CJK UNIFIED IDEOGRAPH + {0xC068, 0x9AED}, //4846 #CJK UNIFIED IDEOGRAPH + {0xC069, 0x9B28}, //4847 #CJK UNIFIED IDEOGRAPH + {0xC06A, 0x9B91}, //4848 #CJK UNIFIED IDEOGRAPH + {0xC06B, 0x9D15}, //4849 #CJK UNIFIED IDEOGRAPH + {0xC06C, 0x9D23}, //4850 #CJK UNIFIED IDEOGRAPH + {0xC06D, 0x9D26}, //4851 #CJK UNIFIED IDEOGRAPH + {0xC06E, 0x9D28}, //4852 #CJK UNIFIED IDEOGRAPH + {0xC06F, 0x9D12}, //4853 #CJK UNIFIED IDEOGRAPH + {0xC070, 0x9D1B}, //4854 #CJK UNIFIED IDEOGRAPH + {0xC071, 0x9ED8}, //4855 #CJK UNIFIED IDEOGRAPH + {0xC072, 0x9ED4}, //4856 #CJK UNIFIED IDEOGRAPH + {0xC073, 0x9F8D}, //4857 #CJK UNIFIED IDEOGRAPH + {0xC074, 0x9F9C}, //4858 #CJK UNIFIED IDEOGRAPH + {0xC075, 0x512A}, //4859 #CJK UNIFIED IDEOGRAPH + {0xC076, 0x511F}, //4860 #CJK UNIFIED IDEOGRAPH + {0xC077, 0x5121}, //4861 #CJK UNIFIED IDEOGRAPH + {0xC078, 0x5132}, //4862 #CJK UNIFIED IDEOGRAPH + {0xC079, 0x52F5}, //4863 #CJK UNIFIED IDEOGRAPH + {0xC07A, 0x568E}, //4864 #CJK UNIFIED IDEOGRAPH + {0xC07B, 0x5680}, //4865 #CJK UNIFIED IDEOGRAPH + {0xC07C, 0x5690}, //4866 #CJK UNIFIED IDEOGRAPH + {0xC07D, 0x5685}, //4867 #CJK UNIFIED IDEOGRAPH + {0xC07E, 0x5687}, //4868 #CJK UNIFIED IDEOGRAPH + {0xC0A1, 0x568F}, //4869 #CJK UNIFIED IDEOGRAPH + {0xC0A2, 0x58D5}, //4870 #CJK UNIFIED IDEOGRAPH + {0xC0A3, 0x58D3}, //4871 #CJK UNIFIED IDEOGRAPH + {0xC0A4, 0x58D1}, //4872 #CJK UNIFIED IDEOGRAPH + {0xC0A5, 0x58CE}, //4873 #CJK UNIFIED IDEOGRAPH + {0xC0A6, 0x5B30}, //4874 #CJK UNIFIED IDEOGRAPH + {0xC0A7, 0x5B2A}, //4875 #CJK UNIFIED IDEOGRAPH + {0xC0A8, 0x5B24}, //4876 #CJK UNIFIED IDEOGRAPH + {0xC0A9, 0x5B7A}, //4877 #CJK UNIFIED IDEOGRAPH + {0xC0AA, 0x5C37}, //4878 #CJK UNIFIED IDEOGRAPH + {0xC0AB, 0x5C68}, //4879 #CJK UNIFIED IDEOGRAPH + {0xC0AC, 0x5DBC}, //4880 #CJK UNIFIED IDEOGRAPH + {0xC0AD, 0x5DBA}, //4881 #CJK UNIFIED IDEOGRAPH + {0xC0AE, 0x5DBD}, //4882 #CJK UNIFIED IDEOGRAPH + {0xC0AF, 0x5DB8}, //4883 #CJK UNIFIED IDEOGRAPH + {0xC0B0, 0x5E6B}, //4884 #CJK UNIFIED IDEOGRAPH + {0xC0B1, 0x5F4C}, //4885 #CJK UNIFIED IDEOGRAPH + {0xC0B2, 0x5FBD}, //4886 #CJK UNIFIED IDEOGRAPH + {0xC0B3, 0x61C9}, //4887 #CJK UNIFIED IDEOGRAPH + {0xC0B4, 0x61C2}, //4888 #CJK UNIFIED IDEOGRAPH + {0xC0B5, 0x61C7}, //4889 #CJK UNIFIED IDEOGRAPH + {0xC0B6, 0x61E6}, //4890 #CJK UNIFIED IDEOGRAPH + {0xC0B7, 0x61CB}, //4891 #CJK UNIFIED IDEOGRAPH + {0xC0B8, 0x6232}, //4892 #CJK UNIFIED IDEOGRAPH + {0xC0B9, 0x6234}, //4893 #CJK UNIFIED IDEOGRAPH + {0xC0BA, 0x64CE}, //4894 #CJK UNIFIED IDEOGRAPH + {0xC0BB, 0x64CA}, //4895 #CJK UNIFIED IDEOGRAPH + {0xC0BC, 0x64D8}, //4896 #CJK UNIFIED IDEOGRAPH + {0xC0BD, 0x64E0}, //4897 #CJK UNIFIED IDEOGRAPH + {0xC0BE, 0x64F0}, //4898 #CJK UNIFIED IDEOGRAPH + {0xC0BF, 0x64E6}, //4899 #CJK UNIFIED IDEOGRAPH + {0xC0C0, 0x64EC}, //4900 #CJK UNIFIED IDEOGRAPH + {0xC0C1, 0x64F1}, //4901 #CJK UNIFIED IDEOGRAPH + {0xC0C2, 0x64E2}, //4902 #CJK UNIFIED IDEOGRAPH + {0xC0C3, 0x64ED}, //4903 #CJK UNIFIED IDEOGRAPH + {0xC0C4, 0x6582}, //4904 #CJK UNIFIED IDEOGRAPH + {0xC0C5, 0x6583}, //4905 #CJK UNIFIED IDEOGRAPH + {0xC0C6, 0x66D9}, //4906 #CJK UNIFIED IDEOGRAPH + {0xC0C7, 0x66D6}, //4907 #CJK UNIFIED IDEOGRAPH + {0xC0C8, 0x6A80}, //4908 #CJK UNIFIED IDEOGRAPH + {0xC0C9, 0x6A94}, //4909 #CJK UNIFIED IDEOGRAPH + {0xC0CA, 0x6A84}, //4910 #CJK UNIFIED IDEOGRAPH + {0xC0CB, 0x6AA2}, //4911 #CJK UNIFIED IDEOGRAPH + {0xC0CC, 0x6A9C}, //4912 #CJK UNIFIED IDEOGRAPH + {0xC0CD, 0x6ADB}, //4913 #CJK UNIFIED IDEOGRAPH + {0xC0CE, 0x6AA3}, //4914 #CJK UNIFIED IDEOGRAPH + {0xC0CF, 0x6A7E}, //4915 #CJK UNIFIED IDEOGRAPH + {0xC0D0, 0x6A97}, //4916 #CJK UNIFIED IDEOGRAPH + {0xC0D1, 0x6A90}, //4917 #CJK UNIFIED IDEOGRAPH + {0xC0D2, 0x6AA0}, //4918 #CJK UNIFIED IDEOGRAPH + {0xC0D3, 0x6B5C}, //4919 #CJK UNIFIED IDEOGRAPH + {0xC0D4, 0x6BAE}, //4920 #CJK UNIFIED IDEOGRAPH + {0xC0D5, 0x6BDA}, //4921 #CJK UNIFIED IDEOGRAPH + {0xC0D6, 0x6C08}, //4922 #CJK UNIFIED IDEOGRAPH + {0xC0D7, 0x6FD8}, //4923 #CJK UNIFIED IDEOGRAPH + {0xC0D8, 0x6FF1}, //4924 #CJK UNIFIED IDEOGRAPH + {0xC0D9, 0x6FDF}, //4925 #CJK UNIFIED IDEOGRAPH + {0xC0DA, 0x6FE0}, //4926 #CJK UNIFIED IDEOGRAPH + {0xC0DB, 0x6FDB}, //4927 #CJK UNIFIED IDEOGRAPH + {0xC0DC, 0x6FE4}, //4928 #CJK UNIFIED IDEOGRAPH + {0xC0DD, 0x6FEB}, //4929 #CJK UNIFIED IDEOGRAPH + {0xC0DE, 0x6FEF}, //4930 #CJK UNIFIED IDEOGRAPH + {0xC0DF, 0x6F80}, //4931 #CJK UNIFIED IDEOGRAPH + {0xC0E0, 0x6FEC}, //4932 #CJK UNIFIED IDEOGRAPH + {0xC0E1, 0x6FE1}, //4933 #CJK UNIFIED IDEOGRAPH + {0xC0E2, 0x6FE9}, //4934 #CJK UNIFIED IDEOGRAPH + {0xC0E3, 0x6FD5}, //4935 #CJK UNIFIED IDEOGRAPH + {0xC0E4, 0x6FEE}, //4936 #CJK UNIFIED IDEOGRAPH + {0xC0E5, 0x6FF0}, //4937 #CJK UNIFIED IDEOGRAPH + {0xC0E6, 0x71E7}, //4938 #CJK UNIFIED IDEOGRAPH + {0xC0E7, 0x71DF}, //4939 #CJK UNIFIED IDEOGRAPH + {0xC0E8, 0x71EE}, //4940 #CJK UNIFIED IDEOGRAPH + {0xC0E9, 0x71E6}, //4941 #CJK UNIFIED IDEOGRAPH + {0xC0EA, 0x71E5}, //4942 #CJK UNIFIED IDEOGRAPH + {0xC0EB, 0x71ED}, //4943 #CJK UNIFIED IDEOGRAPH + {0xC0EC, 0x71EC}, //4944 #CJK UNIFIED IDEOGRAPH + {0xC0ED, 0x71F4}, //4945 #CJK UNIFIED IDEOGRAPH + {0xC0EE, 0x71E0}, //4946 #CJK UNIFIED IDEOGRAPH + {0xC0EF, 0x7235}, //4947 #CJK UNIFIED IDEOGRAPH + {0xC0F0, 0x7246}, //4948 #CJK UNIFIED IDEOGRAPH + {0xC0F1, 0x7370}, //4949 #CJK UNIFIED IDEOGRAPH + {0xC0F2, 0x7372}, //4950 #CJK UNIFIED IDEOGRAPH + {0xC0F3, 0x74A9}, //4951 #CJK UNIFIED IDEOGRAPH + {0xC0F4, 0x74B0}, //4952 #CJK UNIFIED IDEOGRAPH + {0xC0F5, 0x74A6}, //4953 #CJK UNIFIED IDEOGRAPH + {0xC0F6, 0x74A8}, //4954 #CJK UNIFIED IDEOGRAPH + {0xC0F7, 0x7646}, //4955 #CJK UNIFIED IDEOGRAPH + {0xC0F8, 0x7642}, //4956 #CJK UNIFIED IDEOGRAPH + {0xC0F9, 0x764C}, //4957 #CJK UNIFIED IDEOGRAPH + {0xC0FA, 0x76EA}, //4958 #CJK UNIFIED IDEOGRAPH + {0xC0FB, 0x77B3}, //4959 #CJK UNIFIED IDEOGRAPH + {0xC0FC, 0x77AA}, //4960 #CJK UNIFIED IDEOGRAPH + {0xC0FD, 0x77B0}, //4961 #CJK UNIFIED IDEOGRAPH + {0xC0FE, 0x77AC}, //4962 #CJK UNIFIED IDEOGRAPH + {0xC140, 0x77A7}, //4963 #CJK UNIFIED IDEOGRAPH + {0xC141, 0x77AD}, //4964 #CJK UNIFIED IDEOGRAPH + {0xC142, 0x77EF}, //4965 #CJK UNIFIED IDEOGRAPH + {0xC143, 0x78F7}, //4966 #CJK UNIFIED IDEOGRAPH + {0xC144, 0x78FA}, //4967 #CJK UNIFIED IDEOGRAPH + {0xC145, 0x78F4}, //4968 #CJK UNIFIED IDEOGRAPH + {0xC146, 0x78EF}, //4969 #CJK UNIFIED IDEOGRAPH + {0xC147, 0x7901}, //4970 #CJK UNIFIED IDEOGRAPH + {0xC148, 0x79A7}, //4971 #CJK UNIFIED IDEOGRAPH + {0xC149, 0x79AA}, //4972 #CJK UNIFIED IDEOGRAPH + {0xC14A, 0x7A57}, //4973 #CJK UNIFIED IDEOGRAPH + {0xC14B, 0x7ABF}, //4974 #CJK UNIFIED IDEOGRAPH + {0xC14C, 0x7C07}, //4975 #CJK UNIFIED IDEOGRAPH + {0xC14D, 0x7C0D}, //4976 #CJK UNIFIED IDEOGRAPH + {0xC14E, 0x7BFE}, //4977 #CJK UNIFIED IDEOGRAPH + {0xC14F, 0x7BF7}, //4978 #CJK UNIFIED IDEOGRAPH + {0xC150, 0x7C0C}, //4979 #CJK UNIFIED IDEOGRAPH + {0xC151, 0x7BE0}, //4980 #CJK UNIFIED IDEOGRAPH + {0xC152, 0x7CE0}, //4981 #CJK UNIFIED IDEOGRAPH + {0xC153, 0x7CDC}, //4982 #CJK UNIFIED IDEOGRAPH + {0xC154, 0x7CDE}, //4983 #CJK UNIFIED IDEOGRAPH + {0xC155, 0x7CE2}, //4984 #CJK UNIFIED IDEOGRAPH + {0xC156, 0x7CDF}, //4985 #CJK UNIFIED IDEOGRAPH + {0xC157, 0x7CD9}, //4986 #CJK UNIFIED IDEOGRAPH + {0xC158, 0x7CDD}, //4987 #CJK UNIFIED IDEOGRAPH + {0xC159, 0x7E2E}, //4988 #CJK UNIFIED IDEOGRAPH + {0xC15A, 0x7E3E}, //4989 #CJK UNIFIED IDEOGRAPH + {0xC15B, 0x7E46}, //4990 #CJK UNIFIED IDEOGRAPH + {0xC15C, 0x7E37}, //4991 #CJK UNIFIED IDEOGRAPH + {0xC15D, 0x7E32}, //4992 #CJK UNIFIED IDEOGRAPH + {0xC15E, 0x7E43}, //4993 #CJK UNIFIED IDEOGRAPH + {0xC15F, 0x7E2B}, //4994 #CJK UNIFIED IDEOGRAPH + {0xC160, 0x7E3D}, //4995 #CJK UNIFIED IDEOGRAPH + {0xC161, 0x7E31}, //4996 #CJK UNIFIED IDEOGRAPH + {0xC162, 0x7E45}, //4997 #CJK UNIFIED IDEOGRAPH + {0xC163, 0x7E41}, //4998 #CJK UNIFIED IDEOGRAPH + {0xC164, 0x7E34}, //4999 #CJK UNIFIED IDEOGRAPH + {0xC165, 0x7E39}, //5000 #CJK UNIFIED IDEOGRAPH + {0xC166, 0x7E48}, //5001 #CJK UNIFIED IDEOGRAPH + {0xC167, 0x7E35}, //5002 #CJK UNIFIED IDEOGRAPH + {0xC168, 0x7E3F}, //5003 #CJK UNIFIED IDEOGRAPH + {0xC169, 0x7E2F}, //5004 #CJK UNIFIED IDEOGRAPH + {0xC16A, 0x7F44}, //5005 #CJK UNIFIED IDEOGRAPH + {0xC16B, 0x7FF3}, //5006 #CJK UNIFIED IDEOGRAPH + {0xC16C, 0x7FFC}, //5007 #CJK UNIFIED IDEOGRAPH + {0xC16D, 0x8071}, //5008 #CJK UNIFIED IDEOGRAPH + {0xC16E, 0x8072}, //5009 #CJK UNIFIED IDEOGRAPH + {0xC16F, 0x8070}, //5010 #CJK UNIFIED IDEOGRAPH + {0xC170, 0x806F}, //5011 #CJK UNIFIED IDEOGRAPH + {0xC171, 0x8073}, //5012 #CJK UNIFIED IDEOGRAPH + {0xC172, 0x81C6}, //5013 #CJK UNIFIED IDEOGRAPH + {0xC173, 0x81C3}, //5014 #CJK UNIFIED IDEOGRAPH + {0xC174, 0x81BA}, //5015 #CJK UNIFIED IDEOGRAPH + {0xC175, 0x81C2}, //5016 #CJK UNIFIED IDEOGRAPH + {0xC176, 0x81C0}, //5017 #CJK UNIFIED IDEOGRAPH + {0xC177, 0x81BF}, //5018 #CJK UNIFIED IDEOGRAPH + {0xC178, 0x81BD}, //5019 #CJK UNIFIED IDEOGRAPH + {0xC179, 0x81C9}, //5020 #CJK UNIFIED IDEOGRAPH + {0xC17A, 0x81BE}, //5021 #CJK UNIFIED IDEOGRAPH + {0xC17B, 0x81E8}, //5022 #CJK UNIFIED IDEOGRAPH + {0xC17C, 0x8209}, //5023 #CJK UNIFIED IDEOGRAPH + {0xC17D, 0x8271}, //5024 #CJK UNIFIED IDEOGRAPH + {0xC17E, 0x85AA}, //5025 #CJK UNIFIED IDEOGRAPH + {0xC1A1, 0x8584}, //5026 #CJK UNIFIED IDEOGRAPH + {0xC1A2, 0x857E}, //5027 #CJK UNIFIED IDEOGRAPH + {0xC1A3, 0x859C}, //5028 #CJK UNIFIED IDEOGRAPH + {0xC1A4, 0x8591}, //5029 #CJK UNIFIED IDEOGRAPH + {0xC1A5, 0x8594}, //5030 #CJK UNIFIED IDEOGRAPH + {0xC1A6, 0x85AF}, //5031 #CJK UNIFIED IDEOGRAPH + {0xC1A7, 0x859B}, //5032 #CJK UNIFIED IDEOGRAPH + {0xC1A8, 0x8587}, //5033 #CJK UNIFIED IDEOGRAPH + {0xC1A9, 0x85A8}, //5034 #CJK UNIFIED IDEOGRAPH + {0xC1AA, 0x858A}, //5035 #CJK UNIFIED IDEOGRAPH + {0xC1AB, 0x8667}, //5036 #CJK UNIFIED IDEOGRAPH + {0xC1AC, 0x87C0}, //5037 #CJK UNIFIED IDEOGRAPH + {0xC1AD, 0x87D1}, //5038 #CJK UNIFIED IDEOGRAPH + {0xC1AE, 0x87B3}, //5039 #CJK UNIFIED IDEOGRAPH + {0xC1AF, 0x87D2}, //5040 #CJK UNIFIED IDEOGRAPH + {0xC1B0, 0x87C6}, //5041 #CJK UNIFIED IDEOGRAPH + {0xC1B1, 0x87AB}, //5042 #CJK UNIFIED IDEOGRAPH + {0xC1B2, 0x87BB}, //5043 #CJK UNIFIED IDEOGRAPH + {0xC1B3, 0x87BA}, //5044 #CJK UNIFIED IDEOGRAPH + {0xC1B4, 0x87C8}, //5045 #CJK UNIFIED IDEOGRAPH + {0xC1B5, 0x87CB}, //5046 #CJK UNIFIED IDEOGRAPH + {0xC1B6, 0x893B}, //5047 #CJK UNIFIED IDEOGRAPH + {0xC1B7, 0x8936}, //5048 #CJK UNIFIED IDEOGRAPH + {0xC1B8, 0x8944}, //5049 #CJK UNIFIED IDEOGRAPH + {0xC1B9, 0x8938}, //5050 #CJK UNIFIED IDEOGRAPH + {0xC1BA, 0x893D}, //5051 #CJK UNIFIED IDEOGRAPH + {0xC1BB, 0x89AC}, //5052 #CJK UNIFIED IDEOGRAPH + {0xC1BC, 0x8B0E}, //5053 #CJK UNIFIED IDEOGRAPH + {0xC1BD, 0x8B17}, //5054 #CJK UNIFIED IDEOGRAPH + {0xC1BE, 0x8B19}, //5055 #CJK UNIFIED IDEOGRAPH + {0xC1BF, 0x8B1B}, //5056 #CJK UNIFIED IDEOGRAPH + {0xC1C0, 0x8B0A}, //5057 #CJK UNIFIED IDEOGRAPH + {0xC1C1, 0x8B20}, //5058 #CJK UNIFIED IDEOGRAPH + {0xC1C2, 0x8B1D}, //5059 #CJK UNIFIED IDEOGRAPH + {0xC1C3, 0x8B04}, //5060 #CJK UNIFIED IDEOGRAPH + {0xC1C4, 0x8B10}, //5061 #CJK UNIFIED IDEOGRAPH + {0xC1C5, 0x8C41}, //5062 #CJK UNIFIED IDEOGRAPH + {0xC1C6, 0x8C3F}, //5063 #CJK UNIFIED IDEOGRAPH + {0xC1C7, 0x8C73}, //5064 #CJK UNIFIED IDEOGRAPH + {0xC1C8, 0x8CFA}, //5065 #CJK UNIFIED IDEOGRAPH + {0xC1C9, 0x8CFD}, //5066 #CJK UNIFIED IDEOGRAPH + {0xC1CA, 0x8CFC}, //5067 #CJK UNIFIED IDEOGRAPH + {0xC1CB, 0x8CF8}, //5068 #CJK UNIFIED IDEOGRAPH + {0xC1CC, 0x8CFB}, //5069 #CJK UNIFIED IDEOGRAPH + {0xC1CD, 0x8DA8}, //5070 #CJK UNIFIED IDEOGRAPH + {0xC1CE, 0x8E49}, //5071 #CJK UNIFIED IDEOGRAPH + {0xC1CF, 0x8E4B}, //5072 #CJK UNIFIED IDEOGRAPH + {0xC1D0, 0x8E48}, //5073 #CJK UNIFIED IDEOGRAPH + {0xC1D1, 0x8E4A}, //5074 #CJK UNIFIED IDEOGRAPH + {0xC1D2, 0x8F44}, //5075 #CJK UNIFIED IDEOGRAPH + {0xC1D3, 0x8F3E}, //5076 #CJK UNIFIED IDEOGRAPH + {0xC1D4, 0x8F42}, //5077 #CJK UNIFIED IDEOGRAPH + {0xC1D5, 0x8F45}, //5078 #CJK UNIFIED IDEOGRAPH + {0xC1D6, 0x8F3F}, //5079 #CJK UNIFIED IDEOGRAPH + {0xC1D7, 0x907F}, //5080 #CJK UNIFIED IDEOGRAPH + {0xC1D8, 0x907D}, //5081 #CJK UNIFIED IDEOGRAPH + {0xC1D9, 0x9084}, //5082 #CJK UNIFIED IDEOGRAPH + {0xC1DA, 0x9081}, //5083 #CJK UNIFIED IDEOGRAPH + {0xC1DB, 0x9082}, //5084 #CJK UNIFIED IDEOGRAPH + {0xC1DC, 0x9080}, //5085 #CJK UNIFIED IDEOGRAPH + {0xC1DD, 0x9139}, //5086 #CJK UNIFIED IDEOGRAPH + {0xC1DE, 0x91A3}, //5087 #CJK UNIFIED IDEOGRAPH + {0xC1DF, 0x919E}, //5088 #CJK UNIFIED IDEOGRAPH + {0xC1E0, 0x919C}, //5089 #CJK UNIFIED IDEOGRAPH + {0xC1E1, 0x934D}, //5090 #CJK UNIFIED IDEOGRAPH + {0xC1E2, 0x9382}, //5091 #CJK UNIFIED IDEOGRAPH + {0xC1E3, 0x9328}, //5092 #CJK UNIFIED IDEOGRAPH + {0xC1E4, 0x9375}, //5093 #CJK UNIFIED IDEOGRAPH + {0xC1E5, 0x934A}, //5094 #CJK UNIFIED IDEOGRAPH + {0xC1E6, 0x9365}, //5095 #CJK UNIFIED IDEOGRAPH + {0xC1E7, 0x934B}, //5096 #CJK UNIFIED IDEOGRAPH + {0xC1E8, 0x9318}, //5097 #CJK UNIFIED IDEOGRAPH + {0xC1E9, 0x937E}, //5098 #CJK UNIFIED IDEOGRAPH + {0xC1EA, 0x936C}, //5099 #CJK UNIFIED IDEOGRAPH + {0xC1EB, 0x935B}, //5100 #CJK UNIFIED IDEOGRAPH + {0xC1EC, 0x9370}, //5101 #CJK UNIFIED IDEOGRAPH + {0xC1ED, 0x935A}, //5102 #CJK UNIFIED IDEOGRAPH + {0xC1EE, 0x9354}, //5103 #CJK UNIFIED IDEOGRAPH + {0xC1EF, 0x95CA}, //5104 #CJK UNIFIED IDEOGRAPH + {0xC1F0, 0x95CB}, //5105 #CJK UNIFIED IDEOGRAPH + {0xC1F1, 0x95CC}, //5106 #CJK UNIFIED IDEOGRAPH + {0xC1F2, 0x95C8}, //5107 #CJK UNIFIED IDEOGRAPH + {0xC1F3, 0x95C6}, //5108 #CJK UNIFIED IDEOGRAPH + {0xC1F4, 0x96B1}, //5109 #CJK UNIFIED IDEOGRAPH + {0xC1F5, 0x96B8}, //5110 #CJK UNIFIED IDEOGRAPH + {0xC1F6, 0x96D6}, //5111 #CJK UNIFIED IDEOGRAPH + {0xC1F7, 0x971C}, //5112 #CJK UNIFIED IDEOGRAPH + {0xC1F8, 0x971E}, //5113 #CJK UNIFIED IDEOGRAPH + {0xC1F9, 0x97A0}, //5114 #CJK UNIFIED IDEOGRAPH + {0xC1FA, 0x97D3}, //5115 #CJK UNIFIED IDEOGRAPH + {0xC1FB, 0x9846}, //5116 #CJK UNIFIED IDEOGRAPH + {0xC1FC, 0x98B6}, //5117 #CJK UNIFIED IDEOGRAPH + {0xC1FD, 0x9935}, //5118 #CJK UNIFIED IDEOGRAPH + {0xC1FE, 0x9A01}, //5119 #CJK UNIFIED IDEOGRAPH + {0xC240, 0x99FF}, //5120 #CJK UNIFIED IDEOGRAPH + {0xC241, 0x9BAE}, //5121 #CJK UNIFIED IDEOGRAPH + {0xC242, 0x9BAB}, //5122 #CJK UNIFIED IDEOGRAPH + {0xC243, 0x9BAA}, //5123 #CJK UNIFIED IDEOGRAPH + {0xC244, 0x9BAD}, //5124 #CJK UNIFIED IDEOGRAPH + {0xC245, 0x9D3B}, //5125 #CJK UNIFIED IDEOGRAPH + {0xC246, 0x9D3F}, //5126 #CJK UNIFIED IDEOGRAPH + {0xC247, 0x9E8B}, //5127 #CJK UNIFIED IDEOGRAPH + {0xC248, 0x9ECF}, //5128 #CJK UNIFIED IDEOGRAPH + {0xC249, 0x9EDE}, //5129 #CJK UNIFIED IDEOGRAPH + {0xC24A, 0x9EDC}, //5130 #CJK UNIFIED IDEOGRAPH + {0xC24B, 0x9EDD}, //5131 #CJK UNIFIED IDEOGRAPH + {0xC24C, 0x9EDB}, //5132 #CJK UNIFIED IDEOGRAPH + {0xC24D, 0x9F3E}, //5133 #CJK UNIFIED IDEOGRAPH + {0xC24E, 0x9F4B}, //5134 #CJK UNIFIED IDEOGRAPH + {0xC24F, 0x53E2}, //5135 #CJK UNIFIED IDEOGRAPH + {0xC250, 0x5695}, //5136 #CJK UNIFIED IDEOGRAPH + {0xC251, 0x56AE}, //5137 #CJK UNIFIED IDEOGRAPH + {0xC252, 0x58D9}, //5138 #CJK UNIFIED IDEOGRAPH + {0xC253, 0x58D8}, //5139 #CJK UNIFIED IDEOGRAPH + {0xC254, 0x5B38}, //5140 #CJK UNIFIED IDEOGRAPH + {0xC255, 0x5F5D}, //5141 #CJK UNIFIED IDEOGRAPH + {0xC256, 0x61E3}, //5142 #CJK UNIFIED IDEOGRAPH + {0xC257, 0x6233}, //5143 #CJK UNIFIED IDEOGRAPH + {0xC258, 0x64F4}, //5144 #CJK UNIFIED IDEOGRAPH + {0xC259, 0x64F2}, //5145 #CJK UNIFIED IDEOGRAPH + {0xC25A, 0x64FE}, //5146 #CJK UNIFIED IDEOGRAPH + {0xC25B, 0x6506}, //5147 #CJK UNIFIED IDEOGRAPH + {0xC25C, 0x64FA}, //5148 #CJK UNIFIED IDEOGRAPH + {0xC25D, 0x64FB}, //5149 #CJK UNIFIED IDEOGRAPH + {0xC25E, 0x64F7}, //5150 #CJK UNIFIED IDEOGRAPH + {0xC25F, 0x65B7}, //5151 #CJK UNIFIED IDEOGRAPH + {0xC260, 0x66DC}, //5152 #CJK UNIFIED IDEOGRAPH + {0xC261, 0x6726}, //5153 #CJK UNIFIED IDEOGRAPH + {0xC262, 0x6AB3}, //5154 #CJK UNIFIED IDEOGRAPH + {0xC263, 0x6AAC}, //5155 #CJK UNIFIED IDEOGRAPH + {0xC264, 0x6AC3}, //5156 #CJK UNIFIED IDEOGRAPH + {0xC265, 0x6ABB}, //5157 #CJK UNIFIED IDEOGRAPH + {0xC266, 0x6AB8}, //5158 #CJK UNIFIED IDEOGRAPH + {0xC267, 0x6AC2}, //5159 #CJK UNIFIED IDEOGRAPH + {0xC268, 0x6AAE}, //5160 #CJK UNIFIED IDEOGRAPH + {0xC269, 0x6AAF}, //5161 #CJK UNIFIED IDEOGRAPH + {0xC26A, 0x6B5F}, //5162 #CJK UNIFIED IDEOGRAPH + {0xC26B, 0x6B78}, //5163 #CJK UNIFIED IDEOGRAPH + {0xC26C, 0x6BAF}, //5164 #CJK UNIFIED IDEOGRAPH + {0xC26D, 0x7009}, //5165 #CJK UNIFIED IDEOGRAPH + {0xC26E, 0x700B}, //5166 #CJK UNIFIED IDEOGRAPH + {0xC26F, 0x6FFE}, //5167 #CJK UNIFIED IDEOGRAPH + {0xC270, 0x7006}, //5168 #CJK UNIFIED IDEOGRAPH + {0xC271, 0x6FFA}, //5169 #CJK UNIFIED IDEOGRAPH + {0xC272, 0x7011}, //5170 #CJK UNIFIED IDEOGRAPH + {0xC273, 0x700F}, //5171 #CJK UNIFIED IDEOGRAPH + {0xC274, 0x71FB}, //5172 #CJK UNIFIED IDEOGRAPH + {0xC275, 0x71FC}, //5173 #CJK UNIFIED IDEOGRAPH + {0xC276, 0x71FE}, //5174 #CJK UNIFIED IDEOGRAPH + {0xC277, 0x71F8}, //5175 #CJK UNIFIED IDEOGRAPH + {0xC278, 0x7377}, //5176 #CJK UNIFIED IDEOGRAPH + {0xC279, 0x7375}, //5177 #CJK UNIFIED IDEOGRAPH + {0xC27A, 0x74A7}, //5178 #CJK UNIFIED IDEOGRAPH + {0xC27B, 0x74BF}, //5179 #CJK UNIFIED IDEOGRAPH + {0xC27C, 0x7515}, //5180 #CJK UNIFIED IDEOGRAPH + {0xC27D, 0x7656}, //5181 #CJK UNIFIED IDEOGRAPH + {0xC27E, 0x7658}, //5182 #CJK UNIFIED IDEOGRAPH + {0xC2A1, 0x7652}, //5183 #CJK UNIFIED IDEOGRAPH + {0xC2A2, 0x77BD}, //5184 #CJK UNIFIED IDEOGRAPH + {0xC2A3, 0x77BF}, //5185 #CJK UNIFIED IDEOGRAPH + {0xC2A4, 0x77BB}, //5186 #CJK UNIFIED IDEOGRAPH + {0xC2A5, 0x77BC}, //5187 #CJK UNIFIED IDEOGRAPH + {0xC2A6, 0x790E}, //5188 #CJK UNIFIED IDEOGRAPH + {0xC2A7, 0x79AE}, //5189 #CJK UNIFIED IDEOGRAPH + {0xC2A8, 0x7A61}, //5190 #CJK UNIFIED IDEOGRAPH + {0xC2A9, 0x7A62}, //5191 #CJK UNIFIED IDEOGRAPH + {0xC2AA, 0x7A60}, //5192 #CJK UNIFIED IDEOGRAPH + {0xC2AB, 0x7AC4}, //5193 #CJK UNIFIED IDEOGRAPH + {0xC2AC, 0x7AC5}, //5194 #CJK UNIFIED IDEOGRAPH + {0xC2AD, 0x7C2B}, //5195 #CJK UNIFIED IDEOGRAPH + {0xC2AE, 0x7C27}, //5196 #CJK UNIFIED IDEOGRAPH + {0xC2AF, 0x7C2A}, //5197 #CJK UNIFIED IDEOGRAPH + {0xC2B0, 0x7C1E}, //5198 #CJK UNIFIED IDEOGRAPH + {0xC2B1, 0x7C23}, //5199 #CJK UNIFIED IDEOGRAPH + {0xC2B2, 0x7C21}, //5200 #CJK UNIFIED IDEOGRAPH + {0xC2B3, 0x7CE7}, //5201 #CJK UNIFIED IDEOGRAPH + {0xC2B4, 0x7E54}, //5202 #CJK UNIFIED IDEOGRAPH + {0xC2B5, 0x7E55}, //5203 #CJK UNIFIED IDEOGRAPH + {0xC2B6, 0x7E5E}, //5204 #CJK UNIFIED IDEOGRAPH + {0xC2B7, 0x7E5A}, //5205 #CJK UNIFIED IDEOGRAPH + {0xC2B8, 0x7E61}, //5206 #CJK UNIFIED IDEOGRAPH + {0xC2B9, 0x7E52}, //5207 #CJK UNIFIED IDEOGRAPH + {0xC2BA, 0x7E59}, //5208 #CJK UNIFIED IDEOGRAPH + {0xC2BB, 0x7F48}, //5209 #CJK UNIFIED IDEOGRAPH + {0xC2BC, 0x7FF9}, //5210 #CJK UNIFIED IDEOGRAPH + {0xC2BD, 0x7FFB}, //5211 #CJK UNIFIED IDEOGRAPH + {0xC2BE, 0x8077}, //5212 #CJK UNIFIED IDEOGRAPH + {0xC2BF, 0x8076}, //5213 #CJK UNIFIED IDEOGRAPH + {0xC2C0, 0x81CD}, //5214 #CJK UNIFIED IDEOGRAPH + {0xC2C1, 0x81CF}, //5215 #CJK UNIFIED IDEOGRAPH + {0xC2C2, 0x820A}, //5216 #CJK UNIFIED IDEOGRAPH + {0xC2C3, 0x85CF}, //5217 #CJK UNIFIED IDEOGRAPH + {0xC2C4, 0x85A9}, //5218 #CJK UNIFIED IDEOGRAPH + {0xC2C5, 0x85CD}, //5219 #CJK UNIFIED IDEOGRAPH + {0xC2C6, 0x85D0}, //5220 #CJK UNIFIED IDEOGRAPH + {0xC2C7, 0x85C9}, //5221 #CJK UNIFIED IDEOGRAPH + {0xC2C8, 0x85B0}, //5222 #CJK UNIFIED IDEOGRAPH + {0xC2C9, 0x85BA}, //5223 #CJK UNIFIED IDEOGRAPH + {0xC2CA, 0x85B9}, //5224 #CJK UNIFIED IDEOGRAPH + {0xC2CB, 0x85A6}, //5225 #CJK UNIFIED IDEOGRAPH + {0xC2CC, 0x87EF}, //5226 #CJK UNIFIED IDEOGRAPH + {0xC2CD, 0x87EC}, //5227 #CJK UNIFIED IDEOGRAPH + {0xC2CE, 0x87F2}, //5228 #CJK UNIFIED IDEOGRAPH + {0xC2CF, 0x87E0}, //5229 #CJK UNIFIED IDEOGRAPH + {0xC2D0, 0x8986}, //5230 #CJK UNIFIED IDEOGRAPH + {0xC2D1, 0x89B2}, //5231 #CJK UNIFIED IDEOGRAPH + {0xC2D2, 0x89F4}, //5232 #CJK UNIFIED IDEOGRAPH + {0xC2D3, 0x8B28}, //5233 #CJK UNIFIED IDEOGRAPH + {0xC2D4, 0x8B39}, //5234 #CJK UNIFIED IDEOGRAPH + {0xC2D5, 0x8B2C}, //5235 #CJK UNIFIED IDEOGRAPH + {0xC2D6, 0x8B2B}, //5236 #CJK UNIFIED IDEOGRAPH + {0xC2D7, 0x8C50}, //5237 #CJK UNIFIED IDEOGRAPH + {0xC2D8, 0x8D05}, //5238 #CJK UNIFIED IDEOGRAPH + {0xC2D9, 0x8E59}, //5239 #CJK UNIFIED IDEOGRAPH + {0xC2DA, 0x8E63}, //5240 #CJK UNIFIED IDEOGRAPH + {0xC2DB, 0x8E66}, //5241 #CJK UNIFIED IDEOGRAPH + {0xC2DC, 0x8E64}, //5242 #CJK UNIFIED IDEOGRAPH + {0xC2DD, 0x8E5F}, //5243 #CJK UNIFIED IDEOGRAPH + {0xC2DE, 0x8E55}, //5244 #CJK UNIFIED IDEOGRAPH + {0xC2DF, 0x8EC0}, //5245 #CJK UNIFIED IDEOGRAPH + {0xC2E0, 0x8F49}, //5246 #CJK UNIFIED IDEOGRAPH + {0xC2E1, 0x8F4D}, //5247 #CJK UNIFIED IDEOGRAPH + {0xC2E2, 0x9087}, //5248 #CJK UNIFIED IDEOGRAPH + {0xC2E3, 0x9083}, //5249 #CJK UNIFIED IDEOGRAPH + {0xC2E4, 0x9088}, //5250 #CJK UNIFIED IDEOGRAPH + {0xC2E5, 0x91AB}, //5251 #CJK UNIFIED IDEOGRAPH + {0xC2E6, 0x91AC}, //5252 #CJK UNIFIED IDEOGRAPH + {0xC2E7, 0x91D0}, //5253 #CJK UNIFIED IDEOGRAPH + {0xC2E8, 0x9394}, //5254 #CJK UNIFIED IDEOGRAPH + {0xC2E9, 0x938A}, //5255 #CJK UNIFIED IDEOGRAPH + {0xC2EA, 0x9396}, //5256 #CJK UNIFIED IDEOGRAPH + {0xC2EB, 0x93A2}, //5257 #CJK UNIFIED IDEOGRAPH + {0xC2EC, 0x93B3}, //5258 #CJK UNIFIED IDEOGRAPH + {0xC2ED, 0x93AE}, //5259 #CJK UNIFIED IDEOGRAPH + {0xC2EE, 0x93AC}, //5260 #CJK UNIFIED IDEOGRAPH + {0xC2EF, 0x93B0}, //5261 #CJK UNIFIED IDEOGRAPH + {0xC2F0, 0x9398}, //5262 #CJK UNIFIED IDEOGRAPH + {0xC2F1, 0x939A}, //5263 #CJK UNIFIED IDEOGRAPH + {0xC2F2, 0x9397}, //5264 #CJK UNIFIED IDEOGRAPH + {0xC2F3, 0x95D4}, //5265 #CJK UNIFIED IDEOGRAPH + {0xC2F4, 0x95D6}, //5266 #CJK UNIFIED IDEOGRAPH + {0xC2F5, 0x95D0}, //5267 #CJK UNIFIED IDEOGRAPH + {0xC2F6, 0x95D5}, //5268 #CJK UNIFIED IDEOGRAPH + {0xC2F7, 0x96E2}, //5269 #CJK UNIFIED IDEOGRAPH + {0xC2F8, 0x96DC}, //5270 #CJK UNIFIED IDEOGRAPH + {0xC2F9, 0x96D9}, //5271 #CJK UNIFIED IDEOGRAPH + {0xC2FA, 0x96DB}, //5272 #CJK UNIFIED IDEOGRAPH + {0xC2FB, 0x96DE}, //5273 #CJK UNIFIED IDEOGRAPH + {0xC2FC, 0x9724}, //5274 #CJK UNIFIED IDEOGRAPH + {0xC2FD, 0x97A3}, //5275 #CJK UNIFIED IDEOGRAPH + {0xC2FE, 0x97A6}, //5276 #CJK UNIFIED IDEOGRAPH + {0xC340, 0x97AD}, //5277 #CJK UNIFIED IDEOGRAPH + {0xC341, 0x97F9}, //5278 #CJK UNIFIED IDEOGRAPH + {0xC342, 0x984D}, //5279 #CJK UNIFIED IDEOGRAPH + {0xC343, 0x984F}, //5280 #CJK UNIFIED IDEOGRAPH + {0xC344, 0x984C}, //5281 #CJK UNIFIED IDEOGRAPH + {0xC345, 0x984E}, //5282 #CJK UNIFIED IDEOGRAPH + {0xC346, 0x9853}, //5283 #CJK UNIFIED IDEOGRAPH + {0xC347, 0x98BA}, //5284 #CJK UNIFIED IDEOGRAPH + {0xC348, 0x993E}, //5285 #CJK UNIFIED IDEOGRAPH + {0xC349, 0x993F}, //5286 #CJK UNIFIED IDEOGRAPH + {0xC34A, 0x993D}, //5287 #CJK UNIFIED IDEOGRAPH + {0xC34B, 0x992E}, //5288 #CJK UNIFIED IDEOGRAPH + {0xC34C, 0x99A5}, //5289 #CJK UNIFIED IDEOGRAPH + {0xC34D, 0x9A0E}, //5290 #CJK UNIFIED IDEOGRAPH + {0xC34E, 0x9AC1}, //5291 #CJK UNIFIED IDEOGRAPH + {0xC34F, 0x9B03}, //5292 #CJK UNIFIED IDEOGRAPH + {0xC350, 0x9B06}, //5293 #CJK UNIFIED IDEOGRAPH + {0xC351, 0x9B4F}, //5294 #CJK UNIFIED IDEOGRAPH + {0xC352, 0x9B4E}, //5295 #CJK UNIFIED IDEOGRAPH + {0xC353, 0x9B4D}, //5296 #CJK UNIFIED IDEOGRAPH + {0xC354, 0x9BCA}, //5297 #CJK UNIFIED IDEOGRAPH + {0xC355, 0x9BC9}, //5298 #CJK UNIFIED IDEOGRAPH + {0xC356, 0x9BFD}, //5299 #CJK UNIFIED IDEOGRAPH + {0xC357, 0x9BC8}, //5300 #CJK UNIFIED IDEOGRAPH + {0xC358, 0x9BC0}, //5301 #CJK UNIFIED IDEOGRAPH + {0xC359, 0x9D51}, //5302 #CJK UNIFIED IDEOGRAPH + {0xC35A, 0x9D5D}, //5303 #CJK UNIFIED IDEOGRAPH + {0xC35B, 0x9D60}, //5304 #CJK UNIFIED IDEOGRAPH + {0xC35C, 0x9EE0}, //5305 #CJK UNIFIED IDEOGRAPH + {0xC35D, 0x9F15}, //5306 #CJK UNIFIED IDEOGRAPH + {0xC35E, 0x9F2C}, //5307 #CJK UNIFIED IDEOGRAPH + {0xC35F, 0x5133}, //5308 #CJK UNIFIED IDEOGRAPH + {0xC360, 0x56A5}, //5309 #CJK UNIFIED IDEOGRAPH + {0xC361, 0x58DE}, //5310 #CJK UNIFIED IDEOGRAPH + {0xC362, 0x58DF}, //5311 #CJK UNIFIED IDEOGRAPH + {0xC363, 0x58E2}, //5312 #CJK UNIFIED IDEOGRAPH + {0xC364, 0x5BF5}, //5313 #CJK UNIFIED IDEOGRAPH + {0xC365, 0x9F90}, //5314 #CJK UNIFIED IDEOGRAPH + {0xC366, 0x5EEC}, //5315 #CJK UNIFIED IDEOGRAPH + {0xC367, 0x61F2}, //5316 #CJK UNIFIED IDEOGRAPH + {0xC368, 0x61F7}, //5317 #CJK UNIFIED IDEOGRAPH + {0xC369, 0x61F6}, //5318 #CJK UNIFIED IDEOGRAPH + {0xC36A, 0x61F5}, //5319 #CJK UNIFIED IDEOGRAPH + {0xC36B, 0x6500}, //5320 #CJK UNIFIED IDEOGRAPH + {0xC36C, 0x650F}, //5321 #CJK UNIFIED IDEOGRAPH + {0xC36D, 0x66E0}, //5322 #CJK UNIFIED IDEOGRAPH + {0xC36E, 0x66DD}, //5323 #CJK UNIFIED IDEOGRAPH + {0xC36F, 0x6AE5}, //5324 #CJK UNIFIED IDEOGRAPH + {0xC370, 0x6ADD}, //5325 #CJK UNIFIED IDEOGRAPH + {0xC371, 0x6ADA}, //5326 #CJK UNIFIED IDEOGRAPH + {0xC372, 0x6AD3}, //5327 #CJK UNIFIED IDEOGRAPH + {0xC373, 0x701B}, //5328 #CJK UNIFIED IDEOGRAPH + {0xC374, 0x701F}, //5329 #CJK UNIFIED IDEOGRAPH + {0xC375, 0x7028}, //5330 #CJK UNIFIED IDEOGRAPH + {0xC376, 0x701A}, //5331 #CJK UNIFIED IDEOGRAPH + {0xC377, 0x701D}, //5332 #CJK UNIFIED IDEOGRAPH + {0xC378, 0x7015}, //5333 #CJK UNIFIED IDEOGRAPH + {0xC379, 0x7018}, //5334 #CJK UNIFIED IDEOGRAPH + {0xC37A, 0x7206}, //5335 #CJK UNIFIED IDEOGRAPH + {0xC37B, 0x720D}, //5336 #CJK UNIFIED IDEOGRAPH + {0xC37C, 0x7258}, //5337 #CJK UNIFIED IDEOGRAPH + {0xC37D, 0x72A2}, //5338 #CJK UNIFIED IDEOGRAPH + {0xC37E, 0x7378}, //5339 #CJK UNIFIED IDEOGRAPH + {0xC3A1, 0x737A}, //5340 #CJK UNIFIED IDEOGRAPH + {0xC3A2, 0x74BD}, //5341 #CJK UNIFIED IDEOGRAPH + {0xC3A3, 0x74CA}, //5342 #CJK UNIFIED IDEOGRAPH + {0xC3A4, 0x74E3}, //5343 #CJK UNIFIED IDEOGRAPH + {0xC3A5, 0x7587}, //5344 #CJK UNIFIED IDEOGRAPH + {0xC3A6, 0x7586}, //5345 #CJK UNIFIED IDEOGRAPH + {0xC3A7, 0x765F}, //5346 #CJK UNIFIED IDEOGRAPH + {0xC3A8, 0x7661}, //5347 #CJK UNIFIED IDEOGRAPH + {0xC3A9, 0x77C7}, //5348 #CJK UNIFIED IDEOGRAPH + {0xC3AA, 0x7919}, //5349 #CJK UNIFIED IDEOGRAPH + {0xC3AB, 0x79B1}, //5350 #CJK UNIFIED IDEOGRAPH + {0xC3AC, 0x7A6B}, //5351 #CJK UNIFIED IDEOGRAPH + {0xC3AD, 0x7A69}, //5352 #CJK UNIFIED IDEOGRAPH + {0xC3AE, 0x7C3E}, //5353 #CJK UNIFIED IDEOGRAPH + {0xC3AF, 0x7C3F}, //5354 #CJK UNIFIED IDEOGRAPH + {0xC3B0, 0x7C38}, //5355 #CJK UNIFIED IDEOGRAPH + {0xC3B1, 0x7C3D}, //5356 #CJK UNIFIED IDEOGRAPH + {0xC3B2, 0x7C37}, //5357 #CJK UNIFIED IDEOGRAPH + {0xC3B3, 0x7C40}, //5358 #CJK UNIFIED IDEOGRAPH + {0xC3B4, 0x7E6B}, //5359 #CJK UNIFIED IDEOGRAPH + {0xC3B5, 0x7E6D}, //5360 #CJK UNIFIED IDEOGRAPH + {0xC3B6, 0x7E79}, //5361 #CJK UNIFIED IDEOGRAPH + {0xC3B7, 0x7E69}, //5362 #CJK UNIFIED IDEOGRAPH + {0xC3B8, 0x7E6A}, //5363 #CJK UNIFIED IDEOGRAPH + {0xC3B9, 0x7F85}, //5364 #CJK UNIFIED IDEOGRAPH + {0xC3BA, 0x7E73}, //5365 #CJK UNIFIED IDEOGRAPH + {0xC3BB, 0x7FB6}, //5366 #CJK UNIFIED IDEOGRAPH + {0xC3BC, 0x7FB9}, //5367 #CJK UNIFIED IDEOGRAPH + {0xC3BD, 0x7FB8}, //5368 #CJK UNIFIED IDEOGRAPH + {0xC3BE, 0x81D8}, //5369 #CJK UNIFIED IDEOGRAPH + {0xC3BF, 0x85E9}, //5370 #CJK UNIFIED IDEOGRAPH + {0xC3C0, 0x85DD}, //5371 #CJK UNIFIED IDEOGRAPH + {0xC3C1, 0x85EA}, //5372 #CJK UNIFIED IDEOGRAPH + {0xC3C2, 0x85D5}, //5373 #CJK UNIFIED IDEOGRAPH + {0xC3C3, 0x85E4}, //5374 #CJK UNIFIED IDEOGRAPH + {0xC3C4, 0x85E5}, //5375 #CJK UNIFIED IDEOGRAPH + {0xC3C5, 0x85F7}, //5376 #CJK UNIFIED IDEOGRAPH + {0xC3C6, 0x87FB}, //5377 #CJK UNIFIED IDEOGRAPH + {0xC3C7, 0x8805}, //5378 #CJK UNIFIED IDEOGRAPH + {0xC3C8, 0x880D}, //5379 #CJK UNIFIED IDEOGRAPH + {0xC3C9, 0x87F9}, //5380 #CJK UNIFIED IDEOGRAPH + {0xC3CA, 0x87FE}, //5381 #CJK UNIFIED IDEOGRAPH + {0xC3CB, 0x8960}, //5382 #CJK UNIFIED IDEOGRAPH + {0xC3CC, 0x895F}, //5383 #CJK UNIFIED IDEOGRAPH + {0xC3CD, 0x8956}, //5384 #CJK UNIFIED IDEOGRAPH + {0xC3CE, 0x895E}, //5385 #CJK UNIFIED IDEOGRAPH + {0xC3CF, 0x8B41}, //5386 #CJK UNIFIED IDEOGRAPH + {0xC3D0, 0x8B5C}, //5387 #CJK UNIFIED IDEOGRAPH + {0xC3D1, 0x8B58}, //5388 #CJK UNIFIED IDEOGRAPH + {0xC3D2, 0x8B49}, //5389 #CJK UNIFIED IDEOGRAPH + {0xC3D3, 0x8B5A}, //5390 #CJK UNIFIED IDEOGRAPH + {0xC3D4, 0x8B4E}, //5391 #CJK UNIFIED IDEOGRAPH + {0xC3D5, 0x8B4F}, //5392 #CJK UNIFIED IDEOGRAPH + {0xC3D6, 0x8B46}, //5393 #CJK UNIFIED IDEOGRAPH + {0xC3D7, 0x8B59}, //5394 #CJK UNIFIED IDEOGRAPH + {0xC3D8, 0x8D08}, //5395 #CJK UNIFIED IDEOGRAPH + {0xC3D9, 0x8D0A}, //5396 #CJK UNIFIED IDEOGRAPH + {0xC3DA, 0x8E7C}, //5397 #CJK UNIFIED IDEOGRAPH + {0xC3DB, 0x8E72}, //5398 #CJK UNIFIED IDEOGRAPH + {0xC3DC, 0x8E87}, //5399 #CJK UNIFIED IDEOGRAPH + {0xC3DD, 0x8E76}, //5400 #CJK UNIFIED IDEOGRAPH + {0xC3DE, 0x8E6C}, //5401 #CJK UNIFIED IDEOGRAPH + {0xC3DF, 0x8E7A}, //5402 #CJK UNIFIED IDEOGRAPH + {0xC3E0, 0x8E74}, //5403 #CJK UNIFIED IDEOGRAPH + {0xC3E1, 0x8F54}, //5404 #CJK UNIFIED IDEOGRAPH + {0xC3E2, 0x8F4E}, //5405 #CJK UNIFIED IDEOGRAPH + {0xC3E3, 0x8FAD}, //5406 #CJK UNIFIED IDEOGRAPH + {0xC3E4, 0x908A}, //5407 #CJK UNIFIED IDEOGRAPH + {0xC3E5, 0x908B}, //5408 #CJK UNIFIED IDEOGRAPH + {0xC3E6, 0x91B1}, //5409 #CJK UNIFIED IDEOGRAPH + {0xC3E7, 0x91AE}, //5410 #CJK UNIFIED IDEOGRAPH + {0xC3E8, 0x93E1}, //5411 #CJK UNIFIED IDEOGRAPH + {0xC3E9, 0x93D1}, //5412 #CJK UNIFIED IDEOGRAPH + {0xC3EA, 0x93DF}, //5413 #CJK UNIFIED IDEOGRAPH + {0xC3EB, 0x93C3}, //5414 #CJK UNIFIED IDEOGRAPH + {0xC3EC, 0x93C8}, //5415 #CJK UNIFIED IDEOGRAPH + {0xC3ED, 0x93DC}, //5416 #CJK UNIFIED IDEOGRAPH + {0xC3EE, 0x93DD}, //5417 #CJK UNIFIED IDEOGRAPH + {0xC3EF, 0x93D6}, //5418 #CJK UNIFIED IDEOGRAPH + {0xC3F0, 0x93E2}, //5419 #CJK UNIFIED IDEOGRAPH + {0xC3F1, 0x93CD}, //5420 #CJK UNIFIED IDEOGRAPH + {0xC3F2, 0x93D8}, //5421 #CJK UNIFIED IDEOGRAPH + {0xC3F3, 0x93E4}, //5422 #CJK UNIFIED IDEOGRAPH + {0xC3F4, 0x93D7}, //5423 #CJK UNIFIED IDEOGRAPH + {0xC3F5, 0x93E8}, //5424 #CJK UNIFIED IDEOGRAPH + {0xC3F6, 0x95DC}, //5425 #CJK UNIFIED IDEOGRAPH + {0xC3F7, 0x96B4}, //5426 #CJK UNIFIED IDEOGRAPH + {0xC3F8, 0x96E3}, //5427 #CJK UNIFIED IDEOGRAPH + {0xC3F9, 0x972A}, //5428 #CJK UNIFIED IDEOGRAPH + {0xC3FA, 0x9727}, //5429 #CJK UNIFIED IDEOGRAPH + {0xC3FB, 0x9761}, //5430 #CJK UNIFIED IDEOGRAPH + {0xC3FC, 0x97DC}, //5431 #CJK UNIFIED IDEOGRAPH + {0xC3FD, 0x97FB}, //5432 #CJK UNIFIED IDEOGRAPH + {0xC3FE, 0x985E}, //5433 #CJK UNIFIED IDEOGRAPH + {0xC440, 0x9858}, //5434 #CJK UNIFIED IDEOGRAPH + {0xC441, 0x985B}, //5435 #CJK UNIFIED IDEOGRAPH + {0xC442, 0x98BC}, //5436 #CJK UNIFIED IDEOGRAPH + {0xC443, 0x9945}, //5437 #CJK UNIFIED IDEOGRAPH + {0xC444, 0x9949}, //5438 #CJK UNIFIED IDEOGRAPH + {0xC445, 0x9A16}, //5439 #CJK UNIFIED IDEOGRAPH + {0xC446, 0x9A19}, //5440 #CJK UNIFIED IDEOGRAPH + {0xC447, 0x9B0D}, //5441 #CJK UNIFIED IDEOGRAPH + {0xC448, 0x9BE8}, //5442 #CJK UNIFIED IDEOGRAPH + {0xC449, 0x9BE7}, //5443 #CJK UNIFIED IDEOGRAPH + {0xC44A, 0x9BD6}, //5444 #CJK UNIFIED IDEOGRAPH + {0xC44B, 0x9BDB}, //5445 #CJK UNIFIED IDEOGRAPH + {0xC44C, 0x9D89}, //5446 #CJK UNIFIED IDEOGRAPH + {0xC44D, 0x9D61}, //5447 #CJK UNIFIED IDEOGRAPH + {0xC44E, 0x9D72}, //5448 #CJK UNIFIED IDEOGRAPH + {0xC44F, 0x9D6A}, //5449 #CJK UNIFIED IDEOGRAPH + {0xC450, 0x9D6C}, //5450 #CJK UNIFIED IDEOGRAPH + {0xC451, 0x9E92}, //5451 #CJK UNIFIED IDEOGRAPH + {0xC452, 0x9E97}, //5452 #CJK UNIFIED IDEOGRAPH + {0xC453, 0x9E93}, //5453 #CJK UNIFIED IDEOGRAPH + {0xC454, 0x9EB4}, //5454 #CJK UNIFIED IDEOGRAPH + {0xC455, 0x52F8}, //5455 #CJK UNIFIED IDEOGRAPH + {0xC456, 0x56A8}, //5456 #CJK UNIFIED IDEOGRAPH + {0xC457, 0x56B7}, //5457 #CJK UNIFIED IDEOGRAPH + {0xC458, 0x56B6}, //5458 #CJK UNIFIED IDEOGRAPH + {0xC459, 0x56B4}, //5459 #CJK UNIFIED IDEOGRAPH + {0xC45A, 0x56BC}, //5460 #CJK UNIFIED IDEOGRAPH + {0xC45B, 0x58E4}, //5461 #CJK UNIFIED IDEOGRAPH + {0xC45C, 0x5B40}, //5462 #CJK UNIFIED IDEOGRAPH + {0xC45D, 0x5B43}, //5463 #CJK UNIFIED IDEOGRAPH + {0xC45E, 0x5B7D}, //5464 #CJK UNIFIED IDEOGRAPH + {0xC45F, 0x5BF6}, //5465 #CJK UNIFIED IDEOGRAPH + {0xC460, 0x5DC9}, //5466 #CJK UNIFIED IDEOGRAPH + {0xC461, 0x61F8}, //5467 #CJK UNIFIED IDEOGRAPH + {0xC462, 0x61FA}, //5468 #CJK UNIFIED IDEOGRAPH + {0xC463, 0x6518}, //5469 #CJK UNIFIED IDEOGRAPH + {0xC464, 0x6514}, //5470 #CJK UNIFIED IDEOGRAPH + {0xC465, 0x6519}, //5471 #CJK UNIFIED IDEOGRAPH + {0xC466, 0x66E6}, //5472 #CJK UNIFIED IDEOGRAPH + {0xC467, 0x6727}, //5473 #CJK UNIFIED IDEOGRAPH + {0xC468, 0x6AEC}, //5474 #CJK UNIFIED IDEOGRAPH + {0xC469, 0x703E}, //5475 #CJK UNIFIED IDEOGRAPH + {0xC46A, 0x7030}, //5476 #CJK UNIFIED IDEOGRAPH + {0xC46B, 0x7032}, //5477 #CJK UNIFIED IDEOGRAPH + {0xC46C, 0x7210}, //5478 #CJK UNIFIED IDEOGRAPH + {0xC46D, 0x737B}, //5479 #CJK UNIFIED IDEOGRAPH + {0xC46E, 0x74CF}, //5480 #CJK UNIFIED IDEOGRAPH + {0xC46F, 0x7662}, //5481 #CJK UNIFIED IDEOGRAPH + {0xC470, 0x7665}, //5482 #CJK UNIFIED IDEOGRAPH + {0xC471, 0x7926}, //5483 #CJK UNIFIED IDEOGRAPH + {0xC472, 0x792A}, //5484 #CJK UNIFIED IDEOGRAPH + {0xC473, 0x792C}, //5485 #CJK UNIFIED IDEOGRAPH + {0xC474, 0x792B}, //5486 #CJK UNIFIED IDEOGRAPH + {0xC475, 0x7AC7}, //5487 #CJK UNIFIED IDEOGRAPH + {0xC476, 0x7AF6}, //5488 #CJK UNIFIED IDEOGRAPH + {0xC477, 0x7C4C}, //5489 #CJK UNIFIED IDEOGRAPH + {0xC478, 0x7C43}, //5490 #CJK UNIFIED IDEOGRAPH + {0xC479, 0x7C4D}, //5491 #CJK UNIFIED IDEOGRAPH + {0xC47A, 0x7CEF}, //5492 #CJK UNIFIED IDEOGRAPH + {0xC47B, 0x7CF0}, //5493 #CJK UNIFIED IDEOGRAPH + {0xC47C, 0x8FAE}, //5494 #CJK UNIFIED IDEOGRAPH + {0xC47D, 0x7E7D}, //5495 #CJK UNIFIED IDEOGRAPH + {0xC47E, 0x7E7C}, //5496 #CJK UNIFIED IDEOGRAPH + {0xC4A1, 0x7E82}, //5497 #CJK UNIFIED IDEOGRAPH + {0xC4A2, 0x7F4C}, //5498 #CJK UNIFIED IDEOGRAPH + {0xC4A3, 0x8000}, //5499 #CJK UNIFIED IDEOGRAPH + {0xC4A4, 0x81DA}, //5500 #CJK UNIFIED IDEOGRAPH + {0xC4A5, 0x8266}, //5501 #CJK UNIFIED IDEOGRAPH + {0xC4A6, 0x85FB}, //5502 #CJK UNIFIED IDEOGRAPH + {0xC4A7, 0x85F9}, //5503 #CJK UNIFIED IDEOGRAPH + {0xC4A8, 0x8611}, //5504 #CJK UNIFIED IDEOGRAPH + {0xC4A9, 0x85FA}, //5505 #CJK UNIFIED IDEOGRAPH + {0xC4AA, 0x8606}, //5506 #CJK UNIFIED IDEOGRAPH + {0xC4AB, 0x860B}, //5507 #CJK UNIFIED IDEOGRAPH + {0xC4AC, 0x8607}, //5508 #CJK UNIFIED IDEOGRAPH + {0xC4AD, 0x860A}, //5509 #CJK UNIFIED IDEOGRAPH + {0xC4AE, 0x8814}, //5510 #CJK UNIFIED IDEOGRAPH + {0xC4AF, 0x8815}, //5511 #CJK UNIFIED IDEOGRAPH + {0xC4B0, 0x8964}, //5512 #CJK UNIFIED IDEOGRAPH + {0xC4B1, 0x89BA}, //5513 #CJK UNIFIED IDEOGRAPH + {0xC4B2, 0x89F8}, //5514 #CJK UNIFIED IDEOGRAPH + {0xC4B3, 0x8B70}, //5515 #CJK UNIFIED IDEOGRAPH + {0xC4B4, 0x8B6C}, //5516 #CJK UNIFIED IDEOGRAPH + {0xC4B5, 0x8B66}, //5517 #CJK UNIFIED IDEOGRAPH + {0xC4B6, 0x8B6F}, //5518 #CJK UNIFIED IDEOGRAPH + {0xC4B7, 0x8B5F}, //5519 #CJK UNIFIED IDEOGRAPH + {0xC4B8, 0x8B6B}, //5520 #CJK UNIFIED IDEOGRAPH + {0xC4B9, 0x8D0F}, //5521 #CJK UNIFIED IDEOGRAPH + {0xC4BA, 0x8D0D}, //5522 #CJK UNIFIED IDEOGRAPH + {0xC4BB, 0x8E89}, //5523 #CJK UNIFIED IDEOGRAPH + {0xC4BC, 0x8E81}, //5524 #CJK UNIFIED IDEOGRAPH + {0xC4BD, 0x8E85}, //5525 #CJK UNIFIED IDEOGRAPH + {0xC4BE, 0x8E82}, //5526 #CJK UNIFIED IDEOGRAPH + {0xC4BF, 0x91B4}, //5527 #CJK UNIFIED IDEOGRAPH + {0xC4C0, 0x91CB}, //5528 #CJK UNIFIED IDEOGRAPH + {0xC4C1, 0x9418}, //5529 #CJK UNIFIED IDEOGRAPH + {0xC4C2, 0x9403}, //5530 #CJK UNIFIED IDEOGRAPH + {0xC4C3, 0x93FD}, //5531 #CJK UNIFIED IDEOGRAPH + {0xC4C4, 0x95E1}, //5532 #CJK UNIFIED IDEOGRAPH + {0xC4C5, 0x9730}, //5533 #CJK UNIFIED IDEOGRAPH + {0xC4C6, 0x98C4}, //5534 #CJK UNIFIED IDEOGRAPH + {0xC4C7, 0x9952}, //5535 #CJK UNIFIED IDEOGRAPH + {0xC4C8, 0x9951}, //5536 #CJK UNIFIED IDEOGRAPH + {0xC4C9, 0x99A8}, //5537 #CJK UNIFIED IDEOGRAPH + {0xC4CA, 0x9A2B}, //5538 #CJK UNIFIED IDEOGRAPH + {0xC4CB, 0x9A30}, //5539 #CJK UNIFIED IDEOGRAPH + {0xC4CC, 0x9A37}, //5540 #CJK UNIFIED IDEOGRAPH + {0xC4CD, 0x9A35}, //5541 #CJK UNIFIED IDEOGRAPH + {0xC4CE, 0x9C13}, //5542 #CJK UNIFIED IDEOGRAPH + {0xC4CF, 0x9C0D}, //5543 #CJK UNIFIED IDEOGRAPH + {0xC4D0, 0x9E79}, //5544 #CJK UNIFIED IDEOGRAPH + {0xC4D1, 0x9EB5}, //5545 #CJK UNIFIED IDEOGRAPH + {0xC4D2, 0x9EE8}, //5546 #CJK UNIFIED IDEOGRAPH + {0xC4D3, 0x9F2F}, //5547 #CJK UNIFIED IDEOGRAPH + {0xC4D4, 0x9F5F}, //5548 #CJK UNIFIED IDEOGRAPH + {0xC4D5, 0x9F63}, //5549 #CJK UNIFIED IDEOGRAPH + {0xC4D6, 0x9F61}, //5550 #CJK UNIFIED IDEOGRAPH + {0xC4D7, 0x5137}, //5551 #CJK UNIFIED IDEOGRAPH + {0xC4D8, 0x5138}, //5552 #CJK UNIFIED IDEOGRAPH + {0xC4D9, 0x56C1}, //5553 #CJK UNIFIED IDEOGRAPH + {0xC4DA, 0x56C0}, //5554 #CJK UNIFIED IDEOGRAPH + {0xC4DB, 0x56C2}, //5555 #CJK UNIFIED IDEOGRAPH + {0xC4DC, 0x5914}, //5556 #CJK UNIFIED IDEOGRAPH + {0xC4DD, 0x5C6C}, //5557 #CJK UNIFIED IDEOGRAPH + {0xC4DE, 0x5DCD}, //5558 #CJK UNIFIED IDEOGRAPH + {0xC4DF, 0x61FC}, //5559 #CJK UNIFIED IDEOGRAPH + {0xC4E0, 0x61FE}, //5560 #CJK UNIFIED IDEOGRAPH + {0xC4E1, 0x651D}, //5561 #CJK UNIFIED IDEOGRAPH + {0xC4E2, 0x651C}, //5562 #CJK UNIFIED IDEOGRAPH + {0xC4E3, 0x6595}, //5563 #CJK UNIFIED IDEOGRAPH + {0xC4E4, 0x66E9}, //5564 #CJK UNIFIED IDEOGRAPH + {0xC4E5, 0x6AFB}, //5565 #CJK UNIFIED IDEOGRAPH + {0xC4E6, 0x6B04}, //5566 #CJK UNIFIED IDEOGRAPH + {0xC4E7, 0x6AFA}, //5567 #CJK UNIFIED IDEOGRAPH + {0xC4E8, 0x6BB2}, //5568 #CJK UNIFIED IDEOGRAPH + {0xC4E9, 0x704C}, //5569 #CJK UNIFIED IDEOGRAPH + {0xC4EA, 0x721B}, //5570 #CJK UNIFIED IDEOGRAPH + {0xC4EB, 0x72A7}, //5571 #CJK UNIFIED IDEOGRAPH + {0xC4EC, 0x74D6}, //5572 #CJK UNIFIED IDEOGRAPH + {0xC4ED, 0x74D4}, //5573 #CJK UNIFIED IDEOGRAPH + {0xC4EE, 0x7669}, //5574 #CJK UNIFIED IDEOGRAPH + {0xC4EF, 0x77D3}, //5575 #CJK UNIFIED IDEOGRAPH + {0xC4F0, 0x7C50}, //5576 #CJK UNIFIED IDEOGRAPH + {0xC4F1, 0x7E8F}, //5577 #CJK UNIFIED IDEOGRAPH + {0xC4F2, 0x7E8C}, //5578 #CJK UNIFIED IDEOGRAPH + {0xC4F3, 0x7FBC}, //5579 #CJK UNIFIED IDEOGRAPH + {0xC4F4, 0x8617}, //5580 #CJK UNIFIED IDEOGRAPH + {0xC4F5, 0x862D}, //5581 #CJK UNIFIED IDEOGRAPH + {0xC4F6, 0x861A}, //5582 #CJK UNIFIED IDEOGRAPH + {0xC4F7, 0x8823}, //5583 #CJK UNIFIED IDEOGRAPH + {0xC4F8, 0x8822}, //5584 #CJK UNIFIED IDEOGRAPH + {0xC4F9, 0x8821}, //5585 #CJK UNIFIED IDEOGRAPH + {0xC4FA, 0x881F}, //5586 #CJK UNIFIED IDEOGRAPH + {0xC4FB, 0x896A}, //5587 #CJK UNIFIED IDEOGRAPH + {0xC4FC, 0x896C}, //5588 #CJK UNIFIED IDEOGRAPH + {0xC4FD, 0x89BD}, //5589 #CJK UNIFIED IDEOGRAPH + {0xC4FE, 0x8B74}, //5590 #CJK UNIFIED IDEOGRAPH + {0xC540, 0x8B77}, //5591 #CJK UNIFIED IDEOGRAPH + {0xC541, 0x8B7D}, //5592 #CJK UNIFIED IDEOGRAPH + {0xC542, 0x8D13}, //5593 #CJK UNIFIED IDEOGRAPH + {0xC543, 0x8E8A}, //5594 #CJK UNIFIED IDEOGRAPH + {0xC544, 0x8E8D}, //5595 #CJK UNIFIED IDEOGRAPH + {0xC545, 0x8E8B}, //5596 #CJK UNIFIED IDEOGRAPH + {0xC546, 0x8F5F}, //5597 #CJK UNIFIED IDEOGRAPH + {0xC547, 0x8FAF}, //5598 #CJK UNIFIED IDEOGRAPH + {0xC548, 0x91BA}, //5599 #CJK UNIFIED IDEOGRAPH + {0xC549, 0x942E}, //5600 #CJK UNIFIED IDEOGRAPH + {0xC54A, 0x9433}, //5601 #CJK UNIFIED IDEOGRAPH + {0xC54B, 0x9435}, //5602 #CJK UNIFIED IDEOGRAPH + {0xC54C, 0x943A}, //5603 #CJK UNIFIED IDEOGRAPH + {0xC54D, 0x9438}, //5604 #CJK UNIFIED IDEOGRAPH + {0xC54E, 0x9432}, //5605 #CJK UNIFIED IDEOGRAPH + {0xC54F, 0x942B}, //5606 #CJK UNIFIED IDEOGRAPH + {0xC550, 0x95E2}, //5607 #CJK UNIFIED IDEOGRAPH + {0xC551, 0x9738}, //5608 #CJK UNIFIED IDEOGRAPH + {0xC552, 0x9739}, //5609 #CJK UNIFIED IDEOGRAPH + {0xC553, 0x9732}, //5610 #CJK UNIFIED IDEOGRAPH + {0xC554, 0x97FF}, //5611 #CJK UNIFIED IDEOGRAPH + {0xC555, 0x9867}, //5612 #CJK UNIFIED IDEOGRAPH + {0xC556, 0x9865}, //5613 #CJK UNIFIED IDEOGRAPH + {0xC557, 0x9957}, //5614 #CJK UNIFIED IDEOGRAPH + {0xC558, 0x9A45}, //5615 #CJK UNIFIED IDEOGRAPH + {0xC559, 0x9A43}, //5616 #CJK UNIFIED IDEOGRAPH + {0xC55A, 0x9A40}, //5617 #CJK UNIFIED IDEOGRAPH + {0xC55B, 0x9A3E}, //5618 #CJK UNIFIED IDEOGRAPH + {0xC55C, 0x9ACF}, //5619 #CJK UNIFIED IDEOGRAPH + {0xC55D, 0x9B54}, //5620 #CJK UNIFIED IDEOGRAPH + {0xC55E, 0x9B51}, //5621 #CJK UNIFIED IDEOGRAPH + {0xC55F, 0x9C2D}, //5622 #CJK UNIFIED IDEOGRAPH + {0xC560, 0x9C25}, //5623 #CJK UNIFIED IDEOGRAPH + {0xC561, 0x9DAF}, //5624 #CJK UNIFIED IDEOGRAPH + {0xC562, 0x9DB4}, //5625 #CJK UNIFIED IDEOGRAPH + {0xC563, 0x9DC2}, //5626 #CJK UNIFIED IDEOGRAPH + {0xC564, 0x9DB8}, //5627 #CJK UNIFIED IDEOGRAPH + {0xC565, 0x9E9D}, //5628 #CJK UNIFIED IDEOGRAPH + {0xC566, 0x9EEF}, //5629 #CJK UNIFIED IDEOGRAPH + {0xC567, 0x9F19}, //5630 #CJK UNIFIED IDEOGRAPH + {0xC568, 0x9F5C}, //5631 #CJK UNIFIED IDEOGRAPH + {0xC569, 0x9F66}, //5632 #CJK UNIFIED IDEOGRAPH + {0xC56A, 0x9F67}, //5633 #CJK UNIFIED IDEOGRAPH + {0xC56B, 0x513C}, //5634 #CJK UNIFIED IDEOGRAPH + {0xC56C, 0x513B}, //5635 #CJK UNIFIED IDEOGRAPH + {0xC56D, 0x56C8}, //5636 #CJK UNIFIED IDEOGRAPH + {0xC56E, 0x56CA}, //5637 #CJK UNIFIED IDEOGRAPH + {0xC56F, 0x56C9}, //5638 #CJK UNIFIED IDEOGRAPH + {0xC570, 0x5B7F}, //5639 #CJK UNIFIED IDEOGRAPH + {0xC571, 0x5DD4}, //5640 #CJK UNIFIED IDEOGRAPH + {0xC572, 0x5DD2}, //5641 #CJK UNIFIED IDEOGRAPH + {0xC573, 0x5F4E}, //5642 #CJK UNIFIED IDEOGRAPH + {0xC574, 0x61FF}, //5643 #CJK UNIFIED IDEOGRAPH + {0xC575, 0x6524}, //5644 #CJK UNIFIED IDEOGRAPH + {0xC576, 0x6B0A}, //5645 #CJK UNIFIED IDEOGRAPH + {0xC577, 0x6B61}, //5646 #CJK UNIFIED IDEOGRAPH + {0xC578, 0x7051}, //5647 #CJK UNIFIED IDEOGRAPH + {0xC579, 0x7058}, //5648 #CJK UNIFIED IDEOGRAPH + {0xC57A, 0x7380}, //5649 #CJK UNIFIED IDEOGRAPH + {0xC57B, 0x74E4}, //5650 #CJK UNIFIED IDEOGRAPH + {0xC57C, 0x758A}, //5651 #CJK UNIFIED IDEOGRAPH + {0xC57D, 0x766E}, //5652 #CJK UNIFIED IDEOGRAPH + {0xC57E, 0x766C}, //5653 #CJK UNIFIED IDEOGRAPH + {0xC5A1, 0x79B3}, //5654 #CJK UNIFIED IDEOGRAPH + {0xC5A2, 0x7C60}, //5655 #CJK UNIFIED IDEOGRAPH + {0xC5A3, 0x7C5F}, //5656 #CJK UNIFIED IDEOGRAPH + {0xC5A4, 0x807E}, //5657 #CJK UNIFIED IDEOGRAPH + {0xC5A5, 0x807D}, //5658 #CJK UNIFIED IDEOGRAPH + {0xC5A6, 0x81DF}, //5659 #CJK UNIFIED IDEOGRAPH + {0xC5A7, 0x8972}, //5660 #CJK UNIFIED IDEOGRAPH + {0xC5A8, 0x896F}, //5661 #CJK UNIFIED IDEOGRAPH + {0xC5A9, 0x89FC}, //5662 #CJK UNIFIED IDEOGRAPH + {0xC5AA, 0x8B80}, //5663 #CJK UNIFIED IDEOGRAPH + {0xC5AB, 0x8D16}, //5664 #CJK UNIFIED IDEOGRAPH + {0xC5AC, 0x8D17}, //5665 #CJK UNIFIED IDEOGRAPH + {0xC5AD, 0x8E91}, //5666 #CJK UNIFIED IDEOGRAPH + {0xC5AE, 0x8E93}, //5667 #CJK UNIFIED IDEOGRAPH + {0xC5AF, 0x8F61}, //5668 #CJK UNIFIED IDEOGRAPH + {0xC5B0, 0x9148}, //5669 #CJK UNIFIED IDEOGRAPH + {0xC5B1, 0x9444}, //5670 #CJK UNIFIED IDEOGRAPH + {0xC5B2, 0x9451}, //5671 #CJK UNIFIED IDEOGRAPH + {0xC5B3, 0x9452}, //5672 #CJK UNIFIED IDEOGRAPH + {0xC5B4, 0x973D}, //5673 #CJK UNIFIED IDEOGRAPH + {0xC5B5, 0x973E}, //5674 #CJK UNIFIED IDEOGRAPH + {0xC5B6, 0x97C3}, //5675 #CJK UNIFIED IDEOGRAPH + {0xC5B7, 0x97C1}, //5676 #CJK UNIFIED IDEOGRAPH + {0xC5B8, 0x986B}, //5677 #CJK UNIFIED IDEOGRAPH + {0xC5B9, 0x9955}, //5678 #CJK UNIFIED IDEOGRAPH + {0xC5BA, 0x9A55}, //5679 #CJK UNIFIED IDEOGRAPH + {0xC5BB, 0x9A4D}, //5680 #CJK UNIFIED IDEOGRAPH + {0xC5BC, 0x9AD2}, //5681 #CJK UNIFIED IDEOGRAPH + {0xC5BD, 0x9B1A}, //5682 #CJK UNIFIED IDEOGRAPH + {0xC5BE, 0x9C49}, //5683 #CJK UNIFIED IDEOGRAPH + {0xC5BF, 0x9C31}, //5684 #CJK UNIFIED IDEOGRAPH + {0xC5C0, 0x9C3E}, //5685 #CJK UNIFIED IDEOGRAPH + {0xC5C1, 0x9C3B}, //5686 #CJK UNIFIED IDEOGRAPH + {0xC5C2, 0x9DD3}, //5687 #CJK UNIFIED IDEOGRAPH + {0xC5C3, 0x9DD7}, //5688 #CJK UNIFIED IDEOGRAPH + {0xC5C4, 0x9F34}, //5689 #CJK UNIFIED IDEOGRAPH + {0xC5C5, 0x9F6C}, //5690 #CJK UNIFIED IDEOGRAPH + {0xC5C6, 0x9F6A}, //5691 #CJK UNIFIED IDEOGRAPH + {0xC5C7, 0x9F94}, //5692 #CJK UNIFIED IDEOGRAPH + {0xC5C8, 0x56CC}, //5693 #CJK UNIFIED IDEOGRAPH + {0xC5C9, 0x5DD6}, //5694 #CJK UNIFIED IDEOGRAPH + {0xC5CA, 0x6200}, //5695 #CJK UNIFIED IDEOGRAPH + {0xC5CB, 0x6523}, //5696 #CJK UNIFIED IDEOGRAPH + {0xC5CC, 0x652B}, //5697 #CJK UNIFIED IDEOGRAPH + {0xC5CD, 0x652A}, //5698 #CJK UNIFIED IDEOGRAPH + {0xC5CE, 0x66EC}, //5699 #CJK UNIFIED IDEOGRAPH + {0xC5CF, 0x6B10}, //5700 #CJK UNIFIED IDEOGRAPH + {0xC5D0, 0x74DA}, //5701 #CJK UNIFIED IDEOGRAPH + {0xC5D1, 0x7ACA}, //5702 #CJK UNIFIED IDEOGRAPH + {0xC5D2, 0x7C64}, //5703 #CJK UNIFIED IDEOGRAPH + {0xC5D3, 0x7C63}, //5704 #CJK UNIFIED IDEOGRAPH + {0xC5D4, 0x7C65}, //5705 #CJK UNIFIED IDEOGRAPH + {0xC5D5, 0x7E93}, //5706 #CJK UNIFIED IDEOGRAPH + {0xC5D6, 0x7E96}, //5707 #CJK UNIFIED IDEOGRAPH + {0xC5D7, 0x7E94}, //5708 #CJK UNIFIED IDEOGRAPH + {0xC5D8, 0x81E2}, //5709 #CJK UNIFIED IDEOGRAPH + {0xC5D9, 0x8638}, //5710 #CJK UNIFIED IDEOGRAPH + {0xC5DA, 0x863F}, //5711 #CJK UNIFIED IDEOGRAPH + {0xC5DB, 0x8831}, //5712 #CJK UNIFIED IDEOGRAPH + {0xC5DC, 0x8B8A}, //5713 #CJK UNIFIED IDEOGRAPH + {0xC5DD, 0x9090}, //5714 #CJK UNIFIED IDEOGRAPH + {0xC5DE, 0x908F}, //5715 #CJK UNIFIED IDEOGRAPH + {0xC5DF, 0x9463}, //5716 #CJK UNIFIED IDEOGRAPH + {0xC5E0, 0x9460}, //5717 #CJK UNIFIED IDEOGRAPH + {0xC5E1, 0x9464}, //5718 #CJK UNIFIED IDEOGRAPH + {0xC5E2, 0x9768}, //5719 #CJK UNIFIED IDEOGRAPH + {0xC5E3, 0x986F}, //5720 #CJK UNIFIED IDEOGRAPH + {0xC5E4, 0x995C}, //5721 #CJK UNIFIED IDEOGRAPH + {0xC5E5, 0x9A5A}, //5722 #CJK UNIFIED IDEOGRAPH + {0xC5E6, 0x9A5B}, //5723 #CJK UNIFIED IDEOGRAPH + {0xC5E7, 0x9A57}, //5724 #CJK UNIFIED IDEOGRAPH + {0xC5E8, 0x9AD3}, //5725 #CJK UNIFIED IDEOGRAPH + {0xC5E9, 0x9AD4}, //5726 #CJK UNIFIED IDEOGRAPH + {0xC5EA, 0x9AD1}, //5727 #CJK UNIFIED IDEOGRAPH + {0xC5EB, 0x9C54}, //5728 #CJK UNIFIED IDEOGRAPH + {0xC5EC, 0x9C57}, //5729 #CJK UNIFIED IDEOGRAPH + {0xC5ED, 0x9C56}, //5730 #CJK UNIFIED IDEOGRAPH + {0xC5EE, 0x9DE5}, //5731 #CJK UNIFIED IDEOGRAPH + {0xC5EF, 0x9E9F}, //5732 #CJK UNIFIED IDEOGRAPH + {0xC5F0, 0x9EF4}, //5733 #CJK UNIFIED IDEOGRAPH + {0xC5F1, 0x56D1}, //5734 #CJK UNIFIED IDEOGRAPH + {0xC5F2, 0x58E9}, //5735 #CJK UNIFIED IDEOGRAPH + {0xC5F3, 0x652C}, //5736 #CJK UNIFIED IDEOGRAPH + {0xC5F4, 0x705E}, //5737 #CJK UNIFIED IDEOGRAPH + {0xC5F5, 0x7671}, //5738 #CJK UNIFIED IDEOGRAPH + {0xC5F6, 0x7672}, //5739 #CJK UNIFIED IDEOGRAPH + {0xC5F7, 0x77D7}, //5740 #CJK UNIFIED IDEOGRAPH + {0xC5F8, 0x7F50}, //5741 #CJK UNIFIED IDEOGRAPH + {0xC5F9, 0x7F88}, //5742 #CJK UNIFIED IDEOGRAPH + {0xC5FA, 0x8836}, //5743 #CJK UNIFIED IDEOGRAPH + {0xC5FB, 0x8839}, //5744 #CJK UNIFIED IDEOGRAPH + {0xC5FC, 0x8862}, //5745 #CJK UNIFIED IDEOGRAPH + {0xC5FD, 0x8B93}, //5746 #CJK UNIFIED IDEOGRAPH + {0xC5FE, 0x8B92}, //5747 #CJK UNIFIED IDEOGRAPH + {0xC640, 0x8B96}, //5748 #CJK UNIFIED IDEOGRAPH + {0xC641, 0x8277}, //5749 #CJK UNIFIED IDEOGRAPH + {0xC642, 0x8D1B}, //5750 #CJK UNIFIED IDEOGRAPH + {0xC643, 0x91C0}, //5751 #CJK UNIFIED IDEOGRAPH + {0xC644, 0x946A}, //5752 #CJK UNIFIED IDEOGRAPH + {0xC645, 0x9742}, //5753 #CJK UNIFIED IDEOGRAPH + {0xC646, 0x9748}, //5754 #CJK UNIFIED IDEOGRAPH + {0xC647, 0x9744}, //5755 #CJK UNIFIED IDEOGRAPH + {0xC648, 0x97C6}, //5756 #CJK UNIFIED IDEOGRAPH + {0xC649, 0x9870}, //5757 #CJK UNIFIED IDEOGRAPH + {0xC64A, 0x9A5F}, //5758 #CJK UNIFIED IDEOGRAPH + {0xC64B, 0x9B22}, //5759 #CJK UNIFIED IDEOGRAPH + {0xC64C, 0x9B58}, //5760 #CJK UNIFIED IDEOGRAPH + {0xC64D, 0x9C5F}, //5761 #CJK UNIFIED IDEOGRAPH + {0xC64E, 0x9DF9}, //5762 #CJK UNIFIED IDEOGRAPH + {0xC64F, 0x9DFA}, //5763 #CJK UNIFIED IDEOGRAPH + {0xC650, 0x9E7C}, //5764 #CJK UNIFIED IDEOGRAPH + {0xC651, 0x9E7D}, //5765 #CJK UNIFIED IDEOGRAPH + {0xC652, 0x9F07}, //5766 #CJK UNIFIED IDEOGRAPH + {0xC653, 0x9F77}, //5767 #CJK UNIFIED IDEOGRAPH + {0xC654, 0x9F72}, //5768 #CJK UNIFIED IDEOGRAPH + {0xC655, 0x5EF3}, //5769 #CJK UNIFIED IDEOGRAPH + {0xC656, 0x6B16}, //5770 #CJK UNIFIED IDEOGRAPH + {0xC657, 0x7063}, //5771 #CJK UNIFIED IDEOGRAPH + {0xC658, 0x7C6C}, //5772 #CJK UNIFIED IDEOGRAPH + {0xC659, 0x7C6E}, //5773 #CJK UNIFIED IDEOGRAPH + {0xC65A, 0x883B}, //5774 #CJK UNIFIED IDEOGRAPH + {0xC65B, 0x89C0}, //5775 #CJK UNIFIED IDEOGRAPH + {0xC65C, 0x8EA1}, //5776 #CJK UNIFIED IDEOGRAPH + {0xC65D, 0x91C1}, //5777 #CJK UNIFIED IDEOGRAPH + {0xC65E, 0x9472}, //5778 #CJK UNIFIED IDEOGRAPH + {0xC65F, 0x9470}, //5779 #CJK UNIFIED IDEOGRAPH + {0xC660, 0x9871}, //5780 #CJK UNIFIED IDEOGRAPH + {0xC661, 0x995E}, //5781 #CJK UNIFIED IDEOGRAPH + {0xC662, 0x9AD6}, //5782 #CJK UNIFIED IDEOGRAPH + {0xC663, 0x9B23}, //5783 #CJK UNIFIED IDEOGRAPH + {0xC664, 0x9ECC}, //5784 #CJK UNIFIED IDEOGRAPH + {0xC665, 0x7064}, //5785 #CJK UNIFIED IDEOGRAPH + {0xC666, 0x77DA}, //5786 #CJK UNIFIED IDEOGRAPH + {0xC667, 0x8B9A}, //5787 #CJK UNIFIED IDEOGRAPH + {0xC668, 0x9477}, //5788 #CJK UNIFIED IDEOGRAPH + {0xC669, 0x97C9}, //5789 #CJK UNIFIED IDEOGRAPH + {0xC66A, 0x9A62}, //5790 #CJK UNIFIED IDEOGRAPH + {0xC66B, 0x9A65}, //5791 #CJK UNIFIED IDEOGRAPH + {0xC66C, 0x7E9C}, //5792 #CJK UNIFIED IDEOGRAPH + {0xC66D, 0x8B9C}, //5793 #CJK UNIFIED IDEOGRAPH + {0xC66E, 0x8EAA}, //5794 #CJK UNIFIED IDEOGRAPH + {0xC66F, 0x91C5}, //5795 #CJK UNIFIED IDEOGRAPH + {0xC670, 0x947D}, //5796 #CJK UNIFIED IDEOGRAPH + {0xC671, 0x947E}, //5797 #CJK UNIFIED IDEOGRAPH + {0xC672, 0x947C}, //5798 #CJK UNIFIED IDEOGRAPH + {0xC673, 0x9C77}, //5799 #CJK UNIFIED IDEOGRAPH + {0xC674, 0x9C78}, //5800 #CJK UNIFIED IDEOGRAPH + {0xC675, 0x9EF7}, //5801 #CJK UNIFIED IDEOGRAPH + {0xC676, 0x8C54}, //5802 #CJK UNIFIED IDEOGRAPH + {0xC677, 0x947F}, //5803 #CJK UNIFIED IDEOGRAPH + {0xC678, 0x9E1A}, //5804 #CJK UNIFIED IDEOGRAPH + {0xC679, 0x7228}, //5805 #CJK UNIFIED IDEOGRAPH + {0xC67A, 0x9A6A}, //5806 #CJK UNIFIED IDEOGRAPH + {0xC67B, 0x9B31}, //5807 #CJK UNIFIED IDEOGRAPH + {0xC67C, 0x9E1B}, //5808 #CJK UNIFIED IDEOGRAPH + {0xC67D, 0x9E1E}, //5809 #CJK UNIFIED IDEOGRAPH + {0xC67E, 0x7C72}, //5810 #CJK UNIFIED IDEOGRAPH + {0xC940, 0x4E42}, //5811 #CJK UNIFIED IDEOGRAPH + {0xC941, 0x4E5C}, //5812 #CJK UNIFIED IDEOGRAPH + {0xC942, 0x51F5}, //5813 #CJK UNIFIED IDEOGRAPH + {0xC943, 0x531A}, //5814 #CJK UNIFIED IDEOGRAPH + {0xC944, 0x5382}, //5815 #CJK UNIFIED IDEOGRAPH + {0xC945, 0x4E07}, //5816 #CJK UNIFIED IDEOGRAPH + {0xC946, 0x4E0C}, //5817 #CJK UNIFIED IDEOGRAPH + {0xC947, 0x4E47}, //5818 #CJK UNIFIED IDEOGRAPH + {0xC948, 0x4E8D}, //5819 #CJK UNIFIED IDEOGRAPH + {0xC949, 0x56D7}, //5820 #CJK UNIFIED IDEOGRAPH + {0xC94A, 0xFA0C}, //5821 #CJK COMPATIBILITY IDEOGRAPH + {0xC94B, 0x5C6E}, //5822 #CJK UNIFIED IDEOGRAPH + {0xC94C, 0x5F73}, //5823 #CJK UNIFIED IDEOGRAPH + {0xC94D, 0x4E0F}, //5824 #CJK UNIFIED IDEOGRAPH + {0xC94E, 0x5187}, //5825 #CJK UNIFIED IDEOGRAPH + {0xC94F, 0x4E0E}, //5826 #CJK UNIFIED IDEOGRAPH + {0xC950, 0x4E2E}, //5827 #CJK UNIFIED IDEOGRAPH + {0xC951, 0x4E93}, //5828 #CJK UNIFIED IDEOGRAPH + {0xC952, 0x4EC2}, //5829 #CJK UNIFIED IDEOGRAPH + {0xC953, 0x4EC9}, //5830 #CJK UNIFIED IDEOGRAPH + {0xC954, 0x4EC8}, //5831 #CJK UNIFIED IDEOGRAPH + {0xC955, 0x5198}, //5832 #CJK UNIFIED IDEOGRAPH + {0xC956, 0x52FC}, //5833 #CJK UNIFIED IDEOGRAPH + {0xC957, 0x536C}, //5834 #CJK UNIFIED IDEOGRAPH + {0xC958, 0x53B9}, //5835 #CJK UNIFIED IDEOGRAPH + {0xC959, 0x5720}, //5836 #CJK UNIFIED IDEOGRAPH + {0xC95A, 0x5903}, //5837 #CJK UNIFIED IDEOGRAPH + {0xC95B, 0x592C}, //5838 #CJK UNIFIED IDEOGRAPH + {0xC95C, 0x5C10}, //5839 #CJK UNIFIED IDEOGRAPH + {0xC95D, 0x5DFF}, //5840 #CJK UNIFIED IDEOGRAPH + {0xC95E, 0x65E1}, //5841 #CJK UNIFIED IDEOGRAPH + {0xC95F, 0x6BB3}, //5842 #CJK UNIFIED IDEOGRAPH + {0xC960, 0x6BCC}, //5843 #CJK UNIFIED IDEOGRAPH + {0xC961, 0x6C14}, //5844 #CJK UNIFIED IDEOGRAPH + {0xC962, 0x723F}, //5845 #CJK UNIFIED IDEOGRAPH + {0xC963, 0x4E31}, //5846 #CJK UNIFIED IDEOGRAPH + {0xC964, 0x4E3C}, //5847 #CJK UNIFIED IDEOGRAPH + {0xC965, 0x4EE8}, //5848 #CJK UNIFIED IDEOGRAPH + {0xC966, 0x4EDC}, //5849 #CJK UNIFIED IDEOGRAPH + {0xC967, 0x4EE9}, //5850 #CJK UNIFIED IDEOGRAPH + {0xC968, 0x4EE1}, //5851 #CJK UNIFIED IDEOGRAPH + {0xC969, 0x4EDD}, //5852 #CJK UNIFIED IDEOGRAPH + {0xC96A, 0x4EDA}, //5853 #CJK UNIFIED IDEOGRAPH + {0xC96B, 0x520C}, //5854 #CJK UNIFIED IDEOGRAPH + {0xC96C, 0x531C}, //5855 #CJK UNIFIED IDEOGRAPH + {0xC96D, 0x534C}, //5856 #CJK UNIFIED IDEOGRAPH + {0xC96E, 0x5722}, //5857 #CJK UNIFIED IDEOGRAPH + {0xC96F, 0x5723}, //5858 #CJK UNIFIED IDEOGRAPH + {0xC970, 0x5917}, //5859 #CJK UNIFIED IDEOGRAPH + {0xC971, 0x592F}, //5860 #CJK UNIFIED IDEOGRAPH + {0xC972, 0x5B81}, //5861 #CJK UNIFIED IDEOGRAPH + {0xC973, 0x5B84}, //5862 #CJK UNIFIED IDEOGRAPH + {0xC974, 0x5C12}, //5863 #CJK UNIFIED IDEOGRAPH + {0xC975, 0x5C3B}, //5864 #CJK UNIFIED IDEOGRAPH + {0xC976, 0x5C74}, //5865 #CJK UNIFIED IDEOGRAPH + {0xC977, 0x5C73}, //5866 #CJK UNIFIED IDEOGRAPH + {0xC978, 0x5E04}, //5867 #CJK UNIFIED IDEOGRAPH + {0xC979, 0x5E80}, //5868 #CJK UNIFIED IDEOGRAPH + {0xC97A, 0x5E82}, //5869 #CJK UNIFIED IDEOGRAPH + {0xC97B, 0x5FC9}, //5870 #CJK UNIFIED IDEOGRAPH + {0xC97C, 0x6209}, //5871 #CJK UNIFIED IDEOGRAPH + {0xC97D, 0x6250}, //5872 #CJK UNIFIED IDEOGRAPH + {0xC97E, 0x6C15}, //5873 #CJK UNIFIED IDEOGRAPH + {0xC9A1, 0x6C36}, //5874 #CJK UNIFIED IDEOGRAPH + {0xC9A2, 0x6C43}, //5875 #CJK UNIFIED IDEOGRAPH + {0xC9A3, 0x6C3F}, //5876 #CJK UNIFIED IDEOGRAPH + {0xC9A4, 0x6C3B}, //5877 #CJK UNIFIED IDEOGRAPH + {0xC9A5, 0x72AE}, //5878 #CJK UNIFIED IDEOGRAPH + {0xC9A6, 0x72B0}, //5879 #CJK UNIFIED IDEOGRAPH + {0xC9A7, 0x738A}, //5880 #CJK UNIFIED IDEOGRAPH + {0xC9A8, 0x79B8}, //5881 #CJK UNIFIED IDEOGRAPH + {0xC9A9, 0x808A}, //5882 #CJK UNIFIED IDEOGRAPH + {0xC9AA, 0x961E}, //5883 #CJK UNIFIED IDEOGRAPH + {0xC9AB, 0x4F0E}, //5884 #CJK UNIFIED IDEOGRAPH + {0xC9AC, 0x4F18}, //5885 #CJK UNIFIED IDEOGRAPH + {0xC9AD, 0x4F2C}, //5886 #CJK UNIFIED IDEOGRAPH + {0xC9AE, 0x4EF5}, //5887 #CJK UNIFIED IDEOGRAPH + {0xC9AF, 0x4F14}, //5888 #CJK UNIFIED IDEOGRAPH + {0xC9B0, 0x4EF1}, //5889 #CJK UNIFIED IDEOGRAPH + {0xC9B1, 0x4F00}, //5890 #CJK UNIFIED IDEOGRAPH + {0xC9B2, 0x4EF7}, //5891 #CJK UNIFIED IDEOGRAPH + {0xC9B3, 0x4F08}, //5892 #CJK UNIFIED IDEOGRAPH + {0xC9B4, 0x4F1D}, //5893 #CJK UNIFIED IDEOGRAPH + {0xC9B5, 0x4F02}, //5894 #CJK UNIFIED IDEOGRAPH + {0xC9B6, 0x4F05}, //5895 #CJK UNIFIED IDEOGRAPH + {0xC9B7, 0x4F22}, //5896 #CJK UNIFIED IDEOGRAPH + {0xC9B8, 0x4F13}, //5897 #CJK UNIFIED IDEOGRAPH + {0xC9B9, 0x4F04}, //5898 #CJK UNIFIED IDEOGRAPH + {0xC9BA, 0x4EF4}, //5899 #CJK UNIFIED IDEOGRAPH + {0xC9BB, 0x4F12}, //5900 #CJK UNIFIED IDEOGRAPH + {0xC9BC, 0x51B1}, //5901 #CJK UNIFIED IDEOGRAPH + {0xC9BD, 0x5213}, //5902 #CJK UNIFIED IDEOGRAPH + {0xC9BE, 0x5209}, //5903 #CJK UNIFIED IDEOGRAPH + {0xC9BF, 0x5210}, //5904 #CJK UNIFIED IDEOGRAPH + {0xC9C0, 0x52A6}, //5905 #CJK UNIFIED IDEOGRAPH + {0xC9C1, 0x5322}, //5906 #CJK UNIFIED IDEOGRAPH + {0xC9C2, 0x531F}, //5907 #CJK UNIFIED IDEOGRAPH + {0xC9C3, 0x534D}, //5908 #CJK UNIFIED IDEOGRAPH + {0xC9C4, 0x538A}, //5909 #CJK UNIFIED IDEOGRAPH + {0xC9C5, 0x5407}, //5910 #CJK UNIFIED IDEOGRAPH + {0xC9C6, 0x56E1}, //5911 #CJK UNIFIED IDEOGRAPH + {0xC9C7, 0x56DF}, //5912 #CJK UNIFIED IDEOGRAPH + {0xC9C8, 0x572E}, //5913 #CJK UNIFIED IDEOGRAPH + {0xC9C9, 0x572A}, //5914 #CJK UNIFIED IDEOGRAPH + {0xC9CA, 0x5734}, //5915 #CJK UNIFIED IDEOGRAPH + {0xC9CB, 0x593C}, //5916 #CJK UNIFIED IDEOGRAPH + {0xC9CC, 0x5980}, //5917 #CJK UNIFIED IDEOGRAPH + {0xC9CD, 0x597C}, //5918 #CJK UNIFIED IDEOGRAPH + {0xC9CE, 0x5985}, //5919 #CJK UNIFIED IDEOGRAPH + {0xC9CF, 0x597B}, //5920 #CJK UNIFIED IDEOGRAPH + {0xC9D0, 0x597E}, //5921 #CJK UNIFIED IDEOGRAPH + {0xC9D1, 0x5977}, //5922 #CJK UNIFIED IDEOGRAPH + {0xC9D2, 0x597F}, //5923 #CJK UNIFIED IDEOGRAPH + {0xC9D3, 0x5B56}, //5924 #CJK UNIFIED IDEOGRAPH + {0xC9D4, 0x5C15}, //5925 #CJK UNIFIED IDEOGRAPH + {0xC9D5, 0x5C25}, //5926 #CJK UNIFIED IDEOGRAPH + {0xC9D6, 0x5C7C}, //5927 #CJK UNIFIED IDEOGRAPH + {0xC9D7, 0x5C7A}, //5928 #CJK UNIFIED IDEOGRAPH + {0xC9D8, 0x5C7B}, //5929 #CJK UNIFIED IDEOGRAPH + {0xC9D9, 0x5C7E}, //5930 #CJK UNIFIED IDEOGRAPH + {0xC9DA, 0x5DDF}, //5931 #CJK UNIFIED IDEOGRAPH + {0xC9DB, 0x5E75}, //5932 #CJK UNIFIED IDEOGRAPH + {0xC9DC, 0x5E84}, //5933 #CJK UNIFIED IDEOGRAPH + {0xC9DD, 0x5F02}, //5934 #CJK UNIFIED IDEOGRAPH + {0xC9DE, 0x5F1A}, //5935 #CJK UNIFIED IDEOGRAPH + {0xC9DF, 0x5F74}, //5936 #CJK UNIFIED IDEOGRAPH + {0xC9E0, 0x5FD5}, //5937 #CJK UNIFIED IDEOGRAPH + {0xC9E1, 0x5FD4}, //5938 #CJK UNIFIED IDEOGRAPH + {0xC9E2, 0x5FCF}, //5939 #CJK UNIFIED IDEOGRAPH + {0xC9E3, 0x625C}, //5940 #CJK UNIFIED IDEOGRAPH + {0xC9E4, 0x625E}, //5941 #CJK UNIFIED IDEOGRAPH + {0xC9E5, 0x6264}, //5942 #CJK UNIFIED IDEOGRAPH + {0xC9E6, 0x6261}, //5943 #CJK UNIFIED IDEOGRAPH + {0xC9E7, 0x6266}, //5944 #CJK UNIFIED IDEOGRAPH + {0xC9E8, 0x6262}, //5945 #CJK UNIFIED IDEOGRAPH + {0xC9E9, 0x6259}, //5946 #CJK UNIFIED IDEOGRAPH + {0xC9EA, 0x6260}, //5947 #CJK UNIFIED IDEOGRAPH + {0xC9EB, 0x625A}, //5948 #CJK UNIFIED IDEOGRAPH + {0xC9EC, 0x6265}, //5949 #CJK UNIFIED IDEOGRAPH + {0xC9ED, 0x65EF}, //5950 #CJK UNIFIED IDEOGRAPH + {0xC9EE, 0x65EE}, //5951 #CJK UNIFIED IDEOGRAPH + {0xC9EF, 0x673E}, //5952 #CJK UNIFIED IDEOGRAPH + {0xC9F0, 0x6739}, //5953 #CJK UNIFIED IDEOGRAPH + {0xC9F1, 0x6738}, //5954 #CJK UNIFIED IDEOGRAPH + {0xC9F2, 0x673B}, //5955 #CJK UNIFIED IDEOGRAPH + {0xC9F3, 0x673A}, //5956 #CJK UNIFIED IDEOGRAPH + {0xC9F4, 0x673F}, //5957 #CJK UNIFIED IDEOGRAPH + {0xC9F5, 0x673C}, //5958 #CJK UNIFIED IDEOGRAPH + {0xC9F6, 0x6733}, //5959 #CJK UNIFIED IDEOGRAPH + {0xC9F7, 0x6C18}, //5960 #CJK UNIFIED IDEOGRAPH + {0xC9F8, 0x6C46}, //5961 #CJK UNIFIED IDEOGRAPH + {0xC9F9, 0x6C52}, //5962 #CJK UNIFIED IDEOGRAPH + {0xC9FA, 0x6C5C}, //5963 #CJK UNIFIED IDEOGRAPH + {0xC9FB, 0x6C4F}, //5964 #CJK UNIFIED IDEOGRAPH + {0xC9FC, 0x6C4A}, //5965 #CJK UNIFIED IDEOGRAPH + {0xC9FD, 0x6C54}, //5966 #CJK UNIFIED IDEOGRAPH + {0xC9FE, 0x6C4B}, //5967 #CJK UNIFIED IDEOGRAPH + {0xCA40, 0x6C4C}, //5968 #CJK UNIFIED IDEOGRAPH + {0xCA41, 0x7071}, //5969 #CJK UNIFIED IDEOGRAPH + {0xCA42, 0x725E}, //5970 #CJK UNIFIED IDEOGRAPH + {0xCA43, 0x72B4}, //5971 #CJK UNIFIED IDEOGRAPH + {0xCA44, 0x72B5}, //5972 #CJK UNIFIED IDEOGRAPH + {0xCA45, 0x738E}, //5973 #CJK UNIFIED IDEOGRAPH + {0xCA46, 0x752A}, //5974 #CJK UNIFIED IDEOGRAPH + {0xCA47, 0x767F}, //5975 #CJK UNIFIED IDEOGRAPH + {0xCA48, 0x7A75}, //5976 #CJK UNIFIED IDEOGRAPH + {0xCA49, 0x7F51}, //5977 #CJK UNIFIED IDEOGRAPH + {0xCA4A, 0x8278}, //5978 #CJK UNIFIED IDEOGRAPH + {0xCA4B, 0x827C}, //5979 #CJK UNIFIED IDEOGRAPH + {0xCA4C, 0x8280}, //5980 #CJK UNIFIED IDEOGRAPH + {0xCA4D, 0x827D}, //5981 #CJK UNIFIED IDEOGRAPH + {0xCA4E, 0x827F}, //5982 #CJK UNIFIED IDEOGRAPH + {0xCA4F, 0x864D}, //5983 #CJK UNIFIED IDEOGRAPH + {0xCA50, 0x897E}, //5984 #CJK UNIFIED IDEOGRAPH + {0xCA51, 0x9099}, //5985 #CJK UNIFIED IDEOGRAPH + {0xCA52, 0x9097}, //5986 #CJK UNIFIED IDEOGRAPH + {0xCA53, 0x9098}, //5987 #CJK UNIFIED IDEOGRAPH + {0xCA54, 0x909B}, //5988 #CJK UNIFIED IDEOGRAPH + {0xCA55, 0x9094}, //5989 #CJK UNIFIED IDEOGRAPH + {0xCA56, 0x9622}, //5990 #CJK UNIFIED IDEOGRAPH + {0xCA57, 0x9624}, //5991 #CJK UNIFIED IDEOGRAPH + {0xCA58, 0x9620}, //5992 #CJK UNIFIED IDEOGRAPH + {0xCA59, 0x9623}, //5993 #CJK UNIFIED IDEOGRAPH + {0xCA5A, 0x4F56}, //5994 #CJK UNIFIED IDEOGRAPH + {0xCA5B, 0x4F3B}, //5995 #CJK UNIFIED IDEOGRAPH + {0xCA5C, 0x4F62}, //5996 #CJK UNIFIED IDEOGRAPH + {0xCA5D, 0x4F49}, //5997 #CJK UNIFIED IDEOGRAPH + {0xCA5E, 0x4F53}, //5998 #CJK UNIFIED IDEOGRAPH + {0xCA5F, 0x4F64}, //5999 #CJK UNIFIED IDEOGRAPH + {0xCA60, 0x4F3E}, //6000 #CJK UNIFIED IDEOGRAPH + {0xCA61, 0x4F67}, //6001 #CJK UNIFIED IDEOGRAPH + {0xCA62, 0x4F52}, //6002 #CJK UNIFIED IDEOGRAPH + {0xCA63, 0x4F5F}, //6003 #CJK UNIFIED IDEOGRAPH + {0xCA64, 0x4F41}, //6004 #CJK UNIFIED IDEOGRAPH + {0xCA65, 0x4F58}, //6005 #CJK UNIFIED IDEOGRAPH + {0xCA66, 0x4F2D}, //6006 #CJK UNIFIED IDEOGRAPH + {0xCA67, 0x4F33}, //6007 #CJK UNIFIED IDEOGRAPH + {0xCA68, 0x4F3F}, //6008 #CJK UNIFIED IDEOGRAPH + {0xCA69, 0x4F61}, //6009 #CJK UNIFIED IDEOGRAPH + {0xCA6A, 0x518F}, //6010 #CJK UNIFIED IDEOGRAPH + {0xCA6B, 0x51B9}, //6011 #CJK UNIFIED IDEOGRAPH + {0xCA6C, 0x521C}, //6012 #CJK UNIFIED IDEOGRAPH + {0xCA6D, 0x521E}, //6013 #CJK UNIFIED IDEOGRAPH + {0xCA6E, 0x5221}, //6014 #CJK UNIFIED IDEOGRAPH + {0xCA6F, 0x52AD}, //6015 #CJK UNIFIED IDEOGRAPH + {0xCA70, 0x52AE}, //6016 #CJK UNIFIED IDEOGRAPH + {0xCA71, 0x5309}, //6017 #CJK UNIFIED IDEOGRAPH + {0xCA72, 0x5363}, //6018 #CJK UNIFIED IDEOGRAPH + {0xCA73, 0x5372}, //6019 #CJK UNIFIED IDEOGRAPH + {0xCA74, 0x538E}, //6020 #CJK UNIFIED IDEOGRAPH + {0xCA75, 0x538F}, //6021 #CJK UNIFIED IDEOGRAPH + {0xCA76, 0x5430}, //6022 #CJK UNIFIED IDEOGRAPH + {0xCA77, 0x5437}, //6023 #CJK UNIFIED IDEOGRAPH + {0xCA78, 0x542A}, //6024 #CJK UNIFIED IDEOGRAPH + {0xCA79, 0x5454}, //6025 #CJK UNIFIED IDEOGRAPH + {0xCA7A, 0x5445}, //6026 #CJK UNIFIED IDEOGRAPH + {0xCA7B, 0x5419}, //6027 #CJK UNIFIED IDEOGRAPH + {0xCA7C, 0x541C}, //6028 #CJK UNIFIED IDEOGRAPH + {0xCA7D, 0x5425}, //6029 #CJK UNIFIED IDEOGRAPH + {0xCA7E, 0x5418}, //6030 #CJK UNIFIED IDEOGRAPH + {0xCAA1, 0x543D}, //6031 #CJK UNIFIED IDEOGRAPH + {0xCAA2, 0x544F}, //6032 #CJK UNIFIED IDEOGRAPH + {0xCAA3, 0x5441}, //6033 #CJK UNIFIED IDEOGRAPH + {0xCAA4, 0x5428}, //6034 #CJK UNIFIED IDEOGRAPH + {0xCAA5, 0x5424}, //6035 #CJK UNIFIED IDEOGRAPH + {0xCAA6, 0x5447}, //6036 #CJK UNIFIED IDEOGRAPH + {0xCAA7, 0x56EE}, //6037 #CJK UNIFIED IDEOGRAPH + {0xCAA8, 0x56E7}, //6038 #CJK UNIFIED IDEOGRAPH + {0xCAA9, 0x56E5}, //6039 #CJK UNIFIED IDEOGRAPH + {0xCAAA, 0x5741}, //6040 #CJK UNIFIED IDEOGRAPH + {0xCAAB, 0x5745}, //6041 #CJK UNIFIED IDEOGRAPH + {0xCAAC, 0x574C}, //6042 #CJK UNIFIED IDEOGRAPH + {0xCAAD, 0x5749}, //6043 #CJK UNIFIED IDEOGRAPH + {0xCAAE, 0x574B}, //6044 #CJK UNIFIED IDEOGRAPH + {0xCAAF, 0x5752}, //6045 #CJK UNIFIED IDEOGRAPH + {0xCAB0, 0x5906}, //6046 #CJK UNIFIED IDEOGRAPH + {0xCAB1, 0x5940}, //6047 #CJK UNIFIED IDEOGRAPH + {0xCAB2, 0x59A6}, //6048 #CJK UNIFIED IDEOGRAPH + {0xCAB3, 0x5998}, //6049 #CJK UNIFIED IDEOGRAPH + {0xCAB4, 0x59A0}, //6050 #CJK UNIFIED IDEOGRAPH + {0xCAB5, 0x5997}, //6051 #CJK UNIFIED IDEOGRAPH + {0xCAB6, 0x598E}, //6052 #CJK UNIFIED IDEOGRAPH + {0xCAB7, 0x59A2}, //6053 #CJK UNIFIED IDEOGRAPH + {0xCAB8, 0x5990}, //6054 #CJK UNIFIED IDEOGRAPH + {0xCAB9, 0x598F}, //6055 #CJK UNIFIED IDEOGRAPH + {0xCABA, 0x59A7}, //6056 #CJK UNIFIED IDEOGRAPH + {0xCABB, 0x59A1}, //6057 #CJK UNIFIED IDEOGRAPH + {0xCABC, 0x5B8E}, //6058 #CJK UNIFIED IDEOGRAPH + {0xCABD, 0x5B92}, //6059 #CJK UNIFIED IDEOGRAPH + {0xCABE, 0x5C28}, //6060 #CJK UNIFIED IDEOGRAPH + {0xCABF, 0x5C2A}, //6061 #CJK UNIFIED IDEOGRAPH + {0xCAC0, 0x5C8D}, //6062 #CJK UNIFIED IDEOGRAPH + {0xCAC1, 0x5C8F}, //6063 #CJK UNIFIED IDEOGRAPH + {0xCAC2, 0x5C88}, //6064 #CJK UNIFIED IDEOGRAPH + {0xCAC3, 0x5C8B}, //6065 #CJK UNIFIED IDEOGRAPH + {0xCAC4, 0x5C89}, //6066 #CJK UNIFIED IDEOGRAPH + {0xCAC5, 0x5C92}, //6067 #CJK UNIFIED IDEOGRAPH + {0xCAC6, 0x5C8A}, //6068 #CJK UNIFIED IDEOGRAPH + {0xCAC7, 0x5C86}, //6069 #CJK UNIFIED IDEOGRAPH + {0xCAC8, 0x5C93}, //6070 #CJK UNIFIED IDEOGRAPH + {0xCAC9, 0x5C95}, //6071 #CJK UNIFIED IDEOGRAPH + {0xCACA, 0x5DE0}, //6072 #CJK UNIFIED IDEOGRAPH + {0xCACB, 0x5E0A}, //6073 #CJK UNIFIED IDEOGRAPH + {0xCACC, 0x5E0E}, //6074 #CJK UNIFIED IDEOGRAPH + {0xCACD, 0x5E8B}, //6075 #CJK UNIFIED IDEOGRAPH + {0xCACE, 0x5E89}, //6076 #CJK UNIFIED IDEOGRAPH + {0xCACF, 0x5E8C}, //6077 #CJK UNIFIED IDEOGRAPH + {0xCAD0, 0x5E88}, //6078 #CJK UNIFIED IDEOGRAPH + {0xCAD1, 0x5E8D}, //6079 #CJK UNIFIED IDEOGRAPH + {0xCAD2, 0x5F05}, //6080 #CJK UNIFIED IDEOGRAPH + {0xCAD3, 0x5F1D}, //6081 #CJK UNIFIED IDEOGRAPH + {0xCAD4, 0x5F78}, //6082 #CJK UNIFIED IDEOGRAPH + {0xCAD5, 0x5F76}, //6083 #CJK UNIFIED IDEOGRAPH + {0xCAD6, 0x5FD2}, //6084 #CJK UNIFIED IDEOGRAPH + {0xCAD7, 0x5FD1}, //6085 #CJK UNIFIED IDEOGRAPH + {0xCAD8, 0x5FD0}, //6086 #CJK UNIFIED IDEOGRAPH + {0xCAD9, 0x5FED}, //6087 #CJK UNIFIED IDEOGRAPH + {0xCADA, 0x5FE8}, //6088 #CJK UNIFIED IDEOGRAPH + {0xCADB, 0x5FEE}, //6089 #CJK UNIFIED IDEOGRAPH + {0xCADC, 0x5FF3}, //6090 #CJK UNIFIED IDEOGRAPH + {0xCADD, 0x5FE1}, //6091 #CJK UNIFIED IDEOGRAPH + {0xCADE, 0x5FE4}, //6092 #CJK UNIFIED IDEOGRAPH + {0xCADF, 0x5FE3}, //6093 #CJK UNIFIED IDEOGRAPH + {0xCAE0, 0x5FFA}, //6094 #CJK UNIFIED IDEOGRAPH + {0xCAE1, 0x5FEF}, //6095 #CJK UNIFIED IDEOGRAPH + {0xCAE2, 0x5FF7}, //6096 #CJK UNIFIED IDEOGRAPH + {0xCAE3, 0x5FFB}, //6097 #CJK UNIFIED IDEOGRAPH + {0xCAE4, 0x6000}, //6098 #CJK UNIFIED IDEOGRAPH + {0xCAE5, 0x5FF4}, //6099 #CJK UNIFIED IDEOGRAPH + {0xCAE6, 0x623A}, //6100 #CJK UNIFIED IDEOGRAPH + {0xCAE7, 0x6283}, //6101 #CJK UNIFIED IDEOGRAPH + {0xCAE8, 0x628C}, //6102 #CJK UNIFIED IDEOGRAPH + {0xCAE9, 0x628E}, //6103 #CJK UNIFIED IDEOGRAPH + {0xCAEA, 0x628F}, //6104 #CJK UNIFIED IDEOGRAPH + {0xCAEB, 0x6294}, //6105 #CJK UNIFIED IDEOGRAPH + {0xCAEC, 0x6287}, //6106 #CJK UNIFIED IDEOGRAPH + {0xCAED, 0x6271}, //6107 #CJK UNIFIED IDEOGRAPH + {0xCAEE, 0x627B}, //6108 #CJK UNIFIED IDEOGRAPH + {0xCAEF, 0x627A}, //6109 #CJK UNIFIED IDEOGRAPH + {0xCAF0, 0x6270}, //6110 #CJK UNIFIED IDEOGRAPH + {0xCAF1, 0x6281}, //6111 #CJK UNIFIED IDEOGRAPH + {0xCAF2, 0x6288}, //6112 #CJK UNIFIED IDEOGRAPH + {0xCAF3, 0x6277}, //6113 #CJK UNIFIED IDEOGRAPH + {0xCAF4, 0x627D}, //6114 #CJK UNIFIED IDEOGRAPH + {0xCAF5, 0x6272}, //6115 #CJK UNIFIED IDEOGRAPH + {0xCAF6, 0x6274}, //6116 #CJK UNIFIED IDEOGRAPH + {0xCAF7, 0x6537}, //6117 #CJK UNIFIED IDEOGRAPH + {0xCAF8, 0x65F0}, //6118 #CJK UNIFIED IDEOGRAPH + {0xCAF9, 0x65F4}, //6119 #CJK UNIFIED IDEOGRAPH + {0xCAFA, 0x65F3}, //6120 #CJK UNIFIED IDEOGRAPH + {0xCAFB, 0x65F2}, //6121 #CJK UNIFIED IDEOGRAPH + {0xCAFC, 0x65F5}, //6122 #CJK UNIFIED IDEOGRAPH + {0xCAFD, 0x6745}, //6123 #CJK UNIFIED IDEOGRAPH + {0xCAFE, 0x6747}, //6124 #CJK UNIFIED IDEOGRAPH + {0xCB40, 0x6759}, //6125 #CJK UNIFIED IDEOGRAPH + {0xCB41, 0x6755}, //6126 #CJK UNIFIED IDEOGRAPH + {0xCB42, 0x674C}, //6127 #CJK UNIFIED IDEOGRAPH + {0xCB43, 0x6748}, //6128 #CJK UNIFIED IDEOGRAPH + {0xCB44, 0x675D}, //6129 #CJK UNIFIED IDEOGRAPH + {0xCB45, 0x674D}, //6130 #CJK UNIFIED IDEOGRAPH + {0xCB46, 0x675A}, //6131 #CJK UNIFIED IDEOGRAPH + {0xCB47, 0x674B}, //6132 #CJK UNIFIED IDEOGRAPH + {0xCB48, 0x6BD0}, //6133 #CJK UNIFIED IDEOGRAPH + {0xCB49, 0x6C19}, //6134 #CJK UNIFIED IDEOGRAPH + {0xCB4A, 0x6C1A}, //6135 #CJK UNIFIED IDEOGRAPH + {0xCB4B, 0x6C78}, //6136 #CJK UNIFIED IDEOGRAPH + {0xCB4C, 0x6C67}, //6137 #CJK UNIFIED IDEOGRAPH + {0xCB4D, 0x6C6B}, //6138 #CJK UNIFIED IDEOGRAPH + {0xCB4E, 0x6C84}, //6139 #CJK UNIFIED IDEOGRAPH + {0xCB4F, 0x6C8B}, //6140 #CJK UNIFIED IDEOGRAPH + {0xCB50, 0x6C8F}, //6141 #CJK UNIFIED IDEOGRAPH + {0xCB51, 0x6C71}, //6142 #CJK UNIFIED IDEOGRAPH + {0xCB52, 0x6C6F}, //6143 #CJK UNIFIED IDEOGRAPH + {0xCB53, 0x6C69}, //6144 #CJK UNIFIED IDEOGRAPH + {0xCB54, 0x6C9A}, //6145 #CJK UNIFIED IDEOGRAPH + {0xCB55, 0x6C6D}, //6146 #CJK UNIFIED IDEOGRAPH + {0xCB56, 0x6C87}, //6147 #CJK UNIFIED IDEOGRAPH + {0xCB57, 0x6C95}, //6148 #CJK UNIFIED IDEOGRAPH + {0xCB58, 0x6C9C}, //6149 #CJK UNIFIED IDEOGRAPH + {0xCB59, 0x6C66}, //6150 #CJK UNIFIED IDEOGRAPH + {0xCB5A, 0x6C73}, //6151 #CJK UNIFIED IDEOGRAPH + {0xCB5B, 0x6C65}, //6152 #CJK UNIFIED IDEOGRAPH + {0xCB5C, 0x6C7B}, //6153 #CJK UNIFIED IDEOGRAPH + {0xCB5D, 0x6C8E}, //6154 #CJK UNIFIED IDEOGRAPH + {0xCB5E, 0x7074}, //6155 #CJK UNIFIED IDEOGRAPH + {0xCB5F, 0x707A}, //6156 #CJK UNIFIED IDEOGRAPH + {0xCB60, 0x7263}, //6157 #CJK UNIFIED IDEOGRAPH + {0xCB61, 0x72BF}, //6158 #CJK UNIFIED IDEOGRAPH + {0xCB62, 0x72BD}, //6159 #CJK UNIFIED IDEOGRAPH + {0xCB63, 0x72C3}, //6160 #CJK UNIFIED IDEOGRAPH + {0xCB64, 0x72C6}, //6161 #CJK UNIFIED IDEOGRAPH + {0xCB65, 0x72C1}, //6162 #CJK UNIFIED IDEOGRAPH + {0xCB66, 0x72BA}, //6163 #CJK UNIFIED IDEOGRAPH + {0xCB67, 0x72C5}, //6164 #CJK UNIFIED IDEOGRAPH + {0xCB68, 0x7395}, //6165 #CJK UNIFIED IDEOGRAPH + {0xCB69, 0x7397}, //6166 #CJK UNIFIED IDEOGRAPH + {0xCB6A, 0x7393}, //6167 #CJK UNIFIED IDEOGRAPH + {0xCB6B, 0x7394}, //6168 #CJK UNIFIED IDEOGRAPH + {0xCB6C, 0x7392}, //6169 #CJK UNIFIED IDEOGRAPH + {0xCB6D, 0x753A}, //6170 #CJK UNIFIED IDEOGRAPH + {0xCB6E, 0x7539}, //6171 #CJK UNIFIED IDEOGRAPH + {0xCB6F, 0x7594}, //6172 #CJK UNIFIED IDEOGRAPH + {0xCB70, 0x7595}, //6173 #CJK UNIFIED IDEOGRAPH + {0xCB71, 0x7681}, //6174 #CJK UNIFIED IDEOGRAPH + {0xCB72, 0x793D}, //6175 #CJK UNIFIED IDEOGRAPH + {0xCB73, 0x8034}, //6176 #CJK UNIFIED IDEOGRAPH + {0xCB74, 0x8095}, //6177 #CJK UNIFIED IDEOGRAPH + {0xCB75, 0x8099}, //6178 #CJK UNIFIED IDEOGRAPH + {0xCB76, 0x8090}, //6179 #CJK UNIFIED IDEOGRAPH + {0xCB77, 0x8092}, //6180 #CJK UNIFIED IDEOGRAPH + {0xCB78, 0x809C}, //6181 #CJK UNIFIED IDEOGRAPH + {0xCB79, 0x8290}, //6182 #CJK UNIFIED IDEOGRAPH + {0xCB7A, 0x828F}, //6183 #CJK UNIFIED IDEOGRAPH + {0xCB7B, 0x8285}, //6184 #CJK UNIFIED IDEOGRAPH + {0xCB7C, 0x828E}, //6185 #CJK UNIFIED IDEOGRAPH + {0xCB7D, 0x8291}, //6186 #CJK UNIFIED IDEOGRAPH + {0xCB7E, 0x8293}, //6187 #CJK UNIFIED IDEOGRAPH + {0xCBA1, 0x828A}, //6188 #CJK UNIFIED IDEOGRAPH + {0xCBA2, 0x8283}, //6189 #CJK UNIFIED IDEOGRAPH + {0xCBA3, 0x8284}, //6190 #CJK UNIFIED IDEOGRAPH + {0xCBA4, 0x8C78}, //6191 #CJK UNIFIED IDEOGRAPH + {0xCBA5, 0x8FC9}, //6192 #CJK UNIFIED IDEOGRAPH + {0xCBA6, 0x8FBF}, //6193 #CJK UNIFIED IDEOGRAPH + {0xCBA7, 0x909F}, //6194 #CJK UNIFIED IDEOGRAPH + {0xCBA8, 0x90A1}, //6195 #CJK UNIFIED IDEOGRAPH + {0xCBA9, 0x90A5}, //6196 #CJK UNIFIED IDEOGRAPH + {0xCBAA, 0x909E}, //6197 #CJK UNIFIED IDEOGRAPH + {0xCBAB, 0x90A7}, //6198 #CJK UNIFIED IDEOGRAPH + {0xCBAC, 0x90A0}, //6199 #CJK UNIFIED IDEOGRAPH + {0xCBAD, 0x9630}, //6200 #CJK UNIFIED IDEOGRAPH + {0xCBAE, 0x9628}, //6201 #CJK UNIFIED IDEOGRAPH + {0xCBAF, 0x962F}, //6202 #CJK UNIFIED IDEOGRAPH + {0xCBB0, 0x962D}, //6203 #CJK UNIFIED IDEOGRAPH + {0xCBB1, 0x4E33}, //6204 #CJK UNIFIED IDEOGRAPH + {0xCBB2, 0x4F98}, //6205 #CJK UNIFIED IDEOGRAPH + {0xCBB3, 0x4F7C}, //6206 #CJK UNIFIED IDEOGRAPH + {0xCBB4, 0x4F85}, //6207 #CJK UNIFIED IDEOGRAPH + {0xCBB5, 0x4F7D}, //6208 #CJK UNIFIED IDEOGRAPH + {0xCBB6, 0x4F80}, //6209 #CJK UNIFIED IDEOGRAPH + {0xCBB7, 0x4F87}, //6210 #CJK UNIFIED IDEOGRAPH + {0xCBB8, 0x4F76}, //6211 #CJK UNIFIED IDEOGRAPH + {0xCBB9, 0x4F74}, //6212 #CJK UNIFIED IDEOGRAPH + {0xCBBA, 0x4F89}, //6213 #CJK UNIFIED IDEOGRAPH + {0xCBBB, 0x4F84}, //6214 #CJK UNIFIED IDEOGRAPH + {0xCBBC, 0x4F77}, //6215 #CJK UNIFIED IDEOGRAPH + {0xCBBD, 0x4F4C}, //6216 #CJK UNIFIED IDEOGRAPH + {0xCBBE, 0x4F97}, //6217 #CJK UNIFIED IDEOGRAPH + {0xCBBF, 0x4F6A}, //6218 #CJK UNIFIED IDEOGRAPH + {0xCBC0, 0x4F9A}, //6219 #CJK UNIFIED IDEOGRAPH + {0xCBC1, 0x4F79}, //6220 #CJK UNIFIED IDEOGRAPH + {0xCBC2, 0x4F81}, //6221 #CJK UNIFIED IDEOGRAPH + {0xCBC3, 0x4F78}, //6222 #CJK UNIFIED IDEOGRAPH + {0xCBC4, 0x4F90}, //6223 #CJK UNIFIED IDEOGRAPH + {0xCBC5, 0x4F9C}, //6224 #CJK UNIFIED IDEOGRAPH + {0xCBC6, 0x4F94}, //6225 #CJK UNIFIED IDEOGRAPH + {0xCBC7, 0x4F9E}, //6226 #CJK UNIFIED IDEOGRAPH + {0xCBC8, 0x4F92}, //6227 #CJK UNIFIED IDEOGRAPH + {0xCBC9, 0x4F82}, //6228 #CJK UNIFIED IDEOGRAPH + {0xCBCA, 0x4F95}, //6229 #CJK UNIFIED IDEOGRAPH + {0xCBCB, 0x4F6B}, //6230 #CJK UNIFIED IDEOGRAPH + {0xCBCC, 0x4F6E}, //6231 #CJK UNIFIED IDEOGRAPH + {0xCBCD, 0x519E}, //6232 #CJK UNIFIED IDEOGRAPH + {0xCBCE, 0x51BC}, //6233 #CJK UNIFIED IDEOGRAPH + {0xCBCF, 0x51BE}, //6234 #CJK UNIFIED IDEOGRAPH + {0xCBD0, 0x5235}, //6235 #CJK UNIFIED IDEOGRAPH + {0xCBD1, 0x5232}, //6236 #CJK UNIFIED IDEOGRAPH + {0xCBD2, 0x5233}, //6237 #CJK UNIFIED IDEOGRAPH + {0xCBD3, 0x5246}, //6238 #CJK UNIFIED IDEOGRAPH + {0xCBD4, 0x5231}, //6239 #CJK UNIFIED IDEOGRAPH + {0xCBD5, 0x52BC}, //6240 #CJK UNIFIED IDEOGRAPH + {0xCBD6, 0x530A}, //6241 #CJK UNIFIED IDEOGRAPH + {0xCBD7, 0x530B}, //6242 #CJK UNIFIED IDEOGRAPH + {0xCBD8, 0x533C}, //6243 #CJK UNIFIED IDEOGRAPH + {0xCBD9, 0x5392}, //6244 #CJK UNIFIED IDEOGRAPH + {0xCBDA, 0x5394}, //6245 #CJK UNIFIED IDEOGRAPH + {0xCBDB, 0x5487}, //6246 #CJK UNIFIED IDEOGRAPH + {0xCBDC, 0x547F}, //6247 #CJK UNIFIED IDEOGRAPH + {0xCBDD, 0x5481}, //6248 #CJK UNIFIED IDEOGRAPH + {0xCBDE, 0x5491}, //6249 #CJK UNIFIED IDEOGRAPH + {0xCBDF, 0x5482}, //6250 #CJK UNIFIED IDEOGRAPH + {0xCBE0, 0x5488}, //6251 #CJK UNIFIED IDEOGRAPH + {0xCBE1, 0x546B}, //6252 #CJK UNIFIED IDEOGRAPH + {0xCBE2, 0x547A}, //6253 #CJK UNIFIED IDEOGRAPH + {0xCBE3, 0x547E}, //6254 #CJK UNIFIED IDEOGRAPH + {0xCBE4, 0x5465}, //6255 #CJK UNIFIED IDEOGRAPH + {0xCBE5, 0x546C}, //6256 #CJK UNIFIED IDEOGRAPH + {0xCBE6, 0x5474}, //6257 #CJK UNIFIED IDEOGRAPH + {0xCBE7, 0x5466}, //6258 #CJK UNIFIED IDEOGRAPH + {0xCBE8, 0x548D}, //6259 #CJK UNIFIED IDEOGRAPH + {0xCBE9, 0x546F}, //6260 #CJK UNIFIED IDEOGRAPH + {0xCBEA, 0x5461}, //6261 #CJK UNIFIED IDEOGRAPH + {0xCBEB, 0x5460}, //6262 #CJK UNIFIED IDEOGRAPH + {0xCBEC, 0x5498}, //6263 #CJK UNIFIED IDEOGRAPH + {0xCBED, 0x5463}, //6264 #CJK UNIFIED IDEOGRAPH + {0xCBEE, 0x5467}, //6265 #CJK UNIFIED IDEOGRAPH + {0xCBEF, 0x5464}, //6266 #CJK UNIFIED IDEOGRAPH + {0xCBF0, 0x56F7}, //6267 #CJK UNIFIED IDEOGRAPH + {0xCBF1, 0x56F9}, //6268 #CJK UNIFIED IDEOGRAPH + {0xCBF2, 0x576F}, //6269 #CJK UNIFIED IDEOGRAPH + {0xCBF3, 0x5772}, //6270 #CJK UNIFIED IDEOGRAPH + {0xCBF4, 0x576D}, //6271 #CJK UNIFIED IDEOGRAPH + {0xCBF5, 0x576B}, //6272 #CJK UNIFIED IDEOGRAPH + {0xCBF6, 0x5771}, //6273 #CJK UNIFIED IDEOGRAPH + {0xCBF7, 0x5770}, //6274 #CJK UNIFIED IDEOGRAPH + {0xCBF8, 0x5776}, //6275 #CJK UNIFIED IDEOGRAPH + {0xCBF9, 0x5780}, //6276 #CJK UNIFIED IDEOGRAPH + {0xCBFA, 0x5775}, //6277 #CJK UNIFIED IDEOGRAPH + {0xCBFB, 0x577B}, //6278 #CJK UNIFIED IDEOGRAPH + {0xCBFC, 0x5773}, //6279 #CJK UNIFIED IDEOGRAPH + {0xCBFD, 0x5774}, //6280 #CJK UNIFIED IDEOGRAPH + {0xCBFE, 0x5762}, //6281 #CJK UNIFIED IDEOGRAPH + {0xCC40, 0x5768}, //6282 #CJK UNIFIED IDEOGRAPH + {0xCC41, 0x577D}, //6283 #CJK UNIFIED IDEOGRAPH + {0xCC42, 0x590C}, //6284 #CJK UNIFIED IDEOGRAPH + {0xCC43, 0x5945}, //6285 #CJK UNIFIED IDEOGRAPH + {0xCC44, 0x59B5}, //6286 #CJK UNIFIED IDEOGRAPH + {0xCC45, 0x59BA}, //6287 #CJK UNIFIED IDEOGRAPH + {0xCC46, 0x59CF}, //6288 #CJK UNIFIED IDEOGRAPH + {0xCC47, 0x59CE}, //6289 #CJK UNIFIED IDEOGRAPH + {0xCC48, 0x59B2}, //6290 #CJK UNIFIED IDEOGRAPH + {0xCC49, 0x59CC}, //6291 #CJK UNIFIED IDEOGRAPH + {0xCC4A, 0x59C1}, //6292 #CJK UNIFIED IDEOGRAPH + {0xCC4B, 0x59B6}, //6293 #CJK UNIFIED IDEOGRAPH + {0xCC4C, 0x59BC}, //6294 #CJK UNIFIED IDEOGRAPH + {0xCC4D, 0x59C3}, //6295 #CJK UNIFIED IDEOGRAPH + {0xCC4E, 0x59D6}, //6296 #CJK UNIFIED IDEOGRAPH + {0xCC4F, 0x59B1}, //6297 #CJK UNIFIED IDEOGRAPH + {0xCC50, 0x59BD}, //6298 #CJK UNIFIED IDEOGRAPH + {0xCC51, 0x59C0}, //6299 #CJK UNIFIED IDEOGRAPH + {0xCC52, 0x59C8}, //6300 #CJK UNIFIED IDEOGRAPH + {0xCC53, 0x59B4}, //6301 #CJK UNIFIED IDEOGRAPH + {0xCC54, 0x59C7}, //6302 #CJK UNIFIED IDEOGRAPH + {0xCC55, 0x5B62}, //6303 #CJK UNIFIED IDEOGRAPH + {0xCC56, 0x5B65}, //6304 #CJK UNIFIED IDEOGRAPH + {0xCC57, 0x5B93}, //6305 #CJK UNIFIED IDEOGRAPH + {0xCC58, 0x5B95}, //6306 #CJK UNIFIED IDEOGRAPH + {0xCC59, 0x5C44}, //6307 #CJK UNIFIED IDEOGRAPH + {0xCC5A, 0x5C47}, //6308 #CJK UNIFIED IDEOGRAPH + {0xCC5B, 0x5CAE}, //6309 #CJK UNIFIED IDEOGRAPH + {0xCC5C, 0x5CA4}, //6310 #CJK UNIFIED IDEOGRAPH + {0xCC5D, 0x5CA0}, //6311 #CJK UNIFIED IDEOGRAPH + {0xCC5E, 0x5CB5}, //6312 #CJK UNIFIED IDEOGRAPH + {0xCC5F, 0x5CAF}, //6313 #CJK UNIFIED IDEOGRAPH + {0xCC60, 0x5CA8}, //6314 #CJK UNIFIED IDEOGRAPH + {0xCC61, 0x5CAC}, //6315 #CJK UNIFIED IDEOGRAPH + {0xCC62, 0x5C9F}, //6316 #CJK UNIFIED IDEOGRAPH + {0xCC63, 0x5CA3}, //6317 #CJK UNIFIED IDEOGRAPH + {0xCC64, 0x5CAD}, //6318 #CJK UNIFIED IDEOGRAPH + {0xCC65, 0x5CA2}, //6319 #CJK UNIFIED IDEOGRAPH + {0xCC66, 0x5CAA}, //6320 #CJK UNIFIED IDEOGRAPH + {0xCC67, 0x5CA7}, //6321 #CJK UNIFIED IDEOGRAPH + {0xCC68, 0x5C9D}, //6322 #CJK UNIFIED IDEOGRAPH + {0xCC69, 0x5CA5}, //6323 #CJK UNIFIED IDEOGRAPH + {0xCC6A, 0x5CB6}, //6324 #CJK UNIFIED IDEOGRAPH + {0xCC6B, 0x5CB0}, //6325 #CJK UNIFIED IDEOGRAPH + {0xCC6C, 0x5CA6}, //6326 #CJK UNIFIED IDEOGRAPH + {0xCC6D, 0x5E17}, //6327 #CJK UNIFIED IDEOGRAPH + {0xCC6E, 0x5E14}, //6328 #CJK UNIFIED IDEOGRAPH + {0xCC6F, 0x5E19}, //6329 #CJK UNIFIED IDEOGRAPH + {0xCC70, 0x5F28}, //6330 #CJK UNIFIED IDEOGRAPH + {0xCC71, 0x5F22}, //6331 #CJK UNIFIED IDEOGRAPH + {0xCC72, 0x5F23}, //6332 #CJK UNIFIED IDEOGRAPH + {0xCC73, 0x5F24}, //6333 #CJK UNIFIED IDEOGRAPH + {0xCC74, 0x5F54}, //6334 #CJK UNIFIED IDEOGRAPH + {0xCC75, 0x5F82}, //6335 #CJK UNIFIED IDEOGRAPH + {0xCC76, 0x5F7E}, //6336 #CJK UNIFIED IDEOGRAPH + {0xCC77, 0x5F7D}, //6337 #CJK UNIFIED IDEOGRAPH + {0xCC78, 0x5FDE}, //6338 #CJK UNIFIED IDEOGRAPH + {0xCC79, 0x5FE5}, //6339 #CJK UNIFIED IDEOGRAPH + {0xCC7A, 0x602D}, //6340 #CJK UNIFIED IDEOGRAPH + {0xCC7B, 0x6026}, //6341 #CJK UNIFIED IDEOGRAPH + {0xCC7C, 0x6019}, //6342 #CJK UNIFIED IDEOGRAPH + {0xCC7D, 0x6032}, //6343 #CJK UNIFIED IDEOGRAPH + {0xCC7E, 0x600B}, //6344 #CJK UNIFIED IDEOGRAPH + {0xCCA1, 0x6034}, //6345 #CJK UNIFIED IDEOGRAPH + {0xCCA2, 0x600A}, //6346 #CJK UNIFIED IDEOGRAPH + {0xCCA3, 0x6017}, //6347 #CJK UNIFIED IDEOGRAPH + {0xCCA4, 0x6033}, //6348 #CJK UNIFIED IDEOGRAPH + {0xCCA5, 0x601A}, //6349 #CJK UNIFIED IDEOGRAPH + {0xCCA6, 0x601E}, //6350 #CJK UNIFIED IDEOGRAPH + {0xCCA7, 0x602C}, //6351 #CJK UNIFIED IDEOGRAPH + {0xCCA8, 0x6022}, //6352 #CJK UNIFIED IDEOGRAPH + {0xCCA9, 0x600D}, //6353 #CJK UNIFIED IDEOGRAPH + {0xCCAA, 0x6010}, //6354 #CJK UNIFIED IDEOGRAPH + {0xCCAB, 0x602E}, //6355 #CJK UNIFIED IDEOGRAPH + {0xCCAC, 0x6013}, //6356 #CJK UNIFIED IDEOGRAPH + {0xCCAD, 0x6011}, //6357 #CJK UNIFIED IDEOGRAPH + {0xCCAE, 0x600C}, //6358 #CJK UNIFIED IDEOGRAPH + {0xCCAF, 0x6009}, //6359 #CJK UNIFIED IDEOGRAPH + {0xCCB0, 0x601C}, //6360 #CJK UNIFIED IDEOGRAPH + {0xCCB1, 0x6214}, //6361 #CJK UNIFIED IDEOGRAPH + {0xCCB2, 0x623D}, //6362 #CJK UNIFIED IDEOGRAPH + {0xCCB3, 0x62AD}, //6363 #CJK UNIFIED IDEOGRAPH + {0xCCB4, 0x62B4}, //6364 #CJK UNIFIED IDEOGRAPH + {0xCCB5, 0x62D1}, //6365 #CJK UNIFIED IDEOGRAPH + {0xCCB6, 0x62BE}, //6366 #CJK UNIFIED IDEOGRAPH + {0xCCB7, 0x62AA}, //6367 #CJK UNIFIED IDEOGRAPH + {0xCCB8, 0x62B6}, //6368 #CJK UNIFIED IDEOGRAPH + {0xCCB9, 0x62CA}, //6369 #CJK UNIFIED IDEOGRAPH + {0xCCBA, 0x62AE}, //6370 #CJK UNIFIED IDEOGRAPH + {0xCCBB, 0x62B3}, //6371 #CJK UNIFIED IDEOGRAPH + {0xCCBC, 0x62AF}, //6372 #CJK UNIFIED IDEOGRAPH + {0xCCBD, 0x62BB}, //6373 #CJK UNIFIED IDEOGRAPH + {0xCCBE, 0x62A9}, //6374 #CJK UNIFIED IDEOGRAPH + {0xCCBF, 0x62B0}, //6375 #CJK UNIFIED IDEOGRAPH + {0xCCC0, 0x62B8}, //6376 #CJK UNIFIED IDEOGRAPH + {0xCCC1, 0x653D}, //6377 #CJK UNIFIED IDEOGRAPH + {0xCCC2, 0x65A8}, //6378 #CJK UNIFIED IDEOGRAPH + {0xCCC3, 0x65BB}, //6379 #CJK UNIFIED IDEOGRAPH + {0xCCC4, 0x6609}, //6380 #CJK UNIFIED IDEOGRAPH + {0xCCC5, 0x65FC}, //6381 #CJK UNIFIED IDEOGRAPH + {0xCCC6, 0x6604}, //6382 #CJK UNIFIED IDEOGRAPH + {0xCCC7, 0x6612}, //6383 #CJK UNIFIED IDEOGRAPH + {0xCCC8, 0x6608}, //6384 #CJK UNIFIED IDEOGRAPH + {0xCCC9, 0x65FB}, //6385 #CJK UNIFIED IDEOGRAPH + {0xCCCA, 0x6603}, //6386 #CJK UNIFIED IDEOGRAPH + {0xCCCB, 0x660B}, //6387 #CJK UNIFIED IDEOGRAPH + {0xCCCC, 0x660D}, //6388 #CJK UNIFIED IDEOGRAPH + {0xCCCD, 0x6605}, //6389 #CJK UNIFIED IDEOGRAPH + {0xCCCE, 0x65FD}, //6390 #CJK UNIFIED IDEOGRAPH + {0xCCCF, 0x6611}, //6391 #CJK UNIFIED IDEOGRAPH + {0xCCD0, 0x6610}, //6392 #CJK UNIFIED IDEOGRAPH + {0xCCD1, 0x66F6}, //6393 #CJK UNIFIED IDEOGRAPH + {0xCCD2, 0x670A}, //6394 #CJK UNIFIED IDEOGRAPH + {0xCCD3, 0x6785}, //6395 #CJK UNIFIED IDEOGRAPH + {0xCCD4, 0x676C}, //6396 #CJK UNIFIED IDEOGRAPH + {0xCCD5, 0x678E}, //6397 #CJK UNIFIED IDEOGRAPH + {0xCCD6, 0x6792}, //6398 #CJK UNIFIED IDEOGRAPH + {0xCCD7, 0x6776}, //6399 #CJK UNIFIED IDEOGRAPH + {0xCCD8, 0x677B}, //6400 #CJK UNIFIED IDEOGRAPH + {0xCCD9, 0x6798}, //6401 #CJK UNIFIED IDEOGRAPH + {0xCCDA, 0x6786}, //6402 #CJK UNIFIED IDEOGRAPH + {0xCCDB, 0x6784}, //6403 #CJK UNIFIED IDEOGRAPH + {0xCCDC, 0x6774}, //6404 #CJK UNIFIED IDEOGRAPH + {0xCCDD, 0x678D}, //6405 #CJK UNIFIED IDEOGRAPH + {0xCCDE, 0x678C}, //6406 #CJK UNIFIED IDEOGRAPH + {0xCCDF, 0x677A}, //6407 #CJK UNIFIED IDEOGRAPH + {0xCCE0, 0x679F}, //6408 #CJK UNIFIED IDEOGRAPH + {0xCCE1, 0x6791}, //6409 #CJK UNIFIED IDEOGRAPH + {0xCCE2, 0x6799}, //6410 #CJK UNIFIED IDEOGRAPH + {0xCCE3, 0x6783}, //6411 #CJK UNIFIED IDEOGRAPH + {0xCCE4, 0x677D}, //6412 #CJK UNIFIED IDEOGRAPH + {0xCCE5, 0x6781}, //6413 #CJK UNIFIED IDEOGRAPH + {0xCCE6, 0x6778}, //6414 #CJK UNIFIED IDEOGRAPH + {0xCCE7, 0x6779}, //6415 #CJK UNIFIED IDEOGRAPH + {0xCCE8, 0x6794}, //6416 #CJK UNIFIED IDEOGRAPH + {0xCCE9, 0x6B25}, //6417 #CJK UNIFIED IDEOGRAPH + {0xCCEA, 0x6B80}, //6418 #CJK UNIFIED IDEOGRAPH + {0xCCEB, 0x6B7E}, //6419 #CJK UNIFIED IDEOGRAPH + {0xCCEC, 0x6BDE}, //6420 #CJK UNIFIED IDEOGRAPH + {0xCCED, 0x6C1D}, //6421 #CJK UNIFIED IDEOGRAPH + {0xCCEE, 0x6C93}, //6422 #CJK UNIFIED IDEOGRAPH + {0xCCEF, 0x6CEC}, //6423 #CJK UNIFIED IDEOGRAPH + {0xCCF0, 0x6CEB}, //6424 #CJK UNIFIED IDEOGRAPH + {0xCCF1, 0x6CEE}, //6425 #CJK UNIFIED IDEOGRAPH + {0xCCF2, 0x6CD9}, //6426 #CJK UNIFIED IDEOGRAPH + {0xCCF3, 0x6CB6}, //6427 #CJK UNIFIED IDEOGRAPH + {0xCCF4, 0x6CD4}, //6428 #CJK UNIFIED IDEOGRAPH + {0xCCF5, 0x6CAD}, //6429 #CJK UNIFIED IDEOGRAPH + {0xCCF6, 0x6CE7}, //6430 #CJK UNIFIED IDEOGRAPH + {0xCCF7, 0x6CB7}, //6431 #CJK UNIFIED IDEOGRAPH + {0xCCF8, 0x6CD0}, //6432 #CJK UNIFIED IDEOGRAPH + {0xCCF9, 0x6CC2}, //6433 #CJK UNIFIED IDEOGRAPH + {0xCCFA, 0x6CBA}, //6434 #CJK UNIFIED IDEOGRAPH + {0xCCFB, 0x6CC3}, //6435 #CJK UNIFIED IDEOGRAPH + {0xCCFC, 0x6CC6}, //6436 #CJK UNIFIED IDEOGRAPH + {0xCCFD, 0x6CED}, //6437 #CJK UNIFIED IDEOGRAPH + {0xCCFE, 0x6CF2}, //6438 #CJK UNIFIED IDEOGRAPH + {0xCD40, 0x6CD2}, //6439 #CJK UNIFIED IDEOGRAPH + {0xCD41, 0x6CDD}, //6440 #CJK UNIFIED IDEOGRAPH + {0xCD42, 0x6CB4}, //6441 #CJK UNIFIED IDEOGRAPH + {0xCD43, 0x6C8A}, //6442 #CJK UNIFIED IDEOGRAPH + {0xCD44, 0x6C9D}, //6443 #CJK UNIFIED IDEOGRAPH + {0xCD45, 0x6C80}, //6444 #CJK UNIFIED IDEOGRAPH + {0xCD46, 0x6CDE}, //6445 #CJK UNIFIED IDEOGRAPH + {0xCD47, 0x6CC0}, //6446 #CJK UNIFIED IDEOGRAPH + {0xCD48, 0x6D30}, //6447 #CJK UNIFIED IDEOGRAPH + {0xCD49, 0x6CCD}, //6448 #CJK UNIFIED IDEOGRAPH + {0xCD4A, 0x6CC7}, //6449 #CJK UNIFIED IDEOGRAPH + {0xCD4B, 0x6CB0}, //6450 #CJK UNIFIED IDEOGRAPH + {0xCD4C, 0x6CF9}, //6451 #CJK UNIFIED IDEOGRAPH + {0xCD4D, 0x6CCF}, //6452 #CJK UNIFIED IDEOGRAPH + {0xCD4E, 0x6CE9}, //6453 #CJK UNIFIED IDEOGRAPH + {0xCD4F, 0x6CD1}, //6454 #CJK UNIFIED IDEOGRAPH + {0xCD50, 0x7094}, //6455 #CJK UNIFIED IDEOGRAPH + {0xCD51, 0x7098}, //6456 #CJK UNIFIED IDEOGRAPH + {0xCD52, 0x7085}, //6457 #CJK UNIFIED IDEOGRAPH + {0xCD53, 0x7093}, //6458 #CJK UNIFIED IDEOGRAPH + {0xCD54, 0x7086}, //6459 #CJK UNIFIED IDEOGRAPH + {0xCD55, 0x7084}, //6460 #CJK UNIFIED IDEOGRAPH + {0xCD56, 0x7091}, //6461 #CJK UNIFIED IDEOGRAPH + {0xCD57, 0x7096}, //6462 #CJK UNIFIED IDEOGRAPH + {0xCD58, 0x7082}, //6463 #CJK UNIFIED IDEOGRAPH + {0xCD59, 0x709A}, //6464 #CJK UNIFIED IDEOGRAPH + {0xCD5A, 0x7083}, //6465 #CJK UNIFIED IDEOGRAPH + {0xCD5B, 0x726A}, //6466 #CJK UNIFIED IDEOGRAPH + {0xCD5C, 0x72D6}, //6467 #CJK UNIFIED IDEOGRAPH + {0xCD5D, 0x72CB}, //6468 #CJK UNIFIED IDEOGRAPH + {0xCD5E, 0x72D8}, //6469 #CJK UNIFIED IDEOGRAPH + {0xCD5F, 0x72C9}, //6470 #CJK UNIFIED IDEOGRAPH + {0xCD60, 0x72DC}, //6471 #CJK UNIFIED IDEOGRAPH + {0xCD61, 0x72D2}, //6472 #CJK UNIFIED IDEOGRAPH + {0xCD62, 0x72D4}, //6473 #CJK UNIFIED IDEOGRAPH + {0xCD63, 0x72DA}, //6474 #CJK UNIFIED IDEOGRAPH + {0xCD64, 0x72CC}, //6475 #CJK UNIFIED IDEOGRAPH + {0xCD65, 0x72D1}, //6476 #CJK UNIFIED IDEOGRAPH + {0xCD66, 0x73A4}, //6477 #CJK UNIFIED IDEOGRAPH + {0xCD67, 0x73A1}, //6478 #CJK UNIFIED IDEOGRAPH + {0xCD68, 0x73AD}, //6479 #CJK UNIFIED IDEOGRAPH + {0xCD69, 0x73A6}, //6480 #CJK UNIFIED IDEOGRAPH + {0xCD6A, 0x73A2}, //6481 #CJK UNIFIED IDEOGRAPH + {0xCD6B, 0x73A0}, //6482 #CJK UNIFIED IDEOGRAPH + {0xCD6C, 0x73AC}, //6483 #CJK UNIFIED IDEOGRAPH + {0xCD6D, 0x739D}, //6484 #CJK UNIFIED IDEOGRAPH + {0xCD6E, 0x74DD}, //6485 #CJK UNIFIED IDEOGRAPH + {0xCD6F, 0x74E8}, //6486 #CJK UNIFIED IDEOGRAPH + {0xCD70, 0x753F}, //6487 #CJK UNIFIED IDEOGRAPH + {0xCD71, 0x7540}, //6488 #CJK UNIFIED IDEOGRAPH + {0xCD72, 0x753E}, //6489 #CJK UNIFIED IDEOGRAPH + {0xCD73, 0x758C}, //6490 #CJK UNIFIED IDEOGRAPH + {0xCD74, 0x7598}, //6491 #CJK UNIFIED IDEOGRAPH + {0xCD75, 0x76AF}, //6492 #CJK UNIFIED IDEOGRAPH + {0xCD76, 0x76F3}, //6493 #CJK UNIFIED IDEOGRAPH + {0xCD77, 0x76F1}, //6494 #CJK UNIFIED IDEOGRAPH + {0xCD78, 0x76F0}, //6495 #CJK UNIFIED IDEOGRAPH + {0xCD79, 0x76F5}, //6496 #CJK UNIFIED IDEOGRAPH + {0xCD7A, 0x77F8}, //6497 #CJK UNIFIED IDEOGRAPH + {0xCD7B, 0x77FC}, //6498 #CJK UNIFIED IDEOGRAPH + {0xCD7C, 0x77F9}, //6499 #CJK UNIFIED IDEOGRAPH + {0xCD7D, 0x77FB}, //6500 #CJK UNIFIED IDEOGRAPH + {0xCD7E, 0x77FA}, //6501 #CJK UNIFIED IDEOGRAPH + {0xCDA1, 0x77F7}, //6502 #CJK UNIFIED IDEOGRAPH + {0xCDA2, 0x7942}, //6503 #CJK UNIFIED IDEOGRAPH + {0xCDA3, 0x793F}, //6504 #CJK UNIFIED IDEOGRAPH + {0xCDA4, 0x79C5}, //6505 #CJK UNIFIED IDEOGRAPH + {0xCDA5, 0x7A78}, //6506 #CJK UNIFIED IDEOGRAPH + {0xCDA6, 0x7A7B}, //6507 #CJK UNIFIED IDEOGRAPH + {0xCDA7, 0x7AFB}, //6508 #CJK UNIFIED IDEOGRAPH + {0xCDA8, 0x7C75}, //6509 #CJK UNIFIED IDEOGRAPH + {0xCDA9, 0x7CFD}, //6510 #CJK UNIFIED IDEOGRAPH + {0xCDAA, 0x8035}, //6511 #CJK UNIFIED IDEOGRAPH + {0xCDAB, 0x808F}, //6512 #CJK UNIFIED IDEOGRAPH + {0xCDAC, 0x80AE}, //6513 #CJK UNIFIED IDEOGRAPH + {0xCDAD, 0x80A3}, //6514 #CJK UNIFIED IDEOGRAPH + {0xCDAE, 0x80B8}, //6515 #CJK UNIFIED IDEOGRAPH + {0xCDAF, 0x80B5}, //6516 #CJK UNIFIED IDEOGRAPH + {0xCDB0, 0x80AD}, //6517 #CJK UNIFIED IDEOGRAPH + {0xCDB1, 0x8220}, //6518 #CJK UNIFIED IDEOGRAPH + {0xCDB2, 0x82A0}, //6519 #CJK UNIFIED IDEOGRAPH + {0xCDB3, 0x82C0}, //6520 #CJK UNIFIED IDEOGRAPH + {0xCDB4, 0x82AB}, //6521 #CJK UNIFIED IDEOGRAPH + {0xCDB5, 0x829A}, //6522 #CJK UNIFIED IDEOGRAPH + {0xCDB6, 0x8298}, //6523 #CJK UNIFIED IDEOGRAPH + {0xCDB7, 0x829B}, //6524 #CJK UNIFIED IDEOGRAPH + {0xCDB8, 0x82B5}, //6525 #CJK UNIFIED IDEOGRAPH + {0xCDB9, 0x82A7}, //6526 #CJK UNIFIED IDEOGRAPH + {0xCDBA, 0x82AE}, //6527 #CJK UNIFIED IDEOGRAPH + {0xCDBB, 0x82BC}, //6528 #CJK UNIFIED IDEOGRAPH + {0xCDBC, 0x829E}, //6529 #CJK UNIFIED IDEOGRAPH + {0xCDBD, 0x82BA}, //6530 #CJK UNIFIED IDEOGRAPH + {0xCDBE, 0x82B4}, //6531 #CJK UNIFIED IDEOGRAPH + {0xCDBF, 0x82A8}, //6532 #CJK UNIFIED IDEOGRAPH + {0xCDC0, 0x82A1}, //6533 #CJK UNIFIED IDEOGRAPH + {0xCDC1, 0x82A9}, //6534 #CJK UNIFIED IDEOGRAPH + {0xCDC2, 0x82C2}, //6535 #CJK UNIFIED IDEOGRAPH + {0xCDC3, 0x82A4}, //6536 #CJK UNIFIED IDEOGRAPH + {0xCDC4, 0x82C3}, //6537 #CJK UNIFIED IDEOGRAPH + {0xCDC5, 0x82B6}, //6538 #CJK UNIFIED IDEOGRAPH + {0xCDC6, 0x82A2}, //6539 #CJK UNIFIED IDEOGRAPH + {0xCDC7, 0x8670}, //6540 #CJK UNIFIED IDEOGRAPH + {0xCDC8, 0x866F}, //6541 #CJK UNIFIED IDEOGRAPH + {0xCDC9, 0x866D}, //6542 #CJK UNIFIED IDEOGRAPH + {0xCDCA, 0x866E}, //6543 #CJK UNIFIED IDEOGRAPH + {0xCDCB, 0x8C56}, //6544 #CJK UNIFIED IDEOGRAPH + {0xCDCC, 0x8FD2}, //6545 #CJK UNIFIED IDEOGRAPH + {0xCDCD, 0x8FCB}, //6546 #CJK UNIFIED IDEOGRAPH + {0xCDCE, 0x8FD3}, //6547 #CJK UNIFIED IDEOGRAPH + {0xCDCF, 0x8FCD}, //6548 #CJK UNIFIED IDEOGRAPH + {0xCDD0, 0x8FD6}, //6549 #CJK UNIFIED IDEOGRAPH + {0xCDD1, 0x8FD5}, //6550 #CJK UNIFIED IDEOGRAPH + {0xCDD2, 0x8FD7}, //6551 #CJK UNIFIED IDEOGRAPH + {0xCDD3, 0x90B2}, //6552 #CJK UNIFIED IDEOGRAPH + {0xCDD4, 0x90B4}, //6553 #CJK UNIFIED IDEOGRAPH + {0xCDD5, 0x90AF}, //6554 #CJK UNIFIED IDEOGRAPH + {0xCDD6, 0x90B3}, //6555 #CJK UNIFIED IDEOGRAPH + {0xCDD7, 0x90B0}, //6556 #CJK UNIFIED IDEOGRAPH + {0xCDD8, 0x9639}, //6557 #CJK UNIFIED IDEOGRAPH + {0xCDD9, 0x963D}, //6558 #CJK UNIFIED IDEOGRAPH + {0xCDDA, 0x963C}, //6559 #CJK UNIFIED IDEOGRAPH + {0xCDDB, 0x963A}, //6560 #CJK UNIFIED IDEOGRAPH + {0xCDDC, 0x9643}, //6561 #CJK UNIFIED IDEOGRAPH + {0xCDDD, 0x4FCD}, //6562 #CJK UNIFIED IDEOGRAPH + {0xCDDE, 0x4FC5}, //6563 #CJK UNIFIED IDEOGRAPH + {0xCDDF, 0x4FD3}, //6564 #CJK UNIFIED IDEOGRAPH + {0xCDE0, 0x4FB2}, //6565 #CJK UNIFIED IDEOGRAPH + {0xCDE1, 0x4FC9}, //6566 #CJK UNIFIED IDEOGRAPH + {0xCDE2, 0x4FCB}, //6567 #CJK UNIFIED IDEOGRAPH + {0xCDE3, 0x4FC1}, //6568 #CJK UNIFIED IDEOGRAPH + {0xCDE4, 0x4FD4}, //6569 #CJK UNIFIED IDEOGRAPH + {0xCDE5, 0x4FDC}, //6570 #CJK UNIFIED IDEOGRAPH + {0xCDE6, 0x4FD9}, //6571 #CJK UNIFIED IDEOGRAPH + {0xCDE7, 0x4FBB}, //6572 #CJK UNIFIED IDEOGRAPH + {0xCDE8, 0x4FB3}, //6573 #CJK UNIFIED IDEOGRAPH + {0xCDE9, 0x4FDB}, //6574 #CJK UNIFIED IDEOGRAPH + {0xCDEA, 0x4FC7}, //6575 #CJK UNIFIED IDEOGRAPH + {0xCDEB, 0x4FD6}, //6576 #CJK UNIFIED IDEOGRAPH + {0xCDEC, 0x4FBA}, //6577 #CJK UNIFIED IDEOGRAPH + {0xCDED, 0x4FC0}, //6578 #CJK UNIFIED IDEOGRAPH + {0xCDEE, 0x4FB9}, //6579 #CJK UNIFIED IDEOGRAPH + {0xCDEF, 0x4FEC}, //6580 #CJK UNIFIED IDEOGRAPH + {0xCDF0, 0x5244}, //6581 #CJK UNIFIED IDEOGRAPH + {0xCDF1, 0x5249}, //6582 #CJK UNIFIED IDEOGRAPH + {0xCDF2, 0x52C0}, //6583 #CJK UNIFIED IDEOGRAPH + {0xCDF3, 0x52C2}, //6584 #CJK UNIFIED IDEOGRAPH + {0xCDF4, 0x533D}, //6585 #CJK UNIFIED IDEOGRAPH + {0xCDF5, 0x537C}, //6586 #CJK UNIFIED IDEOGRAPH + {0xCDF6, 0x5397}, //6587 #CJK UNIFIED IDEOGRAPH + {0xCDF7, 0x5396}, //6588 #CJK UNIFIED IDEOGRAPH + {0xCDF8, 0x5399}, //6589 #CJK UNIFIED IDEOGRAPH + {0xCDF9, 0x5398}, //6590 #CJK UNIFIED IDEOGRAPH + {0xCDFA, 0x54BA}, //6591 #CJK UNIFIED IDEOGRAPH + {0xCDFB, 0x54A1}, //6592 #CJK UNIFIED IDEOGRAPH + {0xCDFC, 0x54AD}, //6593 #CJK UNIFIED IDEOGRAPH + {0xCDFD, 0x54A5}, //6594 #CJK UNIFIED IDEOGRAPH + {0xCDFE, 0x54CF}, //6595 #CJK UNIFIED IDEOGRAPH + {0xCE40, 0x54C3}, //6596 #CJK UNIFIED IDEOGRAPH + {0xCE41, 0x830D}, //6597 #CJK UNIFIED IDEOGRAPH + {0xCE42, 0x54B7}, //6598 #CJK UNIFIED IDEOGRAPH + {0xCE43, 0x54AE}, //6599 #CJK UNIFIED IDEOGRAPH + {0xCE44, 0x54D6}, //6600 #CJK UNIFIED IDEOGRAPH + {0xCE45, 0x54B6}, //6601 #CJK UNIFIED IDEOGRAPH + {0xCE46, 0x54C5}, //6602 #CJK UNIFIED IDEOGRAPH + {0xCE47, 0x54C6}, //6603 #CJK UNIFIED IDEOGRAPH + {0xCE48, 0x54A0}, //6604 #CJK UNIFIED IDEOGRAPH + {0xCE49, 0x5470}, //6605 #CJK UNIFIED IDEOGRAPH + {0xCE4A, 0x54BC}, //6606 #CJK UNIFIED IDEOGRAPH + {0xCE4B, 0x54A2}, //6607 #CJK UNIFIED IDEOGRAPH + {0xCE4C, 0x54BE}, //6608 #CJK UNIFIED IDEOGRAPH + {0xCE4D, 0x5472}, //6609 #CJK UNIFIED IDEOGRAPH + {0xCE4E, 0x54DE}, //6610 #CJK UNIFIED IDEOGRAPH + {0xCE4F, 0x54B0}, //6611 #CJK UNIFIED IDEOGRAPH + {0xCE50, 0x57B5}, //6612 #CJK UNIFIED IDEOGRAPH + {0xCE51, 0x579E}, //6613 #CJK UNIFIED IDEOGRAPH + {0xCE52, 0x579F}, //6614 #CJK UNIFIED IDEOGRAPH + {0xCE53, 0x57A4}, //6615 #CJK UNIFIED IDEOGRAPH + {0xCE54, 0x578C}, //6616 #CJK UNIFIED IDEOGRAPH + {0xCE55, 0x5797}, //6617 #CJK UNIFIED IDEOGRAPH + {0xCE56, 0x579D}, //6618 #CJK UNIFIED IDEOGRAPH + {0xCE57, 0x579B}, //6619 #CJK UNIFIED IDEOGRAPH + {0xCE58, 0x5794}, //6620 #CJK UNIFIED IDEOGRAPH + {0xCE59, 0x5798}, //6621 #CJK UNIFIED IDEOGRAPH + {0xCE5A, 0x578F}, //6622 #CJK UNIFIED IDEOGRAPH + {0xCE5B, 0x5799}, //6623 #CJK UNIFIED IDEOGRAPH + {0xCE5C, 0x57A5}, //6624 #CJK UNIFIED IDEOGRAPH + {0xCE5D, 0x579A}, //6625 #CJK UNIFIED IDEOGRAPH + {0xCE5E, 0x5795}, //6626 #CJK UNIFIED IDEOGRAPH + {0xCE5F, 0x58F4}, //6627 #CJK UNIFIED IDEOGRAPH + {0xCE60, 0x590D}, //6628 #CJK UNIFIED IDEOGRAPH + {0xCE61, 0x5953}, //6629 #CJK UNIFIED IDEOGRAPH + {0xCE62, 0x59E1}, //6630 #CJK UNIFIED IDEOGRAPH + {0xCE63, 0x59DE}, //6631 #CJK UNIFIED IDEOGRAPH + {0xCE64, 0x59EE}, //6632 #CJK UNIFIED IDEOGRAPH + {0xCE65, 0x5A00}, //6633 #CJK UNIFIED IDEOGRAPH + {0xCE66, 0x59F1}, //6634 #CJK UNIFIED IDEOGRAPH + {0xCE67, 0x59DD}, //6635 #CJK UNIFIED IDEOGRAPH + {0xCE68, 0x59FA}, //6636 #CJK UNIFIED IDEOGRAPH + {0xCE69, 0x59FD}, //6637 #CJK UNIFIED IDEOGRAPH + {0xCE6A, 0x59FC}, //6638 #CJK UNIFIED IDEOGRAPH + {0xCE6B, 0x59F6}, //6639 #CJK UNIFIED IDEOGRAPH + {0xCE6C, 0x59E4}, //6640 #CJK UNIFIED IDEOGRAPH + {0xCE6D, 0x59F2}, //6641 #CJK UNIFIED IDEOGRAPH + {0xCE6E, 0x59F7}, //6642 #CJK UNIFIED IDEOGRAPH + {0xCE6F, 0x59DB}, //6643 #CJK UNIFIED IDEOGRAPH + {0xCE70, 0x59E9}, //6644 #CJK UNIFIED IDEOGRAPH + {0xCE71, 0x59F3}, //6645 #CJK UNIFIED IDEOGRAPH + {0xCE72, 0x59F5}, //6646 #CJK UNIFIED IDEOGRAPH + {0xCE73, 0x59E0}, //6647 #CJK UNIFIED IDEOGRAPH + {0xCE74, 0x59FE}, //6648 #CJK UNIFIED IDEOGRAPH + {0xCE75, 0x59F4}, //6649 #CJK UNIFIED IDEOGRAPH + {0xCE76, 0x59ED}, //6650 #CJK UNIFIED IDEOGRAPH + {0xCE77, 0x5BA8}, //6651 #CJK UNIFIED IDEOGRAPH + {0xCE78, 0x5C4C}, //6652 #CJK UNIFIED IDEOGRAPH + {0xCE79, 0x5CD0}, //6653 #CJK UNIFIED IDEOGRAPH + {0xCE7A, 0x5CD8}, //6654 #CJK UNIFIED IDEOGRAPH + {0xCE7B, 0x5CCC}, //6655 #CJK UNIFIED IDEOGRAPH + {0xCE7C, 0x5CD7}, //6656 #CJK UNIFIED IDEOGRAPH + {0xCE7D, 0x5CCB}, //6657 #CJK UNIFIED IDEOGRAPH + {0xCE7E, 0x5CDB}, //6658 #CJK UNIFIED IDEOGRAPH + {0xCEA1, 0x5CDE}, //6659 #CJK UNIFIED IDEOGRAPH + {0xCEA2, 0x5CDA}, //6660 #CJK UNIFIED IDEOGRAPH + {0xCEA3, 0x5CC9}, //6661 #CJK UNIFIED IDEOGRAPH + {0xCEA4, 0x5CC7}, //6662 #CJK UNIFIED IDEOGRAPH + {0xCEA5, 0x5CCA}, //6663 #CJK UNIFIED IDEOGRAPH + {0xCEA6, 0x5CD6}, //6664 #CJK UNIFIED IDEOGRAPH + {0xCEA7, 0x5CD3}, //6665 #CJK UNIFIED IDEOGRAPH + {0xCEA8, 0x5CD4}, //6666 #CJK UNIFIED IDEOGRAPH + {0xCEA9, 0x5CCF}, //6667 #CJK UNIFIED IDEOGRAPH + {0xCEAA, 0x5CC8}, //6668 #CJK UNIFIED IDEOGRAPH + {0xCEAB, 0x5CC6}, //6669 #CJK UNIFIED IDEOGRAPH + {0xCEAC, 0x5CCE}, //6670 #CJK UNIFIED IDEOGRAPH + {0xCEAD, 0x5CDF}, //6671 #CJK UNIFIED IDEOGRAPH + {0xCEAE, 0x5CF8}, //6672 #CJK UNIFIED IDEOGRAPH + {0xCEAF, 0x5DF9}, //6673 #CJK UNIFIED IDEOGRAPH + {0xCEB0, 0x5E21}, //6674 #CJK UNIFIED IDEOGRAPH + {0xCEB1, 0x5E22}, //6675 #CJK UNIFIED IDEOGRAPH + {0xCEB2, 0x5E23}, //6676 #CJK UNIFIED IDEOGRAPH + {0xCEB3, 0x5E20}, //6677 #CJK UNIFIED IDEOGRAPH + {0xCEB4, 0x5E24}, //6678 #CJK UNIFIED IDEOGRAPH + {0xCEB5, 0x5EB0}, //6679 #CJK UNIFIED IDEOGRAPH + {0xCEB6, 0x5EA4}, //6680 #CJK UNIFIED IDEOGRAPH + {0xCEB7, 0x5EA2}, //6681 #CJK UNIFIED IDEOGRAPH + {0xCEB8, 0x5E9B}, //6682 #CJK UNIFIED IDEOGRAPH + {0xCEB9, 0x5EA3}, //6683 #CJK UNIFIED IDEOGRAPH + {0xCEBA, 0x5EA5}, //6684 #CJK UNIFIED IDEOGRAPH + {0xCEBB, 0x5F07}, //6685 #CJK UNIFIED IDEOGRAPH + {0xCEBC, 0x5F2E}, //6686 #CJK UNIFIED IDEOGRAPH + {0xCEBD, 0x5F56}, //6687 #CJK UNIFIED IDEOGRAPH + {0xCEBE, 0x5F86}, //6688 #CJK UNIFIED IDEOGRAPH + {0xCEBF, 0x6037}, //6689 #CJK UNIFIED IDEOGRAPH + {0xCEC0, 0x6039}, //6690 #CJK UNIFIED IDEOGRAPH + {0xCEC1, 0x6054}, //6691 #CJK UNIFIED IDEOGRAPH + {0xCEC2, 0x6072}, //6692 #CJK UNIFIED IDEOGRAPH + {0xCEC3, 0x605E}, //6693 #CJK UNIFIED IDEOGRAPH + {0xCEC4, 0x6045}, //6694 #CJK UNIFIED IDEOGRAPH + {0xCEC5, 0x6053}, //6695 #CJK UNIFIED IDEOGRAPH + {0xCEC6, 0x6047}, //6696 #CJK UNIFIED IDEOGRAPH + {0xCEC7, 0x6049}, //6697 #CJK UNIFIED IDEOGRAPH + {0xCEC8, 0x605B}, //6698 #CJK UNIFIED IDEOGRAPH + {0xCEC9, 0x604C}, //6699 #CJK UNIFIED IDEOGRAPH + {0xCECA, 0x6040}, //6700 #CJK UNIFIED IDEOGRAPH + {0xCECB, 0x6042}, //6701 #CJK UNIFIED IDEOGRAPH + {0xCECC, 0x605F}, //6702 #CJK UNIFIED IDEOGRAPH + {0xCECD, 0x6024}, //6703 #CJK UNIFIED IDEOGRAPH + {0xCECE, 0x6044}, //6704 #CJK UNIFIED IDEOGRAPH + {0xCECF, 0x6058}, //6705 #CJK UNIFIED IDEOGRAPH + {0xCED0, 0x6066}, //6706 #CJK UNIFIED IDEOGRAPH + {0xCED1, 0x606E}, //6707 #CJK UNIFIED IDEOGRAPH + {0xCED2, 0x6242}, //6708 #CJK UNIFIED IDEOGRAPH + {0xCED3, 0x6243}, //6709 #CJK UNIFIED IDEOGRAPH + {0xCED4, 0x62CF}, //6710 #CJK UNIFIED IDEOGRAPH + {0xCED5, 0x630D}, //6711 #CJK UNIFIED IDEOGRAPH + {0xCED6, 0x630B}, //6712 #CJK UNIFIED IDEOGRAPH + {0xCED7, 0x62F5}, //6713 #CJK UNIFIED IDEOGRAPH + {0xCED8, 0x630E}, //6714 #CJK UNIFIED IDEOGRAPH + {0xCED9, 0x6303}, //6715 #CJK UNIFIED IDEOGRAPH + {0xCEDA, 0x62EB}, //6716 #CJK UNIFIED IDEOGRAPH + {0xCEDB, 0x62F9}, //6717 #CJK UNIFIED IDEOGRAPH + {0xCEDC, 0x630F}, //6718 #CJK UNIFIED IDEOGRAPH + {0xCEDD, 0x630C}, //6719 #CJK UNIFIED IDEOGRAPH + {0xCEDE, 0x62F8}, //6720 #CJK UNIFIED IDEOGRAPH + {0xCEDF, 0x62F6}, //6721 #CJK UNIFIED IDEOGRAPH + {0xCEE0, 0x6300}, //6722 #CJK UNIFIED IDEOGRAPH + {0xCEE1, 0x6313}, //6723 #CJK UNIFIED IDEOGRAPH + {0xCEE2, 0x6314}, //6724 #CJK UNIFIED IDEOGRAPH + {0xCEE3, 0x62FA}, //6725 #CJK UNIFIED IDEOGRAPH + {0xCEE4, 0x6315}, //6726 #CJK UNIFIED IDEOGRAPH + {0xCEE5, 0x62FB}, //6727 #CJK UNIFIED IDEOGRAPH + {0xCEE6, 0x62F0}, //6728 #CJK UNIFIED IDEOGRAPH + {0xCEE7, 0x6541}, //6729 #CJK UNIFIED IDEOGRAPH + {0xCEE8, 0x6543}, //6730 #CJK UNIFIED IDEOGRAPH + {0xCEE9, 0x65AA}, //6731 #CJK UNIFIED IDEOGRAPH + {0xCEEA, 0x65BF}, //6732 #CJK UNIFIED IDEOGRAPH + {0xCEEB, 0x6636}, //6733 #CJK UNIFIED IDEOGRAPH + {0xCEEC, 0x6621}, //6734 #CJK UNIFIED IDEOGRAPH + {0xCEED, 0x6632}, //6735 #CJK UNIFIED IDEOGRAPH + {0xCEEE, 0x6635}, //6736 #CJK UNIFIED IDEOGRAPH + {0xCEEF, 0x661C}, //6737 #CJK UNIFIED IDEOGRAPH + {0xCEF0, 0x6626}, //6738 #CJK UNIFIED IDEOGRAPH + {0xCEF1, 0x6622}, //6739 #CJK UNIFIED IDEOGRAPH + {0xCEF2, 0x6633}, //6740 #CJK UNIFIED IDEOGRAPH + {0xCEF3, 0x662B}, //6741 #CJK UNIFIED IDEOGRAPH + {0xCEF4, 0x663A}, //6742 #CJK UNIFIED IDEOGRAPH + {0xCEF5, 0x661D}, //6743 #CJK UNIFIED IDEOGRAPH + {0xCEF6, 0x6634}, //6744 #CJK UNIFIED IDEOGRAPH + {0xCEF7, 0x6639}, //6745 #CJK UNIFIED IDEOGRAPH + {0xCEF8, 0x662E}, //6746 #CJK UNIFIED IDEOGRAPH + {0xCEF9, 0x670F}, //6747 #CJK UNIFIED IDEOGRAPH + {0xCEFA, 0x6710}, //6748 #CJK UNIFIED IDEOGRAPH + {0xCEFB, 0x67C1}, //6749 #CJK UNIFIED IDEOGRAPH + {0xCEFC, 0x67F2}, //6750 #CJK UNIFIED IDEOGRAPH + {0xCEFD, 0x67C8}, //6751 #CJK UNIFIED IDEOGRAPH + {0xCEFE, 0x67BA}, //6752 #CJK UNIFIED IDEOGRAPH + {0xCF40, 0x67DC}, //6753 #CJK UNIFIED IDEOGRAPH + {0xCF41, 0x67BB}, //6754 #CJK UNIFIED IDEOGRAPH + {0xCF42, 0x67F8}, //6755 #CJK UNIFIED IDEOGRAPH + {0xCF43, 0x67D8}, //6756 #CJK UNIFIED IDEOGRAPH + {0xCF44, 0x67C0}, //6757 #CJK UNIFIED IDEOGRAPH + {0xCF45, 0x67B7}, //6758 #CJK UNIFIED IDEOGRAPH + {0xCF46, 0x67C5}, //6759 #CJK UNIFIED IDEOGRAPH + {0xCF47, 0x67EB}, //6760 #CJK UNIFIED IDEOGRAPH + {0xCF48, 0x67E4}, //6761 #CJK UNIFIED IDEOGRAPH + {0xCF49, 0x67DF}, //6762 #CJK UNIFIED IDEOGRAPH + {0xCF4A, 0x67B5}, //6763 #CJK UNIFIED IDEOGRAPH + {0xCF4B, 0x67CD}, //6764 #CJK UNIFIED IDEOGRAPH + {0xCF4C, 0x67B3}, //6765 #CJK UNIFIED IDEOGRAPH + {0xCF4D, 0x67F7}, //6766 #CJK UNIFIED IDEOGRAPH + {0xCF4E, 0x67F6}, //6767 #CJK UNIFIED IDEOGRAPH + {0xCF4F, 0x67EE}, //6768 #CJK UNIFIED IDEOGRAPH + {0xCF50, 0x67E3}, //6769 #CJK UNIFIED IDEOGRAPH + {0xCF51, 0x67C2}, //6770 #CJK UNIFIED IDEOGRAPH + {0xCF52, 0x67B9}, //6771 #CJK UNIFIED IDEOGRAPH + {0xCF53, 0x67CE}, //6772 #CJK UNIFIED IDEOGRAPH + {0xCF54, 0x67E7}, //6773 #CJK UNIFIED IDEOGRAPH + {0xCF55, 0x67F0}, //6774 #CJK UNIFIED IDEOGRAPH + {0xCF56, 0x67B2}, //6775 #CJK UNIFIED IDEOGRAPH + {0xCF57, 0x67FC}, //6776 #CJK UNIFIED IDEOGRAPH + {0xCF58, 0x67C6}, //6777 #CJK UNIFIED IDEOGRAPH + {0xCF59, 0x67ED}, //6778 #CJK UNIFIED IDEOGRAPH + {0xCF5A, 0x67CC}, //6779 #CJK UNIFIED IDEOGRAPH + {0xCF5B, 0x67AE}, //6780 #CJK UNIFIED IDEOGRAPH + {0xCF5C, 0x67E6}, //6781 #CJK UNIFIED IDEOGRAPH + {0xCF5D, 0x67DB}, //6782 #CJK UNIFIED IDEOGRAPH + {0xCF5E, 0x67FA}, //6783 #CJK UNIFIED IDEOGRAPH + {0xCF5F, 0x67C9}, //6784 #CJK UNIFIED IDEOGRAPH + {0xCF60, 0x67CA}, //6785 #CJK UNIFIED IDEOGRAPH + {0xCF61, 0x67C3}, //6786 #CJK UNIFIED IDEOGRAPH + {0xCF62, 0x67EA}, //6787 #CJK UNIFIED IDEOGRAPH + {0xCF63, 0x67CB}, //6788 #CJK UNIFIED IDEOGRAPH + {0xCF64, 0x6B28}, //6789 #CJK UNIFIED IDEOGRAPH + {0xCF65, 0x6B82}, //6790 #CJK UNIFIED IDEOGRAPH + {0xCF66, 0x6B84}, //6791 #CJK UNIFIED IDEOGRAPH + {0xCF67, 0x6BB6}, //6792 #CJK UNIFIED IDEOGRAPH + {0xCF68, 0x6BD6}, //6793 #CJK UNIFIED IDEOGRAPH + {0xCF69, 0x6BD8}, //6794 #CJK UNIFIED IDEOGRAPH + {0xCF6A, 0x6BE0}, //6795 #CJK UNIFIED IDEOGRAPH + {0xCF6B, 0x6C20}, //6796 #CJK UNIFIED IDEOGRAPH + {0xCF6C, 0x6C21}, //6797 #CJK UNIFIED IDEOGRAPH + {0xCF6D, 0x6D28}, //6798 #CJK UNIFIED IDEOGRAPH + {0xCF6E, 0x6D34}, //6799 #CJK UNIFIED IDEOGRAPH + {0xCF6F, 0x6D2D}, //6800 #CJK UNIFIED IDEOGRAPH + {0xCF70, 0x6D1F}, //6801 #CJK UNIFIED IDEOGRAPH + {0xCF71, 0x6D3C}, //6802 #CJK UNIFIED IDEOGRAPH + {0xCF72, 0x6D3F}, //6803 #CJK UNIFIED IDEOGRAPH + {0xCF73, 0x6D12}, //6804 #CJK UNIFIED IDEOGRAPH + {0xCF74, 0x6D0A}, //6805 #CJK UNIFIED IDEOGRAPH + {0xCF75, 0x6CDA}, //6806 #CJK UNIFIED IDEOGRAPH + {0xCF76, 0x6D33}, //6807 #CJK UNIFIED IDEOGRAPH + {0xCF77, 0x6D04}, //6808 #CJK UNIFIED IDEOGRAPH + {0xCF78, 0x6D19}, //6809 #CJK UNIFIED IDEOGRAPH + {0xCF79, 0x6D3A}, //6810 #CJK UNIFIED IDEOGRAPH + {0xCF7A, 0x6D1A}, //6811 #CJK UNIFIED IDEOGRAPH + {0xCF7B, 0x6D11}, //6812 #CJK UNIFIED IDEOGRAPH + {0xCF7C, 0x6D00}, //6813 #CJK UNIFIED IDEOGRAPH + {0xCF7D, 0x6D1D}, //6814 #CJK UNIFIED IDEOGRAPH + {0xCF7E, 0x6D42}, //6815 #CJK UNIFIED IDEOGRAPH + {0xCFA1, 0x6D01}, //6816 #CJK UNIFIED IDEOGRAPH + {0xCFA2, 0x6D18}, //6817 #CJK UNIFIED IDEOGRAPH + {0xCFA3, 0x6D37}, //6818 #CJK UNIFIED IDEOGRAPH + {0xCFA4, 0x6D03}, //6819 #CJK UNIFIED IDEOGRAPH + {0xCFA5, 0x6D0F}, //6820 #CJK UNIFIED IDEOGRAPH + {0xCFA6, 0x6D40}, //6821 #CJK UNIFIED IDEOGRAPH + {0xCFA7, 0x6D07}, //6822 #CJK UNIFIED IDEOGRAPH + {0xCFA8, 0x6D20}, //6823 #CJK UNIFIED IDEOGRAPH + {0xCFA9, 0x6D2C}, //6824 #CJK UNIFIED IDEOGRAPH + {0xCFAA, 0x6D08}, //6825 #CJK UNIFIED IDEOGRAPH + {0xCFAB, 0x6D22}, //6826 #CJK UNIFIED IDEOGRAPH + {0xCFAC, 0x6D09}, //6827 #CJK UNIFIED IDEOGRAPH + {0xCFAD, 0x6D10}, //6828 #CJK UNIFIED IDEOGRAPH + {0xCFAE, 0x70B7}, //6829 #CJK UNIFIED IDEOGRAPH + {0xCFAF, 0x709F}, //6830 #CJK UNIFIED IDEOGRAPH + {0xCFB0, 0x70BE}, //6831 #CJK UNIFIED IDEOGRAPH + {0xCFB1, 0x70B1}, //6832 #CJK UNIFIED IDEOGRAPH + {0xCFB2, 0x70B0}, //6833 #CJK UNIFIED IDEOGRAPH + {0xCFB3, 0x70A1}, //6834 #CJK UNIFIED IDEOGRAPH + {0xCFB4, 0x70B4}, //6835 #CJK UNIFIED IDEOGRAPH + {0xCFB5, 0x70B5}, //6836 #CJK UNIFIED IDEOGRAPH + {0xCFB6, 0x70A9}, //6837 #CJK UNIFIED IDEOGRAPH + {0xCFB7, 0x7241}, //6838 #CJK UNIFIED IDEOGRAPH + {0xCFB8, 0x7249}, //6839 #CJK UNIFIED IDEOGRAPH + {0xCFB9, 0x724A}, //6840 #CJK UNIFIED IDEOGRAPH + {0xCFBA, 0x726C}, //6841 #CJK UNIFIED IDEOGRAPH + {0xCFBB, 0x7270}, //6842 #CJK UNIFIED IDEOGRAPH + {0xCFBC, 0x7273}, //6843 #CJK UNIFIED IDEOGRAPH + {0xCFBD, 0x726E}, //6844 #CJK UNIFIED IDEOGRAPH + {0xCFBE, 0x72CA}, //6845 #CJK UNIFIED IDEOGRAPH + {0xCFBF, 0x72E4}, //6846 #CJK UNIFIED IDEOGRAPH + {0xCFC0, 0x72E8}, //6847 #CJK UNIFIED IDEOGRAPH + {0xCFC1, 0x72EB}, //6848 #CJK UNIFIED IDEOGRAPH + {0xCFC2, 0x72DF}, //6849 #CJK UNIFIED IDEOGRAPH + {0xCFC3, 0x72EA}, //6850 #CJK UNIFIED IDEOGRAPH + {0xCFC4, 0x72E6}, //6851 #CJK UNIFIED IDEOGRAPH + {0xCFC5, 0x72E3}, //6852 #CJK UNIFIED IDEOGRAPH + {0xCFC6, 0x7385}, //6853 #CJK UNIFIED IDEOGRAPH + {0xCFC7, 0x73CC}, //6854 #CJK UNIFIED IDEOGRAPH + {0xCFC8, 0x73C2}, //6855 #CJK UNIFIED IDEOGRAPH + {0xCFC9, 0x73C8}, //6856 #CJK UNIFIED IDEOGRAPH + {0xCFCA, 0x73C5}, //6857 #CJK UNIFIED IDEOGRAPH + {0xCFCB, 0x73B9}, //6858 #CJK UNIFIED IDEOGRAPH + {0xCFCC, 0x73B6}, //6859 #CJK UNIFIED IDEOGRAPH + {0xCFCD, 0x73B5}, //6860 #CJK UNIFIED IDEOGRAPH + {0xCFCE, 0x73B4}, //6861 #CJK UNIFIED IDEOGRAPH + {0xCFCF, 0x73EB}, //6862 #CJK UNIFIED IDEOGRAPH + {0xCFD0, 0x73BF}, //6863 #CJK UNIFIED IDEOGRAPH + {0xCFD1, 0x73C7}, //6864 #CJK UNIFIED IDEOGRAPH + {0xCFD2, 0x73BE}, //6865 #CJK UNIFIED IDEOGRAPH + {0xCFD3, 0x73C3}, //6866 #CJK UNIFIED IDEOGRAPH + {0xCFD4, 0x73C6}, //6867 #CJK UNIFIED IDEOGRAPH + {0xCFD5, 0x73B8}, //6868 #CJK UNIFIED IDEOGRAPH + {0xCFD6, 0x73CB}, //6869 #CJK UNIFIED IDEOGRAPH + {0xCFD7, 0x74EC}, //6870 #CJK UNIFIED IDEOGRAPH + {0xCFD8, 0x74EE}, //6871 #CJK UNIFIED IDEOGRAPH + {0xCFD9, 0x752E}, //6872 #CJK UNIFIED IDEOGRAPH + {0xCFDA, 0x7547}, //6873 #CJK UNIFIED IDEOGRAPH + {0xCFDB, 0x7548}, //6874 #CJK UNIFIED IDEOGRAPH + {0xCFDC, 0x75A7}, //6875 #CJK UNIFIED IDEOGRAPH + {0xCFDD, 0x75AA}, //6876 #CJK UNIFIED IDEOGRAPH + {0xCFDE, 0x7679}, //6877 #CJK UNIFIED IDEOGRAPH + {0xCFDF, 0x76C4}, //6878 #CJK UNIFIED IDEOGRAPH + {0xCFE0, 0x7708}, //6879 #CJK UNIFIED IDEOGRAPH + {0xCFE1, 0x7703}, //6880 #CJK UNIFIED IDEOGRAPH + {0xCFE2, 0x7704}, //6881 #CJK UNIFIED IDEOGRAPH + {0xCFE3, 0x7705}, //6882 #CJK UNIFIED IDEOGRAPH + {0xCFE4, 0x770A}, //6883 #CJK UNIFIED IDEOGRAPH + {0xCFE5, 0x76F7}, //6884 #CJK UNIFIED IDEOGRAPH + {0xCFE6, 0x76FB}, //6885 #CJK UNIFIED IDEOGRAPH + {0xCFE7, 0x76FA}, //6886 #CJK UNIFIED IDEOGRAPH + {0xCFE8, 0x77E7}, //6887 #CJK UNIFIED IDEOGRAPH + {0xCFE9, 0x77E8}, //6888 #CJK UNIFIED IDEOGRAPH + {0xCFEA, 0x7806}, //6889 #CJK UNIFIED IDEOGRAPH + {0xCFEB, 0x7811}, //6890 #CJK UNIFIED IDEOGRAPH + {0xCFEC, 0x7812}, //6891 #CJK UNIFIED IDEOGRAPH + {0xCFED, 0x7805}, //6892 #CJK UNIFIED IDEOGRAPH + {0xCFEE, 0x7810}, //6893 #CJK UNIFIED IDEOGRAPH + {0xCFEF, 0x780F}, //6894 #CJK UNIFIED IDEOGRAPH + {0xCFF0, 0x780E}, //6895 #CJK UNIFIED IDEOGRAPH + {0xCFF1, 0x7809}, //6896 #CJK UNIFIED IDEOGRAPH + {0xCFF2, 0x7803}, //6897 #CJK UNIFIED IDEOGRAPH + {0xCFF3, 0x7813}, //6898 #CJK UNIFIED IDEOGRAPH + {0xCFF4, 0x794A}, //6899 #CJK UNIFIED IDEOGRAPH + {0xCFF5, 0x794C}, //6900 #CJK UNIFIED IDEOGRAPH + {0xCFF6, 0x794B}, //6901 #CJK UNIFIED IDEOGRAPH + {0xCFF7, 0x7945}, //6902 #CJK UNIFIED IDEOGRAPH + {0xCFF8, 0x7944}, //6903 #CJK UNIFIED IDEOGRAPH + {0xCFF9, 0x79D5}, //6904 #CJK UNIFIED IDEOGRAPH + {0xCFFA, 0x79CD}, //6905 #CJK UNIFIED IDEOGRAPH + {0xCFFB, 0x79CF}, //6906 #CJK UNIFIED IDEOGRAPH + {0xCFFC, 0x79D6}, //6907 #CJK UNIFIED IDEOGRAPH + {0xCFFD, 0x79CE}, //6908 #CJK UNIFIED IDEOGRAPH + {0xCFFE, 0x7A80}, //6909 #CJK UNIFIED IDEOGRAPH + {0xD040, 0x7A7E}, //6910 #CJK UNIFIED IDEOGRAPH + {0xD041, 0x7AD1}, //6911 #CJK UNIFIED IDEOGRAPH + {0xD042, 0x7B00}, //6912 #CJK UNIFIED IDEOGRAPH + {0xD043, 0x7B01}, //6913 #CJK UNIFIED IDEOGRAPH + {0xD044, 0x7C7A}, //6914 #CJK UNIFIED IDEOGRAPH + {0xD045, 0x7C78}, //6915 #CJK UNIFIED IDEOGRAPH + {0xD046, 0x7C79}, //6916 #CJK UNIFIED IDEOGRAPH + {0xD047, 0x7C7F}, //6917 #CJK UNIFIED IDEOGRAPH + {0xD048, 0x7C80}, //6918 #CJK UNIFIED IDEOGRAPH + {0xD049, 0x7C81}, //6919 #CJK UNIFIED IDEOGRAPH + {0xD04A, 0x7D03}, //6920 #CJK UNIFIED IDEOGRAPH + {0xD04B, 0x7D08}, //6921 #CJK UNIFIED IDEOGRAPH + {0xD04C, 0x7D01}, //6922 #CJK UNIFIED IDEOGRAPH + {0xD04D, 0x7F58}, //6923 #CJK UNIFIED IDEOGRAPH + {0xD04E, 0x7F91}, //6924 #CJK UNIFIED IDEOGRAPH + {0xD04F, 0x7F8D}, //6925 #CJK UNIFIED IDEOGRAPH + {0xD050, 0x7FBE}, //6926 #CJK UNIFIED IDEOGRAPH + {0xD051, 0x8007}, //6927 #CJK UNIFIED IDEOGRAPH + {0xD052, 0x800E}, //6928 #CJK UNIFIED IDEOGRAPH + {0xD053, 0x800F}, //6929 #CJK UNIFIED IDEOGRAPH + {0xD054, 0x8014}, //6930 #CJK UNIFIED IDEOGRAPH + {0xD055, 0x8037}, //6931 #CJK UNIFIED IDEOGRAPH + {0xD056, 0x80D8}, //6932 #CJK UNIFIED IDEOGRAPH + {0xD057, 0x80C7}, //6933 #CJK UNIFIED IDEOGRAPH + {0xD058, 0x80E0}, //6934 #CJK UNIFIED IDEOGRAPH + {0xD059, 0x80D1}, //6935 #CJK UNIFIED IDEOGRAPH + {0xD05A, 0x80C8}, //6936 #CJK UNIFIED IDEOGRAPH + {0xD05B, 0x80C2}, //6937 #CJK UNIFIED IDEOGRAPH + {0xD05C, 0x80D0}, //6938 #CJK UNIFIED IDEOGRAPH + {0xD05D, 0x80C5}, //6939 #CJK UNIFIED IDEOGRAPH + {0xD05E, 0x80E3}, //6940 #CJK UNIFIED IDEOGRAPH + {0xD05F, 0x80D9}, //6941 #CJK UNIFIED IDEOGRAPH + {0xD060, 0x80DC}, //6942 #CJK UNIFIED IDEOGRAPH + {0xD061, 0x80CA}, //6943 #CJK UNIFIED IDEOGRAPH + {0xD062, 0x80D5}, //6944 #CJK UNIFIED IDEOGRAPH + {0xD063, 0x80C9}, //6945 #CJK UNIFIED IDEOGRAPH + {0xD064, 0x80CF}, //6946 #CJK UNIFIED IDEOGRAPH + {0xD065, 0x80D7}, //6947 #CJK UNIFIED IDEOGRAPH + {0xD066, 0x80E6}, //6948 #CJK UNIFIED IDEOGRAPH + {0xD067, 0x80CD}, //6949 #CJK UNIFIED IDEOGRAPH + {0xD068, 0x81FF}, //6950 #CJK UNIFIED IDEOGRAPH + {0xD069, 0x8221}, //6951 #CJK UNIFIED IDEOGRAPH + {0xD06A, 0x8294}, //6952 #CJK UNIFIED IDEOGRAPH + {0xD06B, 0x82D9}, //6953 #CJK UNIFIED IDEOGRAPH + {0xD06C, 0x82FE}, //6954 #CJK UNIFIED IDEOGRAPH + {0xD06D, 0x82F9}, //6955 #CJK UNIFIED IDEOGRAPH + {0xD06E, 0x8307}, //6956 #CJK UNIFIED IDEOGRAPH + {0xD06F, 0x82E8}, //6957 #CJK UNIFIED IDEOGRAPH + {0xD070, 0x8300}, //6958 #CJK UNIFIED IDEOGRAPH + {0xD071, 0x82D5}, //6959 #CJK UNIFIED IDEOGRAPH + {0xD072, 0x833A}, //6960 #CJK UNIFIED IDEOGRAPH + {0xD073, 0x82EB}, //6961 #CJK UNIFIED IDEOGRAPH + {0xD074, 0x82D6}, //6962 #CJK UNIFIED IDEOGRAPH + {0xD075, 0x82F4}, //6963 #CJK UNIFIED IDEOGRAPH + {0xD076, 0x82EC}, //6964 #CJK UNIFIED IDEOGRAPH + {0xD077, 0x82E1}, //6965 #CJK UNIFIED IDEOGRAPH + {0xD078, 0x82F2}, //6966 #CJK UNIFIED IDEOGRAPH + {0xD079, 0x82F5}, //6967 #CJK UNIFIED IDEOGRAPH + {0xD07A, 0x830C}, //6968 #CJK UNIFIED IDEOGRAPH + {0xD07B, 0x82FB}, //6969 #CJK UNIFIED IDEOGRAPH + {0xD07C, 0x82F6}, //6970 #CJK UNIFIED IDEOGRAPH + {0xD07D, 0x82F0}, //6971 #CJK UNIFIED IDEOGRAPH + {0xD07E, 0x82EA}, //6972 #CJK UNIFIED IDEOGRAPH + {0xD0A1, 0x82E4}, //6973 #CJK UNIFIED IDEOGRAPH + {0xD0A2, 0x82E0}, //6974 #CJK UNIFIED IDEOGRAPH + {0xD0A3, 0x82FA}, //6975 #CJK UNIFIED IDEOGRAPH + {0xD0A4, 0x82F3}, //6976 #CJK UNIFIED IDEOGRAPH + {0xD0A5, 0x82ED}, //6977 #CJK UNIFIED IDEOGRAPH + {0xD0A6, 0x8677}, //6978 #CJK UNIFIED IDEOGRAPH + {0xD0A7, 0x8674}, //6979 #CJK UNIFIED IDEOGRAPH + {0xD0A8, 0x867C}, //6980 #CJK UNIFIED IDEOGRAPH + {0xD0A9, 0x8673}, //6981 #CJK UNIFIED IDEOGRAPH + {0xD0AA, 0x8841}, //6982 #CJK UNIFIED IDEOGRAPH + {0xD0AB, 0x884E}, //6983 #CJK UNIFIED IDEOGRAPH + {0xD0AC, 0x8867}, //6984 #CJK UNIFIED IDEOGRAPH + {0xD0AD, 0x886A}, //6985 #CJK UNIFIED IDEOGRAPH + {0xD0AE, 0x8869}, //6986 #CJK UNIFIED IDEOGRAPH + {0xD0AF, 0x89D3}, //6987 #CJK UNIFIED IDEOGRAPH + {0xD0B0, 0x8A04}, //6988 #CJK UNIFIED IDEOGRAPH + {0xD0B1, 0x8A07}, //6989 #CJK UNIFIED IDEOGRAPH + {0xD0B2, 0x8D72}, //6990 #CJK UNIFIED IDEOGRAPH + {0xD0B3, 0x8FE3}, //6991 #CJK UNIFIED IDEOGRAPH + {0xD0B4, 0x8FE1}, //6992 #CJK UNIFIED IDEOGRAPH + {0xD0B5, 0x8FEE}, //6993 #CJK UNIFIED IDEOGRAPH + {0xD0B6, 0x8FE0}, //6994 #CJK UNIFIED IDEOGRAPH + {0xD0B7, 0x90F1}, //6995 #CJK UNIFIED IDEOGRAPH + {0xD0B8, 0x90BD}, //6996 #CJK UNIFIED IDEOGRAPH + {0xD0B9, 0x90BF}, //6997 #CJK UNIFIED IDEOGRAPH + {0xD0BA, 0x90D5}, //6998 #CJK UNIFIED IDEOGRAPH + {0xD0BB, 0x90C5}, //6999 #CJK UNIFIED IDEOGRAPH + {0xD0BC, 0x90BE}, //7000 #CJK UNIFIED IDEOGRAPH + {0xD0BD, 0x90C7}, //7001 #CJK UNIFIED IDEOGRAPH + {0xD0BE, 0x90CB}, //7002 #CJK UNIFIED IDEOGRAPH + {0xD0BF, 0x90C8}, //7003 #CJK UNIFIED IDEOGRAPH + {0xD0C0, 0x91D4}, //7004 #CJK UNIFIED IDEOGRAPH + {0xD0C1, 0x91D3}, //7005 #CJK UNIFIED IDEOGRAPH + {0xD0C2, 0x9654}, //7006 #CJK UNIFIED IDEOGRAPH + {0xD0C3, 0x964F}, //7007 #CJK UNIFIED IDEOGRAPH + {0xD0C4, 0x9651}, //7008 #CJK UNIFIED IDEOGRAPH + {0xD0C5, 0x9653}, //7009 #CJK UNIFIED IDEOGRAPH + {0xD0C6, 0x964A}, //7010 #CJK UNIFIED IDEOGRAPH + {0xD0C7, 0x964E}, //7011 #CJK UNIFIED IDEOGRAPH + {0xD0C8, 0x501E}, //7012 #CJK UNIFIED IDEOGRAPH + {0xD0C9, 0x5005}, //7013 #CJK UNIFIED IDEOGRAPH + {0xD0CA, 0x5007}, //7014 #CJK UNIFIED IDEOGRAPH + {0xD0CB, 0x5013}, //7015 #CJK UNIFIED IDEOGRAPH + {0xD0CC, 0x5022}, //7016 #CJK UNIFIED IDEOGRAPH + {0xD0CD, 0x5030}, //7017 #CJK UNIFIED IDEOGRAPH + {0xD0CE, 0x501B}, //7018 #CJK UNIFIED IDEOGRAPH + {0xD0CF, 0x4FF5}, //7019 #CJK UNIFIED IDEOGRAPH + {0xD0D0, 0x4FF4}, //7020 #CJK UNIFIED IDEOGRAPH + {0xD0D1, 0x5033}, //7021 #CJK UNIFIED IDEOGRAPH + {0xD0D2, 0x5037}, //7022 #CJK UNIFIED IDEOGRAPH + {0xD0D3, 0x502C}, //7023 #CJK UNIFIED IDEOGRAPH + {0xD0D4, 0x4FF6}, //7024 #CJK UNIFIED IDEOGRAPH + {0xD0D5, 0x4FF7}, //7025 #CJK UNIFIED IDEOGRAPH + {0xD0D6, 0x5017}, //7026 #CJK UNIFIED IDEOGRAPH + {0xD0D7, 0x501C}, //7027 #CJK UNIFIED IDEOGRAPH + {0xD0D8, 0x5020}, //7028 #CJK UNIFIED IDEOGRAPH + {0xD0D9, 0x5027}, //7029 #CJK UNIFIED IDEOGRAPH + {0xD0DA, 0x5035}, //7030 #CJK UNIFIED IDEOGRAPH + {0xD0DB, 0x502F}, //7031 #CJK UNIFIED IDEOGRAPH + {0xD0DC, 0x5031}, //7032 #CJK UNIFIED IDEOGRAPH + {0xD0DD, 0x500E}, //7033 #CJK UNIFIED IDEOGRAPH + {0xD0DE, 0x515A}, //7034 #CJK UNIFIED IDEOGRAPH + {0xD0DF, 0x5194}, //7035 #CJK UNIFIED IDEOGRAPH + {0xD0E0, 0x5193}, //7036 #CJK UNIFIED IDEOGRAPH + {0xD0E1, 0x51CA}, //7037 #CJK UNIFIED IDEOGRAPH + {0xD0E2, 0x51C4}, //7038 #CJK UNIFIED IDEOGRAPH + {0xD0E3, 0x51C5}, //7039 #CJK UNIFIED IDEOGRAPH + {0xD0E4, 0x51C8}, //7040 #CJK UNIFIED IDEOGRAPH + {0xD0E5, 0x51CE}, //7041 #CJK UNIFIED IDEOGRAPH + {0xD0E6, 0x5261}, //7042 #CJK UNIFIED IDEOGRAPH + {0xD0E7, 0x525A}, //7043 #CJK UNIFIED IDEOGRAPH + {0xD0E8, 0x5252}, //7044 #CJK UNIFIED IDEOGRAPH + {0xD0E9, 0x525E}, //7045 #CJK UNIFIED IDEOGRAPH + {0xD0EA, 0x525F}, //7046 #CJK UNIFIED IDEOGRAPH + {0xD0EB, 0x5255}, //7047 #CJK UNIFIED IDEOGRAPH + {0xD0EC, 0x5262}, //7048 #CJK UNIFIED IDEOGRAPH + {0xD0ED, 0x52CD}, //7049 #CJK UNIFIED IDEOGRAPH + {0xD0EE, 0x530E}, //7050 #CJK UNIFIED IDEOGRAPH + {0xD0EF, 0x539E}, //7051 #CJK UNIFIED IDEOGRAPH + {0xD0F0, 0x5526}, //7052 #CJK UNIFIED IDEOGRAPH + {0xD0F1, 0x54E2}, //7053 #CJK UNIFIED IDEOGRAPH + {0xD0F2, 0x5517}, //7054 #CJK UNIFIED IDEOGRAPH + {0xD0F3, 0x5512}, //7055 #CJK UNIFIED IDEOGRAPH + {0xD0F4, 0x54E7}, //7056 #CJK UNIFIED IDEOGRAPH + {0xD0F5, 0x54F3}, //7057 #CJK UNIFIED IDEOGRAPH + {0xD0F6, 0x54E4}, //7058 #CJK UNIFIED IDEOGRAPH + {0xD0F7, 0x551A}, //7059 #CJK UNIFIED IDEOGRAPH + {0xD0F8, 0x54FF}, //7060 #CJK UNIFIED IDEOGRAPH + {0xD0F9, 0x5504}, //7061 #CJK UNIFIED IDEOGRAPH + {0xD0FA, 0x5508}, //7062 #CJK UNIFIED IDEOGRAPH + {0xD0FB, 0x54EB}, //7063 #CJK UNIFIED IDEOGRAPH + {0xD0FC, 0x5511}, //7064 #CJK UNIFIED IDEOGRAPH + {0xD0FD, 0x5505}, //7065 #CJK UNIFIED IDEOGRAPH + {0xD0FE, 0x54F1}, //7066 #CJK UNIFIED IDEOGRAPH + {0xD140, 0x550A}, //7067 #CJK UNIFIED IDEOGRAPH + {0xD141, 0x54FB}, //7068 #CJK UNIFIED IDEOGRAPH + {0xD142, 0x54F7}, //7069 #CJK UNIFIED IDEOGRAPH + {0xD143, 0x54F8}, //7070 #CJK UNIFIED IDEOGRAPH + {0xD144, 0x54E0}, //7071 #CJK UNIFIED IDEOGRAPH + {0xD145, 0x550E}, //7072 #CJK UNIFIED IDEOGRAPH + {0xD146, 0x5503}, //7073 #CJK UNIFIED IDEOGRAPH + {0xD147, 0x550B}, //7074 #CJK UNIFIED IDEOGRAPH + {0xD148, 0x5701}, //7075 #CJK UNIFIED IDEOGRAPH + {0xD149, 0x5702}, //7076 #CJK UNIFIED IDEOGRAPH + {0xD14A, 0x57CC}, //7077 #CJK UNIFIED IDEOGRAPH + {0xD14B, 0x5832}, //7078 #CJK UNIFIED IDEOGRAPH + {0xD14C, 0x57D5}, //7079 #CJK UNIFIED IDEOGRAPH + {0xD14D, 0x57D2}, //7080 #CJK UNIFIED IDEOGRAPH + {0xD14E, 0x57BA}, //7081 #CJK UNIFIED IDEOGRAPH + {0xD14F, 0x57C6}, //7082 #CJK UNIFIED IDEOGRAPH + {0xD150, 0x57BD}, //7083 #CJK UNIFIED IDEOGRAPH + {0xD151, 0x57BC}, //7084 #CJK UNIFIED IDEOGRAPH + {0xD152, 0x57B8}, //7085 #CJK UNIFIED IDEOGRAPH + {0xD153, 0x57B6}, //7086 #CJK UNIFIED IDEOGRAPH + {0xD154, 0x57BF}, //7087 #CJK UNIFIED IDEOGRAPH + {0xD155, 0x57C7}, //7088 #CJK UNIFIED IDEOGRAPH + {0xD156, 0x57D0}, //7089 #CJK UNIFIED IDEOGRAPH + {0xD157, 0x57B9}, //7090 #CJK UNIFIED IDEOGRAPH + {0xD158, 0x57C1}, //7091 #CJK UNIFIED IDEOGRAPH + {0xD159, 0x590E}, //7092 #CJK UNIFIED IDEOGRAPH + {0xD15A, 0x594A}, //7093 #CJK UNIFIED IDEOGRAPH + {0xD15B, 0x5A19}, //7094 #CJK UNIFIED IDEOGRAPH + {0xD15C, 0x5A16}, //7095 #CJK UNIFIED IDEOGRAPH + {0xD15D, 0x5A2D}, //7096 #CJK UNIFIED IDEOGRAPH + {0xD15E, 0x5A2E}, //7097 #CJK UNIFIED IDEOGRAPH + {0xD15F, 0x5A15}, //7098 #CJK UNIFIED IDEOGRAPH + {0xD160, 0x5A0F}, //7099 #CJK UNIFIED IDEOGRAPH + {0xD161, 0x5A17}, //7100 #CJK UNIFIED IDEOGRAPH + {0xD162, 0x5A0A}, //7101 #CJK UNIFIED IDEOGRAPH + {0xD163, 0x5A1E}, //7102 #CJK UNIFIED IDEOGRAPH + {0xD164, 0x5A33}, //7103 #CJK UNIFIED IDEOGRAPH + {0xD165, 0x5B6C}, //7104 #CJK UNIFIED IDEOGRAPH + {0xD166, 0x5BA7}, //7105 #CJK UNIFIED IDEOGRAPH + {0xD167, 0x5BAD}, //7106 #CJK UNIFIED IDEOGRAPH + {0xD168, 0x5BAC}, //7107 #CJK UNIFIED IDEOGRAPH + {0xD169, 0x5C03}, //7108 #CJK UNIFIED IDEOGRAPH + {0xD16A, 0x5C56}, //7109 #CJK UNIFIED IDEOGRAPH + {0xD16B, 0x5C54}, //7110 #CJK UNIFIED IDEOGRAPH + {0xD16C, 0x5CEC}, //7111 #CJK UNIFIED IDEOGRAPH + {0xD16D, 0x5CFF}, //7112 #CJK UNIFIED IDEOGRAPH + {0xD16E, 0x5CEE}, //7113 #CJK UNIFIED IDEOGRAPH + {0xD16F, 0x5CF1}, //7114 #CJK UNIFIED IDEOGRAPH + {0xD170, 0x5CF7}, //7115 #CJK UNIFIED IDEOGRAPH + {0xD171, 0x5D00}, //7116 #CJK UNIFIED IDEOGRAPH + {0xD172, 0x5CF9}, //7117 #CJK UNIFIED IDEOGRAPH + {0xD173, 0x5E29}, //7118 #CJK UNIFIED IDEOGRAPH + {0xD174, 0x5E28}, //7119 #CJK UNIFIED IDEOGRAPH + {0xD175, 0x5EA8}, //7120 #CJK UNIFIED IDEOGRAPH + {0xD176, 0x5EAE}, //7121 #CJK UNIFIED IDEOGRAPH + {0xD177, 0x5EAA}, //7122 #CJK UNIFIED IDEOGRAPH + {0xD178, 0x5EAC}, //7123 #CJK UNIFIED IDEOGRAPH + {0xD179, 0x5F33}, //7124 #CJK UNIFIED IDEOGRAPH + {0xD17A, 0x5F30}, //7125 #CJK UNIFIED IDEOGRAPH + {0xD17B, 0x5F67}, //7126 #CJK UNIFIED IDEOGRAPH + {0xD17C, 0x605D}, //7127 #CJK UNIFIED IDEOGRAPH + {0xD17D, 0x605A}, //7128 #CJK UNIFIED IDEOGRAPH + {0xD17E, 0x6067}, //7129 #CJK UNIFIED IDEOGRAPH + {0xD1A1, 0x6041}, //7130 #CJK UNIFIED IDEOGRAPH + {0xD1A2, 0x60A2}, //7131 #CJK UNIFIED IDEOGRAPH + {0xD1A3, 0x6088}, //7132 #CJK UNIFIED IDEOGRAPH + {0xD1A4, 0x6080}, //7133 #CJK UNIFIED IDEOGRAPH + {0xD1A5, 0x6092}, //7134 #CJK UNIFIED IDEOGRAPH + {0xD1A6, 0x6081}, //7135 #CJK UNIFIED IDEOGRAPH + {0xD1A7, 0x609D}, //7136 #CJK UNIFIED IDEOGRAPH + {0xD1A8, 0x6083}, //7137 #CJK UNIFIED IDEOGRAPH + {0xD1A9, 0x6095}, //7138 #CJK UNIFIED IDEOGRAPH + {0xD1AA, 0x609B}, //7139 #CJK UNIFIED IDEOGRAPH + {0xD1AB, 0x6097}, //7140 #CJK UNIFIED IDEOGRAPH + {0xD1AC, 0x6087}, //7141 #CJK UNIFIED IDEOGRAPH + {0xD1AD, 0x609C}, //7142 #CJK UNIFIED IDEOGRAPH + {0xD1AE, 0x608E}, //7143 #CJK UNIFIED IDEOGRAPH + {0xD1AF, 0x6219}, //7144 #CJK UNIFIED IDEOGRAPH + {0xD1B0, 0x6246}, //7145 #CJK UNIFIED IDEOGRAPH + {0xD1B1, 0x62F2}, //7146 #CJK UNIFIED IDEOGRAPH + {0xD1B2, 0x6310}, //7147 #CJK UNIFIED IDEOGRAPH + {0xD1B3, 0x6356}, //7148 #CJK UNIFIED IDEOGRAPH + {0xD1B4, 0x632C}, //7149 #CJK UNIFIED IDEOGRAPH + {0xD1B5, 0x6344}, //7150 #CJK UNIFIED IDEOGRAPH + {0xD1B6, 0x6345}, //7151 #CJK UNIFIED IDEOGRAPH + {0xD1B7, 0x6336}, //7152 #CJK UNIFIED IDEOGRAPH + {0xD1B8, 0x6343}, //7153 #CJK UNIFIED IDEOGRAPH + {0xD1B9, 0x63E4}, //7154 #CJK UNIFIED IDEOGRAPH + {0xD1BA, 0x6339}, //7155 #CJK UNIFIED IDEOGRAPH + {0xD1BB, 0x634B}, //7156 #CJK UNIFIED IDEOGRAPH + {0xD1BC, 0x634A}, //7157 #CJK UNIFIED IDEOGRAPH + {0xD1BD, 0x633C}, //7158 #CJK UNIFIED IDEOGRAPH + {0xD1BE, 0x6329}, //7159 #CJK UNIFIED IDEOGRAPH + {0xD1BF, 0x6341}, //7160 #CJK UNIFIED IDEOGRAPH + {0xD1C0, 0x6334}, //7161 #CJK UNIFIED IDEOGRAPH + {0xD1C1, 0x6358}, //7162 #CJK UNIFIED IDEOGRAPH + {0xD1C2, 0x6354}, //7163 #CJK UNIFIED IDEOGRAPH + {0xD1C3, 0x6359}, //7164 #CJK UNIFIED IDEOGRAPH + {0xD1C4, 0x632D}, //7165 #CJK UNIFIED IDEOGRAPH + {0xD1C5, 0x6347}, //7166 #CJK UNIFIED IDEOGRAPH + {0xD1C6, 0x6333}, //7167 #CJK UNIFIED IDEOGRAPH + {0xD1C7, 0x635A}, //7168 #CJK UNIFIED IDEOGRAPH + {0xD1C8, 0x6351}, //7169 #CJK UNIFIED IDEOGRAPH + {0xD1C9, 0x6338}, //7170 #CJK UNIFIED IDEOGRAPH + {0xD1CA, 0x6357}, //7171 #CJK UNIFIED IDEOGRAPH + {0xD1CB, 0x6340}, //7172 #CJK UNIFIED IDEOGRAPH + {0xD1CC, 0x6348}, //7173 #CJK UNIFIED IDEOGRAPH + {0xD1CD, 0x654A}, //7174 #CJK UNIFIED IDEOGRAPH + {0xD1CE, 0x6546}, //7175 #CJK UNIFIED IDEOGRAPH + {0xD1CF, 0x65C6}, //7176 #CJK UNIFIED IDEOGRAPH + {0xD1D0, 0x65C3}, //7177 #CJK UNIFIED IDEOGRAPH + {0xD1D1, 0x65C4}, //7178 #CJK UNIFIED IDEOGRAPH + {0xD1D2, 0x65C2}, //7179 #CJK UNIFIED IDEOGRAPH + {0xD1D3, 0x664A}, //7180 #CJK UNIFIED IDEOGRAPH + {0xD1D4, 0x665F}, //7181 #CJK UNIFIED IDEOGRAPH + {0xD1D5, 0x6647}, //7182 #CJK UNIFIED IDEOGRAPH + {0xD1D6, 0x6651}, //7183 #CJK UNIFIED IDEOGRAPH + {0xD1D7, 0x6712}, //7184 #CJK UNIFIED IDEOGRAPH + {0xD1D8, 0x6713}, //7185 #CJK UNIFIED IDEOGRAPH + {0xD1D9, 0x681F}, //7186 #CJK UNIFIED IDEOGRAPH + {0xD1DA, 0x681A}, //7187 #CJK UNIFIED IDEOGRAPH + {0xD1DB, 0x6849}, //7188 #CJK UNIFIED IDEOGRAPH + {0xD1DC, 0x6832}, //7189 #CJK UNIFIED IDEOGRAPH + {0xD1DD, 0x6833}, //7190 #CJK UNIFIED IDEOGRAPH + {0xD1DE, 0x683B}, //7191 #CJK UNIFIED IDEOGRAPH + {0xD1DF, 0x684B}, //7192 #CJK UNIFIED IDEOGRAPH + {0xD1E0, 0x684F}, //7193 #CJK UNIFIED IDEOGRAPH + {0xD1E1, 0x6816}, //7194 #CJK UNIFIED IDEOGRAPH + {0xD1E2, 0x6831}, //7195 #CJK UNIFIED IDEOGRAPH + {0xD1E3, 0x681C}, //7196 #CJK UNIFIED IDEOGRAPH + {0xD1E4, 0x6835}, //7197 #CJK UNIFIED IDEOGRAPH + {0xD1E5, 0x682B}, //7198 #CJK UNIFIED IDEOGRAPH + {0xD1E6, 0x682D}, //7199 #CJK UNIFIED IDEOGRAPH + {0xD1E7, 0x682F}, //7200 #CJK UNIFIED IDEOGRAPH + {0xD1E8, 0x684E}, //7201 #CJK UNIFIED IDEOGRAPH + {0xD1E9, 0x6844}, //7202 #CJK UNIFIED IDEOGRAPH + {0xD1EA, 0x6834}, //7203 #CJK UNIFIED IDEOGRAPH + {0xD1EB, 0x681D}, //7204 #CJK UNIFIED IDEOGRAPH + {0xD1EC, 0x6812}, //7205 #CJK UNIFIED IDEOGRAPH + {0xD1ED, 0x6814}, //7206 #CJK UNIFIED IDEOGRAPH + {0xD1EE, 0x6826}, //7207 #CJK UNIFIED IDEOGRAPH + {0xD1EF, 0x6828}, //7208 #CJK UNIFIED IDEOGRAPH + {0xD1F0, 0x682E}, //7209 #CJK UNIFIED IDEOGRAPH + {0xD1F1, 0x684D}, //7210 #CJK UNIFIED IDEOGRAPH + {0xD1F2, 0x683A}, //7211 #CJK UNIFIED IDEOGRAPH + {0xD1F3, 0x6825}, //7212 #CJK UNIFIED IDEOGRAPH + {0xD1F4, 0x6820}, //7213 #CJK UNIFIED IDEOGRAPH + {0xD1F5, 0x6B2C}, //7214 #CJK UNIFIED IDEOGRAPH + {0xD1F6, 0x6B2F}, //7215 #CJK UNIFIED IDEOGRAPH + {0xD1F7, 0x6B2D}, //7216 #CJK UNIFIED IDEOGRAPH + {0xD1F8, 0x6B31}, //7217 #CJK UNIFIED IDEOGRAPH + {0xD1F9, 0x6B34}, //7218 #CJK UNIFIED IDEOGRAPH + {0xD1FA, 0x6B6D}, //7219 #CJK UNIFIED IDEOGRAPH + {0xD1FB, 0x8082}, //7220 #CJK UNIFIED IDEOGRAPH + {0xD1FC, 0x6B88}, //7221 #CJK UNIFIED IDEOGRAPH + {0xD1FD, 0x6BE6}, //7222 #CJK UNIFIED IDEOGRAPH + {0xD1FE, 0x6BE4}, //7223 #CJK UNIFIED IDEOGRAPH + {0xD240, 0x6BE8}, //7224 #CJK UNIFIED IDEOGRAPH + {0xD241, 0x6BE3}, //7225 #CJK UNIFIED IDEOGRAPH + {0xD242, 0x6BE2}, //7226 #CJK UNIFIED IDEOGRAPH + {0xD243, 0x6BE7}, //7227 #CJK UNIFIED IDEOGRAPH + {0xD244, 0x6C25}, //7228 #CJK UNIFIED IDEOGRAPH + {0xD245, 0x6D7A}, //7229 #CJK UNIFIED IDEOGRAPH + {0xD246, 0x6D63}, //7230 #CJK UNIFIED IDEOGRAPH + {0xD247, 0x6D64}, //7231 #CJK UNIFIED IDEOGRAPH + {0xD248, 0x6D76}, //7232 #CJK UNIFIED IDEOGRAPH + {0xD249, 0x6D0D}, //7233 #CJK UNIFIED IDEOGRAPH + {0xD24A, 0x6D61}, //7234 #CJK UNIFIED IDEOGRAPH + {0xD24B, 0x6D92}, //7235 #CJK UNIFIED IDEOGRAPH + {0xD24C, 0x6D58}, //7236 #CJK UNIFIED IDEOGRAPH + {0xD24D, 0x6D62}, //7237 #CJK UNIFIED IDEOGRAPH + {0xD24E, 0x6D6D}, //7238 #CJK UNIFIED IDEOGRAPH + {0xD24F, 0x6D6F}, //7239 #CJK UNIFIED IDEOGRAPH + {0xD250, 0x6D91}, //7240 #CJK UNIFIED IDEOGRAPH + {0xD251, 0x6D8D}, //7241 #CJK UNIFIED IDEOGRAPH + {0xD252, 0x6DEF}, //7242 #CJK UNIFIED IDEOGRAPH + {0xD253, 0x6D7F}, //7243 #CJK UNIFIED IDEOGRAPH + {0xD254, 0x6D86}, //7244 #CJK UNIFIED IDEOGRAPH + {0xD255, 0x6D5E}, //7245 #CJK UNIFIED IDEOGRAPH + {0xD256, 0x6D67}, //7246 #CJK UNIFIED IDEOGRAPH + {0xD257, 0x6D60}, //7247 #CJK UNIFIED IDEOGRAPH + {0xD258, 0x6D97}, //7248 #CJK UNIFIED IDEOGRAPH + {0xD259, 0x6D70}, //7249 #CJK UNIFIED IDEOGRAPH + {0xD25A, 0x6D7C}, //7250 #CJK UNIFIED IDEOGRAPH + {0xD25B, 0x6D5F}, //7251 #CJK UNIFIED IDEOGRAPH + {0xD25C, 0x6D82}, //7252 #CJK UNIFIED IDEOGRAPH + {0xD25D, 0x6D98}, //7253 #CJK UNIFIED IDEOGRAPH + {0xD25E, 0x6D2F}, //7254 #CJK UNIFIED IDEOGRAPH + {0xD25F, 0x6D68}, //7255 #CJK UNIFIED IDEOGRAPH + {0xD260, 0x6D8B}, //7256 #CJK UNIFIED IDEOGRAPH + {0xD261, 0x6D7E}, //7257 #CJK UNIFIED IDEOGRAPH + {0xD262, 0x6D80}, //7258 #CJK UNIFIED IDEOGRAPH + {0xD263, 0x6D84}, //7259 #CJK UNIFIED IDEOGRAPH + {0xD264, 0x6D16}, //7260 #CJK UNIFIED IDEOGRAPH + {0xD265, 0x6D83}, //7261 #CJK UNIFIED IDEOGRAPH + {0xD266, 0x6D7B}, //7262 #CJK UNIFIED IDEOGRAPH + {0xD267, 0x6D7D}, //7263 #CJK UNIFIED IDEOGRAPH + {0xD268, 0x6D75}, //7264 #CJK UNIFIED IDEOGRAPH + {0xD269, 0x6D90}, //7265 #CJK UNIFIED IDEOGRAPH + {0xD26A, 0x70DC}, //7266 #CJK UNIFIED IDEOGRAPH + {0xD26B, 0x70D3}, //7267 #CJK UNIFIED IDEOGRAPH + {0xD26C, 0x70D1}, //7268 #CJK UNIFIED IDEOGRAPH + {0xD26D, 0x70DD}, //7269 #CJK UNIFIED IDEOGRAPH + {0xD26E, 0x70CB}, //7270 #CJK UNIFIED IDEOGRAPH + {0xD26F, 0x7F39}, //7271 #CJK UNIFIED IDEOGRAPH + {0xD270, 0x70E2}, //7272 #CJK UNIFIED IDEOGRAPH + {0xD271, 0x70D7}, //7273 #CJK UNIFIED IDEOGRAPH + {0xD272, 0x70D2}, //7274 #CJK UNIFIED IDEOGRAPH + {0xD273, 0x70DE}, //7275 #CJK UNIFIED IDEOGRAPH + {0xD274, 0x70E0}, //7276 #CJK UNIFIED IDEOGRAPH + {0xD275, 0x70D4}, //7277 #CJK UNIFIED IDEOGRAPH + {0xD276, 0x70CD}, //7278 #CJK UNIFIED IDEOGRAPH + {0xD277, 0x70C5}, //7279 #CJK UNIFIED IDEOGRAPH + {0xD278, 0x70C6}, //7280 #CJK UNIFIED IDEOGRAPH + {0xD279, 0x70C7}, //7281 #CJK UNIFIED IDEOGRAPH + {0xD27A, 0x70DA}, //7282 #CJK UNIFIED IDEOGRAPH + {0xD27B, 0x70CE}, //7283 #CJK UNIFIED IDEOGRAPH + {0xD27C, 0x70E1}, //7284 #CJK UNIFIED IDEOGRAPH + {0xD27D, 0x7242}, //7285 #CJK UNIFIED IDEOGRAPH + {0xD27E, 0x7278}, //7286 #CJK UNIFIED IDEOGRAPH + {0xD2A1, 0x7277}, //7287 #CJK UNIFIED IDEOGRAPH + {0xD2A2, 0x7276}, //7288 #CJK UNIFIED IDEOGRAPH + {0xD2A3, 0x7300}, //7289 #CJK UNIFIED IDEOGRAPH + {0xD2A4, 0x72FA}, //7290 #CJK UNIFIED IDEOGRAPH + {0xD2A5, 0x72F4}, //7291 #CJK UNIFIED IDEOGRAPH + {0xD2A6, 0x72FE}, //7292 #CJK UNIFIED IDEOGRAPH + {0xD2A7, 0x72F6}, //7293 #CJK UNIFIED IDEOGRAPH + {0xD2A8, 0x72F3}, //7294 #CJK UNIFIED IDEOGRAPH + {0xD2A9, 0x72FB}, //7295 #CJK UNIFIED IDEOGRAPH + {0xD2AA, 0x7301}, //7296 #CJK UNIFIED IDEOGRAPH + {0xD2AB, 0x73D3}, //7297 #CJK UNIFIED IDEOGRAPH + {0xD2AC, 0x73D9}, //7298 #CJK UNIFIED IDEOGRAPH + {0xD2AD, 0x73E5}, //7299 #CJK UNIFIED IDEOGRAPH + {0xD2AE, 0x73D6}, //7300 #CJK UNIFIED IDEOGRAPH + {0xD2AF, 0x73BC}, //7301 #CJK UNIFIED IDEOGRAPH + {0xD2B0, 0x73E7}, //7302 #CJK UNIFIED IDEOGRAPH + {0xD2B1, 0x73E3}, //7303 #CJK UNIFIED IDEOGRAPH + {0xD2B2, 0x73E9}, //7304 #CJK UNIFIED IDEOGRAPH + {0xD2B3, 0x73DC}, //7305 #CJK UNIFIED IDEOGRAPH + {0xD2B4, 0x73D2}, //7306 #CJK UNIFIED IDEOGRAPH + {0xD2B5, 0x73DB}, //7307 #CJK UNIFIED IDEOGRAPH + {0xD2B6, 0x73D4}, //7308 #CJK UNIFIED IDEOGRAPH + {0xD2B7, 0x73DD}, //7309 #CJK UNIFIED IDEOGRAPH + {0xD2B8, 0x73DA}, //7310 #CJK UNIFIED IDEOGRAPH + {0xD2B9, 0x73D7}, //7311 #CJK UNIFIED IDEOGRAPH + {0xD2BA, 0x73D8}, //7312 #CJK UNIFIED IDEOGRAPH + {0xD2BB, 0x73E8}, //7313 #CJK UNIFIED IDEOGRAPH + {0xD2BC, 0x74DE}, //7314 #CJK UNIFIED IDEOGRAPH + {0xD2BD, 0x74DF}, //7315 #CJK UNIFIED IDEOGRAPH + {0xD2BE, 0x74F4}, //7316 #CJK UNIFIED IDEOGRAPH + {0xD2BF, 0x74F5}, //7317 #CJK UNIFIED IDEOGRAPH + {0xD2C0, 0x7521}, //7318 #CJK UNIFIED IDEOGRAPH + {0xD2C1, 0x755B}, //7319 #CJK UNIFIED IDEOGRAPH + {0xD2C2, 0x755F}, //7320 #CJK UNIFIED IDEOGRAPH + {0xD2C3, 0x75B0}, //7321 #CJK UNIFIED IDEOGRAPH + {0xD2C4, 0x75C1}, //7322 #CJK UNIFIED IDEOGRAPH + {0xD2C5, 0x75BB}, //7323 #CJK UNIFIED IDEOGRAPH + {0xD2C6, 0x75C4}, //7324 #CJK UNIFIED IDEOGRAPH + {0xD2C7, 0x75C0}, //7325 #CJK UNIFIED IDEOGRAPH + {0xD2C8, 0x75BF}, //7326 #CJK UNIFIED IDEOGRAPH + {0xD2C9, 0x75B6}, //7327 #CJK UNIFIED IDEOGRAPH + {0xD2CA, 0x75BA}, //7328 #CJK UNIFIED IDEOGRAPH + {0xD2CB, 0x768A}, //7329 #CJK UNIFIED IDEOGRAPH + {0xD2CC, 0x76C9}, //7330 #CJK UNIFIED IDEOGRAPH + {0xD2CD, 0x771D}, //7331 #CJK UNIFIED IDEOGRAPH + {0xD2CE, 0x771B}, //7332 #CJK UNIFIED IDEOGRAPH + {0xD2CF, 0x7710}, //7333 #CJK UNIFIED IDEOGRAPH + {0xD2D0, 0x7713}, //7334 #CJK UNIFIED IDEOGRAPH + {0xD2D1, 0x7712}, //7335 #CJK UNIFIED IDEOGRAPH + {0xD2D2, 0x7723}, //7336 #CJK UNIFIED IDEOGRAPH + {0xD2D3, 0x7711}, //7337 #CJK UNIFIED IDEOGRAPH + {0xD2D4, 0x7715}, //7338 #CJK UNIFIED IDEOGRAPH + {0xD2D5, 0x7719}, //7339 #CJK UNIFIED IDEOGRAPH + {0xD2D6, 0x771A}, //7340 #CJK UNIFIED IDEOGRAPH + {0xD2D7, 0x7722}, //7341 #CJK UNIFIED IDEOGRAPH + {0xD2D8, 0x7727}, //7342 #CJK UNIFIED IDEOGRAPH + {0xD2D9, 0x7823}, //7343 #CJK UNIFIED IDEOGRAPH + {0xD2DA, 0x782C}, //7344 #CJK UNIFIED IDEOGRAPH + {0xD2DB, 0x7822}, //7345 #CJK UNIFIED IDEOGRAPH + {0xD2DC, 0x7835}, //7346 #CJK UNIFIED IDEOGRAPH + {0xD2DD, 0x782F}, //7347 #CJK UNIFIED IDEOGRAPH + {0xD2DE, 0x7828}, //7348 #CJK UNIFIED IDEOGRAPH + {0xD2DF, 0x782E}, //7349 #CJK UNIFIED IDEOGRAPH + {0xD2E0, 0x782B}, //7350 #CJK UNIFIED IDEOGRAPH + {0xD2E1, 0x7821}, //7351 #CJK UNIFIED IDEOGRAPH + {0xD2E2, 0x7829}, //7352 #CJK UNIFIED IDEOGRAPH + {0xD2E3, 0x7833}, //7353 #CJK UNIFIED IDEOGRAPH + {0xD2E4, 0x782A}, //7354 #CJK UNIFIED IDEOGRAPH + {0xD2E5, 0x7831}, //7355 #CJK UNIFIED IDEOGRAPH + {0xD2E6, 0x7954}, //7356 #CJK UNIFIED IDEOGRAPH + {0xD2E7, 0x795B}, //7357 #CJK UNIFIED IDEOGRAPH + {0xD2E8, 0x794F}, //7358 #CJK UNIFIED IDEOGRAPH + {0xD2E9, 0x795C}, //7359 #CJK UNIFIED IDEOGRAPH + {0xD2EA, 0x7953}, //7360 #CJK UNIFIED IDEOGRAPH + {0xD2EB, 0x7952}, //7361 #CJK UNIFIED IDEOGRAPH + {0xD2EC, 0x7951}, //7362 #CJK UNIFIED IDEOGRAPH + {0xD2ED, 0x79EB}, //7363 #CJK UNIFIED IDEOGRAPH + {0xD2EE, 0x79EC}, //7364 #CJK UNIFIED IDEOGRAPH + {0xD2EF, 0x79E0}, //7365 #CJK UNIFIED IDEOGRAPH + {0xD2F0, 0x79EE}, //7366 #CJK UNIFIED IDEOGRAPH + {0xD2F1, 0x79ED}, //7367 #CJK UNIFIED IDEOGRAPH + {0xD2F2, 0x79EA}, //7368 #CJK UNIFIED IDEOGRAPH + {0xD2F3, 0x79DC}, //7369 #CJK UNIFIED IDEOGRAPH + {0xD2F4, 0x79DE}, //7370 #CJK UNIFIED IDEOGRAPH + {0xD2F5, 0x79DD}, //7371 #CJK UNIFIED IDEOGRAPH + {0xD2F6, 0x7A86}, //7372 #CJK UNIFIED IDEOGRAPH + {0xD2F7, 0x7A89}, //7373 #CJK UNIFIED IDEOGRAPH + {0xD2F8, 0x7A85}, //7374 #CJK UNIFIED IDEOGRAPH + {0xD2F9, 0x7A8B}, //7375 #CJK UNIFIED IDEOGRAPH + {0xD2FA, 0x7A8C}, //7376 #CJK UNIFIED IDEOGRAPH + {0xD2FB, 0x7A8A}, //7377 #CJK UNIFIED IDEOGRAPH + {0xD2FC, 0x7A87}, //7378 #CJK UNIFIED IDEOGRAPH + {0xD2FD, 0x7AD8}, //7379 #CJK UNIFIED IDEOGRAPH + {0xD2FE, 0x7B10}, //7380 #CJK UNIFIED IDEOGRAPH + {0xD340, 0x7B04}, //7381 #CJK UNIFIED IDEOGRAPH + {0xD341, 0x7B13}, //7382 #CJK UNIFIED IDEOGRAPH + {0xD342, 0x7B05}, //7383 #CJK UNIFIED IDEOGRAPH + {0xD343, 0x7B0F}, //7384 #CJK UNIFIED IDEOGRAPH + {0xD344, 0x7B08}, //7385 #CJK UNIFIED IDEOGRAPH + {0xD345, 0x7B0A}, //7386 #CJK UNIFIED IDEOGRAPH + {0xD346, 0x7B0E}, //7387 #CJK UNIFIED IDEOGRAPH + {0xD347, 0x7B09}, //7388 #CJK UNIFIED IDEOGRAPH + {0xD348, 0x7B12}, //7389 #CJK UNIFIED IDEOGRAPH + {0xD349, 0x7C84}, //7390 #CJK UNIFIED IDEOGRAPH + {0xD34A, 0x7C91}, //7391 #CJK UNIFIED IDEOGRAPH + {0xD34B, 0x7C8A}, //7392 #CJK UNIFIED IDEOGRAPH + {0xD34C, 0x7C8C}, //7393 #CJK UNIFIED IDEOGRAPH + {0xD34D, 0x7C88}, //7394 #CJK UNIFIED IDEOGRAPH + {0xD34E, 0x7C8D}, //7395 #CJK UNIFIED IDEOGRAPH + {0xD34F, 0x7C85}, //7396 #CJK UNIFIED IDEOGRAPH + {0xD350, 0x7D1E}, //7397 #CJK UNIFIED IDEOGRAPH + {0xD351, 0x7D1D}, //7398 #CJK UNIFIED IDEOGRAPH + {0xD352, 0x7D11}, //7399 #CJK UNIFIED IDEOGRAPH + {0xD353, 0x7D0E}, //7400 #CJK UNIFIED IDEOGRAPH + {0xD354, 0x7D18}, //7401 #CJK UNIFIED IDEOGRAPH + {0xD355, 0x7D16}, //7402 #CJK UNIFIED IDEOGRAPH + {0xD356, 0x7D13}, //7403 #CJK UNIFIED IDEOGRAPH + {0xD357, 0x7D1F}, //7404 #CJK UNIFIED IDEOGRAPH + {0xD358, 0x7D12}, //7405 #CJK UNIFIED IDEOGRAPH + {0xD359, 0x7D0F}, //7406 #CJK UNIFIED IDEOGRAPH + {0xD35A, 0x7D0C}, //7407 #CJK UNIFIED IDEOGRAPH + {0xD35B, 0x7F5C}, //7408 #CJK UNIFIED IDEOGRAPH + {0xD35C, 0x7F61}, //7409 #CJK UNIFIED IDEOGRAPH + {0xD35D, 0x7F5E}, //7410 #CJK UNIFIED IDEOGRAPH + {0xD35E, 0x7F60}, //7411 #CJK UNIFIED IDEOGRAPH + {0xD35F, 0x7F5D}, //7412 #CJK UNIFIED IDEOGRAPH + {0xD360, 0x7F5B}, //7413 #CJK UNIFIED IDEOGRAPH + {0xD361, 0x7F96}, //7414 #CJK UNIFIED IDEOGRAPH + {0xD362, 0x7F92}, //7415 #CJK UNIFIED IDEOGRAPH + {0xD363, 0x7FC3}, //7416 #CJK UNIFIED IDEOGRAPH + {0xD364, 0x7FC2}, //7417 #CJK UNIFIED IDEOGRAPH + {0xD365, 0x7FC0}, //7418 #CJK UNIFIED IDEOGRAPH + {0xD366, 0x8016}, //7419 #CJK UNIFIED IDEOGRAPH + {0xD367, 0x803E}, //7420 #CJK UNIFIED IDEOGRAPH + {0xD368, 0x8039}, //7421 #CJK UNIFIED IDEOGRAPH + {0xD369, 0x80FA}, //7422 #CJK UNIFIED IDEOGRAPH + {0xD36A, 0x80F2}, //7423 #CJK UNIFIED IDEOGRAPH + {0xD36B, 0x80F9}, //7424 #CJK UNIFIED IDEOGRAPH + {0xD36C, 0x80F5}, //7425 #CJK UNIFIED IDEOGRAPH + {0xD36D, 0x8101}, //7426 #CJK UNIFIED IDEOGRAPH + {0xD36E, 0x80FB}, //7427 #CJK UNIFIED IDEOGRAPH + {0xD36F, 0x8100}, //7428 #CJK UNIFIED IDEOGRAPH + {0xD370, 0x8201}, //7429 #CJK UNIFIED IDEOGRAPH + {0xD371, 0x822F}, //7430 #CJK UNIFIED IDEOGRAPH + {0xD372, 0x8225}, //7431 #CJK UNIFIED IDEOGRAPH + {0xD373, 0x8333}, //7432 #CJK UNIFIED IDEOGRAPH + {0xD374, 0x832D}, //7433 #CJK UNIFIED IDEOGRAPH + {0xD375, 0x8344}, //7434 #CJK UNIFIED IDEOGRAPH + {0xD376, 0x8319}, //7435 #CJK UNIFIED IDEOGRAPH + {0xD377, 0x8351}, //7436 #CJK UNIFIED IDEOGRAPH + {0xD378, 0x8325}, //7437 #CJK UNIFIED IDEOGRAPH + {0xD379, 0x8356}, //7438 #CJK UNIFIED IDEOGRAPH + {0xD37A, 0x833F}, //7439 #CJK UNIFIED IDEOGRAPH + {0xD37B, 0x8341}, //7440 #CJK UNIFIED IDEOGRAPH + {0xD37C, 0x8326}, //7441 #CJK UNIFIED IDEOGRAPH + {0xD37D, 0x831C}, //7442 #CJK UNIFIED IDEOGRAPH + {0xD37E, 0x8322}, //7443 #CJK UNIFIED IDEOGRAPH + {0xD3A1, 0x8342}, //7444 #CJK UNIFIED IDEOGRAPH + {0xD3A2, 0x834E}, //7445 #CJK UNIFIED IDEOGRAPH + {0xD3A3, 0x831B}, //7446 #CJK UNIFIED IDEOGRAPH + {0xD3A4, 0x832A}, //7447 #CJK UNIFIED IDEOGRAPH + {0xD3A5, 0x8308}, //7448 #CJK UNIFIED IDEOGRAPH + {0xD3A6, 0x833C}, //7449 #CJK UNIFIED IDEOGRAPH + {0xD3A7, 0x834D}, //7450 #CJK UNIFIED IDEOGRAPH + {0xD3A8, 0x8316}, //7451 #CJK UNIFIED IDEOGRAPH + {0xD3A9, 0x8324}, //7452 #CJK UNIFIED IDEOGRAPH + {0xD3AA, 0x8320}, //7453 #CJK UNIFIED IDEOGRAPH + {0xD3AB, 0x8337}, //7454 #CJK UNIFIED IDEOGRAPH + {0xD3AC, 0x832F}, //7455 #CJK UNIFIED IDEOGRAPH + {0xD3AD, 0x8329}, //7456 #CJK UNIFIED IDEOGRAPH + {0xD3AE, 0x8347}, //7457 #CJK UNIFIED IDEOGRAPH + {0xD3AF, 0x8345}, //7458 #CJK UNIFIED IDEOGRAPH + {0xD3B0, 0x834C}, //7459 #CJK UNIFIED IDEOGRAPH + {0xD3B1, 0x8353}, //7460 #CJK UNIFIED IDEOGRAPH + {0xD3B2, 0x831E}, //7461 #CJK UNIFIED IDEOGRAPH + {0xD3B3, 0x832C}, //7462 #CJK UNIFIED IDEOGRAPH + {0xD3B4, 0x834B}, //7463 #CJK UNIFIED IDEOGRAPH + {0xD3B5, 0x8327}, //7464 #CJK UNIFIED IDEOGRAPH + {0xD3B6, 0x8348}, //7465 #CJK UNIFIED IDEOGRAPH + {0xD3B7, 0x8653}, //7466 #CJK UNIFIED IDEOGRAPH + {0xD3B8, 0x8652}, //7467 #CJK UNIFIED IDEOGRAPH + {0xD3B9, 0x86A2}, //7468 #CJK UNIFIED IDEOGRAPH + {0xD3BA, 0x86A8}, //7469 #CJK UNIFIED IDEOGRAPH + {0xD3BB, 0x8696}, //7470 #CJK UNIFIED IDEOGRAPH + {0xD3BC, 0x868D}, //7471 #CJK UNIFIED IDEOGRAPH + {0xD3BD, 0x8691}, //7472 #CJK UNIFIED IDEOGRAPH + {0xD3BE, 0x869E}, //7473 #CJK UNIFIED IDEOGRAPH + {0xD3BF, 0x8687}, //7474 #CJK UNIFIED IDEOGRAPH + {0xD3C0, 0x8697}, //7475 #CJK UNIFIED IDEOGRAPH + {0xD3C1, 0x8686}, //7476 #CJK UNIFIED IDEOGRAPH + {0xD3C2, 0x868B}, //7477 #CJK UNIFIED IDEOGRAPH + {0xD3C3, 0x869A}, //7478 #CJK UNIFIED IDEOGRAPH + {0xD3C4, 0x8685}, //7479 #CJK UNIFIED IDEOGRAPH + {0xD3C5, 0x86A5}, //7480 #CJK UNIFIED IDEOGRAPH + {0xD3C6, 0x8699}, //7481 #CJK UNIFIED IDEOGRAPH + {0xD3C7, 0x86A1}, //7482 #CJK UNIFIED IDEOGRAPH + {0xD3C8, 0x86A7}, //7483 #CJK UNIFIED IDEOGRAPH + {0xD3C9, 0x8695}, //7484 #CJK UNIFIED IDEOGRAPH + {0xD3CA, 0x8698}, //7485 #CJK UNIFIED IDEOGRAPH + {0xD3CB, 0x868E}, //7486 #CJK UNIFIED IDEOGRAPH + {0xD3CC, 0x869D}, //7487 #CJK UNIFIED IDEOGRAPH + {0xD3CD, 0x8690}, //7488 #CJK UNIFIED IDEOGRAPH + {0xD3CE, 0x8694}, //7489 #CJK UNIFIED IDEOGRAPH + {0xD3CF, 0x8843}, //7490 #CJK UNIFIED IDEOGRAPH + {0xD3D0, 0x8844}, //7491 #CJK UNIFIED IDEOGRAPH + {0xD3D1, 0x886D}, //7492 #CJK UNIFIED IDEOGRAPH + {0xD3D2, 0x8875}, //7493 #CJK UNIFIED IDEOGRAPH + {0xD3D3, 0x8876}, //7494 #CJK UNIFIED IDEOGRAPH + {0xD3D4, 0x8872}, //7495 #CJK UNIFIED IDEOGRAPH + {0xD3D5, 0x8880}, //7496 #CJK UNIFIED IDEOGRAPH + {0xD3D6, 0x8871}, //7497 #CJK UNIFIED IDEOGRAPH + {0xD3D7, 0x887F}, //7498 #CJK UNIFIED IDEOGRAPH + {0xD3D8, 0x886F}, //7499 #CJK UNIFIED IDEOGRAPH + {0xD3D9, 0x8883}, //7500 #CJK UNIFIED IDEOGRAPH + {0xD3DA, 0x887E}, //7501 #CJK UNIFIED IDEOGRAPH + {0xD3DB, 0x8874}, //7502 #CJK UNIFIED IDEOGRAPH + {0xD3DC, 0x887C}, //7503 #CJK UNIFIED IDEOGRAPH + {0xD3DD, 0x8A12}, //7504 #CJK UNIFIED IDEOGRAPH + {0xD3DE, 0x8C47}, //7505 #CJK UNIFIED IDEOGRAPH + {0xD3DF, 0x8C57}, //7506 #CJK UNIFIED IDEOGRAPH + {0xD3E0, 0x8C7B}, //7507 #CJK UNIFIED IDEOGRAPH + {0xD3E1, 0x8CA4}, //7508 #CJK UNIFIED IDEOGRAPH + {0xD3E2, 0x8CA3}, //7509 #CJK UNIFIED IDEOGRAPH + {0xD3E3, 0x8D76}, //7510 #CJK UNIFIED IDEOGRAPH + {0xD3E4, 0x8D78}, //7511 #CJK UNIFIED IDEOGRAPH + {0xD3E5, 0x8DB5}, //7512 #CJK UNIFIED IDEOGRAPH + {0xD3E6, 0x8DB7}, //7513 #CJK UNIFIED IDEOGRAPH + {0xD3E7, 0x8DB6}, //7514 #CJK UNIFIED IDEOGRAPH + {0xD3E8, 0x8ED1}, //7515 #CJK UNIFIED IDEOGRAPH + {0xD3E9, 0x8ED3}, //7516 #CJK UNIFIED IDEOGRAPH + {0xD3EA, 0x8FFE}, //7517 #CJK UNIFIED IDEOGRAPH + {0xD3EB, 0x8FF5}, //7518 #CJK UNIFIED IDEOGRAPH + {0xD3EC, 0x9002}, //7519 #CJK UNIFIED IDEOGRAPH + {0xD3ED, 0x8FFF}, //7520 #CJK UNIFIED IDEOGRAPH + {0xD3EE, 0x8FFB}, //7521 #CJK UNIFIED IDEOGRAPH + {0xD3EF, 0x9004}, //7522 #CJK UNIFIED IDEOGRAPH + {0xD3F0, 0x8FFC}, //7523 #CJK UNIFIED IDEOGRAPH + {0xD3F1, 0x8FF6}, //7524 #CJK UNIFIED IDEOGRAPH + {0xD3F2, 0x90D6}, //7525 #CJK UNIFIED IDEOGRAPH + {0xD3F3, 0x90E0}, //7526 #CJK UNIFIED IDEOGRAPH + {0xD3F4, 0x90D9}, //7527 #CJK UNIFIED IDEOGRAPH + {0xD3F5, 0x90DA}, //7528 #CJK UNIFIED IDEOGRAPH + {0xD3F6, 0x90E3}, //7529 #CJK UNIFIED IDEOGRAPH + {0xD3F7, 0x90DF}, //7530 #CJK UNIFIED IDEOGRAPH + {0xD3F8, 0x90E5}, //7531 #CJK UNIFIED IDEOGRAPH + {0xD3F9, 0x90D8}, //7532 #CJK UNIFIED IDEOGRAPH + {0xD3FA, 0x90DB}, //7533 #CJK UNIFIED IDEOGRAPH + {0xD3FB, 0x90D7}, //7534 #CJK UNIFIED IDEOGRAPH + {0xD3FC, 0x90DC}, //7535 #CJK UNIFIED IDEOGRAPH + {0xD3FD, 0x90E4}, //7536 #CJK UNIFIED IDEOGRAPH + {0xD3FE, 0x9150}, //7537 #CJK UNIFIED IDEOGRAPH + {0xD440, 0x914E}, //7538 #CJK UNIFIED IDEOGRAPH + {0xD441, 0x914F}, //7539 #CJK UNIFIED IDEOGRAPH + {0xD442, 0x91D5}, //7540 #CJK UNIFIED IDEOGRAPH + {0xD443, 0x91E2}, //7541 #CJK UNIFIED IDEOGRAPH + {0xD444, 0x91DA}, //7542 #CJK UNIFIED IDEOGRAPH + {0xD445, 0x965C}, //7543 #CJK UNIFIED IDEOGRAPH + {0xD446, 0x965F}, //7544 #CJK UNIFIED IDEOGRAPH + {0xD447, 0x96BC}, //7545 #CJK UNIFIED IDEOGRAPH + {0xD448, 0x98E3}, //7546 #CJK UNIFIED IDEOGRAPH + {0xD449, 0x9ADF}, //7547 #CJK UNIFIED IDEOGRAPH + {0xD44A, 0x9B2F}, //7548 #CJK UNIFIED IDEOGRAPH + {0xD44B, 0x4E7F}, //7549 #CJK UNIFIED IDEOGRAPH + {0xD44C, 0x5070}, //7550 #CJK UNIFIED IDEOGRAPH + {0xD44D, 0x506A}, //7551 #CJK UNIFIED IDEOGRAPH + {0xD44E, 0x5061}, //7552 #CJK UNIFIED IDEOGRAPH + {0xD44F, 0x505E}, //7553 #CJK UNIFIED IDEOGRAPH + {0xD450, 0x5060}, //7554 #CJK UNIFIED IDEOGRAPH + {0xD451, 0x5053}, //7555 #CJK UNIFIED IDEOGRAPH + {0xD452, 0x504B}, //7556 #CJK UNIFIED IDEOGRAPH + {0xD453, 0x505D}, //7557 #CJK UNIFIED IDEOGRAPH + {0xD454, 0x5072}, //7558 #CJK UNIFIED IDEOGRAPH + {0xD455, 0x5048}, //7559 #CJK UNIFIED IDEOGRAPH + {0xD456, 0x504D}, //7560 #CJK UNIFIED IDEOGRAPH + {0xD457, 0x5041}, //7561 #CJK UNIFIED IDEOGRAPH + {0xD458, 0x505B}, //7562 #CJK UNIFIED IDEOGRAPH + {0xD459, 0x504A}, //7563 #CJK UNIFIED IDEOGRAPH + {0xD45A, 0x5062}, //7564 #CJK UNIFIED IDEOGRAPH + {0xD45B, 0x5015}, //7565 #CJK UNIFIED IDEOGRAPH + {0xD45C, 0x5045}, //7566 #CJK UNIFIED IDEOGRAPH + {0xD45D, 0x505F}, //7567 #CJK UNIFIED IDEOGRAPH + {0xD45E, 0x5069}, //7568 #CJK UNIFIED IDEOGRAPH + {0xD45F, 0x506B}, //7569 #CJK UNIFIED IDEOGRAPH + {0xD460, 0x5063}, //7570 #CJK UNIFIED IDEOGRAPH + {0xD461, 0x5064}, //7571 #CJK UNIFIED IDEOGRAPH + {0xD462, 0x5046}, //7572 #CJK UNIFIED IDEOGRAPH + {0xD463, 0x5040}, //7573 #CJK UNIFIED IDEOGRAPH + {0xD464, 0x506E}, //7574 #CJK UNIFIED IDEOGRAPH + {0xD465, 0x5073}, //7575 #CJK UNIFIED IDEOGRAPH + {0xD466, 0x5057}, //7576 #CJK UNIFIED IDEOGRAPH + {0xD467, 0x5051}, //7577 #CJK UNIFIED IDEOGRAPH + {0xD468, 0x51D0}, //7578 #CJK UNIFIED IDEOGRAPH + {0xD469, 0x526B}, //7579 #CJK UNIFIED IDEOGRAPH + {0xD46A, 0x526D}, //7580 #CJK UNIFIED IDEOGRAPH + {0xD46B, 0x526C}, //7581 #CJK UNIFIED IDEOGRAPH + {0xD46C, 0x526E}, //7582 #CJK UNIFIED IDEOGRAPH + {0xD46D, 0x52D6}, //7583 #CJK UNIFIED IDEOGRAPH + {0xD46E, 0x52D3}, //7584 #CJK UNIFIED IDEOGRAPH + {0xD46F, 0x532D}, //7585 #CJK UNIFIED IDEOGRAPH + {0xD470, 0x539C}, //7586 #CJK UNIFIED IDEOGRAPH + {0xD471, 0x5575}, //7587 #CJK UNIFIED IDEOGRAPH + {0xD472, 0x5576}, //7588 #CJK UNIFIED IDEOGRAPH + {0xD473, 0x553C}, //7589 #CJK UNIFIED IDEOGRAPH + {0xD474, 0x554D}, //7590 #CJK UNIFIED IDEOGRAPH + {0xD475, 0x5550}, //7591 #CJK UNIFIED IDEOGRAPH + {0xD476, 0x5534}, //7592 #CJK UNIFIED IDEOGRAPH + {0xD477, 0x552A}, //7593 #CJK UNIFIED IDEOGRAPH + {0xD478, 0x5551}, //7594 #CJK UNIFIED IDEOGRAPH + {0xD479, 0x5562}, //7595 #CJK UNIFIED IDEOGRAPH + {0xD47A, 0x5536}, //7596 #CJK UNIFIED IDEOGRAPH + {0xD47B, 0x5535}, //7597 #CJK UNIFIED IDEOGRAPH + {0xD47C, 0x5530}, //7598 #CJK UNIFIED IDEOGRAPH + {0xD47D, 0x5552}, //7599 #CJK UNIFIED IDEOGRAPH + {0xD47E, 0x5545}, //7600 #CJK UNIFIED IDEOGRAPH + {0xD4A1, 0x550C}, //7601 #CJK UNIFIED IDEOGRAPH + {0xD4A2, 0x5532}, //7602 #CJK UNIFIED IDEOGRAPH + {0xD4A3, 0x5565}, //7603 #CJK UNIFIED IDEOGRAPH + {0xD4A4, 0x554E}, //7604 #CJK UNIFIED IDEOGRAPH + {0xD4A5, 0x5539}, //7605 #CJK UNIFIED IDEOGRAPH + {0xD4A6, 0x5548}, //7606 #CJK UNIFIED IDEOGRAPH + {0xD4A7, 0x552D}, //7607 #CJK UNIFIED IDEOGRAPH + {0xD4A8, 0x553B}, //7608 #CJK UNIFIED IDEOGRAPH + {0xD4A9, 0x5540}, //7609 #CJK UNIFIED IDEOGRAPH + {0xD4AA, 0x554B}, //7610 #CJK UNIFIED IDEOGRAPH + {0xD4AB, 0x570A}, //7611 #CJK UNIFIED IDEOGRAPH + {0xD4AC, 0x5707}, //7612 #CJK UNIFIED IDEOGRAPH + {0xD4AD, 0x57FB}, //7613 #CJK UNIFIED IDEOGRAPH + {0xD4AE, 0x5814}, //7614 #CJK UNIFIED IDEOGRAPH + {0xD4AF, 0x57E2}, //7615 #CJK UNIFIED IDEOGRAPH + {0xD4B0, 0x57F6}, //7616 #CJK UNIFIED IDEOGRAPH + {0xD4B1, 0x57DC}, //7617 #CJK UNIFIED IDEOGRAPH + {0xD4B2, 0x57F4}, //7618 #CJK UNIFIED IDEOGRAPH + {0xD4B3, 0x5800}, //7619 #CJK UNIFIED IDEOGRAPH + {0xD4B4, 0x57ED}, //7620 #CJK UNIFIED IDEOGRAPH + {0xD4B5, 0x57FD}, //7621 #CJK UNIFIED IDEOGRAPH + {0xD4B6, 0x5808}, //7622 #CJK UNIFIED IDEOGRAPH + {0xD4B7, 0x57F8}, //7623 #CJK UNIFIED IDEOGRAPH + {0xD4B8, 0x580B}, //7624 #CJK UNIFIED IDEOGRAPH + {0xD4B9, 0x57F3}, //7625 #CJK UNIFIED IDEOGRAPH + {0xD4BA, 0x57CF}, //7626 #CJK UNIFIED IDEOGRAPH + {0xD4BB, 0x5807}, //7627 #CJK UNIFIED IDEOGRAPH + {0xD4BC, 0x57EE}, //7628 #CJK UNIFIED IDEOGRAPH + {0xD4BD, 0x57E3}, //7629 #CJK UNIFIED IDEOGRAPH + {0xD4BE, 0x57F2}, //7630 #CJK UNIFIED IDEOGRAPH + {0xD4BF, 0x57E5}, //7631 #CJK UNIFIED IDEOGRAPH + {0xD4C0, 0x57EC}, //7632 #CJK UNIFIED IDEOGRAPH + {0xD4C1, 0x57E1}, //7633 #CJK UNIFIED IDEOGRAPH + {0xD4C2, 0x580E}, //7634 #CJK UNIFIED IDEOGRAPH + {0xD4C3, 0x57FC}, //7635 #CJK UNIFIED IDEOGRAPH + {0xD4C4, 0x5810}, //7636 #CJK UNIFIED IDEOGRAPH + {0xD4C5, 0x57E7}, //7637 #CJK UNIFIED IDEOGRAPH + {0xD4C6, 0x5801}, //7638 #CJK UNIFIED IDEOGRAPH + {0xD4C7, 0x580C}, //7639 #CJK UNIFIED IDEOGRAPH + {0xD4C8, 0x57F1}, //7640 #CJK UNIFIED IDEOGRAPH + {0xD4C9, 0x57E9}, //7641 #CJK UNIFIED IDEOGRAPH + {0xD4CA, 0x57F0}, //7642 #CJK UNIFIED IDEOGRAPH + {0xD4CB, 0x580D}, //7643 #CJK UNIFIED IDEOGRAPH + {0xD4CC, 0x5804}, //7644 #CJK UNIFIED IDEOGRAPH + {0xD4CD, 0x595C}, //7645 #CJK UNIFIED IDEOGRAPH + {0xD4CE, 0x5A60}, //7646 #CJK UNIFIED IDEOGRAPH + {0xD4CF, 0x5A58}, //7647 #CJK UNIFIED IDEOGRAPH + {0xD4D0, 0x5A55}, //7648 #CJK UNIFIED IDEOGRAPH + {0xD4D1, 0x5A67}, //7649 #CJK UNIFIED IDEOGRAPH + {0xD4D2, 0x5A5E}, //7650 #CJK UNIFIED IDEOGRAPH + {0xD4D3, 0x5A38}, //7651 #CJK UNIFIED IDEOGRAPH + {0xD4D4, 0x5A35}, //7652 #CJK UNIFIED IDEOGRAPH + {0xD4D5, 0x5A6D}, //7653 #CJK UNIFIED IDEOGRAPH + {0xD4D6, 0x5A50}, //7654 #CJK UNIFIED IDEOGRAPH + {0xD4D7, 0x5A5F}, //7655 #CJK UNIFIED IDEOGRAPH + {0xD4D8, 0x5A65}, //7656 #CJK UNIFIED IDEOGRAPH + {0xD4D9, 0x5A6C}, //7657 #CJK UNIFIED IDEOGRAPH + {0xD4DA, 0x5A53}, //7658 #CJK UNIFIED IDEOGRAPH + {0xD4DB, 0x5A64}, //7659 #CJK UNIFIED IDEOGRAPH + {0xD4DC, 0x5A57}, //7660 #CJK UNIFIED IDEOGRAPH + {0xD4DD, 0x5A43}, //7661 #CJK UNIFIED IDEOGRAPH + {0xD4DE, 0x5A5D}, //7662 #CJK UNIFIED IDEOGRAPH + {0xD4DF, 0x5A52}, //7663 #CJK UNIFIED IDEOGRAPH + {0xD4E0, 0x5A44}, //7664 #CJK UNIFIED IDEOGRAPH + {0xD4E1, 0x5A5B}, //7665 #CJK UNIFIED IDEOGRAPH + {0xD4E2, 0x5A48}, //7666 #CJK UNIFIED IDEOGRAPH + {0xD4E3, 0x5A8E}, //7667 #CJK UNIFIED IDEOGRAPH + {0xD4E4, 0x5A3E}, //7668 #CJK UNIFIED IDEOGRAPH + {0xD4E5, 0x5A4D}, //7669 #CJK UNIFIED IDEOGRAPH + {0xD4E6, 0x5A39}, //7670 #CJK UNIFIED IDEOGRAPH + {0xD4E7, 0x5A4C}, //7671 #CJK UNIFIED IDEOGRAPH + {0xD4E8, 0x5A70}, //7672 #CJK UNIFIED IDEOGRAPH + {0xD4E9, 0x5A69}, //7673 #CJK UNIFIED IDEOGRAPH + {0xD4EA, 0x5A47}, //7674 #CJK UNIFIED IDEOGRAPH + {0xD4EB, 0x5A51}, //7675 #CJK UNIFIED IDEOGRAPH + {0xD4EC, 0x5A56}, //7676 #CJK UNIFIED IDEOGRAPH + {0xD4ED, 0x5A42}, //7677 #CJK UNIFIED IDEOGRAPH + {0xD4EE, 0x5A5C}, //7678 #CJK UNIFIED IDEOGRAPH + {0xD4EF, 0x5B72}, //7679 #CJK UNIFIED IDEOGRAPH + {0xD4F0, 0x5B6E}, //7680 #CJK UNIFIED IDEOGRAPH + {0xD4F1, 0x5BC1}, //7681 #CJK UNIFIED IDEOGRAPH + {0xD4F2, 0x5BC0}, //7682 #CJK UNIFIED IDEOGRAPH + {0xD4F3, 0x5C59}, //7683 #CJK UNIFIED IDEOGRAPH + {0xD4F4, 0x5D1E}, //7684 #CJK UNIFIED IDEOGRAPH + {0xD4F5, 0x5D0B}, //7685 #CJK UNIFIED IDEOGRAPH + {0xD4F6, 0x5D1D}, //7686 #CJK UNIFIED IDEOGRAPH + {0xD4F7, 0x5D1A}, //7687 #CJK UNIFIED IDEOGRAPH + {0xD4F8, 0x5D20}, //7688 #CJK UNIFIED IDEOGRAPH + {0xD4F9, 0x5D0C}, //7689 #CJK UNIFIED IDEOGRAPH + {0xD4FA, 0x5D28}, //7690 #CJK UNIFIED IDEOGRAPH + {0xD4FB, 0x5D0D}, //7691 #CJK UNIFIED IDEOGRAPH + {0xD4FC, 0x5D26}, //7692 #CJK UNIFIED IDEOGRAPH + {0xD4FD, 0x5D25}, //7693 #CJK UNIFIED IDEOGRAPH + {0xD4FE, 0x5D0F}, //7694 #CJK UNIFIED IDEOGRAPH + {0xD540, 0x5D30}, //7695 #CJK UNIFIED IDEOGRAPH + {0xD541, 0x5D12}, //7696 #CJK UNIFIED IDEOGRAPH + {0xD542, 0x5D23}, //7697 #CJK UNIFIED IDEOGRAPH + {0xD543, 0x5D1F}, //7698 #CJK UNIFIED IDEOGRAPH + {0xD544, 0x5D2E}, //7699 #CJK UNIFIED IDEOGRAPH + {0xD545, 0x5E3E}, //7700 #CJK UNIFIED IDEOGRAPH + {0xD546, 0x5E34}, //7701 #CJK UNIFIED IDEOGRAPH + {0xD547, 0x5EB1}, //7702 #CJK UNIFIED IDEOGRAPH + {0xD548, 0x5EB4}, //7703 #CJK UNIFIED IDEOGRAPH + {0xD549, 0x5EB9}, //7704 #CJK UNIFIED IDEOGRAPH + {0xD54A, 0x5EB2}, //7705 #CJK UNIFIED IDEOGRAPH + {0xD54B, 0x5EB3}, //7706 #CJK UNIFIED IDEOGRAPH + {0xD54C, 0x5F36}, //7707 #CJK UNIFIED IDEOGRAPH + {0xD54D, 0x5F38}, //7708 #CJK UNIFIED IDEOGRAPH + {0xD54E, 0x5F9B}, //7709 #CJK UNIFIED IDEOGRAPH + {0xD54F, 0x5F96}, //7710 #CJK UNIFIED IDEOGRAPH + {0xD550, 0x5F9F}, //7711 #CJK UNIFIED IDEOGRAPH + {0xD551, 0x608A}, //7712 #CJK UNIFIED IDEOGRAPH + {0xD552, 0x6090}, //7713 #CJK UNIFIED IDEOGRAPH + {0xD553, 0x6086}, //7714 #CJK UNIFIED IDEOGRAPH + {0xD554, 0x60BE}, //7715 #CJK UNIFIED IDEOGRAPH + {0xD555, 0x60B0}, //7716 #CJK UNIFIED IDEOGRAPH + {0xD556, 0x60BA}, //7717 #CJK UNIFIED IDEOGRAPH + {0xD557, 0x60D3}, //7718 #CJK UNIFIED IDEOGRAPH + {0xD558, 0x60D4}, //7719 #CJK UNIFIED IDEOGRAPH + {0xD559, 0x60CF}, //7720 #CJK UNIFIED IDEOGRAPH + {0xD55A, 0x60E4}, //7721 #CJK UNIFIED IDEOGRAPH + {0xD55B, 0x60D9}, //7722 #CJK UNIFIED IDEOGRAPH + {0xD55C, 0x60DD}, //7723 #CJK UNIFIED IDEOGRAPH + {0xD55D, 0x60C8}, //7724 #CJK UNIFIED IDEOGRAPH + {0xD55E, 0x60B1}, //7725 #CJK UNIFIED IDEOGRAPH + {0xD55F, 0x60DB}, //7726 #CJK UNIFIED IDEOGRAPH + {0xD560, 0x60B7}, //7727 #CJK UNIFIED IDEOGRAPH + {0xD561, 0x60CA}, //7728 #CJK UNIFIED IDEOGRAPH + {0xD562, 0x60BF}, //7729 #CJK UNIFIED IDEOGRAPH + {0xD563, 0x60C3}, //7730 #CJK UNIFIED IDEOGRAPH + {0xD564, 0x60CD}, //7731 #CJK UNIFIED IDEOGRAPH + {0xD565, 0x60C0}, //7732 #CJK UNIFIED IDEOGRAPH + {0xD566, 0x6332}, //7733 #CJK UNIFIED IDEOGRAPH + {0xD567, 0x6365}, //7734 #CJK UNIFIED IDEOGRAPH + {0xD568, 0x638A}, //7735 #CJK UNIFIED IDEOGRAPH + {0xD569, 0x6382}, //7736 #CJK UNIFIED IDEOGRAPH + {0xD56A, 0x637D}, //7737 #CJK UNIFIED IDEOGRAPH + {0xD56B, 0x63BD}, //7738 #CJK UNIFIED IDEOGRAPH + {0xD56C, 0x639E}, //7739 #CJK UNIFIED IDEOGRAPH + {0xD56D, 0x63AD}, //7740 #CJK UNIFIED IDEOGRAPH + {0xD56E, 0x639D}, //7741 #CJK UNIFIED IDEOGRAPH + {0xD56F, 0x6397}, //7742 #CJK UNIFIED IDEOGRAPH + {0xD570, 0x63AB}, //7743 #CJK UNIFIED IDEOGRAPH + {0xD571, 0x638E}, //7744 #CJK UNIFIED IDEOGRAPH + {0xD572, 0x636F}, //7745 #CJK UNIFIED IDEOGRAPH + {0xD573, 0x6387}, //7746 #CJK UNIFIED IDEOGRAPH + {0xD574, 0x6390}, //7747 #CJK UNIFIED IDEOGRAPH + {0xD575, 0x636E}, //7748 #CJK UNIFIED IDEOGRAPH + {0xD576, 0x63AF}, //7749 #CJK UNIFIED IDEOGRAPH + {0xD577, 0x6375}, //7750 #CJK UNIFIED IDEOGRAPH + {0xD578, 0x639C}, //7751 #CJK UNIFIED IDEOGRAPH + {0xD579, 0x636D}, //7752 #CJK UNIFIED IDEOGRAPH + {0xD57A, 0x63AE}, //7753 #CJK UNIFIED IDEOGRAPH + {0xD57B, 0x637C}, //7754 #CJK UNIFIED IDEOGRAPH + {0xD57C, 0x63A4}, //7755 #CJK UNIFIED IDEOGRAPH + {0xD57D, 0x633B}, //7756 #CJK UNIFIED IDEOGRAPH + {0xD57E, 0x639F}, //7757 #CJK UNIFIED IDEOGRAPH + {0xD5A1, 0x6378}, //7758 #CJK UNIFIED IDEOGRAPH + {0xD5A2, 0x6385}, //7759 #CJK UNIFIED IDEOGRAPH + {0xD5A3, 0x6381}, //7760 #CJK UNIFIED IDEOGRAPH + {0xD5A4, 0x6391}, //7761 #CJK UNIFIED IDEOGRAPH + {0xD5A5, 0x638D}, //7762 #CJK UNIFIED IDEOGRAPH + {0xD5A6, 0x6370}, //7763 #CJK UNIFIED IDEOGRAPH + {0xD5A7, 0x6553}, //7764 #CJK UNIFIED IDEOGRAPH + {0xD5A8, 0x65CD}, //7765 #CJK UNIFIED IDEOGRAPH + {0xD5A9, 0x6665}, //7766 #CJK UNIFIED IDEOGRAPH + {0xD5AA, 0x6661}, //7767 #CJK UNIFIED IDEOGRAPH + {0xD5AB, 0x665B}, //7768 #CJK UNIFIED IDEOGRAPH + {0xD5AC, 0x6659}, //7769 #CJK UNIFIED IDEOGRAPH + {0xD5AD, 0x665C}, //7770 #CJK UNIFIED IDEOGRAPH + {0xD5AE, 0x6662}, //7771 #CJK UNIFIED IDEOGRAPH + {0xD5AF, 0x6718}, //7772 #CJK UNIFIED IDEOGRAPH + {0xD5B0, 0x6879}, //7773 #CJK UNIFIED IDEOGRAPH + {0xD5B1, 0x6887}, //7774 #CJK UNIFIED IDEOGRAPH + {0xD5B2, 0x6890}, //7775 #CJK UNIFIED IDEOGRAPH + {0xD5B3, 0x689C}, //7776 #CJK UNIFIED IDEOGRAPH + {0xD5B4, 0x686D}, //7777 #CJK UNIFIED IDEOGRAPH + {0xD5B5, 0x686E}, //7778 #CJK UNIFIED IDEOGRAPH + {0xD5B6, 0x68AE}, //7779 #CJK UNIFIED IDEOGRAPH + {0xD5B7, 0x68AB}, //7780 #CJK UNIFIED IDEOGRAPH + {0xD5B8, 0x6956}, //7781 #CJK UNIFIED IDEOGRAPH + {0xD5B9, 0x686F}, //7782 #CJK UNIFIED IDEOGRAPH + {0xD5BA, 0x68A3}, //7783 #CJK UNIFIED IDEOGRAPH + {0xD5BB, 0x68AC}, //7784 #CJK UNIFIED IDEOGRAPH + {0xD5BC, 0x68A9}, //7785 #CJK UNIFIED IDEOGRAPH + {0xD5BD, 0x6875}, //7786 #CJK UNIFIED IDEOGRAPH + {0xD5BE, 0x6874}, //7787 #CJK UNIFIED IDEOGRAPH + {0xD5BF, 0x68B2}, //7788 #CJK UNIFIED IDEOGRAPH + {0xD5C0, 0x688F}, //7789 #CJK UNIFIED IDEOGRAPH + {0xD5C1, 0x6877}, //7790 #CJK UNIFIED IDEOGRAPH + {0xD5C2, 0x6892}, //7791 #CJK UNIFIED IDEOGRAPH + {0xD5C3, 0x687C}, //7792 #CJK UNIFIED IDEOGRAPH + {0xD5C4, 0x686B}, //7793 #CJK UNIFIED IDEOGRAPH + {0xD5C5, 0x6872}, //7794 #CJK UNIFIED IDEOGRAPH + {0xD5C6, 0x68AA}, //7795 #CJK UNIFIED IDEOGRAPH + {0xD5C7, 0x6880}, //7796 #CJK UNIFIED IDEOGRAPH + {0xD5C8, 0x6871}, //7797 #CJK UNIFIED IDEOGRAPH + {0xD5C9, 0x687E}, //7798 #CJK UNIFIED IDEOGRAPH + {0xD5CA, 0x689B}, //7799 #CJK UNIFIED IDEOGRAPH + {0xD5CB, 0x6896}, //7800 #CJK UNIFIED IDEOGRAPH + {0xD5CC, 0x688B}, //7801 #CJK UNIFIED IDEOGRAPH + {0xD5CD, 0x68A0}, //7802 #CJK UNIFIED IDEOGRAPH + {0xD5CE, 0x6889}, //7803 #CJK UNIFIED IDEOGRAPH + {0xD5CF, 0x68A4}, //7804 #CJK UNIFIED IDEOGRAPH + {0xD5D0, 0x6878}, //7805 #CJK UNIFIED IDEOGRAPH + {0xD5D1, 0x687B}, //7806 #CJK UNIFIED IDEOGRAPH + {0xD5D2, 0x6891}, //7807 #CJK UNIFIED IDEOGRAPH + {0xD5D3, 0x688C}, //7808 #CJK UNIFIED IDEOGRAPH + {0xD5D4, 0x688A}, //7809 #CJK UNIFIED IDEOGRAPH + {0xD5D5, 0x687D}, //7810 #CJK UNIFIED IDEOGRAPH + {0xD5D6, 0x6B36}, //7811 #CJK UNIFIED IDEOGRAPH + {0xD5D7, 0x6B33}, //7812 #CJK UNIFIED IDEOGRAPH + {0xD5D8, 0x6B37}, //7813 #CJK UNIFIED IDEOGRAPH + {0xD5D9, 0x6B38}, //7814 #CJK UNIFIED IDEOGRAPH + {0xD5DA, 0x6B91}, //7815 #CJK UNIFIED IDEOGRAPH + {0xD5DB, 0x6B8F}, //7816 #CJK UNIFIED IDEOGRAPH + {0xD5DC, 0x6B8D}, //7817 #CJK UNIFIED IDEOGRAPH + {0xD5DD, 0x6B8E}, //7818 #CJK UNIFIED IDEOGRAPH + {0xD5DE, 0x6B8C}, //7819 #CJK UNIFIED IDEOGRAPH + {0xD5DF, 0x6C2A}, //7820 #CJK UNIFIED IDEOGRAPH + {0xD5E0, 0x6DC0}, //7821 #CJK UNIFIED IDEOGRAPH + {0xD5E1, 0x6DAB}, //7822 #CJK UNIFIED IDEOGRAPH + {0xD5E2, 0x6DB4}, //7823 #CJK UNIFIED IDEOGRAPH + {0xD5E3, 0x6DB3}, //7824 #CJK UNIFIED IDEOGRAPH + {0xD5E4, 0x6E74}, //7825 #CJK UNIFIED IDEOGRAPH + {0xD5E5, 0x6DAC}, //7826 #CJK UNIFIED IDEOGRAPH + {0xD5E6, 0x6DE9}, //7827 #CJK UNIFIED IDEOGRAPH + {0xD5E7, 0x6DE2}, //7828 #CJK UNIFIED IDEOGRAPH + {0xD5E8, 0x6DB7}, //7829 #CJK UNIFIED IDEOGRAPH + {0xD5E9, 0x6DF6}, //7830 #CJK UNIFIED IDEOGRAPH + {0xD5EA, 0x6DD4}, //7831 #CJK UNIFIED IDEOGRAPH + {0xD5EB, 0x6E00}, //7832 #CJK UNIFIED IDEOGRAPH + {0xD5EC, 0x6DC8}, //7833 #CJK UNIFIED IDEOGRAPH + {0xD5ED, 0x6DE0}, //7834 #CJK UNIFIED IDEOGRAPH + {0xD5EE, 0x6DDF}, //7835 #CJK UNIFIED IDEOGRAPH + {0xD5EF, 0x6DD6}, //7836 #CJK UNIFIED IDEOGRAPH + {0xD5F0, 0x6DBE}, //7837 #CJK UNIFIED IDEOGRAPH + {0xD5F1, 0x6DE5}, //7838 #CJK UNIFIED IDEOGRAPH + {0xD5F2, 0x6DDC}, //7839 #CJK UNIFIED IDEOGRAPH + {0xD5F3, 0x6DDD}, //7840 #CJK UNIFIED IDEOGRAPH + {0xD5F4, 0x6DDB}, //7841 #CJK UNIFIED IDEOGRAPH + {0xD5F5, 0x6DF4}, //7842 #CJK UNIFIED IDEOGRAPH + {0xD5F6, 0x6DCA}, //7843 #CJK UNIFIED IDEOGRAPH + {0xD5F7, 0x6DBD}, //7844 #CJK UNIFIED IDEOGRAPH + {0xD5F8, 0x6DED}, //7845 #CJK UNIFIED IDEOGRAPH + {0xD5F9, 0x6DF0}, //7846 #CJK UNIFIED IDEOGRAPH + {0xD5FA, 0x6DBA}, //7847 #CJK UNIFIED IDEOGRAPH + {0xD5FB, 0x6DD5}, //7848 #CJK UNIFIED IDEOGRAPH + {0xD5FC, 0x6DC2}, //7849 #CJK UNIFIED IDEOGRAPH + {0xD5FD, 0x6DCF}, //7850 #CJK UNIFIED IDEOGRAPH + {0xD5FE, 0x6DC9}, //7851 #CJK UNIFIED IDEOGRAPH + {0xD640, 0x6DD0}, //7852 #CJK UNIFIED IDEOGRAPH + {0xD641, 0x6DF2}, //7853 #CJK UNIFIED IDEOGRAPH + {0xD642, 0x6DD3}, //7854 #CJK UNIFIED IDEOGRAPH + {0xD643, 0x6DFD}, //7855 #CJK UNIFIED IDEOGRAPH + {0xD644, 0x6DD7}, //7856 #CJK UNIFIED IDEOGRAPH + {0xD645, 0x6DCD}, //7857 #CJK UNIFIED IDEOGRAPH + {0xD646, 0x6DE3}, //7858 #CJK UNIFIED IDEOGRAPH + {0xD647, 0x6DBB}, //7859 #CJK UNIFIED IDEOGRAPH + {0xD648, 0x70FA}, //7860 #CJK UNIFIED IDEOGRAPH + {0xD649, 0x710D}, //7861 #CJK UNIFIED IDEOGRAPH + {0xD64A, 0x70F7}, //7862 #CJK UNIFIED IDEOGRAPH + {0xD64B, 0x7117}, //7863 #CJK UNIFIED IDEOGRAPH + {0xD64C, 0x70F4}, //7864 #CJK UNIFIED IDEOGRAPH + {0xD64D, 0x710C}, //7865 #CJK UNIFIED IDEOGRAPH + {0xD64E, 0x70F0}, //7866 #CJK UNIFIED IDEOGRAPH + {0xD64F, 0x7104}, //7867 #CJK UNIFIED IDEOGRAPH + {0xD650, 0x70F3}, //7868 #CJK UNIFIED IDEOGRAPH + {0xD651, 0x7110}, //7869 #CJK UNIFIED IDEOGRAPH + {0xD652, 0x70FC}, //7870 #CJK UNIFIED IDEOGRAPH + {0xD653, 0x70FF}, //7871 #CJK UNIFIED IDEOGRAPH + {0xD654, 0x7106}, //7872 #CJK UNIFIED IDEOGRAPH + {0xD655, 0x7113}, //7873 #CJK UNIFIED IDEOGRAPH + {0xD656, 0x7100}, //7874 #CJK UNIFIED IDEOGRAPH + {0xD657, 0x70F8}, //7875 #CJK UNIFIED IDEOGRAPH + {0xD658, 0x70F6}, //7876 #CJK UNIFIED IDEOGRAPH + {0xD659, 0x710B}, //7877 #CJK UNIFIED IDEOGRAPH + {0xD65A, 0x7102}, //7878 #CJK UNIFIED IDEOGRAPH + {0xD65B, 0x710E}, //7879 #CJK UNIFIED IDEOGRAPH + {0xD65C, 0x727E}, //7880 #CJK UNIFIED IDEOGRAPH + {0xD65D, 0x727B}, //7881 #CJK UNIFIED IDEOGRAPH + {0xD65E, 0x727C}, //7882 #CJK UNIFIED IDEOGRAPH + {0xD65F, 0x727F}, //7883 #CJK UNIFIED IDEOGRAPH + {0xD660, 0x731D}, //7884 #CJK UNIFIED IDEOGRAPH + {0xD661, 0x7317}, //7885 #CJK UNIFIED IDEOGRAPH + {0xD662, 0x7307}, //7886 #CJK UNIFIED IDEOGRAPH + {0xD663, 0x7311}, //7887 #CJK UNIFIED IDEOGRAPH + {0xD664, 0x7318}, //7888 #CJK UNIFIED IDEOGRAPH + {0xD665, 0x730A}, //7889 #CJK UNIFIED IDEOGRAPH + {0xD666, 0x7308}, //7890 #CJK UNIFIED IDEOGRAPH + {0xD667, 0x72FF}, //7891 #CJK UNIFIED IDEOGRAPH + {0xD668, 0x730F}, //7892 #CJK UNIFIED IDEOGRAPH + {0xD669, 0x731E}, //7893 #CJK UNIFIED IDEOGRAPH + {0xD66A, 0x7388}, //7894 #CJK UNIFIED IDEOGRAPH + {0xD66B, 0x73F6}, //7895 #CJK UNIFIED IDEOGRAPH + {0xD66C, 0x73F8}, //7896 #CJK UNIFIED IDEOGRAPH + {0xD66D, 0x73F5}, //7897 #CJK UNIFIED IDEOGRAPH + {0xD66E, 0x7404}, //7898 #CJK UNIFIED IDEOGRAPH + {0xD66F, 0x7401}, //7899 #CJK UNIFIED IDEOGRAPH + {0xD670, 0x73FD}, //7900 #CJK UNIFIED IDEOGRAPH + {0xD671, 0x7407}, //7901 #CJK UNIFIED IDEOGRAPH + {0xD672, 0x7400}, //7902 #CJK UNIFIED IDEOGRAPH + {0xD673, 0x73FA}, //7903 #CJK UNIFIED IDEOGRAPH + {0xD674, 0x73FC}, //7904 #CJK UNIFIED IDEOGRAPH + {0xD675, 0x73FF}, //7905 #CJK UNIFIED IDEOGRAPH + {0xD676, 0x740C}, //7906 #CJK UNIFIED IDEOGRAPH + {0xD677, 0x740B}, //7907 #CJK UNIFIED IDEOGRAPH + {0xD678, 0x73F4}, //7908 #CJK UNIFIED IDEOGRAPH + {0xD679, 0x7408}, //7909 #CJK UNIFIED IDEOGRAPH + {0xD67A, 0x7564}, //7910 #CJK UNIFIED IDEOGRAPH + {0xD67B, 0x7563}, //7911 #CJK UNIFIED IDEOGRAPH + {0xD67C, 0x75CE}, //7912 #CJK UNIFIED IDEOGRAPH + {0xD67D, 0x75D2}, //7913 #CJK UNIFIED IDEOGRAPH + {0xD67E, 0x75CF}, //7914 #CJK UNIFIED IDEOGRAPH + {0xD6A1, 0x75CB}, //7915 #CJK UNIFIED IDEOGRAPH + {0xD6A2, 0x75CC}, //7916 #CJK UNIFIED IDEOGRAPH + {0xD6A3, 0x75D1}, //7917 #CJK UNIFIED IDEOGRAPH + {0xD6A4, 0x75D0}, //7918 #CJK UNIFIED IDEOGRAPH + {0xD6A5, 0x768F}, //7919 #CJK UNIFIED IDEOGRAPH + {0xD6A6, 0x7689}, //7920 #CJK UNIFIED IDEOGRAPH + {0xD6A7, 0x76D3}, //7921 #CJK UNIFIED IDEOGRAPH + {0xD6A8, 0x7739}, //7922 #CJK UNIFIED IDEOGRAPH + {0xD6A9, 0x772F}, //7923 #CJK UNIFIED IDEOGRAPH + {0xD6AA, 0x772D}, //7924 #CJK UNIFIED IDEOGRAPH + {0xD6AB, 0x7731}, //7925 #CJK UNIFIED IDEOGRAPH + {0xD6AC, 0x7732}, //7926 #CJK UNIFIED IDEOGRAPH + {0xD6AD, 0x7734}, //7927 #CJK UNIFIED IDEOGRAPH + {0xD6AE, 0x7733}, //7928 #CJK UNIFIED IDEOGRAPH + {0xD6AF, 0x773D}, //7929 #CJK UNIFIED IDEOGRAPH + {0xD6B0, 0x7725}, //7930 #CJK UNIFIED IDEOGRAPH + {0xD6B1, 0x773B}, //7931 #CJK UNIFIED IDEOGRAPH + {0xD6B2, 0x7735}, //7932 #CJK UNIFIED IDEOGRAPH + {0xD6B3, 0x7848}, //7933 #CJK UNIFIED IDEOGRAPH + {0xD6B4, 0x7852}, //7934 #CJK UNIFIED IDEOGRAPH + {0xD6B5, 0x7849}, //7935 #CJK UNIFIED IDEOGRAPH + {0xD6B6, 0x784D}, //7936 #CJK UNIFIED IDEOGRAPH + {0xD6B7, 0x784A}, //7937 #CJK UNIFIED IDEOGRAPH + {0xD6B8, 0x784C}, //7938 #CJK UNIFIED IDEOGRAPH + {0xD6B9, 0x7826}, //7939 #CJK UNIFIED IDEOGRAPH + {0xD6BA, 0x7845}, //7940 #CJK UNIFIED IDEOGRAPH + {0xD6BB, 0x7850}, //7941 #CJK UNIFIED IDEOGRAPH + {0xD6BC, 0x7964}, //7942 #CJK UNIFIED IDEOGRAPH + {0xD6BD, 0x7967}, //7943 #CJK UNIFIED IDEOGRAPH + {0xD6BE, 0x7969}, //7944 #CJK UNIFIED IDEOGRAPH + {0xD6BF, 0x796A}, //7945 #CJK UNIFIED IDEOGRAPH + {0xD6C0, 0x7963}, //7946 #CJK UNIFIED IDEOGRAPH + {0xD6C1, 0x796B}, //7947 #CJK UNIFIED IDEOGRAPH + {0xD6C2, 0x7961}, //7948 #CJK UNIFIED IDEOGRAPH + {0xD6C3, 0x79BB}, //7949 #CJK UNIFIED IDEOGRAPH + {0xD6C4, 0x79FA}, //7950 #CJK UNIFIED IDEOGRAPH + {0xD6C5, 0x79F8}, //7951 #CJK UNIFIED IDEOGRAPH + {0xD6C6, 0x79F6}, //7952 #CJK UNIFIED IDEOGRAPH + {0xD6C7, 0x79F7}, //7953 #CJK UNIFIED IDEOGRAPH + {0xD6C8, 0x7A8F}, //7954 #CJK UNIFIED IDEOGRAPH + {0xD6C9, 0x7A94}, //7955 #CJK UNIFIED IDEOGRAPH + {0xD6CA, 0x7A90}, //7956 #CJK UNIFIED IDEOGRAPH + {0xD6CB, 0x7B35}, //7957 #CJK UNIFIED IDEOGRAPH + {0xD6CC, 0x7B47}, //7958 #CJK UNIFIED IDEOGRAPH + {0xD6CD, 0x7B34}, //7959 #CJK UNIFIED IDEOGRAPH + {0xD6CE, 0x7B25}, //7960 #CJK UNIFIED IDEOGRAPH + {0xD6CF, 0x7B30}, //7961 #CJK UNIFIED IDEOGRAPH + {0xD6D0, 0x7B22}, //7962 #CJK UNIFIED IDEOGRAPH + {0xD6D1, 0x7B24}, //7963 #CJK UNIFIED IDEOGRAPH + {0xD6D2, 0x7B33}, //7964 #CJK UNIFIED IDEOGRAPH + {0xD6D3, 0x7B18}, //7965 #CJK UNIFIED IDEOGRAPH + {0xD6D4, 0x7B2A}, //7966 #CJK UNIFIED IDEOGRAPH + {0xD6D5, 0x7B1D}, //7967 #CJK UNIFIED IDEOGRAPH + {0xD6D6, 0x7B31}, //7968 #CJK UNIFIED IDEOGRAPH + {0xD6D7, 0x7B2B}, //7969 #CJK UNIFIED IDEOGRAPH + {0xD6D8, 0x7B2D}, //7970 #CJK UNIFIED IDEOGRAPH + {0xD6D9, 0x7B2F}, //7971 #CJK UNIFIED IDEOGRAPH + {0xD6DA, 0x7B32}, //7972 #CJK UNIFIED IDEOGRAPH + {0xD6DB, 0x7B38}, //7973 #CJK UNIFIED IDEOGRAPH + {0xD6DC, 0x7B1A}, //7974 #CJK UNIFIED IDEOGRAPH + {0xD6DD, 0x7B23}, //7975 #CJK UNIFIED IDEOGRAPH + {0xD6DE, 0x7C94}, //7976 #CJK UNIFIED IDEOGRAPH + {0xD6DF, 0x7C98}, //7977 #CJK UNIFIED IDEOGRAPH + {0xD6E0, 0x7C96}, //7978 #CJK UNIFIED IDEOGRAPH + {0xD6E1, 0x7CA3}, //7979 #CJK UNIFIED IDEOGRAPH + {0xD6E2, 0x7D35}, //7980 #CJK UNIFIED IDEOGRAPH + {0xD6E3, 0x7D3D}, //7981 #CJK UNIFIED IDEOGRAPH + {0xD6E4, 0x7D38}, //7982 #CJK UNIFIED IDEOGRAPH + {0xD6E5, 0x7D36}, //7983 #CJK UNIFIED IDEOGRAPH + {0xD6E6, 0x7D3A}, //7984 #CJK UNIFIED IDEOGRAPH + {0xD6E7, 0x7D45}, //7985 #CJK UNIFIED IDEOGRAPH + {0xD6E8, 0x7D2C}, //7986 #CJK UNIFIED IDEOGRAPH + {0xD6E9, 0x7D29}, //7987 #CJK UNIFIED IDEOGRAPH + {0xD6EA, 0x7D41}, //7988 #CJK UNIFIED IDEOGRAPH + {0xD6EB, 0x7D47}, //7989 #CJK UNIFIED IDEOGRAPH + {0xD6EC, 0x7D3E}, //7990 #CJK UNIFIED IDEOGRAPH + {0xD6ED, 0x7D3F}, //7991 #CJK UNIFIED IDEOGRAPH + {0xD6EE, 0x7D4A}, //7992 #CJK UNIFIED IDEOGRAPH + {0xD6EF, 0x7D3B}, //7993 #CJK UNIFIED IDEOGRAPH + {0xD6F0, 0x7D28}, //7994 #CJK UNIFIED IDEOGRAPH + {0xD6F1, 0x7F63}, //7995 #CJK UNIFIED IDEOGRAPH + {0xD6F2, 0x7F95}, //7996 #CJK UNIFIED IDEOGRAPH + {0xD6F3, 0x7F9C}, //7997 #CJK UNIFIED IDEOGRAPH + {0xD6F4, 0x7F9D}, //7998 #CJK UNIFIED IDEOGRAPH + {0xD6F5, 0x7F9B}, //7999 #CJK UNIFIED IDEOGRAPH + {0xD6F6, 0x7FCA}, //8000 #CJK UNIFIED IDEOGRAPH + {0xD6F7, 0x7FCB}, //8001 #CJK UNIFIED IDEOGRAPH + {0xD6F8, 0x7FCD}, //8002 #CJK UNIFIED IDEOGRAPH + {0xD6F9, 0x7FD0}, //8003 #CJK UNIFIED IDEOGRAPH + {0xD6FA, 0x7FD1}, //8004 #CJK UNIFIED IDEOGRAPH + {0xD6FB, 0x7FC7}, //8005 #CJK UNIFIED IDEOGRAPH + {0xD6FC, 0x7FCF}, //8006 #CJK UNIFIED IDEOGRAPH + {0xD6FD, 0x7FC9}, //8007 #CJK UNIFIED IDEOGRAPH + {0xD6FE, 0x801F}, //8008 #CJK UNIFIED IDEOGRAPH + {0xD740, 0x801E}, //8009 #CJK UNIFIED IDEOGRAPH + {0xD741, 0x801B}, //8010 #CJK UNIFIED IDEOGRAPH + {0xD742, 0x8047}, //8011 #CJK UNIFIED IDEOGRAPH + {0xD743, 0x8043}, //8012 #CJK UNIFIED IDEOGRAPH + {0xD744, 0x8048}, //8013 #CJK UNIFIED IDEOGRAPH + {0xD745, 0x8118}, //8014 #CJK UNIFIED IDEOGRAPH + {0xD746, 0x8125}, //8015 #CJK UNIFIED IDEOGRAPH + {0xD747, 0x8119}, //8016 #CJK UNIFIED IDEOGRAPH + {0xD748, 0x811B}, //8017 #CJK UNIFIED IDEOGRAPH + {0xD749, 0x812D}, //8018 #CJK UNIFIED IDEOGRAPH + {0xD74A, 0x811F}, //8019 #CJK UNIFIED IDEOGRAPH + {0xD74B, 0x812C}, //8020 #CJK UNIFIED IDEOGRAPH + {0xD74C, 0x811E}, //8021 #CJK UNIFIED IDEOGRAPH + {0xD74D, 0x8121}, //8022 #CJK UNIFIED IDEOGRAPH + {0xD74E, 0x8115}, //8023 #CJK UNIFIED IDEOGRAPH + {0xD74F, 0x8127}, //8024 #CJK UNIFIED IDEOGRAPH + {0xD750, 0x811D}, //8025 #CJK UNIFIED IDEOGRAPH + {0xD751, 0x8122}, //8026 #CJK UNIFIED IDEOGRAPH + {0xD752, 0x8211}, //8027 #CJK UNIFIED IDEOGRAPH + {0xD753, 0x8238}, //8028 #CJK UNIFIED IDEOGRAPH + {0xD754, 0x8233}, //8029 #CJK UNIFIED IDEOGRAPH + {0xD755, 0x823A}, //8030 #CJK UNIFIED IDEOGRAPH + {0xD756, 0x8234}, //8031 #CJK UNIFIED IDEOGRAPH + {0xD757, 0x8232}, //8032 #CJK UNIFIED IDEOGRAPH + {0xD758, 0x8274}, //8033 #CJK UNIFIED IDEOGRAPH + {0xD759, 0x8390}, //8034 #CJK UNIFIED IDEOGRAPH + {0xD75A, 0x83A3}, //8035 #CJK UNIFIED IDEOGRAPH + {0xD75B, 0x83A8}, //8036 #CJK UNIFIED IDEOGRAPH + {0xD75C, 0x838D}, //8037 #CJK UNIFIED IDEOGRAPH + {0xD75D, 0x837A}, //8038 #CJK UNIFIED IDEOGRAPH + {0xD75E, 0x8373}, //8039 #CJK UNIFIED IDEOGRAPH + {0xD75F, 0x83A4}, //8040 #CJK UNIFIED IDEOGRAPH + {0xD760, 0x8374}, //8041 #CJK UNIFIED IDEOGRAPH + {0xD761, 0x838F}, //8042 #CJK UNIFIED IDEOGRAPH + {0xD762, 0x8381}, //8043 #CJK UNIFIED IDEOGRAPH + {0xD763, 0x8395}, //8044 #CJK UNIFIED IDEOGRAPH + {0xD764, 0x8399}, //8045 #CJK UNIFIED IDEOGRAPH + {0xD765, 0x8375}, //8046 #CJK UNIFIED IDEOGRAPH + {0xD766, 0x8394}, //8047 #CJK UNIFIED IDEOGRAPH + {0xD767, 0x83A9}, //8048 #CJK UNIFIED IDEOGRAPH + {0xD768, 0x837D}, //8049 #CJK UNIFIED IDEOGRAPH + {0xD769, 0x8383}, //8050 #CJK UNIFIED IDEOGRAPH + {0xD76A, 0x838C}, //8051 #CJK UNIFIED IDEOGRAPH + {0xD76B, 0x839D}, //8052 #CJK UNIFIED IDEOGRAPH + {0xD76C, 0x839B}, //8053 #CJK UNIFIED IDEOGRAPH + {0xD76D, 0x83AA}, //8054 #CJK UNIFIED IDEOGRAPH + {0xD76E, 0x838B}, //8055 #CJK UNIFIED IDEOGRAPH + {0xD76F, 0x837E}, //8056 #CJK UNIFIED IDEOGRAPH + {0xD770, 0x83A5}, //8057 #CJK UNIFIED IDEOGRAPH + {0xD771, 0x83AF}, //8058 #CJK UNIFIED IDEOGRAPH + {0xD772, 0x8388}, //8059 #CJK UNIFIED IDEOGRAPH + {0xD773, 0x8397}, //8060 #CJK UNIFIED IDEOGRAPH + {0xD774, 0x83B0}, //8061 #CJK UNIFIED IDEOGRAPH + {0xD775, 0x837F}, //8062 #CJK UNIFIED IDEOGRAPH + {0xD776, 0x83A6}, //8063 #CJK UNIFIED IDEOGRAPH + {0xD777, 0x8387}, //8064 #CJK UNIFIED IDEOGRAPH + {0xD778, 0x83AE}, //8065 #CJK UNIFIED IDEOGRAPH + {0xD779, 0x8376}, //8066 #CJK UNIFIED IDEOGRAPH + {0xD77A, 0x839A}, //8067 #CJK UNIFIED IDEOGRAPH + {0xD77B, 0x8659}, //8068 #CJK UNIFIED IDEOGRAPH + {0xD77C, 0x8656}, //8069 #CJK UNIFIED IDEOGRAPH + {0xD77D, 0x86BF}, //8070 #CJK UNIFIED IDEOGRAPH + {0xD77E, 0x86B7}, //8071 #CJK UNIFIED IDEOGRAPH + {0xD7A1, 0x86C2}, //8072 #CJK UNIFIED IDEOGRAPH + {0xD7A2, 0x86C1}, //8073 #CJK UNIFIED IDEOGRAPH + {0xD7A3, 0x86C5}, //8074 #CJK UNIFIED IDEOGRAPH + {0xD7A4, 0x86BA}, //8075 #CJK UNIFIED IDEOGRAPH + {0xD7A5, 0x86B0}, //8076 #CJK UNIFIED IDEOGRAPH + {0xD7A6, 0x86C8}, //8077 #CJK UNIFIED IDEOGRAPH + {0xD7A7, 0x86B9}, //8078 #CJK UNIFIED IDEOGRAPH + {0xD7A8, 0x86B3}, //8079 #CJK UNIFIED IDEOGRAPH + {0xD7A9, 0x86B8}, //8080 #CJK UNIFIED IDEOGRAPH + {0xD7AA, 0x86CC}, //8081 #CJK UNIFIED IDEOGRAPH + {0xD7AB, 0x86B4}, //8082 #CJK UNIFIED IDEOGRAPH + {0xD7AC, 0x86BB}, //8083 #CJK UNIFIED IDEOGRAPH + {0xD7AD, 0x86BC}, //8084 #CJK UNIFIED IDEOGRAPH + {0xD7AE, 0x86C3}, //8085 #CJK UNIFIED IDEOGRAPH + {0xD7AF, 0x86BD}, //8086 #CJK UNIFIED IDEOGRAPH + {0xD7B0, 0x86BE}, //8087 #CJK UNIFIED IDEOGRAPH + {0xD7B1, 0x8852}, //8088 #CJK UNIFIED IDEOGRAPH + {0xD7B2, 0x8889}, //8089 #CJK UNIFIED IDEOGRAPH + {0xD7B3, 0x8895}, //8090 #CJK UNIFIED IDEOGRAPH + {0xD7B4, 0x88A8}, //8091 #CJK UNIFIED IDEOGRAPH + {0xD7B5, 0x88A2}, //8092 #CJK UNIFIED IDEOGRAPH + {0xD7B6, 0x88AA}, //8093 #CJK UNIFIED IDEOGRAPH + {0xD7B7, 0x889A}, //8094 #CJK UNIFIED IDEOGRAPH + {0xD7B8, 0x8891}, //8095 #CJK UNIFIED IDEOGRAPH + {0xD7B9, 0x88A1}, //8096 #CJK UNIFIED IDEOGRAPH + {0xD7BA, 0x889F}, //8097 #CJK UNIFIED IDEOGRAPH + {0xD7BB, 0x8898}, //8098 #CJK UNIFIED IDEOGRAPH + {0xD7BC, 0x88A7}, //8099 #CJK UNIFIED IDEOGRAPH + {0xD7BD, 0x8899}, //8100 #CJK UNIFIED IDEOGRAPH + {0xD7BE, 0x889B}, //8101 #CJK UNIFIED IDEOGRAPH + {0xD7BF, 0x8897}, //8102 #CJK UNIFIED IDEOGRAPH + {0xD7C0, 0x88A4}, //8103 #CJK UNIFIED IDEOGRAPH + {0xD7C1, 0x88AC}, //8104 #CJK UNIFIED IDEOGRAPH + {0xD7C2, 0x888C}, //8105 #CJK UNIFIED IDEOGRAPH + {0xD7C3, 0x8893}, //8106 #CJK UNIFIED IDEOGRAPH + {0xD7C4, 0x888E}, //8107 #CJK UNIFIED IDEOGRAPH + {0xD7C5, 0x8982}, //8108 #CJK UNIFIED IDEOGRAPH + {0xD7C6, 0x89D6}, //8109 #CJK UNIFIED IDEOGRAPH + {0xD7C7, 0x89D9}, //8110 #CJK UNIFIED IDEOGRAPH + {0xD7C8, 0x89D5}, //8111 #CJK UNIFIED IDEOGRAPH + {0xD7C9, 0x8A30}, //8112 #CJK UNIFIED IDEOGRAPH + {0xD7CA, 0x8A27}, //8113 #CJK UNIFIED IDEOGRAPH + {0xD7CB, 0x8A2C}, //8114 #CJK UNIFIED IDEOGRAPH + {0xD7CC, 0x8A1E}, //8115 #CJK UNIFIED IDEOGRAPH + {0xD7CD, 0x8C39}, //8116 #CJK UNIFIED IDEOGRAPH + {0xD7CE, 0x8C3B}, //8117 #CJK UNIFIED IDEOGRAPH + {0xD7CF, 0x8C5C}, //8118 #CJK UNIFIED IDEOGRAPH + {0xD7D0, 0x8C5D}, //8119 #CJK UNIFIED IDEOGRAPH + {0xD7D1, 0x8C7D}, //8120 #CJK UNIFIED IDEOGRAPH + {0xD7D2, 0x8CA5}, //8121 #CJK UNIFIED IDEOGRAPH + {0xD7D3, 0x8D7D}, //8122 #CJK UNIFIED IDEOGRAPH + {0xD7D4, 0x8D7B}, //8123 #CJK UNIFIED IDEOGRAPH + {0xD7D5, 0x8D79}, //8124 #CJK UNIFIED IDEOGRAPH + {0xD7D6, 0x8DBC}, //8125 #CJK UNIFIED IDEOGRAPH + {0xD7D7, 0x8DC2}, //8126 #CJK UNIFIED IDEOGRAPH + {0xD7D8, 0x8DB9}, //8127 #CJK UNIFIED IDEOGRAPH + {0xD7D9, 0x8DBF}, //8128 #CJK UNIFIED IDEOGRAPH + {0xD7DA, 0x8DC1}, //8129 #CJK UNIFIED IDEOGRAPH + {0xD7DB, 0x8ED8}, //8130 #CJK UNIFIED IDEOGRAPH + {0xD7DC, 0x8EDE}, //8131 #CJK UNIFIED IDEOGRAPH + {0xD7DD, 0x8EDD}, //8132 #CJK UNIFIED IDEOGRAPH + {0xD7DE, 0x8EDC}, //8133 #CJK UNIFIED IDEOGRAPH + {0xD7DF, 0x8ED7}, //8134 #CJK UNIFIED IDEOGRAPH + {0xD7E0, 0x8EE0}, //8135 #CJK UNIFIED IDEOGRAPH + {0xD7E1, 0x8EE1}, //8136 #CJK UNIFIED IDEOGRAPH + {0xD7E2, 0x9024}, //8137 #CJK UNIFIED IDEOGRAPH + {0xD7E3, 0x900B}, //8138 #CJK UNIFIED IDEOGRAPH + {0xD7E4, 0x9011}, //8139 #CJK UNIFIED IDEOGRAPH + {0xD7E5, 0x901C}, //8140 #CJK UNIFIED IDEOGRAPH + {0xD7E6, 0x900C}, //8141 #CJK UNIFIED IDEOGRAPH + {0xD7E7, 0x9021}, //8142 #CJK UNIFIED IDEOGRAPH + {0xD7E8, 0x90EF}, //8143 #CJK UNIFIED IDEOGRAPH + {0xD7E9, 0x90EA}, //8144 #CJK UNIFIED IDEOGRAPH + {0xD7EA, 0x90F0}, //8145 #CJK UNIFIED IDEOGRAPH + {0xD7EB, 0x90F4}, //8146 #CJK UNIFIED IDEOGRAPH + {0xD7EC, 0x90F2}, //8147 #CJK UNIFIED IDEOGRAPH + {0xD7ED, 0x90F3}, //8148 #CJK UNIFIED IDEOGRAPH + {0xD7EE, 0x90D4}, //8149 #CJK UNIFIED IDEOGRAPH + {0xD7EF, 0x90EB}, //8150 #CJK UNIFIED IDEOGRAPH + {0xD7F0, 0x90EC}, //8151 #CJK UNIFIED IDEOGRAPH + {0xD7F1, 0x90E9}, //8152 #CJK UNIFIED IDEOGRAPH + {0xD7F2, 0x9156}, //8153 #CJK UNIFIED IDEOGRAPH + {0xD7F3, 0x9158}, //8154 #CJK UNIFIED IDEOGRAPH + {0xD7F4, 0x915A}, //8155 #CJK UNIFIED IDEOGRAPH + {0xD7F5, 0x9153}, //8156 #CJK UNIFIED IDEOGRAPH + {0xD7F6, 0x9155}, //8157 #CJK UNIFIED IDEOGRAPH + {0xD7F7, 0x91EC}, //8158 #CJK UNIFIED IDEOGRAPH + {0xD7F8, 0x91F4}, //8159 #CJK UNIFIED IDEOGRAPH + {0xD7F9, 0x91F1}, //8160 #CJK UNIFIED IDEOGRAPH + {0xD7FA, 0x91F3}, //8161 #CJK UNIFIED IDEOGRAPH + {0xD7FB, 0x91F8}, //8162 #CJK UNIFIED IDEOGRAPH + {0xD7FC, 0x91E4}, //8163 #CJK UNIFIED IDEOGRAPH + {0xD7FD, 0x91F9}, //8164 #CJK UNIFIED IDEOGRAPH + {0xD7FE, 0x91EA}, //8165 #CJK UNIFIED IDEOGRAPH + {0xD840, 0x91EB}, //8166 #CJK UNIFIED IDEOGRAPH + {0xD841, 0x91F7}, //8167 #CJK UNIFIED IDEOGRAPH + {0xD842, 0x91E8}, //8168 #CJK UNIFIED IDEOGRAPH + {0xD843, 0x91EE}, //8169 #CJK UNIFIED IDEOGRAPH + {0xD844, 0x957A}, //8170 #CJK UNIFIED IDEOGRAPH + {0xD845, 0x9586}, //8171 #CJK UNIFIED IDEOGRAPH + {0xD846, 0x9588}, //8172 #CJK UNIFIED IDEOGRAPH + {0xD847, 0x967C}, //8173 #CJK UNIFIED IDEOGRAPH + {0xD848, 0x966D}, //8174 #CJK UNIFIED IDEOGRAPH + {0xD849, 0x966B}, //8175 #CJK UNIFIED IDEOGRAPH + {0xD84A, 0x9671}, //8176 #CJK UNIFIED IDEOGRAPH + {0xD84B, 0x966F}, //8177 #CJK UNIFIED IDEOGRAPH + {0xD84C, 0x96BF}, //8178 #CJK UNIFIED IDEOGRAPH + {0xD84D, 0x976A}, //8179 #CJK UNIFIED IDEOGRAPH + {0xD84E, 0x9804}, //8180 #CJK UNIFIED IDEOGRAPH + {0xD84F, 0x98E5}, //8181 #CJK UNIFIED IDEOGRAPH + {0xD850, 0x9997}, //8182 #CJK UNIFIED IDEOGRAPH + {0xD851, 0x509B}, //8183 #CJK UNIFIED IDEOGRAPH + {0xD852, 0x5095}, //8184 #CJK UNIFIED IDEOGRAPH + {0xD853, 0x5094}, //8185 #CJK UNIFIED IDEOGRAPH + {0xD854, 0x509E}, //8186 #CJK UNIFIED IDEOGRAPH + {0xD855, 0x508B}, //8187 #CJK UNIFIED IDEOGRAPH + {0xD856, 0x50A3}, //8188 #CJK UNIFIED IDEOGRAPH + {0xD857, 0x5083}, //8189 #CJK UNIFIED IDEOGRAPH + {0xD858, 0x508C}, //8190 #CJK UNIFIED IDEOGRAPH + {0xD859, 0x508E}, //8191 #CJK UNIFIED IDEOGRAPH + {0xD85A, 0x509D}, //8192 #CJK UNIFIED IDEOGRAPH + {0xD85B, 0x5068}, //8193 #CJK UNIFIED IDEOGRAPH + {0xD85C, 0x509C}, //8194 #CJK UNIFIED IDEOGRAPH + {0xD85D, 0x5092}, //8195 #CJK UNIFIED IDEOGRAPH + {0xD85E, 0x5082}, //8196 #CJK UNIFIED IDEOGRAPH + {0xD85F, 0x5087}, //8197 #CJK UNIFIED IDEOGRAPH + {0xD860, 0x515F}, //8198 #CJK UNIFIED IDEOGRAPH + {0xD861, 0x51D4}, //8199 #CJK UNIFIED IDEOGRAPH + {0xD862, 0x5312}, //8200 #CJK UNIFIED IDEOGRAPH + {0xD863, 0x5311}, //8201 #CJK UNIFIED IDEOGRAPH + {0xD864, 0x53A4}, //8202 #CJK UNIFIED IDEOGRAPH + {0xD865, 0x53A7}, //8203 #CJK UNIFIED IDEOGRAPH + {0xD866, 0x5591}, //8204 #CJK UNIFIED IDEOGRAPH + {0xD867, 0x55A8}, //8205 #CJK UNIFIED IDEOGRAPH + {0xD868, 0x55A5}, //8206 #CJK UNIFIED IDEOGRAPH + {0xD869, 0x55AD}, //8207 #CJK UNIFIED IDEOGRAPH + {0xD86A, 0x5577}, //8208 #CJK UNIFIED IDEOGRAPH + {0xD86B, 0x5645}, //8209 #CJK UNIFIED IDEOGRAPH + {0xD86C, 0x55A2}, //8210 #CJK UNIFIED IDEOGRAPH + {0xD86D, 0x5593}, //8211 #CJK UNIFIED IDEOGRAPH + {0xD86E, 0x5588}, //8212 #CJK UNIFIED IDEOGRAPH + {0xD86F, 0x558F}, //8213 #CJK UNIFIED IDEOGRAPH + {0xD870, 0x55B5}, //8214 #CJK UNIFIED IDEOGRAPH + {0xD871, 0x5581}, //8215 #CJK UNIFIED IDEOGRAPH + {0xD872, 0x55A3}, //8216 #CJK UNIFIED IDEOGRAPH + {0xD873, 0x5592}, //8217 #CJK UNIFIED IDEOGRAPH + {0xD874, 0x55A4}, //8218 #CJK UNIFIED IDEOGRAPH + {0xD875, 0x557D}, //8219 #CJK UNIFIED IDEOGRAPH + {0xD876, 0x558C}, //8220 #CJK UNIFIED IDEOGRAPH + {0xD877, 0x55A6}, //8221 #CJK UNIFIED IDEOGRAPH + {0xD878, 0x557F}, //8222 #CJK UNIFIED IDEOGRAPH + {0xD879, 0x5595}, //8223 #CJK UNIFIED IDEOGRAPH + {0xD87A, 0x55A1}, //8224 #CJK UNIFIED IDEOGRAPH + {0xD87B, 0x558E}, //8225 #CJK UNIFIED IDEOGRAPH + {0xD87C, 0x570C}, //8226 #CJK UNIFIED IDEOGRAPH + {0xD87D, 0x5829}, //8227 #CJK UNIFIED IDEOGRAPH + {0xD87E, 0x5837}, //8228 #CJK UNIFIED IDEOGRAPH + {0xD8A1, 0x5819}, //8229 #CJK UNIFIED IDEOGRAPH + {0xD8A2, 0x581E}, //8230 #CJK UNIFIED IDEOGRAPH + {0xD8A3, 0x5827}, //8231 #CJK UNIFIED IDEOGRAPH + {0xD8A4, 0x5823}, //8232 #CJK UNIFIED IDEOGRAPH + {0xD8A5, 0x5828}, //8233 #CJK UNIFIED IDEOGRAPH + {0xD8A6, 0x57F5}, //8234 #CJK UNIFIED IDEOGRAPH + {0xD8A7, 0x5848}, //8235 #CJK UNIFIED IDEOGRAPH + {0xD8A8, 0x5825}, //8236 #CJK UNIFIED IDEOGRAPH + {0xD8A9, 0x581C}, //8237 #CJK UNIFIED IDEOGRAPH + {0xD8AA, 0x581B}, //8238 #CJK UNIFIED IDEOGRAPH + {0xD8AB, 0x5833}, //8239 #CJK UNIFIED IDEOGRAPH + {0xD8AC, 0x583F}, //8240 #CJK UNIFIED IDEOGRAPH + {0xD8AD, 0x5836}, //8241 #CJK UNIFIED IDEOGRAPH + {0xD8AE, 0x582E}, //8242 #CJK UNIFIED IDEOGRAPH + {0xD8AF, 0x5839}, //8243 #CJK UNIFIED IDEOGRAPH + {0xD8B0, 0x5838}, //8244 #CJK UNIFIED IDEOGRAPH + {0xD8B1, 0x582D}, //8245 #CJK UNIFIED IDEOGRAPH + {0xD8B2, 0x582C}, //8246 #CJK UNIFIED IDEOGRAPH + {0xD8B3, 0x583B}, //8247 #CJK UNIFIED IDEOGRAPH + {0xD8B4, 0x5961}, //8248 #CJK UNIFIED IDEOGRAPH + {0xD8B5, 0x5AAF}, //8249 #CJK UNIFIED IDEOGRAPH + {0xD8B6, 0x5A94}, //8250 #CJK UNIFIED IDEOGRAPH + {0xD8B7, 0x5A9F}, //8251 #CJK UNIFIED IDEOGRAPH + {0xD8B8, 0x5A7A}, //8252 #CJK UNIFIED IDEOGRAPH + {0xD8B9, 0x5AA2}, //8253 #CJK UNIFIED IDEOGRAPH + {0xD8BA, 0x5A9E}, //8254 #CJK UNIFIED IDEOGRAPH + {0xD8BB, 0x5A78}, //8255 #CJK UNIFIED IDEOGRAPH + {0xD8BC, 0x5AA6}, //8256 #CJK UNIFIED IDEOGRAPH + {0xD8BD, 0x5A7C}, //8257 #CJK UNIFIED IDEOGRAPH + {0xD8BE, 0x5AA5}, //8258 #CJK UNIFIED IDEOGRAPH + {0xD8BF, 0x5AAC}, //8259 #CJK UNIFIED IDEOGRAPH + {0xD8C0, 0x5A95}, //8260 #CJK UNIFIED IDEOGRAPH + {0xD8C1, 0x5AAE}, //8261 #CJK UNIFIED IDEOGRAPH + {0xD8C2, 0x5A37}, //8262 #CJK UNIFIED IDEOGRAPH + {0xD8C3, 0x5A84}, //8263 #CJK UNIFIED IDEOGRAPH + {0xD8C4, 0x5A8A}, //8264 #CJK UNIFIED IDEOGRAPH + {0xD8C5, 0x5A97}, //8265 #CJK UNIFIED IDEOGRAPH + {0xD8C6, 0x5A83}, //8266 #CJK UNIFIED IDEOGRAPH + {0xD8C7, 0x5A8B}, //8267 #CJK UNIFIED IDEOGRAPH + {0xD8C8, 0x5AA9}, //8268 #CJK UNIFIED IDEOGRAPH + {0xD8C9, 0x5A7B}, //8269 #CJK UNIFIED IDEOGRAPH + {0xD8CA, 0x5A7D}, //8270 #CJK UNIFIED IDEOGRAPH + {0xD8CB, 0x5A8C}, //8271 #CJK UNIFIED IDEOGRAPH + {0xD8CC, 0x5A9C}, //8272 #CJK UNIFIED IDEOGRAPH + {0xD8CD, 0x5A8F}, //8273 #CJK UNIFIED IDEOGRAPH + {0xD8CE, 0x5A93}, //8274 #CJK UNIFIED IDEOGRAPH + {0xD8CF, 0x5A9D}, //8275 #CJK UNIFIED IDEOGRAPH + {0xD8D0, 0x5BEA}, //8276 #CJK UNIFIED IDEOGRAPH + {0xD8D1, 0x5BCD}, //8277 #CJK UNIFIED IDEOGRAPH + {0xD8D2, 0x5BCB}, //8278 #CJK UNIFIED IDEOGRAPH + {0xD8D3, 0x5BD4}, //8279 #CJK UNIFIED IDEOGRAPH + {0xD8D4, 0x5BD1}, //8280 #CJK UNIFIED IDEOGRAPH + {0xD8D5, 0x5BCA}, //8281 #CJK UNIFIED IDEOGRAPH + {0xD8D6, 0x5BCE}, //8282 #CJK UNIFIED IDEOGRAPH + {0xD8D7, 0x5C0C}, //8283 #CJK UNIFIED IDEOGRAPH + {0xD8D8, 0x5C30}, //8284 #CJK UNIFIED IDEOGRAPH + {0xD8D9, 0x5D37}, //8285 #CJK UNIFIED IDEOGRAPH + {0xD8DA, 0x5D43}, //8286 #CJK UNIFIED IDEOGRAPH + {0xD8DB, 0x5D6B}, //8287 #CJK UNIFIED IDEOGRAPH + {0xD8DC, 0x5D41}, //8288 #CJK UNIFIED IDEOGRAPH + {0xD8DD, 0x5D4B}, //8289 #CJK UNIFIED IDEOGRAPH + {0xD8DE, 0x5D3F}, //8290 #CJK UNIFIED IDEOGRAPH + {0xD8DF, 0x5D35}, //8291 #CJK UNIFIED IDEOGRAPH + {0xD8E0, 0x5D51}, //8292 #CJK UNIFIED IDEOGRAPH + {0xD8E1, 0x5D4E}, //8293 #CJK UNIFIED IDEOGRAPH + {0xD8E2, 0x5D55}, //8294 #CJK UNIFIED IDEOGRAPH + {0xD8E3, 0x5D33}, //8295 #CJK UNIFIED IDEOGRAPH + {0xD8E4, 0x5D3A}, //8296 #CJK UNIFIED IDEOGRAPH + {0xD8E5, 0x5D52}, //8297 #CJK UNIFIED IDEOGRAPH + {0xD8E6, 0x5D3D}, //8298 #CJK UNIFIED IDEOGRAPH + {0xD8E7, 0x5D31}, //8299 #CJK UNIFIED IDEOGRAPH + {0xD8E8, 0x5D59}, //8300 #CJK UNIFIED IDEOGRAPH + {0xD8E9, 0x5D42}, //8301 #CJK UNIFIED IDEOGRAPH + {0xD8EA, 0x5D39}, //8302 #CJK UNIFIED IDEOGRAPH + {0xD8EB, 0x5D49}, //8303 #CJK UNIFIED IDEOGRAPH + {0xD8EC, 0x5D38}, //8304 #CJK UNIFIED IDEOGRAPH + {0xD8ED, 0x5D3C}, //8305 #CJK UNIFIED IDEOGRAPH + {0xD8EE, 0x5D32}, //8306 #CJK UNIFIED IDEOGRAPH + {0xD8EF, 0x5D36}, //8307 #CJK UNIFIED IDEOGRAPH + {0xD8F0, 0x5D40}, //8308 #CJK UNIFIED IDEOGRAPH + {0xD8F1, 0x5D45}, //8309 #CJK UNIFIED IDEOGRAPH + {0xD8F2, 0x5E44}, //8310 #CJK UNIFIED IDEOGRAPH + {0xD8F3, 0x5E41}, //8311 #CJK UNIFIED IDEOGRAPH + {0xD8F4, 0x5F58}, //8312 #CJK UNIFIED IDEOGRAPH + {0xD8F5, 0x5FA6}, //8313 #CJK UNIFIED IDEOGRAPH + {0xD8F6, 0x5FA5}, //8314 #CJK UNIFIED IDEOGRAPH + {0xD8F7, 0x5FAB}, //8315 #CJK UNIFIED IDEOGRAPH + {0xD8F8, 0x60C9}, //8316 #CJK UNIFIED IDEOGRAPH + {0xD8F9, 0x60B9}, //8317 #CJK UNIFIED IDEOGRAPH + {0xD8FA, 0x60CC}, //8318 #CJK UNIFIED IDEOGRAPH + {0xD8FB, 0x60E2}, //8319 #CJK UNIFIED IDEOGRAPH + {0xD8FC, 0x60CE}, //8320 #CJK UNIFIED IDEOGRAPH + {0xD8FD, 0x60C4}, //8321 #CJK UNIFIED IDEOGRAPH + {0xD8FE, 0x6114}, //8322 #CJK UNIFIED IDEOGRAPH + {0xD940, 0x60F2}, //8323 #CJK UNIFIED IDEOGRAPH + {0xD941, 0x610A}, //8324 #CJK UNIFIED IDEOGRAPH + {0xD942, 0x6116}, //8325 #CJK UNIFIED IDEOGRAPH + {0xD943, 0x6105}, //8326 #CJK UNIFIED IDEOGRAPH + {0xD944, 0x60F5}, //8327 #CJK UNIFIED IDEOGRAPH + {0xD945, 0x6113}, //8328 #CJK UNIFIED IDEOGRAPH + {0xD946, 0x60F8}, //8329 #CJK UNIFIED IDEOGRAPH + {0xD947, 0x60FC}, //8330 #CJK UNIFIED IDEOGRAPH + {0xD948, 0x60FE}, //8331 #CJK UNIFIED IDEOGRAPH + {0xD949, 0x60C1}, //8332 #CJK UNIFIED IDEOGRAPH + {0xD94A, 0x6103}, //8333 #CJK UNIFIED IDEOGRAPH + {0xD94B, 0x6118}, //8334 #CJK UNIFIED IDEOGRAPH + {0xD94C, 0x611D}, //8335 #CJK UNIFIED IDEOGRAPH + {0xD94D, 0x6110}, //8336 #CJK UNIFIED IDEOGRAPH + {0xD94E, 0x60FF}, //8337 #CJK UNIFIED IDEOGRAPH + {0xD94F, 0x6104}, //8338 #CJK UNIFIED IDEOGRAPH + {0xD950, 0x610B}, //8339 #CJK UNIFIED IDEOGRAPH + {0xD951, 0x624A}, //8340 #CJK UNIFIED IDEOGRAPH + {0xD952, 0x6394}, //8341 #CJK UNIFIED IDEOGRAPH + {0xD953, 0x63B1}, //8342 #CJK UNIFIED IDEOGRAPH + {0xD954, 0x63B0}, //8343 #CJK UNIFIED IDEOGRAPH + {0xD955, 0x63CE}, //8344 #CJK UNIFIED IDEOGRAPH + {0xD956, 0x63E5}, //8345 #CJK UNIFIED IDEOGRAPH + {0xD957, 0x63E8}, //8346 #CJK UNIFIED IDEOGRAPH + {0xD958, 0x63EF}, //8347 #CJK UNIFIED IDEOGRAPH + {0xD959, 0x63C3}, //8348 #CJK UNIFIED IDEOGRAPH + {0xD95A, 0x649D}, //8349 #CJK UNIFIED IDEOGRAPH + {0xD95B, 0x63F3}, //8350 #CJK UNIFIED IDEOGRAPH + {0xD95C, 0x63CA}, //8351 #CJK UNIFIED IDEOGRAPH + {0xD95D, 0x63E0}, //8352 #CJK UNIFIED IDEOGRAPH + {0xD95E, 0x63F6}, //8353 #CJK UNIFIED IDEOGRAPH + {0xD95F, 0x63D5}, //8354 #CJK UNIFIED IDEOGRAPH + {0xD960, 0x63F2}, //8355 #CJK UNIFIED IDEOGRAPH + {0xD961, 0x63F5}, //8356 #CJK UNIFIED IDEOGRAPH + {0xD962, 0x6461}, //8357 #CJK UNIFIED IDEOGRAPH + {0xD963, 0x63DF}, //8358 #CJK UNIFIED IDEOGRAPH + {0xD964, 0x63BE}, //8359 #CJK UNIFIED IDEOGRAPH + {0xD965, 0x63DD}, //8360 #CJK UNIFIED IDEOGRAPH + {0xD966, 0x63DC}, //8361 #CJK UNIFIED IDEOGRAPH + {0xD967, 0x63C4}, //8362 #CJK UNIFIED IDEOGRAPH + {0xD968, 0x63D8}, //8363 #CJK UNIFIED IDEOGRAPH + {0xD969, 0x63D3}, //8364 #CJK UNIFIED IDEOGRAPH + {0xD96A, 0x63C2}, //8365 #CJK UNIFIED IDEOGRAPH + {0xD96B, 0x63C7}, //8366 #CJK UNIFIED IDEOGRAPH + {0xD96C, 0x63CC}, //8367 #CJK UNIFIED IDEOGRAPH + {0xD96D, 0x63CB}, //8368 #CJK UNIFIED IDEOGRAPH + {0xD96E, 0x63C8}, //8369 #CJK UNIFIED IDEOGRAPH + {0xD96F, 0x63F0}, //8370 #CJK UNIFIED IDEOGRAPH + {0xD970, 0x63D7}, //8371 #CJK UNIFIED IDEOGRAPH + {0xD971, 0x63D9}, //8372 #CJK UNIFIED IDEOGRAPH + {0xD972, 0x6532}, //8373 #CJK UNIFIED IDEOGRAPH + {0xD973, 0x6567}, //8374 #CJK UNIFIED IDEOGRAPH + {0xD974, 0x656A}, //8375 #CJK UNIFIED IDEOGRAPH + {0xD975, 0x6564}, //8376 #CJK UNIFIED IDEOGRAPH + {0xD976, 0x655C}, //8377 #CJK UNIFIED IDEOGRAPH + {0xD977, 0x6568}, //8378 #CJK UNIFIED IDEOGRAPH + {0xD978, 0x6565}, //8379 #CJK UNIFIED IDEOGRAPH + {0xD979, 0x658C}, //8380 #CJK UNIFIED IDEOGRAPH + {0xD97A, 0x659D}, //8381 #CJK UNIFIED IDEOGRAPH + {0xD97B, 0x659E}, //8382 #CJK UNIFIED IDEOGRAPH + {0xD97C, 0x65AE}, //8383 #CJK UNIFIED IDEOGRAPH + {0xD97D, 0x65D0}, //8384 #CJK UNIFIED IDEOGRAPH + {0xD97E, 0x65D2}, //8385 #CJK UNIFIED IDEOGRAPH + {0xD9A1, 0x667C}, //8386 #CJK UNIFIED IDEOGRAPH + {0xD9A2, 0x666C}, //8387 #CJK UNIFIED IDEOGRAPH + {0xD9A3, 0x667B}, //8388 #CJK UNIFIED IDEOGRAPH + {0xD9A4, 0x6680}, //8389 #CJK UNIFIED IDEOGRAPH + {0xD9A5, 0x6671}, //8390 #CJK UNIFIED IDEOGRAPH + {0xD9A6, 0x6679}, //8391 #CJK UNIFIED IDEOGRAPH + {0xD9A7, 0x666A}, //8392 #CJK UNIFIED IDEOGRAPH + {0xD9A8, 0x6672}, //8393 #CJK UNIFIED IDEOGRAPH + {0xD9A9, 0x6701}, //8394 #CJK UNIFIED IDEOGRAPH + {0xD9AA, 0x690C}, //8395 #CJK UNIFIED IDEOGRAPH + {0xD9AB, 0x68D3}, //8396 #CJK UNIFIED IDEOGRAPH + {0xD9AC, 0x6904}, //8397 #CJK UNIFIED IDEOGRAPH + {0xD9AD, 0x68DC}, //8398 #CJK UNIFIED IDEOGRAPH + {0xD9AE, 0x692A}, //8399 #CJK UNIFIED IDEOGRAPH + {0xD9AF, 0x68EC}, //8400 #CJK UNIFIED IDEOGRAPH + {0xD9B0, 0x68EA}, //8401 #CJK UNIFIED IDEOGRAPH + {0xD9B1, 0x68F1}, //8402 #CJK UNIFIED IDEOGRAPH + {0xD9B2, 0x690F}, //8403 #CJK UNIFIED IDEOGRAPH + {0xD9B3, 0x68D6}, //8404 #CJK UNIFIED IDEOGRAPH + {0xD9B4, 0x68F7}, //8405 #CJK UNIFIED IDEOGRAPH + {0xD9B5, 0x68EB}, //8406 #CJK UNIFIED IDEOGRAPH + {0xD9B6, 0x68E4}, //8407 #CJK UNIFIED IDEOGRAPH + {0xD9B7, 0x68F6}, //8408 #CJK UNIFIED IDEOGRAPH + {0xD9B8, 0x6913}, //8409 #CJK UNIFIED IDEOGRAPH + {0xD9B9, 0x6910}, //8410 #CJK UNIFIED IDEOGRAPH + {0xD9BA, 0x68F3}, //8411 #CJK UNIFIED IDEOGRAPH + {0xD9BB, 0x68E1}, //8412 #CJK UNIFIED IDEOGRAPH + {0xD9BC, 0x6907}, //8413 #CJK UNIFIED IDEOGRAPH + {0xD9BD, 0x68CC}, //8414 #CJK UNIFIED IDEOGRAPH + {0xD9BE, 0x6908}, //8415 #CJK UNIFIED IDEOGRAPH + {0xD9BF, 0x6970}, //8416 #CJK UNIFIED IDEOGRAPH + {0xD9C0, 0x68B4}, //8417 #CJK UNIFIED IDEOGRAPH + {0xD9C1, 0x6911}, //8418 #CJK UNIFIED IDEOGRAPH + {0xD9C2, 0x68EF}, //8419 #CJK UNIFIED IDEOGRAPH + {0xD9C3, 0x68C6}, //8420 #CJK UNIFIED IDEOGRAPH + {0xD9C4, 0x6914}, //8421 #CJK UNIFIED IDEOGRAPH + {0xD9C5, 0x68F8}, //8422 #CJK UNIFIED IDEOGRAPH + {0xD9C6, 0x68D0}, //8423 #CJK UNIFIED IDEOGRAPH + {0xD9C7, 0x68FD}, //8424 #CJK UNIFIED IDEOGRAPH + {0xD9C8, 0x68FC}, //8425 #CJK UNIFIED IDEOGRAPH + {0xD9C9, 0x68E8}, //8426 #CJK UNIFIED IDEOGRAPH + {0xD9CA, 0x690B}, //8427 #CJK UNIFIED IDEOGRAPH + {0xD9CB, 0x690A}, //8428 #CJK UNIFIED IDEOGRAPH + {0xD9CC, 0x6917}, //8429 #CJK UNIFIED IDEOGRAPH + {0xD9CD, 0x68CE}, //8430 #CJK UNIFIED IDEOGRAPH + {0xD9CE, 0x68C8}, //8431 #CJK UNIFIED IDEOGRAPH + {0xD9CF, 0x68DD}, //8432 #CJK UNIFIED IDEOGRAPH + {0xD9D0, 0x68DE}, //8433 #CJK UNIFIED IDEOGRAPH + {0xD9D1, 0x68E6}, //8434 #CJK UNIFIED IDEOGRAPH + {0xD9D2, 0x68F4}, //8435 #CJK UNIFIED IDEOGRAPH + {0xD9D3, 0x68D1}, //8436 #CJK UNIFIED IDEOGRAPH + {0xD9D4, 0x6906}, //8437 #CJK UNIFIED IDEOGRAPH + {0xD9D5, 0x68D4}, //8438 #CJK UNIFIED IDEOGRAPH + {0xD9D6, 0x68E9}, //8439 #CJK UNIFIED IDEOGRAPH + {0xD9D7, 0x6915}, //8440 #CJK UNIFIED IDEOGRAPH + {0xD9D8, 0x6925}, //8441 #CJK UNIFIED IDEOGRAPH + {0xD9D9, 0x68C7}, //8442 #CJK UNIFIED IDEOGRAPH + {0xD9DA, 0x6B39}, //8443 #CJK UNIFIED IDEOGRAPH + {0xD9DB, 0x6B3B}, //8444 #CJK UNIFIED IDEOGRAPH + {0xD9DC, 0x6B3F}, //8445 #CJK UNIFIED IDEOGRAPH + {0xD9DD, 0x6B3C}, //8446 #CJK UNIFIED IDEOGRAPH + {0xD9DE, 0x6B94}, //8447 #CJK UNIFIED IDEOGRAPH + {0xD9DF, 0x6B97}, //8448 #CJK UNIFIED IDEOGRAPH + {0xD9E0, 0x6B99}, //8449 #CJK UNIFIED IDEOGRAPH + {0xD9E1, 0x6B95}, //8450 #CJK UNIFIED IDEOGRAPH + {0xD9E2, 0x6BBD}, //8451 #CJK UNIFIED IDEOGRAPH + {0xD9E3, 0x6BF0}, //8452 #CJK UNIFIED IDEOGRAPH + {0xD9E4, 0x6BF2}, //8453 #CJK UNIFIED IDEOGRAPH + {0xD9E5, 0x6BF3}, //8454 #CJK UNIFIED IDEOGRAPH + {0xD9E6, 0x6C30}, //8455 #CJK UNIFIED IDEOGRAPH + {0xD9E7, 0x6DFC}, //8456 #CJK UNIFIED IDEOGRAPH + {0xD9E8, 0x6E46}, //8457 #CJK UNIFIED IDEOGRAPH + {0xD9E9, 0x6E47}, //8458 #CJK UNIFIED IDEOGRAPH + {0xD9EA, 0x6E1F}, //8459 #CJK UNIFIED IDEOGRAPH + {0xD9EB, 0x6E49}, //8460 #CJK UNIFIED IDEOGRAPH + {0xD9EC, 0x6E88}, //8461 #CJK UNIFIED IDEOGRAPH + {0xD9ED, 0x6E3C}, //8462 #CJK UNIFIED IDEOGRAPH + {0xD9EE, 0x6E3D}, //8463 #CJK UNIFIED IDEOGRAPH + {0xD9EF, 0x6E45}, //8464 #CJK UNIFIED IDEOGRAPH + {0xD9F0, 0x6E62}, //8465 #CJK UNIFIED IDEOGRAPH + {0xD9F1, 0x6E2B}, //8466 #CJK UNIFIED IDEOGRAPH + {0xD9F2, 0x6E3F}, //8467 #CJK UNIFIED IDEOGRAPH + {0xD9F3, 0x6E41}, //8468 #CJK UNIFIED IDEOGRAPH + {0xD9F4, 0x6E5D}, //8469 #CJK UNIFIED IDEOGRAPH + {0xD9F5, 0x6E73}, //8470 #CJK UNIFIED IDEOGRAPH + {0xD9F6, 0x6E1C}, //8471 #CJK UNIFIED IDEOGRAPH + {0xD9F7, 0x6E33}, //8472 #CJK UNIFIED IDEOGRAPH + {0xD9F8, 0x6E4B}, //8473 #CJK UNIFIED IDEOGRAPH + {0xD9F9, 0x6E40}, //8474 #CJK UNIFIED IDEOGRAPH + {0xD9FA, 0x6E51}, //8475 #CJK UNIFIED IDEOGRAPH + {0xD9FB, 0x6E3B}, //8476 #CJK UNIFIED IDEOGRAPH + {0xD9FC, 0x6E03}, //8477 #CJK UNIFIED IDEOGRAPH + {0xD9FD, 0x6E2E}, //8478 #CJK UNIFIED IDEOGRAPH + {0xD9FE, 0x6E5E}, //8479 #CJK UNIFIED IDEOGRAPH + {0xDA40, 0x6E68}, //8480 #CJK UNIFIED IDEOGRAPH + {0xDA41, 0x6E5C}, //8481 #CJK UNIFIED IDEOGRAPH + {0xDA42, 0x6E61}, //8482 #CJK UNIFIED IDEOGRAPH + {0xDA43, 0x6E31}, //8483 #CJK UNIFIED IDEOGRAPH + {0xDA44, 0x6E28}, //8484 #CJK UNIFIED IDEOGRAPH + {0xDA45, 0x6E60}, //8485 #CJK UNIFIED IDEOGRAPH + {0xDA46, 0x6E71}, //8486 #CJK UNIFIED IDEOGRAPH + {0xDA47, 0x6E6B}, //8487 #CJK UNIFIED IDEOGRAPH + {0xDA48, 0x6E39}, //8488 #CJK UNIFIED IDEOGRAPH + {0xDA49, 0x6E22}, //8489 #CJK UNIFIED IDEOGRAPH + {0xDA4A, 0x6E30}, //8490 #CJK UNIFIED IDEOGRAPH + {0xDA4B, 0x6E53}, //8491 #CJK UNIFIED IDEOGRAPH + {0xDA4C, 0x6E65}, //8492 #CJK UNIFIED IDEOGRAPH + {0xDA4D, 0x6E27}, //8493 #CJK UNIFIED IDEOGRAPH + {0xDA4E, 0x6E78}, //8494 #CJK UNIFIED IDEOGRAPH + {0xDA4F, 0x6E64}, //8495 #CJK UNIFIED IDEOGRAPH + {0xDA50, 0x6E77}, //8496 #CJK UNIFIED IDEOGRAPH + {0xDA51, 0x6E55}, //8497 #CJK UNIFIED IDEOGRAPH + {0xDA52, 0x6E79}, //8498 #CJK UNIFIED IDEOGRAPH + {0xDA53, 0x6E52}, //8499 #CJK UNIFIED IDEOGRAPH + {0xDA54, 0x6E66}, //8500 #CJK UNIFIED IDEOGRAPH + {0xDA55, 0x6E35}, //8501 #CJK UNIFIED IDEOGRAPH + {0xDA56, 0x6E36}, //8502 #CJK UNIFIED IDEOGRAPH + {0xDA57, 0x6E5A}, //8503 #CJK UNIFIED IDEOGRAPH + {0xDA58, 0x7120}, //8504 #CJK UNIFIED IDEOGRAPH + {0xDA59, 0x711E}, //8505 #CJK UNIFIED IDEOGRAPH + {0xDA5A, 0x712F}, //8506 #CJK UNIFIED IDEOGRAPH + {0xDA5B, 0x70FB}, //8507 #CJK UNIFIED IDEOGRAPH + {0xDA5C, 0x712E}, //8508 #CJK UNIFIED IDEOGRAPH + {0xDA5D, 0x7131}, //8509 #CJK UNIFIED IDEOGRAPH + {0xDA5E, 0x7123}, //8510 #CJK UNIFIED IDEOGRAPH + {0xDA5F, 0x7125}, //8511 #CJK UNIFIED IDEOGRAPH + {0xDA60, 0x7122}, //8512 #CJK UNIFIED IDEOGRAPH + {0xDA61, 0x7132}, //8513 #CJK UNIFIED IDEOGRAPH + {0xDA62, 0x711F}, //8514 #CJK UNIFIED IDEOGRAPH + {0xDA63, 0x7128}, //8515 #CJK UNIFIED IDEOGRAPH + {0xDA64, 0x713A}, //8516 #CJK UNIFIED IDEOGRAPH + {0xDA65, 0x711B}, //8517 #CJK UNIFIED IDEOGRAPH + {0xDA66, 0x724B}, //8518 #CJK UNIFIED IDEOGRAPH + {0xDA67, 0x725A}, //8519 #CJK UNIFIED IDEOGRAPH + {0xDA68, 0x7288}, //8520 #CJK UNIFIED IDEOGRAPH + {0xDA69, 0x7289}, //8521 #CJK UNIFIED IDEOGRAPH + {0xDA6A, 0x7286}, //8522 #CJK UNIFIED IDEOGRAPH + {0xDA6B, 0x7285}, //8523 #CJK UNIFIED IDEOGRAPH + {0xDA6C, 0x728B}, //8524 #CJK UNIFIED IDEOGRAPH + {0xDA6D, 0x7312}, //8525 #CJK UNIFIED IDEOGRAPH + {0xDA6E, 0x730B}, //8526 #CJK UNIFIED IDEOGRAPH + {0xDA6F, 0x7330}, //8527 #CJK UNIFIED IDEOGRAPH + {0xDA70, 0x7322}, //8528 #CJK UNIFIED IDEOGRAPH + {0xDA71, 0x7331}, //8529 #CJK UNIFIED IDEOGRAPH + {0xDA72, 0x7333}, //8530 #CJK UNIFIED IDEOGRAPH + {0xDA73, 0x7327}, //8531 #CJK UNIFIED IDEOGRAPH + {0xDA74, 0x7332}, //8532 #CJK UNIFIED IDEOGRAPH + {0xDA75, 0x732D}, //8533 #CJK UNIFIED IDEOGRAPH + {0xDA76, 0x7326}, //8534 #CJK UNIFIED IDEOGRAPH + {0xDA77, 0x7323}, //8535 #CJK UNIFIED IDEOGRAPH + {0xDA78, 0x7335}, //8536 #CJK UNIFIED IDEOGRAPH + {0xDA79, 0x730C}, //8537 #CJK UNIFIED IDEOGRAPH + {0xDA7A, 0x742E}, //8538 #CJK UNIFIED IDEOGRAPH + {0xDA7B, 0x742C}, //8539 #CJK UNIFIED IDEOGRAPH + {0xDA7C, 0x7430}, //8540 #CJK UNIFIED IDEOGRAPH + {0xDA7D, 0x742B}, //8541 #CJK UNIFIED IDEOGRAPH + {0xDA7E, 0x7416}, //8542 #CJK UNIFIED IDEOGRAPH + {0xDAA1, 0x741A}, //8543 #CJK UNIFIED IDEOGRAPH + {0xDAA2, 0x7421}, //8544 #CJK UNIFIED IDEOGRAPH + {0xDAA3, 0x742D}, //8545 #CJK UNIFIED IDEOGRAPH + {0xDAA4, 0x7431}, //8546 #CJK UNIFIED IDEOGRAPH + {0xDAA5, 0x7424}, //8547 #CJK UNIFIED IDEOGRAPH + {0xDAA6, 0x7423}, //8548 #CJK UNIFIED IDEOGRAPH + {0xDAA7, 0x741D}, //8549 #CJK UNIFIED IDEOGRAPH + {0xDAA8, 0x7429}, //8550 #CJK UNIFIED IDEOGRAPH + {0xDAA9, 0x7420}, //8551 #CJK UNIFIED IDEOGRAPH + {0xDAAA, 0x7432}, //8552 #CJK UNIFIED IDEOGRAPH + {0xDAAB, 0x74FB}, //8553 #CJK UNIFIED IDEOGRAPH + {0xDAAC, 0x752F}, //8554 #CJK UNIFIED IDEOGRAPH + {0xDAAD, 0x756F}, //8555 #CJK UNIFIED IDEOGRAPH + {0xDAAE, 0x756C}, //8556 #CJK UNIFIED IDEOGRAPH + {0xDAAF, 0x75E7}, //8557 #CJK UNIFIED IDEOGRAPH + {0xDAB0, 0x75DA}, //8558 #CJK UNIFIED IDEOGRAPH + {0xDAB1, 0x75E1}, //8559 #CJK UNIFIED IDEOGRAPH + {0xDAB2, 0x75E6}, //8560 #CJK UNIFIED IDEOGRAPH + {0xDAB3, 0x75DD}, //8561 #CJK UNIFIED IDEOGRAPH + {0xDAB4, 0x75DF}, //8562 #CJK UNIFIED IDEOGRAPH + {0xDAB5, 0x75E4}, //8563 #CJK UNIFIED IDEOGRAPH + {0xDAB6, 0x75D7}, //8564 #CJK UNIFIED IDEOGRAPH + {0xDAB7, 0x7695}, //8565 #CJK UNIFIED IDEOGRAPH + {0xDAB8, 0x7692}, //8566 #CJK UNIFIED IDEOGRAPH + {0xDAB9, 0x76DA}, //8567 #CJK UNIFIED IDEOGRAPH + {0xDABA, 0x7746}, //8568 #CJK UNIFIED IDEOGRAPH + {0xDABB, 0x7747}, //8569 #CJK UNIFIED IDEOGRAPH + {0xDABC, 0x7744}, //8570 #CJK UNIFIED IDEOGRAPH + {0xDABD, 0x774D}, //8571 #CJK UNIFIED IDEOGRAPH + {0xDABE, 0x7745}, //8572 #CJK UNIFIED IDEOGRAPH + {0xDABF, 0x774A}, //8573 #CJK UNIFIED IDEOGRAPH + {0xDAC0, 0x774E}, //8574 #CJK UNIFIED IDEOGRAPH + {0xDAC1, 0x774B}, //8575 #CJK UNIFIED IDEOGRAPH + {0xDAC2, 0x774C}, //8576 #CJK UNIFIED IDEOGRAPH + {0xDAC3, 0x77DE}, //8577 #CJK UNIFIED IDEOGRAPH + {0xDAC4, 0x77EC}, //8578 #CJK UNIFIED IDEOGRAPH + {0xDAC5, 0x7860}, //8579 #CJK UNIFIED IDEOGRAPH + {0xDAC6, 0x7864}, //8580 #CJK UNIFIED IDEOGRAPH + {0xDAC7, 0x7865}, //8581 #CJK UNIFIED IDEOGRAPH + {0xDAC8, 0x785C}, //8582 #CJK UNIFIED IDEOGRAPH + {0xDAC9, 0x786D}, //8583 #CJK UNIFIED IDEOGRAPH + {0xDACA, 0x7871}, //8584 #CJK UNIFIED IDEOGRAPH + {0xDACB, 0x786A}, //8585 #CJK UNIFIED IDEOGRAPH + {0xDACC, 0x786E}, //8586 #CJK UNIFIED IDEOGRAPH + {0xDACD, 0x7870}, //8587 #CJK UNIFIED IDEOGRAPH + {0xDACE, 0x7869}, //8588 #CJK UNIFIED IDEOGRAPH + {0xDACF, 0x7868}, //8589 #CJK UNIFIED IDEOGRAPH + {0xDAD0, 0x785E}, //8590 #CJK UNIFIED IDEOGRAPH + {0xDAD1, 0x7862}, //8591 #CJK UNIFIED IDEOGRAPH + {0xDAD2, 0x7974}, //8592 #CJK UNIFIED IDEOGRAPH + {0xDAD3, 0x7973}, //8593 #CJK UNIFIED IDEOGRAPH + {0xDAD4, 0x7972}, //8594 #CJK UNIFIED IDEOGRAPH + {0xDAD5, 0x7970}, //8595 #CJK UNIFIED IDEOGRAPH + {0xDAD6, 0x7A02}, //8596 #CJK UNIFIED IDEOGRAPH + {0xDAD7, 0x7A0A}, //8597 #CJK UNIFIED IDEOGRAPH + {0xDAD8, 0x7A03}, //8598 #CJK UNIFIED IDEOGRAPH + {0xDAD9, 0x7A0C}, //8599 #CJK UNIFIED IDEOGRAPH + {0xDADA, 0x7A04}, //8600 #CJK UNIFIED IDEOGRAPH + {0xDADB, 0x7A99}, //8601 #CJK UNIFIED IDEOGRAPH + {0xDADC, 0x7AE6}, //8602 #CJK UNIFIED IDEOGRAPH + {0xDADD, 0x7AE4}, //8603 #CJK UNIFIED IDEOGRAPH + {0xDADE, 0x7B4A}, //8604 #CJK UNIFIED IDEOGRAPH + {0xDADF, 0x7B3B}, //8605 #CJK UNIFIED IDEOGRAPH + {0xDAE0, 0x7B44}, //8606 #CJK UNIFIED IDEOGRAPH + {0xDAE1, 0x7B48}, //8607 #CJK UNIFIED IDEOGRAPH + {0xDAE2, 0x7B4C}, //8608 #CJK UNIFIED IDEOGRAPH + {0xDAE3, 0x7B4E}, //8609 #CJK UNIFIED IDEOGRAPH + {0xDAE4, 0x7B40}, //8610 #CJK UNIFIED IDEOGRAPH + {0xDAE5, 0x7B58}, //8611 #CJK UNIFIED IDEOGRAPH + {0xDAE6, 0x7B45}, //8612 #CJK UNIFIED IDEOGRAPH + {0xDAE7, 0x7CA2}, //8613 #CJK UNIFIED IDEOGRAPH + {0xDAE8, 0x7C9E}, //8614 #CJK UNIFIED IDEOGRAPH + {0xDAE9, 0x7CA8}, //8615 #CJK UNIFIED IDEOGRAPH + {0xDAEA, 0x7CA1}, //8616 #CJK UNIFIED IDEOGRAPH + {0xDAEB, 0x7D58}, //8617 #CJK UNIFIED IDEOGRAPH + {0xDAEC, 0x7D6F}, //8618 #CJK UNIFIED IDEOGRAPH + {0xDAED, 0x7D63}, //8619 #CJK UNIFIED IDEOGRAPH + {0xDAEE, 0x7D53}, //8620 #CJK UNIFIED IDEOGRAPH + {0xDAEF, 0x7D56}, //8621 #CJK UNIFIED IDEOGRAPH + {0xDAF0, 0x7D67}, //8622 #CJK UNIFIED IDEOGRAPH + {0xDAF1, 0x7D6A}, //8623 #CJK UNIFIED IDEOGRAPH + {0xDAF2, 0x7D4F}, //8624 #CJK UNIFIED IDEOGRAPH + {0xDAF3, 0x7D6D}, //8625 #CJK UNIFIED IDEOGRAPH + {0xDAF4, 0x7D5C}, //8626 #CJK UNIFIED IDEOGRAPH + {0xDAF5, 0x7D6B}, //8627 #CJK UNIFIED IDEOGRAPH + {0xDAF6, 0x7D52}, //8628 #CJK UNIFIED IDEOGRAPH + {0xDAF7, 0x7D54}, //8629 #CJK UNIFIED IDEOGRAPH + {0xDAF8, 0x7D69}, //8630 #CJK UNIFIED IDEOGRAPH + {0xDAF9, 0x7D51}, //8631 #CJK UNIFIED IDEOGRAPH + {0xDAFA, 0x7D5F}, //8632 #CJK UNIFIED IDEOGRAPH + {0xDAFB, 0x7D4E}, //8633 #CJK UNIFIED IDEOGRAPH + {0xDAFC, 0x7F3E}, //8634 #CJK UNIFIED IDEOGRAPH + {0xDAFD, 0x7F3F}, //8635 #CJK UNIFIED IDEOGRAPH + {0xDAFE, 0x7F65}, //8636 #CJK UNIFIED IDEOGRAPH + {0xDB40, 0x7F66}, //8637 #CJK UNIFIED IDEOGRAPH + {0xDB41, 0x7FA2}, //8638 #CJK UNIFIED IDEOGRAPH + {0xDB42, 0x7FA0}, //8639 #CJK UNIFIED IDEOGRAPH + {0xDB43, 0x7FA1}, //8640 #CJK UNIFIED IDEOGRAPH + {0xDB44, 0x7FD7}, //8641 #CJK UNIFIED IDEOGRAPH + {0xDB45, 0x8051}, //8642 #CJK UNIFIED IDEOGRAPH + {0xDB46, 0x804F}, //8643 #CJK UNIFIED IDEOGRAPH + {0xDB47, 0x8050}, //8644 #CJK UNIFIED IDEOGRAPH + {0xDB48, 0x80FE}, //8645 #CJK UNIFIED IDEOGRAPH + {0xDB49, 0x80D4}, //8646 #CJK UNIFIED IDEOGRAPH + {0xDB4A, 0x8143}, //8647 #CJK UNIFIED IDEOGRAPH + {0xDB4B, 0x814A}, //8648 #CJK UNIFIED IDEOGRAPH + {0xDB4C, 0x8152}, //8649 #CJK UNIFIED IDEOGRAPH + {0xDB4D, 0x814F}, //8650 #CJK UNIFIED IDEOGRAPH + {0xDB4E, 0x8147}, //8651 #CJK UNIFIED IDEOGRAPH + {0xDB4F, 0x813D}, //8652 #CJK UNIFIED IDEOGRAPH + {0xDB50, 0x814D}, //8653 #CJK UNIFIED IDEOGRAPH + {0xDB51, 0x813A}, //8654 #CJK UNIFIED IDEOGRAPH + {0xDB52, 0x81E6}, //8655 #CJK UNIFIED IDEOGRAPH + {0xDB53, 0x81EE}, //8656 #CJK UNIFIED IDEOGRAPH + {0xDB54, 0x81F7}, //8657 #CJK UNIFIED IDEOGRAPH + {0xDB55, 0x81F8}, //8658 #CJK UNIFIED IDEOGRAPH + {0xDB56, 0x81F9}, //8659 #CJK UNIFIED IDEOGRAPH + {0xDB57, 0x8204}, //8660 #CJK UNIFIED IDEOGRAPH + {0xDB58, 0x823C}, //8661 #CJK UNIFIED IDEOGRAPH + {0xDB59, 0x823D}, //8662 #CJK UNIFIED IDEOGRAPH + {0xDB5A, 0x823F}, //8663 #CJK UNIFIED IDEOGRAPH + {0xDB5B, 0x8275}, //8664 #CJK UNIFIED IDEOGRAPH + {0xDB5C, 0x833B}, //8665 #CJK UNIFIED IDEOGRAPH + {0xDB5D, 0x83CF}, //8666 #CJK UNIFIED IDEOGRAPH + {0xDB5E, 0x83F9}, //8667 #CJK UNIFIED IDEOGRAPH + {0xDB5F, 0x8423}, //8668 #CJK UNIFIED IDEOGRAPH + {0xDB60, 0x83C0}, //8669 #CJK UNIFIED IDEOGRAPH + {0xDB61, 0x83E8}, //8670 #CJK UNIFIED IDEOGRAPH + {0xDB62, 0x8412}, //8671 #CJK UNIFIED IDEOGRAPH + {0xDB63, 0x83E7}, //8672 #CJK UNIFIED IDEOGRAPH + {0xDB64, 0x83E4}, //8673 #CJK UNIFIED IDEOGRAPH + {0xDB65, 0x83FC}, //8674 #CJK UNIFIED IDEOGRAPH + {0xDB66, 0x83F6}, //8675 #CJK UNIFIED IDEOGRAPH + {0xDB67, 0x8410}, //8676 #CJK UNIFIED IDEOGRAPH + {0xDB68, 0x83C6}, //8677 #CJK UNIFIED IDEOGRAPH + {0xDB69, 0x83C8}, //8678 #CJK UNIFIED IDEOGRAPH + {0xDB6A, 0x83EB}, //8679 #CJK UNIFIED IDEOGRAPH + {0xDB6B, 0x83E3}, //8680 #CJK UNIFIED IDEOGRAPH + {0xDB6C, 0x83BF}, //8681 #CJK UNIFIED IDEOGRAPH + {0xDB6D, 0x8401}, //8682 #CJK UNIFIED IDEOGRAPH + {0xDB6E, 0x83DD}, //8683 #CJK UNIFIED IDEOGRAPH + {0xDB6F, 0x83E5}, //8684 #CJK UNIFIED IDEOGRAPH + {0xDB70, 0x83D8}, //8685 #CJK UNIFIED IDEOGRAPH + {0xDB71, 0x83FF}, //8686 #CJK UNIFIED IDEOGRAPH + {0xDB72, 0x83E1}, //8687 #CJK UNIFIED IDEOGRAPH + {0xDB73, 0x83CB}, //8688 #CJK UNIFIED IDEOGRAPH + {0xDB74, 0x83CE}, //8689 #CJK UNIFIED IDEOGRAPH + {0xDB75, 0x83D6}, //8690 #CJK UNIFIED IDEOGRAPH + {0xDB76, 0x83F5}, //8691 #CJK UNIFIED IDEOGRAPH + {0xDB77, 0x83C9}, //8692 #CJK UNIFIED IDEOGRAPH + {0xDB78, 0x8409}, //8693 #CJK UNIFIED IDEOGRAPH + {0xDB79, 0x840F}, //8694 #CJK UNIFIED IDEOGRAPH + {0xDB7A, 0x83DE}, //8695 #CJK UNIFIED IDEOGRAPH + {0xDB7B, 0x8411}, //8696 #CJK UNIFIED IDEOGRAPH + {0xDB7C, 0x8406}, //8697 #CJK UNIFIED IDEOGRAPH + {0xDB7D, 0x83C2}, //8698 #CJK UNIFIED IDEOGRAPH + {0xDB7E, 0x83F3}, //8699 #CJK UNIFIED IDEOGRAPH + {0xDBA1, 0x83D5}, //8700 #CJK UNIFIED IDEOGRAPH + {0xDBA2, 0x83FA}, //8701 #CJK UNIFIED IDEOGRAPH + {0xDBA3, 0x83C7}, //8702 #CJK UNIFIED IDEOGRAPH + {0xDBA4, 0x83D1}, //8703 #CJK UNIFIED IDEOGRAPH + {0xDBA5, 0x83EA}, //8704 #CJK UNIFIED IDEOGRAPH + {0xDBA6, 0x8413}, //8705 #CJK UNIFIED IDEOGRAPH + {0xDBA7, 0x83C3}, //8706 #CJK UNIFIED IDEOGRAPH + {0xDBA8, 0x83EC}, //8707 #CJK UNIFIED IDEOGRAPH + {0xDBA9, 0x83EE}, //8708 #CJK UNIFIED IDEOGRAPH + {0xDBAA, 0x83C4}, //8709 #CJK UNIFIED IDEOGRAPH + {0xDBAB, 0x83FB}, //8710 #CJK UNIFIED IDEOGRAPH + {0xDBAC, 0x83D7}, //8711 #CJK UNIFIED IDEOGRAPH + {0xDBAD, 0x83E2}, //8712 #CJK UNIFIED IDEOGRAPH + {0xDBAE, 0x841B}, //8713 #CJK UNIFIED IDEOGRAPH + {0xDBAF, 0x83DB}, //8714 #CJK UNIFIED IDEOGRAPH + {0xDBB0, 0x83FE}, //8715 #CJK UNIFIED IDEOGRAPH + {0xDBB1, 0x86D8}, //8716 #CJK UNIFIED IDEOGRAPH + {0xDBB2, 0x86E2}, //8717 #CJK UNIFIED IDEOGRAPH + {0xDBB3, 0x86E6}, //8718 #CJK UNIFIED IDEOGRAPH + {0xDBB4, 0x86D3}, //8719 #CJK UNIFIED IDEOGRAPH + {0xDBB5, 0x86E3}, //8720 #CJK UNIFIED IDEOGRAPH + {0xDBB6, 0x86DA}, //8721 #CJK UNIFIED IDEOGRAPH + {0xDBB7, 0x86EA}, //8722 #CJK UNIFIED IDEOGRAPH + {0xDBB8, 0x86DD}, //8723 #CJK UNIFIED IDEOGRAPH + {0xDBB9, 0x86EB}, //8724 #CJK UNIFIED IDEOGRAPH + {0xDBBA, 0x86DC}, //8725 #CJK UNIFIED IDEOGRAPH + {0xDBBB, 0x86EC}, //8726 #CJK UNIFIED IDEOGRAPH + {0xDBBC, 0x86E9}, //8727 #CJK UNIFIED IDEOGRAPH + {0xDBBD, 0x86D7}, //8728 #CJK UNIFIED IDEOGRAPH + {0xDBBE, 0x86E8}, //8729 #CJK UNIFIED IDEOGRAPH + {0xDBBF, 0x86D1}, //8730 #CJK UNIFIED IDEOGRAPH + {0xDBC0, 0x8848}, //8731 #CJK UNIFIED IDEOGRAPH + {0xDBC1, 0x8856}, //8732 #CJK UNIFIED IDEOGRAPH + {0xDBC2, 0x8855}, //8733 #CJK UNIFIED IDEOGRAPH + {0xDBC3, 0x88BA}, //8734 #CJK UNIFIED IDEOGRAPH + {0xDBC4, 0x88D7}, //8735 #CJK UNIFIED IDEOGRAPH + {0xDBC5, 0x88B9}, //8736 #CJK UNIFIED IDEOGRAPH + {0xDBC6, 0x88B8}, //8737 #CJK UNIFIED IDEOGRAPH + {0xDBC7, 0x88C0}, //8738 #CJK UNIFIED IDEOGRAPH + {0xDBC8, 0x88BE}, //8739 #CJK UNIFIED IDEOGRAPH + {0xDBC9, 0x88B6}, //8740 #CJK UNIFIED IDEOGRAPH + {0xDBCA, 0x88BC}, //8741 #CJK UNIFIED IDEOGRAPH + {0xDBCB, 0x88B7}, //8742 #CJK UNIFIED IDEOGRAPH + {0xDBCC, 0x88BD}, //8743 #CJK UNIFIED IDEOGRAPH + {0xDBCD, 0x88B2}, //8744 #CJK UNIFIED IDEOGRAPH + {0xDBCE, 0x8901}, //8745 #CJK UNIFIED IDEOGRAPH + {0xDBCF, 0x88C9}, //8746 #CJK UNIFIED IDEOGRAPH + {0xDBD0, 0x8995}, //8747 #CJK UNIFIED IDEOGRAPH + {0xDBD1, 0x8998}, //8748 #CJK UNIFIED IDEOGRAPH + {0xDBD2, 0x8997}, //8749 #CJK UNIFIED IDEOGRAPH + {0xDBD3, 0x89DD}, //8750 #CJK UNIFIED IDEOGRAPH + {0xDBD4, 0x89DA}, //8751 #CJK UNIFIED IDEOGRAPH + {0xDBD5, 0x89DB}, //8752 #CJK UNIFIED IDEOGRAPH + {0xDBD6, 0x8A4E}, //8753 #CJK UNIFIED IDEOGRAPH + {0xDBD7, 0x8A4D}, //8754 #CJK UNIFIED IDEOGRAPH + {0xDBD8, 0x8A39}, //8755 #CJK UNIFIED IDEOGRAPH + {0xDBD9, 0x8A59}, //8756 #CJK UNIFIED IDEOGRAPH + {0xDBDA, 0x8A40}, //8757 #CJK UNIFIED IDEOGRAPH + {0xDBDB, 0x8A57}, //8758 #CJK UNIFIED IDEOGRAPH + {0xDBDC, 0x8A58}, //8759 #CJK UNIFIED IDEOGRAPH + {0xDBDD, 0x8A44}, //8760 #CJK UNIFIED IDEOGRAPH + {0xDBDE, 0x8A45}, //8761 #CJK UNIFIED IDEOGRAPH + {0xDBDF, 0x8A52}, //8762 #CJK UNIFIED IDEOGRAPH + {0xDBE0, 0x8A48}, //8763 #CJK UNIFIED IDEOGRAPH + {0xDBE1, 0x8A51}, //8764 #CJK UNIFIED IDEOGRAPH + {0xDBE2, 0x8A4A}, //8765 #CJK UNIFIED IDEOGRAPH + {0xDBE3, 0x8A4C}, //8766 #CJK UNIFIED IDEOGRAPH + {0xDBE4, 0x8A4F}, //8767 #CJK UNIFIED IDEOGRAPH + {0xDBE5, 0x8C5F}, //8768 #CJK UNIFIED IDEOGRAPH + {0xDBE6, 0x8C81}, //8769 #CJK UNIFIED IDEOGRAPH + {0xDBE7, 0x8C80}, //8770 #CJK UNIFIED IDEOGRAPH + {0xDBE8, 0x8CBA}, //8771 #CJK UNIFIED IDEOGRAPH + {0xDBE9, 0x8CBE}, //8772 #CJK UNIFIED IDEOGRAPH + {0xDBEA, 0x8CB0}, //8773 #CJK UNIFIED IDEOGRAPH + {0xDBEB, 0x8CB9}, //8774 #CJK UNIFIED IDEOGRAPH + {0xDBEC, 0x8CB5}, //8775 #CJK UNIFIED IDEOGRAPH + {0xDBED, 0x8D84}, //8776 #CJK UNIFIED IDEOGRAPH + {0xDBEE, 0x8D80}, //8777 #CJK UNIFIED IDEOGRAPH + {0xDBEF, 0x8D89}, //8778 #CJK UNIFIED IDEOGRAPH + {0xDBF0, 0x8DD8}, //8779 #CJK UNIFIED IDEOGRAPH + {0xDBF1, 0x8DD3}, //8780 #CJK UNIFIED IDEOGRAPH + {0xDBF2, 0x8DCD}, //8781 #CJK UNIFIED IDEOGRAPH + {0xDBF3, 0x8DC7}, //8782 #CJK UNIFIED IDEOGRAPH + {0xDBF4, 0x8DD6}, //8783 #CJK UNIFIED IDEOGRAPH + {0xDBF5, 0x8DDC}, //8784 #CJK UNIFIED IDEOGRAPH + {0xDBF6, 0x8DCF}, //8785 #CJK UNIFIED IDEOGRAPH + {0xDBF7, 0x8DD5}, //8786 #CJK UNIFIED IDEOGRAPH + {0xDBF8, 0x8DD9}, //8787 #CJK UNIFIED IDEOGRAPH + {0xDBF9, 0x8DC8}, //8788 #CJK UNIFIED IDEOGRAPH + {0xDBFA, 0x8DD7}, //8789 #CJK UNIFIED IDEOGRAPH + {0xDBFB, 0x8DC5}, //8790 #CJK UNIFIED IDEOGRAPH + {0xDBFC, 0x8EEF}, //8791 #CJK UNIFIED IDEOGRAPH + {0xDBFD, 0x8EF7}, //8792 #CJK UNIFIED IDEOGRAPH + {0xDBFE, 0x8EFA}, //8793 #CJK UNIFIED IDEOGRAPH + {0xDC40, 0x8EF9}, //8794 #CJK UNIFIED IDEOGRAPH + {0xDC41, 0x8EE6}, //8795 #CJK UNIFIED IDEOGRAPH + {0xDC42, 0x8EEE}, //8796 #CJK UNIFIED IDEOGRAPH + {0xDC43, 0x8EE5}, //8797 #CJK UNIFIED IDEOGRAPH + {0xDC44, 0x8EF5}, //8798 #CJK UNIFIED IDEOGRAPH + {0xDC45, 0x8EE7}, //8799 #CJK UNIFIED IDEOGRAPH + {0xDC46, 0x8EE8}, //8800 #CJK UNIFIED IDEOGRAPH + {0xDC47, 0x8EF6}, //8801 #CJK UNIFIED IDEOGRAPH + {0xDC48, 0x8EEB}, //8802 #CJK UNIFIED IDEOGRAPH + {0xDC49, 0x8EF1}, //8803 #CJK UNIFIED IDEOGRAPH + {0xDC4A, 0x8EEC}, //8804 #CJK UNIFIED IDEOGRAPH + {0xDC4B, 0x8EF4}, //8805 #CJK UNIFIED IDEOGRAPH + {0xDC4C, 0x8EE9}, //8806 #CJK UNIFIED IDEOGRAPH + {0xDC4D, 0x902D}, //8807 #CJK UNIFIED IDEOGRAPH + {0xDC4E, 0x9034}, //8808 #CJK UNIFIED IDEOGRAPH + {0xDC4F, 0x902F}, //8809 #CJK UNIFIED IDEOGRAPH + {0xDC50, 0x9106}, //8810 #CJK UNIFIED IDEOGRAPH + {0xDC51, 0x912C}, //8811 #CJK UNIFIED IDEOGRAPH + {0xDC52, 0x9104}, //8812 #CJK UNIFIED IDEOGRAPH + {0xDC53, 0x90FF}, //8813 #CJK UNIFIED IDEOGRAPH + {0xDC54, 0x90FC}, //8814 #CJK UNIFIED IDEOGRAPH + {0xDC55, 0x9108}, //8815 #CJK UNIFIED IDEOGRAPH + {0xDC56, 0x90F9}, //8816 #CJK UNIFIED IDEOGRAPH + {0xDC57, 0x90FB}, //8817 #CJK UNIFIED IDEOGRAPH + {0xDC58, 0x9101}, //8818 #CJK UNIFIED IDEOGRAPH + {0xDC59, 0x9100}, //8819 #CJK UNIFIED IDEOGRAPH + {0xDC5A, 0x9107}, //8820 #CJK UNIFIED IDEOGRAPH + {0xDC5B, 0x9105}, //8821 #CJK UNIFIED IDEOGRAPH + {0xDC5C, 0x9103}, //8822 #CJK UNIFIED IDEOGRAPH + {0xDC5D, 0x9161}, //8823 #CJK UNIFIED IDEOGRAPH + {0xDC5E, 0x9164}, //8824 #CJK UNIFIED IDEOGRAPH + {0xDC5F, 0x915F}, //8825 #CJK UNIFIED IDEOGRAPH + {0xDC60, 0x9162}, //8826 #CJK UNIFIED IDEOGRAPH + {0xDC61, 0x9160}, //8827 #CJK UNIFIED IDEOGRAPH + {0xDC62, 0x9201}, //8828 #CJK UNIFIED IDEOGRAPH + {0xDC63, 0x920A}, //8829 #CJK UNIFIED IDEOGRAPH + {0xDC64, 0x9225}, //8830 #CJK UNIFIED IDEOGRAPH + {0xDC65, 0x9203}, //8831 #CJK UNIFIED IDEOGRAPH + {0xDC66, 0x921A}, //8832 #CJK UNIFIED IDEOGRAPH + {0xDC67, 0x9226}, //8833 #CJK UNIFIED IDEOGRAPH + {0xDC68, 0x920F}, //8834 #CJK UNIFIED IDEOGRAPH + {0xDC69, 0x920C}, //8835 #CJK UNIFIED IDEOGRAPH + {0xDC6A, 0x9200}, //8836 #CJK UNIFIED IDEOGRAPH + {0xDC6B, 0x9212}, //8837 #CJK UNIFIED IDEOGRAPH + {0xDC6C, 0x91FF}, //8838 #CJK UNIFIED IDEOGRAPH + {0xDC6D, 0x91FD}, //8839 #CJK UNIFIED IDEOGRAPH + {0xDC6E, 0x9206}, //8840 #CJK UNIFIED IDEOGRAPH + {0xDC6F, 0x9204}, //8841 #CJK UNIFIED IDEOGRAPH + {0xDC70, 0x9227}, //8842 #CJK UNIFIED IDEOGRAPH + {0xDC71, 0x9202}, //8843 #CJK UNIFIED IDEOGRAPH + {0xDC72, 0x921C}, //8844 #CJK UNIFIED IDEOGRAPH + {0xDC73, 0x9224}, //8845 #CJK UNIFIED IDEOGRAPH + {0xDC74, 0x9219}, //8846 #CJK UNIFIED IDEOGRAPH + {0xDC75, 0x9217}, //8847 #CJK UNIFIED IDEOGRAPH + {0xDC76, 0x9205}, //8848 #CJK UNIFIED IDEOGRAPH + {0xDC77, 0x9216}, //8849 #CJK UNIFIED IDEOGRAPH + {0xDC78, 0x957B}, //8850 #CJK UNIFIED IDEOGRAPH + {0xDC79, 0x958D}, //8851 #CJK UNIFIED IDEOGRAPH + {0xDC7A, 0x958C}, //8852 #CJK UNIFIED IDEOGRAPH + {0xDC7B, 0x9590}, //8853 #CJK UNIFIED IDEOGRAPH + {0xDC7C, 0x9687}, //8854 #CJK UNIFIED IDEOGRAPH + {0xDC7D, 0x967E}, //8855 #CJK UNIFIED IDEOGRAPH + {0xDC7E, 0x9688}, //8856 #CJK UNIFIED IDEOGRAPH + {0xDCA1, 0x9689}, //8857 #CJK UNIFIED IDEOGRAPH + {0xDCA2, 0x9683}, //8858 #CJK UNIFIED IDEOGRAPH + {0xDCA3, 0x9680}, //8859 #CJK UNIFIED IDEOGRAPH + {0xDCA4, 0x96C2}, //8860 #CJK UNIFIED IDEOGRAPH + {0xDCA5, 0x96C8}, //8861 #CJK UNIFIED IDEOGRAPH + {0xDCA6, 0x96C3}, //8862 #CJK UNIFIED IDEOGRAPH + {0xDCA7, 0x96F1}, //8863 #CJK UNIFIED IDEOGRAPH + {0xDCA8, 0x96F0}, //8864 #CJK UNIFIED IDEOGRAPH + {0xDCA9, 0x976C}, //8865 #CJK UNIFIED IDEOGRAPH + {0xDCAA, 0x9770}, //8866 #CJK UNIFIED IDEOGRAPH + {0xDCAB, 0x976E}, //8867 #CJK UNIFIED IDEOGRAPH + {0xDCAC, 0x9807}, //8868 #CJK UNIFIED IDEOGRAPH + {0xDCAD, 0x98A9}, //8869 #CJK UNIFIED IDEOGRAPH + {0xDCAE, 0x98EB}, //8870 #CJK UNIFIED IDEOGRAPH + {0xDCAF, 0x9CE6}, //8871 #CJK UNIFIED IDEOGRAPH + {0xDCB0, 0x9EF9}, //8872 #CJK UNIFIED IDEOGRAPH + {0xDCB1, 0x4E83}, //8873 #CJK UNIFIED IDEOGRAPH + {0xDCB2, 0x4E84}, //8874 #CJK UNIFIED IDEOGRAPH + {0xDCB3, 0x4EB6}, //8875 #CJK UNIFIED IDEOGRAPH + {0xDCB4, 0x50BD}, //8876 #CJK UNIFIED IDEOGRAPH + {0xDCB5, 0x50BF}, //8877 #CJK UNIFIED IDEOGRAPH + {0xDCB6, 0x50C6}, //8878 #CJK UNIFIED IDEOGRAPH + {0xDCB7, 0x50AE}, //8879 #CJK UNIFIED IDEOGRAPH + {0xDCB8, 0x50C4}, //8880 #CJK UNIFIED IDEOGRAPH + {0xDCB9, 0x50CA}, //8881 #CJK UNIFIED IDEOGRAPH + {0xDCBA, 0x50B4}, //8882 #CJK UNIFIED IDEOGRAPH + {0xDCBB, 0x50C8}, //8883 #CJK UNIFIED IDEOGRAPH + {0xDCBC, 0x50C2}, //8884 #CJK UNIFIED IDEOGRAPH + {0xDCBD, 0x50B0}, //8885 #CJK UNIFIED IDEOGRAPH + {0xDCBE, 0x50C1}, //8886 #CJK UNIFIED IDEOGRAPH + {0xDCBF, 0x50BA}, //8887 #CJK UNIFIED IDEOGRAPH + {0xDCC0, 0x50B1}, //8888 #CJK UNIFIED IDEOGRAPH + {0xDCC1, 0x50CB}, //8889 #CJK UNIFIED IDEOGRAPH + {0xDCC2, 0x50C9}, //8890 #CJK UNIFIED IDEOGRAPH + {0xDCC3, 0x50B6}, //8891 #CJK UNIFIED IDEOGRAPH + {0xDCC4, 0x50B8}, //8892 #CJK UNIFIED IDEOGRAPH + {0xDCC5, 0x51D7}, //8893 #CJK UNIFIED IDEOGRAPH + {0xDCC6, 0x527A}, //8894 #CJK UNIFIED IDEOGRAPH + {0xDCC7, 0x5278}, //8895 #CJK UNIFIED IDEOGRAPH + {0xDCC8, 0x527B}, //8896 #CJK UNIFIED IDEOGRAPH + {0xDCC9, 0x527C}, //8897 #CJK UNIFIED IDEOGRAPH + {0xDCCA, 0x55C3}, //8898 #CJK UNIFIED IDEOGRAPH + {0xDCCB, 0x55DB}, //8899 #CJK UNIFIED IDEOGRAPH + {0xDCCC, 0x55CC}, //8900 #CJK UNIFIED IDEOGRAPH + {0xDCCD, 0x55D0}, //8901 #CJK UNIFIED IDEOGRAPH + {0xDCCE, 0x55CB}, //8902 #CJK UNIFIED IDEOGRAPH + {0xDCCF, 0x55CA}, //8903 #CJK UNIFIED IDEOGRAPH + {0xDCD0, 0x55DD}, //8904 #CJK UNIFIED IDEOGRAPH + {0xDCD1, 0x55C0}, //8905 #CJK UNIFIED IDEOGRAPH + {0xDCD2, 0x55D4}, //8906 #CJK UNIFIED IDEOGRAPH + {0xDCD3, 0x55C4}, //8907 #CJK UNIFIED IDEOGRAPH + {0xDCD4, 0x55E9}, //8908 #CJK UNIFIED IDEOGRAPH + {0xDCD5, 0x55BF}, //8909 #CJK UNIFIED IDEOGRAPH + {0xDCD6, 0x55D2}, //8910 #CJK UNIFIED IDEOGRAPH + {0xDCD7, 0x558D}, //8911 #CJK UNIFIED IDEOGRAPH + {0xDCD8, 0x55CF}, //8912 #CJK UNIFIED IDEOGRAPH + {0xDCD9, 0x55D5}, //8913 #CJK UNIFIED IDEOGRAPH + {0xDCDA, 0x55E2}, //8914 #CJK UNIFIED IDEOGRAPH + {0xDCDB, 0x55D6}, //8915 #CJK UNIFIED IDEOGRAPH + {0xDCDC, 0x55C8}, //8916 #CJK UNIFIED IDEOGRAPH + {0xDCDD, 0x55F2}, //8917 #CJK UNIFIED IDEOGRAPH + {0xDCDE, 0x55CD}, //8918 #CJK UNIFIED IDEOGRAPH + {0xDCDF, 0x55D9}, //8919 #CJK UNIFIED IDEOGRAPH + {0xDCE0, 0x55C2}, //8920 #CJK UNIFIED IDEOGRAPH + {0xDCE1, 0x5714}, //8921 #CJK UNIFIED IDEOGRAPH + {0xDCE2, 0x5853}, //8922 #CJK UNIFIED IDEOGRAPH + {0xDCE3, 0x5868}, //8923 #CJK UNIFIED IDEOGRAPH + {0xDCE4, 0x5864}, //8924 #CJK UNIFIED IDEOGRAPH + {0xDCE5, 0x584F}, //8925 #CJK UNIFIED IDEOGRAPH + {0xDCE6, 0x584D}, //8926 #CJK UNIFIED IDEOGRAPH + {0xDCE7, 0x5849}, //8927 #CJK UNIFIED IDEOGRAPH + {0xDCE8, 0x586F}, //8928 #CJK UNIFIED IDEOGRAPH + {0xDCE9, 0x5855}, //8929 #CJK UNIFIED IDEOGRAPH + {0xDCEA, 0x584E}, //8930 #CJK UNIFIED IDEOGRAPH + {0xDCEB, 0x585D}, //8931 #CJK UNIFIED IDEOGRAPH + {0xDCEC, 0x5859}, //8932 #CJK UNIFIED IDEOGRAPH + {0xDCED, 0x5865}, //8933 #CJK UNIFIED IDEOGRAPH + {0xDCEE, 0x585B}, //8934 #CJK UNIFIED IDEOGRAPH + {0xDCEF, 0x583D}, //8935 #CJK UNIFIED IDEOGRAPH + {0xDCF0, 0x5863}, //8936 #CJK UNIFIED IDEOGRAPH + {0xDCF1, 0x5871}, //8937 #CJK UNIFIED IDEOGRAPH + {0xDCF2, 0x58FC}, //8938 #CJK UNIFIED IDEOGRAPH + {0xDCF3, 0x5AC7}, //8939 #CJK UNIFIED IDEOGRAPH + {0xDCF4, 0x5AC4}, //8940 #CJK UNIFIED IDEOGRAPH + {0xDCF5, 0x5ACB}, //8941 #CJK UNIFIED IDEOGRAPH + {0xDCF6, 0x5ABA}, //8942 #CJK UNIFIED IDEOGRAPH + {0xDCF7, 0x5AB8}, //8943 #CJK UNIFIED IDEOGRAPH + {0xDCF8, 0x5AB1}, //8944 #CJK UNIFIED IDEOGRAPH + {0xDCF9, 0x5AB5}, //8945 #CJK UNIFIED IDEOGRAPH + {0xDCFA, 0x5AB0}, //8946 #CJK UNIFIED IDEOGRAPH + {0xDCFB, 0x5ABF}, //8947 #CJK UNIFIED IDEOGRAPH + {0xDCFC, 0x5AC8}, //8948 #CJK UNIFIED IDEOGRAPH + {0xDCFD, 0x5ABB}, //8949 #CJK UNIFIED IDEOGRAPH + {0xDCFE, 0x5AC6}, //8950 #CJK UNIFIED IDEOGRAPH + {0xDD40, 0x5AB7}, //8951 #CJK UNIFIED IDEOGRAPH + {0xDD41, 0x5AC0}, //8952 #CJK UNIFIED IDEOGRAPH + {0xDD42, 0x5ACA}, //8953 #CJK UNIFIED IDEOGRAPH + {0xDD43, 0x5AB4}, //8954 #CJK UNIFIED IDEOGRAPH + {0xDD44, 0x5AB6}, //8955 #CJK UNIFIED IDEOGRAPH + {0xDD45, 0x5ACD}, //8956 #CJK UNIFIED IDEOGRAPH + {0xDD46, 0x5AB9}, //8957 #CJK UNIFIED IDEOGRAPH + {0xDD47, 0x5A90}, //8958 #CJK UNIFIED IDEOGRAPH + {0xDD48, 0x5BD6}, //8959 #CJK UNIFIED IDEOGRAPH + {0xDD49, 0x5BD8}, //8960 #CJK UNIFIED IDEOGRAPH + {0xDD4A, 0x5BD9}, //8961 #CJK UNIFIED IDEOGRAPH + {0xDD4B, 0x5C1F}, //8962 #CJK UNIFIED IDEOGRAPH + {0xDD4C, 0x5C33}, //8963 #CJK UNIFIED IDEOGRAPH + {0xDD4D, 0x5D71}, //8964 #CJK UNIFIED IDEOGRAPH + {0xDD4E, 0x5D63}, //8965 #CJK UNIFIED IDEOGRAPH + {0xDD4F, 0x5D4A}, //8966 #CJK UNIFIED IDEOGRAPH + {0xDD50, 0x5D65}, //8967 #CJK UNIFIED IDEOGRAPH + {0xDD51, 0x5D72}, //8968 #CJK UNIFIED IDEOGRAPH + {0xDD52, 0x5D6C}, //8969 #CJK UNIFIED IDEOGRAPH + {0xDD53, 0x5D5E}, //8970 #CJK UNIFIED IDEOGRAPH + {0xDD54, 0x5D68}, //8971 #CJK UNIFIED IDEOGRAPH + {0xDD55, 0x5D67}, //8972 #CJK UNIFIED IDEOGRAPH + {0xDD56, 0x5D62}, //8973 #CJK UNIFIED IDEOGRAPH + {0xDD57, 0x5DF0}, //8974 #CJK UNIFIED IDEOGRAPH + {0xDD58, 0x5E4F}, //8975 #CJK UNIFIED IDEOGRAPH + {0xDD59, 0x5E4E}, //8976 #CJK UNIFIED IDEOGRAPH + {0xDD5A, 0x5E4A}, //8977 #CJK UNIFIED IDEOGRAPH + {0xDD5B, 0x5E4D}, //8978 #CJK UNIFIED IDEOGRAPH + {0xDD5C, 0x5E4B}, //8979 #CJK UNIFIED IDEOGRAPH + {0xDD5D, 0x5EC5}, //8980 #CJK UNIFIED IDEOGRAPH + {0xDD5E, 0x5ECC}, //8981 #CJK UNIFIED IDEOGRAPH + {0xDD5F, 0x5EC6}, //8982 #CJK UNIFIED IDEOGRAPH + {0xDD60, 0x5ECB}, //8983 #CJK UNIFIED IDEOGRAPH + {0xDD61, 0x5EC7}, //8984 #CJK UNIFIED IDEOGRAPH + {0xDD62, 0x5F40}, //8985 #CJK UNIFIED IDEOGRAPH + {0xDD63, 0x5FAF}, //8986 #CJK UNIFIED IDEOGRAPH + {0xDD64, 0x5FAD}, //8987 #CJK UNIFIED IDEOGRAPH + {0xDD65, 0x60F7}, //8988 #CJK UNIFIED IDEOGRAPH + {0xDD66, 0x6149}, //8989 #CJK UNIFIED IDEOGRAPH + {0xDD67, 0x614A}, //8990 #CJK UNIFIED IDEOGRAPH + {0xDD68, 0x612B}, //8991 #CJK UNIFIED IDEOGRAPH + {0xDD69, 0x6145}, //8992 #CJK UNIFIED IDEOGRAPH + {0xDD6A, 0x6136}, //8993 #CJK UNIFIED IDEOGRAPH + {0xDD6B, 0x6132}, //8994 #CJK UNIFIED IDEOGRAPH + {0xDD6C, 0x612E}, //8995 #CJK UNIFIED IDEOGRAPH + {0xDD6D, 0x6146}, //8996 #CJK UNIFIED IDEOGRAPH + {0xDD6E, 0x612F}, //8997 #CJK UNIFIED IDEOGRAPH + {0xDD6F, 0x614F}, //8998 #CJK UNIFIED IDEOGRAPH + {0xDD70, 0x6129}, //8999 #CJK UNIFIED IDEOGRAPH + {0xDD71, 0x6140}, //9000 #CJK UNIFIED IDEOGRAPH + {0xDD72, 0x6220}, //9001 #CJK UNIFIED IDEOGRAPH + {0xDD73, 0x9168}, //9002 #CJK UNIFIED IDEOGRAPH + {0xDD74, 0x6223}, //9003 #CJK UNIFIED IDEOGRAPH + {0xDD75, 0x6225}, //9004 #CJK UNIFIED IDEOGRAPH + {0xDD76, 0x6224}, //9005 #CJK UNIFIED IDEOGRAPH + {0xDD77, 0x63C5}, //9006 #CJK UNIFIED IDEOGRAPH + {0xDD78, 0x63F1}, //9007 #CJK UNIFIED IDEOGRAPH + {0xDD79, 0x63EB}, //9008 #CJK UNIFIED IDEOGRAPH + {0xDD7A, 0x6410}, //9009 #CJK UNIFIED IDEOGRAPH + {0xDD7B, 0x6412}, //9010 #CJK UNIFIED IDEOGRAPH + {0xDD7C, 0x6409}, //9011 #CJK UNIFIED IDEOGRAPH + {0xDD7D, 0x6420}, //9012 #CJK UNIFIED IDEOGRAPH + {0xDD7E, 0x6424}, //9013 #CJK UNIFIED IDEOGRAPH + {0xDDA1, 0x6433}, //9014 #CJK UNIFIED IDEOGRAPH + {0xDDA2, 0x6443}, //9015 #CJK UNIFIED IDEOGRAPH + {0xDDA3, 0x641F}, //9016 #CJK UNIFIED IDEOGRAPH + {0xDDA4, 0x6415}, //9017 #CJK UNIFIED IDEOGRAPH + {0xDDA5, 0x6418}, //9018 #CJK UNIFIED IDEOGRAPH + {0xDDA6, 0x6439}, //9019 #CJK UNIFIED IDEOGRAPH + {0xDDA7, 0x6437}, //9020 #CJK UNIFIED IDEOGRAPH + {0xDDA8, 0x6422}, //9021 #CJK UNIFIED IDEOGRAPH + {0xDDA9, 0x6423}, //9022 #CJK UNIFIED IDEOGRAPH + {0xDDAA, 0x640C}, //9023 #CJK UNIFIED IDEOGRAPH + {0xDDAB, 0x6426}, //9024 #CJK UNIFIED IDEOGRAPH + {0xDDAC, 0x6430}, //9025 #CJK UNIFIED IDEOGRAPH + {0xDDAD, 0x6428}, //9026 #CJK UNIFIED IDEOGRAPH + {0xDDAE, 0x6441}, //9027 #CJK UNIFIED IDEOGRAPH + {0xDDAF, 0x6435}, //9028 #CJK UNIFIED IDEOGRAPH + {0xDDB0, 0x642F}, //9029 #CJK UNIFIED IDEOGRAPH + {0xDDB1, 0x640A}, //9030 #CJK UNIFIED IDEOGRAPH + {0xDDB2, 0x641A}, //9031 #CJK UNIFIED IDEOGRAPH + {0xDDB3, 0x6440}, //9032 #CJK UNIFIED IDEOGRAPH + {0xDDB4, 0x6425}, //9033 #CJK UNIFIED IDEOGRAPH + {0xDDB5, 0x6427}, //9034 #CJK UNIFIED IDEOGRAPH + {0xDDB6, 0x640B}, //9035 #CJK UNIFIED IDEOGRAPH + {0xDDB7, 0x63E7}, //9036 #CJK UNIFIED IDEOGRAPH + {0xDDB8, 0x641B}, //9037 #CJK UNIFIED IDEOGRAPH + {0xDDB9, 0x642E}, //9038 #CJK UNIFIED IDEOGRAPH + {0xDDBA, 0x6421}, //9039 #CJK UNIFIED IDEOGRAPH + {0xDDBB, 0x640E}, //9040 #CJK UNIFIED IDEOGRAPH + {0xDDBC, 0x656F}, //9041 #CJK UNIFIED IDEOGRAPH + {0xDDBD, 0x6592}, //9042 #CJK UNIFIED IDEOGRAPH + {0xDDBE, 0x65D3}, //9043 #CJK UNIFIED IDEOGRAPH + {0xDDBF, 0x6686}, //9044 #CJK UNIFIED IDEOGRAPH + {0xDDC0, 0x668C}, //9045 #CJK UNIFIED IDEOGRAPH + {0xDDC1, 0x6695}, //9046 #CJK UNIFIED IDEOGRAPH + {0xDDC2, 0x6690}, //9047 #CJK UNIFIED IDEOGRAPH + {0xDDC3, 0x668B}, //9048 #CJK UNIFIED IDEOGRAPH + {0xDDC4, 0x668A}, //9049 #CJK UNIFIED IDEOGRAPH + {0xDDC5, 0x6699}, //9050 #CJK UNIFIED IDEOGRAPH + {0xDDC6, 0x6694}, //9051 #CJK UNIFIED IDEOGRAPH + {0xDDC7, 0x6678}, //9052 #CJK UNIFIED IDEOGRAPH + {0xDDC8, 0x6720}, //9053 #CJK UNIFIED IDEOGRAPH + {0xDDC9, 0x6966}, //9054 #CJK UNIFIED IDEOGRAPH + {0xDDCA, 0x695F}, //9055 #CJK UNIFIED IDEOGRAPH + {0xDDCB, 0x6938}, //9056 #CJK UNIFIED IDEOGRAPH + {0xDDCC, 0x694E}, //9057 #CJK UNIFIED IDEOGRAPH + {0xDDCD, 0x6962}, //9058 #CJK UNIFIED IDEOGRAPH + {0xDDCE, 0x6971}, //9059 #CJK UNIFIED IDEOGRAPH + {0xDDCF, 0x693F}, //9060 #CJK UNIFIED IDEOGRAPH + {0xDDD0, 0x6945}, //9061 #CJK UNIFIED IDEOGRAPH + {0xDDD1, 0x696A}, //9062 #CJK UNIFIED IDEOGRAPH + {0xDDD2, 0x6939}, //9063 #CJK UNIFIED IDEOGRAPH + {0xDDD3, 0x6942}, //9064 #CJK UNIFIED IDEOGRAPH + {0xDDD4, 0x6957}, //9065 #CJK UNIFIED IDEOGRAPH + {0xDDD5, 0x6959}, //9066 #CJK UNIFIED IDEOGRAPH + {0xDDD6, 0x697A}, //9067 #CJK UNIFIED IDEOGRAPH + {0xDDD7, 0x6948}, //9068 #CJK UNIFIED IDEOGRAPH + {0xDDD8, 0x6949}, //9069 #CJK UNIFIED IDEOGRAPH + {0xDDD9, 0x6935}, //9070 #CJK UNIFIED IDEOGRAPH + {0xDDDA, 0x696C}, //9071 #CJK UNIFIED IDEOGRAPH + {0xDDDB, 0x6933}, //9072 #CJK UNIFIED IDEOGRAPH + {0xDDDC, 0x693D}, //9073 #CJK UNIFIED IDEOGRAPH + {0xDDDD, 0x6965}, //9074 #CJK UNIFIED IDEOGRAPH + {0xDDDE, 0x68F0}, //9075 #CJK UNIFIED IDEOGRAPH + {0xDDDF, 0x6978}, //9076 #CJK UNIFIED IDEOGRAPH + {0xDDE0, 0x6934}, //9077 #CJK UNIFIED IDEOGRAPH + {0xDDE1, 0x6969}, //9078 #CJK UNIFIED IDEOGRAPH + {0xDDE2, 0x6940}, //9079 #CJK UNIFIED IDEOGRAPH + {0xDDE3, 0x696F}, //9080 #CJK UNIFIED IDEOGRAPH + {0xDDE4, 0x6944}, //9081 #CJK UNIFIED IDEOGRAPH + {0xDDE5, 0x6976}, //9082 #CJK UNIFIED IDEOGRAPH + {0xDDE6, 0x6958}, //9083 #CJK UNIFIED IDEOGRAPH + {0xDDE7, 0x6941}, //9084 #CJK UNIFIED IDEOGRAPH + {0xDDE8, 0x6974}, //9085 #CJK UNIFIED IDEOGRAPH + {0xDDE9, 0x694C}, //9086 #CJK UNIFIED IDEOGRAPH + {0xDDEA, 0x693B}, //9087 #CJK UNIFIED IDEOGRAPH + {0xDDEB, 0x694B}, //9088 #CJK UNIFIED IDEOGRAPH + {0xDDEC, 0x6937}, //9089 #CJK UNIFIED IDEOGRAPH + {0xDDED, 0x695C}, //9090 #CJK UNIFIED IDEOGRAPH + {0xDDEE, 0x694F}, //9091 #CJK UNIFIED IDEOGRAPH + {0xDDEF, 0x6951}, //9092 #CJK UNIFIED IDEOGRAPH + {0xDDF0, 0x6932}, //9093 #CJK UNIFIED IDEOGRAPH + {0xDDF1, 0x6952}, //9094 #CJK UNIFIED IDEOGRAPH + {0xDDF2, 0x692F}, //9095 #CJK UNIFIED IDEOGRAPH + {0xDDF3, 0x697B}, //9096 #CJK UNIFIED IDEOGRAPH + {0xDDF4, 0x693C}, //9097 #CJK UNIFIED IDEOGRAPH + {0xDDF5, 0x6B46}, //9098 #CJK UNIFIED IDEOGRAPH + {0xDDF6, 0x6B45}, //9099 #CJK UNIFIED IDEOGRAPH + {0xDDF7, 0x6B43}, //9100 #CJK UNIFIED IDEOGRAPH + {0xDDF8, 0x6B42}, //9101 #CJK UNIFIED IDEOGRAPH + {0xDDF9, 0x6B48}, //9102 #CJK UNIFIED IDEOGRAPH + {0xDDFA, 0x6B41}, //9103 #CJK UNIFIED IDEOGRAPH + {0xDDFB, 0x6B9B}, //9104 #CJK UNIFIED IDEOGRAPH + {0xDDFC, 0xFA0D}, //9105 #CJK COMPATIBILITY IDEOGRAPH + {0xDDFD, 0x6BFB}, //9106 #CJK UNIFIED IDEOGRAPH + {0xDDFE, 0x6BFC}, //9107 #CJK UNIFIED IDEOGRAPH + {0xDE40, 0x6BF9}, //9108 #CJK UNIFIED IDEOGRAPH + {0xDE41, 0x6BF7}, //9109 #CJK UNIFIED IDEOGRAPH + {0xDE42, 0x6BF8}, //9110 #CJK UNIFIED IDEOGRAPH + {0xDE43, 0x6E9B}, //9111 #CJK UNIFIED IDEOGRAPH + {0xDE44, 0x6ED6}, //9112 #CJK UNIFIED IDEOGRAPH + {0xDE45, 0x6EC8}, //9113 #CJK UNIFIED IDEOGRAPH + {0xDE46, 0x6E8F}, //9114 #CJK UNIFIED IDEOGRAPH + {0xDE47, 0x6EC0}, //9115 #CJK UNIFIED IDEOGRAPH + {0xDE48, 0x6E9F}, //9116 #CJK UNIFIED IDEOGRAPH + {0xDE49, 0x6E93}, //9117 #CJK UNIFIED IDEOGRAPH + {0xDE4A, 0x6E94}, //9118 #CJK UNIFIED IDEOGRAPH + {0xDE4B, 0x6EA0}, //9119 #CJK UNIFIED IDEOGRAPH + {0xDE4C, 0x6EB1}, //9120 #CJK UNIFIED IDEOGRAPH + {0xDE4D, 0x6EB9}, //9121 #CJK UNIFIED IDEOGRAPH + {0xDE4E, 0x6EC6}, //9122 #CJK UNIFIED IDEOGRAPH + {0xDE4F, 0x6ED2}, //9123 #CJK UNIFIED IDEOGRAPH + {0xDE50, 0x6EBD}, //9124 #CJK UNIFIED IDEOGRAPH + {0xDE51, 0x6EC1}, //9125 #CJK UNIFIED IDEOGRAPH + {0xDE52, 0x6E9E}, //9126 #CJK UNIFIED IDEOGRAPH + {0xDE53, 0x6EC9}, //9127 #CJK UNIFIED IDEOGRAPH + {0xDE54, 0x6EB7}, //9128 #CJK UNIFIED IDEOGRAPH + {0xDE55, 0x6EB0}, //9129 #CJK UNIFIED IDEOGRAPH + {0xDE56, 0x6ECD}, //9130 #CJK UNIFIED IDEOGRAPH + {0xDE57, 0x6EA6}, //9131 #CJK UNIFIED IDEOGRAPH + {0xDE58, 0x6ECF}, //9132 #CJK UNIFIED IDEOGRAPH + {0xDE59, 0x6EB2}, //9133 #CJK UNIFIED IDEOGRAPH + {0xDE5A, 0x6EBE}, //9134 #CJK UNIFIED IDEOGRAPH + {0xDE5B, 0x6EC3}, //9135 #CJK UNIFIED IDEOGRAPH + {0xDE5C, 0x6EDC}, //9136 #CJK UNIFIED IDEOGRAPH + {0xDE5D, 0x6ED8}, //9137 #CJK UNIFIED IDEOGRAPH + {0xDE5E, 0x6E99}, //9138 #CJK UNIFIED IDEOGRAPH + {0xDE5F, 0x6E92}, //9139 #CJK UNIFIED IDEOGRAPH + {0xDE60, 0x6E8E}, //9140 #CJK UNIFIED IDEOGRAPH + {0xDE61, 0x6E8D}, //9141 #CJK UNIFIED IDEOGRAPH + {0xDE62, 0x6EA4}, //9142 #CJK UNIFIED IDEOGRAPH + {0xDE63, 0x6EA1}, //9143 #CJK UNIFIED IDEOGRAPH + {0xDE64, 0x6EBF}, //9144 #CJK UNIFIED IDEOGRAPH + {0xDE65, 0x6EB3}, //9145 #CJK UNIFIED IDEOGRAPH + {0xDE66, 0x6ED0}, //9146 #CJK UNIFIED IDEOGRAPH + {0xDE67, 0x6ECA}, //9147 #CJK UNIFIED IDEOGRAPH + {0xDE68, 0x6E97}, //9148 #CJK UNIFIED IDEOGRAPH + {0xDE69, 0x6EAE}, //9149 #CJK UNIFIED IDEOGRAPH + {0xDE6A, 0x6EA3}, //9150 #CJK UNIFIED IDEOGRAPH + {0xDE6B, 0x7147}, //9151 #CJK UNIFIED IDEOGRAPH + {0xDE6C, 0x7154}, //9152 #CJK UNIFIED IDEOGRAPH + {0xDE6D, 0x7152}, //9153 #CJK UNIFIED IDEOGRAPH + {0xDE6E, 0x7163}, //9154 #CJK UNIFIED IDEOGRAPH + {0xDE6F, 0x7160}, //9155 #CJK UNIFIED IDEOGRAPH + {0xDE70, 0x7141}, //9156 #CJK UNIFIED IDEOGRAPH + {0xDE71, 0x715D}, //9157 #CJK UNIFIED IDEOGRAPH + {0xDE72, 0x7162}, //9158 #CJK UNIFIED IDEOGRAPH + {0xDE73, 0x7172}, //9159 #CJK UNIFIED IDEOGRAPH + {0xDE74, 0x7178}, //9160 #CJK UNIFIED IDEOGRAPH + {0xDE75, 0x716A}, //9161 #CJK UNIFIED IDEOGRAPH + {0xDE76, 0x7161}, //9162 #CJK UNIFIED IDEOGRAPH + {0xDE77, 0x7142}, //9163 #CJK UNIFIED IDEOGRAPH + {0xDE78, 0x7158}, //9164 #CJK UNIFIED IDEOGRAPH + {0xDE79, 0x7143}, //9165 #CJK UNIFIED IDEOGRAPH + {0xDE7A, 0x714B}, //9166 #CJK UNIFIED IDEOGRAPH + {0xDE7B, 0x7170}, //9167 #CJK UNIFIED IDEOGRAPH + {0xDE7C, 0x715F}, //9168 #CJK UNIFIED IDEOGRAPH + {0xDE7D, 0x7150}, //9169 #CJK UNIFIED IDEOGRAPH + {0xDE7E, 0x7153}, //9170 #CJK UNIFIED IDEOGRAPH + {0xDEA1, 0x7144}, //9171 #CJK UNIFIED IDEOGRAPH + {0xDEA2, 0x714D}, //9172 #CJK UNIFIED IDEOGRAPH + {0xDEA3, 0x715A}, //9173 #CJK UNIFIED IDEOGRAPH + {0xDEA4, 0x724F}, //9174 #CJK UNIFIED IDEOGRAPH + {0xDEA5, 0x728D}, //9175 #CJK UNIFIED IDEOGRAPH + {0xDEA6, 0x728C}, //9176 #CJK UNIFIED IDEOGRAPH + {0xDEA7, 0x7291}, //9177 #CJK UNIFIED IDEOGRAPH + {0xDEA8, 0x7290}, //9178 #CJK UNIFIED IDEOGRAPH + {0xDEA9, 0x728E}, //9179 #CJK UNIFIED IDEOGRAPH + {0xDEAA, 0x733C}, //9180 #CJK UNIFIED IDEOGRAPH + {0xDEAB, 0x7342}, //9181 #CJK UNIFIED IDEOGRAPH + {0xDEAC, 0x733B}, //9182 #CJK UNIFIED IDEOGRAPH + {0xDEAD, 0x733A}, //9183 #CJK UNIFIED IDEOGRAPH + {0xDEAE, 0x7340}, //9184 #CJK UNIFIED IDEOGRAPH + {0xDEAF, 0x734A}, //9185 #CJK UNIFIED IDEOGRAPH + {0xDEB0, 0x7349}, //9186 #CJK UNIFIED IDEOGRAPH + {0xDEB1, 0x7444}, //9187 #CJK UNIFIED IDEOGRAPH + {0xDEB2, 0x744A}, //9188 #CJK UNIFIED IDEOGRAPH + {0xDEB3, 0x744B}, //9189 #CJK UNIFIED IDEOGRAPH + {0xDEB4, 0x7452}, //9190 #CJK UNIFIED IDEOGRAPH + {0xDEB5, 0x7451}, //9191 #CJK UNIFIED IDEOGRAPH + {0xDEB6, 0x7457}, //9192 #CJK UNIFIED IDEOGRAPH + {0xDEB7, 0x7440}, //9193 #CJK UNIFIED IDEOGRAPH + {0xDEB8, 0x744F}, //9194 #CJK UNIFIED IDEOGRAPH + {0xDEB9, 0x7450}, //9195 #CJK UNIFIED IDEOGRAPH + {0xDEBA, 0x744E}, //9196 #CJK UNIFIED IDEOGRAPH + {0xDEBB, 0x7442}, //9197 #CJK UNIFIED IDEOGRAPH + {0xDEBC, 0x7446}, //9198 #CJK UNIFIED IDEOGRAPH + {0xDEBD, 0x744D}, //9199 #CJK UNIFIED IDEOGRAPH + {0xDEBE, 0x7454}, //9200 #CJK UNIFIED IDEOGRAPH + {0xDEBF, 0x74E1}, //9201 #CJK UNIFIED IDEOGRAPH + {0xDEC0, 0x74FF}, //9202 #CJK UNIFIED IDEOGRAPH + {0xDEC1, 0x74FE}, //9203 #CJK UNIFIED IDEOGRAPH + {0xDEC2, 0x74FD}, //9204 #CJK UNIFIED IDEOGRAPH + {0xDEC3, 0x751D}, //9205 #CJK UNIFIED IDEOGRAPH + {0xDEC4, 0x7579}, //9206 #CJK UNIFIED IDEOGRAPH + {0xDEC5, 0x7577}, //9207 #CJK UNIFIED IDEOGRAPH + {0xDEC6, 0x6983}, //9208 #CJK UNIFIED IDEOGRAPH + {0xDEC7, 0x75EF}, //9209 #CJK UNIFIED IDEOGRAPH + {0xDEC8, 0x760F}, //9210 #CJK UNIFIED IDEOGRAPH + {0xDEC9, 0x7603}, //9211 #CJK UNIFIED IDEOGRAPH + {0xDECA, 0x75F7}, //9212 #CJK UNIFIED IDEOGRAPH + {0xDECB, 0x75FE}, //9213 #CJK UNIFIED IDEOGRAPH + {0xDECC, 0x75FC}, //9214 #CJK UNIFIED IDEOGRAPH + {0xDECD, 0x75F9}, //9215 #CJK UNIFIED IDEOGRAPH + {0xDECE, 0x75F8}, //9216 #CJK UNIFIED IDEOGRAPH + {0xDECF, 0x7610}, //9217 #CJK UNIFIED IDEOGRAPH + {0xDED0, 0x75FB}, //9218 #CJK UNIFIED IDEOGRAPH + {0xDED1, 0x75F6}, //9219 #CJK UNIFIED IDEOGRAPH + {0xDED2, 0x75ED}, //9220 #CJK UNIFIED IDEOGRAPH + {0xDED3, 0x75F5}, //9221 #CJK UNIFIED IDEOGRAPH + {0xDED4, 0x75FD}, //9222 #CJK UNIFIED IDEOGRAPH + {0xDED5, 0x7699}, //9223 #CJK UNIFIED IDEOGRAPH + {0xDED6, 0x76B5}, //9224 #CJK UNIFIED IDEOGRAPH + {0xDED7, 0x76DD}, //9225 #CJK UNIFIED IDEOGRAPH + {0xDED8, 0x7755}, //9226 #CJK UNIFIED IDEOGRAPH + {0xDED9, 0x775F}, //9227 #CJK UNIFIED IDEOGRAPH + {0xDEDA, 0x7760}, //9228 #CJK UNIFIED IDEOGRAPH + {0xDEDB, 0x7752}, //9229 #CJK UNIFIED IDEOGRAPH + {0xDEDC, 0x7756}, //9230 #CJK UNIFIED IDEOGRAPH + {0xDEDD, 0x775A}, //9231 #CJK UNIFIED IDEOGRAPH + {0xDEDE, 0x7769}, //9232 #CJK UNIFIED IDEOGRAPH + {0xDEDF, 0x7767}, //9233 #CJK UNIFIED IDEOGRAPH + {0xDEE0, 0x7754}, //9234 #CJK UNIFIED IDEOGRAPH + {0xDEE1, 0x7759}, //9235 #CJK UNIFIED IDEOGRAPH + {0xDEE2, 0x776D}, //9236 #CJK UNIFIED IDEOGRAPH + {0xDEE3, 0x77E0}, //9237 #CJK UNIFIED IDEOGRAPH + {0xDEE4, 0x7887}, //9238 #CJK UNIFIED IDEOGRAPH + {0xDEE5, 0x789A}, //9239 #CJK UNIFIED IDEOGRAPH + {0xDEE6, 0x7894}, //9240 #CJK UNIFIED IDEOGRAPH + {0xDEE7, 0x788F}, //9241 #CJK UNIFIED IDEOGRAPH + {0xDEE8, 0x7884}, //9242 #CJK UNIFIED IDEOGRAPH + {0xDEE9, 0x7895}, //9243 #CJK UNIFIED IDEOGRAPH + {0xDEEA, 0x7885}, //9244 #CJK UNIFIED IDEOGRAPH + {0xDEEB, 0x7886}, //9245 #CJK UNIFIED IDEOGRAPH + {0xDEEC, 0x78A1}, //9246 #CJK UNIFIED IDEOGRAPH + {0xDEED, 0x7883}, //9247 #CJK UNIFIED IDEOGRAPH + {0xDEEE, 0x7879}, //9248 #CJK UNIFIED IDEOGRAPH + {0xDEEF, 0x7899}, //9249 #CJK UNIFIED IDEOGRAPH + {0xDEF0, 0x7880}, //9250 #CJK UNIFIED IDEOGRAPH + {0xDEF1, 0x7896}, //9251 #CJK UNIFIED IDEOGRAPH + {0xDEF2, 0x787B}, //9252 #CJK UNIFIED IDEOGRAPH + {0xDEF3, 0x797C}, //9253 #CJK UNIFIED IDEOGRAPH + {0xDEF4, 0x7982}, //9254 #CJK UNIFIED IDEOGRAPH + {0xDEF5, 0x797D}, //9255 #CJK UNIFIED IDEOGRAPH + {0xDEF6, 0x7979}, //9256 #CJK UNIFIED IDEOGRAPH + {0xDEF7, 0x7A11}, //9257 #CJK UNIFIED IDEOGRAPH + {0xDEF8, 0x7A18}, //9258 #CJK UNIFIED IDEOGRAPH + {0xDEF9, 0x7A19}, //9259 #CJK UNIFIED IDEOGRAPH + {0xDEFA, 0x7A12}, //9260 #CJK UNIFIED IDEOGRAPH + {0xDEFB, 0x7A17}, //9261 #CJK UNIFIED IDEOGRAPH + {0xDEFC, 0x7A15}, //9262 #CJK UNIFIED IDEOGRAPH + {0xDEFD, 0x7A22}, //9263 #CJK UNIFIED IDEOGRAPH + {0xDEFE, 0x7A13}, //9264 #CJK UNIFIED IDEOGRAPH + {0xDF40, 0x7A1B}, //9265 #CJK UNIFIED IDEOGRAPH + {0xDF41, 0x7A10}, //9266 #CJK UNIFIED IDEOGRAPH + {0xDF42, 0x7AA3}, //9267 #CJK UNIFIED IDEOGRAPH + {0xDF43, 0x7AA2}, //9268 #CJK UNIFIED IDEOGRAPH + {0xDF44, 0x7A9E}, //9269 #CJK UNIFIED IDEOGRAPH + {0xDF45, 0x7AEB}, //9270 #CJK UNIFIED IDEOGRAPH + {0xDF46, 0x7B66}, //9271 #CJK UNIFIED IDEOGRAPH + {0xDF47, 0x7B64}, //9272 #CJK UNIFIED IDEOGRAPH + {0xDF48, 0x7B6D}, //9273 #CJK UNIFIED IDEOGRAPH + {0xDF49, 0x7B74}, //9274 #CJK UNIFIED IDEOGRAPH + {0xDF4A, 0x7B69}, //9275 #CJK UNIFIED IDEOGRAPH + {0xDF4B, 0x7B72}, //9276 #CJK UNIFIED IDEOGRAPH + {0xDF4C, 0x7B65}, //9277 #CJK UNIFIED IDEOGRAPH + {0xDF4D, 0x7B73}, //9278 #CJK UNIFIED IDEOGRAPH + {0xDF4E, 0x7B71}, //9279 #CJK UNIFIED IDEOGRAPH + {0xDF4F, 0x7B70}, //9280 #CJK UNIFIED IDEOGRAPH + {0xDF50, 0x7B61}, //9281 #CJK UNIFIED IDEOGRAPH + {0xDF51, 0x7B78}, //9282 #CJK UNIFIED IDEOGRAPH + {0xDF52, 0x7B76}, //9283 #CJK UNIFIED IDEOGRAPH + {0xDF53, 0x7B63}, //9284 #CJK UNIFIED IDEOGRAPH + {0xDF54, 0x7CB2}, //9285 #CJK UNIFIED IDEOGRAPH + {0xDF55, 0x7CB4}, //9286 #CJK UNIFIED IDEOGRAPH + {0xDF56, 0x7CAF}, //9287 #CJK UNIFIED IDEOGRAPH + {0xDF57, 0x7D88}, //9288 #CJK UNIFIED IDEOGRAPH + {0xDF58, 0x7D86}, //9289 #CJK UNIFIED IDEOGRAPH + {0xDF59, 0x7D80}, //9290 #CJK UNIFIED IDEOGRAPH + {0xDF5A, 0x7D8D}, //9291 #CJK UNIFIED IDEOGRAPH + {0xDF5B, 0x7D7F}, //9292 #CJK UNIFIED IDEOGRAPH + {0xDF5C, 0x7D85}, //9293 #CJK UNIFIED IDEOGRAPH + {0xDF5D, 0x7D7A}, //9294 #CJK UNIFIED IDEOGRAPH + {0xDF5E, 0x7D8E}, //9295 #CJK UNIFIED IDEOGRAPH + {0xDF5F, 0x7D7B}, //9296 #CJK UNIFIED IDEOGRAPH + {0xDF60, 0x7D83}, //9297 #CJK UNIFIED IDEOGRAPH + {0xDF61, 0x7D7C}, //9298 #CJK UNIFIED IDEOGRAPH + {0xDF62, 0x7D8C}, //9299 #CJK UNIFIED IDEOGRAPH + {0xDF63, 0x7D94}, //9300 #CJK UNIFIED IDEOGRAPH + {0xDF64, 0x7D84}, //9301 #CJK UNIFIED IDEOGRAPH + {0xDF65, 0x7D7D}, //9302 #CJK UNIFIED IDEOGRAPH + {0xDF66, 0x7D92}, //9303 #CJK UNIFIED IDEOGRAPH + {0xDF67, 0x7F6D}, //9304 #CJK UNIFIED IDEOGRAPH + {0xDF68, 0x7F6B}, //9305 #CJK UNIFIED IDEOGRAPH + {0xDF69, 0x7F67}, //9306 #CJK UNIFIED IDEOGRAPH + {0xDF6A, 0x7F68}, //9307 #CJK UNIFIED IDEOGRAPH + {0xDF6B, 0x7F6C}, //9308 #CJK UNIFIED IDEOGRAPH + {0xDF6C, 0x7FA6}, //9309 #CJK UNIFIED IDEOGRAPH + {0xDF6D, 0x7FA5}, //9310 #CJK UNIFIED IDEOGRAPH + {0xDF6E, 0x7FA7}, //9311 #CJK UNIFIED IDEOGRAPH + {0xDF6F, 0x7FDB}, //9312 #CJK UNIFIED IDEOGRAPH + {0xDF70, 0x7FDC}, //9313 #CJK UNIFIED IDEOGRAPH + {0xDF71, 0x8021}, //9314 #CJK UNIFIED IDEOGRAPH + {0xDF72, 0x8164}, //9315 #CJK UNIFIED IDEOGRAPH + {0xDF73, 0x8160}, //9316 #CJK UNIFIED IDEOGRAPH + {0xDF74, 0x8177}, //9317 #CJK UNIFIED IDEOGRAPH + {0xDF75, 0x815C}, //9318 #CJK UNIFIED IDEOGRAPH + {0xDF76, 0x8169}, //9319 #CJK UNIFIED IDEOGRAPH + {0xDF77, 0x815B}, //9320 #CJK UNIFIED IDEOGRAPH + {0xDF78, 0x8162}, //9321 #CJK UNIFIED IDEOGRAPH + {0xDF79, 0x8172}, //9322 #CJK UNIFIED IDEOGRAPH + {0xDF7A, 0x6721}, //9323 #CJK UNIFIED IDEOGRAPH + {0xDF7B, 0x815E}, //9324 #CJK UNIFIED IDEOGRAPH + {0xDF7C, 0x8176}, //9325 #CJK UNIFIED IDEOGRAPH + {0xDF7D, 0x8167}, //9326 #CJK UNIFIED IDEOGRAPH + {0xDF7E, 0x816F}, //9327 #CJK UNIFIED IDEOGRAPH + {0xDFA1, 0x8144}, //9328 #CJK UNIFIED IDEOGRAPH + {0xDFA2, 0x8161}, //9329 #CJK UNIFIED IDEOGRAPH + {0xDFA3, 0x821D}, //9330 #CJK UNIFIED IDEOGRAPH + {0xDFA4, 0x8249}, //9331 #CJK UNIFIED IDEOGRAPH + {0xDFA5, 0x8244}, //9332 #CJK UNIFIED IDEOGRAPH + {0xDFA6, 0x8240}, //9333 #CJK UNIFIED IDEOGRAPH + {0xDFA7, 0x8242}, //9334 #CJK UNIFIED IDEOGRAPH + {0xDFA8, 0x8245}, //9335 #CJK UNIFIED IDEOGRAPH + {0xDFA9, 0x84F1}, //9336 #CJK UNIFIED IDEOGRAPH + {0xDFAA, 0x843F}, //9337 #CJK UNIFIED IDEOGRAPH + {0xDFAB, 0x8456}, //9338 #CJK UNIFIED IDEOGRAPH + {0xDFAC, 0x8476}, //9339 #CJK UNIFIED IDEOGRAPH + {0xDFAD, 0x8479}, //9340 #CJK UNIFIED IDEOGRAPH + {0xDFAE, 0x848F}, //9341 #CJK UNIFIED IDEOGRAPH + {0xDFAF, 0x848D}, //9342 #CJK UNIFIED IDEOGRAPH + {0xDFB0, 0x8465}, //9343 #CJK UNIFIED IDEOGRAPH + {0xDFB1, 0x8451}, //9344 #CJK UNIFIED IDEOGRAPH + {0xDFB2, 0x8440}, //9345 #CJK UNIFIED IDEOGRAPH + {0xDFB3, 0x8486}, //9346 #CJK UNIFIED IDEOGRAPH + {0xDFB4, 0x8467}, //9347 #CJK UNIFIED IDEOGRAPH + {0xDFB5, 0x8430}, //9348 #CJK UNIFIED IDEOGRAPH + {0xDFB6, 0x844D}, //9349 #CJK UNIFIED IDEOGRAPH + {0xDFB7, 0x847D}, //9350 #CJK UNIFIED IDEOGRAPH + {0xDFB8, 0x845A}, //9351 #CJK UNIFIED IDEOGRAPH + {0xDFB9, 0x8459}, //9352 #CJK UNIFIED IDEOGRAPH + {0xDFBA, 0x8474}, //9353 #CJK UNIFIED IDEOGRAPH + {0xDFBB, 0x8473}, //9354 #CJK UNIFIED IDEOGRAPH + {0xDFBC, 0x845D}, //9355 #CJK UNIFIED IDEOGRAPH + {0xDFBD, 0x8507}, //9356 #CJK UNIFIED IDEOGRAPH + {0xDFBE, 0x845E}, //9357 #CJK UNIFIED IDEOGRAPH + {0xDFBF, 0x8437}, //9358 #CJK UNIFIED IDEOGRAPH + {0xDFC0, 0x843A}, //9359 #CJK UNIFIED IDEOGRAPH + {0xDFC1, 0x8434}, //9360 #CJK UNIFIED IDEOGRAPH + {0xDFC2, 0x847A}, //9361 #CJK UNIFIED IDEOGRAPH + {0xDFC3, 0x8443}, //9362 #CJK UNIFIED IDEOGRAPH + {0xDFC4, 0x8478}, //9363 #CJK UNIFIED IDEOGRAPH + {0xDFC5, 0x8432}, //9364 #CJK UNIFIED IDEOGRAPH + {0xDFC6, 0x8445}, //9365 #CJK UNIFIED IDEOGRAPH + {0xDFC7, 0x8429}, //9366 #CJK UNIFIED IDEOGRAPH + {0xDFC8, 0x83D9}, //9367 #CJK UNIFIED IDEOGRAPH + {0xDFC9, 0x844B}, //9368 #CJK UNIFIED IDEOGRAPH + {0xDFCA, 0x842F}, //9369 #CJK UNIFIED IDEOGRAPH + {0xDFCB, 0x8442}, //9370 #CJK UNIFIED IDEOGRAPH + {0xDFCC, 0x842D}, //9371 #CJK UNIFIED IDEOGRAPH + {0xDFCD, 0x845F}, //9372 #CJK UNIFIED IDEOGRAPH + {0xDFCE, 0x8470}, //9373 #CJK UNIFIED IDEOGRAPH + {0xDFCF, 0x8439}, //9374 #CJK UNIFIED IDEOGRAPH + {0xDFD0, 0x844E}, //9375 #CJK UNIFIED IDEOGRAPH + {0xDFD1, 0x844C}, //9376 #CJK UNIFIED IDEOGRAPH + {0xDFD2, 0x8452}, //9377 #CJK UNIFIED IDEOGRAPH + {0xDFD3, 0x846F}, //9378 #CJK UNIFIED IDEOGRAPH + {0xDFD4, 0x84C5}, //9379 #CJK UNIFIED IDEOGRAPH + {0xDFD5, 0x848E}, //9380 #CJK UNIFIED IDEOGRAPH + {0xDFD6, 0x843B}, //9381 #CJK UNIFIED IDEOGRAPH + {0xDFD7, 0x8447}, //9382 #CJK UNIFIED IDEOGRAPH + {0xDFD8, 0x8436}, //9383 #CJK UNIFIED IDEOGRAPH + {0xDFD9, 0x8433}, //9384 #CJK UNIFIED IDEOGRAPH + {0xDFDA, 0x8468}, //9385 #CJK UNIFIED IDEOGRAPH + {0xDFDB, 0x847E}, //9386 #CJK UNIFIED IDEOGRAPH + {0xDFDC, 0x8444}, //9387 #CJK UNIFIED IDEOGRAPH + {0xDFDD, 0x842B}, //9388 #CJK UNIFIED IDEOGRAPH + {0xDFDE, 0x8460}, //9389 #CJK UNIFIED IDEOGRAPH + {0xDFDF, 0x8454}, //9390 #CJK UNIFIED IDEOGRAPH + {0xDFE0, 0x846E}, //9391 #CJK UNIFIED IDEOGRAPH + {0xDFE1, 0x8450}, //9392 #CJK UNIFIED IDEOGRAPH + {0xDFE2, 0x870B}, //9393 #CJK UNIFIED IDEOGRAPH + {0xDFE3, 0x8704}, //9394 #CJK UNIFIED IDEOGRAPH + {0xDFE4, 0x86F7}, //9395 #CJK UNIFIED IDEOGRAPH + {0xDFE5, 0x870C}, //9396 #CJK UNIFIED IDEOGRAPH + {0xDFE6, 0x86FA}, //9397 #CJK UNIFIED IDEOGRAPH + {0xDFE7, 0x86D6}, //9398 #CJK UNIFIED IDEOGRAPH + {0xDFE8, 0x86F5}, //9399 #CJK UNIFIED IDEOGRAPH + {0xDFE9, 0x874D}, //9400 #CJK UNIFIED IDEOGRAPH + {0xDFEA, 0x86F8}, //9401 #CJK UNIFIED IDEOGRAPH + {0xDFEB, 0x870E}, //9402 #CJK UNIFIED IDEOGRAPH + {0xDFEC, 0x8709}, //9403 #CJK UNIFIED IDEOGRAPH + {0xDFED, 0x8701}, //9404 #CJK UNIFIED IDEOGRAPH + {0xDFEE, 0x86F6}, //9405 #CJK UNIFIED IDEOGRAPH + {0xDFEF, 0x870D}, //9406 #CJK UNIFIED IDEOGRAPH + {0xDFF0, 0x8705}, //9407 #CJK UNIFIED IDEOGRAPH + {0xDFF1, 0x88D6}, //9408 #CJK UNIFIED IDEOGRAPH + {0xDFF2, 0x88CB}, //9409 #CJK UNIFIED IDEOGRAPH + {0xDFF3, 0x88CD}, //9410 #CJK UNIFIED IDEOGRAPH + {0xDFF4, 0x88CE}, //9411 #CJK UNIFIED IDEOGRAPH + {0xDFF5, 0x88DE}, //9412 #CJK UNIFIED IDEOGRAPH + {0xDFF6, 0x88DB}, //9413 #CJK UNIFIED IDEOGRAPH + {0xDFF7, 0x88DA}, //9414 #CJK UNIFIED IDEOGRAPH + {0xDFF8, 0x88CC}, //9415 #CJK UNIFIED IDEOGRAPH + {0xDFF9, 0x88D0}, //9416 #CJK UNIFIED IDEOGRAPH + {0xDFFA, 0x8985}, //9417 #CJK UNIFIED IDEOGRAPH + {0xDFFB, 0x899B}, //9418 #CJK UNIFIED IDEOGRAPH + {0xDFFC, 0x89DF}, //9419 #CJK UNIFIED IDEOGRAPH + {0xDFFD, 0x89E5}, //9420 #CJK UNIFIED IDEOGRAPH + {0xDFFE, 0x89E4}, //9421 #CJK UNIFIED IDEOGRAPH + {0xE040, 0x89E1}, //9422 #CJK UNIFIED IDEOGRAPH + {0xE041, 0x89E0}, //9423 #CJK UNIFIED IDEOGRAPH + {0xE042, 0x89E2}, //9424 #CJK UNIFIED IDEOGRAPH + {0xE043, 0x89DC}, //9425 #CJK UNIFIED IDEOGRAPH + {0xE044, 0x89E6}, //9426 #CJK UNIFIED IDEOGRAPH + {0xE045, 0x8A76}, //9427 #CJK UNIFIED IDEOGRAPH + {0xE046, 0x8A86}, //9428 #CJK UNIFIED IDEOGRAPH + {0xE047, 0x8A7F}, //9429 #CJK UNIFIED IDEOGRAPH + {0xE048, 0x8A61}, //9430 #CJK UNIFIED IDEOGRAPH + {0xE049, 0x8A3F}, //9431 #CJK UNIFIED IDEOGRAPH + {0xE04A, 0x8A77}, //9432 #CJK UNIFIED IDEOGRAPH + {0xE04B, 0x8A82}, //9433 #CJK UNIFIED IDEOGRAPH + {0xE04C, 0x8A84}, //9434 #CJK UNIFIED IDEOGRAPH + {0xE04D, 0x8A75}, //9435 #CJK UNIFIED IDEOGRAPH + {0xE04E, 0x8A83}, //9436 #CJK UNIFIED IDEOGRAPH + {0xE04F, 0x8A81}, //9437 #CJK UNIFIED IDEOGRAPH + {0xE050, 0x8A74}, //9438 #CJK UNIFIED IDEOGRAPH + {0xE051, 0x8A7A}, //9439 #CJK UNIFIED IDEOGRAPH + {0xE052, 0x8C3C}, //9440 #CJK UNIFIED IDEOGRAPH + {0xE053, 0x8C4B}, //9441 #CJK UNIFIED IDEOGRAPH + {0xE054, 0x8C4A}, //9442 #CJK UNIFIED IDEOGRAPH + {0xE055, 0x8C65}, //9443 #CJK UNIFIED IDEOGRAPH + {0xE056, 0x8C64}, //9444 #CJK UNIFIED IDEOGRAPH + {0xE057, 0x8C66}, //9445 #CJK UNIFIED IDEOGRAPH + {0xE058, 0x8C86}, //9446 #CJK UNIFIED IDEOGRAPH + {0xE059, 0x8C84}, //9447 #CJK UNIFIED IDEOGRAPH + {0xE05A, 0x8C85}, //9448 #CJK UNIFIED IDEOGRAPH + {0xE05B, 0x8CCC}, //9449 #CJK UNIFIED IDEOGRAPH + {0xE05C, 0x8D68}, //9450 #CJK UNIFIED IDEOGRAPH + {0xE05D, 0x8D69}, //9451 #CJK UNIFIED IDEOGRAPH + {0xE05E, 0x8D91}, //9452 #CJK UNIFIED IDEOGRAPH + {0xE05F, 0x8D8C}, //9453 #CJK UNIFIED IDEOGRAPH + {0xE060, 0x8D8E}, //9454 #CJK UNIFIED IDEOGRAPH + {0xE061, 0x8D8F}, //9455 #CJK UNIFIED IDEOGRAPH + {0xE062, 0x8D8D}, //9456 #CJK UNIFIED IDEOGRAPH + {0xE063, 0x8D93}, //9457 #CJK UNIFIED IDEOGRAPH + {0xE064, 0x8D94}, //9458 #CJK UNIFIED IDEOGRAPH + {0xE065, 0x8D90}, //9459 #CJK UNIFIED IDEOGRAPH + {0xE066, 0x8D92}, //9460 #CJK UNIFIED IDEOGRAPH + {0xE067, 0x8DF0}, //9461 #CJK UNIFIED IDEOGRAPH + {0xE068, 0x8DE0}, //9462 #CJK UNIFIED IDEOGRAPH + {0xE069, 0x8DEC}, //9463 #CJK UNIFIED IDEOGRAPH + {0xE06A, 0x8DF1}, //9464 #CJK UNIFIED IDEOGRAPH + {0xE06B, 0x8DEE}, //9465 #CJK UNIFIED IDEOGRAPH + {0xE06C, 0x8DD0}, //9466 #CJK UNIFIED IDEOGRAPH + {0xE06D, 0x8DE9}, //9467 #CJK UNIFIED IDEOGRAPH + {0xE06E, 0x8DE3}, //9468 #CJK UNIFIED IDEOGRAPH + {0xE06F, 0x8DE2}, //9469 #CJK UNIFIED IDEOGRAPH + {0xE070, 0x8DE7}, //9470 #CJK UNIFIED IDEOGRAPH + {0xE071, 0x8DF2}, //9471 #CJK UNIFIED IDEOGRAPH + {0xE072, 0x8DEB}, //9472 #CJK UNIFIED IDEOGRAPH + {0xE073, 0x8DF4}, //9473 #CJK UNIFIED IDEOGRAPH + {0xE074, 0x8F06}, //9474 #CJK UNIFIED IDEOGRAPH + {0xE075, 0x8EFF}, //9475 #CJK UNIFIED IDEOGRAPH + {0xE076, 0x8F01}, //9476 #CJK UNIFIED IDEOGRAPH + {0xE077, 0x8F00}, //9477 #CJK UNIFIED IDEOGRAPH + {0xE078, 0x8F05}, //9478 #CJK UNIFIED IDEOGRAPH + {0xE079, 0x8F07}, //9479 #CJK UNIFIED IDEOGRAPH + {0xE07A, 0x8F08}, //9480 #CJK UNIFIED IDEOGRAPH + {0xE07B, 0x8F02}, //9481 #CJK UNIFIED IDEOGRAPH + {0xE07C, 0x8F0B}, //9482 #CJK UNIFIED IDEOGRAPH + {0xE07D, 0x9052}, //9483 #CJK UNIFIED IDEOGRAPH + {0xE07E, 0x903F}, //9484 #CJK UNIFIED IDEOGRAPH + {0xE0A1, 0x9044}, //9485 #CJK UNIFIED IDEOGRAPH + {0xE0A2, 0x9049}, //9486 #CJK UNIFIED IDEOGRAPH + {0xE0A3, 0x903D}, //9487 #CJK UNIFIED IDEOGRAPH + {0xE0A4, 0x9110}, //9488 #CJK UNIFIED IDEOGRAPH + {0xE0A5, 0x910D}, //9489 #CJK UNIFIED IDEOGRAPH + {0xE0A6, 0x910F}, //9490 #CJK UNIFIED IDEOGRAPH + {0xE0A7, 0x9111}, //9491 #CJK UNIFIED IDEOGRAPH + {0xE0A8, 0x9116}, //9492 #CJK UNIFIED IDEOGRAPH + {0xE0A9, 0x9114}, //9493 #CJK UNIFIED IDEOGRAPH + {0xE0AA, 0x910B}, //9494 #CJK UNIFIED IDEOGRAPH + {0xE0AB, 0x910E}, //9495 #CJK UNIFIED IDEOGRAPH + {0xE0AC, 0x916E}, //9496 #CJK UNIFIED IDEOGRAPH + {0xE0AD, 0x916F}, //9497 #CJK UNIFIED IDEOGRAPH + {0xE0AE, 0x9248}, //9498 #CJK UNIFIED IDEOGRAPH + {0xE0AF, 0x9252}, //9499 #CJK UNIFIED IDEOGRAPH + {0xE0B0, 0x9230}, //9500 #CJK UNIFIED IDEOGRAPH + {0xE0B1, 0x923A}, //9501 #CJK UNIFIED IDEOGRAPH + {0xE0B2, 0x9266}, //9502 #CJK UNIFIED IDEOGRAPH + {0xE0B3, 0x9233}, //9503 #CJK UNIFIED IDEOGRAPH + {0xE0B4, 0x9265}, //9504 #CJK UNIFIED IDEOGRAPH + {0xE0B5, 0x925E}, //9505 #CJK UNIFIED IDEOGRAPH + {0xE0B6, 0x9283}, //9506 #CJK UNIFIED IDEOGRAPH + {0xE0B7, 0x922E}, //9507 #CJK UNIFIED IDEOGRAPH + {0xE0B8, 0x924A}, //9508 #CJK UNIFIED IDEOGRAPH + {0xE0B9, 0x9246}, //9509 #CJK UNIFIED IDEOGRAPH + {0xE0BA, 0x926D}, //9510 #CJK UNIFIED IDEOGRAPH + {0xE0BB, 0x926C}, //9511 #CJK UNIFIED IDEOGRAPH + {0xE0BC, 0x924F}, //9512 #CJK UNIFIED IDEOGRAPH + {0xE0BD, 0x9260}, //9513 #CJK UNIFIED IDEOGRAPH + {0xE0BE, 0x9267}, //9514 #CJK UNIFIED IDEOGRAPH + {0xE0BF, 0x926F}, //9515 #CJK UNIFIED IDEOGRAPH + {0xE0C0, 0x9236}, //9516 #CJK UNIFIED IDEOGRAPH + {0xE0C1, 0x9261}, //9517 #CJK UNIFIED IDEOGRAPH + {0xE0C2, 0x9270}, //9518 #CJK UNIFIED IDEOGRAPH + {0xE0C3, 0x9231}, //9519 #CJK UNIFIED IDEOGRAPH + {0xE0C4, 0x9254}, //9520 #CJK UNIFIED IDEOGRAPH + {0xE0C5, 0x9263}, //9521 #CJK UNIFIED IDEOGRAPH + {0xE0C6, 0x9250}, //9522 #CJK UNIFIED IDEOGRAPH + {0xE0C7, 0x9272}, //9523 #CJK UNIFIED IDEOGRAPH + {0xE0C8, 0x924E}, //9524 #CJK UNIFIED IDEOGRAPH + {0xE0C9, 0x9253}, //9525 #CJK UNIFIED IDEOGRAPH + {0xE0CA, 0x924C}, //9526 #CJK UNIFIED IDEOGRAPH + {0xE0CB, 0x9256}, //9527 #CJK UNIFIED IDEOGRAPH + {0xE0CC, 0x9232}, //9528 #CJK UNIFIED IDEOGRAPH + {0xE0CD, 0x959F}, //9529 #CJK UNIFIED IDEOGRAPH + {0xE0CE, 0x959C}, //9530 #CJK UNIFIED IDEOGRAPH + {0xE0CF, 0x959E}, //9531 #CJK UNIFIED IDEOGRAPH + {0xE0D0, 0x959B}, //9532 #CJK UNIFIED IDEOGRAPH + {0xE0D1, 0x9692}, //9533 #CJK UNIFIED IDEOGRAPH + {0xE0D2, 0x9693}, //9534 #CJK UNIFIED IDEOGRAPH + {0xE0D3, 0x9691}, //9535 #CJK UNIFIED IDEOGRAPH + {0xE0D4, 0x9697}, //9536 #CJK UNIFIED IDEOGRAPH + {0xE0D5, 0x96CE}, //9537 #CJK UNIFIED IDEOGRAPH + {0xE0D6, 0x96FA}, //9538 #CJK UNIFIED IDEOGRAPH + {0xE0D7, 0x96FD}, //9539 #CJK UNIFIED IDEOGRAPH + {0xE0D8, 0x96F8}, //9540 #CJK UNIFIED IDEOGRAPH + {0xE0D9, 0x96F5}, //9541 #CJK UNIFIED IDEOGRAPH + {0xE0DA, 0x9773}, //9542 #CJK UNIFIED IDEOGRAPH + {0xE0DB, 0x9777}, //9543 #CJK UNIFIED IDEOGRAPH + {0xE0DC, 0x9778}, //9544 #CJK UNIFIED IDEOGRAPH + {0xE0DD, 0x9772}, //9545 #CJK UNIFIED IDEOGRAPH + {0xE0DE, 0x980F}, //9546 #CJK UNIFIED IDEOGRAPH + {0xE0DF, 0x980D}, //9547 #CJK UNIFIED IDEOGRAPH + {0xE0E0, 0x980E}, //9548 #CJK UNIFIED IDEOGRAPH + {0xE0E1, 0x98AC}, //9549 #CJK UNIFIED IDEOGRAPH + {0xE0E2, 0x98F6}, //9550 #CJK UNIFIED IDEOGRAPH + {0xE0E3, 0x98F9}, //9551 #CJK UNIFIED IDEOGRAPH + {0xE0E4, 0x99AF}, //9552 #CJK UNIFIED IDEOGRAPH + {0xE0E5, 0x99B2}, //9553 #CJK UNIFIED IDEOGRAPH + {0xE0E6, 0x99B0}, //9554 #CJK UNIFIED IDEOGRAPH + {0xE0E7, 0x99B5}, //9555 #CJK UNIFIED IDEOGRAPH + {0xE0E8, 0x9AAD}, //9556 #CJK UNIFIED IDEOGRAPH + {0xE0E9, 0x9AAB}, //9557 #CJK UNIFIED IDEOGRAPH + {0xE0EA, 0x9B5B}, //9558 #CJK UNIFIED IDEOGRAPH + {0xE0EB, 0x9CEA}, //9559 #CJK UNIFIED IDEOGRAPH + {0xE0EC, 0x9CED}, //9560 #CJK UNIFIED IDEOGRAPH + {0xE0ED, 0x9CE7}, //9561 #CJK UNIFIED IDEOGRAPH + {0xE0EE, 0x9E80}, //9562 #CJK UNIFIED IDEOGRAPH + {0xE0EF, 0x9EFD}, //9563 #CJK UNIFIED IDEOGRAPH + {0xE0F0, 0x50E6}, //9564 #CJK UNIFIED IDEOGRAPH + {0xE0F1, 0x50D4}, //9565 #CJK UNIFIED IDEOGRAPH + {0xE0F2, 0x50D7}, //9566 #CJK UNIFIED IDEOGRAPH + {0xE0F3, 0x50E8}, //9567 #CJK UNIFIED IDEOGRAPH + {0xE0F4, 0x50F3}, //9568 #CJK UNIFIED IDEOGRAPH + {0xE0F5, 0x50DB}, //9569 #CJK UNIFIED IDEOGRAPH + {0xE0F6, 0x50EA}, //9570 #CJK UNIFIED IDEOGRAPH + {0xE0F7, 0x50DD}, //9571 #CJK UNIFIED IDEOGRAPH + {0xE0F8, 0x50E4}, //9572 #CJK UNIFIED IDEOGRAPH + {0xE0F9, 0x50D3}, //9573 #CJK UNIFIED IDEOGRAPH + {0xE0FA, 0x50EC}, //9574 #CJK UNIFIED IDEOGRAPH + {0xE0FB, 0x50F0}, //9575 #CJK UNIFIED IDEOGRAPH + {0xE0FC, 0x50EF}, //9576 #CJK UNIFIED IDEOGRAPH + {0xE0FD, 0x50E3}, //9577 #CJK UNIFIED IDEOGRAPH + {0xE0FE, 0x50E0}, //9578 #CJK UNIFIED IDEOGRAPH + {0xE140, 0x51D8}, //9579 #CJK UNIFIED IDEOGRAPH + {0xE141, 0x5280}, //9580 #CJK UNIFIED IDEOGRAPH + {0xE142, 0x5281}, //9581 #CJK UNIFIED IDEOGRAPH + {0xE143, 0x52E9}, //9582 #CJK UNIFIED IDEOGRAPH + {0xE144, 0x52EB}, //9583 #CJK UNIFIED IDEOGRAPH + {0xE145, 0x5330}, //9584 #CJK UNIFIED IDEOGRAPH + {0xE146, 0x53AC}, //9585 #CJK UNIFIED IDEOGRAPH + {0xE147, 0x5627}, //9586 #CJK UNIFIED IDEOGRAPH + {0xE148, 0x5615}, //9587 #CJK UNIFIED IDEOGRAPH + {0xE149, 0x560C}, //9588 #CJK UNIFIED IDEOGRAPH + {0xE14A, 0x5612}, //9589 #CJK UNIFIED IDEOGRAPH + {0xE14B, 0x55FC}, //9590 #CJK UNIFIED IDEOGRAPH + {0xE14C, 0x560F}, //9591 #CJK UNIFIED IDEOGRAPH + {0xE14D, 0x561C}, //9592 #CJK UNIFIED IDEOGRAPH + {0xE14E, 0x5601}, //9593 #CJK UNIFIED IDEOGRAPH + {0xE14F, 0x5613}, //9594 #CJK UNIFIED IDEOGRAPH + {0xE150, 0x5602}, //9595 #CJK UNIFIED IDEOGRAPH + {0xE151, 0x55FA}, //9596 #CJK UNIFIED IDEOGRAPH + {0xE152, 0x561D}, //9597 #CJK UNIFIED IDEOGRAPH + {0xE153, 0x5604}, //9598 #CJK UNIFIED IDEOGRAPH + {0xE154, 0x55FF}, //9599 #CJK UNIFIED IDEOGRAPH + {0xE155, 0x55F9}, //9600 #CJK UNIFIED IDEOGRAPH + {0xE156, 0x5889}, //9601 #CJK UNIFIED IDEOGRAPH + {0xE157, 0x587C}, //9602 #CJK UNIFIED IDEOGRAPH + {0xE158, 0x5890}, //9603 #CJK UNIFIED IDEOGRAPH + {0xE159, 0x5898}, //9604 #CJK UNIFIED IDEOGRAPH + {0xE15A, 0x5886}, //9605 #CJK UNIFIED IDEOGRAPH + {0xE15B, 0x5881}, //9606 #CJK UNIFIED IDEOGRAPH + {0xE15C, 0x587F}, //9607 #CJK UNIFIED IDEOGRAPH + {0xE15D, 0x5874}, //9608 #CJK UNIFIED IDEOGRAPH + {0xE15E, 0x588B}, //9609 #CJK UNIFIED IDEOGRAPH + {0xE15F, 0x587A}, //9610 #CJK UNIFIED IDEOGRAPH + {0xE160, 0x5887}, //9611 #CJK UNIFIED IDEOGRAPH + {0xE161, 0x5891}, //9612 #CJK UNIFIED IDEOGRAPH + {0xE162, 0x588E}, //9613 #CJK UNIFIED IDEOGRAPH + {0xE163, 0x5876}, //9614 #CJK UNIFIED IDEOGRAPH + {0xE164, 0x5882}, //9615 #CJK UNIFIED IDEOGRAPH + {0xE165, 0x5888}, //9616 #CJK UNIFIED IDEOGRAPH + {0xE166, 0x587B}, //9617 #CJK UNIFIED IDEOGRAPH + {0xE167, 0x5894}, //9618 #CJK UNIFIED IDEOGRAPH + {0xE168, 0x588F}, //9619 #CJK UNIFIED IDEOGRAPH + {0xE169, 0x58FE}, //9620 #CJK UNIFIED IDEOGRAPH + {0xE16A, 0x596B}, //9621 #CJK UNIFIED IDEOGRAPH + {0xE16B, 0x5ADC}, //9622 #CJK UNIFIED IDEOGRAPH + {0xE16C, 0x5AEE}, //9623 #CJK UNIFIED IDEOGRAPH + {0xE16D, 0x5AE5}, //9624 #CJK UNIFIED IDEOGRAPH + {0xE16E, 0x5AD5}, //9625 #CJK UNIFIED IDEOGRAPH + {0xE16F, 0x5AEA}, //9626 #CJK UNIFIED IDEOGRAPH + {0xE170, 0x5ADA}, //9627 #CJK UNIFIED IDEOGRAPH + {0xE171, 0x5AED}, //9628 #CJK UNIFIED IDEOGRAPH + {0xE172, 0x5AEB}, //9629 #CJK UNIFIED IDEOGRAPH + {0xE173, 0x5AF3}, //9630 #CJK UNIFIED IDEOGRAPH + {0xE174, 0x5AE2}, //9631 #CJK UNIFIED IDEOGRAPH + {0xE175, 0x5AE0}, //9632 #CJK UNIFIED IDEOGRAPH + {0xE176, 0x5ADB}, //9633 #CJK UNIFIED IDEOGRAPH + {0xE177, 0x5AEC}, //9634 #CJK UNIFIED IDEOGRAPH + {0xE178, 0x5ADE}, //9635 #CJK UNIFIED IDEOGRAPH + {0xE179, 0x5ADD}, //9636 #CJK UNIFIED IDEOGRAPH + {0xE17A, 0x5AD9}, //9637 #CJK UNIFIED IDEOGRAPH + {0xE17B, 0x5AE8}, //9638 #CJK UNIFIED IDEOGRAPH + {0xE17C, 0x5ADF}, //9639 #CJK UNIFIED IDEOGRAPH + {0xE17D, 0x5B77}, //9640 #CJK UNIFIED IDEOGRAPH + {0xE17E, 0x5BE0}, //9641 #CJK UNIFIED IDEOGRAPH + {0xE1A1, 0x5BE3}, //9642 #CJK UNIFIED IDEOGRAPH + {0xE1A2, 0x5C63}, //9643 #CJK UNIFIED IDEOGRAPH + {0xE1A3, 0x5D82}, //9644 #CJK UNIFIED IDEOGRAPH + {0xE1A4, 0x5D80}, //9645 #CJK UNIFIED IDEOGRAPH + {0xE1A5, 0x5D7D}, //9646 #CJK UNIFIED IDEOGRAPH + {0xE1A6, 0x5D86}, //9647 #CJK UNIFIED IDEOGRAPH + {0xE1A7, 0x5D7A}, //9648 #CJK UNIFIED IDEOGRAPH + {0xE1A8, 0x5D81}, //9649 #CJK UNIFIED IDEOGRAPH + {0xE1A9, 0x5D77}, //9650 #CJK UNIFIED IDEOGRAPH + {0xE1AA, 0x5D8A}, //9651 #CJK UNIFIED IDEOGRAPH + {0xE1AB, 0x5D89}, //9652 #CJK UNIFIED IDEOGRAPH + {0xE1AC, 0x5D88}, //9653 #CJK UNIFIED IDEOGRAPH + {0xE1AD, 0x5D7E}, //9654 #CJK UNIFIED IDEOGRAPH + {0xE1AE, 0x5D7C}, //9655 #CJK UNIFIED IDEOGRAPH + {0xE1AF, 0x5D8D}, //9656 #CJK UNIFIED IDEOGRAPH + {0xE1B0, 0x5D79}, //9657 #CJK UNIFIED IDEOGRAPH + {0xE1B1, 0x5D7F}, //9658 #CJK UNIFIED IDEOGRAPH + {0xE1B2, 0x5E58}, //9659 #CJK UNIFIED IDEOGRAPH + {0xE1B3, 0x5E59}, //9660 #CJK UNIFIED IDEOGRAPH + {0xE1B4, 0x5E53}, //9661 #CJK UNIFIED IDEOGRAPH + {0xE1B5, 0x5ED8}, //9662 #CJK UNIFIED IDEOGRAPH + {0xE1B6, 0x5ED1}, //9663 #CJK UNIFIED IDEOGRAPH + {0xE1B7, 0x5ED7}, //9664 #CJK UNIFIED IDEOGRAPH + {0xE1B8, 0x5ECE}, //9665 #CJK UNIFIED IDEOGRAPH + {0xE1B9, 0x5EDC}, //9666 #CJK UNIFIED IDEOGRAPH + {0xE1BA, 0x5ED5}, //9667 #CJK UNIFIED IDEOGRAPH + {0xE1BB, 0x5ED9}, //9668 #CJK UNIFIED IDEOGRAPH + {0xE1BC, 0x5ED2}, //9669 #CJK UNIFIED IDEOGRAPH + {0xE1BD, 0x5ED4}, //9670 #CJK UNIFIED IDEOGRAPH + {0xE1BE, 0x5F44}, //9671 #CJK UNIFIED IDEOGRAPH + {0xE1BF, 0x5F43}, //9672 #CJK UNIFIED IDEOGRAPH + {0xE1C0, 0x5F6F}, //9673 #CJK UNIFIED IDEOGRAPH + {0xE1C1, 0x5FB6}, //9674 #CJK UNIFIED IDEOGRAPH + {0xE1C2, 0x612C}, //9675 #CJK UNIFIED IDEOGRAPH + {0xE1C3, 0x6128}, //9676 #CJK UNIFIED IDEOGRAPH + {0xE1C4, 0x6141}, //9677 #CJK UNIFIED IDEOGRAPH + {0xE1C5, 0x615E}, //9678 #CJK UNIFIED IDEOGRAPH + {0xE1C6, 0x6171}, //9679 #CJK UNIFIED IDEOGRAPH + {0xE1C7, 0x6173}, //9680 #CJK UNIFIED IDEOGRAPH + {0xE1C8, 0x6152}, //9681 #CJK UNIFIED IDEOGRAPH + {0xE1C9, 0x6153}, //9682 #CJK UNIFIED IDEOGRAPH + {0xE1CA, 0x6172}, //9683 #CJK UNIFIED IDEOGRAPH + {0xE1CB, 0x616C}, //9684 #CJK UNIFIED IDEOGRAPH + {0xE1CC, 0x6180}, //9685 #CJK UNIFIED IDEOGRAPH + {0xE1CD, 0x6174}, //9686 #CJK UNIFIED IDEOGRAPH + {0xE1CE, 0x6154}, //9687 #CJK UNIFIED IDEOGRAPH + {0xE1CF, 0x617A}, //9688 #CJK UNIFIED IDEOGRAPH + {0xE1D0, 0x615B}, //9689 #CJK UNIFIED IDEOGRAPH + {0xE1D1, 0x6165}, //9690 #CJK UNIFIED IDEOGRAPH + {0xE1D2, 0x613B}, //9691 #CJK UNIFIED IDEOGRAPH + {0xE1D3, 0x616A}, //9692 #CJK UNIFIED IDEOGRAPH + {0xE1D4, 0x6161}, //9693 #CJK UNIFIED IDEOGRAPH + {0xE1D5, 0x6156}, //9694 #CJK UNIFIED IDEOGRAPH + {0xE1D6, 0x6229}, //9695 #CJK UNIFIED IDEOGRAPH + {0xE1D7, 0x6227}, //9696 #CJK UNIFIED IDEOGRAPH + {0xE1D8, 0x622B}, //9697 #CJK UNIFIED IDEOGRAPH + {0xE1D9, 0x642B}, //9698 #CJK UNIFIED IDEOGRAPH + {0xE1DA, 0x644D}, //9699 #CJK UNIFIED IDEOGRAPH + {0xE1DB, 0x645B}, //9700 #CJK UNIFIED IDEOGRAPH + {0xE1DC, 0x645D}, //9701 #CJK UNIFIED IDEOGRAPH + {0xE1DD, 0x6474}, //9702 #CJK UNIFIED IDEOGRAPH + {0xE1DE, 0x6476}, //9703 #CJK UNIFIED IDEOGRAPH + {0xE1DF, 0x6472}, //9704 #CJK UNIFIED IDEOGRAPH + {0xE1E0, 0x6473}, //9705 #CJK UNIFIED IDEOGRAPH + {0xE1E1, 0x647D}, //9706 #CJK UNIFIED IDEOGRAPH + {0xE1E2, 0x6475}, //9707 #CJK UNIFIED IDEOGRAPH + {0xE1E3, 0x6466}, //9708 #CJK UNIFIED IDEOGRAPH + {0xE1E4, 0x64A6}, //9709 #CJK UNIFIED IDEOGRAPH + {0xE1E5, 0x644E}, //9710 #CJK UNIFIED IDEOGRAPH + {0xE1E6, 0x6482}, //9711 #CJK UNIFIED IDEOGRAPH + {0xE1E7, 0x645E}, //9712 #CJK UNIFIED IDEOGRAPH + {0xE1E8, 0x645C}, //9713 #CJK UNIFIED IDEOGRAPH + {0xE1E9, 0x644B}, //9714 #CJK UNIFIED IDEOGRAPH + {0xE1EA, 0x6453}, //9715 #CJK UNIFIED IDEOGRAPH + {0xE1EB, 0x6460}, //9716 #CJK UNIFIED IDEOGRAPH + {0xE1EC, 0x6450}, //9717 #CJK UNIFIED IDEOGRAPH + {0xE1ED, 0x647F}, //9718 #CJK UNIFIED IDEOGRAPH + {0xE1EE, 0x643F}, //9719 #CJK UNIFIED IDEOGRAPH + {0xE1EF, 0x646C}, //9720 #CJK UNIFIED IDEOGRAPH + {0xE1F0, 0x646B}, //9721 #CJK UNIFIED IDEOGRAPH + {0xE1F1, 0x6459}, //9722 #CJK UNIFIED IDEOGRAPH + {0xE1F2, 0x6465}, //9723 #CJK UNIFIED IDEOGRAPH + {0xE1F3, 0x6477}, //9724 #CJK UNIFIED IDEOGRAPH + {0xE1F4, 0x6573}, //9725 #CJK UNIFIED IDEOGRAPH + {0xE1F5, 0x65A0}, //9726 #CJK UNIFIED IDEOGRAPH + {0xE1F6, 0x66A1}, //9727 #CJK UNIFIED IDEOGRAPH + {0xE1F7, 0x66A0}, //9728 #CJK UNIFIED IDEOGRAPH + {0xE1F8, 0x669F}, //9729 #CJK UNIFIED IDEOGRAPH + {0xE1F9, 0x6705}, //9730 #CJK UNIFIED IDEOGRAPH + {0xE1FA, 0x6704}, //9731 #CJK UNIFIED IDEOGRAPH + {0xE1FB, 0x6722}, //9732 #CJK UNIFIED IDEOGRAPH + {0xE1FC, 0x69B1}, //9733 #CJK UNIFIED IDEOGRAPH + {0xE1FD, 0x69B6}, //9734 #CJK UNIFIED IDEOGRAPH + {0xE1FE, 0x69C9}, //9735 #CJK UNIFIED IDEOGRAPH + {0xE240, 0x69A0}, //9736 #CJK UNIFIED IDEOGRAPH + {0xE241, 0x69CE}, //9737 #CJK UNIFIED IDEOGRAPH + {0xE242, 0x6996}, //9738 #CJK UNIFIED IDEOGRAPH + {0xE243, 0x69B0}, //9739 #CJK UNIFIED IDEOGRAPH + {0xE244, 0x69AC}, //9740 #CJK UNIFIED IDEOGRAPH + {0xE245, 0x69BC}, //9741 #CJK UNIFIED IDEOGRAPH + {0xE246, 0x6991}, //9742 #CJK UNIFIED IDEOGRAPH + {0xE247, 0x6999}, //9743 #CJK UNIFIED IDEOGRAPH + {0xE248, 0x698E}, //9744 #CJK UNIFIED IDEOGRAPH + {0xE249, 0x69A7}, //9745 #CJK UNIFIED IDEOGRAPH + {0xE24A, 0x698D}, //9746 #CJK UNIFIED IDEOGRAPH + {0xE24B, 0x69A9}, //9747 #CJK UNIFIED IDEOGRAPH + {0xE24C, 0x69BE}, //9748 #CJK UNIFIED IDEOGRAPH + {0xE24D, 0x69AF}, //9749 #CJK UNIFIED IDEOGRAPH + {0xE24E, 0x69BF}, //9750 #CJK UNIFIED IDEOGRAPH + {0xE24F, 0x69C4}, //9751 #CJK UNIFIED IDEOGRAPH + {0xE250, 0x69BD}, //9752 #CJK UNIFIED IDEOGRAPH + {0xE251, 0x69A4}, //9753 #CJK UNIFIED IDEOGRAPH + {0xE252, 0x69D4}, //9754 #CJK UNIFIED IDEOGRAPH + {0xE253, 0x69B9}, //9755 #CJK UNIFIED IDEOGRAPH + {0xE254, 0x69CA}, //9756 #CJK UNIFIED IDEOGRAPH + {0xE255, 0x699A}, //9757 #CJK UNIFIED IDEOGRAPH + {0xE256, 0x69CF}, //9758 #CJK UNIFIED IDEOGRAPH + {0xE257, 0x69B3}, //9759 #CJK UNIFIED IDEOGRAPH + {0xE258, 0x6993}, //9760 #CJK UNIFIED IDEOGRAPH + {0xE259, 0x69AA}, //9761 #CJK UNIFIED IDEOGRAPH + {0xE25A, 0x69A1}, //9762 #CJK UNIFIED IDEOGRAPH + {0xE25B, 0x699E}, //9763 #CJK UNIFIED IDEOGRAPH + {0xE25C, 0x69D9}, //9764 #CJK UNIFIED IDEOGRAPH + {0xE25D, 0x6997}, //9765 #CJK UNIFIED IDEOGRAPH + {0xE25E, 0x6990}, //9766 #CJK UNIFIED IDEOGRAPH + {0xE25F, 0x69C2}, //9767 #CJK UNIFIED IDEOGRAPH + {0xE260, 0x69B5}, //9768 #CJK UNIFIED IDEOGRAPH + {0xE261, 0x69A5}, //9769 #CJK UNIFIED IDEOGRAPH + {0xE262, 0x69C6}, //9770 #CJK UNIFIED IDEOGRAPH + {0xE263, 0x6B4A}, //9771 #CJK UNIFIED IDEOGRAPH + {0xE264, 0x6B4D}, //9772 #CJK UNIFIED IDEOGRAPH + {0xE265, 0x6B4B}, //9773 #CJK UNIFIED IDEOGRAPH + {0xE266, 0x6B9E}, //9774 #CJK UNIFIED IDEOGRAPH + {0xE267, 0x6B9F}, //9775 #CJK UNIFIED IDEOGRAPH + {0xE268, 0x6BA0}, //9776 #CJK UNIFIED IDEOGRAPH + {0xE269, 0x6BC3}, //9777 #CJK UNIFIED IDEOGRAPH + {0xE26A, 0x6BC4}, //9778 #CJK UNIFIED IDEOGRAPH + {0xE26B, 0x6BFE}, //9779 #CJK UNIFIED IDEOGRAPH + {0xE26C, 0x6ECE}, //9780 #CJK UNIFIED IDEOGRAPH + {0xE26D, 0x6EF5}, //9781 #CJK UNIFIED IDEOGRAPH + {0xE26E, 0x6EF1}, //9782 #CJK UNIFIED IDEOGRAPH + {0xE26F, 0x6F03}, //9783 #CJK UNIFIED IDEOGRAPH + {0xE270, 0x6F25}, //9784 #CJK UNIFIED IDEOGRAPH + {0xE271, 0x6EF8}, //9785 #CJK UNIFIED IDEOGRAPH + {0xE272, 0x6F37}, //9786 #CJK UNIFIED IDEOGRAPH + {0xE273, 0x6EFB}, //9787 #CJK UNIFIED IDEOGRAPH + {0xE274, 0x6F2E}, //9788 #CJK UNIFIED IDEOGRAPH + {0xE275, 0x6F09}, //9789 #CJK UNIFIED IDEOGRAPH + {0xE276, 0x6F4E}, //9790 #CJK UNIFIED IDEOGRAPH + {0xE277, 0x6F19}, //9791 #CJK UNIFIED IDEOGRAPH + {0xE278, 0x6F1A}, //9792 #CJK UNIFIED IDEOGRAPH + {0xE279, 0x6F27}, //9793 #CJK UNIFIED IDEOGRAPH + {0xE27A, 0x6F18}, //9794 #CJK UNIFIED IDEOGRAPH + {0xE27B, 0x6F3B}, //9795 #CJK UNIFIED IDEOGRAPH + {0xE27C, 0x6F12}, //9796 #CJK UNIFIED IDEOGRAPH + {0xE27D, 0x6EED}, //9797 #CJK UNIFIED IDEOGRAPH + {0xE27E, 0x6F0A}, //9798 #CJK UNIFIED IDEOGRAPH + {0xE2A1, 0x6F36}, //9799 #CJK UNIFIED IDEOGRAPH + {0xE2A2, 0x6F73}, //9800 #CJK UNIFIED IDEOGRAPH + {0xE2A3, 0x6EF9}, //9801 #CJK UNIFIED IDEOGRAPH + {0xE2A4, 0x6EEE}, //9802 #CJK UNIFIED IDEOGRAPH + {0xE2A5, 0x6F2D}, //9803 #CJK UNIFIED IDEOGRAPH + {0xE2A6, 0x6F40}, //9804 #CJK UNIFIED IDEOGRAPH + {0xE2A7, 0x6F30}, //9805 #CJK UNIFIED IDEOGRAPH + {0xE2A8, 0x6F3C}, //9806 #CJK UNIFIED IDEOGRAPH + {0xE2A9, 0x6F35}, //9807 #CJK UNIFIED IDEOGRAPH + {0xE2AA, 0x6EEB}, //9808 #CJK UNIFIED IDEOGRAPH + {0xE2AB, 0x6F07}, //9809 #CJK UNIFIED IDEOGRAPH + {0xE2AC, 0x6F0E}, //9810 #CJK UNIFIED IDEOGRAPH + {0xE2AD, 0x6F43}, //9811 #CJK UNIFIED IDEOGRAPH + {0xE2AE, 0x6F05}, //9812 #CJK UNIFIED IDEOGRAPH + {0xE2AF, 0x6EFD}, //9813 #CJK UNIFIED IDEOGRAPH + {0xE2B0, 0x6EF6}, //9814 #CJK UNIFIED IDEOGRAPH + {0xE2B1, 0x6F39}, //9815 #CJK UNIFIED IDEOGRAPH + {0xE2B2, 0x6F1C}, //9816 #CJK UNIFIED IDEOGRAPH + {0xE2B3, 0x6EFC}, //9817 #CJK UNIFIED IDEOGRAPH + {0xE2B4, 0x6F3A}, //9818 #CJK UNIFIED IDEOGRAPH + {0xE2B5, 0x6F1F}, //9819 #CJK UNIFIED IDEOGRAPH + {0xE2B6, 0x6F0D}, //9820 #CJK UNIFIED IDEOGRAPH + {0xE2B7, 0x6F1E}, //9821 #CJK UNIFIED IDEOGRAPH + {0xE2B8, 0x6F08}, //9822 #CJK UNIFIED IDEOGRAPH + {0xE2B9, 0x6F21}, //9823 #CJK UNIFIED IDEOGRAPH + {0xE2BA, 0x7187}, //9824 #CJK UNIFIED IDEOGRAPH + {0xE2BB, 0x7190}, //9825 #CJK UNIFIED IDEOGRAPH + {0xE2BC, 0x7189}, //9826 #CJK UNIFIED IDEOGRAPH + {0xE2BD, 0x7180}, //9827 #CJK UNIFIED IDEOGRAPH + {0xE2BE, 0x7185}, //9828 #CJK UNIFIED IDEOGRAPH + {0xE2BF, 0x7182}, //9829 #CJK UNIFIED IDEOGRAPH + {0xE2C0, 0x718F}, //9830 #CJK UNIFIED IDEOGRAPH + {0xE2C1, 0x717B}, //9831 #CJK UNIFIED IDEOGRAPH + {0xE2C2, 0x7186}, //9832 #CJK UNIFIED IDEOGRAPH + {0xE2C3, 0x7181}, //9833 #CJK UNIFIED IDEOGRAPH + {0xE2C4, 0x7197}, //9834 #CJK UNIFIED IDEOGRAPH + {0xE2C5, 0x7244}, //9835 #CJK UNIFIED IDEOGRAPH + {0xE2C6, 0x7253}, //9836 #CJK UNIFIED IDEOGRAPH + {0xE2C7, 0x7297}, //9837 #CJK UNIFIED IDEOGRAPH + {0xE2C8, 0x7295}, //9838 #CJK UNIFIED IDEOGRAPH + {0xE2C9, 0x7293}, //9839 #CJK UNIFIED IDEOGRAPH + {0xE2CA, 0x7343}, //9840 #CJK UNIFIED IDEOGRAPH + {0xE2CB, 0x734D}, //9841 #CJK UNIFIED IDEOGRAPH + {0xE2CC, 0x7351}, //9842 #CJK UNIFIED IDEOGRAPH + {0xE2CD, 0x734C}, //9843 #CJK UNIFIED IDEOGRAPH + {0xE2CE, 0x7462}, //9844 #CJK UNIFIED IDEOGRAPH + {0xE2CF, 0x7473}, //9845 #CJK UNIFIED IDEOGRAPH + {0xE2D0, 0x7471}, //9846 #CJK UNIFIED IDEOGRAPH + {0xE2D1, 0x7475}, //9847 #CJK UNIFIED IDEOGRAPH + {0xE2D2, 0x7472}, //9848 #CJK UNIFIED IDEOGRAPH + {0xE2D3, 0x7467}, //9849 #CJK UNIFIED IDEOGRAPH + {0xE2D4, 0x746E}, //9850 #CJK UNIFIED IDEOGRAPH + {0xE2D5, 0x7500}, //9851 #CJK UNIFIED IDEOGRAPH + {0xE2D6, 0x7502}, //9852 #CJK UNIFIED IDEOGRAPH + {0xE2D7, 0x7503}, //9853 #CJK UNIFIED IDEOGRAPH + {0xE2D8, 0x757D}, //9854 #CJK UNIFIED IDEOGRAPH + {0xE2D9, 0x7590}, //9855 #CJK UNIFIED IDEOGRAPH + {0xE2DA, 0x7616}, //9856 #CJK UNIFIED IDEOGRAPH + {0xE2DB, 0x7608}, //9857 #CJK UNIFIED IDEOGRAPH + {0xE2DC, 0x760C}, //9858 #CJK UNIFIED IDEOGRAPH + {0xE2DD, 0x7615}, //9859 #CJK UNIFIED IDEOGRAPH + {0xE2DE, 0x7611}, //9860 #CJK UNIFIED IDEOGRAPH + {0xE2DF, 0x760A}, //9861 #CJK UNIFIED IDEOGRAPH + {0xE2E0, 0x7614}, //9862 #CJK UNIFIED IDEOGRAPH + {0xE2E1, 0x76B8}, //9863 #CJK UNIFIED IDEOGRAPH + {0xE2E2, 0x7781}, //9864 #CJK UNIFIED IDEOGRAPH + {0xE2E3, 0x777C}, //9865 #CJK UNIFIED IDEOGRAPH + {0xE2E4, 0x7785}, //9866 #CJK UNIFIED IDEOGRAPH + {0xE2E5, 0x7782}, //9867 #CJK UNIFIED IDEOGRAPH + {0xE2E6, 0x776E}, //9868 #CJK UNIFIED IDEOGRAPH + {0xE2E7, 0x7780}, //9869 #CJK UNIFIED IDEOGRAPH + {0xE2E8, 0x776F}, //9870 #CJK UNIFIED IDEOGRAPH + {0xE2E9, 0x777E}, //9871 #CJK UNIFIED IDEOGRAPH + {0xE2EA, 0x7783}, //9872 #CJK UNIFIED IDEOGRAPH + {0xE2EB, 0x78B2}, //9873 #CJK UNIFIED IDEOGRAPH + {0xE2EC, 0x78AA}, //9874 #CJK UNIFIED IDEOGRAPH + {0xE2ED, 0x78B4}, //9875 #CJK UNIFIED IDEOGRAPH + {0xE2EE, 0x78AD}, //9876 #CJK UNIFIED IDEOGRAPH + {0xE2EF, 0x78A8}, //9877 #CJK UNIFIED IDEOGRAPH + {0xE2F0, 0x787E}, //9878 #CJK UNIFIED IDEOGRAPH + {0xE2F1, 0x78AB}, //9879 #CJK UNIFIED IDEOGRAPH + {0xE2F2, 0x789E}, //9880 #CJK UNIFIED IDEOGRAPH + {0xE2F3, 0x78A5}, //9881 #CJK UNIFIED IDEOGRAPH + {0xE2F4, 0x78A0}, //9882 #CJK UNIFIED IDEOGRAPH + {0xE2F5, 0x78AC}, //9883 #CJK UNIFIED IDEOGRAPH + {0xE2F6, 0x78A2}, //9884 #CJK UNIFIED IDEOGRAPH + {0xE2F7, 0x78A4}, //9885 #CJK UNIFIED IDEOGRAPH + {0xE2F8, 0x7998}, //9886 #CJK UNIFIED IDEOGRAPH + {0xE2F9, 0x798A}, //9887 #CJK UNIFIED IDEOGRAPH + {0xE2FA, 0x798B}, //9888 #CJK UNIFIED IDEOGRAPH + {0xE2FB, 0x7996}, //9889 #CJK UNIFIED IDEOGRAPH + {0xE2FC, 0x7995}, //9890 #CJK UNIFIED IDEOGRAPH + {0xE2FD, 0x7994}, //9891 #CJK UNIFIED IDEOGRAPH + {0xE2FE, 0x7993}, //9892 #CJK UNIFIED IDEOGRAPH + {0xE340, 0x7997}, //9893 #CJK UNIFIED IDEOGRAPH + {0xE341, 0x7988}, //9894 #CJK UNIFIED IDEOGRAPH + {0xE342, 0x7992}, //9895 #CJK UNIFIED IDEOGRAPH + {0xE343, 0x7990}, //9896 #CJK UNIFIED IDEOGRAPH + {0xE344, 0x7A2B}, //9897 #CJK UNIFIED IDEOGRAPH + {0xE345, 0x7A4A}, //9898 #CJK UNIFIED IDEOGRAPH + {0xE346, 0x7A30}, //9899 #CJK UNIFIED IDEOGRAPH + {0xE347, 0x7A2F}, //9900 #CJK UNIFIED IDEOGRAPH + {0xE348, 0x7A28}, //9901 #CJK UNIFIED IDEOGRAPH + {0xE349, 0x7A26}, //9902 #CJK UNIFIED IDEOGRAPH + {0xE34A, 0x7AA8}, //9903 #CJK UNIFIED IDEOGRAPH + {0xE34B, 0x7AAB}, //9904 #CJK UNIFIED IDEOGRAPH + {0xE34C, 0x7AAC}, //9905 #CJK UNIFIED IDEOGRAPH + {0xE34D, 0x7AEE}, //9906 #CJK UNIFIED IDEOGRAPH + {0xE34E, 0x7B88}, //9907 #CJK UNIFIED IDEOGRAPH + {0xE34F, 0x7B9C}, //9908 #CJK UNIFIED IDEOGRAPH + {0xE350, 0x7B8A}, //9909 #CJK UNIFIED IDEOGRAPH + {0xE351, 0x7B91}, //9910 #CJK UNIFIED IDEOGRAPH + {0xE352, 0x7B90}, //9911 #CJK UNIFIED IDEOGRAPH + {0xE353, 0x7B96}, //9912 #CJK UNIFIED IDEOGRAPH + {0xE354, 0x7B8D}, //9913 #CJK UNIFIED IDEOGRAPH + {0xE355, 0x7B8C}, //9914 #CJK UNIFIED IDEOGRAPH + {0xE356, 0x7B9B}, //9915 #CJK UNIFIED IDEOGRAPH + {0xE357, 0x7B8E}, //9916 #CJK UNIFIED IDEOGRAPH + {0xE358, 0x7B85}, //9917 #CJK UNIFIED IDEOGRAPH + {0xE359, 0x7B98}, //9918 #CJK UNIFIED IDEOGRAPH + {0xE35A, 0x5284}, //9919 #CJK UNIFIED IDEOGRAPH + {0xE35B, 0x7B99}, //9920 #CJK UNIFIED IDEOGRAPH + {0xE35C, 0x7BA4}, //9921 #CJK UNIFIED IDEOGRAPH + {0xE35D, 0x7B82}, //9922 #CJK UNIFIED IDEOGRAPH + {0xE35E, 0x7CBB}, //9923 #CJK UNIFIED IDEOGRAPH + {0xE35F, 0x7CBF}, //9924 #CJK UNIFIED IDEOGRAPH + {0xE360, 0x7CBC}, //9925 #CJK UNIFIED IDEOGRAPH + {0xE361, 0x7CBA}, //9926 #CJK UNIFIED IDEOGRAPH + {0xE362, 0x7DA7}, //9927 #CJK UNIFIED IDEOGRAPH + {0xE363, 0x7DB7}, //9928 #CJK UNIFIED IDEOGRAPH + {0xE364, 0x7DC2}, //9929 #CJK UNIFIED IDEOGRAPH + {0xE365, 0x7DA3}, //9930 #CJK UNIFIED IDEOGRAPH + {0xE366, 0x7DAA}, //9931 #CJK UNIFIED IDEOGRAPH + {0xE367, 0x7DC1}, //9932 #CJK UNIFIED IDEOGRAPH + {0xE368, 0x7DC0}, //9933 #CJK UNIFIED IDEOGRAPH + {0xE369, 0x7DC5}, //9934 #CJK UNIFIED IDEOGRAPH + {0xE36A, 0x7D9D}, //9935 #CJK UNIFIED IDEOGRAPH + {0xE36B, 0x7DCE}, //9936 #CJK UNIFIED IDEOGRAPH + {0xE36C, 0x7DC4}, //9937 #CJK UNIFIED IDEOGRAPH + {0xE36D, 0x7DC6}, //9938 #CJK UNIFIED IDEOGRAPH + {0xE36E, 0x7DCB}, //9939 #CJK UNIFIED IDEOGRAPH + {0xE36F, 0x7DCC}, //9940 #CJK UNIFIED IDEOGRAPH + {0xE370, 0x7DAF}, //9941 #CJK UNIFIED IDEOGRAPH + {0xE371, 0x7DB9}, //9942 #CJK UNIFIED IDEOGRAPH + {0xE372, 0x7D96}, //9943 #CJK UNIFIED IDEOGRAPH + {0xE373, 0x7DBC}, //9944 #CJK UNIFIED IDEOGRAPH + {0xE374, 0x7D9F}, //9945 #CJK UNIFIED IDEOGRAPH + {0xE375, 0x7DA6}, //9946 #CJK UNIFIED IDEOGRAPH + {0xE376, 0x7DAE}, //9947 #CJK UNIFIED IDEOGRAPH + {0xE377, 0x7DA9}, //9948 #CJK UNIFIED IDEOGRAPH + {0xE378, 0x7DA1}, //9949 #CJK UNIFIED IDEOGRAPH + {0xE379, 0x7DC9}, //9950 #CJK UNIFIED IDEOGRAPH + {0xE37A, 0x7F73}, //9951 #CJK UNIFIED IDEOGRAPH + {0xE37B, 0x7FE2}, //9952 #CJK UNIFIED IDEOGRAPH + {0xE37C, 0x7FE3}, //9953 #CJK UNIFIED IDEOGRAPH + {0xE37D, 0x7FE5}, //9954 #CJK UNIFIED IDEOGRAPH + {0xE37E, 0x7FDE}, //9955 #CJK UNIFIED IDEOGRAPH + {0xE3A1, 0x8024}, //9956 #CJK UNIFIED IDEOGRAPH + {0xE3A2, 0x805D}, //9957 #CJK UNIFIED IDEOGRAPH + {0xE3A3, 0x805C}, //9958 #CJK UNIFIED IDEOGRAPH + {0xE3A4, 0x8189}, //9959 #CJK UNIFIED IDEOGRAPH + {0xE3A5, 0x8186}, //9960 #CJK UNIFIED IDEOGRAPH + {0xE3A6, 0x8183}, //9961 #CJK UNIFIED IDEOGRAPH + {0xE3A7, 0x8187}, //9962 #CJK UNIFIED IDEOGRAPH + {0xE3A8, 0x818D}, //9963 #CJK UNIFIED IDEOGRAPH + {0xE3A9, 0x818C}, //9964 #CJK UNIFIED IDEOGRAPH + {0xE3AA, 0x818B}, //9965 #CJK UNIFIED IDEOGRAPH + {0xE3AB, 0x8215}, //9966 #CJK UNIFIED IDEOGRAPH + {0xE3AC, 0x8497}, //9967 #CJK UNIFIED IDEOGRAPH + {0xE3AD, 0x84A4}, //9968 #CJK UNIFIED IDEOGRAPH + {0xE3AE, 0x84A1}, //9969 #CJK UNIFIED IDEOGRAPH + {0xE3AF, 0x849F}, //9970 #CJK UNIFIED IDEOGRAPH + {0xE3B0, 0x84BA}, //9971 #CJK UNIFIED IDEOGRAPH + {0xE3B1, 0x84CE}, //9972 #CJK UNIFIED IDEOGRAPH + {0xE3B2, 0x84C2}, //9973 #CJK UNIFIED IDEOGRAPH + {0xE3B3, 0x84AC}, //9974 #CJK UNIFIED IDEOGRAPH + {0xE3B4, 0x84AE}, //9975 #CJK UNIFIED IDEOGRAPH + {0xE3B5, 0x84AB}, //9976 #CJK UNIFIED IDEOGRAPH + {0xE3B6, 0x84B9}, //9977 #CJK UNIFIED IDEOGRAPH + {0xE3B7, 0x84B4}, //9978 #CJK UNIFIED IDEOGRAPH + {0xE3B8, 0x84C1}, //9979 #CJK UNIFIED IDEOGRAPH + {0xE3B9, 0x84CD}, //9980 #CJK UNIFIED IDEOGRAPH + {0xE3BA, 0x84AA}, //9981 #CJK UNIFIED IDEOGRAPH + {0xE3BB, 0x849A}, //9982 #CJK UNIFIED IDEOGRAPH + {0xE3BC, 0x84B1}, //9983 #CJK UNIFIED IDEOGRAPH + {0xE3BD, 0x84D0}, //9984 #CJK UNIFIED IDEOGRAPH + {0xE3BE, 0x849D}, //9985 #CJK UNIFIED IDEOGRAPH + {0xE3BF, 0x84A7}, //9986 #CJK UNIFIED IDEOGRAPH + {0xE3C0, 0x84BB}, //9987 #CJK UNIFIED IDEOGRAPH + {0xE3C1, 0x84A2}, //9988 #CJK UNIFIED IDEOGRAPH + {0xE3C2, 0x8494}, //9989 #CJK UNIFIED IDEOGRAPH + {0xE3C3, 0x84C7}, //9990 #CJK UNIFIED IDEOGRAPH + {0xE3C4, 0x84CC}, //9991 #CJK UNIFIED IDEOGRAPH + {0xE3C5, 0x849B}, //9992 #CJK UNIFIED IDEOGRAPH + {0xE3C6, 0x84A9}, //9993 #CJK UNIFIED IDEOGRAPH + {0xE3C7, 0x84AF}, //9994 #CJK UNIFIED IDEOGRAPH + {0xE3C8, 0x84A8}, //9995 #CJK UNIFIED IDEOGRAPH + {0xE3C9, 0x84D6}, //9996 #CJK UNIFIED IDEOGRAPH + {0xE3CA, 0x8498}, //9997 #CJK UNIFIED IDEOGRAPH + {0xE3CB, 0x84B6}, //9998 #CJK UNIFIED IDEOGRAPH + {0xE3CC, 0x84CF}, //9999 #CJK UNIFIED IDEOGRAPH + {0xE3CD, 0x84A0}, //10000 #CJK UNIFIED IDEOGRAPH + {0xE3CE, 0x84D7}, //10001 #CJK UNIFIED IDEOGRAPH + {0xE3CF, 0x84D4}, //10002 #CJK UNIFIED IDEOGRAPH + {0xE3D0, 0x84D2}, //10003 #CJK UNIFIED IDEOGRAPH + {0xE3D1, 0x84DB}, //10004 #CJK UNIFIED IDEOGRAPH + {0xE3D2, 0x84B0}, //10005 #CJK UNIFIED IDEOGRAPH + {0xE3D3, 0x8491}, //10006 #CJK UNIFIED IDEOGRAPH + {0xE3D4, 0x8661}, //10007 #CJK UNIFIED IDEOGRAPH + {0xE3D5, 0x8733}, //10008 #CJK UNIFIED IDEOGRAPH + {0xE3D6, 0x8723}, //10009 #CJK UNIFIED IDEOGRAPH + {0xE3D7, 0x8728}, //10010 #CJK UNIFIED IDEOGRAPH + {0xE3D8, 0x876B}, //10011 #CJK UNIFIED IDEOGRAPH + {0xE3D9, 0x8740}, //10012 #CJK UNIFIED IDEOGRAPH + {0xE3DA, 0x872E}, //10013 #CJK UNIFIED IDEOGRAPH + {0xE3DB, 0x871E}, //10014 #CJK UNIFIED IDEOGRAPH + {0xE3DC, 0x8721}, //10015 #CJK UNIFIED IDEOGRAPH + {0xE3DD, 0x8719}, //10016 #CJK UNIFIED IDEOGRAPH + {0xE3DE, 0x871B}, //10017 #CJK UNIFIED IDEOGRAPH + {0xE3DF, 0x8743}, //10018 #CJK UNIFIED IDEOGRAPH + {0xE3E0, 0x872C}, //10019 #CJK UNIFIED IDEOGRAPH + {0xE3E1, 0x8741}, //10020 #CJK UNIFIED IDEOGRAPH + {0xE3E2, 0x873E}, //10021 #CJK UNIFIED IDEOGRAPH + {0xE3E3, 0x8746}, //10022 #CJK UNIFIED IDEOGRAPH + {0xE3E4, 0x8720}, //10023 #CJK UNIFIED IDEOGRAPH + {0xE3E5, 0x8732}, //10024 #CJK UNIFIED IDEOGRAPH + {0xE3E6, 0x872A}, //10025 #CJK UNIFIED IDEOGRAPH + {0xE3E7, 0x872D}, //10026 #CJK UNIFIED IDEOGRAPH + {0xE3E8, 0x873C}, //10027 #CJK UNIFIED IDEOGRAPH + {0xE3E9, 0x8712}, //10028 #CJK UNIFIED IDEOGRAPH + {0xE3EA, 0x873A}, //10029 #CJK UNIFIED IDEOGRAPH + {0xE3EB, 0x8731}, //10030 #CJK UNIFIED IDEOGRAPH + {0xE3EC, 0x8735}, //10031 #CJK UNIFIED IDEOGRAPH + {0xE3ED, 0x8742}, //10032 #CJK UNIFIED IDEOGRAPH + {0xE3EE, 0x8726}, //10033 #CJK UNIFIED IDEOGRAPH + {0xE3EF, 0x8727}, //10034 #CJK UNIFIED IDEOGRAPH + {0xE3F0, 0x8738}, //10035 #CJK UNIFIED IDEOGRAPH + {0xE3F1, 0x8724}, //10036 #CJK UNIFIED IDEOGRAPH + {0xE3F2, 0x871A}, //10037 #CJK UNIFIED IDEOGRAPH + {0xE3F3, 0x8730}, //10038 #CJK UNIFIED IDEOGRAPH + {0xE3F4, 0x8711}, //10039 #CJK UNIFIED IDEOGRAPH + {0xE3F5, 0x88F7}, //10040 #CJK UNIFIED IDEOGRAPH + {0xE3F6, 0x88E7}, //10041 #CJK UNIFIED IDEOGRAPH + {0xE3F7, 0x88F1}, //10042 #CJK UNIFIED IDEOGRAPH + {0xE3F8, 0x88F2}, //10043 #CJK UNIFIED IDEOGRAPH + {0xE3F9, 0x88FA}, //10044 #CJK UNIFIED IDEOGRAPH + {0xE3FA, 0x88FE}, //10045 #CJK UNIFIED IDEOGRAPH + {0xE3FB, 0x88EE}, //10046 #CJK UNIFIED IDEOGRAPH + {0xE3FC, 0x88FC}, //10047 #CJK UNIFIED IDEOGRAPH + {0xE3FD, 0x88F6}, //10048 #CJK UNIFIED IDEOGRAPH + {0xE3FE, 0x88FB}, //10049 #CJK UNIFIED IDEOGRAPH + {0xE440, 0x88F0}, //10050 #CJK UNIFIED IDEOGRAPH + {0xE441, 0x88EC}, //10051 #CJK UNIFIED IDEOGRAPH + {0xE442, 0x88EB}, //10052 #CJK UNIFIED IDEOGRAPH + {0xE443, 0x899D}, //10053 #CJK UNIFIED IDEOGRAPH + {0xE444, 0x89A1}, //10054 #CJK UNIFIED IDEOGRAPH + {0xE445, 0x899F}, //10055 #CJK UNIFIED IDEOGRAPH + {0xE446, 0x899E}, //10056 #CJK UNIFIED IDEOGRAPH + {0xE447, 0x89E9}, //10057 #CJK UNIFIED IDEOGRAPH + {0xE448, 0x89EB}, //10058 #CJK UNIFIED IDEOGRAPH + {0xE449, 0x89E8}, //10059 #CJK UNIFIED IDEOGRAPH + {0xE44A, 0x8AAB}, //10060 #CJK UNIFIED IDEOGRAPH + {0xE44B, 0x8A99}, //10061 #CJK UNIFIED IDEOGRAPH + {0xE44C, 0x8A8B}, //10062 #CJK UNIFIED IDEOGRAPH + {0xE44D, 0x8A92}, //10063 #CJK UNIFIED IDEOGRAPH + {0xE44E, 0x8A8F}, //10064 #CJK UNIFIED IDEOGRAPH + {0xE44F, 0x8A96}, //10065 #CJK UNIFIED IDEOGRAPH + {0xE450, 0x8C3D}, //10066 #CJK UNIFIED IDEOGRAPH + {0xE451, 0x8C68}, //10067 #CJK UNIFIED IDEOGRAPH + {0xE452, 0x8C69}, //10068 #CJK UNIFIED IDEOGRAPH + {0xE453, 0x8CD5}, //10069 #CJK UNIFIED IDEOGRAPH + {0xE454, 0x8CCF}, //10070 #CJK UNIFIED IDEOGRAPH + {0xE455, 0x8CD7}, //10071 #CJK UNIFIED IDEOGRAPH + {0xE456, 0x8D96}, //10072 #CJK UNIFIED IDEOGRAPH + {0xE457, 0x8E09}, //10073 #CJK UNIFIED IDEOGRAPH + {0xE458, 0x8E02}, //10074 #CJK UNIFIED IDEOGRAPH + {0xE459, 0x8DFF}, //10075 #CJK UNIFIED IDEOGRAPH + {0xE45A, 0x8E0D}, //10076 #CJK UNIFIED IDEOGRAPH + {0xE45B, 0x8DFD}, //10077 #CJK UNIFIED IDEOGRAPH + {0xE45C, 0x8E0A}, //10078 #CJK UNIFIED IDEOGRAPH + {0xE45D, 0x8E03}, //10079 #CJK UNIFIED IDEOGRAPH + {0xE45E, 0x8E07}, //10080 #CJK UNIFIED IDEOGRAPH + {0xE45F, 0x8E06}, //10081 #CJK UNIFIED IDEOGRAPH + {0xE460, 0x8E05}, //10082 #CJK UNIFIED IDEOGRAPH + {0xE461, 0x8DFE}, //10083 #CJK UNIFIED IDEOGRAPH + {0xE462, 0x8E00}, //10084 #CJK UNIFIED IDEOGRAPH + {0xE463, 0x8E04}, //10085 #CJK UNIFIED IDEOGRAPH + {0xE464, 0x8F10}, //10086 #CJK UNIFIED IDEOGRAPH + {0xE465, 0x8F11}, //10087 #CJK UNIFIED IDEOGRAPH + {0xE466, 0x8F0E}, //10088 #CJK UNIFIED IDEOGRAPH + {0xE467, 0x8F0D}, //10089 #CJK UNIFIED IDEOGRAPH + {0xE468, 0x9123}, //10090 #CJK UNIFIED IDEOGRAPH + {0xE469, 0x911C}, //10091 #CJK UNIFIED IDEOGRAPH + {0xE46A, 0x9120}, //10092 #CJK UNIFIED IDEOGRAPH + {0xE46B, 0x9122}, //10093 #CJK UNIFIED IDEOGRAPH + {0xE46C, 0x911F}, //10094 #CJK UNIFIED IDEOGRAPH + {0xE46D, 0x911D}, //10095 #CJK UNIFIED IDEOGRAPH + {0xE46E, 0x911A}, //10096 #CJK UNIFIED IDEOGRAPH + {0xE46F, 0x9124}, //10097 #CJK UNIFIED IDEOGRAPH + {0xE470, 0x9121}, //10098 #CJK UNIFIED IDEOGRAPH + {0xE471, 0x911B}, //10099 #CJK UNIFIED IDEOGRAPH + {0xE472, 0x917A}, //10100 #CJK UNIFIED IDEOGRAPH + {0xE473, 0x9172}, //10101 #CJK UNIFIED IDEOGRAPH + {0xE474, 0x9179}, //10102 #CJK UNIFIED IDEOGRAPH + {0xE475, 0x9173}, //10103 #CJK UNIFIED IDEOGRAPH + {0xE476, 0x92A5}, //10104 #CJK UNIFIED IDEOGRAPH + {0xE477, 0x92A4}, //10105 #CJK UNIFIED IDEOGRAPH + {0xE478, 0x9276}, //10106 #CJK UNIFIED IDEOGRAPH + {0xE479, 0x929B}, //10107 #CJK UNIFIED IDEOGRAPH + {0xE47A, 0x927A}, //10108 #CJK UNIFIED IDEOGRAPH + {0xE47B, 0x92A0}, //10109 #CJK UNIFIED IDEOGRAPH + {0xE47C, 0x9294}, //10110 #CJK UNIFIED IDEOGRAPH + {0xE47D, 0x92AA}, //10111 #CJK UNIFIED IDEOGRAPH + {0xE47E, 0x928D}, //10112 #CJK UNIFIED IDEOGRAPH + {0xE4A1, 0x92A6}, //10113 #CJK UNIFIED IDEOGRAPH + {0xE4A2, 0x929A}, //10114 #CJK UNIFIED IDEOGRAPH + {0xE4A3, 0x92AB}, //10115 #CJK UNIFIED IDEOGRAPH + {0xE4A4, 0x9279}, //10116 #CJK UNIFIED IDEOGRAPH + {0xE4A5, 0x9297}, //10117 #CJK UNIFIED IDEOGRAPH + {0xE4A6, 0x927F}, //10118 #CJK UNIFIED IDEOGRAPH + {0xE4A7, 0x92A3}, //10119 #CJK UNIFIED IDEOGRAPH + {0xE4A8, 0x92EE}, //10120 #CJK UNIFIED IDEOGRAPH + {0xE4A9, 0x928E}, //10121 #CJK UNIFIED IDEOGRAPH + {0xE4AA, 0x9282}, //10122 #CJK UNIFIED IDEOGRAPH + {0xE4AB, 0x9295}, //10123 #CJK UNIFIED IDEOGRAPH + {0xE4AC, 0x92A2}, //10124 #CJK UNIFIED IDEOGRAPH + {0xE4AD, 0x927D}, //10125 #CJK UNIFIED IDEOGRAPH + {0xE4AE, 0x9288}, //10126 #CJK UNIFIED IDEOGRAPH + {0xE4AF, 0x92A1}, //10127 #CJK UNIFIED IDEOGRAPH + {0xE4B0, 0x928A}, //10128 #CJK UNIFIED IDEOGRAPH + {0xE4B1, 0x9286}, //10129 #CJK UNIFIED IDEOGRAPH + {0xE4B2, 0x928C}, //10130 #CJK UNIFIED IDEOGRAPH + {0xE4B3, 0x9299}, //10131 #CJK UNIFIED IDEOGRAPH + {0xE4B4, 0x92A7}, //10132 #CJK UNIFIED IDEOGRAPH + {0xE4B5, 0x927E}, //10133 #CJK UNIFIED IDEOGRAPH + {0xE4B6, 0x9287}, //10134 #CJK UNIFIED IDEOGRAPH + {0xE4B7, 0x92A9}, //10135 #CJK UNIFIED IDEOGRAPH + {0xE4B8, 0x929D}, //10136 #CJK UNIFIED IDEOGRAPH + {0xE4B9, 0x928B}, //10137 #CJK UNIFIED IDEOGRAPH + {0xE4BA, 0x922D}, //10138 #CJK UNIFIED IDEOGRAPH + {0xE4BB, 0x969E}, //10139 #CJK UNIFIED IDEOGRAPH + {0xE4BC, 0x96A1}, //10140 #CJK UNIFIED IDEOGRAPH + {0xE4BD, 0x96FF}, //10141 #CJK UNIFIED IDEOGRAPH + {0xE4BE, 0x9758}, //10142 #CJK UNIFIED IDEOGRAPH + {0xE4BF, 0x977D}, //10143 #CJK UNIFIED IDEOGRAPH + {0xE4C0, 0x977A}, //10144 #CJK UNIFIED IDEOGRAPH + {0xE4C1, 0x977E}, //10145 #CJK UNIFIED IDEOGRAPH + {0xE4C2, 0x9783}, //10146 #CJK UNIFIED IDEOGRAPH + {0xE4C3, 0x9780}, //10147 #CJK UNIFIED IDEOGRAPH + {0xE4C4, 0x9782}, //10148 #CJK UNIFIED IDEOGRAPH + {0xE4C5, 0x977B}, //10149 #CJK UNIFIED IDEOGRAPH + {0xE4C6, 0x9784}, //10150 #CJK UNIFIED IDEOGRAPH + {0xE4C7, 0x9781}, //10151 #CJK UNIFIED IDEOGRAPH + {0xE4C8, 0x977F}, //10152 #CJK UNIFIED IDEOGRAPH + {0xE4C9, 0x97CE}, //10153 #CJK UNIFIED IDEOGRAPH + {0xE4CA, 0x97CD}, //10154 #CJK UNIFIED IDEOGRAPH + {0xE4CB, 0x9816}, //10155 #CJK UNIFIED IDEOGRAPH + {0xE4CC, 0x98AD}, //10156 #CJK UNIFIED IDEOGRAPH + {0xE4CD, 0x98AE}, //10157 #CJK UNIFIED IDEOGRAPH + {0xE4CE, 0x9902}, //10158 #CJK UNIFIED IDEOGRAPH + {0xE4CF, 0x9900}, //10159 #CJK UNIFIED IDEOGRAPH + {0xE4D0, 0x9907}, //10160 #CJK UNIFIED IDEOGRAPH + {0xE4D1, 0x999D}, //10161 #CJK UNIFIED IDEOGRAPH + {0xE4D2, 0x999C}, //10162 #CJK UNIFIED IDEOGRAPH + {0xE4D3, 0x99C3}, //10163 #CJK UNIFIED IDEOGRAPH + {0xE4D4, 0x99B9}, //10164 #CJK UNIFIED IDEOGRAPH + {0xE4D5, 0x99BB}, //10165 #CJK UNIFIED IDEOGRAPH + {0xE4D6, 0x99BA}, //10166 #CJK UNIFIED IDEOGRAPH + {0xE4D7, 0x99C2}, //10167 #CJK UNIFIED IDEOGRAPH + {0xE4D8, 0x99BD}, //10168 #CJK UNIFIED IDEOGRAPH + {0xE4D9, 0x99C7}, //10169 #CJK UNIFIED IDEOGRAPH + {0xE4DA, 0x9AB1}, //10170 #CJK UNIFIED IDEOGRAPH + {0xE4DB, 0x9AE3}, //10171 #CJK UNIFIED IDEOGRAPH + {0xE4DC, 0x9AE7}, //10172 #CJK UNIFIED IDEOGRAPH + {0xE4DD, 0x9B3E}, //10173 #CJK UNIFIED IDEOGRAPH + {0xE4DE, 0x9B3F}, //10174 #CJK UNIFIED IDEOGRAPH + {0xE4DF, 0x9B60}, //10175 #CJK UNIFIED IDEOGRAPH + {0xE4E0, 0x9B61}, //10176 #CJK UNIFIED IDEOGRAPH + {0xE4E1, 0x9B5F}, //10177 #CJK UNIFIED IDEOGRAPH + {0xE4E2, 0x9CF1}, //10178 #CJK UNIFIED IDEOGRAPH + {0xE4E3, 0x9CF2}, //10179 #CJK UNIFIED IDEOGRAPH + {0xE4E4, 0x9CF5}, //10180 #CJK UNIFIED IDEOGRAPH + {0xE4E5, 0x9EA7}, //10181 #CJK UNIFIED IDEOGRAPH + {0xE4E6, 0x50FF}, //10182 #CJK UNIFIED IDEOGRAPH + {0xE4E7, 0x5103}, //10183 #CJK UNIFIED IDEOGRAPH + {0xE4E8, 0x5130}, //10184 #CJK UNIFIED IDEOGRAPH + {0xE4E9, 0x50F8}, //10185 #CJK UNIFIED IDEOGRAPH + {0xE4EA, 0x5106}, //10186 #CJK UNIFIED IDEOGRAPH + {0xE4EB, 0x5107}, //10187 #CJK UNIFIED IDEOGRAPH + {0xE4EC, 0x50F6}, //10188 #CJK UNIFIED IDEOGRAPH + {0xE4ED, 0x50FE}, //10189 #CJK UNIFIED IDEOGRAPH + {0xE4EE, 0x510B}, //10190 #CJK UNIFIED IDEOGRAPH + {0xE4EF, 0x510C}, //10191 #CJK UNIFIED IDEOGRAPH + {0xE4F0, 0x50FD}, //10192 #CJK UNIFIED IDEOGRAPH + {0xE4F1, 0x510A}, //10193 #CJK UNIFIED IDEOGRAPH + {0xE4F2, 0x528B}, //10194 #CJK UNIFIED IDEOGRAPH + {0xE4F3, 0x528C}, //10195 #CJK UNIFIED IDEOGRAPH + {0xE4F4, 0x52F1}, //10196 #CJK UNIFIED IDEOGRAPH + {0xE4F5, 0x52EF}, //10197 #CJK UNIFIED IDEOGRAPH + {0xE4F6, 0x5648}, //10198 #CJK UNIFIED IDEOGRAPH + {0xE4F7, 0x5642}, //10199 #CJK UNIFIED IDEOGRAPH + {0xE4F8, 0x564C}, //10200 #CJK UNIFIED IDEOGRAPH + {0xE4F9, 0x5635}, //10201 #CJK UNIFIED IDEOGRAPH + {0xE4FA, 0x5641}, //10202 #CJK UNIFIED IDEOGRAPH + {0xE4FB, 0x564A}, //10203 #CJK UNIFIED IDEOGRAPH + {0xE4FC, 0x5649}, //10204 #CJK UNIFIED IDEOGRAPH + {0xE4FD, 0x5646}, //10205 #CJK UNIFIED IDEOGRAPH + {0xE4FE, 0x5658}, //10206 #CJK UNIFIED IDEOGRAPH + {0xE540, 0x565A}, //10207 #CJK UNIFIED IDEOGRAPH + {0xE541, 0x5640}, //10208 #CJK UNIFIED IDEOGRAPH + {0xE542, 0x5633}, //10209 #CJK UNIFIED IDEOGRAPH + {0xE543, 0x563D}, //10210 #CJK UNIFIED IDEOGRAPH + {0xE544, 0x562C}, //10211 #CJK UNIFIED IDEOGRAPH + {0xE545, 0x563E}, //10212 #CJK UNIFIED IDEOGRAPH + {0xE546, 0x5638}, //10213 #CJK UNIFIED IDEOGRAPH + {0xE547, 0x562A}, //10214 #CJK UNIFIED IDEOGRAPH + {0xE548, 0x563A}, //10215 #CJK UNIFIED IDEOGRAPH + {0xE549, 0x571A}, //10216 #CJK UNIFIED IDEOGRAPH + {0xE54A, 0x58AB}, //10217 #CJK UNIFIED IDEOGRAPH + {0xE54B, 0x589D}, //10218 #CJK UNIFIED IDEOGRAPH + {0xE54C, 0x58B1}, //10219 #CJK UNIFIED IDEOGRAPH + {0xE54D, 0x58A0}, //10220 #CJK UNIFIED IDEOGRAPH + {0xE54E, 0x58A3}, //10221 #CJK UNIFIED IDEOGRAPH + {0xE54F, 0x58AF}, //10222 #CJK UNIFIED IDEOGRAPH + {0xE550, 0x58AC}, //10223 #CJK UNIFIED IDEOGRAPH + {0xE551, 0x58A5}, //10224 #CJK UNIFIED IDEOGRAPH + {0xE552, 0x58A1}, //10225 #CJK UNIFIED IDEOGRAPH + {0xE553, 0x58FF}, //10226 #CJK UNIFIED IDEOGRAPH + {0xE554, 0x5AFF}, //10227 #CJK UNIFIED IDEOGRAPH + {0xE555, 0x5AF4}, //10228 #CJK UNIFIED IDEOGRAPH + {0xE556, 0x5AFD}, //10229 #CJK UNIFIED IDEOGRAPH + {0xE557, 0x5AF7}, //10230 #CJK UNIFIED IDEOGRAPH + {0xE558, 0x5AF6}, //10231 #CJK UNIFIED IDEOGRAPH + {0xE559, 0x5B03}, //10232 #CJK UNIFIED IDEOGRAPH + {0xE55A, 0x5AF8}, //10233 #CJK UNIFIED IDEOGRAPH + {0xE55B, 0x5B02}, //10234 #CJK UNIFIED IDEOGRAPH + {0xE55C, 0x5AF9}, //10235 #CJK UNIFIED IDEOGRAPH + {0xE55D, 0x5B01}, //10236 #CJK UNIFIED IDEOGRAPH + {0xE55E, 0x5B07}, //10237 #CJK UNIFIED IDEOGRAPH + {0xE55F, 0x5B05}, //10238 #CJK UNIFIED IDEOGRAPH + {0xE560, 0x5B0F}, //10239 #CJK UNIFIED IDEOGRAPH + {0xE561, 0x5C67}, //10240 #CJK UNIFIED IDEOGRAPH + {0xE562, 0x5D99}, //10241 #CJK UNIFIED IDEOGRAPH + {0xE563, 0x5D97}, //10242 #CJK UNIFIED IDEOGRAPH + {0xE564, 0x5D9F}, //10243 #CJK UNIFIED IDEOGRAPH + {0xE565, 0x5D92}, //10244 #CJK UNIFIED IDEOGRAPH + {0xE566, 0x5DA2}, //10245 #CJK UNIFIED IDEOGRAPH + {0xE567, 0x5D93}, //10246 #CJK UNIFIED IDEOGRAPH + {0xE568, 0x5D95}, //10247 #CJK UNIFIED IDEOGRAPH + {0xE569, 0x5DA0}, //10248 #CJK UNIFIED IDEOGRAPH + {0xE56A, 0x5D9C}, //10249 #CJK UNIFIED IDEOGRAPH + {0xE56B, 0x5DA1}, //10250 #CJK UNIFIED IDEOGRAPH + {0xE56C, 0x5D9A}, //10251 #CJK UNIFIED IDEOGRAPH + {0xE56D, 0x5D9E}, //10252 #CJK UNIFIED IDEOGRAPH + {0xE56E, 0x5E69}, //10253 #CJK UNIFIED IDEOGRAPH + {0xE56F, 0x5E5D}, //10254 #CJK UNIFIED IDEOGRAPH + {0xE570, 0x5E60}, //10255 #CJK UNIFIED IDEOGRAPH + {0xE571, 0x5E5C}, //10256 #CJK UNIFIED IDEOGRAPH + {0xE572, 0x7DF3}, //10257 #CJK UNIFIED IDEOGRAPH + {0xE573, 0x5EDB}, //10258 #CJK UNIFIED IDEOGRAPH + {0xE574, 0x5EDE}, //10259 #CJK UNIFIED IDEOGRAPH + {0xE575, 0x5EE1}, //10260 #CJK UNIFIED IDEOGRAPH + {0xE576, 0x5F49}, //10261 #CJK UNIFIED IDEOGRAPH + {0xE577, 0x5FB2}, //10262 #CJK UNIFIED IDEOGRAPH + {0xE578, 0x618B}, //10263 #CJK UNIFIED IDEOGRAPH + {0xE579, 0x6183}, //10264 #CJK UNIFIED IDEOGRAPH + {0xE57A, 0x6179}, //10265 #CJK UNIFIED IDEOGRAPH + {0xE57B, 0x61B1}, //10266 #CJK UNIFIED IDEOGRAPH + {0xE57C, 0x61B0}, //10267 #CJK UNIFIED IDEOGRAPH + {0xE57D, 0x61A2}, //10268 #CJK UNIFIED IDEOGRAPH + {0xE57E, 0x6189}, //10269 #CJK UNIFIED IDEOGRAPH + {0xE5A1, 0x619B}, //10270 #CJK UNIFIED IDEOGRAPH + {0xE5A2, 0x6193}, //10271 #CJK UNIFIED IDEOGRAPH + {0xE5A3, 0x61AF}, //10272 #CJK UNIFIED IDEOGRAPH + {0xE5A4, 0x61AD}, //10273 #CJK UNIFIED IDEOGRAPH + {0xE5A5, 0x619F}, //10274 #CJK UNIFIED IDEOGRAPH + {0xE5A6, 0x6192}, //10275 #CJK UNIFIED IDEOGRAPH + {0xE5A7, 0x61AA}, //10276 #CJK UNIFIED IDEOGRAPH + {0xE5A8, 0x61A1}, //10277 #CJK UNIFIED IDEOGRAPH + {0xE5A9, 0x618D}, //10278 #CJK UNIFIED IDEOGRAPH + {0xE5AA, 0x6166}, //10279 #CJK UNIFIED IDEOGRAPH + {0xE5AB, 0x61B3}, //10280 #CJK UNIFIED IDEOGRAPH + {0xE5AC, 0x622D}, //10281 #CJK UNIFIED IDEOGRAPH + {0xE5AD, 0x646E}, //10282 #CJK UNIFIED IDEOGRAPH + {0xE5AE, 0x6470}, //10283 #CJK UNIFIED IDEOGRAPH + {0xE5AF, 0x6496}, //10284 #CJK UNIFIED IDEOGRAPH + {0xE5B0, 0x64A0}, //10285 #CJK UNIFIED IDEOGRAPH + {0xE5B1, 0x6485}, //10286 #CJK UNIFIED IDEOGRAPH + {0xE5B2, 0x6497}, //10287 #CJK UNIFIED IDEOGRAPH + {0xE5B3, 0x649C}, //10288 #CJK UNIFIED IDEOGRAPH + {0xE5B4, 0x648F}, //10289 #CJK UNIFIED IDEOGRAPH + {0xE5B5, 0x648B}, //10290 #CJK UNIFIED IDEOGRAPH + {0xE5B6, 0x648A}, //10291 #CJK UNIFIED IDEOGRAPH + {0xE5B7, 0x648C}, //10292 #CJK UNIFIED IDEOGRAPH + {0xE5B8, 0x64A3}, //10293 #CJK UNIFIED IDEOGRAPH + {0xE5B9, 0x649F}, //10294 #CJK UNIFIED IDEOGRAPH + {0xE5BA, 0x6468}, //10295 #CJK UNIFIED IDEOGRAPH + {0xE5BB, 0x64B1}, //10296 #CJK UNIFIED IDEOGRAPH + {0xE5BC, 0x6498}, //10297 #CJK UNIFIED IDEOGRAPH + {0xE5BD, 0x6576}, //10298 #CJK UNIFIED IDEOGRAPH + {0xE5BE, 0x657A}, //10299 #CJK UNIFIED IDEOGRAPH + {0xE5BF, 0x6579}, //10300 #CJK UNIFIED IDEOGRAPH + {0xE5C0, 0x657B}, //10301 #CJK UNIFIED IDEOGRAPH + {0xE5C1, 0x65B2}, //10302 #CJK UNIFIED IDEOGRAPH + {0xE5C2, 0x65B3}, //10303 #CJK UNIFIED IDEOGRAPH + {0xE5C3, 0x66B5}, //10304 #CJK UNIFIED IDEOGRAPH + {0xE5C4, 0x66B0}, //10305 #CJK UNIFIED IDEOGRAPH + {0xE5C5, 0x66A9}, //10306 #CJK UNIFIED IDEOGRAPH + {0xE5C6, 0x66B2}, //10307 #CJK UNIFIED IDEOGRAPH + {0xE5C7, 0x66B7}, //10308 #CJK UNIFIED IDEOGRAPH + {0xE5C8, 0x66AA}, //10309 #CJK UNIFIED IDEOGRAPH + {0xE5C9, 0x66AF}, //10310 #CJK UNIFIED IDEOGRAPH + {0xE5CA, 0x6A00}, //10311 #CJK UNIFIED IDEOGRAPH + {0xE5CB, 0x6A06}, //10312 #CJK UNIFIED IDEOGRAPH + {0xE5CC, 0x6A17}, //10313 #CJK UNIFIED IDEOGRAPH + {0xE5CD, 0x69E5}, //10314 #CJK UNIFIED IDEOGRAPH + {0xE5CE, 0x69F8}, //10315 #CJK UNIFIED IDEOGRAPH + {0xE5CF, 0x6A15}, //10316 #CJK UNIFIED IDEOGRAPH + {0xE5D0, 0x69F1}, //10317 #CJK UNIFIED IDEOGRAPH + {0xE5D1, 0x69E4}, //10318 #CJK UNIFIED IDEOGRAPH + {0xE5D2, 0x6A20}, //10319 #CJK UNIFIED IDEOGRAPH + {0xE5D3, 0x69FF}, //10320 #CJK UNIFIED IDEOGRAPH + {0xE5D4, 0x69EC}, //10321 #CJK UNIFIED IDEOGRAPH + {0xE5D5, 0x69E2}, //10322 #CJK UNIFIED IDEOGRAPH + {0xE5D6, 0x6A1B}, //10323 #CJK UNIFIED IDEOGRAPH + {0xE5D7, 0x6A1D}, //10324 #CJK UNIFIED IDEOGRAPH + {0xE5D8, 0x69FE}, //10325 #CJK UNIFIED IDEOGRAPH + {0xE5D9, 0x6A27}, //10326 #CJK UNIFIED IDEOGRAPH + {0xE5DA, 0x69F2}, //10327 #CJK UNIFIED IDEOGRAPH + {0xE5DB, 0x69EE}, //10328 #CJK UNIFIED IDEOGRAPH + {0xE5DC, 0x6A14}, //10329 #CJK UNIFIED IDEOGRAPH + {0xE5DD, 0x69F7}, //10330 #CJK UNIFIED IDEOGRAPH + {0xE5DE, 0x69E7}, //10331 #CJK UNIFIED IDEOGRAPH + {0xE5DF, 0x6A40}, //10332 #CJK UNIFIED IDEOGRAPH + {0xE5E0, 0x6A08}, //10333 #CJK UNIFIED IDEOGRAPH + {0xE5E1, 0x69E6}, //10334 #CJK UNIFIED IDEOGRAPH + {0xE5E2, 0x69FB}, //10335 #CJK UNIFIED IDEOGRAPH + {0xE5E3, 0x6A0D}, //10336 #CJK UNIFIED IDEOGRAPH + {0xE5E4, 0x69FC}, //10337 #CJK UNIFIED IDEOGRAPH + {0xE5E5, 0x69EB}, //10338 #CJK UNIFIED IDEOGRAPH + {0xE5E6, 0x6A09}, //10339 #CJK UNIFIED IDEOGRAPH + {0xE5E7, 0x6A04}, //10340 #CJK UNIFIED IDEOGRAPH + {0xE5E8, 0x6A18}, //10341 #CJK UNIFIED IDEOGRAPH + {0xE5E9, 0x6A25}, //10342 #CJK UNIFIED IDEOGRAPH + {0xE5EA, 0x6A0F}, //10343 #CJK UNIFIED IDEOGRAPH + {0xE5EB, 0x69F6}, //10344 #CJK UNIFIED IDEOGRAPH + {0xE5EC, 0x6A26}, //10345 #CJK UNIFIED IDEOGRAPH + {0xE5ED, 0x6A07}, //10346 #CJK UNIFIED IDEOGRAPH + {0xE5EE, 0x69F4}, //10347 #CJK UNIFIED IDEOGRAPH + {0xE5EF, 0x6A16}, //10348 #CJK UNIFIED IDEOGRAPH + {0xE5F0, 0x6B51}, //10349 #CJK UNIFIED IDEOGRAPH + {0xE5F1, 0x6BA5}, //10350 #CJK UNIFIED IDEOGRAPH + {0xE5F2, 0x6BA3}, //10351 #CJK UNIFIED IDEOGRAPH + {0xE5F3, 0x6BA2}, //10352 #CJK UNIFIED IDEOGRAPH + {0xE5F4, 0x6BA6}, //10353 #CJK UNIFIED IDEOGRAPH + {0xE5F5, 0x6C01}, //10354 #CJK UNIFIED IDEOGRAPH + {0xE5F6, 0x6C00}, //10355 #CJK UNIFIED IDEOGRAPH + {0xE5F7, 0x6BFF}, //10356 #CJK UNIFIED IDEOGRAPH + {0xE5F8, 0x6C02}, //10357 #CJK UNIFIED IDEOGRAPH + {0xE5F9, 0x6F41}, //10358 #CJK UNIFIED IDEOGRAPH + {0xE5FA, 0x6F26}, //10359 #CJK UNIFIED IDEOGRAPH + {0xE5FB, 0x6F7E}, //10360 #CJK UNIFIED IDEOGRAPH + {0xE5FC, 0x6F87}, //10361 #CJK UNIFIED IDEOGRAPH + {0xE5FD, 0x6FC6}, //10362 #CJK UNIFIED IDEOGRAPH + {0xE5FE, 0x6F92}, //10363 #CJK UNIFIED IDEOGRAPH + {0xE640, 0x6F8D}, //10364 #CJK UNIFIED IDEOGRAPH + {0xE641, 0x6F89}, //10365 #CJK UNIFIED IDEOGRAPH + {0xE642, 0x6F8C}, //10366 #CJK UNIFIED IDEOGRAPH + {0xE643, 0x6F62}, //10367 #CJK UNIFIED IDEOGRAPH + {0xE644, 0x6F4F}, //10368 #CJK UNIFIED IDEOGRAPH + {0xE645, 0x6F85}, //10369 #CJK UNIFIED IDEOGRAPH + {0xE646, 0x6F5A}, //10370 #CJK UNIFIED IDEOGRAPH + {0xE647, 0x6F96}, //10371 #CJK UNIFIED IDEOGRAPH + {0xE648, 0x6F76}, //10372 #CJK UNIFIED IDEOGRAPH + {0xE649, 0x6F6C}, //10373 #CJK UNIFIED IDEOGRAPH + {0xE64A, 0x6F82}, //10374 #CJK UNIFIED IDEOGRAPH + {0xE64B, 0x6F55}, //10375 #CJK UNIFIED IDEOGRAPH + {0xE64C, 0x6F72}, //10376 #CJK UNIFIED IDEOGRAPH + {0xE64D, 0x6F52}, //10377 #CJK UNIFIED IDEOGRAPH + {0xE64E, 0x6F50}, //10378 #CJK UNIFIED IDEOGRAPH + {0xE64F, 0x6F57}, //10379 #CJK UNIFIED IDEOGRAPH + {0xE650, 0x6F94}, //10380 #CJK UNIFIED IDEOGRAPH + {0xE651, 0x6F93}, //10381 #CJK UNIFIED IDEOGRAPH + {0xE652, 0x6F5D}, //10382 #CJK UNIFIED IDEOGRAPH + {0xE653, 0x6F00}, //10383 #CJK UNIFIED IDEOGRAPH + {0xE654, 0x6F61}, //10384 #CJK UNIFIED IDEOGRAPH + {0xE655, 0x6F6B}, //10385 #CJK UNIFIED IDEOGRAPH + {0xE656, 0x6F7D}, //10386 #CJK UNIFIED IDEOGRAPH + {0xE657, 0x6F67}, //10387 #CJK UNIFIED IDEOGRAPH + {0xE658, 0x6F90}, //10388 #CJK UNIFIED IDEOGRAPH + {0xE659, 0x6F53}, //10389 #CJK UNIFIED IDEOGRAPH + {0xE65A, 0x6F8B}, //10390 #CJK UNIFIED IDEOGRAPH + {0xE65B, 0x6F69}, //10391 #CJK UNIFIED IDEOGRAPH + {0xE65C, 0x6F7F}, //10392 #CJK UNIFIED IDEOGRAPH + {0xE65D, 0x6F95}, //10393 #CJK UNIFIED IDEOGRAPH + {0xE65E, 0x6F63}, //10394 #CJK UNIFIED IDEOGRAPH + {0xE65F, 0x6F77}, //10395 #CJK UNIFIED IDEOGRAPH + {0xE660, 0x6F6A}, //10396 #CJK UNIFIED IDEOGRAPH + {0xE661, 0x6F7B}, //10397 #CJK UNIFIED IDEOGRAPH + {0xE662, 0x71B2}, //10398 #CJK UNIFIED IDEOGRAPH + {0xE663, 0x71AF}, //10399 #CJK UNIFIED IDEOGRAPH + {0xE664, 0x719B}, //10400 #CJK UNIFIED IDEOGRAPH + {0xE665, 0x71B0}, //10401 #CJK UNIFIED IDEOGRAPH + {0xE666, 0x71A0}, //10402 #CJK UNIFIED IDEOGRAPH + {0xE667, 0x719A}, //10403 #CJK UNIFIED IDEOGRAPH + {0xE668, 0x71A9}, //10404 #CJK UNIFIED IDEOGRAPH + {0xE669, 0x71B5}, //10405 #CJK UNIFIED IDEOGRAPH + {0xE66A, 0x719D}, //10406 #CJK UNIFIED IDEOGRAPH + {0xE66B, 0x71A5}, //10407 #CJK UNIFIED IDEOGRAPH + {0xE66C, 0x719E}, //10408 #CJK UNIFIED IDEOGRAPH + {0xE66D, 0x71A4}, //10409 #CJK UNIFIED IDEOGRAPH + {0xE66E, 0x71A1}, //10410 #CJK UNIFIED IDEOGRAPH + {0xE66F, 0x71AA}, //10411 #CJK UNIFIED IDEOGRAPH + {0xE670, 0x719C}, //10412 #CJK UNIFIED IDEOGRAPH + {0xE671, 0x71A7}, //10413 #CJK UNIFIED IDEOGRAPH + {0xE672, 0x71B3}, //10414 #CJK UNIFIED IDEOGRAPH + {0xE673, 0x7298}, //10415 #CJK UNIFIED IDEOGRAPH + {0xE674, 0x729A}, //10416 #CJK UNIFIED IDEOGRAPH + {0xE675, 0x7358}, //10417 #CJK UNIFIED IDEOGRAPH + {0xE676, 0x7352}, //10418 #CJK UNIFIED IDEOGRAPH + {0xE677, 0x735E}, //10419 #CJK UNIFIED IDEOGRAPH + {0xE678, 0x735F}, //10420 #CJK UNIFIED IDEOGRAPH + {0xE679, 0x7360}, //10421 #CJK UNIFIED IDEOGRAPH + {0xE67A, 0x735D}, //10422 #CJK UNIFIED IDEOGRAPH + {0xE67B, 0x735B}, //10423 #CJK UNIFIED IDEOGRAPH + {0xE67C, 0x7361}, //10424 #CJK UNIFIED IDEOGRAPH + {0xE67D, 0x735A}, //10425 #CJK UNIFIED IDEOGRAPH + {0xE67E, 0x7359}, //10426 #CJK UNIFIED IDEOGRAPH + {0xE6A1, 0x7362}, //10427 #CJK UNIFIED IDEOGRAPH + {0xE6A2, 0x7487}, //10428 #CJK UNIFIED IDEOGRAPH + {0xE6A3, 0x7489}, //10429 #CJK UNIFIED IDEOGRAPH + {0xE6A4, 0x748A}, //10430 #CJK UNIFIED IDEOGRAPH + {0xE6A5, 0x7486}, //10431 #CJK UNIFIED IDEOGRAPH + {0xE6A6, 0x7481}, //10432 #CJK UNIFIED IDEOGRAPH + {0xE6A7, 0x747D}, //10433 #CJK UNIFIED IDEOGRAPH + {0xE6A8, 0x7485}, //10434 #CJK UNIFIED IDEOGRAPH + {0xE6A9, 0x7488}, //10435 #CJK UNIFIED IDEOGRAPH + {0xE6AA, 0x747C}, //10436 #CJK UNIFIED IDEOGRAPH + {0xE6AB, 0x7479}, //10437 #CJK UNIFIED IDEOGRAPH + {0xE6AC, 0x7508}, //10438 #CJK UNIFIED IDEOGRAPH + {0xE6AD, 0x7507}, //10439 #CJK UNIFIED IDEOGRAPH + {0xE6AE, 0x757E}, //10440 #CJK UNIFIED IDEOGRAPH + {0xE6AF, 0x7625}, //10441 #CJK UNIFIED IDEOGRAPH + {0xE6B0, 0x761E}, //10442 #CJK UNIFIED IDEOGRAPH + {0xE6B1, 0x7619}, //10443 #CJK UNIFIED IDEOGRAPH + {0xE6B2, 0x761D}, //10444 #CJK UNIFIED IDEOGRAPH + {0xE6B3, 0x761C}, //10445 #CJK UNIFIED IDEOGRAPH + {0xE6B4, 0x7623}, //10446 #CJK UNIFIED IDEOGRAPH + {0xE6B5, 0x761A}, //10447 #CJK UNIFIED IDEOGRAPH + {0xE6B6, 0x7628}, //10448 #CJK UNIFIED IDEOGRAPH + {0xE6B7, 0x761B}, //10449 #CJK UNIFIED IDEOGRAPH + {0xE6B8, 0x769C}, //10450 #CJK UNIFIED IDEOGRAPH + {0xE6B9, 0x769D}, //10451 #CJK UNIFIED IDEOGRAPH + {0xE6BA, 0x769E}, //10452 #CJK UNIFIED IDEOGRAPH + {0xE6BB, 0x769B}, //10453 #CJK UNIFIED IDEOGRAPH + {0xE6BC, 0x778D}, //10454 #CJK UNIFIED IDEOGRAPH + {0xE6BD, 0x778F}, //10455 #CJK UNIFIED IDEOGRAPH + {0xE6BE, 0x7789}, //10456 #CJK UNIFIED IDEOGRAPH + {0xE6BF, 0x7788}, //10457 #CJK UNIFIED IDEOGRAPH + {0xE6C0, 0x78CD}, //10458 #CJK UNIFIED IDEOGRAPH + {0xE6C1, 0x78BB}, //10459 #CJK UNIFIED IDEOGRAPH + {0xE6C2, 0x78CF}, //10460 #CJK UNIFIED IDEOGRAPH + {0xE6C3, 0x78CC}, //10461 #CJK UNIFIED IDEOGRAPH + {0xE6C4, 0x78D1}, //10462 #CJK UNIFIED IDEOGRAPH + {0xE6C5, 0x78CE}, //10463 #CJK UNIFIED IDEOGRAPH + {0xE6C6, 0x78D4}, //10464 #CJK UNIFIED IDEOGRAPH + {0xE6C7, 0x78C8}, //10465 #CJK UNIFIED IDEOGRAPH + {0xE6C8, 0x78C3}, //10466 #CJK UNIFIED IDEOGRAPH + {0xE6C9, 0x78C4}, //10467 #CJK UNIFIED IDEOGRAPH + {0xE6CA, 0x78C9}, //10468 #CJK UNIFIED IDEOGRAPH + {0xE6CB, 0x799A}, //10469 #CJK UNIFIED IDEOGRAPH + {0xE6CC, 0x79A1}, //10470 #CJK UNIFIED IDEOGRAPH + {0xE6CD, 0x79A0}, //10471 #CJK UNIFIED IDEOGRAPH + {0xE6CE, 0x799C}, //10472 #CJK UNIFIED IDEOGRAPH + {0xE6CF, 0x79A2}, //10473 #CJK UNIFIED IDEOGRAPH + {0xE6D0, 0x799B}, //10474 #CJK UNIFIED IDEOGRAPH + {0xE6D1, 0x6B76}, //10475 #CJK UNIFIED IDEOGRAPH + {0xE6D2, 0x7A39}, //10476 #CJK UNIFIED IDEOGRAPH + {0xE6D3, 0x7AB2}, //10477 #CJK UNIFIED IDEOGRAPH + {0xE6D4, 0x7AB4}, //10478 #CJK UNIFIED IDEOGRAPH + {0xE6D5, 0x7AB3}, //10479 #CJK UNIFIED IDEOGRAPH + {0xE6D6, 0x7BB7}, //10480 #CJK UNIFIED IDEOGRAPH + {0xE6D7, 0x7BCB}, //10481 #CJK UNIFIED IDEOGRAPH + {0xE6D8, 0x7BBE}, //10482 #CJK UNIFIED IDEOGRAPH + {0xE6D9, 0x7BAC}, //10483 #CJK UNIFIED IDEOGRAPH + {0xE6DA, 0x7BCE}, //10484 #CJK UNIFIED IDEOGRAPH + {0xE6DB, 0x7BAF}, //10485 #CJK UNIFIED IDEOGRAPH + {0xE6DC, 0x7BB9}, //10486 #CJK UNIFIED IDEOGRAPH + {0xE6DD, 0x7BCA}, //10487 #CJK UNIFIED IDEOGRAPH + {0xE6DE, 0x7BB5}, //10488 #CJK UNIFIED IDEOGRAPH + {0xE6DF, 0x7CC5}, //10489 #CJK UNIFIED IDEOGRAPH + {0xE6E0, 0x7CC8}, //10490 #CJK UNIFIED IDEOGRAPH + {0xE6E1, 0x7CCC}, //10491 #CJK UNIFIED IDEOGRAPH + {0xE6E2, 0x7CCB}, //10492 #CJK UNIFIED IDEOGRAPH + {0xE6E3, 0x7DF7}, //10493 #CJK UNIFIED IDEOGRAPH + {0xE6E4, 0x7DDB}, //10494 #CJK UNIFIED IDEOGRAPH + {0xE6E5, 0x7DEA}, //10495 #CJK UNIFIED IDEOGRAPH + {0xE6E6, 0x7DE7}, //10496 #CJK UNIFIED IDEOGRAPH + {0xE6E7, 0x7DD7}, //10497 #CJK UNIFIED IDEOGRAPH + {0xE6E8, 0x7DE1}, //10498 #CJK UNIFIED IDEOGRAPH + {0xE6E9, 0x7E03}, //10499 #CJK UNIFIED IDEOGRAPH + {0xE6EA, 0x7DFA}, //10500 #CJK UNIFIED IDEOGRAPH + {0xE6EB, 0x7DE6}, //10501 #CJK UNIFIED IDEOGRAPH + {0xE6EC, 0x7DF6}, //10502 #CJK UNIFIED IDEOGRAPH + {0xE6ED, 0x7DF1}, //10503 #CJK UNIFIED IDEOGRAPH + {0xE6EE, 0x7DF0}, //10504 #CJK UNIFIED IDEOGRAPH + {0xE6EF, 0x7DEE}, //10505 #CJK UNIFIED IDEOGRAPH + {0xE6F0, 0x7DDF}, //10506 #CJK UNIFIED IDEOGRAPH + {0xE6F1, 0x7F76}, //10507 #CJK UNIFIED IDEOGRAPH + {0xE6F2, 0x7FAC}, //10508 #CJK UNIFIED IDEOGRAPH + {0xE6F3, 0x7FB0}, //10509 #CJK UNIFIED IDEOGRAPH + {0xE6F4, 0x7FAD}, //10510 #CJK UNIFIED IDEOGRAPH + {0xE6F5, 0x7FED}, //10511 #CJK UNIFIED IDEOGRAPH + {0xE6F6, 0x7FEB}, //10512 #CJK UNIFIED IDEOGRAPH + {0xE6F7, 0x7FEA}, //10513 #CJK UNIFIED IDEOGRAPH + {0xE6F8, 0x7FEC}, //10514 #CJK UNIFIED IDEOGRAPH + {0xE6F9, 0x7FE6}, //10515 #CJK UNIFIED IDEOGRAPH + {0xE6FA, 0x7FE8}, //10516 #CJK UNIFIED IDEOGRAPH + {0xE6FB, 0x8064}, //10517 #CJK UNIFIED IDEOGRAPH + {0xE6FC, 0x8067}, //10518 #CJK UNIFIED IDEOGRAPH + {0xE6FD, 0x81A3}, //10519 #CJK UNIFIED IDEOGRAPH + {0xE6FE, 0x819F}, //10520 #CJK UNIFIED IDEOGRAPH + {0xE740, 0x819E}, //10521 #CJK UNIFIED IDEOGRAPH + {0xE741, 0x8195}, //10522 #CJK UNIFIED IDEOGRAPH + {0xE742, 0x81A2}, //10523 #CJK UNIFIED IDEOGRAPH + {0xE743, 0x8199}, //10524 #CJK UNIFIED IDEOGRAPH + {0xE744, 0x8197}, //10525 #CJK UNIFIED IDEOGRAPH + {0xE745, 0x8216}, //10526 #CJK UNIFIED IDEOGRAPH + {0xE746, 0x824F}, //10527 #CJK UNIFIED IDEOGRAPH + {0xE747, 0x8253}, //10528 #CJK UNIFIED IDEOGRAPH + {0xE748, 0x8252}, //10529 #CJK UNIFIED IDEOGRAPH + {0xE749, 0x8250}, //10530 #CJK UNIFIED IDEOGRAPH + {0xE74A, 0x824E}, //10531 #CJK UNIFIED IDEOGRAPH + {0xE74B, 0x8251}, //10532 #CJK UNIFIED IDEOGRAPH + {0xE74C, 0x8524}, //10533 #CJK UNIFIED IDEOGRAPH + {0xE74D, 0x853B}, //10534 #CJK UNIFIED IDEOGRAPH + {0xE74E, 0x850F}, //10535 #CJK UNIFIED IDEOGRAPH + {0xE74F, 0x8500}, //10536 #CJK UNIFIED IDEOGRAPH + {0xE750, 0x8529}, //10537 #CJK UNIFIED IDEOGRAPH + {0xE751, 0x850E}, //10538 #CJK UNIFIED IDEOGRAPH + {0xE752, 0x8509}, //10539 #CJK UNIFIED IDEOGRAPH + {0xE753, 0x850D}, //10540 #CJK UNIFIED IDEOGRAPH + {0xE754, 0x851F}, //10541 #CJK UNIFIED IDEOGRAPH + {0xE755, 0x850A}, //10542 #CJK UNIFIED IDEOGRAPH + {0xE756, 0x8527}, //10543 #CJK UNIFIED IDEOGRAPH + {0xE757, 0x851C}, //10544 #CJK UNIFIED IDEOGRAPH + {0xE758, 0x84FB}, //10545 #CJK UNIFIED IDEOGRAPH + {0xE759, 0x852B}, //10546 #CJK UNIFIED IDEOGRAPH + {0xE75A, 0x84FA}, //10547 #CJK UNIFIED IDEOGRAPH + {0xE75B, 0x8508}, //10548 #CJK UNIFIED IDEOGRAPH + {0xE75C, 0x850C}, //10549 #CJK UNIFIED IDEOGRAPH + {0xE75D, 0x84F4}, //10550 #CJK UNIFIED IDEOGRAPH + {0xE75E, 0x852A}, //10551 #CJK UNIFIED IDEOGRAPH + {0xE75F, 0x84F2}, //10552 #CJK UNIFIED IDEOGRAPH + {0xE760, 0x8515}, //10553 #CJK UNIFIED IDEOGRAPH + {0xE761, 0x84F7}, //10554 #CJK UNIFIED IDEOGRAPH + {0xE762, 0x84EB}, //10555 #CJK UNIFIED IDEOGRAPH + {0xE763, 0x84F3}, //10556 #CJK UNIFIED IDEOGRAPH + {0xE764, 0x84FC}, //10557 #CJK UNIFIED IDEOGRAPH + {0xE765, 0x8512}, //10558 #CJK UNIFIED IDEOGRAPH + {0xE766, 0x84EA}, //10559 #CJK UNIFIED IDEOGRAPH + {0xE767, 0x84E9}, //10560 #CJK UNIFIED IDEOGRAPH + {0xE768, 0x8516}, //10561 #CJK UNIFIED IDEOGRAPH + {0xE769, 0x84FE}, //10562 #CJK UNIFIED IDEOGRAPH + {0xE76A, 0x8528}, //10563 #CJK UNIFIED IDEOGRAPH + {0xE76B, 0x851D}, //10564 #CJK UNIFIED IDEOGRAPH + {0xE76C, 0x852E}, //10565 #CJK UNIFIED IDEOGRAPH + {0xE76D, 0x8502}, //10566 #CJK UNIFIED IDEOGRAPH + {0xE76E, 0x84FD}, //10567 #CJK UNIFIED IDEOGRAPH + {0xE76F, 0x851E}, //10568 #CJK UNIFIED IDEOGRAPH + {0xE770, 0x84F6}, //10569 #CJK UNIFIED IDEOGRAPH + {0xE771, 0x8531}, //10570 #CJK UNIFIED IDEOGRAPH + {0xE772, 0x8526}, //10571 #CJK UNIFIED IDEOGRAPH + {0xE773, 0x84E7}, //10572 #CJK UNIFIED IDEOGRAPH + {0xE774, 0x84E8}, //10573 #CJK UNIFIED IDEOGRAPH + {0xE775, 0x84F0}, //10574 #CJK UNIFIED IDEOGRAPH + {0xE776, 0x84EF}, //10575 #CJK UNIFIED IDEOGRAPH + {0xE777, 0x84F9}, //10576 #CJK UNIFIED IDEOGRAPH + {0xE778, 0x8518}, //10577 #CJK UNIFIED IDEOGRAPH + {0xE779, 0x8520}, //10578 #CJK UNIFIED IDEOGRAPH + {0xE77A, 0x8530}, //10579 #CJK UNIFIED IDEOGRAPH + {0xE77B, 0x850B}, //10580 #CJK UNIFIED IDEOGRAPH + {0xE77C, 0x8519}, //10581 #CJK UNIFIED IDEOGRAPH + {0xE77D, 0x852F}, //10582 #CJK UNIFIED IDEOGRAPH + {0xE77E, 0x8662}, //10583 #CJK UNIFIED IDEOGRAPH + {0xE7A1, 0x8756}, //10584 #CJK UNIFIED IDEOGRAPH + {0xE7A2, 0x8763}, //10585 #CJK UNIFIED IDEOGRAPH + {0xE7A3, 0x8764}, //10586 #CJK UNIFIED IDEOGRAPH + {0xE7A4, 0x8777}, //10587 #CJK UNIFIED IDEOGRAPH + {0xE7A5, 0x87E1}, //10588 #CJK UNIFIED IDEOGRAPH + {0xE7A6, 0x8773}, //10589 #CJK UNIFIED IDEOGRAPH + {0xE7A7, 0x8758}, //10590 #CJK UNIFIED IDEOGRAPH + {0xE7A8, 0x8754}, //10591 #CJK UNIFIED IDEOGRAPH + {0xE7A9, 0x875B}, //10592 #CJK UNIFIED IDEOGRAPH + {0xE7AA, 0x8752}, //10593 #CJK UNIFIED IDEOGRAPH + {0xE7AB, 0x8761}, //10594 #CJK UNIFIED IDEOGRAPH + {0xE7AC, 0x875A}, //10595 #CJK UNIFIED IDEOGRAPH + {0xE7AD, 0x8751}, //10596 #CJK UNIFIED IDEOGRAPH + {0xE7AE, 0x875E}, //10597 #CJK UNIFIED IDEOGRAPH + {0xE7AF, 0x876D}, //10598 #CJK UNIFIED IDEOGRAPH + {0xE7B0, 0x876A}, //10599 #CJK UNIFIED IDEOGRAPH + {0xE7B1, 0x8750}, //10600 #CJK UNIFIED IDEOGRAPH + {0xE7B2, 0x874E}, //10601 #CJK UNIFIED IDEOGRAPH + {0xE7B3, 0x875F}, //10602 #CJK UNIFIED IDEOGRAPH + {0xE7B4, 0x875D}, //10603 #CJK UNIFIED IDEOGRAPH + {0xE7B5, 0x876F}, //10604 #CJK UNIFIED IDEOGRAPH + {0xE7B6, 0x876C}, //10605 #CJK UNIFIED IDEOGRAPH + {0xE7B7, 0x877A}, //10606 #CJK UNIFIED IDEOGRAPH + {0xE7B8, 0x876E}, //10607 #CJK UNIFIED IDEOGRAPH + {0xE7B9, 0x875C}, //10608 #CJK UNIFIED IDEOGRAPH + {0xE7BA, 0x8765}, //10609 #CJK UNIFIED IDEOGRAPH + {0xE7BB, 0x874F}, //10610 #CJK UNIFIED IDEOGRAPH + {0xE7BC, 0x877B}, //10611 #CJK UNIFIED IDEOGRAPH + {0xE7BD, 0x8775}, //10612 #CJK UNIFIED IDEOGRAPH + {0xE7BE, 0x8762}, //10613 #CJK UNIFIED IDEOGRAPH + {0xE7BF, 0x8767}, //10614 #CJK UNIFIED IDEOGRAPH + {0xE7C0, 0x8769}, //10615 #CJK UNIFIED IDEOGRAPH + {0xE7C1, 0x885A}, //10616 #CJK UNIFIED IDEOGRAPH + {0xE7C2, 0x8905}, //10617 #CJK UNIFIED IDEOGRAPH + {0xE7C3, 0x890C}, //10618 #CJK UNIFIED IDEOGRAPH + {0xE7C4, 0x8914}, //10619 #CJK UNIFIED IDEOGRAPH + {0xE7C5, 0x890B}, //10620 #CJK UNIFIED IDEOGRAPH + {0xE7C6, 0x8917}, //10621 #CJK UNIFIED IDEOGRAPH + {0xE7C7, 0x8918}, //10622 #CJK UNIFIED IDEOGRAPH + {0xE7C8, 0x8919}, //10623 #CJK UNIFIED IDEOGRAPH + {0xE7C9, 0x8906}, //10624 #CJK UNIFIED IDEOGRAPH + {0xE7CA, 0x8916}, //10625 #CJK UNIFIED IDEOGRAPH + {0xE7CB, 0x8911}, //10626 #CJK UNIFIED IDEOGRAPH + {0xE7CC, 0x890E}, //10627 #CJK UNIFIED IDEOGRAPH + {0xE7CD, 0x8909}, //10628 #CJK UNIFIED IDEOGRAPH + {0xE7CE, 0x89A2}, //10629 #CJK UNIFIED IDEOGRAPH + {0xE7CF, 0x89A4}, //10630 #CJK UNIFIED IDEOGRAPH + {0xE7D0, 0x89A3}, //10631 #CJK UNIFIED IDEOGRAPH + {0xE7D1, 0x89ED}, //10632 #CJK UNIFIED IDEOGRAPH + {0xE7D2, 0x89F0}, //10633 #CJK UNIFIED IDEOGRAPH + {0xE7D3, 0x89EC}, //10634 #CJK UNIFIED IDEOGRAPH + {0xE7D4, 0x8ACF}, //10635 #CJK UNIFIED IDEOGRAPH + {0xE7D5, 0x8AC6}, //10636 #CJK UNIFIED IDEOGRAPH + {0xE7D6, 0x8AB8}, //10637 #CJK UNIFIED IDEOGRAPH + {0xE7D7, 0x8AD3}, //10638 #CJK UNIFIED IDEOGRAPH + {0xE7D8, 0x8AD1}, //10639 #CJK UNIFIED IDEOGRAPH + {0xE7D9, 0x8AD4}, //10640 #CJK UNIFIED IDEOGRAPH + {0xE7DA, 0x8AD5}, //10641 #CJK UNIFIED IDEOGRAPH + {0xE7DB, 0x8ABB}, //10642 #CJK UNIFIED IDEOGRAPH + {0xE7DC, 0x8AD7}, //10643 #CJK UNIFIED IDEOGRAPH + {0xE7DD, 0x8ABE}, //10644 #CJK UNIFIED IDEOGRAPH + {0xE7DE, 0x8AC0}, //10645 #CJK UNIFIED IDEOGRAPH + {0xE7DF, 0x8AC5}, //10646 #CJK UNIFIED IDEOGRAPH + {0xE7E0, 0x8AD8}, //10647 #CJK UNIFIED IDEOGRAPH + {0xE7E1, 0x8AC3}, //10648 #CJK UNIFIED IDEOGRAPH + {0xE7E2, 0x8ABA}, //10649 #CJK UNIFIED IDEOGRAPH + {0xE7E3, 0x8ABD}, //10650 #CJK UNIFIED IDEOGRAPH + {0xE7E4, 0x8AD9}, //10651 #CJK UNIFIED IDEOGRAPH + {0xE7E5, 0x8C3E}, //10652 #CJK UNIFIED IDEOGRAPH + {0xE7E6, 0x8C4D}, //10653 #CJK UNIFIED IDEOGRAPH + {0xE7E7, 0x8C8F}, //10654 #CJK UNIFIED IDEOGRAPH + {0xE7E8, 0x8CE5}, //10655 #CJK UNIFIED IDEOGRAPH + {0xE7E9, 0x8CDF}, //10656 #CJK UNIFIED IDEOGRAPH + {0xE7EA, 0x8CD9}, //10657 #CJK UNIFIED IDEOGRAPH + {0xE7EB, 0x8CE8}, //10658 #CJK UNIFIED IDEOGRAPH + {0xE7EC, 0x8CDA}, //10659 #CJK UNIFIED IDEOGRAPH + {0xE7ED, 0x8CDD}, //10660 #CJK UNIFIED IDEOGRAPH + {0xE7EE, 0x8CE7}, //10661 #CJK UNIFIED IDEOGRAPH + {0xE7EF, 0x8DA0}, //10662 #CJK UNIFIED IDEOGRAPH + {0xE7F0, 0x8D9C}, //10663 #CJK UNIFIED IDEOGRAPH + {0xE7F1, 0x8DA1}, //10664 #CJK UNIFIED IDEOGRAPH + {0xE7F2, 0x8D9B}, //10665 #CJK UNIFIED IDEOGRAPH + {0xE7F3, 0x8E20}, //10666 #CJK UNIFIED IDEOGRAPH + {0xE7F4, 0x8E23}, //10667 #CJK UNIFIED IDEOGRAPH + {0xE7F5, 0x8E25}, //10668 #CJK UNIFIED IDEOGRAPH + {0xE7F6, 0x8E24}, //10669 #CJK UNIFIED IDEOGRAPH + {0xE7F7, 0x8E2E}, //10670 #CJK UNIFIED IDEOGRAPH + {0xE7F8, 0x8E15}, //10671 #CJK UNIFIED IDEOGRAPH + {0xE7F9, 0x8E1B}, //10672 #CJK UNIFIED IDEOGRAPH + {0xE7FA, 0x8E16}, //10673 #CJK UNIFIED IDEOGRAPH + {0xE7FB, 0x8E11}, //10674 #CJK UNIFIED IDEOGRAPH + {0xE7FC, 0x8E19}, //10675 #CJK UNIFIED IDEOGRAPH + {0xE7FD, 0x8E26}, //10676 #CJK UNIFIED IDEOGRAPH + {0xE7FE, 0x8E27}, //10677 #CJK UNIFIED IDEOGRAPH + {0xE840, 0x8E14}, //10678 #CJK UNIFIED IDEOGRAPH + {0xE841, 0x8E12}, //10679 #CJK UNIFIED IDEOGRAPH + {0xE842, 0x8E18}, //10680 #CJK UNIFIED IDEOGRAPH + {0xE843, 0x8E13}, //10681 #CJK UNIFIED IDEOGRAPH + {0xE844, 0x8E1C}, //10682 #CJK UNIFIED IDEOGRAPH + {0xE845, 0x8E17}, //10683 #CJK UNIFIED IDEOGRAPH + {0xE846, 0x8E1A}, //10684 #CJK UNIFIED IDEOGRAPH + {0xE847, 0x8F2C}, //10685 #CJK UNIFIED IDEOGRAPH + {0xE848, 0x8F24}, //10686 #CJK UNIFIED IDEOGRAPH + {0xE849, 0x8F18}, //10687 #CJK UNIFIED IDEOGRAPH + {0xE84A, 0x8F1A}, //10688 #CJK UNIFIED IDEOGRAPH + {0xE84B, 0x8F20}, //10689 #CJK UNIFIED IDEOGRAPH + {0xE84C, 0x8F23}, //10690 #CJK UNIFIED IDEOGRAPH + {0xE84D, 0x8F16}, //10691 #CJK UNIFIED IDEOGRAPH + {0xE84E, 0x8F17}, //10692 #CJK UNIFIED IDEOGRAPH + {0xE84F, 0x9073}, //10693 #CJK UNIFIED IDEOGRAPH + {0xE850, 0x9070}, //10694 #CJK UNIFIED IDEOGRAPH + {0xE851, 0x906F}, //10695 #CJK UNIFIED IDEOGRAPH + {0xE852, 0x9067}, //10696 #CJK UNIFIED IDEOGRAPH + {0xE853, 0x906B}, //10697 #CJK UNIFIED IDEOGRAPH + {0xE854, 0x912F}, //10698 #CJK UNIFIED IDEOGRAPH + {0xE855, 0x912B}, //10699 #CJK UNIFIED IDEOGRAPH + {0xE856, 0x9129}, //10700 #CJK UNIFIED IDEOGRAPH + {0xE857, 0x912A}, //10701 #CJK UNIFIED IDEOGRAPH + {0xE858, 0x9132}, //10702 #CJK UNIFIED IDEOGRAPH + {0xE859, 0x9126}, //10703 #CJK UNIFIED IDEOGRAPH + {0xE85A, 0x912E}, //10704 #CJK UNIFIED IDEOGRAPH + {0xE85B, 0x9185}, //10705 #CJK UNIFIED IDEOGRAPH + {0xE85C, 0x9186}, //10706 #CJK UNIFIED IDEOGRAPH + {0xE85D, 0x918A}, //10707 #CJK UNIFIED IDEOGRAPH + {0xE85E, 0x9181}, //10708 #CJK UNIFIED IDEOGRAPH + {0xE85F, 0x9182}, //10709 #CJK UNIFIED IDEOGRAPH + {0xE860, 0x9184}, //10710 #CJK UNIFIED IDEOGRAPH + {0xE861, 0x9180}, //10711 #CJK UNIFIED IDEOGRAPH + {0xE862, 0x92D0}, //10712 #CJK UNIFIED IDEOGRAPH + {0xE863, 0x92C3}, //10713 #CJK UNIFIED IDEOGRAPH + {0xE864, 0x92C4}, //10714 #CJK UNIFIED IDEOGRAPH + {0xE865, 0x92C0}, //10715 #CJK UNIFIED IDEOGRAPH + {0xE866, 0x92D9}, //10716 #CJK UNIFIED IDEOGRAPH + {0xE867, 0x92B6}, //10717 #CJK UNIFIED IDEOGRAPH + {0xE868, 0x92CF}, //10718 #CJK UNIFIED IDEOGRAPH + {0xE869, 0x92F1}, //10719 #CJK UNIFIED IDEOGRAPH + {0xE86A, 0x92DF}, //10720 #CJK UNIFIED IDEOGRAPH + {0xE86B, 0x92D8}, //10721 #CJK UNIFIED IDEOGRAPH + {0xE86C, 0x92E9}, //10722 #CJK UNIFIED IDEOGRAPH + {0xE86D, 0x92D7}, //10723 #CJK UNIFIED IDEOGRAPH + {0xE86E, 0x92DD}, //10724 #CJK UNIFIED IDEOGRAPH + {0xE86F, 0x92CC}, //10725 #CJK UNIFIED IDEOGRAPH + {0xE870, 0x92EF}, //10726 #CJK UNIFIED IDEOGRAPH + {0xE871, 0x92C2}, //10727 #CJK UNIFIED IDEOGRAPH + {0xE872, 0x92E8}, //10728 #CJK UNIFIED IDEOGRAPH + {0xE873, 0x92CA}, //10729 #CJK UNIFIED IDEOGRAPH + {0xE874, 0x92C8}, //10730 #CJK UNIFIED IDEOGRAPH + {0xE875, 0x92CE}, //10731 #CJK UNIFIED IDEOGRAPH + {0xE876, 0x92E6}, //10732 #CJK UNIFIED IDEOGRAPH + {0xE877, 0x92CD}, //10733 #CJK UNIFIED IDEOGRAPH + {0xE878, 0x92D5}, //10734 #CJK UNIFIED IDEOGRAPH + {0xE879, 0x92C9}, //10735 #CJK UNIFIED IDEOGRAPH + {0xE87A, 0x92E0}, //10736 #CJK UNIFIED IDEOGRAPH + {0xE87B, 0x92DE}, //10737 #CJK UNIFIED IDEOGRAPH + {0xE87C, 0x92E7}, //10738 #CJK UNIFIED IDEOGRAPH + {0xE87D, 0x92D1}, //10739 #CJK UNIFIED IDEOGRAPH + {0xE87E, 0x92D3}, //10740 #CJK UNIFIED IDEOGRAPH + {0xE8A1, 0x92B5}, //10741 #CJK UNIFIED IDEOGRAPH + {0xE8A2, 0x92E1}, //10742 #CJK UNIFIED IDEOGRAPH + {0xE8A3, 0x92C6}, //10743 #CJK UNIFIED IDEOGRAPH + {0xE8A4, 0x92B4}, //10744 #CJK UNIFIED IDEOGRAPH + {0xE8A5, 0x957C}, //10745 #CJK UNIFIED IDEOGRAPH + {0xE8A6, 0x95AC}, //10746 #CJK UNIFIED IDEOGRAPH + {0xE8A7, 0x95AB}, //10747 #CJK UNIFIED IDEOGRAPH + {0xE8A8, 0x95AE}, //10748 #CJK UNIFIED IDEOGRAPH + {0xE8A9, 0x95B0}, //10749 #CJK UNIFIED IDEOGRAPH + {0xE8AA, 0x96A4}, //10750 #CJK UNIFIED IDEOGRAPH + {0xE8AB, 0x96A2}, //10751 #CJK UNIFIED IDEOGRAPH + {0xE8AC, 0x96D3}, //10752 #CJK UNIFIED IDEOGRAPH + {0xE8AD, 0x9705}, //10753 #CJK UNIFIED IDEOGRAPH + {0xE8AE, 0x9708}, //10754 #CJK UNIFIED IDEOGRAPH + {0xE8AF, 0x9702}, //10755 #CJK UNIFIED IDEOGRAPH + {0xE8B0, 0x975A}, //10756 #CJK UNIFIED IDEOGRAPH + {0xE8B1, 0x978A}, //10757 #CJK UNIFIED IDEOGRAPH + {0xE8B2, 0x978E}, //10758 #CJK UNIFIED IDEOGRAPH + {0xE8B3, 0x9788}, //10759 #CJK UNIFIED IDEOGRAPH + {0xE8B4, 0x97D0}, //10760 #CJK UNIFIED IDEOGRAPH + {0xE8B5, 0x97CF}, //10761 #CJK UNIFIED IDEOGRAPH + {0xE8B6, 0x981E}, //10762 #CJK UNIFIED IDEOGRAPH + {0xE8B7, 0x981D}, //10763 #CJK UNIFIED IDEOGRAPH + {0xE8B8, 0x9826}, //10764 #CJK UNIFIED IDEOGRAPH + {0xE8B9, 0x9829}, //10765 #CJK UNIFIED IDEOGRAPH + {0xE8BA, 0x9828}, //10766 #CJK UNIFIED IDEOGRAPH + {0xE8BB, 0x9820}, //10767 #CJK UNIFIED IDEOGRAPH + {0xE8BC, 0x981B}, //10768 #CJK UNIFIED IDEOGRAPH + {0xE8BD, 0x9827}, //10769 #CJK UNIFIED IDEOGRAPH + {0xE8BE, 0x98B2}, //10770 #CJK UNIFIED IDEOGRAPH + {0xE8BF, 0x9908}, //10771 #CJK UNIFIED IDEOGRAPH + {0xE8C0, 0x98FA}, //10772 #CJK UNIFIED IDEOGRAPH + {0xE8C1, 0x9911}, //10773 #CJK UNIFIED IDEOGRAPH + {0xE8C2, 0x9914}, //10774 #CJK UNIFIED IDEOGRAPH + {0xE8C3, 0x9916}, //10775 #CJK UNIFIED IDEOGRAPH + {0xE8C4, 0x9917}, //10776 #CJK UNIFIED IDEOGRAPH + {0xE8C5, 0x9915}, //10777 #CJK UNIFIED IDEOGRAPH + {0xE8C6, 0x99DC}, //10778 #CJK UNIFIED IDEOGRAPH + {0xE8C7, 0x99CD}, //10779 #CJK UNIFIED IDEOGRAPH + {0xE8C8, 0x99CF}, //10780 #CJK UNIFIED IDEOGRAPH + {0xE8C9, 0x99D3}, //10781 #CJK UNIFIED IDEOGRAPH + {0xE8CA, 0x99D4}, //10782 #CJK UNIFIED IDEOGRAPH + {0xE8CB, 0x99CE}, //10783 #CJK UNIFIED IDEOGRAPH + {0xE8CC, 0x99C9}, //10784 #CJK UNIFIED IDEOGRAPH + {0xE8CD, 0x99D6}, //10785 #CJK UNIFIED IDEOGRAPH + {0xE8CE, 0x99D8}, //10786 #CJK UNIFIED IDEOGRAPH + {0xE8CF, 0x99CB}, //10787 #CJK UNIFIED IDEOGRAPH + {0xE8D0, 0x99D7}, //10788 #CJK UNIFIED IDEOGRAPH + {0xE8D1, 0x99CC}, //10789 #CJK UNIFIED IDEOGRAPH + {0xE8D2, 0x9AB3}, //10790 #CJK UNIFIED IDEOGRAPH + {0xE8D3, 0x9AEC}, //10791 #CJK UNIFIED IDEOGRAPH + {0xE8D4, 0x9AEB}, //10792 #CJK UNIFIED IDEOGRAPH + {0xE8D5, 0x9AF3}, //10793 #CJK UNIFIED IDEOGRAPH + {0xE8D6, 0x9AF2}, //10794 #CJK UNIFIED IDEOGRAPH + {0xE8D7, 0x9AF1}, //10795 #CJK UNIFIED IDEOGRAPH + {0xE8D8, 0x9B46}, //10796 #CJK UNIFIED IDEOGRAPH + {0xE8D9, 0x9B43}, //10797 #CJK UNIFIED IDEOGRAPH + {0xE8DA, 0x9B67}, //10798 #CJK UNIFIED IDEOGRAPH + {0xE8DB, 0x9B74}, //10799 #CJK UNIFIED IDEOGRAPH + {0xE8DC, 0x9B71}, //10800 #CJK UNIFIED IDEOGRAPH + {0xE8DD, 0x9B66}, //10801 #CJK UNIFIED IDEOGRAPH + {0xE8DE, 0x9B76}, //10802 #CJK UNIFIED IDEOGRAPH + {0xE8DF, 0x9B75}, //10803 #CJK UNIFIED IDEOGRAPH + {0xE8E0, 0x9B70}, //10804 #CJK UNIFIED IDEOGRAPH + {0xE8E1, 0x9B68}, //10805 #CJK UNIFIED IDEOGRAPH + {0xE8E2, 0x9B64}, //10806 #CJK UNIFIED IDEOGRAPH + {0xE8E3, 0x9B6C}, //10807 #CJK UNIFIED IDEOGRAPH + {0xE8E4, 0x9CFC}, //10808 #CJK UNIFIED IDEOGRAPH + {0xE8E5, 0x9CFA}, //10809 #CJK UNIFIED IDEOGRAPH + {0xE8E6, 0x9CFD}, //10810 #CJK UNIFIED IDEOGRAPH + {0xE8E7, 0x9CFF}, //10811 #CJK UNIFIED IDEOGRAPH + {0xE8E8, 0x9CF7}, //10812 #CJK UNIFIED IDEOGRAPH + {0xE8E9, 0x9D07}, //10813 #CJK UNIFIED IDEOGRAPH + {0xE8EA, 0x9D00}, //10814 #CJK UNIFIED IDEOGRAPH + {0xE8EB, 0x9CF9}, //10815 #CJK UNIFIED IDEOGRAPH + {0xE8EC, 0x9CFB}, //10816 #CJK UNIFIED IDEOGRAPH + {0xE8ED, 0x9D08}, //10817 #CJK UNIFIED IDEOGRAPH + {0xE8EE, 0x9D05}, //10818 #CJK UNIFIED IDEOGRAPH + {0xE8EF, 0x9D04}, //10819 #CJK UNIFIED IDEOGRAPH + {0xE8F0, 0x9E83}, //10820 #CJK UNIFIED IDEOGRAPH + {0xE8F1, 0x9ED3}, //10821 #CJK UNIFIED IDEOGRAPH + {0xE8F2, 0x9F0F}, //10822 #CJK UNIFIED IDEOGRAPH + {0xE8F3, 0x9F10}, //10823 #CJK UNIFIED IDEOGRAPH + {0xE8F4, 0x511C}, //10824 #CJK UNIFIED IDEOGRAPH + {0xE8F5, 0x5113}, //10825 #CJK UNIFIED IDEOGRAPH + {0xE8F6, 0x5117}, //10826 #CJK UNIFIED IDEOGRAPH + {0xE8F7, 0x511A}, //10827 #CJK UNIFIED IDEOGRAPH + {0xE8F8, 0x5111}, //10828 #CJK UNIFIED IDEOGRAPH + {0xE8F9, 0x51DE}, //10829 #CJK UNIFIED IDEOGRAPH + {0xE8FA, 0x5334}, //10830 #CJK UNIFIED IDEOGRAPH + {0xE8FB, 0x53E1}, //10831 #CJK UNIFIED IDEOGRAPH + {0xE8FC, 0x5670}, //10832 #CJK UNIFIED IDEOGRAPH + {0xE8FD, 0x5660}, //10833 #CJK UNIFIED IDEOGRAPH + {0xE8FE, 0x566E}, //10834 #CJK UNIFIED IDEOGRAPH + {0xE940, 0x5673}, //10835 #CJK UNIFIED IDEOGRAPH + {0xE941, 0x5666}, //10836 #CJK UNIFIED IDEOGRAPH + {0xE942, 0x5663}, //10837 #CJK UNIFIED IDEOGRAPH + {0xE943, 0x566D}, //10838 #CJK UNIFIED IDEOGRAPH + {0xE944, 0x5672}, //10839 #CJK UNIFIED IDEOGRAPH + {0xE945, 0x565E}, //10840 #CJK UNIFIED IDEOGRAPH + {0xE946, 0x5677}, //10841 #CJK UNIFIED IDEOGRAPH + {0xE947, 0x571C}, //10842 #CJK UNIFIED IDEOGRAPH + {0xE948, 0x571B}, //10843 #CJK UNIFIED IDEOGRAPH + {0xE949, 0x58C8}, //10844 #CJK UNIFIED IDEOGRAPH + {0xE94A, 0x58BD}, //10845 #CJK UNIFIED IDEOGRAPH + {0xE94B, 0x58C9}, //10846 #CJK UNIFIED IDEOGRAPH + {0xE94C, 0x58BF}, //10847 #CJK UNIFIED IDEOGRAPH + {0xE94D, 0x58BA}, //10848 #CJK UNIFIED IDEOGRAPH + {0xE94E, 0x58C2}, //10849 #CJK UNIFIED IDEOGRAPH + {0xE94F, 0x58BC}, //10850 #CJK UNIFIED IDEOGRAPH + {0xE950, 0x58C6}, //10851 #CJK UNIFIED IDEOGRAPH + {0xE951, 0x5B17}, //10852 #CJK UNIFIED IDEOGRAPH + {0xE952, 0x5B19}, //10853 #CJK UNIFIED IDEOGRAPH + {0xE953, 0x5B1B}, //10854 #CJK UNIFIED IDEOGRAPH + {0xE954, 0x5B21}, //10855 #CJK UNIFIED IDEOGRAPH + {0xE955, 0x5B14}, //10856 #CJK UNIFIED IDEOGRAPH + {0xE956, 0x5B13}, //10857 #CJK UNIFIED IDEOGRAPH + {0xE957, 0x5B10}, //10858 #CJK UNIFIED IDEOGRAPH + {0xE958, 0x5B16}, //10859 #CJK UNIFIED IDEOGRAPH + {0xE959, 0x5B28}, //10860 #CJK UNIFIED IDEOGRAPH + {0xE95A, 0x5B1A}, //10861 #CJK UNIFIED IDEOGRAPH + {0xE95B, 0x5B20}, //10862 #CJK UNIFIED IDEOGRAPH + {0xE95C, 0x5B1E}, //10863 #CJK UNIFIED IDEOGRAPH + {0xE95D, 0x5BEF}, //10864 #CJK UNIFIED IDEOGRAPH + {0xE95E, 0x5DAC}, //10865 #CJK UNIFIED IDEOGRAPH + {0xE95F, 0x5DB1}, //10866 #CJK UNIFIED IDEOGRAPH + {0xE960, 0x5DA9}, //10867 #CJK UNIFIED IDEOGRAPH + {0xE961, 0x5DA7}, //10868 #CJK UNIFIED IDEOGRAPH + {0xE962, 0x5DB5}, //10869 #CJK UNIFIED IDEOGRAPH + {0xE963, 0x5DB0}, //10870 #CJK UNIFIED IDEOGRAPH + {0xE964, 0x5DAE}, //10871 #CJK UNIFIED IDEOGRAPH + {0xE965, 0x5DAA}, //10872 #CJK UNIFIED IDEOGRAPH + {0xE966, 0x5DA8}, //10873 #CJK UNIFIED IDEOGRAPH + {0xE967, 0x5DB2}, //10874 #CJK UNIFIED IDEOGRAPH + {0xE968, 0x5DAD}, //10875 #CJK UNIFIED IDEOGRAPH + {0xE969, 0x5DAF}, //10876 #CJK UNIFIED IDEOGRAPH + {0xE96A, 0x5DB4}, //10877 #CJK UNIFIED IDEOGRAPH + {0xE96B, 0x5E67}, //10878 #CJK UNIFIED IDEOGRAPH + {0xE96C, 0x5E68}, //10879 #CJK UNIFIED IDEOGRAPH + {0xE96D, 0x5E66}, //10880 #CJK UNIFIED IDEOGRAPH + {0xE96E, 0x5E6F}, //10881 #CJK UNIFIED IDEOGRAPH + {0xE96F, 0x5EE9}, //10882 #CJK UNIFIED IDEOGRAPH + {0xE970, 0x5EE7}, //10883 #CJK UNIFIED IDEOGRAPH + {0xE971, 0x5EE6}, //10884 #CJK UNIFIED IDEOGRAPH + {0xE972, 0x5EE8}, //10885 #CJK UNIFIED IDEOGRAPH + {0xE973, 0x5EE5}, //10886 #CJK UNIFIED IDEOGRAPH + {0xE974, 0x5F4B}, //10887 #CJK UNIFIED IDEOGRAPH + {0xE975, 0x5FBC}, //10888 #CJK UNIFIED IDEOGRAPH + {0xE976, 0x619D}, //10889 #CJK UNIFIED IDEOGRAPH + {0xE977, 0x61A8}, //10890 #CJK UNIFIED IDEOGRAPH + {0xE978, 0x6196}, //10891 #CJK UNIFIED IDEOGRAPH + {0xE979, 0x61C5}, //10892 #CJK UNIFIED IDEOGRAPH + {0xE97A, 0x61B4}, //10893 #CJK UNIFIED IDEOGRAPH + {0xE97B, 0x61C6}, //10894 #CJK UNIFIED IDEOGRAPH + {0xE97C, 0x61C1}, //10895 #CJK UNIFIED IDEOGRAPH + {0xE97D, 0x61CC}, //10896 #CJK UNIFIED IDEOGRAPH + {0xE97E, 0x61BA}, //10897 #CJK UNIFIED IDEOGRAPH + {0xE9A1, 0x61BF}, //10898 #CJK UNIFIED IDEOGRAPH + {0xE9A2, 0x61B8}, //10899 #CJK UNIFIED IDEOGRAPH + {0xE9A3, 0x618C}, //10900 #CJK UNIFIED IDEOGRAPH + {0xE9A4, 0x64D7}, //10901 #CJK UNIFIED IDEOGRAPH + {0xE9A5, 0x64D6}, //10902 #CJK UNIFIED IDEOGRAPH + {0xE9A6, 0x64D0}, //10903 #CJK UNIFIED IDEOGRAPH + {0xE9A7, 0x64CF}, //10904 #CJK UNIFIED IDEOGRAPH + {0xE9A8, 0x64C9}, //10905 #CJK UNIFIED IDEOGRAPH + {0xE9A9, 0x64BD}, //10906 #CJK UNIFIED IDEOGRAPH + {0xE9AA, 0x6489}, //10907 #CJK UNIFIED IDEOGRAPH + {0xE9AB, 0x64C3}, //10908 #CJK UNIFIED IDEOGRAPH + {0xE9AC, 0x64DB}, //10909 #CJK UNIFIED IDEOGRAPH + {0xE9AD, 0x64F3}, //10910 #CJK UNIFIED IDEOGRAPH + {0xE9AE, 0x64D9}, //10911 #CJK UNIFIED IDEOGRAPH + {0xE9AF, 0x6533}, //10912 #CJK UNIFIED IDEOGRAPH + {0xE9B0, 0x657F}, //10913 #CJK UNIFIED IDEOGRAPH + {0xE9B1, 0x657C}, //10914 #CJK UNIFIED IDEOGRAPH + {0xE9B2, 0x65A2}, //10915 #CJK UNIFIED IDEOGRAPH + {0xE9B3, 0x66C8}, //10916 #CJK UNIFIED IDEOGRAPH + {0xE9B4, 0x66BE}, //10917 #CJK UNIFIED IDEOGRAPH + {0xE9B5, 0x66C0}, //10918 #CJK UNIFIED IDEOGRAPH + {0xE9B6, 0x66CA}, //10919 #CJK UNIFIED IDEOGRAPH + {0xE9B7, 0x66CB}, //10920 #CJK UNIFIED IDEOGRAPH + {0xE9B8, 0x66CF}, //10921 #CJK UNIFIED IDEOGRAPH + {0xE9B9, 0x66BD}, //10922 #CJK UNIFIED IDEOGRAPH + {0xE9BA, 0x66BB}, //10923 #CJK UNIFIED IDEOGRAPH + {0xE9BB, 0x66BA}, //10924 #CJK UNIFIED IDEOGRAPH + {0xE9BC, 0x66CC}, //10925 #CJK UNIFIED IDEOGRAPH + {0xE9BD, 0x6723}, //10926 #CJK UNIFIED IDEOGRAPH + {0xE9BE, 0x6A34}, //10927 #CJK UNIFIED IDEOGRAPH + {0xE9BF, 0x6A66}, //10928 #CJK UNIFIED IDEOGRAPH + {0xE9C0, 0x6A49}, //10929 #CJK UNIFIED IDEOGRAPH + {0xE9C1, 0x6A67}, //10930 #CJK UNIFIED IDEOGRAPH + {0xE9C2, 0x6A32}, //10931 #CJK UNIFIED IDEOGRAPH + {0xE9C3, 0x6A68}, //10932 #CJK UNIFIED IDEOGRAPH + {0xE9C4, 0x6A3E}, //10933 #CJK UNIFIED IDEOGRAPH + {0xE9C5, 0x6A5D}, //10934 #CJK UNIFIED IDEOGRAPH + {0xE9C6, 0x6A6D}, //10935 #CJK UNIFIED IDEOGRAPH + {0xE9C7, 0x6A76}, //10936 #CJK UNIFIED IDEOGRAPH + {0xE9C8, 0x6A5B}, //10937 #CJK UNIFIED IDEOGRAPH + {0xE9C9, 0x6A51}, //10938 #CJK UNIFIED IDEOGRAPH + {0xE9CA, 0x6A28}, //10939 #CJK UNIFIED IDEOGRAPH + {0xE9CB, 0x6A5A}, //10940 #CJK UNIFIED IDEOGRAPH + {0xE9CC, 0x6A3B}, //10941 #CJK UNIFIED IDEOGRAPH + {0xE9CD, 0x6A3F}, //10942 #CJK UNIFIED IDEOGRAPH + {0xE9CE, 0x6A41}, //10943 #CJK UNIFIED IDEOGRAPH + {0xE9CF, 0x6A6A}, //10944 #CJK UNIFIED IDEOGRAPH + {0xE9D0, 0x6A64}, //10945 #CJK UNIFIED IDEOGRAPH + {0xE9D1, 0x6A50}, //10946 #CJK UNIFIED IDEOGRAPH + {0xE9D2, 0x6A4F}, //10947 #CJK UNIFIED IDEOGRAPH + {0xE9D3, 0x6A54}, //10948 #CJK UNIFIED IDEOGRAPH + {0xE9D4, 0x6A6F}, //10949 #CJK UNIFIED IDEOGRAPH + {0xE9D5, 0x6A69}, //10950 #CJK UNIFIED IDEOGRAPH + {0xE9D6, 0x6A60}, //10951 #CJK UNIFIED IDEOGRAPH + {0xE9D7, 0x6A3C}, //10952 #CJK UNIFIED IDEOGRAPH + {0xE9D8, 0x6A5E}, //10953 #CJK UNIFIED IDEOGRAPH + {0xE9D9, 0x6A56}, //10954 #CJK UNIFIED IDEOGRAPH + {0xE9DA, 0x6A55}, //10955 #CJK UNIFIED IDEOGRAPH + {0xE9DB, 0x6A4D}, //10956 #CJK UNIFIED IDEOGRAPH + {0xE9DC, 0x6A4E}, //10957 #CJK UNIFIED IDEOGRAPH + {0xE9DD, 0x6A46}, //10958 #CJK UNIFIED IDEOGRAPH + {0xE9DE, 0x6B55}, //10959 #CJK UNIFIED IDEOGRAPH + {0xE9DF, 0x6B54}, //10960 #CJK UNIFIED IDEOGRAPH + {0xE9E0, 0x6B56}, //10961 #CJK UNIFIED IDEOGRAPH + {0xE9E1, 0x6BA7}, //10962 #CJK UNIFIED IDEOGRAPH + {0xE9E2, 0x6BAA}, //10963 #CJK UNIFIED IDEOGRAPH + {0xE9E3, 0x6BAB}, //10964 #CJK UNIFIED IDEOGRAPH + {0xE9E4, 0x6BC8}, //10965 #CJK UNIFIED IDEOGRAPH + {0xE9E5, 0x6BC7}, //10966 #CJK UNIFIED IDEOGRAPH + {0xE9E6, 0x6C04}, //10967 #CJK UNIFIED IDEOGRAPH + {0xE9E7, 0x6C03}, //10968 #CJK UNIFIED IDEOGRAPH + {0xE9E8, 0x6C06}, //10969 #CJK UNIFIED IDEOGRAPH + {0xE9E9, 0x6FAD}, //10970 #CJK UNIFIED IDEOGRAPH + {0xE9EA, 0x6FCB}, //10971 #CJK UNIFIED IDEOGRAPH + {0xE9EB, 0x6FA3}, //10972 #CJK UNIFIED IDEOGRAPH + {0xE9EC, 0x6FC7}, //10973 #CJK UNIFIED IDEOGRAPH + {0xE9ED, 0x6FBC}, //10974 #CJK UNIFIED IDEOGRAPH + {0xE9EE, 0x6FCE}, //10975 #CJK UNIFIED IDEOGRAPH + {0xE9EF, 0x6FC8}, //10976 #CJK UNIFIED IDEOGRAPH + {0xE9F0, 0x6F5E}, //10977 #CJK UNIFIED IDEOGRAPH + {0xE9F1, 0x6FC4}, //10978 #CJK UNIFIED IDEOGRAPH + {0xE9F2, 0x6FBD}, //10979 #CJK UNIFIED IDEOGRAPH + {0xE9F3, 0x6F9E}, //10980 #CJK UNIFIED IDEOGRAPH + {0xE9F4, 0x6FCA}, //10981 #CJK UNIFIED IDEOGRAPH + {0xE9F5, 0x6FA8}, //10982 #CJK UNIFIED IDEOGRAPH + {0xE9F6, 0x7004}, //10983 #CJK UNIFIED IDEOGRAPH + {0xE9F7, 0x6FA5}, //10984 #CJK UNIFIED IDEOGRAPH + {0xE9F8, 0x6FAE}, //10985 #CJK UNIFIED IDEOGRAPH + {0xE9F9, 0x6FBA}, //10986 #CJK UNIFIED IDEOGRAPH + {0xE9FA, 0x6FAC}, //10987 #CJK UNIFIED IDEOGRAPH + {0xE9FB, 0x6FAA}, //10988 #CJK UNIFIED IDEOGRAPH + {0xE9FC, 0x6FCF}, //10989 #CJK UNIFIED IDEOGRAPH + {0xE9FD, 0x6FBF}, //10990 #CJK UNIFIED IDEOGRAPH + {0xE9FE, 0x6FB8}, //10991 #CJK UNIFIED IDEOGRAPH + {0xEA40, 0x6FA2}, //10992 #CJK UNIFIED IDEOGRAPH + {0xEA41, 0x6FC9}, //10993 #CJK UNIFIED IDEOGRAPH + {0xEA42, 0x6FAB}, //10994 #CJK UNIFIED IDEOGRAPH + {0xEA43, 0x6FCD}, //10995 #CJK UNIFIED IDEOGRAPH + {0xEA44, 0x6FAF}, //10996 #CJK UNIFIED IDEOGRAPH + {0xEA45, 0x6FB2}, //10997 #CJK UNIFIED IDEOGRAPH + {0xEA46, 0x6FB0}, //10998 #CJK UNIFIED IDEOGRAPH + {0xEA47, 0x71C5}, //10999 #CJK UNIFIED IDEOGRAPH + {0xEA48, 0x71C2}, //11000 #CJK UNIFIED IDEOGRAPH + {0xEA49, 0x71BF}, //11001 #CJK UNIFIED IDEOGRAPH + {0xEA4A, 0x71B8}, //11002 #CJK UNIFIED IDEOGRAPH + {0xEA4B, 0x71D6}, //11003 #CJK UNIFIED IDEOGRAPH + {0xEA4C, 0x71C0}, //11004 #CJK UNIFIED IDEOGRAPH + {0xEA4D, 0x71C1}, //11005 #CJK UNIFIED IDEOGRAPH + {0xEA4E, 0x71CB}, //11006 #CJK UNIFIED IDEOGRAPH + {0xEA4F, 0x71D4}, //11007 #CJK UNIFIED IDEOGRAPH + {0xEA50, 0x71CA}, //11008 #CJK UNIFIED IDEOGRAPH + {0xEA51, 0x71C7}, //11009 #CJK UNIFIED IDEOGRAPH + {0xEA52, 0x71CF}, //11010 #CJK UNIFIED IDEOGRAPH + {0xEA53, 0x71BD}, //11011 #CJK UNIFIED IDEOGRAPH + {0xEA54, 0x71D8}, //11012 #CJK UNIFIED IDEOGRAPH + {0xEA55, 0x71BC}, //11013 #CJK UNIFIED IDEOGRAPH + {0xEA56, 0x71C6}, //11014 #CJK UNIFIED IDEOGRAPH + {0xEA57, 0x71DA}, //11015 #CJK UNIFIED IDEOGRAPH + {0xEA58, 0x71DB}, //11016 #CJK UNIFIED IDEOGRAPH + {0xEA59, 0x729D}, //11017 #CJK UNIFIED IDEOGRAPH + {0xEA5A, 0x729E}, //11018 #CJK UNIFIED IDEOGRAPH + {0xEA5B, 0x7369}, //11019 #CJK UNIFIED IDEOGRAPH + {0xEA5C, 0x7366}, //11020 #CJK UNIFIED IDEOGRAPH + {0xEA5D, 0x7367}, //11021 #CJK UNIFIED IDEOGRAPH + {0xEA5E, 0x736C}, //11022 #CJK UNIFIED IDEOGRAPH + {0xEA5F, 0x7365}, //11023 #CJK UNIFIED IDEOGRAPH + {0xEA60, 0x736B}, //11024 #CJK UNIFIED IDEOGRAPH + {0xEA61, 0x736A}, //11025 #CJK UNIFIED IDEOGRAPH + {0xEA62, 0x747F}, //11026 #CJK UNIFIED IDEOGRAPH + {0xEA63, 0x749A}, //11027 #CJK UNIFIED IDEOGRAPH + {0xEA64, 0x74A0}, //11028 #CJK UNIFIED IDEOGRAPH + {0xEA65, 0x7494}, //11029 #CJK UNIFIED IDEOGRAPH + {0xEA66, 0x7492}, //11030 #CJK UNIFIED IDEOGRAPH + {0xEA67, 0x7495}, //11031 #CJK UNIFIED IDEOGRAPH + {0xEA68, 0x74A1}, //11032 #CJK UNIFIED IDEOGRAPH + {0xEA69, 0x750B}, //11033 #CJK UNIFIED IDEOGRAPH + {0xEA6A, 0x7580}, //11034 #CJK UNIFIED IDEOGRAPH + {0xEA6B, 0x762F}, //11035 #CJK UNIFIED IDEOGRAPH + {0xEA6C, 0x762D}, //11036 #CJK UNIFIED IDEOGRAPH + {0xEA6D, 0x7631}, //11037 #CJK UNIFIED IDEOGRAPH + {0xEA6E, 0x763D}, //11038 #CJK UNIFIED IDEOGRAPH + {0xEA6F, 0x7633}, //11039 #CJK UNIFIED IDEOGRAPH + {0xEA70, 0x763C}, //11040 #CJK UNIFIED IDEOGRAPH + {0xEA71, 0x7635}, //11041 #CJK UNIFIED IDEOGRAPH + {0xEA72, 0x7632}, //11042 #CJK UNIFIED IDEOGRAPH + {0xEA73, 0x7630}, //11043 #CJK UNIFIED IDEOGRAPH + {0xEA74, 0x76BB}, //11044 #CJK UNIFIED IDEOGRAPH + {0xEA75, 0x76E6}, //11045 #CJK UNIFIED IDEOGRAPH + {0xEA76, 0x779A}, //11046 #CJK UNIFIED IDEOGRAPH + {0xEA77, 0x779D}, //11047 #CJK UNIFIED IDEOGRAPH + {0xEA78, 0x77A1}, //11048 #CJK UNIFIED IDEOGRAPH + {0xEA79, 0x779C}, //11049 #CJK UNIFIED IDEOGRAPH + {0xEA7A, 0x779B}, //11050 #CJK UNIFIED IDEOGRAPH + {0xEA7B, 0x77A2}, //11051 #CJK UNIFIED IDEOGRAPH + {0xEA7C, 0x77A3}, //11052 #CJK UNIFIED IDEOGRAPH + {0xEA7D, 0x7795}, //11053 #CJK UNIFIED IDEOGRAPH + {0xEA7E, 0x7799}, //11054 #CJK UNIFIED IDEOGRAPH + {0xEAA1, 0x7797}, //11055 #CJK UNIFIED IDEOGRAPH + {0xEAA2, 0x78DD}, //11056 #CJK UNIFIED IDEOGRAPH + {0xEAA3, 0x78E9}, //11057 #CJK UNIFIED IDEOGRAPH + {0xEAA4, 0x78E5}, //11058 #CJK UNIFIED IDEOGRAPH + {0xEAA5, 0x78EA}, //11059 #CJK UNIFIED IDEOGRAPH + {0xEAA6, 0x78DE}, //11060 #CJK UNIFIED IDEOGRAPH + {0xEAA7, 0x78E3}, //11061 #CJK UNIFIED IDEOGRAPH + {0xEAA8, 0x78DB}, //11062 #CJK UNIFIED IDEOGRAPH + {0xEAA9, 0x78E1}, //11063 #CJK UNIFIED IDEOGRAPH + {0xEAAA, 0x78E2}, //11064 #CJK UNIFIED IDEOGRAPH + {0xEAAB, 0x78ED}, //11065 #CJK UNIFIED IDEOGRAPH + {0xEAAC, 0x78DF}, //11066 #CJK UNIFIED IDEOGRAPH + {0xEAAD, 0x78E0}, //11067 #CJK UNIFIED IDEOGRAPH + {0xEAAE, 0x79A4}, //11068 #CJK UNIFIED IDEOGRAPH + {0xEAAF, 0x7A44}, //11069 #CJK UNIFIED IDEOGRAPH + {0xEAB0, 0x7A48}, //11070 #CJK UNIFIED IDEOGRAPH + {0xEAB1, 0x7A47}, //11071 #CJK UNIFIED IDEOGRAPH + {0xEAB2, 0x7AB6}, //11072 #CJK UNIFIED IDEOGRAPH + {0xEAB3, 0x7AB8}, //11073 #CJK UNIFIED IDEOGRAPH + {0xEAB4, 0x7AB5}, //11074 #CJK UNIFIED IDEOGRAPH + {0xEAB5, 0x7AB1}, //11075 #CJK UNIFIED IDEOGRAPH + {0xEAB6, 0x7AB7}, //11076 #CJK UNIFIED IDEOGRAPH + {0xEAB7, 0x7BDE}, //11077 #CJK UNIFIED IDEOGRAPH + {0xEAB8, 0x7BE3}, //11078 #CJK UNIFIED IDEOGRAPH + {0xEAB9, 0x7BE7}, //11079 #CJK UNIFIED IDEOGRAPH + {0xEABA, 0x7BDD}, //11080 #CJK UNIFIED IDEOGRAPH + {0xEABB, 0x7BD5}, //11081 #CJK UNIFIED IDEOGRAPH + {0xEABC, 0x7BE5}, //11082 #CJK UNIFIED IDEOGRAPH + {0xEABD, 0x7BDA}, //11083 #CJK UNIFIED IDEOGRAPH + {0xEABE, 0x7BE8}, //11084 #CJK UNIFIED IDEOGRAPH + {0xEABF, 0x7BF9}, //11085 #CJK UNIFIED IDEOGRAPH + {0xEAC0, 0x7BD4}, //11086 #CJK UNIFIED IDEOGRAPH + {0xEAC1, 0x7BEA}, //11087 #CJK UNIFIED IDEOGRAPH + {0xEAC2, 0x7BE2}, //11088 #CJK UNIFIED IDEOGRAPH + {0xEAC3, 0x7BDC}, //11089 #CJK UNIFIED IDEOGRAPH + {0xEAC4, 0x7BEB}, //11090 #CJK UNIFIED IDEOGRAPH + {0xEAC5, 0x7BD8}, //11091 #CJK UNIFIED IDEOGRAPH + {0xEAC6, 0x7BDF}, //11092 #CJK UNIFIED IDEOGRAPH + {0xEAC7, 0x7CD2}, //11093 #CJK UNIFIED IDEOGRAPH + {0xEAC8, 0x7CD4}, //11094 #CJK UNIFIED IDEOGRAPH + {0xEAC9, 0x7CD7}, //11095 #CJK UNIFIED IDEOGRAPH + {0xEACA, 0x7CD0}, //11096 #CJK UNIFIED IDEOGRAPH + {0xEACB, 0x7CD1}, //11097 #CJK UNIFIED IDEOGRAPH + {0xEACC, 0x7E12}, //11098 #CJK UNIFIED IDEOGRAPH + {0xEACD, 0x7E21}, //11099 #CJK UNIFIED IDEOGRAPH + {0xEACE, 0x7E17}, //11100 #CJK UNIFIED IDEOGRAPH + {0xEACF, 0x7E0C}, //11101 #CJK UNIFIED IDEOGRAPH + {0xEAD0, 0x7E1F}, //11102 #CJK UNIFIED IDEOGRAPH + {0xEAD1, 0x7E20}, //11103 #CJK UNIFIED IDEOGRAPH + {0xEAD2, 0x7E13}, //11104 #CJK UNIFIED IDEOGRAPH + {0xEAD3, 0x7E0E}, //11105 #CJK UNIFIED IDEOGRAPH + {0xEAD4, 0x7E1C}, //11106 #CJK UNIFIED IDEOGRAPH + {0xEAD5, 0x7E15}, //11107 #CJK UNIFIED IDEOGRAPH + {0xEAD6, 0x7E1A}, //11108 #CJK UNIFIED IDEOGRAPH + {0xEAD7, 0x7E22}, //11109 #CJK UNIFIED IDEOGRAPH + {0xEAD8, 0x7E0B}, //11110 #CJK UNIFIED IDEOGRAPH + {0xEAD9, 0x7E0F}, //11111 #CJK UNIFIED IDEOGRAPH + {0xEADA, 0x7E16}, //11112 #CJK UNIFIED IDEOGRAPH + {0xEADB, 0x7E0D}, //11113 #CJK UNIFIED IDEOGRAPH + {0xEADC, 0x7E14}, //11114 #CJK UNIFIED IDEOGRAPH + {0xEADD, 0x7E25}, //11115 #CJK UNIFIED IDEOGRAPH + {0xEADE, 0x7E24}, //11116 #CJK UNIFIED IDEOGRAPH + {0xEADF, 0x7F43}, //11117 #CJK UNIFIED IDEOGRAPH + {0xEAE0, 0x7F7B}, //11118 #CJK UNIFIED IDEOGRAPH + {0xEAE1, 0x7F7C}, //11119 #CJK UNIFIED IDEOGRAPH + {0xEAE2, 0x7F7A}, //11120 #CJK UNIFIED IDEOGRAPH + {0xEAE3, 0x7FB1}, //11121 #CJK UNIFIED IDEOGRAPH + {0xEAE4, 0x7FEF}, //11122 #CJK UNIFIED IDEOGRAPH + {0xEAE5, 0x802A}, //11123 #CJK UNIFIED IDEOGRAPH + {0xEAE6, 0x8029}, //11124 #CJK UNIFIED IDEOGRAPH + {0xEAE7, 0x806C}, //11125 #CJK UNIFIED IDEOGRAPH + {0xEAE8, 0x81B1}, //11126 #CJK UNIFIED IDEOGRAPH + {0xEAE9, 0x81A6}, //11127 #CJK UNIFIED IDEOGRAPH + {0xEAEA, 0x81AE}, //11128 #CJK UNIFIED IDEOGRAPH + {0xEAEB, 0x81B9}, //11129 #CJK UNIFIED IDEOGRAPH + {0xEAEC, 0x81B5}, //11130 #CJK UNIFIED IDEOGRAPH + {0xEAED, 0x81AB}, //11131 #CJK UNIFIED IDEOGRAPH + {0xEAEE, 0x81B0}, //11132 #CJK UNIFIED IDEOGRAPH + {0xEAEF, 0x81AC}, //11133 #CJK UNIFIED IDEOGRAPH + {0xEAF0, 0x81B4}, //11134 #CJK UNIFIED IDEOGRAPH + {0xEAF1, 0x81B2}, //11135 #CJK UNIFIED IDEOGRAPH + {0xEAF2, 0x81B7}, //11136 #CJK UNIFIED IDEOGRAPH + {0xEAF3, 0x81A7}, //11137 #CJK UNIFIED IDEOGRAPH + {0xEAF4, 0x81F2}, //11138 #CJK UNIFIED IDEOGRAPH + {0xEAF5, 0x8255}, //11139 #CJK UNIFIED IDEOGRAPH + {0xEAF6, 0x8256}, //11140 #CJK UNIFIED IDEOGRAPH + {0xEAF7, 0x8257}, //11141 #CJK UNIFIED IDEOGRAPH + {0xEAF8, 0x8556}, //11142 #CJK UNIFIED IDEOGRAPH + {0xEAF9, 0x8545}, //11143 #CJK UNIFIED IDEOGRAPH + {0xEAFA, 0x856B}, //11144 #CJK UNIFIED IDEOGRAPH + {0xEAFB, 0x854D}, //11145 #CJK UNIFIED IDEOGRAPH + {0xEAFC, 0x8553}, //11146 #CJK UNIFIED IDEOGRAPH + {0xEAFD, 0x8561}, //11147 #CJK UNIFIED IDEOGRAPH + {0xEAFE, 0x8558}, //11148 #CJK UNIFIED IDEOGRAPH + {0xEB40, 0x8540}, //11149 #CJK UNIFIED IDEOGRAPH + {0xEB41, 0x8546}, //11150 #CJK UNIFIED IDEOGRAPH + {0xEB42, 0x8564}, //11151 #CJK UNIFIED IDEOGRAPH + {0xEB43, 0x8541}, //11152 #CJK UNIFIED IDEOGRAPH + {0xEB44, 0x8562}, //11153 #CJK UNIFIED IDEOGRAPH + {0xEB45, 0x8544}, //11154 #CJK UNIFIED IDEOGRAPH + {0xEB46, 0x8551}, //11155 #CJK UNIFIED IDEOGRAPH + {0xEB47, 0x8547}, //11156 #CJK UNIFIED IDEOGRAPH + {0xEB48, 0x8563}, //11157 #CJK UNIFIED IDEOGRAPH + {0xEB49, 0x853E}, //11158 #CJK UNIFIED IDEOGRAPH + {0xEB4A, 0x855B}, //11159 #CJK UNIFIED IDEOGRAPH + {0xEB4B, 0x8571}, //11160 #CJK UNIFIED IDEOGRAPH + {0xEB4C, 0x854E}, //11161 #CJK UNIFIED IDEOGRAPH + {0xEB4D, 0x856E}, //11162 #CJK UNIFIED IDEOGRAPH + {0xEB4E, 0x8575}, //11163 #CJK UNIFIED IDEOGRAPH + {0xEB4F, 0x8555}, //11164 #CJK UNIFIED IDEOGRAPH + {0xEB50, 0x8567}, //11165 #CJK UNIFIED IDEOGRAPH + {0xEB51, 0x8560}, //11166 #CJK UNIFIED IDEOGRAPH + {0xEB52, 0x858C}, //11167 #CJK UNIFIED IDEOGRAPH + {0xEB53, 0x8566}, //11168 #CJK UNIFIED IDEOGRAPH + {0xEB54, 0x855D}, //11169 #CJK UNIFIED IDEOGRAPH + {0xEB55, 0x8554}, //11170 #CJK UNIFIED IDEOGRAPH + {0xEB56, 0x8565}, //11171 #CJK UNIFIED IDEOGRAPH + {0xEB57, 0x856C}, //11172 #CJK UNIFIED IDEOGRAPH + {0xEB58, 0x8663}, //11173 #CJK UNIFIED IDEOGRAPH + {0xEB59, 0x8665}, //11174 #CJK UNIFIED IDEOGRAPH + {0xEB5A, 0x8664}, //11175 #CJK UNIFIED IDEOGRAPH + {0xEB5B, 0x879B}, //11176 #CJK UNIFIED IDEOGRAPH + {0xEB5C, 0x878F}, //11177 #CJK UNIFIED IDEOGRAPH + {0xEB5D, 0x8797}, //11178 #CJK UNIFIED IDEOGRAPH + {0xEB5E, 0x8793}, //11179 #CJK UNIFIED IDEOGRAPH + {0xEB5F, 0x8792}, //11180 #CJK UNIFIED IDEOGRAPH + {0xEB60, 0x8788}, //11181 #CJK UNIFIED IDEOGRAPH + {0xEB61, 0x8781}, //11182 #CJK UNIFIED IDEOGRAPH + {0xEB62, 0x8796}, //11183 #CJK UNIFIED IDEOGRAPH + {0xEB63, 0x8798}, //11184 #CJK UNIFIED IDEOGRAPH + {0xEB64, 0x8779}, //11185 #CJK UNIFIED IDEOGRAPH + {0xEB65, 0x8787}, //11186 #CJK UNIFIED IDEOGRAPH + {0xEB66, 0x87A3}, //11187 #CJK UNIFIED IDEOGRAPH + {0xEB67, 0x8785}, //11188 #CJK UNIFIED IDEOGRAPH + {0xEB68, 0x8790}, //11189 #CJK UNIFIED IDEOGRAPH + {0xEB69, 0x8791}, //11190 #CJK UNIFIED IDEOGRAPH + {0xEB6A, 0x879D}, //11191 #CJK UNIFIED IDEOGRAPH + {0xEB6B, 0x8784}, //11192 #CJK UNIFIED IDEOGRAPH + {0xEB6C, 0x8794}, //11193 #CJK UNIFIED IDEOGRAPH + {0xEB6D, 0x879C}, //11194 #CJK UNIFIED IDEOGRAPH + {0xEB6E, 0x879A}, //11195 #CJK UNIFIED IDEOGRAPH + {0xEB6F, 0x8789}, //11196 #CJK UNIFIED IDEOGRAPH + {0xEB70, 0x891E}, //11197 #CJK UNIFIED IDEOGRAPH + {0xEB71, 0x8926}, //11198 #CJK UNIFIED IDEOGRAPH + {0xEB72, 0x8930}, //11199 #CJK UNIFIED IDEOGRAPH + {0xEB73, 0x892D}, //11200 #CJK UNIFIED IDEOGRAPH + {0xEB74, 0x892E}, //11201 #CJK UNIFIED IDEOGRAPH + {0xEB75, 0x8927}, //11202 #CJK UNIFIED IDEOGRAPH + {0xEB76, 0x8931}, //11203 #CJK UNIFIED IDEOGRAPH + {0xEB77, 0x8922}, //11204 #CJK UNIFIED IDEOGRAPH + {0xEB78, 0x8929}, //11205 #CJK UNIFIED IDEOGRAPH + {0xEB79, 0x8923}, //11206 #CJK UNIFIED IDEOGRAPH + {0xEB7A, 0x892F}, //11207 #CJK UNIFIED IDEOGRAPH + {0xEB7B, 0x892C}, //11208 #CJK UNIFIED IDEOGRAPH + {0xEB7C, 0x891F}, //11209 #CJK UNIFIED IDEOGRAPH + {0xEB7D, 0x89F1}, //11210 #CJK UNIFIED IDEOGRAPH + {0xEB7E, 0x8AE0}, //11211 #CJK UNIFIED IDEOGRAPH + {0xEBA1, 0x8AE2}, //11212 #CJK UNIFIED IDEOGRAPH + {0xEBA2, 0x8AF2}, //11213 #CJK UNIFIED IDEOGRAPH + {0xEBA3, 0x8AF4}, //11214 #CJK UNIFIED IDEOGRAPH + {0xEBA4, 0x8AF5}, //11215 #CJK UNIFIED IDEOGRAPH + {0xEBA5, 0x8ADD}, //11216 #CJK UNIFIED IDEOGRAPH + {0xEBA6, 0x8B14}, //11217 #CJK UNIFIED IDEOGRAPH + {0xEBA7, 0x8AE4}, //11218 #CJK UNIFIED IDEOGRAPH + {0xEBA8, 0x8ADF}, //11219 #CJK UNIFIED IDEOGRAPH + {0xEBA9, 0x8AF0}, //11220 #CJK UNIFIED IDEOGRAPH + {0xEBAA, 0x8AC8}, //11221 #CJK UNIFIED IDEOGRAPH + {0xEBAB, 0x8ADE}, //11222 #CJK UNIFIED IDEOGRAPH + {0xEBAC, 0x8AE1}, //11223 #CJK UNIFIED IDEOGRAPH + {0xEBAD, 0x8AE8}, //11224 #CJK UNIFIED IDEOGRAPH + {0xEBAE, 0x8AFF}, //11225 #CJK UNIFIED IDEOGRAPH + {0xEBAF, 0x8AEF}, //11226 #CJK UNIFIED IDEOGRAPH + {0xEBB0, 0x8AFB}, //11227 #CJK UNIFIED IDEOGRAPH + {0xEBB1, 0x8C91}, //11228 #CJK UNIFIED IDEOGRAPH + {0xEBB2, 0x8C92}, //11229 #CJK UNIFIED IDEOGRAPH + {0xEBB3, 0x8C90}, //11230 #CJK UNIFIED IDEOGRAPH + {0xEBB4, 0x8CF5}, //11231 #CJK UNIFIED IDEOGRAPH + {0xEBB5, 0x8CEE}, //11232 #CJK UNIFIED IDEOGRAPH + {0xEBB6, 0x8CF1}, //11233 #CJK UNIFIED IDEOGRAPH + {0xEBB7, 0x8CF0}, //11234 #CJK UNIFIED IDEOGRAPH + {0xEBB8, 0x8CF3}, //11235 #CJK UNIFIED IDEOGRAPH + {0xEBB9, 0x8D6C}, //11236 #CJK UNIFIED IDEOGRAPH + {0xEBBA, 0x8D6E}, //11237 #CJK UNIFIED IDEOGRAPH + {0xEBBB, 0x8DA5}, //11238 #CJK UNIFIED IDEOGRAPH + {0xEBBC, 0x8DA7}, //11239 #CJK UNIFIED IDEOGRAPH + {0xEBBD, 0x8E33}, //11240 #CJK UNIFIED IDEOGRAPH + {0xEBBE, 0x8E3E}, //11241 #CJK UNIFIED IDEOGRAPH + {0xEBBF, 0x8E38}, //11242 #CJK UNIFIED IDEOGRAPH + {0xEBC0, 0x8E40}, //11243 #CJK UNIFIED IDEOGRAPH + {0xEBC1, 0x8E45}, //11244 #CJK UNIFIED IDEOGRAPH + {0xEBC2, 0x8E36}, //11245 #CJK UNIFIED IDEOGRAPH + {0xEBC3, 0x8E3C}, //11246 #CJK UNIFIED IDEOGRAPH + {0xEBC4, 0x8E3D}, //11247 #CJK UNIFIED IDEOGRAPH + {0xEBC5, 0x8E41}, //11248 #CJK UNIFIED IDEOGRAPH + {0xEBC6, 0x8E30}, //11249 #CJK UNIFIED IDEOGRAPH + {0xEBC7, 0x8E3F}, //11250 #CJK UNIFIED IDEOGRAPH + {0xEBC8, 0x8EBD}, //11251 #CJK UNIFIED IDEOGRAPH + {0xEBC9, 0x8F36}, //11252 #CJK UNIFIED IDEOGRAPH + {0xEBCA, 0x8F2E}, //11253 #CJK UNIFIED IDEOGRAPH + {0xEBCB, 0x8F35}, //11254 #CJK UNIFIED IDEOGRAPH + {0xEBCC, 0x8F32}, //11255 #CJK UNIFIED IDEOGRAPH + {0xEBCD, 0x8F39}, //11256 #CJK UNIFIED IDEOGRAPH + {0xEBCE, 0x8F37}, //11257 #CJK UNIFIED IDEOGRAPH + {0xEBCF, 0x8F34}, //11258 #CJK UNIFIED IDEOGRAPH + {0xEBD0, 0x9076}, //11259 #CJK UNIFIED IDEOGRAPH + {0xEBD1, 0x9079}, //11260 #CJK UNIFIED IDEOGRAPH + {0xEBD2, 0x907B}, //11261 #CJK UNIFIED IDEOGRAPH + {0xEBD3, 0x9086}, //11262 #CJK UNIFIED IDEOGRAPH + {0xEBD4, 0x90FA}, //11263 #CJK UNIFIED IDEOGRAPH + {0xEBD5, 0x9133}, //11264 #CJK UNIFIED IDEOGRAPH + {0xEBD6, 0x9135}, //11265 #CJK UNIFIED IDEOGRAPH + {0xEBD7, 0x9136}, //11266 #CJK UNIFIED IDEOGRAPH + {0xEBD8, 0x9193}, //11267 #CJK UNIFIED IDEOGRAPH + {0xEBD9, 0x9190}, //11268 #CJK UNIFIED IDEOGRAPH + {0xEBDA, 0x9191}, //11269 #CJK UNIFIED IDEOGRAPH + {0xEBDB, 0x918D}, //11270 #CJK UNIFIED IDEOGRAPH + {0xEBDC, 0x918F}, //11271 #CJK UNIFIED IDEOGRAPH + {0xEBDD, 0x9327}, //11272 #CJK UNIFIED IDEOGRAPH + {0xEBDE, 0x931E}, //11273 #CJK UNIFIED IDEOGRAPH + {0xEBDF, 0x9308}, //11274 #CJK UNIFIED IDEOGRAPH + {0xEBE0, 0x931F}, //11275 #CJK UNIFIED IDEOGRAPH + {0xEBE1, 0x9306}, //11276 #CJK UNIFIED IDEOGRAPH + {0xEBE2, 0x930F}, //11277 #CJK UNIFIED IDEOGRAPH + {0xEBE3, 0x937A}, //11278 #CJK UNIFIED IDEOGRAPH + {0xEBE4, 0x9338}, //11279 #CJK UNIFIED IDEOGRAPH + {0xEBE5, 0x933C}, //11280 #CJK UNIFIED IDEOGRAPH + {0xEBE6, 0x931B}, //11281 #CJK UNIFIED IDEOGRAPH + {0xEBE7, 0x9323}, //11282 #CJK UNIFIED IDEOGRAPH + {0xEBE8, 0x9312}, //11283 #CJK UNIFIED IDEOGRAPH + {0xEBE9, 0x9301}, //11284 #CJK UNIFIED IDEOGRAPH + {0xEBEA, 0x9346}, //11285 #CJK UNIFIED IDEOGRAPH + {0xEBEB, 0x932D}, //11286 #CJK UNIFIED IDEOGRAPH + {0xEBEC, 0x930E}, //11287 #CJK UNIFIED IDEOGRAPH + {0xEBED, 0x930D}, //11288 #CJK UNIFIED IDEOGRAPH + {0xEBEE, 0x92CB}, //11289 #CJK UNIFIED IDEOGRAPH + {0xEBEF, 0x931D}, //11290 #CJK UNIFIED IDEOGRAPH + {0xEBF0, 0x92FA}, //11291 #CJK UNIFIED IDEOGRAPH + {0xEBF1, 0x9325}, //11292 #CJK UNIFIED IDEOGRAPH + {0xEBF2, 0x9313}, //11293 #CJK UNIFIED IDEOGRAPH + {0xEBF3, 0x92F9}, //11294 #CJK UNIFIED IDEOGRAPH + {0xEBF4, 0x92F7}, //11295 #CJK UNIFIED IDEOGRAPH + {0xEBF5, 0x9334}, //11296 #CJK UNIFIED IDEOGRAPH + {0xEBF6, 0x9302}, //11297 #CJK UNIFIED IDEOGRAPH + {0xEBF7, 0x9324}, //11298 #CJK UNIFIED IDEOGRAPH + {0xEBF8, 0x92FF}, //11299 #CJK UNIFIED IDEOGRAPH + {0xEBF9, 0x9329}, //11300 #CJK UNIFIED IDEOGRAPH + {0xEBFA, 0x9339}, //11301 #CJK UNIFIED IDEOGRAPH + {0xEBFB, 0x9335}, //11302 #CJK UNIFIED IDEOGRAPH + {0xEBFC, 0x932A}, //11303 #CJK UNIFIED IDEOGRAPH + {0xEBFD, 0x9314}, //11304 #CJK UNIFIED IDEOGRAPH + {0xEBFE, 0x930C}, //11305 #CJK UNIFIED IDEOGRAPH + {0xEC40, 0x930B}, //11306 #CJK UNIFIED IDEOGRAPH + {0xEC41, 0x92FE}, //11307 #CJK UNIFIED IDEOGRAPH + {0xEC42, 0x9309}, //11308 #CJK UNIFIED IDEOGRAPH + {0xEC43, 0x9300}, //11309 #CJK UNIFIED IDEOGRAPH + {0xEC44, 0x92FB}, //11310 #CJK UNIFIED IDEOGRAPH + {0xEC45, 0x9316}, //11311 #CJK UNIFIED IDEOGRAPH + {0xEC46, 0x95BC}, //11312 #CJK UNIFIED IDEOGRAPH + {0xEC47, 0x95CD}, //11313 #CJK UNIFIED IDEOGRAPH + {0xEC48, 0x95BE}, //11314 #CJK UNIFIED IDEOGRAPH + {0xEC49, 0x95B9}, //11315 #CJK UNIFIED IDEOGRAPH + {0xEC4A, 0x95BA}, //11316 #CJK UNIFIED IDEOGRAPH + {0xEC4B, 0x95B6}, //11317 #CJK UNIFIED IDEOGRAPH + {0xEC4C, 0x95BF}, //11318 #CJK UNIFIED IDEOGRAPH + {0xEC4D, 0x95B5}, //11319 #CJK UNIFIED IDEOGRAPH + {0xEC4E, 0x95BD}, //11320 #CJK UNIFIED IDEOGRAPH + {0xEC4F, 0x96A9}, //11321 #CJK UNIFIED IDEOGRAPH + {0xEC50, 0x96D4}, //11322 #CJK UNIFIED IDEOGRAPH + {0xEC51, 0x970B}, //11323 #CJK UNIFIED IDEOGRAPH + {0xEC52, 0x9712}, //11324 #CJK UNIFIED IDEOGRAPH + {0xEC53, 0x9710}, //11325 #CJK UNIFIED IDEOGRAPH + {0xEC54, 0x9799}, //11326 #CJK UNIFIED IDEOGRAPH + {0xEC55, 0x9797}, //11327 #CJK UNIFIED IDEOGRAPH + {0xEC56, 0x9794}, //11328 #CJK UNIFIED IDEOGRAPH + {0xEC57, 0x97F0}, //11329 #CJK UNIFIED IDEOGRAPH + {0xEC58, 0x97F8}, //11330 #CJK UNIFIED IDEOGRAPH + {0xEC59, 0x9835}, //11331 #CJK UNIFIED IDEOGRAPH + {0xEC5A, 0x982F}, //11332 #CJK UNIFIED IDEOGRAPH + {0xEC5B, 0x9832}, //11333 #CJK UNIFIED IDEOGRAPH + {0xEC5C, 0x9924}, //11334 #CJK UNIFIED IDEOGRAPH + {0xEC5D, 0x991F}, //11335 #CJK UNIFIED IDEOGRAPH + {0xEC5E, 0x9927}, //11336 #CJK UNIFIED IDEOGRAPH + {0xEC5F, 0x9929}, //11337 #CJK UNIFIED IDEOGRAPH + {0xEC60, 0x999E}, //11338 #CJK UNIFIED IDEOGRAPH + {0xEC61, 0x99EE}, //11339 #CJK UNIFIED IDEOGRAPH + {0xEC62, 0x99EC}, //11340 #CJK UNIFIED IDEOGRAPH + {0xEC63, 0x99E5}, //11341 #CJK UNIFIED IDEOGRAPH + {0xEC64, 0x99E4}, //11342 #CJK UNIFIED IDEOGRAPH + {0xEC65, 0x99F0}, //11343 #CJK UNIFIED IDEOGRAPH + {0xEC66, 0x99E3}, //11344 #CJK UNIFIED IDEOGRAPH + {0xEC67, 0x99EA}, //11345 #CJK UNIFIED IDEOGRAPH + {0xEC68, 0x99E9}, //11346 #CJK UNIFIED IDEOGRAPH + {0xEC69, 0x99E7}, //11347 #CJK UNIFIED IDEOGRAPH + {0xEC6A, 0x9AB9}, //11348 #CJK UNIFIED IDEOGRAPH + {0xEC6B, 0x9ABF}, //11349 #CJK UNIFIED IDEOGRAPH + {0xEC6C, 0x9AB4}, //11350 #CJK UNIFIED IDEOGRAPH + {0xEC6D, 0x9ABB}, //11351 #CJK UNIFIED IDEOGRAPH + {0xEC6E, 0x9AF6}, //11352 #CJK UNIFIED IDEOGRAPH + {0xEC6F, 0x9AFA}, //11353 #CJK UNIFIED IDEOGRAPH + {0xEC70, 0x9AF9}, //11354 #CJK UNIFIED IDEOGRAPH + {0xEC71, 0x9AF7}, //11355 #CJK UNIFIED IDEOGRAPH + {0xEC72, 0x9B33}, //11356 #CJK UNIFIED IDEOGRAPH + {0xEC73, 0x9B80}, //11357 #CJK UNIFIED IDEOGRAPH + {0xEC74, 0x9B85}, //11358 #CJK UNIFIED IDEOGRAPH + {0xEC75, 0x9B87}, //11359 #CJK UNIFIED IDEOGRAPH + {0xEC76, 0x9B7C}, //11360 #CJK UNIFIED IDEOGRAPH + {0xEC77, 0x9B7E}, //11361 #CJK UNIFIED IDEOGRAPH + {0xEC78, 0x9B7B}, //11362 #CJK UNIFIED IDEOGRAPH + {0xEC79, 0x9B82}, //11363 #CJK UNIFIED IDEOGRAPH + {0xEC7A, 0x9B93}, //11364 #CJK UNIFIED IDEOGRAPH + {0xEC7B, 0x9B92}, //11365 #CJK UNIFIED IDEOGRAPH + {0xEC7C, 0x9B90}, //11366 #CJK UNIFIED IDEOGRAPH + {0xEC7D, 0x9B7A}, //11367 #CJK UNIFIED IDEOGRAPH + {0xEC7E, 0x9B95}, //11368 #CJK UNIFIED IDEOGRAPH + {0xECA1, 0x9B7D}, //11369 #CJK UNIFIED IDEOGRAPH + {0xECA2, 0x9B88}, //11370 #CJK UNIFIED IDEOGRAPH + {0xECA3, 0x9D25}, //11371 #CJK UNIFIED IDEOGRAPH + {0xECA4, 0x9D17}, //11372 #CJK UNIFIED IDEOGRAPH + {0xECA5, 0x9D20}, //11373 #CJK UNIFIED IDEOGRAPH + {0xECA6, 0x9D1E}, //11374 #CJK UNIFIED IDEOGRAPH + {0xECA7, 0x9D14}, //11375 #CJK UNIFIED IDEOGRAPH + {0xECA8, 0x9D29}, //11376 #CJK UNIFIED IDEOGRAPH + {0xECA9, 0x9D1D}, //11377 #CJK UNIFIED IDEOGRAPH + {0xECAA, 0x9D18}, //11378 #CJK UNIFIED IDEOGRAPH + {0xECAB, 0x9D22}, //11379 #CJK UNIFIED IDEOGRAPH + {0xECAC, 0x9D10}, //11380 #CJK UNIFIED IDEOGRAPH + {0xECAD, 0x9D19}, //11381 #CJK UNIFIED IDEOGRAPH + {0xECAE, 0x9D1F}, //11382 #CJK UNIFIED IDEOGRAPH + {0xECAF, 0x9E88}, //11383 #CJK UNIFIED IDEOGRAPH + {0xECB0, 0x9E86}, //11384 #CJK UNIFIED IDEOGRAPH + {0xECB1, 0x9E87}, //11385 #CJK UNIFIED IDEOGRAPH + {0xECB2, 0x9EAE}, //11386 #CJK UNIFIED IDEOGRAPH + {0xECB3, 0x9EAD}, //11387 #CJK UNIFIED IDEOGRAPH + {0xECB4, 0x9ED5}, //11388 #CJK UNIFIED IDEOGRAPH + {0xECB5, 0x9ED6}, //11389 #CJK UNIFIED IDEOGRAPH + {0xECB6, 0x9EFA}, //11390 #CJK UNIFIED IDEOGRAPH + {0xECB7, 0x9F12}, //11391 #CJK UNIFIED IDEOGRAPH + {0xECB8, 0x9F3D}, //11392 #CJK UNIFIED IDEOGRAPH + {0xECB9, 0x5126}, //11393 #CJK UNIFIED IDEOGRAPH + {0xECBA, 0x5125}, //11394 #CJK UNIFIED IDEOGRAPH + {0xECBB, 0x5122}, //11395 #CJK UNIFIED IDEOGRAPH + {0xECBC, 0x5124}, //11396 #CJK UNIFIED IDEOGRAPH + {0xECBD, 0x5120}, //11397 #CJK UNIFIED IDEOGRAPH + {0xECBE, 0x5129}, //11398 #CJK UNIFIED IDEOGRAPH + {0xECBF, 0x52F4}, //11399 #CJK UNIFIED IDEOGRAPH + {0xECC0, 0x5693}, //11400 #CJK UNIFIED IDEOGRAPH + {0xECC1, 0x568C}, //11401 #CJK UNIFIED IDEOGRAPH + {0xECC2, 0x568D}, //11402 #CJK UNIFIED IDEOGRAPH + {0xECC3, 0x5686}, //11403 #CJK UNIFIED IDEOGRAPH + {0xECC4, 0x5684}, //11404 #CJK UNIFIED IDEOGRAPH + {0xECC5, 0x5683}, //11405 #CJK UNIFIED IDEOGRAPH + {0xECC6, 0x567E}, //11406 #CJK UNIFIED IDEOGRAPH + {0xECC7, 0x5682}, //11407 #CJK UNIFIED IDEOGRAPH + {0xECC8, 0x567F}, //11408 #CJK UNIFIED IDEOGRAPH + {0xECC9, 0x5681}, //11409 #CJK UNIFIED IDEOGRAPH + {0xECCA, 0x58D6}, //11410 #CJK UNIFIED IDEOGRAPH + {0xECCB, 0x58D4}, //11411 #CJK UNIFIED IDEOGRAPH + {0xECCC, 0x58CF}, //11412 #CJK UNIFIED IDEOGRAPH + {0xECCD, 0x58D2}, //11413 #CJK UNIFIED IDEOGRAPH + {0xECCE, 0x5B2D}, //11414 #CJK UNIFIED IDEOGRAPH + {0xECCF, 0x5B25}, //11415 #CJK UNIFIED IDEOGRAPH + {0xECD0, 0x5B32}, //11416 #CJK UNIFIED IDEOGRAPH + {0xECD1, 0x5B23}, //11417 #CJK UNIFIED IDEOGRAPH + {0xECD2, 0x5B2C}, //11418 #CJK UNIFIED IDEOGRAPH + {0xECD3, 0x5B27}, //11419 #CJK UNIFIED IDEOGRAPH + {0xECD4, 0x5B26}, //11420 #CJK UNIFIED IDEOGRAPH + {0xECD5, 0x5B2F}, //11421 #CJK UNIFIED IDEOGRAPH + {0xECD6, 0x5B2E}, //11422 #CJK UNIFIED IDEOGRAPH + {0xECD7, 0x5B7B}, //11423 #CJK UNIFIED IDEOGRAPH + {0xECD8, 0x5BF1}, //11424 #CJK UNIFIED IDEOGRAPH + {0xECD9, 0x5BF2}, //11425 #CJK UNIFIED IDEOGRAPH + {0xECDA, 0x5DB7}, //11426 #CJK UNIFIED IDEOGRAPH + {0xECDB, 0x5E6C}, //11427 #CJK UNIFIED IDEOGRAPH + {0xECDC, 0x5E6A}, //11428 #CJK UNIFIED IDEOGRAPH + {0xECDD, 0x5FBE}, //11429 #CJK UNIFIED IDEOGRAPH + {0xECDE, 0x5FBB}, //11430 #CJK UNIFIED IDEOGRAPH + {0xECDF, 0x61C3}, //11431 #CJK UNIFIED IDEOGRAPH + {0xECE0, 0x61B5}, //11432 #CJK UNIFIED IDEOGRAPH + {0xECE1, 0x61BC}, //11433 #CJK UNIFIED IDEOGRAPH + {0xECE2, 0x61E7}, //11434 #CJK UNIFIED IDEOGRAPH + {0xECE3, 0x61E0}, //11435 #CJK UNIFIED IDEOGRAPH + {0xECE4, 0x61E5}, //11436 #CJK UNIFIED IDEOGRAPH + {0xECE5, 0x61E4}, //11437 #CJK UNIFIED IDEOGRAPH + {0xECE6, 0x61E8}, //11438 #CJK UNIFIED IDEOGRAPH + {0xECE7, 0x61DE}, //11439 #CJK UNIFIED IDEOGRAPH + {0xECE8, 0x64EF}, //11440 #CJK UNIFIED IDEOGRAPH + {0xECE9, 0x64E9}, //11441 #CJK UNIFIED IDEOGRAPH + {0xECEA, 0x64E3}, //11442 #CJK UNIFIED IDEOGRAPH + {0xECEB, 0x64EB}, //11443 #CJK UNIFIED IDEOGRAPH + {0xECEC, 0x64E4}, //11444 #CJK UNIFIED IDEOGRAPH + {0xECED, 0x64E8}, //11445 #CJK UNIFIED IDEOGRAPH + {0xECEE, 0x6581}, //11446 #CJK UNIFIED IDEOGRAPH + {0xECEF, 0x6580}, //11447 #CJK UNIFIED IDEOGRAPH + {0xECF0, 0x65B6}, //11448 #CJK UNIFIED IDEOGRAPH + {0xECF1, 0x65DA}, //11449 #CJK UNIFIED IDEOGRAPH + {0xECF2, 0x66D2}, //11450 #CJK UNIFIED IDEOGRAPH + {0xECF3, 0x6A8D}, //11451 #CJK UNIFIED IDEOGRAPH + {0xECF4, 0x6A96}, //11452 #CJK UNIFIED IDEOGRAPH + {0xECF5, 0x6A81}, //11453 #CJK UNIFIED IDEOGRAPH + {0xECF6, 0x6AA5}, //11454 #CJK UNIFIED IDEOGRAPH + {0xECF7, 0x6A89}, //11455 #CJK UNIFIED IDEOGRAPH + {0xECF8, 0x6A9F}, //11456 #CJK UNIFIED IDEOGRAPH + {0xECF9, 0x6A9B}, //11457 #CJK UNIFIED IDEOGRAPH + {0xECFA, 0x6AA1}, //11458 #CJK UNIFIED IDEOGRAPH + {0xECFB, 0x6A9E}, //11459 #CJK UNIFIED IDEOGRAPH + {0xECFC, 0x6A87}, //11460 #CJK UNIFIED IDEOGRAPH + {0xECFD, 0x6A93}, //11461 #CJK UNIFIED IDEOGRAPH + {0xECFE, 0x6A8E}, //11462 #CJK UNIFIED IDEOGRAPH + {0xED40, 0x6A95}, //11463 #CJK UNIFIED IDEOGRAPH + {0xED41, 0x6A83}, //11464 #CJK UNIFIED IDEOGRAPH + {0xED42, 0x6AA8}, //11465 #CJK UNIFIED IDEOGRAPH + {0xED43, 0x6AA4}, //11466 #CJK UNIFIED IDEOGRAPH + {0xED44, 0x6A91}, //11467 #CJK UNIFIED IDEOGRAPH + {0xED45, 0x6A7F}, //11468 #CJK UNIFIED IDEOGRAPH + {0xED46, 0x6AA6}, //11469 #CJK UNIFIED IDEOGRAPH + {0xED47, 0x6A9A}, //11470 #CJK UNIFIED IDEOGRAPH + {0xED48, 0x6A85}, //11471 #CJK UNIFIED IDEOGRAPH + {0xED49, 0x6A8C}, //11472 #CJK UNIFIED IDEOGRAPH + {0xED4A, 0x6A92}, //11473 #CJK UNIFIED IDEOGRAPH + {0xED4B, 0x6B5B}, //11474 #CJK UNIFIED IDEOGRAPH + {0xED4C, 0x6BAD}, //11475 #CJK UNIFIED IDEOGRAPH + {0xED4D, 0x6C09}, //11476 #CJK UNIFIED IDEOGRAPH + {0xED4E, 0x6FCC}, //11477 #CJK UNIFIED IDEOGRAPH + {0xED4F, 0x6FA9}, //11478 #CJK UNIFIED IDEOGRAPH + {0xED50, 0x6FF4}, //11479 #CJK UNIFIED IDEOGRAPH + {0xED51, 0x6FD4}, //11480 #CJK UNIFIED IDEOGRAPH + {0xED52, 0x6FE3}, //11481 #CJK UNIFIED IDEOGRAPH + {0xED53, 0x6FDC}, //11482 #CJK UNIFIED IDEOGRAPH + {0xED54, 0x6FED}, //11483 #CJK UNIFIED IDEOGRAPH + {0xED55, 0x6FE7}, //11484 #CJK UNIFIED IDEOGRAPH + {0xED56, 0x6FE6}, //11485 #CJK UNIFIED IDEOGRAPH + {0xED57, 0x6FDE}, //11486 #CJK UNIFIED IDEOGRAPH + {0xED58, 0x6FF2}, //11487 #CJK UNIFIED IDEOGRAPH + {0xED59, 0x6FDD}, //11488 #CJK UNIFIED IDEOGRAPH + {0xED5A, 0x6FE2}, //11489 #CJK UNIFIED IDEOGRAPH + {0xED5B, 0x6FE8}, //11490 #CJK UNIFIED IDEOGRAPH + {0xED5C, 0x71E1}, //11491 #CJK UNIFIED IDEOGRAPH + {0xED5D, 0x71F1}, //11492 #CJK UNIFIED IDEOGRAPH + {0xED5E, 0x71E8}, //11493 #CJK UNIFIED IDEOGRAPH + {0xED5F, 0x71F2}, //11494 #CJK UNIFIED IDEOGRAPH + {0xED60, 0x71E4}, //11495 #CJK UNIFIED IDEOGRAPH + {0xED61, 0x71F0}, //11496 #CJK UNIFIED IDEOGRAPH + {0xED62, 0x71E2}, //11497 #CJK UNIFIED IDEOGRAPH + {0xED63, 0x7373}, //11498 #CJK UNIFIED IDEOGRAPH + {0xED64, 0x736E}, //11499 #CJK UNIFIED IDEOGRAPH + {0xED65, 0x736F}, //11500 #CJK UNIFIED IDEOGRAPH + {0xED66, 0x7497}, //11501 #CJK UNIFIED IDEOGRAPH + {0xED67, 0x74B2}, //11502 #CJK UNIFIED IDEOGRAPH + {0xED68, 0x74AB}, //11503 #CJK UNIFIED IDEOGRAPH + {0xED69, 0x7490}, //11504 #CJK UNIFIED IDEOGRAPH + {0xED6A, 0x74AA}, //11505 #CJK UNIFIED IDEOGRAPH + {0xED6B, 0x74AD}, //11506 #CJK UNIFIED IDEOGRAPH + {0xED6C, 0x74B1}, //11507 #CJK UNIFIED IDEOGRAPH + {0xED6D, 0x74A5}, //11508 #CJK UNIFIED IDEOGRAPH + {0xED6E, 0x74AF}, //11509 #CJK UNIFIED IDEOGRAPH + {0xED6F, 0x7510}, //11510 #CJK UNIFIED IDEOGRAPH + {0xED70, 0x7511}, //11511 #CJK UNIFIED IDEOGRAPH + {0xED71, 0x7512}, //11512 #CJK UNIFIED IDEOGRAPH + {0xED72, 0x750F}, //11513 #CJK UNIFIED IDEOGRAPH + {0xED73, 0x7584}, //11514 #CJK UNIFIED IDEOGRAPH + {0xED74, 0x7643}, //11515 #CJK UNIFIED IDEOGRAPH + {0xED75, 0x7648}, //11516 #CJK UNIFIED IDEOGRAPH + {0xED76, 0x7649}, //11517 #CJK UNIFIED IDEOGRAPH + {0xED77, 0x7647}, //11518 #CJK UNIFIED IDEOGRAPH + {0xED78, 0x76A4}, //11519 #CJK UNIFIED IDEOGRAPH + {0xED79, 0x76E9}, //11520 #CJK UNIFIED IDEOGRAPH + {0xED7A, 0x77B5}, //11521 #CJK UNIFIED IDEOGRAPH + {0xED7B, 0x77AB}, //11522 #CJK UNIFIED IDEOGRAPH + {0xED7C, 0x77B2}, //11523 #CJK UNIFIED IDEOGRAPH + {0xED7D, 0x77B7}, //11524 #CJK UNIFIED IDEOGRAPH + {0xED7E, 0x77B6}, //11525 #CJK UNIFIED IDEOGRAPH + {0xEDA1, 0x77B4}, //11526 #CJK UNIFIED IDEOGRAPH + {0xEDA2, 0x77B1}, //11527 #CJK UNIFIED IDEOGRAPH + {0xEDA3, 0x77A8}, //11528 #CJK UNIFIED IDEOGRAPH + {0xEDA4, 0x77F0}, //11529 #CJK UNIFIED IDEOGRAPH + {0xEDA5, 0x78F3}, //11530 #CJK UNIFIED IDEOGRAPH + {0xEDA6, 0x78FD}, //11531 #CJK UNIFIED IDEOGRAPH + {0xEDA7, 0x7902}, //11532 #CJK UNIFIED IDEOGRAPH + {0xEDA8, 0x78FB}, //11533 #CJK UNIFIED IDEOGRAPH + {0xEDA9, 0x78FC}, //11534 #CJK UNIFIED IDEOGRAPH + {0xEDAA, 0x78F2}, //11535 #CJK UNIFIED IDEOGRAPH + {0xEDAB, 0x7905}, //11536 #CJK UNIFIED IDEOGRAPH + {0xEDAC, 0x78F9}, //11537 #CJK UNIFIED IDEOGRAPH + {0xEDAD, 0x78FE}, //11538 #CJK UNIFIED IDEOGRAPH + {0xEDAE, 0x7904}, //11539 #CJK UNIFIED IDEOGRAPH + {0xEDAF, 0x79AB}, //11540 #CJK UNIFIED IDEOGRAPH + {0xEDB0, 0x79A8}, //11541 #CJK UNIFIED IDEOGRAPH + {0xEDB1, 0x7A5C}, //11542 #CJK UNIFIED IDEOGRAPH + {0xEDB2, 0x7A5B}, //11543 #CJK UNIFIED IDEOGRAPH + {0xEDB3, 0x7A56}, //11544 #CJK UNIFIED IDEOGRAPH + {0xEDB4, 0x7A58}, //11545 #CJK UNIFIED IDEOGRAPH + {0xEDB5, 0x7A54}, //11546 #CJK UNIFIED IDEOGRAPH + {0xEDB6, 0x7A5A}, //11547 #CJK UNIFIED IDEOGRAPH + {0xEDB7, 0x7ABE}, //11548 #CJK UNIFIED IDEOGRAPH + {0xEDB8, 0x7AC0}, //11549 #CJK UNIFIED IDEOGRAPH + {0xEDB9, 0x7AC1}, //11550 #CJK UNIFIED IDEOGRAPH + {0xEDBA, 0x7C05}, //11551 #CJK UNIFIED IDEOGRAPH + {0xEDBB, 0x7C0F}, //11552 #CJK UNIFIED IDEOGRAPH + {0xEDBC, 0x7BF2}, //11553 #CJK UNIFIED IDEOGRAPH + {0xEDBD, 0x7C00}, //11554 #CJK UNIFIED IDEOGRAPH + {0xEDBE, 0x7BFF}, //11555 #CJK UNIFIED IDEOGRAPH + {0xEDBF, 0x7BFB}, //11556 #CJK UNIFIED IDEOGRAPH + {0xEDC0, 0x7C0E}, //11557 #CJK UNIFIED IDEOGRAPH + {0xEDC1, 0x7BF4}, //11558 #CJK UNIFIED IDEOGRAPH + {0xEDC2, 0x7C0B}, //11559 #CJK UNIFIED IDEOGRAPH + {0xEDC3, 0x7BF3}, //11560 #CJK UNIFIED IDEOGRAPH + {0xEDC4, 0x7C02}, //11561 #CJK UNIFIED IDEOGRAPH + {0xEDC5, 0x7C09}, //11562 #CJK UNIFIED IDEOGRAPH + {0xEDC6, 0x7C03}, //11563 #CJK UNIFIED IDEOGRAPH + {0xEDC7, 0x7C01}, //11564 #CJK UNIFIED IDEOGRAPH + {0xEDC8, 0x7BF8}, //11565 #CJK UNIFIED IDEOGRAPH + {0xEDC9, 0x7BFD}, //11566 #CJK UNIFIED IDEOGRAPH + {0xEDCA, 0x7C06}, //11567 #CJK UNIFIED IDEOGRAPH + {0xEDCB, 0x7BF0}, //11568 #CJK UNIFIED IDEOGRAPH + {0xEDCC, 0x7BF1}, //11569 #CJK UNIFIED IDEOGRAPH + {0xEDCD, 0x7C10}, //11570 #CJK UNIFIED IDEOGRAPH + {0xEDCE, 0x7C0A}, //11571 #CJK UNIFIED IDEOGRAPH + {0xEDCF, 0x7CE8}, //11572 #CJK UNIFIED IDEOGRAPH + {0xEDD0, 0x7E2D}, //11573 #CJK UNIFIED IDEOGRAPH + {0xEDD1, 0x7E3C}, //11574 #CJK UNIFIED IDEOGRAPH + {0xEDD2, 0x7E42}, //11575 #CJK UNIFIED IDEOGRAPH + {0xEDD3, 0x7E33}, //11576 #CJK UNIFIED IDEOGRAPH + {0xEDD4, 0x9848}, //11577 #CJK UNIFIED IDEOGRAPH + {0xEDD5, 0x7E38}, //11578 #CJK UNIFIED IDEOGRAPH + {0xEDD6, 0x7E2A}, //11579 #CJK UNIFIED IDEOGRAPH + {0xEDD7, 0x7E49}, //11580 #CJK UNIFIED IDEOGRAPH + {0xEDD8, 0x7E40}, //11581 #CJK UNIFIED IDEOGRAPH + {0xEDD9, 0x7E47}, //11582 #CJK UNIFIED IDEOGRAPH + {0xEDDA, 0x7E29}, //11583 #CJK UNIFIED IDEOGRAPH + {0xEDDB, 0x7E4C}, //11584 #CJK UNIFIED IDEOGRAPH + {0xEDDC, 0x7E30}, //11585 #CJK UNIFIED IDEOGRAPH + {0xEDDD, 0x7E3B}, //11586 #CJK UNIFIED IDEOGRAPH + {0xEDDE, 0x7E36}, //11587 #CJK UNIFIED IDEOGRAPH + {0xEDDF, 0x7E44}, //11588 #CJK UNIFIED IDEOGRAPH + {0xEDE0, 0x7E3A}, //11589 #CJK UNIFIED IDEOGRAPH + {0xEDE1, 0x7F45}, //11590 #CJK UNIFIED IDEOGRAPH + {0xEDE2, 0x7F7F}, //11591 #CJK UNIFIED IDEOGRAPH + {0xEDE3, 0x7F7E}, //11592 #CJK UNIFIED IDEOGRAPH + {0xEDE4, 0x7F7D}, //11593 #CJK UNIFIED IDEOGRAPH + {0xEDE5, 0x7FF4}, //11594 #CJK UNIFIED IDEOGRAPH + {0xEDE6, 0x7FF2}, //11595 #CJK UNIFIED IDEOGRAPH + {0xEDE7, 0x802C}, //11596 #CJK UNIFIED IDEOGRAPH + {0xEDE8, 0x81BB}, //11597 #CJK UNIFIED IDEOGRAPH + {0xEDE9, 0x81C4}, //11598 #CJK UNIFIED IDEOGRAPH + {0xEDEA, 0x81CC}, //11599 #CJK UNIFIED IDEOGRAPH + {0xEDEB, 0x81CA}, //11600 #CJK UNIFIED IDEOGRAPH + {0xEDEC, 0x81C5}, //11601 #CJK UNIFIED IDEOGRAPH + {0xEDED, 0x81C7}, //11602 #CJK UNIFIED IDEOGRAPH + {0xEDEE, 0x81BC}, //11603 #CJK UNIFIED IDEOGRAPH + {0xEDEF, 0x81E9}, //11604 #CJK UNIFIED IDEOGRAPH + {0xEDF0, 0x825B}, //11605 #CJK UNIFIED IDEOGRAPH + {0xEDF1, 0x825A}, //11606 #CJK UNIFIED IDEOGRAPH + {0xEDF2, 0x825C}, //11607 #CJK UNIFIED IDEOGRAPH + {0xEDF3, 0x8583}, //11608 #CJK UNIFIED IDEOGRAPH + {0xEDF4, 0x8580}, //11609 #CJK UNIFIED IDEOGRAPH + {0xEDF5, 0x858F}, //11610 #CJK UNIFIED IDEOGRAPH + {0xEDF6, 0x85A7}, //11611 #CJK UNIFIED IDEOGRAPH + {0xEDF7, 0x8595}, //11612 #CJK UNIFIED IDEOGRAPH + {0xEDF8, 0x85A0}, //11613 #CJK UNIFIED IDEOGRAPH + {0xEDF9, 0x858B}, //11614 #CJK UNIFIED IDEOGRAPH + {0xEDFA, 0x85A3}, //11615 #CJK UNIFIED IDEOGRAPH + {0xEDFB, 0x857B}, //11616 #CJK UNIFIED IDEOGRAPH + {0xEDFC, 0x85A4}, //11617 #CJK UNIFIED IDEOGRAPH + {0xEDFD, 0x859A}, //11618 #CJK UNIFIED IDEOGRAPH + {0xEDFE, 0x859E}, //11619 #CJK UNIFIED IDEOGRAPH + {0xEE40, 0x8577}, //11620 #CJK UNIFIED IDEOGRAPH + {0xEE41, 0x857C}, //11621 #CJK UNIFIED IDEOGRAPH + {0xEE42, 0x8589}, //11622 #CJK UNIFIED IDEOGRAPH + {0xEE43, 0x85A1}, //11623 #CJK UNIFIED IDEOGRAPH + {0xEE44, 0x857A}, //11624 #CJK UNIFIED IDEOGRAPH + {0xEE45, 0x8578}, //11625 #CJK UNIFIED IDEOGRAPH + {0xEE46, 0x8557}, //11626 #CJK UNIFIED IDEOGRAPH + {0xEE47, 0x858E}, //11627 #CJK UNIFIED IDEOGRAPH + {0xEE48, 0x8596}, //11628 #CJK UNIFIED IDEOGRAPH + {0xEE49, 0x8586}, //11629 #CJK UNIFIED IDEOGRAPH + {0xEE4A, 0x858D}, //11630 #CJK UNIFIED IDEOGRAPH + {0xEE4B, 0x8599}, //11631 #CJK UNIFIED IDEOGRAPH + {0xEE4C, 0x859D}, //11632 #CJK UNIFIED IDEOGRAPH + {0xEE4D, 0x8581}, //11633 #CJK UNIFIED IDEOGRAPH + {0xEE4E, 0x85A2}, //11634 #CJK UNIFIED IDEOGRAPH + {0xEE4F, 0x8582}, //11635 #CJK UNIFIED IDEOGRAPH + {0xEE50, 0x8588}, //11636 #CJK UNIFIED IDEOGRAPH + {0xEE51, 0x8585}, //11637 #CJK UNIFIED IDEOGRAPH + {0xEE52, 0x8579}, //11638 #CJK UNIFIED IDEOGRAPH + {0xEE53, 0x8576}, //11639 #CJK UNIFIED IDEOGRAPH + {0xEE54, 0x8598}, //11640 #CJK UNIFIED IDEOGRAPH + {0xEE55, 0x8590}, //11641 #CJK UNIFIED IDEOGRAPH + {0xEE56, 0x859F}, //11642 #CJK UNIFIED IDEOGRAPH + {0xEE57, 0x8668}, //11643 #CJK UNIFIED IDEOGRAPH + {0xEE58, 0x87BE}, //11644 #CJK UNIFIED IDEOGRAPH + {0xEE59, 0x87AA}, //11645 #CJK UNIFIED IDEOGRAPH + {0xEE5A, 0x87AD}, //11646 #CJK UNIFIED IDEOGRAPH + {0xEE5B, 0x87C5}, //11647 #CJK UNIFIED IDEOGRAPH + {0xEE5C, 0x87B0}, //11648 #CJK UNIFIED IDEOGRAPH + {0xEE5D, 0x87AC}, //11649 #CJK UNIFIED IDEOGRAPH + {0xEE5E, 0x87B9}, //11650 #CJK UNIFIED IDEOGRAPH + {0xEE5F, 0x87B5}, //11651 #CJK UNIFIED IDEOGRAPH + {0xEE60, 0x87BC}, //11652 #CJK UNIFIED IDEOGRAPH + {0xEE61, 0x87AE}, //11653 #CJK UNIFIED IDEOGRAPH + {0xEE62, 0x87C9}, //11654 #CJK UNIFIED IDEOGRAPH + {0xEE63, 0x87C3}, //11655 #CJK UNIFIED IDEOGRAPH + {0xEE64, 0x87C2}, //11656 #CJK UNIFIED IDEOGRAPH + {0xEE65, 0x87CC}, //11657 #CJK UNIFIED IDEOGRAPH + {0xEE66, 0x87B7}, //11658 #CJK UNIFIED IDEOGRAPH + {0xEE67, 0x87AF}, //11659 #CJK UNIFIED IDEOGRAPH + {0xEE68, 0x87C4}, //11660 #CJK UNIFIED IDEOGRAPH + {0xEE69, 0x87CA}, //11661 #CJK UNIFIED IDEOGRAPH + {0xEE6A, 0x87B4}, //11662 #CJK UNIFIED IDEOGRAPH + {0xEE6B, 0x87B6}, //11663 #CJK UNIFIED IDEOGRAPH + {0xEE6C, 0x87BF}, //11664 #CJK UNIFIED IDEOGRAPH + {0xEE6D, 0x87B8}, //11665 #CJK UNIFIED IDEOGRAPH + {0xEE6E, 0x87BD}, //11666 #CJK UNIFIED IDEOGRAPH + {0xEE6F, 0x87DE}, //11667 #CJK UNIFIED IDEOGRAPH + {0xEE70, 0x87B2}, //11668 #CJK UNIFIED IDEOGRAPH + {0xEE71, 0x8935}, //11669 #CJK UNIFIED IDEOGRAPH + {0xEE72, 0x8933}, //11670 #CJK UNIFIED IDEOGRAPH + {0xEE73, 0x893C}, //11671 #CJK UNIFIED IDEOGRAPH + {0xEE74, 0x893E}, //11672 #CJK UNIFIED IDEOGRAPH + {0xEE75, 0x8941}, //11673 #CJK UNIFIED IDEOGRAPH + {0xEE76, 0x8952}, //11674 #CJK UNIFIED IDEOGRAPH + {0xEE77, 0x8937}, //11675 #CJK UNIFIED IDEOGRAPH + {0xEE78, 0x8942}, //11676 #CJK UNIFIED IDEOGRAPH + {0xEE79, 0x89AD}, //11677 #CJK UNIFIED IDEOGRAPH + {0xEE7A, 0x89AF}, //11678 #CJK UNIFIED IDEOGRAPH + {0xEE7B, 0x89AE}, //11679 #CJK UNIFIED IDEOGRAPH + {0xEE7C, 0x89F2}, //11680 #CJK UNIFIED IDEOGRAPH + {0xEE7D, 0x89F3}, //11681 #CJK UNIFIED IDEOGRAPH + {0xEE7E, 0x8B1E}, //11682 #CJK UNIFIED IDEOGRAPH + {0xEEA1, 0x8B18}, //11683 #CJK UNIFIED IDEOGRAPH + {0xEEA2, 0x8B16}, //11684 #CJK UNIFIED IDEOGRAPH + {0xEEA3, 0x8B11}, //11685 #CJK UNIFIED IDEOGRAPH + {0xEEA4, 0x8B05}, //11686 #CJK UNIFIED IDEOGRAPH + {0xEEA5, 0x8B0B}, //11687 #CJK UNIFIED IDEOGRAPH + {0xEEA6, 0x8B22}, //11688 #CJK UNIFIED IDEOGRAPH + {0xEEA7, 0x8B0F}, //11689 #CJK UNIFIED IDEOGRAPH + {0xEEA8, 0x8B12}, //11690 #CJK UNIFIED IDEOGRAPH + {0xEEA9, 0x8B15}, //11691 #CJK UNIFIED IDEOGRAPH + {0xEEAA, 0x8B07}, //11692 #CJK UNIFIED IDEOGRAPH + {0xEEAB, 0x8B0D}, //11693 #CJK UNIFIED IDEOGRAPH + {0xEEAC, 0x8B08}, //11694 #CJK UNIFIED IDEOGRAPH + {0xEEAD, 0x8B06}, //11695 #CJK UNIFIED IDEOGRAPH + {0xEEAE, 0x8B1C}, //11696 #CJK UNIFIED IDEOGRAPH + {0xEEAF, 0x8B13}, //11697 #CJK UNIFIED IDEOGRAPH + {0xEEB0, 0x8B1A}, //11698 #CJK UNIFIED IDEOGRAPH + {0xEEB1, 0x8C4F}, //11699 #CJK UNIFIED IDEOGRAPH + {0xEEB2, 0x8C70}, //11700 #CJK UNIFIED IDEOGRAPH + {0xEEB3, 0x8C72}, //11701 #CJK UNIFIED IDEOGRAPH + {0xEEB4, 0x8C71}, //11702 #CJK UNIFIED IDEOGRAPH + {0xEEB5, 0x8C6F}, //11703 #CJK UNIFIED IDEOGRAPH + {0xEEB6, 0x8C95}, //11704 #CJK UNIFIED IDEOGRAPH + {0xEEB7, 0x8C94}, //11705 #CJK UNIFIED IDEOGRAPH + {0xEEB8, 0x8CF9}, //11706 #CJK UNIFIED IDEOGRAPH + {0xEEB9, 0x8D6F}, //11707 #CJK UNIFIED IDEOGRAPH + {0xEEBA, 0x8E4E}, //11708 #CJK UNIFIED IDEOGRAPH + {0xEEBB, 0x8E4D}, //11709 #CJK UNIFIED IDEOGRAPH + {0xEEBC, 0x8E53}, //11710 #CJK UNIFIED IDEOGRAPH + {0xEEBD, 0x8E50}, //11711 #CJK UNIFIED IDEOGRAPH + {0xEEBE, 0x8E4C}, //11712 #CJK UNIFIED IDEOGRAPH + {0xEEBF, 0x8E47}, //11713 #CJK UNIFIED IDEOGRAPH + {0xEEC0, 0x8F43}, //11714 #CJK UNIFIED IDEOGRAPH + {0xEEC1, 0x8F40}, //11715 #CJK UNIFIED IDEOGRAPH + {0xEEC2, 0x9085}, //11716 #CJK UNIFIED IDEOGRAPH + {0xEEC3, 0x907E}, //11717 #CJK UNIFIED IDEOGRAPH + {0xEEC4, 0x9138}, //11718 #CJK UNIFIED IDEOGRAPH + {0xEEC5, 0x919A}, //11719 #CJK UNIFIED IDEOGRAPH + {0xEEC6, 0x91A2}, //11720 #CJK UNIFIED IDEOGRAPH + {0xEEC7, 0x919B}, //11721 #CJK UNIFIED IDEOGRAPH + {0xEEC8, 0x9199}, //11722 #CJK UNIFIED IDEOGRAPH + {0xEEC9, 0x919F}, //11723 #CJK UNIFIED IDEOGRAPH + {0xEECA, 0x91A1}, //11724 #CJK UNIFIED IDEOGRAPH + {0xEECB, 0x919D}, //11725 #CJK UNIFIED IDEOGRAPH + {0xEECC, 0x91A0}, //11726 #CJK UNIFIED IDEOGRAPH + {0xEECD, 0x93A1}, //11727 #CJK UNIFIED IDEOGRAPH + {0xEECE, 0x9383}, //11728 #CJK UNIFIED IDEOGRAPH + {0xEECF, 0x93AF}, //11729 #CJK UNIFIED IDEOGRAPH + {0xEED0, 0x9364}, //11730 #CJK UNIFIED IDEOGRAPH + {0xEED1, 0x9356}, //11731 #CJK UNIFIED IDEOGRAPH + {0xEED2, 0x9347}, //11732 #CJK UNIFIED IDEOGRAPH + {0xEED3, 0x937C}, //11733 #CJK UNIFIED IDEOGRAPH + {0xEED4, 0x9358}, //11734 #CJK UNIFIED IDEOGRAPH + {0xEED5, 0x935C}, //11735 #CJK UNIFIED IDEOGRAPH + {0xEED6, 0x9376}, //11736 #CJK UNIFIED IDEOGRAPH + {0xEED7, 0x9349}, //11737 #CJK UNIFIED IDEOGRAPH + {0xEED8, 0x9350}, //11738 #CJK UNIFIED IDEOGRAPH + {0xEED9, 0x9351}, //11739 #CJK UNIFIED IDEOGRAPH + {0xEEDA, 0x9360}, //11740 #CJK UNIFIED IDEOGRAPH + {0xEEDB, 0x936D}, //11741 #CJK UNIFIED IDEOGRAPH + {0xEEDC, 0x938F}, //11742 #CJK UNIFIED IDEOGRAPH + {0xEEDD, 0x934C}, //11743 #CJK UNIFIED IDEOGRAPH + {0xEEDE, 0x936A}, //11744 #CJK UNIFIED IDEOGRAPH + {0xEEDF, 0x9379}, //11745 #CJK UNIFIED IDEOGRAPH + {0xEEE0, 0x9357}, //11746 #CJK UNIFIED IDEOGRAPH + {0xEEE1, 0x9355}, //11747 #CJK UNIFIED IDEOGRAPH + {0xEEE2, 0x9352}, //11748 #CJK UNIFIED IDEOGRAPH + {0xEEE3, 0x934F}, //11749 #CJK UNIFIED IDEOGRAPH + {0xEEE4, 0x9371}, //11750 #CJK UNIFIED IDEOGRAPH + {0xEEE5, 0x9377}, //11751 #CJK UNIFIED IDEOGRAPH + {0xEEE6, 0x937B}, //11752 #CJK UNIFIED IDEOGRAPH + {0xEEE7, 0x9361}, //11753 #CJK UNIFIED IDEOGRAPH + {0xEEE8, 0x935E}, //11754 #CJK UNIFIED IDEOGRAPH + {0xEEE9, 0x9363}, //11755 #CJK UNIFIED IDEOGRAPH + {0xEEEA, 0x9367}, //11756 #CJK UNIFIED IDEOGRAPH + {0xEEEB, 0x9380}, //11757 #CJK UNIFIED IDEOGRAPH + {0xEEEC, 0x934E}, //11758 #CJK UNIFIED IDEOGRAPH + {0xEEED, 0x9359}, //11759 #CJK UNIFIED IDEOGRAPH + {0xEEEE, 0x95C7}, //11760 #CJK UNIFIED IDEOGRAPH + {0xEEEF, 0x95C0}, //11761 #CJK UNIFIED IDEOGRAPH + {0xEEF0, 0x95C9}, //11762 #CJK UNIFIED IDEOGRAPH + {0xEEF1, 0x95C3}, //11763 #CJK UNIFIED IDEOGRAPH + {0xEEF2, 0x95C5}, //11764 #CJK UNIFIED IDEOGRAPH + {0xEEF3, 0x95B7}, //11765 #CJK UNIFIED IDEOGRAPH + {0xEEF4, 0x96AE}, //11766 #CJK UNIFIED IDEOGRAPH + {0xEEF5, 0x96B0}, //11767 #CJK UNIFIED IDEOGRAPH + {0xEEF6, 0x96AC}, //11768 #CJK UNIFIED IDEOGRAPH + {0xEEF7, 0x9720}, //11769 #CJK UNIFIED IDEOGRAPH + {0xEEF8, 0x971F}, //11770 #CJK UNIFIED IDEOGRAPH + {0xEEF9, 0x9718}, //11771 #CJK UNIFIED IDEOGRAPH + {0xEEFA, 0x971D}, //11772 #CJK UNIFIED IDEOGRAPH + {0xEEFB, 0x9719}, //11773 #CJK UNIFIED IDEOGRAPH + {0xEEFC, 0x979A}, //11774 #CJK UNIFIED IDEOGRAPH + {0xEEFD, 0x97A1}, //11775 #CJK UNIFIED IDEOGRAPH + {0xEEFE, 0x979C}, //11776 #CJK UNIFIED IDEOGRAPH + {0xEF40, 0x979E}, //11777 #CJK UNIFIED IDEOGRAPH + {0xEF41, 0x979D}, //11778 #CJK UNIFIED IDEOGRAPH + {0xEF42, 0x97D5}, //11779 #CJK UNIFIED IDEOGRAPH + {0xEF43, 0x97D4}, //11780 #CJK UNIFIED IDEOGRAPH + {0xEF44, 0x97F1}, //11781 #CJK UNIFIED IDEOGRAPH + {0xEF45, 0x9841}, //11782 #CJK UNIFIED IDEOGRAPH + {0xEF46, 0x9844}, //11783 #CJK UNIFIED IDEOGRAPH + {0xEF47, 0x984A}, //11784 #CJK UNIFIED IDEOGRAPH + {0xEF48, 0x9849}, //11785 #CJK UNIFIED IDEOGRAPH + {0xEF49, 0x9845}, //11786 #CJK UNIFIED IDEOGRAPH + {0xEF4A, 0x9843}, //11787 #CJK UNIFIED IDEOGRAPH + {0xEF4B, 0x9925}, //11788 #CJK UNIFIED IDEOGRAPH + {0xEF4C, 0x992B}, //11789 #CJK UNIFIED IDEOGRAPH + {0xEF4D, 0x992C}, //11790 #CJK UNIFIED IDEOGRAPH + {0xEF4E, 0x992A}, //11791 #CJK UNIFIED IDEOGRAPH + {0xEF4F, 0x9933}, //11792 #CJK UNIFIED IDEOGRAPH + {0xEF50, 0x9932}, //11793 #CJK UNIFIED IDEOGRAPH + {0xEF51, 0x992F}, //11794 #CJK UNIFIED IDEOGRAPH + {0xEF52, 0x992D}, //11795 #CJK UNIFIED IDEOGRAPH + {0xEF53, 0x9931}, //11796 #CJK UNIFIED IDEOGRAPH + {0xEF54, 0x9930}, //11797 #CJK UNIFIED IDEOGRAPH + {0xEF55, 0x9998}, //11798 #CJK UNIFIED IDEOGRAPH + {0xEF56, 0x99A3}, //11799 #CJK UNIFIED IDEOGRAPH + {0xEF57, 0x99A1}, //11800 #CJK UNIFIED IDEOGRAPH + {0xEF58, 0x9A02}, //11801 #CJK UNIFIED IDEOGRAPH + {0xEF59, 0x99FA}, //11802 #CJK UNIFIED IDEOGRAPH + {0xEF5A, 0x99F4}, //11803 #CJK UNIFIED IDEOGRAPH + {0xEF5B, 0x99F7}, //11804 #CJK UNIFIED IDEOGRAPH + {0xEF5C, 0x99F9}, //11805 #CJK UNIFIED IDEOGRAPH + {0xEF5D, 0x99F8}, //11806 #CJK UNIFIED IDEOGRAPH + {0xEF5E, 0x99F6}, //11807 #CJK UNIFIED IDEOGRAPH + {0xEF5F, 0x99FB}, //11808 #CJK UNIFIED IDEOGRAPH + {0xEF60, 0x99FD}, //11809 #CJK UNIFIED IDEOGRAPH + {0xEF61, 0x99FE}, //11810 #CJK UNIFIED IDEOGRAPH + {0xEF62, 0x99FC}, //11811 #CJK UNIFIED IDEOGRAPH + {0xEF63, 0x9A03}, //11812 #CJK UNIFIED IDEOGRAPH + {0xEF64, 0x9ABE}, //11813 #CJK UNIFIED IDEOGRAPH + {0xEF65, 0x9AFE}, //11814 #CJK UNIFIED IDEOGRAPH + {0xEF66, 0x9AFD}, //11815 #CJK UNIFIED IDEOGRAPH + {0xEF67, 0x9B01}, //11816 #CJK UNIFIED IDEOGRAPH + {0xEF68, 0x9AFC}, //11817 #CJK UNIFIED IDEOGRAPH + {0xEF69, 0x9B48}, //11818 #CJK UNIFIED IDEOGRAPH + {0xEF6A, 0x9B9A}, //11819 #CJK UNIFIED IDEOGRAPH + {0xEF6B, 0x9BA8}, //11820 #CJK UNIFIED IDEOGRAPH + {0xEF6C, 0x9B9E}, //11821 #CJK UNIFIED IDEOGRAPH + {0xEF6D, 0x9B9B}, //11822 #CJK UNIFIED IDEOGRAPH + {0xEF6E, 0x9BA6}, //11823 #CJK UNIFIED IDEOGRAPH + {0xEF6F, 0x9BA1}, //11824 #CJK UNIFIED IDEOGRAPH + {0xEF70, 0x9BA5}, //11825 #CJK UNIFIED IDEOGRAPH + {0xEF71, 0x9BA4}, //11826 #CJK UNIFIED IDEOGRAPH + {0xEF72, 0x9B86}, //11827 #CJK UNIFIED IDEOGRAPH + {0xEF73, 0x9BA2}, //11828 #CJK UNIFIED IDEOGRAPH + {0xEF74, 0x9BA0}, //11829 #CJK UNIFIED IDEOGRAPH + {0xEF75, 0x9BAF}, //11830 #CJK UNIFIED IDEOGRAPH + {0xEF76, 0x9D33}, //11831 #CJK UNIFIED IDEOGRAPH + {0xEF77, 0x9D41}, //11832 #CJK UNIFIED IDEOGRAPH + {0xEF78, 0x9D67}, //11833 #CJK UNIFIED IDEOGRAPH + {0xEF79, 0x9D36}, //11834 #CJK UNIFIED IDEOGRAPH + {0xEF7A, 0x9D2E}, //11835 #CJK UNIFIED IDEOGRAPH + {0xEF7B, 0x9D2F}, //11836 #CJK UNIFIED IDEOGRAPH + {0xEF7C, 0x9D31}, //11837 #CJK UNIFIED IDEOGRAPH + {0xEF7D, 0x9D38}, //11838 #CJK UNIFIED IDEOGRAPH + {0xEF7E, 0x9D30}, //11839 #CJK UNIFIED IDEOGRAPH + {0xEFA1, 0x9D45}, //11840 #CJK UNIFIED IDEOGRAPH + {0xEFA2, 0x9D42}, //11841 #CJK UNIFIED IDEOGRAPH + {0xEFA3, 0x9D43}, //11842 #CJK UNIFIED IDEOGRAPH + {0xEFA4, 0x9D3E}, //11843 #CJK UNIFIED IDEOGRAPH + {0xEFA5, 0x9D37}, //11844 #CJK UNIFIED IDEOGRAPH + {0xEFA6, 0x9D40}, //11845 #CJK UNIFIED IDEOGRAPH + {0xEFA7, 0x9D3D}, //11846 #CJK UNIFIED IDEOGRAPH + {0xEFA8, 0x7FF5}, //11847 #CJK UNIFIED IDEOGRAPH + {0xEFA9, 0x9D2D}, //11848 #CJK UNIFIED IDEOGRAPH + {0xEFAA, 0x9E8A}, //11849 #CJK UNIFIED IDEOGRAPH + {0xEFAB, 0x9E89}, //11850 #CJK UNIFIED IDEOGRAPH + {0xEFAC, 0x9E8D}, //11851 #CJK UNIFIED IDEOGRAPH + {0xEFAD, 0x9EB0}, //11852 #CJK UNIFIED IDEOGRAPH + {0xEFAE, 0x9EC8}, //11853 #CJK UNIFIED IDEOGRAPH + {0xEFAF, 0x9EDA}, //11854 #CJK UNIFIED IDEOGRAPH + {0xEFB0, 0x9EFB}, //11855 #CJK UNIFIED IDEOGRAPH + {0xEFB1, 0x9EFF}, //11856 #CJK UNIFIED IDEOGRAPH + {0xEFB2, 0x9F24}, //11857 #CJK UNIFIED IDEOGRAPH + {0xEFB3, 0x9F23}, //11858 #CJK UNIFIED IDEOGRAPH + {0xEFB4, 0x9F22}, //11859 #CJK UNIFIED IDEOGRAPH + {0xEFB5, 0x9F54}, //11860 #CJK UNIFIED IDEOGRAPH + {0xEFB6, 0x9FA0}, //11861 #CJK UNIFIED IDEOGRAPH + {0xEFB7, 0x5131}, //11862 #CJK UNIFIED IDEOGRAPH + {0xEFB8, 0x512D}, //11863 #CJK UNIFIED IDEOGRAPH + {0xEFB9, 0x512E}, //11864 #CJK UNIFIED IDEOGRAPH + {0xEFBA, 0x5698}, //11865 #CJK UNIFIED IDEOGRAPH + {0xEFBB, 0x569C}, //11866 #CJK UNIFIED IDEOGRAPH + {0xEFBC, 0x5697}, //11867 #CJK UNIFIED IDEOGRAPH + {0xEFBD, 0x569A}, //11868 #CJK UNIFIED IDEOGRAPH + {0xEFBE, 0x569D}, //11869 #CJK UNIFIED IDEOGRAPH + {0xEFBF, 0x5699}, //11870 #CJK UNIFIED IDEOGRAPH + {0xEFC0, 0x5970}, //11871 #CJK UNIFIED IDEOGRAPH + {0xEFC1, 0x5B3C}, //11872 #CJK UNIFIED IDEOGRAPH + {0xEFC2, 0x5C69}, //11873 #CJK UNIFIED IDEOGRAPH + {0xEFC3, 0x5C6A}, //11874 #CJK UNIFIED IDEOGRAPH + {0xEFC4, 0x5DC0}, //11875 #CJK UNIFIED IDEOGRAPH + {0xEFC5, 0x5E6D}, //11876 #CJK UNIFIED IDEOGRAPH + {0xEFC6, 0x5E6E}, //11877 #CJK UNIFIED IDEOGRAPH + {0xEFC7, 0x61D8}, //11878 #CJK UNIFIED IDEOGRAPH + {0xEFC8, 0x61DF}, //11879 #CJK UNIFIED IDEOGRAPH + {0xEFC9, 0x61ED}, //11880 #CJK UNIFIED IDEOGRAPH + {0xEFCA, 0x61EE}, //11881 #CJK UNIFIED IDEOGRAPH + {0xEFCB, 0x61F1}, //11882 #CJK UNIFIED IDEOGRAPH + {0xEFCC, 0x61EA}, //11883 #CJK UNIFIED IDEOGRAPH + {0xEFCD, 0x61F0}, //11884 #CJK UNIFIED IDEOGRAPH + {0xEFCE, 0x61EB}, //11885 #CJK UNIFIED IDEOGRAPH + {0xEFCF, 0x61D6}, //11886 #CJK UNIFIED IDEOGRAPH + {0xEFD0, 0x61E9}, //11887 #CJK UNIFIED IDEOGRAPH + {0xEFD1, 0x64FF}, //11888 #CJK UNIFIED IDEOGRAPH + {0xEFD2, 0x6504}, //11889 #CJK UNIFIED IDEOGRAPH + {0xEFD3, 0x64FD}, //11890 #CJK UNIFIED IDEOGRAPH + {0xEFD4, 0x64F8}, //11891 #CJK UNIFIED IDEOGRAPH + {0xEFD5, 0x6501}, //11892 #CJK UNIFIED IDEOGRAPH + {0xEFD6, 0x6503}, //11893 #CJK UNIFIED IDEOGRAPH + {0xEFD7, 0x64FC}, //11894 #CJK UNIFIED IDEOGRAPH + {0xEFD8, 0x6594}, //11895 #CJK UNIFIED IDEOGRAPH + {0xEFD9, 0x65DB}, //11896 #CJK UNIFIED IDEOGRAPH + {0xEFDA, 0x66DA}, //11897 #CJK UNIFIED IDEOGRAPH + {0xEFDB, 0x66DB}, //11898 #CJK UNIFIED IDEOGRAPH + {0xEFDC, 0x66D8}, //11899 #CJK UNIFIED IDEOGRAPH + {0xEFDD, 0x6AC5}, //11900 #CJK UNIFIED IDEOGRAPH + {0xEFDE, 0x6AB9}, //11901 #CJK UNIFIED IDEOGRAPH + {0xEFDF, 0x6ABD}, //11902 #CJK UNIFIED IDEOGRAPH + {0xEFE0, 0x6AE1}, //11903 #CJK UNIFIED IDEOGRAPH + {0xEFE1, 0x6AC6}, //11904 #CJK UNIFIED IDEOGRAPH + {0xEFE2, 0x6ABA}, //11905 #CJK UNIFIED IDEOGRAPH + {0xEFE3, 0x6AB6}, //11906 #CJK UNIFIED IDEOGRAPH + {0xEFE4, 0x6AB7}, //11907 #CJK UNIFIED IDEOGRAPH + {0xEFE5, 0x6AC7}, //11908 #CJK UNIFIED IDEOGRAPH + {0xEFE6, 0x6AB4}, //11909 #CJK UNIFIED IDEOGRAPH + {0xEFE7, 0x6AAD}, //11910 #CJK UNIFIED IDEOGRAPH + {0xEFE8, 0x6B5E}, //11911 #CJK UNIFIED IDEOGRAPH + {0xEFE9, 0x6BC9}, //11912 #CJK UNIFIED IDEOGRAPH + {0xEFEA, 0x6C0B}, //11913 #CJK UNIFIED IDEOGRAPH + {0xEFEB, 0x7007}, //11914 #CJK UNIFIED IDEOGRAPH + {0xEFEC, 0x700C}, //11915 #CJK UNIFIED IDEOGRAPH + {0xEFED, 0x700D}, //11916 #CJK UNIFIED IDEOGRAPH + {0xEFEE, 0x7001}, //11917 #CJK UNIFIED IDEOGRAPH + {0xEFEF, 0x7005}, //11918 #CJK UNIFIED IDEOGRAPH + {0xEFF0, 0x7014}, //11919 #CJK UNIFIED IDEOGRAPH + {0xEFF1, 0x700E}, //11920 #CJK UNIFIED IDEOGRAPH + {0xEFF2, 0x6FFF}, //11921 #CJK UNIFIED IDEOGRAPH + {0xEFF3, 0x7000}, //11922 #CJK UNIFIED IDEOGRAPH + {0xEFF4, 0x6FFB}, //11923 #CJK UNIFIED IDEOGRAPH + {0xEFF5, 0x7026}, //11924 #CJK UNIFIED IDEOGRAPH + {0xEFF6, 0x6FFC}, //11925 #CJK UNIFIED IDEOGRAPH + {0xEFF7, 0x6FF7}, //11926 #CJK UNIFIED IDEOGRAPH + {0xEFF8, 0x700A}, //11927 #CJK UNIFIED IDEOGRAPH + {0xEFF9, 0x7201}, //11928 #CJK UNIFIED IDEOGRAPH + {0xEFFA, 0x71FF}, //11929 #CJK UNIFIED IDEOGRAPH + {0xEFFB, 0x71F9}, //11930 #CJK UNIFIED IDEOGRAPH + {0xEFFC, 0x7203}, //11931 #CJK UNIFIED IDEOGRAPH + {0xEFFD, 0x71FD}, //11932 #CJK UNIFIED IDEOGRAPH + {0xEFFE, 0x7376}, //11933 #CJK UNIFIED IDEOGRAPH + {0xF040, 0x74B8}, //11934 #CJK UNIFIED IDEOGRAPH + {0xF041, 0x74C0}, //11935 #CJK UNIFIED IDEOGRAPH + {0xF042, 0x74B5}, //11936 #CJK UNIFIED IDEOGRAPH + {0xF043, 0x74C1}, //11937 #CJK UNIFIED IDEOGRAPH + {0xF044, 0x74BE}, //11938 #CJK UNIFIED IDEOGRAPH + {0xF045, 0x74B6}, //11939 #CJK UNIFIED IDEOGRAPH + {0xF046, 0x74BB}, //11940 #CJK UNIFIED IDEOGRAPH + {0xF047, 0x74C2}, //11941 #CJK UNIFIED IDEOGRAPH + {0xF048, 0x7514}, //11942 #CJK UNIFIED IDEOGRAPH + {0xF049, 0x7513}, //11943 #CJK UNIFIED IDEOGRAPH + {0xF04A, 0x765C}, //11944 #CJK UNIFIED IDEOGRAPH + {0xF04B, 0x7664}, //11945 #CJK UNIFIED IDEOGRAPH + {0xF04C, 0x7659}, //11946 #CJK UNIFIED IDEOGRAPH + {0xF04D, 0x7650}, //11947 #CJK UNIFIED IDEOGRAPH + {0xF04E, 0x7653}, //11948 #CJK UNIFIED IDEOGRAPH + {0xF04F, 0x7657}, //11949 #CJK UNIFIED IDEOGRAPH + {0xF050, 0x765A}, //11950 #CJK UNIFIED IDEOGRAPH + {0xF051, 0x76A6}, //11951 #CJK UNIFIED IDEOGRAPH + {0xF052, 0x76BD}, //11952 #CJK UNIFIED IDEOGRAPH + {0xF053, 0x76EC}, //11953 #CJK UNIFIED IDEOGRAPH + {0xF054, 0x77C2}, //11954 #CJK UNIFIED IDEOGRAPH + {0xF055, 0x77BA}, //11955 #CJK UNIFIED IDEOGRAPH + {0xF056, 0x78FF}, //11956 #CJK UNIFIED IDEOGRAPH + {0xF057, 0x790C}, //11957 #CJK UNIFIED IDEOGRAPH + {0xF058, 0x7913}, //11958 #CJK UNIFIED IDEOGRAPH + {0xF059, 0x7914}, //11959 #CJK UNIFIED IDEOGRAPH + {0xF05A, 0x7909}, //11960 #CJK UNIFIED IDEOGRAPH + {0xF05B, 0x7910}, //11961 #CJK UNIFIED IDEOGRAPH + {0xF05C, 0x7912}, //11962 #CJK UNIFIED IDEOGRAPH + {0xF05D, 0x7911}, //11963 #CJK UNIFIED IDEOGRAPH + {0xF05E, 0x79AD}, //11964 #CJK UNIFIED IDEOGRAPH + {0xF05F, 0x79AC}, //11965 #CJK UNIFIED IDEOGRAPH + {0xF060, 0x7A5F}, //11966 #CJK UNIFIED IDEOGRAPH + {0xF061, 0x7C1C}, //11967 #CJK UNIFIED IDEOGRAPH + {0xF062, 0x7C29}, //11968 #CJK UNIFIED IDEOGRAPH + {0xF063, 0x7C19}, //11969 #CJK UNIFIED IDEOGRAPH + {0xF064, 0x7C20}, //11970 #CJK UNIFIED IDEOGRAPH + {0xF065, 0x7C1F}, //11971 #CJK UNIFIED IDEOGRAPH + {0xF066, 0x7C2D}, //11972 #CJK UNIFIED IDEOGRAPH + {0xF067, 0x7C1D}, //11973 #CJK UNIFIED IDEOGRAPH + {0xF068, 0x7C26}, //11974 #CJK UNIFIED IDEOGRAPH + {0xF069, 0x7C28}, //11975 #CJK UNIFIED IDEOGRAPH + {0xF06A, 0x7C22}, //11976 #CJK UNIFIED IDEOGRAPH + {0xF06B, 0x7C25}, //11977 #CJK UNIFIED IDEOGRAPH + {0xF06C, 0x7C30}, //11978 #CJK UNIFIED IDEOGRAPH + {0xF06D, 0x7E5C}, //11979 #CJK UNIFIED IDEOGRAPH + {0xF06E, 0x7E50}, //11980 #CJK UNIFIED IDEOGRAPH + {0xF06F, 0x7E56}, //11981 #CJK UNIFIED IDEOGRAPH + {0xF070, 0x7E63}, //11982 #CJK UNIFIED IDEOGRAPH + {0xF071, 0x7E58}, //11983 #CJK UNIFIED IDEOGRAPH + {0xF072, 0x7E62}, //11984 #CJK UNIFIED IDEOGRAPH + {0xF073, 0x7E5F}, //11985 #CJK UNIFIED IDEOGRAPH + {0xF074, 0x7E51}, //11986 #CJK UNIFIED IDEOGRAPH + {0xF075, 0x7E60}, //11987 #CJK UNIFIED IDEOGRAPH + {0xF076, 0x7E57}, //11988 #CJK UNIFIED IDEOGRAPH + {0xF077, 0x7E53}, //11989 #CJK UNIFIED IDEOGRAPH + {0xF078, 0x7FB5}, //11990 #CJK UNIFIED IDEOGRAPH + {0xF079, 0x7FB3}, //11991 #CJK UNIFIED IDEOGRAPH + {0xF07A, 0x7FF7}, //11992 #CJK UNIFIED IDEOGRAPH + {0xF07B, 0x7FF8}, //11993 #CJK UNIFIED IDEOGRAPH + {0xF07C, 0x8075}, //11994 #CJK UNIFIED IDEOGRAPH + {0xF07D, 0x81D1}, //11995 #CJK UNIFIED IDEOGRAPH + {0xF07E, 0x81D2}, //11996 #CJK UNIFIED IDEOGRAPH + {0xF0A1, 0x81D0}, //11997 #CJK UNIFIED IDEOGRAPH + {0xF0A2, 0x825F}, //11998 #CJK UNIFIED IDEOGRAPH + {0xF0A3, 0x825E}, //11999 #CJK UNIFIED IDEOGRAPH + {0xF0A4, 0x85B4}, //12000 #CJK UNIFIED IDEOGRAPH + {0xF0A5, 0x85C6}, //12001 #CJK UNIFIED IDEOGRAPH + {0xF0A6, 0x85C0}, //12002 #CJK UNIFIED IDEOGRAPH + {0xF0A7, 0x85C3}, //12003 #CJK UNIFIED IDEOGRAPH + {0xF0A8, 0x85C2}, //12004 #CJK UNIFIED IDEOGRAPH + {0xF0A9, 0x85B3}, //12005 #CJK UNIFIED IDEOGRAPH + {0xF0AA, 0x85B5}, //12006 #CJK UNIFIED IDEOGRAPH + {0xF0AB, 0x85BD}, //12007 #CJK UNIFIED IDEOGRAPH + {0xF0AC, 0x85C7}, //12008 #CJK UNIFIED IDEOGRAPH + {0xF0AD, 0x85C4}, //12009 #CJK UNIFIED IDEOGRAPH + {0xF0AE, 0x85BF}, //12010 #CJK UNIFIED IDEOGRAPH + {0xF0AF, 0x85CB}, //12011 #CJK UNIFIED IDEOGRAPH + {0xF0B0, 0x85CE}, //12012 #CJK UNIFIED IDEOGRAPH + {0xF0B1, 0x85C8}, //12013 #CJK UNIFIED IDEOGRAPH + {0xF0B2, 0x85C5}, //12014 #CJK UNIFIED IDEOGRAPH + {0xF0B3, 0x85B1}, //12015 #CJK UNIFIED IDEOGRAPH + {0xF0B4, 0x85B6}, //12016 #CJK UNIFIED IDEOGRAPH + {0xF0B5, 0x85D2}, //12017 #CJK UNIFIED IDEOGRAPH + {0xF0B6, 0x8624}, //12018 #CJK UNIFIED IDEOGRAPH + {0xF0B7, 0x85B8}, //12019 #CJK UNIFIED IDEOGRAPH + {0xF0B8, 0x85B7}, //12020 #CJK UNIFIED IDEOGRAPH + {0xF0B9, 0x85BE}, //12021 #CJK UNIFIED IDEOGRAPH + {0xF0BA, 0x8669}, //12022 #CJK UNIFIED IDEOGRAPH + {0xF0BB, 0x87E7}, //12023 #CJK UNIFIED IDEOGRAPH + {0xF0BC, 0x87E6}, //12024 #CJK UNIFIED IDEOGRAPH + {0xF0BD, 0x87E2}, //12025 #CJK UNIFIED IDEOGRAPH + {0xF0BE, 0x87DB}, //12026 #CJK UNIFIED IDEOGRAPH + {0xF0BF, 0x87EB}, //12027 #CJK UNIFIED IDEOGRAPH + {0xF0C0, 0x87EA}, //12028 #CJK UNIFIED IDEOGRAPH + {0xF0C1, 0x87E5}, //12029 #CJK UNIFIED IDEOGRAPH + {0xF0C2, 0x87DF}, //12030 #CJK UNIFIED IDEOGRAPH + {0xF0C3, 0x87F3}, //12031 #CJK UNIFIED IDEOGRAPH + {0xF0C4, 0x87E4}, //12032 #CJK UNIFIED IDEOGRAPH + {0xF0C5, 0x87D4}, //12033 #CJK UNIFIED IDEOGRAPH + {0xF0C6, 0x87DC}, //12034 #CJK UNIFIED IDEOGRAPH + {0xF0C7, 0x87D3}, //12035 #CJK UNIFIED IDEOGRAPH + {0xF0C8, 0x87ED}, //12036 #CJK UNIFIED IDEOGRAPH + {0xF0C9, 0x87D8}, //12037 #CJK UNIFIED IDEOGRAPH + {0xF0CA, 0x87E3}, //12038 #CJK UNIFIED IDEOGRAPH + {0xF0CB, 0x87A4}, //12039 #CJK UNIFIED IDEOGRAPH + {0xF0CC, 0x87D7}, //12040 #CJK UNIFIED IDEOGRAPH + {0xF0CD, 0x87D9}, //12041 #CJK UNIFIED IDEOGRAPH + {0xF0CE, 0x8801}, //12042 #CJK UNIFIED IDEOGRAPH + {0xF0CF, 0x87F4}, //12043 #CJK UNIFIED IDEOGRAPH + {0xF0D0, 0x87E8}, //12044 #CJK UNIFIED IDEOGRAPH + {0xF0D1, 0x87DD}, //12045 #CJK UNIFIED IDEOGRAPH + {0xF0D2, 0x8953}, //12046 #CJK UNIFIED IDEOGRAPH + {0xF0D3, 0x894B}, //12047 #CJK UNIFIED IDEOGRAPH + {0xF0D4, 0x894F}, //12048 #CJK UNIFIED IDEOGRAPH + {0xF0D5, 0x894C}, //12049 #CJK UNIFIED IDEOGRAPH + {0xF0D6, 0x8946}, //12050 #CJK UNIFIED IDEOGRAPH + {0xF0D7, 0x8950}, //12051 #CJK UNIFIED IDEOGRAPH + {0xF0D8, 0x8951}, //12052 #CJK UNIFIED IDEOGRAPH + {0xF0D9, 0x8949}, //12053 #CJK UNIFIED IDEOGRAPH + {0xF0DA, 0x8B2A}, //12054 #CJK UNIFIED IDEOGRAPH + {0xF0DB, 0x8B27}, //12055 #CJK UNIFIED IDEOGRAPH + {0xF0DC, 0x8B23}, //12056 #CJK UNIFIED IDEOGRAPH + {0xF0DD, 0x8B33}, //12057 #CJK UNIFIED IDEOGRAPH + {0xF0DE, 0x8B30}, //12058 #CJK UNIFIED IDEOGRAPH + {0xF0DF, 0x8B35}, //12059 #CJK UNIFIED IDEOGRAPH + {0xF0E0, 0x8B47}, //12060 #CJK UNIFIED IDEOGRAPH + {0xF0E1, 0x8B2F}, //12061 #CJK UNIFIED IDEOGRAPH + {0xF0E2, 0x8B3C}, //12062 #CJK UNIFIED IDEOGRAPH + {0xF0E3, 0x8B3E}, //12063 #CJK UNIFIED IDEOGRAPH + {0xF0E4, 0x8B31}, //12064 #CJK UNIFIED IDEOGRAPH + {0xF0E5, 0x8B25}, //12065 #CJK UNIFIED IDEOGRAPH + {0xF0E6, 0x8B37}, //12066 #CJK UNIFIED IDEOGRAPH + {0xF0E7, 0x8B26}, //12067 #CJK UNIFIED IDEOGRAPH + {0xF0E8, 0x8B36}, //12068 #CJK UNIFIED IDEOGRAPH + {0xF0E9, 0x8B2E}, //12069 #CJK UNIFIED IDEOGRAPH + {0xF0EA, 0x8B24}, //12070 #CJK UNIFIED IDEOGRAPH + {0xF0EB, 0x8B3B}, //12071 #CJK UNIFIED IDEOGRAPH + {0xF0EC, 0x8B3D}, //12072 #CJK UNIFIED IDEOGRAPH + {0xF0ED, 0x8B3A}, //12073 #CJK UNIFIED IDEOGRAPH + {0xF0EE, 0x8C42}, //12074 #CJK UNIFIED IDEOGRAPH + {0xF0EF, 0x8C75}, //12075 #CJK UNIFIED IDEOGRAPH + {0xF0F0, 0x8C99}, //12076 #CJK UNIFIED IDEOGRAPH + {0xF0F1, 0x8C98}, //12077 #CJK UNIFIED IDEOGRAPH + {0xF0F2, 0x8C97}, //12078 #CJK UNIFIED IDEOGRAPH + {0xF0F3, 0x8CFE}, //12079 #CJK UNIFIED IDEOGRAPH + {0xF0F4, 0x8D04}, //12080 #CJK UNIFIED IDEOGRAPH + {0xF0F5, 0x8D02}, //12081 #CJK UNIFIED IDEOGRAPH + {0xF0F6, 0x8D00}, //12082 #CJK UNIFIED IDEOGRAPH + {0xF0F7, 0x8E5C}, //12083 #CJK UNIFIED IDEOGRAPH + {0xF0F8, 0x8E62}, //12084 #CJK UNIFIED IDEOGRAPH + {0xF0F9, 0x8E60}, //12085 #CJK UNIFIED IDEOGRAPH + {0xF0FA, 0x8E57}, //12086 #CJK UNIFIED IDEOGRAPH + {0xF0FB, 0x8E56}, //12087 #CJK UNIFIED IDEOGRAPH + {0xF0FC, 0x8E5E}, //12088 #CJK UNIFIED IDEOGRAPH + {0xF0FD, 0x8E65}, //12089 #CJK UNIFIED IDEOGRAPH + {0xF0FE, 0x8E67}, //12090 #CJK UNIFIED IDEOGRAPH + {0xF140, 0x8E5B}, //12091 #CJK UNIFIED IDEOGRAPH + {0xF141, 0x8E5A}, //12092 #CJK UNIFIED IDEOGRAPH + {0xF142, 0x8E61}, //12093 #CJK UNIFIED IDEOGRAPH + {0xF143, 0x8E5D}, //12094 #CJK UNIFIED IDEOGRAPH + {0xF144, 0x8E69}, //12095 #CJK UNIFIED IDEOGRAPH + {0xF145, 0x8E54}, //12096 #CJK UNIFIED IDEOGRAPH + {0xF146, 0x8F46}, //12097 #CJK UNIFIED IDEOGRAPH + {0xF147, 0x8F47}, //12098 #CJK UNIFIED IDEOGRAPH + {0xF148, 0x8F48}, //12099 #CJK UNIFIED IDEOGRAPH + {0xF149, 0x8F4B}, //12100 #CJK UNIFIED IDEOGRAPH + {0xF14A, 0x9128}, //12101 #CJK UNIFIED IDEOGRAPH + {0xF14B, 0x913A}, //12102 #CJK UNIFIED IDEOGRAPH + {0xF14C, 0x913B}, //12103 #CJK UNIFIED IDEOGRAPH + {0xF14D, 0x913E}, //12104 #CJK UNIFIED IDEOGRAPH + {0xF14E, 0x91A8}, //12105 #CJK UNIFIED IDEOGRAPH + {0xF14F, 0x91A5}, //12106 #CJK UNIFIED IDEOGRAPH + {0xF150, 0x91A7}, //12107 #CJK UNIFIED IDEOGRAPH + {0xF151, 0x91AF}, //12108 #CJK UNIFIED IDEOGRAPH + {0xF152, 0x91AA}, //12109 #CJK UNIFIED IDEOGRAPH + {0xF153, 0x93B5}, //12110 #CJK UNIFIED IDEOGRAPH + {0xF154, 0x938C}, //12111 #CJK UNIFIED IDEOGRAPH + {0xF155, 0x9392}, //12112 #CJK UNIFIED IDEOGRAPH + {0xF156, 0x93B7}, //12113 #CJK UNIFIED IDEOGRAPH + {0xF157, 0x939B}, //12114 #CJK UNIFIED IDEOGRAPH + {0xF158, 0x939D}, //12115 #CJK UNIFIED IDEOGRAPH + {0xF159, 0x9389}, //12116 #CJK UNIFIED IDEOGRAPH + {0xF15A, 0x93A7}, //12117 #CJK UNIFIED IDEOGRAPH + {0xF15B, 0x938E}, //12118 #CJK UNIFIED IDEOGRAPH + {0xF15C, 0x93AA}, //12119 #CJK UNIFIED IDEOGRAPH + {0xF15D, 0x939E}, //12120 #CJK UNIFIED IDEOGRAPH + {0xF15E, 0x93A6}, //12121 #CJK UNIFIED IDEOGRAPH + {0xF15F, 0x9395}, //12122 #CJK UNIFIED IDEOGRAPH + {0xF160, 0x9388}, //12123 #CJK UNIFIED IDEOGRAPH + {0xF161, 0x9399}, //12124 #CJK UNIFIED IDEOGRAPH + {0xF162, 0x939F}, //12125 #CJK UNIFIED IDEOGRAPH + {0xF163, 0x938D}, //12126 #CJK UNIFIED IDEOGRAPH + {0xF164, 0x93B1}, //12127 #CJK UNIFIED IDEOGRAPH + {0xF165, 0x9391}, //12128 #CJK UNIFIED IDEOGRAPH + {0xF166, 0x93B2}, //12129 #CJK UNIFIED IDEOGRAPH + {0xF167, 0x93A4}, //12130 #CJK UNIFIED IDEOGRAPH + {0xF168, 0x93A8}, //12131 #CJK UNIFIED IDEOGRAPH + {0xF169, 0x93B4}, //12132 #CJK UNIFIED IDEOGRAPH + {0xF16A, 0x93A3}, //12133 #CJK UNIFIED IDEOGRAPH + {0xF16B, 0x93A5}, //12134 #CJK UNIFIED IDEOGRAPH + {0xF16C, 0x95D2}, //12135 #CJK UNIFIED IDEOGRAPH + {0xF16D, 0x95D3}, //12136 #CJK UNIFIED IDEOGRAPH + {0xF16E, 0x95D1}, //12137 #CJK UNIFIED IDEOGRAPH + {0xF16F, 0x96B3}, //12138 #CJK UNIFIED IDEOGRAPH + {0xF170, 0x96D7}, //12139 #CJK UNIFIED IDEOGRAPH + {0xF171, 0x96DA}, //12140 #CJK UNIFIED IDEOGRAPH + {0xF172, 0x5DC2}, //12141 #CJK UNIFIED IDEOGRAPH + {0xF173, 0x96DF}, //12142 #CJK UNIFIED IDEOGRAPH + {0xF174, 0x96D8}, //12143 #CJK UNIFIED IDEOGRAPH + {0xF175, 0x96DD}, //12144 #CJK UNIFIED IDEOGRAPH + {0xF176, 0x9723}, //12145 #CJK UNIFIED IDEOGRAPH + {0xF177, 0x9722}, //12146 #CJK UNIFIED IDEOGRAPH + {0xF178, 0x9725}, //12147 #CJK UNIFIED IDEOGRAPH + {0xF179, 0x97AC}, //12148 #CJK UNIFIED IDEOGRAPH + {0xF17A, 0x97AE}, //12149 #CJK UNIFIED IDEOGRAPH + {0xF17B, 0x97A8}, //12150 #CJK UNIFIED IDEOGRAPH + {0xF17C, 0x97AB}, //12151 #CJK UNIFIED IDEOGRAPH + {0xF17D, 0x97A4}, //12152 #CJK UNIFIED IDEOGRAPH + {0xF17E, 0x97AA}, //12153 #CJK UNIFIED IDEOGRAPH + {0xF1A1, 0x97A2}, //12154 #CJK UNIFIED IDEOGRAPH + {0xF1A2, 0x97A5}, //12155 #CJK UNIFIED IDEOGRAPH + {0xF1A3, 0x97D7}, //12156 #CJK UNIFIED IDEOGRAPH + {0xF1A4, 0x97D9}, //12157 #CJK UNIFIED IDEOGRAPH + {0xF1A5, 0x97D6}, //12158 #CJK UNIFIED IDEOGRAPH + {0xF1A6, 0x97D8}, //12159 #CJK UNIFIED IDEOGRAPH + {0xF1A7, 0x97FA}, //12160 #CJK UNIFIED IDEOGRAPH + {0xF1A8, 0x9850}, //12161 #CJK UNIFIED IDEOGRAPH + {0xF1A9, 0x9851}, //12162 #CJK UNIFIED IDEOGRAPH + {0xF1AA, 0x9852}, //12163 #CJK UNIFIED IDEOGRAPH + {0xF1AB, 0x98B8}, //12164 #CJK UNIFIED IDEOGRAPH + {0xF1AC, 0x9941}, //12165 #CJK UNIFIED IDEOGRAPH + {0xF1AD, 0x993C}, //12166 #CJK UNIFIED IDEOGRAPH + {0xF1AE, 0x993A}, //12167 #CJK UNIFIED IDEOGRAPH + {0xF1AF, 0x9A0F}, //12168 #CJK UNIFIED IDEOGRAPH + {0xF1B0, 0x9A0B}, //12169 #CJK UNIFIED IDEOGRAPH + {0xF1B1, 0x9A09}, //12170 #CJK UNIFIED IDEOGRAPH + {0xF1B2, 0x9A0D}, //12171 #CJK UNIFIED IDEOGRAPH + {0xF1B3, 0x9A04}, //12172 #CJK UNIFIED IDEOGRAPH + {0xF1B4, 0x9A11}, //12173 #CJK UNIFIED IDEOGRAPH + {0xF1B5, 0x9A0A}, //12174 #CJK UNIFIED IDEOGRAPH + {0xF1B6, 0x9A05}, //12175 #CJK UNIFIED IDEOGRAPH + {0xF1B7, 0x9A07}, //12176 #CJK UNIFIED IDEOGRAPH + {0xF1B8, 0x9A06}, //12177 #CJK UNIFIED IDEOGRAPH + {0xF1B9, 0x9AC0}, //12178 #CJK UNIFIED IDEOGRAPH + {0xF1BA, 0x9ADC}, //12179 #CJK UNIFIED IDEOGRAPH + {0xF1BB, 0x9B08}, //12180 #CJK UNIFIED IDEOGRAPH + {0xF1BC, 0x9B04}, //12181 #CJK UNIFIED IDEOGRAPH + {0xF1BD, 0x9B05}, //12182 #CJK UNIFIED IDEOGRAPH + {0xF1BE, 0x9B29}, //12183 #CJK UNIFIED IDEOGRAPH + {0xF1BF, 0x9B35}, //12184 #CJK UNIFIED IDEOGRAPH + {0xF1C0, 0x9B4A}, //12185 #CJK UNIFIED IDEOGRAPH + {0xF1C1, 0x9B4C}, //12186 #CJK UNIFIED IDEOGRAPH + {0xF1C2, 0x9B4B}, //12187 #CJK UNIFIED IDEOGRAPH + {0xF1C3, 0x9BC7}, //12188 #CJK UNIFIED IDEOGRAPH + {0xF1C4, 0x9BC6}, //12189 #CJK UNIFIED IDEOGRAPH + {0xF1C5, 0x9BC3}, //12190 #CJK UNIFIED IDEOGRAPH + {0xF1C6, 0x9BBF}, //12191 #CJK UNIFIED IDEOGRAPH + {0xF1C7, 0x9BC1}, //12192 #CJK UNIFIED IDEOGRAPH + {0xF1C8, 0x9BB5}, //12193 #CJK UNIFIED IDEOGRAPH + {0xF1C9, 0x9BB8}, //12194 #CJK UNIFIED IDEOGRAPH + {0xF1CA, 0x9BD3}, //12195 #CJK UNIFIED IDEOGRAPH + {0xF1CB, 0x9BB6}, //12196 #CJK UNIFIED IDEOGRAPH + {0xF1CC, 0x9BC4}, //12197 #CJK UNIFIED IDEOGRAPH + {0xF1CD, 0x9BB9}, //12198 #CJK UNIFIED IDEOGRAPH + {0xF1CE, 0x9BBD}, //12199 #CJK UNIFIED IDEOGRAPH + {0xF1CF, 0x9D5C}, //12200 #CJK UNIFIED IDEOGRAPH + {0xF1D0, 0x9D53}, //12201 #CJK UNIFIED IDEOGRAPH + {0xF1D1, 0x9D4F}, //12202 #CJK UNIFIED IDEOGRAPH + {0xF1D2, 0x9D4A}, //12203 #CJK UNIFIED IDEOGRAPH + {0xF1D3, 0x9D5B}, //12204 #CJK UNIFIED IDEOGRAPH + {0xF1D4, 0x9D4B}, //12205 #CJK UNIFIED IDEOGRAPH + {0xF1D5, 0x9D59}, //12206 #CJK UNIFIED IDEOGRAPH + {0xF1D6, 0x9D56}, //12207 #CJK UNIFIED IDEOGRAPH + {0xF1D7, 0x9D4C}, //12208 #CJK UNIFIED IDEOGRAPH + {0xF1D8, 0x9D57}, //12209 #CJK UNIFIED IDEOGRAPH + {0xF1D9, 0x9D52}, //12210 #CJK UNIFIED IDEOGRAPH + {0xF1DA, 0x9D54}, //12211 #CJK UNIFIED IDEOGRAPH + {0xF1DB, 0x9D5F}, //12212 #CJK UNIFIED IDEOGRAPH + {0xF1DC, 0x9D58}, //12213 #CJK UNIFIED IDEOGRAPH + {0xF1DD, 0x9D5A}, //12214 #CJK UNIFIED IDEOGRAPH + {0xF1DE, 0x9E8E}, //12215 #CJK UNIFIED IDEOGRAPH + {0xF1DF, 0x9E8C}, //12216 #CJK UNIFIED IDEOGRAPH + {0xF1E0, 0x9EDF}, //12217 #CJK UNIFIED IDEOGRAPH + {0xF1E1, 0x9F01}, //12218 #CJK UNIFIED IDEOGRAPH + {0xF1E2, 0x9F00}, //12219 #CJK UNIFIED IDEOGRAPH + {0xF1E3, 0x9F16}, //12220 #CJK UNIFIED IDEOGRAPH + {0xF1E4, 0x9F25}, //12221 #CJK UNIFIED IDEOGRAPH + {0xF1E5, 0x9F2B}, //12222 #CJK UNIFIED IDEOGRAPH + {0xF1E6, 0x9F2A}, //12223 #CJK UNIFIED IDEOGRAPH + {0xF1E7, 0x9F29}, //12224 #CJK UNIFIED IDEOGRAPH + {0xF1E8, 0x9F28}, //12225 #CJK UNIFIED IDEOGRAPH + {0xF1E9, 0x9F4C}, //12226 #CJK UNIFIED IDEOGRAPH + {0xF1EA, 0x9F55}, //12227 #CJK UNIFIED IDEOGRAPH + {0xF1EB, 0x5134}, //12228 #CJK UNIFIED IDEOGRAPH + {0xF1EC, 0x5135}, //12229 #CJK UNIFIED IDEOGRAPH + {0xF1ED, 0x5296}, //12230 #CJK UNIFIED IDEOGRAPH + {0xF1EE, 0x52F7}, //12231 #CJK UNIFIED IDEOGRAPH + {0xF1EF, 0x53B4}, //12232 #CJK UNIFIED IDEOGRAPH + {0xF1F0, 0x56AB}, //12233 #CJK UNIFIED IDEOGRAPH + {0xF1F1, 0x56AD}, //12234 #CJK UNIFIED IDEOGRAPH + {0xF1F2, 0x56A6}, //12235 #CJK UNIFIED IDEOGRAPH + {0xF1F3, 0x56A7}, //12236 #CJK UNIFIED IDEOGRAPH + {0xF1F4, 0x56AA}, //12237 #CJK UNIFIED IDEOGRAPH + {0xF1F5, 0x56AC}, //12238 #CJK UNIFIED IDEOGRAPH + {0xF1F6, 0x58DA}, //12239 #CJK UNIFIED IDEOGRAPH + {0xF1F7, 0x58DD}, //12240 #CJK UNIFIED IDEOGRAPH + {0xF1F8, 0x58DB}, //12241 #CJK UNIFIED IDEOGRAPH + {0xF1F9, 0x5912}, //12242 #CJK UNIFIED IDEOGRAPH + {0xF1FA, 0x5B3D}, //12243 #CJK UNIFIED IDEOGRAPH + {0xF1FB, 0x5B3E}, //12244 #CJK UNIFIED IDEOGRAPH + {0xF1FC, 0x5B3F}, //12245 #CJK UNIFIED IDEOGRAPH + {0xF1FD, 0x5DC3}, //12246 #CJK UNIFIED IDEOGRAPH + {0xF1FE, 0x5E70}, //12247 #CJK UNIFIED IDEOGRAPH + {0xF240, 0x5FBF}, //12248 #CJK UNIFIED IDEOGRAPH + {0xF241, 0x61FB}, //12249 #CJK UNIFIED IDEOGRAPH + {0xF242, 0x6507}, //12250 #CJK UNIFIED IDEOGRAPH + {0xF243, 0x6510}, //12251 #CJK UNIFIED IDEOGRAPH + {0xF244, 0x650D}, //12252 #CJK UNIFIED IDEOGRAPH + {0xF245, 0x6509}, //12253 #CJK UNIFIED IDEOGRAPH + {0xF246, 0x650C}, //12254 #CJK UNIFIED IDEOGRAPH + {0xF247, 0x650E}, //12255 #CJK UNIFIED IDEOGRAPH + {0xF248, 0x6584}, //12256 #CJK UNIFIED IDEOGRAPH + {0xF249, 0x65DE}, //12257 #CJK UNIFIED IDEOGRAPH + {0xF24A, 0x65DD}, //12258 #CJK UNIFIED IDEOGRAPH + {0xF24B, 0x66DE}, //12259 #CJK UNIFIED IDEOGRAPH + {0xF24C, 0x6AE7}, //12260 #CJK UNIFIED IDEOGRAPH + {0xF24D, 0x6AE0}, //12261 #CJK UNIFIED IDEOGRAPH + {0xF24E, 0x6ACC}, //12262 #CJK UNIFIED IDEOGRAPH + {0xF24F, 0x6AD1}, //12263 #CJK UNIFIED IDEOGRAPH + {0xF250, 0x6AD9}, //12264 #CJK UNIFIED IDEOGRAPH + {0xF251, 0x6ACB}, //12265 #CJK UNIFIED IDEOGRAPH + {0xF252, 0x6ADF}, //12266 #CJK UNIFIED IDEOGRAPH + {0xF253, 0x6ADC}, //12267 #CJK UNIFIED IDEOGRAPH + {0xF254, 0x6AD0}, //12268 #CJK UNIFIED IDEOGRAPH + {0xF255, 0x6AEB}, //12269 #CJK UNIFIED IDEOGRAPH + {0xF256, 0x6ACF}, //12270 #CJK UNIFIED IDEOGRAPH + {0xF257, 0x6ACD}, //12271 #CJK UNIFIED IDEOGRAPH + {0xF258, 0x6ADE}, //12272 #CJK UNIFIED IDEOGRAPH + {0xF259, 0x6B60}, //12273 #CJK UNIFIED IDEOGRAPH + {0xF25A, 0x6BB0}, //12274 #CJK UNIFIED IDEOGRAPH + {0xF25B, 0x6C0C}, //12275 #CJK UNIFIED IDEOGRAPH + {0xF25C, 0x7019}, //12276 #CJK UNIFIED IDEOGRAPH + {0xF25D, 0x7027}, //12277 #CJK UNIFIED IDEOGRAPH + {0xF25E, 0x7020}, //12278 #CJK UNIFIED IDEOGRAPH + {0xF25F, 0x7016}, //12279 #CJK UNIFIED IDEOGRAPH + {0xF260, 0x702B}, //12280 #CJK UNIFIED IDEOGRAPH + {0xF261, 0x7021}, //12281 #CJK UNIFIED IDEOGRAPH + {0xF262, 0x7022}, //12282 #CJK UNIFIED IDEOGRAPH + {0xF263, 0x7023}, //12283 #CJK UNIFIED IDEOGRAPH + {0xF264, 0x7029}, //12284 #CJK UNIFIED IDEOGRAPH + {0xF265, 0x7017}, //12285 #CJK UNIFIED IDEOGRAPH + {0xF266, 0x7024}, //12286 #CJK UNIFIED IDEOGRAPH + {0xF267, 0x701C}, //12287 #CJK UNIFIED IDEOGRAPH + {0xF268, 0x702A}, //12288 #CJK UNIFIED IDEOGRAPH + {0xF269, 0x720C}, //12289 #CJK UNIFIED IDEOGRAPH + {0xF26A, 0x720A}, //12290 #CJK UNIFIED IDEOGRAPH + {0xF26B, 0x7207}, //12291 #CJK UNIFIED IDEOGRAPH + {0xF26C, 0x7202}, //12292 #CJK UNIFIED IDEOGRAPH + {0xF26D, 0x7205}, //12293 #CJK UNIFIED IDEOGRAPH + {0xF26E, 0x72A5}, //12294 #CJK UNIFIED IDEOGRAPH + {0xF26F, 0x72A6}, //12295 #CJK UNIFIED IDEOGRAPH + {0xF270, 0x72A4}, //12296 #CJK UNIFIED IDEOGRAPH + {0xF271, 0x72A3}, //12297 #CJK UNIFIED IDEOGRAPH + {0xF272, 0x72A1}, //12298 #CJK UNIFIED IDEOGRAPH + {0xF273, 0x74CB}, //12299 #CJK UNIFIED IDEOGRAPH + {0xF274, 0x74C5}, //12300 #CJK UNIFIED IDEOGRAPH + {0xF275, 0x74B7}, //12301 #CJK UNIFIED IDEOGRAPH + {0xF276, 0x74C3}, //12302 #CJK UNIFIED IDEOGRAPH + {0xF277, 0x7516}, //12303 #CJK UNIFIED IDEOGRAPH + {0xF278, 0x7660}, //12304 #CJK UNIFIED IDEOGRAPH + {0xF279, 0x77C9}, //12305 #CJK UNIFIED IDEOGRAPH + {0xF27A, 0x77CA}, //12306 #CJK UNIFIED IDEOGRAPH + {0xF27B, 0x77C4}, //12307 #CJK UNIFIED IDEOGRAPH + {0xF27C, 0x77F1}, //12308 #CJK UNIFIED IDEOGRAPH + {0xF27D, 0x791D}, //12309 #CJK UNIFIED IDEOGRAPH + {0xF27E, 0x791B}, //12310 #CJK UNIFIED IDEOGRAPH + {0xF2A1, 0x7921}, //12311 #CJK UNIFIED IDEOGRAPH + {0xF2A2, 0x791C}, //12312 #CJK UNIFIED IDEOGRAPH + {0xF2A3, 0x7917}, //12313 #CJK UNIFIED IDEOGRAPH + {0xF2A4, 0x791E}, //12314 #CJK UNIFIED IDEOGRAPH + {0xF2A5, 0x79B0}, //12315 #CJK UNIFIED IDEOGRAPH + {0xF2A6, 0x7A67}, //12316 #CJK UNIFIED IDEOGRAPH + {0xF2A7, 0x7A68}, //12317 #CJK UNIFIED IDEOGRAPH + {0xF2A8, 0x7C33}, //12318 #CJK UNIFIED IDEOGRAPH + {0xF2A9, 0x7C3C}, //12319 #CJK UNIFIED IDEOGRAPH + {0xF2AA, 0x7C39}, //12320 #CJK UNIFIED IDEOGRAPH + {0xF2AB, 0x7C2C}, //12321 #CJK UNIFIED IDEOGRAPH + {0xF2AC, 0x7C3B}, //12322 #CJK UNIFIED IDEOGRAPH + {0xF2AD, 0x7CEC}, //12323 #CJK UNIFIED IDEOGRAPH + {0xF2AE, 0x7CEA}, //12324 #CJK UNIFIED IDEOGRAPH + {0xF2AF, 0x7E76}, //12325 #CJK UNIFIED IDEOGRAPH + {0xF2B0, 0x7E75}, //12326 #CJK UNIFIED IDEOGRAPH + {0xF2B1, 0x7E78}, //12327 #CJK UNIFIED IDEOGRAPH + {0xF2B2, 0x7E70}, //12328 #CJK UNIFIED IDEOGRAPH + {0xF2B3, 0x7E77}, //12329 #CJK UNIFIED IDEOGRAPH + {0xF2B4, 0x7E6F}, //12330 #CJK UNIFIED IDEOGRAPH + {0xF2B5, 0x7E7A}, //12331 #CJK UNIFIED IDEOGRAPH + {0xF2B6, 0x7E72}, //12332 #CJK UNIFIED IDEOGRAPH + {0xF2B7, 0x7E74}, //12333 #CJK UNIFIED IDEOGRAPH + {0xF2B8, 0x7E68}, //12334 #CJK UNIFIED IDEOGRAPH + {0xF2B9, 0x7F4B}, //12335 #CJK UNIFIED IDEOGRAPH + {0xF2BA, 0x7F4A}, //12336 #CJK UNIFIED IDEOGRAPH + {0xF2BB, 0x7F83}, //12337 #CJK UNIFIED IDEOGRAPH + {0xF2BC, 0x7F86}, //12338 #CJK UNIFIED IDEOGRAPH + {0xF2BD, 0x7FB7}, //12339 #CJK UNIFIED IDEOGRAPH + {0xF2BE, 0x7FFD}, //12340 #CJK UNIFIED IDEOGRAPH + {0xF2BF, 0x7FFE}, //12341 #CJK UNIFIED IDEOGRAPH + {0xF2C0, 0x8078}, //12342 #CJK UNIFIED IDEOGRAPH + {0xF2C1, 0x81D7}, //12343 #CJK UNIFIED IDEOGRAPH + {0xF2C2, 0x81D5}, //12344 #CJK UNIFIED IDEOGRAPH + {0xF2C3, 0x8264}, //12345 #CJK UNIFIED IDEOGRAPH + {0xF2C4, 0x8261}, //12346 #CJK UNIFIED IDEOGRAPH + {0xF2C5, 0x8263}, //12347 #CJK UNIFIED IDEOGRAPH + {0xF2C6, 0x85EB}, //12348 #CJK UNIFIED IDEOGRAPH + {0xF2C7, 0x85F1}, //12349 #CJK UNIFIED IDEOGRAPH + {0xF2C8, 0x85ED}, //12350 #CJK UNIFIED IDEOGRAPH + {0xF2C9, 0x85D9}, //12351 #CJK UNIFIED IDEOGRAPH + {0xF2CA, 0x85E1}, //12352 #CJK UNIFIED IDEOGRAPH + {0xF2CB, 0x85E8}, //12353 #CJK UNIFIED IDEOGRAPH + {0xF2CC, 0x85DA}, //12354 #CJK UNIFIED IDEOGRAPH + {0xF2CD, 0x85D7}, //12355 #CJK UNIFIED IDEOGRAPH + {0xF2CE, 0x85EC}, //12356 #CJK UNIFIED IDEOGRAPH + {0xF2CF, 0x85F2}, //12357 #CJK UNIFIED IDEOGRAPH + {0xF2D0, 0x85F8}, //12358 #CJK UNIFIED IDEOGRAPH + {0xF2D1, 0x85D8}, //12359 #CJK UNIFIED IDEOGRAPH + {0xF2D2, 0x85DF}, //12360 #CJK UNIFIED IDEOGRAPH + {0xF2D3, 0x85E3}, //12361 #CJK UNIFIED IDEOGRAPH + {0xF2D4, 0x85DC}, //12362 #CJK UNIFIED IDEOGRAPH + {0xF2D5, 0x85D1}, //12363 #CJK UNIFIED IDEOGRAPH + {0xF2D6, 0x85F0}, //12364 #CJK UNIFIED IDEOGRAPH + {0xF2D7, 0x85E6}, //12365 #CJK UNIFIED IDEOGRAPH + {0xF2D8, 0x85EF}, //12366 #CJK UNIFIED IDEOGRAPH + {0xF2D9, 0x85DE}, //12367 #CJK UNIFIED IDEOGRAPH + {0xF2DA, 0x85E2}, //12368 #CJK UNIFIED IDEOGRAPH + {0xF2DB, 0x8800}, //12369 #CJK UNIFIED IDEOGRAPH + {0xF2DC, 0x87FA}, //12370 #CJK UNIFIED IDEOGRAPH + {0xF2DD, 0x8803}, //12371 #CJK UNIFIED IDEOGRAPH + {0xF2DE, 0x87F6}, //12372 #CJK UNIFIED IDEOGRAPH + {0xF2DF, 0x87F7}, //12373 #CJK UNIFIED IDEOGRAPH + {0xF2E0, 0x8809}, //12374 #CJK UNIFIED IDEOGRAPH + {0xF2E1, 0x880C}, //12375 #CJK UNIFIED IDEOGRAPH + {0xF2E2, 0x880B}, //12376 #CJK UNIFIED IDEOGRAPH + {0xF2E3, 0x8806}, //12377 #CJK UNIFIED IDEOGRAPH + {0xF2E4, 0x87FC}, //12378 #CJK UNIFIED IDEOGRAPH + {0xF2E5, 0x8808}, //12379 #CJK UNIFIED IDEOGRAPH + {0xF2E6, 0x87FF}, //12380 #CJK UNIFIED IDEOGRAPH + {0xF2E7, 0x880A}, //12381 #CJK UNIFIED IDEOGRAPH + {0xF2E8, 0x8802}, //12382 #CJK UNIFIED IDEOGRAPH + {0xF2E9, 0x8962}, //12383 #CJK UNIFIED IDEOGRAPH + {0xF2EA, 0x895A}, //12384 #CJK UNIFIED IDEOGRAPH + {0xF2EB, 0x895B}, //12385 #CJK UNIFIED IDEOGRAPH + {0xF2EC, 0x8957}, //12386 #CJK UNIFIED IDEOGRAPH + {0xF2ED, 0x8961}, //12387 #CJK UNIFIED IDEOGRAPH + {0xF2EE, 0x895C}, //12388 #CJK UNIFIED IDEOGRAPH + {0xF2EF, 0x8958}, //12389 #CJK UNIFIED IDEOGRAPH + {0xF2F0, 0x895D}, //12390 #CJK UNIFIED IDEOGRAPH + {0xF2F1, 0x8959}, //12391 #CJK UNIFIED IDEOGRAPH + {0xF2F2, 0x8988}, //12392 #CJK UNIFIED IDEOGRAPH + {0xF2F3, 0x89B7}, //12393 #CJK UNIFIED IDEOGRAPH + {0xF2F4, 0x89B6}, //12394 #CJK UNIFIED IDEOGRAPH + {0xF2F5, 0x89F6}, //12395 #CJK UNIFIED IDEOGRAPH + {0xF2F6, 0x8B50}, //12396 #CJK UNIFIED IDEOGRAPH + {0xF2F7, 0x8B48}, //12397 #CJK UNIFIED IDEOGRAPH + {0xF2F8, 0x8B4A}, //12398 #CJK UNIFIED IDEOGRAPH + {0xF2F9, 0x8B40}, //12399 #CJK UNIFIED IDEOGRAPH + {0xF2FA, 0x8B53}, //12400 #CJK UNIFIED IDEOGRAPH + {0xF2FB, 0x8B56}, //12401 #CJK UNIFIED IDEOGRAPH + {0xF2FC, 0x8B54}, //12402 #CJK UNIFIED IDEOGRAPH + {0xF2FD, 0x8B4B}, //12403 #CJK UNIFIED IDEOGRAPH + {0xF2FE, 0x8B55}, //12404 #CJK UNIFIED IDEOGRAPH + {0xF340, 0x8B51}, //12405 #CJK UNIFIED IDEOGRAPH + {0xF341, 0x8B42}, //12406 #CJK UNIFIED IDEOGRAPH + {0xF342, 0x8B52}, //12407 #CJK UNIFIED IDEOGRAPH + {0xF343, 0x8B57}, //12408 #CJK UNIFIED IDEOGRAPH + {0xF344, 0x8C43}, //12409 #CJK UNIFIED IDEOGRAPH + {0xF345, 0x8C77}, //12410 #CJK UNIFIED IDEOGRAPH + {0xF346, 0x8C76}, //12411 #CJK UNIFIED IDEOGRAPH + {0xF347, 0x8C9A}, //12412 #CJK UNIFIED IDEOGRAPH + {0xF348, 0x8D06}, //12413 #CJK UNIFIED IDEOGRAPH + {0xF349, 0x8D07}, //12414 #CJK UNIFIED IDEOGRAPH + {0xF34A, 0x8D09}, //12415 #CJK UNIFIED IDEOGRAPH + {0xF34B, 0x8DAC}, //12416 #CJK UNIFIED IDEOGRAPH + {0xF34C, 0x8DAA}, //12417 #CJK UNIFIED IDEOGRAPH + {0xF34D, 0x8DAD}, //12418 #CJK UNIFIED IDEOGRAPH + {0xF34E, 0x8DAB}, //12419 #CJK UNIFIED IDEOGRAPH + {0xF34F, 0x8E6D}, //12420 #CJK UNIFIED IDEOGRAPH + {0xF350, 0x8E78}, //12421 #CJK UNIFIED IDEOGRAPH + {0xF351, 0x8E73}, //12422 #CJK UNIFIED IDEOGRAPH + {0xF352, 0x8E6A}, //12423 #CJK UNIFIED IDEOGRAPH + {0xF353, 0x8E6F}, //12424 #CJK UNIFIED IDEOGRAPH + {0xF354, 0x8E7B}, //12425 #CJK UNIFIED IDEOGRAPH + {0xF355, 0x8EC2}, //12426 #CJK UNIFIED IDEOGRAPH + {0xF356, 0x8F52}, //12427 #CJK UNIFIED IDEOGRAPH + {0xF357, 0x8F51}, //12428 #CJK UNIFIED IDEOGRAPH + {0xF358, 0x8F4F}, //12429 #CJK UNIFIED IDEOGRAPH + {0xF359, 0x8F50}, //12430 #CJK UNIFIED IDEOGRAPH + {0xF35A, 0x8F53}, //12431 #CJK UNIFIED IDEOGRAPH + {0xF35B, 0x8FB4}, //12432 #CJK UNIFIED IDEOGRAPH + {0xF35C, 0x9140}, //12433 #CJK UNIFIED IDEOGRAPH + {0xF35D, 0x913F}, //12434 #CJK UNIFIED IDEOGRAPH + {0xF35E, 0x91B0}, //12435 #CJK UNIFIED IDEOGRAPH + {0xF35F, 0x91AD}, //12436 #CJK UNIFIED IDEOGRAPH + {0xF360, 0x93DE}, //12437 #CJK UNIFIED IDEOGRAPH + {0xF361, 0x93C7}, //12438 #CJK UNIFIED IDEOGRAPH + {0xF362, 0x93CF}, //12439 #CJK UNIFIED IDEOGRAPH + {0xF363, 0x93C2}, //12440 #CJK UNIFIED IDEOGRAPH + {0xF364, 0x93DA}, //12441 #CJK UNIFIED IDEOGRAPH + {0xF365, 0x93D0}, //12442 #CJK UNIFIED IDEOGRAPH + {0xF366, 0x93F9}, //12443 #CJK UNIFIED IDEOGRAPH + {0xF367, 0x93EC}, //12444 #CJK UNIFIED IDEOGRAPH + {0xF368, 0x93CC}, //12445 #CJK UNIFIED IDEOGRAPH + {0xF369, 0x93D9}, //12446 #CJK UNIFIED IDEOGRAPH + {0xF36A, 0x93A9}, //12447 #CJK UNIFIED IDEOGRAPH + {0xF36B, 0x93E6}, //12448 #CJK UNIFIED IDEOGRAPH + {0xF36C, 0x93CA}, //12449 #CJK UNIFIED IDEOGRAPH + {0xF36D, 0x93D4}, //12450 #CJK UNIFIED IDEOGRAPH + {0xF36E, 0x93EE}, //12451 #CJK UNIFIED IDEOGRAPH + {0xF36F, 0x93E3}, //12452 #CJK UNIFIED IDEOGRAPH + {0xF370, 0x93D5}, //12453 #CJK UNIFIED IDEOGRAPH + {0xF371, 0x93C4}, //12454 #CJK UNIFIED IDEOGRAPH + {0xF372, 0x93CE}, //12455 #CJK UNIFIED IDEOGRAPH + {0xF373, 0x93C0}, //12456 #CJK UNIFIED IDEOGRAPH + {0xF374, 0x93D2}, //12457 #CJK UNIFIED IDEOGRAPH + {0xF375, 0x93E7}, //12458 #CJK UNIFIED IDEOGRAPH + {0xF376, 0x957D}, //12459 #CJK UNIFIED IDEOGRAPH + {0xF377, 0x95DA}, //12460 #CJK UNIFIED IDEOGRAPH + {0xF378, 0x95DB}, //12461 #CJK UNIFIED IDEOGRAPH + {0xF379, 0x96E1}, //12462 #CJK UNIFIED IDEOGRAPH + {0xF37A, 0x9729}, //12463 #CJK UNIFIED IDEOGRAPH + {0xF37B, 0x972B}, //12464 #CJK UNIFIED IDEOGRAPH + {0xF37C, 0x972C}, //12465 #CJK UNIFIED IDEOGRAPH + {0xF37D, 0x9728}, //12466 #CJK UNIFIED IDEOGRAPH + {0xF37E, 0x9726}, //12467 #CJK UNIFIED IDEOGRAPH + {0xF3A1, 0x97B3}, //12468 #CJK UNIFIED IDEOGRAPH + {0xF3A2, 0x97B7}, //12469 #CJK UNIFIED IDEOGRAPH + {0xF3A3, 0x97B6}, //12470 #CJK UNIFIED IDEOGRAPH + {0xF3A4, 0x97DD}, //12471 #CJK UNIFIED IDEOGRAPH + {0xF3A5, 0x97DE}, //12472 #CJK UNIFIED IDEOGRAPH + {0xF3A6, 0x97DF}, //12473 #CJK UNIFIED IDEOGRAPH + {0xF3A7, 0x985C}, //12474 #CJK UNIFIED IDEOGRAPH + {0xF3A8, 0x9859}, //12475 #CJK UNIFIED IDEOGRAPH + {0xF3A9, 0x985D}, //12476 #CJK UNIFIED IDEOGRAPH + {0xF3AA, 0x9857}, //12477 #CJK UNIFIED IDEOGRAPH + {0xF3AB, 0x98BF}, //12478 #CJK UNIFIED IDEOGRAPH + {0xF3AC, 0x98BD}, //12479 #CJK UNIFIED IDEOGRAPH + {0xF3AD, 0x98BB}, //12480 #CJK UNIFIED IDEOGRAPH + {0xF3AE, 0x98BE}, //12481 #CJK UNIFIED IDEOGRAPH + {0xF3AF, 0x9948}, //12482 #CJK UNIFIED IDEOGRAPH + {0xF3B0, 0x9947}, //12483 #CJK UNIFIED IDEOGRAPH + {0xF3B1, 0x9943}, //12484 #CJK UNIFIED IDEOGRAPH + {0xF3B2, 0x99A6}, //12485 #CJK UNIFIED IDEOGRAPH + {0xF3B3, 0x99A7}, //12486 #CJK UNIFIED IDEOGRAPH + {0xF3B4, 0x9A1A}, //12487 #CJK UNIFIED IDEOGRAPH + {0xF3B5, 0x9A15}, //12488 #CJK UNIFIED IDEOGRAPH + {0xF3B6, 0x9A25}, //12489 #CJK UNIFIED IDEOGRAPH + {0xF3B7, 0x9A1D}, //12490 #CJK UNIFIED IDEOGRAPH + {0xF3B8, 0x9A24}, //12491 #CJK UNIFIED IDEOGRAPH + {0xF3B9, 0x9A1B}, //12492 #CJK UNIFIED IDEOGRAPH + {0xF3BA, 0x9A22}, //12493 #CJK UNIFIED IDEOGRAPH + {0xF3BB, 0x9A20}, //12494 #CJK UNIFIED IDEOGRAPH + {0xF3BC, 0x9A27}, //12495 #CJK UNIFIED IDEOGRAPH + {0xF3BD, 0x9A23}, //12496 #CJK UNIFIED IDEOGRAPH + {0xF3BE, 0x9A1E}, //12497 #CJK UNIFIED IDEOGRAPH + {0xF3BF, 0x9A1C}, //12498 #CJK UNIFIED IDEOGRAPH + {0xF3C0, 0x9A14}, //12499 #CJK UNIFIED IDEOGRAPH + {0xF3C1, 0x9AC2}, //12500 #CJK UNIFIED IDEOGRAPH + {0xF3C2, 0x9B0B}, //12501 #CJK UNIFIED IDEOGRAPH + {0xF3C3, 0x9B0A}, //12502 #CJK UNIFIED IDEOGRAPH + {0xF3C4, 0x9B0E}, //12503 #CJK UNIFIED IDEOGRAPH + {0xF3C5, 0x9B0C}, //12504 #CJK UNIFIED IDEOGRAPH + {0xF3C6, 0x9B37}, //12505 #CJK UNIFIED IDEOGRAPH + {0xF3C7, 0x9BEA}, //12506 #CJK UNIFIED IDEOGRAPH + {0xF3C8, 0x9BEB}, //12507 #CJK UNIFIED IDEOGRAPH + {0xF3C9, 0x9BE0}, //12508 #CJK UNIFIED IDEOGRAPH + {0xF3CA, 0x9BDE}, //12509 #CJK UNIFIED IDEOGRAPH + {0xF3CB, 0x9BE4}, //12510 #CJK UNIFIED IDEOGRAPH + {0xF3CC, 0x9BE6}, //12511 #CJK UNIFIED IDEOGRAPH + {0xF3CD, 0x9BE2}, //12512 #CJK UNIFIED IDEOGRAPH + {0xF3CE, 0x9BF0}, //12513 #CJK UNIFIED IDEOGRAPH + {0xF3CF, 0x9BD4}, //12514 #CJK UNIFIED IDEOGRAPH + {0xF3D0, 0x9BD7}, //12515 #CJK UNIFIED IDEOGRAPH + {0xF3D1, 0x9BEC}, //12516 #CJK UNIFIED IDEOGRAPH + {0xF3D2, 0x9BDC}, //12517 #CJK UNIFIED IDEOGRAPH + {0xF3D3, 0x9BD9}, //12518 #CJK UNIFIED IDEOGRAPH + {0xF3D4, 0x9BE5}, //12519 #CJK UNIFIED IDEOGRAPH + {0xF3D5, 0x9BD5}, //12520 #CJK UNIFIED IDEOGRAPH + {0xF3D6, 0x9BE1}, //12521 #CJK UNIFIED IDEOGRAPH + {0xF3D7, 0x9BDA}, //12522 #CJK UNIFIED IDEOGRAPH + {0xF3D8, 0x9D77}, //12523 #CJK UNIFIED IDEOGRAPH + {0xF3D9, 0x9D81}, //12524 #CJK UNIFIED IDEOGRAPH + {0xF3DA, 0x9D8A}, //12525 #CJK UNIFIED IDEOGRAPH + {0xF3DB, 0x9D84}, //12526 #CJK UNIFIED IDEOGRAPH + {0xF3DC, 0x9D88}, //12527 #CJK UNIFIED IDEOGRAPH + {0xF3DD, 0x9D71}, //12528 #CJK UNIFIED IDEOGRAPH + {0xF3DE, 0x9D80}, //12529 #CJK UNIFIED IDEOGRAPH + {0xF3DF, 0x9D78}, //12530 #CJK UNIFIED IDEOGRAPH + {0xF3E0, 0x9D86}, //12531 #CJK UNIFIED IDEOGRAPH + {0xF3E1, 0x9D8B}, //12532 #CJK UNIFIED IDEOGRAPH + {0xF3E2, 0x9D8C}, //12533 #CJK UNIFIED IDEOGRAPH + {0xF3E3, 0x9D7D}, //12534 #CJK UNIFIED IDEOGRAPH + {0xF3E4, 0x9D6B}, //12535 #CJK UNIFIED IDEOGRAPH + {0xF3E5, 0x9D74}, //12536 #CJK UNIFIED IDEOGRAPH + {0xF3E6, 0x9D75}, //12537 #CJK UNIFIED IDEOGRAPH + {0xF3E7, 0x9D70}, //12538 #CJK UNIFIED IDEOGRAPH + {0xF3E8, 0x9D69}, //12539 #CJK UNIFIED IDEOGRAPH + {0xF3E9, 0x9D85}, //12540 #CJK UNIFIED IDEOGRAPH + {0xF3EA, 0x9D73}, //12541 #CJK UNIFIED IDEOGRAPH + {0xF3EB, 0x9D7B}, //12542 #CJK UNIFIED IDEOGRAPH + {0xF3EC, 0x9D82}, //12543 #CJK UNIFIED IDEOGRAPH + {0xF3ED, 0x9D6F}, //12544 #CJK UNIFIED IDEOGRAPH + {0xF3EE, 0x9D79}, //12545 #CJK UNIFIED IDEOGRAPH + {0xF3EF, 0x9D7F}, //12546 #CJK UNIFIED IDEOGRAPH + {0xF3F0, 0x9D87}, //12547 #CJK UNIFIED IDEOGRAPH + {0xF3F1, 0x9D68}, //12548 #CJK UNIFIED IDEOGRAPH + {0xF3F2, 0x9E94}, //12549 #CJK UNIFIED IDEOGRAPH + {0xF3F3, 0x9E91}, //12550 #CJK UNIFIED IDEOGRAPH + {0xF3F4, 0x9EC0}, //12551 #CJK UNIFIED IDEOGRAPH + {0xF3F5, 0x9EFC}, //12552 #CJK UNIFIED IDEOGRAPH + {0xF3F6, 0x9F2D}, //12553 #CJK UNIFIED IDEOGRAPH + {0xF3F7, 0x9F40}, //12554 #CJK UNIFIED IDEOGRAPH + {0xF3F8, 0x9F41}, //12555 #CJK UNIFIED IDEOGRAPH + {0xF3F9, 0x9F4D}, //12556 #CJK UNIFIED IDEOGRAPH + {0xF3FA, 0x9F56}, //12557 #CJK UNIFIED IDEOGRAPH + {0xF3FB, 0x9F57}, //12558 #CJK UNIFIED IDEOGRAPH + {0xF3FC, 0x9F58}, //12559 #CJK UNIFIED IDEOGRAPH + {0xF3FD, 0x5337}, //12560 #CJK UNIFIED IDEOGRAPH + {0xF3FE, 0x56B2}, //12561 #CJK UNIFIED IDEOGRAPH + {0xF440, 0x56B5}, //12562 #CJK UNIFIED IDEOGRAPH + {0xF441, 0x56B3}, //12563 #CJK UNIFIED IDEOGRAPH + {0xF442, 0x58E3}, //12564 #CJK UNIFIED IDEOGRAPH + {0xF443, 0x5B45}, //12565 #CJK UNIFIED IDEOGRAPH + {0xF444, 0x5DC6}, //12566 #CJK UNIFIED IDEOGRAPH + {0xF445, 0x5DC7}, //12567 #CJK UNIFIED IDEOGRAPH + {0xF446, 0x5EEE}, //12568 #CJK UNIFIED IDEOGRAPH + {0xF447, 0x5EEF}, //12569 #CJK UNIFIED IDEOGRAPH + {0xF448, 0x5FC0}, //12570 #CJK UNIFIED IDEOGRAPH + {0xF449, 0x5FC1}, //12571 #CJK UNIFIED IDEOGRAPH + {0xF44A, 0x61F9}, //12572 #CJK UNIFIED IDEOGRAPH + {0xF44B, 0x6517}, //12573 #CJK UNIFIED IDEOGRAPH + {0xF44C, 0x6516}, //12574 #CJK UNIFIED IDEOGRAPH + {0xF44D, 0x6515}, //12575 #CJK UNIFIED IDEOGRAPH + {0xF44E, 0x6513}, //12576 #CJK UNIFIED IDEOGRAPH + {0xF44F, 0x65DF}, //12577 #CJK UNIFIED IDEOGRAPH + {0xF450, 0x66E8}, //12578 #CJK UNIFIED IDEOGRAPH + {0xF451, 0x66E3}, //12579 #CJK UNIFIED IDEOGRAPH + {0xF452, 0x66E4}, //12580 #CJK UNIFIED IDEOGRAPH + {0xF453, 0x6AF3}, //12581 #CJK UNIFIED IDEOGRAPH + {0xF454, 0x6AF0}, //12582 #CJK UNIFIED IDEOGRAPH + {0xF455, 0x6AEA}, //12583 #CJK UNIFIED IDEOGRAPH + {0xF456, 0x6AE8}, //12584 #CJK UNIFIED IDEOGRAPH + {0xF457, 0x6AF9}, //12585 #CJK UNIFIED IDEOGRAPH + {0xF458, 0x6AF1}, //12586 #CJK UNIFIED IDEOGRAPH + {0xF459, 0x6AEE}, //12587 #CJK UNIFIED IDEOGRAPH + {0xF45A, 0x6AEF}, //12588 #CJK UNIFIED IDEOGRAPH + {0xF45B, 0x703C}, //12589 #CJK UNIFIED IDEOGRAPH + {0xF45C, 0x7035}, //12590 #CJK UNIFIED IDEOGRAPH + {0xF45D, 0x702F}, //12591 #CJK UNIFIED IDEOGRAPH + {0xF45E, 0x7037}, //12592 #CJK UNIFIED IDEOGRAPH + {0xF45F, 0x7034}, //12593 #CJK UNIFIED IDEOGRAPH + {0xF460, 0x7031}, //12594 #CJK UNIFIED IDEOGRAPH + {0xF461, 0x7042}, //12595 #CJK UNIFIED IDEOGRAPH + {0xF462, 0x7038}, //12596 #CJK UNIFIED IDEOGRAPH + {0xF463, 0x703F}, //12597 #CJK UNIFIED IDEOGRAPH + {0xF464, 0x703A}, //12598 #CJK UNIFIED IDEOGRAPH + {0xF465, 0x7039}, //12599 #CJK UNIFIED IDEOGRAPH + {0xF466, 0x7040}, //12600 #CJK UNIFIED IDEOGRAPH + {0xF467, 0x703B}, //12601 #CJK UNIFIED IDEOGRAPH + {0xF468, 0x7033}, //12602 #CJK UNIFIED IDEOGRAPH + {0xF469, 0x7041}, //12603 #CJK UNIFIED IDEOGRAPH + {0xF46A, 0x7213}, //12604 #CJK UNIFIED IDEOGRAPH + {0xF46B, 0x7214}, //12605 #CJK UNIFIED IDEOGRAPH + {0xF46C, 0x72A8}, //12606 #CJK UNIFIED IDEOGRAPH + {0xF46D, 0x737D}, //12607 #CJK UNIFIED IDEOGRAPH + {0xF46E, 0x737C}, //12608 #CJK UNIFIED IDEOGRAPH + {0xF46F, 0x74BA}, //12609 #CJK UNIFIED IDEOGRAPH + {0xF470, 0x76AB}, //12610 #CJK UNIFIED IDEOGRAPH + {0xF471, 0x76AA}, //12611 #CJK UNIFIED IDEOGRAPH + {0xF472, 0x76BE}, //12612 #CJK UNIFIED IDEOGRAPH + {0xF473, 0x76ED}, //12613 #CJK UNIFIED IDEOGRAPH + {0xF474, 0x77CC}, //12614 #CJK UNIFIED IDEOGRAPH + {0xF475, 0x77CE}, //12615 #CJK UNIFIED IDEOGRAPH + {0xF476, 0x77CF}, //12616 #CJK UNIFIED IDEOGRAPH + {0xF477, 0x77CD}, //12617 #CJK UNIFIED IDEOGRAPH + {0xF478, 0x77F2}, //12618 #CJK UNIFIED IDEOGRAPH + {0xF479, 0x7925}, //12619 #CJK UNIFIED IDEOGRAPH + {0xF47A, 0x7923}, //12620 #CJK UNIFIED IDEOGRAPH + {0xF47B, 0x7927}, //12621 #CJK UNIFIED IDEOGRAPH + {0xF47C, 0x7928}, //12622 #CJK UNIFIED IDEOGRAPH + {0xF47D, 0x7924}, //12623 #CJK UNIFIED IDEOGRAPH + {0xF47E, 0x7929}, //12624 #CJK UNIFIED IDEOGRAPH + {0xF4A1, 0x79B2}, //12625 #CJK UNIFIED IDEOGRAPH + {0xF4A2, 0x7A6E}, //12626 #CJK UNIFIED IDEOGRAPH + {0xF4A3, 0x7A6C}, //12627 #CJK UNIFIED IDEOGRAPH + {0xF4A4, 0x7A6D}, //12628 #CJK UNIFIED IDEOGRAPH + {0xF4A5, 0x7AF7}, //12629 #CJK UNIFIED IDEOGRAPH + {0xF4A6, 0x7C49}, //12630 #CJK UNIFIED IDEOGRAPH + {0xF4A7, 0x7C48}, //12631 #CJK UNIFIED IDEOGRAPH + {0xF4A8, 0x7C4A}, //12632 #CJK UNIFIED IDEOGRAPH + {0xF4A9, 0x7C47}, //12633 #CJK UNIFIED IDEOGRAPH + {0xF4AA, 0x7C45}, //12634 #CJK UNIFIED IDEOGRAPH + {0xF4AB, 0x7CEE}, //12635 #CJK UNIFIED IDEOGRAPH + {0xF4AC, 0x7E7B}, //12636 #CJK UNIFIED IDEOGRAPH + {0xF4AD, 0x7E7E}, //12637 #CJK UNIFIED IDEOGRAPH + {0xF4AE, 0x7E81}, //12638 #CJK UNIFIED IDEOGRAPH + {0xF4AF, 0x7E80}, //12639 #CJK UNIFIED IDEOGRAPH + {0xF4B0, 0x7FBA}, //12640 #CJK UNIFIED IDEOGRAPH + {0xF4B1, 0x7FFF}, //12641 #CJK UNIFIED IDEOGRAPH + {0xF4B2, 0x8079}, //12642 #CJK UNIFIED IDEOGRAPH + {0xF4B3, 0x81DB}, //12643 #CJK UNIFIED IDEOGRAPH + {0xF4B4, 0x81D9}, //12644 #CJK UNIFIED IDEOGRAPH + {0xF4B5, 0x820B}, //12645 #CJK UNIFIED IDEOGRAPH + {0xF4B6, 0x8268}, //12646 #CJK UNIFIED IDEOGRAPH + {0xF4B7, 0x8269}, //12647 #CJK UNIFIED IDEOGRAPH + {0xF4B8, 0x8622}, //12648 #CJK UNIFIED IDEOGRAPH + {0xF4B9, 0x85FF}, //12649 #CJK UNIFIED IDEOGRAPH + {0xF4BA, 0x8601}, //12650 #CJK UNIFIED IDEOGRAPH + {0xF4BB, 0x85FE}, //12651 #CJK UNIFIED IDEOGRAPH + {0xF4BC, 0x861B}, //12652 #CJK UNIFIED IDEOGRAPH + {0xF4BD, 0x8600}, //12653 #CJK UNIFIED IDEOGRAPH + {0xF4BE, 0x85F6}, //12654 #CJK UNIFIED IDEOGRAPH + {0xF4BF, 0x8604}, //12655 #CJK UNIFIED IDEOGRAPH + {0xF4C0, 0x8609}, //12656 #CJK UNIFIED IDEOGRAPH + {0xF4C1, 0x8605}, //12657 #CJK UNIFIED IDEOGRAPH + {0xF4C2, 0x860C}, //12658 #CJK UNIFIED IDEOGRAPH + {0xF4C3, 0x85FD}, //12659 #CJK UNIFIED IDEOGRAPH + {0xF4C4, 0x8819}, //12660 #CJK UNIFIED IDEOGRAPH + {0xF4C5, 0x8810}, //12661 #CJK UNIFIED IDEOGRAPH + {0xF4C6, 0x8811}, //12662 #CJK UNIFIED IDEOGRAPH + {0xF4C7, 0x8817}, //12663 #CJK UNIFIED IDEOGRAPH + {0xF4C8, 0x8813}, //12664 #CJK UNIFIED IDEOGRAPH + {0xF4C9, 0x8816}, //12665 #CJK UNIFIED IDEOGRAPH + {0xF4CA, 0x8963}, //12666 #CJK UNIFIED IDEOGRAPH + {0xF4CB, 0x8966}, //12667 #CJK UNIFIED IDEOGRAPH + {0xF4CC, 0x89B9}, //12668 #CJK UNIFIED IDEOGRAPH + {0xF4CD, 0x89F7}, //12669 #CJK UNIFIED IDEOGRAPH + {0xF4CE, 0x8B60}, //12670 #CJK UNIFIED IDEOGRAPH + {0xF4CF, 0x8B6A}, //12671 #CJK UNIFIED IDEOGRAPH + {0xF4D0, 0x8B5D}, //12672 #CJK UNIFIED IDEOGRAPH + {0xF4D1, 0x8B68}, //12673 #CJK UNIFIED IDEOGRAPH + {0xF4D2, 0x8B63}, //12674 #CJK UNIFIED IDEOGRAPH + {0xF4D3, 0x8B65}, //12675 #CJK UNIFIED IDEOGRAPH + {0xF4D4, 0x8B67}, //12676 #CJK UNIFIED IDEOGRAPH + {0xF4D5, 0x8B6D}, //12677 #CJK UNIFIED IDEOGRAPH + {0xF4D6, 0x8DAE}, //12678 #CJK UNIFIED IDEOGRAPH + {0xF4D7, 0x8E86}, //12679 #CJK UNIFIED IDEOGRAPH + {0xF4D8, 0x8E88}, //12680 #CJK UNIFIED IDEOGRAPH + {0xF4D9, 0x8E84}, //12681 #CJK UNIFIED IDEOGRAPH + {0xF4DA, 0x8F59}, //12682 #CJK UNIFIED IDEOGRAPH + {0xF4DB, 0x8F56}, //12683 #CJK UNIFIED IDEOGRAPH + {0xF4DC, 0x8F57}, //12684 #CJK UNIFIED IDEOGRAPH + {0xF4DD, 0x8F55}, //12685 #CJK UNIFIED IDEOGRAPH + {0xF4DE, 0x8F58}, //12686 #CJK UNIFIED IDEOGRAPH + {0xF4DF, 0x8F5A}, //12687 #CJK UNIFIED IDEOGRAPH + {0xF4E0, 0x908D}, //12688 #CJK UNIFIED IDEOGRAPH + {0xF4E1, 0x9143}, //12689 #CJK UNIFIED IDEOGRAPH + {0xF4E2, 0x9141}, //12690 #CJK UNIFIED IDEOGRAPH + {0xF4E3, 0x91B7}, //12691 #CJK UNIFIED IDEOGRAPH + {0xF4E4, 0x91B5}, //12692 #CJK UNIFIED IDEOGRAPH + {0xF4E5, 0x91B2}, //12693 #CJK UNIFIED IDEOGRAPH + {0xF4E6, 0x91B3}, //12694 #CJK UNIFIED IDEOGRAPH + {0xF4E7, 0x940B}, //12695 #CJK UNIFIED IDEOGRAPH + {0xF4E8, 0x9413}, //12696 #CJK UNIFIED IDEOGRAPH + {0xF4E9, 0x93FB}, //12697 #CJK UNIFIED IDEOGRAPH + {0xF4EA, 0x9420}, //12698 #CJK UNIFIED IDEOGRAPH + {0xF4EB, 0x940F}, //12699 #CJK UNIFIED IDEOGRAPH + {0xF4EC, 0x9414}, //12700 #CJK UNIFIED IDEOGRAPH + {0xF4ED, 0x93FE}, //12701 #CJK UNIFIED IDEOGRAPH + {0xF4EE, 0x9415}, //12702 #CJK UNIFIED IDEOGRAPH + {0xF4EF, 0x9410}, //12703 #CJK UNIFIED IDEOGRAPH + {0xF4F0, 0x9428}, //12704 #CJK UNIFIED IDEOGRAPH + {0xF4F1, 0x9419}, //12705 #CJK UNIFIED IDEOGRAPH + {0xF4F2, 0x940D}, //12706 #CJK UNIFIED IDEOGRAPH + {0xF4F3, 0x93F5}, //12707 #CJK UNIFIED IDEOGRAPH + {0xF4F4, 0x9400}, //12708 #CJK UNIFIED IDEOGRAPH + {0xF4F5, 0x93F7}, //12709 #CJK UNIFIED IDEOGRAPH + {0xF4F6, 0x9407}, //12710 #CJK UNIFIED IDEOGRAPH + {0xF4F7, 0x940E}, //12711 #CJK UNIFIED IDEOGRAPH + {0xF4F8, 0x9416}, //12712 #CJK UNIFIED IDEOGRAPH + {0xF4F9, 0x9412}, //12713 #CJK UNIFIED IDEOGRAPH + {0xF4FA, 0x93FA}, //12714 #CJK UNIFIED IDEOGRAPH + {0xF4FB, 0x9409}, //12715 #CJK UNIFIED IDEOGRAPH + {0xF4FC, 0x93F8}, //12716 #CJK UNIFIED IDEOGRAPH + {0xF4FD, 0x940A}, //12717 #CJK UNIFIED IDEOGRAPH + {0xF4FE, 0x93FF}, //12718 #CJK UNIFIED IDEOGRAPH + {0xF540, 0x93FC}, //12719 #CJK UNIFIED IDEOGRAPH + {0xF541, 0x940C}, //12720 #CJK UNIFIED IDEOGRAPH + {0xF542, 0x93F6}, //12721 #CJK UNIFIED IDEOGRAPH + {0xF543, 0x9411}, //12722 #CJK UNIFIED IDEOGRAPH + {0xF544, 0x9406}, //12723 #CJK UNIFIED IDEOGRAPH + {0xF545, 0x95DE}, //12724 #CJK UNIFIED IDEOGRAPH + {0xF546, 0x95E0}, //12725 #CJK UNIFIED IDEOGRAPH + {0xF547, 0x95DF}, //12726 #CJK UNIFIED IDEOGRAPH + {0xF548, 0x972E}, //12727 #CJK UNIFIED IDEOGRAPH + {0xF549, 0x972F}, //12728 #CJK UNIFIED IDEOGRAPH + {0xF54A, 0x97B9}, //12729 #CJK UNIFIED IDEOGRAPH + {0xF54B, 0x97BB}, //12730 #CJK UNIFIED IDEOGRAPH + {0xF54C, 0x97FD}, //12731 #CJK UNIFIED IDEOGRAPH + {0xF54D, 0x97FE}, //12732 #CJK UNIFIED IDEOGRAPH + {0xF54E, 0x9860}, //12733 #CJK UNIFIED IDEOGRAPH + {0xF54F, 0x9862}, //12734 #CJK UNIFIED IDEOGRAPH + {0xF550, 0x9863}, //12735 #CJK UNIFIED IDEOGRAPH + {0xF551, 0x985F}, //12736 #CJK UNIFIED IDEOGRAPH + {0xF552, 0x98C1}, //12737 #CJK UNIFIED IDEOGRAPH + {0xF553, 0x98C2}, //12738 #CJK UNIFIED IDEOGRAPH + {0xF554, 0x9950}, //12739 #CJK UNIFIED IDEOGRAPH + {0xF555, 0x994E}, //12740 #CJK UNIFIED IDEOGRAPH + {0xF556, 0x9959}, //12741 #CJK UNIFIED IDEOGRAPH + {0xF557, 0x994C}, //12742 #CJK UNIFIED IDEOGRAPH + {0xF558, 0x994B}, //12743 #CJK UNIFIED IDEOGRAPH + {0xF559, 0x9953}, //12744 #CJK UNIFIED IDEOGRAPH + {0xF55A, 0x9A32}, //12745 #CJK UNIFIED IDEOGRAPH + {0xF55B, 0x9A34}, //12746 #CJK UNIFIED IDEOGRAPH + {0xF55C, 0x9A31}, //12747 #CJK UNIFIED IDEOGRAPH + {0xF55D, 0x9A2C}, //12748 #CJK UNIFIED IDEOGRAPH + {0xF55E, 0x9A2A}, //12749 #CJK UNIFIED IDEOGRAPH + {0xF55F, 0x9A36}, //12750 #CJK UNIFIED IDEOGRAPH + {0xF560, 0x9A29}, //12751 #CJK UNIFIED IDEOGRAPH + {0xF561, 0x9A2E}, //12752 #CJK UNIFIED IDEOGRAPH + {0xF562, 0x9A38}, //12753 #CJK UNIFIED IDEOGRAPH + {0xF563, 0x9A2D}, //12754 #CJK UNIFIED IDEOGRAPH + {0xF564, 0x9AC7}, //12755 #CJK UNIFIED IDEOGRAPH + {0xF565, 0x9ACA}, //12756 #CJK UNIFIED IDEOGRAPH + {0xF566, 0x9AC6}, //12757 #CJK UNIFIED IDEOGRAPH + {0xF567, 0x9B10}, //12758 #CJK UNIFIED IDEOGRAPH + {0xF568, 0x9B12}, //12759 #CJK UNIFIED IDEOGRAPH + {0xF569, 0x9B11}, //12760 #CJK UNIFIED IDEOGRAPH + {0xF56A, 0x9C0B}, //12761 #CJK UNIFIED IDEOGRAPH + {0xF56B, 0x9C08}, //12762 #CJK UNIFIED IDEOGRAPH + {0xF56C, 0x9BF7}, //12763 #CJK UNIFIED IDEOGRAPH + {0xF56D, 0x9C05}, //12764 #CJK UNIFIED IDEOGRAPH + {0xF56E, 0x9C12}, //12765 #CJK UNIFIED IDEOGRAPH + {0xF56F, 0x9BF8}, //12766 #CJK UNIFIED IDEOGRAPH + {0xF570, 0x9C40}, //12767 #CJK UNIFIED IDEOGRAPH + {0xF571, 0x9C07}, //12768 #CJK UNIFIED IDEOGRAPH + {0xF572, 0x9C0E}, //12769 #CJK UNIFIED IDEOGRAPH + {0xF573, 0x9C06}, //12770 #CJK UNIFIED IDEOGRAPH + {0xF574, 0x9C17}, //12771 #CJK UNIFIED IDEOGRAPH + {0xF575, 0x9C14}, //12772 #CJK UNIFIED IDEOGRAPH + {0xF576, 0x9C09}, //12773 #CJK UNIFIED IDEOGRAPH + {0xF577, 0x9D9F}, //12774 #CJK UNIFIED IDEOGRAPH + {0xF578, 0x9D99}, //12775 #CJK UNIFIED IDEOGRAPH + {0xF579, 0x9DA4}, //12776 #CJK UNIFIED IDEOGRAPH + {0xF57A, 0x9D9D}, //12777 #CJK UNIFIED IDEOGRAPH + {0xF57B, 0x9D92}, //12778 #CJK UNIFIED IDEOGRAPH + {0xF57C, 0x9D98}, //12779 #CJK UNIFIED IDEOGRAPH + {0xF57D, 0x9D90}, //12780 #CJK UNIFIED IDEOGRAPH + {0xF57E, 0x9D9B}, //12781 #CJK UNIFIED IDEOGRAPH + {0xF5A1, 0x9DA0}, //12782 #CJK UNIFIED IDEOGRAPH + {0xF5A2, 0x9D94}, //12783 #CJK UNIFIED IDEOGRAPH + {0xF5A3, 0x9D9C}, //12784 #CJK UNIFIED IDEOGRAPH + {0xF5A4, 0x9DAA}, //12785 #CJK UNIFIED IDEOGRAPH + {0xF5A5, 0x9D97}, //12786 #CJK UNIFIED IDEOGRAPH + {0xF5A6, 0x9DA1}, //12787 #CJK UNIFIED IDEOGRAPH + {0xF5A7, 0x9D9A}, //12788 #CJK UNIFIED IDEOGRAPH + {0xF5A8, 0x9DA2}, //12789 #CJK UNIFIED IDEOGRAPH + {0xF5A9, 0x9DA8}, //12790 #CJK UNIFIED IDEOGRAPH + {0xF5AA, 0x9D9E}, //12791 #CJK UNIFIED IDEOGRAPH + {0xF5AB, 0x9DA3}, //12792 #CJK UNIFIED IDEOGRAPH + {0xF5AC, 0x9DBF}, //12793 #CJK UNIFIED IDEOGRAPH + {0xF5AD, 0x9DA9}, //12794 #CJK UNIFIED IDEOGRAPH + {0xF5AE, 0x9D96}, //12795 #CJK UNIFIED IDEOGRAPH + {0xF5AF, 0x9DA6}, //12796 #CJK UNIFIED IDEOGRAPH + {0xF5B0, 0x9DA7}, //12797 #CJK UNIFIED IDEOGRAPH + {0xF5B1, 0x9E99}, //12798 #CJK UNIFIED IDEOGRAPH + {0xF5B2, 0x9E9B}, //12799 #CJK UNIFIED IDEOGRAPH + {0xF5B3, 0x9E9A}, //12800 #CJK UNIFIED IDEOGRAPH + {0xF5B4, 0x9EE5}, //12801 #CJK UNIFIED IDEOGRAPH + {0xF5B5, 0x9EE4}, //12802 #CJK UNIFIED IDEOGRAPH + {0xF5B6, 0x9EE7}, //12803 #CJK UNIFIED IDEOGRAPH + {0xF5B7, 0x9EE6}, //12804 #CJK UNIFIED IDEOGRAPH + {0xF5B8, 0x9F30}, //12805 #CJK UNIFIED IDEOGRAPH + {0xF5B9, 0x9F2E}, //12806 #CJK UNIFIED IDEOGRAPH + {0xF5BA, 0x9F5B}, //12807 #CJK UNIFIED IDEOGRAPH + {0xF5BB, 0x9F60}, //12808 #CJK UNIFIED IDEOGRAPH + {0xF5BC, 0x9F5E}, //12809 #CJK UNIFIED IDEOGRAPH + {0xF5BD, 0x9F5D}, //12810 #CJK UNIFIED IDEOGRAPH + {0xF5BE, 0x9F59}, //12811 #CJK UNIFIED IDEOGRAPH + {0xF5BF, 0x9F91}, //12812 #CJK UNIFIED IDEOGRAPH + {0xF5C0, 0x513A}, //12813 #CJK UNIFIED IDEOGRAPH + {0xF5C1, 0x5139}, //12814 #CJK UNIFIED IDEOGRAPH + {0xF5C2, 0x5298}, //12815 #CJK UNIFIED IDEOGRAPH + {0xF5C3, 0x5297}, //12816 #CJK UNIFIED IDEOGRAPH + {0xF5C4, 0x56C3}, //12817 #CJK UNIFIED IDEOGRAPH + {0xF5C5, 0x56BD}, //12818 #CJK UNIFIED IDEOGRAPH + {0xF5C6, 0x56BE}, //12819 #CJK UNIFIED IDEOGRAPH + {0xF5C7, 0x5B48}, //12820 #CJK UNIFIED IDEOGRAPH + {0xF5C8, 0x5B47}, //12821 #CJK UNIFIED IDEOGRAPH + {0xF5C9, 0x5DCB}, //12822 #CJK UNIFIED IDEOGRAPH + {0xF5CA, 0x5DCF}, //12823 #CJK UNIFIED IDEOGRAPH + {0xF5CB, 0x5EF1}, //12824 #CJK UNIFIED IDEOGRAPH + {0xF5CC, 0x61FD}, //12825 #CJK UNIFIED IDEOGRAPH + {0xF5CD, 0x651B}, //12826 #CJK UNIFIED IDEOGRAPH + {0xF5CE, 0x6B02}, //12827 #CJK UNIFIED IDEOGRAPH + {0xF5CF, 0x6AFC}, //12828 #CJK UNIFIED IDEOGRAPH + {0xF5D0, 0x6B03}, //12829 #CJK UNIFIED IDEOGRAPH + {0xF5D1, 0x6AF8}, //12830 #CJK UNIFIED IDEOGRAPH + {0xF5D2, 0x6B00}, //12831 #CJK UNIFIED IDEOGRAPH + {0xF5D3, 0x7043}, //12832 #CJK UNIFIED IDEOGRAPH + {0xF5D4, 0x7044}, //12833 #CJK UNIFIED IDEOGRAPH + {0xF5D5, 0x704A}, //12834 #CJK UNIFIED IDEOGRAPH + {0xF5D6, 0x7048}, //12835 #CJK UNIFIED IDEOGRAPH + {0xF5D7, 0x7049}, //12836 #CJK UNIFIED IDEOGRAPH + {0xF5D8, 0x7045}, //12837 #CJK UNIFIED IDEOGRAPH + {0xF5D9, 0x7046}, //12838 #CJK UNIFIED IDEOGRAPH + {0xF5DA, 0x721D}, //12839 #CJK UNIFIED IDEOGRAPH + {0xF5DB, 0x721A}, //12840 #CJK UNIFIED IDEOGRAPH + {0xF5DC, 0x7219}, //12841 #CJK UNIFIED IDEOGRAPH + {0xF5DD, 0x737E}, //12842 #CJK UNIFIED IDEOGRAPH + {0xF5DE, 0x7517}, //12843 #CJK UNIFIED IDEOGRAPH + {0xF5DF, 0x766A}, //12844 #CJK UNIFIED IDEOGRAPH + {0xF5E0, 0x77D0}, //12845 #CJK UNIFIED IDEOGRAPH + {0xF5E1, 0x792D}, //12846 #CJK UNIFIED IDEOGRAPH + {0xF5E2, 0x7931}, //12847 #CJK UNIFIED IDEOGRAPH + {0xF5E3, 0x792F}, //12848 #CJK UNIFIED IDEOGRAPH + {0xF5E4, 0x7C54}, //12849 #CJK UNIFIED IDEOGRAPH + {0xF5E5, 0x7C53}, //12850 #CJK UNIFIED IDEOGRAPH + {0xF5E6, 0x7CF2}, //12851 #CJK UNIFIED IDEOGRAPH + {0xF5E7, 0x7E8A}, //12852 #CJK UNIFIED IDEOGRAPH + {0xF5E8, 0x7E87}, //12853 #CJK UNIFIED IDEOGRAPH + {0xF5E9, 0x7E88}, //12854 #CJK UNIFIED IDEOGRAPH + {0xF5EA, 0x7E8B}, //12855 #CJK UNIFIED IDEOGRAPH + {0xF5EB, 0x7E86}, //12856 #CJK UNIFIED IDEOGRAPH + {0xF5EC, 0x7E8D}, //12857 #CJK UNIFIED IDEOGRAPH + {0xF5ED, 0x7F4D}, //12858 #CJK UNIFIED IDEOGRAPH + {0xF5EE, 0x7FBB}, //12859 #CJK UNIFIED IDEOGRAPH + {0xF5EF, 0x8030}, //12860 #CJK UNIFIED IDEOGRAPH + {0xF5F0, 0x81DD}, //12861 #CJK UNIFIED IDEOGRAPH + {0xF5F1, 0x8618}, //12862 #CJK UNIFIED IDEOGRAPH + {0xF5F2, 0x862A}, //12863 #CJK UNIFIED IDEOGRAPH + {0xF5F3, 0x8626}, //12864 #CJK UNIFIED IDEOGRAPH + {0xF5F4, 0x861F}, //12865 #CJK UNIFIED IDEOGRAPH + {0xF5F5, 0x8623}, //12866 #CJK UNIFIED IDEOGRAPH + {0xF5F6, 0x861C}, //12867 #CJK UNIFIED IDEOGRAPH + {0xF5F7, 0x8619}, //12868 #CJK UNIFIED IDEOGRAPH + {0xF5F8, 0x8627}, //12869 #CJK UNIFIED IDEOGRAPH + {0xF5F9, 0x862E}, //12870 #CJK UNIFIED IDEOGRAPH + {0xF5FA, 0x8621}, //12871 #CJK UNIFIED IDEOGRAPH + {0xF5FB, 0x8620}, //12872 #CJK UNIFIED IDEOGRAPH + {0xF5FC, 0x8629}, //12873 #CJK UNIFIED IDEOGRAPH + {0xF5FD, 0x861E}, //12874 #CJK UNIFIED IDEOGRAPH + {0xF5FE, 0x8625}, //12875 #CJK UNIFIED IDEOGRAPH + {0xF640, 0x8829}, //12876 #CJK UNIFIED IDEOGRAPH + {0xF641, 0x881D}, //12877 #CJK UNIFIED IDEOGRAPH + {0xF642, 0x881B}, //12878 #CJK UNIFIED IDEOGRAPH + {0xF643, 0x8820}, //12879 #CJK UNIFIED IDEOGRAPH + {0xF644, 0x8824}, //12880 #CJK UNIFIED IDEOGRAPH + {0xF645, 0x881C}, //12881 #CJK UNIFIED IDEOGRAPH + {0xF646, 0x882B}, //12882 #CJK UNIFIED IDEOGRAPH + {0xF647, 0x884A}, //12883 #CJK UNIFIED IDEOGRAPH + {0xF648, 0x896D}, //12884 #CJK UNIFIED IDEOGRAPH + {0xF649, 0x8969}, //12885 #CJK UNIFIED IDEOGRAPH + {0xF64A, 0x896E}, //12886 #CJK UNIFIED IDEOGRAPH + {0xF64B, 0x896B}, //12887 #CJK UNIFIED IDEOGRAPH + {0xF64C, 0x89FA}, //12888 #CJK UNIFIED IDEOGRAPH + {0xF64D, 0x8B79}, //12889 #CJK UNIFIED IDEOGRAPH + {0xF64E, 0x8B78}, //12890 #CJK UNIFIED IDEOGRAPH + {0xF64F, 0x8B45}, //12891 #CJK UNIFIED IDEOGRAPH + {0xF650, 0x8B7A}, //12892 #CJK UNIFIED IDEOGRAPH + {0xF651, 0x8B7B}, //12893 #CJK UNIFIED IDEOGRAPH + {0xF652, 0x8D10}, //12894 #CJK UNIFIED IDEOGRAPH + {0xF653, 0x8D14}, //12895 #CJK UNIFIED IDEOGRAPH + {0xF654, 0x8DAF}, //12896 #CJK UNIFIED IDEOGRAPH + {0xF655, 0x8E8E}, //12897 #CJK UNIFIED IDEOGRAPH + {0xF656, 0x8E8C}, //12898 #CJK UNIFIED IDEOGRAPH + {0xF657, 0x8F5E}, //12899 #CJK UNIFIED IDEOGRAPH + {0xF658, 0x8F5B}, //12900 #CJK UNIFIED IDEOGRAPH + {0xF659, 0x8F5D}, //12901 #CJK UNIFIED IDEOGRAPH + {0xF65A, 0x9146}, //12902 #CJK UNIFIED IDEOGRAPH + {0xF65B, 0x9144}, //12903 #CJK UNIFIED IDEOGRAPH + {0xF65C, 0x9145}, //12904 #CJK UNIFIED IDEOGRAPH + {0xF65D, 0x91B9}, //12905 #CJK UNIFIED IDEOGRAPH + {0xF65E, 0x943F}, //12906 #CJK UNIFIED IDEOGRAPH + {0xF65F, 0x943B}, //12907 #CJK UNIFIED IDEOGRAPH + {0xF660, 0x9436}, //12908 #CJK UNIFIED IDEOGRAPH + {0xF661, 0x9429}, //12909 #CJK UNIFIED IDEOGRAPH + {0xF662, 0x943D}, //12910 #CJK UNIFIED IDEOGRAPH + {0xF663, 0x943C}, //12911 #CJK UNIFIED IDEOGRAPH + {0xF664, 0x9430}, //12912 #CJK UNIFIED IDEOGRAPH + {0xF665, 0x9439}, //12913 #CJK UNIFIED IDEOGRAPH + {0xF666, 0x942A}, //12914 #CJK UNIFIED IDEOGRAPH + {0xF667, 0x9437}, //12915 #CJK UNIFIED IDEOGRAPH + {0xF668, 0x942C}, //12916 #CJK UNIFIED IDEOGRAPH + {0xF669, 0x9440}, //12917 #CJK UNIFIED IDEOGRAPH + {0xF66A, 0x9431}, //12918 #CJK UNIFIED IDEOGRAPH + {0xF66B, 0x95E5}, //12919 #CJK UNIFIED IDEOGRAPH + {0xF66C, 0x95E4}, //12920 #CJK UNIFIED IDEOGRAPH + {0xF66D, 0x95E3}, //12921 #CJK UNIFIED IDEOGRAPH + {0xF66E, 0x9735}, //12922 #CJK UNIFIED IDEOGRAPH + {0xF66F, 0x973A}, //12923 #CJK UNIFIED IDEOGRAPH + {0xF670, 0x97BF}, //12924 #CJK UNIFIED IDEOGRAPH + {0xF671, 0x97E1}, //12925 #CJK UNIFIED IDEOGRAPH + {0xF672, 0x9864}, //12926 #CJK UNIFIED IDEOGRAPH + {0xF673, 0x98C9}, //12927 #CJK UNIFIED IDEOGRAPH + {0xF674, 0x98C6}, //12928 #CJK UNIFIED IDEOGRAPH + {0xF675, 0x98C0}, //12929 #CJK UNIFIED IDEOGRAPH + {0xF676, 0x9958}, //12930 #CJK UNIFIED IDEOGRAPH + {0xF677, 0x9956}, //12931 #CJK UNIFIED IDEOGRAPH + {0xF678, 0x9A39}, //12932 #CJK UNIFIED IDEOGRAPH + {0xF679, 0x9A3D}, //12933 #CJK UNIFIED IDEOGRAPH + {0xF67A, 0x9A46}, //12934 #CJK UNIFIED IDEOGRAPH + {0xF67B, 0x9A44}, //12935 #CJK UNIFIED IDEOGRAPH + {0xF67C, 0x9A42}, //12936 #CJK UNIFIED IDEOGRAPH + {0xF67D, 0x9A41}, //12937 #CJK UNIFIED IDEOGRAPH + {0xF67E, 0x9A3A}, //12938 #CJK UNIFIED IDEOGRAPH + {0xF6A1, 0x9A3F}, //12939 #CJK UNIFIED IDEOGRAPH + {0xF6A2, 0x9ACD}, //12940 #CJK UNIFIED IDEOGRAPH + {0xF6A3, 0x9B15}, //12941 #CJK UNIFIED IDEOGRAPH + {0xF6A4, 0x9B17}, //12942 #CJK UNIFIED IDEOGRAPH + {0xF6A5, 0x9B18}, //12943 #CJK UNIFIED IDEOGRAPH + {0xF6A6, 0x9B16}, //12944 #CJK UNIFIED IDEOGRAPH + {0xF6A7, 0x9B3A}, //12945 #CJK UNIFIED IDEOGRAPH + {0xF6A8, 0x9B52}, //12946 #CJK UNIFIED IDEOGRAPH + {0xF6A9, 0x9C2B}, //12947 #CJK UNIFIED IDEOGRAPH + {0xF6AA, 0x9C1D}, //12948 #CJK UNIFIED IDEOGRAPH + {0xF6AB, 0x9C1C}, //12949 #CJK UNIFIED IDEOGRAPH + {0xF6AC, 0x9C2C}, //12950 #CJK UNIFIED IDEOGRAPH + {0xF6AD, 0x9C23}, //12951 #CJK UNIFIED IDEOGRAPH + {0xF6AE, 0x9C28}, //12952 #CJK UNIFIED IDEOGRAPH + {0xF6AF, 0x9C29}, //12953 #CJK UNIFIED IDEOGRAPH + {0xF6B0, 0x9C24}, //12954 #CJK UNIFIED IDEOGRAPH + {0xF6B1, 0x9C21}, //12955 #CJK UNIFIED IDEOGRAPH + {0xF6B2, 0x9DB7}, //12956 #CJK UNIFIED IDEOGRAPH + {0xF6B3, 0x9DB6}, //12957 #CJK UNIFIED IDEOGRAPH + {0xF6B4, 0x9DBC}, //12958 #CJK UNIFIED IDEOGRAPH + {0xF6B5, 0x9DC1}, //12959 #CJK UNIFIED IDEOGRAPH + {0xF6B6, 0x9DC7}, //12960 #CJK UNIFIED IDEOGRAPH + {0xF6B7, 0x9DCA}, //12961 #CJK UNIFIED IDEOGRAPH + {0xF6B8, 0x9DCF}, //12962 #CJK UNIFIED IDEOGRAPH + {0xF6B9, 0x9DBE}, //12963 #CJK UNIFIED IDEOGRAPH + {0xF6BA, 0x9DC5}, //12964 #CJK UNIFIED IDEOGRAPH + {0xF6BB, 0x9DC3}, //12965 #CJK UNIFIED IDEOGRAPH + {0xF6BC, 0x9DBB}, //12966 #CJK UNIFIED IDEOGRAPH + {0xF6BD, 0x9DB5}, //12967 #CJK UNIFIED IDEOGRAPH + {0xF6BE, 0x9DCE}, //12968 #CJK UNIFIED IDEOGRAPH + {0xF6BF, 0x9DB9}, //12969 #CJK UNIFIED IDEOGRAPH + {0xF6C0, 0x9DBA}, //12970 #CJK UNIFIED IDEOGRAPH + {0xF6C1, 0x9DAC}, //12971 #CJK UNIFIED IDEOGRAPH + {0xF6C2, 0x9DC8}, //12972 #CJK UNIFIED IDEOGRAPH + {0xF6C3, 0x9DB1}, //12973 #CJK UNIFIED IDEOGRAPH + {0xF6C4, 0x9DAD}, //12974 #CJK UNIFIED IDEOGRAPH + {0xF6C5, 0x9DCC}, //12975 #CJK UNIFIED IDEOGRAPH + {0xF6C6, 0x9DB3}, //12976 #CJK UNIFIED IDEOGRAPH + {0xF6C7, 0x9DCD}, //12977 #CJK UNIFIED IDEOGRAPH + {0xF6C8, 0x9DB2}, //12978 #CJK UNIFIED IDEOGRAPH + {0xF6C9, 0x9E7A}, //12979 #CJK UNIFIED IDEOGRAPH + {0xF6CA, 0x9E9C}, //12980 #CJK UNIFIED IDEOGRAPH + {0xF6CB, 0x9EEB}, //12981 #CJK UNIFIED IDEOGRAPH + {0xF6CC, 0x9EEE}, //12982 #CJK UNIFIED IDEOGRAPH + {0xF6CD, 0x9EED}, //12983 #CJK UNIFIED IDEOGRAPH + {0xF6CE, 0x9F1B}, //12984 #CJK UNIFIED IDEOGRAPH + {0xF6CF, 0x9F18}, //12985 #CJK UNIFIED IDEOGRAPH + {0xF6D0, 0x9F1A}, //12986 #CJK UNIFIED IDEOGRAPH + {0xF6D1, 0x9F31}, //12987 #CJK UNIFIED IDEOGRAPH + {0xF6D2, 0x9F4E}, //12988 #CJK UNIFIED IDEOGRAPH + {0xF6D3, 0x9F65}, //12989 #CJK UNIFIED IDEOGRAPH + {0xF6D4, 0x9F64}, //12990 #CJK UNIFIED IDEOGRAPH + {0xF6D5, 0x9F92}, //12991 #CJK UNIFIED IDEOGRAPH + {0xF6D6, 0x4EB9}, //12992 #CJK UNIFIED IDEOGRAPH + {0xF6D7, 0x56C6}, //12993 #CJK UNIFIED IDEOGRAPH + {0xF6D8, 0x56C5}, //12994 #CJK UNIFIED IDEOGRAPH + {0xF6D9, 0x56CB}, //12995 #CJK UNIFIED IDEOGRAPH + {0xF6DA, 0x5971}, //12996 #CJK UNIFIED IDEOGRAPH + {0xF6DB, 0x5B4B}, //12997 #CJK UNIFIED IDEOGRAPH + {0xF6DC, 0x5B4C}, //12998 #CJK UNIFIED IDEOGRAPH + {0xF6DD, 0x5DD5}, //12999 #CJK UNIFIED IDEOGRAPH + {0xF6DE, 0x5DD1}, //13000 #CJK UNIFIED IDEOGRAPH + {0xF6DF, 0x5EF2}, //13001 #CJK UNIFIED IDEOGRAPH + {0xF6E0, 0x6521}, //13002 #CJK UNIFIED IDEOGRAPH + {0xF6E1, 0x6520}, //13003 #CJK UNIFIED IDEOGRAPH + {0xF6E2, 0x6526}, //13004 #CJK UNIFIED IDEOGRAPH + {0xF6E3, 0x6522}, //13005 #CJK UNIFIED IDEOGRAPH + {0xF6E4, 0x6B0B}, //13006 #CJK UNIFIED IDEOGRAPH + {0xF6E5, 0x6B08}, //13007 #CJK UNIFIED IDEOGRAPH + {0xF6E6, 0x6B09}, //13008 #CJK UNIFIED IDEOGRAPH + {0xF6E7, 0x6C0D}, //13009 #CJK UNIFIED IDEOGRAPH + {0xF6E8, 0x7055}, //13010 #CJK UNIFIED IDEOGRAPH + {0xF6E9, 0x7056}, //13011 #CJK UNIFIED IDEOGRAPH + {0xF6EA, 0x7057}, //13012 #CJK UNIFIED IDEOGRAPH + {0xF6EB, 0x7052}, //13013 #CJK UNIFIED IDEOGRAPH + {0xF6EC, 0x721E}, //13014 #CJK UNIFIED IDEOGRAPH + {0xF6ED, 0x721F}, //13015 #CJK UNIFIED IDEOGRAPH + {0xF6EE, 0x72A9}, //13016 #CJK UNIFIED IDEOGRAPH + {0xF6EF, 0x737F}, //13017 #CJK UNIFIED IDEOGRAPH + {0xF6F0, 0x74D8}, //13018 #CJK UNIFIED IDEOGRAPH + {0xF6F1, 0x74D5}, //13019 #CJK UNIFIED IDEOGRAPH + {0xF6F2, 0x74D9}, //13020 #CJK UNIFIED IDEOGRAPH + {0xF6F3, 0x74D7}, //13021 #CJK UNIFIED IDEOGRAPH + {0xF6F4, 0x766D}, //13022 #CJK UNIFIED IDEOGRAPH + {0xF6F5, 0x76AD}, //13023 #CJK UNIFIED IDEOGRAPH + {0xF6F6, 0x7935}, //13024 #CJK UNIFIED IDEOGRAPH + {0xF6F7, 0x79B4}, //13025 #CJK UNIFIED IDEOGRAPH + {0xF6F8, 0x7A70}, //13026 #CJK UNIFIED IDEOGRAPH + {0xF6F9, 0x7A71}, //13027 #CJK UNIFIED IDEOGRAPH + {0xF6FA, 0x7C57}, //13028 #CJK UNIFIED IDEOGRAPH + {0xF6FB, 0x7C5C}, //13029 #CJK UNIFIED IDEOGRAPH + {0xF6FC, 0x7C59}, //13030 #CJK UNIFIED IDEOGRAPH + {0xF6FD, 0x7C5B}, //13031 #CJK UNIFIED IDEOGRAPH + {0xF6FE, 0x7C5A}, //13032 #CJK UNIFIED IDEOGRAPH + {0xF740, 0x7CF4}, //13033 #CJK UNIFIED IDEOGRAPH + {0xF741, 0x7CF1}, //13034 #CJK UNIFIED IDEOGRAPH + {0xF742, 0x7E91}, //13035 #CJK UNIFIED IDEOGRAPH + {0xF743, 0x7F4F}, //13036 #CJK UNIFIED IDEOGRAPH + {0xF744, 0x7F87}, //13037 #CJK UNIFIED IDEOGRAPH + {0xF745, 0x81DE}, //13038 #CJK UNIFIED IDEOGRAPH + {0xF746, 0x826B}, //13039 #CJK UNIFIED IDEOGRAPH + {0xF747, 0x8634}, //13040 #CJK UNIFIED IDEOGRAPH + {0xF748, 0x8635}, //13041 #CJK UNIFIED IDEOGRAPH + {0xF749, 0x8633}, //13042 #CJK UNIFIED IDEOGRAPH + {0xF74A, 0x862C}, //13043 #CJK UNIFIED IDEOGRAPH + {0xF74B, 0x8632}, //13044 #CJK UNIFIED IDEOGRAPH + {0xF74C, 0x8636}, //13045 #CJK UNIFIED IDEOGRAPH + {0xF74D, 0x882C}, //13046 #CJK UNIFIED IDEOGRAPH + {0xF74E, 0x8828}, //13047 #CJK UNIFIED IDEOGRAPH + {0xF74F, 0x8826}, //13048 #CJK UNIFIED IDEOGRAPH + {0xF750, 0x882A}, //13049 #CJK UNIFIED IDEOGRAPH + {0xF751, 0x8825}, //13050 #CJK UNIFIED IDEOGRAPH + {0xF752, 0x8971}, //13051 #CJK UNIFIED IDEOGRAPH + {0xF753, 0x89BF}, //13052 #CJK UNIFIED IDEOGRAPH + {0xF754, 0x89BE}, //13053 #CJK UNIFIED IDEOGRAPH + {0xF755, 0x89FB}, //13054 #CJK UNIFIED IDEOGRAPH + {0xF756, 0x8B7E}, //13055 #CJK UNIFIED IDEOGRAPH + {0xF757, 0x8B84}, //13056 #CJK UNIFIED IDEOGRAPH + {0xF758, 0x8B82}, //13057 #CJK UNIFIED IDEOGRAPH + {0xF759, 0x8B86}, //13058 #CJK UNIFIED IDEOGRAPH + {0xF75A, 0x8B85}, //13059 #CJK UNIFIED IDEOGRAPH + {0xF75B, 0x8B7F}, //13060 #CJK UNIFIED IDEOGRAPH + {0xF75C, 0x8D15}, //13061 #CJK UNIFIED IDEOGRAPH + {0xF75D, 0x8E95}, //13062 #CJK UNIFIED IDEOGRAPH + {0xF75E, 0x8E94}, //13063 #CJK UNIFIED IDEOGRAPH + {0xF75F, 0x8E9A}, //13064 #CJK UNIFIED IDEOGRAPH + {0xF760, 0x8E92}, //13065 #CJK UNIFIED IDEOGRAPH + {0xF761, 0x8E90}, //13066 #CJK UNIFIED IDEOGRAPH + {0xF762, 0x8E96}, //13067 #CJK UNIFIED IDEOGRAPH + {0xF763, 0x8E97}, //13068 #CJK UNIFIED IDEOGRAPH + {0xF764, 0x8F60}, //13069 #CJK UNIFIED IDEOGRAPH + {0xF765, 0x8F62}, //13070 #CJK UNIFIED IDEOGRAPH + {0xF766, 0x9147}, //13071 #CJK UNIFIED IDEOGRAPH + {0xF767, 0x944C}, //13072 #CJK UNIFIED IDEOGRAPH + {0xF768, 0x9450}, //13073 #CJK UNIFIED IDEOGRAPH + {0xF769, 0x944A}, //13074 #CJK UNIFIED IDEOGRAPH + {0xF76A, 0x944B}, //13075 #CJK UNIFIED IDEOGRAPH + {0xF76B, 0x944F}, //13076 #CJK UNIFIED IDEOGRAPH + {0xF76C, 0x9447}, //13077 #CJK UNIFIED IDEOGRAPH + {0xF76D, 0x9445}, //13078 #CJK UNIFIED IDEOGRAPH + {0xF76E, 0x9448}, //13079 #CJK UNIFIED IDEOGRAPH + {0xF76F, 0x9449}, //13080 #CJK UNIFIED IDEOGRAPH + {0xF770, 0x9446}, //13081 #CJK UNIFIED IDEOGRAPH + {0xF771, 0x973F}, //13082 #CJK UNIFIED IDEOGRAPH + {0xF772, 0x97E3}, //13083 #CJK UNIFIED IDEOGRAPH + {0xF773, 0x986A}, //13084 #CJK UNIFIED IDEOGRAPH + {0xF774, 0x9869}, //13085 #CJK UNIFIED IDEOGRAPH + {0xF775, 0x98CB}, //13086 #CJK UNIFIED IDEOGRAPH + {0xF776, 0x9954}, //13087 #CJK UNIFIED IDEOGRAPH + {0xF777, 0x995B}, //13088 #CJK UNIFIED IDEOGRAPH + {0xF778, 0x9A4E}, //13089 #CJK UNIFIED IDEOGRAPH + {0xF779, 0x9A53}, //13090 #CJK UNIFIED IDEOGRAPH + {0xF77A, 0x9A54}, //13091 #CJK UNIFIED IDEOGRAPH + {0xF77B, 0x9A4C}, //13092 #CJK UNIFIED IDEOGRAPH + {0xF77C, 0x9A4F}, //13093 #CJK UNIFIED IDEOGRAPH + {0xF77D, 0x9A48}, //13094 #CJK UNIFIED IDEOGRAPH + {0xF77E, 0x9A4A}, //13095 #CJK UNIFIED IDEOGRAPH + {0xF7A1, 0x9A49}, //13096 #CJK UNIFIED IDEOGRAPH + {0xF7A2, 0x9A52}, //13097 #CJK UNIFIED IDEOGRAPH + {0xF7A3, 0x9A50}, //13098 #CJK UNIFIED IDEOGRAPH + {0xF7A4, 0x9AD0}, //13099 #CJK UNIFIED IDEOGRAPH + {0xF7A5, 0x9B19}, //13100 #CJK UNIFIED IDEOGRAPH + {0xF7A6, 0x9B2B}, //13101 #CJK UNIFIED IDEOGRAPH + {0xF7A7, 0x9B3B}, //13102 #CJK UNIFIED IDEOGRAPH + {0xF7A8, 0x9B56}, //13103 #CJK UNIFIED IDEOGRAPH + {0xF7A9, 0x9B55}, //13104 #CJK UNIFIED IDEOGRAPH + {0xF7AA, 0x9C46}, //13105 #CJK UNIFIED IDEOGRAPH + {0xF7AB, 0x9C48}, //13106 #CJK UNIFIED IDEOGRAPH + {0xF7AC, 0x9C3F}, //13107 #CJK UNIFIED IDEOGRAPH + {0xF7AD, 0x9C44}, //13108 #CJK UNIFIED IDEOGRAPH + {0xF7AE, 0x9C39}, //13109 #CJK UNIFIED IDEOGRAPH + {0xF7AF, 0x9C33}, //13110 #CJK UNIFIED IDEOGRAPH + {0xF7B0, 0x9C41}, //13111 #CJK UNIFIED IDEOGRAPH + {0xF7B1, 0x9C3C}, //13112 #CJK UNIFIED IDEOGRAPH + {0xF7B2, 0x9C37}, //13113 #CJK UNIFIED IDEOGRAPH + {0xF7B3, 0x9C34}, //13114 #CJK UNIFIED IDEOGRAPH + {0xF7B4, 0x9C32}, //13115 #CJK UNIFIED IDEOGRAPH + {0xF7B5, 0x9C3D}, //13116 #CJK UNIFIED IDEOGRAPH + {0xF7B6, 0x9C36}, //13117 #CJK UNIFIED IDEOGRAPH + {0xF7B7, 0x9DDB}, //13118 #CJK UNIFIED IDEOGRAPH + {0xF7B8, 0x9DD2}, //13119 #CJK UNIFIED IDEOGRAPH + {0xF7B9, 0x9DDE}, //13120 #CJK UNIFIED IDEOGRAPH + {0xF7BA, 0x9DDA}, //13121 #CJK UNIFIED IDEOGRAPH + {0xF7BB, 0x9DCB}, //13122 #CJK UNIFIED IDEOGRAPH + {0xF7BC, 0x9DD0}, //13123 #CJK UNIFIED IDEOGRAPH + {0xF7BD, 0x9DDC}, //13124 #CJK UNIFIED IDEOGRAPH + {0xF7BE, 0x9DD1}, //13125 #CJK UNIFIED IDEOGRAPH + {0xF7BF, 0x9DDF}, //13126 #CJK UNIFIED IDEOGRAPH + {0xF7C0, 0x9DE9}, //13127 #CJK UNIFIED IDEOGRAPH + {0xF7C1, 0x9DD9}, //13128 #CJK UNIFIED IDEOGRAPH + {0xF7C2, 0x9DD8}, //13129 #CJK UNIFIED IDEOGRAPH + {0xF7C3, 0x9DD6}, //13130 #CJK UNIFIED IDEOGRAPH + {0xF7C4, 0x9DF5}, //13131 #CJK UNIFIED IDEOGRAPH + {0xF7C5, 0x9DD5}, //13132 #CJK UNIFIED IDEOGRAPH + {0xF7C6, 0x9DDD}, //13133 #CJK UNIFIED IDEOGRAPH + {0xF7C7, 0x9EB6}, //13134 #CJK UNIFIED IDEOGRAPH + {0xF7C8, 0x9EF0}, //13135 #CJK UNIFIED IDEOGRAPH + {0xF7C9, 0x9F35}, //13136 #CJK UNIFIED IDEOGRAPH + {0xF7CA, 0x9F33}, //13137 #CJK UNIFIED IDEOGRAPH + {0xF7CB, 0x9F32}, //13138 #CJK UNIFIED IDEOGRAPH + {0xF7CC, 0x9F42}, //13139 #CJK UNIFIED IDEOGRAPH + {0xF7CD, 0x9F6B}, //13140 #CJK UNIFIED IDEOGRAPH + {0xF7CE, 0x9F95}, //13141 #CJK UNIFIED IDEOGRAPH + {0xF7CF, 0x9FA2}, //13142 #CJK UNIFIED IDEOGRAPH + {0xF7D0, 0x513D}, //13143 #CJK UNIFIED IDEOGRAPH + {0xF7D1, 0x5299}, //13144 #CJK UNIFIED IDEOGRAPH + {0xF7D2, 0x58E8}, //13145 #CJK UNIFIED IDEOGRAPH + {0xF7D3, 0x58E7}, //13146 #CJK UNIFIED IDEOGRAPH + {0xF7D4, 0x5972}, //13147 #CJK UNIFIED IDEOGRAPH + {0xF7D5, 0x5B4D}, //13148 #CJK UNIFIED IDEOGRAPH + {0xF7D6, 0x5DD8}, //13149 #CJK UNIFIED IDEOGRAPH + {0xF7D7, 0x882F}, //13150 #CJK UNIFIED IDEOGRAPH + {0xF7D8, 0x5F4F}, //13151 #CJK UNIFIED IDEOGRAPH + {0xF7D9, 0x6201}, //13152 #CJK UNIFIED IDEOGRAPH + {0xF7DA, 0x6203}, //13153 #CJK UNIFIED IDEOGRAPH + {0xF7DB, 0x6204}, //13154 #CJK UNIFIED IDEOGRAPH + {0xF7DC, 0x6529}, //13155 #CJK UNIFIED IDEOGRAPH + {0xF7DD, 0x6525}, //13156 #CJK UNIFIED IDEOGRAPH + {0xF7DE, 0x6596}, //13157 #CJK UNIFIED IDEOGRAPH + {0xF7DF, 0x66EB}, //13158 #CJK UNIFIED IDEOGRAPH + {0xF7E0, 0x6B11}, //13159 #CJK UNIFIED IDEOGRAPH + {0xF7E1, 0x6B12}, //13160 #CJK UNIFIED IDEOGRAPH + {0xF7E2, 0x6B0F}, //13161 #CJK UNIFIED IDEOGRAPH + {0xF7E3, 0x6BCA}, //13162 #CJK UNIFIED IDEOGRAPH + {0xF7E4, 0x705B}, //13163 #CJK UNIFIED IDEOGRAPH + {0xF7E5, 0x705A}, //13164 #CJK UNIFIED IDEOGRAPH + {0xF7E6, 0x7222}, //13165 #CJK UNIFIED IDEOGRAPH + {0xF7E7, 0x7382}, //13166 #CJK UNIFIED IDEOGRAPH + {0xF7E8, 0x7381}, //13167 #CJK UNIFIED IDEOGRAPH + {0xF7E9, 0x7383}, //13168 #CJK UNIFIED IDEOGRAPH + {0xF7EA, 0x7670}, //13169 #CJK UNIFIED IDEOGRAPH + {0xF7EB, 0x77D4}, //13170 #CJK UNIFIED IDEOGRAPH + {0xF7EC, 0x7C67}, //13171 #CJK UNIFIED IDEOGRAPH + {0xF7ED, 0x7C66}, //13172 #CJK UNIFIED IDEOGRAPH + {0xF7EE, 0x7E95}, //13173 #CJK UNIFIED IDEOGRAPH + {0xF7EF, 0x826C}, //13174 #CJK UNIFIED IDEOGRAPH + {0xF7F0, 0x863A}, //13175 #CJK UNIFIED IDEOGRAPH + {0xF7F1, 0x8640}, //13176 #CJK UNIFIED IDEOGRAPH + {0xF7F2, 0x8639}, //13177 #CJK UNIFIED IDEOGRAPH + {0xF7F3, 0x863C}, //13178 #CJK UNIFIED IDEOGRAPH + {0xF7F4, 0x8631}, //13179 #CJK UNIFIED IDEOGRAPH + {0xF7F5, 0x863B}, //13180 #CJK UNIFIED IDEOGRAPH + {0xF7F6, 0x863E}, //13181 #CJK UNIFIED IDEOGRAPH + {0xF7F7, 0x8830}, //13182 #CJK UNIFIED IDEOGRAPH + {0xF7F8, 0x8832}, //13183 #CJK UNIFIED IDEOGRAPH + {0xF7F9, 0x882E}, //13184 #CJK UNIFIED IDEOGRAPH + {0xF7FA, 0x8833}, //13185 #CJK UNIFIED IDEOGRAPH + {0xF7FB, 0x8976}, //13186 #CJK UNIFIED IDEOGRAPH + {0xF7FC, 0x8974}, //13187 #CJK UNIFIED IDEOGRAPH + {0xF7FD, 0x8973}, //13188 #CJK UNIFIED IDEOGRAPH + {0xF7FE, 0x89FE}, //13189 #CJK UNIFIED IDEOGRAPH + {0xF840, 0x8B8C}, //13190 #CJK UNIFIED IDEOGRAPH + {0xF841, 0x8B8E}, //13191 #CJK UNIFIED IDEOGRAPH + {0xF842, 0x8B8B}, //13192 #CJK UNIFIED IDEOGRAPH + {0xF843, 0x8B88}, //13193 #CJK UNIFIED IDEOGRAPH + {0xF844, 0x8C45}, //13194 #CJK UNIFIED IDEOGRAPH + {0xF845, 0x8D19}, //13195 #CJK UNIFIED IDEOGRAPH + {0xF846, 0x8E98}, //13196 #CJK UNIFIED IDEOGRAPH + {0xF847, 0x8F64}, //13197 #CJK UNIFIED IDEOGRAPH + {0xF848, 0x8F63}, //13198 #CJK UNIFIED IDEOGRAPH + {0xF849, 0x91BC}, //13199 #CJK UNIFIED IDEOGRAPH + {0xF84A, 0x9462}, //13200 #CJK UNIFIED IDEOGRAPH + {0xF84B, 0x9455}, //13201 #CJK UNIFIED IDEOGRAPH + {0xF84C, 0x945D}, //13202 #CJK UNIFIED IDEOGRAPH + {0xF84D, 0x9457}, //13203 #CJK UNIFIED IDEOGRAPH + {0xF84E, 0x945E}, //13204 #CJK UNIFIED IDEOGRAPH + {0xF84F, 0x97C4}, //13205 #CJK UNIFIED IDEOGRAPH + {0xF850, 0x97C5}, //13206 #CJK UNIFIED IDEOGRAPH + {0xF851, 0x9800}, //13207 #CJK UNIFIED IDEOGRAPH + {0xF852, 0x9A56}, //13208 #CJK UNIFIED IDEOGRAPH + {0xF853, 0x9A59}, //13209 #CJK UNIFIED IDEOGRAPH + {0xF854, 0x9B1E}, //13210 #CJK UNIFIED IDEOGRAPH + {0xF855, 0x9B1F}, //13211 #CJK UNIFIED IDEOGRAPH + {0xF856, 0x9B20}, //13212 #CJK UNIFIED IDEOGRAPH + {0xF857, 0x9C52}, //13213 #CJK UNIFIED IDEOGRAPH + {0xF858, 0x9C58}, //13214 #CJK UNIFIED IDEOGRAPH + {0xF859, 0x9C50}, //13215 #CJK UNIFIED IDEOGRAPH + {0xF85A, 0x9C4A}, //13216 #CJK UNIFIED IDEOGRAPH + {0xF85B, 0x9C4D}, //13217 #CJK UNIFIED IDEOGRAPH + {0xF85C, 0x9C4B}, //13218 #CJK UNIFIED IDEOGRAPH + {0xF85D, 0x9C55}, //13219 #CJK UNIFIED IDEOGRAPH + {0xF85E, 0x9C59}, //13220 #CJK UNIFIED IDEOGRAPH + {0xF85F, 0x9C4C}, //13221 #CJK UNIFIED IDEOGRAPH + {0xF860, 0x9C4E}, //13222 #CJK UNIFIED IDEOGRAPH + {0xF861, 0x9DFB}, //13223 #CJK UNIFIED IDEOGRAPH + {0xF862, 0x9DF7}, //13224 #CJK UNIFIED IDEOGRAPH + {0xF863, 0x9DEF}, //13225 #CJK UNIFIED IDEOGRAPH + {0xF864, 0x9DE3}, //13226 #CJK UNIFIED IDEOGRAPH + {0xF865, 0x9DEB}, //13227 #CJK UNIFIED IDEOGRAPH + {0xF866, 0x9DF8}, //13228 #CJK UNIFIED IDEOGRAPH + {0xF867, 0x9DE4}, //13229 #CJK UNIFIED IDEOGRAPH + {0xF868, 0x9DF6}, //13230 #CJK UNIFIED IDEOGRAPH + {0xF869, 0x9DE1}, //13231 #CJK UNIFIED IDEOGRAPH + {0xF86A, 0x9DEE}, //13232 #CJK UNIFIED IDEOGRAPH + {0xF86B, 0x9DE6}, //13233 #CJK UNIFIED IDEOGRAPH + {0xF86C, 0x9DF2}, //13234 #CJK UNIFIED IDEOGRAPH + {0xF86D, 0x9DF0}, //13235 #CJK UNIFIED IDEOGRAPH + {0xF86E, 0x9DE2}, //13236 #CJK UNIFIED IDEOGRAPH + {0xF86F, 0x9DEC}, //13237 #CJK UNIFIED IDEOGRAPH + {0xF870, 0x9DF4}, //13238 #CJK UNIFIED IDEOGRAPH + {0xF871, 0x9DF3}, //13239 #CJK UNIFIED IDEOGRAPH + {0xF872, 0x9DE8}, //13240 #CJK UNIFIED IDEOGRAPH + {0xF873, 0x9DED}, //13241 #CJK UNIFIED IDEOGRAPH + {0xF874, 0x9EC2}, //13242 #CJK UNIFIED IDEOGRAPH + {0xF875, 0x9ED0}, //13243 #CJK UNIFIED IDEOGRAPH + {0xF876, 0x9EF2}, //13244 #CJK UNIFIED IDEOGRAPH + {0xF877, 0x9EF3}, //13245 #CJK UNIFIED IDEOGRAPH + {0xF878, 0x9F06}, //13246 #CJK UNIFIED IDEOGRAPH + {0xF879, 0x9F1C}, //13247 #CJK UNIFIED IDEOGRAPH + {0xF87A, 0x9F38}, //13248 #CJK UNIFIED IDEOGRAPH + {0xF87B, 0x9F37}, //13249 #CJK UNIFIED IDEOGRAPH + {0xF87C, 0x9F36}, //13250 #CJK UNIFIED IDEOGRAPH + {0xF87D, 0x9F43}, //13251 #CJK UNIFIED IDEOGRAPH + {0xF87E, 0x9F4F}, //13252 #CJK UNIFIED IDEOGRAPH + {0xF8A1, 0x9F71}, //13253 #CJK UNIFIED IDEOGRAPH + {0xF8A2, 0x9F70}, //13254 #CJK UNIFIED IDEOGRAPH + {0xF8A3, 0x9F6E}, //13255 #CJK UNIFIED IDEOGRAPH + {0xF8A4, 0x9F6F}, //13256 #CJK UNIFIED IDEOGRAPH + {0xF8A5, 0x56D3}, //13257 #CJK UNIFIED IDEOGRAPH + {0xF8A6, 0x56CD}, //13258 #CJK UNIFIED IDEOGRAPH + {0xF8A7, 0x5B4E}, //13259 #CJK UNIFIED IDEOGRAPH + {0xF8A8, 0x5C6D}, //13260 #CJK UNIFIED IDEOGRAPH + {0xF8A9, 0x652D}, //13261 #CJK UNIFIED IDEOGRAPH + {0xF8AA, 0x66ED}, //13262 #CJK UNIFIED IDEOGRAPH + {0xF8AB, 0x66EE}, //13263 #CJK UNIFIED IDEOGRAPH + {0xF8AC, 0x6B13}, //13264 #CJK UNIFIED IDEOGRAPH + {0xF8AD, 0x705F}, //13265 #CJK UNIFIED IDEOGRAPH + {0xF8AE, 0x7061}, //13266 #CJK UNIFIED IDEOGRAPH + {0xF8AF, 0x705D}, //13267 #CJK UNIFIED IDEOGRAPH + {0xF8B0, 0x7060}, //13268 #CJK UNIFIED IDEOGRAPH + {0xF8B1, 0x7223}, //13269 #CJK UNIFIED IDEOGRAPH + {0xF8B2, 0x74DB}, //13270 #CJK UNIFIED IDEOGRAPH + {0xF8B3, 0x74E5}, //13271 #CJK UNIFIED IDEOGRAPH + {0xF8B4, 0x77D5}, //13272 #CJK UNIFIED IDEOGRAPH + {0xF8B5, 0x7938}, //13273 #CJK UNIFIED IDEOGRAPH + {0xF8B6, 0x79B7}, //13274 #CJK UNIFIED IDEOGRAPH + {0xF8B7, 0x79B6}, //13275 #CJK UNIFIED IDEOGRAPH + {0xF8B8, 0x7C6A}, //13276 #CJK UNIFIED IDEOGRAPH + {0xF8B9, 0x7E97}, //13277 #CJK UNIFIED IDEOGRAPH + {0xF8BA, 0x7F89}, //13278 #CJK UNIFIED IDEOGRAPH + {0xF8BB, 0x826D}, //13279 #CJK UNIFIED IDEOGRAPH + {0xF8BC, 0x8643}, //13280 #CJK UNIFIED IDEOGRAPH + {0xF8BD, 0x8838}, //13281 #CJK UNIFIED IDEOGRAPH + {0xF8BE, 0x8837}, //13282 #CJK UNIFIED IDEOGRAPH + {0xF8BF, 0x8835}, //13283 #CJK UNIFIED IDEOGRAPH + {0xF8C0, 0x884B}, //13284 #CJK UNIFIED IDEOGRAPH + {0xF8C1, 0x8B94}, //13285 #CJK UNIFIED IDEOGRAPH + {0xF8C2, 0x8B95}, //13286 #CJK UNIFIED IDEOGRAPH + {0xF8C3, 0x8E9E}, //13287 #CJK UNIFIED IDEOGRAPH + {0xF8C4, 0x8E9F}, //13288 #CJK UNIFIED IDEOGRAPH + {0xF8C5, 0x8EA0}, //13289 #CJK UNIFIED IDEOGRAPH + {0xF8C6, 0x8E9D}, //13290 #CJK UNIFIED IDEOGRAPH + {0xF8C7, 0x91BE}, //13291 #CJK UNIFIED IDEOGRAPH + {0xF8C8, 0x91BD}, //13292 #CJK UNIFIED IDEOGRAPH + {0xF8C9, 0x91C2}, //13293 #CJK UNIFIED IDEOGRAPH + {0xF8CA, 0x946B}, //13294 #CJK UNIFIED IDEOGRAPH + {0xF8CB, 0x9468}, //13295 #CJK UNIFIED IDEOGRAPH + {0xF8CC, 0x9469}, //13296 #CJK UNIFIED IDEOGRAPH + {0xF8CD, 0x96E5}, //13297 #CJK UNIFIED IDEOGRAPH + {0xF8CE, 0x9746}, //13298 #CJK UNIFIED IDEOGRAPH + {0xF8CF, 0x9743}, //13299 #CJK UNIFIED IDEOGRAPH + {0xF8D0, 0x9747}, //13300 #CJK UNIFIED IDEOGRAPH + {0xF8D1, 0x97C7}, //13301 #CJK UNIFIED IDEOGRAPH + {0xF8D2, 0x97E5}, //13302 #CJK UNIFIED IDEOGRAPH + {0xF8D3, 0x9A5E}, //13303 #CJK UNIFIED IDEOGRAPH + {0xF8D4, 0x9AD5}, //13304 #CJK UNIFIED IDEOGRAPH + {0xF8D5, 0x9B59}, //13305 #CJK UNIFIED IDEOGRAPH + {0xF8D6, 0x9C63}, //13306 #CJK UNIFIED IDEOGRAPH + {0xF8D7, 0x9C67}, //13307 #CJK UNIFIED IDEOGRAPH + {0xF8D8, 0x9C66}, //13308 #CJK UNIFIED IDEOGRAPH + {0xF8D9, 0x9C62}, //13309 #CJK UNIFIED IDEOGRAPH + {0xF8DA, 0x9C5E}, //13310 #CJK UNIFIED IDEOGRAPH + {0xF8DB, 0x9C60}, //13311 #CJK UNIFIED IDEOGRAPH + {0xF8DC, 0x9E02}, //13312 #CJK UNIFIED IDEOGRAPH + {0xF8DD, 0x9DFE}, //13313 #CJK UNIFIED IDEOGRAPH + {0xF8DE, 0x9E07}, //13314 #CJK UNIFIED IDEOGRAPH + {0xF8DF, 0x9E03}, //13315 #CJK UNIFIED IDEOGRAPH + {0xF8E0, 0x9E06}, //13316 #CJK UNIFIED IDEOGRAPH + {0xF8E1, 0x9E05}, //13317 #CJK UNIFIED IDEOGRAPH + {0xF8E2, 0x9E00}, //13318 #CJK UNIFIED IDEOGRAPH + {0xF8E3, 0x9E01}, //13319 #CJK UNIFIED IDEOGRAPH + {0xF8E4, 0x9E09}, //13320 #CJK UNIFIED IDEOGRAPH + {0xF8E5, 0x9DFF}, //13321 #CJK UNIFIED IDEOGRAPH + {0xF8E6, 0x9DFD}, //13322 #CJK UNIFIED IDEOGRAPH + {0xF8E7, 0x9E04}, //13323 #CJK UNIFIED IDEOGRAPH + {0xF8E8, 0x9EA0}, //13324 #CJK UNIFIED IDEOGRAPH + {0xF8E9, 0x9F1E}, //13325 #CJK UNIFIED IDEOGRAPH + {0xF8EA, 0x9F46}, //13326 #CJK UNIFIED IDEOGRAPH + {0xF8EB, 0x9F74}, //13327 #CJK UNIFIED IDEOGRAPH + {0xF8EC, 0x9F75}, //13328 #CJK UNIFIED IDEOGRAPH + {0xF8ED, 0x9F76}, //13329 #CJK UNIFIED IDEOGRAPH + {0xF8EE, 0x56D4}, //13330 #CJK UNIFIED IDEOGRAPH + {0xF8EF, 0x652E}, //13331 #CJK UNIFIED IDEOGRAPH + {0xF8F0, 0x65B8}, //13332 #CJK UNIFIED IDEOGRAPH + {0xF8F1, 0x6B18}, //13333 #CJK UNIFIED IDEOGRAPH + {0xF8F2, 0x6B19}, //13334 #CJK UNIFIED IDEOGRAPH + {0xF8F3, 0x6B17}, //13335 #CJK UNIFIED IDEOGRAPH + {0xF8F4, 0x6B1A}, //13336 #CJK UNIFIED IDEOGRAPH + {0xF8F5, 0x7062}, //13337 #CJK UNIFIED IDEOGRAPH + {0xF8F6, 0x7226}, //13338 #CJK UNIFIED IDEOGRAPH + {0xF8F7, 0x72AA}, //13339 #CJK UNIFIED IDEOGRAPH + {0xF8F8, 0x77D8}, //13340 #CJK UNIFIED IDEOGRAPH + {0xF8F9, 0x77D9}, //13341 #CJK UNIFIED IDEOGRAPH + {0xF8FA, 0x7939}, //13342 #CJK UNIFIED IDEOGRAPH + {0xF8FB, 0x7C69}, //13343 #CJK UNIFIED IDEOGRAPH + {0xF8FC, 0x7C6B}, //13344 #CJK UNIFIED IDEOGRAPH + {0xF8FD, 0x7CF6}, //13345 #CJK UNIFIED IDEOGRAPH + {0xF8FE, 0x7E9A}, //13346 #CJK UNIFIED IDEOGRAPH + {0xF940, 0x7E98}, //13347 #CJK UNIFIED IDEOGRAPH + {0xF941, 0x7E9B}, //13348 #CJK UNIFIED IDEOGRAPH + {0xF942, 0x7E99}, //13349 #CJK UNIFIED IDEOGRAPH + {0xF943, 0x81E0}, //13350 #CJK UNIFIED IDEOGRAPH + {0xF944, 0x81E1}, //13351 #CJK UNIFIED IDEOGRAPH + {0xF945, 0x8646}, //13352 #CJK UNIFIED IDEOGRAPH + {0xF946, 0x8647}, //13353 #CJK UNIFIED IDEOGRAPH + {0xF947, 0x8648}, //13354 #CJK UNIFIED IDEOGRAPH + {0xF948, 0x8979}, //13355 #CJK UNIFIED IDEOGRAPH + {0xF949, 0x897A}, //13356 #CJK UNIFIED IDEOGRAPH + {0xF94A, 0x897C}, //13357 #CJK UNIFIED IDEOGRAPH + {0xF94B, 0x897B}, //13358 #CJK UNIFIED IDEOGRAPH + {0xF94C, 0x89FF}, //13359 #CJK UNIFIED IDEOGRAPH + {0xF94D, 0x8B98}, //13360 #CJK UNIFIED IDEOGRAPH + {0xF94E, 0x8B99}, //13361 #CJK UNIFIED IDEOGRAPH + {0xF94F, 0x8EA5}, //13362 #CJK UNIFIED IDEOGRAPH + {0xF950, 0x8EA4}, //13363 #CJK UNIFIED IDEOGRAPH + {0xF951, 0x8EA3}, //13364 #CJK UNIFIED IDEOGRAPH + {0xF952, 0x946E}, //13365 #CJK UNIFIED IDEOGRAPH + {0xF953, 0x946D}, //13366 #CJK UNIFIED IDEOGRAPH + {0xF954, 0x946F}, //13367 #CJK UNIFIED IDEOGRAPH + {0xF955, 0x9471}, //13368 #CJK UNIFIED IDEOGRAPH + {0xF956, 0x9473}, //13369 #CJK UNIFIED IDEOGRAPH + {0xF957, 0x9749}, //13370 #CJK UNIFIED IDEOGRAPH + {0xF958, 0x9872}, //13371 #CJK UNIFIED IDEOGRAPH + {0xF959, 0x995F}, //13372 #CJK UNIFIED IDEOGRAPH + {0xF95A, 0x9C68}, //13373 #CJK UNIFIED IDEOGRAPH + {0xF95B, 0x9C6E}, //13374 #CJK UNIFIED IDEOGRAPH + {0xF95C, 0x9C6D}, //13375 #CJK UNIFIED IDEOGRAPH + {0xF95D, 0x9E0B}, //13376 #CJK UNIFIED IDEOGRAPH + {0xF95E, 0x9E0D}, //13377 #CJK UNIFIED IDEOGRAPH + {0xF95F, 0x9E10}, //13378 #CJK UNIFIED IDEOGRAPH + {0xF960, 0x9E0F}, //13379 #CJK UNIFIED IDEOGRAPH + {0xF961, 0x9E12}, //13380 #CJK UNIFIED IDEOGRAPH + {0xF962, 0x9E11}, //13381 #CJK UNIFIED IDEOGRAPH + {0xF963, 0x9EA1}, //13382 #CJK UNIFIED IDEOGRAPH + {0xF964, 0x9EF5}, //13383 #CJK UNIFIED IDEOGRAPH + {0xF965, 0x9F09}, //13384 #CJK UNIFIED IDEOGRAPH + {0xF966, 0x9F47}, //13385 #CJK UNIFIED IDEOGRAPH + {0xF967, 0x9F78}, //13386 #CJK UNIFIED IDEOGRAPH + {0xF968, 0x9F7B}, //13387 #CJK UNIFIED IDEOGRAPH + {0xF969, 0x9F7A}, //13388 #CJK UNIFIED IDEOGRAPH + {0xF96A, 0x9F79}, //13389 #CJK UNIFIED IDEOGRAPH + {0xF96B, 0x571E}, //13390 #CJK UNIFIED IDEOGRAPH + {0xF96C, 0x7066}, //13391 #CJK UNIFIED IDEOGRAPH + {0xF96D, 0x7C6F}, //13392 #CJK UNIFIED IDEOGRAPH + {0xF96E, 0x883C}, //13393 #CJK UNIFIED IDEOGRAPH + {0xF96F, 0x8DB2}, //13394 #CJK UNIFIED IDEOGRAPH + {0xF970, 0x8EA6}, //13395 #CJK UNIFIED IDEOGRAPH + {0xF971, 0x91C3}, //13396 #CJK UNIFIED IDEOGRAPH + {0xF972, 0x9474}, //13397 #CJK UNIFIED IDEOGRAPH + {0xF973, 0x9478}, //13398 #CJK UNIFIED IDEOGRAPH + {0xF974, 0x9476}, //13399 #CJK UNIFIED IDEOGRAPH + {0xF975, 0x9475}, //13400 #CJK UNIFIED IDEOGRAPH + {0xF976, 0x9A60}, //13401 #CJK UNIFIED IDEOGRAPH + {0xF977, 0x9C74}, //13402 #CJK UNIFIED IDEOGRAPH + {0xF978, 0x9C73}, //13403 #CJK UNIFIED IDEOGRAPH + {0xF979, 0x9C71}, //13404 #CJK UNIFIED IDEOGRAPH + {0xF97A, 0x9C75}, //13405 #CJK UNIFIED IDEOGRAPH + {0xF97B, 0x9E14}, //13406 #CJK UNIFIED IDEOGRAPH + {0xF97C, 0x9E13}, //13407 #CJK UNIFIED IDEOGRAPH + {0xF97D, 0x9EF6}, //13408 #CJK UNIFIED IDEOGRAPH + {0xF97E, 0x9F0A}, //13409 #CJK UNIFIED IDEOGRAPH + {0xF9A1, 0x9FA4}, //13410 #CJK UNIFIED IDEOGRAPH + {0xF9A2, 0x7068}, //13411 #CJK UNIFIED IDEOGRAPH + {0xF9A3, 0x7065}, //13412 #CJK UNIFIED IDEOGRAPH + {0xF9A4, 0x7CF7}, //13413 #CJK UNIFIED IDEOGRAPH + {0xF9A5, 0x866A}, //13414 #CJK UNIFIED IDEOGRAPH + {0xF9A6, 0x883E}, //13415 #CJK UNIFIED IDEOGRAPH + {0xF9A7, 0x883D}, //13416 #CJK UNIFIED IDEOGRAPH + {0xF9A8, 0x883F}, //13417 #CJK UNIFIED IDEOGRAPH + {0xF9A9, 0x8B9E}, //13418 #CJK UNIFIED IDEOGRAPH + {0xF9AA, 0x8C9C}, //13419 #CJK UNIFIED IDEOGRAPH + {0xF9AB, 0x8EA9}, //13420 #CJK UNIFIED IDEOGRAPH + {0xF9AC, 0x8EC9}, //13421 #CJK UNIFIED IDEOGRAPH + {0xF9AD, 0x974B}, //13422 #CJK UNIFIED IDEOGRAPH + {0xF9AE, 0x9873}, //13423 #CJK UNIFIED IDEOGRAPH + {0xF9AF, 0x9874}, //13424 #CJK UNIFIED IDEOGRAPH + {0xF9B0, 0x98CC}, //13425 #CJK UNIFIED IDEOGRAPH + {0xF9B1, 0x9961}, //13426 #CJK UNIFIED IDEOGRAPH + {0xF9B2, 0x99AB}, //13427 #CJK UNIFIED IDEOGRAPH + {0xF9B3, 0x9A64}, //13428 #CJK UNIFIED IDEOGRAPH + {0xF9B4, 0x9A66}, //13429 #CJK UNIFIED IDEOGRAPH + {0xF9B5, 0x9A67}, //13430 #CJK UNIFIED IDEOGRAPH + {0xF9B6, 0x9B24}, //13431 #CJK UNIFIED IDEOGRAPH + {0xF9B7, 0x9E15}, //13432 #CJK UNIFIED IDEOGRAPH + {0xF9B8, 0x9E17}, //13433 #CJK UNIFIED IDEOGRAPH + {0xF9B9, 0x9F48}, //13434 #CJK UNIFIED IDEOGRAPH + {0xF9BA, 0x6207}, //13435 #CJK UNIFIED IDEOGRAPH + {0xF9BB, 0x6B1E}, //13436 #CJK UNIFIED IDEOGRAPH + {0xF9BC, 0x7227}, //13437 #CJK UNIFIED IDEOGRAPH + {0xF9BD, 0x864C}, //13438 #CJK UNIFIED IDEOGRAPH + {0xF9BE, 0x8EA8}, //13439 #CJK UNIFIED IDEOGRAPH + {0xF9BF, 0x9482}, //13440 #CJK UNIFIED IDEOGRAPH + {0xF9C0, 0x9480}, //13441 #CJK UNIFIED IDEOGRAPH + {0xF9C1, 0x9481}, //13442 #CJK UNIFIED IDEOGRAPH + {0xF9C2, 0x9A69}, //13443 #CJK UNIFIED IDEOGRAPH + {0xF9C3, 0x9A68}, //13444 #CJK UNIFIED IDEOGRAPH + {0xF9C4, 0x9B2E}, //13445 #CJK UNIFIED IDEOGRAPH + {0xF9C5, 0x9E19}, //13446 #CJK UNIFIED IDEOGRAPH + {0xF9C6, 0x7229}, //13447 #CJK UNIFIED IDEOGRAPH + {0xF9C7, 0x864B}, //13448 #CJK UNIFIED IDEOGRAPH + {0xF9C8, 0x8B9F}, //13449 #CJK UNIFIED IDEOGRAPH + {0xF9C9, 0x9483}, //13450 #CJK UNIFIED IDEOGRAPH + {0xF9CA, 0x9C79}, //13451 #CJK UNIFIED IDEOGRAPH + {0xF9CB, 0x9EB7}, //13452 #CJK UNIFIED IDEOGRAPH + {0xF9CC, 0x7675}, //13453 #CJK UNIFIED IDEOGRAPH + {0xF9CD, 0x9A6B}, //13454 #CJK UNIFIED IDEOGRAPH + {0xF9CE, 0x9C7A}, //13455 #CJK UNIFIED IDEOGRAPH + {0xF9CF, 0x9E1D}, //13456 #CJK UNIFIED IDEOGRAPH + {0xF9D0, 0x7069}, //13457 #CJK UNIFIED IDEOGRAPH + {0xF9D1, 0x706A}, //13458 #CJK UNIFIED IDEOGRAPH + {0xF9D2, 0x9EA4}, //13459 #CJK UNIFIED IDEOGRAPH + {0xF9D3, 0x9F7E}, //13460 #CJK UNIFIED IDEOGRAPH + {0xF9D4, 0x9F49}, //13461 #CJK UNIFIED IDEOGRAPH + {0xF9D5, 0x9F98}, //13462 #CJK UNIFIED IDEOGRAPH + {0xF9D6, 0x7881}, //13463 #CJK UNIFIED IDEOGRAPH + {0xF9D7, 0x92B9}, //13464 #CJK UNIFIED IDEOGRAPH + {0xF9D8, 0x88CF}, //13465 #CJK UNIFIED IDEOGRAPH + {0xF9D9, 0x58BB}, //13466 #CJK UNIFIED IDEOGRAPH + {0xF9DA, 0x6052}, //13467 #CJK UNIFIED IDEOGRAPH + {0xF9DB, 0x7CA7}, //13468 #CJK UNIFIED IDEOGRAPH + {0xF9DC, 0x5AFA}, //13469 #CJK UNIFIED IDEOGRAPH + {0xF9DD, 0x2554}, //13470 #BOX DRAWINGS DOUBLE DOWN AND RIGHT + {0xF9DE, 0x2566}, //13471 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + {0xF9DF, 0x2557}, //13472 #BOX DRAWINGS DOUBLE DOWN AND LEFT + {0xF9E0, 0x2560}, //13473 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + {0xF9E1, 0x256C}, //13474 #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + {0xF9E2, 0x2563}, //13475 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT + {0xF9E3, 0x255A}, //13476 #BOX DRAWINGS DOUBLE UP AND RIGHT + {0xF9E4, 0x2569}, //13477 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL + {0xF9E5, 0x255D}, //13478 #BOX DRAWINGS DOUBLE UP AND LEFT + {0xF9E6, 0x2552}, //13479 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + {0xF9E7, 0x2564}, //13480 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + {0xF9E8, 0x2555}, //13481 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + {0xF9E9, 0x255E}, //13482 #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + {0xF9EA, 0x256A}, //13483 #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + {0xF9EB, 0x2561}, //13484 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + {0xF9EC, 0x2558}, //13485 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + {0xF9ED, 0x2567}, //13486 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + {0xF9EE, 0x255B}, //13487 #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + {0xF9EF, 0x2553}, //13488 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + {0xF9F0, 0x2565}, //13489 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + {0xF9F1, 0x2556}, //13490 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + {0xF9F2, 0x255F}, //13491 #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + {0xF9F3, 0x256B}, //13492 #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + {0xF9F4, 0x2562}, //13493 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + {0xF9F5, 0x2559}, //13494 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + {0xF9F6, 0x2568}, //13495 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + {0xF9F7, 0x255C}, //13496 #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + {0xF9F8, 0x2551}, //13497 #BOX DRAWINGS DOUBLE VERTICAL + {0xF9F9, 0x2550}, //13498 #BOX DRAWINGS DOUBLE HORIZONTAL + {0xF9FA, 0x256D}, //13499 #BOX DRAWINGS LIGHT ARC DOWN AND RIGHT + {0xF9FB, 0x256E}, //13500 #BOX DRAWINGS LIGHT ARC DOWN AND LEFT + {0xF9FC, 0x2570}, //13501 #BOX DRAWINGS LIGHT ARC UP AND RIGHT + {0xF9FD, 0x256F}, //13502 #BOX DRAWINGS LIGHT ARC UP AND LEFT + {0xF9FE, 0x2593}, //13503 #DARK SHADE +}; + +#endif // DRW_CPTABLE950_H diff --git a/extlib/libdxfrw/intern/drw_cptables.h b/extlib/libdxfrw/intern/drw_cptables.h new file mode 100644 index 0000000..2f7d758 --- /dev/null +++ b/extlib/libdxfrw/intern/drw_cptables.h @@ -0,0 +1,1330 @@ +#ifndef DRW_CPTABLES_H +#define DRW_CPTABLES_H + +//first entry in all tables are 0x80 +#define CPOFFSET 0x80 +#define CPLENGHTCOMMON 128 + +//Table 874 +static const int DRW_Table874[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x00 , //3 #UNDEFINED + 0x00 , //4 #UNDEFINED + 0x00 , //5 #UNDEFINED + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x00 , //7 #UNDEFINED + 0x00 , //8 #UNDEFINED + 0x00 , //9 #UNDEFINED + 0x00 , //10 #UNDEFINED + 0x00 , //11 #UNDEFINED + 0x00 , //12 #UNDEFINED + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x00 , //26 #UNDEFINED + 0x00 , //27 #UNDEFINED + 0x00 , //28 #UNDEFINED + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x0E01, //34 #THAI CHARACTER KO KAI + 0x0E02, //35 #THAI CHARACTER KHO KHAI + 0x0E03, //36 #THAI CHARACTER KHO KHUAT + 0x0E04, //37 #THAI CHARACTER KHO KHWAI + 0x0E05, //38 #THAI CHARACTER KHO KHON + 0x0E06, //39 #THAI CHARACTER KHO RAKHANG + 0x0E07, //40 #THAI CHARACTER NGO NGU + 0x0E08, //41 #THAI CHARACTER CHO CHAN + 0x0E09, //42 #THAI CHARACTER CHO CHING + 0x0E0A, //43 #THAI CHARACTER CHO CHANG + 0x0E0B, //44 #THAI CHARACTER SO SO + 0x0E0C, //45 #THAI CHARACTER CHO CHOE + 0x0E0D, //46 #THAI CHARACTER YO YING + 0x0E0E, //47 #THAI CHARACTER DO CHADA + 0x0E0F, //48 #THAI CHARACTER TO PATAK + 0x0E10, //49 #THAI CHARACTER THO THAN + 0x0E11, //50 #THAI CHARACTER THO NANGMONTHO + 0x0E12, //51 #THAI CHARACTER THO PHUTHAO + 0x0E13, //52 #THAI CHARACTER NO NEN + 0x0E14, //53 #THAI CHARACTER DO DEK + 0x0E15, //54 #THAI CHARACTER TO TAO + 0x0E16, //55 #THAI CHARACTER THO THUNG + 0x0E17, //56 #THAI CHARACTER THO THAHAN + 0x0E18, //57 #THAI CHARACTER THO THONG + 0x0E19, //58 #THAI CHARACTER NO NU + 0x0E1A, //59 #THAI CHARACTER BO BAIMAI + 0x0E1B, //60 #THAI CHARACTER PO PLA + 0x0E1C, //61 #THAI CHARACTER PHO PHUNG + 0x0E1D, //62 #THAI CHARACTER FO FA + 0x0E1E, //63 #THAI CHARACTER PHO PHAN + 0x0E1F, //64 #THAI CHARACTER FO FAN + 0x0E20, //65 #THAI CHARACTER PHO SAMPHAO + 0x0E21, //66 #THAI CHARACTER MO MA + 0x0E22, //67 #THAI CHARACTER YO YAK + 0x0E23, //68 #THAI CHARACTER RO RUA + 0x0E24, //69 #THAI CHARACTER RU + 0x0E25, //70 #THAI CHARACTER LO LING + 0x0E26, //71 #THAI CHARACTER LU + 0x0E27, //72 #THAI CHARACTER WO WAEN + 0x0E28, //73 #THAI CHARACTER SO SALA + 0x0E29, //74 #THAI CHARACTER SO RUSI + 0x0E2A, //75 #THAI CHARACTER SO SUA + 0x0E2B, //76 #THAI CHARACTER HO HIP + 0x0E2C, //77 #THAI CHARACTER LO CHULA + 0x0E2D, //78 #THAI CHARACTER O ANG + 0x0E2E, //79 #THAI CHARACTER HO NOKHUK + 0x0E2F, //80 #THAI CHARACTER PAIYANNOI + 0x0E30, //81 #THAI CHARACTER SARA A + 0x0E31, //82 #THAI CHARACTER MAI HAN-AKAT + 0x0E32, //83 #THAI CHARACTER SARA AA + 0x0E33, //84 #THAI CHARACTER SARA AM + 0x0E34, //85 #THAI CHARACTER SARA I + 0x0E35, //86 #THAI CHARACTER SARA II + 0x0E36, //87 #THAI CHARACTER SARA UE + 0x0E37, //88 #THAI CHARACTER SARA UEE + 0x0E38, //89 #THAI CHARACTER SARA U + 0x0E39, //90 #THAI CHARACTER SARA UU + 0x0E3A, //91 #THAI CHARACTER PHINTHU + 0x00 , //92 #UNDEFINED + 0x00 , //93 #UNDEFINED + 0x00 , //94 #UNDEFINED + 0x00 , //95 #UNDEFINED + 0x0E3F, //96 #THAI CURRENCY SYMBOL BAHT + 0x0E40, //97 #THAI CHARACTER SARA E + 0x0E41, //98 #THAI CHARACTER SARA AE + 0x0E42, //99 #THAI CHARACTER SARA O + 0x0E43, //100 #THAI CHARACTER SARA AI MAIMUAN + 0x0E44, //101 #THAI CHARACTER SARA AI MAIMALAI + 0x0E45, //102 #THAI CHARACTER LAKKHANGYAO + 0x0E46, //103 #THAI CHARACTER MAIYAMOK + 0x0E47, //104 #THAI CHARACTER MAITAIKHU + 0x0E48, //105 #THAI CHARACTER MAI EK + 0x0E49, //106 #THAI CHARACTER MAI THO + 0x0E4A, //107 #THAI CHARACTER MAI TRI + 0x0E4B, //108 #THAI CHARACTER MAI CHATTAWA + 0x0E4C, //109 #THAI CHARACTER THANTHAKHAT + 0x0E4D, //110 #THAI CHARACTER NIKHAHIT + 0x0E4E, //111 #THAI CHARACTER YAMAKKAN + 0x0E4F, //112 #THAI CHARACTER FONGMAN + 0x0E50, //113 #THAI DIGIT ZERO + 0x0E51, //114 #THAI DIGIT ONE + 0x0E52, //115 #THAI DIGIT TWO + 0x0E53, //116 #THAI DIGIT THREE + 0x0E54, //117 #THAI DIGIT FOUR + 0x0E55, //118 #THAI DIGIT FIVE + 0x0E56, //119 #THAI DIGIT SIX + 0x0E57, //120 #THAI DIGIT SEVEN + 0x0E58, //121 #THAI DIGIT EIGHT + 0x0E59, //122 #THAI DIGIT NINE + 0x0E5A, //123 #THAI CHARACTER ANGKHANKHU + 0x0E5B, //124 #THAI CHARACTER KHOMUT + 0x00 , //125 #UNDEFINED + 0x00 , //126 #UNDEFINED + 0x00 , //127 #UNDEFINED + 0x00 //128 #UNDEFINED +}; + +//Table 1250 +static const int DRW_Table1250[] = { +0x20AC, //1 #EURO SIGN +0x00, //2 #UNDEFINED +0x201A, //3 #SINGLE LOW-9 QUOTATION MARK +0x00, //4 #UNDEFINED +0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK +0x2026, //6 #HORIZONTAL ELLIPSIS +0x2020, //7 #DAGGER +0x2021, //8 #DOUBLE DAGGER +0x00, //9 #UNDEFINED +0x2030, //10 #PER MILLE SIGN +0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON +0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0x015A, //13 #LATIN CAPITAL LETTER S WITH ACUTE +0x0164, //14 #LATIN CAPITAL LETTER T WITH CARON +0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON +0x0179, //16 #LATIN CAPITAL LETTER Z WITH ACUTE +0x00, //17 #UNDEFINED +0x2018, //18 #LEFT SINGLE QUOTATION MARK +0x2019, //19 #RIGHT SINGLE QUOTATION MARK +0x201C, //20 #LEFT DOUBLE QUOTATION MARK +0x201D, //21 #RIGHT DOUBLE QUOTATION MARK +0x2022, //22 #BULLET +0x2013, //23 #EN DASH +0x2014, //24 #EM DASH +0x00, //25 #UNDEFINED +0x2122, //26 #TRADE MARK SIGN +0x0161, //27 #LATIN SMALL LETTER S WITH CARON +0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0x015B, //29 #LATIN SMALL LETTER S WITH ACUTE +0x0165, //30 #LATIN SMALL LETTER T WITH CARON +0x017E, //31 #LATIN SMALL LETTER Z WITH CARON +0x017A, //32 #LATIN SMALL LETTER Z WITH ACUTE +0x00A0, //33 #NO-BREAK SPACE +0x02C7, //34 #CARON +0x02D8, //35 #BREVE +0x0141, //36 #LATIN CAPITAL LETTER L WITH STROKE +0x00A4, //37 #CURRENCY SIGN +0x0104, //38 #LATIN CAPITAL LETTER A WITH OGONEK +0x00A6, //39 #BROKEN BAR +0x00A7, //40 #SECTION SIGN +0x00A8, //41 #DIAERESIS +0x00A9, //42 #COPYRIGHT SIGN +0x015E, //43 #LATIN CAPITAL LETTER S WITH CEDILLA +0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0x00AC, //45 #NOT SIGN +0x00AD, //46 #SOFT HYPHEN +0x00AE, //47 #REGISTERED SIGN +0x017B, //48 #LATIN CAPITAL LETTER Z WITH DOT ABOVE +0x00B0, //49 #DEGREE SIGN +0x00B1, //50 #PLUS-MINUS SIGN +0x02DB, //51 #OGONEK +0x0142, //52 #LATIN SMALL LETTER L WITH STROKE +0x00B4, //53 #ACUTE ACCENT +0x00B5, //54 #MICRO SIGN +0x00B6, //55 #PILCROW SIGN +0x00B7, //56 #MIDDLE DOT +0x00B8, //57 #CEDILLA +0x0105, //58 #LATIN SMALL LETTER A WITH OGONEK +0x015F, //59 #LATIN SMALL LETTER S WITH CEDILLA +0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0x013D, //61 #LATIN CAPITAL LETTER L WITH CARON +0x02DD, //62 #DOUBLE ACUTE ACCENT +0x013E, //63 #LATIN SMALL LETTER L WITH CARON +0x017C, //64 #LATIN SMALL LETTER Z WITH DOT ABOVE +0x0154, //65 #LATIN CAPITAL LETTER R WITH ACUTE +0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE +0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE +0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS +0x0139, //70 #LATIN CAPITAL LETTER L WITH ACUTE +0x0106, //71 #LATIN CAPITAL LETTER C WITH ACUTE +0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA +0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON +0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE +0x0118, //75 #LATIN CAPITAL LETTER E WITH OGONEK +0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS +0x011A, //77 #LATIN CAPITAL LETTER E WITH CARON +0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE +0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0x010E, //80 #LATIN CAPITAL LETTER D WITH CARON +0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE +0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE +0x0147, //83 #LATIN CAPITAL LETTER N WITH CARON +0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE +0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0x0150, //86 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS +0x00D7, //88 #MULTIPLICATION SIGN +0x0158, //89 #LATIN CAPITAL LETTER R WITH CARON +0x016E, //90 #LATIN CAPITAL LETTER U WITH RING ABOVE +0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE +0x0170, //92 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS +0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE +0x0162, //95 #LATIN CAPITAL LETTER T WITH CEDILLA +0x00DF, //96 #LATIN SMALL LETTER SHARP S +0x0155, //97 #LATIN SMALL LETTER R WITH ACUTE +0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE +0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0x0103, //100 #LATIN SMALL LETTER A WITH BREVE +0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS +0x013A, //102 #LATIN SMALL LETTER L WITH ACUTE +0x0107, //103 #LATIN SMALL LETTER C WITH ACUTE +0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA +0x010D, //105 #LATIN SMALL LETTER C WITH CARON +0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE +0x0119, //107 #LATIN SMALL LETTER E WITH OGONEK +0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS +0x011B, //109 #LATIN SMALL LETTER E WITH CARON +0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE +0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX +0x010F, //112 #LATIN SMALL LETTER D WITH CARON +0x0111, //113 #LATIN SMALL LETTER D WITH STROKE +0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE +0x0148, //115 #LATIN SMALL LETTER N WITH CARON +0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE +0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0x0151, //118 #LATIN SMALL LETTER O WITH DOUBLE ACUTE +0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS +0x00F7, //120 #DIVISION SIGN +0x0159, //121 #LATIN SMALL LETTER R WITH CARON +0x016F, //122 #LATIN SMALL LETTER U WITH RING ABOVE +0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE +0x0171, //124 #LATIN SMALL LETTER U WITH DOUBLE ACUTE +0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS +0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE +0x0163, //127 #LATIN SMALL LETTER T WITH CEDILLA +0x02D9 //128 #DOT ABOVE +}; + + +//Table 1251 +static const int DRW_Table1251[] = { + 0x0402, //1 #CYRILLIC CAPITAL LETTER DJE + 0x0403, //2 #CYRILLIC CAPITAL LETTER GJE + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0453, //4 #CYRILLIC SMALL LETTER GJE + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x20AC, //9 #EURO SIGN + 0x2030, //10 #PER MILLE SIGN + 0x0409, //11 #CYRILLIC CAPITAL LETTER LJE + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x040A, //13 #CYRILLIC CAPITAL LETTER NJE + 0x040C, //14 #CYRILLIC CAPITAL LETTER KJE + 0x040B, //15 #CYRILLIC CAPITAL LETTER TSHE + 0x040F, //16 #CYRILLIC CAPITAL LETTER DZHE + 0x0452, //17 #CYRILLIC SMALL LETTER DJE + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00, //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x0459, //27 #CYRILLIC SMALL LETTER LJE + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x045A, //29 #CYRILLIC SMALL LETTER NJE + 0x045C, //30 #CYRILLIC SMALL LETTER KJE + 0x045B, //31 #CYRILLIC SMALL LETTER TSHE + 0x045F, //32 #CYRILLIC SMALL LETTER DZHE + 0x00A0, //33 #NO-BREAK SPACE + 0x040E, //34 #CYRILLIC CAPITAL LETTER SHORT U + 0x045E, //35 #CYRILLIC SMALL LETTER SHORT U + 0x0408, //36 #CYRILLIC CAPITAL LETTER JE + 0x00A4, //37 #CURRENCY SIGN + 0x0490, //38 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x0401, //41 #CYRILLIC CAPITAL LETTER IO + 0x00A9, //42 #COPYRIGHT SIGN + 0x0404, //43 #CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x0407, //48 #CYRILLIC CAPITAL LETTER YI + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x0406, //51 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0456, //52 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0491, //53 #CYRILLIC SMALL LETTER GHE WITH UPTURN + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x0451, //57 #CYRILLIC SMALL LETTER IO + 0x2116, //58 #NUMERO SIGN + 0x0454, //59 #CYRILLIC SMALL LETTER UKRAINIAN IE + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x0458, //61 #CYRILLIC SMALL LETTER JE + 0x0405, //62 #CYRILLIC CAPITAL LETTER DZE + 0x0455, //63 #CYRILLIC SMALL LETTER DZE + 0x0457, //64 #CYRILLIC SMALL LETTER YI + 0x0410, //65 #CYRILLIC CAPITAL LETTER A + 0x0411, //66 #CYRILLIC CAPITAL LETTER BE + 0x0412, //67 #CYRILLIC CAPITAL LETTER VE + 0x0413, //68 #CYRILLIC CAPITAL LETTER GHE + 0x0414, //69 #CYRILLIC CAPITAL LETTER DE + 0x0415, //70 #CYRILLIC CAPITAL LETTER IE + 0x0416, //71 #CYRILLIC CAPITAL LETTER ZHE + 0x0417, //72 #CYRILLIC CAPITAL LETTER ZE + 0x0418, //73 #CYRILLIC CAPITAL LETTER I + 0x0419, //74 #CYRILLIC CAPITAL LETTER SHORT I + 0x041A, //75 #CYRILLIC CAPITAL LETTER KA + 0x041B, //76 #CYRILLIC CAPITAL LETTER EL + 0x041C, //77 #CYRILLIC CAPITAL LETTER EM + 0x041D, //78 #CYRILLIC CAPITAL LETTER EN + 0x041E, //79 #CYRILLIC CAPITAL LETTER O + 0x041F, //80 #CYRILLIC CAPITAL LETTER PE + 0x0420, //81 #CYRILLIC CAPITAL LETTER ER + 0x0421, //82 #CYRILLIC CAPITAL LETTER ES + 0x0422, //83 #CYRILLIC CAPITAL LETTER TE + 0x0423, //84 #CYRILLIC CAPITAL LETTER U + 0x0424, //85 #CYRILLIC CAPITAL LETTER EF + 0x0425, //86 #CYRILLIC CAPITAL LETTER HA + 0x0426, //87 #CYRILLIC CAPITAL LETTER TSE + 0x0427, //88 #CYRILLIC CAPITAL LETTER CHE + 0x0428, //89 #CYRILLIC CAPITAL LETTER SHA + 0x0429, //90 #CYRILLIC CAPITAL LETTER SHCHA + 0x042A, //91 #CYRILLIC CAPITAL LETTER HARD SIGN + 0x042B, //92 #CYRILLIC CAPITAL LETTER YERU + 0x042C, //93 #CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042D, //94 #CYRILLIC CAPITAL LETTER E + 0x042E, //95 #CYRILLIC CAPITAL LETTER YU + 0x042F, //96 #CYRILLIC CAPITAL LETTER YA + 0x0430, //97 #CYRILLIC SMALL LETTER A + 0x0431, //98 #CYRILLIC SMALL LETTER BE + 0x0432, //99 #CYRILLIC SMALL LETTER VE + 0x0433, //100 #CYRILLIC SMALL LETTER GHE + 0x0434, //101 #CYRILLIC SMALL LETTER DE + 0x0435, //102 #CYRILLIC SMALL LETTER IE + 0x0436, //103 #CYRILLIC SMALL LETTER ZHE + 0x0437, //104 #CYRILLIC SMALL LETTER ZE + 0x0438, //105 #CYRILLIC SMALL LETTER I + 0x0439, //106 #CYRILLIC SMALL LETTER SHORT I + 0x043A, //107 #CYRILLIC SMALL LETTER KA + 0x043B, //108 #CYRILLIC SMALL LETTER EL + 0x043C, //109 #CYRILLIC SMALL LETTER EM + 0x043D, //110 #CYRILLIC SMALL LETTER EN + 0x043E, //111 #CYRILLIC SMALL LETTER O + 0x043F, //112 #CYRILLIC SMALL LETTER PE + 0x0440, //113 #CYRILLIC SMALL LETTER ER + 0x0441, //114 #CYRILLIC SMALL LETTER ES + 0x0442, //115 #CYRILLIC SMALL LETTER TE + 0x0443, //116 #CYRILLIC SMALL LETTER U + 0x0444, //117 #CYRILLIC SMALL LETTER EF + 0x0445, //118 #CYRILLIC SMALL LETTER HA + 0x0446, //119 #CYRILLIC SMALL LETTER TSE + 0x0447, //120 #CYRILLIC SMALL LETTER CHE + 0x0448, //121 #CYRILLIC SMALL LETTER SHA + 0x0449, //122 #CYRILLIC SMALL LETTER SHCHA + 0x044A, //123 #CYRILLIC SMALL LETTER HARD SIGN + 0x044B, //124 #CYRILLIC SMALL LETTER YERU + 0x044C, //125 #CYRILLIC SMALL LETTER SOFT SIGN + 0x044D, //126 #CYRILLIC SMALL LETTER E + 0x044E, //127 #CYRILLIC SMALL LETTER YU + 0x044F //128 #CYRILLIC SMALL LETTER YA +}; + + +//Table 1252 +static const int DRW_Table1252[] = { + 0x20AC, //1 #EURO SIGN + 0x00, //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00, //14 #UNDEFINED + 0x017D, //15 #LATIN CAPITAL LETTER Z WITH CARON + 0x00, //16 #UNDEFINED + 0x00, //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x0161, //27 #LATIN SMALL LETTER S WITH CARON + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00, //30 #UNDEFINED + 0x017E, //31 #LATIN SMALL LETTER Z WITH CARON + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00D0, //81 #LATIN CAPITAL LETTER ETH + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00DD, //94 #LATIN CAPITAL LETTER Y WITH ACUTE + 0x00DE, //95 #LATIN CAPITAL LETTER THORN + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x00F0, //113 #LATIN SMALL LETTER ETH + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x00FD, //126 #LATIN SMALL LETTER Y WITH ACUTE + 0x00FE, //127 #LATIN SMALL LETTER THORN + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +//Table 1253 +static const int DRW_Table1253[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x00 , //9 #UNDEFINED + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x0385, //34 #GREEK DIALYTIKA TONOS + 0x0386, //35 #GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00 , //43 #UNDEFINED + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x2015, //48 #HORIZONTAL BAR + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x0384, //53 #GREEK TONOS + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x0388, //57 #GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389, //58 #GREEK CAPITAL LETTER ETA WITH TONOS + 0x038A, //59 #GREEK CAPITAL LETTER IOTA WITH TONOS + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x038C, //61 #GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x038E, //63 #GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038F, //64 #GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0390, //65 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x0391, //66 #GREEK CAPITAL LETTER ALPHA + 0x0392, //67 #GREEK CAPITAL LETTER BETA + 0x0393, //68 #GREEK CAPITAL LETTER GAMMA + 0x0394, //69 #GREEK CAPITAL LETTER DELTA + 0x0395, //70 #GREEK CAPITAL LETTER EPSILON + 0x0396, //71 #GREEK CAPITAL LETTER ZETA + 0x0397, //72 #GREEK CAPITAL LETTER ETA + 0x0398, //73 #GREEK CAPITAL LETTER THETA + 0x0399, //74 #GREEK CAPITAL LETTER IOTA + 0x039A, //75 #GREEK CAPITAL LETTER KAPPA + 0x039B, //76 #GREEK CAPITAL LETTER LAMDA + 0x039C, //77 #GREEK CAPITAL LETTER MU + 0x039D, //78 #GREEK CAPITAL LETTER NU + 0x039E, //79 #GREEK CAPITAL LETTER XI + 0x039F, //80 #GREEK CAPITAL LETTER OMICRON + 0x03A0, //81 #GREEK CAPITAL LETTER PI + 0x03A1, //82 #GREEK CAPITAL LETTER RHO + 0x00 , //83 #UNDEFINED + 0x03A3, //84 #GREEK CAPITAL LETTER SIGMA + 0x03A4, //85 #GREEK CAPITAL LETTER TAU + 0x03A5, //86 #GREEK CAPITAL LETTER UPSILON + 0x03A6, //87 #GREEK CAPITAL LETTER PHI + 0x03A7, //88 #GREEK CAPITAL LETTER CHI + 0x03A8, //89 #GREEK CAPITAL LETTER PSI + 0x03A9, //90 #GREEK CAPITAL LETTER OMEGA + 0x03AA, //91 #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03AB, //92 #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03AC, //93 #GREEK SMALL LETTER ALPHA WITH TONOS + 0x03AD, //94 #GREEK SMALL LETTER EPSILON WITH TONOS + 0x03AE, //95 #GREEK SMALL LETTER ETA WITH TONOS + 0x03AF, //96 #GREEK SMALL LETTER IOTA WITH TONOS + 0x03B0, //97 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x03B1, //98 #GREEK SMALL LETTER ALPHA + 0x03B2, //99 #GREEK SMALL LETTER BETA + 0x03B3, //100 #GREEK SMALL LETTER GAMMA + 0x03B4, //101 #GREEK SMALL LETTER DELTA + 0x03B5, //102 #GREEK SMALL LETTER EPSILON + 0x03B6, //103 #GREEK SMALL LETTER ZETA + 0x03B7, //104 #GREEK SMALL LETTER ETA + 0x03B8, //105 #GREEK SMALL LETTER THETA + 0x03B9, //106 #GREEK SMALL LETTER IOTA + 0x03BA, //107 #GREEK SMALL LETTER KAPPA + 0x03BB, //108 #GREEK SMALL LETTER LAMDA + 0x03BC, //109 #GREEK SMALL LETTER MU + 0x03BD, //110 #GREEK SMALL LETTER NU + 0x03BE, //111 #GREEK SMALL LETTER XI + 0x03BF, //112 #GREEK SMALL LETTER OMICRON + 0x03C0, //113 #GREEK SMALL LETTER PI + 0x03C1, //114 #GREEK SMALL LETTER RHO + 0x03C2, //115 #GREEK SMALL LETTER FINAL SIGMA + 0x03C3, //116 #GREEK SMALL LETTER SIGMA + 0x03C4, //117 #GREEK SMALL LETTER TAU + 0x03C5, //118 #GREEK SMALL LETTER UPSILON + 0x03C6, //119 #GREEK SMALL LETTER PHI + 0x03C7, //120 #GREEK SMALL LETTER CHI + 0x03C8, //121 #GREEK SMALL LETTER PSI + 0x03C9, //122 #GREEK SMALL LETTER OMEGA + 0x03CA, //123 #GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03CB, //124 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03CC, //125 #GREEK SMALL LETTER OMICRON WITH TONOS + 0x03CD, //126 #GREEK SMALL LETTER UPSILON WITH TONOS + 0x03CE, //127 #GREEK SMALL LETTER OMEGA WITH TONOS + 0x00 //128 #UNDEFINED +}; + +//Table 1254 +static const int DRW_Table1254[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0160, //11 #LATIN CAPITAL LETTER S WITH CARON + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x0161, //27 #LATIN SMALL LETTER S WITH CARON + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00C3, //68 #LATIN CAPITAL LETTER A WITH TILDE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00CC, //77 #LATIN CAPITAL LETTER I WITH GRAVE + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x011E, //81 #LATIN CAPITAL LETTER G WITH BREVE + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x00D2, //83 #LATIN CAPITAL LETTER O WITH GRAVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x0130, //94 #LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x015E, //95 #LATIN CAPITAL LETTER S WITH CEDILLA + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00E3, //100 #LATIN SMALL LETTER A WITH TILDE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x00EC, //109 #LATIN SMALL LETTER I WITH GRAVE + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x011F, //113 #LATIN SMALL LETTER G WITH BREVE + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x00F2, //115 #LATIN SMALL LETTER O WITH GRAVE + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x0131, //126 #LATIN SMALL LETTER DOTLESS I + 0x015F, //127 #LATIN SMALL LETTER S WITH CEDILLA + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +//Table 1255 +static const int DRW_Table1255[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x20AA, //37 #NEW SHEQEL SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00D7, //43 #MULTIPLICATION SIGN + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00F7, //59 #DIVISION SIGN + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x05B0, //65 #HEBREW POINT SHEVA + 0x05B1, //66 #HEBREW POINT HATAF SEGOL + 0x05B2, //67 #HEBREW POINT HATAF PATAH + 0x05B3, //68 #HEBREW POINT HATAF QAMATS + 0x05B4, //69 #HEBREW POINT HIRIQ + 0x05B5, //70 #HEBREW POINT TSERE + 0x05B6, //71 #HEBREW POINT SEGOL + 0x05B7, //72 #HEBREW POINT PATAH + 0x05B8, //73 #HEBREW POINT QAMATS + 0x05B9, //74 #HEBREW POINT HOLAM + 0x00 , //75 #UNDEFINED + 0x05BB, //76 #HEBREW POINT QUBUTS + 0x05BC, //77 #HEBREW POINT DAGESH OR MAPIQ + 0x05BD, //78 #HEBREW POINT METEG + 0x05BE, //79 #HEBREW PUNCTUATION MAQAF + 0x05BF, //80 #HEBREW POINT RAFE + 0x05C0, //81 #HEBREW PUNCTUATION PASEQ + 0x05C1, //82 #HEBREW POINT SHIN DOT + 0x05C2, //83 #HEBREW POINT SIN DOT + 0x05C3, //84 #HEBREW PUNCTUATION SOF PASUQ + 0x05F0, //85 #HEBREW LIGATURE YIDDISH DOUBLE VAV + 0x05F1, //86 #HEBREW LIGATURE YIDDISH VAV YOD + 0x05F2, //87 #HEBREW LIGATURE YIDDISH DOUBLE YOD + 0x05F3, //88 #HEBREW PUNCTUATION GERESH + 0x05F4, //89 #HEBREW PUNCTUATION GERSHAYIM + 0x00 , //90 #UNDEFINED + 0x00 , //91 #UNDEFINED + 0x00 , //92 #UNDEFINED + 0x00 , //93 #UNDEFINED + 0x00 , //94 #UNDEFINED + 0x00 , //95 #UNDEFINED + 0x00 , //96 #UNDEFINED + 0x05D0, //97 #HEBREW LETTER ALEF + 0x05D1, //98 #HEBREW LETTER BET + 0x05D2, //99 #HEBREW LETTER GIMEL + 0x05D3, //100 #HEBREW LETTER DALET + 0x05D4, //101 #HEBREW LETTER HE + 0x05D5, //102 #HEBREW LETTER VAV + 0x05D6, //103 #HEBREW LETTER ZAYIN + 0x05D7, //104 #HEBREW LETTER HET + 0x05D8, //105 #HEBREW LETTER TET + 0x05D9, //106 #HEBREW LETTER YOD + 0x05DA, //107 #HEBREW LETTER FINAL KAF + 0x05DB, //108 #HEBREW LETTER KAF + 0x05DC, //109 #HEBREW LETTER LAMED + 0x05DD, //110 #HEBREW LETTER FINAL MEM + 0x05DE, //111 #HEBREW LETTER MEM + 0x05DF, //112 #HEBREW LETTER FINAL NUN + 0x05E0, //113 #HEBREW LETTER NUN + 0x05E1, //114 #HEBREW LETTER SAMEKH + 0x05E2, //115 #HEBREW LETTER AYIN + 0x05E3, //116 #HEBREW LETTER FINAL PE + 0x05E4, //117 #HEBREW LETTER PE + 0x05E5, //118 #HEBREW LETTER FINAL TSADI + 0x05E6, //119 #HEBREW LETTER TSADI + 0x05E7, //120 #HEBREW LETTER QOF + 0x05E8, //121 #HEBREW LETTER RESH + 0x05E9, //122 #HEBREW LETTER SHIN + 0x05EA, //123 #HEBREW LETTER TAV + 0x00 , //124 #UNDEFINED + 0x00 , //125 #UNDEFINED + 0x200E, //126 #LEFT-TO-RIGHT MARK + 0x200F, //127 #RIGHT-TO-LEFT MARK + 0x00 //128 #UNDEFINED +}; + +//Table 1256 +static const int DRW_Table1256[] = { + 0x20AC, //1 #EURO SIGN + 0x067E, //2 #ARABIC LETTER PEH + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x0679, //11 #ARABIC LETTER TTEH + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x0686, //14 #ARABIC LETTER TCHEH + 0x0698, //15 #ARABIC LETTER JEH + 0x0688, //16 #ARABIC LETTER DDAL + 0x06AF, //17 #ARABIC LETTER GAF + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x06A9, //25 #ARABIC LETTER KEHEH + 0x2122, //26 #TRADE MARK SIGN + 0x0691, //27 #ARABIC LETTER RREH + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x200C, //30 #ZERO WIDTH NON-JOINER + 0x200D, //31 #ZERO WIDTH JOINER + 0x06BA, //32 #ARABIC LETTER NOON GHUNNA + 0x00A0, //33 #NO-BREAK SPACE + 0x060C, //34 #ARABIC COMMA + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x06BE, //43 #ARABIC LETTER HEH DOACHASHMEE + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x061B, //59 #ARABIC SEMICOLON + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x061F, //64 #ARABIC QUESTION MARK + 0x06C1, //65 #ARABIC LETTER HEH GOAL + 0x0621, //66 #ARABIC LETTER HAMZA + 0x0622, //67 #ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623, //68 #ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624, //69 #ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625, //70 #ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626, //71 #ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627, //72 #ARABIC LETTER ALEF + 0x0628, //73 #ARABIC LETTER BEH + 0x0629, //74 #ARABIC LETTER TEH MARBUTA + 0x062A, //75 #ARABIC LETTER TEH + 0x062B, //76 #ARABIC LETTER THEH + 0x062C, //77 #ARABIC LETTER JEEM + 0x062D, //78 #ARABIC LETTER HAH + 0x062E, //79 #ARABIC LETTER KHAH + 0x062F, //80 #ARABIC LETTER DAL + 0x0630, //81 #ARABIC LETTER THAL + 0x0631, //82 #ARABIC LETTER REH + 0x0632, //83 #ARABIC LETTER ZAIN + 0x0633, //84 #ARABIC LETTER SEEN + 0x0634, //85 #ARABIC LETTER SHEEN + 0x0635, //86 #ARABIC LETTER SAD + 0x0636, //87 #ARABIC LETTER DAD + 0x00D7, //88 #MULTIPLICATION SIGN + 0x0637, //89 #ARABIC LETTER TAH + 0x0638, //90 #ARABIC LETTER ZAH + 0x0639, //91 #ARABIC LETTER AIN + 0x063A, //92 #ARABIC LETTER GHAIN + 0x0640, //93 #ARABIC TATWEEL + 0x0641, //94 #ARABIC LETTER FEH + 0x0642, //95 #ARABIC LETTER QAF + 0x0643, //96 #ARABIC LETTER KAF + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x0644, //98 #ARABIC LETTER LAM + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0645, //100 #ARABIC LETTER MEEM + 0x0646, //101 #ARABIC LETTER NOON + 0x0647, //102 #ARABIC LETTER HEH + 0x0648, //103 #ARABIC LETTER WAW + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x0649, //109 #ARABIC LETTER ALEF MAKSURA + 0x064A, //110 #ARABIC LETTER YEH + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x064B, //113 #ARABIC FATHATAN + 0x064C, //114 #ARABIC DAMMATAN + 0x064D, //115 #ARABIC KASRATAN + 0x064E, //116 #ARABIC FATHA + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x064F, //118 #ARABIC DAMMA + 0x0650, //119 #ARABIC KASRA + 0x00F7, //120 #DIVISION SIGN + 0x0651, //121 #ARABIC SHADDA + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x0652, //123 #ARABIC SUKUN + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x200E, //126 #LEFT-TO-RIGHT MARK + 0x200F, //127 #RIGHT-TO-LEFT MARK + 0x06D2 //128 #ARABIC LETTER YEH BARREE +}; + +//Table 1257 +static const int DRW_Table1257[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x00 , //4 #UNDEFINED + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x00 , //9 #UNDEFINED + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00 , //13 #UNDEFINED + 0x00A8, //14 #DIAERESIS + 0x02C7, //15 #CARON + 0x00B8, //16 #CEDILLA + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x00 , //25 #UNDEFINED + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00 , //29 #UNDEFINED + 0x00AF, //30 #MACRON + 0x02DB, //31 #OGONEK + 0x00 , //32 #UNDEFINED + 0x00A0, //33 #NO-BREAK SPACE + 0x00 , //34 #UNDEFINED + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00 , //38 #UNDEFINED + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00D8, //41 #LATIN CAPITAL LETTER O WITH STROKE + 0x00A9, //42 #COPYRIGHT SIGN + 0x0156, //43 #LATIN CAPITAL LETTER R WITH CEDILLA + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00C6, //48 #LATIN CAPITAL LETTER AE + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00F8, //57 #LATIN SMALL LETTER O WITH STROKE + 0x00B9, //58 #SUPERSCRIPT ONE + 0x0157, //59 #LATIN SMALL LETTER R WITH CEDILLA + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00E6, //64 #LATIN SMALL LETTER AE + 0x0104, //65 #LATIN CAPITAL LETTER A WITH OGONEK + 0x012E, //66 #LATIN CAPITAL LETTER I WITH OGONEK + 0x0100, //67 #LATIN CAPITAL LETTER A WITH MACRON + 0x0106, //68 #LATIN CAPITAL LETTER C WITH ACUTE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0118, //71 #LATIN CAPITAL LETTER E WITH OGONEK + 0x0112, //72 #LATIN CAPITAL LETTER E WITH MACRON + 0x010C, //73 #LATIN CAPITAL LETTER C WITH CARON + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x0179, //75 #LATIN CAPITAL LETTER Z WITH ACUTE + 0x0116, //76 #LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x0122, //77 #LATIN CAPITAL LETTER G WITH CEDILLA + 0x0136, //78 #LATIN CAPITAL LETTER K WITH CEDILLA + 0x012A, //79 #LATIN CAPITAL LETTER I WITH MACRON + 0x013B, //80 #LATIN CAPITAL LETTER L WITH CEDILLA + 0x0160, //81 #LATIN CAPITAL LETTER S WITH CARON + 0x0143, //82 #LATIN CAPITAL LETTER N WITH ACUTE + 0x0145, //83 #LATIN CAPITAL LETTER N WITH CEDILLA + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x014C, //85 #LATIN CAPITAL LETTER O WITH MACRON + 0x00D5, //86 #LATIN CAPITAL LETTER O WITH TILDE + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x0172, //89 #LATIN CAPITAL LETTER U WITH OGONEK + 0x0141, //90 #LATIN CAPITAL LETTER L WITH STROKE + 0x015A, //91 #LATIN CAPITAL LETTER S WITH ACUTE + 0x016A, //92 #LATIN CAPITAL LETTER U WITH MACRON + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x017B, //94 #LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017D, //95 #LATIN CAPITAL LETTER Z WITH CARON + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x0105, //97 #LATIN SMALL LETTER A WITH OGONEK + 0x012F, //98 #LATIN SMALL LETTER I WITH OGONEK + 0x0101, //99 #LATIN SMALL LETTER A WITH MACRON + 0x0107, //100 #LATIN SMALL LETTER C WITH ACUTE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x0119, //103 #LATIN SMALL LETTER E WITH OGONEK + 0x0113, //104 #LATIN SMALL LETTER E WITH MACRON + 0x010D, //105 #LATIN SMALL LETTER C WITH CARON + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x017A, //107 #LATIN SMALL LETTER Z WITH ACUTE + 0x0117, //108 #LATIN SMALL LETTER E WITH DOT ABOVE + 0x0123, //109 #LATIN SMALL LETTER G WITH CEDILLA + 0x0137, //110 #LATIN SMALL LETTER K WITH CEDILLA + 0x012B, //111 #LATIN SMALL LETTER I WITH MACRON + 0x013C, //112 #LATIN SMALL LETTER L WITH CEDILLA + 0x0161, //113 #LATIN SMALL LETTER S WITH CARON + 0x0144, //114 #LATIN SMALL LETTER N WITH ACUTE + 0x0146, //115 #LATIN SMALL LETTER N WITH CEDILLA + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x014D, //117 #LATIN SMALL LETTER O WITH MACRON + 0x00F5, //118 #LATIN SMALL LETTER O WITH TILDE + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x0173, //121 #LATIN SMALL LETTER U WITH OGONEK + 0x0142, //122 #LATIN SMALL LETTER L WITH STROKE + 0x015B, //123 #LATIN SMALL LETTER S WITH ACUTE + 0x016B, //124 #LATIN SMALL LETTER U WITH MACRON + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x017C, //126 #LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017E, //127 #LATIN SMALL LETTER Z WITH CARON + 0x02D9 //128 #DOT ABOVE +}; + +//Table 1258 +static const int DRW_Table1258[] = { + 0x20AC, //1 #EURO SIGN + 0x00 , //2 #UNDEFINED + 0x201A, //3 #SINGLE LOW-9 QUOTATION MARK + 0x0192, //4 #LATIN SMALL LETTER F WITH HOOK + 0x201E, //5 #DOUBLE LOW-9 QUOTATION MARK + 0x2026, //6 #HORIZONTAL ELLIPSIS + 0x2020, //7 #DAGGER + 0x2021, //8 #DOUBLE DAGGER + 0x02C6, //9 #MODIFIER LETTER CIRCUMFLEX ACCENT + 0x2030, //10 #PER MILLE SIGN + 0x00 , //11 #UNDEFINED + 0x2039, //12 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x0152, //13 #LATIN CAPITAL LIGATURE OE + 0x00 , //14 #UNDEFINED + 0x00 , //15 #UNDEFINED + 0x00 , //16 #UNDEFINED + 0x00 , //17 #UNDEFINED + 0x2018, //18 #LEFT SINGLE QUOTATION MARK + 0x2019, //19 #RIGHT SINGLE QUOTATION MARK + 0x201C, //20 #LEFT DOUBLE QUOTATION MARK + 0x201D, //21 #RIGHT DOUBLE QUOTATION MARK + 0x2022, //22 #BULLET + 0x2013, //23 #EN DASH + 0x2014, //24 #EM DASH + 0x02DC, //25 #SMALL TILDE + 0x2122, //26 #TRADE MARK SIGN + 0x00 , //27 #UNDEFINED + 0x203A, //28 #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x0153, //29 #LATIN SMALL LIGATURE OE + 0x00 , //30 #UNDEFINED + 0x00 , //31 #UNDEFINED + 0x0178, //32 #LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00A0, //33 #NO-BREAK SPACE + 0x00A1, //34 #INVERTED EXCLAMATION MARK + 0x00A2, //35 #CENT SIGN + 0x00A3, //36 #POUND SIGN + 0x00A4, //37 #CURRENCY SIGN + 0x00A5, //38 #YEN SIGN + 0x00A6, //39 #BROKEN BAR + 0x00A7, //40 #SECTION SIGN + 0x00A8, //41 #DIAERESIS + 0x00A9, //42 #COPYRIGHT SIGN + 0x00AA, //43 #FEMININE ORDINAL INDICATOR + 0x00AB, //44 #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00AC, //45 #NOT SIGN + 0x00AD, //46 #SOFT HYPHEN + 0x00AE, //47 #REGISTERED SIGN + 0x00AF, //48 #MACRON + 0x00B0, //49 #DEGREE SIGN + 0x00B1, //50 #PLUS-MINUS SIGN + 0x00B2, //51 #SUPERSCRIPT TWO + 0x00B3, //52 #SUPERSCRIPT THREE + 0x00B4, //53 #ACUTE ACCENT + 0x00B5, //54 #MICRO SIGN + 0x00B6, //55 #PILCROW SIGN + 0x00B7, //56 #MIDDLE DOT + 0x00B8, //57 #CEDILLA + 0x00B9, //58 #SUPERSCRIPT ONE + 0x00BA, //59 #MASCULINE ORDINAL INDICATOR + 0x00BB, //60 #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00BC, //61 #VULGAR FRACTION ONE QUARTER + 0x00BD, //62 #VULGAR FRACTION ONE HALF + 0x00BE, //63 #VULGAR FRACTION THREE QUARTERS + 0x00BF, //64 #INVERTED QUESTION MARK + 0x00C0, //65 #LATIN CAPITAL LETTER A WITH GRAVE + 0x00C1, //66 #LATIN CAPITAL LETTER A WITH ACUTE + 0x00C2, //67 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0102, //68 #LATIN CAPITAL LETTER A WITH BREVE + 0x00C4, //69 #LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00C5, //70 #LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00C6, //71 #LATIN CAPITAL LETTER AE + 0x00C7, //72 #LATIN CAPITAL LETTER C WITH CEDILLA + 0x00C8, //73 #LATIN CAPITAL LETTER E WITH GRAVE + 0x00C9, //74 #LATIN CAPITAL LETTER E WITH ACUTE + 0x00CA, //75 #LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00CB, //76 #LATIN CAPITAL LETTER E WITH DIAERESIS + 0x0300, //77 #COMBINING GRAVE ACCENT + 0x00CD, //78 #LATIN CAPITAL LETTER I WITH ACUTE + 0x00CE, //79 #LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00CF, //80 #LATIN CAPITAL LETTER I WITH DIAERESIS + 0x0110, //81 #LATIN CAPITAL LETTER D WITH STROKE + 0x00D1, //82 #LATIN CAPITAL LETTER N WITH TILDE + 0x0309, //83 #COMBINING HOOK ABOVE + 0x00D3, //84 #LATIN CAPITAL LETTER O WITH ACUTE + 0x00D4, //85 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x01A0, //86 #LATIN CAPITAL LETTER O WITH HORN + 0x00D6, //87 #LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00D7, //88 #MULTIPLICATION SIGN + 0x00D8, //89 #LATIN CAPITAL LETTER O WITH STROKE + 0x00D9, //90 #LATIN CAPITAL LETTER U WITH GRAVE + 0x00DA, //91 #LATIN CAPITAL LETTER U WITH ACUTE + 0x00DB, //92 #LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00DC, //93 #LATIN CAPITAL LETTER U WITH DIAERESIS + 0x01AF, //94 #LATIN CAPITAL LETTER U WITH HORN + 0x0303, //95 #COMBINING TILDE + 0x00DF, //96 #LATIN SMALL LETTER SHARP S + 0x00E0, //97 #LATIN SMALL LETTER A WITH GRAVE + 0x00E1, //98 #LATIN SMALL LETTER A WITH ACUTE + 0x00E2, //99 #LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0103, //100 #LATIN SMALL LETTER A WITH BREVE + 0x00E4, //101 #LATIN SMALL LETTER A WITH DIAERESIS + 0x00E5, //102 #LATIN SMALL LETTER A WITH RING ABOVE + 0x00E6, //103 #LATIN SMALL LETTER AE + 0x00E7, //104 #LATIN SMALL LETTER C WITH CEDILLA + 0x00E8, //105 #LATIN SMALL LETTER E WITH GRAVE + 0x00E9, //106 #LATIN SMALL LETTER E WITH ACUTE + 0x00EA, //107 #LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00EB, //108 #LATIN SMALL LETTER E WITH DIAERESIS + 0x0301, //109 #COMBINING ACUTE ACCENT + 0x00ED, //110 #LATIN SMALL LETTER I WITH ACUTE + 0x00EE, //111 #LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00EF, //112 #LATIN SMALL LETTER I WITH DIAERESIS + 0x0111, //113 #LATIN SMALL LETTER D WITH STROKE + 0x00F1, //114 #LATIN SMALL LETTER N WITH TILDE + 0x0323, //115 #COMBINING DOT BELOW + 0x00F3, //116 #LATIN SMALL LETTER O WITH ACUTE + 0x00F4, //117 #LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x01A1, //118 #LATIN SMALL LETTER O WITH HORN + 0x00F6, //119 #LATIN SMALL LETTER O WITH DIAERESIS + 0x00F7, //120 #DIVISION SIGN + 0x00F8, //121 #LATIN SMALL LETTER O WITH STROKE + 0x00F9, //122 #LATIN SMALL LETTER U WITH GRAVE + 0x00FA, //123 #LATIN SMALL LETTER U WITH ACUTE + 0x00FB, //124 #LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00FC, //125 #LATIN SMALL LETTER U WITH DIAERESIS + 0x01B0, //126 #LATIN SMALL LETTER U WITH HORN + 0x20AB, //127 #DONG SIGN + 0x00FF //128 #LATIN SMALL LETTER Y WITH DIAERESIS +}; + +#endif // DRW_CPTABLES_H diff --git a/extlib/libdxfrw/intern/drw_dbg.cpp b/extlib/libdxfrw/intern/drw_dbg.cpp new file mode 100644 index 0000000..d999edf --- /dev/null +++ b/extlib/libdxfrw/intern/drw_dbg.cpp @@ -0,0 +1,164 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include "drw_dbg.h" + +DRW_dbg *DRW_dbg::instance= NULL; + +/*********private clases*************/ +class print_none { +public: + virtual void printS(std::string s){(void)s;} + virtual void printI(long long int i){(void)i;} + virtual void printUI(long long unsigned int i){(void)i;} + virtual void printD(double d){(void)d;} + virtual void printH(long long int i){(void)i;} + virtual void printB(int i){(void)i;} + virtual void printHL(int c, int s, int h){(void)c;(void)s;(void)h;} + virtual void printPT(double x, double y, double z){(void)x;(void)y;(void)z;} + print_none(){} + virtual ~print_none(){} +}; + +class print_debug : public print_none { +public: + virtual void printS(std::string s); + virtual void printI(long long int i); + virtual void printUI(long long unsigned int i); + virtual void printD(double d); + virtual void printH(long long int i); + virtual void printB(int i); + virtual void printHL(int c, int s, int h); + virtual void printPT(double x, double y, double z); + print_debug(); + virtual ~print_debug(){} +private: + std::ios_base::fmtflags flags; +}; + +/********* debug class *************/ +DRW_dbg *DRW_dbg::getInstance(){ + if (instance == NULL){ + instance = new DRW_dbg; + } + return instance; +} + +DRW_dbg::DRW_dbg(){ + level = NONE; + prClass = new print_none; + flags = std::cerr.flags(); +} + +void DRW_dbg::setLevel(LEVEL lvl){ + level = lvl; + delete prClass; + switch (level){ + case DEBUG: + prClass = new print_debug; + break; + default: + prClass = new print_none; + } +} + +DRW_dbg::LEVEL DRW_dbg::getLevel(){ + return level; +} + +void DRW_dbg::print(std::string s){ + prClass->printS(s); +} + +void DRW_dbg::print(int i){ + prClass->printI(i); +} + +void DRW_dbg::print(unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(long long int i){ + prClass->printI(i); +} + +void DRW_dbg::print(long unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(long long unsigned int i){ + prClass->printUI(i); +} + +void DRW_dbg::print(double d){ + prClass->printD(d); +} + +void DRW_dbg::printH(long long int i){ + prClass->printH(i); +} + +void DRW_dbg::printB(int i){ + prClass->printB(i); +} +void DRW_dbg::printHL(int c, int s, int h){ + prClass->printHL(c, s, h); +} + +void DRW_dbg::printPT(double x, double y, double z){ + prClass->printPT(x, y, z); +} + +print_debug::print_debug(){ + flags = std::cerr.flags(); +} + +void print_debug::printS(std::string s){ + std::cerr << s; +} + +void print_debug::printI(long long int i){ + std::cerr << i; +} + +void print_debug::printUI(long long unsigned int i){ + std::cerr << i; +} + +void print_debug::printD(double d){ + std::cerr << std::fixed << d; +} + +void print_debug::printH(long long i){ + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << i; + std::cerr.flags(flags); +} + +void print_debug::printB(int i){ + std::cerr << std::setw(8) << std::setfill('0'); + std::cerr << std::setbase(2) << i; + std::cerr.flags(flags); +} + +void print_debug::printHL(int c, int s, int h){ + std::cerr << c << '.' << s << '.'; + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << h; + std::cerr.flags(flags); +} + +void print_debug::printPT(double x, double y, double z){ + std::cerr << std::fixed << "x: " << x << ", y: " << y << ", z: "<< z; +} diff --git a/extlib/libdxfrw/intern/drw_dbg.h b/extlib/libdxfrw/intern/drw_dbg.h new file mode 100644 index 0000000..a494c9c --- /dev/null +++ b/extlib/libdxfrw/intern/drw_dbg.h @@ -0,0 +1,61 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DRW_DBG_H +#define DRW_DBG_H + +#include +#include +//#include + +#define DRW_DBGSL(a) DRW_dbg::getInstance()->setLevel(a) +#define DRW_DBGGL DRW_dbg::getInstance()->getLevel() +#define DRW_DBG(a) DRW_dbg::getInstance()->print(a) +#define DRW_DBGH(a) DRW_dbg::getInstance()->printH(a) +#define DRW_DBGB(a) DRW_dbg::getInstance()->printB(a) +#define DRW_DBGHL(a, b, c) DRW_dbg::getInstance()->printHL(a, b ,c) +#define DRW_DBGPT(a, b, c) DRW_dbg::getInstance()->printPT(a, b, c) + + +class print_none; + +class DRW_dbg { +public: + enum LEVEL { + NONE, + DEBUG + }; + void setLevel(LEVEL lvl); + LEVEL getLevel(); + static DRW_dbg *getInstance(); + void print(std::string s); + void print(int i); + void print(unsigned int i); + void print(long long int i); + void print(long unsigned int i); + void print(long long unsigned int i); + void print(double d); + void printH(long long int i); + void printB(int i); + void printHL(int c, int s, int h); + void printPT(double x, double y, double z); + +private: + DRW_dbg(); + static DRW_dbg *instance; + LEVEL level; + std::ios_base::fmtflags flags; + print_none* prClass; +}; + + +#endif // DRW_DBG_H diff --git a/extlib/libdxfrw/intern/drw_textcodec.cpp b/extlib/libdxfrw/intern/drw_textcodec.cpp new file mode 100644 index 0000000..673c79c --- /dev/null +++ b/extlib/libdxfrw/intern/drw_textcodec.cpp @@ -0,0 +1,535 @@ +#include "drw_textcodec.h" +#include +#include +#include +#include "../drw_base.h" +#include "drw_cptables.h" +#include "drw_cptable932.h" +#include "drw_cptable936.h" +#include "drw_cptable949.h" +#include "drw_cptable950.h" + +DRW_TextCodec::DRW_TextCodec() { + version = DRW::AC1021; + conv = new DRW_Converter(NULL, 0); +} + +DRW_TextCodec::~DRW_TextCodec() { + delete conv; +} + +void DRW_TextCodec::setVersion(int v, bool dxfFormat){ + if (v == DRW::AC1009 || v == DRW::AC1006) { + version = DRW::AC1009; + cp = "ANSI_1252"; + setCodePage(&cp, dxfFormat); + } else if (v == DRW::AC1012 || v == DRW::AC1014 + || v == DRW::AC1015 || v == DRW::AC1018) { + version = DRW::AC1015; +// if (cp.empty()) { //codepage not set, initialize + cp = "ANSI_1252"; + setCodePage(&cp, dxfFormat); +// } + } else { + version = DRW::AC1021; + if (dxfFormat) + cp = "UTF-8";//RLZ: can be UCS2 or UTF-16 16bits per char + else + cp = "UTF-16";//RLZ: can be UCS2 or UTF-16 16bits per char + setCodePage(&cp, dxfFormat); + } +} + +void DRW_TextCodec::setVersion(std::string *v, bool dxfFormat){ + std::string versionStr = *v; + if (versionStr == "AC1009" || versionStr == "AC1006") { + setVersion(DRW::AC1009, dxfFormat); + } else if (versionStr == "AC1012" || versionStr == "AC1014" + || versionStr == "AC1015" || versionStr == "AC1018") { + setVersion(DRW::AC1015, dxfFormat); + } + setVersion(DRW::AC1021, dxfFormat); +} + +void DRW_TextCodec::setCodePage(std::string *c, bool dxfFormat){ + cp = correctCodePage(*c); + delete conv; + if (version == DRW::AC1009 || version == DRW::AC1015) { + if (cp == "ANSI_874") + conv = new DRW_ConvTable(DRW_Table874, CPLENGHTCOMMON); + else if (cp == "ANSI_932") + conv = new DRW_Conv932Table(DRW_Table932, DRW_LeadTable932, + DRW_DoubleTable932, CPLENGHT932); + else if (cp == "ANSI_936") + conv = new DRW_ConvDBCSTable(DRW_Table936, DRW_LeadTable936, + DRW_DoubleTable936, CPLENGHT936); + else if (cp == "ANSI_949") + conv = new DRW_ConvDBCSTable(DRW_Table949, DRW_LeadTable949, + DRW_DoubleTable949, CPLENGHT949); + else if (cp == "ANSI_950") + conv = new DRW_ConvDBCSTable(DRW_Table950, DRW_LeadTable950, + DRW_DoubleTable950, CPLENGHT950); + else if (cp == "ANSI_1250") + conv = new DRW_ConvTable(DRW_Table1250, CPLENGHTCOMMON); + else if (cp == "ANSI_1251") + conv = new DRW_ConvTable(DRW_Table1251, CPLENGHTCOMMON); + else if (cp == "ANSI_1253") + conv = new DRW_ConvTable(DRW_Table1253, CPLENGHTCOMMON); + else if (cp == "ANSI_1254") + conv = new DRW_ConvTable(DRW_Table1254, CPLENGHTCOMMON); + else if (cp == "ANSI_1255") + conv = new DRW_ConvTable(DRW_Table1255, CPLENGHTCOMMON); + else if (cp == "ANSI_1256") + conv = new DRW_ConvTable(DRW_Table1256, CPLENGHTCOMMON); + else if (cp == "ANSI_1257") + conv = new DRW_ConvTable(DRW_Table1257, CPLENGHTCOMMON); + else if (cp == "ANSI_1258") + conv = new DRW_ConvTable(DRW_Table1258, CPLENGHTCOMMON); + else if (cp == "UTF-8") { //DXF older than 2007 are write in win codepages + cp = "ANSI_1252"; + conv = new DRW_Converter(NULL, 0); + } else + conv = new DRW_ConvTable(DRW_Table1252, CPLENGHTCOMMON); + } else { + if (dxfFormat) + conv = new DRW_Converter(NULL, 0);//utf16 to utf8 + else + conv = new DRW_ConvUTF16();//utf16 to utf8 + } +} + +std::string DRW_TextCodec::toUtf8(std::string s) { + return conv->toUtf8(&s); +} + +std::string DRW_TextCodec::fromUtf8(std::string s) { + return conv->fromUtf8(&s); +} + +std::string DRW_Converter::toUtf8(std::string *s) { + std::string result; + int j = 0; + unsigned int i= 0; + for (i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c < 0x80) { //ascii check for /U+???? + if (c == '\\' && i+6 < s->length() && s->at(i+1) == 'U' && s->at(i+2) == '+') { + result += s->substr(j,i-j); + result += encodeText(s->substr(i,7)); + i +=6; + j = i+1; + } + } else if (c < 0xE0 ) {//2 bits + i++; + } else if (c < 0xF0 ) {//3 bits + i +=2; + } else if (c < 0xF8 ) {//4 bits + i +=3; + } + } + result += s->substr(j); + + return result; +} + +std::string DRW_ConvTable::fromUtf8(std::string *s) { + std::string result; + bool notFound; + int code; + + int j = 0; + for (unsigned int i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + for (int k=0; ksubstr(j); + + return result; +} + +std::string DRW_ConvTable::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + unsigned char c = *it; + if (c < 0x80) { + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else {//end c < 0x80 + res += encodeNum(table[c-0x80]); //translate from table + } + } //end for + + return res; +} + +std::string DRW_Converter::encodeText(std::string stmp){ + int code; +#if defined(__APPLE__) + int Succeeded = sscanf (&( stmp.substr(3,4)[0]), "%x", &code ); + if ( !Succeeded || Succeeded == EOF ) + code = 0; +#else + std::istringstream sd(stmp.substr(3,4)); + sd >> std::hex >> code; +#endif + return encodeNum(code); +} + +std::string DRW_Converter::decodeText(int c){ + std::string res = "\\U+"; + std::string num; +#if defined(__APPLE__) + std::string str(16, '\0'); + snprintf (&(str[0]), 16, "%04X", c ); + num = str; +#else + std::stringstream ss; + ss << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << c; + ss >> num; +#endif + res += num; + return res; +} + +std::string DRW_Converter::encodeNum(int c){ + unsigned char ret[5]; + if (c < 128) { // 0-7F US-ASCII 7 bits + ret[0] = c; + ret[1] = 0; + } else if (c < 0x800) { //80-07FF 2 bytes + ret[0] = 0xC0 | (c >> 6); + ret[1] = 0x80 | (c & 0x3f); + ret[2] = 0; + } else if (c< 0x10000) { //800-FFFF 3 bytes + ret[0] = 0xe0 | (c >> 12); + ret[1] = 0x80 | ((c >> 6) & 0x3f); + ret[2] = 0x80 | (c & 0x3f); + ret[3] = 0; + } else { //10000-10FFFF 4 bytes + ret[0] = 0xf0 | (c >> 18); + ret[1] = 0x80 | ((c >> 12) & 0x3f); + ret[2] = 0x80 | ((c >> 6) & 0x3f); + ret[3] = 0x80 | (c & 0x3f); + ret[4] = 0; + } + return std::string((char*)ret); +} + +/** 's' is a string with at least 4 bytes lenght +** returned 'b' is byte lenght of encoded char: 2,3 or 4 +**/ +int DRW_Converter::decodeNum(std::string s, int *b){ + int code= 0; + unsigned char c = s.at(0); + if ( (c& 0xE0) == 0xC0) { //2 bytes + code = ( c&0x1F)<<6; + code = (s.at(1) &0x3F) | code; + *b = 2; + } else if ( (c& 0xF0) == 0xE0) { //3 bytes + code = ( c&0x0F)<<12; + code = ((s.at(1) &0x3F)<<6) | code; + code = (s.at(2) &0x3F) | code; + *b = 3; + } else if ( (c& 0xF8) == 0xF0) { //4 bytes + code = ( c&0x07)<<18; + code = ((s.at(1) &0x3F)<<12) | code; + code = ((s.at(2) &0x3F)<<6) | code; + code = (s.at(3) &0x3F) | code; + *b = 4; + } + + return code; +} + + +std::string DRW_ConvDBCSTable::fromUtf8(std::string *s) { + std::string result; + bool notFound; + int code; + + int j = 0; + for (unsigned int i=0; i < s->length(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + for (int k=0; k> 8; + d[1] = data & 0xFF; + d[2]= '\0'; + result += d; //translate from table + notFound = false; + break; + } + } + if (notFound) + result += decodeText(code); + } //direct conversion + } + result += s->substr(j); + + return result; +} + +std::string DRW_ConvDBCSTable::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + bool notFound = true; + unsigned char c = *it; + if (c < 0x80) { + notFound = false; + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else if(c == 0x80 ){//1 byte table + notFound = false; + res += encodeNum(0x20AC);//euro sign + } else {//2 bytes + ++it; + int code = (c << 8) | (unsigned char )(*it); + int sta = leadTable[c-0x81]; + int end = leadTable[c-0x80]; + for (int k=sta; klength(); i++) { + unsigned char c = s->at(i); + if (c > 0x7F) { //need to decode + result += s->substr(j,i-j); + std::string part1 = s->substr(i,4); + int l; + code = decodeNum(part1, &l); + j = i+l; + i = j - 1; + notFound = true; + // 1 byte table + if (code > 0xff60 && code < 0xFFA0) { + result += code - CPOFFSET932; //translate from table + notFound = false; + } + if (notFound && ( code<0xF8 || (code>0x390 && code<0x542) || + (code>0x200F && code<0x9FA1) || code>0xF928 )) { + for (int k=0; k> 8; + d[1] = data & 0xFF; + d[2]= '\0'; + result += d; //translate from table + notFound = false; + break; + } + } + } + if (notFound) + result += decodeText(code); + } //direct conversion + } + result += s->substr(j); + + return result; +} + +std::string DRW_Conv932Table::toUtf8(std::string *s) { + std::string res; + std::string::iterator it; + for ( it=s->begin() ; it < s->end(); ++it ) { + bool notFound = true; + unsigned char c = *it; + if (c < 0x80) { + notFound = false; + //check for \U+ encoded text + if (c == '\\') { + if (it+6 < s->end() && *(it+1) == 'U' && *(it+2) == '+') { + res += encodeText(std::string(it, it+7)); + it +=6; + } else { + res +=c; //no \U+ encoded text write + } + } else + res +=c; //c!='\' ascii char write + } else if(c > 0xA0 && c < 0xE0 ){//1 byte table + notFound = false; + res += encodeNum(c + CPOFFSET932); //translate from table + } else {//2 bytes + ++it; + int code = (c << 8) | (unsigned char )(*it); + int sta; + int end=0; + if (c > 0x80 && c < 0xA0) { + sta = DRW_LeadTable932[c-0x81]; + end = DRW_LeadTable932[c-0x80]; + } else if (c > 0xDF && c < 0xFD){ + sta = DRW_LeadTable932[c-0xC1]; + end = DRW_LeadTable932[c-0xC0]; + } + if (end > 0) { + for (int k=sta; kbegin() ; it < s->end(); ++it ) { + unsigned char c1 = *it; + unsigned char c2 = *(++it); + duint16 ch = (c2 <<8) | c1; + res +=encodeNum(ch); + } //end for + + return res; +} + +std::string DRW_TextCodec::correctCodePage(const std::string& s) { + //stringstream cause crash in OS/X, bug#3597944 + std::string cp=s; + transform(cp.begin(), cp.end(), cp.begin(), toupper); + //Latin/Thai + if (cp=="ANSI_874" || cp=="CP874" || cp=="ISO8859-11" || cp=="TIS-620") { + return "ANSI_874"; + //Central Europe and Eastern Europe + } else if (cp=="ANSI_1250" || cp=="CP1250" || cp=="ISO8859-2") { + return "ANSI_1250"; + //Cyrillic script + } else if (cp=="ANSI_1251" || cp=="CP1251" || cp=="ISO8859-5" || cp=="KOI8-R" || + cp=="KOI8-U" || cp=="IBM 866") { + return "ANSI_1251"; + //Western Europe + } else if (cp=="ANSI_1252" || cp=="CP1252" || cp=="LATIN1" || cp=="ISO-8859-1" || + cp=="CP819" || cp=="CSISO" || cp=="IBM819" || cp=="ISO_8859-1" || cp=="APPLE ROMAN" || + cp=="ISO8859-1" || cp=="ISO8859-15" || cp=="ISO-IR-100" || cp=="L1" || cp=="IBM 850") { + return "ANSI_1252"; + //Greek + } else if (cp=="ANSI_1253" || cp=="CP1253" || cp=="iso8859-7") { + return "ANSI_1253"; + //Turkish + } else if (cp=="ANSI_1254" || cp=="CP1254" || cp=="iso8859-9" || cp=="iso8859-3") { + return "ANSI_1254"; + //Hebrew + } else if (cp=="ANSI_1255" || cp=="CP1255" || cp=="iso8859-8") { + return "ANSI_1255"; + //Arabic + } else if (cp=="ANSI_1256" || cp=="CP1256" || cp=="ISO8859-6") { + return "ANSI_1256"; + //Baltic + } else if (cp=="ANSI_1257" || cp=="CP1257" || cp=="ISO8859-4" || cp=="ISO8859-10" || cp=="ISO8859-13") { + return "ANSI_1257"; + //Vietnamese + } else if (cp=="ANSI_1258" || cp=="CP1258") { + return "ANSI_1258"; + + //Japanese + } else if (cp=="ANSI_932" || cp=="SHIFT-JIS" || cp=="SHIFT_JIS" || cp=="CSSHIFTJIS" || + cp=="CSWINDOWS31J" || cp=="MS_KANJI" || cp=="X-MS-CP932" || cp=="X-SJIS" || + cp=="EUCJP" || cp=="EUC-JP" || cp=="CSEUCPKDFMTJAPANESE" || cp=="X-EUC" || + cp=="X-EUC-JP" || cp=="JIS7") { + return "ANSI_932"; + //Chinese PRC GBK (XGB) simplified + } else if (cp=="ANSI_936" || cp=="GBK" || cp=="GB2312" || cp=="CHINESE" || cp=="CN-GB" || + cp=="CSGB2312" || cp=="CSGB231280" || cp=="CSISO58BG231280" || + cp=="GB_2312-80" || cp=="GB231280" || cp=="GB2312-80" || + cp=="ISO-IR-58" || cp=="GB18030") { + return "ANSI_936"; + //Korean + } else if (cp=="ANSI_949" || cp=="EUCKR") { + return "ANSI_949"; + //Chinese Big5 (Taiwan, Hong Kong SAR) + } else if (cp=="ANSI_950" || cp=="BIG5" || cp=="CN-BIG5" || cp=="CSBIG5" || + cp=="X-X-BIG5" || cp=="BIG5-HKSCS") { + return "ANSI_950"; + +//celtic +/* } else if (cp=="ISO8859-14") { + return "ISO8859-14"; + } else if (cp=="TSCII") { + return "TSCII"; //tamil + }*/ + + } else if (cp=="UTF-8" || cp=="UTF8" || cp=="UTF8-BIT") { + return "UTF-8"; + } else if (cp=="UTF-16" || cp=="UTF16" || cp=="UTF16-BIT") { + return "UTF-16"; + } + + return "ANSI_1252"; +} diff --git a/extlib/libdxfrw/intern/drw_textcodec.h b/extlib/libdxfrw/intern/drw_textcodec.h new file mode 100644 index 0000000..0a6d39d --- /dev/null +++ b/extlib/libdxfrw/intern/drw_textcodec.h @@ -0,0 +1,91 @@ +#ifndef DRW_TEXTCODEC_H +#define DRW_TEXTCODEC_H + +#include + +class DRW_Converter; + +class DRW_TextCodec +{ +public: + DRW_TextCodec(); + ~DRW_TextCodec(); + std::string fromUtf8(std::string s); + std::string toUtf8(std::string s); + int getVersion(){return version;} + void setVersion(std::string *v, bool dxfFormat); + void setVersion(int v, bool dxfFormat); + void setCodePage(std::string *c, bool dxfFormat); + void setCodePage(std::string c, bool dxfFormat){setCodePage(&c, dxfFormat);} + std::string getCodePage(){return cp;} + +private: + std::string correctCodePage(const std::string& s); + +private: + int version; + std::string cp; + DRW_Converter *conv; +}; + +class DRW_Converter +{ +public: + DRW_Converter(const int *t, int l){table = t; + cpLenght = l;} + virtual ~DRW_Converter(){} + virtual std::string fromUtf8(std::string *s) {return *s;} + virtual std::string toUtf8(std::string *s); + std::string encodeText(std::string stmp); + std::string decodeText(int c); + std::string encodeNum(int c); + int decodeNum(std::string s, int *b); + const int *table; + int cpLenght; +}; + +class DRW_ConvUTF16 : public DRW_Converter { +public: + DRW_ConvUTF16():DRW_Converter(NULL, 0) {} + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +}; + +class DRW_ConvTable : public DRW_Converter { +public: + DRW_ConvTable(const int *t, int l):DRW_Converter(t, l) {} + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +}; + +class DRW_ConvDBCSTable : public DRW_Converter { +public: + DRW_ConvDBCSTable(const int *t, const int *lt, const int dt[][2], int l):DRW_Converter(t, l) { + leadTable = lt; + doubleTable = dt; + } + + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +private: + const int *leadTable; + const int (*doubleTable)[2]; + +}; + +class DRW_Conv932Table : public DRW_Converter { +public: + DRW_Conv932Table(const int *t, const int *lt, const int dt[][2], int l):DRW_Converter(t, l) { + leadTable = lt; + doubleTable = dt; + } + + virtual std::string fromUtf8(std::string *s); + virtual std::string toUtf8(std::string *s); +private: + const int *leadTable; + const int (*doubleTable)[2]; + +}; + +#endif // DRW_TEXTCODEC_H diff --git a/extlib/libdxfrw/intern/dwgbuffer.cpp b/extlib/libdxfrw/intern/dwgbuffer.cpp new file mode 100644 index 0000000..8bf914f --- /dev/null +++ b/extlib/libdxfrw/intern/dwgbuffer.cpp @@ -0,0 +1,923 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "dwgbuffer.h" +#include "../libdwgr.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" +//#include +/*#include +#include +#include +#include "dwgreader.h"*/ +//#include "dxfwriter.h" + + +//#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +static unsigned int crctable[256]= { +0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241, +0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440, +0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40, +0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841, +0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40, +0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41, +0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641, +0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040, +0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240, +0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441, +0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41, +0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840, +0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41, +0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40, +0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640, +0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041, +0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240, +0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441, +0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41, +0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840, +0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41, +0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40, +0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640, +0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041, +0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241, +0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440, +0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40, +0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841, +0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40, +0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41, +0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641, +0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040 }; + +static unsigned int crc32Table[256] ={ +0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, +0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, +0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, +0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, +0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, +0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, +0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, +0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, +0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, +0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, +0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, +0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, +0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, +0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, +0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, +0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, +0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, +0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, +0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, +0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, +0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, +0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, +0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, +0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, +0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, +0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, +0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, +0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, +0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, +0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, +0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, +0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; + +union typeCast { + char buf[8]; + duint16 i16; + duint32 i32; + duint64 i64; + ddouble64 d64; +}; + +bool dwgFileStream::setPos(duint64 p){ + if (p >= sz) + return false; + + stream->seekg(p); + return stream->good(); +} + +bool dwgFileStream::read(duint8* s, duint64 n){ + stream->read (reinterpret_cast(s),n); + return stream->good(); +} + +bool dwgCharStream::setPos(duint64 p){ + if (p > size()) { + isOk = false; + return false; + } + + pos = p; + return true; +} + +bool dwgCharStream::read(duint8* s, duint64 n){ + if ( n > (sz - pos) ) { + isOk = false; + return false; + } + for (duint64 i=0; isize(); + bitPos = 0; +} + +dwgBuffer::dwgBuffer( const dwgBuffer& org ){ + filestr = org.filestr->clone(); + decoder = org.decoder; + maxSize = filestr->size(); + currByte = org.currByte; + bitPos = org.bitPos; +} + +dwgBuffer& dwgBuffer::operator=( const dwgBuffer& org ){ + filestr = org.filestr->clone(); + decoder = org.decoder; + maxSize = filestr->size(); + currByte = org.currByte; + bitPos = org.bitPos; + return *this; +} + +dwgBuffer::~dwgBuffer(){ + delete filestr; +} + +/**Gets the current byte position in buffer **/ +duint64 dwgBuffer::getPosition(){ + if (bitPos != 0) + return filestr->getPos() -1; + return filestr->getPos(); + } + +/**Sets the buffer position in pos byte, reset the bit position **/ +bool dwgBuffer::setPosition(duint64 pos){ + bitPos = 0; +/* if (pos>=maxSize) + return false;*/ + return filestr->setPos(pos); +// return true; +} + +//RLZ: Fails if ... ??? +void dwgBuffer::setBitPos(duint8 pos){ + if (pos>7) + return; + if (pos != 0 && bitPos == 0){ + duint8 buffer; + filestr->read (&buffer,1); + currByte = buffer; + } + if (pos == 0 && bitPos != 0){//reset current byte + filestr->setPos(filestr->getPos()-1); + } + bitPos = pos; +} + +bool dwgBuffer::moveBitPos(dint32 size){ + if (size == 0) return true; + + dint32 b= size + bitPos; + filestr->setPos(getPosition() + (b >> 3) ); + bitPos = b & 7; + + if (bitPos != 0){ + filestr->read (&currByte,1); + } + return filestr->good(); +} + +/**Reads one Bit returns a char with value 0/1 (B) **/ +duint8 dwgBuffer::getBit(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + ret = (currByte >> (7 - bitPos) & 1); + bitPos +=1; + if (bitPos == 8) + bitPos = 0; + + return ret; +} + +/**Reads one Bit returns a bool value 0==false 1==true (B) **/ +bool dwgBuffer::getBoolBit(){ + return (getBit() != 0); +} + +/**Reads two Bits returns a char (BB) **/ +duint8 dwgBuffer::get2Bits(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + bitPos +=2; + if (bitPos < 9) + ret = currByte >>(8 - bitPos); + else {//read one bit per byte + ret = currByte << 1; + filestr->read (&buffer,1); + currByte = buffer; + bitPos = 1; + ret = ret | currByte >> 7; + } + if (bitPos == 8) + bitPos = 0; + ret = ret & 3; + return ret; +} + +/**Reads thee Bits returns a char (3B) **/ +//RLZ: todo verify this +duint8 dwgBuffer::get3Bits(){ + duint8 buffer; + duint8 ret = 0; + if (bitPos == 0){ + filestr->read (&buffer,1); + currByte = buffer; + } + + bitPos +=3; + if (bitPos < 9) + ret = currByte >>(8 - bitPos); + else {//read one bit per byte + ret = currByte << 1; + filestr->read (&buffer,1); + currByte = buffer; + bitPos = 1; + ret = ret | currByte >> 7; + } + if (bitPos == 8) + bitPos = 0; + ret = ret & 7; + return ret; +} + +/**Reads tree Bits returns a char (3B) for R24 **/ +//to be written + +/**Reads compresed Short (max. 16 + 2 bits) little-endian order, returns a UNsigned 16 bits (BS) **/ +duint16 dwgBuffer::getBitShort(){ + duint8 b = get2Bits(); + if (b == 0) + return getRawShort16(); + else if (b== 1) + return getRawChar8(); + else if (b == 2) + return 0; + else + return 256; +} +/**Reads compresed Short (max. 16 + 2 bits) little-endian order, returns a signed 16 bits (BS) **/ +dint16 dwgBuffer::getSBitShort(){ + duint8 b = get2Bits(); + if (b == 0) + return (dint16)getRawShort16(); + else if (b== 1) + return (dint16)getRawChar8(); + else if (b == 2) + return 0; + else + return 256; +} + +/**Reads compresed 32 bits Int (max. 32 + 2 bits) little-endian order, returns a signed 32 bits (BL) **/ +//to be written +dint32 dwgBuffer::getBitLong(){ + dint8 b = get2Bits(); + if (b == 0) + return getRawLong32(); + else if (b== 1) + return getRawChar8(); + else //if (b == 2) + return 0; +} + +/**Reads compresed 64 bits Int (max. 56 + 3 bits) little-endian order, returns a unsigned 64 bits (BLL) **/ +duint64 dwgBuffer::getBitLongLong(){ + dint8 b = get3Bits(); + duint64 ret=0; + for (duint8 i=0; iread (buffer,8); + } + double* ret = reinterpret_cast( buffer ); + return *ret; + } + // if (b == 2) + return 0.0; +} + +/**Reads 3 compresed Double (max. 64 + 2 bits) returns a DRW_Coord of floating point double of 64 bits (3BD) **/ +DRW_Coord dwgBuffer::get3BitDouble(){ + DRW_Coord crd; + crd.x = getBitDouble(); + crd.y = getBitDouble(); + crd.z = getBitDouble(); + return crd; +} + +/**Reads raw char 8 bits returns a unsigned char (RC) **/ +duint8 dwgBuffer::getRawChar8(){ + duint8 ret; + duint8 buffer; + filestr->read (&buffer,1); + if (bitPos == 0) + return buffer; + else { + ret = currByte << bitPos; + currByte = buffer; + ret = ret | (currByte >>(8 - bitPos)); + } + return ret; +} + +/**Reads raw short 16 bits little-endian order, returns a unsigned short (RS) **/ +duint16 dwgBuffer::getRawShort16(){ + duint8 buffer[2]; + duint16 ret; + + filestr->read (buffer,2); + if (bitPos == 0) { + /* no offset directly swap bytes for little-endian */ + ret = (buffer[1] << 8) | (buffer[0] & 0x00FF); + } else { + ret = (buffer[0] << 8) | (buffer[1] & 0x00FF); + /* apply offset */ + ret = ret >> (8 - bitPos); + ret = ret | (currByte << (8 + bitPos)); + currByte = buffer[1]; + /* swap bytes for little-endian */ + ret = (ret << 8) | (ret >> 8); + } + return ret; +} + +/**Reads raw double IEEE standard 64 bits returns a double (RD) **/ +double dwgBuffer::getRawDouble(){ + duint8 buffer[8]; + if (bitPos == 0) + filestr->read (buffer,8); + else { + for (int i = 0; i < 8; i++) + buffer[i] = getRawChar8(); + } + double* nOffset = reinterpret_cast( buffer ); + return *nOffset; +} + +/**Reads 2 raw double IEEE standard 64 bits returns a DRW_Coord of floating point double 64 bits (2RD) **/ +DRW_Coord dwgBuffer::get2RawDouble(){ + DRW_Coord crd; + crd.x = getRawDouble(); + crd.y = getRawDouble(); + return crd; +} + + +/**Reads raw int 32 bits little-endian order, returns a unsigned int (RL) **/ +duint32 dwgBuffer::getRawLong32(){ + duint16 tmp1 = getRawShort16(); + duint16 tmp2 = getRawShort16(); + duint32 ret = (tmp2 << 16) | (tmp1 & 0x0000FFFF); + + return ret; +} + +/**Reads raw int 64 bits little-endian order, returns a unsigned long long (RLL) **/ +duint64 dwgBuffer::getRawLong64(){ + duint32 tmp1 = getRawLong32(); + duint64 tmp2 = getRawLong32(); + duint64 ret = (tmp2 << 32) | (tmp1 & 0x00000000FFFFFFFF); + + return ret; +} + +/**Reads modular unsigner int, char based, compresed form, little-endian order, returns a unsigned int (U-MC) **/ +duint32 dwgBuffer::getUModularChar(){ + std::vector buffer; + duint32 result =0; + for (int i=0; i<4;i++){ + duint8 b= getRawChar8(); + buffer.push_back(b & 0x7F); + if (! (b & 0x80)) + break; + } + int offset = 0; + for (unsigned int i=0; i buffer; + dint32 result =0; + for (int i=0; i<4;i++){ + duint8 b= getRawChar8(); + buffer.push_back(b & 0x7F); + if (! (b & 0x80)) + break; + } + dint8 b= buffer.back(); + if (b & 0x40) { + negative = true; + buffer.pop_back(); + buffer.push_back(b & 0x3F); + } + + int offset = 0; + for (unsigned int i=0; i buffer; + dint32 result =0; + for (int i=0; i<2;i++){ + duint16 b= getRawShort16(); + buffer.push_back(b & 0x7FFF); + if (! (b & 0x8000)) + break; + } + + //only positive ? +/* dint8 b= buffer.back(); + if (! (b & 0x40)) { + negative = true; + buffer.pop_back(); + buffer.push_back(b & 0x3F); + }*/ + + int offset = 0; + for (unsigned int i=0; i> 4) & 0x0F; + hl.size = data & 0x0F; + hl.ref=0; + for (int i=0; i< hl.size;i++){ + hl.ref = (hl.ref << 8) | getRawChar8(); + } + return hl; +} + +dwgHandle dwgBuffer::getOffsetHandle(duint32 href){ //H + dwgHandle hl = getHandle(); + + if (hl.code > 5){ + if (hl.code == 0x0C) + hl.ref = href - hl.ref; + else if (hl.code == 0x0A) + hl.ref = href + hl.ref; + else if (hl.code == 0x08) + hl.ref = href - 1; + else if (hl.code == 0x06) + hl.ref = href + 1; +//all are soft pointer reference change to 7 (without offset) + hl.code = 7; + } + return hl; +} + +//internal until 2004 +std::string dwgBuffer::get8bitStr(){ + duint16 textSize = getBitShort(); + if (textSize == 0) + return std::string(); + duint8 *tmpBuffer = new duint8[textSize]; + bool good = getBytes(tmpBuffer, textSize); + if (!good) + return std::string(); + +/* filestr->read (buffer,textSize); + if (!filestr->good()) + return std::string(); + + duint8 tmp; + if (bitPos != 0){ + for (int i=0; i> (8 - bitPos)); + currByte = tmp; + } + }*/ + std::string str(reinterpret_cast(tmpBuffer), textSize); + delete[]tmpBuffer; + + return str; +} + +//internal since 2007 //pending: are 2 bytes null terminated?? +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::get16bitStr(duint16 textSize, bool nullTerm){ + if (textSize == 0) + return std::string(); + textSize *=2; + duint16 ts = textSize; + if (nullTerm) + ts += 2; + duint8 *tmpBuffer = new duint8[textSize + 2]; + bool good = getBytes(tmpBuffer, ts); + if (!good) + return std::string(); + if (!nullTerm) { + tmpBuffer[textSize] = '\0'; + tmpBuffer[textSize + 1] = '\0'; + } + std::string str(reinterpret_cast(tmpBuffer), ts); + delete[]tmpBuffer; + + return str; +} + +//T 8 bit text converted from codepage to utf8 +std::string dwgBuffer::getCP8Text(){ + std::string strData; + strData = get8bitStr();//RLZ correct these function + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//TU unicode 16 bit (UCS) text converted to utf8 +/**Reads 2-bytes char (UCS2, NULL terminated) and convert to std::string (only for Latin-1) + ts= total input size in bytes. +**/ +std::string dwgBuffer::getUCSStr(duint16 ts){ + std::string strData; + if (ts<4) //at least 1 char + return std::string(); + strData = get16bitStr(ts/2, false); + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//TU unicode 16 bit (UCS) text converted to utf8 +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::getUCSText(bool nullTerm){ + std::string strData; + duint16 ts = getBitShort(); + if (ts == 0) + return std::string(); + + strData = get16bitStr(ts, nullTerm); + if (decoder == NULL) + return strData; + + return decoder->toUtf8(strData); +} + +//RLZ: read a T or TU if version is 2007+ +//nullTerm = true if string are 2 bytes null terminated from the stream +std::string dwgBuffer::getVariableText(DRW::Version v, bool nullTerm){//TV + if (v > DRW::AC1018) + return getUCSText(nullTerm); + return getCP8Text(); +} +duint16 dwgBuffer::getObjType(DRW::Version v){//OT + if (v > DRW::AC1021) { + duint8 b = get2Bits(); + if (b == 0) + return getRawChar8(); + else if (b== 1){ + return (getRawChar8() + 0x01F0); + } else //b == 2 + return getRawShort16(); + } + return getBitShort(); +} + +/* Bit Extrusion +* For R2000+, this is a single bit, If the single bit is 1, +* the extrusion value is assumed to be 0,0,1 and no explicit +* extrusion is stored. If the single bit is 0, then it will +* be followed by 3BD. +* For R13-R14 this is 3BD. +*/ +DRW_Coord dwgBuffer::getExtrusion(bool b_R2000_style) { + DRW_Coord ext(0.0,0.0,1.0); + if ( b_R2000_style ) + /* If the bit is one, the extrusion value is assumed to be 0,0,1*/ + if ( getBit() == 1 ) + return ext; + /*R13-R14 or bit == 0*/ + ext.x = getBitDouble(); + ext.y = getBitDouble(); + ext.z = getBitDouble(); + return ext; +} + +/**Reads compresed Double with default (max. 64 + 2 bits) returns a floating point double of 64 bits (DD) **/ +double dwgBuffer::getDefaultDouble(double d){ + dint8 b = get2Bits(); + if (b == 0) + return d; + else if (b == 1){ + duint8 buffer[4]; + char *tmp; + if (bitPos != 0) { + for (int i = 0; i < 4; i++) + buffer[i] = getRawChar8(); + } else { + filestr->read (buffer,4); + } + tmp = reinterpret_cast(&d); + for (int i = 0; i < 4; i++) + tmp[i] = buffer[i]; + double ret = *reinterpret_cast( tmp ); + return ret; + } else if (b == 2){ + duint8 buffer[6]; + char *tmp; + if (bitPos != 0) { + for (int i = 0; i < 6; i++) + buffer[i] = getRawChar8(); + } else { + filestr->read (buffer,6); + } + tmp = reinterpret_cast(&d); + for (int i = 2; i < 6; i++) + tmp[i-2] = buffer[i]; + tmp[4] = buffer[0]; + tmp[5] = buffer[1]; + double ret = *reinterpret_cast( tmp ); + return ret; + } + // if (b == 3) return a full raw double + return getRawDouble(); +} + + +/* BitThickness +* For R13-R14, this is a BD. +* For R2000+, this is a single bit, If the bit is one, +* the thickness value is assumed to be 0.0, if not a BD follow +*/ +double dwgBuffer::getThickness(bool b_R2000_style) { + if ( b_R2000_style ) + /* If the bit is one, the thickness value is assumed to be 0.0.*/ + if ( getBit() == 1 ) + return 0.0; + /*R13-R14 or bit == 0*/ + return getBitDouble(); +} + +/* CmColor (CMC) +* For R15 and earlier call directly BS as ACIS color. +* For R2004+, can be CMC or ENC +* RGB value, first 4bits 0xC0 => ByLayer, 0xC1 => ByBlock, 0xC2 => RGB, 0xC3 => last 4 are ACIS +*/ +duint32 dwgBuffer::getCmColor(DRW::Version v) { + if (v < DRW::AC1018) //2000- + return getSBitShort(); + duint16 idx = getBitShort(); + duint32 rgb = getBitLong(); + duint8 cb = getRawChar8(); + duint8 type = rgb >> 24; + DRW_DBG("\ntype COLOR: "); DRW_DBGH(type); + DRW_DBG("\nindex COLOR: "); DRW_DBGH(idx); + DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); + DRW_DBG("\nbyte COLOR: "); DRW_DBGH(cb); + if (cb&1){ + std::string colorName = getVariableText(v, false); + DRW_DBG("\ncolorName: "); DRW_DBG(colorName); + } + if (cb&2){ + std::string bookName = getVariableText(v, false); + DRW_DBG("\nbookName: "); DRW_DBG(bookName); + } + switch (type) { + case 0xC0: + return 256;//ByLayer + break; + case 0xC1: + return 0;//ByBlock + break; + case 0xC2: + return 256;//RGB RLZ TODO + break; + case 0xC3: + return rgb&0xFF;//ACIS + break; + default: + break; + } + //check cb if strings follows RLZ TODO + return 256; //default return ByLayer +} + +/* EnColor (ENC) +* For R15 and earlier call directly BS as ACIS color. +* For R2004+, can be CMC or ENC +* RGB value, first 4bits 0xC0 => ByLayer, 0xC1 => ByBlock, 0xC2 => RGB, 0xC3 => last 4 are ACIS +*/ +duint32 dwgBuffer::getEnColor(DRW::Version v) { + if (v < DRW::AC1018) //2000- + return getSBitShort(); + duint32 rgb = 0; + duint32 cb = 0; + duint16 idx = getBitShort(); + DRW_DBG("idx reads COLOR: "); DRW_DBGH(idx); + duint16 flags = idx>>8; + idx = idx & 0x1FF; //RLZ: warning this is correct? + DRW_DBG("\nflag COLOR: "); DRW_DBGH(flags); + DRW_DBG(", index COLOR: "); DRW_DBGH(idx); +// if (flags & 0x80) { +// rgb = getBitLong(); +// DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); +// } + if (flags & 0x20) { + cb = getBitLong(); + DRW_DBG("\nTransparency COLOR: "); DRW_DBGH(cb); + } + if (flags & 0x40) + DRW_DBG("\nacdbColor COLOR are present"); + else { + if (flags & 0x80) { + rgb = getBitLong(); + DRW_DBG("\nRGB COLOR: "); DRW_DBGH(rgb); + } + } + +/* if (flags & 0x80) + return getBitLong();*/ + + return idx; //default return ByLayer +} + + +/**Reads raw short 16 bits big-endian order, returns a unsigned short crc & size **/ +duint16 dwgBuffer::getBERawShort16(){ + char buffer[2]; + buffer[0] = getRawChar8(); + buffer[1] = getRawChar8(); + duint16 size = (buffer[0] << 8) | (buffer[1] & 0xFF); + return size; +} + +/* reads "size" bytes and stores in "buf" return false if fail */ +bool dwgBuffer::getBytes(unsigned char *buf, int size){ + duint8 tmp; + filestr->read (buf,size); + if (!filestr->good()) + return false; + + if (bitPos != 0){ + for (int i=0; i> (8 - bitPos)); + currByte = tmp; + } + } + return true; +} + +duint16 dwgBuffer::crc8(duint16 dx,dint32 start,dint32 end){ + int pos = filestr->getPos(); + filestr->setPos(start); + int n = end-start; + duint8 *tmpBuf = new duint8[n]; + duint8 *p = tmpBuf; + filestr->read (tmpBuf,n); + filestr->setPos(pos); + if (!filestr->good()) + return 0; + + duint8 al; + + while (n-- > 0) { + al = (duint8)((*p) ^ ((dint8)(dx & 0xFF))); + dx = (dx>>8) & 0xFF; + dx = dx ^ crctable[al & 0xFF]; + p++; + } + delete[]tmpBuf; + return(dx); +} + +duint32 dwgBuffer::crc32(duint32 seed,dint32 start,dint32 end){ + int pos = filestr->getPos(); + filestr->setPos(start); + int n = end-start; + duint8 *tmpBuf = new duint8[n]; + duint8 *p = tmpBuf; + filestr->read (tmpBuf,n); + filestr->setPos(pos); + if (!filestr->good()) + return 0; + + duint32 invertedCrc = ~seed; + while (n-- > 0) { + duint8 data = *p++; + invertedCrc = (invertedCrc >> 8) ^ crc32Table[(invertedCrc ^ data) & 0xff]; + } + delete[]tmpBuf; + return ~invertedCrc; +} + + +/*std::string dwgBuffer::getBytes(int size){ + char buffer[size]; + char tmp; + filestr->read (buffer,size); + if (!filestr->good()) + return NULL; + + if (bitPos != 0){ + for (int i=0; i<=size;i++){ + tmp = buffer[i]; + buffer[i] = (currByte << bitPos) | (tmp >> (8 - bitPos)); + currByte = tmp; + } + } + std::string st; + for (int i=0; i. ** +******************************************************************************/ + +#ifndef DWGBUFFER_H +#define DWGBUFFER_H + +#include +#include +#include "../drw_base.h" + +class DRW_Coord; +class DRW_TextCodec; + +class dwgBasicStream{ +protected: + dwgBasicStream(){} +public: + virtual ~dwgBasicStream(){} + virtual bool read(duint8* s, duint64 n) = 0; + virtual duint64 size() = 0; + virtual duint64 getPos() = 0; + virtual bool setPos(duint64 p) = 0; + virtual bool good() = 0; + virtual dwgBasicStream* clone() = 0; +}; + +class dwgFileStream: public dwgBasicStream{ +public: + dwgFileStream(std::istream *s){ + stream =s; + stream->seekg (0, std::ios::end); + sz = stream->tellg(); + stream->seekg(0, std::ios_base::beg); + } + virtual ~dwgFileStream(){} + virtual bool read(duint8* s, duint64 n); + virtual duint64 size(){return sz;} + virtual duint64 getPos(){return stream->tellg();} + virtual bool setPos(duint64 p); + virtual bool good(){return stream->good();} + virtual dwgBasicStream* clone(){return new dwgFileStream(stream);} +private: + std::istream *stream; + duint64 sz; +}; + +class dwgCharStream: public dwgBasicStream{ +public: + dwgCharStream(duint8 *buf, int s){ + stream =buf; + sz = s; + pos = 0; + isOk = true; + } + virtual ~dwgCharStream(){} + virtual bool read(duint8* s, duint64 n); + virtual duint64 size(){return sz;} + virtual duint64 getPos(){return pos;} + virtual bool setPos(duint64 p); + virtual bool good(){return isOk;} + virtual dwgBasicStream* clone(){return new dwgCharStream(stream, sz);} +private: + duint8 *stream; + duint64 sz; + duint64 pos; + bool isOk; +}; + +class dwgBuffer { +public: + dwgBuffer(std::istream *stream, DRW_TextCodec *decoder = NULL); + dwgBuffer(duint8 *buf, int size, DRW_TextCodec *decoder= NULL); + dwgBuffer( const dwgBuffer& org ); + dwgBuffer& operator=( const dwgBuffer& org ); + ~dwgBuffer(); + duint64 size(){return filestr->size();} + bool setPosition(duint64 pos); + duint64 getPosition(); + void resetPosition(){setPosition(0); setBitPos(0);} + void setBitPos(duint8 pos); + duint8 getBitPos(){return bitPos;} + bool moveBitPos(dint32 size); + + duint8 getBit(); //B + bool getBoolBit(); //B as bool + duint8 get2Bits(); //BB + duint8 get3Bits(); //3B + duint16 getBitShort(); //BS + dint16 getSBitShort(); //BS + dint32 getBitLong(); //BL + duint64 getBitLongLong(); //BLL (R24) + double getBitDouble(); //BD + //2BD => call BD 2 times + DRW_Coord get3BitDouble(); //3BD + duint8 getRawChar8(); //RC + duint16 getRawShort16(); //RS + double getRawDouble(); //RD + duint32 getRawLong32(); //RL + duint64 getRawLong64(); //RLL + DRW_Coord get2RawDouble(); //2RD + //3RD => call RD 3 times + duint32 getUModularChar(); //UMC, unsigned for offsets in 1015 + dint32 getModularChar(); //MC + dint32 getModularShort(); //MS + dwgHandle getHandle(); //H + dwgHandle getOffsetHandle(duint32 href); //H converted to hard + UTF8STRING getVariableText(DRW::Version v, bool nullTerm = true); //TV => call TU for 2007+ or T for previous versions + UTF8STRING getCP8Text(); //T 8 bit text converted from codepage to utf8 + UTF8STRING getUCSText(bool nullTerm = true); //TU unicode 16 bit (UCS) text converted to utf8 + UTF8STRING getUCSStr(duint16 ts); + + duint16 getObjType(DRW::Version v); //OT + + //X, U, SN, + + DRW_Coord getExtrusion(bool b_R2000_style); //BE + double getDefaultDouble(double d); //DD + double getThickness(bool b_R2000_style);//BT + //3DD + duint32 getCmColor(DRW::Version v); //CMC + duint32 getEnColor(DRW::Version v); //ENC + //TC + + duint16 getBERawShort16(); //RS big-endian order + + bool isGood(){return filestr->good();} + bool getBytes(duint8 *buf, int size); + int numRemainingBytes(){return (maxSize- filestr->getPos());} + + duint16 crc8(duint16 dx,dint32 start,dint32 end); + duint32 crc32(duint32 seed,dint32 start,dint32 end); + +// duint8 getCurrByte(){return currByte;} + DRW_TextCodec *decoder; + +private: + dwgBasicStream *filestr; + int maxSize; + duint8 currByte; + duint8 bitPos; + + UTF8STRING get8bitStr(); + UTF8STRING get16bitStr(duint16 textSize, bool nullTerm = true); +}; + +#endif // DWGBUFFER_H diff --git a/extlib/libdxfrw/intern/dwgreader.cpp b/extlib/libdxfrw/intern/dwgreader.cpp new file mode 100644 index 0000000..da6ac35 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader.cpp @@ -0,0 +1,1294 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "dwgreader.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" + +dwgReader::~dwgReader(){ + for (std::map::iterator it=ltypemap.begin(); it!=ltypemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=layermap.begin(); it!=layermap.end(); ++it) + delete(it->second); + for (std::map::iterator it=blockmap.begin(); it!=blockmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=stylemap.begin(); it!=stylemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=dimstylemap.begin(); it!=dimstylemap.end(); ++it) + delete(it->second); + for (std::map::iterator it=vportmap.begin(); it!=vportmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=classesmap.begin(); it!=classesmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=blockRecordmap.begin(); it!=blockRecordmap.end(); ++it) + delete(it->second); + for (std::map::iterator it=appIdmap.begin(); it!=appIdmap.end(); ++it) + delete(it->second); + + delete fileBuf; +} + +void dwgReader::parseAttribs(DRW_Entity* e){ + if (e != NULL){ + duint32 ltref =e->lTypeH.ref; + duint32 lyref =e->layerH.ref; + std::map::iterator lt_it = ltypemap.find(ltref); + if (lt_it != ltypemap.end()){ + e->lineType = (lt_it->second)->name; + } + std::map::iterator ly_it = layermap.find(lyref); + if (ly_it != layermap.end()){ + e->layer = (ly_it->second)->name; + } + } +} + +std::string dwgReader::findTableName(DRW::TTYPE table, dint32 handle){ + std::string name; + switch (table){ + case DRW::STYLE:{ + std::map::iterator st_it = stylemap.find(handle); + if (st_it != stylemap.end()) + name = (st_it->second)->name; + break;} + case DRW::DIMSTYLE:{ + std::map::iterator ds_it = dimstylemap.find(handle); + if (ds_it != dimstylemap.end()) + name = (ds_it->second)->name; + break;} + case DRW::BLOCK_RECORD:{ //use DRW_Block because name are more correct +// std::map::iterator bk_it = blockmap.find(handle); +// if (bk_it != blockmap.end()) + std::map::iterator bk_it = blockRecordmap.find(handle); + if (bk_it != blockRecordmap.end()) + name = (bk_it->second)->name; + break;} +/* case DRW::VPORT:{ + std::map::iterator vp_it = vportmap.find(handle); + if (vp_it != vportmap.end()) + name = (vp_it->second)->name; + break;}*/ + case DRW::LAYER:{ + std::map::iterator ly_it = layermap.find(handle); + if (ly_it != layermap.end()) + name = (ly_it->second)->name; + break;} + case DRW::LTYPE:{ + std::map::iterator lt_it = ltypemap.find(handle); + if (lt_it != ltypemap.end()) + name = (lt_it->second)->name; + break;} + default: + break; + } + return name; +} + +bool dwgReader::readDwgHeader(DRW_Header& hdr, dwgBuffer *buf, dwgBuffer *hBuf){ + bool ret = hdr.parseDwg(version, buf, hBuf, maintenanceVersion); + //RLZ: copy objectControl handles + return ret; +} + +//RLZ: TODO add check instead print +bool dwgReader::checkSentinel(dwgBuffer *buf, enum secEnum::DWGSection, bool start){ + DRW_UNUSED(start); + for (int i=0; i<16;i++) { + DRW_DBGH(buf->getRawChar8()); DRW_DBG(" "); + } + return true; +} + +/*********** objects map ************************/ +/** Note: object map are split in sections with max size 2035? + * heach section are 2 bytes size + data bytes + 2 bytes crc + * size value are data bytes + 2 and to calculate crc are used + * 2 bytes size + data bytes + * last section are 2 bytes size + 2 bytes crc (size value always 2) +**/ +bool dwgReader::readDwgHandles(dwgBuffer *dbuf, duint32 offset, duint32 size) { + DRW_DBG("\ndwgReader::readDwgHandles\n"); + if (!dbuf->setPosition(offset)) + return false; + + duint32 maxPos = offset + size; + DRW_DBG("\nSection HANDLES offset= "); DRW_DBG(offset); + DRW_DBG("\nSection HANDLES size= "); DRW_DBG(size); + DRW_DBG("\nSection HANDLES maxPos= "); DRW_DBG(maxPos); + + int startPos = offset; + + while (maxPos > dbuf->getPosition()) { + DRW_DBG("\nstart handles section buf->curPosition()= "); DRW_DBG(dbuf->getPosition()); DRW_DBG("\n"); + duint16 size = dbuf->getBERawShort16(); + DRW_DBG("object map section size= "); DRW_DBG(size); DRW_DBG("\n"); + dbuf->setPosition(startPos); + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + if (size != 2){ + buff.setPosition(2); + int lastHandle = 0; + int lastLoc = 0; + //read data + while(buff.getPosition()< size){ + lastHandle += buff.getUModularChar(); + DRW_DBG("object map lastHandle= "); DRW_DBGH(lastHandle); + lastLoc += buff.getModularChar(); + DRW_DBG(" lastLoc= "); DRW_DBG(lastLoc); DRW_DBG("\n"); + ObjectMap[lastHandle]= objHandle(0, lastHandle, lastLoc); + } + } + //verify crc + duint16 crcCalc = buff.crc8(0xc0c1,0,size); + delete[]tmpByteStr; + duint16 crcRead = dbuf->getBERawShort16(); + DRW_DBG("object map section crc8 read= "); DRW_DBG(crcRead); + DRW_DBG("\nobject map section crc8 calculated= "); DRW_DBG(crcCalc); + DRW_DBG("\nobject section buf->curPosition()= "); DRW_DBG(dbuf->getPosition()); DRW_DBG("\n"); + startPos = dbuf->getPosition(); + } + + bool ret = dbuf->isGood(); + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader::readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf) { + DRW_DBG("\ndwgReader::readDwgTables start\n"); + bool ret = true; + bool ret2 = true; + objHandle oc; + std::map::iterator mit; + dint16 oType; + duint32 bs = 0; //bit size of handle stream 2010+ + duint8 *tmpByteStr; + + //parse linetypes, start with linetype Control + mit = ObjectMap.find(hdr.linetypeCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: LineType control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing LineType control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl ltControl; + dbuf->setPosition(oc.loc); + int csize = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[csize]; + dbuf->getBytes(tmpByteStr, csize); + dwgBuffer cbuff(tmpByteStr, csize, &decoder); + //verify if object are correct + oType = cbuff.getObjType(version); + if (oType != 0x38) { + DRW_DBG("\nWARNING: Not LineType control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x38\n"); + ret = false; + } else { //reset position + cbuff.resetPosition(); + ret2 = ltControl.parseDwg(version, &cbuff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=ltControl.hadlesList.begin(); it != ltControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: LineType not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nLineType Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" loc.: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_LType *lt = new DRW_LType(); + dbuf->setPosition(oc.loc); + int lsize = dbuf->getModularShort(); + DRW_DBG("LineType size in bytes= "); DRW_DBG(lsize); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[lsize]; + dbuf->getBytes(tmpByteStr, lsize); + dwgBuffer lbuff(tmpByteStr, lsize, &decoder); + ret2 = lt->parseDwg(version, &lbuff, bs); + ltypemap[lt->handle] = lt; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse layers, start with layer Control + mit = ObjectMap.find(hdr.layerCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Layer control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Layer control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl layControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x32) { + DRW_DBG("\nWARNING: Not Layer control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x32\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = layControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=layControl.hadlesList.begin(); it != layControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Layer not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Layer Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Layer *la = new DRW_Layer(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = la->parseDwg(version, &buff, bs); + layermap[la->handle] = la; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //set linetype in layer + for (std::map::iterator it=layermap.begin(); it!=layermap.end(); ++it) { + DRW_Layer *ly = it->second; + duint32 ref =ly->lTypeH.ref; + std::map::iterator lt_it = ltypemap.find(ref); + if (lt_it != ltypemap.end()){ + ly->lineType = (lt_it->second)->name; + } + } + + //parse text styles, start with style Control + mit = ObjectMap.find(hdr.styleCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Style control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Style control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl styControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x34) { + DRW_DBG("\nWARNING: Not Text Style control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x34\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = styControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=styControl.hadlesList.begin(); it != styControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Style not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Style Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Textstyle *sty = new DRW_Textstyle(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = sty->parseDwg(version, &buff, bs); + stylemap[sty->handle] = sty; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse dim styles, start with dimstyle Control + mit = ObjectMap.find(hdr.dimstyleCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Dimension Style control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Dimension Style control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl dimstyControl; + dbuf->setPosition(oc.loc); + duint32 size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x44) { + DRW_DBG("\nWARNING: Not Dim Style control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x44\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = dimstyControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=dimstyControl.hadlesList.begin(); it != dimstyControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Dimension Style not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Dimstyle Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Dimstyle *sty = new DRW_Dimstyle(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = sty->parseDwg(version, &buff, bs); + dimstylemap[sty->handle] = sty; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse vports, start with vports Control + mit = ObjectMap.find(hdr.vportCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vports control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing vports control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl vportControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x40) { + DRW_DBG("\nWARNING: Not VPorts control object, found oType: "); + DRW_DBG(oType); DRW_DBG(" instead 0x40\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = vportControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=vportControl.hadlesList.begin(); it != vportControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vport not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Vport Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Vport *vp = new DRW_Vport(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = vp->parseDwg(version, &buff, bs); + vportmap[vp->handle] = vp; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse Block_records , start with Block_record Control + mit = ObjectMap.find(hdr.blockCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Block_record control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing Block_record control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_ObjControl blockControl; + dbuf->setPosition(oc.loc); + int csize = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[csize]; + dbuf->getBytes(tmpByteStr, csize); + dwgBuffer buff(tmpByteStr, csize, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x30) { + DRW_DBG("\nWARNING: Not Block Record control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x30\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = blockControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=blockControl.hadlesList.begin(); it != blockControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: block record not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("block record Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Block_Record *br = new DRW_Block_Record(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = br->parseDwg(version, &buff, bs); + blockRecordmap[br->handle] = br; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //parse appId , start with appId Control + mit = ObjectMap.find(hdr.appidCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: AppId control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing AppId control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("AppId Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl appIdControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x42) { + DRW_DBG("\nWARNING: Not AppId control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x42\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = appIdControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + for (std::list::iterator it=appIdControl.hadlesList.begin(); it != appIdControl.hadlesList.end(); ++it){ + mit = ObjectMap.find(*it); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: AppId not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("AppId Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_AppId *ai = new DRW_AppId(); + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + ret2 = ai->parseDwg(version, &buff, bs); + appIdmap[ai->handle] = ai; + if(ret) + ret = ret2; + delete[]tmpByteStr; + } + } + } + + //RLZ: parse remaining object controls, TODO: implement all + if (DRW_DBGGL == DRW_dbg::DEBUG){ + mit = ObjectMap.find(hdr.viewCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: View control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing View control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("View Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl viewControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x3C) { + DRW_DBG("\nWARNING: Not View control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x3C\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = viewControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + } + + mit = ObjectMap.find(hdr.ucsCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Ucs control not found\n"); + ret = false; + } else { + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\n**********Parsing Ucs control*******\n"); + DRW_DBG("Ucs Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl ucsControl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x3E) { + DRW_DBG("\nWARNING: Not Ucs control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x3E\n"); + ret = false; + } else { //reset position + buff.resetPosition(); + ret2 = ucsControl.parseDwg(version, &buff, bs); + if(ret) + ret = ret2; + } + delete[]tmpByteStr; + } + + if (version < DRW::AC1018) {//r2000- + mit = ObjectMap.find(hdr.vpEntHeaderCtrl); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: vpEntHeader control not found\n"); + ret = false; + } else { + DRW_DBG("\n**********Parsing vpEntHeader control*******\n"); + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("vpEntHeader Control Obj Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_ObjControl vpEntHeaderCtrl; + dbuf->setPosition(oc.loc); + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + //verify if object are correct + oType = buff.getObjType(version); + if (oType != 0x46) { + DRW_DBG("\nWARNING: Not vpEntHeader control object, found oType "); + DRW_DBG(oType); DRW_DBG(" instead 0x46\n"); + ret = false; + } else { //reset position + buff.resetPosition(); +/* RLZ: writeme ret2 = vpEntHeader.parseDwg(version, &buff, bs); + if(ret) + ret = ret2;*/ + } + delete[]tmpByteStr; + } + } + } + + return ret; +} + +bool dwgReader::readDwgBlocks(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + duint32 bs =0; + duint8 *tmpByteStr; + std::map::iterator mit; + DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size()); + + for (std::map::iterator it=blockRecordmap.begin(); it != blockRecordmap.end(); ++it){ + DRW_Block_Record* bkr= it->second; + DRW_DBG("\nParsing Block, record handle= "); DRW_DBGH(it->first); DRW_DBG(" Name= "); DRW_DBG(bkr->name); DRW_DBG("\n"); + DRW_DBG("\nFinding Block, handle= "); DRW_DBGH(bkr->block); DRW_DBG("\n"); + mit = ObjectMap.find(bkr->block); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: block entity not found\n"); + ret = false; + continue; + } + objHandle oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("Block Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" Location: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + if ( !(dbuf->setPosition(oc.loc)) ){ + DRW_DBG("Bad Location reading blocks\n"); + ret = false; + continue; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + DRW_Block bk; + ret2 = bk.parseDwg(version, &buff, bs); + delete[]tmpByteStr; + ret = ret && ret2; + parseAttribs(&bk); + //complete block entity with block record data + bk.basePoint = bkr->basePoint; + bk.flags = bkr->flags; + intfa.addBlock(bk); + //and update block record name + bkr->name = bk.name; + + /**read & send block entities**/ + // in dwg code 330 are not set like dxf in ModelSpace & PaperSpace, set it (RLZ: only tested in 2000) + if (bk.parentHandle == DRW::NoHandle) { + // in dwg code 330 are not set like dxf in ModelSpace & PaperSpace, set it + bk.parentHandle= bkr->handle; + //and do not send block entities like dxf + } else { + if (version < DRW::AC1018) { //pre 2004 + duint32 nextH = bkr->firstEH; + while (nextH != 0){ + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + nextH = bkr->lastEH;//end while if entity not foud + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + ret2 = readDwgEntity(dbuf, oc, intfa); + ret = ret && ret2; + } + if (nextH == bkr->lastEH) + nextH = 0; //redundant, but prevent read errors + else + nextH = nextEntLink; + } + } else {//2004+ + for (std::vector::iterator it = bkr->entMap.begin() ; it != bkr->entMap.end(); ++it){ + duint32 nextH = *it; + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nBlocks, parsing entity: "); DRW_DBGH(oc.handle); DRW_DBG(", pos: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + ret2 = readDwgEntity(dbuf, oc, intfa); + ret = ret && ret2; + } + } + }//end 2004+ + } + + //end block entity, really needed to parse a dummy entity?? + mit = ObjectMap.find(bkr->endBlock); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: end block entity not found\n"); + ret = false; + continue; + } + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("End block Handle= "); DRW_DBGH(oc.handle); DRW_DBG(" Location: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + dbuf->setPosition(oc.loc); + size = dbuf->getModularShort(); + if (version > DRW::AC1021) //2010+ + bs = dbuf->getUModularChar(); + else + bs = 0; + tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff1(tmpByteStr, size, &decoder); + DRW_Block end; + end.isEnd = true; + ret2 = end.parseDwg(version, &buff1, bs); + delete[]tmpByteStr; + ret = ret && ret2; + if (bk.parentHandle == DRW::NoHandle) bk.parentHandle= bkr->handle; + parseAttribs(&end); + intfa.endBlock(); + } + + return ret; +} + +bool dwgReader::readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + objHandle oc; + duint32 bs = 0; + std::map::iterator mit; + + if (version < DRW::AC1018) { //pre 2004 + duint32 nextH = pline.firstEH; + while (nextH != 0){ + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + nextH = pline.lastEH;//end while if entity not foud + DRW_DBG("\nWARNING: pline vertex not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_Vertex vt; + dbuf->setPosition(oc.loc); + //RLZ: verify if pos is ok + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + DRW_DBG(" object type= "); DRW_DBG(oType); DRW_DBG("\n"); + ret2 = vt.parseDwg(version, &buff, bs, pline.basePoint.z); + delete[]tmpByteStr; + pline.addVertex(vt); + nextEntLink = vt.nextEntLink; \ + prevEntLink = vt.prevEntLink; + ret = ret && ret2; + } + if (nextH == pline.lastEH) + nextH = 0; //redundant, but prevent read errors + else + nextH = nextEntLink; + } + } else {//2004+ + for (std::list::iterator it = pline.hadlesList.begin() ; it != pline.hadlesList.end(); ++it){ + duint32 nextH = *it; + mit = ObjectMap.find(nextH); + if (mit==ObjectMap.end()) { + DRW_DBG("\nWARNING: Entity of block not found\n"); + ret = false; + continue; + } else {//foud entity reads it + oc = mit->second; + ObjectMap.erase(mit); + DRW_DBG("\nPline vertex, parsing entity: "); DRW_DBGH(oc.handle); DRW_DBG(", pos: "); DRW_DBG(oc.loc); DRW_DBG("\n"); + DRW_Vertex vt; + dbuf->setPosition(oc.loc); + //RLZ: verify if pos is ok + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + DRW_DBG(" object type= "); DRW_DBG(oType); DRW_DBG("\n"); + ret2 = vt.parseDwg(version, &buff, bs, pline.basePoint.z); + delete[]tmpByteStr; + pline.addVertex(vt); + nextEntLink = vt.nextEntLink; \ + prevEntLink = vt.prevEntLink; + ret = ret && ret2; + } + } + }//end 2004+ + DRW_DBG("\nRemoved SEQEND entity: "); DRW_DBGH(pline.seqEndH.ref);DRW_DBG("\n"); + ObjectMap.erase(pline.seqEndH.ref); + + return ret; +} + +bool dwgReader::readDwgEntities(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + + DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size()); + std::map::iterator itB=ObjectMap.begin(); + std::map::iterator itE=ObjectMap.end(); + while (itB != itE){ + ret2 = readDwgEntity(dbuf, itB->second, intfa); + ObjectMap.erase(itB); + itB=ObjectMap.begin(); + if (ret) + ret = ret2; + } + return ret; +} + +/** + * Reads a dwg drawing entity (dwg object entity) given its offset in the file + */ +bool dwgReader::readDwgEntity(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa){ + bool ret = true; + duint32 bs = 0; + +#define ENTRY_PARSE(e) \ + ret = e.parseDwg(version, &buff, bs); \ + parseAttribs(&e); \ + nextEntLink = e.nextEntLink; \ + prevEntLink = e.prevEntLink; + + nextEntLink = prevEntLink = 0;// set to 0 to skip unimplemented entities + dbuf->setPosition(obj.loc); + //verify if position is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgEntity, bad location\n"); + return false; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + //verify if getBytes is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgEntity, bad size\n"); + delete[]tmpByteStr; + return false; + } + dwgBuffer buff(tmpByteStr, size, &decoder); + dint16 oType = buff.getObjType(version); + buff.resetPosition(); + + if (oType > 499){ + std::map::iterator it = classesmap.find(oType); + if (it == classesmap.end()){//fail, not found in classes set error + DRW_DBG("Class "); DRW_DBG(oType);DRW_DBG("not found, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + delete[]tmpByteStr; + return false; + } else { + DRW_Class *cl = it->second; + if (cl->dwgType != 0) + oType = cl->dwgType; + } + } + + obj.type = oType; + switch (oType){ + case 17: { + DRW_Arc e; + ENTRY_PARSE(e) + intfa.addArc(e); + break; } + case 18: { + DRW_Circle e; + ENTRY_PARSE(e) + intfa.addCircle(e); + break; } + case 19:{ + DRW_Line e; + ENTRY_PARSE(e) + intfa.addLine(e); + break;} + case 27: { + DRW_Point e; + ENTRY_PARSE(e) + intfa.addPoint(e); + break; } + case 35: { + DRW_Ellipse e; + ENTRY_PARSE(e) + intfa.addEllipse(e); + break; } + case 7: + case 8: {//minsert = 8 + DRW_Insert e; + ENTRY_PARSE(e) + e.name = findTableName(DRW::BLOCK_RECORD, e.blockRecH.ref);//RLZ: find as block or blockrecord (ps & ps0) + intfa.addInsert(e); + break; } + case 77: { + DRW_LWPolyline e; + ENTRY_PARSE(e) + intfa.addLWPolyline(e); + break; } + case 1: { + DRW_Text e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::STYLE, e.styleH.ref); + intfa.addText(e); + break; } + case 44: { + DRW_MText e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::STYLE, e.styleH.ref); + intfa.addMText(e); + break; } + case 28: { + DRW_3Dface e; + ENTRY_PARSE(e) + intfa.add3dFace(e); + break; } + case 20: { + DRW_DimOrdinate e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimOrdinate(&e); + break; } + case 21: { + DRW_DimLinear e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimLinear(&e); + break; } + case 22: { + DRW_DimAligned e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAlign(&e); + break; } + case 23: { + DRW_DimAngular3p e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAngular3P(&e); + break; } + case 24: { + DRW_DimAngular e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimAngular(&e); + break; } + case 25: { + DRW_DimRadial e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimRadial(&e); + break; } + case 26: { + DRW_DimDiametric e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addDimDiametric(&e); + break; } + case 45: { + DRW_Leader e; + ENTRY_PARSE(e) + e.style = findTableName(DRW::DIMSTYLE, e.dimStyleH.ref); + intfa.addLeader(&e); + break; } + case 31: { + DRW_Solid e; + ENTRY_PARSE(e) + intfa.addSolid(e); + break; } + case 78: { + DRW_Hatch e; + ENTRY_PARSE(e) + intfa.addHatch(&e); + break; } + case 32: { + DRW_Trace e; + ENTRY_PARSE(e) + intfa.addTrace(e); + break; } + case 34: { + DRW_Viewport e; + ENTRY_PARSE(e) + intfa.addViewport(e); + break; } + case 36: { + DRW_Spline e; + ENTRY_PARSE(e) + intfa.addSpline(&e); + break; } + case 40: { + DRW_Ray e; + ENTRY_PARSE(e) + intfa.addRay(e); + break; } + case 15: // pline 2D + case 16: // pline 3D + case 29: { // pline PFACE + DRW_Polyline e; + ENTRY_PARSE(e) + readPlineVertex(e, dbuf); + intfa.addPolyline(e); + break; } +// case 30: { +// DRW_Polyline e;// MESH (not pline) +// ENTRY_PARSE(e) +// intfa.addRay(e); +// break; } + case 41: { + DRW_Xline e; + ENTRY_PARSE(e) + intfa.addXline(e); + break; } + case 101: { + DRW_Image e; + ENTRY_PARSE(e) + intfa.addImage(&e); + break; } + + default: + //not supported or are object add to remaining map + objObjectMap[obj.handle]= obj; + break; + } + if (!ret){ + DRW_DBG("Warning: Entity type "); DRW_DBG(oType);DRW_DBG("has failed, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + } + delete[]tmpByteStr; + return ret; +} + +bool dwgReader::readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf){ + bool ret = true; + bool ret2 = true; + + duint32 i=0; + DRW_DBG("\nentities map total size= "); DRW_DBG(ObjectMap.size()); + DRW_DBG("\nobjects map total size= "); DRW_DBG(objObjectMap.size()); + std::map::iterator itB=objObjectMap.begin(); + std::map::iterator itE=objObjectMap.end(); + while (itB != itE){ + ret2 = readDwgObject(dbuf, itB->second, intfa); + objObjectMap.erase(itB); + itB=objObjectMap.begin(); + if (ret) + ret = ret2; + } + if (DRW_DBGGL == DRW_dbg::DEBUG) { + for (std::map::iterator it=remainingMap.begin(); it != remainingMap.end(); ++it){ + DRW_DBG("\nnum.# "); DRW_DBG(i++); DRW_DBG(" Remaining object Handle, loc, type= "); DRW_DBG(it->first); + DRW_DBG(" "); DRW_DBG(it->second.loc); DRW_DBG(" "); DRW_DBG(it->second.type); + } + DRW_DBG("\n"); + } + return ret; +} + +/** + * Reads a dwg drawing object (dwg object object) given its offset in the file + */ +bool dwgReader::readDwgObject(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa){ + bool ret = true; + duint32 bs = 0; + + dbuf->setPosition(obj.loc); + //verify if position is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgObject, bad location\n"); + return false; + } + int size = dbuf->getModularShort(); + if (version > DRW::AC1021) {//2010+ + bs = dbuf->getUModularChar(); + } + duint8 *tmpByteStr = new duint8[size]; + dbuf->getBytes(tmpByteStr, size); + //verify if getBytes is ok: + if (!dbuf->isGood()){ + DRW_DBG(" Warning: readDwgObject, bad size\n"); + delete[]tmpByteStr; + return false; + } + dwgBuffer buff(tmpByteStr, size, &decoder); + //oType are set parsing entities + dint16 oType = obj.type; + + switch (oType){ + case 102: { + DRW_ImageDef e; + ret = e.parseDwg(version, &buff, bs); + intfa.linkImage(&e); + break; } + default: + //not supported object or entity add to remaining map for debug + remainingMap[obj.handle]= obj; + break; + } + if (!ret){ + DRW_DBG("Warning: Object type "); DRW_DBG(oType);DRW_DBG("has failed, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n"); + } + delete[]tmpByteStr; + return ret; +} + + + +bool DRW_ObjControl::parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs){ +int unkData=0; + bool ret = DRW_TableEntry::parseDwg(version, buf, NULL, bs); + DRW_DBG("\n***************************** parsing object control entry *********************************************\n"); + if (!ret) + return ret; + //last parsed is: XDic Missing Flag 2004+ + int numEntries = buf->getBitLong(); + DRW_DBG(" num entries: "); DRW_DBG(numEntries); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// if (oType == 68 && version== DRW::AC1015){//V2000 dimstyle seems have one unknown byte hard handle counter?? + if (oType == 68 && version > DRW::AC1014){//dimstyle seems have one unknown byte hard handle counter?? + unkData = buf->getRawChar8(); + DRW_DBG(" unknown v2000 byte: "); DRW_DBG( unkData); DRW_DBG("\n"); + } + if (version > DRW::AC1018){//from v2007+ have a bit for strings follows (ObjControl do not have) + int stringBit = buf->getBit(); + DRW_DBG(" string bit for v2007+: "); DRW_DBG( stringBit); DRW_DBG("\n"); + } + + dwgHandle objectH = buf->getHandle(); + DRW_DBG(" NULL Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + +// if (oType == 56 && version== DRW::AC1015){//linetype in 2004 seems not have XDicObjH or NULL handle + if (xDictFlag !=1){//linetype in 2004 seems not have XDicObjH or NULL handle + dwgHandle XDicObjH = buf->getHandle(); + DRW_DBG(" XDicObj control Handle: "); DRW_DBGHL(XDicObjH.code, XDicObjH.size, XDicObjH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } +//add 2 for modelspace, paperspace blocks & bylayer, byblock linetypes + numEntries = ((oType == 48) || (oType == 56)) ? (numEntries +2) : numEntries; + + for (int i =0; i< numEntries; i++){ + objectH = buf->getOffsetHandle(handle); + if (objectH.ref != 0) //in vports R14 I found some NULL handles + hadlesList.push_back (objectH.ref); + DRW_DBG(" objectH Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + + for (int i =0; i< unkData; i++){ + objectH = buf->getOffsetHandle(handle); + DRW_DBG(" unknown Handle: "); DRW_DBGHL(objectH.code, objectH.size, objectH.ref); DRW_DBG("\n"); + DRW_DBG("Remaining bytes: "); DRW_DBG(buf->numRemainingBytes()); DRW_DBG("\n"); + } + return buf->isGood(); +} diff --git a/extlib/libdxfrw/intern/dwgreader.h b/extlib/libdxfrw/intern/dwgreader.h new file mode 100644 index 0000000..4e88932 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader.h @@ -0,0 +1,203 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER_H +#define DWGREADER_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgutil.h" +#include "dwgbuffer.h" +#include "../libdwgr.h" + +class objHandle{ +public: + objHandle(){ handle = type = loc = 0; } + objHandle(duint32 t, duint32 h, duint32 l){ + type = t; + handle = h; + loc = l; + } + duint32 type; + duint32 handle; + duint32 loc; +}; + +//until 2000 = 2000- +//since 2004 except 2007 = 2004+ +// 2007 = 2007 +// pages of section +/* 2000-: No pages, only sections + * 2004+: Id, page number (index) + * size, size of page in file stream + * address, address in file stream + * dataSize, data size for this page + * startOffset, start offset for this page + * cSize, compresed size of data + * uSize, uncompresed size of data + * 2007: page Id, pageCount & pages + * size, size in file + * dataSize + * startOffset, start position in decompresed data stream + * cSize, compresed size of data + * uSize, uncompresed size of data + * address, address in file stream + * */ +class dwgPageInfo { +public: + dwgPageInfo(){} + dwgPageInfo(duint64 i, duint64 ad, duint32 sz){ + Id=i; address=ad; size=sz; + } + ~dwgPageInfo(){} + duint64 Id; + duint64 address; //in file stream, for rd18, rd21 + duint64 size; //in file stream, for rd18, rd21 + duint64 dataSize; //for rd18, rd21 + duint32 startOffset; //for rd18, rd21 + duint64 cSize; //compresed page size, for rd21 + duint64 uSize; //uncompresed page size, for rd21 +}; + +// sections of file +/* 2000-: No pages, only section Id, size & address in file + * 2004+: Id, Section Id + * size, total size of uncompresed data + * pageCount & pages, number of pages in section + * maxSize, max decompressed Size per page + * compresed, (1 = no, 2 = yes, normally 2) + * encrypted, (0 = no, 1 = yes, 2 = unknown) + * name, read & stored but not used + * 2007: same as 2004+ except encoding, saved in compresed field + * */ +class dwgSectionInfo { +public: + dwgSectionInfo(){ + compresed = 1;//1=no, 2=yes + encrypted = 0;//??? + pageCount = 0; + Id=-1; + } + ~dwgSectionInfo(){} + dint32 Id; //section Id, 2000- rd15 rd18 + std::string name; //section name rd18 + duint32 compresed;//is compresed? 1=no, 2=yes rd18, rd21(encoding) + duint32 encrypted;//encrypted (doc: 0=no, 1=yes, 2=unkn) on read: objects 0 and encrypted yes rd18 + std::mappages;//index, size, offset + duint64 size;//size of section, 2000- rd15, rd18, rd21 (data size) + duint64 pageCount; //number of pages (dwgPageInfo) in section rd18, rd21 + duint64 maxSize; //max decompressed size (needed??) rd18 rd21 + duint64 address; //address (seek) , 2000- +}; + + +//! Class to handle dwg obj control entries +/*! +* Class to handle dwg obj control entries +* @author Rallaz +*/ +class DRW_ObjControl : public DRW_TableEntry { +public: + DRW_ObjControl() { reset();} + + void reset(){ + } + bool parseDwg(DRW::Version version, dwgBuffer *buf, duint32 bs=0); + std::listhadlesList; +}; + + +class dwgReader { + friend class dwgR; +public: + dwgReader(std::istream *stream, dwgR *p){ + fileBuf = new dwgBuffer(stream); + parent = p; + decoder.setVersion(DRW::AC1021, false);//default 2007 in utf8(no convert) + decoder.setCodePage("UTF-16", false); +// blockCtrl=0; //RLZ: temporary +// blockCtrl=layerCtrl=styleCtrl=linetypeCtrl=viewCtrl=0; +// ucsCtrl=vportCtrl=appidCtrl=dimstyleCtrl=vpEntHeaderCtrl=0; + nextEntLink = prevEntLink = 0; + maintenanceVersion=0; + } + virtual ~dwgReader(); + +protected: + virtual bool readMetaData() = 0; + virtual bool readPreview(){return false;} + virtual bool readFileHeader() = 0; + virtual bool readDwgHeader(DRW_Header& hdr)=0; + virtual bool readDwgClasses() = 0; + virtual bool readDwgHandles() = 0; + virtual bool readDwgTables(DRW_Header& hdr)=0; + virtual bool readDwgBlocks(DRW_Interface& intfa) = 0; + virtual bool readDwgEntities(DRW_Interface& intfa) = 0; + virtual bool readDwgObjects(DRW_Interface& intfa) = 0; + + virtual bool readDwgEntity(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa); + bool readDwgObject(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& intfa); + void parseAttribs(DRW_Entity* e); + std::string findTableName(DRW::TTYPE table, dint32 handle); + + void setCodePage(std::string *c){decoder.setCodePage(c, false);} + std::string getCodePage(){ return decoder.getCodePage();} + bool readDwgHeader(DRW_Header& hdr, dwgBuffer *buf, dwgBuffer *hBuf); + bool readDwgHandles(dwgBuffer *dbuf, duint32 offset, duint32 size); + bool readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf); + bool checkSentinel(dwgBuffer *buf, enum secEnum::DWGSection, bool start); + + bool readDwgBlocks(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readDwgEntities(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf); + bool readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf); + +public: + std::mapObjectMap; + std::mapobjObjectMap; //stores the ojects & entities not read in readDwgEntities + std::mapremainingMap; //stores the ojects & entities not read in all proces, for debug only + std::map ltypemap; + std::map layermap; + std::map blockmap; + std::map stylemap; + std::map dimstylemap; + std::map vportmap; + std::map blockRecordmap; + std::map appIdmap; +// duint32 currBlock; + duint8 maintenanceVersion; + +protected: + dwgBuffer *fileBuf; + dwgR *parent; + DRW::Version version; + +//seeker (position) for the beginning sentinel of the image data (R13 to R15) + duint32 previewImagePos; + +//sections map + std::mapsections; + std::map classesmap; + +protected: + DRW_TextCodec decoder; + +protected: +// duint32 blockCtrl; + duint32 nextEntLink; + duint32 prevEntLink; +}; + + + +#endif // DWGREADER_H diff --git a/extlib/libdxfrw/intern/dwgreader15.cpp b/extlib/libdxfrw/intern/dwgreader15.cpp new file mode 100644 index 0000000..41bbe9b --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader15.cpp @@ -0,0 +1,198 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader15.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +bool dwgReader15::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader15::readMetaData\n"); + if (! fileBuf->setPosition(13)) + return false; + previewImagePos = fileBuf->getRawLong32(); + DRW_DBG("previewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + /* MEASUREMENT system variable 2 bytes*/ + duint16 meas = fileBuf->getRawShort16(); + DRW_DBG("\nMEASUREMENT (0 = English, 1 = Metric)= "); DRW_DBG(meas); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); DRW_DBG("\n"); + if (cp == 29) //TODO RLZ: locate wath code page and correct this + decoder.setCodePage("ANSI_1252", false); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + return true; +} + +bool dwgReader15::readFileHeader() { + bool ret = true; + DRW_DBG("dwgReader15::readFileHeader\n"); + if (! fileBuf->setPosition(21)) + return false; + duint32 count = fileBuf->getRawLong32(); + DRW_DBG("count records= "); DRW_DBG(count); DRW_DBG("\n"); + + for (unsigned int i = 0; i < count; i++) { + duint8 rec = fileBuf->getRawChar8(); + duint32 address = fileBuf->getRawLong32(); + duint32 size = fileBuf->getRawLong32(); + dwgSectionInfo si; + si.Id = rec; + si.size = size; + si.address = address; + if (rec == 0) { + DRW_DBG("\nSection HEADERS address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::HEADER] = si; + } else if (rec == 1) { + DRW_DBG("\nSection CLASSES address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::CLASSES] = si; + } else if (rec == 2) { + DRW_DBG("\nSection OBJECTS (handles) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::HANDLES] = si; + } else if (rec == 3) { + DRW_DBG("\nSection UNKNOWN address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::UNKNOWNS] = si; + } else if (rec == 4) { + DRW_DBG("\nSection R14DATA (AcDb:Template) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::TEMPLATE] = si; + } else if (rec == 5) { + DRW_DBG("\nSection R14REC5 (AcDb:AuxHeader) address= "); + DRW_DBG(address); DRW_DBG(" size= "); DRW_DBG(size); + sections[secEnum::AUXHEADER] = si; + } else { + std::cerr << "\nUnsupported section number\n"; + } + } + if (! fileBuf->isGood()) + return false; + DRW_DBG("\nposition after read section locator records= "); DRW_DBG(fileBuf->getPosition()); + DRW_DBG(", bit are= "); DRW_DBG(fileBuf->getBitPos()); + duint32 ckcrc = fileBuf->crc8(0,0,fileBuf->getPosition()); + DRW_DBG("\nfile header crc8 0 result= "); DRW_DBG(ckcrc); + switch (count){ + case 3: + ckcrc = ckcrc ^ 0xA598; + break; + case 4: + ckcrc = ckcrc ^ 0x8101; + break; + case 5: + ckcrc = ckcrc ^ 0x3CC4; + break; + case 6: + ckcrc = ckcrc ^ 0x8461; + } + DRW_DBG("\nfile header crc8 xor result= "); DRW_DBG(ckcrc); + DRW_DBG("\nfile header CRC= "); DRW_DBG(fileBuf->getRawShort16()); + DRW_DBG("\nfile header sentinel= "); + checkSentinel(fileBuf, secEnum::FILEHEADER, false); + + DRW_DBG("\nposition after read file header sentinel= "); DRW_DBG(fileBuf->getPosition()); + DRW_DBG(", bit are= "); DRW_DBG(fileBuf->getBitPos()); + + DRW_DBG("\ndwgReader15::readFileHeader END\n"); + return ret; +} + +bool dwgReader15::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader15::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + if (!fileBuf->setPosition(si.address)) + return false; + duint8 *tmpByteStr = new duint8[si.size]; + fileBuf->getBytes(tmpByteStr, si.size); + dwgBuffer buff(tmpByteStr, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&buff, secEnum::HEADER, true); + bool ret = dwgReader::readDwgHeader(hdr, &buff, &buff); + delete[]tmpByteStr; + return ret; +} + + +bool dwgReader15::readDwgClasses(){ + DRW_DBG("\ndwgReader15::readDwgClasses\n"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + if (!fileBuf->setPosition(si.address)) + return false; + + DRW_DBG("classes section sentinel= "); + checkSentinel(fileBuf, secEnum::CLASSES, true); + + duint32 size = fileBuf->getRawLong32(); + if (size != (si.size - 38)) { + DRW_DBG("\nWARNING dwgReader15::readDwgClasses size are "); DRW_DBG(size); + DRW_DBG(" and secSize - 38 are "); DRW_DBG(si.size - 38); DRW_DBG("\n"); + } + duint8 *tmpByteStr = new duint8[size]; + fileBuf->getBytes(tmpByteStr, size); + dwgBuffer buff(tmpByteStr, size, &decoder); + size--; //reduce 1 byte instead of check pos + bitPos + while (size > buff.getPosition()) { + DRW_Class *cl = new DRW_Class(); + cl->parseDwg(version, &buff, &buff); + classesmap[cl->classNum] = cl; + } + DRW_DBG("\nCRC: "); DRW_DBGH(fileBuf->getRawShort16()); + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(fileBuf, secEnum::CLASSES, false); + bool ret = buff.isGood(); + delete[]tmpByteStr; + return ret; +} + +bool dwgReader15::readDwgHandles() { + DRW_DBG("\ndwgReader15::readDwgHandles\n"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + + bool ret = dwgReader::readDwgHandles(fileBuf, si.address, si.size); + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader15::readDwgTables(DRW_Header& hdr) { + bool ret = dwgReader::readDwgTables(hdr, fileBuf); + + return ret; +} + +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader15::readDwgBlocks(DRW_Interface& intfa) { + bool ret = true; + ret = dwgReader::readDwgBlocks(intfa, fileBuf); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader15.h b/extlib/libdxfrw/intern/dwgreader15.h new file mode 100644 index 0000000..e3a1f97 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader15.h @@ -0,0 +1,47 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER15_H +#define DWGREADER15_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader.h" + +class dwgReader15 : public dwgReader { +public: + dwgReader15(std::istream *stream, dwgR *p):dwgReader(stream, p){ } + virtual ~dwgReader15() {} + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa); + bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + ret = dwgReader::readDwgEntities(intfa, fileBuf); + return ret; + } + bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + ret = dwgReader::readDwgObjects(intfa, fileBuf); + return ret; + } +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa); +}; + + +#endif // DWGREADER15_H diff --git a/extlib/libdxfrw/intern/dwgreader18.cpp b/extlib/libdxfrw/intern/dwgreader18.cpp new file mode 100644 index 0000000..d91b92e --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader18.cpp @@ -0,0 +1,594 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader18.h" +#include "dwgutil.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +void dwgReader18::genMagicNumber(){ + int size =0x114; + duint8 *tmpMagicStr = new duint8[size]; + duint8 *p = tmpMagicStr; + int rSeed =1; + while (size--) { + rSeed *= 0x343fd; + rSeed += 0x269ec3; + *p++ = static_cast(rSeed >> 0x10); + } + int j = 0; + size =0x114; + for (int i=0; i< size;i++) { + DRW_DBGH(tmpMagicStr[i]); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } + delete[]tmpMagicStr; +} + +duint32 dwgReader18::checksum(duint32 seed, duint8* data, duint32 sz){ + duint32 size = sz; + duint32 sum1 = seed & 0xffff; + duint32 sum2 = seed >> 0x10; + while (size != 0) { +// duint32 chunkSize = min(0x15b0, size); + duint32 chunkSize = 0x15b0 < size? 0x15b0:size; + size -= chunkSize; + for (duint32 i = 0; i < chunkSize; i++) { + sum1 += *data++; + sum2 += sum1; + } + sum1 %= 0xFFF1; + sum2 %= 0xFFF1; + } + return (sum2 << 0x10) | (sum1 & 0xffff); +} + + //called: Section page map: 0x41630e3b +void dwgReader18::parseSysPage(duint8 *decompSec, duint32 decompSize){ + DRW_DBG("\nparseSysPage:\n "); + duint32 compSize = fileBuf->getRawLong32(); + DRW_DBG("Compressed size= "); DRW_DBG(compSize); DRW_DBG(", "); DRW_DBGH(compSize); + DRW_DBG("\nCompression type= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nSection page checksum= "); DRW_DBGH(fileBuf->getRawLong32()); DRW_DBG("\n"); + + duint8 hdrData[20]; + fileBuf->moveBitPos(-160); + fileBuf->getBytes(hdrData, 20); + for (duint8 i= 16; i<20; ++i) + hdrData[i]=0; + duint32 calcsH = checksum(0, hdrData, 20); + DRW_DBG("Calc hdr checksum= "); DRW_DBGH(calcsH); + duint8 *tmpCompSec = new duint8[compSize]; + fileBuf->getBytes(tmpCompSec, compSize); + duint32 calcsD = checksum(calcsH, tmpCompSec, compSize); + DRW_DBG("\nCalc data checksum= "); DRW_DBGH(calcsD); DRW_DBG("\n"); + +#ifdef DRW_DBG_DUMP + for (unsigned int i=0, j=0; i< compSize;i++) { + DRW_DBGH( (unsigned char)compSec[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); +#endif + DRW_DBG("decompresing "); DRW_DBG(compSize); DRW_DBG(" bytes in "); DRW_DBG(decompSize); DRW_DBG(" bytes\n"); + dwgCompressor comp; + comp.decompress18(tmpCompSec, decompSec, compSize, decompSize); +#ifdef DRW_DBG_DUMP + for (unsigned int i=0, j=0; i< decompSize;i++) { + DRW_DBGH( decompSec[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); +#endif + delete[]tmpCompSec; +} + + //called ???: Section map: 0x4163003b +bool dwgReader18::parseDataPage(dwgSectionInfo si/*, duint8 *dData*/){ + DRW_DBG("\nparseDataPage\n "); + objData = new duint8 [si.pageCount * si.maxSize]; + + for (std::map::iterator it=si.pages.begin(); it!=si.pages.end(); ++it){ + dwgPageInfo pi = it->second; + if (!fileBuf->setPosition(pi.address)) + return false; + //decript section header + duint8 hdrData[32]; + fileBuf->getBytes(hdrData, 32); + dwgCompressor::decrypt18Hdr(hdrData, 32, pi.address); + DRW_DBG("Section "); DRW_DBG(si.name); DRW_DBG(" page header=\n"); + for (unsigned int i=0, j=0; i< 32;i++) { + DRW_DBGH( (unsigned char)hdrData[i]); + if (j == 7) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } DRW_DBG("\n"); + + DRW_DBG("\n Page number= "); DRW_DBGH(pi.Id); + DRW_DBG("\n size in file= "); DRW_DBGH(pi.size); + DRW_DBG("\n address in file= "); DRW_DBGH(pi.address); + DRW_DBG("\n Data size= "); DRW_DBGH(pi.dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(pi.startOffset); DRW_DBG("\n"); + dwgBuffer bufHdr(hdrData, 32, &decoder); + DRW_DBG(" section page type= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n section number= "); DRW_DBGH(bufHdr.getRawLong32()); + pi.cSize = bufHdr.getRawLong32(); + DRW_DBG("\n data size (compressed)= "); DRW_DBGH(pi.cSize); DRW_DBG(" dec "); DRW_DBG(pi.cSize); + pi.uSize = bufHdr.getRawLong32(); + DRW_DBG("\n page size (decompressed)= "); DRW_DBGH(pi.uSize); DRW_DBG(" dec "); DRW_DBG(pi.uSize); + DRW_DBG("\n start offset (in decompressed buffer)= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n unknown= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n header checksum= "); DRW_DBGH(bufHdr.getRawLong32()); + DRW_DBG("\n data checksum= "); DRW_DBGH(bufHdr.getRawLong32()); DRW_DBG("\n"); + + //get compresed data + duint8 *cData = new duint8[pi.cSize]; + if (!fileBuf->setPosition(pi.address+32)) + return false; + fileBuf->getBytes(cData, pi.cSize); + + //calculate checksum + duint32 calcsD = checksum(0, cData, pi.cSize); + for (duint8 i= 24; i<28; ++i) + hdrData[i]=0; + duint32 calcsH = checksum(calcsD, hdrData, 32); + DRW_DBG("Calc header checksum= "); DRW_DBGH(calcsH); + DRW_DBG("\nCalc data checksum= "); DRW_DBGH(calcsD); DRW_DBG("\n"); + + duint8* oData = objData + pi.startOffset; + pi.uSize = si.maxSize; + DRW_DBG("decompresing "); DRW_DBG(pi.cSize); DRW_DBG(" bytes in "); DRW_DBG(pi.uSize); DRW_DBG(" bytes\n"); + dwgCompressor comp; + comp.decompress18(cData, oData, pi.cSize, pi.uSize); + delete[]cData; + } + return true; +} + +bool dwgReader18::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader18::readMetaData\n"); + if (! fileBuf->setPosition(11)) + return false; + maintenanceVersion = fileBuf->getRawChar8(); + DRW_DBG("maintenance verion= "); DRW_DBGH(maintenanceVersion); + DRW_DBG("\nbyte at 0x0C= "); DRW_DBGH(fileBuf->getRawChar8()); + previewImagePos = fileBuf->getRawLong32(); //+ page header size (0x20). + DRW_DBG("\npreviewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + DRW_DBG("\napp Dwg version= "); DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); + DRW_DBG("\napp maintenance version= "); DRW_DBGH(fileBuf->getRawChar8()); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + DRW_DBG("\n3 0x00 bytes(seems 0x00, appDwgV & appMaintV) = "); DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); + DRW_DBGH(fileBuf->getRawChar8()); DRW_DBG(", "); DRW_DBGH(fileBuf->getRawChar8()); + securityFlags = fileBuf->getRawLong32(); + DRW_DBG("\nsecurity flags= "); DRW_DBG(securityFlags); + // UNKNOWN SECTION 4 bytes + duint32 uk = fileBuf->getRawLong32(); + DRW_DBG("\nUNKNOWN SECTION ( 4 bytes) = "); DRW_DBG(uk); + duint32 sumInfoAddr = fileBuf->getRawLong32(); + DRW_DBG("\nsummary Info Address= "); DRW_DBG(sumInfoAddr); + duint32 vbaAdd = fileBuf->getRawLong32(); + DRW_DBG("\nVBA address= "); DRW_DBGH(vbaAdd); + DRW_DBG("\npos 0x28 are 0x00000080= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\n"); + return true; +} + +bool dwgReader18::readFileHeader() { + + if (! fileBuf->setPosition(0x80)) + return false; + +// genMagicNumber(); DBG("\n"); DBG("\n"); + DRW_DBG("Encripted Header Data=\n"); + duint8 byteStr[0x6C]; + int size =0x6C; + for (int i=0, j=0; i< 0x6C;i++) { + duint8 ch = fileBuf->getRawChar8(); + DRW_DBGH(ch); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + byteStr[i] = DRW_magicNum18[i] ^ ch; + } + DRW_DBG("\n"); + +// size =0x6C; + DRW_DBG("Decripted Header Data=\n"); + for (int i=0, j = 0; i< size;i++) { + DRW_DBGH( (unsigned char)byteStr[i]); + if (j == 15) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } + dwgBuffer buff(byteStr, 0x6C, &decoder); + std::string name = reinterpret_cast(byteStr); + DRW_DBG("\nFile ID string (AcFssFcAJMB)= "); DRW_DBG(name.c_str()); + //ID string + NULL = 12 + buff.setPosition(12); + DRW_DBG("\n0x00 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x6c long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x04 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nRoot tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLowermost left tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLowermost right tree node gap= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nUnknown long (1)= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLast section page Id= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nLast section page end address 64b= "); DRW_DBGH(buff.getRawLong64()); + DRW_DBG("\nStart of second header data address 64b= "); DRW_DBGH(buff.getRawLong64()); + DRW_DBG("\nGap amount= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nSection page amount= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x20 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x80 long= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\n0x40 long= "); DRW_DBGH(buff.getRawLong32()); + dint32 secPageMapId = buff.getRawLong32(); + DRW_DBG("\nSection Page Map Id= "); DRW_DBGH(secPageMapId); + duint64 secPageMapAddr = buff.getRawLong64()+0x100; + DRW_DBG("\nSection Page Map address 64b= "); DRW_DBGH(secPageMapAddr); + DRW_DBG("\nSection Page Map address 64b dec= "); DRW_DBG(secPageMapAddr); + duint32 secMapId = buff.getRawLong32(); + DRW_DBG("\nSection Map Id= "); DRW_DBGH(secMapId); + DRW_DBG("\nSection page array size= "); DRW_DBGH(buff.getRawLong32()); + DRW_DBG("\nGap array size= "); DRW_DBGH(buff.getRawLong32()); + //TODO: verify CRC + DRW_DBG("\nCRC32= "); DRW_DBGH(buff.getRawLong32()); + for (duint8 i = 0x68; i < 0x6c; ++i) + byteStr[i] = '\0'; +// byteStr[i] = '\0'; + duint32 crcCalc = buff.crc32(0x00,0,0x6C); + DRW_DBG("\nCRC32 calculated= "); DRW_DBGH(crcCalc); + + DRW_DBG("\nEnd Encrypted Data. Reads 0x14 bytes, equal to magic number:\n"); + for (int i=0, j=0; i< 0x14;i++) { + DRW_DBG("magic num: "); DRW_DBGH( (unsigned char)DRW_magicNumEnd18[i]); + DRW_DBG(",read "); DRW_DBGH( (unsigned char)fileBuf->getRawChar8()); + if (j == 3) { + DRW_DBG("\n"); + j = 0; + } else { + DRW_DBG(", "); + j++; + } + } +// At this point are parsed the first 256 bytes + DRW_DBG("\nJump to Section Page Map address: "); DRW_DBGH(secPageMapAddr); + + if (! fileBuf->setPosition(secPageMapAddr)) + return false; + duint32 pageType = fileBuf->getRawLong32(); + DRW_DBG("\nSection page type= "); DRW_DBGH(pageType); + duint32 decompSize = fileBuf->getRawLong32(); + DRW_DBG("\nDecompressed size= "); DRW_DBG(decompSize); DRW_DBG(", "); DRW_DBGH(decompSize); + if (pageType != 0x41630e3b){ + //bad page type, ends + DRW_DBG("Warning, bad page type, was expected 0x41630e3b instead of"); DRW_DBGH(pageType); DRW_DBG("\n"); + return false; + } + duint8 *tmpDecompSec = new duint8[decompSize]; + parseSysPage(tmpDecompSec, decompSize); + +//parses "Section page map" decompresed data + dwgBuffer buff2(tmpDecompSec, decompSize, &decoder); + duint32 address = 0x100; + //stores temporaly info of all pages: + std::mapsectionPageMapTmp; + + for (unsigned int i = 0; i < decompSize;) { + dint32 id = buff2.getRawLong32();//RLZ bad can be +/- + duint32 size = buff2.getRawLong32(); + i += 8; + DRW_DBG("Page num= "); DRW_DBG(id); DRW_DBG(" size= "); DRW_DBGH(size); + DRW_DBG(" address= "); DRW_DBGH(address); DRW_DBG("\n"); + //TODO num can be negative indicating gap +// duint64 ind = id > 0 ? id : -id; + if (id < 0){ + DRW_DBG("Parent= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG("\nLeft= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG(", Right= "); DRW_DBG(buff2.getRawLong32()); + DRW_DBG(", 0x00= ");DRW_DBGH(buff2.getRawLong32()); DRW_DBG("\n"); + i += 16; + } + + sectionPageMapTmp[id] = dwgPageInfo(id, address, size); + address += size; + } + delete[]tmpDecompSec; + + DRW_DBG("\n*** dwgReader18: Processing Data Section Map ***\n"); + dwgPageInfo sectionMap = sectionPageMapTmp[secMapId]; + if (!fileBuf->setPosition(sectionMap.address)) + return false; + pageType = fileBuf->getRawLong32(); + DRW_DBG("\nSection page type= "); DRW_DBGH(pageType); + decompSize = fileBuf->getRawLong32(); + DRW_DBG("\nDecompressed size= "); DRW_DBG(decompSize); DRW_DBG(", "); DRW_DBGH(decompSize); + if (pageType != 0x4163003b){ + //bad page type, ends + DRW_DBG("Warning, bad page type, was expected 0x4163003b instead of"); DRW_DBGH(pageType); DRW_DBG("\n"); + return false; + } + tmpDecompSec = new duint8[decompSize]; + parseSysPage(tmpDecompSec, decompSize); + +//reads sections: + DRW_DBG("\n*** dwgReader18: reads sections:"); + dwgBuffer buff3(tmpDecompSec, decompSize, &decoder); + duint32 numDescriptions = buff3.getRawLong32(); + DRW_DBG("\nnumDescriptions (sections)= "); DRW_DBG(numDescriptions); + DRW_DBG("\n0x02 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\n0x00007400 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\n0x00 long= "); DRW_DBGH(buff3.getRawLong32()); + DRW_DBG("\nunknown long (numDescriptions?)= "); DRW_DBG(buff3.getRawLong32()); DRW_DBG("\n"); + + for (unsigned int i = 0; i < numDescriptions; i++) { + dwgSectionInfo secInfo; + secInfo.size = buff3.getRawLong64(); + DRW_DBG("\nSize of section= "); DRW_DBGH(secInfo.size); + secInfo.pageCount = buff3.getRawLong32(); + DRW_DBG("\nPage count= "); DRW_DBGH(secInfo.pageCount); + secInfo.maxSize = buff3.getRawLong32(); + DRW_DBG("\nMax Decompressed Size= "); DRW_DBGH(secInfo.maxSize); + DRW_DBG("\nunknown long= "); DRW_DBGH(buff3.getRawLong32()); + secInfo.compresed = buff3.getRawLong32(); + DRW_DBG("\nis Compressed? 1:no, 2:yes= "); DRW_DBGH(secInfo.compresed); + secInfo.Id = buff3.getRawLong32(); + DRW_DBG("\nSection Id= "); DRW_DBGH(secInfo.Id); + secInfo.encrypted = buff3.getRawLong32(); + //encrypted (doc: 0 no, 1 yes, 2 unkn) on read: objects 0 and encrypted yes + DRW_DBG("\nEncrypted= "); DRW_DBGH(secInfo.encrypted); + duint8 nameCStr[64]; + buff3.getBytes(nameCStr, 64); + secInfo.name = reinterpret_cast(nameCStr); + DRW_DBG("\nSection std::Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + for (unsigned int i = 0; i < secInfo.pageCount; i++){ + duint32 pn = buff3.getRawLong32(); + dwgPageInfo pi = sectionPageMapTmp[pn]; //get a copy + DRW_DBG(" reading pag num = "); DRW_DBGH(pn); + pi.dataSize = buff3.getRawLong32(); + pi.startOffset = buff3.getRawLong64(); + secInfo.pages[pn]= pi;//complete copy in secInfo + DRW_DBG("\n Page number= "); DRW_DBGH(secInfo.pages[pn].Id); + DRW_DBG("\n size in file= "); DRW_DBGH(secInfo.pages[pn].size); + DRW_DBG("\n address in file= "); DRW_DBGH(secInfo.pages[pn].address); + DRW_DBG("\n Data size= "); DRW_DBGH(secInfo.pages[pn].dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(secInfo.pages[pn].startOffset); DRW_DBG("\n"); + } + //do not save empty section + if (!secInfo.name.empty()) { + DRW_DBG("Saved section Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + sections[secEnum::getEnum(secInfo.name)] = secInfo; + } + } + delete[]tmpDecompSec; + + if (! fileBuf->isGood()) + return false; + DRW_DBG("\ndwgReader18::readFileHeader END\n\n"); + return true; +} + +bool dwgReader18::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader18::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + dwgBuffer dataBuf(objData, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&dataBuf, secEnum::HEADER, true); + if (version == DRW::AC1018){ + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &dataBuf); + } else { + dwgBuffer handleBuf(objData, si.size, &decoder); + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &handleBuf); + } + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + } + return ret; +} + + +bool dwgReader18::readDwgClasses(){ + DRW_DBG("\ndwgReader18::readDwgClasses\n"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + DRW_DBG("classes section sentinel= "); + checkSentinel(&dataBuf, secEnum::CLASSES, true); + + duint32 size = dataBuf.getRawLong32(); + DRW_DBG("\ndata size in bytes "); DRW_DBG(size); + if (version > DRW::AC1021 && maintenanceVersion > 3) { //2010+ + duint32 hSize = dataBuf.getRawLong32(); + DRW_DBG("\n2010+ & MV> 3, higth 32b: "); DRW_DBG(hSize); + } + duint32 bitSize = 0; + if (version > DRW::AC1021) {//2007+ + bitSize = dataBuf.getRawLong32(); + DRW_DBG("\ntotal size in bits "); DRW_DBG(bitSize); +} + duint32 maxClassNum = dataBuf.getBitShort(); + DRW_DBG("\nMaximum class number "); DRW_DBG(maxClassNum); + DRW_DBG("\nRc 1 "); DRW_DBG(dataBuf.getRawChar8()); + DRW_DBG("\nRc 2 "); DRW_DBG(dataBuf.getRawChar8()); + DRW_DBG("\nBit "); DRW_DBG(dataBuf.getBit()); + + /*******************************/ + dwgBuffer *strBuf = &dataBuf; + dwgBuffer strBuff(objData, uncompSize, &decoder); + //prepare string stream for 2007+ + if (version > DRW::AC1021) {//2007+ + strBuf = &strBuff; + duint32 strStartPos = bitSize+191;//size in bits + 24 bytes (sn+size+hSize) - 1 bit (endbit) + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + DRW_DBG("\nendBit "); DRW_DBG(strBuff.getBit()); + strStartPos -= 16;//decrement 16 bits + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + duint32 strDataSize = strBuff.getRawShort16(); + DRW_DBG("\nstrDataSize: "); DRW_DBG(strDataSize); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + duint32 hiSize = strBuff.getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + } + + /*******************************/ + + duint32 endDataPos = maxClassNum-499; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + for (duint32 i= 0; iparseDwg(version, &dataBuf, strBuf); + classesmap[cl->classNum] = cl; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + } + DRW_DBG("\nend classes data buff.getPosition: "); DRW_DBG(dataBuf.getPosition()); + DRW_DBG("\nend classes data buff.getBitPos: "); DRW_DBG(dataBuf.getBitPos()); + DRW_DBG("\nend classes strings buff.getPosition: "); DRW_DBG(strBuf->getPosition()); + DRW_DBG("\nend classes strings buff.getBitPos: "); DRW_DBG(strBuf->getBitPos()); + +/***************/ + + strBuf->setPosition(strBuf->getPosition()+1);//skip remaining bits + DRW_DBG("\nCRC: "); DRW_DBGH(strBuf->getRawShort16()); + if (version > DRW::AC1018){ + DRW_DBG("\nunknown CRC: "); DRW_DBGH(strBuf->getRawShort16()); + } + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(strBuf, secEnum::CLASSES, false); + + ret = strBuf->isGood(); + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + } + return ret; +} + + +/*********** objects map ************************/ +/** Note: object map are split in sections with max size 2035? + * heach section are 2 bytes size + data bytes + 2 bytes crc + * size value are data bytes + 2 and to calculate crc are used + * 2 bytes size + data bytes + * last section are 2 bytes size + 2 bytes crc (size value always 2) +**/ +bool dwgReader18::readDwgHandles() { + DRW_DBG("\ndwgReader18::readDwgHandles\n"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + ret = dwgReader::readDwgHandles(&dataBuf, 0, si.size); + } + //Cleanup: global store for uncompressed data of all pages + if (objData != NULL){ + delete[] objData; + objData = NULL; + uncompSize = 0; + } + return ret; +} + + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader18::readDwgTables(DRW_Header& hdr) { + DRW_DBG("\ndwgReader18::readDwgTables\n"); + dwgSectionInfo si = sections[secEnum::OBJECTS]; + + if (si.Id<0)//not found, ends + return false; + bool ret = parseDataPage(si/*, objData*/); + //global store for uncompressed data of all pages + uncompSize=si.size; + if (ret) { + + dwgBuffer dataBuf(objData, uncompSize, &decoder); + + ret = dwgReader::readDwgTables(hdr, &dataBuf); + + } + //Do not delete objData in this point, needed in the remaining code + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader18.h b/extlib/libdxfrw/intern/dwgreader18.h new file mode 100644 index 0000000..f814096 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader18.h @@ -0,0 +1,99 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER18_H +#define DWGREADER18_H + +#include +#include +#include "dwgreader.h" +//#include "../drw_textcodec.h" +#include "dwgbuffer.h" + +static const int DRW_magicNum18[] = { + 0x29, 0x23, 0xbe, 0x84, 0xe1, 0x6c, 0xd6, 0xae, + 0x52, 0x90, 0x49, 0xf1, 0xf1, 0xbb, 0xe9, 0xeb, + 0xb3, 0xa6, 0xdb, 0x3c, 0x87, 0x0c, 0x3e, 0x99, + 0x24, 0x5e, 0x0d, 0x1c, 0x06, 0xb7, 0x47, 0xde, + 0xb3, 0x12, 0x4d, 0xc8, 0x43, 0xbb, 0x8b, 0xa6, + 0x1f, 0x03, 0x5a, 0x7d, 0x09, 0x38, 0x25, 0x1f, + 0x5d, 0xd4, 0xcb, 0xfc, 0x96, 0xf5, 0x45, 0x3b, + 0x13, 0x0d, 0x89, 0x0a, 0x1c, 0xdb, 0xae, 0x32, + 0x20, 0x9a, 0x50, 0xee, 0x40, 0x78, 0x36, 0xfd, + 0x12, 0x49, 0x32, 0xf6, 0x9e, 0x7d, 0x49, 0xdc, + 0xad, 0x4f, 0x14, 0xf2, 0x44, 0x40, 0x66, 0xd0, + 0x6b, 0xc4, 0x30, 0xb7, 0x32, 0x3b, 0xa1, 0x22, + 0xf6, 0x22, 0x91, 0x9d, 0xe1, 0x8b, 0x1f, 0xda, + 0xb0, 0xca, 0x99, 0x02 +}; + +static const int DRW_magicNumEnd18[] = { + 0xf8, 0x46, 0x6a, 0x04, 0x96, 0x73, 0x0e, 0xd9, + 0x16, 0x2f, 0x67, 0x68, 0xd4, 0xf7, 0x4a, 0x4a, + 0xd0, 0x57, 0x68, 0x76}; + +class dwgReader18 : public dwgReader { +public: + dwgReader18(std::istream *stream, dwgR *p):dwgReader(stream, p){ + objData = NULL; + } + virtual ~dwgReader18(){ + if (objData != NULL) + delete[] objData; + } + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } + +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// bool ret = true; +// return ret; +// } + +protected: + duint8 *objData; + duint64 uncompSize; + +private: + void genMagicNumber(); +// dwgBuffer* bufObj; + void parseSysPage(duint8 *decompSec, duint32 decompSize); //called: Section page map: 0x41630e3b + bool parseDataPage(dwgSectionInfo si/*, duint8 *dData*/); //called ???: Section map: 0x4163003b + duint32 checksum(duint32 seed, duint8* data, duint32 sz); + +private: +duint32 securityFlags; +}; + +#endif // DWGREADER18_H diff --git a/extlib/libdxfrw/intern/dwgreader21.cpp b/extlib/libdxfrw/intern/dwgreader21.cpp new file mode 100644 index 0000000..9d4f23c --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader21.cpp @@ -0,0 +1,487 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader21.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + +bool dwgReader21::readMetaData() { + version = parent->getVersion(); + decoder.setVersion(version, false); + DRW_DBG("dwgReader21::readFileHeader()\n"); + DRW_DBG("dwgReader21::parsing metadata\n"); + if (! fileBuf->setPosition(11)) + return false; + maintenanceVersion = fileBuf->getRawChar8(); + DRW_DBG("maintenance verion= "); DRW_DBGH(maintenanceVersion); + DRW_DBG("\nbyte at 0x0C= "); DRW_DBG(fileBuf->getRawChar8()); + previewImagePos = fileBuf->getRawLong32(); + DRW_DBG("previewImagePos (seekerImageData) = "); DRW_DBG(previewImagePos); + DRW_DBG("\n\napp writer version= "); DRW_DBGH(fileBuf->getRawChar8()); + DRW_DBG("\napp writer maintenance version= "); DRW_DBGH(fileBuf->getRawChar8()); + duint16 cp = fileBuf->getRawShort16(); + DRW_DBG("\ncodepage= "); DRW_DBG(cp); + if (cp == 30) + decoder.setCodePage("ANSI_1252", false); + /* UNKNOUWN SECTION 2 bytes*/ + DRW_DBG("\nUNKNOWN SECTION= "); DRW_DBG(fileBuf->getRawShort16()); + DRW_DBG("\nUNKNOUWN SECTION 3b= "); DRW_DBG(fileBuf->getRawChar8()); + duint32 secType = fileBuf->getRawLong32(); + DRW_DBG("\nsecurity type flag= "); DRW_DBGH(secType); + /* UNKNOWN2 SECTION 4 bytes*/ + DRW_DBG("\nUNKNOWN SECTION 4bytes= "); DRW_DBG(fileBuf->getRawLong32()); + + DRW_DBG("\nSummary info address= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nVBA project address= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\n0x00000080 32b= "); DRW_DBGH(fileBuf->getRawLong32()); + DRW_DBG("\nApp info address= "); DRW_DBGH(fileBuf->getRawLong32()); + //current position are 0x30 from here to 0x80 are undocumented + DRW_DBG("\nAnother address? = "); DRW_DBGH(fileBuf->getRawLong32()); + return true; +} + +bool dwgReader21::parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData){ + //round to 8 + duint64 alsize = (sizeCompressed + 7) &(-8); + //minimum RS chunk: + duint32 chunks = (((alsize * correctionFactor)+238)/239); + duint64 fpsize = chunks * 255; + + if (! fileBuf->setPosition(offset)) + return false; + duint8 *tmpDataRaw = new duint8[fpsize]; + fileBuf->getBytes(tmpDataRaw, fpsize); + duint8 *tmpDataRS = new duint8[fpsize]; + dwgRSCodec::decode239I(tmpDataRaw, tmpDataRS, fpsize/255); + dwgCompressor::decompress21(tmpDataRS, decompData, sizeCompressed, sizeUncompressed); + delete[]tmpDataRaw; + delete[]tmpDataRS; + return true; +} + +bool dwgReader21::parseDataPage(dwgSectionInfo si, duint8 *dData){ + DRW_DBG("parseDataPage, section size: "); DRW_DBG(si.size); + for (std::map::iterator it=si.pages.begin(); it!=si.pages.end(); ++it){ + dwgPageInfo pi = it->second; + if (!fileBuf->setPosition(pi.address)) + return false; + + duint8 *tmpPageRaw = new duint8[pi.size]; + fileBuf->getBytes(tmpPageRaw, pi.size); + #ifdef DRW_DBG_DUMP + DRW_DBG("\nSection OBJECTS raw data=\n"); + for (unsigned int i=0, j=0; i< pi.size;i++) { + DRW_DBGH( (unsigned char)tmpPageRaw[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + duint8 *tmpPageRS = new duint8[pi.size]; + duint8 chunks =pi.size / 255; + dwgRSCodec::decode251I(tmpPageRaw, tmpPageRS, chunks); + #ifdef DRW_DBG_DUMP + DRW_DBG("\nSection OBJECTS RS data=\n"); + for (unsigned int i=0, j=0; i< pi.size;i++) { + DRW_DBGH( (unsigned char)tmpPageRS[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + DRW_DBG("\npage uncomp size: "); DRW_DBG(pi.uSize); DRW_DBG(" comp size: "); DRW_DBG(pi.cSize); + DRW_DBG("\noffset: "); DRW_DBG(pi.startOffset); + duint8 *pageData = dData + pi.startOffset; + dwgCompressor::decompress21(tmpPageRS, pageData, pi.cSize, pi.uSize); + + #ifdef DRW_DBG_DUMP + DRW_DBG("\n\nSection OBJECTS decompresed data=\n"); + for (unsigned int i=0, j=0; i< pi.uSize;i++) { + DRW_DBGH( (unsigned char)pageData[i]); + if (j == 7) { DRW_DBG("\n"); j = 0; + } else { DRW_DBG(", "); j++; } + } DRW_DBG("\n"); + #endif + + delete[]tmpPageRaw; + delete[]tmpPageRS; + } + DRW_DBG("\n"); + return true; +} + +bool dwgReader21::readFileHeader() { + + DRW_DBG("\n\ndwgReader21::parsing file header\n"); + if (! fileBuf->setPosition(0x80)) + return false; + duint8 fileHdrRaw[0x2FD];//0x3D8 + fileBuf->getBytes(fileHdrRaw, 0x2FD); + duint8 fileHdrdRS[0x2CD]; + dwgRSCodec::decode239I(fileHdrRaw, fileHdrdRS, 3); + +#ifdef DRW_DBG_DUMP + DRW_DBG("\ndwgReader21::parsed Reed Solomon decode:\n"); + int j = 0; + for (int i=0, j=0; i<0x2CD; i++){ + DRW_DBGH( (unsigned char)fileHdrdRS[i]); + if (j== 15){ j=0; DRW_DBG("\n"); + } else{ j++; DRW_DBG(", "); } + } DRW_DBG("\n"); +#endif + + dwgBuffer fileHdrBuf(fileHdrdRS, 0x2CD, &decoder); + DRW_DBG("\nCRC 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + DRW_DBG("\nunknown key 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + DRW_DBG("\ncomp data CRC 64b= "); DRW_DBGH(fileHdrBuf.getRawLong64()); + dint32 fileHdrCompLength = fileHdrBuf.getRawLong32(); + DRW_DBG("\ncompr len 4bytes= "); DRW_DBG(fileHdrCompLength); + dint32 fileHdrCompLength2 = fileHdrBuf.getRawLong32(); + DRW_DBG("\nlength2 4bytes= "); DRW_DBG(fileHdrCompLength2); + + int fileHdrDataLength = 0x110; + duint8 *fileHdrData; + if (fileHdrCompLength < 0) { + fileHdrDataLength = fileHdrCompLength * -1; + fileHdrData = new duint8[fileHdrDataLength]; + fileHdrBuf.getBytes(fileHdrData, fileHdrDataLength); + }else { + DRW_DBG("\ndwgReader21:: file header are compresed:\n"); + duint8 *compByteStr = new duint8[fileHdrCompLength]; + fileHdrBuf.getBytes(compByteStr, fileHdrCompLength); + fileHdrData = new duint8[fileHdrDataLength]; + dwgCompressor::decompress21(compByteStr, fileHdrData, fileHdrCompLength, fileHdrDataLength); + delete[] compByteStr; + } + +#ifdef DRW_DBG_DUMP + DRW_DBG("\ndwgReader21::parsed file header:\n"); + for (int i=0, j=0; isectionPageMapTmp; + +// dwgPageInfo *m_pages= new dwgPageInfo[PagesMaxId+1]; + while (PagesMapSizeUncompressed > i ) { + duint64 size = PagesMapBuf.getRawLong64(); + dint64 id = PagesMapBuf.getRawLong64(); + duint64 ind = id > 0 ? id : -id; + i += 16; + + DRW_DBG("Page gap= "); DRW_DBG(id); DRW_DBG(" Page num= "); DRW_DBG(ind); DRW_DBG(" size= "); DRW_DBGH(size); + DRW_DBG(" address= "); DRW_DBGH(address); DRW_DBG("\n"); + sectionPageMapTmp[ind] = dwgPageInfo(ind, address,size); + address += size; + //TODO num can be negative indicating gap +// seek += offset; + } + delete[]PagesMapData; + + DRW_DBG("\n*** dwgReader21: Processing Section Map ***\n"); + duint8 *SectionsMapData = new duint8[SectionsMapSizeUncompressed]; + dwgPageInfo sectionMap = sectionPageMapTmp[SectionsMapId]; + ret = parseSysPage(SectionsMapSizeCompressed, SectionsMapSizeUncompressed, SectionsMapCorrectionFactor, sectionMap.address, SectionsMapData); + if (!ret) + return false; + +//reads sections: + //Note: compressed value are not stored in file then, commpresed field are use to store + // encoding value + dwgBuffer SectionsMapBuf(SectionsMapData, SectionsMapSizeUncompressed, &decoder); + duint8 nextId =1; + while(SectionsMapBuf.getPosition() < SectionsMapBuf.size()){ + dwgSectionInfo secInfo; + secInfo.size = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nSize of section (data size)= "); DRW_DBGH(secInfo.size); + secInfo.maxSize = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nMax Decompressed Size= "); DRW_DBGH(secInfo.maxSize); + secInfo.encrypted = SectionsMapBuf.getRawLong64(); + //encrypted (doc: 0 no, 1 yes, 2 unkn) on read: objects 0 and encrypted yes + DRW_DBG("\nencription= "); DRW_DBGH(secInfo.encrypted); + DRW_DBG("\nHashCode = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + duint64 SectionNameLength = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nSectionNameLength = "); DRW_DBG(SectionNameLength); + DRW_DBG("\nUnknown = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + secInfo.compresed = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nEncoding (compresed) = "); DRW_DBGH(secInfo.compresed); + secInfo.pageCount = SectionsMapBuf.getRawLong64(); + DRW_DBG("\nPage count= "); DRW_DBGH(secInfo.pageCount); + secInfo.name = SectionsMapBuf.getUCSStr(SectionNameLength); + DRW_DBG("\nSection name = "); DRW_DBG(secInfo.name); DRW_DBG("\n"); + + for (unsigned int i=0; i< secInfo.pageCount; i++){ + duint64 po = SectionsMapBuf.getRawLong64(); + duint32 ds = SectionsMapBuf.getRawLong64(); + duint32 pn = SectionsMapBuf.getRawLong64(); + DRW_DBG(" pag Id = "); DRW_DBGH(pn); DRW_DBG(" data size = "); DRW_DBGH(ds); + dwgPageInfo pi = sectionPageMapTmp[pn]; //get a copy + pi.dataSize = ds; + pi.startOffset = po; + pi.uSize = SectionsMapBuf.getRawLong64(); + pi.cSize = SectionsMapBuf.getRawLong64(); + secInfo.pages[pn]= pi;//complete copy in secInfo + DRW_DBG("\n Page number= "); DRW_DBGH(secInfo.pages[pn].Id); + DRW_DBG("\n address in file= "); DRW_DBGH(secInfo.pages[pn].address); + DRW_DBG("\n size in file= "); DRW_DBGH(secInfo.pages[pn].size); + DRW_DBG("\n Data size= "); DRW_DBGH(secInfo.pages[pn].dataSize); + DRW_DBG("\n Start offset= "); DRW_DBGH(secInfo.pages[pn].startOffset); + DRW_DBG("\n Page uncompressed size = "); DRW_DBGH(secInfo.pages[pn].uSize); + DRW_DBG("\n Page compressed size = "); DRW_DBGH(secInfo.pages[pn].cSize); + + DRW_DBG("\n Page checksum = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); + DRW_DBG("\n Page CRC = "); DRW_DBGH(SectionsMapBuf.getRawLong64()); DRW_DBG("\n"); + } + + if (!secInfo.name.empty()) { + secInfo.Id = nextId++; + DRW_DBG("Saved section Name= "); DRW_DBG( secInfo.name.c_str() ); DRW_DBG("\n"); + sections[secEnum::getEnum(secInfo.name)] = secInfo; + } + } + delete[]SectionsMapData; + + if (! fileBuf->isGood()) + return false; + + DRW_DBG("\ndwgReader21::readFileHeader END\n"); + return true; +} + +bool dwgReader21::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("\ndwgReader21::readDwgHeader\n"); + dwgSectionInfo si = sections[secEnum::HEADER]; + if (si.Id<0)//not found, ends + return false; + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpHeaderData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpHeaderData); + if (!ret) { + delete[]tmpHeaderData; + return ret; + } + + dwgBuffer dataBuf(tmpHeaderData, si.size, &decoder); + dwgBuffer handleBuf(tmpHeaderData, si.size, &decoder); + DRW_DBG("Header section sentinel= "); + checkSentinel(&dataBuf, secEnum::HEADER, true); + ret = dwgReader::readDwgHeader(hdr, &dataBuf, &handleBuf); + delete[]tmpHeaderData; + return ret; +} + +bool dwgReader21::readDwgClasses(){ + DRW_DBG("\ndwgReader21::readDwgClasses"); + dwgSectionInfo si = sections[secEnum::CLASSES]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpClassesData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpClassesData); + if (!ret) + return ret; + + dwgBuffer buff(tmpClassesData, si.size, &decoder); + DRW_DBG("classes section sentinel= "); + checkSentinel(&buff, secEnum::CLASSES, true); + + duint32 size = buff.getRawLong32(); + DRW_DBG("\ndata size in bytes "); DRW_DBG(size); + + duint32 bitSize = buff.getRawLong32(); + DRW_DBG("\ntotal size in bits "); DRW_DBG(bitSize); + + duint32 maxClassNum = buff.getBitShort(); + DRW_DBG("\nMaximum class number "); DRW_DBG(maxClassNum); + DRW_DBG("\nRc 1 "); DRW_DBG(buff.getRawChar8()); + DRW_DBG("\nRc 2 "); DRW_DBG(buff.getRawChar8()); + DRW_DBG("\nBit "); DRW_DBG(buff.getBit()); + + /*******************************/ + //prepare string stream + dwgBuffer strBuff(tmpClassesData, si.size, &decoder); + duint32 strStartPos = bitSize + 159;//size in bits + 20 bytes (sn+size) - 1 bit (endbit) + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + DRW_DBG("\nendBit "); DRW_DBG(strBuff.getBit()); + strStartPos -= 16;//decrement 16 bits + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + duint32 strDataSize = strBuff.getRawShort16(); + DRW_DBG("\nstrDataSize: "); DRW_DBG(strDataSize); + if (strDataSize & 0x8000) { + strStartPos -= 16;//decrement 16 bits + strDataSize &= 0x7FFF; //strip 0x8000; + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + duint32 hiSize = strBuff.getRawShort16(); + strDataSize |= (hiSize << 15); + } + strStartPos -= strDataSize; + DRW_DBG("\nstrStartPos: "); DRW_DBG(strStartPos); + strBuff.setPosition(strStartPos >> 3); + strBuff.setBitPos(strStartPos & 7); + DRW_DBG("\nclasses strings buff.getPosition: "); DRW_DBG(strBuff.getPosition()); + DRW_DBG("\nclasses strings buff.getBitPos: "); DRW_DBG(strBuff.getBitPos()); + + + /*******************************/ + + duint32 endDataPos = maxClassNum-499; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(buff.getPosition()); + for (duint32 i= 0; iparseDwg(version, &buff, &strBuff); + classesmap[cl->classNum] = cl; + DRW_DBG("\nbuff.getPosition: "); DRW_DBG(buff.getPosition()); + } + DRW_DBG("\nend classes data buff.getPosition: "); DRW_DBG(buff.getPosition()); + DRW_DBG("\nend classes data buff.getBitPos: "); DRW_DBG(buff.getBitPos()); + + buff.setPosition(size+20);//sizeVal+sn+32bSize + DRW_DBG("\nCRC: "); DRW_DBGH(buff.getRawShort16()); + DRW_DBG("\nclasses section end sentinel= "); + checkSentinel(&buff, secEnum::CLASSES, true); + delete[]tmpClassesData; + return buff.isGood(); +} + + +bool dwgReader21::readDwgHandles(){ + DRW_DBG("\ndwgReader21::readDwgHandles"); + dwgSectionInfo si = sections[secEnum::HANDLES]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + duint8 *tmpHandlesData = new duint8[si.size]; + bool ret = dwgReader21::parseDataPage(si, tmpHandlesData); + if (!ret) + return ret; + + dwgBuffer dataBuf(tmpHandlesData, si.size, &decoder); + + ret = dwgReader::readDwgHandles(&dataBuf, 0, si.size); + delete[]tmpHandlesData; + return ret; +} + +/*********** objects ************************/ +/** + * Reads all the object referenced in the object map section of the DWG file + * (using their object file offsets) + */ +bool dwgReader21::readDwgTables(DRW_Header& hdr) { + DRW_DBG("\ndwgReader21::readDwgTables\n"); + dwgSectionInfo si = sections[secEnum::OBJECTS]; + if (si.Id<0)//not found, ends + return false; + + DRW_DBG("\nprepare section of size "); DRW_DBG(si.size);DRW_DBG("\n"); + dataSize = si.size; + objData = new duint8 [dataSize]; + bool ret = dwgReader21::parseDataPage(si, objData); + if (!ret) + return ret; + + DRW_DBG("readDwgTables total data size= "); DRW_DBG(dataSize); DRW_DBG("\n"); + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgTables(hdr, &dataBuf); + + return ret; +} + + +bool dwgReader21::readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + + return false; +} diff --git a/extlib/libdxfrw/intern/dwgreader21.h b/extlib/libdxfrw/intern/dwgreader21.h new file mode 100644 index 0000000..f95c77a --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader21.h @@ -0,0 +1,65 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER21_H +#define DWGREADER21_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader.h" + +//reader for AC1021 aka v2007, chapter 5 +class dwgReader21 : public dwgReader { +public: + dwgReader21(std::istream *stream, dwgR *p):dwgReader(stream, p){ + objData = NULL; + dataSize = 0; + } + virtual ~dwgReader21(){ + if (objData != NULL) + delete[] objData; + } + bool readMetaData(); + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); + bool readDwgHandles(); + bool readDwgTables(DRW_Header& hdr); + bool readDwgBlocks(DRW_Interface& intfa); + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, dataSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } +//bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// return false; +//} + +private: + bool parseSysPage(duint64 sizeCompressed, duint64 sizeUncompressed, duint64 correctionFactor, duint64 offset, duint8 *decompData); + bool parseDataPage(dwgSectionInfo si, duint8 *dData); + + duint8 *objData; + duint64 dataSize; + +}; + +#endif // DWGREADER21_H diff --git a/extlib/libdxfrw/intern/dwgreader24.cpp b/extlib/libdxfrw/intern/dwgreader24.cpp new file mode 100644 index 0000000..295032c --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader24.cpp @@ -0,0 +1,43 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader24.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + + +bool dwgReader24::readFileHeader() { + DRW_DBG("dwgReader24::readFileHeader\n"); + bool ret = dwgReader18::readFileHeader(); + DRW_DBG("dwgReader24::readFileHeader END\n"); + return ret; +} + +bool dwgReader24::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader24::readDwgHeader\n"); + bool ret = dwgReader18::readDwgHeader(hdr); + DRW_DBG("dwgReader24::readDwgHeader END\n"); + return ret; +} + +bool dwgReader24::readDwgClasses(){ + DRW_DBG("\ndwgReader24::readDwgClasses"); + bool ret = dwgReader18::readDwgClasses(); + DRW_DBG("\ndwgReader24::readDwgClasses END\n"); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader24.h b/extlib/libdxfrw/intern/dwgreader24.h new file mode 100644 index 0000000..e5fc43a --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader24.h @@ -0,0 +1,56 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER24_H +#define DWGREADER24_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader18.h" + +class dwgReader24 : public dwgReader18 { +public: + dwgReader24(std::istream *stream, dwgR *p):dwgReader18(stream, p){ } + virtual ~dwgReader24(){} + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); +// bool readDwgHandles(){return false;} +// bool readDwgTables(){return false;} + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } + +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// DRW_UNUSED(obj); +// DRW_UNUSED(intfa); +// return false;} +}; + +#endif // DWGREADER24_H diff --git a/extlib/libdxfrw/intern/dwgreader27.cpp b/extlib/libdxfrw/intern/dwgreader27.cpp new file mode 100644 index 0000000..dea68f6 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader27.cpp @@ -0,0 +1,43 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "drw_dbg.h" +#include "dwgreader27.h" +#include "drw_textcodec.h" +#include "../libdwgr.h" + + +bool dwgReader27::readFileHeader() { + DRW_DBG("dwgReader27::readFileHeader\n"); + bool ret = dwgReader18::readFileHeader(); + DRW_DBG("dwgReader27::readFileHeader END\n"); + return ret; +} + +bool dwgReader27::readDwgHeader(DRW_Header& hdr){ + DRW_DBG("dwgReader27::readDwgHeader\n"); + bool ret = dwgReader18::readDwgHeader(hdr); + DRW_DBG("dwgReader27::readDwgHeader END\n"); + return ret; +} + +bool dwgReader27::readDwgClasses(){ + DRW_DBG("dwgReader27::readDwgClasses"); + bool ret = dwgReader18::readDwgClasses(); + DRW_DBG("\ndwgReader27::readDwgClasses END\n"); + return ret; +} diff --git a/extlib/libdxfrw/intern/dwgreader27.h b/extlib/libdxfrw/intern/dwgreader27.h new file mode 100644 index 0000000..32c67f6 --- /dev/null +++ b/extlib/libdxfrw/intern/dwgreader27.h @@ -0,0 +1,55 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DWGREADER27_H +#define DWGREADER27_H + +#include +#include +#include "drw_textcodec.h" +#include "dwgbuffer.h" +#include "dwgreader18.h" + +class dwgReader27 : public dwgReader18 { +public: + dwgReader27(std::istream *stream, dwgR *p):dwgReader18(stream, p){ } + virtual ~dwgReader27(){} + bool readFileHeader(); + bool readDwgHeader(DRW_Header& hdr); + bool readDwgClasses(); +// bool readDwgHandles(){return false;} +// bool readDwgTables(){return false;} + bool readDwgBlocks(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgBlocks(intfa, &dataBuf); + return ret; + } + virtual bool readDwgEntities(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgEntities(intfa, &dataBuf); + return ret; + } + virtual bool readDwgObjects(DRW_Interface& intfa){ + bool ret = true; + dwgBuffer dataBuf(objData, uncompSize, &decoder); + ret = dwgReader::readDwgObjects(intfa, &dataBuf); + return ret; + } +// bool readDwgEntity(objHandle& obj, DRW_Interface& intfa){ +// DRW_UNUSED(obj); +// DRW_UNUSED(intfa); +// return false;} +}; + +#endif // DWGREADER21_H diff --git a/extlib/libdxfrw/intern/dwgutil.cpp b/extlib/libdxfrw/intern/dwgutil.cpp new file mode 100644 index 0000000..10121cf --- /dev/null +++ b/extlib/libdxfrw/intern/dwgutil.cpp @@ -0,0 +1,694 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include "drw_dbg.h" +#include "dwgutil.h" +#include "rscodec.h" +#include "../libdwgr.h" + +/** utility function + * convert a int to string in hex + **/ +namespace DRW { +std::string toHexStr(int n){ +#if defined(__APPLE__) + char buffer[9]= {'\0'}; + snprintf(buffer,9, "%X", n); + return std::string(buffer); +#else + std::ostringstream Convert; + Convert << std::uppercase << std::hex << n; + return Convert.str(); +#endif +} +} + +/** + * @brief dwgRSCodec::decode239I + * @param in : input data (at least 255*blk bytes) + * @param out : output data (at least 239*blk bytes) + * @param blk number of codewords ( 1 cw == 255 bytes) + */ +void dwgRSCodec::decode239I(unsigned char *in, unsigned char *out, duint32 blk){ + int k=0; + unsigned char data[255]; + RScodec rsc(0x96, 8, 8); //(255, 239) + for (duint32 i=0; i> 2) | (bufC[pos++] << 6); + *ll = (fb & 0x03); + return cont; +} + +duint32 dwgCompressor::longCompressionOffset(){ + duint32 cont = 0; + duint8 ll = bufC[pos++]; + while (ll == 0x00){ + cont += 0xFF; + ll = bufC[pos++]; + } + cont += ll; + return cont; +} + +duint32 dwgCompressor::long20CompressionOffset(){ +// duint32 cont = 0; + duint32 cont = 0x0F; + duint8 ll = bufC[pos++]; + while (ll == 0x00){ +// cont += 0xFF; + ll = bufC[pos++]; + } + cont += ll; + return cont; +} + +duint32 dwgCompressor::litLength18(){ + duint32 cont=0; + duint8 ll = bufC[pos++]; + //no literal length, this byte is next opCode + if (ll > 0x0F) { + pos--; + return 0; + } + + if (ll == 0x00) { + cont = 0x0F; + ll = bufC[pos++]; + while (ll == 0x00){//repeat until ll != 0x00 + cont +=0xFF; + ll = bufC[pos++]; + } + } + cont +=ll; + cont +=3; //already sum 3 + return cont; +} + +void dwgCompressor::decompress18(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize){ + bufC = cbuf; + bufD = dbuf; + sizeC = csize -2; + sizeD = dsize; + DRW_DBG("dwgCompressor::decompress, last 2 bytes: "); + DRW_DBGH(bufC[sizeC]);DRW_DBGH(bufC[sizeC+1]);DRW_DBG("\n"); + sizeC = csize; + + duint32 compBytes; + duint32 compOffset; + duint32 litCount; + + pos=0; //current position in compresed buffer + rpos=0; //current position in resulting decompresed buffer + litCount = litLength18(); + //copy first lileral lenght + for (duint32 i=0; i < litCount; ++i) { + bufD[rpos++] = bufC[pos++]; + } + + while (pos < csize && (rpos < dsize+1)){//rpos < dsize to prevent crash more robust are needed + duint8 oc = bufC[pos++]; //next opcode + if (oc == 0x10){ + compBytes = longCompressionOffset()+ 9; + compOffset = twoByteOffset(&litCount) + 0x3FFF; + if (litCount == 0) + litCount= litLength18(); + } else if (oc > 0x11 && oc< 0x20){ + compBytes = (oc & 0x0F) + 2; + compOffset = twoByteOffset(&litCount) + 0x3FFF; + if (litCount == 0) + litCount= litLength18(); + } else if (oc == 0x20){ + compBytes = longCompressionOffset() + 0x21; + compOffset = twoByteOffset(&litCount); + if (litCount == 0) + litCount= litLength18(); + else + oc = 0x00; + } else if (oc > 0x20 && oc< 0x40){ + compBytes = oc - 0x1E; + compOffset = twoByteOffset(&litCount); + if (litCount == 0) + litCount= litLength18(); + } else if ( oc > 0x3F){ + compBytes = ((oc & 0xF0) >> 4) - 1; + duint8 ll2 = bufC[pos++]; + compOffset = (ll2 << 2) | ((oc & 0x0C) >> 2); + litCount = oc & 0x03; + if (litCount < 1){ + litCount= litLength18();} + } else if (oc == 0x11){ + DRW_DBG("dwgCompressor::decompress, end of input stream, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + return; //end of input stream + } else { //ll < 0x10 + DRW_DBG("WARNING dwgCompressor::decompress, failed, illegal char, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + return; //fails, not valid + } + //copy "compresed data", TODO Needed verify out of bounds + duint32 remaining = sizeD - (litCount+rpos); + if (remaining < compBytes){ + compBytes = remaining; + DRW_DBG("WARNING dwgCompressor::decompress, bad compBytes size, Cpos: "); + DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); + } + for (duint32 i=0, j= rpos - compOffset -1; i < compBytes; i++) { + bufD[rpos++] = bufD[j++]; + } + //copy "uncompresed data", TODO Needed verify out of bounds + for (duint32 i=0; i < litCount; i++) { + bufD[rpos++] = bufC[pos++]; + } + } + DRW_DBG("WARNING dwgCompressor::decompress, bad out, Cpos: ");DRW_DBG(pos);DRW_DBG(", Dpos: ");DRW_DBG(rpos);DRW_DBG("\n"); +} + + +void dwgCompressor::decrypt18Hdr(duint8 *buf, duint32 size, duint32 offset){ + duint8 max = size / 4; + duint32 secMask = 0x4164536b ^ offset; + duint32* pHdr = (duint32*)buf; + for (duint8 j = 0; j < max; j++) + *pHdr++ ^= secMask; +} + +/*void dwgCompressor::decrypt18Data(duint8 *buf, duint32 size, duint32 offset){ + duint8 max = size / 4; + duint32 secMask = 0x4164536b ^ offset; + duint32* pHdr = (duint32*)buf; + for (duint8 j = 0; j < max; j++) + *pHdr++ ^= secMask; +}*/ + +duint32 dwgCompressor::litLength21(duint8 *cbuf, duint8 oc, duint32 *si){ + + duint32 srcIndex=*si; + + duint32 length = oc + 8; + if (length == 0x17) { + duint32 n = cbuf[srcIndex++]; + length += n; + if (n == 0xff) { + do { + n = cbuf[srcIndex++]; + n |= (duint32)(cbuf[srcIndex++] << 8); + length += n; + } while (n == 0xffff); + } + } + + *si = srcIndex; + return length; +} + +void dwgCompressor::decompress21(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize){ + duint32 srcIndex=0; + duint32 dstIndex=0; + duint32 length=0; + duint32 sourceOffset; + duint8 opCode; + + opCode = cbuf[srcIndex++]; + if ((opCode >> 4) == 2){ + srcIndex = srcIndex +2; + length = cbuf[srcIndex++] & 0x07; + } + + while (srcIndex < csize && (dstIndex < dsize+1)){//dstIndex < dsize to prevent crash more robust are needed + if (length == 0) + length = litLength21(cbuf, opCode, &srcIndex); + copyCompBytes21(cbuf, dbuf, length, srcIndex, dstIndex); + srcIndex += length; + dstIndex += length; + if (dstIndex >=dsize) break; //check if last chunk are compresed & terminate + + length = 0; + opCode = cbuf[srcIndex++]; + readInstructions21(cbuf, &srcIndex, &opCode, &sourceOffset, &length); + while (true) { + //prevent crash with corrupted data + if (sourceOffset > dstIndex){ + DRW_DBG("\nWARNING dwgCompressor::decompress21 => sourceOffset> dstIndex.\n"); + DRW_DBG("csize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex); + sourceOffset = dstIndex; + } + //prevent crash with corrupted data + if (length > dsize - dstIndex){ + DRW_DBG("\nWARNING dwgCompressor::decompress21 => length > dsize - dstIndex.\n"); + DRW_DBG("csize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex); + length = dsize - dstIndex; + srcIndex = csize;//force exit + } + sourceOffset = dstIndex-sourceOffset; + for (duint32 i=0; i< length; i++) + dbuf[dstIndex++] = dbuf[sourceOffset+i]; + + length = opCode & 7; + if ((length != 0) || (srcIndex >= csize)) { + break; + } + opCode = cbuf[srcIndex++]; + if ((opCode >> 4) == 0) { + break; + } + if ((opCode >> 4) == 15) { + opCode &= 15; + } + readInstructions21(cbuf, &srcIndex, &opCode, &sourceOffset, &length); + } + } + DRW_DBG("\ncsize = "); DRW_DBG(csize); DRW_DBG(" srcIndex = "); DRW_DBG(srcIndex); + DRW_DBG("\ndsize = "); DRW_DBG(dsize); DRW_DBG(" dstIndex = "); DRW_DBG(dstIndex);DRW_DBG("\n"); +} + +void dwgCompressor::readInstructions21(duint8 *cbuf, duint32 *si, duint8 *oc, duint32 *so, duint32 *l){ + duint32 length; + duint32 srcIndex = *si; + duint32 sourceOffset; + unsigned char opCode = *oc; + switch ((opCode >> 4)) { + case 0: + length = (opCode & 0xf) + 0x13; + sourceOffset = cbuf[srcIndex++]; + opCode = cbuf[srcIndex++]; + length = ((opCode >> 3) & 0x10) + length; + sourceOffset = ((opCode & 0x78) << 5) + 1 + sourceOffset; + break; + case 1: + length = (opCode & 0xf) + 3; + sourceOffset = cbuf[srcIndex++]; + opCode = cbuf[srcIndex++]; + sourceOffset = ((opCode & 0xf8) << 5) + 1 + sourceOffset; + break; + case 2: + sourceOffset = cbuf[srcIndex++]; + sourceOffset = ((cbuf[srcIndex++] << 8) & 0xff00) | sourceOffset; + length = opCode & 7; + if ((opCode & 8) == 0) { + opCode = cbuf[srcIndex++]; + length = (opCode & 0xf8) + length; + } else { + sourceOffset++; + length = (cbuf[srcIndex++] << 3) + length; + opCode = cbuf[srcIndex++]; + length = (((opCode & 0xf8) << 8) + length) + 0x100; + } + break; + default: + length = opCode >> 4; + sourceOffset = opCode & 15; + opCode = cbuf[srcIndex++]; + sourceOffset = (((opCode & 0xf8) << 1) + sourceOffset) + 1; + break; + } + *oc = opCode; + *si = srcIndex; + *so = sourceOffset; + *l = length; +} + + +void dwgCompressor::copyCompBytes21(duint8 *cbuf, duint8 *dbuf, duint32 l, duint32 si, duint32 di){ + duint32 length =l; + duint32 dix = di; + duint32 six = si; + + while (length > 31){ + //in doc: 16-31, 0-15 + for (duint32 i = six+24; i. ** +******************************************************************************/ + +#ifndef DWGUTIL_H +#define DWGUTIL_H + +#include "../drw_base.h" + +namespace DRW { +std::string toHexStr(int n); +} + +class dwgRSCodec { +public: + dwgRSCodec(){} + ~dwgRSCodec(){} + static void decode239I(duint8 *in, duint8 *out, duint32 blk); + static void decode251I(duint8 *in, duint8 *out, duint32 blk); +}; + +class dwgCompressor { +public: + dwgCompressor(){} + ~dwgCompressor(){} + + void decompress18(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize); + static void decrypt18Hdr(duint8 *buf, duint32 size, duint32 offset); +// static void decrypt18Data(duint8 *buf, duint32 size, duint32 offset); + static void decompress21(duint8 *cbuf, duint8 *dbuf, duint32 csize, duint32 dsize); + +private: + duint32 litLength18(); + static duint32 litLength21(duint8 *cbuf, duint8 oc, duint32 *si); + static void copyCompBytes21(duint8 *cbuf, duint8 *dbuf, duint32 l, duint32 si, duint32 di); + static void readInstructions21(duint8 *cbuf, duint32 *si, duint8 *oc, duint32 *so, duint32 *l); + + duint32 longCompressionOffset(); + duint32 long20CompressionOffset(); + duint32 twoByteOffset(duint32 *ll); + + duint8 *bufC; + duint8 *bufD; + duint32 sizeC; + duint32 sizeD; + duint32 pos; + duint32 rpos; + +}; + +class secEnum { +public: + enum DWGSection { + UNKNOWNS, /*!< UNKNOWN section. */ + FILEHEADER, /*!< File Header (in R3-R15*/ + HEADER, /*!< AcDb:Header */ + CLASSES, /*!< AcDb:Classes */ + SUMARYINFO, /*!< AcDb:SummaryInfo */ + PREVIEW, /*!< AcDb:Preview */ + VBAPROY, /*!< AcDb:VBAProject */ + APPINFO, /*!< AcDb:AppInfo */ + FILEDEP, /*!< AcDb:FileDepList */ + REVHISTORY, /*!< AcDb:RevHistory */ + SECURITY, /*!< AcDb:Security */ + OBJECTS, /*!< AcDb:AcDbObjects */ + OBJFREESPACE, /*!< AcDb:ObjFreeSpace */ + TEMPLATE, /*!< AcDb:Template */ + HANDLES, /*!< AcDb:Handles */ + PROTOTYPE, /*!< AcDb:AcDsPrototype_1b */ + AUXHEADER, /*!< AcDb:AuxHeader, in (R13-R15) second file header */ + SIGNATURE, /*!< AcDb:Signature */ + APPINFOHISTORY, /*!< AcDb:AppInfoHistory (in ac1021 may be a renamed section?*/ + EXTEDATA, /*!< Extended Entity Data */ + PROXYGRAPHICS /*!< PROXY ENTITY GRAPHICS */ + }; + + secEnum(){} + ~secEnum(){} + + static DWGSection getEnum(std::string nameSec); +}; + +#endif // DWGUTIL_H diff --git a/extlib/libdxfrw/intern/dxfreader.cpp b/extlib/libdxfrw/intern/dxfreader.cpp new file mode 100644 index 0000000..84f8641 --- /dev/null +++ b/extlib/libdxfrw/intern/dxfreader.cpp @@ -0,0 +1,263 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include "dxfreader.h" +#include "drw_textcodec.h" +#include "drw_dbg.h" + +bool dxfReader::readRec(int *codeData) { +// std::string text; + int code; + + if (!readCode(&code)) + return false; + *codeData = code; + + if (code < 10) + readString(); + else if (code < 60) + readDouble(); + else if (code < 80) + readInt16(); + else if (code > 89 && code < 100) //TODO this is an int 32b + readInt32(); + else if (code == 100 || code == 102 || code == 105) + readString(); + else if (code > 109 && code < 150) //skip not used at the v2012 + readDouble(); + else if (code > 159 && code < 170) //skip not used at the v2012 + readInt64(); + else if (code < 180) + readInt16(); + else if (code > 209 && code < 240) //skip not used at the v2012 + readDouble(); + else if (code > 269 && code < 290) //skip not used at the v2012 + readInt16(); + else if (code < 300) //TODO this is a boolean indicator, int in Binary? + readBool(); + else if (code < 370) + readString(); + else if (code < 390) + readInt16(); + else if (code < 400) + readString(); + else if (code < 410) + readInt16(); + else if (code < 420) + readString(); + else if (code < 430) //TODO this is an int 32b + readInt32(); + else if (code < 440) + readString(); + else if (code < 450) //TODO this is an int 32b + readInt32(); + else if (code < 460) //TODO this is long?? + readInt32(); + else if (code < 470) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 481) + readString(); + else if (code > 998 && code < 1009) //skip not used at the v2012 + readString(); + else if (code < 1060) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 1071) + readInt16(); + else if (code == 1071) //TODO this is an int 32b + readInt32(); + else if (skip) + //skip safely this dxf entry ( ok for ascii dxf) + readString(); + else + //break in binary files because the conduct is unpredictable + return false; + + return (filestr->good()); +} +int dxfReader::getHandleString(){ + int res; +#if defined(__APPLE__) + int Succeeded = sscanf ( strData.c_str(), "%x", &res ); + if ( !Succeeded || Succeeded == EOF ) + res = 0; +#else + std::istringstream Convert(strData); + if ( !(Convert >> std::hex >>res) ) + res = 0; +#endif + return res; +} + +bool dxfReaderBinary::readCode(int *code) { + unsigned short *int16p; + char buffer[2]; + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; +//exist a 32bits int (code 90) with 2 bytes??? + if ((*code == 90) && (*int16p>2000)){ + DRW_DBG(*code); DRW_DBG(" de 16bits\n"); + filestr->seekg(-4, std::ios_base::cur); + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; + } + *code = *int16p; + DRW_DBG(*code); DRW_DBG("\n"); + + return (filestr->good()); +} + +bool dxfReaderBinary::readString() { + type = STRING; + std::getline(*filestr, strData, '\0'); + DRW_DBG(strData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readString(std::string *text) { + type = STRING; + std::getline(*filestr, *text, '\0'); + DRW_DBG(*text); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt16() { + type = INT32; + char buffer[2]; + filestr->read(buffer,2); + intData = (int)((buffer[1] << 8) | buffer[0]); + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt32() { + type = INT32; + unsigned int *int32p; + char buffer[4]; + filestr->read(buffer,4); + int32p = (unsigned int *) buffer; + intData = *int32p; + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readInt64() { + type = INT64; + unsigned long long int *int64p; //64 bits integer pointer + char buffer[8]; + filestr->read(buffer,8); + int64p = (unsigned long long int *) buffer; + int64 = *int64p; + DRW_DBG(int64); DRW_DBG(" int64\n"); + return (filestr->good()); +} + +bool dxfReaderBinary::readDouble() { + type = DOUBLE; + double *result; + char buffer[8]; + filestr->read(buffer,8); + result = (double *) buffer; + doubleData = *result; + DRW_DBG(doubleData); DRW_DBG("\n"); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfReaderBinary::readBool() { + char buffer[1]; + filestr->read(buffer,1); + intData = (int)(buffer[0]); + DRW_DBG(intData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderAscii::readCode(int *code) { + std::string text; + std::getline(*filestr, text); + *code = atoi(text.c_str()); + DRW_DBG(*code); DRW_DBG("\n"); + return (filestr->good()); +} +bool dxfReaderAscii::readString(std::string *text) { + type = STRING; + std::getline(*filestr, *text); + if (!text->empty() && text->at(text->size()-1) == '\r') + text->erase(text->size()-1); + return (filestr->good()); +} + +bool dxfReaderAscii::readString() { + type = STRING; + std::getline(*filestr, strData); + if (!strData.empty() && strData.at(strData.size()-1) == '\r') + strData.erase(strData.size()-1); + DRW_DBG(strData); DRW_DBG("\n"); + return (filestr->good()); +} + +bool dxfReaderAscii::readInt16() { + type = INT32; + std::string text; + if (readString(&text)){ + intData = atoi(text.c_str()); + DRW_DBG(intData); DRW_DBG("\n"); + return true; + } else + return false; +} + +bool dxfReaderAscii::readInt32() { + type = INT32; + return readInt16(); +} + +bool dxfReaderAscii::readInt64() { + type = INT64; + return readInt16(); +} + +bool dxfReaderAscii::readDouble() { + type = DOUBLE; + std::string text; + if (readString(&text)){ +#if defined(__APPLE__) + int succeeded=sscanf( & (text[0]), "%lg", &doubleData); + if(succeeded != 1) { + DRW_DBG("dxfReaderAscii::readDouble(): reading double error: "); + DRW_DBG(text); + DRW_DBG('\n'); + } +#else + std::istringstream sd(text); + sd >> doubleData; + DRW_DBG(doubleData); DRW_DBG('\n'); +#endif + return true; + } else + return false; +} + +//saved as int or add a bool member?? +bool dxfReaderAscii::readBool() { + type = BOOL; + std::string text; + if (readString(&text)){ + intData = atoi(text.c_str()); + DRW_DBG(intData); DRW_DBG("\n"); + return true; + } else + return false; +} diff --git a/extlib/libdxfrw/intern/dxfreader.h b/extlib/libdxfrw/intern/dxfreader.h new file mode 100644 index 0000000..a0fa327 --- /dev/null +++ b/extlib/libdxfrw/intern/dxfreader.h @@ -0,0 +1,99 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DXFREADER_H +#define DXFREADER_H + +#include "drw_textcodec.h" + +class dxfReader { +public: + enum TYPE { + STRING, + INT32, + INT64, + DOUBLE, + BOOL, + INVALID + }; + enum TYPE type; +public: + dxfReader(std::istream *stream){ + filestr = stream; + type = INVALID; + } + virtual ~dxfReader(){} + bool readRec(int *code); + + std::string getString() {return strData;} + int getHandleString();//Convert hex string to int + std::string toUtf8String(std::string t) {return decoder.toUtf8(t);} + std::string getUtf8String() {return decoder.toUtf8(strData);} + double getDouble() {return doubleData;} + int getInt32() {return intData;} + unsigned long long int getInt64() {return int64;} + bool getBool() { return (intData==0) ? false : true;} + int getVersion(){return decoder.getVersion();} + void setVersion(std::string *v, bool dxfFormat){decoder.setVersion(v, dxfFormat);} + void setCodePage(std::string *c){decoder.setCodePage(c, true);} + std::string getCodePage(){ return decoder.getCodePage();} + +protected: + virtual bool readCode(int *code) = 0; //return true if sucesful (not EOF) + virtual bool readString(std::string *text) = 0; + virtual bool readString() = 0; + virtual bool readInt16() = 0; + virtual bool readInt32() = 0; + virtual bool readInt64() = 0; + virtual bool readDouble() = 0; + virtual bool readBool() = 0; + +protected: + std::istream *filestr; + std::string strData; + double doubleData; + signed int intData; //32 bits integer + unsigned long long int int64; //64 bits integer + bool skip; //set to true for ascii dxf, false for binary +private: + DRW_TextCodec decoder; +}; + +class dxfReaderBinary : public dxfReader { +public: + dxfReaderBinary(std::istream *stream):dxfReader(stream){skip = false; } + virtual ~dxfReaderBinary() {} + virtual bool readCode(int *code); + virtual bool readString(std::string *text); + virtual bool readString(); + virtual bool readInt16(); + virtual bool readInt32(); + virtual bool readInt64(); + virtual bool readDouble(); + virtual bool readBool(); +}; + +class dxfReaderAscii : public dxfReader { +public: + dxfReaderAscii(std::istream *stream):dxfReader(stream){skip = true; } + virtual ~dxfReaderAscii(){} + virtual bool readCode(int *code); + virtual bool readString(std::string *text); + virtual bool readString(); + virtual bool readInt16(); + virtual bool readDouble(); + virtual bool readInt32(); + virtual bool readInt64(); + virtual bool readBool(); +}; + +#endif // DXFREADER_H diff --git a/extlib/libdxfrw/intern/dxfwriter.cpp b/extlib/libdxfrw/intern/dxfwriter.cpp new file mode 100644 index 0000000..2276e7c --- /dev/null +++ b/extlib/libdxfrw/intern/dxfwriter.cpp @@ -0,0 +1,269 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#include +#include +#include +#include +#include "dxfwriter.h" + +//RLZ TODO change std::endl to x0D x0A (13 10) +/*bool dxfWriter::readRec(int *codeData, bool skip) { +// std::string text; + int code; + +#ifdef DRW_DBG + count = count+2; //DBG +#endif + + if (!readCode(&code)) + return false; + *codeData = code; + + if (code < 10) + readString(); + else if (code < 60) + readDouble(); + else if (code < 80) + readInt(); + else if (code > 89 && code < 100) //TODO this is an int 32b + readInt32(); + else if (code == 100 || code == 102 || code == 105) + readString(); + else if (code > 109 && code < 150) //skip not used at the v2012 + readDouble(); + else if (code > 159 && code < 170) //skip not used at the v2012 + readInt64(); + else if (code < 180) + readInt(); + else if (code > 209 && code < 240) //skip not used at the v2012 + readDouble(); + else if (code > 269 && code < 290) //skip not used at the v2012 + readInt(); + else if (code < 300) //TODO this is a boolean indicator, int in Binary? + readBool(); + else if (code < 370) + readString(); + else if (code < 390) + readInt(); + else if (code < 400) + readString(); + else if (code < 410) + readInt(); + else if (code < 420) + readString(); + else if (code < 430) //TODO this is an int 32b + readInt32(); + else if (code < 440) + readString(); + else if (code < 450) //TODO this is an int 32b + readInt32(); + else if (code < 460) //TODO this is long?? + readInt(); + else if (code < 470) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 481) + readString(); + else if (code > 998 && code < 1009) //skip not used at the v2012 + readString(); + else if (code < 1060) //TODO this is a floating point double precision?? + readDouble(); + else if (code < 1071) + readInt(); + else if (code == 1071) //TODO this is an int 32b + readInt32(); + else if (skip) + //skip safely this dxf entry ( ok for ascii dxf) + readString(); + else + //break in binary files because the conduct is unpredictable + return false; + + return (filestr->good()); +}*/ + +bool dxfWriter::writeUtf8String(int code, std::string text) { + std::string t = encoder.fromUtf8(text); + return writeString(code, t); +} + +bool dxfWriter::writeUtf8Caps(int code, std::string text) { + std::string strname = text; + std::transform(strname.begin(), strname.end(), strname.begin(),::toupper); + std::string t = encoder.fromUtf8(strname); + return writeString(code, t); +} + +bool dxfWriterBinary::writeString(int code, std::string text) { + char bufcode[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + *filestr << text << '\0'; + return (filestr->good()); +} + +/*bool dxfWriterBinary::readCode(int *code) { + unsigned short *int16p; + char buffer[2]; + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; +//exist a 32bits int (code 90) with 2 bytes??? + if ((*code == 90) && (*int16p>2000)){ + DBG(*code); DBG(" de 16bits\n"); + filestr->seekg(-4, std::ios_base::cur); + filestr->read(buffer,2); + int16p = (unsigned short *) buffer; + } + *code = *int16p; + DBG(*code); DBG("\n"); + + return (filestr->good()); +}*/ + +/*bool dxfWriterBinary::readString() { + std::getline(*filestr, strData, '\0'); + DBG(strData); DBG("\n"); + return (filestr->good()); +}*/ + +/*bool dxfWriterBinary::readString(std::string *text) { + std::getline(*filestr, *text, '\0'); + DBG(*text); DBG("\n"); + return (filestr->good()); +}*/ + +bool dxfWriterBinary::writeInt16(int code, int data) { + char bufcode[2]; + char buffer[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + filestr->write(bufcode, 2); + filestr->write(buffer, 2); + return (filestr->good()); +} + +bool dxfWriterBinary::writeInt32(int code, int data) { + char buffer[4]; + buffer[0] =code & 0xFF; + buffer[1] =code >> 8; + filestr->write(buffer, 2); + + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + buffer[2] =data >> 16; + buffer[3] =data >> 24; + filestr->write(buffer, 4); + return (filestr->good()); +} + +bool dxfWriterBinary::writeInt64(int code, unsigned long long int data) { + char buffer[8]; + buffer[0] =code & 0xFF; + buffer[1] =code >> 8; + filestr->write(buffer, 2); + + buffer[0] =data & 0xFF; + buffer[1] =data >> 8; + buffer[2] =data >> 16; + buffer[3] =data >> 24; + buffer[4] =data >> 32; + buffer[5] =data >> 40; + buffer[6] =data >> 48; + buffer[7] =data >> 56; + filestr->write(buffer, 8); + return (filestr->good()); +} + +bool dxfWriterBinary::writeDouble(int code, double data) { + char bufcode[2]; + char buffer[8]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + + unsigned char *val; + val = (unsigned char *) &data; + for (int i=0; i<8; i++) { + buffer[i] =val[i]; + } + filestr->write(buffer, 8); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfWriterBinary::writeBool(int code, bool data) { + char buffer[1]; + char bufcode[2]; + bufcode[0] =code & 0xFF; + bufcode[1] =code >> 8; + filestr->write(bufcode, 2); + buffer[0] = data; + filestr->write(buffer, 1); + return (filestr->good()); +} + +dxfWriterAscii::dxfWriterAscii(std::ostream *stream):dxfWriter(stream){ + filestr->precision(16); +} + +bool dxfWriterAscii::writeString(int code, std::string text) { +// *filestr << code << std::endl << text << std::endl ; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(0); + *filestr << std::left << text << std::endl; + /* std::getline(*filestr, strData, '\0'); + DBG(strData); DBG("\n");*/ + return (filestr->good()); +} + +bool dxfWriterAscii::writeInt16(int code, int data) { +// *filestr << std::right << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(5); + *filestr << data << std::endl; + return (filestr->good()); +} + +bool dxfWriterAscii::writeInt32(int code, int data) { + return writeInt16(code, data); +} + +bool dxfWriterAscii::writeInt64(int code, unsigned long long int data) { +// *filestr << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + filestr->width(5); + *filestr << data << std::endl; + return (filestr->good()); +} + +bool dxfWriterAscii::writeDouble(int code, double data) { +// std::streamsize prec = filestr->precision(); +// filestr->precision(12); +// *filestr << code << std::endl << data << std::endl; + filestr->width(3); + *filestr << std::right << code << std::endl; + *filestr << data << std::endl; +// filestr->precision(prec); + return (filestr->good()); +} + +//saved as int or add a bool member?? +bool dxfWriterAscii::writeBool(int code, bool data) { + *filestr << code << std::endl << data << std::endl; + return (filestr->good()); +} diff --git a/extlib/libdxfrw/intern/dxfwriter.h b/extlib/libdxfrw/intern/dxfwriter.h new file mode 100644 index 0000000..adabe02 --- /dev/null +++ b/extlib/libdxfrw/intern/dxfwriter.h @@ -0,0 +1,64 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef DXFWRITER_H +#define DXFWRITER_H + +#include "drw_textcodec.h" + +class dxfWriter { +public: + dxfWriter(std::ostream *stream){filestr = stream; /*count =0;*/} + virtual ~dxfWriter(){} + virtual bool writeString(int code, std::string text) = 0; + bool writeUtf8String(int code, std::string text); + bool writeUtf8Caps(int code, std::string text); + std::string fromUtf8String(std::string t) {return encoder.fromUtf8(t);} + virtual bool writeInt16(int code, int data) = 0; + virtual bool writeInt32(int code, int data) = 0; + virtual bool writeInt64(int code, unsigned long long int data) = 0; + virtual bool writeDouble(int code, double data) = 0; + virtual bool writeBool(int code, bool data) = 0; + void setVersion(std::string *v, bool dxfFormat){encoder.setVersion(v, dxfFormat);} + void setCodePage(std::string *c){encoder.setCodePage(c, true);} + std::string getCodePage(){return encoder.getCodePage();} +protected: + std::ostream *filestr; +private: + DRW_TextCodec encoder; +}; + +class dxfWriterBinary : public dxfWriter { +public: + dxfWriterBinary(std::ostream *stream):dxfWriter(stream){} + virtual ~dxfWriterBinary() {} + virtual bool writeString(int code, std::string text); + virtual bool writeInt16(int code, int data); + virtual bool writeInt32(int code, int data); + virtual bool writeInt64(int code, unsigned long long int data); + virtual bool writeDouble(int code, double data); + virtual bool writeBool(int code, bool data); +}; + +class dxfWriterAscii : public dxfWriter { +public: + dxfWriterAscii(std::ostream *stream); + virtual ~dxfWriterAscii(){} + virtual bool writeString(int code, std::string text); + virtual bool writeInt16(int code, int data); + virtual bool writeInt32(int code, int data); + virtual bool writeInt64(int code, unsigned long long int data); + virtual bool writeDouble(int code, double data); + virtual bool writeBool(int code, bool data); +}; + +#endif // DXFWRITER_H diff --git a/extlib/libdxfrw/intern/rscodec.cpp b/extlib/libdxfrw/intern/rscodec.cpp new file mode 100644 index 0000000..78926f3 --- /dev/null +++ b/extlib/libdxfrw/intern/rscodec.cpp @@ -0,0 +1,401 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2014 J.F. Soriano (Rallaz), rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +/** + * Reed-Solomon codec + * Reed Solomon code lifted from encoder/decoder for Reed-Solomon written by Simon Rockliff + * + * Original code: + * This program may be freely modified and/or given to whoever wants it. + * A condition of such distribution is that the author's contribution be + * acknowledged by his name being left in the comments heading the program, + * however no responsibility is accepted for any financial or other loss which + * may result from some unforseen errors or malfunctioning of the program + * during use. + * Simon Rockliff, 26th June 1991 + */ + + +#include "rscodec.h" +#include // std::nothrow +#include + +RScodec::RScodec(unsigned int pp, int mm, int tt) { + this->mm = mm; + this->tt = tt; + nn = (1<polynomial form alpha_to[] contains j=alpha**i; + polynomial form -> index form index_of[j=alpha**i] = i + alpha=2 is the primitive element of GF(2^mm) +*/ +void RScodec::RSgenerate_gf(unsigned int pp) { + int i, mask ; + int pb; + + mask = 1 ; + alpha_to[mm] = 0 ; + for (i=0; i>(mm-1-i)) & 1; + if (pb!=0) { + alpha_to[mm] ^= mask; + } + mask <<= 1 ; + } + index_of[alpha_to[mm]] = mm ; + mask >>= 1 ; + for (i=mm+1; i= mask) { + alpha_to[i] = alpha_to[mm] ^ ((alpha_to[i-1]^mask)<<1) ; + } else alpha_to[i] = alpha_to[i-1]<<1 ; + index_of[alpha_to[i]] = i ; + } + index_of[0] = -1 ; +} + + +/* Obtain the generator polynomial of the tt-error correcting, length + nn=(2^mm -1) Reed Solomon code from the product of (X+alpha**i), i=1..2*tt +*/ +void RScodec::RSgen_poly() { + int i,j ; + int tmp; + int bb = nn-kk;; //nn-kk length of parity data + + gg[0] = 2 ; /* primitive element alpha = 2 for GF(2**mm) */ + gg[1] = 1 ; /* g(x) = (X+alpha) initially */ + for (i=2; i<=bb; i++) { + gg[i] = 1 ; + for (j=i-1; j>0; j--) + if (gg[j] != 0) { + if (gg[j]<0) { isOk=false; return; } + tmp = (index_of[gg[j]]+i)%nn; + if (tmp<0) { isOk=false; return; } + gg[j] = gg[j-1]^ alpha_to[tmp] ; + } else { + gg[j] = gg[j-1] ; + } + gg[0] = alpha_to[(index_of[gg[0]]+i)%nn] ; /* gg[0] can never be zero */ + } + /* convert gg[] to index form for quicker encoding */ + for (i=0; i<=bb; i++) gg[i] = index_of[gg[i]] ; +} + +int RScodec::calcDecode(unsigned char* data, int* recd, int** elp, int* d, int* l, int* u_lu, int* s, int* root, int* loc, int* z, int* err, int* reg, int bb) +{ + if (!isOk) return -1; + int count = 0; + int syn_error = 0; + int i, j, u, q; + + // for (int i=0; i error */ + s[i] = index_of[s[i]]; + } + + if (!syn_error) { /* if no errors, ends */ + /* no non-zero syndromes => no errors: output is received codeword */ + return 0; + } + + /* errors are present, try and correct */ + /* compute the error location polynomial via the Berlekamp iterative algorithm, + following the terminology of Lin and Costello : d[u] is the 'mu'th + discrepancy, where u='mu'+1 and 'mu' (the Greek letter!) is the step number + ranging from -1 to 2*tt (see L&C), l[u] is the + degree of the elp at that step, and u_l[u] is the difference between the + step number and the degree of the elp. + */ + /* initialise table entries */ + d[0] = 0; /* index form */ + d[1] = s[1]; /* index form */ + elp[0][0] = 0; /* index form */ + elp[1][0] = 1; /* polynomial form */ + for (i = 1; i0)) q--; + /* have found first non-zero d[q] */ + if (q>0) { + j = q; + do { + j--; + if ((d[j] != -1) && (u_lu[q]0); + } + + /* have now found q such that d[u]!=0 and u_lu[q] is maximum */ + /* store degree of new elp polynomial */ + if (l[u]>l[q] + u - q) { + l[u + 1] = l[u]; + } + else { + l[u + 1] = l[q] + u - q; + } + + /* form new elp(x) */ + for (i = 0; itt) { /* elp has degree has degree >tt hence cannot solve */ + return -1; /* just output is received codeword as is */ + } + + /* can correct error */ + /* put elp into index form */ + for (i = 0; i <= l[u]; i++) elp[u][i] = index_of[elp[u][i]]; + + /* find roots of the error location polynomial */ + for (i = 1; i <= l[u]; i++) { + reg[i] = elp[u][i]; + } + count = 0; + for (i = 1; i <= nn; i++) { + q = 1; + for (j = 1; j <= l[u]; j++) { + if (reg[j] != -1) { + reg[j] = (reg[j] + j) % nn; + q ^= alpha_to[reg[j]]; + } + } + if (!q) { /* store root and error location number indices */ + root[count] = i; + loc[count] = nn - i; + count++; + } + } + + if (count != l[u]) { /* no. roots != degree of elp => >tt errors and cannot solve */ + return -1; /* just output is received codeword as is */ + } + + /* no. roots = degree of elp hence <= tt errors */ + /* form polynomial z(x) */ + for (i = 1; i <= l[u]; i++) { /* Z[0] = 1 always - do not need */ + if ((s[i] != -1) && (elp[u][i] != -1)) { + z[i] = alpha_to[s[i]] ^ alpha_to[elp[u][i]]; + } + else if ((s[i] != -1) && (elp[u][i] == -1)) { + z[i] = alpha_to[s[i]]; + } + else if ((s[i] == -1) && (elp[u][i] != -1)) { + z[i] = alpha_to[elp[u][i]]; + } + else { + z[i] = 0; + } + for (j = 1; j=0; i--) { + feedback = index_of[idata[i]^bd[bb-1]] ; + if (feedback != -1) { + for (j=bb-1; j>0; j--) + if (gg[j] != -1) + bd[j] = bd[j-1]^alpha_to[(gg[j]+feedback)%nn] ; + else + bd[j] = bd[j-1] ; + bd[0] = alpha_to[(gg[0]+feedback)%nn] ; + } else { + for (j=bb-1; j>0; j--) + bd[j] = bd[j-1] ; + bd[0] = 0 ; + } + } + return true; +} + + +/* assume we have received bits grouped into mm-bit symbols in recd[i], + i=0..(nn-1), and recd[i] is index form (ie as powers of alpha). + We first compute the 2*tt syndromes by substituting alpha**i into rec(X) and + evaluating, storing the syndromes in s[i], i=1..2tt (leave s[0] zero) . + Then we use the Berlekamp iteration to find the error location polynomial + elp[i]. If the degree of the elp is >tt, we cannot correct all the errors + and hence just put out the information symbols uncorrected. If the degree of + elp is <=tt, we substitute alpha**i , i=1..n into the elp to get the roots, + hence the inverse roots, the error location numbers. If the number of errors + located does not equal the degree of the elp, we have more than tt errors + and cannot correct them. Otherwise, we then solve for the error value at + the error location and correct the error. The procedure is that found in + Lin and Costello. For the cases where the number of errors is known to be too + large to correct, the information symbols as received are output (the + advantage of systematic encoding is that hopefully some of the information + symbols will be okay and that if we are in luck, the errors are in the + parity part of the transmitted codeword). Of course, these insoluble cases + can be returned as error flags to the calling routine if desired. */ +/** return value: number of corrected errors or -1 if can't correct it */ +int RScodec::decode(unsigned char *data) { + if (!isOk) return -1; + int bb = nn-kk;; //nn-kk length of parity data + + int *recd = new (std::nothrow) int[nn]; + int **elp = new int*[bb + 2]; + for (int i = 0; i < bb + 2; ++i) + elp[i] = new int[bb]; + int *d = new int[bb + 2]; + int *l = new int[bb + 2]; + int *u_lu = new int[bb + 2]; + int *s = new int[bb + 1]; + int *root = new int[tt]; + int *loc = new int[tt]; + int *z = new int[tt+1]; + int *err = new int[nn]; + int *reg = new int[tt + 1]; + + int res = calcDecode(data, recd, elp ,d ,l, u_lu, s, root, loc ,z, err, reg, bb); + + delete[] recd; + for (int i = 0; i < bb + 2; ++i) + delete[] elp[i]; + delete[] elp; + delete[] d; + delete[] l; + delete[] u_lu; + delete[] s; + delete[] root; + delete[] loc; + delete[] z; + delete[] err; + delete[] reg; + + return res; +} diff --git a/extlib/libdxfrw/intern/rscodec.h b/extlib/libdxfrw/intern/rscodec.h new file mode 100644 index 0000000..10cb2a8 --- /dev/null +++ b/extlib/libdxfrw/intern/rscodec.h @@ -0,0 +1,69 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2014 J.F. Soriano (Rallaz), rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +/** + * Reed-Solomon codec + * Reed Solomon code lifted from encoder/decoder for Reed-Solomon written by Simon Rockliff + * + * Original code: + * This program may be freely modified and/or given to whoever wants it. + * A condition of such distribution is that the author's contribution be + * acknowledged by his name being left in the comments heading the program, + * however no responsibility is accepted for any financial or other loss which + * may result from some unforseen errors or malfunctioning of the program + * during use. + * Simon Rockliff, 26th June 1991 + */ + + + +#ifndef RSCODEC_H +#define RSCODEC_H +/** +mm: RS code over GF(2^4) +nn: nn= (2^mm) - 1 length of codeword +tt: number of errors that can be corrected +kk: kk = nn-2*tt +pp: irreducible polynomial coeffts, pp [mm] send as int +*/ +class RScodec { +public: + RScodec(unsigned int pp, int mm, int tt); + + ~RScodec(); +// bool encode(int *data, int *parity); +// int decode(int *recd); + bool encode(unsigned char *data, unsigned char *parity); + int decode(unsigned char *data); + bool isOkey(){return isOk;} + const unsigned int* indexOf() {return index_of;} + const int* alphaTo() {return alpha_to;} + +private: + void RSgenerate_gf(unsigned int pp); + void RSgen_poly(); + int calcDecode(unsigned char* data, int* recd, int** elp, int* d, int* l, int* u_lu, int* s, int* root, int* loc, int* z, int* err, int* reg, int bb); + + +private: + int mm; //RS code over GF(2^4) + int tt; //number of errors that can be corrected + int nn; //(2^mm) - 1 length of codeword + int kk; //nn-2*tt length of original data + + int *gg; + bool isOk; + unsigned int *index_of; + int *alpha_to; +}; + +#endif // RSCODEC_H diff --git a/extlib/libdxfrw/libdwgr.cpp b/extlib/libdxfrw/libdwgr.cpp new file mode 100644 index 0000000..adca43c --- /dev/null +++ b/extlib/libdxfrw/libdwgr.cpp @@ -0,0 +1,237 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "libdwgr.h" +#include +#include +#include +#include "intern/drw_dbg.h" +#include "intern/drw_textcodec.h" +#include "intern/dwgreader.h" +#include "intern/dwgreader15.h" +#include "intern/dwgreader18.h" +#include "intern/dwgreader21.h" +#include "intern/dwgreader24.h" +#include "intern/dwgreader27.h" + +#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +dwgR::dwgR(){ + DRW_DBGSL(DRW_dbg::NONE); + reader = NULL; +// writer = NULL; + applyExt = false; + version = DRW::UNKNOWNV; + error = DRW::BAD_NONE; +} + +dwgR::~dwgR(){ + if (reader != NULL) + delete reader; + +} + +void dwgR::setDebug(DRW::DBG_LEVEL lvl){ + switch (lvl){ + case DRW::DEBUG: + DRW_DBGSL(DRW_dbg::DEBUG); + break; + default: + DRW_DBGSL(DRW_dbg::NONE); + } +} + +/*reads metadata and loads image preview*/ +bool dwgR::getPreview(std::istream &stream){ + bool isOk = false; + + isOk = open(&stream); + if (!isOk) + return false; + + isOk = reader->readMetaData(); + if (isOk) { + isOk = reader->readPreview(); + } else + error = DRW::BAD_READ_METADATA; + + if (reader != NULL) { + delete reader; + reader = NULL; + } + return isOk; +} + +bool dwgR::read(std::istream &stream, DRW_Interface *interface_, bool ext){ + applyExt = ext; + iface = interface_; + + bool isOk = false; + + isOk = open(&stream); + if (!isOk) + return false; + + isOk = reader->readMetaData(); + if (isOk) { + isOk = reader->readFileHeader(); + if (isOk) { + isOk = processDwg(); + } else + error = DRW::BAD_READ_FILE_HEADER; + } else + error = DRW::BAD_READ_METADATA; + + if (reader != NULL) { + delete reader; + reader = NULL; + } + + return isOk; +} + +bool dwgR::open(std::istream *stream){ + char line[7]; + stream->read (line, 6); + line[6]='\0'; + DRW_DBG("dwgR::read 2\n"); + DRW_DBG("dwgR::read line version: "); + DRW_DBG(line); + DRW_DBG("\n"); + + if (strcmp(line, "AC1006") == 0) + version = DRW::AC1006; + else if (strcmp(line, "AC1009") == 0) { + version = DRW::AC1009; +// reader = new dwgReader09(&filestr, this); + }else if (strcmp(line, "AC1012") == 0){ + version = DRW::AC1012; + reader = new dwgReader15(stream, this); + } else if (strcmp(line, "AC1014") == 0) { + version = DRW::AC1014; + reader = new dwgReader15(stream, this); + } else if (strcmp(line, "AC1015") == 0) { + version = DRW::AC1015; + reader = new dwgReader15(stream, this); + } else if (strcmp(line, "AC1018") == 0){ + version = DRW::AC1018; + reader = new dwgReader18(stream, this); + } else if (strcmp(line, "AC1021") == 0) { + version = DRW::AC1021; + reader = new dwgReader21(stream, this); + } else if (strcmp(line, "AC1024") == 0) { + version = DRW::AC1024; + reader = new dwgReader24(stream, this); + } else if (strcmp(line, "AC1027") == 0) { + version = DRW::AC1027; + reader = new dwgReader27(stream, this); + } else + version = DRW::UNKNOWNV; + + if (reader == NULL) { + error = DRW::BAD_VERSION; + return false; + } + return true; +} + +/********* Reader Process *********/ + +bool dwgR::processDwg() { + DRW_DBG("dwgR::processDwg() start processing dwg\n"); + bool ret; + bool ret2; + DRW_Header hdr; + ret = reader->readDwgHeader(hdr); + if (!ret) { + error = DRW::BAD_READ_HEADER; + } + + ret2 = reader->readDwgClasses(); + if (ret && !ret2) { + error = DRW::BAD_READ_CLASSES; + ret = ret2; + } + + ret2 = reader->readDwgHandles(); + if (ret && !ret2) { + error = DRW::BAD_READ_HANDLES; + ret = ret2; + } + + ret2 = reader->readDwgTables(hdr); + if (ret && !ret2) { + error = DRW::BAD_READ_TABLES; + ret = ret2; + } + + iface->addHeader(&hdr); + + for (std::map::iterator it=reader->ltypemap.begin(); it!=reader->ltypemap.end(); ++it) { + DRW_LType *lt = it->second; + iface->addLType(const_cast(*lt) ); + } + for (std::map::iterator it=reader->layermap.begin(); it!=reader->layermap.end(); ++it) { + DRW_Layer *ly = it->second; + iface->addLayer(const_cast(*ly)); + } + + for (std::map::iterator it=reader->stylemap.begin(); it!=reader->stylemap.end(); ++it) { + DRW_Textstyle *ly = it->second; + iface->addTextStyle(const_cast(*ly)); + } + + for (std::map::iterator it=reader->dimstylemap.begin(); it!=reader->dimstylemap.end(); ++it) { + DRW_Dimstyle *ly = it->second; + iface->addDimStyle(const_cast(*ly)); + } + + for (std::map::iterator it=reader->vportmap.begin(); it!=reader->vportmap.end(); ++it) { + DRW_Vport *ly = it->second; + iface->addVport(const_cast(*ly)); + } + + for (std::map::iterator it=reader->appIdmap.begin(); it!=reader->appIdmap.end(); ++it) { + DRW_AppId *ly = it->second; + iface->addAppId(const_cast(*ly)); + } + + ret2 = reader->readDwgBlocks(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_BLOCKS; + ret = ret2; + } + + ret2 = reader->readDwgEntities(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_ENTITIES; + ret = ret2; + } + + ret2 = reader->readDwgObjects(*iface); + if (ret && !ret2) { + error = DRW::BAD_READ_OBJECTS; + ret = ret2; + } + + return ret; +} diff --git a/extlib/libdxfrw/libdwgr.h b/extlib/libdxfrw/libdwgr.h new file mode 100644 index 0000000..0601004 --- /dev/null +++ b/extlib/libdxfrw/libdwgr.h @@ -0,0 +1,50 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef LIBDWGR_H +#define LIBDWGR_H + +#include +//#include +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_classes.h" +#include "drw_interface.h" + +class dwgReader; + +class dwgR { +public: + dwgR(); + ~dwgR(); + //read: return true if all ok + bool read(std::istream &stream, DRW_Interface *interface_, bool ext); + bool getPreview(std::istream &stream); + DRW::Version getVersion(){return version;} + DRW::error getError(){return error;} + void setDebug(DRW::DBG_LEVEL lvl); + +private: + bool open(std::istream *stream); + bool processDwg(); +private: + DRW::Version version; + DRW::error error; + std::string fileName; + bool applyExt; /*apply extrusion in entities to conv in 2D?*/ + std::string codePage; + DRW_Interface *iface; + dwgReader *reader; + +}; + +#endif // LIBDWGR_H diff --git a/extlib/libdxfrw/libdxfrw.cpp b/extlib/libdxfrw/libdxfrw.cpp new file mode 100644 index 0000000..9eecea7 --- /dev/null +++ b/extlib/libdxfrw/libdxfrw.cpp @@ -0,0 +1,2765 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + + +#include "libdxfrw.h" +#include +#include +#include +#include +#include "intern/drw_textcodec.h" +#include "intern/dxfreader.h" +#include "intern/dxfwriter.h" +#include "intern/drw_dbg.h" + +#define FIRSTHANDLE 48 + +/*enum sections { + secUnknown, + secHeader, + secTables, + secBlocks, + secEntities, + secObjects +};*/ + +dxfRW::dxfRW(){ + DRW_DBGSL(DRW_dbg::NONE); + reader = NULL; + writer = NULL; + applyExt = false; + elParts = 128; //parts munber when convert ellipse to polyline +} +dxfRW::~dxfRW(){ + if (reader != NULL) + delete reader; + if (writer != NULL) + delete writer; + for (std::vector::iterator it=imageDef.begin(); it!=imageDef.end(); ++it) + delete *it; + + imageDef.clear(); +} + +void dxfRW::setDebug(DRW::DBG_LEVEL lvl){ + switch (lvl){ + case DRW::DEBUG: + DRW_DBGSL(DRW_dbg::DEBUG); + break; + default: + DRW_DBGSL(DRW_dbg::NONE); + } +} + +bool dxfRW::read(std::istream &stream, DRW_Interface *interface_, bool ext){ + applyExt = ext; + + if(interface_ == NULL) + return false; + + char line[22]; + char line2[22] = "AutoCAD Binary DXF\r\n"; + line2[20] = (char)26; + line2[21] = '\0'; + stream.read (line, 22); + iface = interface_; + DRW_DBG("dxfRW::read 2\n"); + if (strcmp(line, line2) == 0) { + binFile = true; + reader = new dxfReaderBinary(&stream); + DRW_DBG("dxfRW::read binary file\n"); + } else { + binFile = false; + stream.seekg(0, std::ios::beg); + reader = new dxfReaderAscii(&stream); + } + + bool isOk = processDxf(); + delete reader; + reader = NULL; + return isOk; +} + +bool dxfRW::write(std::ostream &stream, DRW_Interface *interface_, DRW::Version ver, bool bin){ + version = ver; + binFile = bin; + iface = interface_; + if (binFile) { + //write sentinel + stream << "AutoCAD Binary DXF\r\n" << (char)26 << '\0'; + writer = new dxfWriterBinary(&stream); + DRW_DBG("dxfRW::read binary file\n"); + } else { + writer = new dxfWriterAscii(&stream); + std::string comm = std::string("dxfrw ") + std::string(DRW_VERSION); + writer->writeString(999, comm); + } + DRW_Header header; + iface->writeHeader(header); + writer->writeString(0, "SECTION"); + entCount =FIRSTHANDLE; + header.write(writer, version); + writer->writeString(0, "ENDSEC"); + if (ver > DRW::AC1009) { + writer->writeString(0, "SECTION"); + writer->writeString(2, "CLASSES"); + writer->writeString(0, "ENDSEC"); + } + writer->writeString(0, "SECTION"); + writer->writeString(2, "TABLES"); + writeTables(); + writer->writeString(0, "ENDSEC"); + writer->writeString(0, "SECTION"); + writer->writeString(2, "BLOCKS"); + writeBlocks(); + writer->writeString(0, "ENDSEC"); + + writer->writeString(0, "SECTION"); + writer->writeString(2, "ENTITIES"); + iface->writeEntities(); + writer->writeString(0, "ENDSEC"); + + if (version > DRW::AC1009) { + writer->writeString(0, "SECTION"); + writer->writeString(2, "OBJECTS"); + writeObjects(); + writer->writeString(0, "ENDSEC"); + } + writer->writeString(0, "EOF"); + stream.flush(); + delete writer; + writer = NULL; + return true; +} + +bool dxfRW::writeEntity(DRW_Entity *ent) { + ent->handle = ++entCount; + writer->writeString(5, toHexStr(ent->handle)); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbEntity"); + } + if (ent->space == 1) + writer->writeInt16(67, 1); + if (version > DRW::AC1009) { + writer->writeUtf8String(8, ent->layer); + writer->writeUtf8String(6, ent->lineType); + } else { + writer->writeUtf8Caps(8, ent->layer); + writer->writeUtf8Caps(6, ent->lineType); + } + writer->writeInt16(62, ent->color); + if (version > DRW::AC1015 && ent->color24 >= 0) { + writer->writeInt32(420, ent->color24); + } + if (version > DRW::AC1014) { + writer->writeInt16(370, DRW_LW_Conv::lineWidth2dxfInt(ent->lWeight)); + } + return true; +} + +bool dxfRW::writeLineType(DRW_LType *ent){ + std::string strname = ent->name; + + transform(strname.begin(), strname.end(), strname.begin(),::toupper); +//do not write linetypes handled by library + if (strname == "BYLAYER" || strname == "BYBLOCK" || strname == "CONTINUOUS") { + return true; + } + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1012) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + writer->writeUtf8String(3, ent->desc); + ent->update(); + writer->writeInt16(72, 65); + writer->writeInt16(73, ent->size); + writer->writeDouble(40, ent->length); + + for (unsigned int i = 0; i< ent->path.size(); i++){ + writer->writeDouble(49, ent->path.at(i)); + if (version > DRW::AC1009) { + writer->writeInt16(74, 0); + } + } + return true; +} + +bool dxfRW::writeLayer(DRW_Layer *ent){ + writer->writeString(0, "LAYER"); + if (!wlayer0 && ent->name == "0") { + wlayer0 = true; + if (version > DRW::AC1009) { + writer->writeString(5, "10"); + } + } else { + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + } + } + if (version > DRW::AC1012) { + writer->writeString(330, "2"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLayerTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + writer->writeInt16(62, ent->color); + if (version > DRW::AC1015 && ent->color24 >= 0) { + writer->writeInt32(420, ent->color24); + } + if (version > DRW::AC1009) { + writer->writeUtf8String(6, ent->lineType); + if (! ent->plotF) + writer->writeBool(290, ent->plotF); + writer->writeInt16(370, DRW_LW_Conv::lineWidth2dxfInt(ent->lWeight)); + writer->writeString(390, "F"); + } else + writer->writeUtf8Caps(6, ent->lineType); + if (!ent->extData.empty()){ + writeExtData(ent->extData); + } +// writer->writeString(347, "10012"); + return true; +} + +bool dxfRW::writeTextstyle(DRW_Textstyle *ent){ + writer->writeString(0, "STYLE"); + if (!dimstyleStd) { + //stringstream cause crash in OS/X, bug#3597944 + std::string name=ent->name; + transform(name.begin(), name.end(), name.begin(), toupper); + if (name == "STANDARD") + dimstyleStd = true; + } + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + } + + if (version > DRW::AC1012) { + writer->writeString(330, "2"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbTextStyleTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->width); + writer->writeDouble(50, ent->oblique); + writer->writeInt16(71, ent->genFlag); + writer->writeDouble(42, ent->lastHeight); + if (version > DRW::AC1009) { + writer->writeUtf8String(3, ent->font); + writer->writeUtf8String(4, ent->bigFont); + if (ent->fontFamily != 0) + writer->writeInt32(1071, ent->fontFamily); + } else { + writer->writeUtf8Caps(3, ent->font); + writer->writeUtf8Caps(4, ent->bigFont); + } + return true; +} + +bool dxfRW::writeVport(DRW_Vport *ent){ + if (!dimstyleStd) { + ent->name = "*ACTIVE"; + dimstyleStd = true; + } + writer->writeString(0, "VPORT"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1012) + writer->writeString(330, "2"); + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbViewportTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + writer->writeDouble(10, ent->lowerLeft.x); + writer->writeDouble(20, ent->lowerLeft.y); + writer->writeDouble(11, ent->UpperRight.x); + writer->writeDouble(21, ent->UpperRight.y); + writer->writeDouble(12, ent->center.x); + writer->writeDouble(22, ent->center.y); + writer->writeDouble(13, ent->snapBase.x); + writer->writeDouble(23, ent->snapBase.y); + writer->writeDouble(14, ent->snapSpacing.x); + writer->writeDouble(24, ent->snapSpacing.y); + writer->writeDouble(15, ent->gridSpacing.x); + writer->writeDouble(25, ent->gridSpacing.y); + writer->writeDouble(16, ent->viewDir.x); + writer->writeDouble(26, ent->viewDir.y); + writer->writeDouble(36, ent->viewDir.z); + writer->writeDouble(17, ent->viewTarget.z); + writer->writeDouble(27, ent->viewTarget.z); + writer->writeDouble(37, ent->viewTarget.z); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->ratio); + writer->writeDouble(42, ent->lensHeight); + writer->writeDouble(43, ent->frontClip); + writer->writeDouble(44, ent->backClip); + writer->writeDouble(50, ent->snapAngle); + writer->writeDouble(51, ent->twistAngle); + writer->writeInt16(71, ent->viewMode); + writer->writeInt16(72, ent->circleZoom); + writer->writeInt16(73, ent->fastZoom); + writer->writeInt16(74, ent->ucsIcon); + writer->writeInt16(75, ent->snap); + writer->writeInt16(76, ent->grid); + writer->writeInt16(77, ent->snapStyle); + writer->writeInt16(78, ent->snapIsopair); + if (version > DRW::AC1014) { + writer->writeInt16(281, 0); + writer->writeInt16(65, 1); + writer->writeDouble(110, 0.0); + writer->writeDouble(120, 0.0); + writer->writeDouble(130, 0.0); + writer->writeDouble(111, 1.0); + writer->writeDouble(121, 0.0); + writer->writeDouble(131, 0.0); + writer->writeDouble(112, 0.0); + writer->writeDouble(122, 1.0); + writer->writeDouble(132, 0.0); + writer->writeInt16(79, 0); + writer->writeDouble(146, 0.0); + if (version > DRW::AC1018) { + writer->writeString(348, "10020"); + writer->writeInt16(60, ent->gridBehavior);//v2007 undocummented see DRW_Vport class + writer->writeInt16(61, 5); + writer->writeBool(292, 1); + writer->writeInt16(282, 1); + writer->writeDouble(141, 0.0); + writer->writeDouble(142, 0.0); + writer->writeInt16(63, 250); + writer->writeInt32(421, 3358443); + } + } + return true; +} + +bool dxfRW::writeDimstyle(DRW_Dimstyle *ent){ + writer->writeString(0, "DIMSTYLE"); + if (!dimstyleStd) { + std::string name = ent->name; + std::transform(name.begin(), name.end(), name.begin(),::toupper); + if (name == "STANDARD") + dimstyleStd = true; + } + if (version > DRW::AC1009) { + writer->writeString(105, toHexStr(++entCount)); + } + + if (version > DRW::AC1012) { + writer->writeString(330, "A"); + } + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbDimStyleTableRecord"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeInt16(70, ent->flags); + if ( version == DRW::AC1009 || !(ent->dimpost.empty()) ) + writer->writeUtf8String(3, ent->dimpost); + if ( version == DRW::AC1009 || !(ent->dimapost.empty()) ) + writer->writeUtf8String(4, ent->dimapost); + if ( version == DRW::AC1009 || !(ent->dimblk.empty()) ) + writer->writeUtf8String(5, ent->dimblk); + if ( version == DRW::AC1009 || !(ent->dimblk1.empty()) ) + writer->writeUtf8String(6, ent->dimblk1); + if ( version == DRW::AC1009 || !(ent->dimblk2.empty()) ) + writer->writeUtf8String(7, ent->dimblk2); + writer->writeDouble(40, ent->dimscale); + writer->writeDouble(41, ent->dimasz); + writer->writeDouble(42, ent->dimexo); + writer->writeDouble(43, ent->dimdli); + writer->writeDouble(44, ent->dimexe); + writer->writeDouble(45, ent->dimrnd); + writer->writeDouble(46, ent->dimdle); + writer->writeDouble(47, ent->dimtp); + writer->writeDouble(48, ent->dimtm); + writer->writeDouble(140, ent->dimtxt); + writer->writeDouble(141, ent->dimcen); + writer->writeDouble(142, ent->dimtsz); + writer->writeDouble(143, ent->dimaltf); + writer->writeDouble(144, ent->dimlfac); + writer->writeDouble(145, ent->dimtvp); + writer->writeDouble(146, ent->dimtfac); + writer->writeDouble(147, ent->dimgap); + if (version > DRW::AC1014) { + writer->writeDouble(148, ent->dimaltrnd); + } + writer->writeInt16(71, ent->dimtol); + writer->writeInt16(72, ent->dimlim); + writer->writeInt16(73, ent->dimtih); + writer->writeInt16(74, ent->dimtoh); + writer->writeInt16(75, ent->dimse1); + writer->writeInt16(76, ent->dimse2); + writer->writeInt16(77, ent->dimtad); + writer->writeInt16(78, ent->dimzin); + if (version > DRW::AC1014) { + writer->writeInt16(79, ent->dimazin); + } + writer->writeInt16(170, ent->dimalt); + writer->writeInt16(171, ent->dimaltd); + writer->writeInt16(172, ent->dimtofl); + writer->writeInt16(173, ent->dimsah); + writer->writeInt16(174, ent->dimtix); + writer->writeInt16(175, ent->dimsoxd); + writer->writeInt16(176, ent->dimclrd); + writer->writeInt16(177, ent->dimclre); + writer->writeInt16(178, ent->dimclrt); + if (version > DRW::AC1014) { + writer->writeInt16(179, ent->dimadec); + } + if (version > DRW::AC1009) { + if (version < DRW::AC1015) + writer->writeInt16(270, ent->dimunit); + writer->writeInt16(271, ent->dimdec); + writer->writeInt16(272, ent->dimtdec); + writer->writeInt16(273, ent->dimaltu); + writer->writeInt16(274, ent->dimalttd); + writer->writeInt16(275, ent->dimaunit); + } + if (version > DRW::AC1014) { + writer->writeInt16(276, ent->dimfrac); + writer->writeInt16(277, ent->dimlunit); + writer->writeInt16(278, ent->dimdsep); + writer->writeInt16(279, ent->dimtmove); + } + if (version > DRW::AC1009) { + writer->writeInt16(280, ent->dimjust); + writer->writeInt16(281, ent->dimsd1); + writer->writeInt16(282, ent->dimsd2); + writer->writeInt16(283, ent->dimtolj); + writer->writeInt16(284, ent->dimtzin); + writer->writeInt16(285, ent->dimaltz); + writer->writeInt16(286, ent->dimaltttz); + if (version < DRW::AC1015) + writer->writeInt16(287, ent->dimfit); + writer->writeInt16(288, ent->dimupt); + } + if (version > DRW::AC1014) { + writer->writeInt16(289, ent->dimatfit); + } + if (version > DRW::AC1009 && !ent->dimtxsty.empty()) { + writer->writeUtf8String(340, ent->dimtxsty); + } + if (version > DRW::AC1014) { + writer->writeUtf8String(341, ent->dimldrblk); + writer->writeInt16(371, ent->dimlwd); + writer->writeInt16(372, ent->dimlwe); + } + return true; +} + +bool dxfRW::writeAppId(DRW_AppId *ent){ + std::string strname = ent->name; + transform(strname.begin(), strname.end(), strname.begin(),::toupper); +//do not write mandatory ACAD appId, handled by library + if (strname == "ACAD") + return true; + writer->writeString(0, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(++entCount)); + if (version > DRW::AC1014) { + writer->writeString(330, "9"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbRegAppTableRecord"); + writer->writeUtf8String(2, ent->name); + } else { + writer->writeUtf8Caps(2, ent->name); + } + writer->writeInt16(70, ent->flags); + return true; +} + +bool dxfRW::writePoint(DRW_Point *ent) { + writer->writeString(0, "POINT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbPoint"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + return true; +} + +bool dxfRW::writeLine(DRW_Line *ent) { + writer->writeString(0, "LINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbLine"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + } else { + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + } + return true; +} + +bool dxfRW::writeRay(DRW_Ray *ent) { + writer->writeString(0, "RAY"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbRay"); + } + DRW_Coord crd = ent->secPoint; + crd.unitize(); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + writer->writeDouble(31, crd.z); + } else { + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + } + return true; +} + +bool dxfRW::writeXline(DRW_Xline *ent) { + writer->writeString(0, "XLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbXline"); + } + DRW_Coord crd = ent->secPoint; + crd.unitize(); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0 || ent->secPoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + writer->writeDouble(31, crd.z); + } else { + writer->writeDouble(11, crd.x); + writer->writeDouble(21, crd.y); + } + return true; +} + +bool dxfRW::writeCircle(DRW_Circle *ent) { + writer->writeString(0, "CIRCLE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbCircle"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + writer->writeDouble(40, ent->radious); + return true; +} + +bool dxfRW::writeArc(DRW_Arc *ent) { + writer->writeString(0, "ARC"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbCircle"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) { + writer->writeDouble(30, ent->basePoint.z); + } + writer->writeDouble(40, ent->radious); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbArc"); + } + writer->writeDouble(50, ent->staangle*ARAD); + writer->writeDouble(51, ent->endangle*ARAD); + return true; +} + +bool dxfRW::writeEllipse(DRW_Ellipse *ent){ + //verify axis/ratio and params for full ellipse + ent->correctAxis(); + if (version > DRW::AC1009) { + writer->writeString(0, "ELLIPSE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbEllipse"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(40, ent->ratio); + writer->writeDouble(41, ent->staparam); + writer->writeDouble(42, ent->endparam); + } else { + DRW_Polyline pol; + //RLZ: copy properties + ent->toPolyline(&pol, elParts); + writePolyline(&pol); + } + return true; +} + +bool dxfRW::writeTrace(DRW_Trace *ent){ + writer->writeString(0, "TRACE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbTrace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + return true; +} + +bool dxfRW::writeSolid(DRW_Solid *ent){ + writer->writeString(0, "SOLID"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbTrace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + return true; +} + +bool dxfRW::write3dface(DRW_3Dface *ent){ + writer->writeString(0, "3DFACE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbFace"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->thirdPoint.x); + writer->writeDouble(22, ent->thirdPoint.y); + writer->writeDouble(32, ent->thirdPoint.z); + writer->writeDouble(13, ent->fourPoint.x); + writer->writeDouble(23, ent->fourPoint.y); + writer->writeDouble(33, ent->fourPoint.z); + writer->writeInt16(70, ent->invisibleflag); + return true; +} + +bool dxfRW::writeLWPolyline(DRW_LWPolyline *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "LWPOLYLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbPolyline"); + } + ent->vertexnum = ent->vertlist.size(); + writer->writeInt32(90, ent->vertexnum); + writer->writeInt16(70, ent->flags); + writer->writeDouble(43, ent->width); + if (ent->elevation != 0) + writer->writeDouble(38, ent->elevation); + if (ent->thickness != 0) + writer->writeDouble(39, ent->thickness); + for (int i = 0; i< ent->vertexnum; i++){ + DRW_Vertex2D *v = ent->vertlist.at(i); + writer->writeDouble(10, v->x); + writer->writeDouble(20, v->y); + if (v->stawidth != 0) + writer->writeDouble(40, v->stawidth); + if (v->endwidth != 0) + writer->writeDouble(41, v->endwidth); + if (v->bulge != 0) + writer->writeDouble(42, v->bulge); + } + } else { + //RLZ: TODO convert lwpolyline in polyline (not exist in acad 12) + } + return true; +} + +bool dxfRW::writePolyline(DRW_Polyline *ent) { + writer->writeString(0, "POLYLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + if (ent->flags & 8 || ent->flags & 16) + writer->writeString(100, "AcDb2dPolyline"); + else + writer->writeString(100, "AcDb3dPolyline"); + } else + writer->writeInt16(66, 1); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, ent->basePoint.z); + if (ent->thickness != 0) { + writer->writeDouble(39, ent->thickness); + } + writer->writeInt16(70, ent->flags); + if (ent->defstawidth != 0) { + writer->writeDouble(40, ent->defstawidth); + } + if (ent->defendwidth != 0) { + writer->writeDouble(41, ent->defendwidth); + } + if (ent->flags & 16 || ent->flags & 32) { + writer->writeInt16(71, ent->vertexcount); + writer->writeInt16(72, ent->facecount); + } + if (ent->smoothM != 0) { + writer->writeInt16(73, ent->smoothM); + } + if (ent->smoothN != 0) { + writer->writeInt16(74, ent->smoothN); + } + if (ent->curvetype != 0) { + writer->writeInt16(75, ent->curvetype); + } + DRW_Coord crd = ent->extPoint; + if (crd.x != 0 || crd.y != 0 || crd.z != 1) { + writer->writeDouble(210, crd.x); + writer->writeDouble(220, crd.y); + writer->writeDouble(230, crd.z); + } + + int vertexnum = ent->vertlist.size(); + for (int i = 0; i< vertexnum; i++){ + DRW_Vertex *v = ent->vertlist.at(i); + writer->writeString(0, "VERTEX"); + writeEntity(ent); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbVertex"); + if ( (v->flags & 128) && !(v->flags & 64) ) { + writer->writeDouble(10, 0); + writer->writeDouble(20, 0); + writer->writeDouble(30, 0); + } else { + writer->writeDouble(10, v->basePoint.x); + writer->writeDouble(20, v->basePoint.y); + writer->writeDouble(30, v->basePoint.z); + } + if (v->stawidth != 0) + writer->writeDouble(40, v->stawidth); + if (v->endwidth != 0) + writer->writeDouble(41, v->endwidth); + if (v->bulge != 0) + writer->writeDouble(42, v->bulge); + if (v->flags != 0) { + writer->writeInt16(70, ent->flags); + } + if (v->flags & 2) { + writer->writeDouble(50, v->tgdir); + } + if ( v->flags & 128 ) { + if (v->vindex1 != 0) { + writer->writeInt16(71, v->vindex1); + } + if (v->vindex2 != 0) { + writer->writeInt16(72, v->vindex2); + } + if (v->vindex3 != 0) { + writer->writeInt16(73, v->vindex3); + } + if (v->vindex4 != 0) { + writer->writeInt16(74, v->vindex4); + } + if ( !(v->flags & 64) ) { + writer->writeInt32(91, v->identifier); + } + } + } + writer->writeString(0, "SEQEND"); + writeEntity(ent); + return true; +} + +bool dxfRW::writeSpline(DRW_Spline *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "SPLINE"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbSpline"); + } + writer->writeDouble(210, ent->normalVec.x); + writer->writeDouble(220, ent->normalVec.y); + writer->writeDouble(230, ent->normalVec.z); + writer->writeInt16(70, ent->flags); + writer->writeInt16(71, ent->degree); + writer->writeInt16(72, ent->nknots); + writer->writeInt16(73, ent->ncontrol); + writer->writeInt16(74, ent->nfit); + writer->writeDouble(42, ent->tolknot); + writer->writeDouble(43, ent->tolcontrol); + //RLZ: warning check if nknots are correct and ncontrol + for (int i = 0; i< ent->nknots; i++){ + writer->writeDouble(40, ent->knotslist.at(i)); + } + for (int i = 0; i< (int)ent->weightlist.size(); i++) { + writer->writeDouble(41, ent->weightlist.at(i)); + } + for (int i = 0; i< ent->ncontrol; i++){ + DRW_Coord *crd = ent->controllist.at(i); + writer->writeDouble(10, crd->x); + writer->writeDouble(20, crd->y); + writer->writeDouble(30, crd->z); + } + } else { + //RLZ: TODO convert spline in polyline (not exist in acad 12) + } + return true; +} + +bool dxfRW::writeHatch(DRW_Hatch *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "HATCH"); + writeEntity(ent); + writer->writeString(100, "AcDbHatch"); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + writer->writeString(2, ent->name); + writer->writeInt16(70, ent->solid); + writer->writeInt16(71, ent->associative); + ent->loopsnum = ent->looplist.size(); + writer->writeInt16(91, ent->loopsnum); + //write paths data + for (int i = 0; i< ent->loopsnum; i++){ + DRW_HatchLoop *loop = ent->looplist.at(i); + writer->writeInt16(92, loop->type); + if ( (loop->type & 2) == 2){ + //RLZ: polyline boundary writeme + } else { + //boundary path + loop->update(); + writer->writeInt16(93, loop->numedges); + for (int j = 0; jnumedges; ++j) { + switch ( (loop->objlist.at(j))->eType) { + case DRW::LINE: { + writer->writeInt16(72, 1); + DRW_Line* l = (DRW_Line*)loop->objlist.at(j); + writer->writeDouble(10, l->basePoint.x); + writer->writeDouble(20, l->basePoint.y); + writer->writeDouble(11, l->secPoint.x); + writer->writeDouble(21, l->secPoint.y); + break; } + case DRW::ARC: { + writer->writeInt16(72, 2); + DRW_Arc* a = (DRW_Arc*)loop->objlist.at(j); + writer->writeDouble(10, a->basePoint.x); + writer->writeDouble(20, a->basePoint.y); + writer->writeDouble(40, a->radious); + writer->writeDouble(50, a->staangle*ARAD); + writer->writeDouble(51, a->endangle*ARAD); + writer->writeInt16(73, a->isccw); + break; } + case DRW::ELLIPSE: { + writer->writeInt16(72, 3); + DRW_Ellipse* a = (DRW_Ellipse*)loop->objlist.at(j); + a->correctAxis(); + writer->writeDouble(10, a->basePoint.x); + writer->writeDouble(20, a->basePoint.y); + writer->writeDouble(11, a->secPoint.x); + writer->writeDouble(21, a->secPoint.y); + writer->writeDouble(40, a->ratio); + writer->writeDouble(50, a->staparam*ARAD); + writer->writeDouble(51, a->endparam*ARAD); + writer->writeInt16(73, a->isccw); + break; } + case DRW::SPLINE: + //RLZ: spline boundary writeme +// writer->writeInt16(72, 4); + break; + default: + break; + } + } + writer->writeInt16(97, 0); + } + } + writer->writeInt16(75, ent->hstyle); + writer->writeInt16(76, ent->hpattern); + if (!ent->solid){ + writer->writeDouble(52, ent->angle); + writer->writeDouble(41, ent->scale); + writer->writeInt16(77, ent->doubleflag); + writer->writeInt16(78, ent->deflines); + } +/* if (ent->deflines > 0){ + writer->writeInt16(78, ent->deflines); + }*/ + writer->writeInt32(98, 0); + } else { + //RLZ: TODO verify in acad12 + } + return true; +} + +bool dxfRW::writeLeader(DRW_Leader *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "LEADER"); + writeEntity(ent); + writer->writeString(100, "AcDbLeader"); + writer->writeUtf8String(3, ent->style); + writer->writeInt16(71, ent->arrow); + writer->writeInt16(72, ent->leadertype); + writer->writeInt16(73, ent->flag); + writer->writeInt16(74, ent->hookline); + writer->writeInt16(75, ent->hookflag); + writer->writeDouble(40, ent->textheight); + writer->writeDouble(41, ent->textwidth); + writer->writeDouble(76, ent->vertnum); + writer->writeDouble(76, ent->vertexlist.size()); + for (unsigned int i=0; ivertexlist.size(); i++) { + DRW_Coord *vert = ent->vertexlist.at(i); + writer->writeDouble(10, vert->x); + writer->writeDouble(20, vert->y); + writer->writeDouble(30, vert->z); + } + } else { + //RLZ: todo not supported by acad 12 saved as unnamed block + } + return true; +} +bool dxfRW::writeDimension(DRW_Dimension *ent) { + if (version > DRW::AC1009) { + writer->writeString(0, "DIMENSION"); + writeEntity(ent); + writer->writeString(100, "AcDbDimension"); + if (!ent->getName().empty()){ + writer->writeString(2, ent->getName()); + } + writer->writeDouble(10, ent->getDefPoint().x); + writer->writeDouble(20, ent->getDefPoint().y); + writer->writeDouble(30, ent->getDefPoint().z); + writer->writeDouble(11, ent->getTextPoint().x); + writer->writeDouble(21, ent->getTextPoint().y); + writer->writeDouble(31, ent->getTextPoint().z); + if ( !(ent->type & 32)) + ent->type = ent->type +32; + writer->writeInt16(70, ent->type); + if ( !(ent->getText().empty()) ) + writer->writeUtf8String(1, ent->getText()); + writer->writeInt16(71, ent->getAlign()); + if ( ent->getTextLineStyle() != 1) + writer->writeInt16(72, ent->getTextLineStyle()); + if ( ent->getTextLineFactor() != 1) + writer->writeDouble(41, ent->getTextLineFactor()); + writer->writeUtf8String(3, ent->getStyle()); + if ( ent->getTextLineFactor() != 0) + writer->writeDouble(53, ent->getDir()); + writer->writeDouble(210, ent->getExtrusion().x); + writer->writeDouble(220, ent->getExtrusion().y); + writer->writeDouble(230, ent->getExtrusion().z); + if ( ent->hasActualMeasurement()) + writer->writeDouble(42, ent->getActualMeasurement()); + + switch (ent->eType) { + case DRW::DIMALIGNED: + case DRW::DIMLINEAR: { + DRW_DimAligned * dd = (DRW_DimAligned*)ent; + writer->writeString(100, "AcDbAlignedDimension"); + DRW_Coord crd = dd->getClonepoint(); + if (crd.x != 0 || crd.y != 0 || crd.z != 0) { + writer->writeDouble(12, crd.x); + writer->writeDouble(22, crd.y); + writer->writeDouble(32, crd.z); + } + writer->writeDouble(13, dd->getDef1Point().x); + writer->writeDouble(23, dd->getDef1Point().y); + writer->writeDouble(33, dd->getDef1Point().z); + writer->writeDouble(14, dd->getDef2Point().x); + writer->writeDouble(24, dd->getDef2Point().y); + writer->writeDouble(34, dd->getDef2Point().z); + if (ent->eType == DRW::DIMLINEAR) { + DRW_DimLinear * dl = (DRW_DimLinear*)ent; + if (dl->getAngle() != 0) + writer->writeDouble(50, dl->getAngle()); + if (dl->getOblique() != 0) + writer->writeDouble(52, dl->getOblique()); + writer->writeString(100, "AcDbRotatedDimension"); + } + break; } + case DRW::DIMRADIAL: { + DRW_DimRadial * dd = (DRW_DimRadial*)ent; + writer->writeString(100, "AcDbRadialDimension"); + writer->writeDouble(15, dd->getDiameterPoint().x); + writer->writeDouble(25, dd->getDiameterPoint().y); + writer->writeDouble(35, dd->getDiameterPoint().z); + writer->writeDouble(40, dd->getLeaderLength()); + break; } + case DRW::DIMDIAMETRIC: { + DRW_DimDiametric * dd = (DRW_DimDiametric*)ent; + writer->writeString(100, "AcDbDiametricDimension"); + writer->writeDouble(15, dd->getDiameter1Point().x); + writer->writeDouble(25, dd->getDiameter1Point().y); + writer->writeDouble(35, dd->getDiameter1Point().z); + writer->writeDouble(40, dd->getLeaderLength()); + break; } + case DRW::DIMANGULAR: { + DRW_DimAngular * dd = (DRW_DimAngular*)ent; + writer->writeString(100, "AcDb2LineAngularDimension"); + writer->writeDouble(13, dd->getFirstLine1().x); + writer->writeDouble(23, dd->getFirstLine1().y); + writer->writeDouble(33, dd->getFirstLine1().z); + writer->writeDouble(14, dd->getFirstLine2().x); + writer->writeDouble(24, dd->getFirstLine2().y); + writer->writeDouble(34, dd->getFirstLine2().z); + writer->writeDouble(15, dd->getSecondLine1().x); + writer->writeDouble(25, dd->getSecondLine1().y); + writer->writeDouble(35, dd->getSecondLine1().z); + writer->writeDouble(16, dd->getDimPoint().x); + writer->writeDouble(26, dd->getDimPoint().y); + writer->writeDouble(36, dd->getDimPoint().z); + break; } + case DRW::DIMANGULAR3P: { + DRW_DimAngular3p * dd = (DRW_DimAngular3p*)ent; + writer->writeDouble(13, dd->getFirstLine().x); + writer->writeDouble(23, dd->getFirstLine().y); + writer->writeDouble(33, dd->getFirstLine().z); + writer->writeDouble(14, dd->getSecondLine().x); + writer->writeDouble(24, dd->getSecondLine().y); + writer->writeDouble(34, dd->getSecondLine().z); + writer->writeDouble(15, dd->getVertexPoint().x); + writer->writeDouble(25, dd->getVertexPoint().y); + writer->writeDouble(35, dd->getVertexPoint().z); + break; } + case DRW::DIMORDINATE: { + DRW_DimOrdinate * dd = (DRW_DimOrdinate*)ent; + writer->writeString(100, "AcDbOrdinateDimension"); + writer->writeDouble(13, dd->getFirstLine().x); + writer->writeDouble(23, dd->getFirstLine().y); + writer->writeDouble(33, dd->getFirstLine().z); + writer->writeDouble(14, dd->getSecondLine().x); + writer->writeDouble(24, dd->getSecondLine().y); + writer->writeDouble(34, dd->getSecondLine().z); + break; } + default: + break; + } + } else { + //RLZ: todo not supported by acad 12 saved as unnamed block + } + return true; +} + +bool dxfRW::writeInsert(DRW_Insert *ent){ + writer->writeString(0, "INSERT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockReference"); + writer->writeUtf8String(2, ent->name); + } else + writer->writeUtf8Caps(2, ent->name); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(41, ent->xscale); + writer->writeDouble(42, ent->yscale); + writer->writeDouble(43, ent->zscale); + writer->writeDouble(50, (ent->angle)*ARAD); //in dxf angle is writed in degrees + writer->writeInt16(70, ent->colcount); + writer->writeInt16(71, ent->rowcount); + writer->writeDouble(44, ent->colspace); + writer->writeDouble(45, ent->rowspace); + return true; +} + +bool dxfRW::writeText(DRW_Text *ent){ + writer->writeString(0, "TEXT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbText"); + } +// writer->writeDouble(39, ent->thickness); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->height); + writer->writeUtf8String(1, ent->text); + writer->writeDouble(50, ent->angle); + writer->writeDouble(41, ent->widthscale); + writer->writeDouble(51, ent->oblique); + if (version > DRW::AC1009) + writer->writeUtf8String(7, ent->style); + else + writer->writeUtf8Caps(7, ent->style); + writer->writeInt16(71, ent->textgen); + if (ent->alignH != DRW_Text::HLeft) { + writer->writeInt16(72, ent->alignH); + } + if (ent->alignH != DRW_Text::HLeft || ent->alignV != DRW_Text::VBaseLine) { + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + } + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbText"); + } + if (ent->alignV != DRW_Text::VBaseLine) { + writer->writeInt16(73, ent->alignV); + } + return true; +} + +bool dxfRW::writeMText(DRW_MText *ent){ + if (version > DRW::AC1009) { + writer->writeString(0, "MTEXT"); + writeEntity(ent); + writer->writeString(100, "AcDbMText"); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->height); + writer->writeDouble(41, ent->widthscale); + writer->writeInt16(71, ent->textgen); + writer->writeInt16(72, ent->alignH); + std::string text = writer->fromUtf8String(ent->text); + + int i; + for(i =0; (text.size()-i) > 250; ) { + writer->writeString(3, text.substr(i, 250)); + i +=250; + } + writer->writeString(1, text.substr(i)); + writer->writeString(7, ent->style); + writer->writeDouble(210, ent->extPoint.x); + writer->writeDouble(220, ent->extPoint.y); + writer->writeDouble(230, ent->extPoint.z); + writer->writeDouble(50, ent->angle); + writer->writeInt16(73, ent->alignV); + writer->writeDouble(44, ent->interlin); +//RLZ ... 11, 21, 31 needed? + } else { + //RLZ: TODO convert mtext in text lines (not exist in acad 12) + } + return true; +} + +bool dxfRW::writeViewport(DRW_Viewport *ent) { + writer->writeString(0, "VIEWPORT"); + writeEntity(ent); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbViewport"); + } + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + if (ent->basePoint.z != 0.0) + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(40, ent->pswidth); + writer->writeDouble(41, ent->psheight); + writer->writeInt16(68, ent->vpstatus); + writer->writeInt16(69, ent->vpID); + writer->writeDouble(12, ent->centerPX);//RLZ: verify if exist in V12 + writer->writeDouble(22, ent->centerPY);//RLZ: verify if exist in V12 + return true; +} + +DRW_ImageDef* dxfRW::writeImage(DRW_Image *ent, std::string name){ + if (version > DRW::AC1009) { + //search if exist imagedef with this mane (image inserted more than 1 time) + //RLZ: imagedef_reactor seem needed to read in acad + DRW_ImageDef *id = NULL; + for (unsigned int i=0; iname == name ) { + id = imageDef.at(i); + continue; + } + } + if (id == NULL) { + id = new DRW_ImageDef(); + imageDef.push_back(id); + id->handle = ++entCount; + } + id->name = name; + std::string idReactor = toHexStr(++entCount); + + writer->writeString(0, "IMAGE"); + writeEntity(ent); + writer->writeString(100, "AcDbRasterImage"); + writer->writeDouble(10, ent->basePoint.x); + writer->writeDouble(20, ent->basePoint.y); + writer->writeDouble(30, ent->basePoint.z); + writer->writeDouble(11, ent->secPoint.x); + writer->writeDouble(21, ent->secPoint.y); + writer->writeDouble(31, ent->secPoint.z); + writer->writeDouble(12, ent->vVector.x); + writer->writeDouble(22, ent->vVector.y); + writer->writeDouble(32, ent->vVector.z); + writer->writeDouble(13, ent->sizeu); + writer->writeDouble(23, ent->sizev); + writer->writeString(340, toHexStr(id->handle)); + writer->writeInt16(70, 1); + writer->writeInt16(280, ent->clip); + writer->writeInt16(281, ent->brightness); + writer->writeInt16(282, ent->contrast); + writer->writeInt16(283, ent->fade); + writer->writeString(360, idReactor); + id->reactors[idReactor] = toHexStr(ent->handle); + return id; + } + return NULL; //not exist in acad 12 +} + +bool dxfRW::writeBlockRecord(std::string name){ + if (version > DRW::AC1009) { + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, toHexStr(++entCount)); + + blockMap[name] = entCount; + entCount = 2+entCount;//reserve 2 for BLOCK & ENDBLOCK + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeUtf8String(2, name); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + } + return true; +} + +bool dxfRW::writeBlock(DRW_Block *bk){ + if (writingBlock) { + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(currHandle+2)); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockEnd"); + } + } + writingBlock = true; + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + currHandle = (*(blockMap.find(bk->name))).second; + writer->writeString(5, toHexStr(currHandle+1)); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeUtf8String(2, bk->name); + } else + writer->writeUtf8Caps(2, bk->name); + writer->writeInt16(70, bk->flags); + writer->writeDouble(10, bk->basePoint.x); + writer->writeDouble(20, bk->basePoint.y); + if (bk->basePoint.z != 0.0) { + writer->writeDouble(30, bk->basePoint.z); + } + if (version > DRW::AC1009) + writer->writeUtf8String(3, bk->name); + else + writer->writeUtf8Caps(3, bk->name); + writer->writeString(1, ""); + + return true; +} + +bool dxfRW::writeTables() { + writer->writeString(0, "TABLE"); + writer->writeString(2, "VPORT"); + if (version > DRW::AC1009) { + writer->writeString(5, "8"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def +/*** VPORT ***/ + dimstyleStd =false; + iface->writeVports(); + if (!dimstyleStd) { + DRW_Vport portact; + portact.name = "*ACTIVE"; + writeVport(&portact); + } + writer->writeString(0, "ENDTAB"); +/*** LTYPE ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "5"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 4); //end table def +//Mandatory linetypes + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "14"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "ByBlock"); + } else + writer->writeString(2, "BYBLOCK"); + writer->writeInt16(70, 0); + writer->writeString(3, ""); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); + + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "15"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "ByLayer"); + } else + writer->writeString(2, "BYLAYER"); + writer->writeInt16(70, 0); + writer->writeString(3, ""); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); + + writer->writeString(0, "LTYPE"); + if (version > DRW::AC1009) { + writer->writeString(5, "16"); + if (version > DRW::AC1014) { + writer->writeString(330, "5"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbLinetypeTableRecord"); + writer->writeString(2, "Continuous"); + } else { + writer->writeString(2, "CONTINUOUS"); + } + writer->writeInt16(70, 0); + writer->writeString(3, "Solid line"); + writer->writeInt16(72, 65); + writer->writeInt16(73, 0); + writer->writeDouble(40, 0.0); +//Aplication linetypes + iface->writeLTypes(); + writer->writeString(0, "ENDTAB"); +/*** LAYER ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "LAYER"); + if (version > DRW::AC1009) { + writer->writeString(5, "2"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + wlayer0 =false; + iface->writeLayers(); + if (!wlayer0) { + DRW_Layer lay0; + lay0.name = "0"; + writeLayer(&lay0); + } + writer->writeString(0, "ENDTAB"); +/*** STYLE ***/ + writer->writeString(0, "TABLE"); + writer->writeString(2, "STYLE"); + if (version > DRW::AC1009) { + writer->writeString(5, "3"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 3); //end table def + dimstyleStd =false; + iface->writeTextstyles(); + if (!dimstyleStd) { + DRW_Textstyle tsty; + tsty.name = "Standard"; + writeTextstyle(&tsty); + } + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "VIEW"); + if (version > DRW::AC1009) { + writer->writeString(5, "6"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 0); //end table def + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "UCS"); + if (version > DRW::AC1009) { + writer->writeString(5, "7"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 0); //end table def + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, "9"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + writer->writeString(0, "APPID"); + if (version > DRW::AC1009) { + writer->writeString(5, "12"); + if (version > DRW::AC1014) { + writer->writeString(330, "9"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbRegAppTableRecord"); + } + writer->writeString(2, "ACAD"); + writer->writeInt16(70, 0); + iface->writeAppId(); + writer->writeString(0, "ENDTAB"); + + writer->writeString(0, "TABLE"); + writer->writeString(2, "DIMSTYLE"); + if (version > DRW::AC1009) { + writer->writeString(5, "A"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + } + writer->writeInt16(70, 1); //end table def + if (version > DRW::AC1014) { + writer->writeString(100, "AcDbDimStyleTable"); + writer->writeInt16(71, 1); //end table def + } + dimstyleStd =false; + iface->writeDimstyles(); + if (!dimstyleStd) { + DRW_Dimstyle dsty; + dsty.name = "Standard"; + writeDimstyle(&dsty); + } + writer->writeString(0, "ENDTAB"); + + if (version > DRW::AC1009) { + writer->writeString(0, "TABLE"); + writer->writeString(2, "BLOCK_RECORD"); + writer->writeString(5, "1"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbSymbolTable"); + writer->writeInt16(70, 2); //end table def + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, "1F"); + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeString(2, "*Model_Space"); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + writer->writeString(0, "BLOCK_RECORD"); + writer->writeString(5, "1E"); + if (version > DRW::AC1014) { + writer->writeString(330, "1"); + } + writer->writeString(100, "AcDbSymbolTableRecord"); + writer->writeString(100, "AcDbBlockTableRecord"); + writer->writeString(2, "*Paper_Space"); + if (version > DRW::AC1018) { + // writer->writeInt16(340, 22); + writer->writeInt16(70, 0); + writer->writeInt16(280, 1); + writer->writeInt16(281, 0); + } + } + /* allways call writeBlockRecords to iface for prepare unnamed blocks */ + iface->writeBlockRecords(); + if (version > DRW::AC1009) { + writer->writeString(0, "ENDTAB"); + } +return true; +} + +bool dxfRW::writeBlocks() { + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + writer->writeString(5, "20"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeString(2, "*Model_Space"); + } else + writer->writeString(2, "$MODEL_SPACE"); + writer->writeInt16(70, 0); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + if (version > DRW::AC1009) + writer->writeString(3, "*Model_Space"); + else + writer->writeString(3, "$MODEL_SPACE"); + writer->writeString(1, ""); + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, "21"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + + writer->writeString(0, "BLOCK"); + if (version > DRW::AC1009) { + writer->writeString(5, "1C"); + if (version > DRW::AC1014) { + writer->writeString(330, "1B"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) { + writer->writeString(100, "AcDbBlockBegin"); + writer->writeString(2, "*Paper_Space"); + } else + writer->writeString(2, "$PAPER_SPACE"); + writer->writeInt16(70, 0); + writer->writeDouble(10, 0.0); + writer->writeDouble(20, 0.0); + writer->writeDouble(30, 0.0); + if (version > DRW::AC1009) + writer->writeString(3, "*Paper_Space"); + else + writer->writeString(3, "$PAPER_SPACE"); + writer->writeString(1, ""); + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, "1D"); + if (version > DRW::AC1014) { + writer->writeString(330, "1F"); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + writingBlock = false; + iface->writeBlocks(); + if (writingBlock) { + writingBlock = false; + writer->writeString(0, "ENDBLK"); + if (version > DRW::AC1009) { + writer->writeString(5, toHexStr(currHandle+2)); +// writer->writeString(5, "1D"); + if (version > DRW::AC1014) { + writer->writeString(330, toHexStr(currHandle)); + } + writer->writeString(100, "AcDbEntity"); + } + writer->writeString(8, "0"); + if (version > DRW::AC1009) + writer->writeString(100, "AcDbBlockEnd"); + } + return true; +} + +bool dxfRW::writeObjects() { + writer->writeString(0, "DICTIONARY"); + std::string imgDictH; + writer->writeString(5, "C"); + if (version > DRW::AC1014) { + writer->writeString(330, "0"); + } + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); + writer->writeString(3, "ACAD_GROUP"); + writer->writeString(350, "D"); + if (imageDef.size() != 0) { + writer->writeString(3, "ACAD_IMAGE_DICT"); + imgDictH = toHexStr(++entCount); + writer->writeString(350, imgDictH); + } + writer->writeString(0, "DICTIONARY"); + writer->writeString(5, "D"); + writer->writeString(330, "C"); + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); +//write IMAGEDEF_REACTOR + for (unsigned int i=0; i::iterator it; + for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + writer->writeString(0, "IMAGEDEF_REACTOR"); + writer->writeString(5, (*it).first); + writer->writeString(330, (*it).second); + writer->writeString(100, "AcDbRasterImageDefReactor"); + writer->writeInt16(90, 2); //version 2=R14 to v2010 + writer->writeString(330, (*it).second); + } + } + if (imageDef.size() != 0) { + writer->writeString(0, "DICTIONARY"); + writer->writeString(5, imgDictH); + writer->writeString(330, "C"); + writer->writeString(100, "AcDbDictionary"); + writer->writeInt16(281, 1); + for (unsigned int i=0; iname.find_last_of("/\\"); + f2 =imageDef.at(i)->name.find_last_of('.'); + ++f1; + writer->writeString(3, imageDef.at(i)->name.substr(f1,f2-f1)); + writer->writeString(350, toHexStr(imageDef.at(i)->handle) ); + } + } + for (unsigned int i=0; iwriteString(0, "IMAGEDEF"); + writer->writeString(5, toHexStr(id->handle) ); + if (version > DRW::AC1014) { +// writer->writeString(330, "0"); handle to DICTIONARY + } + writer->writeString(102, "{ACAD_REACTORS"); + std::map::iterator it; + for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + writer->writeString(330, (*it).first); + } + writer->writeString(102, "}"); + writer->writeString(100, "AcDbRasterImageDef"); + writer->writeInt16(90, 0); //version 0=R14 to v2010 + writer->writeUtf8String(1, id->name); + writer->writeDouble(10, id->u); + writer->writeDouble(20, id->v); + writer->writeDouble(11, id->up); + writer->writeDouble(21, id->vp); + writer->writeInt16(280, id->loaded); + writer->writeInt16(281, id->resolution); + } + //no more needed imageDef, delete it + while (!imageDef.empty()) { + imageDef.pop_back(); + } + + return true; +} + +bool dxfRW::writeExtData(const std::vector &ed){ + for (std::vector::const_iterator it=ed.begin(); it!=ed.end(); ++it){ + switch ((*it)->code) { + case 1000: + case 1001: + case 1002: + case 1003: + case 1004: + case 1005: + {int cc = (*it)->code; + if ((*it)->type == DRW_Variant::STRING) + writer->writeUtf8String(cc, *(*it)->content.s); +// writer->writeUtf8String((*it)->code, (*it)->content.s); + break;} + case 1010: + case 1011: + case 1012: + case 1013: + if ((*it)->type == DRW_Variant::COORD) { + writer->writeDouble((*it)->code, (*it)->content.v->x); + writer->writeDouble((*it)->code+10 , (*it)->content.v->y); + writer->writeDouble((*it)->code+20 , (*it)->content.v->z); + } + break; + case 1040: + case 1041: + case 1042: + if ((*it)->type == DRW_Variant::DOUBLE) + writer->writeDouble((*it)->code, (*it)->content.d); + break; + case 1070: + if ((*it)->type == DRW_Variant::INTEGER) + writer->writeInt16((*it)->code, (*it)->content.i); + break; + case 1071: + if ((*it)->type == DRW_Variant::INTEGER) + writer->writeInt32((*it)->code, (*it)->content.i); + break; + default: + break; + } + } + return true; +} + +/********* Reader Process *********/ + +bool dxfRW::processDxf() { + DRW_DBG("dxfRW::processDxf() start processing dxf\n"); + int code; + bool more = true; + std::string sectionstr; +// section = secUnknown; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG(" processDxf\n"); + if (code == 999) { + header.addComment(reader->getString()); + } else if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processDxf\n"); + if (sectionstr == "EOF") { + return true; //found EOF terminate + } + if (sectionstr == "SECTION") { + more = reader->readRec(&code); + DRW_DBG(code); DRW_DBG(" processDxf\n"); + if (!more) + return false; //wrong dxf file + if (code == 2) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processDxf\n"); + //found section, process it + if (sectionstr == "HEADER") { + processHeader(); + } else if (sectionstr == "CLASSES") { +// processClasses(); + } else if (sectionstr == "TABLES") { + processTables(); + } else if (sectionstr == "BLOCKS") { + processBlocks(); + } else if (sectionstr == "ENTITIES") { + processEntities(false); + } else if (sectionstr == "OBJECTS") { + processObjects(); + } + } + } + } +/* if (!more) + return true;*/ + } + return true; +} + +/********* Header Section *********/ + +bool dxfRW::processHeader() { + DRW_DBG("dxfRW::processHeader\n"); + int code; + std::string sectionstr; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG(" processHeader\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + if (sectionstr == "ENDSEC") { + iface->addHeader(&header); + return true; //found ENDSEC terminate + } + } else header.parseCode(code, reader); + } + return true; +} + +/********* Tables Section *********/ + +bool dxfRW::processTables() { + DRW_DBG("dxfRW::processTables\n"); + int code; + std::string sectionstr; + bool more = true; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + if (sectionstr == "TABLE") { + more = reader->readRec(&code); + DRW_DBG(code); DRW_DBG("\n"); + if (!more) + return false; //wrong dxf file + if (code == 2) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG(" processHeader\n\n"); + //found section, process it + if (sectionstr == "LTYPE") { + processLType(); + } else if (sectionstr == "LAYER") { + processLayer(); + } else if (sectionstr == "STYLE") { + processTextStyle(); + } else if (sectionstr == "VPORT") { + processVports(); + } else if (sectionstr == "VIEW") { +// processView(); + } else if (sectionstr == "UCS") { +// processUCS(); + } else if (sectionstr == "APPID") { + processAppId(); + } else if (sectionstr == "DIMSTYLE") { + processDimStyle(); + } else if (sectionstr == "BLOCK_RECORD") { +// processBlockRecord(); + } + } + } else if (sectionstr == "ENDSEC") { + return true; //found ENDSEC terminate + } + } + } + return true; +} + +bool dxfRW::processLType() { + DRW_DBG("dxfRW::processLType\n"); + int code; + std::string sectionstr; + bool reading = false; + DRW_LType ltype; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) { + ltype.update(); + iface->addLType(ltype); + } + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "LTYPE") { + reading = true; + ltype.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + ltype.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processLayer() { + DRW_DBG("dxfRW::processLayer\n"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Layer layer; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addLayer(layer); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "LAYER") { + reading = true; + layer.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + layer.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processDimStyle() { + DRW_DBG("dxfRW::processDimStyle"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Dimstyle dimSty; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addDimStyle(dimSty); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "DIMSTYLE") { + reading = true; + dimSty.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + dimSty.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processTextStyle(){ + DRW_DBG("dxfRW::processTextStyle"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Textstyle TxtSty; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addTextStyle(TxtSty); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "STYLE") { + reading = true; + TxtSty.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + TxtSty.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processVports(){ + DRW_DBG("dxfRW::processVports"); + int code; + std::string sectionstr; + bool reading = false; + DRW_Vport vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addVport(vp); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "VPORT") { + reading = true; + vp.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + vp.parseCode(code, reader); + } + return true; +} + +bool dxfRW::processAppId(){ + DRW_DBG("dxfRW::processAppId"); + int code; + std::string sectionstr; + bool reading = false; + DRW_AppId vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + if (reading) + iface->addAppId(vp); + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "APPID") { + reading = true; + vp.reset(); + } else if (sectionstr == "ENDTAB") { + return true; //found ENDTAB terminate + } + } else if (reading) + vp.parseCode(code, reader); + } + return true; +} + +/********* Block Section *********/ + +bool dxfRW::processBlocks() { + DRW_DBG("dxfRW::processBlocks\n"); + int code; + std::string sectionstr; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + if (code == 0) { + sectionstr = reader->getString(); + DRW_DBG(sectionstr); DRW_DBG("\n"); + if (sectionstr == "BLOCK") { + processBlock(); + } else if (sectionstr == "ENDSEC") { + return true; //found ENDSEC terminate + } + } + } + return true; +} + +bool dxfRW::processBlock() { + DRW_DBG("dxfRW::processBlock"); + int code; + DRW_Block block; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addBlock(block); + if (nextentity == "ENDBLK") { + iface->endBlock(); + return true; //found ENDBLK, terminate + } else { + processEntities(true); + iface->endBlock(); + return true; //found ENDBLK, terminate + } + } + default: + block.parseCode(code, reader); + break; + } + } + return true; +} + + +/********* Entities Section *********/ + +bool dxfRW::processEntities(bool isblock) { + DRW_DBG("dxfRW::processEntities\n"); + int code; + if (!reader->readRec(&code)){ + return false; + } + bool next = true; + if (code == 0) { + nextentity = reader->getString(); + } else if (!isblock) { + return false; //first record in entities is 0 + } + do { + if (nextentity == "ENDSEC" || nextentity == "ENDBLK") { + return true; //found ENDSEC or ENDBLK terminate + } else if (nextentity == "POINT") { + processPoint(); + } else if (nextentity == "LINE") { + processLine(); + } else if (nextentity == "CIRCLE") { + processCircle(); + } else if (nextentity == "ARC") { + processArc(); + } else if (nextentity == "ELLIPSE") { + processEllipse(); + } else if (nextentity == "TRACE") { + processTrace(); + } else if (nextentity == "SOLID") { + processSolid(); + } else if (nextentity == "INSERT") { + processInsert(); + } else if (nextentity == "LWPOLYLINE") { + processLWPolyline(); + } else if (nextentity == "POLYLINE") { + processPolyline(); + } else if (nextentity == "TEXT") { + processText(); + } else if (nextentity == "MTEXT") { + processMText(); + } else if (nextentity == "HATCH") { + processHatch(); + } else if (nextentity == "SPLINE") { + processSpline(); + } else if (nextentity == "3DFACE") { + process3dface(); + } else if (nextentity == "VIEWPORT") { + processViewport(); + } else if (nextentity == "IMAGE") { + processImage(); + } else if (nextentity == "DIMENSION") { + processDimension(); + } else if (nextentity == "LEADER") { + processLeader(); + } else if (nextentity == "RAY") { + processRay(); + } else if (nextentity == "XLINE") { + processXline(); + } else { + if (reader->readRec(&code)){ + if (code == 0) + nextentity = reader->getString(); + } else + return false; //end of file without ENDSEC + } + + } while (next); + return true; +} + +bool dxfRW::processEllipse() { + DRW_DBG("dxfRW::processEllipse"); + int code; + DRW_Ellipse ellipse; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + ellipse.applyExtrusion(); + iface->addEllipse(ellipse); + return true; //found new entity or ENDSEC, terminate + } + default: + ellipse.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processTrace() { + DRW_DBG("dxfRW::processTrace"); + int code; + DRW_Trace trace; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + trace.applyExtrusion(); + iface->addTrace(trace); + return true; //found new entity or ENDSEC, terminate + } + default: + trace.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processSolid() { + DRW_DBG("dxfRW::processSolid"); + int code; + DRW_Solid solid; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + solid.applyExtrusion(); + iface->addSolid(solid); + return true; //found new entity or ENDSEC, terminate + } + default: + solid.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::process3dface() { + DRW_DBG("dxfRW::process3dface"); + int code; + DRW_3Dface face; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->add3dFace(face); + return true; //found new entity or ENDSEC, terminate + } + default: + face.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processViewport() { + DRW_DBG("dxfRW::processViewport"); + int code; + DRW_Viewport vp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addViewport(vp); + return true; //found new entity or ENDSEC, terminate + } + default: + vp.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processPoint() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Point point; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addPoint(point); + return true; //found new entity or ENDSEC, terminate + } + default: + point.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLine() { + DRW_DBG("dxfRW::processLine\n"); + int code; + DRW_Line line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addLine(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processRay() { + DRW_DBG("dxfRW::processRay\n"); + int code; + DRW_Ray line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addRay(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processXline() { + DRW_DBG("dxfRW::processXline\n"); + int code; + DRW_Xline line; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addXline(line); + return true; //found new entity or ENDSEC, terminate + } + default: + line.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processCircle() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Circle circle; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + circle.applyExtrusion(); + iface->addCircle(circle); + return true; //found new entity or ENDSEC, terminate + } + default: + circle.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processArc() { + DRW_DBG("dxfRW::processPoint\n"); + int code; + DRW_Arc arc; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + arc.applyExtrusion(); + iface->addArc(arc); + return true; //found new entity or ENDSEC, terminate + } + default: + arc.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processInsert() { + DRW_DBG("dxfRW::processInsert"); + int code; + DRW_Insert insert; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addInsert(insert); + return true; //found new entity or ENDSEC, terminate + } + default: + insert.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLWPolyline() { + DRW_DBG("dxfRW::processLWPolyline"); + int code; + DRW_LWPolyline pl; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (applyExt) + pl.applyExtrusion(); + iface->addLWPolyline(pl); + return true; //found new entity or ENDSEC, terminate + } + default: + pl.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processPolyline() { + DRW_DBG("dxfRW::processPolyline"); + int code; + DRW_Polyline pl; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (nextentity != "VERTEX") { + iface->addPolyline(pl); + return true; //found new entity or ENDSEC, terminate + } else { + processVertex(&pl); + } + } + default: + pl.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processVertex(DRW_Polyline *pl) { + DRW_DBG("dxfRW::processVertex"); + int code; + DRW_Vertex *v = new DRW_Vertex(); + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + pl->appendVertex(v); + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + if (nextentity == "SEQEND") { + return true; //found SEQEND no more vertex, terminate + } else if (nextentity == "VERTEX"){ + v = new DRW_Vertex(); //another vertex + } + } + default: + v->parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processText() { + DRW_DBG("dxfRW::processText"); + int code; + DRW_Text txt; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addText(txt); + return true; //found new entity or ENDSEC, terminate + } + default: + txt.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processMText() { + DRW_DBG("dxfRW::processMText"); + int code; + DRW_MText txt; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + txt.updateAngle(); + iface->addMText(txt); + return true; //found new entity or ENDSEC, terminate + } + default: + txt.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processHatch() { + DRW_DBG("dxfRW::processHatch"); + int code; + DRW_Hatch hatch; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addHatch(&hatch); + return true; //found new entity or ENDSEC, terminate + } + default: + hatch.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processSpline() { + DRW_DBG("dxfRW::processSpline"); + int code; + DRW_Spline sp; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addSpline(&sp); + return true; //found new entity or ENDSEC, terminate + } + default: + sp.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processImage() { + DRW_DBG("dxfRW::processImage"); + int code; + DRW_Image img; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addImage(&img); + return true; //found new entity or ENDSEC, terminate + } + default: + img.parseCode(code, reader); + break; + } + } + return true; +} + + +bool dxfRW::processDimension() { + DRW_DBG("dxfRW::processDimension"); + int code; + DRW_Dimension dim; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + int type = dim.type & 0x0F; + switch (type) { + case 0: { + DRW_DimLinear d(dim); + iface->addDimLinear(&d); + break; } + case 1: { + DRW_DimAligned d(dim); + iface->addDimAlign(&d); + break; } + case 2: { + DRW_DimAngular d(dim); + iface->addDimAngular(&d); + break;} + case 3: { + DRW_DimDiametric d(dim); + iface->addDimDiametric(&d); + break; } + case 4: { + DRW_DimRadial d(dim); + iface->addDimRadial(&d); + break; } + case 5: { + DRW_DimAngular3p d(dim); + iface->addDimAngular3P(&d); + break; } + case 6: { + DRW_DimOrdinate d(dim); + iface->addDimOrdinate(&d); + break; } + } + return true; //found new entity or ENDSEC, terminate + } + default: + dim.parseCode(code, reader); + break; + } + } + return true; +} + +bool dxfRW::processLeader() { + DRW_DBG("dxfRW::processLeader"); + int code; + DRW_Leader leader; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->addLeader(&leader); + return true; //found new entity or ENDSEC, terminate + } + default: + leader.parseCode(code, reader); + break; + } + } + return true; +} + + +/********* Objects Section *********/ + +bool dxfRW::processObjects() { + DRW_DBG("dxfRW::processObjects\n"); + int code; + if (!reader->readRec(&code)){ + return false; + } + bool next = true; + if (code == 0) { + nextentity = reader->getString(); + } else { + return false; //first record in objects is 0 + } + do { + if (nextentity == "ENDSEC") { + return true; //found ENDSEC terminate + } else if (nextentity == "IMAGEDEF") { + processImageDef(); + } else { + if (reader->readRec(&code)){ + if (code == 0) + nextentity = reader->getString(); + } else + return false; //end of file without ENDSEC + } + + } while (next); + return true; +} + +bool dxfRW::processImageDef() { + DRW_DBG("dxfRW::processImageDef"); + int code; + DRW_ImageDef img; + while (reader->readRec(&code)) { + DRW_DBG(code); DRW_DBG("\n"); + switch (code) { + case 0: { + nextentity = reader->getString(); + DRW_DBG(nextentity); DRW_DBG("\n"); + iface->linkImage(&img); + return true; //found new entity or ENDSEC, terminate + } + default: + img.parseCode(code, reader); + break; + } + } + return true; +} + +/** utility function + * convert a int to string in hex + **/ +std::string dxfRW::toHexStr(int n){ +#if defined(__APPLE__) + char buffer[9]= {'\0'}; + snprintf(buffer,9, "%X", n); + return std::string(buffer); +#else + std::ostringstream Convert; + Convert << std::uppercase << std::hex << n; + return Convert.str(); +#endif +} diff --git a/extlib/libdxfrw/libdxfrw.h b/extlib/libdxfrw/libdxfrw.h new file mode 100644 index 0000000..b3de272 --- /dev/null +++ b/extlib/libdxfrw/libdxfrw.h @@ -0,0 +1,148 @@ +/****************************************************************************** +** libDXFrw - Library to read/write DXF files (ascii & binary) ** +** ** +** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** +** ** +** This library is free software, licensed under the terms of the GNU ** +** General Public License as published by the Free Software Foundation, ** +** either version 2 of the License, or (at your option) any later version. ** +** You should have received a copy of the GNU General Public License ** +** along with this program. If not, see . ** +******************************************************************************/ + +#ifndef LIBDXFRW_H +#define LIBDXFRW_H + +#include +#include "drw_entities.h" +#include "drw_objects.h" +#include "drw_header.h" +#include "drw_interface.h" + + +class dxfReader; +class dxfWriter; + +class dxfRW { +public: + dxfRW(); + ~dxfRW(); + void setDebug(DRW::DBG_LEVEL lvl); + /// reads the file specified in constructor + /*! + * An interface must be provided. It is used by the class to signal various + * components being added. + * @param interface_ the interface to use + * @param ext should the extrusion be applied to convert in 2D? + * @return true for success + */ + bool read(std::istream &stream, DRW_Interface *interface_, bool ext); + void setBinary(bool b) {binFile = b;} + + bool write(std::ostream &stream, DRW_Interface *interface_, DRW::Version ver, bool bin); + bool writeLineType(DRW_LType *ent); + bool writeLayer(DRW_Layer *ent); + bool writeDimstyle(DRW_Dimstyle *ent); + bool writeTextstyle(DRW_Textstyle *ent); + bool writeVport(DRW_Vport *ent); + bool writeAppId(DRW_AppId *ent); + bool writePoint(DRW_Point *ent); + bool writeLine(DRW_Line *ent); + bool writeRay(DRW_Ray *ent); + bool writeXline(DRW_Xline *ent); + bool writeCircle(DRW_Circle *ent); + bool writeArc(DRW_Arc *ent); + bool writeEllipse(DRW_Ellipse *ent); + bool writeTrace(DRW_Trace *ent); + bool writeSolid(DRW_Solid *ent); + bool write3dface(DRW_3Dface *ent); + bool writeLWPolyline(DRW_LWPolyline *ent); + bool writePolyline(DRW_Polyline *ent); + bool writeSpline(DRW_Spline *ent); + bool writeBlockRecord(std::string name); + bool writeBlock(DRW_Block *ent); + bool writeInsert(DRW_Insert *ent); + bool writeMText(DRW_MText *ent); + bool writeText(DRW_Text *ent); + bool writeHatch(DRW_Hatch *ent); + bool writeViewport(DRW_Viewport *ent); + DRW_ImageDef *writeImage(DRW_Image *ent, std::string name); + bool writeLeader(DRW_Leader *ent); + bool writeDimension(DRW_Dimension *ent); + void setEllipseParts(int parts){elParts = parts;} /*!< set parts munber when convert ellipse to polyline */ + +private: + /// used by read() to parse the content of the file + bool processDxf(); + bool processHeader(); + bool processTables(); + bool processBlocks(); + bool processBlock(); + bool processEntities(bool isblock); + bool processObjects(); + + bool processLType(); + bool processLayer(); + bool processDimStyle(); + bool processTextStyle(); + bool processVports(); + bool processAppId(); + + bool processPoint(); + bool processLine(); + bool processRay(); + bool processXline(); + bool processCircle(); + bool processArc(); + bool processEllipse(); + bool processTrace(); + bool processSolid(); + bool processInsert(); + bool processLWPolyline(); + bool processPolyline(); + bool processVertex(DRW_Polyline* pl); + bool processText(); + bool processMText(); + bool processHatch(); + bool processSpline(); + bool process3dface(); + bool processViewport(); + bool processImage(); + bool processImageDef(); + bool processDimension(); + bool processLeader(); + +// bool writeHeader(); + bool writeEntity(DRW_Entity *ent); + bool writeTables(); + bool writeBlocks(); + bool writeObjects(); + bool writeExtData(const std::vector &ed); + /*use version from dwgutil.h*/ + std::string toHexStr(int n);//RLZ removeme + +private: + DRW::Version version; + std::string fileName; + std::string codePage; + bool binFile; + dxfReader *reader; + dxfWriter *writer; + DRW_Interface *iface; + DRW_Header header; +// int section; + std::string nextentity; + int entCount; + bool wlayer0; + bool dimstyleStd; + bool applyExt; + bool writingBlock; + int elParts; /*!< parts munber when convert ellipse to polyline */ + std::map blockMap; + std::vector imageDef; /*!< imageDef list */ + + int currHandle; + +}; + +#endif // LIBDXFRW_H diff --git a/include/slvs.h b/include/slvs.h new file mode 100644 index 0000000..1c97fbf --- /dev/null +++ b/include/slvs.h @@ -0,0 +1,404 @@ +/*----------------------------------------------------------------------------- + * Data structures and prototypes for slvs.lib, a geometric constraint solver. + * + * See the comments in this file, the accompanying sample code that uses + * this library, and the accompanying documentation (DOC.txt). + * + * Copyright 2009-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ + +#ifndef __SLVS_H +#define __SLVS_H + +#ifdef WIN32 +# ifdef EXPORT_DLL +# define DLL __declspec( dllexport ) +# else +# define DLL __declspec( dllimport ) +# endif +#else +# define DLL +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _MSC_VER +typedef unsigned __int32 uint32_t; +#else +#include +#endif + +typedef uint32_t Slvs_hParam; +typedef uint32_t Slvs_hEntity; +typedef uint32_t Slvs_hConstraint; +typedef uint32_t Slvs_hGroup; + +/* To obtain the 3d (not projected into a workplane) of a constraint or + * an entity, specify this instead of the workplane. */ +#define SLVS_FREE_IN_3D 0 + + +typedef struct { + Slvs_hParam h; + Slvs_hGroup group; + double val; +} Slvs_Param; + + +#define SLVS_E_POINT_IN_3D 50000 +#define SLVS_E_POINT_IN_2D 50001 + +#define SLVS_E_NORMAL_IN_3D 60000 +#define SLVS_E_NORMAL_IN_2D 60001 + +#define SLVS_E_DISTANCE 70000 + +/* The special point, normal, and distance types used for parametric step + * and repeat, extrude, and assembly are currently not exposed. Please + * contact us if you are interested in using these. */ + +#define SLVS_E_WORKPLANE 80000 +#define SLVS_E_LINE_SEGMENT 80001 +#define SLVS_E_CUBIC 80002 +#define SLVS_E_CIRCLE 80003 +#define SLVS_E_ARC_OF_CIRCLE 80004 + +typedef struct { + Slvs_hEntity h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + Slvs_hEntity point[4]; + Slvs_hEntity normal; + Slvs_hEntity distance; + + Slvs_hParam param[4]; +} Slvs_Entity; + +#define SLVS_C_POINTS_COINCIDENT 100000 +#define SLVS_C_PT_PT_DISTANCE 100001 +#define SLVS_C_PT_PLANE_DISTANCE 100002 +#define SLVS_C_PT_LINE_DISTANCE 100003 +#define SLVS_C_PT_FACE_DISTANCE 100004 +#define SLVS_C_PT_IN_PLANE 100005 +#define SLVS_C_PT_ON_LINE 100006 +#define SLVS_C_PT_ON_FACE 100007 +#define SLVS_C_EQUAL_LENGTH_LINES 100008 +#define SLVS_C_LENGTH_RATIO 100009 +#define SLVS_C_EQ_LEN_PT_LINE_D 100010 +#define SLVS_C_EQ_PT_LN_DISTANCES 100011 +#define SLVS_C_EQUAL_ANGLE 100012 +#define SLVS_C_EQUAL_LINE_ARC_LEN 100013 +#define SLVS_C_SYMMETRIC 100014 +#define SLVS_C_SYMMETRIC_HORIZ 100015 +#define SLVS_C_SYMMETRIC_VERT 100016 +#define SLVS_C_SYMMETRIC_LINE 100017 +#define SLVS_C_AT_MIDPOINT 100018 +#define SLVS_C_HORIZONTAL 100019 +#define SLVS_C_VERTICAL 100020 +#define SLVS_C_DIAMETER 100021 +#define SLVS_C_PT_ON_CIRCLE 100022 +#define SLVS_C_SAME_ORIENTATION 100023 +#define SLVS_C_ANGLE 100024 +#define SLVS_C_PARALLEL 100025 +#define SLVS_C_PERPENDICULAR 100026 +#define SLVS_C_ARC_LINE_TANGENT 100027 +#define SLVS_C_CUBIC_LINE_TANGENT 100028 +#define SLVS_C_EQUAL_RADIUS 100029 +#define SLVS_C_PROJ_PT_DISTANCE 100030 +#define SLVS_C_WHERE_DRAGGED 100031 +#define SLVS_C_CURVE_CURVE_TANGENT 100032 +#define SLVS_C_LENGTH_DIFFERENCE 100033 + +typedef struct { + Slvs_hConstraint h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + + double valA; + Slvs_hEntity ptA; + Slvs_hEntity ptB; + Slvs_hEntity entityA; + Slvs_hEntity entityB; + Slvs_hEntity entityC; + Slvs_hEntity entityD; + + int other; + int other2; +} Slvs_Constraint; + + +typedef struct { + /*** INPUT VARIABLES + * + * Here, we specify the parameters and their initial values, the entities, + * and the constraints. For example, param[] points to the array of + * parameters, which has length params, so that the last valid element + * is param[params-1]. + * + * param[] is actually an in/out variable; if the solver is successful, + * then the new values (that satisfy the constraints) are written to it. */ + Slvs_Param *param; + int params; + Slvs_Entity *entity; + int entities; + Slvs_Constraint *constraint; + int constraints; + + /* If a parameter corresponds to a point (distance, normal, etc.) being + * dragged, then specify it here. This will cause the solver to favor + * that parameter, and attempt to change it as little as possible even + * if that requires it to change other parameters more. + * + * Unused members of this array should be set to zero. */ + Slvs_hParam dragged[4]; + + /* If the solver fails, then it can determine which constraints are + * causing the problem. But this is a relatively slow process (for + * a system with n constraints, about n times as long as just solving). + * If calculateFaileds is true, then the solver will do so, otherwise + * not. */ + int calculateFaileds; + + /*** OUTPUT VARIABLES + * + * If the solver fails, then it can report which constraints are causing + * the problem. The caller should allocate the array failed[], and pass + * its size in faileds. + * + * The solver will set faileds equal to the number of problematic + * constraints, and write their Slvs_hConstraints into failed[]. To + * ensure that there is sufficient space for any possible set of + * failing constraints, faileds should be greater than or equal to + * constraints. */ + Slvs_hConstraint *failed; + int faileds; + + /* The solver indicates the number of unconstrained degrees of freedom. */ + int dof; + + /* The solver indicates whether the solution succeeded. */ +#define SLVS_RESULT_OKAY 0 +#define SLVS_RESULT_INCONSISTENT 1 +#define SLVS_RESULT_DIDNT_CONVERGE 2 +#define SLVS_RESULT_TOO_MANY_UNKNOWNS 3 + int result; +} Slvs_System; + +DLL void Slvs_Solve(Slvs_System *sys, Slvs_hGroup hg); + + +/* Our base coordinate system has basis vectors + * (1, 0, 0) (0, 1, 0) (0, 0, 1) + * A unit quaternion defines a rotation to a new coordinate system with + * basis vectors + * U V N + * which these functions compute from the quaternion. */ +DLL void Slvs_QuaternionU(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionV(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionN(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); + +/* Similarly, compute a unit quaternion in terms of two basis vectors. */ +DLL void Slvs_MakeQuaternion(double ux, double uy, double uz, + double vx, double vy, double vz, + double *qw, double *qx, double *qy, double *qz); + + +/*------------------------------------- + * These are just convenience functions, to save you the trouble of filling + * out the structures by hand. The code is included in the header file to + * let the compiler inline them if possible. */ + +static inline Slvs_Param Slvs_MakeParam(Slvs_hParam h, Slvs_hGroup group, double val) +{ + Slvs_Param r; + r.h = h; + r.group = group; + r.val = val; + return r; +} +static inline Slvs_Entity Slvs_MakePoint2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hParam u, Slvs_hParam v) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_2D; + r.wrkpl = wrkpl; + r.param[0] = u; + r.param[1] = v; + return r; +} +static inline Slvs_Entity Slvs_MakePoint3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam x, Slvs_hParam y, Slvs_hParam z) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = x; + r.param[1] = y; + r.param[2] = z; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam qw, Slvs_hParam qx, + Slvs_hParam qy, Slvs_hParam qz) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = qw; + r.param[1] = qx; + r.param[2] = qy; + r.param[3] = qz; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_2D; + r.wrkpl = wrkpl; + return r; +} +static inline Slvs_Entity Slvs_MakeDistance(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, Slvs_hParam d) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_DISTANCE; + r.wrkpl = wrkpl; + r.param[0] = d; + return r; +} +static inline Slvs_Entity Slvs_MakeLineSegment(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity ptA, Slvs_hEntity ptB) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_LINE_SEGMENT; + r.wrkpl = wrkpl; + r.point[0] = ptA; + r.point[1] = ptB; + return r; +} +static inline Slvs_Entity Slvs_MakeCubic(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity pt0, Slvs_hEntity pt1, + Slvs_hEntity pt2, Slvs_hEntity pt3) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CUBIC; + r.wrkpl = wrkpl; + r.point[0] = pt0; + r.point[1] = pt1; + r.point[2] = pt2; + r.point[3] = pt3; + return r; +} +static inline Slvs_Entity Slvs_MakeArcOfCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity normal, + Slvs_hEntity center, + Slvs_hEntity start, Slvs_hEntity end) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_ARC_OF_CIRCLE; + r.wrkpl = wrkpl; + r.normal = normal; + r.point[0] = center; + r.point[1] = start; + r.point[2] = end; + return r; +} +static inline Slvs_Entity Slvs_MakeCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity center, + Slvs_hEntity normal, Slvs_hEntity radius) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CIRCLE; + r.wrkpl = wrkpl; + r.point[0] = center; + r.normal = normal; + r.distance = radius; + return r; +} +static inline Slvs_Entity Slvs_MakeWorkplane(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity origin, Slvs_hEntity normal) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_WORKPLANE; + r.wrkpl = SLVS_FREE_IN_3D; + r.point[0] = origin; + r.normal = normal; + return r; +} + +static inline Slvs_Constraint Slvs_MakeConstraint(Slvs_hConstraint h, + Slvs_hGroup group, + int type, + Slvs_hEntity wrkpl, + double valA, + Slvs_hEntity ptA, + Slvs_hEntity ptB, + Slvs_hEntity entityA, + Slvs_hEntity entityB) +{ + Slvs_Constraint r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = type; + r.wrkpl = wrkpl; + r.valA = valA; + r.ptA = ptA; + r.ptB = ptB; + r.entityA = entityA; + r.entityB = entityB; + return r; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5c53130 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,406 @@ +# global + +include(GNUInstallDirs) + +include_directories( + ${OPENGL_INCLUDE_DIR} + ${PNG_INCLUDE_DIRS} + ${FREETYPE_INCLUDE_DIRS}) + +link_directories( + ${PNG_LIBRARY_DIRS} + ${FREETYPE_LIBRARY_DIRS}) + +add_definitions( + ${PNG_CFLAGS_OTHER}) + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/built + ${CMAKE_CURRENT_BINARY_DIR}) + +if(SPACEWARE_FOUND) + include_directories( + ${SPACEWARE_INCLUDE_DIR}) +endif() + +set(HAVE_SPACEWARE ${SPACEWARE_FOUND}) +set(HAVE_GTK ${GTKMM_FOUND}) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +# platform utilities + +if(WIN32) + set(util_SOURCES + win32/w32util.cpp) +else() + set(util_SOURCES + unix/unixutil.cpp) +endif() + +# libslvs + +set(libslvs_SOURCES + util.cpp + entity.cpp + expr.cpp + constraint.cpp + constrainteq.cpp + system.cpp) + +set(libslvs_HEADERS + solvespace.h) + +add_library(slvs SHARED + ${libslvs_SOURCES} + ${libslvs_HEADERS} + ${util_SOURCES} + lib.cpp) + +target_compile_definitions(slvs + PRIVATE -DLIBRARY) + +target_include_directories(slvs + PUBLIC ${CMAKE_SOURCE_DIR}/include) + +set_target_properties(slvs PROPERTIES + PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h + VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} + SOVERSION 1) + +if(NOT WIN32) + install(TARGETS slvs + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() + +# generated files + +# `$` allows us to use binfmt support on Linux +# without special-casing anything; running `tool.exe` would succeed +# but unlike Windows, Linux does not have the machinery to map +# an invocation of `tool` to an executable `tool.exe` in $PATH. + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/generated) + +file(GLOB icons ${CMAKE_CURRENT_SOURCE_DIR}/icons/*.png) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h + ${icons} + DEPENDS png2c ${icons} + VERBATIM) + +file(GLOB chars ${CMAKE_CURRENT_SOURCE_DIR}/fonts/private/*.png) +list(SORT chars) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz + ${chars} + DEPENDS unifont2c + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz + ${chars} + VERBATIM) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + COMMAND $ + ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz + DEPENDS lff2c + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz + VERBATIM) + +set(generated_HEADERS + ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h + ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h) + +set(generated_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp) + +# platform dependencies + +if(WIN32) + set(platform_SOURCES + win32/w32main.cpp + win32/resource.rc) + + set(platform_LIBRARIES + comctl32) +elseif(APPLE) + add_definitions( + -fobjc-arc) + + set(platform_SOURCES + cocoa/cocoamain.mm + unix/gloffscreen.cpp) + + set(platform_XIBS + cocoa/MainMenu.xib + cocoa/SaveFormatAccessory.xib) + + set(platform_ICONS + cocoa/AppIcon.iconset) + + set(platform_RESOURCES + unix/solvespace-48x48.png) + + set(platform_BUNDLED_LIBS + ${PNG_LIBRARIES} + ${FREETYPE_LIBRARIES}) + + set(platform_LIBRARIES + ${APPKIT_LIBRARY}) +elseif(HAVE_GTK) + include_directories( + ${GTKMM_INCLUDE_DIRS} + ${JSONC_INCLUDE_DIRS} + ${FONTCONFIG_INCLUDE_DIRS} + ${GLEW_INCLUDE_DIRS}) + + link_directories( + ${GTKMM_LIBRARY_DIRS} + ${JSONC_LIBRARY_DIRS} + ${FONTCONFIG_LIBRARY_DIRS} + ${GLEW_LIBRARY_DIRS}) + + add_definitions( + ${GTKMM_CFLAGS_OTHER} + ${JSONC_CFLAGS_OTHER} + ${FONTCONFIG_CFLAGS_OTHER} + ${GLEW_CFLAGS_OTHER}) + + set(platform_SOURCES + gtk/gtkmain.cpp + unix/gloffscreen.cpp) + + set(platform_LIBRARIES + ${GTKMM_LIBRARIES} + ${JSONC_LIBRARIES} + ${FONTCONFIG_LIBRARIES} + ${GLEW_LIBRARIES}) +endif() + +set(platform_BUNDLED_RESOURCES) + +foreach(xib ${platform_XIBS}) + get_filename_component(nib ${xib} NAME_WE) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${xib}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${nib}.nib) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ibtool --errors --warnings --notices + --output-format human-readable-text --compile + ${target} ${source} + COMMENT "Building Interface Builder file ${xib}" + DEPENDS ${xib} + VERBATIM) +endforeach() + +foreach(icon ${platform_ICONS}) + get_filename_component(name ${icon} NAME_WE) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${icon}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name}.icns) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND iconutil -c icns -o ${target} ${source} + COMMENT "Building icon set ${icon}" + DEPENDS ${source} + VERBATIM) +endforeach() + +foreach(res ${platform_RESOURCES}) + get_filename_component(name ${res} NAME) + set(source ${CMAKE_CURRENT_SOURCE_DIR}/${res}) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name}) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target} + COMMENT "Copying resource file ${res}" + DEPENDS ${res} + VERBATIM) +endforeach() + +foreach(lib ${platform_BUNDLED_LIBS}) + get_filename_component(name ${lib} NAME) + set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/MacOS/${name}) + list(APPEND platform_BUNDLED_RESOURCES ${target}) + + add_custom_command( + OUTPUT ${target} + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources + COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${target} + COMMENT "Bundling shared library ${lib}" + DEPENDS ${lib} + VERBATIM) +endforeach() + +# solvespace executable + +set(solvespace_HEADERS + config.h + dsc.h + expr.h + polygon.h + sketch.h + solvespace.h + ui.h + srf/surface.h) + +set(solvespace_SOURCES + bsp.cpp + clipboard.cpp + confscreen.cpp + constraint.cpp + constrainteq.cpp + describescreen.cpp + draw.cpp + drawconstraint.cpp + drawentity.cpp + entity.cpp + export.cpp + exportstep.cpp + exportvector.cpp + expr.cpp + file.cpp + generate.cpp + glhelper.cpp + graphicswin.cpp + group.cpp + groupmesh.cpp + importdxf.cpp + mesh.cpp + modify.cpp + mouse.cpp + polygon.cpp + request.cpp + solvespace.cpp + style.cpp + system.cpp + textscreens.cpp + textwin.cpp + toolbar.cpp + ttf.cpp + undoredo.cpp + util.cpp + view.cpp + srf/boolean.cpp + srf/curve.cpp + srf/merge.cpp + srf/ratpoly.cpp + srf/raycast.cpp + srf/surface.cpp + srf/surfinter.cpp + srf/triangulate.cpp) + +add_executable(solvespace WIN32 MACOSX_BUNDLE + ${libslvs_HEADERS} + ${libslvs_SOURCES} + ${util_SOURCES} + ${platform_SOURCES} + ${platform_BUNDLED_RESOURCES} + ${generated_SOURCES} + ${generated_HEADERS} + ${solvespace_HEADERS} + ${solvespace_SOURCES}) + +target_link_libraries(solvespace + dxfrw + ${OPENGL_LIBRARIES} + ${PNG_LIBRARIES} + ${ZLIB_LIBRARIES} + ${FREETYPE_LIBRARIES} + ${platform_LIBRARIES}) + +if(WIN32 AND NOT MINGW) + set_target_properties(solvespace PROPERTIES + LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO") +endif() + +if(SPACEWARE_FOUND) + target_link_libraries(solvespace + ${SPACEWARE_LIBRARIES}) +endif() + +if(APPLE) + set(fixups) + foreach(lib ${platform_BUNDLED_LIBS}) + get_filename_component(name ${lib} NAME) + execute_process(COMMAND otool -D ${lib} + OUTPUT_VARIABLE canonical_lib OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "^.+:\n" "" canonical_lib ${canonical_lib}) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND install_name_tool -change ${canonical_lib} @executable_path/${name} + $ + COMMENT "Fixing up rpath for dylib ${name}" + VERBATIM) + endforeach() + + set(bundle solvespace) + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${bundle}.dmg + COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/${bundle}.dmg + COMMAND hdiutil create -srcfolder ${CMAKE_CURRENT_BINARY_DIR}/${bundle}.app + ${CMAKE_BINARY_DIR}/${bundle}.dmg + DEPENDS $ + COMMENT "Building ${bundle}.dmg" + VERBATIM) + + add_custom_target(${bundle}-dmg ALL + DEPENDS ${CMAKE_BINARY_DIR}/${bundle}.dmg) +endif() + +if(NOT WIN32) + install(TARGETS solvespace + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + BUNDLE DESTINATION .) +endif() + +install(FILES unix/solvespace.desktop + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications) +foreach(SIZE 16x16 24x24 32x32 48x48) + install(FILES unix/solvespace-${SIZE}.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/apps + RENAME solvespace.png) + install(FILES unix/solvespace-${SIZE}.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/mimetypes + RENAME application.x-solvespace.png) +endforeach() +foreach(SIZE 16x16 24x24 32x32 48x48) + install(FILES unix/solvespace-${SIZE}.xpm + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps/) +endforeach() + +# valgrind + +add_custom_target(solvespace-valgrind + valgrind + --tool=memcheck + --verbose + --track-fds=yes + --log-file=vg.%p.out + --num-callers=50 + --error-limit=no + --read-var-info=yes + --leak-check=full + --leak-resolution=high + --show-reachable=yes + --track-origins=yes + --malloc-fill=0xac + --free-fill=0xde + $) diff --git a/src/bsp.cpp b/src/bsp.cpp new file mode 100644 index 0000000..bba7265 --- /dev/null +++ b/src/bsp.cpp @@ -0,0 +1,682 @@ +//----------------------------------------------------------------------------- +// Binary space partitioning tree, used to represent a volume in 3-space +// bounded by a triangle mesh. These are used to compute Boolean operations +// on meshes. These aren't used for anything relating to an SShell of +// ratpoly surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +SBsp2 *SBsp2::Alloc(void) { return (SBsp2 *)AllocTemporary(sizeof(SBsp2)); } +SBsp3 *SBsp3::Alloc(void) { return (SBsp3 *)AllocTemporary(sizeof(SBsp3)); } + +SBsp3 *SBsp3::FromMesh(SMesh *m) { + SBsp3 *bsp3 = NULL; + int i; + + SMesh mc = {}; + for(i = 0; i < m->l.n; i++) { + mc.AddTriangle(&(m->l.elem[i])); + } + + srand(0); // Let's be deterministic, at least! + int n = mc.l.n; + while(n > 1) { + int k = rand() % n; + n--; + swap(mc.l.elem[k], mc.l.elem[n]); + } + + for(i = 0; i < mc.l.n; i++) { + bsp3 = InsertOrCreate(bsp3, &(mc.l.elem[i]), NULL); + } + + mc.Clear(); + return bsp3; +} + +Vector SBsp3::IntersectionWith(Vector a, Vector b) { + double da = a.Dot(n) - d; + double db = b.Dot(n) - d; + if(da*db > 0) oops(); + + double dab = (db - da); + return (a.ScaledBy(db/dab)).Plus(b.ScaledBy(-da/dab)); +} + +void SBsp3::InsertInPlane(bool pos2, STriangle *tr, SMesh *m) { + Vector tc = ((tr->a).Plus(tr->b).Plus(tr->c)).ScaledBy(1.0/3); + + bool onFace = false; + bool sameNormal = false; + double maxNormalMag = -1; + + Vector lln, trn = tr->Normal(); + + SBsp3 *ll = this; + while(ll) { + if((ll->tri).ContainsPoint(tc)) { + onFace = true; + // If the mesh contains almost-zero-area triangles, and we're + // just on the edge of one of those, then don't trust its normal. + lln = (ll->tri).Normal(); + if(lln.Magnitude() > maxNormalMag) { + sameNormal = trn.Dot(lln) > 0; + maxNormalMag = lln.Magnitude(); + } + } + ll = ll->more; + } + + if(m->flipNormal && ((!pos2 && !onFace) || + (onFace && !sameNormal && m->keepCoplanar))) + { + m->AddTriangle(tr->meta, tr->c, tr->b, tr->a); + } else if(!(m->flipNormal) && ((pos2 && !onFace) || + (onFace && sameNormal && m->keepCoplanar))) + { + m->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } else { + m->atLeastOneDiscarded = true; + } +} + +void SBsp3::InsertHow(int how, STriangle *tr, SMesh *instead) { + switch(how) { + case POS: + if(instead && !pos) goto alt; + pos = InsertOrCreate(pos, tr, instead); + break; + + case NEG: + if(instead && !neg) goto alt; + neg = InsertOrCreate(neg, tr, instead); + break; + + case COPLANAR: { + if(instead) goto alt; + SBsp3 *m = Alloc(); + m->n = n; + m->d = d; + m->tri = *tr; + m->more = more; + more = m; + break; + } + default: oops(); + } + return; + +alt: + if(how == POS && !(instead->flipNormal)) { + instead->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } else if(how == NEG && instead->flipNormal) { + instead->AddTriangle(tr->meta, tr->c, tr->b, tr->a); + } else if(how == COPLANAR) { + if(edges) { + edges->InsertTriangle(tr, instead, this); + } else { + // I suppose this actually is allowed to happen, if the coplanar + // face is the leaf, and all of its neighbors are earlier in tree? + InsertInPlane(false, tr, instead); + } + } else { + instead->atLeastOneDiscarded = true; + } +} + +void SBsp3::InsertConvexHow(int how, STriMeta meta, Vector *vertex, int n, + SMesh *instead) +{ + switch(how) { + case POS: + if(pos) { + pos = pos->InsertConvex(meta, vertex, n, instead); + return; + } + break; + + case NEG: + if(neg) { + neg = neg->InsertConvex(meta, vertex, n, instead); + return; + } + break; + + default: oops(); + } + int i; + for(i = 0; i < n - 2; i++) { + STriangle tr = STriangle::From(meta, + vertex[0], vertex[i+1], vertex[i+2]); + InsertHow(how, &tr, instead); + } +} + +SBsp3 *SBsp3::InsertConvex(STriMeta meta, Vector *vertex, int cnt, + SMesh *instead) +{ + Vector e01 = (vertex[1]).Minus(vertex[0]); + Vector e12 = (vertex[2]).Minus(vertex[1]); + Vector out = e01.Cross(e12); + +#define MAX_VERTICES 50 + if(cnt+1 >= MAX_VERTICES) goto triangulate; + + int i; + Vector on[2]; + bool isPos[MAX_VERTICES]; + bool isNeg[MAX_VERTICES]; + bool isOn[MAX_VERTICES]; + int posc, negc, onc; posc = negc = onc = 0; + for(i = 0; i < cnt; i++) { + double dt = n.Dot(vertex[i]); + isPos[i] = isNeg[i] = isOn[i] = false; + if(fabs(dt - d) < LENGTH_EPS) { + isOn[i] = true; + if(onc < 2) { + on[onc] = vertex[i]; + } + onc++; + } else if(dt > d) { + isPos[i] = true; + posc++; + } else { + isNeg[i] = true; + negc++; + } + } + if(onc != 2 && onc != 1 && onc != 0) goto triangulate; + + if(onc == 2) { + if(!instead) { + SEdge se = SEdge::From(on[0], on[1]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } + } + + if(posc == 0) { + InsertConvexHow(NEG, meta, vertex, cnt, instead); + return this; + } + if(negc == 0) { + InsertConvexHow(POS, meta, vertex, cnt, instead); + return this; + } + + Vector vpos[MAX_VERTICES]; + Vector vneg[MAX_VERTICES]; + int npos, nneg; npos = nneg = 0; + + Vector inter[2]; + int inters; inters = 0; + + for(i = 0; i < cnt; i++) { + int ip = WRAP((i + 1), cnt); + + if(isPos[i]) { + vpos[npos++] = vertex[i]; + } + if(isNeg[i]) { + vneg[nneg++] = vertex[i]; + } + if(isOn[i]) { + vneg[nneg++] = vertex[i]; + vpos[npos++] = vertex[i]; + } + if((isPos[i] && isNeg[ip]) || (isNeg[i] && isPos[ip])) { + Vector vi = IntersectionWith(vertex[i], vertex[ip]); + vpos[npos++] = vi; + vneg[nneg++] = vi; + + if(inters >= 2) goto triangulate; // XXX shouldn't happen but does + inter[inters++] = vi; + } + } + if(npos > cnt + 1 || nneg > cnt + 1) oops(); + + if(!instead) { + if(inters == 2) { + SEdge se = SEdge::From(inter[0], inter[1]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } else if(inters == 1 && onc == 1) { + SEdge se = SEdge::From(inter[0], on[0]); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, out); + } else if(inters == 0 && onc == 2) { + // We already handled this on-plane existing edge + } else { + goto triangulate; + } + } + if(nneg < 3 || npos < 3) goto triangulate; // XXX + + InsertConvexHow(NEG, meta, vneg, nneg, instead); + InsertConvexHow(POS, meta, vpos, npos, instead); + return this; + +triangulate: + // We don't handle the special case for this; do it as triangles + SBsp3 *r = this; + for(i = 0; i < cnt - 2; i++) { + STriangle tr = STriangle::From(meta, + vertex[0], vertex[i+1], vertex[i+2]); + r = InsertOrCreate(r, &tr, instead); + } + return r; +} + +SBsp3 *SBsp3::InsertOrCreate(SBsp3 *where, STriangle *tr, SMesh *instead) { + if(where == NULL) { + if(instead) { + if(instead->flipNormal) { + instead->atLeastOneDiscarded = true; + } else { + instead->AddTriangle(tr->meta, tr->a, tr->b, tr->c); + } + return NULL; + } + + // Brand new node; so allocate for it, and fill us in. + SBsp3 *r = Alloc(); + r->n = (tr->Normal()).WithMagnitude(1); + r->d = (tr->a).Dot(r->n); + r->tri = *tr; + return r; + } + where->Insert(tr, instead); + return where; +} + +void SBsp3::Insert(STriangle *tr, SMesh *instead) { + double dt[3] = { (tr->a).Dot(n), (tr->b).Dot(n), (tr->c).Dot(n) }; + + int inc = 0, posc = 0, negc = 0; + bool isPos[3] = {}, isNeg[3] = {}, isOn[3] = {}; + // Count vertices in the plane + for(int i = 0; i < 3; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + inc++; + isOn[i] = true; + } else if(dt[i] > d) { + posc++; + isPos[i] = true; + } else { + negc++; + isNeg[i] = true; + } + } + + // All vertices in-plane + if(inc == 3) { + InsertHow(COPLANAR, tr, instead); + return; + } + + // No split required + if(posc == 0 || negc == 0) { + if(inc == 2) { + Vector a, b; + if (!isOn[0]) { a = tr->b; b = tr->c; } + else if(!isOn[1]) { a = tr->c; b = tr->a; } + else if(!isOn[2]) { a = tr->a; b = tr->b; } + else oops(); + if(!instead) { + SEdge se = SEdge::From(a, b); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, tr->Normal()); + } + } + + if(posc > 0) { + InsertHow(POS, tr, instead); + } else { + InsertHow(NEG, tr, instead); + } + return; + } + + // The polygon must be split into two pieces, one above, one below. + Vector a, b, c; + + if(posc == 1 && negc == 1 && inc == 1) { + bool bpos; + // Standardize so that a is on the plane + if (isOn[0]) { a = tr->a; b = tr->b; c = tr->c; bpos = isPos[1]; + } else if(isOn[1]) { a = tr->b; b = tr->c; c = tr->a; bpos = isPos[2]; + } else if(isOn[2]) { a = tr->c; b = tr->a; c = tr->b; bpos = isPos[0]; + } else oops(); + + Vector bPc = IntersectionWith(b, c); + STriangle btri = STriangle::From(tr->meta, a, b, bPc); + STriangle ctri = STriangle::From(tr->meta, c, a, bPc); + + if(bpos) { + InsertHow(POS, &btri, instead); + InsertHow(NEG, &ctri, instead); + } else { + InsertHow(POS, &ctri, instead); + InsertHow(NEG, &btri, instead); + } + + if(!instead) { + SEdge se = SEdge::From(a, bPc); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, tr->Normal()); + } + + return; + } + + if(posc == 2 && negc == 1) { + // Standardize so that a is on one side, and b and c are on the other. + if (isNeg[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isNeg[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isNeg[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + + } else if(posc == 1 && negc == 2) { + if (isPos[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isPos[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isPos[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + } else oops(); + + Vector aPb = IntersectionWith(a, b); + Vector cPa = IntersectionWith(c, a); + + STriangle alone = STriangle::From(tr->meta, a, aPb, cPa); + Vector quad[4] = { aPb, b, c, cPa }; + + if(posc == 2 && negc == 1) { + InsertConvexHow(POS, tr->meta, quad, 4, instead); + InsertHow(NEG, &alone, instead); + } else { + InsertConvexHow(NEG, tr->meta, quad, 4, instead); + InsertHow(POS, &alone, instead); + } + if(!instead) { + SEdge se = SEdge::From(aPb, cPa); + edges = SBsp2::InsertOrCreateEdge(edges, &se, n, alone.Normal()); + } + + return; +} + +void SBsp3::GenerateInPaintOrder(SMesh *m) { + + // Doesn't matter which branch we take if the normal has zero z + // component, so don't need a separate case for that. + if(n.z < 0) { + if(pos) pos->GenerateInPaintOrder(m); + } else { + if(neg) neg->GenerateInPaintOrder(m); + } + + SBsp3 *flip = this; + while(flip) { + m->AddTriangle(&(flip->tri)); + flip = flip->more; + } + + if(n.z < 0) { + if(neg) neg->GenerateInPaintOrder(m); + } else { + if(pos) pos->GenerateInPaintOrder(m); + } +} + +void SBsp3::DebugDraw(void) { + + if(pos) pos->DebugDraw(); + Vector norm = tri.Normal(); + glNormal3d(norm.x, norm.y, norm.z); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + ssglDepthRangeOffset(2); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + glDisable(GL_LIGHTING); + glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); + glPointSize(10); + ssglDepthRangeOffset(2); + glBegin(GL_TRIANGLES); + ssglVertex3v(tri.a); + ssglVertex3v(tri.b); + ssglVertex3v(tri.c); + glEnd(); + + ssglDepthRangeOffset(0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + if(more) more->DebugDraw(); + if(neg) neg->DebugDraw(); + + if(edges) edges->DebugDraw(n, d); +} + +///////////////////////////////// + +Vector SBsp2::IntersectionWith(Vector a, Vector b) { + double da = a.Dot(no) - d; + double db = b.Dot(no) - d; + if(da*db > 0) oops(); + + double dab = (db - da); + return (a.ScaledBy(db/dab)).Plus(b.ScaledBy(-da/dab)); +} + +SBsp2 *SBsp2::InsertOrCreateEdge(SBsp2 *where, SEdge *nedge, Vector nnp, Vector out) { + if(where == NULL) { + // Brand new node; so allocate for it, and fill us in. + SBsp2 *r = Alloc(); + r->np = nnp; + r->no = ((r->np).Cross((nedge->b).Minus(nedge->a))).WithMagnitude(1); + if(out.Dot(r->no) < 0) { + r->no = (r->no).ScaledBy(-1); + } + r->d = (nedge->a).Dot(r->no); + r->edge = *nedge; + return r; + } + where->InsertEdge(nedge, nnp, out); + return where; +} + +void SBsp2::InsertEdge(SEdge *nedge, Vector nnp, Vector out) { + + double dt[2] = { (nedge->a).Dot(no), (nedge->b).Dot(no) }; + + bool isPos[2] = {}, isNeg[2] = {}, isOn[2] = {}; + for(int i = 0; i < 2; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + isOn[i] = true; + } else if(dt[i] > d) { + isPos[i] = true; + } else { + isNeg[i] = true; + } + } + + if((isPos[0] && isPos[1])||(isPos[0] && isOn[1])||(isOn[0] && isPos[1])) { + pos = InsertOrCreateEdge(pos, nedge, nnp, out); + return; + } + if((isNeg[0] && isNeg[1])||(isNeg[0] && isOn[1])||(isOn[0] && isNeg[1])) { + neg = InsertOrCreateEdge(neg, nedge, nnp, out); + return; + } + if(isOn[0] && isOn[1]) { + SBsp2 *m = Alloc(); + + m->np = nnp; + m->no = ((m->np).Cross((nedge->b).Minus(nedge->a))).WithMagnitude(1); + if(out.Dot(m->no) < 0) { + m->no = (m->no).ScaledBy(-1); + } + m->d = (nedge->a).Dot(m->no); + m->edge = *nedge; + + m->more = more; + more = m; + return; + } + if((isPos[0] && isNeg[1]) || (isNeg[0] && isPos[1])) { + Vector aPb = IntersectionWith(nedge->a, nedge->b); + + SEdge ea = SEdge::From(nedge->a, aPb); + SEdge eb = SEdge::From(aPb, nedge->b); + + if(isPos[0]) { + pos = InsertOrCreateEdge(pos, &ea, nnp, out); + neg = InsertOrCreateEdge(neg, &eb, nnp, out); + } else { + neg = InsertOrCreateEdge(neg, &ea, nnp, out); + pos = InsertOrCreateEdge(pos, &eb, nnp, out); + } + return; + } + oops(); +} + +void SBsp2::InsertTriangleHow(int how, STriangle *tr, SMesh *m, SBsp3 *bsp3) { + switch(how) { + case POS: + if(pos) { + pos->InsertTriangle(tr, m, bsp3); + } else { + bsp3->InsertInPlane(true, tr, m); + } + break; + + case NEG: + if(neg) { + neg->InsertTriangle(tr, m, bsp3); + } else { + bsp3->InsertInPlane(false, tr, m); + } + break; + + default: oops(); + } +} + +void SBsp2::InsertTriangle(STriangle *tr, SMesh *m, SBsp3 *bsp3) { + double dt[3] = { (tr->a).Dot(no), (tr->b).Dot(no), (tr->c).Dot(no) }; + + bool isPos[3] = {}, isNeg[3] = {}, isOn[3] = {}; + int inc = 0, posc = 0, negc = 0; + for(int i = 0; i < 3; i++) { + if(fabs(dt[i] - d) < LENGTH_EPS) { + isOn[i] = true; + inc++; + } else if(dt[i] > d) { + isPos[i] = true; + posc++; + } else { + isNeg[i] = true; + negc++; + } + } + + if(inc == 3) { + // All vertices on-line; so it's a degenerate triangle, to ignore. + return; + } + + // No split required + if(posc == 0 || negc == 0) { + if(posc > 0) { + InsertTriangleHow(POS, tr, m, bsp3); + } else { + InsertTriangleHow(NEG, tr, m, bsp3); + } + return; + } + + // The polygon must be split into two pieces, one above, one below. + Vector a, b, c; + + if(posc == 1 && negc == 1 && inc == 1) { + bool bpos; + // Standardize so that a is on the plane + if (isOn[0]) { a = tr->a; b = tr->b; c = tr->c; bpos = isPos[1]; + } else if(isOn[1]) { a = tr->b; b = tr->c; c = tr->a; bpos = isPos[2]; + } else if(isOn[2]) { a = tr->c; b = tr->a; c = tr->b; bpos = isPos[0]; + } else oops(); + + Vector bPc = IntersectionWith(b, c); + STriangle btri = STriangle::From(tr->meta, a, b, bPc); + STriangle ctri = STriangle::From(tr->meta, c, a, bPc); + + if(bpos) { + InsertTriangleHow(POS, &btri, m, bsp3); + InsertTriangleHow(NEG, &ctri, m, bsp3); + } else { + InsertTriangleHow(POS, &ctri, m, bsp3); + InsertTriangleHow(NEG, &btri, m, bsp3); + } + + return; + } + + if(posc == 2 && negc == 1) { + // Standardize so that a is on one side, and b and c are on the other. + if (isNeg[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isNeg[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isNeg[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + + } else if(posc == 1 && negc == 2) { + if (isPos[0]) { a = tr->a; b = tr->b; c = tr->c; + } else if(isPos[1]) { a = tr->b; b = tr->c; c = tr->a; + } else if(isPos[2]) { a = tr->c; b = tr->a; c = tr->b; + } else oops(); + } else oops(); + + Vector aPb = IntersectionWith(a, b); + Vector cPa = IntersectionWith(c, a); + + STriangle alone = STriangle::From(tr->meta, a, aPb, cPa); + STriangle quad1 = STriangle::From(tr->meta, aPb, b, c ); + STriangle quad2 = STriangle::From(tr->meta, aPb, c, cPa); + + if(posc == 2 && negc == 1) { + InsertTriangleHow(POS, &quad1, m, bsp3); + InsertTriangleHow(POS, &quad2, m, bsp3); + InsertTriangleHow(NEG, &alone, m, bsp3); + } else { + InsertTriangleHow(NEG, &quad1, m, bsp3); + InsertTriangleHow(NEG, &quad2, m, bsp3); + InsertTriangleHow(POS, &alone, m, bsp3); + } + + return; +} + +void SBsp2::DebugDraw(Vector n, double d) { + if(fabs((edge.a).Dot(n) - d) > LENGTH_EPS) oops(); + if(fabs((edge.b).Dot(n) - d) > LENGTH_EPS) oops(); + + ssglLineWidth(10); + glBegin(GL_LINES); + ssglVertex3v(edge.a); + ssglVertex3v(edge.b); + glEnd(); + if(pos) pos->DebugDraw(n, d); + if(neg) neg->DebugDraw(n, d); + if(more) more->DebugDraw(n, d); + ssglLineWidth(1); +} + diff --git a/src/clipboard.cpp b/src/clipboard.cpp new file mode 100644 index 0000000..c13b4fb --- /dev/null +++ b/src/clipboard.cpp @@ -0,0 +1,444 @@ +//----------------------------------------------------------------------------- +// The clipboard that gets manipulated when the user selects Edit -> Cut, +// Copy, Paste, etc.; may contain entities only, not constraints. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void SolveSpaceUI::Clipboard::Clear(void) { + c.Clear(); + r.Clear(); +} + +bool SolveSpaceUI::Clipboard::ContainsEntity(hEntity he) { + if(he.v == Entity::NO_ENTITY.v) + return true; + + ClipboardRequest *cr; + for(cr = r.First(); cr; cr = r.NextAfter(cr)) { + if(cr->oldEnt.v == he.v) + return true; + + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(cr->oldPointEnt[i].v == he.v) + return true; + } + } + return false; +} + +hEntity SolveSpaceUI::Clipboard::NewEntityFor(hEntity he) { + if(he.v == Entity::NO_ENTITY.v) + return Entity::NO_ENTITY; + + ClipboardRequest *cr; + for(cr = r.First(); cr; cr = r.NextAfter(cr)) { + if(cr->oldEnt.v == he.v) + return cr->newReq.entity(0); + + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(cr->oldPointEnt[i].v == he.v) + return cr->newReq.entity(1+i); + } + } + oops(); +} + +void GraphicsWindow::DeleteSelection(void) { + SK.request.ClearTags(); + SK.constraint.ClearTags(); + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + hRequest r = { 0 }; + if(s->entity.v && s->entity.isFromRequest()) { + r = s->entity.request(); + } + if(r.v && !r.IsFromReferences()) { + SK.request.Tag(r, 1); + } + if(s->constraint.v) { + SK.constraint.Tag(s->constraint, 1); + } + } + + SK.constraint.RemoveTagged(); + // Note that this regenerates and clears the selection, to avoid + // lingering references to the just-deleted items. + DeleteTaggedRequests(); +} + +void GraphicsWindow::CopySelection(void) { + SS.clipboard.Clear(); + + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector u = wrkpln->NormalU(), + v = wrkpln->NormalV(), + n = wrkpln->NormalN(), + p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + // Work only on entities that have requests that will generate them. + Entity *e = SK.GetEntity(s->entity); + bool hasDistance; + int req, pts; + if(!EntReqTable::GetEntityInfo(e->type, e->extraPoints, + &req, &pts, NULL, &hasDistance)) + { + continue; + } + if(req == Request::WORKPLANE) continue; + + ClipboardRequest cr = {}; + cr.type = req; + cr.extraPoints = e->extraPoints; + cr.style = e->style; + cr.str = e->str; + cr.font = e->font; + cr.construction = e->construction; + {for(int i = 0; i < pts; i++) { + Vector pt = SK.GetEntity(e->point[i])->PointGetNum(); + pt = pt.Minus(p); + pt = pt.DotInToCsys(u, v, n); + cr.point[i] = pt; + }} + if(hasDistance) { + cr.distance = SK.GetEntity(e->distance)->DistanceGetNum(); + } + + cr.oldEnt = e->h; + for(int i = 0; i < pts; i++) { + cr.oldPointEnt[i] = e->point[i]; + } + + SS.clipboard.r.Add(&cr); + } + + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->constraint.v) continue; + + Constraint *c = SK.GetConstraint(s->constraint); + if(c->type == Constraint::COMMENT) { + SS.clipboard.c.Add(c); + } + } + + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(!SS.clipboard.ContainsEntity(c->ptA) || + !SS.clipboard.ContainsEntity(c->ptB) || + !SS.clipboard.ContainsEntity(c->entityA) || + !SS.clipboard.ContainsEntity(c->entityB) || + !SS.clipboard.ContainsEntity(c->entityC) || + !SS.clipboard.ContainsEntity(c->entityD) || + c->type == Constraint::COMMENT) { + continue; + } + SS.clipboard.c.Add(c); + } +} + +void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector u = wrkpln->NormalU(), + v = wrkpln->NormalV(), + n = wrkpln->NormalN(), + p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + + ClipboardRequest *cr; + for(cr = SS.clipboard.r.First(); cr; cr = SS.clipboard.r.NextAfter(cr)) { + hRequest hr = AddRequest(cr->type, false); + Request *r = SK.GetRequest(hr); + r->extraPoints = cr->extraPoints; + r->style = cr->style; + r->str = cr->str; + r->font = cr->font; + r->construction = cr->construction; + // Need to regen to get the right number of points, if extraPoints + // changed. + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + SS.MarkGroupDirty(r->group); + bool hasDistance; + int i, pts; + EntReqTable::GetRequestInfo(r->type, r->extraPoints, + NULL, &pts, NULL, &hasDistance); + for(i = 0; i < pts; i++) { + Vector pt = cr->point[i]; + // We need the reflection to occur within the workplane; it may + // otherwise correspond to just a rotation as projected. + if(scale < 0) { + pt.x *= -1; + } + // Likewise the scale, which could otherwise take us out of the + // workplane. + pt = pt.ScaledBy(fabs(scale)); + pt = pt.ScaleOutOfCsys(u, v, Vector::From(0, 0, 0)); + pt = pt.Plus(p); + pt = pt.RotatedAbout(n, theta); + pt = pt.Plus(trans); + SK.GetEntity(hr.entity(i+1))->PointForceTo(pt); + } + if(hasDistance) { + SK.GetEntity(hr.entity(64))->DistanceForceTo( + cr->distance*fabs(scale)); + } + + cr->newReq = hr; + MakeSelected(hr.entity(0)); + for(i = 0; i < pts; i++) { + MakeSelected(hr.entity(i+1)); + } + } + + Constraint *cc; + for(cc = SS.clipboard.c.First(); cc; cc = SS.clipboard.c.NextAfter(cc)) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = cc->type; + c.valA = cc->valA; + c.ptA = SS.clipboard.NewEntityFor(cc->ptA); + c.ptB = SS.clipboard.NewEntityFor(cc->ptB); + c.entityA = SS.clipboard.NewEntityFor(cc->entityA); + c.entityB = SS.clipboard.NewEntityFor(cc->entityB); + c.entityC = SS.clipboard.NewEntityFor(cc->entityC); + c.entityD = SS.clipboard.NewEntityFor(cc->entityD); + c.other = cc->other; + c.other2 = cc->other2; + c.reference = cc->reference; + c.disp = cc->disp; + c.comment = cc->comment; + switch(c.type) { + case Constraint::COMMENT: + c.disp.offset = c.disp.offset.Plus(trans); + break; + + case Constraint::PT_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::PROJ_PT_DISTANCE: + case Constraint::DIAMETER: + c.valA *= fabs(scale); + break; + + default: + break; + } + + hConstraint hc = Constraint::AddConstraint(&c, /*rememberForUndo=*/false); + if(c.type == Constraint::COMMENT) { + MakeSelected(hc); + } + } + + SS.ScheduleGenerateAll(); +} + +void GraphicsWindow::MenuClipboard(int id) { + if(id != MNU_DELETE && !SS.GW.LockedInWorkplane()) { + Error("Cut, paste, and copy work only in a workplane.\n\n" + "Select one with Sketch -> In Workplane."); + return; + } + + switch(id) { + case MNU_PASTE: { + SS.UndoRemember(); + Vector trans = SS.GW.projRight.ScaledBy(80/SS.GW.scale).Plus( + SS.GW.projUp .ScaledBy(40/SS.GW.scale)); + SS.GW.ClearSelection(); + SS.GW.PasteClipboard(trans, 0, 1); + break; + } + + case MNU_PASTE_TRANSFORM: { + if(SS.clipboard.r.n == 0) { + Error("Clipboard is empty; nothing to paste."); + break; + } + + Entity *wrkpl = SK.GetEntity(SS.GW.ActiveWorkplane()); + Vector p = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + SS.TW.shown.paste.times = 1; + SS.TW.shown.paste.trans = Vector::From(0, 0, 0); + SS.TW.shown.paste.theta = 0; + SS.TW.shown.paste.origin = p; + SS.TW.shown.paste.scale = 1; + SS.TW.GoToScreen(TextWindow::SCREEN_PASTE_TRANSFORMED); + SS.GW.ForceTextWindowShown(); + SS.ScheduleShowTW(); + break; + } + + case MNU_COPY: + SS.GW.CopySelection(); + SS.GW.ClearSelection(); + break; + + case MNU_CUT: + SS.UndoRemember(); + SS.GW.CopySelection(); + SS.GW.DeleteSelection(); + break; + + case MNU_DELETE: + SS.UndoRemember(); + SS.GW.DeleteSelection(); + break; + + default: oops(); + } +} + +bool TextWindow::EditControlDoneForPaste(const char *s) { + Expr *e; + switch(edit.meaning) { + case EDIT_PASTE_TIMES_REPEATED: { + e = Expr::From(s, true); + if(!e) break; + int v = (int)e->Eval(); + if(v > 0) { + shown.paste.times = v; + } else { + Error("Number of copies to paste must be at least one."); + } + break; + } + case EDIT_PASTE_ANGLE: + e = Expr::From(s, true); + if(!e) break; + shown.paste.theta = WRAP_SYMMETRIC((e->Eval())*PI/180, 2*PI); + break; + + case EDIT_PASTE_SCALE: { + e = Expr::From(s, true); + double v = e->Eval(); + if(fabs(v) > 1e-6) { + shown.paste.scale = v; + } else { + Error("Scale cannot be zero."); + } + break; + } + + default: + return false; + } + return true; +} + +void TextWindow::ScreenChangePasteTransformed(int link, uint32_t v) { + switch(link) { + case 't': + SS.TW.ShowEditControl(13, ssprintf("%d", SS.TW.shown.paste.times)); + SS.TW.edit.meaning = EDIT_PASTE_TIMES_REPEATED; + break; + + case 'r': + SS.TW.ShowEditControl(13, ssprintf("%.3f", SS.TW.shown.paste.theta*180/PI)); + SS.TW.edit.meaning = EDIT_PASTE_ANGLE; + break; + + case 's': + SS.TW.ShowEditControl(13, ssprintf("%.3f", SS.TW.shown.paste.scale)); + SS.TW.edit.meaning = EDIT_PASTE_SCALE; + break; + } +} + +void TextWindow::ScreenPasteTransformed(int link, uint32_t v) { + SS.GW.GroupSelection(); + switch(link) { + case 'o': + if(SS.GW.gs.points == 1 && SS.GW.gs.n == 1) { + Entity *e = SK.GetEntity(SS.GW.gs.point[0]); + SS.TW.shown.paste.origin = e->PointGetNum(); + } else { + Error("Select one point to define origin of rotation."); + } + SS.GW.ClearSelection(); + break; + + case 't': + if(SS.GW.gs.points == 2 && SS.GW.gs.n == 2) { + Entity *pa = SK.GetEntity(SS.GW.gs.point[0]), + *pb = SK.GetEntity(SS.GW.gs.point[1]); + SS.TW.shown.paste.trans = + (pb->PointGetNum()).Minus(pa->PointGetNum()); + } else { + Error("Select two points to define translation vector."); + } + SS.GW.ClearSelection(); + break; + + case 'g': { + if(fabs(SS.TW.shown.paste.theta) < LENGTH_EPS && + SS.TW.shown.paste.trans.Magnitude() < LENGTH_EPS && + SS.TW.shown.paste.times != 1) + { + Message("Transformation is identity. So all copies will be " + "exactly on top of each other."); + } + if(SS.TW.shown.paste.times*SS.clipboard.r.n > 100) { + Error("Too many items to paste; split this into smaller " + "pastes."); + break; + } + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane active."); + break; + } + Entity *wrkpl = SK.GetEntity(SS.GW.ActiveWorkplane()); + Entity *wrkpln = SK.GetEntity(wrkpl->normal); + Vector wn = wrkpln->NormalN(); + SS.UndoRemember(); + SS.GW.ClearSelection(); + for(int i = 0; i < SS.TW.shown.paste.times; i++) { + Vector trans = SS.TW.shown.paste.trans.ScaledBy(i+1), + origin = SS.TW.shown.paste.origin; + double theta = SS.TW.shown.paste.theta*(i+1); + // desired transformation is Q*(p - o) + o + t = + // Q*p - Q*o + o + t = Q*p + (t + o - Q*o) + Vector t = trans.Plus( + origin).Minus( + origin.RotatedAbout(wn, theta)); + + SS.GW.PasteClipboard(t, theta, SS.TW.shown.paste.scale); + } + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); + SS.ScheduleShowTW(); + break; + } + } +} + +void TextWindow::ShowPasteTransformed(void) { + Printf(true, "%FtPASTE TRANSFORMED%E"); + Printf(true, "%Ba %Ftrepeat%E %d time%s %Fl%Lt%f[change]%E", + shown.paste.times, (shown.paste.times == 1) ? "" : "s", + &ScreenChangePasteTransformed); + Printf(false, "%Bd %Ftrotate%E %@ degrees %Fl%Lr%f[change]%E", + shown.paste.theta*180/PI, + &ScreenChangePasteTransformed); + Printf(false, "%Ba %Ftabout pt%E (%s, %s, %s) %Fl%Lo%f[use selected]%E", + SS.MmToString(shown.paste.origin.x).c_str(), + SS.MmToString(shown.paste.origin.y).c_str(), + SS.MmToString(shown.paste.origin.z).c_str(), + &ScreenPasteTransformed); + Printf(false, "%Bd %Fttranslate%E (%s, %s, %s) %Fl%Lt%f[use selected]%E", + SS.MmToString(shown.paste.trans.x).c_str(), + SS.MmToString(shown.paste.trans.y).c_str(), + SS.MmToString(shown.paste.trans.z).c_str(), + &ScreenPasteTransformed); + Printf(false, "%Ba %Ftscale%E %@ %Fl%Ls%f[change]%E", + shown.paste.scale, + &ScreenChangePasteTransformed); + + Printf(true, " %Fl%Lg%fpaste transformed now%E", &ScreenPasteTransformed); + + Printf(true, "(or %Fl%Ll%fcancel operation%E)", &ScreenHome); +} + diff --git a/src/cocoa/AppIcon.iconset/icon_128x128.png b/src/cocoa/AppIcon.iconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..363e89161a4804a5338624941481f15f915be2ea GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU~J8Fb`B^Ga(7bjbagf}v@|o* zHPSO=V9=OYI&r7Bv!g)!eig4H%&x%^5lcG6CUv+8zO@nHcbXuf7&!aMQz4<+J>r5J zw`|zD;lqJr3TD@Cb^dQq;K)*KS{tEpqr)bBvP091$g=OZ@1HyK?p%}Yq^m_~vGz}{ zeR9jFIwaevw{xz(MaJT}c~VKUR`#Di&%Povp8v*`n)kswvwr{0_U&AQ zJs)}s3XIol+X<9q&Wv#S;dCSW1Z(U3DRTNBXFn>L_*QHAX^wWa*4RVuN<@#ZjyNr0 z`A{*@UvKxqsqYuZU78aU9TTwYi=K~@k8$Jd$YnE9W-z*?${cH-ZxkWkeW5@1f(`rE_0zuIkRkS(2GyZ=2#PW;ZwPrnMi7J2aY1g8o=O1M8Th0GELr~j`@8!1;F1vFJ zRk>u#FYJg}67`xANvMrhh;7ef;fleTVh>=y-} zOJvVnHey8hF0b=FYffqZU(I)K*FT8gttgD--)T2k@9gG^&HDOoe*^0bq+l?= zZrrkA>xK^pjwzU3yVd!>L4hMnwP|gH#*Ge}^vMoQGa}2r-@bqD%)4_ruWct#mN_%R>4(#e>=Uf5^QXw^f1LfOWa3+`<)=B?)mmc@y(Oms}Zt}l8%PCmwsvm=+yNSVRtmMU|seZE~}pz^)=9{x>w z8)x-cMN6!iq~kL6{FTR)GLb&YC zEmY-_Ex)iMW>s|M{6oqu+Z7AA+ubiH|68lQ|JmDg9p4kv4g%wav%n*=n1Mk|6@(c* zgH%2+Ffdzqx;TbZ%z1lvWA32<5r;tGi-%a&JmfSgSNkC4!@xYjOh{;=Xh-fl%dOr0 z!m)cF*-L<;7$10GzI!SE2B+;a&sVqSTswY=one|XgMb?C(YE+s3^}KN7VJD*`LD$G zU0kWyzjG`MiA;D=8DquD%vot~`Fb8_ls}N4$)Mmfq)^WGFN|R?%s&5|zVGnoheqFR zYzlVC{XPFbfvLfO5ik0_=>6I(@q~4mv)=I8T(sz0{p+{gY)*zlEO^nqU-Ld2@Em^r zbi=CMALEa|zP-PA+hKyC{Cg?C!I}SZ|JJUqjgyNmF+W03NA?ZYim$ORw%*!AdjTM>r>mdKI;Vst0D>lteE4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGf6951U69E94oEQKA0BcD^ zK~y-6V_-l9{~1UGOr&ZU7z3X0e!}TBqFr$M^l7Yy43RLPsR4{={Qod9d?7FMnGdcH zrvVHMxI>@~ literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_16x16@2x.png b/src/cocoa/AppIcon.iconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f276ab5d34eab271ff6461b9b46f67e273e372 GIT binary patch literal 626 zcmV-&0*(ENP)4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGqB>(^xB>_oNB=7(L0Fy~X zK~z|UV_?7y{zEZM0TZn)7}C%m8jKjHmEa;_OZApirXPoMsO`t)g{Lt^-a zz^DU89Wd&EA?E-_JaYfBsUfGlXJBApkonAq)vloz0x&>Id5;WCO-)hE8+;+){D~K< z&-U_t#ur*-g8>f#76#(m{xs<$42lpyk6T zZrrkA>xK^pjwzU3yVd!>L4hMnwP|gH#*Ge}^vMoQGa}2r-@bqD%)4_ruWct#mN_%R>4(#e>=Uf5^QXw^f1LfOWa3+`<)=B?)mmc@y(Oms}Zt}l8%PCmwsvm=+yNSVRtmMU|seZE~}pz^)=9{x>w z8)x-cMN6!iq~kL6{FTR)GLb&YC zEmY-_Ex)iMW>s|M{6oqu+Z7AA+ubiH|68lQ|JmDg9p4kv4g%wav%n*=n1O*?7=#%a zX3ddcU|_cJba4!+nDh4T#@s^zA`XGV7Z0(ldB|y0uJ%F7hk<#5nUK&#(T?1AmRq~~ zg=6#JHs?(1_3qNqiylO7;;YkEZBLr@?VMV zySP%Zf9F^j5}EL#GRBIPnX}T~^7TB0#kzlBVP1<(fhSo;tA_AXT9OGxoFY1`qyu}*_;fASn#5Izvg{5;5q#K z>4sIiKgJ(_eS3fLw!;KN`S((OgERl-{;geI8z&cCVt$06j_ez(6<=dtY`wep`)-Cc wZ3NwQ$9unddHDhBl+8X=NNM=eH%RWo0rN>LGA+IJ_X0p%Pgg&ebxsLQ0DgXr;s5{u literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_256x256@2x.png b/src/cocoa/AppIcon.iconset/icon_256x256@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a380eb77900e8f23c7929e12ccc6ccb5e3a04271 GIT binary patch literal 2506 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe)8TQi-V1B!#(ofJG>oy`m_ z&CGO-^b8poG$xi#-0AJ?DA2xN#p?*OYj8xwk`A#+9d3eeZ3Ot8CP*j-&VKS#NT_y? zxZuVu8@6uvaNwAN*|l4p{~HuIvQ(SaMrhpVut}fn&@>~m?ECHe=gz!4*JL~CYEfFO z{gZ2-+%l>T$#&}PoU3nSCAVFm^P6$S28c59x{*22+vA3W**!nP_#zkHv0|1af#cw9CAZ|#H3_x-oM|L>o1 znw6%xazXA_raAX!*xZ-?)BV^Yt-ikE*1q@u_UoUay|p!G&;Kr6bMN7qy1R1sEDq%F zplw-H61n#PXU|n`gQ@q$e@q5?TYD!REX-Lg{$tU`s>aFHU+;@2aEa5lXx(;|yPzuh rQ%$}=0wayBqJ2d%fORIw>WW+HS)b)t8XT6q0C7EC{an^LB{Ts5!S&mP literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_32x32.png b/src/cocoa/AppIcon.iconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..60bf2c5ff1b13145db0f776c3d63831217be1716 GIT binary patch literal 626 zcmV-&0*(ENP)4?>U_AyJ#; z~msgKXk2dHUZ57^Xv?^C&I`~7Q8iKMB4twDH9 z(~Z3FjBs!>uPZ(fc4?VdLij@1YsdwKpOhXi@tfjwk?ks{%Ls=igGo6#KF*;f3LSUQxLm4R zd7r`~gtsAZ3x`M0BmS)`zvk^{EKSIk!2kdN32;bRa{vGf6951U69E94oEQKA0Fy~X zK~z|UV_?7y{zEZM0TZn)7}C%m8jKjHmEa;_OZApirXPoMsO`t)g{Lt^-a zz^DU89Wd&EA?E-_JaYfBsUfGlXJBApkonAq)vloz0x&>Id5;WCO-)hE8+;+){D~K< z&-U_t#ur*-g8>f#76#(m{xs<$42lpyk6Tr5J zw`|zD;lqJr3TD@Cb^dQq;K)*KS{tEpqr)bBvP091$g=OZ@1HyK?p%}Yq^m_~vGz}{ zeR9jFIwaevw{xz(MaJT}c~VKUR`#Di&%Povp8v*`n)kswvwr{0_U&AQ zJs)}s3XIol+X<9q&Wv#S;dCSW1Z(U3DRTNBXFn>L_*QHAX^wWa*4RVuN<@#ZjyNr0 z`A{*@UvKxqsqYuZU78aU9TTwYi=K~@k8$Jd$YnE9W-z*?${cH-ZxkWkeW5@1f(`rE_0zuIkRkS(2GyZ=2#PW;ZwPrnMi7J2aY1g8o=O1M8Th0GELr~j`@8!1;F1vFJ zRk>u#FYJg}6V2`J~#)X6nH}}_Ro!-U5 zvBlT&{+sgMkL~piH;XMWWYBd;W{7Gy#;}E-F&QAZk1hj z%X|iq;Pl(fMaK$b-g0U#-T#jBq51)29c&9&Gk6@hFGw_?8hLi!=dFwKTRs*4yESE> zJBK|ZNa3pYjFvww>vOl=Q-+#7`}KFzuddnOY|m`}Rc7&r1!T<2S@&Q63iR81PF@uz x@V2_~lIh#p19J_4t}gyndEhG4M3~i)3~uwKn_udc{s)E?gQu&X%Q~loCIBVCLj?c; literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_512x512.png b/src/cocoa/AppIcon.iconset/icon_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..6dcc757da086429df0ae3aaac7b1715b76071472 GIT binary patch literal 2506 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe)8TQi-V1B!#(ofJG>oy`m_ z&CGO-^b8poG$xi#-0AJ?DA2xN#p?*OYj8xwk`A#+9d3eeZ3Ot8CP*j-&VKS#NT_y? zxZuVu8@6uvaNwAN*|l4p{~HuIvQ(SaMrhpVut}fn&@>~m?ECHe=gz!4*JL~CYEfFO z{gZ2-+%l>T$#&}PoU3n{y3wXRfh)p%!V`t`%~SqY zv+}TA;rcOSyE)LP0R#>8$$a=h1y#wP qYVrjV7-?)3?JJ4_tTRDYSKLz1`YgxN;IQNci0kR<=d#Wzp$P!xzuM{m literal 0 HcmV?d00001 diff --git a/src/cocoa/AppIcon.iconset/icon_512x512@2x.png b/src/cocoa/AppIcon.iconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d45152055356772603ddc7ebaf94642a690617d6 GIT binary patch literal 6490 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXn!-Yo@bvKyi?}lY*zKvzei# znVGJUo*@H+#>CQzJH4G91={zkcpYJO4UULd(jhjf!%gt5jR3#X1PR5!*-xGd3Dxcq z7u>jI!`2NS4jfZ3yLPMde}e)?mTJ@52#p&ZHtCZcnr1|neZPJG+?jXhnrtUsElP{E ze{$`UTSnC(*-pKkbM-AU7SGL-N}9E@|NMFO6`Aq;H?GvY58j#e`){^y=aQ9;YaJ_m zF8A*F&{I%gyk6T*pe%D{gwqeF8`&pVTjx)a)Bia8QOU%&TFXy!w5zqo9(q?IdVF=n zX$i}Rii!SuyBAJp4qQ`GZfp79BnRAdBB>{?{3T+FpDwzlCtw zom;5NC0l-BN6f0|%K3+sTed3}aJRc(Q2w`8d;hby={mkArX2*v3ul2xWHAGSm?{V} zdIqU{U|*m{7xg+Dpa*E8kvb=KI9hCf}`-O@uot@KwBM}S?p00i_>zopr0149x)Bpeg literal 0 HcmV?d00001 diff --git a/src/cocoa/MainMenu.xib b/src/cocoa/MainMenu.xib new file mode 100644 index 0000000..b1951c4 --- /dev/null +++ b/src/cocoa/MainMenu.xib @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cocoa/SaveFormatAccessory.xib b/src/cocoa/SaveFormatAccessory.xib new file mode 100644 index 0000000..3962b6a --- /dev/null +++ b/src/cocoa/SaveFormatAccessory.xib @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cocoa/cocoamain.mm b/src/cocoa/cocoamain.mm new file mode 100644 index 0000000..1b6d3e6 --- /dev/null +++ b/src/cocoa/cocoamain.mm @@ -0,0 +1,1351 @@ +//----------------------------------------------------------------------------- +// Our main() function, and Cocoa-specific stuff to set up our windows and +// otherwise handle our interface to the operating system. Everything +// outside gtk/... should be standard C++ and OpenGL. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#include +#include + +#import + +#include +#include + +#include "solvespace.h" +#include "../unix/gloffscreen.h" +#include + +using SolveSpace::dbp; + +#define GL_CHECK() \ + do { \ + int err = (int)glGetError(); \ + if(err) dbp("%s:%d: glGetError() == 0x%X", __FILE__, __LINE__, err); \ + } while (0) + +/* Settings */ + +namespace SolveSpace { +void CnfFreezeInt(uint32_t val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setInteger:val forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +uint32_t CnfThawInt(uint32_t val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) + return [[NSUserDefaults standardUserDefaults] integerForKey:nsKey]; + return val; +} + +void CnfFreezeFloat(float val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setFloat:val forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +float CnfThawFloat(float val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) + return [[NSUserDefaults standardUserDefaults] floatForKey:nsKey]; + return val; +} + +void CnfFreezeString(const std::string &val, const std::string &key) { + [[NSUserDefaults standardUserDefaults] + setObject:[NSString stringWithUTF8String:val.c_str()] + forKey:[NSString stringWithUTF8String:key.c_str()]]; +} + +std::string CnfThawString(const std::string &val, const std::string &key) { + NSString *nsKey = [NSString stringWithUTF8String:key.c_str()]; + if([[NSUserDefaults standardUserDefaults] objectForKey:nsKey]) { + NSString *nsNewVal = [[NSUserDefaults standardUserDefaults] stringForKey:nsKey]; + return [nsNewVal UTF8String]; + } + return val; +} +}; + +/* Timer */ + +int64_t SolveSpace::GetMilliseconds(void) { + clock_serv_t cclock; + mach_timespec_t mts; + + host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock); + clock_get_time(cclock, &mts); + mach_port_deallocate(mach_task_self(), cclock); + + return mts.tv_sec * 1000 + mts.tv_nsec / 1000000; +} + +@interface DeferredHandler : NSObject ++ (void) runLater:(id)dummy; ++ (void) runCallback; ++ (void) doAutosave; +@end + +@implementation DeferredHandler ++ (void) runLater:(id)dummy { + SolveSpace::SS.DoLater(); +} ++ (void) runCallback { + SolveSpace::SS.GW.TimerCallback(); + SolveSpace::SS.TW.TimerCallback(); +} ++ (void) doAutosave { + SolveSpace::SS.Autosave(); +} +@end + +static void Schedule(SEL selector, double interval) { + NSMethodSignature *signature = [[DeferredHandler class] + methodSignatureForSelector:selector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:selector]; + [invocation setTarget:[DeferredHandler class]]; + [NSTimer scheduledTimerWithTimeInterval:interval + invocation:invocation repeats:NO]; +} + +void SolveSpace::SetTimerFor(int milliseconds) { + Schedule(@selector(runCallback), milliseconds / 1000.0); +} + +void SolveSpace::SetAutosaveTimerFor(int minutes) { + Schedule(@selector(doAutosave), minutes * 60.0); +} + +void SolveSpace::ScheduleLater() { + [[NSRunLoop currentRunLoop] + performSelector:@selector(runLater:) + target:[DeferredHandler class] argument:nil + order:0 modes:@[NSDefaultRunLoopMode]]; +} + +/* OpenGL view */ + +@interface GLViewWithEditor : NSView +- (void)drawGL; + +@property BOOL wantsBackingStoreScaling; + +@property(readonly, getter=isEditing) BOOL editing; +- (void)startEditing:(NSString*)text at:(NSPoint)origin withHeight:(double)fontHeight + usingMonospace:(BOOL)isMonospace; +- (void)stopEditing; +- (void)didEdit:(NSString*)text; +@end + +@implementation GLViewWithEditor +{ + GLOffscreen *offscreen; + NSOpenGLContext *glContext; +@protected + NSTextField *editor; +} + +- initWithFrame:(NSRect)frameRect { + self = [super initWithFrame:frameRect]; + [self setWantsLayer:YES]; + + NSOpenGLPixelFormatAttribute attrs[] = { + NSOpenGLPFAColorSize, 24, + NSOpenGLPFADepthSize, 24, + 0 + }; + NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; + glContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:NULL]; + + editor = [[NSTextField alloc] init]; + [editor setEditable:YES]; + [[editor cell] setWraps:NO]; + [[editor cell] setScrollable:YES]; + [editor setBezeled:NO]; + [editor setTarget:self]; + [editor setAction:@selector(editorAction:)]; + + return self; +} + +- (void)dealloc { + delete offscreen; +} + +#define CONVERT1(name, to_from) \ + - (NS##name)convert##name##to_from##Backing:(NS##name)input { \ + return _wantsBackingStoreScaling ? [super convert##name##to_from##Backing:input] : input; } +#define CONVERT(name) CONVERT1(name, To) CONVERT1(name, From) +CONVERT(Size) +CONVERT(Rect) +#undef CONVERT +#undef CONVERT1 + +- (NSPoint)convertPointToBacking:(NSPoint)input { + if(_wantsBackingStoreScaling) return [super convertPointToBacking:input]; + else { + input.y *= -1; + return input; + } +} + +- (NSPoint)convertPointFromBacking:(NSPoint)input { + if(_wantsBackingStoreScaling) return [super convertPointFromBacking:input]; + else { + input.y *= -1; + return input; + } +} + +- (void)drawRect:(NSRect)aRect { + [glContext makeCurrentContext]; + + if(!offscreen) + offscreen = new GLOffscreen; + + NSSize size = [self convertSizeToBacking:[self bounds].size]; + offscreen->begin(size.width, size.height); + + [self drawGL]; + GL_CHECK(); + + uint8_t *pixels = offscreen->end(![self isFlipped]); + CGDataProviderRef provider = CGDataProviderCreateWithData( + NULL, pixels, size.width * size.height * 4, NULL); + CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); + CGImageRef image = CGImageCreate(size.width, size.height, 8, 32, + size.width * 4, colorspace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst, + provider, NULL, true, kCGRenderingIntentDefault); + + CGContextDrawImage((CGContextRef) [[NSGraphicsContext currentContext] graphicsPort], + [self bounds], image); + + CGImageRelease(image); + CGDataProviderRelease(provider); +} + +- (void)drawGL { +} + +@synthesize editing; + +- (void)startEditing:(NSString*)text at:(NSPoint)origin withHeight:(double)fontHeight + usingMonospace:(BOOL)isMonospace { + if(!self->editing) { + [self addSubview:editor]; + self->editing = YES; + } + + NSFont *font; + if(isMonospace) + font = [NSFont fontWithName:@"Monaco" size:fontHeight]; + else + font = [NSFont controlContentFontOfSize:fontHeight]; + [editor setFont:font]; + + origin.x -= 3; /* left padding; no way to get it from NSTextField */ + origin.y -= [editor intrinsicContentSize].height; + origin.y += [editor baselineOffsetFromBottom]; + + [editor setFrameOrigin:origin]; + [editor setStringValue:text]; + [[self window] makeFirstResponder:editor]; +} + +- (void)stopEditing { + if(self->editing) { + [editor removeFromSuperview]; + self->editing = NO; + } +} + +- (void)editorAction:(id)sender { + [self didEdit:[editor stringValue]]; + [self stopEditing]; +} + +- (void)didEdit:(NSString*)text { +} +@end + +/* Graphics window */ + +@interface GraphicsWindowView : GLViewWithEditor +{ + NSTrackingArea *trackingArea; +} + +@property(readonly) NSEvent *lastContextMenuEvent; +@end + +@implementation GraphicsWindowView +- (BOOL)isFlipped { + return YES; +} + +- (void)drawGL { + SolveSpace::SS.GW.Paint(); +} + +- (BOOL)acceptsFirstResponder { + return YES; +} + +- (void) createTrackingArea { + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | + NSTrackingActiveInKeyWindow) + owner:self userInfo:nil]; + [self addTrackingArea:trackingArea]; +} + +- (void) updateTrackingAreas +{ + [self removeTrackingArea:trackingArea]; + [self createTrackingArea]; + [super updateTrackingAreas]; +} + +- (void)mouseMoved:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + NSUInteger flags = [event modifierFlags]; + NSUInteger buttons = [NSEvent pressedMouseButtons]; + SolveSpace::SS.GW.MouseMoved(point.x, point.y, + buttons & (1 << 0), + buttons & (1 << 2), + buttons & (1 << 1), + flags & NSShiftKeyMask, + flags & NSCommandKeyMask); +} + +- (void)mouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)rightMouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)otherMouseDragged:(NSEvent*)event { + [self mouseMoved:event]; +} + +- (void)mouseDown:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + if([event clickCount] == 1) + SolveSpace::SS.GW.MouseLeftDown(point.x, point.y); + else if([event clickCount] == 2) + SolveSpace::SS.GW.MouseLeftDoubleClick(point.x, point.y); +} + +- (void)rightMouseDown:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseMiddleOrRightDown(point.x, point.y); +} + +- (void)otherMouseDown:(NSEvent*)event { + [self rightMouseDown:event]; +} + +- (void)mouseUp:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseLeftUp(point.x, point.y); +} + +- (void)rightMouseUp:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + self->_lastContextMenuEvent = event; + SolveSpace::SS.GW.MouseRightUp(point.x, point.y); +} + +- (void)scrollWheel:(NSEvent*)event { + NSPoint point = [self ij_to_xy:[self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.GW.MouseScroll(point.x, point.y, -[event deltaY]); +} + +- (void)mouseExited:(NSEvent*)event { + SolveSpace::SS.GW.MouseLeave(); +} + +- (void)keyDown:(NSEvent*)event { + int chr = 0; + if(NSString *nsChr = [event charactersIgnoringModifiers]) + chr = [nsChr characterAtIndex:0]; + + if(chr >= NSF1FunctionKey && chr <= NSF12FunctionKey) + chr = SolveSpace::GraphicsWindow::FUNCTION_KEY_BASE + (chr - NSF1FunctionKey); + + NSUInteger flags = [event modifierFlags]; + if(flags & NSShiftKeyMask) + chr |= SolveSpace::GraphicsWindow::SHIFT_MASK; + if(flags & NSCommandKeyMask) + chr |= SolveSpace::GraphicsWindow::CTRL_MASK; + + // override builtin behavior: "focus on next cell", "close window" + if(chr == '\t' || chr == '\x1b') + [[NSApp mainMenu] performKeyEquivalent:event]; + else if(!chr || !SolveSpace::SS.GW.KeyDown(chr)) + [super keyDown:event]; +} + +- (void)startEditing:(NSString*)text at:(NSPoint)xy withHeight:(double)fontHeight + withMinWidthInChars:(int)minWidthChars { + // Convert to ij (vs. xy) style coordinates + NSSize size = [self convertSizeToBacking:[self bounds].size]; + NSPoint point = { + .x = xy.x + size.width / 2, + .y = xy.y - size.height / 2 + }; + [[self window] makeKeyWindow]; + [super startEditing:text at:[self convertPointFromBacking:point] + withHeight:fontHeight usingMonospace:FALSE]; + [self prepareEditorWithMinWidthInChars:minWidthChars]; +} + +- (void)prepareEditorWithMinWidthInChars:(int)minWidthChars { + NSFont *font = [editor font]; + NSGlyph glyphA = [font glyphWithName:@"a"]; + if(glyphA == -1) oops(); + CGFloat glyphAWidth = [font advancementForGlyph:glyphA].width; + + [editor sizeToFit]; + + NSSize frameSize = [editor frame].size; + frameSize.width = std::max(frameSize.width, glyphAWidth * minWidthChars); + [editor setFrameSize:frameSize]; +} + +- (void)didEdit:(NSString*)text { + SolveSpace::SS.GW.EditControlDone([text UTF8String]); + [self setNeedsDisplay:YES]; +} + +- (void)cancelOperation:(id)sender { + [self stopEditing]; +} + +- (NSPoint)ij_to_xy:(NSPoint)ij { + // Convert to xy (vs. ij) style coordinates, + // with (0, 0) at center + NSSize size = [self bounds].size; + return [self convertPointToBacking:(NSPoint){ + .x = ij.x - size.width / 2, .y = ij.y - size.height / 2 }]; +} +@end + +@interface GraphicsWindowDelegate : NSObject +- (BOOL)windowShouldClose:(id)sender; + +@property(readonly, getter=isFullscreen) BOOL fullscreen; +- (void)windowDidEnterFullScreen:(NSNotification *)notification; +- (void)windowDidExitFullScreen:(NSNotification *)notification; +@end + +@implementation GraphicsWindowDelegate +- (BOOL)windowShouldClose:(id)sender { + [NSApp terminate:sender]; + return FALSE; /* in case NSApp changes its mind */ +} + +@synthesize fullscreen; +- (void)windowDidEnterFullScreen:(NSNotification *)notification { + fullscreen = true; + /* Update the menus */ + SolveSpace::SS.GW.EnsureValidActives(); +} +- (void)windowDidExitFullScreen:(NSNotification *)notification { + fullscreen = false; + /* Update the menus */ + SolveSpace::SS.GW.EnsureValidActives(); +} +@end + +static NSWindow *GW; +static GraphicsWindowView *GWView; +static GraphicsWindowDelegate *GWDelegate; + +namespace SolveSpace { +void InitGraphicsWindow() { + GW = [[NSWindow alloc] init]; + GWDelegate = [[GraphicsWindowDelegate alloc] init]; + [GW setDelegate:GWDelegate]; + [GW setStyleMask:(NSTitledWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSResizableWindowMask)]; + [GW setFrameAutosaveName:@"GraphicsWindow"]; + [GW setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + if(![GW setFrameUsingName:[GW frameAutosaveName]]) + [GW setContentSize:(NSSize){ .width = 600, .height = 600 }]; + GWView = [[GraphicsWindowView alloc] init]; + [GW setContentView:GWView]; +} + +void GetGraphicsWindowSize(int *w, int *h) { + NSSize size = [GWView convertSizeToBacking:[GWView frame].size]; + *w = size.width; + *h = size.height; +} + +void InvalidateGraphics(void) { + [GWView setNeedsDisplay:YES]; +} + +void PaintGraphics(void) { + [GWView setNeedsDisplay:YES]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES); +} + +void SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + [GW setTitleWithRepresentedFilename:[NSString stringWithUTF8String:filename.c_str()]]; + } else { + [GW setTitle:@"(new sketch)"]; + [GW setRepresentedFilename:@""]; + } +} + +void ToggleFullScreen(void) { + [GW toggleFullScreen:nil]; +} + +bool FullScreenIsActive(void) { + return [GWDelegate isFullscreen]; +} + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str) { + [GWView startEditing:[NSString stringWithUTF8String:str.c_str()] + at:(NSPoint){(CGFloat)x, (CGFloat)y} + withHeight:fontHeight + withMinWidthInChars:minWidthChars]; +} + +void HideGraphicsEditControl(void) { + [GWView stopEditing]; +} + +bool GraphicsEditControlIsVisible(void) { + return [GWView isEditing]; +} +} + +/* Context menus */ + +static int contextMenuChoice; + +@interface ContextMenuResponder : NSObject ++ (void)handleClick:(id)sender; +@end + +@implementation ContextMenuResponder ++ (void)handleClick:(id)sender { + contextMenuChoice = [sender tag]; +} +@end + +namespace SolveSpace { +NSMenu *contextMenu, *contextSubmenu; + +void AddContextMenuItem(const char *label, int id_) { + NSMenuItem *menuItem; + if(label) { + menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithUTF8String:label] + action:@selector(handleClick:) keyEquivalent:@""]; + [menuItem setTarget:[ContextMenuResponder class]]; + [menuItem setTag:id_]; + } else { + menuItem = [NSMenuItem separatorItem]; + } + + if(id_ == CONTEXT_SUBMENU) { + [menuItem setSubmenu:contextSubmenu]; + contextSubmenu = nil; + } + + if(contextSubmenu) { + [contextSubmenu addItem:menuItem]; + } else { + if(!contextMenu) { + contextMenu = [[NSMenu alloc] + initWithTitle:[NSString stringWithUTF8String:label]]; + } + + [contextMenu addItem:menuItem]; + } +} + +void CreateContextSubmenu(void) { + if(contextSubmenu) oops(); + + contextSubmenu = [[NSMenu alloc] initWithTitle:@""]; +} + +int ShowContextMenu(void) { + if(!contextMenu) + return -1; + + [NSMenu popUpContextMenu:contextMenu + withEvent:[GWView lastContextMenuEvent] forView:GWView]; + + contextMenu = nil; + + return contextMenuChoice; +} +}; + +/* Main menu */ + +@interface MainMenuResponder : NSObject ++ (void)handleStatic:(id)sender; ++ (void)handleRecent:(id)sender; +@end + +@implementation MainMenuResponder ++ (void)handleStatic:(id)sender { + SolveSpace::GraphicsWindow::MenuEntry *entry = + (SolveSpace::GraphicsWindow::MenuEntry*)[sender tag]; + + if(entry->fn && ![(NSMenuItem*)sender hasSubmenu]) + entry->fn(entry->id); +} + ++ (void)handleRecent:(id)sender { + int id_ = [sender tag]; + if(id_ >= RECENT_OPEN && id_ < (RECENT_OPEN + MAX_RECENT)) + SolveSpace::SolveSpaceUI::MenuFile(id_); + else if(id_ >= RECENT_LINK && id_ < (RECENT_LINK + MAX_RECENT)) + SolveSpace::Group::MenuGroup(id_); +} +@end + +namespace SolveSpace { +std::map mainMenuItems; + +void InitMainMenu(NSMenu *mainMenu) { + NSMenuItem *menuItem = NULL; + NSMenu *levels[5] = {mainMenu, 0}; + NSString *label; + + const GraphicsWindow::MenuEntry *entry = &GraphicsWindow::menu[0]; + int current_level = 0; + while(entry->level >= 0) { + if(entry->level > current_level) { + NSMenu *menu = [[NSMenu alloc] initWithTitle:label]; + [menu setAutoenablesItems:NO]; + [menuItem setSubmenu:menu]; + + if(entry->level >= sizeof(levels) / sizeof(levels[0])) + oops(); + + levels[entry->level] = menu; + } + + current_level = entry->level; + + if(entry->label) { + /* OS X does not support mnemonics */ + label = [[NSString stringWithUTF8String:entry->label] + stringByReplacingOccurrencesOfString:@"&" withString:@""]; + + unichar accelChar = entry->accel & + ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK); + if(accelChar > GraphicsWindow::FUNCTION_KEY_BASE && + accelChar <= GraphicsWindow::FUNCTION_KEY_BASE + 12) { + accelChar = NSF1FunctionKey + (accelChar - GraphicsWindow::FUNCTION_KEY_BASE - 1); + } else if(accelChar == GraphicsWindow::DELETE_KEY) { + accelChar = NSBackspaceCharacter; + } + NSString *accel = [NSString stringWithCharacters:&accelChar length:1]; + + menuItem = [levels[entry->level] addItemWithTitle:label + action:NULL keyEquivalent:[accel lowercaseString]]; + + NSUInteger modifierMask = 0; + if(entry->accel & GraphicsWindow::SHIFT_MASK) + modifierMask |= NSShiftKeyMask; + else if(entry->accel & GraphicsWindow::CTRL_MASK) + modifierMask |= NSCommandKeyMask; + [menuItem setKeyEquivalentModifierMask:modifierMask]; + + [menuItem setTag:(NSInteger)entry]; + [menuItem setTarget:[MainMenuResponder class]]; + [menuItem setAction:@selector(handleStatic:)]; + } else { + [levels[entry->level] addItem:[NSMenuItem separatorItem]]; + } + + mainMenuItems[entry->id] = menuItem; + + ++entry; + } +} + +void EnableMenuById(int id_, bool enabled) { + [mainMenuItems[id_] setEnabled:enabled]; +} + +void CheckMenuById(int id_, bool checked) { + [mainMenuItems[id_] setState:(checked ? NSOnState : NSOffState)]; +} + +void RadioMenuById(int id_, bool selected) { + CheckMenuById(id_, selected); +} + +static void RefreshRecentMenu(int id_, int base) { + NSMenuItem *recent = mainMenuItems[id_]; + NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; + [recent setSubmenu:menu]; + + if(std::string(RecentFile[0]).empty()) { + NSMenuItem *placeholder = [[NSMenuItem alloc] + initWithTitle:@"(no recent files)" action:nil keyEquivalent:@""]; + [placeholder setEnabled:NO]; + [menu addItem:placeholder]; + } else { + for(int i = 0; i < MAX_RECENT; i++) { + if(std::string(RecentFile[i]).empty()) + break; + + NSMenuItem *item = [[NSMenuItem alloc] + initWithTitle:[[NSString stringWithUTF8String:RecentFile[i].c_str()] + stringByAbbreviatingWithTildeInPath] + action:nil keyEquivalent:@""]; + [item setTag:(base + i)]; + [item setAction:@selector(handleRecent:)]; + [item setTarget:[MainMenuResponder class]]; + [menu addItem:item]; + } + } +} + +void RefreshRecentMenus(void) { + RefreshRecentMenu(GraphicsWindow::MNU_OPEN_RECENT, RECENT_OPEN); + RefreshRecentMenu(GraphicsWindow::MNU_GROUP_RECENT, RECENT_LINK); +} + +void ToggleMenuBar(void) { + [NSMenu setMenuBarVisible:![NSMenu menuBarVisible]]; +} + +bool MenuBarIsVisible(void) { + return [NSMenu menuBarVisible]; +} +} + +/* Save/load */ + +bool SolveSpace::GetOpenFile(std::string *file, const std::string &defExtension, + const FileFilter ssFilters[]) { + NSOpenPanel *panel = [NSOpenPanel openPanel]; + NSMutableArray *filters = [[NSMutableArray alloc] init]; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + [filters addObject:[NSString stringWithUTF8String:*ssPattern]]; + } + } + [filters removeObjectIdenticalTo:@"*"]; + [panel setAllowedFileTypes:filters]; + + if([panel runModal] == NSFileHandlingPanelOKButton) { + *file = [[NSFileManager defaultManager] + fileSystemRepresentationWithPath:[[panel URL] path]]; + return true; + } else { + return false; + } +} + +@interface SaveFormatController : NSViewController +@property NSSavePanel *panel; +@property NSArray *extensions; +@property (nonatomic) IBOutlet NSPopUpButton *button; +@property (nonatomic) NSInteger index; +@end + +@implementation SaveFormatController +@synthesize panel, extensions, button, index; +- (void)setIndex:(NSInteger)newIndex { + self->index = newIndex; + NSString *extension = [extensions objectAtIndex:newIndex]; + if(![extension isEqual:@"*"]) { + NSString *filename = [panel nameFieldStringValue]; + NSString *basename = [[filename componentsSeparatedByString:@"."] objectAtIndex:0]; + [panel setNameFieldStringValue:[basename stringByAppendingPathExtension:extension]]; + } +} +@end + +bool SolveSpace::GetSaveFile(std::string *file, const std::string &defExtension, + const FileFilter ssFilters[]) { + NSSavePanel *panel = [NSSavePanel savePanel]; + + SaveFormatController *controller = + [[SaveFormatController alloc] initWithNibName:@"SaveFormatAccessory" bundle:nil]; + [controller setPanel:panel]; + [panel setAccessoryView:[controller view]]; + + NSMutableArray *extensions = [[NSMutableArray alloc] init]; + [controller setExtensions:extensions]; + + NSPopUpButton *button = [controller button]; + [button removeAllItems]; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + std::string desc; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + if(desc == "") { + desc = *ssPattern; + } else { + desc += ", "; + desc += *ssPattern; + } + } + std::string title = std::string(ssFilter->name) + " (" + desc + ")"; + [button addItemWithTitle:[NSString stringWithUTF8String:title.c_str()]]; + [extensions addObject:[NSString stringWithUTF8String:ssFilter->patterns[0]]]; + } + + int extensionIndex = 0; + if(defExtension != "") { + extensionIndex = [extensions indexOfObject: + [NSString stringWithUTF8String:defExtension.c_str()]]; + if(extensionIndex == -1) { + extensionIndex = 0; + } + } + + [button selectItemAtIndex:extensionIndex]; + [panel setNameFieldStringValue:[@"untitled" + stringByAppendingPathExtension:[extensions objectAtIndex:extensionIndex]]]; + + if([panel runModal] == NSFileHandlingPanelOKButton) { + *file = [[NSFileManager defaultManager] + fileSystemRepresentationWithPath:[[panel URL] path]]; + return true; + } else { + return false; + } +} + +SolveSpace::DialogChoice SolveSpace::SaveFileYesNoCancel(void) { + NSAlert *alert = [[NSAlert alloc] init]; + if(!std::string(SolveSpace::SS.saveFile).empty()) { + [alert setMessageText: + [[@"Do you want to save the changes you made to the sketch “" + stringByAppendingString: + [[NSString stringWithUTF8String:SolveSpace::SS.saveFile.c_str()] + stringByAbbreviatingWithTildeInPath]] + stringByAppendingString:@"”?"]]; + } else { + [alert setMessageText:@"Do you want to save the changes you made to the new sketch?"]; + } + [alert setInformativeText:@"Your changes will be lost if you don't save them."]; + [alert addButtonWithTitle:@"Save"]; + [alert addButtonWithTitle:@"Cancel"]; + [alert addButtonWithTitle:@"Don't Save"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + return DIALOG_CANCEL; + case NSAlertThirdButtonReturn: + return DIALOG_NO; + } +} + +SolveSpace::DialogChoice SolveSpace::LoadAutosaveYesNo(void) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText: + @"An autosave file is availible for this project."]; + [alert setInformativeText: + @"Do you want to load the autosave file instead?"]; + [alert addButtonWithTitle:@"Load"]; + [alert addButtonWithTitle:@"Don't Load"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + return DIALOG_NO; + } +} + +SolveSpace::DialogChoice SolveSpace::LocateImportedFileYesNoCancel( + const std::string &filename, bool canCancel) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:[NSString stringWithUTF8String: + ("The linked file " + filename + " is not present.").c_str()]]; + [alert setInformativeText: + @"Do you want to locate it manually?\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."]; + [alert addButtonWithTitle:@"Yes"]; + if(canCancel) + [alert addButtonWithTitle:@"Cancel"]; + [alert addButtonWithTitle:@"No"]; + switch([alert runModal]) { + case NSAlertFirstButtonReturn: + return DIALOG_YES; + case NSAlertSecondButtonReturn: + default: + if(canCancel) + return DIALOG_CANCEL; + /* fallthrough */ + case NSAlertThirdButtonReturn: + return DIALOG_NO; + } +} + +/* Text window */ + +@interface TextWindowView : GLViewWithEditor +{ + NSTrackingArea *trackingArea; +} + +@property (nonatomic, getter=isCursorHand) BOOL cursorHand; +@end + +@implementation TextWindowView +- (BOOL)isFlipped { + return YES; +} + +- (void)drawGL { + SolveSpace::SS.TW.Paint(); +} + +- (BOOL)acceptsFirstMouse:(NSEvent*)event { + return YES; +} + +- (void) createTrackingArea { + trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] + options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | + NSTrackingActiveAlways) + owner:self userInfo:nil]; + [self addTrackingArea:trackingArea]; +} + +- (void) updateTrackingAreas +{ + [self removeTrackingArea:trackingArea]; + [self createTrackingArea]; + [super updateTrackingAreas]; +} + +- (void)mouseMoved:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ false, /*leftDown*/ false, + point.x, -point.y); +} + +- (void)mouseDown:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ true, /*leftDown*/ true, + point.x, -point.y); +} + +- (void)mouseDragged:(NSEvent*)event { + NSPoint point = [self convertPointToBacking: + [self convertPoint:[event locationInWindow] fromView:nil]]; + SolveSpace::SS.TW.MouseEvent(/*leftClick*/ false, /*leftDown*/ true, + point.x, -point.y); +} + +- (void)setCursorHand:(BOOL)cursorHand { + if(_cursorHand != cursorHand) { + if(cursorHand) + [[NSCursor pointingHandCursor] push]; + else + [NSCursor pop]; + } + _cursorHand = cursorHand; +} + +- (void)mouseExited:(NSEvent*)event { + [self setCursorHand:FALSE]; + SolveSpace::SS.TW.MouseLeave(); +} + +- (void)startEditing:(NSString*)text at:(NSPoint)point { + point = [self convertPointFromBacking:point]; + point.y = -point.y + 2; + [[self window] makeKeyWindow]; + [super startEditing:text at:point withHeight:15.0 usingMonospace:TRUE]; + [editor setFrameSize:(NSSize){ + .width = [self bounds].size.width - [editor frame].origin.x, + .height = [editor intrinsicContentSize].height }]; +} + +- (void)stopEditing { + [super stopEditing]; + [GW makeKeyWindow]; +} + +- (void)didEdit:(NSString*)text { + SolveSpace::SS.TW.EditControlDone([text UTF8String]); +} + +- (void)cancelOperation:(id)sender { + [self stopEditing]; +} +@end + +@interface TextWindowDelegate : NSObject +- (BOOL)windowShouldClose:(id)sender; +- (void)windowDidResize:(NSNotification *)notification; +@end + +@implementation TextWindowDelegate +- (BOOL)windowShouldClose:(id)sender { + SolveSpace::GraphicsWindow::MenuView(SolveSpace::GraphicsWindow::MNU_SHOW_TEXT_WND); + return NO; +} + +- (void)windowDidResize:(NSNotification *)notification { + NSClipView *view = [[[notification object] contentView] contentView]; + NSView *document = [view documentView]; + NSSize size = [document frame].size; + size.width = [view frame].size.width; + [document setFrameSize:size]; +} +@end + +static NSPanel *TW; +static TextWindowView *TWView; +static TextWindowDelegate *TWDelegate; + +namespace SolveSpace { +void InitTextWindow() { + TW = [[NSPanel alloc] init]; + TWDelegate = [[TextWindowDelegate alloc] init]; + [TW setStyleMask:(NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | + NSUtilityWindowMask)]; + [[TW standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES]; + [[TW standardWindowButton:NSWindowZoomButton] setHidden:YES]; + [TW setTitle:@"Property Browser"]; + [TW setFrameAutosaveName:@"TextWindow"]; + [TW setFloatingPanel:YES]; + [TW setBecomesKeyOnlyIfNeeded:YES]; + + NSScrollView *scrollView = [[NSScrollView alloc] init]; + [TW setContentView:scrollView]; + [scrollView setBackgroundColor:[NSColor blackColor]]; + [scrollView setHasVerticalScroller:YES]; + [scrollView setScrollerKnobStyle:NSScrollerKnobStyleLight]; + [[scrollView contentView] setCopiesOnScroll:YES]; + + TWView = [[TextWindowView alloc] init]; + [scrollView setDocumentView:TWView]; + + [TW setDelegate:TWDelegate]; + if(![TW setFrameUsingName:[TW frameAutosaveName]]) + [TW setContentSize:(NSSize){ .width = 420, .height = 300 }]; + [TWView setFrame:[[scrollView contentView] frame]]; +} + +void ShowTextWindow(bool visible) { + if(visible) + [TW orderFront:nil]; + else + [TW close]; +} + +void GetTextWindowSize(int *w, int *h) { + NSSize size = [TWView convertSizeToBacking:[TWView frame].size]; + *w = size.width; + *h = size.height; +} + +void InvalidateText(void) { + NSSize size = [TWView convertSizeToBacking:[TWView frame].size]; + size.height = (SS.TW.top[SS.TW.rows - 1] + 1) * TextWindow::LINE_HEIGHT / 2; + [TWView setFrameSize:[TWView convertSizeFromBacking:size]]; + [TWView setNeedsDisplay:YES]; +} + +void MoveTextScrollbarTo(int pos, int maxPos, int page) { + /* unused; we draw the entire text window and scroll in Cocoa */ +} + +void SetMousePointerToHand(bool is_hand) { + [TWView setCursorHand:is_hand]; +} + +void ShowTextEditControl(int x, int y, const std::string &str) { + return [TWView startEditing:[NSString stringWithUTF8String:str.c_str()] + at:(NSPoint){(CGFloat)x, (CGFloat)y}]; +} + +void HideTextEditControl(void) { + return [TWView stopEditing]; +} + +bool TextEditControlIsVisible(void) { + return [TWView isEditing]; +} +}; + +/* Miscellanea */ + +void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error) { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setAlertStyle:(error ? NSWarningAlertStyle : NSInformationalAlertStyle)]; + [alert addButtonWithTitle:@"OK"]; + + /* do some additional formatting of the message these are + heuristics, but they are made failsafe and lead to nice results. */ + NSString *input = [NSString stringWithUTF8String:str]; + NSRange dot = [input rangeOfCharacterFromSet: + [NSCharacterSet characterSetWithCharactersInString:@".:"]]; + if(dot.location != NSNotFound) { + [alert setMessageText:[[input substringToIndex:dot.location + 1] + stringByReplacingOccurrencesOfString:@"\n" withString:@" "]]; + [alert setInformativeText: + [[input substringFromIndex:dot.location + 1] + stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]]; + } else { + [alert setMessageText:[input + stringByReplacingOccurrencesOfString:@"\n" withString:@" "]]; + } + + [alert runModal]; +} + +void SolveSpace::OpenWebsite(const char *url) { + [[NSWorkspace sharedWorkspace] openURL: + [NSURL URLWithString:[NSString stringWithUTF8String:url]]]; +} + +std::vector SolveSpace::GetFontFiles() { + std::vector fonts; + + NSArray *fontNames = [[NSFontManager sharedFontManager] availableFonts]; + for(NSString *fontName in fontNames) { + CTFontDescriptorRef fontRef = + CTFontDescriptorCreateWithNameAndSize ((__bridge CFStringRef)fontName, 10.0); + CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fontRef, kCTFontURLAttribute); + NSString *fontPath = [NSString stringWithString:[(NSURL *)CFBridgingRelease(url) path]]; + fonts.push_back([[NSFileManager defaultManager] + fileSystemRepresentationWithPath:fontPath]); + } + + return fonts; +} + +/* Application lifecycle */ + +@interface ApplicationDelegate : NSObject +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication; +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; +- (void)applicationWillTerminate:(NSNotification *)aNotification; +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; +- (IBAction)preferences:(id)sender; +@end + +@implementation ApplicationDelegate +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { + return YES; +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + if(SolveSpace::SS.OkayToStartNewFile()) + return NSTerminateNow; + else + return NSTerminateCancel; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + SolveSpace::SS.Exit(); +} + +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { + return SolveSpace::SS.OpenFile([filename UTF8String]); +} + +- (IBAction)preferences:(id)sender { + SolveSpace::SS.TW.GoToScreen(SolveSpace::TextWindow::SCREEN_CONFIGURATION); + SolveSpace::SS.ScheduleShowTW(); +} +@end + +void SolveSpace::ExitNow(void) { + [NSApp stop:nil]; +} + +/* + * Normally we would just link to the 3DconnexionClient framework. + * We don't want to (are not allowed to) distribute the official + * framework, so we're trying to use the one installed on the users + * computer. There are some different versions of the framework, + * the official one and re-implementations using an open source driver + * for older devices (spacenav-plus). So weak-linking isn't an option, + * either. The only remaining way is using CFBundle to dynamically + * load the library at runtime, and also detect its availability. + * + * We're also defining everything needed from the 3DconnexionClientAPI, + * so we're not depending on the API headers. + */ + +#pragma pack(push,2) + +enum { + kConnexionClientModeTakeOver = 1, + kConnexionClientModePlugin = 2 +}; + +#define kConnexionMsgDeviceState '3dSR' +#define kConnexionMaskButtons 0x00FF +#define kConnexionMaskAxis 0x3F00 + +typedef struct { + uint16_t version; + uint16_t client; + uint16_t command; + int16_t param; + int32_t value; + UInt64 time; + uint8_t report[8]; + uint16_t buttons8; + int16_t axis[6]; + uint16_t address; + uint32_t buttons; +} ConnexionDeviceState, *ConnexionDeviceStatePtr; + +#pragma pack(pop) + +typedef void (*ConnexionAddedHandlerProc)(io_connect_t); +typedef void (*ConnexionRemovedHandlerProc)(io_connect_t); +typedef void (*ConnexionMessageHandlerProc)(io_connect_t, natural_t, void *); + +typedef OSErr (*InstallConnexionHandlersProc)(ConnexionMessageHandlerProc, ConnexionAddedHandlerProc, ConnexionRemovedHandlerProc); +typedef void (*CleanupConnexionHandlersProc)(void); +typedef UInt16 (*RegisterConnexionClientProc)(UInt32, UInt8 *, UInt16, UInt32); +typedef void (*UnregisterConnexionClientProc)(UInt16); + +static BOOL connexionShiftIsDown = NO; +static UInt16 connexionClient = 0; +static UInt32 connexionSignature = 'SoSp'; +static UInt8 *connexionName = (UInt8 *)"SolveSpace"; +static CFBundleRef spaceBundle = NULL; +static InstallConnexionHandlersProc installConnexionHandlers = NULL; +static CleanupConnexionHandlersProc cleanupConnexionHandlers = NULL; +static RegisterConnexionClientProc registerConnexionClient = NULL; +static UnregisterConnexionClientProc unregisterConnexionClient = NULL; + +static void connexionAdded(io_connect_t con) {} +static void connexionRemoved(io_connect_t con) {} +static void connexionMessage(io_connect_t con, natural_t type, void *arg) { + if (type != kConnexionMsgDeviceState) { + return; + } + + ConnexionDeviceState *device = (ConnexionDeviceState *)arg; + + dispatch_async(dispatch_get_main_queue(), ^(void){ + SolveSpace::SS.GW.SpaceNavigatorMoved( + (double)device->axis[0] * -0.25, + (double)device->axis[1] * -0.25, + (double)device->axis[2] * 0.25, + (double)device->axis[3] * -0.0005, + (double)device->axis[4] * -0.0005, + (double)device->axis[5] * -0.0005, + (connexionShiftIsDown == YES) ? 1 : 0 + ); + }); +} + +static void connexionInit() { + NSString *bundlePath = @"/Library/Frameworks/3DconnexionClient.framework"; + NSURL *bundleURL = [NSURL fileURLWithPath:bundlePath]; + spaceBundle = CFBundleCreate(kCFAllocatorDefault, (__bridge CFURLRef)bundleURL); + + // Don't continue if no Spacemouse driver is installed on this machine + if (spaceBundle == NULL) { + return; + } + + installConnexionHandlers = (InstallConnexionHandlersProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("InstallConnexionHandlers")); + + cleanupConnexionHandlers = (CleanupConnexionHandlersProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("CleanupConnexionHandlers")); + + registerConnexionClient = (RegisterConnexionClientProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("RegisterConnexionClient")); + + unregisterConnexionClient = (UnregisterConnexionClientProc) + CFBundleGetFunctionPointerForName(spaceBundle, + CFSTR("UnregisterConnexionClient")); + + // Only continue if all required symbols have been loaded + if ((installConnexionHandlers == NULL) || (cleanupConnexionHandlers == NULL) + || (registerConnexionClient == NULL) || (unregisterConnexionClient == NULL)) { + CFRelease(spaceBundle); + spaceBundle = NULL; + return; + } + + installConnexionHandlers(&connexionMessage, &connexionAdded, &connexionRemoved); + connexionClient = registerConnexionClient(connexionSignature, connexionName, + kConnexionClientModeTakeOver, kConnexionMaskButtons | kConnexionMaskAxis); + + // Monitor modifier flags to detect Shift button state changes + [NSEvent addLocalMonitorForEventsMatchingMask:(NSKeyDownMask | NSFlagsChangedMask) + handler:^(NSEvent *event) { + if (event.modifierFlags & NSShiftKeyMask) { + connexionShiftIsDown = YES; + } + return event; + }]; + + [NSEvent addLocalMonitorForEventsMatchingMask:(NSKeyUpMask | NSFlagsChangedMask) + handler:^(NSEvent *event) { + if (!(event.modifierFlags & NSShiftKeyMask)) { + connexionShiftIsDown = NO; + } + return event; + }]; +} + +static void connexionClose() { + if (spaceBundle == NULL) { + return; + } + + unregisterConnexionClient(connexionClient); + cleanupConnexionHandlers(); + + CFRelease(spaceBundle); +} + +int main(int argc, const char *argv[]) { + [NSApplication sharedApplication]; + ApplicationDelegate *delegate = [[ApplicationDelegate alloc] init]; + [NSApp setDelegate:delegate]; + + SolveSpace::InitGraphicsWindow(); + SolveSpace::InitTextWindow(); + [[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil]; + SolveSpace::InitMainMenu([NSApp mainMenu]); + + connexionInit(); + SolveSpace::SS.Init(); + + [GW makeKeyAndOrderFront:nil]; + [NSApp run]; + + connexionClose(); + SolveSpace::SK.Clear(); + SolveSpace::SS.Clear(); + + return 0; +} diff --git a/src/config.h.in b/src/config.h.in new file mode 100644 index 0000000..aca7757 --- /dev/null +++ b/src/config.h.in @@ -0,0 +1,13 @@ +#ifndef __CONFIG_H +#define __CONFIG_H + +#define PACKAGE_VERSION "@solvespace_VERSION_MAJOR@.@solvespace_VERSION_MINOR@~@solvespace_GIT_HASH@" + +/* Do we have the si library on win32, or libspnav on *nix? */ +#cmakedefine HAVE_SPACEWARE + +#cmakedefine HAVE_GTK +#cmakedefine HAVE_GTK2 +#cmakedefine HAVE_GTK3 + +#endif diff --git a/src/confscreen.cpp b/src/confscreen.cpp new file mode 100644 index 0000000..a7ad678 --- /dev/null +++ b/src/confscreen.cpp @@ -0,0 +1,463 @@ +//----------------------------------------------------------------------------- +// For the configuration screen, setup items that are not specific to the +// file being edited right now. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) { + SS.TW.ShowEditControl(8, ssprintf("%.2f, %.2f, %.2f", CO(SS.lightDir[v]))); + SS.TW.edit.meaning = EDIT_LIGHT_DIRECTION; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeLightIntensity(int link, uint32_t v) { + SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.lightIntensity[v])); + SS.TW.edit.meaning = EDIT_LIGHT_INTENSITY; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeColor(int link, uint32_t v) { + SS.TW.ShowEditControlWithColorPicker(13, SS.modelColor[v]); + + SS.TW.edit.meaning = EDIT_COLOR; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeChordTolerance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%lg", SS.chordTol)); + SS.TW.edit.meaning = EDIT_CHORD_TOLERANCE; + SS.TW.edit.i = 0; +} + +void TextWindow::ScreenChangeMaxSegments(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.maxSegments)); + SS.TW.edit.meaning = EDIT_MAX_SEGMENTS; + SS.TW.edit.i = 0; +} + +void TextWindow::ScreenChangeExportChordTolerance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%lg", SS.exportChordTol)); + SS.TW.edit.meaning = EDIT_CHORD_TOLERANCE; + SS.TW.edit.i = 1; +} + +void TextWindow::ScreenChangeExportMaxSegments(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.exportMaxSegments)); + SS.TW.edit.meaning = EDIT_MAX_SEGMENTS; + SS.TW.edit.i = 1; +} + +void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%.3f", 1000*SS.cameraTangent)); + SS.TW.edit.meaning = EDIT_CAMERA_TANGENT; +} + +void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.gridSpacing)); + SS.TW.edit.meaning = EDIT_GRID_SPACING; +} + +void TextWindow::ScreenChangeDigitsAfterDecimal(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%d", SS.UnitDigitsAfterDecimal())); + SS.TW.edit.meaning = EDIT_DIGITS_AFTER_DECIMAL; +} + +void TextWindow::ScreenChangeExportScale(int link, uint32_t v) { + SS.TW.ShowEditControl(5, ssprintf("%.3f", (double)SS.exportScale)); + SS.TW.edit.meaning = EDIT_EXPORT_SCALE; +} + +void TextWindow::ScreenChangeExportOffset(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.exportOffset)); + SS.TW.edit.meaning = EDIT_EXPORT_OFFSET; +} + +void TextWindow::ScreenChangeFixExportColors(int link, uint32_t v) { + SS.fixExportColors = !SS.fixExportColors; +} + +void TextWindow::ScreenChangeBackFaces(int link, uint32_t v) { + SS.drawBackFaces = !SS.drawBackFaces; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCheckClosedContour(int link, uint32_t v) { + SS.checkClosedContour = !SS.checkClosedContour; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeShadedTriangles(int link, uint32_t v) { + SS.exportShadedTriangles = !SS.exportShadedTriangles; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangePwlCurves(int link, uint32_t v) { + SS.exportPwlCurves = !SS.exportPwlCurves; + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCanvasSizeAuto(int link, uint32_t v) { + if(link == 't') { + SS.exportCanvasSizeAuto = true; + } else { + SS.exportCanvasSizeAuto = false; + } + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeCanvasSize(int link, uint32_t v) { + double d; + switch(v) { + case 0: d = SS.exportMargin.left; break; + case 1: d = SS.exportMargin.right; break; + case 2: d = SS.exportMargin.bottom; break; + case 3: d = SS.exportMargin.top; break; + + case 10: d = SS.exportCanvas.width; break; + case 11: d = SS.exportCanvas.height; break; + case 12: d = SS.exportCanvas.dx; break; + case 13: d = SS.exportCanvas.dy; break; + + default: return; + } + int col = 13; + if(v < 10) col = 11; + SS.TW.ShowEditControl(col, SS.MmToString(d)); + SS.TW.edit.meaning = EDIT_CANVAS_SIZE; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) { + std::string buf; + switch(link) { + case 'd': + SS.TW.edit.meaning = EDIT_G_CODE_DEPTH; + buf += SS.MmToString(SS.gCode.depth); + break; + + case 's': + SS.TW.edit.meaning = EDIT_G_CODE_PASSES; + buf += std::to_string(SS.gCode.passes); + break; + + case 'F': + SS.TW.edit.meaning = EDIT_G_CODE_FEED; + buf += SS.MmToString(SS.gCode.feed); + break; + + case 'P': + SS.TW.edit.meaning = EDIT_G_CODE_PLUNGE_FEED; + buf += SS.MmToString(SS.gCode.plungeFeed); + break; + } + SS.TW.ShowEditControl(14, buf); +} + +void TextWindow::ScreenChangeAutosaveInterval(int link, uint32_t v) { + SS.TW.ShowEditControl(3, std::to_string(SS.autosaveInterval)); + SS.TW.edit.meaning = EDIT_AUTOSAVE_INTERVAL; +} + +void TextWindow::ShowConfiguration(void) { + int i; + Printf(true, "%Ft user color (r, g, b)"); + + for(i = 0; i < SS.MODEL_COLORS; i++) { + Printf(false, "%Bp #%d: %Bz %Bp (%@, %@, %@) %f%D%Ll%Fl[change]%E", + (i & 1) ? 'd' : 'a', + i, &SS.modelColor[i], + (i & 1) ? 'd' : 'a', + SS.modelColor[i].redF(), + SS.modelColor[i].greenF(), + SS.modelColor[i].blueF(), + &ScreenChangeColor, i); + } + + Printf(false, ""); + Printf(false, "%Ft light direction intensity"); + for(i = 0; i < 2; i++) { + Printf(false, "%Bp #%d (%2,%2,%2)%Fl%D%f%Ll[c]%E " + "%2 %Fl%D%f%Ll[c]%E", + (i & 1) ? 'd' : 'a', i, + CO(SS.lightDir[i]), i, &ScreenChangeLightDirection, + SS.lightIntensity[i], i, &ScreenChangeLightIntensity); + } + + Printf(false, ""); + Printf(false, "%Ft chord tolerance (in percents)%E"); + Printf(false, "%Ba %@ %% %Fl%Ll%f%D[change]%E; %@ mm, %d triangles", + SS.chordTol, + &ScreenChangeChordTolerance, 0, SS.chordTolCalculated, + SK.GetGroup(SS.GW.activeGroup)->displayMesh.l.n); + Printf(false, "%Ft max piecewise linear segments%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.maxSegments, + &ScreenChangeMaxSegments); + + Printf(false, ""); + Printf(false, "%Ft export chord tolerance (in mm)%E"); + Printf(false, "%Ba %@ %Fl%Ll%f%D[change]%E", + SS.exportChordTol, + &ScreenChangeExportChordTolerance, 0); + Printf(false, "%Ft export max piecewise linear segments%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.exportMaxSegments, + &ScreenChangeExportMaxSegments); + + Printf(false, ""); + Printf(false, "%Ft perspective factor (0 for parallel)%E"); + Printf(false, "%Ba %# %Fl%Ll%f%D[change]%E", + SS.cameraTangent*1000, + &ScreenChangeCameraTangent, 0); + Printf(false, "%Ft snap grid spacing%E"); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.gridSpacing).c_str(), + &ScreenChangeGridSpacing, 0); + Printf(false, "%Ft digits after decimal point to show%E"); + Printf(false, "%Ba %d %Fl%Ll%f%D[change]%E (e.g. '%s')", + SS.UnitDigitsAfterDecimal(), + &ScreenChangeDigitsAfterDecimal, 0, + SS.MmToString(SS.StringToMm("1.23456789")).c_str()); + + Printf(false, ""); + Printf(false, "%Ft export scale factor (1:1=mm, 1:25.4=inch)"); + Printf(false, "%Ba 1:%# %Fl%Ll%f%D[change]%E", + (double)SS.exportScale, + &ScreenChangeExportScale, 0); + Printf(false, "%Ft cutter radius offset (0=no offset) "); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportOffset).c_str(), + &ScreenChangeExportOffset, 0); + + Printf(false, ""); + Printf(false, " %Fd%f%Ll%s export shaded 2d triangles%E", + &ScreenChangeShadedTriangles, + SS.exportShadedTriangles ? CHECK_TRUE : CHECK_FALSE); + if(fabs(SS.exportOffset) > LENGTH_EPS) { + Printf(false, " %Fd%s curves as piecewise linear%E " + "(since cutter radius is not zero)", CHECK_TRUE); + } else { + Printf(false, " %Fd%f%Ll%s export curves as piecewise linear%E", + &ScreenChangePwlCurves, + SS.exportPwlCurves ? CHECK_TRUE : CHECK_FALSE); + } + Printf(false, " %Fd%f%Ll%s fix white exported lines%E", + &ScreenChangeFixExportColors, + SS.fixExportColors ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "%Ft export canvas size: " + "%f%Fd%Lf%s fixed%E " + "%f%Fd%Lt%s auto%E", + &ScreenChangeCanvasSizeAuto, + !SS.exportCanvasSizeAuto ? RADIO_TRUE : RADIO_FALSE, + &ScreenChangeCanvasSizeAuto, + SS.exportCanvasSizeAuto ? RADIO_TRUE : RADIO_FALSE); + + if(SS.exportCanvasSizeAuto) { + Printf(false, "%Ft (by margins around exported geometry)"); + Printf(false, "%Ba%Ft left: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.left).c_str(), &ScreenChangeCanvasSize, 0); + Printf(false, "%Bd%Ft right: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.right).c_str(), &ScreenChangeCanvasSize, 1); + Printf(false, "%Ba%Ft bottom: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.bottom).c_str(), &ScreenChangeCanvasSize, 2); + Printf(false, "%Bd%Ft top: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportMargin.top).c_str(), &ScreenChangeCanvasSize, 3); + } else { + Printf(false, "%Ft (by absolute dimensions and offsets)"); + Printf(false, "%Ba%Ft width: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.width).c_str(), &ScreenChangeCanvasSize, 10); + Printf(false, "%Bd%Ft height: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.height).c_str(), &ScreenChangeCanvasSize, 11); + Printf(false, "%Ba%Ft offset x: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.dx).c_str(), &ScreenChangeCanvasSize, 12); + Printf(false, "%Bd%Ft offset y: %Fd%s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.exportCanvas.dy).c_str(), &ScreenChangeCanvasSize, 13); + } + + Printf(false, ""); + Printf(false, "%Ft exported g code parameters"); + Printf(false, "%Ba%Ft depth: %Fd%s %Fl%Ld%f[change]%E", + SS.MmToString(SS.gCode.depth).c_str(), &ScreenChangeGCodeParameter); + Printf(false, "%Bd%Ft passes: %Fd%d %Fl%Ls%f[change]%E", + SS.gCode.passes, &ScreenChangeGCodeParameter); + Printf(false, "%Ba%Ft feed: %Fd%s %Fl%LF%f[change]%E", + SS.MmToString(SS.gCode.feed).c_str(), &ScreenChangeGCodeParameter); + Printf(false, "%Bd%Ft plunge fd: %Fd%s %Fl%LP%f[change]%E", + SS.MmToString(SS.gCode.plungeFeed).c_str(), &ScreenChangeGCodeParameter); + + Printf(false, ""); + Printf(false, " %Fd%f%Ll%s draw triangle back faces in red%E", + &ScreenChangeBackFaces, + SS.drawBackFaces ? CHECK_TRUE : CHECK_FALSE); + Printf(false, " %Fd%f%Ll%s check sketch for closed contour%E", + &ScreenChangeCheckClosedContour, + SS.checkClosedContour ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "%Ft autosave interval (in minutes)%E"); + Printf(false, "%Ba %d %Fl%Ll%f[change]%E", + SS.autosaveInterval, &ScreenChangeAutosaveInterval); + + Printf(false, ""); + Printf(false, " %Ftgl vendor %E%s", glGetString(GL_VENDOR)); + Printf(false, " %Ft renderer %E%s", glGetString(GL_RENDERER)); + Printf(false, " %Ft version %E%s", glGetString(GL_VERSION)); +} + +bool TextWindow::EditControlDoneForConfiguration(const char *s) { + switch(edit.meaning) { + case EDIT_LIGHT_INTENSITY: + SS.lightIntensity[edit.i] = min(1.0, max(0.0, atof(s))); + InvalidateGraphics(); + break; + + case EDIT_LIGHT_DIRECTION: { + double x, y, z; + if(sscanf(s, "%lf, %lf, %lf", &x, &y, &z)==3) { + SS.lightDir[edit.i] = Vector::From(x, y, z); + } else { + Error("Bad format: specify coordinates as x, y, z"); + } + InvalidateGraphics(); + break; + } + case EDIT_COLOR: { + Vector rgb; + if(sscanf(s, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + SS.modelColor[edit.i] = RGBf(rgb.x, rgb.y, rgb.z); + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_CHORD_TOLERANCE: { + if(edit.i == 0) { + SS.chordTol = max(0.0, atof(s)); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + SS.exportChordTol = max(0.0, atof(s)); + } + break; + } + case EDIT_MAX_SEGMENTS: { + if(edit.i == 0) { + SS.maxSegments = min(1000, max(7, atoi(s))); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + SS.exportMaxSegments = min(1000, max(7, atoi(s))); + } + break; + } + case EDIT_CAMERA_TANGENT: { + SS.cameraTangent = (min(2.0, max(0.0, atof(s))))/1000.0; + if(!SS.usePerspectiveProj) { + Message("The perspective factor will have no effect until you " + "enable View -> Use Perspective Projection."); + } + InvalidateGraphics(); + break; + } + case EDIT_GRID_SPACING: { + SS.gridSpacing = (float)min(1e4, max(1e-3, SS.StringToMm(s))); + InvalidateGraphics(); + break; + } + case EDIT_DIGITS_AFTER_DECIMAL: { + int v = atoi(s); + if(v < 0 || v > 8) { + Error("Specify between 0 and 8 digits after the decimal."); + } else { + SS.SetUnitDigitsAfterDecimal(v); + } + InvalidateGraphics(); + break; + } + case EDIT_EXPORT_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = e->Eval(); + if(fabs(ev) < 0.001 || isnan(ev)) { + Error("Export scale must not be zero!"); + } else { + SS.exportScale = (float)ev; + } + } + break; + } + case EDIT_EXPORT_OFFSET: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = SS.ExprToMm(e); + if(isnan(ev) || ev < 0) { + Error("Cutter radius offset must not be negative!"); + } else { + SS.exportOffset = (float)ev; + } + } + break; + } + case EDIT_CANVAS_SIZE: { + Expr *e = Expr::From(s, true); + if(!e) { + break; + } + float d = (float)SS.ExprToMm(e); + switch(edit.i) { + case 0: SS.exportMargin.left = d; break; + case 1: SS.exportMargin.right = d; break; + case 2: SS.exportMargin.bottom = d; break; + case 3: SS.exportMargin.top = d; break; + + case 10: SS.exportCanvas.width = d; break; + case 11: SS.exportCanvas.height = d; break; + case 12: SS.exportCanvas.dx = d; break; + case 13: SS.exportCanvas.dy = d; break; + } + break; + } + case EDIT_G_CODE_DEPTH: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.depth = (float)SS.ExprToMm(e); + break; + } + case EDIT_G_CODE_PASSES: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.passes = (int)(e->Eval()); + SS.gCode.passes = max(1, min(1000, SS.gCode.passes)); + break; + } + case EDIT_G_CODE_FEED: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.feed = (float)SS.ExprToMm(e); + break; + } + case EDIT_G_CODE_PLUNGE_FEED: { + Expr *e = Expr::From(s, true); + if(e) SS.gCode.plungeFeed = (float)SS.ExprToMm(e); + break; + } + case EDIT_AUTOSAVE_INTERVAL: { + int interval; + if(sscanf(s, "%d", &interval)==1) { + if(interval >= 1) { + SS.autosaveInterval = interval; + SetAutosaveTimerFor(interval); + } else { + Error("Bad value: autosave interval should be positive"); + } + } else { + Error("Bad format: specify interval in integral minutes"); + } + break; + } + + default: return false; + } + return true; +} + diff --git a/src/constraint.cpp b/src/constraint.cpp new file mode 100644 index 0000000..e5aae1b --- /dev/null +++ b/src/constraint.cpp @@ -0,0 +1,745 @@ +//----------------------------------------------------------------------------- +// Implementation of the Constraint menu, to create new constraints in +// the sketch. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string Constraint::DescriptionString(void) { + const char *s; + switch(type) { + case POINTS_COINCIDENT: s = "pts-coincident"; break; + case PT_PT_DISTANCE: s = "pt-pt-distance"; break; + case PT_LINE_DISTANCE: s = "pt-line-distance"; break; + case PT_PLANE_DISTANCE: s = "pt-plane-distance"; break; + case PT_FACE_DISTANCE: s = "pt-face-distance"; break; + case PROJ_PT_DISTANCE: s = "proj-pt-pt-distance"; break; + case PT_IN_PLANE: s = "pt-in-plane"; break; + case PT_ON_LINE: s = "pt-on-line"; break; + case PT_ON_FACE: s = "pt-on-face"; break; + case EQUAL_LENGTH_LINES: s = "eq-length"; break; + case EQ_LEN_PT_LINE_D: s = "eq-length-and-pt-ln-dist"; break; + case EQ_PT_LN_DISTANCES: s = "eq-pt-line-distances"; break; + case LENGTH_RATIO: s = "length-ratio"; break; + case LENGTH_DIFFERENCE: s = "length-difference"; break; + case SYMMETRIC: s = "symmetric"; break; + case SYMMETRIC_HORIZ: s = "symmetric-h"; break; + case SYMMETRIC_VERT: s = "symmetric-v"; break; + case SYMMETRIC_LINE: s = "symmetric-line"; break; + case AT_MIDPOINT: s = "at-midpoint"; break; + case HORIZONTAL: s = "horizontal"; break; + case VERTICAL: s = "vertical"; break; + case DIAMETER: s = "diameter"; break; + case PT_ON_CIRCLE: s = "pt-on-circle"; break; + case SAME_ORIENTATION: s = "same-orientation"; break; + case ANGLE: s = "angle"; break; + case PARALLEL: s = "parallel"; break; + case ARC_LINE_TANGENT: s = "arc-line-tangent"; break; + case CUBIC_LINE_TANGENT: s = "cubic-line-tangent"; break; + case CURVE_CURVE_TANGENT: s = "curve-curve-tangent"; break; + case PERPENDICULAR: s = "perpendicular"; break; + case EQUAL_RADIUS: s = "eq-radius"; break; + case EQUAL_ANGLE: s = "eq-angle"; break; + case EQUAL_LINE_ARC_LEN: s = "eq-line-len-arc-len"; break; + case WHERE_DRAGGED: s = "lock-where-dragged"; break; + case COMMENT: s = "comment"; break; + default: s = "???"; break; + } + + return ssprintf("c%03x-%s", h.v, s); +} + +#ifndef LIBRARY + +//----------------------------------------------------------------------------- +// Delete all constraints with the specified type, entityA, ptA. We use this +// when auto-removing constraints that would become redundant. +//----------------------------------------------------------------------------- +void Constraint::DeleteAllConstraintsFor(int type, hEntity entityA, hEntity ptA) +{ + SK.constraint.ClearTags(); + for(int i = 0; i < SK.constraint.n; i++) { + ConstraintBase *ct = &(SK.constraint.elem[i]); + if(ct->type != type) continue; + + if(ct->entityA.v != entityA.v) continue; + if(ct->ptA.v != ptA.v) continue; + ct->tag = 1; + } + SK.constraint.RemoveTagged(); + // And no need to do anything special, since nothing + // ever depends on a constraint. But do clear the + // hover, in case the just-deleted constraint was + // hovered. + SS.GW.hover.Clear(); +} + +hConstraint Constraint::AddConstraint(Constraint *c) { + return AddConstraint(c, true); +} + +hConstraint Constraint::AddConstraint(Constraint *c, bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + + SK.constraint.AddAndAssignId(c); + + SS.MarkGroupDirty(c->group); + SS.ScheduleGenerateAll(); + return c->h; +} + +hConstraint Constraint::Constrain(int type, hEntity ptA, hEntity ptB, + hEntity entityA, hEntity entityB, + bool other, bool other2) +{ + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = type; + c.ptA = ptA; + c.ptB = ptB; + c.entityA = entityA; + c.entityB = entityB; + c.other = other; + c.other2 = other2; + return AddConstraint(&c, false); +} + +hConstraint Constraint::Constrain(int type, hEntity ptA, hEntity ptB, hEntity entityA){ + return Constrain(type, ptA, ptB, entityA, Entity::NO_ENTITY, false, false); +} + +hConstraint Constraint::ConstrainCoincident(hEntity ptA, hEntity ptB) { + return Constrain(POINTS_COINCIDENT, ptA, ptB, + Entity::NO_ENTITY, Entity::NO_ENTITY, false, false); +} + +void Constraint::MenuConstrain(int id) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + + switch(id) { + case GraphicsWindow::MNU_DISTANCE_DIA: + case GraphicsWindow::MNU_REF_DISTANCE: { + if(gs.points == 2 && gs.n == 2) { + c.type = PT_PT_DISTANCE; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && gs.n == 1) { + c.type = PT_PT_DISTANCE; + Entity *e = SK.GetEntity(gs.entity[0]); + c.ptA = e->point[0]; + c.ptB = e->point[1]; + } else if(gs.vectors == 1 && gs.points == 2 && gs.n == 3) { + c.type = PROJ_PT_DISTANCE; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + c.entityA = gs.vector[0]; + } else if(gs.workplanes == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_PLANE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.lineSegments == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_LINE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) { + c.type = PT_FACE_DISTANCE; + c.ptA = gs.point[0]; + c.entityA = gs.face[0]; + } else if(gs.circlesOrArcs == 1 && gs.n == 1) { + c.type = DIAMETER; + c.entityA = gs.entity[0]; + } else { + Error( +"Bad selection for distance / diameter constraint. This " +"constraint can apply to:\n\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n"); + return; + } + if(c.type == PT_PT_DISTANCE || c.type == PROJ_PT_DISTANCE) { + Vector n = SS.GW.projRight.Cross(SS.GW.projUp); + Vector a = SK.GetEntity(c.ptA)->PointGetNum(); + Vector b = SK.GetEntity(c.ptB)->PointGetNum(); + c.disp.offset = n.Cross(a.Minus(b)); + c.disp.offset = (c.disp.offset).WithMagnitude(50/SS.GW.scale); + } else { + c.disp.offset = Vector::From(0, 0, 0); + } + + if(id == GraphicsWindow::MNU_REF_DISTANCE) { + c.reference = true; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_ON_ENTITY: + if(gs.points == 2 && gs.n == 2) { + c.type = POINTS_COINCIDENT; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.points == 1 && gs.workplanes == 1 && gs.n == 2) { + c.type = PT_IN_PLANE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.lineSegments == 1 && gs.n == 2) { + c.type = PT_ON_LINE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.circlesOrArcs == 1 && gs.n == 2) { + c.type = PT_ON_CIRCLE; + c.ptA = gs.point[0]; + c.entityA = gs.entity[0]; + } else if(gs.points == 1 && gs.faces == 1 && gs.n == 2) { + c.type = PT_ON_FACE; + c.ptA = gs.point[0]; + c.entityA = gs.face[0]; + } else { + Error("Bad selection for on point / curve / plane constraint. " + "This constraint can apply to:\n\n" + " * two points (points coincident)\n" + " * a point and a workplane (point in plane)\n" + " * a point and a line segment (point on line)\n" + " * a point and a circle or arc (point on curve)\n" + " * a point and a plane face (point on face)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_EQUAL: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = EQUAL_LENGTH_LINES; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else if(gs.lineSegments == 2 && gs.points == 2 && gs.n == 4) { + c.type = EQ_PT_LN_DISTANCES; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.entityB = gs.entity[1]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && gs.points == 2 && gs.n == 3) { + // The same line segment for the distances, but different + // points. + c.type = EQ_PT_LN_DISTANCES; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.entityB = gs.entity[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 2 && gs.points == 1 && gs.n == 3) { + c.type = EQ_LEN_PT_LINE_D; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + c.ptA = gs.point[0]; + } else if(gs.vectors == 4 && gs.n == 4) { + c.type = EQUAL_ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.entityC = gs.vector[2]; + c.entityD = gs.vector[3]; + } else if(gs.vectors == 3 && gs.n == 3) { + c.type = EQUAL_ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.entityC = gs.vector[1]; + c.entityD = gs.vector[2]; + } else if(gs.circlesOrArcs == 2 && gs.n == 2) { + c.type = EQUAL_RADIUS; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else if(gs.arcs == 1 && gs.lineSegments == 1 && gs.n == 2) { + c.type = EQUAL_LINE_ARC_LEN; + if(SK.GetEntity(gs.entity[0])->type == Entity::ARC_OF_CIRCLE) { + c.entityA = gs.entity[1]; + c.entityB = gs.entity[0]; + } else { + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } + } else { + Error("Bad selection for equal length / radius constraint. " + "This constraint can apply to:\n\n" + " * two line segments (equal length)\n" + " * two line segments and two points " + "(equal point-line distances)\n" + " * a line segment and two points " + "(equal point-line distances)\n" + " * a line segment, and a point and line segment " + "(point-line distance equals length)\n" + " * four line segments or normals " + "(equal angle between A,B and C,D)\n" + " * three line segments or normals " + "(equal angle between A,B and B,C)\n" + " * two circles or arcs (equal radius)\n" + " * a line segment and an arc " + "(line segment length equals arc length)\n"); + return; + } + if(c.type == EQUAL_ANGLE) { + // Infer the nearest supplementary angle from the sketch. + Vector a1 = SK.GetEntity(c.entityA)->VectorGetNum(), + b1 = SK.GetEntity(c.entityB)->VectorGetNum(), + a2 = SK.GetEntity(c.entityC)->VectorGetNum(), + b2 = SK.GetEntity(c.entityD)->VectorGetNum(); + double d1 = a1.Dot(b1), d2 = a2.Dot(b2); + + if(d1*d2 < 0) { + c.other = true; + } + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_RATIO: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = LENGTH_RATIO; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else { + Error("Bad selection for length ratio constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n"); + return; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_DIFFERENCE: + if(gs.lineSegments == 2 && gs.n == 2) { + c.type = LENGTH_DIFFERENCE; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } else { + Error("Bad selection for length difference constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n"); + return; + } + + c.valA = 0; + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_AT_MIDPOINT: + if(gs.lineSegments == 1 && gs.points == 1 && gs.n == 2) { + c.type = AT_MIDPOINT; + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + + // If a point is at-midpoint, then no reason to also constrain + // it on-line; so auto-remove that. + DeleteAllConstraintsFor(PT_ON_LINE, c.entityA, c.ptA); + } else if(gs.lineSegments == 1 && gs.workplanes == 1 && gs.n == 2) { + c.type = AT_MIDPOINT; + int i = SK.GetEntity(gs.entity[0])->IsWorkplane() ? 1 : 0; + c.entityA = gs.entity[i]; + c.entityB = gs.entity[1-i]; + } else { + Error("Bad selection for at midpoint constraint. This " + "constraint can apply to:\n\n" + " * a line segment and a point " + "(point at midpoint)\n" + " * a line segment and a workplane " + "(line's midpoint on plane)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_SYMMETRIC: + if(gs.points == 2 && + ((gs.workplanes == 1 && gs.n == 3) || + (gs.n == 2))) + { + if(gs.entities > 0) + c.entityA = gs.entity[0]; + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + } else if(gs.lineSegments == 1 && + ((gs.workplanes == 1 && gs.n == 2) || + (gs.n == 1))) + { + Entity *line; + if(SK.GetEntity(gs.entity[0])->IsWorkplane()) { + line = SK.GetEntity(gs.entity[1]); + c.entityA = gs.entity[0]; + } else { + line = SK.GetEntity(gs.entity[0]); + } + c.ptA = line->point[0]; + c.ptB = line->point[1]; + } else if(SS.GW.LockedInWorkplane() + && gs.lineSegments == 2 && gs.n == 2) + { + Entity *l0 = SK.GetEntity(gs.entity[0]), + *l1 = SK.GetEntity(gs.entity[1]); + + if((l1->group.v != SS.GW.activeGroup.v) || + (l1->construction && !(l0->construction))) + { + swap(l0, l1); + } + c.ptA = l1->point[0]; + c.ptB = l1->point[1]; + c.entityA = l0->h; + c.type = SYMMETRIC_LINE; + } else if(SS.GW.LockedInWorkplane() + && gs.lineSegments == 1 && gs.points == 2 && gs.n == 3) + { + c.ptA = gs.point[0]; + c.ptB = gs.point[1]; + c.entityA = gs.entity[0]; + c.type = SYMMETRIC_LINE; + } else { + Error("Bad selection for symmetric constraint. This constraint " + "can apply to:\n\n" + " * two points or a line segment " + "(symmetric about workplane's coordinate axis)\n" + " * line segment, and two points or a line segment " + "(symmetric about line segment)\n" + " * workplane, and two points or a line segment " + "(symmetric about workplane)\n"); + return; + } + if(c.type != 0) { + // Already done, symmetry about a line segment in a workplane + } else if(c.entityA.v == Entity::NO_ENTITY.v) { + // Horizontal / vertical symmetry, implicit symmetry plane + // normal to the workplane + if(c.workplane.v == Entity::FREE_IN_3D.v) { + Error("Must be locked in to workplane when constraining " + "symmetric without an explicit symmetry plane."); + return; + } + Vector pa = SK.GetEntity(c.ptA)->PointGetNum(); + Vector pb = SK.GetEntity(c.ptB)->PointGetNum(); + Vector dp = pa.Minus(pb); + EntityBase *norm = SK.GetEntity(c.workplane)->Normal();; + Vector u = norm->NormalU(), v = norm->NormalV(); + if(fabs(dp.Dot(u)) > fabs(dp.Dot(v))) { + c.type = SYMMETRIC_HORIZ; + } else { + c.type = SYMMETRIC_VERT; + } + if(gs.lineSegments == 1) { + // If this line segment is already constrained horiz or + // vert, then auto-remove that redundant constraint. + DeleteAllConstraintsFor(HORIZONTAL, (gs.entity[0]), + Entity::NO_ENTITY); + DeleteAllConstraintsFor(VERTICAL, (gs.entity[0]), + Entity::NO_ENTITY); + + } + } else { + // Symmetry with a symmetry plane specified explicitly. + c.type = SYMMETRIC; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_VERTICAL: + case GraphicsWindow::MNU_HORIZONTAL: { + hEntity ha, hb; + if(c.workplane.v == Entity::FREE_IN_3D.v) { + Error("Select workplane before constraining horiz/vert."); + return; + } + if(gs.lineSegments == 1 && gs.n == 1) { + c.entityA = gs.entity[0]; + Entity *e = SK.GetEntity(c.entityA); + ha = e->point[0]; + hb = e->point[1]; + } else if(gs.points == 2 && gs.n == 2) { + ha = c.ptA = gs.point[0]; + hb = c.ptB = gs.point[1]; + } else { + Error("Bad selection for horizontal / vertical constraint. " + "This constraint can apply to:\n\n" + " * two points\n" + " * a line segment\n"); + return; + } + if(id == GraphicsWindow::MNU_HORIZONTAL) { + c.type = HORIZONTAL; + } else { + c.type = VERTICAL; + } + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_ORIENTED_SAME: { + if(gs.anyNormals == 2 && gs.n == 2) { + c.type = SAME_ORIENTATION; + c.entityA = gs.anyNormal[0]; + c.entityB = gs.anyNormal[1]; + } else { + Error("Bad selection for same orientation constraint. This " + "constraint can apply to:\n\n" + " * two normals\n"); + return; + } + SS.UndoRemember(); + + Entity *nfree = SK.GetEntity(c.entityA); + Entity *nref = SK.GetEntity(c.entityB); + if(nref->group.v == SS.GW.activeGroup.v) { + swap(nref, nfree); + } + if(nfree->group.v == SS.GW.activeGroup.v && + nref ->group.v != SS.GW.activeGroup.v) + { + // nfree is free, and nref is locked (since it came from a + // previous group); so let's force nfree aligned to nref, + // and make convergence easy + Vector ru = nref ->NormalU(), rv = nref ->NormalV(); + Vector fu = nfree->NormalU(), fv = nfree->NormalV(); + + if(fabs(fu.Dot(ru)) < fabs(fu.Dot(rv))) { + // There might be an odd*90 degree rotation about the + // normal vector; allow that, since the numerical + // constraint does + swap(ru, rv); + } + fu = fu.Dot(ru) > 0 ? ru : ru.ScaledBy(-1); + fv = fv.Dot(rv) > 0 ? rv : rv.ScaledBy(-1); + + nfree->NormalForceTo(Quaternion::From(fu, fv)); + } + AddConstraint(&c, false); + break; + } + + case GraphicsWindow::MNU_OTHER_ANGLE: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->type == ANGLE) { + SS.UndoRemember(); + c->other = !(c->other); + c->ModifyToSatisfy(); + break; + } + if(c->type == EQUAL_ANGLE) { + SS.UndoRemember(); + c->other = !(c->other); + SS.MarkGroupDirty(c->group); + SS.ScheduleGenerateAll(); + break; + } + } + Error("Must select an angle constraint."); + return; + + case GraphicsWindow::MNU_REFERENCE: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && c->type != COMMENT) { + (c->reference) = !(c->reference); + SK.GetGroup(c->group)->clean = false; + SS.GenerateAll(); + break; + } + } + Error("Must select a constraint with associated label."); + return; + + case GraphicsWindow::MNU_ANGLE: + case GraphicsWindow::MNU_REF_ANGLE: { + if(gs.vectors == 2 && gs.n == 2) { + c.type = ANGLE; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + c.valA = 0; + } else { + Error("Bad selection for angle constraint. This constraint " + "can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n"); + return; + } + + Entity *ea = SK.GetEntity(c.entityA), + *eb = SK.GetEntity(c.entityB); + if(ea->type == Entity::LINE_SEGMENT && + eb->type == Entity::LINE_SEGMENT) + { + Vector a0 = SK.GetEntity(ea->point[0])->PointGetNum(), + a1 = SK.GetEntity(ea->point[1])->PointGetNum(), + b0 = SK.GetEntity(eb->point[0])->PointGetNum(), + b1 = SK.GetEntity(eb->point[1])->PointGetNum(); + if(a0.Equals(b0) || a1.Equals(b1)) { + // okay, vectors should be drawn in same sense + } else if(a0.Equals(b1) || a1.Equals(b0)) { + // vectors are in opposite sense + c.other = true; + } else { + // no shared point; not clear which intersection to draw + } + } + + if(id == GraphicsWindow::MNU_REF_ANGLE) { + c.reference = true; + } + + c.ModifyToSatisfy(); + AddConstraint(&c); + break; + } + + case GraphicsWindow::MNU_PARALLEL: + if(gs.vectors == 2 && gs.n == 2) { + c.type = PARALLEL; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + } else if(gs.lineSegments == 1 && gs.arcs == 1 && gs.n == 2) { + Entity *line = SK.GetEntity(gs.entity[0]); + Entity *arc = SK.GetEntity(gs.entity[1]); + if(line->type == Entity::ARC_OF_CIRCLE) { + swap(line, arc); + } + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector a1 = SK.GetEntity(arc->point[1])->PointGetNum(), + a2 = SK.GetEntity(arc->point[2])->PointGetNum(); + + if(l0.Equals(a1) || l1.Equals(a1)) { + c.other = false; + } else if(l0.Equals(a2) || l1.Equals(a2)) { + c.other = true; + } else { + Error("The tangent arc and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent."); + return; + } + c.type = ARC_LINE_TANGENT; + c.entityA = arc->h; + c.entityB = line->h; + } else if(gs.lineSegments == 1 && gs.cubics == 1 && gs.n == 2) { + Entity *line = SK.GetEntity(gs.entity[0]); + Entity *cubic = SK.GetEntity(gs.entity[1]); + if(line->type == Entity::CUBIC) { + swap(line, cubic); + } + Vector l0 = SK.GetEntity(line->point[0])->PointGetNum(), + l1 = SK.GetEntity(line->point[1])->PointGetNum(); + Vector as = cubic->CubicGetStartNum(), + af = cubic->CubicGetFinishNum(); + + if(l0.Equals(as) || l1.Equals(as)) { + c.other = false; + } else if(l0.Equals(af) || l1.Equals(af)) { + c.other = true; + } else { + Error("The tangent cubic and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent."); + return; + } + c.type = CUBIC_LINE_TANGENT; + c.entityA = cubic->h; + c.entityB = line->h; + } else if(gs.cubics + gs.arcs == 2 && gs.n == 2) { + if(!SS.GW.LockedInWorkplane()) { + Error("Curve-curve tangency must apply in workplane."); + return; + } + Entity *eA = SK.GetEntity(gs.entity[0]), + *eB = SK.GetEntity(gs.entity[1]); + Vector as = eA->EndpointStart(), + af = eA->EndpointFinish(), + bs = eB->EndpointStart(), + bf = eB->EndpointFinish(); + if(as.Equals(bs)) { + c.other = false; c.other2 = false; + } else if(as.Equals(bf)) { + c.other = false; c.other2 = true; + } else if(af.Equals(bs)) { + c.other = true; c.other2 = false; + } else if(af.Equals(bf)) { + c.other = true; c.other2 = true; + } else { + Error("The curves must share an endpoint. Constrain them " + "with Constrain -> On Point before constraining " + "tangent."); + return; + } + c.type = CURVE_CURVE_TANGENT; + c.entityA = eA->h; + c.entityB = eB->h; + } else { + Error("Bad selection for parallel / tangent constraint. This " + "constraint can apply to:\n\n" + " * two line segments (parallel)\n" + " * a line segment and a normal (parallel)\n" + " * two normals (parallel)\n" + " * two line segments, arcs, or beziers, that share " + "an endpoint (tangent)\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_PERPENDICULAR: + if(gs.vectors == 2 && gs.n == 2) { + c.type = PERPENDICULAR; + c.entityA = gs.vector[0]; + c.entityB = gs.vector[1]; + } else { + Error("Bad selection for perpendicular constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_WHERE_DRAGGED: + if(gs.points == 1 && gs.n == 1) { + c.type = WHERE_DRAGGED; + c.ptA = gs.point[0]; + } else { + Error("Bad selection for lock point where dragged constraint. " + "This constraint can apply to:\n\n" + " * a point\n"); + return; + } + AddConstraint(&c); + break; + + case GraphicsWindow::MNU_COMMENT: + SS.GW.pending.operation = GraphicsWindow::MNU_COMMENT; + SS.GW.pending.description = "click center of comment text"; + SS.ScheduleShowTW(); + break; + + default: oops(); + } + + SS.GW.ClearSelection(); + InvalidateGraphics(); +} + +#endif /* ! LIBRARY */ diff --git a/src/constrainteq.cpp b/src/constrainteq.cpp new file mode 100644 index 0000000..8acde19 --- /dev/null +++ b/src/constrainteq.cpp @@ -0,0 +1,794 @@ +//----------------------------------------------------------------------------- +// Given a constraint, generate one or more equations in our symbolic algebra +// system to represent that constraint; also various geometric helper +// functions for that. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hConstraint ConstraintBase::NO_CONSTRAINT = { 0 }; + +bool ConstraintBase::HasLabel(void) { + switch(type) { + case PT_LINE_DISTANCE: + case PT_PLANE_DISTANCE: + case PT_FACE_DISTANCE: + case PT_PT_DISTANCE: + case PROJ_PT_DISTANCE: + case DIAMETER: + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case ANGLE: + case COMMENT: + return true; + + default: + return false; + } +} + +Expr *ConstraintBase::VectorsParallel(int eq, ExprVector a, ExprVector b) { + ExprVector r = a.Cross(b); + // Hairy ball theorem screws me here. There's no clean solution that I + // know, so let's pivot on the initial numerical guess. Our caller + // has ensured that if one of our input vectors is already known (e.g. + // it's from a previous group), then that one's in a; so that one's + // not going to move, and we should pivot on that one. + double mx = fabs((a.x)->Eval()); + double my = fabs((a.y)->Eval()); + double mz = fabs((a.z)->Eval()); + // The basis vector in which the vectors have the LEAST energy is the + // one that we should look at most (e.g. if both vectors lie in the xy + // plane, then the z component of the cross product is most important). + // So find the strongest component of a and b, and that's the component + // of the cross product to ignore. + Expr *e0, *e1; + if(mx > my && mx > mz) { + e0 = r.y; e1 = r.z; + } else if(my > mz) { + e0 = r.z; e1 = r.x; + } else { + e0 = r.x; e1 = r.y; + } + + if(eq == 0) return e0; + if(eq == 1) return e1; + oops(); +} + +Expr *ConstraintBase::PointLineDistance(hEntity wrkpl, hEntity hpt, hEntity hln) +{ + EntityBase *ln = SK.GetEntity(hln); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + + EntityBase *p = SK.GetEntity(hpt); + + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + ExprVector ep = p->PointGetExprs(); + + ExprVector ea = a->PointGetExprs(); + ExprVector eb = b->PointGetExprs(); + ExprVector eab = ea.Minus(eb); + Expr *m = eab.Magnitude(); + + return ((eab.Cross(ea.Minus(ep))).Magnitude())->Div(m); + } else { + Expr *ua, *va, *ub, *vb; + a->PointGetExprsInWorkplane(wrkpl, &ua, &va); + b->PointGetExprsInWorkplane(wrkpl, &ub, &vb); + + Expr *du = ua->Minus(ub); + Expr *dv = va->Minus(vb); + + Expr *u, *v; + p->PointGetExprsInWorkplane(wrkpl, &u, &v); + + Expr *m = ((du->Square())->Plus(dv->Square()))->Sqrt(); + + Expr *proj = (dv->Times(ua->Minus(u)))->Minus( + (du->Times(va->Minus(v)))); + + return proj->Div(m); + } +} + +Expr *ConstraintBase::PointPlaneDistance(ExprVector p, hEntity hpl) { + ExprVector n; + Expr *d; + SK.GetEntity(hpl)->WorkplaneGetPlaneExprs(&n, &d); + return (p.Dot(n))->Minus(d); +} + +Expr *ConstraintBase::Distance(hEntity wrkpl, hEntity hpa, hEntity hpb) { + EntityBase *pa = SK.GetEntity(hpa); + EntityBase *pb = SK.GetEntity(hpb); + if(!(pa->IsPoint() && pb->IsPoint())) oops(); + + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + // This is true distance + ExprVector ea, eb, eab; + ea = pa->PointGetExprs(); + eb = pb->PointGetExprs(); + eab = ea.Minus(eb); + + return eab.Magnitude(); + } else { + // This is projected distance, in the given workplane. + Expr *au, *av, *bu, *bv; + + pa->PointGetExprsInWorkplane(wrkpl, &au, &av); + pb->PointGetExprsInWorkplane(wrkpl, &bu, &bv); + + Expr *du = au->Minus(bu); + Expr *dv = av->Minus(bv); + + return ((du->Square())->Plus(dv->Square()))->Sqrt(); + } +} + +//----------------------------------------------------------------------------- +// Return the cosine of the angle between two vectors. If a workplane is +// specified, then it's the cosine of their projections into that workplane. +//----------------------------------------------------------------------------- +Expr *ConstraintBase::DirectionCosine(hEntity wrkpl, + ExprVector ae, ExprVector be) +{ + if(wrkpl.v == EntityBase::FREE_IN_3D.v) { + Expr *mags = (ae.Magnitude())->Times(be.Magnitude()); + return (ae.Dot(be))->Div(mags); + } else { + EntityBase *w = SK.GetEntity(wrkpl); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + Expr *ua = u.Dot(ae); + Expr *va = v.Dot(ae); + Expr *ub = u.Dot(be); + Expr *vb = v.Dot(be); + Expr *maga = (ua->Square()->Plus(va->Square()))->Sqrt(); + Expr *magb = (ub->Square()->Plus(vb->Square()))->Sqrt(); + Expr *dot = (ua->Times(ub))->Plus(va->Times(vb)); + return dot->Div(maga->Times(magb)); + } +} + +ExprVector ConstraintBase::PointInThreeSpace(hEntity workplane, + Expr *u, Expr *v) +{ + EntityBase *w = SK.GetEntity(workplane); + + ExprVector ub = w->Normal()->NormalExprsU(); + ExprVector vb = w->Normal()->NormalExprsV(); + ExprVector ob = w->WorkplaneGetOffsetExprs(); + + return (ub.ScaledBy(u)).Plus(vb.ScaledBy(v)).Plus(ob); +} + +void ConstraintBase::ModifyToSatisfy(void) { + if(type == ANGLE) { + Vector a = SK.GetEntity(entityA)->VectorGetNum(); + Vector b = SK.GetEntity(entityB)->VectorGetNum(); + if(other) a = a.ScaledBy(-1); + if(workplane.v != EntityBase::FREE_IN_3D.v) { + a = a.ProjectVectorInto(workplane); + b = b.ProjectVectorInto(workplane); + } + double c = (a.Dot(b))/(a.Magnitude() * b.Magnitude()); + valA = acos(c)*180/PI; + } else { + // We'll fix these ones up by looking at their symbolic equation; + // that means no extra work. + IdList l = {}; + // Generate the equations even if this is a reference dimension + GenerateReal(&l); + if(l.n != 1) oops(); + + // These equations are written in the form f(...) - d = 0, where + // d is the value of the valA. + valA += (l.elem[0].e)->Eval(); + + l.Clear(); + } +} + +void ConstraintBase::AddEq(IdList *l, Expr *expr, int index) +{ + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void ConstraintBase::Generate(IdList *l) { + if(!reference) { + GenerateReal(l); + } +} +void ConstraintBase::GenerateReal(IdList *l) { + Expr *exA = Expr::From(valA); + + switch(type) { + case PT_PT_DISTANCE: + AddEq(l, Distance(workplane, ptA, ptB)->Minus(exA), 0); + break; + + case PROJ_PT_DISTANCE: { + ExprVector pA = SK.GetEntity(ptA)->PointGetExprs(), + pB = SK.GetEntity(ptB)->PointGetExprs(), + dp = pB.Minus(pA); + + ExprVector pp = SK.GetEntity(entityA)->VectorGetExprs(); + pp = pp.WithMagnitude(Expr::From(1.0)); + + AddEq(l, (dp.Dot(pp))->Minus(exA), 0); + break; + } + + case PT_LINE_DISTANCE: + AddEq(l, + PointLineDistance(workplane, ptA, entityA)->Minus(exA), 0); + break; + + case PT_PLANE_DISTANCE: { + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + AddEq(l, (PointPlaneDistance(pt, entityA))->Minus(exA), 0); + break; + } + + case PT_FACE_DISTANCE: { + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *f = SK.GetEntity(entityA); + ExprVector p0 = f->FaceGetPointExprs(); + ExprVector n = f->FaceGetNormalExprs(); + AddEq(l, (pt.Minus(p0)).Dot(n)->Minus(exA), 0); + break; + } + + case EQUAL_LENGTH_LINES: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + AddEq(l, Distance(workplane, a->point[0], a->point[1])->Minus( + Distance(workplane, b->point[0], b->point[1])), 0); + break; + } + + // These work on distance squared, since the pt-line distances are + // signed, and we want the absolute value. + case EQ_LEN_PT_LINE_D: { + EntityBase *forLen = SK.GetEntity(entityA); + Expr *d1 = Distance(workplane, forLen->point[0], forLen->point[1]); + Expr *d2 = PointLineDistance(workplane, ptA, entityB); + AddEq(l, (d1->Square())->Minus(d2->Square()), 0); + break; + } + case EQ_PT_LN_DISTANCES: { + Expr *d1 = PointLineDistance(workplane, ptA, entityA); + Expr *d2 = PointLineDistance(workplane, ptB, entityB); + AddEq(l, (d1->Square())->Minus(d2->Square()), 0); + break; + } + + case LENGTH_RATIO: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + Expr *la = Distance(workplane, a->point[0], a->point[1]); + Expr *lb = Distance(workplane, b->point[0], b->point[1]); + AddEq(l, (la->Div(lb))->Minus(exA), 0); + break; + } + + case LENGTH_DIFFERENCE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + Expr *la = Distance(workplane, a->point[0], a->point[1]); + Expr *lb = Distance(workplane, b->point[0], b->point[1]); + AddEq(l, (la->Minus(lb))->Minus(exA), 0); + break; + } + + case DIAMETER: { + EntityBase *circle = SK.GetEntity(entityA); + Expr *r = circle->CircleGetRadiusExpr(); + AddEq(l, (r->Times(Expr::From(2)))->Minus(exA), 0); + break; + } + + case EQUAL_RADIUS: { + EntityBase *c1 = SK.GetEntity(entityA); + EntityBase *c2 = SK.GetEntity(entityB); + AddEq(l, (c1->CircleGetRadiusExpr())->Minus( + c2->CircleGetRadiusExpr()), 0); + break; + } + + case EQUAL_LINE_ARC_LEN: { + EntityBase *line = SK.GetEntity(entityA), + *arc = SK.GetEntity(entityB); + + // Get the line length + ExprVector l0 = SK.GetEntity(line->point[0])->PointGetExprs(), + l1 = SK.GetEntity(line->point[1])->PointGetExprs(); + Expr *ll = (l1.Minus(l0)).Magnitude(); + + // And get the arc radius, and the cosine of its angle + EntityBase *ao = SK.GetEntity(arc->point[0]), + *as = SK.GetEntity(arc->point[1]), + *af = SK.GetEntity(arc->point[2]); + + ExprVector aos = (as->PointGetExprs()).Minus(ao->PointGetExprs()), + aof = (af->PointGetExprs()).Minus(ao->PointGetExprs()); + Expr *r = aof.Magnitude(); + + ExprVector n = arc->Normal()->NormalExprsN(); + ExprVector u = aos.WithMagnitude(Expr::From(1.0)); + ExprVector v = n.Cross(u); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta = aof.Dot(u)->Div(r); + Expr *sintheta = aof.Dot(v)->Div(r); + + double thetas, thetaf, dtheta; + arc->ArcGetAngles(&thetas, &thetaf, &dtheta); + Expr *theta; + if(dtheta < 3*PI/4) { + theta = costheta->ACos(); + } else if(dtheta < 5*PI/4) { + // As the angle crosses pi, cos theta is not invertible; + // so use the sine to stop blowing up + theta = Expr::From(PI)->Minus(sintheta->ASin()); + } else { + theta = (Expr::From(2*PI))->Minus(costheta->ACos()); + } + + // And write the equation; r*theta = L + AddEq(l, (r->Times(theta))->Minus(ll), 0); + break; + } + + case POINTS_COINCIDENT: { + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + if(workplane.v == EntityBase::FREE_IN_3D.v) { + ExprVector pa = a->PointGetExprs(); + ExprVector pb = b->PointGetExprs(); + AddEq(l, pa.x->Minus(pb.x), 0); + AddEq(l, pa.y->Minus(pb.y), 1); + AddEq(l, pa.z->Minus(pb.z), 2); + } else { + Expr *au, *av; + Expr *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + AddEq(l, au->Minus(bu), 0); + AddEq(l, av->Minus(bv), 1); + } + break; + } + + case PT_IN_PLANE: + // This one works the same, whether projected or not. + AddEq(l, PointPlaneDistance( + SK.GetEntity(ptA)->PointGetExprs(), entityA), 0); + break; + + case PT_ON_FACE: { + // a plane, n dot (p - p0) = 0 + ExprVector p = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *f = SK.GetEntity(entityA); + ExprVector p0 = f->FaceGetPointExprs(); + ExprVector n = f->FaceGetNormalExprs(); + AddEq(l, (p.Minus(p0)).Dot(n), 0); + break; + } + + case PT_ON_LINE: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + EntityBase *p = SK.GetEntity(ptA); + + ExprVector ep = p->PointGetExprs(); + ExprVector ea = a->PointGetExprs(); + ExprVector eb = b->PointGetExprs(); + ExprVector eab = ea.Minus(eb); + + // Construct a vector from the point to either endpoint of + // the line segment, and choose the longer of these. + ExprVector eap = ea.Minus(ep); + ExprVector ebp = eb.Minus(ep); + ExprVector elp = + (ebp.Magnitude()->Eval() > eap.Magnitude()->Eval()) ? + ebp : eap; + + if(p->group.v == group.v) { + AddEq(l, VectorsParallel(0, eab, elp), 0); + AddEq(l, VectorsParallel(1, eab, elp), 1); + } else { + AddEq(l, VectorsParallel(0, elp, eab), 0); + AddEq(l, VectorsParallel(1, elp, eab), 1); + } + } else { + AddEq(l, PointLineDistance(workplane, ptA, entityA), 0); + } + break; + + case PT_ON_CIRCLE: { + // This actually constrains the point to lie on the cylinder. + EntityBase *circle = SK.GetEntity(entityA); + ExprVector center = SK.GetEntity(circle->point[0])->PointGetExprs(); + ExprVector pt = SK.GetEntity(ptA)->PointGetExprs(); + EntityBase *normal = SK.GetEntity(circle->normal); + ExprVector u = normal->NormalExprsU(), + v = normal->NormalExprsV(); + + Expr *du = (center.Minus(pt)).Dot(u), + *dv = (center.Minus(pt)).Dot(v); + + Expr *r = circle->CircleGetRadiusExpr(); + + AddEq(l, + ((du->Square())->Plus(dv->Square()))->Minus(r->Square()), 0); + break; + } + + case AT_MIDPOINT: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *ln = SK.GetEntity(entityA); + ExprVector a = SK.GetEntity(ln->point[0])->PointGetExprs(); + ExprVector b = SK.GetEntity(ln->point[1])->PointGetExprs(); + ExprVector m = (a.Plus(b)).ScaledBy(Expr::From(0.5)); + + if(ptA.v) { + ExprVector p = SK.GetEntity(ptA)->PointGetExprs(); + AddEq(l, (m.x)->Minus(p.x), 0); + AddEq(l, (m.y)->Minus(p.y), 1); + AddEq(l, (m.z)->Minus(p.z), 2); + } else { + AddEq(l, PointPlaneDistance(m, entityB), 0); + } + } else { + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ln->point[0]); + EntityBase *b = SK.GetEntity(ln->point[1]); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + Expr *mu = Expr::From(0.5)->Times(au->Plus(bu)); + Expr *mv = Expr::From(0.5)->Times(av->Plus(bv)); + + if(ptA.v) { + EntityBase *p = SK.GetEntity(ptA); + Expr *pu, *pv; + p->PointGetExprsInWorkplane(workplane, &pu, &pv); + AddEq(l, pu->Minus(mu), 0); + AddEq(l, pv->Minus(mv), 1); + } else { + ExprVector m = PointInThreeSpace(workplane, mu, mv); + AddEq(l, PointPlaneDistance(m, entityB), 0); + } + } + break; + + case SYMMETRIC: + if(workplane.v == EntityBase::FREE_IN_3D.v) { + EntityBase *plane = SK.GetEntity(entityA); + EntityBase *ea = SK.GetEntity(ptA); + EntityBase *eb = SK.GetEntity(ptB); + ExprVector a = ea->PointGetExprs(); + ExprVector b = eb->PointGetExprs(); + + // The midpoint of the line connecting the symmetric points + // lies on the plane of the symmetry. + ExprVector m = (a.Plus(b)).ScaledBy(Expr::From(0.5)); + AddEq(l, PointPlaneDistance(m, plane->h), 0); + + // And projected into the plane of symmetry, the points are + // coincident. + Expr *au, *av, *bu, *bv; + ea->PointGetExprsInWorkplane(plane->h, &au, &av); + eb->PointGetExprsInWorkplane(plane->h, &bu, &bv); + AddEq(l, au->Minus(bu), 1); + AddEq(l, av->Minus(bv), 2); + } else { + EntityBase *plane = SK.GetEntity(entityA); + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + Expr *mu = Expr::From(0.5)->Times(au->Plus(bu)); + Expr *mv = Expr::From(0.5)->Times(av->Plus(bv)); + + ExprVector m = PointInThreeSpace(workplane, mu, mv); + AddEq(l, PointPlaneDistance(m, plane->h), 0); + + // Construct a vector within the workplane that is normal + // to the symmetry pane's normal (i.e., that lies in the + // plane of symmetry). The line connecting the points is + // perpendicular to that constructed vector. + EntityBase *w = SK.GetEntity(workplane); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + + ExprVector pa = a->PointGetExprs(); + ExprVector pb = b->PointGetExprs(); + ExprVector n; + Expr *d; + plane->WorkplaneGetPlaneExprs(&n, &d); + AddEq(l, (n.Cross(u.Cross(v))).Dot(pa.Minus(pb)), 1); + } + break; + + case SYMMETRIC_HORIZ: + case SYMMETRIC_VERT: { + EntityBase *a = SK.GetEntity(ptA); + EntityBase *b = SK.GetEntity(ptB); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + + if(type == SYMMETRIC_HORIZ) { + AddEq(l, av->Minus(bv), 0); + AddEq(l, au->Plus(bu), 1); + } else { + AddEq(l, au->Minus(bu), 0); + AddEq(l, av->Plus(bv), 1); + } + break; + } + + case SYMMETRIC_LINE: { + EntityBase *pa = SK.GetEntity(ptA); + EntityBase *pb = SK.GetEntity(ptB); + + Expr *pau, *pav, *pbu, *pbv; + pa->PointGetExprsInWorkplane(workplane, &pau, &pav); + pb->PointGetExprsInWorkplane(workplane, &pbu, &pbv); + + EntityBase *ln = SK.GetEntity(entityA); + EntityBase *la = SK.GetEntity(ln->point[0]); + EntityBase *lb = SK.GetEntity(ln->point[1]); + Expr *lau, *lav, *lbu, *lbv; + la->PointGetExprsInWorkplane(workplane, &lau, &lav); + lb->PointGetExprsInWorkplane(workplane, &lbu, &lbv); + + Expr *dpu = pbu->Minus(pau), *dpv = pbv->Minus(pav); + Expr *dlu = lbu->Minus(lau), *dlv = lbv->Minus(lav); + + // The line through the points is perpendicular to the line + // of symmetry. + AddEq(l, (dlu->Times(dpu))->Plus(dlv->Times(dpv)), 0); + + // And the signed distances of the points to the line are + // equal in magnitude and opposite in sign, so sum to zero + Expr *dista = (dlv->Times(lau->Minus(pau)))->Minus( + (dlu->Times(lav->Minus(pav)))); + Expr *distb = (dlv->Times(lau->Minus(pbu)))->Minus( + (dlu->Times(lav->Minus(pbv)))); + AddEq(l, dista->Plus(distb), 1); + + break; + } + + case HORIZONTAL: + case VERTICAL: { + hEntity ha, hb; + if(entityA.v) { + EntityBase *e = SK.GetEntity(entityA); + ha = e->point[0]; + hb = e->point[1]; + } else { + ha = ptA; + hb = ptB; + } + EntityBase *a = SK.GetEntity(ha); + EntityBase *b = SK.GetEntity(hb); + + Expr *au, *av, *bu, *bv; + a->PointGetExprsInWorkplane(workplane, &au, &av); + b->PointGetExprsInWorkplane(workplane, &bu, &bv); + + AddEq(l, (type == HORIZONTAL) ? av->Minus(bv) : au->Minus(bu), 0); + break; + } + + case SAME_ORIENTATION: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + if(b->group.v != group.v) { + swap(a, b); + } + + ExprVector au = a->NormalExprsU(), + an = a->NormalExprsN(); + ExprVector bu = b->NormalExprsU(), + bv = b->NormalExprsV(), + bn = b->NormalExprsN(); + + AddEq(l, VectorsParallel(0, an, bn), 0); + AddEq(l, VectorsParallel(1, an, bn), 1); + Expr *d1 = au.Dot(bv); + Expr *d2 = au.Dot(bu); + // Allow either orientation for the coordinate system, depending + // on how it was drawn. + if(fabs(d1->Eval()) < fabs(d2->Eval())) { + AddEq(l, d1, 2); + } else { + AddEq(l, d2, 2); + } + break; + } + + case PERPENDICULAR: + case ANGLE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + ExprVector ae = a->VectorGetExprs(); + ExprVector be = b->VectorGetExprs(); + if(other) ae = ae.ScaledBy(Expr::From(-1)); + Expr *c = DirectionCosine(workplane, ae, be); + + if(type == ANGLE) { + // The direction cosine is equal to the cosine of the + // specified angle + Expr *rads = exA->Times(Expr::From(PI/180)), + *rc = rads->Cos(); + double arc = fabs(rc->Eval()); + // avoid false detection of inconsistent systems by gaining + // up as the difference in dot products gets small at small + // angles; doubles still have plenty of precision, only + // problem is that rank test + Expr *mult = Expr::From(arc > 0.99 ? 0.01/(1.00001 - arc) : 1); + AddEq(l, (c->Minus(rc))->Times(mult), 0); + } else { + // The dot product (and therefore the direction cosine) + // is equal to zero, perpendicular. + AddEq(l, c, 0); + } + break; + } + + case EQUAL_ANGLE: { + EntityBase *a = SK.GetEntity(entityA); + EntityBase *b = SK.GetEntity(entityB); + EntityBase *c = SK.GetEntity(entityC); + EntityBase *d = SK.GetEntity(entityD); + ExprVector ae = a->VectorGetExprs(); + ExprVector be = b->VectorGetExprs(); + ExprVector ce = c->VectorGetExprs(); + ExprVector de = d->VectorGetExprs(); + + if(other) ae = ae.ScaledBy(Expr::From(-1)); + + Expr *cab = DirectionCosine(workplane, ae, be); + Expr *ccd = DirectionCosine(workplane, ce, de); + + AddEq(l, cab->Minus(ccd), 0); + break; + } + + case ARC_LINE_TANGENT: { + EntityBase *arc = SK.GetEntity(entityA); + EntityBase *line = SK.GetEntity(entityB); + + ExprVector ac = SK.GetEntity(arc->point[0])->PointGetExprs(); + ExprVector ap = + SK.GetEntity(arc->point[other ? 2 : 1])->PointGetExprs(); + + ExprVector ld = line->VectorGetExprs(); + + // The line is perpendicular to the radius + AddEq(l, ld.Dot(ac.Minus(ap)), 0); + break; + } + + case CUBIC_LINE_TANGENT: { + EntityBase *cubic = SK.GetEntity(entityA); + EntityBase *line = SK.GetEntity(entityB); + + ExprVector a; + if(other) { + a = cubic->CubicGetFinishTangentExprs(); + } else { + a = cubic->CubicGetStartTangentExprs(); + } + + ExprVector b = line->VectorGetExprs(); + + if(workplane.v == EntityBase::FREE_IN_3D.v) { + AddEq(l, VectorsParallel(0, a, b), 0); + AddEq(l, VectorsParallel(1, a, b), 1); + } else { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, (a.Cross(b)).Dot(wn), 0); + } + break; + } + + case CURVE_CURVE_TANGENT: { + bool parallel = true; + int i; + ExprVector dir[2]; + for(i = 0; i < 2; i++) { + EntityBase *e = SK.GetEntity((i == 0) ? entityA : entityB); + bool oth = (i == 0) ? other : other2; + + if(e->type == Entity::ARC_OF_CIRCLE) { + ExprVector center, endpoint; + center = SK.GetEntity(e->point[0])->PointGetExprs(); + endpoint = + SK.GetEntity(e->point[oth ? 2 : 1])->PointGetExprs(); + dir[i] = endpoint.Minus(center); + // We're using the vector from the center of the arc to + // an endpoint; so that's normal to the tangent, not + // parallel. + parallel = !parallel; + } else if(e->type == Entity::CUBIC) { + if(oth) { + dir[i] = e->CubicGetFinishTangentExprs(); + } else { + dir[i] = e->CubicGetStartTangentExprs(); + } + } else { + oops(); + } + } + if(parallel) { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, ((dir[0]).Cross(dir[1])).Dot(wn), 0); + } else { + AddEq(l, (dir[0]).Dot(dir[1]), 0); + } + break; + } + + case PARALLEL: { + EntityBase *ea = SK.GetEntity(entityA), *eb = SK.GetEntity(entityB); + if(eb->group.v != group.v) { + swap(ea, eb); + } + ExprVector a = ea->VectorGetExprs(); + ExprVector b = eb->VectorGetExprs(); + + if(workplane.v == EntityBase::FREE_IN_3D.v) { + AddEq(l, VectorsParallel(0, a, b), 0); + AddEq(l, VectorsParallel(1, a, b), 1); + } else { + EntityBase *w = SK.GetEntity(workplane); + ExprVector wn = w->Normal()->NormalExprsN(); + AddEq(l, (a.Cross(b)).Dot(wn), 0); + } + break; + } + + case WHERE_DRAGGED: { + EntityBase *ep = SK.GetEntity(ptA); + if(workplane.v == EntityBase::FREE_IN_3D.v) { + ExprVector ev = ep->PointGetExprs(); + Vector v = ep->PointGetNum(); + + AddEq(l, ev.x->Minus(Expr::From(v.x)), 0); + AddEq(l, ev.y->Minus(Expr::From(v.y)), 1); + AddEq(l, ev.z->Minus(Expr::From(v.z)), 2); + } else { + Expr *u, *v; + ep->PointGetExprsInWorkplane(workplane, &u, &v); + AddEq(l, u->Minus(Expr::From(u->Eval())), 0); + AddEq(l, v->Minus(Expr::From(v->Eval())), 1); + } + break; + } + + case COMMENT: + break; + + default: oops(); + } +} + diff --git a/src/describescreen.cpp b/src/describescreen.cpp new file mode 100644 index 0000000..b91993f --- /dev/null +++ b/src/describescreen.cpp @@ -0,0 +1,377 @@ +//----------------------------------------------------------------------------- +// The screens when an entity is selected, that show some description of it-- +// endpoints of the lines, diameter of the circle, etc. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ScreenUnselectAll(int link, uint32_t v) { + GraphicsWindow::MenuEdit(GraphicsWindow::MNU_UNSELECT_ALL); +} + +void TextWindow::ScreenEditTtfText(int link, uint32_t v) { + hRequest hr = { v }; + Request *r = SK.GetRequest(hr); + + SS.TW.ShowEditControl(10, r->str); + SS.TW.edit.meaning = EDIT_TTF_TEXT; + SS.TW.edit.request = hr; +} + +#define gs (SS.GW.gs) +void TextWindow::ScreenSetTtfFont(int link, uint32_t v) { + int i = (int)v; + if(i < 0) return; + if(i >= SS.fonts.l.n) return; + + SS.GW.GroupSelection(); + if(gs.entities != 1 || gs.n != 1) return; + + Entity *e = SK.entity.FindByIdNoOops(gs.entity[0]); + if(!e || e->type != Entity::TTF_TEXT || !e->h.isFromRequest()) return; + + Request *r = SK.request.FindByIdNoOops(e->h.request()); + if(!r) return; + + SS.UndoRemember(); + r->font = SS.fonts.l.elem[i].FontFileBaseName(); + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + SS.ScheduleShowTW(); +} + +void TextWindow::ScreenConstraintShowAsRadius(int link, uint32_t v) { + hConstraint hc = { v }; + Constraint *c = SK.GetConstraint(hc); + + SS.UndoRemember(); + c->other = !c->other; + + SS.ScheduleShowTW(); +} + +void TextWindow::DescribeSelection(void) { + Entity *e; + Vector p; + int i; + Printf(false, ""); + + if(gs.n == 1 && (gs.points == 1 || gs.entities == 1)) { + e = SK.GetEntity(gs.points == 1 ? gs.point[0] : gs.entity[0]); + +#define COSTR(p) \ + SS.MmToString((p).x).c_str(), \ + SS.MmToString((p).y).c_str(), \ + SS.MmToString((p).z).c_str() +#define PT_AS_STR "(%Fi%s%E, %Fi%s%E, %Fi%s%E)" +#define PT_AS_NUM "(%Fi%3%E, %Fi%3%E, %Fi%3%E)" + switch(e->type) { + case Entity::POINT_IN_3D: + case Entity::POINT_IN_2D: + case Entity::POINT_N_TRANS: + case Entity::POINT_N_ROT_TRANS: + case Entity::POINT_N_COPY: + case Entity::POINT_N_ROT_AA: + p = e->PointGetNum(); + Printf(false, "%FtPOINT%E at " PT_AS_STR, COSTR(p)); + break; + + case Entity::NORMAL_IN_3D: + case Entity::NORMAL_IN_2D: + case Entity::NORMAL_N_COPY: + case Entity::NORMAL_N_ROT: + case Entity::NORMAL_N_ROT_AA: { + Quaternion q = e->NormalGetNum(); + p = q.RotationN(); + Printf(false, "%FtNORMAL / COORDINATE SYSTEM%E"); + Printf(true, " basis n = " PT_AS_NUM, CO(p)); + p = q.RotationU(); + Printf(false, " u = " PT_AS_NUM, CO(p)); + p = q.RotationV(); + Printf(false, " v = " PT_AS_NUM, CO(p)); + break; + } + case Entity::WORKPLANE: { + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(false, "%FtWORKPLANE%E"); + Printf(true, " origin = " PT_AS_STR, COSTR(p)); + Quaternion q = e->Normal()->NormalGetNum(); + p = q.RotationN(); + Printf(true, " normal = " PT_AS_NUM, CO(p)); + break; + } + case Entity::LINE_SEGMENT: { + Vector p0 = SK.GetEntity(e->point[0])->PointGetNum(); + p = p0; + Printf(false, "%FtLINE SEGMENT%E"); + Printf(true, " thru " PT_AS_STR, COSTR(p)); + Vector p1 = SK.GetEntity(e->point[1])->PointGetNum(); + p = p1; + Printf(false, " " PT_AS_STR, COSTR(p)); + Printf(true, " len = %Fi%s%E", + SS.MmToString((p1.Minus(p0).Magnitude())).c_str()); + break; + } + case Entity::CUBIC_PERIODIC: + case Entity::CUBIC: + int pts; + if(e->type == Entity::CUBIC_PERIODIC) { + Printf(false, "%FtPERIODIC C2 CUBIC SPLINE%E"); + pts = (3 + e->extraPoints); + } else if(e->extraPoints > 0) { + Printf(false, "%FtINTERPOLATING C2 CUBIC SPLINE%E"); + pts = (4 + e->extraPoints); + } else { + Printf(false, "%FtCUBIC BEZIER CURVE%E"); + pts = 4; + } + for(i = 0; i < pts; i++) { + p = SK.GetEntity(e->point[i])->PointGetNum(); + Printf((i==0), " p%d = " PT_AS_STR, i, COSTR(p)); + } + break; + + case Entity::ARC_OF_CIRCLE: { + Printf(false, "%FtARC OF A CIRCLE%E"); + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(p)); + p = SK.GetEntity(e->point[1])->PointGetNum(); + Printf(true, " endpoints = " PT_AS_STR, COSTR(p)); + p = SK.GetEntity(e->point[2])->PointGetNum(); + Printf(false, " " PT_AS_STR, COSTR(p)); + double r = e->CircleGetRadiusNum(); + Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + double thetas, thetaf, dtheta; + e->ArcGetAngles(&thetas, &thetaf, &dtheta); + Printf(false, " arc len = %Fi%s", SS.MmToString(dtheta*r).c_str()); + break; + } + case Entity::CIRCLE: { + Printf(false, "%FtCIRCLE%E"); + p = SK.GetEntity(e->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(p)); + double r = e->CircleGetRadiusNum(); + Printf(true, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + break; + } + case Entity::FACE_NORMAL_PT: + case Entity::FACE_XPROD: + case Entity::FACE_N_ROT_TRANS: + case Entity::FACE_N_ROT_AA: + case Entity::FACE_N_TRANS: + Printf(false, "%FtPLANE FACE%E"); + p = e->FaceGetNormalNum(); + Printf(true, " normal = " PT_AS_NUM, CO(p)); + p = e->FaceGetPointNum(); + Printf(false, " thru = " PT_AS_STR, COSTR(p)); + break; + + case Entity::TTF_TEXT: { + Printf(false, "%FtTRUETYPE FONT TEXT%E"); + Printf(true, " font = '%Fi%s%E'", e->font.c_str()); + if(e->h.isFromRequest()) { + Printf(false, " text = '%Fi%s%E' %Fl%Ll%f%D[change]%E", + e->str.c_str(), &ScreenEditTtfText, e->h.request().v); + Printf(true, " select new font"); + SS.fonts.LoadAll(); + int i; + for(i = 0; i < SS.fonts.l.n; i++) { + TtfFont *tf = &(SS.fonts.l.elem[i]); + if(e->font == tf->FontFileBaseName()) { + Printf(false, "%Bp %s", + (i & 1) ? 'd' : 'a', + tf->name.c_str()); + } else { + Printf(false, "%Bp %f%D%Fl%Ll%s%E%Bp", + (i & 1) ? 'd' : 'a', + &ScreenSetTtfFont, i, + tf->name.c_str(), + (i & 1) ? 'd' : 'a'); + } + } + } else { + Printf(false, " text = '%Fi%s%E'", e->str.c_str()); + } + break; + } + + default: + Printf(true, "%Ft?? ENTITY%E"); + break; + } + + Group *g = SK.GetGroup(e->group); + Printf(false, ""); + Printf(false, "%FtIN GROUP%E %s", g->DescriptionString().c_str()); + if(e->workplane.v == Entity::FREE_IN_3D.v) { + Printf(false, "%FtNOT LOCKED IN WORKPLANE%E"); + } else { + Entity *w = SK.GetEntity(e->workplane); + Printf(false, "%FtIN WORKPLANE%E %s", w->DescriptionString().c_str()); + } + if(e->style.v) { + Style *s = Style::Get(e->style); + Printf(false, "%FtIN STYLE%E %s", s->DescriptionString().c_str()); + } else { + Printf(false, "%FtIN STYLE%E none"); + } + if(e->construction) { + Printf(false, "%FtCONSTRUCTION"); + } + } else if(gs.n == 2 && gs.points == 2) { + Printf(false, "%FtTWO POINTS"); + Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " at " PT_AS_STR, COSTR(p0)); + Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum(); + Printf(false, " " PT_AS_STR, COSTR(p1)); + double d = (p1.Minus(p0)).Magnitude(); + Printf(true, " d = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.points == 1 && gs.circlesOrArcs == 1) { + Entity *ec = SK.GetEntity(gs.entity[0]); + if(ec->type == Entity::CIRCLE) { + Printf(false, "%FtPOINT AND A CIRCLE"); + } else if(ec->type == Entity::ARC_OF_CIRCLE) { + Printf(false, "%FtPOINT AND AN ARC"); + } else oops(); + Vector p = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " pt at " PT_AS_STR, COSTR(p)); + Vector c = SK.GetEntity(ec->point[0])->PointGetNum(); + Printf(true, " center = " PT_AS_STR, COSTR(c)); + double r = ec->CircleGetRadiusNum(); + Printf(false, " diameter = %Fi%s", SS.MmToString(r*2).c_str()); + Printf(false, " radius = %Fi%s", SS.MmToString(r).c_str()); + double d = (p.Minus(c)).Magnitude() - r; + Printf(true, " distance = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.faces == 1 && gs.points == 1) { + Printf(false, "%FtA POINT AND A PLANE FACE"); + Vector pt = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " point = " PT_AS_STR, COSTR(pt)); + Vector n = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); + Printf(true, " plane normal = " PT_AS_NUM, CO(n)); + Vector pl = SK.GetEntity(gs.face[0])->FaceGetPointNum(); + Printf(false, " plane thru = " PT_AS_STR, COSTR(pl)); + double dd = n.Dot(pl) - n.Dot(pt); + Printf(true, " distance = %Fi%s", SS.MmToString(dd).c_str()); + } else if(gs.n == 3 && gs.points == 2 && gs.vectors == 1) { + Printf(false, "%FtTWO POINTS AND A VECTOR"); + Vector p0 = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " pointA = " PT_AS_STR, COSTR(p0)); + Vector p1 = SK.GetEntity(gs.point[1])->PointGetNum(); + Printf(false, " pointB = " PT_AS_STR, COSTR(p1)); + Vector v = SK.GetEntity(gs.vector[0])->VectorGetNum(); + v = v.WithMagnitude(1); + Printf(true, " vector = " PT_AS_NUM, CO(v)); + double d = (p1.Minus(p0)).Dot(v); + Printf(true, " proj_d = %Fi%s", SS.MmToString(d).c_str()); + } else if(gs.n == 2 && gs.lineSegments == 1 && gs.points == 1) { + Entity *ln = SK.GetEntity(gs.entity[0]); + Vector lp0 = SK.GetEntity(ln->point[0])->PointGetNum(), + lp1 = SK.GetEntity(ln->point[1])->PointGetNum(); + Printf(false, "%FtLINE SEGMENT AND POINT%E"); + Printf(true, " ln thru " PT_AS_STR, COSTR(lp0)); + Printf(false, " " PT_AS_STR, COSTR(lp1)); + Vector pp = SK.GetEntity(gs.point[0])->PointGetNum(); + Printf(true, " point " PT_AS_STR, COSTR(pp)); + Printf(true, " pt-ln distance = %Fi%s%E", + SS.MmToString(pp.DistanceToLine(lp0, lp1.Minus(lp0))).c_str()); + } else if(gs.n == 2 && gs.vectors == 2) { + Printf(false, "%FtTWO VECTORS"); + + Vector v0 = SK.GetEntity(gs.entity[0])->VectorGetNum(), + v1 = SK.GetEntity(gs.entity[1])->VectorGetNum(); + v0 = v0.WithMagnitude(1); + v1 = v1.WithMagnitude(1); + + Printf(true, " vectorA = " PT_AS_NUM, CO(v0)); + Printf(false, " vectorB = " PT_AS_NUM, CO(v1)); + + double theta = acos(v0.Dot(v1)); + Printf(true, " angle = %Fi%2%E degrees", theta*180/PI); + while(theta < PI/2) theta += PI; + while(theta > PI/2) theta -= PI; + Printf(false, " or angle = %Fi%2%E (mod 180)", theta*180/PI); + } else if(gs.n == 2 && gs.faces == 2) { + Printf(false, "%FtTWO PLANE FACES"); + + Vector n0 = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); + Printf(true, " planeA normal = " PT_AS_NUM, CO(n0)); + Vector p0 = SK.GetEntity(gs.face[0])->FaceGetPointNum(); + Printf(false, " planeA thru = " PT_AS_STR, COSTR(p0)); + + Vector n1 = SK.GetEntity(gs.face[1])->FaceGetNormalNum(); + Printf(true, " planeB normal = " PT_AS_NUM, CO(n1)); + Vector p1 = SK.GetEntity(gs.face[1])->FaceGetPointNum(); + Printf(false, " planeB thru = " PT_AS_STR, COSTR(p1)); + + double theta = acos(n0.Dot(n1)); + Printf(true, " angle = %Fi%2%E degrees", theta*180/PI); + while(theta < PI/2) theta += PI; + while(theta > PI/2) theta -= PI; + Printf(false, " or angle = %Fi%2%E (mod 180)", theta*180/PI); + + if(fabs(theta) < 0.01) { + double d = (p1.Minus(p0)).Dot(n0); + Printf(true, " distance = %Fi%s", SS.MmToString(d).c_str()); + } + } else if(gs.n == 0 && gs.stylables > 0) { + Printf(false, "%FtSELECTED:%E comment text"); + } else if(gs.n == 0 && gs.constraints == 1) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + + if(c->type == Constraint::DIAMETER) { + Printf(false, "%FtDIAMETER CONSTRAINT"); + + Printf(true, " %Fd%f%D%Ll%s show as radius", + &ScreenConstraintShowAsRadius, gs.constraint[0].v, + c->other ? CHECK_TRUE : CHECK_FALSE); + } else { + Printf(false, "%FtSELECTED:%E %s", + c->DescriptionString().c_str()); + } + } else { + int n = SS.GW.selection.n; + Printf(false, "%FtSELECTED:%E %d item%s", n, n == 1 ? "" : "s"); + } + + if(shown.screen == SCREEN_STYLE_INFO && + shown.style.v >= Style::FIRST_CUSTOM && gs.stylables > 0) + { + // If we are showing a screen for a particular style, then offer the + // option to assign our selected entities to that style. + Style *s = Style::Get(shown.style); + Printf(true, "%Fl%D%f%Ll(assign to style %s)%E", + shown.style.v, + &ScreenAssignSelectionToStyle, + s->DescriptionString().c_str()); + } + // If any of the selected entities have an assigned style, then offer + // the option to remove that style. + bool styleAssigned = false; + for(i = 0; i < gs.entities; i++) { + Entity *e = SK.GetEntity(gs.entity[i]); + if(e->style.v != 0) { + styleAssigned = true; + } + } + for(i = 0; i < gs.constraints; i++) { + Constraint *c = SK.GetConstraint(gs.constraint[i]); + if(c->type == Constraint::COMMENT && c->disp.style.v != 0) { + styleAssigned = true; + } + } + if(styleAssigned) { + Printf(true, "%Fl%D%f%Ll(remove assigned style)%E", + 0, + &ScreenAssignSelectionToStyle); + } + + Printf(true, "%Fl%f%Ll(unselect all)%E", &TextWindow::ScreenUnselectAll); +} + +void TextWindow::GoToScreen(int screen) { + shown.screen = screen; +} + diff --git a/src/draw.cpp b/src/draw.cpp new file mode 100644 index 0000000..64f10ca --- /dev/null +++ b/src/draw.cpp @@ -0,0 +1,872 @@ +//----------------------------------------------------------------------------- +// The root function to paint our graphics window, after setting up all the +// views and such appropriately. Also contains all the stuff to manage the +// selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +bool GraphicsWindow::Selection::Equals(Selection *b) { + if(entity.v != b->entity.v) return false; + if(constraint.v != b->constraint.v) return false; + return true; +} + +bool GraphicsWindow::Selection::IsEmpty(void) { + if(entity.v) return false; + if(constraint.v) return false; + return true; +} + +bool GraphicsWindow::Selection::HasEndpoints(void) { + if(!entity.v) return false; + Entity *e = SK.GetEntity(entity); + return e->HasEndpoints(); +} + +void GraphicsWindow::Selection::Clear(void) { + entity.v = constraint.v = 0; + emphasized = false; +} + +void GraphicsWindow::Selection::Draw(void) { + Vector refp = Vector::From(0, 0, 0); + if(entity.v) { + Entity *e = SK.GetEntity(entity); + e->Draw(/*drawAsHidden=*/false); + if(emphasized) refp = e->GetReferencePos(); + } + if(constraint.v) { + Constraint *c = SK.GetConstraint(constraint); + c->Draw(); + if(emphasized) refp = c->GetReferencePos(); + } + if(emphasized && (constraint.v || entity.v)) { + // We want to emphasize this constraint or entity, by drawing a thick + // line from the top left corner of the screen to the reference point + // of that entity or constraint. + double s = 0.501/SS.GW.scale; + Vector topLeft = SS.GW.projRight.ScaledBy(-SS.GW.width*s); + topLeft = topLeft.Plus(SS.GW.projUp.ScaledBy(SS.GW.height*s)); + topLeft = topLeft.Minus(SS.GW.offset); + + ssglLineWidth(40); + RgbaColor rgb = Style::Color(Style::HOVERED); + glColor4d(rgb.redF(), rgb.greenF(), rgb.blueF(), 0.2); + glBegin(GL_LINES); + ssglVertex3v(topLeft); + ssglVertex3v(refp); + glEnd(); + ssglLineWidth(1); + } +} + +void GraphicsWindow::ClearSelection(void) { + selection.Clear(); + SS.ScheduleShowTW(); + InvalidateGraphics(); +} + +void GraphicsWindow::ClearNonexistentSelectionItems(void) { + bool change = false; + Selection *s; + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->constraint.v && !(SK.constraint.FindByIdNoOops(s->constraint))) { + s->tag = 1; + change = true; + } + if(s->entity.v && !(SK.entity.FindByIdNoOops(s->entity))) { + s->tag = 1; + change = true; + } + } + selection.RemoveTagged(); + if(change) InvalidateGraphics(); +} + +//----------------------------------------------------------------------------- +// Is this entity/constraint selected? +//----------------------------------------------------------------------------- +bool GraphicsWindow::IsSelected(hEntity he) { + Selection s = {}; + s.entity = he; + return IsSelected(&s); +} +bool GraphicsWindow::IsSelected(Selection *st) { + Selection *s; + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->Equals(st)) { + return true; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// Unselect an item, if it is selected. We can either unselect just that item, +// or also unselect any coincident points. The latter is useful if the user +// somehow selects two coincident points (like with select all), because it +// would otherwise be impossible to de-select the lower of the two. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeUnselected(hEntity he, bool coincidentPointTrick) { + Selection stog = {}; + stog.entity = he; + MakeUnselected(&stog, coincidentPointTrick); +} +void GraphicsWindow::MakeUnselected(Selection *stog, bool coincidentPointTrick){ + if(stog->IsEmpty()) return; + + Selection *s; + + // If an item was selected, then we just un-select it. + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(s->Equals(stog)) { + s->tag = 1; + } + } + // If two points are coincident, then it's impossible to hover one of + // them. But make sure to deselect both, to avoid mysterious seeming + // inability to deselect if the bottom one did somehow get selected. + if(stog->entity.v && coincidentPointTrick) { + Entity *e = SK.GetEntity(stog->entity); + if(e->IsPoint()) { + Vector ep = e->PointGetNum(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + if(!s->entity.v) continue; + if(s->entity.v == stog->entity.v) continue; + Entity *se = SK.GetEntity(s->entity); + if(!se->IsPoint()) continue; + if(ep.Equals(se->PointGetNum())) { + s->tag = 1; + } + } + } + } + selection.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Select an item, if it isn't selected already. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeSelected(hEntity he) { + Selection stog = {}; + stog.entity = he; + MakeSelected(&stog); +} + +void GraphicsWindow::MakeSelected(hConstraint hc) { + Selection stog = {}; + stog.constraint = hc; + MakeSelected(&stog); +} + +void GraphicsWindow::MakeSelected(Selection *stog) { + if(stog->IsEmpty()) return; + if(IsSelected(stog)) return; + + if(stog->entity.v != 0 && SK.GetEntity(stog->entity)->IsFace()) { + // In the interest of speed for the triangle drawing code, + // only two faces may be selected at a time. + int c = 0; + Selection *s; + selection.ClearTags(); + for(s = selection.First(); s; s = selection.NextAfter(s)) { + hEntity he = s->entity; + if(he.v != 0 && SK.GetEntity(he)->IsFace()) { + c++; + if(c >= 2) s->tag = 1; + } + } + selection.RemoveTagged(); + } + + selection.Add(stog); +} + +//----------------------------------------------------------------------------- +// Select everything that lies within the marquee view-aligned rectangle. For +// points, we test by the point location. For normals, we test by the normal's +// associated point. For anything else, we test by any piecewise linear edge. +//----------------------------------------------------------------------------- +void GraphicsWindow::SelectByMarquee(void) { + Point2d begin = ProjectPoint(orig.marqueePoint); + double xmin = min(orig.mouse.x, begin.x), + xmax = max(orig.mouse.x, begin.x), + ymin = min(orig.mouse.y, begin.y), + ymax = max(orig.mouse.y, begin.y); + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(e->IsFace() || e->IsDistance()) continue; + if(!e->IsVisible()) continue; + + if(e->IsPoint() || e->IsNormal()) { + Vector p = e->IsPoint() ? e->PointGetNum() : + SK.GetEntity(e->point[0])->PointGetNum(); + Point2d pp = ProjectPoint(p); + if(pp.x >= xmin && pp.x <= xmax && + pp.y >= ymin && pp.y <= ymax) + { + MakeSelected(e->h); + } + } else { + // Use the 3d bounding box test routines, to avoid duplication; + // so let our bounding square become a bounding box that certainly + // includes the z = 0 plane. + Vector ptMin = Vector::From(xmin, ymin, -1), + ptMax = Vector::From(xmax, ymax, 1); + SEdgeList sel = {}; + e->GenerateEdges(&sel, true); + SEdge *se; + for(se = sel.l.First(); se; se = sel.l.NextAfter(se)) { + Point2d ppa = ProjectPoint(se->a), + ppb = ProjectPoint(se->b); + Vector ptA = Vector::From(ppa.x, ppa.y, 0), + ptB = Vector::From(ppb.x, ppb.y, 0); + if(Vector::BoundingBoxIntersectsLine(ptMax, ptMin, + ptA, ptB, true) || + !ptA.OutsideAndNotOn(ptMax, ptMin) || + !ptB.OutsideAndNotOn(ptMax, ptMin)) + { + MakeSelected(e->h); + break; + } + } + sel.Clear(); + } + } +} + +//----------------------------------------------------------------------------- +// Sort the selection according to various critieria: the entities and +// constraints separately, counts of certain types of entities (circles, +// lines, etc.), and so on. +//----------------------------------------------------------------------------- +void GraphicsWindow::GroupSelection(void) { + gs = {}; + int i; + for(i = 0; i < selection.n; i++) { + Selection *s = &(selection.elem[i]); + if(s->entity.v) { + (gs.n)++; + + Entity *e = SK.entity.FindById(s->entity); + + if(e->IsStylable()) gs.stylables++; + + // A list of points, and a list of all entities that aren't points. + if(e->IsPoint()) { + gs.points++; + gs.point.push_back(s->entity); + } else { + gs.entities++; + gs.entity.push_back(s->entity); + } + + // And an auxiliary list of normals, including normals from + // workplanes. + if(e->IsNormal()) { + gs.anyNormals++; + gs.anyNormal.push_back(s->entity); + } else if(e->IsWorkplane()) { + gs.anyNormals++; + gs.anyNormal.push_back(e->Normal()->h); + } + + // And of vectors (i.e., stuff with a direction to constrain) + if(e->HasVector()) { + gs.vectors++; + gs.vector.push_back(s->entity); + } + + // Faces (which are special, associated/drawn with triangles) + if(e->IsFace()) { + gs.faces++; + gs.face.push_back(s->entity); + } + + if(e->HasEndpoints()) { + (gs.withEndpoints)++; + } + + // And some aux counts too + switch(e->type) { + case Entity::WORKPLANE: (gs.workplanes)++; break; + case Entity::LINE_SEGMENT: (gs.lineSegments)++; break; + case Entity::CUBIC: (gs.cubics)++; break; + case Entity::CUBIC_PERIODIC: (gs.periodicCubics)++; break; + + case Entity::ARC_OF_CIRCLE: + (gs.circlesOrArcs)++; + (gs.arcs)++; + break; + + case Entity::CIRCLE: (gs.circlesOrArcs)++; break; + } + } + if(s->constraint.v) { + gs.constraints++; + gs.constraint.push_back(s->constraint); + Constraint *c = SK.GetConstraint(s->constraint); + if(c->IsStylable()) gs.stylables++; + if(c->HasLabel()) gs.constraintLabels++; + } + } +} + +void GraphicsWindow::HitTestMakeSelection(Point2d mp) { + int i; + double d, dmin = 1e12; + Selection s = {}; + + // Did the view projection change? If so, invalidate bounding boxes. + if(!offset.EqualsExactly(cached.offset) || + !projRight.EqualsExactly(cached.projRight) || + !projUp.EqualsExactly(cached.projUp) || + EXACT(scale != cached.scale)) { + cached.offset = offset; + cached.projRight = projRight; + cached.projUp = projUp; + cached.scale = scale; + for(Entity *e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + e->screenBBoxValid = false; + } + } + + // Always do the entities; we might be dragging something that should + // be auto-constrained, and we need the hover for that. + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + // Don't hover whatever's being dragged. + if(e->h.request().v == pending.point.request().v) { + // The one exception is when we're creating a new cubic; we + // want to be able to hover the first point, because that's + // how we turn it into a periodic spline. + if(!e->IsPoint()) continue; + if(!e->h.isFromRequest()) continue; + Request *r = SK.GetRequest(e->h.request()); + if(r->type != Request::CUBIC) continue; + if(r->extraPoints < 2) continue; + if(e->h.v != r->h.entity(1).v) continue; + } + + d = e->GetDistance(mp); + if(d < SELECTION_RADIUS && d < dmin) { + s = {}; + s.entity = e->h; + dmin = d; + } + } + + // The constraints and faces happen only when nothing's in progress. + if(pending.operation == 0) { + // Constraints + for(i = 0; i < SK.constraint.n; i++) { + d = SK.constraint.elem[i].GetDistance(mp); + if(d < SELECTION_RADIUS && d < dmin) { + s = {}; + s.constraint = SK.constraint.elem[i].h; + dmin = d; + } + } + + // Faces, from the triangle mesh; these are lowest priority + if(s.constraint.v == 0 && s.entity.v == 0 && showShaded && showFaces) { + Group *g = SK.GetGroup(activeGroup); + SMesh *m = &(g->displayMesh); + + uint32_t v = m->FirstIntersectionWith(mp); + if(v) { + s.entity.v = v; + } + } + } + + if(!s.Equals(&hover)) { + hover = s; + PaintGraphics(); + } +} + +//----------------------------------------------------------------------------- +// Project a point in model space to screen space, exactly as gl would; return +// units are pixels. +//----------------------------------------------------------------------------- +Point2d GraphicsWindow::ProjectPoint(Vector p) { + Vector p3 = ProjectPoint3(p); + Point2d p2 = { p3.x, p3.y }; + return p2; +} +//----------------------------------------------------------------------------- +// Project a point in model space to screen space, exactly as gl would; return +// units are pixels. The z coordinate is also returned, also in pixels. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::ProjectPoint3(Vector p) { + double w; + Vector r = ProjectPoint4(p, &w); + return r.ScaledBy(scale/w); +} +//----------------------------------------------------------------------------- +// Project a point in model space halfway into screen space. The scale is +// not applied, and the perspective divide isn't applied; instead the w +// coordinate is returned separately. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::ProjectPoint4(Vector p, double *w) { + p = p.Plus(offset); + + Vector r; + r.x = p.Dot(projRight); + r.y = p.Dot(projUp); + r.z = p.Dot(projUp.Cross(projRight)); + + *w = 1 + r.z*SS.CameraTangent()*scale; + return r; +} + +//----------------------------------------------------------------------------- +// Return a point in the plane parallel to the screen and through the offset, +// that projects onto the specified (x, y) coordinates. +//----------------------------------------------------------------------------- +Vector GraphicsWindow::UnProjectPoint(Point2d p) { + Vector orig = offset.ScaledBy(-1); + + // Note that we ignoring the effects of perspective. Since our returned + // point has the same component normal to the screen as the offset, it + // will have z = 0 after the rotation is applied, thus w = 1. So this is + // correct. + orig = orig.Plus(projRight.ScaledBy(p.x / scale)).Plus( + projUp. ScaledBy(p.y / scale)); + return orig; +} + +Vector GraphicsWindow::UnProjectPoint3(Vector p) { + p.z = p.z / (scale - p.z * SS.CameraTangent() * scale); + double w = 1 + p.z * SS.CameraTangent() * scale; + p.x *= w / scale; + p.y *= w / scale; + + Vector orig = offset.ScaledBy(-1); + orig = orig.Plus(projRight.ScaledBy(p.x)).Plus( + projUp. ScaledBy(p.y).Plus( + projRight.Cross(projUp). ScaledBy(p.z))); + return orig; +} + +void GraphicsWindow::NormalizeProjectionVectors(void) { + if(projRight.Magnitude() < LENGTH_EPS) { + projRight = Vector::From(1, 0, 0); + } + + Vector norm = projRight.Cross(projUp); + // If projRight and projUp somehow ended up parallel, then pick an + // arbitrary projUp normal to projRight. + if(norm.Magnitude() < LENGTH_EPS) { + norm = projRight.Normal(0); + } + projUp = norm.Cross(projRight); + + projUp = projUp.WithMagnitude(1); + projRight = projRight.WithMagnitude(1); +} + +Vector GraphicsWindow::VectorFromProjs(Vector rightUpForward) { + Vector n = projRight.Cross(projUp); + + Vector r = (projRight.ScaledBy(rightUpForward.x)); + r = r.Plus(projUp.ScaledBy(rightUpForward.y)); + r = r.Plus(n.ScaledBy(rightUpForward.z)); + return r; +} + +void GraphicsWindow::Paint(void) { + int i; + havePainted = true; + + int w, h; + GetGraphicsWindowSize(&w, &h); + width = w; height = h; + glViewport(0, 0, w, h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glScaled(scale*2.0/w, scale*2.0/h, scale*1.0/30000); + + double mat[16]; + // Last thing before display is to apply the perspective + double clp = SS.CameraTangent()*scale; + MakeMatrix(mat, 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, clp, 1); + glMultMatrixd(mat); + // Before that, we apply the rotation + Vector n = projUp.Cross(projRight); + MakeMatrix(mat, projRight.x, projRight.y, projRight.z, 0, + projUp.x, projUp.y, projUp.z, 0, + n.x, n.y, n.z, 0, + 0, 0, 0, 1); + glMultMatrixd(mat); + // And before that, the translation + MakeMatrix(mat, 1, 0, 0, offset.x, + 0, 1, 0, offset.y, + 0, 0, 1, offset.z, + 0, 0, 0, 1); + glMultMatrixd(mat); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glShadeModel(GL_SMOOTH); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glEnable(GL_LINE_SMOOTH); + // don't enable GL_POLYGON_SMOOTH; that looks ugly on some graphics cards, + // drawn with leaks in the mesh + glEnable(GL_POLYGON_OFFSET_LINE); + glEnable(GL_POLYGON_OFFSET_FILL); + glEnable(GL_DEPTH_TEST); + glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + glEnable(GL_NORMALIZE); + + // At the same depth, we want later lines drawn over earlier. + glDepthFunc(GL_LEQUAL); + + if(SS.ActiveGroupsOkay()) { + glClearColor(SS.backgroundColor.redF(), + SS.backgroundColor.greenF(), + SS.backgroundColor.blueF(), 1.0f); + } else { + // Draw a different background whenever we're having solve problems. + RgbaColor rgb = Style::Color(Style::DRAW_ERROR); + glClearColor(0.4f*rgb.redF(), 0.4f*rgb.greenF(), 0.4f*rgb.blueF(), 1.0f); + // And show the text window, which has info to debug it + ForceTextWindowShown(); + } + glClear(GL_COLOR_BUFFER_BIT); + glClearDepth(1.0); + glClear(GL_DEPTH_BUFFER_BIT); + + if(SS.bgImage.fromFile) { + // If a background image is loaded, then we draw it now as a texture. + // This handles the resizing for us nicely. + glBindTexture(GL_TEXTURE_2D, TEXTURE_BACKGROUND_IMG); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, + SS.bgImage.rw, SS.bgImage.rh, + 0, + GL_RGB, GL_UNSIGNED_BYTE, + SS.bgImage.fromFile); + + double tw = ((double)SS.bgImage.w) / SS.bgImage.rw, + th = ((double)SS.bgImage.h) / SS.bgImage.rh; + + double mmw = SS.bgImage.w / SS.bgImage.scale, + mmh = SS.bgImage.h / SS.bgImage.scale; + + Vector origin = SS.bgImage.origin; + origin = origin.DotInToCsys(projRight, projUp, n); + // Place the depth of our origin at the point that corresponds to + // w = 1, so that it's unaffected by perspective. + origin.z = (offset.ScaledBy(-1)).Dot(n); + origin = origin.ScaleOutOfCsys(projRight, projUp, n); + + // Place the background at the very back of the Z order, though, by + // mucking with the depth range. + glDepthRange(1, 1); + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + ssglVertex3v(origin); + + glTexCoord2d(0, th); + ssglVertex3v(origin.Plus(projUp.ScaledBy(mmh))); + + glTexCoord2d(tw, th); + ssglVertex3v(origin.Plus(projRight.ScaledBy(mmw).Plus( + projUp. ScaledBy(mmh)))); + + glTexCoord2d(tw, 0); + ssglVertex3v(origin.Plus(projRight.ScaledBy(mmw))); + glEnd(); + glDisable(GL_TEXTURE_2D); + } + ssglDepthRangeOffset(0); + + // Nasty case when we're reloading the linked files; could be that + // we get an error, so a dialog pops up, and a message loop starts, and + // we have to get called to paint ourselves. If the sketch is screwed + // up, then we could trigger an oops trying to draw. + if(!SS.allConsistent) return; + + // Let's use two lights, at the user-specified locations + GLfloat f; + glEnable(GL_LIGHT0); + f = (GLfloat)SS.lightIntensity[0]; + GLfloat li0[] = { f, f, f, 1.0f }; + glLightfv(GL_LIGHT0, GL_DIFFUSE, li0); + glLightfv(GL_LIGHT0, GL_SPECULAR, li0); + + glEnable(GL_LIGHT1); + f = (GLfloat)SS.lightIntensity[1]; + GLfloat li1[] = { f, f, f, 1.0f }; + glLightfv(GL_LIGHT1, GL_DIFFUSE, li1); + glLightfv(GL_LIGHT1, GL_SPECULAR, li1); + + Vector ld; + ld = VectorFromProjs(SS.lightDir[0]); + GLfloat ld0[4] = { (GLfloat)ld.x, (GLfloat)ld.y, (GLfloat)ld.z, 0 }; + glLightfv(GL_LIGHT0, GL_POSITION, ld0); + ld = VectorFromProjs(SS.lightDir[1]); + GLfloat ld1[4] = { (GLfloat)ld.x, (GLfloat)ld.y, (GLfloat)ld.z, 0 }; + glLightfv(GL_LIGHT1, GL_POSITION, ld1); + + GLfloat ambient[4] = { (float)SS.ambientIntensity, + (float)SS.ambientIntensity, + (float)SS.ambientIntensity, 1 }; + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); + + ssglUnlockColor(); + + if(showSnapGrid && LockedInWorkplane()) { + hEntity he = ActiveWorkplane(); + EntityBase *wrkpl = SK.GetEntity(he), + *norm = wrkpl->Normal(); + Vector wu, wv, wn, wp; + wp = SK.GetEntity(wrkpl->point[0])->PointGetNum(); + wu = norm->NormalU(); + wv = norm->NormalV(); + wn = norm->NormalN(); + + double g = SS.gridSpacing; + + double umin = VERY_POSITIVE, umax = VERY_NEGATIVE, + vmin = VERY_POSITIVE, vmax = VERY_NEGATIVE; + int a; + for(a = 0; a < 4; a++) { + // Ideally, we would just do +/- half the width and height; but + // allow some extra slop for rounding. + Vector horiz = projRight.ScaledBy((0.6*width)/scale + 2*g), + vert = projUp. ScaledBy((0.6*height)/scale + 2*g); + if(a == 2 || a == 3) horiz = horiz.ScaledBy(-1); + if(a == 1 || a == 3) vert = vert. ScaledBy(-1); + Vector tp = horiz.Plus(vert).Minus(offset); + + // Project the point into our grid plane, normal to the screen + // (not to the grid plane). If the plane is on edge then this is + // impossible so don't try to draw the grid. + bool parallel; + Vector tpp = Vector::AtIntersectionOfPlaneAndLine( + wn, wn.Dot(wp), + tp, tp.Plus(n), + ¶llel); + if(parallel) goto nogrid; + + tpp = tpp.Minus(wp); + double uu = tpp.Dot(wu), + vv = tpp.Dot(wv); + + umin = min(uu, umin); + umax = max(uu, umax); + vmin = min(vv, vmin); + vmax = max(vv, vmax); + } + + int i, j, i0, i1, j0, j1; + + i0 = (int)(umin / g); + i1 = (int)(umax / g); + j0 = (int)(vmin / g); + j1 = (int)(vmax / g); + + if(i0 > i1 || i1 - i0 > 400) goto nogrid; + if(j0 > j1 || j1 - j0 > 400) goto nogrid; + + ssglLineWidth(1); + ssglColorRGBa(Style::Color(Style::DATUM), 0.3); + glBegin(GL_LINES); + for(i = i0 + 1; i < i1; i++) { + ssglVertex3v(wp.Plus(wu.ScaledBy(i*g)).Plus(wv.ScaledBy(j0*g))); + ssglVertex3v(wp.Plus(wu.ScaledBy(i*g)).Plus(wv.ScaledBy(j1*g))); + } + for(j = j0 + 1; j < j1; j++) { + ssglVertex3v(wp.Plus(wu.ScaledBy(i0*g)).Plus(wv.ScaledBy(j*g))); + ssglVertex3v(wp.Plus(wu.ScaledBy(i1*g)).Plus(wv.ScaledBy(j*g))); + } + glEnd(); + + // Clear the depth buffer, so that the grid is at the very back of + // the Z order. + glClear(GL_DEPTH_BUFFER_BIT); +nogrid:; + } + + // Draw the active group; this does stuff like the mesh and edges. + (SK.GetGroup(activeGroup))->Draw(); + + // Now draw the entities. + if(SS.GW.showHdnLines) { + ssglDepthRangeOffset(2); + glDepthFunc(GL_GREATER); + Entity::DrawAll(/*drawAsHidden=*/true); + glDepthFunc(GL_LEQUAL); + } + ssglDepthRangeOffset(0); + Entity::DrawAll(/*drawAsHidden=*/false); + + // Draw filled paths in all groups, when those filled paths were requested + // specially by assigning a style with a fill color, or when the filled + // paths are just being filled by default. This should go last, to make + // the transparency work. + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(!(g->IsVisible())) continue; + g->DrawFilledPaths(); + } + + + glDisable(GL_DEPTH_TEST); + // Draw the constraints + for(i = 0; i < SK.constraint.n; i++) { + SK.constraint.elem[i].Draw(); + } + + // Draw the "pending" constraint, i.e. a constraint that would be + // placed on a line that is almost horizontal or vertical + if(SS.GW.pending.operation == DRAGGING_NEW_LINE_POINT) { + if(SS.GW.pending.suggestion != GraphicsWindow::SUGGESTED_NONE) { + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = SS.GW.pending.suggestion; + c.ptA = Entity::NO_ENTITY; + c.ptB = Entity::NO_ENTITY; + c.entityA = SS.GW.pending.request.entity(0); + c.entityB = Entity::NO_ENTITY; + c.other = false; + c.other2 = false; + // Only draw. + c.Draw(); + } + } + + // Draw the traced path, if one exists + ssglLineWidth(Style::Width(Style::ANALYZE)); + ssglColorRGB(Style::Color(Style::ANALYZE)); + SContour *sc = &(SS.traced.path); + glBegin(GL_LINE_STRIP); + for(i = 0; i < sc->l.n; i++) { + ssglVertex3v(sc->l.elem[i].p); + } + glEnd(); + + // And the naked edges, if the user did Analyze -> Show Naked Edges. + ssglDrawEdges(&(SS.nakedEdges), true, { Style::DRAW_ERROR }); + + // Then redraw whatever the mouse is hovering over, highlighted. + glDisable(GL_DEPTH_TEST); + ssglLockColorTo(Style::Color(Style::HOVERED)); + hover.Draw(); + + // And finally draw the selection, same mechanism. + ssglLockColorTo(Style::Color(Style::SELECTED)); + for(Selection *s = selection.First(); s; s = selection.NextAfter(s)) { + s->Draw(); + } + + ssglUnlockColor(); + + // If a marquee selection is in progress, then draw the selection + // rectangle, as an outline and a transparent fill. + if(pending.operation == DRAGGING_MARQUEE) { + Point2d begin = ProjectPoint(orig.marqueePoint); + double xmin = min(orig.mouse.x, begin.x), + xmax = max(orig.mouse.x, begin.x), + ymin = min(orig.mouse.y, begin.y), + ymax = max(orig.mouse.y, begin.y); + + Vector tl = UnProjectPoint(Point2d::From(xmin, ymin)), + tr = UnProjectPoint(Point2d::From(xmax, ymin)), + br = UnProjectPoint(Point2d::From(xmax, ymax)), + bl = UnProjectPoint(Point2d::From(xmin, ymax)); + + ssglLineWidth((GLfloat)1.3); + ssglColorRGB(Style::Color(Style::HOVERED)); + glBegin(GL_LINE_LOOP); + ssglVertex3v(tl); + ssglVertex3v(tr); + ssglVertex3v(br); + ssglVertex3v(bl); + glEnd(); + ssglColorRGBa(Style::Color(Style::HOVERED), 0.10); + glBegin(GL_QUADS); + ssglVertex3v(tl); + ssglVertex3v(tr); + ssglVertex3v(br); + ssglVertex3v(bl); + glEnd(); + } + + // An extra line, used to indicate the origin when rotating within the + // plane of the monitor. + if(SS.extraLine.draw) { + ssglLineWidth(1); + ssglLockColorTo(Style::Color(Style::DATUM)); + glBegin(GL_LINES); + ssglVertex3v(SS.extraLine.ptA); + ssglVertex3v(SS.extraLine.ptB); + glEnd(); + } + + // A note to indicate the origin in the just-exported file. + if(SS.justExportedInfo.draw) { + Vector p, u, v; + if(SS.justExportedInfo.showOrigin) { + p = SS.justExportedInfo.pt, + u = SS.justExportedInfo.u, + v = SS.justExportedInfo.v; + } else { + p = SS.GW.offset.ScaledBy(-1); + u = SS.GW.projRight; + v = SS.GW.projUp; + } + + ssglColorRGB(Style::Color(Style::DATUM)); + + ssglWriteText("previewing exported geometry; press Esc to return", + Style::DefaultTextHeight(), + p.Plus(u.ScaledBy(10/scale)).Plus(v.ScaledBy(10/scale)), + u, v, NULL, NULL); + + if(SS.justExportedInfo.showOrigin) { + ssglLineWidth(1.5); + glBegin(GL_LINES); + ssglVertex3v(p.Plus(u.WithMagnitude(-15/scale))); + ssglVertex3v(p.Plus(u.WithMagnitude(30/scale))); + ssglVertex3v(p.Plus(v.WithMagnitude(-15/scale))); + ssglVertex3v(p.Plus(v.WithMagnitude(30/scale))); + glEnd(); + + ssglWriteText("(x, y) = (0, 0) for file just exported", + Style::DefaultTextHeight(), + p.Plus(u.ScaledBy(40/scale)).Plus( + v.ScaledBy(-(Style::DefaultTextHeight())/scale)), + u, v, NULL, NULL); + } + } + + // And finally the toolbar. + if(SS.showToolbar) { + ToolbarDraw(); + } +} + diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp new file mode 100644 index 0000000..31139bc --- /dev/null +++ b/src/drawconstraint.cpp @@ -0,0 +1,1250 @@ +//----------------------------------------------------------------------------- +// Given a constraint, draw a graphical and user-selectable representation +// of that constraint on-screen. We can either draw with gl, or compute the +// distance from a point (the location of the mouse pointer) to the lines +// that we would have drawn, for selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void Constraint::LineDrawOrGetDistance(Vector a, Vector b) { + if(dogd.drawing) { + hStyle hs = GetStyle(); + + if(dogd.sel) { + dogd.sel->AddEdge(a, b, hs.v); + } else { + if(Style::Width(hs) >= 3.0) { + ssglFatLine(a, b, Style::Width(hs) / SS.GW.scale); + } else { + glBegin(GL_LINE_STRIP); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); + } + } + } else { + Point2d ap = SS.GW.ProjectPoint(a); + Point2d bp = SS.GW.ProjectPoint(b); + + double d = dogd.mp.DistanceToLine(ap, bp.Minus(ap), true); + dogd.dmin = min(dogd.dmin, d); + } + dogd.refp = (a.Plus(b)).ScaledBy(0.5); +} + +static void LineCallback(void *fndata, Vector a, Vector b) +{ + Constraint *c = (Constraint *)fndata; + c->LineDrawOrGetDistance(a, b); +} + +std::string Constraint::Label(void) { + std::string result; + if(type == ANGLE) { + if(valA == floor(valA)) { + result = ssprintf("%.0f°", valA); + } else { + result = ssprintf("%.2f°", valA); + } + } else if(type == LENGTH_RATIO) { + result = ssprintf("%.3f:1", valA); + } else if(type == COMMENT) { + result = comment; + } else if(type == DIAMETER) { + if(!other) { + result = "⌀" + SS.MmToString(valA); + } else { + result = "R" + SS.MmToString(valA / 2); + } + } else { + // valA has units of distance + result = SS.MmToString(fabs(valA)); + } + if(reference) { + result += " REF"; + } + return result; +} + +void Constraint::DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu) { + hStyle hs = GetStyle(); + double th = Style::TextHeight(hs); + + std::string s = Label(); + double swidth = ssglStrWidth(s, th), + sheight = ssglStrCapHeight(th); + + // By default, the reference is from the center; but the style could + // specify otherwise if one is present, and it could also specify a + // rotation. + if(type == COMMENT && disp.style.v) { + Style *st = Style::Get(disp.style); + // rotation first + double rads = st->textAngle*PI/180; + double c = cos(rads), s = sin(rads); + Vector pr = gr, pu = gu; + gr = pr.ScaledBy( c).Plus(pu.ScaledBy(s)); + gu = pr.ScaledBy(-s).Plus(pu.ScaledBy(c)); + // then origin + int o = st->textOrigin; + if(o & Style::ORIGIN_LEFT) ref = ref.Plus(gr.WithMagnitude(swidth/2)); + if(o & Style::ORIGIN_RIGHT) ref = ref.Minus(gr.WithMagnitude(swidth/2)); + if(o & Style::ORIGIN_BOT) ref = ref.Plus(gu.WithMagnitude(sheight/2)); + if(o & Style::ORIGIN_TOP) ref = ref.Minus(gu.WithMagnitude(sheight/2)); + } + + if(labelPos) { + // labelPos is from the top left corner (for the text box used to + // edit things), but ref is from the center. + *labelPos = ref.Minus(gr.WithMagnitude(swidth/2)).Minus( + gu.WithMagnitude(sheight/2)); + } + + + if(dogd.drawing) { + ssglWriteTextRefCenter(s, th, ref, gr, gu, LineCallback, this); + } else { + double l = swidth/2 - sheight/2; + l = max(l, 5/SS.GW.scale); + Point2d a = SS.GW.ProjectPoint(ref.Minus(gr.WithMagnitude(l))); + Point2d b = SS.GW.ProjectPoint(ref.Plus (gr.WithMagnitude(l))); + double d = dogd.mp.DistanceToLine(a, b.Minus(a), true); + + dogd.dmin = min(dogd.dmin, d - (th / 2)); + dogd.refp = ref; + } +} + +void Constraint::StippledLine(Vector a, Vector b) { + glLineStipple(4, 0x5555); + glEnable(GL_LINE_STIPPLE); + LineDrawOrGetDistance(a, b); + glDisable(GL_LINE_STIPPLE); +} + +void Constraint::DoProjectedPoint(Vector *r) { + Vector p = r->ProjectInto(workplane); + StippledLine(p, *r); + *r = p; +} + +//----------------------------------------------------------------------------- +// There is a rectangular box, aligned to our display axes (projRight, projUp) +// centered at ref. This is where a dimension label will be drawn. We want to +// draw a line from A to B. If that line would intersect the label box, then +// trim the line to leave a gap for it, and return zero. If not, then extend +// the line to almost meet the box, and return either positive or negative, +// depending whether that extension was from A or from B. +//----------------------------------------------------------------------------- +int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend) { + hStyle hs = GetStyle(); + double th = Style::TextHeight(hs); + Vector gu = SS.GW.projUp.WithMagnitude(1), + gr = SS.GW.projRight.WithMagnitude(1); + + double pixels = 1.0 / SS.GW.scale; + std::string s = Label(); + double swidth = ssglStrWidth(s, th) + 4*pixels, + sheight = ssglStrCapHeight(th) + 8*pixels; + + return DoLineTrimmedAgainstBox(ref, a, b, extend, gr, gu, swidth, sheight); +} + +int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend, + Vector gr, Vector gu, double swidth, double sheight) { + struct { + Vector n; + double d; + } planes[4]; + // reference pos is the center of box occupied by text; build a rectangle + // around that, aligned to axes gr and gu, from four planes will all four + // normals pointing inward + planes[0].n = gu.ScaledBy(-1); planes[0].d = -(gu.Dot(ref) + sheight/2); + planes[1].n = gu; planes[1].d = gu.Dot(ref) - sheight/2; + planes[2].n = gr; planes[2].d = gr.Dot(ref) - swidth/2; + planes[3].n = gr.ScaledBy(-1); planes[3].d = -(gr.Dot(ref) + swidth/2); + + double tmin = VERY_POSITIVE, tmax = VERY_NEGATIVE; + Vector dl = b.Minus(a); + + for(int i = 0; i < 4; i++) { + bool parallel; + Vector p = Vector::AtIntersectionOfPlaneAndLine( + planes[i].n, planes[i].d, + a, b, ¶llel); + if(parallel) continue; + + int j; + for(j = 0; j < 4; j++) { + double d = (planes[j].n).Dot(p) - planes[j].d; + if(d < -LENGTH_EPS) break; + } + if(j < 4) continue; + + double t = (p.Minus(a)).DivPivoting(dl); + tmin = min(t, tmin); + tmax = max(t, tmax); + } + + // Both in range; so there's pieces of the line on both sides of the label box. + if(tmin >= 0.0 && tmin <= 1.0 && tmax >= 0.0 && tmax <= 1.0) { + LineDrawOrGetDistance(a, a.Plus(dl.ScaledBy(tmin))); + LineDrawOrGetDistance(a.Plus(dl.ScaledBy(tmax)), b); + return 0; + } + + // Only one intersection in range; so the box is right on top of the endpoint + if(tmin >= 0.0 && tmin <= 1.0) { + LineDrawOrGetDistance(a, a.Plus(dl.ScaledBy(tmin))); + return 0; + } + + // Likewise. + if(tmax >= 0.0 && tmax <= 1.0) { + LineDrawOrGetDistance(a.Plus(dl.ScaledBy(tmax)), b); + return 0; + } + + // The line does not intersect the label; so the line should get + // extended to just barely meet the label. + // 0 means the label lies within the line, negative means it's outside + // and closer to b, positive means outside and closer to a. + if(tmax < 0.0) { + if(extend) a = a.Plus(dl.ScaledBy(tmax)); + LineDrawOrGetDistance(a, b); + return 1; + } + + if(tmin > 1.0) { + if(extend) b = a.Plus(dl.ScaledBy(tmin)); + LineDrawOrGetDistance(a, b); + return -1; + } + + // This will happen if the entire line lies within the box. + return 0; +} + +void Constraint::DoArrow(Vector p, Vector dir, Vector n, double width, double angle, double da) { + dir = dir.WithMagnitude(width / cos(angle)); + dir = dir.RotatedAbout(n, da); + LineDrawOrGetDistance(p, p.Plus(dir.RotatedAbout(n, angle))); + LineDrawOrGetDistance(p, p.Plus(dir.RotatedAbout(n, -angle))); +} + +//----------------------------------------------------------------------------- +// Draw a line with arrows on both ends, and possibly a gap in the middle for +// the dimension. We will use these for most length dimensions. The length +// being dimensioned is from A to B; but those points get extended perpendicular +// to the line AB, until the line between the extensions crosses ref (the +// center of the label). +//----------------------------------------------------------------------------- +void Constraint::DoLineWithArrows(Vector ref, Vector a, Vector b, + bool onlyOneExt) +{ + double pixels = 1.0 / SS.GW.scale; + + Vector ab = a.Minus(b); + Vector ar = a.Minus(ref); + // Normal to a plane containing the line and the label origin. + Vector n = ab.Cross(ar); + // Within that plane, and normal to the line AB; so that's our extension + // line. + Vector out = ab.Cross(n).WithMagnitude(1); + out = out.ScaledBy(-out.Dot(ar)); + + Vector ae = a.Plus(out), be = b.Plus(out); + + // Extension lines extend 10 pixels beyond where the arrows get + // drawn (which is at the same offset perpendicular from AB as the + // label). + LineDrawOrGetDistance(a, ae.Plus(out.WithMagnitude(10*pixels))); + if(!onlyOneExt) { + LineDrawOrGetDistance(b, be.Plus(out.WithMagnitude(10*pixels))); + } + + int within = DoLineTrimmedAgainstBox(ref, ae, be); + + // Arrow heads are 13 pixels long, with an 18 degree half-angle. + double theta = 18*PI/180; + Vector arrow = (be.Minus(ae)).WithMagnitude(13*pixels); + + if(within != 0) { + arrow = arrow.ScaledBy(-1); + Vector seg = (be.Minus(ae)).WithMagnitude(18*pixels); + if(within < 0) LineDrawOrGetDistance(ae, ae.Minus(seg)); + if(within > 0) LineDrawOrGetDistance(be, be.Plus(seg)); + } + + DoArrow(ae, arrow, n, 13.0 * pixels, theta, 0.0); + DoArrow(be, arrow.Negated(), n, 13.0 * pixels, theta, 0.0); +} + +void Constraint::DoEqualLenTicks(Vector a, Vector b, Vector gn) { + Vector m = (a.ScaledBy(1.0/3)).Plus(b.ScaledBy(2.0/3)); + Vector ab = a.Minus(b); + Vector n = (gn.Cross(ab)).WithMagnitude(10/SS.GW.scale); + + LineDrawOrGetDistance(m.Minus(n), m.Plus(n)); +} + +void Constraint::DoEqualRadiusTicks(hEntity he) { + Entity *circ = SK.GetEntity(he); + + Vector center = SK.GetEntity(circ->point[0])->PointGetNum(); + double r = circ->CircleGetRadiusNum(); + Quaternion q = circ->Normal()->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + double theta; + if(circ->type == Entity::CIRCLE) { + theta = PI/2; + } else if(circ->type == Entity::ARC_OF_CIRCLE) { + double thetaa, thetab, dtheta; + circ->ArcGetAngles(&thetaa, &thetab, &dtheta); + theta = thetaa + dtheta/2; + } else oops(); + + Vector d = u.ScaledBy(cos(theta)).Plus(v.ScaledBy(sin(theta))); + d = d.ScaledBy(r); + Vector p = center.Plus(d); + Vector tick = d.WithMagnitude(10/SS.GW.scale); + LineDrawOrGetDistance(p.Plus(tick), p.Minus(tick)); +} + +void Constraint::DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db, + Vector offset, Vector *ref, bool trim) +{ + Vector gr = SS.GW.projRight.ScaledBy(1.0); + Vector gu = SS.GW.projUp.ScaledBy(1.0); + + if(workplane.v != Entity::FREE_IN_3D.v) { + a0 = a0.ProjectInto(workplane); + b0 = b0.ProjectInto(workplane); + da = da.ProjectVectorInto(workplane); + db = db.ProjectVectorInto(workplane); + } + + double px = 1.0 / SS.GW.scale; + Vector a1 = a0.Plus(da); + Vector b1 = b0.Plus(db); + + bool skew; + Vector pi = Vector::AtIntersectionOfLines(a0, a0.Plus(da), + b0, b0.Plus(db), &skew); + + if(!skew) { + *ref = pi.Plus(offset); + // We draw in a coordinate system centered at the intersection point. + // One basis vector is da, and the other is normal to da and in + // the plane that contains our lines (so normal to its normal). + da = da.WithMagnitude(1); + db = db.WithMagnitude(1); + + Vector norm = da.Cross(db); + + Vector dna = norm.Cross(da).WithMagnitude(1.0); + Vector dnb = norm.Cross(db).WithMagnitude(1.0); + + // da and db magnitudes are 1.0 + double thetaf = acos(da.Dot(db)); + + // Calculate median + Vector m = da.ScaledBy(cos(thetaf/2)).Plus( + dna.ScaledBy(sin(thetaf/2))); + Vector rm = (*ref).Minus(pi); + + // Test which side we have to place an arc + if(m.Dot(rm) < 0) { + da = da.ScaledBy(-1); dna = dna.ScaledBy(-1); + db = db.ScaledBy(-1); dnb = dnb.ScaledBy(-1); + } + + double rda = rm.Dot(da), rdna = rm.Dot(dna); + + // Introduce minimal arc radius in pixels + double r = max(sqrt(rda*rda + rdna*rdna), 15.0 * px); + + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + double th = Style::TextHeight(hs); + double swidth = ssglStrWidth(Label(), th) + 4.0 * px; + double sheight = ssglStrCapHeight(th) + 8.0 * px; + double textR = sqrt(swidth * swidth + sheight * sheight) / 2.0; + *ref = pi.Plus(rm.WithMagnitude(std::max(rm.Magnitude(), 15 * px + textR))); + + // Arrow points + Vector apa = da. ScaledBy(r).Plus(pi); + Vector apb = da. ScaledBy(r*cos(thetaf)).Plus( + dna.ScaledBy(r*sin(thetaf))).Plus(pi); + + double arrowW = 13 * px; + double arrowA = 18.0 * PI / 180.0; + bool arrowVisible = apb.Minus(apa).Magnitude() > 2.5 * arrowW; + // Arrow reversing indicator + bool arrowRev = false; + + // The minimal extension length in angular representation + double extAngle = 18 * px / r; + + // Arc additional angle + double addAngle = 0.0; + // Arc start angle + double startAngle = 0.0; + + // Arc extension to db. + // We have just enlarge angle value. + if(HasLabel() && rm.Dot(dnb) > 0.0) { + // rm direction projected to plane with u = da, v = dna + Vector rmp = da.ScaledBy(rda).Plus(dna.ScaledBy(rdna)).WithMagnitude(1.0); + // rmp and db magnitudes are 1.0 + addAngle = std::max(acos(rmp.Dot(db)), extAngle); + + if(arrowVisible) { + startAngle = -extAngle; + addAngle += extAngle; + arrowRev = true; + } + } + + // Arc extension to da. + // We are enlarge angle value and rewrite basis to align along rm projection. + if(HasLabel() && rm.Dot(dna) < 0.0) { + // rm direction projected to plane with u = da, v = dna + Vector rmp = da.ScaledBy(rda).Plus(dna.ScaledBy(rdna)).WithMagnitude(1.0); + // rmp and da magnitudes are 1.0 + startAngle = -std::max(acos(rmp.Dot(da)), extAngle); + addAngle = -startAngle; + + if(arrowVisible) { + addAngle += extAngle; + arrowRev = true; + } + } + + Vector prev; + int n = 30; + for(int i = 0; i <= n; i++) { + double theta = startAngle + (i*(thetaf + addAngle))/n; + Vector p = da.ScaledBy(r*cos(theta)).Plus( + dna.ScaledBy(r*sin(theta))).Plus(pi); + if(i > 0) { + if(trim) { + DoLineTrimmedAgainstBox(*ref, prev, p, false, gr, gu, swidth, sheight); + } else { + LineDrawOrGetDistance(prev, p); + } + } + prev = p; + } + + DoLineExtend(a0, a1, apa, 5.0 * px); + DoLineExtend(b0, b1, apb, 5.0 * px); + + // Draw arrows only when we have enough space. + if(arrowVisible) { + double angleCorr = arrowW / (2.0 * r); + if(arrowRev) { + dna = dna.ScaledBy(-1.0); + angleCorr = -angleCorr; + } + DoArrow(apa, dna, norm, arrowW, arrowA, angleCorr); + DoArrow(apb, dna, norm, arrowW, arrowA, thetaf + PI - angleCorr); + } + } else { + // The lines are skew; no wonderful way to illustrate that. + *ref = a0.Plus(b0); + *ref = (*ref).ScaledBy(0.5).Plus(disp.offset); + gu = gu.WithMagnitude(1); + Vector trans = + (*ref).Plus(gu.ScaledBy(-1.5*ssglStrCapHeight(Style::DefaultTextHeight()))); + ssglWriteTextRefCenter("angle between skew lines", Style::DefaultTextHeight(), + trans, gr.WithMagnitude(px), gu.WithMagnitude(px), LineCallback, this); + } +} + +bool Constraint::IsVisible() const { + if(!SS.GW.showConstraints) return false; + Group *g = SK.GetGroup(group); + // If the group is hidden, then the constraints are hidden and not + // able to be selected. + if(!(g->visible)) return false; + // And likewise if the group is not the active group; except for comments + // with an assigned style. + if(g->h.v != SS.GW.activeGroup.v && !(type == COMMENT && disp.style.v)) { + return false; + } + if(disp.style.v) { + Style *s = Style::Get(disp.style); + if(!s->visible) return false; + } + return true; +} + +bool Constraint::DoLineExtend(Vector p0, Vector p1, Vector pt, double salient) { + Vector dir = p1.Minus(p0); + double k = dir.Dot(pt.Minus(p0)) / dir.Dot(dir); + Vector ptOnLine = p0.Plus(dir.ScaledBy(k)); + + // Draw projection line. + LineDrawOrGetDistance(pt, ptOnLine); + + // Calculate salient direction. + Vector sd = dir.WithMagnitude(1.0).ScaledBy(salient); + + Vector from; + Vector to; + + if(k < 0.0) { + from = p0; + to = ptOnLine.Minus(sd); + } else if(k > 1.0) { + from = p1; + to = ptOnLine.Plus(sd); + } else { + return false; + } + + // Draw extension line. + LineDrawOrGetDistance(from, to); + return true; +} + +void Constraint::DrawOrGetDistance(Vector *labelPos) { + + if(!IsVisible()) return; + + // Unit vectors that describe our current view of the scene. One pixel + // long, not one actual unit. + Vector gr = SS.GW.projRight.ScaledBy(1/SS.GW.scale); + Vector gu = SS.GW.projUp.ScaledBy(1/SS.GW.scale); + Vector gn = (gr.Cross(gu)).WithMagnitude(1/SS.GW.scale); + + switch(type) { + case PT_PT_DISTANCE: { + Vector ap = SK.GetEntity(ptA)->PointGetNum(); + Vector bp = SK.GetEntity(ptB)->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&ap); + DoProjectedPoint(&bp); + } + + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); + + DoLineWithArrows(ref, ap, bp, false); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PROJ_PT_DISTANCE: { + Vector ap = SK.GetEntity(ptA)->PointGetNum(), + bp = SK.GetEntity(ptB)->PointGetNum(), + dp = (bp.Minus(ap)), + pp = SK.GetEntity(entityA)->VectorGetNum(); + + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); + + pp = pp.WithMagnitude(1); + double d = dp.Dot(pp); + Vector bpp = ap.Plus(pp.ScaledBy(d)); + StippledLine(ap, bpp); + StippledLine(bp, bpp); + + DoLineWithArrows(ref, ap, bpp, false); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PT_FACE_DISTANCE: + case PT_PLANE_DISTANCE: { + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Entity *enta = SK.GetEntity(entityA); + Vector n, p; + if(type == PT_PLANE_DISTANCE) { + n = enta->Normal()->NormalN(); + p = enta->WorkplaneGetOffset(); + } else { + n = enta->FaceGetNormalNum(); + p = enta->FaceGetPointNum(); + } + + double d = (p.Minus(pt)).Dot(n); + Vector closest = pt.Plus(n.WithMagnitude(d)); + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(disp.offset); + + if(!pt.Equals(closest)) { + DoLineWithArrows(ref, pt, closest, true); + } + + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PT_LINE_DISTANCE: { + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Entity *line = SK.GetEntity(entityA); + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + Vector dl = lB.Minus(lA); + + if(workplane.v != Entity::FREE_IN_3D.v) { + lA = lA.ProjectInto(workplane); + lB = lB.ProjectInto(workplane); + DoProjectedPoint(&pt); + } + + // Find the closest point on the line + Vector closest = pt.ClosestPointOnLine(lA, dl); + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(disp.offset); + DoLabel(ref, labelPos, gr, gu); + + if(!pt.Equals(closest)) { + DoLineWithArrows(ref, pt, closest, true); + + // Extensions to line + double pixels = 1.0 / SS.GW.scale; + Vector refClosest = ref.ClosestPointOnLine(lA, dl); + double ddl = dl.Dot(dl); + if(fabs(ddl) > LENGTH_EPS * LENGTH_EPS) { + double t = refClosest.Minus(lA).Dot(dl) / ddl; + if(t < 0.0) { + LineDrawOrGetDistance(refClosest.Minus(dl.WithMagnitude(10.0 * pixels)), lA); + } else if(t > 1.0) { + LineDrawOrGetDistance(refClosest.Plus(dl.WithMagnitude(10.0 * pixels)), lB); + } + } + } + + if(workplane.v != Entity::FREE_IN_3D.v) { + // Draw the projection marker from the closest point on the + // projected line to the projected point on the real line. + Vector lAB = (lA.Minus(lB)); + double t = (lA.Minus(closest)).DivPivoting(lAB); + + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + + Vector c2 = (lA.ScaledBy(1-t)).Plus(lB.ScaledBy(t)); + DoProjectedPoint(&c2); + } + break; + } + + case DIAMETER: { + Entity *circle = SK.GetEntity(entityA); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(1); + double r = circle->CircleGetRadiusNum(); + + Vector ref = center.Plus(disp.offset); + // Force the label into the same plane as the circle. + ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); + + Vector mark = ref.Minus(center); + mark = mark.WithMagnitude(mark.Magnitude()-r); + DoLineTrimmedAgainstBox(ref, ref, ref.Minus(mark)); + + Vector topLeft; + DoLabel(ref, &topLeft, gr, gu); + if(labelPos) *labelPos = topLeft; + break; + } + + case POINTS_COINCIDENT: { + if(!dogd.drawing) { + for(int i = 0; i < 2; i++) { + Vector p = SK.GetEntity(i == 0 ? ptA : ptB)-> PointGetNum(); + Point2d pp = SS.GW.ProjectPoint(p); + // The point is selected within a radius of 7, from the + // same center; so if the point is visible, then this + // constraint cannot be selected. But that's okay. + dogd.dmin = min(dogd.dmin, pp.DistanceTo(dogd.mp) - 3); + dogd.refp = p; + } + break; + } + + if(dogd.drawing) { + // Let's adjust the color of this constraint to have the same + // rough luma as the point color, so that the constraint does not + // stand out in an ugly way. + RgbaColor cd = Style::Color(Style::DATUM), + cc = Style::Color(Style::CONSTRAINT); + // convert from 8-bit color to a vector + Vector vd = Vector::From(cd.redF(), cd.greenF(), cd.blueF()), + vc = Vector::From(cc.redF(), cc.greenF(), cc.blueF()); + // and scale the constraint color to have the same magnitude as + // the datum color, maybe a bit dimmer + vc = vc.WithMagnitude(vd.Magnitude()*0.9); + // and set the color to that. + ssglColorRGB(RGBf(vc.x, vc.y, vc.z)); + + for(int a = 0; a < 2; a++) { + Vector r = SS.GW.projRight.ScaledBy((a+1)/SS.GW.scale); + Vector d = SS.GW.projUp.ScaledBy((2-a)/SS.GW.scale); + for(int i = 0; i < 2; i++) { + Vector p = SK.GetEntity(i == 0 ? ptA : ptB)-> PointGetNum(); + glBegin(GL_QUADS); + ssglVertex3v(p.Plus (r).Plus (d)); + ssglVertex3v(p.Plus (r).Minus(d)); + ssglVertex3v(p.Minus(r).Minus(d)); + ssglVertex3v(p.Minus(r).Plus (d)); + glEnd(); + } + + } + } + break; + } + + case PT_ON_CIRCLE: + case PT_ON_LINE: + case PT_ON_FACE: + case PT_IN_PLANE: { + double s = 8/SS.GW.scale; + Vector p = SK.GetEntity(ptA)->PointGetNum(); + Vector r, d; + if(type == PT_ON_FACE) { + Vector n = SK.GetEntity(entityA)->FaceGetNormalNum(); + r = n.Normal(0); + d = n.Normal(1); + } else if(type == PT_IN_PLANE) { + EntityBase *n = SK.GetEntity(entityA)->Normal(); + r = n->NormalU(); + d = n->NormalV(); + } else { + r = gr; + d = gu; + s *= (6.0/8); // draw these a little smaller + } + r = r.WithMagnitude(s); d = d.WithMagnitude(s); + LineDrawOrGetDistance(p.Plus (r).Plus (d), p.Plus (r).Minus(d)); + LineDrawOrGetDistance(p.Plus (r).Minus(d), p.Minus(r).Minus(d)); + LineDrawOrGetDistance(p.Minus(r).Minus(d), p.Minus(r).Plus (d)); + LineDrawOrGetDistance(p.Minus(r).Plus (d), p.Plus (r).Plus (d)); + break; + } + + case WHERE_DRAGGED: { + Vector p = SK.GetEntity(ptA)->PointGetNum(), + u = p.Plus(gu.WithMagnitude(8/SS.GW.scale)).Plus( + gr.WithMagnitude(8/SS.GW.scale)), + uu = u.Minus(gu.WithMagnitude(5/SS.GW.scale)), + ur = u.Minus(gr.WithMagnitude(5/SS.GW.scale)); + // Draw four little crop marks, uniformly spaced (by ninety + // degree rotations) around the point. + int i; + for(i = 0; i < 4; i++) { + LineDrawOrGetDistance(u, uu); + LineDrawOrGetDistance(u, ur); + u = u.RotatedAbout(p, gn, PI/2); + ur = ur.RotatedAbout(p, gn, PI/2); + uu = uu.RotatedAbout(p, gn, PI/2); + } + break; + } + + case SAME_ORIENTATION: { + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + Quaternion q = e->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(25/SS.GW.scale); + Vector u = q.RotationU().WithMagnitude(6/SS.GW.scale); + Vector p = SK.GetEntity(e->point[0])->PointGetNum(); + p = p.Plus(n.WithMagnitude(10/SS.GW.scale)); + + LineDrawOrGetDistance(p.Plus(u), p.Minus(u).Plus(n)); + LineDrawOrGetDistance(p.Minus(u), p.Plus(u).Plus(n)); + } + break; + } + + case EQUAL_ANGLE: { + Vector ref; + Entity *a = SK.GetEntity(entityA); + Entity *b = SK.GetEntity(entityB); + Entity *c = SK.GetEntity(entityC); + Entity *d = SK.GetEntity(entityD); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector c0 = c->VectorGetStartPoint(); + Vector d0 = d->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + Vector dc = c->VectorGetNum(); + Vector dd = d->VectorGetNum(); + + if(other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + DoArcForAngle(a0, da, b0, db, + da.WithMagnitude(40/SS.GW.scale), &ref, /*trim=*/false); + DoArcForAngle(c0, dc, d0, dd, + dc.WithMagnitude(40/SS.GW.scale), &ref, /*trim=*/false); + + break; + } + + case ANGLE: { + Entity *a = SK.GetEntity(entityA); + Entity *b = SK.GetEntity(entityB); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + if(other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + Vector ref; + DoArcForAngle(a0, da, b0, db, disp.offset, &ref, /*trim=*/true); + DoLabel(ref, labelPos, gr, gu); + break; + } + + case PERPENDICULAR: { + Vector u = Vector::From(0, 0, 0), v = Vector::From(0, 0, 0); + Vector rn, ru; + if(workplane.v == Entity::FREE_IN_3D.v) { + rn = gn; + ru = gu; + } else { + EntityBase *normal = SK.GetEntity(workplane)->Normal(); + rn = normal->NormalN(); + ru = normal->NormalV(); // ru meaning r_up, not u/v + } + + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + + if(i == 0) { + // Calculate orientation of perpendicular sign only + // once, so that it's the same both times it's drawn + u = e->VectorGetNum(); + u = u.WithMagnitude(16/SS.GW.scale); + v = (rn.Cross(u)).WithMagnitude(16/SS.GW.scale); + // a bit of bias to stop it from flickering between the + // two possibilities + if(fabs(u.Dot(ru)) < fabs(v.Dot(ru)) + LENGTH_EPS) { + swap(u, v); + } + if(u.Dot(ru) < 0) u = u.ScaledBy(-1); + } + + Vector p = e->VectorGetRefPoint(); + Vector s = p.Plus(u).Plus(v); + LineDrawOrGetDistance(s, s.Plus(v)); + + Vector m = s.Plus(v.ScaledBy(0.5)); + LineDrawOrGetDistance(m, m.Plus(u)); + } + break; + } + + case CURVE_CURVE_TANGENT: + case CUBIC_LINE_TANGENT: + case ARC_LINE_TANGENT: { + Vector textAt, u, v; + + if(type == ARC_LINE_TANGENT) { + Entity *arc = SK.GetEntity(entityA); + Entity *norm = SK.GetEntity(arc->normal); + Vector c = SK.GetEntity(arc->point[0])->PointGetNum(); + Vector p = + SK.GetEntity(arc->point[other ? 2 : 1])->PointGetNum(); + Vector r = p.Minus(c); + textAt = p.Plus(r.WithMagnitude(14/SS.GW.scale)); + u = norm->NormalU(); + v = norm->NormalV(); + } else if(type == CUBIC_LINE_TANGENT) { + Vector n; + if(workplane.v == Entity::FREE_IN_3D.v) { + u = gr; + v = gu; + n = gn; + } else { + EntityBase *wn = SK.GetEntity(workplane)->Normal(); + u = wn->NormalU(); + v = wn->NormalV(); + n = wn->NormalN(); + } + + Entity *cubic = SK.GetEntity(entityA); + Vector p = other ? cubic->CubicGetFinishNum() : + cubic->CubicGetStartNum(); + Vector dir = SK.GetEntity(entityB)->VectorGetNum(); + Vector out = n.Cross(dir); + textAt = p.Plus(out.WithMagnitude(14/SS.GW.scale)); + } else { + Vector n, dir; + EntityBase *wn = SK.GetEntity(workplane)->Normal(); + u = wn->NormalU(); + v = wn->NormalV(); + n = wn->NormalN(); + EntityBase *eA = SK.GetEntity(entityA); + // Big pain; we have to get a vector tangent to the curve + // at the shared point, which could be from either a cubic + // or an arc. + if(other) { + textAt = eA->EndpointFinish(); + if(eA->type == Entity::CUBIC) { + dir = eA->CubicGetFinishTangentNum(); + } else { + dir = SK.GetEntity(eA->point[0])->PointGetNum().Minus( + SK.GetEntity(eA->point[2])->PointGetNum()); + dir = n.Cross(dir); + } + } else { + textAt = eA->EndpointStart(); + if(eA->type == Entity::CUBIC) { + dir = eA->CubicGetStartTangentNum(); + } else { + dir = SK.GetEntity(eA->point[0])->PointGetNum().Minus( + SK.GetEntity(eA->point[1])->PointGetNum()); + dir = n.Cross(dir); + } + } + dir = n.Cross(dir); + textAt = textAt.Plus(dir.WithMagnitude(14/SS.GW.scale)); + } + + if(dogd.drawing) { + ssglWriteTextRefCenter("T", Style::DefaultTextHeight(), + textAt, u, v, LineCallback, this); + } else { + dogd.refp = textAt; + Point2d ref = SS.GW.ProjectPoint(dogd.refp); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-10); + } + break; + } + + case PARALLEL: { + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + Vector n = e->VectorGetNum(); + n = n.WithMagnitude(25/SS.GW.scale); + Vector u = (gn.Cross(n)).WithMagnitude(4/SS.GW.scale); + Vector p = e->VectorGetRefPoint(); + + LineDrawOrGetDistance(p.Plus(u), p.Plus(u).Plus(n)); + LineDrawOrGetDistance(p.Minus(u), p.Minus(u).Plus(n)); + } + break; + } + + case EQUAL_RADIUS: { + for(int i = 0; i < 2; i++) { + DoEqualRadiusTicks(i == 0 ? entityA : entityB); + } + break; + } + + case EQUAL_LINE_ARC_LEN: { + Entity *line = SK.GetEntity(entityA); + DoEqualLenTicks( + SK.GetEntity(line->point[0])->PointGetNum(), + SK.GetEntity(line->point[1])->PointGetNum(), + gn); + + DoEqualRadiusTicks(entityB); + break; + } + + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case EQUAL_LENGTH_LINES: { + Vector a, b = Vector::From(0, 0, 0); + for(int i = 0; i < 2; i++) { + Entity *e = SK.GetEntity(i == 0 ? entityA : entityB); + a = SK.GetEntity(e->point[0])->PointGetNum(); + b = SK.GetEntity(e->point[1])->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&a); + DoProjectedPoint(&b); + } + + DoEqualLenTicks(a, b, gn); + } + if((type == LENGTH_RATIO) || (type == LENGTH_DIFFERENCE)) { + Vector ref = ((a.Plus(b)).ScaledBy(0.5)).Plus(disp.offset); + DoLabel(ref, labelPos, gr, gu); + } + break; + } + + case EQ_LEN_PT_LINE_D: { + Entity *forLen = SK.GetEntity(entityA); + Vector a = SK.GetEntity(forLen->point[0])->PointGetNum(), + b = SK.GetEntity(forLen->point[1])->PointGetNum(); + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&a); + DoProjectedPoint(&b); + } + DoEqualLenTicks(a, b, gn); + + Entity *ln = SK.GetEntity(entityB); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + Vector pt = SK.GetEntity(ptA)->PointGetNum(); + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&pt); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + } + + Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + LineDrawOrGetDistance(pt, closest); + DoEqualLenTicks(pt, closest, gn); + break; + } + + case EQ_PT_LN_DISTANCES: { + for(int i = 0; i < 2; i++) { + Entity *ln = SK.GetEntity(i == 0 ? entityA : entityB); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + Entity *pte = SK.GetEntity(i == 0 ? ptA : ptB); + Vector pt = pte->PointGetNum(); + + if(workplane.v != Entity::FREE_IN_3D.v) { + DoProjectedPoint(&pt); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + } + + Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + + LineDrawOrGetDistance(pt, closest); + DoEqualLenTicks(pt, closest, gn); + } + break; + } + + { + case SYMMETRIC: + Vector n; + n = SK.GetEntity(entityA)->Normal()->NormalN(); goto s; + case SYMMETRIC_HORIZ: + n = SK.GetEntity(workplane)->Normal()->NormalU(); goto s; + case SYMMETRIC_VERT: + n = SK.GetEntity(workplane)->Normal()->NormalV(); goto s; + case SYMMETRIC_LINE: { + Entity *ln = SK.GetEntity(entityA); + Vector la = SK.GetEntity(ln->point[0])->PointGetNum(), + lb = SK.GetEntity(ln->point[1])->PointGetNum(); + la = la.ProjectInto(workplane); + lb = lb.ProjectInto(workplane); + n = lb.Minus(la); + Vector nw = SK.GetEntity(workplane)->Normal()->NormalN(); + n = n.RotatedAbout(nw, PI/2); + goto s; + } +s: + Vector a = SK.GetEntity(ptA)->PointGetNum(); + Vector b = SK.GetEntity(ptB)->PointGetNum(); + + for(int i = 0; i < 2; i++) { + Vector tail = (i == 0) ? a : b; + Vector d = (i == 0) ? b : a; + d = d.Minus(tail); + // Project the direction in which the arrow is drawn normal + // to the symmetry plane; for projected symmetry constraints, + // they might not be in the same direction, even when the + // constraint is fully solved. + d = n.ScaledBy(d.Dot(n)); + d = d.WithMagnitude(20/SS.GW.scale); + Vector tip = tail.Plus(d); + + LineDrawOrGetDistance(tail, tip); + d = d.WithMagnitude(9/SS.GW.scale); + LineDrawOrGetDistance(tip, tip.Minus(d.RotatedAbout(gn, 0.6))); + LineDrawOrGetDistance(tip, tip.Minus(d.RotatedAbout(gn, -0.6))); + } + break; + } + + case AT_MIDPOINT: + case HORIZONTAL: + case VERTICAL: + if(entityA.v) { + Vector r, u, n; + if(workplane.v == Entity::FREE_IN_3D.v) { + r = gr; u = gu; n = gn; + } else { + r = SK.GetEntity(workplane)->Normal()->NormalU(); + u = SK.GetEntity(workplane)->Normal()->NormalV(); + n = r.Cross(u); + } + // For "at midpoint", this branch is always taken. + Entity *e = SK.GetEntity(entityA); + Vector a = SK.GetEntity(e->point[0])->PointGetNum(); + Vector b = SK.GetEntity(e->point[1])->PointGetNum(); + Vector m = (a.ScaledBy(0.5)).Plus(b.ScaledBy(0.5)); + Vector offset = (a.Minus(b)).Cross(n); + offset = offset.WithMagnitude(13/SS.GW.scale); + // Draw midpoint constraint on other side of line, so that + // a line can be midpoint and horizontal at same time. + if(type == AT_MIDPOINT) offset = offset.ScaledBy(-1); + + if(dogd.drawing) { + const char *s = (type == HORIZONTAL) ? "H" : ( + (type == VERTICAL) ? "V" : ( + (type == AT_MIDPOINT) ? "M" : NULL)); + + ssglWriteTextRefCenter(s, Style::DefaultTextHeight(), + m.Plus(offset), r, u, LineCallback, this); + } else { + dogd.refp = m.Plus(offset); + Point2d ref = SS.GW.ProjectPoint(dogd.refp); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-10); + } + } else { + Vector a = SK.GetEntity(ptA)->PointGetNum(); + Vector b = SK.GetEntity(ptB)->PointGetNum(); + + Entity *w = SK.GetEntity(workplane); + Vector cu = w->Normal()->NormalU(); + Vector cv = w->Normal()->NormalV(); + Vector cn = w->Normal()->NormalN(); + + int i; + for(i = 0; i < 2; i++) { + Vector o = (i == 0) ? a : b; + Vector oo = (i == 0) ? a.Minus(b) : b.Minus(a); + Vector d = (type == HORIZONTAL) ? cu : cv; + if(oo.Dot(d) < 0) d = d.ScaledBy(-1); + + Vector dp = cn.Cross(d); + d = d.WithMagnitude(14/SS.GW.scale); + Vector c = o.Minus(d); + LineDrawOrGetDistance(o, c); + d = d.WithMagnitude(3/SS.GW.scale); + dp = dp.WithMagnitude(2/SS.GW.scale); + if(dogd.drawing) { + glBegin(GL_QUADS); + ssglVertex3v((c.Plus(d)).Plus(dp)); + ssglVertex3v((c.Minus(d)).Plus(dp)); + ssglVertex3v((c.Minus(d)).Minus(dp)); + ssglVertex3v((c.Plus(d)).Minus(dp)); + glEnd(); + } else { + Point2d ref = SS.GW.ProjectPoint(c); + dogd.dmin = min(dogd.dmin, ref.DistanceTo(dogd.mp)-6); + } + } + } + break; + + case COMMENT: { + if(dogd.drawing && disp.style.v) { + ssglLineWidth(Style::Width(disp.style)); + ssglColorRGB(Style::Color(disp.style)); + } + Vector u, v; + if(workplane.v == Entity::FREE_IN_3D.v) { + u = gr; + v = gu; + } else { + EntityBase *norm = SK.GetEntity(workplane)->Normal(); + u = norm->NormalU(); + v = norm->NormalV(); + } + DoLabel(disp.offset, labelPos, u, v); + break; + } + + default: oops(); + } +} + +void Constraint::Draw(void) { + dogd.drawing = true; + dogd.sel = NULL; + hStyle hs = GetStyle(); + + ssglLineWidth(Style::Width(hs)); + ssglColorRGB(Style::Color(hs)); + + DrawOrGetDistance(NULL); +} + +double Constraint::GetDistance(Point2d mp) { + dogd.drawing = false; + dogd.sel = NULL; + dogd.mp = mp; + dogd.dmin = 1e12; + + DrawOrGetDistance(NULL); + + return dogd.dmin; +} + +Vector Constraint::GetLabelPos(void) { + dogd.drawing = false; + dogd.sel = NULL; + dogd.mp.x = 0; dogd.mp.y = 0; + dogd.dmin = 1e12; + + Vector p; + DrawOrGetDistance(&p); + return p; +} + +Vector Constraint::GetReferencePos(void) { + dogd.drawing = false; + dogd.sel = NULL; + + dogd.refp = SS.GW.offset.ScaledBy(-1); + DrawOrGetDistance(NULL); + + return dogd.refp; +} + +void Constraint::GetEdges(SEdgeList *sel) { + dogd.drawing = true; + dogd.sel = sel; + DrawOrGetDistance(NULL); + dogd.sel = NULL; +} + +bool Constraint::IsStylable() { + if(type == COMMENT) return true; + return false; +} + +hStyle Constraint::GetStyle() const { + if(disp.style.v != 0) return disp.style; + return { Style::CONSTRAINT }; +} + +bool Constraint::HasLabel() { + switch(type) { + case COMMENT: + case PT_PT_DISTANCE: + case PT_PLANE_DISTANCE: + case PT_LINE_DISTANCE: + case PT_FACE_DISTANCE: + case PROJ_PT_DISTANCE: + case LENGTH_RATIO: + case LENGTH_DIFFERENCE: + case DIAMETER: + case ANGLE: + return true; + + default: + return false; + } +} diff --git a/src/drawentity.cpp b/src/drawentity.cpp new file mode 100644 index 0000000..39bc085 --- /dev/null +++ b/src/drawentity.cpp @@ -0,0 +1,724 @@ +//----------------------------------------------------------------------------- +// Draw a representation of an entity on-screen, in the case of curves up +// to our chord tolerance, or return the distance from the user's mouse pointer +// to the entity for selection. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string Entity::DescriptionString(void) { + if(h.isFromRequest()) { + Request *r = SK.GetRequest(h.request()); + return r->DescriptionString(); + } else { + Group *g = SK.GetGroup(h.group()); + return g->DescriptionString(); + } +} + +void Entity::LineDrawOrGetDistance(Vector a, Vector b, bool maybeFat, int data) { + if(dogd.drawing) { + // Draw lines from active group in front of those from previous + ssglDepthRangeOffset((group.v == SS.GW.activeGroup.v) ? 4 : 3); + // Narrow lines are drawn as lines, but fat lines must be drawn as + // filled polygons, to get the line join style right. + ssglStippledLine(a, b, dogd.lineWidth, dogd.stippleType, dogd.stippleScale, maybeFat); + ssglDepthRangeOffset(0); + } else { + Point2d ap = SS.GW.ProjectPoint(a); + Point2d bp = SS.GW.ProjectPoint(b); + + double d = dogd.mp.DistanceToLine(ap, bp.Minus(ap), true); + // A little bit easier to select in the active group + if(group.v == SS.GW.activeGroup.v) d -= 1; + if(d < dogd.dmin) { + dogd.dmin = d; + dogd.data = data; + } + } + dogd.refp = (a.Plus(b)).ScaledBy(0.5); +} + +void Entity::DrawAll(bool drawAsHidden) { + // This handles points as a special case, because I seem to be able + // to get a huge speedup that way, by consolidating stuff to gl. + int i; + if(SS.GW.showPoints) { + double s = 3.5/SS.GW.scale; + Vector r = SS.GW.projRight.ScaledBy(s); + Vector d = SS.GW.projUp.ScaledBy(s); + ssglColorRGB(Style::Color(Style::DATUM)); + ssglDepthRangeOffset(6); + glBegin(GL_QUADS); + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(!e->IsPoint()) continue; + if(!(SK.GetGroup(e->group)->IsVisible())) continue; + if(e->forceHidden) continue; + + Vector v = e->PointGetNum(); + + // If we're analyzing the sketch to show the degrees of freedom, + // then we draw big colored squares over the points that are + // free to move. + bool free = false; + if(e->type == POINT_IN_3D) { + Param *px = SK.GetParam(e->param[0]), + *py = SK.GetParam(e->param[1]), + *pz = SK.GetParam(e->param[2]); + + free = (px->free) || (py->free) || (pz->free); + } else if(e->type == POINT_IN_2D) { + Param *pu = SK.GetParam(e->param[0]), + *pv = SK.GetParam(e->param[1]); + + free = (pu->free) || (pv->free); + } + if(free) { + Vector re = r.ScaledBy(2.5), de = d.ScaledBy(2.5); + + ssglColorRGB(Style::Color(Style::ANALYZE)); + ssglVertex3v(v.Plus (re).Plus (de)); + ssglVertex3v(v.Plus (re).Minus(de)); + ssglVertex3v(v.Minus(re).Minus(de)); + ssglVertex3v(v.Minus(re).Plus (de)); + ssglColorRGB(Style::Color(Style::DATUM)); + } + + ssglVertex3v(v.Plus (r).Plus (d)); + ssglVertex3v(v.Plus (r).Minus(d)); + ssglVertex3v(v.Minus(r).Minus(d)); + ssglVertex3v(v.Minus(r).Plus (d)); + } + glEnd(); + ssglDepthRangeOffset(0); + } + + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->IsPoint()) { + continue; // already handled + } + e->Draw(drawAsHidden); + } +} + +void Entity::Draw(bool drawAsHidden) { + hStyle hs = Style::ForEntity(h); + dogd.lineWidth = Style::Width(hs); + if(drawAsHidden) { + dogd.stippleType = Style::PatternType({ Style::HIDDEN_EDGE }); + dogd.stippleScale = Style::StippleScaleMm({ Style::HIDDEN_EDGE }); + } else { + dogd.stippleType = Style::PatternType(hs); + dogd.stippleScale = Style::StippleScaleMm(hs); + } + ssglLineWidth((float)dogd.lineWidth); + ssglColorRGB(Style::Color(hs)); + + dogd.drawing = true; + DrawOrGetDistance(); +} + +void Entity::GenerateEdges(SEdgeList *el, bool includingConstruction) { + if(construction && !includingConstruction) return; + + SBezierList *sbl = GetOrGenerateBezierCurves(); + + int i, j; + for(i = 0; i < sbl->l.n; i++) { + SBezier *sb = &(sbl->l.elem[i]); + + List lv = {}; + sb->MakePwlInto(&lv); + for(j = 1; j < lv.n; j++) { + el->AddEdge(lv.elem[j-1], lv.elem[j], style.v, i); + } + lv.Clear(); + } + +} + +SBezierList *Entity::GetOrGenerateBezierCurves() { + if(beziers.l.n == 0) + GenerateBezierCurves(&beziers); + return &beziers; +} + +SEdgeList *Entity::GetOrGenerateEdges() { + if(edges.l.n != 0) { + if(EXACT(edgesChordTol == SS.ChordTolMm())) + return &edges; + edges.l.Clear(); + } + if(edges.l.n == 0) + GenerateEdges(&edges, /*includingConstruction=*/true); + edgesChordTol = SS.ChordTolMm(); + return &edges; +} + +BBox Entity::GetOrGenerateScreenBBox(bool *hasBBox) { + SBezierList *sbl = GetOrGenerateBezierCurves(); + + // We don't bother with bounding boxes for normals, workplanes, etc. + *hasBBox = (IsPoint() || sbl->l.n > 0); + if(!*hasBBox) return {}; + + if(screenBBoxValid) + return screenBBox; + + if(IsPoint()) { + Vector proj = SS.GW.ProjectPoint3(PointGetNum()); + screenBBox = BBox::From(proj, proj); + } else if(sbl->l.n > 0) { + Vector first = SS.GW.ProjectPoint3(sbl->l.elem[0].ctrl[0]); + screenBBox = BBox::From(first, first); + for(int i = 0; i < sbl->l.n; i++) { + SBezier *sb = &sbl->l.elem[i]; + for(int i = 0; i <= sb->deg; i++) { + screenBBox.Include(SS.GW.ProjectPoint3(sb->ctrl[i])); + } + } + } else oops(); + + // Enlarge the bounding box to consider selection radius. + screenBBox.minp.x -= SELECTION_RADIUS; + screenBBox.minp.y -= SELECTION_RADIUS; + screenBBox.maxp.x += SELECTION_RADIUS; + screenBBox.maxp.y += SELECTION_RADIUS; + + screenBBoxValid = true; + return screenBBox; +} + +double Entity::GetDistance(Point2d mp) { + dogd.drawing = false; + dogd.mp = mp; + dogd.dmin = 1e12; + + DrawOrGetDistance(); + + return dogd.dmin; +} + +Vector Entity::GetReferencePos(void) { + dogd.drawing = false; + + dogd.refp = SS.GW.offset.ScaledBy(-1); + DrawOrGetDistance(); + + return dogd.refp; +} + +bool Entity::IsStylable() { + if(IsPoint()) return false; + if(IsWorkplane()) return false; + if(IsNormal()) return false; + return true; +} + +bool Entity::IsVisible(void) { + Group *g = SK.GetGroup(group); + + if(g->h.v == Group::HGROUP_REFERENCES.v && IsNormal()) { + // The reference normals are always shown + return true; + } + if(!(g->IsVisible())) return false; + + // Don't check if points are hidden; this gets called only for + // selected or hovered points, and those should always be shown. + if(IsNormal() && !SS.GW.showNormals) return false; + + if(!SS.GW.showWorkplanes) { + if(IsWorkplane() && !h.isFromRequest()) { + if(g->h.v != SS.GW.activeGroup.v) { + // The group-associated workplanes are hidden outside + // their group. + return false; + } + } + } + + if(style.v) { + Style *s = Style::Get(style); + if(!s->visible) return false; + } + + if(forceHidden) return false; + + return true; +} + +void Entity::CalculateNumerical(bool forExport) { + if(IsPoint()) actPoint = PointGetNum(); + if(IsNormal()) actNormal = NormalGetNum(); + if(type == DISTANCE || type == DISTANCE_N_COPY) { + actDistance = DistanceGetNum(); + } + if(IsFace()) { + actPoint = FaceGetPointNum(); + Vector n = FaceGetNormalNum(); + actNormal = Quaternion::From(0, n.x, n.y, n.z); + } + if(forExport) { + // Visibility in copied linked entities follows source file + actVisible = IsVisible(); + } else { + // Copied entities within a file are always visible + actVisible = true; + } +} + +bool Entity::PointIsFromReferences(void) { + return h.request().IsFromReferences(); +} + +//----------------------------------------------------------------------------- +// Compute a cubic, second derivative continuous, interpolating spline. Same +// routine for periodic splines (in a loop) or open splines (with specified +// end tangents). +//----------------------------------------------------------------------------- +void Entity::ComputeInterpolatingSpline(SBezierList *sbl, bool periodic) { + static const int MAX_N = BandedMatrix::MAX_UNKNOWNS; + int ep = extraPoints; + + // The number of unknowns to solve for. + int n = periodic ? 3 + ep : ep; + if(n >= MAX_N) oops(); + // The number of on-curve points, one more than the number of segments. + int pts = periodic ? 4 + ep : 2 + ep; + + int i, j, a; + + // The starting and finishing control points that define our end tangents + // (if the spline isn't periodic), and the on-curve points. + Vector ctrl_s = Vector::From(0, 0, 0); + Vector ctrl_f = Vector::From(0, 0, 0); + Vector pt[MAX_N+4]; + if(periodic) { + for(i = 0; i < ep + 3; i++) { + pt[i] = SK.GetEntity(point[i])->PointGetNum(); + } + pt[i++] = SK.GetEntity(point[0])->PointGetNum(); + } else { + ctrl_s = SK.GetEntity(point[1])->PointGetNum(); + ctrl_f = SK.GetEntity(point[ep+2])->PointGetNum(); + j = 0; + pt[j++] = SK.GetEntity(point[0])->PointGetNum(); + for(i = 2; i <= ep + 1; i++) { + pt[j++] = SK.GetEntity(point[i])->PointGetNum(); + } + pt[j++] = SK.GetEntity(point[ep+3])->PointGetNum(); + } + + // The unknowns that we will be solving for, a set for each coordinate. + double Xx[MAX_N], Xy[MAX_N], Xz[MAX_N]; + // For a cubic Bezier section f(t) as t goes from 0 to 1, + // f' (0) = 3*(P1 - P0) + // f' (1) = 3*(P3 - P2) + // f''(0) = 6*(P0 - 2*P1 + P2) + // f''(1) = 6*(P3 - 2*P2 + P1) + for(a = 0; a < 3; a++) { + BandedMatrix bm = {}; + bm.n = n; + + for(i = 0; i < n; i++) { + int im, it, ip; + if(periodic) { + im = WRAP(i - 1, n); + it = i; + ip = WRAP(i + 1, n); + } else { + im = i; + it = i + 1; + ip = i + 2; + } + // All of these are expressed in terms of a constant part, and + // of X[i-1], X[i], and X[i+1]; so let these be the four + // components of that vector; + Vector4 A, B, C, D, E; + // The on-curve interpolated point + C = Vector4::From((pt[it]).Element(a), 0, 0, 0); + // control point one back, C - X[i] + B = C.Plus(Vector4::From(0, 0, -1, 0)); + // control point one forward, C + X[i] + D = C.Plus(Vector4::From(0, 0, 1, 0)); + // control point two back + if(i == 0 && !periodic) { + A = Vector4::From(ctrl_s.Element(a), 0, 0, 0); + } else { + // pt[im] + X[i-1] + A = Vector4::From(pt[im].Element(a), 1, 0, 0); + } + // control point two forward + if(i == (n - 1) && !periodic) { + E = Vector4::From(ctrl_f.Element(a), 0, 0, 0); + } else { + // pt[ip] - X[i+1] + E = Vector4::From((pt[ip]).Element(a), 0, 0, -1); + } + // Write the second derivatives of each segment, dropping constant + Vector4 fprev_pp = (C.Minus(B.ScaledBy(2))).Plus(A), + fnext_pp = (C.Minus(D.ScaledBy(2))).Plus(E), + eq = fprev_pp.Minus(fnext_pp); + + bm.B[i] = -eq.w; + if(periodic) { + bm.A[i][WRAP(i-2, n)] = eq.x; + bm.A[i][WRAP(i-1, n)] = eq.y; + bm.A[i][i] = eq.z; + } else { + // The wrapping would work, except when n = 1 and everything + // wraps to zero... + if(i > 0) bm.A[i][i - 1] = eq.x; + bm.A[i][i] = eq.y; + if(i < (n-1)) bm.A[i][i + 1] = eq.z; + } + } + bm.Solve(); + double *X = (a == 0) ? Xx : + (a == 1) ? Xy : + Xz; + memcpy(X, bm.X, n*sizeof(double)); + } + + for(i = 0; i < pts - 1; i++) { + Vector p0, p1, p2, p3; + if(periodic) { + p0 = pt[i]; + int iw = WRAP(i - 1, n); + p1 = p0.Plus(Vector::From(Xx[iw], Xy[iw], Xz[iw])); + } else if(i == 0) { + p0 = pt[0]; + p1 = ctrl_s; + } else { + p0 = pt[i]; + p1 = p0.Plus(Vector::From(Xx[i-1], Xy[i-1], Xz[i-1])); + } + if(periodic) { + p3 = pt[i+1]; + int iw = WRAP(i, n); + p2 = p3.Minus(Vector::From(Xx[iw], Xy[iw], Xz[iw])); + } else if(i == (pts - 2)) { + p3 = pt[pts-1]; + p2 = ctrl_f; + } else { + p3 = pt[i+1]; + p2 = p3.Minus(Vector::From(Xx[i], Xy[i], Xz[i])); + } + SBezier sb = SBezier::From(p0, p1, p2, p3); + sbl->l.Add(&sb); + } +} + +void Entity::GenerateBezierCurves(SBezierList *sbl) { + SBezier sb; + + int i = sbl->l.n; + + switch(type) { + case LINE_SEGMENT: { + Vector a = SK.GetEntity(point[0])->PointGetNum(); + Vector b = SK.GetEntity(point[1])->PointGetNum(); + sb = SBezier::From(a, b); + sb.entity = h.v; + sbl->l.Add(&sb); + break; + } + case CUBIC: + ComputeInterpolatingSpline(sbl, false); + break; + + case CUBIC_PERIODIC: + ComputeInterpolatingSpline(sbl, true); + break; + + case CIRCLE: + case ARC_OF_CIRCLE: { + Vector center = SK.GetEntity(point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(normal)->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + double r = CircleGetRadiusNum(); + double thetaa, thetab, dtheta; + + if(r < LENGTH_EPS) { + // If a circle or an arc gets dragged through zero radius, + // then we just don't generate anything. + break; + } + + if(type == CIRCLE) { + thetaa = 0; + thetab = 2*PI; + dtheta = 2*PI; + } else { + ArcGetAngles(&thetaa, &thetab, &dtheta); + } + int i, n; + if(dtheta > (3*PI/2 + 0.01)) { + n = 4; + } else if(dtheta > (PI + 0.01)) { + n = 3; + } else if(dtheta > (PI/2 + 0.01)) { + n = 2; + } else { + n = 1; + } + dtheta /= n; + + for(i = 0; i < n; i++) { + double s, c; + + c = cos(thetaa); + s = sin(thetaa); + // The start point of the curve, and the tangent vector at + // that start point. + Vector p0 = center.Plus(u.ScaledBy( r*c)).Plus(v.ScaledBy(r*s)), + t0 = u.ScaledBy(-r*s). Plus(v.ScaledBy(r*c)); + + thetaa += dtheta; + + c = cos(thetaa); + s = sin(thetaa); + Vector p2 = center.Plus(u.ScaledBy( r*c)).Plus(v.ScaledBy(r*s)), + t2 = u.ScaledBy(-r*s). Plus(v.ScaledBy(r*c)); + + // The control point must lie on both tangents. + Vector p1 = Vector::AtIntersectionOfLines(p0, p0.Plus(t0), + p2, p2.Plus(t2), + NULL); + + SBezier sb = SBezier::From(p0, p1, p2); + sb.weight[1] = cos(dtheta/2); + sbl->l.Add(&sb); + } + break; + } + + case TTF_TEXT: { + Vector topLeft = SK.GetEntity(point[0])->PointGetNum(); + Vector botLeft = SK.GetEntity(point[1])->PointGetNum(); + Vector n = Normal()->NormalN(); + Vector v = topLeft.Minus(botLeft); + Vector u = (v.Cross(n)).WithMagnitude(v.Magnitude()); + + SS.fonts.PlotString(font, str, sbl, botLeft, u, v); + break; + } + + default: + // Not a problem, points and normals and such don't generate curves + break; + } + + // Record our style for all of the Beziers that we just created. + for(; i < sbl->l.n; i++) { + sbl->l.elem[i].auxA = style.v; + } +} + +void Entity::DrawOrGetDistance(void) { + // If we're about to perform hit testing on an entity, consider + // whether the pointer is inside its bounding box first. + if(!dogd.drawing) { + bool hasBBox; + BBox box = GetOrGenerateScreenBBox(&hasBBox); + if(hasBBox && !box.Contains(dogd.mp)) + return; + } + + if(!IsVisible()) return; + + switch(type) { + case POINT_N_COPY: + case POINT_N_TRANS: + case POINT_N_ROT_TRANS: + case POINT_N_ROT_AA: + case POINT_IN_3D: + case POINT_IN_2D: { + Vector v = PointGetNum(); + dogd.refp = v; + + if(dogd.drawing) { + double s = 3.5; + Vector r = SS.GW.projRight.ScaledBy(s/SS.GW.scale); + Vector d = SS.GW.projUp.ScaledBy(s/SS.GW.scale); + + ssglColorRGB(Style::Color(Style::DATUM)); + ssglDepthRangeOffset(6); + glBegin(GL_QUADS); + ssglVertex3v(v.Plus (r).Plus (d)); + ssglVertex3v(v.Plus (r).Minus(d)); + ssglVertex3v(v.Minus(r).Minus(d)); + ssglVertex3v(v.Minus(r).Plus (d)); + glEnd(); + ssglDepthRangeOffset(0); + } else { + Point2d pp = SS.GW.ProjectPoint(v); + dogd.dmin = pp.DistanceTo(dogd.mp) - 6; + } + break; + } + + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + case NORMAL_IN_3D: + case NORMAL_IN_2D: { + int i; + for(i = 0; i < 2; i++) { + if(i == 0 && !SS.GW.showNormals) { + // When the normals are hidden, we will continue to show + // the coordinate axes at the bottom left corner, but + // not at the origin. + continue; + } + + hRequest hr = h.request(); + // Always draw the x, y, and z axes in red, green, and blue; + // brighter for the ones at the bottom left of the screen, + // dimmer for the ones at the model origin. + int f = (i == 0 ? 100 : 255); + if(hr.v == Request::HREQUEST_REFERENCE_XY.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(0, 0, f)); + } else if(hr.v == Request::HREQUEST_REFERENCE_YZ.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(f, 0, 0)); + } else if(hr.v == Request::HREQUEST_REFERENCE_ZX.v) { + if(dogd.drawing) + ssglColorRGB(RGBi(0, f, 0)); + } else { + if(dogd.drawing) + ssglColorRGB(Style::Color(Style::NORMALS)); + if(i > 0) break; + } + + Quaternion q = NormalGetNum(); + Vector tail; + if(i == 0) { + tail = SK.GetEntity(point[0])->PointGetNum(); + if(dogd.drawing) + ssglLineWidth(1); + } else { + // Draw an extra copy of the x, y, and z axes, that's + // always in the corner of the view and at the front. + // So those are always available, perhaps useful. + double s = SS.GW.scale; + double h = 60 - SS.GW.height/2; + double w = 60 - SS.GW.width/2; + tail = SS.GW.projRight.ScaledBy(w/s).Plus( + SS.GW.projUp. ScaledBy(h/s)).Minus(SS.GW.offset); + if(dogd.drawing) { + ssglDepthRangeLockToFront(true); + ssglLineWidth(2); + } + } + + Vector v = (q.RotationN()).WithMagnitude(50/SS.GW.scale); + Vector tip = tail.Plus(v); + LineDrawOrGetDistance(tail, tip); + + v = v.WithMagnitude(12/SS.GW.scale); + Vector axis = q.RotationV(); + LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis, 0.6))); + LineDrawOrGetDistance(tip,tip.Minus(v.RotatedAbout(axis,-0.6))); + } + if(dogd.drawing) + ssglDepthRangeLockToFront(false); + break; + } + + case DISTANCE: + case DISTANCE_N_COPY: + // These are used only as data structures, nothing to display. + break; + + case WORKPLANE: { + Vector p; + p = SK.GetEntity(point[0])->PointGetNum(); + + Vector u = Normal()->NormalU(); + Vector v = Normal()->NormalV(); + + double s = (min(SS.GW.width, SS.GW.height))*0.45/SS.GW.scale; + + Vector us = u.ScaledBy(s); + Vector vs = v.ScaledBy(s); + + Vector pp = p.Plus (us).Plus (vs); + Vector pm = p.Plus (us).Minus(vs); + Vector mm = p.Minus(us).Minus(vs), mm2 = mm; + Vector mp = p.Minus(us).Plus (vs); + + if(dogd.drawing) { + ssglLineWidth(1); + ssglColorRGB(Style::Color(Style::NORMALS)); + glEnable(GL_LINE_STIPPLE); + glLineStipple(3, 0x1111); + } + + if(!h.isFromRequest()) { + mm = mm.Plus(v.ScaledBy(70/SS.GW.scale)); + mm2 = mm2.Plus(u.ScaledBy(70/SS.GW.scale)); + LineDrawOrGetDistance(mm2, mm); + } + LineDrawOrGetDistance(pp, pm); + LineDrawOrGetDistance(pm, mm2); + LineDrawOrGetDistance(mp, mm); + LineDrawOrGetDistance(pp, mp); + + if(dogd.drawing) + glDisable(GL_LINE_STIPPLE); + + std::string str = DescriptionString().substr(5); + double th = Style::DefaultTextHeight(); + if(dogd.drawing) { + Vector o = mm2.Plus(u.ScaledBy(3/SS.GW.scale)).Plus( + v.ScaledBy(3/SS.GW.scale)); + ssglWriteText(str, th, o, u, v, NULL, NULL); + } else { + Vector pos = mm2.Plus(u.ScaledBy(ssglStrWidth(str, th)/2)).Plus( + v.ScaledBy(ssglStrCapHeight(th)/2)); + Point2d pp = SS.GW.ProjectPoint(pos); + dogd.dmin = min(dogd.dmin, pp.DistanceTo(dogd.mp) - 10); + // If a line lies in a plane, then select the line, not + // the plane. + dogd.dmin += 3; + } + break; + } + + case LINE_SEGMENT: + case CIRCLE: + case ARC_OF_CIRCLE: + case CUBIC: + case CUBIC_PERIODIC: + case TTF_TEXT: + // Nothing but the curve(s). + break; + + case FACE_NORMAL_PT: + case FACE_XPROD: + case FACE_N_ROT_TRANS: + case FACE_N_TRANS: + case FACE_N_ROT_AA: + // Do nothing; these are drawn with the triangle mesh + break; + + default: + oops(); + } + + // And draw the curves; generate the rational polynomial curves for + // everything, then piecewise linearize them, and display those. + SEdgeList *sel = GetOrGenerateEdges(); + dogd.data = -1; + for(int i = 0; i < sel->l.n; i++) { + SEdge *se = &(sel->l.elem[i]); + LineDrawOrGetDistance(se->a, se->b, true, se->auxB); + } +} + diff --git a/src/dsc.h b/src/dsc.h new file mode 100644 index 0000000..c61bbf5 --- /dev/null +++ b/src/dsc.h @@ -0,0 +1,528 @@ +//----------------------------------------------------------------------------- +// Data structures used frequently in the program, various kinds of vectors +// (of real numbers, not symbolic algebra stuff) and our templated lists. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#ifndef __DSC_H +#define __DSC_H + +#include "solvespace.h" + +class Vector; +class Vector4; +class Point2d; +class hEntity; +class hParam; + +class Quaternion { +public: + // a + (vx)*i + (vy)*j + (vz)*k + double w, vx, vy, vz; + + static const Quaternion IDENTITY; + + static Quaternion From(double w, double vx, double vy, double vz); + static Quaternion From(hParam w, hParam vx, hParam vy, hParam vz); + static Quaternion From(Vector u, Vector v); + static Quaternion From(Vector axis, double dtheta); + + Quaternion Plus(Quaternion b); + Quaternion Minus(Quaternion b); + Quaternion ScaledBy(double s); + double Magnitude(void); + Quaternion WithMagnitude(double s); + + // Call a rotation matrix [ u' v' n' ]'; this returns the first and + // second rows, where that matrix is generated by this quaternion + Vector RotationU(void); + Vector RotationV(void); + Vector RotationN(void); + Vector Rotate(Vector p); + + Quaternion ToThe(double p); + Quaternion Inverse(void); + Quaternion Times(Quaternion b); + Quaternion Mirror(void); +}; + +class Vector { +public: + double x, y, z; + + static Vector From(double x, double y, double z); + static Vector From(hParam x, hParam y, hParam z); + static Vector AtIntersectionOfPlanes(Vector n1, double d1, + Vector n2, double d2); + static Vector AtIntersectionOfLines(Vector a0, Vector a1, + Vector b0, Vector b1, + bool *skew, + double *pa=NULL, double *pb=NULL); + static Vector AtIntersectionOfPlaneAndLine(Vector n, double d, + Vector p0, Vector p1, + bool *parallel); + static Vector AtIntersectionOfPlanes(Vector na, double da, + Vector nb, double db, + Vector nc, double dc, bool *parallel); + static void ClosestPointBetweenLines(Vector pa, Vector da, + Vector pb, Vector db, + double *ta, double *tb); + + double Element(int i); + bool Equals(Vector v, double tol=LENGTH_EPS); + bool EqualsExactly(Vector v); + Vector Plus(Vector b); + Vector Minus(Vector b); + Vector Negated(void); + Vector Cross(Vector b); + double DirectionCosineWith(Vector b); + double Dot(Vector b); + Vector Normal(int which); + Vector RotatedAbout(Vector orig, Vector axis, double theta); + Vector RotatedAbout(Vector axis, double theta); + Vector DotInToCsys(Vector u, Vector v, Vector n); + Vector ScaleOutOfCsys(Vector u, Vector v, Vector n); + double DistanceToLine(Vector p0, Vector dp); + bool OnLineSegment(Vector a, Vector b, double tol=LENGTH_EPS); + Vector ClosestPointOnLine(Vector p0, Vector dp); + double Magnitude(void); + double MagSquared(void); + Vector WithMagnitude(double s); + Vector ScaledBy(double s); + Vector ProjectInto(hEntity wrkpl); + Vector ProjectVectorInto(hEntity wrkpl); + double DivPivoting(Vector delta); + Vector ClosestOrtho(void); + void MakeMaxMin(Vector *maxv, Vector *minv); + Vector ClampWithin(double minv, double maxv); + static bool BoundingBoxesDisjoint(Vector amax, Vector amin, + Vector bmax, Vector bmin); + static bool BoundingBoxIntersectsLine(Vector amax, Vector amin, + Vector p0, Vector p1, bool segment); + bool OutsideAndNotOn(Vector maxv, Vector minv); + Vector InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan); + Point2d Project2d(Vector u, Vector v); + Point2d ProjectXy(void); + Vector4 Project4d(void); +}; + +class Vector4 { +public: + double w, x, y, z; + + static Vector4 From(double w, double x, double y, double z); + static Vector4 From(double w, Vector v3); + static Vector4 Blend(Vector4 a, Vector4 b, double t); + + Vector4 Plus(Vector4 b); + Vector4 Minus(Vector4 b); + Vector4 ScaledBy(double s); + Vector PerspectiveProject(void); +}; + +class Point2d { +public: + double x, y; + + static Point2d From(double x, double y); + + Point2d Plus(const Point2d &b) const; + Point2d Minus(const Point2d &b) const; + Point2d ScaledBy(double s) const; + double DivPivoting(Point2d delta) const; + double Dot(Point2d p) const; + double DistanceTo(const Point2d &p) const; + double DistanceToLine(const Point2d &p0, const Point2d &dp, bool segment) const; + double Magnitude(void) const; + double MagSquared(void) const; + Point2d WithMagnitude(double v) const; + Point2d Normal(void) const; + bool Equals(Point2d v, double tol=LENGTH_EPS) const; +}; + +// A simple list +template +class List { +public: + T *elem; + int n; + int elemsAllocated; + + void AllocForOneMore(void) { + if(n >= elemsAllocated) { + elemsAllocated = (elemsAllocated + 32)*2; + T *newElem = (T *)MemAlloc((size_t)elemsAllocated*sizeof(elem[0])); + for(int i = 0; i < n; i++) { + new(&newElem[i]) T(std::move(elem[i])); + elem[i].~T(); + } + MemFree(elem); + elem = newElem; + } + } + + void Add(T *t) { + AllocForOneMore(); + new(&elem[n++]) T(*t); + } + + void AddToBeginning(T *t) { + AllocForOneMore(); + new(&elem[n]) T(); + std::move_backward(elem, elem + 1, elem + n + 1); + elem[0] = *t; + n++; + } + + T *First(void) { + return (n == 0) ? NULL : &(elem[0]); + } + T *NextAfter(T *prev) { + if(!prev) return NULL; + if(prev - elem == (n - 1)) return NULL; + return prev + 1; + } + + void ClearTags(void) { + int i; + for(i = 0; i < n; i++) { + elem[i].tag = 0; + } + } + + void Clear(void) { + for(int i = 0; i < n; i++) + elem[i].~T(); + if(elem) MemFree(elem); + elem = NULL; + n = elemsAllocated = 0; + } + + void RemoveTagged(void) { + int src, dest; + dest = 0; + for(src = 0; src < n; src++) { + if(elem[src].tag) { + // this item should be deleted + } else { + if(src != dest) { + elem[dest] = elem[src]; + } + dest++; + } + } + for(int i = dest; i < n; i++) + elem[i].~T(); + n = dest; + // and elemsAllocated is untouched, because we didn't resize + } + + void RemoveLast(int cnt) { + if(n < cnt) oops(); + for(int i = n - cnt; i < n; i++) + elem[i].~T(); + n -= cnt; + // and elemsAllocated is untouched, same as in RemoveTagged + } + + void Reverse(void) { + int i; + for(i = 0; i < (n/2); i++) { + swap(elem[i], elem[(n-1)-i]); + } + } +}; + +// A list, where each element has an integer identifier. The list is kept +// sorted by that identifier, and items can be looked up in log n time by +// id. +template +class IdList { +public: + T *elem; + int n; + int elemsAllocated; + + uint32_t MaximumId(void) { + uint32_t id = 0; + + int i; + for(i = 0; i < n; i++) { + id = max(id, elem[i].h.v); + } + return id; + } + + H AddAndAssignId(T *t) { + t->h.v = (MaximumId() + 1); + Add(t); + + return t->h; + } + + void Add(T *t) { + if(n >= elemsAllocated) { + elemsAllocated = (elemsAllocated + 32)*2; + T *newElem = (T *)MemAlloc((size_t)elemsAllocated*sizeof(elem[0])); + for(int i = 0; i < n; i++) { + new(&newElem[i]) T(std::move(elem[i])); + elem[i].~T(); + } + MemFree(elem); + elem = newElem; + } + + int first = 0, last = n; + // We know that we must insert within the closed interval [first,last] + while(first != last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > t->h.v) { + last = mid; + } else if(hm.v < t->h.v) { + first = mid + 1; + } else { + dbp("can't insert in list; is handle %d not unique?", t->h.v); + oops(); + } + } + + int i = first; + new(&elem[n]) T(); + std::move_backward(elem + i, elem + n, elem + n + 1); + elem[i] = *t; + n++; + } + + T *FindById(H h) { + T *t = FindByIdNoOops(h); + if(!t) { + dbp("failed to look up item %08x, searched %d items", h.v, n); + oops(); + } + return t; + } + + int IndexOf(H h) { + int first = 0, last = n-1; + while(first <= last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > h.v) { + last = mid-1; // and first stays the same + } else if(hm.v < h.v) { + first = mid+1; // and last stays the same + } else { + return mid; + } + } + return -1; + } + + T *FindByIdNoOops(H h) { + int first = 0, last = n-1; + while(first <= last) { + int mid = (first + last)/2; + H hm = elem[mid].h; + if(hm.v > h.v) { + last = mid-1; // and first stays the same + } else if(hm.v < h.v) { + first = mid+1; // and last stays the same + } else { + return &(elem[mid]); + } + } + return NULL; + } + + T *First(void) { + return (n == 0) ? NULL : &(elem[0]); + } + T *NextAfter(T *prev) { + if(!prev) return NULL; + if(prev - elem == (n - 1)) return NULL; + return prev + 1; + } + + void ClearTags(void) { + int i; + for(i = 0; i < n; i++) { + elem[i].tag = 0; + } + } + + void Tag(H h, int tag) { + int i; + for(i = 0; i < n; i++) { + if(elem[i].h.v == h.v) { + elem[i].tag = tag; + } + } + } + + void RemoveTagged(void) { + int src, dest; + dest = 0; + for(src = 0; src < n; src++) { + if(elem[src].tag) { + // this item should be deleted + } else { + if(src != dest) { + elem[dest] = elem[src]; + } + dest++; + } + } + for(int i = dest; i < n; i++) + elem[i].~T(); + n = dest; + // and elemsAllocated is untouched, because we didn't resize + } + void RemoveById(H h) { + ClearTags(); + FindById(h)->tag = 1; + RemoveTagged(); + } + + void MoveSelfInto(IdList *l) { + l->Clear(); + *l = *this; + elemsAllocated = n = 0; + elem = NULL; + } + + void DeepCopyInto(IdList *l) { + l->Clear(); + l->elem = (T *)MemAlloc(elemsAllocated * sizeof(elem[0])); + for(int i = 0; i < n; i++) + new(&l->elem[i]) T(elem[i]); + l->elemsAllocated = elemsAllocated; + l->n = n; + } + + void Clear(void) { + for(int i = 0; i < n; i++) { + elem[i].Clear(); + elem[i].~T(); + } + elemsAllocated = n = 0; + if(elem) MemFree(elem); + elem = NULL; + } + +}; + +class BandedMatrix { +public: + enum { + MAX_UNKNOWNS = 16, + RIGHT_OF_DIAG = 1, + LEFT_OF_DIAG = 2 + }; + + double A[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double B[MAX_UNKNOWNS]; + double X[MAX_UNKNOWNS]; + int n; + + void Solve(void); +}; + +#define RGBi(r, g, b) RgbaColor::From((r), (g), (b)) +#define RGBf(r, g, b) RgbaColor::FromFloat((float)(r), (float)(g), (float)(b)) + +// Note: sizeof(class RgbaColor) should be exactly 4 +// +class RgbaColor { +public: + uint8_t red, green, blue, alpha; + + float redF(void) const { return (float)red / 255.0f; } + float greenF(void) const { return (float)green / 255.0f; } + float blueF(void) const { return (float)blue / 255.0f; } + float alphaF(void) const { return (float)alpha / 255.0f; } + + bool Equals(RgbaColor c) const { + return + c.red == red && + c.green == green && + c.blue == blue && + c.alpha == alpha; + } + + uint32_t ToPackedIntBGRA(void) const { + return + blue | + (uint32_t)(green << 8) | + (uint32_t)(red << 16) | + (uint32_t)((255 - alpha) << 24); + } + + uint32_t ToPackedInt(void) const { + return + red | + (uint32_t)(green << 8) | + (uint32_t)(blue << 16) | + (uint32_t)((255 - alpha) << 24); + } + + uint32_t ToARGB32(void) const { + return + blue | + (uint32_t)(green << 8) | + (uint32_t)(red << 16) | + (uint32_t)(alpha << 24); + } + + static RgbaColor From(int r, int g, int b, int a = 255) { + RgbaColor c; + c.red = (uint8_t)r; + c.green = (uint8_t)g; + c.blue = (uint8_t)b; + c.alpha = (uint8_t)a; + return c; + } + + static RgbaColor FromFloat(float r, float g, float b, float a = 1.0) { + return From( + (int)(255.1f * r), + (int)(255.1f * g), + (int)(255.1f * b), + (int)(255.1f * a)); + } + + static RgbaColor FromPackedInt(uint32_t rgba) { + return From( + (int)((rgba) & 0xff), + (int)((rgba >> 8) & 0xff), + (int)((rgba >> 16) & 0xff), + (int)(255 - ((rgba >> 24) & 0xff))); + } + + static RgbaColor FromPackedIntBGRA(uint32_t bgra) { + return From( + (int)((bgra >> 16) & 0xff), + (int)((bgra >> 8) & 0xff), + (int)((bgra) & 0xff), + (int)(255 - ((bgra >> 24) & 0xff))); + } + +}; + +class BBox { +public: + Vector minp; + Vector maxp; + + static BBox From(const Vector &p0, const Vector &p1); + + Vector GetOrigin(); + Vector GetExtents(); + + void Include(const Vector &v, double r = 0.0); + bool Overlaps(BBox &b1); + bool Contains(const Point2d &p); +}; + +#endif diff --git a/src/entity.cpp b/src/entity.cpp new file mode 100644 index 0000000..7f4a3a7 --- /dev/null +++ b/src/entity.cpp @@ -0,0 +1,793 @@ +//----------------------------------------------------------------------------- +// The implementation of our entities in the symbolic algebra system, methods +// to return a symbolic representation of the entity (line by its endpoints, +// circle by center and radius, etc.). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hEntity EntityBase::FREE_IN_3D = { 0 }; +const hEntity EntityBase::NO_ENTITY = { 0 }; + +bool EntityBase::HasVector(void) { + switch(type) { + case LINE_SEGMENT: + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return true; + + default: + return false; + } +} + +ExprVector EntityBase::VectorGetExprs(void) { + switch(type) { + case LINE_SEGMENT: + return (SK.GetEntity(point[0])->PointGetExprs()).Minus( + SK.GetEntity(point[1])->PointGetExprs()); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return NormalExprsN(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetNum(void) { + switch(type) { + case LINE_SEGMENT: + return (SK.GetEntity(point[0])->PointGetNum()).Minus( + SK.GetEntity(point[1])->PointGetNum()); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return NormalN(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetRefPoint(void) { + switch(type) { + case LINE_SEGMENT: + return ((SK.GetEntity(point[0])->PointGetNum()).Plus( + SK.GetEntity(point[1])->PointGetNum())).ScaledBy(0.5); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return SK.GetEntity(point[0])->PointGetNum(); + + default: oops(); + } +} + +Vector EntityBase::VectorGetStartPoint(void) { + switch(type) { + case LINE_SEGMENT: + return SK.GetEntity(point[1])->PointGetNum(); + + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return SK.GetEntity(point[0])->PointGetNum(); + + default: oops(); + } +} + +bool EntityBase::IsCircle(void) { + return (type == CIRCLE) || (type == ARC_OF_CIRCLE); +} + +Expr *EntityBase::CircleGetRadiusExpr(void) { + if(type == CIRCLE) { + return SK.GetEntity(distance)->DistanceGetExpr(); + } else if(type == ARC_OF_CIRCLE) { + return Constraint::Distance(workplane, point[0], point[1]); + } else oops(); +} + +double EntityBase::CircleGetRadiusNum(void) { + if(type == CIRCLE) { + return SK.GetEntity(distance)->DistanceGetNum(); + } else if(type == ARC_OF_CIRCLE) { + Vector c = SK.GetEntity(point[0])->PointGetNum(); + Vector pa = SK.GetEntity(point[1])->PointGetNum(); + return (pa.Minus(c)).Magnitude(); + } else oops(); +} + +void EntityBase::ArcGetAngles(double *thetaa, double *thetab, double *dtheta) { + if(type != ARC_OF_CIRCLE) oops(); + + Quaternion q = Normal()->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + Vector c = SK.GetEntity(point[0])->PointGetNum(); + Vector pa = SK.GetEntity(point[1])->PointGetNum(); + Vector pb = SK.GetEntity(point[2])->PointGetNum(); + + Point2d c2 = c.Project2d(u, v); + Point2d pa2 = (pa.Project2d(u, v)).Minus(c2); + Point2d pb2 = (pb.Project2d(u, v)).Minus(c2); + + *thetaa = atan2(pa2.y, pa2.x); + *thetab = atan2(pb2.y, pb2.x); + *dtheta = *thetab - *thetaa; + // If the endpoints are coincident, call it a full arc, not a zero arc; + // useful concept to have when splitting + while(*dtheta < 1e-6) *dtheta += 2*PI; + while(*dtheta > (2*PI)) *dtheta -= 2*PI; +} + +Vector EntityBase::CubicGetStartNum(void) { + return SK.GetEntity(point[0])->PointGetNum(); +} +Vector EntityBase::CubicGetFinishNum(void) { + return SK.GetEntity(point[3+extraPoints])->PointGetNum(); +} +ExprVector EntityBase::CubicGetStartTangentExprs(void) { + ExprVector pon = SK.GetEntity(point[0])->PointGetExprs(), + poff = SK.GetEntity(point[1])->PointGetExprs(); + return (pon.Minus(poff)); +} +ExprVector EntityBase::CubicGetFinishTangentExprs(void) { + ExprVector pon = SK.GetEntity(point[3+extraPoints])->PointGetExprs(), + poff = SK.GetEntity(point[2+extraPoints])->PointGetExprs(); + return (pon.Minus(poff)); +} +Vector EntityBase::CubicGetStartTangentNum(void) { + Vector pon = SK.GetEntity(point[0])->PointGetNum(), + poff = SK.GetEntity(point[1])->PointGetNum(); + return (pon.Minus(poff)); +} +Vector EntityBase::CubicGetFinishTangentNum(void) { + Vector pon = SK.GetEntity(point[3+extraPoints])->PointGetNum(), + poff = SK.GetEntity(point[2+extraPoints])->PointGetNum(); + return (pon.Minus(poff)); +} + +bool EntityBase::IsWorkplane(void) { + return (type == WORKPLANE); +} + +ExprVector EntityBase::WorkplaneGetOffsetExprs(void) { + return SK.GetEntity(point[0])->PointGetExprs(); +} + +Vector EntityBase::WorkplaneGetOffset(void) { + return SK.GetEntity(point[0])->PointGetNum(); +} + +void EntityBase::WorkplaneGetPlaneExprs(ExprVector *n, Expr **dn) { + if(type == WORKPLANE) { + *n = Normal()->NormalExprsN(); + + ExprVector p0 = SK.GetEntity(point[0])->PointGetExprs(); + // The plane is n dot (p - p0) = 0, or + // n dot p - n dot p0 = 0 + // so dn = n dot p0 + *dn = p0.Dot(*n); + } else { + oops(); + } +} + +bool EntityBase::IsDistance(void) { + return (type == DISTANCE) || + (type == DISTANCE_N_COPY); +} +double EntityBase::DistanceGetNum(void) { + if(type == DISTANCE) { + return SK.GetParam(param[0])->val; + } else if(type == DISTANCE_N_COPY) { + return numDistance; + } else oops(); +} +Expr *EntityBase::DistanceGetExpr(void) { + if(type == DISTANCE) { + return Expr::From(param[0]); + } else if(type == DISTANCE_N_COPY) { + return Expr::From(numDistance); + } else oops(); +} +void EntityBase::DistanceForceTo(double v) { + if(type == DISTANCE) { + (SK.GetParam(param[0]))->val = v; + } else if(type == DISTANCE_N_COPY) { + // do nothing, it's locked + } else oops(); +} + +EntityBase *EntityBase::Normal(void) { + return SK.GetEntity(normal); +} + +bool EntityBase::IsPoint(void) { + switch(type) { + case POINT_IN_3D: + case POINT_IN_2D: + case POINT_N_COPY: + case POINT_N_TRANS: + case POINT_N_ROT_TRANS: + case POINT_N_ROT_AA: + return true; + + default: + return false; + } +} + +bool EntityBase::IsNormal(void) { + switch(type) { + case NORMAL_IN_3D: + case NORMAL_IN_2D: + case NORMAL_N_COPY: + case NORMAL_N_ROT: + case NORMAL_N_ROT_AA: + return true; + + default: return false; + } +} + +Quaternion EntityBase::NormalGetNum(void) { + Quaternion q; + switch(type) { + case NORMAL_IN_3D: + q = Quaternion::From(param[0], param[1], param[2], param[3]); + break; + + case NORMAL_IN_2D: { + EntityBase *wrkpl = SK.GetEntity(workplane); + EntityBase *norm = SK.GetEntity(wrkpl->normal); + q = norm->NormalGetNum(); + break; + } + case NORMAL_N_COPY: + q = numNormal; + break; + + case NORMAL_N_ROT: + q = Quaternion::From(param[0], param[1], param[2], param[3]); + q = q.Times(numNormal); + break; + + case NORMAL_N_ROT_AA: { + q = GetAxisAngleQuaternion(0); + q = q.Times(numNormal); + break; + } + + default: oops(); + } + return q; +} + +void EntityBase::NormalForceTo(Quaternion q) { + switch(type) { + case NORMAL_IN_3D: + SK.GetParam(param[0])->val = q.w; + SK.GetParam(param[1])->val = q.vx; + SK.GetParam(param[2])->val = q.vy; + SK.GetParam(param[3])->val = q.vz; + break; + + case NORMAL_IN_2D: + case NORMAL_N_COPY: + // There's absolutely nothing to do; these are locked. + break; + case NORMAL_N_ROT: { + Quaternion qp = q.Times(numNormal.Inverse()); + + SK.GetParam(param[0])->val = qp.w; + SK.GetParam(param[1])->val = qp.vx; + SK.GetParam(param[2])->val = qp.vy; + SK.GetParam(param[3])->val = qp.vz; + break; + } + + case NORMAL_N_ROT_AA: + // Not sure if I'll bother implementing this one + break; + + default: oops(); + } +} + +Vector EntityBase::NormalU(void) { + return NormalGetNum().RotationU(); +} +Vector EntityBase::NormalV(void) { + return NormalGetNum().RotationV(); +} +Vector EntityBase::NormalN(void) { + return NormalGetNum().RotationN(); +} + +ExprVector EntityBase::NormalExprsU(void) { + return NormalGetExprs().RotationU(); +} +ExprVector EntityBase::NormalExprsV(void) { + return NormalGetExprs().RotationV(); +} +ExprVector EntityBase::NormalExprsN(void) { + return NormalGetExprs().RotationN(); +} + +ExprQuaternion EntityBase::NormalGetExprs(void) { + ExprQuaternion q; + switch(type) { + case NORMAL_IN_3D: + q = ExprQuaternion::From(param[0], param[1], param[2], param[3]); + break; + + case NORMAL_IN_2D: { + EntityBase *wrkpl = SK.GetEntity(workplane); + EntityBase *norm = SK.GetEntity(wrkpl->normal); + q = norm->NormalGetExprs(); + break; + } + case NORMAL_N_COPY: + q = ExprQuaternion::From(numNormal); + break; + + case NORMAL_N_ROT: { + ExprQuaternion orig = ExprQuaternion::From(numNormal); + q = ExprQuaternion::From(param[0], param[1], param[2], param[3]); + + q = q.Times(orig); + break; + } + + case NORMAL_N_ROT_AA: { + ExprQuaternion orig = ExprQuaternion::From(numNormal); + q = GetAxisAngleQuaternionExprs(0); + q = q.Times(orig); + break; + } + + default: oops(); + } + return q; +} + +void EntityBase::PointForceTo(Vector p) { + switch(type) { + case POINT_IN_3D: + SK.GetParam(param[0])->val = p.x; + SK.GetParam(param[1])->val = p.y; + SK.GetParam(param[2])->val = p.z; + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + p = p.Minus(c->WorkplaneGetOffset()); + SK.GetParam(param[0])->val = p.Dot(c->Normal()->NormalU()); + SK.GetParam(param[1])->val = p.Dot(c->Normal()->NormalV()); + break; + } + + case POINT_N_TRANS: { + if(timesApplied == 0) break; + Vector trans = (p.Minus(numPoint)).ScaledBy(1.0/timesApplied); + SK.GetParam(param[0])->val = trans.x; + SK.GetParam(param[1])->val = trans.y; + SK.GetParam(param[2])->val = trans.z; + break; + } + + case POINT_N_ROT_TRANS: { + // Force only the translation; leave the rotation unchanged. But + // remember that we're working with respect to the rotated + // point. + Vector trans = p.Minus(PointGetQuaternion().Rotate(numPoint)); + SK.GetParam(param[0])->val = trans.x; + SK.GetParam(param[1])->val = trans.y; + SK.GetParam(param[2])->val = trans.z; + break; + } + + case POINT_N_ROT_AA: { + // Force only the angle; the axis and center of rotation stay + Vector offset = Vector::From(param[0], param[1], param[2]); + Vector normal = Vector::From(param[4], param[5], param[6]); + Vector u = normal.Normal(0), v = normal.Normal(1); + Vector po = p.Minus(offset), numo = numPoint.Minus(offset); + double thetap = atan2(v.Dot(po), u.Dot(po)); + double thetan = atan2(v.Dot(numo), u.Dot(numo)); + double thetaf = (thetap - thetan); + double thetai = (SK.GetParam(param[3])->val)*timesApplied*2; + double dtheta = thetaf - thetai; + // Take the smallest possible change in the actual step angle, + // in order to avoid jumps when you cross from +pi to -pi + while(dtheta < -PI) dtheta += 2*PI; + while(dtheta > PI) dtheta -= 2*PI; + SK.GetParam(param[3])->val = (thetai + dtheta)/(timesApplied*2); + break; + } + + case POINT_N_COPY: + // Nothing to do; it's a static copy + break; + + default: oops(); + } +} + +Vector EntityBase::PointGetNum(void) { + Vector p; + switch(type) { + case POINT_IN_3D: + p = Vector::From(param[0], param[1], param[2]); + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + Vector u = c->Normal()->NormalU(); + Vector v = c->Normal()->NormalV(); + p = u.ScaledBy(SK.GetParam(param[0])->val); + p = p.Plus(v.ScaledBy(SK.GetParam(param[1])->val)); + p = p.Plus(c->WorkplaneGetOffset()); + break; + } + + case POINT_N_TRANS: { + Vector trans = Vector::From(param[0], param[1], param[2]); + p = numPoint.Plus(trans.ScaledBy(timesApplied)); + break; + } + + case POINT_N_ROT_TRANS: { + Vector offset = Vector::From(param[0], param[1], param[2]); + Quaternion q = PointGetQuaternion(); + p = q.Rotate(numPoint); + p = p.Plus(offset); + break; + } + + case POINT_N_ROT_AA: { + Vector offset = Vector::From(param[0], param[1], param[2]); + Quaternion q = PointGetQuaternion(); + p = numPoint.Minus(offset); + p = q.Rotate(p); + p = p.Plus(offset); + break; + } + + case POINT_N_COPY: + p = numPoint; + break; + + default: oops(); + } + return p; +} + +ExprVector EntityBase::PointGetExprs(void) { + ExprVector r; + switch(type) { + case POINT_IN_3D: + r = ExprVector::From(param[0], param[1], param[2]); + break; + + case POINT_IN_2D: { + EntityBase *c = SK.GetEntity(workplane); + ExprVector u = c->Normal()->NormalExprsU(); + ExprVector v = c->Normal()->NormalExprsV(); + r = c->WorkplaneGetOffsetExprs(); + r = r.Plus(u.ScaledBy(Expr::From(param[0]))); + r = r.Plus(v.ScaledBy(Expr::From(param[1]))); + break; + } + case POINT_N_TRANS: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + r = orig.Plus(trans.ScaledBy(Expr::From(timesApplied))); + break; + } + case POINT_N_ROT_TRANS: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + orig = q.Rotate(orig); + r = orig.Plus(trans); + break; + } + case POINT_N_ROT_AA: { + ExprVector orig = ExprVector::From(numPoint); + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + orig = orig.Minus(trans); + orig = q.Rotate(orig); + r = orig.Plus(trans); + break; + } + case POINT_N_COPY: + r = ExprVector::From(numPoint); + break; + + default: oops(); + } + return r; +} + +void EntityBase::PointGetExprsInWorkplane(hEntity wrkpl, Expr **u, Expr **v) { + if(type == POINT_IN_2D && workplane.v == wrkpl.v) { + // They want our coordinates in the form that we've written them, + // very nice. + *u = Expr::From(param[0]); + *v = Expr::From(param[1]); + } else { + // Get the offset and basis vectors for this weird exotic csys. + EntityBase *w = SK.GetEntity(wrkpl); + ExprVector wp = w->WorkplaneGetOffsetExprs(); + ExprVector wu = w->Normal()->NormalExprsU(); + ExprVector wv = w->Normal()->NormalExprsV(); + + // Get our coordinates in three-space, and project them into that + // coordinate system. + ExprVector ev = PointGetExprs(); + ev = ev.Minus(wp); + *u = ev.Dot(wu); + *v = ev.Dot(wv); + } +} + +void EntityBase::PointForceQuaternionTo(Quaternion q) { + if(type != POINT_N_ROT_TRANS) oops(); + + SK.GetParam(param[3])->val = q.w; + SK.GetParam(param[4])->val = q.vx; + SK.GetParam(param[5])->val = q.vy; + SK.GetParam(param[6])->val = q.vz; +} + +Quaternion EntityBase::GetAxisAngleQuaternion(int param0) { + Quaternion q; + double theta = timesApplied*SK.GetParam(param[param0+0])->val; + double s = sin(theta), c = cos(theta); + q.w = c; + q.vx = s*SK.GetParam(param[param0+1])->val; + q.vy = s*SK.GetParam(param[param0+2])->val; + q.vz = s*SK.GetParam(param[param0+3])->val; + return q; +} + +ExprQuaternion EntityBase::GetAxisAngleQuaternionExprs(int param0) { + ExprQuaternion q; + + Expr *theta = Expr::From(timesApplied)->Times( + Expr::From(param[param0+0])); + Expr *c = theta->Cos(), *s = theta->Sin(); + q.w = c; + q.vx = s->Times(Expr::From(param[param0+1])); + q.vy = s->Times(Expr::From(param[param0+2])); + q.vz = s->Times(Expr::From(param[param0+3])); + return q; +} + +Quaternion EntityBase::PointGetQuaternion(void) { + Quaternion q; + + if(type == POINT_N_ROT_AA) { + q = GetAxisAngleQuaternion(3); + } else if(type == POINT_N_ROT_TRANS) { + q = Quaternion::From(param[3], param[4], param[5], param[6]); + } else oops(); + + return q; +} + +bool EntityBase::IsFace(void) { + switch(type) { + case FACE_NORMAL_PT: + case FACE_XPROD: + case FACE_N_ROT_TRANS: + case FACE_N_TRANS: + case FACE_N_ROT_AA: + return true; + default: + return false; + } +} + +ExprVector EntityBase::FaceGetNormalExprs(void) { + ExprVector r; + if(type == FACE_NORMAL_PT) { + Vector v = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = ExprVector::From(v.WithMagnitude(1)); + } else if(type == FACE_XPROD) { + ExprVector vc = ExprVector::From(param[0], param[1], param[2]); + ExprVector vn = + ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = vc.Cross(vn); + r = r.WithMagnitude(Expr::From(1.0)); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical normal vector gets the rotation; the numerical + // normal has magnitude one, and the rotation doesn't change that, + // so there's no need to fix it up. + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(r); + } else if(type == FACE_N_TRANS) { + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_N_ROT_AA) { + r = ExprVector::From(numNormal.vx, numNormal.vy, numNormal.vz); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + r = q.Rotate(r); + } else oops(); + return r; +} + +Vector EntityBase::FaceGetNormalNum(void) { + Vector r; + if(type == FACE_NORMAL_PT) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_XPROD) { + Vector vc = Vector::From(param[0], param[1], param[2]); + Vector vn = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + r = vc.Cross(vn); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical normal vector gets the rotation + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + Quaternion q = Quaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(r); + } else if(type == FACE_N_TRANS) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + } else if(type == FACE_N_ROT_AA) { + r = Vector::From(numNormal.vx, numNormal.vy, numNormal.vz); + Quaternion q = GetAxisAngleQuaternion(3); + r = q.Rotate(r); + } else oops(); + return r.WithMagnitude(1); +} + +ExprVector EntityBase::FaceGetPointExprs(void) { + ExprVector r; + if(type == FACE_NORMAL_PT) { + r = SK.GetEntity(point[0])->PointGetExprs(); + } else if(type == FACE_XPROD) { + r = ExprVector::From(numPoint); + } else if(type == FACE_N_ROT_TRANS) { + // The numerical point gets the rotation and translation. + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = + ExprQuaternion::From(param[3], param[4], param[5], param[6]); + r = ExprVector::From(numPoint); + r = q.Rotate(r); + r = r.Plus(trans); + } else if(type == FACE_N_TRANS) { + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + r = ExprVector::From(numPoint); + r = r.Plus(trans.ScaledBy(Expr::From(timesApplied))); + } else if(type == FACE_N_ROT_AA) { + ExprVector trans = ExprVector::From(param[0], param[1], param[2]); + ExprQuaternion q = GetAxisAngleQuaternionExprs(3); + r = ExprVector::From(numPoint); + r = r.Minus(trans); + r = q.Rotate(r); + r = r.Plus(trans); + } else oops(); + return r; +} + +Vector EntityBase::FaceGetPointNum(void) { + Vector r; + if(type == FACE_NORMAL_PT) { + r = SK.GetEntity(point[0])->PointGetNum(); + } else if(type == FACE_XPROD) { + r = numPoint; + } else if(type == FACE_N_ROT_TRANS) { + // The numerical point gets the rotation and translation. + Vector trans = Vector::From(param[0], param[1], param[2]); + Quaternion q = Quaternion::From(param[3], param[4], param[5], param[6]); + r = q.Rotate(numPoint); + r = r.Plus(trans); + } else if(type == FACE_N_TRANS) { + Vector trans = Vector::From(param[0], param[1], param[2]); + r = numPoint.Plus(trans.ScaledBy(timesApplied)); + } else if(type == FACE_N_ROT_AA) { + Vector trans = Vector::From(param[0], param[1], param[2]); + Quaternion q = GetAxisAngleQuaternion(3); + r = numPoint.Minus(trans); + r = q.Rotate(r); + r = r.Plus(trans); + } else oops(); + return r; +} + +bool EntityBase::HasEndpoints(void) { + return (type == LINE_SEGMENT) || + (type == CUBIC) || + (type == ARC_OF_CIRCLE); +} +Vector EntityBase::EndpointStart() { + if(type == LINE_SEGMENT) { + return SK.GetEntity(point[0])->PointGetNum(); + } else if(type == CUBIC) { + return CubicGetStartNum(); + } else if(type == ARC_OF_CIRCLE) { + return SK.GetEntity(point[1])->PointGetNum(); + } else { + oops(); + } +} +Vector EntityBase::EndpointFinish() { + if(type == LINE_SEGMENT) { + return SK.GetEntity(point[1])->PointGetNum(); + } else if(type == CUBIC) { + return CubicGetFinishNum(); + } else if(type == ARC_OF_CIRCLE) { + return SK.GetEntity(point[2])->PointGetNum(); + } else { + oops(); + } +} + +void EntityBase::AddEq(IdList *l, Expr *expr, int index) { + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void EntityBase::GenerateEquations(IdList *l) { + switch(type) { + case NORMAL_IN_3D: { + ExprQuaternion q = NormalGetExprs(); + AddEq(l, (q.Magnitude())->Minus(Expr::From(1)), 0); + break; + } + case ARC_OF_CIRCLE: { + // If this is a copied entity, with its point already fixed + // with respect to each other, then we don't want to generate + // the distance constraint! + if(SK.GetEntity(point[0])->type != POINT_IN_2D) break; + + // If the two endpoints of the arc are constrained coincident + // (to make a complete circle), then our distance constraint + // would be redundant and therefore overconstrain things. + int i; + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != group.v) continue; + if(c->type != Constraint::POINTS_COINCIDENT) continue; + + if((c->ptA.v == point[1].v && c->ptB.v == point[2].v) || + (c->ptA.v == point[2].v && c->ptB.v == point[1].v)) + { + break; + } + } + if(i < SK.constraint.n) break; + + Expr *ra = Constraint::Distance(workplane, point[0], point[1]); + Expr *rb = Constraint::Distance(workplane, point[0], point[2]); + AddEq(l, ra->Minus(rb), 0); + break; + } + default:; + // Most entities do not generate equations. + } +} + diff --git a/src/export.cpp b/src/export.cpp new file mode 100644 index 0000000..857ff60 --- /dev/null +++ b/src/export.cpp @@ -0,0 +1,1550 @@ +//----------------------------------------------------------------------------- +// The 2d vector output stuff that isn't specific to any particular file +// format: getting the appropriate lines and curves, performing hidden line +// removal, calculating bounding boxes, and so on. Also raster and triangle +// mesh output. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#ifndef WIN32 +#include +#endif +#include + +void SolveSpaceUI::ExportSectionTo(const std::string &filename) { + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + gn = gn.WithMagnitude(1); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + if(g->displayMesh.IsEmpty()) { + Error("No solid model present; draw one with extrudes and revolves, " + "or use Export 2d View to export bare lines and curves."); + return; + } + + // The plane in which the exported section lies; need this because we'll + // reorient from that plane into the xy plane before exporting. + Vector origin, u, v, n; + double d; + + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + if((gs.n == 0 && g->activeWorkplane.v != Entity::FREE_IN_3D.v)) { + Entity *wrkpl = SK.GetEntity(g->activeWorkplane); + origin = wrkpl->WorkplaneGetOffset(); + n = wrkpl->Normal()->NormalN(); + u = wrkpl->Normal()->NormalU(); + v = wrkpl->Normal()->NormalV(); + } else if(gs.n == 1 && gs.faces == 1) { + Entity *face = SK.GetEntity(gs.entity[0]); + origin = face->FaceGetPointNum(); + n = face->FaceGetNormalNum(); + if(n.Dot(gn) < 0) n = n.ScaledBy(-1); + u = n.Normal(0); + v = n.Normal(1); + } else if(gs.n == 3 && gs.vectors == 2 && gs.points == 1) { + Vector ut = SK.GetEntity(gs.entity[0])->VectorGetNum(), + vt = SK.GetEntity(gs.entity[1])->VectorGetNum(); + ut = ut.WithMagnitude(1); + vt = vt.WithMagnitude(1); + + if(fabs(SS.GW.projUp.Dot(vt)) < fabs(SS.GW.projUp.Dot(ut))) { + swap(ut, vt); + } + if(SS.GW.projRight.Dot(ut) < 0) ut = ut.ScaledBy(-1); + if(SS.GW.projUp. Dot(vt) < 0) vt = vt.ScaledBy(-1); + + origin = SK.GetEntity(gs.point[0])->PointGetNum(); + n = ut.Cross(vt); + u = ut.WithMagnitude(1); + v = (n.Cross(u)).WithMagnitude(1); + } else { + Error("Bad selection for export section. Please select:\n\n" + " * nothing, with an active workplane " + "(workplane is section plane)\n" + " * a face (section plane through face)\n" + " * a point and two line segments " + "(plane through point and parallel to lines)\n"); + return; + } + SS.GW.ClearSelection(); + + n = n.WithMagnitude(1); + d = origin.Dot(n); + + SEdgeList el = {}; + SBezierList bl = {}; + + // If there's a mesh, then grab the edges from it. + g->runningMesh.MakeEdgesInPlaneInto(&el, n, d); + + // If there's a shell, then grab the edges and possibly Beziers. + g->runningShell.MakeSectionEdgesInto(n, d, + &el, + (SS.exportPwlCurves || fabs(SS.exportOffset) > LENGTH_EPS) ? NULL : &bl); + + // All of these are solid model edges, so use the appropriate style. + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + se->auxA = Style::SOLID_EDGE; + } + SBezier *sb; + for(sb = bl.l.First(); sb; sb = bl.l.NextAfter(sb)) { + sb->auxA = Style::SOLID_EDGE; + } + + el.CullExtraneousEdges(); + bl.CullIdenticalBeziers(); + + // And write the edges. + VectorFileWriter *out = VectorFileWriter::ForFile(filename); + if(out) { + // parallel projection (no perspective), and no mesh + ExportLinesAndMesh(&el, &bl, NULL, + u, v, n, origin, 0, + out); + } + el.Clear(); + bl.Clear(); +} + +void SolveSpaceUI::ExportViewOrWireframeTo(const std::string &filename, bool wireframe) { + int i; + SEdgeList edges = {}; + SBezierList beziers = {}; + + VectorFileWriter *out = VectorFileWriter::ForFile(filename); + if(!out) return; + + SS.exportMode = true; + GenerateAll(GENERATE_ALL); + + SMesh *sm = NULL; + if(SS.GW.showShaded || SS.GW.showHdnLines) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + sm = &(g->displayMesh); + } + if(sm && sm->IsEmpty()) { + sm = NULL; + } + + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(!e->IsVisible()) continue; + if(e->construction) continue; + + if(SS.exportPwlCurves || sm || fabs(SS.exportOffset) > LENGTH_EPS) + { + // We will be doing hidden line removal, which we can't do on + // exact curves; so we need things broken down to pwls. Same + // problem with cutter radius compensation. + e->GenerateEdges(&edges); + } else { + e->GenerateBezierCurves(&beziers); + } + } + + if(SS.GW.showEdges) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + SEdgeList *selr = &(g->displayEdges); + SEdge *se; + for(se = selr->l.First(); se; se = selr->l.NextAfter(se)) { + edges.AddEdge(se->a, se->b, Style::SOLID_EDGE); + } + } + + if(SS.GW.showConstraints) { + if(!out->OutputConstraints(&SK.constraint)) { + // The output format cannot represent constraints directly, + // so convert them to edges. + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + c->GetEdges(&edges); + } + } + } + + if(wireframe) { + Vector u = Vector::From(1.0, 0.0, 0.0), + v = Vector::From(0.0, 1.0, 0.0), + n = Vector::From(0.0, 0.0, 1.0), + origin = Vector::From(0.0, 0.0, 0.0); + double cameraTan = 0.0, + scale = 1.0; + + out->SetModelviewProjection(u, v, n, origin, cameraTan, scale); + + ExportWireframeCurves(&edges, &beziers, out); + } else { + Vector u = SS.GW.projRight, + v = SS.GW.projUp, + n = u.Cross(v), + origin = SS.GW.offset.ScaledBy(-1); + + out->SetModelviewProjection(u, v, n, origin, + SS.CameraTangent()*SS.GW.scale, SS.exportScale); + + ExportLinesAndMesh(&edges, &beziers, sm, + u, v, n, origin, SS.CameraTangent()*SS.GW.scale, + out); + + if(!out->HasCanvasSize()) { + // These file formats don't have a canvas size, so they just + // get exported in the raw coordinate system. So indicate what + // that was on-screen. + SS.justExportedInfo.showOrigin = true; + SS.justExportedInfo.pt = origin; + SS.justExportedInfo.u = u; + SS.justExportedInfo.v = v; + } else { + SS.justExportedInfo.showOrigin = false; + } + + SS.justExportedInfo.draw = true; + InvalidateGraphics(); + } + + edges.Clear(); + beziers.Clear(); +} + +void SolveSpaceUI::ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl, + VectorFileWriter *out) +{ + SBezierLoopSetSet sblss = {}; + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + SBezier sb = SBezier::From( + (se->a).ScaledBy(1.0 / SS.exportScale), + (se->b).ScaledBy(1.0 / SS.exportScale)); + sblss.AddOpenPath(&sb); + } + + sbl->ScaleSelfBy(1.0/SS.exportScale); + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + sblss.AddOpenPath(sb); + } + + out->OutputLinesAndMesh(&sblss, NULL); + sblss.Clear(); +} + +void SolveSpaceUI::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm, + Vector u, Vector v, Vector n, + Vector origin, double cameraTan, + VectorFileWriter *out) +{ + double s = 1.0 / SS.exportScale; + + // Project into the export plane; so when we're done, z doesn't matter, + // and x and y are what goes in the DXF. + SEdge *e; + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + // project into the specified csys, and apply export scale + (e->a) = e->a.InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + (e->b) = e->b.InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + } + + SBezier *b; + if(sbl) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + *b = b->InPerspective(u, v, n, origin, cameraTan); + int i; + for(i = 0; i <= b->deg; i++) { + b->ctrl[i] = (b->ctrl[i]).ScaledBy(s); + } + } + } + + // If cutter radius compensation is requested, then perform it now + if(fabs(SS.exportOffset) > LENGTH_EPS) { + // assemble those edges into a polygon, and clear the edge list + SPolygon sp = {}; + sel->AssemblePolygon(&sp, NULL); + sel->Clear(); + + SPolygon compd = {}; + sp.normal = Vector::From(0, 0, -1); + sp.FixContourDirections(); + sp.OffsetInto(&compd, SS.exportOffset*s); + sp.Clear(); + + compd.MakeEdgesInto(sel); + compd.Clear(); + } + + // Now the triangle mesh; project, then build a BSP to perform + // occlusion testing and generated the shaded surfaces. + SMesh smp = {}; + if(sm) { + Vector l0 = (SS.lightDir[0]).WithMagnitude(1), + l1 = (SS.lightDir[1]).WithMagnitude(1); + STriangle *tr; + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + STriangle tt = *tr; + tt.a = (tt.a).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + tt.b = (tt.b).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + tt.c = (tt.c).InPerspective(u, v, n, origin, cameraTan).ScaledBy(s); + + // And calculate lighting for the triangle + Vector n = tt.Normal().WithMagnitude(1); + double lighting = SS.ambientIntensity + + max(0.0, (SS.lightIntensity[0])*(n.Dot(l0))) + + max(0.0, (SS.lightIntensity[1])*(n.Dot(l1))); + double r = min(1.0, tt.meta.color.redF() * lighting), + g = min(1.0, tt.meta.color.greenF() * lighting), + b = min(1.0, tt.meta.color.blueF() * lighting); + tt.meta.color = RGBf(r, g, b); + smp.AddTriangle(&tt); + } + } + + SMesh sms = {}; + + // We need the mesh for occlusion testing, but if we don't/can't export it, + // don't generate it. + if(SS.GW.showShaded && out->CanOutputMesh()) { + // Use the BSP routines to generate the split triangles in paint order. + SBsp3 *bsp = SBsp3::FromMesh(&smp); + if(bsp) bsp->GenerateInPaintOrder(&sms); + // And cull the back-facing triangles + STriangle *tr; + sms.l.ClearTags(); + for(tr = sms.l.First(); tr; tr = sms.l.NextAfter(tr)) { + Vector n = tr->Normal(); + if(n.z < 0) { + tr->tag = 1; + } + } + sms.l.RemoveTagged(); + } + + // And now we perform hidden line removal if requested + SEdgeList hlrd = {}; + if(sm) { + SKdNode *root = SKdNode::From(&smp); + + // Generate the edges where a curved surface turns from front-facing + // to back-facing. + if(SS.GW.showEdges) { + root->MakeCertainEdgesInto(sel, SKdNode::TURNING_EDGES, + /*coplanarIsInter=*/false, NULL, NULL, + GW.showOutlines ? Style::OUTLINE : Style::SOLID_EDGE); + } + + root->ClearTags(); + int cnt = 1234; + + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxA == Style::CONSTRAINT) { + // Constraints should not get hidden line removed; they're + // always on top. + hlrd.AddEdge(se->a, se->b, se->auxA); + continue; + } + + SEdgeList edges = {}; + // Split the original edge against the mesh + edges.AddEdge(se->a, se->b, se->auxA); + root->OcclusionTestLine(*se, &edges, cnt, /*removeHidden=*/!SS.GW.showHdnLines); + // the occlusion test splits unnecessarily; so fix those + edges.MergeCollinearSegments(se->a, se->b); + cnt++; + // And add the results to our output + SEdge *sen; + for(sen = edges.l.First(); sen; sen = edges.l.NextAfter(sen)) { + hlrd.AddEdge(sen->a, sen->b, sen->auxA); + } + edges.Clear(); + } + + sel = &hlrd; + } + + // Clean up: remove overlapping line segments and + // segments with zero-length projections. + sel->l.ClearTags(); + for(int i = 0; i < sel->l.n; ++i) { + SEdge *sei = &sel->l.elem[i]; + hStyle hsi = { (uint32_t)sei->auxA }; + Style *si = Style::Get(hsi); + if(sei->tag != 0) continue; + + // Remove segments with zero length projections. + Vector ai = sei->a; + ai.z = 0.0; + Vector bi = sei->b; + bi.z = 0.0; + Vector di = bi.Minus(ai); + if(fabs(di.x) < LENGTH_EPS && fabs(di.y) < LENGTH_EPS) { + sei->tag = 1; + continue; + } + + for(int j = i + 1; j < sel->l.n; ++j) { + SEdge *sej = &sel->l.elem[j]; + if(sej->tag != 0) continue; + + Vector *pAj = &sej->a; + Vector *pBj = &sej->b; + + // Remove segments with zero length projections. + Vector aj = sej->a; + aj.z = 0.0; + Vector bj = sej->b; + bj.z = 0.0; + Vector dj = bj.Minus(aj); + if(fabs(dj.x) < LENGTH_EPS && fabs(dj.y) < LENGTH_EPS) { + sej->tag = 1; + continue; + } + + // Skip non-collinear segments. + const double eps = 1e-6; + if(aj.DistanceToLine(ai, di) > eps) continue; + if(bj.DistanceToLine(ai, di) > eps) continue; + + double ta = aj.Minus(ai).Dot(di) / di.Dot(di); + double tb = bj.Minus(ai).Dot(di) / di.Dot(di); + if(ta > tb) { + std::swap(pAj, pBj); + std::swap(ta, tb); + } + + hStyle hsj = { (uint32_t)sej->auxA }; + Style *sj = Style::Get(hsj); + + bool canRemoveI = sej->auxA == sei->auxA || si->zIndex < sj->zIndex; + bool canRemoveJ = sej->auxA == sei->auxA || sj->zIndex < si->zIndex; + + if(canRemoveJ) { + // j-segment inside i-segment + if(ta > 0.0 - eps && tb < 1.0 + eps) { + sej->tag = 1; + continue; + } + + // cut segment + bool aInside = ta > 0.0 - eps && ta < 1.0 + eps; + if(tb > 1.0 - eps && aInside) { + *pAj = sei->b; + continue; + } + + // cut segment + bool bInside = tb > 0.0 - eps && tb < 1.0 + eps; + if(ta < 0.0 - eps && bInside) { + *pBj = sei->a; + continue; + } + + // split segment + if(ta < 0.0 - eps && tb > 1.0 + eps) { + sel->AddEdge(sei->b, *pBj, sej->auxA, sej->auxB); + *pBj = sei->a; + continue; + } + } + + if(canRemoveI) { + // j-segment inside i-segment + if(ta < 0.0 + eps && tb > 1.0 - eps) { + sei->tag = 1; + break; + } + + // cut segment + bool aInside = ta > 0.0 + eps && ta < 1.0 - eps; + if(tb > 1.0 - eps && aInside) { + sei->b = *pAj; + i--; + break; + } + + // cut segment + bool bInside = tb > 0.0 + eps && tb < 1.0 - eps; + if(ta < 0.0 + eps && bInside) { + sei->a = *pBj; + i--; + break; + } + + // split segment + if(ta > 0.0 + eps && tb < 1.0 - eps) { + sel->AddEdge(*pBj, sei->b, sei->auxA, sei->auxB); + sei->b = *pAj; + i--; + break; + } + } + } + } + sel->l.RemoveTagged(); + + // We kept the line segments and Beziers separate until now; but put them + // all together, and also project everything into the xy plane, since not + // all export targets ignore the z component of the points. + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + SBezier sb = SBezier::From(e->a, e->b); + sb.auxA = e->auxA; + sbl->l.Add(&sb); + } + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + for(int i = 0; i <= b->deg; i++) { + b->ctrl[i].z = 0; + } + } + + // If possible, then we will assemble these output curves into loops. They + // will then get exported as closed paths. + SBezierLoopSetSet sblss = {}; + SBezierList leftovers = {}; + SSurface srf = SSurface::FromPlane(Vector::From(0, 0, 0), + Vector::From(1, 0, 0), + Vector::From(0, 1, 0)); + SPolygon spxyz = {}; + bool allClosed; + SEdge notClosedAt; + sbl->l.ClearTags(); + sblss.FindOuterFacesFrom(sbl, &spxyz, &srf, + SS.ExportChordTolMm(), + &allClosed, ¬ClosedAt, + NULL, NULL, + &leftovers); + for(b = leftovers.l.First(); b; b = leftovers.l.NextAfter(b)) { + sblss.AddOpenPath(b); + } + + // Now write the lines and triangles to the output file + out->OutputLinesAndMesh(&sblss, &sms); + + leftovers.Clear(); + spxyz.Clear(); + sblss.Clear(); + smp.Clear(); + sms.Clear(); + hlrd.Clear(); +} + +double VectorFileWriter::MmToPts(double mm) { + // 72 points in an inch + return (mm/25.4)*72; +} + +VectorFileWriter *VectorFileWriter::ForFile(const std::string &filename) { + VectorFileWriter *ret; + bool needOpen = true; + if(FilenameHasExtension(filename, ".dxf")) { + static DxfFileWriter DxfWriter; + ret = &DxfWriter; + needOpen = false; + } else if(FilenameHasExtension(filename, ".ps") || FilenameHasExtension(filename, ".eps")) { + static EpsFileWriter EpsWriter; + ret = &EpsWriter; + } else if(FilenameHasExtension(filename, ".pdf")) { + static PdfFileWriter PdfWriter; + ret = &PdfWriter; + } else if(FilenameHasExtension(filename, ".svg")) { + static SvgFileWriter SvgWriter; + ret = &SvgWriter; + } else if(FilenameHasExtension(filename, ".plt")||FilenameHasExtension(filename, ".hpgl")) { + static HpglFileWriter HpglWriter; + ret = &HpglWriter; + } else if(FilenameHasExtension(filename, ".step")||FilenameHasExtension(filename, ".stp")) { + static Step2dFileWriter Step2dWriter; + ret = &Step2dWriter; + } else if(FilenameHasExtension(filename, ".txt")) { + static GCodeFileWriter GCodeWriter; + ret = &GCodeWriter; + } else { + Error("Can't identify output file type from file extension of " + "filename '%s'; try " + ".step, .stp, .dxf, .svg, .plt, .hpgl, .pdf, .txt, " + ".eps, or .ps.", + filename.c_str()); + return NULL; + } + ret->filename = filename; + if(!needOpen) return ret; + + FILE *f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return NULL; + } + ret->f = f; + return ret; +} + +void VectorFileWriter::SetModelviewProjection(const Vector &u, const Vector &v, const Vector &n, + const Vector &origin, double cameraTan, + double scale) { + this->u = u; + this->v = v; + this->n = n; + this->origin = origin; + this->cameraTan = cameraTan; + this->scale = scale; +} + +Vector VectorFileWriter::Transform(Vector &pos) const { + return pos.InPerspective(u, v, n, origin, cameraTan).ScaledBy(1.0 / scale); +} + +void VectorFileWriter::OutputLinesAndMesh(SBezierLoopSetSet *sblss, SMesh *sm) { + STriangle *tr; + SBezier *b; + + // First calculate the bounding box. + ptMin = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); + ptMax = Vector::From(VERY_NEGATIVE, VERY_NEGATIVE, VERY_NEGATIVE); + if(sm) { + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + (tr->a).MakeMaxMin(&ptMax, &ptMin); + (tr->b).MakeMaxMin(&ptMax, &ptMin); + (tr->c).MakeMaxMin(&ptMax, &ptMin); + } + } + if(sblss) { + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + SBezierLoop *sbl; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + for(int i = 0; i <= b->deg; i++) { + (b->ctrl[i]).MakeMaxMin(&ptMax, &ptMin); + } + } + } + } + } + + // And now we compute the canvas size. + double s = 1.0 / SS.exportScale; + if(SS.exportCanvasSizeAuto) { + // It's based on the calculated bounding box; we grow it along each + // boundary by the specified amount. + ptMin.x -= s*SS.exportMargin.left; + ptMax.x += s*SS.exportMargin.right; + ptMin.y -= s*SS.exportMargin.bottom; + ptMax.y += s*SS.exportMargin.top; + } else { + ptMin.x = -(s*SS.exportCanvas.dx); + ptMin.y = -(s*SS.exportCanvas.dy); + ptMax.x = ptMin.x + (s*SS.exportCanvas.width); + ptMax.y = ptMin.y + (s*SS.exportCanvas.height); + } + + StartFile(); + if(sm && SS.exportShadedTriangles) { + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + Triangle(tr); + } + } + if(sblss) { + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + SBezierLoop *sbl; + sbl = sbls->l.First(); + if(!sbl) continue; + b = sbl->l.First(); + if(!b || !Style::Exportable(b->auxA)) continue; + + hStyle hs = { (uint32_t)b->auxA }; + Style *stl = Style::Get(hs); + double lineWidth = Style::WidthMm(b->auxA)*s; + RgbaColor strokeRgb = Style::Color(hs, true); + RgbaColor fillRgb = Style::FillColor(hs, true); + + StartPath(strokeRgb, lineWidth, stl->filled, fillRgb, hs); + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + for(b = sbl->l.First(); b; b = sbl->l.NextAfter(b)) { + Bezier(b); + } + } + FinishPath(strokeRgb, lineWidth, stl->filled, fillRgb, hs); + } + } + FinishAndCloseFile(); +} + +void VectorFileWriter::BezierAsPwl(SBezier *sb) { + List lv = {}; + sb->MakePwlInto(&lv, SS.ExportChordTolMm()); + int i; + for(i = 1; i < lv.n; i++) { + SBezier sb = SBezier::From(lv.elem[i-1], lv.elem[i]); + Bezier(&sb); + } + lv.Clear(); +} + +void VectorFileWriter::BezierAsNonrationalCubic(SBezier *sb, int depth) { + Vector t0 = sb->TangentAt(0), t1 = sb->TangentAt(1); + // The curve is correct, and the first derivatives are correct, at the + // endpoints. + SBezier bnr = SBezier::From( + sb->Start(), + sb->Start().Plus(t0.ScaledBy(1.0/3)), + sb->Finish().Minus(t1.ScaledBy(1.0/3)), + sb->Finish()); + + double tol = SS.ExportChordTolMm(); + // Arbitrary choice, but make it a little finer than pwl tolerance since + // it should be easier to achieve that with the smooth curves. + tol /= 2; + + bool closeEnough = true; + int i; + for(i = 1; i <= 3; i++) { + double t = i/4.0; + Vector p0 = sb->PointAt(t), + pn = bnr.PointAt(t); + double d = (p0.Minus(pn)).Magnitude(); + if(d > tol) { + closeEnough = false; + } + } + + if(closeEnough || depth > 3) { + Bezier(&bnr); + } else { + SBezier bef, aft; + sb->SplitAt(0.5, &bef, &aft); + BezierAsNonrationalCubic(&bef, depth+1); + BezierAsNonrationalCubic(&aft, depth+1); + } +} + +//----------------------------------------------------------------------------- +// Export a triangle mesh, in the requested format. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshTo(const std::string &filename) { + SS.exportMode = true; + GenerateAll(GENERATE_ALL); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + g->GenerateDisplayItems(); + + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + if(m->IsEmpty()) { + Error("Active group mesh is empty; nothing to export."); + return; + } + + FILE *f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return; + } + + if(FilenameHasExtension(filename, ".stl")) { + ExportMeshAsStlTo(f, m); + } else if(FilenameHasExtension(filename, ".obj")) { + ExportMeshAsObjTo(f, m); + } else if(FilenameHasExtension(filename, ".js") || + FilenameHasExtension(filename, ".html")) { + SEdgeList *e = &(SK.GetGroup(SS.GW.activeGroup)->displayEdges); + ExportMeshAsThreeJsTo(f, filename, m, e); + } else { + Error("Can't identify output file type from file extension of " + "filename '%s'; try .stl, .obj, .js.", filename.c_str()); + } + + fclose(f); + + SS.justExportedInfo.showOrigin = false; + SS.justExportedInfo.draw = true; + InvalidateGraphics(); +} + +//----------------------------------------------------------------------------- +// Export the mesh as an STL file; it should always be vertex-to-vertex and +// not self-intersecting, so not much to do. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsStlTo(FILE *f, SMesh *sm) { + char str[80] = {}; + strcpy(str, "STL exported mesh"); + fwrite(str, 1, 80, f); + + uint32_t n = sm->l.n; + fwrite(&n, 4, 1, f); + + double s = SS.exportScale; + int i; + for(i = 0; i < sm->l.n; i++) { + STriangle *tr = &(sm->l.elem[i]); + Vector n = tr->Normal().WithMagnitude(1); + float w; + w = (float)n.x; fwrite(&w, 4, 1, f); + w = (float)n.y; fwrite(&w, 4, 1, f); + w = (float)n.z; fwrite(&w, 4, 1, f); + w = (float)((tr->a.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->a.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->a.z)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->b.z)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.x)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.y)/s); fwrite(&w, 4, 1, f); + w = (float)((tr->c.z)/s); fwrite(&w, 4, 1, f); + fputc(0, f); + fputc(0, f); + } +} + +//----------------------------------------------------------------------------- +// Export the mesh as Wavefront OBJ format. This requires us to reduce all the +// identical vertices to the same identifier, so do that first. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsObjTo(FILE *f, SMesh *sm) { + SPointList spl = {}; + STriangle *tr; + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + spl.IncrementTagFor(tr->a); + spl.IncrementTagFor(tr->b); + spl.IncrementTagFor(tr->c); + } + + // Output all the vertices. + SPoint *sp; + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + fprintf(f, "v %.10f %.10f %.10f\r\n", + sp->p.x / SS.exportScale, + sp->p.y / SS.exportScale, + sp->p.z / SS.exportScale); + } + + // And now all the triangular faces, in terms of those vertices. The + // file format counts from 1, not 0. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, "f %d %d %d\r\n", + spl.IndexForPoint(tr->a) + 1, + spl.IndexForPoint(tr->b) + 1, + spl.IndexForPoint(tr->c) + 1); + } + + spl.Clear(); +} + +//----------------------------------------------------------------------------- +// Export the mesh as a JavaScript script, which is compatible with Three.js. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportMeshAsThreeJsTo(FILE *f, const std::string &filename, + SMesh *sm, SEdgeList *sel) +{ + SPointList spl = {}; + STriangle *tr; + SEdge *e; + Vector bndl, bndh; + const char htmlbegin0[] = R"( + + + + + Three.js Solvespace Mesh + + + + + + + + + +)"; + + // A default three.js viewer with OrthographicTrackballControls is + // generated as a comment preceding the data. + + // x bounds should be the range of x or y, whichever + // is larger, before aspect ratio correction is applied. + // y bounds should be the range of x or y, whichever is + // larger. No aspect ratio correction is applied. + // Near plane should be 1. + // Camera's z-position should be the range of z + 1 or the larger of + // the x or y bounds, whichever is larger. + // Far plane should be at least twice as much as the camera's + // z-position. + // Edge projection bias should be about 1/500 of the far plane's distance. + // Further corrections will be applied to the z-position and far plane in + // the default viewer, but the defaults are fine for a model which + // only rotates about the world origin. + + sm->GetBounding(&bndh, &bndl); + double largerBoundXY = max((bndh.x - bndl.x), (bndh.y - bndl.y)); + double largerBoundZ = max(largerBoundXY, (bndh.z - bndl.z + 1)); + + std::string extension = filename, + noExtFilename = filename; + size_t dot = noExtFilename.rfind('.'); + extension.erase(0, dot + 1); + noExtFilename.erase(dot); + + std::string baseFilename = noExtFilename; + size_t lastSlash = baseFilename.rfind(PATH_SEP); + if(lastSlash == std::string::npos) oops(); + baseFilename.erase(0, lastSlash + 1); + + for(size_t i = 0; i < baseFilename.length(); i++) { + if(!isalpha(baseFilename[i]) && + /* also permit UTF-8 */ !((unsigned char)baseFilename[i] >= 0x80)) + baseFilename[i] = '_'; + } + + if(extension == "html") { + fputs(htmlbegin0, f); + fputs(htmlbegin1, f); + } + + fprintf(f, "var solvespace_model_%s = {\n" + " bounds: {\n" + " x: %f, y: %f, near: %f, far: %f, z: %f, edgeBias: %f\n" + " },\n", + baseFilename.c_str(), + largerBoundXY, + largerBoundXY, + 1.0, + largerBoundZ * 2, + largerBoundZ, + largerBoundZ / 250); + + // Output lighting information. + fputs(" lights: {\n" + " d: [\n", f); + + // Directional. + int lightCount; + for(lightCount = 0; lightCount < 2; lightCount++) + { + fprintf(f, " {\n" + " intensity: %f, direction: [%f, %f, %f]\n" + " },\n", + SS.lightIntensity[lightCount], + CO(SS.lightDir[lightCount])); + } + + // Global Ambience. + fprintf(f, " ],\n" + " a: %f\n", SS.ambientIntensity); + + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + spl.IncrementTagFor(tr->a); + spl.IncrementTagFor(tr->b); + spl.IncrementTagFor(tr->c); + } + + // Output all the vertices. + SPoint *sp; + fputs(" },\n" + " points: [\n", f); + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + fprintf(f, " [%f, %f, %f],\n", + sp->p.x / SS.exportScale, + sp->p.y / SS.exportScale, + sp->p.z / SS.exportScale); + } + + fputs(" ],\n" + " faces: [\n", f); + // And now all the triangular faces, in terms of those vertices. + // This time we count from zero. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " [%d, %d, %d],\n", + spl.IndexForPoint(tr->a), + spl.IndexForPoint(tr->b), + spl.IndexForPoint(tr->c)); + } + + // Output face normals. + fputs(" ],\n" + " normals: [\n", f); + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " [[%f, %f, %f], [%f, %f, %f], [%f, %f, %f]],\n", + CO(tr->an), CO(tr->bn), CO(tr->cn)); + } + + fputs(" ],\n" + " colors: [\n", f); + // Output triangle colors. + for(tr = sm->l.First(); tr; tr = sm->l.NextAfter(tr)) { + fprintf(f, " 0x%x,\n", tr->meta.color.ToARGB32()); + } + + fputs(" ],\n" + " edges: [\n", f); + // Output edges. Assume user's model colors do not obscure white edges. + for(e = sel->l.First(); e; e = sel->l.NextAfter(e)) { + fprintf(f, " [[%f, %f, %f], [%f, %f, %f]],\n", + e->a.x / SS.exportScale, + e->a.y / SS.exportScale, + e->a.z / SS.exportScale, + e->b.x / SS.exportScale, + e->b.y / SS.exportScale, + e->b.z / SS.exportScale); + } + + fputs(" ]\n};\n", f); + + if(extension == "html") + fprintf(f, htmlend, baseFilename.c_str()); + + spl.Clear(); +} + +//----------------------------------------------------------------------------- +// Export a view of the model as an image; we just take a screenshot, by +// rendering the view in the usual way and then copying the pixels. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ExportAsPngTo(const std::string &filename) { + int w = (int)SS.GW.width, h = (int)SS.GW.height; + // No guarantee that the back buffer contains anything valid right now, + // so repaint the scene. And hide the toolbar too. + bool prevShowToolbar = SS.showToolbar; + SS.showToolbar = false; +#ifndef WIN32 + std::unique_ptr gloffscreen(new GLOffscreen); + gloffscreen->begin(w, h); +#endif + SS.GW.Paint(); + SS.showToolbar = prevShowToolbar; + + FILE *f = ssfopen(filename, "wb"); + if(!f) goto err; + + png_struct *png_ptr; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if(!png_ptr) goto err; + + png_info *info_ptr; info_ptr = png_create_info_struct(png_ptr); + if(!png_ptr) goto err; + + if(setjmp(png_jmpbuf(png_ptr))) goto err; + + png_init_io(png_ptr, f); + + // glReadPixels wants to align things on 4-boundaries, and there's 3 + // bytes per pixel. As long as the row width is divisible by 4, all + // works out. + w &= ~3; h &= ~3; + + png_set_IHDR(png_ptr, info_ptr, w, h, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT); + + png_write_info(png_ptr, info_ptr); + + // Get the pixel data from the framebuffer + uint8_t *pixels; pixels = (uint8_t *)AllocTemporary(3*w*h); + uint8_t **rowptrs; rowptrs = (uint8_t **)AllocTemporary(h*sizeof(uint8_t *)); + glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixels); + + int y; + for(y = 0; y < h; y++) { + // gl puts the origin at lower left, but png puts it top left + rowptrs[y] = pixels + ((h - 1) - y)*(3*w); + } + png_write_image(png_ptr, rowptrs); + + png_write_end(png_ptr, info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(f); + return; + +err: + Error("Error writing PNG file '%s'", filename.c_str()); + if(f) fclose(f); + return; +} + diff --git a/src/exportstep.cpp b/src/exportstep.cpp new file mode 100644 index 0000000..8e3936c --- /dev/null +++ b/src/exportstep.cpp @@ -0,0 +1,373 @@ +//----------------------------------------------------------------------------- +// Export a STEP file describing our ratpoly shell. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void StepFileWriter::WriteHeader(void) { + fprintf(f, +"ISO-10303-21;\n" +"HEADER;\n" +"\n" +"FILE_DESCRIPTION((''), '2;1');\n" +"\n" +"FILE_NAME(\n" +" 'output_file',\n" +" '2009-06-07T17:44:47-07:00',\n" +" (''),\n" +" (''),\n" +" 'SolveSpace',\n" +" '',\n" +" ''\n" +");\n" +"\n" +"FILE_SCHEMA (('CONFIG_CONTROL_DESIGN'));\n" +"ENDSEC;\n" +"\n" +"DATA;\n" +"\n" +"/**********************************************************\n" +" * This defines the units and tolerances for the file. It\n" +" * is always the same, independent of the actual data.\n" +" **********************************************************/\n" +"#158=(\n" +"LENGTH_UNIT()\n" +"NAMED_UNIT(*)\n" +"SI_UNIT(.MILLI.,.METRE.)\n" +");\n" +"#161=(\n" +"NAMED_UNIT(*)\n" +"PLANE_ANGLE_UNIT()\n" +"SI_UNIT($,.RADIAN.)\n" +");\n" +"#166=(\n" +"NAMED_UNIT(*)\n" +"SI_UNIT($,.STERADIAN.)\n" +"SOLID_ANGLE_UNIT()\n" +");\n" +"#167=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.001),#158,\n" +"'DISTANCE_ACCURACY_VALUE',\n" +"'string');\n" +"#168=(\n" +"GEOMETRIC_REPRESENTATION_CONTEXT(3)\n" +"GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#167))\n" +"GLOBAL_UNIT_ASSIGNED_CONTEXT((#166,#161,#158))\n" +"REPRESENTATION_CONTEXT('ID1','3D')\n" +");\n" +"#169=SHAPE_REPRESENTATION('',(#170),#168);\n" +"#170=AXIS2_PLACEMENT_3D('',#173,#171,#172);\n" +"#171=DIRECTION('',(0.,0.,1.));\n" +"#172=DIRECTION('',(1.,0.,0.));\n" +"#173=CARTESIAN_POINT('',(0.,0.,0.));\n" +"\n" + ); + + // Start the ID somewhere beyond the header IDs. + id = 200; +} +void StepFileWriter::WriteProductHeader(void) { + fprintf(f, + "#175 = SHAPE_DEFINITION_REPRESENTATION(#176, #169);\n" + "#176 = PRODUCT_DEFINITION_SHAPE('Version', 'Test Part', #177);\n" + "#177 = PRODUCT_DEFINITION('Version', 'Test Part', #182, #178);\n" + "#178 = DESIGN_CONTEXT('3D Mechanical Parts', #181, 'design');\n" + "#179 = PRODUCT('1', 'Product', 'Test Part', (#180));\n" + "#180 = MECHANICAL_CONTEXT('3D Mechanical Parts', #181, 'mechanical');\n" + "#181 = APPLICATION_CONTEXT(\n" + "'configuration controlled 3d designs of mechanical parts and assemblies');\n" + "#182 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('Version',\n" + "'Test Part', #179, .MADE.);\n" + "\n" + ); +} +int StepFileWriter::ExportCurve(SBezier *sb) { + int i, ret = id; + + fprintf(f, "#%d=(\n", ret); + fprintf(f, "BOUNDED_CURVE()\n"); + fprintf(f, "B_SPLINE_CURVE(%d,(", sb->deg); + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "#%d", ret + i + 1); + if(i != sb->deg) fprintf(f, ","); + } + fprintf(f, "),.UNSPECIFIED.,.F.,.F.)\n"); + fprintf(f, "B_SPLINE_CURVE_WITH_KNOTS((%d,%d),", + (sb->deg + 1), (sb-> deg + 1)); + fprintf(f, "(0.000,1.000),.UNSPECIFIED.)\n"); + fprintf(f, "CURVE()\n"); + fprintf(f, "GEOMETRIC_REPRESENTATION_ITEM()\n"); + fprintf(f, "RATIONAL_B_SPLINE_CURVE(("); + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "%.10f", sb->weight[i]); + if(i != sb->deg) fprintf(f, ","); + } + fprintf(f, "))\n"); + fprintf(f, "REPRESENTATION_ITEM('')\n);\n"); + + for(i = 0; i <= sb->deg; i++) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id + 1 + i, + CO(sb->ctrl[i])); + } + fprintf(f, "\n"); + + id = ret + 1 + (sb->deg + 1); + return ret; +} + +int StepFileWriter::ExportCurveLoop(SBezierLoop *loop, bool inner) { + if(loop->l.n < 1) oops(); + + List listOfTrims = {}; + + SBezier *sb = &(loop->l.elem[loop->l.n - 1]); + + // Generate "exactly closed" contours, with the same vertex id for the + // finish of a previous edge and the start of the next one. So we need + // the finish of the last Bezier in the loop before we start our process. + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id, CO(sb->Finish())); + fprintf(f, "#%d=VERTEX_POINT('',#%d);\n", id+1, id); + int lastFinish = id + 1, prevFinish = lastFinish; + id += 2; + + for(sb = loop->l.First(); sb; sb = loop->l.NextAfter(sb)) { + int curveId = ExportCurve(sb); + + int thisFinish; + if(loop->l.NextAfter(sb) != NULL) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + id, CO(sb->Finish())); + fprintf(f, "#%d=VERTEX_POINT('',#%d);\n", id+1, id); + thisFinish = id + 1; + id += 2; + } else { + thisFinish = lastFinish; + } + + fprintf(f, "#%d=EDGE_CURVE('',#%d,#%d,#%d,%s);\n", + id, prevFinish, thisFinish, curveId, ".T."); + fprintf(f, "#%d=ORIENTED_EDGE('',*,*,#%d,.T.);\n", + id+1, id); + + int oe = id+1; + listOfTrims.Add(&oe); + id += 2; + + prevFinish = thisFinish; + } + + fprintf(f, "#%d=EDGE_LOOP('',(", id); + int *oe; + for(oe = listOfTrims.First(); oe; oe = listOfTrims.NextAfter(oe)) { + fprintf(f, "#%d", *oe); + if(listOfTrims.NextAfter(oe) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + + int fb = id + 1; + fprintf(f, "#%d=%s('',#%d,.T.);\n", + fb, inner ? "FACE_BOUND" : "FACE_OUTER_BOUND", id); + + id += 2; + listOfTrims.Clear(); + + return fb; +} + +void StepFileWriter::ExportSurface(SSurface *ss, SBezierList *sbl) { + int i, j, srfid = id; + + // First, we create the untrimmed surface. We always specify a rational + // B-spline surface (in fact, just a Bezier surface). + fprintf(f, "#%d=(\n", srfid); + fprintf(f, "BOUNDED_SURFACE()\n"); + fprintf(f, "B_SPLINE_SURFACE(%d,%d,(", ss->degm, ss->degn); + for(i = 0; i <= ss->degm; i++) { + fprintf(f, "("); + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "#%d", srfid + 1 + j + i*(ss->degn + 1)); + if(j != ss->degn) fprintf(f, ","); + } + fprintf(f, ")"); + if(i != ss->degm) fprintf(f, ","); + } + fprintf(f, "),.UNSPECIFIED.,.F.,.F.,.F.)\n"); + fprintf(f, "B_SPLINE_SURFACE_WITH_KNOTS((%d,%d),(%d,%d),", + (ss->degm + 1), (ss->degm + 1), + (ss->degn + 1), (ss->degn + 1)); + fprintf(f, "(0.000,1.000),(0.000,1.000),.UNSPECIFIED.)\n"); + fprintf(f, "GEOMETRIC_REPRESENTATION_ITEM()\n"); + fprintf(f, "RATIONAL_B_SPLINE_SURFACE(("); + for(i = 0; i <= ss->degm; i++) { + fprintf(f, "("); + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "%.10f", ss->weight[i][j]); + if(j != ss->degn) fprintf(f, ","); + } + fprintf(f, ")"); + if(i != ss->degm) fprintf(f, ","); + } + fprintf(f, "))\n"); + fprintf(f, "REPRESENTATION_ITEM('')\n"); + fprintf(f, "SURFACE()\n"); + fprintf(f, ");\n"); + + // The control points for the untrimmed surface. + for(i = 0; i <= ss->degm; i++) { + for(j = 0; j <= ss->degn; j++) { + fprintf(f, "#%d=CARTESIAN_POINT('',(%.10f,%.10f,%.10f));\n", + srfid + 1 + j + i*(ss->degn + 1), + CO(ss->ctrl[i][j])); + } + } + fprintf(f, "\n"); + + id = srfid + 1 + (ss->degm + 1)*(ss->degn + 1); + + // Now we do the trim curves. We must group each outer loop separately + // along with its inner faces, so do that now. + SBezierLoopSetSet sblss = {}; + SPolygon spxyz = {}; + bool allClosed; + SEdge notClosedAt; + // We specify a surface, so it doesn't check for coplanarity; and we + // don't want it to give us any open contours. The polygon and chord + // tolerance are required, because they are used to calculate the + // contour directions and determine inner vs. outer contours. + sblss.FindOuterFacesFrom(sbl, &spxyz, ss, + SS.ExportChordTolMm(), + &allClosed, ¬ClosedAt, + NULL, NULL, + NULL); + + // So in our list of SBezierLoopSet, each set contains at least one loop + // (the outer boundary), plus any inner loops associated with that outer + // loop. + SBezierLoopSet *sbls; + for(sbls = sblss.l.First(); sbls; sbls = sblss.l.NextAfter(sbls)) { + SBezierLoop *loop = sbls->l.First(); + + List listOfLoops = {}; + // Create the face outer boundary from the outer loop. + int fob = ExportCurveLoop(loop, false); + listOfLoops.Add(&fob); + + // And create the face inner boundaries from any inner loops that + // lie within this contour. + loop = sbls->l.NextAfter(loop); + for(; loop; loop = sbls->l.NextAfter(loop)) { + int fib = ExportCurveLoop(loop, true); + listOfLoops.Add(&fib); + } + + // And now create the face that corresponds to this outer loop + // and all of its holes. + int advFaceId = id; + fprintf(f, "#%d=ADVANCED_FACE('',(", advFaceId); + int *fb; + for(fb = listOfLoops.First(); fb; fb = listOfLoops.NextAfter(fb)) { + fprintf(f, "#%d", *fb); + if(listOfLoops.NextAfter(fb) != NULL) fprintf(f, ","); + } + + fprintf(f, "),#%d,.T.);\n", srfid); + fprintf(f, "\n"); + advancedFaces.Add(&advFaceId); + + id++; + listOfLoops.Clear(); + } + sblss.Clear(); + spxyz.Clear(); +} + +void StepFileWriter::WriteFooter(void) { + fprintf(f, +"\n" +"ENDSEC;\n" +"\n" +"END-ISO-10303-21;\n" + ); +} + +void StepFileWriter::ExportSurfacesTo(const std::string &filename) { + Group *g = SK.GetGroup(SS.GW.activeGroup); + SShell *shell = &(g->runningShell); + + if(shell->surface.n == 0) { + Error("The model does not contain any surfaces to export.%s", + g->runningMesh.l.n > 0 ? + "\n\nThe model does contain triangles from a mesh, but " + "a triangle mesh cannot be exported as a STEP file. Try " + "File -> Export Mesh... instead." : ""); + return; + } + + f = ssfopen(filename, "wb"); + if(!f) { + Error("Couldn't write to '%s'", filename.c_str()); + return; + } + + WriteHeader(); + WriteProductHeader(); + + advancedFaces = {}; + + SSurface *ss; + for(ss = shell->surface.First(); ss; ss = shell->surface.NextAfter(ss)) { + if(ss->trim.n == 0) continue; + + // Get all of the loops of Beziers that trim our surface (with each + // Bezier split so that we use the section as t goes from 0 to 1), and + // the piecewise linearization of those loops in xyz space. + SBezierList sbl = {}; + ss->MakeSectionEdgesInto(shell, NULL, &sbl); + + // Apply the export scale factor. + ss->ScaleSelfBy(1.0/SS.exportScale); + sbl.ScaleSelfBy(1.0/SS.exportScale); + + ExportSurface(ss, &sbl); + + sbl.Clear(); + } + + fprintf(f, "#%d=CLOSED_SHELL('',(", id); + int *af; + for(af = advancedFaces.First(); af; af = advancedFaces.NextAfter(af)) { + fprintf(f, "#%d", *af); + if(advancedFaces.NextAfter(af) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + fprintf(f, "#%d=MANIFOLD_SOLID_BREP('brep',#%d);\n", id+1, id); + fprintf(f, "#%d=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#%d,#170),#168);\n", + id+2, id+1); + fprintf(f, "#%d=SHAPE_REPRESENTATION_RELATIONSHIP($,$,#169,#%d);\n", + id+3, id+2); + + WriteFooter(); + + fclose(f); + advancedFaces.Clear(); +} + +void StepFileWriter::WriteWireframe(void) { + fprintf(f, "#%d=GEOMETRIC_CURVE_SET('curves',(", id); + int *c; + for(c = curves.First(); c; c = curves.NextAfter(c)) { + fprintf(f, "#%d", *c); + if(curves.NextAfter(c) != NULL) fprintf(f, ","); + } + fprintf(f, "));\n"); + fprintf(f, "#%d=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION" + "('',(#%d,#170),#168);\n", id+1, id); + fprintf(f, "#%d=SHAPE_REPRESENTATION_RELATIONSHIP($,$,#169,#%d);\n", + id+2, id+1); + + id += 3; + curves.Clear(); +} + diff --git a/src/exportvector.cpp b/src/exportvector.cpp new file mode 100644 index 0000000..ca625ec --- /dev/null +++ b/src/exportvector.cpp @@ -0,0 +1,1369 @@ +//----------------------------------------------------------------------------- +// The file format-specific stuff for all of the 2d vector output formats. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include "solvespace.h" + +VectorFileWriter::~VectorFileWriter() { + // This out-of-line virtual method definition quells the following warning + // from Clang++: "'VectorFileWriter' has no out-of-line virtual method + // definitions; its vtable will be emitted in every translation unit + // [-Wweak-vtables]" +} + +class PolylineBuilder { +public: + struct Edge; + + struct Vertex { + Vector pos; + std::vector edges; + + bool getNext(hStyle hs, Vertex **next) { + auto it = std::find_if(edges.begin(), edges.end(), [&](const Edge *e) { + return e->tag == 0 && e->style.v == hs.v; + }); + if(it != edges.end()) { + (*it)->tag = 1; + *next = (*it)->getOtherVertex(this); + return true; + } else { + return false; + } + } + + size_t countEdgesWithTagAndStyle(int tag, hStyle hs) const { + return std::count_if(edges.begin(), edges.end(), [&](const Edge *e) { + return e->tag == tag && e->style.v == hs.v; + }); + } + }; + + struct Edge { + Vertex *a; + Vertex *b; + hStyle style; + int tag; + + Vertex *getOtherVertex(Vertex *v) { + if(a == v) return b; + if(b == v) return a; + return NULL; + } + + bool getStartAndNext(Vertex **start, Vertex **next, bool loop) { + size_t numA = a->countEdgesWithTagAndStyle(0, style); + size_t numB = b->countEdgesWithTagAndStyle(0, style); + + if((numA == 1 && numB > 1) || (loop && numA > 1 && numB > 1)) { + *start = a; + *next = b; + return true; + } + + if(numA > 1 && numB == 1) { + *start = b; + *next = a; + return true; + } + + return false; + } + }; + + struct VectorHash { + size_t operator()(const Vector &v) const { + static const size_t size = std::numeric_limits::max() / 2 - 1; + static const double eps = (4.0 * LENGTH_EPS); + + double x = fabs(v.x) / eps; + double y = fabs(v.y) / eps; + + size_t xs = size_t(fmod(x, double(size))); + size_t ys = size_t(fmod(y, double(size))); + + return ys * size + xs; + } + }; + + struct VectorPred { + bool operator()(Vector a, Vector b) const { + return a.Equals(b, LENGTH_EPS); + } + }; + + std::unordered_map vertices; + std::vector edges; + + ~PolylineBuilder() { + clear(); + } + + void clear() { + for(Edge *e : edges) { + delete e; + } + edges.clear(); + + for(auto &v : vertices) { + delete v.second; + } + vertices.clear(); + } + + Vertex *addVertex(const Vector &pos) { + auto it = vertices.find(pos); + if(it != vertices.end()) { + return it->second; + } + + Vertex *result = new Vertex; + result->pos = pos; + vertices.emplace(pos, result); + + return result; + } + + Edge *addEdge(const Vector &p0, const Vector &p1, int style) { + Vertex *v0 = addVertex(p0); + Vertex *v1 = addVertex(p1); + if(v0 == v1) return NULL; + + Edge *edge = new Edge { v0, v1, hStyle { (uint32_t)style }, 0 }; + edges.push_back(edge); + + v0->edges.push_back(edge); + v1->edges.push_back(edge); + + return edge; + } +}; + +//----------------------------------------------------------------------------- +// Routines for DXF export +//----------------------------------------------------------------------------- +class DxfWriteInterface : public DRW_Interface { + DxfFileWriter *writer; + dxfRW *dxf; + + static DRW_Coord toCoord(const Vector &v) { + return DRW_Coord(v.x, v.y, v.z); + } + + Vector xfrm(Vector v) { + return writer->Transform(v); + } + +public: + DxfWriteInterface(DxfFileWriter *w, dxfRW *dxfrw) : + writer(w), dxf(dxfrw) {} + + virtual void writeTextstyles() { + DRW_Textstyle ts; + ts.name = "unicode"; + ts.font = "unicode"; + dxf->writeTextstyle(&ts); + } + + virtual void writeLayers() { + DRW_Layer layer; + + layer.name = "dimensions"; + dxf->writeLayer(&layer); + layer.name = "text"; + dxf->writeLayer(&layer); + + std::set usedStyles; + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + usedStyles.insert((uint32_t)sb->auxA); + } + } + + for(uint32_t v : usedStyles) { + Style *s = Style::Get(hStyle{v}); + layer.name = s->DescriptionString(); + dxf->writeLayer(&layer); + } + } + + virtual void writeLTypes() { + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + DRW_LType type; + // LibreCAD requires the line type to have one of these exact names, + // or otherwise it overwrites it with its own (continuous) style. + type.name = DxfFileWriter::lineTypeName(i); + double sw = 1.0; + switch(i) { + case Style::STIPPLE_CONTINUOUS: + break; + + case Style::STIPPLE_DASH: + type.path.push_back(sw); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_LONG_DASH: + type.path.push_back(sw * 2.0); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_DASH_DOT: + type.path.push_back(sw); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + break; + + case Style::STIPPLE_DOT: + type.path.push_back(sw); + type.path.push_back(0.0); + break; + + case Style::STIPPLE_DASH_DOT_DOT: + type.path.push_back(sw); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + type.path.push_back(0.0); + type.path.push_back(-sw); + break; + } + dxf->writeLineType(&type); + } + } + + void writePolylines() { + PolylineBuilder builder; + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + if(sb->deg != 1) continue; + builder.addEdge(sb->ctrl[0], sb->ctrl[1], sb->auxA); + } + } + + bool found; + bool loop = false; + do { + found = false; + for(PolylineBuilder::Edge *e : builder.edges) { + if(e->tag != 0) continue; + + PolylineBuilder::Vertex *start; + PolylineBuilder::Vertex *next; + if(!e->getStartAndNext(&start, &next, loop)) continue; + found = true; + e->tag = 1; + + DRW_Polyline polyline; + assignEntityDefaults(&polyline, e->style); + polyline.vertlist.push_back( + new DRW_Vertex(start->pos.x, start->pos.y, start->pos.z, 0.0)); + polyline.vertlist.push_back( + new DRW_Vertex(next->pos.x, next->pos.y, next->pos.z, 0.0)); + while(next->getNext(e->style, &next)) { + polyline.vertlist.push_back( + new DRW_Vertex(next->pos.x, next->pos.y, next->pos.z, 0.0)); + } + dxf->writePolyline(&polyline); + } + + if(!found && !loop) { + loop = true; + found = true; + } + } while(found); + + for(PolylineBuilder::Edge *e : builder.edges) { + if(e->tag != 0) continue; + writeLine(e->a->pos, e->b->pos, e->style); + } + } + + virtual void writeEntities() { + writePolylines(); + + for(DxfFileWriter::BezierPath &path : writer->paths) { + for(SBezier *sb : path.beziers) { + if(sb->deg == 1) continue; + writeBezier(sb); + } + } + + if(writer->constraint) { + Constraint *c; + for(c = writer->constraint->First(); c; c = writer->constraint->NextAfter(c)) { + if(!writer->NeedToOutput(c)) continue; + switch(c->type) { + case Constraint::PT_PT_DISTANCE: { + Vector ap = SK.GetEntity(c->ptA)->PointGetNum(); + Vector bp = SK.GetEntity(c->ptB)->PointGetNum(); + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(c->disp.offset); + writeAlignedDimension(xfrm(ap), xfrm(bp), xfrm(ref), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + break; + } + + case Constraint::PT_LINE_DISTANCE: { + Vector pt = SK.GetEntity(c->ptA)->PointGetNum(); + Entity *line = SK.GetEntity(c->entityA); + Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); + Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); + Vector dl = lB.Minus(lA); + + Vector closest = pt.ClosestPointOnLine(lA, dl); + + if(pt.Equals(closest)) break; + + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(c->disp.offset); + Vector refClosest = ref.ClosestPointOnLine(lA, dl); + + double ddl = dl.Dot(dl); + if(fabs(ddl) > LENGTH_EPS * LENGTH_EPS) { + double t = refClosest.Minus(lA).Dot(dl) / ddl; + if(t < 0.0) { + refClosest = lA; + } else if(t > 1.0) { + refClosest = lB; + } + } + + Vector xdl = xfrm(lB).Minus(xfrm(lA)); + writeLinearDimension(xfrm(pt), xfrm(refClosest), xfrm(ref), + xfrm(ref), c->Label(), + atan2(xdl.y, xdl.x) / PI * 180.0 + 90.0, 0.0, + c->GetStyle(), c->valA); + break; + } + + case Constraint::DIAMETER: { + Entity *circle = SK.GetEntity(c->entityA); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(1); + double r = circle->CircleGetRadiusNum(); + + Vector ref = center.Plus(c->disp.offset); + // Force the label into the same plane as the circle. + ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); + + Vector rad = ref.Minus(center).WithMagnitude(r); + if(/*isRadius*/c->other) { + writeRadialDimension( + xfrm(center), xfrm(center.Plus(rad)), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + } else { + writeDiametricDimension( + xfrm(center.Minus(rad)), xfrm(center.Plus(rad)), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + } + break; + } + + case Constraint::ANGLE: { + Entity *a = SK.GetEntity(c->entityA); + Entity *b = SK.GetEntity(c->entityB); + + Vector a0 = a->VectorGetStartPoint(); + Vector b0 = b->VectorGetStartPoint(); + Vector da = a->VectorGetNum(); + Vector db = b->VectorGetNum(); + if(/*otherAngle*/c->other) { + a0 = a0.Plus(da); + da = da.ScaledBy(-1); + } + + bool skew = false; + Vector ref = c->disp.offset; + Vector pi = Vector::AtIntersectionOfLines(a0, a0.Plus(da), b0, b0.Plus(db), + &skew); + if(!skew) ref = pi.Plus(c->disp.offset); + + Vector norm = da.Cross(db); + Vector dna = norm.Cross(da).WithMagnitude(1.0); + + double thetaf = acos(da.DirectionCosineWith(db)); + + // Calculate median + Vector m = da.WithMagnitude(1.0).ScaledBy(cos(thetaf/2)).Plus( + dna.ScaledBy(sin(thetaf/2))); + Vector rm = ref.Minus(pi); + + // Test which side we have to place an arc + if(m.Dot(rm) < 0) { + da = da.ScaledBy(-1); dna = dna.ScaledBy(-1); + db = db.ScaledBy(-1); + } + + Vector bisect = da.WithMagnitude(1.0).ScaledBy(cos(thetaf / 2.0)).Plus( + dna.ScaledBy(sin(thetaf / 2.0))); + + ref = pi.Plus(bisect.WithMagnitude(c->disp.offset.Magnitude())); + + // Get lines agian to write exact line. + a0 = a->VectorGetStartPoint(); + b0 = b->VectorGetStartPoint(); + da = a->VectorGetNum(); + db = b->VectorGetNum(); + + writeAngularDimension( + xfrm(a0), xfrm(a0.Plus(da)), xfrm(b0), xfrm(b0.Plus(db)), xfrm(ref), + xfrm(ref), c->Label(), c->GetStyle(), c->valA); + break; + } + + case Constraint::COMMENT: { + Style *st = SK.style.FindById(c->GetStyle()); + writeText(xfrm(c->disp.offset), c->Label(), + Style::TextHeight(c->GetStyle()) / SS.GW.scale, + st->textAngle, st->textOrigin, c->GetStyle()); + break; + } + } + } + } + } + + int findDxfColor(const RgbaColor &src) { + int best = 0; + double minDist = VERY_POSITIVE; + Vector srcv = Vector::From(src.redF(), src.greenF(), src.blueF()); + for(int i = 1; i < 256; i++) { + RgbaColor dst = RGBi(DRW::dxfColors[i][0], DRW::dxfColors[i][1], DRW::dxfColors[i][2]); + Vector dstv = Vector::From(dst.redF(), dst.greenF(), dst.blueF()); + double dist = srcv.Minus(dstv).Magnitude(); + if(dist < minDist || best == 0) { + best = i; + minDist = dist; + } + } + return best; + } + + void assignEntityDefaults(DRW_Entity *entity, hStyle hs) { + Style *s = Style::Get(hs); + RgbaColor color = s->Color(hs, true); + entity->color24 = color.ToPackedIntBGRA(); + entity->color = findDxfColor(color); + entity->layer = s->DescriptionString(); + entity->lineType = DxfFileWriter::lineTypeName(s->stippleType); + entity->ltypeScale = Style::StippleScaleMm(s->h); + entity->setWidthMm(Style::WidthMm(hs.v)); + } + + void assignDimensionDefaults(DRW_Dimension *dimension, hStyle hs) { + assignEntityDefaults(dimension, hs); + dimension->layer = "dimensions"; + } + + void writeLine(const Vector &p0, const Vector &p1, hStyle hs) { + DRW_Line line; + assignEntityDefaults(&line, hs); + line.basePoint = toCoord(p0); + line.secPoint = toCoord(p1); + dxf->writeLine(&line); + } + + void writeArc(const Vector &c, double r, double sa, double ea, hStyle hs) { + DRW_Arc arc; + assignEntityDefaults(&arc, hs); + arc.radious = r; + arc.basePoint = toCoord(c); + arc.staangle = sa; + arc.endangle = ea; + dxf->writeArc(&arc); + } + + void writeBezierAsPwl(SBezier *sb) { + List lv = {}; + sb->MakePwlInto(&lv, SS.ExportChordTolMm()); + hStyle hs = { (uint32_t)sb->auxA }; + DRW_Polyline polyline; + assignEntityDefaults(&polyline, hs); + for(int i = 0; i < lv.n; i++) { + Vector *v = &lv.elem[i]; + DRW_Vertex *vertex = new DRW_Vertex(v->x, v->y, v->z, 0.0); + polyline.vertlist.push_back(vertex); + } + dxf->writePolyline(&polyline); + lv.Clear(); + } + + void makeKnotsFor(DRW_Spline *spline) { + // QCad/LibreCAD require this for some reason. + if(spline->degree == 3) { + spline->nknots = 8; + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + } else if(spline->degree == 2) { + spline->nknots = 6; + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(0.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + spline->knotslist.push_back(1.0); + } else { + oops(); + } + } + + void writeSpline(SBezier *sb) { + bool isRational = sb->IsRational(); + hStyle hs = { (uint32_t)sb->auxA }; + DRW_Spline spline; + assignEntityDefaults(&spline, hs); + spline.flags = (isRational) ? 0x04 : 0x08; + spline.degree = sb->deg; + spline.ncontrol = sb->deg + 1; + makeKnotsFor(&spline); + for(int i = 0; i <= sb->deg; i++) { + spline.controllist.push_back( + new DRW_Coord(sb->ctrl[i].x, sb->ctrl[i].y, sb->ctrl[i].z)); + if(isRational) spline.weightlist.push_back(sb->weight[i]); + } + dxf->writeSpline(&spline); + } + + void writeBezier(SBezier *sb) { + hStyle hs = { (uint32_t)sb->auxA }; + Vector c; + Vector n = Vector::From(0.0, 0.0, 1.0); + double r; + + if(sb->deg == 1) { + // Line + writeLine(sb->ctrl[0], sb->ctrl[1], hs); + } else if(sb->IsInPlane(n, 0) && sb->IsCircle(n, &c, &r)) { + // Circle perpendicular to camera + double theta0 = atan2(sb->ctrl[0].y - c.y, sb->ctrl[0].x - c.x); + double theta1 = atan2(sb->ctrl[2].y - c.y, sb->ctrl[2].x - c.x); + double dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2.0 * PI); + if(dtheta < 0.0) swap(theta0, theta1); + + writeArc(c, r, theta0, theta1, hs); + } else if(sb->IsRational()) { + // Rational bezier + // We'd like to export rational beziers exactly, but the resulting DXF + // files can only be read by AutoCAD; LibreCAD/QCad simply do not + // implement the feature. So, export as piecewise linear for compatiblity. + writeBezierAsPwl(sb); + } else { + // Any other curve + writeSpline(sb); + } + } + + void writeAlignedDimension(Vector def1, Vector def2, Vector dimp, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimAligned dim; + assignDimensionDefaults(&dim, hs); + dim.setDef1Point(toCoord(def1)); + dim.setDef2Point(toCoord(def2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeLinearDimension(Vector def1, Vector def2, Vector dimp, + Vector textp, const std::string &text, + double angle, double oblique, hStyle hs, double actual) { + DRW_DimLinear dim; + assignDimensionDefaults(&dim, hs); + dim.setDef1Point(toCoord(def1)); + dim.setDef2Point(toCoord(def2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setAngle(angle); + dim.setOblique(oblique); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeRadialDimension(Vector center, Vector radius, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimRadial dim; + assignDimensionDefaults(&dim, hs); + dim.setCenterPoint(toCoord(center)); + dim.setDiameterPoint(toCoord(radius)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeDiametricDimension(Vector def1, Vector def2, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimDiametric dim; + assignDimensionDefaults(&dim, hs); + dim.setDiameter1Point(toCoord(def1)); + dim.setDiameter2Point(toCoord(def2)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual); + dxf->writeDimension(&dim); + } + + void writeAngularDimension(Vector fl1, Vector fl2, Vector sl1, Vector sl2, Vector dimp, + Vector textp, const std::string &text, hStyle hs, double actual) { + DRW_DimAngular dim; + assignDimensionDefaults(&dim, hs); + dim.setFirstLine1(toCoord(fl1)); + dim.setFirstLine2(toCoord(fl2)); + dim.setSecondLine1(toCoord(sl1)); + dim.setSecondLine2(toCoord(sl2)); + dim.setDimPoint(toCoord(dimp)); + dim.setTextPoint(toCoord(textp)); + dim.setText(text); + dim.setActualMeasurement(actual * PI / 180.0); + dxf->writeDimension(&dim); + } + + void writeText(Vector textp, const std::string &text, + double height, double angle, int origin, hStyle hs) { + DRW_Text txt; + assignEntityDefaults(&txt, hs); + txt.layer = "text"; + txt.style = "unicode"; + txt.basePoint = toCoord(textp); + txt.secPoint = txt.basePoint; + txt.text = text; + txt.height = height; + txt.angle = angle; + txt.alignH = DRW_Text::HCenter; + if(origin & Style::ORIGIN_LEFT) { + txt.alignH = DRW_Text::HLeft; + } else if(origin & Style::ORIGIN_RIGHT) { + txt.alignH = DRW_Text::HRight; + } + txt.alignV = DRW_Text::VMiddle; + if(origin & Style::ORIGIN_TOP) { + txt.alignV = DRW_Text::VTop; + } else if(origin & Style::ORIGIN_BOT) { + txt.alignV = DRW_Text::VBaseLine; + } + dxf->writeText(&txt); + } +}; + +bool DxfFileWriter::OutputConstraints(IdList *constraint) { + this->constraint = constraint; + return true; +} + +void DxfFileWriter::StartFile(void) { + paths.clear(); +} + +void DxfFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + BezierPath path = {}; + paths.push_back(path); +} +void DxfFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void DxfFileWriter::Triangle(STriangle *tr) { +} + +void DxfFileWriter::Bezier(SBezier *sb) { + paths.back().beziers.push_back(sb); +} + +void DxfFileWriter::FinishAndCloseFile() { + dxfRW dxf; + + DxfWriteInterface interface(this, &dxf); + std::stringstream stream; + dxf.write(stream, &interface, DRW::AC1021, /*bin=*/false); + paths.clear(); + constraint = NULL; + + if(!WriteFile(filename, stream.str())) { + Error("Couldn't write to '%s'", filename.c_str()); + return; + } +} + +bool DxfFileWriter::NeedToOutput(Constraint *c) { + switch(c->type) { + case Constraint::PT_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::DIAMETER: + case Constraint::ANGLE: + case Constraint::COMMENT: + return c->IsVisible(); + } + return false; +} + +const char *DxfFileWriter::lineTypeName(int stippleType) { + switch(stippleType) { + case Style::STIPPLE_CONTINUOUS: return "CONTINUOUS"; + case Style::STIPPLE_DASH: return "DASHED"; + case Style::STIPPLE_LONG_DASH: return "DASHEDX2"; + case Style::STIPPLE_DASH_DOT: return "DASHDOT"; + case Style::STIPPLE_DASH_DOT_DOT: return "DIVIDE"; + case Style::STIPPLE_DOT: return "DOT"; + case Style::STIPPLE_FREEHAND: return "CONTINUOUS"; + case Style::STIPPLE_ZIGZAG: return "CONTINUOUS"; + } + + return "CONTINUOUS"; +} + +//----------------------------------------------------------------------------- +// Routines for EPS output +//----------------------------------------------------------------------------- + +static std::string MakeStipplePattern(int pattern, double scale, char delimiter, + bool inkscapeWorkaround = false) { + scale /= 2.0; + + // Inkscape ignores all elements that are exactly zero instead of drawing + // them as dots. + double zero = inkscapeWorkaround ? 1e-6 : 0; + + std::string result; + switch(pattern) { + case Style::STIPPLE_CONTINUOUS: + case Style::STIPPLE_FREEHAND: + case Style::STIPPLE_ZIGZAG: + return ""; + + case Style::STIPPLE_DASH: + result = ssprintf("%.3f_%.3f", scale, scale); + break; + case Style::STIPPLE_DASH_DOT: + result = ssprintf("%.3f_%.3f_%.6f_%.3f", + scale, scale * 0.5, zero, scale * 0.5); + break; + case Style::STIPPLE_DASH_DOT_DOT: + result = ssprintf("%.3f_%.3f_%.6f_%.3f_%.6f_%.3f", + scale, scale * 0.5, zero, + scale * 0.5, scale * 0.5, zero); + break; + case Style::STIPPLE_DOT: + result = ssprintf("%.6f_%.3f", zero, scale * 0.5); + break; + case Style::STIPPLE_LONG_DASH: + result = ssprintf("%.3f_%.3f", scale * 2.0, scale * 0.5); + break; + + default: + oops(); + } + std::replace(result.begin(), result.end(), '_', delimiter); + return result; +} + +void EpsFileWriter::StartFile(void) { + fprintf(f, +"%%!PS-Adobe-2.0\r\n" +"%%%%Creator: SolveSpace\r\n" +"%%%%Title: title\r\n" +"%%%%Pages: 0\r\n" +"%%%%PageOrder: Ascend\r\n" +"%%%%BoundingBox: 0 0 %d %d\r\n" +"%%%%HiResBoundingBox: 0 0 %.3f %.3f\r\n" +"%%%%EndComments\r\n" +"\r\n" +"gsave\r\n" +"\r\n", + (int)ceil(MmToPts(ptMax.x - ptMin.x)), + (int)ceil(MmToPts(ptMax.y - ptMin.y)), + MmToPts(ptMax.x - ptMin.x), + MmToPts(ptMax.y - ptMin.y)); +} + +void EpsFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + fprintf(f, "newpath\r\n"); + prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); +} +void EpsFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + int pattern = Style::PatternType(hs); + double stippleScale = MmToPts(Style::StippleScaleMm(hs)); + + fprintf(f, " %.3f setlinewidth\r\n" + " %.3f %.3f %.3f setrgbcolor\r\n" + " 1 setlinejoin\r\n" // rounded + " 1 setlinecap\r\n" // rounded + " [%s] 0 setdash\r\n" + " gsave stroke grestore\r\n", + MmToPts(lineWidth), + strokeRgb.redF(), strokeRgb.greenF(), strokeRgb.blueF(), + MakeStipplePattern(pattern, stippleScale, ' ').c_str() + ); + if(filled) { + fprintf(f, " %.3f %.3f %.3f setrgbcolor\r\n" + " gsave fill grestore\r\n", + fillRgb.redF(), fillRgb.greenF(), fillRgb.blueF()); + } +} + +void EpsFileWriter::MaybeMoveTo(Vector st, Vector fi) { + if(!prevPt.Equals(st)) { + fprintf(f, " %.3f %.3f moveto\r\n", + MmToPts(st.x - ptMin.x), MmToPts(st.y - ptMin.y)); + } + prevPt = fi; +} + +void EpsFileWriter::Triangle(STriangle *tr) { + fprintf(f, +"%.3f %.3f %.3f setrgbcolor\r\n" +"newpath\r\n" +" %.3f %.3f moveto\r\n" +" %.3f %.3f lineto\r\n" +" %.3f %.3f lineto\r\n" +" closepath\r\n" +"gsave fill grestore\r\n", + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + MmToPts(tr->a.x - ptMin.x), MmToPts(tr->a.y - ptMin.y), + MmToPts(tr->b.x - ptMin.x), MmToPts(tr->b.y - ptMin.y), + MmToPts(tr->c.x - ptMin.x), MmToPts(tr->c.y - ptMin.y)); + + // same issue with cracks, stroke it to avoid them + double sw = max(ptMax.x - ptMin.x, ptMax.y - ptMin.y) / 1000; + fprintf(f, +"1 setlinejoin\r\n" +"1 setlinecap\r\n" +"%.3f setlinewidth\r\n" +"gsave stroke grestore\r\n", + MmToPts(sw)); +} + +void EpsFileWriter::Bezier(SBezier *sb) { + Vector c, n = Vector::From(0, 0, 1); + double r; + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, " %.3f %.3f lineto\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), + MmToPts(sb->ctrl[1].y - ptMin.y)); + } else if(sb->IsCircle(n, &c, &r)) { + Vector p0 = sb->ctrl[0], p1 = sb->ctrl[2]; + double theta0 = atan2(p0.y - c.y, p0.x - c.x), + theta1 = atan2(p1.y - c.y, p1.x - c.x), + dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2*PI); + MaybeMoveTo(p0, p1); + fprintf(f, +" %.3f %.3f %.3f %.3f %.3f %s\r\n", + MmToPts(c.x - ptMin.x), MmToPts(c.y - ptMin.y), + MmToPts(r), + theta0*180/PI, theta1*180/PI, + dtheta < 0 ? "arcn" : "arc"); + } else if(sb->deg == 3 && !sb->IsRational()) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, +" %.3f %.3f %.3f %.3f %.3f %.3f curveto\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y), + MmToPts(sb->ctrl[2].x - ptMin.x), MmToPts(sb->ctrl[2].y - ptMin.y), + MmToPts(sb->ctrl[3].x - ptMin.x), MmToPts(sb->ctrl[3].y - ptMin.y)); + } else { + BezierAsNonrationalCubic(sb); + } +} + +void EpsFileWriter::FinishAndCloseFile(void) { + fprintf(f, +"\r\n" +"grestore\r\n" +"\r\n"); + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for PDF output, some extra complexity because we have to generate +// a correct xref table. +//----------------------------------------------------------------------------- +void PdfFileWriter::StartFile(void) { + if((ptMax.x - ptMin.x) > 200*25.4 || + (ptMax.y - ptMin.y) > 200*25.4) + { + Message("PDF page size exceeds 200 by 200 inches; many viewers may " + "reject this file."); + } + + fprintf(f, +"%%PDF-1.1\r\n" +"%%%c%c%c%c\r\n", + 0xe2, 0xe3, 0xcf, 0xd3); + + xref[1] = (uint32_t)ftell(f); + fprintf(f, +"1 0 obj\r\n" +" << /Type /Catalog\r\n" +" /Outlines 2 0 R\r\n" +" /Pages 3 0 R\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[2] = (uint32_t)ftell(f); + fprintf(f, +"2 0 obj\r\n" +" << /Type /Outlines\r\n" +" /Count 0\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[3] = (uint32_t)ftell(f); + fprintf(f, +"3 0 obj\r\n" +" << /Type /Pages\r\n" +" /Kids [4 0 R]\r\n" +" /Count 1\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[4] = (uint32_t)ftell(f); + fprintf(f, +"4 0 obj\r\n" +" << /Type /Page\r\n" +" /Parent 3 0 R\r\n" +" /MediaBox [0 0 %.3f %.3f]\r\n" +" /Contents 5 0 R\r\n" +" /Resources << /ProcSet 7 0 R\r\n" +" /Font << /F1 8 0 R >>\r\n" +" >>\r\n" +" >>\r\n" +"endobj\r\n", + MmToPts(ptMax.x - ptMin.x), + MmToPts(ptMax.y - ptMin.y)); + + xref[5] = (uint32_t)ftell(f); + fprintf(f, +"5 0 obj\r\n" +" << /Length 6 0 R >>\r\n" +"stream\r\n"); + bodyStart = (uint32_t)ftell(f); +} + +void PdfFileWriter::FinishAndCloseFile(void) { + uint32_t bodyEnd = (uint32_t)ftell(f); + + fprintf(f, +"endstream\r\n" +"endobj\r\n"); + + xref[6] = (uint32_t)ftell(f); + fprintf(f, +"6 0 obj\r\n" +" %d\r\n" +"endobj\r\n", + bodyEnd - bodyStart); + + xref[7] = (uint32_t)ftell(f); + fprintf(f, +"7 0 obj\r\n" +" [/PDF /Text]\r\n" +"endobj\r\n"); + + xref[8] = (uint32_t)ftell(f); + fprintf(f, +"8 0 obj\r\n" +" << /Type /Font\r\n" +" /Subtype /Type1\r\n" +" /Name /F1\r\n" +" /BaseFont /Helvetica\r\n" +" /Encoding /WinAnsiEncoding\r\n" +" >>\r\n" +"endobj\r\n"); + + xref[9] = (uint32_t)ftell(f); + fprintf(f, +"9 0 obj\r\n" +" << /Creator (SolveSpace)\r\n" +" >>\r\n"); + + uint32_t xrefStart = (uint32_t)ftell(f); + fprintf(f, +"xref\r\n" +"0 10\r\n" +"0000000000 65535 f\r\n"); + + int i; + for(i = 1; i <= 9; i++) { + fprintf(f, "%010d %05d n\r\n", xref[i], 0); + } + + fprintf(f, +"\r\n" +"trailer\r\n" +" << /Size 10\r\n" +" /Root 1 0 R\r\n" +" /Info 9 0 R\r\n" +" >>\r\n" +"startxref\r\n" +"%d\r\n" +"%%%%EOF\r\n", + xrefStart); + + fclose(f); + +} + +void PdfFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + int pattern = Style::PatternType(hs); + double stippleScale = MmToPts(Style::StippleScaleMm(hs)); + + fprintf(f, "1 J 1 j " // round endcaps and joins + "%.3f w [%s] 0 d " + "%.3f %.3f %.3f RG\r\n", + MmToPts(lineWidth), + MakeStipplePattern(pattern, stippleScale, ' ').c_str(), + strokeRgb.redF(), strokeRgb.greenF(), strokeRgb.blueF()); + if(filled) { + fprintf(f, "%.3f %.3f %.3f rg\r\n", + fillRgb.redF(), fillRgb.greenF(), fillRgb.blueF()); + } + + prevPt = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); +} +void PdfFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + if(filled) { + fprintf(f, "b\r\n"); + } else { + fprintf(f, "S\r\n"); + } +} + +void PdfFileWriter::MaybeMoveTo(Vector st, Vector fi) { + if(!prevPt.Equals(st)) { + fprintf(f, "%.3f %.3f m\r\n", + MmToPts(st.x - ptMin.x), MmToPts(st.y - ptMin.y)); + } + prevPt = fi; +} + +void PdfFileWriter::Triangle(STriangle *tr) { + double sw = max(ptMax.x - ptMin.x, ptMax.y - ptMin.y) / 1000; + + fprintf(f, +"1 J 1 j\r\n" +"%.3f %.3f %.3f RG\r\n" +"%.3f %.3f %.3f rg\r\n" +"%.3f w\r\n" +"%.3f %.3f m\r\n" +"%.3f %.3f l\r\n" +"%.3f %.3f l\r\n" +"b\r\n", + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + tr->meta.color.redF(), tr->meta.color.greenF(), tr->meta.color.blueF(), + MmToPts(sw), + MmToPts(tr->a.x - ptMin.x), MmToPts(tr->a.y - ptMin.y), + MmToPts(tr->b.x - ptMin.x), MmToPts(tr->b.y - ptMin.y), + MmToPts(tr->c.x - ptMin.x), MmToPts(tr->c.y - ptMin.y)); +} + +void PdfFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, +"%.3f %.3f l\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y)); + } else if(sb->deg == 3 && !sb->IsRational()) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, +"%.3f %.3f %.3f %.3f %.3f %.3f c\r\n", + MmToPts(sb->ctrl[1].x - ptMin.x), MmToPts(sb->ctrl[1].y - ptMin.y), + MmToPts(sb->ctrl[2].x - ptMin.x), MmToPts(sb->ctrl[2].y - ptMin.y), + MmToPts(sb->ctrl[3].x - ptMin.x), MmToPts(sb->ctrl[3].y - ptMin.y)); + } else { + BezierAsNonrationalCubic(sb); + } +} + +//----------------------------------------------------------------------------- +// Routines for SVG output +//----------------------------------------------------------------------------- +void SvgFileWriter::StartFile(void) { + fprintf(f, +"\r\n" +"\r\n" +"\r\n" +"Exported SVG\r\n" +"\r\n", + (ptMax.x - ptMin.x), (ptMax.y - ptMin.y), + (ptMax.x - ptMin.x), (ptMax.y - ptMin.y)); + + fprintf(f, "\r\n"); +} + +void SvgFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ + fprintf(f, "\r\n", cls.c_str(), fill.c_str()); +} + +void SvgFileWriter::MaybeMoveTo(Vector st, Vector fi) { + // SVG uses a coordinate system with the origin at top left, +y down + if(!prevPt.Equals(st)) { + fprintf(f, "M%.3f %.3f ", (st.x - ptMin.x), (ptMax.y - st.y)); + } + prevPt = fi; +} + +void SvgFileWriter::Triangle(STriangle *tr) { + fprintf(f, +"\r\n", + (tr->a.x - ptMin.x), (ptMax.y - tr->a.y), + (tr->b.x - ptMin.x), (ptMax.y - tr->b.y), + (tr->c.x - ptMin.x), (ptMax.y - tr->c.y), + tr->meta.color.red, tr->meta.color.green, tr->meta.color.blue, + tr->meta.color.red, tr->meta.color.green, tr->meta.color.blue); +} + +void SvgFileWriter::Bezier(SBezier *sb) { + Vector c, n = Vector::From(0, 0, 1); + double r; + if(sb->deg == 1) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[1]); + fprintf(f, "L%.3f,%.3f ", + (sb->ctrl[1].x - ptMin.x), (ptMax.y - sb->ctrl[1].y)); + } else if(sb->IsCircle(n, &c, &r)) { + Vector p0 = sb->ctrl[0], p1 = sb->ctrl[2]; + double theta0 = atan2(p0.y - c.y, p0.x - c.x), + theta1 = atan2(p1.y - c.y, p1.x - c.x), + dtheta = WRAP_SYMMETRIC(theta1 - theta0, 2*PI); + // The arc must be less than 180 degrees, or else it couldn't have + // been represented as a single rational Bezier. So large-arc-flag + // must be false. sweep-flag is determined by the sign of dtheta. + // Note that clockwise and counter-clockwise are backwards in SVG's + // mirrored csys. + MaybeMoveTo(p0, p1); + fprintf(f, "A%.3f,%.3f 0 0,%d %.3f,%.3f ", + r, r, + (dtheta < 0) ? 1 : 0, + p1.x - ptMin.x, ptMax.y - p1.y); + } else if(!sb->IsRational()) { + if(sb->deg == 2) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[2]); + fprintf(f, "Q%.3f,%.3f %.3f,%.3f ", + sb->ctrl[1].x - ptMin.x, ptMax.y - sb->ctrl[1].y, + sb->ctrl[2].x - ptMin.x, ptMax.y - sb->ctrl[2].y); + } else if(sb->deg == 3) { + MaybeMoveTo(sb->ctrl[0], sb->ctrl[3]); + fprintf(f, "C%.3f,%.3f %.3f,%.3f %.3f,%.3f ", + sb->ctrl[1].x - ptMin.x, ptMax.y - sb->ctrl[1].y, + sb->ctrl[2].x - ptMin.x, ptMax.y - sb->ctrl[2].y, + sb->ctrl[3].x - ptMin.x, ptMax.y - sb->ctrl[3].y); + } + } else { + BezierAsNonrationalCubic(sb); + } +} + +void SvgFileWriter::FinishAndCloseFile(void) { + fprintf(f, "\r\n\r\n"); + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for HPGL output +//----------------------------------------------------------------------------- +double HpglFileWriter::MmToHpglUnits(double mm) { + return mm*40; +} + +void HpglFileWriter::StartFile(void) { + fprintf(f, "IN;\r\n"); + fprintf(f, "SP1;\r\n"); +} + +void HpglFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void HpglFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void HpglFileWriter::Triangle(STriangle *tr) { +} + +void HpglFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + fprintf(f, "PU%d,%d;\r\n", + (int)MmToHpglUnits(sb->ctrl[0].x), + (int)MmToHpglUnits(sb->ctrl[0].y)); + fprintf(f, "PD%d,%d;\r\n", + (int)MmToHpglUnits(sb->ctrl[1].x), + (int)MmToHpglUnits(sb->ctrl[1].y)); + } else { + BezierAsPwl(sb); + } +} + +void HpglFileWriter::FinishAndCloseFile(void) { + fclose(f); +} + +//----------------------------------------------------------------------------- +// Routines for G Code output. Slightly complicated by our ability to generate +// multiple passes, and to specify the feeds and depth; those parameters get +// set in the configuration screen. +//----------------------------------------------------------------------------- +void GCodeFileWriter::StartFile(void) { + sel = {}; +} +void GCodeFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void GCodeFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void GCodeFileWriter::Triangle(STriangle *tr) { +} + +void GCodeFileWriter::Bezier(SBezier *sb) { + if(sb->deg == 1) { + sel.AddEdge(sb->ctrl[0], sb->ctrl[1]); + } else { + BezierAsPwl(sb); + } +} + +void GCodeFileWriter::FinishAndCloseFile(void) { + SPolygon sp = {}; + sel.AssemblePolygon(&sp, NULL); + + int i; + for(i = 0; i < SS.gCode.passes; i++) { + double depth = (SS.gCode.depth / SS.gCode.passes)*(i+1); + + SContour *sc; + for(sc = sp.l.First(); sc; sc = sp.l.NextAfter(sc)) { + if(sc->l.n < 2) continue; + + SPoint *pt = sc->l.First(); + fprintf(f, "G00 X%s Y%s\r\n", + SS.MmToString(pt->p.x).c_str(), SS.MmToString(pt->p.y).c_str()); + fprintf(f, "G01 Z%s F%s\r\n", + SS.MmToString(depth).c_str(), SS.MmToString(SS.gCode.plungeFeed).c_str()); + + pt = sc->l.NextAfter(pt); + for(; pt; pt = sc->l.NextAfter(pt)) { + fprintf(f, "G01 X%s Y%s F%s\r\n", + SS.MmToString(pt->p.x).c_str(), SS.MmToString(pt->p.y).c_str(), + SS.MmToString(SS.gCode.feed).c_str()); + } + // Move up to a clearance plane 5mm above the work. + fprintf(f, "G00 Z%s\r\n", + SS.MmToString(SS.gCode.depth < 0 ? +5 : -5).c_str()); + } + } + + sp.Clear(); + sel.Clear(); + fclose(f); +} + + +//----------------------------------------------------------------------------- +// Routine for STEP output; just a wrapper around the general STEP stuff that +// can also be used for surfaces or 3d curves. +//----------------------------------------------------------------------------- +void Step2dFileWriter::StartFile(void) { + sfw = {}; + sfw.f = f; + sfw.WriteHeader(); +} + +void Step2dFileWriter::Triangle(STriangle *tr) { +} + +void Step2dFileWriter::StartPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} +void Step2dFileWriter::FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) +{ +} + +void Step2dFileWriter::Bezier(SBezier *sb) { + int c = sfw.ExportCurve(sb); + sfw.curves.Add(&c); +} + +void Step2dFileWriter::FinishAndCloseFile(void) { + sfw.WriteWireframe(); + sfw.WriteFooter(); + fclose(f); +} + diff --git a/src/expr.cpp b/src/expr.cpp new file mode 100644 index 0000000..52e06b0 --- /dev/null +++ b/src/expr.cpp @@ -0,0 +1,808 @@ +//----------------------------------------------------------------------------- +// The symbolic algebra system used to write our constraint equations; +// routines to build expressions in software or from a user-provided string, +// and to compute the partial derivatives that we'll use when write our +// Jacobian matrix. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +ExprVector ExprVector::From(Expr *x, Expr *y, Expr *z) { + ExprVector r = { x, y, z}; + return r; +} + +ExprVector ExprVector::From(Vector vn) { + ExprVector ve; + ve.x = Expr::From(vn.x); + ve.y = Expr::From(vn.y); + ve.z = Expr::From(vn.z); + return ve; +} + +ExprVector ExprVector::From(hParam x, hParam y, hParam z) { + ExprVector ve; + ve.x = Expr::From(x); + ve.y = Expr::From(y); + ve.z = Expr::From(z); + return ve; +} + +ExprVector ExprVector::From(double x, double y, double z) { + ExprVector ve; + ve.x = Expr::From(x); + ve.y = Expr::From(y); + ve.z = Expr::From(z); + return ve; +} + +ExprVector ExprVector::Minus(ExprVector b) { + ExprVector r; + r.x = x->Minus(b.x); + r.y = y->Minus(b.y); + r.z = z->Minus(b.z); + return r; +} + +ExprVector ExprVector::Plus(ExprVector b) { + ExprVector r; + r.x = x->Plus(b.x); + r.y = y->Plus(b.y); + r.z = z->Plus(b.z); + return r; +} + +Expr *ExprVector::Dot(ExprVector b) { + Expr *r; + r = x->Times(b.x); + r = r->Plus(y->Times(b.y)); + r = r->Plus(z->Times(b.z)); + return r; +} + +ExprVector ExprVector::Cross(ExprVector b) { + ExprVector r; + r.x = (y->Times(b.z))->Minus(z->Times(b.y)); + r.y = (z->Times(b.x))->Minus(x->Times(b.z)); + r.z = (x->Times(b.y))->Minus(y->Times(b.x)); + return r; +} + +ExprVector ExprVector::ScaledBy(Expr *s) { + ExprVector r; + r.x = x->Times(s); + r.y = y->Times(s); + r.z = z->Times(s); + return r; +} + +ExprVector ExprVector::WithMagnitude(Expr *s) { + Expr *m = Magnitude(); + return ScaledBy(s->Div(m)); +} + +Expr *ExprVector::Magnitude(void) { + Expr *r; + r = x->Square(); + r = r->Plus(y->Square()); + r = r->Plus(z->Square()); + return r->Sqrt(); +} + +Vector ExprVector::Eval(void) { + Vector r; + r.x = x->Eval(); + r.y = y->Eval(); + r.z = z->Eval(); + return r; +} + +ExprQuaternion ExprQuaternion::From(hParam w, hParam vx, hParam vy, hParam vz) { + ExprQuaternion q; + q.w = Expr::From(w); + q.vx = Expr::From(vx); + q.vy = Expr::From(vy); + q.vz = Expr::From(vz); + return q; +} + +ExprQuaternion ExprQuaternion::From(Expr *w, Expr *vx, Expr *vy, Expr *vz) +{ + ExprQuaternion q; + q.w = w; + q.vx = vx; + q.vy = vy; + q.vz = vz; + return q; +} + +ExprQuaternion ExprQuaternion::From(Quaternion qn) { + ExprQuaternion qe; + qe.w = Expr::From(qn.w); + qe.vx = Expr::From(qn.vx); + qe.vy = Expr::From(qn.vy); + qe.vz = Expr::From(qn.vz); + return qe; +} + +ExprVector ExprQuaternion::RotationU(void) { + ExprVector u; + Expr *two = Expr::From(2); + + u.x = w->Square(); + u.x = (u.x)->Plus(vx->Square()); + u.x = (u.x)->Minus(vy->Square()); + u.x = (u.x)->Minus(vz->Square()); + + u.y = two->Times(w->Times(vz)); + u.y = (u.y)->Plus(two->Times(vx->Times(vy))); + + u.z = two->Times(vx->Times(vz)); + u.z = (u.z)->Minus(two->Times(w->Times(vy))); + + return u; +} + +ExprVector ExprQuaternion::RotationV(void) { + ExprVector v; + Expr *two = Expr::From(2); + + v.x = two->Times(vx->Times(vy)); + v.x = (v.x)->Minus(two->Times(w->Times(vz))); + + v.y = w->Square(); + v.y = (v.y)->Minus(vx->Square()); + v.y = (v.y)->Plus(vy->Square()); + v.y = (v.y)->Minus(vz->Square()); + + v.z = two->Times(w->Times(vx)); + v.z = (v.z)->Plus(two->Times(vy->Times(vz))); + + return v; +} + +ExprVector ExprQuaternion::RotationN(void) { + ExprVector n; + Expr *two = Expr::From(2); + + n.x = two->Times( w->Times(vy)); + n.x = (n.x)->Plus (two->Times(vx->Times(vz))); + + n.y = two->Times(vy->Times(vz)); + n.y = (n.y)->Minus(two->Times( w->Times(vx))); + + n.z = w->Square(); + n.z = (n.z)->Minus(vx->Square()); + n.z = (n.z)->Minus(vy->Square()); + n.z = (n.z)->Plus (vz->Square()); + + return n; +} + +ExprVector ExprQuaternion::Rotate(ExprVector p) { + // Express the point in the new basis + return (RotationU().ScaledBy(p.x)).Plus( + RotationV().ScaledBy(p.y)).Plus( + RotationN().ScaledBy(p.z)); +} + +ExprQuaternion ExprQuaternion::Times(ExprQuaternion b) { + Expr *sa = w, *sb = b.w; + ExprVector va = { vx, vy, vz }; + ExprVector vb = { b.vx, b.vy, b.vz }; + + ExprQuaternion r; + r.w = (sa->Times(sb))->Minus(va.Dot(vb)); + ExprVector vr = vb.ScaledBy(sa).Plus( + va.ScaledBy(sb).Plus( + va.Cross(vb))); + r.vx = vr.x; + r.vy = vr.y; + r.vz = vr.z; + return r; +} + +Expr *ExprQuaternion::Magnitude(void) { + return ((w ->Square())->Plus( + (vx->Square())->Plus( + (vy->Square())->Plus( + (vz->Square())))))->Sqrt(); +} + + +Expr *Expr::From(hParam p) { + Expr *r = AllocExpr(); + r->op = PARAM; + r->parh = p; + return r; +} + +Expr *Expr::From(double v) { + // Statically allocate common constants. + // Note: this is only valid because AllocExpr() uses AllocTemporary(), + // and Expr* is never explicitly freed. + + if(v == 0.0) { + static Expr zero(0.0); + return &zero; + } + + if(v == 1.0) { + static Expr one(1.0); + return &one; + } + + if(v == -1.0) { + static Expr mone(-1.0); + return &mone; + } + + if(v == 0.5) { + static Expr half(0.5); + return ½ + } + + if(v == -0.5) { + static Expr mhalf(-0.5); + return &mhalf; + } + + Expr *r = AllocExpr(); + r->op = CONSTANT; + r->v = v; + return r; +} + +Expr *Expr::AnyOp(int newOp, Expr *b) { + Expr *r = AllocExpr(); + r->op = newOp; + r->a = this; + r->b = b; + return r; +} + +int Expr::Children(void) { + switch(op) { + case PARAM: + case PARAM_PTR: + case CONSTANT: + return 0; + + case PLUS: + case MINUS: + case TIMES: + case DIV: + return 2; + + case NEGATE: + case SQRT: + case SQUARE: + case SIN: + case COS: + case ASIN: + case ACOS: + return 1; + + default: oops(); + } +} + +int Expr::Nodes(void) { + switch(Children()) { + case 0: return 1; + case 1: return 1 + a->Nodes(); + case 2: return 1 + a->Nodes() + b->Nodes(); + default: oops(); + } +} + +Expr *Expr::DeepCopy(void) { + Expr *n = AllocExpr(); + *n = *this; + int c = n->Children(); + if(c > 0) n->a = a->DeepCopy(); + if(c > 1) n->b = b->DeepCopy(); + return n; +} + +Expr *Expr::DeepCopyWithParamsAsPointers(IdList *firstTry, + IdList *thenTry) +{ + Expr *n = AllocExpr(); + if(op == PARAM) { + // A param that is referenced by its hParam gets rewritten to go + // straight in to the parameter table with a pointer, or simply + // into a constant if it's already known. + Param *p = firstTry->FindByIdNoOops(parh); + if(!p) p = thenTry->FindById(parh); + if(p->known) { + n->op = CONSTANT; + n->v = p->val; + } else { + n->op = PARAM_PTR; + n->parp = p; + } + return n; + } + + *n = *this; + int c = n->Children(); + if(c > 0) n->a = a->DeepCopyWithParamsAsPointers(firstTry, thenTry); + if(c > 1) n->b = b->DeepCopyWithParamsAsPointers(firstTry, thenTry); + return n; +} + +double Expr::Eval(void) { + switch(op) { + case PARAM: return SK.GetParam(parh)->val; + case PARAM_PTR: return parp->val; + + case CONSTANT: return v; + + case PLUS: return a->Eval() + b->Eval(); + case MINUS: return a->Eval() - b->Eval(); + case TIMES: return a->Eval() * b->Eval(); + case DIV: return a->Eval() / b->Eval(); + + case NEGATE: return -(a->Eval()); + case SQRT: return sqrt(a->Eval()); + case SQUARE: { double r = a->Eval(); return r*r; } + case SIN: return sin(a->Eval()); + case COS: return cos(a->Eval()); + case ACOS: return acos(a->Eval()); + case ASIN: return asin(a->Eval()); + + default: oops(); + } +} + +Expr *Expr::PartialWrt(hParam p) { + Expr *da, *db; + + switch(op) { + case PARAM_PTR: return From(p.v == parp->h.v ? 1 : 0); + case PARAM: return From(p.v == parh.v ? 1 : 0); + + case CONSTANT: return From(0.0); + + case PLUS: return (a->PartialWrt(p))->Plus(b->PartialWrt(p)); + case MINUS: return (a->PartialWrt(p))->Minus(b->PartialWrt(p)); + + case TIMES: + da = a->PartialWrt(p); + db = b->PartialWrt(p); + return (a->Times(db))->Plus(b->Times(da)); + + case DIV: + da = a->PartialWrt(p); + db = b->PartialWrt(p); + return ((da->Times(b))->Minus(a->Times(db)))->Div(b->Square()); + + case SQRT: + return (From(0.5)->Div(a->Sqrt()))->Times(a->PartialWrt(p)); + + case SQUARE: + return (From(2.0)->Times(a))->Times(a->PartialWrt(p)); + + case NEGATE: return (a->PartialWrt(p))->Negate(); + case SIN: return (a->Cos())->Times(a->PartialWrt(p)); + case COS: return ((a->Sin())->Times(a->PartialWrt(p)))->Negate(); + + case ASIN: + return (From(1)->Div((From(1)->Minus(a->Square()))->Sqrt())) + ->Times(a->PartialWrt(p)); + case ACOS: + return (From(-1)->Div((From(1)->Minus(a->Square()))->Sqrt())) + ->Times(a->PartialWrt(p)); + + default: oops(); + } +} + +uint64_t Expr::ParamsUsed(void) { + uint64_t r = 0; + if(op == PARAM) r |= ((uint64_t)1 << (parh.v % 61)); + if(op == PARAM_PTR) r |= ((uint64_t)1 << (parp->h.v % 61)); + + int c = Children(); + if(c >= 1) r |= a->ParamsUsed(); + if(c >= 2) r |= b->ParamsUsed(); + return r; +} + +bool Expr::DependsOn(hParam p) { + if(op == PARAM) return (parh.v == p.v); + if(op == PARAM_PTR) return (parp->h.v == p.v); + + int c = Children(); + if(c == 1) return a->DependsOn(p); + if(c == 2) return a->DependsOn(p) || b->DependsOn(p); + return false; +} + +bool Expr::Tol(double a, double b) { + return fabs(a - b) < 0.001; +} +Expr *Expr::FoldConstants(void) { + Expr *n = AllocExpr(); + *n = *this; + + int c = Children(); + if(c >= 1) n->a = a->FoldConstants(); + if(c >= 2) n->b = b->FoldConstants(); + + switch(op) { + case PARAM_PTR: + case PARAM: + case CONSTANT: + break; + + case MINUS: + case TIMES: + case DIV: + case PLUS: + // If both ops are known, then we can evaluate immediately + if(n->a->op == CONSTANT && n->b->op == CONSTANT) { + double nv = n->Eval(); + n->op = CONSTANT; + n->v = nv; + break; + } + // x + 0 = 0 + x = x + if(op == PLUS && n->b->op == CONSTANT && Tol(n->b->v, 0)) { + *n = *(n->a); break; + } + if(op == PLUS && n->a->op == CONSTANT && Tol(n->a->v, 0)) { + *n = *(n->b); break; + } + // 1*x = x*1 = x + if(op == TIMES && n->b->op == CONSTANT && Tol(n->b->v, 1)) { + *n = *(n->a); break; + } + if(op == TIMES && n->a->op == CONSTANT && Tol(n->a->v, 1)) { + *n = *(n->b); break; + } + // 0*x = x*0 = 0 + if(op == TIMES && n->b->op == CONSTANT && Tol(n->b->v, 0)) { + n->op = CONSTANT; n->v = 0; break; + } + if(op == TIMES && n->a->op == CONSTANT && Tol(n->a->v, 0)) { + n->op = CONSTANT; n->v = 0; break; + } + + break; + + case SQRT: + case SQUARE: + case NEGATE: + case SIN: + case COS: + case ASIN: + case ACOS: + if(n->a->op == CONSTANT) { + double nv = n->Eval(); + n->op = CONSTANT; + n->v = nv; + } + break; + + default: oops(); + } + return n; +} + +void Expr::Substitute(hParam oldh, hParam newh) { + if(op == PARAM_PTR) oops(); + + if(op == PARAM && parh.v == oldh.v) { + parh = newh; + } + int c = Children(); + if(c >= 1) a->Substitute(oldh, newh); + if(c >= 2) b->Substitute(oldh, newh); +} + +//----------------------------------------------------------------------------- +// If the expression references only one parameter that appears in pl, then +// return that parameter. If no param is referenced, then return NO_PARAMS. +// If multiple params are referenced, then return MULTIPLE_PARAMS. +//----------------------------------------------------------------------------- +const hParam Expr::NO_PARAMS = { 0 }; +const hParam Expr::MULTIPLE_PARAMS = { 1 }; +hParam Expr::ReferencedParams(ParamList *pl) { + if(op == PARAM) { + if(pl->FindByIdNoOops(parh)) { + return parh; + } else { + return NO_PARAMS; + } + } + if(op == PARAM_PTR) oops(); + + int c = Children(); + if(c == 0) { + return NO_PARAMS; + } else if(c == 1) { + return a->ReferencedParams(pl); + } else if(c == 2) { + hParam pa, pb; + pa = a->ReferencedParams(pl); + pb = b->ReferencedParams(pl); + if(pa.v == NO_PARAMS.v) { + return pb; + } else if(pb.v == NO_PARAMS.v) { + return pa; + } else if(pa.v == pb.v) { + return pa; // either, doesn't matter + } else { + return MULTIPLE_PARAMS; + } + } else oops(); +} + + +//----------------------------------------------------------------------------- +// Routines to pretty-print an expression. Mostly for debugging. +//----------------------------------------------------------------------------- + +std::string Expr::Print(void) { + + char c; + switch(op) { + case PARAM: return ssprintf("param(%08x)", parh.v); + case PARAM_PTR: return ssprintf("param(p%08x)", parp->h.v); + + case CONSTANT: return ssprintf("%.3f", v); + + case PLUS: c = '+'; goto p; + case MINUS: c = '-'; goto p; + case TIMES: c = '*'; goto p; + case DIV: c = '/'; goto p; +p: + return "(" + a->Print() + " " + c + " " + b->Print() + ")"; + break; + + case NEGATE: return "(- " + a->Print() + ")"; + case SQRT: return "(sqrt " + a->Print() + ")"; + case SQUARE: return "(square " + a->Print() + ")"; + case SIN: return "(sin " + a->Print() + ")"; + case COS: return "(cos " + a->Print() + ")"; + case ASIN: return "(asin " + a->Print() + ")"; + case ACOS: return "(acos " + a->Print() + ")"; + + default: oops(); + } +} + + +//----------------------------------------------------------------------------- +// A parser; convert a string to an expression. Infix notation, with the +// usual shift/reduce approach. I had great hopes for user-entered eq +// constraints, but those don't seem very useful, so right now this is just +// to provide calculator type functionality wherever numbers are entered. +//----------------------------------------------------------------------------- + +#define MAX_UNPARSED 1024 +static Expr *Unparsed[MAX_UNPARSED]; +static int UnparsedCnt, UnparsedP; + +static Expr *Operands[MAX_UNPARSED]; +static int OperandsP; + +static Expr *Operators[MAX_UNPARSED]; +static int OperatorsP; + +void Expr::PushOperator(Expr *e) { + if(OperatorsP >= MAX_UNPARSED) throw "operator stack full!"; + Operators[OperatorsP++] = e; +} +Expr *Expr::TopOperator(void) { + if(OperatorsP <= 0) throw "operator stack empty (get top)"; + return Operators[OperatorsP-1]; +} +Expr *Expr::PopOperator(void) { + if(OperatorsP <= 0) throw "operator stack empty (pop)"; + return Operators[--OperatorsP]; +} +void Expr::PushOperand(Expr *e) { + if(OperandsP >= MAX_UNPARSED) throw "operand stack full"; + Operands[OperandsP++] = e; +} +Expr *Expr::PopOperand(void) { + if(OperandsP <= 0) throw "operand stack empty"; + return Operands[--OperandsP]; +} +Expr *Expr::Next(void) { + if(UnparsedP >= UnparsedCnt) return NULL; + return Unparsed[UnparsedP]; +} +void Expr::Consume(void) { + if(UnparsedP >= UnparsedCnt) throw "no token to consume"; + UnparsedP++; +} + +int Expr::Precedence(Expr *e) { + if(e->op == ALL_RESOLVED) return -1; // never want to reduce this marker + if(e->op != BINARY_OP && e->op != UNARY_OP) oops(); + + switch(e->c) { + case 'q': + case 's': + case 'c': + case 'n': return 30; + + case '*': + case '/': return 20; + + case '+': + case '-': return 10; + + default: oops(); + } +} + +void Expr::Reduce(void) { + Expr *a, *b; + + Expr *op = PopOperator(); + Expr *n; + int o; + switch(op->c) { + case '+': o = PLUS; goto c; + case '-': o = MINUS; goto c; + case '*': o = TIMES; goto c; + case '/': o = DIV; goto c; +c: + b = PopOperand(); + a = PopOperand(); + n = a->AnyOp(o, b); + break; + + case 'n': n = PopOperand()->Negate(); break; + case 'q': n = PopOperand()->Sqrt(); break; + case 's': n = (PopOperand()->Times(Expr::From(PI/180)))->Sin(); break; + case 'c': n = (PopOperand()->Times(Expr::From(PI/180)))->Cos(); break; + + default: oops(); + } + PushOperand(n); +} + +void Expr::ReduceAndPush(Expr *n) { + while(Precedence(n) <= Precedence(TopOperator())) { + Reduce(); + } + PushOperator(n); +} + +void Expr::Parse(void) { + Expr *e = AllocExpr(); + e->op = ALL_RESOLVED; + PushOperator(e); + + for(;;) { + Expr *n = Next(); + if(!n) throw "end of expression unexpected"; + + if(n->op == CONSTANT) { + PushOperand(n); + Consume(); + } else if(n->op == PAREN && n->c == '(') { + Consume(); + Parse(); + n = Next(); + if(n->op != PAREN || n->c != ')') throw "expected: )"; + Consume(); + } else if(n->op == UNARY_OP) { + PushOperator(n); + Consume(); + continue; + } else if(n->op == BINARY_OP && n->c == '-') { + // The minus sign is special, because it might be binary or + // unary, depending on context. + n->op = UNARY_OP; + n->c = 'n'; + PushOperator(n); + Consume(); + continue; + } else { + throw "expected expression"; + } + + n = Next(); + if(n && n->op == BINARY_OP) { + ReduceAndPush(n); + Consume(); + } else { + break; + } + } + + while(TopOperator()->op != ALL_RESOLVED) { + Reduce(); + } + PopOperator(); // discard the ALL_RESOLVED marker +} + +void Expr::Lex(const char *in) { + while(*in) { + if(UnparsedCnt >= MAX_UNPARSED) throw "too long"; + + char c = *in; + if(isdigit(c) || c == '.') { + // A number literal + char number[70]; + int len = 0; + while((isdigit(*in) || *in == '.') && len < 30) { + number[len++] = *in; + in++; + } + number[len++] = '\0'; + Expr *e = AllocExpr(); + e->op = CONSTANT; + e->v = atof(number); + Unparsed[UnparsedCnt++] = e; + } else if(isalpha(c) || c == '_') { + char name[70]; + int len = 0; + while(isforname(*in) && len < 30) { + name[len++] = *in; + in++; + } + name[len++] = '\0'; + + Expr *e = AllocExpr(); + if(strcmp(name, "sqrt")==0) { + e->op = UNARY_OP; + e->c = 'q'; + } else if(strcmp(name, "cos")==0) { + e->op = UNARY_OP; + e->c = 'c'; + } else if(strcmp(name, "sin")==0) { + e->op = UNARY_OP; + e->c = 's'; + } else if(strcmp(name, "pi")==0) { + e->op = CONSTANT; + e->v = PI; + } else { + throw "unknown name"; + } + Unparsed[UnparsedCnt++] = e; + } else if(strchr("+-*/()", c)) { + Expr *e = AllocExpr(); + e->op = (c == '(' || c == ')') ? PAREN : BINARY_OP; + e->c = c; + Unparsed[UnparsedCnt++] = e; + in++; + } else if(isspace(c)) { + // Ignore whitespace + in++; + } else { + // This is a lex error. + throw "unexpected characters"; + } + } +} + +Expr *Expr::From(const char *in, bool popUpError) { + UnparsedCnt = 0; + UnparsedP = 0; + OperandsP = 0; + OperatorsP = 0; + + Expr *r; + try { + Lex(in); + Parse(); + r = PopOperand(); + } catch (const char *e) { + dbp("exception: parse/lex error: %s", e); + if(popUpError) { + Error("Not a valid number or expression: '%s'", in); + } + return NULL; + } + return r; +} + diff --git a/src/expr.h b/src/expr.h new file mode 100644 index 0000000..eaf79b0 --- /dev/null +++ b/src/expr.h @@ -0,0 +1,169 @@ +//----------------------------------------------------------------------------- +// An expression in our symbolic algebra system, used to write, linearize, +// and solve our constraint equations. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __EXPR_H +#define __EXPR_H + +class Expr; + +class Expr { +public: + + enum { + // A parameter, by the hParam handle + PARAM = 0, + // A parameter, by a pointer straight in to the param table (faster, + // if we know that the param table won't move around) + PARAM_PTR = 1, + + CONSTANT = 20, + + PLUS = 100, + MINUS = 101, + TIMES = 102, + DIV = 103, + NEGATE = 104, + SQRT = 105, + SQUARE = 106, + SIN = 107, + COS = 108, + ASIN = 109, + ACOS = 110, + + // Special helpers for when we're parsing an expression from text. + // Initially, literals (like a constant number) appear in the same + // format as they will in the finished expression, but the operators + // are different until the parser fixes things up (and builds the + // tree from the flat list that the lexer outputs). + ALL_RESOLVED = 1000, + PAREN = 1001, + BINARY_OP = 1002, + UNARY_OP = 1003 + }; + + int op; + Expr *a; + union { + double v; + hParam parh; + Param *parp; + Expr *b; + + // For use while parsing + char c; + }; + + Expr() { } + Expr(double val) : op(CONSTANT) { v = val; } + + static inline Expr *AllocExpr(void) + { return (Expr *)AllocTemporary(sizeof(Expr)); } + + static Expr *From(hParam p); + static Expr *From(double v); + + Expr *AnyOp(int op, Expr *b); + inline Expr *Plus (Expr *b_) { return AnyOp(PLUS, b_); } + inline Expr *Minus(Expr *b_) { return AnyOp(MINUS, b_); } + inline Expr *Times(Expr *b_) { return AnyOp(TIMES, b_); } + inline Expr *Div (Expr *b_) { return AnyOp(DIV, b_); } + + inline Expr *Negate(void) { return AnyOp(NEGATE, NULL); } + inline Expr *Sqrt (void) { return AnyOp(SQRT, NULL); } + inline Expr *Square(void) { return AnyOp(SQUARE, NULL); } + inline Expr *Sin (void) { return AnyOp(SIN, NULL); } + inline Expr *Cos (void) { return AnyOp(COS, NULL); } + inline Expr *ASin (void) { return AnyOp(ASIN, NULL); } + inline Expr *ACos (void) { return AnyOp(ACOS, NULL); } + + Expr *PartialWrt(hParam p); + double Eval(void); + uint64_t ParamsUsed(void); + bool DependsOn(hParam p); + static bool Tol(double a, double b); + Expr *FoldConstants(void); + void Substitute(hParam oldh, hParam newh); + + static const hParam NO_PARAMS, MULTIPLE_PARAMS; + hParam ReferencedParams(ParamList *pl); + + void ParamsToPointers(void); + + std::string Print(void); + + // number of child nodes: 0 (e.g. constant), 1 (sqrt), or 2 (+) + int Children(void); + // total number of nodes in the tree + int Nodes(void); + + // Make a simple copy + Expr *DeepCopy(void); + // Make a copy, with the parameters (usually referenced by hParam) + // resolved to pointers to the actual value. This speeds things up + // considerably. + Expr *DeepCopyWithParamsAsPointers(IdList *firstTry, + IdList *thenTry); + + static Expr *From(const char *in, bool popUpError); + static void Lex(const char *in); + static Expr *Next(void); + static void Consume(void); + + static void PushOperator(Expr *e); + static Expr *PopOperator(void); + static Expr *TopOperator(void); + static void PushOperand(Expr *e); + static Expr *PopOperand(void); + + static void Reduce(void); + static void ReduceAndPush(Expr *e); + static int Precedence(Expr *e); + + static int Precedence(int op); + static void Parse(void); +}; + +class ExprVector { +public: + Expr *x, *y, *z; + + static ExprVector From(Expr *x, Expr *y, Expr *z); + static ExprVector From(Vector vn); + static ExprVector From(hParam x, hParam y, hParam z); + static ExprVector From(double x, double y, double z); + + ExprVector Plus(ExprVector b); + ExprVector Minus(ExprVector b); + Expr *Dot(ExprVector b); + ExprVector Cross(ExprVector b); + ExprVector ScaledBy(Expr *s); + ExprVector WithMagnitude(Expr *s); + Expr *Magnitude(void); + + Vector Eval(void); +}; + +class ExprQuaternion { +public: + Expr *w, *vx, *vy, *vz; + + static ExprQuaternion From(Expr *w, Expr *vx, Expr *vy, Expr *vz); + static ExprQuaternion From(Quaternion qn); + static ExprQuaternion From(hParam w, hParam vx, hParam vy, hParam vz); + + ExprVector RotationU(void); + ExprVector RotationV(void); + ExprVector RotationN(void); + + ExprVector Rotate(ExprVector p); + ExprQuaternion Times(ExprQuaternion b); + + Expr *Magnitude(void); +}; + +#endif + diff --git a/src/file.cpp b/src/file.cpp new file mode 100644 index 0000000..daad828 --- /dev/null +++ b/src/file.cpp @@ -0,0 +1,869 @@ +//----------------------------------------------------------------------------- +// Routines to write and read our .slvs file format. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#define VERSION_STRING "\261\262\263" "SolveSpaceREVa" + +static int StrStartsWith(const char *str, const char *start) { + return memcmp(str, start, strlen(start)) == 0; +} + +//----------------------------------------------------------------------------- +// Clear and free all the dynamic memory associated with our currently-loaded +// sketch. This does not leave the program in an acceptable state (with the +// references created, and so on), so anyone calling this must fix that later. +//----------------------------------------------------------------------------- +void SolveSpaceUI::ClearExisting(void) { + UndoClearStack(&redo); + UndoClearStack(&undo); + + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->Clear(); + } + + SK.constraint.Clear(); + SK.request.Clear(); + SK.group.Clear(); + SK.groupOrder.Clear(); + SK.style.Clear(); + + SK.entity.Clear(); + SK.param.Clear(); +} + +hGroup SolveSpaceUI::CreateDefaultDrawingGroup(void) { + Group g = {}; + + // And an empty group, for the first stuff the user draws. + g.visible = true; + g.name = "sketch-in-plane"; + g.type = Group::DRAWING_WORKPLANE; + g.subtype = Group::WORKPLANE_BY_POINT_ORTHO; + g.order = 1; + g.predef.q = Quaternion::From(1, 0, 0, 0); + hRequest hr = Request::HREQUEST_REFERENCE_XY; + g.predef.origin = hr.entity(1); + SK.group.AddAndAssignId(&g); + SK.GetGroup(g.h)->activeWorkplane = g.h.entity(0); + return g.h; +} + +void SolveSpaceUI::NewFile(void) { + ClearExisting(); + + // Our initial group, that contains the references. + Group g = {}; + g.visible = true; + g.name = "#references"; + g.type = Group::DRAWING_3D; + g.order = 0; + g.h = Group::HGROUP_REFERENCES; + SK.group.Add(&g); + + // Let's create three two-d coordinate systems, for the coordinate + // planes; these are our references, present in every sketch. + Request r = {}; + r.type = Request::WORKPLANE; + r.group = Group::HGROUP_REFERENCES; + r.workplane = Entity::FREE_IN_3D; + + r.h = Request::HREQUEST_REFERENCE_XY; + SK.request.Add(&r); + + r.h = Request::HREQUEST_REFERENCE_YZ; + SK.request.Add(&r); + + r.h = Request::HREQUEST_REFERENCE_ZX; + SK.request.Add(&r); + + CreateDefaultDrawingGroup(); +} + +const SolveSpaceUI::SaveTable SolveSpaceUI::SAVED[] = { + { 'g', "Group.h.v", 'x', &(SS.sv.g.h.v) }, + { 'g', "Group.type", 'd', &(SS.sv.g.type) }, + { 'g', "Group.order", 'd', &(SS.sv.g.order) }, + { 'g', "Group.name", 'S', &(SS.sv.g.name) }, + { 'g', "Group.activeWorkplane.v", 'x', &(SS.sv.g.activeWorkplane.v) }, + { 'g', "Group.opA.v", 'x', &(SS.sv.g.opA.v) }, + { 'g', "Group.opB.v", 'x', &(SS.sv.g.opB.v) }, + { 'g', "Group.valA", 'f', &(SS.sv.g.valA) }, + { 'g', "Group.valB", 'f', &(SS.sv.g.valB) }, + { 'g', "Group.valC", 'f', &(SS.sv.g.valB) }, + { 'g', "Group.color", 'c', &(SS.sv.g.color) }, + { 'g', "Group.subtype", 'd', &(SS.sv.g.subtype) }, + { 'g', "Group.skipFirst", 'b', &(SS.sv.g.skipFirst) }, + { 'g', "Group.meshCombine", 'd', &(SS.sv.g.meshCombine) }, + { 'g', "Group.forceToMesh", 'd', &(SS.sv.g.forceToMesh) }, + { 'g', "Group.predef.q.w", 'f', &(SS.sv.g.predef.q.w) }, + { 'g', "Group.predef.q.vx", 'f', &(SS.sv.g.predef.q.vx) }, + { 'g', "Group.predef.q.vy", 'f', &(SS.sv.g.predef.q.vy) }, + { 'g', "Group.predef.q.vz", 'f', &(SS.sv.g.predef.q.vz) }, + { 'g', "Group.predef.origin.v", 'x', &(SS.sv.g.predef.origin.v) }, + { 'g', "Group.predef.entityB.v", 'x', &(SS.sv.g.predef.entityB.v) }, + { 'g', "Group.predef.entityC.v", 'x', &(SS.sv.g.predef.entityC.v) }, + { 'g', "Group.predef.swapUV", 'b', &(SS.sv.g.predef.swapUV) }, + { 'g', "Group.predef.negateU", 'b', &(SS.sv.g.predef.negateU) }, + { 'g', "Group.predef.negateV", 'b', &(SS.sv.g.predef.negateV) }, + { 'g', "Group.visible", 'b', &(SS.sv.g.visible) }, + { 'g', "Group.suppress", 'b', &(SS.sv.g.suppress) }, + { 'g', "Group.relaxConstraints", 'b', &(SS.sv.g.relaxConstraints) }, + { 'g', "Group.allowRedundant", 'b', &(SS.sv.g.allowRedundant) }, + { 'g', "Group.allDimsReference", 'b', &(SS.sv.g.allDimsReference) }, + { 'g', "Group.scale", 'f', &(SS.sv.g.scale) }, + { 'g', "Group.remap", 'M', &(SS.sv.g.remap) }, + { 'g', "Group.impFile", 'S', &(SS.sv.g.linkFile) }, + { 'g', "Group.impFileRel", 'S', &(SS.sv.g.linkFileRel) }, + + { 'p', "Param.h.v.", 'x', &(SS.sv.p.h.v) }, + { 'p', "Param.val", 'f', &(SS.sv.p.val) }, + + { 'r', "Request.h.v", 'x', &(SS.sv.r.h.v) }, + { 'r', "Request.type", 'd', &(SS.sv.r.type) }, + { 'r', "Request.extraPoints", 'd', &(SS.sv.r.extraPoints) }, + { 'r', "Request.workplane.v", 'x', &(SS.sv.r.workplane.v) }, + { 'r', "Request.group.v", 'x', &(SS.sv.r.group.v) }, + { 'r', "Request.construction", 'b', &(SS.sv.r.construction) }, + { 'r', "Request.style", 'x', &(SS.sv.r.style) }, + { 'r', "Request.str", 'S', &(SS.sv.r.str) }, + { 'r', "Request.font", 'S', &(SS.sv.r.font) }, + + { 'e', "Entity.h.v", 'x', &(SS.sv.e.h.v) }, + { 'e', "Entity.type", 'd', &(SS.sv.e.type) }, + { 'e', "Entity.construction", 'b', &(SS.sv.e.construction) }, + { 'e', "Entity.style", 'x', &(SS.sv.e.style) }, + { 'e', "Entity.str", 'S', &(SS.sv.e.str) }, + { 'e', "Entity.font", 'S', &(SS.sv.e.font) }, + { 'e', "Entity.point[0].v", 'x', &(SS.sv.e.point[0].v) }, + { 'e', "Entity.point[1].v", 'x', &(SS.sv.e.point[1].v) }, + { 'e', "Entity.point[2].v", 'x', &(SS.sv.e.point[2].v) }, + { 'e', "Entity.point[3].v", 'x', &(SS.sv.e.point[3].v) }, + { 'e', "Entity.point[4].v", 'x', &(SS.sv.e.point[4].v) }, + { 'e', "Entity.point[5].v", 'x', &(SS.sv.e.point[5].v) }, + { 'e', "Entity.point[6].v", 'x', &(SS.sv.e.point[6].v) }, + { 'e', "Entity.point[7].v", 'x', &(SS.sv.e.point[7].v) }, + { 'e', "Entity.point[8].v", 'x', &(SS.sv.e.point[8].v) }, + { 'e', "Entity.point[9].v", 'x', &(SS.sv.e.point[9].v) }, + { 'e', "Entity.point[10].v", 'x', &(SS.sv.e.point[10].v) }, + { 'e', "Entity.point[11].v", 'x', &(SS.sv.e.point[11].v) }, + { 'e', "Entity.extraPoints", 'd', &(SS.sv.e.extraPoints) }, + { 'e', "Entity.normal.v", 'x', &(SS.sv.e.normal.v) }, + { 'e', "Entity.distance.v", 'x', &(SS.sv.e.distance.v) }, + { 'e', "Entity.workplane.v", 'x', &(SS.sv.e.workplane.v) }, + { 'e', "Entity.actPoint.x", 'f', &(SS.sv.e.actPoint.x) }, + { 'e', "Entity.actPoint.y", 'f', &(SS.sv.e.actPoint.y) }, + { 'e', "Entity.actPoint.z", 'f', &(SS.sv.e.actPoint.z) }, + { 'e', "Entity.actNormal.w", 'f', &(SS.sv.e.actNormal.w) }, + { 'e', "Entity.actNormal.vx", 'f', &(SS.sv.e.actNormal.vx) }, + { 'e', "Entity.actNormal.vy", 'f', &(SS.sv.e.actNormal.vy) }, + { 'e', "Entity.actNormal.vz", 'f', &(SS.sv.e.actNormal.vz) }, + { 'e', "Entity.actDistance", 'f', &(SS.sv.e.actDistance) }, + { 'e', "Entity.actVisible", 'b', &(SS.sv.e.actVisible), }, + + + { 'c', "Constraint.h.v", 'x', &(SS.sv.c.h.v) }, + { 'c', "Constraint.type", 'd', &(SS.sv.c.type) }, + { 'c', "Constraint.group.v", 'x', &(SS.sv.c.group.v) }, + { 'c', "Constraint.workplane.v", 'x', &(SS.sv.c.workplane.v) }, + { 'c', "Constraint.valA", 'f', &(SS.sv.c.valA) }, + { 'c', "Constraint.ptA.v", 'x', &(SS.sv.c.ptA.v) }, + { 'c', "Constraint.ptB.v", 'x', &(SS.sv.c.ptB.v) }, + { 'c', "Constraint.entityA.v", 'x', &(SS.sv.c.entityA.v) }, + { 'c', "Constraint.entityB.v", 'x', &(SS.sv.c.entityB.v) }, + { 'c', "Constraint.entityC.v", 'x', &(SS.sv.c.entityC.v) }, + { 'c', "Constraint.entityD.v", 'x', &(SS.sv.c.entityD.v) }, + { 'c', "Constraint.other", 'b', &(SS.sv.c.other) }, + { 'c', "Constraint.other2", 'b', &(SS.sv.c.other2) }, + { 'c', "Constraint.reference", 'b', &(SS.sv.c.reference) }, + { 'c', "Constraint.comment", 'S', &(SS.sv.c.comment) }, + { 'c', "Constraint.disp.offset.x", 'f', &(SS.sv.c.disp.offset.x) }, + { 'c', "Constraint.disp.offset.y", 'f', &(SS.sv.c.disp.offset.y) }, + { 'c', "Constraint.disp.offset.z", 'f', &(SS.sv.c.disp.offset.z) }, + { 'c', "Constraint.disp.style", 'x', &(SS.sv.c.disp.style) }, + + { 's', "Style.h.v", 'x', &(SS.sv.s.h.v) }, + { 's', "Style.name", 'S', &(SS.sv.s.name) }, + { 's', "Style.width", 'f', &(SS.sv.s.width) }, + { 's', "Style.widthAs", 'd', &(SS.sv.s.widthAs) }, + { 's', "Style.textHeight", 'f', &(SS.sv.s.textHeight) }, + { 's', "Style.textHeightAs", 'd', &(SS.sv.s.textHeightAs) }, + { 's', "Style.textAngle", 'f', &(SS.sv.s.textAngle) }, + { 's', "Style.textOrigin", 'x', &(SS.sv.s.textOrigin) }, + { 's', "Style.color", 'c', &(SS.sv.s.color) }, + { 's', "Style.fillColor", 'c', &(SS.sv.s.fillColor) }, + { 's', "Style.filled", 'b', &(SS.sv.s.filled) }, + { 's', "Style.visible", 'b', &(SS.sv.s.visible) }, + { 's', "Style.exportable", 'b', &(SS.sv.s.exportable) }, + { 's', "Style.stippleType", 'd', &(SS.sv.s.stippleType) }, + { 's', "Style.stippleScale", 'f', &(SS.sv.s.stippleScale) }, + + { 0, NULL, 0, NULL } +}; + +struct SAVEDptr { + IdList &M() { return *((IdList *)this); } + std::string &S() { return *((std::string *)this); } + bool &b() { return *((bool *)this); } + RgbaColor &c() { return *((RgbaColor *)this); } + int &d() { return *((int *)this); } + double &f() { return *((double *)this); } + uint32_t &x() { return *((uint32_t *)this); } +}; + +void SolveSpaceUI::SaveUsingTable(int type) { + int i; + for(i = 0; SAVED[i].type != 0; i++) { + if(SAVED[i].type != type) continue; + + int fmt = SAVED[i].fmt; + SAVEDptr *p = (SAVEDptr *)SAVED[i].ptr; + // Any items that aren't specified are assumed to be zero + if(fmt == 'S' && p->S().empty()) continue; + if(fmt == 'd' && p->d() == 0) continue; + if(fmt == 'f' && EXACT(p->f() == 0.0)) continue; + if(fmt == 'x' && p->x() == 0) continue; + + fprintf(fh, "%s=", SAVED[i].desc); + switch(fmt) { + case 'S': fprintf(fh, "%s", p->S().c_str()); break; + case 'b': fprintf(fh, "%d", p->b() ? 1 : 0); break; + case 'c': fprintf(fh, "%08x", p->c().ToPackedInt()); break; + case 'd': fprintf(fh, "%d", p->d()); break; + case 'f': fprintf(fh, "%.20f", p->f()); break; + case 'x': fprintf(fh, "%08x", p->x()); break; + + case 'M': { + int j; + fprintf(fh, "{\n"); + for(j = 0; j < p->M().n; j++) { + EntityMap *em = &(p->M().elem[j]); + fprintf(fh, " %d %08x %d\n", + em->h.v, em->input.v, em->copyNumber); + } + fprintf(fh, "}"); + break; + } + + default: oops(); + } + fprintf(fh, "\n"); + } +} + +bool SolveSpaceUI::SaveToFile(const std::string &filename) { + // Make sure all the entities are regenerated up to date, since they + // will be exported. We reload the linked files because that rewrites + // the linkFileRel for our possibly-new filename. + SS.ScheduleShowTW(); + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + + fh = ssfopen(filename, "wb"); + if(!fh) { + Error("Couldn't write to file '%s'", filename.c_str()); + return false; + } + + fprintf(fh, "%s\n\n\n", VERSION_STRING); + + int i, j; + for(i = 0; i < SK.group.n; i++) { + sv.g = SK.group.elem[i]; + SaveUsingTable('g'); + fprintf(fh, "AddGroup\n\n"); + } + + for(i = 0; i < SK.param.n; i++) { + sv.p = SK.param.elem[i]; + SaveUsingTable('p'); + fprintf(fh, "AddParam\n\n"); + } + + for(i = 0; i < SK.request.n; i++) { + sv.r = SK.request.elem[i]; + SaveUsingTable('r'); + fprintf(fh, "AddRequest\n\n"); + } + + for(i = 0; i < SK.entity.n; i++) { + (SK.entity.elem[i]).CalculateNumerical(true); + sv.e = SK.entity.elem[i]; + SaveUsingTable('e'); + fprintf(fh, "AddEntity\n\n"); + } + + for(i = 0; i < SK.constraint.n; i++) { + sv.c = SK.constraint.elem[i]; + SaveUsingTable('c'); + fprintf(fh, "AddConstraint\n\n"); + } + + for(i = 0; i < SK.style.n; i++) { + sv.s = SK.style.elem[i]; + if(sv.s.h.v >= Style::FIRST_CUSTOM) { + SaveUsingTable('s'); + fprintf(fh, "AddStyle\n\n"); + } + } + + // A group will have either a mesh or a shell, but not both; but the code + // to print either of those just does nothing if the mesh/shell is empty. + + Group *g = SK.GetGroup(SK.groupOrder.elem[SK.groupOrder.n - 1]); + SMesh *m = &g->runningMesh; + for(i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + fprintf(fh, "Triangle %08x %08x " + "%.20f %.20f %.20f %.20f %.20f %.20f %.20f %.20f %.20f\n", + tr->meta.face, tr->meta.color.ToPackedInt(), + CO(tr->a), CO(tr->b), CO(tr->c)); + } + + SShell *s = &g->runningShell; + SSurface *srf; + for(srf = s->surface.First(); srf; srf = s->surface.NextAfter(srf)) { + fprintf(fh, "Surface %08x %08x %08x %d %d\n", + srf->h.v, srf->color.ToPackedInt(), srf->face, srf->degm, srf->degn); + for(i = 0; i <= srf->degm; i++) { + for(j = 0; j <= srf->degn; j++) { + fprintf(fh, "SCtrl %d %d %.20f %.20f %.20f Weight %20.20f\n", + i, j, CO(srf->ctrl[i][j]), srf->weight[i][j]); + } + } + + STrimBy *stb; + for(stb = srf->trim.First(); stb; stb = srf->trim.NextAfter(stb)) { + fprintf(fh, "TrimBy %08x %d %.20f %.20f %.20f %.20f %.20f %.20f\n", + stb->curve.v, stb->backwards ? 1 : 0, + CO(stb->start), CO(stb->finish)); + } + + fprintf(fh, "AddSurface\n"); + } + SCurve *sc; + for(sc = s->curve.First(); sc; sc = s->curve.NextAfter(sc)) { + fprintf(fh, "Curve %08x %d %d %08x %08x\n", + sc->h.v, + sc->isExact ? 1 : 0, sc->exact.deg, + sc->surfA.v, sc->surfB.v); + + if(sc->isExact) { + for(i = 0; i <= sc->exact.deg; i++) { + fprintf(fh, "CCtrl %d %.20f %.20f %.20f Weight %.20f\n", + i, CO(sc->exact.ctrl[i]), sc->exact.weight[i]); + } + } + SCurvePt *scpt; + for(scpt = sc->pts.First(); scpt; scpt = sc->pts.NextAfter(scpt)) { + fprintf(fh, "CurvePt %d %.20f %.20f %.20f\n", + scpt->vertex ? 1 : 0, CO(scpt->p)); + } + + fprintf(fh, "AddCurve\n"); + } + + fclose(fh); + + return true; +} + +void SolveSpaceUI::LoadUsingTable(char *key, char *val) { + int i; + for(i = 0; SAVED[i].type != 0; i++) { + if(strcmp(SAVED[i].desc, key)==0) { + SAVEDptr *p = (SAVEDptr *)SAVED[i].ptr; + unsigned int u = 0; + switch(SAVED[i].fmt) { + case 'S': p->S() = val; break; + case 'b': p->b() = (atoi(val) != 0); break; + case 'd': p->d() = atoi(val); break; + case 'f': p->f() = atof(val); break; + case 'x': sscanf(val, "%x", &u); p->x()= u; break; + + case 'c': + sscanf(val, "%x", &u); + p->c() = RgbaColor::FromPackedInt(u); + break; + + case 'P': + p->S() = val; + break; + + case 'M': { + // Don't clear this list! When the group gets added, it + // makes a shallow copy, so that would result in us + // freeing memory that we want to keep around. Just + // zero it out so that new memory is allocated. + p->M() = {}; + for(;;) { + EntityMap em; + char line2[1024]; + if (fgets(line2, (int)sizeof(line2), fh) == NULL) + break; + if(sscanf(line2, "%d %x %d", &(em.h.v), &(em.input.v), + &(em.copyNumber)) == 3) + { + p->M().Add(&em); + } else { + break; + } + } + break; + } + + default: oops(); + } + break; + } + } + if(SAVED[i].type == 0) { + fileLoadError = true; + } +} + +bool SolveSpaceUI::LoadFromFile(const std::string &filename) { + allConsistent = false; + fileLoadError = false; + + fh = ssfopen(filename, "rb"); + if(!fh) { + Error("Couldn't read from file '%s'", filename.c_str()); + return false; + } + + ClearExisting(); + + sv = {}; + sv.g.scale = 1; // default is 1, not 0; so legacy files need this + Style::FillDefaultStyle(&sv.s); + + char line[1024]; + while(fgets(line, (int)sizeof(line), fh)) { + char *s = strchr(line, '\n'); + if(s) *s = '\0'; + // We should never get files with \r characters in them, but mailers + // will sometimes mangle attachments. + s = strchr(line, '\r'); + if(s) *s = '\0'; + + if(*line == '\0') continue; + + char *e = strchr(line, '='); + if(e) { + *e = '\0'; + char *key = line, *val = e+1; + LoadUsingTable(key, val); + } else if(strcmp(line, "AddGroup")==0) { + // legacy files have a spurious dependency between linked groups + // and their parent groups, remove + if(sv.g.type == Group::LINKED) + sv.g.opA.v = 0; + + SK.group.Add(&(sv.g)); + sv.g = {}; + sv.g.scale = 1; // default is 1, not 0; so legacy files need this + } else if(strcmp(line, "AddParam")==0) { + // params are regenerated, but we want to preload the values + // for initial guesses + SK.param.Add(&(sv.p)); + sv.p = {}; + } else if(strcmp(line, "AddEntity")==0) { + // entities are regenerated + } else if(strcmp(line, "AddRequest")==0) { + SK.request.Add(&(sv.r)); + sv.r = {}; + } else if(strcmp(line, "AddConstraint")==0) { + SK.constraint.Add(&(sv.c)); + sv.c = {}; + } else if(strcmp(line, "AddStyle")==0) { + SK.style.Add(&(sv.s)); + sv.s = {}; + Style::FillDefaultStyle(&sv.s); + } else if(strcmp(line, VERSION_STRING)==0) { + // do nothing, version string + } else if(StrStartsWith(line, "Triangle ") || + StrStartsWith(line, "Surface ") || + StrStartsWith(line, "SCtrl ") || + StrStartsWith(line, "TrimBy ") || + StrStartsWith(line, "Curve ") || + StrStartsWith(line, "CCtrl ") || + StrStartsWith(line, "CurvePt ") || + strcmp(line, "AddSurface")==0 || + strcmp(line, "AddCurve")==0) + { + // ignore the mesh or shell, since we regenerate that + } else { + fileLoadError = true; + } + } + + fclose(fh); + + if(fileLoadError) { + Error("Unrecognized data in file. This file may be corrupt, or " + "from a new version of the program."); + // At least leave the program in a non-crashing state. + if(SK.group.n == 0) { + NewFile(); + } + } + + return true; +} + +bool SolveSpaceUI::LoadEntitiesFromFile(const std::string &filename, EntityList *le, + SMesh *m, SShell *sh) +{ + SSurface srf = {}; + SCurve crv = {}; + + fh = ssfopen(filename, "rb"); + if(!fh) return false; + + le->Clear(); + sv = {}; + + char line[1024]; + while(fgets(line, (int)sizeof(line), fh)) { + char *s = strchr(line, '\n'); + if(s) *s = '\0'; + // We should never get files with \r characters in them, but mailers + // will sometimes mangle attachments. + s = strchr(line, '\r'); + if(s) *s = '\0'; + + if(*line == '\0') continue; + + char *e = strchr(line, '='); + if(e) { + *e = '\0'; + char *key = line, *val = e+1; + LoadUsingTable(key, val); + } else if(strcmp(line, "AddGroup")==0) { + // Don't leak memory; these get allocated whether we want them + // or not. + sv.g.remap.Clear(); + } else if(strcmp(line, "AddParam")==0) { + + } else if(strcmp(line, "AddEntity")==0) { + le->Add(&(sv.e)); + sv.e = {}; + } else if(strcmp(line, "AddRequest")==0) { + + } else if(strcmp(line, "AddConstraint")==0) { + + } else if(strcmp(line, "AddStyle")==0) { + + } else if(strcmp(line, VERSION_STRING)==0) { + + } else if(StrStartsWith(line, "Triangle ")) { + STriangle tr = {}; + unsigned int rgba = 0; + if(sscanf(line, "Triangle %x %x " + "%lf %lf %lf %lf %lf %lf %lf %lf %lf", + &(tr.meta.face), &rgba, + &(tr.a.x), &(tr.a.y), &(tr.a.z), + &(tr.b.x), &(tr.b.y), &(tr.b.z), + &(tr.c.x), &(tr.c.y), &(tr.c.z)) != 11) { + oops(); + } + tr.meta.color = RgbaColor::FromPackedInt((uint32_t)rgba); + m->AddTriangle(&tr); + } else if(StrStartsWith(line, "Surface ")) { + unsigned int rgba = 0; + if(sscanf(line, "Surface %x %x %x %d %d", + &(srf.h.v), &rgba, &(srf.face), + &(srf.degm), &(srf.degn)) != 5) { + oops(); + } + srf.color = RgbaColor::FromPackedInt((uint32_t)rgba); + } else if(StrStartsWith(line, "SCtrl ")) { + int i, j; + Vector c; + double w; + if(sscanf(line, "SCtrl %d %d %lf %lf %lf Weight %lf", + &i, &j, &(c.x), &(c.y), &(c.z), &w) != 6) + { + oops(); + } + srf.ctrl[i][j] = c; + srf.weight[i][j] = w; + } else if(StrStartsWith(line, "TrimBy ")) { + STrimBy stb = {}; + int backwards; + if(sscanf(line, "TrimBy %x %d %lf %lf %lf %lf %lf %lf", + &(stb.curve.v), &backwards, + &(stb.start.x), &(stb.start.y), &(stb.start.z), + &(stb.finish.x), &(stb.finish.y), &(stb.finish.z)) != 8) + { + oops(); + } + stb.backwards = (backwards != 0); + srf.trim.Add(&stb); + } else if(strcmp(line, "AddSurface")==0) { + sh->surface.Add(&srf); + srf = {}; + } else if(StrStartsWith(line, "Curve ")) { + int isExact; + if(sscanf(line, "Curve %x %d %d %x %x", + &(crv.h.v), + &(isExact), + &(crv.exact.deg), + &(crv.surfA.v), &(crv.surfB.v)) != 5) + { + oops(); + } + crv.isExact = (isExact != 0); + } else if(StrStartsWith(line, "CCtrl ")) { + int i; + Vector c; + double w; + if(sscanf(line, "CCtrl %d %lf %lf %lf Weight %lf", + &i, &(c.x), &(c.y), &(c.z), &w) != 5) + { + oops(); + } + crv.exact.ctrl[i] = c; + crv.exact.weight[i] = w; + } else if(StrStartsWith(line, "CurvePt ")) { + SCurvePt scpt; + int vertex; + if(sscanf(line, "CurvePt %d %lf %lf %lf", + &vertex, + &(scpt.p.x), &(scpt.p.y), &(scpt.p.z)) != 4) + { + oops(); + } + scpt.vertex = (vertex != 0); + crv.pts.Add(&scpt); + } else if(strcmp(line, "AddCurve")==0) { + sh->curve.Add(&crv); + crv = {}; + } else { + oops(); + } + } + + fclose(fh); + return true; +} + +//----------------------------------------------------------------------------- +// Handling of the relative-absolute path transformations for links +//----------------------------------------------------------------------------- +static std::vector Split(const std::string &haystack, const std::string &needle) +{ + std::vector result; + + size_t oldpos = 0, pos = 0; + while(true) { + oldpos = pos; + pos = haystack.find(needle, pos); + if(pos == std::string::npos) break; + result.push_back(haystack.substr(oldpos, pos - oldpos)); + pos += needle.length(); + } + + if(oldpos != haystack.length() - 1) + result.push_back(haystack.substr(oldpos)); + + return result; +} + +static std::string Join(const std::vector &parts, const std::string &separator) +{ + bool first = true; + std::string result; + for(auto &part : parts) { + if(!first) result += separator; + result += part; + first = false; + } + return result; +} + +static bool PlatformPathEqual(const std::string &a, const std::string &b) +{ + // Case-sensitivity is actually per-volume on both Windows and OS X, + // but it is extremely tedious to implement and test for little benefit. +#if defined(WIN32) + std::wstring wa = Widen(a), wb = Widen(b); + return std::equal(wa.begin(), wa.end(), wb.begin(), /*wb.end(),*/ + [](wchar_t wca, wchar_t wcb) { return towlower(wca) == towlower(wcb); }); +#elif defined(__APPLE__) + return !strcasecmp(a.c_str(), b.c_str()); +#else + return a == b; +#endif +} + +static std::string MakePathRelative(const std::string &base, const std::string &path) +{ + std::vector baseParts = Split(base, PATH_SEP), + pathParts = Split(path, PATH_SEP), + resultParts; + baseParts.pop_back(); + + size_t common; + for(common = 0; common < baseParts.size() && common < pathParts.size(); common++) { + if(!PlatformPathEqual(baseParts[common], pathParts[common])) + break; + } + + for(size_t i = common; i < baseParts.size(); i++) + resultParts.push_back(".."); + + resultParts.insert(resultParts.end(), + pathParts.begin() + common, pathParts.end()); + + return Join(resultParts, PATH_SEP); +} + +static std::string MakePathAbsolute(const std::string &base, const std::string &path) +{ + std::vector resultParts = Split(base, PATH_SEP), + pathParts = Split(path, PATH_SEP); + resultParts.pop_back(); + + for(auto &part : pathParts) { + if(part == ".") { + /* do nothing */ + } else if(part == "..") { + if(resultParts.empty()) oops(); + resultParts.pop_back(); + } else { + resultParts.push_back(part); + } + } + + return Join(resultParts, PATH_SEP); +} + +static void PathSepNormalize(std::string &filename) +{ + for(size_t i = 0; i < filename.length(); i++) { + if(filename[i] == '\\') + filename[i] = '/'; + } +} + +static std::string PathSepPlatformToUNIX(const std::string &filename) +{ +#if defined(WIN32) + std::string result = filename; + for(size_t i = 0; i < result.length(); i++) { + if(result[i] == '\\') + result[i] = '/'; + } + return result; +#else + return filename; +#endif +} + +static std::string PathSepUNIXToPlatform(const std::string &filename) +{ +#if defined(WIN32) + std::string result = filename; + for(size_t i = 0; i < result.length(); i++) { + if(result[i] == '/') + result[i] = '\\'; + } + return result; +#else + return filename; +#endif +} + +bool SolveSpaceUI::ReloadAllImported(bool canCancel) +{ + std::map linkMap; + allConsistent = false; + + int i; + for(i = 0; i < SK.group.n; i++) { + Group *g = &(SK.group.elem[i]); + if(g->type != Group::LINKED) continue; + + if(isalpha(g->linkFile[0]) && g->linkFile[1] == ':') { + // Make sure that g->linkFileRel always contains a relative path + // in an UNIX format, even after we load an old file which had + // the path in Windows format + PathSepNormalize(g->linkFileRel); + } + + g->impEntity.Clear(); + g->impMesh.Clear(); + g->impShell.Clear(); + + if(linkMap.count(g->linkFile)) { + std::string newPath = linkMap[g->linkFile]; + if(!newPath.empty()) + g->linkFile = newPath; + } + + // In a newly created group we only have an absolute path. + if(!g->linkFileRel.empty()) { + std::string rel = PathSepUNIXToPlatform(g->linkFileRel); + std::string fromRel = MakePathAbsolute(SS.saveFile, rel); + FILE *test = ssfopen(fromRel, "rb"); + if(test) { + fclose(test); + // Okay, exists; update the absolute path. + g->linkFile = fromRel; + } else { + // It doesn't exist. Perhaps the file was moved but the tree wasn't, and we + // can use the absolute filename to get us back. The relative path will be + // updated below. + } + } + +try_load_file: + if(LoadEntitiesFromFile(g->linkFile, &(g->impEntity), &(g->impMesh), &(g->impShell))) + { + if(!SS.saveFile.empty()) { + // Record the linked file's name relative to our filename; + // if the entire tree moves, then everything will still work + std::string rel = MakePathRelative(SS.saveFile, g->linkFile); + g->linkFileRel = PathSepPlatformToUNIX(rel); + } else { + // We're not yet saved, so can't make it absolute. + // This will only be used for display purposes, as SS.saveFile + // is always nonempty when we are actually writing anything. + g->linkFileRel = g->linkFile; + } + } else if(!linkMap.count(g->linkFile)) { + switch(LocateImportedFileYesNoCancel(g->linkFileRel, canCancel)) { + case DIALOG_YES: { + std::string oldImpFile = g->linkFile; + if(!GetOpenFile(&g->linkFile, "", SlvsFileFilter)) { + if(canCancel) + return false; + break; + } else { + linkMap[oldImpFile] = g->linkFile; + goto try_load_file; + } + } + + case DIALOG_NO: + linkMap[g->linkFile] = ""; + /* Geometry will be pruned by GenerateAll(). */ + break; + + case DIALOG_CANCEL: + return false; + } + } else { + // User was already asked to and refused to locate a missing + // linked file. + } + } + + return true; +} + diff --git a/src/fonts/private/0-check-false.png b/src/fonts/private/0-check-false.png new file mode 100644 index 0000000000000000000000000000000000000000..b9020c33b8c437c8617a537d3b03c173e421b2f0 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl%OyKpTSt fL*frHg#!$+84N28+$Y-tZDH_q^>bP0l+XkK*)B9y literal 0 HcmV?d00001 diff --git a/src/fonts/private/1-check-true.png b/src/fonts/private/1-check-true.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6a42c554193d2abbd2b4a8023009fb8864be24 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLlS!3>*qfc7zXy85}S Ib4q9e0Hf$QhX4Qo literal 0 HcmV?d00001 diff --git a/src/fonts/private/3-radio-true.png b/src/fonts/private/3-radio-true.png new file mode 100644 index 0000000000000000000000000000000000000000..5322f587264a18b394550c53b8803bc5038d9612 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl#%q#+J&w=`!859mMBwb+G8Fuk* Q570^mPgg&ebxsLQ0A3F|lmGw# literal 0 HcmV?d00001 diff --git a/src/fonts/private/4-stipple-dot.png b/src/fonts/private/4-stipple-dot.png new file mode 100644 index 0000000000000000000000000000000000000000..52fc21951037b0598c36114f0556b5de17103530 GIT binary patch literal 936 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±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�a=vy4P^}16!IGs&Nc-b}!yr94Jetow&CVzL_I3BZP z6Sojs^t{Ps+2E)%jgSTnAC#sV$7f-T&UDK4^|YJ3PAHa`3QWO3`tmt@srd7urf^Tn zfM}#D(qHVhZNOo*uHiD~^!`(6W`gVT0~dDl@HgIGKs*lM5Qi$gYb|r$ zO`-q^Wl8i2L6{GX?Lq9UJanq}<@`RYV!C9{$qhdPf3{ocN!zLGt|Z7hR_Ub{S!rVu%S@1gpJ+PNdz;#h-x?m-BzknMiB#N% za7^RQc`#zof-^XH(QHnHJ3_5qAJ|r zOxse&VpDH9Gy&E51kA$rTk4Ahs1!WN$Jp+>^F+Ao@H>y!?Vg)lA7n7&N!*S1@{dz6 z;?P8bU9JR?2dQIw<5wQ`40FXCwFx)03NTZ`jT#_wP9LFZSt84tXkG=>FPEWjspVS^ z7Ko=Y`RG211-Jo(z|}6a2sj;^l%o95J<^r@Vmtlz(opJ@&q!5Igf_s z0)TRVYcu?1HQN`Y3i~gwt{}m+`Dj0g;FC?}q!c){t|_V_;#_g7=#PZyi&hBRO?)0! zqa)CSx}Hjq8-R}TQQ8gdp`*-#BY=m;H+CvyW;KqPMC!Wsnb^= z*H<80)tqzq5oJ(}-kD2;hW;a8=mV+{+q0OpQ%7B0G2gKk< z{7yX<~PNdsPiiG4}cX5FXkqkc}u0IqW+Yx zO~)+CFQY_2(h7Iv)KIIB+0c=~!@)~;R!eu~;GG4K9f~QFy&AZOtO!@?~_p)Z8uA&Fu;OUElP7W`tk%{QGXhmC9vBi~$NJx`XV} zYYlogYukMkG;s+tp!FWN+3WlxJs}-uM8RS2+YM#Lio81Ad}1E9rPZhIM&aWOLu)zS z2WX2r1tZ0-UyaEvWpFE>em7wHM$qGiPYxs)4KZ4^Z^PaF&TmS%F}j$)>gm+BVgB1c zecU~q7qMhJlYw<=rv)rVo79F@3T+}(K*%l&J9V#{f@LE&K2815BFCXm=DxI>F%$J) zy>c1_IJzY`hMgDOtDY!2AvI?W~PfFGb=^Quw%rnk7q(r>Cj zm}J8;oGDjD4lkwJo{H9BiVvVHP2eb|6Y0g1gK1*iZd4JEN}HV-oJX@7wCzpz!?oLC z-TW$>x4hv6$^v%l^i@`Wv@d1Ms7Y`P1y?i|8q7H023K)18`mzb3ziG+h zAFZzRa1`cBZr+@1qFt_^HWt^J)K(vRD+G59h?#H}b(-3W7uksyjjiGJU6A74=A3bE z2&$L1Sm+uw>~5x;m_w1WYI;(w5v#+H!@u*%M*L5M(L02rXn-FHndtZN!)ug$CD2FJ z)W5u4+Y*IP`TB8xWEpJ?$ewCy)o5^RW$8KLddmXkTnvmvJ+)jZYu0kPVqI+4Jkh(@ zy>-@b(Au0sh_@bL#iTstOO%G=rDidS?Xe|&tFTmr#M^E7>?09#EoSE+g^cZ5^*ns* zJ}3Y_h56A0d6DJCD;Y~MKe4@v9j*uzFlTbnGyeK6lQz1=H2dpkKJJu$UBC2;FwVY+RLMKiE*I+x7{&+ z-b`!BZP3_u#IEwx3SbrumI>Os>($QRd~q^GW8>(>=CSD()GMT6o59btkC|xpNpaNj zM`nRgM~&m;CaGFvlP#gLUVZ$l;KfwJYT$=>n?L`i$~T9d$1v&Q(Q%t*sJ-3PkP{XQ zP{}**!siD7U(&lmpHaaR51x+7-NeE^%V?>i+4_j=CX$epz zAaZA{gF$Nns#l^DiWs?StrUz7*8d-vIKwLL8C@SRwi;Nq6x zP;4zFV#!mhM%3G?e1yplddd$Ler6ZaFm?DhK6ZrJ%IQ!uTp})9fsi$CDk4bt_aFAZ zB5rp7T>aNkeYGjhkNYnc%Tnd#y2-Dby-(f#P`&m5!}frM=0D%EuhJwJq5+@M_`7eF zWvWw*Xy*SUnX$HDBTegV_x8PDxhwMXhQ@rtF3s*cwdy}b%1r!SPhjKjB@FGAvaFtx z5c0Dz%8Z*#e{VsO`gdQxA`Y`)kOP-J3dtfy1{$%%&}VTmZg7!o%ig_q^}M$>h?f`M z)vSo<14j&55Wb1jD8zk{KZeL?-JcuLLXCSYT?HWz*P4Hv_ko{i`5t>Aj34D+j;A1& z`*)fIm3H4){d7gyQr%AHx48BW)Pxu+S~hP?%Fm}DOyXsXRC+Cy7Qo$F>O(}I1|2Em zr8)kpSQ&8l;(*oVw_oJ(y8-X?O$BGB>__fhR^Br%Udmr9A|(`GkOenUruj|s@hVJ) znZLsd=iu}oB^Y>M-oi5h$z)H9?>VQkz4G8Yup{E%#uw|_8IL3;zqwj&s%nZm5VFuW zYhW8SJ{$9Nd_|5PxP}ktm47GEYKgLQ9oD{(u+821iC%6+)U6$YtOhkWynFu;6#YagWQ zy*!7!_9+#PgXn(}R`eBC)DiWPlZqTIz;d)uK=WoTQHn(04;){Fkz;)>1ki(kqWn^E z%0H{o1&oI=E8Dd6O)RCkG;MTAL^9X^dYxsUl55LIXR~$JXqjLMIk=5sn(CNP5>)Xw zFWP#izv9+#&}%)gE6qSPXU0w^@O#g$CeTg9DHx(DZ>ldes#2VU#bQd(`+dPYWPS6Y zCdzv&%Msz&sD?&DEy6-Amu$w~pbZqoJuZr|HeQLe*eiAXTEDxwq*KZSPjJ9_WFKm( z`4oGQj}5mv4I2`xyB|V27Jll;Cx2@l|9bl!k&j^(-5fKxe67s6`pV>4=p#Ne{=0LF z1-m%{1$^-xD0MHFO$-!EH1c|yR-S#`x{O-v6IB|DJ!UE1x&Fn9Y21J^{o8o7XY;BF z$Cpp_5NZ0Tj;EPlE)CY%C`%+!=?g)!<@ihka5pHP8eQW~?MefHJ$6bU@56Gp@Sj`- z?K+zH%tZN?DEnD z0SIC<5zb>L1bEB{S-T2CNIbZzO5x%XePxvb+5d!=}g%m0Cm$IwqBCBKg z$z-r)BC`GCW9UFmrIUlYB=W9n;+BCfv#?^uI-6(%=|-`u7KM~5Nr{$ z`d2>(Z=7!yQ}|{eP9`!r&eYAe{bao{@91L7n2NPbf$PRk^Jm}X%iQ+QsP8g$m-Km_}NIyoBqxD0Bj^>;E|0yU1 zf&qB%a}^_8fWm5I?Y+!E9E5gdx-&+a+Xw}#J~9v%bY)`ON*IidCfw5coTOsU#A*GI z2lPghQSqsB%>QAz!M5N+w*Qq_GfAH9=S)DM>%h`PvzBlzQ!Qymv9`qeuoe8f0i$#@yWj=MtBC|KJjqd zL+O=D>Gg$@zo{bqy>Hs|Yj-TKw1#gJQ!$4ZBI7YII-1hTKr_o0pY`dj!oso|Y~DJQ zE$t(d=O_?qCo#$(90*k?^^kI5BkpwRlB0_hN=n*#0eBcHz4X)4isxJ-^GR8>F(qQz ziU8{+9(5Yss!ZWvehMoS%br@2(~f3zOYihxqD*Aaky$gb2g6hh*Ps*P65ad<70tWP z|I*5e)PDXbx81P?Jjd=pXpK!GOn)3Ae>c#+ZmINF!4ijZINDb@zEa0L6a0iAvo?N7 zPdnn`rc@}fxY*fBOhuheRNy57Z#WCcghE6>J?5hq3=1v@W1`Z+#>l~bG;5n~IukaE zhBhG&Pnz?cwjQ(T1(Pv8S>|&Yfsu3Y2ejs?>GN^VY*M_>2?RLT{@~%jCcFEX`JhGq zIDF>fM+17(Sx7ovh>f*qy1q8E#R8@<`!wzXNfob{Fa^ZTKq z<((OTdztK8TmX2^8n17(v>UI*Kf=L-GslOvr`mzm7OwQ5k0?y7eNR!^DbfMzX(R^g zq%uT;;L|a&n%P#tgfK^YAuY(s>RdoCVvW*GC6G;C(2azW=R0IjqlLi{6{zFcz2MsNZ87!*MpNfw8*7-+P0w(F|iKk2K+=uHA%hC?*0h6D=F

mD{jb5@s*a7yj$7&a9&K9J10_6|COyDEG1t{qUTED?SLcV?k6jjb;d)Od9@@LVjdL1>#-$Sd z6}XD4pNCp~nE0UqTU+9CbK2YCt>U-$ZaybTi;@v05qzf#YdMdju&&{vshV)at@;a`Z&Y!jv|-}Jn^)qcQKq+=sLzX>oR=d0v^8gcOdfwON+oEX%M{&K+TzDFE&hX3?Mlb~1I zXTtTaav~B4Df@z@L1CY*3ES`dmy6#smFJ;x~rJMi2)mGser!glR z{q4Z4S6%7wKU&EbxwqmPP?--x&{|l;tFk=L!k|-o zn-FO6)smk?*{;}hUL$!#_nkH;*5~MOOh9mWC0~y~3Lh8%zoKQ5OYq|WTBqU&h}jJA zf|fJ~g7c5+D?2!Tt&romv^hjT(t-^$gAEn(7&kJSPSE4UnE`hsVB~PO{|>~dU3(&= zMG5|1Q*JoKZuIDF_UJW+*(Mw%P_E{v&YR zdR}==beXIvD3FZf{ki27Mi>z-YRGR;ND#r0^J-Gi zM!W*as(LB~L%8W_r?uh!)94Oq$6R>O-7%*1EPPSt5f7c$)cnddp%>i(L6x|>w!8kK zW+xxRj5TDK@HYtngCx5D*u6D;*G;y*fJyqVBEV5T5GDHIENT_`myl)gbx1lQ; zag5UrVSz@LMFgPDeo~l2p-LEErGyrxVyqbeo=_H2WT>Mm4uv{FfkC9vo5ZSjexQ5& zM2P!CKGCK;j6gT>+*SfaH*gG453G?0^9p47RYc+Iq|V~M{yjOIRshn4nY{@+2rD4b?(eGFwVw3W zm|~tVnZ74aHn9_E;QJI)PhJ%JRbg**>xXKBxu!h(34=LFQY-|sF{~--l(wWNJ}*m$3M z|45}tZiUQE;9Ug00{3E1cV|g^?&hDVkx(z+I6p-@^Mtm=w#v5nfy|9)@m^Zh3n+PR><8~^4n~ChsKj`*t2Q|RaY2* z6%vsDGU{$O4=2vODK~rX>moV)M*^#~x@!9beDWJh?rkGM!fwo<#q0oapzOZ(QNMD(2vcb?CiPm_B-NMQ*XK$?d6LW5LPEs)4 zUiLz?5L1u{-(t0j`a4J}OEo%0N;5bE+tC|NV5LY~6*<@VTQMo~M@0nr^r3rj#??r( zh*awEZ^UyW>uU9fOQfbG=#V*-tK<(`c<6`6;0O<fQG~fQGqKjs&Y#w7im*Hhg^rwPlVB(?u?{yLt?>1aw) zGZ8_w+SJCFAliH1bBDy|LdJGPwv6BUr7P*J#8o`T8>O>I6+Yy;;(?$D%&l)5J_M=7 z{u}^ISHG%G<-{qTo!)2;El{;heONNrd z{=dd67Wtb1z+W{%mo+u}f=)33c&t`rqWI6zEY~B;uCLZMfoKM@fZc2)`iY(RwE1uT z;OzwiM2}=uapE-G1!AhvC={JY6@8RHaC9x|28&Fe{B|Ls7w`6B@37~|7$Dj6g!6MG zAiQI|?6}JE4Euo=_-iIEDH!x#Hv>T(FtF>-Q2MPndilMCZ5{*KM8Z)AFvY&q`cv+>BbJl?m;8 zyiBLucBIcp6TS3WB0?hLmqsZp3a?|R%6Ltb1xAl*% zs~-(08_2DODe4e#`@Di0o(x=+oo=>M!&-$?wa<6&yVdg(+}%4kPZomO`03Cnk})Zk z7dj9VN5F%@*W9rGMtH=2UiKwgMY5X-kFXwxp7t^)M&j8pIbn~^X4*!2WbA=}p73uE zu}XvA-VyF>c#I$#ZleXb(W1$Hv3q2SdHRV1IK<&8L-yGzzN3^;iPM`red;`2r}0O+ zWp(|hb|dUPxUuJiu}@gWI-47F3S@jv(8FIAVyaNc4ic15NH`Q58|SrjW%O3YYj){r5671y2*tTDQ9CkJ^)q-38tfXIJwcObUz>22<} z=%)-apo;dCW7W@i-)iovV^!?ToBuuqAWN3D=K6x_gHKZP{rduVJ2*Y_iAK_n5(+DA_$+I6fstxP#N< zn$U_wfJc#N6VOPeomS$9l}V^=BSOv(c+6BIi4XocM2w*P;H$vKa9fNS+x3P5R~j33 z_d36JH1IY7+|24LzCPFW225hks>RYA$ragUpvrR{MmXZX+q3Mz-1*M2;!HSZBEh_f z!LUd4^f4>Ja&K$J6B`w6Umi>-BXs zd1+F5R^Z)F`UC>DEQx14!b>+TjxyW{?&Q}o#$(#v=%zNM11(}V(8JA8ok22!eo06A zBc=BNB##gu)?S^Wzf}trP2#3(CfvfIZ1W_nD&dV&&7%)JVWS+a%L;Qu089r4Wcnn2 zn&mw>amv8B63nB_XGK^*!TP5Gj8CkWE311KijIoB5*e-qz|to>*1P>4-AoHGc{^x4 zgBh>OY`I)z9P(Ub9d2QdMs!r9C5?Y1rJ8|RATW95_ADY{W}xOl%BW~H;T>z!n)h%|NtWA&flB~q^U zS}RV2K@^U))92#vo+H0I6kVmp=;8yg@jp`d(Epi{FQ|?)+MC*b_~nLh-N4-+L?0U5 z@|}LIulz-jye8aL0d5~K0i7Qe>>#jeeXe zc2+x(PcGeKC?Vz0*+CuDmCMdqz=zzZLiv%?8IY0L4Phsnz=Zu;SGrUN069}Pga|6R z-C8ud{#9=|=)1MV@ex3UOXqCfZ`7=Himittd{Pech@f#{x%S1p^>fse@q-X&P@Yha zdfr;O`Ka|}djI2t8^l{uk?mX##+hb1>S9H(L5|w~I^IDVOTe!74Zwg7!h^O^@Un2r20 zjNmaWbgx1s$s`01?VjKF;fPiiu7%jx$s@5LIUVWhc`CIvS=yOo=Tu@26 zDxv?6KLz(?g{T?#bb^TAVfKrBXqnXDd5{QJx4RBuBNV3de;8*AgV7dbxa;^Wk^4AJla8E z61ByfBt$hV^~9ohem|yponIcBcQf@Wzr`@WA0?HP68WYV*}qc12+1>eN5nY+So|BmZ(oO|EaySXmvVL~g?u?*MbcDY|FMEBZ7cb#^ z3FP~a;uF;7vJ`u2`=O$OQE5`C@2ZlnGk#U?3VV$xfD%4riu%$Ii50-RfB8Ev1o0uS z$MAw6z|~9DNTWn5N|X9wyaD)WHqkj^c`u_%4nSsC;v&J%mo)k_)_-#-o5PLip@r#vjf|ViEV0i zK2xX3)~A(D7FYOUfen>)3zmi*+k0`*$gbZ(!#T7^?g|ok#B$)XuE*o+) z@k}-ie4VSX*+0E{^6}E2Gt-waB$?4aIQ>;!)#>P2A9v=lh?%AD=t z!k^M!8J3eLsr(~ByF~Y4@1u?_&xc%VaJDPO%0=OqSoU$u<3eO4AJC|4mCKsSw}Mlk zUgYUjTwn7_*5&raFDZp8CM>02t>?Cp*I0%);RY(|IAtRS|LD5_I~en!`ASSJh@0Ty z2no5nSO$ndS-Z1HJIIP|H7(po_Pl@u`k(@KDw{Ll`!5iZRrBAP!^8cz^Y`6BYZsr| zlxg43+fU8g<6(TR6Ve2k5%6@f&0ExMydkM-bXBOF5nFPg_M6epe0`vUT)iEj+K=#4 zKf`L2{rg-$t!8Ln-u*EbtQ%KbErilFNKVd`Fddulf$4!)W`|HZh>BE09;ao>HnL5d z)I4_OB5Lj;mbz*Q(pN7?TlT9L2Wm-i7GIL5qRMgB^x zl!Zq!H-qn|!+uSF<+5hXKv{*=R)ryC5K4gzhS_scI~Hq`AR#mIQQ8RaFFrHfqVJSH zuOs+YP@qGSh%KJ*ESVEzcj8KlIgKKC5^EDW_{jx!^6hMi7#!Fb!so*LyW#96roNQ* zV?9FFBQC3@-9OSKY}w$`ro#qY)tWMwfvk9?QYAlYBw-b+unM8--VHp-{4&~>2qC%J zkE<}qg&(4aw6=KEooM$DmTScvUeSW3o{*QtOk8QEE$U{EERE0SJl8Yzwlln5pMmi- z%uOiKT>yxuq_|-UlM{v_cL;U&rsLsC^;p?kRB|P5Vlg+)sOM1eA}xDwLg{+)?@5W{ z)jol}(Kd*4d+_&O;J9t0W%r`N+MW%n#q|f1CPLTWfFU z#h$({{@M`IXZo&ZFq8bpZPbizKD_+) zktXTB?lxnR!nza1n3DHIVS4K1Tf}9wu=yGo7O9!V0(!}4;`*l@%$E^@S4A9p#$yVBh~pf=<+5z!Vpyfv!l}C%6=S zepp81xP;#t7$eprU$FJ%zgbpMQ2|ndvELz+wvey_v2-B*bNB@i@w~EX55i7!8-C!$ zP^*5W^G@>TAh40fBDVh!ynAnl?m_fnMM`O5z4ND%cIoKHvSdhKI@zIr@alXtZ6vZt zG5w9(0{j~~xdo~>QEXQ%)Jg-QVH#6~ZTk~RrmloQymWOhFJEcneT?AUdGDXxZ2Uph zm@j20q?h`BYwmp7eCj6r0u8jEvfoUd#+0K$2d~1$FeMl3;j?^t8+>{zFuna1`AC>m zTochI$>fK^bl{`1s6Uk+Bh`@~&I>81_1^pUy|*xG{||DdhzKwJS(+%GT%uPWvCV$tYSV-i3 zY)VsJDGsti-W#XUY=dtL3D2urgz$Fzu{z_M{}{?2gUJ7Vz7n==oRcd9eWy;zif%;Q z&$gtY76C)ao%Wy(mT5V`Pftpbe=oyIV^da&2Sm^GhSU3uhg|kW{?ne!cXmu#5yMOC zg2M6Ot3*BSS&2NqQ-7#M;*kl5XD7nqgu)MEalHd?UJfxr@sO%V_H$8P&eB`BhLHS%8V1HwgxgJ&nK_DJi|i2JQ4OiBnVtx*90wB#_}C@JkQvAq zI#+1}p%^evPvu~@GpZtO-6d_c?10(7VS>?b(02GD?YlVzt#elV;Vk(RvfvXs5xSLH z0|DE;^;CtytG2C;Ni5^Wps1bVq+D><@I=G^4BlJ(6KDvlPN!c|PC0>$a_379`n@h` zu4<>vX(JaToJA8RPOR_UY=srQK+c=h(plG7$WzM5FM;_gPb)LQ= zR_>=93ei@H{3NV)*$yhb#wVc>d?(P5(lWCguC-?dh$;?2BBWo(cRxM+P&GyyFIPuZ zqMH$i-%Za5*cJGi8T_eomf9)FZlaP!KH=p&ux!%v6J{a^wEA_#JVcb#h1E{U3H+Fa zhGmaLFwfKy6YE}gOek6MdkblsiPiTz_T!q$rPCP_($ zn;&b(ym7<>wfhDF$iu(}d_Tt-yTHMUsjW&wo^u&X{-AF#%I;i+hEShc>_0|s;AzZ- zp?#ZuRh7Qu0x0vxC3IGdFx#0d>U+HWb{3xkv_r^WGOBLQFZ6}({5~Uv}WHJWaXGqUXvotvcjYN zXDvd46eX*K5a^1eR`5s6q6zLM8g_1Txh|%X1fKNNhOu2IPl=xpfquDugzGRkp_i3R zw3PHcR`{2wr`k_c<)+(NrrU6L8ZTG+`PRg#%QpYxByNV!&$h=>#-x;O(_c+tX#ljD zJ6P#m?Q2+7yx!fwfom7CCqt^rLkT0;E2g4zkSJbC{Xoim za9GeMpLPn38-?`$k@c2AZMAK@FK;vI0Se10>Pztp|}SpxVyVkthh^Y zcZULnA_Yp}%lmwL|JpOh-^@hTtgQRGPH73OJ3KM$GOMotwipnhqPMC>B)?8J8pOO7 z%$(>|HMwk8m7c#oq3Xyei67C7v%5j_!D^wlkiq2)YerbK`jNHVROk3%umji97h9mk8(9h@{o%tFo$`NfW9Lo$)YjqWm@% z1m}QD4WK+re8mO8zh-12{G-(sizLjt3l$}&>iu$MrgobGT6UQ!j~J74%x}m7w|6+4 z>j_L>82=Sk&$xaQ_U2!3#vO!RM20XEs^u!jR&k@uv?*s<9?Nsx^hI6URFu^q>F{Y0 z{>QZ1gu~PVg4^41x0kqIMWBN^nGM?1~A|q zhR5`F<9KM;;QSu#+UKLHNg4*nDK-K1A@784U0%gsLg%YXy>vvVx%~VbY^oW!=WJLi zW_>MX(kA70nJ3lPC2V= z+o&2+y&6-!B%@hLr1;!&Mew|l&ldaT$Un;M^Ugn1FbIC(L?#Fgn~>svq)} zM__9e;~E@92@sNf0FJ4EsCjo>5t;fm6)Qs$!Wg|gm|5o2&8iH2&NE{t>`C9R`~BCk z-J?vC>DmOr16ZWuQmrIY{<#Xr$XA45?`|dU?yDCzRJP8)p{?I9A4o*j-y46{9w%zU zr{P;>MZmL+YcD>4B)H@OJ&f2#<3Y2ysC*;jo_3=oB#;H?WH@ch%SOm?XIEPX~m>-}z%R0p2f`&ieb& zzmX%@&wfF)=Fb5!sCPgjudK*5%TERzb+x2yjIpH!)-Kk30yi^go~B%i2dviMD>26{f%~q{KpwR1 ztXYo`3HOmV`@a{Nng|h|3jQn<$5W(>*DWT?AG{;^o?aa5jc6VULYphkgef}TNXX`5 zWFsR?W?w`s?>ha$5uyA<4om7_xgKSGXgIxDxVL80Z%`Y(h#|o{HT*?~lg@a$%EPDj zY$eJ~4MNP4*Z)FHF>fvOZs`^s{oJ!ilnhuL;7yY=yd<$538R7;al8XkzKbyXoKOJgZIt+2 zBvQc`4rBtVdS*&TVK(p1w`-SL(twk;R>*oBQ{TFZou9IOD++i^iC*S8eGZsJ6(-BB ze28u}&6Y-thkY)}XD;UK7{3P$omss;ozwcOpt$6-M1)fDh$#3W(j<_2d29e7J31tSP8N?s4Z|&Cd8ij$BMif&efm%XDh9QKUC30=7T;hNsOVr?STB0$e}iZ*nI{x1nUTb)8bkG<_c| zqcKbtY3ob`Y3qJHt%%yLWX2dhc|&qDg>Y#GWYK9N7i}G#+VA+5=AXl4SNXi?3mds$ zU%j080;zK6SM1P2s%%o-S($Q3?z2f6(n-|QO-5)~ zQ}!{yj@RYub+C{*@xO=Y*lv9^`nmPsUl>U#p<{L6+B_gL-;f`Q7677Js1E~E(izY! zHHF))_Vb*dWZXfOgb>$I#$An^7|%K6s_d9TsQjuOQFar?3(bmAwPQ=#ZKP-BRY3UO zH(_bOGMs2&#HLd-w1^bztcW-2)y_+%Qc$EXJ&h;opj}K|maqairLuHvAy4&;k1(>v z*4?W9Yi2pOw0jN@S^mwI%H}9W@k{Im)r?%-+mIq=d_Sa*B1o}!3IR5=V$m`TZIok9 zNZTqKPQ)Iq`+XR=I6;d{=eBTg>5{Y z-)V$&Z%EWP(#d6uR`u8#Jh5mJUNoX_rE<^G83p7_ocAYpbzc$SVpwbhQimU#rl|pF z-&c@TJ3=@=W-yZl(t>^_cqR?XjY#7MzJWQakLc^3A6l6f%SCn=TQR-VzK~(j)H9Rn z)`jqMGomnRD!H{vf~j8HqV9vq+Uarcg`1Gs(uTP@!zGekRZ~F}%d^yqy7tCN9jIQk z2L$z`{q)}&5@$7iemdd8a$QOi{Qr&5>_I7KY7!q^!v2mwl*COFG}T z;f-3#om$JiTFaxF-*Nw3pS<9Vl_y4oqlg`Afc0!|4#n{8yLhG6)|FrnTpu>V%wn(Z`W$9m%RhIrjOeFa*WrFsT`t6Ui?=#KTv~#)&{7 zJ!UC25pE-03@z<-`>q=l{saMljt($F3eULf!XH8!la{g*^cpP#$Ah?MSC|eWKGE@?^fMQLP&FZ78zn84)88SYa`fxMOOJy z^W1VTfnF|%)6@xM6bGSN@Q7D|O-~IYa z7IgG+d}2U4QJ0Dg!3Z~(aErj`OlVY>gIrywGj@97@-|%&SI8)yrJ1GUK4Rk6y!!6p z##(Hi4s(QjVY@3Ya>0-b&+fa%!>^peM2)*F|)>OwBSrjqQ7!bT?6UNK}y6+`J z?j5hjzP*br`P=<0c~<=)jo#>z^3f38o!Weee#}Dtk(181JxRc5%-)gHwuJ`wH3T}C z(qINI{s5m1mmco@gqh!l-$5s#)S#P}`n6ngkr+UFkcpk&)B+o`&^5ppPsxdP);I7s z9(zZq@c|LXqhFjoLGn7hAxi%CCO49MmdHUvgICLelNpN&J(?9I+PA-qFr5DR?J3sy zT|dk+)#rk*pmE;}YZ1ebu#-K)Y1k%CC`+JrDobZD$wUi%x~{rvCaO0KSXI!rjrY(XjkHut$oWqXqYrp^u8ERyJ z7n4*NjZzyAxK20SfF{U>&DGAfL-a&`e-Xp62&Uo~Bj#wRhCO~2aT|gKAqRU>cwpFo z$~iX@0gvJwwn(zU6$(KW<1E*7tbdwqS{S)$jNn&uB`WbjF2oX} zG$2zkx_gkPO#gKcD@tt^N|qV?YN|ffcM=j16_TSh#|4!J2a~f;g9~^8DDu}b;QKo_ z3|su(J$tDSOaYHsGKfH-_bMVBWaS~nJc{q$#P9|HoCx9^>SyGVpd)EyJ9)f} zPUt=U?)c&n`%1=^oL`sL9KIb{eLG@^myAt%Ol*r-SRZ)rSYV`#h<@7uuehp5hx>beo+561I}sL{S+7}eyu^Z&HI552JzYUbYzo&BK< z`F3!UE#~Ix|5mF=Pvoav&Zp^Zq`Ar4#ROMZ?ahX*tmuJR)7jL>pnxm|SDk2#ihv(W zpQ`K!Ve_m;^Q;bYouh1e8REPhgM1x>R>MVUvs4$_$Fh^Ut*O4PpMCQ-|EC5;*kN*( zD)K#G_z+ZqK+E2s!^4GXEcU*a+q!;K`~%7bdMZ|AV$tN4Ut$i3l?h^s_BfO%M96ffZr5(9yCR& zU1;;3<{siii^S^wcvbK&W4!kH_{!`j)h)&+`j2}sfF*&vy`uuzpX0l|^CWohsB9=^ zo@>3-GyXP#o~3ekJqC4Osq=UGAT+8&E&%_>hGm7Dn!M{mq8mag#)f)C+)6rr^yN7j zO~R~U@~mO=3l6Rx8TP7IGA@%2H8#{6{51Oyi6|W#XJn3-36Mi8(00qr#gflu)Pbux z<@5^u9Tl8u<{p>UG>+9YF6O1;9q8SavNLb=Wgttnw#I#V07HPuQXAT<1RWKG=VOW3 zTuRqUdP4T?M015EiRQ`p?+ST{3a$OL_9`KTBM+TKbS1e119DYD^t`+(;+(mx=!H>$ zaA$KjknI>MkGKMNUSgf0ob6uMjvIpp1+$sC3^kq6LR!OO=3GZl!B zjcfpwK%@v3L@E%ZbXDwKn)}^;Pz^cUFi7t~0URZTI?*-;J&XS$mw`SeB<}`~Ox0m5 z2Cy+{`1J4Bjj--#MV}SvI27w7TTt;l+k25a&QNg@P;H*ED4#zj zANvYMunzBH>yE`(9qj)Ry`e@tQOQF0J6azv++*>Hc#d$d`^n-j6I=Xk(Q#fLqLN?| z(lNmWKjJXim6{8(xEo z2F;436Ff8`J+9?K-IH{tWsk#Ftc3qQw14sPHH7Q^?OXjyWnkRq6PHGdR5^%5nTh3$ z4*Z=1iR1|--+ZTT1Gpzfv>v$P4ES*vlt-~w#<2Uh#W{KRHwAIHn(7nBTRNzgMnEq{ ziq-^wuKs!+D>bZqa&)~=aaHkic@dAGS=64su(5wZ0es-r&?LhMhR`#R9Z$fHv@1C1 zke$OR?@9r-TTXw5qzojavH5^Egy3-VB7=$r=*@F%U3>!Sewaw~4$0;bP6;x%BzcxX z{m+OETemfyYAsQobH_R_X||y6+-~}gcZPV$sdYYQy#CS7sD`vtq$m-Uj2{MZr1lSb zuiTH?-AqsK@0Fql%0q}Be^$S&C}lS~Zck9$*K<6!Gq2TTa&>pLSnz5Wd->{J3m&6c zzp5HNPR#l(_>leU+0IkTh;)FhYMPCo*XYtN5(0i|E`8=Y^NxwH8XJiRZZJrv1+#2g zE5#4$j)8?(54mD4K4EFNzVFEg=QD|mQMO3qww$F`?EH8eQW=Pi{Lwr>m*G&Bz++Se z*T0vX$()_z!P8R>{s+&Pa9Y82F-q}e4L?NbNT(2& ztyJpB+Svw$1VCfjXBAxek@MRDkX>5-YytrliaT_l(YV0!J8G*oUIYd(pw6JDSObsMf7 zua%l8L~V60+tc}K@-7^cbWRGy{goLul|)`uo~9AVKB;b-#ONW^30Yi9=hw75oWBBP zGX5iABE}>xFhDut3gSd>O-5)X!=K2N4ZK}eSB;~y_80CaMbW-7z9is+NIe^ z-k7l|8j&1UW8ZWHDFhx@)xN)rgM2BJ!h82w>8zHkb2zW0%iOzyni_(`YL?_SebKqH z{c-x@;|)pXQFsPot62wspjCQ%pfM?{W=kd5{kbn_=-A?StUk&Eje^Ze=|)75>L|um zCSI6FNQPrt`bA|#G}dEL=3~*)+N~T!7`1cE)YyWrwjonz#mDNcbN#R9cyrydJipN& z82(x>(*J}Jzg@RX2x&FmUzIw+eHscFL)ba?o+l0;gnSM0t@%EwSvB>^dQhW)dz?AJ z_QVlaKp-F{dr1-UE4DOnDv!}=D7bn8NA24!Ar265udOewT6nl;BUQ-;I7U8-#>}e# zX10f|gml4)9;2kV_h9uDV&gcP4F!}!?WW2`eB7cac_s~#kQ59JI>M578uMZuhzGN> z6U2LJ{Vb)PdqziAUl&Ip>bcvNPf_H&TAFS=b!Jp!Yj%iPn0@m#h9z8k0lDZal6rR& z<4KbiN5O%*=2uTQA% z^sx9Ksz|QxOUjdWgB?A}KlgmfG;3d8FqXui*RD6xzkRIk-=cqhh3p{49vIUZ3iN}Z z)yE&Ru*JUus&+g*?W$gG!md1Yy(rx`ab#-|ZAAFj;U(S_$S1T?+e}FU-wbuo)h^u& z%zJ+1Br6c_1^pOX7*esp*~Lo7kyiX<^-BVex@Xcm_64O2CaWcN7sq%Z^Lw+CmXcHY zcr6{hk~#dHASa{mdN zfurPa-Gib32H|^Mz{4*1@n^nTAKrBz5pWlu;~*lJZ&*~>iT&{r+&^G4=YQ3XuyK)y z0?qD$hLC|Z>RG~3C9}$;I-_gTWn)=O3x-Bd>7`=k42&U}&fgJJVvFopq=DDN>Y_8l zq$P#;z7yN=TCiYD*>+W8L84#MrOnjURn$9%NTc5R8?F*i#G%=)sDL>DgTt6fs-d%- zhwR_{Ez;kkyNXlqJVf`cnVK`LL^RpbPLiGMX4nWJaDQePy`nJgwabz{|3^Y5C(OWO zUi3e>2xkW&Ks)}?HD%RR;=85%cS}xW7ZVVF5U(?KmWF~G3-1qabXNHBAd6|2tq-rA z&sUkIE;?|ZbWb(`+$_IBDr6Zdf+|~o*XX%q(6mDlj`Or3`mfwJ^d-LaYFpW@Uje2r zf^5hX<|7bL7KpgAoiQmv>Y#7sCZu{C;M;fH2;5Y(b?rde1I}fSA#Zr6Niyi1UgK@W z^ncmA+2Hr(Q{IZ1`%;Ko){a{?O}n-Hu4|~D<(q04znu}1EJknK`NxV`fmukwv^Vl&$wJd)6fZUr5q3a5r z26J0?1zP5x2aoD3zxmMB0P8C-Ckewb8s|>^yt5lgVG>nbF8(+vP|?I};ROGksiaLv zB(YL|gcEcH=aSIGBN>wkjzeF9OJ9=M(LZWroiF9rK}U12-(MSyaTNM5%GEzRW4Nv# z3!Y?7EZD?w5lCutC=WS?MY@#1(J8gFM3`I)qI9gP%>13^O(TEv#z*v~xzFo;|NHCt zWz-URm2in{#Og1W78L-`A~mc5KfwC_9g-B@9}Y4vi_NZ}UofqkJD@m-#S9|9C=)Gf zhIF;sxD*>Dl<^`D5_3h))W5P=Libw;)v2WDPJ+52vP?L@(<3x@uN|*cO*Oev$^HH+ zLUixZUZ!Q$^)p2)_FmyNA(XQ$-*ez*nW8zhp+LiWx;JqS1JUaax(UELQ50=dsnT>W zN#`w$r@wJgEFu!mod|7ij$BTsLGX*n2(IF6#I=tH#)lJDt&sGxoN#1cC{OL9?>s$d!^RxYcMLT zojH>j3_Z})XT9MKzEX74StqIAWe6fvoT!BG56tAw*>{O#>ofErX;bt|9yRDa{eD$o zhceR~XuT=M{h2D>hIxt0=v(AM7Pb9HR$JX@BQdc;F_-8P_&9oRv6V7~UhL5RP ziYb{KYiSs#QeltabH?=NigEX}VnM~CAN}G9$2c!7KPa_V1K^Iz5PT1Zrgx_Qnrsod zX?pjK*2<8&V@B~7bpD^}>Z(D!Z&vE0C2+)^u#5NQ;>$z(?u9G4NQ&Qx$Um@S31}3U zS0+etDrTOQea6W8wca&*u75(jRtd~5G;5S}7;jXFU!jv7JX|9cGKJw6c6~&Yn9vXe z-VPzBg~S9A4CCU$?Z0kIq)7v(N-(T6LKY@cH^y7zQQs{NRvJ~8EsTkz7MIpOm%q7f zi}KsC#(Y|>?X_js-mjes*3B{J`%+S>TbxDoKqq*;$Hs_bd}hcz=Ah$j2gQ`h{j*+gdXQ%AByhCuQ(++u0k$-6c)GQ=^MortR&&4^j$ze=6)HCHWhNM z)0AwIwD_UyGXXVmP6DKrBHmaZE-_+)_SeCC$HCiln62A`&_>2>H48-+Nz`sMX)i-C zP)F#;fB*lQZ*QlANLP_rA0)h$Ut$x&J&H3y0%jeYE42liU}K zQZE?2T*!}{<io4?B25Gq?D4XnsT{_(8(Txo?WKUtpv zUdX6OEhd!SmX@-fnyg;jQiEA;doj@8o?OIHR_`7!AW|yqksCRxR421e zhTasQS-P?9JL>b{x0eL{b8s8l4#JWNFFXE-HceWx2UJ%RXs`jmWSRXd^Iu%f8uXuk zFX>;@9xF9itmkEUpRkDTI-#kK>)a!Q_xNrF}g zOS*hc_D*s@ft7fgf#i@%Cl!HP-+S&cv);G^zmL0Kme<@CK5eSguhHaQ3Cy|1;3nUB zMkuYLN<|v|@7`dBg^*;>DT94TZe3Vja$u?h_PCX4dIJ;WmK*<}{<%K|=y<0GFUII$ zJ>gux3D3W_6MZUpnlbn*YWw+*|EGsStp44RiQSx6Vhy3>6H*|I(OGl>c&C#JMc}rP z;w9T1$SjHj_*GeupF%1gb&vk$H$7py)66L4mm6p}A>iXFXNWh9b|k<9eg!#{1gI9Hib z4j{`l8z;iu<6GS0@8+Iv%jJ8mM`i1~5@$Nb(CoiPkiu7?U`Wx_lKz(b)a%g?F|~;% z1r8@~Q%v+_b4kUA(WF0pfoUx&Mr(dfM{GAI>Rw6S9DmLdXJo1LJCA#IZq?D=moF?m zk+7RXBkx1Q>nlBM&F*5OBa^FUEdzaUEdD2rlY<>(Elj9`=_fK+84>)%%(v1W6yVD&#yE*?EN=m{&_JwYK`@AKIqR& zk^qn2oO3z-VmwDGZ?>vH@DBmHD8>5rU^lf@KAej%w1#?E5X{3b6FrjQgnRo&!1zQvB4{LJk#l2>Mt^kh4PE{QTBFF&(b126refn80Dd$AHz0W=ziJxM%l7Ptzz z6ik|A|HJJ+WSjn4@iE+63Kfp||0C-FhY3tczOh>Nch?J;XM2qg=3>f7Csb05q{p%& z2yYGqzSD=Bn0_XTbCQujXA96re?OSQdDoz@I<7D~-dh4YMF!5|HoRWBU=?AE#)HLg zkKdr7MW%3&Iua%Y&==1)&5bGf*n(B7oCw@`sA^S*5n))h(fu|>cvJBfbP0y$Er#Y$ z-rxaaS5B}yWt+3AX8I(K2kOk|plaJ7h7zE&z^--4ARH+e{xClN@yH_Qx}TfZt5DQu zpIXF)z^V=2)alGwT*tAGDdQHFdtXEgI2Gz@ir8)C(oF78dff~^-ZLehX>_mZ%w~-5_@eC;0_5H_ZZ5+2Xue(+kP!3h4f?uciTxF_BYhqeULgz zA!9FK--W}71rKcgrqdMk!eF6s`A=*fzX*J%Ay#=&M4pUR$e|NI1oz?qYLlMuBHL8)TV_$(gpJKkn z13tx;y;sxD6nnS1BveZrHALOg(=#L=^7qf|tgM}>e*`Nn!TdOD-v7@}yK~kO1F<8O zhE{8G4V7-){W<`?DPEN9t3)#N%RUFsowuEr1|QC-KHxw|@N_S=CCq8bX#;z{6bUi_ zX%CaS9U0H_sy2^=klS(T<*JWAXgVO_=Rdv%nkiQE9Soc9H6_eE+*#!*_%t;wAV@lO z7--1k>1g(UqMKi=)4&TI+7}_GF4c4#E)~R5pbx%jElLXFt88R851-f z8&KeOUZ4dSS(SW_*p-hyJHOTb%+0tYrMs^BJ_Ms%Or84taWJm+r1s^M!k1E8L^OFj zzhl*ahhRAocQsM^l=9ihL{)=zqZ5!hSqWS@#(s4(XCK&RY-V;Y!ntnC4^Z`BwjH!Z zE%H4D>(jC3L<|g*c9dIL?M#M3ZPh zN$%>{k0|NAt@J(wz>^FL0EVe@u|Khqo236kav$G&&qLMv5=BC5`1ZQwl{BnPy4gr7-726U_0Yon#9IFUX6Y#!w!_ z%$C~@_dDd}Kak@;m*Y1!BovI{vgPb!U~d^O#Y;ZoWs|u&T6$rjZoCh(0SG_X`Ppbp zyKv5yP;uf(wRWs+-n1Fz%q7Vrkd)wXEo8faMoh#je)0F(tJ_a?>02ACCjbYeM>Wc5 zc_(CSi>%{_Jve+BXjqMxWFhwj8Ed6j;T06We;HT*K~h_x(%nTO%EUg%zy_6*U@()g zn4E?W$Up(mD7ZA&vfeJ!8kl)I(jlrTN3Yqu_X8F0P`owE((6qiy&AMg z87{n8^yVq{m%f;VBH*X@Cz0GMvEc>Jh%D_38-zm6M=49&hJ<7UFSk9&;byhX~+fgC;ac~`RlCkSQ-fZP+`6%%UwkiJ? z;<@+ZbUX-xMWPoIQTmz)0dV_R=R>iXPh@teEn4Dh#K4bPSg!YCR2`5BjQVH`HlW!Z zi8LEqL}x4BBG;IKlRmKjNJDR8R>ZG z>39d*?JiD6mL*F6A#GU_YFQ$_J@CxZk4W#54wfaRM@T6fA=?b(ff>urg&;K7?j2*4 zfJwW9DTi$aUc9FpLUTv1yCC>4+J-t0omKYVfg{A0N4SmGVRK&nqn)N%g>}%$@b$N5 z!OnD`URpQKVLa5v^$6q@drt?|69(zCfTJq;N}a@3Rnnn;c4vTvON z6J%4k+h_|D*)ynMp`nCTH0_eR>p=p3N8H-skq$}J0+3n z7Q>^r6^yaz(ce|oqTM~A{1GfaSE_!l7$092Gdjdmi1cEF)&%;Zz+(_|c#WOL2`Dro z)gdBPHIW3Vn<*do^ZWqoB14mJlLm9W%FCFCEE|QaTt}or0#vaj^=?jVq~1-(gdTfI(@Yj2lfWenjM7?D@CwWu9ph5F|`_jL;Qu6{M zt8w!GBAUP3?=c?+mJMV10LP*k4}}k!VG0*SXx3?n>)!=hEz}kIVA0xrx$|=IMnPtY zX|OKLai~VH*`*NgwdhT6@GIR}xWvddEc>_G8lvZ(+M^1(pR#=NA3G__2o6)0EhU*2 z+4}e?*!~b(GAoMnGA4quFJ{ALpu-Km1=AD|TgXveE*bZGPAR_Z%0G&b-*uaJ|09+Z z-U^#DkQxqajp;WS-F;zx5`9_5Lzx@7_=5;E*M}x2M-#4bk&TKm`we;6Kb8XX88T}J z*(@sl@zL{un_lpmE%Nd9e=n|3&UjUk4`d` zk8DiVTakCD>1u7M%<6FvUmZa(dnI1EhB#!pkJP}qff@kC0(g_JDfH2Ns z(Tg2Vs;=06;qd+PV&xbMj=7iA+b=)yvvXz7Z){8acNSk;D-4f4D8k@9G=icv=8?RD zSqX@`dUgu&-}ZpWV_LUd)VmaXHO8`3S~1fhIi5qWZpK|pJ>sK+Rc4^sjF?#nDc6J4 z45?Vgwq_B(RLIuI(*SAFg$sr!8P4)4krWL$%lBFK?p1Erv>7WhpbNPw1)8|Q<$G<` zoutQ>kBJYAC~l@j@&QLw@|?ZeY;+&DMj`I0%*id&4miCFc>lg=l{V($Ta8i9N$Ia= zK0kcqhnao67bPUNTbd}bO`)P29VKLwk&bSw2tJlm&c&$dKY3@w@kL5C+0mMydgQTz zQe}1m*lvfCufb~N*~yNlobXW}IMN^$d%P5TE#+ta=&-(3A_--1<7z0wm`82(S9O<$4iXOQ~;j0LqWf=BsyuC<3C(u;^al=jt!Z^Sj zYEcT1PsGHBKavb7LKxf$4)#Yj06YKmovr}J{6AH#+7F{zwkrWUEj0x27)rz(myCb> z8^L^&T^DS5NJZfsiRAfk9F*mDji@px0)9g+GaijDj%a}@ zeV?p9r2BV6tAvWh!?3@M+++KzFPB8|jxCa3h2qSe{LJCuXQ-Pp#ozUf7wY_4(D=%e za~SQnUdb8(%yn^9D&gQ`)yvZFbB&yp`e|DKPPLo;>}u9g*5|)2amh8K|LQFeWb08Yw8k-xtuVS1Zjkq;o%Wgofw;~ z9Kv6c&*ng@)xVwq9Mz;QC#r6IDAMjvW${CuS;5n9R)Ak_!Cu@?TPDJ&CbzsPR9z-kND%9z4rHgQt^$p=6@$B2ZFS-UGT|^a!upM=sMxO`9F&pCv zVlu%}(filEj;%oqlP4&4a$o~dd*)*cLUiyr;?N&8OUcevaSc=KfDETmsnl_338)63 zZy6h0q>ky+Nc|$#N7fR77xS=YSxcy~?B2u^#A;DMD2x#oxMRNO!cViqhbQ-s z?`85w1>_AGI(Rf~$TIc#=VOq6WKQRai(j%6sW4WiFqWi*y`G}I+V!nhei@}-ql4O{ zV+RJ0zX#7bM&7KB()df5O|utu zrp3e%A)QK@>-;EmbmJ{KVx$+5xK6{3`<;h{o6F2Vvr%L^txOwppm=*KcMyg{r&^e~ z0&7nMZhpAWdEJcF4oeuWjzsJR{|UW6R3`Gyh!mb2%sDhuaj!3}SVlqEaSssw^wc30 z@ZdHtP6#P9<7rH|iF%dy;=R(EH2AE%Yvk`x`SR1DiIgc>b841e43ZcJoG7#UF&ex_ zR}eYrF=*Lg)@W3}QnPHYWB;ZyHotG((9ZEaZ>tI`Y~efJ@FSI&aSPS=7PCD#iQSRM z1fvNke}v4Ctk4x@t)K`2iTz&mR3684u;oCLmV=zwWO2O!T|$PA!>H_LO!G=7KdNA`C6Fl3F+0b<9Gws2c#z}8aAq2i0*PUtZ*2vs&_Iz4(rGi zXad?W*f#+KW?dx%qy?AL<O6?LO)XhOFqvhZBz1wihq~=#`cj}{G zD8M+oV$MW}j43RqvUadYBTR|rZTsk&YJn_l<=fCU;_FxGZpqU8VJw4k;xf$m}zuPFL4oW z6wyy++Lnwg_JPqa7Wl`9ZgoL3M#lSI5n>g{tEsNNkaHLp%A?KU+mK*5Ia+rBU2e$s zCVO9Ac)|A>%uQ#>_kU>LNRe$xu$E`BmAAK*pO+|K z(PDRHQAVsn8#QM3AN-0lP-C@hOYPWWh=PggM&$fYgGJo+oXqyVyS`(~@m=*_yXxLh z3<&}?68Ux=f}e{(UsFKBnlU%2bcv%ZdTa#_N_0?Jk|NeD;a_Q+hs91GJLB)YNUm$x zu6t6PaqEKDJ6Azz^f2Y$kF+`F({z0gJ=<+XuRz6Z+k_w{Vwot6(qN+ph3u5Ur!W=b z1S7kl8anec-@ns6CBl(FGwa{z@x8Qmzq*|WZT)`cW@i)=FJ}+ex_WJBO`TU9inuGE zpc4P2BRQe_oYr)C6=wd~8vSbi;YJ@f8B~iL&j0$z!(E=}R+$K*Z;rZ6UwOS}MErY^ znh{RL3^Y0Kp4R}(d;%bVj(GPIk3x4iUC0$kHs^W5vmTYoNWMp6HW+3**Fzkan?B+Y`&5$h5caPYKuK{4t zI~4UQAz}wD@tF)^vT{+2C1{8XdgmVXM{JvGWSi^Q)6X)uU&PI_OGBt4XQU!SOA&6t zvza1x^LHSAn)VI-$C6REvF(VjAK}qPtYp-KlWxqw`icNqJ`CAaB_J_tpU9e)E>IZZvINgE z&1yQce?na0s_1m+g&pS2{jVDFc-n{jWz0YDwocFRS!5f>;3T~ICg7@r{K52Mt@7MvI%qQEChM=?J2xgnL zQX8tU#6-3<0nE-y!PWX$u+`ERv^BzrPkC?N=R-)R&1#(^)n>3<97kNSQ39}Z^YRo! z+R|E;Sr@V0?Df&vzu2Hy{>8{U)4L)#nbnP=ZN`#r>6>RN(FDulRAT<-*q}_gZO-g( zsQT4V_1V3kWs$Gmx|&*|YK|R6w!V0}kAVs~&(zCC*Z97L66^e&2c+i-9&}NLJZ2}7 z#KO)bZTk>8d`bx8CmRUnwBVd97V^{axIH*9ODK24q(Z%$<161Sf4D`h=IKMb}bIqwm9ul-QJ7Mo%X701O~aT$>8#oV&;}B1`2YH(1(R>MrYHPun@o z**cjg4rgREtexRd#(h(FJo^F=f=5fSHlqmOK8pC_E;O}7{ndjJ~oDyj%{4-)d_?PJzl^@Kb07)w*^!9(3FV0uy zN@ps*MP_VxqpwAb!r3=ncPzKz^UjBO3(}JH$N3$Kv{WOqjL{02wz}%k4F_b2a zIIDSUEmldEd|c&XM$3r%q|P1H`Kc`n#OM8SQ7K*8K9q`?fcB_qYg zPDY5SNY?A|lKJibg&o#~w41VSabK^@)+qp$5tuhG@UJOgX&XVCwP71U^s@9f!sqd7 zCIWS-;}{cR>TqwvSpkuIsEd2~>Rw(Fflh@xa4-?fQaBN-VG;6w?WzzFVp0Dwx|xN~ zD;Xh1?Ifc31ct1pbS;I5ZkQN`mKPi$ru5jd1=%9D?Fyy!P+l&lFxN}NQ|u?Z_LJcV zAF5MC=OALq!Mbj4Qn)2LSKjuOw|(VVF1J}OH-s~SU_=ChQB283D8Z=~@ii)DTcQ1_ z{#jhJhYR@I|3^x>$TyN@h^+6KXylrf=>q5HptXisi%+J8ghkv&c=F5{=NJcvkx!z0 zgycV;M3PS?Mq2`~gM|b>cZP2?Y{e7u96VG1CBwyD?q=JVPAbLiCy{WKFJn9@o4Uok zER&OQ4~}yCSu`@J`i5tvQWr(V%Z`Cda@>6KEW%K%#53ny4o<;yU=`RT=XY(%`CYEK z7j#o6TP`9?`qj^2ye~24@ZS-PGaO5W z7{PtIW0)gS%3>>H5s4>qdPx(BRV=1lS)@I-u;<{m{_)^`?_Z$_@WSwo0UZFRmT6xi zPzXD%CV{ZJ;(#vVThO(!U;&UfX$t7iES(5@ zw{8>F&PIt#mB9$0B_(rlK`$JW~h33i7C%ilzR#*+96Nc0dlnnK0r9i97vYkTCuubzO3V-XwKy{Ko~Un=1+``vdfM*I{n5d$sAp znLVMUaZ`&ux~aLSs-Y~^(fU}hY3&`$o`TInX#PY4Tt6$tk4pmhGGJ4S-}y0ETJjIW z&$-UOE*zM74$Sux@w28N0W$D~h3s zB0xiGK!egWRoXNa`{!6J2w?uC{woo7l@EHXS z#zgooj1k@XdGhs*Jy47$(Ro624iR&1MmTI3k7y1w(3Y^108TjQ%tMoO=^V5!4_eJV zkIie5^$Z~%V2gbXFO#Zc^^UZ0Q*1evyetDyJYh7g!j%V`FNIB}!H7<*kdf8-n4Mui-R89@wC9@M;{qD7)YErDFrJKtJUmay^4c{ea9^dmTjl0eIV&L1dgp ziSPZfEF|Lr3K#&0aC5iZz={U*QrrMk}Ftg0J5fxGz*br zv9etk&ws@n9ikRM(7tZczHYIrEMgS_K>ogC&2o9i99q<|Vefg`p`CWh!%09b zMbXznB-c&-z<4E1AA?Cjq*%_$2r;hyC_=_5xoU2%reHkV%djFvq*n1s>t+fc;4B7) zQaH_-p3nEj#cF0oINzLDh9{dctjjKoY^jVaiHvLxd`3tL#D-;C8SQgV)#@#}(TihB z3VtV%!Ch!gJB*Gg3tb-k!GEp0?SZw%MMx*<*jUey&4XGlWW)MqegZvRl5o zTfTZwsveZiCINxSwqPN5HC5{`6zk7l$A_!qev(LHOq7RJde%bxtG(b0oRCyxlm14*#9E;(cnFR2I z5dnzY;|XNc$s*@^*=2|buVakp$<0!a5C!L$T_Vi^beJAdm!Ivr1Trk06=T5L8}%>uv~5nVLuNxYvmwZaIIyRqkiKTi4rh_9i#lj5+==ijSsNunN2jFi z7{jf(als?ftPz6mTA05GpJ0Q@J( zr*@UfC-({;mvQH*`T;8tr~~2#&8V!w+hUQnQV^-gG2lhHdt!JcTHKG|J?Cvv2XMNs&4m;zH-9Dd9U`ap}3r{BJ z_w`(gUmsI19AIMG*V#{=HDi~mz=gj13qSSD`{!QdpBM6}k!;Z)oYvdan=|1$lqDLb zPX^Nloy?<1+Xo$^Houz#jmF1LBN^e{*pNW<#wse3N6Yq64GoRTALB{onPXYSXCdDx zA*3zQS!icvq`6&YmK*ih-I4$Yrc-zzAdhB=NOSI&rED?5xv8qXudB(0_QP&A#Ez_C zYsm=d^TRGrMmG|}1Ih9UP6H}LGZ~51ym~T1Dq91Jw{m50Kmkx>jAVqE2HXofuM69* z3q-IBG_VUarwb$}{zbiIBE-n?B)TQKUoF4y?PdfT*mE7ZLyGiT2ga`-=bDQ!VK8$>POt zHNv~er55b;SV@Oju92ERhMPd5L4mEf$w-X{QdS=|k@V#qML@LrTV;#A5dj?S=(q%+v z-in=c%v(TQ#Z4{sri3+i;v-%a!k|WYcg}W1aZOB2iU8-oVnRO^8zRk{manqc-&;W@-@;`$|`By`(J09QGuFrqUJQTEkH z>n2dhndk+Rzs@9p{|YZYBfJ}9MEF$J>1xqDpC{*e0C;3`p1-_t;4W%*?Lndg_u|hy z2%RE9yf=zNyMihdkI*?{9+pV2n>88Xt8#0&&QSC_zl_5zB9N@8kB5%r(ZRsSI}(cC<9^xT1j2!P{(niPQ98+sK4jyu@t@uHNTn%4QMhV8Rh0RZR}h|HW3Cg#``7-=Erb(|{}mrE8Gmv;0+lauqXm$K2x z@3@zJ*mZWhC=#{aXzpK;^NdO?5Sn^8o)F!%L=34APOnk54B-(YbWl@Lgh&pLP>*LL zOvC;?x}S(phKdEc(aQq8i$!cphH6WO>bAq`w!*TkJ^DfewI3R>Mt> zy8xXx!#y};D?%<70H0Pr&^fq%pc-|BP<&=2q!?k0c|L4F+%}wuh%h0?y3YuSQ%YtM zxsmqiq+K|r1N0Ljq-S{esHAzQvN@Kd@pvi_kw=aS8_-=)cg*DGLp7&U@YLu`_-FWt zv4sfoAd=wS(y-&0F za#L@w`?yJEH!khO&4T`Qa@b(XN18%KVvyk@QQ=Yy5?As4PvPo!euUi2g|YL(z!^D4 z=xr{vO@~!39?oB(sTC_PpqnhjYChs|8dHNTU7X0XxMniC$wq*k?2?`Abk_)x?&gcl z2NlxeLA#1MhzOT#?1iD*zRp1(sKN-`V8)#WR|3i+XRZt~rv30wswEjAeODlTO9Xn) z>$l~P3TldxgicFKMuCGYo9c+C_Mz>dGw^yZ@fUo<7(nMY*l6VFPt(H_;#X>^PH3!)qD@dR-0Cwz^j4UIY zuzB4|6&9rmV~f>Lurb0<1r@-YU7sLVsp;SO(x4Q_5>O^}KW;Y!hF$G#IvHM3RJE)`VSbgpXL9-y^Q~JAaPE7T5FDrtQ_H?H5&D zji4hyj#aEr233L8skmPYB2kfp8GZCKitGjP!!W0cG=GSmguKV%?xUje9AqUvD+$^~ z-TL{$n&`MNdrwB<2`SIrk>}2?k1bT_79ARmr1r3OGD1v!M@`3BWfh}$&qrtCr9KTp z$YgeS@x;&s;o~bOfrx-jy|$Xk)>L|Zxvglq)kv{8jEqS~pwpAZ=xhW!1TlNb-rjB_m0A$3(rBsE)BIPXgx>cKMb_3eqS6y2>&mBN}orK)0@&xP*WH zRQ7-8KVeZ2-}5rfjmQ0RpilcBilG`YCyg(mol!0jcdqHk5dc|TEj0-&GW+DrnH4B}QQ3Q?x zb^0>0*p#+IB)5mh5P}j*niILJGzp;!0Lh!>o{VIbA*YOYxUoeG69F6w^lcRMu=FgM z-^@P8Ww*~|x6k}IWK_G##GPsc<5UiCL~!;L5v@y8GRPy5%Og6gLvN3XP-+NymUu*d zY(ce}2u#J(gOZHk%^4S1Ts1K%{dEGr6twG>_;|zibnYZ@gXaPzoH#X{UNi?`Rsz{0 z{=RfBxr;h-h?ydYr>ic@nOXp}q;t>()M}6!3RNbt&#HN7jNya=oWWbG$fZ?em*_>; zO0#AS39M%yt(ZtC1i(_^%&y7krqR)q;}MOS5b5$YEmJgfk4+`5!?gRzStB41IQ*`5u26CKL9MSDXK+uVp{xj zKFTC08L6tjM>5h8nll;6K(NX`uqv_~T2=0F*ehBoCe~^(Vi8GgC#GZ~93yZC#d>+x zeG+=ksI@dYKahi8v%7{ds$ZF-C;&EHh!iyf^ht(NnIr(0P6ZwSF(#V`lTH3x*d+eK z*~NVSU#Ts(sd-)ikqQksB6Z)*nT(>5mZ7dlDGC)ghwdh2+&P|{$|}i7LvPo}8;a|l zR{_8+6N*DeDVjG=a`JWE}sDmL5QLql~HDJCVdtF?V#W zx~db8lI3|Xb$Y(EbOm{-4ydJtyc!X-U$Gdx#>=)K#QTc0`zA@SM)(@B+cJ_Jf_QF& zst64!KO^k6&Sp0mseuy|$!rCkjQzP0Vz7gqwu8;s>&J3Ej1M+BlSU_7v?Vz~gu@FT zK+OX~^T6m|RAOT!?%^XZ@%>*5wg5kRR(xPd=MR zJcHaThK^cZ%tKJ(p{J>lSWj8*d6DxEmfpF80K$H>;d=t8SG2zPbvy!@6f4!|l5mqN zNg)NoT4%_`cP#Tcf0#qEX)a+v995XpdsB+`f$>io;qfN7U-FFczj$hE-~T@P`U{;P zxPv4*?>4l9BocwBi9git7g`x3I51_h6+sQ~;BCrsgGOoXz{i;j0 zhZjG=2r<~U0O0F8(qdf{W#EwnKul~<&nCj_xahi+)tOnM&_rk1HR0G~B>7r>S&sN& zM9@bv!r`F8skrs z8N)~g{OJPzbf3YMlabb%(N<4{7%KuqASI}qcgur8suM;qq+qOqGFk1%M|9I3CCZyb zh-r?-X7|G4;=<~p#vc{J%8*%RV=vcW0*J`fc*-My9cCX`Vhux?lLlVQ0#kmMkLPcu zfVGwC+FdziR29DCaZQno_1g z2@kVJqLX>9TAmW&a|@QIM53hxRYi^Q1umsK38242YptS1RJBYP5n=;bFCxTb;L#+X zd=(EVmQ=0^)i<6e@mq^LIft}8NIRvk$(F$hzpQkxeknGne~P8ebzdJZr%U{RF@5pR zm)QA_>&AbjOR12-R7kw(@d)|;zfJPm4(G7!;W&^s=u5ZIWowhGyu>6=RbF081(m6i zCUaQv(J_(!yL86MBcJ1b`KwEzVP`MKAhk1N^;E%IcHnLKc+R!nr*FpYHkyUVV%S9?doPc65OyQZYv4g zB;q7KS`tZGTA^@`Tpef2E@~w6d-N1-D;ddfw9w};KD)!O4G-sCFGwZE2VM9)nFM4} zyUta+B(WnwARDv4ShROrw9|X(bl3%*At!+w9Kw9MnCO9at`s$;vLLD*indtZbAtC zh#}VqfKPzbo}0^OWpg>e&EIuqSq=kC?3X9857VV2pn-u$GMXlaC^rCLo3m$^NYwj} zSIW4~gzkArAl&m&E*Z5u=Dqp=TsT=lPWKf4DB5v#0v9YK+<$AEMKDyzn)EA zO#=AMXZtAtX-8N!ULx`yMsF~C0L~OhlD!cG5$WpN$-spZ79S(sh`%?T-SNx#h`+<= zT|V!FWsbor$51(bkogz6Nm?`!p`Dd6nX*^xEC+uT(^64-!2SjZ%43DSe?Z9e))3i% zuWxfVXLdJdM(pH$lab_bc&3i?ZAGG`CxLf;&}XNWF90I(-bRQGWDbZBBbS*7@82Oe zPNXj2+LF=jUx&ks9Tk>ZNdT-#%9#(!DAb}A*0|1!tpWF(=y*^&`rlMUZM zh~cIIz%Y!P1^`04ylED1k#P9xNdS>aQ(GXZ2+o#_5aZg0NYue)?jX|BPk!17YWI#6 z^FDgl3`_(H;Dm7IvVlPKvbBag=d^VE;Jc|p3lL_9UW3p15+jL(nfyy@9dA-Z?J&(V zx0e|AcSJW{oG#7PvK^}a*#lKE%+=OQnif{j_w_4eFy+8us>D)#$MuZd zsz#8|NdpalPongC-Fikx_uAZy3~X^Igv00bC0G!ym>B6Y-=P6i-}v0)IfQrx@kzvR z&GSjn9Ua2WQ+e;;87)sj>-7n6eTb(dJsrGfK8Y9-r+gArH3~INF)=D@>V7i#acuqK zlb~rg5;UCpqKT$G;+G8nlB`&IDNOVM16_?u!laS$svvM-} zf@tVuU+0hu`ZT3lnjBC_&B@5JL))@LNAaSQ1Ta-y0TC`w!^VgR3NT#D%O_@W<$h999UADI;E8VL*I%S& z_}_Tv0_7s*vebT7Z$Aqm6%ZHrBv!!Gk?CSL%um&38kD<(8XYD=L&j(W5@-!22_hU4 z%)J2d14&-;-^?OCNu=&1Qh$lP;WkLm`K6psm7B%icY!T%#hEIH<@tjjgD406|JW;q z87t9Ad{ zktB6iPewXMb3v5goSH$N{;9hVN#zk7s;wkZjF`d8o*ZgBn;lv*LXB&FNPL7b-vsrI zNY;Yg)`D>GjjGR1Ml$uA3uZU*nM&GqJ5qNvvoS_QC+kip>kilKS`r^&h7-HQcszf{ zx8!5kwolv_0OyK7hdU@;0dTp-sW3up!GnZIvDhULAr_5#)WL$RUdOjII*Ea*7?Jx$ z3+}d)kN&}*Mv_}>u5P;gq)=pNjGW5Xgy|gnb7dEK$v;wlKn-Pu&X|#e5i7(bIeaTl+SNxhP-Kt(_1eM7NrZ16fuG>sTC>JP)-F4DPdU~NhO>8Sd zHIYab%sVHed%9uG2-K#>ZGa2S=5=5AasJ>hql9*n3Mk7Epna~W^RD3XSWmVUT$GP% zG0gY?=uhS*GXSVg6o!fp-J@1WC6O||y(c5YSTbnk z>u7tqsYXc@T{4r#rX&-MDdG^3Npsbtxe7`+OBbq3K!;;WkR$F)w~VY$PjZGwN9BPH zc`75t^na9@`;-vw5jwWy{HQi_w-vRvY!yZGP~-sV+0(a^a8fdVjJ(dEP&js8tWh z^FP(nGDh)VqLBM#ynZ4NP$+Cwo{#7K)paH}BG}sEsV8!AdyM}C+e%ML@2r@FHQHgP z{O&&w@tr**4fJuaty9ujkQf7W%6FHrV4-q~EL);C z*#ywyWZRlx2pWiva}Ic5Ms-+i1cz7gcPLn+G$w!PGPBZ}n6fb=H783`9w!bUf> zueMdNHb<&TfxW3-+{i}sBydZ6y<3HyP9TgC-N=LIo&+KiyF7uLQr0yI+*rPCyowv7 zt80UFc_TH7Vnh^<*!ZR|k-@;=-$enKUg40AVC!84iui{vByjcw8L})!;3_m0@V9nK zRiUbgt_maBpI~p3xjh@F%2krU$@ol0xVsMH>=O}Sr1vC%NJgIlkz#|tkXxy;^%aO9 zP0v{OHf(ttw%VK6p2SD{YV* zX-lEzy%i-*z!Z)TZJ_nEpyL6Z)lw*=#XbWFXLN$NNdzM0Wc~w4U5#@mBlYRDj$!5G z=YRJv(7St~nKvV6L4;U=E)J2Jey4hVBf*uq$N@kt18kEm(F}Hv2_RA+qd|mN<{1Y< z>_XteJ70L;3!i-9bNLG{bTNxyGE6WTqNc7Ux+>A#>6p`!+GR*2sbZ8wy2|;h#f4#0 z$7NH;Wh7jqYnte$RS8l&K*%0r5?*pP$?7L_I=8vyvoSKO%31Y^4D?G7iJ5+lWTe=x z$q4EIY^WuI!X9InH}FNuVp+M^R+)MRIAcX&WU6!Ql1{~yp9nQ$iIkrSO%Ni*c1=cj ze|`xfd<({i?q(UZu7frpeHqQGMCxgPQUMUgHt1E-EPSdRPT&ys8Y5k;)mwd5t%Z&t z^(fj*Mt8?5bH>07gi9{OVOF(%!d9k)2;(bbMEDk>w3MSZuYktBIOZqLs=1pP1A^Fg=0ROk^Kq2@u~-;d`k zTq@q{MGm!t$X^lN-J-b=xqMH6rNWr0GQ@>-&01I!z1wQo;Z%wf*k58=&UZDutgg>k zqKz*JuS_|PP>A_SLBa9=n)Pv2vAm)k10sB&YEbqoqQB{W4sech;}2Ga(>QKj7WvM2KCFn`1}Pv_sNifZIB@e!&Go9d}IK28cwE8Q?Wb^kS$O1j zOzsnb70AzUoBJBpu^QI48miqAAx4^oxJhNQQVakSInXSIXcjq>W|8v~Au%!M7j6S9 z)7b^=tO7Q`V^Jp{dPx<#YaWObya#R)K%~RTImH&X-LVhxQaQPwZ-NM07Te4L8RD8dy{N;KsyU!fg9O|l9RxV zT+%V5A-Iu;IS~Rm8f-fn?5U=lJ(Ce)@%Bb)jScc6k=#eeOhy*HpBBBxH;ItIt)B+c zJx7zsg0^I&)~j8U5iSSR2_|#htRrkyY>V_KiuEVNu)0jVE{!Ja05?UK`bb8%I-I0h z7Nnd`>UAgcx(+d~iO~Cw+hSV*{oMR3OsfOj6*`VE)dj+3%)CvVlFA8Z`bq{v5M4W5 zY6iQvm|@?YOEu+yq{wNc2GWQTp`T0onT!QB>*K}#!3PaAw`UX z8IxxMY~kwc;OY?6I{^Vn?1kqUkz&_QMu@S$o=AS+=o)N_6T{labo^f|pCAX1_9%5t^POW(3nv#)vR3RP;g< z!8@VQCjkg%nK3mj2>yq*06HWAI1mNH7r>sRGkMyBr2lcSCb;3C8NP3o`K47g##D_R z#o~NKFsx*Z2*#FNFcKj)pjAzTSbPm5#59?^XJ>fQACD8VCuu30cz!3{BsSaEv_ryF zth!&cx?gm(m)BCdH;P7~C`*LbGA7yISCaOwW|l3}$Y?Dcm%zZuBErSMn6B`Nf@^5j z5h=EEGD2*{8XEwgfCvD-$I_~s$!!qR&XBNU8vl(XmbC5ltfV>Q)0~VD!>}A#BE_~sTU4&nlaYs)?%}218j!k&rY>zK(~oBg8uSH{{R|t)7f$cjJdmj88|8O0)&H1Viu7Eq{4oeNR6FR6kn`LENH1DWTe>g|G~X(ODR!y zA)Rg^opvJNiX;Ka`js${FXA#zo2DCv0f^eMc#@?v7r!a))?Rbq@O;L0K5YHssc_) z?7U;XC&CL0$eKiWsYGnLL~O!(An{Ruhw%;3V^1J}0zV>`y=UZvNz*~q)~M7LG?YcD zcB7k>y-||UsgsH93V=vMDwasGR+5oo)BhK=#A(SOqT5D@pI9PFSn|~*F>JyBXib<` z5?}->nbHJB*EipLAZ-@(?5igud{=45Em8BYN8dA)}k@ zF)QK47|!MHWciN_8-cUsQ^oU<&g$mdb`x%;Lu4eH72303W7HNVQY^9&M2eyLc)HQJ zxzV_3u{pi|l!``qQC;d2%d-v?jaWqZ9W=KiQYTN$FHxz9e#0goJEF*$hx4X@+Jb@} zLv%(sknaWL202DD!nF{kftj`Mf**;EN#JqHk^&K$VI_A?riY0h=6Mu`jBrNH{rLGq zDEPhq3cElo%R^zKBmpL?E>>d@>56nmj`#9T0_Ufypa>BAL-wQr$mBRyl|<+df<-F8 z;Y8-IV5)I+2a$>CXumTOX*P_Ii10m;!HSwq< zhDc}-L76AAenv9j9QMha^#11i5lO#apTXF!h|!_}4T|9rU6RomCS&A?aS{mUw1Jga zoe>M2}_Q3n$_B!(WE}YK%+K{1P%J0nYJ1iac@n1Hk4mqjQA_Qg<0rK14_i=MT&a=V)n& ztz%#E@{A4N$9IKhbbyav@GBhmugLH{>${u;7+Fj9mHeL!0vwTIeI+BPRx(C(v(37% zWQ3N!45Q9iK@v4=qCTB#+dh=C{Hc!k$Thkx`Pst?|UIeqHL1Xov2K&7~L-u7OW-@*N93JTohd&BgnEqLtPqDsa zSuZj79N{(R&*<@C$5lrcRv+5DHu5UU!+TIDSFAS+G73Q>wsx0jJL7}4eH+=Z=vTV% z_l3VG6|gO|6q3(RfXc)bob^sWlPt3`zNin0^hnHv#MO=-DHNnjRX)KXq&hcx$vZm7 zyKNL^m1zQdxhj$`<)!25o2TRIhyO(>u8j=Wg}*Q44KCEjFV)(&O6^-YvY@?%Cq(2G z=peI^mF!jTprzc#S}Q*PEP#J_7_~9#=Tk{R>I(p-NOZ0bfJ-h`vPNj4KIzwFB;nZF zk`bn(f(%(L?85mt4qyoeaMp|k>tZ7aQAM@a=-mBXnjA!kRa7&H@Y)Iqb|QRX#)u>@ zF?%wS$66#I$7`&e%(jt=esOOO7cB+~cF72<0hWmd>qJo#E9|hK>~annxHBRW;TtdX zt`n(wyq9Ezrt@Af^`W-TZX)#(Ep->E_TJHN)R?#EP~JRU%*hC%C5^@XD*605)P+NY zNtH1onfTU{j4&p1Cb$|tS0=~ZcE{az$K7_v-FC;_cE^uu#IkC{Qf%d9gcxTfBIxWg zMub^YmFJ>aX%x*=!?CE$#BP`fv4Q_1!fWGdFv4d<%n08_jcSff$L8A@Y6(D!75`r; z`n|A_DY!;h`t2?P_aX`JxN?Xj;oYH3@y#RQ@WcOshTIFIKKo)XO&en-qc7WjT+x^s z{1e*tWw1x5eL>WMEc3=9;W#l!*($u}8?O+>;{P)Cecgh5A zZ@lA$H;#NQ(zW^p7si_m;%Fodf=o&TQ2`1K5P@fv;dm=eLpk?#d-!$4x&<9W0$PQH znvCRS65`@S5PPO{3=z!*b4>!+_9Hh~)V|H~j=;Na#f2n4YF;rj*zJ!?q+SrF$+@No zft1>k(M@OPR+3SC*~T<}`_QE(61`(Y(z=b+ClONfbU(Ab8rCYo>H|Wugi^Oen9*Ah zBLL3gX36b@=nU7f2MLk`5c#o79*Ch-7|Yy}lM&u+An`(k&z!K0Bf|e30h(ll_giNG zGP!?Ph=<-RBiI8)hFk!Vp6u|r1<Y8}rK-rKKA=dS z1sR*@Y(viJ2%a<1IiS-Dn)7AQj%(0J79iM&(e$#>{xVuaG0F|Jt_~;)%^Eb5^MDV! z@G1NY4Zi@0WGwZG5L0`NskXCNWR7XYO9@pqTS!C8xvo-g_ z&T%9Gl|A-IM(9E(Z^mM?VNbG0GD2~O@{dF~uIvzAV$)>nZ!GSDB8OI!fJFnUMFXNH z)Lav4id|DNqWi)2)K_!l#>`+T`4IO~O2J{4CNGE;2HFv4XJLr8I_Y)HbgKDJ_r#H;v-3l&01^E#q{ zKl-OJzJaGrSxNy$g4hD^4o~U5{)iBtCXs*$icoA{BSI`bz(}!`lM!M_UQh%0J-O|n z+yt5E{9O_mi{XJL%}A0`!nc`^vb(YfeD>U6uBY~D5g>U7RCx#Ro0?lKam1zDW1Zom9yZ;P+*K3Dae#jhvl1V*#FqAQIVH&ELCn4Am(`F`3)D(7 zQf$s-B(7!DmWgg3gXB*`tir#S2;aFz!Avi0_Hrt z(7-+_9^)c7j0#JV1)G10)*o}j;Oqu~OO>7AL>P`TxkEs=e`4~{VN1Zk(Y$adPYp@{ z2hxopkl@~>+Pqdlf7hok+a?V(YKIQzaWcqv_+CpurhgrkqZBwuQaAXKHeaCtepgI)HUzXL>L(-di-XHa6mlHQWyeTgq%1Fh2vtxnNR3=zNnD^!uwig9McmcJ)Y}u` zOid(pj9{F#Ci@q3_^tLe9ezVpP=J#kIs^GUcO;Qkki#p@k1^~=*LRqtm9^S|@l9YpHS`1%2MO~5U%p4Iiw)~!JThC<64w49MW*xO+BK$@+ zJE$LGZ8jnUAnS|>0P@RNde`DaL3N^_Dk&iSXd_v}g&>Q%Z1aciMWp5HmqOF~i)-ml zjWv10%-bSqoiiMBsyBW3C1c{Qw!Gti=ETI*stF!(lPf|7~dTsd8E@<>yF7 z*bj3o%!e-Uqwl|%zCrDy$=fVc*go#I1a2=}y}orbqJWf#V}>F+N6fxabH0f|1<(#i zu&3C`2(hCFzmY%Q>nrd~06=ocNV*YWR?}Lxdb2&TzA%DFRNPobPdDbP`5iYFooloM zVvPoX2-j$f>n&Tr5S?o`44)%K26X(sH!RGBXY{Ax0Sln=#lT zTX~9t3d`arFn2Lr8z8#T#S5zB@UqXYxI}95jrGj+_}8_Uj~%{BqPxWivDkeYDb`vt zI%}b!-5?RJU&iFU2Ax9qzRY}jV}A5QxpfYhdO}ZhG})9@(xV}9f9t74noKm>;yKXt zsY2T9qyXg;JcHZo!jOB#2zlY=yApIuB80m+u8I#_d>0f|Gw*pCz$oTtA+%YrcYI>u zz9>OX_7mqN1~{I?&`5pMDQ(cn$dpgX;D0>qVKZp(i4+}@3Y15!>so@>#K|EaEo0|?Zwb_Vp|Dr1wsQ1NM)=#Oc9nB<25WB_mlR@1(bY?Md|E z8$AYDaofg@YYp6w0bJl!UW4eRy7|f{K$^f2G-zHtE5tI?Nfb4w zm&REX+;nTJjG#|$K=*OXzonN{W7G7j?Nfs&(Hq;RPi%5Iie`vTGGN=M83r&v`oqY7 zU1&#wb;_WIdQsW~;;fZ^%}F3COV}IL{ytfzM&sgW@AkBH<~*o}P(YUn2lwcwB7(5X z`6`g-7*l#4Van(3DL>XvznjX+LNyM#`y8nKl= z7t|O??CFi$zxuj*GFTuAF0T=e#YSF@Ne(rw zM~R5&rcYS0V_4z0i`SluBy1yo^zYM!4igsa*FZ7?gl*6{fkmbZheI}Ted0`Z35 zIB)p>oCz*N+#R}z7sUaYW#yBYOF6pp*>g0`^}cUEDG}+=3619Zj0AG^EDIYWFBzfkg{g@z3P=dxMq86kpjBzHa~ zmP-E-(!d2q#?|Mu;Y9gK_3@~}&r>zHmiDt)Fl9KO@>w|v_$jF_T~kdBv8^XM$1|kJ z;KNkT1U8+H(e3&=^ zL-)K$7P{%*i~;eHF$MoQ#1${7ErzRgtocs|OwC%hHt2rFa|0b}aHYN>Z+du^9YT2> zg!y`E>%kxj&ziG8_w!d`^hWedbitdN^=K6R=s&}1fYKP0o+rBL1fh$J7vmhh7>Bd1 zs2&TTVW^-rgD6}~G3M++tFn+FTuC6hX^&A?61ZR5+Lo`T;R{SfnSt&Uw6)nTr24Af z5=My4PS_<9opZaqJz8$wh7W_lIURA8L|G3=G}k(l5qfCk49!-xEN8r|3v_Q?phW1= z*dOpSaW}-OtjRm2K`;#w0J(-@PO679`=kF#Q71241VoR>I~hr#aL#0eQ7KAoMmNO1 z>q-Jl<_zx9FKya`RX~JT^kW+#w&|p7lLRawnC@jGJGv9M`xN)1ekJRIiN>QKHW{G{ z`Ru!rkuqvq3AK$44I%&(>Dtujk~P4li@`<(dm;}+bUrH<4WZ}&6nkc`6lzTD{}V)q z3kNqxNd`dvi+Lv_d^et!s-o-WSrK4AZ(T{?k%)}mrwbR=+3F^vb2&ykXIzg!X#7ED z&z0w?2*5dUS*tpUsTR4|mik1fG(dz{q^^w+yAU`#;el3dE|9Mg%jNU%cM}6Gu$PGe z3aqy%egnz#OcelLCb{yW0JxzgvJ)Tga~k7sJl=9$q3Y+Ba9?f7NcNRM!zKa+hSNih z>EW-TMseZW;s;zxqUg@`ee0bS5#F%Da-0Zuf0cY0AT?W73?tWPC!<3QuA_^7F6_H_ z_#?Sq?DGFz{6Bg!>AXko zEzUa;XeS&Vh(rwC;)TZAOp&HYZn`#jEi4re?1XzJ=;&S|LX+@3=g#O|53FW?DkD%Y z86%P)L&(KM2TrDI%5-^nsyw`?G=m~QTwGv04(+PtlVyZSlipb}gIi$sH`K-2sZIa> zw@_s!Z(`uGFv0~JDc5+^1-o)G(ghopQ6gWk+ZXKC1v|0o<97J8fzVeBKP9%skx?PS z*X9ey)YdfW!jVWLI+uK0e9=Y=gbk`mshVnqzc#f}l#cZ>vIRgV-B|HbBiO@vrs{_}_4~h$ToWhs>zUqPiHqY+wlWI7nN=tt zAKj`0iOdiI}6VuGE7C{ph+Co&aHYMVG3$UoK=nGy;S9 z8QO;D$?jWk}AgZ_D8J{8F6uC+^xk}a|S4krDaK$We*%P%-bFb%!i|vmd zqmhb669LHHXSAph;r?V-36ad_c1uQgn9ydl5EI?!dqA0|VoBFv8Wj1L0O(XW{@uyw z1|80?MYGqP+nvZ@^9w>>|iwvh*Sg#fq4h2#N( z4Z1PNEs+t*lMpe9u*>DWtFX9SSXAzdE+c~qx060}Q_3eq_yJ5}64_m(+Fhigk_`@S z69+fk69x^}$ia;n1((Ai!TkQ8CMD05@Y(Zi-x724@p~_KQ7mT2n==N{;VSsNuXWf$Fc9yP1Si0;>hDz&ZFA(`~T+%kCm^^&^)0>a8-tCyY(C**R3Z| zo}ymy$2*sb{nxEH@=X_7zp!J%o|t5^Ot$MzMp`XSZ*SlM zsvQpi8IH9lfg7ab5!FrHp}i{IcTI+tB5}p6ar?QG0V-P9@mZ|CdK9ntBrXiOZpM?6 zV7Myw*A)J^Ec{VfhB3l1No*lrM#A^}&k?EvE1rDL>G$SWIiUAUxhDApZ3nf0D0d-@HGQw2Pk!HpX z{x?!@1xrlIkyn1?P%B)y0-WEtr4dhL!}wR8MdKY@lMy(Rj1h$#E(hUIN-WTAqfYBG zD>$1#^N?j)(YYgf(RiKkh(WDVK3z^7aUHSHVoa9KB5C)%36ox(L@9}(W ztQP19;@6)!&(DR0C>?>$v=~BXtaugC@QH366(sL2SwL1cN3}E)CS3>IC3Mb}_a z>}@>3hK-`iv@Fb|d`yM(6%k_C+5ljWL7%)r2ceod@azOvR)Q;ft7b_?Z^ku`eyV>6@bIsZ1h^krLsaZ4F*s|%Rdfd-vaQ=& zUVh=K+)_og65s~0I&=moGXSu~xmHbXVV_8(>?6dqs?@=+V%K_)L*d#|lfXGHMI#ZB z_Godv9n#_-d|%Tv+(EQ898FupszbE+Uzd(+>7Y6k?5HlRDq!ZWw|aSljzvl6!N4FZ z{)=^}cnWX&c5~OOHZ<{6pQ>jSPjK;TPX751eh>M{3$kCheE`lB)^z(U7bd4We29>z z=449*V_c>eiEgkF2le&Dm{=rCEJ7vDWCn*O2T!cO38UgUu1CBF9 z*c1#X{uA9){Fx;gdFkMWrnuQdqv#@0k6F!Vr=DkzMC6*)aLsCHp^XbwxBKS$N8m2lP6@OSUf5AVbF7A#aPjl>!+{|C|JY=)2W;DbRP>0LaiteOiW#|gW0m00{n z$gk4=K;T`|1SWLjD58%*%Y7{NsjD+;GP0lVq{1z)9WnX#sT2Ld@BiN(%tJ~OK*M>< z$%w;w=4c-GJKA&v&OtqAr-kYv&=-^t7eWH3W;CHTW^|V0k&QbsB5N7`gS@ybpe@K1*6;$gaYnD!|B?jZel9)8i=+>l_PNgUBRrUj#~ zQ5@%Z*{CGi>}+DeH(~+)V-Ry$nuxEElhOHp`Z8GwsB4+ydy1MYX+Au0UZ_MMUGPF( zk5GUw)b0y4`$EmSP%UB8XlA*fv}$xly7-_Z0Ld`rT123Z!9K3807yf%4~dTu24f+! z7IRIjx)X@7X^xl?Qmx9{SSBv^o-vsdsgrZIWMtVct9HSWgbW5nE>)ueklEPQ!9w~s z`X`Mf0Tn7cL^spJBAiE=u|ZcL?tUVaC?}eu0=y)|C1j=Mg-{M6I?38IP=?7Ek!9Nk6$Mbh|pYjoZ zvpMh^Mex*`z0BjHa6%q}ZT>NtVQQO(({Qc6_O zwPzZM0Dv7pBar|oxuO<1)?*P;u-qp?5w=3VhDho=VdqXH<(u4-5xzxu!5BS;6t;1c z!5Ws_Lv|vY+iN5I1X`%mw!Ok=PVZZ{J6W>3<+=*av}um9Emy{uI7Rj=fq@8 zbUv~|iQnjsi*3V(es}2%2J^S}WCU_|yw(WkGG04y-nQ?M?Ym|d=4p0G0vN?2bT0g# zKi+76@ZWJ(S-8du{X7OyGsAfR0J>phkPsafV6=Zn`5x%p7#}Z_5%)@f8{*fMBV%kM z!tAi^WF+1AD9jVFfKh@|gl>@C7y!U8rz;X#Xvn-ObeGc!j--&$i;IpC1_lZ?5Xl5` z)?@_Q;ylX+BgxZENztK=Z)p`w1YYqtOMN5U*eoIvQD1M*Byh)w%ugT!J^uMr#v06$ z1YFhJu4=xHfe&3PI9l}DDfH1{b3470KXumWFLu+*Zadws(L`dZZ_Y`tv1=!zn;t<$ zW+;x%+uF=IY#tSQZqur zN4&QvT`sU37g&xN1k_9dY6k(e>#z7_M$#QG!}{a{F&RE}Wn&-_6)r14piT{#G7+hk z&}TA&`YJaamrH)0!VVRcMiZC0iXD(!jZc0}{SGZ5rKVLof59qgx`V&(kF6j|&!5zV`&z?_tI~RclFZnH0P& z$V)fMWQ15(eHi0nvzR3jV$!_HYRFa02&@{WIGZQT)?QvakuxYm`s_sLotu$s1i)|L zZzTfP@%jCn2Pq|-jPR+P^_pkBNC#u>zcugWu6d6Lr-$>N4Cg!jbWe;33$I1V6d)X_ zjUAqh>DhCF*{&+KJOeJzcA2rbDIHi&q%7pKKq5_6yE0(Ye5bOcob75Z#0F6pbQJ?N+mQtC8>-PWTKbd{ozl zu4rudbF(g9b4Kgz9}63aI!I|TmM(QHOvN%PlWraOr2r9`ShWK%!dJ=v*rDo<$?YymqMJ3Lh;@?|BZ0%lZIBj=NsGm# z#mi~U_@V>Unlh3RB;gn%Le{rqZYEM})MTXC-pNQ+yNX5CFUF$kx8Lp^qEZLI-9u|h z0MhgnX}zowv!{CNr!t{ggbAXT-NP!JH$u8B+HQ%?<(nZbWAxhFA!o(dH>lsENy>XJ z$$Jxl@g6bk?w{7~#eUBQ!Mr%Ojf`EEQd?B1`6%biqC`be7kY6UdQl>zlGe|0UJMBl zB(^z`+x@`Ha-DU#xnyA9YjmEi+JH$5-u8EeJ9P5y;Ntc&Hk2chVq;&t}ys zY9+C1=R1Ex(@X$Qa28F)W?fLjT^dZbk4HZSe7-D{0@wD8H=mO@x?6*zFNE%&l88 zLJS-j069b3EINGe80h@FRQkfMrpAKRv?yJcN{Al5Xj3Laj4Wv)df?`g1aL;+8M!q} zb+>DwVtjiE`(`l<{R%d-9E6x0N}rzF0a<(_vN8%u8Rhm(meG3%GRGpf2>{BHnJuIr7QqettsQ zSxy}mpPcN}QJF8X3Rl7W`hRp2Z)%0iaKfNxZ-%xQ!nnOJEVizM;x%H}xm;M?U+Qy! zimk+K`&ke2FPcu|D)o+5WKO|n@s2dH;ImTg$lONo)+NGg)xKcurtCFkWOcA0<6UEf zjl{=$Aqkv8WKtFZ0P++RClIG61`c+)5V`4qX1USP7WzUT*N)&vm2vC2b8R+UQs;p3 zu8DpFT*B>54?^Th`E2sr-hLK+4!q+q?Ii(4LSKW(`WlZe$D`HpNO}yIaX=~EEiR?H z#bsS*Dfi=liHdSYPs6L$O2MtgCy^GQ(j=b^t(5{bjTa%C2{BDQ`H9#{c~x6!ta{Vg zqyKLY9L{aYVQTS@k7S zLVh_R9~1(#sIrxBfq+yO_KFo_qxw=9o76bxb2_iV_mt3WaH$KkOq5C86i!_YuQNi* zlJCAO*tfdWXowVRI~l!n+Z^E+(#A^{m7EBPR>p{KE;~c5pww5j8L+hLSLIIYAfDb8y%0)P>eOPrO@66eRi1+9|kolxrp7dYL#if&#-Gq0kVS7BNOSrxV! zx6Am4rp@=G8+$!D-U<0SDRNG(B9c*c)Fy}^FvmSdb*I23GS?-USoHafWE7tm z%iG}pf`YS05;!{&p4d%^)uD@K_?j8`K1MeugD?RjI`<#dl(tzU*#ZaI0tdmrnATwm zN@y9Te-6<c2NW8 zZ`;-SNmHx*YeODLLM{+MueW_3?Xbhqi+R0_tCuVPuYL|f#&Qmb{mF%B{E9=S{_+2V ziSR;w1b1K6?H4YFar+S=9j;ykc`7UxRs`?Mhiu73@L$BDfheAHlja?ztpjmhz4^u!TYgMdOu%=4kj-v{i=5QLhPAN7L zp}l9&l@kcRkh+Uffezo(AT|)42`@^VkqZI3>uY;Ywp>xQT#*$rD4Up!?g<}mQQ}Zt z=|lP=-KCP|Qb}{Eq|xANh_xEKIB5t@Bz>cWG}x3xm+?uPiiPp#sz+Gw$NvLTp0t*>fl+ zxS|QJaDuB-Gh9b6+;mTrbk;h0G8Pj!u^FFs1+cz(?r$5^g9k`*=`^{t7E1sQiim9! zY>8m?tTNtwqw8w<*NOjX_^w2Fx0CrxMxM@o@?4QUS7gr>-l!7Y^!hz>Mb%use^9Fg=JMomT{EH?2K8~WEK$OuHp zw9OBRkGH3@Hxt{`%r-T(4bN@kncO(rx50#<_C!XANoadme0$)9Yg5Flb;{fUobF06 zm-$zp;^MA)#8-a&SAQ=IaQDsiw;Cy#YHIM8r+wymodD9N7*m@Z=NHML zaPF?4P6@hr5na6eG~GIuDV3^WTy3Wj=g0s1$+di{OBHV*8u$KMZ7Pq)L|@RR;)vX^ zy&;WMDo@!ePv>VPBPl;+{vWR&&J+UZR;_S@CpwGp!7F2^1tfBjtt2B+aKf;HNOCsI zdNxZmoGgw}=Gu$eRpoK#tQ^gemS0HAul$(+*M!{=9`M(>vIG!`vZ)bbyk}jukHT3J zIM>HEpLPG;_^gu?|LUrx_cOAE>L?M0@rA@7Q5-CoQY@R%3|Ivjp^QUaY$E)?NFf>F zwUhc{K-fxCnukbr8_8n4DlKIzEoHN4yIHjTRTpE0V%v}Z8cSB(y+Ix+N#HJ~kr>%% zd?q8bJJn+a$3PeEJYRyu4uF}5LY0HZJR+yUZs0ElD| z>4+3NqaqcLqvX2S&|X07M$RE8qci6<(r7vvo&##6m0v69_Z$jxPDWas$45l6w;-(q z3Jw5fNKknI&dN<{>a!@Z7#pAXVnm9yk&G0JZqqR8U6VEY@B;@pr}w1pLX$TDwru2a zbV|g>iapMd5q{Bg))-qwCpU(LXl$tGol6qHhHXN$i3o=__Ty7~risFT}dm~6|6ShK|~NpucKgHpE<4w4d)-is_-U=ZQVOjhixjT5W=E>=6awm)=yy)(cTVYdLI(j%`NJ(=I|<;IWG7HF%PAYL zGeVX5E@2%6{>o4EidZM&p0P9*knUeJC9OFlIBL-3UdvEkTo zY|DojZ2D2jrUzidUeM_QsQw8Du=Nt@U3#GX>-0eT!du0m7+^z&J{=KAB{g=n0JL=s z<6%$@7FOI8HzxwKEhbZ=NU#p<$N@rQKOzF*tceH#)kK3A6^=-AsVN*KH6ZzW4%vVX zMB<22mwIIMJ`ad@5uNQ|j0vFy2V@`fECW;?is(c)!XcYzhbO{G(rwS*kTL((oQyz_ zpJxy;LaI8xa@=cYq)sZXVEvJ8-z%tkw(Hf zjR_-V5gl7ZVc?F%OlFR!uno>gb{Wx!Gqy;3BDBlConrP8lVp}%-Y50K=6>X~G6>+( z6q}ZUtXwL8d`_W@s|(s~1dVLW+s`UiZ$C-lgWME~&2y+Ilv~dwN~lG`0nZ_$&UrDU z&!wkHGifboLe=E#TtH|o=$$806VRkvY34m0N`ej;SYBa(dN*a3uY%L$kr6V5AT)8D97;58iPBkQqt;0zavm*{?pWJANvQVb$eRj<} zW7SH8IlM$Q8~}~~1w92sH|3K0PDWrv#o0L@F8dTas;K{G=t>@PMHyNDL>YmM%w6!G ziSQ$vez-!P9!`(VgAUfM;Mgt}r-1i&jvGbECDSH*!~Wecna zDLzlgZt#BA^bm(+p?EVNhsBEf+2|bn0dk;G{7i8JS3gObKRRkD3oMr@HN7b{y=l_h zw8H$b!n~xnKdx1EeTw9^RTJK-36G)#4HD*GK@K$@!50UG901$TNPQWd-AH89k^mU= zk;O2=C1A-iaOK2qHA0MuA0ovZnzWV3bd|`;enf{a5pF7`+M303vXud|Dxu55PtwL3 zMe05krR+X14jP?{Da+ED2%8*ejR2e(b~6G1yIkCQ0J`<2?mR|#o0Ug%G#0EQ8EHFT z=)f_cm=(*Kt0yCE(xx|Qle<95)s$_8KTG^c<8PULw#+_T13AW4CAA!#6QKt}6uNus zd<}skm%_~XSWK{ojaQ8SM7XgQ^cslpGnu9dsp3ES!~Y9fbqwHz9XID?eS?wiVdt)3dXi;%N&~siAgja zEp?;zDz9B4NlHe=nFz8Fj1g%;7Cr4+3Pd>|W@aNK;@P@S^th&xO<25wfe1VhDA4^} ze@0k0F^LsB?}AC8@n%Hn>{LU~dN(p3KsZXw??@Q{>C@&!YI7!aIg`5n&UOOI$8_xF zLR^PPP3)rO4%C@)RtFLhwn0p95NQqB9s{MOtxIcf60vi?uqMP^dR19qY_yk6$j>HQ z-_76X*e?ckh)8Wo!FwRWRmgOfWQhlSN-looh23e%s5TqPi>|a}gw7rK(*ei@VcG>@ z&bMm$YaL=Q$cvkfv@65L;gEg zjSM2UxZkRq1}T79t*>+(BS#wKmMFS_LGee zinuM8^y$u@cRXJH6EYH1lZd~f5*JIns{d;rI#oO%^ilaX^#kU^@xj`Lw5Y@L)Gvy$ zFWw*m=Xd@5X;1#+|Ae&j<)pK7&Pq8$@z(wO)&2XmyplXyNdh;lXipyt!7a<2kaUXH zkRxCb9H9VbWZPgb8%a8CSs8Ot%bXOC{rLXHWww)%wryLUPLImwRR8^Yv2T)OBitke zFl00|X%I=#GdR7waA4d8HgraagaM+h~w%s|~ zuAD7SJGo&MFEmm{3yxn|jwl7{T;$KjN!E=Vf)#)AFF(n^WhLpdlXTg+yzE?_^K?qn z^_`4s#@mT�W*p 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∋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 +} + +void SolveSpaceUI::MarkGroupDirty(hGroup hg) { + int i; + bool go = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == hg.v) { + go = true; + } + if(go) { + g->clean = false; + } + } + unsaved = true; +} + +bool SolveSpaceUI::PruneOrphans(void) { + int i; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(GroupExists(r->group)) continue; + + (deleted.requests)++; + SK.request.RemoveById(r->h); + return true; + } + + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(GroupExists(c->group)) continue; + + (deleted.constraints)++; + (deleted.nonTrivialConstraints)++; + + SK.constraint.RemoveById(c->h); + return true; + } + return false; +} + +bool SolveSpaceUI::GroupsInOrder(hGroup before, hGroup after) { + if(before.v == 0) return true; + if(after.v == 0) return true; + + int beforep = -1, afterp = -1; + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == before.v) beforep = i; + if(g->h.v == after.v) afterp = i; + } + if(beforep < 0 || afterp < 0) return false; + if(beforep >= afterp) return false; + return true; +} + +bool SolveSpaceUI::GroupExists(hGroup hg) { + // A nonexistent group is not acceptable + return SK.group.FindByIdNoOops(hg) ? true : false; +} +bool SolveSpaceUI::EntityExists(hEntity he) { + // A nonexstient entity is acceptable, though, usually just means it + // doesn't apply. + if(he.v == Entity::NO_ENTITY.v) return true; + return SK.entity.FindByIdNoOops(he) ? true : false; +} + +bool SolveSpaceUI::PruneGroups(hGroup hg) { + Group *g = SK.GetGroup(hg); + if(GroupsInOrder(g->opA, hg) && + EntityExists(g->predef.origin) && + EntityExists(g->predef.entityB) && + EntityExists(g->predef.entityC)) + { + return false; + } + (deleted.groups)++; + SK.group.RemoveById(g->h); + return true; +} + +bool SolveSpaceUI::PruneRequests(hGroup hg) { + int i; + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->group.v != hg.v) continue; + + if(EntityExists(e->workplane)) continue; + + if(!e->h.isFromRequest()) oops(); + + (deleted.requests)++; + SK.request.RemoveById(e->h.request()); + return true; + } + return false; +} + +bool SolveSpaceUI::PruneConstraints(hGroup hg) { + int i; + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->group.v != hg.v) continue; + + if(EntityExists(c->workplane) && + EntityExists(c->ptA) && + EntityExists(c->ptB) && + EntityExists(c->entityA) && + EntityExists(c->entityB) && + EntityExists(c->entityC) && + EntityExists(c->entityD)) + { + continue; + } + + (deleted.constraints)++; + if(c->type != Constraint::POINTS_COINCIDENT && + c->type != Constraint::HORIZONTAL && + c->type != Constraint::VERTICAL) + { + (deleted.nonTrivialConstraints)++; + } + + SK.constraint.RemoveById(c->h); + return true; + } + return false; +} + +void SolveSpaceUI::GenerateAll(GenerateType type, bool andFindFree, bool genForBBox) { + int first, last, i, j; + + SK.groupOrder.Clear(); + for(int i = 0; i < SK.group.n; i++) + SK.groupOrder.Add(&SK.group.elem[i].h); + std::sort(&SK.groupOrder.elem[0], &SK.groupOrder.elem[SK.groupOrder.n], + [](const hGroup &ha, const hGroup &hb) { + return SK.GetGroup(ha)->order < SK.GetGroup(hb)->order; + }); + + switch(type) { + case GENERATE_DIRTY: { + first = INT_MAX; + last = 0; + + // Start from the first dirty group, and solve until the active group, + // since all groups after the active group are hidden. + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if((!g->clean) || !g->IsSolvedOkay()) { + first = min(first, i); + } + if(g->h.v == SS.GW.activeGroup.v) { + last = i; + } + } + if(first == INT_MAX || last == 0) { + // All clean; so just regenerate the entities, and don't solve anything. + first = -1; + last = -1; + } else { + SS.nakedEdges.Clear(); + } + break; + } + + case GENERATE_ALL: + first = 0; + last = INT_MAX; + break; + + case GENERATE_REGEN: + first = -1; + last = -1; + break; + + case GENERATE_UNTIL_ACTIVE: { + for(i = 0; i < SK.groupOrder.n; i++) { + if(SK.groupOrder.elem[i].v == SS.GW.activeGroup.v) + break; + } + + first = 0; + last = i; + break; + } + + default: oops(); + } + + // If we're generating entities for display, first we need to find + // the bounding box to turn relative chord tolerance to absolute. + if(!SS.exportMode && !genForBBox) { + GenerateAll(type, andFindFree, /*genForBBox=*/true); + BBox box = SK.CalculateEntityBBox(/*includeInvisibles=*/true); + Vector size = box.maxp.Minus(box.minp); + double maxSize = std::max({ size.x, size.y, size.z }); + chordTolCalculated = maxSize * chordTol / 100.0; + } + + // Remove any requests or constraints that refer to a nonexistent + // group; can check those immediately, since we know what the list + // of groups should be. + while(PruneOrphans()) + ; + + // Don't lose our numerical guesses when we regenerate. + IdList prev = {}; + SK.param.MoveSelfInto(&prev); + SK.entity.Clear(); + + int64_t inTime = GetMilliseconds(); + + bool displayedStatusMessage = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + + int64_t now = GetMilliseconds(); + // Display the status message if we've taken more than 400 ms, or + // if we've taken 200 ms but we're not even halfway done, or if + // we've already started displaying the status message. + if( (now - inTime > 400) || + ((now - inTime > 200) && i < (SK.groupOrder.n / 2)) || + displayedStatusMessage) + { + displayedStatusMessage = true; + std::string msg = ssprintf("generating group %d/%d", i, SK.groupOrder.n); + + int w, h; + GetGraphicsWindowSize(&w, &h); + glDrawBuffer(GL_FRONT); + glViewport(0, 0, w, h); + glLoadIdentity(); + glTranslated(-1, 1, 0); + glScaled(2.0/w, 2.0/h, 1.0); + glDisable(GL_DEPTH_TEST); + + double left = 80, top = -20, width = 240, height = 24; + glColor3d(0.9, 0.8, 0.8); + ssglAxisAlignedQuad(left, left+width, top, top-height); + ssglLineWidth(1); + glColor3d(0.0, 0.0, 0.0); + ssglAxisAlignedLineLoop(left, left+width, top, top-height); + + ssglInitializeBitmapFont(); + glColor3d(0, 0, 0); + glPushMatrix(); + glTranslated(left+8, top-20, 0); + glScaled(1, -1, 1); + ssglBitmapText(msg, Vector::From(0, 0, 0)); + glPopMatrix(); + glFlush(); + glDrawBuffer(GL_BACK); + } + + // The group may depend on entities or other groups, to define its + // workplane geometry or for its operands. Those must already exist + // in a previous group, so check them before generating. + if(PruneGroups(g->h)) + goto pruned; + + for(j = 0; j < SK.request.n; j++) { + Request *r = &(SK.request.elem[j]); + if(r->group.v != g->h.v) continue; + + r->Generate(&(SK.entity), &(SK.param)); + } + g->Generate(&(SK.entity), &(SK.param)); + + // The requests and constraints depend on stuff in this or the + // previous group, so check them after generating. + if(PruneRequests(g->h) || PruneConstraints(g->h)) + goto pruned; + + // Use the previous values for params that we've seen before, as + // initial guesses for the solver. + for(j = 0; j < SK.param.n; j++) { + Param *newp = &(SK.param.elem[j]); + if(newp->known) continue; + + Param *prevp = prev.FindByIdNoOops(newp->h); + if(prevp) { + newp->val = prevp->val; + newp->free = prevp->free; + } + } + + if(g->h.v == Group::HGROUP_REFERENCES.v) { + ForceReferences(); + g->solved.how = System::SOLVED_OKAY; + g->clean = true; + } else { + if(i >= first && i <= last) { + // The group falls inside the range, so really solve it, + // and then regenerate the mesh based on the solved stuff. + if(genForBBox) { + SolveGroupAndReport(g->h, andFindFree); + } else { + g->GenerateLoops(); + g->GenerateShellAndMesh(); + g->clean = true; + } + } else { + // The group falls outside the range, so just assume that + // it's good wherever we left it. The mesh is unchanged, + // and the parameters must be marked as known. + for(j = 0; j < SK.param.n; j++) { + Param *newp = &(SK.param.elem[j]); + + Param *prevp = prev.FindByIdNoOops(newp->h); + if(prevp) newp->known = true; + } + } + } + } + + // And update any reference dimensions with their new values + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->reference) { + c->ModifyToSatisfy(); + } + } + + // Make sure the point that we're tracing exists. + if(traced.point.v && !SK.entity.FindByIdNoOops(traced.point)) { + traced.point = Entity::NO_ENTITY; + } + // And if we're tracing a point, add its new value to the path + if(traced.point.v) { + Entity *pt = SK.GetEntity(traced.point); + traced.path.AddPoint(pt->PointGetNum()); + } + + prev.Clear(); + InvalidateGraphics(); + + // Remove nonexistent selection items, for same reason we waited till + // the end to put up a dialog box. + GW.ClearNonexistentSelectionItems(); + + if(deleted.requests > 0 || deleted.constraints > 0 || deleted.groups > 0) { + // All sorts of interesting things could have happened; for example, + // the active group or active workplane could have been deleted. So + // clear all that out. + if(deleted.groups > 0) { + SS.TW.ClearSuper(); + } + ScheduleShowTW(); + GW.ClearSuper(); + + // People get annoyed if I complain whenever they delete any request, + // and I otherwise will, since those always come with pt-coincident + // constraints. + if(deleted.requests > 0 || deleted.nonTrivialConstraints > 0 || + deleted.groups > 0) + { + // Don't display any errors until we've regenerated fully. The + // sketch is not necessarily in a consistent state until we've + // pruned any orphaned etc. objects, and the message loop for the + // messagebox could allow us to repaint and crash. But now we must + // be fine. + Message("Additional sketch elements were deleted, because they " + "depend on the element that was just deleted explicitly. " + "These include: \n" + " %d request%s\n" + " %d constraint%s\n" + " %d group%s" + "%s", + deleted.requests, deleted.requests == 1 ? "" : "s", + deleted.constraints, deleted.constraints == 1 ? "" : "s", + deleted.groups, deleted.groups == 1 ? "" : "s", + undo.cnt > 0 ? "\n\nChoose Edit -> Undo to undelete all elements." : ""); + } + + deleted = {}; + } + + FreeAllTemporary(); + allConsistent = true; + return; + +pruned: + // Restore the numerical guesses + SK.param.Clear(); + prev.MoveSelfInto(&(SK.param)); + // Try again + GenerateAll(type, andFindFree, genForBBox); +} + +void SolveSpaceUI::ForceReferences(void) { + // Force the values of the parameters that define the three reference + // coordinate systems. + static const struct { + hRequest hr; + Quaternion q; + } Quat[] = { + { Request::HREQUEST_REFERENCE_XY, { 1, 0, 0, 0, } }, + { Request::HREQUEST_REFERENCE_YZ, { 0.5, 0.5, 0.5, 0.5, } }, + { Request::HREQUEST_REFERENCE_ZX, { 0.5, -0.5, -0.5, -0.5, } }, + }; + for(int i = 0; i < 3; i++) { + hRequest hr = Quat[i].hr; + Entity *wrkpl = SK.GetEntity(hr.entity(0)); + // The origin for our coordinate system, always zero + Entity *origin = SK.GetEntity(wrkpl->point[0]); + origin->PointForceTo(Vector::From(0, 0, 0)); + SK.GetParam(origin->param[0])->known = true; + SK.GetParam(origin->param[1])->known = true; + SK.GetParam(origin->param[2])->known = true; + // The quaternion that defines the rotation, from the table. + Entity *normal = SK.GetEntity(wrkpl->normal); + normal->NormalForceTo(Quat[i].q); + SK.GetParam(normal->param[0])->known = true; + SK.GetParam(normal->param[1])->known = true; + SK.GetParam(normal->param[2])->known = true; + SK.GetParam(normal->param[3])->known = true; + } +} + +void SolveSpaceUI::MarkDraggedParams(void) { + sys.dragged.Clear(); + + for(int i = -1; i < SS.GW.pending.points.n; i++) { + hEntity hp; + if(i == -1) { + hp = SS.GW.pending.point; + } else { + hp = SS.GW.pending.points.elem[i]; + } + if(!hp.v) continue; + + // The pending point could be one in a group that has not yet + // been processed, in which case the lookup will fail; but + // that's not an error. + Entity *pt = SK.entity.FindByIdNoOops(hp); + if(pt) { + switch(pt->type) { + case Entity::POINT_N_TRANS: + case Entity::POINT_IN_3D: + sys.dragged.Add(&(pt->param[0])); + sys.dragged.Add(&(pt->param[1])); + sys.dragged.Add(&(pt->param[2])); + break; + + case Entity::POINT_IN_2D: + sys.dragged.Add(&(pt->param[0])); + sys.dragged.Add(&(pt->param[1])); + break; + } + } + } + if(SS.GW.pending.circle.v) { + Entity *circ = SK.entity.FindByIdNoOops(SS.GW.pending.circle); + if(circ) { + Entity *dist = SK.GetEntity(circ->distance); + switch(dist->type) { + case Entity::DISTANCE: + sys.dragged.Add(&(dist->param[0])); + break; + } + } + } + if(SS.GW.pending.normal.v) { + Entity *norm = SK.entity.FindByIdNoOops(SS.GW.pending.normal); + if(norm) { + switch(norm->type) { + case Entity::NORMAL_IN_3D: + sys.dragged.Add(&(norm->param[0])); + sys.dragged.Add(&(norm->param[1])); + sys.dragged.Add(&(norm->param[2])); + sys.dragged.Add(&(norm->param[3])); + break; + // other types are locked, so not draggable + } + } + } +} + +void SolveSpaceUI::SolveGroupAndReport(hGroup hg, bool andFindFree) { + SolveGroup(hg, andFindFree); + + Group *g = SK.GetGroup(hg); + if(g->solved.how == System::REDUNDANT_OKAY) { + // Solve again, in case we lost a degree of freedom because of a numeric error. + SolveGroup(hg, andFindFree); + } + + bool isOkay = g->solved.how == System::SOLVED_OKAY || + (g->allowRedundant && g->solved.how == System::REDUNDANT_OKAY); + + if(!isOkay || (isOkay && !g->IsSolvedOkay())) { + TextWindow::ReportHowGroupSolved(g->h); + } +} + +void SolveSpaceUI::SolveGroup(hGroup hg, bool andFindFree) { + int i; + // Clear out the system to be solved. + sys.entity.Clear(); + sys.param.Clear(); + sys.eq.Clear(); + // And generate all the params for requests in this group + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != hg.v) continue; + + r->Generate(&(sys.entity), &(sys.param)); + } + // And for the group itself + Group *g = SK.GetGroup(hg); + g->Generate(&(sys.entity), &(sys.param)); + // Set the initial guesses for all the params + for(i = 0; i < sys.param.n; i++) { + Param *p = &(sys.param.elem[i]); + p->known = false; + p->val = SK.GetParam(p->h)->val; + } + + MarkDraggedParams(); + g->solved.remove.Clear(); + int how = sys.Solve(g, &(g->solved.dof), + &(g->solved.remove), true, andFindFree); + g->solved.how = how; + FreeAllTemporary(); +} + +bool SolveSpaceUI::ActiveGroupsOkay() { + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(!g->IsSolvedOkay()) + return false; + if(g->h.v == SS.GW.activeGroup.v) + break; + } + return true; +} + diff --git a/src/glhelper.cpp b/src/glhelper.cpp new file mode 100644 index 0000000..f789121 --- /dev/null +++ b/src/glhelper.cpp @@ -0,0 +1,921 @@ +//----------------------------------------------------------------------------- +// Helper functions that ultimately draw stuff with gl. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include "solvespace.h" + +namespace SolveSpace { + +// A vector font. +#include "generated/vectorfont.table.h" + +// A bitmap font. +#include "generated/bitmapfont.table.h" + +static bool ColorLocked; +static bool DepthOffsetLocked; + +static const VectorGlyph &GetVectorGlyph(char32_t chr) { + int first = 0; + int last = sizeof(VectorFont) / sizeof(VectorGlyph); + while(first <= last) { + int mid = (first + last) / 2; + char32_t midChr = VectorFont[mid].character; + if(midChr > chr) { + last = mid - 1; // and first stays the same + continue; + } + if(midChr < chr) { + first = mid + 1; // and last stays the same + continue; + } + return VectorFont[mid]; + } + return GetVectorGlyph(0xfffd); // replacement character +} + +// Internally and in the UI, the vector font is sized using cap height. +#define FONT_SCALE(h) ((h)/(double)FONT_CAP_HEIGHT) +double ssglStrCapHeight(double h) +{ + return FONT_CAP_HEIGHT * FONT_SCALE(h) / SS.GW.scale; +} +double ssglStrFontSize(double h) +{ + return FONT_SIZE * FONT_SCALE(h) / SS.GW.scale; +} +double ssglStrWidth(const std::string &str, double h) +{ + int width = 0; + for(char32_t chr : ReadUTF8(str)) { + const VectorGlyph &glyph = GetVectorGlyph(chr); + if(glyph.baseCharacter != 0) { + const VectorGlyph &baseGlyph = GetVectorGlyph(glyph.baseCharacter); + width += max(glyph.advanceWidth, baseGlyph.advanceWidth); + } else { + width += glyph.advanceWidth; + } + } + return width * FONT_SCALE(h) / SS.GW.scale; +} +void ssglWriteTextRefCenter(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata) +{ + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + + double scale = FONT_SCALE(h)/SS.GW.scale; + double fh = ssglStrCapHeight(h); + double fw = ssglStrWidth(str, h); + + t = t.Plus(u.ScaledBy(-fw/2)); + t = t.Plus(v.ScaledBy(-fh/2)); + + // Apply additional offset to get an exact center alignment. + t = t.Plus(v.ScaledBy(-4608*scale)); + + ssglWriteText(str, h, t, u, v, fn, fndata); +} + +void ssglLineWidth(GLfloat width) { + // Intel GPUs with Mesa on *nix render thin lines poorly. + static bool workaroundChecked, workaroundEnabled; + if(!workaroundChecked) { + // ssglLineWidth can be called before GL is initialized + if(glGetString(GL_VENDOR)) { + workaroundChecked = true; + if(!strcmp((char*)glGetString(GL_VENDOR), "Intel Open Source Technology Center")) + workaroundEnabled = true; + } + } + + if(workaroundEnabled && width < 1.6f) + width = 1.6f; + + glLineWidth(width); +} + +static void LineDrawCallback(void *fndata, Vector a, Vector b) +{ + ssglLineWidth(1); + glBegin(GL_LINES); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); +} + +Vector pixelAlign(Vector v) { + v = SS.GW.ProjectPoint3(v); + v.x = floor(v.x) + 0.5; + v.y = floor(v.y) + 0.5; + v = SS.GW.UnProjectPoint3(v); + return v; +} + +int ssglDrawCharacter(const VectorGlyph &glyph, Vector t, Vector o, Vector u, Vector v, + double scale, ssglLineFn *fn, void *fndata, bool gridFit) { + int advanceWidth = glyph.advanceWidth; + + if(glyph.baseCharacter != 0) { + const VectorGlyph &baseGlyph = GetVectorGlyph(glyph.baseCharacter); + int baseWidth = ssglDrawCharacter(baseGlyph, t, o, u, v, scale, fn, fndata, gridFit); + advanceWidth = max(glyph.advanceWidth, baseWidth); + } + + int actualWidth, offsetX; + if(gridFit) { + o.x += glyph.leftSideBearing; + offsetX = glyph.leftSideBearing; + actualWidth = glyph.boundingWidth; + if(actualWidth == 0) { + // Dot, "i", etc. + actualWidth = 1; + } + } else { + offsetX = 0; + actualWidth = advanceWidth; + } + + Vector tt = t; + tt = tt.Plus(u.ScaledBy(o.x * scale)); + tt = tt.Plus(v.ScaledBy(o.y * scale)); + + Vector tu = tt; + tu = tu.Plus(u.ScaledBy(actualWidth * scale)); + + Vector tv = tt; + tv = tv.Plus(v.ScaledBy(FONT_CAP_HEIGHT * scale)); + + if(gridFit) { + tt = pixelAlign(tt); + tu = pixelAlign(tu); + tv = pixelAlign(tv); + } + + tu = tu.Minus(tt).ScaledBy(1.0 / actualWidth); + tv = tv.Minus(tt).ScaledBy(1.0 / FONT_CAP_HEIGHT); + + const int16_t *data = glyph.data; + bool pen_up = true; + Vector prevp; + while(true) { + int16_t x = *data++; + int16_t y = *data++; + + if(x == PEN_UP && y == PEN_UP) { + if(pen_up) break; + pen_up = true; + } else { + Vector p = tt; + p = p.Plus(tu.ScaledBy(x - offsetX)); + p = p.Plus(tv.ScaledBy(y)); + if(!pen_up) fn(fndata, prevp, p); + prevp = p; + pen_up = false; + } + } + + return advanceWidth; +} + +void ssglWriteText(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata) +{ + if(!fn) fn = LineDrawCallback; + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + + // Perform grid-fitting only when the text is parallel to the view plane. + bool gridFit = !SS.exportMode && u.Equals(SS.GW.projRight) && v.Equals(SS.GW.projUp); + + double scale = FONT_SCALE(h) / SS.GW.scale; + Vector o = { 3840.0, 3840.0, 0.0 }; + for(char32_t chr : ReadUTF8(str)) { + const VectorGlyph &glyph = GetVectorGlyph(chr); + o.x += ssglDrawCharacter(glyph, t, o, u, v, scale, fn, fndata, gridFit); + } +} + +void ssglVertex3v(Vector u) +{ + glVertex3f((GLfloat)u.x, (GLfloat)u.y, (GLfloat)u.z); +} + +void ssglAxisAlignedQuad(double l, double r, double t, double b, bool lone) +{ + if(lone) glBegin(GL_QUADS); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + if(lone) glEnd(); +} + +void ssglAxisAlignedLineLoop(double l, double r, double t, double b) +{ + glBegin(GL_LINE_LOOP); + glVertex2d(l, t); + glVertex2d(l, b); + glVertex2d(r, b); + glVertex2d(r, t); + glEnd(); +} + +static void FatLineEndcap(Vector p, Vector u, Vector v) +{ + // A table of cos and sin of (pi*i/10 + pi/2), as i goes from 0 to 10 + static const double Circle[11][2] = { + { 0.0000, 1.0000 }, + { -0.3090, 0.9511 }, + { -0.5878, 0.8090 }, + { -0.8090, 0.5878 }, + { -0.9511, 0.3090 }, + { -1.0000, 0.0000 }, + { -0.9511, -0.3090 }, + { -0.8090, -0.5878 }, + { -0.5878, -0.8090 }, + { -0.3090, -0.9511 }, + { 0.0000, -1.0000 }, + }; + glBegin(GL_TRIANGLE_FAN); + for(int i = 0; i <= 10; i++) { + double c = Circle[i][0], s = Circle[i][1]; + ssglVertex3v(p.Plus(u.ScaledBy(c)).Plus(v.ScaledBy(s))); + } + glEnd(); +} + +void ssglLine(const Vector &a, const Vector &b, double pixelWidth, bool maybeFat) { + if(!maybeFat || pixelWidth <= 3.0) { + glBegin(GL_LINES); + ssglVertex3v(a); + ssglVertex3v(b); + glEnd(); + } else { + ssglFatLine(a, b, pixelWidth / SS.GW.scale); + } +} + +void ssglPoint(Vector p, double pixelSize) +{ + if(/*!maybeFat || */pixelSize <= 3.0) { + glBegin(GL_LINES); + Vector u = SS.GW.projRight.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + ssglVertex3v(p.Minus(u)); + ssglVertex3v(p.Plus(u)); + glEnd(); + } else { + Vector u = SS.GW.projRight.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + Vector v = SS.GW.projUp.WithMagnitude(pixelSize / SS.GW.scale / 2.0); + + FatLineEndcap(p, u, v); + FatLineEndcap(p, u.ScaledBy(-1.0), v); + } +} + +void ssglStippledLine(Vector a, Vector b, double width, + int stippleType, double stippleScale, bool maybeFat) +{ + const char *stipplePattern; + switch(stippleType) { + case Style::STIPPLE_CONTINUOUS: ssglLine(a, b, width, maybeFat); return; + case Style::STIPPLE_DASH: stipplePattern = "- "; break; + case Style::STIPPLE_LONG_DASH: stipplePattern = "_ "; break; + case Style::STIPPLE_DASH_DOT: stipplePattern = "-."; break; + case Style::STIPPLE_DASH_DOT_DOT: stipplePattern = "-.."; break; + case Style::STIPPLE_DOT: stipplePattern = "."; break; + case Style::STIPPLE_FREEHAND: stipplePattern = "~"; break; + case Style::STIPPLE_ZIGZAG: stipplePattern = "~__"; break; + default: oops(); + } + ssglStippledLine(a, b, width, stipplePattern, stippleScale, maybeFat); +} + +void ssglStippledLine(Vector a, Vector b, double width, + const char *stipplePattern, double stippleScale, bool maybeFat) +{ + if(stipplePattern == NULL || *stipplePattern == 0) oops(); + + Vector dir = b.Minus(a); + double len = dir.Magnitude(); + dir = dir.WithMagnitude(1.0); + + const char *si = stipplePattern; + double end = len; + double ss = stippleScale / 2.0; + do { + double start = end; + switch(*si) { + case ' ': + end -= 1.0 * ss; + break; + + case '-': + start = max(start - 0.5 * ss, 0.0); + end = max(start - 2.0 * ss, 0.0); + if(start == end) break; + ssglLine(a.Plus(dir.ScaledBy(start)), a.Plus(dir.ScaledBy(end)), width, maybeFat); + end = max(end - 0.5 * ss, 0.0); + break; + + case '_': + end = max(end - 4.0 * ss, 0.0); + ssglLine(a.Plus(dir.ScaledBy(start)), a.Plus(dir.ScaledBy(end)), width, maybeFat); + break; + + case '.': + end = max(end - 0.5 * ss, 0.0); + if(end == 0.0) break; + ssglPoint(a.Plus(dir.ScaledBy(end)), width); + end = max(end - 0.5 * ss, 0.0); + break; + + case '~': { + Vector ab = b.Minus(a); + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector abn = (ab.Cross(gn)).WithMagnitude(1); + abn = abn.Minus(gn.ScaledBy(gn.Dot(abn))); + double pws = 2.0 * width / SS.GW.scale; + + end = max(end - 0.5 * ss, 0.0); + Vector aa = a.Plus(dir.ScaledBy(start)); + Vector bb = a.Plus(dir.ScaledBy(end)) + .Plus(abn.ScaledBy(pws * (start - end) / (0.5 * ss))); + ssglLine(aa, bb, width, maybeFat); + if(end == 0.0) break; + + start = end; + end = max(end - 1.0 * ss, 0.0); + aa = a.Plus(dir.ScaledBy(end)) + .Plus(abn.ScaledBy(pws)) + .Minus(abn.ScaledBy(2.0 * pws * (start - end) / ss)); + ssglLine(bb, aa, width, maybeFat); + if(end == 0.0) break; + + start = end; + end = max(end - 0.5 * ss, 0.0); + bb = a.Plus(dir.ScaledBy(end)) + .Minus(abn.ScaledBy(pws)) + .Plus(abn.ScaledBy(pws * (start - end) / (0.5 * ss))); + ssglLine(aa, bb, width, maybeFat); + break; + } + + default: oops(); + } + if(*(++si) == 0) si = stipplePattern; + } while(end > 0.0); +} + +void ssglFatLine(Vector a, Vector b, double width) +{ + if(a.EqualsExactly(b)) return; + // The half-width of the line we're drawing. + double hw = width / 2; + Vector ab = b.Minus(a); + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector abn = (ab.Cross(gn)).WithMagnitude(1); + abn = abn.Minus(gn.ScaledBy(gn.Dot(abn))); + // So now abn is normal to the projection of ab into the screen, so the + // line will always have constant thickness as the view is rotated. + + abn = abn.WithMagnitude(hw); + ab = gn.Cross(abn); + ab = ab. WithMagnitude(hw); + + // The body of a line is a quad + glBegin(GL_QUADS); + ssglVertex3v(a.Minus(abn)); + ssglVertex3v(b.Minus(abn)); + ssglVertex3v(b.Plus (abn)); + ssglVertex3v(a.Plus (abn)); + glEnd(); + // And the line has two semi-circular end caps. + FatLineEndcap(a, ab, abn); + FatLineEndcap(b, ab.ScaledBy(-1), abn); +} + + +void ssglLockColorTo(RgbaColor rgb) +{ + ColorLocked = false; + glColor3d(rgb.redF(), rgb.greenF(), rgb.blueF()); + ColorLocked = true; +} + +void ssglUnlockColor(void) +{ + ColorLocked = false; +} + +void ssglColorRGB(RgbaColor rgb) +{ + // Is there a bug in some graphics drivers where this is not equivalent + // to glColor3d? There seems to be... + ssglColorRGBa(rgb, 1.0); +} + +void ssglColorRGBa(RgbaColor rgb, double a) +{ + if(!ColorLocked) glColor4d(rgb.redF(), rgb.greenF(), rgb.blueF(), a); +} + +static void Stipple(bool forSel) +{ + static bool Init; + const int BYTES = (32*32)/8; + static GLubyte HoverMask[BYTES]; + static GLubyte SelMask[BYTES]; + if(!Init) { + int x, y; + for(x = 0; x < 32; x++) { + for(y = 0; y < 32; y++) { + int i = y*4 + x/8, b = x % 8; + int ym = y % 4, xm = x % 4; + for(int k = 0; k < 2; k++) { + if(xm >= 1 && xm <= 2 && ym >= 1 && ym <= 2) { + (k == 0 ? SelMask : HoverMask)[i] |= (0x80 >> b); + } + ym = (ym + 2) % 4; xm = (xm + 2) % 4; + } + } + } + Init = true; + } + + glEnable(GL_POLYGON_STIPPLE); + if(forSel) { + glPolygonStipple(SelMask); + } else { + glPolygonStipple(HoverMask); + } +} + +static void StippleTriangle(STriangle *tr, bool s, RgbaColor rgb) +{ + glEnd(); + glDisable(GL_LIGHTING); + ssglColorRGB(rgb); + Stipple(s); + glBegin(GL_TRIANGLES); + ssglVertex3v(tr->a); + ssglVertex3v(tr->b); + ssglVertex3v(tr->c); + glEnd(); + glEnable(GL_LIGHTING); + glDisable(GL_POLYGON_STIPPLE); + glBegin(GL_TRIANGLES); +} + +void ssglFillMesh(bool useSpecColor, RgbaColor specColor, + SMesh *m, uint32_t h, uint32_t s1, uint32_t s2) +{ + RgbaColor rgbHovered = Style::Color(Style::HOVERED), + rgbSelected = Style::Color(Style::SELECTED); + + glEnable(GL_NORMALIZE); + bool hasMaterial = false; + RgbaColor prevColor; + glBegin(GL_TRIANGLES); + for(int i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + + RgbaColor color; + if(useSpecColor) { + color = specColor; + } else { + color = tr->meta.color; + } + if(!hasMaterial || !color.Equals(prevColor)) { + GLfloat mpf[] = { color.redF(), color.greenF(), color.blueF(), color.alphaF() }; + glEnd(); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mpf); + prevColor = color; + hasMaterial = true; + glBegin(GL_TRIANGLES); + } + + if(tr->an.EqualsExactly(Vector::From(0, 0, 0))) { + // Compute the normal from the vertices + Vector n = tr->Normal(); + glNormal3d(n.x, n.y, n.z); + ssglVertex3v(tr->a); + ssglVertex3v(tr->b); + ssglVertex3v(tr->c); + } else { + // Use the exact normals that are specified + glNormal3d((tr->an).x, (tr->an).y, (tr->an).z); + ssglVertex3v(tr->a); + + glNormal3d((tr->bn).x, (tr->bn).y, (tr->bn).z); + ssglVertex3v(tr->b); + + glNormal3d((tr->cn).x, (tr->cn).y, (tr->cn).z); + ssglVertex3v(tr->c); + } + + if((s1 != 0 && tr->meta.face == s1) || + (s2 != 0 && tr->meta.face == s2)) + { + StippleTriangle(tr, true, rgbSelected); + } + if(h != 0 && tr->meta.face == h) { + StippleTriangle(tr, false, rgbHovered); + } + } + glEnd(); +} + +static void SSGL_CALLBACK Vertex(Vector *p) +{ + ssglVertex3v(*p); +} +void ssglFillPolygon(SPolygon *p) +{ + GLUtesselator *gt = gluNewTess(); + gluTessCallback(gt, GLU_TESS_BEGIN, (ssglCallbackFptr *)glBegin); + gluTessCallback(gt, GLU_TESS_END, (ssglCallbackFptr *)glEnd); + gluTessCallback(gt, GLU_TESS_VERTEX, (ssglCallbackFptr *)Vertex); + + ssglTesselatePolygon(gt, p); + + gluDeleteTess(gt); +} + +static void SSGL_CALLBACK Combine(double coords[3], void *vertexData[4], + float weight[4], void **outData) +{ + Vector *n = (Vector *)AllocTemporary(sizeof(Vector)); + n->x = coords[0]; + n->y = coords[1]; + n->z = coords[2]; + + *outData = n; +} +void ssglTesselatePolygon(GLUtesselator *gt, SPolygon *p) +{ + int i, j; + + gluTessCallback(gt, GLU_TESS_COMBINE, (ssglCallbackFptr *)Combine); + gluTessProperty(gt, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); + + Vector normal = p->normal; + glNormal3d(normal.x, normal.y, normal.z); + gluTessNormal(gt, normal.x, normal.y, normal.z); + + gluTessBeginPolygon(gt, NULL); + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + gluTessBeginContour(gt); + for(j = 0; j < (sc->l.n-1); j++) { + SPoint *sp = &(sc->l.elem[j]); + double ap[3]; + ap[0] = sp->p.x; + ap[1] = sp->p.y; + ap[2] = sp->p.z; + gluTessVertex(gt, ap, &(sp->p)); + } + gluTessEndContour(gt); + } + gluTessEndPolygon(gt); +} + +void ssglDebugPolygon(SPolygon *p) +{ + int i, j; + ssglLineWidth(2); + glPointSize(7); + glDisable(GL_DEPTH_TEST); + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + for(j = 0; j < (sc->l.n-1); j++) { + Vector a = (sc->l.elem[j]).p; + Vector b = (sc->l.elem[j+1]).p; + + ssglLockColorTo(RGBi(0, 0, 255)); + Vector d = (a.Minus(b)).WithMagnitude(-0); + glBegin(GL_LINES); + ssglVertex3v(a.Plus(d)); + ssglVertex3v(b.Minus(d)); + glEnd(); + ssglLockColorTo(RGBi(255, 0, 0)); + glBegin(GL_POINTS); + ssglVertex3v(a.Plus(d)); + ssglVertex3v(b.Minus(d)); + glEnd(); + } + } +} + +void ssglDrawEdges(SEdgeList *el, bool endpointsToo, hStyle hs) +{ + double lineWidth = Style::Width(hs); + int stippleType = Style::PatternType(hs); + double stippleScale = Style::StippleScaleMm(hs); + ssglLineWidth(float(lineWidth)); + ssglColorRGB(Style::Color(hs)); + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + ssglStippledLine(se->a, se->b, lineWidth, stippleType, stippleScale, + /*maybeFat=*/true); + } + + if(endpointsToo) { + glPointSize(12); + glBegin(GL_POINTS); + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + ssglVertex3v(se->a); + ssglVertex3v(se->b); + } + glEnd(); + } +} + +void ssglDrawOutlines(SOutlineList *sol, Vector projDir, hStyle hs) +{ + double lineWidth = Style::Width(hs); + int stippleType = Style::PatternType(hs); + double stippleScale = Style::StippleScaleMm(hs); + ssglLineWidth((float)lineWidth); + ssglColorRGB(Style::Color(hs)); + + sol->FillOutlineTags(projDir); + for(SOutline *so = sol->l.First(); so; so = sol->l.NextAfter(so)) { + if(!so->tag) continue; + ssglStippledLine(so->a, so->b, lineWidth, stippleType, stippleScale, + /*maybeFat=*/true); + } +} + +void ssglDebugMesh(SMesh *m) +{ + int i; + ssglLineWidth(1); + glPointSize(7); + ssglDepthRangeOffset(1); + ssglUnlockColor(); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + ssglColorRGBa(RGBi(0, 255, 0), 1.0); + glBegin(GL_TRIANGLES); + for(i = 0; i < m->l.n; i++) { + STriangle *t = &(m->l.elem[i]); + if(t->tag) continue; + + ssglVertex3v(t->a); + ssglVertex3v(t->b); + ssglVertex3v(t->c); + } + glEnd(); + ssglDepthRangeOffset(0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +} + +void ssglMarkPolygonNormal(SPolygon *p) +{ + Vector tail = Vector::From(0, 0, 0); + int i, j, cnt = 0; + // Choose some reasonable center point. + for(i = 0; i < p->l.n; i++) { + SContour *sc = &(p->l.elem[i]); + for(j = 0; j < (sc->l.n-1); j++) { + SPoint *sp = &(sc->l.elem[j]); + tail = tail.Plus(sp->p); + cnt++; + } + } + if(cnt == 0) return; + tail = tail.ScaledBy(1.0/cnt); + + Vector gn = SS.GW.projRight.Cross(SS.GW.projUp); + Vector tip = tail.Plus((p->normal).WithMagnitude(40/SS.GW.scale)); + Vector arrow = (p->normal).WithMagnitude(15/SS.GW.scale); + + glColor3d(1, 1, 0); + glBegin(GL_LINES); + ssglVertex3v(tail); + ssglVertex3v(tip); + ssglVertex3v(tip); + ssglVertex3v(tip.Minus(arrow.RotatedAbout(gn, 0.6))); + ssglVertex3v(tip); + ssglVertex3v(tip.Minus(arrow.RotatedAbout(gn, -0.6))); + glEnd(); + glEnable(GL_LIGHTING); +} + +void ssglDepthRangeOffset(int units) +{ + if(!DepthOffsetLocked) { + // The size of this step depends on the resolution of the Z buffer; for + // a 16-bit buffer, this should be fine. + double d = units/60000.0; + glDepthRange(0.1-d, 1-d); + } +} + +void ssglDepthRangeLockToFront(bool yes) +{ + if(yes) { + DepthOffsetLocked = true; + glDepthRange(0, 0); + } else { + DepthOffsetLocked = false; + ssglDepthRangeOffset(0); + } +} + +const int BitmapFontChunkSize = 64 * 64; +static bool BitmapFontChunkInitialized[0x10000 / BitmapFontChunkSize]; +static int BitmapFontCurrentChunk = -1; + +static void CreateBitmapFontChunk(const uint8_t *source, size_t sourceLength, + int textureIndex) +{ + // Place the font in our texture in a two-dimensional grid. + // The maximum texture size that is reasonably supported is 1024x1024. + const size_t fontTextureSize = BitmapFontChunkSize*16*16; + uint8_t *fontTexture = (uint8_t *)malloc(fontTextureSize), + *mappedTexture = (uint8_t *)malloc(fontTextureSize); + + z_stream stream; + stream.zalloc = Z_NULL; + stream.zfree = Z_NULL; + stream.opaque = Z_NULL; + if(inflateInit(&stream) != Z_OK) + oops(); + + stream.next_in = (Bytef *)source; + stream.avail_in = sourceLength; + stream.next_out = fontTexture; + stream.avail_out = fontTextureSize; + if(inflate(&stream, Z_NO_FLUSH) != Z_STREAM_END) + oops(); + if(stream.avail_out != 0) + oops(); + + inflateEnd(&stream); + + for(int a = 0; a < BitmapFontChunkSize; a++) { + int row = a / 64, col = a % 64; + + for(int i = 0; i < 16; i++) { + memcpy(mappedTexture + row*64*16*16 + col*16 + i*64*16, + fontTexture + a*16*16 + i*16, + 16); + } + } + + free(fontTexture); + + glBindTexture(GL_TEXTURE_2D, textureIndex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, + 16*64, 64*16, + 0, + GL_ALPHA, GL_UNSIGNED_BYTE, + mappedTexture); + + free(mappedTexture); +} + +static void SwitchToBitmapFontChunkFor(char32_t chr) +{ + int plane = chr / BitmapFontChunkSize, + textureIndex = TEXTURE_BITMAP_FONT + plane; + + if(BitmapFontCurrentChunk != textureIndex) { + glEnd(); + + if(!BitmapFontChunkInitialized[plane]) { + CreateBitmapFontChunk(CompressedFontTexture[plane].data, + CompressedFontTexture[plane].length, + textureIndex); + BitmapFontChunkInitialized[plane] = true; + } else { + glBindTexture(GL_TEXTURE_2D, textureIndex); + } + + BitmapFontCurrentChunk = textureIndex; + + glBegin(GL_QUADS); + } +} + +void ssglInitializeBitmapFont() +{ + memset(BitmapFontChunkInitialized, 0, sizeof(BitmapFontChunkInitialized)); + BitmapFontCurrentChunk = -1; +} + +int ssglBitmapCharWidth(char32_t chr) { + if(!CodepointProperties[chr].exists) + chr = 0xfffd; // replacement character + + return CodepointProperties[chr].isWide ? 2 : 1; +} + +void ssglBitmapCharQuad(char32_t chr, double x, double y) +{ + int w, h; + + if(!CodepointProperties[chr].exists) + chr = 0xfffd; // replacement character + + h = 16; + if(chr >= 0xe000 && chr <= 0xefff) { + // Special character, like a checkbox or a radio button + w = 16; + x -= 3; + } else if(CodepointProperties[chr].isWide) { + // Wide (usually CJK or reserved) character + w = 16; + } else { + // Normal character + w = 8; + } + + if(chr != ' ' && chr != 0) { + int n = chr % BitmapFontChunkSize; + int row = n / 64, col = n % 64; + double s0 = col/64.0, + s1 = (col+1)/64.0, + t0 = row/64.0, + t1 = t0 + (w/16.0)/64; + + SwitchToBitmapFontChunkFor(chr); + + glTexCoord2d(s1, t0); + glVertex2d(x, y); + + glTexCoord2d(s1, t1); + glVertex2d(x + w, y); + + glTexCoord2d(s0, t1); + glVertex2d(x + w, y - h); + + glTexCoord2d(s0, t0); + glVertex2d(x, y - h); + } +} + +void ssglBitmapText(const std::string &str, Vector p) +{ + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + for(char32_t chr : ReadUTF8(str)) { + ssglBitmapCharQuad(chr, p.x, p.y); + p.x += 8 * ssglBitmapCharWidth(chr); + } + glEnd(); + glDisable(GL_TEXTURE_2D); +} + +void ssglDrawPixelsWithTexture(uint8_t *data, int w, int h) +{ +#define MAX_DIM 32 + static uint8_t Texture[MAX_DIM*MAX_DIM*3]; + int i, j; + if(w > MAX_DIM || h > MAX_DIM) oops(); + + for(i = 0; i < w; i++) { + for(j = 0; j < h; j++) { + Texture[(j*MAX_DIM + i)*3 + 0] = data[(j*w + i)*3 + 0]; + Texture[(j*MAX_DIM + i)*3 + 1] = data[(j*w + i)*3 + 1]; + Texture[(j*MAX_DIM + i)*3 + 2] = data[(j*w + i)*3 + 2]; + } + } + + glBindTexture(GL_TEXTURE_2D, TEXTURE_DRAW_PIXELS); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MAX_DIM, MAX_DIM, 0, + GL_RGB, GL_UNSIGNED_BYTE, Texture); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(0, h); + + glTexCoord2d(((double)w)/MAX_DIM, 0); + glVertex2d(w, h); + + glTexCoord2d(((double)w)/MAX_DIM, ((double)h)/MAX_DIM); + glVertex2d(w, 0); + + glTexCoord2d(0, ((double)h)/MAX_DIM); + glVertex2d(0, 0); + glEnd(); + glDisable(GL_TEXTURE_2D); +} + +}; diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp new file mode 100644 index 0000000..e1531e5 --- /dev/null +++ b/src/graphicswin.cpp @@ -0,0 +1,1089 @@ +//----------------------------------------------------------------------------- +// Top-level implementation of the program's main window, in which a graphical +// representation of the model is drawn and edited by the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "config.h" + +#define mView (&GraphicsWindow::MenuView) +#define mEdit (&GraphicsWindow::MenuEdit) +#define mClip (&GraphicsWindow::MenuClipboard) +#define mReq (&GraphicsWindow::MenuRequest) +#define mCon (&Constraint::MenuConstrain) +#define mFile (&SolveSpaceUI::MenuFile) +#define mGrp (&Group::MenuGroup) +#define mAna (&SolveSpaceUI::MenuAnalyze) +#define mHelp (&SolveSpaceUI::MenuHelp) +#define DEL DELETE_KEY +#define ESC ESCAPE_KEY +#define S SHIFT_MASK +#define C CTRL_MASK +#define F(k) (FUNCTION_KEY_BASE+(k)) +#define TN MENU_ITEM_NORMAL +#define TC MENU_ITEM_CHECK +#define TR MENU_ITEM_RADIO +const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = { +//level +// label id accel ty fn +{ 0, "&File", 0, 0, TN, NULL }, +{ 1, "&New", MNU_NEW, C|'N', TN, mFile }, +{ 1, "&Open...", MNU_OPEN, C|'O', TN, mFile }, +{ 1, "Open &Recent", MNU_OPEN_RECENT, 0, TN, mFile }, +{ 1, "&Save", MNU_SAVE, C|'S', TN, mFile }, +{ 1, "Save &As...", MNU_SAVE_AS, 0, TN, mFile }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Export &Image...", MNU_EXPORT_PNG, 0, TN, mFile }, +{ 1, "Export 2d &View...", MNU_EXPORT_VIEW, 0, TN, mFile }, +{ 1, "Export 2d &Section...", MNU_EXPORT_SECTION, 0, TN, mFile }, +{ 1, "Export 3d &Wireframe...", MNU_EXPORT_WIREFRAME, 0, TN, mFile }, +{ 1, "Export Triangle &Mesh...", MNU_EXPORT_MESH, 0, TN, mFile }, +{ 1, "Export &Surfaces...", MNU_EXPORT_SURFACES,0, TN, mFile }, +{ 1, "Im&port...", MNU_IMPORT ,0, TN, mFile }, +#ifndef __APPLE__ +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "E&xit", MNU_EXIT, C|'Q', TN, mFile }, +#endif + +{ 0, "&Edit", 0, 0, TN, NULL }, +{ 1, "&Undo", MNU_UNDO, C|'Z', TN, mEdit }, +{ 1, "&Redo", MNU_REDO, C|'Y', TN, mEdit }, +{ 1, "Re&generate All", MNU_REGEN_ALL, ' ', TN, mEdit }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Snap Selection to &Grid", MNU_SNAP_TO_GRID, '.', TN, mEdit }, +{ 1, "Rotate Imported &90°", MNU_ROTATE_90, '9', TN, mEdit }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Cu&t", MNU_CUT, C|'X', TN, mClip }, +{ 1, "&Copy", MNU_COPY, C|'C', TN, mClip }, +{ 1, "&Paste", MNU_PASTE, C|'V', TN, mClip }, +{ 1, "Paste &Transformed...", MNU_PASTE_TRANSFORM,C|'T', TN, mClip }, +{ 1, "&Delete", MNU_DELETE, DEL, TN, mClip }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Select &Edge Chain", MNU_SELECT_CHAIN, C|'E', TN, mEdit }, +{ 1, "Select &All", MNU_SELECT_ALL, C|'A', TN, mEdit }, +{ 1, "&Unselect All", MNU_UNSELECT_ALL, ESC, TN, mEdit }, + +{ 0, "&View", 0, 0, TN, NULL }, +{ 1, "Zoom &In", MNU_ZOOM_IN, '+', TN, mView }, +{ 1, "Zoom &Out", MNU_ZOOM_OUT, '-', TN, mView }, +{ 1, "Zoom To &Fit", MNU_ZOOM_TO_FIT, 'F', TN, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Align View to &Workplane", MNU_ONTO_WORKPLANE, 'W', TN, mView }, +{ 1, "Nearest &Ortho View", MNU_NEAREST_ORTHO, F(2), TN, mView }, +{ 1, "Nearest &Isometric View", MNU_NEAREST_ISO, F(3), TN, mView }, +{ 1, "&Center View At Point", MNU_CENTER_VIEW, F(4), TN, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Show Snap &Grid", MNU_SHOW_GRID, '>', TC, mView }, +{ 1, "Use &Perspective Projection", MNU_PERSPECTIVE_PROJ,'`', TC, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +#if defined(__APPLE__) +{ 1, "Show Menu &Bar", MNU_SHOW_MENU_BAR, C|F(12), TC, mView }, +#endif +{ 1, "Show &Toolbar", MNU_SHOW_TOOLBAR, 0, TC, mView }, +{ 1, "Show Property Bro&wser", MNU_SHOW_TEXT_WND, '\t', TC, mView }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Dimensions in &Inches", MNU_UNITS_INCHES, 0, TR, mView }, +{ 1, "Dimensions in &Millimeters", MNU_UNITS_MM, 0, TR, mView }, +#if defined(HAVE_GTK) || defined(__APPLE__) +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Full Screen", MNU_FULL_SCREEN, C|F(11), TC, mView }, +#endif + +{ 0, "&New Group", 0, 0, TN, NULL }, +{ 1, "Sketch In &3d", MNU_GROUP_3D, S|'3', TN, mGrp }, +{ 1, "Sketch In New &Workplane", MNU_GROUP_WRKPL, S|'W', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Step &Translating", MNU_GROUP_TRANS, S|'T', TN, mGrp }, +{ 1, "Step &Rotating", MNU_GROUP_ROT, S|'R', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "E&xtrude", MNU_GROUP_EXTRUDE, S|'X', TN, mGrp }, +{ 1, "&Lathe", MNU_GROUP_LATHE, S|'L', TN, mGrp }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Link / Assemble...", MNU_GROUP_LINK, S|'I', TN, mGrp }, +{ 1, "Link Recent", MNU_GROUP_RECENT, 0, TN, mGrp }, + +{ 0, "&Sketch", 0, 0, TN, NULL }, +{ 1, "In &Workplane", MNU_SEL_WORKPLANE, '2', TR, mReq }, +{ 1, "Anywhere In &3d", MNU_FREE_IN_3D, '3', TR, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Datum &Point", MNU_DATUM_POINT, 'P', TN, mReq }, +{ 1, "&Workplane", MNU_WORKPLANE, 0, TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Line &Segment", MNU_LINE_SEGMENT, 'S', TN, mReq }, +{ 1, "C&onstruction Line Segment", MNU_CONSTR_SEGMENT, S|'S', TN, mReq }, +{ 1, "&Rectangle", MNU_RECTANGLE, 'R', TN, mReq }, +{ 1, "&Circle", MNU_CIRCLE, 'C', TN, mReq }, +{ 1, "&Arc of a Circle", MNU_ARC, 'A', TN, mReq }, +{ 1, "&Bezier Cubic Spline", MNU_CUBIC, 'B', TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Text in TrueType Font", MNU_TTF_TEXT, 'T', TN, mReq }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "To&ggle Construction", MNU_CONSTRUCTION, 'G', TN, mReq }, +{ 1, "Tangent &Arc at Point", MNU_TANGENT_ARC, S|'A', TN, mReq }, +{ 1, "Split Curves at &Intersection", MNU_SPLIT_CURVES, 'I', TN, mReq }, + +{ 0, "&Constrain", 0, 0, TN, NULL }, +{ 1, "&Distance / Diameter", MNU_DISTANCE_DIA, 'D', TN, mCon }, +{ 1, "Re&ference Dimension", MNU_REF_DISTANCE, S|'D', TN, mCon }, +{ 1, "A&ngle", MNU_ANGLE, 'N', TN, mCon }, +{ 1, "Reference An&gle", MNU_REF_ANGLE, S|'N', TN, mCon }, +{ 1, "Other S&upplementary Angle", MNU_OTHER_ANGLE, 'U', TN, mCon }, +{ 1, "Toggle R&eference Dim", MNU_REFERENCE, 'E', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Horizontal", MNU_HORIZONTAL, 'H', TN, mCon }, +{ 1, "&Vertical", MNU_VERTICAL, 'V', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&On Point / Curve / Plane", MNU_ON_ENTITY, 'O', TN, mCon }, +{ 1, "E&qual Length / Radius / Angle", MNU_EQUAL, 'Q', TN, mCon }, +{ 1, "Length Ra&tio", MNU_RATIO, 'Z', TN, mCon }, +{ 1, "Length Diff&erence", MNU_DIFFERENCE, 'J', TN, mCon }, +{ 1, "At &Midpoint", MNU_AT_MIDPOINT, 'M', TN, mCon }, +{ 1, "S&ymmetric", MNU_SYMMETRIC, 'Y', TN, mCon }, +{ 1, "Para&llel / Tangent", MNU_PARALLEL, 'L', TN, mCon }, +{ 1, "&Perpendicular", MNU_PERPENDICULAR, '[', TN, mCon }, +{ 1, "Same Orient&ation", MNU_ORIENTED_SAME, 'X', TN, mCon }, +{ 1, "Lock Point Where &Dragged", MNU_WHERE_DRAGGED, ']', TN, mCon }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Comment", MNU_COMMENT, ';', TN, mCon }, + +{ 0, "&Analyze", 0, 0, TN, NULL }, +{ 1, "Measure &Volume", MNU_VOLUME, C|S|'V', TN, mAna }, +{ 1, "Measure &Area", MNU_AREA, C|S|'A', TN, mAna }, +{ 1, "Show &Interfering Parts", MNU_INTERFERENCE, C|S|'I', TN, mAna }, +{ 1, "Show &Naked Edges", MNU_NAKED_EDGES, C|S|'N', TN, mAna }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "Show Degrees of &Freedom", MNU_SHOW_DOF, C|S|'F', TN, mAna }, +{ 1, NULL, 0, 0, TN, NULL }, +{ 1, "&Trace Point", MNU_TRACE_PT, C|S|'T', TN, mAna }, +{ 1, "&Stop Tracing...", MNU_STOP_TRACING, C|S|'S', TN, mAna }, +{ 1, "Step &Dimension...", MNU_STEP_DIM, C|S|'D', TN, mAna }, + +{ 0, "&Help", 0, 0, TN, NULL }, +{ 1, "&Website / Manual", MNU_WEBSITE, 0, TN, mHelp }, +#ifndef __APPLE__ +{ 1, "&About", MNU_ABOUT, 0, TN, mHelp }, +#endif + +{ -1, 0, 0, 0, TN, 0 } +}; + +#undef DEL +#undef ESC +#undef S +#undef C +#undef F +#undef TN +#undef TC +#undef TR + +std::string SolveSpace::MakeAcceleratorLabel(int accel) { + if(!accel) return ""; + + std::string label; + if(accel & GraphicsWindow::CTRL_MASK) { + label += "Ctrl+"; + } + if(accel & GraphicsWindow::SHIFT_MASK) { + label += "Shift+"; + } + if(accel >= GraphicsWindow::FUNCTION_KEY_BASE + 1 && + accel <= GraphicsWindow::FUNCTION_KEY_BASE + 12) { + label += ssprintf("F%d", accel - GraphicsWindow::FUNCTION_KEY_BASE); + } else if(accel == '\t') { + label += "Tab"; + } else if(accel == ' ') { + label += "Space"; + } else if(accel == GraphicsWindow::ESCAPE_KEY) { + label += "Esc"; + } else if(accel == GraphicsWindow::DELETE_KEY) { + label += "Del"; + } else { + label += (char)(accel & 0xff); + } + return label; +} + +void GraphicsWindow::Init(void) { + scale = 5; + offset = Vector::From(0, 0, 0); + projRight = Vector::From(1, 0, 0); + projUp = Vector::From(0, 1, 0); + + // Make sure those are valid; could get a mouse move without a mouse + // down if someone depresses the button, then drags into our window. + orig.projRight = projRight; + orig.projUp = projUp; + + // And with the last group active + activeGroup = SK.groupOrder.elem[SK.groupOrder.n - 1]; + SK.GetGroup(activeGroup)->Activate(); + + showWorkplanes = false; + showNormals = true; + showPoints = true; + showConstraints = true; + showHdnLines = false; + showShaded = true; + showEdges = true; + showMesh = false; + showOutlines = false; + + showTextWindow = true; + ShowTextWindow(showTextWindow); + + showSnapGrid = false; + context.active = false; + + // Do this last, so that all the menus get updated correctly. + ClearSuper(); +} + +void GraphicsWindow::AnimateOntoWorkplane(void) { + if(!LockedInWorkplane()) return; + + Entity *w = SK.GetEntity(ActiveWorkplane()); + Quaternion quatf = w->Normal()->NormalGetNum(); + Vector offsetf = (SK.GetEntity(w->point[0])->PointGetNum()).ScaledBy(-1); + + AnimateOnto(quatf, offsetf); +} + +void GraphicsWindow::AnimateOnto(Quaternion quatf, Vector offsetf) { + // Get our initial orientation and translation. + Quaternion quat0 = Quaternion::From(projRight, projUp); + Vector offset0 = offset; + + // Make sure we take the shorter of the two possible paths. + double mp = (quatf.Minus(quat0)).Magnitude(); + double mm = (quatf.Plus(quat0)).Magnitude(); + if(mp > mm) { + quatf = quatf.ScaledBy(-1); + mp = mm; + } + double mo = (offset0.Minus(offsetf)).Magnitude()*scale; + + // Animate transition, unless it's a tiny move. + int32_t dt = (mp < 0.01 && mo < 10) ? (-20) : + (int32_t)(100 + 1000*mp + 0.4*mo); + // Don't ever animate for longer than 2000 ms; we can get absurdly + // long translations (as measured in pixels) if the user zooms out, moves, + // and then zooms in again. + if(dt > 2000) dt = 2000; + int64_t tn, t0 = GetMilliseconds(); + double s = 0; + Quaternion dq = quatf.Times(quat0.Inverse()); + do { + offset = (offset0.ScaledBy(1 - s)).Plus(offsetf.ScaledBy(s)); + Quaternion quat = (dq.ToThe(s)).Times(quat0); + quat = quat.WithMagnitude(1); + + projRight = quat.RotationU(); + projUp = quat.RotationV(); + PaintGraphics(); + + tn = GetMilliseconds(); + s = (tn - t0)/((double)dt); + } while((tn - t0) < dt); + + projRight = quatf.RotationU(); + projUp = quatf.RotationV(); + offset = offsetf; + InvalidateGraphics(); + // If the view screen is open, then we need to refresh it. + SS.ScheduleShowTW(); +} + +void GraphicsWindow::HandlePointForZoomToFit(Vector p, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective) +{ + double w; + Vector pp = ProjectPoint4(p, &w); + // If usePerspective is true, then we calculate a perspective projection of the point. + // If not, then we do a parallel projection regardless of the current + // scale factor. + if(usePerspective) { + pp = pp.ScaledBy(1.0/w); + } + + pmax->x = max(pmax->x, pp.x); + pmax->y = max(pmax->y, pp.y); + pmin->x = min(pmin->x, pp.x); + pmin->y = min(pmin->y, pp.y); + *wmin = min(*wmin, w); +} +void GraphicsWindow::LoopOverPoints(const std::vector &entities, + const std::vector &faces, + Point2d *pmax, Point2d *pmin, double *wmin, + bool usePerspective, bool includeMesh) { + + int i, j; + for(Entity *e : entities) { + if(e->IsPoint()) { + HandlePointForZoomToFit(e->PointGetNum(), pmax, pmin, wmin, usePerspective); + } else if(e->type == Entity::CIRCLE) { + // Lots of entities can extend outside the bbox of their points, + // but circles are particularly bad. We want to get things halfway + // reasonable without the mesh, because a zoom to fit is used to + // set the zoom level to set the chord tol. + double r = e->CircleGetRadiusNum(); + Vector c = SK.GetEntity(e->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(e->normal)->NormalGetNum(); + for(j = 0; j < 4; j++) { + Vector p = (j == 0) ? (c.Plus(q.RotationU().ScaledBy( r))) : + (j == 1) ? (c.Plus(q.RotationU().ScaledBy(-r))) : + (j == 2) ? (c.Plus(q.RotationV().ScaledBy( r))) : + (c.Plus(q.RotationV().ScaledBy(-r))); + HandlePointForZoomToFit(p, pmax, pmin, wmin, usePerspective); + } + } else { + // We have to iterate children points, because we can select entites without points + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(e->point[i].v == 0) break; + Vector p = SK.GetEntity(e->point[i])->PointGetNum(); + HandlePointForZoomToFit(p, pmax, pmin, wmin, usePerspective); + } + } + } + + if(!includeMesh && faces.empty()) return; + + Group *g = SK.GetGroup(activeGroup); + g->GenerateDisplayItems(); + for(i = 0; i < g->displayMesh.l.n; i++) { + STriangle *tr = &(g->displayMesh.l.elem[i]); + if(!includeMesh) { + bool found = false; + for(const hEntity &face : faces) { + if(face.v != tr->meta.face) continue; + found = true; + break; + } + if(!found) continue; + } + HandlePointForZoomToFit(tr->a, pmax, pmin, wmin, usePerspective); + HandlePointForZoomToFit(tr->b, pmax, pmin, wmin, usePerspective); + HandlePointForZoomToFit(tr->c, pmax, pmin, wmin, usePerspective); + } + if(!includeMesh) return; + for(i = 0; i < g->polyLoops.l.n; i++) { + SContour *sc = &(g->polyLoops.l.elem[i]); + for(j = 0; j < sc->l.n; j++) { + HandlePointForZoomToFit(sc->l.elem[j].p, pmax, pmin, wmin, usePerspective); + } + } +} +void GraphicsWindow::ZoomToFit(bool includingInvisibles, bool useSelection) { + std::vector entities; + std::vector faces; + + if(useSelection) { + for(int i = 0; i < selection.n; i++) { + Selection *s = &selection.elem[i]; + if(s->entity.v == 0) continue; + Entity *e = SK.entity.FindById(s->entity); + if(e->IsFace()) { + faces.push_back(e->h); + continue; + } + entities.push_back(e); + } + } + + bool selectionUsed = !entities.empty() || !faces.empty(); + + if(!selectionUsed) { + for(int i = 0; iIsPoint()) continue; + if(!includingInvisibles && !e->IsVisible()) continue; + entities.push_back(e); + } + } + + // On the first run, ignore perspective. + Point2d pmax = { -1e12, -1e12 }, pmin = { 1e12, 1e12 }; + double wmin = 1; + LoopOverPoints(entities, faces, &pmax, &pmin, &wmin, + /*usePerspective=*/false, /*includeMesh=*/!selectionUsed); + + double xm = (pmax.x + pmin.x)/2, ym = (pmax.y + pmin.y)/2; + double dx = pmax.x - pmin.x, dy = pmax.y - pmin.y; + + offset = offset.Plus(projRight.ScaledBy(-xm)).Plus( + projUp. ScaledBy(-ym)); + + // And based on this, we calculate the scale and offset + if(EXACT(dx == 0 && dy == 0)) { + scale = 5; + } else { + double scalex = 1e12, scaley = 1e12; + if(EXACT(dx != 0)) scalex = 0.9*width /dx; + if(EXACT(dy != 0)) scaley = 0.9*height/dy; + scale = min(scalex, scaley); + + scale = min(300.0, scale); + scale = max(0.003, scale); + } + + // Then do another run, considering the perspective. + pmax.x = -1e12; pmax.y = -1e12; + pmin.x = 1e12; pmin.y = 1e12; + wmin = 1; + LoopOverPoints(entities, faces, &pmax, &pmin, &wmin, + /*usePerspective=*/true, /*includeMesh=*/!selectionUsed); + + // Adjust the scale so that no points are behind the camera + if(wmin < 0.1) { + double k = SS.CameraTangent(); + // w = 1+k*scale*z + double zmin = (wmin - 1)/(k*scale); + // 0.1 = 1 + k*scale*zmin + // (0.1 - 1)/(k*zmin) = scale + scale = min(scale, (0.1 - 1)/(k*zmin)); + } +} + +void GraphicsWindow::MenuView(int id) { + switch(id) { + case MNU_ZOOM_IN: + SS.GW.scale *= 1.2; + SS.ScheduleShowTW(); + break; + + case MNU_ZOOM_OUT: + SS.GW.scale /= 1.2; + SS.ScheduleShowTW(); + break; + + case MNU_ZOOM_TO_FIT: + SS.GW.ZoomToFit(/*includingInvisibles=*/false, /*useSelection=*/true); + SS.ScheduleShowTW(); + break; + + case MNU_SHOW_GRID: + SS.GW.showSnapGrid = !SS.GW.showSnapGrid; + if(SS.GW.showSnapGrid && !SS.GW.LockedInWorkplane()) { + Message("No workplane is active, so the grid will not " + "appear."); + } + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_PERSPECTIVE_PROJ: + SS.usePerspectiveProj = !SS.usePerspectiveProj; + if(SS.cameraTangent < 1e-6) { + Error("The perspective factor is set to zero, so the view will " + "always be a parallel projection.\n\n" + "For a perspective projection, modify the perspective " + "factor in the configuration screen. A value around 0.3 " + "is typical."); + } + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_ONTO_WORKPLANE: + if(SS.GW.LockedInWorkplane()) { + SS.GW.AnimateOntoWorkplane(); + SS.ScheduleShowTW(); + break; + } // if not in 2d mode fall through and use ORTHO logic + case MNU_NEAREST_ORTHO: + case MNU_NEAREST_ISO: { + static const Vector ortho[3] = { + Vector::From(1, 0, 0), + Vector::From(0, 1, 0), + Vector::From(0, 0, 1) + }; + double sqrt2 = sqrt(2.0), sqrt6 = sqrt(6.0); + Quaternion quat0 = Quaternion::From(SS.GW.projRight, SS.GW.projUp); + Quaternion quatf = quat0; + double dmin = 1e10; + + // There are 24 possible views; 3*2*2*2 + int i, j, negi, negj; + for(i = 0; i < 3; i++) { + for(j = 0; j < 3; j++) { + if(i == j) continue; + for(negi = 0; negi < 2; negi++) { + for(negj = 0; negj < 2; negj++) { + Vector ou = ortho[i], ov = ortho[j]; + if(negi) ou = ou.ScaledBy(-1); + if(negj) ov = ov.ScaledBy(-1); + Vector on = ou.Cross(ov); + + Vector u, v; + if(id == MNU_NEAREST_ORTHO || id == MNU_ONTO_WORKPLANE) { + u = ou; + v = ov; + } else { + u = + ou.ScaledBy(1/sqrt2).Plus( + on.ScaledBy(-1/sqrt2)); + v = + ou.ScaledBy(-1/sqrt6).Plus( + ov.ScaledBy(2/sqrt6).Plus( + on.ScaledBy(-1/sqrt6))); + } + + Quaternion quatt = Quaternion::From(u, v); + double d = min( + (quatt.Minus(quat0)).Magnitude(), + (quatt.Plus(quat0)).Magnitude()); + if(d < dmin) { + dmin = d; + quatf = quatt; + } + } + } + } + } + + SS.GW.AnimateOnto(quatf, SS.GW.offset); + break; + } + + case MNU_CENTER_VIEW: + SS.GW.GroupSelection(); + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + Quaternion quat0; + // Offset is the selected point, quaternion is same as before + Vector pt = SK.GetEntity(SS.GW.gs.point[0])->PointGetNum(); + quat0 = Quaternion::From(SS.GW.projRight, SS.GW.projUp); + SS.GW.AnimateOnto(quat0, pt.ScaledBy(-1)); + SS.GW.ClearSelection(); + } else { + Error("Select a point; this point will become the center " + "of the view on screen."); + } + break; + + case MNU_SHOW_MENU_BAR: + ToggleMenuBar(); + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_SHOW_TOOLBAR: + SS.showToolbar = !SS.showToolbar; + SS.GW.EnsureValidActives(); + InvalidateGraphics(); + break; + + case MNU_SHOW_TEXT_WND: + SS.GW.showTextWindow = !SS.GW.showTextWindow; + SS.GW.EnsureValidActives(); + break; + + case MNU_UNITS_INCHES: + SS.viewUnits = SolveSpaceUI::UNIT_INCHES; + SS.ScheduleShowTW(); + SS.GW.EnsureValidActives(); + break; + + case MNU_UNITS_MM: + SS.viewUnits = SolveSpaceUI::UNIT_MM; + SS.ScheduleShowTW(); + SS.GW.EnsureValidActives(); + break; + + case MNU_FULL_SCREEN: + ToggleFullScreen(); + SS.GW.EnsureValidActives(); + break; + + default: oops(); + } + InvalidateGraphics(); +} + +void GraphicsWindow::EnsureValidActives(void) { + bool change = false; + // The active group must exist, and not be the references. + Group *g = SK.group.FindByIdNoOops(activeGroup); + if((!g) || (g->h.v == Group::HGROUP_REFERENCES.v)) { + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + if(SK.groupOrder.elem[i].v != Group::HGROUP_REFERENCES.v) { + break; + } + } + if(i >= SK.groupOrder.n) { + // This can happen if the user deletes all the groups in the + // sketch. It's difficult to prevent that, because the last + // group might have been deleted automatically, because it failed + // a dependency. There needs to be something, so create a plane + // drawing group and activate that. They should never be able + // to delete the references, though. + activeGroup = SS.CreateDefaultDrawingGroup(); + // We've created the default group, but not the workplane entity; + // do it now so that drawing mode isn't switched to "Free in 3d". + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } else { + activeGroup = SK.groupOrder.elem[i]; + } + SK.GetGroup(activeGroup)->Activate(); + change = true; + } + + // The active coordinate system must also exist. + if(LockedInWorkplane()) { + Entity *e = SK.entity.FindByIdNoOops(ActiveWorkplane()); + if(e) { + hGroup hgw = e->group; + if(hgw.v != activeGroup.v && SS.GroupsInOrder(activeGroup, hgw)) { + // The active workplane is in a group that comes after the + // active group; so any request or constraint will fail. + SetWorkplaneFreeIn3d(); + change = true; + } + } else { + SetWorkplaneFreeIn3d(); + change = true; + } + } + + // And update the checked state for various menus + bool locked = LockedInWorkplane(); + RadioMenuById(MNU_FREE_IN_3D, !locked); + RadioMenuById(MNU_SEL_WORKPLANE, locked); + + SS.UndoEnableMenus(); + + switch(SS.viewUnits) { + case SolveSpaceUI::UNIT_MM: + case SolveSpaceUI::UNIT_INCHES: + break; + default: + SS.viewUnits = SolveSpaceUI::UNIT_MM; + break; + } + RadioMenuById(MNU_UNITS_MM, SS.viewUnits == SolveSpaceUI::UNIT_MM); + RadioMenuById(MNU_UNITS_INCHES, SS.viewUnits == SolveSpaceUI::UNIT_INCHES); + + ShowTextWindow(SS.GW.showTextWindow); + CheckMenuById(MNU_SHOW_TEXT_WND, SS.GW.showTextWindow); + +#if defined(__APPLE__) + CheckMenuById(MNU_SHOW_MENU_BAR, MenuBarIsVisible()); +#endif + CheckMenuById(MNU_SHOW_TOOLBAR, SS.showToolbar); + CheckMenuById(MNU_PERSPECTIVE_PROJ, SS.usePerspectiveProj); + CheckMenuById(MNU_SHOW_GRID, SS.GW.showSnapGrid); +#if defined(HAVE_GTK) || defined(__APPLE__) + CheckMenuById(MNU_FULL_SCREEN, FullScreenIsActive()); +#endif + + if(change) SS.ScheduleShowTW(); +} + +void GraphicsWindow::SetWorkplaneFreeIn3d(void) { + SK.GetGroup(activeGroup)->activeWorkplane = Entity::FREE_IN_3D; +} +hEntity GraphicsWindow::ActiveWorkplane(void) { + Group *g = SK.group.FindByIdNoOops(activeGroup); + if(g) { + return g->activeWorkplane; + } else { + return Entity::FREE_IN_3D; + } +} +bool GraphicsWindow::LockedInWorkplane(void) { + return (SS.GW.ActiveWorkplane().v != Entity::FREE_IN_3D.v); +} + +void GraphicsWindow::ForceTextWindowShown(void) { + if(!showTextWindow) { + showTextWindow = true; + CheckMenuById(MNU_SHOW_TEXT_WND, true); + ShowTextWindow(true); + } +} + +void GraphicsWindow::DeleteTaggedRequests(void) { + // Rewrite any point-coincident constraints that were affected by this + // deletion. + Request *r; + for(r = SK.request.First(); r; r = SK.request.NextAfter(r)) { + if(!r->tag) continue; + FixConstraintsForRequestBeingDeleted(r->h); + } + // and then delete the tagged requests. + SK.request.RemoveTagged(); + + // An edit might be in progress for the just-deleted item. So + // now it's not. + HideGraphicsEditControl(); + SS.TW.HideEditControl(); + // And clear out the selection, which could contain that item. + ClearSuper(); + // And regenerate to get rid of what it generates, plus anything + // that references it (since the regen code checks for that). + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + EnsureValidActives(); + SS.ScheduleShowTW(); +} + +Vector GraphicsWindow::SnapToGrid(Vector p) { + if(!LockedInWorkplane()) return p; + + EntityBase *wrkpl = SK.GetEntity(ActiveWorkplane()), + *norm = wrkpl->Normal(); + Vector wo = SK.GetEntity(wrkpl->point[0])->PointGetNum(), + wu = norm->NormalU(), + wv = norm->NormalV(), + wn = norm->NormalN(); + + Vector pp = (p.Minus(wo)).DotInToCsys(wu, wv, wn); + pp.x = floor((pp.x / SS.gridSpacing) + 0.5)*SS.gridSpacing; + pp.y = floor((pp.y / SS.gridSpacing) + 0.5)*SS.gridSpacing; + pp.z = 0; + + return pp.ScaleOutOfCsys(wu, wv, wn).Plus(wo); +} + +void GraphicsWindow::MenuEdit(int id) { + switch(id) { + case MNU_UNSELECT_ALL: + SS.GW.GroupSelection(); + // If there's nothing selected to de-select, and no operation + // to cancel, then perhaps they want to return to the home + // screen in the text window. + if(SS.GW.gs.n == 0 && + SS.GW.gs.constraints == 0 && + SS.GW.pending.operation == 0) + { + if(!(TextEditControlIsVisible() || + GraphicsEditControlIsVisible())) + { + if(SS.TW.shown.screen == TextWindow::SCREEN_STYLE_INFO) { + SS.TW.GoToScreen(TextWindow::SCREEN_LIST_OF_STYLES); + } else { + SS.TW.ClearSuper(); + } + } + } + SS.GW.ClearSuper(); + SS.TW.HideEditControl(); + SS.nakedEdges.Clear(); + SS.justExportedInfo.draw = false; + // This clears the marks drawn to indicate which points are + // still free to drag. + Param *p; + for(p = SK.param.First(); p; p = SK.param.NextAfter(p)) { + p->free = false; + } + if(SS.exportMode) { + SS.exportMode = false; + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + } + break; + + case MNU_SELECT_ALL: { + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(e->IsFace() || e->IsDistance()) continue; + if(!e->IsVisible()) continue; + + SS.GW.MakeSelected(e->h); + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + break; + } + + case MNU_SELECT_CHAIN: { + Entity *e; + int newlySelected = 0; + bool didSomething; + do { + didSomething = false; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != SS.GW.activeGroup.v) continue; + if(!e->HasEndpoints()) continue; + if(!e->IsVisible()) continue; + + Vector st = e->EndpointStart(), + fi = e->EndpointFinish(); + + bool onChain = false, alreadySelected = false; + List *ls = &(SS.GW.selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + if(s->entity.v == e->h.v) { + alreadySelected = true; + continue; + } + Entity *se = SK.GetEntity(s->entity); + if(!se->HasEndpoints()) continue; + + Vector sst = se->EndpointStart(), + sfi = se->EndpointFinish(); + + if(sst.Equals(st) || sst.Equals(fi) || + sfi.Equals(st) || sfi.Equals(fi)) + { + onChain = true; + } + } + if(onChain && !alreadySelected) { + SS.GW.MakeSelected(e->h); + newlySelected++; + didSomething = true; + } + } + } while(didSomething); + if(newlySelected == 0) { + Error("No additional entities share endpoints with the " + "selected entities."); + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + break; + } + + case MNU_ROTATE_90: { + SS.GW.GroupSelection(); + Entity *e = NULL; + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + e = SK.GetEntity(SS.GW.gs.point[0]); + } else if(SS.GW.gs.n == 1 && SS.GW.gs.entities == 1) { + e = SK.GetEntity(SS.GW.gs.entity[0]); + } + SS.GW.ClearSelection(); + + hGroup hg = e ? e->group : SS.GW.activeGroup; + Group *g = SK.GetGroup(hg); + if(g->type != Group::LINKED) { + Error("To use this command, select a point or other " + "entity from an linked part, or make a link " + "group the active group."); + break; + } + + + SS.UndoRemember(); + // Rotate by ninety degrees about the coordinate axis closest + // to the screen normal. + Vector norm = SS.GW.projRight.Cross(SS.GW.projUp); + norm = norm.ClosestOrtho(); + norm = norm.WithMagnitude(1); + Quaternion qaa = Quaternion::From(norm, PI/2); + + g->TransformImportedBy(Vector::From(0, 0, 0), qaa); + + // and regenerate as necessary. + SS.MarkGroupDirty(hg); + SS.GenerateAll(); + break; + } + + case MNU_SNAP_TO_GRID: { + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane is active. Select a workplane to define " + "the plane for the snap grid."); + break; + } + SS.GW.GroupSelection(); + if(SS.GW.gs.points == 0 && SS.GW.gs.constraintLabels == 0) { + Error("Can't snap these items to grid; select points, " + "text comments, or constraints with a label. " + "To snap a line, select its endpoints."); + break; + } + SS.UndoRemember(); + + List *ls = &(SS.GW.selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(s->entity.v) { + hEntity hp = s->entity; + Entity *ep = SK.GetEntity(hp); + if(!ep->IsPoint()) continue; + + Vector p = ep->PointGetNum(); + ep->PointForceTo(SS.GW.SnapToGrid(p)); + SS.GW.pending.points.Add(&hp); + SS.MarkGroupDirty(ep->group); + } else if(s->constraint.v) { + Constraint *c = SK.GetConstraint(s->constraint); + Vector refp = c->GetReferencePos(); + c->disp.offset = c->disp.offset.Plus(SS.GW.SnapToGrid(refp).Minus(refp)); + } + } + // Regenerate, with these points marked as dragged so that they + // get placed as close as possible to our snap grid. + SS.GenerateAll(); + SS.GW.ClearPending(); + + SS.GW.ClearSelection(); + InvalidateGraphics(); + break; + } + + case MNU_UNDO: + SS.UndoUndo(); + break; + + case MNU_REDO: + SS.UndoRedo(); + break; + + case MNU_REGEN_ALL: + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_UNTIL_ACTIVE); + SS.ScheduleShowTW(); + break; + + default: oops(); + } +} + +void GraphicsWindow::MenuRequest(int id) { + const char *s; + switch(id) { + case MNU_SEL_WORKPLANE: { + SS.GW.GroupSelection(); + Group *g = SK.GetGroup(SS.GW.activeGroup); + + if(SS.GW.gs.n == 1 && SS.GW.gs.workplanes == 1) { + // A user-selected workplane + g->activeWorkplane = SS.GW.gs.entity[0]; + } else if(g->type == Group::DRAWING_WORKPLANE) { + // The group's default workplane + g->activeWorkplane = g->h.entity(0); + Message("No workplane selected. Activating default workplane " + "for this group."); + } + + if(!SS.GW.LockedInWorkplane()) { + Error("No workplane is selected, and the active group does " + "not have a default workplane. Try selecting a " + "workplane, or activating a sketch-in-new-workplane " + "group."); + break; + } + // Align the view with the selected workplane + SS.GW.AnimateOntoWorkplane(); + SS.GW.ClearSuper(); + SS.ScheduleShowTW(); + break; + } + case MNU_FREE_IN_3D: + SS.GW.SetWorkplaneFreeIn3d(); + SS.GW.EnsureValidActives(); + SS.ScheduleShowTW(); + InvalidateGraphics(); + break; + + case MNU_TANGENT_ARC: + SS.GW.GroupSelection(); + if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { + SS.GW.MakeTangentArc(); + } else if(SS.GW.gs.n != 0) { + Error("Bad selection for tangent arc at point. Select a " + "single point, or select nothing to set up arc " + "parameters."); + } else { + SS.TW.GoToScreen(TextWindow::SCREEN_TANGENT_ARC); + SS.GW.ForceTextWindowShown(); + SS.ScheduleShowTW(); + InvalidateGraphics(); // repaint toolbar + } + break; + + case MNU_ARC: s = "click point on arc (draws anti-clockwise)"; goto c; + case MNU_DATUM_POINT: s = "click to place datum point"; goto c; + case MNU_LINE_SEGMENT: s = "click first point of line segment"; goto c; + case MNU_CONSTR_SEGMENT: s = "click first point of construction line segment"; goto c; + case MNU_CUBIC: s = "click first point of cubic segment"; goto c; + case MNU_CIRCLE: s = "click center of circle"; goto c; + case MNU_WORKPLANE: s = "click origin of workplane"; goto c; + case MNU_RECTANGLE: s = "click one corner of rectangle"; goto c; + case MNU_TTF_TEXT: s = "click top left of text"; goto c; +c: + SS.GW.pending.operation = id; + SS.GW.pending.description = s; + SS.ScheduleShowTW(); + InvalidateGraphics(); // repaint toolbar + break; + + case MNU_CONSTRUCTION: { + SS.UndoRemember(); + SS.GW.GroupSelection(); + if(SS.GW.gs.entities == 0) { + Error("No entities are selected. Select entities before " + "trying to toggle their construction state."); + } + int i; + for(i = 0; i < SS.GW.gs.entities; i++) { + hEntity he = SS.GW.gs.entity[i]; + if(!he.isFromRequest()) continue; + Request *r = SK.GetRequest(he.request()); + r->construction = !(r->construction); + SS.MarkGroupDirty(r->group); + } + SS.GW.ClearSelection(); + SS.GenerateAll(); + break; + } + + case MNU_SPLIT_CURVES: + SS.GW.SplitLinesOrCurves(); + break; + + default: oops(); + } +} + +void GraphicsWindow::ClearSuper(void) { + HideGraphicsEditControl(); + ClearPending(); + ClearSelection(); + hover.Clear(); + EnsureValidActives(); +} + +void GraphicsWindow::ToggleBool(bool *v) { + *v = !*v; + + // The faces are shown as special stippling on the shaded triangle mesh, + // so not meaningful to show them and hide the shaded. + if(!showShaded) showFaces = false; + + // We might need to regenerate the mesh and edge list, since the edges + // wouldn't have been generated if they were previously hidden. + if(showEdges) (SK.GetGroup(activeGroup))->displayDirty = true; + + SS.GenerateAll(); + InvalidateGraphics(); + SS.ScheduleShowTW(); +} + +GraphicsWindow::SuggestedConstraint GraphicsWindow::SuggestLineConstraint(hRequest request) { + if(LockedInWorkplane()) { + Entity *ptA = SK.GetEntity(request.entity(1)), + *ptB = SK.GetEntity(request.entity(2)); + + Expr *au, *av, *bu, *bv; + + ptA->PointGetExprsInWorkplane(ActiveWorkplane(), &au, &av); + ptB->PointGetExprsInWorkplane(ActiveWorkplane(), &bu, &bv); + + double du = au->Minus(bu)->Eval(); + double dv = av->Minus(bv)->Eval(); + + const double TOLERANCE_RATIO = 0.02; + if(fabs(dv) > LENGTH_EPS && fabs(du / dv) < TOLERANCE_RATIO) + return SUGGESTED_VERTICAL; + else if(fabs(du) > LENGTH_EPS && fabs(dv / du) < TOLERANCE_RATIO) + return SUGGESTED_HORIZONTAL; + else + return SUGGESTED_NONE; + } else { + return SUGGESTED_NONE; + } +} diff --git a/src/group.cpp b/src/group.cpp new file mode 100644 index 0000000..845cfff --- /dev/null +++ b/src/group.cpp @@ -0,0 +1,906 @@ +//----------------------------------------------------------------------------- +// Implementation of the Group class, which represents a set of entities and +// constraints that are solved together, in some cases followed by another +// operation, like to extrude surfaces from the entities or to step and +// repeat them parametrically. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hParam Param::NO_PARAM = { 0 }; +#define NO_PARAM (Param::NO_PARAM) + +const hGroup Group::HGROUP_REFERENCES = { 1 }; + +#define gs (SS.GW.gs) + +//----------------------------------------------------------------------------- +// The group structure includes pointers to other dynamically-allocated +// memory. This clears and frees them all. +//----------------------------------------------------------------------------- +void Group::Clear(void) { + polyLoops.Clear(); + bezierLoops.Clear(); + bezierOpens.Clear(); + thisMesh.Clear(); + runningMesh.Clear(); + thisShell.Clear(); + runningShell.Clear(); + displayMesh.Clear(); + displayEdges.Clear(); + displayOutlines.Clear(); + impMesh.Clear(); + impShell.Clear(); + impEntity.Clear(); + // remap is the only one that doesn't get recreated when we regen + remap.Clear(); +} + +void Group::AddParam(IdList *param, hParam hp, double v) { + Param pa = {}; + pa.h = hp; + pa.val = v; + + param->Add(&pa); +} + +bool Group::IsVisible(void) { + if(!visible) return false; + if(SS.GroupsInOrder(SS.GW.activeGroup, h)) return false; + return true; +} + +int Group::GetNumConstraints(void) { + int num = 0; + for(int i = 0; i < SK.constraint.n; i++) { + Constraint *c = &SK.constraint.elem[i]; + if(c->group.v != h.v) continue; + num++; + } + return num; +} + +Vector Group::ExtrusionGetVector() { + return Vector::From(h.param(0), h.param(1), h.param(2)); +} + +void Group::ExtrusionForceVectorTo(const Vector &v) { + SK.GetParam(h.param(0))->val = v.x; + SK.GetParam(h.param(1))->val = v.y; + SK.GetParam(h.param(2))->val = v.z; +} + +void Group::MenuGroup(int id) { + Group g = {}; + g.visible = true; + g.color = RGBi(100, 100, 100); + g.scale = 1; + + if(id >= RECENT_LINK && id < (RECENT_LINK + MAX_RECENT)) { + g.linkFile = RecentFile[id-RECENT_LINK]; + id = GraphicsWindow::MNU_GROUP_LINK; + } + + SS.GW.GroupSelection(); + + switch(id) { + case GraphicsWindow::MNU_GROUP_3D: + g.type = DRAWING_3D; + g.name = "sketch-in-3d"; + break; + + case GraphicsWindow::MNU_GROUP_WRKPL: + g.type = DRAWING_WORKPLANE; + g.name = "sketch-in-plane"; + if(gs.points == 1 && gs.n == 1) { + g.subtype = WORKPLANE_BY_POINT_ORTHO; + + Vector u = SS.GW.projRight, v = SS.GW.projUp; + u = u.ClosestOrtho(); + v = v.Minus(u.ScaledBy(v.Dot(u))); + v = v.ClosestOrtho(); + + g.predef.q = Quaternion::From(u, v); + g.predef.origin = gs.point[0]; + } else if(gs.points == 1 && gs.lineSegments == 2 && gs.n == 3) { + g.subtype = WORKPLANE_BY_LINE_SEGMENTS; + + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.entity[0]; + g.predef.entityC = gs.entity[1]; + + Vector ut = SK.GetEntity(g.predef.entityB)->VectorGetNum(); + Vector vt = SK.GetEntity(g.predef.entityC)->VectorGetNum(); + ut = ut.WithMagnitude(1); + vt = vt.WithMagnitude(1); + + if(fabs(SS.GW.projUp.Dot(vt)) < fabs(SS.GW.projUp.Dot(ut))) { + swap(ut, vt); + g.predef.swapUV = true; + } + if(SS.GW.projRight.Dot(ut) < 0) g.predef.negateU = true; + if(SS.GW.projUp. Dot(vt) < 0) g.predef.negateV = true; + } else { + Error("Bad selection for new sketch in workplane. This " + "group can be created with:\n\n" + " * a point (orthogonal to coordinate axes, " + "through the point)\n" + " * a point and two line segments (parallel to the " + "lines, through the point)\n"); + return; + } + break; + + case GraphicsWindow::MNU_GROUP_EXTRUDE: + if(!SS.GW.LockedInWorkplane()) { + Error("Select a workplane (Sketch -> In Workplane) before " + "extruding. The sketch will be extruded normal to the " + "workplane."); + return; + } + g.type = EXTRUDE; + g.opA = SS.GW.activeGroup; + g.predef.entityB = SS.GW.ActiveWorkplane(); + g.subtype = ONE_SIDED; + g.name = "extrude"; + break; + + case GraphicsWindow::MNU_GROUP_LATHE: + if(gs.points == 1 && gs.vectors == 1 && gs.n == 2) { + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.vector[0]; + } else if(gs.lineSegments == 1 && gs.n == 1) { + g.predef.origin = SK.GetEntity(gs.entity[0])->point[0]; + g.predef.entityB = gs.entity[0]; + // since a line segment is a vector + } else { + Error("Bad selection for new lathe group. This group can " + "be created with:\n\n" + " * a point and a line segment or normal " + "(revolved about an axis parallel to line / " + "normal, through point)\n" + " * a line segment (revolved about line segment)\n"); + return; + } + g.type = LATHE; + g.opA = SS.GW.activeGroup; + g.name = "lathe"; + break; + + case GraphicsWindow::MNU_GROUP_ROT: { + if(gs.points == 1 && gs.n == 1 && SS.GW.LockedInWorkplane()) { + g.predef.origin = gs.point[0]; + Entity *w = SK.GetEntity(SS.GW.ActiveWorkplane()); + g.predef.entityB = w->Normal()->h; + g.activeWorkplane = w->h; + } else if(gs.points == 1 && gs.vectors == 1 && gs.n == 2) { + g.predef.origin = gs.point[0]; + g.predef.entityB = gs.vector[0]; + } else { + Error("Bad selection for new rotation. This group can " + "be created with:\n\n" + " * a point, while locked in workplane (rotate " + "in plane, about that point)\n" + " * a point and a line or a normal (rotate about " + "an axis through the point, and parallel to " + "line / normal)\n"); + return; + } + g.type = ROTATE; + g.opA = SS.GW.activeGroup; + g.valA = 3; + g.subtype = ONE_SIDED; + g.name = "rotate"; + break; + } + + case GraphicsWindow::MNU_GROUP_TRANS: + g.type = TRANSLATE; + g.opA = SS.GW.activeGroup; + g.valA = 3; + g.subtype = ONE_SIDED; + g.predef.entityB = SS.GW.ActiveWorkplane(); + g.activeWorkplane = SS.GW.ActiveWorkplane(); + g.name = "translate"; + break; + + case GraphicsWindow::MNU_GROUP_LINK: { + g.type = LINKED; + if(g.linkFile.empty()) { + if(!GetOpenFile(&g.linkFile, "", SlvsFileFilter)) return; + } + + // Assign the default name of the group based on the name of + // the linked file. + std::string groupName = g.linkFile; + size_t pos; + + pos = groupName.rfind(PATH_SEP); + if(pos != std::string::npos) + groupName.erase(0, pos + 1); + + pos = groupName.rfind('.'); + if(pos != std::string::npos) + groupName.erase(pos); + + for(size_t i = 0; i < groupName.length(); i++) { + if(!(isalnum(groupName[i]) || (unsigned)groupName[i] >= 0x80)) { + // convert punctuation to dashes + groupName[i] = '-'; + } + } + + if(groupName.length() > 0) { + g.name = groupName; + } else { + g.name = "link"; + } + + g.meshCombine = COMBINE_AS_ASSEMBLE; + break; + } + + default: oops(); + } + + // Copy color from the previous mesh-contributing group. + if(g.IsMeshGroup() && SK.groupOrder.n > 0) { + Group *running = SK.GetRunningMeshGroupFor(SS.GW.activeGroup); + if(running != NULL) { + g.color = running->color; + } + } + + SS.GW.ClearSelection(); + SS.UndoRemember(); + + bool afterActive = false; + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *gi = SK.GetGroup(SK.groupOrder.elem[i]); + if(afterActive) + gi->order += 1; + if(gi->h.v == SS.GW.activeGroup.v) { + g.order = gi->order + 1; + afterActive = true; + } + } + + SK.group.AddAndAssignId(&g); + Group *gg = SK.GetGroup(g.h); + + if(gg->type == LINKED) { + SS.ReloadAllImported(); + } + gg->clean = false; + SS.GW.activeGroup = gg->h; + SS.GenerateAll(); + if(gg->type == DRAWING_WORKPLANE) { + // Can't set the active workplane for this one until after we've + // regenerated, because the workplane doesn't exist until then. + gg->activeWorkplane = gg->h.entity(0); + } + gg->Activate(); + SS.GW.AnimateOntoWorkplane(); + TextWindow::ScreenSelectGroup(0, gg->h.v); + SS.ScheduleShowTW(); +} + +void Group::TransformImportedBy(Vector t, Quaternion q) { + if(type != LINKED) oops(); + + hParam tx, ty, tz, qw, qx, qy, qz; + tx = h.param(0); + ty = h.param(1); + tz = h.param(2); + qw = h.param(3); + qx = h.param(4); + qy = h.param(5); + qz = h.param(6); + + Quaternion qg = Quaternion::From(qw, qx, qy, qz); + qg = q.Times(qg); + + Vector tg = Vector::From(tx, ty, tz); + tg = tg.Plus(t); + + SK.GetParam(tx)->val = tg.x; + SK.GetParam(ty)->val = tg.y; + SK.GetParam(tz)->val = tg.z; + + SK.GetParam(qw)->val = qg.w; + SK.GetParam(qx)->val = qg.vx; + SK.GetParam(qy)->val = qg.vy; + SK.GetParam(qz)->val = qg.vz; +} + +std::string Group::DescriptionString(void) { + if(name.empty()) { + return ssprintf("g%03x-(unnamed)", h.v); + } else { + return ssprintf("g%03x-%s", h.v, name.c_str()); + } +} + +void Group::Activate(void) { + if(type == EXTRUDE || type == LINKED || type == LATHE || type == TRANSLATE || type == ROTATE) { + SS.GW.showFaces = true; + } else { + SS.GW.showFaces = false; + } + SS.MarkGroupDirty(h); // for good measure; shouldn't be needed + SS.ScheduleGenerateAll(); + SS.ScheduleShowTW(); +} + +void Group::Generate(IdList *entity, + IdList *param) +{ + Vector gn = (SS.GW.projRight).Cross(SS.GW.projUp); + Vector gp = SS.GW.projRight.Plus(SS.GW.projUp); + Vector gc = (SS.GW.offset).ScaledBy(-1); + gn = gn.WithMagnitude(200/SS.GW.scale); + gp = gp.WithMagnitude(200/SS.GW.scale); + int a, i; + switch(type) { + case DRAWING_3D: + break; + + case DRAWING_WORKPLANE: { + Quaternion q; + if(subtype == WORKPLANE_BY_LINE_SEGMENTS) { + Vector u = SK.GetEntity(predef.entityB)->VectorGetNum(); + Vector v = SK.GetEntity(predef.entityC)->VectorGetNum(); + u = u.WithMagnitude(1); + Vector n = u.Cross(v); + v = (n.Cross(u)).WithMagnitude(1); + + if(predef.swapUV) swap(u, v); + if(predef.negateU) u = u.ScaledBy(-1); + if(predef.negateV) v = v.ScaledBy(-1); + q = Quaternion::From(u, v); + } else if(subtype == WORKPLANE_BY_POINT_ORTHO) { + // Already given, numerically. + q = predef.q; + } else oops(); + + Entity normal = {}; + normal.type = Entity::NORMAL_N_COPY; + normal.numNormal = q; + normal.point[0] = h.entity(2); + normal.group = h; + normal.h = h.entity(1); + entity->Add(&normal); + + Entity point = {}; + point.type = Entity::POINT_N_COPY; + point.numPoint = SK.GetEntity(predef.origin)->PointGetNum(); + point.group = h; + point.h = h.entity(2); + entity->Add(&point); + + Entity wp = {}; + wp.type = Entity::WORKPLANE; + wp.normal = normal.h; + wp.point[0] = point.h; + wp.group = h; + wp.h = h.entity(0); + entity->Add(&wp); + break; + } + + case EXTRUDE: { + AddParam(param, h.param(0), gn.x); + AddParam(param, h.param(1), gn.y); + AddParam(param, h.param(2), gn.z); + int ai, af; + if(subtype == ONE_SIDED) { + ai = 0; af = 2; + } else if(subtype == TWO_SIDED) { + ai = -1; af = 1; + } else oops(); + + // Get some arbitrary point in the sketch, that will be used + // as a reference when defining top and bottom faces. + hEntity pt = { 0 }; + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + if(e->IsPoint()) pt = e->h; + + e->CalculateNumerical(false); + hEntity he = e->h; e = NULL; + // As soon as I call CopyEntity, e may become invalid! That + // adds entities, which may cause a realloc. + CopyEntity(entity, SK.GetEntity(he), ai, REMAP_BOTTOM, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + CopyEntity(entity, SK.GetEntity(he), af, REMAP_TOP, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + MakeExtrusionLines(entity, he); + } + // Remapped versions of that arbitrary point will be used to + // provide points on the plane faces. + MakeExtrusionTopBottomFaces(entity, pt); + break; + } + + case LATHE: { + Vector axis_pos = SK.GetEntity(predef.origin)->PointGetNum(); + Vector axis_dir = SK.GetEntity(predef.entityB)->VectorGetNum(); + + AddParam(param, h.param(0), axis_dir.x); + AddParam(param, h.param(1), axis_dir.y); + AddParam(param, h.param(2), axis_dir.z); + + // Remapped entity index. + int ai = 1; + + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + hEntity he = e->h; + + // As soon as I call CopyEntity, e may become invalid! That + // adds entities, which may cause a realloc. + CopyEntity(entity, SK.GetEntity(predef.origin), 0, ai, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + CopyEntity(entity, SK.GetEntity(he), 0, REMAP_LATHE_START, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + CopyEntity(entity, SK.GetEntity(he), 0, REMAP_LATHE_END, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + + MakeLatheCircles(entity, param, he, axis_pos, axis_dir, ai); + ai++; + } + break; + } + + case TRANSLATE: { + // The translation vector + AddParam(param, h.param(0), gp.x); + AddParam(param, h.param(1), gp.y); + AddParam(param, h.param(2), gp.z); + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + + for(a = a0; a < n; a++) { + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + CopyEntity(entity, e, + a*2 - (subtype == ONE_SIDED ? 0 : (n-1)), + (a == (n - 1)) ? REMAP_LAST : a, + h.param(0), h.param(1), h.param(2), + NO_PARAM, NO_PARAM, NO_PARAM, NO_PARAM, + true, false); + } + } + break; + } + case ROTATE: { + // The center of rotation + AddParam(param, h.param(0), gc.x); + AddParam(param, h.param(1), gc.y); + AddParam(param, h.param(2), gc.z); + // The rotation quaternion + AddParam(param, h.param(3), 30*PI/180); + AddParam(param, h.param(4), gn.x); + AddParam(param, h.param(5), gn.y); + AddParam(param, h.param(6), gn.z); + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + + for(a = a0; a < n; a++) { + for(i = 0; i < entity->n; i++) { + Entity *e = &(entity->elem[i]); + if(e->group.v != opA.v) continue; + + e->CalculateNumerical(false); + CopyEntity(entity, e, + a*2 - (subtype == ONE_SIDED ? 0 : (n-1)), + (a == (n - 1)) ? REMAP_LAST : a, + h.param(0), h.param(1), h.param(2), + h.param(3), h.param(4), h.param(5), h.param(6), + false, true); + } + } + break; + } + case LINKED: + // The translation vector + AddParam(param, h.param(0), gp.x); + AddParam(param, h.param(1), gp.y); + AddParam(param, h.param(2), gp.z); + // The rotation quaternion + AddParam(param, h.param(3), 1); + AddParam(param, h.param(4), 0); + AddParam(param, h.param(5), 0); + AddParam(param, h.param(6), 0); + + for(i = 0; i < impEntity.n; i++) { + Entity *ie = &(impEntity.elem[i]); + CopyEntity(entity, ie, 0, 0, + h.param(0), h.param(1), h.param(2), + h.param(3), h.param(4), h.param(5), h.param(6), + false, false); + } + break; + + default: oops(); + } +} + +bool Group::IsSolvedOkay() { + return this->solved.how == System::SOLVED_OKAY || + (this->allowRedundant && this->solved.how == System::REDUNDANT_OKAY); +} + +void Group::AddEq(IdList *l, Expr *expr, int index) { + Equation eq; + eq.e = expr; + eq.h = h.equation(index); + l->Add(&eq); +} + +void Group::GenerateEquations(IdList *l) { + if(type == LINKED) { + // Normalize the quaternion + ExprQuaternion q = { + Expr::From(h.param(3)), + Expr::From(h.param(4)), + Expr::From(h.param(5)), + Expr::From(h.param(6)) }; + AddEq(l, (q.Magnitude())->Minus(Expr::From(1)), 0); + } else if(type == ROTATE) { + // The axis and center of rotation are specified numerically +#define EC(x) (Expr::From(x)) +#define EP(x) (Expr::From(h.param(x))) + ExprVector orig = SK.GetEntity(predef.origin)->PointGetExprs(); + AddEq(l, (orig.x)->Minus(EP(0)), 0); + AddEq(l, (orig.y)->Minus(EP(1)), 1); + AddEq(l, (orig.z)->Minus(EP(2)), 2); + // param 3 is the angle, which is free + Vector axis = SK.GetEntity(predef.entityB)->VectorGetNum(); + axis = axis.WithMagnitude(1); + AddEq(l, (EC(axis.x))->Minus(EP(4)), 3); + AddEq(l, (EC(axis.y))->Minus(EP(5)), 4); + AddEq(l, (EC(axis.z))->Minus(EP(6)), 5); +#undef EC +#undef EP + } else if(type == EXTRUDE) { + if(predef.entityB.v != Entity::FREE_IN_3D.v) { + // The extrusion path is locked along a line, normal to the + // specified workplane. + Entity *w = SK.GetEntity(predef.entityB); + ExprVector u = w->Normal()->NormalExprsU(); + ExprVector v = w->Normal()->NormalExprsV(); + ExprVector extruden = { + Expr::From(h.param(0)), + Expr::From(h.param(1)), + Expr::From(h.param(2)) }; + + AddEq(l, u.Dot(extruden), 0); + AddEq(l, v.Dot(extruden), 1); + } + } else if(type == TRANSLATE) { + if(predef.entityB.v != Entity::FREE_IN_3D.v) { + Entity *w = SK.GetEntity(predef.entityB); + ExprVector n = w->Normal()->NormalExprsN(); + ExprVector trans; + trans = ExprVector::From(h.param(0), h.param(1), h.param(2)); + + // The translation vector is parallel to the workplane + AddEq(l, trans.Dot(n), 0); + } + } +} + +hEntity Group::Remap(hEntity in, int copyNumber) { + // A hash table is used to accelerate the search + int hash = ((unsigned)(in.v*61 + copyNumber)) % REMAP_PRIME; + int i = remapCache[hash]; + if(i >= 0 && i < remap.n) { + EntityMap *em = &(remap.elem[i]); + if(em->input.v == in.v && em->copyNumber == copyNumber) { + return h.entity(em->h.v); + } + } + // but if we don't find it in the hash table, then linear search + for(i = 0; i < remap.n; i++) { + EntityMap *em = &(remap.elem[i]); + if(em->input.v == in.v && em->copyNumber == copyNumber) { + // We already have a mapping for this entity. + remapCache[hash] = i; + return h.entity(em->h.v); + } + } + // And if we still don't find it, then create a new entry. + EntityMap em; + em.input = in; + em.copyNumber = copyNumber; + remap.AddAndAssignId(&em); + return h.entity(em.h.v); +} + +void Group::MakeExtrusionLines(IdList *el, hEntity in) { + Entity *ep = SK.GetEntity(in); + + Entity en = {}; + if(ep->IsPoint()) { + // A point gets extruded to form a line segment + en.point[0] = Remap(ep->h, REMAP_TOP); + en.point[1] = Remap(ep->h, REMAP_BOTTOM); + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_PT_TO_LINE); + en.type = Entity::LINE_SEGMENT; + el->Add(&en); + } else if(ep->type == Entity::LINE_SEGMENT) { + // A line gets extruded to form a plane face; an endpoint of the + // original line is a point in the plane, and the line is in the plane. + Vector a = SK.GetEntity(ep->point[0])->PointGetNum(); + Vector b = SK.GetEntity(ep->point[1])->PointGetNum(); + Vector ab = b.Minus(a); + + en.param[0] = h.param(0); + en.param[1] = h.param(1); + en.param[2] = h.param(2); + en.numPoint = a; + en.numNormal = Quaternion::From(0, ab.x, ab.y, ab.z); + + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_LINE_TO_FACE); + en.type = Entity::FACE_XPROD; + el->Add(&en); + } +} + +void Group::MakeLatheCircles(IdList *el, IdList *param, hEntity in, Vector pt, Vector axis, int ai) { + Entity *ep = SK.GetEntity(in); + + Entity en = {}; + if(ep->IsPoint()) { + // A point gets revolved to form an arc. + en.point[0] = Remap(predef.origin, ai); + en.point[1] = Remap(ep->h, REMAP_LATHE_START); + en.point[2] = Remap(ep->h, REMAP_LATHE_END); + + // Get arc center and point on arc. + Entity *pc = SK.GetEntity(en.point[0]); + Entity *pp = SK.GetEntity(en.point[1]); + + // Project arc point to the revolution axis and use it for arc center. + double k = pp->numPoint.Minus(pt).Dot(axis) / axis.Dot(axis); + pc->numPoint = pt.Plus(axis.ScaledBy(k)); + + // Create arc entity. + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_PT_TO_ARC); + en.type = Entity::ARC_OF_CIRCLE; + + // Generate a normal. + Entity n = {}; + n.workplane = en.workplane; + n.h = Remap(ep->h, REMAP_PT_TO_NORMAL); + n.group = en.group; + n.style = en.style; + n.type = Entity::NORMAL_N_COPY; + + // Create basis for the normal. + Vector nu = pp->numPoint.Minus(pc->numPoint).WithMagnitude(1.0); + Vector nv = nu.Cross(axis).WithMagnitude(1.0); + n.numNormal = Quaternion::From(nv, nu); + + // The point determines where the normal gets displayed on-screen; + // it's entirely cosmetic. + n.point[0] = en.point[0]; + el->Add(&n); + en.normal = n.h; + el->Add(&en); + } else if(ep->type == Entity::LINE_SEGMENT) { + // An axis-perpendicular line gets revolved to form a face. + Vector a = SK.GetEntity(ep->point[0])->PointGetNum(); + Vector b = SK.GetEntity(ep->point[1])->PointGetNum(); + Vector u = b.Minus(a).WithMagnitude(1.0); + + // Check for perpendicularity: calculate cosine of the angle + // between axis and line direction and check that + // cos(angle) == 0 <-> angle == +-90 deg. + if(fabs(u.Dot(axis) / axis.Magnitude()) < ANGLE_COS_EPS) { + en.param[0] = h.param(0); + en.param[1] = h.param(1); + en.param[2] = h.param(2); + Vector v = axis.Cross(u).WithMagnitude(1.0); + Vector n = u.Cross(v); + en.numNormal = Quaternion::From(0, n.x, n.y, n.z); + + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.h = Remap(ep->h, REMAP_LINE_TO_FACE); + en.type = Entity::FACE_NORMAL_PT; + en.point[0] = ep->point[0]; + el->Add(&en); + } + } +} + +void Group::MakeExtrusionTopBottomFaces(IdList *el, hEntity pt) +{ + if(pt.v == 0) return; + Group *src = SK.GetGroup(opA); + Vector n = src->polyLoops.normal; + + Entity en = {}; + en.type = Entity::FACE_NORMAL_PT; + en.group = h; + + en.numNormal = Quaternion::From(0, n.x, n.y, n.z); + en.point[0] = Remap(pt, REMAP_TOP); + en.h = Remap(Entity::NO_ENTITY, REMAP_TOP); + el->Add(&en); + + en.point[0] = Remap(pt, REMAP_BOTTOM); + en.h = Remap(Entity::NO_ENTITY, REMAP_BOTTOM); + el->Add(&en); +} + +void Group::CopyEntity(IdList *el, + Entity *ep, int timesApplied, int remap, + hParam dx, hParam dy, hParam dz, + hParam qw, hParam qvx, hParam qvy, hParam qvz, + bool asTrans, bool asAxisAngle) +{ + Entity en = {}; + en.type = ep->type; + en.extraPoints = ep->extraPoints; + en.h = Remap(ep->h, remap); + en.timesApplied = timesApplied; + en.group = h; + en.construction = ep->construction; + en.style = ep->style; + en.str = ep->str; + en.font = ep->font; + + switch(ep->type) { + case Entity::WORKPLANE: + // Don't copy these. + return; + + case Entity::POINT_N_COPY: + case Entity::POINT_N_TRANS: + case Entity::POINT_N_ROT_TRANS: + case Entity::POINT_N_ROT_AA: + case Entity::POINT_IN_3D: + case Entity::POINT_IN_2D: + if(asTrans) { + en.type = Entity::POINT_N_TRANS; + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + } else { + if(asAxisAngle) { + en.type = Entity::POINT_N_ROT_AA; + } else { + en.type = Entity::POINT_N_ROT_TRANS; + } + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + en.param[3] = qw; + en.param[4] = qvx; + en.param[5] = qvy; + en.param[6] = qvz; + } + en.numPoint = (ep->actPoint).ScaledBy(scale); + break; + + case Entity::NORMAL_N_COPY: + case Entity::NORMAL_N_ROT: + case Entity::NORMAL_N_ROT_AA: + case Entity::NORMAL_IN_3D: + case Entity::NORMAL_IN_2D: + if(asTrans) { + en.type = Entity::NORMAL_N_COPY; + } else { + if(asAxisAngle) { + en.type = Entity::NORMAL_N_ROT_AA; + } else { + en.type = Entity::NORMAL_N_ROT; + } + en.param[0] = qw; + en.param[1] = qvx; + en.param[2] = qvy; + en.param[3] = qvz; + } + en.numNormal = ep->actNormal; + if(scale < 0) en.numNormal = en.numNormal.Mirror(); + + en.point[0] = Remap(ep->point[0], remap); + break; + + case Entity::DISTANCE_N_COPY: + case Entity::DISTANCE: + en.type = Entity::DISTANCE_N_COPY; + en.numDistance = ep->actDistance*fabs(scale); + break; + + case Entity::FACE_NORMAL_PT: + case Entity::FACE_XPROD: + case Entity::FACE_N_ROT_TRANS: + case Entity::FACE_N_TRANS: + case Entity::FACE_N_ROT_AA: + if(asTrans) { + en.type = Entity::FACE_N_TRANS; + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + } else { + if(asAxisAngle) { + en.type = Entity::FACE_N_ROT_AA; + } else { + en.type = Entity::FACE_N_ROT_TRANS; + } + en.param[0] = dx; + en.param[1] = dy; + en.param[2] = dz; + en.param[3] = qw; + en.param[4] = qvx; + en.param[5] = qvy; + en.param[6] = qvz; + } + en.numPoint = (ep->actPoint).ScaledBy(scale); + en.numNormal = (ep->actNormal).ScaledBy(scale); + break; + + default: { + int i, points; + bool hasNormal, hasDistance; + EntReqTable::GetEntityInfo(ep->type, ep->extraPoints, + NULL, &points, &hasNormal, &hasDistance); + for(i = 0; i < points; i++) { + en.point[i] = Remap(ep->point[i], remap); + } + if(hasNormal) en.normal = Remap(ep->normal, remap); + if(hasDistance) en.distance = Remap(ep->distance, remap); + break; + } + } + + // If the entity came from an linked file where it was invisible then + // ep->actiVisble will be false, and we should hide it. Or if the entity + // came from a copy (e.g. step and repeat) of a force-hidden linked + // entity, then we also want to hide it. + en.forceHidden = (!ep->actVisible) || ep->forceHidden; + + el->Add(&en); +} + diff --git a/src/groupmesh.cpp b/src/groupmesh.cpp new file mode 100644 index 0000000..77130bc --- /dev/null +++ b/src/groupmesh.cpp @@ -0,0 +1,617 @@ +//----------------------------------------------------------------------------- +// Routines to generate our watertight brep shells from the operations +// and entities specified by the user in each group; templated to work either +// on an SShell of ratpoly surfaces or on an SMesh of triangles. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#define gs (SS.GW.gs) + +void Group::AssembleLoops(bool *allClosed, + bool *allCoplanar, + bool *allNonZeroLen) +{ + SBezierList sbl = {}; + + int i; + for(i = 0; i < SK.entity.n; i++) { + Entity *e = &(SK.entity.elem[i]); + if(e->group.v != h.v) continue; + if(e->construction) continue; + if(e->forceHidden) continue; + + e->GenerateBezierCurves(&sbl); + } + + SBezier *sb; + *allNonZeroLen = true; + for(sb = sbl.l.First(); sb; sb = sbl.l.NextAfter(sb)) { + for(i = 1; i <= sb->deg; i++) { + if(!(sb->ctrl[i]).Equals(sb->ctrl[0])) { + break; + } + } + if(i > sb->deg) { + // This is a zero-length edge. + *allNonZeroLen = false; + polyError.errorPointAt = sb->ctrl[0]; + goto done; + } + } + + // Try to assemble all these Beziers into loops. The closed loops go into + // bezierLoops, with the outer loops grouped with their holes. The + // leftovers, if any, go in bezierOpens. + bezierLoops.FindOuterFacesFrom(&sbl, &polyLoops, NULL, + SS.ChordTolMm(), + allClosed, &(polyError.notClosedAt), + allCoplanar, &(polyError.errorPointAt), + &bezierOpens); + done: + sbl.Clear(); +} + +void Group::GenerateLoops(void) { + polyLoops.Clear(); + bezierLoops.Clear(); + bezierOpens.Clear(); + + if(type == DRAWING_3D || type == DRAWING_WORKPLANE || + type == ROTATE || type == TRANSLATE || type == LINKED) + { + bool allClosed = false, allCoplanar = false, allNonZeroLen = false; + AssembleLoops(&allClosed, &allCoplanar, &allNonZeroLen); + if(!allNonZeroLen) { + polyError.how = POLY_ZERO_LEN_EDGE; + } else if(!allCoplanar) { + polyError.how = POLY_NOT_COPLANAR; + } else if(!allClosed) { + polyError.how = POLY_NOT_CLOSED; + } else { + polyError.how = POLY_GOOD; + // The self-intersecting check is kind of slow, so don't run it + // unless requested. + if(SS.checkClosedContour) { + if(polyLoops.SelfIntersecting(&(polyError.errorPointAt))) { + polyError.how = POLY_SELF_INTERSECTING; + } + } + } + } +} + +void SShell::RemapFaces(Group *g, int remap) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)){ + hEntity face = { ss->face }; + if(face.v == Entity::NO_ENTITY.v) continue; + + face = g->Remap(face, remap); + ss->face = face.v; + } +} + +void SMesh::RemapFaces(Group *g, int remap) { + STriangle *tr; + for(tr = l.First(); tr; tr = l.NextAfter(tr)) { + hEntity face = { tr->meta.face }; + if(face.v == Entity::NO_ENTITY.v) continue; + + face = g->Remap(face, remap); + tr->meta.face = face.v; + } +} + +template +void Group::GenerateForStepAndRepeat(T *steps, T *outs) { + T workA, workB; + workA = {}; + workB = {}; + T *soFar = &workA, *scratch = &workB; + + int n = (int)valA, a0 = 0; + if(subtype == ONE_SIDED && skipFirst) { + a0++; n++; + } + int a; + for(a = a0; a < n; a++) { + int ap = a*2 - (subtype == ONE_SIDED ? 0 : (n-1)); + int remap = (a == (n - 1)) ? REMAP_LAST : a; + + T transd = {}; + if(type == TRANSLATE) { + Vector trans = Vector::From(h.param(0), h.param(1), h.param(2)); + trans = trans.ScaledBy(ap); + transd.MakeFromTransformationOf(steps, + trans, Quaternion::IDENTITY, 1.0); + } else { + Vector trans = Vector::From(h.param(0), h.param(1), h.param(2)); + double theta = ap * SK.GetParam(h.param(3))->val; + double c = cos(theta), s = sin(theta); + Vector axis = Vector::From(h.param(4), h.param(5), h.param(6)); + Quaternion q = Quaternion::From(c, s*axis.x, s*axis.y, s*axis.z); + // Rotation is centered at t; so A(x - t) + t = Ax + (t - At) + transd.MakeFromTransformationOf(steps, + trans.Minus(q.Rotate(trans)), q, 1.0); + } + + // We need to rewrite any plane face entities to the transformed ones. + transd.RemapFaces(this, remap); + + // And tack this transformed copy on to the return. + if(soFar->IsEmpty()) { + scratch->MakeFromCopyOf(&transd); + } else { + scratch->MakeFromUnionOf(soFar, &transd); + } + + swap(scratch, soFar); + scratch->Clear(); + transd.Clear(); + } + + outs->Clear(); + *outs = *soFar; +} + +template +void Group::GenerateForBoolean(T *prevs, T *thiss, T *outs, int how) { + // If this group contributes no new mesh, then our running mesh is the + // same as last time, no combining required. Likewise if we have a mesh + // but it's suppressed. + if(thiss->IsEmpty() || suppress) { + outs->MakeFromCopyOf(prevs); + return; + } + + // So our group's shell appears in thisShell. Combine this with the + // previous group's shell, using the requested operation. + if(how == COMBINE_AS_UNION) { + outs->MakeFromUnionOf(prevs, thiss); + } else if(how == COMBINE_AS_DIFFERENCE) { + outs->MakeFromDifferenceOf(prevs, thiss); + } else { + outs->MakeFromAssemblyOf(prevs, thiss); + } +} + +void Group::GenerateShellAndMesh(void) { + bool prevBooleanFailed = booleanFailed; + booleanFailed = false; + + Group *srcg = this; + + thisShell.Clear(); + thisMesh.Clear(); + runningShell.Clear(); + runningMesh.Clear(); + + // Don't attempt a lathe or extrusion unless the source section is good: + // planar and not self-intersecting. + bool haveSrc = true; + if(type == EXTRUDE || type == LATHE) { + Group *src = SK.GetGroup(opA); + if(src->polyError.how != POLY_GOOD) { + haveSrc = false; + } + } + + if(type == TRANSLATE || type == ROTATE) { + // A step and repeat gets merged against the group's prevous group, + // not our own previous group. + srcg = SK.GetGroup(opA); + + if(!srcg->suppress) { + GenerateForStepAndRepeat(&(srcg->thisShell), &thisShell); + GenerateForStepAndRepeat (&(srcg->thisMesh), &thisMesh); + } + } else if(type == EXTRUDE && haveSrc) { + Group *src = SK.GetGroup(opA); + Vector translate = Vector::From(h.param(0), h.param(1), h.param(2)); + + Vector tbot, ttop; + if(subtype == ONE_SIDED) { + tbot = Vector::From(0, 0, 0); ttop = translate.ScaledBy(2); + } else { + tbot = translate.ScaledBy(-1); ttop = translate.ScaledBy(1); + } + + SBezierLoopSetSet *sblss = &(src->bezierLoops); + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + int is = thisShell.surface.n; + // Extrude this outer contour (plus its inner contours, if present) + thisShell.MakeFromExtrusionOf(sbls, tbot, ttop, color); + + // And for any plane faces, annotate the model with the entity for + // that face, so that the user can select them with the mouse. + Vector onOrig = sbls->point; + int i; + for(i = is; i < thisShell.surface.n; i++) { + SSurface *ss = &(thisShell.surface.elem[i]); + hEntity face = Entity::NO_ENTITY; + + Vector p = ss->PointAt(0, 0), + n = ss->NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(p); + + if(i == is || i == (is + 1)) { + // These are the top and bottom of the shell. + if(fabs((onOrig.Plus(ttop)).Dot(n) - d) < LENGTH_EPS) { + face = Remap(Entity::NO_ENTITY, REMAP_TOP); + ss->face = face.v; + } + if(fabs((onOrig.Plus(tbot)).Dot(n) - d) < LENGTH_EPS) { + face = Remap(Entity::NO_ENTITY, REMAP_BOTTOM); + ss->face = face.v; + } + continue; + } + + // So these are the sides + if(ss->degm != 1 || ss->degn != 1) continue; + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->group.v != opA.v) continue; + if(e->type != Entity::LINE_SEGMENT) continue; + + Vector a = SK.GetEntity(e->point[0])->PointGetNum(), + b = SK.GetEntity(e->point[1])->PointGetNum(); + a = a.Plus(ttop); + b = b.Plus(ttop); + // Could get taken backwards, so check all cases. + if((a.Equals(ss->ctrl[0][0]) && b.Equals(ss->ctrl[1][0])) || + (b.Equals(ss->ctrl[0][0]) && a.Equals(ss->ctrl[1][0])) || + (a.Equals(ss->ctrl[0][1]) && b.Equals(ss->ctrl[1][1])) || + (b.Equals(ss->ctrl[0][1]) && a.Equals(ss->ctrl[1][1]))) + { + face = Remap(e->h, REMAP_LINE_TO_FACE); + ss->face = face.v; + break; + } + } + } + } + } else if(type == LATHE && haveSrc) { + Group *src = SK.GetGroup(opA); + + Vector pt = SK.GetEntity(predef.origin)->PointGetNum(), + axis = SK.GetEntity(predef.entityB)->VectorGetNum(); + axis = axis.WithMagnitude(1); + + SBezierLoopSetSet *sblss = &(src->bezierLoops); + SBezierLoopSet *sbls; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + thisShell.MakeFromRevolutionOf(sbls, pt, axis, color, this); + } + } else if(type == LINKED) { + // The imported shell or mesh are copied over, with the appropriate + // transformation applied. We also must remap the face entities. + Vector offset = { + SK.GetParam(h.param(0))->val, + SK.GetParam(h.param(1))->val, + SK.GetParam(h.param(2))->val }; + Quaternion q = { + SK.GetParam(h.param(3))->val, + SK.GetParam(h.param(4))->val, + SK.GetParam(h.param(5))->val, + SK.GetParam(h.param(6))->val }; + + thisMesh.MakeFromTransformationOf(&impMesh, offset, q, scale); + thisMesh.RemapFaces(this, 0); + + thisShell.MakeFromTransformationOf(&impShell, offset, q, scale); + thisShell.RemapFaces(this, 0); + } + + if(srcg->meshCombine != COMBINE_AS_ASSEMBLE) { + thisShell.MergeCoincidentSurfaces(); + } + + // So now we've got the mesh or shell for this group. Combine it with + // the previous group's mesh or shell with the requested Boolean, and + // we're done. + + Group *prevg = srcg->RunningMeshGroup(); + + if(prevg->runningMesh.IsEmpty() && thisMesh.IsEmpty() && !forceToMesh) { + SShell *prevs = &(prevg->runningShell); + GenerateForBoolean(prevs, &thisShell, &runningShell, + srcg->meshCombine); + + if(srcg->meshCombine != COMBINE_AS_ASSEMBLE) { + runningShell.MergeCoincidentSurfaces(); + } + + // If the Boolean failed, then we should note that in the text screen + // for this group. + booleanFailed = runningShell.booleanFailed; + if(booleanFailed != prevBooleanFailed) { + SS.ScheduleShowTW(); + } + } else { + SMesh prevm, thism; + prevm = {}; + thism = {}; + + prevm.MakeFromCopyOf(&(prevg->runningMesh)); + prevg->runningShell.TriangulateInto(&prevm); + + thism.MakeFromCopyOf(&thisMesh); + thisShell.TriangulateInto(&thism); + + SMesh outm = {}; + GenerateForBoolean(&prevm, &thism, &outm, srcg->meshCombine); + + // And make sure that the output mesh is vertex-to-vertex. + SKdNode *root = SKdNode::From(&outm); + root->SnapToMesh(&outm); + root->MakeMeshInto(&runningMesh); + + outm.Clear(); + thism.Clear(); + prevm.Clear(); + } + + displayDirty = true; +} + +void Group::GenerateDisplayItems(void) { + // This is potentially slow (since we've got to triangulate a shell, or + // to find the emphasized edges for a mesh), so we will run it only + // if its inputs have changed. + if(displayDirty) { + Group *pg = RunningMeshGroup(); + if(pg && thisMesh.IsEmpty() && thisShell.IsEmpty()) { + // We don't contribute any new solid model in this group, so our + // display items are identical to the previous group's; which means + // that we can just display those, and stop ourselves from + // recalculating for those every time we get a change in this group. + // + // Note that this can end up recursing multiple times (if multiple + // groups that contribute no solid model exist in sequence), but + // that's okay. + pg->GenerateDisplayItems(); + + displayMesh.Clear(); + displayMesh.MakeFromCopyOf(&(pg->displayMesh)); + + displayEdges.Clear(); + displayOutlines.Clear(); + if(SS.GW.showEdges) { + SEdge *se; + SEdgeList *src = &(pg->displayEdges); + for(se = src->l.First(); se; se = src->l.NextAfter(se)) { + displayEdges.l.Add(se); + } + displayOutlines.MakeFromCopyOf(&pg->displayOutlines); + } + } else { + // We do contribute new solid model, so we have to triangulate the + // shell, and edge-find the mesh. + displayMesh.Clear(); + runningShell.TriangulateInto(&displayMesh); + STriangle *t; + for(t = runningMesh.l.First(); t; t = runningMesh.l.NextAfter(t)) { + STriangle trn = *t; + Vector n = trn.Normal(); + trn.an = n; + trn.bn = n; + trn.cn = n; + displayMesh.AddTriangle(&trn); + } + + displayEdges.Clear(); + displayOutlines.Clear(); + + if(SS.GW.showEdges) { + if(runningMesh.l.n > 0) { + // Triangle mesh only; no shell or emphasized edges. + runningMesh.MakeCertainEdgesAndOutlinesInto( + &displayEdges, &displayOutlines, SKdNode::EMPHASIZED_EDGES); + } else { + displayMesh.MakeCertainEdgesAndOutlinesInto( + &displayEdges, &displayOutlines, SKdNode::SHARP_EDGES); + } + } + } + + displayDirty = false; + } +} + +Group *Group::PreviousGroup(void) { + int i; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + if(g->h.v == h.v) break; + } + if(i == 0 || i >= SK.groupOrder.n) return NULL; + return SK.GetGroup(SK.groupOrder.elem[i - 1]); +} + +Group *Group::RunningMeshGroup(void) { + if(type == TRANSLATE || type == ROTATE) { + return SK.GetGroup(opA)->RunningMeshGroup(); + } else { + return PreviousGroup(); + } +} + +bool Group::IsMeshGroup() { + switch(type) { + case Group::EXTRUDE: + case Group::LATHE: + case Group::ROTATE: + case Group::TRANSLATE: + return true; + } + return false; +} + +void Group::DrawDisplayItems(int t) { + RgbaColor specColor; + bool useSpecColor; + if(t == DRAWING_3D || t == DRAWING_WORKPLANE) { + // force the color to something dim + specColor = Style::Color(Style::DIM_SOLID); + useSpecColor = true; + } else { + useSpecColor = false; // use the model color + } + // The back faces are drawn in red; should never seem them, since we + // draw closed shells, so that's a debugging aid. + GLfloat mpb[] = { 1.0f, 0.1f, 0.1f, 1.0f }; + glMaterialfv(GL_BACK, GL_AMBIENT_AND_DIFFUSE, mpb); + + // When we fill the mesh, we need to know which triangles are selected + // or hovered, in order to draw them differently. + uint32_t mh = 0, ms1 = 0, ms2 = 0; + hEntity he = SS.GW.hover.entity; + if(he.v != 0 && SK.GetEntity(he)->IsFace()) { + mh = he.v; + } + SS.GW.GroupSelection(); + if(gs.faces > 0) ms1 = gs.face[0].v; + if(gs.faces > 1) ms2 = gs.face[1].v; + + if(SS.GW.showShaded || SS.GW.showHdnLines) { + if(SS.drawBackFaces && !displayMesh.isTransparent) { + // For debugging, draw the backs of the triangles in red, so that we + // notice when a shell is open + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); + } else { + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); + } + + // Draw the shaded solid into the depth buffer for hidden line removal, + // and if we're actually going to display it, to the color buffer too. + glEnable(GL_LIGHTING); + if(!SS.GW.showShaded) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + ssglFillMesh(useSpecColor, specColor, &displayMesh, mh, ms1, ms2); + if(!SS.GW.showShaded) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + glDisable(GL_LIGHTING); + } + + if(SS.GW.showEdges) { + Vector projDir = SS.GW.projRight.Cross(SS.GW.projUp); + + glDepthMask(GL_FALSE); + if(SS.GW.showHdnLines) { + ssglDepthRangeOffset(0); + glDepthFunc(GL_GREATER); + ssglDrawEdges(&displayEdges, false, { Style::HIDDEN_EDGE }); + ssglDrawOutlines(&displayOutlines, projDir, { Style::HIDDEN_EDGE }); + glDepthFunc(GL_LEQUAL); + } + ssglDepthRangeOffset(2); + ssglDrawEdges(&displayEdges, false, { Style::SOLID_EDGE }); + if(SS.GW.showOutlines) { + ssglDrawOutlines(&displayOutlines, projDir, { Style::OUTLINE }); + } else { + ssglDrawOutlines(&displayOutlines, projDir, { Style::SOLID_EDGE }); + } + glDepthMask(GL_TRUE); + } + + if(SS.GW.showMesh) ssglDebugMesh(&displayMesh); +} + +void Group::Draw(void) { + // Everything here gets drawn whether or not the group is hidden; we + // can control this stuff independently, with show/hide solids, edges, + // mesh, etc. + + GenerateDisplayItems(); + DrawDisplayItems(type); + + if(!SS.checkClosedContour) return; + + // And finally show the polygons too, and any errors if it's not possible + // to assemble the lines into closed polygons. + if(polyError.how == POLY_NOT_CLOSED) { + // Report this error only in sketch-in-workplane groups; otherwise + // it's just a nuisance. + if(type == DRAWING_WORKPLANE) { + glDisable(GL_DEPTH_TEST); + ssglColorRGBa(Style::Color(Style::DRAW_ERROR), 0.2); + ssglLineWidth (Style::Width(Style::DRAW_ERROR)); + glBegin(GL_LINES); + ssglVertex3v(polyError.notClosedAt.a); + ssglVertex3v(polyError.notClosedAt.b); + glEnd(); + ssglColorRGB(Style::Color(Style::DRAW_ERROR)); + ssglWriteText("not closed contour, or not all same style!", + Style::DefaultTextHeight(), + polyError.notClosedAt.b, SS.GW.projRight, SS.GW.projUp, + NULL, NULL); + glEnable(GL_DEPTH_TEST); + } + } else if(polyError.how == POLY_NOT_COPLANAR || + polyError.how == POLY_SELF_INTERSECTING || + polyError.how == POLY_ZERO_LEN_EDGE) + { + // These errors occur at points, not lines + if(type == DRAWING_WORKPLANE) { + glDisable(GL_DEPTH_TEST); + ssglColorRGB(Style::Color(Style::DRAW_ERROR)); + const char *msg; + if(polyError.how == POLY_NOT_COPLANAR) { + msg = "points not all coplanar!"; + } else if(polyError.how == POLY_SELF_INTERSECTING) { + msg = "contour is self-intersecting!"; + } else { + msg = "zero-length edge!"; + } + ssglWriteText(msg, Style::DefaultTextHeight(), + polyError.errorPointAt, SS.GW.projRight, SS.GW.projUp, + NULL, NULL); + glEnable(GL_DEPTH_TEST); + } + } else { + // The contours will get filled in DrawFilledPaths. + } +} + +void Group::FillLoopSetAsPolygon(SBezierLoopSet *sbls) { + SPolygon sp = {}; + sbls->MakePwlInto(&sp); + ssglDepthRangeOffset(1); + ssglFillPolygon(&sp); + ssglDepthRangeOffset(0); + sp.Clear(); +} + +void Group::DrawFilledPaths(void) { + SBezierLoopSet *sbls; + SBezierLoopSetSet *sblss = &bezierLoops; + for(sbls = sblss->l.First(); sbls; sbls = sblss->l.NextAfter(sbls)) { + if(sbls->l.n == 0 || sbls->l.elem[0].l.n == 0) continue; + // In an assembled loop, all the styles should be the same; so doesn't + // matter which one we grab. + SBezier *sb = &(sbls->l.elem[0].l.elem[0]); + hStyle hs = { (uint32_t)sb->auxA }; + Style *s = Style::Get(hs); + if(s->filled) { + // This is a filled loop, where the user specified a fill color. + ssglColorRGBa(s->fillColor, 1); + FillLoopSetAsPolygon(sbls); + } else { + if(h.v == SS.GW.activeGroup.v && SS.checkClosedContour && + polyError.how == POLY_GOOD) + { + // If this is the active group, and we are supposed to check + // for closed contours, and we do indeed have a closed and + // non-intersecting contour, then fill it dimly. + ssglColorRGBa(Style::Color(Style::CONTOUR_FILL), 0.5); + ssglDepthRangeOffset(1); + FillLoopSetAsPolygon(sbls); + ssglDepthRangeOffset(0); + } + } + } +} + diff --git a/src/gtk/gtkmain.cpp b/src/gtk/gtkmain.cpp new file mode 100644 index 0000000..386e970 --- /dev/null +++ b/src/gtk/gtkmain.cpp @@ -0,0 +1,1611 @@ +//----------------------------------------------------------------------------- +// Our main() function, and GTK3-specific stuff to set up our windows and +// otherwise handle our interface to the operating system. Everything +// outside gtk/... should be standard C++ and OpenGL. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if HAVE_GTK3 +#include +#else +#include +#endif + +#include +#include +#include +#include + +#include + +#include "solvespace.h" +#include "config.h" +#include "../unix/gloffscreen.h" + +#ifdef HAVE_SPACEWARE +#include +#endif + +namespace SolveSpace { +/* Settings */ + +/* Why not just use GSettings? Two reasons. It doesn't allow to easily see + whether the setting had the default value, and it requires to install + a schema globally. */ +static json_object *settings = NULL; + +static std::string CnfPrepare() { + // Refer to http://standards.freedesktop.org/basedir-spec/latest/ + + std::string dir; + if(getenv("XDG_CONFIG_HOME")) { + dir = std::string(getenv("XDG_CONFIG_HOME")) + "/solvespace"; + } else if(getenv("HOME")) { + dir = std::string(getenv("HOME")) + "/.config/solvespace"; + } else { + dbp("neither XDG_CONFIG_HOME nor HOME are set"); + return ""; + } + + struct stat st; + if(stat(dir.c_str(), &st)) { + if(errno == ENOENT) { + if(mkdir(dir.c_str(), 0777)) { + dbp("cannot mkdir %s: %s", dir.c_str(), strerror(errno)); + return ""; + } + } else { + dbp("cannot stat %s: %s", dir.c_str(), strerror(errno)); + return ""; + } + } else if(!S_ISDIR(st.st_mode)) { + dbp("%s is not a directory", dir.c_str()); + return ""; + } + + return dir + "/settings.json"; +} + +static void CnfLoad() { + std::string path = CnfPrepare(); + if(path.empty()) + return; + + if(settings) + json_object_put(settings); // deallocate + + settings = json_object_from_file(path.c_str()); + if(!settings) { + if(errno != ENOENT) + dbp("cannot load settings: %s", strerror(errno)); + + settings = json_object_new_object(); + } +} + +static void CnfSave() { + std::string path = CnfPrepare(); + if(path.empty()) + return; + + /* json-c <0.12 has the first argument non-const here */ + if(json_object_to_file_ext((char*) path.c_str(), settings, JSON_C_TO_STRING_PRETTY)) + dbp("cannot save settings: %s", strerror(errno)); +} + +void CnfFreezeInt(uint32_t val, const std::string &key) { + struct json_object *jval = json_object_new_int(val); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +uint32_t CnfThawInt(uint32_t val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_int(jval); + else return val; +} + +void CnfFreezeFloat(float val, const std::string &key) { + struct json_object *jval = json_object_new_double(val); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +float CnfThawFloat(float val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_double(jval); + else return val; +} + +void CnfFreezeString(const std::string &val, const std::string &key) { + struct json_object *jval = json_object_new_string(val.c_str()); + json_object_object_add(settings, key.c_str(), jval); + CnfSave(); +} + +std::string CnfThawString(const std::string &val, const std::string &key) { + struct json_object *jval; + if(json_object_object_get_ex(settings, key.c_str(), &jval)) + return json_object_get_string(jval); + return val; +} + +static void CnfFreezeWindowPos(Gtk::Window *win, const std::string &key) { + int x, y, w, h; + win->get_position(x, y); + win->get_size(w, h); + + CnfFreezeInt(x, key + "_left"); + CnfFreezeInt(y, key + "_top"); + CnfFreezeInt(w, key + "_width"); + CnfFreezeInt(h, key + "_height"); +} + +static void CnfThawWindowPos(Gtk::Window *win, const std::string &key) { + int x, y, w, h; + win->get_position(x, y); + win->get_size(w, h); + + x = CnfThawInt(x, key + "_left"); + y = CnfThawInt(y, key + "_top"); + w = CnfThawInt(w, key + "_width"); + h = CnfThawInt(h, key + "_height"); + + win->move(x, y); + win->resize(w, h); +} + +/* Timers */ + +int64_t GetMilliseconds(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return 1000 * (uint64_t) ts.tv_sec + ts.tv_nsec / 1000000; +} + +static bool TimerCallback() { + SS.GW.TimerCallback(); + SS.TW.TimerCallback(); + return false; +} + +void SetTimerFor(int milliseconds) { + Glib::signal_timeout().connect(&TimerCallback, milliseconds); +} + +static bool AutosaveTimerCallback() { + SS.Autosave(); + return false; +} + +void SetAutosaveTimerFor(int minutes) { + Glib::signal_timeout().connect(&AutosaveTimerCallback, minutes * 60 * 1000); +} + +static bool LaterCallback() { + SS.DoLater(); + return false; +} + +void ScheduleLater() { + Glib::signal_idle().connect(&LaterCallback); +} + +/* GL wrapper */ + +#define GL_CHECK() \ + do { \ + int err = (int)glGetError(); \ + if(err) dbp("%s:%d: glGetError() == 0x%X %s", \ + __FILE__, __LINE__, err, gluErrorString(err)); \ + } while (0) + +class GlWidget : public Gtk::DrawingArea { +public: + GlWidget() : _offscreen(NULL) { + _xdisplay = gdk_x11_get_default_xdisplay(); + + int glxmajor, glxminor; + if(!glXQueryVersion(_xdisplay, &glxmajor, &glxminor)) { + dbp("OpenGL is not supported"); + oops(); + } + + if(glxmajor < 1 || (glxmajor == 1 && glxminor < 3)) { + dbp("GLX version %d.%d is too old; 1.3 required", glxmajor, glxminor); + oops(); + } + + static int fbconfig_attrs[] = { + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 24, + None + }; + int fbconfig_num = 0; + GLXFBConfig *fbconfigs = glXChooseFBConfig(_xdisplay, DefaultScreen(_xdisplay), + fbconfig_attrs, &fbconfig_num); + if(!fbconfigs || fbconfig_num == 0) + oops(); + + /* prefer FBConfigs with depth of 32; + * Mesa software rasterizer explodes with a BadMatch without this; + * without this, Intel on Mesa flickers horribly for some reason. + this does not seem to affect other rasterizers (ie NVidia). + + see this Mesa bug: + http://lists.freedesktop.org/archives/mesa-dev/2015-January/074693.html */ + GLXFBConfig fbconfig = fbconfigs[0]; + for(int i = 0; i < fbconfig_num; i++) { + XVisualInfo *visual_info = glXGetVisualFromFBConfig(_xdisplay, fbconfigs[i]); + /* some GL visuals, notably on Chromium GL, do not have an associated + X visual; this is not an obstacle as we always render offscreen. */ + if(!visual_info) continue; + int depth = visual_info->depth; + XFree(visual_info); + + if(depth == 32) { + fbconfig = fbconfigs[i]; + break; + } + } + + _glcontext = glXCreateNewContext(_xdisplay, + fbconfig, GLX_RGBA_TYPE, 0, True); + if(!_glcontext) { + dbp("cannot create OpenGL context"); + oops(); + } + + XFree(fbconfigs); + + /* create a dummy X window to create a rendering context against. + we could use a Pbuffer, but some implementations (Chromium GL) + don't support these. we could use an existing window, but + some implementations (Chromium GL... do you see a pattern?) + do really strange things, i.e. draw a black rectangle on + the very front of the desktop if you do this. */ + _xwindow = XCreateSimpleWindow(_xdisplay, + XRootWindow(_xdisplay, gdk_x11_get_default_screen()), + /*x*/ 0, /*y*/ 0, /*width*/ 1, /*height*/ 1, + /*border_width*/ 0, /*border*/ 0, /*background*/ 0); + } + + ~GlWidget() { + glXMakeCurrent(_xdisplay, None, NULL); + + XDestroyWindow(_xdisplay, _xwindow); + + delete _offscreen; + + glXDestroyContext(_xdisplay, _glcontext); + } + +protected: + /* Draw on a GLX framebuffer object, then read pixels out and draw them on + the Cairo context. Slower, but you get to overlay nice widgets. */ + virtual bool on_draw(const Cairo::RefPtr &cr) { + if(!glXMakeCurrent(_xdisplay, _xwindow, _glcontext)) + oops(); + + if(!_offscreen) + _offscreen = new GLOffscreen; + + Gdk::Rectangle allocation = get_allocation(); + if(!_offscreen->begin(allocation.get_width(), allocation.get_height())) + oops(); + + on_gl_draw(); + glFlush(); + GL_CHECK(); + + Cairo::RefPtr surface = Cairo::ImageSurface::create( + _offscreen->end(), Cairo::FORMAT_RGB24, + allocation.get_width(), allocation.get_height(), allocation.get_width() * 4); + cr->set_source(surface, 0, 0); + cr->paint(); + surface->finish(); + + return true; + } + +#ifdef HAVE_GTK2 + virtual bool on_expose_event(GdkEventExpose *) { + return on_draw(get_window()->create_cairo_context()); + } +#endif + + virtual void on_gl_draw() = 0; + +private: + Display *_xdisplay; + GLXContext _glcontext; + GLOffscreen *_offscreen; + ::Window _xwindow; +}; + +/* Editor overlay */ + +class EditorOverlay : public Gtk::Fixed { +public: + EditorOverlay(Gtk::Widget &underlay) : _underlay(underlay) { + set_size_request(0, 0); + + add(_underlay); + + _entry.set_no_show_all(true); + _entry.set_has_frame(false); + add(_entry); + + _entry.signal_activate(). + connect(sigc::mem_fun(this, &EditorOverlay::on_activate)); + } + + void start_editing(int x, int y, int font_height, bool is_monospace, int minWidthChars, + const std::string &val) { + Pango::FontDescription font_desc; + font_desc.set_family(is_monospace ? "monospace" : "normal"); + font_desc.set_absolute_size(font_height * Pango::SCALE); + +#ifdef HAVE_GTK3 + /* For some reason override_font doesn't take screen DPI into + account on GTK3 when working with font descriptors specified + in absolute sizes; modify_font does on GTK2. */ + Pango::FontDescription override_font_desc(font_desc); + double dpi = get_screen()->get_resolution(); + override_font_desc.set_size(font_height * 72.0 / dpi * Pango::SCALE); + _entry.override_font(override_font_desc); +#else + _entry.modify_font(font_desc); +#endif + + /* y coordinate denotes baseline */ + Pango::FontMetrics font_metrics = get_pango_context()->get_metrics(font_desc); + y -= font_metrics.get_ascent() / Pango::SCALE; + + Glib::RefPtr layout = Pango::Layout::create(get_pango_context()); + layout->set_font_description(font_desc); + layout->set_text(val + " "); /* avoid scrolling */ + int width = layout->get_logical_extents().get_width(); + +#ifdef HAVE_GTK3 + Gtk::Border border = _entry.get_style_context()->get_padding(); + move(_entry, x - border.get_left(), y - border.get_top()); + _entry.set_width_chars(minWidthChars); + _entry.set_size_request(width / Pango::SCALE, -1); +#else + /* We need _gtk_entry_effective_inner_border, but it's not + in the public API, so emulate its logic. */ + Gtk::Border border = { 2, 2, 2, 2 }, *style_border; + gtk_widget_style_get(GTK_WIDGET(_entry.gobj()), "inner-border", + &style_border, NULL); + if(style_border) border = *style_border; + move(_entry, x - border.left, y - border.top); + /* This is what set_width_chars does. */ + int minWidth = minWidthChars * std::max(font_metrics.get_approximate_digit_width(), + font_metrics.get_approximate_char_width()); + _entry.set_size_request(std::max(width, minWidth) / Pango::SCALE, -1); +#endif + + _entry.set_text(val); + if(!_entry.is_visible()) { + _entry.show(); + _entry.grab_focus(); + _entry.add_modal_grab(); + } + } + + void stop_editing() { + if(_entry.is_visible()) + _entry.remove_modal_grab(); + _entry.hide(); + } + + bool is_editing() const { + return _entry.is_visible(); + } + + sigc::signal signal_editing_done() { + return _signal_editing_done; + } + + Gtk::Entry &get_entry() { + return _entry; + } + +protected: + virtual bool on_key_press_event(GdkEventKey *event) { + if(event->keyval == GDK_KEY_Escape) { + stop_editing(); + return true; + } + + return false; + } + + virtual void on_size_allocate(Gtk::Allocation& allocation) { + Gtk::Fixed::on_size_allocate(allocation); + + _underlay.size_allocate(allocation); + } + + virtual void on_activate() { + _signal_editing_done(_entry.get_text()); + } + +private: + Gtk::Widget &_underlay; + Gtk::Entry _entry; + sigc::signal _signal_editing_done; +}; + +/* Graphics window */ + +int DeltaYOfScrollEvent(GdkEventScroll *event) { +#ifdef HAVE_GTK3 + int delta_y = event->delta_y; +#else + int delta_y = 0; +#endif + if(delta_y == 0) { + switch(event->direction) { + case GDK_SCROLL_UP: + delta_y = -1; + break; + + case GDK_SCROLL_DOWN: + delta_y = 1; + break; + + default: + /* do nothing */ + return false; + } + } + + return delta_y; +} + +class GraphicsWidget : public GlWidget { +public: + GraphicsWidget() { + set_events(Gdk::POINTER_MOTION_MASK | + Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::BUTTON_MOTION_MASK | + Gdk::SCROLL_MASK | + Gdk::LEAVE_NOTIFY_MASK); + set_double_buffered(true); + } + +protected: + virtual bool on_configure_event(GdkEventConfigure *event) { + _w = event->width; + _h = event->height; + + return GlWidget::on_configure_event(event);; + } + + virtual void on_gl_draw() { + SS.GW.Paint(); + } + + virtual bool on_motion_notify_event(GdkEventMotion *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + SS.GW.MouseMoved(x, y, + event->state & GDK_BUTTON1_MASK, + event->state & GDK_BUTTON2_MASK, + event->state & GDK_BUTTON3_MASK, + event->state & GDK_SHIFT_MASK, + event->state & GDK_CONTROL_MASK); + + return true; + } + + virtual bool on_button_press_event(GdkEventButton *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + switch(event->button) { + case 1: + if(event->type == GDK_BUTTON_PRESS) + SS.GW.MouseLeftDown(x, y); + else if(event->type == GDK_2BUTTON_PRESS) + SS.GW.MouseLeftDoubleClick(x, y); + break; + + case 2: + case 3: + SS.GW.MouseMiddleOrRightDown(x, y); + break; + } + + return true; + } + + virtual bool on_button_release_event(GdkEventButton *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + switch(event->button) { + case 1: + SS.GW.MouseLeftUp(x, y); + break; + + case 3: + SS.GW.MouseRightUp(x, y); + break; + } + + return true; + } + + virtual bool on_scroll_event(GdkEventScroll *event) { + int x, y; + ij_to_xy(event->x, event->y, x, y); + + SS.GW.MouseScroll(x, y, -DeltaYOfScrollEvent(event)); + + return true; + } + + virtual bool on_leave_notify_event (GdkEventCrossing *) { + SS.GW.MouseLeave(); + + return true; + } + +private: + int _w, _h; + void ij_to_xy(int i, int j, int &x, int &y) { + // Convert to xy (vs. ij) style coordinates, + // with (0, 0) at center + x = i - _w / 2; + y = _h / 2 - j; + } +}; + +class GraphicsWindowGtk : public Gtk::Window { +public: + GraphicsWindowGtk() : _overlay(_widget), _is_fullscreen(false) { + set_default_size(900, 600); + + _box.pack_start(_menubar, false, true); + _box.pack_start(_overlay, true, true); + + add(_box); + + _overlay.signal_editing_done(). + connect(sigc::mem_fun(this, &GraphicsWindowGtk::on_editing_done)); + } + + GraphicsWidget &get_widget() { + return _widget; + } + + EditorOverlay &get_overlay() { + return _overlay; + } + + Gtk::MenuBar &get_menubar() { + return _menubar; + } + + bool is_fullscreen() const { + return _is_fullscreen; + } + + bool emulate_key_press(GdkEventKey *event) { + return on_key_press_event(event); + } + +protected: + virtual void on_show() { + Gtk::Window::on_show(); + + CnfThawWindowPos(this, "GraphicsWindow"); + } + + virtual void on_hide() { + CnfFreezeWindowPos(this, "GraphicsWindow"); + + Gtk::Window::on_hide(); + } + + virtual bool on_delete_event(GdkEventAny *) { + if(!SS.OkayToStartNewFile()) return true; + SS.Exit(); + + return true; + } + + virtual bool on_window_state_event(GdkEventWindowState *event) { + _is_fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN; + + /* The event arrives too late for the caller of ToggleFullScreen + to notice state change; and it's possible that the WM will + refuse our request, so we can't just toggle the saved state */ + SS.GW.EnsureValidActives(); + + return Gtk::Window::on_window_state_event(event); + } + + virtual bool on_key_press_event(GdkEventKey *event) { + int chr; + + switch(event->keyval) { + case GDK_KEY_Escape: + chr = GraphicsWindow::ESCAPE_KEY; + break; + + case GDK_KEY_Delete: + chr = GraphicsWindow::DELETE_KEY; + break; + + case GDK_KEY_Tab: + chr = '\t'; + break; + + case GDK_KEY_BackSpace: + case GDK_KEY_Back: + chr = '\b'; + break; + + default: + if(event->keyval >= GDK_KEY_F1 && event->keyval <= GDK_KEY_F12) { + chr = GraphicsWindow::FUNCTION_KEY_BASE + (event->keyval - GDK_KEY_F1); + } else { + chr = gdk_keyval_to_unicode(event->keyval); + } + } + + if(event->state & GDK_SHIFT_MASK){ + chr |= GraphicsWindow::SHIFT_MASK; + } + if(event->state & GDK_CONTROL_MASK) { + chr |= GraphicsWindow::CTRL_MASK; + } + + if(chr && SS.GW.KeyDown(chr)) { + return true; + } + + if(chr == '\t') { + // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=123994. + GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND); + return true; + } + + return Gtk::Window::on_key_press_event(event); + } + + virtual void on_editing_done(Glib::ustring value) { + SS.GW.EditControlDone(value.c_str()); + } + +private: + GraphicsWidget _widget; + EditorOverlay _overlay; + Gtk::MenuBar _menubar; + Gtk::VBox _box; + + bool _is_fullscreen; +}; + +std::unique_ptr GW; + +void GetGraphicsWindowSize(int *w, int *h) { + Gdk::Rectangle allocation = GW->get_widget().get_allocation(); + *w = allocation.get_width(); + *h = allocation.get_height(); +} + +void InvalidateGraphics(void) { + GW->get_widget().queue_draw(); +} + +void PaintGraphics(void) { + GW->get_widget().queue_draw(); + /* Process animation */ + Glib::MainContext::get_default()->iteration(false); +} + +void SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + GW->set_title("SolveSpace - " + filename); + } else { + GW->set_title("SolveSpace - (not yet saved)"); + } +} + +void ToggleFullScreen(void) { + if(GW->is_fullscreen()) + GW->unfullscreen(); + else + GW->fullscreen(); +} + +bool FullScreenIsActive(void) { + return GW->is_fullscreen(); +} + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &val) { + Gdk::Rectangle rect = GW->get_widget().get_allocation(); + + // Convert to ij (vs. xy) style coordinates, + // and compensate for the input widget height due to inverse coord + int i, j; + i = x + rect.get_width() / 2; + j = -y + rect.get_height() / 2; + + GW->get_overlay().start_editing(i, j, fontHeight, /*is_monospace=*/false, minWidthChars, val); +} + +void HideGraphicsEditControl(void) { + GW->get_overlay().stop_editing(); +} + +bool GraphicsEditControlIsVisible(void) { + return GW->get_overlay().is_editing(); +} + +/* TODO: removing menubar breaks accelerators. */ +void ToggleMenuBar(void) { + GW->get_menubar().set_visible(!GW->get_menubar().is_visible()); +} + +bool MenuBarIsVisible(void) { + return GW->get_menubar().is_visible(); +} + +/* Context menus */ + +class ContextMenuItem : public Gtk::MenuItem { +public: + static int choice; + + ContextMenuItem(const Glib::ustring &label, int id, bool mnemonic=false) : + Gtk::MenuItem(label, mnemonic), _id(id) { + } + +protected: + virtual void on_activate() { + Gtk::MenuItem::on_activate(); + + if(has_submenu()) + return; + + choice = _id; + } + + /* Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=695488. + This is used in addition to on_activate() to catch mouse events. + Without on_activate(), it would be impossible to select a menu item + via keyboard. + This selects the item twice in some cases, but we are idempotent. + */ + virtual bool on_button_press_event(GdkEventButton *event) { + if(event->button == 1 && event->type == GDK_BUTTON_PRESS) { + on_activate(); + return true; + } + + return Gtk::MenuItem::on_button_press_event(event); + } + +private: + int _id; +}; + +int ContextMenuItem::choice = 0; + +static Gtk::Menu *context_menu = NULL, *context_submenu = NULL; + +void AddContextMenuItem(const char *label, int id) { + Gtk::MenuItem *menu_item; + if(label) + menu_item = new ContextMenuItem(label, id); + else + menu_item = new Gtk::SeparatorMenuItem(); + + if(id == CONTEXT_SUBMENU) { + menu_item->set_submenu(*context_submenu); + context_submenu = NULL; + } + + if(context_submenu) { + context_submenu->append(*menu_item); + } else { + if(!context_menu) + context_menu = new Gtk::Menu; + + context_menu->append(*menu_item); + } +} + +void CreateContextSubmenu(void) { + if(context_submenu) oops(); + + context_submenu = new Gtk::Menu; +} + +int ShowContextMenu(void) { + if(!context_menu) + return -1; + + Glib::RefPtr loop = Glib::MainLoop::create(); + context_menu->signal_deactivate(). + connect(sigc::mem_fun(loop.operator->(), &Glib::MainLoop::quit)); + + ContextMenuItem::choice = -1; + + context_menu->show_all(); + context_menu->popup(3, GDK_CURRENT_TIME); + + loop->run(); + + delete context_menu; + context_menu = NULL; + + return ContextMenuItem::choice; +} + +/* Main menu */ + +template class MainMenuItem : public MenuItem { +public: + MainMenuItem(const GraphicsWindow::MenuEntry &entry) : + MenuItem(), _entry(entry), _synthetic(false) { + Glib::ustring label(_entry.label); + for(size_t i = 0; i < label.length(); i++) { + if(label[i] == '&') + label.replace(i, 1, "_"); + } + + guint accel_key = 0; + Gdk::ModifierType accel_mods = Gdk::ModifierType(); + switch(_entry.accel) { + case GraphicsWindow::DELETE_KEY: + accel_key = GDK_KEY_Delete; + break; + + case GraphicsWindow::ESCAPE_KEY: + accel_key = GDK_KEY_Escape; + break; + + case '\t': + accel_key = GDK_KEY_Tab; + break; + + default: + accel_key = _entry.accel & ~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK); + if(accel_key > GraphicsWindow::FUNCTION_KEY_BASE && + accel_key <= GraphicsWindow::FUNCTION_KEY_BASE + 12) + accel_key = GDK_KEY_F1 + (accel_key - GraphicsWindow::FUNCTION_KEY_BASE - 1); + else + accel_key = gdk_unicode_to_keyval(accel_key); + + if(_entry.accel & GraphicsWindow::SHIFT_MASK) + accel_mods |= Gdk::SHIFT_MASK; + if(_entry.accel & GraphicsWindow::CTRL_MASK) + accel_mods |= Gdk::CONTROL_MASK; + } + + MenuItem::set_label(label); + MenuItem::set_use_underline(true); + if(!(accel_key & 0x01000000)) + MenuItem::set_accel_key(Gtk::AccelKey(accel_key, accel_mods)); + } + + void set_active(bool checked) { + if(MenuItem::get_active() == checked) + return; + + _synthetic = true; + MenuItem::set_active(checked); + } + +protected: + virtual void on_activate() { + MenuItem::on_activate(); + + if(_synthetic) + _synthetic = false; + else if(!MenuItem::has_submenu() && _entry.fn) + _entry.fn(_entry.id); + } + +private: + const GraphicsWindow::MenuEntry &_entry; + bool _synthetic; +}; + +static std::map main_menu_items; + +static void InitMainMenu(Gtk::MenuShell *menu_shell) { + Gtk::MenuItem *menu_item = NULL; + Gtk::MenuShell *levels[5] = {menu_shell, 0}; + + const GraphicsWindow::MenuEntry *entry = &GraphicsWindow::menu[0]; + int current_level = 0; + while(entry->level >= 0) { + if(entry->level > current_level) { + Gtk::Menu *menu = new Gtk::Menu; + menu_item->set_submenu(*menu); + + if((unsigned)entry->level >= sizeof(levels) / sizeof(levels[0])) + oops(); + + levels[entry->level] = menu; + } + + current_level = entry->level; + + if(entry->label) { + switch(entry->kind) { + case GraphicsWindow::MENU_ITEM_NORMAL: + menu_item = new MainMenuItem(*entry); + break; + + case GraphicsWindow::MENU_ITEM_CHECK: + menu_item = new MainMenuItem(*entry); + break; + + case GraphicsWindow::MENU_ITEM_RADIO: + MainMenuItem *radio_item = + new MainMenuItem(*entry); + radio_item->set_draw_as_radio(true); + menu_item = radio_item; + break; + } + } else { + menu_item = new Gtk::SeparatorMenuItem(); + } + + levels[entry->level]->append(*menu_item); + + main_menu_items[entry->id] = menu_item; + + ++entry; + } +} + +void EnableMenuById(int id, bool enabled) { + main_menu_items[id]->set_sensitive(enabled); +} + +void CheckMenuById(int id, bool checked) { + ((MainMenuItem*)main_menu_items[id])->set_active(checked); +} + +void RadioMenuById(int id, bool selected) { + SolveSpace::CheckMenuById(id, selected); +} + +class RecentMenuItem : public Gtk::MenuItem { +public: + RecentMenuItem(const Glib::ustring& label, int id) : + MenuItem(label), _id(id) { + } + +protected: + virtual void on_activate() { + if(_id >= RECENT_OPEN && _id < (RECENT_OPEN + MAX_RECENT)) + SolveSpaceUI::MenuFile(_id); + else if(_id >= RECENT_LINK && _id < (RECENT_LINK + MAX_RECENT)) + Group::MenuGroup(_id); + } + +private: + int _id; +}; + +static void RefreshRecentMenu(int id, int base) { + Gtk::MenuItem *recent = static_cast(main_menu_items[id]); + recent->unset_submenu(); + + Gtk::Menu *menu = new Gtk::Menu; + recent->set_submenu(*menu); + + if(std::string(RecentFile[0]).empty()) { + Gtk::MenuItem *placeholder = new Gtk::MenuItem("(no recent files)"); + placeholder->set_sensitive(false); + menu->append(*placeholder); + } else { + for(int i = 0; i < MAX_RECENT; i++) { + if(std::string(RecentFile[i]).empty()) + break; + + RecentMenuItem *item = new RecentMenuItem(RecentFile[i], base + i); + menu->append(*item); + } + } + + menu->show_all(); +} + +void RefreshRecentMenus(void) { + RefreshRecentMenu(GraphicsWindow::MNU_OPEN_RECENT, RECENT_OPEN); + RefreshRecentMenu(GraphicsWindow::MNU_GROUP_RECENT, RECENT_LINK); +} + +/* Save/load */ + +static std::string ConvertFilters(std::string active, const FileFilter ssFilters[], + Gtk::FileChooser *chooser) { + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { +#ifdef HAVE_GTK3 + Glib::RefPtr filter = Gtk::FileFilter::create(); +#else + Gtk::FileFilter *filter = new Gtk::FileFilter; +#endif + filter->set_name(ssFilter->name); + + bool is_active = false; + std::string desc = ""; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + std::string pattern = "*." + std::string(*ssPattern); + filter->add_pattern(pattern); + filter->add_pattern(Glib::ustring(pattern).uppercase()); + if(active == "") + active = pattern.substr(2); + if("*." + active == pattern) + is_active = true; + if(desc == "") + desc = pattern; + else + desc += ", " + pattern; + } + filter->set_name(filter->get_name() + " (" + desc + ")"); + +#ifdef HAVE_GTK3 + chooser->add_filter(filter); + if(is_active) + chooser->set_filter(filter); +#else + chooser->add_filter(*filter); + if(is_active) + chooser->set_filter(*filter); +#endif + } + + return active; +} + +bool GetOpenFile(std::string *filename, const std::string &activeOrEmpty, + const FileFilter filters[]) { + Gtk::FileChooserDialog chooser(*GW, "SolveSpace - Open File"); + chooser.set_filename(*filename); + chooser.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + chooser.add_button("_Open", Gtk::RESPONSE_OK); + chooser.set_current_folder(CnfThawString("", "FileChooserPath")); + + ConvertFilters(activeOrEmpty, filters, &chooser); + + if(chooser.run() == Gtk::RESPONSE_OK) { + CnfFreezeString(chooser.get_current_folder(), "FileChooserPath"); + *filename = chooser.get_filename(); + return true; + } else { + return false; + } +} + +/* Glib::path_get_basename got /removed/ in 3.0?! Come on */ +static std::string Basename(std::string filename) { + int slash = filename.rfind('/'); + if(slash >= 0) + return filename.substr(slash + 1, filename.length()); + return ""; +} + +static void ChooserFilterChanged(Gtk::FileChooserDialog *chooser) +{ + /* Extract the pattern from the filter. GtkFileFilter doesn't provide + any way to list the patterns, so we extract it from the filter name. + Gross. */ + std::string filter_name = chooser->get_filter()->get_name(); + int lparen = filter_name.rfind('(') + 1; + int rdelim = filter_name.find(',', lparen); + if(rdelim < 0) + rdelim = filter_name.find(')', lparen); + if(lparen < 0 || rdelim < 0) + oops(); + + std::string extension = filter_name.substr(lparen, rdelim - lparen); + if(extension == "*") + return; + + if(extension.length() > 2 && extension.substr(0, 2) == "*.") + extension = extension.substr(2, extension.length() - 2); + + std::string basename = Basename(chooser->get_filename()); + int dot = basename.rfind('.'); + if(dot >= 0) { + basename.replace(dot + 1, basename.length() - dot - 1, extension); + chooser->set_current_name(basename); + } else { + chooser->set_current_name(basename + "." + extension); + } +} + +bool GetSaveFile(std::string *filename, const std::string &activeOrEmpty, + const FileFilter filters[]) { + Gtk::FileChooserDialog chooser(*GW, "SolveSpace - Save File", + Gtk::FILE_CHOOSER_ACTION_SAVE); + chooser.set_do_overwrite_confirmation(true); + chooser.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + chooser.add_button("_Save", Gtk::RESPONSE_OK); + + std::string active = ConvertFilters(activeOrEmpty, filters, &chooser); + + chooser.set_current_folder(CnfThawString("", "FileChooserPath")); + chooser.set_current_name(std::string("untitled.") + active); + + /* Gtk's dialog doesn't change the extension when you change the filter, + and makes it extremely hard to do so. Gtk is garbage. */ + chooser.property_filter().signal_changed(). + connect(sigc::bind(sigc::ptr_fun(&ChooserFilterChanged), &chooser)); + + if(chooser.run() == Gtk::RESPONSE_OK) { + CnfFreezeString(chooser.get_current_folder(), "FileChooserPath"); + *filename = chooser.get_filename(); + return true; + } else { + return false; + } +} + +DialogChoice SaveFileYesNoCancel(void) { + Glib::ustring message = + "The file has changed since it was last saved.\n" + "Do you want to save the changes?"; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Modified File"); + dialog.add_button("_Save", Gtk::RESPONSE_YES); + dialog.add_button("Do_n't Save", Gtk::RESPONSE_NO); + dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + return DIALOG_NO; + + case Gtk::RESPONSE_CANCEL: + default: + return DIALOG_CANCEL; + } +} + +DialogChoice LoadAutosaveYesNo(void) { + Glib::ustring message = + "An autosave file is availible for this project.\n" + "Do you want to load the autosave file instead?"; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Autosave Available"); + dialog.add_button("_Load autosave", Gtk::RESPONSE_YES); + dialog.add_button("Do_n't Load", Gtk::RESPONSE_NO); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + default: + return DIALOG_NO; + } +} + +DialogChoice LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel) { + Glib::ustring message = + "The linked file " + filename + " is not present.\n" + "Do you want to locate it manually?\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."; + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, Gtk::MESSAGE_QUESTION, + Gtk::BUTTONS_NONE, /*is_modal*/ true); + dialog.set_title("SolveSpace - Missing File"); + dialog.add_button("_Yes", Gtk::RESPONSE_YES); + dialog.add_button("_No", Gtk::RESPONSE_NO); + if(canCancel) + dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + + switch(dialog.run()) { + case Gtk::RESPONSE_YES: + return DIALOG_YES; + + case Gtk::RESPONSE_NO: + return DIALOG_NO; + + case Gtk::RESPONSE_CANCEL: + default: + return DIALOG_CANCEL; + } +} + +/* Text window */ + +class TextWidget : public GlWidget { +public: +#ifdef HAVE_GTK3 + TextWidget(Glib::RefPtr adjustment) : _adjustment(adjustment) { +#else + TextWidget(Gtk::Adjustment* adjustment) : _adjustment(adjustment) { +#endif + set_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::SCROLL_MASK | + Gdk::LEAVE_NOTIFY_MASK); + } + + void set_cursor_hand(bool is_hand) { + Glib::RefPtr gdkwin = get_window(); + if(gdkwin) { // returns NULL if not realized + Gdk::CursorType type = is_hand ? Gdk::HAND1 : Gdk::ARROW; +#ifdef HAVE_GTK3 + gdkwin->set_cursor(Gdk::Cursor::create(type)); +#else + gdkwin->set_cursor(Gdk::Cursor(type)); +#endif + } + } + +protected: + virtual void on_gl_draw() { + SS.TW.Paint(); + } + + virtual bool on_motion_notify_event(GdkEventMotion *event) { + SS.TW.MouseEvent(/*leftClick*/ false, + /*leftDown*/ event->state & GDK_BUTTON1_MASK, + event->x, event->y); + + return true; + } + + virtual bool on_button_press_event(GdkEventButton *event) { + SS.TW.MouseEvent(/*leftClick*/ event->type == GDK_BUTTON_PRESS, + /*leftDown*/ event->state & GDK_BUTTON1_MASK, + event->x, event->y); + + return true; + } + + virtual bool on_scroll_event(GdkEventScroll *event) { + _adjustment->set_value(_adjustment->get_value() + + DeltaYOfScrollEvent(event) * _adjustment->get_page_increment()); + + return true; + } + + virtual bool on_leave_notify_event (GdkEventCrossing *) { + SS.TW.MouseLeave(); + + return true; + } + +private: +#ifdef HAVE_GTK3 + Glib::RefPtr _adjustment; +#else + Gtk::Adjustment *_adjustment; +#endif +}; + +class TextWindowGtk : public Gtk::Window { +public: + TextWindowGtk() : _scrollbar(), _widget(_scrollbar.get_adjustment()), + _overlay(_widget), _box() { + set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY); + set_skip_taskbar_hint(true); + set_skip_pager_hint(true); + set_title("SolveSpace - Property Browser"); + set_default_size(420, 300); + + _box.pack_start(_overlay, true, true); + _box.pack_start(_scrollbar, false, true); + add(_box); + + _scrollbar.get_adjustment()->signal_value_changed(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_scrollbar_value_changed)); + + _overlay.signal_editing_done(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editing_done)); + + _overlay.get_entry().signal_motion_notify_event(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_motion_notify_event)); + _overlay.get_entry().signal_button_press_event(). + connect(sigc::mem_fun(this, &TextWindowGtk::on_editor_button_press_event)); + } + + Gtk::VScrollbar &get_scrollbar() { + return _scrollbar; + } + + TextWidget &get_widget() { + return _widget; + } + + EditorOverlay &get_overlay() { + return _overlay; + } + +protected: + virtual void on_show() { + Gtk::Window::on_show(); + + CnfThawWindowPos(this, "TextWindow"); + } + + virtual void on_hide() { + CnfFreezeWindowPos(this, "TextWindow"); + + Gtk::Window::on_hide(); + } + + virtual bool on_delete_event(GdkEventAny *) { + /* trigger the action and ignore the request */ + GraphicsWindow::MenuView(GraphicsWindow::MNU_SHOW_TEXT_WND); + + return false; + } + + virtual void on_scrollbar_value_changed() { + SS.TW.ScrollbarEvent(_scrollbar.get_adjustment()->get_value()); + } + + virtual void on_editing_done(Glib::ustring value) { + SS.TW.EditControlDone(value.c_str()); + } + + virtual bool on_editor_motion_notify_event(GdkEventMotion *event) { + return _widget.event((GdkEvent*) event); + } + + virtual bool on_editor_button_press_event(GdkEventButton *event) { + return _widget.event((GdkEvent*) event); + } + + virtual bool on_key_press_event(GdkEventKey *event) { + if(GW->emulate_key_press(event)) { + return true; + } + + return Gtk::Window::on_key_press_event(event); + } + +private: + Gtk::VScrollbar _scrollbar; + TextWidget _widget; + EditorOverlay _overlay; + Gtk::HBox _box; +}; + +std::unique_ptr TW; + +void ShowTextWindow(bool visible) { + if(visible) + TW->show(); + else + TW->hide(); +} + +void GetTextWindowSize(int *w, int *h) { + Gdk::Rectangle allocation = TW->get_widget().get_allocation(); + *w = allocation.get_width(); + *h = allocation.get_height(); +} + +void InvalidateText(void) { + TW->get_widget().queue_draw(); +} + +void MoveTextScrollbarTo(int pos, int maxPos, int page) { + TW->get_scrollbar().get_adjustment()->configure(pos, 0, maxPos, 1, 10, page); +} + +void SetMousePointerToHand(bool is_hand) { + TW->get_widget().set_cursor_hand(is_hand); +} + +void ShowTextEditControl(int x, int y, const std::string &val) { + TW->get_overlay().start_editing(x, y, TextWindow::CHAR_HEIGHT, /*is_monospace=*/true, 30, val); +} + +void HideTextEditControl(void) { + TW->get_overlay().stop_editing(); +} + +bool TextEditControlIsVisible(void) { + return TW->get_overlay().is_editing(); +} + +/* Miscellanea */ + + +void DoMessageBox(const char *message, int rows, int cols, bool error) { + Gtk::MessageDialog dialog(*GW, message, /*use_markup*/ true, + error ? Gtk::MESSAGE_ERROR : Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, + /*is_modal*/ true); + dialog.set_title(error ? "SolveSpace - Error" : "SolveSpace - Message"); + dialog.run(); +} + +void OpenWebsite(const char *url) { + gtk_show_uri(Gdk::Screen::get_default()->gobj(), url, GDK_CURRENT_TIME, NULL); +} + +/* fontconfig is already initialized by GTK */ +std::vector GetFontFiles() { + std::vector fonts; + + FcPattern *pat = FcPatternCreate(); + FcObjectSet *os = FcObjectSetBuild(FC_FILE, (char *)0); + FcFontSet *fs = FcFontList(0, pat, os); + + for(int i = 0; i < fs->nfont; i++) { + FcChar8 *filenameFC = FcPatternFormat(fs->fonts[i], (const FcChar8*) "%{file}"); + std::string filename = (char*) filenameFC; + fonts.push_back(filename); + FcStrFree(filenameFC); + } + + FcFontSetDestroy(fs); + FcObjectSetDestroy(os); + FcPatternDestroy(pat); + + return fonts; +} + +/* Space Navigator support */ + +#ifdef HAVE_SPACEWARE +static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gxevent, GdkEvent *, gpointer) { + XEvent *xevent = (XEvent*) gxevent; + + spnav_event sev; + if(!spnav_x11_event(xevent, &sev)) + return GDK_FILTER_CONTINUE; + + switch(sev.type) { + case SPNAV_EVENT_MOTION: + SS.GW.SpaceNavigatorMoved( + (double)sev.motion.x, + (double)sev.motion.y, + (double)sev.motion.z * -1.0, + (double)sev.motion.rx * 0.001, + (double)sev.motion.ry * 0.001, + (double)sev.motion.rz * -0.001, + xevent->xmotion.state & ShiftMask); + break; + + case SPNAV_EVENT_BUTTON: + if(!sev.button.press && sev.button.bnum == 0) { + SS.GW.SpaceNavigatorButtonUp(); + } + break; + } + + return GDK_FILTER_REMOVE; +} +#endif + +/* Application lifecycle */ + +void ExitNow(void) { + GW->hide(); + TW->hide(); +} +}; + +int main(int argc, char** argv) { + /* It would in principle be possible to judiciously use + Glib::filename_{from,to}_utf8, but it's not really worth + the effort. + The setlocale() call is necessary for Glib::get_charset() + to detect the system character set; otherwise it thinks + it is always ANSI_X3.4-1968. + We set it back to C after all. */ + setlocale(LC_ALL, ""); + if(!Glib::get_charset()) { + std::cerr << "Sorry, only UTF-8 locales are supported." << std::endl; + return 1; + } + setlocale(LC_ALL, "C"); + + /* If we don't do this, gtk_init will set the C standard library + locale, and printf will format floats using ",". We will then + fail to parse these. Also, many text window lines will become + ambiguous. */ + gtk_disable_setlocale(); + + Gtk::Main main(argc, argv); + +#ifdef HAVE_SPACEWARE + gdk_window_add_filter(NULL, GdkSpnavFilter, NULL); +#endif + + CnfLoad(); + + TW.reset(new TextWindowGtk); + GW.reset(new GraphicsWindowGtk); + InitMainMenu(&GW->get_menubar()); + GW->get_menubar().accelerate(*TW); + TW->set_transient_for(*GW); + + TW->show_all(); + GW->show_all(); + +#ifdef HAVE_SPACEWARE +#ifdef HAVE_GTK3 + // We don't care if it can't be opened; just continue without. + spnav_x11_open(gdk_x11_get_default_xdisplay(), + gdk_x11_window_get_xid(GW->get_window()->gobj())); +#else + spnav_x11_open(gdk_x11_get_default_xdisplay(), + GDK_WINDOW_XWINDOW(GW->get_window()->gobj())); +#endif +#endif + + SS.Init(); + + if(argc >= 2) { + if(argc > 2) { + std::cerr << "Only the first file passed on command line will be opened." + << std::endl; + } + + /* Make sure the argument is valid UTF-8. */ + SS.OpenFile(Glib::ustring(argv[1])); + } + + main.run(*GW); + + TW.reset(); + GW.reset(); + + SK.Clear(); + SS.Clear(); + + return 0; +} diff --git a/src/icons/angle.png b/src/icons/angle.png new file mode 100644 index 0000000000000000000000000000000000000000..7001a9ddc296773cafea0ef5e2902b0a0a1f9a72 GIT binary patch literal 27359 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 NcE##)iP@c}{{dA>m_q;n literal 0 HcmV?d00001 diff --git a/src/icons/assemble.png b/src/icons/assemble.png new file mode 100644 index 0000000000000000000000000000000000000000..5db2d6b08d74a7eba9571aab2cb5a81ca823a260 GIT binary patch literal 27011 zcmbq)b8sd>_il`hZF6I1W1Ab>wv#uuZQI$6ZJQh0ww?Fp`|iC}x9-2csp{$Jsi(W1 z(^GZ&^m%$B6y+rle&GH90Rcgfk`z_?uCf19V4%M5JMMfh-xY+ju#^hS_vH;^68_zW zb&%9_1_6OX{Z9e?x9R)w{gT8*Ov6Rl-ps|_(8&};&d}J&-qzH_(vVo((#h1_-pSgT zn2mwyjFQUr8;toMu!xhXp^K%x9kGg~ttkjI6C(>7Bh#;+h*j_3h&%@;HFb~d%lQeE zKqmCiIckbIYz!^`so8+J-_ZK4ObN8c(=DU$QNUb`_W?Uu5nQKfA8uFQ;^DKv{rgvM z{=Avv|EKcv`MPia>JK}glKB|^cz;y*XvzB+`W%ru4KeEJ7P#qQV-Tq88jgEn%o;-i z0x93rw7+B%e0~1^alS{Dcu6F$=!zXaPuDb`C#w6VDrsviEdI7N{`LI~@m>B$*Uw_s z0uT`VM_X$Z_D-W+-+!4M zdsEs$<#MfS&(T6PCD!2_Y}6bVx2stjFh3x+zFrp9$&dmFYqWemF?px3eUcwUcDpcU>#C-ER5USZ`IQ5L|%T2b^T_B3r=eI&7OQN_BfzI9VDx+EN4 zv#o4gSFwMNZ^;_#*t*}EI*M($c`KtnLY9Z%`Q%`{9c+=0X1M}>&7N3 zxEN1Apb0}KR|X~DR)-q1cZ#>6ttM1T$7UlmxRbzV*pS`<1EeqRz3j-N=SzU)b7+oC z-azsyK=6h+dErsk=d^WPOOT0kAT?KoP75wrgfz;tEgW zMCa4u57;q>!W)+=ZjY1zhR#_{_<>|JQEVPM;sp^q$oJR-1uBCM4u$aKpyx>W*M8u( zFXMcs{7k8`2zQQ#^a0WA<3(TOEG44?y`km0pjqZ%S$v9N3h2l_Fh1Ly0W)f%roI86 zGsDLp4pQkb4JkPB8BKQuBAW-j@wX&Q^PML`tzsRPjwUu73^AhJw`{}s;iWT<>3_y< zGXTE5m7{2;nePfr5jc7n)^>lVvnIqNe3AA{l3G?~8elK#_k5{nA{uc4Fxqki)tHDw zZ+vVKm8Cnvr{S`@yy}n|)?M7Sdin+b_O3;v^ua0gq}JCYUHtl4kA}cB*q5}dr~Z~0 zf{OKDqCfH>Y6BAjd5Juou@NDg`}@$i!O6SrrHiSwX6W?Sz925yKkhbl(a1^*1bYdW zBMF3sKiB&_1ZT|wI&Y!@>O-eN5DfE~ft=}3TOhi*q;w=yFdCz_m<53b9sxa~N;|Qv zD?-_=$M9~5A^csa+Ug*Z;515Xb*^3%7*~e8l=R><%r=JT(lna5ixD?<8aRd}x1NZ9 z81gOUDDgAMhmOb;DG-yA5KWot18)A_sbPs5x<-Nbp^PclmfvY8TmCSLdwIfpO`y32 z@bZ?m*6$f84>kTNy=g%o!^FX&!rs7*Fa1i{C;P~X3dr%%*z%C6lLtpo$xnUZpjLpJ>rM&R84>Cf|Lx?s5XfU!o0Kc$IFLg;ecsV8(^ma!-}4k(BlL8i>1i7z z_DKVFM05kMKRwF?4IBh944s8v!zo0%opk*7pe4`XX=EVLz@pW|u9QAyyW_FB&422=W%(D0Z6qbX3g(tGZ;}^ueQoya|*$9U<*K>;y81`G-dp;-^emD^jRzHjLcxbfljn&bsmYQskcl z4idIc(9p3Ie7Y7cCJp1O(TDy~VEqOod@(24V+qbI_`*ixIs{TpbzzIii0eO7^~hrT zW(N?5FI*w9Ef)osxPzSXlOqaB11m}$OEVEMh<`^=RSy2!AX7rda1Gvtq5Jmr@N&9+ zQ+YA^sDy~ih1qz@vXuKQ_&B70^!CGlIf{l-fH)R&8;yhP4!9m>j11`RZs|etn8?T0 zQn`u}hJw$|_=|R9HJC0XrmH8!*4rrO6h%z`6O6Xv(uBuXa)=zx@%0bJdU55MH&`Tm)QQiDiV?Z~-o;d1@#2)l2mcrA1|cC7 zdmw=*16f{n%m$16n|`mIq>xZ|=wj8ha*BcR)d!hKM!(M8l@l0VW2jd>)N%s|yHdjd z@l7h78BKFLbfBA_?9TpA+pEH%VziF_6O4HKjsP(0TefCP-;n4r;ar~5=np{zWv}E7c ztglE`J!}(W?W*<2AVOo{;^scCgh=E#+W;mnOL8LQ z_B!=?QZYK}Js{=_BiKAEXcFANmm3KDQg0B|0V@4qGXacqLX+j}pE}A2-MgD%*N)|; ztmC~y0qZ}6c2OCdWYv@q$ltGm8Yu)(uU#ZTB2%+XQ&qr6+uuR>P(c9XkfIN;9`cg) z`s8nD^c7HXI7tT)@eo)Wu?EE4MWg1ZZYyZF8!oS!LICztY#SarFsl~hq1cO+-}G*5 z*c4h=FTr0dsEBEdkex(~JQF{wmI^BxkM-vvX2}=2B}iiXUK^tC7mL$3e2P|n@Xf;u zUo)~Lr57)nN+qhLQ7nSsZu|HX{_tN*7V3n*kDPaaJr*nH9BWtv4c%o-ov_%nXg5Eimy*A0hLNAjHg3aA3BBTAQMvI}YX%quR+bU`AVd z_8vB}#G+ZHG1W5mPr1dB!efa8!0BB><@Xg9Y#SLW^l?2o@Mm%#e#VkRI>o!kkD=Rs zwR$tL(>&PIIup^F5#71M%HoY!9h?iwCl3{-sy4bNtpV}QMm7D^*lZJBsv0Y@G8!3a z6_l92Fu2$YyB0VH@DiEHvrP&Qfq&7EtQcG%0Jt1_SGG?R*;A+4uJ zj_90*Hie}2Z;jnIDVSx;GE)jlqyB|xF7oq-Mji8%aDc$Cpeo#(?Qv=cJ2~yPIwoG#YahTQfLJ61n+7Agg3Q+p-`kVHd4$4l!&6Y10L!U`mN3JDh-KBwJXZxl_9kID%BNCcWqW3@&mQw5Ybrb$Pvv2Li$ z7%k<}5!XZIU-ui3lU2o8Qw?n;A&k6^v~TzhVe~uYW7oO zg91YYIJ;j_j_YN;;bQvu2QGVZQw9_(edhl+0Of^gQ?hRo=HqcN_e7bP;?XubEmT)z;!( zqW=s1?Nq<>d9VoygeuyN0j;YEgU(r6DzWoD>P9+_GL2!!UZT^8saVJ@RVS_hQvauQ z)XUA9dWO0{2^LDtk4AIc*WxB~eQ$*+3h#E4og`rbS*uxNVP{END8H05J+~-qwz3931*GG+)oYWsfqWxk=^XQ)PKq{nap8$TC5A*gSbwS7U^_>*jPd)uf5a{3;ryyr4K z#`j_NuS9>PQMW_z*u%Q{O00ARnS0N||HaW_Z8Woh6TnORKDW)`rEl;Nz+ z!FM@^ehD!(LO&yJ1s^QWlk-S%EoJ}Z(sph>vVk?%&TO!!uZ(qQ{=a=>urn<~yGcS* z9b)tVWvc*FH+ii;X2eBV~Vx$8_K2S+<0W6 z8oNY$%`r3Qd6;8n{vUc#tC}^P9bNcg-;n=pTG!oGHS>Ra{FlRb^Lb$PKluN$Uc}b= z#{Uex>QxN~6!#2VLm$9*ePkX!*Hw)-JR+~;n=b6IhN^Me=ls2I;L44sh3a?x38B5mm0*`d@;@qhxZ*o?O?s zMroBh1*%W|fwI9#ILDvf*%uyv)_S7nJ7G|4uXm?&4*wpM9{HM!U+3>HlqP!7L zKp4|*&)D5h7Q6M>u1Boo6mzR6->EWKZxAxr6EYK1IDWIy1rNj;p$M=`E7TSR%gHeB zF8)$A^Hn-sbwdHFf+#??vNqZ=y0x7xxF_{;77gwTxm(%dovJGer0f{bIC<7z0in8w zfSxX^M*2-DrzTONoW(Zcd<)HD8JjeuhWu0>;(Z6&)GdODUqq9!@qXe5cNn*F(B03W zf@qgmp$_W`>?SGi@XzS>2raHqAhWPdiOUsgE<~5y*JqbO1z4v{q2UpGWif#@v6Qrc;9T5A%u4YMo+-xi3CYgklPtktBi3 zv8=NmG-700B9zN$u&B3X^x~twmj#=RLz%0CAv?}-dob>E3s_j4?dhY9D&_3F!%M|{?Tr-NHCA& zSuiP0I=x<}LC7{Q;f>8glp$=bh2#UQk6@SUif!bQdnPy8`+doON-3F~MaPHnJtUWm zCA8}aM3n0&7T%QyGj;mb=;|+QzBo$!6)E8)zZF93ve9CeEuXCFhq3R3j(%x#Sgl5y zU@1BeXQaL(H}1okA}gwQA4aFxTS1VV*EsofLz>5XRZ9sh4}c}bLtbEL>^S!N6~E`j z;Al=A?t%CjyyXkD=JuRk?q2V79cB&PWvkZQH?%fLdTcQ5X`cJE0PyRcyaL_z&iU-c z(M+{mu&^&f93^od+=GCnFX~oE{Low;d~5uOO`BRm>n(jU4!Vp_>Iyq+3J2>SvtRoj zWA|;_%3F1veuD`TxLxb_e`vZqu^O*CPCP%PeHTat#)GduB)Kx`b|r_0guaR_bi7&l zQ0-53dwprSo6BuZZzqE>%qY*eSqoUvxLF-%SkPFeXEh^eG$WvA;aS&}E%$YZ7NUFq;-J*GX_XHW3G0{;7>6iRp2$zzz& z(@WqIc~00h^WaSCwPoHL(kFCv#O_vbje@LK((vCk?fSnhVQ)zP{LDe!2$) zTFFWF#dP!<;7-~v<}Gheo_k!Q0C`#wz?gjNS~<=A(5J#B;(K0UvjoKpo+)D5a(5ZZ zEJc^Idr52eQw`U%q&XEZ__o{W)3p{TXSs!h-sKy_o&LI4)!*IcD;MqLVCJKLV(fxJ z=n30>*VK+>_fNx0xP7<{N8K;RXyalweWG*)9e8KF(L5SvFN}4+=Ck}}5p{78IAgk{ zwH-yZLYsLE_i#C+=9-7iq{?^sSx;8S>QgV;myz<-P3TSTc8}BeE7-U$#^n6q znq;)?*UNCANPXf=X4o|a5|!=AbKk(?HinfI;g`sb!$0-y-9M{r(N5R z7!lN?dFAr?Ww>bSig4S-V!uz9(!ms(7XRS{7I*@5=BU|U+7B!9o|o`PY?o+#4GUX_ zH|&@}g7)a}^RVSTdwO%>sR@(dyN2f^=spDyY-D#*SbFA${r!cnNQ93FmDcAzD=TU4 zS3*B!&A858gsn#MD#OrHW$kJxy{tgjE1-3cI!D?^cKkR zOPZHIAZdh(02$KT@0uQDW8DYt==KhTLckeNB^vz?{IwhB!)dGWlLXYTqoZdLyg4oyVngeH6o@ir!Q($ zwIHS*aC*sw-Z;QmqbvL-Yh9vDWX^NaBeR)e5OTiv&2AJWSli^!6 zv{#h+JN2u=WF;fFc`<^_PX&c=*W#A)ij97F`v5Sj`PZDR=|Q%z7EA6WMGg6`UMD)u z%_(fe@$_cAss)0^)eYK)+o{kV<_1{yDWib17H>liH$a2s>*5q8gLL=5qUfp&1nJ7D zBf^ZS@jV?kvS#>L@^&F+SCU_usBHO_8!EV060nIDs_pn;9q&~0 z4klTNn!GIT+w_m-ZRG3+yw3ta*(8+3uE|*W%eye|E3hj0$1*tblqe3lO92wV5 zA^4D6noS^z^NWG!g%^rj*N`o%WgAj5JI6?z60Uh%rQ9}Z7O5uZw^^N4Ys8OO6*^?skT3cr6)IecP!@feP`>7Hm9Wb;JPmbk6O()x zoh6hR!>l?Vp{7S7H>=1=kjOIPl6;j&s7Lng1IH33U5t4@Zb=N4npX%LD6JtMxq0qm`KCzL%qL6U@C^qh z*2*r6g@A_ktV$lfX~NohEn$ZTWTSp{T=;CfnUI3{^rV4VMk-O#KWWX$H?;S;fUjlE86_RvfOvJ0mkdhDd)wVl3nc?%3UhwyHHmsy;^FtanSbF$0MZ?Gh7@vsrXr#w&`P>(c{aa4I$YLvxxufg_T-W%W9;y4^6;K(EQdH z*Fa&SK~al1W9hG4@Psw2pfSUk4qOw}qRVPL%Wm}l8{Q=7VMHJGvo;kw+hVD5Qj2{a zOG^J}6bi|KgWI!rVDttQsboLQX6Z+#cVyEKbqejVND8i~l3!IP35KHe;?r8qeiYMM z3H2IcuF7lSg!zaE;lhj;UsU9+{Wc>Ip)a)hz3!6S7Iw zOJF4)b7CG@Q@H0x!=*Q8O?g!V&74T9D(O^94p+(gyj67!$ktgw~Aui+0*YHdP%d-c-8Mt@toc3 zz0{dOYP}_N*yj_>w}Ec9e@#WBV7&!r=O$b@`A#o$GXhu;fMH|?S}*TEh+NK4ZgV_4 z2CaZdMdT-Q4pqYI-wJB;x2XCpfa=Om{OD&wo}AjgLHoCNZe>hVfS1Bw`?zEU)!o$ilQO;YRj&9WJkBbb&)r7WjFlNxY`J0k9sE@yxlmWq$?!1pcv_d8W z0Hak4GqPlqT-Mca4#wN7*_H4YyEfJ*-Hfr>479?D4YD;p+(+p^FI-47nWkw)C$Vl4 z!f&xU=6r(7)c2H7CFL0uDVye0PxbC#qjvjbmX;N82FctPcoI8r->uTAoiUU!+zA3g zgZFKL%G>n#7bvS({I^A*|07-ayYsgk>_gj2PMc^qo@}XHDw~0sff_MLn((tu(nOjL zHA2)VL6RIZA{tL6kClg~p+S8qGV=c9%JV~4khhzWF!|4jTWuxCic_5S`6Ho2pVTho ziu-OflK%|Yrhz6Nq=rAZg@4unLQW;`jb_WJTX(36w~`%(zV9%e|FQ#@L0|{&sNA;K zZV7nyIVgdA!E~*+X0uP)gqt7~vNq#&K2Me6D~F&yhWhc9|2cS5s*`of4N~Ex1Oy*F zZ}0Q_RV$tmmw3hI8wp7Q%eGTDaf3c4EOKC59=-#SYCDnlbvtvsdeg=F`F0cFax<_F z#I0DA)zA;@vj^t zQZAPU1NA0->HhWWMk;~6T%7UqTjT5cc^>rP2{qDh4|zQdJiXo$4@v`vRuyMG6&0^| zMNok@t}d^TAcLC%ukOtt;}&o)r}sTGJJQ*^c zq_}}VDJK1o9IHa~?yj#%lEP;z1oR*;EXZ$tX5C zKp8C%qcX!ZTl)^q#$rqS7#s49{t%Leu3f;t|7GMV%+3YwK3HAF54+d2a}ER~MyLB_ zAoJs5LQbK^`TWJKU(b7ID91-^(Dvo&F6~D~K959*IQVnl!hNjWoSqD*QBGcu_JfJg zX7;}lKrCUezIj<2_dh-hc0Mv1Z*W#9&;A1Oz7aBVKf=i(?RY)S57<*Ng`c+zL|?1^ zIYb!UzF%!w&#k+iQlkl37ty~?zjk0V2?$f*TL-)LYbXFiu*^1y~;qt-wjnFip zr`9yY{j8fTHpDm8rCLDiiWquV;6CUr=u?9L7pgtgAO>4dO$Eo|2v@eeJ{C$ihmdY6 z|IFg55PfpJO&$)0@C#K06}lC5R;Avkh=V`-m;$k{7bsNegN;7ct`=T~SZbG&68-=@ z@@C#37jF+vOfr|Y^?HVjmgbEEga(t|c}rrubANjZ*Ae9O!ZEHhf*%R%E*pXv?R(mF zI2Uh;1bc8`}?y3-`#(Z99L)UVvlc7x}S zN*uyIf0cW;;uy+Ljj^dBEch>(P_5r-8YHwn-Ce#SxEg}=#B==TIJ_jCSrOXU^r+On zFOgaP$&^cGaBq+v;}VXAMb|TxBY9h*g@ZVOJ`lYS zJY#ln`IZSkug@J=Bck}X7*x6r20RW%pQw|D;MkgAolXwacBYauN0jp9gqT=0x~y5zom>`Tb@UOa*^dCL6) z=i?oyfg?B61KA?n+snr&hj_coS@#;e6?c0)7L||Ula`wSsusa&%Tp#F;&|77_h{?) zP!b>1?11;1^kduZ$n0G}(U*U}(;Kc{~6?3pOGBY7dpA1{xk3{cCK{=&wSaL+;VQS0jC_*;-j&pg2Rzx ze@WzU&!3n+(?mRO&qLsP*Rb(A8!6jR3dk-@ zD8mWZ?=Y;@-Q5EY#s;n%FY*Zi(_zVqrKEp(WG)%k2if#@TTfsz`=Xn3!VT2dtYvoYRvz==vP&oG!GvqUDK|`>AVo z{Sm~2zWVlLMF;}O^JNDG92izMD8|Zt67~A=b4820d(e^x;tBHC(gk*t9b!&`9Ts82 zXsk9}V=ql@FuOhfW~V@QNk>82O$e5LF3Q@+1`ZO8V3M&a#8R-jduhr_jQ3=P#38r4YZX6Igc*u zyWub~pQ?mp`m@|#>oh4Ok#>LvbL?5WL~fv9I|8_tdAGxx`_;)G2cq)V)iTAQ$EUBO z{K8GXHN=JQeE65@If#qR$vUU+K}ND5UOW>lZCVv{aJ>a`6vf_v4pl(dz)t1&kZ9KnqiJ04Pc7{TnxmjU+v6w7F3ABW(D#o*yQb)-!X?6S9m# zS7DGo?r|RPWg<;~$`nKlx`dB6j~xz`DW*@z4b9jo88uss1!ko143~<9-*Id~_Di+= z=uqOx9VuT+&a+@(0gLnkV z`Bh0k5+F&#O081p>TM-a449uAs$5@t7At=+&0zj@OE291q`9bRk{@KIJu3Se%b#4$ z7m`C2#D+|ocjS|!^Dyr*a?n=Df`%w|`~<3S+-Lk=<>sMQ;C+lIH{F}JRuC&(?o2US zM!1mu^6iAs1ynbY$jukMm^j&EqcaxUXS8d}_`)m<9;94xQ8}w}9(bFBf;#L%?fk1P zXwd7JdWhJtcSde|^_%vih7@xZ=Actfuh*DU#PBh|5e5X`E+6+J{36pDzMv<`47kK~ zceuSo;0LZzTh?8uo`U!){;spRam{0+&#dJ+Aawt6*}x|JrGuK%*TCuR3C(oX1>shy$LLeVMIW1UPU<>JYC|;`L(@`Q&8ha2(QA*87x0{Q@*OJ z{Rs{&VeL?DhzU&1ksXPDp9KGjv7fhT*IoXLhjsNL1vvvai$9Krx2pqa^66xIQ67jfMg>4JH@| zU4)mx1S&_=OyJ3H7Y5Im8pnO$mB!g*!{Msy`xI+?OvM^|{E+;Y#ndvp!tT9SUb0^x=f6Y0fY_G zxFlL*{{3HHxvo6ZjYMb6qB+~u1?mepJIzy2xh0c7QK%;98- zP8m|*o!zQ)2In$i>N-}j1I6XUcfGKi4Qvy7fLvVepY6g3Yr76tFj`K44zihAh)Fr< zYR@(>FjFd}d(u_L`p-5kjPvC`U5mb(Cjm$hZnQ_s`oZ?_4Epp%!caYjSxw|)8!W3H zl$&B}(>ZKhp{XAgOGP{(!VUEu#LE&7=KUvb-8vu59cjL6ZRPET@iTYAjYl z{JZd77nyG&GX9-@nhiVphUb$bnLDOZk(syGr&Yi5gG~M*%7o1ZmhnQspi5XXO$MZY z4&S@1*|qH6@B8;mX?+<`)A389ac$X_AhE0@>OnEIW!1m+5f=j=OtGZ3^-7S%y=)e< zMoMtr1n=FSJjIs#f@qH&W-xv#bWjC8b>SM@0+9X^wdcZqikz!Lmsn(yIMys>Ce7|m zi{+|?{e@+nD{#&IUKok2X_2PUFNYC3G9HjaioQR9`1L^rd6|$29@fGiz?cW zwo(09`*I1ssR^{pGf-ADsE4noH=NGKQ`v!mf*2bJG`juU=lD#fIT^vSX{oj!PAj`m zl3liq#rL8?p+WTFQF!e#BV$c1ASs14NStYrm{5*3)~j{_+s=EQRLf*W~;$AGEiC5bt#a33MS{AU41Z_8=H-DyE8L7DYl=fH?Snn4xj2Q-tziL=1GbJ z?s_QsE4}0aBtL{fRz$vhKfMBxVO4iLKT*z#Uef6ijc#ErLHJ+8EpEXF4zE?@gBcj3 zEqISr)Eiin7C&+D1F>Oy2-9n^%1Mz6J9f_eTb*iVD2Cx-L{%%o@RjTx3A_F_00N(&{DEE+X6sg zP94UWiu$E2Ns6C*88?hiR}}MJAU( zB-@LEFzDx-)<+>OZHdJG!p;0Z3W*aCNfN2oBd9a_Bp|TaRyJM2XE#1P_jeOIG)AtLdw5}b2F{$-P z*gyZQVfB)TUnT+fjh4X~*fg;@Bs5dpT{fMzO5_@ZtVAg=v1QlVcht6%9^-jAB75MD zbPdN(^ahIT-V=!=(Qg2VcRD8ss%!FkViXFhPWHR(b4Us@<&R@JIeA<()msO7MfI4V z?tHRXdzwVef6p`1#SaDYTBmfzE~_Y9`q6m<+1c7I|FTBMjIwvleVl)o>&x@wXeU=z z%s!M^8=JtuB_?SLD!#+LB{X~nC3sCcCUd&`O~=BR)Kl?$h11O5|Lz+iRD0XTBUj z5<0mQOUD1?=KJ}CJ@~net3T~WlsUN*rTdS?E2L)&7+mI2Ym?#1eZWMe$>i4M8{e<6^~5p z8RHONUUtp*^rdTCIA2R@Bii0>R>2!q-6akUy3LjgKiT-FX;y$tYykDa2v~$7N}`@v zKYP)ZvLmQ5t}IsD)tL_2b|3b^=&e{c^1oLK$3$Y`A7w&oOj~S^ZR1K(!b-rNol@0C;0yemY?_Q0&25KUhLPY zE1?y0RppEyr*Sn8T$ao^>+{$PD!d-_bHXE_0tFLxbDU@K9#{gHaiRC{#h*iBtEPTO z009<>L-)1@XZxt!LH0HJKlan%XZ(@6i8$Z5J-5$=X2l5fV(4DmrvG}7K#pvKdht)b zlW;nbHNPOudvT)tdm!SxnRwKxt_LA}r6FI!U5rtB&qWyrv zYtzG$(Vy{?_9>E3I`UzJf4r!mrMJ$pfL36boz0liB2|Ywf&P{G&dSq8sZU%chAy)j z)i{hV=^fTHw?i^0A)?lv@@-!|uFUYn&5l}E>g!99cU^7eHK>5wbteEHXi4HW!uZGOY8zoEfQgeQgYNO zAHj~!zh-zoMt7JtQsAQz4(@2lMLpq$o##YhDVVN37+Y}s9=&c#QAf~X3d_Max6Nzs zH(Pq}gz?FejU7ZAUY`rb2nQ#c$V^FPo-Yp>BYzT;6rwC^?jm{#7na$me_tf z%bU=3JNTmJyzsV#Bl;RlJ)N39d%Jx!rf`d_6AsgEDKleC?wck=PoVCxAA(%J1KG&l z1q}Su@YE{6$BzJbS-IP%fhYs-j0*Fi9H@H7-|qPRD_8(^J|G{;HRR&P9O7*4p4}Nd zxhjJYkJYi3xVMdv#EWM;iL{z66gWR?A~A~IJ`JnS#?N^wRo#;d?C!d11(gJ6qh`Q( zArrpEM_9?u-Z0Kt^@Pi&PA3B<;rgsm4CUFu$W?)T=Aw$^w9+T`CH+Il2psb92jXUW zYtOV&aD*zFLR|4*vR$5k`YGN1w%2-t*LC926I8XIx;Mkekgmd6&=2mg+p;rUmp#v8 z-SPtg&(2XQv>8^!5kLa#J_Ib6r#G8@7+WZ%raF-;O$UdEkiP9WP0C30(9s*WN;edp zCgtipH8h^@R0K*pmIn8Fo%`UUz-Hm40BGGeN-|&$?&J_P4I`kwH-$Gy1!*3V-)lF^ zN}y!R8A2|~FQmme& zVznk5f?-Of)nb*DC)Di}td+nmABy;KIZkSyE!&TUs`jZ6Su0Xn{Q5~af3AU?q3h%P z)$b~+d6A`T;c)}&&5mcjZOFx)&*Ps9X4rLEm>Dub&ko|j6E+CHI=5{FZDZP_=cEk* zFEZ5cVf2F1WH^z+9p}g=;c;2WP(caiyQ%(@i@f`{RwdxqCsyIcg>XOCF4r^x7BYS&r1mlrwNW(JMcAZY#G0Cd~>4Th=PyCO+^PwZ}lTOb+aqN2QuhW!OVklh(4eFC9 zHKD`I97<(+FQ*mqY+Fv*x1Q{4{Nkm2uQ|eaI06$op{v_NLoKLC5GxHO^zuz$oWv-a zVIQ!EX5ENUV0gn4pq1J|?{jyUk0}@*WfilXd4F4P;fYY?S&BGcnERsO1A=jpcTR7A z>-PXvyjT%gLkkio$q5g_X57N|RuRZHR#mg+DkONPvMe9KS%$fwXLFT{;5r@Q3>*nW z{AUJ^3SGh%0py%W1NlVYj`E}{A?X)GAJM2*M=?=~hb7-(66v?}#(y6(V;%P_qvI}x zI32A6gYt%v85c9}@6nPk#VOrCv3dZ!H=<4`irE@HvCMm>mW)Ciyej#3(ZWl$otM>) zd9p~qQ2Y}xZY&=>l$pz2S2F`tgO}z%zM0HgTd_hCB5H(EF@Jz%G^yCq(^P;Uy0~o= zaoU#Pw!AjxSv?V18~1N)SAS)rf^SOD&2%=LAb392nq1Ya<5QNL4DgOem~29Kpqe!A zasj^uF1@9YVm@`~+xyUENK#gUwnkBy6MZ7S1Ui!E3RIg$y7-#+p7WtNM}d=_<6v;H z9)ar)KjGO>J-x8#kLdwpuykGGnDgGZduf`IujK+MM_L^ttDzV|WH_eQ{1YDzfzC!K zm-NOV4vDeZj>$mo!T0xbf#jAcP`^qL=S5tKK()ca+qO!^_cjjMCxZ82<5L^wsGHrKzrvPYHxlYQhofhG_7c z`WH>X{S)u^Cyj~NQWZNxp|g0lgt*HqAbaurm=P@Dl=L+In~KWl!IE(mIo-!;i^D`( znA>-`NN5%s-My>BG#kWEX87d#z0erJusefbl4GkRjJp{zKkdf;s(t88tOF~GB=ZWu zG=AG>`_`#w^QYtH{+1%dXXsO%-mr+7&c1cow{7RWe$9-Sf^E@nvfz{B28UTvG{B*M z!OJ-v=B~=0%59?D?LO@Y70JUe5VhcQksqLl8uE(W5m)rz;B@B#9sf?wmYIkUGueN3 zh!UNABn+LzS{!o6|LHt(c6_Bl=Lx+w3t*hsHtjDuTU^5?;EFUl=i5@ z05r|3>dZfRZSw;LtR8)JQ1_Pa{cM(a-kPdWwsZxAdwli4@8ko`58L+oW_Eqq8DE6` z{p*lz{bOA-D1!RdEzqB>^^k-u4?&+QuV1Cdn`lp7j@{t|#pg+~<)FiNF=+ti`oHM< zy}LldC%BhFuWZ!^@{f$+S&zjf4qXFQ*L*Wrs4xax#d+TW?oC>UlL1M@>ZGkoSkdPS zr}JBod4Pk30H5ZsxO12MV~daXNh1ETP(Bj8|5e?0Mm5!RZHo=PL9rn!O+`gSKtSmb zuz(7Jh%{*m0xC^FN&-nl1uPh(i$J0xqO{OEM5Kh8APAucfe->Afg~iPo{#%|pZj^f zzu$V_Ki^uj);VjYxGMhyFld%%UJc8B`)=;>-S3+YR}c< zjx9zyz)t0}&ZfeefTiO{K38d)i12T>77vNLf7Xz%>GRui{}MfbyL2(T)$`r?qmn;m zLTvXRkCYTQvbYU(Q(#f&)Ws&kOih1$S?9NP-hj%4+U8HMF-z>{V($%)FL2jHgfK&< z|4c7cWm&t=_>>G#L;u674g(#Wq;}mCo14&++^%Z&=2a{U0akcwZ;$J*z1-gx%nB661)AG z7JZyr{s68u>w$)wSritT27aXoc9#a8p&q#=8T0bG(J3NoS%NmWaD7LwAL1@kWbopB z+NbZD_-_phD56r-Wz~y&j53eSSa9>*Yx_j;aiGtC@Ra3X2#Eju=IYXtM(s}vll3mG z9I&G6!-ETGO?Qtgn*DfxwwdRM=%QKR75uJ5^A{6N1@W!t5GFBWCMj1nYe$vKuAZ=D zy1?co{n73FFU(O30=NG82|e@Z;8uqo!YVyRTwlZV{d1FBR_Z4}0VeD4E7rL(D;bK* zj1!lYQ>0*t>QXOOPwJI{%@w`wCNQB<(wBA^s+ykDHh+Tt-uq^cxG(2fYR2|*F~h$a zhEDX`sIZrWHg9@l4SeVmos2>8`du%ghmP-PK7Jf*)}JI3@1Hh#`L!QOscr5RT%&$_ zRFzyFKCXI|r@Q+^`#VF4KkZGBz0CE77}C@cF-CWf#98-{7jIf0ABRDO7cQkoKkn+W zlr?J@l6}Snw{|uDARpI-1fSd&Wp}+MO1*7UZ{9>~-@piVB-Q#Fine^|l5EqlKnE#E z|EKQOWL0m?4xiKU1(_}F`z#W&cm9ldHpSfF)4^{-nhu$qir;ZzVlO1= zMf0r}fx*I;G8@jx&tGlE_qNtZ+&F*)lhdFXvf(#1km2V0-rN~KzwM6FqDAl(J6>ID z%dmk4(~Y=t*C@(IX#%WW(&qoxr*qHl+bDf=CV^vdbbKkprgH~aTql9o45Wl1$Uj^A zFP>}?MdM88!)QLRSNr?4@jaO%rYX>oai=c3?1;z{m9y;Q$+1O9rY*F-->wmN?9lCs zoiwwQtNAwvkNqU8mtFb3v75!i6<1#h@PxXm0S~t?{D=o9pAQZ{_w&`G1S8S62a<^I z)gyy-VPIVi)sS4+pX%Eahe zm~_oF^Pl>mxZZ^LiU zNWWSx-#MY&_o>ox!o2*iD?4Spnvz^gJoH#eG2wDixY8F?$&kSH(>-x@UakWP{wU#;;e4bSTQ){HzsDJrNXD~G<` zRecLF<$nLk#~&E3jxR2k{;r;(WSosQ26;p-aXg{f)>~T8rrn0pInB}OH;FQ7uTMf%=FI*q zaY2w<$Ffb!-*TQ`IPfvU29;_UPnOV+8r_# zd6|=18V^5jvtrzWKm$$B96EL1-3Em5%s|PSH)WpZHu{;0He9ndFh&YWFsBUScKv^F z>zodV--swUQgEHEuxZn7!oO*vs@6yUrxek@-`}8#=DbakQ<037f4M*S=xdV9oY zF3WYgQx;7K4Zhb*@pzFF`q3lbhKGCh?dX4w%*bfDd+w0r_UHdxra=PU+7gM3N5P|K z3^)bknb5qVP2TIA7QmLmeJ#?C-mp?hgZVc9m8})cWsrz?^=2raZAdTG_1?zctUU=Hq6v8r*o8xwyQ8c&J?MRb*UQdbda$}Uq<45E|$P!hN zP;r7)m!%@!HNPC1Z{j zzd_O#IldzcOYG15`ih?5;u>mv4nD&G1)kFw(<@pG`ex@4L6w6zK!2&vJlE(q`38$IatH~pH#O-#2I5HD z=Los)@IA!C09{k2wq3Mf#8XygAPosbJIVHWAQiyDqz7yYzE?U6COyhE+8kXFo?rQ_HFTe zHb#0eX!=NM1UlNzN2Y{7(K3iig{z{5DJm5;IK#s-mDFByG19?`N<)LlUHqkyE-Yt8 zMdPK79ZmvVzGTl!`MdO5Q#kJ}-6{^=+R70nspKSI3*StHG5xxz#Qop8`Bz)>OK$eF zu%mwO?avli?hhT87m*c4k}fGfl7w%YQ7pnl44<0ht!45LYnRv( zQe)Pwi&kvC!wHHz6WzqWp*w2o*=S#{t7u*il6;uNWeSjij)y!I^q- z*asDi2uAn)-hnVeL{BHH_PM>>HO`zPIXLzCie52oh(NxUYa*VbnvuI|N}{GpJ0M0YX@1UU@Xj)LAr9-^^L*1ltZ5tW!zv(>G4fUB`?una789%flduZUC_iNkSj6J^y-mZZiQl$_8;LF5@r2Z)%g4oC z#SniE9I>H3&O@NLc^+&IJOMkn0xfFZjSX6Wq-h^o{q=rVfaR>jLg8$mQo8To0H}r5xbwXtx@G9f+gNo7>MU$@K=occR@}L#}b3N zDwn)ghn&T#uC)JJ{t}#7S<(%@Wg%4iq#7o9TFTN@ivOVK=HOoCyoodJBcIAK?r17{ zHF(T8V4pEK+LFmw4{tB@7Q7mF6}}JYe4TS%tO|uyG)82tMma9l@+LJ0`24LohQ^aM zBu1p%*wX&T{Efvs6JAzo=X=Wb+pfP6LRE!JWhvW@&(Jfw3Zvg+ELN_|+tgm_CT($a zo?1fvu2~zW}XMJn&c+zD?Ng|TGelej zFTN%-#bEpI?e+OstS_OsI>k<8^J!K*w3j;dC~4(kYT7?qe|>i zqf>>kfj0!cI@+faCJXA`P8i>>_8>ZIeo}t-8-_nY2 zm7HWAR&A=qTq@aLB*2V&kayOMpBG1?^#FA<=6mP|l{mf?7k zfmyYP3B6)a(~0va43txi`XvejT8*h_CT4LW(cHLMaY!q*_Sgiya){W=GE*O9i8$dE*%{G!B804D%j8brH^sT8BER{A=;*yR-7SOE6{5H8Vi07q(# z6Iu$P-6X3Vwpbu7jJ6a&qwWx5aoU9ynSr|Pk3=$$`HoBsF2aZOgiWu#f{DO$i7wbC zg5h&cY#DIZAM_7u{xit^ZBMLl{_KtVHOgltwZQfRMeL>u>;UoM-n&6oZ14+{u%Pd) z#D}iIuc(&HXeh9QzG*;;uZ!%m3lG!pv*0YRey5@_UO$_a*rODanzQ&vK^u`0Bcj%Z z;&=*s;)i7?%j2#1Te-%C0gelcj83gEk1y=EMS$K2I-Nv8JqkjC8pdSH{oqqQmwD?% zV%aA)JfJa7D2x#QZNh5ZO;sxS2>m|ZbC9rBbH$*DYBT=H#?S~T0zz{H;EXKVr{B;l zv9YXXzgJKgFM(Dz6kT;AIgYNZclgq68Bxinq9E08E{;gvvtD*W(|VkJ=G=EW-8OSg z7^2MPG|^ni@M2|h@{{b_&b9am*6Ut~`ekOG@wW-b=)o>nu(8Ld=1t&&<{J$YtK`v9 zu|6y(9X*Fl^b?6a$)|hT8Eeh+qw@yJ@Zd`8F%PH>n&wU5rp_ldjVH3Fg)2|2rnBvI zP{DUE0n5FQM} zL4vs9^B|~!P{kZ!Qr9>^yT9EnoP02eRxmLc88LulO&W}4n2dp6Z%F;qs?^I9k3QGA ze=FX!>94B)n7B8l|MyJXaXm?MyQ@d89aA~+_RG5i$>z7N2ENORVA3S6b~&Tv$0N0o zLyPfWcI^AS=^c+7dMNJRzf`Hdqh;mpHc40pVlDE-}YhwXRO&* z=%`;H*~*V;#Luu-(nWO*)rg@WWq65&mo_``WD3V|3zY!(U_q#ii$ zGh3z#%}_a`fg>FvCs_+!OUCeJV?o@M@En(icRYs5?%}WFazq*iT)0TUCFrc#0BUuq zlJE4jJVE5!qRs=E1d+cC%MW)FRI`64Jp;gix=Q-?! zX_IDyIFn7?UdEc#(Jr7!WW$Z1OD=%t+~I|4M+sxqXNA2^T|~&H1%4VbthGP%23LuY zZ11*Ya@B+L{s(y7IT;&Xe{B5KS^~)GzG z1#UVTzUWz4 zek6{c_r034lFn{!Narwf1o)BF#OOFMk`vb4rrwk$0OCZ7xY(6`#u}mDx%V5+f&e)Edb`xPbilHDC=qudW zx}&oG%~WzWOJc;=>8KJld>h%8Tq%{p_N|d0ljK}PW*%hFsH2(g-NZ1~x7nByU`yD8 zrs?JY5CR(Ime8*b>xA})Z+JSd8!knXgL-|hvzJ)TZpl*>OK{U_$`*BMp-SeTpkVl= zbO9y>1SOi7V);&}A2{NBhO(Mq)7)SeaJtDc34~|!vdYUE->}-pWyriK%68VP@tyVU z^@qYm9jO@n(wt3pcP8tWD4W1-6@^n>EI}@2&^(ZuFoL~Is`?%9YbZ$wHL~dRB3Zsj z!)QWZHs*(sRwL)FAX8rz6zoN<=Oq75H@#e_Spp*yjIXOP`{`jXjAAu(wcIFht_Z5Q^5Z~`Vnh)QCRd4cZv(3ooao%waCdhliB zQU()GtzlkRcu4`sPF?Ukz%hJwhknb?)(Xi<{ zkCPhsZD(;T_+!_nJzaHRTK@P$M!-bWPwv*yV)=OoF8Jf{7$n}3kwOe&LS z*EgeN$0s^u)**983cJ=fdpyq(U}e??u6CkXiD;t|6~Hq(Cb7MntlRwKpH3a9UX}J_ zDNgPld>_cajpKf4HjTJ9+^@K3q)Dk{dZRJC`R`~dK&7^kwmU(5T(-LIr{7A^eSfYO zyyaBQBTLn+Y*G;XxHp4mq(0k?yqnds=zdxo(#ycJ7sCERwS4s-SJi3Y5yLBKSw@+0 zggve3_+8C@x^94m|Dczw%Uz+(7@ON42yG&e86RF0(j}5Cx`|7Ovh5!TZICDL_SU+G z6X2=ZCfR2#03poP$pgAwLVg*Wc4MGL+n%^fT+0ZzUNKQgj-Ki1mF@CIf9YkI9 zUC5fkZbaf=PWR30txi2C3RELa5gTgFKV=l=-o+|;D4}4gC}Wf zQLy91XnZg_Kl5Q&fR9W@iU~#?GbEaX7M1iZF|tcw$a~a(Bv$&tC9D#YrMjZKZWkV0 z)Jmt$4;Qn+xLERE@=c(rXG!ox=%MOQr0gS3Tyn&6dv(%ScrS=ZDkXkj;apzXAZBy# zjHj%q1#6^(h!v~Gm_?(#J-x8%gsgZaA#rrR7#N*zFsU9KHTMG&#*YV!)*+>0A;lQm zg`l1K9c>|B&#u3u73T+T@YD?Dmh*$=4a8L7rc$+PcM17wBf4({r=xJPWkhtA-N17G zB(K2~{j-WhTtivT(e)J8fBD#3rOPhI%FRED>3uA7sl;tMfs=5-R`_a z|9D2@$26&a?CJdkA8r|708>PL?HL@+br#ioa!?mYzQKQ;|RlR;e*<(Md_oc?hQ1s6X^p4*nPykLh^eugEkyL(M1e6aP^H2 zn;P)L32*@>uZv=Z?_ju4_1S%6Tfo`BfOi4U&yQByOf1u-qc17|#rFkB24`J^ygn-a zUew}wK{Vcl=>&@=*Xj2ER{4Kn;(sIKxkmN2n+G#sQd<>8XNGZ_rWUR+cAA*SAlDW7|!Xuu!(__Ib zL=Gb&@|6VDlcSP?S)$c?bX!KJB_@UAWR6ZvXp#{_HyU;J`0emUd8=t*v*^4FT$FwW zQyygLj<{0)1@=mxfiJVAmz6k|5X|fJ(wE?SrK~|Dn4y93b)yXWI8pRTjrwHMYJFQW z*xGDL7EAGM5M2@>cDnxITMK8Lx-AzoLRFM0?v{YBD{O|W1z+|}CKt-8h8qlmy$xCGdOgsuFbXgk9a~eb z+L|;KYc0};=T1-lfTl%V>_93#*^Z{XCq&ZT%?=fZCOUOt{Ll$@MT!o~SptnAazog4 z`rl`@c9&a^6G7)Z@sb}QGJcvR$*lgaS4dcU+4lB0oE9cgljLSz!< z>qAy1FR^ZvI1_@u!u~9{G{{9Ig5NaemN5FjM|OH`>x7tL@~2o0tfVQ!L0Sa;MPb=f ztbRt(en?j+#1WIqzgm*bq%s}i??q|@n?63{9sQ8%N!d8m!RJ2{SerfnOB2|!w*iYA z2V30RelKbFfSJ<^vqN9rJlRuX9Y$On{4NjM{5h7Bbo?Sr4vP(c*0*~4TJni&$t)t7 zOkSOx^{W3Z!W^Z~A|Dc!gcb$-QGcC5(qlb2;?z|0Fr3*Gs+dM_DHsW=8K*O9!+445 ztHkASQ2H%Y7!iF4z9>>{gZp5J@F6kew%>1g?)+~u(P-#e*J>3ipyK?Jc4B7U5WYB! zu@TR|=}xC2_fVexEv)^AA(1nDex1-nx_A}>;8$61+K%(PqG7*H5E{|siCcsM`kFJj z7kMR9vBZLyx|CUC1N7Fjwtcc1rY0YZh#2h>zIPjnwK5&k0DW&Y*A4Z9Y!4 zs1W)pCYNv!ADEB!d+>Wh}B_4h!%8#0jC|a zr=Y^UTBzLcHn@?`c*cM%6y@fZKK#usl5(1^cg@gDbj@#mY>lY!mG7!^ z96sFY?ZV#KJ6SYJ>@i?w&c3R8yXw>NVS`S(Oy@X_YZaeu;Pt*Qdt59)z^v{yCNF>K zapl}XqJPaMuLb-T9rnvD%1or2Z%~ahn6*{?=7-2G6~J$(Eo_v$2I$NgZGGSK4KG*N zTi$)1Uu8}j2llsU<}T;1Co-bniUc5K5m-PK9_x7(Ht(~30?9=sT;SuI(4yWReKAkt z`uqel4V1v7!GR{*r(I?|u1#c)0)0{C&XEsw1LI3v+vXGC28d^w0=SCm>4ynAGi27;s?UMS4( zHs;u-Zv=q|eQ%QOr9wXIH*fID7iWv?76*z?#{JGYYd7C(zN$##euyxeA7>!7!Yh{> z9lO1LI|loIC7=njqvI_fgjAP$^aK{Va+b2%=gVEtJw)a(%?XSAZ(E@1T0QS)nPU}3 zoa%5X%h_!ZSck{on)yFY1KUJmYLhQ`w!w+fBauUoZ(-up5NTF?WRQ8 zUWu|jvSoYzz6q|2iFq}8lKZ4pf90lc2fEM(zyJUG-&6P>JwzyxlL2`|Y03ip5PTQH znjCgD`zs~b3gO(8p828p&T#qJ#HFHphhWgS+L}41tyTB4JfJkvNs1W4I zDv>%NjIn%J83e$u!H|KaTFWtoYV~AyQtkeqy_< z{QW_0hm(W(W~J7rn@?{Ekj<3)k@x%&@#5vVotvg-y$fTP79Dsc!#Ir`wU6a{ZB3pI{*8+aESrl{OpnOBbn>Jm$Vtu*f;@xNe2Mz6=4*&oF literal 0 HcmV?d00001 diff --git a/src/icons/bezier.png b/src/icons/bezier.png new file mode 100644 index 0000000000000000000000000000000000000000..73620cdd758e13b96e9e2bbd18e3501b92614154 GIT binary patch literal 27089 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 PyIsC$bD`wittbBn>2u8s literal 0 HcmV?d00001 diff --git a/src/icons/lathe.png b/src/icons/lathe.png new file mode 100644 index 0000000000000000000000000000000000000000..3596fe3ea9d7f6335f5bf29485898f3c1e6deeb0 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wlJOMr-u0UE&PA)Yy_0OL_yS_}+ z0P>?eT^vI=uJ@i>D9B_e;Be8rlQaF&p;sX@gZzxVg=c0rm`ym7;HSiR-1vT7-PALk z+RaSCmpP;BH)f}sI$0Z~XRQ7d-xq!Eg4|V(+pFH_trkA@_vDk58nu0U8KpN#nI<{B RU>G)JG1}* literal 0 HcmV?d00001 diff --git a/src/icons/length.png b/src/icons/length.png new file mode 100644 index 0000000000000000000000000000000000000000..8396bb147fdd75595f19381a9e143c0235aa483e GIT binary patch literal 26577 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 E0s8?7x&QzG literal 0 HcmV?d00001 diff --git a/src/icons/pointonx.png b/src/icons/pointonx.png new file mode 100644 index 0000000000000000000000000000000000000000..ad15c56e8c8750b87ebf5f20a4f6e2c1001cce7e GIT binary patch literal 26848 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%0AHQLBV5naJDbdYY@W9ZR6aYWH<0U1@g`+yudhJ zQDAc`5n%#l{UVT^=)npVI!)vnWh*Drd&xZ+@G_kL@jgq=Ep8geB!GsgdkwtN{5xPl zt0Fp-i;m}iby3Z|t$1W)%M^?B^0I5Xrz>6C!u48Q8{YPI0|0LTxJn-Cb(^dde6kBn z)2;%U+1=F#!(kB%DT#Vwd~L;AN{*n$xHH+T0W%%4?cN-NQCl%C`k#PH>L1Az^Q?6Gu$$hjtODZC!^b0Hw20fpjsvmIyg zA6Wfa@Syj8NIVC}R7@#_1KrIMhVHHP&i2uG0&Qz_;r7!IX8e%5iMZZ)Jhsn;XT=G0 zqUm4TrmNgYAV;=AJq0G;Nw^%ynqQC?Jh@QkABebaCZ2goJ>POeDVh2rKr@+BhJoOZ zJ?fE!J6Qv{FV_uu!dmWAGr{M0)|TGeD4X?JpcTW5@s^8;5^Ld4=}O?T`#givDg-{>E32Cv$&mfy6Lh^Xwb1_!Q;y zXENid(#j5^WYk@rtD)tZ7hgX^SX4eE#NVu?3Eq3)B4upJjl3=yzpG`O#GZtZ_95{4l%w#Jm$rvH_wJW%&{jY z2>O!Gb8ylId_MQR6^Wh5-y;a*nGFXzHFR(I+dcdXqqe&)W_O!?skwd!5-x{Z$3^6P zt<6DRzz%Xj-UkYo@X(O^DQ0@UsV+U=9iHvOsd z-1DHEgD-AOA0D$)t@+3ahHd)o*}JbAYhNvqjIfD5xmlA{>y)3Cbi0$iuR zs(W&P-Cb9$piUZvgf&MTfQLRS=q`3R>O+8g2-Uqhwdw-Y0V}dhGxnsDGuby(?Mau zq;ES8lQNP$^bCfr(hY^Di8+6t8XC`c$^xYA{{{7Wo_qg5h0VlIcBgaQC{BktxRXQD z)DMUHJ`~;{=cl?!eed0@s{v9iXC%$H85)wydko;B1#cd}P`aa#!6httf75{$IWkSM zpj4a@Bb!znhuaN{OYwS=GC)lj1ml!ys~LclH^k)>td+ne4~qD4CHB`odzLRNRqay& z%AW{niR&kkytxK)#;%X^SKq75<|WpW#m5coHyhrCwjn21ez$oitkCO{P!kk_o*krv zCmav~bsp<7y2jK;k4Y;6J`^aWVT}BLN${ctJB|@gBIB}90FQ*l9ty@kxww`QjeB*xkTyuuf{;0IEYg;!#>~)&AJey!tjO0Lo2s~-skMF98)ko$|`0#@+nzv;fqq` znu|JKnEIgpa1X*m**U#c((M7Nda@z0h2$qpk`o?;&bWl`0T9VH0BV_YWs-bTndT4R zti#;UvpFh-@SXPXdiDgOelr6{1x{g0?&Ms^19?Q?_VT2w!D$ymA5mx)N70drhsEDv z66rVfCU74;V;TD_^Vjtk(sa~c7}Ph+jM(S}Kev{=UtH4t6MzHYy#aN6Vf5DMiFxib zwNxb1;8pSbMGGI*c5Y@n*2xmXViAq|xS@Q|P(}_+eGK4o)!wQuZjBY z0nahqvSFW%o!g+_?Fe;&%geqKRyEY`^kW0jC z$;pe9`4F-?H>JU@Lf>pp#!Y!#oBf0isun_2hDdixGtZSXYHE2z{_7z#e$Pn#cYJiq zf#6SD^=J-q!Cthz-N!|sPr}7rww#_3Cn8g=t3uB-&`6I_YV68ge5SME1kvNE*66Bc z{Rd_7$pGJYxX~tb2bxjyE;sO-;L=$RF5*{*zP%4wfh1)kXloRMIngEJkEbVjE<>|w zq>rn4?>QfewHG|uISv9B?-9K2@D-U2(a{Nw`j{Rt1WVH~TrjC+3e>k8#Bm9aBH;Jn;B8wu zQ{28-bLkHge#mIVR-ah*P~AcBvmQjbD}KRh#K@f|XJp|S!OSp1gs*hygIU>}Qa$CH zaYijX1mvUh$L;em5ol~4Wqh1Jk2*08!ZcB0MbtB$)ygWP&(d?f0B4c|e5WkLV=VRS3Sr5`RTf#ZKQNXMe z1gL$dp=zR=>mH$#_RCNGNMe9_zc(5K7!F4eEOH#x_;D8l zmZ#mApS2I233XtF5oDhJScY%=?B6^UUEXx;T-86sxO82r(;HTCMo6*%BjBVrJXV4l$yWkNBaJ7_&p3xXR8WNBdWLfI3g8rc3ZSmz1|jgxRE` zUQI=VdYOVjY2P?~qqJKcrhC(Z+TVpI&uszs0gFeUzi4|a_r6xkyl+j_s9V~CB0WAj z;CJ!?riX2NeKWg09851FetvZ*)_yV0=@fx|>t-0wmO98H=7*q9<=3y$<4trYFUPL% zLJ|ukS#r=}yI8dDrn*1r`@OnA!X|i@L$0jV2l9>#5!j9;BoCea0c$?#tW=l-&Juj@ z?ygOL4k!H+iPcG4m9eAF6;2nnAamUh7X7`Ozhcjw@{Y|u-Y1C!N<#Qa@S{l$oqhsV zZkhhnWwxv>w)#3auf-KgI%$N8ngVgpo;m&yl^Wn+$^4l&0Je7+XzBb0U%(0+Jca`l zB|VkXh(GYtk;qIZ`TZ>usF8 zA{7C{b_?{nN=nFl#|E&~0bW_87^j*SS$#?D4b~?G-&DIc?Y_jE+(v|6~V;5CZWZ;RKGS8Qf8f*F?N3%|o_&STs@WP2Btyt#k?>g4<)>vw)r5?J6y;d7To;W1I>gbd@?HT$! zzUk3XI81czLR$2r_D*Ygi`oJCr#whgd)-gUQGIC0@x4(FS1Y45n>TdjjJ@dY8^RC0 zv$=v{&@Wt&uRjvxBm?dJ)X|iz?xWr6donIBqp@YLRYKPGUolT7*z1@ajd88=>QUYA z49@)+wYDp!?7qwjj2yvH@oq9lDWS;jMSEnj*zy@DdFlGn_<*r%cSX$2hn}fW=gkdF zNPKAh0kacv+s=*cfhIj~xbZwFMD$W_JvjOKtL^BXrb?;nf1x3iR9Lz^*iH)#w%i+k zYxL}vTPh1yA(tHZ)lH3qMp|qS($Z~{C|{K^h;C7Hz#HGT-MemL3@zD2uGQhu#dO=Y zZ4gPl1bzdM5{{(&YU(|Iyj~pLV?Gzo@P)tH*R4zF%os9Hfenqiv^!))L>~Jw!#SG# zq5#ddht>2t)b$)WaIcE=UOh}O5r4Zcjr?9Q)L$KLF{>&Fc!-IpdQ{vql@n7@>PavHk0Xe8HD>Q zd?vU5KKn)jC}ORd;NsT%)tY|mm}>W@AI@Wzr8_Qdm-DVqa;vK3(Qn75DB8JY^(Jl) zIr!9leRJJo+YKq)uBY*Z&k5?#Td(ZRvT(ZW{@-nT@RP&jhe~LB9#GTt>g&nbE^lhm zUdyh6583l0=eN3&&I@U;HDsG1OP1hJ`|AFKuCpcHAFIp%@D?ec5s~!ds@(wc=c8l4=8oMlMmfkV# zs~{ijaXD_O?b^!$fw{LK9*E&Z%qvJge(W5ZrE=y}yN2Sei;=LcK|LG=IiVsoLC!o@t_s#vfU-cbQePXZWks9r{ww^mI4AK2fayuH_WWK5{*> zI=4AJM_7yrZp=h6*V-#?ASXQUJ@(P<*l=fR9hu^pU7+`*5AXIerdoTs&OpO- zMlsdBO$7?wJ$Inf?D$scm(-i5V-B``y|E5GS$l@47x}vua38rl9kX+s%zHZ@ZZYZN z?Z=Li*)5g1MKiqaBf7Us%yrbm7&%d*+jh&AspmPIv0 zr`eI@QePj3sm)qUE%HFn8%MItOXJPg_Sz*^iu+qZ%%#WXd*lk)SJxogc2R+fKvk1N z*E>AT$91>dEm_Z8N`xmt`&9Jy+`-p|qP2o+s$=(dJUh~3rz&^f`o8{|yK4=ibR&xF zXn^lQ)w|<|T-T}!A#whZ7jw#pfoYY>+JTY6nN#wNEkJbpYHoP)fNF*T?);MZ$(M6z z@~7rE+wNx1U%i^|4R1Mv${|4X=OkrTnOGn(Yo;X;Dy8xRWf&h-UzTU zpuP>z@2Dqa@Ei`9i@hz$jdcf~HD6=hfWm^zPaQaM&(ju!yPJ-Yx2(@N%d7J@7q5qA zZQ-mGjBr*J#B2Zmpz4|iNM4V~J2W&Z8Mk4>F5*8h(amR7&Htwm(Z8Qxhl!%zBq^v# zzfgR+FXZs9=2r&0C8sYcw0Tk&%!svqSIh|nu?zO$L%-SwyZ3JEeTGg?Z@hixfb`a9 z|6C?PLjLL^nL@xIqNk0xd6em}oPrHLYurY_p2~YI){S2GQpx?fw*P9@iRQ7$B!XrG zOu#W_7VGemz^oy0?V++-EZZuU4-@0rtC zQ%*2}tTIiGyb%W}k3$il}5Dq6NyiYrjz8$up{Ct^>+kaSB#1&S4U7QZI2$^mWe0zW_*3cOmK4#Gre>O#Wwf>yJYsoO0MlY^(JHO zqtr-gha&N&a-N?CW*J5l^SfjVga{|!L4b-t)x~s)7lOYzI7QGDpiZ#gn$yp;dducWGc3FJG?$b zcx=In{Yd7#~BgF?B<_@ zjf)Z&^cW%IqGJszWguv;UK;g$|M%_(a&1fw9>lsPBp>Y7FFG=#OSAQ|hxKA4!dICK z!3RkSACxkvZhTX8j?82KoVIwu+V!76QY-U_DoktBYHQrRn%+EnoQR&b+f)pKWw zIOc%V04KA;z7%$Bj~ZWT3nlXHi|DLPuGE6Qm{!?ZKcxqVm6o6131yA^&9xbXm5Ii4b|42>Ho~bal5+hw>*aSKuv>Etm7%ucgEP)!`o7zPRj! z`!Xx%(BtJer55)Am z;GrcB3eCvjWM@d>y@HN{B5dD1sKP(Ovwl>?9pr5A(<(c;lc=mLL73j?S}RcM8Zde) z>LXl~^~>jYH~5*vOLcK{)JvAUH_ z(xaK7wBr6T^h;_(5Lw=KQotNAbEGA{-v{@OQ@IJsUREz!L_;{ts5*PzuhWUAJy9W+ zidrr$0?;z_d_zeMiHDzy;FDsFvTTN2rVju+JEIV?;02O;Es(#4hf#`o=8p;^UAc z4}eqx@-tpNO$j3P)o&UJjxeb4C@SkCri!ry(p>}>Xk*NP_;_0ejFqyQdXU z6lAO5z&=9I)I7Ml$HvRK6+o3CW%E{Xp%bpxo-B?88zXn~iZMOfWqzfGkDNSHt;*qM z8E#(d_gC52RyuGM4`O6>|FMO2h@X`C5vF}ra%F?tj1sefIP`Nn*au^Y&pVY&pPs&)k%Lwil z*!AyG%^5r8IrOO%=ZU3ZmqSKO1NWLjqOIAiHE>J5kMPx~yXbvr+iTQWiE<2H*%X<% z9Ob-F#UI!169_h=j7`TY$*f3)k;Q$F1nZl3X8g=|ZSSdDZ@T|Miqw@Zl%#AmJ;lsu z&yRkOvs${UXj^rmgS^SvgO?^7iPY9C%V3s&lri+Wgy}8$KE1PEEepfI*KAZAU73l}n0^+#Qm-)Ppm>j%>eY#6_7I<9wv@2)G&|V zdgBK7>crlo4i;5@SuRyaWeqN`RCh&q3KDpOC z^7k@(2A?t|f-O7~Da8z9Q>z=F%0O8gs9+klWdESC33vYrFIX(LG4d zw;rAL)i%8-?GU6@^|m)T5oS%*QRLJqDHF@QRW|!gPot9<6I!ZMA2d7>5DW~x8Op^+ zmjqS>XI5-foesH6E2Mw!kMCrJqHg;jXbV2RC4g+=yxxv8lHUTL$(S&U39r)i>PB<~maS2N;*%Rxq86b3qrMC}*wyUME> z5yS10h$11TbI}acZw)4pjVvm}Y}h5E%C;V_{2&GOsNdpnpvjbmW#bmcLO+&eaznaP z8oJ6n%*=q!d%s}^)a%!T1oENiYjrPHrzcm>aDZBEq4@75D&s|fsPeVXlggDM9@5X~ zMG>)Px#BenecPGHJ+0emI|ItEPm=IRZ`k5)D6orJBQoIKZpGRDw!k)lGw%V-%3BuR zsy4Gtv01|ey({8tou(*JH>3-eDl>ydsDkstmm-cil_VDg9ZLBPo?@LW4K1zt1ymKC zLo#)~*S~ZycCL!=0Q?iY2-d#|@7RR~=d~oq8&UUp^Opz%AC=Qp;|&)gKnQE&zDOfh zr2JCN7Lznuw0VWhsCQX2p}t5qE|=%TpM*@e%1YLHuPZV0(KMukQbf1Gc}ay-R!C73 z1Mm=J%b6xpbtG2;63_Sh=sCfBINa)&=)!!~4bjQUA!<|S)WmitG0CTcbL*zUr^V-I z#|6sFJBWLq3w?AXCz3_#LCdZj!W?4l{Azkl;zrEPkmp4XLIe@mR4d*^dPgxu9sKjtv2F5w~wJdzu}o@o4x`=SK69RT`AYyM;8{`M!9xKn$geh&*)k{aRrfC5f^ z8NQG7V9)K~YaGaPv+&^WO{53zA+KoG>}VLUjk%#uMxc*wcL0YQc3W}j%in2OocFH= z70xi#tnxJBVenERDZyfp5bU^CA&KhSx8fz_rH?)8Q9rT{P)!lsd_ zn1{h=Q0<6(sXt<(^CEwZL@N2jK?K&tibN5Tf6P{zcF|OdKEl3_cJ3#xR$ekHpxKUo zvNbjV3V<+_5R#tB`1A*sDKV1S;QtB+=O-{q2BOQaC&w~X4GvzoDJL%aR1mEG&CMCj zf7-=Ks9%e9%$WVoWZGw}ib7R6+oui<*_*fM2!SfU%xO~cOO6aB>!k8_!K9ZYrR1kpKtB?QP1n-MRVEtcU! zz5vj>9xC{Xe(0vDbW+EP*PVa?Z7G0Czf8x9J-8oI zD6d4T?nmj)om~?iWOhM^SZHh9prdNuK$|g#Kem$Z5gOIx3-c&Z*md^`25PRo8CGtuG0uYZf@rlZS zVy&tpGAey)n71_56pZ`ZU(DlA}Bn6WiL_!w16T$z?kt@ft)J|#jkPlFjY((xwBZQKXU|tFs<@Vr~ z*Feb~!qpy>Sj&iq5DR%ky;WO4qxzlnTSJ|@Aj(Z~+g}+(ae&;4f6sAH<-U=PWO)v4 z)=P)AhMk`!XwRNUluIXtmCJHnXYuDI%^Hki%{Fv+n`+aB+kpbHEiZy8Jr9}nMC5B6 zCXQ5`7InF_lb{>s1*z!prrxmYJQZTHqsOAzWiRggpO7`zWIVX$$mpxp1hQ9P^8;z% zM)Pw@X%_a;}%3K+V;4LTx?4z?=sWayq@VAaLX`G*-KP;lsaa8F}ddo|Ix$ zOw0w?!CFjL);M3ueZjv*Z?!1$dFMR+p(J6>?=osBjnhz@#$}^~grVic=vWAv8{W{Y zS)VEdV#VzJ?&6iQJA|gM$m=IW5!BHpxmkaz3X1TSe+<;)!P|7568t5>JyF!waC%gW zP8!KcXH_as+mD)ekl=dCVIVcwtDe)|<+9_hSlyckId?()0J zSzK}TNS-KLM3`4lH)+!H)iS1nLl76zgt!zCjAUkx7r0=4_K@DQR5gSfX8YTLll9I? zAOeSmWUSl}XAyZ#Vld6k8sugH z%K>SKA~ zu0_p){zaEF(v$;Ulm5C5KPjv>@&m9z)!Usy0yuTnI*P7EKx zTZS6&L)S#tlPEbVUs3(bf2rVJ0M8rIc%t&5wR&b2IT&%&hs8J1oasQ{&TL%pJgE!q zVi7p=;X5#mUjs(f^=kPf@DE0&Nk%MjcM~>lXM?}K2cQ+u?=A0kTVy-J;q?Z=>WLKA zhv)fBsU)io(ju~C>jz>p^zqw0Ri0qdtd1H2Wb7Q+8oGK8B~%Qa_2wv-VZ>LUG!Vbx zePWU=gA0x1CPY=A7{VVByzr@pYKp%LYegtwzucdeqrb81t^;CaXZ5(Y@UKDkY~!+( z9}%EOsrMyrs!T=@l>!72CK4i3nALbaZN#$m+gne*n(`_trh*2&qWEam3YRLB!p>OJ zHWUnI^+a_?4Y!kg+L%&;4_2v&ByAlkezXuv2*KuNJO~f;l}k@C!)f9M#N)7nqV7dj zRuLS1hxQN0ia)r8|G;IcFX^v2fI|wJn6$aULJp+o1!ad~J!s--5+V_HpyCrb>yQhN z5Xoz?XS}YM-h_jy$-fr019QyV2+Dk@ZZqPbT%~*k+8$4$up@uM* zsnWPj%+(muj~AYd>X9!YVKW{2=(*$kT665Lax!TZV?E0>RGw!D2S4K4t5OhVGDeu7 zMqR2bWrvp=;B^YI82Gr@JCN3N!E83<3*aFB@#b2}+HU+dlTr|6uSwA7#NXJUBfu{+ zQ!ZuPgjJ`9M;P;F@cAoYLhihH>_6rzYBI7jA;Y}|G4Xm_u<%GRl2QRWLyWJJQvuGQ zNt0{PIsEU$jA!0BkFRB=pCWg8@)rW)Saly$WqR=^_Yr-0C4doJ8S}NXe>mGyBH-f# znU)~RxkHB7vhQ+eXFLI3>2CbjCGvpuW1 zj?%XJwkN64#_Bu=0@Z3ocs3d|%dvv*_@BUQg8oVGPsRiXdxG zPxRg?3~2RgDqx@*V7ie&U4#d+*`?Q`CY;liM2Ui{uGQFE+`^89^3S)AS0?PF_k9U4 zOngzdmy$|HS7ay*UVO@xqXlv3nojO5o*5o65|%iztfzDNR>O zzPvivs2}2Eys~D{3Hu7C0^`vyDofRyk|ti*hz$|hljA>OsZr-!(JGI(VyW+mk&L%9 z1BGFUF6}sfY=T39vJ*X1s5L;T4Zms{ydZ5Q!Y!G^57b^$1+q)o*9urhGP4&wO7+Gb z7WkqvSbo>uFK&jSw6N+!^=?tf43c6^=+gLwmFq>W#E`G>sd=|rg{VYGd|h@Cs~d7? zyZ4qhs0A)}Vx@K^X~MXl5y5<(U-ATRm|n0C+8zdV#=R3Fy!aN*2fv3IuKN!rzC;qu(#z?b;PyNhhXNelho z72z8{zu+bvJr7sFy!_$C*Pg{`(Pmtz9U&MxXEX5j7Sr5pJ=NtU`V)L?f5 z4R+wNH5?9yz^U9Y%jzHX{+d+s(WV&JcNfLSFPj$f3x<|FEup3yh|Sk4u!T}hitf_z z3`jQ~QGpU?b>-}CI)%^EAI?pV8$nZZ$6CvE;Mvfub$#W`Z!RA6BWysbB-R156@Dcr z#IJN_AlAl&h)o@6oh~pcFr^}$xi!1tD9Nf!CCZ}Nzm!ssraHTbd zyS?wTO-PU7GGS&urE32Jj!*+KNWrc1%Coz#ai1dEezqFuAS(f+wjN+S>~tMUhO=1u*t`bv%PD)V3^ct#Lk#`RsLq#xAnt1 zoRrSwx{T@+p04G0y)SuGC`7`q-Kk5af9Z7R-auo2&m^w~{t+Ma&o0PFWLmC6jnmmx z<-L{%C~jrIADBISn6e7!&6;d}-}#N8kl$6>aaK@nNgf6EHEL(mv)2+?(Qm{;kg6CW zq=}Anz6zi7T|0*6VG_;>2=!QTSEr%GUDKM}1Pd*U(5%*pA>XZAVmhizVvl5-crET< zX0lJp?qj`Me9?dur!*w+>%f2^x5bRVQ*32^&;j?etOAeY8X8(bPKkwxqgZ=BM+tC6 zW5Z90c>%c!P~-L}je11K&~7ax*$|vB%Iz@a+NZ52fe3qVmgTKRIqg4Z^vbWt9^D}c z6dsTLgF5Xn*JZh^Oy+%vu$UWVp>@DN=ylE=-hZ4!0=^Ql#F^pI#t$NzTMc#$4_i7- zUGDbd&FdeaaM_l`1;MvXFioA#_cQE~G81kESjKv03l!e!^|xgHk4xVcv4qCB@8sIn z+g|Irf-L@<#(DC;q;Up+zj|i3dyAb^$sVba-SQ>7|E`2o$HcrEKF)jGWVmGK*NV-z zCG7ie-+O|XGC+orxarV`)cQ=oA1QDnt}5V{v%XS8t|49P(=t93-Wn`Dow!(V=KvfQ zTU9yhk{qmattb_O`7X332%$3EbQ%$xB%XH|M+XFQ{EVasssb7w7!LHI|j>M|_PTuL0f;aI%3WfmI^-EMLJ zO|YK)lP9M;Cm~96Y>3;$wwOf~0!7#S=iQR|0!PNF(*0^*wmFmvUHS?eVD#|Y#qG7@ zHZKRlH3}DHd(Xc4b>`U7&#O?=70r#$8@}hgri0_pUJo%sZBEhXJn!guMmjre1KjQ` zGt%VqY3t1vOM#)vR#MF&3Bv&=P(`0lP8#$?N(?tf=(Mhzg5q0+MqwvRWwXK_eu({i za-my3dPZ-g;!P)cWB=KxTW6E5B;Ur7a5m=sXW#j3Cvm-0%r8Fjkb|Hv5Le^YK33j8 kBW5ZG?m#bENSR51d=C%~f)dIw-^~NYFywm@6G!nQ7_I$SIt@mHlk(|EjuXTrSok_z)uV z&-RC=&VWX=xA>~z!0E%6?0(+$-Eyiu0m5-x6HqP04OpF`rjPGmJ$SSK@8N6tBSFz< zW`nQ#`I*YU>C2JB`yK3C1y~4tdguB8-n0L|`u}Hk=_wJ%tOGr&V3vM{o*w&+M%>Cm zQ1oqU?Cbj);=BKUwLb++xga3e304-$O5Yx8tGlcZ#SIz8Sx6;avb)G0{nK%r%HX&! z(5leFZw<-QSJVfQ)Y0*1={<@haVJ#|4Tc7KmX);&P)DjH3`i5Mn&;pkIC^S-syI3M z<91nYSGYNww9awAC&wR3W@Ck$8T@_LLE^lUeB7!zShQQ#J}p}2!&fpV;JhlUa&K~I z3fOx>+30mrdAk+$@0~2;@#D)}dND8L{#!IA4Jd9%47D$$PE2+2U<~-+8R_=<;62c# zbTHDz;y(?nyScbJ{bjSxncLo+aX6;N+~NG}+RE7ZWZR-eL+E=Ey6lX2N?aT)*pSJa z*$7PykdQbI*xsoTJAO*3x@%aPoQC7Vi_c(zujQ=h`h%u-O2;Q&@mtbP%n>)Thh=)-*8arED4>mG^4UaW8 z9Ui$g5j@EhB?G;%OY%XR_)PdI{9555-(~ON3`Tj6gX^uxTd1FZOO%JziY2ck^NOjU zG!#E+Cv%dn#4+8GhX+eSwc$4a)&G_gO~Nkxnuj2NWuB{iacjwu5D}? zn1(|=XN|gMtk_<+U8pW7nU0iErC1xEKGwVkXa#oM-|d=)sggrlE+X!|?k znRFkaf?_U1_?VZjBVr!f&Z6mpJ2BI0UaGB4<492YT^LLUrgcK$1%k5krGQ?)2X)+J z6onlYz57~Z+N#uk?3O<4oY8UE@M&0FbjEb`5<<+Vnq=`G6SiUC1EK1&b~DFsj#EnM z;3pAKTC=X^NIxhy@@wQYAe8l2r0Eir>*&kitPN@z`_?K7`^~}A-t>E8LKQ7J!HhoW zIZjXhmJzVdheva6!__-NK?sq`^!knEw-XUMdl1IhbjRWS+0PE%bhx9El4ZSzr|Imy zqyf~a`-h{z<4bRj?Bs#YQ7D_{9Ecvr+IUlpRbx5KL-iMp)(~M3`$W2FT1p2YD1rZB zUkb?0KNbo;gqQ)nF2dxD{seshWf6OA9GMv{c35p-vn%t6*S#%2e@=MtZd zXsB-#kC8#L`XzHW>@#K(wa65uk{oiP`Wx>qKhQo^tU9cxNIjg}LBBO~`ud~>%dW0C zK1w+IqZ?@h>4U$CCjx?!8So*VQy^$=8o{s@8Oc!UFV#eOEo`GW*DHgeCF~2;)iWxI z?Br}RciNq`cV0DV1FK6{j0mA_czLo5Lo8NZ``c$KA30Ual65bY=@%+gzPc;_OCAZO zz$|b`gl`Z)gWsm;-gP+)56AQe=R^c*0(C891w$aaubRv#Tpc4amQ2AQJQaB% zOe0c(>?D3c$qLMFF7BX+Vf!Rj7&J@mbYQ9Apj3&^u$I^nR3dF$?p zspN0z0oJn;R^h-4j+00Fk2Aqo5Vbdishm{J~nqZ<*klgLPy+_5Tr zZCtmCX)SyOALYdEKJW*<6QA17m2=NyuZEdGzYiDhb#{jgyP#eDF#FI21g>6QL>^F9>ZprxC z>Ysb=iZDqr=wi5FVaO9C#e}d@Q4q-I4q}F7=7nJ7~rUYK0zYdb@LW!ZvY40IpYVOAC77 zkyKEKaVmVQ24<`TD8IQPUhJAB`sH}1UGDbY)@>_$&aU$Q{vSSKLAJISm&{!VoVr<5 z^`yl3`n2sq63%dN1{Nj19L!ife0=-}2-K()^c6q1mj$#^k@90<@d~Y{8LFgRCKe&4 zKe@j}iWEzS!jWSG!wwxFqGDo;sAyzsi_aG+cHs=xuEVkSKw_oTq9jGFc_!ZodaMQU zmD+;TjVirCS&bcn`AJC~{**PczUQz^#4V;~!7hkTzUgn#+JV)H?cfOh&dlt8qFg36 zMFECTtt=#*sv1TW7FmWPuL)YmqVoqBtHQ3AO@Rc$)&0{Q(fy@!;DSpabeg2rSAM+u zFKM`!wXca=aNcS4BR-x%qly^px(YJrbPy%=ZhKxNnbDzZ(@D^oMw8B1(Rc}+acg#L zwCfn>1gSwC%p^5@;4NZY)*!d!WQls;d zbV_nrL5VGxNXNUOV_`}mK^Vjt%jF)Pkb?eC|J`@SXERC~_71T~X{5UdS!7A)Kn9+i z%KJAJm?YC5Y+ZeN*v}pwR;eEg8?9ag=*|eGe#|(#gzZ#DDz9?^*x51F{pTB`(Ejey zi8+N%;j7tx*bfWYJf6e^ui%6u&(wwIv5potrFdIrP^Cnht)WcoAdYS$gbX-5$k4JL zT`_^9^&sTlGs5oKN7;c2xyaJKG}F9{#!m@lJ)8v5fv5FthQY8jp-MsQ>^8v$!z5SN z>;FLR zeEslmdo6>Yn6?XMVPb$G`2=A&3N8>}FOjw%_&ie8Y$sb4ZWbOc|FZb*k3UMv1R#8)bbY_n{^nOFC*+!$@UB!CFVPTD$BhF%_i zqdvYtp3|4QpcjWJwl}`1=t1}d7@ZJYJ>lIn>fN}267ZgXKgLK4YKzSF6+32xPilk? zI~DKwNX9$BHWK`Wsu=rwUf9 zrA9NwX>+)Fmdb#vN*Qz}6{)k;m&pHY5Z8^Pz;+dNxm@CTS8Yx&g zv?3n{_P3&4;&%-+g{=zS*CsaPQ01)xZQ;kSvtJ3CbsW<|ledXX;jHmE=!7yVgFsl) z+%g?=_!%!k$y`sUsqbeMC|UQo>Dj!6%`_l=2QuCR+>N_S!}%)c564! zL0c-wwSIx!@gN^|*R}^66>XV9ANO%rGsFwXBDeokU5lxZ%hox9slG%QxapMlk@-O~ z%$EOLe)uIAhj<~dDE8Z+={o$QJNDt(Vd+vh3qvcb$8kNKvmxq!(?yeEAYSG}(Aqw{ zZj?4PN3SRp)o2o{cF^%9$s%pXHe1w)Q*EHz$1d^`grc#3l-)V2y+aGO?DNb9DWbj9 z7$o8;SU!qMr0ss|PC(o7FJy6rlFX%owuP^oMLC*0g^YqaSj-hJ)D5qy=+{M%yqSRG zc?6u44imCzh7QP8spo&vP^5}Lzy`a0x?lp74zn-tJBD0rkOUy%)KxmF4eaU2@&3N6kB#@Q1@`8ev6{O2T{yEBd1W~9Yt$4qNNA6zcT zadtn(For`f=V9#<8af?JOQq+IeV-7`(5}+JTr4X;=4{&0%O1C9xVi;_4={z0vG-(R z=f6l_VdCnW_r3hxJ&ASN0y=g^*!|DtR*G1@5-322Hj!*;6&yjGw{|Z+l3LDbxc5B= zXV8RH;k6kYp@eYIgtp;?u7|KRW~rj8*xU9_!t$Be*DBcGbl5cp*ex|8D!EU>GO3)a zRye{lE5kCcS%&`kbH8xoI{nWx24_y;waYQzbTHqbr)Cg0G&^8NtBOUO%?~^FF2d@m zrmEPv{OcdX>aQ2e5pA9SFWVMqLN+nEWO1ro*G*}ejsIEM(r~VF-ZHAa*GOBhacI1+ z(mx5yr3(69v!W9E)}#DC7|oA2pX?p~6CeL?Y~NxMuK&bARhVu1C*R^G#{b0s1HgIf z6TsfS22f>i{NLueuJMy{+ilUBxMqgGj=>p&bi60-+GkW0nx>9IVI!W4^!u)H3#_@> z>p3L3qw}9OX{ty~I_+&a%`{ zc9X8@iY*$|E(kT3XNJxp8!B%xW}8g3*8Q63&mwt`-hvpwZ{W*3hXOrkOOD9i^JXpP zxfMwAToNhXRPTfv1#vYl8Mj#F9Bn3xduBipS|Ek?pFwENCY0ej5#TFT;Xg5qPpqQR zl;Ja{X5^MV$|jUJ-T);g&l2vdE_EL86YI`GHlLw&>`Er}rZjzFs~^VbhQyg&3?-l) zVE5!FCWd%;UMkt4^hnhLrGdQ6A?;des>B3VQK55cgB!@@2g_Rpc5ZBLzn9Y)v0E_O z<}deD(3|;bSMeL(130I?w(9qv1 zd?~K+Nh(%13!LJ zi&4-1r5^dqY<9&1J%Ll(`mlLo&Tw!o?hki5X1xs9P#SbG+j-vqu{1(J9OHmcZB9qo@S*Y)sYLaF|5Jg~dPS zQMHzL+ZWgH31?1@1CASoT3F*nLOt$F2O##MGA)*WJ9+k)5^yC(UO~yI zAVOX?B8-*_^?EK!)&)*_8`%&zJ-mGnsCMPD$`-TJuq~d(^r!8eGDSmp3CCXy zSOGwlN^lYQUs%qb33oX?w$Daco?iDG54js9A9U=T=UD2Br^0kexnn4wAtlSZ?5_N% zz%E_*$zDBeL2+$9MIHabI|E$OmC|3So*v(+6iAh-FnOaQ*N;-0qHD$JSXShP7~$DXla~ z-4WCKwGP;CMG@>+^Px;Vz}(NCPs)k3 znoc`A3q|jlTlB=oUHNUe-C@K5HX5w0dGE+PnjB^ zw%HcaL8n(BC+4eudtX;y?WhSy3#Zq}BSXtQawWw2rN-6|HdES0LT!VMi1zLxqVJ!< z8RLZ8zkqcP(&>i%*FqTc2U|_NYq@szqf3kg6*fl+E_`0*T3c4<@y7wRYAP$xSPHBj zd;O0{RZts9(Z%Cld`pR)L_fFADS3tV0}KV4qORpfyr_(k$GBlEcCfZg3VKd+|GHdDS2D=)UA^?+yO11)Oa+8nw3z4^cQwvN*StT(m^ zc$DZ}ROqxoT7`W5-LOD{xWLX_aOR6hjs0|$b|$qdE!9GTYKkdiCT^Tp%g+>jk&Af4 znoozR{_eqwc@)`# zUU~uQ-B{c@wOEv^r{`<$(XAmS@d$(*hKIG;nc(L&W`5kgIN1of+#%{lTmS9c#nfEE zl6MyaN7Y{-=7y%Ao-S&S9Qyc0Khv>f+JhP#_cxeKTN1Zr9IWa>KQJGZXZLuPZagut zv|mH_uNKKivi_qtgX;_C)J>3FE}={?n^zP^~z>?$xeP5?dZjY@Wlm{ z?xLjXB2%lJqO`w1&zzBAlm!qWi1Y-A1@sKLV%&~{Ll))ItO1)$b0sXy#T1Uo{GT9* zsgI8dZ-h$5o-&GjJ`%>BEQMYSue*p(41}73Y{C1>J+ftC(b#3!Wry;Me`b}FOqGjj zrL_mwgtQGBo$%mz+QGqAw4v#+9)@Cq!A%apY}STd%>kE6;^_-ZVWn3YrHBR6PRL6^ z{xz()33`&S)Zg+@D2c{^cAsB?T0`ib}1y_S!QmnB@F#!==Z8oB-` zGjUhcSczw(k~{MXJ>!>EhDJ$b4=E8wv7x;9d1_vdDOY)pmS5VYTa77Id2SU}P?rJg zM;dErzaX1iLLEiuiu#TA@|Pbasml+(L;0cg8>KRm!a%$~Op~$td?;S#)vsn^si=IB zzZW72@NQ0^9YUG52;m$@^%~BhYKqDiGm*2ghsM@ zKzItmalGv+c7yKsHpy_$T{Wr;W-jyoOGT8IsXuDOa%dX9xH1Ul zG5n8_FbHG+di`C`p)Q>}AIhjQlp-2JuTqo;H7}p|r=<5m$>_}Npjgr$0XLjyYXMTl zJd*lqE{}ynJ#Xl!43>#NL1p|^p5(8RjHfC7*aM1qF`}QSAh*WV*<9-}cKE~_;}Y|o zYVxcx)+$*;subBca?#k!oOqFxe{JE^3hEAN(}FqvI|pBofcw(v}@Z^rJ_< znB2bk`Ge9e@y>ju3^ZZ~VTN3b#Y~^|{kn;8wk3Hrbu%?$Ovqn?24`|XQp!6h2h_jD20jR|wtC+R0&OcVX9x#XVMOO_g4AS) zUuw_&qlO%Xt9T?6*`M*Zig^t$xj`!IS6Qa{da}dV#@v%~;xed92Bld(B^E-9&TUq+ zY^ubK)CXOw6RT+!8;_30grpZ90tg5t&bJ53Z&PDmpiCk=-yVVff6;c|H-EEro>V=g zRB_g031&(~(y8dFsG$SIv43jC4JD~jLxuHY#YxdaBXE?nnYg&>>s6P+!tPJ5+&;AV zxx47_6Do$CYsx@Y?4vc$AMtH_C3YcKTy`Une5S!R_0(}7)qKEBebW08GRwGc)SE|~ zyMmNG6s^&8y@qgnmTfuo{MxZcWVYRR3&AtaLGfgBr)oUZn>>@po%x}VHR-N%xXR^U zS^0I*RFAKG&cPd#>@5;+kn$$PAb4oFd!FB~T5$9^L`yf{h=^htx9z(K>vhp#k^Ne; zacv1y+6X+Z+ZbY08!y(+w;KVMn|`$*&IQ6m?190U!a>D%JOBp!n7`>Qj>CG-{HuZG z?F|P=U9jKTF6gY^k4?b+-p%H*QU($!i$jg}_a;rz{`Kod5}vM1w88UR!|VEaHuT}i zZzKg*SsgSSot{Ehay{D?Wd|K)W%n3)P`*});gDQC~8C(^L>2bHM!@FZC!7%!h>iqcdKOQMPBmmHyZU>UVJSOz`|+} zV8sz^*8py^*J-bsjhRND#KO^PY2HK=5SXg-Tb6ByJ-AWkoM@ zCXUAY+uJ{pIDawj)A86D%=8o)uzGpAOa76X z!zC6d3jW-?a35tot0M)fpPAjQ`CurpnK4%gh{EsDH7Rc8oZ~TN;US^)0B3@7>&q4G z9VQ|5#-GU7jL}j5fIStF`*XWM@U`lbNr2Yn_0^jG+_KvtF%p}85y5`?wF8@mho1=F zGSInSO^ztk@5zYIoDU}rmjlMD|5FWma!pOt+oI8QLv&MBq8YR{pSEWO?t{jZCdnUg zq0(IiqPGRrn0qXWaAn2qX{v~I2Q|ygfKEOk3L4=^n~onm6zj7>Ix8E{y8R zQg9Qj#mnr0qg$r~KN8el{s*GJ?`GZZP_QYCCd}fsjb#7ZV<}3uqyaqAe3!q9-e1p? zxuo~{5as!gp1|dBG1Qgo=hGXWDq82^NzGxrH~gcNLw&jPON)V!|608 zRP*!99yfzzhhglaPfM$jcZsvr23Li0G{Qb_xl5P)D9RtT(aC%a_%Ep-4TWSiA}Y_W zPA?&BHGUexS>AIjZlaF#P)$r4)Zbn&Vd*{z6A0~T=E=5cTL&mCBOf|$2RRO)tG99BBd@RRz0 zsOkW%B2g_Oy9JNPCAvWOpF!Wb(y%=}7sVS)6Ut8;XA%6}V!QZ8rPnnyUHUYmx-B(R z4`99=7-5!N*P(mtJu?md&)r!3VTP`IP1T!cAOz&YjhO71M*?1pG~{OlbEQuDdHg*X zM**Sf_`&{ShEv8`*t@f1Ze}ei5xq6$Z$k(!x2}p9b*Nsh0?)W$xVdLg5XP6`u-i8p z$AD_UPM^&9K`GQe#zIF`-4XPj(^6Wxd&%fm9$pZ96fT>A0#gK-wH_hb`$AKFcZ34U*@{n`JW#s zDr_3lFB*z+xP?xA>K-o)fqZ|Yg`@=igi%a;*v_4R-cMO=oT<@By>Z`KF(unZL^Hl-`pt#;MOG!s0!M$P+cg_x&d2*s3cmV;7MB<PbY(PZi(G&G z6GAJi4u(hes+fqrn(_DD-}x3(NJ@Bzd+ow}{LG7%$DQurnysJnG^_RN)~=+_8RS~8z6{jYFH(NpXW(7b zY|9Fc$+82f+3aRLRtc)HNTD`j|?UMU{Nj z`paTD_#;lL+%ZIQYqd`=qC5eiKVc47!EaGu8!*2aJjz6MJ?iVs&kY8{!ZXj?F$p~v zTg=NAXTe!%UCH;UW7U^=xOhX+HzO~$7|VCR{a=mt?jCR;%5U9Zkw*ZS0!vaLA<6EV zws7R?=plRS^x@uxxalZtzr6nQOJMfpkG!|d0FAPI`BXYa(DdI$ZGZcBuq-*~oP&5& z#UdVlovKKZibY#mf(zUDcxXd_JXh-LEciwrBzS;Vv?|3MWMk#F4&Ow^MHkz+GpLtw z^UUn6Ec(M`r&jobA;*G!RA^HT^VLm#H+G^u9=F;Q_gY&Zj3mLLw3JTJ0Y=Go*e)>Kp zZ~$)@orGl~iK$nKM-c%V*=S#LqIdoIRc^&xai<#H#2EihW;;~FR)mA>Bju#4!Eyf3 zpk^<+5J@qIA?u#Dsw|EWI?R?`-Nh&O#dP%Ojmw2!=f<(y3C)D|tQ1lWrg=`h`u1A+ zBKP|>-r+Ic*ZOTiT_h3JQFAdZ$N>ug>JsR{fzG4!xh z$>q=ib*9MSWPANu6u!azJ7xR*6JaPwL>tmhdNB}=wsa}4E8DI8&GZqzphQXcZ=5KW z;xw=kCIVHDup!$z-sl(_&kUJQ$Wn5hdH%ZC$JyMMag=?DlMs==#5_H?tg$GJ&^-fh zC`V68eltg!qK64ib10j7A4lb8yj01K3^pBM?FI1%k{Ms+59HV;*;Hp=oNWHgz)0gL zfL#0uq`r3Ew>JbYPXb%0IHtBU5Kei##-U-u+2(<7pJ3bn3qkPFkQz#e%KK65tY^$H zC`jdZkAujk_p8dUcXA(PB{BJP{hV*H{hg{003sFhm)HjB?(G+APc*1@NMd7B;pYy+gBMLk*_!<({JTGCl7P60>J$2VA=ZGvq;H< zQ7QxbEsbE?llr2%VUEAC=7{ub6mLQmPhcj6KQl6M_K|0%*2BE(@Ih-H<4;79<0nwL z<6eXJa%b1SxgN(jGE+U-Yq?Q^B@SdG#rO*uFW*7v7oW-|5~<0eJ3SjqR7C1x+q7m) zF;B3m-h+e_HY!_r<^y+=zkj=RkhM>hDdn$P`fdVd%$?!e9^Jc zL=jvxaD;yTx68-{_Uaz4dG!ZqW2soiL7<*$c2;yK>h)jx0H8@GMC(9-F}YNIC=rhgFo5 zfzu_PO!n<F$>$Of9SxZOzGj6_X+SnX#3e)vBqt+ zZ$BB6sZaUb#NN=PRENuxKhIyQf4BoTu(NN;i<^)B)>i`@cSnU)D#$hG;}^rDm|zSK@*-EuXQjyT~ajXfqODrqa~}8 zw%1dX)iDKA)R7b2$VZbL-l^QRS~txDpX9^$$FYDaC}6TZejAmM{X1>#6xE=F!wU&= z)@w)Vh|C))tF&(d_OTj6-HDDL0T?l^a!VbuKrvb@N>qkqzdHJ%4(Pm|uDJd9^)G%!^lj{Q+tCXj-8_6%`5&!v(N5_Ll#_K_<{}Hp^BnvxSb*VUh|^kCx5wnGqsZmc#^Urw$-7^_Kz`*e!*v{44As5Q z^_FPM(%*=6L@t^zUtOTSfU{6O`KQSFZCoR`ie@(p@4)#XG$MP+`?fpp>V7$WrT222 zY>@#wJoubThP(b*BGpjte$j%ge2&_lEKw^#^1ZW|cT8hl#!g;G$+x38o_MY2buoi& zLidx3%FJ0U3^TQ9aRmI#^wmN({u^jm0=nA04fIQsNbH($lCr4Srh;*}oYOY#y?Nq; z1mXPoXjV7S7LrPnvWOp~V>_dcd~Atf-i>loU|}?ii7hbsqjV{sE0DC0X>r9X?3nXG zIxT8S9N}7`E85%klO$I4lA3Jb-AMnX4?_Q+q5HlZsNUO%kw~*AM-Y*f;1NP|5A|E> zRovkFPzYf8U7*pYBv&QZ;_Bo=AH1Mb8%DOYzl9J!WIQ6cIZhZ|cNsYDYmUc~X^uqZ zRNAYv+;RY~cO?f(*c?D;!eJnSz|RAdEZ7h&4k|MY-ESFSal{XWJ3=KBWh#oI{jx%MA>J1>XV3-~`H4NS{oecWL8m={<$}_cTdeDNv)aOM)>?>1KbC z^!VQcB0rZ^D(gZo`akHSh->N;Aq#q#O=t8K;XLr(yFR%J%=Yyw<$BhJ zsBQB>`iRw>3wq15tqNRXkceYhFcup&xil`8sO0tK6?d$_HTAip#W5v^8AZGthVDqY zLJpQ75jjTGL`-+gW`6G}A-FW^SA)}Kq(-S2l{ovl3a!GX54JeR!j-3~v!RBdmsVFA z96g}KyLo@-WVdl~zKb`m8VA-ZSB+nkQ+>3K=tkL;i1AF0|GYc{Wip0(_S#EX z?(ffyw1oIcy?^^0lSV%)#a}!n(fY%FWfw}k)2gB1Uf4g#pC%+6r%h^jw6Pf^F|WD= z?KOb-=L2!`OK}fdJ^#@VyMDT&AI^&#usek(@>$r*fN)$$bXj+C&_}srnkM69{a84< zWmbl*2p- zpJ%H*X~Vh3ZehBf(t{y$nC(k<8>qT>cB``#B!aiC13b!{v+TTafX#8qHoj6H@%n9` z(xNmebIQ8UiGL7FgUXX;PQM!o3CJ%vxuY2pFq!d@g^*>;GbyYigAz;Z!or z9VDdlR@3y;G?3-?)x@-pK{pRtLK=5!Pg5xX` zdhd+?iTi*DbRQI^D}pRmFMq#5WEgmHH@)K{>pGq(P%a@E3?$Kqc=ZATA59NwQ0u^~ zBbI}!PHOM8)&S|(R@Pj zLUroA>Yn9i3%b|d4kPjpwv#z+7{I!BSc=2!S6X54s}6=af^>b<(X*X}?(@h8n<*&@ zD zqbc(^jseIrlw3nA7L9#7O>4^II@F{%TZmmWq?~)haT$AGo7isQP@Obo`E`M(2v_9u_J0(S?rR%pXpkKTntgpWE2FQ{Dt=6FcGB zbBykR-CMwbV%HkWR42{@dJ1)V=T5IkTf$qi_u+6jc+j|9zkCuK9SXI@45Sz3zUp9_ zenX0+O+#h(0Ou<_o89c8;{EMlat=S3*1fH$smtYkpyh*{+seR9ufN9tgr)1oxgF82 z|9KMRon>gAQK~%e=2krXIP&_1KQqCDB?@$k;5G7AR=DRPAaV6&DEH%ihLl6ZB!-R` z6;1aVc%!b>Z%(NsG?@Jp+xP0Ciep>;$k2u^8u8_2*JMvuvZk5swXi0%_3dUAynfY1 z>`<@EcscKrnRkkE1xU{fP#p+`MaU;7=#KKX5pFI%f*R#WXR=zIZkKNJWEqIqigG5c zyplU65DEDx7FeU-+WRtPW%zUe)2$AIA4RppF>P#=*82#~m5BIEPIg(-LB2S@kG>|` zACw6=WE@#CLBCI(hoztAxq~#;g>XK>JkErKy}gbfHolWtU13wqip}JbNN@d!>_?v8 z7YUG5i2eqp{^k(t^CLiZ-n$d1$t-@cU#qJ4vw)*KbL=>oqpAP0aMnSW%Z6X>^`MUp z9sw1|AG@3BFoW~J=*xf&y@xCM92iwTsSpYTn8pp>Tj`zcqjLJ&RO|lOPl2EILFyu4 zd*gK5J{On~!PAMPer=tqbR~iu-UfB&op>i=vnOeKL7I1GLz#OZV7nQA<|1}~%MK=| z>kR`mCP$sAVLk}CEEf4CwHn?qge&e5+&#NPG$1DQw=MD8zdCHG`&)BF znz`y{?^yY#2rrF^w5JM7TZrNjfGk^m^EDUFzcc|M*|Z>E)8|kQ1D)}SW(fQXj*T={X{YD~u1j4}`6{)Zr+>pbp zFf1AUwJTjSmiMFkO%dww&&a$I@Xc+Ln)}V>ZX7{ek^}==;riF-+)@02@kSCOVyWlL zL%Og(ghY8L%j$cvOC*#2!fTc$xqg=k%=)|{G7wDp$^p+merH0?aNLkrts>jruOb1x zkY{NqB8u|FHh;b+=Z?l=PveYQE{&u7^6vbCemj^{*SrPKKj%9WIj7az@>!5Uh^-fi zdU5W_v1Sf&=*|j&zT|cvn6L()%YJV`WG3)+3jld$!h}u^-W&Q34@DurZLbTNU1wgZ zuit_AOQBXVVOd{mvyc~X9^|fzWEy?^mA?br!6BZ#+RJ}E%Q7_BUFF|z07BAx*+rj+ z<;@YJgl$-r(12>iUjS44Ji^D6ovbR(H_3o-laDsw^UQFUU)q7OEV(|+G223zdyiq& zsucHHh6~m>$=M!3mP6fITSUt!sw`NHr>jbz*W9{{@r5oSBT{j}2#}c>pl-Ss>*$O- z8!}P$Ue?76R4~B0N@0h{eH(UH?~Wq0*-rPsciIlPs6NlTZDx(Q22)M>O_QZoQP2Ix6!G6QbKs``8;nrq7mSc<%xResXAX72xTO2fQrX?NvjRf_FfL`B3sx zx#MlKOFY~3{hb5IfpQAGxG{k^Tf1j*08c1S#m8Z?t0C-Z#V2y-+Kwl#Vh#e%&lrl0 z{A!zm)n(>oJC&&F&H{FIUbTRVgERl8MSCF;yv0RW$;j9+$Xs=U%lMr_0*uG@Tq7II zwuX@@2m8!I70PU(iR+D@LrC=-^z;E@r+H{jw~(<0$s0jj@m?}to_~5P-YVE=yuoYR zbLsG_*i7CVmh0_!>iESID-8Gjg< zDkde_lPXRHgai`5?buI9iFH%c7_>;%=by%BX+709obQzSN!k?!^thjU;-bK&<0Jy8 zTs8_*VGizO5Y_*MLVa%vZ;*16UB$n1H{*(*c=H)i(`}lX*wP*ixKQ4k8!(vaC}?02 zUDns6zgdPvog^R`bJ) zVxKv~n~|dCDGymAOj7jvNib)&o|Lxp@!$y)gjbc*s+6iB`O$5{5|0}hN@3_%Zczf9P~MJ1*puLxG-MFJ7{lFU z-^oSx{acG7@aq#JZ{tF+4`Y{O3J(Jl>Mm*4O;C*P$SJUXnPa%cye{V z84lbE7F#$%6xn7%4i_d~D7b(CY~-EOTLs;2pt3s?B2!Rq+yp89LGZM5@ZKr{$;PTm z`fRBf_hh=+132Rl2lPyqQa)UV9h{yWo{-OU|52V}$RdE04XHne0NhTNcqK69V(=pZ z)%++jT>h}|yG$bfrrvn(Bd0B*pQW^1BoL<}v|v!)(9)tK=Y3q8b0pX#`^HxffcN^p zWAh`oMo!GKpMQ&oBMw{@&RsNfQ*39ax1pab(kvAG0gM^Q1`MWUan@E(1OLKH@*dwz zq_3@*BMA^RKq;F%z|t9(Zt1AYK@eQrHVD~oi*cG=8*r_j2(69zG_#I$)K9eNI0%5Zo>w7E8om=J=9BY3i*G zQUjRMred(a*^#WAaH$V|%X5=I7?nRa+Y+&o9@l0*p#!S;5fmX(9aGG*WegjeACa`& zq{i-Pe`}46Y}w;!v{sE|A?58w+Sz_w_8L}eK)wsxYPXP_}XvIgb03y>J z^(P2!Pc?>D)$6$Ag(v;oW1)td(Cw&(O}iYxZ-Pr_DX@S?75er*Xc>~239q$580JKm zfG3uk=(!ZtvVl6L`n~&nFxrmqWal^lT%?=ty4_oFCP+soIO1cf-vBH{n=tac=j~pS zvhZs;SHg};OW%Aj5+50kz9r|xla;Td0m?C@VUSg9bf$g6k8|Mt{hTkMc@osS48&m( zo6PU;z`$*58C}f2a8n7cF%M)ULW@^4bFl6J_*plC%oPt`6+-yVlM|A_G+%lMKKxfI z^udgDR*9bC%^0mFHaybN`Q!Has30^3ry>rf#-mPDy}+Lc;ey}O9aV}-BhQkvJ*!Sc z2RN2b9m6kOXW2pI`4Dtd=~>8#@c0H#GM+8Sfeo51(FRaz*#Cr6jecLWj65Ifeo4C# zui4keySnV*J8HkM{|hHnN{dHIAQHqM4fu|c(w=IP$$`XSaV1!_ z{Rs7sv5o4QJ2>oMqdgThpz%mBeaY4P-Y2|V_FX7pu&zbI&ZkH#fkA8|3b!?Mb<_GO z@Nl$qJZQbOy8g*3E2NWrLFDRi_}YPLyhc9xlW=pQeLlpIp<5~2$(29-&ubgqo4S7B4VY*twG#Cci0my7tuK@nZMTJ$siyd?jgoW2u{J`9Tk z2s$aIa_pG1KEu;)6no7>M_esfei(_nFS^0oKJzzEMU^uZJzH6X5RkD4S{xEA*_EcsQ+gqvt5|rz&^9VxfBx^zo@hw(^N`N+t8}T{r#pY@vfBXm$wtRCfI; zIo3#Z@^b6~$1gfhlpzBhvWrd$FwteF?(^sb2^r^H3c9jV?aw(ffM+@u6+3kDU0w4^ zWu!pscM|1(2e>q998UPg6RHxoC}KpM%bm_|L1qIE7JNOMzM{_^bB;|v-X{oni-UNG za3YBf9NAZwZ|O8@)0@{8TD)O%a{B{`Dd+exOe9>I9w>W9Kz8@P184 zLR2n7>*UelHBVZA8wy=py`BqZ^y|kk6TiFSe)9VGwd}-oZ@D*d@#m6hlJ}Qz7*TqqDk{ZBJLwC7iU09Vs0tJbV>V3_BM&TFqI%OcPi1I*lV#) z%j8#Z5MSQz^y#IY8{fOX{O$QUT}z)B@5?A-CV)W84E>~0*%fUsNHN%q<~v8_F8}_fq`Dcy{9{x z5DXU;KRuJEV|D37IP(9h?z^L!TDrc)hF-j4xd=#8Q4whZSCATPprRlmO`3{;N)wPk z0!gk7R4@n#h(MwuqO{OEM5Kfs1R+3xAP_ChqA>HZ}7xWLqjb1ws^>aDXcP+g_W={Az22@8+!4KcY_V zmtuEy%V>LrJ&kX9a0rQzoIINr^PscaR_S#8kkVrTtfjNz8|{!WJoLz(Xva&{(Ymc0 zdUD5~^$v^>M&8(6#4?x8o>gi*80;(y@Bh%%lC0&c-|lxTE>%<-A9@o7cDpgnN?VMqLa$)WS(k5@zrOYQOSVy6G-y%mF0;cGq>KV zN7wIrrNUh{H?d&xVT}rwN8`4g9N!I3dfIgDX>h3Ix%_%?^5bWF^6r*unJa%_V6;?3 zx)SuN9tLW?C;kTc&n-997i>b$I|^%CnuksGIG&W{o95Ae>fnPD`t3ylAje~I1Y%qe#eHsg9_Knw=++tT*$jRcOkG{GRP$)6h z3c9y-{#zU@`Oi@3iSIA&Czu0Y?(RT;tr{7ujW|84Aqu>YjjVZ4()TMZ2w`NNjn%Vj ze*gL`a=vF95qGI~G#hJn^FqnkX8A|PHkO^!jopM;91((<{mRh_@lw)aPYRZF`rT4K z%hD}pGMz6#@P9#xAWWOeHxS8YpMlH zH)B&&uDWOSCvFc_eC)BFT=(2|O$NX7aeUEJq89wd3kS@x~K46&ivS!t!|VvV#Z4yxmMV+H8jkjc2Lo6w$$f+ZRJnFA`LPo z*)g?x^(_4%OML3%Pgc&;7*BDJ*#__09pO-vtMjfUu(m~pJJc!c(b{-*w5T^^Ub9@^ z{n2jr_yuXp^sZ??Wu*|$3vtUGm!A)btb9xe;3Glgyz-8R4_#uj)K47m)KR%{E()ZW-Rl>$Z+G! zqb0^~+KwX}qShm;bDPt1#UKwS-jQSo~y~#z+gLswfxX(w|o)j z(i%+vYIKkaSkvOz^M=6ib=xI>L(VIY7U@OQKOVC^Z}_E&WUcVB#`vAzo*eAEsv&>Z z_O9`X+iOjdbW@rfInYm0*t7e`eY0*z-9I^+W5cZMSpgFI_6|LAIU9&LzT(=cHv&A>f1q}gKz`$x#qaT_-5B>h7Z-F)KP`~N9L z^zZlAX```LyZq+`ucVO#P69L#qWEy6-j06%(O zXF#&HGQ)3-imm&iCv(oUQI&3Z4!|5`KX0g&_bu?cAWvF_Exf;{u4iwf!i9@p5%WO; z1?P@mrb0k9< z?u_`MJN-nj-|`Fck-2jiw9d-1>mYm4JHI z?C*DYE~q$GukaXRLXx;(#0;H~9BxuChrs)d(&%RfzxLjf?_lu=5cXv;Rk7E&_~48o z!`|Bg(T|miSY<7QC{mQ)sbIE8oDRcGf`+gx;pr_P9HB{b2@z zPH)0lVI0UR`yw_?|H`G;sr)lcOi%ICCs4iYkYA;+@b( z(YKv|g;6=|aOm5_?_c|h=WC{eSO*K*s|x&&_vN$IoIK#wVs}A>&1vee#a^#Gt+0p{ zadhS4WoPP;7}!p8%7tix&Xz?3DV*3oO`+-*TGZ=jFUNiudd_a{CzIq zgxwgLBJ*BjHveTbGo9OW`m-U1&b^4@oQfsfEoVovyYBQ1M35r8JGeDZoRlx}XI*Ha zZ=NilDq;?iXcu!VrL(otb5^XVj5o3mGPuePZP;I&4jUifMtZ(Do9)q_-?Jb@H?%4_ zweKxtP_nBxd-e?WNJE-6scHXP_Ssm z_Jf@V!Y82Xx4`n{7t z!FVwE7v@(%AJ)I_Mz33p`KrDhtgSHSyfF|U{O_LdOCYPo!ysHQAak5#Icxro2wJ@A zOG4OTd#UvbkNTboFj9(QOKJqw1y*#Yu&b~bH*g28{EzV*pC9*txSaZClat&{Qd5&6 zPH%Lp7pe9PnLd^b5YNf^7w~+V{LSNKdUys}Wi@{>M~5V!#-dB5T&YnbCNy{i8;y|; zn~$I!imWjoxE{dm)6G!jdb|(&l-d+bRkEKFv4$+27>RH9B7Nf2uS0THw2BuoFdi$q z!9nm{J5k#!JJec5&$UeiJyoYW{MCQ&FOnf*siS6kqy1F@ijlYj8GK~su9Nhn&7V8- zXluv3MbE;6V_Xo|{f|a@`7Cl%w5^vU&#DLlxssM2MKwFw1>8!lnU^x=&0V0n7D8{v zDe}~rzH4{AiCwJOA2IcYh6iPX(!xB9olFvf7AVJ}+kRv}$j)ej`i@gKM)uR)MTNpB z+~Q7~FRaQQAs$Wf1SzEuf3sC>S}dIPY|`!WUyEZQX6Rjl5^SG- zxqq3-181*Pn@Xf*hP(Ir^EGz%)sB1>MXa3RKXYLN>Kko-jO9?1T;1e8qsnR`jeOe< z^+nlx{1M=FYQylG#4nqm=2D9{Zo}(vWn^g&DfF*D_S-Wa07$K(x@I(?1IK7zX5M!tA&3mTyA5^oia;guOBR+%sN1MQ=FUXxOg{qoJX$0>c0!no>;6w|Fgx7Otm2>zs^suV}S{=U=OQr_%TZ=F!?i)5U=kMdf9#hvudNpbm(nH(bC7k_-d&g)3#TSVUZU- zBn~_hvNQlC-U|ClRQIk1?}tbu&%vCivfqlm@`ae2C&3)dgM>P1>ON6GEi*2p5@PyE zd8oTs(s`D!v$B>MIoc_WDi&kA7cC)!wooF~^mG-#L7X?O?&$L_2v*jL{sBaQEfx$M z2fr{L_P#umAKIJJ)Kl(hX$f}U`GHW-YFrZ&srzFtH#}RNo?1P@1MBt0z~4($=CeRa z^-JHss=37iw7==IVp82o)yr(mO&1bh+pyby22#+NB;}djw8g_jboJ31iHYoWFUbk8 z2e*k_1os#=K61!*&6#Z~tvcqIospj#bR~&~p*@IH*%=H<1DYSP9C_HeG`TQ%f65Q& zFZQvru(G=EU`_E!G|S*?<8wzdmzwx4Fd)I3X#0cshEsIvjGpvFbM{@q{CVQgd$n|p zc$0-l2+G!MAj*^-rLV^t+f_9<^AHWtgp6r=cBH zBYRJskycJ+hZeUmK~GVRyhS42K$;tvcxKSo$Qj|wTDv zD86018`qUTEI$2nLZrsJg}U>x$k#x6GFhS(yyC_q&Y{-Mtfto`Zp2;>eOl}&Mv=fx z^}tTb8@hRB3u_Hk{kT1K+4=;f;uhKLXZRV--qs{q<=o_SGeTD_) z8NtSF_W}6_A{P$6FVc_tkjJVykB=k@DDH$tlGzjfvr_P8Amks^{AZH;+n-qG|Joh> zV^qXVYDVq_3we#@gaOLE-8Vxn^I%UcBSOBmQ0{qzzF^pLVi4dq)`kIDkuj#z5gK9A zYr|h!`O3iIeZDuT^G4~G)!M}SAs*pAeZ?Cc85WP z_b1+~Lh#fGE{#gZ-Veb*>c^DI0#K9P=Y(q%O6dn4DySh=B8im#X~}Kb$xttTkN8UN z-bY%kK5tscuqS`8H!}wd!SHM`EIpI?;U^+fYAmxU-~|FHOkkD{#Z+ENj%8__QapQI z9w`1$7^3yX-323j+`~&~T#I$enElFPIb^I#!ZdjNMy3Z1Rir^newcOLt%exMec1!o zJ;%wl_%iMiGuVj?webGXv;mgibftcLg*G}W)l1-~;bsYm0f5xQJl1VT3xhdPOzuD_ z5msS0=8dq&F?~sbH*-mixIR<;VuJsQqvd<6S|Hx1KLwdu8-zxvZ#l88z=i-u2?XY&du>ayg z&BL!gz5XNF`r3uy*O`$Vrp$#-H=GJN$`CWO5cg@@o{t+|3kBf{vA6zRqAoU}K!D65 zB&vZb^%_p-==5Ksg5_T=A^5-j#eDu)lfT5pB!5SX=urc4nzx(=)Yey_he9+^#WpU# zM_VGrBf~?N045lS5_0JzN(iM%B4$&&QNoWr`AQsH^SE9gRe_ddC-EpABbJVZ2vVTg z?)PqZ50%~`Uh2yR^h^aPKrA2`t=fY+wQqL3HZiyjpUH!f%4pdz9W$8y<;1x zN<7A_w*h+%H$O|%pFM-B+>sPsDaUu4C7hhHY%-0t+|cD?q0boY1PcLsK_qL(JZ#nr zRiJZ#G*+c8>2d9(z&Ff`QZW%N{oz*x>ZD{R&qd1%-u$=UU~6v41Zdqs@{833s&`Q9 zy&d4Sh-o0aLd~<+H7iIh&)Z+5>E<@6DJu+`^CZEv)5{8j#ty(^^*a~d{Y#cn=M@N) z6q^!K9>@vNW4W;>gsL730d+>J#ZgbY=a=qF6X*OdWG|=jn(EW|oNO_1WF;{s7KY(R zG_~qBri#H>fV0m7;FjMawtPlkIVy>ylUw9x1L*46#Mi>ZkUmerrYp3NPYE80l8z>A zvfdJ9EH|B9tv2mIw(6oFjnu*+nur&D+O-Fi0-G4LEUwImzv}^Y26PL}fmR`#!t<|I z8QZ}>gUQ&(W->-Iyt*h6+%Geaios10cN?dgf*@!_v}Z!UF0upB4_%LRUNT#ZqJ{MM zU*aut-8_>g%NJ2rRrF1|i~`M!Um>BWvuR>{3Isv1v?7RHvETYAZ`m3;;tjKdo#3%X zmm~<0C(JA>ZHVW#k>zQ^N%~gq3-b25wmJnU(EbKbT%5Jf>dN3=1F}eh768g{w}rT$ zM&v?tB$2!&YUR(MA45qJgt<+J57qW*DqbJ)ydf`wx)L>a89w=0Rn-Y-IkDsKa@EJ3 zktsH}#QS?#@cvTt!K+mvR?4q5#mh9xp<2W({{H@h3*xEa?ejYcPif=dxH@ON7C8al z{*WH_dz>{SE2q5R0GK*Kf}V(p8A10eji4+Dc^B|k+nHp4S~#P6Mvrh;Z6s;s;_rlq zl5wOwDLRQw69#+bAs$t+Zp^L8*1^tU7SlOIMm6W;{Bt@;bL~Xsf-cZyZf>5vijwBi zAyKK%i9Y3SsM}P^NSn+KkamO3ia}1*dLPjvZqe@Jq8@ns)!kVO>nmBW(d+M|o9RWx z$`AkQ3tts`)3;WeKtPp(t3BhmlN0qGOYV&`u$alwjS4Na)z(+1vVRgM*0BB?W<~h! zuF}iVvylIi%ZVK{1@EZsF>dT#Qw|h1vrNY~_2Mok^wah6WTBjx?$lPpu2X zSM-{x304@I8+wtX$x2nV-vgEl?*s~bP|ZiH@7ro+W>G^>hkV&WbKRLP%+1W^1+Qa< z@E$giHy`mEw)t})S<9$iNP$)`GtDz%NxNEbalbbO7<+-O_>7p#6OSirwwZb31-d*DbrOX;=q9A52LG59yC$q&WA+tU_wQ?+Q5zc@J zo8BfS*)#d@D1Jh8?a>j!LD4hcTDUIoRa`I077xn*Y&-M=x9&QixWCs<=!^dt=FB#) z*!YvcrD&~z#7))7D3WTRDAHU?Vu7%kXk?68w|{xC z3TTl_ZBjedT0;4{%s;ohPRthEAg3(rgzBY1DCH{__yzOb-95;vgv>Z~31xJy z2ppZOx2zf*wGIFi$cI9KHF$|sSP|Y~K4iN|du!Nd?X~C3qP*aBo|>8RQeMcMsgx$l zO14JlCMi#6#5i7jEV@srl!D8299YVm5Y}7azE@Hyt61AvmWkRtQ#|}0-&vD_vXnK& z1~(hhOd z#89Tz;B$l@i5X9P@SdN`%RWTy^b#%v#<3gTr^@ydj_oD+2}(gzq#E{f_uy!bmsH^U zd$Mi8w3GWyaOGd+F)jomvf9J!4>AM_1f$cJ>Up$eBj28|T*?m#p5t`e5eXIK0Xbf^ ze5W1u#`eePF=kouBHz zn1CeY9rUdN+FKf%IUG0MNeTMnLc9@=5%kR!bO$Fc0na3_k$vI1GkeB1!LojUuY;ca zIa*~uzQmG?Iim^|-4SEh{53t=+Nktfp!xPmfZU1ifB_S0ET?~){J${qzmf4ogKq29 zed$Qq&1%5$;XZvU8;@x$esd==K8P)shPQ5`V zXjo1syIM`BHSFwjC=@wJ_TSE#8Vlv3v)PeRFJu_E`I;&CMP`k6mu*aHViL4Z{=nq8 zJ`Fu|rNL-dz&2m3uZ{sBlO;SUz?!6UR3Nrq=<{`-kS|Qw#8L-VX|Y=|$-4Gb+9GPV ztQ~}kG&8lhWS-6ROXwcBdzm2z38?;4FaN?(s`xCz*EbvRz0I*VLeU z*@FHa$Z47ZBGYII@v|IX{fnhpt2!R+Xfx8)k3+^Ds%A#3J(#PV78saB z{$=z=c}TBcR~ZY}fi9Vfv?K&Dhf{VXdeS9bRgx&W{lwEaZ+_`L;@o`-@ zT7i-l)N~N$YsOtW)s6U!q=OSN&#KF`T9PK8*#Rb~oT-U#h}7sa?HKikTXFQaq$uX= znW3WaMAuGy04~9?P|bNMQ>-^ctB<&35wftuMuJ~9j~}YPtO4efaV{6KO=V}#d6pTC z-!Jsb&S3jre!I9Co~?(|8fkQoMrTk|>cW;M&T_95yOBaaBY(}i*DFUS!r~ipirKxe z{o8%EbihyJ^Cr3V+@wjfL1rZDX+h~<1e5f_z3|R(xC{P`=t6N8hrw}!Zg~G# zcp&O_7GZtQeZT)$z#jNtTELFI3R*bvN9?Vww~}@aoOXSBTH#at!(GL85tN0&uPVrm zAD{7)4xK?N69~}9y(`BqCLg|-%%#w1w3V3|pSqs_{s3zRbC04fvB?*W1{w`gADmLA zOinfpqd1M>YN;gm{E?7qGK*akAxunLp)5fmY1gn36r2KT0nlni`Qa(3At}t3pRa^o zqA&6>IK*n_N+mX^{Le+h#Eje_Vo?P9^~%A<8y#u_gPG9qoX=1zwxPUP%&5K$NjLR#mM-&HsKf07o3293 z*YJ2e3a@_6GHa0R^Es*XynVIJ?^hIQRT4h*o!2E6)3 zDU5*frCyB9I@JS5ienHBuL!fejv_kEC3BS1>2*$G+f;|9P0ph{K2J4Z;bQwE{`P^7 zcAP3>c6vy-%(M@QI z&(4#621?~#>N6CA5jzr?HwFh>x6K?yNOl`wbD*s#b3bzWfD!`h8IU&o#WS1{*mEz9 zW~=X=7LM{r*H84wYkFXZF85dItaTYyZ1HvHZSR>V9Hn%dax!LKRK8mAYk#*+CtYIk zUC9PT+V#Sox1|q?#AxK@TMfxepSnHx*D$yrGs&w#KLN#noWhJmmi0Q-IGs~d*>9~t zb1w&fA{>yTv{le()_n8Z?k_~;f}XOjKSh<+R5G}?SwCkfXDyK(^9m3{Gys^GAvxIn zB4W;O?J!1wO*kncHsXMuZWF277Ik?Er}eO6%X(*~QmG>Xh~t1D zFi#n7))}qSi0T^IrH7`PKno;!T^4+YwDnCO!rxkE`DoI#1LjO$`1d(rx}?FPBe6fT zwH@brtXI^if_IUp=g4e~0kmSN!KKURr%PzyXA+JyGfHlLCtGwWo`OOufJg4 zSb@gpSd$h+Up66h4Z7dXaK_5b`BhL^+nFtJWV`p@mia#}16u$ooe96Gq6y>m^Gu{p z|6jx*|8D@!-&x_|A1|I<-L>VaOzCc!(p^fWyZ*ijt$p<9#pn^i!xod}tN!h{0(;`# z|M=lws9&eh;S_#4{64)g6AVC$+)1m-gq5t%^w7&_x5l)LcSSdb%d`_03vVeP5wSJZ zv#!Y@2A7LdVc4%?TcQ{)%TH&(F-Ix^T~Y*lNl^m~TM9*u(xQP?Pb^Jv1mwD{?_?)3Gj zET20!Z>|xo&VD;*+Y%SIMf<_9;$erq23J~cZHdXHNLc=Y4dLvDQ)8xbHw1`|d5mH>;YGoGl8%ug~Z9tsfb)C?Ded Ty?Nzt;axm$cdq!%&By--A5A^C literal 0 HcmV?d00001 diff --git a/src/icons/ref.png b/src/icons/ref.png new file mode 100644 index 0000000000000000000000000000000000000000..afd64c3fa0c39c7115fdfe9257775e185161a4f8 GIT binary patch literal 25761 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 Za}DLd8BCI#@E=*8JL7zsaPr!p{|D3G4sZYf literal 0 HcmV?d00001 diff --git a/src/icons/same-orientation.png b/src/icons/same-orientation.png new file mode 100644 index 0000000000000000000000000000000000000000..c612ee5f4a664e3070b1338b7fada83f5b68d76e GIT binary patch literal 26407 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 literal 0 HcmV?d00001 diff --git a/src/icons/sketch-in-3d.png b/src/icons/sketch-in-3d.png new file mode 100644 index 0000000000000000000000000000000000000000..204fd8c96718ef6d66513deb07b2f117f2fedcdc GIT binary patch literal 26669 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 B4rl-X literal 0 HcmV?d00001 diff --git a/src/icons/sketch-in-plane.png b/src/icons/sketch-in-plane.png new file mode 100644 index 0000000000000000000000000000000000000000..86811e8bc993d1f5fec0d220ef8428613ea2c0d6 GIT binary patch literal 26671 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 Al>h($ literal 0 HcmV?d00001 diff --git a/src/icons/step-rotate.png b/src/icons/step-rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c38a16765bee3e88ad5bbaf18af0531a4b7df7b GIT binary patch literal 27352 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 KrIHJ`pZ*`svotsW literal 0 HcmV?d00001 diff --git a/src/icons/step-translate.png b/src/icons/step-translate.png new file mode 100644 index 0000000000000000000000000000000000000000..faaeff0b977198b20138a6aa1e4eece11d7bc01d GIT binary patch literal 26253 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 F{|DDI3FZI* literal 0 HcmV?d00001 diff --git a/src/icons/symmetric.png b/src/icons/symmetric.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb9cad9b31cfc18f8a2a9987e7c77cfda2d6e46 GIT binary patch literal 26180 zcmbq)V{|4>5N>SS*2cDNZL%>owr$(l*xGPo+qP}ndXv02-^Gu6|K2`R(=$_bs;j%t zsjBX$CsJ8a3K0$u4g>@QQAS!^^}ELTk6@s_@4M~-uiq7fv#5+3%y;pDF^TwohjozF zas~l`NBfUJ=ePVmzCU8QNNBo-QrrqSy!=-Y!wEp;+iYoDYf;Jf?eVYgXNYh5 z|0+L<*$O~FaGh+e)qZ{tg`SrC#&FWG$^L4RDc^KXvS&JW4x9NjzXUdZixgvFS$Yyq zP*NH;v0W{XBSky~-O4~PP*8no%Mje6s*vIs?^hvIN1cnW-jlkks~Er6QoEL0_|?$- zZCDQ>Q|j?zrqcOB=F8t5x3u<`RLmM=zU%qMuI;^u@xAT?M(e*^E{fQ*o4f&ht<{Ra zPLUq}1{=g(jSil6Z7Ze5NY15gYX;jYJxh4ob3!6wkx!(>JTYJ7bEc+@=E|pnC*3UX zf$1>_`wjlT9b7p>^O-AMzfK(L8oQR~=8Sm4!74`dC)P@nvl-#$oV*^(m&}LgXxB$R zpa6RB`~-7tTUfs5NafsSDbpa+IbQ!ztqJNn;t7^L2Cqk=2B@CrCrHktBg(|CL;+x~ zY_`=?c67CMj$qMsuEO#f9opzG7ZGbvH1+=E(VtAxV73B2sg|!{@_PKyz zQdeojIg4U?l6a1j;`Xfq!5jDB8%r$%O)C~jaIuT}5?QDh2u9^E5O6DIqGH!Z!={|$ z6z~`K&_C!Kkx4!^0ad<>-A+Eu6e(}uaZHWT;x-6&WML^8pom+)HX?Ej$uV<4#fHOs zTMxw9NKLBR#}evdwCpI7VoN!Vg%?W^!rw9p@^TNMCxiGCr8akZDX=_#3F~(B4{}fy zIJ&p>@+Ny^nxJ!=oE<2tk;%mJho~+DltvK}y6;d#W%i?JQ=7n@MA90vFIR$JJYi~4 zdjY%N-)wt}qP} zd1FmAe=v`KtoFk{;@N89W58Ae7sNO&fTLl7P*nPJgctd_+0c*Il~!vk^EXFN38 z+WZ!(`WEW+p0$7987w?>(+rOmCXD=pG6~E%dmqHnDEBA9W2<1!ozp0&3zToQMJK_t zGwtSqp?oH^n$hYa%^x*Zt_tUC<2$2}CKZJ+R~U=T2Ocph`MNO}jL3n-V&h+E2esuH zJLexXRYt5NIAk(#RCMuYPyws=fx_LNvVO(VK12vJKdR}u*Cvg$&2j)bQ6>v9(WnSS z@|y{ciGhzWn5=&$Px+reZ!`e{rgqxqtL!+O7^2dvr!7OnW~Hk87LRk zoA!a4Ohrhe^!0F$vq3bol{3!y58T33Cl^y5X7ZsBeHMqDFa|E-5?G(mjPJ11)@{8T z-6vfk+A+35B_8RHbK*>_hMBX!Mtfl1F&r6w=nQt?#L!3LWle_W|5B@rp%uydlV}AV zVJyApNh{Apna=Dru-OX!b6Cm2=O0O|$?V^!$+F*S83|Sl- z@!GeBG)Q27hcZ9FQBM%VHsuh*JIzkTjSVsXDt)d3i5wcuG8_dMw zsPn-_CIusTCMP})-g`(8R~Tht(Ib2TRx3AU4B?y=dZHy0?PUdBT8YSzl@F{&!&oeW zZCbf~!{+V}K&H+rcfNWOO&A!VBV}e4B_a5Qzqv&HYM>e6^OttK#DbHv9k+%n96yOK z)R=IZNF{2h3|fakABj7UyJ|8l-9ZZ4kJBR%>CEoeTj?5juP)v1Y;l_TM67;MhbPFX zTX5WbbAtSp!^9JQ0|{D;Oota537_O7GNgaF?+qn3(Ie^Z;xICz8Uiwp4V?(Cs2%#{YJ(EP_!~QBzhGF zf+J#_K~&YxBj(K;Yz&TL;k&5f<7NgyGk&IQ{B#o!v2)44=B0#bR$E5XPE}8C$Q2kQ z=ZywqsY6f7Pfs*NB_cwAK#NPqLV$d_EvHkBR+)%M&}_RjQmg7WH-a`(6;-*HFG0(} zCM}f3tUQ4sAf=Ph$jmlU`cf&+U6s~t{w~f}dH+{= zDH^$D1#ex3>_~a!+|WKZVS!9O%#Td%exu-r$S-5wz;|m|mEtQ2{cslb`qFyQeD?kN zJIENBQ|RkDE#<=F=_m5~TI(N}#VW{DYkHKG6=_tDry)Km`X`K9iq|aaLAlGclfc8p zeDkl%vmm3x_yCffhCfwOkab3)HKCEsFP2(NzY1V^ zP{4DI{D3C-6yA;q6O-Lt34ZgAq3^Qmac;P*zTFD*{94R=D5@Uc?n}7`Exckch&|Xa zMRUtYbjvW@@>T7=t`++Zp;d@EX)6M^e2-{$98U{{Y=RLhszz_)rMW*0$R);et$KnJ zBPpz2b`b{o?G}QOk@j8<1MF>F!D~!p6v8ZwfcziSeUI4#>>=Cod$8OJZy*(6O5KlB z+eaIJ)lRa_xJz+-4yM9y%4C(JGpy3OHuxc@e64VM*a@$?7Kuc154e6srdv+Is+eU8Ap=!iT9#xO~u+|321gyUd zj;Ji=4KHF}4Ea378cn>&!^3n5El7qi|Et#SZ)~^v0X1v$0O~afYNY~oH$Fqx{)Kca zXJFsoG$fp1CrC5HO#}EyDV}Lm5<&XPb)-=<&;FaMg3vmA3{IV1CfAiNk#3>xkN496 zA@kh;Iumq=?B|)O#U7UUr=`3vi-naxp#{Nx4E&iMSXvEedbSA{Ik@wE+W&enSBvt?kklW(J&voPJEgZlbtW;+LBW;B2OaIp#-l_R9*1unsjx>u;?L^DFm~cz9#$uFk9>1qz z#R3Jm!z!(AcmAmuZsIjLQ65n%m*#H_jOF)QZEFK+5(p#yIb&6%(maA~{(0C(H4cW>d(fj$exgK~h@uH?wo!aeR)oG(Y4x z{EP9`Tn6RaSd5gCq;RNPqi;3Ar^c5tF5a}9t-&^M+ z*d8_#aw2X%%Iq-DO7OkYo59Qmc#p2!Ngp?FWPk4QxLzgvN}oMw+TT0))YoJ7oj8%twH6_@jOb%+ODGa<4KSm4=D$bLC+(@m$yK)FXS135}!`VXbhDzA-WKxk_93xNr;VDL3vs_#^b{rN@94W(aDyqxaG$mi!W%lrNN>a`Z z#|R6A=dGuO>wg;b{!=xEpvQpwu8;FhJw1!GsnZENHeD*=c79ZKc$w57H_gby7uqnD z)NsR5k;>g+a+*{i7siOo8(I*XRIoBS3pX~Am?V zTjLjRw%&Co9d7%7&3_9bPs|c>!vh#%>wqtyxMDS5llOpLt>4XxCy^|x-eL`V=1{6D z#M#tI9DG$A2huhq281IZ9FT00)~m#DdY0ii4tDF;7H^wnO7$RJ<6Wn@v!z=B)rU(0 zb!7blJ6xsKOVZaQdMmRdSv-yZzG5vloU3i?nGmFklv=xgPlJ#JJLNfEYqD2)-ql&W zZWc=~!ky{iM*7JmmL*1uP3R40VMSh7y<*^K&j;u*v-=_M2HE^IIaM&UXfQdoPcPsS z(Du%h281*lWZEwTaOw>!P}-evMUkIl6gqd6g|^k>RzX zw=P`Wt7BdV>fQ^S7FgXH54<54k$OI;?-3fAcFPhLR5VhSdGpPV;EF>Vz%=N=df$bz zD%4lPTU-F#T-Ak7l+A4{+wt>iZfYUm&HS+#)hK&!DiS7p{ZmUFAx3&7 zGh>V*?WL{xj=WA$`dCRy7v+V2A^J0Af-0b0| zxd;wtt-e_I7@UTG&G`3|?`P|M5E^-TvJc3k=;!^6HRrwI{~1#jbifKYL@rxen02dED^>7vF^#-IKiz|v$nC^dAB%m(v2&+Y+sGNnH&4vHs*UE6Pje1o{>;>g`H?mU zGnBw>cOcvye0C`CkW5v8Gl}h1D+p~UR>LwfI-^7rW5?5;v~55)a>o=&ai#4_XM21y7@2KDlFvA z1mOKac+<9fmgiB^4!X~l_Dx3G#j)Uu7XFAUEyFs5q<8s~v^}u8?gj%WdcW(O5PZ-m zu+uvE;mBgo!iZBK<()ocZWrwTyE((}8YvqP>2tSe9!D~Net8rBr+ngO=0`NZE`G z8a8xOv%*PvX;kGu_T5`mgXF?!JJMMIpAYi9m#CHnH&3imSoilBo>Q>P82!1R9UPU| z$edE;^~MJkvlF;~iY7W5J@{ABXGEN zup9W;PgG6NO)a%m$l>pbwa>qN!ufdQ-+THWkPyemR>)GRo&)$XzV1|oHl;fQ{Bjqn zwU_HJZuV)%eMEr9_O(EnWWDRYnLj+bIe=U<7LCX0E!W|$F@L#MDR#c^a0AGwF@Of_ zq#S>W&s}J=La`axXsl{*H^0$CYmB_K36Aq2&&kzpRS$JJn^~NaIwsUY;iGsHOwd zf}5|qR=uCM9`%Yx8^&&ieTW~3f-<9r4Cqf2)pc#yk;7l)ZNQMj z*9uJbI*j)AZ_t+Huo$&oNwrq_oC3nSM4Vk3Y?=VkCGbF(E!Qr)-JjOG4NvH&sP(SV ztL6m?pQ~E8vy6ARwTbR{8?2Yv@~Q1BRzysx==iecb&bcaHA_6Y^oTXCE{&Sg1p()E zD^AY^^Pvmbj7_{ znsPapb)9*Ac-4cuN#7wwereI6gogA^v6nA%ur6fgD%QSXI4G2xFFhrahlzwa#YxAj z#!WuxKYOza3GM6EUlY88H36531n}sO0*yNqc|nObAmlekI1&VK_iucjH{Ski5z61- z@%>nISFAg&Exd85<@S^7I^$!<=t7MZv1e~b^UpR@9RHwBY23Z)I#YGuCQvbu8YqJ8 zK#S%g#OpdB2bjV3U`D31sNU_CAb$cX>Q;6U*x79Ot9!@0F4H}AN+u)W}eIhyG)|l zv`|GvA70AvOLE{0X8Hg20;(Lv2i62|Ns9-Jxvg#FuhwjMpCzg7H%oqty@Twvz)Z3pCcX=cvSHz(jf z=f+~sb2<%dR@QD$9UIpomL4$Dc`wN}=?510Lbup-Suen_?|^oA-20x-e_ysPN1+au z_}&q+6W%oKoDnzchNr!W?#=P_m$)S6Cx05vmQIq53t8Sc_i{_NC0=fVKI#A6u zi%~Y`v|zqi$hgCuynMX;wGx4+ckR(okA3IX0>_EZL(fPxi{N&~gl(Go*Y)K0ad7&t zYs2}KgLm!yQT|j+bTKHe$253ixq`5V#sMql(4Cy;`eQ7)%;ZqearJyPziRx3bbb`fC}TCL^>ZJu{* zMbP&3&CJcr*(xFs{+8g(6+wkaDqbPD<61u=gC5l{pN0yi$dt_ecE!IE`Lp)t3sD3f zYHtxQChF4iN(UBcw`zNo6G3xC(8iFd*_5cKmAVul8l&*WCaJ2rd41 z57geL$G{uY3kp23q7GS>lg6X%ks`v`BHI zL}?1F$QXRJJT^YQh6au0sHlh2Yp)MIVg7C=qCZt5ZnYI4t4{Gc7f(bEeKLEHtL}R- z$N@88TZUTrkeUJD76DlUh&dJfw^}WuZrx#OKB{(@27bf%0V@tXhCv;8qY69TdnMr6 z7odcS1=F=YTFt&`6K=v#C^}3x`FxeiZ=Avgm>MV70TsEXt9?9~pcT&$*Pn|782ji$?ui=8IVtF53q5VvA+ zQtr@j9PzNydjU@tr-WZwtu7;mFT!h~l^uD1!>M z@pO5I1{>ZMcz16F8@GUaI|261^ttL5Ty9@M(auv^THET~C!pw&+^r6X#MhNxHg^pC zrAiLt!MttL+?E8Xdfpkd<^+j!K|B}N!aP@9!1j#cr}|v?YnUj?bFp)akLCixj}6Y? zwj#pt+}!rvLPNr*LNC?3%VY^sgs-al*mLl;0q^g>CDOt;aiu+e@k$O3aXzXD$}Rl# zd|`a1!rt({3!dQj6)`#Fg^|Nl{74aEy+y|k1|rz8W!LULUvkl-DG?}0D3YV#OG_FG z{l#K{%dslN=F#i>vOtKBKA`wnUK1E6yb0Le zpp2pP;V~Qzo%Q7`TzP|L6w17}!c@<=z(9e`2Xe`Yih(}?$9m?^Q7_@zTzE6Y8$mf#^l>~q3TYQMKo70yAHOk5B(Rnlx*~*?T z@r)ztH83x2;>>DAc@F$uq(n-+Q`hY!?Q2KGVNc^=HkVA~w z?f2D|_0qc6DKnawbs58b_O%O}Nl27}&^p+4P(y_zHsH%j#9jn151$VvXoRi_J+-bW z>2KX+u_?KwA=3g{SH#%63je`i!H^p4d8yu04Pv+r)l_gIiFj?x?`xrodj#pGHg6VR ziR7E>WAb=7L{O+EtkkWnyC(BaO%n3i#~g%nvq-7V5MuPPe!ciQ#9F(YoLJ@QkvH=W zxpa4UYLdCUqu(=Jw7g&(C^DD~;4g{m&Q|cAuX`w$mi>8)I!V^)GX?-Q=rMi$^>V ztaR^I9z*@1IW|>qUh|kI78-3ak5?2$V`&Uwz)N#=#c9|*E8$E28#L}cAs{qv> zOb04R4}S?9V7*g%tKR1knI(UgUDKYCW9VtM5*lNfR^MrG;y*hB{@dG3`f--2XI;Zz zU@!vY!;6gaL_h{Xmm&f^hW(#@)Y#l+#kQnqXMdKAFTr68vcjg;9AhsFeg z&#SvCK?|ynuh=&!9De=<6omD4B)Abek zGd6?Nlf|K)BqPdV6uTZzMCe3zhPh5}bvkMWCnz3@cBGX_Yx;pO3X$qyw3WOJ>y%YW zZ^Y4?m^nyIbAqkORI7OKK$0*s8y8n<-HTAf*ZVWD_-^|)KiMF;n`sn0_$e$J!#LrA z1)HC`4G5A}E7S679PFMP13DCLErKn%SsZ1L2cA(+|EDh>=L)jD7oTuUk?Nqp`D7Pr z;MfiAP`(K7?&>MpA;Ioy*1ZOQ)!iPSRqdnrwB>eyx<$C!@{HM+B*C@cJ;oXkM(T@} z9SFEhKe6qO%HH!V`U>cGe7-gvb3kdhL5I-It%ng%ye=hWu3@FQzk14B*7d6}*~6;) z=rEO`_bLs+57612qa_=A-4O3;7g5|sZb`Re?7!G%i%5^|^sZZ6NS=Mw^|?0~T6YL? zo8h#3+uoB6IEP&CGg5&1!k`c~cmdwW&9$!Lo3A)iSk7%V;Fh6Td^EO{b2@S!EQ=lO z2aqsinn=d)dkEdESS$=)WsR#>TURSrZ@ey5f}8*yLfL0&M}*1m=QE~!`rcv5~2_=|2oH+}{_cdiApkCbkz24)u~mf{8; zbo{Q>+uH{Y#szH{FA0bM(_zVrWn{TMG8d0MTznMoTtB?Kk+xjKomMu`zeMIG7JS59YPht2$2(hGJ1faNMd=N~4css0rZ)~}8wuUc|oB))V=PKGw|ROZWgn*-nM zhXfDti`Sr@hiv+{qc1d>ec8=5;Rfnw)-pSHr-=1<)ukK#Xu`ATlp8Kd9RVE)#3v8Q z9`~Dg)@NX&7{gZu*<}B~b@y9XUb5WcWrEqzco`4QG6*ijJ{jOJR? z4bJk^CX3sP3I`>MOFAm@USf#sOHtMV4seig1dE(wGL^0Gr+_LV9*XIK&Sc-l%bU`w zmFjK{mbn?xy~0kUwu1x@P$}k1M7*<9RuxCQQq`bj{t3+GWA_Fy0fgKGX$mLtUnlHqccN<~+G<>_x!D zeyS6Z8_e>0Z_uWYM%j5bnB&aaCGi4<+Y!OF&AT1m-LFrp9Ei)_)=HI!o}Rys^9#2G z){z#&eY(EXFF;&uPB*yx4m17;<0mk~(xp{Ghtyl3L{sh$=u!uU5A0SP3`|C$B9m^) zyBa1yxHvGSzpd`H4YV-F1cH*LKD_gy+DJ3N#+Zv#Kfy-q==)<~YrnAMJfp}dbrl91 z;GN|0UnSA@r%XY_Vo3S=@Y&%~n_~Hf-qMbpk<+lpT3|(q&hV&N_@BfTWWQD`jt(^+ zVk=8Ddli^-Ue1uBN1YZd?d0bpYu4 zJwfCWev#QD-@jvU_Qr#%^*Ou`4rQt@S*Jc$_~Mea9ri|Sffx~ljNE06#UdR;a(z`0 zk_JlCveBp&y82j26?-ns4OMKczetolnr5(Y-!X``KWi;%ndAqX>5R(1#R>kY76{Fu z4rWIo%RBbX(S2O-7&&Y!WJO1kIC%zDI_Wb8RJwWmD)2eMSD5b2TQ7(cEpw(EEhSpa ze*Jbr7((h>$Q0&F-ppJaaWNT7?K3*Hr2^p=hL19?cxYUeIgk9!!NDDNVRix47PJ_3 z%ss^HIJ+Zvy#`GO(L>6)N^{UDXE*CCDG~&j;D`gl?^jO;k^WI>4PVfcEu_Y)3F9$Or?lh&96$3S(3_M;3qTAB=TU`&PltA(cZ_i6^`K2($nL=&z{Z*z4}GX zBHgKanEwdA)od5Aw7Q(q%$XgoJP{Z9uO8^OG*FIV`>G1NDsN1P(4eD2O@j%?Ll@y^ zFoP-(HxqgZ+Jz%9rN;9fdZ%$U*>Jk*`8~(ko=~&J9lJ7(el#l)o+;gE_AopO$v%Eh zjx|(qF`L85`)>tteoNAwANm+>b%u znG-2%qNO2n^?YYV%C%~RCCk}!0Ke4OVveaL0rrk}4bc4G(%8Fqt$NH%j)6oCvUsHH zbAJhiARUE{B2MV69coJZ0&YdQKDYD9iopaEZ|?(f`q!i?e22ah7GU%^(u{8P-3is& z7)s@gnKZL$+TIri2u8sQeCM(Ca6MqYuS`#o`BthkcFCOm`V#FGoP+i`I9(}d^9IpF zGOtB^7d{BF3B^x2u)}T7;LG(ZtB>b&n-bXRBji>#(*4^8xt4bCixFh?bIjp%nf@oF z5P-v~a|ZV+aq1>cxdYYZ)NiA(n;mQmdVoSwVcvFegsokdCj>nwP#4AQSExxD=vvPX zFep+9wHcCD}j={1WRNk(+odt)ZCrA3*>ydFjF%6UKzl_8V5#MH*jbk5~`uPGt;v>VpKvlQgU=vaU9 z_IH=qM$H^<^NvTW&CusT4MQ)ltv0&&KuPxq(&Xp0^YH?to7T)i8`P>NE-UFi+C~lH z?8~GCrY6v@&OzDCpdP=T-*Gz|&*TRN3Sw;_(CH8EUJ^2y=j4P-r)ApUoL2Xsq`Pbz ziyy>;!-5$iqVe11M#h?2KvD{8$}rzT$j~3jT3$F03m#4=~{yOExJ4wTR(FFO4BR&0&3lmz@e7^rq~2*SW1NHqv{s6^`-(neIY0_RsJ1m%}6o zcl3eBIrBDMx6ZKn?s;a{TBCk6#_Fv3?@9W!!=Q?*GEU?qTpN7ZU9i;r_x9DY9j{>DiU92rDX*u zgtQd(%5XA+nt%wNxAbvvxzNze)L>t@t)U5x2_pCwVQ~jOaCD=l7{bUDW5Iu- zrqRHby!44n5QGCm49pwE-s~JpO_WS^6j0BqdFh$qh^nq>Au~&UHqj<0o;Ea3Ye9xf z>^{d3>n6WRH9)EcB)(--`;ttj!Q4Yax@|YlJkJ0*?%vET>RAj5p=IQ8cZ7hVT)IrL z<@L*1(v&|uC!X$taM_(BJ|*zo6e1toh&~A(34z{2;!J-bOSLKiw@565uih5-LX_Pn zv&Cv<9so;yl=sFc z4u0LqGEbakgf@1*yV!FP`)EHcM{O%+ch4-1_jemdFY4U@-oQVM%DQ$0#-!FG@!;aK zhRs_lVTBajFGdb`V9Uhjh{#NNZ^d-lDv4(hvI4ch#Fj(*z){Cec8u@!nEa79$~A%@ z$p)Zsdy6G$;IcQrO`UbFRsrFb?=+S z*3%?zuCl;FpD+}}Z=KQ^x1y$Wx7vq@G&PJA!uhL8Whq=-2xWKJjV~l0v44 zA`~y8_W8>N&_?fhF8Q#gZOvFGW7RhS2KnNg_k_g3D+D8JcDU};>^k2XuWw>@6euYU`VM)txbk2?;$g_7PDKIU#tVk9VK8S z8Xf^OsUWC`++Lqrb1577Rjt1!oMFI(I(5rL%{#>Hn$UhPZ@BbeC!C5W2&Qd+J8t@F z^55|{A3rLrdkbDV^tDI7a1bSK| z4L#Tzo*$s`2HV#dz#XI`%mg5J6LY=udhJ|@%t{dI$I`#GP5<*Cg&f%d^%k52ka9VZ zH@_k;cypo7KN54@PQ37udB5j{Q!({Lfo3tM4g**HLyj(RF`HMHFD;s4GQ z5mU?z3$$oyg7+P`OdVTtpe+ybU0jpY-cZ2bd|KenwpZAY+5?(eB*6})>%Fo_EIoLG&s>jZb~Nia&^QM^@D`85OqasKXI9SDp-8o#=Ict>JPh-po9Vh zTajAG3mi=j6%w~B46~n*l3;O+V zN=xSsyy!ycT;hV!a64d80Wq;bBJS0#H{Xsu!nr3m1p12KdvMYYd_E7*io{MF=oJF; z!iEE#7QR3H?H>L{&^X+buzSqD*4zMqM9Y!32~oLU>vNEo@IF)?OO)FE!vAPOyul$} z{5mQzUKCjx9j}WXHa#P<`nV-uMwG3P;>7Jae_{ePOTRoVoC-;v(sy&KdEaG2qRl_r zfiJTo-9ed$W{OlsFehA#QQo~K)oXJ6>)GzO6XfUn#JSG(>+LbEV`z$C3BDfc{eJTs z3TBrEB&^7##iKxWc26yf{X`cxg1Lyv3P44-AW+2^_d1;$qTqeRTdOCI#C|8shsbp& zZ7=)?e zsWneue?s6@#a^E#k{p6F8qCMfAoY8}cE^u@gy=_FK-h4aBWYz3pz=c^8sZosfX;=exL9R2I>YiL+ch_|*s5Ce`4I}0&x#%4M z;%avGrg6@i7koBNIyo>I&v%`2D9;W?p%Uyf7fmdul_9Awc^)w%XvjAJh?nW3Gt)}R z8K!IsaV>boes%HbuX?9qul^_l2pO#V$aAGEz1i%;*g`cm)rmrNIwT^L?0wg1QckLep24_PwxQ@OIal|& zq48q3JV@5@Z%D8Ag)adrY!-fsC!PCdNe0Z}y#kWf??|ZcMd2-SL7Ip3ckE_e4U%p- zCvCpV)RbD@X8;!~eD?x|(;bHmE@3GKnh&%nkZX~Lq~VO1*tOy~-ECT3Nz{{;uhm3A zFixqpTC9=rg}I%9wGz7JLy zFR_*`K5b&Z+wm>54Y{}rc+9(Ch2NBho1qZ)>>?dLm2ngIxY_xCM?BrKh=MFnfLJCstWx2#4g;t6z#{}o5=WZ0^q@_)bT7Lq|fffSG~g zLYIgoPYN#NfqY_cN5$`xo9UNBA2DcF$Fb4MM=CmWl zYk6bLw{|MFJ|586uJOiBjnKAq{%COzgFJU9%QbJ{{Gx)B5-cAw$3|K>rm#^1@aL@Q z%5Mmj3-^Rh_ulWUCvYUG3Crj5nCRRx)IkCEHPO63;yFiJHyp6B^BDDe9HTC9`8amM zs)YxfeQY9nT|F+9Nx#kurA0C{*dAttuw_ms;C-Vbx%ts@AHp^l=0C9ip>MUP;HEyU z&wfIOR0|`jLS(q4TjnX4G_^b->w3wJKQPkhj*o6T5o)(pkLDs5?#DVhd|U?mC0*X< zC>WY>A~MywEA>nRO$-^O$F4mkW;z>A5xt&kO|EM;2&hU<2l&S$O}3yr&`g^5c!1vk zm;Q2Sv495j-9y+4BpDlFTcbG4sR6M-B0cF#Ihsu)eL@YO=VB<{QRsB{Bm`WdN9d-* zUvxH1Uq3wNV|u_CEM1Qz_M-RwL6)}UYo$QOkxtjhYABWn1)jMz|J0XLsIw8uCB1Qo zQ)+CsV={<$5CFIk`qMH6>R$okyo5&?^lNbNuC0P8;Xu5(jKE9)G8VDbFP=TzU=aMg z2T|c#K&ToqdiU8CS!6~iD}o5&D+Bs)RzA1PQ1y14Q3ns<`yZvJor^J1Xl!0pd>rj3 z{kR5^A2H&^G&7ymsy|0xWaoOt0jB5?-RM`y>kDKCi$6} zjQodGlxQsE+ega#YRaaCl0_wz;nocxHasOZY3c0ZbAyfbR@H(gBg6Ek)g1Vr3i3I1 zqej7c{1taQLtYIH;~G`Dt7WR6F-k{(XPg(n?5i^fPE%i{m=X%3(t;<_3)K`f4Jev| zpO@?pAd8LMR+l(OrMGyogt*TuAb<7xm=P}FlJ+wGmx{*Z!J2U$HQmQ$i_1(_nA>-? zL}V5g)4iw5JR2-X{`=YWJJ1-xa5#ftQQ)X0j=LGLJnzME*FJV8)qxd7k$VSX8NVN} zf8$hi`P1=p|NbH-WEfDN-LguU&c1iqx9#M;ea(!Rf^9Qwu@X?=g@jvDHo#+iAt*Q< z<*q57DQuzM?>+B|6e+?m61NcWP#mI)|K^vtCn@j0#qG`oI{urSEj1A%VYdJ55GOwU zNE|wivpC{SsOmg+c6_5>)8Gx)atpoSlJ+%=vY1phtf_3!C|5En>l>$Ul=Y~?^lVyC z*Ijt_-VyX1uzK>-McZF_@V8m!dvB^n-PRKl?eWtGzgG-0KWf|Wo7wZ@V0sk|2&hA` z4Ty8ipbYNYu)uh+)<+h#JOX{LxOtNuZ=ySWJ#mK@mRumsR)CJ!!=m*xH{ho4_vr$O znBZLwySCLB$UinlU^|hNI&uwMTldRgrN$g^mE;F_x;JSbO$H{DXppt4V#i!4oh@ub z=6N122KqLC#b3DOpICeVCW!@0!vsk2W66wNxYt(hn6&G%TGkg^{heIb6N;oSJ=cN_%#y?@ox!QzmSQrWy%`dMC``)?Lstrz$k&81fd_> zNd=wE0|A;}O3hb~=<)K95p>g4Sh%3Gks$~^3BGEp#Wk6@qcKS@~t>@~K!wKo=N z#;N8-R)11QqxH!up_`z)nrxU7g;i1^|1j|DnwlQR`yigfp+|JVCVqxl{}~&Nsu{f- zg+AYuhb!ASjs!)dcypy2c9gygZExF%u&vNr``*h~L~wGkf$(_+RJ}w5u%PL)P^ci* zn~lqQ3xC!FgBpJksmdy0yT4~2NVRsfmv}M=ff2I&R6BWB@Yf5cvM`g@afT0Hydmi+ z1?4O=WgVw^JLKNtbfPHy8KnDCZ>9RJQ(xg>LWO%XXIGA1LV#f9yNe5^)_y6$*D=-{ zPhwq5tkW76eFF)W*%_N>5u?>FQ4u?d8N_(WkWI~s@B!vH!N7IFWNDVxHR?KP3b_Xz zzheZOnjv(K!^;Xgh`oMaS}QDwUlS{LH-XSROv35Gf~xY26hgLwul^E>McB7##8>we z;?&8=e({XRA$OGAb)J&M#)dHuzTTK(Fnn~v%xsb_HRY4hDA49FL4VSq>OuM7I+iGA zm3};5d@4mx;PaZ@Y>wV9K(`}?_$-mZbd!;Jip(ZrhufrViAPxlT^3?=Zv?+tZ%p+3BJ1RibUf!>c#z|-qHg+vcHkooz3a)_n+IE+om;fr)E z;Rn5W4vcm7o{({QIZ~o||CDXAtCLYk9po_p6~tpt@r)& zt+m%WXRUq8-uvG7wfA-JYu#SG)eo-T^-G6)Y;NYjo<}t)SszW>c4}-lJmpdIl}F)` z(kF`R!O6cqI#GAG)W}`_4GUwWBQjN>&IVYh?Vjh?sK0Nyra5mHdEQl2*Yb79++f9* zwshSxK1g#6W>nG|`ZB0v*UqarGusu4!0rHbA=9a28%);tg{T=!i$OEKwe+1i(gY-s zY-VHFLCB|jdyUB5S;IDIh+(Q{r)y4Z+~LY;{-M;zMc5S=M17xYBk7>h)r#%x(`gs- zod*tnW9XNi{~QQ?>hD9UF9k(X6P>U-Tj#zc!BT&Zgr4~J^zI8w;M46L=+D)|19dT{ zXSBqjcX6?`_ex1WGr|zYmKdCYi`zFtM}loNDSO zCgRBu?9AsCod`b_9qxp1QLoP{?V~)?dOF+v0)+5e%yj<1?UgGpAhBz$WKZwDkM@h# z4r}$kuk;wRE&t{GcEy0E6z|#^;o|kgG&N`MoWA7kk;;GitRJrXZo48!*!k!4;zwj1 z__e1l);R>Dm4WXayNQz{^t^R^7P}enVtY<${yREqPMwoqi42y(auO%&-4^p zVN15qD3`hcWv`jCfOmCOKZFYm$f$J35iW7-k=5DFnR${@T*TLG3}>yg`U-l& z@7Dc5qpl4%evTgd@vj4CA z#yB&NN9Rg^R8KK8brY;0{&5R}n}{68O<(agT^0(M=7bDqnqvC1BM9x8(?1u45crjY zIX30bZPxZUr`7-i?GVn=eVg5i#VeQAU?-j9!_>gq7T2EFL{^~JF2!pKe))`8Kk~`r z3ET6Bo|#G4iX61YZvFD`Ajw%v@wWYKlM^@Bnx&cM3(FwZ*WckhpVs z6_l`y8jX`-agyodD(o#_Lg#9JOzNOkmMP)PlFhLvvsn83)|cCE=FVNZR2YD4JAug~ z!%Svnm27|jTl&{V z<%g{f+$(TIxXp2;qqqE=AcUKlI2GHbtlx!=AvVBzXx0hIO~XlMv>?LH{||1xGC$fjAm8a<)rJW|E}cf!Z$^mu7MxO(z|B0do$U{CB{m)F zv`W}${2eIa`>(o)py?meD2p^9#`h|>XlAqT{wBY??vmie#(3*{cNvB71(pUqgceg* z84<7kRvxyc0KmfnSJ7e|1O*7<=k)reYs=GurntoVPX==5%$wAiM&|(RQSOt*I>o?3 zzYB_#RoMKyJDLVgc4|Dhj$Gr;t-+Z?bD{m&sPg+;LQAbi|>I-;`EA+A;zW2^TzDRap~b^%?b#-&p3m5 zX5e%09mNg~p9tYPNa)JFCM5@_jaW|pE{HyyOw1~0K0=wM`c^%Q=`FIt=E>g=$?JG7 zUc3ASOljvF)Iu0+T5V6dRo@q7DD3nno)sm5obpc+^UTjYX1&@!)5P3VkU5U(*!^CaJjd=P)r4VWKMzzs#dN&fbkR5DjP6~;MO*j`;2e4JFk z)o}BH*GRmDm3F7;LsonJ@^zwOmL>633l8q|K?$&(;g$!{2HmZT`_onuN!lXyEsVHV zj}vk>c`=LnAG9kp1gqac@uqWp+F*Ca`~qg(L<8K2p99COcIV1{sra^XaHR`qUA($4 zy<)&CZ&MW{Du^2lfL-cu_liAoGNXsOn%q@K!i7IpkK^1&G}xX(P5N(EV2^Fbm=sm8 ziCmb9%GB|GzrS$OmWOPEZMjhB1Sv|Hg^nDeT7UprkiWi1EiGnF@gC|a| zBsp05f}1Gq@75bmkODV#X}bp+X~mYjW~2n$1!tkHIG2DDzyJ8=FRjf_ggJl490+;i zrdwdYH=3#jFw}=rPW=(C?loJYE7;1o=@}cp1GQyJqlgeYbaY&_nk7~?DsiE_ez4|P zwB!;9rD$wV_LcpFZ?CE6e7hBEt36GreXo}J0-IsMTH%j8`|t(YbfZ&z?* zxm~w<`eP`u-5tEzhim%ZV=q^G%-1a_AHpi@@JwLp}U2m{BA{9pA=2*2e55Z z6a=OQRNkYArrnJeir2mQp*49 z+Y@)eKhS#Ci9d1o6PRl{nRiYBg=691AK0ITBwTR)wO+3T%hi*Pu(qOv^Cm!u=)Za* zD21$+41sWiknAyv^^E0PGHCUZl!9=?_0k)Z9*`aju`<1-+v3P z`j7J*pBwXmc$j{%%T4X3XlTfgr#5;uh}C-r&Ht44lg}vx7xDv|gDs!S_3#aK%4`2% zj|@sdtp$%Ng)-wNY-IQ_E*>izH5bD;6kBWAe>H?h($7-o`Mitzklq|lS8P}=gn zxOOMEkXNNM{Y=jCYZs`ggD{wOi#0t%x^ml}+{Kysp3q=qbWlDlBg)6b&Fn?kJndL~ z+jq=8Oja{AaE!h&wvXv8E)vDz7k1ix;#BpB2xyuwNGpQ`Tde9b!fE|Yn?@sIP3wJ2 zD*7qu0G>>{i4uSv>}iOI=;Y39v=Y`{8}VNuwS#KnTulNrPy+cm2dyJH`g^p4mzifvFqMUqw3-L4EF!Vb4(*Xit zwH|7x`3;(tf;jZT>q6$nl-awquKTU4ELFKkxtA5@vbhBEd8@u(;YWrZ(;|i1X9Jc8 zy=1D+w|!sy5Sdk3(gnL>C)Ine6SL!(yuFXS_;!)=z;3O)vEzQj@5>2(cou#+a?~np zj}{QftMM8-H%@hQ zVedWh`r)0mDEoEC8|K!lK0nY>9rd$iXF5Z}RXJW+=p= zPwH1>ajM?QoB5x|^_6{|`n5^wE{!AtGOMVrX>Dl#F~+CqcU>t6GK=7CN8h|GREzzT zgJToxH>y#2)A4#!4w<- z-}+-~eLj&GOewBTa|N8L4uqN&%kI&b0j$C``jr8xv-(n7x)O=Vj*TLirE%WMn zVtq$IlYbj|t>N8*k}r8IM15rO;)|G9%{qbk4!(tZIHaLJIWiHa{gN4_Yzr&9EAJ~H zIUATz7QSrXkcFjS9}o6t&4Gx0$%ofdx2P~GpIDjG@|@Z3(+V=!7+kJpCGmje(LxDf z-pIZXw)gDkS|tNT;qMu_s!>GkJ62V|af1XB+V7Qbw@aO4ALe8v+OBTf%e+|Ymb!R) z`cFAa+k(}Vm6xQi?f@>T+^{KpWFj;I9DX^RPfREatB%O7-l#Pdd6QMV_}9SmZgv#r zdLW859~e{yDkRSt|8he1Qz$$Y7kzrdzr3+fsgy0>A7@fF#Hz_X&UQn*WEWp4IkKXx z(^N}1Te7!ELZJFHw%3f}kQaTVE_@2IECeOl3j0jf^sfQ$M#v)1!QANbUrPK6MA+-6 zz+CLT7xl9Aed3Thc2YzY#QcNmV0VeM^DJ>^RUJEaq*E4EBEfYpSVIQvp=7%G>1tpF zao)V9gXCWruBsFN9f$#2tXTLJ!u(j&yNYZjPX-z_=?@w@O ze7rg}xq5;RHk_0Ie{WIQk3*$3&jSCb;gtx{!RC)kDD}(L&oJ2Q9u$GDQMc1Hq_8PP z#y7Khi;tPu`N0~6jqLR<%?)t^w~0N3cUX1-3dnZt>1}GQdY0Iou^$`trO8H-J&1Jq zX)H<$S`f1od)U1!wJ3al+IQ$r?y>Ty^7?OJZOJJ#$MAF06ITn5+UH$h$P0h6{de-~ zm15H~2D0N{F}H@35Szc)JnSnrKcSImx zQ1=8|T*$p5JytW!Z0Y_vvE3b@1$ObTT~&R*@aXq(u?FV`>egSyfrhdZsZyQrWiLK? z7PWR}HM2f>BkpSCqY_sMiUMwG0Cv(|GcB`QIBTe4@1tZZ2`UIgdnY7<0{K-zbSa$e z%+OZ0o1@Q-d@Vr4U!y!G85LG!g`2e91r+azJyr;$*dY3SKBx9PA(kwpc@vu`77qoF z%fRcQkbh9~pGEF(KCvYDxjX**h?tl16}cBI;x|1o(kyw0_)P8IM_H{oZ(hW5qP};sump?1Xp97wnazIx1CcE=n%x}o z6oC}IV3!RhR9#L@^O?hO$y$|0Y4HV3 zY##=ySc{Q*Kj*4fEjgC=tOu@tZY9s^)0juXKqoTN%Kv@y23SG!<%Y3k#>j|FFHw+z zpCKlP05bRUIX7Lc3}?j&dHrQ%Sf%5rKf(#m4x|WQ&!#j{llha8j76MUU>D319k3Q5PU_vS>Ec zvT0^b+aT}TsgNY*^@Z!{1mfxAF%PV4f`?0)n^U+M}QP{I}tG{2Ce{%TlU*{j*dc0x7 zFIE4I;vV?lqqtPl9k#9)_Fp`xefZ^vSHGp&UbztdDm!+CEq9^Q3$I3vGr|teCwiJix<@zzMm@X+8TfDMMCL_8*i7C~#4O1SiHl;|(MVilgN zecXUVS7M|%N_|R3$z`Jv!Zawx`_480!Ll3VOC$_nU@k-f5+TKS)d|$Ad%fe8nc+w&s;egw`LVK3#o5_YZ5mvje;mGX+FfYWVhg=7eeF`v;4)y}Ty0M4MVN}Ye@q=sBMt2C#V6*md*{qQ)zb;w~@6+^y5^z(@?WW1*FbEnE z@B5-pAK8KEgRVz9FIgbvYUU<=R-ty*&xlCW*$fFG4T7Lq z+YrT`xGyBy8?Kg~WW&rrCwQ#MBLza{i?Ykh8lUspsEQ2H1am9zDRp~&TfGt#Xn##0 zFU&aQbY=0b067$43jk$#+e5rhBk~}6(pdf?z3NBU_rVk?!qToIfNuXNop2KIq%l8+ zz8p8}0H64%uI>i3oY?VqaSrfiWlJor3Bf*A{6CZf2pZLh<%-MA&*hpFP%V;{;Naka zdCBC^_PL$JM~tyAJiRl13o9Z1!H^#AJG?CtW}x3z;iqR?W(( zxhG7J;n|7G13jQiyu5rTH5Ki}L*lZ46C~AcsMloLaGTr?ka3O6NkC54`5!SLZ_y?3 zQ1^WP=A_$`|&9Bbq1-?%PL&9Jv&`F4_XRZ0lP}EByYe-L-yD+Kiz#3S!|A z)*iKb3L{aAmnxe9xk4k0S~#rPp<+Ia z^qBFBS`%dA&lFTLLaF*aJ!ikCkP*AsR-G~m?SatfrL@mWf^$pj!ffF+YTA-sq(KIR zRB-Gi)tk)5O|rH#xMgCnyI*3|Y+$r4PGh}RZMW1i`Z_~-Wv5$ zckKzgI6r({r)HtLm>)4~E~AaIk+0RePRZ9BHhC^N7Ee+sqv5k%`xo=aMGZFiZ&h^K zD$ag}W2Q03mJGckbk?S!tmVyd;a`oI3XEU;y+QxusD-fmr2%2Amb2C~ksm-;pz@_d z+S)GSHp_AdV~=I{U&-I`;RnHQ)>Z<>xFxsIn253vP7@1x(GtNNF!rD2Dt z9@|R^5|)AHNDbV_?tzh9Kbg>XcjVi`8K?G};VV8XVm*jtWQ~u-Z&U~r2uEiwHt-p# z#(_Oid9?3R!iw8XS0q%J59IpQ3EXx#nK&I|CRpeQUCB&4p5*rg$Z*i2MkUxMs6GxM zMxiqW9!RnwIik%G$QZ$Ot)qb}UuBC}xv?zN|@J&^; zA!@4Z7%h*>s7GH~VAbraH+_wMp=CXl>S;5T(YTZ3QY3bf?!TEkIU31BW4N(#PvuxQ z1=?wZ1$M1}mwiHdatf5Bcwl1eBm+HoxzTu6$hJUSpq?QynswP{j;AM7h|J&y zU_F=AcAuYON9mMjm;HQZw6+%0&mIi+K~6CY5!uFzh#wV%nx7o)I`y$|U#A9f)P$O! zN{^u8ZW1!_Pz^g?j%9(2)MtRp3Yxhv(D<0m{a)uqYe zOI~&OYl7mg`KrIJAE|lq>tg?hP_yL6je8jBi`eQc)j>R2(~0Z`*O~k320|>@(!IiH zG-K@6TckR4dD5{aJLw#TVRBsGi&3be12rFj1zPadOuG>ukxXzr;c-p5PD{$fV@JRY zl{-291(6n6tz ze*lC7oN4SGnx@pQKs*v^JV3u^s!E%fXdXhXG(~HqQ@jg?BWkD|Zf%SxIb)f&2!&)^ z!Nt(n-6#0oiDJI|%tDVbLxUh=f7mSj#@&?JpG2BS zXb6?^%&rjK-VOp@sM$426a9=X93(IEp0^$ncP1czSfdRR7-Lr`1)NncMi2IUmPUyk z?e#)djRPdpJjh+P+-JTXzYA=3hE}W*2m};C^NMxO05#xaO4&QdQbPYtjEJ~wRV*qR zUh=brTk&CzA1@;2%k>#XOC!?|qvxn<43N{4x2xqivA|>`KQ(C-%gi5ZuQEjD!gJQ~ z%0tvzIuuOafYwZI1ZS#)%Z>t14X0uD7UbAXU0A~&C?+heI+L?CxA_pwu0k5Dky_T( zcncXUXsEP&?%js-+(QiwvBCg;ed07$NX23=)^1(ufu|&~$VQh%IeteGotDyB+Ud-C zH;H|^OYwM-kH9hPYg4 zE6Os6n%S>{!1;z`41MyAW`*|L$za%@^v{S!`DC6<_Q`L)=ZLNdR_mtYnVuy3{yxrM9ZiR*B(V0scU^AV(Ohpz)05<~QA+$f|`s9b~ehcgfA7< zM1sJ~%no)Okf09XT||6!&cK%1c(GHd=cnB;=(k_C&8B>uqYy3Y34E^E+*Z(~o-Qn^?|Xysy~M_0fPkI2xE z6g*{mg!=WZl;vHIA0r}`beYS&!NNHcC5B+dmNGB?vng8R`zXg!d8xNY?PkXsek!4Q*H^h1Ozl1nL-=98o-nGS9u57nl*)El`U4P$1 z);)OebmWNeev8?Xb8tJp(22bFzy0qI)K61%G)<5RzsqdO21C$dZ_27FaXIHBGtvR= z)s&I-ws<``oo@0%(G4XeBC)n+#xpg-(4iz9hWjkBCrjY+f=m`1d!!1`r^IjQ11DoM;@2w8eESt=MEn-zpk8BS(*CE z$MH5SuDtxNH2U7X$g)zuU>O;Y96e+7_wC4vhY`((#61=oxWvSiwo?q`Z6D& literal 0 HcmV?d00001 diff --git a/src/icons/tangent-arc.png b/src/icons/tangent-arc.png new file mode 100644 index 0000000000000000000000000000000000000000..0db8ac3a7fba8d5063089855bf182c076068aa07 GIT binary patch literal 27250 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 hX@@G9j-!`e$~ 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.Cross(p1->Minus(*c)).z > 0.0; + + *c = blockTransform(*c); + *p0 = blockTransform(*p0); + *p1 = blockTransform(*p1); + + bool newSign = p0->Minus(*c).Cross(p1->Minus(*c)).z > 0.0; + if(oldSign != newSign) std::swap(*p0, *p1); + } + + Vector toVector(const DRW_Coord &c, bool transform = true) { + Vector result = Vector::From(c.x, c.y, 0.0); + if(transform) return blockTransform(result); + return result; + } + + Vector toVector(const DRW_Vertex2D &c) { + Vector result = Vector::From(c.x, c.y, 0.0); + return blockTransform(result); + } + + Vector toVector(const DRW_Vertex &c) { + Vector result = Vector::From(c.basePoint.x, c.basePoint.y, 0.0); + return blockTransform(result); + } + + double angleTo(Vector v0, Vector v1) { + Vector d = v1.Minus(v0); + double a = atan2(d.y, d.x); + return M_PI + remainder(a - M_PI, 2 * M_PI); + } + + Vector polar(double radius, double angle) { + return Vector::From(radius * cos(angle), radius * sin(angle), 0.0); + } + + hRequest createBulge(Vector p0, Vector p1, double bulge) { + bool reversed = bulge < 0.0; + double alpha = atan(bulge) * 4.0; + + Vector middle = p1.Plus(p0).ScaledBy(0.5); + double dist = p1.Minus(p0).Magnitude() / 2.0; + double angle = angleTo(p0, p1); + + // alpha can't be 0.0 at this point + double radius = fabs(dist / sin(alpha / 2.0)); + double wu = fabs(radius * radius - dist * dist); + double h = sqrt(wu); + + if(bulge > 0.0) { + angle += M_PI_2; + } else { + angle -= M_PI_2; + } + + if (fabs(alpha) > M_PI) { + h *= -1.0; + } + + Vector center = polar(h, angle); + center = center.Plus(middle); + + if(reversed) std::swap(p0, p1); + blockTransformArc(¢er, &p0, &p1); + + hRequest hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false); + SK.GetEntity(hr.entity(1))->PointForceTo(center); + SK.GetEntity(hr.entity(2))->PointForceTo(p0); + SK.GetEntity(hr.entity(3))->PointForceTo(p1); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + processPoint(hr.entity(3)); + return hr; + } + + struct Block { + std::vector> entities; + DRW_Block data; + }; + + unsigned unknownEntities = 0; + std::map styles; + std::map blocks; + std::map layers; + Block *readBlock = NULL; + const DRW_Insert *insertInsert = NULL; + + template + bool addPendingBlockEntity(const T &e) { + if(readBlock == NULL) return false; + readBlock->entities.emplace_back(new T(e)); + return true; + } + + void addEntity(DRW_Entity *e) { + switch(e->eType) { + case DRW::POINT: + addPoint(*static_cast(e)); + break; + case DRW::LINE: + addLine(*static_cast(e)); + break; + case DRW::ARC: + addArc(*static_cast(e)); + break; + case DRW::CIRCLE: + addCircle(*static_cast(e)); + break; + case DRW::POLYLINE: + addPolyline(*static_cast(e)); + break; + case DRW::LWPOLYLINE: + addLWPolyline(*static_cast(e)); + break; + case DRW::SPLINE: + addSpline(static_cast(e)); + break; + case DRW::INSERT: + addInsert(*static_cast(e)); + break; + case DRW::TEXT: + addText(*static_cast(e)); + break; + case DRW::MTEXT: + addMText(*static_cast(e)); + break; + case DRW::DIMALIGNED: + addDimAlign(static_cast(e)); + break; + case DRW::DIMLINEAR: + addDimLinear(static_cast(e)); + break; + case DRW::DIMRADIAL: + addDimRadial(static_cast(e)); + break; + case DRW::DIMDIAMETRIC: + addDimDiametric(static_cast(e)); + break; + case DRW::DIMANGULAR: + addDimAngular(static_cast(e)); + break; + default: + unknownEntities++; + } + } + + int dxfAlignToOrigin(DRW_Text::HAlign alignH, DRW_Text::VAlign alignV) { + int origin = 0; + switch(alignH) { + case DRW_Text::HLeft: + origin |= Style::ORIGIN_LEFT; + break; + + case DRW_Text::HMiddle: + case DRW_Text::HCenter: + break; + + case DRW_Text::HRight: + origin |= Style::ORIGIN_RIGHT; + break; + + case DRW_Text::HAligned: + case DRW_Text::HFit: + default: + origin |= Style::ORIGIN_LEFT; + break; + } + + switch(alignV) { + case DRW_Text::VBaseLine: + case DRW_Text::VBottom: + origin |= Style::ORIGIN_BOT; + break; + + case DRW_Text::VMiddle: + break; + + case DRW_Text::VTop: + origin |= Style::ORIGIN_TOP; + break; + + default: + origin |= Style::ORIGIN_BOT; + break; + } + + return origin; + } + + DRW_Layer *getSourceLayer(const DRW_Entity *e) { + DRW_Layer *layer = NULL; + if(insertInsert != NULL) { + std::string l = insertInsert->layer; + auto bi = layers.find(l); + if(bi != layers.end()) layer = &bi->second; + } else { + std::string l = e->layer; + auto bi = layers.find(l); + if(bi != layers.end()) layer = &bi->second; + } + return layer; + } + + int getColor(const DRW_Entity *e) { + int col = e->color; + if(col == DRW::ColorByBlock) { + if(insertInsert != NULL) { + col = insertInsert->color; + } else { + col = 7; + } + } + if(col == DRW::ColorByLayer) { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + col = layer->color; + } else { + col = 7; + } + } + return col; + } + + DRW_LW_Conv::lineWidth getLineWidth(const DRW_Entity *e) { + DRW_LW_Conv::lineWidth result = e->lWeight; + if(result == DRW_LW_Conv::widthByBlock) { + if(insertInsert != NULL) { + result = insertInsert->lWeight; + } else { + result = DRW_LW_Conv::widthDefault; + } + } + if(result == DRW_LW_Conv::widthByLayer) { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + result = layer->lWeight; + } else { + result = DRW_LW_Conv::widthDefault; + } + } + return result; + } + + std::string getLineType(const DRW_Entity *e) { + std::string result = e->lineType; + if(result == "BYBLOCK") { + if(insertInsert != NULL) { + result = ToUpper(insertInsert->lineType); + } else { + result = "CONTINUOUS"; + } + } + if(result == "BYLAYER") { + DRW_Layer *layer = getSourceLayer(e); + if(layer != NULL) { + result = ToUpper(layer->lineType); + } else { + result = "CONTINUOUS"; + } + } + return result; + } + + hStyle invisibleStyle() { + std::string id = "@dxf-invisible"; + + auto si = styles.find(id); + if(si != styles.end()) { + return si->second; + } + + hStyle hs = { Style::CreateCustomStyle(/*rememberForUndo=*/false) }; + Style *s = Style::Get(hs); + s->name = id; + s->visible = false; + + styles.emplace(id, hs); + return hs; + } + + hStyle styleFor(const DRW_Entity *e) { + // Color. + // TODO: which color to choose: index or RGB one? + int col = getColor(e); + RgbaColor c = RgbaColor::From(DRW::dxfColors[col][0], + DRW::dxfColors[col][1], + DRW::dxfColors[col][2]); + + // Line width. + DRW_LW_Conv::lineWidth lw = getLineWidth(e); + double width = DRW_LW_Conv::lineWidth2dxfInt(e->lWeight) / 100.0; + if(width < 0.0) width = 1.0; + + // Line stipple. + // TODO: Probably, we can load default autocad patterns and match it with ours. + std::string lineType = getLineType(e); + int stipple = Style::STIPPLE_CONTINUOUS; + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + if(lineType == DxfFileWriter::lineTypeName(i)) { + stipple = i; + break; + } + } + + // Text properties. + DRW_Text::HAlign alignH = DRW_Text::HLeft; + DRW_Text::VAlign alignV = DRW_Text::VBaseLine; + double textAngle = 0.0; + double textHeight = Style::DefaultTextHeight(); + + if(e->eType == DRW::TEXT || e->eType == DRW::MTEXT) { + const DRW_Text *text = static_cast(e); + alignH = text->alignH; + alignV = text->alignV; + textHeight = text->height; + textAngle = text->angle; + // I have no idea why, but works + if(alignH == DRW_Text::HMiddle) { + alignV = DRW_Text::VMiddle; + } + } + + // Unique identifier based on style properties. + std::string id = "@dxf"; + if(lw != DRW_LW_Conv::widthDefault) + id += ssprintf("-w%.4g", width); + if(lineType != "CONTINUOUS") + id += ssprintf("-%s", lineType.c_str()); + if(c.red != 0 || c.green != 0 || c.blue != 0) + id += ssprintf("-#%02x%02x%02x", c.red, c.green, c.blue); + if(textHeight != Style::DefaultTextHeight()) + id += ssprintf("-h%.4g", textHeight); + if(textAngle != 0.0) + id += ssprintf("-a%.5g", textAngle); + if(alignH != DRW_Text::HLeft) + id += ssprintf("-oh%d", alignH); + if(alignV != DRW_Text::VBaseLine) + id += ssprintf("-ov%d", alignV); + + auto si = styles.find(id); + if(si != styles.end()) { + return si->second; + } + + hStyle hs = { Style::CreateCustomStyle(/*rememberForUndo=*/false) }; + Style *s = Style::Get(hs); + if(lw != DRW_LW_Conv::widthDefault) { + s->widthAs = Style::UNITS_AS_MM; + s->width = width; + s->stippleScale = 1.0 + width * 2.0; + } + s->name = id; + s->stippleType = stipple; + if(c.red != 0 || c.green != 0 || c.blue != 0) s->color = c; + s->textHeightAs = Style::UNITS_AS_MM; + s->textHeight = textHeight; + s->textAngle = textAngle; + s->textOrigin = dxfAlignToOrigin(alignH, alignV); + + styles.emplace(id, hs); + return hs; + } + + void setStyle(hRequest hr, hStyle hs) { + Request *r = SK.GetRequest(hr); + r->style = hs; + } + + struct VectorHash { + size_t operator()(const Vector &v) const { + static const size_t size = std::numeric_limits::max() / 2 - 1; + static const double eps = (4.0 * LENGTH_EPS); + + double x = fabs(v.x) / eps; + double y = fabs(v.y) / eps; + + size_t xs = size_t(fmod(x, double(size))); + size_t ys = size_t(fmod(y, double(size))); + + return ys * size + xs; + } + }; + + struct VectorPred { + bool operator()(Vector a, Vector b) const { + return a.Equals(b, LENGTH_EPS); + } + }; + + std::unordered_map points; + + void processPoint(hEntity he, bool constrain = true) { + Entity *e = SK.GetEntity(he); + Vector pos = e->PointGetNum(); + hEntity p = findPoint(pos); + if(p.v == he.v) return; + if(p.v != Entity::NO_ENTITY.v) { + if(constrain) { + Constraint::ConstrainCoincident(he, p); + } + // We don't add point because we already + // have point in this position + return; + } + points.emplace(pos, he); + } + + hEntity findPoint(const Vector &p) { + auto it = points.find(p); + if(it == points.end()) return Entity::NO_ENTITY; + return it->second; + } + + hEntity createOrGetPoint(const Vector &p) { + hEntity he = findPoint(p); + if(he.v != Entity::NO_ENTITY.v) return he; + + hRequest hr = SS.GW.AddRequest(Request::DATUM_POINT, false); + he = hr.entity(0); + SK.GetEntity(he)->PointForceTo(p); + points.emplace(p, he); + return he; + } + + hEntity createLine(Vector p0, Vector p1, uint32_t style, bool constrainHV = false) { + if(p0.Equals(p1)) return Entity::NO_ENTITY; + hRequest hr = SS.GW.AddRequest(Request::LINE_SEGMENT, false); + SK.GetEntity(hr.entity(1))->PointForceTo(p0); + SK.GetEntity(hr.entity(2))->PointForceTo(p1); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + + if(constrainHV) { + int cType = -1; + if(fabs(p0.x - p1.x) < LENGTH_EPS) { + cType = Constraint::VERTICAL; + } + else if(fabs(p0.y - p1.y) < LENGTH_EPS) { + cType = Constraint::HORIZONTAL; + } + if(cType != -1) { + Constraint::Constrain( + cType, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + hr.entity(0) + ); + } + } + + if(style != 0) { + Request *r = SK.GetRequest(hr); + r->style = hStyle{ style }; + } + return hr.entity(0); + } + + hEntity createCircle(const Vector &c, double r, uint32_t style) { + hRequest hr = SS.GW.AddRequest(Request::CIRCLE, false); + SK.GetEntity(hr.entity(1))->PointForceTo(c); + processPoint(hr.entity(1)); + SK.GetEntity(hr.entity(64))->DistanceForceTo(r); + if(style != 0) { + Request *r = SK.GetRequest(hr); + r->style = hStyle{ style }; + } + return hr.entity(0); + } + + virtual void addLayer(const DRW_Layer &data) { + layers.emplace(data.name, data); + } + + virtual void addBlock(const DRW_Block &data) { + readBlock = &blocks[data.name]; + readBlock->data = data; + } + + virtual void endBlock() { + readBlock = NULL; + } + + virtual void addPoint(const DRW_Point &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + hRequest hr = SS.GW.AddRequest(Request::DATUM_POINT, false); + SK.GetEntity(hr.entity(0))->PointForceTo(toVector(data.basePoint)); + processPoint(hr.entity(0)); + } + + virtual void addLine(const DRW_Line &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + createLine(toVector(data.basePoint), toVector(data.secPoint), styleFor(&data).v, true); + } + + virtual void addArc(const DRW_Arc &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + hRequest hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false); + double r = data.radious; + double sa = data.staangle; + double ea = data.endangle; + Vector c = Vector::From(data.basePoint.x, data.basePoint.y, 0.0); + Vector rvs = Vector::From(r * cos(sa), r * sin(sa), data.basePoint.z).Plus(c); + Vector rve = Vector::From(r * cos(ea), r * sin(ea), data.basePoint.z).Plus(c); + + if(data.extPoint.z == -1.0) { + c.x = -c.x; + rvs.x = - rvs.x; + rve.x = - rve.x; + std::swap(rvs, rve); + } + + blockTransformArc(&c, &rvs, &rve); + + SK.GetEntity(hr.entity(1))->PointForceTo(c); + SK.GetEntity(hr.entity(2))->PointForceTo(rvs); + SK.GetEntity(hr.entity(3))->PointForceTo(rve); + processPoint(hr.entity(1)); + processPoint(hr.entity(2)); + processPoint(hr.entity(3)); + setStyle(hr, styleFor(&data)); + } + + virtual void addCircle(const DRW_Circle &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + createCircle(toVector(data.basePoint), data.radious, styleFor(&data).v); + } + + virtual void addLWPolyline(const DRW_LWPolyline &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + size_t vNum = data.vertlist.size(); + + // Check for closed polyline. + if((data.flags & 1) != 1) vNum--; + + // Correct coordinate system for the case where z=-1, as described in + // http://paulbourke.net/dataformats/dxf/dxf10.html. + bool needSwapX = data.extPoint.z == -1.0; + + for(size_t i = 0; i < vNum; i++) { + DRW_Vertex2D c0 = *data.vertlist[i]; + DRW_Vertex2D c1 = *data.vertlist[(i + 1) % data.vertlist.size()]; + + if(needSwapX) { + c0.x = -c0.x; + c1.x = -c1.x; + c0.bulge = -c0.bulge; + } + + Vector p0 = Vector::From(c0.x, c0.y, 0.0); + Vector p1 = Vector::From(c1.x, c1.y, 0.0); + hStyle hs = styleFor(&data); + + if(EXACT(data.vertlist[i]->bulge == 0.0)) { + createLine(blockTransform(p0), blockTransform(p1), hs.v, true); + } else { + hRequest hr = createBulge(p0, p1, c0.bulge); + setStyle(hr, hs); + } + } + } + + virtual void addPolyline(const DRW_Polyline &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + int vNum = data.vertlist.size(); + + // Check for closed polyline. + if((data.flags & 1) != 1) vNum--; + + // Correct coordinate system for the case where z=-1, as described in + // http://paulbourke.net/dataformats/dxf/dxf10.html. + bool needSwapX = data.extPoint.z == -1.0; + + for(int i = 0; i < vNum; i++) { + DRW_Coord c0 = data.vertlist[i]->basePoint; + DRW_Coord c1 = data.vertlist[(i + 1) % data.vertlist.size()]->basePoint; + + double bulge = data.vertlist[i]->bulge; + if(needSwapX) { + c0.x = -c0.x; + c1.x = -c1.x; + bulge = -bulge; + } + + Vector p0 = Vector::From(c0.x, c0.y, 0.0); + Vector p1 = Vector::From(c1.x, c1.y, 0.0); + hStyle hs = styleFor(&data); + + if(EXACT(bulge == 0.0)) { + createLine(blockTransform(p0), blockTransform(p1), hs.v, true); + } else { + hRequest hr = createBulge(p0, p1, bulge); + setStyle(hr, hs); + } + } + } + + virtual void addSpline(const DRW_Spline *data) { + if(data->space != DRW::ModelSpace) return; + if(data->degree != 3) return; + if(addPendingBlockEntity(*data)) return; + + hRequest hr = SS.GW.AddRequest(Request::CUBIC, false); + for(int i = 0; i < 4; i++) { + SK.GetEntity(hr.entity(i + 1))->PointForceTo(toVector(*data->controllist[i])); + processPoint(hr.entity(i + 1)); + } + setStyle(hr, styleFor(data)); + } + + virtual void addInsert(const DRW_Insert &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + auto bi = blocks.find(data.name); + if(bi == blocks.end()) oops(); + Block *block = &bi->second; + + // Push transform. + Vector x = blockX; + Vector y = blockY; + Vector t = blockT; + + const DRW_Insert *oldInsert = insertInsert; + insertInsert = &data; + + if(data.extPoint.z == -1.0) invertXTransform(); + multBlockTransform(data.basePoint.x, data.basePoint.y, data.xscale, data.yscale, data.angle); + for(auto &e : block->entities) { + addEntity(&*e); + } + + insertInsert = oldInsert; + + // Pop transform. + blockX = x; + blockY = y; + blockT = t; + } + + virtual void addMText(const DRW_MText &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + DRW_MText text = data; + text.secPoint = text.basePoint; + addText(text); + } + + virtual void addText(const DRW_Text &data) { + if(data.space != DRW::ModelSpace) return; + if(addPendingBlockEntity(data)) return; + + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = Constraint::COMMENT; + if(data.alignH == DRW_Text::HLeft && data.alignV == DRW_Text::VBaseLine) { + c.disp.offset = toVector(data.basePoint); + } else { + c.disp.offset = toVector(data.secPoint); + } + c.comment = data.text; + c.disp.style = styleFor(&data); + Constraint::AddConstraint(&c, false); + } + + virtual void addDimAlign(const DRW_DimAligned *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector p0 = toVector(data->getDef1Point()); + Vector p1 = toVector(data->getDef2Point()); + Vector p2 = toVector(data->getTextPoint()); + hConstraint hc = Constraint::Constrain( + Constraint::PT_PT_DISTANCE, + createOrGetPoint(p0), + createOrGetPoint(p1), + Entity::NO_ENTITY + ); + + Constraint *c = SK.GetConstraint(hc); + if(data->hasActualMeasurement()) { + c->valA = data->getActualMeasurement(); + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = p2.Minus(p0.Plus(p1).ScaledBy(0.5)); + } + + virtual void addDimLinear(const DRW_DimLinear *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector p0 = toVector(data->getDef1Point(), false); + Vector p1 = toVector(data->getDef2Point(), false); + Vector p2 = toVector(data->getTextPoint(), false); + + double angle = data->getAngle() * PI / 180.0; + Vector dir = Vector::From(cos(angle), sin(angle), 0.0); + Vector p3 = p1.Minus(p1.ClosestPointOnLine(p2, dir)).Plus(p1); + if(p1.Minus(p3).Magnitude() < LENGTH_EPS) { + p3 = p0.Minus(p0.ClosestPointOnLine(p2, dir)).Plus(p1); + } + + Vector p4 = p0.ClosestPointOnLine(p1, p3.Minus(p1)).Plus(p0).ScaledBy(0.5); + + p0 = blockTransform(p0); + p1 = blockTransform(p1); + p2 = blockTransform(p2); + p3 = blockTransform(p3); + p4 = blockTransform(p4); + + hConstraint hc = Constraint::Constrain( + Constraint::PT_LINE_DISTANCE, + createOrGetPoint(p0), + Entity::NO_ENTITY, + createLine(p1, p3, invisibleStyle().v) + ); + + Constraint *c = SK.GetConstraint(hc); + if(data->hasActualMeasurement()) { + c->valA = data->getActualMeasurement(); + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = p2.Minus(p4); + } + + virtual void addDimAngular(const DRW_DimAngular *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector l0p0 = toVector(data->getFirstLine1()); + Vector l0p1 = toVector(data->getFirstLine2()); + Vector l1p0 = toVector(data->getSecondLine1()); + Vector l1p1 = toVector(data->getSecondLine2()); + + hConstraint hc = Constraint::Constrain( + Constraint::ANGLE, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + createLine(l0p0, l0p1, invisibleStyle().v), + createLine(l1p1, l1p0, invisibleStyle().v), + /*other=*/false, + /*other2=*/false + ); + + Constraint *c = SK.GetConstraint(hc); + c->ModifyToSatisfy(); + if(data->hasActualMeasurement()) { + double actual = data->getActualMeasurement() / PI * 180.0; + if(fabs(180.0 - actual - c->valA) < fabs(actual - c->valA)) { + c->other = true; + } + c->valA = actual; + } + + bool skew = false; + Vector pi = Vector::AtIntersectionOfLines(l0p0, l0p1, l1p0, l1p1, &skew); + if(!skew) { + c->disp.offset = toVector(data->getTextPoint()).Minus(pi); + } + } + + hConstraint createDiametric(Vector cp, double r, Vector tp, double actual, bool asRadius = false) { + hEntity he = createCircle(cp, r, invisibleStyle().v); + + hConstraint hc = Constraint::Constrain( + Constraint::DIAMETER, + Entity::NO_ENTITY, + Entity::NO_ENTITY, + he + ); + + Constraint *c = SK.GetConstraint(hc); + if(actual > 0.0) { + c->valA = asRadius ? actual * 2.0 : actual; + } else { + c->ModifyToSatisfy(); + } + c->disp.offset = tp.Minus(cp); + if(asRadius) c->other = true; + return hc; + } + + virtual void addDimRadial(const DRW_DimRadial *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector cp = toVector(data->getCenterPoint()); + Vector dp = toVector(data->getDiameterPoint()); + Vector tp = toVector(data->getTextPoint()); + double actual = -1.0; + if(data->hasActualMeasurement()) { + actual = data->getActualMeasurement(); + } + + createDiametric(cp, cp.Minus(dp).Magnitude(), tp, actual, /*asRadius=*/true); + } + + virtual void addDimDiametric(const DRW_DimDiametric *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + Vector dp1 = toVector(data->getDiameter1Point()); + Vector dp2 = toVector(data->getDiameter2Point()); + + Vector cp = dp1.Plus(dp2).ScaledBy(0.5); + Vector tp = toVector(data->getTextPoint()); + double actual = -1.0; + if(data->hasActualMeasurement()) { + actual = data->getActualMeasurement(); + } + + createDiametric(cp, cp.Minus(dp1).Magnitude(), tp, actual, /*asRadius=*/false); + } + + virtual void addDimAngular3P(const DRW_DimAngular3p *data) { + if(data->space != DRW::ModelSpace) return; + if(addPendingBlockEntity(*data)) return; + + DRW_DimAngular dim = *static_cast(data); + dim.setFirstLine1(data->getVertexPoint()); + dim.setFirstLine2(data->getFirstLine()); + dim.setSecondLine1(data->getVertexPoint()); + dim.setSecondLine2(data->getSecondLine()); + addDimAngular(&dim); + } +}; + +void ImportDxf(const std::string &filename) { + DxfReadInterface interface; + interface.clearBlockTransform(); + + std::string data; + if(!ReadFile(filename, &data)) { + Error("Couldn't read from '%s'", filename.c_str()); + return; + } + + SS.UndoRemember(); + std::stringstream stream(data); + if(!dxfRW().read(stream, &interface, /*ext=*/false)) { + Error("Corrupted DXF file."); + } + + if(interface.unknownEntities > 0) { + Message(ssprintf("%u DXF entities of unknown type were ignored.", + interface.unknownEntities).c_str()); + } +} + +void ImportDwg(const std::string &filename) { + DxfReadInterface interface; + interface.clearBlockTransform(); + + std::string data; + if(!ReadFile(filename, &data)) { + Error("Couldn't read from '%s'", filename.c_str()); + return; + } + + SS.UndoRemember(); + std::stringstream stream(data); + if(!dwgR().read(stream, &interface, /*ext=*/false)) { + Error("Corrupted DWG file."); + } + + if(interface.unknownEntities > 0) { + Message(ssprintf("%u DWG entities of unknown type were ignored.", + interface.unknownEntities).c_str()); + } +} + +} diff --git a/src/lib.cpp b/src/lib.cpp new file mode 100644 index 0000000..d87a4f0 --- /dev/null +++ b/src/lib.cpp @@ -0,0 +1,263 @@ +//----------------------------------------------------------------------------- +// A library wrapper around SolveSpace, to permit someone to use its constraint +// solver without coupling their program too much to SolveSpace's internals. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#define EXPORT_DLL +#include + +Sketch SolveSpace::SK = {}; +static System SYS; + +static int IsInit = 0; + +void Group::GenerateEquations(IdList *) { + // Nothing to do for now. +} + +void SolveSpace::CnfFreezeInt(uint32_t, const std::string &) +{ + abort(); +} + +uint32_t SolveSpace::CnfThawInt(uint32_t, const std::string &) +{ + abort(); + return 0; +} + +void SolveSpace::DoMessageBox(const char *, int, int, bool) +{ + abort(); +} + +extern "C" { + +void Slvs_QuaternionU(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationU(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_QuaternionV(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationV(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_QuaternionN(double qw, double qx, double qy, double qz, + double *x, double *y, double *z) +{ + Quaternion q = Quaternion::From(qw, qx, qy, qz); + Vector v = q.RotationN(); + *x = v.x; + *y = v.y; + *z = v.z; +} + +void Slvs_MakeQuaternion(double ux, double uy, double uz, + double vx, double vy, double vz, + double *qw, double *qx, double *qy, double *qz) +{ + Vector u = Vector::From(ux, uy, uz), + v = Vector::From(vx, vy, vz); + Quaternion q = Quaternion::From(u, v); + *qw = q.w; + *qx = q.vx; + *qy = q.vy; + *qz = q.vz; +} + +void Slvs_Solve(Slvs_System *ssys, Slvs_hGroup shg) +{ + if(!IsInit) { + InitHeaps(); + IsInit = 1; + } + + int i; + for(i = 0; i < ssys->params; i++) { + Slvs_Param *sp = &(ssys->param[i]); + Param p = {}; + + p.h.v = sp->h; + p.val = sp->val; + SK.param.Add(&p); + if(sp->group == shg) { + SYS.param.Add(&p); + } + } + + for(i = 0; i < ssys->entities; i++) { + Slvs_Entity *se = &(ssys->entity[i]); + EntityBase e = {}; + + switch(se->type) { +case SLVS_E_POINT_IN_3D: e.type = Entity::POINT_IN_3D; break; +case SLVS_E_POINT_IN_2D: e.type = Entity::POINT_IN_2D; break; +case SLVS_E_NORMAL_IN_3D: e.type = Entity::NORMAL_IN_3D; break; +case SLVS_E_NORMAL_IN_2D: e.type = Entity::NORMAL_IN_2D; break; +case SLVS_E_DISTANCE: e.type = Entity::DISTANCE; break; +case SLVS_E_WORKPLANE: e.type = Entity::WORKPLANE; break; +case SLVS_E_LINE_SEGMENT: e.type = Entity::LINE_SEGMENT; break; +case SLVS_E_CUBIC: e.type = Entity::CUBIC; break; +case SLVS_E_CIRCLE: e.type = Entity::CIRCLE; break; +case SLVS_E_ARC_OF_CIRCLE: e.type = Entity::ARC_OF_CIRCLE; break; + +default: dbp("bad entity type %d", se->type); return; + } + e.h.v = se->h; + e.group.v = se->group; + e.workplane.v = se->wrkpl; + e.point[0].v = se->point[0]; + e.point[1].v = se->point[1]; + e.point[2].v = se->point[2]; + e.point[3].v = se->point[3]; + e.normal.v = se->normal; + e.distance.v = se->distance; + e.param[0].v = se->param[0]; + e.param[1].v = se->param[1]; + e.param[2].v = se->param[2]; + e.param[3].v = se->param[3]; + + SK.entity.Add(&e); + } + + for(i = 0; i < ssys->constraints; i++) { + Slvs_Constraint *sc = &(ssys->constraint[i]); + ConstraintBase c = {}; + + int t; + switch(sc->type) { +case SLVS_C_POINTS_COINCIDENT: t = Constraint::POINTS_COINCIDENT; break; +case SLVS_C_PT_PT_DISTANCE: t = Constraint::PT_PT_DISTANCE; break; +case SLVS_C_PT_PLANE_DISTANCE: t = Constraint::PT_PLANE_DISTANCE; break; +case SLVS_C_PT_LINE_DISTANCE: t = Constraint::PT_LINE_DISTANCE; break; +case SLVS_C_PT_FACE_DISTANCE: t = Constraint::PT_FACE_DISTANCE; break; +case SLVS_C_PT_IN_PLANE: t = Constraint::PT_IN_PLANE; break; +case SLVS_C_PT_ON_LINE: t = Constraint::PT_ON_LINE; break; +case SLVS_C_PT_ON_FACE: t = Constraint::PT_ON_FACE; break; +case SLVS_C_EQUAL_LENGTH_LINES: t = Constraint::EQUAL_LENGTH_LINES; break; +case SLVS_C_LENGTH_RATIO: t = Constraint::LENGTH_RATIO; break; +case SLVS_C_EQ_LEN_PT_LINE_D: t = Constraint::EQ_LEN_PT_LINE_D; break; +case SLVS_C_EQ_PT_LN_DISTANCES: t = Constraint::EQ_PT_LN_DISTANCES; break; +case SLVS_C_EQUAL_ANGLE: t = Constraint::EQUAL_ANGLE; break; +case SLVS_C_EQUAL_LINE_ARC_LEN: t = Constraint::EQUAL_LINE_ARC_LEN; break; +case SLVS_C_LENGTH_DIFFERENCE: t = Constraint::LENGTH_DIFFERENCE; break; +case SLVS_C_SYMMETRIC: t = Constraint::SYMMETRIC; break; +case SLVS_C_SYMMETRIC_HORIZ: t = Constraint::SYMMETRIC_HORIZ; break; +case SLVS_C_SYMMETRIC_VERT: t = Constraint::SYMMETRIC_VERT; break; +case SLVS_C_SYMMETRIC_LINE: t = Constraint::SYMMETRIC_LINE; break; +case SLVS_C_AT_MIDPOINT: t = Constraint::AT_MIDPOINT; break; +case SLVS_C_HORIZONTAL: t = Constraint::HORIZONTAL; break; +case SLVS_C_VERTICAL: t = Constraint::VERTICAL; break; +case SLVS_C_DIAMETER: t = Constraint::DIAMETER; break; +case SLVS_C_PT_ON_CIRCLE: t = Constraint::PT_ON_CIRCLE; break; +case SLVS_C_SAME_ORIENTATION: t = Constraint::SAME_ORIENTATION; break; +case SLVS_C_ANGLE: t = Constraint::ANGLE; break; +case SLVS_C_PARALLEL: t = Constraint::PARALLEL; break; +case SLVS_C_PERPENDICULAR: t = Constraint::PERPENDICULAR; break; +case SLVS_C_ARC_LINE_TANGENT: t = Constraint::ARC_LINE_TANGENT; break; +case SLVS_C_CUBIC_LINE_TANGENT: t = Constraint::CUBIC_LINE_TANGENT; break; +case SLVS_C_EQUAL_RADIUS: t = Constraint::EQUAL_RADIUS; break; +case SLVS_C_PROJ_PT_DISTANCE: t = Constraint::PROJ_PT_DISTANCE; break; +case SLVS_C_WHERE_DRAGGED: t = Constraint::WHERE_DRAGGED; break; +case SLVS_C_CURVE_CURVE_TANGENT:t = Constraint::CURVE_CURVE_TANGENT; break; + +default: dbp("bad constraint type %d", sc->type); return; + } + + c.type = t; + + c.h.v = sc->h; + c.group.v = sc->group; + c.workplane.v = sc->wrkpl; + c.valA = sc->valA; + c.ptA.v = sc->ptA; + c.ptB.v = sc->ptB; + c.entityA.v = sc->entityA; + c.entityB.v = sc->entityB; + c.entityC.v = sc->entityC; + c.entityD.v = sc->entityD; + c.other = (sc->other) ? true : false; + c.other2 = (sc->other2) ? true : false; + + SK.constraint.Add(&c); + } + + for(i = 0; i < (int)arraylen(ssys->dragged); i++) { + if(ssys->dragged[i]) { + hParam hp = { ssys->dragged[i] }; + SYS.dragged.Add(&hp); + } + } + + Group g = {}; + g.h.v = shg; + + List bad = {}; + + // Now we're finally ready to solve! + bool andFindBad = ssys->calculateFaileds ? true : false; + int how = SYS.Solve(&g, &(ssys->dof), &bad, andFindBad, false); + + switch(how) { + case System::SOLVED_OKAY: + ssys->result = SLVS_RESULT_OKAY; + break; + + case System::DIDNT_CONVERGE: + ssys->result = SLVS_RESULT_DIDNT_CONVERGE; + break; + + case System::REDUNDANT_DIDNT_CONVERGE: + case System::REDUNDANT_OKAY: + ssys->result = SLVS_RESULT_INCONSISTENT; + break; + + case System::TOO_MANY_UNKNOWNS: + ssys->result = SLVS_RESULT_TOO_MANY_UNKNOWNS; + break; + + default: oops(); + } + + // Write the new parameter values back to our caller. + for(i = 0; i < ssys->params; i++) { + Slvs_Param *sp = &(ssys->param[i]); + hParam hp = { sp->h }; + sp->val = SK.GetParam(hp)->val; + } + + if(ssys->failed) { + // Copy over any the list of problematic constraints. + for(i = 0; i < ssys->faileds && i < bad.n; i++) { + ssys->failed[i] = bad.elem[i].v; + } + ssys->faileds = bad.n; + } + + bad.Clear(); + SYS.param.Clear(); + SYS.entity.Clear(); + SYS.eq.Clear(); + SYS.dragged.Clear(); + + SK.param.Clear(); + SK.entity.Clear(); + SK.constraint.Clear(); + + FreeAllTemporary(); +} + +} /* extern "C" */ diff --git a/src/mesh.cpp b/src/mesh.cpp new file mode 100644 index 0000000..6458e5d --- /dev/null +++ b/src/mesh.cpp @@ -0,0 +1,1074 @@ +//----------------------------------------------------------------------------- +// Operations on triangle meshes, like our mesh Booleans using the BSP, and +// the stuff to check for watertightness. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +#include + +void SMesh::Clear(void) { + l.Clear(); +} + +void SMesh::AddTriangle(STriMeta meta, Vector n, Vector a, Vector b, Vector c) { + Vector ab = b.Minus(a), bc = c.Minus(b); + Vector np = ab.Cross(bc); + if(np.Magnitude() < 1e-10) { + // ugh; gl sometimes tesselates to collinear triangles + return; + } + if(np.Dot(n) > 0) { + AddTriangle(meta, a, b, c); + } else { + AddTriangle(meta, c, b, a); + } +} +void SMesh::AddTriangle(STriMeta meta, Vector a, Vector b, Vector c) { + STriangle t = {}; + t.meta = meta; + t.a = a; + t.b = b; + t.c = c; + AddTriangle(&t); +} +void SMesh::AddTriangle(STriangle *st) { + RgbaColor color = st->meta.color; + if(color.ToARGB32() != 0 && color.alpha != 255) isTransparent = true; + l.Add(st); +} + +void SMesh::DoBounding(Vector v, Vector *vmax, Vector *vmin) { + vmax->x = max(vmax->x, v.x); + vmax->y = max(vmax->y, v.y); + vmax->z = max(vmax->z, v.z); + + vmin->x = min(vmin->x, v.x); + vmin->y = min(vmin->y, v.y); + vmin->z = min(vmin->z, v.z); +} +void SMesh::GetBounding(Vector *vmax, Vector *vmin) { + int i; + *vmin = Vector::From( 1e12, 1e12, 1e12); + *vmax = Vector::From(-1e12, -1e12, -1e12); + for(i = 0; i < l.n; i++) { + STriangle *st = &(l.elem[i]); + DoBounding(st->a, vmax, vmin); + DoBounding(st->b, vmax, vmin); + DoBounding(st->c, vmax, vmin); + } +} + +//---------------------------------------------------------------------------- +// Report the edges of the boundary of the region(s) of our mesh that lie +// within the plane n dot p = d. +//---------------------------------------------------------------------------- +void SMesh::MakeEdgesInPlaneInto(SEdgeList *sel, Vector n, double d) { + SMesh m = {}; + m.MakeFromCopyOf(this); + + // Delete all triangles in the mesh that do not lie in our export plane. + m.l.ClearTags(); + int i; + for(i = 0; i < m.l.n; i++) { + STriangle *tr = &(m.l.elem[i]); + + if((fabs(n.Dot(tr->a) - d) >= LENGTH_EPS) || + (fabs(n.Dot(tr->b) - d) >= LENGTH_EPS) || + (fabs(n.Dot(tr->c) - d) >= LENGTH_EPS)) + { + tr->tag = 1; + } + } + m.l.RemoveTagged(); + + // Select the naked edges in our resulting open mesh. + SKdNode *root = SKdNode::From(&m); + root->SnapToMesh(&m); + root->MakeCertainEdgesInto(sel, SKdNode::NAKED_OR_SELF_INTER_EDGES, + false, NULL, NULL); + + m.Clear(); +} + +void SMesh::MakeCertainEdgesAndOutlinesInto(SEdgeList *sel, SOutlineList *sol, int type) { + SKdNode *root = SKdNode::From(this); + root->MakeCertainEdgesInto(sel, type, false, NULL, NULL); + root->MakeOutlinesInto(sol); +} + +//----------------------------------------------------------------------------- +// When we are called, all of the triangles from l.elem[start] to the end must +// be coplanar. So we try to find a set of fewer triangles that covers the +// exact same area, in order to reduce the number of triangles in the mesh. +// We use this after a triangle has been split against the BSP. +// +// This is really ugly code; basically it just pastes things together to +// form convex polygons, merging collinear edges when possible, then +// triangulates the convex poly. +//----------------------------------------------------------------------------- +void SMesh::Simplify(int start) { + int maxTriangles = (l.n - start) + 10; + + STriMeta meta = l.elem[start].meta; + + STriangle *tout = (STriangle *)AllocTemporary(maxTriangles*sizeof(*tout)); + int toutc = 0; + + Vector n = Vector::From(0, 0, 0); + Vector *conv = (Vector *)AllocTemporary(maxTriangles*3*sizeof(*conv)); + int convc = 0; + + int start0 = start; + + int i, j; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->MinAltitude() < LENGTH_EPS) { + tr->tag = 1; + } else { + tr->tag = 0; + } + } + + for(;;) { + bool didAdd; + convc = 0; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->tag) continue; + + tr->tag = 1; + n = (tr->Normal()).WithMagnitude(1); + conv[convc++] = tr->a; + conv[convc++] = tr->b; + conv[convc++] = tr->c; + + start = i+1; + break; + } + if(i >= l.n) break; + + do { + didAdd = false; + + for(j = 0; j < convc; j++) { + Vector a = conv[WRAP((j-1), convc)], + b = conv[j], + d = conv[WRAP((j+1), convc)], + e = conv[WRAP((j+2), convc)]; + + Vector c; + for(i = start; i < l.n; i++) { + STriangle *tr = &(l.elem[i]); + if(tr->tag) continue; + + if((tr->a).Equals(d) && (tr->b).Equals(b)) { + c = tr->c; + } else if((tr->b).Equals(d) && (tr->c).Equals(b)) { + c = tr->a; + } else if((tr->c).Equals(d) && (tr->a).Equals(b)) { + c = tr->b; + } else { + continue; + } + // The vertex at C must be convex; but the others must + // be tested + Vector ab = b.Minus(a); + Vector bc = c.Minus(b); + Vector cd = d.Minus(c); + Vector de = e.Minus(d); + + double bDot = (ab.Cross(bc)).Dot(n); + double dDot = (cd.Cross(de)).Dot(n); + + bDot /= min(ab.Magnitude(), bc.Magnitude()); + dDot /= min(cd.Magnitude(), de.Magnitude()); + + if(fabs(bDot) < LENGTH_EPS && fabs(dDot) < LENGTH_EPS) { + conv[WRAP((j+1), convc)] = c; + // and remove the vertex at j, which is a dup + memmove(conv+j, conv+j+1, + (convc - j - 1)*sizeof(conv[0])); + convc--; + } else if(fabs(bDot) < LENGTH_EPS && dDot > 0) { + conv[j] = c; + } else if(fabs(dDot) < LENGTH_EPS && bDot > 0) { + conv[WRAP((j+1), convc)] = c; + } else if(bDot > 0 && dDot > 0) { + // conv[j] is unchanged, conv[j+1] goes to [j+2] + memmove(conv+j+2, conv+j+1, + (convc - j - 1)*sizeof(conv[0])); + conv[j+1] = c; + convc++; + } else { + continue; + } + + didAdd = true; + tr->tag = 1; + break; + } + } + } while(didAdd); + + // I need to debug why this is required; sometimes the above code + // still generates a convex polygon + for(i = 0; i < convc; i++) { + Vector a = conv[WRAP((i-1), convc)], + b = conv[i], + c = conv[WRAP((i+1), convc)]; + Vector ab = b.Minus(a); + Vector bc = c.Minus(b); + double bDot = (ab.Cross(bc)).Dot(n); + bDot /= min(ab.Magnitude(), bc.Magnitude()); + + if(bDot < 0) return; // XXX, shouldn't happen + } + + for(i = 0; i < convc - 2; i++) { + STriangle tr = STriangle::From(meta, conv[0], conv[i+1], conv[i+2]); + if(tr.MinAltitude() > LENGTH_EPS) { + tout[toutc++] = tr; + } + } + } + + l.n = start0; + for(i = 0; i < toutc; i++) { + AddTriangle(&(tout[i])); + } + FreeTemporary(tout); + FreeTemporary(conv); +} + +void SMesh::AddAgainstBsp(SMesh *srcm, SBsp3 *bsp3) { + int i; + + for(i = 0; i < srcm->l.n; i++) { + STriangle *st = &(srcm->l.elem[i]); + int pn = l.n; + atLeastOneDiscarded = false; + SBsp3::InsertOrCreate(bsp3, st, this); + if(!atLeastOneDiscarded && (l.n != (pn+1))) { + l.n = pn; + if(flipNormal) { + AddTriangle(st->meta, st->c, st->b, st->a); + } else { + AddTriangle(st->meta, st->a, st->b, st->c); + } + } + if(l.n - pn > 1) { + Simplify(pn); + } + } +} + +void SMesh::MakeFromUnionOf(SMesh *a, SMesh *b) { + SBsp3 *bspa = SBsp3::FromMesh(a); + SBsp3 *bspb = SBsp3::FromMesh(b); + + flipNormal = false; + keepCoplanar = false; + AddAgainstBsp(b, bspa); + + flipNormal = false; + keepCoplanar = true; + AddAgainstBsp(a, bspb); +} + +void SMesh::MakeFromDifferenceOf(SMesh *a, SMesh *b) { + SBsp3 *bspa = SBsp3::FromMesh(a); + SBsp3 *bspb = SBsp3::FromMesh(b); + + flipNormal = true; + keepCoplanar = true; + AddAgainstBsp(b, bspa); + + flipNormal = false; + keepCoplanar = false; + AddAgainstBsp(a, bspb); +} + +void SMesh::MakeFromCopyOf(SMesh *a) { + int i; + for(i = 0; i < a->l.n; i++) { + AddTriangle(&(a->l.elem[i])); + } +} + +void SMesh::MakeFromAssemblyOf(SMesh *a, SMesh *b) { + MakeFromCopyOf(a); + MakeFromCopyOf(b); +} + +void SMesh::MakeFromTransformationOf(SMesh *a, + Vector trans, Quaternion q, double scale) +{ + STriangle *tr; + for(tr = a->l.First(); tr; tr = a->l.NextAfter(tr)) { + STriangle tt = *tr; + tt.a = (tt.a).ScaledBy(scale); + tt.b = (tt.b).ScaledBy(scale); + tt.c = (tt.c).ScaledBy(scale); + if(scale < 0) { + // The mirroring would otherwise turn a closed mesh inside out. + swap(tt.a, tt.b); + } + tt.a = (q.Rotate(tt.a)).Plus(trans); + tt.b = (q.Rotate(tt.b)).Plus(trans); + tt.c = (q.Rotate(tt.c)).Plus(trans); + AddTriangle(&tt); + } +} + +bool SMesh::IsEmpty(void) { + return (l.n == 0); +} + +uint32_t SMesh::FirstIntersectionWith(Point2d mp) { + Vector p0 = Vector::From(mp.x, mp.y, 0); + Vector gn = Vector::From(0, 0, 1); + + double maxT = -1e12; + uint32_t face = 0; + + int i; + for(i = 0; i < l.n; i++) { + STriangle tr = l.elem[i]; + tr.a = SS.GW.ProjectPoint3(tr.a); + tr.b = SS.GW.ProjectPoint3(tr.b); + tr.c = SS.GW.ProjectPoint3(tr.c); + + Vector n = tr.Normal(); + + if(n.Dot(gn) < LENGTH_EPS) continue; // back-facing or on edge + + if(tr.ContainsPointProjd(gn, p0)) { + // Let our line have the form r(t) = p0 + gn*t + double t = -(n.Dot((tr.a).Minus(p0)))/(n.Dot(gn)); + if(t > maxT) { + maxT = t; + face = tr.meta.face; + } + } + } + return face; +} + +STriangleLl *STriangleLl::Alloc(void) + { return (STriangleLl *)AllocTemporary(sizeof(STriangleLl)); } +SKdNode *SKdNode::Alloc(void) + { return (SKdNode *)AllocTemporary(sizeof(SKdNode)); } + +SKdNode *SKdNode::From(SMesh *m) { + int i; + STriangle *tra = (STriangle *)AllocTemporary((m->l.n) * sizeof(*tra)); + + for(i = 0; i < m->l.n; i++) { + tra[i] = m->l.elem[i]; + } + + srand(0); + int n = m->l.n; + while(n > 1) { + int k = rand() % n; + n--; + swap(tra[k], tra[n]); + } + + STriangleLl *tll = NULL; + for(i = 0; i < m->l.n; i++) { + STriangleLl *tn = STriangleLl::Alloc(); + tn->tri = &(tra[i]); + tn->next = tll; + tll = tn; + } + + return SKdNode::From(tll); +} + +SKdNode *SKdNode::From(STriangleLl *tll) { + int which = 0; + SKdNode *ret = Alloc(); + + int i; + int gtc[3] = { 0, 0, 0 }, ltc[3] = { 0, 0, 0 }, allc = 0; + double badness[3] = { 0, 0, 0 }; + double split[3] = { 0, 0, 0 }; + + if(!tll) { + goto leaf; + } + + for(i = 0; i < 3; i++) { + int tcnt = 0; + STriangleLl *ll; + for(ll = tll; ll; ll = ll->next) { + split[i] += (ll->tri->a).Element(i); + split[i] += (ll->tri->b).Element(i); + split[i] += (ll->tri->c).Element(i); + tcnt++; + } + split[i] /= (tcnt*3); + + for(ll = tll; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + double a = (tr->a).Element(i), + b = (tr->b).Element(i), + c = (tr->c).Element(i); + + if(a < split[i] + KDTREE_EPS || + b < split[i] + KDTREE_EPS || + c < split[i] + KDTREE_EPS) + { + ltc[i]++; + } + if(a > split[i] - KDTREE_EPS || + b > split[i] - KDTREE_EPS || + c > split[i] - KDTREE_EPS) + { + gtc[i]++; + } + if(i == 0) allc++; + } + badness[i] = pow((double)ltc[i], 4) + pow((double)gtc[i], 4); + } + if(badness[0] < badness[1] && badness[0] < badness[2]) { + which = 0; + } else if(badness[1] < badness[2]) { + which = 1; + } else { + which = 2; + } + + if(allc < 3 || allc == gtc[which] || allc == ltc[which]) { + goto leaf; + } + + STriangleLl *ll; + STriangleLl *lgt, *llt; lgt = llt = NULL; + for(ll = tll; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + double a = (tr->a).Element(which), + b = (tr->b).Element(which), + c = (tr->c).Element(which); + + if(a < split[which] + KDTREE_EPS || + b < split[which] + KDTREE_EPS || + c < split[which] + KDTREE_EPS) + { + STriangleLl *n = STriangleLl::Alloc(); + *n = *ll; + n->next = llt; + llt = n; + } + if(a > split[which] - KDTREE_EPS || + b > split[which] - KDTREE_EPS || + c > split[which] - KDTREE_EPS) + { + STriangleLl *n = STriangleLl::Alloc(); + *n = *ll; + n->next = lgt; + lgt = n; + } + } + + ret->which = which; + ret->c = split[which]; + ret->gt = SKdNode::From(lgt); + ret->lt = SKdNode::From(llt); + return ret; + +leaf: + ret->tris = tll; + return ret; +} + +void SKdNode::ClearTags(void) { + if(gt && lt) { + gt->ClearTags(); + lt->ClearTags(); + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + ll->tri->tag = 0; + } + } +} + +void SKdNode::AddTriangle(STriangle *tr) { + if(gt && lt) { + double ta = (tr->a).Element(which), + tb = (tr->b).Element(which), + tc = (tr->c).Element(which); + if(ta < c + KDTREE_EPS || + tb < c + KDTREE_EPS || + tc < c + KDTREE_EPS) + { + lt->AddTriangle(tr); + } + if(ta > c - KDTREE_EPS || + tb > c - KDTREE_EPS || + tc > c - KDTREE_EPS) + { + gt->AddTriangle(tr); + } + } else { + STriangleLl *tn = STriangleLl::Alloc(); + tn->tri = tr; + tn->next = tris; + tris = tn; + } +} + +void SKdNode::MakeMeshInto(SMesh *m) { + if(gt) gt->MakeMeshInto(m); + if(lt) lt->MakeMeshInto(m); + + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + if(ll->tri->tag) continue; + + m->AddTriangle(ll->tri); + ll->tri->tag = 1; + } +} + +void SKdNode::ListTrianglesInto(std::vector *tl) { + if(gt) gt->ListTrianglesInto(tl); + if(lt) lt->ListTrianglesInto(tl); + + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + if(ll->tri->tag) continue; + + tl->push_back(ll->tri); + ll->tri->tag = 1; + } +} + +//----------------------------------------------------------------------------- +// If any triangles in the mesh have an edge that goes through v (but not +// a vertex at v), then split those triangles so that they now have a vertex +// there. The existing triangle is modified, and the new triangle appears +// in extras. +//----------------------------------------------------------------------------- +void SKdNode::SnapToVertex(Vector v, SMesh *extras) { + if(gt && lt) { + double vc = v.Element(which); + if(vc < c + KDTREE_EPS) { + lt->SnapToVertex(v, extras); + } + if(vc > c - KDTREE_EPS) { + gt->SnapToVertex(v, extras); + } + // Nothing bad happens if the triangle to be split appears in both + // branches; the first call will split the triangle, so that the + // second call will do nothing, because the modified triangle will + // already contain v + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + // Do a cheap bbox test first + int k; + bool mightHit = true; + + for(k = 0; k < 3; k++) { + if((tr->a).Element(k) < v.Element(k) - KDTREE_EPS && + (tr->b).Element(k) < v.Element(k) - KDTREE_EPS && + (tr->c).Element(k) < v.Element(k) - KDTREE_EPS) + { + mightHit = false; + break; + } + if((tr->a).Element(k) > v.Element(k) + KDTREE_EPS && + (tr->b).Element(k) > v.Element(k) + KDTREE_EPS && + (tr->c).Element(k) > v.Element(k) + KDTREE_EPS) + { + mightHit = false; + break; + } + } + if(!mightHit) continue; + + if(tr->a.Equals(v)) { tr->a = v; continue; } + if(tr->b.Equals(v)) { tr->b = v; continue; } + if(tr->c.Equals(v)) { tr->c = v; continue; } + + if(v.OnLineSegment(tr->a, tr->b)) { + STriangle nt = STriangle::From(tr->meta, tr->a, v, tr->c); + extras->AddTriangle(&nt); + tr->a = v; + continue; + } + if(v.OnLineSegment(tr->b, tr->c)) { + STriangle nt = STriangle::From(tr->meta, tr->b, v, tr->a); + extras->AddTriangle(&nt); + tr->b = v; + continue; + } + if(v.OnLineSegment(tr->c, tr->a)) { + STriangle nt = STriangle::From(tr->meta, tr->c, v, tr->b); + extras->AddTriangle(&nt); + tr->c = v; + continue; + } + } + } +} + +//----------------------------------------------------------------------------- +// Snap to each vertex of each triangle of the given mesh. If the given mesh +// is identical to the mesh used to make this kd tree, then the result should +// be a vertex-to-vertex mesh. +//----------------------------------------------------------------------------- +void SKdNode::SnapToMesh(SMesh *m) { + int i, j, k; + for(i = 0; i < m->l.n; i++) { + STriangle *tr = &(m->l.elem[i]); + for(j = 0; j < 3; j++) { + Vector v = ((j == 0) ? tr->a : + ((j == 1) ? tr->b : + tr->c)); + + SMesh extra = {}; + SnapToVertex(v, &extra); + + for(k = 0; k < extra.l.n; k++) { + STriangle *tra = (STriangle *)AllocTemporary(sizeof(*tra)); + *tra = extra.l.elem[k]; + AddTriangle(tra); + } + extra.Clear(); + } + } +} + +//----------------------------------------------------------------------------- +// For all the edges in sel, split them against the given triangle, and test +// them for occlusion. Keep only the visible segments. sel is both our input +// and our output. +//----------------------------------------------------------------------------- +void SKdNode::SplitLinesAgainstTriangle(SEdgeList *sel, STriangle *tr, bool removeHidden) { + SEdgeList seln = {}; + + Vector tn = tr->Normal().WithMagnitude(1); + double td = tn.Dot(tr->a); + + // Consider front-facing triangles only. + if(tn.z > LENGTH_EPS) { + // If the edge crosses our triangle's plane, then split into above + // and below parts. Note that we must preserve auxA, which contains + // the style associated with this line. + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + double da = (se->a).Dot(tn) - td, + db = (se->b).Dot(tn) - td; + if((da < -LENGTH_EPS && db > LENGTH_EPS) || + (db < -LENGTH_EPS && da > LENGTH_EPS)) + { + Vector m = Vector::AtIntersectionOfPlaneAndLine( + tn, td, + se->a, se->b, NULL); + seln.AddEdge(m, se->b, se->auxA); + se->b = m; + } + } + for(se = seln.l.First(); se; se = seln.l.NextAfter(se)) { + sel->AddEdge(se->a, se->b, se->auxA); + } + seln.Clear(); + + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + Vector pt = ((se->a).Plus(se->b)).ScaledBy(0.5); + if(pt.Dot(tn) - td > -LENGTH_EPS) { + // Edge is in front of or on our plane (remember, tn.z > 0) + // so it is exempt from further splitting + se->auxB = 1; + } else { + // Edge is behind our plane, needs further splitting + se->auxB = 0; + } + } + + // Considering only the (x, y) coordinates, split the edge against our + // triangle. + Point2d a = (tr->a).ProjectXy(), + b = (tr->b).ProjectXy(), + c = (tr->c).ProjectXy(); + + Point2d n[3] = { (b.Minus(a)).Normal().WithMagnitude(1), + (c.Minus(b)).Normal().WithMagnitude(1), + (a.Minus(c)).Normal().WithMagnitude(1) }; + + double d[3] = { n[0].Dot(b), + n[1].Dot(c), + n[2].Dot(a) }; + + // Split all of the edges where they intersect the triangle edges + int i; + for(i = 0; i < 3; i++) { + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxB) continue; + + Point2d ap = (se->a).ProjectXy(), + bp = (se->b).ProjectXy(); + double da = n[i].Dot(ap) - d[i], + db = n[i].Dot(bp) - d[i]; + if((da < -LENGTH_EPS && db > LENGTH_EPS) || + (db < -LENGTH_EPS && da > LENGTH_EPS)) + { + double dab = (db - da); + Vector spl = ((se->a).ScaledBy( db/dab)).Plus( + (se->b).ScaledBy(-da/dab)); + seln.AddEdge(spl, se->b, se->auxA); + se->b = spl; + } + } + for(se = seln.l.First(); se; se = seln.l.NextAfter(se)) { + // The split pieces are all behind the triangle, since only + // edges behind the triangle got split. So their auxB is 0. + sel->AddEdge(se->a, se->b, se->auxA, 0); + } + seln.Clear(); + } + + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if(se->auxB) { + // Lies above or on the triangle plane, so triangle doesn't + // occlude it. + se->tag = 0; + } else { + // Test the segment to see if it lies outside the triangle + // (i.e., outside wrt at least one edge), and keep it only + // then. + Point2d pt = ((se->a).Plus(se->b).ScaledBy(0.5)).ProjectXy(); + se->tag = 1; + for(i = 0; i < 3; i++) { + // If the test point lies on the boundary of our triangle, + // then we still discard the edge. + if(n[i].Dot(pt) - d[i] > LENGTH_EPS) se->tag = 0; + } + } + if(!removeHidden && se->tag == 1) + se->auxA = Style::HIDDEN_EDGE; + } + if(removeHidden) + sel->l.RemoveTagged(); + } +} + +//----------------------------------------------------------------------------- +// Given an edge orig, occlusion test it against our mesh. We output an edge +// list in sel, containing the visible portions of that edge. +//----------------------------------------------------------------------------- +void SKdNode::OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt, bool removeHidden) { + if(gt && lt) { + double ac = (orig.a).Element(which), + bc = (orig.b).Element(which); + // We can ignore triangles that are separated in x or y, but triangles + // that are separated in z may still contribute + if(ac < c + KDTREE_EPS || + bc < c + KDTREE_EPS || + which == 2) + { + lt->OcclusionTestLine(orig, sel, cnt, removeHidden); + } + if(ac > c - KDTREE_EPS || + bc > c - KDTREE_EPS || + which == 2) + { + gt->OcclusionTestLine(orig, sel, cnt, removeHidden); + } + } else { + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + if(tr->tag == cnt) continue; + + SplitLinesAgainstTriangle(sel, tr, removeHidden); + tr->tag = cnt; + } + } +} + +//----------------------------------------------------------------------------- +// Search the mesh for a triangle with an edge from b to a (i.e., the mate +// for the edge from a to b), and increment info->count each time that we +// find one. If a triangle is found, then report whether it is front- or +// back-facing using info->frontFacing. And regardless of whether a mate is +// found, report whether the edge intersects the mesh with info->intersectsMesh; +// if coplanarIsInter then we count the edge as intersecting if it's coplanar +// with a triangle in the mesh, otherwise not. +//----------------------------------------------------------------------------- +void SKdNode::FindEdgeOn(Vector a, Vector b, int cnt, bool coplanarIsInter, + EdgeOnInfo *info) +{ + if(gt && lt) { + double ac = a.Element(which), + bc = b.Element(which); + if(ac < c + KDTREE_EPS || + bc < c + KDTREE_EPS) + { + lt->FindEdgeOn(a, b, cnt, coplanarIsInter, info); + } + if(ac > c - KDTREE_EPS || + bc > c - KDTREE_EPS) + { + gt->FindEdgeOn(a, b, cnt, coplanarIsInter, info); + } + return; + } + + // We are a leaf node; so we iterate over all the triangles in our + // linked list. + STriangleLl *ll; + for(ll = tris; ll; ll = ll->next) { + STriangle *tr = ll->tri; + + if(tr->tag == cnt) continue; + + // Test if this triangle matches up with the given edge + if((a.Equals(tr->b) && b.Equals(tr->a)) || + (a.Equals(tr->c) && b.Equals(tr->b)) || + (a.Equals(tr->a) && b.Equals(tr->c))) + { + info->count++; + // Record whether this triangle is front- or back-facing. + if(tr->Normal().z > LENGTH_EPS) { + info->frontFacing = true; + } else { + info->frontFacing = false; + } + // Record the triangle + info->tr = tr; + // And record which vertexes a and b correspond to + info->ai = a.Equals(tr->a) ? 0 : (a.Equals(tr->b) ? 1 : 2); + info->bi = b.Equals(tr->a) ? 0 : (b.Equals(tr->b) ? 1 : 2); + } else if(((a.Equals(tr->a) && b.Equals(tr->b)) || + (a.Equals(tr->b) && b.Equals(tr->c)) || + (a.Equals(tr->c) && b.Equals(tr->a)))) + { + // It's an edge of this triangle, okay. + } else { + // Check for self-intersection + Vector n = (tr->Normal()).WithMagnitude(1); + double d = (tr->a).Dot(n); + double pa = a.Dot(n) - d, pb = b.Dot(n) - d; + // It's an intersection if neither point lies in-plane, + // and the edge crosses the plane (should handle in-plane + // intersections separately but don't yet). + if((pa < -LENGTH_EPS || pa > LENGTH_EPS) && + (pb < -LENGTH_EPS || pb > LENGTH_EPS) && + (pa*pb < 0)) + { + // The edge crosses the plane of the triangle; now see if + // it crosses inside the triangle. + if(tr->ContainsPointProjd(b.Minus(a), a)) { + if(coplanarIsInter) { + info->intersectsMesh = true; + } else { + Vector p = Vector::AtIntersectionOfPlaneAndLine( + n, d, a, b, NULL); + Vector ta = tr->a, + tb = tr->b, + tc = tr->c; + if((p.DistanceToLine(ta, tb.Minus(ta)) < LENGTH_EPS) || + (p.DistanceToLine(tb, tc.Minus(tb)) < LENGTH_EPS) || + (p.DistanceToLine(tc, ta.Minus(tc)) < LENGTH_EPS)) + { + // Intersection lies on edge. This happens when + // our edge is from a triangle coplanar with + // another triangle in the mesh. We don't test + // the edge against triangles whose plane contains + // that edge, but we do end up testing against + // the coplanar triangle's neighbours, which we + // will intersect on their edges. + } else { + info->intersectsMesh = true; + } + } + } + } + } + + // Ensure that we don't count this triangle twice if it appears + // in two buckets of the kd tree. + tr->tag = cnt; + } +} + +static bool CheckAndAddTrianglePair(std::set> *pairs, + STriangle *a, STriangle *b) +{ + if(pairs->find(std::make_pair(a, b)) != pairs->end() || + pairs->find(std::make_pair(b, a)) != pairs->end()) + return true; + + pairs->emplace(a, b); + return false; +} + +//----------------------------------------------------------------------------- +// Pick certain classes of edges out from our mesh. These might be: +// * naked edges (i.e., edges with no anti-parallel neighbor) and self- +// intersecting edges (i.e., edges that cross another triangle) +// * turning edges (i.e., edges where a front-facing triangle joins +// a back-facing triangle) +// * emphasized edges (i.e., edges where a triangle from one face joins +// a triangle from a different face) +//----------------------------------------------------------------------------- +void SKdNode::MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter, + bool *inter, bool *leaky, int auxA) +{ + if(inter) *inter = false; + if(leaky) *leaky = false; + + std::vector tris; + ClearTags(); + ListTrianglesInto(&tris); + + std::set> edgeTris; + int cnt = 1234; + for(STriangle *tr : tris) { + for(int j = 0; j < 3; j++) { + Vector a = (j == 0) ? tr->a : ((j == 1) ? tr->b : tr->c); + Vector b = (j == 0) ? tr->b : ((j == 1) ? tr->c : tr->a); + + SKdNode::EdgeOnInfo info = {}; + FindEdgeOn(a, b, cnt, coplanarIsInter, &info); + + switch(how) { + case NAKED_OR_SELF_INTER_EDGES: + if(info.count != 1) { + sel->AddEdge(a, b, auxA); + if(leaky) *leaky = true; + } + if(info.intersectsMesh) { + sel->AddEdge(a, b, auxA); + if(inter) *inter = true; + } + break; + + case SELF_INTER_EDGES: + if(info.intersectsMesh) { + sel->AddEdge(a, b, auxA); + if(inter) *inter = true; + } + break; + + case TURNING_EDGES: + if((tr->Normal().z < LENGTH_EPS) && + (info.count == 1) && + info.frontFacing) + { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // This triangle is back-facing (or on edge), and + // this edge has exactly one mate, and that mate is + // front-facing. So this is a turning edge. + sel->AddEdge(a, b, auxA); + } + break; + + case EMPHASIZED_EDGES: + if(info.count == 1 && tr->meta.face != info.tr->meta.face) { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // The two triangles that join at this edge come from + // different faces; either really different faces, + // or one is from a face and the other is zero (i.e., + // not from a face). + sel->AddEdge(a, b, auxA); + } + break; + + case SHARP_EDGES: + if(info.count == 1) { + Vector na0 = (j == 0) ? tr->an : + ((j == 1) ? tr->bn : tr->cn); + Vector nb0 = (j == 0) ? tr->bn : + ((j == 1) ? tr->cn : tr->an); + Vector na1 = (info.ai == 0) ? info.tr->an : + ((info.ai == 1) ? info.tr->bn : info.tr->cn); + Vector nb1 = (info.bi == 0) ? info.tr->an : + ((info.bi == 1) ? info.tr->bn : info.tr->cn); + na0 = na0.WithMagnitude(1.0); + nb0 = nb0.WithMagnitude(1.0); + na1 = na1.WithMagnitude(1.0); + nb1 = nb1.WithMagnitude(1.0); + if(!((na0.Equals(na1) && nb0.Equals(nb1)) || + (na0.Equals(nb1) && nb0.Equals(na1)))) { + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + break; + // The two triangles that join at this edge meet at a sharp + // angle. This implies they come from different faces. + sel->AddEdge(a, b, auxA); + } + } + break; + + default: oops(); + } + + cnt++; + } + } +} + +void SKdNode::MakeOutlinesInto(SOutlineList *sol) +{ + std::vector tris; + ClearTags(); + ListTrianglesInto(&tris); + + std::set> edgeTris; + int cnt = 1234; + for(STriangle *tr : tris) { + for(int j = 0; j < 3; j++) { + Vector a = (j == 0) ? tr->a : ((j == 1) ? tr->b : tr->c); + Vector b = (j == 0) ? tr->b : ((j == 1) ? tr->c : tr->a); + + SKdNode::EdgeOnInfo info = {}; + FindEdgeOn(a, b, cnt, /*coplanarIsInter=*/false, &info); + cnt++; + if(info.count != 1) continue; + if(CheckAndAddTrianglePair(&edgeTris, tr, info.tr)) + continue; + + sol->AddEdge(a, b, tr->Normal(), info.tr->Normal()); + } + } +} + +void SOutlineList::Clear() { + l.Clear(); +} + +void SOutlineList::AddEdge(Vector a, Vector b, Vector nl, Vector nr) { + SOutline so = {}; + so.a = a; + so.b = b; + so.nl = nl; + so.nr = nr; + l.Add(&so); +} + +void SOutlineList::FillOutlineTags(Vector projDir) { + for(SOutline *so = l.First(); so; so = l.NextAfter(so)) { + so->tag = ((so->nl.Dot(projDir) > 0.0) != (so->nr.Dot(projDir) > 0.0)); + } +} + +void SOutlineList::MakeFromCopyOf(SOutlineList *sol) { + for(SOutline *so = sol->l.First(); so; so = sol->l.NextAfter(so)) { + l.Add(so); + } +} diff --git a/src/modify.cpp b/src/modify.cpp new file mode 100644 index 0000000..47eee36 --- /dev/null +++ b/src/modify.cpp @@ -0,0 +1,670 @@ +//----------------------------------------------------------------------------- +// User-initiated (not parametric) operations to modify our sketch, by +// changing the requests, like to round a corner or split curves where they +// intersect. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// Replace constraints on oldpt with the same constraints on newpt. +// Useful when splitting, tangent arcing, or removing bezier points. +//----------------------------------------------------------------------------- +void GraphicsWindow::ReplacePointInConstraints(hEntity oldpt, hEntity newpt) { + int i; + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->ptA.v == oldpt.v) c->ptA = newpt; + if(c->ptB.v == oldpt.v) c->ptB = newpt; + } +} + +//----------------------------------------------------------------------------- +// Remove constraints on hpt. Useful when removing bezier points. +//----------------------------------------------------------------------------- +void GraphicsWindow::RemoveConstraintsForPointBeingDeleted(hEntity hpt) { + SK.constraint.ClearTags(); + for(int i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + if(c->ptA.v == hpt.v || c->ptB.v == hpt.v) { + c->tag = 1; + (SS.deleted.constraints)++; + if(c->type != Constraint::POINTS_COINCIDENT && + c->type != Constraint::HORIZONTAL && + c->type != Constraint::VERTICAL) + { + (SS.deleted.nonTrivialConstraints)++; + } + } + } + SK.constraint.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Let's say that A is coincident with B, and B is coincident with C. This +// implies that A is coincident with C; but if we delete B, then both +// constraints must be deleted too (since they reference B), and A is no +// longer constrained to C. This routine adds back that constraint. +//----------------------------------------------------------------------------- +void GraphicsWindow::FixConstraintsForRequestBeingDeleted(hRequest hr) { + Request *r = SK.GetRequest(hr); + if(r->group.v != SS.GW.activeGroup.v) return; + + Entity *e; + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(!(e->h.isFromRequest())) continue; + if(e->h.request().v != hr.v) continue; + + if(e->type != Entity::POINT_IN_2D && + e->type != Entity::POINT_IN_3D) + { + continue; + } + + // This is a point generated by the request being deleted; so fix + // the constraints for that. + FixConstraintsForPointBeingDeleted(e->h); + } +} +void GraphicsWindow::FixConstraintsForPointBeingDeleted(hEntity hpt) { + List ld = {}; + + Constraint *c; + SK.constraint.ClearTags(); + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->group.v != SS.GW.activeGroup.v) continue; + + if(c->ptA.v == hpt.v) { + ld.Add(&(c->ptB)); + c->tag = 1; + } + if(c->ptB.v == hpt.v) { + ld.Add(&(c->ptA)); + c->tag = 1; + } + } + // Remove constraints without waiting for regeneration; this way + // if another point takes the place of the deleted one (e.g. when + // removing control points of a bezier) the constraint doesn't + // spuriously move. Similarly, subsequent calls of this function + // (if multiple coincident points are getting deleted) will work + // correctly. + SK.constraint.RemoveTagged(); + + // If more than one point was constrained coincident with hpt, then + // those two points were implicitly coincident with each other. By + // deleting hpt (and all constraints that mention it), we will delete + // that relationship. So put it back here now. + int i; + for(i = 1; i < ld.n; i++) { + Constraint::ConstrainCoincident(ld.elem[i-1], ld.elem[i]); + } + ld.Clear(); +} + +//----------------------------------------------------------------------------- +// A curve by its parametric equation, helper functions for computing tangent +// arcs by a numerical method. +//----------------------------------------------------------------------------- +void GraphicsWindow::ParametricCurve::MakeFromEntity(hEntity he, bool reverse) { + *this = {}; + Entity *e = SK.GetEntity(he); + if(e->type == Entity::LINE_SEGMENT) { + isLine = true; + p0 = e->EndpointStart(), + p1 = e->EndpointFinish(); + if(reverse) { + swap(p0, p1); + } + } else if(e->type == Entity::ARC_OF_CIRCLE) { + isLine = false; + p0 = SK.GetEntity(e->point[0])->PointGetNum(); + Vector pe = SK.GetEntity(e->point[1])->PointGetNum(); + r = (pe.Minus(p0)).Magnitude(); + e->ArcGetAngles(&theta0, &theta1, &dtheta); + if(reverse) { + swap(theta0, theta1); + dtheta = -dtheta; + } + EntityBase *wrkpln = SK.GetEntity(e->workplane)->Normal(); + u = wrkpln->NormalU(); + v = wrkpln->NormalV(); + } else { + oops(); + } +} +double GraphicsWindow::ParametricCurve::LengthForAuto(void) { + if(isLine) { + // Allow a third of the line to disappear with auto radius + return (p1.Minus(p0)).Magnitude() / 3; + } else { + // But only a twentieth of the arc; shorter means fewer numerical + // problems since the curve is more linear over shorter sections. + return (fabs(dtheta)*r)/20; + } +} +Vector GraphicsWindow::ParametricCurve::PointAt(double t) { + if(isLine) { + return p0.Plus((p1.Minus(p0)).ScaledBy(t)); + } else { + double theta = theta0 + dtheta*t; + return p0.Plus(u.ScaledBy(r*cos(theta)).Plus(v.ScaledBy(r*sin(theta)))); + } +} +Vector GraphicsWindow::ParametricCurve::TangentAt(double t) { + if(isLine) { + return p1.Minus(p0); + } else { + double theta = theta0 + dtheta*t; + Vector t = u.ScaledBy(-r*sin(theta)).Plus(v.ScaledBy(r*cos(theta))); + t = t.ScaledBy(dtheta); + return t; + } +} +hRequest GraphicsWindow::ParametricCurve::CreateRequestTrimmedTo(double t, + bool extraConstraints, hEntity orig, hEntity arc, bool arcFinish) +{ + hRequest hr; + Entity *e; + if(isLine) { + hr = SS.GW.AddRequest(Request::LINE_SEGMENT, false), + e = SK.GetEntity(hr.entity(0)); + SK.GetEntity(e->point[0])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[1])->PointForceTo(PointAt(1)); + ConstrainPointIfCoincident(e->point[0]); + ConstrainPointIfCoincident(e->point[1]); + if(extraConstraints) { + Constraint::Constrain(Constraint::PT_ON_LINE, + hr.entity(1), Entity::NO_ENTITY, orig); + } + Constraint::Constrain(Constraint::ARC_LINE_TANGENT, + Entity::NO_ENTITY, Entity::NO_ENTITY, + arc, e->h, arcFinish, false); + } else { + hr = SS.GW.AddRequest(Request::ARC_OF_CIRCLE, false), + e = SK.GetEntity(hr.entity(0)); + SK.GetEntity(e->point[0])->PointForceTo(p0); + if(dtheta > 0) { + SK.GetEntity(e->point[1])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[2])->PointForceTo(PointAt(1)); + } else { + SK.GetEntity(e->point[2])->PointForceTo(PointAt(t)); + SK.GetEntity(e->point[1])->PointForceTo(PointAt(1)); + } + ConstrainPointIfCoincident(e->point[0]); + ConstrainPointIfCoincident(e->point[1]); + ConstrainPointIfCoincident(e->point[2]); + // The tangency constraint alone is enough to fully constrain it, + // so there's no need for more. + Constraint::Constrain(Constraint::CURVE_CURVE_TANGENT, + Entity::NO_ENTITY, Entity::NO_ENTITY, + arc, e->h, arcFinish, (dtheta < 0)); + } + return hr; +} + +//----------------------------------------------------------------------------- +// If a point in the same group as hpt, and numerically coincident with hpt, +// happens to exist, then constrain that point coincident to hpt. +//----------------------------------------------------------------------------- +void GraphicsWindow::ParametricCurve::ConstrainPointIfCoincident(hEntity hpt) { + Entity *e, *pt; + pt = SK.GetEntity(hpt); + Vector ev, ptv; + ptv = pt->PointGetNum(); + + for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { + if(e->h.v == pt->h.v) continue; + if(!e->IsPoint()) continue; + if(e->group.v != pt->group.v) continue; + if(e->workplane.v != pt->workplane.v) continue; + + ev = e->PointGetNum(); + if(!ev.Equals(ptv)) continue; + + Constraint::ConstrainCoincident(hpt, e->h); + break; + } +} + +//----------------------------------------------------------------------------- +// A single point must be selected when this function is called. We find two +// non-construction line segments that join at this point, and create a +// tangent arc joining them. +//----------------------------------------------------------------------------- +void GraphicsWindow::MakeTangentArc(void) { + if(!LockedInWorkplane()) { + Error("Must be sketching in workplane to create tangent " + "arc."); + return; + } + + // The point corresponding to the vertex to be rounded. + Vector pshared = SK.GetEntity(gs.point[0])->PointGetNum(); + ClearSelection(); + + // First, find two requests (that are not construction, and that are + // in our group and workplane) that generate entities that have an + // endpoint at our vertex to be rounded. + int i, c = 0; + Entity *ent[2]; + Request *req[2]; + hRequest hreq[2]; + hEntity hent[2]; + bool pointf[2]; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != activeGroup.v) continue; + if(r->workplane.v != ActiveWorkplane().v) continue; + if(r->construction) continue; + if(r->type != Request::LINE_SEGMENT && + r->type != Request::ARC_OF_CIRCLE) + { + continue; + } + + Entity *e = SK.GetEntity(r->h.entity(0)); + Vector ps = e->EndpointStart(), + pf = e->EndpointFinish(); + + if(ps.Equals(pshared) || pf.Equals(pshared)) { + if(c < 2) { + // We record the entity and request and their handles, + // and whether the vertex to be rounded is the start or + // finish of this entity. + ent[c] = e; + hent[c] = e->h; + req[c] = r; + hreq[c] = r->h; + pointf[c] = (pf.Equals(pshared)); + } + c++; + } + } + if(c != 2) { + Error("To create a tangent arc, select a point where two " + "non-construction lines or cicles in this group and " + "workplane join."); + return; + } + + Entity *wrkpl = SK.GetEntity(ActiveWorkplane()); + Vector wn = wrkpl->Normal()->NormalN(); + + // Based on these two entities, we make the objects that we'll use to + // numerically find the tangent arc. + ParametricCurve pc[2]; + pc[0].MakeFromEntity(ent[0]->h, pointf[0]); + pc[1].MakeFromEntity(ent[1]->h, pointf[1]); + + // And thereafter we mustn't touch the entity or req ptrs, + // because the new requests/entities we add might force a + // realloc. + memset(ent, 0, sizeof(ent)); + memset(req, 0, sizeof(req)); + + Vector pinter; + double r = 0.0, vv = 0.0; + // We now do Newton iterations to find the tangent arc, and its positions + // t back along the two curves, starting from shared point of the curves + // at t = 0. Lots of iterations helps convergence, and this is still + // ~10 ms for everything. + int iters = 1000; + double t[2] = { 0, 0 }, tp[2]; + for(i = 0; i < iters + 20; i++) { + Vector p0 = pc[0].PointAt(t[0]), + p1 = pc[1].PointAt(t[1]), + t0 = pc[0].TangentAt(t[0]), + t1 = pc[1].TangentAt(t[1]); + + pinter = Vector::AtIntersectionOfLines(p0, p0.Plus(t0), + p1, p1.Plus(t1), + NULL, NULL, NULL); + + // The sign of vv determines whether shortest distance is + // clockwise or anti-clockwise. + Vector v = (wn.Cross(t0)).WithMagnitude(1); + vv = t1.Dot(v); + + double dot = (t0.WithMagnitude(1)).Dot(t1.WithMagnitude(1)); + double theta = acos(dot); + + if(SS.tangentArcManual) { + r = SS.tangentArcRadius; + } else { + r = 200/scale; + // Set the radius so that no more than one third of the + // line segment disappears. + r = min(r, pc[0].LengthForAuto()*tan(theta/2)); + r = min(r, pc[1].LengthForAuto()*tan(theta/2));; + } + // We are source-stepping the radius, to improve convergence. So + // ramp that for most of the iterations, and then do a few at + // the end with that constant for polishing. + if(i < iters) { + r *= 0.1 + 0.9*i/((double)iters); + } + + // The distance from the intersection of the lines to the endpoint + // of the arc, along each line. + double el = r/tan(theta/2); + + // Compute the endpoints of the arc, for each curve + Vector pa0 = pinter.Plus(t0.WithMagnitude(el)), + pa1 = pinter.Plus(t1.WithMagnitude(el)); + + tp[0] = t[0]; + tp[1] = t[1]; + + // And convert those points to parameter values along the curve. + t[0] += (pa0.Minus(p0)).DivPivoting(t0); + t[1] += (pa1.Minus(p1)).DivPivoting(t1); + } + + // Stupid check for convergence, and for an out of range result (as + // we would get, for example, if the line is too short to fit the + // rounding arc). + if(fabs(tp[0] - t[0]) > 1e-3 || fabs(tp[1] - t[1]) > 1e-3 || + t[0] < 0.01 || t[1] < 0.01 || + t[0] > 0.99 || t[1] > 0.99 || + isnan(t[0]) || isnan(t[1])) + { + Error("Couldn't round this corner. Try a smaller radius, or try " + "creating the desired geometry by hand with tangency " + "constraints."); + return; + } + + // Compute the location of the center of the arc + Vector center = pc[0].PointAt(t[0]), + v0inter = pinter.Minus(center); + int a, b; + if(vv < 0) { + a = 1; b = 2; + center = center.Minus(v0inter.Cross(wn).WithMagnitude(r)); + } else { + a = 2; b = 1; + center = center.Plus(v0inter.Cross(wn).WithMagnitude(r)); + } + + SS.UndoRemember(); + + hRequest harc = AddRequest(Request::ARC_OF_CIRCLE, false); + Entity *earc = SK.GetEntity(harc.entity(0)); + hEntity hearc = earc->h; + + SK.GetEntity(earc->point[0])->PointForceTo(center); + SK.GetEntity(earc->point[a])->PointForceTo(pc[0].PointAt(t[0])); + SK.GetEntity(earc->point[b])->PointForceTo(pc[1].PointAt(t[1])); + + earc = NULL; + + pc[0].CreateRequestTrimmedTo(t[0], !SS.tangentArcDeleteOld, + hent[0], hearc, (b == 1)); + pc[1].CreateRequestTrimmedTo(t[1], !SS.tangentArcDeleteOld, + hent[1], hearc, (a == 1)); + + // Now either make the original entities construction, or delete them + // entirely, according to user preference. + Request *re; + SK.request.ClearTags(); + for(re = SK.request.First(); re; re = SK.request.NextAfter(re)) { + if(re->h.v == hreq[0].v || re->h.v == hreq[1].v) { + if(SS.tangentArcDeleteOld) { + re->tag = 1; + } else { + re->construction = true; + } + } + } + if(SS.tangentArcDeleteOld) { + DeleteTaggedRequests(); + } + + SS.ScheduleGenerateAll(); +} + +hEntity GraphicsWindow::SplitLine(hEntity he, Vector pinter) { + // Save the original endpoints, since we're about to delete this entity. + Entity *e01 = SK.GetEntity(he); + hEntity hep0 = e01->point[0], hep1 = e01->point[1]; + Vector p0 = SK.GetEntity(hep0)->PointGetNum(), + p1 = SK.GetEntity(hep1)->PointGetNum(); + + // Add the two line segments this one gets split into. + hRequest r0i = AddRequest(Request::LINE_SEGMENT, false), + ri1 = AddRequest(Request::LINE_SEGMENT, false); + // Don't get entities till after adding, realloc issues + + Entity *e0i = SK.GetEntity(r0i.entity(0)), + *ei1 = SK.GetEntity(ri1.entity(0)); + + SK.GetEntity(e0i->point[0])->PointForceTo(p0); + SK.GetEntity(e0i->point[1])->PointForceTo(pinter); + SK.GetEntity(ei1->point[0])->PointForceTo(pinter); + SK.GetEntity(ei1->point[1])->PointForceTo(p1); + + ReplacePointInConstraints(hep0, e0i->point[0]); + ReplacePointInConstraints(hep1, ei1->point[1]); + Constraint::ConstrainCoincident(e0i->point[1], ei1->point[0]); + return e0i->point[1]; +} + +hEntity GraphicsWindow::SplitCircle(hEntity he, Vector pinter) { + Entity *circle = SK.GetEntity(he); + if(circle->type == Entity::CIRCLE) { + // Start with an unbroken circle, split it into a 360 degree arc. + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + + circle = NULL; // shortly invalid! + hRequest hr = AddRequest(Request::ARC_OF_CIRCLE, false); + + Entity *arc = SK.GetEntity(hr.entity(0)); + + SK.GetEntity(arc->point[0])->PointForceTo(center); + SK.GetEntity(arc->point[1])->PointForceTo(pinter); + SK.GetEntity(arc->point[2])->PointForceTo(pinter); + + Constraint::ConstrainCoincident(arc->point[1], arc->point[2]); + return arc->point[1]; + } else { + // Start with an arc, break it in to two arcs + hEntity hc = circle->point[0], + hs = circle->point[1], + hf = circle->point[2]; + Vector center = SK.GetEntity(hc)->PointGetNum(), + start = SK.GetEntity(hs)->PointGetNum(), + finish = SK.GetEntity(hf)->PointGetNum(); + + circle = NULL; // shortly invalid! + hRequest hr0 = AddRequest(Request::ARC_OF_CIRCLE, false), + hr1 = AddRequest(Request::ARC_OF_CIRCLE, false); + + Entity *arc0 = SK.GetEntity(hr0.entity(0)), + *arc1 = SK.GetEntity(hr1.entity(0)); + + SK.GetEntity(arc0->point[0])->PointForceTo(center); + SK.GetEntity(arc0->point[1])->PointForceTo(start); + SK.GetEntity(arc0->point[2])->PointForceTo(pinter); + + SK.GetEntity(arc1->point[0])->PointForceTo(center); + SK.GetEntity(arc1->point[1])->PointForceTo(pinter); + SK.GetEntity(arc1->point[2])->PointForceTo(finish); + + ReplacePointInConstraints(hs, arc0->point[1]); + ReplacePointInConstraints(hf, arc1->point[2]); + Constraint::ConstrainCoincident(arc0->point[2], arc1->point[1]); + return arc0->point[2]; + } +} + +hEntity GraphicsWindow::SplitCubic(hEntity he, Vector pinter) { + // Save the original endpoints, since we're about to delete this entity. + Entity *e01 = SK.GetEntity(he); + SBezierList sbl = {}; + e01->GenerateBezierCurves(&sbl); + + hEntity hep0 = e01->point[0], + hep1 = e01->point[3+e01->extraPoints], + hep0n = Entity::NO_ENTITY, // the new start point + hep1n = Entity::NO_ENTITY, // the new finish point + hepin = Entity::NO_ENTITY; // the intersection point + + // The curve may consist of multiple cubic segments. So find which one + // contains the intersection point. + double t; + int i, j; + for(i = 0; i < sbl.l.n; i++) { + SBezier *sb = &(sbl.l.elem[i]); + if(sb->deg != 3) oops(); + + sb->ClosestPointTo(pinter, &t, false); + if(pinter.Equals(sb->PointAt(t))) { + // Split that segment at the intersection. + SBezier b0i, bi1, b01 = *sb; + b01.SplitAt(t, &b0i, &bi1); + + // Add the two cubic segments this one gets split into. + hRequest r0i = AddRequest(Request::CUBIC, false), + ri1 = AddRequest(Request::CUBIC, false); + // Don't get entities till after adding, realloc issues + + Entity *e0i = SK.GetEntity(r0i.entity(0)), + *ei1 = SK.GetEntity(ri1.entity(0)); + + for(j = 0; j <= 3; j++) { + SK.GetEntity(e0i->point[j])->PointForceTo(b0i.ctrl[j]); + } + for(j = 0; j <= 3; j++) { + SK.GetEntity(ei1->point[j])->PointForceTo(bi1.ctrl[j]); + } + + Constraint::ConstrainCoincident(e0i->point[3], ei1->point[0]); + if(i == 0) hep0n = e0i->point[0]; + hep1n = ei1->point[3]; + hepin = e0i->point[3]; + } else { + hRequest r = AddRequest(Request::CUBIC, false); + Entity *e = SK.GetEntity(r.entity(0)); + + for(j = 0; j <= 3; j++) { + SK.GetEntity(e->point[j])->PointForceTo(sb->ctrl[j]); + } + + if(i == 0) hep0n = e->point[0]; + hep1n = e->point[3]; + } + } + + sbl.Clear(); + + ReplacePointInConstraints(hep0, hep0n); + ReplacePointInConstraints(hep1, hep1n); + return hepin; +} + +hEntity GraphicsWindow::SplitEntity(hEntity he, Vector pinter) { + Entity *e = SK.GetEntity(he); + int entityType = e->type; + + hEntity ret; + if(e->IsCircle()) { + ret = SplitCircle(he, pinter); + } else if(e->type == Entity::LINE_SEGMENT) { + ret = SplitLine(he, pinter); + } else if(e->type == Entity::CUBIC || e->type == Entity::CUBIC_PERIODIC) { + ret = SplitCubic(he, pinter); + } else { + Error("Couldn't split this entity; lines, circles, or cubics only."); + return Entity::NO_ENTITY; + } + + // Finally, delete the request that generated the original entity. + int reqType = EntReqTable::GetRequestForEntity(entityType); + SK.request.ClearTags(); + for(int i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + if(r->group.v != activeGroup.v) continue; + if(r->type != reqType) continue; + + // If the user wants to keep the old entities around, they can just + // mark them construction first. + if(he.v == r->h.entity(0).v && !r->construction) { + r->tag = 1; + break; + } + } + DeleteTaggedRequests(); + + return ret; +} + +void GraphicsWindow::SplitLinesOrCurves(void) { + if(!LockedInWorkplane()) { + Error("Must be sketching in workplane to split."); + return; + } + + GroupSelection(); + if(!(gs.n == 2 &&(gs.lineSegments + + gs.circlesOrArcs + + gs.cubics + + gs.periodicCubics) == 2)) + { + Error("Select two entities that intersect each other (e.g. two lines " + "or two circles or a circle and a line)."); + return; + } + + hEntity ha = gs.entity[0], + hb = gs.entity[1]; + Entity *ea = SK.GetEntity(ha), + *eb = SK.GetEntity(hb); + + // Compute the possibly-rational Bezier curves for each of these entities + SBezierList sbla, sblb; + sbla = {}; + sblb = {}; + ea->GenerateBezierCurves(&sbla); + eb->GenerateBezierCurves(&sblb); + // and then compute the points where they intersect, based on those curves. + SPointList inters = {}; + sbla.AllIntersectionsWith(&sblb, &inters); + + if(inters.l.n > 0) { + Vector pi = Vector::From(0, 0, 0); + // If there's multiple points, then take the one closest to the + // mouse pointer. + double dmin = VERY_POSITIVE; + SPoint *sp; + for(sp = inters.l.First(); sp; sp = inters.l.NextAfter(sp)) { + double d = ProjectPoint(sp->p).DistanceTo(currentMousePosition); + if(d < dmin) { + dmin = d; + pi = sp->p; + } + } + + SS.UndoRemember(); + hEntity hia = SplitEntity(ha, pi), + hib = SplitEntity(hb, pi); + // SplitEntity adds the coincident constraints to join the split halves + // of each original entity; and then we add the constraint to join + // the two entities together at the split point. + if(hia.v && hib.v) { + Constraint::ConstrainCoincident(hia, hib); + } + } else { + Error("Can't split; no intersection found."); + } + + // All done, clean up and regenerate. + inters.Clear(); + sbla.Clear(); + sblb.Clear(); + ClearSelection(); + SS.ScheduleGenerateAll(); +} + diff --git a/src/mouse.cpp b/src/mouse.cpp new file mode 100644 index 0000000..700b765 --- /dev/null +++ b/src/mouse.cpp @@ -0,0 +1,1513 @@ +//----------------------------------------------------------------------------- +// Anything relating to mouse, keyboard, or 6-DOF mouse input. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void GraphicsWindow::UpdateDraggedPoint(hEntity hp, double mx, double my) { + Entity *p = SK.GetEntity(hp); + Vector pos = p->PointGetNum(); + UpdateDraggedNum(&pos, mx, my); + p->PointForceTo(pos); +} + +void GraphicsWindow::UpdateDraggedNum(Vector *pos, double mx, double my) { + *pos = pos->Plus(projRight.ScaledBy((mx - orig.mouse.x)/scale)); + *pos = pos->Plus(projUp.ScaledBy((my - orig.mouse.y)/scale)); +} + +void GraphicsWindow::AddPointToDraggedList(hEntity hp) { + Entity *p = SK.GetEntity(hp); + // If an entity and its points are both selected, then its points could + // end up in the list twice. This would be bad, because it would move + // twice as far as the mouse pointer... + List *lhe = &(pending.points); + for(hEntity *hee = lhe->First(); hee; hee = lhe->NextAfter(hee)) { + if(hee->v == hp.v) { + // Exact same point. + return; + } + Entity *pe = SK.GetEntity(*hee); + if(pe->type == p->type && + pe->type != Entity::POINT_IN_2D && + pe->type != Entity::POINT_IN_3D && + pe->group.v == p->group.v) + { + // Transform-type point, from the same group. So it handles the + // same unknowns. + return; + } + } + pending.points.Add(&hp); +} + +void GraphicsWindow::StartDraggingByEntity(hEntity he) { + Entity *e = SK.GetEntity(he); + if(e->IsPoint()) { + AddPointToDraggedList(e->h); + } else if(e->type == Entity::LINE_SEGMENT || + e->type == Entity::ARC_OF_CIRCLE || + e->type == Entity::CUBIC || + e->type == Entity::CUBIC_PERIODIC || + e->type == Entity::CIRCLE || + e->type == Entity::TTF_TEXT) + { + int pts; + EntReqTable::GetEntityInfo(e->type, e->extraPoints, + NULL, &pts, NULL, NULL); + for(int i = 0; i < pts; i++) { + AddPointToDraggedList(e->point[i]); + } + } +} + +void GraphicsWindow::StartDraggingBySelection(void) { + List *ls = &(selection); + for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { + if(!s->entity.v) continue; + + StartDraggingByEntity(s->entity); + } + // The user might select a point, and then click it again to start + // dragging; but the point just got unselected by that click. So drag + // the hovered item too, and they'll always have it. + if(hover.entity.v) StartDraggingByEntity(hover.entity); +} + +void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, + bool middleDown, bool rightDown, bool shiftDown, bool ctrlDown) +{ + if(GraphicsEditControlIsVisible()) return; + if(context.active) return; + + SS.extraLine.draw = false; + + if(!orig.mouseDown) { + // If someone drags the mouse into our window with the left button + // already depressed, then we don't have our starting point; so + // don't try. + leftDown = false; + } + + if(rightDown) { + middleDown = true; + shiftDown = !shiftDown; + } + + if(SS.showToolbar) { + if(ToolbarMouseMoved((int)x, (int)y)) { + hover.Clear(); + return; + } + } + + if(!leftDown && (pending.operation == DRAGGING_POINTS || + pending.operation == DRAGGING_MARQUEE)) + { + ClearPending(); + InvalidateGraphics(); + } + + Point2d mp = Point2d::From(x, y); + currentMousePosition = mp; + + if(rightDown && orig.mouse.DistanceTo(mp) < 5 && !orig.startedMoving) { + // Avoid accidentally panning (or rotating if shift is down) if the + // user wants a context menu. + return; + } + orig.startedMoving = true; + + // If the middle button is down, then mouse movement is used to pan and + // rotate our view. This wins over everything else. + if(middleDown) { + hover.Clear(); + + double dx = (x - orig.mouse.x) / scale; + double dy = (y - orig.mouse.y) / scale; + + if(!(shiftDown || ctrlDown)) { + double s = 0.3*(PI/180)*scale; // degrees per pixel + projRight = orig.projRight.RotatedAbout(orig.projUp, -s*dx); + projUp = orig.projUp.RotatedAbout(orig.projRight, s*dy); + + NormalizeProjectionVectors(); + } else if(ctrlDown) { + double theta = atan2(orig.mouse.y, orig.mouse.x); + theta -= atan2(y, x); + SS.extraLine.draw = true; + SS.extraLine.ptA = UnProjectPoint(Point2d::From(0, 0)); + SS.extraLine.ptB = UnProjectPoint(mp); + + Vector normal = orig.projRight.Cross(orig.projUp); + projRight = orig.projRight.RotatedAbout(normal, theta); + projUp = orig.projUp.RotatedAbout(normal, theta); + + NormalizeProjectionVectors(); + } else { + offset.x = orig.offset.x + dx*projRight.x + dy*projUp.x; + offset.y = orig.offset.y + dx*projRight.y + dy*projUp.y; + offset.z = orig.offset.z + dx*projRight.z + dy*projUp.z; + } + + orig.projRight = projRight; + orig.projUp = projUp; + orig.offset = offset; + orig.mouse.x = x; + orig.mouse.y = y; + + if(SS.TW.shown.screen == TextWindow::SCREEN_EDIT_VIEW) { + if(havePainted) { + SS.ScheduleShowTW(); + } + } + InvalidateGraphics(); + havePainted = false; + return; + } + + if(pending.operation == 0) { + double dm = orig.mouse.DistanceTo(mp); + // If we're currently not doing anything, then see if we should + // start dragging something. + if(leftDown && dm > 3) { + Entity *e = NULL; + if(hover.entity.v) e = SK.GetEntity(hover.entity); + if(e && e->type != Entity::WORKPLANE) { + Entity *e = SK.GetEntity(hover.entity); + if(e->type == Entity::CIRCLE && selection.n <= 1) { + // Drag the radius. + ClearSelection(); + pending.circle = hover.entity; + pending.operation = DRAGGING_RADIUS; + } else if(e->IsNormal()) { + ClearSelection(); + pending.normal = hover.entity; + pending.operation = DRAGGING_NORMAL; + } else { + if(!hoverWasSelectedOnMousedown) { + // The user clicked an unselected entity, which + // means they're dragging just the hovered thing, + // not the full selection. So clear all the selection + // except that entity. + ClearSelection(); + MakeSelected(e->h); + } + StartDraggingBySelection(); + if(!hoverWasSelectedOnMousedown) { + // And then clear the selection again, since they + // probably didn't want that selected if they just + // were dragging it. + ClearSelection(); + } + hover.Clear(); + pending.operation = DRAGGING_POINTS; + } + } else if(hover.constraint.v && + SK.GetConstraint(hover.constraint)->HasLabel()) + { + ClearSelection(); + pending.constraint = hover.constraint; + pending.operation = DRAGGING_CONSTRAINT; + } + if(pending.operation != 0) { + // We just started a drag, so remember for the undo before + // the drag changes anything. + SS.UndoRemember(); + } else { + if(!hover.constraint.v) { + // That's just marquee selection, which should not cause + // an undo remember. + if(dm > 10) { + if(hover.entity.v) { + // Avoid accidentally selecting workplanes when + // starting drags. + MakeUnselected(hover.entity, false); + hover.Clear(); + } + pending.operation = DRAGGING_MARQUEE; + orig.marqueePoint = + UnProjectPoint(orig.mouseOnButtonDown); + } + } + } + } else { + // Otherwise, just hit test and give up; but don't hit test + // if the mouse is down, because then the user could hover + // a point, mouse down (thus selecting it), and drag, in an + // effort to drag the point, but instead hover a different + // entity before we move far enough to start the drag. + if(!leftDown) { + // Hit testing can potentially take a lot of time. + // If we haven't painted since last time we highlighted + // something, don't hit test again, since this just causes + // a lag. + if(!havePainted) return; + HitTestMakeSelection(mp); + } + } + return; + } + + // If the user has started an operation from the menu, but not + // completed it, then just do the selection. + if(pending.operation < FIRST_PENDING) { + HitTestMakeSelection(mp); + return; + } + + // We're currently dragging something; so do that. But if we haven't + // painted since the last time we solved, do nothing, because there's + // no sense solving a frame and not displaying it. + if(!havePainted) { + if(pending.operation == DRAGGING_POINTS && ctrlDown) { + SS.extraLine.ptA = UnProjectPoint(orig.mouseOnButtonDown); + SS.extraLine.ptB = UnProjectPoint(mp); + SS.extraLine.draw = true; + } + return; + } + + havePainted = false; + switch(pending.operation) { + case DRAGGING_CONSTRAINT: { + Constraint *c = SK.constraint.FindById(pending.constraint); + UpdateDraggedNum(&(c->disp.offset), x, y); + orig.mouse = mp; + InvalidateGraphics(); + break; + } + + case DRAGGING_NEW_LINE_POINT: + if(!ctrlDown) { + SS.GW.pending.suggestion = + SS.GW.SuggestLineConstraint(SS.GW.pending.request); + } else { + SS.GW.pending.suggestion = SUGGESTED_NONE; + } + case DRAGGING_NEW_POINT: + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + SS.MarkGroupDirtyByEntity(pending.point); + orig.mouse = mp; + InvalidateGraphics(); + break; + + case DRAGGING_POINTS: + if(shiftDown || ctrlDown) { + // Edit the rotation associated with a POINT_N_ROT_TRANS, + // either within (ctrlDown) or out of (shiftDown) the plane + // of the screen. So first get the rotation to apply, in qt. + Quaternion qt; + if(ctrlDown) { + double d = mp.DistanceTo(orig.mouseOnButtonDown); + if(d < 25) { + // Don't start dragging the position about the normal + // until we're a little ways out, to get a reasonable + // reference pos + orig.mouse = mp; + break; + } + double theta = atan2(orig.mouse.y-orig.mouseOnButtonDown.y, + orig.mouse.x-orig.mouseOnButtonDown.x); + theta -= atan2(y-orig.mouseOnButtonDown.y, + x-orig.mouseOnButtonDown.x); + + Vector gn = projRight.Cross(projUp); + qt = Quaternion::From(gn, -theta); + + SS.extraLine.draw = true; + SS.extraLine.ptA = UnProjectPoint(orig.mouseOnButtonDown); + SS.extraLine.ptB = UnProjectPoint(mp); + } else { + double dx = -(x - orig.mouse.x); + double dy = -(y - orig.mouse.y); + double s = 0.3*(PI/180); // degrees per pixel + qt = Quaternion::From(projUp, -s*dx).Times( + Quaternion::From(projRight, s*dy)); + } + orig.mouse = mp; + + // Now apply this rotation to the points being dragged. + List *lhe = &(pending.points); + for(hEntity *he = lhe->First(); he; he = lhe->NextAfter(he)) { + Entity *e = SK.GetEntity(*he); + if(e->type != Entity::POINT_N_ROT_TRANS) { + if(ctrlDown) { + Vector p = e->PointGetNum(); + p = p.Minus(SS.extraLine.ptA); + p = qt.Rotate(p); + p = p.Plus(SS.extraLine.ptA); + e->PointForceTo(p); + SS.MarkGroupDirtyByEntity(e->h); + } + continue; + } + + Quaternion q = e->PointGetQuaternion(); + Vector p = e->PointGetNum(); + q = qt.Times(q); + e->PointForceQuaternionTo(q); + // Let's rotate about the selected point; so fix up the + // translation so that that point didn't move. + e->PointForceTo(p); + SS.MarkGroupDirtyByEntity(e->h); + } + } else { + List *lhe = &(pending.points); + for(hEntity *he = lhe->First(); he; he = lhe->NextAfter(he)) { + UpdateDraggedPoint(*he, x, y); + SS.MarkGroupDirtyByEntity(*he); + } + orig.mouse = mp; + } + break; + + case DRAGGING_NEW_CUBIC_POINT: { + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + + hRequest hr = pending.point.request(); + if(pending.point.v == hr.entity(4).v) { + // The very first segment; dragging final point drags both + // tangent points. + Vector p0 = SK.GetEntity(hr.entity(1))->PointGetNum(), + p3 = SK.GetEntity(hr.entity(4))->PointGetNum(), + p1 = p0.ScaledBy(2.0/3).Plus(p3.ScaledBy(1.0/3)), + p2 = p0.ScaledBy(1.0/3).Plus(p3.ScaledBy(2.0/3)); + SK.GetEntity(hr.entity(1+1))->PointForceTo(p1); + SK.GetEntity(hr.entity(1+2))->PointForceTo(p2); + } else { + // A subsequent segment; dragging point drags only final + // tangent point. + int i = SK.GetEntity(hr.entity(0))->extraPoints; + Vector pn = SK.GetEntity(hr.entity(4+i))->PointGetNum(), + pnm2 = SK.GetEntity(hr.entity(2+i))->PointGetNum(), + pnm1 = (pn.Plus(pnm2)).ScaledBy(0.5); + SK.GetEntity(hr.entity(3+i))->PointForceTo(pnm1); + } + + orig.mouse = mp; + SS.MarkGroupDirtyByEntity(pending.point); + break; + } + case DRAGGING_NEW_ARC_POINT: { + UpdateDraggedPoint(pending.point, x, y); + HitTestMakeSelection(mp); + + hRequest hr = pending.point.request(); + Vector ona = SK.GetEntity(hr.entity(2))->PointGetNum(); + Vector onb = SK.GetEntity(hr.entity(3))->PointGetNum(); + Vector center = (ona.Plus(onb)).ScaledBy(0.5); + + SK.GetEntity(hr.entity(1))->PointForceTo(center); + + orig.mouse = mp; + SS.MarkGroupDirtyByEntity(pending.point); + break; + } + case DRAGGING_NEW_RADIUS: + case DRAGGING_RADIUS: { + Entity *circle = SK.GetEntity(pending.circle); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Point2d c2 = ProjectPoint(center); + double r = c2.DistanceTo(mp)/scale; + SK.GetEntity(circle->distance)->DistanceForceTo(r); + + SS.MarkGroupDirtyByEntity(pending.circle); + break; + } + + case DRAGGING_NORMAL: { + Entity *normal = SK.GetEntity(pending.normal); + Vector p = SK.GetEntity(normal->point[0])->PointGetNum(); + Point2d p2 = ProjectPoint(p); + + Quaternion q = normal->NormalGetNum(); + Vector u = q.RotationU(), v = q.RotationV(); + + if(ctrlDown) { + double theta = atan2(orig.mouse.y-p2.y, orig.mouse.x-p2.x); + theta -= atan2(y-p2.y, x-p2.x); + + Vector normal = projRight.Cross(projUp); + u = u.RotatedAbout(normal, -theta); + v = v.RotatedAbout(normal, -theta); + } else { + double dx = -(x - orig.mouse.x); + double dy = -(y - orig.mouse.y); + double s = 0.3*(PI/180); // degrees per pixel + u = u.RotatedAbout(projUp, -s*dx); + u = u.RotatedAbout(projRight, s*dy); + v = v.RotatedAbout(projUp, -s*dx); + v = v.RotatedAbout(projRight, s*dy); + } + orig.mouse = mp; + normal->NormalForceTo(Quaternion::From(u, v)); + + SS.MarkGroupDirtyByEntity(pending.normal); + break; + } + + case DRAGGING_MARQUEE: + orig.mouse = mp; + InvalidateGraphics(); + break; + + default: oops(); + } + + if(pending.operation != 0 && + pending.operation != DRAGGING_CONSTRAINT && + pending.operation != DRAGGING_MARQUEE) + { + SS.GenerateAll(); + + // Activate degraded mode, and regenerate display items without edges. + if(activeGroup.v != 0) { + bool showEdges = SS.GW.showEdges; + SS.GW.showEdges = false; + SK.GetGroup(activeGroup)->GenerateDisplayItems(); + SS.GW.showEdges = showEdges; + isDegraded = true; + } + } +} + +void GraphicsWindow::ClearPending(void) { + pending.points.Clear(); + pending = {}; + SS.ScheduleShowTW(); + + // If degraded mode was enabled, we need to regenerate again to get edges back. + if(isDegraded) { + isDegraded = false; + SK.GetGroup(activeGroup)->displayDirty = true; + } +} + +void GraphicsWindow::MouseMiddleOrRightDown(double x, double y) { + if(GraphicsEditControlIsVisible()) return; + + orig.offset = offset; + orig.projUp = projUp; + orig.projRight = projRight; + orig.mouse.x = x; + orig.mouse.y = y; + orig.startedMoving = false; +} + +void GraphicsWindow::ContextMenuListStyles(void) { + CreateContextSubmenu(); + Style *s; + bool empty = true; + for(s = SK.style.First(); s; s = SK.style.NextAfter(s)) { + if(s->h.v < Style::FIRST_CUSTOM) continue; + + AddContextMenuItem(s->DescriptionString().c_str(), CMNU_FIRST_STYLE + s->h.v); + empty = false; + } + + if(!empty) AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + + AddContextMenuItem("No Style", CMNU_NO_STYLE); + AddContextMenuItem("Newly Created Custom Style...", CMNU_NEW_CUSTOM_STYLE); +} + +void GraphicsWindow::MouseRightUp(double x, double y) { + SS.extraLine.draw = false; + InvalidateGraphics(); + + // Don't show a context menu if the user is right-clicking the toolbar, + // or if they are finishing a pan. + if(ToolbarMouseMoved((int)x, (int)y)) return; + if(orig.startedMoving) return; + + if(context.active) return; + + if(pending.operation == DRAGGING_NEW_LINE_POINT) { + if(SS.GW.pending.suggestion != SUGGESTED_NONE) { + Constraint::Constrain(SS.GW.pending.suggestion, + Entity::NO_ENTITY, Entity::NO_ENTITY, pending.request.entity(0)); + } + } + + if(pending.operation == DRAGGING_NEW_LINE_POINT || + pending.operation == DRAGGING_NEW_CUBIC_POINT) + { + // Special case; use a right click to stop drawing lines, since + // a left click would draw another one. This is quicker and more + // intuitive than hitting escape. Likewise for new cubic segments. + ClearPending(); + return; + } + + // The current mouse location + Vector v = offset.ScaledBy(-1); + v = v.Plus(projRight.ScaledBy(x/scale)); + v = v.Plus(projUp.ScaledBy(y/scale)); + + context.active = true; + + if(!hover.IsEmpty()) { + MakeSelected(&hover); + SS.ScheduleShowTW(); + } + GroupSelection(); + + bool itemsSelected = (gs.n > 0 || gs.constraints > 0); + int addAfterPoint = -1; + + if(itemsSelected) { + if(gs.stylables > 0) { + ContextMenuListStyles(); + AddContextMenuItem("Assign to Style", CONTEXT_SUBMENU); + } + if(gs.n + gs.constraints == 1) { + AddContextMenuItem("Group Info", CMNU_GROUP_INFO); + } + if(gs.n + gs.constraints == 1 && gs.stylables == 1) { + AddContextMenuItem("Style Info", CMNU_STYLE_INFO); + } + if(gs.withEndpoints > 0) { + AddContextMenuItem("Select Edge Chain", CMNU_SELECT_CHAIN); + } + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && c->type != Constraint::COMMENT) { + AddContextMenuItem("Toggle Reference Dimension", + CMNU_REFERENCE_DIM); + } + if(c->type == Constraint::ANGLE || + c->type == Constraint::EQUAL_ANGLE) + { + AddContextMenuItem("Other Supplementary Angle", + CMNU_OTHER_ANGLE); + } + } + if(gs.constraintLabels > 0 || gs.points > 0) { + AddContextMenuItem("Snap to Grid", CMNU_SNAP_TO_GRID); + } + + + if(gs.points == 1 && gs.point[0].isFromRequest()) { + Request *r = SK.GetRequest(gs.point[0].request()); + int index = r->IndexOfPoint(gs.point[0]); + if((r->type == Request::CUBIC && (index > 1 && index < r->extraPoints + 2)) || + r->type == Request::CUBIC_PERIODIC) { + AddContextMenuItem("Remove Spline Point", CMNU_REMOVE_SPLINE_PT); + } + } + if(gs.entities == 1 && gs.entity[0].isFromRequest()) { + Request *r = SK.GetRequest(gs.entity[0].request()); + if(r->type == Request::CUBIC || r->type == Request::CUBIC_PERIODIC) { + Entity *e = SK.GetEntity(gs.entity[0]); + e->GetDistance(Point2d::From(x, y)); + addAfterPoint = e->dogd.data; + if(addAfterPoint == -1) oops(); + // Skip derivative point. + if(r->type == Request::CUBIC) addAfterPoint++; + AddContextMenuItem("Add Spline Point", CMNU_ADD_SPLINE_PT); + } + } + + if(gs.points == 1) { + Entity *p = SK.GetEntity(gs.point[0]); + Constraint *c; + IdList *lc = &(SK.constraint); + for(c = lc->First(); c; c = lc->NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->ptA.v == p->h.v || c->ptB.v == p->h.v) { + break; + } + } + if(c) { + AddContextMenuItem("Delete Point-Coincident Constraint", + CMNU_DEL_COINCIDENT); + } + } + AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + if(LockedInWorkplane()) { + AddContextMenuItem("Cut", CMNU_CUT_SEL); + AddContextMenuItem("Copy", CMNU_COPY_SEL); + } + } + + if((SS.clipboard.r.n > 0 || SS.clipboard.c.n > 0) && LockedInWorkplane()) { + AddContextMenuItem("Paste", CMNU_PASTE); + AddContextMenuItem("Paste Transformed...", CMNU_PASTE_XFRM); + } + + if(itemsSelected) { + AddContextMenuItem("Delete", CMNU_DELETE_SEL); + AddContextMenuItem(NULL, CONTEXT_SEPARATOR); + AddContextMenuItem("Unselect All", CMNU_UNSELECT_ALL); + } + // If only one item is selected, then it must be the one that we just + // selected from the hovered item; in which case unselect all and hovered + // are equivalent. + if(!hover.IsEmpty() && selection.n > 1) { + AddContextMenuItem("Unselect Hovered", CMNU_UNSELECT_HOVERED); + } + + int ret = ShowContextMenu(); + switch(ret) { + case CMNU_UNSELECT_ALL: + MenuEdit(MNU_UNSELECT_ALL); + break; + + case CMNU_UNSELECT_HOVERED: + if(!hover.IsEmpty()) { + MakeUnselected(&hover, true); + } + break; + + case CMNU_SELECT_CHAIN: + MenuEdit(MNU_SELECT_CHAIN); + break; + + case CMNU_CUT_SEL: + MenuClipboard(MNU_CUT); + break; + + case CMNU_COPY_SEL: + MenuClipboard(MNU_COPY); + break; + + case CMNU_PASTE: + MenuClipboard(MNU_PASTE); + break; + + case CMNU_PASTE_XFRM: + MenuClipboard(MNU_PASTE_TRANSFORM); + break; + + case CMNU_DELETE_SEL: + MenuClipboard(MNU_DELETE); + break; + + case CMNU_REFERENCE_DIM: + Constraint::MenuConstrain(MNU_REFERENCE); + break; + + case CMNU_OTHER_ANGLE: + Constraint::MenuConstrain(MNU_OTHER_ANGLE); + break; + + case CMNU_DEL_COINCIDENT: { + SS.UndoRemember(); + if(!gs.point[0].v) break; + Entity *p = SK.GetEntity(gs.point[0]); + if(!p->IsPoint()) break; + + SK.constraint.ClearTags(); + Constraint *c; + for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { + if(c->type != Constraint::POINTS_COINCIDENT) continue; + if(c->ptA.v == p->h.v || c->ptB.v == p->h.v) { + c->tag = 1; + } + } + SK.constraint.RemoveTagged(); + ClearSelection(); + break; + } + + case CMNU_SNAP_TO_GRID: + MenuEdit(MNU_SNAP_TO_GRID); + break; + + case CMNU_REMOVE_SPLINE_PT: { + hRequest hr = gs.point[0].request(); + Request *r = SK.GetRequest(hr); + + int index = r->IndexOfPoint(gs.point[0]); + if(r->extraPoints == 0) oops(); + + SS.UndoRemember(); + Entity *e = SK.GetEntity(r->h.entity(0)); + + // First, fix point-coincident constraints involving this point. + // Then, remove all other constraints, since they would otherwise + // jump to an adjacent one and mess up the bezier after generation. + FixConstraintsForPointBeingDeleted(e->point[index]); + RemoveConstraintsForPointBeingDeleted(e->point[index]); + + for(int i = index; i < MAX_POINTS_IN_ENTITY - 1; i++) { + if(e->point[i + 1].v == 0) break; + Entity *p0 = SK.GetEntity(e->point[i]); + Entity *p1 = SK.GetEntity(e->point[i + 1]); + ReplacePointInConstraints(p1->h, p0->h); + p0->PointForceTo(p1->PointGetNum()); + } + r->extraPoints--; + SS.MarkGroupDirtyByEntity(gs.point[0]); + SS.ScheduleGenerateAll(); + ClearSelection(); + break; + } + + case CMNU_ADD_SPLINE_PT: { + hRequest hr = gs.entity[0].request(); + Request *r = SK.GetRequest(hr); + + int pointCount = r->extraPoints + ((r->type == Request::CUBIC_PERIODIC) ? 3 : 4); + if(pointCount < MAX_POINTS_IN_ENTITY) { + SS.UndoRemember(); + r->extraPoints++; + SS.MarkGroupDirtyByEntity(gs.entity[0]); + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + + Entity *e = SK.GetEntity(r->h.entity(0)); + for(int i = MAX_POINTS_IN_ENTITY; i > addAfterPoint + 1; i--) { + Entity *p0 = SK.entity.FindByIdNoOops(e->point[i]); + if(p0 == NULL) continue; + Entity *p1 = SK.GetEntity(e->point[i - 1]); + ReplacePointInConstraints(p1->h, p0->h); + p0->PointForceTo(p1->PointGetNum()); + } + Entity *p = SK.GetEntity(e->point[addAfterPoint + 1]); + p->PointForceTo(v); + SS.MarkGroupDirtyByEntity(gs.entity[0]); + SS.ScheduleGenerateAll(); + ClearSelection(); + } else { + Error("Cannot add spline point: maximum number of points reached."); + } + break; + } + + case CMNU_GROUP_INFO: { + hGroup hg; + if(gs.entities == 1) { + hg = SK.GetEntity(gs.entity[0])->group; + } else if(gs.points == 1) { + hg = SK.GetEntity(gs.point[0])->group; + } else if(gs.constraints == 1) { + hg = SK.GetConstraint(gs.constraint[0])->group; + } else { + break; + } + ClearSelection(); + + SS.TW.GoToScreen(TextWindow::SCREEN_GROUP_INFO); + SS.TW.shown.group = hg; + SS.ScheduleShowTW(); + ForceTextWindowShown(); + break; + } + + case CMNU_STYLE_INFO: { + hStyle hs; + if(gs.entities == 1) { + hs = Style::ForEntity(gs.entity[0]); + } else if(gs.points == 1) { + hs = Style::ForEntity(gs.point[0]); + } else if(gs.constraints == 1) { + hs = SK.GetConstraint(gs.constraint[0])->GetStyle(); + } else { + break; + } + ClearSelection(); + + SS.TW.GoToScreen(TextWindow::SCREEN_STYLE_INFO); + SS.TW.shown.style = hs; + SS.ScheduleShowTW(); + ForceTextWindowShown(); + break; + } + + case CMNU_NEW_CUSTOM_STYLE: { + uint32_t v = Style::CreateCustomStyle(); + Style::AssignSelectionToStyle(v); + ForceTextWindowShown(); + break; + } + + case CMNU_NO_STYLE: + Style::AssignSelectionToStyle(0); + break; + + default: + if(ret >= CMNU_FIRST_STYLE) { + Style::AssignSelectionToStyle(ret - CMNU_FIRST_STYLE); + } else { + // otherwise it was cancelled, so do nothing + contextMenuCancelTime = GetMilliseconds(); + } + break; + } + + context.active = false; + SS.ScheduleShowTW(); +} + +hRequest GraphicsWindow::AddRequest(int type) { + return AddRequest(type, true); +} +hRequest GraphicsWindow::AddRequest(int type, bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + + Request r = {}; + r.group = activeGroup; + Group *g = SK.GetGroup(activeGroup); + if(g->type == Group::DRAWING_3D || g->type == Group::DRAWING_WORKPLANE) { + r.construction = false; + } else { + r.construction = true; + } + r.workplane = ActiveWorkplane(); + r.type = type; + SK.request.AddAndAssignId(&r); + + // We must regenerate the parameters, so that the code that tries to + // place this request's entities where the mouse is can do so. But + // we mustn't try to solve until reasonable values have been supplied + // for these new parameters, or else we'll get a numerical blowup. + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + SS.MarkGroupDirty(r.group); + return r.h; +} + +bool GraphicsWindow::ConstrainPointByHovered(hEntity pt) { + if(!hover.entity.v) return false; + + Entity *e = SK.GetEntity(hover.entity); + if(e->IsPoint()) { + Constraint::ConstrainCoincident(e->h, pt); + return true; + } + if(e->IsCircle()) { + Constraint::Constrain(Constraint::PT_ON_CIRCLE, + pt, Entity::NO_ENTITY, e->h); + return true; + } + if(e->type == Entity::LINE_SEGMENT) { + Constraint::Constrain(Constraint::PT_ON_LINE, + pt, Entity::NO_ENTITY, e->h); + return true; + } + + return false; +} + +void GraphicsWindow::MouseLeftDown(double mx, double my) { + orig.mouseDown = true; + + if(GraphicsEditControlIsVisible()) { + orig.mouse = Point2d::From(mx, my); + orig.mouseOnButtonDown = orig.mouse; + HideGraphicsEditControl(); + return; + } + SS.TW.HideEditControl(); + + if(SS.showToolbar) { + if(ToolbarMouseDown((int)mx, (int)my)) return; + } + + // This will be clobbered by MouseMoved below. + SuggestedConstraint constraintSuggestion = SS.GW.pending.suggestion; + + // Make sure the hover is up to date. + MouseMoved(mx, my, false, false, false, false, false); + orig.mouse.x = mx; + orig.mouse.y = my; + orig.mouseOnButtonDown = orig.mouse; + + // The current mouse location + Vector v = offset.ScaledBy(-1); + v = v.Plus(projRight.ScaledBy(mx/scale)); + v = v.Plus(projUp.ScaledBy(my/scale)); + + hRequest hr = {}; + hConstraint hc = {}; + switch(pending.operation) { + case MNU_DATUM_POINT: + hr = AddRequest(Request::DATUM_POINT); + SK.GetEntity(hr.entity(0))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(0)); + + ClearSuper(); + break; + + case MNU_LINE_SEGMENT: + case MNU_CONSTR_SEGMENT: + hr = AddRequest(Request::LINE_SEGMENT); + SK.GetRequest(hr)->construction = (pending.operation == MNU_CONSTR_SEGMENT); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_LINE_POINT; + pending.request = hr; + pending.point = hr.entity(2); + pending.description = "click next point of line, or press Esc"; + SK.GetEntity(pending.point)->PointForceTo(v); + break; + + case MNU_RECTANGLE: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw rectangle in 3d; select a workplane first."); + ClearSuper(); + break; + } + hRequest lns[4]; + int i; + SS.UndoRemember(); + for(i = 0; i < 4; i++) { + lns[i] = AddRequest(Request::LINE_SEGMENT, false); + } + for(i = 0; i < 4; i++) { + Constraint::ConstrainCoincident( + lns[i].entity(1), lns[(i+1)%4].entity(2)); + SK.GetEntity(lns[i].entity(1))->PointForceTo(v); + SK.GetEntity(lns[i].entity(2))->PointForceTo(v); + } + for(i = 0; i < 4; i++) { + Constraint::Constrain( + (i % 2) ? Constraint::HORIZONTAL : Constraint::VERTICAL, + Entity::NO_ENTITY, Entity::NO_ENTITY, + lns[i].entity(0)); + } + ConstrainPointByHovered(lns[2].entity(1)); + + pending.operation = DRAGGING_NEW_POINT; + pending.point = lns[1].entity(2); + pending.description = "click to place other corner of rectangle"; + hr = lns[0]; + break; + } + case MNU_CIRCLE: + hr = AddRequest(Request::CIRCLE); + // Centered where we clicked + SK.GetEntity(hr.entity(1))->PointForceTo(v); + // Normal to the screen + SK.GetEntity(hr.entity(32))->NormalForceTo( + Quaternion::From(SS.GW.projRight, SS.GW.projUp)); + // Initial radius zero + SK.GetEntity(hr.entity(64))->DistanceForceTo(0); + + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_RADIUS; + pending.circle = hr.entity(0); + pending.description = "click to set radius"; + break; + + case MNU_ARC: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw arc in 3d; select a workplane first."); + ClearPending(); + break; + } + hr = AddRequest(Request::ARC_OF_CIRCLE); + // This fudge factor stops us from immediately failing to solve + // because of the arc's implicit (equal radius) tangent. + Vector adj = SS.GW.projRight.WithMagnitude(2/SS.GW.scale); + SK.GetEntity(hr.entity(1))->PointForceTo(v.Minus(adj)); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + SK.GetEntity(hr.entity(3))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(2)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_ARC_POINT; + pending.point = hr.entity(3); + pending.description = "click to place point"; + break; + } + case MNU_CUBIC: + hr = AddRequest(Request::CUBIC); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + SK.GetEntity(hr.entity(3))->PointForceTo(v); + SK.GetEntity(hr.entity(4))->PointForceTo(v); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + + pending.operation = DRAGGING_NEW_CUBIC_POINT; + pending.point = hr.entity(4); + pending.description = "click next point of cubic, or press Esc"; + break; + + case MNU_WORKPLANE: + if(LockedInWorkplane()) { + Error("Sketching in a workplane already; sketch in 3d before " + "creating new workplane."); + ClearSuper(); + break; + } + hr = AddRequest(Request::WORKPLANE); + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(32))->NormalForceTo( + Quaternion::From(SS.GW.projRight, SS.GW.projUp)); + ConstrainPointByHovered(hr.entity(1)); + + ClearSuper(); + break; + + case MNU_TTF_TEXT: { + if(!SS.GW.LockedInWorkplane()) { + Error("Can't draw text in 3d; select a workplane first."); + ClearSuper(); + break; + } + hr = AddRequest(Request::TTF_TEXT); + Request *r = SK.GetRequest(hr); + r->str = "Abc"; + r->font = "arial.ttf"; + + SK.GetEntity(hr.entity(1))->PointForceTo(v); + SK.GetEntity(hr.entity(2))->PointForceTo(v); + + pending.operation = DRAGGING_NEW_POINT; + pending.point = hr.entity(2); + pending.description = "click to place bottom left of text"; + break; + } + + case MNU_COMMENT: { + ClearSuper(); + Constraint c = {}; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.type = Constraint::COMMENT; + c.disp.offset = v; + c.comment = "NEW COMMENT -- DOUBLE-CLICK TO EDIT"; + hc = Constraint::AddConstraint(&c); + break; + } + + case DRAGGING_RADIUS: + case DRAGGING_NEW_POINT: + // The MouseMoved event has already dragged it as desired. + ClearPending(); + break; + + case DRAGGING_NEW_ARC_POINT: + ConstrainPointByHovered(pending.point); + ClearPending(); + break; + + case DRAGGING_NEW_CUBIC_POINT: { + hRequest hr = pending.point.request(); + Request *r = SK.GetRequest(hr); + + if(hover.entity.v == hr.entity(1).v && r->extraPoints >= 2) { + // They want the endpoints coincident, which means a periodic + // spline instead. + r->type = Request::CUBIC_PERIODIC; + // Remove the off-curve control points, which are no longer + // needed here; so move [2,ep+1] down, skipping first pt. + int i; + for(i = 2; i <= r->extraPoints+1; i++) { + SK.GetEntity(hr.entity((i-1)+1))->PointForceTo( + SK.GetEntity(hr.entity(i+1))->PointGetNum()); + } + // and move ep+3 down by two, skipping both + SK.GetEntity(hr.entity((r->extraPoints+1)+1))->PointForceTo( + SK.GetEntity(hr.entity((r->extraPoints+3)+1))->PointGetNum()); + r->extraPoints -= 2; + // And we're done. + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + ClearPending(); + break; + } + + if(ConstrainPointByHovered(pending.point)) { + ClearPending(); + break; + } + + Entity e; + if(r->extraPoints >= (int)arraylen(e.point) - 4) { + ClearPending(); + break; + } + + (SK.GetRequest(hr)->extraPoints)++; + SS.GenerateAll(SolveSpaceUI::GENERATE_REGEN); + + int ep = r->extraPoints; + Vector last = SK.GetEntity(hr.entity(3+ep))->PointGetNum(); + + SK.GetEntity(hr.entity(2+ep))->PointForceTo(last); + SK.GetEntity(hr.entity(3+ep))->PointForceTo(v); + SK.GetEntity(hr.entity(4+ep))->PointForceTo(v); + pending.point = hr.entity(4+ep); + break; + } + + case DRAGGING_NEW_LINE_POINT: { + // Constrain the line segment horizontal or vertical if close enough + if(constraintSuggestion != SUGGESTED_NONE) { + Constraint::Constrain(constraintSuggestion, + Entity::NO_ENTITY, Entity::NO_ENTITY, pending.request.entity(0)); + } + + if(hover.entity.v) { + Entity *e = SK.GetEntity(hover.entity); + if(e->IsPoint()) { + hRequest hrl = pending.point.request(); + Entity *sp = SK.GetEntity(hrl.entity(1)); + if(( e->PointGetNum()).Equals( + (sp->PointGetNum()))) + { + // If we constrained by the hovered point, then we + // would create a zero-length line segment. That's + // not good, so just stop drawing. + ClearPending(); + break; + } + } + } + + if(ConstrainPointByHovered(pending.point)) { + ClearPending(); + break; + } + + // Create a new line segment, so that we continue drawing. + hRequest hr = AddRequest(Request::LINE_SEGMENT); + SK.GetRequest(hr)->construction = SK.GetRequest(pending.request)->construction; + SK.GetEntity(hr.entity(1))->PointForceTo(v); + // Displace the second point of the new line segment slightly, + // to avoid creating zero-length edge warnings. + SK.GetEntity(hr.entity(2))->PointForceTo( + v.Plus(projRight.ScaledBy(0.5/scale))); + + // Constrain the line segments to share an endpoint + Constraint::ConstrainCoincident(pending.point, hr.entity(1)); + + // And drag an endpoint of the new line segment + pending.operation = DRAGGING_NEW_LINE_POINT; + pending.request = hr; + pending.point = hr.entity(2); + pending.description = "click next point of line, or press Esc"; + + break; + } + + case 0: + default: + ClearPending(); + if(!hover.IsEmpty()) { + hoverWasSelectedOnMousedown = IsSelected(&hover); + MakeSelected(&hover); + } + break; + } + + // Activate group with newly created request/constraint + Group *g = NULL; + if(hr.v != 0) { + Request *req = SK.GetRequest(hr); + g = SK.GetGroup(req->group); + } + if(hc.v != 0) { + Constraint *c = SK.GetConstraint(hc); + g = SK.GetGroup(c->group); + } + if(g != NULL) { + g->visible = true; + } + + SS.ScheduleShowTW(); + InvalidateGraphics(); +} + +void GraphicsWindow::MouseLeftUp(double mx, double my) { + orig.mouseDown = false; + hoverWasSelectedOnMousedown = false; + + switch(pending.operation) { + case DRAGGING_POINTS: + SS.extraLine.draw = false; + // fall through + case DRAGGING_CONSTRAINT: + case DRAGGING_NORMAL: + case DRAGGING_RADIUS: + ClearPending(); + InvalidateGraphics(); + break; + + case DRAGGING_MARQUEE: + SelectByMarquee(); + ClearPending(); + InvalidateGraphics(); + break; + + case 0: + // We need to clear the selection here, and not in the mouse down + // event, since a mouse down without anything hovered could also + // be the start of marquee selection. But don't do that on the + // left click to cancel a context menu. The time delay is an ugly + // hack. + if(hover.IsEmpty() && + (contextMenuCancelTime == 0 || + (GetMilliseconds() - contextMenuCancelTime) > 200)) + { + ClearSelection(); + } + break; + + default: + break; // do nothing + } +} + +void GraphicsWindow::MouseLeftDoubleClick(double mx, double my) { + if(GraphicsEditControlIsVisible()) return; + SS.TW.HideEditControl(); + + if(hover.constraint.v) { + constraintBeingEdited = hover.constraint; + ClearSuper(); + + Constraint *c = SK.GetConstraint(constraintBeingEdited); + if(!c->HasLabel()) { + // Not meaningful to edit a constraint without a dimension + return; + } + if(c->reference) { + // Not meaningful to edit a reference dimension + return; + } + + Vector p3 = c->GetLabelPos(); + Point2d p2 = ProjectPoint(p3); + + std::string editValue; + int editMinWidthChar; + switch(c->type) { + case Constraint::COMMENT: + editValue = c->comment; + editMinWidthChar = 30; + break; + + case Constraint::ANGLE: + case Constraint::LENGTH_RATIO: + editValue = ssprintf("%.3f", c->valA); + editMinWidthChar = 5; + break; + + default: { + double v = fabs(c->valA); + + // If displayed as radius, also edit as radius. + if(c->type == Constraint::DIAMETER && c->other) + v /= 2; + + std::string def = SS.MmToString(v); + double eps = 1e-12; + if(fabs(SS.StringToMm(def) - v) < eps) { + // Show value with default number of digits after decimal, + // which is at least enough to represent it exactly. + editValue = def; + } else { + // Show value with as many digits after decimal as + // required to represent it exactly, up to 10. + v /= SS.MmPerUnit(); + int i; + for(i = 0; i <= 10; i++) { + editValue = ssprintf("%.*f", i, v); + if(fabs(std::stod(editValue) - v) < eps) break; + } + } + editMinWidthChar = 5; + break; + } + } + hStyle hs = c->disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + ShowGraphicsEditControl((int)p2.x, (int)p2.y, + ssglStrFontSize(Style::TextHeight(hs)) * scale, + editMinWidthChar, editValue); + } +} + +void GraphicsWindow::EditControlDone(const char *s) { + HideGraphicsEditControl(); + Constraint *c = SK.GetConstraint(constraintBeingEdited); + + if(c->type == Constraint::COMMENT) { + SS.UndoRemember(); + c->comment = s; + return; + } + + Expr *e = Expr::From(s, true); + if(e) { + SS.UndoRemember(); + + switch(c->type) { + case Constraint::PROJ_PT_DISTANCE: + case Constraint::PT_LINE_DISTANCE: + case Constraint::PT_FACE_DISTANCE: + case Constraint::PT_PLANE_DISTANCE: + case Constraint::LENGTH_DIFFERENCE: { + // The sign is not displayed to the user, but this is a signed + // distance internally. To flip the sign, the user enters a + // negative distance. + bool wasNeg = (c->valA < 0); + if(wasNeg) { + c->valA = -SS.ExprToMm(e); + } else { + c->valA = SS.ExprToMm(e); + } + break; + } + case Constraint::ANGLE: + case Constraint::LENGTH_RATIO: + // These don't get the units conversion for distance, and + // they're always positive + c->valA = fabs(e->Eval()); + break; + + case Constraint::DIAMETER: + c->valA = fabs(SS.ExprToMm(e)); + + // If displayed and edited as radius, convert back + // to diameter + if(c->other) + c->valA *= 2; + break; + + default: + // These are always positive, and they get the units conversion. + c->valA = fabs(SS.ExprToMm(e)); + break; + } + SS.MarkGroupDirty(c->group); + SS.GenerateAll(); + } +} + +bool GraphicsWindow::KeyDown(int c) { + if(c == '\b') { + // Treat backspace identically to escape. + MenuEdit(MNU_UNSELECT_ALL); + return true; + } + + return false; +} + +void GraphicsWindow::MouseScroll(double x, double y, int delta) { + double offsetRight = offset.Dot(projRight); + double offsetUp = offset.Dot(projUp); + + double righti = x/scale - offsetRight; + double upi = y/scale - offsetUp; + + if(delta > 0) { + scale *= 1.2; + } else if(delta < 0) { + scale /= 1.2; + } else return; + + double rightf = x/scale - offsetRight; + double upf = y/scale - offsetUp; + + offset = offset.Plus(projRight.ScaledBy(rightf - righti)); + offset = offset.Plus(projUp.ScaledBy(upf - upi)); + + if(SS.TW.shown.screen == TextWindow::SCREEN_EDIT_VIEW) { + if(havePainted) { + SS.ScheduleShowTW(); + } + } + havePainted = false; + InvalidateGraphics(); +} + +void GraphicsWindow::MouseLeave(void) { + // Un-hover everything when the mouse leaves our window, unless there's + // currently a context menu shown. + if(!context.active) { + hover.Clear(); + toolbarTooltipped = 0; + toolbarHovered = 0; + PaintGraphics(); + } + SS.extraLine.draw = false; +} + +void GraphicsWindow::SpaceNavigatorMoved(double tx, double ty, double tz, + double rx, double ry, double rz, + bool shiftDown) +{ + if(!havePainted) return; + Vector out = projRight.Cross(projUp); + + // rotation vector is axis of rotation, and its magnitude is angle + Vector aa = Vector::From(rx, ry, rz); + // but it's given with respect to screen projection frame + aa = aa.ScaleOutOfCsys(projRight, projUp, out); + double aam = aa.Magnitude(); + if(aam > 0.0) aa = aa.WithMagnitude(1); + + // This can either transform our view, or transform a linked part. + GroupSelection(); + Entity *e = NULL; + Group *g = NULL; + if(gs.points == 1 && gs.n == 1) e = SK.GetEntity(gs.point [0]); + if(gs.entities == 1 && gs.n == 1) e = SK.GetEntity(gs.entity[0]); + if(e) g = SK.GetGroup(e->group); + if(g && g->type == Group::LINKED && !shiftDown) { + // Apply the transformation to a linked part. Gain down the Z + // axis, since it's hard to see what you're doing on that one since + // it's normal to the screen. + Vector t = projRight.ScaledBy(tx/scale).Plus( + projUp .ScaledBy(ty/scale).Plus( + out .ScaledBy(0.1*tz/scale))); + Quaternion q = Quaternion::From(aa, aam); + + // If we go five seconds without SpaceNavigator input, or if we've + // switched groups, then consider that a new action and save an undo + // point. + int64_t now = GetMilliseconds(); + if(now - lastSpaceNavigatorTime > 5000 || + lastSpaceNavigatorGroup.v != g->h.v) + { + SS.UndoRemember(); + } + + g->TransformImportedBy(t, q); + + lastSpaceNavigatorTime = now; + lastSpaceNavigatorGroup = g->h; + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } else { + // Apply the transformation to the view of the everything. The + // x and y components are translation; but z component is scale, + // not translation, or else it would do nothing in a parallel + // projection + offset = offset.Plus(projRight.ScaledBy(tx/scale)); + offset = offset.Plus(projUp.ScaledBy(ty/scale)); + scale *= exp(0.001*tz); + + if(aam > 0.0) { + projRight = projRight.RotatedAbout(aa, -aam); + projUp = projUp. RotatedAbout(aa, -aam); + NormalizeProjectionVectors(); + } + } + + havePainted = false; + InvalidateGraphics(); +} + +void GraphicsWindow::SpaceNavigatorButtonUp(void) { + ZoomToFit(/*includingInvisibles=*/false, /*useSelection=*/true); + InvalidateGraphics(); +} + diff --git a/src/polygon.cpp b/src/polygon.cpp new file mode 100644 index 0000000..eae40fe --- /dev/null +++ b/src/polygon.cpp @@ -0,0 +1,865 @@ +//----------------------------------------------------------------------------- +// Operations on polygons (planar, of line segment edges). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +Vector STriangle::Normal(void) { + Vector ab = b.Minus(a), bc = c.Minus(b); + return ab.Cross(bc); +} + +double STriangle::MinAltitude(void) { + double altA = a.DistanceToLine(b, c.Minus(b)), + altB = b.DistanceToLine(c, a.Minus(c)), + altC = c.DistanceToLine(a, b.Minus(a)); + + return min(altA, min(altB, altC)); +} + +bool STriangle::ContainsPoint(Vector p) { + Vector n = Normal(); + if(MinAltitude() < LENGTH_EPS) { + // shouldn't happen; zero-area triangle + return false; + } + return ContainsPointProjd(n.WithMagnitude(1), p); +} + +bool STriangle::ContainsPointProjd(Vector n, Vector p) { + Vector ab = b.Minus(a), bc = c.Minus(b), ca = a.Minus(c); + + Vector no_ab = n.Cross(ab); + if(no_ab.Dot(p) < no_ab.Dot(a) - LENGTH_EPS) return false; + + Vector no_bc = n.Cross(bc); + if(no_bc.Dot(p) < no_bc.Dot(b) - LENGTH_EPS) return false; + + Vector no_ca = n.Cross(ca); + if(no_ca.Dot(p) < no_ca.Dot(c) - LENGTH_EPS) return false; + + return true; +} + +void STriangle::FlipNormal(void) { + swap(a, b); + swap(an, bn); +} + +STriangle STriangle::From(STriMeta meta, Vector a, Vector b, Vector c) { + STriangle tr = {}; + tr.meta = meta; + tr.a = a; + tr.b = b; + tr.c = c; + return tr; +} + +SEdge SEdge::From(Vector a, Vector b) { + SEdge se = {}; + se.a = a; + se.b = b; + return se; +} + +bool SEdge::EdgeCrosses(Vector ea, Vector eb, Vector *ppi, SPointList *spl) { + Vector d = eb.Minus(ea); + double t_eps = LENGTH_EPS/d.Magnitude(); + + double t, tthis; + bool skew; + Vector pi; + bool inOrEdge0, inOrEdge1; + + Vector dthis = b.Minus(a); + double tthis_eps = LENGTH_EPS/dthis.Magnitude(); + + if((ea.Equals(a) && eb.Equals(b)) || + (eb.Equals(a) && ea.Equals(b))) + { + if(ppi) *ppi = a; + if(spl) spl->Add(a); + return true; + } + + // Can't just test if distance between d and a equals distance between d and b; + // they could be on opposite sides, since we don't have the sign. + double m = sqrt(d.Magnitude()*dthis.Magnitude()); + if(sqrt(fabs(d.Dot(dthis))) > (m - LENGTH_EPS)) { + // The edges are parallel. + if(fabs(a.DistanceToLine(ea, d)) > LENGTH_EPS) { + // and not coincident, so can't be interesecting + return false; + } + // The edges are coincident. Make sure that neither endpoint lies + // on the other + bool inters = false; + double t; + t = a.Minus(ea).DivPivoting(d); + if(t > t_eps && t < (1 - t_eps)) inters = true; + t = b.Minus(ea).DivPivoting(d); + if(t > t_eps && t < (1 - t_eps)) inters = true; + t = ea.Minus(a).DivPivoting(dthis); + if(t > tthis_eps && t < (1 - tthis_eps)) inters = true; + t = eb.Minus(a).DivPivoting(dthis); + if(t > tthis_eps && t < (1 - tthis_eps)) inters = true; + + if(inters) { + if(ppi) *ppi = a; + if(spl) spl->Add(a); + return true; + } else { + // So coincident but disjoint, okay. + return false; + } + } + + // Lines are not parallel, so look for an intersection. + pi = Vector::AtIntersectionOfLines(ea, eb, a, b, + &skew, + &t, &tthis); + if(skew) return false; + + inOrEdge0 = (t > -t_eps) && (t < (1 + t_eps)); + inOrEdge1 = (tthis > -tthis_eps) && (tthis < (1 + tthis_eps)); + + if(inOrEdge0 && inOrEdge1) { + if(a.Equals(ea) || b.Equals(ea) || + a.Equals(eb) || b.Equals(eb)) + { + // Not an intersection if we share an endpoint with an edge + return false; + } + // But it's an intersection if a vertex of one edge lies on the + // inside of the other (or if they cross away from either's + // vertex). + if(ppi) *ppi = pi; + if(spl) spl->Add(pi); + return true; + } + return false; +} + +void SEdgeList::Clear(void) { + l.Clear(); +} + +void SEdgeList::AddEdge(Vector a, Vector b, int auxA, int auxB) { + SEdge e = {}; + e.a = a; + e.b = b; + e.auxA = auxA; + e.auxB = auxB; + l.Add(&e); +} + +bool SEdgeList::AssembleContour(Vector first, Vector last, SContour *dest, + SEdge *errorAt, bool keepDir) +{ + int i; + + dest->AddPoint(first); + dest->AddPoint(last); + + do { + for(i = 0; i < l.n; i++) { + SEdge *se = &(l.elem[i]); + if(se->tag) continue; + + if(se->a.Equals(last)) { + dest->AddPoint(se->b); + last = se->b; + se->tag = 1; + break; + } + // Don't allow backwards edges if keepDir is true. + if(!keepDir && se->b.Equals(last)) { + dest->AddPoint(se->a); + last = se->a; + se->tag = 1; + break; + } + } + if(i >= l.n) { + // Couldn't assemble a closed contour; mark where. + if(errorAt) { + errorAt->a = first; + errorAt->b = last; + } + return false; + } + + } while(!last.Equals(first)); + + return true; +} + +bool SEdgeList::AssemblePolygon(SPolygon *dest, SEdge *errorAt, bool keepDir) { + dest->Clear(); + + bool allClosed = true; + for(;;) { + Vector first = Vector::From(0, 0, 0); + Vector last = Vector::From(0, 0, 0); + int i; + for(i = 0; i < l.n; i++) { + if(!l.elem[i].tag) { + first = l.elem[i].a; + last = l.elem[i].b; + l.elem[i].tag = 1; + break; + } + } + if(i >= l.n) { + return allClosed; + } + + // Create a new empty contour in our polygon, and finish assembling + // into that contour. + dest->AddEmptyContour(); + if(!AssembleContour(first, last, &(dest->l.elem[dest->l.n-1]), + errorAt, keepDir)) + { + allClosed = false; + } + // But continue assembling, even if some of the contours are open + } +} + +//----------------------------------------------------------------------------- +// Test if the specified edge crosses any of the edges in our list. Two edges +// are not considered to cross if they share an endpoint (within LENGTH_EPS), +// but they are considered to cross if they are coincident and overlapping. +// If pi is not NULL, then a crossing is returned in that. +//----------------------------------------------------------------------------- +int SEdgeList::AnyEdgeCrossings(Vector a, Vector b, + Vector *ppi, SPointList *spl) +{ + int cnt = 0; + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if(se->EdgeCrosses(a, b, ppi, spl)) { + cnt++; + } + } + return cnt; +} + +//----------------------------------------------------------------------------- +// Returns true if the intersecting edge list contains an edge that shares +// an endpoint with one of our edges. +//----------------------------------------------------------------------------- +bool SEdgeList::ContainsEdgeFrom(SEdgeList *sel) { + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if(sel->ContainsEdge(se)) return true; + } + return false; +} +bool SEdgeList::ContainsEdge(SEdge *set) { + SEdge *se; + for(se = l.First(); se; se = l.NextAfter(se)) { + if((se->a).Equals(set->a) && (se->b).Equals(set->b)) return true; + if((se->b).Equals(set->a) && (se->a).Equals(set->b)) return true; + } + return false; +} + +//----------------------------------------------------------------------------- +// Remove unnecessary edges: if two are anti-parallel then remove both, and if +// two are parallel then remove one. +//----------------------------------------------------------------------------- +void SEdgeList::CullExtraneousEdges(void) { + l.ClearTags(); + int i, j; + for(i = 0; i < l.n; i++) { + SEdge *se = &(l.elem[i]); + for(j = i+1; j < l.n; j++) { + SEdge *set = &(l.elem[j]); + if((set->a).Equals(se->a) && (set->b).Equals(se->b)) { + // Two parallel edges exist; so keep only the first one. + set->tag = 1; + } + if((set->a).Equals(se->b) && (set->b).Equals(se->a)) { + // Two anti-parallel edges exist; so keep neither. + se->tag = 1; + set->tag = 1; + } + } + } + l.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Make a kd-tree of edges. This is used for O(log(n)) implementations of stuff +// that would naively be O(n). +//----------------------------------------------------------------------------- +SKdNodeEdges *SKdNodeEdges::Alloc(void) { + SKdNodeEdges *ne = (SKdNodeEdges *)AllocTemporary(sizeof(SKdNodeEdges)); + *ne = {}; + return ne; +} +SEdgeLl *SEdgeLl::Alloc(void) { + SEdgeLl *sell = (SEdgeLl *)AllocTemporary(sizeof(SEdgeLl)); + *sell = {}; + return sell; +} +SKdNodeEdges *SKdNodeEdges::From(SEdgeList *sel) { + SEdgeLl *sell = NULL; + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + SEdgeLl *n = SEdgeLl::Alloc(); + n->se = se; + n->next = sell; + sell = n; + } + return SKdNodeEdges::From(sell); +} +SKdNodeEdges *SKdNodeEdges::From(SEdgeLl *sell) { + SKdNodeEdges *n = SKdNodeEdges::Alloc(); + + // Compute the midpoints (just mean, though median would be better) of + // each component. + Vector ptAve = Vector::From(0, 0, 0); + SEdgeLl *flip; + int totaln = 0; + for(flip = sell; flip; flip = flip->next) { + ptAve = ptAve.Plus(flip->se->a); + ptAve = ptAve.Plus(flip->se->b); + totaln++; + } + ptAve = ptAve.ScaledBy(1.0 / (2*totaln)); + + // For each component, see how it splits. + int ltln[3] = { 0, 0, 0 }, gtln[3] = { 0, 0, 0 }; + double badness[3]; + for(flip = sell; flip; flip = flip->next) { + for(int i = 0; i < 3; i++) { + if(flip->se->a.Element(i) < ptAve.Element(i) + KDTREE_EPS || + flip->se->b.Element(i) < ptAve.Element(i) + KDTREE_EPS) + { + ltln[i]++; + } + if(flip->se->a.Element(i) > ptAve.Element(i) - KDTREE_EPS || + flip->se->b.Element(i) > ptAve.Element(i) - KDTREE_EPS) + { + gtln[i]++; + } + } + } + for(int i = 0; i < 3; i++) { + badness[i] = pow((double)ltln[i], 4) + pow((double)gtln[i], 4); + } + + // Choose the least bad coordinate to split along. + if(badness[0] < badness[1] && badness[0] < badness[2]) { + n->which = 0; + } else if(badness[1] < badness[2]) { + n->which = 1; + } else { + n->which = 2; + } + n->c = ptAve.Element(n->which); + + if(totaln < 3 || totaln == gtln[n->which] || totaln == ltln[n->which]) { + n->edges = sell; + // and we're a leaf node + return n; + } + + // Sort the edges according to which side(s) of the split plane they're on. + SEdgeLl *gtl = NULL, *ltl = NULL; + for(flip = sell; flip; flip = flip->next) { + if(flip->se->a.Element(n->which) < n->c + KDTREE_EPS || + flip->se->b.Element(n->which) < n->c + KDTREE_EPS) + { + SEdgeLl *selln = SEdgeLl::Alloc(); + selln->se = flip->se; + selln->next = ltl; + ltl = selln; + } + if(flip->se->a.Element(n->which) > n->c - KDTREE_EPS || + flip->se->b.Element(n->which) > n->c - KDTREE_EPS) + { + SEdgeLl *selln = SEdgeLl::Alloc(); + selln->se = flip->se; + selln->next = gtl; + gtl = selln; + } + } + + n->lt = SKdNodeEdges::From(ltl); + n->gt = SKdNodeEdges::From(gtl); + return n; +} + +int SKdNodeEdges::AnyEdgeCrossings(Vector a, Vector b, int cnt, + Vector *pi, SPointList *spl) +{ + int inters = 0; + if(gt && lt) { + if(a.Element(which) < c + KDTREE_EPS || + b.Element(which) < c + KDTREE_EPS) + { + inters += lt->AnyEdgeCrossings(a, b, cnt, pi, spl); + } + if(a.Element(which) > c - KDTREE_EPS || + b.Element(which) > c - KDTREE_EPS) + { + inters += gt->AnyEdgeCrossings(a, b, cnt, pi, spl); + } + } else { + SEdgeLl *sell; + for(sell = edges; sell; sell = sell->next) { + SEdge *se = sell->se; + if(se->tag == cnt) continue; + if(se->EdgeCrosses(a, b, pi, spl)) { + inters++; + } + se->tag = cnt; + } + } + return inters; +} + +//----------------------------------------------------------------------------- +// We have an edge list that contains only collinear edges, maybe with more +// splits than necessary. Merge any collinear segments that join. +//----------------------------------------------------------------------------- +static Vector LineStart, LineDirection; +static int ByTAlongLine(const void *av, const void *bv) +{ + SEdge *a = (SEdge *)av, + *b = (SEdge *)bv; + + double ta = (a->a.Minus(LineStart)).DivPivoting(LineDirection), + tb = (b->a.Minus(LineStart)).DivPivoting(LineDirection); + + return (ta > tb) ? 1 : -1; +} +void SEdgeList::MergeCollinearSegments(Vector a, Vector b) { + LineStart = a; + LineDirection = b.Minus(a); + qsort(l.elem, l.n, sizeof(l.elem[0]), ByTAlongLine); + + l.ClearTags(); + int i; + for(i = 1; i < l.n; i++) { + SEdge *prev = &(l.elem[i-1]), + *now = &(l.elem[i]); + + if((prev->b).Equals(now->a) && prev->auxA == now->auxA) { + // The previous segment joins up to us; so merge it into us. + prev->tag = 1; + now->a = prev->a; + } + } + l.RemoveTagged(); +} + +void SPointList::Clear(void) { + l.Clear(); +} + +bool SPointList::ContainsPoint(Vector pt) { + return (IndexForPoint(pt) >= 0); +} + +int SPointList::IndexForPoint(Vector pt) { + int i; + for(i = 0; i < l.n; i++) { + SPoint *p = &(l.elem[i]); + if(pt.Equals(p->p)) { + return i; + } + } + // Not found, so return negative to indicate that. + return -1; +} + +void SPointList::IncrementTagFor(Vector pt) { + SPoint *p; + for(p = l.First(); p; p = l.NextAfter(p)) { + if(pt.Equals(p->p)) { + (p->tag)++; + return; + } + } + SPoint pa; + pa.p = pt; + pa.tag = 1; + l.Add(&pa); +} + +void SPointList::Add(Vector pt) { + SPoint p = {}; + p.p = pt; + l.Add(&p); +} + +void SContour::AddPoint(Vector p) { + SPoint sp; + sp.tag = 0; + sp.p = p; + + l.Add(&sp); +} + +void SContour::MakeEdgesInto(SEdgeList *el) { + int i; + for(i = 0; i < (l.n - 1); i++) { + el->AddEdge(l.elem[i].p, l.elem[i+1].p); + } +} + +void SContour::CopyInto(SContour *dest) { + SPoint *sp; + for(sp = l.First(); sp; sp = l.NextAfter(sp)) { + dest->AddPoint(sp->p); + } +} + +void SContour::FindPointWithMinX(void) { + SPoint *sp; + xminPt = Vector::From(1e10, 1e10, 1e10); + for(sp = l.First(); sp; sp = l.NextAfter(sp)) { + if(sp->p.x < xminPt.x) { + xminPt = sp->p; + } + } +} + +Vector SContour::ComputeNormal(void) { + Vector n = Vector::From(0, 0, 0); + + for(int i = 0; i < l.n - 2; i++) { + Vector u = (l.elem[i+1].p).Minus(l.elem[i+0].p).WithMagnitude(1); + Vector v = (l.elem[i+2].p).Minus(l.elem[i+1].p).WithMagnitude(1); + Vector nt = u.Cross(v); + if(nt.Magnitude() > n.Magnitude()) { + n = nt; + } + } + return n.WithMagnitude(1); +} + +Vector SContour::AnyEdgeMidpoint(void) { + if(l.n < 2) oops(); + return ((l.elem[0].p).Plus(l.elem[1].p)).ScaledBy(0.5); +} + +bool SContour::IsClockwiseProjdToNormal(Vector n) { + // Degenerate things might happen as we draw; doesn't really matter + // what we do then. + if(n.Magnitude() < 0.01) return true; + + return (SignedAreaProjdToNormal(n) < 0); +} + +double SContour::SignedAreaProjdToNormal(Vector n) { + // An arbitrary 2d coordinate system that has n as its normal + Vector u = n.Normal(0); + Vector v = n.Normal(1); + + double area = 0; + for(int i = 0; i < (l.n - 1); i++) { + double u0 = (l.elem[i ].p).Dot(u); + double v0 = (l.elem[i ].p).Dot(v); + double u1 = (l.elem[i+1].p).Dot(u); + double v1 = (l.elem[i+1].p).Dot(v); + + area += ((v0 + v1)/2)*(u1 - u0); + } + return area; +} + +bool SContour::ContainsPointProjdToNormal(Vector n, Vector p) { + Vector u = n.Normal(0); + Vector v = n.Normal(1); + + double up = p.Dot(u); + double vp = p.Dot(v); + + bool inside = false; + for(int i = 0; i < (l.n - 1); i++) { + double ua = (l.elem[i ].p).Dot(u); + double va = (l.elem[i ].p).Dot(v); + // The curve needs to be exactly closed; approximation is death. + double ub = (l.elem[(i+1)%(l.n-1)].p).Dot(u); + double vb = (l.elem[(i+1)%(l.n-1)].p).Dot(v); + + if ((((va <= vp) && (vp < vb)) || + ((vb <= vp) && (vp < va))) && + (up < (ub - ua) * (vp - va) / (vb - va) + ua)) + { + inside = !inside; + } + } + + return inside; +} + +void SContour::Reverse(void) { + l.Reverse(); +} + + +void SPolygon::Clear(void) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).l.Clear(); + } + l.Clear(); +} + +void SPolygon::AddEmptyContour(void) { + SContour c = {}; + l.Add(&c); +} + +void SPolygon::MakeEdgesInto(SEdgeList *el) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).MakeEdgesInto(el); + } +} + +Vector SPolygon::ComputeNormal(void) { + if(l.n < 1) return Vector::From(0, 0, 0); + return (l.elem[0]).ComputeNormal(); +} + +double SPolygon::SignedArea(void) { + SContour *sc; + double area = 0; + // This returns the true area only if the contours are all oriented + // correctly, with the holes backwards from the outer contours. + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + area += sc->SignedAreaProjdToNormal(normal); + } + return area; +} + +bool SPolygon::ContainsPoint(Vector p) { + return (WindingNumberForPoint(p) % 2) == 1; +} + +int SPolygon::WindingNumberForPoint(Vector p) { + int winding = 0; + int i; + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + if(sc->ContainsPointProjdToNormal(normal, p)) { + winding++; + } + } + return winding; +} + +void SPolygon::FixContourDirections(void) { + // At output, the contour's tag will be 1 if we reversed it, else 0. + l.ClearTags(); + + // Outside curve looks counterclockwise, projected against our normal. + int i, j; + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + if(sc->l.n < 2) continue; + // The contours may not intersect, but they may share vertices; so + // testing a vertex for point-in-polygon may fail, but the midpoint + // of an edge is okay. + Vector pt = (((sc->l.elem[0]).p).Plus(sc->l.elem[1].p)).ScaledBy(0.5); + + sc->timesEnclosed = 0; + bool outer = true; + for(j = 0; j < l.n; j++) { + if(i == j) continue; + SContour *sct = &(l.elem[j]); + if(sct->ContainsPointProjdToNormal(normal, pt)) { + outer = !outer; + (sc->timesEnclosed)++; + } + } + + bool clockwise = sc->IsClockwiseProjdToNormal(normal); + if((clockwise && outer) || (!clockwise && !outer)) { + sc->Reverse(); + sc->tag = 1; + } + } +} + +bool SPolygon::IsEmpty(void) { + if(l.n == 0 || l.elem[0].l.n == 0) return true; + return false; +} + +Vector SPolygon::AnyPoint(void) { + if(IsEmpty()) oops(); + return l.elem[0].l.elem[0].p; +} + +bool SPolygon::SelfIntersecting(Vector *intersectsAt) { + SEdgeList el = {}; + MakeEdgesInto(&el); + SKdNodeEdges *kdtree = SKdNodeEdges::From(&el); + + int cnt = 1; + el.l.ClearTags(); + + bool ret = false; + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + int inters = kdtree->AnyEdgeCrossings(se->a, se->b, cnt, intersectsAt); + if(inters != 1) { + ret = true; + break; + } + cnt++; + } + + el.Clear(); + return ret; +} + +//----------------------------------------------------------------------------- +// Low-quality routines to cutter radius compensate a polygon. Assumes the +// polygon is in the xy plane, and the contours all go in the right direction +// with respect to normal (0, 0, -1). +//----------------------------------------------------------------------------- +void SPolygon::OffsetInto(SPolygon *dest, double r) { + int i; + dest->Clear(); + for(i = 0; i < l.n; i++) { + SContour *sc = &(l.elem[i]); + dest->AddEmptyContour(); + sc->OffsetInto(&(dest->l.elem[dest->l.n-1]), r); + } +} +//----------------------------------------------------------------------------- +// Calculate the intersection point of two lines. Returns true for success, +// false if they're parallel. +//----------------------------------------------------------------------------- +static bool IntersectionOfLines(double x0A, double y0A, double dxA, double dyA, + double x0B, double y0B, double dxB, double dyB, + double *xi, double *yi) +{ + double A[2][2]; + double b[2]; + + // The line is given to us in the form: + // (x(t), y(t)) = (x0, y0) + t*(dx, dy) + // so first rewrite it as + // (x - x0, y - y0) dot (dy, -dx) = 0 + // x*dy - x0*dy - y*dx + y0*dx = 0 + // x*dy - y*dx = (x0*dy - y0*dx) + + // So write the matrix, pre-pivoted. + if(fabs(dyA) > fabs(dyB)) { + A[0][0] = dyA; A[0][1] = -dxA; b[0] = x0A*dyA - y0A*dxA; + A[1][0] = dyB; A[1][1] = -dxB; b[1] = x0B*dyB - y0B*dxB; + } else { + A[1][0] = dyA; A[1][1] = -dxA; b[1] = x0A*dyA - y0A*dxA; + A[0][0] = dyB; A[0][1] = -dxB; b[0] = x0B*dyB - y0B*dxB; + } + + // Check the determinant; if it's zero then no solution. + if(fabs(A[0][0]*A[1][1] - A[0][1]*A[1][0]) < LENGTH_EPS) { + return false; + } + + // Solve + double v = A[1][0] / A[0][0]; + A[1][0] -= A[0][0]*v; + A[1][1] -= A[0][1]*v; + b[1] -= b[0]*v; + + // Back-substitute. + *yi = b[1] / A[1][1]; + *xi = (b[0] - A[0][1]*(*yi)) / A[0][0]; + + return true; +} +void SContour::OffsetInto(SContour *dest, double r) { + int i; + + for(i = 0; i < l.n; i++) { + Vector a, b, c; + Vector dp, dn; + double thetan, thetap; + + a = l.elem[WRAP(i-1, (l.n-1))].p; + b = l.elem[WRAP(i, (l.n-1))].p; + c = l.elem[WRAP(i+1, (l.n-1))].p; + + dp = a.Minus(b); + thetap = atan2(dp.y, dp.x); + + dn = b.Minus(c); + thetan = atan2(dn.y, dn.x); + + // A short line segment in a badly-generated polygon might look + // okay but screw up our sense of direction. + if(dp.Magnitude() < LENGTH_EPS || dn.Magnitude() < LENGTH_EPS) { + continue; + } + + if(thetan > thetap && (thetan - thetap) > PI) { + thetap += 2*PI; + } + if(thetan < thetap && (thetap - thetan) > PI) { + thetan += 2*PI; + } + + if(fabs(thetan - thetap) < (1*PI)/180) { + Vector p = { b.x - r*sin(thetap), b.y + r*cos(thetap), 0 }; + dest->AddPoint(p); + } else if(thetan < thetap) { + // This is an inside corner. We have two edges, Ep and En. Move + // out from their intersection by radius, normal to En, and + // then draw a line parallel to En. Move out from their + // intersection by radius, normal to Ep, and then draw a second + // line parallel to Ep. The point that we want to generate is + // the intersection of these two lines--it removes as much + // material as we can without removing any that we shouldn't. + double px0, py0, pdx, pdy; + double nx0, ny0, ndx, ndy; + double x = 0.0, y = 0.0; + + px0 = b.x - r*sin(thetap); + py0 = b.y + r*cos(thetap); + pdx = cos(thetap); + pdy = sin(thetap); + + nx0 = b.x - r*sin(thetan); + ny0 = b.y + r*cos(thetan); + ndx = cos(thetan); + ndy = sin(thetan); + + IntersectionOfLines(px0, py0, pdx, pdy, + nx0, ny0, ndx, ndy, + &x, &y); + + dest->AddPoint(Vector::From(x, y, 0)); + } else { + if(fabs(thetap - thetan) < (6*PI)/180) { + Vector pp = { b.x - r*sin(thetap), + b.y + r*cos(thetap), 0 }; + dest->AddPoint(pp); + + Vector pn = { b.x - r*sin(thetan), + b.y + r*cos(thetan), 0 }; + dest->AddPoint(pn); + } else { + double theta; + for(theta = thetap; theta <= thetan; theta += (6*PI)/180) { + Vector p = { b.x - r*sin(theta), + b.y + r*cos(theta), 0 }; + dest->AddPoint(p); + } + } + } + } +} + diff --git a/src/polygon.h b/src/polygon.h new file mode 100644 index 0000000..7d2907b --- /dev/null +++ b/src/polygon.h @@ -0,0 +1,337 @@ +//----------------------------------------------------------------------------- +// Anything relating to plane polygons and triangles, and (generally, non- +// planar) meshes thereof. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __POLYGON_H +#define __POLYGON_H + +class SPointList; +class SPolygon; +class SContour; +class SMesh; +class SBsp3; +class SOutlineList; + +class SEdge { +public: + int tag; + int auxA, auxB; + Vector a, b; + + static SEdge From(Vector a, Vector b); + bool EdgeCrosses(Vector a, Vector b, Vector *pi=NULL, SPointList *spl=NULL); +}; + +class SEdgeList { +public: + List l; + + void Clear(void); + void AddEdge(Vector a, Vector b, int auxA=0, int auxB=0); + bool AssemblePolygon(SPolygon *dest, SEdge *errorAt, bool keepDir=false); + bool AssembleContour(Vector first, Vector last, SContour *dest, + SEdge *errorAt, bool keepDir); + int AnyEdgeCrossings(Vector a, Vector b, + Vector *pi=NULL, SPointList *spl=NULL); + bool ContainsEdgeFrom(SEdgeList *sel); + bool ContainsEdge(SEdge *se); + void CullExtraneousEdges(void); + void MergeCollinearSegments(Vector a, Vector b); +}; + +// A kd-tree element needs to go on a side of a node if it's when KDTREE_EPS +// of the boundary. So increasing this number never breaks anything, but may +// result in more duplicated elements. So it's conservative to be sloppy here. +#define KDTREE_EPS (20*LENGTH_EPS) + +class SEdgeLl { +public: + SEdge *se; + SEdgeLl *next; + + static SEdgeLl *Alloc(void); +}; + +class SKdNodeEdges { +public: + int which; // whether c is x, y, or z + double c; + SKdNodeEdges *gt; + SKdNodeEdges *lt; + + SEdgeLl *edges; + + static SKdNodeEdges *From(SEdgeList *sel); + static SKdNodeEdges *From(SEdgeLl *sell); + static SKdNodeEdges *Alloc(void); + int AnyEdgeCrossings(Vector a, Vector b, int cnt, + Vector *pi=NULL, SPointList *spl=NULL); +}; + +class SPoint { +public: + int tag; + + enum { + UNKNOWN = 0, + NOT_EAR = 1, + EAR = 2 + }; + int ear; + + Vector p; + Vector auxv; +}; + +class SPointList { +public: + List l; + + void Clear(void); + bool ContainsPoint(Vector pt); + int IndexForPoint(Vector pt); + void IncrementTagFor(Vector pt); + void Add(Vector pt); +}; + +class SContour { +public: + int tag; + int timesEnclosed; + Vector xminPt; + List l; + + void AddPoint(Vector p); + void MakeEdgesInto(SEdgeList *el); + void Reverse(void); + Vector ComputeNormal(void); + double SignedAreaProjdToNormal(Vector n); + bool IsClockwiseProjdToNormal(Vector n); + bool ContainsPointProjdToNormal(Vector n, Vector p); + void OffsetInto(SContour *dest, double r); + void CopyInto(SContour *dest); + void FindPointWithMinX(void); + Vector AnyEdgeMidpoint(void); + + bool IsEar(int bp, double scaledEps); + bool BridgeToContour(SContour *sc, SEdgeList *el, List *vl); + void ClipEarInto(SMesh *m, int bp, double scaledEps); + void UvTriangulateInto(SMesh *m, SSurface *srf); +}; + +typedef struct { + uint32_t face; + RgbaColor color; +} STriMeta; + +class SPolygon { +public: + List l; + Vector normal; + + Vector ComputeNormal(void); + void AddEmptyContour(void); + int WindingNumberForPoint(Vector p); + double SignedArea(void); + bool ContainsPoint(Vector p); + void MakeEdgesInto(SEdgeList *el); + void FixContourDirections(void); + void Clear(void); + bool SelfIntersecting(Vector *intersectsAt); + bool IsEmpty(void); + Vector AnyPoint(void); + void OffsetInto(SPolygon *dest, double r); + void UvTriangulateInto(SMesh *m, SSurface *srf); + void UvGridTriangulateInto(SMesh *m, SSurface *srf); +}; + +class STriangle { +public: + int tag; + STriMeta meta; + Vector a, b, c; + Vector an, bn, cn; + + static STriangle From(STriMeta meta, Vector a, Vector b, Vector c); + Vector Normal(void); + void FlipNormal(void); + double MinAltitude(void); + int WindingNumberForPoint(Vector p); + bool ContainsPoint(Vector p); + bool ContainsPointProjd(Vector n, Vector p); +}; + +class SBsp2 { +public: + Vector np; // normal to the plane + + Vector no; // outer normal to the edge + double d; + SEdge edge; + + SBsp2 *pos; + SBsp2 *neg; + + SBsp2 *more; + + enum { POS = 100, NEG = 101, COPLANAR = 200 }; + void InsertTriangleHow(int how, STriangle *tr, SMesh *m, SBsp3 *bsp3); + void InsertTriangle(STriangle *tr, SMesh *m, SBsp3 *bsp3); + Vector IntersectionWith(Vector a, Vector b); + void InsertEdge(SEdge *nedge, Vector nnp, Vector out); + static SBsp2 *InsertOrCreateEdge(SBsp2 *where, SEdge *nedge, Vector nnp, Vector out); + static SBsp2 *Alloc(void); + + void DebugDraw(Vector n, double d); +}; + +class SBsp3 { +public: + Vector n; + double d; + + STriangle tri; + SBsp3 *pos; + SBsp3 *neg; + + SBsp3 *more; + + SBsp2 *edges; + + static SBsp3 *Alloc(void); + static SBsp3 *FromMesh(SMesh *m); + + Vector IntersectionWith(Vector a, Vector b); + + enum { POS = 100, NEG = 101, COPLANAR = 200 }; + void InsertHow(int how, STriangle *str, SMesh *instead); + void Insert(STriangle *str, SMesh *instead); + static SBsp3 *InsertOrCreate(SBsp3 *where, STriangle *str, SMesh *instead); + + void InsertConvexHow(int how, STriMeta meta, Vector *vertex, int n, + SMesh *instead); + SBsp3 *InsertConvex(STriMeta meta, Vector *vertex, int n, SMesh *instead); + + void InsertInPlane(bool pos2, STriangle *tr, SMesh *m); + + void GenerateInPaintOrder(SMesh *m); + + void DebugDraw(void); +}; + +class SMesh { +public: + List l; + + bool flipNormal; + bool keepCoplanar; + bool atLeastOneDiscarded; + bool isTransparent; + + void Clear(void); + void AddTriangle(STriangle *st); + void AddTriangle(STriMeta meta, Vector a, Vector b, Vector c); + void AddTriangle(STriMeta meta, Vector n, Vector a, Vector b, Vector c); + void DoBounding(Vector v, Vector *vmax, Vector *vmin); + void GetBounding(Vector *vmax, Vector *vmin); + + void Simplify(int start); + + void AddAgainstBsp(SMesh *srcm, SBsp3 *bsp3); + void MakeFromUnionOf(SMesh *a, SMesh *b); + void MakeFromDifferenceOf(SMesh *a, SMesh *b); + + void MakeFromCopyOf(SMesh *a); + void MakeFromTransformationOf(SMesh *a, + Vector trans, Quaternion q, double scale); + void MakeFromAssemblyOf(SMesh *a, SMesh *b); + + void MakeEdgesInPlaneInto(SEdgeList *sel, Vector n, double d); + void MakeCertainEdgesAndOutlinesInto(SEdgeList *sel, SOutlineList *sol, int type); + + bool IsEmpty(void); + void RemapFaces(Group *g, int remap); + + uint32_t FirstIntersectionWith(Point2d mp); +}; + +// A linked list of triangles +class STriangleLl { +public: + STriangle *tri; + + STriangleLl *next; + + static STriangleLl *Alloc(void); +}; + +class SOutline { +public: + int tag; + Vector a, b, nl, nr; +}; + +class SOutlineList { +public: + List l; + + void Clear(); + void AddEdge(Vector a, Vector b, Vector nl, Vector nr); + + void MakeFromCopyOf(SOutlineList *ol); + + void FillOutlineTags(Vector projDir); +}; + +class SKdNode { +public: + struct EdgeOnInfo { + int count; + bool frontFacing; + bool intersectsMesh; + STriangle *tr; + int ai; + int bi; + }; + + int which; // whether c is x, y, or z + double c; + + SKdNode *gt; + SKdNode *lt; + + STriangleLl *tris; + + static SKdNode *Alloc(void); + static SKdNode *From(SMesh *m); + static SKdNode *From(STriangleLl *tll); + + void AddTriangle(STriangle *tr); + void MakeMeshInto(SMesh *m); + void ListTrianglesInto(std::vector *tl); + void ClearTags(void); + + void FindEdgeOn(Vector a, Vector b, int cnt, bool coplanarIsInter, EdgeOnInfo *info); + enum { + NAKED_OR_SELF_INTER_EDGES = 100, + SELF_INTER_EDGES = 200, + TURNING_EDGES = 300, + EMPHASIZED_EDGES = 400, + SHARP_EDGES = 500, + }; + void MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter, + bool *inter, bool *leaky, int auxA=0); + void MakeOutlinesInto(SOutlineList *sel); + + void OcclusionTestLine(SEdge orig, SEdgeList *sel, int cnt, bool removeHidden); + void SplitLinesAgainstTriangle(SEdgeList *sel, STriangle *tr, bool removeHidden); + + void SnapToMesh(SMesh *m); + void SnapToVertex(Vector v, SMesh *extras); +}; + +#endif + diff --git a/src/request.cpp b/src/request.cpp new file mode 100644 index 0000000..b770e06 --- /dev/null +++ b/src/request.cpp @@ -0,0 +1,205 @@ +//----------------------------------------------------------------------------- +// Implementation of our Request class; a request is a user-created thing +// that will generate an entity (line, curve) when the sketch is generated, +// in the same way that other entities are generated automatically, like +// by an extrude or a step and repeat. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +const hRequest Request::HREQUEST_REFERENCE_XY = { 1 }; +const hRequest Request::HREQUEST_REFERENCE_YZ = { 2 }; +const hRequest Request::HREQUEST_REFERENCE_ZX = { 3 }; + +const EntReqTable::TableEntry EntReqTable::Table[] = { +// request type entity type pts xtra? norml dist description +{ Request::WORKPLANE, Entity::WORKPLANE, 1, false, true, false, "workplane" }, +{ Request::DATUM_POINT, 0, 1, false, false, false, "datum-point" }, +{ Request::LINE_SEGMENT, Entity::LINE_SEGMENT, 2, false, false, false, "line-segment" }, +{ Request::CUBIC, Entity::CUBIC, 4, true, false, false, "cubic-bezier" }, +{ Request::CUBIC_PERIODIC, Entity::CUBIC_PERIODIC, 3, true, false, false, "periodic-cubic" }, +{ Request::CIRCLE, Entity::CIRCLE, 1, false, true, true, "circle" }, +{ Request::ARC_OF_CIRCLE, Entity::ARC_OF_CIRCLE, 3, false, true, false, "arc-of-circle" }, +{ Request::TTF_TEXT, Entity::TTF_TEXT, 2, false, true, false, "ttf-text" }, +{ 0, 0, 0, false, false, false, 0 }, +}; + +const char *EntReqTable::DescriptionForRequest(int req) { + for(int i = 0; Table[i].reqType; i++) { + if(req == Table[i].reqType) { + return Table[i].description; + } + } + return "???"; +} + +void EntReqTable::CopyEntityInfo(const TableEntry *te, int extraPoints, + int *ent, int *req, int *pts, bool *hasNormal, bool *hasDistance) +{ + int points = te->points; + if(te->useExtraPoints) points += extraPoints; + + if(ent) *ent = te->entType; + if(req) *req = te->reqType; + if(pts) *pts = points; + if(hasNormal) *hasNormal = te->hasNormal; + if(hasDistance) *hasDistance = te->hasDistance; +} + +bool EntReqTable::GetRequestInfo(int req, int extraPoints, + int *ent, int *pts, bool *hasNormal, bool *hasDistance) +{ + for(int i = 0; Table[i].reqType; i++) { + const TableEntry *te = &(Table[i]); + if(req == te->reqType) { + CopyEntityInfo(te, extraPoints, + ent, NULL, pts, hasNormal, hasDistance); + return true; + } + } + return false; +} + +bool EntReqTable::GetEntityInfo(int ent, int extraPoints, + int *req, int *pts, bool *hasNormal, bool *hasDistance) +{ + for(int i = 0; Table[i].reqType; i++) { + const TableEntry *te = &(Table[i]); + if(ent == te->entType) { + CopyEntityInfo(te, extraPoints, + NULL, req, pts, hasNormal, hasDistance); + return true; + } + } + return false; +} + +int EntReqTable::GetRequestForEntity(int ent) { + int req = 0; + GetEntityInfo(ent, 0, &req, NULL, NULL, NULL); + return req; +} + + +void Request::Generate(IdList *entity, + IdList *param) +{ + int points = 0; + int et = 0; + bool hasNormal = false; + bool hasDistance = false; + int i; + + Entity e = {}; + EntReqTable::GetRequestInfo(type, extraPoints, + &et, &points, &hasNormal, &hasDistance); + + // Generate the entity that's specific to this request. + e.type = et; + e.extraPoints = extraPoints; + e.group = group; + e.style = style; + e.workplane = workplane; + e.construction = construction; + e.str = str; + e.font = font; + e.h = h.entity(0); + + // And generate entities for the points + for(i = 0; i < points; i++) { + Entity p = {}; + p.workplane = workplane; + // points start from entity 1, except for datum point case + p.h = h.entity(i+(et ? 1 : 0)); + p.group = group; + p.style = style; + + if(workplane.v == Entity::FREE_IN_3D.v) { + p.type = Entity::POINT_IN_3D; + // params for x y z + p.param[0] = AddParam(param, h.param(16 + 3*i + 0)); + p.param[1] = AddParam(param, h.param(16 + 3*i + 1)); + p.param[2] = AddParam(param, h.param(16 + 3*i + 2)); + } else { + p.type = Entity::POINT_IN_2D; + // params for u v + p.param[0] = AddParam(param, h.param(16 + 3*i + 0)); + p.param[1] = AddParam(param, h.param(16 + 3*i + 1)); + } + entity->Add(&p); + e.point[i] = p.h; + } + if(hasNormal) { + Entity n = {}; + n.workplane = workplane; + n.h = h.entity(32); + n.group = group; + n.style = style; + if(workplane.v == Entity::FREE_IN_3D.v) { + n.type = Entity::NORMAL_IN_3D; + n.param[0] = AddParam(param, h.param(32+0)); + n.param[1] = AddParam(param, h.param(32+1)); + n.param[2] = AddParam(param, h.param(32+2)); + n.param[3] = AddParam(param, h.param(32+3)); + } else { + n.type = Entity::NORMAL_IN_2D; + // and this is just a copy of the workplane quaternion, + // so no params required + } + if(points < 1) oops(); + // The point determines where the normal gets displayed on-screen; + // it's entirely cosmetic. + n.point[0] = e.point[0]; + entity->Add(&n); + e.normal = n.h; + } + if(hasDistance) { + Entity d = {}; + d.workplane = workplane; + d.h = h.entity(64); + d.group = group; + d.style = style; + d.type = Entity::DISTANCE; + d.param[0] = AddParam(param, h.param(64)); + entity->Add(&d); + e.distance = d.h; + } + + if(et) entity->Add(&e); +} + +std::string Request::DescriptionString(void) { + const char *s; + if(h.v == Request::HREQUEST_REFERENCE_XY.v) { + s = "#XY"; + } else if(h.v == Request::HREQUEST_REFERENCE_YZ.v) { + s = "#YZ"; + } else if(h.v == Request::HREQUEST_REFERENCE_ZX.v) { + s = "#ZX"; + } else { + s = EntReqTable::DescriptionForRequest(type); + } + + return ssprintf("r%03x-%s", h.v, s); +} + +int Request::IndexOfPoint(hEntity he) { + if(type == DATUM_POINT) { + return (he.v == h.entity(0).v) ? 0 : -1; + } + for(int i = 0; i < MAX_POINTS_IN_ENTITY; i++) { + if(he.v == h.entity(i + 1).v) { + return i; + } + } + return -1; +} + +hParam Request::AddParam(IdList *param, hParam hp) { + Param pa = {}; + pa.h = hp; + param->Add(&pa); + return hp; +} + diff --git a/src/sketch.h b/src/sketch.h new file mode 100644 index 0000000..d9f1794 --- /dev/null +++ b/src/sketch.h @@ -0,0 +1,916 @@ +//----------------------------------------------------------------------------- +// The parametric structure of our sketch, in multiple groups, that generate +// geometric entities and surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SKETCH_H +#define __SKETCH_H + +class hGroup; +class hRequest; +class hEntity; +class hParam; +class hStyle; +class hConstraint; +class hEquation; + +class Entity; +class Param; +class Equation; +class Style; + + +// All of the hWhatever handles are a 32-bit ID, that is used to represent +// some data structure in the sketch. +class hGroup { +public: + // bits 15: 0 -- group index + uint32_t v; + + inline hEntity entity(int i); + inline hParam param(int i); + inline hEquation equation(int i); +}; +class hRequest { +public: + // bits 15: 0 -- request index + uint32_t v; + + inline hEntity entity(int i); + inline hParam param(int i); + + inline bool IsFromReferences(void); +}; +class hEntity { +public: + // bits 15: 0 -- entity index + // 31:16 -- request index + uint32_t v; + + inline bool isFromRequest(void); + inline hRequest request(void); + inline hGroup group(void); + inline hEquation equation(int i); +}; +class hParam { +public: + // bits 15: 0 -- param index + // 31:16 -- request index + uint32_t v; + + inline hRequest request(void); +}; + +class hStyle { +public: + uint32_t v; +}; + + +class EntityId { +public: + uint32_t v; // entity ID, starting from 0 +}; +class EntityMap { +public: + int tag; + + EntityId h; + hEntity input; + int copyNumber; + // (input, copyNumber) gets mapped to ((Request)xxx).entity(h.v) + + void Clear(void) {} +}; + +// A set of requests. Every request must have an associated group. +class Group { +public: + static const hGroup HGROUP_REFERENCES; + + int tag; + hGroup h; + + enum { + DRAWING_3D = 5000, + DRAWING_WORKPLANE = 5001, + EXTRUDE = 5100, + LATHE = 5101, + ROTATE = 5200, + TRANSLATE = 5201, + LINKED = 5300 + }; + int type; + + int order; + + hGroup opA; + hGroup opB; + bool visible; + bool suppress; + bool relaxConstraints; + bool allowRedundant; + bool allDimsReference; + double scale; + + bool clean; + hEntity activeWorkplane; + double valA; + double valB; + double valC; + RgbaColor color; + + struct { + int how; + int dof; + List remove; + } solved; + + enum { + // For drawings in 2d + WORKPLANE_BY_POINT_ORTHO = 6000, + WORKPLANE_BY_LINE_SEGMENTS = 6001, + // For extrudes, translates, and rotates + ONE_SIDED = 7000, + TWO_SIDED = 7001 + }; + int subtype; + + bool skipFirst; // for step and repeat ops + + struct { + Quaternion q; + hEntity origin; + hEntity entityB; + hEntity entityC; + bool swapUV; + bool negateU; + bool negateV; + } predef; + + SPolygon polyLoops; + SBezierLoopSetSet bezierLoops; + SBezierList bezierOpens; + enum { + POLY_GOOD = 0, + POLY_NOT_CLOSED = 1, + POLY_NOT_COPLANAR = 2, + POLY_SELF_INTERSECTING = 3, + POLY_ZERO_LEN_EDGE = 4 + }; + struct { + int how; + SEdge notClosedAt; + Vector errorPointAt; + } polyError; + + bool booleanFailed; + + SShell thisShell; + SShell runningShell; + + SMesh thisMesh; + SMesh runningMesh; + + bool displayDirty; + SMesh displayMesh; + SEdgeList displayEdges; + SOutlineList displayOutlines; + + enum { + COMBINE_AS_UNION = 0, + COMBINE_AS_DIFFERENCE = 1, + COMBINE_AS_ASSEMBLE = 2 + }; + int meshCombine; + + bool forceToMesh; + + IdList remap; + enum { REMAP_PRIME = 19477 }; + int remapCache[REMAP_PRIME]; + + std::string linkFile; + std::string linkFileRel; + SMesh impMesh; + SShell impShell; + EntityList impEntity; + + std::string name; + + + void Activate(void); + std::string DescriptionString(void); + void Clear(void); + + static void AddParam(ParamList *param, hParam hp, double v); + void Generate(EntityList *entity, ParamList *param); + bool IsSolvedOkay(); + void TransformImportedBy(Vector t, Quaternion q); + // When a request generates entities from entities, and the source + // entities may have come from multiple requests, it's necessary to + // remap the entity ID so that it's still unique. We do this with a + // mapping list. + enum { + REMAP_LAST = 1000, + REMAP_TOP = 1001, + REMAP_BOTTOM = 1002, + REMAP_PT_TO_LINE = 1003, + REMAP_LINE_TO_FACE = 1004, + REMAP_LATHE_START = 1006, + REMAP_LATHE_END = 1007, + REMAP_PT_TO_ARC = 1008, + REMAP_PT_TO_NORMAL = 1009, + }; + hEntity Remap(hEntity in, int copyNumber); + void MakeExtrusionLines(EntityList *el, hEntity in); + void MakeLatheCircles(IdList *el, IdList *param, hEntity in, Vector pt, Vector axis, int ai); + void MakeExtrusionTopBottomFaces(EntityList *el, hEntity pt); + void CopyEntity(EntityList *el, + Entity *ep, int timesApplied, int remap, + hParam dx, hParam dy, hParam dz, + hParam qw, hParam qvx, hParam qvy, hParam qvz, + bool asTrans, bool asAxisAngle); + + void AddEq(IdList *l, Expr *expr, int index); + void GenerateEquations(IdList *l); + bool IsVisible(void); + int GetNumConstraints(); + Vector ExtrusionGetVector(); + void ExtrusionForceVectorTo(const Vector &v); + + // Assembling the curves into loops, and into a piecewise linear polygon + // at the same time. + void AssembleLoops(bool *allClosed, bool *allCoplanar, bool *allNonZeroLen); + void GenerateLoops(void); + // And the mesh stuff + Group *PreviousGroup(void); + Group *RunningMeshGroup(void); + bool IsMeshGroup(); + void GenerateShellAndMesh(void); + template void GenerateForStepAndRepeat(T *steps, T *outs); + template void GenerateForBoolean(T *a, T *b, T *o, int how); + void GenerateDisplayItems(void); + void DrawDisplayItems(int t); + void Draw(void); + RgbaColor GetLoopSetFillColor(SBezierLoopSet *sbls, + bool *allSame, Vector *errorAt); + void FillLoopSetAsPolygon(SBezierLoopSet *sbls); + void DrawFilledPaths(void); + + SPolygon GetPolygon(void); + + static void MenuGroup(int id); +}; + +// A user request for some primitive or derived operation; for example a +// line, or a step and repeat. +class Request { +public: + // Some predefined requests, that are present in every sketch. + static const hRequest HREQUEST_REFERENCE_XY; + static const hRequest HREQUEST_REFERENCE_YZ; + static const hRequest HREQUEST_REFERENCE_ZX; + + int tag; + hRequest h; + + // Types of requests + enum { + WORKPLANE = 100, + DATUM_POINT = 101, + LINE_SEGMENT = 200, + CUBIC = 300, + CUBIC_PERIODIC = 301, + CIRCLE = 400, + ARC_OF_CIRCLE = 500, + TTF_TEXT = 600 + }; + + int type; + int extraPoints; + + hEntity workplane; // or Entity::FREE_IN_3D + hGroup group; + hStyle style; + + bool construction; + std::string str; + std::string font; + + static hParam AddParam(ParamList *param, hParam hp); + void Generate(EntityList *entity, ParamList *param); + + std::string DescriptionString(void); + int IndexOfPoint(hEntity he); + + void Clear(void) {} +}; + +#define MAX_POINTS_IN_ENTITY (12) +class EntityBase { +public: + int tag; + hEntity h; + + static const hEntity FREE_IN_3D; + static const hEntity NO_ENTITY; + + enum { + POINT_IN_3D = 2000, + POINT_IN_2D = 2001, + POINT_N_TRANS = 2010, + POINT_N_ROT_TRANS = 2011, + POINT_N_COPY = 2012, + POINT_N_ROT_AA = 2013, + + NORMAL_IN_3D = 3000, + NORMAL_IN_2D = 3001, + NORMAL_N_COPY = 3010, + NORMAL_N_ROT = 3011, + NORMAL_N_ROT_AA = 3012, + + DISTANCE = 4000, + DISTANCE_N_COPY = 4001, + + FACE_NORMAL_PT = 5000, + FACE_XPROD = 5001, + FACE_N_ROT_TRANS = 5002, + FACE_N_TRANS = 5003, + FACE_N_ROT_AA = 5004, + + + WORKPLANE = 10000, + LINE_SEGMENT = 11000, + CUBIC = 12000, + CUBIC_PERIODIC = 12001, + CIRCLE = 13000, + ARC_OF_CIRCLE = 14000, + TTF_TEXT = 15000 + }; + + int type; + + hGroup group; + hEntity workplane; // or Entity::FREE_IN_3D + + // When it comes time to draw an entity, we look here to get the + // defining variables. + hEntity point[MAX_POINTS_IN_ENTITY]; + int extraPoints; + hEntity normal; + hEntity distance; + // The only types that have their own params are points, normals, + // and directions. + hParam param[7]; + + // Transformed points/normals/distances have their numerical base + Vector numPoint; + Quaternion numNormal; + double numDistance; + + std::string str; + std::string font; + + // For entities that are derived by a transformation, the number of + // times to apply the transformation. + int timesApplied; + + Quaternion GetAxisAngleQuaternion(int param0); + ExprQuaternion GetAxisAngleQuaternionExprs(int param0); + + bool IsCircle(void); + Expr *CircleGetRadiusExpr(void); + double CircleGetRadiusNum(void); + void ArcGetAngles(double *thetaa, double *thetab, double *dtheta); + + bool HasVector(void); + ExprVector VectorGetExprs(void); + Vector VectorGetNum(void); + Vector VectorGetRefPoint(void); + Vector VectorGetStartPoint(void); + + // For distances + bool IsDistance(void); + double DistanceGetNum(void); + Expr *DistanceGetExpr(void); + void DistanceForceTo(double v); + + bool IsWorkplane(void); + // The plane is points P such that P dot (xn, yn, zn) - d = 0 + void WorkplaneGetPlaneExprs(ExprVector *n, Expr **d); + ExprVector WorkplaneGetOffsetExprs(void); + Vector WorkplaneGetOffset(void); + EntityBase *Normal(void); + + bool IsFace(void); + ExprVector FaceGetNormalExprs(void); + Vector FaceGetNormalNum(void); + ExprVector FaceGetPointExprs(void); + Vector FaceGetPointNum(void); + + bool IsPoint(void); + // Applies for any of the point types + Vector PointGetNum(void); + ExprVector PointGetExprs(void); + void PointGetExprsInWorkplane(hEntity wrkpl, Expr **u, Expr **v); + void PointForceTo(Vector v); + // These apply only the POINT_N_ROT_TRANS, which has an assoc rotation + Quaternion PointGetQuaternion(void); + void PointForceQuaternionTo(Quaternion q); + + bool IsNormal(void); + // Applies for any of the normal types + Quaternion NormalGetNum(void); + ExprQuaternion NormalGetExprs(void); + void NormalForceTo(Quaternion q); + + Vector NormalU(void); + Vector NormalV(void); + Vector NormalN(void); + ExprVector NormalExprsU(void); + ExprVector NormalExprsV(void); + ExprVector NormalExprsN(void); + + Vector CubicGetStartNum(void); + Vector CubicGetFinishNum(void); + ExprVector CubicGetStartTangentExprs(void); + ExprVector CubicGetFinishTangentExprs(void); + Vector CubicGetStartTangentNum(void); + Vector CubicGetFinishTangentNum(void); + + bool HasEndpoints(void); + Vector EndpointStart(); + Vector EndpointFinish(); + + void AddEq(IdList *l, Expr *expr, int index); + void GenerateEquations(IdList *l); + + void Clear(void) {} +}; + +class Entity : public EntityBase { +public: + // Necessary for Entity e = {} to zero-initialize, since + // classes with base classes are not aggregates and + // the default constructor does not initialize members. + // + // Note EntityBase({}); without explicitly value-initializing + // the base class, MSVC2013 will default-initialize it, leaving + // POD members with indeterminate value. + Entity() : EntityBase({}), forceHidden(), actPoint(), actNormal(), + actDistance(), actVisible(), style(), construction(), + beziers(), edges(), edgesChordTol(), screenBBox(), screenBBoxValid(), + dogd() {}; + + // A linked entity that was hidden in the source file ends up hidden + // here too. + bool forceHidden; + + // All points/normals/distances have their numerical value; this is + // a convenience, to simplify the link/assembly code, so that the + // part is entirely described by the entities. + Vector actPoint; + Quaternion actNormal; + double actDistance; + // and the shown state also gets saved here, for later import + bool actVisible; + + hStyle style; + bool construction; + + SBezierList beziers; + SEdgeList edges; + double edgesChordTol; + BBox screenBBox; + bool screenBBoxValid; + + // Routines to draw and hit-test the representation of the entity + // on-screen. + struct { + bool drawing; + Point2d mp; + double dmin; + Vector refp; + double lineWidth; + double stippleScale; + int stippleType; + int data; + } dogd; // state for drawing or getting distance (for hit testing) + void LineDrawOrGetDistance(Vector a, Vector b, bool maybeFat=false, int userData = -1); + void DrawOrGetDistance(void); + + bool IsStylable(); + bool IsVisible(void); + bool PointIsFromReferences(void); + + void ComputeInterpolatingSpline(SBezierList *sbl, bool periodic); + void GenerateBezierCurves(SBezierList *sbl); + void GenerateEdges(SEdgeList *el, bool includingConstruction=false); + + static void DrawAll(bool drawAsHidden); + void Draw(bool drawAsHidden); + double GetDistance(Point2d mp); + Vector GetReferencePos(void); + + void CalculateNumerical(bool forExport); + + std::string DescriptionString(void); + + SBezierList *GetOrGenerateBezierCurves(); + SEdgeList *GetOrGenerateEdges(); + BBox GetOrGenerateScreenBBox(bool *hasBBox); + + void Clear() { + beziers.l.Clear(); + edges.l.Clear(); + } +}; + +class EntReqTable { +public: + typedef struct { + int reqType; + int entType; + int points; + bool useExtraPoints; + bool hasNormal; + bool hasDistance; + const char *description; + } TableEntry; + + static const TableEntry Table[]; + + static const char *DescriptionForRequest(int req); + static void CopyEntityInfo(const TableEntry *te, int extraPoints, + int *ent, int *req, int *pts, bool *hasNormal, bool *hasDistance); + static bool GetRequestInfo(int req, int extraPoints, + int *ent, int *pts, bool *hasNormal, bool *hasDistance); + static bool GetEntityInfo(int ent, int extraPoints, + int *req, int *pts, bool *hasNormal, bool *hasDistance); + static int GetRequestForEntity(int ent); +}; + +class Param { +public: + int tag; + hParam h; + + double val; + bool known; + bool free; + + // Used only in the solver + hParam substd; + + static const hParam NO_PARAM; + + void Clear(void) {} +}; + + +class hConstraint { +public: + uint32_t v; + + inline hEquation equation(int i); +}; + +class ConstraintBase { +public: + int tag; + hConstraint h; + + static const hConstraint NO_CONSTRAINT; + + enum { + POINTS_COINCIDENT = 20, + PT_PT_DISTANCE = 30, + PT_PLANE_DISTANCE = 31, + PT_LINE_DISTANCE = 32, + PT_FACE_DISTANCE = 33, + PROJ_PT_DISTANCE = 34, + PT_IN_PLANE = 41, + PT_ON_LINE = 42, + PT_ON_FACE = 43, + EQUAL_LENGTH_LINES = 50, + LENGTH_RATIO = 51, + EQ_LEN_PT_LINE_D = 52, + EQ_PT_LN_DISTANCES = 53, + EQUAL_ANGLE = 54, + EQUAL_LINE_ARC_LEN = 55, + LENGTH_DIFFERENCE = 56, + SYMMETRIC = 60, + SYMMETRIC_HORIZ = 61, + SYMMETRIC_VERT = 62, + SYMMETRIC_LINE = 63, + AT_MIDPOINT = 70, + HORIZONTAL = 80, + VERTICAL = 81, + DIAMETER = 90, + PT_ON_CIRCLE = 100, + SAME_ORIENTATION = 110, + ANGLE = 120, + PARALLEL = 121, + PERPENDICULAR = 122, + ARC_LINE_TANGENT = 123, + CUBIC_LINE_TANGENT = 124, + CURVE_CURVE_TANGENT = 125, + EQUAL_RADIUS = 130, + WHERE_DRAGGED = 200, + + COMMENT = 1000 + }; + + int type; + + hGroup group; + hEntity workplane; + + // These are the parameters for the constraint. + double valA; + hEntity ptA; + hEntity ptB; + hEntity entityA; + hEntity entityB; + hEntity entityC; + hEntity entityD; + bool other; + bool other2; + + bool reference; // a ref dimension, that generates no eqs + std::string comment; // since comments are represented as constraints + + bool HasLabel(void); + + void Generate(IdList *l); + void GenerateReal(IdList *l); + // Some helpers when generating symbolic constraint equations + void ModifyToSatisfy(void); + void AddEq(IdList *l, Expr *expr, int index); + static Expr *DirectionCosine(hEntity wrkpl, ExprVector ae, ExprVector be); + static Expr *Distance(hEntity workplane, hEntity pa, hEntity pb); + static Expr *PointLineDistance(hEntity workplane, hEntity pt, hEntity ln); + static Expr *PointPlaneDistance(ExprVector p, hEntity plane); + static Expr *VectorsParallel(int eq, ExprVector a, ExprVector b); + static ExprVector PointInThreeSpace(hEntity workplane, Expr *u, Expr *v); + + void Clear(void) {} +}; + +class Constraint : public ConstraintBase { +public: + // See Entity::Entity(). + Constraint() : ConstraintBase({}), disp(), dogd() {} + + // These define how the constraint is drawn on-screen. + struct { + Vector offset; + hStyle style; + } disp; + + // State for drawing or getting distance (for hit testing). + struct { + bool drawing; + Point2d mp; + double dmin; + Vector refp; + SEdgeList *sel; + } dogd; + + double GetDistance(Point2d mp); + Vector GetLabelPos(void); + Vector GetReferencePos(void); + void Draw(void); + void GetEdges(SEdgeList *sel); + bool IsStylable(); + hStyle GetStyle() const; + bool HasLabel(); + + void LineDrawOrGetDistance(Vector a, Vector b); + bool IsVisible() const; + void DrawOrGetDistance(Vector *labelPos); + std::string Label(void); + bool DoLineExtend(Vector p0, Vector p1, Vector pt, double salient); + void DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db, + Vector offset, Vector *ref, bool trim); + void DoArrow(Vector p, Vector dir, Vector n, double width, double angle, double da); + void DoLineWithArrows(Vector ref, Vector a, Vector b, bool onlyOneExt); + int DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend, Vector gr, Vector gu, double swidth, double sheight); + int DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b, bool extend = true); + void DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu); + void StippledLine(Vector a, Vector b); + void DoProjectedPoint(Vector *p); + void DoEqualLenTicks(Vector a, Vector b, Vector gn); + void DoEqualRadiusTicks(hEntity he); + + std::string DescriptionString(void); + + static hConstraint AddConstraint(Constraint *c, bool rememberForUndo); + static hConstraint AddConstraint(Constraint *c); + static void MenuConstrain(int id); + static void DeleteAllConstraintsFor(int type, hEntity entityA, hEntity ptA); + + static hConstraint ConstrainCoincident(hEntity ptA, hEntity ptB); + static hConstraint Constrain(int type, hEntity ptA, hEntity ptB, hEntity entityA); + static hConstraint Constrain(int type, hEntity ptA, hEntity ptB, + hEntity entityA, hEntity entityB, + bool other, bool other2); +}; + +class hEquation { +public: + uint32_t v; + + inline bool isFromConstraint(void); + inline hConstraint constraint(void); +}; + +class Equation { +public: + int tag; + hEquation h; + + Expr *e; + + void Clear(void) {} +}; + + +class Style { +public: + int tag; + hStyle h; + + enum { + STIPPLE_CONTINUOUS = 0, + STIPPLE_DASH = 1, + STIPPLE_LONG_DASH = 2, + STIPPLE_DASH_DOT = 3, + STIPPLE_DASH_DOT_DOT = 4, + STIPPLE_DOT = 5, + STIPPLE_FREEHAND = 6, + STIPPLE_ZIGZAG = 7, + + LAST_STIPPLE = STIPPLE_ZIGZAG + }; + + enum { + // If an entity has no style, then it will be colored according to + // whether the group that it's in is active or not, whether it's + // construction or not, and so on. + NO_STYLE = 0, + + ACTIVE_GRP = 1, + CONSTRUCTION = 2, + INACTIVE_GRP = 3, + DATUM = 4, + SOLID_EDGE = 5, + CONSTRAINT = 6, + SELECTED = 7, + HOVERED = 8, + CONTOUR_FILL = 9, + NORMALS = 10, + ANALYZE = 11, + DRAW_ERROR = 12, + DIM_SOLID = 13, + HIDDEN_EDGE = 14, + OUTLINE = 15, + + FIRST_CUSTOM = 0x100 + }; + + std::string name; + + enum { + UNITS_AS_PIXELS = 0, + UNITS_AS_MM = 1 + }; + double width; + int widthAs; + double textHeight; + int textHeightAs; + enum { + ORIGIN_LEFT = 0x01, + ORIGIN_RIGHT = 0x02, + ORIGIN_BOT = 0x04, + ORIGIN_TOP = 0x08 + }; + int textOrigin; + double textAngle; + RgbaColor color; + bool filled; + RgbaColor fillColor; + bool visible; + bool exportable; + int stippleType; + double stippleScale; + int zIndex; + + // The default styles, for entities that don't have a style assigned yet, + // and for datums and such. + typedef struct { + hStyle h; + const char *cnfPrefix; + RgbaColor color; + double width; + int zIndex; + } Default; + static const Default Defaults[]; + + static std::string CnfColor(const std::string &prefix); + static std::string CnfWidth(const std::string &prefix); + static std::string CnfTextHeight(const std::string &prefix); + static std::string CnfPrefixToName(const std::string &prefix); + + static void CreateAllDefaultStyles(void); + static void CreateDefaultStyle(hStyle h); + static void FillDefaultStyle(Style *s, const Default *d = NULL, bool factory = false); + static void FreezeDefaultStyles(void); + static void LoadFactoryDefaults(void); + + static void AssignSelectionToStyle(uint32_t v); + static uint32_t CreateCustomStyle(bool rememberForUndo = true); + + static RgbaColor RewriteColor(RgbaColor rgb); + + static Style *Get(hStyle hs); + static RgbaColor Color(hStyle hs, bool forExport=false); + static RgbaColor FillColor(hStyle hs, bool forExport=false); + static float Width(hStyle hs); + static RgbaColor Color(int hs, bool forExport=false); + static float Width(int hs); + static double WidthMm(int hs); + static double TextHeight(hStyle hs); + static double DefaultTextHeight(); + static bool Exportable(int hs); + static hStyle ForEntity(hEntity he); + static int PatternType(hStyle hs); + static double StippleScaleMm(hStyle hs); + + std::string DescriptionString(void); + + void Clear(void) {} +}; + + +inline hEntity hGroup::entity(int i) + { hEntity r; r.v = 0x80000000 | (v << 16) | (uint32_t)i; return r; } +inline hParam hGroup::param(int i) + { hParam r; r.v = 0x80000000 | (v << 16) | (uint32_t)i; return r; } +inline hEquation hGroup::equation(int i) + { hEquation r; r.v = (v << 16) | 0x80000000 | (uint32_t)i; return r; } + +inline bool hRequest::IsFromReferences(void) { + if(v == Request::HREQUEST_REFERENCE_XY.v) return true; + if(v == Request::HREQUEST_REFERENCE_YZ.v) return true; + if(v == Request::HREQUEST_REFERENCE_ZX.v) return true; + return false; +} +inline hEntity hRequest::entity(int i) + { hEntity r; r.v = (v << 16) | (uint32_t)i; return r; } +inline hParam hRequest::param(int i) + { hParam r; r.v = (v << 16) | (uint32_t)i; return r; } + +inline bool hEntity::isFromRequest(void) + { if(v & 0x80000000) return false; else return true; } +inline hRequest hEntity::request(void) + { hRequest r; r.v = (v >> 16); return r; } +inline hGroup hEntity::group(void) + { hGroup r; r.v = (v >> 16) & 0x3fff; return r; } +inline hEquation hEntity::equation(int i) + { if(i != 0) oops(); hEquation r; r.v = v | 0x40000000; return r; } + +inline hRequest hParam::request(void) + { hRequest r; r.v = (v >> 16); return r; } + + +inline hEquation hConstraint::equation(int i) + { hEquation r; r.v = (v << 16) | (uint32_t)i; return r; } + +inline bool hEquation::isFromConstraint(void) + { if(v & 0xc0000000) return false; else return true; } +inline hConstraint hEquation::constraint(void) + { hConstraint r; r.v = (v >> 16); return r; } + +// The format for entities stored on the clipboard. +class ClipboardRequest { +public: + int type; + int extraPoints; + hStyle style; + std::string str; + std::string font; + bool construction; + + Vector point[MAX_POINTS_IN_ENTITY]; + double distance; + + hEntity oldEnt; + hEntity oldPointEnt[MAX_POINTS_IN_ENTITY]; + hRequest newReq; +}; + +#endif diff --git a/src/solvespace.cpp b/src/solvespace.cpp new file mode 100644 index 0000000..c923b7b --- /dev/null +++ b/src/solvespace.cpp @@ -0,0 +1,888 @@ +//----------------------------------------------------------------------------- +// Entry point in to the program, our registry-stored settings and top-level +// housekeeping when we open, save, and create new files. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "config.h" + +SolveSpaceUI SolveSpace::SS = {}; +Sketch SolveSpace::SK = {}; + +std::string SolveSpace::RecentFile[MAX_RECENT] = {}; + +void SolveSpaceUI::Init() { + SS.tangentArcRadius = 10.0; + + // Then, load the registry settings. + int i; + // Default list of colors for the model material + modelColor[0] = CnfThawColor(RGBi(150, 150, 150), "ModelColor_0"); + modelColor[1] = CnfThawColor(RGBi(100, 100, 100), "ModelColor_1"); + modelColor[2] = CnfThawColor(RGBi( 30, 30, 30), "ModelColor_2"); + modelColor[3] = CnfThawColor(RGBi(150, 0, 0), "ModelColor_3"); + modelColor[4] = CnfThawColor(RGBi( 0, 100, 0), "ModelColor_4"); + modelColor[5] = CnfThawColor(RGBi( 0, 80, 80), "ModelColor_5"); + modelColor[6] = CnfThawColor(RGBi( 0, 0, 130), "ModelColor_6"); + modelColor[7] = CnfThawColor(RGBi( 80, 0, 80), "ModelColor_7"); + // Light intensities + lightIntensity[0] = CnfThawFloat(1.0f, "LightIntensity_0"); + lightIntensity[1] = CnfThawFloat(0.5f, "LightIntensity_1"); + ambientIntensity = 0.3; // no setting for that yet + // Light positions + lightDir[0].x = CnfThawFloat(-1.0f, "LightDir_0_Right" ); + lightDir[0].y = CnfThawFloat( 1.0f, "LightDir_0_Up" ); + lightDir[0].z = CnfThawFloat( 0.0f, "LightDir_0_Forward" ); + lightDir[1].x = CnfThawFloat( 1.0f, "LightDir_1_Right" ); + lightDir[1].y = CnfThawFloat( 0.0f, "LightDir_1_Up" ); + lightDir[1].z = CnfThawFloat( 0.0f, "LightDir_1_Forward" ); + + exportMode = false; + // Chord tolerance + chordTol = CnfThawFloat(0.5f, "ChordTolerancePct"); + // Max pwl segments to generate + maxSegments = CnfThawInt(10, "MaxSegments"); + // Chord tolerance + exportChordTol = CnfThawFloat(0.1f, "ExportChordTolerance"); + // Max pwl segments to generate + exportMaxSegments = CnfThawInt(64, "ExportMaxSegments"); + // View units + viewUnits = (Unit)CnfThawInt((uint32_t)UNIT_MM, "ViewUnits"); + // Number of digits after the decimal point + afterDecimalMm = CnfThawInt(2, "AfterDecimalMm"); + afterDecimalInch = CnfThawInt(3, "AfterDecimalInch"); + // Camera tangent (determines perspective) + cameraTangent = CnfThawFloat(0.3f/1e3f, "CameraTangent"); + // Grid spacing + gridSpacing = CnfThawFloat(5.0f, "GridSpacing"); + // Export scale factor + exportScale = CnfThawFloat(1.0f, "ExportScale"); + // Export offset (cutter radius comp) + exportOffset = CnfThawFloat(0.0f, "ExportOffset"); + // Rewrite exported colors close to white into black (assuming white bg) + fixExportColors = CnfThawBool(true, "FixExportColors"); + // Draw back faces of triangles (when mesh is leaky/self-intersecting) + drawBackFaces = CnfThawBool(true, "DrawBackFaces"); + // Check that contours are closed and not self-intersecting + checkClosedContour = CnfThawBool(true, "CheckClosedContour"); + // Export shaded triangles in a 2d view + exportShadedTriangles = CnfThawBool(true, "ExportShadedTriangles"); + // Export pwl curves (instead of exact) always + exportPwlCurves = CnfThawBool(false, "ExportPwlCurves"); + // Background color on-screen + backgroundColor = CnfThawColor(RGBi(0, 0, 0), "BackgroundColor"); + // Whether export canvas size is fixed or derived from bbox + exportCanvasSizeAuto = CnfThawBool(true, "ExportCanvasSizeAuto"); + // Margins for automatic canvas size + exportMargin.left = CnfThawFloat(5.0f, "ExportMargin_Left"); + exportMargin.right = CnfThawFloat(5.0f, "ExportMargin_Right"); + exportMargin.bottom = CnfThawFloat(5.0f, "ExportMargin_Bottom"); + exportMargin.top = CnfThawFloat(5.0f, "ExportMargin_Top"); + // Dimensions for fixed canvas size + exportCanvas.width = CnfThawFloat(100.0f, "ExportCanvas_Width"); + exportCanvas.height = CnfThawFloat(100.0f, "ExportCanvas_Height"); + exportCanvas.dx = CnfThawFloat( 5.0f, "ExportCanvas_Dx"); + exportCanvas.dy = CnfThawFloat( 5.0f, "ExportCanvas_Dy"); + // Extra parameters when exporting G code + gCode.depth = CnfThawFloat(10.0f, "GCode_Depth"); + gCode.passes = CnfThawInt(1, "GCode_Passes"); + gCode.feed = CnfThawFloat(10.0f, "GCode_Feed"); + gCode.plungeFeed = CnfThawFloat(10.0f, "GCode_PlungeFeed"); + // Show toolbar in the graphics window + showToolbar = CnfThawBool(true, "ShowToolbar"); + // Recent files menus + for(i = 0; i < MAX_RECENT; i++) { + RecentFile[i] = CnfThawString("", "RecentFile_" + std::to_string(i)); + } + RefreshRecentMenus(); + // Autosave timer + autosaveInterval = CnfThawInt(5, "AutosaveInterval"); + + // The default styles (colors, line widths, etc.) are also stored in the + // configuration file, but we will automatically load those as we need + // them. + + SetAutosaveTimerFor(autosaveInterval); + + NewFile(); + AfterNewFile(); +} + +bool SolveSpaceUI::LoadAutosaveFor(const std::string &filename) { + std::string autosaveFile = filename + AUTOSAVE_SUFFIX; + + FILE *f = ssfopen(autosaveFile, "rb"); + if(!f) + return false; + fclose(f); + + if(LoadAutosaveYesNo() == DIALOG_YES) { + unsaved = true; + return LoadFromFile(autosaveFile); + } + + return false; +} + +bool SolveSpaceUI::OpenFile(const std::string &filename) { + bool autosaveLoaded = LoadAutosaveFor(filename); + bool fileLoaded = autosaveLoaded || LoadFromFile(filename); + if(fileLoaded) + saveFile = filename; + bool success = fileLoaded && ReloadAllImported(/*canCancel=*/true); + if(success) { + AddToRecentList(filename); + } else { + saveFile = ""; + NewFile(); + } + AfterNewFile(); + unsaved = autosaveLoaded; + return success; +} + +void SolveSpaceUI::Exit(void) { + // Recent files + for(int i = 0; i < MAX_RECENT; i++) + CnfFreezeString(RecentFile[i], "RecentFile_" + std::to_string(i)); + // Model colors + for(int i = 0; i < MODEL_COLORS; i++) + CnfFreezeColor(modelColor[i], "ModelColor_" + std::to_string(i)); + // Light intensities + CnfFreezeFloat((float)lightIntensity[0], "LightIntensity_0"); + CnfFreezeFloat((float)lightIntensity[1], "LightIntensity_1"); + // Light directions + CnfFreezeFloat((float)lightDir[0].x, "LightDir_0_Right"); + CnfFreezeFloat((float)lightDir[0].y, "LightDir_0_Up"); + CnfFreezeFloat((float)lightDir[0].z, "LightDir_0_Forward"); + CnfFreezeFloat((float)lightDir[1].x, "LightDir_1_Right"); + CnfFreezeFloat((float)lightDir[1].y, "LightDir_1_Up"); + CnfFreezeFloat((float)lightDir[1].z, "LightDir_1_Forward"); + // Chord tolerance + CnfFreezeFloat((float)chordTol, "ChordTolerancePct"); + // Max pwl segments to generate + CnfFreezeInt((uint32_t)maxSegments, "MaxSegments"); + // Export Chord tolerance + CnfFreezeFloat((float)exportChordTol, "ExportChordTolerance"); + // Export Max pwl segments to generate + CnfFreezeInt((uint32_t)exportMaxSegments, "ExportMaxSegments"); + // View units + CnfFreezeInt((uint32_t)viewUnits, "ViewUnits"); + // Number of digits after the decimal point + CnfFreezeInt((uint32_t)afterDecimalMm, "AfterDecimalMm"); + CnfFreezeInt((uint32_t)afterDecimalInch, "AfterDecimalInch"); + // Camera tangent (determines perspective) + CnfFreezeFloat((float)cameraTangent, "CameraTangent"); + // Grid spacing + CnfFreezeFloat(gridSpacing, "GridSpacing"); + // Export scale + CnfFreezeFloat(exportScale, "ExportScale"); + // Export offset (cutter radius comp) + CnfFreezeFloat(exportOffset, "ExportOffset"); + // Rewrite exported colors close to white into black (assuming white bg) + CnfFreezeBool(fixExportColors, "FixExportColors"); + // Draw back faces of triangles (when mesh is leaky/self-intersecting) + CnfFreezeBool(drawBackFaces, "DrawBackFaces"); + // Check that contours are closed and not self-intersecting + CnfFreezeBool(checkClosedContour, "CheckClosedContour"); + // Export shaded triangles in a 2d view + CnfFreezeBool(exportShadedTriangles, "ExportShadedTriangles"); + // Export pwl curves (instead of exact) always + CnfFreezeBool(exportPwlCurves, "ExportPwlCurves"); + // Background color on-screen + CnfFreezeColor(backgroundColor, "BackgroundColor"); + // Whether export canvas size is fixed or derived from bbox + CnfFreezeBool(exportCanvasSizeAuto, "ExportCanvasSizeAuto"); + // Margins for automatic canvas size + CnfFreezeFloat(exportMargin.left, "ExportMargin_Left"); + CnfFreezeFloat(exportMargin.right, "ExportMargin_Right"); + CnfFreezeFloat(exportMargin.bottom, "ExportMargin_Bottom"); + CnfFreezeFloat(exportMargin.top, "ExportMargin_Top"); + // Dimensions for fixed canvas size + CnfFreezeFloat(exportCanvas.width, "ExportCanvas_Width"); + CnfFreezeFloat(exportCanvas.height, "ExportCanvas_Height"); + CnfFreezeFloat(exportCanvas.dx, "ExportCanvas_Dx"); + CnfFreezeFloat(exportCanvas.dy, "ExportCanvas_Dy"); + // Extra parameters when exporting G code + CnfFreezeFloat(gCode.depth, "GCode_Depth"); + CnfFreezeInt(gCode.passes, "GCode_Passes"); + CnfFreezeFloat(gCode.feed, "GCode_Feed"); + CnfFreezeFloat(gCode.plungeFeed, "GCode_PlungeFeed"); + // Show toolbar in the graphics window + CnfFreezeBool(showToolbar, "ShowToolbar"); + // Autosave timer + CnfFreezeInt(autosaveInterval, "AutosaveInterval"); + + // And the default styles, colors and line widths and such. + Style::FreezeDefaultStyles(); + + ExitNow(); +} + +void SolveSpaceUI::ScheduleGenerateAll() { + if(!later.scheduled) ScheduleLater(); + later.scheduled = true; + later.generateAll = true; +} + +void SolveSpaceUI::ScheduleShowTW() { + if(!later.scheduled) ScheduleLater(); + later.scheduled = true; + later.showTW = true; +} + +void SolveSpaceUI::DoLater(void) { + if(later.generateAll) GenerateAll(); + if(later.showTW) TW.Show(); + later = {}; +} + +double SolveSpaceUI::MmPerUnit(void) { + if(viewUnits == UNIT_INCHES) { + return 25.4; + } else { + return 1.0; + } +} +const char *SolveSpaceUI::UnitName(void) { + if(viewUnits == UNIT_INCHES) { + return "inch"; + } else { + return "mm"; + } +} +std::string SolveSpaceUI::MmToString(double v) { + if(viewUnits == UNIT_INCHES) { + return ssprintf("%.*f", afterDecimalInch, v/25.4); + } else { + return ssprintf("%.*f", afterDecimalMm, v); + } +} +double SolveSpaceUI::ExprToMm(Expr *e) { + return (e->Eval()) * MmPerUnit(); +} +double SolveSpaceUI::StringToMm(const std::string &str) { + return std::stod(str) * MmPerUnit(); +} +double SolveSpaceUI::ChordTolMm(void) { + if(exportMode) return ExportChordTolMm(); + return chordTolCalculated; +} +double SolveSpaceUI::ExportChordTolMm(void) { + return exportChordTol / exportScale; +} +int SolveSpaceUI::GetMaxSegments(void) { + if(exportMode) return exportMaxSegments; + return maxSegments; +} +int SolveSpaceUI::UnitDigitsAfterDecimal(void) { + return (viewUnits == UNIT_INCHES) ? afterDecimalInch : afterDecimalMm; +} +void SolveSpaceUI::SetUnitDigitsAfterDecimal(int v) { + if(viewUnits == UNIT_INCHES) { + afterDecimalInch = v; + } else { + afterDecimalMm = v; + } +} + +double SolveSpaceUI::CameraTangent(void) { + if(!usePerspectiveProj) { + return 0; + } else { + return cameraTangent; + } +} + +void SolveSpaceUI::AfterNewFile(void) { + // Clear out the traced point, which is no longer valid + traced.point = Entity::NO_ENTITY; + traced.path.l.Clear(); + // and the naked edges + nakedEdges.Clear(); + + // Quit export mode + justExportedInfo.draw = false; + exportMode = false; + + // GenerateAll() expects the view to be valid, because it uses that to + // fill in default values for extrusion depths etc. (which won't matter + // here, but just don't let it work on garbage) + SS.GW.offset = Vector::From(0, 0, 0); + SS.GW.projRight = Vector::From(1, 0, 0); + SS.GW.projUp = Vector::From(0, 1, 0); + + GenerateAll(GENERATE_REGEN); + + TW.Init(); + GW.Init(); + + unsaved = false; + + int w, h; + GetGraphicsWindowSize(&w, &h); + GW.width = w; + GW.height = h; + + // The triangles haven't been generated yet, but zoom to fit the entities + // roughly in the window, since that sets the mesh tolerance. Consider + // invisible entities, so we still get something reasonable if the only + // thing visible is the not-yet-generated surfaces. + GW.ZoomToFit(true); + + GenerateAll(GENERATE_ALL); + SS.ScheduleShowTW(); + // Then zoom to fit again, to fit the triangles + GW.ZoomToFit(false); + + // Create all the default styles; they'll get created on the fly anyways, + // but can't hurt to do it now. + Style::CreateAllDefaultStyles(); + + UpdateWindowTitle(); +} + +void SolveSpaceUI::RemoveFromRecentList(const std::string &filename) { + int src, dest; + dest = 0; + for(src = 0; src < MAX_RECENT; src++) { + if(filename != RecentFile[src]) { + if(src != dest) RecentFile[dest] = RecentFile[src]; + dest++; + } + } + while(dest < MAX_RECENT) RecentFile[dest++].clear(); + RefreshRecentMenus(); +} +void SolveSpaceUI::AddToRecentList(const std::string &filename) { + RemoveFromRecentList(filename); + + int src; + for(src = MAX_RECENT - 2; src >= 0; src--) { + RecentFile[src+1] = RecentFile[src]; + } + RecentFile[0] = filename; + RefreshRecentMenus(); +} + +bool SolveSpaceUI::GetFilenameAndSave(bool saveAs) { + std::string prevSaveFile = saveFile; + + if(saveAs || saveFile.empty()) { + if(!GetSaveFile(&saveFile, "", SlvsFileFilter)) return false; + // need to get new filename directly into saveFile, since that + // determines linkFileRel path + } + + if(SaveToFile(saveFile)) { + AddToRecentList(saveFile); + RemoveAutosave(); + unsaved = false; + return true; + } else { + // don't store an invalid save filename + saveFile = prevSaveFile; + return false; + } +} + +bool SolveSpaceUI::Autosave() +{ + SetAutosaveTimerFor(autosaveInterval); + + if(!saveFile.empty() && unsaved) + return SaveToFile(saveFile + AUTOSAVE_SUFFIX); + + return false; +} + +void SolveSpaceUI::RemoveAutosave() +{ + std::string autosaveFile = saveFile + AUTOSAVE_SUFFIX; + ssremove(autosaveFile); +} + +bool SolveSpaceUI::OkayToStartNewFile(void) { + if(!unsaved) return true; + + switch(SaveFileYesNoCancel()) { + case DIALOG_YES: + return GetFilenameAndSave(false); + + case DIALOG_NO: + RemoveAutosave(); + return true; + + case DIALOG_CANCEL: + return false; + + default: oops(); break; + } +} + +void SolveSpaceUI::UpdateWindowTitle(void) { + SetCurrentFilename(saveFile); +} + +static std::string Extension(const std::string &filename) { + int dot = filename.rfind('.'); + if(dot >= 0) { + std::string ext = filename.substr(dot + 1, filename.length()); + std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); + return ext; + } + return ""; +} + +void SolveSpaceUI::MenuFile(int id) { + if(id >= RECENT_OPEN && id < (RECENT_OPEN+MAX_RECENT)) { + if(!SS.OkayToStartNewFile()) return; + + std::string newFile = RecentFile[id - RECENT_OPEN]; + SS.OpenFile(newFile); + return; + } + + switch(id) { + case GraphicsWindow::MNU_NEW: + if(!SS.OkayToStartNewFile()) break; + + SS.saveFile = ""; + SS.NewFile(); + SS.AfterNewFile(); + break; + + case GraphicsWindow::MNU_OPEN: { + if(!SS.OkayToStartNewFile()) break; + + std::string newFile; + if(GetOpenFile(&newFile, "", SlvsFileFilter)) { + SS.OpenFile(newFile); + } + break; + } + + case GraphicsWindow::MNU_SAVE: + SS.GetFilenameAndSave(false); + break; + + case GraphicsWindow::MNU_SAVE_AS: + SS.GetFilenameAndSave(true); + break; + + case GraphicsWindow::MNU_EXPORT_PNG: { + std::string exportFile; + if(!GetSaveFile(&exportFile, "", PngFileFilter)) break; + SS.ExportAsPngTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_VIEW: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "ViewExportFormat"), + VectorFileFilter)) break; + CnfFreezeString(Extension(exportFile), "ViewExportFormat"); + + // If the user is exporting something where it would be + // inappropriate to include the constraints, then warn. + if(SS.GW.showConstraints && + (FilenameHasExtension(exportFile, ".txt") || + fabs(SS.exportOffset) > LENGTH_EPS)) + { + Message("Constraints are currently shown, and will be exported " + "in the toolpath. This is probably not what you want; " + "hide them by clicking the link at the top of the " + "text window."); + } + + SS.ExportViewOrWireframeTo(exportFile, false); + break; + } + + case GraphicsWindow::MNU_EXPORT_WIREFRAME: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "WireframeExportFormat"), + Vector3dFileFilter)) break; + CnfFreezeString(Extension(exportFile), "WireframeExportFormat"); + + SS.ExportViewOrWireframeTo(exportFile, true); + break; + } + + case GraphicsWindow::MNU_EXPORT_SECTION: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "SectionExportFormat"), + VectorFileFilter)) break; + CnfFreezeString(Extension(exportFile), "SectionExportFormat"); + + SS.ExportSectionTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_MESH: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "MeshExportFormat"), + MeshFileFilter)) break; + CnfFreezeString(Extension(exportFile), "MeshExportFormat"); + + SS.ExportMeshTo(exportFile); + break; + } + + case GraphicsWindow::MNU_EXPORT_SURFACES: { + std::string exportFile; + if(!GetSaveFile(&exportFile, CnfThawString("", "SurfacesExportFormat"), + SurfaceFileFilter)) break; + CnfFreezeString(Extension(exportFile), "SurfacesExportFormat"); + + StepFileWriter sfw = {}; + sfw.ExportSurfacesTo(exportFile); + break; + } + + case GraphicsWindow::MNU_IMPORT: { + std::string importFile; + if(!GetOpenFile(&importFile, CnfThawString("", "ImportFormat"), + ImportableFileFilter)) break; + CnfFreezeString(Extension(importFile), "ImportFormat"); + + if(Extension(importFile) == "dxf") { + ImportDxf(importFile); + } else if(Extension(importFile) == "dwg") { + ImportDwg(importFile); + } else { + Error("Can't identify file type from file extension of " + "filename '%s'; try .dxf or .dwg.", importFile.c_str()); + } + + SS.GenerateAll(SolveSpaceUI::GENERATE_UNTIL_ACTIVE); + SS.ScheduleShowTW(); + break; + } + + case GraphicsWindow::MNU_EXIT: + if(!SS.OkayToStartNewFile()) break; + SS.Exit(); + break; + + default: oops(); + } + + SS.UpdateWindowTitle(); +} + +void SolveSpaceUI::MenuAnalyze(int id) { + SS.GW.GroupSelection(); +#define gs (SS.GW.gs) + + switch(id) { + case GraphicsWindow::MNU_STEP_DIM: + if(gs.constraints == 1 && gs.n == 0) { + Constraint *c = SK.GetConstraint(gs.constraint[0]); + if(c->HasLabel() && !c->reference) { + SS.TW.shown.dimFinish = c->valA; + SS.TW.shown.dimSteps = 10; + SS.TW.shown.dimIsDistance = + (c->type != Constraint::ANGLE) && + (c->type != Constraint::LENGTH_RATIO) && + (c->type != Constraint::LENGTH_DIFFERENCE); + SS.TW.shown.constraint = c->h; + SS.TW.shown.screen = TextWindow::SCREEN_STEP_DIMENSION; + + // The step params are specified in the text window, + // so force that to be shown. + SS.GW.ForceTextWindowShown(); + + SS.ScheduleShowTW(); + SS.GW.ClearSelection(); + } else { + Error("Constraint must have a label, and must not be " + "a reference dimension."); + } + } else { + Error("Bad selection for step dimension; select a constraint."); + } + break; + + case GraphicsWindow::MNU_NAKED_EDGES: { + SS.nakedEdges.Clear(); + + Group *g = SK.GetGroup(SS.GW.activeGroup); + SMesh *m = &(g->displayMesh); + SKdNode *root = SKdNode::From(m); + bool inters, leaks; + root->MakeCertainEdgesInto(&(SS.nakedEdges), + SKdNode::NAKED_OR_SELF_INTER_EDGES, true, &inters, &leaks); + + InvalidateGraphics(); + + const char *intersMsg = inters ? + "The mesh is self-intersecting (NOT okay, invalid)." : + "The mesh is not self-intersecting (okay, valid)."; + const char *leaksMsg = leaks ? + "The mesh has naked edges (NOT okay, invalid)." : + "The mesh is watertight (okay, valid)."; + + std::string cntMsg = ssprintf("\n\nThe model contains %d triangles, from " + "%d surfaces.", g->displayMesh.l.n, g->runningShell.surface.n); + + if(SS.nakedEdges.l.n == 0) { + Message("%s\n\n%s\n\nZero problematic edges, good.%s", + intersMsg, leaksMsg, cntMsg.c_str()); + } else { + Error("%s\n\n%s\n\n%d problematic edges, bad.%s", + intersMsg, leaksMsg, SS.nakedEdges.l.n, cntMsg.c_str()); + } + break; + } + + case GraphicsWindow::MNU_INTERFERENCE: { + SS.nakedEdges.Clear(); + + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + SKdNode *root = SKdNode::From(m); + bool inters, leaks; + root->MakeCertainEdgesInto(&(SS.nakedEdges), + SKdNode::SELF_INTER_EDGES, false, &inters, &leaks); + + InvalidateGraphics(); + + if(inters) { + Error("%d edges interfere with other triangles, bad.", + SS.nakedEdges.l.n); + } else { + Message("The assembly does not interfere, good."); + } + break; + } + + case GraphicsWindow::MNU_VOLUME: { + SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); + + double vol = 0; + int i; + for(i = 0; i < m->l.n; i++) { + STriangle tr = m->l.elem[i]; + + // Translate to place vertex A at (x, y, 0) + Vector trans = Vector::From(tr.a.x, tr.a.y, 0); + tr.a = (tr.a).Minus(trans); + tr.b = (tr.b).Minus(trans); + tr.c = (tr.c).Minus(trans); + + // Rotate to place vertex B on the y-axis. Depending on + // whether the triangle is CW or CCW, C is either to the + // right or to the left of the y-axis. This handles the + // sign of our normal. + Vector u = Vector::From(-tr.b.y, tr.b.x, 0); + u = u.WithMagnitude(1); + Vector v = Vector::From(tr.b.x, tr.b.y, 0); + v = v.WithMagnitude(1); + Vector n = Vector::From(0, 0, 1); + + tr.a = (tr.a).DotInToCsys(u, v, n); + tr.b = (tr.b).DotInToCsys(u, v, n); + tr.c = (tr.c).DotInToCsys(u, v, n); + + n = tr.Normal().WithMagnitude(1); + + // Triangles on edge don't contribute + if(fabs(n.z) < LENGTH_EPS) continue; + + // The plane has equation p dot n = a dot n + double d = (tr.a).Dot(n); + // nx*x + ny*y + nz*z = d + // nz*z = d - nx*x - ny*y + double A = -n.x/n.z, B = -n.y/n.z, C = d/n.z; + + double mac = tr.c.y/tr.c.x, mbc = (tr.c.y - tr.b.y)/tr.c.x; + double xc = tr.c.x, yb = tr.b.y; + + // I asked Maple for + // int(int(A*x + B*y +C, y=mac*x..(mbc*x + yb)), x=0..xc); + double integral = + (1.0/3)*( + A*(mbc-mac)+ + (1.0/2)*B*(mbc*mbc-mac*mac) + )*(xc*xc*xc)+ + (1.0/2)*(A*yb+B*yb*mbc+C*(mbc-mac))*xc*xc+ + C*yb*xc+ + (1.0/2)*B*yb*yb*xc; + + vol += integral; + } + + std::string msg = ssprintf("The volume of the solid model is:\n\n"" %.3f %s^3", + vol / pow(SS.MmPerUnit(), 3), + SS.UnitName()); + + if(SS.viewUnits == SolveSpaceUI::UNIT_MM) { + msg += ssprintf("\n %.2f mL", vol/(10*10*10)); + } + msg += "\n\nCurved surfaces have been approximated as triangles.\n" + "This introduces error, typically of around 1%."; + Message("%s", msg.c_str()); + break; + } + + case GraphicsWindow::MNU_AREA: { + Group *g = SK.GetGroup(SS.GW.activeGroup); + if(g->polyError.how != Group::POLY_GOOD) { + Error("This group does not contain a correctly-formed " + "2d closed area. It is open, not coplanar, or self-" + "intersecting."); + break; + } + SEdgeList sel = {}; + g->polyLoops.MakeEdgesInto(&sel); + SPolygon sp = {}; + sel.AssemblePolygon(&sp, NULL, true); + sp.normal = sp.ComputeNormal(); + sp.FixContourDirections(); + double area = sp.SignedArea(); + double scale = SS.MmPerUnit(); + Message("The area of the region sketched in this group is:\n\n" + " %.3f %s^2\n\n" + "Curves have been approximated as piecewise linear.\n" + "This introduces error, typically of around 1%%.", + area / (scale*scale), + SS.UnitName()); + sel.Clear(); + sp.Clear(); + break; + } + + case GraphicsWindow::MNU_SHOW_DOF: + // This works like a normal solve, except that it calculates + // which variables are free/bound at the same time. + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL, true); + break; + + case GraphicsWindow::MNU_TRACE_PT: + if(gs.points == 1 && gs.n == 1) { + SS.traced.point = gs.point[0]; + SS.GW.ClearSelection(); + } else { + Error("Bad selection for trace; select a single point."); + } + break; + + case GraphicsWindow::MNU_STOP_TRACING: { + std::string exportFile; + if(GetSaveFile(&exportFile, "", CsvFileFilter)) { + FILE *f = ssfopen(exportFile, "wb"); + if(f) { + int i; + SContour *sc = &(SS.traced.path); + for(i = 0; i < sc->l.n; i++) { + Vector p = sc->l.elem[i].p; + double s = SS.exportScale; + fprintf(f, "%.10f, %.10f, %.10f\r\n", + p.x/s, p.y/s, p.z/s); + } + fclose(f); + } else { + Error("Couldn't write to '%s'", exportFile.c_str()); + } + } + // Clear the trace, and stop tracing + SS.traced.point = Entity::NO_ENTITY; + SS.traced.path.l.Clear(); + InvalidateGraphics(); + break; + } + + default: oops(); + } +} + +void SolveSpaceUI::MenuHelp(int id) { + switch(id) { + case GraphicsWindow::MNU_WEBSITE: + OpenWebsite("http://solvespace.com/helpmenu"); + break; + + case GraphicsWindow::MNU_ABOUT: + Message( +"This is SolveSpace version " PACKAGE_VERSION ".\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-2016 Jonathan Westhues and other authors.\n" +); + break; + + default: oops(); + } +} + +void SolveSpaceUI::Clear(void) { + sys.Clear(); + for(int i = 0; i < MAX_UNDO; i++) { + if(i < undo.cnt) undo.d[i].Clear(); + if(i < redo.cnt) redo.d[i].Clear(); + } +} + +void Sketch::Clear(void) { + group.Clear(); + groupOrder.Clear(); + constraint.Clear(); + request.Clear(); + style.Clear(); + entity.Clear(); + param.Clear(); +} + +BBox Sketch::CalculateEntityBBox(bool includingInvisible) { + BBox box = {}; + bool first = true; + for(int i = 0; i < entity.n; i++) { + Entity *e = (Entity *)&entity.elem[i]; + if(!(e->IsVisible() || includingInvisible)) continue; + + Vector point; + double r = 0.0; + if(e->IsPoint()) { + point = e->PointGetNum(); + } else { + switch(e->type) { + case Entity::ARC_OF_CIRCLE: + case Entity::CIRCLE: + r = e->CircleGetRadiusNum(); + point = GetEntity(e->point[0])->PointGetNum(); + break; + default: continue; + } + } + + if(first) { + box.minp = point; + box.maxp = point; + box.Include(point, r); + first = false; + } else { + box.Include(point, r); + } + } + return box; +} + +Group *Sketch::GetRunningMeshGroupFor(hGroup h) { + Group *g = GetGroup(h); + while(g != NULL) { + if(g->IsMeshGroup()) { + return g; + } + g = g->PreviousGroup(); + } + return NULL; +} diff --git a/src/solvespace.h b/src/solvespace.h new file mode 100644 index 0000000..6cb59c7 --- /dev/null +++ b/src/solvespace.h @@ -0,0 +1,971 @@ +//----------------------------------------------------------------------------- +// All declarations not grouped specially elsewhere. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SOLVESPACE_H +#define __SOLVESPACE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WIN32 +# include // required by GL headers +#endif +#ifdef __APPLE__ +# include // for strcasecmp in file.cpp +# include +# include +#else +# include +# include +#endif + +// We declare these in advance instead of simply using FT_Library +// (defined as typedef FT_LibraryRec_* FT_Library) because including +// freetype.h invokes indescribable horrors and we would like to avoid +// doing that every time we include solvespace.h. +struct FT_LibraryRec_; +struct FT_FaceRec_; + +// The few floating-point equality comparisons in SolveSpace have been +// carefully considered, so we disable the -Wfloat-equal warning for them +#ifdef __clang__ +# define EXACT(expr) \ + (_Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ + (expr) \ + _Pragma("clang diagnostic pop")) +#else +# define EXACT(expr) (expr) +#endif + +// Debugging functions +#ifdef NDEBUG +#define oops() do { dbp("oops at line %d, file %s\n", __LINE__, __FILE__); \ + exit(-1); } while(0) +#else +#define oops() do { dbp("oops at line %d, file %s\n", __LINE__, __FILE__); \ + abort(); } while(0) +#endif + +#ifndef isnan +# define isnan(x) (((x) != (x)) || (x > 1e11) || (x < -1e11)) +#endif + +namespace SolveSpace { + +using std::min; +using std::max; +using std::swap; + +#if defined(__GNUC__) +__attribute__((__format__ (__printf__, 1, 2))) +#endif +std::string ssprintf(const char *fmt, ...); + +inline int WRAP(int v, int n) { + // Clamp it to the range [0, n) + while(v >= n) v -= n; + while(v < 0) v += n; + return v; +} +inline double WRAP_NOT_0(double v, double n) { + // Clamp it to the range (0, n] + while(v > n) v -= n; + while(v <= 0) v += n; + return v; +} +inline double WRAP_SYMMETRIC(double v, double n) { + // Clamp it to the range (-n/2, n/2] + while(v > n/2) v -= n; + while(v <= -n/2) v += n; + return v; +} + +// Why is this faster than the library function? +inline double ffabs(double v) { return (v > 0) ? v : (-v); } + +#define CO(v) (v).x, (v).y, (v).z + +#define ANGLE_COS_EPS (1e-6) +#define LENGTH_EPS (1e-6) +#define VERY_POSITIVE (1e10) +#define VERY_NEGATIVE (-1e10) + +#define isforname(c) (isalnum(c) || (c) == '_' || (c) == '-' || (c) == '#') + +#if defined(WIN32) +std::string Narrow(const wchar_t *s); +std::wstring Widen(const char *s); +std::string Narrow(const std::wstring &s); +std::wstring Widen(const std::string &s); +#endif + +inline double Random(double vmax) { + return (vmax*rand()) / RAND_MAX; +} + +class Expr; +class ExprVector; +class ExprQuaternion; +class RgbaColor; + +//================ +// From the platform-specific code. +#if defined(WIN32) +#define PATH_SEP "\\" +#else +#define PATH_SEP "/" +#endif + +FILE *ssfopen(const std::string &filename, const char *mode); +std::fstream ssfstream(const std::string &filename, std::ios_base::openmode mode); +void ssremove(const std::string &filename); + +#define MAX_RECENT 8 +#define RECENT_OPEN (0xf000) +#define RECENT_LINK (0xf100) +extern std::string RecentFile[MAX_RECENT]; +void RefreshRecentMenus(void); + +enum DialogChoice { DIALOG_YES = 1, DIALOG_NO = -1, DIALOG_CANCEL = 0 }; +DialogChoice SaveFileYesNoCancel(void); +DialogChoice LoadAutosaveYesNo(void); +DialogChoice LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel); + +#define AUTOSAVE_SUFFIX "~" + +struct FileFilter { + const char *name; + const char *patterns[3]; +}; + +// SolveSpace native file format +const FileFilter SlvsFileFilter[] = { + { "SolveSpace models", { "slvs" } }, + { NULL, {} } +}; +// PNG format bitmap +const FileFilter PngFileFilter[] = { + { "PNG", { "png" } }, + { NULL, {} } +}; +// Triangle mesh +const FileFilter MeshFileFilter[] = { + { "STL mesh", { "stl" } }, + { "Wavefront OBJ mesh", { "obj" } }, + { "Three.js-compatible mesh, with viewer", { "html" } }, + { "Three.js-compatible mesh, mesh only", { "js" } }, + { NULL, {} } +}; +// NURBS surfaces +const FileFilter SurfaceFileFilter[] = { + { "STEP file", { "step", "stp" } }, + { NULL, {} } +}; +// 2d vector (lines and curves) format +const FileFilter VectorFileFilter[] = { + { "PDF file", { "pdf" } }, + { "Encapsulated PostScript", { "eps", "ps" } }, + { "Scalable Vector Graphics", { "svg" } }, + { "STEP file", { "step", "stp" } }, + { "DXF file (AutoCAD 2007)", { "dxf" } }, + { "HPGL file", { "plt", "hpgl" } }, + { "G Code", { "ngc", "txt" } }, + { NULL, {} } +}; +// 3d vector (wireframe lines and curves) format +const FileFilter Vector3dFileFilter[] = { + { "STEP file", { "step", "stp" } }, + { "DXF file (AutoCAD 2007)", { "dxf" } }, + { NULL, {} } +}; +// All Importable formats +const FileFilter ImportableFileFilter[] = { + { "AutoCAD DXF and DWG files", { "dxf", "dwg" } }, + { NULL, {} } +}; +// Comma-separated value, like a spreadsheet would use +const FileFilter CsvFileFilter[] = { + { "CSV", { "csv" } }, + { NULL, {} } +}; + +bool GetSaveFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]); +bool GetOpenFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]); +std::vector GetFontFiles(); + +void OpenWebsite(const char *url); + +void CheckMenuById(int id, bool checked); +void RadioMenuById(int id, bool selected); +void EnableMenuById(int id, bool enabled); + +void ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str); +void HideGraphicsEditControl(void); +bool GraphicsEditControlIsVisible(void); +void ShowTextEditControl(int x, int y, const std::string &str); +void HideTextEditControl(void); +bool TextEditControlIsVisible(void); +void MoveTextScrollbarTo(int pos, int maxPos, int page); + +#define CONTEXT_SUBMENU (-1) +#define CONTEXT_SEPARATOR (-2) +void AddContextMenuItem(const char *legend, int id); +void CreateContextSubmenu(void); +int ShowContextMenu(void); + +void ToggleMenuBar(void); +bool MenuBarIsVisible(void); +void ShowTextWindow(bool visible); +void InvalidateText(void); +void InvalidateGraphics(void); +void PaintGraphics(void); +void ToggleFullScreen(void); +bool FullScreenIsActive(void); +void GetGraphicsWindowSize(int *w, int *h); +void GetTextWindowSize(int *w, int *h); +int64_t GetMilliseconds(void); +int64_t GetUnixTime(void); + +void dbp(const char *str, ...); +#define DBPTRI(tri) \ + dbp("tri: (%.3f %.3f %.3f) (%.3f %.3f %.3f) (%.3f %.3f %.3f)", \ + CO((tri).a), CO((tri).b), CO((tri).c)) + +void SetCurrentFilename(const std::string &filename); +void SetMousePointerToHand(bool yes); +void DoMessageBox(const char *str, int rows, int cols, bool error); +void SetTimerFor(int milliseconds); +void SetAutosaveTimerFor(int minutes); +void ScheduleLater(); +void ExitNow(void); + +void CnfFreezeInt(uint32_t val, const std::string &name); +void CnfFreezeFloat(float val, const std::string &name); +void CnfFreezeString(const std::string &val, const std::string &name); +std::string CnfThawString(const std::string &val, const std::string &name); +uint32_t CnfThawInt(uint32_t val, const std::string &name); +float CnfThawFloat(float val, const std::string &name); + +void *AllocTemporary(size_t n); +void FreeTemporary(void *p); +void FreeAllTemporary(void); +void *MemAlloc(size_t n); +void MemFree(void *p); +void InitHeaps(void); +void vl(void); // debug function to validate heaps + +// End of platform-specific functions +//================ + +class Group; +class SSurface; +#include "dsc.h" +#include "polygon.h" +#include "srf/surface.h" + +class Entity; +class hEntity; +class Param; +class hParam; +typedef IdList EntityList; +typedef IdList ParamList; + +#include "sketch.h" +#include "ui.h" +#include "expr.h" + + +// Utility functions that are provided in the platform-independent code. +class utf8_iterator : std::iterator { + const char *p, *n; +public: + utf8_iterator(const char *p) : p(p), n(NULL) {} + bool operator==(const utf8_iterator &i) const { return p==i.p; } + bool operator!=(const utf8_iterator &i) const { return p!=i.p; } + ptrdiff_t operator- (const utf8_iterator &i) const { return p -i.p; } + utf8_iterator& operator++() { **this; p=n; n=NULL; return *this; } + utf8_iterator operator++(int) { utf8_iterator t(*this); operator++(); return t; } + char32_t operator*(); +}; +class ReadUTF8 { + const std::string &str; +public: + ReadUTF8(const std::string &str) : str(str) {} + utf8_iterator begin() const { return utf8_iterator(&str[0]); } + utf8_iterator end() const { return utf8_iterator(&str[str.length()]); } +}; + +void ssglLineWidth(GLfloat width); +void ssglVertex3v(Vector u); +void ssglAxisAlignedQuad(double l, double r, double t, double b, bool lone = true); +void ssglAxisAlignedLineLoop(double l, double r, double t, double b); +#ifdef WIN32 +# define SSGL_CALLBACK __stdcall +#else +# define SSGL_CALLBACK +#endif +extern "C" { typedef void SSGL_CALLBACK ssglCallbackFptr(void); } +void ssglTesselatePolygon(GLUtesselator *gt, SPolygon *p); +void ssglFillPolygon(SPolygon *p); +void ssglFillMesh(bool useSpecColor, RgbaColor color, + SMesh *m, uint32_t h, uint32_t s1, uint32_t s2); +void ssglDebugPolygon(SPolygon *p); +void ssglDrawEdges(SEdgeList *l, bool endpointsToo, hStyle hs); +void ssglDrawOutlines(SOutlineList *l, Vector projDir, hStyle hs); +void ssglDebugMesh(SMesh *m); +void ssglMarkPolygonNormal(SPolygon *p); +typedef void ssglLineFn(void *data, Vector a, Vector b); +void ssglWriteText(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata); +void ssglWriteTextRefCenter(const std::string &str, double h, Vector t, Vector u, Vector v, + ssglLineFn *fn, void *fndata); +double ssglStrCapHeight(double h); +double ssglStrFontSize(double h); +double ssglStrWidth(const std::string &str, double h); +void ssglLockColorTo(RgbaColor rgb); +void ssglStippledLine(Vector a, Vector b, double width, + int stippleType, double stippleScale, bool maybeFat); +void ssglStippledLine(Vector a, Vector b, double width, + const char *stipplePattern, double stippleScale, bool maybeFat); +void ssglFatLine(Vector a, Vector b, double width); +void ssglUnlockColor(void); +void ssglColorRGB(RgbaColor rgb); +void ssglColorRGBa(RgbaColor rgb, double a); +void ssglDepthRangeOffset(int units); +void ssglDepthRangeLockToFront(bool yes); +void ssglDrawPixelsWithTexture(uint8_t *data, int w, int h); +void ssglInitializeBitmapFont(); +void ssglBitmapText(const std::string &str, Vector p); +void ssglBitmapCharQuad(char32_t chr, double x, double y); +int ssglBitmapCharWidth(char32_t chr); +#define TEXTURE_BACKGROUND_IMG 10 +#define TEXTURE_DRAW_PIXELS 20 +#define TEXTURE_COLOR_PICKER_2D 30 +#define TEXTURE_COLOR_PICKER_1D 40 +#define TEXTURE_BITMAP_FONT 50 + + +#define arraylen(x) (sizeof((x))/sizeof((x)[0])) +#define PI (3.1415926535897931) +void MakeMatrix(double *mat, double a11, double a12, double a13, double a14, + double a21, double a22, double a23, double a24, + double a31, double a32, double a33, double a34, + double a41, double a42, double a43, double a44); +std::string MakeAcceleratorLabel(int accel); +bool FilenameHasExtension(const std::string &str, const char *ext); +bool ReadFile(const std::string &filename, std::string *data); +bool WriteFile(const std::string &filename, const std::string &data); +void Message(const char *str, ...); +void Error(const char *str, ...); +void CnfFreezeBool(bool v, const std::string &name); +void CnfFreezeColor(RgbaColor v, const std::string &name); +bool CnfThawBool(bool v, const std::string &name); +RgbaColor CnfThawColor(RgbaColor v, const std::string &name); + +class System { +public: + enum { MAX_UNKNOWNS = 1024 }; + + EntityList entity; + ParamList param; + IdList eq; + + // A list of parameters that are being dragged; these are the ones that + // we should put as close as possible to their initial positions. + List dragged; + + enum { + // In general, the tag indicates the subsys that a variable/equation + // has been assigned to; these are exceptions for variables: + VAR_SUBSTITUTED = 10000, + VAR_DOF_TEST = 10001, + // and for equations: + EQ_SUBSTITUTED = 20000 + }; + + // The system Jacobian matrix + struct { + // The corresponding equation for each row + hEquation eq[MAX_UNKNOWNS]; + + // The corresponding parameter for each column + hParam param[MAX_UNKNOWNS]; + + // We're solving AX = B + int m, n; + struct { + Expr *sym[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double num[MAX_UNKNOWNS][MAX_UNKNOWNS]; + } A; + + double scale[MAX_UNKNOWNS]; + + // Some helpers for the least squares solve + double AAt[MAX_UNKNOWNS][MAX_UNKNOWNS]; + double Z[MAX_UNKNOWNS]; + + double X[MAX_UNKNOWNS]; + + struct { + Expr *sym[MAX_UNKNOWNS]; + double num[MAX_UNKNOWNS]; + } B; + } mat; + + static const double RANK_MAG_TOLERANCE, CONVERGE_TOLERANCE; + int CalculateRank(void); + bool TestRank(void); + static bool SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS], + double B[], int N); + bool SolveLeastSquares(void); + + bool WriteJacobian(int tag); + void EvalJacobian(void); + + void WriteEquationsExceptFor(hConstraint hc, Group *g); + void FindWhichToRemoveToFixJacobian(Group *g, List *bad); + void SolveBySubstitution(void); + + bool IsDragged(hParam p); + + bool NewtonSolve(int tag); + + enum { + SOLVED_OKAY = 0, + DIDNT_CONVERGE = 10, + REDUNDANT_OKAY = 11, + REDUNDANT_DIDNT_CONVERGE = 12, + TOO_MANY_UNKNOWNS = 20 + }; + int Solve(Group *g, int *dof, List *bad, + bool andFindBad, bool andFindFree); + + void Clear(void); +}; + +#include "ttf.h" + +class StepFileWriter { +public: + void ExportSurfacesTo(const std::string &filename); + void WriteHeader(void); + void WriteProductHeader(void); + int ExportCurve(SBezier *sb); + int ExportCurveLoop(SBezierLoop *loop, bool inner); + void ExportSurface(SSurface *ss, SBezierList *sbl); + void WriteWireframe(void); + void WriteFooter(void); + + List curves; + List advancedFaces; + FILE *f; + int id; +}; + +class VectorFileWriter { +protected: + Vector u, v, n, origin; + double cameraTan, scale; + +public: + FILE *f; + std::string filename; + Vector ptMin, ptMax; + + static double MmToPts(double mm); + + static VectorFileWriter *ForFile(const std::string &filename); + + ~VectorFileWriter(); + + void SetModelviewProjection(const Vector &u, const Vector &v, const Vector &n, + const Vector &origin, double cameraTan, double scale); + Vector Transform(Vector &pos) const; + + void OutputLinesAndMesh(SBezierLoopSetSet *sblss, SMesh *sm); + + void BezierAsPwl(SBezier *sb); + void BezierAsNonrationalCubic(SBezier *sb, int depth=0); + + virtual bool OutputConstraints(IdList *) { return false; } + virtual bool CanOutputMesh() const { return false; } + + virtual void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) = 0; + virtual void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs) = 0; + virtual void Bezier(SBezier *sb) = 0; + virtual void Triangle(STriangle *tr) = 0; + virtual void StartFile(void) = 0; + virtual void FinishAndCloseFile(void) = 0; + virtual bool HasCanvasSize(void) = 0; +}; +class DxfFileWriter : public VectorFileWriter { +public: + struct BezierPath { + std::vector beziers; + }; + + std::vector paths; + IdList *constraint; + + bool OutputConstraints(IdList *constraint); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } + bool NeedToOutput(Constraint *c); + + static const char *lineTypeName(int stippleType); + +}; +class EpsFileWriter : public VectorFileWriter { +public: + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class PdfFileWriter : public VectorFileWriter { +public: + uint32_t xref[10]; + uint32_t bodyStart; + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class SvgFileWriter : public VectorFileWriter { +public: + Vector prevPt; + void MaybeMoveTo(Vector s, Vector f); + + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return true; } + bool CanOutputMesh() const { return true; } +}; +class HpglFileWriter : public VectorFileWriter { +public: + static double MmToHpglUnits(double mm); + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; +class Step2dFileWriter : public VectorFileWriter { + StepFileWriter sfw; + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; +class GCodeFileWriter : public VectorFileWriter { +public: + SEdgeList sel; + void StartPath( RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void FinishPath(RgbaColor strokeRgb, double lineWidth, + bool filled, RgbaColor fillRgb, hStyle hs); + void Triangle(STriangle *tr); + void Bezier(SBezier *sb); + void StartFile(void); + void FinishAndCloseFile(void); + bool HasCanvasSize(void) { return false; } +}; + +#ifdef LIBRARY +# define ENTITY EntityBase +# define CONSTRAINT ConstraintBase +#else +# define ENTITY Entity +# define CONSTRAINT Constraint +#endif +class Sketch { +public: + // These are user-editable, and define the sketch. + IdList group; + List

groupOrder; + IdList constraint; + IdList request; + IdList style; + + // These are generated from the above. + IdList entity; + IdList param; + + inline CONSTRAINT *GetConstraint(hConstraint h) + { return constraint.FindById(h); } + inline ENTITY *GetEntity (hEntity h) { return entity. FindById(h); } + inline Param *GetParam (hParam h) { return param. FindById(h); } + inline Request *GetRequest(hRequest h) { return request.FindById(h); } + inline Group *GetGroup (hGroup h) { return group. FindById(h); } + // Styles are handled a bit differently. + + void Clear(void); + + BBox CalculateEntityBBox(bool includingInvisible); + Group *GetRunningMeshGroupFor(hGroup h); +}; +#undef ENTITY +#undef CONSTRAINT + +class SolveSpaceUI { +public: + TextWindow *pTW; + TextWindow &TW; + GraphicsWindow GW; + + // The state for undo/redo + typedef struct { + IdList group; + List
groupOrder; + IdList request; + IdList constraint; + IdList param; + IdList style; + hGroup activeGroup; + + void Clear(void) { + group.Clear(); + request.Clear(); + constraint.Clear(); + param.Clear(); + style.Clear(); + } + } UndoState; + enum { MAX_UNDO = 16 }; + typedef struct { + UndoState d[MAX_UNDO]; + int cnt; + int write; + } UndoStack; + UndoStack undo; + UndoStack redo; + void UndoEnableMenus(void); + void UndoRemember(void); + void UndoUndo(void); + void UndoRedo(void); + void PushFromCurrentOnto(UndoStack *uk); + void PopOntoCurrentFrom(UndoStack *uk); + void UndoClearState(UndoState *ut); + void UndoClearStack(UndoStack *uk); + + // Little bits of extra configuration state + enum { MODEL_COLORS = 8 }; + RgbaColor modelColor[MODEL_COLORS]; + Vector lightDir[2]; + double lightIntensity[2]; + double ambientIntensity; + double chordTol; + double chordTolCalculated; + int maxSegments; + double exportChordTol; + int exportMaxSegments; + double cameraTangent; + float gridSpacing; + float exportScale; + float exportOffset; + bool fixExportColors; + bool drawBackFaces; + bool checkClosedContour; + bool showToolbar; + RgbaColor backgroundColor; + bool exportShadedTriangles; + bool exportPwlCurves; + bool exportCanvasSizeAuto; + bool exportMode; + struct { + float left; + float right; + float bottom; + float top; + } exportMargin; + struct { + float width; + float height; + float dx; + float dy; + } exportCanvas; + struct { + float depth; + int passes; + float feed; + float plungeFeed; + } gCode; + + typedef enum { + UNIT_MM = 0, + UNIT_INCHES + } Unit; + Unit viewUnits; + int afterDecimalMm; + int afterDecimalInch; + int autosaveInterval; // in minutes + + std::string MmToString(double v); + double ExprToMm(Expr *e); + double StringToMm(const std::string &s); + const char *UnitName(void); + double MmPerUnit(void); + int UnitDigitsAfterDecimal(void); + void SetUnitDigitsAfterDecimal(int v); + double ChordTolMm(void); + double ExportChordTolMm(void); + int GetMaxSegments(void); + bool usePerspectiveProj; + double CameraTangent(void); + + // Some stuff relating to the tangent arcs created non-parametrically + // as special requests. + double tangentArcRadius; + bool tangentArcManual; + bool tangentArcDeleteOld; + + // The platform-dependent code calls this before entering the msg loop + void Init(void); + bool OpenFile(const std::string &filename); + void Exit(void); + + // File load/save routines, including the additional files that get + // loaded when we have link groups. + FILE *fh; + void AfterNewFile(void); + static void RemoveFromRecentList(const std::string &filename); + static void AddToRecentList(const std::string &filename); + std::string saveFile; + bool fileLoadError; + bool unsaved; + typedef struct { + char type; + const char *desc; + char fmt; + void *ptr; + } SaveTable; + static const SaveTable SAVED[]; + void SaveUsingTable(int type); + void LoadUsingTable(char *key, char *val); + struct { + Group g; + Request r; + Entity e; + Param p; + Constraint c; + Style s; + } sv; + static void MenuFile(int id); + bool Autosave(); + void RemoveAutosave(); + bool GetFilenameAndSave(bool saveAs); + bool OkayToStartNewFile(void); + hGroup CreateDefaultDrawingGroup(void); + void UpdateWindowTitle(void); + void ClearExisting(void); + void NewFile(void); + bool SaveToFile(const std::string &filename); + bool LoadAutosaveFor(const std::string &filename); + bool LoadFromFile(const std::string &filename); + bool LoadEntitiesFromFile(const std::string &filename, EntityList *le, + SMesh *m, SShell *sh); + bool ReloadAllImported(bool canCancel=false); + // And the various export options + void ExportAsPngTo(const std::string &filename); + void ExportMeshTo(const std::string &filename); + void ExportMeshAsStlTo(FILE *f, SMesh *sm); + void ExportMeshAsObjTo(FILE *f, SMesh *sm); + void ExportMeshAsThreeJsTo(FILE *f, const std::string &filename, + SMesh *sm, SEdgeList *sel); + void ExportViewOrWireframeTo(const std::string &filename, bool wireframe); + void ExportSectionTo(const std::string &filename); + void ExportWireframeCurves(SEdgeList *sel, SBezierList *sbl, + VectorFileWriter *out); + void ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *sm, + Vector u, Vector v, Vector n, Vector origin, + double cameraTan, + VectorFileWriter *out); + + static void MenuAnalyze(int id); + + // Additional display stuff + struct { + SContour path; + hEntity point; + } traced; + SEdgeList nakedEdges; + struct { + bool draw; + Vector ptA; + Vector ptB; + } extraLine; + struct { + uint8_t *fromFile; + int w, h; + int rw, rh; + double scale; // pixels per mm + Vector origin; + } bgImage; + struct { + bool draw, showOrigin; + Vector pt, u, v; + } justExportedInfo; + + class Clipboard { + public: + List r; + List c; + + void Clear(void); + bool ContainsEntity(hEntity old); + hEntity NewEntityFor(hEntity old); + }; + Clipboard clipboard; + + void MarkGroupDirty(hGroup hg); + void MarkGroupDirtyByEntity(hEntity he); + + // Consistency checking on the sketch: stuff with missing dependencies + // will get deleted automatically. + struct { + int requests; + int groups; + int constraints; + int nonTrivialConstraints; + } deleted; + bool GroupExists(hGroup hg); + bool PruneOrphans(void); + bool EntityExists(hEntity he); + bool GroupsInOrder(hGroup before, hGroup after); + bool PruneGroups(hGroup hg); + bool PruneRequests(hGroup hg); + bool PruneConstraints(hGroup hg); + + enum GenerateType { + GENERATE_DIRTY, + GENERATE_ALL, + GENERATE_REGEN, + GENERATE_UNTIL_ACTIVE, + }; + + void GenerateAll(GenerateType type = GENERATE_DIRTY, bool andFindFree = false, + bool genForBBox = false); + void SolveGroup(hGroup hg, bool andFindFree); + void SolveGroupAndReport(hGroup hg, bool andFindFree); + void MarkDraggedParams(void); + void ForceReferences(void); + + bool ActiveGroupsOkay(void); + + // The system to be solved. + System *pSys; + System &sys; + + // All the TrueType fonts in memory + TtfFontList fonts; + + // Everything has been pruned, so we know there's no dangling references + // to entities that don't exist. Before that, we mustn't try to display + // the sketch! + bool allConsistent; + + struct { + bool scheduled; + bool showTW; + bool generateAll; + } later; + void ScheduleShowTW(); + void ScheduleGenerateAll(); + void DoLater(void); + + static void MenuHelp(int id); + + void Clear(void); + + // We allocate TW and sys on the heap to work around an MSVC problem + // where it puts zero-initialized global data in the binary (~30M of zeroes) + // in release builds. + SolveSpaceUI() + : pTW(new TextWindow({})), TW(*pTW), + pSys(new System({})), sys(*pSys) {} + + ~SolveSpaceUI() { + delete pTW; + delete pSys; + } +}; + +void ImportDxf(const std::string &file); +void ImportDwg(const std::string &file); + +extern SolveSpaceUI SS; +extern Sketch SK; + +}; + +#ifndef __OBJC__ +using namespace SolveSpace; +#endif + +#endif diff --git a/src/srf/boolean.cpp b/src/srf/boolean.cpp new file mode 100644 index 0000000..d064952 --- /dev/null +++ b/src/srf/boolean.cpp @@ -0,0 +1,956 @@ +//----------------------------------------------------------------------------- +// Top-level functions to compute the Boolean union or difference between +// two shells of rational polynomial surfaces. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +static int I; + +void SShell::MakeFromUnionOf(SShell *a, SShell *b) { + MakeFromBoolean(a, b, AS_UNION); +} + +void SShell::MakeFromDifferenceOf(SShell *a, SShell *b) { + MakeFromBoolean(a, b, AS_DIFFERENCE); +} + +//----------------------------------------------------------------------------- +// Take our original pwl curve. Wherever an edge intersects a surface within +// either agnstA or agnstB, split the piecewise linear element. Then refine +// the intersection so that it lies on all three relevant surfaces: the +// intersecting surface, srfA, and srfB. (So the pwl curve should lie at +// the intersection of srfA and srfB.) Return a new pwl curve with everything +// split. +//----------------------------------------------------------------------------- +static Vector LineStart, LineDirection; +static int ByTAlongLine(const void *av, const void *bv) +{ + SInter *a = (SInter *)av, + *b = (SInter *)bv; + + double ta = (a->p.Minus(LineStart)).DivPivoting(LineDirection), + tb = (b->p.Minus(LineStart)).DivPivoting(LineDirection); + + return (ta > tb) ? 1 : -1; +} +SCurve SCurve::MakeCopySplitAgainst(SShell *agnstA, SShell *agnstB, + SSurface *srfA, SSurface *srfB) +{ + SCurve ret; + ret = *this; + ret.pts = {}; + + SCurvePt *p = pts.First(); + if(!p) oops(); + SCurvePt prev = *p; + ret.pts.Add(p); + p = pts.NextAfter(p); + + for(; p; p = pts.NextAfter(p)) { + List il = {}; + + // Find all the intersections with the two passed shells + if(agnstA) + agnstA->AllPointsIntersecting(prev.p, p->p, &il, true, false, true); + if(agnstB) + agnstB->AllPointsIntersecting(prev.p, p->p, &il, true, false, true); + + if(il.n > 0) { + // The intersections were generated by intersecting the pwl + // edge against a surface; so they must be refined to lie + // exactly on the original curve. + il.ClearTags(); + SInter *pi; + for(pi = il.First(); pi; pi = il.NextAfter(pi)) { + if(pi->srf == srfA || pi->srf == srfB) { + // The edge certainly intersects the surfaces that it + // trims (at its endpoints), but those ones don't count. + // They are culled later, but no sense calculating them + // and they will cause numerical problems (since two + // of the three surfaces they're refined to lie on will + // be identical, so the matrix will be singular). + pi->tag = 1; + continue; + } + + Point2d puv; + (pi->srf)->ClosestPointTo(pi->p, &puv, false); + + // Split the edge if the intersection lies within the surface's + // trim curves, or within the chord tol of the trim curve; want + // some slop if points are close to edge and pwl is too coarse, + // and it doesn't hurt to split unnecessarily. + Point2d dummy = { 0, 0 }; + int c = (pi->srf->bsp) ? pi->srf->bsp->ClassifyPoint(puv, dummy, pi->srf) : SBspUv::OUTSIDE; + if(c == SBspUv::OUTSIDE) { + double d = VERY_POSITIVE; + if(pi->srf->bsp) d = pi->srf->bsp->MinimumDistanceToEdge(puv, pi->srf); + if(d > SS.ChordTolMm()) { + pi->tag = 1; + continue; + } + } + + // We're keeping the intersection, so actually refine it. + (pi->srf)->PointOnSurfaces(srfA, srfB, &(puv.x), &(puv.y)); + pi->p = (pi->srf)->PointAt(puv); + } + il.RemoveTagged(); + + // And now sort them in order along the line. Note that we must + // do that after refining, in case the refining would make two + // points switch places. + LineStart = prev.p; + LineDirection = (p->p).Minus(prev.p); + qsort(il.elem, il.n, sizeof(il.elem[0]), ByTAlongLine); + + // And now uses the intersections to generate our split pwl edge(s) + Vector prev = Vector::From(VERY_POSITIVE, 0, 0); + for(pi = il.First(); pi; pi = il.NextAfter(pi)) { + // On-edge intersection will generate same split point for + // both surfaces, so don't create zero-length edge. + if(!prev.Equals(pi->p)) { + SCurvePt scpt; + scpt.tag = 0; + scpt.p = pi->p; + scpt.vertex = true; + ret.pts.Add(&scpt); + } + prev = pi->p; + } + } + + il.Clear(); + ret.pts.Add(p); + prev = *p; + } + return ret; +} + +void SShell::CopyCurvesSplitAgainst(bool opA, SShell *agnst, SShell *into) { + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + SCurve scn = sc->MakeCopySplitAgainst(agnst, NULL, + surface.FindById(sc->surfA), + surface.FindById(sc->surfB)); + scn.source = opA ? SCurve::FROM_A : SCurve::FROM_B; + + hSCurve hsc = into->curve.AddAndAssignId(&scn); + // And note the new ID so that we can rewrite the trims appropriately + sc->newH = hsc; + } +} + +void SSurface::TrimFromEdgeList(SEdgeList *el, bool asUv) { + el->l.ClearTags(); + + STrimBy stb = {}; + for(;;) { + // Find an edge, any edge; we'll start from there. + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + if(se->tag) continue; + break; + } + if(!se) break; + se->tag = 1; + stb.start = se->a; + stb.finish = se->b; + stb.curve.v = se->auxA; + stb.backwards = se->auxB ? true : false; + + // Find adjoining edges from the same curve; those should be + // merged into a single trim. + bool merged; + do { + merged = false; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + if(se->tag) continue; + if(se->auxA != (int)stb.curve.v) continue; + if(( se->auxB && !stb.backwards) || + (!se->auxB && stb.backwards)) continue; + + if((se->a).Equals(stb.finish)) { + stb.finish = se->b; + se->tag = 1; + merged = true; + } else if((se->b).Equals(stb.start)) { + stb.start = se->a; + se->tag = 1; + merged = true; + } + } + } while(merged); + + if(asUv) { + stb.start = PointAt(stb.start.x, stb.start.y); + stb.finish = PointAt(stb.finish.x, stb.finish.y); + } + + // And add the merged trim, with xyz (not uv like the polygon) pts + trim.Add(&stb); + } +} + +static bool KeepRegion(int type, bool opA, int shell, int orig) +{ + bool inShell = (shell == SShell::INSIDE), + inSame = (shell == SShell::COINC_SAME), + inOpp = (shell == SShell::COINC_OPP), + inOrig = (orig == SShell::INSIDE); + + bool inFace = inSame || inOpp; + + // If these are correct, then they should be independent of inShell + // if inFace is true. + if(!inOrig) return false; + switch(type) { + case SShell::AS_UNION: + if(opA) { + return (!inShell && !inFace); + } else { + return (!inShell && !inFace) || inSame; + } + + case SShell::AS_DIFFERENCE: + if(opA) { + return (!inShell && !inFace); + } else { + return (inShell && !inFace) || inSame; + } + + default: oops(); + } +} +static bool KeepEdge(int type, bool opA, + int indir_shell, int outdir_shell, + int indir_orig, int outdir_orig) +{ + bool keepIn = KeepRegion(type, opA, indir_shell, indir_orig), + keepOut = KeepRegion(type, opA, outdir_shell, outdir_orig); + + // If the regions to the left and right of this edge are both in or both + // out, then this edge is not useful and should be discarded. + if(keepIn && !keepOut) return true; + return false; +} + +static void TagByClassifiedEdge(int bspclass, int *indir, int *outdir) +{ + switch(bspclass) { + case SBspUv::INSIDE: + *indir = SShell::INSIDE; + *outdir = SShell::INSIDE; + break; + + case SBspUv::OUTSIDE: + *indir = SShell::OUTSIDE; + *outdir = SShell::OUTSIDE; + break; + + case SBspUv::EDGE_PARALLEL: + *indir = SShell::INSIDE; + *outdir = SShell::OUTSIDE; + break; + + case SBspUv::EDGE_ANTIPARALLEL: + *indir = SShell::OUTSIDE; + *outdir = SShell::INSIDE; + break; + + default: + dbp("TagByClassifiedEdge: fail!"); + *indir = SShell::OUTSIDE; + *outdir = SShell::OUTSIDE; + break; + } +} + +static void DEBUGEDGELIST(SEdgeList *sel, SSurface *surf) { + dbp("print %d edges", sel->l.n); + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + Vector mid = (se->a).Plus(se->b).ScaledBy(0.5); + Vector arrow = (se->b).Minus(se->a); + swap(arrow.x, arrow.y); + arrow.x *= -1; + arrow = arrow.WithMagnitude(0.01); + arrow = arrow.Plus(mid); + + SS.nakedEdges.AddEdge(surf->PointAt(se->a.x, se->a.y), + surf->PointAt(se->b.x, se->b.y)); + SS.nakedEdges.AddEdge(surf->PointAt(mid.x, mid.y), + surf->PointAt(arrow.x, arrow.y)); + } +} + +//----------------------------------------------------------------------------- +// We are given src, with at least one edge, and avoid, a list of points to +// avoid. We return a chain of edges (that share endpoints), such that no +// point within the avoid list ever occurs in the middle of a chain. And we +// delete the edges in that chain from our source list. +//----------------------------------------------------------------------------- +void SSurface::FindChainAvoiding(SEdgeList *src, SEdgeList *dest, + SPointList *avoid) +{ + if(src->l.n < 1) oops(); + // Start with an arbitrary edge. + dest->l.Add(&(src->l.elem[0])); + src->l.ClearTags(); + src->l.elem[0].tag = 1; + + bool added; + do { + added = false; + // The start and finish of the current edge chain + Vector s = dest->l.elem[0].a, + f = dest->l.elem[dest->l.n - 1].b; + + // We can attach a new edge at the start or finish, as long as that + // start or finish point isn't in the list of points to avoid. + bool startOkay = !avoid->ContainsPoint(s), + finishOkay = !avoid->ContainsPoint(f); + + // Now look for an unused edge that joins at the start or finish of + // our chain (if permitted by the avoid list). + SEdge *se; + for(se = src->l.First(); se; se = src->l.NextAfter(se)) { + if(se->tag) continue; + if(startOkay && s.Equals(se->b)) { + dest->l.AddToBeginning(se); + s = se->a; + se->tag = 1; + startOkay = !avoid->ContainsPoint(s); + } else if(finishOkay && f.Equals(se->a)) { + dest->l.Add(se); + f = se->b; + se->tag = 1; + finishOkay = !avoid->ContainsPoint(f); + } else { + continue; + } + + added = true; + } + } while(added); + + src->l.RemoveTagged(); +} + +void SSurface::EdgeNormalsWithinSurface(Point2d auv, Point2d buv, + Vector *pt, + Vector *enin, Vector *enout, + Vector *surfn, + uint32_t auxA, + SShell *shell, SShell *sha, SShell *shb) +{ + // the midpoint of the edge + Point2d muv = (auv.Plus(buv)).ScaledBy(0.5); + + *pt = PointAt(muv); + + // If this edge just approximates a curve, then refine our midpoint so + // so that it actually lies on that curve too. Otherwise stuff like + // point-on-face tests will fail, since the point won't actually lie + // on the other face. + hSCurve hc = { auxA }; + SCurve *sc = shell->curve.FindById(hc); + if(sc->isExact && sc->exact.deg != 1) { + double t; + sc->exact.ClosestPointTo(*pt, &t, false); + *pt = sc->exact.PointAt(t); + ClosestPointTo(*pt, &muv); + } else if(!sc->isExact) { + SSurface *trimmedA = sc->GetSurfaceA(sha, shb), + *trimmedB = sc->GetSurfaceB(sha, shb); + *pt = trimmedA->ClosestPointOnThisAndSurface(trimmedB, *pt); + ClosestPointTo(*pt, &muv); + } + + *surfn = NormalAt(muv.x, muv.y); + + // Compute the edge's inner normal in xyz space. + Vector ab = (PointAt(auv)).Minus(PointAt(buv)), + enxyz = (ab.Cross(*surfn)).WithMagnitude(SS.ChordTolMm()); + // And based on that, compute the edge's inner normal in uv space. This + // vector is perpendicular to the edge in xyz, but not necessarily in uv. + Vector tu, tv; + TangentsAt(muv.x, muv.y, &tu, &tv); + Point2d enuv; + enuv.x = enxyz.Dot(tu) / tu.MagSquared(); + enuv.y = enxyz.Dot(tv) / tv.MagSquared(); + + // Compute the inner and outer normals of this edge (within the srf), + // in xyz space. These are not necessarily antiparallel, if the + // surface is curved. + Vector pin = PointAt(muv.Minus(enuv)), + pout = PointAt(muv.Plus(enuv)); + *enin = pin.Minus(*pt), + *enout = pout.Minus(*pt); +} + +//----------------------------------------------------------------------------- +// Trim this surface against the specified shell, in the way that's appropriate +// for the specified Boolean operation type (and which operand we are). We +// also need a pointer to the shell that contains our own surface, since that +// contains our original trim curves. +//----------------------------------------------------------------------------- +SSurface SSurface::MakeCopyTrimAgainst(SShell *parent, + SShell *sha, SShell *shb, + SShell *into, + int type) +{ + bool opA = (parent == sha); + SShell *agnst = opA ? shb : sha; + + SSurface ret; + // The returned surface is identical, just the trim curves change + ret = *this; + ret.trim = {}; + + // First, build a list of the existing trim curves; update them to use + // the split curves. + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + STrimBy stn = *stb; + stn.curve = (parent->curve.FindById(stn.curve))->newH; + ret.trim.Add(&stn); + } + + if(type == SShell::AS_DIFFERENCE && !opA) { + // The second operand of a Boolean difference gets turned inside out + ret.Reverse(); + } + + // Build up our original trim polygon; remember the coordinates could + // be changed if we just flipped the surface normal, and we are using + // the split curves (not the original curves). + SEdgeList orig = {}; + ret.MakeEdgesInto(into, &orig, AS_UV); + ret.trim.Clear(); + // which means that we can't necessarily use the old BSP... + SBspUv *origBsp = SBspUv::From(&orig, &ret); + + // And now intersect the other shell against us + SEdgeList inter = {}; + + SSurface *ss; + for(ss = agnst->surface.First(); ss; ss = agnst->surface.NextAfter(ss)) { + SCurve *sc; + for(sc = into->curve.First(); sc; sc = into->curve.NextAfter(sc)) { + if(sc->source != SCurve::FROM_INTERSECTION) continue; + if(opA) { + if(sc->surfA.v != h.v || sc->surfB.v != ss->h.v) continue; + } else { + if(sc->surfB.v != h.v || sc->surfA.v != ss->h.v) continue; + } + + int i; + for(i = 1; i < sc->pts.n; i++) { + Vector a = sc->pts.elem[i-1].p, + b = sc->pts.elem[i].p; + + Point2d auv, buv; + ss->ClosestPointTo(a, &(auv.x), &(auv.y)); + ss->ClosestPointTo(b, &(buv.x), &(buv.y)); + + int c = (ss->bsp) ? ss->bsp->ClassifyEdge(auv, buv, ss) : SBspUv::OUTSIDE; + if(c != SBspUv::OUTSIDE) { + Vector ta = Vector::From(0, 0, 0); + Vector tb = Vector::From(0, 0, 0); + ret.ClosestPointTo(a, &(ta.x), &(ta.y)); + ret.ClosestPointTo(b, &(tb.x), &(tb.y)); + + Vector tn = ret.NormalAt(ta.x, ta.y); + Vector sn = ss->NormalAt(auv.x, auv.y); + + // We are subtracting the portion of our surface that + // lies in the shell, so the in-plane edge normal should + // point opposite to the surface normal. + bool bkwds = true; + if((tn.Cross(b.Minus(a))).Dot(sn) < 0) bkwds = !bkwds; + if(type == SShell::AS_DIFFERENCE && !opA) bkwds = !bkwds; + if(bkwds) { + inter.AddEdge(tb, ta, sc->h.v, 1); + } else { + inter.AddEdge(ta, tb, sc->h.v, 0); + } + } + } + } + } + + // Record all the points where more than two edges join, which I will call + // the choosing points. If two edges join at a non-choosing point, then + // they must either both be kept or both be discarded (since that would + // otherwise create an open contour). + SPointList choosing = {}; + SEdge *se; + for(se = orig.l.First(); se; se = orig.l.NextAfter(se)) { + choosing.IncrementTagFor(se->a); + choosing.IncrementTagFor(se->b); + } + for(se = inter.l.First(); se; se = inter.l.NextAfter(se)) { + choosing.IncrementTagFor(se->a); + choosing.IncrementTagFor(se->b); + } + SPoint *sp; + for(sp = choosing.l.First(); sp; sp = choosing.l.NextAfter(sp)) { + if(sp->tag == 2) { + sp->tag = 1; + } else { + sp->tag = 0; + } + } + choosing.l.RemoveTagged(); + + // The list of edges to trim our new surface, a combination of edges from + // our original and intersecting edge lists. + SEdgeList final = {}; + + while(orig.l.n > 0) { + SEdgeList chain = {}; + FindChainAvoiding(&orig, &chain, &choosing); + + // Arbitrarily choose an edge within the chain to classify; they + // should all be the same, though. + se = &(chain.l.elem[chain.l.n/2]); + + Point2d auv = (se->a).ProjectXy(), + buv = (se->b).ProjectXy(); + + Vector pt, enin, enout, surfn; + ret.EdgeNormalsWithinSurface(auv, buv, &pt, &enin, &enout, &surfn, + se->auxA, into, sha, shb); + + int indir_shell, outdir_shell, indir_orig, outdir_orig; + + indir_orig = SShell::INSIDE; + outdir_orig = SShell::OUTSIDE; + + agnst->ClassifyEdge(&indir_shell, &outdir_shell, + ret.PointAt(auv), ret.PointAt(buv), pt, + enin, enout, surfn); + + if(KeepEdge(type, opA, indir_shell, outdir_shell, + indir_orig, outdir_orig)) + { + for(se = chain.l.First(); se; se = chain.l.NextAfter(se)) { + final.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + } + chain.Clear(); + } + + while(inter.l.n > 0) { + SEdgeList chain = {}; + FindChainAvoiding(&inter, &chain, &choosing); + + // Any edge in the chain, same as above. + se = &(chain.l.elem[chain.l.n/2]); + + Point2d auv = (se->a).ProjectXy(), + buv = (se->b).ProjectXy(); + + Vector pt, enin, enout, surfn; + ret.EdgeNormalsWithinSurface(auv, buv, &pt, &enin, &enout, &surfn, + se->auxA, into, sha, shb); + + int indir_shell, outdir_shell, indir_orig, outdir_orig; + + int c_this = (origBsp) ? origBsp->ClassifyEdge(auv, buv, &ret) : SBspUv::OUTSIDE; + TagByClassifiedEdge(c_this, &indir_orig, &outdir_orig); + + agnst->ClassifyEdge(&indir_shell, &outdir_shell, + ret.PointAt(auv), ret.PointAt(buv), pt, + enin, enout, surfn); + + if(KeepEdge(type, opA, indir_shell, outdir_shell, + indir_orig, outdir_orig)) + { + for(se = chain.l.First(); se; se = chain.l.NextAfter(se)) { + final.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + } + chain.Clear(); + } + + // Cull extraneous edges; duplicates or anti-parallel pairs. In particular, + // we can get duplicate edges if our surface intersects the other shell + // at an edge, so that both surfaces intersect coincident (and both + // generate an intersection edge). + final.CullExtraneousEdges(); + + // Use our reassembled edges to trim the new surface. + ret.TrimFromEdgeList(&final, true); + + SPolygon poly = {}; + final.l.ClearTags(); + if(!final.AssemblePolygon(&poly, NULL, true)) { + into->booleanFailed = true; + dbp("failed: I=%d, avoid=%d", I, choosing.l.n); + DEBUGEDGELIST(&final, &ret); + } + poly.Clear(); + + choosing.Clear(); + final.Clear(); + inter.Clear(); + orig.Clear(); + return ret; +} + +void SShell::CopySurfacesTrimAgainst(SShell *sha, SShell *shb, SShell *into, + int type) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + SSurface ssn; + ssn = ss->MakeCopyTrimAgainst(this, sha, shb, into, type); + ss->newH = into->surface.AddAndAssignId(&ssn); + I++; + } +} + +void SShell::MakeIntersectionCurvesAgainst(SShell *agnst, SShell *into) { + SSurface *sa; + for(sa = surface.First(); sa; sa = surface.NextAfter(sa)) { + SSurface *sb; + for(sb = agnst->surface.First(); sb; sb = agnst->surface.NextAfter(sb)){ + // Intersect every surface from our shell against every surface + // from agnst; this will add zero or more curves to the curve + // list for into. + sa->IntersectAgainst(sb, this, agnst, into); + } + } +} + +void SShell::CleanupAfterBoolean(void) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->edges.Clear(); + } +} + +//----------------------------------------------------------------------------- +// All curves contain handles to the two surfaces that they trim. After a +// Boolean or assembly, we must rewrite those handles to refer to the curves +// by their new IDs. +//----------------------------------------------------------------------------- +void SShell::RewriteSurfaceHandlesForCurves(SShell *a, SShell *b) { + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + sc->surfA = sc->GetSurfaceA(a, b)->newH, + sc->surfB = sc->GetSurfaceB(a, b)->newH; + } +} + +//----------------------------------------------------------------------------- +// Copy all the surfaces and curves from two different shells into a single +// shell. The only difficulty is to rewrite all of their handles; we don't +// look for any surface intersections, so if two objects interfere then the +// result is just self-intersecting. This is used for assembly, since it's +// much faster than merging as union. +//----------------------------------------------------------------------------- +void SShell::MakeFromAssemblyOf(SShell *a, SShell *b) { + booleanFailed = false; + + Vector t = Vector::From(0, 0, 0); + Quaternion q = Quaternion::IDENTITY; + int i = 0; + SShell *ab; + + // First, copy over all the curves. Note which shell (a or b) each curve + // came from, but assign it a new ID. + SCurve *c, cn; + for(i = 0; i < 2; i++) { + ab = (i == 0) ? a : b; + for(c = ab->curve.First(); c; c = ab->curve.NextAfter(c)) { + cn = SCurve::FromTransformationOf(c, t, q, 1.0); + cn.source = (i == 0) ? SCurve::FROM_A : SCurve::FROM_B; + // surfA and surfB are wrong now, and we can't fix them until + // we've assigned IDs to the surfaces. So we'll get that later. + c->newH = curve.AddAndAssignId(&cn); + } + } + + // Likewise copy over all the surfaces. + SSurface *s, sn; + for(i = 0; i < 2; i++) { + ab = (i == 0) ? a : b; + for(s = ab->surface.First(); s; s = ab->surface.NextAfter(s)) { + sn = SSurface::FromTransformationOf(s, t, q, 1.0, true); + // All the trim curve IDs get rewritten; we know the new handles + // to the curves since we recorded them in the previous step. + STrimBy *stb; + for(stb = sn.trim.First(); stb; stb = sn.trim.NextAfter(stb)) { + stb->curve = ab->curve.FindById(stb->curve)->newH; + } + s->newH = surface.AddAndAssignId(&sn); + } + } + + // Finally, rewrite the surfaces associated with each curve to use the + // new handles. + RewriteSurfaceHandlesForCurves(a, b); +} + +void SShell::MakeFromBoolean(SShell *a, SShell *b, int type) { + booleanFailed = false; + + a->MakeClassifyingBsps(NULL); + b->MakeClassifyingBsps(NULL); + + // Copy over all the original curves, splitting them so that a + // piecwise linear segment never crosses a surface from the other + // shell. + a->CopyCurvesSplitAgainst(true, b, this); + b->CopyCurvesSplitAgainst(false, a, this); + + // Generate the intersection curves for each surface in A against all + // the surfaces in B (which is all of the intersection curves). + a->MakeIntersectionCurvesAgainst(b, this); + + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + SSurface *srfA = sc->GetSurfaceA(a, b), + *srfB = sc->GetSurfaceB(a, b); + + sc->RemoveShortSegments(srfA, srfB); + } + + // And clean up the piecewise linear things we made as a calculation aid + a->CleanupAfterBoolean(); + b->CleanupAfterBoolean(); + // Remake the classifying BSPs with the split (and short-segment-removed) + // curves + a->MakeClassifyingBsps(this); + b->MakeClassifyingBsps(this); + + if(b->surface.n == 0 || a->surface.n == 0) { + I = 1000000; + } else { + I = 0; + } + // Then trim and copy the surfaces + a->CopySurfacesTrimAgainst(a, b, this, type); + b->CopySurfacesTrimAgainst(a, b, this, type); + + // Now that we've copied the surfaces, we know their new hSurfaces, so + // rewrite the curves to refer to the surfaces by their handles in the + // result. + RewriteSurfaceHandlesForCurves(a, b); + + // And clean up the piecewise linear things we made as a calculation aid + a->CleanupAfterBoolean(); + b->CleanupAfterBoolean(); +} + +//----------------------------------------------------------------------------- +// All of the BSP routines that we use to perform and accelerate polygon ops. +//----------------------------------------------------------------------------- +void SShell::MakeClassifyingBsps(SShell *useCurvesFrom) { + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->MakeClassifyingBsp(this, useCurvesFrom); + } +} + +void SSurface::MakeClassifyingBsp(SShell *shell, SShell *useCurvesFrom) { + SEdgeList el = {}; + + MakeEdgesInto(shell, &el, AS_UV, useCurvesFrom); + bsp = SBspUv::From(&el, this); + el.Clear(); + + edges = {}; + MakeEdgesInto(shell, &edges, AS_XYZ, useCurvesFrom); +} + +SBspUv *SBspUv::Alloc(void) { + return (SBspUv *)AllocTemporary(sizeof(SBspUv)); +} + +static int ByLength(const void *av, const void *bv) +{ + SEdge *a = (SEdge *)av, + *b = (SEdge *)bv; + + double la = (a->a).Minus(a->b).Magnitude(), + lb = (b->a).Minus(b->b).Magnitude(); + + // Sort in descending order, longest first. This improves numerical + // stability for the normals. + return (la < lb) ? 1 : -1; +} +SBspUv *SBspUv::From(SEdgeList *el, SSurface *srf) { + SEdgeList work = {}; + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + work.AddEdge(se->a, se->b, se->auxA, se->auxB); + } + qsort(work.l.elem, work.l.n, sizeof(work.l.elem[0]), ByLength); + + SBspUv *bsp = NULL; + for(se = work.l.First(); se; se = work.l.NextAfter(se)) { + bsp = InsertOrCreateEdge(bsp, (se->a).ProjectXy(), (se->b).ProjectXy(), srf); + } + + work.Clear(); + return bsp; +} + +//----------------------------------------------------------------------------- +// The points in this BSP are in uv space, but we want to apply our tolerances +// consistently in xyz (i.e., we want to say a point is on-edge if its xyz +// distance to that edge is less than LENGTH_EPS, irrespective of its distance +// in uv). So we linearize the surface about the point we're considering and +// then do the test. That preserves point-on-line relationships, and the only +// time we care about exact correctness is when we're very close to the line, +// which is when the linearization is accurate. +//----------------------------------------------------------------------------- +void SBspUv::ScalePoints(Point2d *pt, Point2d *a, Point2d *b, SSurface *srf) { + Vector tu, tv; + srf->TangentsAt(pt->x, pt->y, &tu, &tv); + double mu = tu.Magnitude(), mv = tv.Magnitude(); + + pt->x *= mu; pt->y *= mv; + a ->x *= mu; a ->y *= mv; + b ->x *= mu; b ->y *= mv; +} +double SBspUv::ScaledSignedDistanceToLine(Point2d pt, Point2d a, Point2d b, + SSurface *srf) +{ + ScalePoints(&pt, &a, &b, srf); + + Point2d n = ((b.Minus(a)).Normal()).WithMagnitude(1); + double d = a.Dot(n); + + return pt.Dot(n) - d; +} +double SBspUv::ScaledDistanceToLine(Point2d pt, Point2d a, Point2d b, bool seg, + SSurface *srf) +{ + ScalePoints(&pt, &a, &b, srf); + + return pt.DistanceToLine(a, b, seg); +} + +SBspUv *SBspUv::InsertOrCreateEdge(SBspUv *where, const Point2d &ea, const Point2d &eb, SSurface *srf) { + if(where == NULL) { + SBspUv *ret = Alloc(); + ret->a = ea; + ret->b = eb; + return ret; + } + where->InsertEdge(ea, eb, srf); + return where; +} + +void SBspUv::InsertEdge(Point2d ea, Point2d eb, SSurface *srf) { + double dea = ScaledSignedDistanceToLine(ea, a, b, srf), + deb = ScaledSignedDistanceToLine(eb, a, b, srf); + + if(fabs(dea) < LENGTH_EPS && fabs(deb) < LENGTH_EPS) { + // Line segment is coincident with this one, store in same node + SBspUv *m = Alloc(); + m->a = ea; + m->b = eb; + m->more = more; + more = m; + } else if(fabs(dea) < LENGTH_EPS) { + // Point A lies on this lie, but point B does not + if(deb > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } + } else if(fabs(deb) < LENGTH_EPS) { + // Point B lies on this lie, but point A does not + if(dea > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } + } else if(dea > 0 && deb > 0) { + pos = InsertOrCreateEdge(pos, ea, eb, srf); + } else if(dea < 0 && deb < 0) { + neg = InsertOrCreateEdge(neg, ea, eb, srf); + } else { + // New edge crosses this one; we need to split. + Point2d n = ((b.Minus(a)).Normal()).WithMagnitude(1); + double d = a.Dot(n); + double t = (d - n.Dot(ea)) / (n.Dot(eb.Minus(ea))); + Point2d pi = ea.Plus((eb.Minus(ea)).ScaledBy(t)); + if(dea > 0) { + pos = InsertOrCreateEdge(pos, ea, pi, srf); + neg = InsertOrCreateEdge(neg, pi, eb, srf); + } else { + neg = InsertOrCreateEdge(neg, ea, pi, srf); + pos = InsertOrCreateEdge(pos, pi, eb, srf); + } + } + return; +} + +int SBspUv::ClassifyPoint(Point2d p, Point2d eb, SSurface *srf) { + + double dp = ScaledSignedDistanceToLine(p, a, b, srf); + + if(fabs(dp) < LENGTH_EPS) { + SBspUv *f = this; + while(f) { + Point2d ba = (f->b).Minus(f->a); + if(ScaledDistanceToLine(p, f->a, ba, true, srf) < LENGTH_EPS) { + if(ScaledDistanceToLine(eb, f->a, ba, false, srf) < LENGTH_EPS){ + if(ba.Dot(eb.Minus(p)) > 0) { + return EDGE_PARALLEL; + } else { + return EDGE_ANTIPARALLEL; + } + } else { + return EDGE_OTHER; + } + } + f = f->more; + } + // Pick arbitrarily which side to send it down, doesn't matter + int c1 = neg ? neg->ClassifyPoint(p, eb, srf) : OUTSIDE; + int c2 = pos ? pos->ClassifyPoint(p, eb, srf) : INSIDE; + if(c1 != c2) { + dbp("MISMATCH: %d %d %08x %08x", c1, c2, neg, pos); + } + return c1; + } else if(dp > 0) { + return pos ? pos->ClassifyPoint(p, eb, srf) : INSIDE; + } else { + return neg ? neg->ClassifyPoint(p, eb, srf) : OUTSIDE; + } +} + +int SBspUv::ClassifyEdge(Point2d ea, Point2d eb, SSurface *srf) { + int ret = ClassifyPoint((ea.Plus(eb)).ScaledBy(0.5), eb, srf); + if(ret == EDGE_OTHER) { + // Perhaps the edge is tangent at its midpoint (and we screwed up + // somewhere earlier and failed to split it); try a different + // point on the edge. + ret = ClassifyPoint(ea.Plus((eb.Minus(ea)).ScaledBy(0.294)), eb, srf); + } + return ret; +} + +double SBspUv::MinimumDistanceToEdge(Point2d p, SSurface *srf) { + + double dn = (neg) ? neg->MinimumDistanceToEdge(p, srf) : VERY_POSITIVE; + double dp = (pos) ? pos->MinimumDistanceToEdge(p, srf) : VERY_POSITIVE; + + Point2d as = a, bs = b; + ScalePoints(&p, &as, &bs, srf); + double d = p.DistanceToLine(as, bs.Minus(as), true); + + return min(d, min(dn, dp)); +} + diff --git a/src/srf/curve.cpp b/src/srf/curve.cpp new file mode 100644 index 0000000..ba54afc --- /dev/null +++ b/src/srf/curve.cpp @@ -0,0 +1,848 @@ +//----------------------------------------------------------------------------- +// Anything involving curves and sets of curves (except for the real math, +// which is in ratpoly.cpp). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +SBezier SBezier::From(Vector4 p0, Vector4 p1) { + SBezier ret = {}; + ret.deg = 1; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector4 p0, Vector4 p1, Vector4 p2) { + SBezier ret = {}; + ret.deg = 2; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + ret.weight[2] = p2.w; + ret.ctrl [2] = p2.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector4 p0, Vector4 p1, Vector4 p2, Vector4 p3) { + SBezier ret = {}; + ret.deg = 3; + ret.weight[0] = p0.w; + ret.ctrl [0] = p0.PerspectiveProject(); + ret.weight[1] = p1.w; + ret.ctrl [1] = p1.PerspectiveProject(); + ret.weight[2] = p2.w; + ret.ctrl [2] = p2.PerspectiveProject(); + ret.weight[3] = p3.w; + ret.ctrl [3] = p3.PerspectiveProject(); + return ret; +} + +SBezier SBezier::From(Vector p0, Vector p1) { + return SBezier::From(p0.Project4d(), + p1.Project4d()); +} + +SBezier SBezier::From(Vector p0, Vector p1, Vector p2) { + return SBezier::From(p0.Project4d(), + p1.Project4d(), + p2.Project4d()); +} + +SBezier SBezier::From(Vector p0, Vector p1, Vector p2, Vector p3) { + return SBezier::From(p0.Project4d(), + p1.Project4d(), + p2.Project4d(), + p3.Project4d()); +} + +Vector SBezier::Start(void) { + return ctrl[0]; +} + +Vector SBezier::Finish(void) { + return ctrl[deg]; +} + +void SBezier::Reverse(void) { + int i; + for(i = 0; i < (deg+1)/2; i++) { + swap(ctrl[i], ctrl[deg-i]); + swap(weight[i], weight[deg-i]); + } +} + +void SBezier::ScaleSelfBy(double s) { + int i; + for(i = 0; i <= deg; i++) { + ctrl[i] = ctrl[i].ScaledBy(s); + } +} + +void SBezier::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + int i; + for(i = 0; i <= deg; i++) { + double ut = ((ctrl[i]).Minus(orig)).Dot(u); + if(ut < *umin) *umin = ut; + if(ut > *umax) *umax = ut; + } +} + +SBezier SBezier::TransformedBy(Vector t, Quaternion q, double scale) { + SBezier ret = *this; + int i; + for(i = 0; i <= deg; i++) { + ret.ctrl[i] = (ret.ctrl[i]).ScaledBy(scale); + ret.ctrl[i] = (q.Rotate(ret.ctrl[i])).Plus(t); + } + return ret; +} + +//----------------------------------------------------------------------------- +// Does this curve lie entirely within the specified plane? It does if all +// the control points lie in that plane. +//----------------------------------------------------------------------------- +bool SBezier::IsInPlane(Vector n, double d) { + int i; + for(i = 0; i <= deg; i++) { + if(fabs((ctrl[i]).Dot(n) - d) > LENGTH_EPS) { + return false; + } + } + return true; +} + +//----------------------------------------------------------------------------- +// Is this Bezier exactly the arc of a circle, projected along the specified +// axis? If yes, return that circle's center and radius. +//----------------------------------------------------------------------------- +bool SBezier::IsCircle(Vector axis, Vector *center, double *r) { + if(deg != 2) return false; + + if(ctrl[1].DistanceToLine(ctrl[0], ctrl[2].Minus(ctrl[0])) < LENGTH_EPS) { + // This is almost a line segment. So it's a circle with very large + // radius, which is likely to make code that tries to handle circles + // blow up. So return false. + return false; + } + + Vector t0 = (ctrl[0]).Minus(ctrl[1]), + t2 = (ctrl[2]).Minus(ctrl[1]), + r0 = axis.Cross(t0), + r2 = axis.Cross(t2); + + *center = Vector::AtIntersectionOfLines(ctrl[0], (ctrl[0]).Plus(r0), + ctrl[2], (ctrl[2]).Plus(r2), + NULL, NULL, NULL); + + double rd0 = center->Minus(ctrl[0]).Magnitude(), + rd2 = center->Minus(ctrl[2]).Magnitude(); + if(fabs(rd0 - rd2) > LENGTH_EPS) { + return false; + } + *r = rd0; + + Vector u = r0.WithMagnitude(1), + v = (axis.Cross(u)).WithMagnitude(1); + Point2d c2 = center->Project2d(u, v), + pa2 = (ctrl[0]).Project2d(u, v).Minus(c2), + pb2 = (ctrl[2]).Project2d(u, v).Minus(c2); + + double thetaa = atan2(pa2.y, pa2.x), // in fact always zero due to csys + thetab = atan2(pb2.y, pb2.x), + dtheta = WRAP_NOT_0(thetab - thetaa, 2*PI); + if(dtheta > PI) { + // Not possible with a second order Bezier arc; so we must have + // the points backwards. + dtheta = 2*PI - dtheta; + } + + if(fabs(weight[1] - cos(dtheta/2)) > LENGTH_EPS) { + return false; + } + + return true; +} + +bool SBezier::IsRational(void) { + int i; + for(i = 0; i <= deg; i++) { + if(fabs(weight[i] - 1) > LENGTH_EPS) return true; + } + return false; +} + +//----------------------------------------------------------------------------- +// Apply a perspective transformation to a rational Bezier curve, calculating +// the new weights as required. +//----------------------------------------------------------------------------- +SBezier SBezier::InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan) +{ + Quaternion q = Quaternion::From(u, v); + q = q.Inverse(); + // we want Q*(p - o) = Q*p - Q*o + SBezier ret = this->TransformedBy(q.Rotate(origin).ScaledBy(-1), q, 1.0); + int i; + for(i = 0; i <= deg; i++) { + Vector4 ct = Vector4::From(ret.weight[i], ret.ctrl[i]); + // so the desired curve, before perspective, is + // (x/w, y/w, z/w) + // and after perspective is + // ((x/w)/(1 - (z/w)*cameraTan, ... + // = (x/(w - z*cameraTan), ... + // so we want to let w' = w - z*cameraTan + ct.w = ct.w - ct.z*cameraTan; + + ret.ctrl[i] = ct.PerspectiveProject(); + ret.weight[i] = ct.w; + } + return ret; +} + +bool SBezier::Equals(SBezier *b) { + // We just test of identical degree and control points, even though two + // curves could still be coincident (even sharing endpoints). + if(deg != b->deg) return false; + int i; + for(i = 0; i <= deg; i++) { + if(!(ctrl[i]).Equals(b->ctrl[i])) return false; + if(fabs(weight[i] - b->weight[i]) > LENGTH_EPS) return false; + } + return true; +} + +void SBezierList::Clear(void) { + l.Clear(); +} + +void SBezierList::ScaleSelfBy(double s) { + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->ScaleSelfBy(s); + } +} + +//----------------------------------------------------------------------------- +// If our list contains multiple identical Beziers (in either forward or +// reverse order), then cull them. +//----------------------------------------------------------------------------- +void SBezierList::CullIdenticalBeziers(void) { + int i, j; + + l.ClearTags(); + for(i = 0; i < l.n; i++) { + SBezier *bi = &(l.elem[i]), bir; + bir = *bi; + bir.Reverse(); + + for(j = i + 1; j < l.n; j++) { + SBezier *bj = &(l.elem[j]); + if(bj->Equals(bi) || + bj->Equals(&bir)) + { + bi->tag = 1; + bj->tag = 1; + } + } + } + l.RemoveTagged(); +} + +//----------------------------------------------------------------------------- +// Find all the points where a list of Bezier curves intersects another list +// of Bezier curves. We do this by intersecting their piecewise linearizations, +// and then refining any intersections that we find to lie exactly on the +// curves. So this will screw up on tangencies and stuff, but otherwise should +// be fine. +//----------------------------------------------------------------------------- +void SBezierList::AllIntersectionsWith(SBezierList *sblb, SPointList *spl) { + SBezier *sba, *sbb; + for(sba = l.First(); sba; sba = l.NextAfter(sba)) { + for(sbb = sblb->l.First(); sbb; sbb = sblb->l.NextAfter(sbb)) { + sbb->AllIntersectionsWith(sba, spl); + } + } +} +void SBezier::AllIntersectionsWith(SBezier *sbb, SPointList *spl) { + SPointList splRaw = {}; + SEdgeList sea, seb; + sea = {}; + seb = {}; + this->MakePwlInto(&sea); + sbb ->MakePwlInto(&seb); + SEdge *se; + for(se = sea.l.First(); se; se = sea.l.NextAfter(se)) { + // This isn't quite correct, since AnyEdgeCrossings doesn't count + // the case where two pairs of line segments intersect at their + // vertices. So this isn't robust, although that case isn't very + // likely. + seb.AnyEdgeCrossings(se->a, se->b, NULL, &splRaw); + } + SPoint *sp; + for(sp = splRaw.l.First(); sp; sp = splRaw.l.NextAfter(sp)) { + Vector p = sp->p; + if(PointOnThisAndCurve(sbb, &p)) { + if(!spl->ContainsPoint(p)) spl->Add(p); + } + } + sea.Clear(); + seb.Clear(); + splRaw.Clear(); +} + +//----------------------------------------------------------------------------- +// Find a plane that contains all of the curves in this list. If the curves +// are all colinear (or coincident, or empty), then that plane is not exactly +// determined but we choose the additional degree(s) of freedom arbitrarily. +// Returns true if all the curves are coplanar, otherwise false. +//----------------------------------------------------------------------------- +bool SBezierList::GetPlaneContainingBeziers(Vector *p, Vector *u, Vector *v, + Vector *notCoplanarAt) +{ + Vector pt, ptFar, ptOffLine, dp, n; + double farMax, offLineMax; + int i; + SBezier *sb; + + // Get any point on any Bezier; or an arbitrary point if list is empty. + if(l.n > 0) { + pt = l.elem[0].Start(); + } else { + pt = Vector::From(0, 0, 0); + } + ptFar = ptOffLine = pt; + + // Get the point farthest from our arbitrary point. + farMax = VERY_NEGATIVE; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + double m = (pt.Minus(sb->ctrl[i])).Magnitude(); + if(m > farMax) { + ptFar = sb->ctrl[i]; + farMax = m; + } + } + } + if(ptFar.Equals(pt)) { + // The points are all coincident. So neither basis vector matters. + *p = pt; + *u = Vector::From(1, 0, 0); + *v = Vector::From(0, 1, 0); + return true; + } + + // Get the point farthest from the line between pt and ptFar + dp = ptFar.Minus(pt); + offLineMax = VERY_NEGATIVE; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + double m = (sb->ctrl[i]).DistanceToLine(pt, dp); + if(m > offLineMax) { + ptOffLine = sb->ctrl[i]; + offLineMax = m; + } + } + } + + *p = pt; + if(offLineMax < LENGTH_EPS) { + // The points are all colinear; so choose the second basis vector + // arbitrarily. + *u = (ptFar.Minus(pt)).WithMagnitude(1); + *v = (u->Normal(0)).WithMagnitude(1); + } else { + // The points actually define a plane. + n = (ptFar.Minus(pt)).Cross(ptOffLine.Minus(pt)); + *u = (n.Normal(0)).WithMagnitude(1); + *v = (n.Normal(1)).WithMagnitude(1); + } + + // So we have a plane; but check whether all of the points lie in that + // plane. + n = u->Cross(*v); + n = n.WithMagnitude(1); + double d = p->Dot(n); + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + for(i = 0; i <= sb->deg; i++) { + if(fabs(n.Dot(sb->ctrl[i]) - d) > LENGTH_EPS) { + if(notCoplanarAt) *notCoplanarAt = sb->ctrl[i]; + return false; + } + } + } + return true; +} + +//----------------------------------------------------------------------------- +// Assemble curves in sbl into a single loop. The curves may appear in any +// direction (start to finish, or finish to start), and will be reversed if +// necessary. The curves in the returned loop are removed from sbl, even if +// the loop cannot be closed. +//----------------------------------------------------------------------------- +SBezierLoop SBezierLoop::FromCurves(SBezierList *sbl, + bool *allClosed, SEdge *errorAt) +{ + SBezierLoop loop = {}; + + if(sbl->l.n < 1) return loop; + sbl->l.ClearTags(); + + SBezier *first = &(sbl->l.elem[0]); + first->tag = 1; + loop.l.Add(first); + Vector start = first->Start(); + Vector hanging = first->Finish(); + int auxA = first->auxA; + + sbl->l.RemoveTagged(); + + while(sbl->l.n > 0 && !hanging.Equals(start)) { + int i; + bool foundNext = false; + for(i = 0; i < sbl->l.n; i++) { + SBezier *test = &(sbl->l.elem[i]); + + if((test->Finish()).Equals(hanging) && test->auxA == auxA) { + test->Reverse(); + // and let the next test catch it + } + if((test->Start()).Equals(hanging) && test->auxA == auxA) { + test->tag = 1; + loop.l.Add(test); + hanging = test->Finish(); + sbl->l.RemoveTagged(); + foundNext = true; + break; + } + } + if(!foundNext) { + // The loop completed without finding the hanging edge, so + // it's an open loop + errorAt->a = hanging; + errorAt->b = start; + *allClosed = false; + return loop; + } + } + if(hanging.Equals(start)) { + *allClosed = true; + } else { + // We ran out of edges without forming a closed loop. + errorAt->a = hanging; + errorAt->b = start; + *allClosed = false; + } + + return loop; +} + +void SBezierLoop::Reverse(void) { + l.Reverse(); + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + // If we didn't reverse each curve, then the next curve in list would + // share your start, not your finish. + sb->Reverse(); + } +} + +void SBezierLoop::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->GetBoundingProjd(u, orig, umin, umax); + } +} + +void SBezierLoop::MakePwlInto(SContour *sc, double chordTol) { + SBezier *sb; + for(sb = l.First(); sb; sb = l.NextAfter(sb)) { + sb->MakePwlInto(sc, chordTol); + // Avoid double points at join between Beziers; except that + // first and last points should be identical. + if(l.NextAfter(sb) != NULL) { + sc->l.RemoveLast(1); + } + } + // Ensure that it's exactly closed, not just within a numerical tolerance. + if((sc->l.elem[sc->l.n - 1].p).Equals(sc->l.elem[0].p)) { + sc->l.elem[sc->l.n - 1] = sc->l.elem[0]; + } +} + +bool SBezierLoop::IsClosed(void) { + if(l.n < 1) return false; + Vector s = l.elem[0].Start(), + f = l.elem[l.n-1].Finish(); + return s.Equals(f); +} + + +//----------------------------------------------------------------------------- +// Assemble the curves in sbl into multiple loops, and piecewise linearize the +// curves into poly. If we can't close a contour, then we add it to +// openContours (if that isn't NULL) and keep going; so this works even if the +// input contains a mix of open and closed curves. +//----------------------------------------------------------------------------- +SBezierLoopSet SBezierLoopSet::From(SBezierList *sbl, SPolygon *poly, + double chordTol, + bool *allClosed, SEdge *errorAt, + SBezierList *openContours) +{ + SBezierLoopSet ret = {}; + + *allClosed = true; + while(sbl->l.n > 0) { + bool thisClosed; + SBezierLoop loop; + loop = SBezierLoop::FromCurves(sbl, &thisClosed, errorAt); + if(!thisClosed) { + // Record open loops in a separate list, if requested. + *allClosed = false; + if(openContours) { + SBezier *sb; + for(sb = loop.l.First(); sb; sb = loop.l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + loop.Clear(); + } else { + ret.l.Add(&loop); + poly->AddEmptyContour(); + loop.MakePwlInto(&(poly->l.elem[poly->l.n-1]), chordTol); + } + } + + poly->normal = poly->ComputeNormal(); + ret.normal = poly->normal; + if(poly->l.n > 0) { + ret.point = poly->AnyPoint(); + } else { + ret.point = Vector::From(0, 0, 0); + } + + return ret; +} + +void SBezierLoopSet::GetBoundingProjd(Vector u, Vector orig, + double *umin, double *umax) +{ + SBezierLoop *sbl; + for(sbl = l.First(); sbl; sbl = l.NextAfter(sbl)) { + sbl->GetBoundingProjd(u, orig, umin, umax); + } +} + +//----------------------------------------------------------------------------- +// Convert all the Beziers into piecewise linear form, and assemble that into +// a polygon, one contour per loop. +//----------------------------------------------------------------------------- +void SBezierLoopSet::MakePwlInto(SPolygon *sp) { + SBezierLoop *sbl; + for(sbl = l.First(); sbl; sbl = l.NextAfter(sbl)) { + sp->AddEmptyContour(); + sbl->MakePwlInto(&(sp->l.elem[sp->l.n - 1])); + } +} + +void SBezierLoopSet::Clear(void) { + int i; + for(i = 0; i < l.n; i++) { + (l.elem[i]).Clear(); + } + l.Clear(); +} + +//----------------------------------------------------------------------------- +// An export helper function. We start with a list of Bezier curves, and +// assemble them into loops. We find the outer loops, and find the outer loops' +// inner loops, and group them accordingly. +//----------------------------------------------------------------------------- +void SBezierLoopSetSet::FindOuterFacesFrom(SBezierList *sbl, SPolygon *spxyz, + SSurface *srfuv, + double chordTol, + bool *allClosed, SEdge *notClosedAt, + bool *allCoplanar, Vector *notCoplanarAt, + SBezierList *openContours) +{ + SSurface srfPlane; + if(!srfuv) { + Vector p, u, v; + *allCoplanar = + sbl->GetPlaneContainingBeziers(&p, &u, &v, notCoplanarAt); + if(!*allCoplanar) { + // Don't even try to assemble them into loops if they're not + // all coplanar. + if(openContours) { + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + return; + } + // All the curves lie in a plane through p with basis vectors u and v. + srfPlane = SSurface::FromPlane(p, u, v); + srfuv = &srfPlane; + } + + int i, j; + // Assemble the Bezier trim curves into closed loops; we also get the + // piecewise linearization of the curves (in the SPolygon spxyz), as a + // calculation aid for the loop direction. + SBezierLoopSet sbls = SBezierLoopSet::From(sbl, spxyz, chordTol, + allClosed, notClosedAt, + openContours); + if(sbls.l.n != spxyz->l.n) return; + + // Convert the xyz piecewise linear to uv piecewise linear. + SPolygon spuv = {}; + SContour *sc; + for(sc = spxyz->l.First(); sc; sc = spxyz->l.NextAfter(sc)) { + spuv.AddEmptyContour(); + SPoint *pt; + for(pt = sc->l.First(); pt; pt = sc->l.NextAfter(pt)) { + double u, v; + srfuv->ClosestPointTo(pt->p, &u, &v); + spuv.l.elem[spuv.l.n - 1].AddPoint(Vector::From(u, v, 0)); + } + } + spuv.normal = Vector::From(0, 0, 1); // must be, since it's in xy plane now + + static const int OUTER_LOOP = 10; + static const int INNER_LOOP = 20; + static const int USED_LOOP = 30; + // Fix the contour directions; we do this properly, in uv space, so it + // works for curved surfaces too (important for STEP export). + spuv.FixContourDirections(); + for(i = 0; i < spuv.l.n; i++) { + SContour *contour = &(spuv.l.elem[i]); + SBezierLoop *bl = &(sbls.l.elem[i]); + if(contour->tag) { + // This contour got reversed in the polygon to make the directions + // consistent, so the same must be necessary for the Bezier loop. + bl->Reverse(); + } + if(contour->IsClockwiseProjdToNormal(spuv.normal)) { + bl->tag = INNER_LOOP; + } else { + bl->tag = OUTER_LOOP; + } + } + + bool loopsRemaining = true; + while(loopsRemaining) { + loopsRemaining = false; + for(i = 0; i < sbls.l.n; i++) { + SBezierLoop *loop = &(sbls.l.elem[i]); + if(loop->tag != OUTER_LOOP) continue; + + // Check if this contour contains any outer loops; if it does, then + // we should do those "inner outer loops" first; otherwise we + // will steal their holes, since their holes also lie inside this + // contour. + for(j = 0; j < sbls.l.n; j++) { + SBezierLoop *outer = &(sbls.l.elem[j]); + if(i == j) continue; + if(outer->tag != OUTER_LOOP) continue; + + Vector p = spuv.l.elem[j].AnyEdgeMidpoint(); + if(spuv.l.elem[i].ContainsPointProjdToNormal(spuv.normal, p)) { + break; + } + } + if(j < sbls.l.n) { + // It does, can't do this one yet. + continue; + } + + SBezierLoopSet outerAndInners = {}; + loopsRemaining = true; + loop->tag = USED_LOOP; + outerAndInners.l.Add(loop); + int auxA = 0; + if(loop->l.n > 0) auxA = loop->l.elem[0].auxA; + + for(j = 0; j < sbls.l.n; j++) { + SBezierLoop *inner = &(sbls.l.elem[j]); + if(inner->tag != INNER_LOOP) continue; + if(inner->l.n < 1) continue; + if(inner->l.elem[0].auxA != auxA) continue; + + Vector p = spuv.l.elem[j].AnyEdgeMidpoint(); + if(spuv.l.elem[i].ContainsPointProjdToNormal(spuv.normal, p)) { + outerAndInners.l.Add(inner); + inner->tag = USED_LOOP; + } + } + + outerAndInners.point = srfuv->PointAt(0, 0); + outerAndInners.normal = srfuv->NormalAt(0, 0); + l.Add(&outerAndInners); + } + } + + // If we have poorly-formed loops--for example, overlapping zero-area + // stuff--then we can end up with leftovers. We use this function to + // group stuff into closed paths for export when possible, so it's bad + // to screw up on that stuff. So just add them onto the open curve list. + // Very ugly, but better than losing curves. + for(i = 0; i < sbls.l.n; i++) { + SBezierLoop *loop = &(sbls.l.elem[i]); + if(loop->tag == USED_LOOP) continue; + + if(openContours) { + SBezier *sb; + for(sb = loop->l.First(); sb; sb = loop->l.NextAfter(sb)) { + openContours->l.Add(sb); + } + } + loop->Clear(); + // but don't free the used loops, since we shallow-copied them to + // ourself + } + + sbls.l.Clear(); // not sbls.Clear(), since that would deep-clear + spuv.Clear(); +} + +void SBezierLoopSetSet::AddOpenPath(SBezier *sb) { + SBezierLoop sbl = {}; + sbl.l.Add(sb); + + SBezierLoopSet sbls = {}; + sbls.l.Add(&sbl); + + l.Add(&sbls); +} + +void SBezierLoopSetSet::Clear(void) { + SBezierLoopSet *sbls; + for(sbls = l.First(); sbls; sbls = l.NextAfter(sbls)) { + sbls->Clear(); + } + l.Clear(); +} + +SCurve SCurve::FromTransformationOf(SCurve *a, + Vector t, Quaternion q, double scale) +{ + SCurve ret = {}; + + ret.h = a->h; + ret.isExact = a->isExact; + ret.exact = (a->exact).TransformedBy(t, q, scale); + ret.surfA = a->surfA; + ret.surfB = a->surfB; + + SCurvePt *p; + for(p = a->pts.First(); p; p = a->pts.NextAfter(p)) { + SCurvePt pp = *p; + pp.p = (pp.p).ScaledBy(scale); + pp.p = (q.Rotate(pp.p)).Plus(t); + ret.pts.Add(&pp); + } + return ret; +} + +void SCurve::Clear(void) { + pts.Clear(); +} + +SSurface *SCurve::GetSurfaceA(SShell *a, SShell *b) { + if(source == FROM_A) { + return a->surface.FindById(surfA); + } else if(source == FROM_B) { + return b->surface.FindById(surfA); + } else if(source == FROM_INTERSECTION) { + return a->surface.FindById(surfA); + } else oops(); +} + +SSurface *SCurve::GetSurfaceB(SShell *a, SShell *b) { + if(source == FROM_A) { + return a->surface.FindById(surfB); + } else if(source == FROM_B) { + return b->surface.FindById(surfB); + } else if(source == FROM_INTERSECTION) { + return b->surface.FindById(surfB); + } else oops(); +} + +//----------------------------------------------------------------------------- +// When we split line segments wherever they intersect a surface, we introduce +// extra pwl points. This may create very short edges that could be removed +// without violating the chord tolerance. Those are ugly, and also break +// stuff in the Booleans. So remove them. +//----------------------------------------------------------------------------- +void SCurve::RemoveShortSegments(SSurface *srfA, SSurface *srfB) { + // Three, not two; curves are pwl'd to at least two edges (three points) + // even if not necessary, to avoid square holes. + if(pts.n <= 3) return; + pts.ClearTags(); + + Vector prev = pts.elem[0].p; + int i, a; + for(i = 1; i < pts.n - 1; i++) { + SCurvePt *sct = &(pts.elem[i]), + *scn = &(pts.elem[i+1]); + if(sct->vertex) { + prev = sct->p; + continue; + } + bool mustKeep = false; + + // We must check against both surfaces; the piecewise linear edge + // may have a different chord tolerance in the two surfaces. (For + // example, a circle in the surface of a cylinder is just a straight + // line, so it always has perfect chord tol, but that circle in + // a plane is a circle so it doesn't). + for(a = 0; a < 2; a++) { + SSurface *srf = (a == 0) ? srfA : srfB; + Vector puv, nuv; + srf->ClosestPointTo(prev, &(puv.x), &(puv.y)); + srf->ClosestPointTo(scn->p, &(nuv.x), &(nuv.y)); + + if(srf->ChordToleranceForEdge(nuv, puv) > SS.ChordTolMm()) { + mustKeep = true; + } + } + + if(mustKeep) { + prev = sct->p; + } else { + sct->tag = 1; + // and prev is unchanged, since there's no longer any point + // in between + } + } + + pts.RemoveTagged(); +} + +STrimBy STrimBy::EntireCurve(SShell *shell, hSCurve hsc, bool backwards) { + STrimBy stb = {}; + stb.curve = hsc; + SCurve *sc = shell->curve.FindById(hsc); + + if(backwards) { + stb.finish = sc->pts.elem[0].p; + stb.start = sc->pts.elem[sc->pts.n - 1].p; + stb.backwards = true; + } else { + stb.start = sc->pts.elem[0].p; + stb.finish = sc->pts.elem[sc->pts.n - 1].p; + stb.backwards = false; + } + + return stb; +} + diff --git a/src/srf/merge.cpp b/src/srf/merge.cpp new file mode 100644 index 0000000..487fb92 --- /dev/null +++ b/src/srf/merge.cpp @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Routines to merge multiple coincident surfaces (each with their own trim +// curves) into a single surface, with all of the trim curves. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +void SShell::MergeCoincidentSurfaces(void) { + surface.ClearTags(); + + int i, j; + SSurface *si, *sj; + + for(i = 0; i < surface.n; i++) { + si = &(surface.elem[i]); + if(si->tag) continue; + // Let someone else clean up the empty surfaces; we can certainly merge + // them, but we don't know how to calculate a reasonable bounding box. + if(si->trim.n == 0) continue; + // And for now we handle only coincident planes, so no sense wasting + // time on other surfaces. + if(si->degm != 1 || si->degn != 1) continue; + + SEdgeList sel = {}; + si->MakeEdgesInto(this, &sel, SSurface::AS_XYZ); + + bool mergedThisTime, merged = false; + do { + mergedThisTime = false; + + for(j = i + 1; j < surface.n; j++) { + sj = &(surface.elem[j]); + if(sj->tag) continue; + if(!sj->CoincidentWith(si, true)) continue; + if(!sj->color.Equals(si->color)) continue; + // But we do merge surfaces with different face entities, since + // otherwise we'd hardly ever merge anything. + + // This surface is coincident. But let's not merge coincident + // surfaces if they contain disjoint contours; that just makes + // the bounding box tests less effective, and possibly things + // less robust. + SEdgeList tel = {}; + sj->MakeEdgesInto(this, &tel, SSurface::AS_XYZ); + if(!sel.ContainsEdgeFrom(&tel)) { + tel.Clear(); + continue; + } + tel.Clear(); + + sj->tag = 1; + merged = true; + mergedThisTime = true; + sj->MakeEdgesInto(this, &sel, SSurface::AS_XYZ); + sj->trim.Clear(); + + // All the references to this surface get replaced with the + // new srf + SCurve *sc; + for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { + if(sc->surfA.v == sj->h.v) sc->surfA = si->h; + if(sc->surfB.v == sj->h.v) sc->surfB = si->h; + } + } + + // If this iteration merged a contour onto ours, then we have to + // go through the surfaces again; that might have made a new + // surface touch us. + } while(mergedThisTime); + + if(merged) { + sel.CullExtraneousEdges(); + si->trim.Clear(); + si->TrimFromEdgeList(&sel, false); + + // And we must choose control points such that all the trims lie + // with u and v in [0, 1], so that the bbox tests work. + Vector u, v, n; + si->TangentsAt(0.5, 0.5, &u, &v); + u = u.WithMagnitude(1); + v = v.WithMagnitude(1); + n = si->NormalAt(0.5, 0.5).WithMagnitude(1); + v = (n.Cross(u)).WithMagnitude(1); + + double umax = VERY_NEGATIVE, umin = VERY_POSITIVE, + vmax = VERY_NEGATIVE, vmin = VERY_POSITIVE; + SEdge *se; + for(se = sel.l.First(); se; se = sel.l.NextAfter(se)) { + double ut = (se->a).Dot(u), vt = (se->a).Dot(v); + umax = max(umax, ut); + vmax = max(vmax, vt); + umin = min(umin, ut); + vmin = min(vmin, vt); + } + + // An interesting problem here; the real curve could extend + // slightly beyond the bounding box of the piecewise linear + // bits. Not a problem for us, but some apps won't import STEP + // in that case. So give a bit of extra room; in theory just + // a chord tolerance, but more can't hurt. + double muv = max((umax - umin), (vmax - vmin)); + double tol = muv/50 + 3*SS.ChordTolMm(); + umax += tol; + vmax += tol; + umin -= tol; + vmin -= tol; + + // We move in the +v direction as v goes from 0 to 1, and in the + // +u direction as u goes from 0 to 1. So our normal ends up + // pointed the same direction. + double nt = (si->ctrl[0][0]).Dot(n); + si->ctrl[0][0] = + Vector::From(umin, vmin, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[0][1] = + Vector::From(umin, vmax, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[1][1] = + Vector::From(umax, vmax, nt).ScaleOutOfCsys(u, v, n); + si->ctrl[1][0] = + Vector::From(umax, vmin, nt).ScaleOutOfCsys(u, v, n); + } + sel.Clear(); + } + + surface.RemoveTagged(); +} + diff --git a/src/srf/ratpoly.cpp b/src/srf/ratpoly.cpp new file mode 100644 index 0000000..2f6a0bb --- /dev/null +++ b/src/srf/ratpoly.cpp @@ -0,0 +1,615 @@ +//----------------------------------------------------------------------------- +// Math on rational polynomial surfaces and curves, typically in Bezier +// form. Evaluate, root-find (by Newton's methods), evaluate derivatives, +// and so on. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +// Converge it to better than LENGTH_EPS; we want two points, each +// independently projected into uv and back, to end up equal with the +// LENGTH_EPS. Best case that requires LENGTH_EPS/2, but more is better +// and convergence should be fast by now. +#define RATPOLY_EPS (LENGTH_EPS/(1e2)) + +double SolveSpace::Bernstein(int k, int deg, double t) +{ + if(k > deg || k < 0) return 0; + + switch(deg) { + case 0: + return 1; + + case 1: + if(k == 0) { + return (1 - t); + } else if(k == 1) { + return t; + } + break; + + case 2: + if(k == 0) { + return (1 - t)*(1 - t); + } else if(k == 1) { + return 2*(1 - t)*t; + } else if(k == 2) { + return t*t; + } + break; + + case 3: + if(k == 0) { + return (1 - t)*(1 - t)*(1 - t); + } else if(k == 1) { + return 3*(1 - t)*(1 - t)*t; + } else if(k == 2) { + return 3*(1 - t)*t*t; + } else if(k == 3) { + return t*t*t; + } + break; + } + oops(); +} + +double SolveSpace::BernsteinDerivative(int k, int deg, double t) +{ + switch(deg) { + case 0: + return 0; + + case 1: + if(k == 0) { + return -1; + } else if(k == 1) { + return 1; + } + break; + + case 2: + if(k == 0) { + return -2 + 2*t; + } else if(k == 1) { + return 2 - 4*t; + } else if(k == 2) { + return 2*t; + } + break; + + case 3: + if(k == 0) { + return -3 + 6*t - 3*t*t; + } else if(k == 1) { + return 3 - 12*t + 9*t*t; + } else if(k == 2) { + return 6*t - 9*t*t; + } else if(k == 3) { + return 3*t*t; + } + break; + } + oops(); +} + +Vector SBezier::PointAt(double t) { + Vector pt = Vector::From(0, 0, 0); + double d = 0; + + int i; + for(i = 0; i <= deg; i++) { + double B = Bernstein(i, deg, t); + pt = pt.Plus(ctrl[i].ScaledBy(B*weight[i])); + d += weight[i]*B; + } + pt = pt.ScaledBy(1.0/d); + return pt; +} + +Vector SBezier::TangentAt(double t) { + Vector pt = Vector::From(0, 0, 0), pt_p = Vector::From(0, 0, 0); + double d = 0, d_p = 0; + + int i; + for(i = 0; i <= deg; i++) { + double B = Bernstein(i, deg, t), + Bp = BernsteinDerivative(i, deg, t); + + pt = pt.Plus(ctrl[i].ScaledBy(B*weight[i])); + d += weight[i]*B; + + pt_p = pt_p.Plus(ctrl[i].ScaledBy(Bp*weight[i])); + d_p += weight[i]*Bp; + } + + // quotient rule; f(t) = n(t)/d(t), so f' = (n'*d - n*d')/(d^2) + Vector ret; + ret = (pt_p.ScaledBy(d)).Minus(pt.ScaledBy(d_p)); + ret = ret.ScaledBy(1.0/(d*d)); + return ret; +} + +void SBezier::ClosestPointTo(Vector p, double *t, bool converge) { + int i; + double minDist = VERY_POSITIVE; + *t = 0; + double res = (deg <= 2) ? 7.0 : 20.0; + for(i = 0; i < (int)res; i++) { + double tryt = (i/res); + + Vector tryp = PointAt(tryt); + double d = (tryp.Minus(p)).Magnitude(); + if(d < minDist) { + *t = tryt; + minDist = d; + } + } + + Vector p0; + for(i = 0; i < (converge ? 15 : 5); i++) { + p0 = PointAt(*t); + if(p0.Equals(p, RATPOLY_EPS)) { + return; + } + + Vector dp = TangentAt(*t); + Vector pc = p.ClosestPointOnLine(p0, dp); + *t += (pc.Minus(p0)).DivPivoting(dp); + } + if(converge) { + dbp("didn't converge (closest point on bezier curve)"); + } +} + +bool SBezier::PointOnThisAndCurve(SBezier *sbb, Vector *p) { + double ta, tb; + this->ClosestPointTo(*p, &ta, false); + sbb ->ClosestPointTo(*p, &tb, false); + + int i; + for(i = 0; i < 20; i++) { + Vector pa = this->PointAt(ta), + pb = sbb ->PointAt(tb), + da = this->TangentAt(ta), + db = sbb ->TangentAt(tb); + + if(pa.Equals(pb, RATPOLY_EPS)) { + *p = pa; + return true; + } + + double tta, ttb; + Vector::ClosestPointBetweenLines(pa, da, pb, db, &tta, &ttb); + ta += tta; + tb += ttb; + } + return false; +} + +void SBezier::SplitAt(double t, SBezier *bef, SBezier *aft) { + Vector4 ct[4]; + int i; + for(i = 0; i <= deg; i++) { + ct[i] = Vector4::From(weight[i], ctrl[i]); + } + + switch(deg) { + case 1: { + Vector4 cts = Vector4::Blend(ct[0], ct[1], t); + *bef = SBezier::From(ct[0], cts); + *aft = SBezier::From(cts, ct[1]); + break; + } + case 2: { + Vector4 ct01 = Vector4::Blend(ct[0], ct[1], t), + ct12 = Vector4::Blend(ct[1], ct[2], t), + cts = Vector4::Blend(ct01, ct12, t); + + *bef = SBezier::From(ct[0], ct01, cts); + *aft = SBezier::From(cts, ct12, ct[2]); + break; + } + case 3: { + Vector4 ct01 = Vector4::Blend(ct[0], ct[1], t), + ct12 = Vector4::Blend(ct[1], ct[2], t), + ct23 = Vector4::Blend(ct[2], ct[3], t), + ct01_12 = Vector4::Blend(ct01, ct12, t), + ct12_23 = Vector4::Blend(ct12, ct23, t), + cts = Vector4::Blend(ct01_12, ct12_23, t); + + *bef = SBezier::From(ct[0], ct01, ct01_12, cts); + *aft = SBezier::From(cts, ct12_23, ct23, ct[3]); + break; + } + default: oops(); + } +} + +void SBezier::MakePwlInto(SEdgeList *sel, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 1; i < lv.n; i++) { + sel->AddEdge(lv.elem[i-1], lv.elem[i]); + } + lv.Clear(); +} +void SBezier::MakePwlInto(List *l, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 0; i < lv.n; i++) { + SCurvePt scpt; + scpt.tag = 0; + scpt.p = lv.elem[i]; + scpt.vertex = (i == 0) || (i == (lv.n - 1)); + l->Add(&scpt); + } + lv.Clear(); +} +void SBezier::MakePwlInto(SContour *sc, double chordTol) { + List lv = {}; + MakePwlInto(&lv, chordTol); + int i; + for(i = 0; i < lv.n; i++) { + sc->AddPoint(lv.elem[i]); + } + lv.Clear(); +} +void SBezier::MakePwlInto(List *l, double chordTol) { + if(EXACT(chordTol == 0)) { + // Use the default chord tolerance. + chordTol = SS.ChordTolMm(); + } + l->Add(&(ctrl[0])); + if(deg == 1) { + l->Add(&(ctrl[1])); + } else { + // Never do fewer than one intermediate point; people seem to get + // unhappy when their circles turn into squares, but maybe less + // unhappy with octagons. + MakePwlInitialWorker(l, 0.0, 0.5, chordTol); + MakePwlInitialWorker(l, 0.5, 1.0, chordTol); + } +} +void SBezier::MakePwlWorker(List *l, double ta, double tb, double chordTol) +{ + Vector pa = PointAt(ta); + Vector pb = PointAt(tb); + + Vector pm = PointAt((ta + tb) / 2.0); + double d = pm.DistanceToLine(pa, pb.Minus(pa)); + + double step = 1.0/SS.GetMaxSegments(); + if((tb - ta) < step || d < chordTol) { + // A previous call has already added the beginning of our interval. + l->Add(&pb); + } else { + double tm = (ta + tb) / 2; + MakePwlWorker(l, ta, tm, chordTol); + MakePwlWorker(l, tm, tb, chordTol); + } +} +void SBezier::MakePwlInitialWorker(List *l, double ta, double tb, double chordTol) +{ + Vector pa = PointAt(ta); + Vector pb = PointAt(tb); + + double tm1 = ta + (tb - ta) * 0.25; + double tm2 = ta + (tb - ta) * 0.5; + double tm3 = ta + (tb - ta) * 0.75; + + Vector pm1 = PointAt(tm1); + Vector pm2 = PointAt(tm2); + Vector pm3 = PointAt(tm3); + Vector dir = pb.Minus(pa); + + double d = max({ + pm1.DistanceToLine(pa, dir), + pm2.DistanceToLine(pa, dir), + pm3.DistanceToLine(pa, dir) + }); + + double step = 1.0/SS.GetMaxSegments(); + if((tb - ta) < step || d < chordTol) { + // A previous call has already added the beginning of our interval. + l->Add(&pb); + } else { + double tm = (ta + tb) / 2; + MakePwlWorker(l, ta, tm, chordTol); + MakePwlWorker(l, tm, tb, chordTol); + } +} + +Vector SSurface::PointAt(Point2d puv) { + return PointAt(puv.x, puv.y); +} +Vector SSurface::PointAt(double u, double v) { + Vector num = Vector::From(0, 0, 0); + double den = 0; + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double Bi = Bernstein(i, degm, u), + Bj = Bernstein(j, degn, v); + + num = num.Plus(ctrl[i][j].ScaledBy(Bi*Bj*weight[i][j])); + den += weight[i][j]*Bi*Bj; + } + } + num = num.ScaledBy(1.0/den); + return num; +} + +void SSurface::TangentsAt(double u, double v, Vector *tu, Vector *tv) { + Vector num = Vector::From(0, 0, 0), + num_u = Vector::From(0, 0, 0), + num_v = Vector::From(0, 0, 0); + double den = 0, + den_u = 0, + den_v = 0; + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double Bi = Bernstein(i, degm, u), + Bj = Bernstein(j, degn, v), + Bip = BernsteinDerivative(i, degm, u), + Bjp = BernsteinDerivative(j, degn, v); + + num = num.Plus(ctrl[i][j].ScaledBy(Bi*Bj*weight[i][j])); + den += weight[i][j]*Bi*Bj; + + num_u = num_u.Plus(ctrl[i][j].ScaledBy(Bip*Bj*weight[i][j])); + den_u += weight[i][j]*Bip*Bj; + + num_v = num_v.Plus(ctrl[i][j].ScaledBy(Bi*Bjp*weight[i][j])); + den_v += weight[i][j]*Bi*Bjp; + } + } + // quotient rule; f(t) = n(t)/d(t), so f' = (n'*d - n*d')/(d^2) + *tu = ((num_u.ScaledBy(den)).Minus(num.ScaledBy(den_u))); + *tu = tu->ScaledBy(1.0/(den*den)); + + *tv = ((num_v.ScaledBy(den)).Minus(num.ScaledBy(den_v))); + *tv = tv->ScaledBy(1.0/(den*den)); +} + +Vector SSurface::NormalAt(Point2d puv) { + return NormalAt(puv.x, puv.y); +} +Vector SSurface::NormalAt(double u, double v) { + Vector tu, tv; + TangentsAt(u, v, &tu, &tv); + return tu.Cross(tv); +} + +void SSurface::ClosestPointTo(Vector p, Point2d *puv, bool converge) { + ClosestPointTo(p, &(puv->x), &(puv->y), converge); +} +void SSurface::ClosestPointTo(Vector p, double *u, double *v, bool converge) { + // A few special cases first; when control points are coincident the + // derivative goes to zero at the conrol points, and would result in + // nonconvergence. We avoid that here, and also guarantee a consistent + // (u, v) (of the infinitely many possible in one parameter). + if(p.Equals(ctrl[0] [0] )) { *u = 0; *v = 0; return; } + if(p.Equals(ctrl[degm][0] )) { *u = 1; *v = 0; return; } + if(p.Equals(ctrl[degm][degn])) { *u = 1; *v = 1; return; } + if(p.Equals(ctrl[0] [degn])) { *u = 0; *v = 1; return; } + + // And planes are trivial, so don't waste time iterating over those. + if(degm == 1 && degn == 1) { + Vector orig = ctrl[0][0], + bu = (ctrl[1][0]).Minus(orig), + bv = (ctrl[0][1]).Minus(orig); + if((ctrl[1][1]).Equals(orig.Plus(bu).Plus(bv))) { + Vector dp = p.Minus(orig); + *u = dp.Dot(bu) / bu.MagSquared(); + *v = dp.Dot(bv) / bv.MagSquared(); + return; + } + } + + // Try whatever the previous guess was. This is likely to do something + // good if we're working our way along a curve or something else where + // we project successive points that are close to each other; something + // like a 20% speedup empirically. + if(converge) { + double ut = cached.x, vt = cached.y; + if(ClosestPointNewton(p, &ut, &vt, converge)) { + cached.x = *u = ut; + cached.y = *v = vt; + return; + } + } + + // Search for a reasonable initial guess + int i, j; + double minDist = VERY_POSITIVE; + int res = (max(degm, degn) == 2) ? 7 : 20; + for(i = 0; i < res; i++) { + for(j = 0; j < res; j++) { + double tryu = (i + 0.5)/res, tryv = (j + 0.5)/res; + + Vector tryp = PointAt(tryu, tryv); + double d = (tryp.Minus(p)).Magnitude(); + if(d < minDist) { + *u = tryu; + *v = tryv; + minDist = d; + } + } + } + + if(ClosestPointNewton(p, u, v, converge)) { + cached.x = *u; + cached.y = *v; + return; + } + + // If we failed to converge, then at least don't return NaN. + if(isnan(*u) || isnan(*v)) { + *u = *v = 0; + } +} + +bool SSurface::ClosestPointNewton(Vector p, double *u, double *v, bool converge) +{ + // Initial guess is in u, v; refine by Newton iteration. + Vector p0 = Vector::From(0, 0, 0); + for(int i = 0; i < (converge ? 25 : 5); i++) { + p0 = PointAt(*u, *v); + if(converge) { + if(p0.Equals(p, RATPOLY_EPS)) { + return true; + } + } + + Vector tu, tv; + TangentsAt(*u, *v, &tu, &tv); + + // Project the point into a plane through p0, with basis tu, tv; a + // second-order thing would converge faster but needs second + // derivatives. + Vector dp = p.Minus(p0); + double du = dp.Dot(tu), dv = dp.Dot(tv); + *u += du / (tu.MagSquared()); + *v += dv / (tv.MagSquared()); + } + + if(converge) { + dbp("didn't converge"); + dbp("have %.3f %.3f %.3f", CO(p0)); + dbp("want %.3f %.3f %.3f", CO(p)); + dbp("distance = %g", (p.Minus(p0)).Magnitude()); + } + return false; +} + +bool SSurface::PointIntersectingLine(Vector p0, Vector p1, double *u, double *v) +{ + int i; + for(i = 0; i < 15; i++) { + Vector pi, p, tu, tv; + p = PointAt(*u, *v); + TangentsAt(*u, *v, &tu, &tv); + + Vector n = (tu.Cross(tv)).WithMagnitude(1); + double d = p.Dot(n); + + bool parallel; + pi = Vector::AtIntersectionOfPlaneAndLine(n, d, p0, p1, ¶llel); + if(parallel) break; + + // Check for convergence + if(pi.Equals(p, RATPOLY_EPS)) return true; + + // Adjust our guess and iterate + Vector dp = pi.Minus(p); + double du = dp.Dot(tu), dv = dp.Dot(tv); + *u += du / (tu.MagSquared()); + *v += dv / (tv.MagSquared()); + } +// dbp("didn't converge (surface intersecting line)"); + return false; +} + +Vector SSurface::ClosestPointOnThisAndSurface(SSurface *srf2, Vector p) { + // This is untested. + int i, j; + Point2d puv[2]; + SSurface *srf[2] = { this, srf2 }; + + for(j = 0; j < 2; j++) { + (srf[j])->ClosestPointTo(p, &(puv[j]), false); + } + + for(i = 0; i < 10; i++) { + Vector tu[2], tv[2], cp[2], n[2]; + double d[2]; + + for(j = 0; j < 2; j++) { + (srf[j])->TangentsAt(puv[j].x, puv[j].y, &(tu[j]), &(tv[j])); + + cp[j] = (srf[j])->PointAt(puv[j]); + + n[j] = ((tu[j]).Cross(tv[j])).WithMagnitude(1); + d[j] = (n[j]).Dot(cp[j]); + } + + if((cp[0]).Equals(cp[1], RATPOLY_EPS)) break; + + Vector p0 = Vector::AtIntersectionOfPlanes(n[0], d[0], n[1], d[1]), + dp = (n[0]).Cross(n[1]); + + Vector pc = p.ClosestPointOnLine(p0, dp); + + // Adjust our guess and iterate + for(j = 0; j < 2; j++) { + Vector dc = pc.Minus(cp[j]); + double du = dc.Dot(tu[j]), dv = dc.Dot(tv[j]); + puv[j].x += du / ((tu[j]).MagSquared()); + puv[j].y += dv / ((tv[j]).MagSquared()); + } + } + if(i >= 10) { + dbp("this and srf, didn't converge, d=%g", + (puv[0].Minus(puv[1])).Magnitude()); + } + + // If this converged, then the two points are actually equal. + return ((srf[0])->PointAt(puv[0])).Plus( + ((srf[1])->PointAt(puv[1]))).ScaledBy(0.5); +} + +void SSurface::PointOnSurfaces(SSurface *s1, SSurface *s2, + double *up, double *vp) +{ + double u[3] = { *up, 0, 0 }, v[3] = { *vp, 0, 0 }; + SSurface *srf[3] = { this, s1, s2 }; + + // Get initial guesses for (u, v) in the other surfaces + Vector p = PointAt(*u, *v); + (srf[1])->ClosestPointTo(p, &(u[1]), &(v[1]), false); + (srf[2])->ClosestPointTo(p, &(u[2]), &(v[2]), false); + + int i, j; + for(i = 0; i < 20; i++) { + // Approximate each surface by a plane + Vector p[3], tu[3], tv[3], n[3]; + double d[3]; + for(j = 0; j < 3; j++) { + p[j] = (srf[j])->PointAt(u[j], v[j]); + (srf[j])->TangentsAt(u[j], v[j], &(tu[j]), &(tv[j])); + n[j] = ((tu[j]).Cross(tv[j])).WithMagnitude(1); + d[j] = (n[j]).Dot(p[j]); + } + + // If a = b and b = c, then does a = c? No, it doesn't. + if((p[0]).Equals(p[1], RATPOLY_EPS) && + (p[1]).Equals(p[2], RATPOLY_EPS) && + (p[2]).Equals(p[0], RATPOLY_EPS)) + { + *up = u[0]; + *vp = v[0]; + return; + } + + bool parallel; + Vector pi = Vector::AtIntersectionOfPlanes(n[0], d[0], + n[1], d[1], + n[2], d[2], ¶llel); + if(parallel) break; + + for(j = 0; j < 3; j++) { + Vector dp = pi.Minus(p[j]); + double du = dp.Dot(tu[j]), dv = dp.Dot(tv[j]); + u[j] += du / (tu[j]).MagSquared(); + v[j] += dv / (tv[j]).MagSquared(); + } + } + dbp("didn't converge (three surfaces intersecting)"); +} + diff --git a/src/srf/raycast.cpp b/src/srf/raycast.cpp new file mode 100644 index 0000000..808287f --- /dev/null +++ b/src/srf/raycast.cpp @@ -0,0 +1,611 @@ +//----------------------------------------------------------------------------- +// Routines for ray-casting: intersecting a line segment or an infinite line +// with a surface or shell. Ray-casting against a shell is used for point-in- +// shell testing, and the intersection of edge line segments against surfaces +// is used to get rough surface-curve intersections, which are later refined +// numerically. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +// Dot product tolerance for perpendicular; this is on the direction cosine, +// so it's about 0.001 degrees. +const double SShell::DOTP_TOL = 1e-5; + +extern int FLAG; + + +double SSurface::DepartureFromCoplanar(void) { + int i, j; + int ia, ja, ib = 0, jb = 0, ic = 0, jc = 0; + double best; + + // Grab three points to define a plane; first choose (0, 0) arbitrarily. + ia = ja = 0; + // Then the point farthest from pt a. + best = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + if(i == ia && j == ja) continue; + + double dist = (ctrl[i][j]).Minus(ctrl[ia][ja]).Magnitude(); + if(dist > best) { + best = dist; + ib = i; + jb = j; + } + } + } + // Then biggest magnitude of ab cross ac. + best = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + if(i == ia && j == ja) continue; + if(i == ib && j == jb) continue; + + double mag = + ((ctrl[ia][ja].Minus(ctrl[ib][jb]))).Cross( + (ctrl[ia][ja].Minus(ctrl[i ][j ]))).Magnitude(); + if(mag > best) { + best = mag; + ic = i; + jc = j; + } + } + } + + Vector n = ((ctrl[ia][ja].Minus(ctrl[ib][jb]))).Cross( + (ctrl[ia][ja].Minus(ctrl[ic][jc]))); + n = n.WithMagnitude(1); + double d = (ctrl[ia][ja]).Dot(n); + + // Finally, calculate the deviation from each point to the plane. + double farthest = VERY_NEGATIVE; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + double dist = fabs(n.Dot(ctrl[i][j]) - d); + if(dist > farthest) { + farthest = dist; + } + } + } + return farthest; +} + +void SSurface::WeightControlPoints(void) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = (ctrl[i][j]).ScaledBy(weight[i][j]); + } + } +} +void SSurface::UnWeightControlPoints(void) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = (ctrl[i][j]).ScaledBy(1.0/weight[i][j]); + } + } +} +void SSurface::CopyRowOrCol(bool row, int this_ij, SSurface *src, int src_ij) { + if(row) { + int j; + for(j = 0; j <= degn; j++) { + ctrl [this_ij][j] = src->ctrl [src_ij][j]; + weight[this_ij][j] = src->weight[src_ij][j]; + } + } else { + int i; + for(i = 0; i <= degm; i++) { + ctrl [i][this_ij] = src->ctrl [i][src_ij]; + weight[i][this_ij] = src->weight[i][src_ij]; + } + } +} +void SSurface::BlendRowOrCol(bool row, int this_ij, SSurface *a, int a_ij, + SSurface *b, int b_ij) +{ + if(row) { + int j; + for(j = 0; j <= degn; j++) { + Vector c = (a->ctrl [a_ij][j]).Plus(b->ctrl [b_ij][j]); + double w = (a->weight[a_ij][j] + b->weight[b_ij][j]); + ctrl [this_ij][j] = c.ScaledBy(0.5); + weight[this_ij][j] = w / 2; + } + } else { + int i; + for(i = 0; i <= degm; i++) { + Vector c = (a->ctrl [i][a_ij]).Plus(b->ctrl [i][b_ij]); + double w = (a->weight[i][a_ij] + b->weight[i][b_ij]); + ctrl [i][this_ij] = c.ScaledBy(0.5); + weight[i][this_ij] = w / 2; + } + } +} +void SSurface::SplitInHalf(bool byU, SSurface *sa, SSurface *sb) { + sa->degm = sb->degm = degm; + sa->degn = sb->degn = degn; + + // by de Casteljau's algorithm in a projective space; so we must work + // on points (w*x, w*y, w*z, w) + WeightControlPoints(); + + switch(byU ? degm : degn) { + case 1: + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 1, this, 1); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 0, this, 0, this, 1); + break; + + case 2: + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 2, this, 2); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 1, this, 1, this, 2); + + sa->BlendRowOrCol(byU, 2, sa, 1, sb, 1); + sb->BlendRowOrCol(byU, 0, sa, 1, sb, 1); + break; + + case 3: { + SSurface st; + st.degm = degm; st.degn = degn; + + sa->CopyRowOrCol (byU, 0, this, 0); + sb->CopyRowOrCol (byU, 3, this, 3); + + sa->BlendRowOrCol(byU, 1, this, 0, this, 1); + sb->BlendRowOrCol(byU, 2, this, 2, this, 3); + st. BlendRowOrCol(byU, 0, this, 1, this, 2); // scratch var + + sa->BlendRowOrCol(byU, 2, sa, 1, &st, 0); + sb->BlendRowOrCol(byU, 1, sb, 2, &st, 0); + + sa->BlendRowOrCol(byU, 3, sa, 2, sb, 1); + sb->BlendRowOrCol(byU, 0, sa, 2, sb, 1); + break; + } + + default: oops(); + } + + sa->UnWeightControlPoints(); + sb->UnWeightControlPoints(); + UnWeightControlPoints(); +} + +//----------------------------------------------------------------------------- +// Find all points where the indicated finite (if segment) or infinite (if not +// segment) line intersects our surface. Report them in uv space in the list. +// We first do a bounding box check; if the line doesn't intersect, then we're +// done. If it does, then we check how small our surface is. If it's big, +// then we subdivide into quarters and recurse. If it's small, then we refine +// by Newton's method and record the point. +//----------------------------------------------------------------------------- +void SSurface::AllPointsIntersectingUntrimmed(Vector a, Vector b, + int *cnt, int *level, + List *l, bool segment, + SSurface *sorig) +{ + // Test if the line intersects our axis-aligned bounding box; if no, then + // no possibility of an intersection + if(LineEntirelyOutsideBbox(a, b, segment)) return; + + if(*cnt > 2000) { + dbp("!!! too many subdivisions (level=%d)!", *level); + dbp("degm = %d degn = %d", degm, degn); + return; + } + (*cnt)++; + + // If we might intersect, and the surface is small, then switch to Newton + // iterations. + if(DepartureFromCoplanar() < 0.2*SS.ChordTolMm()) { + Vector p = (ctrl[0 ][0 ]).Plus( + ctrl[0 ][degn]).Plus( + ctrl[degm][0 ]).Plus( + ctrl[degm][degn]).ScaledBy(0.25); + Inter inter; + sorig->ClosestPointTo(p, &(inter.p.x), &(inter.p.y), false); + if(sorig->PointIntersectingLine(a, b, &(inter.p.x), &(inter.p.y))) { + Vector p = sorig->PointAt(inter.p.x, inter.p.y); + // Debug check, verify that the point lies in both surfaces + // (which it ought to, since the surfaces should be coincident) + double u, v; + ClosestPointTo(p, &u, &v); + l->Add(&inter); + } else { + // Might not converge if line is almost tangent to surface... + } + return; + } + + // But the surface is big, so split it, alternating by u and v + SSurface surf0, surf1; + SplitInHalf((*level & 1) == 0, &surf0, &surf1); + + int nextLevel = (*level) + 1; + (*level) = nextLevel; + surf0.AllPointsIntersectingUntrimmed(a, b, cnt, level, l, segment, sorig); + (*level) = nextLevel; + surf1.AllPointsIntersectingUntrimmed(a, b, cnt, level, l, segment, sorig); +} + +//----------------------------------------------------------------------------- +// Find all points where a line through a and b intersects our surface, and +// add them to the list. If seg is true then report only intersections that +// lie within the finite line segment (not including the endpoints); otherwise +// we work along the infinite line. And we report either just intersections +// inside the trim curve, or any intersection with u, v in [0, 1]. And we +// either disregard or report tangent points. +//----------------------------------------------------------------------------- +void SSurface::AllPointsIntersecting(Vector a, Vector b, + List *l, + bool seg, bool trimmed, bool inclTangent) +{ + if(LineEntirelyOutsideBbox(a, b, seg)) return; + + Vector ba = b.Minus(a); + double bam = ba.Magnitude(); + + List inters = {}; + + // All the intersections between the line and the surface; either special + // cases that we can quickly solve in closed form, or general numerical. + Vector center, axis, start, finish; + double radius; + if(degm == 1 && degn == 1) { + // Against a plane, easy. + Vector n = NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(PointAt(0, 0)); + // Trim to line segment now if requested, don't generate points that + // would just get discarded later. + if(!seg || + (n.Dot(a) > d + LENGTH_EPS && n.Dot(b) < d - LENGTH_EPS) || + (n.Dot(b) > d + LENGTH_EPS && n.Dot(a) < d - LENGTH_EPS)) + { + Vector p = Vector::AtIntersectionOfPlaneAndLine(n, d, a, b, NULL); + Inter inter; + ClosestPointTo(p, &(inter.p.x), &(inter.p.y)); + inters.Add(&inter); + } + } else if(IsCylinder(&axis, ¢er, &radius, &start, &finish)) { + // This one can be solved in closed form too. + Vector ab = b.Minus(a); + if(axis.Cross(ab).Magnitude() < LENGTH_EPS) { + // edge is parallel to axis of cylinder, no intersection points + return; + } + // A coordinate system centered at the center of the circle, with + // the edge under test horizontal + Vector u, v, n = axis.WithMagnitude(1); + u = (ab.Minus(n.ScaledBy(ab.Dot(n)))).WithMagnitude(1); + v = n.Cross(u); + Point2d ap = (a.Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + bp = (b.Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + sp = (start. Minus(center)).DotInToCsys(u, v, n).ProjectXy(), + fp = (finish.Minus(center)).DotInToCsys(u, v, n).ProjectXy(); + + double thetas = atan2(sp.y, sp.x), thetaf = atan2(fp.y, fp.x); + + Point2d ip[2]; + int ip_n = 0; + if(fabs(fabs(ap.y) - radius) < LENGTH_EPS) { + // tangent + if(inclTangent) { + ip[0] = Point2d::From(0, ap.y); + ip_n = 1; + } + } else if(fabs(ap.y) < radius) { + // two intersections + double xint = sqrt(radius*radius - ap.y*ap.y); + ip[0] = Point2d::From(-xint, ap.y); + ip[1] = Point2d::From( xint, ap.y); + ip_n = 2; + } + int i; + for(i = 0; i < ip_n; i++) { + double t = (ip[i].Minus(ap)).DivPivoting(bp.Minus(ap)); + // This is a point on the circle; but is it on the arc? + Point2d pp = ap.Plus((bp.Minus(ap)).ScaledBy(t)); + double theta = atan2(pp.y, pp.x); + double dp = WRAP_SYMMETRIC(theta - thetas, 2*PI), + df = WRAP_SYMMETRIC(thetaf - thetas, 2*PI); + double tol = LENGTH_EPS/radius; + + if((df > 0 && ((dp < -tol) || (dp > df + tol))) || + (df < 0 && ((dp > tol) || (dp < df - tol)))) + { + continue; + } + + Vector p = a.Plus((b.Minus(a)).ScaledBy(t)); + + Inter inter; + ClosestPointTo(p, &(inter.p.x), &(inter.p.y)); + inters.Add(&inter); + } + } else { + // General numerical solution by subdivision, fallback + int cnt = 0, level = 0; + AllPointsIntersectingUntrimmed(a, b, &cnt, &level, &inters, seg, this); + } + + // Remove duplicate intersection points + inters.ClearTags(); + int i, j; + for(i = 0; i < inters.n; i++) { + for(j = i + 1; j < inters.n; j++) { + if(inters.elem[i].p.Equals(inters.elem[j].p)) { + inters.elem[j].tag = 1; + } + } + } + inters.RemoveTagged(); + + for(i = 0; i < inters.n; i++) { + Point2d puv = inters.elem[i].p; + + // Make sure the point lies within the finite line segment + Vector pxyz = PointAt(puv.x, puv.y); + double t = (pxyz.Minus(a)).DivPivoting(ba); + if(seg && (t > 1 - LENGTH_EPS/bam || t < LENGTH_EPS/bam)) { + continue; + } + + // And that it lies inside our trim region + Point2d dummy = { 0, 0 }; + int c = (bsp) ? bsp->ClassifyPoint(puv, dummy, this) : SBspUv::OUTSIDE; + if(trimmed && c == SBspUv::OUTSIDE) { + continue; + } + + // It does, so generate the intersection + SInter si; + si.p = pxyz; + si.surfNormal = NormalAt(puv.x, puv.y); + si.pinter = puv; + si.srf = this; + si.onEdge = (c != SBspUv::INSIDE); + l->Add(&si); + } + + inters.Clear(); +} + +void SShell::AllPointsIntersecting(Vector a, Vector b, + List *il, + bool seg, bool trimmed, bool inclTangent) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + ss->AllPointsIntersecting(a, b, il, seg, trimmed, inclTangent); + } +} + + + +int SShell::ClassifyRegion(Vector edge_n, Vector inter_surf_n, + Vector edge_surf_n) +{ + double dot = inter_surf_n.DirectionCosineWith(edge_n); + if(fabs(dot) < DOTP_TOL) { + // The edge's surface and the edge-on-face surface + // are coincident. Test the edge's surface normal + // to see if it's with same or opposite normals. + if(inter_surf_n.Dot(edge_surf_n) > 0) { + return COINC_SAME; + } else { + return COINC_OPP; + } + } else if(dot > 0) { + return OUTSIDE; + } else { + return INSIDE; + } +} + +//----------------------------------------------------------------------------- +// Does the given point lie on our shell? There are many cases; inside and +// outside are obvious, but then there's all the edge-on-edge and edge-on-face +// possibilities. +// +// To calculate, we intersect a ray through p with our shell, and classify +// using the closest intersection point. If the ray hits a surface on edge, +// then just reattempt in a different random direction. +//----------------------------------------------------------------------------- +bool SShell::ClassifyEdge(int *indir, int *outdir, + Vector ea, Vector eb, + Vector p, + Vector edge_n_in, Vector edge_n_out, Vector surf_n) +{ + List l = {}; + + srand(0); + + // First, check for edge-on-edge + int edge_inters = 0; + Vector inter_surf_n[2], inter_edge_n[2]; + SSurface *srf; + for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { + if(srf->LineEntirelyOutsideBbox(ea, eb, true)) continue; + + SEdgeList *sel = &(srf->edges); + SEdge *se; + for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { + if((ea.Equals(se->a) && eb.Equals(se->b)) || + (eb.Equals(se->a) && ea.Equals(se->b)) || + p.OnLineSegment(se->a, se->b)) + { + if(edge_inters < 2) { + // Edge-on-edge case + Point2d pm; + srf->ClosestPointTo(p, &pm, false); + // A vector normal to the surface, at the intersection point + inter_surf_n[edge_inters] = srf->NormalAt(pm); + // A vector normal to the intersecting edge (but within the + // intersecting surface) at the intersection point, pointing + // out. + inter_edge_n[edge_inters] = + (inter_surf_n[edge_inters]).Cross((se->b).Minus((se->a))); + } + + edge_inters++; + } + } + } + + if(edge_inters == 2) { + // TODO, make this use the appropriate curved normals + double dotp[2]; + for(int i = 0; i < 2; i++) { + dotp[i] = edge_n_out.DirectionCosineWith(inter_surf_n[i]); + } + + if(fabs(dotp[1]) < DOTP_TOL) { + swap(dotp[0], dotp[1]); + swap(inter_surf_n[0], inter_surf_n[1]); + swap(inter_edge_n[0], inter_edge_n[1]); + } + + int coinc = (surf_n.Dot(inter_surf_n[0])) > 0 ? COINC_SAME : COINC_OPP; + + if(fabs(dotp[0]) < DOTP_TOL && fabs(dotp[1]) < DOTP_TOL) { + // This is actually an edge on face case, just that the face + // is split into two pieces joining at our edge. + *indir = coinc; + *outdir = coinc; + } else if(fabs(dotp[0]) < DOTP_TOL && dotp[1] > DOTP_TOL) { + if(edge_n_out.Dot(inter_edge_n[0]) > 0) { + *indir = coinc; + *outdir = OUTSIDE; + } else { + *indir = INSIDE; + *outdir = coinc; + } + } else if(fabs(dotp[0]) < DOTP_TOL && dotp[1] < -DOTP_TOL) { + if(edge_n_out.Dot(inter_edge_n[0]) > 0) { + *indir = coinc; + *outdir = INSIDE; + } else { + *indir = OUTSIDE; + *outdir = coinc; + } + } else if(dotp[0] > DOTP_TOL && dotp[1] > DOTP_TOL) { + *indir = INSIDE; + *outdir = OUTSIDE; + } else if(dotp[0] < -DOTP_TOL && dotp[1] < -DOTP_TOL) { + *indir = OUTSIDE; + *outdir = INSIDE; + } else { + // Edge is tangent to the shell at shell's edge, so can't be + // a boundary of the surface. + return false; + } + return true; + } + + if(edge_inters != 0) dbp("bad, edge_inters=%d", edge_inters); + + // Next, check for edge-on-surface. The ray-casting for edge-inside-shell + // would catch this too, but test separately, for speed (since many edges + // are on surface) and for numerical stability, so we don't pick up + // the additional error from the line intersection. + + for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { + if(srf->LineEntirelyOutsideBbox(ea, eb, true)) continue; + + Point2d puv; + srf->ClosestPointTo(p, &(puv.x), &(puv.y), false); + Vector pp = srf->PointAt(puv); + + if((pp.Minus(p)).Magnitude() > LENGTH_EPS) continue; + Point2d dummy = { 0, 0 }; + int c = (srf->bsp) ? srf->bsp->ClassifyPoint(puv, dummy, srf) : SBspUv::OUTSIDE; + if(c == SBspUv::OUTSIDE) continue; + + // Edge-on-face (unless edge-on-edge above superceded) + Point2d pin, pout; + srf->ClosestPointTo(p.Plus(edge_n_in), &pin, false); + srf->ClosestPointTo(p.Plus(edge_n_out), &pout, false); + + Vector surf_n_in = srf->NormalAt(pin), + surf_n_out = srf->NormalAt(pout); + + *indir = ClassifyRegion(edge_n_in, surf_n_in, surf_n); + *outdir = ClassifyRegion(edge_n_out, surf_n_out, surf_n); + return true; + } + + // Edge is not on face or on edge; so it's either inside or outside + // the shell, and we'll determine which by raycasting. + int cnt = 0; + for(;;) { + // Cast a ray in a random direction (two-sided so that we test if + // the point lies on a surface, but use only one side for in/out + // testing) + Vector ray = Vector::From(Random(1), Random(1), Random(1)); + + AllPointsIntersecting( + p.Minus(ray), p.Plus(ray), &l, false, true, false); + + // no intersections means it's outside + *indir = OUTSIDE; + *outdir = OUTSIDE; + double dmin = VERY_POSITIVE; + bool onEdge = false; + edge_inters = 0; + + SInter *si; + for(si = l.First(); si; si = l.NextAfter(si)) { + double t = ((si->p).Minus(p)).DivPivoting(ray); + if(t*ray.Magnitude() < -LENGTH_EPS) { + // wrong side, doesn't count + continue; + } + + double d = ((si->p).Minus(p)).Magnitude(); + + // We actually should never hit this case; it should have been + // handled above. + if(d < LENGTH_EPS && si->onEdge) { + edge_inters++; + } + + if(d < dmin) { + dmin = d; + // Edge does not lie on surface; either strictly inside + // or strictly outside + if((si->surfNormal).Dot(ray) > 0) { + *indir = INSIDE; + *outdir = INSIDE; + } else { + *indir = OUTSIDE; + *outdir = OUTSIDE; + } + onEdge = si->onEdge; + } + } + l.Clear(); + + // If the point being tested lies exactly on an edge of the shell, + // then our ray always lies on edge, and that's okay. Otherwise + // try again in a different random direction. + if(!onEdge) break; + if(cnt++ > 5) { + dbp("can't find a ray that doesn't hit on edge!"); + dbp("on edge = %d, edge_inters = %d", onEdge, edge_inters); + SS.nakedEdges.AddEdge(ea, eb); + break; + } + } + + return true; +} + diff --git a/src/srf/surface.cpp b/src/srf/surface.cpp new file mode 100644 index 0000000..3f3178c --- /dev/null +++ b/src/srf/surface.cpp @@ -0,0 +1,881 @@ +//----------------------------------------------------------------------------- +// Anything involving surfaces and sets of surfaces (i.e., shells); except +// for the real math, which is in ratpoly.cpp. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +SSurface SSurface::FromExtrusionOf(SBezier *sb, Vector t0, Vector t1) { + SSurface ret = {}; + + ret.degm = sb->deg; + ret.degn = 1; + + int i; + for(i = 0; i <= ret.degm; i++) { + ret.ctrl[i][0] = (sb->ctrl[i]).Plus(t0); + ret.weight[i][0] = sb->weight[i]; + + ret.ctrl[i][1] = (sb->ctrl[i]).Plus(t1); + ret.weight[i][1] = sb->weight[i]; + } + + return ret; +} + +bool SSurface::IsExtrusion(SBezier *of, Vector *alongp) { + int i; + + if(degn != 1) return false; + + Vector along = (ctrl[0][1]).Minus(ctrl[0][0]); + for(i = 0; i <= degm; i++) { + if((fabs(weight[i][1] - weight[i][0]) < LENGTH_EPS) && + ((ctrl[i][1]).Minus(ctrl[i][0])).Equals(along)) + { + continue; + } + return false; + } + + // yes, we are a surface of extrusion; copy the original curve and return + if(of) { + for(i = 0; i <= degm; i++) { + of->weight[i] = weight[i][0]; + of->ctrl[i] = ctrl[i][0]; + } + of->deg = degm; + *alongp = along; + } + return true; +} + +bool SSurface::IsCylinder(Vector *axis, Vector *center, double *r, + Vector *start, Vector *finish) +{ + SBezier sb; + if(!IsExtrusion(&sb, axis)) return false; + if(!sb.IsCircle(*axis, center, r)) return false; + + *start = sb.ctrl[0]; + *finish = sb.ctrl[2]; + return true; +} + +SSurface SSurface::FromRevolutionOf(SBezier *sb, Vector pt, Vector axis, + double thetas, double thetaf) +{ + SSurface ret = {}; + + + ret.degm = sb->deg; + ret.degn = 2; + + double dtheta = fabs(WRAP_SYMMETRIC(thetaf - thetas, 2*PI)); + + // We now wish to revolve the curve about the z axis + int i; + for(i = 0; i <= ret.degm; i++) { + Vector p = sb->ctrl[i]; + + Vector ps = p.RotatedAbout(pt, axis, thetas), + pf = p.RotatedAbout(pt, axis, thetaf); + + Vector ct; + if(ps.Equals(pf)) { + // Degenerate case: a control point lies on the axis of revolution, + // so we get three coincident control points. + ct = ps; + } else { + // Normal case, the control point sweeps out a circle. + Vector c = ps.ClosestPointOnLine(pt, axis); + + Vector rs = ps.Minus(c), + rf = pf.Minus(c); + + Vector ts = axis.Cross(rs), + tf = axis.Cross(rf); + + ct = Vector::AtIntersectionOfLines(ps, ps.Plus(ts), + pf, pf.Plus(tf), + NULL, NULL, NULL); + } + + ret.ctrl[i][0] = ps; + ret.ctrl[i][1] = ct; + ret.ctrl[i][2] = pf; + + ret.weight[i][0] = sb->weight[i]; + ret.weight[i][1] = sb->weight[i]*cos(dtheta/2); + ret.weight[i][2] = sb->weight[i]; + } + + return ret; +} + +SSurface SSurface::FromPlane(Vector pt, Vector u, Vector v) { + SSurface ret = {}; + + ret.degm = 1; + ret.degn = 1; + + ret.weight[0][0] = ret.weight[0][1] = 1; + ret.weight[1][0] = ret.weight[1][1] = 1; + + ret.ctrl[0][0] = pt; + ret.ctrl[0][1] = pt.Plus(u); + ret.ctrl[1][0] = pt.Plus(v); + ret.ctrl[1][1] = pt.Plus(v).Plus(u); + + return ret; +} + +SSurface SSurface::FromTransformationOf(SSurface *a, + Vector t, Quaternion q, double scale, + bool includingTrims) +{ + SSurface ret = {}; + + ret.h = a->h; + ret.color = a->color; + ret.face = a->face; + + ret.degm = a->degm; + ret.degn = a->degn; + int i, j; + for(i = 0; i <= 3; i++) { + for(j = 0; j <= 3; j++) { + ret.ctrl[i][j] = a->ctrl[i][j]; + ret.ctrl[i][j] = (ret.ctrl[i][j]).ScaledBy(scale); + ret.ctrl[i][j] = (q.Rotate(ret.ctrl[i][j])).Plus(t); + + ret.weight[i][j] = a->weight[i][j]; + } + } + + if(includingTrims) { + STrimBy *stb; + for(stb = a->trim.First(); stb; stb = a->trim.NextAfter(stb)) { + STrimBy n = *stb; + n.start = n.start.ScaledBy(scale); + n.finish = n.finish.ScaledBy(scale); + n.start = (q.Rotate(n.start)) .Plus(t); + n.finish = (q.Rotate(n.finish)).Plus(t); + ret.trim.Add(&n); + } + } + + if(scale < 0) { + // If we mirror every surface of a shell, then it will end up inside + // out. So fix that here. + ret.Reverse(); + } + + return ret; +} + +void SSurface::GetAxisAlignedBounding(Vector *ptMax, Vector *ptMin) { + *ptMax = Vector::From(VERY_NEGATIVE, VERY_NEGATIVE, VERY_NEGATIVE); + *ptMin = Vector::From(VERY_POSITIVE, VERY_POSITIVE, VERY_POSITIVE); + + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + (ctrl[i][j]).MakeMaxMin(ptMax, ptMin); + } + } +} + +bool SSurface::LineEntirelyOutsideBbox(Vector a, Vector b, bool segment) { + Vector amax, amin; + GetAxisAlignedBounding(&amax, &amin); + if(!Vector::BoundingBoxIntersectsLine(amax, amin, a, b, segment)) { + // The line segment could fail to intersect the bbox, but lie entirely + // within it and intersect the surface. + if(a.OutsideAndNotOn(amax, amin) && b.OutsideAndNotOn(amax, amin)) { + return true; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// Generate the piecewise linear approximation of the trim stb, which applies +// to the curve sc. +//----------------------------------------------------------------------------- +void SSurface::MakeTrimEdgesInto(SEdgeList *sel, int flags, + SCurve *sc, STrimBy *stb) +{ + Vector prev = Vector::From(0, 0, 0); + bool inCurve = false, empty = true; + double u = 0, v = 0; + + int i, first, last, increment; + if(stb->backwards) { + first = sc->pts.n - 1; + last = 0; + increment = -1; + } else { + first = 0; + last = sc->pts.n - 1; + increment = 1; + } + for(i = first; i != (last + increment); i += increment) { + Vector tpt, *pt = &(sc->pts.elem[i].p); + + if(flags & AS_UV) { + ClosestPointTo(*pt, &u, &v); + tpt = Vector::From(u, v, 0); + } else { + tpt = *pt; + } + + if(inCurve) { + sel->AddEdge(prev, tpt, sc->h.v, stb->backwards); + empty = false; + } + + prev = tpt; // either uv or xyz, depending on flags + + if(pt->Equals(stb->start)) inCurve = true; + if(pt->Equals(stb->finish)) inCurve = false; + } + if(inCurve) dbp("trim was unterminated"); + if(empty) dbp("trim was empty"); +} + +//----------------------------------------------------------------------------- +// Generate all of our trim curves, in piecewise linear form. We can do +// so in either uv or xyz coordinates. And if requested, then we can use +// the split curves from useCurvesFrom instead of the curves in our own +// shell. +//----------------------------------------------------------------------------- +void SSurface::MakeEdgesInto(SShell *shell, SEdgeList *sel, int flags, + SShell *useCurvesFrom) +{ + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + SCurve *sc = shell->curve.FindById(stb->curve); + + // We have the option to use the curves from another shell; this + // is relevant when generating the coincident edges while doing the + // Booleans, since the curves from the output shell will be split + // against any intersecting surfaces (and the originals aren't). + if(useCurvesFrom) { + sc = useCurvesFrom->curve.FindById(sc->newH); + } + + MakeTrimEdgesInto(sel, flags, sc, stb); + } +} + +//----------------------------------------------------------------------------- +// Compute the exact tangent to the intersection curve between two surfaces, +// by taking the cross product of the surface normals. We choose the direction +// of this tangent so that its dot product with dir is positive. +//----------------------------------------------------------------------------- +Vector SSurface::ExactSurfaceTangentAt(Vector p, SSurface *srfA, SSurface *srfB, + Vector dir) +{ + Point2d puva, puvb; + srfA->ClosestPointTo(p, &puva); + srfB->ClosestPointTo(p, &puvb); + Vector ts = (srfA->NormalAt(puva)).Cross( + (srfB->NormalAt(puvb))); + ts = ts.WithMagnitude(1); + if(ts.Dot(dir) < 0) { + ts = ts.ScaledBy(-1); + } + return ts; +} + +//----------------------------------------------------------------------------- +// Report our trim curves. If a trim curve is exact and sbl is not null, then +// add its exact form to sbl. Otherwise, add its piecewise linearization to +// sel. +//----------------------------------------------------------------------------- +void SSurface::MakeSectionEdgesInto(SShell *shell, + SEdgeList *sel, SBezierList *sbl) +{ + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + SCurve *sc = shell->curve.FindById(stb->curve); + SBezier *sb = &(sc->exact); + + if(sbl && sc->isExact && (sb->deg != 1 || !sel)) { + double ts, tf; + if(stb->backwards) { + sb->ClosestPointTo(stb->start, &tf); + sb->ClosestPointTo(stb->finish, &ts); + } else { + sb->ClosestPointTo(stb->start, &ts); + sb->ClosestPointTo(stb->finish, &tf); + } + SBezier junk_bef, keep_aft; + sb->SplitAt(ts, &junk_bef, &keep_aft); + // In the kept piece, the range that used to go from ts to 1 + // now goes from 0 to 1; so rescale tf appropriately. + tf = (tf - ts)/(1 - ts); + + SBezier keep_bef, junk_aft; + keep_aft.SplitAt(tf, &keep_bef, &junk_aft); + + sbl->l.Add(&keep_bef); + } else if(sbl && !sel && !sc->isExact) { + // We must approximate this trim curve, as piecewise cubic sections. + SSurface *srfA = shell->surface.FindById(sc->surfA), + *srfB = shell->surface.FindById(sc->surfB); + + Vector s = stb->backwards ? stb->finish : stb->start, + f = stb->backwards ? stb->start : stb->finish; + + int sp, fp; + for(sp = 0; sp < sc->pts.n; sp++) { + if(s.Equals(sc->pts.elem[sp].p)) break; + } + if(sp >= sc->pts.n) return; + for(fp = sp; fp < sc->pts.n; fp++) { + if(f.Equals(sc->pts.elem[fp].p)) break; + } + if(fp >= sc->pts.n) return; + // So now the curve we want goes from elem[sp] to elem[fp] + + while(sp < fp) { + // Initially, we'll try approximating the entire trim curve + // as a single Bezier segment + int fpt = fp; + + for(;;) { + // So construct a cubic Bezier with the correct endpoints + // and tangents for the current span. + Vector st = sc->pts.elem[sp].p, + ft = sc->pts.elem[fpt].p, + sf = ft.Minus(st); + double m = sf.Magnitude() / 3; + + Vector stan = ExactSurfaceTangentAt(st, srfA, srfB, sf), + ftan = ExactSurfaceTangentAt(ft, srfA, srfB, sf); + + SBezier sb = SBezier::From(st, + st.Plus (stan.WithMagnitude(m)), + ft.Minus(ftan.WithMagnitude(m)), + ft); + + // And test how much this curve deviates from the + // intermediate points (if any). + int i; + bool tooFar = false; + for(i = sp + 1; i <= (fpt - 1); i++) { + Vector p = sc->pts.elem[i].p; + double t; + sb.ClosestPointTo(p, &t, false); + Vector pp = sb.PointAt(t); + if((pp.Minus(p)).Magnitude() > SS.ChordTolMm()/2) { + tooFar = true; + break; + } + } + + if(tooFar) { + // Deviates by too much, so try a shorter span + fpt--; + continue; + } else { + // Okay, so use this piece and break. + sbl->l.Add(&sb); + break; + } + } + + // And continue interpolating, starting wherever the curve + // we just generated finishes. + sp = fpt; + } + } else { + if(sel) MakeTrimEdgesInto(sel, AS_XYZ, sc, stb); + } + } +} + +void SSurface::TriangulateInto(SShell *shell, SMesh *sm) { + SEdgeList el = {}; + + MakeEdgesInto(shell, &el, AS_UV); + + SPolygon poly = {}; + if(el.AssemblePolygon(&poly, NULL, true)) { + int i, start = sm->l.n; + if(degm == 1 && degn == 1) { + // A surface with curvature along one direction only; so + // choose the triangulation with chords that lie as much + // as possible within the surface. And since the trim curves + // have been pwl'd to within the desired chord tol, that will + // produce a surface good to within roughly that tol. + // + // If this is just a plane (degree (1, 1)) then the triangulation + // code will notice that, and not bother checking chord tols. + poly.UvTriangulateInto(sm, this); + } else { + // A surface with compound curvature. So we must overlay a + // two-dimensional grid, and triangulate around that. + poly.UvGridTriangulateInto(sm, this); + } + + STriMeta meta = { face, color }; + for(i = start; i < sm->l.n; i++) { + STriangle *st = &(sm->l.elem[i]); + st->meta = meta; + if(st->meta.color.alpha != 255) sm->isTransparent = true; + st->an = NormalAt(st->a.x, st->a.y); + st->bn = NormalAt(st->b.x, st->b.y); + st->cn = NormalAt(st->c.x, st->c.y); + st->a = PointAt(st->a.x, st->a.y); + st->b = PointAt(st->b.x, st->b.y); + st->c = PointAt(st->c.x, st->c.y); + // Works out that my chosen contour direction is inconsistent with + // the triangle direction, sigh. + st->FlipNormal(); + } + } else { + dbp("failed to assemble polygon to trim nurbs surface in uv space"); + } + + el.Clear(); + poly.Clear(); +} + +//----------------------------------------------------------------------------- +// Reverse the parametrisation of one of our dimensions, which flips the +// normal. We therefore must reverse all our trim curves too. The uv +// coordinates change, but trim curves are stored as xyz so nothing happens +//----------------------------------------------------------------------------- +void SSurface::Reverse(void) { + int i, j; + for(i = 0; i < (degm+1)/2; i++) { + for(j = 0; j <= degn; j++) { + swap(ctrl[i][j], ctrl[degm-i][j]); + swap(weight[i][j], weight[degm-i][j]); + } + } + + STrimBy *stb; + for(stb = trim.First(); stb; stb = trim.NextAfter(stb)) { + stb->backwards = !stb->backwards; + swap(stb->start, stb->finish); + } +} + +void SSurface::ScaleSelfBy(double s) { + int i, j; + for(i = 0; i <= degm; i++) { + for(j = 0; j <= degn; j++) { + ctrl[i][j] = ctrl[i][j].ScaledBy(s); + } + } +} + +void SSurface::Clear(void) { + trim.Clear(); +} + +typedef struct { + hSCurve hc; + hSSurface hs; +} TrimLine; + +void SShell::MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1, RgbaColor color) +{ + // Make the extrusion direction consistent with respect to the normal + // of the sketch we're extruding. + if((t0.Minus(t1)).Dot(sbls->normal) < 0) { + swap(t0, t1); + } + + // Define a coordinate system to contain the original sketch, and get + // a bounding box in that csys + Vector n = sbls->normal.ScaledBy(-1); + Vector u = n.Normal(0), v = n.Normal(1); + Vector orig = sbls->point; + double umax = 1e-10, umin = 1e10; + sbls->GetBoundingProjd(u, orig, &umin, &umax); + double vmax = 1e-10, vmin = 1e10; + sbls->GetBoundingProjd(v, orig, &vmin, &vmax); + // and now fix things up so that all u and v lie between 0 and 1 + orig = orig.Plus(u.ScaledBy(umin)); + orig = orig.Plus(v.ScaledBy(vmin)); + u = u.ScaledBy(umax - umin); + v = v.ScaledBy(vmax - vmin); + + // So we can now generate the top and bottom surfaces of the extrusion, + // planes within a translated (and maybe mirrored) version of that csys. + SSurface s0, s1; + s0 = SSurface::FromPlane(orig.Plus(t0), u, v); + s0.color = color; + s1 = SSurface::FromPlane(orig.Plus(t1).Plus(u), u.ScaledBy(-1), v); + s1.color = color; + hSSurface hs0 = surface.AddAndAssignId(&s0), + hs1 = surface.AddAndAssignId(&s1); + + // Now go through the input curves. For each one, generate its surface + // of extrusion, its two translated trim curves, and one trim line. We + // go through by loops so that we can assign the lines correctly. + SBezierLoop *sbl; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + SBezier *sb; + List trimLines = {}; + + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + // Generate the surface of extrusion of this curve, and add + // it to the list + SSurface ss = SSurface::FromExtrusionOf(sb, t0, t1); + ss.color = color; + hSSurface hsext = surface.AddAndAssignId(&ss); + + // Translate the curve by t0 and t1 to produce two trim curves + SCurve sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(t0, Quaternion::IDENTITY, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = hs0; + sc.surfB = hsext; + hSCurve hc0 = curve.AddAndAssignId(&sc); + + sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(t1, Quaternion::IDENTITY, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = hs1; + sc.surfB = hsext; + hSCurve hc1 = curve.AddAndAssignId(&sc); + + STrimBy stb0, stb1; + // The translated curves trim the flat top and bottom surfaces. + stb0 = STrimBy::EntireCurve(this, hc0, false); + stb1 = STrimBy::EntireCurve(this, hc1, true); + (surface.FindById(hs0))->trim.Add(&stb0); + (surface.FindById(hs1))->trim.Add(&stb1); + + // The translated curves also trim the surface of extrusion. + stb0 = STrimBy::EntireCurve(this, hc0, true); + stb1 = STrimBy::EntireCurve(this, hc1, false); + (surface.FindById(hsext))->trim.Add(&stb0); + (surface.FindById(hsext))->trim.Add(&stb1); + + // And form the trim line + Vector pt = sb->Finish(); + sc = {}; + sc.isExact = true; + sc.exact = SBezier::From(pt.Plus(t0), pt.Plus(t1)); + (sc.exact).MakePwlInto(&(sc.pts)); + hSCurve hl = curve.AddAndAssignId(&sc); + // save this for later + TrimLine tl; + tl.hc = hl; + tl.hs = hsext; + trimLines.Add(&tl); + } + + int i; + for(i = 0; i < trimLines.n; i++) { + TrimLine *tl = &(trimLines.elem[i]); + SSurface *ss = surface.FindById(tl->hs); + + TrimLine *tlp = &(trimLines.elem[WRAP(i-1, trimLines.n)]); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, tl->hc, true); + ss->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, tlp->hc, false); + ss->trim.Add(&stb); + + (curve.FindById(tl->hc))->surfA = ss->h; + (curve.FindById(tlp->hc))->surfB = ss->h; + } + trimLines.Clear(); + } +} + + +typedef struct { + hSSurface d[4]; +} Revolved; + +void SShell::MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis, RgbaColor color, Group *group) +{ + SBezierLoop *sbl; + + int i0 = surface.n, i; + + // Normalize the axis direction so that the direction of revolution + // ends up parallel to the normal of the sketch, on the side of the + // axis where the sketch is. + Vector pto; + double md = VERY_NEGATIVE; + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + SBezier *sb; + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + // Choose the point farthest from the axis; we'll get garbage + // if we choose a point that lies on the axis, for example. + // (And our surface will be self-intersecting if the sketch + // spans the axis, so don't worry about that.) + Vector p = sb->Start(); + double d = p.DistanceToLine(pt, axis); + if(d > md) { + md = d; + pto = p; + } + } + } + Vector ptc = pto.ClosestPointOnLine(pt, axis), + up = (pto.Minus(ptc)).WithMagnitude(1), + vp = (sbls->normal).Cross(up); + if(vp.Dot(axis) < 0) { + axis = axis.ScaledBy(-1); + } + + // Now we actually build and trim the surfaces. + for(sbl = sbls->l.First(); sbl; sbl = sbls->l.NextAfter(sbl)) { + int i, j; + SBezier *sb; + List hsl = {}; + + for(sb = sbl->l.First(); sb; sb = sbl->l.NextAfter(sb)) { + Revolved revs; + for(j = 0; j < 4; j++) { + if(sb->deg == 1 && + (sb->ctrl[0]).DistanceToLine(pt, axis) < LENGTH_EPS && + (sb->ctrl[1]).DistanceToLine(pt, axis) < LENGTH_EPS) + { + // This is a line on the axis of revolution; it does + // not contribute a surface. + revs.d[j].v = 0; + } else { + SSurface ss = SSurface::FromRevolutionOf(sb, pt, axis, + (PI/2)*j, + (PI/2)*(j+1)); + ss.color = color; + if(sb->entity != 0) { + hEntity he; + he.v = sb->entity; + hEntity hface = group->Remap(he, Group::REMAP_LINE_TO_FACE); + if(SK.entity.FindByIdNoOops(hface) != NULL) { + ss.face = hface.v; + } + } + revs.d[j] = surface.AddAndAssignId(&ss); + } + } + hsl.Add(&revs); + } + + for(i = 0; i < sbl->l.n; i++) { + Revolved revs = hsl.elem[i], + revsp = hsl.elem[WRAP(i-1, sbl->l.n)]; + + sb = &(sbl->l.elem[i]); + + for(j = 0; j < 4; j++) { + SCurve sc; + Quaternion qs = Quaternion::From(axis, (PI/2)*j); + // we want Q*(x - p) + p = Q*x + (p - Q*p) + Vector ts = pt.Minus(qs.Rotate(pt)); + + // If this input curve generate a surface, then trim that + // surface with the rotated version of the input curve. + if(revs.d[j].v) { + sc = {}; + sc.isExact = true; + sc.exact = sb->TransformedBy(ts, qs, 1.0); + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = revs.d[j]; + sc.surfB = revs.d[WRAP(j-1, 4)]; + + hSCurve hcb = curve.AddAndAssignId(&sc); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, hcb, true); + (surface.FindById(sc.surfA))->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, hcb, false); + (surface.FindById(sc.surfB))->trim.Add(&stb); + } + + // And if this input curve and the one after it both generated + // surfaces, then trim both of those by the appropriate + // circle. + if(revs.d[j].v && revsp.d[j].v) { + SSurface *ss = surface.FindById(revs.d[j]); + + sc = {}; + sc.isExact = true; + sc.exact = SBezier::From(ss->ctrl[0][0], + ss->ctrl[0][1], + ss->ctrl[0][2]); + sc.exact.weight[1] = ss->weight[0][1]; + (sc.exact).MakePwlInto(&(sc.pts)); + sc.surfA = revs.d[j]; + sc.surfB = revsp.d[j]; + + hSCurve hcc = curve.AddAndAssignId(&sc); + + STrimBy stb; + stb = STrimBy::EntireCurve(this, hcc, false); + (surface.FindById(sc.surfA))->trim.Add(&stb); + stb = STrimBy::EntireCurve(this, hcc, true); + (surface.FindById(sc.surfB))->trim.Add(&stb); + } + } + } + + hsl.Clear(); + } + + for(i = i0; i < surface.n; i++) { + SSurface *srf = &(surface.elem[i]); + + // Revolution of a line; this is potentially a plane, which we can + // rewrite to have degree (1, 1). + if(srf->degm == 1 && srf->degn == 2) { + // close start, far start, far finish + Vector cs, fs, ff; + double d0, d1; + d0 = (srf->ctrl[0][0]).DistanceToLine(pt, axis); + d1 = (srf->ctrl[1][0]).DistanceToLine(pt, axis); + + if(d0 > d1) { + cs = srf->ctrl[1][0]; + fs = srf->ctrl[0][0]; + ff = srf->ctrl[0][2]; + } else { + cs = srf->ctrl[0][0]; + fs = srf->ctrl[1][0]; + ff = srf->ctrl[1][2]; + } + + // origin close, origin far + Vector oc = cs.ClosestPointOnLine(pt, axis), + of = fs.ClosestPointOnLine(pt, axis); + + if(oc.Equals(of)) { + // This is a plane, not a (non-degenerate) cone. + Vector oldn = srf->NormalAt(0.5, 0.5); + + Vector u = fs.Minus(of), v; + + v = (axis.Cross(u)).WithMagnitude(1); + + double vm = (ff.Minus(of)).Dot(v); + v = v.ScaledBy(vm); + + srf->degm = 1; + srf->degn = 1; + srf->ctrl[0][0] = of; + srf->ctrl[0][1] = of.Plus(u); + srf->ctrl[1][0] = of.Plus(v); + srf->ctrl[1][1] = of.Plus(u).Plus(v); + srf->weight[0][0] = 1; + srf->weight[0][1] = 1; + srf->weight[1][0] = 1; + srf->weight[1][1] = 1; + + if(oldn.Dot(srf->NormalAt(0.5, 0.5)) < 0) { + swap(srf->ctrl[0][0], srf->ctrl[1][0]); + swap(srf->ctrl[0][1], srf->ctrl[1][1]); + } + continue; + } + + if(fabs(d0 - d1) < LENGTH_EPS) { + // This is a cylinder; so transpose it so that we'll recognize + // it as a surface of extrusion. + SSurface sn = *srf; + + // Transposing u and v flips the normal, so reverse u to + // flip it again and put it back where we started. + sn.degm = 2; + sn.degn = 1; + int dm, dn; + for(dm = 0; dm <= 1; dm++) { + for(dn = 0; dn <= 2; dn++) { + sn.ctrl [dn][dm] = srf->ctrl [1-dm][dn]; + sn.weight[dn][dm] = srf->weight[1-dm][dn]; + } + } + + *srf = sn; + continue; + } + } + + } + +} + +void SShell::MakeFromCopyOf(SShell *a) { + MakeFromTransformationOf(a, + Vector::From(0, 0, 0), Quaternion::IDENTITY, 1.0); +} + +void SShell::MakeFromTransformationOf(SShell *a, + Vector t, Quaternion q, double scale) +{ + booleanFailed = false; + + SSurface *s; + for(s = a->surface.First(); s; s = a->surface.NextAfter(s)) { + SSurface n; + n = SSurface::FromTransformationOf(s, t, q, scale, true); + surface.Add(&n); // keeping the old ID + } + + SCurve *c; + for(c = a->curve.First(); c; c = a->curve.NextAfter(c)) { + SCurve n; + n = SCurve::FromTransformationOf(c, t, q, scale); + curve.Add(&n); // keeping the old ID + } +} + +void SShell::MakeEdgesInto(SEdgeList *sel) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->MakeEdgesInto(this, sel, SSurface::AS_XYZ); + } +} + +void SShell::MakeSectionEdgesInto(Vector n, double d, + SEdgeList *sel, SBezierList *sbl) +{ + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + if(s->CoincidentWithPlane(n, d)) { + s->MakeSectionEdgesInto(this, sel, sbl); + } + } +} + +void SShell::TriangulateInto(SMesh *sm) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->TriangulateInto(this, sm); + } +} + +bool SShell::IsEmpty(void) { + return (surface.n == 0); +} + +void SShell::Clear(void) { + SSurface *s; + for(s = surface.First(); s; s = surface.NextAfter(s)) { + s->Clear(); + } + surface.Clear(); + + SCurve *c; + for(c = curve.First(); c; c = curve.NextAfter(c)) { + c->Clear(); + } + curve.Clear(); +} + diff --git a/src/srf/surface.h b/src/srf/surface.h new file mode 100644 index 0000000..86d69db --- /dev/null +++ b/src/srf/surface.h @@ -0,0 +1,423 @@ +//----------------------------------------------------------------------------- +// Functions relating to rational polynomial surfaces, which are trimmed by +// curves (either rational polynomial curves, or piecewise linear +// approximations to curves of intersection that can't be represented +// exactly in ratpoly form), and assembled into watertight shells. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __SURFACE_H +#define __SURFACE_H + +// Utility functions, Bernstein polynomials of order 1-3 and their derivatives. +double Bernstein(int k, int deg, double t); +double BernsteinDerivative(int k, int deg, double t); + +class SSurface; +class SCurvePt; + +// Utility data structure, a two-dimensional BSP to accelerate polygon +// operations. +class SBspUv { +public: + Point2d a, b; + + SBspUv *pos; + SBspUv *neg; + + SBspUv *more; + + enum { + INSIDE = 100, + OUTSIDE = 200, + EDGE_PARALLEL = 300, + EDGE_ANTIPARALLEL = 400, + EDGE_OTHER = 500 + }; + + static SBspUv *Alloc(void); + static SBspUv *From(SEdgeList *el, SSurface *srf); + + void ScalePoints(Point2d *pt, Point2d *a, Point2d *b, SSurface *srf); + double ScaledSignedDistanceToLine(Point2d pt, Point2d a, Point2d b, + SSurface *srf); + double ScaledDistanceToLine(Point2d pt, Point2d a, Point2d b, bool seg, + SSurface *srf); + + void InsertEdge(Point2d a, Point2d b, SSurface *srf); + static SBspUv *InsertOrCreateEdge(SBspUv *where, const Point2d &ea, const Point2d &eb, SSurface *srf); + int ClassifyPoint(Point2d p, Point2d eb, SSurface *srf); + int ClassifyEdge(Point2d ea, Point2d eb, SSurface *srf); + double MinimumDistanceToEdge(Point2d p, SSurface *srf); +}; + +// Now the data structures to represent a shell of trimmed rational polynomial +// surfaces. + +class SShell; + +class hSSurface { +public: + uint32_t v; +}; + +class hSCurve { +public: + uint32_t v; +}; + +// Stuff for rational polynomial curves, of degree one to three. These are +// our inputs, and are also calculated for certain exact surface-surface +// intersections. +class SBezier { +public: + int tag; + int auxA, auxB; + + int deg; + Vector ctrl[4]; + double weight[4]; + uint32_t entity; + + Vector PointAt(double t); + Vector TangentAt(double t); + void ClosestPointTo(Vector p, double *t, bool converge=true); + void SplitAt(double t, SBezier *bef, SBezier *aft); + bool PointOnThisAndCurve(SBezier *sbb, Vector *p); + + Vector Start(void); + Vector Finish(void); + bool Equals(SBezier *b); + void MakePwlInto(SEdgeList *sel, double chordTol=0); + void MakePwlInto(List *l, double chordTol=0); + void MakePwlInto(SContour *sc, double chordTol=0); + void MakePwlInto(List *l, double chordTol=0); + void MakePwlWorker(List *l, double ta, double tb, double chordTol); + void MakePwlInitialWorker(List *l, double ta, double tb, double chordTol); + + void AllIntersectionsWith(SBezier *sbb, SPointList *spl); + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + void Reverse(void); + + bool IsInPlane(Vector n, double d); + bool IsCircle(Vector axis, Vector *center, double *r); + bool IsRational(void); + + SBezier TransformedBy(Vector t, Quaternion q, double scale); + SBezier InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan); + void ScaleSelfBy(double s); + + static SBezier From(Vector p0, Vector p1, Vector p2, Vector p3); + static SBezier From(Vector p0, Vector p1, Vector p2); + static SBezier From(Vector p0, Vector p1); + static SBezier From(Vector4 p0, Vector4 p1, Vector4 p2, Vector4 p3); + static SBezier From(Vector4 p0, Vector4 p1, Vector4 p2); + static SBezier From(Vector4 p0, Vector4 p1); +}; + +class SBezierList { +public: + List l; + + void Clear(void); + void ScaleSelfBy(double s); + void CullIdenticalBeziers(void); + void AllIntersectionsWith(SBezierList *sblb, SPointList *spl); + bool GetPlaneContainingBeziers(Vector *p, Vector *u, Vector *v, + Vector *notCoplanarAt); +}; + +class SBezierLoop { +public: + int tag; + List l; + + inline void Clear(void) { l.Clear(); } + bool IsClosed(void); + void Reverse(void); + void MakePwlInto(SContour *sc, double chordTol=0); + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + + static SBezierLoop FromCurves(SBezierList *spcl, + bool *allClosed, SEdge *errorAt); +}; + +class SBezierLoopSet { +public: + List l; + Vector normal; + Vector point; + + static SBezierLoopSet From(SBezierList *spcl, SPolygon *poly, + double chordTol, + bool *allClosed, SEdge *errorAt, + SBezierList *openContours); + + void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax); + void MakePwlInto(SPolygon *sp); + void Clear(void); +}; + +class SBezierLoopSetSet { +public: + List l; + + void FindOuterFacesFrom(SBezierList *sbl, SPolygon *spxyz, SSurface *srfuv, + double chordTol, + bool *allClosed, SEdge *notClosedAt, + bool *allCoplanar, Vector *notCoplanarAt, + SBezierList *openContours); + void AddOpenPath(SBezier *sb); + void Clear(void); +}; + +// Stuff for the surface trim curves: piecewise linear +class SCurvePt { +public: + int tag; + Vector p; + bool vertex; +}; + +class SCurve { +public: + hSCurve h; + + // In a Boolean, C = A op B. The curves in A and B get copied into C, and + // therefore must get new hSCurves assigned. For the curves in A and B, + // we use newH to record their new handle in C. + hSCurve newH; + enum { + FROM_A = 100, + FROM_B = 200, + FROM_INTERSECTION = 300 + }; + int source; + + bool isExact; + SBezier exact; + + List pts; + + hSSurface surfA; + hSSurface surfB; + + static SCurve FromTransformationOf(SCurve *a, Vector t, Quaternion q, + double scale); + SCurve MakeCopySplitAgainst(SShell *agnstA, SShell *agnstB, + SSurface *srfA, SSurface *srfB); + void RemoveShortSegments(SSurface *srfA, SSurface *srfB); + SSurface *GetSurfaceA(SShell *a, SShell *b); + SSurface *GetSurfaceB(SShell *a, SShell *b); + + void Clear(void); +}; + +// A segment of a curve by which a surface is trimmed: indicates which curve, +// by its handle, and the starting and ending points of our segment of it. +// The vector out points out of the surface; it, the surface outer normal, +// and a tangent to the beginning of the curve are all orthogonal. +class STrimBy { +public: + hSCurve curve; + bool backwards; + // If a trim runs backwards, then start and finish still correspond to + // the actual start and finish, but they appear in reverse order in + // the referenced curve. + Vector start; + Vector finish; + + static STrimBy EntireCurve(SShell *shell, hSCurve hsc, bool bkwds); +}; + +// An intersection point between a line and a surface +class SInter { +public: + int tag; + Vector p; + SSurface *srf; + Point2d pinter; + Vector surfNormal; // of the intersecting surface, at pinter + bool onEdge; // pinter is on edge of trim poly +}; + +// A rational polynomial surface in Bezier form. +class SSurface { +public: + int tag; + hSSurface h; + + // Same as newH for the curves; record what a surface gets renamed to + // when I copy things over. + hSSurface newH; + + RgbaColor color; + uint32_t face; + + int degm, degn; + Vector ctrl[4][4]; + double weight[4][4]; + + List trim; + + // For testing whether a point (u, v) on the surface lies inside the trim + SBspUv *bsp; + SEdgeList edges; + + // For caching our initial (u, v) when doing Newton iterations to project + // a point into our surface. + Point2d cached; + + static SSurface FromExtrusionOf(SBezier *spc, Vector t0, Vector t1); + static SSurface FromRevolutionOf(SBezier *sb, Vector pt, Vector axis, + double thetas, double thetaf); + static SSurface FromPlane(Vector pt, Vector u, Vector v); + static SSurface FromTransformationOf(SSurface *a, Vector t, Quaternion q, + double scale, + bool includingTrims); + void ScaleSelfBy(double s); + + void EdgeNormalsWithinSurface(Point2d auv, Point2d buv, + Vector *pt, Vector *enin, Vector *enout, + Vector *surfn, + uint32_t auxA, + SShell *shell, SShell *sha, SShell *shb); + void FindChainAvoiding(SEdgeList *src, SEdgeList *dest, SPointList *avoid); + SSurface MakeCopyTrimAgainst(SShell *parent, SShell *a, SShell *b, + SShell *into, int type); + void TrimFromEdgeList(SEdgeList *el, bool asUv); + void IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB, + SShell *into); + void AddExactIntersectionCurve(SBezier *sb, SSurface *srfB, + SShell *agnstA, SShell *agnstB, SShell *into); + + typedef struct { + int tag; + Point2d p; + } Inter; + void WeightControlPoints(void); + void UnWeightControlPoints(void); + void CopyRowOrCol(bool row, int this_ij, SSurface *src, int src_ij); + void BlendRowOrCol(bool row, int this_ij, SSurface *a, int a_ij, + SSurface *b, int b_ij); + double DepartureFromCoplanar(void); + void SplitInHalf(bool byU, SSurface *sa, SSurface *sb); + void AllPointsIntersecting(Vector a, Vector b, + List *l, + bool seg, bool trimmed, bool inclTangent); + void AllPointsIntersectingUntrimmed(Vector a, Vector b, + int *cnt, int *level, + List *l, bool segment, + SSurface *sorig); + + void ClosestPointTo(Vector p, Point2d *puv, bool converge=true); + void ClosestPointTo(Vector p, double *u, double *v, bool converge=true); + bool ClosestPointNewton(Vector p, double *u, double *v, bool converge=true); + + bool PointIntersectingLine(Vector p0, Vector p1, double *u, double *v); + Vector ClosestPointOnThisAndSurface(SSurface *srf2, Vector p); + void PointOnSurfaces(SSurface *s1, SSurface *s2, double *u, double *v); + Vector PointAt(double u, double v); + Vector PointAt(Point2d puv); + void TangentsAt(double u, double v, Vector *tu, Vector *tv); + Vector NormalAt(Point2d puv); + Vector NormalAt(double u, double v); + bool LineEntirelyOutsideBbox(Vector a, Vector b, bool segment); + void GetAxisAlignedBounding(Vector *ptMax, Vector *ptMin); + bool CoincidentWithPlane(Vector n, double d); + bool CoincidentWith(SSurface *ss, bool sameNormal); + bool IsExtrusion(SBezier *of, Vector *along); + bool IsCylinder(Vector *axis, Vector *center, double *r, + Vector *start, Vector *finish); + + void TriangulateInto(SShell *shell, SMesh *sm); + + // these are intended as bitmasks, even though there's just one now + enum { + AS_UV = 0x01, + AS_XYZ = 0x00 + }; + void MakeTrimEdgesInto(SEdgeList *sel, int flags, SCurve *sc, STrimBy *stb); + void MakeEdgesInto(SShell *shell, SEdgeList *sel, int flags, + SShell *useCurvesFrom=NULL); + + Vector ExactSurfaceTangentAt(Vector p, SSurface *srfA, SSurface *srfB, + Vector dir); + void MakeSectionEdgesInto(SShell *shell, SEdgeList *sel, SBezierList *sbl); + void MakeClassifyingBsp(SShell *shell, SShell *useCurvesFrom); + double ChordToleranceForEdge(Vector a, Vector b); + void MakeTriangulationGridInto(List *l, double vs, double vf, + bool swapped); + Vector PointAtMaybeSwapped(double u, double v, bool swapped); + + void Reverse(void); + void Clear(void); +}; + +class SShell { +public: + IdList curve; + IdList surface; + + bool booleanFailed; + + void MakeFromExtrusionOf(SBezierLoopSet *sbls, Vector t0, Vector t1, + RgbaColor color); + void MakeFromRevolutionOf(SBezierLoopSet *sbls, Vector pt, Vector axis, + RgbaColor color, Group *group); + + void MakeFromUnionOf(SShell *a, SShell *b); + void MakeFromDifferenceOf(SShell *a, SShell *b); + enum { + AS_UNION = 10, + AS_DIFFERENCE = 11, + AS_INTERSECT = 12 + }; + void MakeFromBoolean(SShell *a, SShell *b, int type); + void CopyCurvesSplitAgainst(bool opA, SShell *agnst, SShell *into); + void CopySurfacesTrimAgainst(SShell *sha, SShell *shb, SShell *into, + int type); + void MakeIntersectionCurvesAgainst(SShell *against, SShell *into); + void MakeClassifyingBsps(SShell *useCurvesFrom); + void AllPointsIntersecting(Vector a, Vector b, List *il, + bool seg, bool trimmed, bool inclTangent); + void MakeCoincidentEdgesInto(SSurface *proto, bool sameNormal, + SEdgeList *el, SShell *useCurvesFrom); + void RewriteSurfaceHandlesForCurves(SShell *a, SShell *b); + void CleanupAfterBoolean(void); + + // Definitions when classifying regions of a surface; it is either inside, + // outside, or coincident (with parallel or antiparallel normal) with a + // shell. + enum { + INSIDE = 100, + OUTSIDE = 200, + COINC_SAME = 300, + COINC_OPP = 400 + }; + static const double DOTP_TOL; + int ClassifyRegion(Vector edge_n, Vector inter_surf_n, Vector edge_surf_n); + bool ClassifyEdge(int *indir, int *outdir, + Vector ea, Vector eb, + Vector p, + Vector edge_n_in, Vector edge_n_out, Vector surf_n); + + void MakeFromCopyOf(SShell *a); + void MakeFromTransformationOf(SShell *a, + Vector trans, Quaternion q, double scale); + void MakeFromAssemblyOf(SShell *a, SShell *b); + void MergeCoincidentSurfaces(void); + + void TriangulateInto(SMesh *sm); + void MakeEdgesInto(SEdgeList *sel); + void MakeSectionEdgesInto(Vector n, double d, + SEdgeList *sel, SBezierList *sbl); + bool IsEmpty(void); + void RemapFaces(Group *g, int remap); + void Clear(void); +}; + +#endif + diff --git a/src/srf/surfinter.cpp b/src/srf/surfinter.cpp new file mode 100644 index 0000000..79d71cd --- /dev/null +++ b/src/srf/surfinter.cpp @@ -0,0 +1,525 @@ +//----------------------------------------------------------------------------- +// How to intersect two surfaces, to get some type of curve. This is either +// an exact special case (e.g., two planes to make a line), or a numerical +// thing. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +extern int FLAG; + +void SSurface::AddExactIntersectionCurve(SBezier *sb, SSurface *srfB, + SShell *agnstA, SShell *agnstB, SShell *into) +{ + SCurve sc = {}; + // Important to keep the order of (surfA, surfB) consistent; when we later + // rewrite the identifiers, we rewrite surfA from A and surfB from B. + sc.surfA = h; + sc.surfB = srfB->h; + sc.exact = *sb; + sc.isExact = true; + + // Now we have to piecewise linearize the curve. If there's already an + // identical curve in the shell, then follow that pwl exactly, otherwise + // calculate from scratch. + SCurve split, *existing = NULL, *se; + SBezier sbrev = *sb; + sbrev.Reverse(); + bool backwards = false; + for(se = into->curve.First(); se; se = into->curve.NextAfter(se)) { + if(se->isExact) { + if(sb->Equals(&(se->exact))) { + existing = se; + break; + } + if(sbrev.Equals(&(se->exact))) { + existing = se; + backwards = true; + break; + } + } + } + if(existing) { + SCurvePt *v; + for(v = existing->pts.First(); v; v = existing->pts.NextAfter(v)) { + sc.pts.Add(v); + } + if(backwards) sc.pts.Reverse(); + split = sc; + sc = {}; + } else { + sb->MakePwlInto(&(sc.pts)); + // and split the line where it intersects our existing surfaces + split = sc.MakeCopySplitAgainst(agnstA, agnstB, this, srfB); + sc.Clear(); + } + + // Test if the curve lies entirely outside one of the + SCurvePt *scpt; + bool withinA = false, withinB = false; + for(scpt = split.pts.First(); scpt; scpt = split.pts.NextAfter(scpt)) { + double tol = 0.01; + Point2d puv; + ClosestPointTo(scpt->p, &puv); + if(puv.x > -tol && puv.x < 1 + tol && + puv.y > -tol && puv.y < 1 + tol) + { + withinA = true; + } + srfB->ClosestPointTo(scpt->p, &puv); + if(puv.x > -tol && puv.x < 1 + tol && + puv.y > -tol && puv.y < 1 + tol) + { + withinB = true; + } + // Break out early, no sense wasting time if we already have the answer. + if(withinA && withinB) break; + } + if(!(withinA && withinB)) { + // Intersection curve lies entirely outside one of the surfaces, so + // it's fake. + split.Clear(); + return; + } + +#if 0 + if(sb->deg == 2) { + dbp(" "); + SCurvePt *prev = NULL, *v; + dbp("split.pts.n = %d", split.pts.n); + for(v = split.pts.First(); v; v = split.pts.NextAfter(v)) { + if(prev) { + Vector e = (prev->p).Minus(v->p).WithMagnitude(0); + SS.nakedEdges.AddEdge((prev->p).Plus(e), (v->p).Minus(e)); + } + prev = v; + } + } +#endif // 0 + // Nothing should be generating zero-len edges. + if((sb->Start()).Equals(sb->Finish())) oops(); + + split.source = SCurve::FROM_INTERSECTION; + into->curve.AddAndAssignId(&split); +} + +void SSurface::IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB, + SShell *into) +{ + Vector amax, amin, bmax, bmin; + GetAxisAlignedBounding(&amax, &amin); + b->GetAxisAlignedBounding(&bmax, &bmin); + + if(Vector::BoundingBoxesDisjoint(amax, amin, bmax, bmin)) { + // They cannot possibly intersect, no curves to generate + return; + } + + Vector alongt, alongb; + SBezier oft, ofb; + bool isExtdt = this->IsExtrusion(&oft, &alongt), + isExtdb = b->IsExtrusion(&ofb, &alongb); + + if(degm == 1 && degn == 1 && b->degm == 1 && b->degn == 1) { + // Line-line intersection; it's a plane or nothing. + Vector na = NormalAt(0, 0).WithMagnitude(1), + nb = b->NormalAt(0, 0).WithMagnitude(1); + double da = na.Dot(PointAt(0, 0)), + db = nb.Dot(b->PointAt(0, 0)); + + Vector dl = na.Cross(nb); + if(dl.Magnitude() < LENGTH_EPS) return; // parallel planes + dl = dl.WithMagnitude(1); + Vector p = Vector::AtIntersectionOfPlanes(na, da, nb, db); + + // Trim it to the region 0 <= {u,v} <= 1 for each plane; not strictly + // necessary, since line will be split and excess edges culled, but + // this improves speed and robustness. + int i; + double tmax = VERY_POSITIVE, tmin = VERY_NEGATIVE; + for(i = 0; i < 2; i++) { + SSurface *s = (i == 0) ? this : b; + Vector tu, tv; + s->TangentsAt(0, 0, &tu, &tv); + + double up, vp, ud, vd; + s->ClosestPointTo(p, &up, &vp); + ud = (dl.Dot(tu)) / tu.MagSquared(); + vd = (dl.Dot(tv)) / tv.MagSquared(); + + // so u = up + t*ud + // v = vp + t*vd + if(ud > LENGTH_EPS) { + tmin = max(tmin, -up/ud); + tmax = min(tmax, (1 - up)/ud); + } else if(ud < -LENGTH_EPS) { + tmax = min(tmax, -up/ud); + tmin = max(tmin, (1 - up)/ud); + } else { + if(up < -LENGTH_EPS || up > 1 + LENGTH_EPS) { + // u is constant, and outside [0, 1] + tmax = VERY_NEGATIVE; + } + } + if(vd > LENGTH_EPS) { + tmin = max(tmin, -vp/vd); + tmax = min(tmax, (1 - vp)/vd); + } else if(vd < -LENGTH_EPS) { + tmax = min(tmax, -vp/vd); + tmin = max(tmin, (1 - vp)/vd); + } else { + if(vp < -LENGTH_EPS || vp > 1 + LENGTH_EPS) { + // v is constant, and outside [0, 1] + tmax = VERY_NEGATIVE; + } + } + } + + if(tmax > tmin + LENGTH_EPS) { + SBezier bezier = SBezier::From(p.Plus(dl.ScaledBy(tmin)), + p.Plus(dl.ScaledBy(tmax))); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + } else if((degm == 1 && degn == 1 && isExtdb) || + (b->degm == 1 && b->degn == 1 && isExtdt)) + { + // The intersection between a plane and a surface of extrusion + SSurface *splane, *sext; + if(degm == 1 && degn == 1) { + splane = this; + sext = b; + } else { + splane = b; + sext = this; + } + + Vector n = splane->NormalAt(0, 0).WithMagnitude(1), along; + double d = n.Dot(splane->PointAt(0, 0)); + SBezier bezier; + (void)sext->IsExtrusion(&bezier, &along); + + if(fabs(n.Dot(along)) < LENGTH_EPS) { + // Direction of extrusion is parallel to plane; so intersection + // is zero or more lines. Build a line within the plane, and + // normal to the direction of extrusion, and intersect that line + // against the surface; each intersection point corresponds to + // a line. + Vector pm, alu, p0, dp; + // a point halfway along the extrusion + pm = ((sext->ctrl[0][0]).Plus(sext->ctrl[0][1])).ScaledBy(0.5); + alu = along.WithMagnitude(1); + dp = (n.Cross(along)).WithMagnitude(1); + // n, alu, and dp form an orthogonal csys; set n component to + // place it on the plane, alu component to lie halfway along + // extrusion, and dp component doesn't matter so zero + p0 = n.ScaledBy(d).Plus(alu.ScaledBy(pm.Dot(alu))); + + List inters = {}; + sext->AllPointsIntersecting( + p0, p0.Plus(dp), &inters, false, false, true); + + SInter *si; + for(si = inters.First(); si; si = inters.NextAfter(si)) { + Vector al = along.ScaledBy(0.5); + SBezier bezier; + bezier = SBezier::From((si->p).Minus(al), (si->p).Plus(al)); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + + inters.Clear(); + } else { + // Direction of extrusion is not parallel to plane; so + // intersection is projection of extruded curve into our plane. + int i; + for(i = 0; i <= bezier.deg; i++) { + Vector p0 = bezier.ctrl[i], + p1 = p0.Plus(along); + + bezier.ctrl[i] = + Vector::AtIntersectionOfPlaneAndLine(n, d, p0, p1, NULL); + } + + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + } else if(isExtdt && isExtdb && + sqrt(fabs(alongt.Dot(alongb))) > + sqrt(alongt.Magnitude() * alongb.Magnitude()) - LENGTH_EPS) + { + // Two surfaces of extrusion along the same axis. So they might + // intersect along some number of lines parallel to the axis. + Vector axis = alongt.WithMagnitude(1); + + List inters = {}; + List lv = {}; + + double a_axis0 = ( ctrl[0][0]).Dot(axis), + a_axis1 = ( ctrl[0][1]).Dot(axis), + b_axis0 = (b->ctrl[0][0]).Dot(axis), + b_axis1 = (b->ctrl[0][1]).Dot(axis); + + if(a_axis0 > a_axis1) swap(a_axis0, a_axis1); + if(b_axis0 > b_axis1) swap(b_axis0, b_axis1); + + double ab_axis0 = max(a_axis0, b_axis0), + ab_axis1 = min(a_axis1, b_axis1); + + if(fabs(ab_axis0 - ab_axis1) < LENGTH_EPS) { + // The line would be zero-length + return; + } + + Vector axis0 = axis.ScaledBy(ab_axis0), + axis1 = axis.ScaledBy(ab_axis1), + axisc = (axis0.Plus(axis1)).ScaledBy(0.5); + + oft.MakePwlInto(&lv); + + int i; + for(i = 0; i < lv.n - 1; i++) { + Vector pa = lv.elem[i], pb = lv.elem[i+1]; + pa = pa.Minus(axis.ScaledBy(pa.Dot(axis))); + pb = pb.Minus(axis.ScaledBy(pb.Dot(axis))); + pa = pa.Plus(axisc); + pb = pb.Plus(axisc); + + b->AllPointsIntersecting(pa, pb, &inters, true, false, false); + } + + SInter *si; + for(si = inters.First(); si; si = inters.NextAfter(si)) { + Vector p = (si->p).Minus(axis.ScaledBy((si->p).Dot(axis))); + double ub, vb; + b->ClosestPointTo(p, &ub, &vb, true); + SSurface plane; + plane = SSurface::FromPlane(p, axis.Normal(0), axis.Normal(1)); + + b->PointOnSurfaces(this, &plane, &ub, &vb); + + p = b->PointAt(ub, vb); + + SBezier bezier; + bezier = SBezier::From(p.Plus(axis0), p.Plus(axis1)); + AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); + } + + inters.Clear(); + lv.Clear(); + } else { + // Try intersecting the surfaces numerically, by a marching algorithm. + // First, we find all the intersections between a surface and the + // boundary of the other surface. + SPointList spl = {}; + int a; + for(a = 0; a < 2; a++) { + SShell *shA = (a == 0) ? agnstA : agnstB; + SSurface *srfA = (a == 0) ? this : b, + *srfB = (a == 0) ? b : this; + + SEdgeList el = {}; + srfA->MakeEdgesInto(shA, &el, AS_XYZ, NULL); + + SEdge *se; + for(se = el.l.First(); se; se = el.l.NextAfter(se)) { + List lsi = {}; + + srfB->AllPointsIntersecting(se->a, se->b, &lsi, + true, true, false); + if(lsi.n == 0) continue; + + // Find the other surface that this curve trims. + hSCurve hsc = { (uint32_t)se->auxA }; + SCurve *sc = shA->curve.FindById(hsc); + hSSurface hother = (sc->surfA.v == srfA->h.v) ? + sc->surfB : sc->surfA; + SSurface *other = shA->surface.FindById(hother); + + SInter *si; + for(si = lsi.First(); si; si = lsi.NextAfter(si)) { + Vector p = si->p; + double u, v; + srfB->ClosestPointTo(p, &u, &v); + srfB->PointOnSurfaces(srfA, other, &u, &v); + p = srfB->PointAt(u, v); + if(!spl.ContainsPoint(p)) { + SPoint sp; + sp.p = p; + // We also need the edge normal, so that we know in + // which direction to march. + srfA->ClosestPointTo(p, &u, &v); + Vector n = srfA->NormalAt(u, v); + sp.auxv = n.Cross((se->b).Minus(se->a)); + sp.auxv = (sp.auxv).WithMagnitude(1); + + spl.l.Add(&sp); + } + } + lsi.Clear(); + } + + el.Clear(); + } + + while(spl.l.n >= 2) { + SCurve sc = {}; + sc.surfA = h; + sc.surfB = b->h; + sc.isExact = false; + sc.source = SCurve::FROM_INTERSECTION; + + Vector start = spl.l.elem[0].p, + startv = spl.l.elem[0].auxv; + spl.l.ClearTags(); + spl.l.elem[0].tag = 1; + spl.l.RemoveTagged(); + + // Our chord tolerance is whatever the user specified + double maxtol = SS.ChordTolMm(); + int maxsteps = max(300, SS.GetMaxSegments()*3); + + // The curve starts at our starting point. + SCurvePt padd = {}; + padd.vertex = true; + padd.p = start; + sc.pts.Add(&padd); + + Point2d pa, pb; + Vector np, npc = Vector::From(0, 0, 0); + bool fwd = false; + // Better to start with a too-small step, so that we don't miss + // features of the curve entirely. + double tol, step = maxtol; + for(a = 0; a < maxsteps; a++) { + ClosestPointTo(start, &pa); + b->ClosestPointTo(start, &pb); + + Vector na = NormalAt(pa).WithMagnitude(1), + nb = b->NormalAt(pb).WithMagnitude(1); + + if(a == 0) { + Vector dp = nb.Cross(na); + if(dp.Dot(startv) < 0) { + // We want to march in the more inward direction. + fwd = true; + } else { + fwd = false; + } + } + + int i; + for(i = 0; i < 20; i++) { + Vector dp = nb.Cross(na); + if(!fwd) dp = dp.ScaledBy(-1); + dp = dp.WithMagnitude(step); + + np = start.Plus(dp); + npc = ClosestPointOnThisAndSurface(b, np); + tol = (npc.Minus(np)).Magnitude(); + + if(tol > maxtol*0.8) { + step *= 0.90; + } else { + step /= 0.90; + } + + if((tol < maxtol) && (tol > maxtol/2)) { + // If we meet the chord tolerance test, and we're + // not too fine, then we break out. + break; + } + } + + SPoint *sp; + for(sp = spl.l.First(); sp; sp = spl.l.NextAfter(sp)) { + if((sp->p).OnLineSegment(start, npc, 2*SS.ChordTolMm())) { + sp->tag = 1; + a = maxsteps; + npc = sp->p; + } + } + + padd.p = npc; + padd.vertex = (a == maxsteps); + sc.pts.Add(&padd); + + start = npc; + } + + spl.l.RemoveTagged(); + + // And now we split and insert the curve + SCurve split = sc.MakeCopySplitAgainst(agnstA, agnstB, this, b); + sc.Clear(); + into->curve.AddAndAssignId(&split); + } + spl.Clear(); + } +} + +//----------------------------------------------------------------------------- +// Are two surfaces coincident, with the same (or with opposite) normals? +// Currently handles planes only. +//----------------------------------------------------------------------------- +bool SSurface::CoincidentWith(SSurface *ss, bool sameNormal) { + if(degm != 1 || degn != 1) return false; + if(ss->degm != 1 || ss->degn != 1) return false; + + Vector p = ctrl[0][0]; + Vector n = NormalAt(0, 0).WithMagnitude(1); + double d = n.Dot(p); + + if(!ss->CoincidentWithPlane(n, d)) return false; + + Vector n2 = ss->NormalAt(0, 0); + if(sameNormal) { + if(n2.Dot(n) < 0) return false; + } else { + if(n2.Dot(n) > 0) return false; + } + + return true; +} + +bool SSurface::CoincidentWithPlane(Vector n, double d) { + if(degm != 1 || degn != 1) return false; + if(fabs(n.Dot(ctrl[0][0]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[0][1]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[1][0]) - d) > LENGTH_EPS) return false; + if(fabs(n.Dot(ctrl[1][1]) - d) > LENGTH_EPS) return false; + + return true; +} + +//----------------------------------------------------------------------------- +// In our shell, find all surfaces that are coincident with the prototype +// surface (with same or opposite normal, as specified), and copy all of +// their trim polygons into el. The edges are returned in uv coordinates for +// the prototype surface. +//----------------------------------------------------------------------------- +void SShell::MakeCoincidentEdgesInto(SSurface *proto, bool sameNormal, + SEdgeList *el, SShell *useCurvesFrom) +{ + SSurface *ss; + for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { + if(proto->CoincidentWith(ss, sameNormal)) { + ss->MakeEdgesInto(this, el, SSurface::AS_XYZ, useCurvesFrom); + } + } + + SEdge *se; + for(se = el->l.First(); se; se = el->l.NextAfter(se)) { + double ua, va, ub, vb; + proto->ClosestPointTo(se->a, &ua, &va); + proto->ClosestPointTo(se->b, &ub, &vb); + + if(sameNormal) { + se->a = Vector::From(ua, va, 0); + se->b = Vector::From(ub, vb, 0); + } else { + // Flip normal, so flip all edge directions + se->b = Vector::From(ua, va, 0); + se->a = Vector::From(ub, vb, 0); + } + } +} + diff --git a/src/srf/triangulate.cpp b/src/srf/triangulate.cpp new file mode 100644 index 0000000..816eb3e --- /dev/null +++ b/src/srf/triangulate.cpp @@ -0,0 +1,505 @@ +//----------------------------------------------------------------------------- +// Triangulate a surface. If the surface is curved, then we first superimpose +// a grid of quads, with spacing to achieve our chord tolerance. We then +// proceed by ear-clipping; the resulting mesh should be watertight and not +// awful numerically, but has no special properties (Delaunay, etc.). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "../solvespace.h" + +void SPolygon::UvTriangulateInto(SMesh *m, SSurface *srf) { + if(l.n <= 0) return; + + //int64_t in = GetMilliseconds(); + + normal = Vector::From(0, 0, 1); + + while(l.n > 0) { + FixContourDirections(); + l.ClearTags(); + + // Find a top-level contour, and start with that. Then build bridges + // in order to merge all its islands into a single contour. + SContour *top; + for(top = l.First(); top; top = l.NextAfter(top)) { + if(top->timesEnclosed == 0) { + break; + } + } + if(!top) { + dbp("polygon has no top-level contours?"); + return; + } + + // Start with the outer contour + SContour merged = {}; + top->tag = 1; + top->CopyInto(&merged); + (merged.l.n)--; + + // List all of the edges, for testing whether bridges work. + SEdgeList el = {}; + top->MakeEdgesInto(&el); + List vl = {}; + + // And now find all of its holes. Note that we will also find any + // outer contours that lie entirely within this contour, and any + // holes for those contours. But that's okay, because we can merge + // those too. + SContour *sc; + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->timesEnclosed != 1) continue; + if(sc->l.n < 2) continue; + + // Test the midpoint of an edge. Our polygon may not be self- + // intersecting, but two contours may share a vertex; so a + // vertex could be on the edge of another polygon, in which + // case ContainsPointProjdToNormal returns indeterminate. + Vector tp = sc->AnyEdgeMidpoint(); + if(top->ContainsPointProjdToNormal(normal, tp)) { + sc->tag = 2; + sc->MakeEdgesInto(&el); + sc->FindPointWithMinX(); + } + } + +// dbp("finished finding holes: %d ms", (int)(GetMilliseconds() - in)); + for(;;) { + double xmin = 1e10; + SContour *scmin = NULL; + + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->tag != 2) continue; + + if(sc->xminPt.x < xmin) { + xmin = sc->xminPt.x; + scmin = sc; + } + } + if(!scmin) break; + + if(!merged.BridgeToContour(scmin, &el, &vl)) { + dbp("couldn't merge our hole"); + return; + } +// dbp(" bridged to contour: %d ms", (int)(GetMilliseconds() - in)); + scmin->tag = 3; + } +// dbp("finished merging holes: %d ms", (int)(GetMilliseconds() - in)); + + merged.UvTriangulateInto(m, srf); +// dbp("finished ear clippping: %d ms", (int)(GetMilliseconds() - in)); + merged.l.Clear(); + el.Clear(); + vl.Clear(); + + // Careful, need to free the points within the contours, and not just + // the contours themselves. This was a tricky memory leak. + for(sc = l.First(); sc; sc = l.NextAfter(sc)) { + if(sc->tag) { + sc->l.Clear(); + } + } + l.RemoveTagged(); + } +} + +bool SContour::BridgeToContour(SContour *sc, + SEdgeList *avoidEdges, List *avoidPts) +{ + int i, j; + + // Start looking for a bridge on our new hole near its leftmost (min x) + // point. + int sco = 0; + for(i = 0; i < (sc->l.n - 1); i++) { + if((sc->l.elem[i].p).EqualsExactly(sc->xminPt)) { + sco = i; + } + } + + // And start looking on our merged contour at whichever point is nearest + // to the leftmost point of the new segment. + int thiso = 0; + double dmin = 1e10; + for(i = 0; i < l.n; i++) { + Vector p = l.elem[i].p; + double d = (p.Minus(sc->xminPt)).MagSquared(); + if(d < dmin) { + dmin = d; + thiso = i; + } + } + + int thisp, scp; + + Vector a, b, *f; + + // First check if the contours share a point; in that case we should + // merge them there, without a bridge. + for(i = 0; i < l.n; i++) { + thisp = WRAP(i+thiso, l.n); + a = l.elem[thisp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(a)) break; + } + if(f) continue; + + for(j = 0; j < (sc->l.n - 1); j++) { + scp = WRAP(j+sco, (sc->l.n - 1)); + b = sc->l.elem[scp].p; + + if(a.Equals(b)) { + goto haveEdge; + } + } + } + + // If that fails, look for a bridge that does not intersect any edges. + for(i = 0; i < l.n; i++) { + thisp = WRAP(i+thiso, l.n); + a = l.elem[thisp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(a)) break; + } + if(f) continue; + + for(j = 0; j < (sc->l.n - 1); j++) { + scp = WRAP(j+sco, (sc->l.n - 1)); + b = sc->l.elem[scp].p; + + for(f = avoidPts->First(); f; f = avoidPts->NextAfter(f)) { + if(f->Equals(b)) break; + } + if(f) continue; + + if(avoidEdges->AnyEdgeCrossings(a, b) > 0) { + // doesn't work, bridge crosses an existing edge + } else { + goto haveEdge; + } + } + } + + // Tried all the possibilities, didn't find an edge + return false; + +haveEdge: + SContour merged = {}; + for(i = 0; i < l.n; i++) { + merged.AddPoint(l.elem[i].p); + if(i == thisp) { + // less than or equal; need to duplicate the join point + for(j = 0; j <= (sc->l.n - 1); j++) { + int jp = WRAP(j + scp, (sc->l.n - 1)); + merged.AddPoint((sc->l.elem[jp]).p); + } + // and likewise duplicate join point for the outer curve + merged.AddPoint(l.elem[i].p); + } + } + + // and future bridges mustn't cross our bridge, and it's tricky to get + // things right if two bridges come from the same point + avoidEdges->AddEdge(a, b); + avoidPts->Add(&a); + avoidPts->Add(&b); + + l.Clear(); + l = merged.l; + return true; +} + +bool SContour::IsEar(int bp, double scaledEps) { + int ap = WRAP(bp-1, l.n), + cp = WRAP(bp+1, l.n); + + STriangle tr = {}; + tr.a = l.elem[ap].p; + tr.b = l.elem[bp].p; + tr.c = l.elem[cp].p; + + if((tr.a).Equals(tr.c)) { + // This is two coincident and anti-parallel edges. Zero-area, so + // won't generate a real triangle, but we certainly can clip it. + return true; + } + + Vector n = Vector::From(0, 0, -1); + if((tr.Normal()).Dot(n) < scaledEps) { + // This vertex is reflex, or between two collinear edges; either way, + // it's not an ear. + return false; + } + + // Accelerate with an axis-aligned bounding box test + Vector maxv = tr.a, minv = tr.a; + (tr.b).MakeMaxMin(&maxv, &minv); + (tr.c).MakeMaxMin(&maxv, &minv); + + int i; + for(i = 0; i < l.n; i++) { + if(i == ap || i == bp || i == cp) continue; + + Vector p = l.elem[i].p; + if(p.OutsideAndNotOn(maxv, minv)) continue; + + // A point on the edge of the triangle is considered to be inside, + // and therefore makes it a non-ear; but a point on the vertex is + // "outside", since that's necessary to make bridges work. + if(p.EqualsExactly(tr.a)) continue; + if(p.EqualsExactly(tr.b)) continue; + if(p.EqualsExactly(tr.c)) continue; + + if(tr.ContainsPointProjd(n, p)) { + return false; + } + } + return true; +} + +void SContour::ClipEarInto(SMesh *m, int bp, double scaledEps) { + int ap = WRAP(bp-1, l.n), + cp = WRAP(bp+1, l.n); + + STriangle tr = {}; + tr.a = l.elem[ap].p; + tr.b = l.elem[bp].p; + tr.c = l.elem[cp].p; + if(tr.Normal().MagSquared() < scaledEps*scaledEps) { + // A vertex with more than two edges will cause us to generate + // zero-area triangles, which must be culled. + } else { + m->AddTriangle(&tr); + } + + // By deleting the point at bp, we may change the ear-ness of the points + // on either side. + l.elem[ap].ear = SPoint::UNKNOWN; + l.elem[cp].ear = SPoint::UNKNOWN; + + l.ClearTags(); + l.elem[bp].tag = 1; + l.RemoveTagged(); +} + +void SContour::UvTriangulateInto(SMesh *m, SSurface *srf) { + Vector tu, tv; + srf->TangentsAt(0.5, 0.5, &tu, &tv); + double s = sqrt(tu.MagSquared() + tv.MagSquared()); + // We would like to apply our tolerances in xyz; but that would be a lot + // of work, so at least scale the epsilon semi-reasonably. That's + // perfect for square planes, less perfect for anything else. + double scaledEps = LENGTH_EPS / s; + + int i; + // Clean the original contour by removing any zero-length edges. + l.ClearTags(); + for(i = 1; i < l.n; i++) { + if((l.elem[i].p).Equals(l.elem[i-1].p)) { + l.elem[i].tag = 1; + } + } + l.RemoveTagged(); + + // Now calculate the ear-ness of each vertex + for(i = 0; i < l.n; i++) { + (l.elem[i]).ear = IsEar(i, scaledEps) ? SPoint::EAR : SPoint::NOT_EAR; + } + + bool toggle = false; + while(l.n > 3) { + // Some points may have changed ear-ness, so recalculate + for(i = 0; i < l.n; i++) { + if(l.elem[i].ear == SPoint::UNKNOWN) { + (l.elem[i]).ear = IsEar(i, scaledEps) ? + SPoint::EAR : SPoint::NOT_EAR; + } + } + + int bestEar = -1; + double bestChordTol = VERY_POSITIVE; + // Alternate the starting position so we generate strip-like + // triangulations instead of fan-like + toggle = !toggle; + int offset = toggle ? -1 : 0; + for(i = 0; i < l.n; i++) { + int ear = WRAP(i+offset, l.n); + if(l.elem[ear].ear == SPoint::EAR) { + if(srf->degm == 1 && srf->degn == 1) { + // This is a plane; any ear is a good ear. + bestEar = ear; + break; + } + // If we are triangulating a curved surface, then try to + // clip ears that have a small chord tolerance from the + // surface. + Vector prev = l.elem[WRAP((i+offset-1), l.n)].p, + next = l.elem[WRAP((i+offset+1), l.n)].p; + double tol = srf->ChordToleranceForEdge(prev, next); + if(tol < bestChordTol - scaledEps) { + bestEar = ear; + bestChordTol = tol; + } + if(bestChordTol < 0.1*SS.ChordTolMm()) { + break; + } + } + } + if(bestEar < 0) { + dbp("couldn't find an ear! fail"); + return; + } + ClipEarInto(m, bestEar, scaledEps); + } + + ClipEarInto(m, 0, scaledEps); // add the last triangle +} + +double SSurface::ChordToleranceForEdge(Vector a, Vector b) { + Vector as = PointAt(a.x, a.y), bs = PointAt(b.x, b.y); + + double worst = VERY_NEGATIVE; + int i; + for(i = 1; i <= 3; i++) { + Vector p = a. Plus((b. Minus(a )).ScaledBy(i/4.0)), + ps = as.Plus((bs.Minus(as)).ScaledBy(i/4.0)); + + Vector pps = PointAt(p.x, p.y); + worst = max(worst, (pps.Minus(ps)).MagSquared()); + } + return sqrt(worst); +} + +Vector SSurface::PointAtMaybeSwapped(double u, double v, bool swapped) { + if(swapped) { + return PointAt(v, u); + } else { + return PointAt(u, v); + } +} + +void SSurface::MakeTriangulationGridInto(List *l, double vs, double vf, + bool swapped) +{ + double worst = 0; + + // Try piecewise linearizing four curves, at u = 0, 1/3, 2/3, 1; choose + // the worst chord tolerance of any of those. + int i; + for(i = 0; i <= 3; i++) { + double u = i/3.0; + + // This chord test should be identical to the one in SBezier::MakePwl + // to make the piecewise linear edges line up with the grid more or + // less. + Vector ps = PointAtMaybeSwapped(u, vs, swapped), + pf = PointAtMaybeSwapped(u, vf, swapped); + + double vm1 = (2*vs + vf) / 3, + vm2 = (vs + 2*vf) / 3; + + Vector pm1 = PointAtMaybeSwapped(u, vm1, swapped), + pm2 = PointAtMaybeSwapped(u, vm2, swapped); + + worst = max(worst, pm1.DistanceToLine(ps, pf.Minus(ps))); + worst = max(worst, pm2.DistanceToLine(ps, pf.Minus(ps))); + } + + double step = 1.0/SS.GetMaxSegments(); + if((vf - vs) < step || worst < SS.ChordTolMm()) { + l->Add(&vf); + } else { + MakeTriangulationGridInto(l, vs, (vs+vf)/2, swapped); + MakeTriangulationGridInto(l, (vs+vf)/2, vf, swapped); + } +} + +void SPolygon::UvGridTriangulateInto(SMesh *mesh, SSurface *srf) { + SEdgeList orig = {}; + MakeEdgesInto(&orig); + + SEdgeList holes = {}; + + normal = Vector::From(0, 0, 1); + FixContourDirections(); + + // Build a rectangular grid, with horizontal and vertical lines in the + // uv plane. The spacing of these lines is adaptive, so calculate that. + List li, lj; + li = {}; + lj = {}; + double v = 0; + li.Add(&v); + srf->MakeTriangulationGridInto(&li, 0, 1, true); + lj.Add(&v); + srf->MakeTriangulationGridInto(&lj, 0, 1, false); + + // Now iterate over each quad in the grid. If it's outside the polygon, + // or if it intersects the polygon, then we discard it. Otherwise we + // generate two triangles in the mesh, and cut it out of our polygon. + int i, j; + for(i = 0; i < (li.n - 1); i++) { + for(j = 0; j < (lj.n - 1); j++) { + double us = li.elem[i], uf = li.elem[i+1], + vs = lj.elem[j], vf = lj.elem[j+1]; + + Vector a = Vector::From(us, vs, 0), + b = Vector::From(us, vf, 0), + c = Vector::From(uf, vf, 0), + d = Vector::From(uf, vs, 0); + + if(orig.AnyEdgeCrossings(a, b, NULL) || + orig.AnyEdgeCrossings(b, c, NULL) || + orig.AnyEdgeCrossings(c, d, NULL) || + orig.AnyEdgeCrossings(d, a, NULL)) + { + continue; + } + + // There's no intersections, so it doesn't matter which point + // we decide to test. + if(!this->ContainsPoint(a)) { + continue; + } + + // Add the quad to our mesh + STriangle tr = {}; + tr.a = a; + tr.b = b; + tr.c = c; + mesh->AddTriangle(&tr); + tr.a = a; + tr.b = c; + tr.c = d; + mesh->AddTriangle(&tr); + + holes.AddEdge(a, b); + holes.AddEdge(b, c); + holes.AddEdge(c, d); + holes.AddEdge(d, a); + } + } + + holes.CullExtraneousEdges(); + SPolygon hp = {}; + holes.AssemblePolygon(&hp, NULL, true); + + SContour *sc; + for(sc = hp.l.First(); sc; sc = hp.l.NextAfter(sc)) { + l.Add(sc); + } + + orig.Clear(); + holes.Clear(); + li.Clear(); + lj.Clear(); + hp.l.Clear(); + + UvTriangulateInto(mesh, srf); +} + + diff --git a/src/style.cpp b/src/style.cpp new file mode 100644 index 0000000..4d437cd --- /dev/null +++ b/src/style.cpp @@ -0,0 +1,956 @@ +//----------------------------------------------------------------------------- +// Implementation of a cosmetic line style, which determines the color and +// other appearance of a line or curve on-screen and in exported files. Some +// styles are predefined, and others can be created by the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include + +#define DEFAULT_TEXT_HEIGHT 11.5 + +const Style::Default Style::Defaults[] = { + { { ACTIVE_GRP }, "ActiveGrp", RGBf(1.0, 1.0, 1.0), 1.5, 4 }, + { { CONSTRUCTION }, "Construction", RGBf(0.1, 0.7, 0.1), 1.5, 0 }, + { { INACTIVE_GRP }, "InactiveGrp", RGBf(0.5, 0.3, 0.0), 1.5, 3 }, + { { DATUM }, "Datum", RGBf(0.0, 0.8, 0.0), 1.5, 0 }, + { { SOLID_EDGE }, "SolidEdge", RGBf(0.8, 0.8, 0.8), 1.0, 2 }, + { { CONSTRAINT }, "Constraint", RGBf(1.0, 0.1, 1.0), 1.0, 0 }, + { { SELECTED }, "Selected", RGBf(1.0, 0.0, 0.0), 1.5, 0 }, + { { HOVERED }, "Hovered", RGBf(1.0, 1.0, 0.0), 1.5, 0 }, + { { CONTOUR_FILL }, "ContourFill", RGBf(0.0, 0.1, 0.1), 1.0, 0 }, + { { NORMALS }, "Normals", RGBf(0.0, 0.4, 0.4), 1.0, 0 }, + { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 1.0, 0 }, + { { DRAW_ERROR }, "DrawError", RGBf(1.0, 0.0, 0.0), 8.0, 0 }, + { { DIM_SOLID }, "DimSolid", RGBf(0.1, 0.1, 0.1), 1.0, 0 }, + { { HIDDEN_EDGE }, "HiddenEdge", RGBf(0.8, 0.8, 0.8), 2.0, 1 }, + { { OUTLINE }, "Outline", RGBf(0.8, 0.8, 0.8), 3.0, 5 }, + { { 0 }, NULL, RGBf(0.0, 0.0, 0.0), 0.0, 0 } +}; + +std::string Style::CnfColor(const std::string &prefix) { + return "Style_" + prefix + "_Color"; +} +std::string Style::CnfWidth(const std::string &prefix) { + return "Style_" + prefix + "_Width"; +} +std::string Style::CnfTextHeight(const std::string &prefix) { + return "Style_" + prefix + "_TextHeight"; +} + +std::string Style::CnfPrefixToName(const std::string &prefix) { + std::string name = "#def-"; + + for(size_t i = 0; i < prefix.length(); i++) { + if(isupper(prefix[i]) && i != 0) + name += '-'; + name += tolower(prefix[i]); + } + + return name; +} + +void Style::CreateAllDefaultStyles(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + (void)Get(d->h); + } +} + +void Style::CreateDefaultStyle(hStyle h) { + bool isDefaultStyle = true; + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + if(d->h.v == h.v) break; + } + if(!d->h.v) { + // Not a default style; so just create it the same as our default + // active group entity style. + d = &(Defaults[0]); + isDefaultStyle = false; + } + + Style ns = {}; + FillDefaultStyle(&ns, d); + ns.h = h; + if(isDefaultStyle) { + ns.name = CnfPrefixToName(d->cnfPrefix); + } else { + ns.name = "new-custom-style"; + } + + SK.style.Add(&ns); +} + +void Style::FillDefaultStyle(Style *s, const Default *d, bool factory) { + if(d == NULL) d = &Defaults[0]; + s->color = (factory) ? d->color : CnfThawColor(d->color, CnfColor(d->cnfPrefix)); + s->width = (factory) ? d->width : CnfThawFloat((float)(d->width), CnfWidth(d->cnfPrefix)); + s->widthAs = UNITS_AS_PIXELS; + s->textHeight = (factory) ? DEFAULT_TEXT_HEIGHT + : CnfThawFloat(DEFAULT_TEXT_HEIGHT, CnfTextHeight(d->cnfPrefix)); + s->textHeightAs = UNITS_AS_PIXELS; + s->textOrigin = 0; + s->textAngle = 0; + s->visible = true; + s->exportable = true; + s->filled = false; + s->fillColor = RGBf(0.3, 0.3, 0.3); + s->stippleType = (d->h.v == Style::HIDDEN_EDGE) ? Style::STIPPLE_DASH + : Style::STIPPLE_CONTINUOUS; + s->stippleScale = 15.0; + s->zIndex = d->zIndex; +} + +void Style::LoadFactoryDefaults(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + Style *s = Get(d->h); + FillDefaultStyle(s, d, /*factory=*/true); + } + SS.backgroundColor = RGBi(0, 0, 0); + if(SS.bgImage.fromFile) MemFree(SS.bgImage.fromFile); + SS.bgImage.fromFile = NULL; +} + +void Style::FreezeDefaultStyles(void) { + const Default *d; + for(d = &(Defaults[0]); d->h.v; d++) { + CnfFreezeColor(Color(d->h), CnfColor(d->cnfPrefix)); + CnfFreezeFloat((float)Width(d->h), CnfWidth(d->cnfPrefix)); + CnfFreezeFloat((float)TextHeight(d->h), CnfTextHeight(d->cnfPrefix)); + } +} + +uint32_t Style::CreateCustomStyle(bool rememberForUndo) { + if(rememberForUndo) SS.UndoRemember(); + uint32_t vs = max((uint32_t)Style::FIRST_CUSTOM, SK.style.MaximumId() + 1); + hStyle hs = { vs }; + (void)Style::Get(hs); + return hs.v; +} + +void Style::AssignSelectionToStyle(uint32_t v) { + bool showError = false; + SS.GW.GroupSelection(); + + SS.UndoRemember(); + int i; + for(i = 0; i < SS.GW.gs.entities; i++) { + hEntity he = SS.GW.gs.entity[i]; + Entity *e = SK.GetEntity(he); + if(!e->IsStylable()) continue; + + if(!he.isFromRequest()) { + showError = true; + continue; + } + + hRequest hr = he.request(); + Request *r = SK.GetRequest(hr); + r->style.v = v; + SS.MarkGroupDirty(r->group); + } + for(i = 0; i < SS.GW.gs.constraints; i++) { + hConstraint hc = SS.GW.gs.constraint[i]; + Constraint *c = SK.GetConstraint(hc); + if(!c->IsStylable()) continue; + + c->disp.style.v = v; + } + + if(showError) { + Error("Can't assign style to an entity that's derived from another " + "entity; try assigning a style to this entity's parent."); + } + + SS.GW.ClearSelection(); + InvalidateGraphics(); + SS.ScheduleGenerateAll(); + + // And show that style's info screen in the text window. + SS.TW.GoToScreen(TextWindow::SCREEN_STYLE_INFO); + SS.TW.shown.style.v = v; + SS.ScheduleShowTW(); +} + +//----------------------------------------------------------------------------- +// Look up a style by its handle. If that style does not exist, then create +// the style, according to our table of default styles. +//----------------------------------------------------------------------------- +Style *Style::Get(hStyle h) { + if(h.v == 0) h.v = ACTIVE_GRP; + + Style *s = SK.style.FindByIdNoOops(h); + if(s) { + // It exists, good. + return s; + } else { + // It doesn't exist; so we should create it and then return that. + CreateDefaultStyle(h); + return SK.style.FindById(h); + } +} + +//----------------------------------------------------------------------------- +// A couple of wrappers, so that I can call these functions with either an +// hStyle or with the integer corresponding to that hStyle.v. +//----------------------------------------------------------------------------- +RgbaColor Style::Color(int s, bool forExport) { + hStyle hs = { (uint32_t)s }; + return Color(hs, forExport); +} +float Style::Width(int s) { + hStyle hs = { (uint32_t)s }; + return Width(hs); +} + +//----------------------------------------------------------------------------- +// If a color is almost white, then we can rewrite it to black, just so that +// it won't disappear on file formats with a light background. +//----------------------------------------------------------------------------- +RgbaColor Style::RewriteColor(RgbaColor rgbin) { + Vector rgb = Vector::From(rgbin.redF(), rgbin.greenF(), rgbin.blueF()); + rgb = rgb.Minus(Vector::From(1, 1, 1)); + if(rgb.Magnitude() < 0.4 && SS.fixExportColors) { + // This is an almost-white color in a default style, which is + // good for the default on-screen view (black bg) but probably + // not desired in the exported files, which typically are shown + // against white backgrounds. + return RGBi(0, 0, 0); + } else { + return rgbin; + } +} + +//----------------------------------------------------------------------------- +// Return the stroke color associated with our style as 8-bit RGB. +//----------------------------------------------------------------------------- +RgbaColor Style::Color(hStyle h, bool forExport) { + Style *s = Get(h); + if(forExport) { + return RewriteColor(s->color); + } else { + return s->color; + } +} + +//----------------------------------------------------------------------------- +// Return the fill color associated with our style as 8-bit RGB. +//----------------------------------------------------------------------------- +RgbaColor Style::FillColor(hStyle h, bool forExport) { + Style *s = Get(h); + if(forExport) { + return RewriteColor(s->fillColor); + } else { + return s->fillColor; + } +} + +//----------------------------------------------------------------------------- +// Return the width associated with our style in pixels.. +//----------------------------------------------------------------------------- +float Style::Width(hStyle h) { + double r = 1.0; + Style *s = Get(h); + if(s->widthAs == UNITS_AS_MM) { + r = s->width * SS.GW.scale; + } else if(s->widthAs == UNITS_AS_PIXELS) { + r = s->width; + } + // This returns a float because ssglLineWidth expects a float, avoid casts. + return (float)r; +} + +//----------------------------------------------------------------------------- +// Return the width associated with our style in millimeters.. +//----------------------------------------------------------------------------- +double Style::WidthMm(int hs) { + double widthpx = Width(hs); + return widthpx / SS.GW.scale; +} + +//----------------------------------------------------------------------------- +// Return the associated text height, in pixels. +//----------------------------------------------------------------------------- +double Style::TextHeight(hStyle hs) { + Style *s = Get(hs); + if(s->textHeightAs == UNITS_AS_MM) { + return s->textHeight * SS.GW.scale; + } else /* s->textHeightAs == UNITS_AS_PIXELS */ { + return s->textHeight; + } +} + +double Style::DefaultTextHeight() { + hStyle hs { Style::CONSTRAINT }; + return TextHeight(hs); +} + +//----------------------------------------------------------------------------- +// Should lines and curves from this style appear in the output file? Only +// if it's both shown and exportable. +//----------------------------------------------------------------------------- +bool Style::Exportable(int si) { + hStyle hs = { (uint32_t)si }; + Style *s = Get(hs); + return (s->exportable) && (s->visible); +} + +//----------------------------------------------------------------------------- +// Return the appropriate style for our entity. If the entity has a style +// explicitly assigned, then it's that style. Otherwise it's the appropriate +// default style. +//----------------------------------------------------------------------------- +hStyle Style::ForEntity(hEntity he) { + Entity *e = SK.GetEntity(he); + // If the entity has a special style, use that. If that style doesn't + // exist yet, then it will get created automatically later. + if(e->style.v != 0) { + return e->style; + } + + // Otherwise, we use the default rules. + hStyle hs; + if(e->group.v != SS.GW.activeGroup.v) { + hs.v = INACTIVE_GRP; + } else if(e->construction) { + hs.v = CONSTRUCTION; + } else { + hs.v = ACTIVE_GRP; + } + return hs; +} + +int Style::PatternType(hStyle hs) { + Style *s = Get(hs); + return s->stippleType; +} + +double Style::StippleScaleMm(hStyle hs) { + Style *s = Get(hs); + if(s->widthAs == UNITS_AS_MM) { + return s->stippleScale; + } else if(s->widthAs == UNITS_AS_PIXELS) { + return s->stippleScale / SS.GW.scale; + } + return 1.0; +} + +std::string Style::DescriptionString(void) { + if(name.empty()) { + return ssprintf("s%03x-(unnamed)", h.v); + } else { + return ssprintf("s%03x-%s", h.v, name.c_str()); + } +} + + +void TextWindow::ScreenShowListOfStyles(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); +} +void TextWindow::ScreenShowStyleInfo(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_STYLE_INFO); + SS.TW.shown.style.v = v; +} + +void TextWindow::ScreenLoadFactoryDefaultStyles(int link, uint32_t v) { + Style::LoadFactoryDefaults(); + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); +} + +void TextWindow::ScreenCreateCustomStyle(int link, uint32_t v) { + Style::CreateCustomStyle(); +} + +void TextWindow::ScreenChangeBackgroundColor(int link, uint32_t v) { + RgbaColor rgb = SS.backgroundColor; + SS.TW.ShowEditControlWithColorPicker(3, rgb); + SS.TW.edit.meaning = EDIT_BACKGROUND_COLOR; +} + +static int RoundUpToPowerOfTwo(int v) +{ + int i; + for(i = 0; i < 31; i++) { + int vt = (1 << i); + if(vt >= v) { + return vt; + } + } + return 0; +} + +void TextWindow::ScreenBackgroundImage(int link, uint32_t v) { + if(SS.bgImage.fromFile) MemFree(SS.bgImage.fromFile); + SS.bgImage.fromFile = NULL; + + if(link == 'l') { + FILE *f = NULL; + png_struct *png_ptr = NULL; + png_info *info_ptr = NULL; + + std::string importFile; + if(!GetOpenFile(&importFile, "", PngFileFilter)) goto err; + f = ssfopen(importFile, "rb"); + if(!f) goto err; + + uint8_t header[8]; + if (fread(header, 1, 8, f) != 8) + goto err; + if(png_sig_cmp(header, 0, 8)) goto err; + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + NULL, NULL, NULL); + if(!png_ptr) goto err; + + info_ptr = png_create_info_struct(png_ptr); + if(!info_ptr) goto err; + + if(setjmp(png_jmpbuf(png_ptr))) goto err; + + png_init_io(png_ptr, f); + png_set_sig_bytes(png_ptr, 8); + + png_read_png(png_ptr, info_ptr, + PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_STRIP_ALPHA, NULL); + + int w; w = (int)png_get_image_width(png_ptr, info_ptr); + int h; h = (int)png_get_image_height(png_ptr, info_ptr); + uint8_t **rows; rows = png_get_rows(png_ptr, info_ptr); + + // Round to next-highest powers of two, since the textures require + // that. And round up to 4, to guarantee 32-bit alignment. + int rw; rw = max(4, RoundUpToPowerOfTwo(w)); + int rh; rh = max(4, RoundUpToPowerOfTwo(h)); + + SS.bgImage.fromFile = (uint8_t *)MemAlloc(rw*rh*3); + {for(int i = 0; i < h; i++) { + memcpy(SS.bgImage.fromFile + ((h - 1) - i)*(rw*3), rows[i], w*3); + }} + SS.bgImage.w = w; + SS.bgImage.h = h; + SS.bgImage.rw = rw; + SS.bgImage.rh = rh; + SS.bgImage.scale = SS.GW.scale; + SS.bgImage.origin = SS.GW.offset.ScaledBy(-1); + +err: + if(png_ptr) png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + if(f) fclose(f); + } + SS.ScheduleShowTW(); +} + +void TextWindow::ScreenChangeBackgroundImageScale(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_BACKGROUND_IMG_SCALE; + SS.TW.ShowEditControl(10, ssprintf("%.3f", SS.bgImage.scale * SS.MmPerUnit())); +} + +void TextWindow::ShowListOfStyles(void) { + Printf(true, "%Ft color style-name"); + + bool darkbg = false; + Style *s; + for(s = SK.style.First(); s; s = SK.style.NextAfter(s)) { + Printf(false, "%Bp %Bz %Bp %Fl%Ll%f%D%s%E", + darkbg ? 'd' : 'a', + &s->color, + darkbg ? 'd' : 'a', + ScreenShowStyleInfo, s->h.v, + s->DescriptionString().c_str()); + + darkbg = !darkbg; + } + + Printf(true, " %Fl%Ll%fcreate a new custom style%E", + &ScreenCreateCustomStyle); + + Printf(false, ""); + + RgbaColor rgb = SS.backgroundColor; + Printf(false, "%Ft background color (r, g, b)%E"); + Printf(false, "%Ba %@, %@, %@ %Fl%D%f%Ll[change]%E", + rgb.redF(), rgb.greenF(), rgb.blueF(), + top[rows-1] + 2, &ScreenChangeBackgroundColor); + + Printf(false, ""); + Printf(false, "%Ft background bitmap image%E"); + if(SS.bgImage.fromFile) { + Printf(false, "%Ba %Ftwidth:%E %dpx %Ftheight:%E %dpx", + SS.bgImage.w, SS.bgImage.h); + + Printf(false, " %Ftscale:%E %# px/%s %Fl%Ll%f%D[change]%E", + SS.bgImage.scale*SS.MmPerUnit(), + SS.UnitName(), + &ScreenChangeBackgroundImageScale, top[rows-1] + 2); + + Printf(false, "%Ba %Fl%Lc%fclear background image%E", + &ScreenBackgroundImage); + } else { + Printf(false, "%Ba none - %Fl%Ll%fload background image%E", + &ScreenBackgroundImage); + Printf(false, " (bottom left will be center of view)"); + } + + Printf(false, ""); + Printf(false, " %Fl%Ll%fload factory defaults%E", + &ScreenLoadFactoryDefaultStyles); +} + + +void TextWindow::ScreenChangeStyleName(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + SS.TW.ShowEditControl(12, s->name); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = EDIT_STYLE_NAME; +} + +void TextWindow::ScreenDeleteStyle(int link, uint32_t v) { + SS.UndoRemember(); + hStyle hs = { v }; + Style *s = SK.style.FindByIdNoOops(hs); + if(s) { + SK.style.RemoveById(hs); + // And it will get recreated automatically if something is still using + // the style, so no need to do anything else. + } + SS.TW.GoToScreen(SCREEN_LIST_OF_STYLES); + InvalidateGraphics(); +} + +void TextWindow::ScreenChangeStylePatternType(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + s->stippleType = link - 1; +} + +void TextWindow::ScreenChangeStyleMetric(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + double val; + int units, meaning, col; + switch(link) { + case 't': + val = s->textHeight; + units = s->textHeightAs; + col = 10; + meaning = EDIT_STYLE_TEXT_HEIGHT; + break; + + case 's': + val = s->stippleScale; + units = s->widthAs; + col = 17; + meaning = EDIT_STYLE_STIPPLE_PERIOD; + break; + + case 'w': + case 'W': + val = s->width; + units = s->widthAs; + col = 9; + meaning = EDIT_STYLE_WIDTH; + break; + + default: oops(); + } + + std::string edit_value; + if(units == Style::UNITS_AS_PIXELS) { + edit_value = ssprintf("%.2f", val); + } else { + edit_value = SS.MmToString(val); + } + SS.TW.ShowEditControl(col, edit_value); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = meaning; +} + +void TextWindow::ScreenChangeStyleTextAngle(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + SS.TW.ShowEditControl(9, ssprintf("%.2f", s->textAngle)); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = EDIT_STYLE_TEXT_ANGLE; +} + +void TextWindow::ScreenChangeStyleColor(int link, uint32_t v) { + hStyle hs = { v }; + Style *s = Style::Get(hs); + // Same function used for stroke and fill colors + int em; + RgbaColor rgb; + if(link == 's') { + em = EDIT_STYLE_COLOR; + rgb = s->color; + } else if(link == 'f') { + em = EDIT_STYLE_FILL_COLOR; + rgb = s->fillColor; + } else { + oops(); + } + SS.TW.ShowEditControlWithColorPicker(13, rgb); + SS.TW.edit.style = hs; + SS.TW.edit.meaning = em; +} + +void TextWindow::ScreenChangeStyleYesNo(int link, uint32_t v) { + SS.UndoRemember(); + hStyle hs = { v }; + Style *s = Style::Get(hs); + switch(link) { + // Units for the width + case 'w': + if(s->widthAs != Style::UNITS_AS_MM) { + s->widthAs = Style::UNITS_AS_MM; + s->width /= SS.GW.scale; + s->stippleScale /= SS.GW.scale; + } + break; + case 'W': + if(s->widthAs != Style::UNITS_AS_PIXELS) { + s->widthAs = Style::UNITS_AS_PIXELS; + s->width *= SS.GW.scale; + s->stippleScale *= SS.GW.scale; + } + break; + + // Units for the height + case 'g': + if(s->textHeightAs != Style::UNITS_AS_MM) { + s->textHeightAs = Style::UNITS_AS_MM; + s->textHeight /= SS.GW.scale; + } + break; + + case 'G': + if(s->textHeightAs != Style::UNITS_AS_PIXELS) { + s->textHeightAs = Style::UNITS_AS_PIXELS; + s->textHeight *= SS.GW.scale; + } + break; + + case 'e': + s->exportable = !(s->exportable); + break; + + case 'v': + s->visible = !(s->visible); + break; + + case 'f': + s->filled = !(s->filled); + break; + + // Horizontal text alignment + case 'L': + s->textOrigin |= Style::ORIGIN_LEFT; + s->textOrigin &= ~Style::ORIGIN_RIGHT; + break; + case 'H': + s->textOrigin &= ~Style::ORIGIN_LEFT; + s->textOrigin &= ~Style::ORIGIN_RIGHT; + break; + case 'R': + s->textOrigin &= ~Style::ORIGIN_LEFT; + s->textOrigin |= Style::ORIGIN_RIGHT; + break; + + // Vertical text alignment + case 'B': + s->textOrigin |= Style::ORIGIN_BOT; + s->textOrigin &= ~Style::ORIGIN_TOP; + break; + case 'V': + s->textOrigin &= ~Style::ORIGIN_BOT; + s->textOrigin &= ~Style::ORIGIN_TOP; + break; + case 'T': + s->textOrigin &= ~Style::ORIGIN_BOT; + s->textOrigin |= Style::ORIGIN_TOP; + break; + } + InvalidateGraphics(); +} + +bool TextWindow::EditControlDoneForStyles(const char *str) { + Style *s; + switch(edit.meaning) { + case EDIT_STYLE_STIPPLE_PERIOD: + case EDIT_STYLE_TEXT_HEIGHT: + case EDIT_STYLE_WIDTH: { + SS.UndoRemember(); + s = Style::Get(edit.style); + + double v; + int units = (edit.meaning == EDIT_STYLE_TEXT_HEIGHT) ? + s->textHeightAs : s->widthAs; + if(units == Style::UNITS_AS_MM) { + v = SS.StringToMm(str); + } else { + v = atof(str); + } + v = max(0.0, v); + if(edit.meaning == EDIT_STYLE_TEXT_HEIGHT) { + s->textHeight = v; + } else if(edit.meaning == EDIT_STYLE_STIPPLE_PERIOD) { + s->stippleScale = v; + } else { + s->width = v; + } + break; + } + case EDIT_STYLE_TEXT_ANGLE: + SS.UndoRemember(); + s = Style::Get(edit.style); + s->textAngle = WRAP_SYMMETRIC(atof(str), 360); + break; + + case EDIT_BACKGROUND_COLOR: + case EDIT_STYLE_FILL_COLOR: + case EDIT_STYLE_COLOR: { + Vector rgb; + if(sscanf(str, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + if(edit.meaning == EDIT_STYLE_COLOR) { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->color = RGBf(rgb.x, rgb.y, rgb.z); + } else if(edit.meaning == EDIT_STYLE_FILL_COLOR) { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->fillColor = RGBf(rgb.x, rgb.y, rgb.z); + } else { + SS.backgroundColor = RGBf(rgb.x, rgb.y, rgb.z); + } + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_STYLE_NAME: + if(!*str) { + Error("Style name cannot be empty"); + } else { + SS.UndoRemember(); + s = Style::Get(edit.style); + s->name = str; + } + break; + + case EDIT_BACKGROUND_IMG_SCALE: { + Expr *e = Expr::From(str, true); + if(e) { + double ev = e->Eval(); + if(ev < 0.001 || isnan(ev)) { + Error("Scale must not be zero or negative!"); + } else { + SS.bgImage.scale = ev / SS.MmPerUnit(); + } + } + break; + } + default: return false; + } + return true; +} + +void TextWindow::ShowStyleInfo(void) { + Printf(true, "%Fl%f%Ll(back to list of styles)%E", &ScreenShowListOfStyles); + + Style *s = Style::Get(shown.style); + + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(true, "%FtSTYLE %E%s ", s->DescriptionString().c_str()); + } else { + Printf(true, "%FtSTYLE %E%s " + "[%Fl%Ll%D%frename%E/%Fl%Ll%D%fdel%E]", + s->DescriptionString().c_str(), + s->h.v, &ScreenChangeStyleName, + s->h.v, &ScreenDeleteStyle); + } + Printf(true, "%Ft line stroke style%E"); + Printf(false, "%Ba %Ftcolor %E%Bz %Ba (%@, %@, %@) %D%f%Ls%Fl[change]%E", + &s->color, + s->color.redF(), s->color.greenF(), s->color.blueF(), + s->h.v, ScreenChangeStyleColor); + + // The line width, and its units + if(s->widthAs == Style::UNITS_AS_PIXELS) { + Printf(false, " %Ftwidth%E %@ %D%f%Lp%Fl[change]%E", + s->width, + s->h.v, &ScreenChangeStyleMetric, + (s->h.v < Style::FIRST_CUSTOM) ? 'w' : 'W'); + } else { + Printf(false, " %Ftwidth%E %s %D%f%Lp%Fl[change]%E", + SS.MmToString(s->width).c_str(), + s->h.v, &ScreenChangeStyleMetric, + (s->h.v < Style::FIRST_CUSTOM) ? 'w' : 'W'); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + if(s->widthAs == Style::UNITS_AS_PIXELS) { + Printf(false, "%Ba %Ftstipple width%E %@ %D%f%Lp%Fl[change]%E", + s->stippleScale, + s->h.v, &ScreenChangeStyleMetric, 's'); + } else { + Printf(false, "%Ba %Ftstipple width%E %s %D%f%Lp%Fl[change]%E", + SS.MmToString(s->stippleScale).c_str(), + s->h.v, &ScreenChangeStyleMetric, 's'); + } + } + + bool widthpx = (s->widthAs == Style::UNITS_AS_PIXELS); + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(false," %Ftin units of %Fdpixels%E"); + } else { + Printf(false,"%Ba %Ftin units of %Fd" + "%D%f%LW%s pixels%E " + "%D%f%Lw%s %s", + s->h.v, &ScreenChangeStyleYesNo, + widthpx ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + !widthpx ? RADIO_TRUE : RADIO_FALSE, + SS.UnitName()); + } + + Printf(false,"%Ba %Ftstipple type:%E"); + + const size_t patternCount = Style::LAST_STIPPLE + 1; + const char *patternsSource[patternCount] = { + "___________", + "- - - - - -", + "__ __ __ __", + "-.-.-.-.-.-", + "..-..-..-..", + "...........", + "~~~~~~~~~~~", + "__~__~__~__" + }; + std::string patterns[patternCount]; + + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + const char *str = patternsSource[i]; + do { + switch(*str) { + case ' ': patterns[i] += " "; break; + case '.': patterns[i] += "\xEE\x80\x84"; break; + case '_': patterns[i] += "\xEE\x80\x85"; break; + case '-': patterns[i] += "\xEE\x80\x86"; break; + case '~': patterns[i] += "\xEE\x80\x87"; break; + default: oops(); + } + } while(*(++str)); + } + + for(int i = 0; i <= Style::LAST_STIPPLE; i++) { + const char *radio = s->stippleType == i ? RADIO_TRUE : RADIO_FALSE; + Printf(false, "%Bp %D%f%Lp%s %s%E", + (i % 2 == 0) ? 'd' : 'a', + s->h.v, &ScreenChangeStylePatternType, + i + 1, radio, patterns[i].c_str()); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + // The fill color, and whether contours are filled + + Printf(false, ""); + Printf(false, "%Ft contour fill style%E"); + Printf(false, + "%Ba %Ftcolor %E%Bz %Ba (%@, %@, %@) %D%f%Lf%Fl[change]%E", + &s->fillColor, + s->fillColor.redF(), s->fillColor.greenF(), s->fillColor.blueF(), + s->h.v, ScreenChangeStyleColor); + + Printf(false, "%Bd %D%f%Lf%s contours are filled%E", + s->h.v, &ScreenChangeStyleYesNo, + s->filled ? CHECK_TRUE : CHECK_FALSE); + } + + // The text height, and its units + Printf(false, ""); + Printf(false, "%Ft text style%E"); + + if(s->textHeightAs == Style::UNITS_AS_PIXELS) { + Printf(false, "%Ba %Ftheight %E%@ %D%f%Lt%Fl%s%E", + s->textHeight, + s->h.v, &ScreenChangeStyleMetric, + "[change]"); + } else { + Printf(false, "%Ba %Ftheight %E%s %D%f%Lt%Fl%s%E", + SS.MmToString(s->textHeight).c_str(), + s->h.v, &ScreenChangeStyleMetric, + "[change]"); + } + + bool textHeightpx = (s->textHeightAs == Style::UNITS_AS_PIXELS); + if(s->h.v < Style::FIRST_CUSTOM) { + Printf(false,"%Bd %Ftin units of %Fdpixels"); + } else { + Printf(false,"%Bd %Ftin units of %Fd" + "%D%f%LG%s pixels%E " + "%D%f%Lg%s %s", + s->h.v, &ScreenChangeStyleYesNo, + textHeightpx ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + !textHeightpx ? RADIO_TRUE : RADIO_FALSE, + SS.UnitName()); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + Printf(false, "%Ba %Ftangle %E%@ %D%f%Ll%Fl[change]%E", + s->textAngle, + s->h.v, &ScreenChangeStyleTextAngle); + + Printf(false, ""); + Printf(false, "%Ft text comment alignment%E"); + bool neither; + neither = !(s->textOrigin & (Style::ORIGIN_LEFT | Style::ORIGIN_RIGHT)); + Printf(false, "%Ba " + "%D%f%LL%s left%E " + "%D%f%LH%s center%E " + "%D%f%LR%s right%E ", + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_LEFT) ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + neither ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_RIGHT) ? RADIO_TRUE : RADIO_FALSE); + + neither = !(s->textOrigin & (Style::ORIGIN_BOT | Style::ORIGIN_TOP)); + Printf(false, "%Bd " + "%D%f%LB%s bottom%E " + "%D%f%LV%s center%E " + "%D%f%LT%s top%E ", + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_BOT) ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + neither ? RADIO_TRUE : RADIO_FALSE, + s->h.v, &ScreenChangeStyleYesNo, + (s->textOrigin & Style::ORIGIN_TOP) ? RADIO_TRUE : RADIO_FALSE); + } + + if(s->h.v >= Style::FIRST_CUSTOM) { + Printf(false, ""); + + Printf(false, " %Fd%D%f%Lv%s show these objects on screen%E", + s->h.v, &ScreenChangeStyleYesNo, + s->visible ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %Fd%D%f%Le%s export these objects%E", + s->h.v, &ScreenChangeStyleYesNo, + s->exportable ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "To assign lines or curves to this style,"); + Printf(false, "right-click them on the drawing."); + } +} + +void TextWindow::ScreenAssignSelectionToStyle(int link, uint32_t v) { + Style::AssignSelectionToStyle(v); +} + diff --git a/src/system.cpp b/src/system.cpp new file mode 100644 index 0000000..6b222b9 --- /dev/null +++ b/src/system.cpp @@ -0,0 +1,538 @@ +//----------------------------------------------------------------------------- +// Once we've written our constraint equations in the symbolic algebra system, +// these routines linearize them, and solve by a modified Newton's method. +// This also contains the routines to detect non-convergence or inconsistency, +// and report diagnostics to the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +// This tolerance is used to determine whether two (linearized) constraints +// are linearly dependent. If this is too small, then we will attempt to +// solve truly inconsistent systems and fail. But if it's too large, then +// we will give up on legitimate systems like a skinny right angle triangle by +// its hypotenuse and long side. +const double System::RANK_MAG_TOLERANCE = 1e-4; + +// The solver will converge all unknowns to within this tolerance. This must +// always be much less than LENGTH_EPS, and in practice should be much less. +const double System::CONVERGE_TOLERANCE = (LENGTH_EPS/(1e2)); + +bool System::WriteJacobian(int tag) { + int a, i, j; + + j = 0; + for(a = 0; a < param.n; a++) { + if(j >= MAX_UNKNOWNS) return false; + + Param *p = &(param.elem[a]); + if(p->tag != tag) continue; + mat.param[j] = p->h; + j++; + } + mat.n = j; + + i = 0; + for(a = 0; a < eq.n; a++) { + if(i >= MAX_UNKNOWNS) return false; + + Equation *e = &(eq.elem[a]); + if(e->tag != tag) continue; + + mat.eq[i] = e->h; + Expr *f = e->e->DeepCopyWithParamsAsPointers(¶m, &(SK.param)); + f = f->FoldConstants(); + + // Hash table (61 bits) to accelerate generation of zero partials. + uint64_t scoreboard = f->ParamsUsed(); + for(j = 0; j < mat.n; j++) { + Expr *pd; + if(scoreboard & ((uint64_t)1 << (mat.param[j].v % 61)) && + f->DependsOn(mat.param[j])) + { + pd = f->PartialWrt(mat.param[j]); + pd = pd->FoldConstants(); + pd = pd->DeepCopyWithParamsAsPointers(¶m, &(SK.param)); + } else { + pd = Expr::From(0.0); + } + mat.A.sym[i][j] = pd; + } + mat.B.sym[i] = f; + i++; + } + mat.m = i; + + return true; +} + +void System::EvalJacobian(void) { + int i, j; + for(i = 0; i < mat.m; i++) { + for(j = 0; j < mat.n; j++) { + mat.A.num[i][j] = (mat.A.sym[i][j])->Eval(); + } + } +} + +bool System::IsDragged(hParam p) { + hParam *pp; + for(pp = dragged.First(); pp; pp = dragged.NextAfter(pp)) { + if(p.v == pp->v) return true; + } + return false; +} + +void System::SolveBySubstitution(void) { + int i; + for(i = 0; i < eq.n; i++) { + Equation *teq = &(eq.elem[i]); + Expr *tex = teq->e; + + if(tex->op == Expr::MINUS && + tex->a->op == Expr::PARAM && + tex->b->op == Expr::PARAM) + { + hParam a = tex->a->parh; + hParam b = tex->b->parh; + if(!(param.FindByIdNoOops(a) && param.FindByIdNoOops(b))) { + // Don't substitute unless they're both solver params; + // otherwise it's an equation that can be solved immediately, + // or an error to flag later. + continue; + } + + if(IsDragged(a)) { + // A is being dragged, so A should stay, and B should go + hParam t = a; + a = b; + b = t; + } + + int j; + for(j = 0; j < eq.n; j++) { + Equation *req = &(eq.elem[j]); + (req->e)->Substitute(a, b); // A becomes B, B unchanged + } + for(j = 0; j < param.n; j++) { + Param *rp = &(param.elem[j]); + if(rp->substd.v == a.v) { + rp->substd = b; + } + } + Param *ptr = param.FindById(a); + ptr->tag = VAR_SUBSTITUTED; + ptr->substd = b; + + teq->tag = EQ_SUBSTITUTED; + } + } +} + +//----------------------------------------------------------------------------- +// Calculate the rank of the Jacobian matrix, by Gram-Schimdt orthogonalization +// in place. A row (~equation) is considered to be all zeros if its magnitude +// is less than the tolerance RANK_MAG_TOLERANCE. +//----------------------------------------------------------------------------- +int System::CalculateRank(void) { + // Actually work with magnitudes squared, not the magnitudes + double rowMag[MAX_UNKNOWNS] = {}; + double tol = RANK_MAG_TOLERANCE*RANK_MAG_TOLERANCE; + + int i, iprev, j; + int rank = 0; + + for(i = 0; i < mat.m; i++) { + // Subtract off this row's component in the direction of any + // previous rows + for(iprev = 0; iprev < i; iprev++) { + if(rowMag[iprev] <= tol) continue; // ignore zero rows + + double dot = 0; + for(j = 0; j < mat.n; j++) { + dot += (mat.A.num[iprev][j]) * (mat.A.num[i][j]); + } + for(j = 0; j < mat.n; j++) { + mat.A.num[i][j] -= (dot/rowMag[iprev])*mat.A.num[iprev][j]; + } + } + // Our row is now normal to all previous rows; calculate the + // magnitude of what's left + double mag = 0; + for(j = 0; j < mat.n; j++) { + mag += (mat.A.num[i][j]) * (mat.A.num[i][j]); + } + if(mag > tol) { + rank++; + } + rowMag[i] = mag; + } + + return rank; +} + +bool System::TestRank(void) { + EvalJacobian(); + return CalculateRank() == mat.m; +} + +bool System::SolveLinearSystem(double X[], double A[][MAX_UNKNOWNS], + double B[], int n) +{ + // Gaussian elimination, with partial pivoting. It's an error if the + // matrix is singular, because that means two constraints are + // equivalent. + int i, j, ip, jp, imax = 0; + double max, temp; + + for(i = 0; i < n; i++) { + // We are trying eliminate the term in column i, for rows i+1 and + // greater. First, find a pivot (between rows i and N-1). + max = 0; + for(ip = i; ip < n; ip++) { + if(ffabs(A[ip][i]) > max) { + imax = ip; + max = ffabs(A[ip][i]); + } + } + // Don't give up on a singular matrix unless it's really bad; the + // assumption code is responsible for identifying that condition, + // so we're not responsible for reporting that error. + if(ffabs(max) < 1e-20) continue; + + // Swap row imax with row i + for(jp = 0; jp < n; jp++) { + swap(A[i][jp], A[imax][jp]); + } + swap(B[i], B[imax]); + + // For rows i+1 and greater, eliminate the term in column i. + for(ip = i+1; ip < n; ip++) { + temp = A[ip][i]/A[i][i]; + + for(jp = i; jp < n; jp++) { + A[ip][jp] -= temp*(A[i][jp]); + } + B[ip] -= temp*B[i]; + } + } + + // We've put the matrix in upper triangular form, so at this point we + // can solve by back-substitution. + for(i = n - 1; i >= 0; i--) { + if(ffabs(A[i][i]) < 1e-20) continue; + + temp = B[i]; + for(j = n - 1; j > i; j--) { + temp -= X[j]*A[i][j]; + } + X[i] = temp / A[i][i]; + } + + return true; +} + +bool System::SolveLeastSquares(void) { + int r, c, i; + + // Scale the columns; this scale weights the parameters for the least + // squares solve, so that we can encourage the solver to make bigger + // changes in some parameters, and smaller in others. + for(c = 0; c < mat.n; c++) { + if(IsDragged(mat.param[c])) { + // It's least squares, so this parameter doesn't need to be all + // that big to get a large effect. + mat.scale[c] = 1/20.0; + } else { + mat.scale[c] = 1; + } + for(r = 0; r < mat.m; r++) { + mat.A.num[r][c] *= mat.scale[c]; + } + } + + // Write A*A' + for(r = 0; r < mat.m; r++) { + for(c = 0; c < mat.m; c++) { // yes, AAt is square + double sum = 0; + for(i = 0; i < mat.n; i++) { + sum += mat.A.num[r][i]*mat.A.num[c][i]; + } + mat.AAt[r][c] = sum; + } + } + + if(!SolveLinearSystem(mat.Z, mat.AAt, mat.B.num, mat.m)) return false; + + // And multiply that by A' to get our solution. + for(c = 0; c < mat.n; c++) { + double sum = 0; + for(i = 0; i < mat.m; i++) { + sum += mat.A.num[i][c]*mat.Z[i]; + } + mat.X[c] = sum * mat.scale[c]; + } + return true; +} + +bool System::NewtonSolve(int tag) { + + int iter = 0; + bool converged = false; + int i; + + // Evaluate the functions at our operating point. + for(i = 0; i < mat.m; i++) { + mat.B.num[i] = (mat.B.sym[i])->Eval(); + } + do { + // And evaluate the Jacobian at our initial operating point. + EvalJacobian(); + + if(!SolveLeastSquares()) break; + + // Take the Newton step; + // J(x_n) (x_{n+1} - x_n) = 0 - F(x_n) + for(i = 0; i < mat.n; i++) { + Param *p = param.FindById(mat.param[i]); + p->val -= mat.X[i]; + if(isnan(p->val)) { + // Very bad, and clearly not convergent + return false; + } + } + + // Re-evalute the functions, since the params have just changed. + for(i = 0; i < mat.m; i++) { + mat.B.num[i] = (mat.B.sym[i])->Eval(); + } + // Check for convergence + converged = true; + for(i = 0; i < mat.m; i++) { + if(isnan(mat.B.num[i])) { + return false; + } + if(ffabs(mat.B.num[i]) > CONVERGE_TOLERANCE) { + converged = false; + break; + } + } + } while(iter++ < 50 && !converged); + + return converged; +} + +void System::WriteEquationsExceptFor(hConstraint hc, Group *g) { + int i; + // Generate all the equations from constraints in this group + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != g->h.v) continue; + if(c->h.v == hc.v) continue; + + if(c->HasLabel() && c->type != Constraint::COMMENT && + g->allDimsReference) + { + // When all dimensions are reference, we adjust them to display + // the correct value, and then don't generate any equations. + c->ModifyToSatisfy(); + continue; + } + if(g->relaxConstraints && c->type != Constraint::POINTS_COINCIDENT) { + // When the constraints are relaxed, we keep only the point- + // coincident constraints, and the constraints generated by + // the entities and groups. + continue; + } + + c->Generate(&eq); + } + // And the equations from entities + for(i = 0; i < SK.entity.n; i++) { + EntityBase *e = &(SK.entity.elem[i]); + if(e->group.v != g->h.v) continue; + + e->GenerateEquations(&eq); + } + // And from the groups themselves + g->GenerateEquations(&eq); +} + +void System::FindWhichToRemoveToFixJacobian(Group *g, List *bad) { + int a, i; + + for(a = 0; a < 2; a++) { + for(i = 0; i < SK.constraint.n; i++) { + ConstraintBase *c = &(SK.constraint.elem[i]); + if(c->group.v != g->h.v) continue; + if((c->type == Constraint::POINTS_COINCIDENT && a == 0) || + (c->type != Constraint::POINTS_COINCIDENT && a == 1)) + { + // Do the constraints in two passes: first everything but + // the point-coincident constraints, then only those + // constraints (so they appear last in the list). + continue; + } + + param.ClearTags(); + eq.Clear(); + WriteEquationsExceptFor(c->h, g); + eq.ClearTags(); + + // It's a major speedup to solve the easy ones by substitution here, + // and that doesn't break anything. + SolveBySubstitution(); + + WriteJacobian(0); + EvalJacobian(); + + int rank = CalculateRank(); + if(rank == mat.m) { + // We fixed it by removing this constraint + bad->Add(&(c->h)); + } + } + } +} + +int System::Solve(Group *g, int *dof, List *bad, + bool andFindBad, bool andFindFree) +{ + WriteEquationsExceptFor(Constraint::NO_CONSTRAINT, g); + + int i; + bool rankOk; + +/* + dbp("%d equations", eq.n); + for(i = 0; i < eq.n; i++) { + dbp(" %.3f = %s = 0", eq.elem[i].e->Eval(), eq.elem[i].e->Print()); + } + dbp("%d parameters", param.n); + for(i = 0; i < param.n; i++) { + dbp(" param %08x at %.3f", param.elem[i].h.v, param.elem[i].val); + } */ + + // All params and equations are assigned to group zero. + param.ClearTags(); + eq.ClearTags(); + + SolveBySubstitution(); + + // Before solving the big system, see if we can find any equations that + // are soluble alone. This can be a huge speedup. We don't know whether + // the system is consistent yet, but if it isn't then we'll catch that + // later. + int alone = 1; + for(i = 0; i < eq.n; i++) { + Equation *e = &(eq.elem[i]); + if(e->tag != 0) continue; + + hParam hp = e->e->ReferencedParams(¶m); + if(hp.v == Expr::NO_PARAMS.v) continue; + if(hp.v == Expr::MULTIPLE_PARAMS.v) continue; + + Param *p = param.FindById(hp); + if(p->tag != 0) continue; // let rank test catch inconsistency + + e->tag = alone; + p->tag = alone; + WriteJacobian(alone); + if(!NewtonSolve(alone)) { + // Failed to converge, bail out early + goto didnt_converge; + } + alone++; + } + + // Now write the Jacobian for what's left, and do a rank test; that + // tells us if the system is inconsistently constrained. + if(!WriteJacobian(0)) { + return System::TOO_MANY_UNKNOWNS; + } + + rankOk = TestRank(); + + // And do the leftovers as one big system + if(!NewtonSolve(0)) { + goto didnt_converge; + } + + rankOk = TestRank(); + if(!rankOk) { + if(!g->allowRedundant) { + if(andFindBad) FindWhichToRemoveToFixJacobian(g, bad); + } + } else { + // This is not the full Jacobian, but any substitutions or single-eq + // solves removed one equation and one unknown, therefore no effect + // on the number of DOF. + if(dof) *dof = mat.n - mat.m; + + // If requested, find all the free (unbound) variables. This might be + // more than the number of degrees of freedom. Don't always do this, + // because the display would get annoying and it's slow. + for(i = 0; i < param.n; i++) { + Param *p = &(param.elem[i]); + p->free = false; + + if(andFindFree) { + if(p->tag == 0) { + p->tag = VAR_DOF_TEST; + WriteJacobian(0); + EvalJacobian(); + int rank = CalculateRank(); + if(rank == mat.m) { + p->free = true; + } + p->tag = 0; + } + } + } + } + // System solved correctly, so write the new values back in to the + // main parameter table. + for(i = 0; i < param.n; i++) { + Param *p = &(param.elem[i]); + double val; + if(p->tag == VAR_SUBSTITUTED) { + val = param.FindById(p->substd)->val; + } else { + val = p->val; + } + Param *pp = SK.GetParam(p->h); + pp->val = val; + pp->known = true; + pp->free = p->free; + } + return rankOk ? System::SOLVED_OKAY : System::REDUNDANT_OKAY; + +didnt_converge: + SK.constraint.ClearTags(); + for(i = 0; i < eq.n; i++) { + if(ffabs(mat.B.num[i]) > CONVERGE_TOLERANCE || isnan(mat.B.num[i])) { + // This constraint is unsatisfied. + if(!mat.eq[i].isFromConstraint()) continue; + + hConstraint hc = mat.eq[i].constraint(); + ConstraintBase *c = SK.constraint.FindByIdNoOops(hc); + if(!c) continue; + // Don't double-show constraints that generated multiple + // unsatisfied equations + if(!c->tag) { + bad->Add(&(c->h)); + c->tag = 1; + } + } + } + + return rankOk ? System::DIDNT_CONVERGE : System::REDUNDANT_DIDNT_CONVERGE; +} + +void System::Clear(void) { + entity.Clear(); + param.Clear(); + eq.Clear(); + dragged.Clear(); +} diff --git a/src/textscreens.cpp b/src/textscreens.cpp new file mode 100644 index 0000000..e00b2bd --- /dev/null +++ b/src/textscreens.cpp @@ -0,0 +1,806 @@ +//----------------------------------------------------------------------------- +// The text-based browser window, used to view the structure of the model by +// groups and for other similar purposes. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// A navigation bar that always appears at the top of the window, with a +// link to bring us back home. +//----------------------------------------------------------------------------- +void TextWindow::ScreenHome(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); +} +void TextWindow::ShowHeader(bool withNav) { + ClearScreen(); + + const char *header; + std::string desc; + if(SS.GW.LockedInWorkplane()) { + header = "in plane: "; + desc = SK.GetEntity(SS.GW.ActiveWorkplane())->DescriptionString(); + } else { + header = "drawing / constraining in 3d"; + desc = ""; + } + + // Navigation buttons + if(withNav) { + Printf(false, " %Fl%Lh%fhome%E %Ft%s%E%s", + (&TextWindow::ScreenHome), header, desc.c_str()); + } else { + Printf(false, " %Ft%s%E%s", header, desc.c_str()); + } + + // Leave space for the icons that are painted here. + Printf(false, ""); + Printf(false, ""); +} + +//----------------------------------------------------------------------------- +// The screen that shows a list of every group in the sketch, with options +// to hide or show them, and to view them in detail. This is our home page. +//----------------------------------------------------------------------------- +void TextWindow::ScreenSelectGroup(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_GROUP_INFO); + SS.TW.shown.group.v = v; +} +void TextWindow::ScreenToggleGroupShown(int link, uint32_t v) { + hGroup hg = { v }; + Group *g = SK.GetGroup(hg); + g->visible = !(g->visible); + // If a group was just shown, then it might not have been generated + // previously, so regenerate. + SS.GenerateAll(); +} +void TextWindow::ScreenShowGroupsSpecial(int link, uint32_t v) { + bool state = link == 's'; + for(int i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->visible = state; + } +} +void TextWindow::ScreenActivateGroup(int link, uint32_t v) { + SS.GW.activeGroup.v = v; + SK.GetGroup(SS.GW.activeGroup)->Activate(); + SS.GW.ClearSuper(); +} +void TextWindow::ReportHowGroupSolved(hGroup hg) { + SS.GW.ClearSuper(); + SS.TW.GoToScreen(SCREEN_GROUP_SOLVE_INFO); + SS.TW.shown.group.v = hg.v; + SS.ScheduleShowTW(); +} +void TextWindow::ScreenHowGroupSolved(int link, uint32_t v) { + if(SS.GW.activeGroup.v != v) { + ScreenActivateGroup(link, v); + } + SS.TW.GoToScreen(SCREEN_GROUP_SOLVE_INFO); + SS.TW.shown.group.v = v; +} +void TextWindow::ScreenShowConfiguration(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_CONFIGURATION); +} +void TextWindow::ScreenShowEditView(int link, uint32_t v) { + SS.TW.GoToScreen(SCREEN_EDIT_VIEW); +} +void TextWindow::ScreenGoToWebsite(int link, uint32_t v) { + OpenWebsite("http://solvespace.com/txtlink"); +} +void TextWindow::ShowListOfGroups(void) { + const char *radioTrue = " " RADIO_TRUE " ", + *radioFalse = " " RADIO_FALSE " ", + *checkTrue = " " CHECK_TRUE " ", + *checkFalse = " " CHECK_FALSE " "; + + Printf(true, "%Ft active"); + Printf(false, "%Ft shown ok group-name%E"); + int i; + bool afterActive = false; + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + std::string s = g->DescriptionString(); + bool active = (g->h.v == SS.GW.activeGroup.v); + bool shown = g->visible; + bool ok = g->IsSolvedOkay(); + bool ref = (g->h.v == Group::HGROUP_REFERENCES.v); + Printf(false, "%Bp%Fd " + "%Ft%s%Fb%D%f%Ll%s%E " + "%Fb%s%D%f%Ll%s%E " + "%Fp%D%f%s%Ll%s%E " + "%Fl%Ll%D%f%s", + // Alternate between light and dark backgrounds, for readability + (i & 1) ? 'd' : 'a', + // Link that activates the group + ref ? " " : "", + g->h.v, (&TextWindow::ScreenActivateGroup), + ref ? "" : (active ? radioTrue : radioFalse), + // Link that hides or shows the group + afterActive ? " - " : "", + g->h.v, (&TextWindow::ScreenToggleGroupShown), + afterActive ? "" : (shown ? checkTrue : checkFalse), + // Link to the errors, if a problem occured while solving + ok ? 's' : 'x', g->h.v, (&TextWindow::ScreenHowGroupSolved), + ok ? "ok" : "", + ok ? "" : "NO", + // Link to a screen that gives more details on the group + g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str()); + + if(active) afterActive = true; + } + + Printf(true, " %Fl%Ls%fshow all%E / %Fl%Lh%fhide all%E", + &(TextWindow::ScreenShowGroupsSpecial), + &(TextWindow::ScreenShowGroupsSpecial)); + Printf(true, " %Fl%Ls%fline styles%E /" + " %Fl%Ls%fview%E /" + " %Fl%Ls%fconfiguration%E", + &(TextWindow::ScreenShowListOfStyles), + &(TextWindow::ScreenShowEditView), + &(TextWindow::ScreenShowConfiguration)); +} + + +//----------------------------------------------------------------------------- +// The screen that shows information about a specific group, and allows the +// user to edit various things about it. +//----------------------------------------------------------------------------- +void TextWindow::ScreenHoverConstraint(int link, uint32_t v) { + if(!SS.GW.showConstraints) return; + + hConstraint hc = { v }; + Constraint *c = SK.GetConstraint(hc); + if(c->group.v != SS.GW.activeGroup.v) { + // Only constraints in the active group are visible + return; + } + SS.GW.hover.Clear(); + SS.GW.hover.constraint = hc; + SS.GW.hover.emphasized = true; +} +void TextWindow::ScreenHoverRequest(int link, uint32_t v) { + SS.GW.hover.Clear(); + hRequest hr = { v }; + SS.GW.hover.entity = hr.entity(0); + SS.GW.hover.emphasized = true; +} +void TextWindow::ScreenSelectConstraint(int link, uint32_t v) { + SS.GW.ClearSelection(); + GraphicsWindow::Selection sel = {}; + sel.constraint.v = v; + SS.GW.selection.Add(&sel); +} +void TextWindow::ScreenSelectRequest(int link, uint32_t v) { + SS.GW.ClearSelection(); + GraphicsWindow::Selection sel = {}; + hRequest hr = { v }; + sel.entity = hr.entity(0); + SS.GW.selection.Add(&sel); +} + +void TextWindow::ScreenChangeGroupOption(int link, uint32_t v) { + SS.UndoRemember(); + Group *g = SK.GetGroup(SS.TW.shown.group); + + switch(link) { + case 's': g->subtype = Group::ONE_SIDED; break; + case 'S': g->subtype = Group::TWO_SIDED; break; + + case 'k': g->skipFirst = true; break; + case 'K': g->skipFirst = false; break; + + case 'c': + // When an extrude group is first created, it's positioned for a union + // extrusion. If no constraints were added, flip it when we switch between + // union and difference modes to avoid manual work doing the smae. + if(g->meshCombine != (int)v && g->GetNumConstraints() == 0 && + (v == Group::COMBINE_AS_DIFFERENCE || + g->meshCombine == Group::COMBINE_AS_DIFFERENCE)) { + g->ExtrusionForceVectorTo(g->ExtrusionGetVector().Negated()); + } + g->meshCombine = v; + break; + + case 'P': g->suppress = !(g->suppress); break; + + case 'r': g->relaxConstraints = !(g->relaxConstraints); break; + + case 'e': g->allowRedundant = !(g->allowRedundant); break; + + case 'v': g->visible = !(g->visible); break; + + case 'd': g->allDimsReference = !(g->allDimsReference); break; + + case 'f': g->forceToMesh = !(g->forceToMesh); break; + } + + SS.MarkGroupDirty(g->h); + SS.GenerateAll(); + SS.GW.ClearSuper(); +} + +void TextWindow::ScreenColor(int link, uint32_t v) { + SS.UndoRemember(); + + Group *g = SK.GetGroup(SS.TW.shown.group); + SS.TW.ShowEditControlWithColorPicker(3, g->color); + SS.TW.edit.meaning = EDIT_GROUP_COLOR; +} +void TextWindow::ScreenOpacity(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(11, ssprintf("%.2f", g->color.alphaF())); + SS.TW.edit.meaning = EDIT_GROUP_OPACITY; + SS.TW.edit.group.v = g->h.v; +} +void TextWindow::ScreenChangeExprA(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(10, ssprintf("%d", (int)g->valA)); + SS.TW.edit.meaning = EDIT_TIMES_REPEATED; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenChangeGroupName(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + SS.TW.ShowEditControl(12, g->DescriptionString().substr(5)); + SS.TW.edit.meaning = EDIT_GROUP_NAME; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenChangeGroupScale(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + + SS.TW.ShowEditControl(13, ssprintf("%.3f", g->scale)); + SS.TW.edit.meaning = EDIT_GROUP_SCALE; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenDeleteGroup(int link, uint32_t v) { + SS.UndoRemember(); + + hGroup hg = SS.TW.shown.group; + if(hg.v == SS.GW.activeGroup.v) { + SS.GW.activeGroup = SK.GetGroup(SS.GW.activeGroup)->PreviousGroup()->h; + } + + // Reset the text window, since we're displaying information about + // the group that's about to get deleted. + SS.TW.ClearSuper(); + + // This is a major change, so let's re-solve everything. + SK.group.RemoveById(hg); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + + // Reset the graphics window. This will also recreate the default + // group if it was removed. + SS.GW.ClearSuper(); +} +void TextWindow::ShowGroupInfo(void) { + Group *g = SK.GetGroup(shown.group); + const char *s = "???"; + + if(shown.group.v == Group::HGROUP_REFERENCES.v) { + Printf(true, "%FtGROUP %E%s", g->DescriptionString().c_str()); + goto list_items; + } else { + Printf(true, "%FtGROUP %E%s [%Fl%Ll%D%frename%E/%Fl%Ll%D%fdel%E]", + g->DescriptionString().c_str(), + g->h.v, &TextWindow::ScreenChangeGroupName, + g->h.v, &TextWindow::ScreenDeleteGroup); + } + + if(g->type == Group::LATHE) { + Printf(true, " %Ftlathe plane sketch"); + } else if(g->type == Group::EXTRUDE || g->type == Group::ROTATE || + g->type == Group::TRANSLATE) + { + if(g->type == Group::EXTRUDE) { + s = "extrude plane sketch"; + } else if(g->type == Group::TRANSLATE) { + s = "translate original sketch"; + } else if(g->type == Group::ROTATE) { + s = "rotate original sketch"; + } + Printf(true, " %Ft%s%E", s); + + bool one = (g->subtype == Group::ONE_SIDED); + Printf(false, + "%Ba %f%Ls%Fd%s one-sided%E " + "%f%LS%Fd%s two-sided%E", + &TextWindow::ScreenChangeGroupOption, + one ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + !one ? RADIO_TRUE : RADIO_FALSE); + + if(g->type == Group::ROTATE || g->type == Group::TRANSLATE) { + if(g->subtype == Group::ONE_SIDED) { + bool skip = g->skipFirst; + Printf(false, + "%Bd %Ftstart %f%LK%Fd%s with original%E " + "%f%Lk%Fd%s with copy #1%E", + &ScreenChangeGroupOption, + !skip ? RADIO_TRUE : RADIO_FALSE, + &ScreenChangeGroupOption, + skip ? RADIO_TRUE : RADIO_FALSE); + } + + int times = (int)(g->valA); + Printf(false, "%Bp %Ftrepeat%E %d time%s %Fl%Ll%D%f[change]%E", + (g->subtype == Group::ONE_SIDED) ? 'a' : 'd', + times, times == 1 ? "" : "s", + g->h.v, &TextWindow::ScreenChangeExprA); + } + } else if(g->type == Group::LINKED) { + Printf(true, " %Ftlink geometry from file%E"); + Printf(false, "%Ba '%s'", g->linkFileRel.c_str()); + Printf(false, "%Bd %Ftscaled by%E %# %Fl%Ll%f%D[change]%E", + g->scale, + &TextWindow::ScreenChangeGroupScale, g->h.v); + } else if(g->type == Group::DRAWING_3D) { + Printf(true, " %Ftsketch in 3d%E"); + } else if(g->type == Group::DRAWING_WORKPLANE) { + Printf(true, " %Ftsketch in new workplane%E"); + } else { + Printf(true, "???"); + } + Printf(false, ""); + + if(g->type == Group::EXTRUDE || + g->type == Group::LATHE || + g->type == Group::LINKED) + { + bool un = (g->meshCombine == Group::COMBINE_AS_UNION); + bool diff = (g->meshCombine == Group::COMBINE_AS_DIFFERENCE); + bool asy = (g->meshCombine == Group::COMBINE_AS_ASSEMBLE); + bool asa = (g->type == Group::LINKED); + + Printf(false, " %Ftsolid model as"); + Printf(false, "%Ba %f%D%Lc%Fd%s union%E " + "%f%D%Lc%Fd%s difference%E " + "%f%D%Lc%Fd%s%s%E ", + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_UNION, + un ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_DIFFERENCE, + diff ? RADIO_TRUE : RADIO_FALSE, + &TextWindow::ScreenChangeGroupOption, + Group::COMBINE_AS_ASSEMBLE, + asa ? (asy ? RADIO_TRUE : RADIO_FALSE) : " ", + asa ? " assemble" : ""); + + if(g->type == Group::EXTRUDE || + g->type == Group::LATHE) + { + Printf(false, + "%Bd %Ftcolor %E%Bz %Bd (%@, %@, %@) %f%D%Lf%Fl[change]%E", + &g->color, + g->color.redF(), g->color.greenF(), g->color.blueF(), + ScreenColor, top[rows-1] + 2); + Printf(false, "%Bd %Ftopacity%E %@ %f%Lf%Fl[change]%E", + g->color.alphaF(), + &TextWindow::ScreenOpacity); + } else if(g->type == Group::LINKED) { + Printf(false, " %Fd%f%LP%s suppress this group's solid model", + &TextWindow::ScreenChangeGroupOption, + g->suppress ? CHECK_TRUE : CHECK_FALSE); + } + + Printf(false, ""); + } + + Printf(false, " %f%Lv%Fd%s show entities from this group", + &TextWindow::ScreenChangeGroupOption, + g->visible ? CHECK_TRUE : CHECK_FALSE); + + Group *pg; pg = g->PreviousGroup(); + if(pg && pg->runningMesh.IsEmpty() && g->thisMesh.IsEmpty()) { + Printf(false, " %f%Lf%Fd%s force NURBS surfaces to triangle mesh", + &TextWindow::ScreenChangeGroupOption, + g->forceToMesh ? CHECK_TRUE : CHECK_FALSE); + } else { + Printf(false, " (model already forced to triangle mesh)"); + } + + Printf(true, " %f%Lr%Fd%s relax constraints and dimensions", + &TextWindow::ScreenChangeGroupOption, + g->relaxConstraints ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %f%Le%Fd%s allow redundant constraints", + &TextWindow::ScreenChangeGroupOption, + g->allowRedundant ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, " %f%Ld%Fd%s treat all dimensions as reference", + &TextWindow::ScreenChangeGroupOption, + g->allDimsReference ? CHECK_TRUE : CHECK_FALSE); + + if(g->booleanFailed) { + Printf(false, ""); + Printf(false, "The Boolean operation failed. It may be "); + Printf(false, "possible to fix the problem by choosing "); + Printf(false, "'force NURBS surfaces to triangle mesh'."); + } + +list_items: + Printf(false, ""); + Printf(false, "%Ft requests in group"); + + int i, a = 0; + for(i = 0; i < SK.request.n; i++) { + Request *r = &(SK.request.elem[i]); + + if(r->group.v == shown.group.v) { + std::string s = r->DescriptionString(); + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", + (a & 1) ? 'd' : 'a', + r->h.v, (&TextWindow::ScreenSelectRequest), + &(TextWindow::ScreenHoverRequest), s.c_str()); + a++; + } + } + if(a == 0) Printf(false, "%Ba (none)"); + + a = 0; + Printf(false, ""); + Printf(false, "%Ft constraints in group (%d DOF)", g->solved.dof); + for(i = 0; i < SK.constraint.n; i++) { + Constraint *c = &(SK.constraint.elem[i]); + + if(c->group.v == shown.group.v) { + std::string s = c->DescriptionString(); + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E %s", + (a & 1) ? 'd' : 'a', + c->h.v, (&TextWindow::ScreenSelectConstraint), + (&TextWindow::ScreenHoverConstraint), s.c_str(), + c->reference ? "(ref)" : ""); + a++; + } + } + if(a == 0) Printf(false, "%Ba (none)"); +} + +//----------------------------------------------------------------------------- +// The screen that's displayed when the sketch fails to solve. A report of +// what failed, and (if the problem is a singular Jacobian) a list of +// constraints that could be removed to fix it. +//----------------------------------------------------------------------------- +void TextWindow::ScreenAllowRedundant(int link, uint32_t v) { + SS.UndoRemember(); + + Group *g = SK.GetGroup(SS.TW.shown.group); + g->allowRedundant = true; + SS.GenerateAll(); + + SS.TW.shown.screen = SCREEN_GROUP_INFO; + SS.TW.Show(); +} +void TextWindow::ShowGroupSolveInfo(void) { + Group *g = SK.GetGroup(shown.group); + if(g->IsSolvedOkay()) { + // Go back to the default group info screen + shown.screen = SCREEN_GROUP_INFO; + Show(); + return; + } + + Printf(true, "%FtGROUP %E%s", g->DescriptionString().c_str()); + switch(g->solved.how) { + case System::DIDNT_CONVERGE: + Printf(true, "%FxSOLVE FAILED!%Fd unsolvable constraints"); + Printf(true, "the following constraints are incompatible"); + break; + + case System::REDUNDANT_DIDNT_CONVERGE: + Printf(true, "%FxSOLVE FAILED!%Fd unsolvable constraints"); + Printf(true, "the following constraints are unsatisfied"); + break; + + case System::REDUNDANT_OKAY: + Printf(true, "%FxSOLVE FAILED!%Fd redundant constraints"); + Printf(true, "remove any one of these to fix it"); + break; + + case System::TOO_MANY_UNKNOWNS: + Printf(true, "Too many unknowns in a single group!"); + return; + } + + for(int i = 0; i < g->solved.remove.n; i++) { + hConstraint hc = g->solved.remove.elem[i]; + Constraint *c = SK.constraint.FindByIdNoOops(hc); + if(!c) continue; + + Printf(false, "%Bp %Fl%Ll%D%f%h%s%E", + (i & 1) ? 'd' : 'a', + c->h.v, (&TextWindow::ScreenSelectConstraint), + (&TextWindow::ScreenHoverConstraint), + c->DescriptionString().c_str()); + } + + Printf(true, "It may be possible to fix the problem "); + Printf(false, "by selecting Edit -> Undo."); + + if(g->solved.how == System::REDUNDANT_OKAY) { + Printf(true, "It is possible to suppress this error "); + Printf(false, "by %Fl%f%Llallowing redundant constraints%E in ", + &TextWindow::ScreenAllowRedundant); + Printf(false, "this group."); + } +} + +//----------------------------------------------------------------------------- +// When we're stepping a dimension. User specifies the finish value, and +// how many steps to take in between current and finish, re-solving each +// time. +//----------------------------------------------------------------------------- +void TextWindow::ScreenStepDimFinish(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_STEP_DIM_FINISH; + std::string edit_value; + if(SS.TW.shown.dimIsDistance) { + edit_value = SS.MmToString(SS.TW.shown.dimFinish); + } else { + edit_value = ssprintf("%.3f", SS.TW.shown.dimFinish); + } + SS.TW.ShowEditControl(12, edit_value); +} +void TextWindow::ScreenStepDimSteps(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_STEP_DIM_STEPS; + SS.TW.ShowEditControl(12, ssprintf("%d", SS.TW.shown.dimSteps)); +} +void TextWindow::ScreenStepDimGo(int link, uint32_t v) { + hConstraint hc = SS.TW.shown.constraint; + Constraint *c = SK.constraint.FindByIdNoOops(hc); + if(c) { + SS.UndoRemember(); + double start = c->valA, finish = SS.TW.shown.dimFinish; + int i, n = SS.TW.shown.dimSteps; + for(i = 1; i <= n; i++) { + c = SK.GetConstraint(hc); + c->valA = start + ((finish - start)*i)/n; + SS.MarkGroupDirty(c->group); + SS.GenerateAll(); + if(!SS.ActiveGroupsOkay()) { + // Failed to solve, so quit + break; + } + PaintGraphics(); + } + } + InvalidateGraphics(); + SS.TW.GoToScreen(SCREEN_LIST_OF_GROUPS); +} +void TextWindow::ShowStepDimension(void) { + Constraint *c = SK.constraint.FindByIdNoOops(shown.constraint); + if(!c) { + shown.screen = SCREEN_LIST_OF_GROUPS; + Show(); + return; + } + + Printf(true, "%FtSTEP DIMENSION%E %s", c->DescriptionString().c_str()); + + if(shown.dimIsDistance) { + Printf(true, "%Ba %Ftstart%E %s", SS.MmToString(c->valA).c_str()); + Printf(false, "%Bd %Ftfinish%E %s %Fl%Ll%f[change]%E", + SS.MmToString(shown.dimFinish).c_str(), &ScreenStepDimFinish); + } else { + Printf(true, "%Ba %Ftstart%E %@", c->valA); + Printf(false, "%Bd %Ftfinish%E %@ %Fl%Ll%f[change]%E", + shown.dimFinish, &ScreenStepDimFinish); + } + Printf(false, "%Ba %Ftsteps%E %d %Fl%Ll%f%D[change]%E", + shown.dimSteps, &ScreenStepDimSteps); + + Printf(true, " %Fl%Ll%fstep dimension now%E", &ScreenStepDimGo); + + Printf(true, "(or %Fl%Ll%fcancel operation%E)", &ScreenHome); +} + +//----------------------------------------------------------------------------- +// When we're creating tangent arcs (as requests, not as some parametric +// thing). User gets to specify the radius, and whether the old untrimmed +// curves are kept or deleted. +//----------------------------------------------------------------------------- +void TextWindow::ScreenChangeTangentArc(int link, uint32_t v) { + switch(link) { + case 'r': { + SS.TW.edit.meaning = EDIT_TANGENT_ARC_RADIUS; + SS.TW.ShowEditControl(3, SS.MmToString(SS.tangentArcRadius)); + break; + } + + case 'a': SS.tangentArcManual = !SS.tangentArcManual; break; + case 'd': SS.tangentArcDeleteOld = !SS.tangentArcDeleteOld; break; + } +} +void TextWindow::ShowTangentArc(void) { + Printf(true, "%FtTANGENT ARC PARAMETERS%E"); + + Printf(true, "%Ft radius of created arc%E"); + if(SS.tangentArcManual) { + Printf(false, "%Ba %s %Fl%Lr%f[change]%E", + SS.MmToString(SS.tangentArcRadius).c_str(), + &(TextWindow::ScreenChangeTangentArc)); + } else { + Printf(false, "%Ba automatic"); + } + + Printf(false, ""); + Printf(false, " %Fd%f%La%s choose radius automatically%E", + &ScreenChangeTangentArc, + !SS.tangentArcManual ? CHECK_TRUE : CHECK_FALSE); + Printf(false, " %Fd%f%Ld%s delete original entities afterward%E", + &ScreenChangeTangentArc, + SS.tangentArcDeleteOld ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); + Printf(false, "To create a tangent arc at a point,"); + Printf(false, "select that point and then choose"); + Printf(false, "Sketch -> Tangent Arc at Point."); + Printf(true, "(or %Fl%Ll%fback to home screen%E)", &ScreenHome); +} + +//----------------------------------------------------------------------------- +// The edit control is visible, and the user just pressed enter. +//----------------------------------------------------------------------------- +void TextWindow::EditControlDone(const char *s) { + edit.showAgain = false; + + switch(edit.meaning) { + case EDIT_TIMES_REPEATED: { + Expr *e = Expr::From(s, true); + if(e) { + SS.UndoRemember(); + + double ev = e->Eval(); + if((int)ev < 1) { + Error("Can't repeat fewer than 1 time."); + break; + } + if((int)ev > 999) { + Error("Can't repeat more than 999 times."); + break; + } + + Group *g = SK.GetGroup(edit.group); + g->valA = ev; + + if(g->type == Group::ROTATE) { + int i, c = 0; + for(i = 0; i < SK.constraint.n; i++) { + if(SK.constraint.elem[i].group.v == g->h.v) c++; + } + // If the group does not contain any constraints, then + // set the numerical guess to space the copies uniformly + // over one rotation. Don't touch the guess if we're + // already constrained, because that would break + // convergence. + if(c == 0) { + double copies = (g->skipFirst) ? (ev + 1) : ev; + SK.GetParam(g->h.param(3))->val = PI/(2*copies); + } + } + + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } + break; + } + case EDIT_GROUP_NAME: { + if(!*s) { + Error("Group name cannot be empty"); + } else { + SS.UndoRemember(); + + Group *g = SK.GetGroup(edit.group); + g->name = s; + } + break; + } + case EDIT_GROUP_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double ev = e->Eval(); + if(fabs(ev) < 1e-6) { + Error("Scale cannot be zero."); + } else { + Group *g = SK.GetGroup(edit.group); + g->scale = ev; + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + } + } + break; + } + case EDIT_GROUP_COLOR: { + Vector rgb; + if(sscanf(s, "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { + rgb = rgb.ClampWithin(0, 1); + + Group *g = SK.group.FindByIdNoOops(SS.TW.shown.group); + if(!g) break; + g->color = RGBf(rgb.x, rgb.y, rgb.z); + + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + SS.GW.ClearSuper(); + } else { + Error("Bad format: specify color as r, g, b"); + } + break; + } + case EDIT_GROUP_OPACITY: { + Expr *e = Expr::From(s, true); + if(e) { + double alpha = e->Eval(); + if(alpha < 0 || alpha > 1) { + Error("Opacity must be between zero and one."); + } else { + Group *g = SK.GetGroup(edit.group); + g->color.alpha = (int)(255.1f * alpha); + SS.MarkGroupDirty(g->h); + SS.ScheduleGenerateAll(); + SS.GW.ClearSuper(); + } + } + break; + } + case EDIT_TTF_TEXT: { + SS.UndoRemember(); + Request *r = SK.request.FindByIdNoOops(edit.request); + if(r) { + r->str = s; + SS.MarkGroupDirty(r->group); + SS.ScheduleGenerateAll(); + } + break; + } + case EDIT_STEP_DIM_FINISH: { + Expr *e = Expr::From(s, true); + if(!e) { + break; + } + if(shown.dimIsDistance) { + shown.dimFinish = SS.ExprToMm(e); + } else { + shown.dimFinish = e->Eval(); + } + break; + } + case EDIT_STEP_DIM_STEPS: + shown.dimSteps = min(300, max(1, atoi(s))); + break; + + case EDIT_TANGENT_ARC_RADIUS: { + Expr *e = Expr::From(s, true); + if(!e) break; + if(e->Eval() < LENGTH_EPS) { + Error("Radius cannot be zero or negative."); + break; + } + SS.tangentArcRadius = SS.ExprToMm(e); + break; + } + + default: { + int cnt = 0; + if(EditControlDoneForStyles(s)) cnt++; + if(EditControlDoneForConfiguration(s)) cnt++; + if(EditControlDoneForPaste(s)) cnt++; + if(EditControlDoneForView(s)) cnt++; + if(cnt > 1) { + // The identifiers were somehow assigned not uniquely? + oops(); + } + break; + } + } + InvalidateGraphics(); + SS.ScheduleShowTW(); + + if(!edit.showAgain) { + HideEditControl(); + edit.meaning = EDIT_NOTHING; + } +} + diff --git a/src/textwin.cpp b/src/textwin.cpp new file mode 100644 index 0000000..656ac62 --- /dev/null +++ b/src/textwin.cpp @@ -0,0 +1,1050 @@ +//----------------------------------------------------------------------------- +// Helper functions for the text-based browser window. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "generated/icons.h" + +const TextWindow::Color TextWindow::fgColors[] = { + { 'd', RGBi(255, 255, 255) }, + { 'l', RGBi(100, 100, 255) }, + { 't', RGBi(255, 200, 0) }, + { 'h', RGBi( 90, 90, 90) }, + { 's', RGBi( 40, 255, 40) }, + { 'm', RGBi(200, 200, 0) }, + { 'r', RGBi( 0, 0, 0) }, + { 'x', RGBi(255, 20, 20) }, + { 'i', RGBi( 0, 255, 255) }, + { 'g', RGBi(160, 160, 160) }, + { 'b', RGBi(200, 200, 200) }, + { 0, RGBi( 0, 0, 0) } +}; +const TextWindow::Color TextWindow::bgColors[] = { + { 'd', RGBi( 0, 0, 0) }, + { 't', RGBi( 34, 15, 15) }, + { 'a', RGBi( 25, 25, 25) }, + { 'r', RGBi(255, 255, 255) }, + { 0, RGBi( 0, 0, 0) } +}; + +bool TextWindow::SPACER = false; +TextWindow::HideShowIcon TextWindow::hideShowIcons[] = { + { &(SS.GW.showWorkplanes), Icon_workplane, "workplanes from inactive groups"}, + { &(SS.GW.showNormals), Icon_normal, "normals" }, + { &(SS.GW.showPoints), Icon_point, "points" }, + { &(SS.GW.showConstraints), Icon_constraint, "constraints and dimensions" }, + { &(SS.GW.showFaces), Icon_faces, "XXX - special cased" }, + { &SPACER, 0, 0 }, + { &(SS.GW.showShaded), Icon_shaded, "shaded view of solid model" }, + { &(SS.GW.showEdges), Icon_edges, "edges of solid model" }, + { &(SS.GW.showOutlines), Icon_outlines, "outline of solid model" }, + { &(SS.GW.showMesh), Icon_mesh, "triangle mesh of solid model" }, + { &SPACER, 0, 0 }, + { &(SS.GW.showHdnLines), Icon_hidden_lines, "hidden lines" }, + { 0, 0, 0 } +}; + +void TextWindow::MakeColorTable(const Color *in, float *out) { + int i; + for(i = 0; in[i].c != 0; i++) { + int c = in[i].c; + if(c < 0 || c > 255) oops(); + out[c*3 + 0] = in[i].color.redF(); + out[c*3 + 1] = in[i].color.greenF(); + out[c*3 + 2] = in[i].color.blueF(); + } +} + +void TextWindow::Init(void) { + ClearSuper(); +} + +void TextWindow::ClearSuper(void) { + HideEditControl(); + + // Cannot use *this = {} here because TextWindow instances + // are 2.4MB long; this causes stack overflows in prologue + // when built with MSVC, even with optimizations. + memset(this, 0, sizeof(*this)); + + MakeColorTable(fgColors, fgColorTable); + MakeColorTable(bgColors, bgColorTable); + + ClearScreen(); + Show(); +} + +void TextWindow::HideEditControl(void) { + editControl.colorPicker.show = false; + HideTextEditControl(); +} + +void TextWindow::ShowEditControl(int col, const std::string &str, int halfRow) { + if(halfRow < 0) halfRow = top[hoveredRow]; + editControl.halfRow = halfRow; + editControl.col = col; + + int x = LEFT_MARGIN + CHAR_WIDTH*col; + int y = (halfRow - SS.TW.scrollPos)*(LINE_HEIGHT/2); + + ShowTextEditControl(x, y + 18, str); +} + +void TextWindow::ShowEditControlWithColorPicker(int col, RgbaColor rgb) +{ + SS.ScheduleShowTW(); + + editControl.colorPicker.show = true; + editControl.colorPicker.rgb = rgb; + editControl.colorPicker.h = 0; + editControl.colorPicker.s = 0; + editControl.colorPicker.v = 1; + ShowEditControl(col, ssprintf("%.2f, %.2f, %.2f", rgb.redF(), rgb.greenF(), rgb.blueF())); +} + +void TextWindow::ClearScreen(void) { + int i, j; + for(i = 0; i < MAX_ROWS; i++) { + for(j = 0; j < MAX_COLS; j++) { + text[i][j] = ' '; + meta[i][j].fg = 'd'; + meta[i][j].bg = 'd'; + meta[i][j].link = NOT_A_LINK; + } + top[i] = i*2; + } + rows = 0; +} + +void TextWindow::Printf(bool halfLine, const char *fmt, ...) { + va_list vl; + va_start(vl, fmt); + + if(rows >= MAX_ROWS) return; + + int r, c; + r = rows; + top[r] = (r == 0) ? 0 : (top[r-1] + (halfLine ? 3 : 2)); + rows++; + + for(c = 0; c < MAX_COLS; c++) { + text[r][c] = ' '; + meta[r][c].link = NOT_A_LINK; + } + + char fg = 'd'; + char bg = 'd'; + RgbaColor bgRgb = RGBi(0, 0, 0); + int link = NOT_A_LINK; + uint32_t data = 0; + LinkFunction *f = NULL, *h = NULL; + + c = 0; + while(*fmt) { + char buf[1024]; + + if(*fmt == '%') { + fmt++; + if(*fmt == '\0') goto done; + strcpy(buf, ""); + switch(*fmt) { + case 'd': { + int v = va_arg(vl, int); + sprintf(buf, "%d", v); + break; + } + case 'x': { + unsigned int v = va_arg(vl, unsigned int); + sprintf(buf, "%08x", v); + break; + } + case '@': { + double v = va_arg(vl, double); + sprintf(buf, "%.2f", v); + break; + } + case '2': { + double v = va_arg(vl, double); + sprintf(buf, "%s%.2f", v < 0 ? "" : " ", v); + break; + } + case '3': { + double v = va_arg(vl, double); + sprintf(buf, "%s%.3f", v < 0 ? "" : " ", v); + break; + } + case '#': { + double v = va_arg(vl, double); + sprintf(buf, "%.3f", v); + break; + } + case 's': { + char *s = va_arg(vl, char *); + memcpy(buf, s, min(sizeof(buf), strlen(s)+1)); + break; + } + case 'c': { + // 'char' is promoted to 'int' when passed through '...' + int v = va_arg(vl, int); + if(v == 0) { + strcpy(buf, ""); + } else { + sprintf(buf, "%c", v); + } + break; + } + case 'E': + fg = 'd'; + // leave the background, though + link = NOT_A_LINK; + data = 0; + f = NULL; + h = NULL; + break; + + case 'F': + case 'B': { + char cc = fmt[1]; // color code + RgbaColor *rgbPtr = NULL; + switch(cc) { + case 0: goto done; // truncated directive + case 'p': cc = (char)va_arg(vl, int); break; + case 'z': rgbPtr = va_arg(vl, RgbaColor *); break; + } + if(*fmt == 'F') { + fg = cc; + } else { + bg = cc; + if(rgbPtr) bgRgb = *rgbPtr; + } + fmt++; + break; + } + case 'L': + if(fmt[1] == '\0') goto done; + fmt++; + if(*fmt == 'p') { + link = va_arg(vl, int); + } else { + link = *fmt; + } + break; + + case 'f': + f = va_arg(vl, LinkFunction *); + break; + + case 'h': + h = va_arg(vl, LinkFunction *); + break; + + case 'D': { + unsigned int v = va_arg(vl, unsigned int); + data = (uint32_t)v; + break; + } + case '%': + strcpy(buf, "%"); + break; + } + } else { + utf8_iterator it2(fmt), it1 = it2++; + strncpy(buf, fmt, it2 - it1); + buf[it2 - it1] = '\0'; + } + + for(utf8_iterator it(buf); *it; ++it) { + for(int i = 0; i < ssglBitmapCharWidth(*it); i++) { + if(c >= MAX_COLS) goto done; + text[r][c] = (i == 0) ? *it : ' '; + meta[r][c].fg = fg; + meta[r][c].bg = bg; + meta[r][c].bgRgb = bgRgb; + meta[r][c].link = link; + meta[r][c].data = data; + meta[r][c].f = f; + meta[r][c].h = h; + c++; + } + } + + fmt++; + } + while(c < MAX_COLS) { + meta[r][c].fg = fg; + meta[r][c].bg = bg; + meta[r][c].bgRgb = bgRgb; + c++; + } + +done: + va_end(vl); +} + +#define gs (SS.GW.gs) +void TextWindow::Show(void) { + if(!(SS.GW.pending.operation)) SS.GW.ClearPending(); + + SS.GW.GroupSelection(); + + // Make sure these tests agree with test used to draw indicator line on + // main list of groups screen. + if(SS.GW.pending.description) { + // A pending operation (that must be completed with the mouse in + // the graphics window) will preempt our usual display. + HideEditControl(); + ShowHeader(false); + Printf(false, ""); + Printf(false, "%s", SS.GW.pending.description); + Printf(true, "%Fl%f%Ll(cancel operation)%E", + &TextWindow::ScreenUnselectAll); + } else if((gs.n > 0 || gs.constraints > 0) && + shown.screen != SCREEN_PASTE_TRANSFORMED) + { + if(edit.meaning != EDIT_TTF_TEXT) HideEditControl(); + ShowHeader(false); + DescribeSelection(); + } else { + if(edit.meaning == EDIT_TTF_TEXT) HideEditControl(); + ShowHeader(true); + switch(shown.screen) { + default: + shown.screen = SCREEN_LIST_OF_GROUPS; + // fall through + case SCREEN_LIST_OF_GROUPS: ShowListOfGroups(); break; + case SCREEN_GROUP_INFO: ShowGroupInfo(); break; + case SCREEN_GROUP_SOLVE_INFO: ShowGroupSolveInfo(); break; + case SCREEN_CONFIGURATION: ShowConfiguration(); break; + case SCREEN_STEP_DIMENSION: ShowStepDimension(); break; + case SCREEN_LIST_OF_STYLES: ShowListOfStyles(); break; + case SCREEN_STYLE_INFO: ShowStyleInfo(); break; + case SCREEN_PASTE_TRANSFORMED: ShowPasteTransformed(); break; + case SCREEN_EDIT_VIEW: ShowEditView(); break; + case SCREEN_TANGENT_ARC: ShowTangentArc(); break; + } + } + Printf(false, ""); + + // Make sure there's room for the color picker + if(editControl.colorPicker.show) { + int pickerHeight = 25; + int halfRow = editControl.halfRow; + if(top[rows-1] - halfRow < pickerHeight && rows < MAX_ROWS) { + rows++; + top[rows-1] = halfRow + pickerHeight; + } + } + + InvalidateText(); +} + +void TextWindow::TimerCallback(void) +{ + tooltippedIcon = hoveredIcon; + InvalidateText(); +} + +void TextWindow::DrawOrHitTestIcons(int how, double mx, double my) +{ + int width, height; + GetTextWindowSize(&width, &height); + + int x = 20, y = 33 + LINE_HEIGHT; + y -= scrollPos*(LINE_HEIGHT/2); + + if(how == PAINT) { + double grey = 30.0/255; + double top = y - 28, bot = y + 4; + glColor4d(grey, grey, grey, 1.0); + ssglAxisAlignedQuad(0, width, top, bot); + } + + HideShowIcon *oldHovered = hoveredIcon; + if(how != PAINT) { + hoveredIcon = NULL; + } + + HideShowIcon *hsi; + for(hsi = &(hideShowIcons[0]); hsi->var; hsi++) { + if(hsi->var == &SPACER) { + // Draw a darker-grey spacer in between the groups of icons. + if(how == PAINT) { + int l = x, r = l + 4, + t = y, b = t - 24; + glColor4d(0.17, 0.17, 0.17, 1); + ssglAxisAlignedQuad(l, r, t, b); + } + x += 12; + continue; + } + + if(how == PAINT) { + glPushMatrix(); + glTranslated(x, y-24, 0); + // Only thing that matters about the color is the alpha, + // should be one for no transparency + glColor3d(0, 0, 0); + ssglDrawPixelsWithTexture(hsi->icon, 24, 24); + glPopMatrix(); + + if(hsi == hoveredIcon) { + glColor4d(1, 1, 0, 0.3); + ssglAxisAlignedQuad(x - 2, x + 26, y + 2, y - 26); + } + if(!*(hsi->var)) { + glColor4d(1, 0, 0, 0.6); + glLineWidth(2); + int s = 0, f = 24; + glBegin(GL_LINES); + glVertex2d(x+s, y-s); + glVertex2d(x+f, y-f); + glVertex2d(x+s, y-f); + glVertex2d(x+f, y-s); + glEnd(); + } + } else { + if(mx > x - 2 && mx < x + 26 && + my < y + 2 && my > y - 26) + { + // The mouse is hovered over this icon, so do the tooltip + // stuff. + if(hsi != tooltippedIcon) { + oldMousePos = Point2d::From(mx, my); + } + if(hsi != oldHovered || how == CLICK) { + SetTimerFor(1000); + } + hoveredIcon = hsi; + if(how == CLICK) { + SS.GW.ToggleBool(hsi->var); + } + } + } + + x += 32; + } + + if(how != PAINT && hoveredIcon != oldHovered) { + InvalidateText(); + } + + if(tooltippedIcon) { + if(how == PAINT) { + std::string str; + + if(tooltippedIcon->icon == Icon_faces) { + if(SS.GW.showFaces) { + str = "Don't make faces selectable with mouse"; + } else { + str = "Make faces selectable with mouse"; + } + } else { + str = ssprintf("%s %s", *(tooltippedIcon->var) ? "Hide" : "Show", + tooltippedIcon->tip); + } + + double ox = oldMousePos.x, oy = oldMousePos.y - LINE_HEIGHT; + ox += 3; + oy -= 3; + int tw = (str.length() + 1)*(CHAR_WIDTH - 1); + ox = min(ox, (double) (width - 25) - tw); + oy = max(oy, 5.0); + + ssglInitializeBitmapFont(); + glLineWidth(1); + glColor4d(1.0, 1.0, 0.6, 1.0); + ssglAxisAlignedQuad(ox, ox+tw, oy, oy+LINE_HEIGHT); + glColor4d(0.0, 0.0, 0.0, 1.0); + ssglAxisAlignedLineLoop(ox, ox+tw, oy, oy+LINE_HEIGHT); + + glColor4d(0, 0, 0, 1); + ssglBitmapText(str, Vector::From(ox+5, oy-3+LINE_HEIGHT, 0)); + } else { + if(!hoveredIcon || + (hoveredIcon != tooltippedIcon)) + { + tooltippedIcon = NULL; + InvalidateGraphics(); + } + // And if we're hovered, then we've set a timer that will cause + // us to show the tool tip later. + } + } +} + +//---------------------------------------------------------------------------- +// Given (x, y, z) = (h, s, v) in [0,6), [0,1], [0,1], return (x, y, z) = +// (r, g, b) all in [0, 1]. +//---------------------------------------------------------------------------- +Vector TextWindow::HsvToRgb(Vector hsv) { + if(hsv.x >= 6) hsv.x -= 6; + + Vector rgb; + double hmod2 = hsv.x; + while(hmod2 >= 2) hmod2 -= 2; + double x = (1 - fabs(hmod2 - 1)); + if(hsv.x < 1) { + rgb = Vector::From(1, x, 0); + } else if(hsv.x < 2) { + rgb = Vector::From(x, 1, 0); + } else if(hsv.x < 3) { + rgb = Vector::From(0, 1, x); + } else if(hsv.x < 4) { + rgb = Vector::From(0, x, 1); + } else if(hsv.x < 5) { + rgb = Vector::From(x, 0, 1); + } else { + rgb = Vector::From(1, 0, x); + } + double c = hsv.y*hsv.z; + double m = 1 - hsv.z; + rgb = rgb.ScaledBy(c); + rgb = rgb.Plus(Vector::From(m, m, m)); + + return rgb; +} + +uint8_t *TextWindow::HsvPattern2d(void) { + static uint8_t Texture[256*256*3]; + static bool Init; + + if(!Init) { + int i, j, p; + p = 0; + for(i = 0; i < 256; i++) { + for(j = 0; j < 256; j++) { + Vector hsv = Vector::From(6.0*i/255.0, 1.0*j/255.0, 1); + Vector rgb = HsvToRgb(hsv); + rgb = rgb.ScaledBy(255); + Texture[p++] = (uint8_t)rgb.x; + Texture[p++] = (uint8_t)rgb.y; + Texture[p++] = (uint8_t)rgb.z; + } + } + Init = true; + } + return Texture; +} + +uint8_t *TextWindow::HsvPattern1d(double h, double s) { + static uint8_t Texture[256*4]; + + int i, p; + p = 0; + for(i = 0; i < 256; i++) { + Vector hsv = Vector::From(6*h, s, 1.0*(255 - i)/255.0); + Vector rgb = HsvToRgb(hsv); + rgb = rgb.ScaledBy(255); + Texture[p++] = (uint8_t)rgb.x; + Texture[p++] = (uint8_t)rgb.y; + Texture[p++] = (uint8_t)rgb.z; + // Needs a padding byte, to make things four-aligned + p++; + } + return Texture; +} + +void TextWindow::ColorPickerDone(void) { + RgbaColor rgb = editControl.colorPicker.rgb; + EditControlDone(ssprintf("%.2f, %.2f, %.3f", rgb.redF(), rgb.greenF(), rgb.blueF()).c_str()); +} + +bool TextWindow::DrawOrHitTestColorPicker(int how, bool leftDown, + double x, double y) +{ + bool mousePointerAsHand = false; + + if(how == HOVER && !leftDown) { + editControl.colorPicker.picker1dActive = false; + editControl.colorPicker.picker2dActive = false; + } + + if(!editControl.colorPicker.show) return false; + if(how == CLICK || (how == HOVER && leftDown)) InvalidateText(); + + static const RgbaColor BaseColor[12] = { + RGBi(255, 0, 0), + RGBi( 0, 255, 0), + RGBi( 0, 0, 255), + + RGBi( 0, 255, 255), + RGBi(255, 0, 255), + RGBi(255, 255, 0), + + RGBi(255, 127, 0), + RGBi(255, 0, 127), + RGBi( 0, 255, 127), + RGBi(127, 255, 0), + RGBi(127, 0, 255), + RGBi( 0, 127, 255), + }; + + int width, height; + GetTextWindowSize(&width, &height); + + int px = LEFT_MARGIN + CHAR_WIDTH*editControl.col; + int py = (editControl.halfRow - SS.TW.scrollPos)*(LINE_HEIGHT/2); + + py += LINE_HEIGHT + 5; + + static const int WIDTH = 16, HEIGHT = 12; + static const int PITCH = 18, SIZE = 15; + + px = min(px, width - (WIDTH*PITCH + 40)); + + int pxm = px + WIDTH*PITCH + 11, + pym = py + HEIGHT*PITCH + 7; + + int bw = 6; + if(how == PAINT) { + glColor4d(0.2, 0.2, 0.2, 1); + ssglAxisAlignedQuad(px, pxm+bw, py, pym+bw); + glColor4d(0.0, 0.0, 0.0, 1); + ssglAxisAlignedQuad(px+(bw/2), pxm+(bw/2), py+(bw/2), pym+(bw/2)); + } else { + if(x < px || x > pxm+(bw/2) || + y < py || y > pym+(bw/2)) + { + return false; + } + } + px += (bw/2); + py += (bw/2); + + int i, j; + for(i = 0; i < WIDTH/2; i++) { + for(j = 0; j < HEIGHT; j++) { + Vector rgb; + RgbaColor d; + if(i == 0 && j < 8) { + d = SS.modelColor[j]; + rgb = Vector::From(d.redF(), d.greenF(), d.blueF()); + } else if(i == 0) { + double a = (j - 8.0)/3.0; + rgb = Vector::From(a, a, a); + } else { + d = BaseColor[j]; + rgb = Vector::From(d.redF(), d.greenF(), d.blueF()); + if(i >= 2 && i <= 4) { + double a = (i == 2) ? 0.2 : (i == 3) ? 0.3 : 0.4; + rgb = rgb.Plus(Vector::From(a, a, a)); + } + if(i >= 5 && i <= 7) { + double a = (i == 5) ? 0.7 : (i == 6) ? 0.4 : 0.18; + rgb = rgb.ScaledBy(a); + } + } + + rgb = rgb.ClampWithin(0, 1); + int sx = px + 5 + PITCH*(i + 8) + 4, sy = py + 5 + PITCH*j; + + if(how == PAINT) { + glColor4d(CO(rgb), 1); + ssglAxisAlignedQuad(sx, sx+SIZE, sy, sy+SIZE); + } else if(how == CLICK) { + if(x >= sx && x <= sx+SIZE && y >= sy && y <= sy+SIZE) { + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + ColorPickerDone(); + } + } else if(how == HOVER) { + if(x >= sx && x <= sx+SIZE && y >= sy && y <= sy+SIZE) { + mousePointerAsHand = true; + } + } + } + } + + int hxm, hym; + int hx = px + 5, hy = py + 5; + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*2 + SIZE; + if(how == PAINT) { + ssglColorRGB(editControl.colorPicker.rgb); + ssglAxisAlignedQuad(hx, hxm, hy, hym); + } else if(how == CLICK) { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + ColorPickerDone(); + } + } else if(how == HOVER) { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + mousePointerAsHand = true; + } + } + + hy += PITCH*3; + + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*1 + SIZE; + // The one-dimensional thing to pick the color's value + if(how == PAINT) { + glBindTexture(GL_TEXTURE_2D, TEXTURE_COLOR_PICKER_1D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 256, 0, + GL_RGB, GL_UNSIGNED_BYTE, + HsvPattern1d(editControl.colorPicker.h, + editControl.colorPicker.s)); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(hx, hy); + + glTexCoord2d(1, 0); + glVertex2d(hx, hym); + + glTexCoord2d(1, 1); + glVertex2d(hxm, hym); + + glTexCoord2d(0, 1); + glVertex2d(hxm, hy); + glEnd(); + glDisable(GL_TEXTURE_2D); + + double cx = hx+(hxm-hx)*(1 - editControl.colorPicker.v); + glColor4d(0, 0, 0, 1); + glLineWidth(1); + glBegin(GL_LINES); + glVertex2d(cx, hy); + glVertex2d(cx, hym); + glEnd(); + } else if(how == CLICK || + (how == HOVER && leftDown && editControl.colorPicker.picker1dActive)) + { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + editControl.colorPicker.v = 1 - (x - hx)/(hxm - hx); + + Vector rgb = HsvToRgb(Vector::From( + 6*editControl.colorPicker.h, + editControl.colorPicker.s, + editControl.colorPicker.v)); + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + + editControl.colorPicker.picker1dActive = true; + } + } + // and advance our vertical position + hy += PITCH*2; + + hxm = hx + PITCH*7 + SIZE; + hym = hy + PITCH*6 + SIZE; + // Two-dimensional thing to pick a color by hue and saturation + if(how == PAINT) { + glBindTexture(GL_TEXTURE_2D, TEXTURE_COLOR_PICKER_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, + GL_RGB, GL_UNSIGNED_BYTE, HsvPattern2d()); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + glTexCoord2d(0, 0); + glVertex2d(hx, hy); + + glTexCoord2d(1, 0); + glVertex2d(hx, hym); + + glTexCoord2d(1, 1); + glVertex2d(hxm, hym); + + glTexCoord2d(0, 1); + glVertex2d(hxm, hy); + glEnd(); + glDisable(GL_TEXTURE_2D); + + glColor4d(1, 1, 1, 1); + glLineWidth(1); + double cx = hx+(hxm-hx)*editControl.colorPicker.h, + cy = hy+(hym-hy)*editControl.colorPicker.s; + glBegin(GL_LINES); + glVertex2d(cx - 5, cy); + glVertex2d(cx + 4, cy); + glVertex2d(cx, cy - 5); + glVertex2d(cx, cy + 4); + glEnd(); + } else if(how == CLICK || + (how == HOVER && leftDown && editControl.colorPicker.picker2dActive)) + { + if(x >= hx && x <= hxm && y >= hy && y <= hym) { + double h = (x - hx)/(hxm - hx), + s = (y - hy)/(hym - hy); + editControl.colorPicker.h = h; + editControl.colorPicker.s = s; + + Vector rgb = HsvToRgb(Vector::From( + 6*editControl.colorPicker.h, + editControl.colorPicker.s, + editControl.colorPicker.v)); + editControl.colorPicker.rgb = RGBf(rgb.x, rgb.y, rgb.z); + + editControl.colorPicker.picker2dActive = true; + } + } + + SetMousePointerToHand(mousePointerAsHand); + return true; +} + +void TextWindow::Paint(void) { + int width, height; + GetTextWindowSize(&width, &height); + + // We would like things pixel-exact, to avoid shimmering. + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + glColor3d(1, 1, 1); + + glTranslated(-1, 1, 0); + glScaled(2.0/width, -2.0/height, 1); + // Make things round consistently, avoiding exact integer boundary + glTranslated(-0.1, -0.1, 0); + + halfRows = height / (LINE_HEIGHT/2); + + int bottom = top[rows-1] + 2; + scrollPos = min(scrollPos, bottom - halfRows); + scrollPos = max(scrollPos, 0); + + // Let's set up the scroll bar first + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); + + // Create the bitmap font that we're going to use. + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + // Now paint the window. + int r, c, a; + for(a = 0; a < 2; a++) { + if(a == 0) { + glBegin(GL_QUADS); + } else if(a == 1) { + glEnable(GL_TEXTURE_2D); + ssglInitializeBitmapFont(); + glBegin(GL_QUADS); + } + + for(r = 0; r < rows; r++) { + int ltop = top[r]; + if(ltop < (scrollPos-1)) continue; + if(ltop > scrollPos+halfRows) break; + + for(c = 0; c < min((width/CHAR_WIDTH)+1, (int) MAX_COLS); c++) { + int x = LEFT_MARGIN + c*CHAR_WIDTH; + int y = (ltop-scrollPos)*(LINE_HEIGHT/2) + 4; + + int fg = meta[r][c].fg; + int bg = meta[r][c].bg; + RgbaColor bgRgb = meta[r][c].bgRgb; + + // On the first pass, all the background quads; on the next + // pass, all the foreground (i.e., font) quads. + if(a == 0) { + int bh = LINE_HEIGHT, adj = -2; + if(bg == 'z') { + glColor3f(bgRgb.redF(), bgRgb.greenF(), bgRgb.blueF()); + bh = CHAR_HEIGHT; + adj += 2; + } else { + glColor3fv(&(bgColorTable[bg*3])); + } + + if(bg != 'd') { + // Move the quad down a bit, so that the descenders + // still have the correct background. + y += adj; + ssglAxisAlignedQuad(x, x + CHAR_WIDTH, y, y + bh, false); + y -= adj; + } + } else if(a == 1) { + glColor3fv(&(fgColorTable[fg*3])); + ssglBitmapCharQuad(text[r][c], x, y + CHAR_HEIGHT); + + // If this is a link and it's hovered, then draw the + // underline + if(meta[r][c].link && meta[r][c].link != 'n' && + (r == hoveredRow && c == hoveredCol)) + { + int cs = c, cf = c; + while(cs >= 0 && meta[r][cs].link && + meta[r][cs].f == meta[r][c].f && + meta[r][cs].data == meta[r][c].data) + { + cs--; + } + cs++; + + while( meta[r][cf].link && + meta[r][cf].f == meta[r][c].f && + meta[r][cf].data == meta[r][c].data) + { + cf++; + } + + // But don't underline checkboxes or radio buttons + while(((text[r][cs] >= 0xe000 && text[r][cs] <= 0xefff) || + text[r][cs] == ' ') && + cs < cf) + { + cs++; + } + + glEnd(); + + // Always use the color of the rightmost character + // in the link, so that underline is consistent color + fg = meta[r][cf-1].fg; + glColor3fv(&(fgColorTable[fg*3])); + glDisable(GL_TEXTURE_2D); + glLineWidth(1); + glBegin(GL_LINES); + int yp = y + CHAR_HEIGHT; + glVertex2d(LEFT_MARGIN + cs*CHAR_WIDTH, yp); + glVertex2d(LEFT_MARGIN + cf*CHAR_WIDTH, yp); + glEnd(); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + } + } + } + } + + glEnd(); + glDisable(GL_TEXTURE_2D); + } + + // The line to indicate the column of radio buttons that indicates the + // active group. + SS.GW.GroupSelection(); + // Make sure this test agrees with test to determine which screen is drawn + if(!SS.GW.pending.description && gs.n == 0 && gs.constraints == 0 && + shown.screen == SCREEN_LIST_OF_GROUPS) + { + int x = 29, y = 70 + LINE_HEIGHT; + y -= scrollPos*(LINE_HEIGHT/2); + + glLineWidth(1); + glColor3fv(&(fgColorTable['t'*3])); + glBegin(GL_LINES); + glVertex2d(x, y); + glVertex2d(x, y+40); + glEnd(); + } + + // The header has some icons that are drawn separately from the text + DrawOrHitTestIcons(PAINT, 0, 0); + + // And we may show a color picker for certain editable fields + DrawOrHitTestColorPicker(PAINT, false, 0, 0); +} + +void TextWindow::MouseEvent(bool leftClick, bool leftDown, double x, double y) { + if(TextEditControlIsVisible() || GraphicsEditControlIsVisible()) { + if(DrawOrHitTestColorPicker(leftClick ? CLICK : HOVER, leftDown, x, y)) + { + return; + } + + if(leftClick) { + HideEditControl(); + HideGraphicsEditControl(); + } else { + SetMousePointerToHand(false); + } + return; + } + + DrawOrHitTestIcons(leftClick ? CLICK : HOVER, x, y); + + GraphicsWindow::Selection ps = SS.GW.hover; + SS.GW.hover.Clear(); + + int prevHoveredRow = hoveredRow, + prevHoveredCol = hoveredCol; + hoveredRow = 0; + hoveredCol = 0; + + // Find the corresponding character in the text buffer + int c = (int)((x - LEFT_MARGIN) / CHAR_WIDTH); + int hh = (LINE_HEIGHT)/2; + y += scrollPos*hh; + int r; + for(r = 0; r < rows; r++) { + if(y >= top[r]*hh && y <= (top[r]+2)*hh) { + break; + } + } + if(r < 0 || c < 0 || r >= rows || c >= MAX_COLS) { + SetMousePointerToHand(false); + goto done; + } + + hoveredRow = r; + hoveredCol = c; + +#define META (meta[r][c]) + if(leftClick) { + if(META.link && META.f) { + (META.f)(META.link, META.data); + Show(); + InvalidateGraphics(); + } + } else { + if(META.link) { + SetMousePointerToHand(true); + if(META.h) { + (META.h)(META.link, META.data); + } + } else { + SetMousePointerToHand(false); + } + } +#undef META + +done: + if((!ps.Equals(&(SS.GW.hover))) || + prevHoveredRow != hoveredRow || + prevHoveredCol != hoveredCol) + { + InvalidateGraphics(); + InvalidateText(); + } +} + +void TextWindow::MouseLeave(void) { + tooltippedIcon = NULL; + hoveredIcon = NULL; + hoveredRow = 0; + hoveredCol = 0; + InvalidateText(); +} + +void TextWindow::ScrollbarEvent(int newPos) { + if(TextEditControlIsVisible()) + return; + + int bottom = top[rows-1] + 2; + newPos = min(newPos, bottom - halfRows); + newPos = max(newPos, 0); + + if(newPos != scrollPos) { + scrollPos = newPos; + MoveTextScrollbarTo(scrollPos, top[rows - 1] + 1, halfRows); + InvalidateText(); + } +} + diff --git a/src/toolbar.cpp b/src/toolbar.cpp new file mode 100644 index 0000000..77f795f --- /dev/null +++ b/src/toolbar.cpp @@ -0,0 +1,248 @@ +//----------------------------------------------------------------------------- +// The toolbar that appears at the top left of the graphics window, where the +// user can select icons with the mouse, to perform operations equivalent to +// selecting a menu item or using a keyboard shortcut. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "generated/icons.h" + +static uint8_t SPACER[1]; +static const struct { + uint8_t *image; + int menu; + const char *tip; +} Toolbar[] = { + { Icon_line, GraphicsWindow::MNU_LINE_SEGMENT, "Sketch line segment" }, + { Icon_rectangle, GraphicsWindow::MNU_RECTANGLE, "Sketch rectangle" }, + { Icon_circle, GraphicsWindow::MNU_CIRCLE, "Sketch circle" }, + { Icon_arc, GraphicsWindow::MNU_ARC, "Sketch arc of a circle" }, + { Icon_text, GraphicsWindow::MNU_TTF_TEXT, "Sketch curves from text in a TrueType font" }, + { Icon_tangent_arc, GraphicsWindow::MNU_TANGENT_ARC, "Create tangent arc at selected point" }, + { Icon_bezier, GraphicsWindow::MNU_CUBIC, "Sketch cubic Bezier spline" }, + { Icon_point, GraphicsWindow::MNU_DATUM_POINT, "Sketch datum point" }, + { Icon_construction, GraphicsWindow::MNU_CONSTRUCTION, "Toggle construction" }, + { Icon_trim, GraphicsWindow::MNU_SPLIT_CURVES, "Split lines / curves where they intersect" }, + { SPACER, 0, 0 }, + + { Icon_length, GraphicsWindow::MNU_DISTANCE_DIA, "Constrain distance / diameter / length" }, + { Icon_angle, GraphicsWindow::MNU_ANGLE, "Constrain angle" }, + { Icon_horiz, GraphicsWindow::MNU_HORIZONTAL, "Constrain to be horizontal" }, + { Icon_vert, GraphicsWindow::MNU_VERTICAL, "Constrain to be vertical" }, + { Icon_parallel, GraphicsWindow::MNU_PARALLEL, "Constrain to be parallel or tangent" }, + { Icon_perpendicular, GraphicsWindow::MNU_PERPENDICULAR, "Constrain to be perpendicular" }, + { Icon_pointonx, GraphicsWindow::MNU_ON_ENTITY, "Constrain point on line / curve / plane / point" }, + { Icon_symmetric, GraphicsWindow::MNU_SYMMETRIC, "Constrain symmetric" }, + { Icon_equal, GraphicsWindow::MNU_EQUAL, "Constrain equal length / radius / angle" }, + { Icon_same_orientation,GraphicsWindow::MNU_ORIENTED_SAME, "Constrain normals in same orientation" }, + { Icon_other_supp, GraphicsWindow::MNU_OTHER_ANGLE, "Other supplementary angle" }, + { Icon_ref, GraphicsWindow::MNU_REFERENCE, "Toggle reference dimension" }, + { SPACER, 0, 0 }, + + { Icon_extrude, GraphicsWindow::MNU_GROUP_EXTRUDE, "New group extruding active sketch" }, + { Icon_lathe, GraphicsWindow::MNU_GROUP_LATHE, "New group rotating active sketch" }, + { Icon_step_rotate, GraphicsWindow::MNU_GROUP_ROT, "New group step and repeat rotating" }, + { Icon_step_translate, GraphicsWindow::MNU_GROUP_TRANS, "New group step and repeat translating" }, + { Icon_sketch_in_plane, GraphicsWindow::MNU_GROUP_WRKPL, "New group in new workplane (thru given entities)" }, + { Icon_sketch_in_3d, GraphicsWindow::MNU_GROUP_3D, "New group in 3d" }, + { Icon_assemble, GraphicsWindow::MNU_GROUP_LINK, "New group linking / assembling file" }, + { SPACER, 0, 0 }, + + { Icon_in3d, GraphicsWindow::MNU_NEAREST_ISO, "Nearest isometric view" }, + { Icon_ontoworkplane, GraphicsWindow::MNU_ONTO_WORKPLANE, "Align view to active workplane" }, + { NULL, 0, 0 } +}; + +void GraphicsWindow::ToolbarDraw(void) { + ToolbarDrawOrHitTest(0, 0, true, NULL); +} + +bool GraphicsWindow::ToolbarMouseMoved(int x, int y) { + x += ((int)width/2); + y += ((int)height/2); + + int nh = 0; + bool withinToolbar = ToolbarDrawOrHitTest(x, y, false, &nh); + if(!withinToolbar) nh = 0; + + if(nh != toolbarTooltipped) { + // Don't let the tool tip move around if the mouse moves within the + // same item. + toolbarMouseX = x; + toolbarMouseY = y; + toolbarTooltipped = 0; + } + + if(nh != toolbarHovered) { + toolbarHovered = nh; + SetTimerFor(1000); + PaintGraphics(); + } + // So if we moved off the toolbar, then toolbarHovered is now equal to + // zero, so it doesn't matter if the tool tip timer expires. And if + // we moved from one item to another, we reset the timer, so also okay. + return withinToolbar; +} + +bool GraphicsWindow::ToolbarMouseDown(int x, int y) { + x += ((int)width/2); + y += ((int)height/2); + + int nh = -1; + bool withinToolbar = ToolbarDrawOrHitTest(x, y, false, &nh); + // They might have clicked within the toolbar, but not on a button. + if(withinToolbar && nh >= 0) { + for(int i = 0; SS.GW.menu[i].level >= 0; i++) { + if(nh == SS.GW.menu[i].id) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)SS.GW.menu[i].id); + break; + } + } + } + return withinToolbar; +} + +bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, + bool paint, int *menuHit) +{ + int i; + int x = 17, y = (int)(height - 52); + + int fudge = 8; + int h = 32*16 + 3*16 + fudge; + int aleft = 0, aright = 66, atop = y+16+fudge/2, abot = y+16-h; + + bool withinToolbar = + (mx >= aleft && mx <= aright && my <= atop && my >= abot); + + if(!paint && !withinToolbar) { + // This gets called every MouseMove event, so return quickly. + return false; + } + + if(paint) { + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glTranslated(-1, -1, 0); + glScaled(2.0/width, 2.0/height, 0); + glDisable(GL_LIGHTING); + + double c = 30.0/255; + glColor4d(c, c, c, 1.0); + ssglAxisAlignedQuad(aleft, aright, atop, abot); + } + + struct { + bool show; + const char *str; + } toolTip = { false, NULL }; + + bool leftpos = true; + for(i = 0; Toolbar[i].image; i++) { + if(Toolbar[i].image == SPACER) { + if(!leftpos) { + leftpos = true; + y -= 32; + x -= 32; + } + y -= 16; + + if(paint) { + // Draw a separator bar in a slightly different color. + int divw = 30, divh = 2; + glColor4d(0.17, 0.17, 0.17, 1); + x += 16; + y += 24; + ssglAxisAlignedQuad(x+divw, x-divw, y+divh, y-divh); + x -= 16; + y -= 24; + } + + continue; + } + + if(paint) { + glRasterPos2i(x - 12, y - 12); + glDrawPixels(24, 24, GL_RGB, GL_UNSIGNED_BYTE, Toolbar[i].image); + + if(toolbarHovered == Toolbar[i].menu || + pending.operation == Toolbar[i].menu) { + // Highlight the hovered or pending item. + glColor4d(1, 1, 0, 0.3); + int boxhw = 15; + ssglAxisAlignedQuad(x+boxhw, x-boxhw, y+boxhw, y-boxhw); + } + + if(toolbarTooltipped == Toolbar[i].menu) { + // Display the tool tip for this item; postpone till later + // so that no one draws over us. Don't need position since + // that's just wherever the mouse is. + toolTip.show = true; + toolTip.str = Toolbar[i].tip; + } + } else { + int boxhw = 16; + if(mx < (x+boxhw) && mx > (x - boxhw) && + my < (y+boxhw) && my > (y - boxhw)) + { + if(menuHit) *menuHit = Toolbar[i].menu; + } + } + + if(leftpos) { + x += 32; + leftpos = false; + } else { + x -= 32; + y -= 32; + leftpos = true; + } + } + + if(paint) { + // Do this last so that nothing can draw over it. + if(toolTip.show) { + ssglInitializeBitmapFont(); + std::string str = toolTip.str; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(toolbarTooltipped == SS.GW.menu[i].id) { + std::string accel = MakeAcceleratorLabel(SS.GW.menu[i].accel); + if(!accel.empty()) { + str += ssprintf(" (%s)", accel.c_str()); + } + break; + } + } + + int tw = str.length() * (SS.TW.CHAR_WIDTH - 1) + 10, + th = SS.TW.LINE_HEIGHT + 2; + + double ox = toolbarMouseX + 3, oy = toolbarMouseY + 3; + glLineWidth(1); + glColor4d(1.0, 1.0, 0.6, 1.0); + ssglAxisAlignedQuad(ox, ox+tw, oy, oy+th); + glColor4d(0.0, 0.0, 0.0, 1.0); + ssglAxisAlignedLineLoop(ox, ox+tw, oy, oy+th); + + glColor4d(0, 0, 0, 1); + glPushMatrix(); + glTranslated(ox+5, oy+3, 0); + glScaled(1, -1, 1); + ssglBitmapText(str, Vector::From(0, 0, 0)); + glPopMatrix(); + } + ssglDepthRangeLockToFront(false); + } + + return withinToolbar; +} + +void GraphicsWindow::TimerCallback(void) { + SS.GW.toolbarTooltipped = SS.GW.toolbarHovered; + PaintGraphics(); +} + diff --git a/src/ttf.cpp b/src/ttf.cpp new file mode 100644 index 0000000..79cbffd --- /dev/null +++ b/src/ttf.cpp @@ -0,0 +1,330 @@ +//----------------------------------------------------------------------------- +// Routines to read a TrueType font as vector outlines, and generate them +// as entities, since they're always representable as either lines or +// quadratic Bezier curves. +// +// Copyright 2016 whitequark, Peter Barfuss. +//----------------------------------------------------------------------------- +#include +#include FT_FREETYPE_H +#include FT_OUTLINE_H +#include FT_ADVANCES_H + +/* Yecch. Irritatingly, you need to do this nonsense to get the error string table, + since nobody thought to put this exact function into FreeType itsself. */ +#undef __FTERRORS_H__ +#define FT_ERRORDEF(e, v, s) { (e), (s) }, +#define FT_ERROR_START_LIST +#define FT_ERROR_END_LIST { 0, NULL } + +struct ft_error { + int err; + const char *str; +}; + +static const struct ft_error ft_errors[] = { +#include FT_ERRORS_H +}; + +extern "C" const char *ft_error_string(int err) { + const struct ft_error *e; + for(e = ft_errors; e->str; e++) + if(e->err == err) + return e->str; + return "Unknown error"; +} + +/* Okay, we're done with that. */ +#undef FT_ERRORDEF +#undef FT_ERROR_START_LIST +#undef FT_ERROR_END_LIST + +#include "solvespace.h" + +//----------------------------------------------------------------------------- +// Get the list of available font filenames, and load the name for each of +// them. Only that, though, not the glyphs too. +//----------------------------------------------------------------------------- +TtfFontList::TtfFontList() { + FT_Init_FreeType(&fontLibrary); +} + +TtfFontList::~TtfFontList() { + FT_Done_FreeType(fontLibrary); +} + +void TtfFontList::LoadAll() { + if(loaded) return; + + for(const std::string &font : GetFontFiles()) { + TtfFont tf = {}; + tf.fontFile = font; + if(tf.LoadFromFile(fontLibrary)) + l.Add(&tf); + } + + // Sort fonts according to their actual name, not filename. + std::sort(&l.elem[0], &l.elem[l.n], + [](const TtfFont &a, const TtfFont &b) { return a.name < b.name; }); + + // Filter out fonts with the same family and style name. This is not + // strictly necessarily the exact same font, but it will almost always be. + TtfFont *it = std::unique(&l.elem[0], &l.elem[l.n], + [](const TtfFont &a, const TtfFont &b) { return a.name == b.name; }); + l.RemoveLast(&l.elem[l.n] - it); + + // TODO: identify fonts by their name and not filename, which may change + // between OSes. + + loaded = true; +} + +void TtfFontList::PlotString(const std::string &font, const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v) +{ + LoadAll(); + + TtfFont *tf = std::find_if(&l.elem[0], &l.elem[l.n], + [&](const TtfFont &tf) { return tf.FontFileBaseName() == font; }); + + if(!str.empty() && tf != &l.elem[l.n]) { + if(tf->fontFace == NULL) { + tf->LoadFromFile(fontLibrary, /*nameOnly=*/false); + } + tf->PlotString(str, sbl, origin, u, v); + } else { + // No text or no font; so draw a big X for an error marker. + SBezier sb; + sb = SBezier::From(origin, origin.Plus(u).Plus(v)); + sbl->l.Add(&sb); + sb = SBezier::From(origin.Plus(v), origin.Plus(u)); + sbl->l.Add(&sb); + } +} + +//----------------------------------------------------------------------------- +// Return the basename of our font filename; that's how the requests and +// entities that reference us will store it. +//----------------------------------------------------------------------------- +std::string TtfFont::FontFileBaseName() const { + std::string baseName = fontFile; + size_t pos = baseName.rfind(PATH_SEP); + if(pos != std::string::npos) + return baseName.erase(0, pos + 1); + return ""; +} + +//----------------------------------------------------------------------------- +// Load a TrueType font into memory. We care about the curves that define +// the letter shapes, and about the mappings that determine which glyph goes +// with which character. +//----------------------------------------------------------------------------- +bool TtfFont::LoadFromFile(FT_Library fontLibrary, bool nameOnly) { + FT_Open_Args args = {}; + args.flags = FT_OPEN_PATHNAME; + args.pathname = &fontFile[0]; // FT_String is char* for historical reasons + + // We don't use ssfopen() here to let freetype do its own memory management. + // This is OK because on Linux/OS X we just delegate to fopen and on Windows + // we only look into C:\Windows\Fonts, which has a known short path. + if(int fterr = FT_Open_Face(fontLibrary, &args, 0, &fontFace)) { + dbp("freetype: loading font from file '%s' failed: %s", + fontFile.c_str(), ft_error_string(fterr)); + return false; + } + + if(int fterr = FT_Select_Charmap(fontFace, FT_ENCODING_UNICODE)) { + dbp("freetype: loading unicode CMap for file '%s' failed: %s", + fontFile.c_str(), ft_error_string(fterr)); + FT_Done_Face(fontFace); + fontFace = NULL; + return false; + } + + name = std::string(fontFace->family_name) + + " (" + std::string(fontFace->style_name) + ")"; + + if(nameOnly) { + FT_Done_Face(fontFace); + fontFace = NULL; + return true; + } + + // We always ask Freetype to give us a unit size character. + // It uses fixed point; put the unit size somewhere in the middle of the dynamic + // range of its 26.6 fixed point type, and adjust the factors so that the unit + // matches cap height. + FT_Size_RequestRec sizeRequest; + sizeRequest.type = FT_SIZE_REQUEST_TYPE_REAL_DIM; + sizeRequest.width = 1 << 16; + sizeRequest.height = 1 << 16; + sizeRequest.horiResolution = 128; + sizeRequest.vertResolution = 128; + if(int fterr = FT_Request_Size(fontFace, &sizeRequest)) { + dbp("freetype: cannot set character size: %s", + ft_error_string(fterr)); + FT_Done_Face(fontFace); + fontFace = NULL; + return false; + } + + char chr = 'A'; + uint32_t gid = FT_Get_Char_Index(fontFace, 'A'); + if (gid == 0) { + dbp("freetype: CID-to-GID mapping for CID 0x%04x failed: %s; using CID as GID", + chr, ft_error_string(gid)); + gid = chr; + } + + if(gid) { + if(int fterr = FT_Load_Glyph(fontFace, gid, FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING)) { + dbp("freetype: cannot load glyph for GID 0x%04x: %s", + gid, ft_error_string(fterr)); + FT_Done_Face(fontFace); + fontFace = NULL; + return false; + } + + FT_BBox bbox; + FT_Outline_Get_CBox(&fontFace->glyph->outline, &bbox); + capHeight = (double)bbox.yMax; + } + + return true; +} + +typedef struct OutlineData { + Vector origin, u, v; // input parameters + SBezierList *beziers; // output bezier list + float factor; // ratio between freetype and solvespace coordinates + FT_Pos bx; // x offset of the current glyph + FT_Pos px, py; // current point +} OutlineData; + +static Vector Transform(OutlineData *data, FT_Pos x, FT_Pos y) { + Vector r = data->origin; + r = r.Plus(data->u.ScaledBy((float)(data->bx + x) * data->factor)); + r = r.Plus(data->v.ScaledBy((float)y * data->factor)); + return r; +} + +static int MoveTo(const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + data->px = p->x; + data->py = p->y; + return 0; +} + +static int LineTo(const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +static int ConicTo(const FT_Vector *c, const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, c->x, c->y), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +static int CubicTo(const FT_Vector *c1, const FT_Vector *c2, const FT_Vector *p, void *cc) +{ + OutlineData *data = (OutlineData *) cc; + SBezier sb = SBezier::From( + Transform(data, data->px, data->py), + Transform(data, c1->x, c1->y), + Transform(data, c2->x, c2->y), + Transform(data, p->x, p->y)); + data->beziers->l.Add(&sb); + data->px = p->x; + data->py = p->y; + return 0; +} + +void TtfFont::PlotString(const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v) +{ + if(fontFace == NULL) oops(); + + FT_Outline_Funcs outlineFuncs; + outlineFuncs.move_to = MoveTo; + outlineFuncs.line_to = LineTo; + outlineFuncs.conic_to = ConicTo; + outlineFuncs.cubic_to = CubicTo; + outlineFuncs.shift = 0; + outlineFuncs.delta = 0; + + FT_Pos dx = 0; + for(char32_t cid : ReadUTF8(str)) { + uint32_t gid = FT_Get_Char_Index(fontFace, cid); + if (gid == 0) { + dbp("freetype: CID-to-GID mapping for CID 0x%04x failed: %s; using CID as GID", + cid, ft_error_string(gid)); + gid = cid; + } + + /* + * Stupid hacks: + * - if we want fake-bold, use FT_Outline_Embolden(). This actually looks + * quite good. + * - if we want fake-italic, apply a shear transform [1 s s 1 0 0] here using + * FT_Set_Transform. This looks decent at small font sizes and bad at larger + * ones, antialiasing mitigates this considerably though. + */ + if(int fterr = FT_Load_Glyph(fontFace, gid, FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING)) { + dbp("freetype: cannot load glyph for GID 0x%04x: %s", + gid, ft_error_string(fterr)); + return; + } + + /* A point that has x = xMin should be plotted at (dx0 + lsb); fix up + * our x-position so that the curve-generating code will put stuff + * at the right place. + * + * There's no point in getting the glyph BBox here - not only can it be + * needlessly slow sometimes, but because we're about to render a single glyph, + * what we want actually *is* the CBox. + * + * This is notwithstanding that this makes extremely little sense, this + * looks like a workaround for either mishandling the start glyph on a line, + * or as a really hacky pseudo-track-kerning (in which case it works better than + * one would expect! especially since most fonts don't set track kerning). + */ + FT_BBox cbox; + FT_Outline_Get_CBox(&fontFace->glyph->outline, &cbox); + FT_Pos bx = dx - cbox.xMin; + // Yes, this is what FreeType calls left-side bearing. + // Then interchangeably uses that with "left-side bearing". Sigh. + bx += fontFace->glyph->metrics.horiBearingX; + + OutlineData data = {}; + data.origin = origin; + data.u = u; + data.v = v; + data.beziers = sbl; + data.factor = 1.0 / capHeight; + data.bx = bx; + if(int fterr = FT_Outline_Decompose(&fontFace->glyph->outline, &outlineFuncs, &data)) { + dbp("freetype: bezier decomposition failed (gid %d): %s", + gid, ft_error_string(fterr)); + } + + // And we're done, so advance our position by the requested advance + // width, plus the user-requested extra advance. + dx += fontFace->glyph->advance.x; + } +} diff --git a/src/ttf.h b/src/ttf.h new file mode 100644 index 0000000..ec91127 --- /dev/null +++ b/src/ttf.h @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Routines to read a TrueType font as vector outlines, and generate them +// as entities, since they're always representable as either lines or +// quadratic Bezier curves. +// +// Copyright 2016 whitequark, Peter Barfuss. +//----------------------------------------------------------------------------- + +#ifndef __TTF_H +#define __TTF_H + +class TtfFont { +public: + std::string fontFile; + std::string name; + FT_FaceRec_ *fontFace; + double capHeight; + + std::string FontFileBaseName() const; + bool LoadFromFile(FT_LibraryRec_ *fontLibrary, bool nameOnly = true); + + void PlotString(const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v); +}; + +class TtfFontList { +public: + FT_LibraryRec_ *fontLibrary; + bool loaded; + List l; + + TtfFontList(); + ~TtfFontList(); + + void LoadAll(); + + void PlotString(const std::string &font, const std::string &str, + SBezierList *sbl, Vector origin, Vector u, Vector v); +}; + +#endif diff --git a/src/ui.h b/src/ui.h new file mode 100644 index 0000000..a041ed3 --- /dev/null +++ b/src/ui.h @@ -0,0 +1,748 @@ +//----------------------------------------------------------------------------- +// Declarations relating to our user interface, in both the graphics and +// text browser window. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- + +#ifndef __UI_H +#define __UI_H + +class TextWindow { +public: + enum { + MAX_COLS = 100, + MIN_COLS = 45, + MAX_ROWS = 2000 + }; + + typedef struct { + char c; + RgbaColor color; + } Color; + static const Color fgColors[]; + static const Color bgColors[]; + + float bgColorTable[256*3]; + float fgColorTable[256*3]; + + enum { + CHAR_WIDTH = 9, + CHAR_HEIGHT = 16, + LINE_HEIGHT = 20, + LEFT_MARGIN = 6, + }; + +#define CHECK_FALSE "\xEE\x80\x80" // U+E000 +#define CHECK_TRUE "\xEE\x80\x81" +#define RADIO_FALSE "\xEE\x80\x82" +#define RADIO_TRUE "\xEE\x80\x83" + + int scrollPos; // The scrollbar position, in half-row units + int halfRows; // The height of our window, in half-row units + + uint32_t text[MAX_ROWS][MAX_COLS]; + typedef void LinkFunction(int link, uint32_t v); + enum { NOT_A_LINK = 0 }; + struct { + char fg; + char bg; + RgbaColor bgRgb; + int link; + uint32_t data; + LinkFunction *f; + LinkFunction *h; + } meta[MAX_ROWS][MAX_COLS]; + int hoveredRow, hoveredCol; + + + int top[MAX_ROWS]; // in half-line units, or -1 for unused + int rows; + + // The row of icons at the top of the text window, to hide/show things + typedef struct { + bool *var; + uint8_t *icon; + const char *tip; + } HideShowIcon; + static HideShowIcon hideShowIcons[]; + static bool SPACER; + + // These are called by the platform-specific code. + void Paint(void); + void MouseEvent(bool isClick, bool leftDown, double x, double y); + void MouseScroll(double x, double y, int delta); + void MouseLeave(void); + void ScrollbarEvent(int newPos); + + enum { + PAINT = 0, + HOVER = 1, + CLICK = 2 + }; + void DrawOrHitTestIcons(int how, double mx, double my); + void TimerCallback(void); + Point2d oldMousePos; + HideShowIcon *hoveredIcon, *tooltippedIcon; + + Vector HsvToRgb(Vector hsv); + uint8_t *HsvPattern2d(void); + uint8_t *HsvPattern1d(double h, double s); + void ColorPickerDone(void); + bool DrawOrHitTestColorPicker(int how, bool leftDown, double x, double y); + + void Init(void); + void MakeColorTable(const Color *in, float *out); + void Printf(bool half, const char *fmt, ...); + void ClearScreen(void); + + void Show(void); + + // State for the screen that we are showing in the text window. + enum { + SCREEN_LIST_OF_GROUPS = 0, + SCREEN_GROUP_INFO = 1, + SCREEN_GROUP_SOLVE_INFO = 2, + SCREEN_CONFIGURATION = 3, + SCREEN_STEP_DIMENSION = 4, + SCREEN_LIST_OF_STYLES = 5, + SCREEN_STYLE_INFO = 6, + SCREEN_PASTE_TRANSFORMED = 7, + SCREEN_EDIT_VIEW = 8, + SCREEN_TANGENT_ARC = 9 + }; + typedef struct { + int screen; + + hGroup group; + hStyle style; + + hConstraint constraint; + bool dimIsDistance; + double dimFinish; + int dimSteps; + + struct { + int times; + Vector trans; + double theta; + Vector origin; + double scale; + } paste; + } ShownState; + ShownState shown; + + enum { + EDIT_NOTHING = 0, + // For multiple groups + EDIT_TIMES_REPEATED = 1, + EDIT_GROUP_NAME = 2, + EDIT_GROUP_SCALE = 3, + EDIT_GROUP_COLOR = 4, + EDIT_GROUP_OPACITY = 5, + // For the configuraiton screen + EDIT_LIGHT_DIRECTION = 100, + EDIT_LIGHT_INTENSITY = 101, + EDIT_COLOR = 102, + EDIT_CHORD_TOLERANCE = 103, + EDIT_MAX_SEGMENTS = 104, + EDIT_CAMERA_TANGENT = 105, + EDIT_GRID_SPACING = 106, + EDIT_DIGITS_AFTER_DECIMAL = 107, + EDIT_EXPORT_SCALE = 108, + EDIT_EXPORT_OFFSET = 109, + EDIT_CANVAS_SIZE = 110, + EDIT_G_CODE_DEPTH = 120, + EDIT_G_CODE_PASSES = 121, + EDIT_G_CODE_FEED = 122, + EDIT_G_CODE_PLUNGE_FEED = 123, + EDIT_AUTOSAVE_INTERVAL = 124, + // For TTF text + EDIT_TTF_TEXT = 300, + // For the step dimension screen + EDIT_STEP_DIM_FINISH = 400, + EDIT_STEP_DIM_STEPS = 401, + // For the styles stuff + EDIT_STYLE_WIDTH = 500, + EDIT_STYLE_TEXT_HEIGHT = 501, + EDIT_STYLE_TEXT_ANGLE = 502, + EDIT_STYLE_COLOR = 503, + EDIT_STYLE_FILL_COLOR = 504, + EDIT_STYLE_NAME = 505, + EDIT_BACKGROUND_COLOR = 506, + EDIT_BACKGROUND_IMG_SCALE = 507, + EDIT_STYLE_STIPPLE_PERIOD = 508, + // For paste transforming + EDIT_PASTE_TIMES_REPEATED = 600, + EDIT_PASTE_ANGLE = 601, + EDIT_PASTE_SCALE = 602, + // For view + EDIT_VIEW_SCALE = 700, + EDIT_VIEW_ORIGIN = 701, + EDIT_VIEW_PROJ_RIGHT = 702, + EDIT_VIEW_PROJ_UP = 703, + // For tangent arc + EDIT_TANGENT_ARC_RADIUS = 800 + }; + struct { + bool showAgain; + int meaning; + int i; + hGroup group; + hRequest request; + hStyle style; + } edit; + + static void ReportHowGroupSolved(hGroup hg); + + struct { + int halfRow; + int col; + + struct { + RgbaColor rgb; + double h, s, v; + bool show; + bool picker1dActive; + bool picker2dActive; + } colorPicker; + } editControl; + + void HideEditControl(void); + void ShowEditControl(int col, const std::string &str, int halfRow = -1); + void ShowEditControlWithColorPicker(int col, RgbaColor rgb); + + void ClearSuper(void); + + void ShowHeader(bool withNav); + // These are self-contained screens, that show some information about + // the sketch. + void ShowListOfGroups(void); + void ShowGroupInfo(void); + void ShowGroupSolveInfo(void); + void ShowConfiguration(void); + void ShowListOfStyles(void); + void ShowStyleInfo(void); + void ShowStepDimension(void); + void ShowPasteTransformed(void); + void ShowEditView(void); + void ShowTangentArc(void); + // Special screen, based on selection + void DescribeSelection(void); + + void GoToScreen(int screen); + + // All of these are callbacks from the GUI code; first from when + // we're describing an entity + static void ScreenEditTtfText(int link, uint32_t v); + static void ScreenSetTtfFont(int link, uint32_t v); + static void ScreenUnselectAll(int link, uint32_t v); + + // when we're describing a constraint + static void ScreenConstraintShowAsRadius(int link, uint32_t v); + + // and the rest from the stuff in textscreens.cpp + static void ScreenSelectGroup(int link, uint32_t v); + static void ScreenActivateGroup(int link, uint32_t v); + static void ScreenToggleGroupShown(int link, uint32_t v); + static void ScreenHowGroupSolved(int link, uint32_t v); + static void ScreenShowGroupsSpecial(int link, uint32_t v); + static void ScreenDeleteGroup(int link, uint32_t v); + + static void ScreenHoverConstraint(int link, uint32_t v); + static void ScreenHoverRequest(int link, uint32_t v); + static void ScreenSelectRequest(int link, uint32_t v); + static void ScreenSelectConstraint(int link, uint32_t v); + + static void ScreenChangeGroupOption(int link, uint32_t v); + static void ScreenColor(int link, uint32_t v); + static void ScreenOpacity(int link, uint32_t v); + + static void ScreenShowListOfStyles(int link, uint32_t v); + static void ScreenShowStyleInfo(int link, uint32_t v); + static void ScreenDeleteStyle(int link, uint32_t v); + static void ScreenChangeStylePatternType(int link, uint32_t v); + static void ScreenChangeStyleYesNo(int link, uint32_t v); + static void ScreenCreateCustomStyle(int link, uint32_t v); + static void ScreenLoadFactoryDefaultStyles(int link, uint32_t v); + static void ScreenAssignSelectionToStyle(int link, uint32_t v); + static void ScreenBackgroundImage(int link, uint32_t v); + + static void ScreenShowConfiguration(int link, uint32_t v); + static void ScreenShowEditView(int link, uint32_t v); + static void ScreenGoToWebsite(int link, uint32_t v); + + static void ScreenChangeFixExportColors(int link, uint32_t v); + static void ScreenChangeBackFaces(int link, uint32_t v); + static void ScreenChangeCheckClosedContour(int link, uint32_t v); + static void ScreenChangePwlCurves(int link, uint32_t v); + static void ScreenChangeCanvasSizeAuto(int link, uint32_t v); + static void ScreenChangeCanvasSize(int link, uint32_t v); + static void ScreenChangeShadedTriangles(int link, uint32_t v); + + static void ScreenAllowRedundant(int link, uint32_t v); + + static void ScreenStepDimSteps(int link, uint32_t v); + static void ScreenStepDimFinish(int link, uint32_t v); + static void ScreenStepDimGo(int link, uint32_t v); + + static void ScreenChangeTangentArc(int link, uint32_t v); + + static void ScreenPasteTransformed(int link, uint32_t v); + + static void ScreenHome(int link, uint32_t v); + + // These ones do stuff with the edit control + static void ScreenChangeExprA(int link, uint32_t v); + static void ScreenChangeGroupName(int link, uint32_t v); + static void ScreenChangeGroupScale(int link, uint32_t v); + static void ScreenChangeLightDirection(int link, uint32_t v); + static void ScreenChangeLightIntensity(int link, uint32_t v); + static void ScreenChangeColor(int link, uint32_t v); + static void ScreenChangeChordTolerance(int link, uint32_t v); + static void ScreenChangeMaxSegments(int link, uint32_t v); + static void ScreenChangeExportChordTolerance(int link, uint32_t v); + static void ScreenChangeExportMaxSegments(int link, uint32_t v); + static void ScreenChangeCameraTangent(int link, uint32_t v); + static void ScreenChangeGridSpacing(int link, uint32_t v); + static void ScreenChangeDigitsAfterDecimal(int link, uint32_t v); + static void ScreenChangeExportScale(int link, uint32_t v); + static void ScreenChangeExportOffset(int link, uint32_t v); + static void ScreenChangeGCodeParameter(int link, uint32_t v); + static void ScreenChangeAutosaveInterval(int link, uint32_t v); + static void ScreenChangeStyleName(int link, uint32_t v); + static void ScreenChangeStyleMetric(int link, uint32_t v); + static void ScreenChangeStyleTextAngle(int link, uint32_t v); + static void ScreenChangeStyleColor(int link, uint32_t v); + static void ScreenChangeBackgroundColor(int link, uint32_t v); + static void ScreenChangeBackgroundImageScale(int link, uint32_t v); + static void ScreenChangePasteTransformed(int link, uint32_t v); + static void ScreenChangeViewScale(int link, uint32_t v); + static void ScreenChangeViewOrigin(int link, uint32_t v); + static void ScreenChangeViewProjection(int link, uint32_t v); + + bool EditControlDoneForStyles(const char *s); + bool EditControlDoneForConfiguration(const char *s); + bool EditControlDoneForPaste(const char *s); + bool EditControlDoneForView(const char *s); + void EditControlDone(const char *s); +}; + +#define SELECTION_RADIUS 10.0 + +class GraphicsWindow { +public: + void Init(void); + + // This table describes the top-level menus in the graphics winodw. + typedef enum { + // File + MNU_NEW = 100, + MNU_OPEN, + MNU_OPEN_RECENT, + MNU_SAVE, + MNU_SAVE_AS, + MNU_EXPORT_PNG, + MNU_EXPORT_MESH, + MNU_EXPORT_SURFACES, + MNU_EXPORT_VIEW, + MNU_EXPORT_SECTION, + MNU_EXPORT_WIREFRAME, + MNU_IMPORT, + MNU_EXIT, + // View + MNU_ZOOM_IN, + MNU_ZOOM_OUT, + MNU_ZOOM_TO_FIT, + MNU_SHOW_GRID, + MNU_PERSPECTIVE_PROJ, + MNU_ONTO_WORKPLANE, + MNU_NEAREST_ORTHO, + MNU_NEAREST_ISO, + MNU_CENTER_VIEW, + MNU_SHOW_MENU_BAR, + MNU_SHOW_TOOLBAR, + MNU_SHOW_TEXT_WND, + MNU_UNITS_INCHES, + MNU_UNITS_MM, + MNU_FULL_SCREEN, + // Edit + MNU_UNDO, + MNU_REDO, + MNU_CUT, + MNU_COPY, + MNU_PASTE, + MNU_PASTE_TRANSFORM, + MNU_DELETE, + MNU_SELECT_CHAIN, + MNU_SELECT_ALL, + MNU_SNAP_TO_GRID, + MNU_ROTATE_90, + MNU_UNSELECT_ALL, + MNU_REGEN_ALL, + // Request + MNU_SEL_WORKPLANE, + MNU_FREE_IN_3D, + MNU_DATUM_POINT, + MNU_WORKPLANE, + MNU_LINE_SEGMENT, + MNU_CONSTR_SEGMENT, + MNU_CIRCLE, + MNU_ARC, + MNU_RECTANGLE, + MNU_CUBIC, + MNU_TTF_TEXT, + MNU_SPLIT_CURVES, + MNU_TANGENT_ARC, + MNU_CONSTRUCTION, + // Group + MNU_GROUP_3D, + MNU_GROUP_WRKPL, + MNU_GROUP_EXTRUDE, + MNU_GROUP_LATHE, + MNU_GROUP_ROT, + MNU_GROUP_TRANS, + MNU_GROUP_LINK, + MNU_GROUP_RECENT, + // Constrain + MNU_DISTANCE_DIA, + MNU_REF_DISTANCE, + MNU_ANGLE, + MNU_REF_ANGLE, + MNU_OTHER_ANGLE, + MNU_REFERENCE, + MNU_EQUAL, + MNU_RATIO, + MNU_DIFFERENCE, + MNU_ON_ENTITY, + MNU_SYMMETRIC, + MNU_AT_MIDPOINT, + MNU_HORIZONTAL, + MNU_VERTICAL, + MNU_PARALLEL, + MNU_PERPENDICULAR, + MNU_ORIENTED_SAME, + MNU_WHERE_DRAGGED, + MNU_COMMENT, + // Analyze + MNU_VOLUME, + MNU_AREA, + MNU_INTERFERENCE, + MNU_NAKED_EDGES, + MNU_SHOW_DOF, + MNU_TRACE_PT, + MNU_STOP_TRACING, + MNU_STEP_DIM, + // Help, + MNU_WEBSITE, + MNU_ABOUT + } MenuId; + typedef void MenuHandler(int id); + enum { + ESCAPE_KEY = 27, + DELETE_KEY = 127, + FUNCTION_KEY_BASE = 0xf0 + }; + enum { + SHIFT_MASK = 0x100, + CTRL_MASK = 0x200 + }; + enum MenuItemKind { + MENU_ITEM_NORMAL = 0, + MENU_ITEM_CHECK, + MENU_ITEM_RADIO + }; + typedef struct { + int level; // 0 == on menu bar, 1 == one level down + const char *label; // or NULL for a separator + int id; // unique ID + int accel; // keyboard accelerator + MenuItemKind kind; + MenuHandler *fn; + } MenuEntry; + static const MenuEntry menu[]; + static void MenuView(int id); + static void MenuEdit(int id); + static void MenuRequest(int id); + void DeleteSelection(void); + void CopySelection(void); + void PasteClipboard(Vector trans, double theta, double scale); + static void MenuClipboard(int id); + + // The width and height (in pixels) of the window. + double width, height; + // These parameters define the map from 2d screen coordinates to the + // coordinates of the 3d sketch points. We will use an axonometric + // projection. + Vector offset; + Vector projRight; + Vector projUp; + double scale; + struct { + bool mouseDown; + Vector offset; + Vector projRight; + Vector projUp; + Point2d mouse; + Point2d mouseOnButtonDown; + Vector marqueePoint; + bool startedMoving; + } orig; + // We need to detect when the projection is changed to invalidate + // caches for drawn items. + struct { + Vector offset; + Vector projRight; + Vector projUp; + double scale; + } cached; + + // Most recent mouse position, updated every time the mouse moves. + Point2d currentMousePosition; + + // When the user is dragging a point, don't solve multiple times without + // allowing a paint in between. The extra solves are wasted if they're + // not displayed. + bool havePainted; + // Similarly, don't draw edges and outlines, since that's too slow + // for real-time dragging. + bool isDegraded; + + // Some state for the context menu. + struct { + bool active; + } context; + + void NormalizeProjectionVectors(void); + Point2d ProjectPoint(Vector p); + Vector ProjectPoint3(Vector p); + Vector ProjectPoint4(Vector p, double *w); + Vector UnProjectPoint(Point2d p); + Vector UnProjectPoint3(Vector p); + void AnimateOnto(Quaternion quatf, Vector offsetf); + void AnimateOntoWorkplane(void); + Vector VectorFromProjs(Vector rightUpForward); + void HandlePointForZoomToFit(Vector p, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective); + void LoopOverPoints(const std::vector &entity, const std::vector &faces, Point2d *pmax, Point2d *pmin, + double *wmin, bool usePerspective, bool includeMesh); + void ZoomToFit(bool includingInvisibles, bool useSelection = false); + + hGroup activeGroup; + void EnsureValidActives(void); + bool LockedInWorkplane(void); + void SetWorkplaneFreeIn3d(void); + hEntity ActiveWorkplane(void); + void ForceTextWindowShown(void); + + // Operations that must be completed by doing something with the mouse + // are noted here. These occupy the same space as the menu ids. + enum { + FIRST_PENDING = 0x0f000000, + DRAGGING_POINTS = 0x0f000000, + DRAGGING_NEW_POINT = 0x0f000001, + DRAGGING_NEW_LINE_POINT = 0x0f000002, + DRAGGING_NEW_CUBIC_POINT = 0x0f000003, + DRAGGING_NEW_ARC_POINT = 0x0f000004, + DRAGGING_CONSTRAINT = 0x0f000005, + DRAGGING_RADIUS = 0x0f000006, + DRAGGING_NORMAL = 0x0f000007, + DRAGGING_NEW_RADIUS = 0x0f000008, + DRAGGING_MARQUEE = 0x0f000009 + }; + + enum SuggestedConstraint { + SUGGESTED_NONE = 0, + SUGGESTED_HORIZONTAL = Constraint::HORIZONTAL, + SUGGESTED_VERTICAL = Constraint::VERTICAL, + }; + + struct { + int operation; + + hRequest request; + hEntity point; + List points; + hEntity circle; + hEntity normal; + hConstraint constraint; + + const char *description; + + SuggestedConstraint suggestion; + } pending; + void ClearPending(void); + // The constraint that is being edited with the on-screen textbox. + hConstraint constraintBeingEdited; + + SuggestedConstraint SuggestLineConstraint(hRequest lineSegment); + + Vector SnapToGrid(Vector p); + bool ConstrainPointByHovered(hEntity pt); + void DeleteTaggedRequests(void); + hRequest AddRequest(int type, bool rememberForUndo); + hRequest AddRequest(int type); + + class ParametricCurve { + public: + bool isLine; // else circle + Vector p0, p1; + Vector u, v; + double r, theta0, theta1, dtheta; + + void MakeFromEntity(hEntity he, bool reverse); + Vector PointAt(double t); + Vector TangentAt(double t); + double LengthForAuto(void); + + hRequest CreateRequestTrimmedTo(double t, bool extraConstraints, + hEntity orig, hEntity arc, bool arcFinish); + void ConstrainPointIfCoincident(hEntity hpt); + }; + void MakeTangentArc(void); + void SplitLinesOrCurves(void); + hEntity SplitEntity(hEntity he, Vector pinter); + hEntity SplitLine(hEntity he, Vector pinter); + hEntity SplitCircle(hEntity he, Vector pinter); + hEntity SplitCubic(hEntity he, Vector pinter); + void ReplacePointInConstraints(hEntity oldpt, hEntity newpt); + void RemoveConstraintsForPointBeingDeleted(hEntity hpt); + void FixConstraintsForRequestBeingDeleted(hRequest hr); + void FixConstraintsForPointBeingDeleted(hEntity hpt); + + // The current selection. + class Selection { + public: + int tag; + + hEntity entity; + hConstraint constraint; + bool emphasized; + + void Draw(void); + + void Clear(void); + bool IsEmpty(void); + bool Equals(Selection *b); + bool HasEndpoints(void); + }; + Selection hover; + bool hoverWasSelectedOnMousedown; + List selection; + void HitTestMakeSelection(Point2d mp); + void ClearSelection(void); + void ClearNonexistentSelectionItems(void); + struct { + std::vector point; + std::vector entity; + std::vector anyNormal; + std::vector vector; + std::vector face; + std::vector constraint; + int points; + int entities; + int workplanes; + int faces; + int lineSegments; + int circlesOrArcs; + int arcs; + int cubics; + int periodicCubics; + int anyNormals; + int vectors; + int constraints; + int stylables; + int constraintLabels; + int withEndpoints; + int n; + } gs; + void GroupSelection(void); + bool IsSelected(Selection *s); + bool IsSelected(hEntity he); + void MakeSelected(hEntity he); + void MakeSelected(hConstraint hc); + void MakeSelected(Selection *s); + void MakeUnselected(hEntity he, bool coincidentPointTrick); + void MakeUnselected(Selection *s, bool coincidentPointTrick); + void SelectByMarquee(void); + void ClearSuper(void); + + enum { + CMNU_UNSELECT_ALL = 0x100, + CMNU_UNSELECT_HOVERED = 0x101, + CMNU_CUT_SEL = 0x102, + CMNU_COPY_SEL = 0x103, + CMNU_PASTE = 0x104, + CMNU_PASTE_XFRM = 0x105, + CMNU_DELETE_SEL = 0x106, + CMNU_SELECT_CHAIN = 0x107, + CMNU_NEW_CUSTOM_STYLE = 0x110, + CMNU_NO_STYLE = 0x111, + CMNU_GROUP_INFO = 0x120, + CMNU_STYLE_INFO = 0x121, + CMNU_REFERENCE_DIM = 0x130, + CMNU_OTHER_ANGLE = 0x131, + CMNU_DEL_COINCIDENT = 0x132, + CMNU_SNAP_TO_GRID = 0x140, + CMNU_REMOVE_SPLINE_PT = 0x141, + CMNU_ADD_SPLINE_PT = 0x142, + CMNU_FIRST_STYLE = 0x40000000 + }; + void ContextMenuListStyles(void); + int64_t contextMenuCancelTime; + + // The toolbar, in toolbar.cpp + bool ToolbarDrawOrHitTest(int x, int y, bool paint, int *menuHit); + void ToolbarDraw(void); + bool ToolbarMouseMoved(int x, int y); + bool ToolbarMouseDown(int x, int y); + static void TimerCallback(void); + int toolbarHovered; + int toolbarTooltipped; + int toolbarMouseX, toolbarMouseY; + + // This sets what gets displayed. + bool showWorkplanes; + bool showNormals; + bool showPoints; + bool showConstraints; + bool showTextWindow; + bool showShaded; + bool showEdges; + bool showOutlines; + bool showFaces; + bool showMesh; + bool showHdnLines; + void ToggleBool(bool *v); + + bool showSnapGrid; + + void AddPointToDraggedList(hEntity hp); + void StartDraggingByEntity(hEntity he); + void StartDraggingBySelection(void); + void UpdateDraggedNum(Vector *pos, double mx, double my); + void UpdateDraggedPoint(hEntity hp, double mx, double my); + + // These are called by the platform-specific code. + void Paint(void); + void MouseMoved(double x, double y, bool leftDown, bool middleDown, + bool rightDown, bool shiftDown, bool ctrlDown); + void MouseLeftDown(double x, double y); + void MouseLeftUp(double x, double y); + void MouseLeftDoubleClick(double x, double y); + void MouseMiddleOrRightDown(double x, double y); + void MouseRightUp(double x, double y); + void MouseScroll(double x, double y, int delta); + void MouseLeave(void); + bool KeyDown(int c); + void EditControlDone(const char *s); + + int64_t lastSpaceNavigatorTime; + hGroup lastSpaceNavigatorGroup; + void SpaceNavigatorMoved(double tx, double ty, double tz, + double rx, double ry, double rz, bool shiftDown); + void SpaceNavigatorButtonUp(void); +}; + + +#endif diff --git a/src/undoredo.cpp b/src/undoredo.cpp new file mode 100644 index 0000000..04b96ee --- /dev/null +++ b/src/undoredo.cpp @@ -0,0 +1,170 @@ +//----------------------------------------------------------------------------- +// The user-visible undo/redo operation; whenever they change something, we +// record our state and push it on a stack, and we pop the stack when they +// select undo. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void SolveSpaceUI::UndoRemember(void) { + unsaved = true; + PushFromCurrentOnto(&undo); + UndoClearStack(&redo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoUndo(void) { + if(undo.cnt <= 0) return; + + PushFromCurrentOnto(&redo); + PopOntoCurrentFrom(&undo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoRedo(void) { + if(redo.cnt <= 0) return; + + PushFromCurrentOnto(&undo); + PopOntoCurrentFrom(&redo); + UndoEnableMenus(); +} + +void SolveSpaceUI::UndoEnableMenus(void) { + EnableMenuById(GraphicsWindow::MNU_UNDO, undo.cnt > 0); + EnableMenuById(GraphicsWindow::MNU_REDO, redo.cnt > 0); +} + +void SolveSpaceUI::PushFromCurrentOnto(UndoStack *uk) { + int i; + + if(uk->cnt == MAX_UNDO) { + UndoClearState(&(uk->d[uk->write])); + // And then write in to this one again + } else { + (uk->cnt)++; + } + + UndoState *ut = &(uk->d[uk->write]); + *ut = {}; + for(i = 0; i < SK.group.n; i++) { + Group *src = &(SK.group.elem[i]); + Group dest = *src; + // And then clean up all the stuff that needs to be a deep copy, + // and zero out all the dynamic stuff that will get regenerated. + dest.clean = false; + dest.solved = {}; + dest.polyLoops = {}; + dest.bezierLoops = {}; + dest.bezierOpens = {}; + dest.polyError = {}; + dest.thisMesh = {}; + dest.runningMesh = {}; + dest.thisShell = {}; + dest.runningShell = {}; + dest.displayMesh = {}; + dest.displayEdges = {}; + dest.displayOutlines = {}; + + dest.remap = {}; + src->remap.DeepCopyInto(&(dest.remap)); + + dest.impMesh = {}; + dest.impShell = {}; + dest.impEntity = {}; + ut->group.Add(&dest); + } + for(i = 0; i < SK.groupOrder.n; i++) { + ut->groupOrder.Add(&(SK.groupOrder.elem[i])); + } + for(i = 0; i < SK.request.n; i++) { + ut->request.Add(&(SK.request.elem[i])); + } + for(i = 0; i < SK.constraint.n; i++) { + Constraint *src = &(SK.constraint.elem[i]); + Constraint dest = *src; + dest.dogd = {}; + ut->constraint.Add(&dest); + } + for(i = 0; i < SK.param.n; i++) { + ut->param.Add(&(SK.param.elem[i])); + } + for(i = 0; i < SK.style.n; i++) { + ut->style.Add(&(SK.style.elem[i])); + } + ut->activeGroup = SS.GW.activeGroup; + + uk->write = WRAP(uk->write + 1, MAX_UNDO); +} + +void SolveSpaceUI::PopOntoCurrentFrom(UndoStack *uk) { + int i; + + if(uk->cnt <= 0) oops(); + (uk->cnt)--; + uk->write = WRAP(uk->write - 1, MAX_UNDO); + + UndoState *ut = &(uk->d[uk->write]); + + // Free everything in the main copy of the program before replacing it + for(i = 0; i < SK.groupOrder.n; i++) { + Group *g = SK.GetGroup(SK.groupOrder.elem[i]); + g->Clear(); + } + SK.group.Clear(); + SK.groupOrder.Clear(); + SK.request.Clear(); + SK.constraint.Clear(); + SK.param.Clear(); + SK.style.Clear(); + + // And then do a shallow copy of the state from the undo list + ut->group.MoveSelfInto(&(SK.group)); + for(i = 0; i < ut->groupOrder.n; i++) + SK.groupOrder.Add(&ut->groupOrder.elem[i]); + ut->request.MoveSelfInto(&(SK.request)); + ut->constraint.MoveSelfInto(&(SK.constraint)); + ut->param.MoveSelfInto(&(SK.param)); + ut->style.MoveSelfInto(&(SK.style)); + SS.GW.activeGroup = ut->activeGroup; + + // No need to free it, since a shallow copy was made above + *ut = {}; + + // And reset the state everywhere else in the program, since the + // sketch just changed a lot. + SS.GW.ClearSuper(); + SS.TW.ClearSuper(); + SS.ReloadAllImported(); + SS.GenerateAll(SolveSpaceUI::GENERATE_ALL); + SS.ScheduleShowTW(); + + // Activate the group that was active before. + Group *activeGroup = SK.GetGroup(SS.GW.activeGroup); + activeGroup->Activate(); +} + +void SolveSpaceUI::UndoClearStack(UndoStack *uk) { + while(uk->cnt > 0) { + uk->write = WRAP(uk->write - 1, MAX_UNDO); + (uk->cnt)--; + UndoClearState(&(uk->d[uk->write])); + } + *uk = {}; // for good measure +} + +void SolveSpaceUI::UndoClearState(UndoState *ut) { + int i; + for(i = 0; i < ut->group.n; i++) { + Group *g = &(ut->group.elem[i]); + + g->remap.Clear(); + } + ut->group.Clear(); + ut->request.Clear(); + ut->constraint.Clear(); + ut->param.Clear(); + ut->style.Clear(); + *ut = {}; +} + diff --git a/src/unix/gloffscreen.cpp b/src/unix/gloffscreen.cpp new file mode 100644 index 0000000..be836e2 --- /dev/null +++ b/src/unix/gloffscreen.cpp @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// Offscreen rendering in OpenGL using framebuffer objects. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#ifdef __APPLE__ +#include +#else +#include +#endif + +#include "gloffscreen.h" +#include "solvespace.h" + +GLOffscreen::GLOffscreen() : _pixels(NULL), _pixels_inv(NULL), _width(0), _height(0) { +#ifndef __APPLE__ + if(glewInit() != GLEW_OK) + oops(); +#endif + + if(!GL_EXT_framebuffer_object) + oops(); + + glGenFramebuffersEXT(1, &_framebuffer); + glGenRenderbuffersEXT(1, &_color_renderbuffer); + glGenRenderbuffersEXT(1, &_depth_renderbuffer); +} + +GLOffscreen::~GLOffscreen() { + delete[] _pixels; + delete[] _pixels_inv; + glDeleteRenderbuffersEXT(1, &_depth_renderbuffer); + glDeleteRenderbuffersEXT(1, &_color_renderbuffer); + glDeleteFramebuffersEXT(1, &_framebuffer); +} + +bool GLOffscreen::begin(int width, int height) { + if(_width != width || _height != height) { + delete[] _pixels; + delete[] _pixels_inv; + + _pixels = new uint32_t[width * height * 4]; + _pixels_inv = new uint32_t[width * height * 4]; + + _width = width; + _height = height; + } + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _framebuffer); + + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, _color_renderbuffer); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, _width, _height); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_RENDERBUFFER_EXT, _color_renderbuffer); + + glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, _depth_renderbuffer); + glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, _width, _height); + glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, + GL_RENDERBUFFER_EXT, _depth_renderbuffer); + + if(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT) + return true; + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + return false; +} + +uint8_t *GLOffscreen::end(bool flip) { +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + glReadPixels(0, 0, _width, _height, + GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, _pixels_inv); +#else + glReadPixels(0, 0, _width, _height, + GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, _pixels_inv); +#endif + + if(flip) { + /* in OpenGL coordinates, bottom is zero Y */ + for(int i = 0; i < _height; i++) + memcpy(&_pixels[_width * i], &_pixels_inv[_width * (_height - i - 1)], _width * 4); + } + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + + return (uint8_t*) (flip ? _pixels : _pixels_inv); +} diff --git a/src/unix/gloffscreen.h b/src/unix/gloffscreen.h new file mode 100644 index 0000000..c897be3 --- /dev/null +++ b/src/unix/gloffscreen.h @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Offscreen rendering in OpenGL using framebuffer objects. +// +// Copyright 2015 +//----------------------------------------------------------------------------- +#ifndef __GLOFFSCREEN_H +#define __GLOFFSCREEN_H + +#include + +class GLOffscreen { +public: + /* these allocate and deallocate OpenGL resources. + an OpenGL context /must/ be current. */ + GLOffscreen(); + ~GLOffscreen(); + + /* prepare for drawing a frame of specified size. + returns true if OpenGL likes our configuration, false + otherwise. if it returns false, the OpenGL state is restored. */ + bool begin(int width, int height); + + /* get pixels out of the frame and restore OpenGL state. + the pixel format is ARGB32 with top row at index 0 if + flip is true and bottom row at index 0 if flip is false. + the returned array is valid until the next call to begin() */ + uint8_t *end(bool flip = true); + +private: + unsigned int _framebuffer; + unsigned int _color_renderbuffer, _depth_renderbuffer; + uint32_t *_pixels, *_pixels_inv; + int _width, _height; +}; + +#endif diff --git a/src/unix/solvespace-16x16.png b/src/unix/solvespace-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2b23f0c4f23fe50350821f4133fed7bfb9ca43 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF2OC7#SFv>KYj98X1Hb8e5qfSeY1W8yH&|7;KPN g5kk?Bo1c=IR*74~L8m$EfEpM)UHx3vIVCg!0ByBi4*&oF literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-16x16.xpm b/src/unix/solvespace-16x16.xpm new file mode 100644 index 0000000..3cd0662 --- /dev/null +++ b/src/unix/solvespace-16x16.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char *solvespace_16x16[] = { +/* columns rows colors chars-per-pixel */ +"16 16 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOXOOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOOOOXoOOOOO", +"OOO OOXXXXXXXOOO", +"OOO OOOoooooooOO", +"OO...OOOOOOOOOOO", +" ... ", +"OO...OOOOOOOOOOO", +"OOO OOOOOOOOOOOO", +"OOO OOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace-24x24.png b/src/unix/solvespace-24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba03eed8c58e3fbb291f8ae089bb3a2be9a82a2 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5ln@H=32_C|KyZ)Y+Ue7$ z<*qXP|Nno@tR37yA;yv*zhDN3XE)M7oFs2|7uFy7FOLH`>?NMQuI%@jMVUmz7b?Zy z1_~K?x;TbNTux3<;5QIDo9OgVBH&nHP*6}q@r>Ty-i0#a>@9Pf^!l0<8Z?`aFI>XJ z!2XIwewzEDBS5{XC9V-ADTyViR>?)FK#IZ0z|d6Jz*yJFAjHtv%GAKh#8}(F*vi0Q igS?6miiX_$l+3hB+!_u#%~=Q3z~JfX=d#Wzp$Pyu|6K_H literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-24x24.xpm b/src/unix/solvespace-24x24.xpm new file mode 100644 index 0000000..9d1c02e --- /dev/null +++ b/src/unix/solvespace-24x24.xpm @@ -0,0 +1,35 @@ +/* XPM */ +static char *solvespace_24x24[] = { +/* columns rows colors chars-per-pixel */ +"24 24 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOXOOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOOOOXoOOOOOOOOO", +"OOOOOOO OOXXXXXXXOOOOOOO", +"OOOOOOO OOOoooooooOOOOOO", +"OOOOOO...OOOOOOOOOOOOOOO", +"OOOO ... OOOO", +"OOOOOO...OOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOO OOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace-32x32.png b/src/unix/solvespace-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a24bf6a8472c7c7b2cbbe0f3d72f09759ff6def4 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAr#;f;tHgJ;2y)Z)2C0% zU1j+H|Noj?;(M5ynj9D%Sq_LO zRdP`(kYX@0Ff`RQFxE9P2r)FaGBvO= qG1fLPwlXl-Ag>~Xq9HdwB{QuOw}yjGbJhVhFnGH9xvXI{(rPmO*bPE`X1*QT2iEIb=-Hu6r;dHCp&)1;OK3IR?6 zj2zw*^4LRdJED_TFf**$#4|hnmaRC@B-Ikvh?11Vl2ohYqEsNoU}Ruus%v1ZYh(~& wXl!L_U}a*gZD4F=V6Z`6MF>ShZhlH;S|x4`2c71u18QLKboFyt=akR{0Omwt`Tzg` literal 0 HcmV?d00001 diff --git a/src/unix/solvespace-48x48.xpm b/src/unix/solvespace-48x48.xpm new file mode 100644 index 0000000..c5adf53 --- /dev/null +++ b/src/unix/solvespace-48x48.xpm @@ -0,0 +1,59 @@ +/* XPM */ +static char *solvespace_48x48[] = { +/* columns rows colors chars-per-pixel */ +"48 48 5 1 ", +" c black", +". c #1ED500", +"X c #DE00D6", +"o c #CBCBCB", +"O c None", +/* pixels */ +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOooooooooooooOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOO ...... OOOOOOOO", +"OOOOOOOO ...... OOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" +}; diff --git a/src/unix/solvespace.desktop b/src/unix/solvespace.desktop new file mode 100644 index 0000000..d2d7398 --- /dev/null +++ b/src/unix/solvespace.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Name=SolveSpace +Comment=A parametric 2d/3d CAD +Exec=/usr/bin/solvespace +Icon=solvespace +Type=Application +Categories=Graphics +Keywords=parametric;cad;2d;3d; diff --git a/src/unix/unixutil.cpp b/src/unix/unixutil.cpp new file mode 100644 index 0000000..7c1d921 --- /dev/null +++ b/src/unix/unixutil.cpp @@ -0,0 +1,112 @@ +//----------------------------------------------------------------------------- +// Utility functions used by the Unix port. Notably, our memory allocation; +// we use two separate allocators, one for long-lived stuff and one for +// stuff that gets freed after every regeneration of the model, to save us +// the trouble of freeing the latter explicitly. +// +// Copyright 2008-2013 Jonathan Westhues. +// Copyright 2013 Daniel Richard G. +//----------------------------------------------------------------------------- +#include + +#include "solvespace.h" + +namespace SolveSpace { + +void dbp(const char *str, ...) +{ + va_list f; + static char buf[1024*50]; + va_start(f, str); + vsnprintf(buf, sizeof(buf), str, f); + va_end(f); + + fputs(buf, stderr); + fputc('\n', stderr); +} + +FILE *ssfopen(const std::string &filename, const char *mode) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + return fopen(filename.c_str(), mode); +} + +void ssremove(const std::string &filename) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + remove(filename.c_str()); +} + +int64_t GetUnixTime(void) +{ + time_t ret; + time(&ret); + return (int64_t)ret; +} + +//----------------------------------------------------------------------------- +// A separate heap, on which we allocate expressions. Maybe a bit faster, +// since fragmentation is less of a concern, and it also makes it possible +// to be sloppy with our memory management, and just free everything at once +// at the end. +//----------------------------------------------------------------------------- + +typedef struct _AllocTempHeader AllocTempHeader; + +typedef struct _AllocTempHeader { + AllocTempHeader *prev; + AllocTempHeader *next; +} AllocTempHeader; + +static AllocTempHeader *Head = NULL; + +void *AllocTemporary(size_t n) +{ + AllocTempHeader *h = + (AllocTempHeader *)malloc(n + sizeof(AllocTempHeader)); + h->prev = NULL; + h->next = Head; + if(Head) Head->prev = h; + Head = h; + memset(&h[1], 0, n); + return (void *)&h[1]; +} + +void FreeTemporary(void *p) +{ + AllocTempHeader *h = (AllocTempHeader *)p - 1; + if(h->prev) { + h->prev->next = h->next; + } else { + Head = h->next; + } + if(h->next) h->next->prev = h->prev; + free(h); +} + +void FreeAllTemporary(void) +{ + AllocTempHeader *h = Head; + while(h) { + AllocTempHeader *f = h; + h = h->next; + free(f); + } + Head = NULL; +} + +void *MemAlloc(size_t n) { + void *p = malloc(n); + if(!p) oops(); + return p; +} + +void MemFree(void *p) { + free(p); +} + +void InitHeaps(void) { + /* nothing to do */ +} + +}; diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..847f378 --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,1080 @@ +//----------------------------------------------------------------------------- +// Utility functions, mostly various kinds of vector math (working on real +// numbers, not working on quantities in the symbolic algebra system). +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +std::string SolveSpace::ssprintf(const char *fmt, ...) +{ + va_list va; + + va_start(va, fmt); + int size = vsnprintf(NULL, 0, fmt, va); + if(size < 0) oops(); + va_end(va); + + std::string result; + result.resize(size); + + va_start(va, fmt); + vsnprintf(&result[0], size + 1, fmt, va); + va_end(va); + + return result; +} + +char32_t utf8_iterator::operator*() +{ + const uint8_t *it = (const uint8_t*) this->p; + char32_t result = *it; + + if((result & 0x80) != 0) { + unsigned int mask = 0x40; + + do { + result <<= 6; + unsigned int c = (*++it); + mask <<= 5; + result += c - 0x80; + } while((result & mask) != 0); + + result &= mask - 1; + } + + this->n = (const char*) (it + 1); + return result; +} + +bool SolveSpace::FilenameHasExtension(const std::string &str, const char *ext) +{ + int i, ls = str.length(), le = strlen(ext); + + if(ls < le) return false; + + for(i = 0; i < le; i++) { + if(tolower(ext[le-i-1]) != tolower(str[ls-i-1])) { + return false; + } + } + return true; +} + +bool SolveSpace::ReadFile(const std::string &filename, std::string *data) +{ + FILE *f = ssfopen(filename.c_str(), "rb"); + if(f == NULL) + return false; + + fseek(f, 0, SEEK_END); + data->resize(ftell(f)); + fseek(f, 0, SEEK_SET); + fread(&(*data)[0], 1, data->size(), f); + fclose(f); + + return true; +} + +bool SolveSpace::WriteFile(const std::string &filename, const std::string &data) +{ + FILE *f = ssfopen(filename.c_str(), "wb"); + if(f == NULL) + return false; + + fwrite(&data[0], 1, data.size(), f); + fclose(f); + + return true; +} + +void SolveSpace::MakeMatrix(double *mat, + double a11, double a12, double a13, double a14, + double a21, double a22, double a23, double a24, + double a31, double a32, double a33, double a34, + double a41, double a42, double a43, double a44) +{ + mat[ 0] = a11; + mat[ 1] = a21; + mat[ 2] = a31; + mat[ 3] = a41; + mat[ 4] = a12; + mat[ 5] = a22; + mat[ 6] = a32; + mat[ 7] = a42; + mat[ 8] = a13; + mat[ 9] = a23; + mat[10] = a33; + mat[11] = a43; + mat[12] = a14; + mat[13] = a24; + mat[14] = a34; + mat[15] = a44; +} + +//----------------------------------------------------------------------------- +// Word-wrap the string for our message box appropriately, and then display +// that string. +//----------------------------------------------------------------------------- +static void DoStringForMessageBox(const char *str, va_list f, bool error) +{ + char inBuf[1024*50]; + vsprintf(inBuf, str, f); + + char outBuf[1024*50]; + int i = 0, j = 0, len = 0, longestLen = 47; + int rows = 0, cols = 0; + + // Count the width of the longest line that starts with spaces; those + // are list items, that should not be split in the middle. + bool listLine = false; + while(inBuf[i]) { + if(inBuf[i] == '\r') { + // ignore these + } else if(inBuf[i] == ' ' && len == 0) { + listLine = true; + } else if(inBuf[i] == '\n') { + if(listLine) longestLen = max(longestLen, len); + len = 0; + } else { + len++; + } + i++; + } + if(listLine) longestLen = max(longestLen, len); + + // Word wrap according to our target line length longestLen. + len = 0; + i = 0; + while(inBuf[i]) { + if(inBuf[i] == '\r') { + // ignore these + } else if(inBuf[i] == '\n') { + outBuf[j++] = '\n'; + if(len == 0) rows++; + len = 0; + } else if(inBuf[i] == ' ' && len > longestLen) { + outBuf[j++] = '\n'; + len = 0; + } else { + outBuf[j++] = inBuf[i]; + // Count rows when we draw the first character; so an empty + // row doesn't end up counting. + if(len == 0) rows++; + len++; + } + cols = max(cols, len); + i++; + } + outBuf[j++] = '\0'; + + // And then display the text with our actual longest line length. + DoMessageBox(outBuf, rows, cols, error); +} +void SolveSpace::Error(const char *str, ...) +{ + va_list f; + va_start(f, str); + DoStringForMessageBox(str, f, true); + va_end(f); +} +void SolveSpace::Message(const char *str, ...) +{ + va_list f; + va_start(f, str); + DoStringForMessageBox(str, f, false); + va_end(f); +} + +void SolveSpace::CnfFreezeBool(bool v, const std::string &name) + { CnfFreezeInt(v ? 1 : 0, name); } + +void SolveSpace::CnfFreezeColor(RgbaColor v, const std::string &name) + { CnfFreezeInt(v.ToPackedInt(), name); } + +bool SolveSpace::CnfThawBool(bool v, const std::string &name) + { return CnfThawInt(v ? 1 : 0, name) != 0; } + +RgbaColor SolveSpace::CnfThawColor(RgbaColor v, const std::string &name) + { return RgbaColor::FromPackedInt(CnfThawInt(v.ToPackedInt(), name)); } + +//----------------------------------------------------------------------------- +// Solve a mostly banded matrix. In a given row, there are LEFT_OF_DIAG +// elements to the left of the diagonal element, and RIGHT_OF_DIAG elements to +// the right (so that the total band width is LEFT_OF_DIAG + RIGHT_OF_DIAG + 1). +// There also may be elements in the last two columns of any row. We solve +// without pivoting. +//----------------------------------------------------------------------------- +void BandedMatrix::Solve(void) { + int i, ip, j, jp; + double temp; + + // Reduce the matrix to upper triangular form. + for(i = 0; i < n; i++) { + for(ip = i+1; ip < n && ip <= (i + LEFT_OF_DIAG); ip++) { + temp = A[ip][i]/A[i][i]; + + for(jp = i; jp < (n - 2) && jp <= (i + RIGHT_OF_DIAG); jp++) { + A[ip][jp] -= temp*(A[i][jp]); + } + A[ip][n-2] -= temp*(A[i][n-2]); + A[ip][n-1] -= temp*(A[i][n-1]); + + B[ip] -= temp*B[i]; + } + } + + // And back-substitute. + for(i = n - 1; i >= 0; i--) { + temp = B[i]; + + if(i < n-1) temp -= X[n-1]*A[i][n-1]; + if(i < n-2) temp -= X[n-2]*A[i][n-2]; + + for(j = min(n - 3, i + RIGHT_OF_DIAG); j > i; j--) { + temp -= X[j]*A[i][j]; + } + X[i] = temp / A[i][i]; + } +} + +const Quaternion Quaternion::IDENTITY = { 1, 0, 0, 0 }; + +Quaternion Quaternion::From(double w, double vx, double vy, double vz) { + Quaternion q; + q.w = w; + q.vx = vx; + q.vy = vy; + q.vz = vz; + return q; +} + +Quaternion Quaternion::From(hParam w, hParam vx, hParam vy, hParam vz) { + Quaternion q; + q.w = SK.GetParam(w )->val; + q.vx = SK.GetParam(vx)->val; + q.vy = SK.GetParam(vy)->val; + q.vz = SK.GetParam(vz)->val; + return q; +} + +Quaternion Quaternion::From(Vector axis, double dtheta) { + Quaternion q; + double c = cos(dtheta / 2), s = sin(dtheta / 2); + axis = axis.WithMagnitude(s); + q.w = c; + q.vx = axis.x; + q.vy = axis.y; + q.vz = axis.z; + return q; +} + +Quaternion Quaternion::From(Vector u, Vector v) +{ + Vector n = u.Cross(v); + + Quaternion q; + double s, tr = 1 + u.x + v.y + n.z; + if(tr > 1e-4) { + s = 2*sqrt(tr); + q.w = s/4; + q.vx = (v.z - n.y)/s; + q.vy = (n.x - u.z)/s; + q.vz = (u.y - v.x)/s; + } else { + if(u.x > v.y && u.x > n.z) { + s = 2*sqrt(1 + u.x - v.y - n.z); + q.w = (v.z - n.y)/s; + q.vx = s/4; + q.vy = (u.y + v.x)/s; + q.vz = (n.x + u.z)/s; + } else if(v.y > n.z) { + s = 2*sqrt(1 - u.x + v.y - n.z); + q.w = (n.x - u.z)/s; + q.vx = (u.y + v.x)/s; + q.vy = s/4; + q.vz = (v.z + n.y)/s; + } else { + s = 2*sqrt(1 - u.x - v.y + n.z); + q.w = (u.y - v.x)/s; + q.vx = (n.x + u.z)/s; + q.vy = (v.z + n.y)/s; + q.vz = s/4; + } + } + + return q.WithMagnitude(1); +} + +Quaternion Quaternion::Plus(Quaternion b) { + Quaternion q; + q.w = w + b.w; + q.vx = vx + b.vx; + q.vy = vy + b.vy; + q.vz = vz + b.vz; + return q; +} + +Quaternion Quaternion::Minus(Quaternion b) { + Quaternion q; + q.w = w - b.w; + q.vx = vx - b.vx; + q.vy = vy - b.vy; + q.vz = vz - b.vz; + return q; +} + +Quaternion Quaternion::ScaledBy(double s) { + Quaternion q; + q.w = w*s; + q.vx = vx*s; + q.vy = vy*s; + q.vz = vz*s; + return q; +} + +double Quaternion::Magnitude(void) { + return sqrt(w*w + vx*vx + vy*vy + vz*vz); +} + +Quaternion Quaternion::WithMagnitude(double s) { + return ScaledBy(s/Magnitude()); +} + +Vector Quaternion::RotationU(void) { + Vector v; + v.x = w*w + vx*vx - vy*vy - vz*vz; + v.y = 2*w *vz + 2*vx*vy; + v.z = 2*vx*vz - 2*w *vy; + return v; +} + +Vector Quaternion::RotationV(void) { + Vector v; + v.x = 2*vx*vy - 2*w*vz; + v.y = w*w - vx*vx + vy*vy - vz*vz; + v.z = 2*w*vx + 2*vy*vz; + return v; +} + +Vector Quaternion::RotationN(void) { + Vector v; + v.x = 2*w*vy + 2*vx*vz; + v.y = 2*vy*vz - 2*w*vx; + v.z = w*w - vx*vx - vy*vy + vz*vz; + return v; +} + +Vector Quaternion::Rotate(Vector p) { + // Express the point in the new basis + return (RotationU().ScaledBy(p.x)).Plus( + RotationV().ScaledBy(p.y)).Plus( + RotationN().ScaledBy(p.z)); +} + +Quaternion Quaternion::Inverse(void) { + Quaternion r; + r.w = w; + r.vx = -vx; + r.vy = -vy; + r.vz = -vz; + return r.WithMagnitude(1); // not that the normalize should be reqd +} + +Quaternion Quaternion::ToThe(double p) { + // Avoid division by zero, or arccos of something not in its domain + if(w >= (1 - 1e-6)) { + return From(1, 0, 0, 0); + } else if(w <= (-1 + 1e-6)) { + return From(-1, 0, 0, 0); + } + + Quaternion r; + Vector axis = Vector::From(vx, vy, vz); + double theta = acos(w); // okay, since magnitude is 1, so -1 <= w <= 1 + theta *= p; + r.w = cos(theta); + axis = axis.WithMagnitude(sin(theta)); + r.vx = axis.x; + r.vy = axis.y; + r.vz = axis.z; + return r; +} + +Quaternion Quaternion::Times(Quaternion b) { + double sa = w, sb = b.w; + Vector va = { vx, vy, vz }; + Vector vb = { b.vx, b.vy, b.vz }; + + Quaternion r; + r.w = sa*sb - va.Dot(vb); + Vector vr = vb.ScaledBy(sa).Plus( + va.ScaledBy(sb).Plus( + va.Cross(vb))); + r.vx = vr.x; + r.vy = vr.y; + r.vz = vr.z; + return r; +} + +Quaternion Quaternion::Mirror(void) { + Vector u = RotationU(), + v = RotationV(); + u = u.ScaledBy(-1); + v = v.ScaledBy(-1); + return Quaternion::From(u, v); +} + + +Vector Vector::From(double x, double y, double z) { + Vector v; + v.x = x; v.y = y; v.z = z; + return v; +} + +Vector Vector::From(hParam x, hParam y, hParam z) { + Vector v; + v.x = SK.GetParam(x)->val; + v.y = SK.GetParam(y)->val; + v.z = SK.GetParam(z)->val; + return v; +} + +double Vector::Element(int i) { + switch(i) { + case 0: return x; + case 1: return y; + case 2: return z; + default: oops(); + } +} + +bool Vector::Equals(Vector v, double tol) { + // Quick axis-aligned tests before going further + double dx = v.x - x; if(dx < -tol || dx > tol) return false; + double dy = v.y - y; if(dy < -tol || dy > tol) return false; + double dz = v.z - z; if(dz < -tol || dz > tol) return false; + + return (this->Minus(v)).MagSquared() < tol*tol; +} + +bool Vector::EqualsExactly(Vector v) { + return EXACT(x == v.x && + y == v.y && + z == v.z); +} + +Vector Vector::Plus(Vector b) { + Vector r; + + r.x = x + b.x; + r.y = y + b.y; + r.z = z + b.z; + + return r; +} + +Vector Vector::Minus(Vector b) { + Vector r; + + r.x = x - b.x; + r.y = y - b.y; + r.z = z - b.z; + + return r; +} + +Vector Vector::Negated(void) { + Vector r; + + r.x = -x; + r.y = -y; + r.z = -z; + + return r; +} + +Vector Vector::Cross(Vector b) { + Vector r; + + r.x = -(z*b.y) + (y*b.z); + r.y = (z*b.x) - (x*b.z); + r.z = -(y*b.x) + (x*b.y); + + return r; +} + +double Vector::Dot(Vector b) { + return (x*b.x + y*b.y + z*b.z); +} + +double Vector::DirectionCosineWith(Vector b) { + Vector a = this->WithMagnitude(1); + b = b.WithMagnitude(1); + return a.Dot(b); +} + +Vector Vector::Normal(int which) { + Vector n; + + // Arbitrarily choose one vector that's normal to us, pivoting + // appropriately. + double xa = fabs(x), ya = fabs(y), za = fabs(z); + if(this->Equals(Vector::From(0, 0, 1))) { + // Make DXFs exported in the XY plane work nicely... + n = Vector::From(1, 0, 0); + } else if(xa < ya && xa < za) { + n.x = 0; + n.y = z; + n.z = -y; + } else if(ya < za) { + n.x = -z; + n.y = 0; + n.z = x; + } else { + n.x = y; + n.y = -x; + n.z = 0; + } + + if(which == 0) { + // That's the vector we return. + } else if(which == 1) { + n = this->Cross(n); + } else oops(); + + n = n.WithMagnitude(1); + + return n; +} + +Vector Vector::RotatedAbout(Vector orig, Vector axis, double theta) { + Vector r = this->Minus(orig); + r = r.RotatedAbout(axis, theta); + return r.Plus(orig); +} + +Vector Vector::RotatedAbout(Vector axis, double theta) { + double c = cos(theta); + double s = sin(theta); + + axis = axis.WithMagnitude(1); + + Vector r; + + r.x = (x)*(c + (1 - c)*(axis.x)*(axis.x)) + + (y)*((1 - c)*(axis.x)*(axis.y) - s*(axis.z)) + + (z)*((1 - c)*(axis.x)*(axis.z) + s*(axis.y)); + + r.y = (x)*((1 - c)*(axis.y)*(axis.x) + s*(axis.z)) + + (y)*(c + (1 - c)*(axis.y)*(axis.y)) + + (z)*((1 - c)*(axis.y)*(axis.z) - s*(axis.x)); + + r.z = (x)*((1 - c)*(axis.z)*(axis.x) - s*(axis.y)) + + (y)*((1 - c)*(axis.z)*(axis.y) + s*(axis.x)) + + (z)*(c + (1 - c)*(axis.z)*(axis.z)); + + return r; +} + +Vector Vector::DotInToCsys(Vector u, Vector v, Vector n) { + Vector r = { + this->Dot(u), + this->Dot(v), + this->Dot(n) + }; + return r; +} + +Vector Vector::ScaleOutOfCsys(Vector u, Vector v, Vector n) { + Vector r = u.ScaledBy(x).Plus( + v.ScaledBy(y).Plus( + n.ScaledBy(z))); + return r; +} + +Vector Vector::InPerspective(Vector u, Vector v, Vector n, + Vector origin, double cameraTan) +{ + Vector r = this->Minus(origin); + r = r.DotInToCsys(u, v, n); + // yes, minus; we are assuming a csys where u cross v equals n, backwards + // from the display stuff + double w = (1 - r.z*cameraTan); + r = r.ScaledBy(1/w); + + return r; +} + +double Vector::DistanceToLine(Vector p0, Vector dp) { + double m = dp.Magnitude(); + return ((this->Minus(p0)).Cross(dp)).Magnitude() / m; +} + +bool Vector::OnLineSegment(Vector a, Vector b, double tol) { + if(this->Equals(a, tol) || this->Equals(b, tol)) return true; + + Vector d = b.Minus(a); + + double m = d.MagSquared(); + double distsq = ((this->Minus(a)).Cross(d)).MagSquared() / m; + + if(distsq >= tol*tol) return false; + + double t = (this->Minus(a)).DivPivoting(d); + // On-endpoint already tested + if(t < 0 || t > 1) return false; + return true; +} + +Vector Vector::ClosestPointOnLine(Vector p0, Vector dp) { + dp = dp.WithMagnitude(1); + // this, p0, and (p0+dp) define a plane; the min distance is in + // that plane, so calculate its normal + Vector pn = (this->Minus(p0)).Cross(dp); + // The minimum distance line is in that plane, perpendicular + // to the line + Vector n = pn.Cross(dp); + + // Calculate the actual distance + double d = (dp.Cross(p0.Minus(*this))).Magnitude(); + return this->Plus(n.WithMagnitude(d)); +} + +double Vector::MagSquared(void) { + return x*x + y*y + z*z; +} + +double Vector::Magnitude(void) { + return sqrt(x*x + y*y + z*z); +} + +Vector Vector::ScaledBy(double v) { + Vector r; + + r.x = x * v; + r.y = y * v; + r.z = z * v; + + return r; +} + +Vector Vector::WithMagnitude(double v) { + double m = Magnitude(); + if(EXACT(m == 0)) { + // We can do a zero vector with zero magnitude, but not any other cases. + if(fabs(v) > 1e-100) { + dbp("Vector::WithMagnitude(%g) of zero vector!", v); + } + return From(0, 0, 0); + } else { + return ScaledBy(v/m); + } +} + +Vector Vector::ProjectVectorInto(hEntity wrkpl) { + EntityBase *w = SK.GetEntity(wrkpl); + Vector u = w->Normal()->NormalU(); + Vector v = w->Normal()->NormalV(); + + double up = this->Dot(u); + double vp = this->Dot(v); + + return (u.ScaledBy(up)).Plus(v.ScaledBy(vp)); +} + +Vector Vector::ProjectInto(hEntity wrkpl) { + EntityBase *w = SK.GetEntity(wrkpl); + Vector p0 = w->WorkplaneGetOffset(); + + Vector f = this->Minus(p0); + + return p0.Plus(f.ProjectVectorInto(wrkpl)); +} + +Point2d Vector::Project2d(Vector u, Vector v) { + Point2d p; + p.x = this->Dot(u); + p.y = this->Dot(v); + return p; +} + +Point2d Vector::ProjectXy(void) { + Point2d p; + p.x = x; + p.y = y; + return p; +} + +Vector4 Vector::Project4d(void) { + return Vector4::From(1, x, y, z); +} + +double Vector::DivPivoting(Vector delta) { + double mx = fabs(delta.x), my = fabs(delta.y), mz = fabs(delta.z); + + if(mx > my && mx > mz) { + return x/delta.x; + } else if(my > mz) { + return y/delta.y; + } else { + return z/delta.z; + } +} + +Vector Vector::ClosestOrtho(void) { + double mx = fabs(x), my = fabs(y), mz = fabs(z); + + if(mx > my && mx > mz) { + return From((x > 0) ? 1 : -1, 0, 0); + } else if(my > mz) { + return From(0, (y > 0) ? 1 : -1, 0); + } else { + return From(0, 0, (z > 0) ? 1 : -1); + } +} + +Vector Vector::ClampWithin(double minv, double maxv) { + Vector ret = *this; + + if(ret.x < minv) ret.x = minv; + if(ret.y < minv) ret.y = minv; + if(ret.z < minv) ret.z = minv; + + if(ret.x > maxv) ret.x = maxv; + if(ret.y > maxv) ret.y = maxv; + if(ret.z > maxv) ret.z = maxv; + + return ret; +} + +void Vector::MakeMaxMin(Vector *maxv, Vector *minv) { + maxv->x = max(maxv->x, x); + maxv->y = max(maxv->y, y); + maxv->z = max(maxv->z, z); + + minv->x = min(minv->x, x); + minv->y = min(minv->y, y); + minv->z = min(minv->z, z); +} + +bool Vector::OutsideAndNotOn(Vector maxv, Vector minv) { + return (x > maxv.x + LENGTH_EPS) || (x < minv.x - LENGTH_EPS) || + (y > maxv.y + LENGTH_EPS) || (y < minv.y - LENGTH_EPS) || + (z > maxv.z + LENGTH_EPS) || (z < minv.z - LENGTH_EPS); +} + +bool Vector::BoundingBoxesDisjoint(Vector amax, Vector amin, + Vector bmax, Vector bmin) +{ + int i; + for(i = 0; i < 3; i++) { + if(amax.Element(i) < bmin.Element(i) - LENGTH_EPS) return true; + if(amin.Element(i) > bmax.Element(i) + LENGTH_EPS) return true; + } + return false; +} + +bool Vector::BoundingBoxIntersectsLine(Vector amax, Vector amin, + Vector p0, Vector p1, bool segment) +{ + Vector dp = p1.Minus(p0); + double lp = dp.Magnitude(); + dp = dp.ScaledBy(1.0/lp); + + int i, a; + for(i = 0; i < 3; i++) { + int j = WRAP(i+1, 3), k = WRAP(i+2, 3); + if(lp*fabs(dp.Element(i)) < LENGTH_EPS) continue; // parallel to plane + + for(a = 0; a < 2; a++) { + double d = (a == 0) ? amax.Element(i) : amin.Element(i); + // n dot (p0 + t*dp) = d + // (n dot p0) + t * (n dot dp) = d + double t = (d - p0.Element(i)) / dp.Element(i); + Vector p = p0.Plus(dp.ScaledBy(t)); + + if(segment && (t < -LENGTH_EPS || t > (lp+LENGTH_EPS))) continue; + + if(p.Element(j) > amax.Element(j) + LENGTH_EPS) continue; + if(p.Element(k) > amax.Element(k) + LENGTH_EPS) continue; + + if(p.Element(j) < amin.Element(j) - LENGTH_EPS) continue; + if(p.Element(k) < amin.Element(k) - LENGTH_EPS) continue; + + return true; + } + } + + return false; +} + +Vector Vector::AtIntersectionOfPlanes(Vector n1, double d1, + Vector n2, double d2) +{ + double det = (n1.Dot(n1))*(n2.Dot(n2)) - + (n1.Dot(n2))*(n1.Dot(n2)); + double c1 = (d1*n2.Dot(n2) - d2*n1.Dot(n2))/det; + double c2 = (d2*n1.Dot(n1) - d1*n1.Dot(n2))/det; + + return (n1.ScaledBy(c1)).Plus(n2.ScaledBy(c2)); +} + +void Vector::ClosestPointBetweenLines(Vector a0, Vector da, + Vector b0, Vector db, + double *ta, double *tb) +{ + // Make a semi-orthogonal coordinate system from those directions; + // note that dna and dnb need not be perpendicular. + Vector dn = da.Cross(db); // normal to both + Vector dna = dn.Cross(da); // normal to da + Vector dnb = dn.Cross(db); // normal to db + + // At the intersection of the lines + // a0 + pa*da = b0 + pb*db (where pa, pb are scalar params) + // So dot this equation against dna and dnb to get two equations + // to solve for da and db + *tb = ((a0.Minus(b0)).Dot(dna))/(db.Dot(dna)); + *ta = -((a0.Minus(b0)).Dot(dnb))/(da.Dot(dnb)); +} + +Vector Vector::AtIntersectionOfLines(Vector a0, Vector a1, + Vector b0, Vector b1, + bool *skew, + double *parama, double *paramb) +{ + Vector da = a1.Minus(a0), db = b1.Minus(b0); + + double pa, pb; + Vector::ClosestPointBetweenLines(a0, da, b0, db, &pa, &pb); + + if(parama) *parama = pa; + if(paramb) *paramb = pb; + + // And from either of those, we get the intersection point. + Vector pi = a0.Plus(da.ScaledBy(pa)); + + if(skew) { + // Check if the intersection points on each line are actually + // coincident... + if(pi.Equals(b0.Plus(db.ScaledBy(pb)))) { + *skew = false; + } else { + *skew = true; + } + } + return pi; +} + +Vector Vector::AtIntersectionOfPlaneAndLine(Vector n, double d, + Vector p0, Vector p1, + bool *parallel) +{ + Vector dp = p1.Minus(p0); + + if(fabs(n.Dot(dp)) < LENGTH_EPS) { + if(parallel) *parallel = true; + return Vector::From(0, 0, 0); + } + + if(parallel) *parallel = false; + + // n dot (p0 + t*dp) = d + // (n dot p0) + t * (n dot dp) = d + double t = (d - n.Dot(p0)) / (n.Dot(dp)); + + return p0.Plus(dp.ScaledBy(t)); +} + +static double det2(double a1, double b1, + double a2, double b2) +{ + return (a1*b2) - (b1*a2); +} +static double det3(double a1, double b1, double c1, + double a2, double b2, double c2, + double a3, double b3, double c3) +{ + return a1*det2(b2, c2, b3, c3) - + b1*det2(a2, c2, a3, c3) + + c1*det2(a2, b2, a3, b3); +} +Vector Vector::AtIntersectionOfPlanes(Vector na, double da, + Vector nb, double db, + Vector nc, double dc, + bool *parallel) +{ + double det = det3(na.x, na.y, na.z, + nb.x, nb.y, nb.z, + nc.x, nc.y, nc.z); + if(fabs(det) < 1e-10) { // arbitrary tolerance, not so good + *parallel = true; + return Vector::From(0, 0, 0); + } + *parallel = false; + + double detx = det3(da, na.y, na.z, + db, nb.y, nb.z, + dc, nc.y, nc.z); + + double dety = det3(na.x, da, na.z, + nb.x, db, nb.z, + nc.x, dc, nc.z); + + double detz = det3(na.x, na.y, da, + nb.x, nb.y, db, + nc.x, nc.y, dc ); + + return Vector::From(detx/det, dety/det, detz/det); +} + +Vector4 Vector4::From(double w, double x, double y, double z) { + Vector4 ret; + ret.w = w; + ret.x = x; + ret.y = y; + ret.z = z; + return ret; +} + +Vector4 Vector4::From(double w, Vector v) { + return Vector4::From(w, w*v.x, w*v.y, w*v.z); +} + +Vector4 Vector4::Blend(Vector4 a, Vector4 b, double t) { + return (a.ScaledBy(1 - t)).Plus(b.ScaledBy(t)); +} + +Vector4 Vector4::Plus(Vector4 b) { + return Vector4::From(w + b.w, x + b.x, y + b.y, z + b.z); +} + +Vector4 Vector4::Minus(Vector4 b) { + return Vector4::From(w - b.w, x - b.x, y - b.y, z - b.z); +} + +Vector4 Vector4::ScaledBy(double s) { + return Vector4::From(w*s, x*s, y*s, z*s); +} + +Vector Vector4::PerspectiveProject(void) { + return Vector::From(x / w, y / w, z / w); +} + +Point2d Point2d::From(double x, double y) { + return { x, y }; +} + +Point2d Point2d::Plus(const Point2d &b) const { + return { x + b.x, y + b.y }; +} + +Point2d Point2d::Minus(const Point2d &b) const { + return { x - b.x, y - b.y }; +} + +Point2d Point2d::ScaledBy(double s) const { + return { x * s, y * s }; +} + +double Point2d::DivPivoting(Point2d delta) const { + if(fabs(delta.x) > fabs(delta.y)) { + return x/delta.x; + } else { + return y/delta.y; + } +} + +double Point2d::MagSquared(void) const { + return x*x + y*y; +} + +double Point2d::Magnitude(void) const { + return sqrt(x*x + y*y); +} + +Point2d Point2d::WithMagnitude(double v) const { + double m = Magnitude(); + if(m < 1e-20) { + dbp("!!! WithMagnitude() of zero vector"); + return { v, 0 }; + } + return { x * v / m, y * v / m }; +} + +double Point2d::DistanceTo(const Point2d &p) const { + double dx = x - p.x; + double dy = y - p.y; + return sqrt(dx*dx + dy*dy); +} + +double Point2d::Dot(Point2d p) const { + return x*p.x + y*p.y; +} + +double Point2d::DistanceToLine(const Point2d &p0, const Point2d &dp, bool segment) const { + double m = dp.x*dp.x + dp.y*dp.y; + if(m < LENGTH_EPS*LENGTH_EPS) return VERY_POSITIVE; + + // Let our line be p = p0 + t*dp, for a scalar t from 0 to 1 + double t = (dp.x*(x - p0.x) + dp.y*(y - p0.y))/m; + + if((t < 0 || t > 1) && segment) { + // The closest point is one of the endpoints; determine which. + double d0 = DistanceTo(p0); + double d1 = DistanceTo(p0.Plus(dp)); + + return min(d1, d0); + } else { + Point2d closest = p0.Plus(dp.ScaledBy(t)); + return DistanceTo(closest); + } +} + +Point2d Point2d::Normal(void) const { + return { y, -x }; +} + +bool Point2d::Equals(Point2d v, double tol) const { + double dx = v.x - x; if(dx < -tol || dx > tol) return false; + double dy = v.y - y; if(dy < -tol || dy > tol) return false; + + return (this->Minus(v)).MagSquared() < tol*tol; +} + +BBox BBox::From(const Vector &p0, const Vector &p1) { + BBox bbox; + bbox.minp.x = min(p0.x, p1.x); + bbox.minp.y = min(p0.y, p1.y); + bbox.minp.z = min(p0.z, p1.z); + + bbox.maxp.x = max(p0.x, p1.x); + bbox.maxp.y = max(p0.y, p1.y); + bbox.maxp.z = max(p0.z, p1.z); + return bbox; +} + +Vector BBox::GetOrigin() { return minp.Plus(maxp.Minus(minp)).ScaledBy(0.5); } +Vector BBox::GetExtents() { return maxp.Minus(minp).ScaledBy(0.5); } + +void BBox::Include(const Vector &v, double r) { + minp.x = min(minp.x, v.x - r); + minp.y = min(minp.y, v.y - r); + minp.z = min(minp.z, v.z - r); + + maxp.x = max(maxp.x, v.x + r); + maxp.y = max(maxp.y, v.y + r); + maxp.z = max(maxp.z, v.z + r); +} + +bool BBox::Overlaps(BBox &b1) { + + Vector t = b1.GetOrigin().Minus(GetOrigin()); + Vector e = b1.GetExtents().Plus(GetExtents()); + + return fabs(t.x) < e.x && fabs(t.y) < e.y && fabs(t.z) < e.z; +} + +bool BBox::Contains(const Point2d &p) { + return p.x >= minp.x && p.y >= minp.y && p.x <= maxp.x && p.y <= maxp.y; +} diff --git a/src/view.cpp b/src/view.cpp new file mode 100644 index 0000000..bf76ba9 --- /dev/null +++ b/src/view.cpp @@ -0,0 +1,116 @@ +//----------------------------------------------------------------------------- +// The View menu, stuff to snap to certain special vews of the model, and to +// display our current view of the model to the user. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +void TextWindow::ShowEditView(void) { + Printf(true, "%Ft3D VIEW PARAMETERS%E"); + + Printf(true, "%Bd %Ftoverall scale factor%E"); + Printf(false, "%Ba %# px/%s %Fl%Ll%f[edit]%E", + SS.GW.scale * SS.MmPerUnit(), + SS.UnitName(), + &ScreenChangeViewScale); + Printf(false, ""); + + Printf(false, "%Bd %Ftorigin (maps to center of screen)%E"); + Printf(false, "%Ba (%s, %s, %s) %Fl%Ll%f[edit]%E", + SS.MmToString(-SS.GW.offset.x).c_str(), + SS.MmToString(-SS.GW.offset.y).c_str(), + SS.MmToString(-SS.GW.offset.z).c_str(), + &ScreenChangeViewOrigin); + Printf(false, ""); + + Vector n = (SS.GW.projRight).Cross(SS.GW.projUp); + Printf(false, "%Bd %Ftprojection onto screen%E"); + Printf(false, "%Ba %Ftright%E (%3, %3, %3) %Fl%Ll%f[edit]%E", + CO(SS.GW.projRight), + &ScreenChangeViewProjection); + Printf(false, "%Bd %Ftup%E (%3, %3, %3)", CO(SS.GW.projUp)); + Printf(false, "%Ba %Ftout%E (%3, %3, %3)", CO(n)); + Printf(false, ""); + + Printf(false, "The perspective may be changed in the"); + Printf(false, "configuration screen."); +} + +void TextWindow::ScreenChangeViewScale(int link, uint32_t v) { + SS.TW.edit.meaning = EDIT_VIEW_SCALE; + SS.TW.ShowEditControl(3, ssprintf("%.3f", SS.GW.scale * SS.MmPerUnit())); +} + +void TextWindow::ScreenChangeViewOrigin(int link, uint32_t v) { + std::string edit_value = + ssprintf("%s, %s, %s", + SS.MmToString(-SS.GW.offset.x).c_str(), + SS.MmToString(-SS.GW.offset.y).c_str(), + SS.MmToString(-SS.GW.offset.z).c_str()); + + SS.TW.edit.meaning = EDIT_VIEW_ORIGIN; + SS.TW.ShowEditControl(3, edit_value); +} + +void TextWindow::ScreenChangeViewProjection(int link, uint32_t v) { + std::string edit_value = + ssprintf("%.3f, %.3f, %.3f", CO(SS.GW.projRight)); + SS.TW.edit.meaning = EDIT_VIEW_PROJ_RIGHT; + SS.TW.ShowEditControl(10, edit_value); +} + +bool TextWindow::EditControlDoneForView(const char *s) { + switch(edit.meaning) { + case EDIT_VIEW_SCALE: { + Expr *e = Expr::From(s, true); + if(e) { + double v = e->Eval() / SS.MmPerUnit(); + if(v > LENGTH_EPS) { + SS.GW.scale = v; + } else { + Error("Scale cannot be zero or negative."); + } + } + break; + } + + case EDIT_VIEW_ORIGIN: { + Vector pt; + if(sscanf(s, "%lf, %lf, %lf", &pt.x, &pt.y, &pt.z) == 3) { + pt = pt.ScaledBy(SS.MmPerUnit()); + SS.GW.offset = pt.ScaledBy(-1); + } else { + Error("Bad format: specify x, y, z"); + } + break; + } + + case EDIT_VIEW_PROJ_RIGHT: + case EDIT_VIEW_PROJ_UP: { + Vector pt; + if(sscanf(s, "%lf, %lf, %lf", &pt.x, &pt.y, &pt.z) != 3) { + Error("Bad format: specify x, y, z"); + break; + } + if(edit.meaning == EDIT_VIEW_PROJ_RIGHT) { + SS.GW.projRight = pt; + SS.GW.NormalizeProjectionVectors(); + edit.meaning = EDIT_VIEW_PROJ_UP; + HideEditControl(); + ShowEditControl(10, ssprintf("%.3f, %.3f, %.3f", CO(SS.GW.projUp)), + editControl.halfRow + 2); + edit.showAgain = true; + } else { + SS.GW.projUp = pt; + SS.GW.NormalizeProjectionVectors(); + } + break; + } + + default: + return false; + } + return true; +} + diff --git a/src/win32/icon.ico b/src/win32/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e545e2f2c09f809364be7fccca516a14cadd0813 GIT binary patch literal 29926 zcmeI4zi%By5XUDFAp8hP8Waf$Jz0PvMM9CbCrEZpXKJcdI;e0*Qo5r)QKUnW{{ANojcc| zm*w88B0q@8U{IC+cuC}=*F0 zdOSU&9nvF`A1QuW9$h`tNMKx8{I@6qM=Uol~?D^H4I|(Ak zX(P?@**UT~H=cWWL35g>Z5?{KDXIvGSh+5vmz-W^0bFLso$&BEJJz1&Ia{`{r&{ei zA7_vMVtiVr&dX9$(B$af>F^yrH8zp%dw!}q|1-Tl#yH_zaeTj&Be@pn$?tdN-rH3zz{K>t| zvxgCUU&))^^Y<55@GX95OoyNV?19ArT>#4=d{6)n96(UY0zN2!2M(YtrH2m+z-C$; zpg}1ed{6)n9KZ6o24@0(js6j!*?36u<)qDBur# zPyi1cKmdQ>g93Qq0801+ALz#e2WSX?@D3Ef0|#gvf8c`xc;EmA@drLAfCmoX1S;@B z0a$7A2R&}bO6%i2Bdin^^Xsyk|0&1jRVuA<83iUm)=KG*}hU~geBLAfeNpjQOG4M%sC z7frryLNOiy;(ath?h0-%`WmmW^?m)XIT}@^6lYTz4)~In`?6fmKFiq2Teis z0fg=^Q`DY28V#E+MD?pId5erd~T?RFxz ziJx>oFsVNDW72*$*T+JCngW~MZ^cfP&hO0L^BC3bl0vspdRW=&16|nrrMyqc`;@#- z$x6CyoK{)&a6C7-^q+&@4*-I{yeW^c^%8^ zSYF4bS;v}d$E0$YcN=R*WX))<2{V_coA2%KXy)_xH-m7GlD~2Uas+Y&as+Y&x<;UW zFHk>6U!Q&H;x@ilSj2f(KT~okpR)hm#w``suKbG@fBEITGKN$?XXST|b4sphKjypg znsW0hr~K-{5AzK26-~r{TyJvoqdi=WimtW)%{*AQ{JCiUTYoIyt-L52&FCJ?lwaBZ z)m?udKYm>HL28VZKkJcdJC#4b%5P;Kq}n%r_CKDdsrXym>eR+VbE?koa=z^N$9&5E zPd^H=cq%XFPyD)S#%ub>SDMZCteoSYEMJ;5=g<1(Pjd{rl)L0en@q|^pZrO+ z(S_gUTbH_&jqLyW$YE(m|@=HH_HxAv84KkDVS`!ADgb-rqF{M@nLzU?Jq)Y?`$ z>1fDOJe!|tBeiGF?U!;9;u9Np`6mB7^k@D3kpBTuksNmb literal 0 HcmV?d00001 diff --git a/src/win32/manifest.xml b/src/win32/manifest.xml new file mode 100644 index 0000000..f27a236 --- /dev/null +++ b/src/win32/manifest.xml @@ -0,0 +1,22 @@ + + + +Parametric 3d CAD tool. + + + + + + diff --git a/src/win32/resource.rc b/src/win32/resource.rc new file mode 100644 index 0000000..e402f8b --- /dev/null +++ b/src/win32/resource.rc @@ -0,0 +1,6 @@ + +// we need a manifest if we want visual styles; put in numbers since somethings a bit screwy +// with my SDK install (I don't think I've got *.rh right) +1 24 "manifest.xml" + +4000 ICON "icon.ico" diff --git a/src/win32/w32main.cpp b/src/win32/w32main.cpp new file mode 100644 index 0000000..562499b --- /dev/null +++ b/src/win32/w32main.cpp @@ -0,0 +1,1479 @@ +//----------------------------------------------------------------------------- +// Our WinMain() functions, and Win32-specific stuff to set up our windows +// and otherwise handle our interface to the operating system. Everything +// outside win32/... should be standard C++ and gl. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include + +#include "solvespace.h" +#include "config.h" + +#ifdef HAVE_SPACEWARE +# include +# include +# undef uint32_t // thanks but no thanks +#endif + +HINSTANCE Instance; + +HWND TextWnd; +HWND TextWndScrollBar; +HWND TextEditControl; +HGLRC TextGl; + +HWND GraphicsWnd; +HGLRC GraphicsGl; +HWND GraphicsEditControl; +static struct { + int x, y; +} LastMousePos; + +HMENU SubMenus[100]; +HMENU RecentOpenMenu, RecentImportMenu; + +HMENU ContextMenu, ContextSubmenu; + +int ClientIsSmallerBy; + +HFONT FixedFont; + +#ifdef HAVE_SPACEWARE +// The 6-DOF input device. +SiHdl SpaceNavigator = SI_NO_HANDLE; +#endif + +//----------------------------------------------------------------------------- +// Routines to display message boxes on screen. Do our own, instead of using +// MessageBox, because that is not consistent from version to version and +// there's word wrap problems. +//----------------------------------------------------------------------------- + +HWND MessageWnd, OkButton; +bool MessageDone; +int MessageWidth, MessageHeight; +const char *MessageString; + +static LRESULT CALLBACK MessageProc(HWND hwnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) { + case WM_COMMAND: + if((HWND)lParam == OkButton && wParam == BN_CLICKED) { + MessageDone = true; + } + break; + + case WM_CLOSE: + case WM_DESTROY: + MessageDone = true; + break; + + case WM_PAINT: { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + SelectObject(hdc, FixedFont); + SetTextColor(hdc, 0x000000); + SetBkMode(hdc, TRANSPARENT); + RECT rc; + SetRect(&rc, 10, 10, MessageWidth, MessageHeight); + std::wstring text = Widen(MessageString); + DrawText(hdc, text.c_str(), text.length(), &rc, DT_LEFT | DT_WORDBREAK); + EndPaint(hwnd, &ps); + break; + } + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +HWND CreateWindowClient(DWORD exStyle, const wchar_t *className, const wchar_t *windowName, + DWORD style, int x, int y, int width, int height, HWND parent, + HMENU menu, HINSTANCE instance, void *param) +{ + HWND h = CreateWindowExW(exStyle, className, windowName, style, x, y, + width, height, parent, menu, instance, param); + + RECT r; + GetClientRect(h, &r); + width = width - (r.right - width); + height = height - (r.bottom - height); + + SetWindowPos(h, HWND_TOP, x, y, width, height, 0); + + return h; +} + +void SolveSpace::DoMessageBox(const char *str, int rows, int cols, bool error) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + // Register the window class for our dialog. + WNDCLASSEX wc = {}; + wc.cbSize = sizeof(wc); + wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC; + wc.lpfnWndProc = (WNDPROC)MessageProc; + wc.hInstance = Instance; + wc.hbrBackground = (HBRUSH)COLOR_BTNSHADOW; + wc.lpszClassName = L"MessageWnd"; + wc.lpszMenuName = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 32, 32, 0); + wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 16, 16, 0); + RegisterClassEx(&wc); + + // Create the window. + MessageString = str; + RECT r; + GetWindowRect(GraphicsWnd, &r); + const char *title = error ? "SolveSpace - Error" : "SolveSpace - Message"; + int width = cols*SS.TW.CHAR_WIDTH + 20, + height = rows*SS.TW.LINE_HEIGHT + 60; + MessageWidth = width; + MessageHeight = height; + MessageWnd = CreateWindowClient(0, L"MessageWnd", Widen(title).c_str(), + WS_OVERLAPPED | WS_SYSMENU, + r.left + 100, r.top + 100, width, height, NULL, NULL, Instance, NULL); + + OkButton = CreateWindowExW(0, WC_BUTTON, L"OK", + WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS | WS_VISIBLE | BS_DEFPUSHBUTTON, + (width - 70)/2, rows*SS.TW.LINE_HEIGHT + 20, + 70, 25, MessageWnd, NULL, Instance, NULL); + SendMessage(OkButton, WM_SETFONT, (WPARAM)FixedFont, true); + + ShowWindow(MessageWnd, true); + SetFocus(OkButton); + + MSG msg; + DWORD ret; + MessageDone = false; + while((ret = GetMessage(&msg, NULL, 0, 0)) != 0 && !MessageDone) { + if((msg.message == WM_KEYDOWN && + (msg.wParam == VK_RETURN || + msg.wParam == VK_ESCAPE)) || + (msg.message == WM_KEYUP && + (msg.wParam == VK_SPACE))) + { + MessageDone = true; + break; + } + + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + MessageString = NULL; + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + DestroyWindow(MessageWnd); +} + +void SolveSpace::AddContextMenuItem(const char *label, int id) +{ + if(!ContextMenu) ContextMenu = CreatePopupMenu(); + + if(id == CONTEXT_SUBMENU) { + AppendMenuW(ContextMenu, MF_STRING | MF_POPUP, + (UINT_PTR)ContextSubmenu, Widen(label).c_str()); + ContextSubmenu = NULL; + } else { + HMENU m = ContextSubmenu ? ContextSubmenu : ContextMenu; + if(id == CONTEXT_SEPARATOR) { + AppendMenuW(m, MF_SEPARATOR, 0, L""); + } else { + AppendMenuW(m, MF_STRING, id, Widen(label).c_str()); + } + } +} + +void SolveSpace::CreateContextSubmenu(void) +{ + ContextSubmenu = CreatePopupMenu(); +} + +int SolveSpace::ShowContextMenu(void) +{ + POINT p; + GetCursorPos(&p); + int r = TrackPopupMenu(ContextMenu, + TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_TOPALIGN, + p.x, p.y, 0, GraphicsWnd, NULL); + + DestroyMenu(ContextMenu); + ContextMenu = NULL; + return r; +} + +void CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) +{ + // The timer is periodic, so needs to be killed explicitly. + KillTimer(GraphicsWnd, 1); + SS.GW.TimerCallback(); + SS.TW.TimerCallback(); +} +void SolveSpace::SetTimerFor(int milliseconds) +{ + SetTimer(GraphicsWnd, 1, milliseconds, TimerCallback); +} + +void SolveSpace::ScheduleLater() +{ +} + +static void CALLBACK AutosaveCallback(HWND hwnd, UINT msg, UINT_PTR id, DWORD time) +{ + KillTimer(GraphicsWnd, 1); + SS.Autosave(); +} + +void SolveSpace::SetAutosaveTimerFor(int minutes) +{ + SetTimer(GraphicsWnd, 2, minutes * 60 * 1000, AutosaveCallback); +} + +static void GetWindowSize(HWND hwnd, int *w, int *h) +{ + RECT r; + GetClientRect(hwnd, &r); + *w = r.right - r.left; + *h = r.bottom - r.top; +} +void SolveSpace::GetGraphicsWindowSize(int *w, int *h) +{ + GetWindowSize(GraphicsWnd, w, h); +} +void SolveSpace::GetTextWindowSize(int *w, int *h) +{ + GetWindowSize(TextWnd, w, h); +} + +void SolveSpace::OpenWebsite(const char *url) { + ShellExecuteW(GraphicsWnd, L"open", Widen(url).c_str(), NULL, NULL, SW_SHOWNORMAL); +} + +void SolveSpace::ExitNow(void) { + PostQuitMessage(0); +} + +//----------------------------------------------------------------------------- +// Helpers so that we can read/write registry keys from the platform- +// independent code. +//----------------------------------------------------------------------------- +inline int CLAMP(int v, int a, int b) { + // Clamp it to the range [a, b] + if(v <= a) return a; + if(v >= b) return b; + return v; +} + +static HKEY GetRegistryKey() +{ + HKEY Software; + if(RegOpenKeyExW(HKEY_CURRENT_USER, L"Software", 0, + KEY_ALL_ACCESS, &Software) != ERROR_SUCCESS) + return NULL; + + HKEY SolveSpace; + if(RegCreateKeyExW(Software, L"SolveSpace", 0, NULL, 0, + KEY_ALL_ACCESS, NULL, &SolveSpace, NULL) != ERROR_SUCCESS) + return NULL; + + RegCloseKey(Software); + + return SolveSpace; +} + +void SolveSpace::CnfFreezeInt(uint32_t val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_DWORD, (const BYTE*) &val, sizeof(DWORD)); + RegCloseKey(SolveSpace); +} +void SolveSpace::CnfFreezeFloat(float val, const std::string &name) +{ + static_assert(sizeof(float) == sizeof(DWORD), + "sizes of float and DWORD must match"); + HKEY SolveSpace = GetRegistryKey(); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_DWORD, (const BYTE*) &val, sizeof(DWORD)); + RegCloseKey(SolveSpace); +} +void SolveSpace::CnfFreezeString(const std::string &str, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + std::wstring strW = Widen(str); + RegSetValueExW(SolveSpace, &Widen(name)[0], 0, + REG_SZ, (const BYTE*) &strW[0], (strW.length() + 1) * 2); + RegCloseKey(SolveSpace); +} +static void FreezeWindowPos(HWND hwnd, const std::string &name) +{ + RECT r; + GetWindowRect(hwnd, &r); + CnfFreezeInt(r.left, name + "_left"); + CnfFreezeInt(r.right, name + "_right"); + CnfFreezeInt(r.top, name + "_top"); + CnfFreezeInt(r.bottom, name + "_bottom"); + + CnfFreezeInt(IsZoomed(hwnd), name + "_maximized"); +} + +uint32_t SolveSpace::CnfThawInt(uint32_t val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, newval, len = sizeof(DWORD); + LONG result = RegQueryValueEx(SolveSpace, &Widen(name)[0], NULL, + &type, (BYTE*) &newval, &len); + RegCloseKey(SolveSpace); + + if(result == ERROR_SUCCESS && type == REG_DWORD) + return newval; + else + return val; +} +float SolveSpace::CnfThawFloat(float val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, len = sizeof(DWORD); + float newval; + LONG result = RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + &type, (BYTE*) &newval, &len); + RegCloseKey(SolveSpace); + + if(result == ERROR_SUCCESS && type == REG_DWORD) + return newval; + else + return val; +} +std::string SolveSpace::CnfThawString(const std::string &val, const std::string &name) +{ + HKEY SolveSpace = GetRegistryKey(); + DWORD type, len; + if(RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + &type, NULL, &len) != ERROR_SUCCESS || type != REG_SZ) { + RegCloseKey(SolveSpace); + return val; + } + + std::wstring newval; + newval.resize(len / 2 - 1); + if(RegQueryValueExW(SolveSpace, &Widen(name)[0], NULL, + NULL, (BYTE*) &newval[0], &len) != ERROR_SUCCESS) { + RegCloseKey(SolveSpace); + return val; + } + + RegCloseKey(SolveSpace); + return Narrow(newval); +} +static void ThawWindowPos(HWND hwnd, const std::string &name) +{ + RECT r; + GetWindowRect(hwnd, &r); + r.left = CnfThawInt(r.left, name + "_left"); + r.right = CnfThawInt(r.right, name + "_right"); + r.top = CnfThawInt(r.top, name + "_top"); + r.bottom = CnfThawInt(r.bottom, name + "_bottom"); + + HMONITOR hMonitor = MonitorFromRect(&r, MONITOR_DEFAULTTONEAREST);; + MONITORINFO mi; + mi.cbSize = sizeof(mi); + GetMonitorInfo(hMonitor, &mi); + + // If it somehow ended up off-screen, then put it back. + RECT dr = mi.rcMonitor; + r.left = CLAMP(r.left, dr.left, dr.right); + r.right = CLAMP(r.right, dr.left, dr.right); + r.top = CLAMP(r.top, dr.top, dr.bottom); + r.bottom = CLAMP(r.bottom, dr.top, dr.bottom); + MoveWindow(hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE); + + if(CnfThawInt(FALSE, name + "_maximized")) + ShowWindow(hwnd, SW_MAXIMIZE); +} + +void SolveSpace::SetCurrentFilename(const std::string &filename) { + if(!filename.empty()) { + SetWindowTextW(GraphicsWnd, Widen("SolveSpace - " + filename).c_str()); + } else { + SetWindowTextW(GraphicsWnd, L"SolveSpace - (not yet saved)"); + } +} + +void SolveSpace::SetMousePointerToHand(bool yes) { + SetCursor(LoadCursor(NULL, yes ? IDC_HAND : IDC_ARROW)); +} + +static void PaintTextWnd(HDC hdc) +{ + wglMakeCurrent(GetDC(TextWnd), TextGl); + + SS.TW.Paint(); + SwapBuffers(GetDC(TextWnd)); + + // Leave the graphics window context active, except when we're painting + // this text window. + wglMakeCurrent(GetDC(GraphicsWnd), GraphicsGl); +} + +void SolveSpace::MoveTextScrollbarTo(int pos, int maxPos, int page) +{ + SCROLLINFO si = {}; + si.cbSize = sizeof(si); + si.fMask = SIF_DISABLENOSCROLL | SIF_ALL; + si.nMin = 0; + si.nMax = maxPos; + si.nPos = pos; + si.nPage = page; + SetScrollInfo(TextWndScrollBar, SB_CTL, &si, true); +} + +void HandleTextWindowScrollBar(WPARAM wParam, LPARAM lParam) +{ + int maxPos, minPos, pos; + GetScrollRange(TextWndScrollBar, SB_CTL, &minPos, &maxPos); + pos = GetScrollPos(TextWndScrollBar, SB_CTL); + + switch(LOWORD(wParam)) { + case SB_LINEUP: pos--; break; + case SB_PAGEUP: pos -= 4; break; + + case SB_LINEDOWN: pos++; break; + case SB_PAGEDOWN: pos += 4; break; + + case SB_TOP: pos = 0; break; + + case SB_BOTTOM: pos = maxPos; break; + + case SB_THUMBTRACK: + case SB_THUMBPOSITION: pos = HIWORD(wParam); break; + } + + SS.TW.ScrollbarEvent(pos); +} + +static void MouseWheel(int thisDelta) { + static int DeltaAccum; + int delta = 0; + // Handle mouse deltas of less than 120 (like from an un-detented mouse + // wheel) correctly, even though no one ever uses those. + DeltaAccum += thisDelta; + while(DeltaAccum >= 120) { + DeltaAccum -= 120; + delta += 120; + } + while(DeltaAccum <= -120) { + DeltaAccum += 120; + delta -= 120; + } + if(delta == 0) return; + + POINT pt; + GetCursorPos(&pt); + HWND hw = WindowFromPoint(pt); + + // Make the mousewheel work according to which window the mouse is + // over, not according to which window is active. + bool inTextWindow; + if(hw == TextWnd) { + inTextWindow = true; + } else if(hw == GraphicsWnd) { + inTextWindow = false; + } else if(GetForegroundWindow() == TextWnd) { + inTextWindow = true; + } else { + inTextWindow = false; + } + + if(inTextWindow) { + int i; + for(i = 0; i < abs(delta/40); i++) { + HandleTextWindowScrollBar(delta > 0 ? SB_LINEUP : SB_LINEDOWN, 0); + } + } else { + SS.GW.MouseScroll(LastMousePos.x, LastMousePos.y, delta); + } +} + +LRESULT CALLBACK TextWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_ERASEBKGND: + break; + + case WM_CLOSE: + case WM_DESTROY: + SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT); + break; + + case WM_PAINT: { + // Actually paint the text window, with gl. + PaintTextWnd(GetDC(TextWnd)); + // And then just make Windows happy. + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + EndPaint(hwnd, &ps); + break; + } + + case WM_SIZING: { + RECT *r = (RECT *)lParam; + int hc = (r->bottom - r->top) - ClientIsSmallerBy; + int extra = hc % (SS.TW.LINE_HEIGHT/2); + switch(wParam) { + case WMSZ_BOTTOM: + case WMSZ_BOTTOMLEFT: + case WMSZ_BOTTOMRIGHT: + r->bottom -= extra; + break; + + case WMSZ_TOP: + case WMSZ_TOPLEFT: + case WMSZ_TOPRIGHT: + r->top += extra; + break; + } + int tooNarrow = (SS.TW.MIN_COLS*SS.TW.CHAR_WIDTH) - + (r->right - r->left); + if(tooNarrow >= 0) { + switch(wParam) { + case WMSZ_RIGHT: + case WMSZ_BOTTOMRIGHT: + case WMSZ_TOPRIGHT: + r->right += tooNarrow; + break; + + case WMSZ_LEFT: + case WMSZ_BOTTOMLEFT: + case WMSZ_TOPLEFT: + r->left -= tooNarrow; + break; + } + } + break; + } + + case WM_MOUSELEAVE: + SS.TW.MouseLeave(); + break; + + case WM_LBUTTONDOWN: + case WM_MOUSEMOVE: { + // We need this in order to get the WM_MOUSELEAVE + TRACKMOUSEEVENT tme = {}; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = TextWnd; + TrackMouseEvent(&tme); + + // And process the actual message + int x = LOWORD(lParam); + int y = HIWORD(lParam); + SS.TW.MouseEvent(msg == WM_LBUTTONDOWN, wParam & MK_LBUTTON, x, y); + break; + } + + case WM_SIZE: { + RECT r; + GetWindowRect(TextWndScrollBar, &r); + int sw = r.right - r.left; + GetClientRect(hwnd, &r); + MoveWindow(TextWndScrollBar, r.right - sw, r.top, sw, + (r.bottom - r.top), true); + // If the window is growing, then the scrollbar position may + // be moving, so it's as if we're dragging the scrollbar. + HandleTextWindowScrollBar((WPARAM)-1, -1); + InvalidateRect(TextWnd, NULL, false); + break; + } + + case WM_MOUSEWHEEL: + MouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); + break; + + case WM_VSCROLL: + HandleTextWindowScrollBar(wParam, lParam); + break; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +static std::string EditControlText(HWND hwnd) +{ + std::wstring result; + result.resize(GetWindowTextLength(hwnd)); + GetWindowTextW(hwnd, &result[0], result.length() + 1); + return Narrow(result); +} + +static bool ProcessKeyDown(WPARAM wParam) +{ + if(GraphicsEditControlIsVisible() && wParam != VK_ESCAPE) { + if(wParam == VK_RETURN) { + SS.GW.EditControlDone(EditControlText(GraphicsEditControl).c_str()); + return true; + } else { + return false; + } + } + if(TextEditControlIsVisible() && wParam != VK_ESCAPE) { + if(wParam == VK_RETURN) { + SS.TW.EditControlDone(EditControlText(TextEditControl).c_str()); + } else { + return false; + } + } + + int c; + switch(wParam) { + case VK_OEM_PLUS: c = '+'; break; + case VK_OEM_MINUS: c = '-'; break; + case VK_ESCAPE: c = 27; break; + case VK_OEM_1: c = ';'; break; + case VK_OEM_3: c = '`'; break; + case VK_OEM_4: c = '['; break; + case VK_OEM_6: c = ']'; break; + case VK_OEM_5: c = '\\'; break; + case VK_OEM_PERIOD: c = '.'; break; + case VK_SPACE: c = ' '; break; + case VK_DELETE: c = 127; break; + case VK_TAB: c = '\t'; break; + + case VK_BROWSER_BACK: + case VK_BACK: c = '\b'; break; + + case VK_F1: + case VK_F2: + case VK_F3: + case VK_F4: + case VK_F5: + case VK_F6: + case VK_F7: + case VK_F8: + case VK_F9: + case VK_F10: + case VK_F11: + case VK_F12: c = ((int)wParam - VK_F1) + 0xf1; break; + + // These overlap with some character codes that I'm using, so + // don't let them trigger by accident. + case VK_F16: + case VK_INSERT: + case VK_EXECUTE: + case VK_APPS: + case VK_LWIN: + case VK_RWIN: return false; + + default: + c = (int)wParam; + break; + } + if(GetAsyncKeyState(VK_SHIFT) & 0x8000) c |= GraphicsWindow::SHIFT_MASK; + if(GetAsyncKeyState(VK_CONTROL) & 0x8000) c |= GraphicsWindow::CTRL_MASK; + + switch(c) { + case GraphicsWindow::SHIFT_MASK | '.': c = '>'; break; + } + + for(int i = 0; SS.GW.menu[i].level >= 0; i++) { + if(c == SS.GW.menu[i].accel) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)SS.GW.menu[i].id); + break; + } + } + + if(SS.GW.KeyDown(c)) return true; + + // No accelerator; process the key as normal. + return false; +} + +void SolveSpace::ToggleMenuBar(void) +{ + // Implement me +} +bool SolveSpace::MenuBarIsVisible(void) +{ + // Implement me + return true; +} + +void SolveSpace::ShowTextWindow(bool visible) +{ + ShowWindow(TextWnd, visible ? SW_SHOWNOACTIVATE : SW_HIDE); +} + +static void CreateGlContext(HWND hwnd, HGLRC *glrc) +{ + HDC hdc = GetDC(hwnd); + + PIXELFORMATDESCRIPTOR pfd = {}; + int pixelFormat; + + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | + PFD_DOUBLEBUFFER; + pfd.dwLayerMask = PFD_MAIN_PLANE; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + pfd.cDepthBits = 24; + pfd.cAccumBits = 0; + pfd.cStencilBits = 0; + + pixelFormat = ChoosePixelFormat(hdc, &pfd); + if(!pixelFormat) oops(); + + if(!SetPixelFormat(hdc, pixelFormat, &pfd)) oops(); + + *glrc = wglCreateContext(hdc); + wglMakeCurrent(hdc, *glrc); +} + +void SolveSpace::PaintGraphics(void) +{ + SS.GW.Paint(); + SwapBuffers(GetDC(GraphicsWnd)); +} +void SolveSpace::InvalidateGraphics(void) +{ + InvalidateRect(GraphicsWnd, NULL, false); +} + +void SolveSpace::ToggleFullScreen(void) +{ + // Implement me +} +bool SolveSpace::FullScreenIsActive(void) +{ + // Implement me + return false; +} + +int64_t SolveSpace::GetMilliseconds(void) +{ + LARGE_INTEGER t, f; + QueryPerformanceCounter(&t); + QueryPerformanceFrequency(&f); + LONGLONG d = t.QuadPart/(f.QuadPart/1000); + return (int64_t)d; +} + +int64_t SolveSpace::GetUnixTime(void) +{ +#ifdef __MINGW32__ + time_t ret; + time(&ret); +#else + __time64_t ret; + _time64(&ret); +#endif + return (int64_t)ret; +} + +void SolveSpace::InvalidateText(void) +{ + InvalidateRect(TextWnd, NULL, false); +} + +static void ShowEditControl(HWND h, int x, int y, int fontHeight, int minWidthChars, + bool isMonospace, const std::wstring &s) { + static HFONT hf; + if(hf) DeleteObject(hf); + hf = CreateFontW(-fontHeight, 0, 0, 0, + FW_REGULAR, false, false, false, ANSI_CHARSET, + OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FF_DONTCARE, isMonospace ? L"Lucida Console" : L"Arial"); + if(hf) SendMessage(h, WM_SETFONT, (WPARAM)hf, false); + else SendMessage(h, WM_SETFONT, (WPARAM)(HFONT)GetStockObject(SYSTEM_FONT), false); + SendMessage(h, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, 0); + + HDC hdc = GetDC(h); + TEXTMETRICW tm; + SIZE ts; + SelectObject(hdc, hf); + GetTextMetrics(hdc, &tm); + GetTextExtentPoint32W(hdc, s.c_str(), s.length(), &ts); + ReleaseDC(h, hdc); + + RECT rc; + rc.left = x; + rc.top = y - tm.tmAscent; + // Add one extra char width to avoid scrolling. + rc.right = x + std::max(tm.tmAveCharWidth * minWidthChars, + ts.cx + tm.tmAveCharWidth); + rc.bottom = y + tm.tmDescent; + + AdjustWindowRectEx(&rc, 0, false, WS_EX_CLIENTEDGE); + MoveWindow(h, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, true); + ShowWindow(h, SW_SHOW); + if(!s.empty()) { + SendMessage(h, WM_SETTEXT, 0, (LPARAM)s.c_str()); + SendMessage(h, EM_SETSEL, 0, s.length()); + SetFocus(h); + } +} +void SolveSpace::ShowTextEditControl(int x, int y, const std::string &str) +{ + if(GraphicsEditControlIsVisible()) return; + + ShowEditControl(TextEditControl, x, y, TextWindow::CHAR_HEIGHT, 30, + /*isMonospace=*/true, Widen(str)); +} +void SolveSpace::HideTextEditControl(void) +{ + ShowWindow(TextEditControl, SW_HIDE); +} +bool SolveSpace::TextEditControlIsVisible(void) +{ + return IsWindowVisible(TextEditControl) ? true : false; +} +void SolveSpace::ShowGraphicsEditControl(int x, int y, int fontHeight, int minWidthChars, + const std::string &str) +{ + if(GraphicsEditControlIsVisible()) return; + + RECT r; + GetClientRect(GraphicsWnd, &r); + x = x + (r.right - r.left)/2; + y = (r.bottom - r.top)/2 - y; + + ShowEditControl(GraphicsEditControl, x, y, fontHeight, minWidthChars, + /*isMonospace=*/false, Widen(str)); +} +void SolveSpace::HideGraphicsEditControl(void) +{ + ShowWindow(GraphicsEditControl, SW_HIDE); +} +bool SolveSpace::GraphicsEditControlIsVisible(void) +{ + return IsWindowVisible(GraphicsEditControl) ? true : false; +} + +LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) { + case WM_ERASEBKGND: + break; + + case WM_SIZE: + InvalidateRect(GraphicsWnd, NULL, false); + break; + + case WM_PAINT: { + // Actually paint the window, with gl. + PaintGraphics(); + // And make Windows happy. + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + EndPaint(hwnd, &ps); + break; + } + + case WM_MOUSELEAVE: + SS.GW.MouseLeave(); + break; + + case WM_MOUSEMOVE: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_LBUTTONDBLCLK: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + case WM_MBUTTONDOWN: { + int x = LOWORD(lParam); + int y = HIWORD(lParam); + + // We need this in order to get the WM_MOUSELEAVE + TRACKMOUSEEVENT tme = {}; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = GraphicsWnd; + TrackMouseEvent(&tme); + + // Convert to xy (vs. ij) style coordinates, with (0, 0) at center + RECT r; + GetClientRect(GraphicsWnd, &r); + x = x - (r.right - r.left)/2; + y = (r.bottom - r.top)/2 - y; + + LastMousePos.x = x; + LastMousePos.y = y; + + if(msg == WM_LBUTTONDOWN) { + SS.GW.MouseLeftDown(x, y); + } else if(msg == WM_LBUTTONUP) { + SS.GW.MouseLeftUp(x, y); + } else if(msg == WM_LBUTTONDBLCLK) { + SS.GW.MouseLeftDoubleClick(x, y); + } else if(msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { + SS.GW.MouseMiddleOrRightDown(x, y); + } else if(msg == WM_RBUTTONUP) { + SS.GW.MouseRightUp(x, y); + } else if(msg == WM_MOUSEMOVE) { + SS.GW.MouseMoved(x, y, + !!(wParam & MK_LBUTTON), + !!(wParam & MK_MBUTTON), + !!(wParam & MK_RBUTTON), + !!(wParam & MK_SHIFT), + !!(wParam & MK_CONTROL)); + } else { + oops(); + } + break; + } + case WM_MOUSEWHEEL: + MouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); + break; + + case WM_COMMAND: { + if(HIWORD(wParam) == 0) { + int id = LOWORD(wParam); + if((id >= RECENT_OPEN && id < (RECENT_OPEN + MAX_RECENT))) { + SolveSpaceUI::MenuFile(id); + break; + } + if((id >= RECENT_LINK && id < (RECENT_LINK + MAX_RECENT))) { + Group::MenuGroup(id); + break; + } + int i; + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(id == SS.GW.menu[i].id) { + (SS.GW.menu[i].fn)((GraphicsWindow::MenuId)id); + break; + } + } + if(SS.GW.menu[i].level < 0) oops(); + } + break; + } + + case WM_CLOSE: + case WM_DESTROY: + SolveSpaceUI::MenuFile(GraphicsWindow::MNU_EXIT); + return 1; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + + return 1; +} + +//----------------------------------------------------------------------------- +// Common dialog routines, to open or save a file. +//----------------------------------------------------------------------------- +static std::string ConvertFilters(const FileFilter ssFilters[]) { + std::string filter; + for(const FileFilter *ssFilter = ssFilters; ssFilter->name; ssFilter++) { + std::string desc, patterns; + for(const char *const *ssPattern = ssFilter->patterns; *ssPattern; ssPattern++) { + std::string pattern = "*." + std::string(*ssPattern); + if(desc == "") + desc = pattern; + else + desc += ", " + pattern; + if(patterns == "") + patterns = pattern; + else + patterns += ";" + pattern; + } + filter += std::string(ssFilter->name) + " (" + desc + ")" + '\0'; + filter += patterns + '\0'; + } + filter += '\0'; + return filter; +} + +static bool OpenSaveFile(bool isOpen, std::string *filename, const std::string &defExtension, + const FileFilter filters[]) { + // UNC paths may be as long as 32767 characters. + // Unfortunately, the Get*FileName API does not provide any way to use it + // except with a preallocated buffer of fixed size, so we use something + // reasonably large. + const int len = 32768; + wchar_t filenameC[len] = {}; + wcsncpy(filenameC, Widen(*filename).c_str(), len - 1); + + std::wstring selPatternW = Widen(ConvertFilters(filters)); + std::wstring defExtensionW = Widen(defExtension); + + OPENFILENAME ofn = {}; + ofn.lStructSize = sizeof(ofn); + ofn.hInstance = Instance; + ofn.hwndOwner = GraphicsWnd; + ofn.lpstrFilter = selPatternW.c_str(); + ofn.lpstrDefExt = defExtensionW.c_str(); + ofn.lpstrFile = filenameC; + ofn.nMaxFile = len; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + BOOL r; + if(isOpen) { + r = GetOpenFileNameW(&ofn); + } else { + r = GetSaveFileNameW(&ofn); + } + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + if(r) *filename = Narrow(filenameC); + return r ? true : false; +} + +bool SolveSpace::GetOpenFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]) +{ + return OpenSaveFile(true, filename, defExtension, filters); +} + +bool SolveSpace::GetSaveFile(std::string *filename, const std::string &defExtension, + const FileFilter filters[]) +{ + return OpenSaveFile(false, filename, defExtension, filters); +} + +DialogChoice SolveSpace::SaveFileYesNoCancel(void) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + int r = MessageBoxW(GraphicsWnd, + L"The file has changed since it was last saved.\n\n" + L"Do you want to save the changes?", L"SolveSpace", + MB_YESNOCANCEL | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch(r) { + case IDYES: + return DIALOG_YES; + case IDNO: + return DIALOG_NO; + case IDCANCEL: + default: + return DIALOG_CANCEL; + } +} + +DialogChoice SolveSpace::LoadAutosaveYesNo(void) +{ + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + int r = MessageBoxW(GraphicsWnd, + L"An autosave file is availible for this project.\n\n" + L"Do you want to load the autosave file instead?", L"SolveSpace", + MB_YESNO | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch (r) { + case IDYES: + return DIALOG_YES; + case IDNO: + default: + return DIALOG_NO; + } +} + +DialogChoice SolveSpace::LocateImportedFileYesNoCancel(const std::string &filename, + bool canCancel) { + EnableWindow(GraphicsWnd, false); + EnableWindow(TextWnd, false); + + std::string message = + "The linked file " + filename + " is not present.\n\n" + "Do you want to locate it manually?\n\n" + "If you select \"No\", any geometry that depends on " + "the missing file will be removed."; + + int r = MessageBoxW(GraphicsWnd, Widen(message).c_str(), L"SolveSpace", + (canCancel ? MB_YESNOCANCEL : MB_YESNO) | MB_ICONWARNING); + + EnableWindow(TextWnd, true); + EnableWindow(GraphicsWnd, true); + SetForegroundWindow(GraphicsWnd); + + switch(r) { + case IDYES: + return DIALOG_YES; + case IDNO: + return DIALOG_NO; + case IDCANCEL: + default: + return DIALOG_CANCEL; + } +} + +std::vector SolveSpace::GetFontFiles() { + std::vector fonts; + + std::wstring fontsDir(MAX_PATH, '\0'); + fontsDir.resize(GetWindowsDirectoryW(&fontsDir[0], fontsDir.length())); + fontsDir += L"\\fonts\\"; + + WIN32_FIND_DATA wfd; + HANDLE h = FindFirstFileW((fontsDir + L"*").c_str(), &wfd); + while(h != INVALID_HANDLE_VALUE) { + fonts.push_back(Narrow(fontsDir) + Narrow(wfd.cFileName)); + if(!FindNextFileW(h, &wfd)) break; + } + + return fonts; +} + +static void MenuById(int id, bool yes, bool check) +{ + int i; + int subMenu = -1; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + if(SS.GW.menu[i].level == 0) subMenu++; + + if(SS.GW.menu[i].id == id) { + if(subMenu < 0) oops(); + if(subMenu >= (int)arraylen(SubMenus)) oops(); + + if(check) { + CheckMenuItem(SubMenus[subMenu], id, + yes ? MF_CHECKED : MF_UNCHECKED); + } else { + EnableMenuItem(SubMenus[subMenu], id, + yes ? MF_ENABLED : MF_GRAYED); + } + return; + } + } + oops(); +} +void SolveSpace::CheckMenuById(int id, bool checked) +{ + MenuById(id, checked, true); +} +void SolveSpace::RadioMenuById(int id, bool selected) +{ + // Windows does not natively support radio-button menu items + MenuById(id, selected, true); +} +void SolveSpace::EnableMenuById(int id, bool enabled) +{ + MenuById(id, enabled, false); +} +static void DoRecent(HMENU m, int base) +{ + while(DeleteMenu(m, 0, MF_BYPOSITION)) + ; + int i, c = 0; + for(i = 0; i < MAX_RECENT; i++) { + if(!RecentFile[i].empty()) { + AppendMenuW(m, MF_STRING, base + i, Widen(RecentFile[i]).c_str()); + c++; + } + } + if(c == 0) AppendMenuW(m, MF_STRING | MF_GRAYED, 0, L"(no recent files)"); +} +void SolveSpace::RefreshRecentMenus(void) +{ + DoRecent(RecentOpenMenu, RECENT_OPEN); + DoRecent(RecentImportMenu, RECENT_LINK); +} + +HMENU CreateGraphicsWindowMenus(void) +{ + HMENU top = CreateMenu(); + HMENU m = 0; + + int i; + int subMenu = 0; + + for(i = 0; SS.GW.menu[i].level >= 0; i++) { + std::string label; + if(SS.GW.menu[i].label) { + std::string accel = MakeAcceleratorLabel(SS.GW.menu[i].accel); + const char *sep = accel.empty() ? "" : "\t"; + label = ssprintf("%s%s%s", SS.GW.menu[i].label, sep, accel.c_str()); + } + + if(SS.GW.menu[i].level == 0) { + m = CreateMenu(); + AppendMenuW(top, MF_STRING | MF_POPUP, (UINT_PTR)m, Widen(label).c_str()); + if(subMenu >= (int)arraylen(SubMenus)) oops(); + SubMenus[subMenu] = m; + subMenu++; + } else if(SS.GW.menu[i].level == 1) { + if(SS.GW.menu[i].id == GraphicsWindow::MNU_OPEN_RECENT) { + RecentOpenMenu = CreateMenu(); + AppendMenuW(m, MF_STRING | MF_POPUP, + (UINT_PTR)RecentOpenMenu, Widen(label).c_str()); + } else if(SS.GW.menu[i].id == GraphicsWindow::MNU_GROUP_RECENT) { + RecentImportMenu = CreateMenu(); + AppendMenuW(m, MF_STRING | MF_POPUP, + (UINT_PTR)RecentImportMenu, Widen(label).c_str()); + } else if(SS.GW.menu[i].label) { + AppendMenuW(m, MF_STRING, SS.GW.menu[i].id, Widen(label).c_str()); + } else { + AppendMenuW(m, MF_SEPARATOR, SS.GW.menu[i].id, L""); + } + } else oops(); + } + RefreshRecentMenus(); + + return top; +} + +static void CreateMainWindows(void) +{ + WNDCLASSEX wc = {}; + + wc.cbSize = sizeof(wc); + + // The graphics window, where the sketch is drawn and shown. + wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC | + CS_DBLCLKS; + wc.lpfnWndProc = (WNDPROC)GraphicsWndProc; + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszClassName = L"GraphicsWnd"; + wc.lpszMenuName = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 32, 32, 0); + wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000), + IMAGE_ICON, 16, 16, 0); + if(!RegisterClassEx(&wc)) oops(); + + HMENU top = CreateGraphicsWindowMenus(); + GraphicsWnd = CreateWindowExW(0, L"GraphicsWnd", + L"SolveSpace (not yet saved)", + WS_OVERLAPPED | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | + WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_CLIPSIBLINGS, + 50, 50, 900, 600, NULL, top, Instance, NULL); + if(!GraphicsWnd) oops(); + + GraphicsEditControl = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDIT, L"", + WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS, + 50, 50, 100, 21, GraphicsWnd, NULL, Instance, NULL); + + // The text window, with a comand line and some textual information + // about the sketch. + wc.style &= ~CS_DBLCLKS; + wc.lpfnWndProc = (WNDPROC)TextWndProc; + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + wc.lpszClassName = L"TextWnd"; + wc.hCursor = NULL; + if(!RegisterClassEx(&wc)) oops(); + + // We get the desired Alt+Tab behaviour by specifying that the text + // window is a child of the graphics window. + TextWnd = CreateWindowExW(0, + L"TextWnd", L"SolveSpace - Property Browser", WS_THICKFRAME | WS_CLIPCHILDREN, + 650, 500, 420, 300, GraphicsWnd, (HMENU)NULL, Instance, NULL); + if(!TextWnd) oops(); + + TextWndScrollBar = CreateWindowExW(0, WC_SCROLLBAR, L"", WS_CHILD | + SBS_VERT | SBS_LEFTALIGN | WS_VISIBLE | WS_CLIPSIBLINGS, + 200, 100, 100, 100, TextWnd, NULL, Instance, NULL); + // Force the scrollbar to get resized to the window, + TextWndProc(TextWnd, WM_SIZE, 0, 0); + + TextEditControl = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDIT, L"", + WS_CHILD | ES_AUTOHSCROLL | WS_TABSTOP | WS_CLIPSIBLINGS, + 50, 50, 100, 21, TextWnd, NULL, Instance, NULL); + + // Now that all our windows exist, set up gl contexts. + CreateGlContext(TextWnd, &TextGl); + CreateGlContext(GraphicsWnd, &GraphicsGl); + + RECT r, rc; + GetWindowRect(TextWnd, &r); + GetClientRect(TextWnd, &rc); + ClientIsSmallerBy = (r.bottom - r.top) - (rc.bottom - rc.top); +} + +#ifdef HAVE_SPACEWARE +//----------------------------------------------------------------------------- +// Test if a message comes from the SpaceNavigator device. If yes, dispatch +// it appropriately and return true. Otherwise, do nothing and return false. +//----------------------------------------------------------------------------- +static bool ProcessSpaceNavigatorMsg(MSG *msg) { + if(SpaceNavigator == SI_NO_HANDLE) return false; + + SiGetEventData sged; + SiSpwEvent sse; + + SiGetEventWinInit(&sged, msg->message, msg->wParam, msg->lParam); + int ret = SiGetEvent(SpaceNavigator, 0, &sged, &sse); + if(ret == SI_NOT_EVENT) return false; + // So the device is a SpaceNavigator event, or a SpaceNavigator error. + + if(ret == SI_IS_EVENT) { + if(sse.type == SI_MOTION_EVENT) { + // The Z axis translation and rotation are both + // backwards in the default mapping. + double tx = sse.u.spwData.mData[SI_TX]*1.0, + ty = sse.u.spwData.mData[SI_TY]*1.0, + tz = -sse.u.spwData.mData[SI_TZ]*1.0, + rx = sse.u.spwData.mData[SI_RX]*0.001, + ry = sse.u.spwData.mData[SI_RY]*0.001, + rz = -sse.u.spwData.mData[SI_RZ]*0.001; + SS.GW.SpaceNavigatorMoved(tx, ty, tz, rx, ry, rz, + !!(GetAsyncKeyState(VK_SHIFT) & 0x8000)); + } else if(sse.type == SI_BUTTON_EVENT) { + int button; + button = SiButtonReleased(&sse); + if(button == SI_APP_FIT_BUTTON) SS.GW.SpaceNavigatorButtonUp(); + } + } + return true; +} +#endif // HAVE_SPACEWARE + +//----------------------------------------------------------------------------- +// Entry point into the program. +//----------------------------------------------------------------------------- +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, INT nCmdShow) +{ + Instance = hInstance; + + InitCommonControls(); + + // A monospaced font + FixedFont = CreateFontW(SS.TW.CHAR_HEIGHT, SS.TW.CHAR_WIDTH, 0, 0, + FW_REGULAR, false, + false, false, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, FF_DONTCARE, L"Lucida Console"); + if(!FixedFont) + FixedFont = (HFONT)GetStockObject(SYSTEM_FONT); + + // Create the root windows: one for control, with text, and one for + // the graphics + CreateMainWindows(); + + ThawWindowPos(TextWnd, "TextWnd"); + ThawWindowPos(GraphicsWnd, "GraphicsWnd"); + + ShowWindow(TextWnd, SW_SHOWNOACTIVATE); + ShowWindow(GraphicsWnd, SW_SHOW); + + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + SwapBuffers(GetDC(GraphicsWnd)); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + SwapBuffers(GetDC(GraphicsWnd)); + + // Create the heaps for all dynamic memory (AllocTemporary, MemAlloc) + InitHeaps(); + + // Pull out the Unicode command line. + int argc; + LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc); + + // A filename may have been specified on the command line; if so, then + // strip any quotation marks, and make it absolute. + std::wstring filenameRel, filename; + if(argc >= 2) { + filenameRel = argv[1]; + if(filenameRel[0] == L'\"' && filenameRel[filenameRel.length() - 1] == L'\"') { + filenameRel.erase(0, 1); + filenameRel.erase(filenameRel.length() - 1, 1); + } + + DWORD len = GetFullPathNameW(&filenameRel[0], 0, NULL, NULL); + filename.resize(len - 1); + GetFullPathNameW(&filenameRel[0], len, &filename[0], NULL); + } + +#ifdef HAVE_SPACEWARE + // Initialize the SpaceBall, if present. Test if the driver is running + // first, to avoid a long timeout if it's not. + HWND swdc = FindWindowW(L"SpaceWare Driver Class", NULL); + if(swdc != NULL) { + SiOpenData sod; + SiInitialize(); + SiOpenWinInit(&sod, GraphicsWnd); + SpaceNavigator = + SiOpen("GraphicsWnd", SI_ANY_DEVICE, SI_NO_MASK, SI_EVENT, &sod); + SiSetUiMode(SpaceNavigator, SI_UI_NO_CONTROLS); + } +#endif + + // Call in to the platform-independent code, and let them do their init + SS.Init(); + if(!filename.empty()) + SS.OpenFile(Narrow(filename)); + + // And now it's the message loop. All calls in to the rest of the code + // will be from the wndprocs. + MSG msg; + DWORD ret; + while((ret = GetMessage(&msg, NULL, 0, 0)) != 0) { +#ifdef HAVE_SPACEWARE + // Is it a message from the six degree of freedom input device? + if(ProcessSpaceNavigatorMsg(&msg)) goto done; +#endif + + // A message from the keyboard, which should be processed as a keyboard + // accelerator? + if(msg.message == WM_KEYDOWN) { + if(ProcessKeyDown(msg.wParam)) goto done; + } + if(msg.message == WM_SYSKEYDOWN && msg.hwnd == TextWnd) { + // If the user presses the Alt key when the text window has focus, + // then that should probably go to the graphics window instead. + SetForegroundWindow(GraphicsWnd); + } + + // None of the above; so just a normal message to process. + TranslateMessage(&msg); + DispatchMessage(&msg); +done: + SS.DoLater(); + } + +#ifdef HAVE_SPACEWARE + if(swdc != NULL) { + if(SpaceNavigator != SI_NO_HANDLE) SiClose(SpaceNavigator); + SiTerminate(); + } +#endif + + // Write everything back to the registry + FreezeWindowPos(TextWnd, "TextWnd"); + FreezeWindowPos(GraphicsWnd, "GraphicsWnd"); + + // Free the memory we've used; anything that remains is a leak. + SK.Clear(); + SS.Clear(); + + return 0; +} diff --git a/src/win32/w32util.cpp b/src/win32/w32util.cpp new file mode 100644 index 0000000..cba9c78 --- /dev/null +++ b/src/win32/w32util.cpp @@ -0,0 +1,138 @@ +//----------------------------------------------------------------------------- +// Utility functions that depend on Win32. Notably, our memory allocation; +// we use two separate allocators, one for long-lived stuff and one for +// stuff that gets freed after every regeneration of the model, to save us +// the trouble of freeing the latter explicitly. +// +// Copyright 2008-2013 Jonathan Westhues. +//----------------------------------------------------------------------------- +#include "solvespace.h" + +namespace SolveSpace { +static HANDLE PermHeap, TempHeap; + +void dbp(const char *str, ...) +{ + va_list f; + static char buf[1024*50]; + va_start(f, str); + _vsnprintf(buf, sizeof(buf), str, f); + va_end(f); + + // The native version of OutputDebugString, unlike most others, + // is OutputDebugStringA. + OutputDebugStringA(buf); +} + +std::string Narrow(const wchar_t *in) +{ + std::string out; + DWORD len = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL); + out.resize(len - 1); + if(!WideCharToMultiByte(CP_UTF8, 0, in, -1, &out[0], len, NULL, NULL)) + oops(); + return out; +} + +std::string Narrow(const std::wstring &in) +{ + if(in == L"") return ""; + + std::string out; + out.resize(WideCharToMultiByte(CP_UTF8, 0, &in[0], in.length(), NULL, 0, NULL, NULL)); + if(!WideCharToMultiByte(CP_UTF8, 0, &in[0], in.length(), + &out[0], out.length(), NULL, NULL)) + oops(); + return out; +} + +std::wstring Widen(const char *in) +{ + std::wstring out; + DWORD len = MultiByteToWideChar(CP_UTF8, 0, in, -1, NULL, 0); + out.resize(len - 1); + if(!MultiByteToWideChar(CP_UTF8, 0, in, -1, &out[0], len)) + oops(); + return out; +} + +std::wstring Widen(const std::string &in) +{ + if(in == "") return L""; + + std::wstring out; + out.resize(MultiByteToWideChar(CP_UTF8, 0, &in[0], in.length(), NULL, 0)); + if(!MultiByteToWideChar(CP_UTF8, 0, &in[0], in.length(), &out[0], out.length())) + oops(); + return out; +} + +static std::string MakeUNCFilename(const std::string &filename) +{ + // Prepend \\?\ UNC prefix unless already an UNC path. + // We never try to fopen paths that are not absolute or + // contain separators inappropriate for the platform; + // thus, it is always safe to prepend this prefix. + std::string uncFilename = filename; + if(uncFilename.substr(0, 2) != "\\\\") + uncFilename = "\\\\?\\" + uncFilename; + return uncFilename; +} + +FILE *ssfopen(const std::string &filename, const char *mode) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + return _wfopen(Widen(MakeUNCFilename(filename)).c_str(), Widen(mode).c_str()); +} + +void ssremove(const std::string &filename) +{ + if(filename.length() != strlen(filename.c_str())) oops(); + _wremove(Widen(filename).c_str()); +} + +//----------------------------------------------------------------------------- +// A separate heap, on which we allocate expressions. Maybe a bit faster, +// since no fragmentation issues whatsoever, and it also makes it possible +// to be sloppy with our memory management, and just free everything at once +// at the end. +//----------------------------------------------------------------------------- +void *AllocTemporary(size_t n) +{ + void *v = HeapAlloc(TempHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, n); + if(!v) oops(); + return v; +} +void FreeTemporary(void *p) { + HeapFree(TempHeap, HEAP_NO_SERIALIZE, p); +} +void FreeAllTemporary(void) +{ + if(TempHeap) HeapDestroy(TempHeap); + TempHeap = HeapCreate(HEAP_NO_SERIALIZE, 1024*1024*20, 0); + // This is a good place to validate, because it gets called fairly + // often. + vl(); +} + +void *MemAlloc(size_t n) { + void *p = HeapAlloc(PermHeap, HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, n); + if(!p) oops(); + return p; +} +void MemFree(void *p) { + HeapFree(PermHeap, HEAP_NO_SERIALIZE, p); +} + +void vl(void) { + if(!HeapValidate(TempHeap, HEAP_NO_SERIALIZE, NULL)) oops(); + if(!HeapValidate(PermHeap, HEAP_NO_SERIALIZE, NULL)) oops(); +} + +void InitHeaps(void) { + // Create the heap used for long-lived stuff (that gets freed piecewise). + PermHeap = HeapCreate(HEAP_NO_SERIALIZE, 1024*1024*20, 0); + // Create the heap that we use to store Exprs and other temp stuff. + FreeAllTemporary(); +} +} diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 0000000..93fb750 --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,23 @@ +include_directories( + ${PNG_INCLUDE_DIRS}) + +link_directories( + ${PNG_LIBRARY_DIRS}) + +add_executable(png2c + png2c.cpp) + +target_link_libraries(png2c + ${PNG_LIBRARIES}) + +add_executable(unifont2c + unifont2c.cpp) + +target_link_libraries(unifont2c + ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) + +add_executable(lff2c + lff2c.cpp) + +target_link_libraries(lff2c + ${ZLIB_LIBRARIES}) diff --git a/tools/lff2c.cpp b/tools/lff2c.cpp new file mode 100644 index 0000000..098fd0a --- /dev/null +++ b/tools/lff2c.cpp @@ -0,0 +1,410 @@ +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TOLERANCE 1e-6 + +double correctAngle(double a) { + return M_PI + remainder(a - M_PI, 2 * M_PI); +} + +struct Point { + double x; + double y; + + Point operator+(const Point &o) const { return { x + o.x, y + o.y }; } + Point operator-(const Point &o) const { return { x - o.x, y - o.y }; } + Point operator*(const Point &o) const { return { x * o.x, y * o.y }; } + Point operator/(const Point &o) const { return { x / o.x, y / o.y }; } + + Point operator*(double k) const { return { x * k, y * k }; } + Point operator/(double k) const { return { x / k, y / k }; } + + double length() const{ + return sqrt(x * x + y * y); + } + + double angle() const { + return correctAngle(atan2(y, x)); + } + + double distanceTo(const Point &v) const { + return (*this - v).length(); + } + + double angleTo(const Point &v) const { + return (v - *this).angle(); + } + + static Point polar(double radius, double angle) { + return { radius * cos(angle), radius * sin(angle) }; + } + + bool operator==(const Point &o) const { return x == o.x && y == o.y; } + bool operator!=(const Point &o) const { return x != o.x || y != o.y; } + +}; + +struct Curve { + std::vector points; +}; + +struct Glyph { + char32_t character; + char32_t baseCharacter; + std::vector curves; + + void getHorizontalBounds(double *rminx, double *rmaxx) const { + double minx = 0; + double maxx = 0; + if(!curves.empty()) { + minx = curves[0].points[0].x; + maxx = minx; + for(const Curve &c : curves) { + for(const Point &p : c.points) { + maxx = std::max(maxx, p.x); + minx = std::min(minx, p.x); + } + } + } + if(rminx) *rminx = minx; + if(rmaxx) *rmaxx = maxx; + } + + void getVerticalBounds(double *rminy, double *rmaxy) const { + double miny = 0; + double maxy = 0; + if(!curves.empty()) { + miny = curves[0].points[0].y; + maxy = miny; + for(const Curve &c : curves) { + for(const Point &p : c.points) { + maxy = std::max(maxy, p.y); + miny = std::min(miny, p.y); + } + } + } + if(rminy) *rminy = miny; + if(rmaxy) *rmaxy = maxy; + } + + void getHorizontalMetrics(double *leftSideBearing, double *boundingWidth) const { + double minx, maxx; + getHorizontalBounds(&minx, &maxx); + *leftSideBearing = minx; + *boundingWidth = maxx - minx; + } + + bool operator<(const Glyph &o) const { return character < o.character; } +}; + +struct Font { + double letterSpacing; + double wordSpacing; + std::vector glyphs; + + const Glyph &findGlyph(char32_t character) { + return *std::find_if(glyphs.begin(), glyphs.end(), + [&](const Glyph &g) { return g.character == character; }); + } + + void getGlyphBound(double *rminw, double *rminh, double *rmaxw, double *rmaxh) { + if(glyphs.empty()) { + *rminw = 0.0; + *rmaxw = 0.0; + *rminh = 0.0; + *rmaxh = 0.0; + return; + } + + glyphs[0].getHorizontalBounds(rminw, rmaxw); + glyphs[0].getVerticalBounds(rminh, rmaxh); + for(const Glyph &g : glyphs) { + double minw, minh, maxw, maxh; + g.getHorizontalBounds(&minw, &maxw); + g.getVerticalBounds(&minh, &maxh); + *rminw = std::min(*rminw, minw); + *rminh = std::min(*rminh, minh); + *rmaxw = std::max(*rmaxw, maxw); + *rmaxh = std::max(*rmaxh, maxh); + } + } + + void createArc(Curve &curve, const Point &cp, double radius, + double a1, double a2, bool reversed) { + if (radius < 1e-6) return; + + double aSign = 1.0; + if(reversed) { + if(a1 <= a2 + TOLERANCE) a1 += 2.0 * M_PI; + aSign = -1.0; + } else { + if(a2 <= a1 + TOLERANCE) a2 += 2.0 * M_PI; + } + + // Angle Step (rad) + double da = fabs(a2 - a1); + int numPoints = 8; + double aStep = aSign * da / double(numPoints); + + for(int i = 0; i <= numPoints; i++) { + curve.points.push_back(cp + Point::polar(radius, a1 + aStep * i)); + } + } + + void createBulge(const Point &v, double bulge, Curve &curve) { + bool reversed = bulge < 0.0; + double alpha = atan(bulge) * 4.0; + Point &point = curve.points.back(); + + Point middle = (point + v) / 2.0; + double dist = point.distanceTo(v) / 2.0; + double angle = point.angleTo(v); + + // alpha can't be 0.0 at this point + double radius = fabs(dist / sin(alpha / 2.0)); + double wu = fabs(radius*radius - dist*dist); + double h = sqrt(wu); + + if(bulge > 0.0) { + angle += M_PI_2; + } else { + angle -= M_PI_2; + } + + if (fabs(alpha) > M_PI) { + h *= -1.0; + } + + Point center = Point::polar(h, angle); + center = center + middle; + + double a1 = center.angleTo(point); + double a2 = center.angleTo(v); + createArc(curve, center, radius, a1, a2, reversed); + } + + void readLff(const std::string &path) { + gzFile lfffont = gzopen(path.c_str(), "rb"); + if(!lfffont) { + std::cerr << path << ": gzopen failed" << std::endl; + std::exit(1); + } + + // Read line by line until we find a new letter: + Glyph *currentGlyph = nullptr; + while(!gzeof(lfffont)) { + std::string line; + do { + char buf[128] = {0}; + if(!gzgets(lfffont, buf, sizeof(buf))) + break; + line += buf; + } while(line.back() != '\n'); + + if(line.empty() || line[0] == '\n') { + continue; + } else if(line[0] == '#') { + // This is comment or metadata. + std::istringstream ss(line.substr(1)); + + std::vector tokens; + while(!ss.eof()) { + std::string token; + std::getline(ss, token, ':'); + std::istringstream(token) >> token; // trim + if(!token.empty()) + tokens.push_back(token); + } + + // If not in form of "a:b" then it's not metadata, just a comment. + if (tokens.size() != 2) + continue; + + std::string &identifier = tokens[0]; + std::string &value = tokens[1]; + + std::transform(identifier.begin(), identifier.end(), identifier.begin(), + ::tolower); + if (identifier == "letterspacing") { + std::istringstream(value) >> letterSpacing; + } else if (identifier == "wordspacing") { + std::istringstream(value) >> wordSpacing; + } else if (identifier == "linespacingfactor") { + /* don't care */ + } else if (identifier == "author") { + /* don't care */ + } else if (identifier == "name") { + /* don't care */ + } else if (identifier == "license") { + /* don't care */ + } else if (identifier == "encoding") { + /* don't care */ + } else if (identifier == "created") { + /* don't care */ + } + } else if(line[0] == '[') { + // This is a glyph. + size_t closingPos; + char32_t chr = std::stoi(line.substr(1), &closingPos, 16);; + if(line[closingPos + 1] != ']') { + std::cerr << "unrecognized character number: " << line << std::endl; + currentGlyph = nullptr; + continue; + } + + glyphs.emplace_back(); + currentGlyph = &glyphs.back(); + currentGlyph->character = chr; + currentGlyph->baseCharacter = 0; + } else if(currentGlyph != nullptr) { + if (line[0] == 'C') { + // This is a reference to another glyph. + currentGlyph->baseCharacter = std::stoi(line.substr(1), nullptr, 16); + } else { + // This is a series of curves. + currentGlyph->curves.emplace_back(); + Curve &curve = currentGlyph->curves.back(); + + std::stringstream ss(line); + while (!ss.eof()) { + std::string vertex; + std::getline(ss, vertex, ';'); + + std::stringstream ssv(vertex); + std::string coord; + Point p; + + if(!std::getline(ssv, coord, ',')) continue; + p.x = std::stod(coord); + + if(!std::getline(ssv, coord, ',')) continue; + p.y = std::stod(coord); + + if(!std::getline(ssv, coord, ',') || coord[0] != 'A') { + // This is just a point. + curve.points.push_back(p); + } else { + // This is a point with a bulge. + double bulge = std::stod(coord.substr(1)); + createBulge(p, bulge, curve); + } + } + } + } else { + std::cerr << "unrecognized line: " << line << std::endl; + } + } + gzclose(lfffont); + } + + void writeCppHeader(const std::string &hName) { + std::sort(glyphs.begin(), glyphs.end()); + + std::ofstream ts(hName, std::ios::out); + + double minX, minY, maxX, maxY; + getGlyphBound(&minX, &minY, &maxX, &maxY); + + double size = 32766.0; + double scale = size / std::max({ fabs(maxX), fabs(minX), fabs(maxY), fabs(minY) }); + + double capHeight, ascender, descender; + findGlyph('A').getVerticalBounds(nullptr, &capHeight); + findGlyph('h').getVerticalBounds(nullptr, &ascender); + findGlyph('p').getVerticalBounds(&descender, nullptr); + + // We use tabs for indentation here to make compilation slightly faster + ts << + "/**** This is a generated file - do not edit ****/\n\n" + "#ifndef __VECTORFONT_TABLE_H\n" + "#define __VECTORFONT_TABLE_H\n" + "\n" + "#define PEN_UP 32767\n" + "#define UP PEN_UP\n" + "\n" + "#define FONT_CAP_HEIGHT ((int16_t)" << (int)floor(capHeight * scale) << ")\n" << + "#define FONT_ASCENDER ((int16_t)" << (int)floor(ascender * scale) << ")\n" << + "#define FONT_DESCENDER ((int16_t)" << (int)floor(descender * scale) << ")\n" << + "#define FONT_SIZE (FONT_ASCENDER-FONT_DESCENDER)\n" + "\n" + "struct VectorGlyph {\n" + "\tchar32_t character;\n" + "\tchar32_t baseCharacter;\n" + "\tint leftSideBearing;\n" + "\tint boundingWidth;\n" + "\tint advanceWidth;\n" + "\tconst int16_t *data;\n" + "};\n" + "\n" + "const int16_t VectorFontData[] = {\n" + "\tUP, UP,\n"; + + std::map glyphIndexes; + size_t index = 2; + for(const Glyph &g : glyphs) { + ts << "\t// U+" << std::hex << g.character << std::dec << "\n"; + glyphIndexes[g.character] = index; + for(const Curve &c : g.curves) { + for(const Point &p : c.points) { + ts << "\t" << (int)floor(p.x * scale) << ", " << + (int)floor(p.y * scale) << ",\n"; + index += 2; + } + ts << "\tUP, UP,\n"; + index += 2; + } + ts << "\tUP, UP,\n"; // end-of-glyph marker + index += 2; + } + + ts << + "};\n" + "\n" + "const VectorGlyph VectorFont[] = {\n" + "\t// U+20\n" + "\t{ 32, 0, 0, 0, " << (int)floor(wordSpacing * scale) << ", &VectorFontData[0] },\n"; + + for(const Glyph &g : glyphs) { + double leftSideBearing, boundingWidth; + g.getHorizontalMetrics(&leftSideBearing, &boundingWidth); + + ts << "\t// U+" << std::hex << g.character << std::dec << "\n"; + ts << "\t{ " << g.character << ", " + << g.baseCharacter << ", " + << (int)floor(leftSideBearing * scale) << ", " + << (int)floor(boundingWidth * scale) << ", " + << (int)floor((leftSideBearing + boundingWidth + + letterSpacing) * scale) << ", "; + ts << "&VectorFontData[" << glyphIndexes[g.character] << "] },\n"; + } + + ts << + "};\n" + "\n" + "#undef UP\n" + "\n" + "#endif\n"; + } +}; + +int main(int argc, char** argv) { + if(argc != 3) { + std::cerr << "Usage: " << argv[0] << "
\n" << std::endl; + return 1; + } + + Font font; + font.readLff(argv[2]); + font.writeCppHeader(argv[1]); + + return 0; +} diff --git a/tools/png2c.cpp b/tools/png2c.cpp new file mode 100644 index 0000000..49d2249 --- /dev/null +++ b/tools/png2c.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include + +#define die(msg) do { fprintf(stderr, "%s\n", msg); abort(); } while(0) + +void write_png(FILE *out, const char *filename) { + FILE *fp = fopen(filename, "rb"); + if (!fp) + die("png fopen failed"); + + png_byte header[8] = {}; + if(fread(header, 1, 8, fp) != 8) + die("png fread failed"); + + if(png_sig_cmp(header, 0, 8)) + die("png_sig_cmp failed"); + + png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if(!png) + die("png_create_read_struct failed"); + + png_set_expand(png); + png_set_strip_alpha(png); + + png_infop png_info = png_create_info_struct(png); + if (!png_info) + die("png_create_info_struct failed"); + + if (setjmp(png_jmpbuf(png))) + die("png_init_io failed"); + + png_init_io(png, fp); + png_set_sig_bytes(png, 8); + + png_read_info(png, png_info); + + int width = png_get_image_width(png, png_info); + int height = png_get_image_height(png, png_info); + if(width != 24 || height != 24) + die("not a 24x24 png"); + + png_read_update_info(png, png_info); + + if (setjmp(png_jmpbuf(png))) + die("png_read_image failed"); + + png_bytepp image = (png_bytepp) malloc(sizeof(png_bytep) * height); + for (int y = 0; y < height; y++) + image[y] = (png_bytep) malloc(png_get_rowbytes(png, png_info)); + + png_read_image(png, (png_bytepp) image); + + for(int y = height - 1; y >= 0; y--) { + for(int x = 0; x < (int)png_get_rowbytes(png, png_info); x += 3) { + unsigned char r = image[y][x + 0], + g = image[y][x + 1], + b = image[y][x + 2]; + + if(r + g + b < 11) + r = g = b = 30; + fprintf(out, " 0x%02x, 0x%02x, 0x%02x,\n", r, g, b); + } + } + + for (int y = 0; y < height; y++) + free(image[y]); + free(image); + + fclose(fp); + + png_destroy_read_struct(&png, &png_info, NULL); +} + +int main(int argc, char** argv) { + if(argc < 3) { + fprintf(stderr, "Usage: %s
...\n", + argv[0]); + return 1; + } + + FILE *source = fopen(argv[1], "wt"); + if(!source) + die("source fopen failed"); + + FILE *header = fopen(argv[2], "wt"); + if(!header) + die("header fopen failed"); + + fprintf(source, "/**** This is a generated file - do not edit ****/\n\n"); + fprintf(header, "/**** This is a generated file - do not edit ****/\n\n"); + + for(int i = 3; i < argc; i++) { + const char *filename = argv[i]; + const char *basename = strrchr(filename, '/'); /* cmake uses / even on Windows */ + if(basename == NULL) { + basename = filename; + } else { + basename++; // skip separator + } + + char *stemname = (char*) calloc(strlen(basename), 1); + strncpy(stemname, basename, strchr(basename, '.') - basename); + for(size_t j = 0; j < strlen(stemname); j++) { + if(!isalnum(stemname[j])) + stemname[j] = '_'; + } + + fprintf(header, "extern unsigned char Icon_%s[24*24*3];\n", stemname); + + fprintf(source, "unsigned char Icon_%s[24*24*3] = {\n", stemname); + write_png(source, filename); + fprintf(source, "};\n\n"); + + free(stemname); + } + + fclose(source); + fclose(header); +} diff --git a/tools/unifont2c.cpp b/tools/unifont2c.cpp new file mode 100644 index 0000000..7e9bf7a --- /dev/null +++ b/tools/unifont2c.cpp @@ -0,0 +1,261 @@ +#include +#include +#include +#include +#include + +#define die(msg) do { fprintf(stderr, "%s\n", msg); abort(); } while(0) + +#ifdef NDEBUG +#define COMPRESSION_LEVEL 9 +#else +#define COMPRESSION_LEVEL 5 +#endif + +unsigned short* read_png(const char *filename) { + FILE *fp = fopen(filename, "rb"); + if (!fp) + die("png fopen failed"); + + png_byte header[8] = {}; + if(fread(header, 1, 8, fp) != 8) + die("png fread failed"); + + if(png_sig_cmp(header, 0, 8)) + die("png_sig_cmp failed"); + + png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if(!png) + die("png_create_read_struct failed"); + + png_set_expand(png); + png_set_strip_alpha(png); + + png_infop png_info = png_create_info_struct(png); + if (!png_info) + die("png_create_info_struct failed"); + + if (setjmp(png_jmpbuf(png))) + die("png_init_io failed"); + + png_init_io(png, fp); + png_set_sig_bytes(png, 8); + + png_read_info(png, png_info); + + int width = png_get_image_width(png, png_info); + int height = png_get_image_height(png, png_info); + if(width != 16 || height != 16) + die("not a 16x16 png"); + + png_read_update_info(png, png_info); + + if (setjmp(png_jmpbuf(png))) + die("png_read_image failed"); + + png_bytepp image = (png_bytepp) malloc(sizeof(png_bytep) * height); + for (int y = 0; y < height; y++) + image[y] = (png_bytep) malloc(png_get_rowbytes(png, png_info)); + + png_read_image(png, (png_bytepp) image); + + unsigned short *glyph = (unsigned short *) calloc(16, 2); + + for(int y = 0; y < height; y++) { + for(int x = 0; x < (int)png_get_rowbytes(png, png_info); x += 3) { + unsigned char r = image[y][x + 0], + g = image[y][x + 1], + b = image[y][x + 2]; + + if(r + g + b >= 11) { + glyph[y] |= 1 << (width - x / 3); + } + } + } + + for (int y = 0; y < height; y++) + free(image[y]); + free(image); + + fclose(fp); + + png_destroy_read_struct(&png, &png_info, NULL); + + return glyph; +} + +const static unsigned short replacement[16] = { + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, + 0xAAAA, 0xAAAA, 0xAAAA, 0xAAAA, +}; + +struct CodepointProperties { + bool exists:1; + bool isWide:1; +}; + +int main(int argc, char** argv) { + if(argc < 3) { + fprintf(stderr, "Usage: %s
...\n" + " where s are mapped into private use area\n" + " starting at U+E000.\n", + argv[0]); + return 1; + } + + const int codepoint_count = 0x10000; + unsigned short **font = + (unsigned short **)calloc(sizeof(unsigned short*), codepoint_count); + CodepointProperties *properties = + (CodepointProperties *)calloc(sizeof(CodepointProperties), codepoint_count); + + const int private_start = 0xE000; + for(int i = 3; i < argc; i++) { + int codepoint = private_start + i - 3; + font[codepoint] = read_png(argv[i]); + properties[codepoint].exists = true; + } + + gzFile unifont = gzopen(argv[2], "rb"); + if(!unifont) + die("unifont fopen failed"); + + while(1) { + char buf[100]; + if(!gzgets(unifont, buf, sizeof(buf))){ + if(gzeof(unifont)) { + break; + } else { + die("unifont gzgets failed"); + } + } + + unsigned short codepoint; + unsigned short *glyph = (unsigned short *) calloc(32, 1); + bool isWide; + if( sscanf(buf, "%4hx:%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx" + "%4hx%4hx%4hx%4hx%4hx%4hx%4hx%4hx\n", + &codepoint, + &glyph[0], &glyph[1], &glyph[2], &glyph[3], + &glyph[4], &glyph[5], &glyph[6], &glyph[7], + &glyph[8], &glyph[9], &glyph[10], &glyph[11], + &glyph[12], &glyph[13], &glyph[14], &glyph[15]) == 17) { + /* read 16x16 character */ + isWide = true; + } else if(sscanf(buf, "%4hx:%2hx%2hx%2hx%2hx%2hx%2hx%2hx%2hx" + "%2hx%2hx%2hx%2hx%2hx%2hx%2hx%2hx\n", + &codepoint, + &glyph[0], &glyph[1], &glyph[2], &glyph[3], + &glyph[4], &glyph[5], &glyph[6], &glyph[7], + &glyph[8], &glyph[9], &glyph[10], &glyph[11], + &glyph[12], &glyph[13], &glyph[14], &glyph[15]) == 17) { + /* read 8x16 character */ + for(int i = 0; i < 16; i++) + glyph[i] <<= 8; + isWide = false; + } else { + die("parse unifont character"); + } + + font[codepoint] = glyph; + properties[codepoint].exists = true; + properties[codepoint].isWide = isWide; + } + + gzclose(unifont); + + FILE *source = fopen(argv[1], "wt"); + if(!source) + die("source fopen failed"); + + const int chunk_size = 64 * 64, + chunks = codepoint_count / chunk_size; + + const int chunk_input_size = chunk_size * 16 * 16; + unsigned int chunk_output_size[chunks] = {}; + + unsigned char *chunk_data = (unsigned char *)calloc(1, chunk_input_size); + unsigned int chunk_data_index; + + fprintf(source, "/**** This is a generated file - do not edit ****/\n\n"); + + for(int chunk_index = 0; chunk_index < chunks; chunk_index++) { + chunk_data_index = 0; + + const int chunk_start = chunk_index * chunk_size; + for(int codepoint = chunk_start; codepoint < chunk_start + chunk_size; codepoint++) { + const unsigned short *glyph = font[codepoint] != NULL ? font[codepoint] : replacement; + for(int x = 15; x >= 0; x--) { + for(int y = 0; y < 16; y++) { + chunk_data[chunk_data_index++] = (glyph[y] & (1 << x)) ? 0xff : 0; + } + } + + if(font[codepoint] != NULL) + free(font[codepoint]); + } + + fprintf(source, "static const uint8_t CompressedFontTextureChunk%d[] = {\n", + chunk_start / chunk_size); + + z_stream stream; + stream.zalloc = Z_NULL; + stream.zfree = Z_NULL; + stream.opaque = Z_NULL; + if(deflateInit(&stream, COMPRESSION_LEVEL) != Z_OK) + die("deflateInit failed"); + + stream.next_in = chunk_data; + stream.avail_in = chunk_input_size; + + do { + unsigned char compressed_chunk_data[16384] = {}; + stream.next_out = compressed_chunk_data; + stream.avail_out = sizeof(compressed_chunk_data); + deflate(&stream, Z_FINISH); + + chunk_output_size[chunk_index] += sizeof(compressed_chunk_data) - stream.avail_out; + for(size_t i = 0; i < sizeof(compressed_chunk_data) - stream.avail_out; i += 16) { + unsigned char *d = &compressed_chunk_data[i]; + fprintf(source, " %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, " + "%3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d,\n", + d[ 0], d[ 1], d[ 2], d[ 3], d[ 4], d[ 5], d[ 6], d[ 7], + d[ 8], d[ 9], d[10], d[11], d[12], d[13], d[14], d[15]); + } + } while(stream.avail_out == 0); + + deflateEnd(&stream); + + fprintf(source, "};\n\n"); + } + + free(chunk_data); + free(font); + + fprintf(source, "static const struct {\n" + " size_t length;" + " const uint8_t *data;" + "} CompressedFontTexture[%d] = {\n", chunks); + for(int i = 0; i < chunks; i++) { + fprintf(source, " { %d, CompressedFontTextureChunk%d },\n", + chunk_output_size[i], i); + } + fprintf(source, "};\n\n"); + + fprintf(source, "struct GlyphProperties {\n" + " bool exists:1;\n" + " bool isWide:1;\n" + "} CodepointProperties[%d] = {\n", codepoint_count); + for(int i = 0; i < codepoint_count; i++) { + fprintf(source, " { %s, %s },\n", + properties[i].exists ? "true" : "false", + properties[i].isWide ? "true" : "false"); + } + fprintf(source, "};\n"); + + free(properties); + + fclose(source); +} diff --git a/wishlist.txt b/wishlist.txt new file mode 100644 index 0000000..f9db34a --- /dev/null +++ b/wishlist.txt @@ -0,0 +1,19 @@ +O(n*log(n)) assembly of edges into contours +fix anti-aliased edge bug with filled contours +crude DXF, HPGL import +a request to import a plane thing +make export assemble only contours in same group +rotation of model view works about z of first point under cursor +a way to kill a slow operation + +----- +rounding, as a special group +associative entities from solid model, as a special group +better level of detail +some kind of import +faster triangulation +loop detection +IGES export +incremental regen of entities + + -- 2.30.2

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 Vgne?E_}d^?F4166|?_}*v#6rh# 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 literal 0 HcmV?d00001 diff --git a/src/icons/mesh.png b/src/icons/mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..dde867b613bb9a50e03e0ca387e6f8816ca158c8 GIT binary patch literal 28445 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 z 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 Eg1f7$-~a#s literal 0 HcmV?d00001 diff --git a/src/icons/parallel.png b/src/icons/parallel.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8ef991462f9b565a6327af11c16f8cde7b2ec2 GIT binary patch literal 26455 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�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

BB1vyr>=hu`W6H;Qj6k3ah3<#C*ivdm-4$Cu7O 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 z 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 literal 0 HcmV?d00001 diff --git a/src/icons/constraint.png b/src/icons/constraint.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e1889ae80a08b643a0749fd5ec55fc085b68dd GIT binary patch literal 26545 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 literal 0 HcmV?d00001 diff --git a/src/icons/edges.png b/src/icons/edges.png new file mode 100644 index 0000000000000000000000000000000000000000..d89c046fe6e97889a10ff9fdc7205d9f9c38b40c GIT binary patch literal 27374 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 literal 0 HcmV?d00001 diff --git a/src/icons/extrude.png b/src/icons/extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4a44a138f74c755490e5e349bf0216dccb8f0f GIT binary patch literal 27030 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 literal 0 HcmV?d00001 diff --git a/src/icons/faces.png b/src/icons/faces.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd4e363a97f892618b7fdcfe229f6aa0b38a61a GIT binary patch literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;YR|DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Da>C%`AfRasfNu~AD{SlG?Yt+KK* zH#b*WT6+3)>Ez_(sHi9d1B1Lgv(1~iTwGk7ot^FM>>M2(wY0RNqodQ))8pggi;9Zu z?d|#b`JJ4cJUu;KU0uDsy(1!AGcz;!`1mX=EOd2sEiEl;YjtB|9hWQ-mXnk7^788G zQTFig;Ns$PaBxUVvvGHK4-XHwv9U2XH=jM5@z5cL`ucjH1HHO03o$S-dV9J!hE&{2 zGH7FBWm8K|VGwZO3Gni7?vHd2Vpn7oa7f@Zvz4u_t*w)dRcv8#U@&ZGW&QH?Ye`9K zZ;7A~1LKheoMK@q*Pa>}IZb2WP+((Am6c6PixpH>4&iKINV;HbVh|FTZs;@}Bx%dM zpl6$48_<}>Qi+6#K%qHS3``u$`5G7wtz=ecm{7W*!{hafmxYc@yg*(_!HZ9?nw{7r zGORuoF)*@RKe+Jp8h++IyPO^Yc~=$JtY#K}cKKmSVk$F-LI=7Ft5=!bFVdQ&MBb@0M#DENB{r; literal 0 HcmV?d00001 diff --git a/src/icons/hidden-lines.png b/src/icons/hidden-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..35ea04b21340a6976600fa67b3bab7ce86f1eaa0 GIT binary patch literal 544 zcmV+*0^j|KP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^Myrb$FWRCwCdRxzr=Kop$)A&{t`D1u-k0R?T68+ZfnVd)XXdni~~3RYggcDJ<< zPhhO<)a?A?qa?Z;{d_F`gK1vgo7vsG9aaD!J{Vv4aJ&?l&1TSA{|aRGP-sG>QsHvB zBuREU9op({a9x+<@tB9hf&5Xp!A!1{;%2jXEVg1YnJ|uHhGCd5&}y|PrQ~Y0A^_Iw z^<3gcqrt^u!QF1hFboO6E)Yc#kH;hD^Eqp^8UauUVI?mV3S6((lv1)>F5mM;fhdX? z$1z8vQHJDlxfscVAfS|zN~sL_qky=pkRS=Ib!Gw_$3c=L#tCyA2SSLaJjqPnw5>ae z#iI3yY(3T;m{yY)ww`qU>m8E+Z56KTepbNqJnOgf`TTc*)9D1QHJZ&PeBZ}*yM@*o z)oK+5zqu1+Y%+wJztaZH=tU@&;T$?0O>_o$8$ z>>lc}#h&L8086FPO9v%sG&`%n&FqH5VXn!gdrW3$6)>5d4M7l)q|xlG0$OWcuh+LR iolajaMEv_##rFVq{XdKSQl7{F0000oU&Gpo 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 WLQ`h$%F^GmyLjI2T=AJ3kN*#1E;ls* literal 0 HcmV?d00001 diff --git a/src/icons/in3d.png b/src/icons/in3d.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6be0760e134b6f34e2af3ac13cb9654a03b916 GIT binary patch literal 26608 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