summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Bauer <mba@openoffice.org>2009-09-09 11:45:13 +0200
committerMathias Bauer <mba@openoffice.org>2009-09-09 11:45:13 +0200
commit0cb550725d7e128e72e67739aff5338865c28abc (patch)
tree0ffabe03dd8b83e273539f26f633273d50c37397
parentaa611d78df11fcc1e35ead5fa093143bf17e4cf6 (diff)
parent1f0839c836781bc41f8c301b6262eabc978c90f8 (diff)
merge commit to DEV300_m57
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx9
-rw-r--r--basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx14
-rw-r--r--basegfx/source/curve/b2dcubicbezier.cxx36
-rw-r--r--basegfx/source/polygon/b2dlinegeometry.cxx105
-rw-r--r--basegfx/source/polygon/b2dpolygoncutandtouch.cxx9
-rw-r--r--basegfx/source/polygon/b2dpolypolygoncutter.cxx79
-rw-r--r--basegfx/source/polygon/b2dpolypolygontools.cxx12
-rw-r--r--canvas/source/cairo/cairo_canvasfont.cxx3
-rw-r--r--canvas/source/cairo/cairo_canvashelper.cxx2
-rw-r--r--canvas/source/cairo/makefile.mk2
-rwxr-xr-xcanvas/source/directx/dx_textlayout_drawhelper.cxx3
-rw-r--r--canvas/source/directx/makefile.mk4
-rw-r--r--canvas/source/vcl/canvasfont.cxx4
-rw-r--r--canvas/source/vcl/makefile.mk2
-rw-r--r--comphelper/inc/comphelper/processfactory.hxx11
-rw-r--r--comphelper/inc/comphelper/stl_types.hxx54
-rw-r--r--comphelper/inc/comphelper/stlunosequence.hxx480
-rw-r--r--comphelper/inc/comphelper/storagehelper.hxx3
-rw-r--r--comphelper/source/misc/mediadescriptor.cxx9
-rw-r--r--comphelper/source/misc/string.cxx27
-rw-r--r--comphelper/source/misc/types.cxx11
-rw-r--r--comphelper/source/misc/uieventslogger.cxx3
-rw-r--r--comphelper/source/processfactory/processfactory.cxx20
-rw-r--r--comphelper/source/property/propertybag.cxx5
-rw-r--r--comphelper/source/property/propertycontainerhelper.cxx4
-rw-r--r--comphelper/source/streaming/memorystream.cxx3
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx4
-rw-r--r--cppcanvas/util/makefile.mk2
-rw-r--r--dtrans/source/X11/X11_selection.cxx9
-rw-r--r--dtrans/source/aqua/DropTarget.cxx12
-rw-r--r--dtrans/source/aqua/aqua_clipboard.cxx9
-rw-r--r--goodies/source/filter.vcl/idxf/dxf2mtf.cxx181
-rw-r--r--goodies/source/filter.vcl/idxf/dxf2mtf.hxx10
-rw-r--r--goodies/source/filter.vcl/idxf/dxfreprd.cxx12
-rw-r--r--goodies/source/filter.vcl/idxf/dxfreprd.hxx10
-rw-r--r--goodies/source/filter.vcl/idxf/dxfvec.cxx29
-rw-r--r--goodies/source/filter.vcl/idxf/dxfvec.hxx34
-rw-r--r--goodies/source/graphic/grfmgr.cxx31
-rw-r--r--i18npool/inc/breakiterator_ctl.hxx1
-rw-r--r--i18npool/inc/breakiterator_unicode.hxx6
-rw-r--r--i18npool/inc/xdictionary.hxx4
-rw-r--r--i18npool/source/breakiterator/breakiterator_cjk.cxx4
-rw-r--r--i18npool/source/breakiterator/breakiterator_ctl.cxx7
-rw-r--r--i18npool/source/breakiterator/breakiterator_unicode.cxx29
-rw-r--r--i18npool/source/breakiterator/data/dict_word.txt3
-rw-r--r--i18npool/source/breakiterator/data/dict_word_nodash.txt (renamed from i18npool/source/breakiterator/data/dict_word_dash.txt)3
-rw-r--r--i18npool/source/breakiterator/data/dict_word_prepostdash.txt157
-rw-r--r--i18npool/source/breakiterator/makefile.mk2
-rw-r--r--i18npool/source/breakiterator/xdictionary.cxx30
-rw-r--r--i18npool/source/calendar/calendar_gregorian.cxx34
-rw-r--r--i18npool/source/localedata/data/de_DE.xml9
-rw-r--r--i18npool/source/localedata/data/nl_NL.xml35
-rw-r--r--i18npool/source/localedata/data/pl_PL.xml7
-rw-r--r--i18npool/source/localedata/data/sv_SE.xml7
-rw-r--r--i18npool/source/paper/paper.cxx9
-rw-r--r--sax/inc/sax/fshelper.hxx12
-rw-r--r--sax/source/tools/fastserializer.cxx87
-rw-r--r--sax/source/tools/fastserializer.hxx34
-rw-r--r--sax/source/tools/fshelper.cxx10
-rw-r--r--sot/inc/sot/exchange.hxx11
-rw-r--r--sot/source/base/exchange.cxx34
-rw-r--r--svtools/inc/docmspasswdrequest.hxx72
-rw-r--r--svtools/inc/pch/precompiled_svtools.hxx1
-rw-r--r--svtools/inc/svtools/optionsdrawinglayer.hxx9
-rw-r--r--svtools/inc/svtools/svlbox.hxx3
-rw-r--r--svtools/inc/svtools/table/abstracttablecontrol.hxx130
-rw-r--r--svtools/inc/svtools/table/defaultinputhandler.hxx67
-rw-r--r--svtools/inc/svtools/table/gridtablerenderer.hxx103
-rw-r--r--svtools/inc/svtools/table/tablecontrol.hxx174
-rw-r--r--svtools/inc/svtools/table/tabledatawindow.hxx75
-rw-r--r--svtools/inc/svtools/table/tableinputhandler.hxx77
-rw-r--r--svtools/inc/svtools/table/tablemodel.hxx454
-rw-r--r--svtools/inc/svtools/table/tablerenderer.hxx241
-rw-r--r--svtools/inc/svtools/table/tabletypes.hxx75
-rw-r--r--svtools/prj/build.lst3
-rw-r--r--svtools/prj/d.lst1
-rw-r--r--svtools/source/config/optionsdrawinglayer.cxx197
-rw-r--r--svtools/source/config/useroptions.cxx107
-rw-r--r--svtools/source/contnr/fileview.cxx5
-rw-r--r--svtools/source/contnr/imivctl1.cxx8
-rw-r--r--svtools/source/contnr/svlbox.cxx6
-rw-r--r--svtools/source/contnr/svtabbx.cxx52
-rw-r--r--svtools/source/contnr/svtreebx.cxx16
-rw-r--r--svtools/source/control/ctrltool.cxx6
-rw-r--r--svtools/source/control/scrwin.cxx4
-rw-r--r--svtools/source/filter.vcl/filter/filter.cxx11
-rw-r--r--svtools/source/items1/itemset.cxx2
-rw-r--r--svtools/source/misc1/adrparse.cxx16
-rw-r--r--svtools/source/misc1/docmspasswdrequest.cxx143
-rw-r--r--svtools/source/misc1/makefile.mk1
-rw-r--r--svtools/source/table/defaultinputhandler.cxx210
-rw-r--r--svtools/source/table/gridtablerenderer.cxx234
-rw-r--r--svtools/source/table/makefile.mk59
-rw-r--r--svtools/source/table/tablecontrol.cxx179
-rw-r--r--svtools/source/table/tablecontrol_impl.cxx2003
-rw-r--r--svtools/source/table/tablecontrol_impl.hxx342
-rw-r--r--svtools/source/table/tabledatawindow.cxx81
-rw-r--r--svtools/source/table/tablegeometry.cxx130
-rw-r--r--svtools/source/table/tablegeometry.hxx161
-rw-r--r--svtools/source/uno/makefile.mk3
-rw-r--r--svtools/source/uno/unocontroltablemodel.cxx812
-rw-r--r--svtools/source/uno/unocontroltablemodel.hxx179
-rw-r--r--svtools/source/uno/unoiface.cxx20
-rw-r--r--svtools/uno/makefile.mk2
-rw-r--r--svtools/util/makefile.mk1
-rw-r--r--toolkit/inc/toolkit/helper/listenermultiplexer.hxx2
-rw-r--r--toolkit/inc/toolkit/helper/property.hxx9
-rw-r--r--toolkit/inc/toolkit/helper/servicenames.hxx6
-rw-r--r--toolkit/inc/toolkit/helper/vclunohelper.hxx4
-rw-r--r--toolkit/prj/build.lst3
-rw-r--r--toolkit/source/awt/vclxwindow.cxx86
-rw-r--r--toolkit/source/awt/vclxwindows.cxx27
-rw-r--r--toolkit/source/controls/dialogcontrol.cxx4
-rw-r--r--toolkit/source/controls/formattedcontrol.cxx2
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.cxx242
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.hxx96
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.cxx310
-rw-r--r--toolkit/source/controls/grid/defaultgriddatamodel.hxx99
-rw-r--r--toolkit/source/controls/grid/gridcolumn.cxx166
-rw-r--r--toolkit/source/controls/grid/gridcolumn.hxx85
-rw-r--r--toolkit/source/controls/grid/gridcontrol.cxx273
-rw-r--r--toolkit/source/controls/grid/gridcontrol.hxx124
-rw-r--r--toolkit/source/controls/grid/makefile.mk54
-rw-r--r--toolkit/source/controls/tkspinbutton.cxx1
-rw-r--r--toolkit/source/controls/tree/treecontrol.cxx1
-rw-r--r--toolkit/source/controls/unocontrol.cxx7
-rw-r--r--toolkit/source/controls/unocontrolmodel.cxx4
-rw-r--r--toolkit/source/controls/unocontrols.cxx4
-rw-r--r--toolkit/source/helper/property.cxx14
-rw-r--r--toolkit/source/helper/registerservices.cxx17
-rw-r--r--toolkit/source/helper/servicenames.cxx6
-rw-r--r--toolkit/source/helper/unowrapper.cxx8
-rw-r--r--toolkit/source/helper/vclunohelper.cxx8
-rw-r--r--toolkit/util/makefile.mk1
-rw-r--r--toolkit/util/toolkit.xml46
-rw-r--r--tools/bootstrp/md5.cxx64
-rw-r--r--tools/inc/tools/poly.hxx1
-rw-r--r--tools/source/fsys/urlobj.cxx9
-rw-r--r--tools/source/generic/makefile.mk4
-rw-r--r--tools/source/generic/poly2.cxx114
-rw-r--r--tools/util/makefile.mk7
-rw-r--r--tools/workben/solar.c2
-rw-r--r--tools/workben/urltest.cxx19
-rwxr-xr-xtransex3/scripts/localize20
-rwxr-xr-xtransex3/scripts/localize.pl16
-rw-r--r--transex3/source/localize.cxx46
-rw-r--r--unotools/inc/unotools/confignode.hxx2
-rw-r--r--unotools/source/config/confignode.cxx5
-rwxr-xr-xvcl/aqua/inc/salframeview.h1
-rwxr-xr-xvcl/aqua/inc/vclnsapp.h1
-rw-r--r--vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm2
-rw-r--r--vcl/aqua/source/a11y/aqua11yutil.mm2
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapper.mm8
-rw-r--r--vcl/aqua/source/app/saldata.cxx2
-rw-r--r--vcl/aqua/source/app/salinst.cxx16
-rw-r--r--vcl/aqua/source/app/salsys.cxx8
-rwxr-xr-xvcl/aqua/source/app/vclnsapp.mm73
-rwxr-xr-xvcl/aqua/source/gdi/aquaprintview.mm5
-rwxr-xr-xvcl/aqua/source/gdi/salatslayout.cxx9
-rw-r--r--vcl/aqua/source/gdi/salatsuifontutils.cxx15
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx127
-rwxr-xr-xvcl/aqua/source/gdi/salgdiutils.cxx9
-rw-r--r--vcl/aqua/source/gdi/salnativewidgets.cxx8
-rw-r--r--vcl/aqua/source/gdi/salprn.cxx23
-rw-r--r--vcl/aqua/source/gdi/salvd.cxx4
-rw-r--r--vcl/aqua/source/window/salframe.cxx26
-rwxr-xr-xvcl/aqua/source/window/salframeview.mm22
-rw-r--r--vcl/aqua/source/window/salmenu.cxx12
-rw-r--r--vcl/inc/list.h5
-rw-r--r--vcl/inc/sft.h641
-rw-r--r--vcl/inc/sft.hxx28
-rw-r--r--vcl/inc/vcl/fontmanager.hxx14
-rw-r--r--vcl/inc/vcl/fontsubset.hxx97
-rw-r--r--vcl/inc/vcl/gdimtf.hxx8
-rw-r--r--vcl/inc/vcl/glyphcache.hxx3
-rw-r--r--vcl/inc/vcl/graph.hxx46
-rw-r--r--vcl/inc/vcl/graphite_adaptors.hxx154
-rw-r--r--vcl/inc/vcl/graphite_cache.hxx265
-rw-r--r--vcl/inc/vcl/graphite_features.hxx77
-rw-r--r--vcl/inc/vcl/graphite_layout.hxx167
-rw-r--r--vcl/inc/vcl/graphite_serverfont.hxx103
-rw-r--r--vcl/inc/vcl/impfont.hxx44
-rw-r--r--vcl/inc/vcl/impgraph.hxx5
-rw-r--r--vcl/inc/vcl/outdev.hxx24
-rw-r--r--vcl/inc/vcl/outfont.hxx17
-rw-r--r--vcl/inc/vcl/printergfx.hxx8
-rw-r--r--vcl/inc/vcl/salgdi.hxx2
-rwxr-xr-xvcl/inc/vcl/sallayout.hxx3
-rw-r--r--vcl/inc/vcl/settings.hxx14
-rw-r--r--vcl/inc/vcl/sndstyle.hxx2
-rw-r--r--vcl/inc/vcl/vclevent.hxx4
-rw-r--r--vcl/prj/build.lst5
-rw-r--r--vcl/source/app/dbggui.cxx2
-rw-r--r--vcl/source/app/settings.cxx6
-rw-r--r--vcl/source/control/combobox.cxx39
-rw-r--r--vcl/source/control/lstbox.cxx77
-rw-r--r--vcl/source/control/spinfld.cxx7
-rw-r--r--vcl/source/fontsubset/cff.cxx2418
-rw-r--r--vcl/source/fontsubset/fontsubset.cxx185
-rw-r--r--vcl/source/fontsubset/makefile.mk2
-rw-r--r--vcl/source/fontsubset/sft.cxx198
-rw-r--r--vcl/source/fontsubset/ttcr.cxx19
-rw-r--r--vcl/source/fontsubset/ttcr.hxx6
-rw-r--r--vcl/source/fontsubset/u2big5.inc1756
-rw-r--r--vcl/source/fontsubset/u2johab.inc2174
-rw-r--r--vcl/source/fontsubset/u2prc.inc3036
-rw-r--r--vcl/source/fontsubset/u2shiftjis.inc967
-rw-r--r--vcl/source/fontsubset/u2wansung.inc1071
-rw-r--r--vcl/source/fontsubset/xlat.cxx247
-rw-r--r--vcl/source/fontsubset/xlat.hxx2
-rw-r--r--vcl/source/gdi/gdimtf.cxx430
-rw-r--r--vcl/source/gdi/graph.cxx40
-rw-r--r--vcl/source/gdi/impgraph.cxx38
-rw-r--r--vcl/source/gdi/impimagetree.cxx11
-rw-r--r--vcl/source/gdi/makefile.mk4
-rw-r--r--vcl/source/gdi/metric.cxx194
-rw-r--r--vcl/source/gdi/outdev.cxx312
-rw-r--r--vcl/source/gdi/outdev3.cxx91
-rw-r--r--vcl/source/gdi/outdev6.cxx158
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx160
-rw-r--r--vcl/source/gdi/pdfwriter_impl.hxx5
-rwxr-xr-xvcl/source/gdi/sallayout.cxx140
-rw-r--r--vcl/source/glyphs/gcach_ftyp.cxx122
-rw-r--r--vcl/source/glyphs/gcach_ftyp.hxx5
-rwxr-xr-xvcl/source/glyphs/gcach_layout.cxx3
-rwxr-xr-xvcl/source/glyphs/gcach_rbmp.cxx3
-rw-r--r--vcl/source/glyphs/gcach_vdev.cxx3
-rw-r--r--vcl/source/glyphs/gcach_vdev.hxx3
-rw-r--r--vcl/source/glyphs/glyphcache.cxx29
-rw-r--r--vcl/source/glyphs/graphite_adaptors.cxx327
-rw-r--r--vcl/source/glyphs/graphite_cache.cxx198
-rw-r--r--vcl/source/glyphs/graphite_features.cxx289
-rw-r--r--vcl/source/glyphs/graphite_layout.cxx1367
-rw-r--r--vcl/source/glyphs/graphite_serverfont.cxx88
-rw-r--r--vcl/source/glyphs/graphite_textsrc.cxx172
-rw-r--r--vcl/source/glyphs/graphite_textsrc.hxx131
-rw-r--r--vcl/source/glyphs/makefile.mk25
-rw-r--r--vcl/source/window/dlgctrl.cxx65
-rw-r--r--vcl/source/window/menu.cxx13
-rw-r--r--vcl/source/window/tabpage.cxx2
-rw-r--r--vcl/source/window/taskpanelist.cxx28
-rw-r--r--vcl/source/window/window.cxx27
-rw-r--r--vcl/unx/gtk/a11y/atklistener.cxx26
-rw-r--r--vcl/unx/gtk/a11y/atktext.cxx11
-rw-r--r--vcl/unx/gtk/a11y/atkutil.cxx31
-rw-r--r--vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx4
-rw-r--r--vcl/unx/gtk/window/gtkframe.cxx2
-rw-r--r--vcl/unx/headless/svpgdi.cxx6
-rw-r--r--vcl/unx/headless/svpprn.cxx6
-rw-r--r--vcl/unx/headless/svppspgraphics.cxx81
-rw-r--r--vcl/unx/headless/svppspgraphics.hxx7
-rw-r--r--vcl/unx/headless/svptext.cxx35
-rw-r--r--vcl/unx/headless/svpvd.cxx5
-rw-r--r--vcl/unx/inc/pspgraphics.h10
-rw-r--r--vcl/unx/inc/salgdi.h2
-rw-r--r--vcl/unx/kde/kdedata.cxx5
-rw-r--r--vcl/unx/kde4/KDEData.cxx52
-rw-r--r--vcl/unx/kde4/KDEData.hxx42
-rw-r--r--vcl/unx/kde4/KDESalDisplay.cxx45
-rw-r--r--vcl/unx/kde4/KDESalDisplay.hxx37
-rw-r--r--vcl/unx/kde4/KDESalFrame.cxx409
-rw-r--r--vcl/unx/kde4/KDESalFrame.hxx58
-rw-r--r--vcl/unx/kde4/KDESalGraphics.cxx819
-rw-r--r--vcl/unx/kde4/KDESalGraphics.hxx114
-rw-r--r--vcl/unx/kde4/KDESalInstance.cxx35
-rw-r--r--vcl/unx/kde4/KDESalInstance.hxx41
-rw-r--r--vcl/unx/kde4/KDEXLib.cxx171
-rw-r--r--vcl/unx/kde4/KDEXLib.hxx48
-rw-r--r--vcl/unx/kde4/VCLKDEApplication.cxx52
-rw-r--r--vcl/unx/kde4/VCLKDEApplication.hxx53
-rw-r--r--vcl/unx/kde4/main.cxx83
-rw-r--r--vcl/unx/kde4/makefile.mk92
-rw-r--r--vcl/unx/source/fontmanager/fontcache.cxx3
-rw-r--r--vcl/unx/source/fontmanager/fontmanager.cxx108
-rw-r--r--vcl/unx/source/gdi/makefile.mk4
-rw-r--r--vcl/unx/source/gdi/pspgraphics.cxx136
-rw-r--r--vcl/unx/source/gdi/salgdi.cxx3092
-rw-r--r--vcl/unx/source/gdi/salgdi3.cxx69
-rw-r--r--vcl/unx/source/plugadapt/salplug.cxx133
-rw-r--r--vcl/unx/source/printergfx/glyphset.cxx51
-rw-r--r--vcl/unx/source/printergfx/text_gfx.cxx14
-rw-r--r--vcl/unx/source/window/salframe.cxx28
-rw-r--r--vcl/util/makefile.mk61
-rw-r--r--vcl/win/inc/salgdi.h6
-rw-r--r--vcl/win/source/gdi/MAKEFILE.MK4
-rw-r--r--vcl/win/source/gdi/salgdi3.cxx127
-rw-r--r--vcl/win/source/gdi/salgdi_gdiplus.cxx162
-rwxr-xr-xvcl/win/source/gdi/winlayout.cxx307
-rw-r--r--vcl/win/source/window/MAKEFILE.MK4
-rw-r--r--vcl/win/source/window/salframe.cxx10
-rw-r--r--vcl/workben/makefile.mk1
-rw-r--r--vcl/workben/svpclient.cxx47
292 files changed, 22287 insertions, 13551 deletions
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx
index 9474e51e3904..12532ff078f3 100644
--- a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx
@@ -104,6 +104,15 @@ namespace basegfx
// DIFF: Return all areas where CandidateA is not covered by CandidateB (cut B out of A)
B2DPolyPolygon solvePolygonOperationDiff(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+ /** merge all single PolyPolygons to a single, OR-ed PolyPolygon
+
+ @param rInput
+ The source PolyPolygons
+
+ @return A single PolyPolygon containing the Or-merged result
+ */
+ B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput);
+
} // end of namespace tools
} // end of namespace basegfx
diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
index 5c75edd7f262..c4687b3cfc5f 100644
--- a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
+++ b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
@@ -262,6 +262,20 @@ namespace basegfx
bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB, const double& rfSmallValue);
bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB);
+ /** snap some polygon coordinates to discrete coordinates
+
+ This method allows to snap some polygon points to discrete (integer) values
+ which equals e.g. a snap to discrete coordinates. It will snap points of
+ horizontal and vertical edges
+
+ @param rCandidate
+ The source polygon
+
+ @return
+ The modified version of the source polygon
+ */
+ B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate);
+
} // end of namespace tools
} // end of namespace basegfx
diff --git a/basegfx/source/curve/b2dcubicbezier.cxx b/basegfx/source/curve/b2dcubicbezier.cxx
index 76d1b74ddbca..e7247a95333b 100644
--- a/basegfx/source/curve/b2dcubicbezier.cxx
+++ b/basegfx/source/curve/b2dcubicbezier.cxx
@@ -443,21 +443,32 @@ namespace basegfx
bool bAIsTrivial(aVecA.equalZero());
bool bBIsTrivial(aVecB.equalZero());
+ // #i102241# prepare inverse edge length to normalize cross values;
+ // else the small compare value used in fTools::equalZero
+ // will be length dependent and this detection will work as less
+ // precise as longer the edge is. In principle, the length of the control
+ // vector would need to be used too, but to be trivial it is assumed to
+ // be of roughly equal length to the edge, so edge length can be used
+ // for both. Only needed when one of both is not trivial per se.
+ const double fInverseEdgeLength(bAIsTrivial && bBIsTrivial
+ ? 1.0
+ : 1.0 / aEdge.getLength());
+
// if A is not zero, check if it could be
if(!bAIsTrivial)
{
- // parallel to edge? Check aVecA, aEdge
- // B2DVector::areParallel is too correct, uses differences in the e15 region,
- // thus do own test here
- const double fValA(aVecA.getX() * aEdge.getY());
- const double fValB(aVecA.getY() * aEdge.getX());
+ // #i102241# parallel to edge? Check aVecA, aEdge. Use cross() which does what
+ // we need here with the precision we need
+ const double fCross(aVecA.cross(aEdge) * fInverseEdgeLength);
- if(fTools::equalZero(fabs(fValA) - fabs(fValB)))
+ if(fTools::equalZero(fCross))
{
// get scale to edge. Use bigger distance for numeric quality
- const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) ? aVecA.getX() / aEdge.getX() : aVecA.getY() / aEdge.getY());
+ const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY())
+ ? aVecA.getX() / aEdge.getX()
+ : aVecA.getY() / aEdge.getY());
- // end point of vector in edge range?
+ // relative end point of vector in edge range?
if(fTools::moreOrEqual(fScale, 0.0) && fTools::lessOrEqual(fScale, 1.0))
{
bAIsTrivial = true;
@@ -470,13 +481,14 @@ namespace basegfx
if(bAIsTrivial && !bBIsTrivial)
{
// parallel to edge? Check aVecB, aEdge
- const double fValA(aVecB.getX() * aEdge.getY());
- const double fValB(aVecB.getY() * aEdge.getX());
+ const double fCross(aVecB.cross(aEdge) * fInverseEdgeLength);
- if(fTools::equalZero(fabs(fValA) - fabs(fValB)))
+ if(fTools::equalZero(fCross))
{
// get scale to edge. Use bigger distance for numeric quality
- const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY()) ? aVecB.getX() / aEdge.getX() : aVecB.getY() / aEdge.getY());
+ const double fScale(fabs(aEdge.getX()) > fabs(aEdge.getY())
+ ? aVecB.getX() / aEdge.getX()
+ : aVecB.getY() / aEdge.getY());
// end point of vector in edge range? Caution: controlB is directed AGAINST edge
if(fTools::lessOrEqual(fScale, 0.0) && fTools::moreOrEqual(fScale, -1.0))
diff --git a/basegfx/source/polygon/b2dlinegeometry.cxx b/basegfx/source/polygon/b2dlinegeometry.cxx
index 0cda1036e13b..1a9264ab769e 100644
--- a/basegfx/source/polygon/b2dlinegeometry.cxx
+++ b/basegfx/source/polygon/b2dlinegeometry.cxx
@@ -352,13 +352,12 @@ namespace basegfx
// Unfortunately, while it would be geometrically correct to not add
// the in-between points EdgeEnd and EdgeStart, it leads to rounding
// errors when converting to integer polygon coordinates for painting
- const B2DVector aEdgeVector(rEdge.getEndPoint() - rEdge.getStartPoint());
-
if(rEdge.isBezier())
{
// prepare target and data common for upper and lower
B2DPolygon aBezierPolygon;
- const double fEdgeLength(aEdgeVector.getLength());
+ const B2DVector aPureEdgeVector(rEdge.getEndPoint() - rEdge.getStartPoint());
+ const double fEdgeLength(aPureEdgeVector.getLength());
const bool bIsEdgeLengthZero(fTools::equalZero(fEdgeLength));
const B2DVector aTangentA(rEdge.getTangent(0.0));
const B2DVector aTangentB(rEdge.getTangent(1.0));
@@ -441,7 +440,11 @@ namespace basegfx
}
else
{
- const B2DVector aPerpendEdgeVector(getNormalizedPerpendicular(aEdgeVector) * fHalfLineWidth);
+ // #i101491# emulate rEdge.getTangent call which applies a factor of 0.3 to the
+ // full-length edge vector to have numerically exactly the same results as in the
+ // createAreaGeometryForJoin implementation
+ const B2DVector aEdgeTangent((rEdge.getEndPoint() - rEdge.getStartPoint()) * 0.3);
+ const B2DVector aPerpendEdgeVector(getNormalizedPerpendicular(aEdgeTangent) * fHalfLineWidth);
B2DPolygon aEdgePolygon;
// create upper edge
@@ -495,45 +498,75 @@ namespace basegfx
}
}
- // create first polygon part for edge
- aEdgePolygon.append(aEndPoint);
- aEdgePolygon.append(rPoint);
- aEdgePolygon.append(aStartPoint);
-
- if(B2DLINEJOIN_MITER == eJoin)
+ switch(eJoin)
{
- // Look for the cut point between start point along rTangentPrev and
- // end point along rTangentEdge. -rTangentEdge should be used, but since
- // the cut value is used for interpolating along the first edge, the negation
- // is not needed since the same fCut will be found on the first edge.
- // If it exists, insert it to complete the mitered fill polygon.
- double fCutPos(0.0);
- tools::findCut(aStartPoint, rTangentPrev, aEndPoint, rTangentEdge, CUTFLAG_ALL, &fCutPos);
-
- if(0.0 != fCutPos)
+ case B2DLINEJOIN_MITER :
{
- const B2DPoint aCutPoint(interpolate(aStartPoint, aStartPoint + rTangentPrev, fCutPos));
- aEdgePolygon.append(aCutPoint);
- }
- }
- else if(B2DLINEJOIN_ROUND == eJoin)
- {
- // use tooling to add needed EllipseSegment
- double fAngleStart(atan2(rPerpendPrev.getY(), rPerpendPrev.getX()));
- double fAngleEnd(atan2(rPerpendEdge.getY(), rPerpendEdge.getX()));
+ aEdgePolygon.append(aEndPoint);
+ aEdgePolygon.append(rPoint);
+ aEdgePolygon.append(aStartPoint);
+
+ // Look for the cut point between start point along rTangentPrev and
+ // end point along rTangentEdge. -rTangentEdge should be used, but since
+ // the cut value is used for interpolating along the first edge, the negation
+ // is not needed since the same fCut will be found on the first edge.
+ // If it exists, insert it to complete the mitered fill polygon.
+ double fCutPos(0.0);
+ tools::findCut(aStartPoint, rTangentPrev, aEndPoint, rTangentEdge, CUTFLAG_ALL, &fCutPos);
+
+ if(0.0 != fCutPos)
+ {
+ const B2DPoint aCutPoint(interpolate(aStartPoint, aStartPoint + rTangentPrev, fCutPos));
+ aEdgePolygon.append(aCutPoint);
+ }
- // atan2 results are [-PI .. PI], consolidate to [0.0 .. 2PI]
- if(fAngleStart < 0.0)
- {
- fAngleStart += F_2PI;
+ break;
}
-
- if(fAngleEnd < 0.0)
+ case B2DLINEJOIN_ROUND :
{
- fAngleEnd += F_2PI;
+ // use tooling to add needed EllipseSegment
+ double fAngleStart(atan2(rPerpendPrev.getY(), rPerpendPrev.getX()));
+ double fAngleEnd(atan2(rPerpendEdge.getY(), rPerpendEdge.getX()));
+
+ // atan2 results are [-PI .. PI], consolidate to [0.0 .. 2PI]
+ if(fAngleStart < 0.0)
+ {
+ fAngleStart += F_2PI;
+ }
+
+ if(fAngleEnd < 0.0)
+ {
+ fAngleEnd += F_2PI;
+ }
+
+ const B2DPolygon aBow(tools::createPolygonFromEllipseSegment(rPoint, fHalfLineWidth, fHalfLineWidth, fAngleStart, fAngleEnd));
+
+ if(aBow.count() > 1)
+ {
+ // #i101491#
+ // use the original start/end positions; the ones from bow creation may be numerically
+ // different due to their different creation. To guarantee good merging quality with edges
+ // and edge roundings (and to reduce point count)
+ aEdgePolygon = aBow;
+ aEdgePolygon.setB2DPoint(0, aStartPoint);
+ aEdgePolygon.setB2DPoint(aEdgePolygon.count() - 1, aEndPoint);
+ aEdgePolygon.append(rPoint);
+
+ break;
+ }
+ else
+ {
+ // wanted fall-through to default
+ }
}
+ default: // B2DLINEJOIN_BEVEL
+ {
+ aEdgePolygon.append(aEndPoint);
+ aEdgePolygon.append(rPoint);
+ aEdgePolygon.append(aStartPoint);
- aEdgePolygon.append(tools::createPolygonFromEllipseSegment(rPoint, fHalfLineWidth, fHalfLineWidth, fAngleStart, fAngleEnd));
+ break;
+ }
}
// create last polygon part for edge
diff --git a/basegfx/source/polygon/b2dpolygoncutandtouch.cxx b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx
index a1b7a69775ad..26016942717d 100644
--- a/basegfx/source/polygon/b2dpolygoncutandtouch.cxx
+++ b/basegfx/source/polygon/b2dpolygoncutandtouch.cxx
@@ -110,7 +110,10 @@ namespace basegfx
{
// #i76891# mergeTemporaryPointsAndPolygon redesigned to be able to correctly handle
// single edges with/without control points
- if(rTempPoints.size())
+ // #i101491# added counter for non-changing element count
+ const sal_uInt32 nTempPointCount(rTempPoints.size());
+
+ if(nTempPointCount)
{
B2DPolygon aRetval;
const sal_uInt32 nCount(rCandidate.count());
@@ -138,7 +141,7 @@ namespace basegfx
double fLeftStart(0.0);
// now add all points targeted to be at this index
- while(nNewInd < rTempPoints.size() && rTempPoints[nNewInd].getIndex() == a)
+ while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a)
{
const temporaryPoint& rTempPoint = rTempPoints[nNewInd++];
@@ -160,7 +163,7 @@ namespace basegfx
else
{
// add all points targeted to be at this index
- while(nNewInd < rTempPoints.size() && rTempPoints[nNewInd].getIndex() == a)
+ while(nNewInd < nTempPointCount && rTempPoints[nNewInd].getIndex() == a)
{
const temporaryPoint& rTempPoint = rTempPoints[nNewInd++];
const B2DPoint aNewPoint(rTempPoint.getPoint());
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index b06e6fbafff7..0674bfe3953e 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -929,6 +929,85 @@ namespace basegfx
}
}
+ B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput)
+ {
+ std::vector< basegfx::B2DPolyPolygon > aInput(rInput);
+
+ // first step: prepareForPolygonOperation and simple merge of non-overlapping
+ // PolyPolygons for speedup; this is possible for the wanted OR-operation
+ if(aInput.size())
+ {
+ std::vector< basegfx::B2DPolyPolygon > aResult;
+ aResult.reserve(aInput.size());
+
+ for(sal_uInt32 a(0); a < aInput.size(); a++)
+ {
+ const basegfx::B2DPolyPolygon aCandidate(prepareForPolygonOperation(aInput[a]));
+
+ if(aResult.size())
+ {
+ const B2DRange aCandidateRange(aCandidate.getB2DRange());
+ bool bCouldMergeSimple(false);
+
+ for(sal_uInt32 b(0); !bCouldMergeSimple && b < aResult.size(); b++)
+ {
+ basegfx::B2DPolyPolygon aTarget(aResult[b]);
+ const B2DRange aTargetRange(aTarget.getB2DRange());
+
+ if(!aCandidateRange.overlaps(aTargetRange))
+ {
+ aTarget.append(aCandidate);
+ aResult[b] = aTarget;
+ bCouldMergeSimple = true;
+ }
+ }
+
+ if(!bCouldMergeSimple)
+ {
+ aResult.push_back(aCandidate);
+ }
+ }
+ else
+ {
+ aResult.push_back(aCandidate);
+ }
+ }
+
+ aInput = aResult;
+ }
+
+ // second step: melt pairwise to a single PolyPolygon
+ while(aInput.size() > 1)
+ {
+ std::vector< basegfx::B2DPolyPolygon > aResult;
+ aResult.reserve((aInput.size() / 2) + 1);
+
+ for(sal_uInt32 a(0); a < aInput.size(); a += 2)
+ {
+ if(a + 1 < aInput.size())
+ {
+ // a pair for processing
+ aResult.push_back(solvePolygonOperationOr(aInput[a], aInput[a + 1]));
+ }
+ else
+ {
+ // last single PolyPolygon; copy to target to not lose it
+ aResult.push_back(aInput[a]);
+ }
+ }
+
+ aInput = aResult;
+ }
+
+ // third step: get result
+ if(1 == aInput.size())
+ {
+ return aInput[0];
+ }
+
+ return B2DPolyPolygon();
+ }
+
//////////////////////////////////////////////////////////////////////////////
} // end of namespace tools
diff --git a/basegfx/source/polygon/b2dpolypolygontools.cxx b/basegfx/source/polygon/b2dpolypolygontools.cxx
index c92f2f29147b..e6b3a448530d 100644
--- a/basegfx/source/polygon/b2dpolypolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolypolygontools.cxx
@@ -569,6 +569,18 @@ namespace basegfx
return equal(rCandidateA, rCandidateB, fSmallValue);
}
+ B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate)
+ {
+ B2DPolyPolygon aRetval;
+
+ for(sal_uInt32 a(0L); a < rCandidate.count(); a++)
+ {
+ aRetval.append(snapPointsOfHorizontalOrVerticalEdges(rCandidate.getB2DPolygon(a)));
+ }
+
+ return aRetval;
+ }
+
} // end of namespace tools
} // end of namespace basegfx
diff --git a/canvas/source/cairo/cairo_canvasfont.cxx b/canvas/source/cairo/cairo_canvasfont.cxx
index 3ef5db762c60..c6fa0847e660 100644
--- a/canvas/source/cairo/cairo_canvasfont.cxx
+++ b/canvas/source/cairo/cairo_canvasfont.cxx
@@ -37,6 +37,7 @@
#include <basegfx/numeric/ftools.hxx>
#include <vcl/metric.hxx>
+#include <i18npool/mslangid.hxx>
#include "cairo_canvasfont.hxx"
#include "cairo_textlayout.hxx"
@@ -86,6 +87,8 @@ namespace cairocanvas
maFont->SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// adjust to stretched/shrinked font
if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) )
{
diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx
index f1c54e9b4ab7..9cf2dd978759 100644
--- a/canvas/source/cairo/cairo_canvashelper.cxx
+++ b/canvas/source/cairo/cairo_canvashelper.cxx
@@ -888,7 +888,7 @@ namespace cairocanvas
nY = aP.getY();
cairo_matrix_transform_point( &aOrigMatrix, &nX, &nY );
- if( ! bIsBezier && bIsRectangle ) {
+ if( ! bIsBezier && (bIsRectangle || aOperation == Clip) ) {
nX = basegfx::fround( nX );
nY = basegfx::fround( nY );
}
diff --git a/canvas/source/cairo/makefile.mk b/canvas/source/cairo/makefile.mk
index bd54254abf7e..2ab726da3464 100644
--- a/canvas/source/cairo/makefile.mk
+++ b/canvas/source/cairo/makefile.mk
@@ -84,7 +84,7 @@ SLOFILES = $(SLO)$/cairo_cachedbitmap.obj \
SHL1TARGET=$(TARGET).uno
-SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB)
+SHL1STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(TOOLSLIB) $(I18NISOLANGLIB)
.IF "$(GUI)"=="UNX"
diff --git a/canvas/source/directx/dx_textlayout_drawhelper.cxx b/canvas/source/directx/dx_textlayout_drawhelper.cxx
index f44d8aa4a518..358bd1e9d74f 100755
--- a/canvas/source/directx/dx_textlayout_drawhelper.cxx
+++ b/canvas/source/directx/dx_textlayout_drawhelper.cxx
@@ -52,6 +52,7 @@
#include <canvas/debug.hxx>
#include "dx_impltools.hxx"
#include <vcl/sysdata.hxx>
+#include <i18npool/mslangid.hxx>
#include "dx_textlayout_drawhelper.hxx"
#include "dx_bitmap.hxx"
#include "dx_canvasfont.hxx"
@@ -135,6 +136,8 @@ namespace dxcanvas
aFont.SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
aFont.SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ aFont.SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// setup font color
aFont.SetColor( aColor );
aFont.SetFillColor( aColor );
diff --git a/canvas/source/directx/makefile.mk b/canvas/source/directx/makefile.mk
index c1d210dfcf64..1a9db2ec51c0 100644
--- a/canvas/source/directx/makefile.mk
+++ b/canvas/source/directx/makefile.mk
@@ -96,7 +96,7 @@ GDIPLUS_SLOFILES = \
$(SLO)$/dx_canvas.obj
GDIPLUS_SLOFILES += $(SHARED_SLOFILES)
-STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB)
+STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB)
########################################################
@@ -194,7 +194,7 @@ LIB3OBJFILES = $(GDIPLUS_SLOFILES)
SHL3TARGET=$(TARGET3).uno
# Links import libraries.
-SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB)
+SHL3STDLIBS= $(CPPULIB) $(TKLIB) $(SALLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(VCLLIB) $(TOOLSLIB) $(UNOTOOLSLIB) $(I18NISOLANGLIB)
# Specifies an import library to create. For Win32 only.
SHL3IMPLIB=i$(TARGET3).lib
diff --git a/canvas/source/vcl/canvasfont.cxx b/canvas/source/vcl/canvasfont.cxx
index 9fb69875ecde..b049e1e4f317 100644
--- a/canvas/source/vcl/canvasfont.cxx
+++ b/canvas/source/vcl/canvasfont.cxx
@@ -35,7 +35,7 @@
#include <rtl/math.hxx>
#include <basegfx/numeric/ftools.hxx>
-
+#include <i18npool/mslangid.hxx>
#include <vcl/metric.hxx>
#include "canvasfont.hxx"
@@ -67,6 +67,8 @@ namespace vclcanvas
maFont->SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
+ maFont->SetLanguage(MsLangId::convertLocaleToLanguage(rFontRequest.Locale));
+
// adjust to stretched/shrinked font
if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) )
{
diff --git a/canvas/source/vcl/makefile.mk b/canvas/source/vcl/makefile.mk
index 781cd58d8b91..fdfdd62d16b8 100644
--- a/canvas/source/vcl/makefile.mk
+++ b/canvas/source/vcl/makefile.mk
@@ -73,7 +73,7 @@ SLOFILES = $(SLO)$/backbuffer.obj \
SHL1TARGET=$(TARGET).uno
-SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB)
+SHL1STDLIBS= $(TOOLSLIB) $(TKLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(CANVASTOOLSLIB) $(GOODIESLIB) $(I18NISOLANGLIB)
SHL1IMPLIB=i$(TARGET)
SHL1LIBS=$(SLB)$/$(TARGET).lib
diff --git a/comphelper/inc/comphelper/processfactory.hxx b/comphelper/inc/comphelper/processfactory.hxx
index d2ae887ba341..9b24f8e784ac 100644
--- a/comphelper/inc/comphelper/processfactory.hxx
+++ b/comphelper/inc/comphelper/processfactory.hxx
@@ -79,10 +79,19 @@ COMPHELPER_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XI
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rArgs
) SAL_THROW( ( ::com::sun::star::uno::RuntimeException ) );
+/**
+ * This function gets the process service factory's default component context.
+ * If no service factory is set the function returns a null interface.
+ */
+COMPHELPER_DLLPUBLIC
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >
+getProcessComponentContext();
+
}
+
extern "C" {
-/// @internal
+/// @internal ATTENTION returns ACQUIRED pointer! release it explicitly!
COMPHELPER_DLLPUBLIC
::com::sun::star::uno::XComponentContext *
comphelper_getProcessComponentContext();
diff --git a/comphelper/inc/comphelper/stl_types.hxx b/comphelper/inc/comphelper/stl_types.hxx
index aeb6342048c9..4b3126043a08 100644
--- a/comphelper/inc/comphelper/stl_types.hxx
+++ b/comphelper/inc/comphelper/stl_types.hxx
@@ -49,6 +49,7 @@
#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
@@ -192,6 +193,59 @@ inline mem_fun1_t<_Tp,_Arg> mem_fun(void (_Tp::*__f)(_Arg))
}
//.........................................................................
+/** output iterator that appends OUStrings into an OUStringBuffer.
+ */
+class OUStringBufferAppender :
+ public ::std::iterator< ::std::output_iterator_tag, void, void, void, void>
+{
+public:
+ typedef OUStringBufferAppender Self;
+ typedef ::std::output_iterator_tag iterator_category;
+ typedef void value_type;
+ typedef void reference;
+ typedef void pointer;
+ typedef size_t difference_type;
+
+ OUStringBufferAppender(::rtl::OUStringBuffer & i_rBuffer)
+ : m_rBuffer(i_rBuffer) { }
+ Self & operator=(::rtl::OUString const & i_rStr)
+ {
+ m_rBuffer.append( i_rStr );
+ return *this;
+ }
+ Self & operator*() { return *this; } // so operator= works
+ Self & operator++() { return *this; }
+ Self & operator++(int) { return *this; }
+
+private:
+ ::rtl::OUStringBuffer & m_rBuffer;
+};
+
+//.........................................................................
+/** algorithm similar to std::copy, but inserts a separator between elements.
+ */
+template< typename ForwardIter, typename OutputIter, typename T >
+OutputIter intersperse(
+ ForwardIter start, ForwardIter end, OutputIter out, T const & separator)
+{
+ if (start != end) {
+ *out = *start;
+ ++start;
+ ++out;
+ }
+
+ while (start != end) {
+ *out = separator;
+ ++out;
+ *out = *start;
+ ++start;
+ ++out;
+ }
+
+ return out;
+}
+
+//.........................................................................
}
//... namespace comphelper ................................................
diff --git a/comphelper/inc/comphelper/stlunosequence.hxx b/comphelper/inc/comphelper/stlunosequence.hxx
index 2ffe08cb6b75..c9bc525cabd6 100644
--- a/comphelper/inc/comphelper/stlunosequence.hxx
+++ b/comphelper/inc/comphelper/stlunosequence.hxx
@@ -5,9 +5,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: stlunosequence.hxx,v $
+ * $RCSfile: $
*
- * $Revision: 1.3 $
+ * $Revision: $
*
* This file is part of OpenOffice.org.
*
@@ -31,457 +31,59 @@
#define _COMPHELPER_STLUNOITERATOR_HXX
#include <com/sun/star/uno/Sequence.hxx>
-#include <iterator>
#include <sal/types.h>
-namespace comphelper { namespace stlunosequence {
- template<typename S, typename V>
- class StlSequence;
-
- template<typename S, typename V>
- class StlSequenceIterator : public std::iterator<std::random_access_iterator_tag, V, sal_Int32>
- {
- public:
- typedef ::std::random_access_iterator_tag iterator_category;
- typedef V& reference;
- typedef V value_type;
- typedef sal_Int32 difference_type;
- typedef V* pointer;
- typedef const V& const_reference;
-
- StlSequenceIterator();
- StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index);
-
- reference operator*() const;
- StlSequenceIterator<S,V>& operator++();
- StlSequenceIterator<S,V> operator++(int);
- StlSequenceIterator<S,V>& operator--();
- StlSequenceIterator<S,V> operator--(int);
- StlSequenceIterator<S,V>& operator+=(const typename StlSequenceIterator<S,V>::difference_type by);
- StlSequenceIterator<S,V>& operator-=(const typename StlSequenceIterator<S,V>::difference_type by);
- StlSequenceIterator<S,V> operator+(const typename StlSequenceIterator<S,V>::difference_type by) const;
- StlSequenceIterator<S,V> operator-(const typename StlSequenceIterator<S,V>::difference_type by) const;
- typename StlSequenceIterator<S,V>::difference_type operator-(const StlSequenceIterator<S,V>& to) const;
-
- bool operator==(const StlSequenceIterator<S,V>& other) const;
- bool operator!=(const StlSequenceIterator<S,V>& other) const;
- bool operator<(const StlSequenceIterator<S,V>& other) const;
- reference operator[](const typename StlSequenceIterator<S,V>::difference_type by) const;
-
-
- protected:
- friend class StlSequence<S,V>;
- S * m_UnoSequence;
- typename StlSequenceIterator<S,V>::difference_type m_Index;
- };
-
- template<typename S, typename V>
- class StlSequenceConstIterator : public StlSequenceIterator<S,V>
- {
- public:
- typedef const V& reference;
- StlSequenceConstIterator();
- StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type by);
- typename StlSequenceIterator<S,V>::const_reference operator*() const
- {
- return (*(this->m_UnoSequence))[this->m_Index];
- }
-
- typename StlSequenceIterator<S,V>::const_reference operator[](const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- return (*(this->m_UnoSequence))[this->m_Index+by];
- }
- };
-
- template<typename S, typename V>
- class StlSequence
- {
- public:
- typedef sal_Int32 size_type;
- typedef V& reference;
- typedef const V& const_reference;
- typedef sal_Int32 difference_type;
- typedef V value_type;
- typedef StlSequenceIterator<S,V> iterator;
- typedef StlSequenceConstIterator<S,V> const_iterator;
-
- StlSequence(S& uno_sequence);
-
- typename StlSequence<S,V>::size_type size() const;
- typename StlSequence<S,V>::size_type max_size() const;
- bool empty() const;
- void swap(StlSequence<S,V>& other);
- typename StlSequence<S,V>::iterator begin();
- typename StlSequence<S,V>::iterator end();
- typename StlSequence<S,V>::const_iterator begin() const;
- typename StlSequence<S,V>::const_iterator end() const;
-
- bool operator==(const StlSequence<S,V>& other) const;
- bool operator!=(const StlSequence<S,V>& other) const;
- bool operator<(const StlSequence<S,V>& other) const;
- bool operator>(const StlSequence<S,V>& other) const;
- bool operator<=(const StlSequence<S,V>& other) const;
- bool operator>=(const StlSequence<S,V>& other) const;
-
-
- private:
- friend class StlSequenceIterator<S,V>;
- S * m_UnoSequence;
- static const typename StlSequence<S,V>::size_type begin_of_sequence;
- static const typename StlSequence<S,V>::size_type end_of_sequence;
- };
-
- //StlSequenceIterator
- template<typename S, typename V>
- StlSequenceIterator<S,V>::StlSequenceIterator()
- : m_UnoSequence(0), m_Index(StlSequence<S,V>::end_of_sequence)
- {}
-
- template<typename S, typename V>
- StlSequenceConstIterator<S,V>::StlSequenceConstIterator()
- {}
-
- template<typename S, typename V>
- StlSequenceIterator<S, V>::StlSequenceIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index)
- : m_UnoSequence(uno_sequence), m_Index(index)
- {}
-
- template<typename S, typename V>
- StlSequenceConstIterator<S, V>::StlSequenceConstIterator(S * uno_sequence, typename StlSequenceIterator<S,V>::difference_type index)
- : StlSequenceIterator<S,V>(uno_sequence, index)
- {}
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::reference StlSequenceIterator<S, V>::operator*() const
- {
- return (*m_UnoSequence)[m_Index];
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator++()
- {
- ++m_Index;
- if(m_Index>=m_UnoSequence->getLength())
- m_Index = StlSequence<S,V>::end_of_sequence;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator++(int)
- {
- StlSequenceIterator<S,V> temp = *this;
- ++*this;
- return temp;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator--()
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- m_Index = m_UnoSequence->getLength();
- --m_Index;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator--(int)
- {
- StlSequenceIterator<S,V> temp = *this;
- --*this;
- return temp;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator+=(const typename StlSequenceIterator<S,V>::difference_type by)
- {
- if(by<0)
- {
- this->operator-=(-by);
- return *this;
- }
- if(by==0)
- return *this;
- m_Index+=by;
- if(m_Index>=m_UnoSequence->getLength())
- m_Index=StlSequence<S,V>::end_of_sequence;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V>& StlSequenceIterator<S, V>::operator-=(const typename StlSequenceIterator<S,V>::difference_type by)
- {
- if(by<0)
- {
- if(-by==by) return *this; // breaking infinitive loop on MIN_INT
- this->operator+=(-by);
- return *this;
- }
- if(by==0)
- return *this;
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- m_Index=m_UnoSequence->getLength();
- m_Index-=by;
- return *this;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator+(const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- StlSequenceIterator<S,V> result = StlSequenceIterator<S,V>(*this);
- result+=by;
- return result;
- }
-
- template<typename S, typename V>
- inline StlSequenceIterator<S,V> StlSequenceIterator<S, V>::operator-(const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- StlSequenceIterator<S,V> result = StlSequenceIterator<S,V>(*this);
- result-=by;
- return result;
- }
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::difference_type StlSequenceIterator<S, V>::operator-(const StlSequenceIterator<S,V>& to) const
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence ^ to.m_Index==StlSequence<S,V>::end_of_sequence)
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence)
- return m_UnoSequence->getLength()-to.m_Index;
- else
- return m_Index-m_UnoSequence->getLength();
- }
- return m_Index-to.m_Index;
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator==(const StlSequenceIterator<S,V>& other) const
- {
- return (m_Index == other.m_Index);
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator!=(const StlSequenceIterator<S,V>& other) const
- {
- return !this->operator==(other);
- }
-
- template<typename S, typename V>
- inline bool StlSequenceIterator<S, V>::operator<(const StlSequenceIterator<S,V>& other) const
- {
- if(m_Index==StlSequence<S,V>::end_of_sequence ^ other.m_Index==StlSequence<S,V>::end_of_sequence)
- return other.m_Index==StlSequence<S,V>::end_of_sequence;
- return m_Index<other.m_Index;
- }
-
- template<typename S, typename V>
- inline typename StlSequenceIterator<S,V>::reference StlSequenceIterator<S, V>::operator[](const typename StlSequenceIterator<S,V>::difference_type by) const
- {
- return (*(this->m_UnoSequence))[this->m_Index+by];
- }
-
- // StlSequence
- template<typename S, typename V>
- StlSequence<S,V>::StlSequence(S& uno_sequence)
- : m_UnoSequence(&uno_sequence)
- {}
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::size_type StlSequence<S,V>::size() const
- {
- return m_UnoSequence->getLength();
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::size_type StlSequence<S,V>::max_size() const
- {
- return this->size();
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::empty() const
- {
- return this->size() == 0;
- }
-
- template<typename S, typename V>
- inline void StlSequence<S,V>::swap(StlSequence<S,V>& other)
- {
- ::std::swap(*this, other);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::iterator StlSequence<S,V>::begin()
- {
- return typename StlSequence<S,V>::iterator(m_UnoSequence, begin_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::iterator StlSequence<S,V>::end()
- {
- return typename StlSequence<S,V>::iterator(m_UnoSequence, end_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::const_iterator StlSequence<S,V>::begin() const
- {
- return typename StlSequence<S,V>::const_iterator(m_UnoSequence, begin_of_sequence);
- }
-
- template<typename S, typename V>
- inline typename StlSequence<S,V>::const_iterator StlSequence<S,V>::end() const
- {
- return typename StlSequence<S,V>::const_iterator(m_UnoSequence, end_of_sequence);
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator==(const StlSequence<S,V>& other) const
- {
- if(this->size() != other.size()) return false;
- return ::std::equal(this->begin(), this->end(), other.begin());
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator<(const StlSequence<S,V>& other) const
- {
- return ::std::lexicographical_compare(this->begin(), this->end(), other.begin(), other.end());
- }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator!=(const StlSequence<S,V>& other) const
- { return !(*this == other); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator>(const StlSequence<S,V>& other) const
- { return (other < *this); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator<=(const StlSequence<S,V>& other) const
- { return !(other < *this); }
-
- template<typename S, typename V>
- inline bool StlSequence<S,V>::operator>=(const StlSequence<S,V>& other) const
- { return !(*this < other); }
-
- template<typename S, typename V>
- const typename StlSequence<S,V>::size_type StlSequence<S,V>::begin_of_sequence = 0;
-
- template<typename S, typename V>
- const typename StlSequence<S,V>::size_type StlSequence<S,V>::end_of_sequence = -1;
-}}
-
namespace comphelper
{
/**
- @short a wrapper-class that provides stl-container-like access to an existing
- ::com::sun::star::uno::Sequence
- @descr This template class allows using an existing ::com::sun::star::uno::Sequence
- like any other stl container. It provides standard-compliant mutable random access
- iterators. Because random access iterators are the most generic iterators defined
- by the stl, any stl algorithm can be applied to the Sequence.
- <p>
- This is just a basic stl forward container, but _not_ an stl sequence (the size of the
- ::com::sun::star::uno::Sequence cannot be changed using the StlUnoSequence interface).
- Inserts are expensive operations on ::com::sun::star::uno::Sequence - use
- ::std::copy() to a efficient stl container implementing the stl sequence interface
- and the available insert iterator adapters you need those.
- <p>
- @attention There is one requirement of an stl container that this class does not meet:
- It is _not_ owner of its contents and thus it does not destroy its contents when destructed.
- @attention No additional boundschecking over the requirements of the STL are performed.
- E.g. sequence.begin()-- results in undefined behavior.
- @attention StlUnoSequence is not threadsafe.
- <p>
- Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- ::std::list stl_list(stl_seq.begin(), stl_seq.end());
- </code>
- <p>
- Example: (sorting ::com::sun::star::uno::Sequence inplace)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- ::std::sort(stl_seq.begin(), stl_seq.end());
- </code>
- <p>
- Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq(10);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq(&uno_seq);
- sal_Int32 count = 0;
- ::std::count(stl_seq.begin(), stl_seq.end(), 4711, count);
- </code>
- <p>
- Example: (inserting the second half of one Sequence after the first element of another)
- <code>
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq1(10);
- ::com::sun::star::uno::Sequence<sal_Int32> uno_seq2(10);
- ::com::sun::star::uno::Sequence<sal_Int32> result(15);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq1(&uno_seq1);
- ::comphelper::StlUnoSequence<sal_Int32> stl_seq2(&uno_seq1);
- ::comphelper::StlUnoSequence<sal_Int32> stl_result(&result);
- ::std::list<sal_Int32> temp(uno_seq1.begin(), uno_seq1.end());
- ::std::copy(uno_seq2.begin()+5, uno_seq2.end(), ::std::insert_iterator< ::std::list<sal_Int32> >(temp, ++temp.begin()));
- ::std::copy(temp.begin(), temp.end(), result.begin());
- </code>
-
- @see http://www.sgi.com/tech/stl/Container.html
- @see http://www.sgi.com/tech/stl/Sequence.html
- @see http://www.sgi.com/tech/stl/RandomAccessIterator.html
+ @short stl-container-like access to an existing ::com::sun::star::uno::Sequence
+ @descr These template functions allows using an existing
+ ::com::sun::star::uno::Sequence using stl algorithms. They provides
+ standard-compliant mutable random access iterators. Because random access
+ iterators are the most generic iterators defined by the stl, any stl algorithm
+ can be applied to the Sequence (excluding algorithms requiring output
+ iterators).
+ <p>
+ Example: (creating a ::std::list from a ::com::sun::star::uno::Sequence)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ ::std::list stl_list(stl_begin(aSeq), stl_end(aSeq));
+ </code>
+ <p>
+ Example: (sorting ::com::sun::star::uno::Sequence inplace)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ ::std::sort(stl_begin(aSeq), stl_seq.end(aSeq));
+ </code>
+ <p>
+ Example: (counting occurrences of 4711 in a ::com::sun::star::uno::Sequence)
+ <code>
+ ::com::sun::star::uno::Sequence<sal_Int32> aSeq(10);
+ sal_Int32 count = 0;
+ ::std::count(stl_begin(aSeq), stl_end(aSeq), 4711, count);
+ </code>
+ <p>
+
+ @see http://www.sgi.com/tech/stl/Container.html
+ @see http://www.sgi.com/tech/stl/Sequence.html
+ @see http://www.sgi.com/tech/stl/RandomAccessIterator.html
*/
template <typename V>
- class StlUnoSequence : public stlunosequence::StlSequence< ::com::sun::star::uno::Sequence<V>, V>
- {
- public:
- /*
- @short named constructor (these are needed to keep const-correctness)
- */
- static StlUnoSequence<V> createInstance(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>(uno_sequence); }
- /*
- @short named constructor (these are needed to keep const-correctness)
- */
- static const StlUnoSequence<V> createInstance(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>(const_cast< ::com::sun::star::uno::Sequence<V>& >(uno_sequence)); }
- private:
- StlUnoSequence(::com::sun::star::uno::Sequence<V>& uno_sequence)
- : stlunosequence::StlSequence< ::com::sun::star::uno::Sequence<V>, V>(uno_sequence)
- {}
- };
-
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).begin()
- */
- template <typename V>
- typename StlUnoSequence<V>::iterator stl_begin(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>::createInstance(uno_sequence).begin(); }
+ V* stl_begin(::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getArray(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).end()
- */
template <typename V>
- typename StlUnoSequence<V>::iterator stl_end(::com::sun::star::uno::Sequence<V>& uno_sequence)
- { return StlUnoSequence<V>::createInstance(uno_sequence).end(); }
+ V* stl_end(::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getArray() + rSeq.getLength(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).begin()
- */
template <typename V>
- typename StlUnoSequence<V>::const_iterator stl_begin(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- {
- return StlUnoSequence<V>::createInstance(uno_sequence).begin();
- }
+ const V* stl_begin(const ::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getConstArray(); }
- /*
- @short shortcut for StlUnoSequence<V>::createInstance(uno_sequence).end()
- */
template <typename V>
- typename StlUnoSequence<V>::const_iterator stl_end(const ::com::sun::star::uno::Sequence<V>& uno_sequence)
- {
- return StlUnoSequence<V>::createInstance(uno_sequence).end();
- }
+ const V* stl_end(const ::com::sun::star::uno::Sequence<V>& rSeq)
+ { return rSeq.getConstArray() + rSeq.getLength(); }
}
#endif
diff --git a/comphelper/inc/comphelper/storagehelper.hxx b/comphelper/inc/comphelper/storagehelper.hxx
index b99f7e1233ca..efb5431959ba 100644
--- a/comphelper/inc/comphelper/storagehelper.hxx
+++ b/comphelper/inc/comphelper/storagehelper.hxx
@@ -48,9 +48,6 @@
namespace comphelper {
-sal_Bool COMPHELPER_DLLPUBLIC IsValidZipEntryFileName(
- const sal_Unicode *pChar, sal_Int32 nLength, sal_Bool bSlashAllowed );
-
class COMPHELPER_DLLPUBLIC OStorageHelper
{
public:
diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx
index da0dd71a5520..9f463cdf0380 100644
--- a/comphelper/source/misc/mediadescriptor.cxx
+++ b/comphelper/source/misc/mediadescriptor.cxx
@@ -726,8 +726,13 @@ class StillReadWriteInteraction : public ::ucbhelper::InterceptedInteraction
css::ucb::InteractiveIOException exIO;
xRequest->getRequest() >>= exIO;
bAbort = (
- (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) ||
- (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+ (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED )
+ || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+#ifdef MACOSX
+ // this is a workaround for MAC, on this platform if the file is locked
+ // the returned error code looks to be wrong
+ || (exIO.Code == css::ucb::IOErrorCode_GENERAL )
+#endif
);
}
break;
diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx
index 77a251372d85..e9437528b0de 100644
--- a/comphelper/source/misc/string.cxx
+++ b/comphelper/source/misc/string.cxx
@@ -36,10 +36,13 @@
#include <vector>
#include <algorithm>
-#include "comphelper/string.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-#include "comphelper/stlunosequence.hxx"
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+
+#include <comphelper/string.hxx>
+#include <comphelper/stlunosequence.hxx>
+#include <comphelper/stl_types.hxx>
namespace comphelper { namespace string {
@@ -96,12 +99,12 @@ rtl::OUString searchAndReplaceAsciiL(
::rtl::OUString convertCommaSeparated(
::com::sun::star::uno::Sequence< ::rtl::OUString > const& i_rSeq)
{
- ::rtl::OUString ret;
- for (sal_Int32 i = 0; i < i_rSeq.getLength(); ++i) {
- if (i != 0) ret += ::rtl::OUString::createFromAscii(", ");
- ret += i_rSeq[i];
- }
- return ret;
+ ::rtl::OUStringBuffer buf;
+ ::comphelper::intersperse(
+ ::comphelper::stl_begin(i_rSeq), ::comphelper::stl_end(i_rSeq),
+ ::comphelper::OUStringBufferAppender(buf),
+ ::rtl::OUString::createFromAscii(", "));
+ return buf.makeStringAndClear();
}
::com::sun::star::uno::Sequence< ::rtl::OUString >
@@ -119,10 +122,6 @@ rtl::OUString searchAndReplaceAsciiL(
} while (idx >= 0);
::com::sun::star::uno::Sequence< ::rtl::OUString > kws(vec.size());
std::copy(vec.begin(), vec.end(), stl_begin(kws));
- /*
- for (size_t i = 0; i < vec.size(); ++i) {
- kws[i] = vec.at(i);
- }*/
return kws;
}
diff --git a/comphelper/source/misc/types.cxx b/comphelper/source/misc/types.cxx
index 2b20fd9acca3..2a9180c038b0 100644
--- a/comphelper/source/misc/types.cxx
+++ b/comphelper/source/misc/types.cxx
@@ -87,8 +87,7 @@ sal_Bool operator ==(const Time& _rLeft, const Time& _rRight)
sal_Int32 getINT32(const Any& _rAny)
{
sal_Int32 nReturn = 0;
- _rAny >>= nReturn;
-
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -96,7 +95,7 @@ sal_Int32 getINT32(const Any& _rAny)
sal_Int16 getINT16(const Any& _rAny)
{
sal_Int16 nReturn = 0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -104,7 +103,7 @@ sal_Int16 getINT16(const Any& _rAny)
double getDouble(const Any& _rAny)
{
double nReturn = 0.0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -112,7 +111,7 @@ double getDouble(const Any& _rAny)
float getFloat(const Any& _rAny)
{
float nReturn = 0.0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -120,7 +119,7 @@ float getFloat(const Any& _rAny)
::rtl::OUString getString(const Any& _rAny)
{
::rtl::OUString nReturn;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
diff --git a/comphelper/source/misc/uieventslogger.cxx b/comphelper/source/misc/uieventslogger.cxx
index 3ff875a4e67d..a55d5b58854d 100644
--- a/comphelper/source/misc/uieventslogger.cxx
+++ b/comphelper/source/misc/uieventslogger.cxx
@@ -375,9 +375,10 @@ namespace comphelper
}
else
logdata[2] = UNKNOWN_ORIGIN;
- logdata[3] = url.Complete;
if(url.Complete.match(URL_FILE))
logdata[3] = URL_FILE;
+ else
+ logdata[3] = url.Main;
m_Logger->log(LogLevel::INFO, m_Formatter->formatMultiColumn(logdata));
m_SessionLogEventCount++;
}
diff --git a/comphelper/source/processfactory/processfactory.cxx b/comphelper/source/processfactory/processfactory.cxx
index 0f50f4a4cb01..c4eac583e3c0 100644
--- a/comphelper/source/processfactory/processfactory.cxx
+++ b/comphelper/source/processfactory/processfactory.cxx
@@ -98,24 +98,30 @@ Reference< XInterface > createProcessComponentWithArguments( const ::rtl::OUStri
return xComponent;
}
-} // namesapce comphelper
-
-extern "C" {
-uno::XComponentContext * comphelper_getProcessComponentContext()
+Reference< XComponentContext > getProcessComponentContext()
{
- uno::Reference<uno::XComponentContext> xRet;
+ Reference< XComponentContext > xRet;
uno::Reference<beans::XPropertySet> const xProps(
comphelper::getProcessServiceFactory(), uno::UNO_QUERY );
if (xProps.is()) {
try {
- xRet.set( xProps->getPropertyValue(
- rtl::OUString(
+ xRet.set( xProps->getPropertyValue( rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ),
uno::UNO_QUERY );
}
catch (beans::UnknownPropertyException const&) {
}
}
+ return xRet;
+}
+
+} // namespace comphelper
+
+extern "C" {
+uno::XComponentContext * comphelper_getProcessComponentContext()
+{
+ uno::Reference<uno::XComponentContext> xRet;
+ xRet = ::comphelper::getProcessComponentContext();
if (xRet.is())
xRet->acquire();
return xRet.get();
diff --git a/comphelper/source/property/propertybag.cxx b/comphelper/source/property/propertybag.cxx
index a56793e05769..383e1cc2c5aa 100644
--- a/comphelper/source/property/propertybag.cxx
+++ b/comphelper/source/property/propertybag.cxx
@@ -168,10 +168,11 @@ namespace comphelper
// will throw an UnknownPropertyException if necessary
if ( ( rProp.Attributes & PropertyAttribute::REMOVEABLE ) == 0 )
throw NotRemoveableException( ::rtl::OUString(), NULL );
+ const sal_Int32 nHandle = rProp.Handle;
- revokeProperty( rProp.Handle );
+ revokeProperty( nHandle );
- m_pImpl->aDefaults.erase( rProp.Handle );
+ m_pImpl->aDefaults.erase( nHandle );
}
//--------------------------------------------------------------------
diff --git a/comphelper/source/property/propertycontainerhelper.cxx b/comphelper/source/property/propertycontainerhelper.cxx
index 9d1662d1ecf2..7f5db1d6cf7e 100644
--- a/comphelper/source/property/propertycontainerhelper.cxx
+++ b/comphelper/source/property/propertycontainerhelper.cxx
@@ -76,12 +76,12 @@ namespace
// comparing two property descriptions (by name)
struct PropertyDescriptionNameMatch : public ::std::unary_function< PropertyDescription, bool >
{
- const ::rtl::OUString& m_rCompare;
+ ::rtl::OUString m_rCompare;
PropertyDescriptionNameMatch( const ::rtl::OUString& _rCompare ) : m_rCompare( _rCompare ) { }
bool operator() (const PropertyDescription& x ) const
{
- return x.aProperty.Name == m_rCompare;
+ return x.aProperty.Name.equals(m_rCompare);
}
};
}
diff --git a/comphelper/source/streaming/memorystream.cxx b/comphelper/source/streaming/memorystream.cxx
index b999c0f8e6af..a2baef21010e 100644
--- a/comphelper/source/streaming/memorystream.cxx
+++ b/comphelper/source/streaming/memorystream.cxx
@@ -167,6 +167,9 @@ void SAL_CALL UNOMemoryStream::seek( sal_Int64 location ) throw (IllegalArgument
if ( location > static_cast< sal_Int64 >( maData.size() ) )
maData.resize( static_cast< sal_Int32 >( location ) );
+ if ( location > static_cast< sal_Int64 >( maData.size() ) )
+ maData.resize( static_cast< sal_Int32 >( location ) );
+
mnCursor = static_cast< sal_Int32 >( location );
}
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 6269cfb11ef4..c6f9a295b332 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -83,6 +83,7 @@
#include <vcl/metric.hxx>
#include <vcl/graphictools.hxx>
#include <tools/poly.hxx>
+#include <i18npool/mslangid.hxx>
#include <implrenderer.hxx>
#include <tools.hxx>
@@ -956,6 +957,9 @@ namespace cppcanvas
rParms.mrParms.maFontLetterForm.getValue() :
(rFont.GetItalic() == ITALIC_NONE) ? 0 : 9;
+ LanguageType aLang = rFont.GetLanguage();
+ aFontRequest.Locale = MsLangId::convertLanguageToLocale(aLang, false);
+
// setup state-local text transformation,
// if the font be rotated
const short nFontAngle( rFont.GetOrientation() );
diff --git a/cppcanvas/util/makefile.mk b/cppcanvas/util/makefile.mk
index a5ac026e262c..4d0ff2a8dc55 100644
--- a/cppcanvas/util/makefile.mk
+++ b/cppcanvas/util/makefile.mk
@@ -50,7 +50,7 @@ LIB1FILES=\
SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
SHL1IMPLIB= i$(TARGET)
-SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB)
+SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB) $(I18NISOLANGLIB)
.IF "$(debug)$(dbgutil)"!=""
SHL1STDLIBS += $(CPPUHELPERLIB)
diff --git a/dtrans/source/X11/X11_selection.cxx b/dtrans/source/X11/X11_selection.cxx
index affc92e98908..21030a220917 100644
--- a/dtrans/source/X11/X11_selection.cxx
+++ b/dtrans/source/X11/X11_selection.cxx
@@ -515,6 +515,15 @@ SelectionManager::~SelectionManager()
// destroy message window
if( m_aWindow )
XDestroyWindow( m_pDisplay, m_aWindow );
+ // release cursors
+ if (m_aMoveCursor != None)
+ XFreeCursor(m_pDisplay, m_aMoveCursor);
+ if (m_aCopyCursor != None)
+ XFreeCursor(m_pDisplay, m_aCopyCursor);
+ if (m_aLinkCursor != None)
+ XFreeCursor(m_pDisplay, m_aLinkCursor);
+ if (m_aNoneCursor != None)
+ XFreeCursor(m_pDisplay, m_aNoneCursor);
// paranoia setting, the drag thread should have
// done that already
diff --git a/dtrans/source/aqua/DropTarget.cxx b/dtrans/source/aqua/DropTarget.cxx
index bb45742732e7..6f973d7aa08f 100644
--- a/dtrans/source/aqua/DropTarget.cxx
+++ b/dtrans/source/aqua/DropTarget.cxx
@@ -245,8 +245,8 @@ NSDragOperation DropTarget::draggingEntered(id sender)
CocoaToVCL(dragLocation, bounds);
- sal_Int32 posX = dragLocation.x;
- sal_Int32 posY = dragLocation.y;
+ sal_Int32 posX = static_cast<sal_Int32>(dragLocation.x);
+ sal_Int32 posY = static_cast<sal_Int32>(dragLocation.y);
NSPasteboard* dragPboard = [sender draggingPasteboard];
mXCurrentDragClipboard = new AquaClipboard(mXComponentContext, dragPboard, false);
@@ -284,8 +284,8 @@ NSDragOperation DropTarget::draggingUpdated(id sender)
CocoaToVCL(dragLocation, bounds);
- sal_Int32 posX = dragLocation.x;
- sal_Int32 posY = dragLocation.y;
+ sal_Int32 posX = static_cast<sal_Int32>(dragLocation.x);
+ sal_Int32 posY = static_cast<sal_Int32>(dragLocation.y);
DropTargetDragEvent dtde(static_cast<OWeakObject*>(this),
0,
@@ -350,8 +350,8 @@ MacOSBOOL DropTarget::performDragOperation(id sender)
CocoaToVCL(dragLocation, bounds);
- sal_Int32 posX = dragLocation.x;
- sal_Int32 posY = dragLocation.y;
+ sal_Int32 posX = static_cast<sal_Int32>(dragLocation.x);
+ sal_Int32 posY = static_cast<sal_Int32>(dragLocation.y);
DropTargetDropEvent dtde(static_cast<OWeakObject*>(this),
0,
diff --git a/dtrans/source/aqua/aqua_clipboard.cxx b/dtrans/source/aqua/aqua_clipboard.cxx
index d0b821099ea0..370edee90eb7 100644
--- a/dtrans/source/aqua/aqua_clipboard.cxx
+++ b/dtrans/source/aqua/aqua_clipboard.cxx
@@ -323,8 +323,13 @@ void AquaClipboard::fireLostClipboardOwnershipEvent(Reference<XClipboardOwner> o
void AquaClipboard::provideDataForType(NSPasteboard* sender, NSString* type)
{
DataProviderPtr_t dp = mpDataFlavorMapper->getDataProvider(type, mXClipboardContent);
- NSData* pBoardData = (NSData*)dp->getSystemData();
- [sender setData: pBoardData forType: type];
+ NSData* pBoardData = NULL;
+
+ if (dp.get() != NULL)
+ {
+ pBoardData = (NSData*)dp->getSystemData();
+ [sender setData: pBoardData forType: type];
+ }
}
diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
index a2547bcae232..654b66888f67 100644
--- a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
+++ b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
@@ -91,41 +91,93 @@ long DXF2GDIMetaFile::GetEntityColor(const DXFBasicEntity & rE)
return nColor;
}
-
-PenStyle DXF2GDIMetaFile::LTypeToPStyle(const char * sLineType)
+DXFLineInfo DXF2GDIMetaFile::LTypeToDXFLineInfo(const char * sLineType)
{
const DXFLType * pLT;
- PenStyle ePStyle;
+ DXFLineInfo aDXFLineInfo;
+
pLT=pDXF->aTables.SearchLType(sLineType);
- if (pLT==NULL) ePStyle=PEN_SOLID;
- else if (pLT->nDashCount<=1) ePStyle=PEN_SOLID;
- else if (pLT->nDashCount==2) {
- if (fabs(pLT->fDash[0])*4<fabs(pLT->fPatternLength)) ePStyle=PEN_DOT;
- else ePStyle=PEN_DASH;
- }
- else ePStyle=PEN_DASHDOT;
- return ePStyle;
-}
+ if (pLT==NULL || pLT->nDashCount == 0) {
+ aDXFLineInfo.eStyle = LINE_SOLID;
+ }
+ else {
+ sal_Int32 i;
+ double x;
+ aDXFLineInfo.eStyle = LINE_DASH;
+ for (i=0; i < (pLT->nDashCount); i++) {
+ x = pLT->fDash[i] * pDXF->getGlobalLineTypeScale();
+// ####
+ // x = (sal_Int32) rTransform.TransLineWidth( pLT->fDash[i] * pDXF->getGlobalLineTypeScale() );
+ if ( x >= 0.0 ) {
+ if ( aDXFLineInfo.nDotCount == 0 ) {
+ aDXFLineInfo.nDotCount ++;
+ aDXFLineInfo.fDotLen = x;
+ }
+ else if ( aDXFLineInfo.fDotLen == x ) {
+ aDXFLineInfo.nDotCount ++;
+ }
+ else if ( aDXFLineInfo.nDashCount == 0 ) {
+ aDXFLineInfo.nDashCount ++;
+ aDXFLineInfo.fDashLen = x;
+ }
+ else if ( aDXFLineInfo.fDashLen == x ) {
+ aDXFLineInfo.nDashCount ++;
+ }
+ else {
+ // It is impossible to be converted.
+ }
+ }
+ else {
+ if ( aDXFLineInfo.fDistance == 0 ) {
+ aDXFLineInfo.fDistance = -1 * x;
+ }
+ else {
+ // It is impossible to be converted.
+ }
+ }
+
+ }
+ }
+#if 0
+ if (aDXFLineInfo.DashCount > 0 && aDXFLineInfo.DashLen == 0.0)
+ aDXFLineInfo.DashLen ( 1 );
+ if (aDXFLineInfo.DotCount > 0 && aDXFLineInfo.DotLen() == 0.0)
+ aDXFLineInfo.SetDotLen( 1 );
+ if (aDXFLineInfo.GetDashCount > 0 || aDXFLineInfo.GetDotCount > 0)
+ if (aDXFLineInfo.GetDistance() == 0)
+ aDXFLineInfo.SetDistance( 1 );
+#endif
-PenStyle DXF2GDIMetaFile::GetEntityPStyle(const DXFBasicEntity & rE)
+ return aDXFLineInfo;
+}
+
+DXFLineInfo DXF2GDIMetaFile::GetEntityDXFLineInfo(const DXFBasicEntity & rE)
{
- PenStyle ePStyle;
+ DXFLineInfo aDXFLineInfo;
const DXFLayer * pLayer;
+ aDXFLineInfo.eStyle = LINE_SOLID;
+ aDXFLineInfo.fWidth = 0;
+ aDXFLineInfo.nDashCount = 0;
+ aDXFLineInfo.fDashLen = 0;
+ aDXFLineInfo.nDotCount = 0;
+ aDXFLineInfo.fDotLen = 0;
+ aDXFLineInfo.fDistance = 0;
+
if (strcmp(rE.sLineType,"BYLAYER")==0) {
- if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) ePStyle=eParentLayerPStyle;
+ if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) aDXFLineInfo=aParentLayerDXFLineInfo;
else {
pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
- if (pLayer!=NULL) ePStyle=LTypeToPStyle(pLayer->sLineType);
- else ePStyle=eParentLayerPStyle;
+ if (pLayer!=NULL) aDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
+ else aDXFLineInfo=aParentLayerDXFLineInfo;
}
}
else if (strcmp(rE.sLineType,"BYBLOCK")==0) {
- ePStyle=eBlockPStyle;
+ aDXFLineInfo=aBlockDXFLineInfo;
}
- else ePStyle=LTypeToPStyle(rE.sLineType);
- return ePStyle;
+ else aDXFLineInfo=LTypeToDXFLineInfo(rE.sLineType);
+ return aDXFLineInfo;
}
@@ -133,12 +185,10 @@ BOOL DXF2GDIMetaFile::SetLineAttribute(const DXFBasicEntity & rE, ULONG /*nWidth
{
long nColor;
Color aColor;
- PenStyle ePStyle;
nColor=GetEntityColor(rE);
if (nColor<0) return FALSE;
aColor=ConvertColor((BYTE)nColor);
- ePStyle=GetEntityPStyle(rE);
if (aActLineColor!=aColor) {
pVirDev->SetLineColor( aActLineColor = aColor );
@@ -202,12 +252,30 @@ BOOL DXF2GDIMetaFile::SetFontAttribute(const DXFBasicEntity & rE, short nAngle,
void DXF2GDIMetaFile::DrawLineEntity(const DXFLineEntity & rE, const DXFTransform & rTransform)
{
-
if (SetLineAttribute(rE)) {
Point aP0,aP1;
rTransform.Transform(rE.aP0,aP0);
rTransform.Transform(rE.aP1,aP1);
- pVirDev->DrawLine(aP0,aP1);
+
+ DXFLineInfo aDXFLineInfo;
+ aDXFLineInfo=GetEntityDXFLineInfo(rE);
+ LineInfo aLineInfo;
+ aLineInfo = rTransform.Transform(aDXFLineInfo);
+
+#if 0
+ printf("%f\n", rTransform.TransLineWidth(1000.0));
+
+ // LINE_NONE = 0, LINE_SOLID = 1, LINE_DASH = 2, LineStyle_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetWidth( 300 );
+ aLineInfo.SetDashCount( 2 );
+ aLineInfo.SetDashLen( 100 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDotLen( 0 );
+ aLineInfo.SetDistance( 500 );
+#endif
+
+ pVirDev->DrawLine(aP0,aP1,aLineInfo);
if (rE.fThickness!=0) {
Point aP2,aP3;
rTransform.Transform(rE.aP0+DXFVector(0,0,rE.fThickness),aP2);
@@ -426,23 +494,23 @@ void DXF2GDIMetaFile::DrawInsertEntity(const DXFInsertEntity & rE, const DXFTran
rTransform
);
long nSavedBlockColor, nSavedParentLayerColor;
- PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle;
+ DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo;
nSavedBlockColor=nBlockColor;
nSavedParentLayerColor=nParentLayerColor;
- eSavedBlockPStyle=eBlockPStyle;
- eSavedParentLayerPStyle=eParentLayerPStyle;
+ aSavedBlockDXFLineInfo=aBlockDXFLineInfo;
+ aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo;
nBlockColor=GetEntityColor(rE);
- eBlockPStyle=GetEntityPStyle(rE);
+ aBlockDXFLineInfo=GetEntityDXFLineInfo(rE);
if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) {
DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
}
DrawEntities(*pB,aT,FALSE);
- eBlockPStyle=eSavedBlockPStyle;
- eParentLayerPStyle=eSavedParentLayerPStyle;
+ aBlockDXFLineInfo=aSavedBlockDXFLineInfo;
+ aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo;
nBlockColor=nSavedBlockColor;
nParentLayerColor=nSavedParentLayerColor;
}
@@ -540,6 +608,8 @@ void DXF2GDIMetaFile::DrawLWPolyLineEntity(const DXFLWPolyLineEntity & rE, const
pVirDev->DrawPolygon( aPoly );
else
pVirDev->DrawPolyLine( aPoly );
+ // ####
+ //pVirDev->DrawPolyLine( aPoly, aDXFLineInfo );
}
}
}
@@ -675,23 +745,23 @@ void DXF2GDIMetaFile::DrawDimensionEntity(const DXFDimensionEntity & rE, const D
rTransform
);
long nSavedBlockColor, nSavedParentLayerColor;
- PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle;
+ DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo;
nSavedBlockColor=nBlockColor;
nSavedParentLayerColor=nParentLayerColor;
- eSavedBlockPStyle=eBlockPStyle;
- eSavedParentLayerPStyle=eParentLayerPStyle;
+ aSavedBlockDXFLineInfo=aBlockDXFLineInfo;
+ aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo;
nBlockColor=GetEntityColor(rE);
- eBlockPStyle=GetEntityPStyle(rE);
+ aBlockDXFLineInfo=GetEntityDXFLineInfo(rE);
if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) {
DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
}
DrawEntities(*pB,aT,FALSE);
- eBlockPStyle=eSavedBlockPStyle;
- eParentLayerPStyle=eSavedParentLayerPStyle;
+ aBlockDXFLineInfo=aSavedBlockDXFLineInfo;
+ aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo;
nBlockColor=nSavedBlockColor;
nParentLayerColor=nSavedParentLayerColor;
}
@@ -801,16 +871,28 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
nMainEntitiesCount=CountEntities(pDXF->aEntities);
nBlockColor=7;
- eBlockPStyle=PEN_SOLID;
+ aBlockDXFLineInfo.eStyle = LINE_SOLID;
+ aBlockDXFLineInfo.fWidth = 0;
+ aBlockDXFLineInfo.nDashCount = 0;
+ aBlockDXFLineInfo.fDashLen = 0;
+ aBlockDXFLineInfo.nDotCount = 0;
+ aBlockDXFLineInfo.fDotLen = 0;
+ aBlockDXFLineInfo.fDistance = 0;
pLayer=pDXF->aTables.SearchLayer("0");
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor & 0xff;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
else {
nParentLayerColor=7;
- eParentLayerPStyle=PEN_SOLID;
+ aParentLayerDXFLineInfo.eStyle = LINE_SOLID;
+ aParentLayerDXFLineInfo.fWidth = 0;
+ aParentLayerDXFLineInfo.nDashCount = 0;
+ aParentLayerDXFLineInfo.fDashLen = 0;
+ aParentLayerDXFLineInfo.nDotCount = 0;
+ aParentLayerDXFLineInfo.fDotLen = 0;
+ aParentLayerDXFLineInfo.fDistance = 0;
}
pVirDev->EnableOutput(FALSE);
@@ -837,14 +919,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
fScale = 0; // -Wall added this...
}
else {
- if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
+// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
if (fWidth>fHeight)
fScale=10000.0/fWidth;
else
fScale=10000.0/fHeight;
- }
- else
- fScale=1.0;
+// }
+// else
+// fScale=1.0;
aTransform=DXFTransform(fScale,-fScale,fScale,
DXFVector(-pDXF->aBoundingBox.fMinX*fScale,
pDXF->aBoundingBox.fMaxY*fScale,
@@ -857,14 +939,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
else {
fHeight=pVPort->fHeight;
fWidth=fHeight*pVPort->fAspectRatio;
- if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
+// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
if (fWidth>fHeight)
fScale=10000.0/fWidth;
else
fScale=10000.0/fHeight;
- }
- else
- fScale=1.0;
+// }
+// else
+// fScale=1.0;
aTransform=DXFTransform(
DXFTransform(pVPort->aDirection,pVPort->aTarget),
DXFTransform(
@@ -894,7 +976,6 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
}
delete pVirDev;
-
return bStatus;
}
diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
index bf32750cc0af..a1bf99639430 100644
--- a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
+++ b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
@@ -33,6 +33,7 @@
#include "dxfreprd.hxx"
#include <vcl/font.hxx>
+#include <vcl/lineinfo.hxx>
// MT: NOOLDSV, someone should change the code...
enum PenStyle { PEN_NULL, PEN_SOLID, PEN_DOT, PEN_DASH, PEN_DASHDOT };
@@ -41,6 +42,7 @@ enum BrushStyle { BRUSH_NULL, BRUSH_SOLID, BRUSH_HORZ, BRUSH_VERT,
BRUSH_25, BRUSH_50, BRUSH_75,
BRUSH_BITMAP };
+
class DXF2GDIMetaFile {
private:
@@ -56,9 +58,9 @@ private:
ULONG nMainEntitiesCount;
long nBlockColor;
- PenStyle eBlockPStyle;
+ DXFLineInfo aBlockDXFLineInfo;
long nParentLayerColor;
- PenStyle eParentLayerPStyle;
+ DXFLineInfo aParentLayerDXFLineInfo;
Color aActLineColor;
Color aActFillColor;
Font aActFont;
@@ -71,9 +73,9 @@ private:
long GetEntityColor(const DXFBasicEntity & rE);
- PenStyle LTypeToPStyle(const char * sLineType);
+ DXFLineInfo LTypeToDXFLineInfo(const char * sLineType);
- PenStyle GetEntityPStyle(const DXFBasicEntity & rE);
+ DXFLineInfo GetEntityDXFLineInfo(const DXFBasicEntity & rE);
BOOL SetLineAttribute(const DXFBasicEntity & rE, ULONG nWidth=0);
diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.cxx b/goodies/source/filter.vcl/idxf/dxfreprd.cxx
index 7dc2f5d8d58d..80b4cb599b73 100644
--- a/goodies/source/filter.vcl/idxf/dxfreprd.cxx
+++ b/goodies/source/filter.vcl/idxf/dxfreprd.cxx
@@ -142,7 +142,8 @@ void DXFPalette::SetColor(BYTE nIndex, BYTE nRed, BYTE nGreen, BYTE nBlue)
DXFRepresentation::DXFRepresentation()
{
- setTextEncoding(RTL_TEXTENCODING_IBM_437);
+ setTextEncoding(RTL_TEXTENCODING_IBM_437);
+ setGlobalLineTypeScale(1.0);
}
@@ -217,11 +218,18 @@ void DXFRepresentation::ReadHeader(DXFGroupReader & rDGR)
// FIXME: we really need a whole table of
// $DWGCODEPAGE to encodings mappings
if ( (strcmp(rDGR.GetS(),"ANSI_932")==0) ||
- (strcmp(rDGR.GetS(),"DOS932")==0) )
+ (strcmp(rDGR.GetS(),"ansi_932")==0) ||
+ (strcmp(rDGR.GetS(),"DOS932")==0) ||
+ (strcmp(rDGR.GetS(),"dos932")==0) )
{
setTextEncoding(RTL_TEXTENCODING_MS_932);
}
}
+ else if (strcmp(rDGR.GetS(),"$LTSCALE")==0)
+ {
+ rDGR.Read();
+ setGlobalLineTypeScale(getGlobalLineTypeScale() * rDGR.GetF());
+ }
else rDGR.Read();
}
}
diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.hxx b/goodies/source/filter.vcl/idxf/dxfreprd.hxx
index 490f7af57223..13ca7d022697 100644
--- a/goodies/source/filter.vcl/idxf/dxfreprd.hxx
+++ b/goodies/source/filter.vcl/idxf/dxfreprd.hxx
@@ -101,7 +101,9 @@ public:
DXFEntities aEntities;
// Die Entities (aus der Entities-Section) der DXF-Datei
- rtl_TextEncoding mEnc;
+ rtl_TextEncoding mEnc; // $DWGCODEPAGE
+
+ double mfGlobalLineTypeScale; // $LTSCALE
DXFRepresentation();
~DXFRepresentation();
@@ -109,6 +111,9 @@ public:
rtl_TextEncoding getTextEncoding() const;
void setTextEncoding(rtl_TextEncoding aEnc);
+ double getGlobalLineTypeScale() const;
+ void setGlobalLineTypeScale(double fGlobalLineTypeScale);
+
BOOL Read( SvStream & rIStream, USHORT nMinPercent, USHORT nMaxPercent);
// Liesst die komplette DXF-Datei ein.
@@ -128,7 +133,8 @@ inline BYTE DXFPalette::GetGreen(BYTE nIndex) const { return pGreen[nIndex]; }
inline BYTE DXFPalette::GetBlue(BYTE nIndex) const { return pBlue[nIndex]; }
inline rtl_TextEncoding DXFRepresentation::getTextEncoding() const { return mEnc; }
inline void DXFRepresentation::setTextEncoding(rtl_TextEncoding aEnc) { mEnc = aEnc; }
-
+inline double DXFRepresentation::getGlobalLineTypeScale() const { return mfGlobalLineTypeScale; }
+inline void DXFRepresentation::setGlobalLineTypeScale(double fGlobalLineTypeScale) { mfGlobalLineTypeScale = fGlobalLineTypeScale; }
#endif
diff --git a/goodies/source/filter.vcl/idxf/dxfvec.cxx b/goodies/source/filter.vcl/idxf/dxfvec.cxx
index ee5a923a8684..48bc93ae3eb6 100644
--- a/goodies/source/filter.vcl/idxf/dxfvec.cxx
+++ b/goodies/source/filter.vcl/idxf/dxfvec.cxx
@@ -206,6 +206,32 @@ BOOL DXFTransform::TransCircleToEllipse(double fRadius, double & rEx, double & r
else return FALSE;
}
+LineInfo DXFTransform::Transform(const DXFLineInfo& aDXFLineInfo) const
+{
+ double fex,fey,scale;
+
+ fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy);
+ fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy);
+ scale = (fex+fey)/2.0;
+
+ LineInfo aLineInfo;
+
+ aLineInfo.SetStyle( aDXFLineInfo.eStyle );
+ aLineInfo.SetWidth( (sal_Int32) (aDXFLineInfo.fWidth * scale + 0.5) );
+ aLineInfo.SetDashCount( static_cast< USHORT >( aDXFLineInfo.nDashCount ) );
+ aLineInfo.SetDashLen( (sal_Int32) (aDXFLineInfo.fDashLen * scale + 0.5) );
+ aLineInfo.SetDotCount( static_cast< USHORT >( aDXFLineInfo.nDotCount ) );
+ aLineInfo.SetDotLen( (sal_Int32) (aDXFLineInfo.fDotLen * scale + 0.5) );
+ aLineInfo.SetDistance( (sal_Int32) (aDXFLineInfo.fDistance * scale + 0.5) );
+
+ if ( aLineInfo.GetDashCount() > 0 && aLineInfo.GetDashLen() == 0 )
+ aLineInfo.SetDashLen(1);
+
+ if ( aLineInfo.GetDotCount() > 0 && aLineInfo.GetDotLen() == 0 )
+ aLineInfo.SetDotLen(1);
+
+ return aLineInfo;
+}
ULONG DXFTransform::TransLineWidth(double fW) const
{
@@ -213,6 +239,8 @@ ULONG DXFTransform::TransLineWidth(double fW) const
fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy);
fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy);
+ // ###
+ // printf("fex=%f fey=%f\n", fex, fey);
return (ULONG)(fabs(fW)*(fex+fey)/2.0+0.5);
}
@@ -227,4 +255,3 @@ BOOL DXFTransform::Mirror() const
if (aMZ.SProd(aMX*aMY)<0) return TRUE; else return FALSE;
}
-
diff --git a/goodies/source/filter.vcl/idxf/dxfvec.hxx b/goodies/source/filter.vcl/idxf/dxfvec.hxx
index 5ccc0be25774..aca26df46676 100644
--- a/goodies/source/filter.vcl/idxf/dxfvec.hxx
+++ b/goodies/source/filter.vcl/idxf/dxfvec.hxx
@@ -32,6 +32,37 @@
#define _DXFVEC_HXX
#include <tools/gen.hxx>
+#include <vcl/lineinfo.hxx>
+
+class DXFLineInfo {
+public:
+ LineStyle eStyle;
+ double fWidth;
+ sal_Int32 nDashCount;
+ double fDashLen;
+ sal_Int32 nDotCount;
+ double fDotLen;
+ double fDistance;
+
+ DXFLineInfo() :
+ eStyle(LINE_SOLID),
+ fWidth(0),
+ nDashCount(0),
+ fDashLen(0),
+ nDotCount(0),
+ fDotLen(0),
+ fDistance(0) {}
+
+ DXFLineInfo(const DXFLineInfo& x) :
+ eStyle(x.eStyle),
+ fWidth(x.fWidth),
+ nDashCount(x.nDashCount),
+ fDashLen(x.fDashLen),
+ nDotCount(x.nDotCount),
+ fDotLen(x.fDotLen),
+ fDistance(x.fDistance) {}
+
+};
//------------------------------------------------------------------------------
@@ -135,6 +166,9 @@ public:
BOOL Mirror() const;
// Liefert TRUE, wenn die Matrix ein Linkssystem bildet
+ LineInfo Transform(const DXFLineInfo& aDXFLineInfo) const;
+ // Transform to LineInfo
+
private:
DXFVector aMX;
DXFVector aMY;
diff --git a/goodies/source/graphic/grfmgr.cxx b/goodies/source/graphic/grfmgr.cxx
index bece8389d270..5cb37a51e81f 100644
--- a/goodies/source/graphic/grfmgr.cxx
+++ b/goodies/source/graphic/grfmgr.cxx
@@ -44,7 +44,6 @@
#include <vcl/metaact.hxx>
#include <vcl/virdev.hxx>
#include <vcl/salbtype.hxx>
-#include <vcl/pdfextoutdevdata.hxx>
#include <svtools/cacheoptions.hxx>
#include "grfmgr.hxx"
@@ -674,31 +673,11 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz,
const sal_uInt32 nOldDrawMode = pOut->GetDrawMode();
BOOL bCropped = aAttr.IsCropped();
BOOL bCached = FALSE;
- BOOL bWritingPdfLinkedGraphic = FALSE;
BOOL bRet;
// #i29534# Provide output rects for PDF writer
Rectangle aCropRect;
- // #i29534# Notify PDF writer about linked graphic (if any)
- vcl::ExtOutDevData* pExtOutDevData = pOut->GetExtOutDevData();
- if( pExtOutDevData && pExtOutDevData->ISA(vcl::PDFExtOutDevData) )
- {
- // #i29534# Only delegate image handling to PDF, if no special
- // treatment is necessary
- if( GetGraphic().IsLink() &&
- aSz.Width() > 0L &&
- aSz.Height() > 0L &&
- !aAttr.IsSpecialDrawMode() &&
- !aAttr.IsMirrored() &&
- !aAttr.IsRotated() &&
- !aAttr.IsAdjusted() )
- {
- bWritingPdfLinkedGraphic = TRUE;
- static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->BeginGroup();
- }
- }
-
if( !( GRFMGR_DRAW_USE_DRAWMODE_SETTINGS & nFlags ) )
pOut->SetDrawMode( nOldDrawMode & ( ~( DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT ) ) );
@@ -749,16 +728,6 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz,
pOut->SetDrawMode( nOldDrawMode );
- // #i29534# Notify PDF writer about linked graphic (if any)
- if( bWritingPdfLinkedGraphic )
- {
- static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->EndGroup(
- const_cast< Graphic& >(GetGraphic()),
- aAttr.GetTransparency(),
- Rectangle( aPt, aSz ),
- aCropRect );
- }
-
// #i29534# Moved below OutDev restoration, to avoid multiple swap-ins
// (code above needs to call GetGraphic twice)
if( bCached )
diff --git a/i18npool/inc/breakiterator_ctl.hxx b/i18npool/inc/breakiterator_ctl.hxx
index 9e753e8ae16f..3e687b5e8e68 100644
--- a/i18npool/inc/breakiterator_ctl.hxx
+++ b/i18npool/inc/breakiterator_ctl.hxx
@@ -58,6 +58,7 @@ protected:
sal_Int32* nextCellIndex;
sal_Int32* previousCellIndex;
sal_Int32 cellIndexSize;
+
virtual void SAL_CALL makeIndex(const rtl::OUString& text, sal_Int32 pos) throw(com::sun::star::uno::RuntimeException);
};
diff --git a/i18npool/inc/breakiterator_unicode.hxx b/i18npool/inc/breakiterator_unicode.hxx
index 3a0720f27545..654df424b237 100644
--- a/i18npool/inc/breakiterator_unicode.hxx
+++ b/i18npool/inc/breakiterator_unicode.hxx
@@ -86,12 +86,16 @@ protected:
const sal_Char *cBreakIterator, *wordRule, *lineRule;
Boundary result; // for word break iterator
- struct {
+ struct BI_Data {
UnicodeString aICUText;
icu::BreakIterator *aBreakIterator;
+
+ BI_Data() : aICUText(), aBreakIterator(NULL) {}
} character, word, sentence, line, *icuBI;
+
com::sun::star::lang::Locale aLocale;
sal_Int16 aBreakType, aWordType;
+
void SAL_CALL loadICUBreakIterator(const com::sun::star::lang::Locale& rLocale,
sal_Int16 rBreakType, sal_Int16 rWordType, const sal_Char* name, const rtl::OUString& rText) throw(com::sun::star::uno::RuntimeException);
};
diff --git a/i18npool/inc/xdictionary.hxx b/i18npool/inc/xdictionary.hxx
index 32ffdbbfe377..04c5836aaaea 100644
--- a/i18npool/inc/xdictionary.hxx
+++ b/i18npool/inc/xdictionary.hxx
@@ -45,11 +45,13 @@ namespace com { namespace sun { namespace star { namespace i18n {
// cache structure.
struct WordBreakCache {
- sal_Bool equals(const sal_Unicode *str, Boundary& boundary); // checking cached string
sal_Int32 length; // contents length saved here.
sal_Unicode *contents; // seperated segment contents.
sal_Int32* wordboundary; // word boundaries in segments.
sal_Int32 size; // size of wordboundary
+
+ WordBreakCache();
+ sal_Bool equals(const sal_Unicode *str, Boundary& boundary); // checking cached string
};
class xdictionary
diff --git a/i18npool/source/breakiterator/breakiterator_cjk.cxx b/i18npool/source/breakiterator/breakiterator_cjk.cxx
index 3d684b8788df..3a44c02edc23 100644
--- a/i18npool/source/breakiterator/breakiterator_cjk.cxx
+++ b/i18npool/source/breakiterator/breakiterator_cjk.cxx
@@ -46,7 +46,9 @@ namespace com { namespace sun { namespace star { namespace i18n {
// class BreakIterator_CJK
// ----------------------------------------------------;
-BreakIterator_CJK::BreakIterator_CJK() : dict(NULL)
+BreakIterator_CJK::BreakIterator_CJK() :
+ dict( NULL ),
+ hangingCharacters()
{
cBreakIterator = "com.sun.star.i18n.BreakIterator_CJK";
}
diff --git a/i18npool/source/breakiterator/breakiterator_ctl.cxx b/i18npool/source/breakiterator/breakiterator_ctl.cxx
index a42014615f1a..0e1bee869cac 100644
--- a/i18npool/source/breakiterator/breakiterator_ctl.cxx
+++ b/i18npool/source/breakiterator/breakiterator_ctl.cxx
@@ -45,11 +45,14 @@ namespace com { namespace sun { namespace star { namespace i18n {
/**
* Constructor.
*/
-BreakIterator_CTL::BreakIterator_CTL()
+BreakIterator_CTL::BreakIterator_CTL() :
+ cachedText(),
+ nextCellIndex( NULL ),
+ previousCellIndex( NULL ),
+ cellIndexSize( 512 )
{
cBreakIterator = "com.sun.star.i18n.BreakIterator_CTL";
// to improve performance, alloc big enough memory in construct.
- cellIndexSize = 512;
nextCellIndex = (sal_Int32*) calloc(cellIndexSize, sizeof(sal_Int32));
previousCellIndex = (sal_Int32*) calloc(cellIndexSize, sizeof(sal_Int32));
memset(nextCellIndex, 0, cellIndexSize * sizeof(sal_Int32));
diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx
index b832bb02e7e9..f0710c996858 100644
--- a/i18npool/source/breakiterator/breakiterator_unicode.cxx
+++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx
@@ -51,20 +51,23 @@ namespace com { namespace sun { namespace star { namespace i18n {
#define ERROR ::com::sun::star::uno::RuntimeException()
-#define ImplementName "com.sun.star.i18n.BreakIterator_Unicode";
-
-
-BreakIterator_Unicode::BreakIterator_Unicode()
+//#define ImplementName "com.sun.star.i18n.BreakIterator_Unicode";
+
+
+BreakIterator_Unicode::BreakIterator_Unicode() :
+ cBreakIterator( "com.sun.star.i18n.BreakIterator_Unicode" ), // implementation name
+ wordRule( "word" ),
+ lineRule( "line" ),
+ result(),
+ character(),
+ word(),
+ sentence(),
+ line(),
+ icuBI( NULL ),
+ aLocale(),
+ aBreakType(),
+ aWordType()
{
- wordRule="word";
- lineRule="line";
- character.aBreakIterator=word.aBreakIterator=sentence.aBreakIterator=line.aBreakIterator=NULL;
- character.aICUText=UnicodeString();
- word.aICUText=UnicodeString();
- sentence.aICUText=UnicodeString();
- line.aICUText=UnicodeString();
- cBreakIterator = ImplementName;
- icuBI=NULL;
}
diff --git a/i18npool/source/breakiterator/data/dict_word.txt b/i18npool/source/breakiterator/data/dict_word.txt
index 4c5c80823041..367a82db9e6f 100644
--- a/i18npool/source/breakiterator/data/dict_word.txt
+++ b/i18npool/source/breakiterator/data/dict_word.txt
@@ -34,7 +34,8 @@ $ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCT
$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:]
[:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:]
- [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] ];
+ [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:]
+ [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ];
$SufixLetter = [:name= FULL STOP:];
diff --git a/i18npool/source/breakiterator/data/dict_word_dash.txt b/i18npool/source/breakiterator/data/dict_word_nodash.txt
index 7f861c7911ca..4c5c80823041 100644
--- a/i18npool/source/breakiterator/data/dict_word_dash.txt
+++ b/i18npool/source/breakiterator/data/dict_word_nodash.txt
@@ -34,8 +34,7 @@ $ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCT
$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:]
[:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:]
- [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:]
- [:name = HYPHEN-MINUS:] [:name = EN DASH:] ];
+ [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:] ];
$SufixLetter = [:name= FULL STOP:];
diff --git a/i18npool/source/breakiterator/data/dict_word_prepostdash.txt b/i18npool/source/breakiterator/data/dict_word_prepostdash.txt
new file mode 100644
index 000000000000..1bf94451fae2
--- /dev/null
+++ b/i18npool/source/breakiterator/data/dict_word_prepostdash.txt
@@ -0,0 +1,157 @@
+#
+# Copyright (C) 2002-2003, International Business Machines Corporation and others.
+# All Rights Reserved.
+#
+# file: dict_word.txt
+#
+# ICU Word Break Rules
+# See Unicode Standard Annex #29.
+# These rules are based on Version 4.0.0, dated 2003-04-17
+#
+
+
+
+####################################################################################
+#
+# Character class definitions from TR 29
+#
+####################################################################################
+$Katakana = [[:Script = KATAKANA:] [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:]
+ [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:]
+ [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:]
+ [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]];
+
+$Ideographic = [:Ideographic:];
+$Hangul = [:Script = HANGUL:];
+
+# list of dashes or hyphens that should be accepted as part of the word if a single one of these
+# pre- or postfixes a word. E.g. in German: "Arbeits-" or "-nehmer" where that hyphen needs to
+# be part of the word in order to have it properly spell checked etc.
+$PrePostDashHyphen = [ [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ];
+
+
+$ALetter = [\u0002 [:Alphabetic:] [:name= COMMERCIAL AT:] [:name= HEBREW PUNCTUATION GERESH:]
+ - $Ideographic
+ - $Katakana
+ - $Hangul
+ - [:Script = Thai:]
+ - [:Script = Lao:]
+ - [:Script = Hiragana:]];
+
+$MidLetter = [[:name = APOSTROPHE:] [:name = GRAVE ACCENT:] \u0084 [:name = SOFT HYPHEN:] [:name = MIDDLE DOT:] [:name = GREEK TONOS:] [:name= FULL STOP:]
+ [:name = HEBREW PUNCTUATION GERSHAYIM:] [:name = DOUBLE VERTICAL LINE:] [:name = LEFT SINGLE QUOTATION MARK:]
+ [:name = RIGHT SINGLE QUOTATION MARK:] [:name = HYPHENATION POINT:] [:name = PRIME:]
+ [:name = HYPHEN-MINUS:] [:name = EN DASH:] [:name = EM DASH:] ];
+
+$SufixLetter = [:name= FULL STOP:];
+
+
+$MidNum = [[:LineBreak = Infix_Numeric:] [:name= COMMERCIAL AT:] \u0084 [:name = GREEK TONOS:] [:name = ARABIC DECIMAL SEPARATOR:]
+ [:name = LEFT SINGLE QUOTATION MARK:] [:name = RIGHT SINGLE QUOTATION MARK:] [:name = SINGLE HIGH-REVERSED-9 QUOTATION MARK:]
+ [:name = PRIME:]];
+$Numeric = [:LineBreak = Numeric:];
+
+
+$TheZWSP = \u200b;
+
+#
+# Character Class Definitions.
+# The names are those from TR29.
+#
+$CR = \u000d;
+$LF = \u000a;
+$Control = [[[:Zl:] [:Zp:] [:Cc:] [:Cf:]] - $TheZWSP];
+$Extend = [[:Grapheme_Extend = TRUE:]];
+
+
+
+
+####################################################################################
+#
+# Word Break Rules. Definitions and Rules specific to word break begin Here.
+#
+####################################################################################
+
+$Format = [[:Cf:] - $TheZWSP];
+
+
+
+# Rule 3: Treat a grapheme cluster as if it were a single character.
+# Hangul Syllables are easier to deal with here than they are in Grapheme Clusters
+# because we don't need to find the boundaries between adjacent syllables -
+# they won't be word boundaries.
+#
+
+
+#
+# "Extended" definitions. Grapheme Cluster + Format Chars, treated like the base char.
+#
+$ALetterEx = $ALetter $Extend*;
+$NumericEx = $Numeric $Extend*;
+$MidNumEx = $MidNum $Extend*;
+$MidLetterEx = $MidLetter $Extend*;
+$SufixLetterEx= $SufixLetter $Extend*;
+$KatakanaEx = $Katakana $Extend*;
+$IdeographicEx= $Ideographic $Extend*;
+$HangulEx = $Hangul $Extend*;
+$FormatEx = $Format $Extend*;
+
+
+#
+# Numbers. Rules 8, 11, 12 form the TR.
+#
+$NumberSequence = $NumericEx ($FormatEx* $MidNumEx? $FormatEx* $NumericEx)*;
+$NumberSequence {100};
+
+#
+# Words. Alpha-numerics. Rule 5, 6, 7, 9, 10
+# - must include at least one letter.
+# - may include both letters and numbers.
+# - may include MideLetter, MidNumber punctuation.
+#
+# At most one leading or trailing dash/hyphen should be accepted as well.
+# E.g. in German: "Arbeits-" or "-nehmer" where that hyphen needs to
+# be part of the word in order to have it properly spell checked etc.
+$LetterSequence = $PrePostDashHyphen? $ALetterEx ($FormatEx* $MidLetterEx? $FormatEx* $ALetterEx)* $PrePostDashHyphen?; # rules #6, #7
+($NumberSequence $FormatEx*)? $LetterSequence ($FormatEx* ($NumberSequence | $LetterSequence))* $SufixLetterEx? {200};
+
+[[:P:][:S:]]*;
+
+#
+# Do not break between Katakana. Rule #13.
+#
+$KatakanaEx ($FormatEx* $KatakanaEx)* {300};
+[:Hiragana:] $Extend* {300};
+
+#
+# Ideographic Characters. Stand by themselves as words.
+# Separated from the "Everything Else" rule, below, only so that they
+# can be tagged with a return value. TODO: is this what we want?
+#
+$IdeographicEx ($FormatEx* $IdeographicEx)* {400};
+$HangulEx ($FormatEx* $HangulEx)* {400};
+
+#
+# Everything Else, with no tag.
+# Non-Control chars combine with $Extend (combining) chars.
+# Controls are do not.
+#
+[^$Control [:Ideographic:]] $Extend*;
+$CR $LF;
+
+#
+# Reverse Rules. Back up over any of the chars that can group together.
+# (Reverse rules do not need to be exact; they can back up too far,
+# but must back up at least enough, and must stop on a boundary.)
+#
+
+# NonStarters are the set of all characters that can appear at the 2nd - nth position of
+# a word. (They may also be the first.) The reverse rule skips over these, until it
+# reaches something that can only be the start (and probably only) char in a "word".
+# A space or punctuation meets the test.
+#
+$NonStarters = [$Numeric $ALetter $Katakana $Ideographic $Hangul [:P:] [:S:] $MidLetter $MidNum $SufixLetter $Extend $Format];
+
+#!.*;
+! ($NonStarters* | \n \r) .;
+
diff --git a/i18npool/source/breakiterator/makefile.mk b/i18npool/source/breakiterator/makefile.mk
index 7ba9cd3e753d..50e437e98b91 100644
--- a/i18npool/source/breakiterator/makefile.mk
+++ b/i18npool/source/breakiterator/makefile.mk
@@ -93,7 +93,7 @@ $(MISC)$/%_brk.c : $(MISC)$/%.brk
# The output of gencmn generates warnings under Windows. We want to minimize the patches to external tools,
# so the output (OpenOffice_icu_dat.c) is changed here to include a pragma to disable the warnings.
# Output of gencmn is redirected to OpenOffice_icu_tmp.c with the -t switch.
-$(MISC)$/OpenOffice_%.c :
+$(MISC)$/OpenOffice_%.c : $(MY_BRK_BRKFILES:s/.brk/_brk.c/)
$(WRAPCMD) $(GENCMN) -n OpenOffice -t tmp -S -d $(MISC) O $(mktmp $(subst,$(MISC)$/, $(MY_BRK_BRKFILES:t"\n")))
echo $(USQ)#ifdef _MSC_VER$(USQ) > $@
echo $(USQ)#pragma warning( disable : 4229 4668 )$(USQ) >> $@
diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx
index fb832f0b6468..f286dd2449ac 100644
--- a/i18npool/source/breakiterator/xdictionary.cxx
+++ b/i18npool/source/breakiterator/xdictionary.cxx
@@ -54,7 +54,21 @@ namespace com { namespace sun { namespace star { namespace i18n {
extern "C" { static void SAL_CALL thisModule() {} }
-xdictionary::xdictionary(const sal_Char *lang)
+xdictionary::xdictionary(const sal_Char *lang) :
+ existMark( NULL ),
+ index1( NULL ),
+ index2( NULL ),
+ lenArray( NULL ),
+ dataArea( NULL ),
+ hModule( NULL ),
+ boundary(),
+ japaneseWordBreak( sal_False )
+#if USE_CELL_BOUNDARY_CODE
+ // For CTL breakiterator, where the word boundary should not be inside cell.
+ ,
+ useCellBoundary( sal_False ),
+ cellBoundary( NULL )
+#endif
{
index1 = 0;
#ifdef SAL_DLLPREFIX
@@ -92,6 +106,7 @@ xdictionary::xdictionary(const sal_Char *lang)
#if USE_CELL_BOUNDARY_CODE
useCellBoundary = sal_False;
+ cellBoundary = NULL;
#endif
japaneseWordBreak = sal_False;
}
@@ -149,6 +164,19 @@ sal_Int32 xdictionary::getLongestMatch(const sal_Unicode* str, sal_Int32 sLen) {
return 0;
}
+
+/*
+ * c-tor
+ */
+
+WordBreakCache::WordBreakCache() :
+ length( 0 ),
+ contents( NULL ),
+ wordboundary( NULL ),
+ size( 0 )
+{
+}
+
/*
* Compare two unicode string,
*/
diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx
index 96eee0772bc1..50b61eae5cf1 100644
--- a/i18npool/source/calendar/calendar_gregorian.cxx
+++ b/i18npool/source/calendar/calendar_gregorian.cxx
@@ -148,10 +148,42 @@ void SAL_CALL
Calendar_gregorian::init(Era *_eraArray)
{
cCalendar = "com.sun.star.i18n.Calendar_gregorian";
+
+ // #i102356# With icu::Calendar::createInstance(UErrorCode) in a Thai
+ // th_TH system locale we accidentally used a Buddhist calendar. Though
+ // the ICU documentation says that should be the case only for
+ // th_TH_TRADITIONAL (and ja_JP_TRADITIONAL Gengou), a plain th_TH
+ // already triggers that behavior, ja_JP does not. Strange enough,
+ // passing a th_TH locale to the calendar creation doesn't trigger
+ // this.
+ // See also http://userguide.icu-project.org/datetime/calendar
+
+ // Whatever ICU offers as the default calendar for a locale, ensure we
+ // have a Gregorian calendar as requested.
+
+ /* XXX: with the current implementation the aLocale member variable is
+ * not set prior to loading a calendar from locale data. This
+ * creates an empty (root) locale for ICU, but at least the correct
+ * calendar is used. The language part must not be NULL (respectively
+ * not all, language and country and variant), otherwise the current
+ * default locale would be used again and the calendar keyword ignored.
+ * */
+ icu::Locale aIcuLocale( "", NULL, NULL, "calendar=gregorian");
+
UErrorCode status;
- body = icu::Calendar::createInstance(status = U_ZERO_ERROR);
+ body = icu::Calendar::createInstance( aIcuLocale, status = U_ZERO_ERROR);
if (!body || !U_SUCCESS(status)) throw ERROR;
+#if 0
+ {
+ icu::Locale loc;
+ loc = body->getLocale( ULOC_ACTUAL_LOCALE, status = U_ZERO_ERROR);
+ fprintf( stderr, "\nICU calendar actual locale: %s\n", loc.getName());
+ loc = body->getLocale( ULOC_VALID_LOCALE, status = U_ZERO_ERROR);
+ fprintf( stderr, "ICU calendar valid locale: %s\n", loc.getName());
+ }
+#endif
+
eraArray=_eraArray;
}
diff --git a/i18npool/source/localedata/data/de_DE.xml b/i18npool/source/localedata/data/de_DE.xml
index 295b826a5e9f..a83b3dbb791d 100644
--- a/i18npool/source/localedata/data/de_DE.xml
+++ b/i18npool/source/localedata/data/de_DE.xml
@@ -328,7 +328,14 @@
</LC_CURRENCY>
<LC_TRANSLITERATION ref="en_US"/>
<LC_MISC>
- <ReservedWords>
+ <BreakIteratorRules>
+ <EditMode/>
+ <DictionaryMode>dict_word_prepostdash</DictionaryMode>
+ <WordCountMode/>
+ <CharacterMode/>
+ <LineMode/>
+ </BreakIteratorRules>
+ <ReservedWords>
<trueWord>wahr</trueWord>
<falseWord>falsch</falseWord>
<quarter1Word>1. Quartal</quarter1Word>
diff --git a/i18npool/source/localedata/data/nl_NL.xml b/i18npool/source/localedata/data/nl_NL.xml
index eedfdc146b5e..5a91c9c3e42e 100644
--- a/i18npool/source/localedata/data/nl_NL.xml
+++ b/i18npool/source/localedata/data/nl_NL.xml
@@ -360,20 +360,27 @@
</LC_CURRENCY>
<LC_TRANSLITERATION ref="en_US"/>
<LC_MISC>
-<ReservedWords>
-<trueWord>waar</trueWord>
-<falseWord>onwaar</falseWord>
-<quarter1Word>1ste kwartaal</quarter1Word>
-<quarter2Word>2de kwartaal</quarter2Word>
-<quarter3Word>3de kwartaal</quarter3Word>
-<quarter4Word>4de kwartaal</quarter4Word>
-<aboveWord>boven</aboveWord>
-<belowWord>onder</belowWord>
-<quarter1Abbreviation>K1</quarter1Abbreviation>
-<quarter2Abbreviation>K2</quarter2Abbreviation>
-<quarter3Abbreviation>K3</quarter3Abbreviation>
-<quarter4Abbreviation>K4</quarter4Abbreviation>
-</ReservedWords>
+ <BreakIteratorRules>
+ <EditMode/>
+ <DictionaryMode>dict_word_prepostdash</DictionaryMode>
+ <WordCountMode/>
+ <CharacterMode/>
+ <LineMode/>
+ </BreakIteratorRules>
+ <ReservedWords>
+ <trueWord>waar</trueWord>
+ <falseWord>onwaar</falseWord>
+ <quarter1Word>1ste kwartaal</quarter1Word>
+ <quarter2Word>2de kwartaal</quarter2Word>
+ <quarter3Word>3de kwartaal</quarter3Word>
+ <quarter4Word>4de kwartaal</quarter4Word>
+ <aboveWord>boven</aboveWord>
+ <belowWord>onder</belowWord>
+ <quarter1Abbreviation>K1</quarter1Abbreviation>
+ <quarter2Abbreviation>K2</quarter2Abbreviation>
+ <quarter3Abbreviation>K3</quarter3Abbreviation>
+ <quarter4Abbreviation>K4</quarter4Abbreviation>
+ </ReservedWords>
</LC_MISC>
<LC_NumberingLevel ref="en_US"/>
<LC_OutLineNumberingLevel ref="en_US"/>
diff --git a/i18npool/source/localedata/data/pl_PL.xml b/i18npool/source/localedata/data/pl_PL.xml
index 4119060ea7df..195689666247 100644
--- a/i18npool/source/localedata/data/pl_PL.xml
+++ b/i18npool/source/localedata/data/pl_PL.xml
@@ -326,13 +326,6 @@
</LC_CURRENCY>
<LC_TRANSLITERATION ref="en_US"/>
<LC_MISC>
- <BreakIteratorRules>
- <EditMode/>
- <DictionaryMode>dict_word_dash</DictionaryMode>
- <WordCountMode/>
- <CharacterMode/>
- <LineMode/>
- </BreakIteratorRules>
<ReservedWords>
<trueWord>prawda</trueWord>
<falseWord>fałsz</falseWord>
diff --git a/i18npool/source/localedata/data/sv_SE.xml b/i18npool/source/localedata/data/sv_SE.xml
index 333690a0ef09..211f95c3e894 100644
--- a/i18npool/source/localedata/data/sv_SE.xml
+++ b/i18npool/source/localedata/data/sv_SE.xml
@@ -315,6 +315,13 @@
</LC_CURRENCY>
<LC_TRANSLITERATION ref="en_US"/>
<LC_MISC>
+ <BreakIteratorRules>
+ <EditMode/>
+ <DictionaryMode>dict_word_prepostdash</DictionaryMode>
+ <WordCountMode/>
+ <CharacterMode/>
+ <LineMode/>
+ </BreakIteratorRules>
<ReservedWords>
<trueWord>sant</trueWord>
<falseWord>falskt</falseWord>
diff --git a/i18npool/source/paper/paper.cxx b/i18npool/source/paper/paper.cxx
index a81b9b370b8c..726a4c3bd898 100644
--- a/i18npool/source/paper/paper.cxx
+++ b/i18npool/source/paper/paper.cxx
@@ -63,7 +63,7 @@ struct PageDesc
(long)(((v) * 35.27777778) + 0.5)
#define IN2MM100( v ) \
- ((long)((v) * 2540))
+ ((long)(((v) * 2540) + 0.5))
#define MM2MM100( v ) \
((long)((v) * 100))
@@ -362,11 +362,16 @@ PaperInfo PaperInfo::getSystemDefaultPaper()
{
// if set to "use system", try to get locale from system
if( aLocaleStr.getLength() == 0 )
+ {
+ aArgs[ 0 ] <<= CREATE_OUSTRING( "org.openoffice.System/L10N/" );
+ xConfigNA.set( xConfigProv->createInstanceWithArguments(
+ CREATE_OUSTRING( "com.sun.star.configuration.ConfigurationAccess" ), aArgs ),
+ UNO_QUERY_THROW );
xConfigNA->getByName( CREATE_OUSTRING( "Locale" ) ) >>= aLocaleStr;
+ }
}
catch( Exception& ) {}
-
if (aLocaleStr.getLength() == 0)
aLocaleStr = CREATE_OUSTRING("en-US");
diff --git a/sax/inc/sax/fshelper.hxx b/sax/inc/sax/fshelper.hxx
index b1ce4ba39d1b..5223c253af91 100644
--- a/sax/inc/sax/fshelper.hxx
+++ b/sax/inc/sax/fshelper.hxx
@@ -39,11 +39,13 @@
#include <sax/fastattribs.hxx>
#include "sax/dllapi.h"
-#define FSNS(namespace, element) ((namespace << 16) | element)
-#define FSEND -1 // same as XML_TOKEN_INVALID
+#define FSNS(namespc, element) ((namespc << 16) | element)
+const sal_Int32 FSEND = -1; // same as XML_TOKEN_INVALID
namespace sax_fastparser {
+enum MergeMarksEnum { MERGE_MARKS_APPEND = 0, MERGE_MARKS_PREPEND = 1, MERGE_MARKS_POSTPONE = 2 };
+
typedef ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList > XFastAttributeListRef;
class FastSaxSerializer;
@@ -82,6 +84,10 @@ public:
inline void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
{ singleElementV(FSNS( namespaceTokenId, elementTokenId), xAttrList); }
+ void startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList);
+ inline void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
+ { startElementV( FSNS( namespaceTokenId, elementTokenId ), xAttrList ); }
+
FastSerializerHelper* write(const char* value);
FastSerializerHelper* write(const rtl::OUString& value);
FastSerializerHelper* write(sal_Int32 value);
@@ -99,7 +105,7 @@ public:
FastAttributeList *createAttrList();
void mark();
- void mergeTopMarks( bool bPrepend = false );
+ void mergeTopMarks( MergeMarksEnum eMergeType = MERGE_MARKS_APPEND );
private:
diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx
index 4603ceed3343..da4fdfb261db 100644
--- a/sax/source/tools/fastserializer.cxx
+++ b/sax/source/tools/fastserializer.cxx
@@ -326,43 +326,29 @@ namespace sax_fastparser {
void FastSaxSerializer::mark()
{
- maMarkStack.push( Int8Sequence() );
+ maMarkStack.push( ForMerge() );
}
- void FastSaxSerializer::mergeTopMarks( bool bPrepend )
+ void FastSaxSerializer::mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType )
{
if ( maMarkStack.empty() )
return;
if ( maMarkStack.size() == 1 )
{
- mxOutputStream->writeBytes( maMarkStack.top() );
+ mxOutputStream->writeBytes( maMarkStack.top().getData() );
maMarkStack.pop();
+ return;
}
- else
- {
- const Int8Sequence aMerge( maMarkStack.top() );
- maMarkStack.pop();
- sal_Int32 nMergeLen = aMerge.getLength();
- if ( nMergeLen > 0 )
- {
- Int8Sequence &rTop = maMarkStack.top();
- sal_Int32 nTopLen = rTop.getLength();
-
- rTop.realloc( nTopLen + nMergeLen );
- if ( bPrepend )
- {
- // prepend the aMerge to the rTop
- memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen );
- memcpy( rTop.getArray(), aMerge.getConstArray(), nMergeLen );
- }
- else
- {
- // append the aMerge to the rTop
- memcpy( rTop.getArray() + nTopLen, aMerge.getConstArray(), nMergeLen );
- }
- }
+ const Int8Sequence aMerge( maMarkStack.top().getData() );
+ maMarkStack.pop();
+
+ switch ( eMergeType )
+ {
+ case MERGE_MARKS_APPEND: maMarkStack.top().append( aMerge ); break;
+ case MERGE_MARKS_PREPEND: maMarkStack.top().prepend( aMerge ); break;
+ case MERGE_MARKS_POSTPONE: maMarkStack.top().postpone( aMerge ); break;
}
}
@@ -371,15 +357,50 @@ namespace sax_fastparser {
if ( maMarkStack.empty() )
mxOutputStream->writeBytes( aData );
else
+ maMarkStack.top().append( aData );
+ }
+
+ FastSaxSerializer::Int8Sequence& FastSaxSerializer::ForMerge::getData()
+ {
+ merge( maData, maPostponed, true );
+ maPostponed.realloc( 0 );
+
+ return maData;
+ }
+
+ void FastSaxSerializer::ForMerge::prepend( const Int8Sequence &rWhat )
+ {
+ merge( maData, rWhat, false );
+ }
+
+ void FastSaxSerializer::ForMerge::append( const Int8Sequence &rWhat )
+ {
+ merge( maData, rWhat, true );
+ }
+
+ void FastSaxSerializer::ForMerge::postpone( const Int8Sequence &rWhat )
+ {
+ merge( maPostponed, rWhat, true );
+ }
+
+ void FastSaxSerializer::ForMerge::merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend )
+ {
+ sal_Int32 nMergeLen = rMerge.getLength();
+ if ( nMergeLen > 0 )
{
- sal_Int32 nDataLen = aData.getLength();
- if ( nDataLen > 0 )
- {
- Int8Sequence &rTop = maMarkStack.top();
- sal_Int32 nTopLen = rTop.getLength();
+ sal_Int32 nTopLen = rTop.getLength();
- rTop.realloc( nTopLen + nDataLen );
- memcpy( rTop.getArray() + nTopLen, aData.getConstArray(), nDataLen );
+ rTop.realloc( nTopLen + nMergeLen );
+ if ( bAppend )
+ {
+ // append the rMerge to the rTop
+ memcpy( rTop.getArray() + nTopLen, rMerge.getConstArray(), nMergeLen );
+ }
+ else
+ {
+ // prepend the rMerge to the rTop
+ memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen );
+ memcpy( rTop.getArray(), rMerge.getConstArray(), nMergeLen );
}
}
}
diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx
index 132b495c0a8b..b0baf8af5df8 100644
--- a/sax/source/tools/fastserializer.hxx
+++ b/sax/source/tools/fastserializer.hxx
@@ -45,6 +45,7 @@
#include <stack>
#include "sax/dllapi.h"
+#include "sax/fshelper.hxx"
#define SERIALIZER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastSerializer"
#define SERIALIZER_SERVICE_NAME "com.sun.star.xml.sax.FastSerializer"
@@ -112,23 +113,45 @@ public:
/** Merge 2 topmost marks.
- There are 2 possibilities - prepend the top before the second top-most
- mark, or append it; prepending brings the possibility to switch parts
- of the output.
+ There are 3 possibilities - prepend the top before the second top-most
+ mark, append it, or append it later; prepending brings the possibility
+ to switch parts of the output, appending later allows to write some
+ output in advance.
Writes the result to the output stream if the mark stack becomes empty
by the operation.
+ When the MERGE_MARKS_POSTPONE is specified, the merge happens just
+ before the next merge.
+
@see mark()
*/
- void mergeTopMarks( bool bPrepend = false );
+ void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND );
private:
::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream;
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxFastTokenHandler;
typedef ::com::sun::star::uno::Sequence< ::sal_Int8 > Int8Sequence;
- ::std::stack< Int8Sequence > maMarkStack;
+ class ForMerge
+ {
+ Int8Sequence maData;
+ Int8Sequence maPostponed;
+
+ public:
+ ForMerge() : maData(), maPostponed() {}
+
+ Int8Sequence& getData();
+
+ void prepend( const Int8Sequence &rWhat );
+ void append( const Int8Sequence &rWhat );
+ void postpone( const Int8Sequence &rWhat );
+
+ private:
+ static void merge( Int8Sequence &rTop, const Int8Sequence &rMerge, bool bAppend );
+ };
+
+ ::std::stack< ForMerge > maMarkStack;
void writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs );
void write( const ::rtl::OUString& s );
@@ -144,4 +167,3 @@ protected:
} // namespace sax_fastparser
#endif
-
diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx
index 594a60ba1d76..743f499fb4f0 100644
--- a/sax/source/tools/fshelper.cxx
+++ b/sax/source/tools/fshelper.cxx
@@ -114,6 +114,12 @@ void FastSerializerHelper::endElement(sal_Int32 elementTokenId)
mpSerializer->endFastElement(elementTokenId);
}
+void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
+{
+ mpSerializer->startFastElement(elementTokenId, xAttrList);
+}
+
+
void FastSerializerHelper::singleElement(const char* elementName, XFastAttributeListRef xAttrList)
{
mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList);
@@ -181,9 +187,9 @@ void FastSerializerHelper::mark()
mpSerializer->mark();
}
-void FastSerializerHelper::mergeTopMarks( bool bPrepend )
+void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType )
{
- mpSerializer->mergeTopMarks( bPrepend );
+ mpSerializer->mergeTopMarks( eMergeType );
}
FastAttributeList * FastSerializerHelper::createAttrList()
diff --git a/sot/inc/sot/exchange.hxx b/sot/inc/sot/exchange.hxx
index 68862367e4f0..0c235fffcdbb 100644
--- a/sot/inc/sot/exchange.hxx
+++ b/sot/inc/sot/exchange.hxx
@@ -196,10 +196,7 @@ public:
static ULONG RegisterFormatMimeType( const String& rMimeType );
static ULONG GetFormat( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
- static ULONG GetStaticNameFormat( const String& rName );
-
static String GetFormatName( ULONG nFormat );
- static String GetFormatStaticName( ULONG nFormat );
static sal_Bool GetFormatDataFlavor( ULONG nFormat, ::com::sun::star::datatransfer::DataFlavor& rFlavor );
static String GetFormatMimeType( ULONG nFormat );
static BOOL IsInternal( const SvGlobalName& );
@@ -216,14 +213,6 @@ public:
static ULONG RegisterSotFormatName( SotFormatStringId nId )
{ return nId; }
- // Anzahl der bereits registrierten Formate bzw. der hoechsten
- // registrierten ID abfragen (fuer System-Registrierung)
- // ACHTUNG: Die Algorithmen zur Registrierung beim System
- // verlassen sich darauf, dass die hier gelieferte maximale
- // Format-ID 'klein' ist, so dass eine Schleife ueber alle
- // Formate laufen kann.
- static ULONG GetMaxFormat( void );
-
// same for XTransferable interface
static USHORT GetExchangeAction(
// XTransferable
diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx
index 05de84bdfd46..6dedd84cdaeb 100644
--- a/sot/source/base/exchange.cxx
+++ b/sot/source/base/exchange.cxx
@@ -481,18 +481,6 @@ ULONG SotExchange::GetFormat( const DataFlavor& rFlavor )
/*************************************************************************
|*
-|* SotExchange::GetStaticNameFormat()
-|*
-|* Beschreibung CLIP.SDW
-*************************************************************************/
-ULONG SotExchange::GetStaticNameFormat( const String& rName )
-{
- // has to be changed to return the format for the static name (KA 27.09.2001)
- return SotExchange::RegisterFormatName( rName );
-}
-
-/*************************************************************************
-|*
|* SotExchange::GetFormatName()
|*
|* Beschreibung CLIP.SDW
@@ -508,28 +496,6 @@ String SotExchange::GetFormatName( ULONG nFormat )
return aRet;
}
-/*************************************************************************
-|*
-|* SotExchange::GetFormatStaticName()
-|*
-|* Beschreibung CLIP.SDW
-*************************************************************************/
-String SotExchange::GetFormatStaticName( ULONG nFormat )
-{
- // has to be changed to return the static format name (KA 27.09.2001)
- return SotExchange::GetFormatName( nFormat );
-}
-
-/*************************************************************************
-|*
-|* SotExchange::GetMaxFormat()
-|*
-*************************************************************************/
-ULONG SotExchange::GetMaxFormat( void )
-{
- return( SOT_FORMATSTR_ID_USER_END + InitFormats_Impl().Count() );
-}
-
BOOL SotExchange::IsInternal( const SvGlobalName& rName )
{
if ( rName == SvGlobalName(SO3_SW_CLASSID_60) ||
diff --git a/svtools/inc/docmspasswdrequest.hxx b/svtools/inc/docmspasswdrequest.hxx
new file mode 100644
index 000000000000..684bffe71760
--- /dev/null
+++ b/svtools/inc/docmspasswdrequest.hxx
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright IBM Corporation 2009.
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docmspasswdrequest.hxx,v $
+ * $Revision: 1.0 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX
+#define INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX
+
+#include "svtools/svldllapi.h"
+#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+#include <rtl/ustring.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+class MSAbortContinuation;
+class MSPasswordContinuation;
+
+class SVL_DLLPUBLIC RequestMSDocumentPassword : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+{
+ ::com::sun::star::uno::Any m_aRequest;
+
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
+ > m_lContinuations;
+
+ MSAbortContinuation* m_pAbort;
+ MSPasswordContinuation* m_pPassword;
+
+public:
+ RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName );
+
+ sal_Bool isAbort();
+ sal_Bool isPassword();
+
+ ::rtl::OUString getPassword();
+
+ virtual ::com::sun::star::uno::Any SAL_CALL getRequest()
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >
+ > SAL_CALL getContinuations()
+ throw( ::com::sun::star::uno::RuntimeException );
+};
+
+#endif /* INCLUDED_SVTOOLS_DOCMSPASSWDREQUEST_HXX */
diff --git a/svtools/inc/pch/precompiled_svtools.hxx b/svtools/inc/pch/precompiled_svtools.hxx
index 440bd04dce36..cab81cac04ec 100644
--- a/svtools/inc/pch/precompiled_svtools.hxx
+++ b/svtools/inc/pch/precompiled_svtools.hxx
@@ -227,6 +227,7 @@
#include <com/sun/star/system/XProxySettings.hpp>
#include <com/sun/star/system/XSystemShellExecute.hpp>
#include <com/sun/star/task/DocumentPasswordRequest.hpp>
+#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
#include <com/sun/star/task/MasterPasswordRequest.hpp>
#include <com/sun/star/task/NoMasterException.hpp>
#include <com/sun/star/task/PasswordRequestMode.hpp>
diff --git a/svtools/inc/svtools/optionsdrawinglayer.hxx b/svtools/inc/svtools/optionsdrawinglayer.hxx
index e0b287002f34..120cccfa4232 100644
--- a/svtools/inc/svtools/optionsdrawinglayer.hxx
+++ b/svtools/inc/svtools/optionsdrawinglayer.hxx
@@ -190,6 +190,15 @@ class SVL_DLLPUBLIC SvtOptionsDrawinglayer
void SetQuadratic3DRenderLimit(sal_uInt32 nNew);
void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew);
+ // #i97672# selection settings
+ sal_Bool IsTransparentSelection() const;
+ sal_uInt16 GetTransparentSelectionPercent() const;
+ sal_uInt16 GetSelectionMaximumLuminancePercent() const;
+
+ void SetTransparentSelection( sal_Bool bState );
+ void SetTransparentSelectionPercent( sal_uInt16 nPercent );
+ void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent );
+
//-------------------------------------------------------------------------------------------------------------
// private methods
//-------------------------------------------------------------------------------------------------------------
diff --git a/svtools/inc/svtools/svlbox.hxx b/svtools/inc/svtools/svlbox.hxx
index ba119263eff8..7371c2feee05 100644
--- a/svtools/inc/svtools/svlbox.hxx
+++ b/svtools/inc/svtools/svlbox.hxx
@@ -328,6 +328,9 @@ protected:
// wird an der Target-View aufgerufen (im Drop-Handler)
virtual void ReadDragServerInfo( const Point&,SvLBoxDDInfo* );
+ // invalidate children on enable/disable
+ virtual void StateChanged( StateChangedType );
+
virtual ULONG Insert( SvLBoxEntry* pEnt,SvLBoxEntry* pPar,ULONG nPos=LIST_APPEND);
virtual ULONG Insert( SvLBoxEntry* pEntry,ULONG nRootPos = LIST_APPEND );
void InsertTree( SvLBoxEntry* pTree, SvLBoxEntry* pTarget) {pModel->InsertTree( pTree, pTarget ); }
diff --git a/svtools/inc/svtools/table/abstracttablecontrol.hxx b/svtools/inc/svtools/table/abstracttablecontrol.hxx
new file mode 100644
index 000000000000..03bc0a999f7a
--- /dev/null
+++ b/svtools/inc/svtools/table/abstracttablecontrol.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+#define SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+
+#include <sal/types.h>
+#include <vcl/event.hxx>
+#include <vcl/seleng.hxx>
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ enum TableControlAction
+ {
+ /// moves the cursor in the table control one row up, if possible, by keeping the current column
+ cursorUp,
+ /// moves the cursor in the table control one row down, if possible, by keeping the current column
+ cursorDown,
+ /// moves the cursor in the table control one column to the left, if possible, by keeping the current row
+ cursorLeft,
+ /// moves the cursor in the table control one column to the right, if possible, by keeping the current row
+ cursorRight,
+ /// moves the cursor to the beginning of the current line
+ cursorToLineStart,
+ /// moves the cursor to the end of the current line
+ cursorToLineEnd,
+ /// moves the cursor to the first row, keeping the current column
+ cursorToFirstLine,
+ /// moves the cursor to the last row, keeping the current column
+ cursorToLastLine,
+ /// moves the cursor one page up, keeping the current column
+ cursorPageUp,
+ /// moves the cursor one page down, keeping the current column
+ cursorPageDown,
+ /// moves the cursor to the top-most, left-most cell
+ cursorTopLeft,
+ /// moves the cursor to the bottom-most, right-most cell
+ cursorBottomRight,
+ /// selects the row, where the actual cursor is
+ cursorSelectRow,
+ /// selects the rows, above the actual cursor is
+ cursorSelectRowUp,
+ /// selects the row, beneath the actual cursor is
+ cursorSelectRowDown,
+ /// selects the row, from the actual cursor till top
+ cursorSelectRowAreaTop,
+ /// selects the row, from the actual cursor till bottom
+ cursorSelectRowAreaBottom,
+
+
+ /// invalid and final enumeration value, not to be actually used
+ invalidTableControlAction
+ };
+
+ //====================================================================
+ //= IAbstractTableControl
+ //====================================================================
+ /** defines a callback interface to be implemented by a concrete table control
+ */
+ class SAL_NO_VTABLE IAbstractTableControl
+ {
+ public:
+ /** hides the cell cursor
+
+ The method cares for successive calls, that is, for every call to
+ ->hideCursor(), you need one call to ->showCursor. Only if the number
+ of both calls matches, the cursor is really shown.
+
+ @see showCursor
+ */
+ virtual void hideCursor() = 0;
+
+ /** shows the cell cursor
+
+ @see hideCursor
+ */
+ virtual void showCursor() = 0;
+
+ /** dispatches an action to the table control
+
+ @return
+ <TRUE/> if the action could be dispatched successfully, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the action, or impossibility
+ to execute the action at all (for instance moving up one row when already positioned
+ on the very first row).
+
+ @see TableControlAction
+ */
+ virtual bool dispatchAction( TableControlAction _eAction ) = 0;
+ /** to be called on mouse button up/down
+ @return
+ <TRUE/> if the click was in the visible area of the table control,
+ <FALSE/> otherwise.*/
+ virtual bool isClickInVisibleArea( const Point& _rPoint ) = 0;
+ /** returns selection engine*/
+ virtual SelectionEngine* getSelEngine() = 0;
+ virtual void setCursorAtCurrentCell(const Point& rPoint) = 0;
+
+ virtual ~IAbstractTableControl() {};
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
diff --git a/svtools/inc/svtools/table/defaultinputhandler.hxx b/svtools/inc/svtools/table/defaultinputhandler.hxx
new file mode 100644
index 000000000000..eb1c14b43a85
--- /dev/null
+++ b/svtools/inc/svtools/table/defaultinputhandler.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
+#define SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
+
+#include <svtools/table/tableinputhandler.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct DefaultInputHandler_Impl;
+
+ //====================================================================
+ //= DefaultInputHandler
+ //====================================================================
+ class DefaultInputHandler : public ITableInputHandler
+ {
+ friend class TableDataWindow;
+ private:
+ DefaultInputHandler_Impl* m_pImpl;
+
+ public:
+ DefaultInputHandler();
+ ~DefaultInputHandler();
+
+ virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt );
+ virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt );
+ virtual bool GetFocus ( IAbstractTableControl& _rControl );
+ virtual bool LoseFocus ( IAbstractTableControl& _rControl );
+ virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt );
+ virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt );
+ virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt );
+ virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt );
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_DEFAULTINPUTHANDLER_HXX
diff --git a/svtools/inc/svtools/table/gridtablerenderer.hxx b/svtools/inc/svtools/table/gridtablerenderer.hxx
new file mode 100644
index 000000000000..a935f6b7386e
--- /dev/null
+++ b/svtools/inc/svtools/table/gridtablerenderer.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
+#define SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
+
+#include <svtools/table/tablemodel.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct GridTableRenderer_Impl;
+
+ //====================================================================
+ //= GridTableRenderer
+ //====================================================================
+ /** a default implementation for the ->ITableRenderer interface
+
+ This class is able to paint a table grid, table headers, and cell
+ backgrounds according to the selected/active state of cells.
+
+ TODO update the documentation when it's decided whether this renderer
+ also does value handling
+ */
+ class GridTableRenderer : public ITableRenderer
+ {
+ private:
+ GridTableRenderer_Impl* m_pImpl;
+
+ public:
+ /** creates a table renderer associated with the given model
+
+ @param _rModel
+ the model which should be rendered. The caller is responsible
+ for lifetime control, that is, the model instance must live
+ at least as long as the renderer instance lives
+ */
+ GridTableRenderer( ITableModel& _rModel );
+ ~GridTableRenderer();
+
+ /** returns the index of the row currently being painted
+
+ According to the ->ITableRenderer interface, one call is made
+ to the renderer with a row to prepare (->PrepareRow()), and subsequent
+ calls do not carry the row index anymore, but are relative to the
+ row which has previously been prepared.
+
+ This method returns the index of the last row which has been prepared
+ */
+ RowPos getCurrentRow();
+
+ protected:
+ // ITableRenderer overridables
+ virtual void PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle );
+ virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle );
+ virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea,
+ const StyleSettings& _rStyle );
+ virtual void PaintRowHeader(
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText );
+ virtual void PaintCell( ColPos _nColumn,
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText );
+ virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect);
+ virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect);
+ };
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_GRIDTABLERENDERER_HXX
diff --git a/svtools/inc/svtools/table/tablecontrol.hxx b/svtools/inc/svtools/table/tablecontrol.hxx
new file mode 100644
index 000000000000..98fddcb7d9e1
--- /dev/null
+++ b/svtools/inc/svtools/table/tablecontrol.hxx
@@ -0,0 +1,174 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLECONTROL_HXX
+#define SVTOOLS_INC_TABLE_TABLECONTROL_HXX
+
+#include <svtools/table/tablemodel.hxx>
+#include <vcl/ctrl.hxx>
+#include <vcl/seleng.hxx>
+#include <svtools/table/tabledatawindow.hxx>
+//........................................................................
+
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+ class TableDataWindow;
+ //====================================================================
+ //= TableControl
+ //====================================================================
+ /** a basic control which manages table-like data, i.e. a number of cells
+ organized in <code>m</code> rows and <code>n</code> columns.
+
+ The control itself does not do any assumptions about the concrete data
+ it displays, this is encapsulated in an instance supporting the
+ ->ITableModel interface.
+
+ Also, the control does not do any assumptions about how the model's
+ content is rendered. This is the responsibility of a component
+ supporting the ->ITableRenderer interface (the renderer is obtained from
+ the model).
+
+ The control supports the concept of a <em>current</em> (or <em>active</em>
+ cell).
+
+ // TODO: scrolling?
+ */
+ class TableControl : public Control
+ {
+ private:
+ DECL_LINK( ImplMouseButtonDownHdl, MouseEvent* );
+ DECL_LINK( ImplMouseButtonUpHdl, MouseEvent* );
+
+ TableControl_Impl* m_pImpl;
+ public:
+ TableControl( Window* _pParent, WinBits _nStyle );
+ ~TableControl();
+
+ /// sets a new table model
+ void SetModel( PTableModel _pModel );
+ /// retrieves the current table model
+ PTableModel GetModel() const;
+
+ /// returns the top row, i.e. the first visible row
+ RowPos GetTopRow() const;
+ /// sets a new top row. The top row is the first visible row in the control
+ void SetTopRow( RowPos _nRow );
+
+ /** retrieves the current row
+
+ The current row is the one which contains the active cell.
+
+ @return
+ the row index of the active cell, or ->ROW_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ RowPos GetCurrentRow() const;
+
+ /** returns the row, which contains the input point*/
+
+ RowPos GetCurrentRow (const Point& rPoint);
+
+ /** retrieves the current column
+
+ The current col is the one which contains the active cell.
+
+ @return
+ the column index of the active cell, or ->COL_INVALID
+ if there is no active cell, e.g. because the table does
+ not contain any rows or columns.
+ */
+ ColPos GetCurrentColumn() const;
+
+ /** activates the cell at the given position
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ bool GoTo( ColPos _nColumn, RowPos _nRow );
+
+ /** moves the active cell to the given column, by keeping the active row
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ inline bool GoToColumn( ColPos _nColumn )
+ {
+ return GoTo( _nColumn, GetCurrentRow() );
+ }
+
+ /** moves the active cell to the given row, by keeping the active column
+
+ @return
+ <TRUE/> if the move was successful, <FALSE/> otherwise. Usual
+ failure conditions include some other instance vetoing the move,
+ or impossibility to execute the move at all (for instance because
+ of invalid coordinates).
+ */
+ bool GoToRow( RowPos _nRow )
+ {
+ return GoTo( GetCurrentColumn(), _nRow );
+ }
+ virtual void Resize();
+
+ /**invalidates the table if table has been changed e.g. new row added
+ */
+ void InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved);
+ /**gets the vector, which contains the selected rows
+ */
+ std::vector<RowPos> getSelectedRows();
+ /**after removing a row, updates the vector which contains the selected rows
+ if the row, which should be removed, is selected, it will be erased from the vector
+ */
+ void removeSelectedRow(RowPos _nRowPos);
+ SelectionEngine* getSelEngine();
+ TableDataWindow* getDataWindow();
+ // protected:
+ // Window overridables
+ virtual void GetFocus();
+ virtual void LoseFocus();
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ //virtual long Notify(NotifyEvent& rNEvt);
+
+ private:
+ TableControl(); // never implemented
+ TableControl( const TableControl& ); // never implemented
+ TableControl& operator=( const TableControl& ); // never implemented
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLECONTROL_HXX
diff --git a/svtools/inc/svtools/table/tabledatawindow.hxx b/svtools/inc/svtools/table/tabledatawindow.hxx
new file mode 100644
index 000000000000..fddbfdcd4a3c
--- /dev/null
+++ b/svtools/inc/svtools/table/tabledatawindow.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
+#define SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
+
+#ifndef _SV_WINDOW_HXX
+#include <vcl/window.hxx>
+#endif
+#include <vcl/seleng.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+ class TableFunctionSet;
+
+
+ //====================================================================
+ //= TableDataWindow
+ //====================================================================
+ /** the window containing the content area (including headers) of
+ a table control
+ */
+ class TableDataWindow : public Window
+ {
+ friend class TableFunctionSet;
+ private:
+ TableControl_Impl& m_rTableControl;
+ Link m_aMouseButtonDownHdl;
+ Link m_aMouseButtonUpHdl;
+
+ public:
+ TableDataWindow( TableControl_Impl& _rTableControl );
+ inline void SetMouseButtonDownHdl( const Link& rLink ) { m_aMouseButtonDownHdl = rLink; }
+ inline const Link& GetMouseButtonDownHdl() const { return m_aMouseButtonDownHdl; }
+ inline void SetMouseButtonUpHdl( const Link& rLink ) { m_aMouseButtonUpHdl = rLink; }
+ inline const Link& GetMouseButtonUpHdl() const { return m_aMouseButtonUpHdl; }
+
+ // Window overridables
+ virtual void Paint( const Rectangle& rRect );
+ virtual void MouseMove( const MouseEvent& rMEvt);
+ virtual void MouseButtonDown( const MouseEvent& rMEvt);
+ virtual void MouseButtonUp( const MouseEvent& rMEvt);
+
+ };
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_SOURCE_TABLE_TABLEDATAWINDOW_HXX
diff --git a/svtools/inc/svtools/table/tableinputhandler.hxx b/svtools/inc/svtools/table/tableinputhandler.hxx
new file mode 100644
index 000000000000..c0d3a2b5c18a
--- /dev/null
+++ b/svtools/inc/svtools/table/tableinputhandler.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
+#define SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
+
+#include <boost/shared_ptr.hpp>
+
+class MouseEvent;
+class KeyEvent;
+class HelpEvent;
+class CommandEvent;
+class NotifyEvent;
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class IAbstractTableControl;
+
+ //====================================================================
+ //= ITableInputHandler
+ //====================================================================
+ /** interface for components handling input in a ->TableControl
+ */
+ class ITableInputHandler
+ {
+ public:
+ // all those methods have the same semantics as the equal-named methods of ->Window,
+ // with the additional option to return a boolean value indicating whether
+ // the event should be further processed by the ->Window implementations (<FALSE/>),
+ // or whether it has been sufficiently handled by the ->ITableInputHandler instance
+ // (<FALSE/>).
+
+ virtual bool MouseMove ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonDown ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool MouseButtonUp ( IAbstractTableControl& _rControl, const MouseEvent& rMEvt ) = 0;
+ virtual bool KeyInput ( IAbstractTableControl& _rControl, const KeyEvent& rKEvt ) = 0;
+ virtual bool GetFocus ( IAbstractTableControl& _rControl ) = 0;
+ virtual bool LoseFocus ( IAbstractTableControl& _rControl ) = 0;
+ virtual bool RequestHelp ( IAbstractTableControl& _rControl, const HelpEvent& rHEvt ) = 0;
+ virtual bool Command ( IAbstractTableControl& _rControl, const CommandEvent& rCEvt ) = 0;
+ virtual bool PreNotify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0;
+ virtual bool Notify ( IAbstractTableControl& _rControl, NotifyEvent& rNEvt ) = 0;
+
+ virtual ~ITableInputHandler() { }
+ };
+ typedef ::boost::shared_ptr< ITableInputHandler > PTableInputHandler;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLEINPUTHANDLER_HXX
diff --git a/svtools/inc/svtools/table/tablemodel.hxx b/svtools/inc/svtools/table/tablemodel.hxx
new file mode 100644
index 000000000000..a1af1e1750ed
--- /dev/null
+++ b/svtools/inc/svtools/table/tablemodel.hxx
@@ -0,0 +1,454 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+#define SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+
+#include <svtools/table/tabletypes.hxx>
+#include <svtools/table/tablerenderer.hxx>
+#include <svtools/table/tableinputhandler.hxx>
+
+#include <sal/types.h>
+
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+
+ //====================================================================
+ //= cell data
+ //====================================================================
+ struct CellEntryType
+ {
+ String m_aStr;
+ //Image m_aImage;
+ //Control m_aControl;
+ CellEntryType( const String& _rStr ) :
+ m_aStr( _rStr )
+ {}
+ };
+
+ //typedef ::std::vector<CellEntryType*> CellColumnContent;
+ //vector, which contains text data for each cell
+ typedef ::std::vector<String> CellColumnContent;
+ //vector, which contains data for rows
+ typedef ::std::vector<CellColumnContent> CellContent;
+ //====================================================================
+ //= ScrollbarVisibility
+ //====================================================================
+ enum ScrollbarVisibility
+ {
+ /** enumeration value denoting that a scrollbar should never be visible, even
+ if needed normally
+ */
+ ScrollbarShowNever,
+ /** enumeration value denoting that a scrollbar should be visible when needed only
+ */
+ ScrollbarShowSmart,
+ /** enumeration value denoting that a scrollbar should always be visible, even
+ if not needed normally
+ */
+ ScrollbarShowAlways
+ };
+
+ //====================================================================
+ //= ITableModelListener
+ //====================================================================
+ /** declares an interface to be implemented by components interested in
+ changes in an ->ITableModel
+ */
+ class SAL_NO_VTABLE ITableModelListener
+ {
+ public:
+ //virtual void onTableModelChanged(PTableModel pTableModel) = 0;
+ /** notifies the listener that one or more rows have been inserted into
+ the table
+
+ @param first
+ the index of the first newly inserted row
+ @param last
+ the index of the last newly inserted row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsInserted( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more rows have been removed from
+ the table
+
+ @param first
+ the old index of the first removed row
+ @param last
+ the old index of the last removed row. Must not be smaller
+ than ->first
+ */
+ virtual void rowsRemoved( RowPos first, RowPos last ) = 0;
+
+ /** notifies the listener that one or more columns have been inserted into
+ the table
+
+ @param first
+ the index of the first newly inserted row
+ @param last
+ the index of the last newly inserted row. Must not be smaller
+ than ->first
+ */
+ virtual void columnsInserted( ColPos first, ColPos last ) = 0;
+
+ /** notifies the listener that one or more columns have been removed from
+ the table
+
+ @param first
+ the old index of the first removed row
+ @param last
+ the old index of the last removed row. Must not be smaller
+ than ->first
+ */
+ virtual void columnsRemoved( ColPos first, ColPos last ) = 0;
+
+ /** notifies the listener that a column in the table has moved
+
+ @param oldIndex
+ the old index of the column within the model
+ @param newIndex
+ the new index of the column within the model
+ */
+ virtual void columnMoved( ColPos oldIndex, ColPos newIndex ) = 0;
+
+ /** notifies the listener that a rectangular cell range in the table
+ has been updated
+
+ Listeners are required to discard any possibly cached information
+ they have about the cells in question, in particular any possibly
+ cached cell values.
+ */
+ virtual void cellsUpdated( ColPos firstCol, ColPos lastCol, RowPos firstRow, RowPos lastRow ) = 0;
+
+ /// deletes the listener instance
+ virtual ~ITableModelListener(){};
+ };
+ typedef ::boost::shared_ptr< ITableModelListener > PTableModelListener;
+
+ //====================================================================
+ //= IColumnModel
+ //====================================================================
+ /** interface to be implemented by table column models
+ */
+ class SAL_NO_VTABLE IColumnModel
+ {
+ public:
+ /** retrieves the ID of the column
+
+ The semantics of a column id is not defined. It's up to the
+ implementor of the ->IColumnModel, respectively the ->ITableModel
+ which provides the column models, to define such a semantics.
+
+ @return
+ the ID of the column. May be 0 if the table which the column
+ belongs to does not need and support column ids.
+
+ @see setID
+ */
+ virtual ColumnID getID() const = 0;
+
+ /** sets a new column ID
+
+ @return
+ <TRUE/> if setting the new ID was successfull. A possible error
+ conditions is if you try to set an ID which is already used
+ by another column within the same table.
+
+ @see getID
+ */
+ virtual bool setID( const ColumnID _nID ) = 0;
+
+ /** returns the name of the column
+
+ Column names should be human-readable, but not necessarily unique
+ within a given table.
+
+ @see setName
+ */
+ virtual String getName() const = 0;
+
+ /** sets a new name for the column
+
+ @see getName
+ */
+ virtual void setName( const String& _rName ) = 0;
+
+ /** determines whether the column can be resized
+
+ @see getMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual bool isResizable() const = 0;
+
+ /** declares the column as resizable or fixed in width
+
+ @see getMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual void setResizable( bool _bResizable ) = 0;
+
+ /** returns the width of the column, in 1/100 millimeters
+
+ The returned value must be a positive ->TableMetrics value.
+
+ It can also be COLWIDTH_FIT_TO_VIEW, to indicate that the width of the column
+ should automatically be adjusted to completely fit the view. For instance, a
+ model's last column could return this value, to indicate that it is to occupy
+ all horizontal space remaining in the view, after all other columns have been
+ layouted.
+
+ If there is more than one column with width COLWIDTH_FIT_TO_VIEW in a model,
+ they're all layouted equal-width.
+
+ If the columns with a read width (i.e. other than COLWIDTH_FIT_TO_VIEW) are,
+ in sum, wider than the view, then the view is free to choose a real width for any
+ columns which return COLWIDTH_FIT_TO_VIEW here.
+
+ @see setWidth
+ @see getMinWidth
+ @see getMaxWidth
+ @see COLWIDTH_FIT_TO_VIEW
+ */
+ virtual TableMetrics getWidth() const = 0;
+
+ /** sets a new width for the column
+
+ @param _nWidth
+ the new width, in 1/100 millimeters
+
+ @see getWidth
+ */
+ virtual void setWidth( TableMetrics _nWidth ) = 0;
+
+ /** returns the minimum width of the column, in 1/100 millimeters, or 0 if the column
+ does not have a minimal width
+
+ @see setMinWidth
+ @see getMaxWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMinWidth() const = 0;
+
+ /** sets the minimum width of the column, in 1/100 millimeters
+
+ @see getMinWidth
+ @see setMaxWidth
+ @see setWidth
+ */
+ virtual void setMinWidth( TableMetrics _nMinWidth ) = 0;
+
+ /** returns the maximum width of the column, in 1/100 millimeters, or 0 if the column
+ does not have a minimal width
+
+ @see setMaxWidth
+ @see getMinWidth
+ @see getWidth
+ */
+ virtual TableMetrics getMaxWidth() const = 0;
+
+ /** sets the maximum width of the column, in 1/100 millimeters
+
+ @see getMaxWidth
+ @see setMinWidth
+ @see setWidth
+ */
+ virtual void setMaxWidth( TableMetrics _nMaxWidth ) = 0;
+
+
+ /// deletes the column model instance
+ virtual ~IColumnModel() { }
+ };
+ typedef ::boost::shared_ptr< IColumnModel > PColumnModel;
+
+ //====================================================================
+ //= ITableModel
+ //====================================================================
+ /** declares the interface to implement by an abtract table model
+ */
+ class SAL_NO_VTABLE ITableModel
+ {
+ public:
+ /** returns the number of columns in the table
+ */
+ virtual TableSize getColumnCount() const = 0;
+
+ /** returns the number of rows in the table
+ */
+ virtual TableSize getRowCount() const = 0;
+
+ virtual void setColumnCount(TableSize _nColCount) = 0;
+ virtual void setRowCount(TableSize _nRowCount) = 0;
+
+ /** determines whether the table has column headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render column headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasColumnHeaders() const = 0;
+ /** sets whether the table should have row headers
+ @see IColumnRenderer
+ */
+ virtual void setRowHeaders( bool rowHeaders) = 0;
+
+ /** sets whether the table should have column headers
+ @see IColumnRenderer
+ */
+ virtual void setColumnHeaders( bool columnHeaders) = 0;
+
+ /** determines whether the table has row headers
+
+ If this method returns <TRUE/>, the renderer returned by
+ ->getRenderer must be able to render row headers.
+
+ @see IColumnRenderer
+ */
+ virtual bool hasRowHeaders() const = 0;
+
+ /** determines whether the given cell is editable
+
+ @see ICellEditor
+ @todo
+ */
+ virtual bool isCellEditable( ColPos col, RowPos row ) const = 0;
+
+ /** adds the given listener to the list of ->ITableModelListener's
+ */
+ virtual void addTableModelListener( const PTableModelListener& listener ) = 0;
+
+ /** revokes the given listener from the list of ->ITableModelListener's
+ */
+ virtual void removeTableModelListener( const PTableModelListener& listener ) = 0;
+
+ /** returns a model for a certain column
+
+ @param column
+ the index of the column in question. Must be greater than or
+ equal 0, and smaller than the return value of ->getColumnCount()
+
+ @return
+ the model of the column in question. Must not be <NULL/>
+
+ @see getColumnModelByID
+ */
+ virtual PColumnModel getColumnModel( ColPos column ) = 0;
+
+ /** finds a column model by ID
+
+ @param id
+ the id of the column which is to be looked up
+ @return
+ the column model with the given ID, or <NULL/> if there is
+ no such column
+ */
+ virtual PColumnModel getColumnModelByID( ColumnID id ) = 0;
+
+ /** returns a renderer which is able to paint the table represented
+ by this table model
+
+ @return the renderer to use. Must not be <NULL/>
+ */
+ virtual PTableRenderer getRenderer() const = 0;
+
+ /** returns the component handling input in a view associated with the model
+ */
+ virtual PTableInputHandler getInputHandler() const = 0;
+
+ /** determines the height of rows in the table.
+
+ @return
+ the logical height of rows in the table, in 1/100 millimeters. The height must be
+ greater 0.
+ */
+ virtual TableMetrics getRowHeight() const = 0;
+
+ virtual void setRowHeight(TableMetrics _nRowHeight) = 0;
+
+ /** determines the height of the column header row
+
+ This method is not to be called if ->hasColumnHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical height of the column header row, in 1/100 millimeters.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getColumnHeaderHeight() const = 0;
+
+ /** determines the width of the row header column
+
+ This method is not to be called if ->hasRowHeaders()
+ returned <FALSE/>.
+
+ @return
+ the logical width of the row header column, in 1/100 millimeters.
+ Must be greater than 0.
+ */
+ virtual TableMetrics getRowHeaderWidth() const = 0;
+
+ /** determines the visibility of the vertical scrollbar of the table control
+ @param overAllHeight the height of the table with all rows
+ @param actHeight the given height of the table
+ */
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight,int actHeight) const = 0;
+
+ /** determines the visibility of the horizontal scrollbar of the table control
+ @param overAllWidth the width of the table with all columns
+ @param actWidth the given width of the table
+ */
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const = 0;
+
+ /** fills cells with content
+ */
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > cellContent)=0;
+ /** gets the content of the cells
+ */
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent() = 0;
+ /**sets title of header rows
+ */
+ virtual void setRowHeaderName(std::vector<rtl::OUString> cellColumnContent)=0;
+ /** gets title of header rows
+ */
+ virtual std::vector<rtl::OUString> getRowHeaderName() = 0;
+
+ /// destroys the table model instance
+ virtual ~ITableModel() { }
+ };
+ typedef ::boost::shared_ptr< ITableModel > PTableModel;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLEMODEL_HXX
diff --git a/svtools/inc/svtools/table/tablerenderer.hxx b/svtools/inc/svtools/table/tablerenderer.hxx
new file mode 100644
index 000000000000..eb645ad574c4
--- /dev/null
+++ b/svtools/inc/svtools/table/tablerenderer.hxx
@@ -0,0 +1,241 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLERENDERER_HXX
+#define SVTOOLS_INC_TABLE_TABLERENDERER_HXX
+
+#include <svtools/table/tabletypes.hxx>
+
+#include <vcl/outdev.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= ITableRenderer
+ //====================================================================
+ /** interface to implement by components rendering a ->TableControl
+ */
+ class SAL_NO_VTABLE ITableRenderer
+ {
+ public:
+ /** paints a (part of) header area
+
+ There are two header areas in a table control:
+ <ul><li>The row containing all column headers, i.e. <em>above</em> all rows containing the data</li>
+ <li>The column containing all row headers. i.e. <em>left of</em> all columns containing the data</li>
+ </ul>
+
+ A header area is more than the union of the single column/row headers.
+
+ First, there might be less columns than fit into the view - in this case, right
+ beside the right-most column, there's still room which belongs to the column header
+ area, but is not occupied by any particular column header.<br/>
+ An equivalent statement holds for the row header area, if there are less rows than
+ fit into the view.
+
+ Second, if the table control has both a row header and a column header,
+ the intersection between those both belongs to both the column header area and the
+ row header area, but not to any particular column or row header.
+
+ There are two flags specifying whether the to-be-painted area is part of the column
+ and/or row header area.
+ <ul><li>If both are <TRUE/>, the intersection of both areas is to be painted.</li>
+ <li>If ->_bIsColHeaderArea is <TRUE/> and ->_bIsRowHeaderArea is <FALSE/>,
+ then ->_rArea denotes the column header area <em>excluding</em> the
+ intersection between row and column header area.</li>
+ <li>Equivalently for ->_bIsColHeaderArea being <FALSE/> and ->_bIsRowHeaderArea
+ being <TRUE/></li>
+ </ul>
+ Note that it's not possible for both ->_bIsColHeaderArea and ->_bIsRowHeaderArea
+ to be <FALSE/> at the same time.
+
+ @param _rDevice
+ the device to paint onto
+ @param _rArea
+ the area to paint into
+ @param _bIsColHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the column header area.
+ @param _bIsRowHeaderArea
+ <TRUE/> if and only if ->_rArea is part of the row header area.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header for a given column
+
+ @param _nCol
+ the index of the column to paint
+ @param _bActive
+ <TRUE/> if and only if the column whose column is to be painted
+ contains the active cell.
+ @param _bSelected
+ <TRUE/> if and only if the column whose column is to be painted
+ is selected currently.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the column header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** prepares a row for painting
+
+ Painting a table means painting rows as necessary, in an increasing
+ order. The assumption is that retrieving data for two different rows
+ is (potentially) more expensive than retrieving data for two different
+ columns. Thus, the renderer will get the chance to "seek" to a certain
+ row, and then has to render all cells in this row, before another
+ row is going to be painted.
+
+ @param _nRow
+ the row which is going to be painted. The renderer should
+ at least remember this row, since subsequent calls to
+ ->PaintRowHeader(), ->PaintCell(), and ->FinishRow() will
+ not pass this parameter again.
+
+ However, the renderer is also allowed to render any
+ cell-independent content of this row.
+
+ @param _bActive
+ <TRUE/> if and only if the row to be painted contains the
+ currently active cell.
+ @param _bSelected
+ <TRUE/> if and only if the row to be prepared is
+ selected currently.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rRowArea
+ the are into which the row should be painted. This excludes
+ the row header area, if applicable.
+ @param _rStyle
+ the style to be used for drawing
+ */
+ virtual void PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea,
+ const StyleSettings& _rStyle ) = 0;
+
+ /** paints the header of a row
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _bActive
+ <TRUE/> if and only if the row to be painted contains the
+ currently active cell.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _bSelected
+ <TRUE/> if and only if the row whose header cell is to be
+ painted is selected currently.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the row header should be painted
+ @param _rStyle
+ the style to be used for drawing
+ @param _rText
+ the title of the header row
+ */
+ virtual void PaintRowHeader(
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0;
+
+ /** paints a certain cell
+
+ The row to be painted is denoted by the most recent call to
+ ->PrepareRow.
+
+ @param _bSelected
+ <TRUE/> if and only if the cell to be painted is
+ selected currently. This is the case if either
+ the row or the column of the cell is currently selected.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _bActive
+ <TRUE/> if the cell is currently active.
+ <br/>
+ Note that this flag is equal to the respective flag in the
+ previous ->PrepareRow call, it's passed here for convinience
+ only.
+ @param _rDevice
+ denotes the device to paint onto
+ @param _rArea
+ the are into which the cell should be painted
+ @param _rStyle
+ the style to be used for drawing
+ @param _rText
+ the content of the cell
+ */
+ virtual void PaintCell( ColPos _nColumn,
+ bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText ) = 0;
+
+ /** draws a cell cursor in the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0;
+
+ /** hides the cell cursor previously drawn into the given rectangle
+
+ The cell cursor is used to indicate the active/current cell
+ of a table control.
+ */
+ virtual void HideCellCursor( Window& _rView, const Rectangle& _rCursorRect) = 0;
+
+ /// deletes the renderer instance
+ virtual ~ITableRenderer() { }
+ };
+ typedef ::boost::shared_ptr< ITableRenderer > PTableRenderer;
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLERENDERER_HXX
diff --git a/svtools/inc/svtools/table/tabletypes.hxx b/svtools/inc/svtools/table/tabletypes.hxx
new file mode 100644
index 000000000000..167e49cfd521
--- /dev/null
+++ b/svtools/inc/svtools/table/tabletypes.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX
+#define SVTOOLS_INC_TABLE_TABLETYPES_HXX
+
+#include <sal/types.h>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+ /// a value denoting the size of a table
+ typedef sal_Int32 TableSize;
+
+ /// a value denoting a column position within a table
+ typedef sal_Int32 ColPos;
+ /// a value denoting a row position within a table
+ typedef sal_Int32 RowPos;
+
+ /** a value denoting an arbitrary coordinate value of a position within
+ a table
+
+ Values of this type are guaranteed to be large enough to hold column
+ positions as well as row positions.
+ */
+ typedef sal_Int32 AnyPos;
+
+ /// the ID of a column in a table
+ typedef sal_Int32 ColumnID;
+
+ typedef sal_Int32 TableMetrics;
+/** special column width value which indicates that the column should be
+ automatically resized to fit the view
+*/
+#define COLWIDTH_FIT_TO_VIEW ((TableMetrics)-1)
+
+/// denotes the column containing the row headers
+#define COL_ROW_HEADERS ((ColPos)-1)
+/// denotes the row containing the column headers
+#define ROW_COL_HEADERS ((RowPos)-1)
+
+/// denotes an invalid column index
+#define COL_INVALID ((ColPos)-2)
+/// denotes an invalid row index
+#define ROW_INVALID ((RowPos)-2)
+
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_INC_TABLE_TABLETYPES_HXX
diff --git a/svtools/prj/build.lst b/svtools/prj/build.lst
index a6a409055faa..a60199740561 100644
--- a/svtools/prj/build.lst
+++ b/svtools/prj/build.lst
@@ -38,13 +38,14 @@ st svtools\source\undo nmake - all st_undo st_inc NULL
st svtools\source\plugapp nmake - all st_papp st_inc NULL
st svtools\source\dialogs nmake - all st_dial st_inc NULL
st svtools\source\edit nmake - all st_edit st_inc NULL
+st svtools\source\table nmake - all st_table st_inc NULL
st svtools\source\uno nmake - all st_uno st_inc NULL
st svtools\source\svrtf nmake - all st_rtf st_inc NULL
st svtools\source\svsql nmake - all st_sql st_inc NULL
st svtools\source\svhtml nmake - all st_html st_inc NULL
st svtools\source\syslocale nmake - all st_sysloc st_inc NULL
st svtools\source\filepicker nmake - all st_filepick st_inc NULL
-st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL
+st svtools\util nmake - all st_util st__brw st__ctr st__dde st__item st__item1 st__misc st__misc1 st__url st_ctl st_dial st_edit st_file st_html st_papp st_rtf st_sql st_usdde.u st_psdde.p st_msdde.m st_msc.m st_undo st_table st_uno st_vfilt st_vigif st_vixbm st_vixpm st_vjpeg st_vwmf st_sysloc st_filepick st_not st_conf st_mem st_num st_svtjava NULL
st svtools\source\fsstor nmake - all st_fsstor st_inc NULL
st svtools\source\hatchwindow nmake - all st_hatchwin st_inc NULL
st svtools\source\passwordcontainer nmake - all st_passcont st_inc NULL
diff --git a/svtools/prj/d.lst b/svtools/prj/d.lst
index 6b85194db6c1..4ff74419b9d4 100644
--- a/svtools/prj/d.lst
+++ b/svtools/prj/d.lst
@@ -312,6 +312,7 @@ mkdir: %_DEST%\inc%_EXT%\svtools
..\inc\textwindowaccessibility.hxx %_DEST%\inc%_EXT%\svtools\textwindowaccessibility.hxx
..\inc\docpasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docpasswdrequest.hxx
+..\inc\docmspasswdrequest.hxx %_DEST%\inc%_EXT%\svtools\docmspasswdrequest.hxx
..\inc\fontsubstconfig.hxx %_DEST%\inc%_EXT%\svtools\fontsubstconfig.hxx
..\inc\apearcfg.hxx %_DEST%\inc%_EXT%\svtools\apearcfg.hxx
..\inc\fltrcfg.hxx %_DEST%\inc%_EXT%\svtools\fltrcfg.hxx
diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx
index 125827d17faf..abb044c7863e 100644
--- a/svtools/source/config/optionsdrawinglayer.cxx
+++ b/svtools/source/config/optionsdrawinglayer.cxx
@@ -92,6 +92,11 @@ using namespace ::com::sun::star::uno ;
#define DEFAULT_QUADRATIC3DRENDERLIMIT 1000000
#define DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT 45000
+// #i97672# selection settings
+#define DEFAULT_TRANSPARENTSELECTION sal_True
+#define DEFAULT_TRANSPARENTSELECTIONPERCENT 75
+#define DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT 70
+
#define PROPERTYNAME_OVERLAYBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("OverlayBuffer" ))
#define PROPERTYNAME_PAINTBUFFER OUString(RTL_CONSTASCII_USTRINGPARAM("PaintBuffer" ))
#define PROPERTYNAME_STRIPE_COLOR_A OUString(RTL_CONSTASCII_USTRINGPARAM("StripeColorA" ))
@@ -125,6 +130,11 @@ using namespace ::com::sun::star::uno ;
#define PROPERTYNAME_QUADRATIC3DRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("Quadratic3DRenderLimit"))
#define PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT OUString(RTL_CONSTASCII_USTRINGPARAM("QuadraticFormControlRenderLimit"))
+// #i97672# selection settings
+#define PROPERTYNAME_TRANSPARENTSELECTION OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelection"))
+#define PROPERTYNAME_TRANSPARENTSELECTIONPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("TransparentSelectionPercent"))
+#define PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT OUString(RTL_CONSTASCII_USTRINGPARAM("SelectionMaximumLuminancePercent"))
+
#define PROPERTYHANDLE_OVERLAYBUFFER 0
#define PROPERTYHANDLE_PAINTBUFFER 1
#define PROPERTYHANDLE_STRIPE_COLOR_A 2
@@ -158,7 +168,12 @@ using namespace ::com::sun::star::uno ;
#define PROPERTYHANDLE_QUADRATIC3DRENDERLIMIT 22
#define PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT 23
-#define PROPERTYCOUNT 24
+// #i97672# selection settings
+#define PROPERTYHANDLE_TRANSPARENTSELECTION 24
+#define PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT 25
+#define PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT 26
+
+#define PROPERTYCOUNT 27
class SvtOptionsDrawinglayer_Impl : public ConfigItem
{
@@ -248,6 +263,15 @@ public:
void SetQuadratic3DRenderLimit(sal_uInt32 nNew);
void SetQuadraticFormControlRenderLimit(sal_uInt32 nNew);
+ // #i97672# selection settings
+ sal_Bool IsTransparentSelection() const;
+ sal_uInt16 GetTransparentSelectionPercent() const;
+ sal_uInt16 GetSelectionMaximumLuminancePercent() const;
+
+ void SetTransparentSelection( sal_Bool bState );
+ void SetTransparentSelectionPercent( sal_uInt16 nPercent );
+ void SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent );
+
//-------------------------------------------------------------------------------------------------------------
// private methods
//-------------------------------------------------------------------------------------------------------------
@@ -295,6 +319,11 @@ private:
sal_uInt32 m_nQuadratic3DRenderLimit;
sal_uInt32 m_nQuadraticFormControlRenderLimit;
+ // #i97672# selection settings
+ sal_uInt16 m_nTransparentSelectionPercent;
+ sal_uInt16 m_nSelectionMaximumLuminancePercent;
+ sal_Bool m_bTransparentSelection;
+
// local values
bool m_bAllowAA : 1;
bool m_bAllowAAChecked : 1;
@@ -342,6 +371,11 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() :
m_nQuadratic3DRenderLimit(DEFAULT_QUADRATIC3DRENDERLIMIT),
m_nQuadraticFormControlRenderLimit(DEFAULT_QUADRATICFORMCONTROLRENDERLIMIT),
+ // #i97672# selection settings
+ m_nTransparentSelectionPercent(DEFAULT_TRANSPARENTSELECTIONPERCENT),
+ m_nSelectionMaximumLuminancePercent(DEFAULT_SELECTIONMAXIMUMLUMINANCEPERCENT),
+ m_bTransparentSelection(DEFAULT_TRANSPARENTSELECTION),
+
// local values
m_bAllowAA(true),
m_bAllowAAChecked(false)
@@ -537,6 +571,27 @@ SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl() :
seqValues[nProperty] >>= m_nQuadraticFormControlRenderLimit;
}
break;
+
+ // #i97672# selection settings
+ case PROPERTYHANDLE_TRANSPARENTSELECTION:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelection\"?" );
+ seqValues[nProperty] >>= m_bTransparentSelection;
+ }
+ break;
+
+ case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\TransparentSelectionPercent\"?" );
+ seqValues[nProperty] >>= m_nTransparentSelectionPercent;
+ }
+
+ case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT:
+ {
+ DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtOptionsDrawinglayer_Impl::SvtOptionsDrawinglayer_Impl()\nWho has changed the value type of \"Office.Common\\Drawinglayer\\SelectionMaximumLuminancePercent\"?" );
+ seqValues[nProperty] >>= m_nSelectionMaximumLuminancePercent;
+ }
+ break;
}
}
}
@@ -661,6 +716,19 @@ void SvtOptionsDrawinglayer_Impl::Commit()
case PROPERTYHANDLE_QUADRATICFORMCONTROLRENDERLIMIT:
aSeqValues[nProperty] <<= m_nQuadraticFormControlRenderLimit;
break;
+
+ // #i97672# selection settings
+ case PROPERTYHANDLE_TRANSPARENTSELECTION:
+ aSeqValues[nProperty] <<= m_bTransparentSelection;
+ break;
+
+ case PROPERTYHANDLE_TRANSPARENTSELECTIONPERCENT:
+ aSeqValues[nProperty] <<= m_nTransparentSelectionPercent;
+ break;
+
+ case PROPERTYHANDLE_SELECTIONMAXIMUMLUMINANCEPERCENT:
+ aSeqValues[nProperty] <<= m_nSelectionMaximumLuminancePercent;
+ break;
}
}
@@ -1065,6 +1133,49 @@ void SvtOptionsDrawinglayer_Impl::SetQuadraticFormControlRenderLimit(sal_uInt32
}
}
+// #i97672# selection settings
+sal_Bool SvtOptionsDrawinglayer_Impl::IsTransparentSelection() const
+{
+ return m_bTransparentSelection;
+}
+
+void SvtOptionsDrawinglayer_Impl::SetTransparentSelection( sal_Bool bState )
+{
+ if(m_bTransparentSelection != bState)
+ {
+ m_bTransparentSelection = bState;
+ SetModified();
+ }
+}
+
+void SvtOptionsDrawinglayer_Impl::SetTransparentSelectionPercent( sal_uInt16 nPercent )
+{
+ if(m_nTransparentSelectionPercent != nPercent)
+ {
+ m_nTransparentSelectionPercent = nPercent;
+ SetModified();
+ }
+}
+
+sal_uInt16 SvtOptionsDrawinglayer_Impl::GetTransparentSelectionPercent() const
+{
+ return m_nTransparentSelectionPercent;
+}
+
+void SvtOptionsDrawinglayer_Impl::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent )
+{
+ if(m_nSelectionMaximumLuminancePercent != nPercent)
+ {
+ m_nSelectionMaximumLuminancePercent = nPercent;
+ SetModified();
+ }
+}
+
+sal_uInt16 SvtOptionsDrawinglayer_Impl::GetSelectionMaximumLuminancePercent() const
+{
+ return m_nSelectionMaximumLuminancePercent;
+}
+
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
@@ -1104,7 +1215,12 @@ Sequence< OUString > SvtOptionsDrawinglayer_Impl::impl_GetPropertyNames()
PROPERTYNAME_RENDERDECORATEDTEXTDIRECT,
PROPERTYNAME_RENDERSIMPLETEXTDIRECT,
PROPERTYNAME_QUADRATIC3DRENDERLIMIT,
- PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT
+ PROPERTYNAME_QUADRATICFORMCONTROLRENDERLIMIT,
+
+ // #i97672# selection settings
+ PROPERTYNAME_TRANSPARENTSELECTION,
+ PROPERTYNAME_TRANSPARENTSELECTIONPERCENT,
+ PROPERTYNAME_SELECTIONMAXIMUMLUMINANCEPERCENT
};
// Initialize return sequence with these list ...
@@ -1486,6 +1602,83 @@ void SvtOptionsDrawinglayer::SetQuadraticFormControlRenderLimit(sal_uInt32 nNew)
m_pDataContainer->SetQuadraticFormControlRenderLimit( nNew );
}
+// #i97672# selection settings
+sal_Bool SvtOptionsDrawinglayer::IsTransparentSelection() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ return m_pDataContainer->IsTransparentSelection();
+}
+
+void SvtOptionsDrawinglayer::SetTransparentSelection( sal_Bool bState )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ m_pDataContainer->SetTransparentSelection( bState );
+}
+
+sal_uInt16 SvtOptionsDrawinglayer::GetTransparentSelectionPercent() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ sal_uInt16 aRetval(m_pDataContainer->GetTransparentSelectionPercent());
+
+ // crop to range [10% .. 90%]
+ if(aRetval < 10)
+ {
+ aRetval = 10;
+ }
+
+ if(aRetval > 90)
+ {
+ aRetval = 90;
+ }
+
+ return aRetval;
+}
+
+void SvtOptionsDrawinglayer::SetTransparentSelectionPercent( sal_uInt16 nPercent )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+
+ // crop to range [10% .. 90%]
+ if(nPercent < 10)
+ {
+ nPercent = 10;
+ }
+
+ if(nPercent > 90)
+ {
+ nPercent = 90;
+ }
+
+ m_pDataContainer->SetTransparentSelectionPercent( nPercent );
+}
+
+sal_uInt16 SvtOptionsDrawinglayer::GetSelectionMaximumLuminancePercent() const
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+ sal_uInt16 aRetval(m_pDataContainer->GetSelectionMaximumLuminancePercent());
+
+ // crop to range [0% .. 100%]
+ if(aRetval > 90)
+ {
+ aRetval = 90;
+ }
+
+ return aRetval;
+}
+
+void SvtOptionsDrawinglayer::SetSelectionMaximumLuminancePercent( sal_uInt16 nPercent )
+{
+ MutexGuard aGuard( GetOwnStaticMutex() );
+
+ // crop to range [0% .. 100%]
+ if(nPercent > 90)
+ {
+ nPercent = 90;
+ }
+
+ m_pDataContainer->SetSelectionMaximumLuminancePercent( nPercent );
+}
+
//*****************************************************************************************************************
// private method
//*****************************************************************************************************************
diff --git a/svtools/source/config/useroptions.cxx b/svtools/source/config/useroptions.cxx
index aad000a235f1..4eafbefe54a3 100644
--- a/svtools/source/config/useroptions.cxx
+++ b/svtools/source/config/useroptions.cxx
@@ -49,51 +49,45 @@
#include <rtl/logfile.hxx>
#include "itemholder2.hxx"
-#ifndef _COM_SUN_STAR_BEANS_PROPERTY_HPP_
#include <com/sun/star/beans/Property.hpp>
-#endif
-
-#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
-#endif
-
-#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
#include <com/sun/star/beans/PropertyAttribute.hpp>
-#endif
-
-#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
#include <com/sun/star/container/XNameAccess.hpp>
-#endif
-
-#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
#include <com/sun/star/container/XNameContainer.hpp>
-#endif
-
-#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#endif
-
-#ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_
+#include <com/sun/star/util/XChangesListener.hpp>
+#include <com/sun/star/util/XChangesNotifier.hpp>
+#include <com/sun/star/util/ChangesEvent.hpp>
#include <comphelper/configurationhelper.hxx>
-#endif
-
-#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_
#include <unotools/processfactory.hxx>
-#endif
-
-#ifndef _SVT_LOGHELPER_HXX
-#include "loghelper.hxx"
-#endif
+#include <loghelper.hxx>
using namespace utl;
using namespace rtl;
+using namespace com::sun::star;
using namespace com::sun::star::uno;
namespace css = ::com::sun::star;
// class SvtUserOptions_Impl ---------------------------------------------
+class SvtUserOptions_Impl;
+class SvtUserConfigChangeListener_Impl : public cppu::WeakImplHelper1
+<
+ com::sun::star::util::XChangesListener
+>
+{
+ SvtUserOptions_Impl& m_rParent;
+ public:
+ SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent);
+ ~SvtUserConfigChangeListener_Impl();
+
+ //XChangesListener
+ virtual void SAL_CALL changesOccurred( const util::ChangesEvent& Event ) throw(RuntimeException);
+ //XEventListener
+ virtual void SAL_CALL disposing( const lang::EventObject& Source ) throw(RuntimeException);
+};
-class SvtUserOptions_Impl
+class SvtUserOptions_Impl : public SfxBroadcaster
{
public:
SvtUserOptions_Impl();
@@ -144,8 +138,10 @@ public:
sal_Bool IsTokenReadonly( USHORT nToken ) const;
::rtl::OUString GetToken(USHORT nToken) const;
+ void Notify();
private:
+ uno::Reference< util::XChangesListener > m_xChangeListener;
css::uno::Reference< css::container::XNameAccess > m_xCfg;
css::uno::Reference< css::beans::XPropertySet > m_xData;
::rtl::OUString m_aLocale;
@@ -158,18 +154,47 @@ static sal_Int32 nRefCount = 0;
#define READONLY_DEFAULT sal_False
-// functions -------------------------------------------------------------
+/*-- 16.06.2009 14:22:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SvtUserConfigChangeListener_Impl::SvtUserConfigChangeListener_Impl(SvtUserOptions_Impl& rParent) :
+ m_rParent( rParent )
+{
+}
+/*-- 16.06.2009 14:22:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SvtUserConfigChangeListener_Impl::~SvtUserConfigChangeListener_Impl()
+{
+}
+/*-- 16.06.2009 14:22:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SvtUserConfigChangeListener_Impl::changesOccurred( const util::ChangesEvent& rEvent ) throw(RuntimeException)
+{
+ if(rEvent.Changes.getLength())
+ m_rParent.Notify();
+}
+/*-- 16.06.2009 14:22:56---------------------------------------------------
-namespace
+ -----------------------------------------------------------------------*/
+void SvtUserConfigChangeListener_Impl::disposing( const lang::EventObject& rSource ) throw(RuntimeException)
{
- struct PropertyNames
- : public rtl::Static< Sequence< rtl::OUString >, PropertyNames> {};
+ try
+ {
+ uno::Reference< util::XChangesNotifier > xChgNot( rSource.Source, UNO_QUERY_THROW);
+ xChgNot->removeChangesListener(this);
+ }
+ catch(Exception& )
+ {
+ }
}
// class SvtUserOptions_Impl ---------------------------------------------
// -----------------------------------------------------------------------
-SvtUserOptions_Impl::SvtUserOptions_Impl()
+SvtUserOptions_Impl::SvtUserOptions_Impl() :
+ m_xChangeListener( new SvtUserConfigChangeListener_Impl(*this) )
{
try
{
@@ -181,6 +206,14 @@ SvtUserOptions_Impl::SvtUserOptions_Impl()
css::uno::UNO_QUERY );
m_xData = css::uno::Reference< css::beans::XPropertySet >(m_xCfg, css::uno::UNO_QUERY);
+ uno::Reference< util::XChangesNotifier > xChgNot( m_xCfg, UNO_QUERY);
+ try
+ {
+ xChgNot->addChangesListener( m_xChangeListener );
+ }
+ catch(RuntimeException& )
+ {
+ }
}
catch(const css::uno::Exception& ex)
{
@@ -743,6 +776,12 @@ void SvtUserOptions_Impl::SetApartment( const ::rtl::OUString& sApartment )
// -----------------------------------------------------------------------
+void SvtUserOptions_Impl::Notify()
+{
+ Broadcast( SfxSimpleHint( SFX_HINT_USER_OPTIONS_CHANGED ) );
+}
+// -----------------------------------------------------------------------
+
sal_Bool SvtUserOptions_Impl::IsTokenReadonly( USHORT nToken ) const
{
css::uno::Reference< css::beans::XPropertySet > xData(m_xCfg, css::uno::UNO_QUERY);
@@ -906,7 +945,7 @@ SvtUserOptions::SvtUserOptions()
}
++nRefCount;
pImp = pOptions;
- //StartListening( *pImp);
+ StartListening( *pImp);
}
// -----------------------------------------------------------------------
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index d56c270fd5a8..274557051c27 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -1065,7 +1065,10 @@ BOOL ViewTabListBox_Impl::DoubleClickHdl()
::rtl::OUString sRet = SvHeaderTabListBox::GetAccessibleObjectDescription( _eType, _nPos );
if ( ::svt::BBTYPE_TABLECELL == _eType )
{
- sal_Int32 nRow = _nPos / GetColumnCount();
+ sal_Int32 nRow = -1;
+ const sal_uInt16 nColumnCount = GetColumnCount();
+ if (nColumnCount > 0)
+ nRow = _nPos / nColumnCount;
SvLBoxEntry* pEntry = GetEntry( nRow );
if ( pEntry )
{
diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx
index da75608a38b3..954c8a7ca179 100644
--- a/svtools/source/contnr/imivctl1.cxx
+++ b/svtools/source/contnr/imivctl1.cxx
@@ -540,7 +540,13 @@ void SvxIconChoiceCtrl_Impl::EntrySelected( SvxIconChoiceCtrlEntry* pEntry, BOOL
ShowCursor( TRUE );
} // if( bUpdateMode )
- CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry );
+ // --> OD 2009-05-27 #i101012#
+ // emit vcl event LISTBOX_SELECT only in case that the given entry is selected.
+ if ( bSelect )
+ {
+ CallEventListeners( VCLEVENT_LISTBOX_SELECT, pEntry );
+ }
+ // <--
}
void SvxIconChoiceCtrl_Impl::ResetVirtSize()
diff --git a/svtools/source/contnr/svlbox.cxx b/svtools/source/contnr/svlbox.cxx
index 1c81343cd84f..e56db398b8fb 100644
--- a/svtools/source/contnr/svlbox.cxx
+++ b/svtools/source/contnr/svlbox.cxx
@@ -1203,6 +1203,12 @@ void SvLBox::ViewDataInitialized( SvLBoxEntry* )
DBG_CHKTHIS(SvLBox,0);
}
+void SvLBox::StateChanged( StateChangedType eType )
+{
+ if( eType == STATE_CHANGE_ENABLE )
+ Invalidate( INVALIDATE_CHILDREN );
+ Control::StateChanged( eType );
+}
void SvLBox::ImplShowTargetEmphasis( SvLBoxEntry* pEntry, BOOL bShow)
{
diff --git a/svtools/source/contnr/svtabbx.cxx b/svtools/source/contnr/svtabbx.cxx
index 32e8e68facb1..1770810c7a5d 100644
--- a/svtools/source/contnr/svtabbx.cxx
+++ b/svtools/source/contnr/svtabbx.cxx
@@ -980,14 +980,16 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleCell( sal_Int32 _nR
if ( !AreChildrenTransient() )
{
+ const sal_uInt16 nColumnCount = GetColumnCount();
+
// first call? -> initial list
if ( m_aAccessibleChildren.empty() )
{
- sal_Int32 nCount = ( GetRowCount() + 1 ) * GetColumnCount();
+ sal_Int32 nCount = ( GetRowCount() + 1 ) * nColumnCount;
m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() );
}
- nIndex = ( _nRow * GetColumnCount() ) + _nColumnPos + GetColumnCount();
+ nIndex = ( _nRow * nColumnCount ) + _nColumnPos + nColumnCount;
xChild = m_aAccessibleChildren[ nIndex ];
}
@@ -1021,8 +1023,9 @@ Reference< XAccessible > SvHeaderTabListBox::CreateAccessibleColumnHeader( sal_u
// first call? -> initial list
if ( m_aAccessibleChildren.empty() )
{
- sal_Int32 nCount = AreChildrenTransient() ? GetColumnCount()
- : ( GetRowCount() + 1 ) * GetColumnCount();
+ const sal_uInt16 nColumnCount = GetColumnCount();
+ sal_Int32 nCount = AreChildrenTransient() ?
+ nColumnCount : ( GetRowCount() + 1 ) * nColumnCount;
m_aAccessibleChildren.assign( nCount, Reference< XAccessible >() );
}
@@ -1081,15 +1084,10 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin
switch( _eType )
{
case ::svt::BBTYPE_BROWSEBOX:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBox" ) );
- break;
-
case ::svt::BBTYPE_TABLE:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HeaderTabListBoxTable" ) );
- break;
-
case ::svt::BBTYPE_COLUMNHEADERBAR:
- aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar of HeaderTabListBox" ) );
+ // should be empty now (see #i63983)
+ aRetText = ::rtl::OUString();
break;
case ::svt::BBTYPE_TABLECELL:
@@ -1098,9 +1096,12 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin
if ( _nPos >= 0 )
{
sal_uInt16 nColumnCount = GetColumnCount();
- sal_Int32 nRow = _nPos / nColumnCount;
- sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount );
- aRetText = GetCellText( nRow, nColumn );
+ if (nColumnCount > 0)
+ {
+ sal_Int32 nRow = _nPos / nColumnCount;
+ sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount );
+ aRetText = GetCellText( nRow, nColumn );
+ }
}
break;
}
@@ -1135,16 +1136,19 @@ sal_Bool SvHeaderTabListBox::ConvertPointToColumnHeader( sal_uInt16&, const Poin
static const String sVar2( RTL_CONSTASCII_USTRINGPARAM( "%2" ) );
sal_uInt16 nColumnCount = GetColumnCount();
- sal_Int32 nRow = _nPos / nColumnCount;
- sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount );
-
- String aText( SvtResId( STR_SVT_ACC_DESC_TABLISTBOX ) );
- aText.SearchAndReplace( sVar1, String::CreateFromInt32( nRow ) );
- String sColHeader = m_pImpl->m_pHeaderBar->GetItemText( m_pImpl->m_pHeaderBar->GetItemId( nColumn ) );
- if ( sColHeader.Len() == 0 )
- sColHeader = String::CreateFromInt32( nColumn );
- aText.SearchAndReplace( sVar2, sColHeader );
- aRetText = aText;
+ if (nColumnCount > 0)
+ {
+ sal_Int32 nRow = _nPos / nColumnCount;
+ sal_uInt16 nColumn = static_cast< sal_uInt16 >( _nPos % nColumnCount );
+
+ String aText( SvtResId( STR_SVT_ACC_DESC_TABLISTBOX ) );
+ aText.SearchAndReplace( sVar1, String::CreateFromInt32( nRow ) );
+ String sColHeader = m_pImpl->m_pHeaderBar->GetItemText( m_pImpl->m_pHeaderBar->GetItemId( nColumn ) );
+ if ( sColHeader.Len() == 0 )
+ sColHeader = String::CreateFromInt32( nColumn );
+ aText.SearchAndReplace( sVar2, sColHeader );
+ aRetText = aText;
+ }
}
return aRetText;
diff --git a/svtools/source/contnr/svtreebx.cxx b/svtools/source/contnr/svtreebx.cxx
index 200dd30eda1a..a697928842af 100644
--- a/svtools/source/contnr/svtreebx.cxx
+++ b/svtools/source/contnr/svtreebx.cxx
@@ -1040,6 +1040,14 @@ BOOL SvTreeListBox::Expand( SvLBoxEntry* pParent )
pParent->SetFlags( nFlags );
GetModel()->InvalidateEntry( pParent ); // neu zeichnen
}
+
+ // --> OD 2009-04-01 #i92103#
+ if ( bExpanded )
+ {
+ pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_EXPANDED, pParent );
+ }
+ // <--
+
return bExpanded;
}
@@ -1059,6 +1067,14 @@ BOOL SvTreeListBox::Collapse( SvLBoxEntry* pParent )
pHdlEntry = pParent;
ExpandedHdl();
}
+
+ // --> OD 2009-04-01 #i92103#
+ if ( bCollapsed )
+ {
+ pImp->CallEventListeners( VCLEVENT_LISTBOX_ENTRY_COLLAPSED, pParent );
+ }
+ // <--
+
return bCollapsed;
}
diff --git a/svtools/source/control/ctrltool.cxx b/svtools/source/control/ctrltool.cxx
index 35e86189c352..77bb996584bd 100644
--- a/svtools/source/control/ctrltool.cxx
+++ b/svtools/source/control/ctrltool.cxx
@@ -161,7 +161,11 @@ static void ImplMakeSearchString( XubString& rStr )
static void ImplMakeSearchStringFromName( XubString& rStr )
{
- rStr = rStr.GetToken( 0, ';' );
+ // check for features before alternate font separator
+ if (rStr.Search(':') < rStr.Search(';'))
+ rStr = rStr.GetToken( 0, ':' );
+ else
+ rStr = rStr.GetToken( 0, ';' );
ImplMakeSearchString( rStr );
}
diff --git a/svtools/source/control/scrwin.cxx b/svtools/source/control/scrwin.cxx
index 9805110c9254..162f23948385 100644
--- a/svtools/source/control/scrwin.cxx
+++ b/svtools/source/control/scrwin.cxx
@@ -273,8 +273,8 @@ void __EXPORT ScrollableWindow::Resize()
// disable painting in the corner between the scrollbars
if ( bVVisible && bHVisible )
{
- aCornerWin.SetPosSizePixel(
- *((Point*) &aOutPixSz), Size(nScrSize, nScrSize) );
+ aCornerWin.SetPosSizePixel(Point(aOutPixSz.Width(), aOutPixSz.Height()),
+ Size(nScrSize, nScrSize) );
aCornerWin.Show();
}
else
diff --git a/svtools/source/filter.vcl/filter/filter.cxx b/svtools/source/filter.vcl/filter/filter.cxx
index f87fabc7973d..3586ddd02ddd 100644
--- a/svtools/source/filter.vcl/filter/filter.cxx
+++ b/svtools/source/filter.vcl/filter/filter.cxx
@@ -74,8 +74,8 @@
#include <com/sun/star/ucb/CommandAbortedException.hpp>
#include <unotools/ucbstreamhelper.hxx>
#include <unotools/localfilehelper.hxx>
-#include <svtools/pathoptions.hxx>
#include <comphelper/processfactory.hxx>
+#include <rtl/bootstrap.hxx>
#include <rtl/instance.hxx>
#include "SvFilterOptionsDialog.hxx"
@@ -1038,8 +1038,13 @@ void GraphicFilter::ImplInit()
if( bUseConfig )
{
- SvtPathOptions aPathOpt;
- aFilterPath = aPathOpt.GetModulePath();
+#if defined WNT
+ rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program"));
+#else
+ rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/program"));
+#endif
+ rtl::Bootstrap::expandMacros(url); //TODO: detect failure
+ utl::LocalFileHelper::ConvertURLToPhysicalName(url, aFilterPath);
}
pErrorEx = new FilterErrorEx;
diff --git a/svtools/source/items1/itemset.cxx b/svtools/source/items1/itemset.cxx
index 48fe2877b892..fee00dca854a 100644
--- a/svtools/source/items1/itemset.cxx
+++ b/svtools/source/items1/itemset.cxx
@@ -541,7 +541,7 @@ SfxItemState SfxItemSet::GetItemState( USHORT nWhich,
// Unterschiedlich vorhanden
return SFX_ITEM_DONTCARE;
- if ( (*ppFnd)->IsA(TYPE(SfxVoidItem)) )
+ if ( (*ppFnd)->Type() == TYPE(SfxVoidItem) )
return SFX_ITEM_DISABLED;
if (ppItem)
diff --git a/svtools/source/misc1/adrparse.cxx b/svtools/source/misc1/adrparse.cxx
index d9b389513f80..37c25d6c669f 100644
--- a/svtools/source/misc1/adrparse.cxx
+++ b/svtools/source/misc1/adrparse.cxx
@@ -172,8 +172,8 @@ inline void SvAddressParser_Impl::addTokenToRealName()
if (!m_pRealNameBegin)
m_pRealNameBegin = m_pRealNameContentBegin = m_pCurTokenBegin;
else if (m_pRealNameEnd < m_pCurTokenBegin - 1
- || m_pRealNameEnd == m_pCurTokenBegin - 1
- && *m_pRealNameEnd != ' ')
+ || (m_pRealNameEnd == m_pCurTokenBegin - 1
+ && *m_pRealNameEnd != ' '))
m_bRealNameReparse = true;
m_pRealNameEnd = m_pRealNameContentEnd = m_pCurTokenEnd;
}
@@ -634,8 +634,8 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser,
else
{
m_pAddrSpec = m_aInnerAddrSpec.isValid()
- || !m_aOuterAddrSpec.isValid()
- && m_aInnerAddrSpec.isPoorlyValid() ?
+ || (!m_aOuterAddrSpec.isValid()
+ && m_aInnerAddrSpec.isPoorlyValid()) ?
&m_aInnerAddrSpec :
m_aOuterAddrSpec.isPoorlyValid() ?
&m_aOuterAddrSpec : 0;
@@ -663,11 +663,11 @@ SvAddressParser_Impl::SvAddressParser_Impl(SvAddressParser * pParser,
}
UniString aTheRealName;
if (!m_pRealNameBegin
- || m_pAddrSpec == &m_aOuterAddrSpec
+ || (m_pAddrSpec == &m_aOuterAddrSpec
&& m_pRealNameBegin
== m_aOuterAddrSpec.m_pBegin
&& m_pRealNameEnd == m_aOuterAddrSpec.m_pEnd
- && m_pFirstCommentBegin)
+ && m_pFirstCommentBegin))
if (!m_pFirstCommentBegin)
aTheRealName = aTheAddrSpec;
else if (m_bFirstCommentReparse)
@@ -820,7 +820,7 @@ bool SvAddressParser::createRFC822Mailbox(String const & rPhrase,
return false;
if (*p == '"')
break;
- if (*p == '\x0D' || *p == '\\' && ++p == pEnd
+ if (*p == '\x0D' || (*p == '\\' && ++p == pEnd)
|| !INetMIME::isUSASCII(*p))
return false;
if (INetMIME::needsQuotedStringEscape(*p))
@@ -868,7 +868,7 @@ bool SvAddressParser::createRFC822Mailbox(String const & rPhrase,
return false;
if (*p == ']')
break;
- if (*p == '\x0D' || *p == '[' || *p == '\\' && ++p == pEnd
+ if (*p == '\x0D' || *p == '[' || (*p == '\\' && ++p == pEnd)
|| !INetMIME::isUSASCII(*p))
return false;
if (*p >= '[' && *p <= ']')
diff --git a/svtools/source/misc1/docmspasswdrequest.cxx b/svtools/source/misc1/docmspasswdrequest.cxx
new file mode 100644
index 000000000000..e892d3a57d1a
--- /dev/null
+++ b/svtools/source/misc1/docmspasswdrequest.cxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright IBM Corporation 2009.
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docmspasswdrequest.cxx,v $
+ * $Revision: 1.0 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "docmspasswdrequest.hxx"
+#include <com/sun/star/task/XInteractionAbort.hpp>
+#include <com/sun/star/task/XInteractionPassword.hpp>
+
+//==========================================================================
+
+class MSAbortContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionAbort >
+{
+ sal_Bool mbSelected;
+
+public:
+ MSAbortContinuation() : mbSelected( sal_False ) {}
+
+ sal_Bool isSelected() { return mbSelected; }
+
+ void reset() { mbSelected = sal_False; }
+
+ virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException) { mbSelected = sal_True; }
+};
+
+//==========================================================================
+
+class MSPasswordContinuation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionPassword >
+{
+ sal_Bool mbSelected;
+ ::rtl::OUString maPassword;
+
+public:
+ MSPasswordContinuation() : mbSelected( sal_False ) {}
+
+ sal_Bool isSelected() { return mbSelected; }
+
+ void reset() { mbSelected = sal_False; }
+
+ virtual void SAL_CALL select() throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setPassword( const ::rtl::OUString& aPass ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getPassword( ) throw (::com::sun::star::uno::RuntimeException);
+};
+
+void SAL_CALL MSPasswordContinuation::select()
+ throw(::com::sun::star::uno::RuntimeException)
+{
+ mbSelected = sal_True;
+}
+
+void SAL_CALL MSPasswordContinuation::setPassword( const ::rtl::OUString& aPass )
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ maPassword = aPass;
+}
+
+::rtl::OUString SAL_CALL MSPasswordContinuation::getPassword()
+ throw (::com::sun::star::uno::RuntimeException)
+{
+ return maPassword;
+}
+
+//==========================================================================
+
+RequestMSDocumentPassword::RequestMSDocumentPassword( ::com::sun::star::task::PasswordRequestMode nMode, ::rtl::OUString aName )
+{
+ ::rtl::OUString temp;
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2;
+ ::com::sun::star::task::DocumentMSPasswordRequest
+ aDocumentMSPasswordRequest( temp,
+ temp2,
+ ::com::sun::star::task::InteractionClassification_QUERY,
+ nMode,
+ aName );
+
+ m_aRequest <<= aDocumentMSPasswordRequest;
+
+ m_pAbort = new MSAbortContinuation;
+ m_pPassword = new MSPasswordContinuation;
+
+ m_lContinuations.realloc( 2 );
+ m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort );
+ m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pPassword );
+}
+
+sal_Bool RequestMSDocumentPassword::isAbort()
+{
+ return m_pAbort->isSelected();
+}
+
+sal_Bool RequestMSDocumentPassword::isPassword()
+{
+ return m_pPassword->isSelected();
+}
+
+::rtl::OUString RequestMSDocumentPassword::getPassword()
+{
+ return m_pPassword->getPassword();
+}
+
+::com::sun::star::uno::Any SAL_CALL RequestMSDocumentPassword::getRequest()
+ throw( ::com::sun::star::uno::RuntimeException )
+{
+ return m_aRequest;
+}
+
+::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >
+ SAL_CALL RequestMSDocumentPassword::getContinuations()
+ throw( ::com::sun::star::uno::RuntimeException )
+{
+ return m_lContinuations;
+}
+
+
diff --git a/svtools/source/misc1/makefile.mk b/svtools/source/misc1/makefile.mk
index 0d1e67fd9021..3ca57ff36f92 100644
--- a/svtools/source/misc1/makefile.mk
+++ b/svtools/source/misc1/makefile.mk
@@ -50,6 +50,7 @@ SLOFILES=\
$(EXCEPTIONSFILES) \
$(SLO)$/adrparse.obj \
$(SLO)$/docpasswdrequest.obj \
+ $(SLO)$/docmspasswdrequest.obj \
$(SLO)$/filenotation.obj \
$(SLO)$/inethist.obj \
$(SLO)$/inettype.obj \
diff --git a/svtools/source/table/defaultinputhandler.cxx b/svtools/source/table/defaultinputhandler.cxx
new file mode 100644
index 000000000000..17ee0222857f
--- /dev/null
+++ b/svtools/source/table/defaultinputhandler.cxx
@@ -0,0 +1,210 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/abstracttablecontrol.hxx"
+
+#include <tools/debug.hxx>
+#include <vcl/event.hxx>
+#include <vcl/cursor.hxx>
+#include "svtools/table/tabledatawindow.hxx"
+
+//........................................................................
+namespace svt { namespace table
+{
+//.......................................................................
+
+ struct DefaultInputHandler_Impl
+ {
+ };
+
+ //====================================================================
+ //= DefaultInputHandler
+ //====================================================================
+ //--------------------------------------------------------------------
+ DefaultInputHandler::DefaultInputHandler()
+ :m_pImpl( new DefaultInputHandler_Impl )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ DefaultInputHandler::~DefaultInputHandler()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseMove( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ (void)_rControl;
+ (void)_rMEvt;
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseButtonDown( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ bool bHandled = false;
+ Point aPoint = _rMEvt.GetPosPixel();
+ if(_rControl.isClickInVisibleArea(aPoint))
+ {
+ if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION)
+ {
+ LoseFocus(_rControl);
+ _rControl.setCursorAtCurrentCell(aPoint);
+ bHandled = true;
+ }
+ else
+ {
+ bHandled = _rControl.getSelEngine()->SelMouseButtonDown(_rMEvt);
+ }
+ }
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::MouseButtonUp( IAbstractTableControl& _rControl, const MouseEvent& _rMEvt )
+ {
+ bool bHandled = false;
+ Point aPoint = _rMEvt.GetPosPixel();
+ if(_rControl.isClickInVisibleArea(aPoint))
+ {
+ if(_rControl.getSelEngine()->GetSelectionMode() == NO_SELECTION)
+ {
+ GetFocus(_rControl);
+ _rControl.setCursorAtCurrentCell(aPoint);
+ bHandled = true;
+ }
+ else
+ bHandled = _rControl.getSelEngine()->SelMouseButtonUp(_rMEvt);
+ }
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::KeyInput( IAbstractTableControl& _rControl, const KeyEvent& rKEvt )
+ {
+ bool bHandled = false;
+
+ const KeyCode& rKeyCode = rKEvt.GetKeyCode();
+ USHORT nKeyCode = rKeyCode.GetCode();
+
+ struct _ActionMapEntry
+ {
+ USHORT nKeyCode;
+ USHORT nKeyModifier;
+ TableControlAction eAction;
+ }
+ static aKnownActions[] = {
+ { KEY_DOWN, 0, cursorDown },
+ { KEY_UP, 0, cursorUp },
+ { KEY_LEFT, 0, cursorLeft },
+ { KEY_RIGHT, 0, cursorRight },
+ { KEY_HOME, 0, cursorToLineStart },
+ { KEY_END, 0, cursorToLineEnd },
+ { KEY_PAGEUP, 0, cursorPageUp },
+ { KEY_PAGEDOWN, 0, cursorPageDown },
+ { KEY_PAGEUP, KEY_MOD1, cursorToFirstLine },
+ { KEY_PAGEDOWN, KEY_MOD1, cursorToLastLine },
+ { KEY_HOME, KEY_MOD1, cursorTopLeft },
+ { KEY_END, KEY_MOD1, cursorBottomRight },
+ { KEY_SPACE, KEY_MOD1, cursorSelectRow },
+ { KEY_UP, KEY_SHIFT, cursorSelectRowUp },
+ { KEY_DOWN, KEY_SHIFT, cursorSelectRowDown },
+ { KEY_END, KEY_SHIFT, cursorSelectRowAreaBottom },
+ { KEY_HOME, KEY_SHIFT, cursorSelectRowAreaTop },
+
+ { 0, 0, invalidTableControlAction }
+ };
+
+ const _ActionMapEntry* pActions = aKnownActions;
+ for ( ; pActions->eAction != invalidTableControlAction; ++pActions )
+ {
+ if ( ( pActions->nKeyCode == nKeyCode ) && ( pActions->nKeyModifier == rKeyCode.GetAllModifier() ) )
+ {
+ bHandled = _rControl.dispatchAction( pActions->eAction );
+ break;
+ }
+ }
+
+ return bHandled;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::GetFocus( IAbstractTableControl& _rControl )
+ {
+ _rControl.showCursor();
+ return false; // continue processing
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::LoseFocus( IAbstractTableControl& _rControl )
+ {
+ _rControl.hideCursor();
+ return false; // continue processing
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::RequestHelp( IAbstractTableControl& _rControl, const HelpEvent& _rHEvt )
+ {
+ (void)_rControl;
+ (void)_rHEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::Command( IAbstractTableControl& _rControl, const CommandEvent& _rCEvt )
+ {
+ (void)_rControl;
+ (void)_rCEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::PreNotify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt )
+ {
+ (void)_rControl;
+ (void)_rNEvt;
+ // TODO
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ bool DefaultInputHandler::Notify( IAbstractTableControl& _rControl, NotifyEvent& _rNEvt )
+ {
+ (void)_rControl;
+ (void)_rNEvt;
+ // TODO
+ return false;
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/gridtablerenderer.cxx b/svtools/source/table/gridtablerenderer.cxx
new file mode 100644
index 000000000000..2c4fda711009
--- /dev/null
+++ b/svtools/source/table/gridtablerenderer.cxx
@@ -0,0 +1,234 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/gridtablerenderer.hxx"
+
+#include <tools/debug.hxx>
+#include <vcl/window.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ struct GridTableRenderer_Impl
+ {
+ ITableModel& rModel;
+ RowPos nCurrentRow;
+
+ GridTableRenderer_Impl( ITableModel& _rModel )
+ :rModel( _rModel )
+ ,nCurrentRow( ROW_INVALID )
+ {
+ }
+ };
+
+ //====================================================================
+ //= GridTableRenderer
+ //====================================================================
+ //--------------------------------------------------------------------
+ GridTableRenderer::GridTableRenderer( ITableModel& _rModel )
+ :m_pImpl( new GridTableRenderer_Impl( _rModel ) )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ GridTableRenderer::~GridTableRenderer()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ RowPos GridTableRenderer::getCurrentRow()
+ {
+ return m_pImpl->nCurrentRow;
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintHeaderArea(
+ OutputDevice& _rDevice, const Rectangle& _rArea, bool _bIsColHeaderArea, bool _bIsRowHeaderArea,
+ const StyleSettings& _rStyle )
+ {
+ OSL_PRECOND( _bIsColHeaderArea || _bIsRowHeaderArea,
+ "GridTableRenderer::PaintHeaderArea: invalid area flags!" );
+
+ // fill the rows with alternating background colors
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor();
+ _rDevice.SetFillColor( _rStyle.GetDialogColor() );
+ _rDevice.DrawRect( _rArea );
+
+ // delimiter lines at bottom/right
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ _rDevice.Pop();
+ (void)_bIsColHeaderArea;
+ (void)_bIsRowHeaderArea;
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintColumnHeader( ColPos _nCol, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle )
+ {
+ _rDevice.Push( PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ String sHeaderText;
+
+ PColumnModel pColumn = m_pImpl->rModel.getColumnModel( _nCol );
+ DBG_ASSERT( !!pColumn, "GridTableRenderer::PaintColumnHeader: invalid column model object!" );
+ if ( !!pColumn )
+ sHeaderText = pColumn->getName();
+ Color aRowBackground = _rStyle.GetFieldColor();
+ if ( _bSelected )
+ {
+ aRowBackground = COL_BLUE;
+ }
+ _rDevice.DrawText( _rArea, sHeaderText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.Pop();
+
+ (void)_bActive;
+ // no special painting for the active column at the moment
+
+ //(void)_bSelected;
+ // TODO: selection not yet implemented
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PrepareRow( RowPos _nRow, bool _bActive, bool _bSelected,
+ OutputDevice& _rDevice, const Rectangle& _rRowArea, const StyleSettings& _rStyle )
+ {
+ // remember the row for subsequent calls to the other ->ITableRenderer methods
+ m_pImpl->nCurrentRow = _nRow;
+
+ // fill the rows with alternating background colors
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor();
+
+ Color aRowBackground = _rStyle.GetFieldColor();
+
+ _rDevice.SetFillColor( aRowBackground );
+
+ _rDevice.DrawRect( _rRowArea );
+
+ // TODO: active? selected?
+
+ _rDevice.Pop();
+ (void) _bSelected;
+ (void)_bActive;
+
+ // no special painting for the active row at the moment
+
+ //(void)_bSelected;
+ // TODO: selection not yet implemented
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintRowHeader( bool _bActive, bool _bSelected, OutputDevice& _rDevice, const Rectangle& _rArea,
+ const StyleSettings& _rStyle, rtl::OUString& _rText )
+ {
+ _rDevice.Push( PUSH_FILLCOLOR | PUSH_LINECOLOR );
+
+ _rDevice.SetLineColor( _rStyle.GetDialogTextColor() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+ _rDevice.DrawText( _rArea, _rText, TEXT_DRAW_LEFT);
+ // TODO: active? selected?
+ (void)_bActive;
+ (void)_bSelected;
+
+ _rDevice.Pop();
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::PaintCell( ColPos _nColumn, bool _bSelected, bool _bActive,
+ OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, rtl::OUString& _rText )
+ {
+ _rDevice.Push( PUSH_LINECOLOR );
+
+ // draw the grid
+ _rDevice.SetLineColor( COL_LIGHTGRAY );
+ // TODO: the LIGHTGRAY should probably be a property/setting
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+ _rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
+
+ {
+ // TODO: remove those temporary place holders
+ Rectangle aRect( _rArea );
+ ++aRect.Left(); --aRect.Right();
+ ++aRect.Top(); --aRect.Bottom();
+
+ String sText;
+ if(_bSelected)
+ {
+ Color aRed(COL_BLUE);
+ _rDevice.SetFillColor( aRed );
+ _rDevice.SetTextColor(COL_WHITE);
+ }
+ _rDevice.DrawRect( _rArea );
+ (void)_nColumn;
+ _rDevice.DrawText( aRect, _rText, TEXT_DRAW_LEFT | TEXT_DRAW_TOP);
+ }
+ if(_bSelected)
+ {
+ _rDevice.SetFillColor( _rStyle.GetFieldColor() );
+ _rDevice.SetTextColor(COL_BLACK);
+ }
+
+ _rDevice.Pop();
+
+ (void)_bActive;
+// // no special painting for the active cell at the moment
+ (void)_rStyle;
+// // TODO: do we need this?
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::ShowCellCursor( Window& _rView, const Rectangle& _rCursorRect)
+ {
+ _rView.ShowFocus( _rCursorRect );
+ }
+
+ //--------------------------------------------------------------------
+ void GridTableRenderer::HideCellCursor( Window& _rView, const Rectangle& _rCursorRect)
+ {
+ (void)_rCursorRect;
+ _rView.HideFocus();
+
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
diff --git a/svtools/source/table/makefile.mk b/svtools/source/table/makefile.mk
new file mode 100644
index 000000000000..8feb7fee10d8
--- /dev/null
+++ b/svtools/source/table/makefile.mk
@@ -0,0 +1,59 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.16 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+ENABLE_EXCEPTIONS=TRUE
+PRJNAME=svtools
+TARGET=table
+#LIBTARGET=NO
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/svt.pmk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=\
+ $(SLO)$/tablecontrol.obj \
+ $(SLO)$/tablecontrol_impl.obj \
+ $(SLO)$/gridtablerenderer.obj \
+ $(SLO)$/tablegeometry.obj \
+ $(SLO)$/defaultinputhandler.obj \
+ $(SLO)$/tabledatawindow.obj
+
+#LIB1TARGET= $(SLB)$/$(TARGET).lib
+#LIB1OBJFILES= $(SLOFILES)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/svtools/source/table/tablecontrol.cxx b/svtools/source/table/tablecontrol.cxx
new file mode 100644
index 000000000000..c8895a19408d
--- /dev/null
+++ b/svtools/source/table/tablecontrol.cxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "tablegeometry.hxx"
+#include "tablecontrol_impl.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TableControl
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableControl::TableControl( Window* _pParent, WinBits _nStyle )
+ :Control( _pParent, _nStyle )
+ ,m_pImpl( new TableControl_Impl( *this ) )
+ {
+ m_pImpl->getDataWindow()->SetMouseButtonDownHdl( LINK( this, TableControl, ImplMouseButtonDownHdl ) );
+ m_pImpl->getDataWindow()->SetMouseButtonUpHdl( LINK( this, TableControl, ImplMouseButtonUpHdl ) );
+ }
+
+ //--------------------------------------------------------------------
+ TableControl::~TableControl()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::GetFocus()
+ {
+ if ( !m_pImpl->getInputHandler()->GetFocus( *m_pImpl ) )
+ {
+ Control::GetFocus();
+ GrabFocus();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::LoseFocus()
+ {
+ if ( !m_pImpl->getInputHandler()->LoseFocus( *m_pImpl ) )
+ Control::LoseFocus();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::KeyInput( const KeyEvent& rKEvt )
+ {
+ if ( !m_pImpl->getInputHandler()->KeyInput( *m_pImpl, rKEvt ) )
+ Control::KeyInput( rKEvt );
+ }
+ //--------------------------------------------------------------------
+ void TableControl::Resize()
+ {
+ Control::Resize();
+ m_pImpl->onResize();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::SetModel( PTableModel _pModel )
+ {
+ m_pImpl->setModel( _pModel );
+ }
+
+ //--------------------------------------------------------------------
+ PTableModel TableControl::GetModel() const
+ {
+ return m_pImpl->getModel();
+ }
+
+ //--------------------------------------------------------------------
+ RowPos TableControl::GetTopRow() const
+ {
+ return m_pImpl->getTopRow();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl::SetTopRow( RowPos _nRow )
+ {
+ // TODO
+ (void)_nRow;
+ }
+
+ //--------------------------------------------------------------------
+ RowPos TableControl::GetCurrentRow() const
+ {
+ return m_pImpl->getCurRow();
+ }
+
+ //--------------------------------------------------------------------
+ ColPos TableControl::GetCurrentColumn() const
+ {
+ return m_pImpl->getCurColumn();
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl::GoTo( ColPos _nColumn, RowPos _nRow )
+ {
+ return m_pImpl->goTo( _nColumn, _nRow );
+ }
+ //--------------------------------------------------------------------
+ void TableControl::InvalidateDataWindow(RowPos _nRowStart, bool _bRemoved)
+ {
+ Rectangle _rRect;
+ if(_bRemoved)
+ return m_pImpl->invalidateRows(_nRowStart, _rRect);
+ else
+ return m_pImpl->invalidateRow(_nRowStart, _rRect);
+ }
+ //--------------------------------------------------------------------
+ std::vector<RowPos> TableControl::getSelectedRows()
+ {
+ return m_pImpl->getSelectedRows();
+ }
+ //--------------------------------------------------------------------
+ void TableControl::removeSelectedRow(RowPos _nRowPos)
+ {
+ m_pImpl->removeSelectedRow(_nRowPos);
+ }
+ //--------------------------------------------------------------------
+
+ RowPos TableControl::GetCurrentRow(const Point& rPoint)
+ {
+ return m_pImpl->getCurrentRow( rPoint );
+ }
+
+ //--------------------------------------------------------------------
+
+ IMPL_LINK( TableControl, ImplMouseButtonDownHdl, MouseEvent*, pData )
+ {
+ CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, pData );
+ return 1;
+ }
+
+ IMPL_LINK( TableControl, ImplMouseButtonUpHdl, MouseEvent*, pData )
+ {
+ CallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, pData );
+ return 1;
+ }
+
+ SelectionEngine* TableControl::getSelEngine()
+ {
+ return m_pImpl->getSelEngine();
+ }
+
+ TableDataWindow* TableControl::getDataWindow()
+ {
+ return m_pImpl->getDataWindow();
+ }
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablecontrol_impl.cxx b/svtools/source/table/tablecontrol_impl.cxx
new file mode 100644
index 000000000000..e1ff3aeb7f2a
--- /dev/null
+++ b/svtools/source/table/tablecontrol_impl.cxx
@@ -0,0 +1,2003 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/tablemodel.hxx"
+#include "tablecontrol_impl.hxx"
+#include "tablegeometry.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+
+#include <vcl/scrbar.hxx>
+#include <vcl/seleng.hxx>
+
+#include <functional>
+#include <stdlib.h>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TempHideCursor
+ //====================================================================
+ class TempHideCursor
+ {
+ private:
+ IAbstractTableControl& m_rTable;
+
+ public:
+ TempHideCursor( IAbstractTableControl& _rTable )
+ :m_rTable( _rTable )
+ {
+ m_rTable.hideCursor();
+ }
+ ~TempHideCursor()
+ {
+ m_rTable.showCursor();
+ }
+ };
+
+ //====================================================================
+ //= EmptyTableModel
+ //====================================================================
+ /** default implementation of an ->ITableModel, used as fallback when no
+ real model is present
+
+ Instances of this class are static in any way, and provide the least
+ necessary default functionality for a table model.
+ */
+ class EmptyTableModel : public ITableModel
+ {
+ public:
+ EmptyTableModel()
+ {
+ }
+
+ // ITableModel overridables
+ virtual TableSize getColumnCount() const
+ {
+ return 0;
+ }
+ virtual TableSize getRowCount() const
+ {
+ return 0;
+ }
+ virtual bool hasColumnHeaders() const
+ {
+ return false;
+ }
+ virtual bool hasRowHeaders() const
+ {
+ return false;
+ }
+ virtual void setRowHeaders(bool _bRowHeaders)
+ {
+ (void)_bRowHeaders;
+ }
+ virtual void setColumnHeaders(bool _bColumnHeaders)
+ {
+ (void)_bColumnHeaders;
+ }
+ void setColumnCount(TableSize _nColCount)
+ {
+ (void) _nColCount;
+ }
+ void setRowCount(TableSize _nRowCount)
+ {
+ (void)_nRowCount;
+ }
+ virtual bool isCellEditable( ColPos col, RowPos row ) const
+ {
+ (void)col;
+ (void)row;
+ return false;
+ }
+ virtual void addTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // ignore
+ }
+ virtual void removeTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // ignore
+ }
+ virtual PColumnModel getColumnModel( ColPos column )
+ {
+ DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" );
+ (void)column;
+ return PColumnModel();
+ }
+ virtual PColumnModel getColumnModelByID( ColumnID id )
+ {
+ DBG_ERROR( "EmptyTableModel::getColumnModel: invalid call!" );
+ (void)id;
+ return PColumnModel();
+ }
+ virtual PTableRenderer getRenderer() const
+ {
+ return PTableRenderer();
+ }
+ virtual PTableInputHandler getInputHandler() const
+ {
+ return PTableInputHandler();
+ }
+ virtual TableMetrics getRowHeight() const
+ {
+ return 5 * 100;
+ }
+ virtual void setRowHeight(TableMetrics _nRowHeight)
+ {
+ (void)_nRowHeight;
+ }
+ virtual TableMetrics getColumnHeaderHeight() const
+ {
+ return 0;
+ }
+ virtual TableMetrics getRowHeaderWidth() const
+ {
+ return 0;
+ }
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const
+ {
+ (void)overAllHeight;
+ (void)actHeight;
+ return ScrollbarShowNever;
+ }
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const
+ {
+ (void)overAllWidth;
+ (void)actWidth;
+ return ScrollbarShowNever;
+ }
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent()
+ {
+ std::vector<rtl::OUString> cCC;
+ cCC.push_back(rtl::OUString::createFromAscii(""));
+ std::vector<std::vector<rtl::OUString> > cC;
+ cC.push_back(cCC);
+ return cC;
+ }
+ virtual void setRowHeaderName(std::vector<rtl::OUString> pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+ virtual std::vector<rtl::OUString> getRowHeaderName()
+ {
+ std::vector<rtl::OUString> cCC;
+ cCC.push_back(rtl::OUString::createFromAscii(""));
+ return cCC;
+ }
+ };
+
+
+ //====================================================================
+ //= TableControl_Impl
+ //====================================================================
+ DBG_NAME( TableControl_Impl )
+
+#if DBG_UTIL
+ //====================================================================
+ //= SuspendInvariants
+ //====================================================================
+ class SuspendInvariants
+ {
+ private:
+ const TableControl_Impl& m_rTable;
+ sal_Int32 m_nSuspendFlags;
+
+ public:
+ SuspendInvariants( const TableControl_Impl& _rTable, sal_Int32 _nSuspendFlags )
+ :m_rTable( _rTable )
+ ,m_nSuspendFlags( _nSuspendFlags )
+ {
+ DBG_ASSERT( ( m_rTable.m_nRequiredInvariants & m_nSuspendFlags ) == m_nSuspendFlags,
+ "SuspendInvariants: cannot suspend what is already suspended!" );
+ const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants &= ~m_nSuspendFlags;
+ }
+ ~SuspendInvariants()
+ {
+ const_cast< TableControl_Impl& >( m_rTable ).m_nRequiredInvariants |= m_nSuspendFlags;
+ }
+ };
+ #define DBG_SUSPEND_INV( flags ) \
+ SuspendInvariants aSuspendInv( *this, flags );
+#else
+ #define DBG_SUSPEND_INV( flags )
+#endif
+
+#if DBG_UTIL
+ //====================================================================
+ const char* TableControl_Impl_checkInvariants( const void* _pInstance )
+ {
+ return static_cast< const TableControl_Impl* >( _pInstance )->impl_checkInvariants();
+ }
+
+ namespace
+ {
+ template< typename SCALAR_TYPE >
+ bool lcl_checkLimitsExclusive( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax )
+ {
+ return ( _nValue > _nMin ) && ( _nValue < _nMax );
+ }
+
+ template< typename SCALAR_TYPE >
+ bool lcl_checkLimitsExclusive_OrDefault_OrFallback( SCALAR_TYPE _nValue, SCALAR_TYPE _nMin, SCALAR_TYPE _nMax,
+ PTableModel _pModel, SCALAR_TYPE _nDefaultOrFallback )
+ {
+ if ( !_pModel )
+ return _nValue == _nDefaultOrFallback;
+ if ( _nMax <= _nMin )
+ return _nDefaultOrFallback == _nValue;
+ return lcl_checkLimitsExclusive( _nValue, _nMin, _nMax );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ const sal_Char* TableControl_Impl::impl_checkInvariants() const
+ {
+ if ( !m_pModel )
+ return "no model, not even an EmptyTableModel";
+
+ if ( !m_pDataWindow )
+ return "invalid data window!";
+
+ if ( m_pModel->getColumnCount() != m_nColumnCount )
+ return "column counts are inconsistent!";
+
+ if ( m_pModel->getRowCount() != m_nRowCount )
+ return "row counts are inconsistent!";
+
+ if ( ( m_nCurColumn != COL_INVALID ) && !m_aColumnWidthsPixel.empty() && ( m_nCurColumn < 0 ) || ( m_nCurColumn >= (ColPos)m_aColumnWidthsPixel.size() ) )
+ return "current column is invalid!";
+
+ if ( m_aColumnWidthsPixel.size() != m_aAccColumnWidthsPixel.size() )
+ return "columnd width caches are inconsistent!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nTopRow, (RowPos)-1, m_nRowCount, getModel(), (RowPos)0 ) )
+ return "invalid top row value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurRow, (RowPos)-1, m_nRowCount, getModel(), ROW_INVALID ) )
+ return "invalid current row value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nLeftColumn, (ColPos)-1, m_nColumnCount, getModel(), (ColPos)0 ) )
+ return "invalid current column value!";
+
+ if ( !lcl_checkLimitsExclusive_OrDefault_OrFallback( m_nCurColumn, (ColPos)-1, m_nColumnCount, getModel(), COL_INVALID ) )
+ return "invalid current column value!";
+
+ if ( m_pInputHandler != m_pModel->getInputHandler() )
+ return "input handler is not the model-provided one!";
+
+ // m_nColHeaderHeightPixel consistent with the model's value?
+ {
+ TableMetrics nHeaderHeight = m_pModel->hasColumnHeaders() ? m_pModel->getColumnHeaderHeight() : 0;
+ nHeaderHeight = m_rAntiImpl.LogicToPixel( Size( 0, nHeaderHeight ), MAP_100TH_MM ).Height();
+ if ( nHeaderHeight != m_nColHeaderHeightPixel )
+ return "column header heights are inconsistent!";
+ }
+
+ bool isDummyModel = dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL;
+ if ( !isDummyModel )
+ {
+ TableMetrics nRowHeight = m_pModel->getRowHeight();
+ nRowHeight = m_rAntiImpl.LogicToPixel( Size( 0, nRowHeight ), MAP_100TH_MM ).Height();
+ if ( nRowHeight != m_nRowHeightPixel )
+ return "row heights are inconsistent!";
+ }
+
+ // m_nRowHeaderWidthPixel consistent with the model's value?
+ {
+ TableMetrics nHeaderWidth = m_pModel->hasRowHeaders() ? m_pModel->getRowHeaderWidth() : 0;
+ nHeaderWidth = m_rAntiImpl.LogicToPixel( Size( nHeaderWidth, 0 ), MAP_100TH_MM ).Width();
+ if ( nHeaderWidth != m_nRowHeaderWidthPixel )
+ return "row header widths are inconsistent!";
+ }
+
+ // TODO: check m_aColumnWidthsPixel and m_aAccColumnWidthsPixel
+
+ if ( m_nCursorHidden < 0 )
+ return "invalid hidden count for the cursor!";
+
+ if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pVScroll )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ // prevent infinite recursion
+
+ if ( m_pVScroll->GetThumbPos() != m_nTopRow )
+ return "vertical scroll bar |position| is incorrect!";
+ if ( m_pVScroll->GetRange().Max() != m_nRowCount )
+ return "vertical scroll bar |range| is incorrect!";
+ if ( m_pVScroll->GetVisibleSize() != impl_getVisibleRows( false ) )
+ return "vertical scroll bar |visible size| is incorrect!";
+ }
+
+ if ( ( m_nRequiredInvariants & INV_SCROLL_POSITION ) && m_pHScroll )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ // prevent infinite recursion
+
+ if ( m_pHScroll->GetThumbPos() != m_nLeftColumn )
+ return "horizontal scroll bar |position| is incorrect!";
+ if ( m_pHScroll->GetRange().Max() != m_nColumnCount )
+ return "horizontal scroll bar |range| is incorrect!";
+ if ( m_pHScroll->GetVisibleSize() != impl_getVisibleColumns( false ) )
+ return "horizontal scroll bar |visible size| is incorrect!";
+ }
+
+ return NULL;
+ }
+#endif
+
+#define DBG_CHECK_ME() \
+ DBG_CHKTHIS( TableControl_Impl, TableControl_Impl_checkInvariants )
+
+ //--------------------------------------------------------------------
+ TableControl_Impl::TableControl_Impl( TableControl& _rAntiImpl )
+ :m_rAntiImpl ( _rAntiImpl )
+ ,m_pModel ( new EmptyTableModel )
+ ,m_pInputHandler ( )
+ ,m_nRowHeightPixel ( 15 )
+ ,m_nColHeaderHeightPixel( 0 )
+ ,m_nRowHeaderWidthPixel ( 0 )
+ ,m_nColumnCount ( 0 )
+ ,m_nRowCount ( 0 )
+ ,m_nCurColumn ( COL_INVALID )
+ ,m_nCurRow ( ROW_INVALID )
+ ,m_nLeftColumn ( 0 )
+ ,m_nTopRow ( 0 )
+ ,m_nCursorHidden ( 1 )
+ ,m_pDataWindow ( new TableDataWindow( *this ) )
+ ,m_pVScroll ( NULL )
+ ,m_pHScroll ( NULL )
+ ,m_pScrollCorner ( NULL )
+ ,m_pSelEngine ( )
+ ,m_nRowSelected ( )
+ ,m_pTableFunctionSet ( new TableFunctionSet(this ) )
+ ,m_nAnchor (-1 )
+#if DBG_UTIL
+ ,m_nRequiredInvariants ( INV_SCROLL_POSITION )
+#endif
+ {
+ DBG_CTOR( TableControl_Impl, TableControl_Impl_checkInvariants );
+ m_pSelEngine = new SelectionEngine(m_pDataWindow, m_pTableFunctionSet);
+ m_pSelEngine->SetSelectionMode(SINGLE_SELECTION);
+ m_pDataWindow->SetPosPixel( Point( 0, 0 ) );
+ m_pDataWindow->Show();
+ }
+
+ //--------------------------------------------------------------------
+ TableControl_Impl::~TableControl_Impl()
+ {
+ DBG_DTOR( TableControl_Impl, TableControl_Impl_checkInvariants );
+
+ DELETEZ( m_pVScroll );
+ DELETEZ( m_pHScroll );
+ DELETEZ( m_pScrollCorner );
+ DELETEZ( m_pTableFunctionSet );
+ DELETEZ( m_pSelEngine );
+ DELETEZ( m_pDataWindow );
+ }
+
+ //--------------------------------------------------------------------
+ PTableModel TableControl_Impl::getModel() const
+ {
+ if ( dynamic_cast< const EmptyTableModel* >( m_pModel.get() ) != NULL )
+ // if it's an EmptyTableModel, pretend that there is no model
+ return PTableModel();
+
+ return m_pModel;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::setModel( PTableModel _pModel )
+ {
+ DBG_CHECK_ME();
+
+ TempHideCursor aHideCursor( *this );
+
+ // TODO: revoke as table listener from the model
+
+ m_pModel = _pModel;
+ if ( !m_pModel )
+ m_pModel.reset( new EmptyTableModel );
+
+ // TODO: register as table listener
+ //m_pModel->addTableModelListener(PTableModelListener(m_pTableModelListener));
+ m_nCurRow = ROW_INVALID;
+ m_nCurColumn = COL_INVALID;
+
+ // recalc some model-dependent cached info
+ impl_ni_updateCachedModelValues();
+
+ // completely invalidate
+ m_rAntiImpl.Invalidate();
+
+ // reset cursor to (0,0)
+ if ( m_nRowCount ) m_nCurRow = 0;
+ if ( m_nColumnCount ) m_nCurColumn = 0;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const
+ {
+ DBG_CHECK_ME();
+
+ _rCellArea.Left() = 0;
+ _rCellArea.Top() = 0;
+
+ // determine the right-most border of the last column which is
+ // at least partially visible
+ _rCellArea.Right() = m_nRowHeaderWidthPixel;
+ if ( !m_aAccColumnWidthsPixel.empty() )
+ {
+ // the number of pixels which are scroll out of the left hand
+ // side of the window
+ long nScrolledOutLeft = m_nLeftColumn == 0 ? 0 : m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ];
+
+ ArrayOfLong::const_reverse_iterator loop = m_aAccColumnWidthsPixel.rbegin();
+ do
+ {
+ _rCellArea.Right() = *loop++ - nScrolledOutLeft + m_nRowHeaderWidthPixel;
+ }
+ while ( ( loop != m_aAccColumnWidthsPixel.rend() )
+ && ( *loop - nScrolledOutLeft >= _rCellArea.Right() )
+ );
+ }
+ // so far, _rCellArea.Right() denotes the first pixel *after* the cell area
+ --_rCellArea.Right();
+
+ // determine the last row which is at least partially visible
+ _rCellArea.Bottom() =
+ m_nColHeaderHeightPixel
+ + impl_getVisibleRows( true ) * m_nRowHeightPixel
+ - 1;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const
+ {
+ DBG_CHECK_ME();
+
+ impl_getAllVisibleCellsArea( _rCellArea );
+ _rCellArea.Left() = m_nRowHeaderWidthPixel;
+ _rCellArea.Top() = m_nColHeaderHeightPixel;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateCachedModelValues()
+ {
+ m_nRowHeightPixel = 15;
+ m_nColHeaderHeightPixel = 0;
+ m_nRowHeaderWidthPixel = 0;
+ m_pInputHandler.reset();
+ m_nColumnCount = m_nRowCount = 0;
+
+ m_nRowHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getRowHeight() ), MAP_100TH_MM ).Height();
+ if ( m_pModel->hasColumnHeaders() )
+ m_nColHeaderHeightPixel = m_rAntiImpl.LogicToPixel( Size( 0, m_pModel->getColumnHeaderHeight() ), MAP_100TH_MM ).Height();
+ if ( m_pModel->hasRowHeaders() )
+ m_nRowHeaderWidthPixel = m_rAntiImpl.LogicToPixel( Size( m_pModel->getRowHeaderWidth(), 0 ), MAP_100TH_MM ).Width();
+
+ impl_ni_updateColumnWidths();
+
+ m_pInputHandler = m_pModel->getInputHandler();
+ if ( !m_pInputHandler )
+ m_pInputHandler.reset( new DefaultInputHandler );
+
+ m_nColumnCount = m_pModel->getColumnCount();
+ m_nRowCount = m_pModel->getRowCount();
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateColumnWidths()
+ {
+ m_aColumnWidthsPixel.resize( 0 );
+ m_aAccColumnWidthsPixel.resize( 0 );
+ if ( !m_pModel )
+ return;
+
+ TableSize colCount = m_pModel->getColumnCount();
+ m_aColumnWidthsPixel.reserve( colCount );
+ m_aAccColumnWidthsPixel.reserve( colCount );
+ long accumulatedPixelWidth = 0;
+ for ( ColPos col = 0; col < colCount; ++col )
+ {
+ PColumnModel pColumn = m_pModel->getColumnModel( col );
+ DBG_ASSERT( !!pColumn, "TableControl_Impl::impl_ni_updateColumnWidths: invalid column returned by the model!" );
+ if ( !pColumn )
+ continue;
+
+ TableMetrics colWidth = pColumn->getWidth();
+ DBG_ASSERT( ( colWidth == COLWIDTH_FIT_TO_VIEW ) || ( colWidth > 0 ),
+ "TableControl_Impl::impl_ni_updateColumnWidths: invalid column width!" );
+
+ long pixelWidth = 0;
+ if ( colWidth == COLWIDTH_FIT_TO_VIEW )
+ {
+ // TODO
+ DBG_ERROR( "TableControl_Impl::impl_ni_updateColumnWidths: COLWIDTH_FIT_TO_VIEW not implemented, yet!" );
+ }
+ else
+ {
+ pixelWidth = m_rAntiImpl.LogicToPixel( Size( colWidth, 0 ), MAP_100TH_MM ).Width();
+ }
+
+ m_aColumnWidthsPixel.push_back( pixelWidth );
+
+ m_aAccColumnWidthsPixel.push_back( accumulatedPixelWidth += pixelWidth );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ namespace
+ {
+ //................................................................
+ /// determines whether a scrollbar is needed for the given values
+ bool lcl_determineScrollbarNeed( ScrollbarVisibility _eVisibility,
+ long _nVisibleUnits, long _nRange )
+ {
+ if ( _eVisibility == ScrollbarShowNever )
+ return false;
+ if ( _eVisibility == ScrollbarShowAlways )
+ return true;
+ return _nVisibleUnits > _nRange;
+ }
+
+ //................................................................
+ void lcl_setButtonRepeat( Window& _rWindow, ULONG _nDelay )
+ {
+ AllSettings aSettings = _rWindow.GetSettings();
+ MouseSettings aMouseSettings = aSettings.GetMouseSettings();
+
+ aMouseSettings.SetButtonRepeat( _nDelay );
+ aSettings.SetMouseSettings( aMouseSettings );
+
+ _rWindow.SetSettings( aSettings, TRUE );
+ }
+
+ //................................................................
+ void lcl_updateScrollbar( Window& _rParent, ScrollBar*& _rpBar,
+ ScrollbarVisibility _eVisibility, long _nVisibleUnits,
+ long _nPosition, long _nLineSize, long _nRange,
+ bool _bHorizontal, const Link& _rScrollHandler )
+ {
+ // do we need the scrollbar?
+ bool bNeedBar = lcl_determineScrollbarNeed( _eVisibility, _nVisibleUnits, _nRange );
+
+ // do we currently have the scrollbar?
+ bool bHaveBar = _rpBar != NULL;
+
+ // do we need to correct the scrollbar visibility?
+ if ( bHaveBar && !bNeedBar )
+ {
+ DELETEZ( _rpBar );
+ }
+ else if ( !bHaveBar && bNeedBar )
+ {
+ _rpBar = new ScrollBar(
+ &_rParent,
+ WB_DRAG | ( _bHorizontal ? WB_HSCROLL : WB_VSCROLL )
+ );
+ _rpBar->SetScrollHdl( _rScrollHandler );
+ // get some speed into the scrolling ....
+ lcl_setButtonRepeat( *_rpBar, 0 );
+ }
+
+ if ( _rpBar )
+ {
+ _rpBar->SetRange( Range( 0, _nRange ) );
+ _rpBar->SetVisibleSize( _nVisibleUnits );
+ _rpBar->SetPageSize( _nVisibleUnits );
+ _rpBar->SetLineSize( _nLineSize );
+ _rpBar->SetThumbPos( _nPosition );
+ _rpBar->Show();
+ }
+ }
+
+ //................................................................
+ /** returns the number of rows fitting into the given range,
+ for the given row height. Partially fitting rows are counted, too, if the
+ respective parameter says so.
+ */
+ TableSize lcl_getRowsFittingInto( long _nOverallHeight, long _nRowHeightPixel, bool _bAcceptPartialRow = false )
+ {
+ return _bAcceptPartialRow
+ ? ( _nOverallHeight + ( _nRowHeightPixel - 1 ) ) / _nRowHeightPixel
+ : _nOverallHeight / _nRowHeightPixel;
+ }
+
+ //................................................................
+ /** returns the number of columns fitting into the given area,
+ with the first visible column as given. Partially fitting columns are counted, too,
+ if the respective parameter says so.
+ */
+ TableSize lcl_getColumnsVisibleWithin( const Rectangle& _rArea, ColPos _nFirstVisibleColumn,
+ const TableControl_Impl& _rControl, bool _bAcceptPartialRow )
+ {
+ TableSize visibleColumns = 0;
+ TableColumnGeometry aColumn( _rControl, _rArea, _nFirstVisibleColumn );
+ while ( aColumn.isValid() )
+ {
+ if ( !_bAcceptPartialRow )
+ if ( aColumn.getRect().Right() > _rArea.Right() )
+ // this column is only partially visible, and this is not allowed
+ break;
+
+ aColumn.moveRight();
+ ++visibleColumns;
+ }
+ return visibleColumns;
+ }
+
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_updateScrollbars()
+ {
+ TempHideCursor aHideCursor( *this );
+
+ // the width/height of a scrollbar, needed several times below
+ long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize();
+ if ( m_rAntiImpl.IsZoom() )
+ nScrollbarMetrics = (long)( nScrollbarMetrics * (double)m_rAntiImpl.GetZoom() );
+
+ // determine the playground for the data cells (excluding headers)
+ // TODO: what if the control is smaller than needed for the headers/scrollbars?
+ Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() );
+ aDataCellPlayground.Left() = m_nRowHeaderWidthPixel;
+ aDataCellPlayground.Top() = m_nColHeaderHeightPixel;
+
+ // do we need a vertical scrollbar?
+ bool bFirstRoundVScrollNeed = false;
+ if ( lcl_determineScrollbarNeed(
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(), m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ m_nRowCount ) )
+ {
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ bFirstRoundVScrollNeed = true;
+ }
+ // do we need a horizontal scrollbar?
+ if ( lcl_determineScrollbarNeed(
+ m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]),
+ lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ),
+ m_nColumnCount ) )
+ {
+ aDataCellPlayground.Bottom() -= nScrollbarMetrics;
+
+ // now that we just found that we need a horizontal scrollbar,
+ // the need for a vertical one may have changed, since the horizontal
+ // SB might just occupy enough space so that not all rows do fit
+ // anymore
+ if ( !bFirstRoundVScrollNeed && lcl_determineScrollbarNeed(
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ m_nRowCount ) )
+ {
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ }
+ }
+ else
+ {
+ Size regionWithoutHeader = m_rAntiImpl.PixelToLogic(Size(aDataCellPlayground.Right() - aDataCellPlayground.Left(),0),MAP_100TH_MM);
+ TableMetrics nColWidth = regionWithoutHeader.Width()/m_nColumnCount;
+ for ( ColPos col = 0; col < m_nColumnCount; ++col )
+ m_pModel->getColumnModel(col)->setWidth(nColWidth);
+ m_rAntiImpl.SetModel(m_pModel);
+ }
+
+ // create or destroy the vertical scrollbar, as needed
+ lcl_updateScrollbar(
+ m_rAntiImpl,
+ m_pVScroll,
+ m_pModel->getVerticalScrollbarVisibility(aDataCellPlayground.GetHeight(),m_nRowHeightPixel*m_nRowCount),
+ lcl_getRowsFittingInto( aDataCellPlayground.GetHeight(), m_nRowHeightPixel ),
+ // visible units
+ m_nTopRow, // current position
+ 1, // line size
+ m_nRowCount, // range
+ false, // vertical
+ LINK( this, TableControl_Impl, OnScroll ) // scroll handler
+ );
+ // position it
+ if ( m_pVScroll )
+ {
+ Rectangle aScrollbarArea(
+ Point( aDataCellPlayground.Right() + 1, 0 ),
+ Size( nScrollbarMetrics, aDataCellPlayground.Bottom() + 1 )
+ );
+ m_pVScroll->SetPosSizePixel(
+ aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() );
+ }
+
+ // create or destroy the horizontal scrollbar, as needed
+ lcl_updateScrollbar(
+ m_rAntiImpl,
+ m_pHScroll,
+ m_pModel->getHorizontalScrollbarVisibility(aDataCellPlayground.GetWidth(), m_aAccColumnWidthsPixel[m_nColumnCount-1]),
+ lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false ),
+ // visible units
+ m_nLeftColumn, // current position
+ 1, // line size
+ m_nColumnCount, // range
+ true, // horizontal
+ LINK( this, TableControl_Impl, OnScroll ) // scroll handler
+ );
+ // position it
+ if ( m_pHScroll )
+ {
+ Rectangle aScrollbarArea(
+ Point( 0, aDataCellPlayground.Bottom() + 1 ),
+ Size( aDataCellPlayground.Right() + 1, nScrollbarMetrics )
+ );
+ m_pHScroll->SetPosSizePixel(
+ aScrollbarArea.TopLeft(), aScrollbarArea.GetSize() );
+ }
+
+ // the corner window connecting the two scrollbars in the lower right corner
+ bool bHaveScrollCorner = NULL != m_pScrollCorner;
+ bool bNeedScrollCorner = ( NULL != m_pHScroll ) && ( NULL != m_pVScroll );
+ if ( bHaveScrollCorner && !bNeedScrollCorner )
+ {
+ DELETEZ( m_pScrollCorner );
+ }
+ else if ( !bHaveScrollCorner && bNeedScrollCorner )
+ {
+ m_pScrollCorner = new ScrollBarBox( &m_rAntiImpl );
+ m_pScrollCorner->SetSizePixel( Size( nScrollbarMetrics, nScrollbarMetrics ) );
+ m_pScrollCorner->SetPosPixel( Point( aDataCellPlayground.Right() + 1, aDataCellPlayground.Bottom() + 1 ) );
+ m_pScrollCorner->Show();
+ }
+
+ // resize the data window
+ m_pDataWindow->SetSizePixel( Size(
+ aDataCellPlayground.GetWidth() + m_nRowHeaderWidthPixel,
+ aDataCellPlayground.GetHeight() + m_nColHeaderHeightPixel
+ ) );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::onResize()
+ {
+ DBG_CHECK_ME();
+ impl_ni_updateScrollbars();
+ //Rectangle aAllCells;
+ // impl_getAllVisibleCellsArea( aAllCells );
+ //m_pSelEngine->SetVisibleArea(aAllCells);
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::doPaintContent( const Rectangle& _rUpdateRect )
+ {
+ DBG_CHECK_ME();
+
+ if ( !getModel() )
+ return;
+
+ PTableRenderer pRenderer = getModel()->getRenderer();
+ DBG_ASSERT( !!pRenderer, "TableDataWindow::Paint: invalid renderer!" );
+ if ( !pRenderer )
+ return;
+
+ // our current style settings, to be passed to the renderer
+ const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings();
+
+ // the area occupied by all (at least partially) visible cells, including
+ // headers
+ Rectangle aAllCellsWithHeaders;
+ impl_getAllVisibleCellsArea( aAllCellsWithHeaders );
+
+ m_nRowCount = m_pModel->getRowCount();
+ // ............................
+ // draw the header column area
+ if ( getModel()->hasColumnHeaders() )
+ {
+ TableRowGeometry aHeaderRow( *this, Rectangle( Point( 0, 0 ),
+ aAllCellsWithHeaders.BottomRight() ), ROW_COL_HEADERS );
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aHeaderRow.getRect(), true, false, rStyle
+ );
+ // Note that strictly, aHeaderRow.getRect() also contains the intersection between column
+ // and row header area. However, below we go to paint this intersection, again,
+ // so this hopefully doesn't hurt if we already paint it here.
+
+ for ( TableCellGeometry aCell( aHeaderRow, m_nLeftColumn );
+ aCell.isValid();
+ aCell.moveRight()
+ )
+ {
+ if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() )
+ continue;
+
+ bool isActiveColumn = ( aCell.getColumn() == getCurColumn() );
+ bool isSelectedColumn = false;
+ pRenderer->PaintColumnHeader( aCell.getColumn(), isActiveColumn, isSelectedColumn,
+ *m_pDataWindow, aCell.getRect(), rStyle );
+ }
+ }
+
+ // the area occupied by the row header, if any
+ Rectangle aRowHeaderArea;
+ if ( getModel()->hasRowHeaders() )
+ {
+ aRowHeaderArea = aAllCellsWithHeaders;
+ aRowHeaderArea.Right() = m_nRowHeaderWidthPixel - 1;
+ aRowHeaderArea.Bottom() = m_nRowHeightPixel * m_nRowCount + m_nColHeaderHeightPixel - 1;
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aRowHeaderArea, false, true, rStyle
+ );
+ // Note that strictly, aRowHeaderArea also contains the intersection between column
+ // and row header area. However, below we go to paint this intersection, again,
+ // so this hopefully doesn't hurt if we already paint it here.
+
+ if ( getModel()->hasColumnHeaders() )
+ {
+ TableCellGeometry aIntersection( *this, Rectangle( Point( 0, 0 ),
+ aAllCellsWithHeaders.BottomRight() ), COL_ROW_HEADERS, ROW_COL_HEADERS );
+ pRenderer->PaintHeaderArea(
+ *m_pDataWindow, aIntersection.getRect(), true, true, rStyle
+ );
+ }
+ }
+
+ // ............................
+ // draw the table content row by row
+
+ TableSize colCount = getModel()->getColumnCount();
+
+ // paint all rows
+ Rectangle aAllDataCellsArea;
+ impl_getAllVisibleDataCellArea( aAllDataCellsArea );
+
+ //get the vector, which contains row vectors, each containing the data for the cells in this row
+ std::vector<std::vector<rtl::OUString> > aCellContent = m_pModel->getCellContent();
+ //if the vector is empty, fill it with empty data, so the table can be painted
+ if(aCellContent.empty())
+ {
+ std::vector<rtl::OUString> emptyCells;
+ while(m_nRowCount!=0)
+ {
+ aCellContent.push_back(emptyCells);
+ --m_nRowCount;
+ }
+ }
+ std::vector<std::vector<rtl::OUString> >::iterator it = aCellContent.begin()+m_nTopRow;
+ //get the vector, which contains the row header titles
+ std::vector<rtl::OUString> aRowHeaderContent;
+ ::std::vector<rtl::OUString>::iterator itRowName = aRowHeaderContent.begin();
+
+ if(m_pModel->hasRowHeaders())
+ {
+ aRowHeaderContent = m_pModel->getRowHeaderName();
+ //if the vector is empty, fill it with empty strings, so the table can be painted
+ if(aRowHeaderContent.empty())
+ {
+ while(m_nRowCount!=0)
+ {
+ aRowHeaderContent.push_back(rtl::OUString::createFromAscii(""));
+ --m_nRowCount;
+ }
+ }
+ itRowName = aRowHeaderContent.begin()+m_nTopRow;
+ }
+ for ( TableRowGeometry aRowIterator( *this, aAllCellsWithHeaders, getTopRow() );
+ aRowIterator.isValid();
+ aRowIterator.moveDown() )
+ {
+ if ( _rUpdateRect.GetIntersection( aRowIterator.getRect() ).IsEmpty() )
+ {
+ if(m_pModel->hasRowHeaders())
+ ++itRowName;
+ ++it;
+ continue;
+ }
+ bool isActiveRow = ( aRowIterator.getRow() == getCurRow() );
+ bool isSelectedRow = false;
+ if(!m_nRowSelected.empty())
+ {
+ for(std::vector<RowPos>::iterator itSel=m_nRowSelected.begin();
+ itSel!=m_nRowSelected.end();++itSel)
+ {
+ if(*itSel == aRowIterator.getRow())
+ isSelectedRow = true;
+ }
+ }
+ std::vector<rtl::OUString> aCellData;
+ if(it != aCellContent.end())
+ {
+ aCellData = *it;
+ ++it;
+ }
+ ::std::vector<rtl::OUString>::iterator iter = aCellData.begin()+m_nLeftColumn;
+
+ // give the redenderer a chance to prepare the row
+ pRenderer->PrepareRow( aRowIterator.getRow(), isActiveRow, isSelectedRow,
+ *m_pDataWindow, aRowIterator.getRect().GetIntersection( aAllDataCellsArea ), rStyle );
+
+ // paint the row header
+ if ( m_pModel->hasRowHeaders() )
+ {
+ rtl::OUString rowHeaderName;
+ if(itRowName != aRowHeaderContent.end())
+ {
+ rowHeaderName = *itRowName;
+ ++itRowName;
+ }
+ Rectangle aCurrentRowHeader( aRowHeaderArea.GetIntersection( aRowIterator.getRect() ) );
+ pRenderer->PaintRowHeader( isActiveRow, isSelectedRow, *m_pDataWindow, aCurrentRowHeader,
+ rStyle, rowHeaderName );
+ }
+ if ( !colCount )
+ continue;
+
+ // paint all cells in this row
+ for ( TableCellGeometry aCell( aRowIterator, m_nLeftColumn );
+ aCell.isValid();
+ aCell.moveRight()
+ )
+ {
+ // if ( _rUpdateRect.GetIntersection( aCell.getRect() ).IsEmpty() )
+ // continue;
+
+ //bool isActiveCell = isActiveRow && ( aCell.getColumn() == getCurColumn() );
+ bool isSelectedColumn = false;
+ rtl::OUString cellData;
+ if(aCellData.empty())
+ cellData=rtl::OUString::createFromAscii("");
+ else if(iter != aCellData.end())
+ {
+ cellData = *iter;
+ ++iter;
+ }
+ pRenderer->PaintCell( aCell.getColumn(), isSelectedRow || isSelectedColumn, isActiveRow,
+ *m_pDataWindow, aCell.getRect(), rStyle, cellData );
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::hideCursor()
+ {
+ DBG_CHECK_ME();
+
+ if ( ++m_nCursorHidden == 1 )
+ impl_ni_doSwitchCursor( false );
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::showCursor()
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_nCursorHidden > 0, "TableControl_Impl::showCursor: cursor not hidden!" );
+ if ( --m_nCursorHidden == 0 )
+ impl_ni_doSwitchCursor( true );
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl_Impl::dispatchAction( TableControlAction _eAction )
+ {
+ DBG_CHECK_ME();
+
+ bool bSuccess = false;
+ Rectangle rCells;
+ switch ( _eAction )
+ {
+ case cursorDown:
+ if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ //if other rows already selected, deselect them
+ if(m_nRowSelected.size()>0)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ }
+ if(m_nCurRow < m_nRowCount-1)
+ {
+ ++m_nCurRow;
+ m_nRowSelected.push_back(m_nCurRow);
+ }
+ else
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ ensureVisible(m_nCurColumn,m_nCurRow,false);
+ bSuccess = true;
+ }
+ else
+ {
+ if ( m_nCurRow < m_nRowCount - 1 )
+ bSuccess = goTo( m_nCurColumn, m_nCurRow + 1 );
+ }
+ break;
+
+ case cursorUp:
+ if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ if(m_nRowSelected.size()>0)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ }
+ if(m_nCurRow>0)
+ {
+ --m_nCurRow;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ ensureVisible(m_nCurColumn,m_nCurRow,false);
+ bSuccess = true;
+ }
+ else
+ {
+ if ( m_nCurRow > 0 )
+ bSuccess = goTo( m_nCurColumn, m_nCurRow - 1 );
+ }
+ break;
+ case cursorLeft:
+ if ( m_nCurColumn > 0 )
+ bSuccess = goTo( m_nCurColumn - 1, m_nCurRow );
+ else
+ if ( ( m_nCurColumn == 0) && ( m_nCurRow > 0 ) )
+ bSuccess = goTo( m_nColumnCount - 1, m_nCurRow - 1 );
+ break;
+
+ case cursorRight:
+ if ( m_nCurColumn < m_nColumnCount - 1 )
+ bSuccess = goTo( m_nCurColumn + 1, m_nCurRow );
+ else
+ if ( ( m_nCurColumn == m_nColumnCount - 1 ) && ( m_nCurRow < m_nRowCount - 1 ) )
+ bSuccess = goTo( 0, m_nCurRow + 1 );
+ break;
+
+ case cursorToLineStart:
+ bSuccess = goTo( 0, m_nCurRow );
+ break;
+
+ case cursorToLineEnd:
+ bSuccess = goTo( m_nColumnCount - 1, m_nCurRow );
+ break;
+
+ case cursorToFirstLine:
+ bSuccess = goTo( m_nCurColumn, 0 );
+ break;
+
+ case cursorToLastLine:
+ bSuccess = goTo( m_nCurColumn, m_nRowCount - 1 );
+ break;
+
+ case cursorPageUp:
+ {
+ RowPos nNewRow = ::std::max( (RowPos)0, m_nCurRow - impl_getVisibleRows( false ) );
+ bSuccess = goTo( m_nCurColumn, nNewRow );
+ }
+ break;
+
+ case cursorPageDown:
+ {
+ RowPos nNewRow = ::std::min( m_nRowCount - 1, m_nCurRow + impl_getVisibleRows( false ) );
+ bSuccess = goTo( m_nCurColumn, nNewRow );
+ }
+ break;
+
+ case cursorTopLeft:
+ bSuccess = goTo( 0, 0 );
+ break;
+
+ case cursorBottomRight:
+ bSuccess = goTo( m_nColumnCount - 1, m_nRowCount - 1 );
+ break;
+
+ case cursorSelectRow:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ //pos is the position of the current row in the vector of selected rows, if current row is selected
+ int pos = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ //if current row is selected, it should be deselected, when ALT+SPACE are pressed
+ if(pos>-1)
+ m_nRowSelected.erase(m_nRowSelected.begin()+pos);
+ //else select the row->put it in the vector
+ else
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ bSuccess = true;
+ }
+ break;
+ case cursorSelectRowUp:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ //if there are other selected rows, deselect them
+ return false;
+ }
+ else
+ {
+ //there are other selected rows
+ if(m_nRowSelected.size()>0)
+ {
+ //the anchor wasn't set -> a region is not selected, that's why clear all selection
+ //and select the current row
+ if(m_nAnchor==-1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ //a region is already selected, prevRow is last selected row and the row above - nextRow - should be selected
+ int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow-1);
+ if(prevRow>-1)
+ {
+ //if m_nCurRow isn't the upper one, can move up, otherwise not
+ if(m_nCurRow>0)
+ m_nCurRow--;
+ else
+ return bSuccess = true;
+ //if nextRow already selected, deselect it, otherwise select it
+ if(m_nRowSelected[nextRow] == m_nCurRow)
+ {
+ m_nRowSelected.erase(m_nRowSelected.begin()+prevRow);
+ invalidateSelectedRow(m_nCurRow+1, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ }
+ }
+ else
+ {
+ //if nothing is selected and the current row isn't the upper one
+ //select the current and one row above
+ //otherwise select only the upper row
+ if(m_nCurRow>0)
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ m_nCurRow--;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRegion(m_nCurRow+1, m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ m_pSelEngine->SetAnchor(TRUE);
+ m_nAnchor = m_nCurRow;
+ ensureVisible(m_nCurColumn, m_nCurRow, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowDown:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ {
+ bSuccess = false;
+ }
+ else
+ {
+ if(m_nRowSelected.size()>0)
+ {
+ //the anchor wasn't set -> a region is not selected, that's why clear all selection
+ //and select the current row
+ if(m_nAnchor==-1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ it!=m_nRowSelected.end();++it)
+ {
+ invalidateSelectedRow(*it,rCells);
+ m_pDataWindow->Invalidate(rCells);
+ }
+ m_nRowSelected.clear();
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ else
+ {
+ //a region is already selected, prevRow is last selected row and the row beneath - nextRow - should be selected
+ int prevRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow);
+ int nextRow = getRowSelectedNumber(m_nRowSelected, m_nCurRow+1);
+ if(prevRow>-1)
+ {
+ //if m_nCurRow isn't the last one, can move down, otherwise not
+ if(m_nCurRow<m_nRowCount)
+ m_nCurRow++;
+ else
+ return bSuccess = true;
+ //if net row already selected, deselect it, otherwise select it
+ if(m_nRowSelected[nextRow] == m_nCurRow)
+ {
+ m_nRowSelected.erase(m_nRowSelected.begin()+prevRow);
+ invalidateSelectedRow(m_nCurRow-1, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ }
+ }
+ else
+ {
+ //there wasn't any selection, select curennt and row beneath, otherwise onlyrow beneath
+ if(m_nCurRow<m_nRowCount-1)
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ m_nCurRow++;
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRegion(m_nCurRow-1, m_nCurRow, rCells);
+ }
+ else
+ {
+ m_nRowSelected.push_back(m_nCurRow);
+ invalidateSelectedRow(m_nCurRow, rCells);
+ }
+ }
+ m_pSelEngine->SetAnchor(TRUE);
+ m_nAnchor = m_nCurRow;
+ ensureVisible(m_nCurColumn, m_nCurRow, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowAreaTop:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ bSuccess = false;
+ else
+ {
+ //select the region between the current and the upper row
+ RowPos iter = m_nCurRow;
+ invalidateSelectedRegion(m_nCurRow, 0, rCells);
+ //put the rows in vector
+ while(iter>=0)
+ {
+ if(!isRowSelected(m_nRowSelected, iter))
+ m_nRowSelected.push_back(iter);
+ --iter;
+ }
+ m_nCurRow = 0;
+ m_nAnchor = m_nCurRow;
+ m_pSelEngine->SetAnchor(TRUE);
+ ensureVisible(m_nCurColumn, 0, false);
+ bSuccess = true;
+ }
+ }
+ break;
+ case cursorSelectRowAreaBottom:
+ {
+ if(m_pSelEngine->GetSelectionMode() == NO_SELECTION)
+ return bSuccess = false;
+ else if(m_pSelEngine->GetSelectionMode() == SINGLE_SELECTION)
+ return bSuccess = false;
+ //select the region between the current and the last row
+ RowPos iter = m_nCurRow;
+ invalidateSelectedRegion(m_nCurRow, m_nRowCount-1, rCells);
+ //put the rows in the vector
+ while(iter<=m_nRowCount)
+ {
+ if(!isRowSelected(m_nRowSelected, iter))
+ m_nRowSelected.push_back(iter);
+ ++iter;
+ }
+ m_nCurRow = m_nRowCount-1;
+ m_nAnchor = m_nCurRow;
+ m_pSelEngine->SetAnchor(TRUE);
+ ensureVisible(m_nCurColumn, m_nRowCount, false);
+ bSuccess = true;
+ }
+ break;
+ default:
+ DBG_ERROR( "TableControl_Impl::dispatchAction: unsupported action!" );
+ }
+ return bSuccess;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_ni_doSwitchCursor( bool _bShow )
+ {
+ PTableRenderer pRenderer = !!m_pModel ? m_pModel->getRenderer() : PTableRenderer();
+ if ( !!pRenderer )
+ {
+ Rectangle aCellRect;
+ impl_getCellRect( m_nCurColumn, m_nCurRow, aCellRect );
+
+ // const StyleSettings& rStyle = m_rAntiImpl.GetSettings().GetStyleSettings();
+ if ( _bShow )
+ {
+ pRenderer->ShowCellCursor( *m_pDataWindow, aCellRect);
+ }
+ else
+ {
+ pRenderer->HideCellCursor( *m_pDataWindow, aCellRect);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const
+ {
+ DBG_CHECK_ME();
+
+ if ( !m_pModel
+ || ( COL_INVALID == _nColumn )
+ || ( ROW_INVALID == _nRow )
+ )
+ {
+ _rCellRect.SetEmpty();
+ return;
+ }
+
+ DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_pModel->getColumnCount() ),
+ "TableControl_Impl::impl_getCellRect: invalid column index!" );
+ DBG_ASSERT( ( _nRow >= 0 ) && ( _nRow < m_pModel->getRowCount() ),
+ "TableControl_Impl::impl_getCellRect: invalid row index!" );
+
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+
+ TableCellGeometry aCell( *this, aAllCells, _nColumn, _nRow );
+ _rCellRect = aCell.getRect();
+ }
+ //-------------------------------------------------------------------------------
+ RowPos TableControl_Impl::getCurrentRow(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ Rectangle rCellRect;
+ RowPos newRowPos = -2;//-1 is HeaderRow
+ ColPos newColPos = 0;
+ //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!!
+ for(int i=0;i<m_nRowCount;i++)
+ {
+ for(int j=-1;j<m_nColumnCount;j++)
+ {
+ impl_getCellRect(j,i,rCellRect);
+ if((rPoint.X() >= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom())
+ {
+ newRowPos = i;
+ newColPos = j;
+ if(newColPos == -1)
+ m_nCurColumn = 0;
+ else
+ m_nCurColumn = newColPos;
+ return newRowPos;
+ }
+ }
+ }
+ return newRowPos;
+ }
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::setCursorAtCurrentCell(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ hideCursor();
+ Rectangle rCellRect;
+ RowPos newRowPos = -2;//-1 is HeaderRow
+ ColPos newColPos = 0;
+ //To Do: when only row position needed, the second loop isn't necessary, Please proove this!!!
+ for(int i=0;i<m_nRowCount;i++)
+ {
+ for(int j=-1;j<m_nColumnCount;j++)
+ {
+ impl_getCellRect(j,i,rCellRect);
+ if((rPoint.X() >= rCellRect.Left() && rPoint.X() <= rCellRect.Right()) && rPoint.Y() >= rCellRect.Top() && rPoint.Y() <= rCellRect.Bottom())
+ {
+ newRowPos = i;
+ m_nCurRow = newRowPos;
+ newColPos = j;
+ if(newColPos == -1)
+ m_nCurColumn = 0;
+ else
+ m_nCurColumn = newColPos;
+ }
+ }
+ }
+ showCursor();
+ }
+
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect)
+ {
+ DBG_CHECK_ME();
+ Rectangle aAllCells;
+ //get the visible area of the table control and set the Left and right border of the region to be repainted
+ impl_getAllVisibleCellsArea( aAllCells );
+ _rCellRect.Left() = aAllCells.Left();
+ _rCellRect.Right() = aAllCells.Right();
+ Rectangle rCells;
+ //if only one row is selected
+ if(_nPrevRow == _nCurRow)
+ {
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ //if the region is above the current row
+ else if(_nPrevRow < _nCurRow )
+ {
+ impl_getCellRect(m_nCurColumn,_nPrevRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ //if the region is beneath the current row
+ else
+ {
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ impl_getCellRect(m_nCurColumn,_nPrevRow,rCells);
+ _rCellRect.Bottom()=rCells.Bottom();
+ }
+ m_pDataWindow->Invalidate(_rCellRect);
+ }
+
+ //-------------------------------------------------------------------------------
+ //To Do: not really needed, because in method above one row can be invalidate. Please Prove this!!!
+ void TableControl_Impl::invalidateSelectedRow(RowPos _nCurRow, Rectangle& _rCellRect)
+ {
+ DBG_CHECK_ME();
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+ _rCellRect.Left() = aAllCells.Left();
+ _rCellRect.Right() = aAllCells.Right();
+ Rectangle rCells;
+ impl_getCellRect(m_nCurColumn,_nCurRow,rCells);
+ _rCellRect.Top()=rCells.Top();
+ _rCellRect.Bottom()=rCells.Bottom();
+ m_pDataWindow->Invalidate(_rCellRect);
+ }
+ //-------------------------------------------------------------------------------
+ //this method is to be called, when a new row is added
+ void TableControl_Impl::invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect)
+ {
+ //DBG_CHECK_ME();
+ TempHideCursor aHideCursor( *this );
+ impl_getAllVisibleCellsArea( _rCellRect );
+ TableRowGeometry _rRow( *this, _rCellRect, _nRowPos);
+ impl_ni_updateScrollbars();
+ m_pDataWindow->Invalidate(_rRow.getRect());
+ }
+
+ //-------------------------------------------------------------------------------
+ std::vector<RowPos> TableControl_Impl::getSelectedRows()
+ {
+ return m_nRowSelected;
+ }
+
+ void TableControl_Impl::removeSelectedRow(RowPos _nRowPos)
+ {
+ int i =0;
+ //if the row is selected, remove it from the selection vector
+ if(isRowSelected(m_nRowSelected, _nRowPos))
+ {
+ if(m_nRowSelected.size()>1)
+ m_nRowSelected.erase(m_nRowSelected.begin()+_nRowPos);
+ else
+ m_nRowSelected.clear();
+ }
+ //after removing a row, row positions must be updated, so selected rows could stay selected
+ if(m_nRowSelected.size()>1)
+ {
+ for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();it!=m_nRowSelected.end();++it)
+ {
+ if(*it > _nRowPos)
+ m_nRowSelected[i]=*it-1;
+ ++i;
+ }
+ }
+ if(_nRowPos == 0)
+ m_nCurRow = 0;
+ else
+ m_nCurRow = _nRowPos-1;
+ }
+ //-------------------------------------------------------------------------------
+ void TableControl_Impl::invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect)
+ {
+ //DBG_CHECK_ME();
+ (void)_nRowStart;
+ (void)_rCellRect;
+ /*TempHideCursor aHideCursor(*this);
+ Rectangle aAllCells;
+ impl_getAllVisibleCellsArea( aAllCells );
+ TableRowGeometry _rRow( *this, aAllCells, _nRowStart);
+ _rCellRect = _rRow.getRect();
+ Rectangle rCells1;
+ impl_getCellRect(m_nCurColumn,m_nRowCount,rCells1);
+ _rCellRect.Bottom() = rCells1.Bottom();*/
+ /*if(_nRowStart != _nRowEnd)
+ {
+ TableRowGeometry _rRow( *this, aAllCells, _nRowEnd);
+ _rCellRect.Bottom() = _rRow.getRect().Bottom();
+ }
+ */
+ //_rCellRect.Right() = aAllCells.Right();
+ //_rCellRect.Left() = aAllCells.Left();
+ //Rectangle rCells1;
+ //impl_getCellRect(m_nCurColumn,_nRowStart,rCells1);
+ //_rCellRect.Top()=rCells1.Top();
+ //Rectangle rCells2;
+ //impl_getCellRect(m_nCurColumn,_nRowEnd,rCells2);
+ //_rCellRect.Bottom()=rCells2.Bottom();
+ impl_ni_updateScrollbars();
+ //m_pDataWindow->Invalidate(_rCellRect);
+ m_pDataWindow->Invalidate();
+ }
+
+
+ //-------------------------------------------------------------------------------
+ bool TableControl_Impl::isClickInVisibleArea(const Point& rPoint)
+ {
+ DBG_CHECK_ME();
+ long nScrollbarMetrics = m_rAntiImpl.GetSettings().GetStyleSettings().GetScrollBarSize();
+ //clickable area is in the visible table control area without the scrollbars
+ Rectangle aDataCellPlayground( Point( 0, 0 ), m_rAntiImpl.GetOutputSizePixel() );
+ aDataCellPlayground.Top() = m_nColHeaderHeightPixel;
+ aDataCellPlayground.Right() -= nScrollbarMetrics;
+ aDataCellPlayground.Bottom() -= nScrollbarMetrics;
+ if((rPoint.X() >= aDataCellPlayground.Left() && rPoint.X() <= aDataCellPlayground.Right()) && rPoint.Y() >= aDataCellPlayground.Top() && rPoint.Y() <= aDataCellPlayground.Bottom())
+ {
+ return true;
+ }
+ else
+ return false;
+ }
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_getVisibleRows( bool _bAcceptPartialRow ) const
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleRows: no data window!" );
+
+ return lcl_getRowsFittingInto(
+ m_pDataWindow->GetOutputSizePixel().Height() - m_nColHeaderHeightPixel,
+ m_nRowHeightPixel,
+ _bAcceptPartialRow
+ );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_getVisibleColumns( bool _bAcceptPartialRow ) const
+ {
+ DBG_CHECK_ME();
+
+ DBG_ASSERT( m_pDataWindow, "TableControl_Impl::impl_getVisibleColumns: no data window!" );
+
+ return lcl_getColumnsVisibleWithin(
+ Rectangle( Point( 0, 0 ), m_pDataWindow->GetOutputSizePixel() ),
+ m_nLeftColumn,
+ *this,
+ _bAcceptPartialRow
+ );
+ }
+
+ //--------------------------------------------------------------------
+ bool TableControl_Impl::goTo( ColPos _nColumn, RowPos _nRow )
+ {
+ DBG_CHECK_ME();
+
+ // TODO: give veto listeners a chance
+
+ if ( ( _nColumn < -1 ) || ( _nColumn >= m_nColumnCount )
+ || ( _nRow < -1 ) || ( _nRow >= m_nRowCount )
+ )
+ return false;
+
+ TempHideCursor aHideCursor( *this );
+ m_nCurColumn = _nColumn;
+ m_nCurRow = _nRow;
+
+ // ensure that the new cell is visible
+ ensureVisible( m_nCurColumn, m_nCurRow, false );
+
+ // TODO: invalidate all and new column/row header, if present, to enforce
+ // re-painting them
+ //if(!m_nRowSelected.empty())
+ //{
+ // Rectangle rCells;
+ // for(std::vector<RowPos>::iterator it=m_nRowSelected.begin();
+ // it!=m_nRowSelected.end();++it)
+ // {
+ // invalidateSelectedRow(*it,rCells);
+ // }
+ // m_nRowSelected.clear();
+ //}
+ // TODO: notify listeners about new position
+ return true;
+ }
+
+ //--------------------------------------------------------------------
+ void TableControl_Impl::ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility )
+ {
+ DBG_CHECK_ME();
+ DBG_ASSERT( ( _nColumn >= 0 ) && ( _nColumn < m_nColumnCount )
+ && ( _nRow >= 0 ) && ( _nRow < m_nRowCount ),
+ "TableControl_Impl::ensureVisible: invalid coordinates!" );
+
+ TempHideCursor aHideCursor( *this );
+
+ if ( _nColumn < m_nLeftColumn )
+ impl_ni_ScrollColumns( _nColumn - m_nLeftColumn );
+ else
+ {
+ TableSize nVisibleColumns = impl_getVisibleColumns( _bAcceptPartialVisibility );
+ if ( _nColumn > m_nLeftColumn + nVisibleColumns - 1 )
+ {
+ impl_ni_ScrollColumns( _nColumn - ( m_nLeftColumn + nVisibleColumns - 1 ) );
+ // TODO: since not all columns have the same width, this might in theory result
+ // in the column still not being visible.
+ }
+ }
+
+ if ( _nRow < m_nTopRow )
+ impl_ni_ScrollRows( _nRow - m_nTopRow );
+ else
+ {
+ TableSize nVisibleRows = impl_getVisibleRows( _bAcceptPartialVisibility );
+ if ( _nRow > m_nTopRow + nVisibleRows - 1 )
+ impl_ni_ScrollRows( _nRow - ( m_nTopRow + nVisibleRows - 1 ) );
+ }
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_ni_ScrollRows( TableSize _nRowDelta )
+ {
+ // compute new top row
+ RowPos nNewTopRow =
+ ::std::max(
+ ::std::min( (RowPos)( m_nTopRow + _nRowDelta ), (RowPos)( m_nRowCount - 1 ) ),
+ (RowPos)0
+ );
+
+ RowPos nOldTopRow = m_nTopRow;
+ m_nTopRow = nNewTopRow;
+
+ // if updates are enabled currently, scroll the viewport
+ if ( m_rAntiImpl.IsUpdateMode() && ( m_nTopRow != nOldTopRow ) )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ TempHideCursor aHideCursor( *this );
+ // TODO: call a onStartScroll at our listener (or better an own onStartScroll,
+ // which hides the cursor and then calls the listener)
+ // Same for onEndScroll
+
+ // scroll the view port, if possible
+ long nPixelDelta = m_nRowHeightPixel * ( m_nTopRow - nOldTopRow );
+
+ Rectangle aDataArea( Point( 0, m_nColHeaderHeightPixel ), m_pDataWindow->GetOutputSizePixel() );
+
+ if ( m_pDataWindow->GetBackground().IsScrollable()
+ && abs( nPixelDelta ) < aDataArea.GetHeight()
+ )
+ {
+ m_pDataWindow->Scroll( 0, (long)-nPixelDelta, aDataArea, SCROLL_CLIP | SCROLL_UPDATE );
+ }
+ else
+ m_pDataWindow->Invalidate( INVALIDATE_UPDATE );
+
+ // update the position at the vertical scrollbar
+ m_pVScroll->SetThumbPos( m_nTopRow );
+ }
+
+ return (TableSize)( m_nTopRow - nOldTopRow );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize TableControl_Impl::impl_ni_ScrollColumns( TableSize _nColumnDelta )
+ {
+ // compute new left column
+ ColPos nNewLeftColumn =
+ ::std::max(
+ ::std::min( (ColPos)( m_nLeftColumn + _nColumnDelta ), (ColPos)( m_nColumnCount - 1 ) ),
+ (ColPos)0
+ );
+
+ ColPos nOldLeftColumn = m_nLeftColumn;
+ m_nLeftColumn = nNewLeftColumn;
+
+ // if updates are enabled currently, scroll the viewport
+ if ( m_rAntiImpl.IsUpdateMode() && ( m_nLeftColumn != nOldLeftColumn ) )
+ {
+ DBG_SUSPEND_INV( INV_SCROLL_POSITION );
+ TempHideCursor aHideCursor( *this );
+ // TODO: call a onStartScroll at our listener (or better an own onStartScroll,
+ // which hides the cursor and then calls the listener)
+ // Same for onEndScroll
+
+ // scroll the view port, if possible
+ Rectangle aDataArea( Point( m_nRowHeaderWidthPixel, 0 ), m_pDataWindow->GetOutputSizePixel() );
+
+ long nPixelDelta =
+ ( m_nLeftColumn > 0 ? m_aAccColumnWidthsPixel[ m_nLeftColumn - 1 ] : 0 )
+ - ( nOldLeftColumn > 0 ? m_aAccColumnWidthsPixel[ nOldLeftColumn - 1 ] : 0 );
+
+ if ( m_pDataWindow->GetBackground().IsScrollable()
+ && abs( nPixelDelta ) < aDataArea.GetWidth()
+ )
+ {
+ m_pDataWindow->Scroll( (long)-nPixelDelta, 0, aDataArea, SCROLL_CLIP | SCROLL_UPDATE );
+ }
+ else
+ m_pDataWindow->Invalidate( INVALIDATE_UPDATE );
+
+ // update the position at the horizontal scrollbar
+ m_pHScroll->SetThumbPos( m_nLeftColumn );
+ }
+
+ return (TableSize)( m_nLeftColumn - nOldLeftColumn );
+ }
+
+ SelectionEngine* TableControl_Impl::getSelEngine()
+ {
+ return m_pSelEngine;
+ }
+ TableDataWindow* TableControl_Impl::getDataWindow()
+ {
+ return m_pDataWindow;
+ }
+ BOOL TableControl_Impl::isRowSelected(::std::vector<RowPos> selectedRows, RowPos current)
+ {
+ for(::std::vector<RowPos>::iterator it=selectedRows.begin();
+ it!=selectedRows.end();++it)
+ {
+ if(*it == current)
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ int TableControl_Impl::getRowSelectedNumber(::std::vector<RowPos> selectedRows, RowPos current)
+ {
+ int pos = -1;
+ int i = 0;
+ for(std::vector<RowPos>::iterator it=selectedRows.begin();it!=selectedRows.end();++it)
+ {
+ if(*it == current)
+ return pos = i;
+ ++i;
+ }
+ return pos;
+ }
+
+ void TableControl_Impl::setCellContent(CellEntryType* pCellEntryType)
+ {
+ (void)pCellEntryType;
+ }
+
+ //--------------------------------------------------------------------
+ IMPL_LINK( TableControl_Impl, OnScroll, ScrollBar*, _pScrollbar )
+ {
+ DBG_ASSERT( ( _pScrollbar == m_pVScroll ) || ( _pScrollbar == m_pHScroll ),
+ "TableControl_Impl::OnScroll: where did this come from?" );
+
+ if ( _pScrollbar == m_pVScroll )
+ impl_ni_ScrollRows( _pScrollbar->GetDelta() );
+ else
+ impl_ni_ScrollColumns( _pScrollbar->GetDelta() );
+
+ return 0L;
+ }
+
+ //---------------------------------------------------------------------------------------
+ TableFunctionSet::TableFunctionSet(TableControl_Impl* _pTableControl):
+ m_pTableControl( _pTableControl)
+ ,m_nCurrentRow (-2)
+ {
+ }
+
+ TableFunctionSet::~TableFunctionSet()
+ {
+ }
+
+ void TableFunctionSet::BeginDrag()
+ {
+ }
+
+ void TableFunctionSet::CreateAnchor()
+ {
+ m_pTableControl->m_nAnchor = m_pTableControl->m_nCurRow;
+ }
+
+ void TableFunctionSet::DestroyAnchor()
+ {
+ m_pTableControl->m_nAnchor = -1;
+ }
+
+ BOOL TableFunctionSet::SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor)
+ {
+ BOOL bHandled = FALSE;
+ Rectangle rCells;
+ //curRow is the row where the mouse click happened, m_nCurRow is the last selected row, before the mouse click
+ RowPos curRow = m_pTableControl->getCurrentRow(rPoint);
+ if(curRow == -2)
+ return FALSE;
+ if( bDontSelectAtCursor )
+ {
+ if(m_pTableControl->m_nRowSelected.size()>1)
+ m_pTableControl->m_pSelEngine->AddAlways(TRUE);
+ bHandled = TRUE;
+ }
+ else if(m_pTableControl->m_nAnchor == m_pTableControl->m_nCurRow)
+ {
+ //selecting region,
+ int diff = m_pTableControl->m_nCurRow - curRow;
+ //bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ /* if(!isAlreadySelected && m_nCurrentRow != m_pTableControl->m_nCurRow)
+ m_pTableControl->m_nRowSelected.push_back(m_nAnchor);*/
+ //selected region lies above the last selection
+ if( diff >= 0)
+ {
+ //put selected rows in vector
+ while(m_pTableControl->m_nAnchor>=curRow)
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ //if row isn't selected, put it in vector, otherwise don't put it there, because it will be twice there
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor);
+ m_pTableControl->m_nAnchor--;
+ diff--;
+ }
+ m_pTableControl->m_nAnchor++;
+ }
+ //selected region lies beneath the last selected row
+ else
+ {
+ while(m_pTableControl->m_nAnchor<=curRow)
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, m_pTableControl->m_nAnchor);
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(m_pTableControl->m_nAnchor);
+ m_pTableControl->m_nAnchor++;
+ diff++;
+ }
+ m_pTableControl->m_nAnchor--;
+ }
+ m_pTableControl->invalidateSelectedRegion(m_pTableControl->m_nCurRow, curRow, rCells);
+ bHandled = TRUE;
+ }
+ //no region selected
+ else
+ {
+ if(m_pTableControl->m_nRowSelected.empty())
+ {
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ else
+ {
+ if(m_pTableControl->m_pSelEngine->GetSelectionMode()==SINGLE_SELECTION)
+ {
+ DeselectAll();
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ else
+ {
+ bool isAlreadySelected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow);
+ if(!isAlreadySelected)
+ m_pTableControl->m_nRowSelected.push_back(curRow);
+ }
+ }
+ if(m_pTableControl->m_nRowSelected.size()>1 && m_pTableControl->m_pSelEngine->GetSelectionMode()!=SINGLE_SELECTION)
+ m_pTableControl->m_pSelEngine->AddAlways(TRUE);
+ m_pTableControl->invalidateSelectedRow(curRow,rCells);
+ bHandled = TRUE;
+ }
+ m_pTableControl->m_nCurRow = curRow;
+ m_pTableControl->ensureVisible(m_pTableControl->m_nCurColumn,m_pTableControl->m_nCurRow,false);
+ return bHandled;
+ }
+
+ BOOL TableFunctionSet::IsSelectionAtPoint( const Point& rPoint )
+ {
+ m_pTableControl->m_pSelEngine->AddAlways(FALSE);
+ if(m_pTableControl->m_nRowSelected.empty())
+ return FALSE;
+ else
+ {
+ RowPos curRow = m_pTableControl->getCurrentRow(rPoint);
+ m_pTableControl->m_nAnchor = -1;
+ bool selected = m_pTableControl->isRowSelected(m_pTableControl->m_nRowSelected, curRow);
+ m_nCurrentRow = curRow;
+ return selected;
+ }
+ }
+
+ void TableFunctionSet::DeselectAtPoint( const Point& rPoint )
+ {
+ (void)rPoint;
+ long pos = 0;
+ long i = 0;
+ Rectangle rCells;
+ for(std::vector<RowPos>::iterator it=m_pTableControl->m_nRowSelected.begin();
+ it!=m_pTableControl->m_nRowSelected.end();++it)
+ {
+ if(*it == m_nCurrentRow)
+ {
+ pos = i;
+ m_pTableControl->invalidateSelectedRow(*it,rCells);
+ }
+ ++i;
+ }
+ m_pTableControl->m_nRowSelected.erase(m_pTableControl->m_nRowSelected.begin()+pos);
+ }
+ void TableFunctionSet::DeselectAll()
+ {
+ if(!m_pTableControl->m_nRowSelected.empty())
+ {
+ Rectangle rCells;
+ for(std::vector<RowPos>::iterator it=m_pTableControl->m_nRowSelected.begin();
+ it!=m_pTableControl->m_nRowSelected.end();++it)
+ {
+ m_pTableControl->invalidateSelectedRow(*it,rCells);
+ }
+ m_pTableControl->m_nRowSelected.clear();
+ }
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablecontrol_impl.hxx b/svtools/source/table/tablecontrol_impl.hxx
new file mode 100644
index 000000000000..410bc8b4c3a1
--- /dev/null
+++ b/svtools/source/table/tablecontrol_impl.hxx
@@ -0,0 +1,342 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_TABLECONTROL_IMPL_HXX
+#define SVTOOLS_TABLECONTROL_IMPL_HXX
+
+#ifndef SVTOOLS_INC_TABLE_TABLEMODEL_HXX
+#include <svtools/table/tablemodel.hxx>
+#endif
+
+#ifndef SVTOOLS_INC_TABLE_ABSTRACTTABLECONTROL_HXX
+#include <svtools/table/abstracttablecontrol.hxx>
+#endif
+
+#include <svtools/table/tablemodel.hxx>
+#include <vector>
+#include <vcl/seleng.hxx>
+
+class ScrollBar;
+class ScrollBarBox;
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ typedef ::std::vector< long > ArrayOfLong;
+
+ class TableControl;
+ class TableDataWindow;
+ class TableFunctionSet;
+
+ //====================================================================
+ //= TableControl_Impl
+ //====================================================================
+ class TableControl_Impl : public IAbstractTableControl
+ {
+ friend class TableGeometry;
+ friend class TableRowGeometry;
+ friend class TableColumnGeometry;
+ friend class SuspendInvariants;
+ friend class TableFunctionSet;
+ private:
+ /// the control whose impl-instance we implemnt
+ TableControl& m_rAntiImpl;
+ /// the model of the table control
+ PTableModel m_pModel;
+ /// the input handler to use, usually the input handler as provided by ->m_pModel
+ PTableInputHandler m_pInputHandler;
+ /// the widths of the single columns, measured in pixel
+ ArrayOfLong m_aColumnWidthsPixel;
+ /** the accumulated widths of the single columns, i.e. their exclusive right borders,
+ <strong<not</strong> counting the space for a possible row header column
+ */
+ ArrayOfLong m_aAccColumnWidthsPixel;
+ /// the height of a single row in the table, measured in pixels
+ long m_nRowHeightPixel;
+ /// the height of the column header row in the table, measured in pixels
+ long m_nColHeaderHeightPixel;
+ /// the width of the row header column in the table, measured in pixels
+ long m_nRowHeaderWidthPixel;
+
+ /// the number of columns in the table control. Cached model value.
+ TableSize m_nColumnCount;
+ /// the number of rows in the table control. Cached model value.
+ TableSize m_nRowCount;
+
+ ColPos m_nCurColumn;
+ RowPos m_nCurRow;
+ ColPos m_nLeftColumn;
+ RowPos m_nTopRow;
+
+ sal_Int32 m_nCursorHidden;
+
+ /** the window to contain all data content, including header bars
+
+ The window's upper left corner is at position (0,0), relative to the
+ table control, which is the direct parent of the data window.
+ */
+ TableDataWindow* m_pDataWindow;
+ /// the vertical scrollbar, if any
+ ScrollBar* m_pVScroll;
+ /// the horizontal scrollbar, if any
+ ScrollBar* m_pHScroll;
+ ScrollBarBox* m_pScrollCorner;
+ //selection engine - for determining selection range, e.g. single, multiple
+ SelectionEngine* m_pSelEngine;
+ //vector which contains the selected rows
+ std::vector<RowPos> m_nRowSelected;
+ //part of selection engine
+ TableFunctionSet* m_pTableFunctionSet;
+ //part of selection engine
+ RowPos m_nAnchor;
+
+
+
+#if DBG_UTIL
+ #define INV_SCROLL_POSITION 1
+ /** represents a bitmask of invariants to check
+
+ Actually, impl_checkInvariants checks more invariants than denoted in this
+ bit mask, but only those present here can be disabled temporarily.
+ */
+ sal_Int32 m_nRequiredInvariants;
+#endif
+
+ public:
+
+
+ PTableModel getModel() const;
+ void setModel( PTableModel _pModel );
+
+ inline const PTableInputHandler& getInputHandler() const { return m_pInputHandler; }
+
+ inline ColPos getCurColumn() const { return m_nCurColumn; }
+ inline RowPos getCurRow() const { return m_nCurRow; }
+ inline void setCurRow(RowPos curRow){ m_nCurRow = curRow; }
+ inline RowPos getTopRow() const { return m_nTopRow; }
+
+ inline long getColHeaderHightPixel() const { return m_nColHeaderHeightPixel; }
+
+ inline const TableControl& getAntiImpl() const { return m_rAntiImpl; }
+ inline TableControl& getAntiImpl() { return m_rAntiImpl; }
+ void setCellContent(CellEntryType* pCellEntryType);
+
+ public:
+ TableControl_Impl( TableControl& _rAntiImpl );
+ ~TableControl_Impl();
+
+#if DBG_UTIL
+ const sal_Char* impl_checkInvariants() const;
+#endif
+ /** to be called when the anti-impl instance has been resized
+ */
+ void onResize();
+
+ /** paints the table control content which intersects with the given rectangle
+ */
+ void doPaintContent( const Rectangle& _rUpdateRect );
+
+ /** moves the cursor to the cell with the given coordinates
+
+ To ease the caller's code, the coordinates must not necessarily denote a
+ valid position. If they don't, <FALSE/> will be returned.
+ */
+ bool goTo( ColPos _nColumn, RowPos _nRow );
+
+ /** ensures that the given coordinate is visible
+ @param _nColumn
+ the column position which should be visible. Must be non-negative, and smaller
+ than the column count.
+ @param _nRow
+ the row position which should be visibleMust be non-negative, and smaller
+ than the row count.
+ @param _bAcceptPartialVisibility
+ <TRUE/> if it's okay that the given cooordinate is only partially visible
+ */
+ void ensureVisible( ColPos _nColumn, RowPos _nRow, bool _bAcceptPartialVisibility );
+ /** returns the row, which contains the input point*/
+ RowPos getCurrentRow (const Point& rPoint);
+
+ void setCursorAtCurrentCell(const Point& rPoint);
+ /** proves whether the vector with the selected rows contains the current row*/
+ BOOL isRowSelected(::std::vector<RowPos> selectedRows, RowPos current);
+ /** returns the position of the current row in the selecttion vector */
+ int getRowSelectedNumber(::std::vector<RowPos> selectedRows, RowPos current);
+ /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/
+ void invalidateSelectedRegion(RowPos _nPrevRow, RowPos _nCurRow, Rectangle& _rCellRect );
+ /** _rCellRect contains the region, which should be invalidate after some action e.g. selectiong row*/
+ //vielleicht kann man mit den anderen verschmelzen, mit einer Überprüfung ob prev==curr?
+ void invalidateSelectedRow( RowPos _nCurRow, Rectangle& _rCellRect );
+ /** to be called when a new row is added to the control*/
+ void invalidateRow(RowPos _nRowPos, Rectangle& _rCellRect );
+ /** returns the vector, which contains the selected rows*/
+ std::vector<RowPos> getSelectedRows();
+ /** updates the vector, which contains the selected rows after removing the row nRowPos*/
+ void removeSelectedRow(RowPos _nRowPos);
+ void invalidateRows(RowPos _nRowStart, Rectangle& _rCellRect );
+ //virtual void DoubleClick();
+
+ // IAbstractTableControl
+ virtual void hideCursor();
+ virtual void showCursor();
+ virtual bool dispatchAction( TableControlAction _eAction );
+ virtual bool isClickInVisibleArea(const Point& rPoint);
+ virtual SelectionEngine* getSelEngine();
+
+ TableDataWindow* getDataWindow();
+
+ private:
+ /** toggles the cursor visibility
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_doSwitchCursor( bool _bOn );
+
+ /** retrieves the area occupied by the totality of (at least partially) visible cells
+
+ The returned area includes row and column headers. Also, it takes into
+ account the the fact that there might be less columns than would normally
+ find room in the control.
+
+ As a result of respecting the partial visibility of rows and columns,
+ the returned area might be larger than the data window's output size.
+ */
+ void impl_getAllVisibleCellsArea( Rectangle& _rCellArea ) const;
+
+ /** retrieves the area occupied by all (at least partially) visible data cells.
+
+ Effectively, the returned area is the same as returned by ->impl_getAllVisibleCellsArea,
+ minus the row and column header areas.
+ */
+ void impl_getAllVisibleDataCellArea( Rectangle& _rCellArea ) const;
+
+ /** returns the number of visible rows.
+
+ @param _bAcceptPartialRow
+ specifies whether a possible only partially visible last row is
+ counted, too.
+ */
+ TableSize impl_getVisibleRows( bool _bAcceptPartialRow ) const;
+
+ /** returns the number of visible columns
+
+ The value may change with different horizontal scroll positions, as
+ different columns have different widths. For instance, if your control is
+ 100 pixels wide, and has three columns of width 50, 50, 100, respectively,
+ then this method will return either "2" or "1", depending on which column
+ is the first visible one.
+
+ @param _bAcceptPartialRow
+ specifies whether a possible only partially visible last row is
+ counted, too.
+ */
+ TableSize impl_getVisibleColumns( bool _bAcceptPartialRow ) const;
+
+ /** determines the rectangle occupied by the given cell
+ */
+ void impl_getCellRect( ColPos _nColumn, RowPos _nRow, Rectangle& _rCellRect ) const;
+
+ /** updates all cached model values
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_updateCachedModelValues();
+
+ /** updates ->m_aColumnWidthsPixel with the current pixel widths of all model columns
+
+ The method takes into account the current zoom factor and map mode of the table
+ control, plus any possible COLWIDTH_FIT_TO_VIEW widths in the model columns.
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+ */
+ void impl_ni_updateColumnWidths();
+
+ /** updates the scrollbars of the control
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ This includes both the existence of the scrollbars, and their
+ state.
+ */
+ void impl_ni_updateScrollbars();
+
+ /** scrolls the view by the given number of rows
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ @return
+ the number of rows by which the viewport was scrolled. This may differ
+ from the given numbers to scroll in case the begin or the end of the
+ row range were reached.
+ */
+ TableSize impl_ni_ScrollRows( TableSize _nRowDelta );
+
+ /** scrolls the view by the given number of columns
+
+ The method is not bound to the classes public invariants, as it's used in
+ situations where the they must not necessarily be fullfilled.
+
+ @return
+ the number of columns by which the viewport was scrolled. This may differ
+ from the given numbers to scroll in case the begin or the end of the
+ column range were reached.
+ */
+ TableSize impl_ni_ScrollColumns( TableSize _nRowDelta );
+
+ DECL_LINK( OnScroll, ScrollBar* );
+ };
+ //see seleng.hxx, seleng.cxx, FunctionSet overwritables, part of selection engine
+ class TableFunctionSet : public FunctionSet
+ {
+ friend class TableDataWindow;
+ private:
+ TableControl_Impl* m_pTableControl;
+ RowPos m_nCurrentRow;
+ public:
+ TableFunctionSet(TableControl_Impl* _pTableControl);
+ virtual ~TableFunctionSet();
+
+ virtual void BeginDrag();
+ virtual void CreateAnchor();
+ virtual void DestroyAnchor();
+ virtual BOOL SetCursorAtPoint(const Point& rPoint, BOOL bDontSelectAtCursor);
+ virtual BOOL IsSelectionAtPoint( const Point& rPoint );
+ virtual void DeselectAtPoint( const Point& rPoint );
+ virtual void DeselectAll();
+ };
+
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_TABLECONTROL_IMPL_HXX
diff --git a/svtools/source/table/tabledatawindow.cxx b/svtools/source/table/tabledatawindow.cxx
new file mode 100644
index 000000000000..71a313bb2e00
--- /dev/null
+++ b/svtools/source/table/tabledatawindow.cxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "svtools/table/tablecontrol.hxx"
+#include "svtools/table/tabledatawindow.hxx"
+#include "tablecontrol_impl.hxx"
+
+//........................................................................
+namespace svt { namespace table
+{
+ class TableControl_Impl;
+//........................................................................
+
+ //====================================================================
+ //= TableDataWindow
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableDataWindow::TableDataWindow( TableControl_Impl& _rTableControl )
+ :Window( &_rTableControl.getAntiImpl() )
+ ,m_rTableControl ( _rTableControl )
+ {
+ Color backgroundColor = m_rTableControl.getAntiImpl().GetSettings().GetStyleSettings().GetFieldColor();
+ SetBackground( backgroundColor );
+ SetControlBackground( backgroundColor );
+ }
+
+ //--------------------------------------------------------------------
+ void TableDataWindow::Paint( const Rectangle& rUpdateRect )
+ {
+ m_rTableControl.doPaintContent( rUpdateRect );
+ }
+ void TableDataWindow::MouseMove( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseMove( m_rTableControl, rMEvt ) )
+ Window::MouseMove( rMEvt );
+ }
+ void TableDataWindow::MouseButtonDown( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseButtonDown( m_rTableControl, rMEvt ) )
+ Window::MouseButtonDown( rMEvt );
+ else
+ m_aMouseButtonDownHdl.Call( (MouseEvent*) &rMEvt);
+ m_rTableControl.getAntiImpl().LoseFocus();
+ }
+ void TableDataWindow::MouseButtonUp( const MouseEvent& rMEvt )
+ {
+ if ( !m_rTableControl.getInputHandler()->MouseButtonUp( m_rTableControl, rMEvt ) )
+ Window::MouseButtonUp( rMEvt );
+ else
+ m_aMouseButtonUpHdl.Call( (MouseEvent*) &rMEvt);
+ m_rTableControl.getAntiImpl().GetFocus();
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablegeometry.cxx b/svtools/source/table/tablegeometry.cxx
new file mode 100644
index 000000000000..569e14c61726
--- /dev/null
+++ b/svtools/source/table/tablegeometry.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+
+#include "tablegeometry.hxx"
+#include "tablecontrol_impl.hxx"
+
+#include <tools/debug.hxx>
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ //====================================================================
+ //= TableRowGeometry
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableRowGeometry::TableRowGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries,
+ RowPos _nRow )
+ :TableGeometry( _rControl, _rBoundaries )
+ ,m_nRowPos( _nRow )
+ {
+ if ( m_nRowPos == ROW_COL_HEADERS )
+ {
+ DBG_ASSERT( m_rControl.m_pModel->hasColumnHeaders(),
+ "TableRowGeometry::TableRowGeometry: why asking for the geoemtry of the non-existent column header row?" );
+ m_aRect.Top() = 0;
+ m_aRect.Bottom() = m_rControl.m_nColHeaderHeightPixel - 1;
+ }
+ else
+ {
+ if ( ( m_nRowPos >= m_rControl.m_nTopRow ) && ( m_nRowPos < m_rControl.m_pModel->getRowCount() ) )
+ {
+ m_aRect.Top() = m_rControl.m_nColHeaderHeightPixel + ( m_nRowPos - m_rControl.m_nTopRow ) * m_rControl.m_nRowHeightPixel;
+ m_aRect.Bottom() = m_aRect.Top() + m_rControl.m_nRowHeightPixel - 1;
+ }
+ else
+ m_aRect.SetEmpty();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ bool TableRowGeometry::moveDown()
+ {
+ if ( ++m_nRowPos < m_rControl.m_pModel->getRowCount() )
+ m_aRect.Move( 0, m_rControl.m_nRowHeightPixel );
+ else
+ m_aRect.SetEmpty();
+ return isValid();
+ }
+
+ //====================================================================
+ //= TableColumnGeometry
+ //====================================================================
+ //--------------------------------------------------------------------
+ TableColumnGeometry::TableColumnGeometry( const TableControl_Impl& _rControl, const Rectangle& _rBoundaries,
+ ColPos _nCol )
+ :TableGeometry( _rControl, _rBoundaries )
+ ,m_nColPos( _nCol )
+ {
+ if ( m_nColPos == COL_ROW_HEADERS )
+ {
+ DBG_ASSERT( m_rControl.m_pModel->hasRowHeaders(),
+ "TableColumnGeometry::TableColumnGeometry: why asking for the geoemtry of the non-existent row header column?" );
+ m_aRect.Left() = 0;
+ m_aRect.Right() = m_rControl.m_nRowHeaderWidthPixel - 1;
+ }
+ else
+ {
+ ColPos nLeftColumn = m_rControl.m_nLeftColumn;
+ if ( ( m_nColPos >= nLeftColumn ) && ( m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() ) )
+ {
+ m_aRect.Left() = m_rControl.m_nRowHeaderWidthPixel;
+ // TODO: take into account any possibly frozen columns
+
+ for ( ColPos col = nLeftColumn; col < m_nColPos; ++col )
+ m_aRect.Left() += m_rControl.m_aColumnWidthsPixel[ col ];
+ m_aRect.Right() = m_aRect.Left() + m_rControl.m_aColumnWidthsPixel[ m_nColPos ] - 1;
+ }
+ else
+ m_aRect.SetEmpty();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ bool TableColumnGeometry::moveRight()
+ {
+ DBG_ASSERT( m_nColPos != COL_ROW_HEADERS, "TableColumnGeometry::moveRight: cannot move the row header column!" );
+ // what would be COL_ROW_HEADERS + 1?
+
+ if ( ++m_nColPos < (ColPos)m_rControl.m_aColumnWidthsPixel.size() )
+ {
+ m_aRect.Left() = m_aRect.Right() + 1;
+ m_aRect.Right() += m_rControl.m_aColumnWidthsPixel[ m_nColPos ];
+ }
+ else
+ m_aRect.SetEmpty();
+
+ return isValid();
+ }
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
diff --git a/svtools/source/table/tablegeometry.hxx b/svtools/source/table/tablegeometry.hxx
new file mode 100644
index 000000000000..18b40c1e3781
--- /dev/null
+++ b/svtools/source/table/tablegeometry.hxx
@@ -0,0 +1,161 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org 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 Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef SVTOOLS_TABLEGEOMETRY_HXX
+#define SVTOOLS_TABLEGEOMETRY_HXX
+
+#ifndef SVTOOLS_INC_TABLE_TABLETYPES_HXX
+#include <svtools/table/tabletypes.hxx>
+#endif
+
+#ifndef _SV_GEN_HXX
+#include <tools/gen.hxx>
+#endif
+
+//........................................................................
+namespace svt { namespace table
+{
+//........................................................................
+
+ class TableControl_Impl;
+
+ //====================================================================
+ //= TableGeometry
+ //====================================================================
+ class TableGeometry
+ {
+ protected:
+ const TableControl_Impl& m_rControl;
+ const Rectangle& m_rBoundaries;
+ Rectangle m_aRect;
+
+ protected:
+ TableGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries
+ )
+ :m_rControl( _rControl )
+ ,m_rBoundaries( _rBoundaries )
+ ,m_aRect( _rBoundaries )
+ {
+ }
+
+ public:
+ // attribute access
+ const TableControl_Impl& getControl() const { return m_rControl; }
+
+ // status
+ const Rectangle& getRect() const { return m_aRect; }
+ bool isValid() const { return !m_aRect.GetIntersection( m_rBoundaries ).IsEmpty(); }
+ };
+
+ //====================================================================
+ //= TableRowGeometry
+ //====================================================================
+ class TableRowGeometry : public TableGeometry
+ {
+ protected:
+ RowPos m_nRowPos;
+
+ public:
+ TableRowGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ RowPos _nRow
+ );
+
+ // status
+ RowPos getRow() const { return m_nRowPos; }
+ // operations
+ bool moveDown();
+ };
+
+ //====================================================================
+ //= TableColumnGeometry
+ //====================================================================
+ class TableColumnGeometry : public TableGeometry
+ {
+ protected:
+ ColPos m_nColPos;
+
+ public:
+ TableColumnGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ ColPos _nCol
+ );
+
+ // status
+ ColPos getCol() const { return m_nColPos; }
+ // operations
+ bool moveRight();
+ };
+
+ //====================================================================
+ //= TableCellGeometry
+ //====================================================================
+ /** a helper representing geometry information of a cell
+ */
+ class TableCellGeometry
+ {
+ private:
+ TableRowGeometry m_aRow;
+ TableColumnGeometry m_aCol;
+
+ public:
+ TableCellGeometry(
+ const TableControl_Impl& _rControl,
+ const Rectangle& _rBoundaries,
+ ColPos _nCol,
+ RowPos _nRow
+ )
+ :m_aRow( _rControl, _rBoundaries, _nRow )
+ ,m_aCol( _rControl, _rBoundaries, _nCol )
+ {
+ }
+
+ TableCellGeometry(
+ const TableRowGeometry& _rRow,
+ ColPos _nCol
+ )
+ :m_aRow( _rRow )
+ ,m_aCol( _rRow.getControl(), _rRow.getRect(), _nCol )
+ {
+ }
+
+ inline Rectangle getRect() const { return m_aRow.getRect().GetIntersection( m_aCol.getRect() ); }
+ inline RowPos getRow() const { return m_aRow.getRow(); }
+ inline ColPos getColumn() const { return m_aCol.getCol(); }
+ inline bool isValid() const { return !getRect().IsEmpty(); }
+
+ inline bool moveDown() {return m_aRow.moveDown(); }
+ inline bool moveRight() {return m_aCol.moveRight(); }
+ };
+
+//........................................................................
+} } // namespace svt::table
+//........................................................................
+
+#endif // SVTOOLS_TABLEGEOMETRY_HXX
diff --git a/svtools/source/uno/makefile.mk b/svtools/source/uno/makefile.mk
index 76ab335d58d5..51e55a1f9123 100644
--- a/svtools/source/uno/makefile.mk
+++ b/svtools/source/uno/makefile.mk
@@ -1,4 +1,4 @@
-
+#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
@@ -55,6 +55,7 @@ SLOFILES= \
$(SLO)$/genericunodialog.obj \
$(SLO)$/generictoolboxcontroller.obj \
$(SLO)$/treecontrolpeer.obj \
+ $(SLO)$/unocontroltablemodel.obj \
$(SLO)$/registerservices.obj\
$(SLO)$/contextmenuhelper.obj
diff --git a/svtools/source/uno/unocontroltablemodel.cxx b/svtools/source/uno/unocontroltablemodel.cxx
new file mode 100644
index 000000000000..e322dbb8f96e
--- /dev/null
+++ b/svtools/source/uno/unocontroltablemodel.cxx
@@ -0,0 +1,812 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: unocontroltablemodel.cxx,v $
+ * $Revision: 1.32 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svtools.hxx"
+
+#include "unocontroltablemodel.hxx"
+#include <com/sun/star/view/SelectionType.hpp>
+#include "svtools/table/gridtablerenderer.hxx"
+#include "svtools/table/defaultinputhandler.hxx"
+#include "svtools/table/tablecontrol.hxx"
+#include <comphelper/sequence.hxx>
+#include <rtl/ref.hxx>
+#include <tools/debug.hxx>
+#include <toolkit/helper/property.hxx>
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+
+using ::rtl::OUString;
+using namespace ::svt::table;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt::grid;
+
+using namespace ::svt::table;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::view;
+using namespace ::toolkit;
+
+class UnoControlTableColumn : public IColumnModel
+ {
+ private:
+ ColumnID m_nID;
+ String m_sName;
+ bool m_bIsResizable;
+ TableMetrics m_nWidth;
+ TableMetrics m_nMinWidth;
+ TableMetrics m_nMaxWidth;
+
+ public:
+ UnoControlTableColumn(Reference<XGridColumn>);
+
+ // IColumnModel overridables
+ virtual ColumnID getID() const;
+ virtual bool setID( const ColumnID _nID );
+ virtual String getName() const;
+ virtual void setName( const String& _rName );
+ virtual bool isResizable() const;
+ virtual void setResizable( bool _bResizable );
+ virtual TableMetrics getWidth() const;
+ virtual void setWidth( TableMetrics _nWidth );
+ virtual TableMetrics getMinWidth() const;
+ virtual void setMinWidth( TableMetrics _nMinWidth );
+ virtual TableMetrics getMaxWidth() const;
+ virtual void setMaxWidth( TableMetrics _nMaxWidth );
+ };
+
+ //--------------------------------------------------------------------
+ UnoControlTableColumn::UnoControlTableColumn(Reference<XGridColumn> m_xGridColumn)
+ :m_nID( 0 )
+ ,m_sName()
+ ,m_bIsResizable( false )
+ ,m_nWidth( 10 * 100 ) // 1 cm
+ ,m_nMinWidth( 0 ) // no min width
+ ,m_nMaxWidth( 0 ) // no max width
+ {
+ //m_nID = m_xGridColumn->getIdentifier();
+ //m_nWidth = m_xGridColumn->getColumnWidth();
+ m_sName = m_xGridColumn->getTitle();
+ }
+
+ //--------------------------------------------------------------------
+ ColumnID UnoControlTableColumn::getID() const
+ {
+ return m_nID;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableColumn::setID( const ColumnID _nID )
+ {
+ // TODO: conflict check
+
+ m_nID = _nID;
+ // TODO: notifications?
+
+ return true;
+ }
+
+ //--------------------------------------------------------------------
+ String UnoControlTableColumn::getName() const
+ {
+ return m_sName;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setName( const String& _rName )
+ {
+ m_sName = _rName;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableColumn::isResizable() const
+ {
+ return m_bIsResizable;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setResizable( bool _bResizable )
+ {
+ m_bIsResizable = _bResizable;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getWidth() const
+ {
+ return m_nWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setWidth( TableMetrics _nWidth )
+ {
+ m_nWidth = _nWidth;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getMinWidth() const
+ {
+ return m_nMinWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setMinWidth( TableMetrics _nMinWidth )
+ {
+ m_nMinWidth = _nMinWidth;
+ // TODO: notifications?
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableColumn::getMaxWidth() const
+ {
+ return m_nMaxWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableColumn::setMaxWidth( TableMetrics _nMaxWidth )
+ {
+ m_nMaxWidth = _nMaxWidth;
+ // TODO: notifications?
+ }
+
+ //====================================================================
+ //= DefaultTableModel_Impl
+ //====================================================================
+ struct UnoControlTableModel_Impl
+ {
+ ::std::vector< PColumnModel > aColumns;
+ TableSize nRowCount;
+ bool bHasColumnHeaders;
+ bool bHasRowHeaders;
+ PTableRenderer pRenderer;
+ PTableInputHandler pInputHandler;
+ TableMetrics nRowHeight;
+ TableMetrics nColumnHeaderHeight;
+ TableMetrics nRowHeaderWidth;
+ std::vector<rtl::OUString> aRowHeadersTitle;
+ std::vector<std::vector<rtl::OUString> > aCellContent;
+
+ UnoControlTableModel_Impl()
+ :nRowCount ( 0 )
+ ,bHasColumnHeaders ( false )
+ ,bHasRowHeaders ( false )
+ ,pRenderer ( )
+ ,pInputHandler ( )
+ ,nRowHeight ( 4 * 100 ) // 40 mm
+ ,nColumnHeaderHeight( 5 * 100 ) // 50 mm
+ ,nRowHeaderWidth ( 10 * 100 ) // 50 mm
+ ,aRowHeadersTitle ( 0 )
+ ,aCellContent ( 0 )
+ {
+ }
+ };
+
+ //====================================================================
+ //= UnoControlTableModel
+ //====================================================================
+ //--------------------------------------------------------------------
+ UnoControlTableModel::UnoControlTableModel()
+ :m_pImpl( new UnoControlTableModel_Impl ),
+ m_xDataModel(0),
+ m_xColumnModel(0),
+ m_bHasColumnHeaders(false),
+ m_bHasRowHeaders(false),
+ m_bVScroll(false),
+ m_bHScroll(false)
+ {
+ m_pImpl->bHasColumnHeaders = m_bHasColumnHeaders;
+ m_pImpl->bHasRowHeaders = m_bHasRowHeaders;
+ m_pImpl->pRenderer.reset( new GridTableRenderer( *this ) );
+ m_pImpl->pInputHandler.reset( new DefaultInputHandler );
+ }
+
+ //--------------------------------------------------------------------
+ UnoControlTableModel::~UnoControlTableModel()
+ {
+ DELETEZ( m_pImpl );
+ }
+
+ //--------------------------------------------------------------------
+ TableSize UnoControlTableModel::getColumnCount() const
+ {
+ m_pImpl->aColumns.resize( m_xColumnModel->getColumnCount());
+ return (TableSize)m_pImpl->aColumns.size();
+ }
+
+ //--------------------------------------------------------------------
+ TableSize UnoControlTableModel::getRowCount() const
+ {
+ return m_pImpl->nRowCount;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::hasColumnHeaders() const
+ {
+ return m_pImpl->bHasColumnHeaders;
+ }
+
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::hasRowHeaders() const
+ {
+ return m_pImpl->bHasRowHeaders;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeaders(bool _bRowHeaders)
+ {
+ m_pImpl->bHasRowHeaders = _bRowHeaders;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setColumnHeaders(bool _bColumnHeaders)
+ {
+ m_pImpl->bHasColumnHeaders = _bColumnHeaders;
+ }
+
+ void UnoControlTableModel::setColumnCount(TableSize _nColCount)
+ {
+ m_pImpl->aColumns.resize( _nColCount);
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowCount(TableSize _nRowCount)
+ {
+ m_pImpl->nRowCount = _nRowCount;
+ }
+ //--------------------------------------------------------------------
+ bool UnoControlTableModel::isCellEditable( ColPos col, RowPos row ) const
+ {
+ (void)col;
+ (void)row;
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::addTableModelListener( const PTableModelListener& listener )
+ {
+ (void) listener;
+ //listener->onTableModelChanged(PTableModel(this));
+ // TODO
+ DBG_ERROR( "DefaultTableModel::addTableModelListener: not yet implemented!" );
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::removeTableModelListener( const PTableModelListener& listener )
+ {
+ (void)listener;
+ // TODO
+ DBG_ERROR( "DefaultTableModel::removeTableModelListener: not yet implemented!" );
+ }
+
+ //--------------------------------------------------------------------
+ PColumnModel UnoControlTableModel::getColumnModel( ColPos column )
+ {
+ DBG_ASSERT( ( column >= 0 ) && ( column < getColumnCount() ),
+ "DefaultTableModel::getColumnModel: invalid index!" );
+ return m_pImpl->aColumns[ column ];
+ }
+
+ //--------------------------------------------------------------------
+ PColumnModel UnoControlTableModel::getColumnModelByID( ColumnID id )
+ {
+ (void)id;
+ // TODO
+ DBG_ERROR( "DefaultTableModel::getColumnModelByID: not yet implemented!" );
+ return PColumnModel();
+ }
+
+ //--------------------------------------------------------------------
+ PTableRenderer UnoControlTableModel::getRenderer() const
+ {
+ return m_pImpl->pRenderer;
+ }
+
+ //--------------------------------------------------------------------
+ PTableInputHandler UnoControlTableModel::getInputHandler() const
+ {
+ return m_pImpl->pInputHandler;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getRowHeight() const
+ {
+ return m_pImpl->nRowHeight;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeight(TableMetrics _nRowHeight)
+ {
+ m_pImpl->nRowHeight = _nRowHeight;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getColumnHeaderHeight() const
+ {
+ DBG_ASSERT( hasColumnHeaders(), "DefaultTableModel::getColumnHeaderHeight: invalid call!" );
+ return m_pImpl->nColumnHeaderHeight;
+ }
+
+ //--------------------------------------------------------------------
+ TableMetrics UnoControlTableModel::getRowHeaderWidth() const
+ {
+ DBG_ASSERT( hasRowHeaders(), "DefaultTableModel::getRowHeaderWidth: invalid call!" );
+ return m_pImpl->nRowHeaderWidth;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::SetTitleHeight( TableMetrics _nHeight )
+ {
+ DBG_ASSERT( _nHeight > 0, "DefaultTableModel::SetTitleHeight: invalid height value!" );
+ m_pImpl->nColumnHeaderHeight = _nHeight;
+ // TODO: notification
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::SetHandleWidth( TableMetrics _nWidth )
+ {
+ DBG_ASSERT( _nWidth > 0, "DefaultTableModel::SetHandleWidth: invalid width value!" );
+ m_pImpl->nRowHeaderWidth = _nWidth;
+ // TODO: notification
+ }
+
+ //--------------------------------------------------------------------
+ ScrollbarVisibility UnoControlTableModel::getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const
+ {
+ if(overAllHeight>=actHeight && !m_bVScroll)
+ return ScrollbarShowNever;
+ else
+ return ScrollbarShowAlways;
+ }
+
+ //--------------------------------------------------------------------
+ ScrollbarVisibility UnoControlTableModel::getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const
+ {
+ if(overAllWidth>=actWidth && !m_bHScroll)
+ return ScrollbarShowNever;
+ else
+ return ScrollbarShowAlways;
+ }
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setCellContent(std::vector<std::vector<rtl::OUString> > cellContent)
+ {
+ if(cellContent.empty())
+ {
+ unsigned int i = m_pImpl->aColumns.size();
+ std::vector<rtl::OUString> emptyCells;
+ while(i!=0)
+ {
+ cellContent.push_back(emptyCells);
+ --i;
+ }
+ }
+ std::vector<rtl::OUString> cCC;
+ for(::std::vector<std::vector<rtl::OUString> >::iterator iter = cellContent.begin(); iter!= cellContent.end();++iter)
+ {
+ cCC = *iter;
+ m_pImpl->aCellContent.push_back(cCC);
+ }
+ }
+
+ std::vector<std::vector<rtl::OUString> > UnoControlTableModel::getCellContent()
+ {
+ return m_pImpl->aCellContent;
+ }
+
+ //--------------------------------------------------------------------
+ void UnoControlTableModel::setRowHeaderName(std::vector<rtl::OUString> cellColumnContent)
+ {
+ if(cellColumnContent.empty())
+ {
+ unsigned int i = m_pImpl->aColumns.size();
+ while(i!=0)
+ {
+ cellColumnContent.push_back(rtl::OUString::createFromAscii(""));
+ --i;
+ }
+ }
+ for(::std::vector<rtl::OUString>::iterator iter = cellColumnContent.begin(); iter!= cellColumnContent.end();++iter)
+ {
+ rtl::OUString s = *iter;
+ m_pImpl->aRowHeadersTitle.push_back(*iter);
+ }
+ }
+
+ std::vector<rtl::OUString> UnoControlTableModel::getRowHeaderName()
+ {
+ return m_pImpl->aRowHeadersTitle;
+ }
+
+::com::sun::star::uno::Any UnoControlTableModel::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
+{
+ ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType,
+ SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridControl*, this ),
+ SAL_STATIC_CAST( ::com::sun::star::awt::grid::XGridDataListener*, this ),
+ //SAL_STATIC_CAST( com::sun::star::lang::XEventListener*, this ),
+ //SAL_STATIC_CAST( com::sun::star::awt::XMouseListener*, this ),
+ SAL_STATIC_CAST( ::com::sun::star::lang::XTypeProvider*, this ) );
+ return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
+}
+
+// ::com::sun::star::lang::XTypeProvider
+IMPL_XTYPEPROVIDER_START( UnoControlTableModel )
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridControl>* ) NULL ),
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel>* ) NULL ),
+ getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener>* ) NULL ),
+ VCLXWindow::getTypes()
+IMPL_XTYPEPROVIDER_END
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoControlTableModel::getColumnModel( ) throw (::com::sun::star::uno::RuntimeException)
+{
+ return NULL;
+}
+void SAL_CALL UnoControlTableModel::setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)model;
+}
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoControlTableModel::getDataModel( ) throw (::com::sun::star::uno::RuntimeException)
+{
+ return NULL;
+}
+void SAL_CALL UnoControlTableModel::setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)model;
+}
+sal_Int32 SAL_CALL UnoControlTableModel::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTableControl = (TableControl*)GetWindow();
+ return pTableControl->GetCurrentRow( Point(x,y) );
+}
+
+/*
+void SAL_CALL UnoControlTableModel::addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException)
+{
+ VCLXWindow::addMouseListener( listener );
+}
+
+void SAL_CALL UnoControlTableModel::removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException)
+{
+ VCLXWindow::removeMouseListener( listener );
+}
+*/
+/*
+void SAL_CALL UnoControlTableModel::mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void)rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void)rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void) rEvent;
+}
+void SAL_CALL UnoControlTableModel::mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
+{
+ (void) rEvent;
+}
+*/
+void SAL_CALL UnoControlTableModel::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)listener;
+}
+
+void SAL_CALL UnoControlTableModel::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void) listener;
+}
+
+void UnoControlTableModel::setProperty( const ::rtl::OUString& PropertyName, const Any& aValue) throw(RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+
+ TableControl* pTableControl = (TableControl*)GetWindow();
+
+ switch( GetPropertyId( PropertyName ) )
+ {
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ {
+ SelectionType eSelectionType;
+ if( aValue >>= eSelectionType )
+ {
+ SelectionMode eSelMode;
+ switch( eSelectionType )
+ {
+ case SelectionType_SINGLE: eSelMode = SINGLE_SELECTION; break;
+ case SelectionType_RANGE: eSelMode = RANGE_SELECTION; break;
+ case SelectionType_MULTI: eSelMode = MULTIPLE_SELECTION; break;
+ // case SelectionType_NONE:
+ default: eSelMode = NO_SELECTION; break;
+ }
+ if( pTableControl->getSelEngine()->GetSelectionMode() != eSelMode )
+ pTableControl->getSelEngine()->SetSelectionMode( eSelMode );
+ }
+ break;
+ }
+ case BASEPROPERTY_HSCROLL:
+ {
+ sal_Bool bHScroll = true;
+ if( aValue >>= bHScroll )
+ {
+ m_bHScroll = bHScroll;
+ }
+ break;
+ }
+ case BASEPROPERTY_VSCROLL:
+ {
+ sal_Bool bVScroll = true;
+ if( aValue >>= bVScroll )
+ {
+ m_bVScroll = bVScroll;
+ }
+ break;
+ }
+ case BASEPROPERTY_GRID_SHOWROWHEADER:
+ {
+ sal_Bool rowHeader = true;
+ if( aValue >>= rowHeader )
+ {
+ setRowHeaders(rowHeader);
+ }
+ break;
+ }
+
+ case BASEPROPERTY_GRID_SHOWCOLUMNHEADER:
+ {
+ sal_Bool colHeader = true;
+ if( aValue >>= colHeader )
+ {
+ setColumnHeaders(colHeader);
+ }
+ break;
+ }
+ case BASEPROPERTY_GRID_DATAMODEL:
+ {
+ m_xDataModel = Reference< XGridDataModel >( aValue, UNO_QUERY );
+ Sequence<Sequence< ::rtl::OUString > > cellData = m_xDataModel->getData();
+ Sequence<rtl::OUString> rowData(0);
+ for(int i = 0; i< m_xDataModel->getRowCount();++i)
+ {
+ rowData = cellData[i];
+ std::vector<rtl::OUString> newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rowData));
+ if(newRow.size()<m_pImpl->aColumns.size())
+ newRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii(""));
+ m_pImpl->aCellContent.push_back(newRow);
+ }
+ Sequence< ::rtl::OUString > rowHeaders = m_xDataModel->getRowHeaders();
+ std::vector< rtl::OUString > newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rowHeaders));
+ m_pImpl->nRowCount = m_xDataModel->getRowCount();
+ setRowHeaderName(newRow);
+ break;
+ }
+ case BASEPROPERTY_GRID_COLUMNMODEL:
+ {
+ m_xColumnModel = Reference< XGridColumnModel >( aValue, UNO_QUERY );
+ Sequence<Reference< XGridColumn > > columns = m_xColumnModel->getColumns();
+ std::vector<Reference< XGridColumn > > aNewColumns(
+ comphelper::sequenceToContainer<std::vector<Reference< XGridColumn > > >(columns));
+ if(!m_pImpl->aColumns.empty())
+ m_pImpl->aColumns.clear();
+ for ( ::svt::table::ColPos col = 0; col < m_xColumnModel->getColumnCount(); ++col )
+ {
+ UnoControlTableColumn* tableColumn = new UnoControlTableColumn(aNewColumns[col]);
+ m_pImpl->aColumns.push_back((PColumnModel)tableColumn);
+ }
+ break;
+ }
+ default:
+ VCLXWindow::setProperty( PropertyName, aValue );
+ break;
+ }
+}
+
+Any UnoControlTableModel::getProperty( const ::rtl::OUString& PropertyName ) throw(RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+
+ const sal_uInt16 nPropId = GetPropertyId( PropertyName );
+ TableControl* pTableControl = (TableControl*)GetWindow();
+ if(pTableControl)
+ {
+ switch(nPropId)
+ {
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ {
+ SelectionType eSelectionType;
+
+ SelectionMode eSelMode = pTableControl->getSelEngine()->GetSelectionMode();
+ switch( eSelMode )
+ {
+ case SINGLE_SELECTION: eSelectionType = SelectionType_SINGLE; break;
+ case RANGE_SELECTION: eSelectionType = SelectionType_RANGE; break;
+ case MULTIPLE_SELECTION:eSelectionType = SelectionType_MULTI; break;
+// case NO_SELECTION:
+ default: eSelectionType = SelectionType_NONE; break;
+ }
+ return Any( eSelectionType );
+ }
+ case BASEPROPERTY_GRID_SHOWROWHEADER:
+ {
+ return Any ((sal_Bool) pTableControl->GetModel()->hasRowHeaders());
+ }
+ case BASEPROPERTY_GRID_SHOWCOLUMNHEADER:
+ return Any ((sal_Bool) pTableControl->GetModel()->hasColumnHeaders());
+ case BASEPROPERTY_GRID_DATAMODEL:
+ return Any ( m_xDataModel );
+ case BASEPROPERTY_GRID_COLUMNMODEL:
+ return Any ( m_xColumnModel);
+ case BASEPROPERTY_HSCROLL:
+ return Any ( m_bHScroll);
+ case BASEPROPERTY_VSCROLL:
+ return Any ( m_bVScroll);
+ }
+ }
+ return VCLXWindow::getProperty( PropertyName );
+}
+
+void UnoControlTableModel::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
+{
+ PushPropertyIds( rIds,
+ BASEPROPERTY_GRID_SHOWROWHEADER,
+ BASEPROPERTY_GRID_SHOWCOLUMNHEADER,
+ BASEPROPERTY_GRID_DATAMODEL,
+ BASEPROPERTY_GRID_COLUMNMODEL,
+ BASEPROPERTY_GRID_SELECTIONMODE,
+ 0);
+ VCLXWindow::ImplGetPropertyIds( rIds, true );
+}
+void SAL_CALL UnoControlTableModel::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ if ( pTable )
+ {
+ pTable->SetModel(PTableModel(this));
+ pTable->Show( bVisible );
+ }
+}
+void SAL_CALL UnoControlTableModel::setFocus() throw(::com::sun::star::uno::RuntimeException)
+{
+ ::vos::OGuard aGuard( GetMutex() );
+ if ( GetWindow())
+ GetWindow()->GrabFocus();
+}
+void SAL_CALL UnoControlTableModel::rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ std::vector<OUString> aNewRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(Event.rowData));
+ if(aNewRow.size()<m_pImpl->aColumns.size())
+ aNewRow.resize(m_pImpl->aColumns.size(),rtl::OUString::createFromAscii(""));
+ m_pImpl->aCellContent.push_back(aNewRow);
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.push_back(Event.headerName);
+ m_pImpl->nRowCount=m_pImpl->aCellContent.size();
+ TableControl* pTable = (TableControl*)GetWindow();
+ pTable->InvalidateDataWindow(m_pImpl->nRowCount-1, false);
+ //pTable->GrabFocus();
+}
+
+void SAL_CALL UnoControlTableModel::rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ //unsigned int rows =m_pImpl->aCellContent.size()-1;
+ if(Event.index == -1)
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.clear();
+ m_pImpl->aCellContent.clear();
+ }
+ else
+ {
+ pTable->removeSelectedRow(Event.index);
+ if(m_pImpl->aCellContent.size()>1)
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.erase(m_pImpl->aRowHeadersTitle.begin()+Event.index);
+ m_pImpl->aCellContent.erase(m_pImpl->aCellContent.begin()+Event.index);
+
+ }
+ else
+ {
+ if(hasRowHeaders())
+ m_pImpl->aRowHeadersTitle.clear();
+ m_pImpl->aCellContent.clear();
+ //m_pImpl->nRowCount=0;
+ }
+ }
+ //pTable->InvalidateDataWindow(Event.index, true);
+ setRowCount(m_pImpl->aCellContent.size());
+ pTable->InvalidateDataWindow(Event.index, true);
+ //pTable->Invalidate();
+}
+
+void SAL_CALL UnoControlTableModel::dataChanged(const ::com::sun::star::awt::grid::GridDataEvent& Event ) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void) Event;
+}
+
+ void SAL_CALL UnoControlTableModel::disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException)
+ {
+ VCLXWindow::disposing( Source );
+ }
+
+::sal_Int32 SAL_CALL UnoControlTableModel::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return 0;
+}
+
+::sal_Int32 SAL_CALL UnoControlTableModel::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return 0;
+}
+
+void SAL_CALL UnoControlTableModel::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)length;
+ (void)start;
+}
+
+void SAL_CALL UnoControlTableModel::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)end;
+ (void)start;
+}
+
+::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoControlTableModel::getSelection() throw (::com::sun::star::uno::RuntimeException)
+{
+ TableControl* pTable = (TableControl*)GetWindow();
+ std::vector<RowPos> selectedRows = pTable->getSelectedRows();
+ Sequence<sal_Int32> selectedRowsToSequence(comphelper::containerToSequence(selectedRows));
+ return selectedRowsToSequence;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isCellEditable() throw (::com::sun::star::uno::RuntimeException)
+{
+ return sal_False;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException)
+{
+ return sal_False;
+}
+
+::sal_Bool SAL_CALL UnoControlTableModel::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)index;
+ return sal_False;
+}
+
+void SAL_CALL UnoControlTableModel::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)y;
+}
+
+void SAL_CALL UnoControlTableModel::selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException)
+{
+ (void)x;
+}
diff --git a/svtools/source/uno/unocontroltablemodel.hxx b/svtools/source/uno/unocontroltablemodel.hxx
new file mode 100644
index 000000000000..5da9cc871756
--- /dev/null
+++ b/svtools/source/uno/unocontroltablemodel.hxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: unocontroltablemodel.hxx,v $
+ * $Revision: 1.32 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _UNOCONTROL_TABLEMODEL_HXX_
+#define _UNOCONTROL_TABLEMODEL_HXX_
+
+#include <svtools/table/tablemodel.hxx>
+#include <svtools/table/tablecontrol.hxx>
+#include <com/sun/star/awt/grid/XGridControl.hpp>
+#include <com/sun/star/awt/grid/XGridDataListener.hpp>
+#include <com/sun/star/awt/grid/GridDataEvent.hpp>
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridSelectionListener.hpp>
+#include <toolkit/awt/vclxwindow.hxx>
+#include <toolkit/awt/vclxwindows.hxx>
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/implbase2.hxx>
+//#include <toolkit/helper/listenermultiplexer.hxx>
+
+
+using namespace ::svt::table;
+
+ struct UnoControlTableModel_Impl;
+
+ class UnoControlTableModel : public ITableModel, public ::cppu::ImplInheritanceHelper2< VCLXWindow, ::com::sun::star::awt::grid::XGridControl,
+ ::com::sun::star::awt::grid::XGridDataListener>
+ {
+ private:
+ UnoControlTableModel_Impl* m_pImpl;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >m_xDataModel;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >m_xColumnModel;
+ bool m_bHasColumnHeaders;
+ bool m_bHasRowHeaders;
+ bool m_bVScroll;
+ bool m_bHScroll;
+ //MouseListenerMultiplexer m_aMouseListeners;
+
+ public:
+ UnoControlTableModel();
+ ~UnoControlTableModel();
+
+ /// returns the current row height, in 1/100 millimeters
+ inline TableMetrics GetRowHeight() const { return getRowHeight(); }
+ /// sets a new row height.
+ void setRowHeight( TableMetrics _nHeight );
+
+ /// returns the height of the title row (containing the column headers)
+ inline TableMetrics GetTitleHeight() const { return getColumnHeaderHeight(); }
+ /// sets a new height for the title row (containing the column headers)
+ void SetTitleHeight( TableMetrics _nHeight );
+
+ /// returns the width of the handle column (containing the row headers)
+ inline TableMetrics GetHandleWidth() const { return getRowHeaderWidth(); }
+ /// sets a new width for the handle column (containing the row headers)
+ void SetHandleWidth( TableMetrics _nWidth );
+
+ /// sets the width of a column
+ inline void SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM );
+ /// retrieves the width of a column, in 1/100th millimeters
+ inline TableMetrics GetColumnWidth( ColPos _nColumn );
+
+ // TODO: setters and getters for ID, Name, Resizable, MinWidth, MaxWidth
+
+ public:
+ // ITableModel overridables
+ virtual TableSize getColumnCount() const;
+ virtual TableSize getRowCount() const;
+ virtual void setColumnCount(TableSize _nColCount);
+ virtual void setRowCount(TableSize _nRowCount);
+ virtual bool hasColumnHeaders() const;
+ virtual bool hasRowHeaders() const;
+ virtual void setRowHeaders(bool _bRowHeaders);
+ virtual void setColumnHeaders(bool _bColumnHeaders);
+ virtual bool isCellEditable( ColPos col, RowPos row ) const;
+ virtual void addTableModelListener( const PTableModelListener& listener );
+ virtual void removeTableModelListener( const PTableModelListener& listener );
+ virtual PColumnModel getColumnModel( ColPos column );
+ virtual PColumnModel getColumnModelByID( ColumnID id );
+ virtual PTableRenderer getRenderer() const;
+ virtual PTableInputHandler getInputHandler() const;
+ virtual TableMetrics getRowHeight() const;
+ virtual TableMetrics getColumnHeaderHeight() const;
+ virtual TableMetrics getRowHeaderWidth() const;
+ virtual ScrollbarVisibility getVerticalScrollbarVisibility(int overAllHeight, int actHeight) const;
+ virtual ScrollbarVisibility getHorizontalScrollbarVisibility(int overAllWidth, int actWidth) const;
+ virtual void setCellContent(std::vector<std::vector<rtl::OUString> > cellContent);
+ virtual std::vector<std::vector<rtl::OUString> > getCellContent();
+ virtual void setRowHeaderName(std::vector<rtl::OUString> cellColumnContent);
+ virtual std::vector<rtl::OUString> getRowHeaderName();
+
+ //XGridDataListener overridables
+ virtual void SAL_CALL rowAdded(const ::com::sun::star::awt::grid::GridDataEvent& Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL rowRemoved(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL dataChanged(const ::com::sun::star::awt::grid::GridDataEvent & Event) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
+
+ ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
+ void SAL_CALL acquire() throw() { VCLXWindow::acquire(); }
+ void SAL_CALL release() throw() { VCLXWindow::release(); }
+
+ // ::com::sun::star::lang::XTypeProvider
+ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
+
+ //::com::sun::star::awt::grid::XGridControl
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel( ) throw (::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setColumnModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel >& model ) throw (::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel( ) throw (::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setDataModel( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel >& model ) throw (::com::sun::star::uno::RuntimeException);
+
+ virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 end) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isCellEditable() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectColumn(::sal_Int32 x) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+
+ //void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException);
+ //void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener ) throw(::com::sun::star::uno::RuntimeException);
+ //::com::sun::star::awt::XMouseListener
+ /*
+ virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException);
+ */
+
+ void SAL_CALL setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException);
+ ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException);
+ static void ImplGetPropertyIds( std::list< sal_uInt16 > &aIds );
+ void SAL_CALL setVisible(sal_Bool bVisible) throw(::com::sun::star::uno::RuntimeException);
+ void SAL_CALL setFocus() throw(::com::sun::star::uno::RuntimeException);
+ };
+
+ inline void UnoControlTableModel::SetColumnWidth( ColPos _nColumn, TableMetrics _nWidth100thMM )
+ {
+ getColumnModel( _nColumn )->setWidth( _nWidth100thMM );
+ }
+
+ inline TableMetrics UnoControlTableModel::GetColumnWidth( ColPos _nColumn )
+ {
+ return getColumnModel( _nColumn )->getWidth();
+ }
+ #endif // _UNOCONTROL_TABLEMODEL_HXX_
diff --git a/svtools/source/uno/unoiface.cxx b/svtools/source/uno/unoiface.cxx
index 91a6de4c404d..e6922aa4f099 100644
--- a/svtools/source/uno/unoiface.cxx
+++ b/svtools/source/uno/unoiface.cxx
@@ -54,6 +54,9 @@
#include <svtools/svtreebx.hxx>
#include "treecontrolpeer.hxx"
+//#include "vclxgridcontrol.hxx"
+#include "unocontroltablemodel.hxx"
+#include <svtools/table/tablecontrol.hxx>
namespace
{
@@ -83,8 +86,6 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::
if ( pParent )
{
pWindow = new MultiLineEdit( pParent, nWinBits|WB_IGNORETAB);
- static_cast< MultiLineEdit* >( pWindow )->DisableSelectionOnFocus();
- // #i89821# / 2008-12-17 / frank.schoenheit@sun.com
*ppNewComp = new VCLXMultiLineEdit;
}
else
@@ -167,6 +168,21 @@ SAL_DLLPUBLIC_EXPORT Window* CreateWindow( VCLXWindow** ppNewComp, const ::com::
return NULL;
}
}
+ else if ( aServiceName.EqualsIgnoreCaseAscii( "Grid" ) )
+ {
+ if ( pParent )
+ {
+ ::svt::table::TableControl* m_pTable = new ::svt::table::TableControl(pParent, nWinBits);
+ UnoControlTableModel* pModel = new UnoControlTableModel();
+ *ppNewComp = pModel;
+ pWindow = m_pTable;
+ }
+ else
+ {
+ *ppNewComp = NULL;
+ return NULL;
+ }
+ }
return pWindow;
}
diff --git a/svtools/uno/makefile.mk b/svtools/uno/makefile.mk
index b572242f1d85..8f61c7100508 100644
--- a/svtools/uno/makefile.mk
+++ b/svtools/uno/makefile.mk
@@ -60,11 +60,13 @@ SHL1LIBS= \
SHL1STDLIBS=\
$(SVTOOLLIB) \
+ $(TKLIB) \
$(VCLLIB) \
$(SVLLIB) \
$(UNOTOOLSLIB) \
$(TOOLSLIB) \
$(COMPHELPERLIB) \
+ $(VOSLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
$(SALLIB)
diff --git a/svtools/util/makefile.mk b/svtools/util/makefile.mk
index d40195609115..80596d23e866 100644
--- a/svtools/util/makefile.mk
+++ b/svtools/util/makefile.mk
@@ -84,6 +84,7 @@ LIB7FILES= \
$(SLB)$/svhtml.lib \
$(SLB)$/svrtf.lib \
$(SLB)$/heavyconfig.lib \
+ $(SLB)$/table.lib \
$(SLB)$/java.lib
LIB8TARGET= $(SLB)$/svl.lib
diff --git a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
index 24a16d5868dd..543c8a85c401 100644
--- a/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
+++ b/toolkit/inc/toolkit/helper/listenermultiplexer.hxx
@@ -129,7 +129,7 @@ DECL_LISTENERMULTIPLEXER_END
// ----------------------------------------------------
// class MouseListenerMultiplexer
// ----------------------------------------------------
-DECL_LISTENERMULTIPLEXER_START( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener )
+DECL_LISTENERMULTIPLEXER_START_DLLPUB( MouseListenerMultiplexer, ::com::sun::star::awt::XMouseListener )
void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& e ) throw(::com::sun::star::uno::RuntimeException);
diff --git a/toolkit/inc/toolkit/helper/property.hxx b/toolkit/inc/toolkit/helper/property.hxx
index da2de08c9544..fbfe90494279 100644
--- a/toolkit/inc/toolkit/helper/property.hxx
+++ b/toolkit/inc/toolkit/helper/property.hxx
@@ -165,7 +165,7 @@ namespace rtl {
#define BASEPROPERTY_IMAGEPOSITION 113 // sal_Int16
#define BASEPROPERTY_NATIVE_WIDGET_LOOK 114 // sal_Bool
#define BASEPROPERTY_VERTICALALIGN 115 // VerticalAlignment
-#define BASEPROPERTY_WHEELWITHOUTFOCUS 116 // sal_Bool
+#define BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR 116 // sal_Int16
#define BASEPROPERTY_GRAPHIC 117 // css.graphic.XGraphic
#define BASEPROPERTY_STEP_TIME 118 // sal_Int32
#define BASEPROPERTY_DECORATION 119 // sal_Bool
@@ -191,6 +191,13 @@ namespace rtl {
#define BASEPROPERTY_IMAGE_SCALE_MODE 137
#define BASEPROPERTY_WRITING_MODE 138
#define BASEPROPERTY_CONTEXT_WRITING_MODE 139
+#define BASEPROPERTY_GRID_SHOWROWHEADER 140
+#define BASEPROPERTY_GRID_SHOWCOLUMNHEADER 141
+#define BASEPROPERTY_GRID_DATAMODEL 142
+#define BASEPROPERTY_GRID_COLUMNMODEL 143
+#define BASEPROPERTY_GRID_SELECTIONMODE 144
+#define BASEPROPERTY_ENABLEVISIBLE 145 // sal_Bool
+
// Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen.
#define BASEPROPERTY_FONTDESCRIPTORPART_START 1000
diff --git a/toolkit/inc/toolkit/helper/servicenames.hxx b/toolkit/inc/toolkit/helper/servicenames.hxx
index 31513f0f2358..89810ae69482 100644
--- a/toolkit/inc/toolkit/helper/servicenames.hxx
+++ b/toolkit/inc/toolkit/helper/servicenames.hxx
@@ -95,6 +95,12 @@ extern const sal_Char __FAR_DATA szServiceName_TreeControl[];
extern const sal_Char __FAR_DATA szServiceName_TreeControlModel[];
extern const sal_Char __FAR_DATA szServiceName_MutableTreeDataModel[];
+extern const sal_Char __FAR_DATA szServiceName_GridControl[];
+extern const sal_Char __FAR_DATA szServiceName_GridControlModel[];
+extern const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[];
+extern const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[];
+extern const sal_Char __FAR_DATA szServiceName_GridColumn[];
+
extern const sal_Char __FAR_DATA szServiceName_UnoSimpleAnimationControl[], szServiceName_UnoSimpleAnimationControlModel[];
extern const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[], szServiceName_UnoThrobberControlModel[];
extern const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[], szServiceName_UnoControlFixedHyperlinkModel[];
diff --git a/toolkit/inc/toolkit/helper/vclunohelper.hxx b/toolkit/inc/toolkit/helper/vclunohelper.hxx
index 68583f99b447..1c5d89a3cc64 100644
--- a/toolkit/inc/toolkit/helper/vclunohelper.hxx
+++ b/toolkit/inc/toolkit/helper/vclunohelper.hxx
@@ -135,11 +135,15 @@ public:
static MapUnit /* MapModeUnit */ ConvertToMapModeUnit(sal_Int16 /* com.sun.star.util.MeasureUnit.* */ _nMeasureUnit) throw (::com::sun::star::lang::IllegalArgumentException);
static sal_Int16 /* com.sun.star.util.MeasureUnit.* */ ConvertToMeasurementUnit(MapUnit /* MapModeUnit */ _nMapModeUnit) throw (::com::sun::star::lang::IllegalArgumentException);
+
static ::Size /* VCLSize */ ConvertToVCLSize(::com::sun::star::awt::Size const& _aSize);
static ::com::sun::star::awt::Size ConvertToAWTSize(::Size /* VCLSize */ const& _aSize);
+
static ::Point /* VCLPoint */ ConvertToVCLPoint(::com::sun::star::awt::Point const& _aPoint);
static ::com::sun::star::awt::Point ConvertToAWTPoint(::Point /* VCLPoint */ const& _aPoint);
+ static ::Rectangle ConvertToVCLRect( ::com::sun::star::awt::Rectangle const & _rRect );
+ static ::com::sun::star::awt::Rectangle ConvertToAWTRect( ::Rectangle const & _rRect );
};
diff --git a/toolkit/prj/build.lst b/toolkit/prj/build.lst
index 7fa0efaded53..304d0e7c978f 100644
--- a/toolkit/prj/build.lst
+++ b/toolkit/prj/build.lst
@@ -7,6 +7,7 @@ ti toolkit\source\helper nmake - all ti_helper ti_inc NULL
ti toolkit\source\awt nmake - all ti_awt ti_inc NULL
ti toolkit\source\controls nmake - all ti_controls ti_inc NULL
ti toolkit\source\controls\tree nmake - all ti_tree NULL
+ti toolkit\source\controls\grid nmake - all ti_grid NULL
ti toolkit\source\layout\core nmake - all ti_layout_core NULL
ti toolkit\source\layout\vcl nmake - all ti_layout_vcl NULL
-ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_layout_vcl NULL
+ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_grid ti_layout_vcl NULL
diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx
index 09e318800184..337400c08713 100644
--- a/toolkit/source/awt/vclxwindow.cxx
+++ b/toolkit/source/awt/vclxwindow.cxx
@@ -35,6 +35,7 @@
#include <com/sun/star/awt/KeyModifier.hpp>
#include <com/sun/star/awt/MouseEvent.hpp>
#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/awt/MouseWheelBehavior.hpp>
#include <com/sun/star/awt/XTopWindow.hpp>
#include <com/sun/star/awt/Style.hpp>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
@@ -82,6 +83,7 @@ using ::com::sun::star::style::VerticalAlignment_BOTTOM;
using ::com::sun::star::style::VerticalAlignment_MAKE_FIXED_SIZE;
namespace WritingMode2 = ::com::sun::star::text::WritingMode2;
+namespace MouseWheelBehavior = ::com::sun::star::awt::MouseWheelBehavior;
//====================================================================
@@ -226,6 +228,8 @@ private:
::toolkit::AccessibilityClient maAccFactory;
bool mbDisposed;
bool mbDrawingOntoParent; // no bit mask, is passed around by reference
+ sal_Bool mbEnableVisible;
+ sal_Bool mbDirectVisible;
::osl::Mutex maListenerContainerMutex;
::cppu::OInterfaceContainerHelper maWindow2Listeners;
@@ -273,6 +277,15 @@ public:
*/
VCLXWindowImpl( VCLXWindow& _rAntiImpl, ::vos::IMutex& _rMutex, bool _bWithDefaultProps );
+ /** synchronously mbEnableVisible
+ */
+ void setEnableVisible( sal_Bool bEnableVisible ) { mbEnableVisible = bEnableVisible; }
+ sal_Bool isEnableVisible() { return mbEnableVisible; }
+ /** synchronously mbDirectVisible;
+ */
+ void setDirectVisible( sal_Bool bDirectVisible ) { mbDirectVisible = bDirectVisible; }
+ sal_Bool isDirectVisible() { return mbDirectVisible; }
+
/** asynchronously notifies a mouse event to the VCLXWindow's XMouseListeners
*/
void notifyMouseEvent( const awt::MouseEvent& _rMouseEvent, MouseEventType _nType );
@@ -347,6 +360,8 @@ VCLXWindowImpl::VCLXWindowImpl( VCLXWindow& _rAntiImpl, ::vos::IMutex& _rMutex,
,mrMutex( _rMutex )
,mbDisposed( false )
,mbDrawingOntoParent( false )
+ ,mbEnableVisible(sal_True)
+ ,mbDirectVisible(sal_True)
,maListenerContainerMutex( )
,maWindow2Listeners( maListenerContainerMutex )
,maDockableWindowListeners( maListenerContainerMutex )
@@ -625,7 +640,12 @@ void VCLXWindow::SetWindow( Window* pWindow )
SetOutputDevice( pWindow );
if ( GetWindow() )
+ {
GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
+ sal_Bool bDirectVisible = pWindow ? pWindow->IsVisible() : false;
+ mpImpl->setDirectVisible( bDirectVisible );
+ }
+
}
void VCLXWindow::suspendVclEventListening( )
@@ -1226,7 +1246,8 @@ void VCLXWindow::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::Ru
}
}
*/
- pWindow->Show( bVisible );
+ mpImpl->setDirectVisible( bVisible );
+ pWindow->Show( bVisible && mpImpl->isEnableVisible() );
}
}
@@ -1529,6 +1550,7 @@ void VCLXWindow::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds, bool bWithDe
BASEPROPERTY_HELPURL,
BASEPROPERTY_TEXT,
BASEPROPERTY_PRINTABLE,
+ BASEPROPERTY_ENABLEVISIBLE, // for visibility
BASEPROPERTY_TABSTOP,
0);
@@ -1634,19 +1656,27 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com::
}
break;
- case BASEPROPERTY_WHEELWITHOUTFOCUS:
+ case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
{
- sal_Bool bWheelOnHover( sal_True );
- if ( Value >>= bWheelOnHover )
- {
- AllSettings aSettings = pWindow->GetSettings();
- MouseSettings aMouseSettings = aSettings.GetMouseSettings();
+ sal_uInt16 nWheelBehavior( MouseWheelBehavior::SCROLL_FOCUS_ONLY );
+ OSL_VERIFY( Value >>= nWheelBehavior );
- aMouseSettings.SetNoWheelActionWithoutFocus( !bWheelOnHover );
- aSettings.SetMouseSettings( aMouseSettings );
+ AllSettings aSettings = pWindow->GetSettings();
+ MouseSettings aMouseSettings = aSettings.GetMouseSettings();
- pWindow->SetSettings( aSettings, TRUE );
+ USHORT nVclBehavior( MOUSE_WHEEL_FOCUS_ONLY );
+ switch ( nWheelBehavior )
+ {
+ case MouseWheelBehavior::SCROLL_DISABLED: nVclBehavior = MOUSE_WHEEL_DISABLE; break;
+ case MouseWheelBehavior::SCROLL_FOCUS_ONLY: nVclBehavior = MOUSE_WHEEL_FOCUS_ONLY; break;
+ case MouseWheelBehavior::SCROLL_ALWAYS: nVclBehavior = MOUSE_WHEEL_ALWAYS; break;
+ default:
+ OSL_ENSURE( false, "VCLXWindow::setProperty( 'MouseWheelBehavior' ): illegal property value!" );
}
+
+ aMouseSettings.SetWheelBehavior( nWheelBehavior );
+ aSettings.SetMouseSettings( aMouseSettings );
+ pWindow->SetSettings( aSettings, TRUE );
}
break;
@@ -1672,6 +1702,19 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com::
setEnable( b );
}
break;
+ case BASEPROPERTY_ENABLEVISIBLE:
+ {
+ sal_Bool b = sal_False;
+ if ( Value >>= b )
+ {
+ if( b != mpImpl->isEnableVisible() )
+ {
+ mpImpl->setEnableVisible( b );
+ pWindow->Show( b && mpImpl->isDirectVisible() );
+ }
+ }
+ }
+ break;
case BASEPROPERTY_TEXT:
case BASEPROPERTY_LABEL:
case BASEPROPERTY_TITLE:
@@ -2122,10 +2165,19 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com::
aProp <<= mpImpl->mnWritingMode;
break;
- case BASEPROPERTY_WHEELWITHOUTFOCUS:
+ case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
{
- sal_Bool bWheelOnHover = !GetWindow()->GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus();
- aProp <<= bWheelOnHover;
+ USHORT nVclBehavior = GetWindow()->GetSettings().GetMouseSettings().GetWheelBehavior();
+ sal_Int16 nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY;
+ switch ( nVclBehavior )
+ {
+ case MOUSE_WHEEL_DISABLE: nBehavior = MouseWheelBehavior::SCROLL_DISABLED; break;
+ case MOUSE_WHEEL_FOCUS_ONLY: nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY; break;
+ case MOUSE_WHEEL_ALWAYS: nBehavior = MouseWheelBehavior::SCROLL_ALWAYS; break;
+ default:
+ OSL_ENSURE( false, "VCLXWindow::getProperty( 'MouseWheelBehavior' ): illegal VCL value!" );
+ }
+ aProp <<= nBehavior;
}
break;
@@ -2137,6 +2189,10 @@ void VCLXWindow::setProperty( const ::rtl::OUString& PropertyName, const ::com::
aProp <<= (sal_Bool) GetWindow()->IsEnabled();
break;
+ case BASEPROPERTY_ENABLEVISIBLE:
+ aProp <<= (sal_Bool) mpImpl->isEnableVisible();
+ break;
+
case BASEPROPERTY_TEXT:
case BASEPROPERTY_LABEL:
case BASEPROPERTY_TITLE:
@@ -2411,7 +2467,7 @@ void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno:
if ( !pWindow )
return;
- if ( pWindow )
+ if ( isDesignMode() || mpImpl->isEnableVisible() )
{
TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow );
if ( pTabPage )
@@ -2481,7 +2537,7 @@ void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno:
vcl::PDFExtOutDevData* pPDFExport = dynamic_cast<vcl::PDFExtOutDevData*>(pDev->GetExtOutDevData());
bool bDrawSimple = ( pDev->GetOutDevType() == OUTDEV_PRINTER )
|| ( pDev->GetOutDevViewType() == OUTDEV_VIEWTYPE_PRINTPREVIEW )
- || ( pPDFExport && ! pPDFExport->GetIsExportFormFields() );
+ || ( pPDFExport != NULL );
if ( bDrawSimple )
{
pWindow->Draw( pDev, aP, aSz, WINDOW_DRAW_NOCONTROLS );
diff --git a/toolkit/source/awt/vclxwindows.cxx b/toolkit/source/awt/vclxwindows.cxx
index 59cb9632b7e1..b49fa1a621d6 100644
--- a/toolkit/source/awt/vclxwindows.cxx
+++ b/toolkit/source/awt/vclxwindows.cxx
@@ -386,6 +386,7 @@ void VCLXButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTBUTTON,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_GRAPHIC,
BASEPROPERTY_HELPTEXT,
@@ -668,6 +669,7 @@ void VCLXImageControl::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_BORDERCOLOR,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_GRAPHIC,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -796,6 +798,7 @@ void VCLXCheckBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
PushPropertyIds( rIds,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_GRAPHIC,
BASEPROPERTY_HELPTEXT,
@@ -1095,6 +1098,7 @@ void VCLXRadioButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
PushPropertyIds( rIds,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_GRAPHIC,
BASEPROPERTY_HELPTEXT,
@@ -1380,6 +1384,9 @@ void VCLXRadioButton::ImplClickedOrToggled( BOOL bToggled )
// ----------------------------------------------------
void VCLXSpinField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
{
+ PushPropertyIds( rIds,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
+ 0 );
VCLXEdit::ImplGetPropertyIds( rIds );
}
@@ -1519,6 +1526,7 @@ void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_DROPDOWN,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -1532,6 +1540,7 @@ void VCLXListBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_ALIGN,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXWindow::ImplGetPropertyIds( rIds );
}
@@ -2709,6 +2718,7 @@ void VCLXFixedHyperlink::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_BORDERCOLOR,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -2737,6 +2747,7 @@ void VCLXFixedText::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_BORDERCOLOR,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -2879,6 +2890,7 @@ void VCLXScrollBar::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_BORDERCOLOR,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
BASEPROPERTY_LINEINCREMENT,
@@ -3358,6 +3370,7 @@ void VCLXEdit::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ECHOCHAR,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HARDLINEBREAKS,
BASEPROPERTY_HELPTEXT,
@@ -3734,6 +3747,7 @@ void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_DROPDOWN,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -3748,6 +3762,7 @@ void VCLXComboBox::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_ALIGN,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
// no, don't call VCLXEdit here - it has properties which we do *not* want to have at at combo box
// #i92690# / 2008-08-12 / frank.schoenheit@sun.com
@@ -4250,6 +4265,7 @@ void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_DROPDOWN,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_EXTDATEFORMAT,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
@@ -4266,6 +4282,7 @@ void VCLXDateField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_HIDEINACTIVESELECTION,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
@@ -4586,6 +4603,7 @@ void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_BORDERCOLOR,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_EXTTIMEFORMAT,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
@@ -4605,6 +4623,7 @@ void VCLXTimeField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_HIDEINACTIVESELECTION,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
@@ -4887,6 +4906,7 @@ void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DECIMALACCURACY,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -4906,6 +4926,7 @@ void VCLXNumericField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_HIDEINACTIVESELECTION,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
@@ -5227,6 +5248,7 @@ void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DECIMALACCURACY,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -5244,6 +5266,7 @@ void VCLXMetricField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_CUSTOMUNITTEXT,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
@@ -5477,6 +5500,7 @@ void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DECIMALACCURACY,
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -5496,6 +5520,7 @@ void VCLXCurrencyField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_HIDEINACTIVESELECTION,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
@@ -5828,6 +5853,7 @@ void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_DEFAULTCONTROL,
BASEPROPERTY_EDITMASK,
BASEPROPERTY_ENABLED,
+ BASEPROPERTY_ENABLEVISIBLE,
BASEPROPERTY_FONTDESCRIPTOR,
BASEPROPERTY_HELPTEXT,
BASEPROPERTY_HELPURL,
@@ -5841,6 +5867,7 @@ void VCLXPatternField::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
BASEPROPERTY_HIDEINACTIVESELECTION,
BASEPROPERTY_WRITING_MODE,
BASEPROPERTY_CONTEXT_WRITING_MODE,
+ BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR,
0);
VCLXFormattedSpinField::ImplGetPropertyIds( rIds );
}
diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx
index 47028cc8e071..07d459a6111a 100644
--- a/toolkit/source/controls/dialogcontrol.cxx
+++ b/toolkit/source/controls/dialogcontrol.cxx
@@ -66,6 +66,7 @@
#include <vcl/image.hxx>
#include "tree/treecontrol.hxx"
+#include "grid/gridcontrol.hxx"
#include <map>
#include <algorithm>
@@ -453,6 +454,8 @@ Reference< XInterface > UnoControlDialogModel::createInstance( const ::rtl::OUSt
pNewModel = new OGeometryControlModel< UnoControlRoadmapModel >;
else if ( aServiceSpecifier.compareToAscii( szServiceName_TreeControlModel ) == 0 )
pNewModel = new OGeometryControlModel< UnoTreeModel >;
+ else if ( aServiceSpecifier.compareToAscii( szServiceName_GridControlModel ) == 0 )
+ pNewModel = new OGeometryControlModel< UnoGridModel >;
if ( !pNewModel )
{
@@ -515,6 +518,7 @@ Sequence< ::rtl::OUString > UnoControlDialogModel::getAvailableServiceNames() th
pNames[18] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlFixedLineModel );
pNames[19] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlRoadmapModel );
pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_TreeControlModel );
+ pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_GridControlModel );
}
return *pNamesSeq;
diff --git a/toolkit/source/controls/formattedcontrol.cxx b/toolkit/source/controls/formattedcontrol.cxx
index 19fb4c3609d0..6171067f1185 100644
--- a/toolkit/source/controls/formattedcontrol.cxx
+++ b/toolkit/source/controls/formattedcontrol.cxx
@@ -142,6 +142,7 @@ namespace toolkit
ImplRegisterProperty( BASEPROPERTY_EFFECTIVE_MAX );
ImplRegisterProperty( BASEPROPERTY_EFFECTIVE_MIN );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
ImplRegisterProperty( BASEPROPERTY_FORMATKEY );
ImplRegisterProperty( BASEPROPERTY_FORMATSSUPPLIER );
@@ -161,6 +162,7 @@ namespace toolkit
ImplRegisterProperty( BASEPROPERTY_ENFORCE_FORMAT );
ImplRegisterProperty( BASEPROPERTY_WRITING_MODE );
ImplRegisterProperty( BASEPROPERTY_CONTEXT_WRITING_MODE );
+ ImplRegisterProperty( BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR );
Any aTreatAsNumber;
aTreatAsNumber <<= (sal_Bool) sal_True;
diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx
new file mode 100644
index 000000000000..bdd7fb475afe
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx
@@ -0,0 +1,242 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "defaultgridcolumnmodel.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+#define COLUMNSELECTIONALLOWED ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ColumnSelectionAllowed" ))
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class DefaultGridColumnModel
+///////////////////////////////////////////////////////////////////////
+
+DefaultGridColumnModel::DefaultGridColumnModel()
+: columns(std::vector< Reference< XGridColumn > >())
+{
+}
+
+//---------------------------------------------------------------------
+
+DefaultGridColumnModel::~DefaultGridColumnModel()
+{
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast( broadcast_type eType, const GridColumnEvent& aEvent )
+{
+ ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridColumnListener::static_type() );
+ if( pIter )
+ {
+ ::cppu::OInterfaceIteratorHelper aListIter(*pIter);
+ while(aListIter.hasMoreElements())
+ {
+ XGridColumnListener* pListener = static_cast<XGridColumnListener*>(aListIter.next());
+ switch( eType )
+ {
+ case column_added: pListener->columnAdded(aEvent); break;
+ case column_removed: pListener->columnRemoved(aEvent); break;
+ case column_changed: pListener->columnChanged(aEvent); break;
+ }
+ }
+ }
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, name, oldValue, newValue, 0, NULL );
+ broadcast( column_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_add( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn );
+ broadcast( column_added, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridColumnModel::broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridColumnEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, rColumn );
+ broadcast( column_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+// XDefaultGridColumnModel
+//---------------------------------------------------------------------
+::sal_Bool SAL_CALL DefaultGridColumnModel::getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException)
+{
+ return selectionAllowed;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::setColumnSelectionAllowed(::sal_Bool value) throw (::com::sun::star::uno::RuntimeException)
+{
+ sal_Bool oldValue = selectionAllowed;
+ selectionAllowed = value;
+ broadcast_changed( COLUMNSELECTIONALLOWED, Any(oldValue) , Any(selectionAllowed));
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridColumnModel::getColumnCount() throw (::com::sun::star::uno::RuntimeException)
+{
+ return columns.size();
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridColumnModel::addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ columns.push_back(column);
+
+ sal_Int32 index = columns.size() - 1;
+ broadcast_add(index, column );
+ return index;
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL DefaultGridColumnModel::getColumns() throw (::com::sun::star::uno::RuntimeException)
+{
+ return comphelper::containerToSequence(columns);
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL DefaultGridColumnModel::getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ if ( index >=0 && index < ((sal_Int32)columns.size()))
+ return columns[index];
+ else
+ return Reference< XGridColumn >();
+}
+
+void SAL_CALL DefaultGridColumnModel::addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XGridColumnListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XGridColumnListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::dispose() throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ ::com::sun::star::lang::EventObject aEvent;
+ aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) );
+ BrdcstHelper.aLC.disposeAndClear( aEvent );
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridColumnModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL DefaultGridColumnModel::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridColumnModel" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL DefaultGridColumnModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_DefaultGridColumnModel );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridColumnModel::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridColumnModel ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridColumnModel );
+}
+
diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx
new file mode 100644
index 000000000000..b230188f9107
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <com/sun/star/awt/grid/GridColumnEvent.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+enum broadcast_type { column_added, column_removed, column_changed};
+
+class DefaultGridColumnModel : public ::cppu::WeakImplHelper2< XGridColumnModel, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ DefaultGridColumnModel();
+ virtual ~DefaultGridColumnModel();
+
+ // XGridColumnModel
+
+ virtual ::sal_Bool SAL_CALL getColumnSelectionAllowed() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnSelectionAllowed(::sal_Bool the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getColumnCount() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL addColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & column) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > SAL_CALL getColumns() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > SAL_CALL getColumn(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeColumnListener( const Reference< XGridColumnListener >& xListener ) throw (RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+private:
+
+ void broadcast( broadcast_type eType, const GridColumnEvent& aEvent );
+ void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue );
+ void broadcast_add( sal_Int32 index,const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn );
+ void broadcast_remove( sal_Int32 index, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > & rColumn );
+
+ std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumn > > columns;
+ sal_Bool selectionAllowed;
+};
+
+}
diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.cxx b/toolkit/source/controls/grid/defaultgriddatamodel.cxx
new file mode 100644
index 000000000000..865be80f55a7
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgriddatamodel.cxx
@@ -0,0 +1,310 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "defaultgriddatamodel.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+#define ROWHEIGHT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeight" ))
+#define ROWHEADERS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "RowHeaders" ))
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class DefaultGridDataModel
+///////////////////////////////////////////////////////////////////////
+
+DefaultGridDataModel::DefaultGridDataModel()
+: rowHeight(0),
+ rowHeaders(std::vector< ::rtl::OUString >())
+{
+}
+
+//---------------------------------------------------------------------
+
+DefaultGridDataModel::~DefaultGridDataModel()
+{
+}
+
+void DefaultGridDataModel::broadcast( broadcast_type eType, const GridDataEvent& aEvent )
+{
+ ::cppu::OInterfaceContainerHelper* pIter = BrdcstHelper.getContainer( XGridDataListener::static_type() );
+ if( pIter )
+ {
+ ::cppu::OInterfaceIteratorHelper aListIter(*pIter);
+ while(aListIter.hasMoreElements())
+ {
+ XGridDataListener* pListener = static_cast<XGridDataListener*>(aListIter.next());
+ switch( eType )
+ {
+ case row_added: pListener->rowAdded(aEvent); break;
+ case row_removed: pListener->rowRemoved(aEvent); break;
+ case data_changed: pListener->dataChanged(aEvent); break;
+ }
+ }
+ }
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, name, oldValue, newValue, 0, ::rtl::OUString(), Sequence< ::rtl::OUString>() );
+ broadcast( data_changed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData );
+ broadcast( row_added, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+void DefaultGridDataModel::broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData )
+{
+ Reference< XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
+ GridDataEvent aEvent( xSource, ::rtl::OUString(), Any(), Any(), index, headerName, rowData );
+ broadcast( row_removed, aEvent);
+}
+
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// XDefaultGridDataModel
+//---------------------------------------------------------------------
+::sal_Int32 SAL_CALL DefaultGridDataModel::getRowHeight() throw (::com::sun::star::uno::RuntimeException)
+{
+ return rowHeight;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::setRowHeight(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException)
+{
+ sal_Int32 oldValue = rowHeight;
+ rowHeight = value;
+
+ broadcast_changed( ROWHEIGHT, Any(oldValue), Any(value) );
+}
+
+//---------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL DefaultGridDataModel::getRowCount() throw (::com::sun::star::uno::RuntimeException)
+{
+ return data.size();
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getRowHeaders() throw (::com::sun::star::uno::RuntimeException)
+{
+ return comphelper::containerToSequence(rowHeaders);
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > oldValue( comphelper::containerToSequence(rowHeaders) );
+
+ std::vector< rtl::OUString>::iterator iterator;
+ int i = 0;
+ int sequenceSize = value.getLength();
+
+ for(iterator = rowHeaders.begin(); iterator != rowHeaders.end(); iterator++)
+ {
+ if ( sequenceSize > i )
+ *iterator = value[i];
+ else
+ *iterator = ::rtl::OUString();
+ i++;
+ }
+
+ broadcast_changed( ROWHEADERS, Any(oldValue), Any(comphelper::containerToSequence(rowHeaders)) );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & rRowdata) throw (::com::sun::star::uno::RuntimeException)
+{
+ // store header name
+ rowHeaders.push_back(headername);
+
+
+ // store row data
+ std::vector< rtl::OUString > newRow(
+ comphelper::sequenceToContainer< std::vector<rtl::OUString > >(rRowdata));
+
+ data.push_back( newRow );
+
+ broadcast_add( data.size()-1, headername, rRowdata);
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ if ( index >= 0 && index <= getRowCount()-1)
+ {
+ /* if(Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index ))
+ {
+ ::com::sun::star::uno::Sequence<::sal_Int32> selectedRows = Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
+ selectedRow.erase(selectedRows.begin()+index);
+ }*/
+
+ ::rtl::OUString headerName( (::rtl::OUString) rowHeaders[index] );
+ rowHeaders.erase(rowHeaders.begin() + index);
+
+ Sequence< ::rtl::OUString >& rowData ( (Sequence< ::rtl::OUString >&)data[index] );
+ data.erase(data.begin() + index);
+ broadcast_remove( index, headerName, rowData);
+ }
+ else
+ return;
+}
+//---------------------------------------------------------------------
+::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL DefaultGridDataModel::getData() throw (::com::sun::star::uno::RuntimeException)
+{
+
+ std::vector< std::vector< ::rtl::OUString > >::iterator iterator;
+ std::vector< Sequence< ::rtl::OUString > > dummyContainer(0);
+
+
+ for(iterator = data.begin(); iterator != data.end(); iterator++)
+ {
+ Sequence< ::rtl::OUString > cols(comphelper::containerToSequence(*iterator));
+ dummyContainer.push_back( cols );
+ }
+ Sequence< Sequence< ::rtl::OUString > > dataSequence(comphelper::containerToSequence(dummyContainer));
+
+ return dataSequence;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XGridDataListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XGridDataListener::static_type(), xListener );
+}
+
+void SAL_CALL DefaultGridDataModel::removeAll() throw (RuntimeException)
+{
+ rowHeaders.clear();
+ data.clear();
+ broadcast_remove( -1, ::rtl::OUString(), 0);
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::dispose() throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+
+ ::com::sun::star::lang::EventObject aEvent;
+ aEvent.Source.set( static_cast< ::cppu::OWeakObject* >( this ) );
+ BrdcstHelper.aLC.disposeAndClear( aEvent );
+
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.addListener( XEventListener::static_type(), xListener );
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL DefaultGridDataModel::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ BrdcstHelper.removeListener( XEventListener::static_type(), xListener );
+}
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL DefaultGridDataModel::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.DefaultGridDataModel" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL DefaultGridDataModel::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_DefaultGridDataModel );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL DefaultGridDataModel::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_DefaultGridDataModel ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::DefaultGridDataModel );
+}
+
diff --git a/toolkit/source/controls/grid/defaultgriddatamodel.hxx b/toolkit/source/controls/grid/defaultgriddatamodel.hxx
new file mode 100644
index 000000000000..18000c9f5a71
--- /dev/null
+++ b/toolkit/source/controls/grid/defaultgriddatamodel.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/GridDataEvent.hpp>
+#include <com/sun/star/awt/grid/XGridDataListener.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+enum broadcast_type { row_added, row_removed, data_changed};
+
+class DefaultGridDataModel : public ::cppu::WeakImplHelper2< XGridDataModel, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ DefaultGridDataModel();
+ virtual ~DefaultGridDataModel();
+
+ // XGridDataModel
+ virtual ::sal_Int32 SAL_CALL getRowHeight() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRowHeight(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getRowCount() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getRowHeaders() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setRowHeaders(const ::com::sun::star::uno::Sequence< ::rtl::OUString > & value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::rtl::OUString > > SAL_CALL getData() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addRow(const ::rtl::OUString & headername, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & data) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeRow(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeDataListener( const Reference< XGridDataListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeAll() throw (RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+private:
+
+ void broadcast( broadcast_type eType, const GridDataEvent& aEvent );
+ void broadcast_changed( ::rtl::OUString name, Any oldValue, Any newValue );
+ void broadcast_add( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData );
+ void broadcast_remove( sal_Int32 index, const ::rtl::OUString & headerName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rowData );
+
+ sal_Int32 rowHeight;
+ std::vector< std::vector < ::rtl::OUString > > data;
+ std::vector< ::rtl::OUString > rowHeaders;
+};
+
+}
diff --git a/toolkit/source/controls/grid/gridcolumn.cxx b/toolkit/source/controls/grid/gridcolumn.cxx
new file mode 100644
index 000000000000..8b398b4aed58
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcolumn.cxx
@@ -0,0 +1,166 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: treedatamodel.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include "gridcolumn.hxx"
+#include <comphelper/sequence.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <rtl/ref.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+///////////////////////////////////////////////////////////////////////
+// class GridColumn
+///////////////////////////////////////////////////////////////////////
+
+GridColumn::GridColumn()
+: identifier(Any())
+{
+}
+
+//---------------------------------------------------------------------
+
+GridColumn::~GridColumn()
+{
+}
+
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// XGridColumn
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Any SAL_CALL GridColumn::getIdentifier() throw (::com::sun::star::uno::RuntimeException)
+{
+ return identifier;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ value >>= identifier;
+}
+
+//--------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL GridColumn::getColumnWidth() throw (::com::sun::star::uno::RuntimeException)
+{
+ return columnWidth;
+}
+
+//--------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setColumnWidth(::sal_Int32 value) throw (::com::sun::star::uno::RuntimeException)
+{
+ columnWidth = value;
+}
+
+//--------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL GridColumn::getTitle() throw (::com::sun::star::uno::RuntimeException)
+{
+ return title;
+}
+
+//--------------------------------------------------------------------
+
+void SAL_CALL GridColumn::setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException)
+{
+ title = value;
+}
+
+//---------------------------------------------------------------------
+// XComponent
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::dispose() throw (RuntimeException)
+{
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ (void) xListener;
+}
+
+//---------------------------------------------------------------------
+
+void SAL_CALL GridColumn::removeEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException)
+{
+ (void) xListener;
+}
+
+//---------------------------------------------------------------------
+// XServiceInfo
+//---------------------------------------------------------------------
+
+::rtl::OUString SAL_CALL GridColumn::getImplementationName( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "toolkit.GridColumn" ) );
+ return aImplName;
+}
+
+//---------------------------------------------------------------------
+
+sal_Bool SAL_CALL GridColumn::supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ return ServiceName.equalsAscii( szServiceName_GridColumn );
+}
+
+//---------------------------------------------------------------------
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL GridColumn::getSupportedServiceNames( ) throw (RuntimeException)
+{
+ ::osl::Guard< ::osl::Mutex > aGuard( GetMutex() );
+ static const OUString aServiceName( OUString::createFromAscii( szServiceName_GridColumn ) );
+ static const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+}
+
+Reference< XInterface > SAL_CALL GridColumn_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::GridColumn );
+}
+
diff --git a/toolkit/source/controls/grid/gridcolumn.hxx b/toolkit/source/controls/grid/gridcolumn.hxx
new file mode 100644
index 000000000000..a451054ce93f
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcolumn.hxx
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: griddatamodel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+#include <com/sun/star/awt/grid/XGridColumn.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <rtl/ref.hxx>
+#include <vector>
+#include <toolkit/helper/mutexandbroadcasthelper.hxx>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+
+namespace toolkit
+{
+
+class GridColumn : public ::cppu::WeakImplHelper2< XGridColumn, XServiceInfo >,
+ public MutexAndBroadcastHelper
+{
+public:
+ GridColumn();
+ virtual ~GridColumn();
+
+ // XGridColumn
+ virtual ::com::sun::star::uno::Any SAL_CALL getIdentifier() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setIdentifier(const ::com::sun::star::uno::Any & value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getColumnWidth() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnWidth(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getTitle() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setTitle(const ::rtl::OUString & value) throw (::com::sun::star::uno::RuntimeException);
+
+ // XComponent
+ virtual void SAL_CALL dispose( ) throw (RuntimeException);
+ virtual void SAL_CALL addEventListener( const Reference< XEventListener >& xListener ) throw (RuntimeException);
+ virtual void SAL_CALL removeEventListener( const Reference< XEventListener >& aListener ) throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+
+private:
+ Any identifier;
+ sal_Int32 columnWidth;
+ ::rtl::OUString title;
+};
+
+}
diff --git a/toolkit/source/controls/grid/gridcontrol.cxx b/toolkit/source/controls/grid/gridcontrol.cxx
new file mode 100644
index 000000000000..c642d8a0dcce
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcontrol.cxx
@@ -0,0 +1,273 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: gridcontrol.cxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_toolkit.hxx"
+
+#include <gridcontrol.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/view/SelectionType.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/ScrollBarMode.hpp>
+#include <toolkit/helper/unopropertyarrayhelper.hxx>
+#include <toolkit/helper/property.hxx>
+#include <com/sun/star/awt/XVclWindowPeer.hpp>
+#include <comphelper/processfactory.hxx>
+#include <osl/diagnose.h>
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt::grid;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::view;
+
+namespace toolkit
+{
+// ----------------------------------------------------
+// class UnoGridModel
+// ----------------------------------------------------
+UnoGridModel::UnoGridModel()
+{
+ ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_BORDER );
+ ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
+ ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
+ ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
+ ImplRegisterProperty( BASEPROPERTY_HELPURL );
+ ImplRegisterProperty( BASEPROPERTY_PRINTABLE );
+ ImplRegisterProperty( BASEPROPERTY_SIZEABLE ); // resizeable
+ ImplRegisterProperty( BASEPROPERTY_HSCROLL );
+ ImplRegisterProperty( BASEPROPERTY_VSCROLL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SHOWROWHEADER );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SHOWCOLUMNHEADER );
+ ImplRegisterProperty( BASEPROPERTY_GRID_DATAMODEL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_COLUMNMODEL );
+ ImplRegisterProperty( BASEPROPERTY_GRID_SELECTIONMODE );
+
+}
+
+UnoGridModel::UnoGridModel( const UnoGridModel& rModel )
+: UnoControlModel( rModel )
+{
+}
+
+UnoControlModel* UnoGridModel::Clone() const
+{
+ return new UnoGridModel( *this );
+}
+
+OUString UnoGridModel::getServiceName() throw(RuntimeException)
+{
+ return OUString::createFromAscii( szServiceName_GridControlModel );
+}
+
+Any UnoGridModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
+{
+ switch( nPropId )
+ {
+ case BASEPROPERTY_DEFAULTCONTROL:
+ return uno::makeAny( ::rtl::OUString::createFromAscii( szServiceName_GridControl ) );
+ case BASEPROPERTY_GRID_SELECTIONMODE:
+ return uno::makeAny( SelectionType(1) );
+ default:
+ return UnoControlModel::ImplGetDefaultValue( nPropId );
+ }
+
+}
+
+::cppu::IPropertyArrayHelper& UnoGridModel::getInfoHelper()
+{
+ static UnoPropertyArrayHelper* pHelper = NULL;
+ if ( !pHelper )
+ {
+ Sequence<sal_Int32> aIDs = ImplGetPropertyIds();
+ pHelper = new UnoPropertyArrayHelper( aIDs );
+ }
+ return *pHelper;
+}
+
+// XMultiPropertySet
+Reference< XPropertySetInfo > UnoGridModel::getPropertySetInfo( ) throw(RuntimeException)
+{
+ static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
+ return xInfo;
+}
+
+
+// ----------------------------------------------------
+// class UnoGridControl
+// ----------------------------------------------------
+UnoGridControl::UnoGridControl()
+: mSelectionMode(SelectionType(1))
+{
+}
+
+OUString UnoGridControl::GetComponentServiceName()
+{
+ return OUString::createFromAscii( "Grid" );
+}
+
+void SAL_CALL UnoGridControl::dispose( ) throw(RuntimeException)
+{
+ UnoControl::dispose();
+}
+
+void UnoGridControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer ) throw(uno::RuntimeException)
+{
+ UnoControlBase::createPeer( rxToolkit, rParentPeer );
+
+ Reference< XGridControl > xGrid( getPeer(), UNO_QUERY_THROW );
+
+ Reference<XGridDataListener> xListener ( getPeer(), UNO_QUERY_THROW );
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+
+ Reference<XGridDataModel> xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW );
+ xGridDataModel->addDataListener(xListener);
+}
+
+
+// -------------------------------------------------------------------
+// XGridControl
+// -------------------------------------------------------------------
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL UnoGridControl::getColumnModel() throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ Reference<XGridColumnModel> xGridColumnModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "ColumnModel" )), UNO_QUERY_THROW );
+
+ return xGridColumnModel;
+}
+
+void SAL_CALL UnoGridControl::setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ xPropSet->setPropertyValue(OUString::createFromAscii( "ColumnModel" ), Any (model));
+}
+
+::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL UnoGridControl::getDataModel() throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ Reference<XGridDataModel> xGridDataModel ( xPropSet->getPropertyValue(OUString::createFromAscii( "GridDataModel" )), UNO_QUERY_THROW );
+
+ return xGridDataModel;
+}
+
+void SAL_CALL UnoGridControl::setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference<XPropertySet> xPropSet ( getModel(), UNO_QUERY_THROW );
+ xPropSet->setPropertyValue(OUString::createFromAscii( "GridDataModel" ), Any(model));
+}
+
+::sal_Int32 UnoGridControl::getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getItemIndexAtPoint( x, y );
+}
+
+/*
+void SAL_CALL UnoGridControl::addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addMouseListener( listener );
+}
+
+void SAL_CALL UnoGridControl::removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeMouseListener( listener );
+}
+*/
+// -------------------------------------------------------------------
+// XGridSelection
+// -------------------------------------------------------------------
+
+::sal_Int32 SAL_CALL UnoGridControl::getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMinSelectionIndex();
+}
+
+::sal_Int32 SAL_CALL UnoGridControl::getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getMaxSelectionIndex();
+}
+
+void SAL_CALL UnoGridControl::insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->insertIndexIntervall( start, length);
+}
+
+void SAL_CALL UnoGridControl::removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeIndexIntervall( start, length );
+}
+
+::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL UnoGridControl::getSelection() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
+}
+
+::sal_Bool SAL_CALL UnoGridControl::isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectionEmpty();
+}
+
+::sal_Bool SAL_CALL UnoGridControl::isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException)
+{
+ return Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->isSelectedIndex( index );
+}
+
+void SAL_CALL UnoGridControl::selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->selectRow( y );
+}
+
+void SAL_CALL UnoGridControl::addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->addSelectionListener( listener );
+}
+
+void SAL_CALL UnoGridControl::removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException)
+{
+ Reference< XGridControl >( getPeer(), UNO_QUERY_THROW )->removeSelectionListener( listener );
+}
+}
+
+Reference< XInterface > SAL_CALL GridControl_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridControl );
+}
+
+Reference< XInterface > SAL_CALL GridControlModel_CreateInstance( const Reference< XMultiServiceFactory >& )
+{
+ return Reference < XInterface >( ( ::cppu::OWeakObject* ) new ::toolkit::UnoGridModel );
+}
diff --git a/toolkit/source/controls/grid/gridcontrol.hxx b/toolkit/source/controls/grid/gridcontrol.hxx
new file mode 100644
index 000000000000..5648c812fbff
--- /dev/null
+++ b/toolkit/source/controls/grid/gridcontrol.hxx
@@ -0,0 +1,124 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: gridcontrol.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef TOOLKIT_GRID_CONTROL_HXX
+#define TOOLKIT_GRID_CONTROL_HXX
+
+#include <com/sun/star/awt/grid/XGridControl.hpp>
+#include <com/sun/star/view/SelectionType.hpp>
+#include <toolkit/controls/unocontrols.hxx>
+#include <toolkit/controls/unocontrolmodel.hxx>
+#include <toolkit/helper/servicenames.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+#include <toolkit/helper/listenermultiplexer.hxx>
+
+namespace toolkit {
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::container;
+
+// ===================================================================
+// = UnoGridModel
+// ===================================================================
+class UnoGridModel : public UnoControlModel
+{
+protected:
+ Any ImplGetDefaultValue( sal_uInt16 nPropId ) const;
+ ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
+
+public:
+ UnoGridModel();
+ UnoGridModel( const UnoGridModel& rModel );
+
+ UnoControlModel* Clone() const;
+
+ // ::com::sun::star::beans::XMultiPropertySet
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::io::XPersistObject
+ ::rtl::OUString SAL_CALL getServiceName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ DECLIMPL_SERVICEINFO_DERIVED( UnoGridModel, UnoControlModel, szServiceName_GridControlModel )
+};
+
+
+// ===================================================================
+// = UnoGridControl
+// ===================================================================
+class UnoGridControl : public ::cppu::ImplInheritanceHelper1< UnoControlBase, ::com::sun::star::awt::grid::XGridControl >
+{
+public:
+ UnoGridControl();
+ ::rtl::OUString GetComponentServiceName();
+
+ // ::com::sun::star::lang::XComponent
+ void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::XControl
+ void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& Toolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent ) throw(::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::grid::XGridControl
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > SAL_CALL getColumnModel() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setColumnModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridColumnModel > & model) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > SAL_CALL getDataModel() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setDataModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridDataModel > & model) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getItemIndexAtPoint(::sal_Int32 x, ::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ //virtual void SAL_CALL addMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ //virtual void SAL_CALL removeMouseListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::awt::grid::XGridSelection
+
+ virtual ::sal_Int32 SAL_CALL getMinSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getMaxSelectionIndex() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL insertIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeIndexIntervall(::sal_Int32 start, ::sal_Int32 length) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::sal_Int32 > SAL_CALL getSelection() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectionEmpty() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isSelectedIndex(::sal_Int32 index) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL selectRow(::sal_Int32 y) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL addSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeSelectionListener(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::grid::XGridSelectionListener > & listener) throw (::com::sun::star::uno::RuntimeException);
+
+ // ::com::sun::star::lang::XServiceInfo
+ DECLIMPL_SERVICEINFO_DERIVED( UnoGridControl, UnoControlBase, szServiceName_GridControl )
+
+ using UnoControl::getPeer;
+private:
+ ::com::sun::star::view::SelectionType mSelectionMode;
+};
+
+} // toolkit
+
+#endif // _TOOLKIT_TREE_CONTROL_HXX
diff --git a/toolkit/source/controls/grid/makefile.mk b/toolkit/source/controls/grid/makefile.mk
new file mode 100644
index 000000000000..7c904b3ef02e
--- /dev/null
+++ b/toolkit/source/controls/grid/makefile.mk
@@ -0,0 +1,54 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.3 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=toolkit
+TARGET=grid
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/makefile.pmk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/gridcontrol.obj\
+ $(SLO)$/defaultgriddatamodel.obj\
+ $(SLO)$/defaultgridcolumnmodel.obj\
+ $(SLO)$/gridcolumn.obj
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/toolkit/source/controls/tkspinbutton.cxx b/toolkit/source/controls/tkspinbutton.cxx
index 5c4e47e240dc..138b849a190c 100644
--- a/toolkit/source/controls/tkspinbutton.cxx
+++ b/toolkit/source/controls/tkspinbutton.cxx
@@ -60,6 +60,7 @@ namespace toolkit
ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
ImplRegisterProperty( BASEPROPERTY_ORIENTATION );
diff --git a/toolkit/source/controls/tree/treecontrol.cxx b/toolkit/source/controls/tree/treecontrol.cxx
index 68c3212f5692..2949954bb13c 100644
--- a/toolkit/source/controls/tree/treecontrol.cxx
+++ b/toolkit/source/controls/tree/treecontrol.cxx
@@ -65,6 +65,7 @@ UnoTreeModel::UnoTreeModel()
ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
diff --git a/toolkit/source/controls/unocontrol.cxx b/toolkit/source/controls/unocontrol.cxx
index 92c27e33ead0..0775b6ee74f3 100644
--- a/toolkit/source/controls/unocontrol.cxx
+++ b/toolkit/source/controls/unocontrol.cxx
@@ -1049,7 +1049,13 @@ void UnoControl::draw( sal_Int32 x, sal_Int32 y ) throw(RuntimeException)
}
if ( xDrawPeerView.is() )
+ {
+ Reference< XVclWindowPeer > xWindowPeer;
+ xWindowPeer.set( xDrawPeer, UNO_QUERY );
+ if ( xWindowPeer.is() )
+ xWindowPeer->setDesignMode( mbDesignMode );
xDrawPeerView->draw( x, y );
+ }
if ( bDisposeDrawPeer )
xDrawPeer->dispose();
@@ -1420,7 +1426,6 @@ void UnoControl::setDesignMode( sal_Bool bOn ) throw(RuntimeException)
// remember this
mbDesignMode = bOn;
xWindow = xWindow.query( getPeer() );
-
// dispose our current AccessibleContext, if we have one
// (changing the design mode implies having a new implementation for this context,
// so the old one must be declared DEFUNC)
diff --git a/toolkit/source/controls/unocontrolmodel.cxx b/toolkit/source/controls/unocontrolmodel.cxx
index 0f54a204a010..cc5faa27eec8 100644
--- a/toolkit/source/controls/unocontrolmodel.cxx
+++ b/toolkit/source/controls/unocontrolmodel.cxx
@@ -36,6 +36,7 @@
#include <com/sun/star/awt/FontWidth.hpp>
#include <com/sun/star/awt/FontWeight.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
+#include <com/sun/star/awt/MouseWheelBehavior.hpp>
#include <com/sun/star/graphic/XGraphicProvider.hpp>
#include <com/sun/star/text/WritingMode2.hpp>
#include <com/sun/star/io/XMarkableStream.hpp>
@@ -294,6 +295,7 @@ void UnoControlModel::ImplPropertyChanged( sal_uInt16 )
case BASEPROPERTY_IMAGEALIGN: aDefault <<= (sal_Int16) 1 /*ImageAlign::TOP*/; break;
case BASEPROPERTY_IMAGEPOSITION: aDefault <<= (sal_Int16) 12 /*ImagePosition::Centered*/; break;
case BASEPROPERTY_PUSHBUTTONTYPE: aDefault <<= (sal_Int16) 0 /*PushButtonType::STANDARD*/; break;
+ case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:aDefault <<= (sal_Int16) awt::MouseWheelBehavior::SCROLL_FOCUS_ONLY; break;
case BASEPROPERTY_DATEMAX: aDefault <<= (sal_Int32) Date( 31, 12, 2200 ).GetDate(); break;
case BASEPROPERTY_DATEMIN: aDefault <<= (sal_Int32) Date( 1, 1, 1900 ).GetDate(); break;
@@ -338,13 +340,13 @@ void UnoControlModel::ImplPropertyChanged( sal_uInt16 )
case BASEPROPERTY_HARDLINEBREAKS:
case BASEPROPERTY_NOLABEL: aDefault <<= (sal_Bool) sal_False; break;
- case BASEPROPERTY_WHEELWITHOUTFOCUS:
case BASEPROPERTY_HIDEINACTIVESELECTION:
case BASEPROPERTY_ENFORCE_FORMAT:
case BASEPROPERTY_AUTOCOMPLETE:
case BASEPROPERTY_SCALEIMAGE:
case BASEPROPERTY_ENABLED:
case BASEPROPERTY_PRINTABLE:
+ case BASEPROPERTY_ENABLEVISIBLE:
case BASEPROPERTY_DECORATION: aDefault <<= (sal_Bool) sal_True; break;
case BASEPROPERTY_HELPTEXT:
diff --git a/toolkit/source/controls/unocontrols.cxx b/toolkit/source/controls/unocontrols.cxx
index 771a69c532b9..3abacef7b67f 100644
--- a/toolkit/source/controls/unocontrols.cxx
+++ b/toolkit/source/controls/unocontrols.cxx
@@ -481,6 +481,7 @@ UnoControlFileControlModel::UnoControlFileControlModel()
ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
@@ -1778,6 +1779,7 @@ UnoControlGroupBoxModel::UnoControlGroupBoxModel()
{
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
@@ -3594,6 +3596,7 @@ UnoControlProgressBarModel::UnoControlProgressBarModel()
ImplRegisterProperty( BASEPROPERTY_BORDERCOLOR );
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FILLCOLOR );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
@@ -3723,6 +3726,7 @@ UnoControlFixedLineModel::UnoControlFixedLineModel()
ImplRegisterProperty( BASEPROPERTY_BACKGROUNDCOLOR );
ImplRegisterProperty( BASEPROPERTY_DEFAULTCONTROL );
ImplRegisterProperty( BASEPROPERTY_ENABLED );
+ ImplRegisterProperty( BASEPROPERTY_ENABLEVISIBLE );
ImplRegisterProperty( BASEPROPERTY_FONTDESCRIPTOR );
ImplRegisterProperty( BASEPROPERTY_HELPTEXT );
ImplRegisterProperty( BASEPROPERTY_HELPURL );
diff --git a/toolkit/source/helper/property.cxx b/toolkit/source/helper/property.cxx
index bace3ff94771..e71c03bae47d 100644
--- a/toolkit/source/helper/property.cxx
+++ b/toolkit/source/helper/property.cxx
@@ -48,6 +48,9 @@
#include <com/sun/star/awt/FontStrikeout.hpp>
#include <com/sun/star/awt/FontPitch.hpp>
#include <com/sun/star/awt/tree/XTreeDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridDataModel.hpp>
+#include <com/sun/star/awt/grid/XGridColumnModel.hpp>
+#include <com/sun/star/awt/grid/ScrollBarMode.hpp>
#include <com/sun/star/view/SelectionType.hpp>
#include <com/sun/star/style/VerticalAlignment.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
@@ -252,12 +255,11 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
DECL_PROP_2 ( "ValueStep", VALUESTEP_DOUBLE, double, BOUND, MAYBEDEFAULT ),
DECL_PROP_3 ( "VerticalAlign", VERTICALALIGN, VerticalAlignment, BOUND, MAYBEDEFAULT, MAYBEVOID ),
DECL_DEP_PROP_3 ( "VisibleSize", VISIBLESIZE, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
-
DECL_PROP_2 ( "Activated", ACTIVATED, sal_Bool, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "Complete", COMPLETE, sal_Bool, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "CurrentItemID", CURRENTITEMID, sal_Int16, BOUND, MAYBEDEFAULT ),
- DECL_PROP_2 ( "WheelWithoutFocus", WHEELWITHOUTFOCUS, sal_Bool, BOUND, MAYBEDEFAULT ),
+ DECL_PROP_2 ( "MouseWheelBehavior", MOUSE_WHEEL_BEHAVIOUR, sal_Int16, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "StepTime", STEP_TIME, sal_Int32, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "Decoration", DECORATION, sal_Bool, BOUND, MAYBEDEFAULT ),
@@ -272,7 +274,13 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
DECL_PROP_2 ( "DialogSourceURL", DIALOGSOURCEURL, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "URL", URL, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
DECL_PROP_2 ( "WritingMode", WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT ),
- DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT )
+ DECL_PROP_3 ( "ContextWritingMode", CONTEXT_WRITING_MODE, sal_Int16, BOUND, MAYBEDEFAULT, TRANSIENT ),
+ DECL_PROP_2 ( "ShowRowHeader", GRID_SHOWROWHEADER, sal_Bool, BOUND, MAYBEDEFAULT ),
+ DECL_PROP_2 ( "ShowColumnHeader", GRID_SHOWCOLUMNHEADER, sal_Bool, BOUND, MAYBEDEFAULT ),
+ DECL_PROP_3 ( "GridDataModel", GRID_DATAMODEL, Reference< ::com::sun::star::awt::grid::XGridDataModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "ColumnModel", GRID_COLUMNMODEL, Reference< ::com::sun::star::awt::grid::XGridColumnModel >, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "SelectionModel", GRID_SELECTIONMODE, ::com::sun::star::view::SelectionType, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_2 ( "EnableVisible", ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT )
};
pPropertyInfos = aImplPropertyInfos;
nElements = sizeof( aImplPropertyInfos ) / sizeof( ImplPropertyInfo );
diff --git a/toolkit/source/helper/registerservices.cxx b/toolkit/source/helper/registerservices.cxx
index d9264f22cb51..ea29c9810beb 100644
--- a/toolkit/source/helper/registerservices.cxx
+++ b/toolkit/source/helper/registerservices.cxx
@@ -202,6 +202,12 @@ IMPL_CREATEINSTANCE( UnoThrobberControlModel )
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL TreeControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL MutableTreeDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControl_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridControlModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridDataModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DefaultGridColumnModel_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+extern ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL GridColumn_CreateInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
+
extern sal_Bool SAL_CALL comp_AsyncCallback_component_writeInfo( void * serviceManager, void * registryKey );
extern void * SAL_CALL comp_AsyncCallback_component_getFactory( const char * implName, void * serviceManager, void * registryKey );
@@ -287,6 +293,11 @@ TOOLKIT_DLLPUBLIC sal_Bool SAL_CALL component_writeInfo( void* _pServiceManager,
registerServices( xRegistryKey, "UnoThrobberControl", szServiceName_UnoThrobberControl );
registerServices( xRegistryKey, "UnoFixedHyperlinkControl", szServiceName_UnoControlFixedHyperlink );
registerServices( xRegistryKey, "UnoControlFixedHyperlinkModel", szServiceName_UnoControlFixedHyperlinkModel );
+ registerServices( xRegistryKey, "GridControl", szServiceName_GridControl );
+ registerServices( xRegistryKey, "GridControlModel", szServiceName_GridControlModel );
+ registerServices( xRegistryKey, "DefaultGridDataModel", szServiceName_DefaultGridDataModel );
+ registerServices( xRegistryKey, "DefaultGridColumnModel", szServiceName_DefaultGridColumnModel );
+ registerServices( xRegistryKey, "GridColumn", szServiceName_GridColumn );
comp_AsyncCallback_component_writeInfo( _pServiceManager, _pRegistryKey );
comp_Layout_component_writeInfo( _pServiceManager, _pRegistryKey );
@@ -369,6 +380,12 @@ TOOLKIT_DLLPUBLIC void* SAL_CALL component_getFactory( const sal_Char* sImplemen
CHECKANDCREATEFACTORY( UnoThrobberControl, szServiceName_UnoThrobberControl, NULL )
CHECKANDCREATEFACTORY( UnoFixedHyperlinkControl, szServiceName_UnoControlFixedHyperlink, NULL )
CHECKANDCREATEFACTORY( UnoControlFixedHyperlinkModel, szServiceName_UnoControlFixedHyperlinkModel, NULL )
+ CHECKANDCREATEFACTORY( GridControl, szServiceName_GridControl, NULL );
+ CHECKANDCREATEFACTORY( GridControlModel, szServiceName_GridControlModel, NULL );
+ CHECKANDCREATEFACTORY( DefaultGridDataModel, szServiceName_DefaultGridDataModel, NULL );
+ CHECKANDCREATEFACTORY( DefaultGridColumnModel, szServiceName_DefaultGridColumnModel, NULL );
+ CHECKANDCREATEFACTORY( GridColumn, szServiceName_GridColumn, NULL );
+
if ( rtl_str_compare( sImplementationName, "com.sun.star.awt.comp.AsyncCallback" ) == 0 )
return comp_AsyncCallback_component_getFactory( sImplementationName, _pServiceManager, _pRegistryKey );
diff --git a/toolkit/source/helper/servicenames.cxx b/toolkit/source/helper/servicenames.cxx
index 903f18f95eae..f00e7a2b09fa 100644
--- a/toolkit/source/helper/servicenames.cxx
+++ b/toolkit/source/helper/servicenames.cxx
@@ -101,4 +101,8 @@ const sal_Char __FAR_DATA szServiceName_UnoThrobberControlModel[] = "com.sun.sta
const sal_Char __FAR_DATA szServiceName_UnoThrobberControl[] = "com.sun.star.awt.UnoThrobberControl";
const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlink[] = "com.sun.star.awt.UnoControlFixedHyperlink";
const sal_Char __FAR_DATA szServiceName_UnoControlFixedHyperlinkModel[] = "com.sun.star.awt.UnoControlFixedHyperlinkModel";
-
+const sal_Char __FAR_DATA szServiceName_GridControl[] = "com.sun.star.awt.grid.UnoControlGrid";
+const sal_Char __FAR_DATA szServiceName_GridControlModel[] = "com.sun.star.awt.grid.UnoControlGridModel";
+const sal_Char __FAR_DATA szServiceName_DefaultGridDataModel[] = "com.sun.star.awt.grid.DefaultGridDataModel";
+const sal_Char __FAR_DATA szServiceName_DefaultGridColumnModel[] = "com.sun.star.awt.grid.DefaultGridColumnModel";
+const sal_Char __FAR_DATA szServiceName_GridColumn[] = "com.sun.star.awt.grid.GridColumn";
diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx
index a652d493e653..96b8908558a7 100644
--- a/toolkit/source/helper/unowrapper.cxx
+++ b/toolkit/source/helper/unowrapper.cxx
@@ -65,6 +65,13 @@ using namespace ::com::sun::star;
case WINDOW_OKBUTTON:
case WINDOW_CANCELBUTTON: return new VCLXButton;
case WINDOW_CHECKBOX: return new VCLXCheckBox;
+ // --> OD 2009-06-29 #i95042#
+ // A Window of type <MetricBox> is inherited from type <ComboBox>.
+ // Thus, it does make more sense to return a <VCLXComboBox> instance
+ // instead of only a <VCLXWindow> instance, especially regarding its
+ // corresponding accessibility API.
+ case WINDOW_METRICBOX:
+ // <--
case WINDOW_COMBOBOX: return new VCLXComboBox;
case WINDOW_SPINFIELD:
case WINDOW_NUMERICFIELD:
@@ -109,7 +116,6 @@ using namespace ::com::sun::star;
// case WINDOW_DATEBOX:
// case WINDOW_GROUPBOX:
// case WINDOW_LONGCURRENCYBOX:
- // case WINDOW_METRICBOX:
// case WINDOW_SPLITTER:
// case WINDOW_STATUSBAR:
// case WINDOW_TABCONTROL:
diff --git a/toolkit/source/helper/vclunohelper.cxx b/toolkit/source/helper/vclunohelper.cxx
index d76b56a6a37d..029e520baca6 100644
--- a/toolkit/source/helper/vclunohelper.cxx
+++ b/toolkit/source/helper/vclunohelper.cxx
@@ -736,4 +736,12 @@ com::sun::star::awt::Point VCLUnoHelper::ConvertToAWTPoint(::Point /* VCLPoint *
return aAWTPoint;
}
+::Rectangle VCLUnoHelper::ConvertToVCLRect( ::com::sun::star::awt::Rectangle const & _rRect )
+{
+ return ::Rectangle( _rRect.X, _rRect.Y, _rRect.X + _rRect.Width - 1, _rRect.Y + _rRect.Height - 1 );
+}
+::com::sun::star::awt::Rectangle VCLUnoHelper::ConvertToAWTRect( ::Rectangle const & _rRect )
+{
+ return ::com::sun::star::awt::Rectangle( _rRect.Left(), _rRect.Top(), _rRect.GetWidth(), _rRect.GetHeight() );
+}
diff --git a/toolkit/util/makefile.mk b/toolkit/util/makefile.mk
index d6a1e5f15c65..a04bdcbdf801 100644
--- a/toolkit/util/makefile.mk
+++ b/toolkit/util/makefile.mk
@@ -52,6 +52,7 @@ USE_DEFFILE=TRUE
LIB1TARGET= $(SLB)$/$(TARGET).lib
LIB1FILES= $(SLB)$/awt.lib \
$(SLB)$/tree.lib \
+ $(SLB)$/grid.lib \
$(SLB)$/controls.lib \
$(SLB)$/helper.lib\
$(SLB)$/layout-core.lib \
diff --git a/toolkit/util/toolkit.xml b/toolkit/util/toolkit.xml
index 8ec1a48d440d..2fb4588550bc 100644
--- a/toolkit/util/toolkit.xml
+++ b/toolkit/util/toolkit.xml
@@ -701,4 +701,50 @@
<status value="beta" />
<supported-service>com.sun.star.awt.tree.MutableTreeNode</supported-service>
</component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.UnoGridModel</name>
+ <description>specifies the model of a grid control</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.UnoControlGridModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.UnoGridControl</name>
+ <description>specifies a grid control</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.UnoControlGrid</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.DefaultGridDataModel</name>
+ <description>specifies the grid control default data model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.DefaultGridDataModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.DefaultGridColumnModel</name>
+ <description>specifies the grid control default column model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.DefaultGridColumnModel</supported-service>
+ </component-description>
+ <component-description>
+ <author>Tobias Krause</author>
+ <name>stardiv.Toolkit.GridColumn</name>
+ <description>specifies the grid coloumn model</description>
+ <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+ <language>c++</language>
+ <status value="beta" />
+ <supported-service>com.sun.star.awt.grid.GridColumn</supported-service>
+ </component-description>
+
</module-description> \ No newline at end of file
diff --git a/tools/bootstrp/md5.cxx b/tools/bootstrp/md5.cxx
index bca89725fac2..a234f278cc9d 100644
--- a/tools/bootstrp/md5.cxx
+++ b/tools/bootstrp/md5.cxx
@@ -44,8 +44,62 @@
#define FILE_OPEN_READ "r"
#endif
+// Extended calc_md5_checksum to recognize Windows executables and libraries. To
+// create the same md5 checksum for a (code/data) identical file it ignores a different
+// date and header checksum. Please see crashrep/source/win32/soreport.cpp
+// where the same method is also used. The crash reporter uses the MD5
+// checksums to transfer them to the crash database. You have to make sure that both
+// methods use the same algorithm otherwise there could be problems with stack reports.
+
+void normalize_pe_image(sal_uInt8* buffer, size_t nBufferSize)
+{
+ const int OFFSET_PE_OFFSET = 0x3c;
+ const int OFFSET_COFF_TIMEDATESTAMP = 4;
+ const int PE_SIGNATURE_SIZE = 4;
+ const int COFFHEADER_SIZE = 20;
+ const int OFFSET_PE_OPTIONALHEADER_CHECKSUM = 64;
+
+ // Check the header part of the file buffer
+ if (buffer[0] == sal_uInt8('M') && buffer[1] == sal_uInt8('Z'))
+ {
+ unsigned long PEHeaderOffset = (long)buffer[OFFSET_PE_OFFSET];
+ if (PEHeaderOffset < nBufferSize-4)
+ {
+ if ( buffer[PEHeaderOffset+0] == sal_uInt8('P') &&
+ buffer[PEHeaderOffset+1] == sal_uInt8('E') &&
+ buffer[PEHeaderOffset+2] == 0 &&
+ buffer[PEHeaderOffset+3] == 0 )
+ {
+ PEHeaderOffset += PE_SIGNATURE_SIZE;
+ if (PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP < nBufferSize-4)
+ {
+ // Set timedatestamp and checksum fields to a normalized
+ // value to enforce the same MD5 checksum for identical
+ // Windows executables/libraries.
+ buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+0] = 0;
+ buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+1] = 0;
+ buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+2] = 0;
+ buffer[PEHeaderOffset+OFFSET_COFF_TIMEDATESTAMP+3] = 0;
+ }
+
+ if (PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM < nBufferSize-4)
+ {
+ // Set checksum to a normalized value
+ buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM] = 0;
+ buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+1] = 0;
+ buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+2] = 0;
+ buffer[PEHeaderOffset+COFFHEADER_SIZE+OFFSET_PE_OPTIONALHEADER_CHECKSUM+3] = 0;
+ }
+ }
+ }
+ }
+}
+
rtlDigestError calc_md5_checksum( const char *filename, ByteString &aChecksum )
{
+ const size_t BUFFER_SIZE = 0x1000;
+ const size_t MINIMAL_SIZE = 512;
+
sal_uInt8 checksum[RTL_DIGEST_LENGTH_MD5];
rtlDigestError error = rtl_Digest_E_None;
@@ -58,11 +112,19 @@ rtlDigestError calc_md5_checksum( const char *filename, ByteString &aChecksum )
if ( digest )
{
size_t nBytesRead;
- sal_uInt8 buffer[0x1000];
+ sal_uInt8 buffer[BUFFER_SIZE];
+ bool bHeader(true);
while ( rtl_Digest_E_None == error &&
0 != (nBytesRead = fread( buffer, 1, sizeof(buffer), fp )) )
{
+ if (bHeader)
+ {
+ bHeader = false;
+ if (nBytesRead >= MINIMAL_SIZE && buffer[0] == sal_uInt8('M') && buffer[1] == sal_uInt8('Z') )
+ normalize_pe_image(buffer, nBytesRead);
+ }
+
error = rtl_digest_updateMD5( digest, buffer, nBytesRead );
}
diff --git a/tools/inc/tools/poly.hxx b/tools/inc/tools/poly.hxx
index 606c9c91e879..a77782bc963c 100644
--- a/tools/inc/tools/poly.hxx
+++ b/tools/inc/tools/poly.hxx
@@ -260,7 +260,6 @@ private:
ImplPolyPolygon* mpImplPolyPolygon;
//#if 0 // _SOLAR__PRIVATE
- TOOLS_DLLPRIVATE void *ImplCreateGPCPolygon() const;
TOOLS_DLLPRIVATE void ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const;
TOOLS_DLLPRIVATE void *ImplCreateArtVpath() const;
TOOLS_DLLPRIVATE void ImplSetFromArtVpath( void *pVpath );
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index e3484aee4e2d..2aff0d734bf6 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -1523,8 +1523,15 @@ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef,
else if (pEnd - q >= 2 && q[0] == '\\' && q[1] == '\\')
{
q += 2;
- if (scanDomain(q, pEnd) > 0 && (q == pEnd || *q == '\\'))
+ sal_Int32 n = rtl_ustr_indexOfChar_WithLength(
+ q, pEnd - q, '\\');
+ sal_Unicode const * qe = n == -1 ? pEnd : q + n;
+ if (parseHostOrNetBiosName(
+ q, qe, bOctets, ENCODE_ALL, RTL_TEXTENCODING_DONTKNOW,
+ true, NULL))
+ {
bFSys = true; // 1st
+ }
}
if (bFSys)
{
diff --git a/tools/source/generic/makefile.mk b/tools/source/generic/makefile.mk
index 9562999bd5d7..6340e4daae08 100644
--- a/tools/source/generic/makefile.mk
+++ b/tools/source/generic/makefile.mk
@@ -39,10 +39,6 @@ TARGET=gen
.INCLUDE : settings.mk
.INCLUDE : $(PRJ)$/util$/makefile.pmk
-.IF "$(WITH_GPC)"!="NO"
-CDEFS+=-DHAVE_GPC_H
-.ENDIF
-
# --- Files --------------------------------------------------------
EXCEPTIONSFILES = $(SLO)$/poly.obj $(OBJ)$/poly.obj
diff --git a/tools/source/generic/poly2.cxx b/tools/source/generic/poly2.cxx
index a560c961f481..ff97e6006a41 100644
--- a/tools/source/generic/poly2.cxx
+++ b/tools/source/generic/poly2.cxx
@@ -33,17 +33,10 @@
#define _SV_POLY2_CXX
-extern "C"
-{
-#if defined (HAVE_GPC_H) && !defined (__gpc_h)
-# include <external/gpc/gpc.h>
-#else
-# define GPC_INT 0
-# define GPC_UNION 1
-# define GPC_DIFF 2
-# define GPC_XOR 3
-#endif // HAVE_GPC_H
-}
+#define POLY_CLIP_INT 0
+#define POLY_CLIP_UNION 1
+#define POLY_CLIP_DIFF 2
+#define POLY_CLIP_XOR 3
#include <rtl/math.hxx>
#include <poly.h>
@@ -389,115 +382,34 @@ void PolyPolygon::AdaptiveSubdivide( PolyPolygon& rResult, const double d ) cons
void PolyPolygon::GetIntersection( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_INT );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_INT );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetUnion( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_UNION );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_UNION );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetDifference( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_DIFF );
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_DIFF );
}
// -----------------------------------------------------------------------
void PolyPolygon::GetXOR( const PolyPolygon& rPolyPoly, PolyPolygon& rResult ) const
{
- ImplDoOperation( rPolyPoly, rResult, GPC_XOR );
-}
-
-// -----------------------------------------------------------------------
-
-#ifdef HAVE_GPC_H
-
-void* PolyPolygon::ImplCreateGPCPolygon() const
-{
- gpc_polygon* pRet = new gpc_polygon;
-
- pRet->num_contours = 0;
- pRet->hole = NULL;
- pRet->contour = NULL;
-
- for( USHORT i = 0, nCount = Count(); i < nCount; i++ )
- {
- const Polygon& rPoly = GetObject( i );
- const USHORT nSize = rPoly.GetSize();
-
- if( nSize > 1 )
- {
- gpc_vertex_list aVertexList;
- gpc_vertex* pVertex;
-
- aVertexList.num_vertices = nSize;
- aVertexList.vertex = pVertex = new gpc_vertex[ nSize ];
-
- for( USHORT nPos = 0; nPos < nSize; nPos++, pVertex++ )
- {
- const Point& rPoint = rPoly[ nPos ];
- pVertex->x = rPoint.X();
- pVertex->y = rPoint.Y();
- }
-
- gpc_add_contour( pRet, &aVertexList, 0 );
- delete[] aVertexList.vertex;
- }
- }
-
- return pRet;
+ ImplDoOperation( rPolyPoly, rResult, POLY_CLIP_XOR );
}
// -----------------------------------------------------------------------
void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const
{
- gpc_polygon* pGPCPoly1 = (gpc_polygon*) ImplCreateGPCPolygon();
- gpc_polygon* pGPCPoly2 = (gpc_polygon*) rPolyPoly.ImplCreateGPCPolygon();
- gpc_polygon* pResult = new gpc_polygon;
-
- pResult->num_contours = 0;
- pResult->hole = NULL;
- pResult->contour = NULL;
-
- gpc_polygon_clip( (gpc_op) nOperation, pGPCPoly1, pGPCPoly2, pResult );
-
- rResult.Clear();
-
- for( int i = 0; i < pResult->num_contours; i++ )
- {
- gpc_vertex_list& rVertexList = pResult->contour[ i ];
- Polygon aPoly( ::sal::static_int_cast< USHORT >( rVertexList.num_vertices ) );
-
- for( int j = 0; j < rVertexList.num_vertices; j++ )
- {
- Point& rPt = aPoly[ ::sal::static_int_cast< USHORT >( j ) ];
- rPt.X() = FRound( rVertexList.vertex[ j ].x );
- rPt.Y() = FRound( rVertexList.vertex[ j ].y );
- }
-
- rResult.Insert( aPoly );
- }
-
- gpc_free_polygon( pGPCPoly1 );
- delete pGPCPoly1;
-
- gpc_free_polygon( pGPCPoly2 );
- delete pGPCPoly2;
-
- gpc_free_polygon( pResult );
- delete pResult;
-}
-
-#else
-
-void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rResult, ULONG nOperation ) const
-{
// Convert to B2DPolyPolygon, temporarily. It might be
// advantageous in the future, to have a PolyPolygon adaptor that
// just simulates a B2DPolyPolygon here...
@@ -514,21 +426,21 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
// All code extracted from svx/source/svdraw/svedtv2.cxx
// -----------------------------------------------------
- case GPC_UNION:
+ case POLY_CLIP_UNION:
{
// merge A and B (OR)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationOr(aMergePolyPolygonA, aMergePolyPolygonB);
break;
}
- case GPC_DIFF:
+ case POLY_CLIP_DIFF:
{
// substract B from A (DIFF)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationDiff(aMergePolyPolygonA, aMergePolyPolygonB);
break;
}
- case GPC_XOR:
+ case POLY_CLIP_XOR:
{
// compute XOR between poly A and B
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationXor(aMergePolyPolygonA, aMergePolyPolygonB);
@@ -536,7 +448,7 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
}
default:
- case GPC_INT:
+ case POLY_CLIP_INT:
{
// cut poly 1 against polys 2..n (AND)
aMergePolyPolygonA = basegfx::tools::solvePolygonOperationAnd(aMergePolyPolygonA, aMergePolyPolygonB);
@@ -547,8 +459,6 @@ void PolyPolygon::ImplDoOperation( const PolyPolygon& rPolyPoly, PolyPolygon& rR
rResult = PolyPolygon( aMergePolyPolygonA );
}
-#endif // HAVE_GPC_H
-
// -----------------------------------------------------------------------
USHORT PolyPolygon::Count() const
diff --git a/tools/util/makefile.mk b/tools/util/makefile.mk
index 546ef29a449a..d9ba720543e3 100644
--- a/tools/util/makefile.mk
+++ b/tools/util/makefile.mk
@@ -113,13 +113,6 @@ SHL1IMPLIB= itools
SHL1USE_EXPORTS=name
SHL1STDLIBS+= $(SALLIB) $(VOSLIB) $(BASEGFXLIB) $(I18NISOLANGLIB) $(COMPHELPERLIB)
-.IF "$(WITH_LIBART)"=="YES"
-SHL1STDLIBS+= $(LIBART_LIBS)
-.ELSE
-SHL1STDLIBS+= $(GPC3RDLIB)
-.ENDIF
-
-
.IF "$(GUI)"=="WNT"
SHL1STDLIBS+= $(SHELL32LIB) \
$(MPRLIB) \
diff --git a/tools/workben/solar.c b/tools/workben/solar.c
index 91460614fe9b..05e9c103b8b4 100644
--- a/tools/workben/solar.c
+++ b/tools/workben/solar.c
@@ -352,6 +352,8 @@ void Description_Print( struct Description* pThis, char* name )
fprintf( f, "#define __SIZEOFDOUBLE\t%d\n", sizeof( double ) );
fprintf( f, "#define __IEEEDOUBLE\n" );
fprintf( f, "#define _SOLAR_NODESCRIPTION\n" );
+
+ fclose(f);
}
int
diff --git a/tools/workben/urltest.cxx b/tools/workben/urltest.cxx
index 542297eb4bd6..a232f8ebdd93 100644
--- a/tools/workben/urltest.cxx
+++ b/tools/workben/urltest.cxx
@@ -799,6 +799,25 @@ main()
bSuccess = false;
}
}
+ {
+ bool bWasAbsolute;
+ if (!rtl::OUString(INetURLObject(rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "file:///"))).
+ smartRel2Abs(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "\\\\unc_host\\path")),
+ bWasAbsolute).
+ GetMainURL(INetURLObject::NO_DECODE)).
+ equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("file://unc_host/path"))
+ || !bWasAbsolute)
+ {
+ printf("BAD smartRel2Abs(\"\\\\unc_host\\path\")\n");
+ bSuccess = false;
+ }
+ }
}
if (true)
diff --git a/transex3/scripts/localize b/transex3/scripts/localize
deleted file mode 100755
index 74a75ecc3aee..000000000000
--- a/transex3/scripts/localize
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-if [ x${SOLARENV}x = xx ]; then
- echo No environment found, please use 'setsolar'
-exit 1
-fi
-
-# localize.pl calls localize_sl in solver bin directory which depends on dynamic
-# libraries in solver lib directory but has no correct RPATH (or equivalent):
-if [ "${OS?}" = MACOSX ]; then
- export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH+${DYLD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT}
-else
- export LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT}
-fi
-
-if [ x${SOLARVER}x = xx -o x${UPDMINOR}x = xx ]; then
- exec perl -w $SOLARVERSION/$INPATH/bin/localize.pl "$@"
-else
- exec perl -w $SOLARVERSION/$INPATH/bin.$UPDMINOR/localize.pl "$@"
-fi
-
diff --git a/transex3/scripts/localize.pl b/transex3/scripts/localize.pl
index 8d09b567b77b..10e8124027b1 100755
--- a/transex3/scripts/localize.pl
+++ b/transex3/scripts/localize.pl
@@ -103,6 +103,16 @@ if ( defined $ENV{USE_SHELL} && $ENV{USE_SHELL} eq '4nt' ) {
$DELIMITER = "/";
}
+my $binpath = '';
+if( defined $ENV{UPDMINOREXT} )
+{
+ $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$ENV{UPDMINOREXT}.$DELIMITER ;
+}
+else
+{
+ $binpath = $ENV{SOLARVER}.$DELIMITER.$ENV{INPATH}.$DELIMITER."bin".$DELIMITER ;
+}
+
#%sl_modules = fetch_sourcelanguage_dirlist();
@@ -494,11 +504,11 @@ sub collectfiles{
my $args = "";
if( $ENV{WRAPCMD} ){
- $command = "$ENV{WRAPCMD} localize_sl";
+ $command = $ENV{WRAPCMD}.$binpath."localize_sl";
}else{
- $command = "localize_sl";
+ $command = $binpath."localize_sl";
}
-
+ print $command;
# -e
# if ( -x $command ){
if( $command ){
diff --git a/transex3/source/localize.cxx b/transex3/source/localize.cxx
index 2f19f727b517..bcd45d7027a4 100644
--- a/transex3/source/localize.cxx
+++ b/transex3/source/localize.cxx
@@ -283,6 +283,7 @@ void SourceTreeLocalizer::WorkOnFile(
const ByteString &rParameter, const ByteString &rIso )
/*****************************************************************************/
{
+ (void) rIso; // Remove me ;)
String sFull( rFileName, RTL_TEXTENCODING_ASCII_US );
DirEntry aEntry( sFull );
ByteString sFileName( aEntry.GetName(), RTL_TEXTENCODING_ASCII_US );
@@ -324,36 +325,23 @@ void SourceTreeLocalizer::WorkOnFile(
sExecutable += rExecutable ;
-#if defined(WNT) || defined(OS2)
- sExecutable += ".exe";
- String sPath( Export::GetEnv( "PATH" ), RTL_TEXTENCODING_ASCII_US );
-#else
- String sPath( Export::GetEnv( "LD_LIBRARY_PATH" ), RTL_TEXTENCODING_ASCII_US );
-#endif
+ ByteString sCommand( sExecutable );
+ sCommand += " ";
+ sCommand += rParameter;
+ sCommand += " -p ";
+ sCommand += sPrj;
+ sCommand += " -r ";
+ sCommand += sRoot;
+ sCommand += " -i ";
+ sCommand += sFileName;
+ sCommand += " -o ";
+ sCommand += sTempFile;
+ if ( sLanguageRestriction.Len()) {
+ sCommand += " -l ";
+ sCommand += getSourceLanguages( sLanguageRestriction , sCommand );
+ }
- DirEntry aExecutable( String( sExecutable, RTL_TEXTENCODING_ASCII_US ));
- aExecutable.Find( sPath );
-
- ByteString sCommand( aExecutable.GetFull(), RTL_TEXTENCODING_ASCII_US );
- sCommand += " ";
- sCommand += rParameter;
- sCommand += " -p ";
- sCommand += sPrj;
- sCommand += " -r ";
- sCommand += sRoot;
- sCommand += " -i ";
- sCommand += sFileName;
- sCommand += " -o ";
- sCommand += sTempFile;
- if ( sLanguageRestriction.Len()) {
- sCommand += " -l ";
- sCommand += getSourceLanguages( sLanguageRestriction , sCommand );
- }
- if ( rIso.Equals("iso") && sIsoCode99.Len()) {
- sCommand += " -ISO99 ";
- sCommand += sIsoCode99;
- }
- if( bQuiet2 ){
+ if( bQuiet2 ){
sCommand +=" -QQ ";
}
//printf("DBG: %s\n",sCommand.GetBuffer());
diff --git a/unotools/inc/unotools/confignode.hxx b/unotools/inc/unotools/confignode.hxx
index a50025a6ab50..580274004e1a 100644
--- a/unotools/inc/unotools/confignode.hxx
+++ b/unotools/inc/unotools/confignode.hxx
@@ -86,7 +86,7 @@ namespace utl
const OConfigurationNode& operator=(const OConfigurationNode& _rSource);
/// dtor
- ~OConfigurationNode();
+ ~OConfigurationNode() {}
/** open a sub node
@param _rPath access path of the to-be-opened sub node. May be a hierarchical path.
diff --git a/unotools/source/config/confignode.cxx b/unotools/source/config/confignode.cxx
index 56d0b1b06118..4b1b9fe272db 100644
--- a/unotools/source/config/confignode.cxx
+++ b/unotools/source/config/confignode.cxx
@@ -130,11 +130,6 @@ namespace utl
}
//------------------------------------------------------------------------
- OConfigurationNode::~OConfigurationNode()
- {
- }
-
- //------------------------------------------------------------------------
void OConfigurationNode::_disposing( const EventObject& _rSource )
{
Reference< XComponent > xDisposingSource(_rSource.Source, UNO_QUERY);
diff --git a/vcl/aqua/inc/salframeview.h b/vcl/aqua/inc/salframeview.h
index e969cc8509a1..7fd4d96c4a45 100755
--- a/vcl/aqua/inc/salframeview.h
+++ b/vcl/aqua/inc/salframeview.h
@@ -108,6 +108,7 @@
-(void)sendMouseEventToFrame:(NSEvent*)pEvent button:(USHORT)nButton eventtype:(USHORT)nEvent;
-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar;
-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod;
+-(MacOSBOOL)sendKeyToFrameDirect: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod;
-(MacOSBOOL)sendSingleCharacter:(NSEvent*)pEvent;
-(MacOSBOOL)handleKeyDownException:(NSEvent*)pEvent;
/*
diff --git a/vcl/aqua/inc/vclnsapp.h b/vcl/aqua/inc/vclnsapp.h
index a5c339c238bd..fc637ff75a31 100755
--- a/vcl/aqua/inc/vclnsapp.h
+++ b/vcl/aqua/inc/vclnsapp.h
@@ -59,7 +59,6 @@
-(void)scrollbarSettingsChanged: (NSNotification*) pNotification;
-(void)addFallbackMenuItem: (NSMenuItem*)pNewItem;
-(void)removeFallbackMenuItem: (NSMenuItem*)pOldItem;
--(void)getSystemVersionMajor:(unsigned *)major minor:(unsigned *)minor bugFix:(unsigned *)bugFix;
-(void)addDockMenuItem: (NSMenuItem*)pNewItem;
-(void)applicationWillBecomeActive: (NSNotification *)pNotification;
-(void)applicationWillResignActive: (NSNotification *)pNotification;
diff --git a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm
index 53472e6ae34d..e521e7362323 100644
--- a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm
+++ b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm
@@ -249,6 +249,8 @@ using namespace ::rtl;
// empty
} catch ( IndexOutOfBoundsException & e ) {
// empty
+ } catch ( RuntimeException& ) {
+ // at least don't crash
}
return string;
}
diff --git a/vcl/aqua/source/a11y/aqua11yutil.mm b/vcl/aqua/source/a11y/aqua11yutil.mm
index 6d12fbee7a91..44f95169ca68 100644
--- a/vcl/aqua/source/a11y/aqua11yutil.mm
+++ b/vcl/aqua/source/a11y/aqua11yutil.mm
@@ -51,7 +51,7 @@ using namespace ::com::sun::star::awt;
+(Point)nsPointToVclPoint:(NSValue *)nsPoint {
// VCL coordinates are in upper-left-notation, Cocoa likes it the Cartesian way (lower-left)
NSRect screenRect = [ [ NSScreen mainScreen ] frame ];
- return Point ( [ nsPoint pointValue ].x, screenRect.size.height - [ nsPoint pointValue ].y );
+ return Point ( static_cast<long>([ nsPoint pointValue ].x), static_cast<long>(screenRect.size.height - [ nsPoint pointValue ].y) );
}
@end
diff --git a/vcl/aqua/source/a11y/aqua11ywrapper.mm b/vcl/aqua/source/a11y/aqua11ywrapper.mm
index d6f99c7020d6..99bcbd20f698 100644
--- a/vcl/aqua/source/a11y/aqua11ywrapper.mm
+++ b/vcl/aqua/source/a11y/aqua11ywrapper.mm
@@ -728,9 +728,15 @@ static MacOSBOOL isPopupMenuOpen = NO;
if ( nativeSubrole != nil && ! [ nativeSubrole isEqualToString: @"" ] ) {
[ attributeNames addObject: NSAccessibilitySubroleAttribute ];
}
+ try
+ {
if ( [ self accessibleContext ] -> getAccessibleChildCount() > 0 ) {
[ attributeNames addObject: NSAccessibilityChildrenAttribute ];
}
+ }
+ catch( DisposedException& ) {}
+ catch( RuntimeException& ) {}
+
if ( title != nil && ! [ title isEqualToString: @"" ] ) {
[ attributeNames addObject: NSAccessibilityTitleAttribute ];
}
@@ -986,7 +992,7 @@ Reference < XAccessibleContext > hitTestRunner ( Point point, Reference < XAcces
}
Reference < XAccessibleContext > hitChild;
NSRect screenRect = [ [ NSScreen mainScreen ] frame ];
- Point hitPoint ( point.x , screenRect.size.height - point.y );
+ Point hitPoint ( static_cast<long>(point.x) , static_cast<long>(screenRect.size.height - point.y) );
// check child windows first
NSWindow * window = (NSWindow *) [ self accessibilityAttributeValue: NSAccessibilityWindowAttribute ];
NSArray * childWindows = [ window childWindows ];
diff --git a/vcl/aqua/source/app/saldata.cxx b/vcl/aqua/source/app/saldata.cxx
index a70854306122..180f6a106459 100644
--- a/vcl/aqua/source/app/saldata.cxx
+++ b/vcl/aqua/source/app/saldata.cxx
@@ -93,7 +93,7 @@ SalData::~SalData()
}
osl_destroyThreadKey( s_aAutoReleaseKey );
- s_aAutoReleaseKey = NULL;
+ s_aAutoReleaseKey = 0;
}
if ( mpMainController )
[mpMainController release];
diff --git a/vcl/aqua/source/app/salinst.cxx b/vcl/aqua/source/app/salinst.cxx
index b9d66d1e02d3..71bfb7953187 100644
--- a/vcl/aqua/source/app/salinst.cxx
+++ b/vcl/aqua/source/app/salinst.cxx
@@ -140,10 +140,6 @@ bool AquaSalInstance::isOnCommandLine( const rtl::OUString& rArg )
// returns an NSAutoreleasePool that must be released when the event loop begins
static void initNSApp()
{
- SInt32 major = NULL;
- SInt32 minor = NULL;
- SInt32 bugFix = NULL;
-
// create our cocoa NSApplication
[VCL_NSApplication sharedApplication];
@@ -176,7 +172,17 @@ static void initNSApp()
object: nil ];
// get System Version and store the value in GetSalData()->mnSystemVersion
- [NSApp getSystemVersionMajor: (unsigned int *)major minor:(unsigned int *)minor bugFix:(unsigned int *)bugFix ];
+ OSErr err = noErr;
+ SInt32 systemVersion = VER_TIGER; // Initialize with minimal requirement
+ if( (err = Gestalt(gestaltSystemVersion, &systemVersion)) == noErr )
+ {
+ GetSalData()->mnSystemVersion = systemVersion;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "System Version %x\n", (unsigned int)systemVersion);
+#endif
+ }
+ else
+ NSLog(@"Unable to obtain system version: %ld", (long)err);
// Initialize Apple Remote
GetSalData()->mpMainController = [[MainController alloc] init];
diff --git a/vcl/aqua/source/app/salsys.cxx b/vcl/aqua/source/app/salsys.cxx
index 28acb47ccade..78b5defe6dd9 100644
--- a/vcl/aqua/source/app/salsys.cxx
+++ b/vcl/aqua/source/app/salsys.cxx
@@ -75,8 +75,8 @@ Rectangle AquaSalSystem::GetDisplayScreenPosSizePixel( unsigned int nScreen )
if( pScreen )
{
NSRect aFrame = [pScreen frame];
- aRet = Rectangle( Point( aFrame.origin.x, aFrame.origin.y ),
- Size( aFrame.size.width, aFrame.size.height ) );
+ aRet = Rectangle( Point( static_cast<long int>(aFrame.origin.x), static_cast<long int>(aFrame.origin.y) ),
+ Size( static_cast<long int>(aFrame.size.width), static_cast<long int>(aFrame.size.height) ) );
}
return aRet;
}
@@ -94,8 +94,8 @@ Rectangle AquaSalSystem::GetDisplayWorkAreaPosSizePixel( unsigned int nScreen )
if( pScreen )
{
NSRect aFrame = [pScreen visibleFrame];
- aRet = Rectangle( Point( aFrame.origin.x, aFrame.origin.y ),
- Size( aFrame.size.width, aFrame.size.height ) );
+ aRet = Rectangle( Point( static_cast<long int>(aFrame.origin.x), static_cast<long int>(aFrame.origin.y) ),
+ Size( static_cast<long int>(aFrame.size.width), static_cast<long int>(aFrame.size.height) ) );
}
return aRet;
}
diff --git a/vcl/aqua/source/app/vclnsapp.mm b/vcl/aqua/source/app/vclnsapp.mm
index 4ad5e7ff9271..43d44c709c12 100755
--- a/vcl/aqua/source/app/vclnsapp.mm
+++ b/vcl/aqua/source/app/vclnsapp.mm
@@ -105,44 +105,33 @@
}
}
- /* #i89611#
- Cmd-Option-Space is for some reason not consumed by the menubar,
- but also not by the input method (like e.g. Cmd-Space) and stays
- without function.
-
- However MOD1 + MOD2 combinations are not used throughout OOo code
- since they tend to clash with system shortcuts on all platforms so
- we can skip this case here.
- */
// get information whether the event was handled; keyDown returns nothing
GetSalData()->maKeyEventAnswer[ pEvent ] = false;
bool bHandled = false;
- if( nModMask != (NSCommandKeyMask | NSAlternateKeyMask) )
+ // dispatch to view directly to avoid the key event being consumed by the menubar
+ // popup windows do not get the focus, so they don't get these either
+ // simplest would be dispatch this to the key window always if it is without parent
+ // however e.g. in document we want the menu shortcut if e.g. the stylist has focus
+ if( pFrame->mpParent && (pFrame->mnStyle & SAL_FRAME_STYLE_FLOAT) == 0 )
{
- // dispatch to view directly to avoid the key event being consumed by the menubar
- // popup windows do not get the focus, so they don't get these either
- // simplest would be dispatch this to the key window always if it is without parent
- // however e.g. in document we want the menu shortcut if e.g. the stylist has focus
- if( pFrame->mpParent && (pFrame->mnStyle & SAL_FRAME_STYLE_FLOAT) == 0 )
- {
- [[pKeyWin contentView] keyDown: pEvent];
- bHandled = GetSalData()->maKeyEventAnswer[ pEvent ];
- }
-
- // see whether the main menu consumes this event
- // if not, we want to dispatch it ourselves. Unless we do this "trick"
- // the main menu just beeps for an unknown or disabled key equivalent
- // and swallows the event wholesale
- NSMenu* pMainMenu = [NSApp mainMenu];
- if( ! bHandled && (pMainMenu == 0 || ! [pMainMenu performKeyEquivalent: pEvent]) )
- {
- [[pKeyWin contentView] keyDown: pEvent];
- bHandled = GetSalData()->maKeyEventAnswer[ pEvent ];
- }
- else
- bHandled = true; // event handled already or main menu just handled it
+ [[pKeyWin contentView] keyDown: pEvent];
+ bHandled = GetSalData()->maKeyEventAnswer[ pEvent ];
+ }
+
+ // see whether the main menu consumes this event
+ // if not, we want to dispatch it ourselves. Unless we do this "trick"
+ // the main menu just beeps for an unknown or disabled key equivalent
+ // and swallows the event wholesale
+ NSMenu* pMainMenu = [NSApp mainMenu];
+ if( ! bHandled && (pMainMenu == 0 || ! [pMainMenu performKeyEquivalent: pEvent]) )
+ {
+ [[pKeyWin contentView] keyDown: pEvent];
+ bHandled = GetSalData()->maKeyEventAnswer[ pEvent ];
}
+ else
+ bHandled = true; // event handled already or main menu just handled it
+
GetSalData()->maKeyEventAnswer.erase( pEvent );
if( bHandled )
return;
@@ -374,26 +363,6 @@
AquaSalMenu::removeFallbackMenuItem( pItem );
}
-- (void)getSystemVersionMajor:(unsigned *)major
- minor:(unsigned *)minor
- bugFix:(unsigned *)bugFix
-{
- OSErr err;
- SInt32 systemVersion = VER_TIGER; // Initialize with minimal requirement
- if ((err = Gestalt(gestaltSystemVersion, &systemVersion)) == noErr)
- {
- GetSalData()->mnSystemVersion = systemVersion;
-#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "System Version %x\n", (unsigned int)systemVersion);
- fprintf( stderr, "Stored System Version %x\n", (unsigned int)GetSalData()->mnSystemVersion);
-#endif
- }
- else
- NSLog(@"Unable to obtain system version: %ld", (long)err);
-
- return;
-}
-
-(void)addDockMenuItem: (NSMenuItem*)pNewItem
{
NSMenu* pDock = AquaSalInstance::GetDynamicDockMenu();
diff --git a/vcl/aqua/source/gdi/aquaprintview.mm b/vcl/aqua/source/gdi/aquaprintview.mm
index 6099fbaed741..ba139da5f5a4 100755
--- a/vcl/aqua/source/gdi/aquaprintview.mm
+++ b/vcl/aqua/source/gdi/aquaprintview.mm
@@ -58,6 +58,9 @@
{
NSSize aPaperSize = [mpInfoPrinter->getPrintInfo() paperSize];
int nWidth = (int)aPaperSize.width;
+ // #i101108# sanity check
+ if( nWidth < 1 )
+ nWidth = 1;
NSRect aRect = { { page % nWidth, page / nWidth }, aPaperSize };
return aRect;
}
@@ -71,7 +74,7 @@
-(void)drawRect: (NSRect)rect
{
NSPoint aPoint = [self locationOfPrintRect: rect];
- mpInfoPrinter->setStartPageOffset( rect.origin.x, rect.origin.y );
+ mpInfoPrinter->setStartPageOffset( static_cast<int>(rect.origin.x), static_cast<int>(rect.origin.y) );
NSSize aPaperSize = [mpInfoPrinter->getPrintInfo() paperSize];
int nPage = (int)(aPaperSize.width * rect.origin.y + rect.origin.x);
diff --git a/vcl/aqua/source/gdi/salatslayout.cxx b/vcl/aqua/source/gdi/salatslayout.cxx
index 98700feba39d..7ecef01cf0d5 100755
--- a/vcl/aqua/source/gdi/salatslayout.cxx
+++ b/vcl/aqua/source/gdi/salatslayout.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salatslayout.cxx,v $
- * $Revision: 1.12 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -431,8 +428,8 @@ void ATSLayout::DrawText( SalGraphics& rGraphics ) const
if( rAquaGraphics.mnATSUIRotation != 0 )
{
const double fRadians = rAquaGraphics.mnATSUIRotation * (M_PI/0xB40000);
- nXOfsFixed = +rSubPortion.mnXOffset * cos( fRadians );
- nYOfsFixed = +rSubPortion.mnXOffset * sin( fRadians );
+ nXOfsFixed = static_cast<Fixed>(static_cast<double>(+rSubPortion.mnXOffset) * cos( fRadians ));
+ nYOfsFixed = static_cast<Fixed>(static_cast<double>(+rSubPortion.mnXOffset) * sin( fRadians ));
}
// draw sub-portions
@@ -745,6 +742,8 @@ int ATSLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) cons
// get a quick overview on what could fit
const long nPixelWidth = (nMaxWidth - (nCharExtra * mnCharCount)) / nFactor;
+ if( nPixelWidth <= 0 )
+ return mnMinCharPos;
// check assumptions
DBG_ASSERT( !mnTrailingSpaceWidth, "ATSLayout::GetTextBreak() with nTSW!=0" );
diff --git a/vcl/aqua/source/gdi/salatsuifontutils.cxx b/vcl/aqua/source/gdi/salatsuifontutils.cxx
index 595b7d276a2a..8e38981a3c7c 100644
--- a/vcl/aqua/source/gdi/salatsuifontutils.cxx
+++ b/vcl/aqua/source/gdi/salatsuifontutils.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salatsuifontutils.cxx,v $
- * $Revision: 1.13.138.6 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -210,12 +207,8 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
rDFA.meItalic = ITALIC_NONE;
rDFA.mbSymbolFlag = false;
- // get the embeddable + subsettable status
- // TODO: remove test after PS-OpenType subsetting is implemented
- ATSFontRef rATSFontRef = FMGetATSFontRefFromFont( nFontID );
- ByteCount nGlyfLen = 0;
- OSStatus rc = ATSFontGetTable( rATSFontRef, 0x676c7966/*glyf*/, 0, 0, NULL, &nGlyfLen);
- rDFA.mbSubsettable = ((rc == noErr) && (nGlyfLen > 0));
+ // all scalable fonts on this platform are subsettable
+ rDFA.mbSubsettable = true;
rDFA.mbEmbeddable = false;
// TODO: these members are needed only for our X11 platform targets
rDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
@@ -223,7 +216,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
// prepare iterating over all name strings of the font
ItemCount nFontNameCount = 0;
- rc = ATSUCountFontNames( nFontID, &nFontNameCount );
+ OSStatus rc = ATSUCountFontNames( nFontID, &nFontNameCount );
if( rc != noErr )
return false;
int nBestNameValue = 0;
@@ -269,7 +262,7 @@ static bool GetDevFontAttributes( ATSUFontID nFontID, ImplDevFontAttributes& rDF
case 0x30A: nNameValue += 0; // Win-UCS-4
eEncoding = RTL_TEXTENCODING_UCS4;
break;
- case 0x100: nNameValue += 21; // Mac Roman
+ case 0x100: nNameValue += 21; // Mac Roman
eEncoding = RTL_TEXTENCODING_APPLE_ROMAN;
break;
case 0x300: nNameValue = 0; // Win Symbol encoded name!
diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx
index 3ee54afe2fba..e0905fe1d377 100644
--- a/vcl/aqua/source/gdi/salgdi.cxx
+++ b/vcl/aqua/source/gdi/salgdi.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi.cxx,v $
- * $Revision: 1.81.14.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -40,6 +37,7 @@
#include "salatsuifontutils.hxx"
#include "vcl/impfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/sysdata.hxx"
#include "vcl/sallayout.hxx"
#include "vcl/svapp.hxx"
@@ -153,7 +151,7 @@ ImplFontCharMap* ImplMacFontData::GetImplFontCharMap() const
if( !ParseCMAP( &aBuffer[0], nRawLength, aCmapResult ) )
return mpCharMap;
- mpCharMap = new ImplFontCharMap( aCmapResult.mnPairCount, aCmapResult.mpPairCodes, aCmapResult.mpStartGlyphs );
+ mpCharMap = new ImplFontCharMap( aCmapResult );
return mpCharMap;
}
@@ -175,8 +173,7 @@ void ImplMacFontData::ReadOs2Table( void ) const
return;
// allocate a buffer for the OS/2 raw data
- ByteVector aBuffer;
- aBuffer.resize( nBufSize );
+ ByteVector aBuffer( nBufSize );
// get the OS/2 raw data
ByteCount nRawLength = 0;
@@ -215,8 +212,7 @@ void ImplMacFontData::ReadMacCmapEncoding( void ) const
if( eStatus != noErr )
return;
- ByteVector aBuffer;
- aBuffer.resize( nBufSize );
+ ByteVector aBuffer( nBufSize );
ByteCount nRawLength = 0;
eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
@@ -974,6 +970,11 @@ bool AquaSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon& rPolyLine,
if( rLineWidths.getX() != rLineWidths.getY() )
return false;
+ // #i101491# Aqua does not support B2DLINEJOIN_NONE; return false to use
+ // the fallback (own geometry preparation)
+ if(basegfx::B2DLINEJOIN_NONE == eLineJoin)
+ return false;
+
// setup line attributes
CGLineJoin aCGLineJoin = kCGLineJoinMiter;
switch( eLineJoin ) {
@@ -1985,15 +1986,30 @@ static void FakeDirEntry( FourCharCode eFCC, ByteCount nOfs, ByteCount nLen,
}
static bool GetRawFontData( const ImplFontData* pFontData,
- ByteVector& rBuffer )
+ ByteVector& rBuffer, bool* pJustCFF )
{
const ImplMacFontData* pMacFont = static_cast<const ImplMacFontData*>(pFontData);
const ATSUFontID nFontId = static_cast<ATSUFontID>(pMacFont->GetFontId());
ATSFontRef rFont = FMGetATSFontRefFromFont( nFontId );
+ ByteCount nCffLen = 0;
+ OSStatus eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, 0, NULL, &nCffLen);
+ if( pJustCFF != NULL )
+ {
+ *pJustCFF = (eStatus == noErr) && (nCffLen > 0);
+ if( *pJustCFF )
+ {
+ rBuffer.resize( nCffLen );
+ eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[0], &nCffLen);
+ if( (eStatus != noErr) || (nCffLen <= 0) )
+ return false;
+ return true;
+ }
+ }
+
// get font table availability and size in bytes
ByteCount nHeadLen = 0;
- OSStatus eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen);
+ eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen);
if( (eStatus != noErr) || (nHeadLen <= 0) )
return false;
ByteCount nMaxpLen = 0;
@@ -2004,14 +2020,6 @@ static bool GetRawFontData( const ImplFontData* pFontData,
eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nCmapLen);
if( (eStatus != noErr) || (nCmapLen <= 0) )
return false;
- ByteCount nLocaLen = 0;
- eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen);
- if( (eStatus != noErr) || (nLocaLen <= 0) )
- return false;
- ByteCount nGlyfLen = 0;
- eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen);
- if( (eStatus != noErr) || (nGlyfLen <= 0) )
- return false;
ByteCount nNameLen = 0;
eStatus = ATSFontGetTable( rFont, GetTag("name"), 0, 0, NULL, &nNameLen);
if( (eStatus != noErr) || (nNameLen <= 0) )
@@ -2025,8 +2033,21 @@ static bool GetRawFontData( const ImplFontData* pFontData,
if( (eStatus != noErr) || (nHmtxLen <= 0) )
return false;
+ // get the glyph outline tables
+ ByteCount nLocaLen = 0;
+ ByteCount nGlyfLen = 0;
+ if( (eStatus != noErr) || (nCffLen <= 0) )
+ {
+ eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen);
+ if( (eStatus != noErr) || (nLocaLen <= 0) )
+ return false;
+ eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen);
+ if( (eStatus != noErr) || (nGlyfLen <= 0) )
+ return false;
+ }
+
ByteCount nPrepLen=0, nCvtLen=0, nFpgmLen=0;
- if( 1 ) // TODO: reduce PDF size by making hint subsetting optional
+ if( nGlyfLen ) // TODO: reduce PDF size by making hint subsetting optional
{
eStatus = ATSFontGetTable( rFont, GetTag("prep"), 0, 0, NULL, &nPrepLen);
eStatus = ATSFontGetTable( rFont, GetTag("cvt "), 0, 0, NULL, &nCvtLen);
@@ -2034,11 +2055,15 @@ static bool GetRawFontData( const ImplFontData* pFontData,
}
// prepare a byte buffer for a fake font
- int nTableCount = 8;
- nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0);
+ int nTableCount = 7;
+ nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0) + (nGlyfLen>0);
const ByteCount nFdirLen = 12 + 16*nTableCount;
ByteCount nTotalLen = nFdirLen;
- nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen + nLocaLen + nGlyfLen;
+ nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen;
+ if( nGlyfLen )
+ nTotalLen += nLocaLen + nGlyfLen;
+ else
+ nTotalLen += nCffLen;
nTotalLen += nHheaLen + nHmtxLen;
nTotalLen += nPrepLen + nCvtLen + nFpgmLen;
rBuffer.resize( nTotalLen );
@@ -2071,9 +2096,18 @@ static bool GetRawFontData( const ImplFontData* pFontData,
FakeDirEntry( GetTag("fpgm"), nOfs, nFpgmLen, &rBuffer[0], pFakeEntry );
nOfs += nFpgmLen;
}
- eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen);
- FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry );
- nOfs += nGlyfLen;
+ if( nCffLen ) {
+ eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[nOfs], &nCffLen);
+ FakeDirEntry( GetTag("CFF "), nOfs, nCffLen, &rBuffer[0], pFakeEntry );
+ nOfs += nGlyfLen;
+ } else {
+ eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen);
+ FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry );
+ nOfs += nGlyfLen;
+ eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen);
+ FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry );
+ nOfs += nLocaLen;
+ }
eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, nHeadLen, (void*)&rBuffer[nOfs], &nHeadLen);
FakeDirEntry( GetTag("head"), nOfs, nHeadLen, &rBuffer[0], pFakeEntry );
nOfs += nHeadLen;
@@ -2083,9 +2117,6 @@ static bool GetRawFontData( const ImplFontData* pFontData,
eStatus = ATSFontGetTable( rFont, GetTag("hmtx"), 0, nHmtxLen, (void*)&rBuffer[nOfs], &nHmtxLen);
FakeDirEntry( GetTag("hmtx"), nOfs, nHmtxLen, &rBuffer[0], pFakeEntry );
nOfs += nHmtxLen;
- eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen);
- FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry );
- nOfs += nLocaLen;
eStatus = ATSFontGetTable( rFont, GetTag("maxp"), 0, nMaxpLen, (void*)&rBuffer[nOfs], &nMaxpLen);
FakeDirEntry( GetTag("maxp"), nOfs, nMaxpLen, &rBuffer[0], pFakeEntry );
nOfs += nMaxpLen;
@@ -2107,10 +2138,38 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
const ImplFontData* pFontData, long* pGlyphIDs, sal_uInt8* pEncoding,
sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo )
{
+ // TODO: move more of the functionality here into the generic subsetter code
+
+ // prepare the requested file name for writing the font-subset file
+ rtl::OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
+ return FALSE;
+ const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
+
+ // get the raw-bytes from the font to be subset
ByteVector aBuffer;
- if( !GetRawFontData( pFontData, aBuffer ) )
+ bool bCffOnly = false;
+ if( !GetRawFontData( pFontData, aBuffer, &bCffOnly ) )
return sal_False;
+ // handle CFF-subsetting
+ if( bCffOnly )
+ {
+ // provide the raw-CFF data to the subsetter
+ ByteCount nCffLen = aBuffer.size();
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, &aBuffer[0], nCffLen );
+
+ // NOTE: assuming that all glyphids requested on Aqua are fully translated
+
+ // make the subsetter provide the requested subset
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL,
+ pGlyphIDs, pEncoding, nGlyphCount, pGlyphWidths );
+ fclose( pOutFile );
+ return bRC;
+ }
+
// TODO: modernize psprint's horrible fontsubset C-API
// this probably only makes sense after the switch to another SCM
// that can preserve change history after file renames
@@ -2124,7 +2183,7 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
// get details about the subsetted font
TTGlobalFontInfo aTTInfo;
::GetTTGlobalFontInfo( pSftFont, &aTTInfo );
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;
+ rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF;
rInfo.m_aPSName = String( aTTInfo.psname, RTL_TEXTENCODING_UTF8 );
rInfo.m_aFontBBox = Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ),
Point( aTTInfo.xMax, aTTInfo.yMax ) );
@@ -2202,11 +2261,6 @@ BOOL AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
free( pGlyphMetrics );
// write subset into destination file
- rtl::OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
- return FALSE;
- rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
- ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
nRC = ::CreateTTFromTTGlyphs( pSftFont, aToFile.GetBuffer(), aShortIDs,
aTempEncs, nGlyphCount, 0, NULL, 0 );
::CloseTTFont(pSftFont);
@@ -2224,7 +2278,7 @@ void AquaSalGraphics::GetGlyphWidths( const ImplFontData* pFontData, bool bVerti
if( pFontData->IsSubsettable() )
{
ByteVector aBuffer;
- if( !GetRawFontData( pFontData, aBuffer ) )
+ if( !GetRawFontData( pFontData, aBuffer, NULL ) )
return;
// TODO: modernize psprint's horrible fontsubset C-API
@@ -2309,7 +2363,6 @@ const void* AquaSalGraphics::GetEmbedFontData( const ImplFontData* pFontData,
FontSubsetInfo& rInfo,
long* pDataLen )
{
- // TODO: are the non-subsettable fonts on OSX that are embeddable?
return NULL;
}
diff --git a/vcl/aqua/source/gdi/salgdiutils.cxx b/vcl/aqua/source/gdi/salgdiutils.cxx
index 066268791b11..99a1629006d2 100755
--- a/vcl/aqua/source/gdi/salgdiutils.cxx
+++ b/vcl/aqua/source/gdi/salgdiutils.cxx
@@ -102,8 +102,8 @@ void AquaSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContex
else
{
const CGSize aSize = CGLayerGetSize( mxLayer );
- mnWidth = aSize.width;
- mnHeight = aSize.height;
+ mnWidth = static_cast<int>(aSize.width);
+ mnHeight = static_cast<int>(aSize.height);
}
// prepare graphics for drawing
@@ -219,7 +219,10 @@ void AquaSalGraphics::RefreshRect(float lX, float lY, float lWidth, float lHeigh
{
// update a little more around the designated rectangle
// this helps with antialiased rendering
- const Rectangle aVclRect( Point( lX-1, lY-1 ), Size( lWidth+2, lHeight+2) );
+ const Rectangle aVclRect(Point(static_cast<long int>(lX-1),
+ static_cast<long int>(lY-1) ),
+ Size( static_cast<long int>(lWidth+2),
+ static_cast<long int>(lHeight+2) ) );
mpFrame->maInvalidRect.Union( aVclRect );
}
}
diff --git a/vcl/aqua/source/gdi/salnativewidgets.cxx b/vcl/aqua/source/gdi/salnativewidgets.cxx
index 9f2c7c4fa3a7..6cd4e78a2d1a 100644
--- a/vcl/aqua/source/gdi/salnativewidgets.cxx
+++ b/vcl/aqua/source/gdi/salnativewidgets.cxx
@@ -612,7 +612,7 @@ BOOL AquaSalGraphics::drawNativeControl(ControlType nType,
aPushInfo.animation.time.start = 0;
aPushInfo.animation.time.current = 0;
PushButtonValue* pPBVal = (PushButtonValue*)aValue.getOptionalVal();
- int nPaintHeight = rc.size.height;
+ int nPaintHeight = static_cast<int>(rc.size.height);
if( pPBVal && pPBVal->mbBevelButton )
{
@@ -1162,8 +1162,10 @@ BOOL AquaSalGraphics::drawNativeControl(ControlType nType,
if( mxClipPath )
aRect = CGPathGetBoundingBox( mxClipPath );
if( aRect.size.width != 0 && aRect.size.height != 0 )
- buttonRect.Intersection( Rectangle( Point( aRect.origin.x, aRect.origin.y ),
- Size( aRect.size.width, aRect.size.height ) ) );
+ buttonRect.Intersection( Rectangle( Point( static_cast<long int>(aRect.origin.x),
+ static_cast<long int>(aRect.origin.y) ),
+ Size( static_cast<long int>(aRect.size.width),
+ static_cast<long int>(aRect.size.height) ) ) );
}
RefreshRect( buttonRect.Left(), buttonRect.Top(), buttonRect.GetWidth(), buttonRect.GetHeight() );
diff --git a/vcl/aqua/source/gdi/salprn.cxx b/vcl/aqua/source/gdi/salprn.cxx
index a0062834e269..b9a1f4ef7748 100644
--- a/vcl/aqua/source/gdi/salprn.cxx
+++ b/vcl/aqua/source/gdi/salprn.cxx
@@ -127,20 +127,27 @@ void AquaSalInfoPrinter::SetupPrinterGraphics( CGContextRef i_rContext ) const
NSRect aImageRect = [mpPrintInfo imageablePageBounds];
if( mePageOrientation == ORIENTATION_PORTRAIT )
{
+ // move mirrored CTM back into paper
double dX = 0, dY = aPaperSize.height;
+ // move CTM to reflect imageable area
dX += aImageRect.origin.x;
dY -= aPaperSize.height - aImageRect.size.height - aImageRect.origin.y;
CGContextTranslateCTM( i_rContext, dX + mnStartPageOffsetX, dY - mnStartPageOffsetY );
+ // scale to be top/down and reflect our "virtual" DPI
CGContextScaleCTM( i_rContext, 0.1, -0.1 );
}
else
{
+ // move CTM to reflect imageable area
+ double dX = aImageRect.origin.x, dY = aPaperSize.height - aImageRect.size.height - aImageRect.origin.y;
+ CGContextTranslateCTM( i_rContext, -dX, -dY );
+ // turn by 90 degree
CGContextRotateCTM( i_rContext, M_PI/2 );
- double dX = aPaperSize.height, dY = -aPaperSize.width;
- dY += aPaperSize.height - aImageRect.size.height - aImageRect.origin.y;
- dX -= aImageRect.origin.x;
-
+ // move turned CTM back into paper
+ dX = aPaperSize.height;
+ dY = -aPaperSize.width;
CGContextTranslateCTM( i_rContext, dX + mnStartPageOffsetY, dY - mnStartPageOffsetX );
+ // scale to be top/down and reflect our "virtual" DPI
CGContextScaleCTM( i_rContext, -0.1, 0.1 );
}
mpGraphics->SetPrinterGraphics( i_rContext, nDPIX, nDPIY, 1.0 );
@@ -303,8 +310,12 @@ BOOL AquaSalInfoPrinter::SetData( ULONG i_nFlags, ImplJobSetup* io_pSetupData )
double width = 0, height = 0;
if( io_pSetupData->mePaperFormat == PAPER_USER )
{
- width = TenMuToPt( io_pSetupData->mnPaperWidth );
- height = TenMuToPt( io_pSetupData->mnPaperHeight );
+ // #i101108# sanity check
+ if( io_pSetupData->mnPaperWidth && io_pSetupData->mnPaperHeight )
+ {
+ width = TenMuToPt( io_pSetupData->mnPaperWidth );
+ height = TenMuToPt( io_pSetupData->mnPaperHeight );
+ }
}
else
getPaperSize( width, height, io_pSetupData->mePaperFormat );
diff --git a/vcl/aqua/source/gdi/salvd.cxx b/vcl/aqua/source/gdi/salvd.cxx
index d7690e4e38bd..4d25d5d8b63b 100644
--- a/vcl/aqua/source/gdi/salvd.cxx
+++ b/vcl/aqua/source/gdi/salvd.cxx
@@ -228,8 +228,8 @@ void AquaSalVirtualDevice::GetSize( long& rWidth, long& rHeight )
if( mxLayer )
{
const CGSize aSize = CGLayerGetSize( mxLayer );
- rWidth = aSize.width;
- rHeight = aSize.height;
+ rWidth = static_cast<long>(aSize.width);
+ rHeight = static_cast<long>(aSize.height);
}
else
{
diff --git a/vcl/aqua/source/window/salframe.cxx b/vcl/aqua/source/window/salframe.cxx
index 560d80fd75d5..9c713ea26a52 100644
--- a/vcl/aqua/source/window/salframe.cxx
+++ b/vcl/aqua/source/window/salframe.cxx
@@ -520,8 +520,16 @@ void AquaSalFrame::SetClientSize( long nWidth, long nHeight )
void AquaSalFrame::GetClientSize( long& rWidth, long& rHeight )
{
- rWidth = mbShown ? maGeometry.nWidth : 0;
- rHeight = mbShown ? maGeometry.nHeight : 0;
+ if( mbShown || mbInitShow )
+ {
+ rWidth = maGeometry.nWidth;
+ rHeight = maGeometry.nHeight;
+ }
+ else
+ {
+ rWidth = 0;
+ rHeight = 0;
+ }
}
// -----------------------------------------------------------------------
@@ -1174,7 +1182,7 @@ void AquaSalFrame::UpdateSettings( AllSettings& rSettings )
getAppleScrollBarVariant();
// set scrollbar size
- aStyleSettings.SetScrollBarSize( [NSScroller scrollerWidth] );
+ aStyleSettings.SetScrollBarSize( static_cast<long int>([NSScroller scrollerWidth]) );
// images in menus false for MacOSX
aStyleSettings.SetUseImagesInMenus( false );
@@ -1195,7 +1203,15 @@ const SystemEnvData* AquaSalFrame::GetSystemData() const
void AquaSalFrame::Beep( SoundType eSoundType )
{
- NSBeep();
+ switch( eSoundType )
+ {
+ case SOUND_DISABLE:
+ // don't beep
+ break;
+ default:
+ NSBeep();
+ break;
+ }
}
// -----------------------------------------------------------------------
@@ -1232,7 +1248,7 @@ void AquaSalFrame::SetPosSize(long nX, long nY, long nWidth, long nHeight, USHOR
if( (nFlags & SAL_FRAME_POSSIZE_WIDTH) != 0 )
nX = mpParent->maGeometry.nWidth - nWidth-1 - nX;
else
- nX = mpParent->maGeometry.nWidth - aContentRect.size.width-1 - nX;
+ nX = mpParent->maGeometry.nWidth - static_cast<long int>( aContentRect.size.width-1) - nX;
}
NSRect aParentFrameRect = [mpParent->mpWindow frame];
aParentContentRect = [NSWindow contentRectForFrameRect: aParentFrameRect styleMask: mpParent->mnStyleMask];
diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm
index 7de43d770385..c7facd8c6c09 100755
--- a/vcl/aqua/source/window/salframeview.mm
+++ b/vcl/aqua/source/window/salframeview.mm
@@ -841,6 +841,16 @@ private:
if( pUnmodifiedString && [pUnmodifiedString length] == 1 )
{
+ /* #i103102# key events with command and alternate don't make it through
+ interpretKeyEvents (why ?). Try to dispatch them here first,
+ if not successful continue normally
+ */
+ if( (mpFrame->mnLastModifierFlags & (NSAlternateKeyMask | NSCommandKeyMask))
+ == (NSAlternateKeyMask | NSCommandKeyMask) )
+ {
+ if( [self sendSingleCharacter: mpLastEvent] )
+ return YES;
+ }
unichar keyChar = [pUnmodifiedString characterAtIndex: 0];
USHORT nKeyCode = ImplMapCharCode( keyChar );
@@ -1242,12 +1252,18 @@ private:
}
}
--(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar
+-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar
{
return [self sendKeyInputAndReleaseToFrame: nKeyCode character: aChar modifiers: mpFrame->mnLastModifierFlags];
}
--(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod
+-(MacOSBOOL)sendKeyInputAndReleaseToFrame: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod
+{
+ return [self sendKeyToFrameDirect: nKeyCode character: aChar modifiers: nMod] ||
+ [self sendSingleCharacter: mpLastEvent];
+}
+
+-(MacOSBOOL)sendKeyToFrameDirect: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod
{
YIELD_GUARD;
@@ -1283,7 +1299,7 @@ private:
// don't send unicodes in the private use area
if( keyChar >= 0xf700 && keyChar < 0xf780 )
keyChar = 0;
- MacOSBOOL bRet = [self sendKeyInputAndReleaseToFrame: nKeyCode character: keyChar];
+ MacOSBOOL bRet = [self sendKeyToFrameDirect: nKeyCode character: keyChar modifiers: mpFrame->mnLastModifierFlags];
mbInKeyInput = false;
return bRet;
diff --git a/vcl/aqua/source/window/salmenu.cxx b/vcl/aqua/source/window/salmenu.cxx
index 4fafbbdbb4cf..5c838701933c 100644
--- a/vcl/aqua/source/window/salmenu.cxx
+++ b/vcl/aqua/source/window/salmenu.cxx
@@ -651,11 +651,9 @@ void AquaSalMenu::SetItemImage( unsigned nPos, SalMenuItem* pSMI, const Image& r
NSImage* pImage = CreateNSImage( rImage );
+ [pSalMenuItem->mpMenuItem setImage: pImage];
if( pImage )
- {
- [pSalMenuItem->mpMenuItem setImage: pImage];
[pImage release];
- }
}
void AquaSalMenu::SetItemText( unsigned i_nPos, SalMenuItem* i_pSalMenuItem, const XubString& i_rText )
@@ -894,7 +892,13 @@ Rectangle AquaSalMenu::GetMenuBarButtonRectPixel( USHORT i_nItemId, SalFrame* i_
aRect.origin.x -= i_pReferenceFrame->maGeometry.nX;
aRect.origin.y -= i_pReferenceFrame->maGeometry.nY + aRect.size.height;
- return Rectangle( Point( aRect.origin.x, aRect.origin.y ), Size( aRect.size.width, aRect.size.height ) );
+ return Rectangle( Point(static_cast<long int>(aRect.origin.x),
+ static_cast<long int>(aRect.origin.y)
+ ),
+ Size( static_cast<long int>(aRect.size.width),
+ static_cast<long int>(aRect.size.height)
+ )
+ );
}
// =======================================================================
diff --git a/vcl/inc/list.h b/vcl/inc/list.h
index b801b43d77eb..66bff6912bc0 100644
--- a/vcl/inc/list.h
+++ b/vcl/inc/list.h
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: list.h,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,8 +25,6 @@
*
************************************************************************/
-/* $Id: list.h,v 1.4 2008-06-25 14:20:01 kz Exp $ */
-
/*[]---------------------------------------------------[]*/
/*| |*/
/*| Implementation of the list data type |*/
diff --git a/vcl/inc/sft.h b/vcl/inc/sft.h
deleted file mode 100644
index efda0903afc5..000000000000
--- a/vcl/inc/sft.h
+++ /dev/null
@@ -1,641 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: sft.h,v $
- * $Revision: 1.21 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-/* $Id: sft.h,v 1.21 2008-06-25 14:20:49 kz Exp $ */
-
-/**
-
- *
- * @file sft.h
- * @brief Sun Font Tools
- * @author Alexander Gelfenbain
- */
-
-/*
- * If NO_MAPPERS is defined, MapChar() and MapString() and consequently GetTTSimpleCharMetrics()
- * don't get compiled in. This is done to avoid including a large chunk of code (TranslateXY() from
- * xlat.c in the projects that don't require it.
- *
- * If NO_TYPE3 is defined CreateT3FromTTGlyphs() does not get compiled in.
- * If NO_TYPE42 is defined Type42-related code is excluded
- * If NO_TTCR is defined TrueType creation related code is excluded\
- * If NO_LIST is defined list.h and piblic functions that use it don't get compiled
- */
-
-/*
- * Generated fonts contain an XUID entry in the form of:
- *
- * 103 0 T C1 N C2 C3
- *
- * 103 - Sun's Adobe assigned XUID number. Contact person: Alexander Gelfenbain <gelf@eng.sun.com>
- *
- * T - font type. 0: Type 3, 1: Type 42
- * C1 - CRC-32 of the entire source TrueType font
- * N - number of glyphs in the subset
- * C2 - CRC-32 of the array of glyph IDs used to generate the subset
- * C3 - CRC-32 of the array of encoding numbers used to generate the subset
- *
- */
-
-
-#ifndef __SUBFONT_H
-#define __SUBFONT_H
-
-#ifdef UNX
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-#include <stdio.h>
-
-#include <sal/types.h>
-
-#ifndef NO_LIST
-#include "list.h"
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*@{*/
-#ifndef __cplusplus
-#define false 0 /**< standard false value */
-#define true 1 /**< standard true value */
-#endif
-/*@}*/
-
-/*@{*/
- typedef sal_Int16 F2Dot14; /**< fixed: 2.14 */
- typedef sal_Int32 F16Dot16; /**< fixed: 16.16 */
-/*@}*/
-
- typedef struct {
- sal_uInt16 s;
- sal_uInt16 d;
- } sal_uInt16pair;
-
-/** Return value of OpenTTFont() and CreateT3FromTTGlyphs() */
- enum SFErrCodes {
- SF_OK, /**< no error */
- SF_BADFILE, /**< file not found */
- SF_FILEIO, /**< file I/O error */
- SF_MEMORY, /**< memory allocation error */
- SF_GLYPHNUM, /**< incorrect number of glyphs */
- SF_BADARG, /**< incorrect arguments */
- SF_TTFORMAT, /**< incorrect TrueType font format */
- SF_TABLEFORMAT, /**< incorrect format of a TrueType table */
- SF_FONTNO /**< incorrect logical font number of a TTC font */
- };
-
-#ifndef FW_THIN /* WIN32 compilation would conflict */
-/** Value of the weight member of the TTGlobalFontInfo struct */
- enum WeightClass {
- FW_THIN = 100, /**< Thin */
- FW_EXTRALIGHT = 200, /**< Extra-light (Ultra-light) */
- FW_LIGHT = 300, /**< Light */
- FW_NORMAL = 400, /**< Normal (Regular) */
- FW_MEDIUM = 500, /**< Medium */
- FW_SEMIBOLD = 600, /**< Semi-bold (Demi-bold) */
- FW_BOLD = 700, /**< Bold */
- FW_EXTRABOLD = 800, /**< Extra-bold (Ultra-bold) */
- FW_BLACK = 900 /**< Black (Heavy) */
- };
-
-/** Value of the width member of the TTGlobalFontInfo struct */
-#ifndef OS2
- enum WidthClass {
- FWIDTH_ULTRA_CONDENSED = 1, /**< 50% of normal */
- FWIDTH_EXTRA_CONDENSED = 2, /**< 62.5% of normal */
- FWIDTH_CONDENSED = 3, /**< 75% of normal */
- FWIDTH_SEMI_CONDENSED = 4, /**< 87.5% of normal */
- FWIDTH_NORMAL = 5, /**< Medium, 100% */
- FWIDTH_SEMI_EXPANDED = 6, /**< 112.5% of normal */
- FWIDTH_EXPANDED = 7, /**< 125% of normal */
- FWIDTH_EXTRA_EXPANDED = 8, /**< 150% of normal */
- FWIDTH_ULTRA_EXPANDED = 9 /**< 200% of normal */
- };
-#endif // OS2
-#endif /* FW_THIN */
-
-/** Type of the 'kern' table, stored in _TrueTypeFont::kerntype */
- enum KernType {
- KT_NONE = 0, /**< no kern table */
- KT_APPLE_NEW = 1, /**< new Apple kern table */
- KT_MICROSOFT = 2 /**< Microsoft table */
- };
-
-/* Composite glyph flags definition */
- enum CompositeFlags {
- ARG_1_AND_2_ARE_WORDS = 1,
- ARGS_ARE_XY_VALUES = 1<<1,
- ROUND_XY_TO_GRID = 1<<2,
- WE_HAVE_A_SCALE = 1<<3,
- MORE_COMPONENTS = 1<<5,
- WE_HAVE_AN_X_AND_Y_SCALE = 1<<6,
- WE_HAVE_A_TWO_BY_TWO = 1<<7,
- WE_HAVE_INSTRUCTIONS = 1<<8,
- USE_MY_METRICS = 1<<9,
- OVERLAP_COMPOUND = 1<<10
- };
-
-#ifndef NO_TTCR
-/** Flags for TrueType generation */
- enum TTCreationFlags {
- TTCF_AutoName = 1, /**< Automatically generate a compact 'name' table.
- If this flag is not set, name table is generated
- either from an array of NameRecord structs passed as
- arguments or if the array is NULL, 'name' table
- of the generated TrueType file will be a copy
- of the name table of the original file.
- If this flag is set the array of NameRecord structs
- is ignored and a very compact 'name' table is automatically
- generated. */
-
- TTCF_IncludeOS2 = 2 /** If this flag is set OS/2 table from the original font will be
- copied to the subset */
- };
-#endif
-
-
-
-
-/** Structure used by GetTTSimpleGlyphMetrics() and GetTTSimpleCharMetrics() functions */
- typedef struct {
- sal_uInt16 adv; /**< advance width or height */
- sal_Int16 sb; /**< left or top sidebearing */
- } TTSimpleGlyphMetrics;
-
-
-
-/** Structure used by the TrueType Creator and GetRawGlyphData() */
-
- typedef struct {
- sal_uInt32 glyphID; /**< glyph ID */
- sal_uInt16 nbytes; /**< number of bytes in glyph data */
- sal_uInt8 *ptr; /**< pointer to glyph data */
- sal_uInt16 aw; /**< advance width */
- sal_Int16 lsb; /**< left sidebearing */
- sal_uInt16 compflag; /**< 0- if non-composite, 1- otherwise */
- sal_uInt16 npoints; /**< number of points */
- sal_uInt16 ncontours; /**< number of contours */
- /* */
- sal_uInt32 newID; /**< used internally by the TTCR */
- } GlyphData;
-
-/** Structure used by the TrueType Creator and CreateTTFromTTGlyphs() */
- typedef struct {
- sal_uInt16 platformID; /**< Platform ID */
- sal_uInt16 encodingID; /**< Platform-specific encoding ID */
- sal_uInt16 languageID; /**< Language ID */
- sal_uInt16 nameID; /**< Name ID */
- sal_uInt16 slen; /**< String length in bytes */
- sal_uInt8 *sptr; /**< Pointer to string data (not zero-terminated!) */
- } NameRecord;
-
-
-
-/** Return value of GetTTGlobalFontInfo() */
-
- typedef struct {
- char *family; /**< family name */
- sal_uInt16 *ufamily; /**< family name UCS2 */
- char *subfamily; /**< subfamily name */
- sal_uInt16 *usubfamily; /**< subfamily name UCS2 */
- char *psname; /**< PostScript name */
- sal_uInt16 macStyle; /**< macstyle bits from 'HEAD' table */
- int weight; /**< value of WeightClass or 0 if can't be determined */
- int width; /**< value of WidthClass or 0 if can't be determined */
- int pitch; /**< 0: proportianal font, otherwise: monospaced */
- int italicAngle; /**< in counter-clockwise degrees * 65536 */
- int xMin; /**< global bounding box: xMin */
- int yMin; /**< global bounding box: yMin */
- int xMax; /**< global bounding box: xMax */
- int yMax; /**< global bounding box: yMax */
- int ascender; /**< typographic ascent. */
- int descender; /**< typographic descent. */
- int linegap; /**< typographic line gap.\ Negative values are treated as
- zero in Win 3.1, System 6 and System 7. */
- int vascent; /**< typographic ascent for vertical writing mode */
- int vdescent; /**< typographic descent for vertical writing mode */
- int typoAscender; /**< OS/2 portable typographic ascender */
- int typoDescender; /**< OS/2 portable typographic descender */
- int typoLineGap; /**< OS/2 portable typographc line gap */
- int winAscent; /**< ascender metric for Windows */
- int winDescent; /**< descender metric for Windows */
- int symbolEncoded; /**< 1: MS symbol encoded 0: not symbol encoded */
- int rangeFlag; /**< if set to 1 Unicode Range flags are applicable */
- sal_uInt32 ur1; /**< bits 0 - 31 of Unicode Range flags */
- sal_uInt32 ur2; /**< bits 32 - 63 of Unicode Range flags */
- sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */
- sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */
- sal_uInt8 panose[10]; /**< PANOSE classification number */
- sal_uInt16 typeFlags; /**< type flags (copyright information) */
- } TTGlobalFontInfo;
-
-/** Structure used by KernGlyphs() */
- typedef struct {
- int x; /**< positive: right, negative: left */
- int y; /**< positive: up, negative: down */
- } KernData;
-
-
-/** ControlPoint structure used by GetTTGlyphPoints() */
- typedef struct {
- sal_uInt32 flags; /**< 00000000 00000000 e0000000 bbbbbbbb */
- /**< b - byte flags from the glyf array */
- /**< e == 0 - regular point */
- /**< e == 1 - end contour */
- sal_Int16 x; /**< X coordinate in EmSquare units */
- sal_Int16 y; /**< Y coordinate in EmSquare units */
- } ControlPoint;
-
- typedef struct _TrueTypeFont TrueTypeFont;
-
-/**
- * @defgroup sft Sun Font Tools Exported Functions
- */
-
-
-/**
- * Get the number of fonts contained in a TrueType collection
- * @param fname - file name
- * @return number of fonts or zero, if file is not a TTC file.
- * @ingroup sft
- */
- int CountTTCFonts(const char* fname);
-
-
-/**
- * TrueTypeFont constructor.
- * The font file has to be provided as a memory buffer and length
- * @param facenum - logical font number within a TTC file. This value is ignored
- * for TrueType fonts
- * @return value of SFErrCodes enum
- * @ingroup sft
- */
- int OpenTTFontBuffer(void* pBuffer, sal_uInt32 nLen, sal_uInt32 facenum, TrueTypeFont** ttf); /*FOLD01*/
-#if !defined(WIN32) && !defined(OS2)
-/**
- * TrueTypeFont constructor.
- * Reads the font file and allocates the memory for the structure.
- * on WIN32 the font has to be provided as a memory buffer and length
- * @param facenum - logical font number within a TTC file. This value is ignored
- * for TrueType fonts
- * @return value of SFErrCodes enum
- * @ingroup sft
- */
- int OpenTTFontFile(const char *fname, sal_uInt32 facenum, TrueTypeFont** ttf);
-#endif
-
-/**
- * TrueTypeFont destructor. Deallocates the memory.
- * @ingroup sft
- */
- void CloseTTFont(TrueTypeFont *);
-
-/**
- * Extracts TrueType control points, and stores them in an allocated array pointed to
- * by *pointArray. This function returns the number of extracted points.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param glyphID Glyph ID
- * @param pointArray Return value - address of the pointer to the first element of the array
- * of points allocated by the function
- * @return Returns the number of points in *pointArray or -1 if glyphID is
- * invalid.
- * @ingroup sft
- *
- */
- int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray);
-
-/**
- * Extracts raw glyph data from the 'glyf' table and returns it in an allocated
- * GlyphData structure.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param glyphID Glyph ID
- *
- * @return pointer to an allocated GlyphData structure or NULL if
- * glyphID is not present in the font
- * @ingroup sft
- *
- */
- GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID);
-
-#ifndef NO_LIST
-/**
- * For a specified glyph adds all component glyphs IDs to the list and
- * return their number. If the glyph is a single glyph it has one component
- * glyph (which is added to the list) and the function returns 1.
- * For a composite glyphs it returns the number of component glyphs
- * and adds all of them to the list.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param glyphID Glyph ID
- * @param glyphlist list of glyphs
- *
- * @return number of component glyphs
- * @ingroup sft
- *
- */
- int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, list glyphlist);
-#endif
-
-/**
- * Extracts all Name Records from the font and stores them in an allocated
- * array of NameRecord structs
- *
- * @param ttf pointer to the TrueTypeFont struct
- * @param nr pointer to the array of NameRecord structs
- *
- * @return number of NameRecord structs
- * @ingroup sft
- */
-
- int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr);
-
-/**
- * Deallocates previously allocated array of NameRecords.
- *
- * @param nr array of NameRecord structs
- * @param n number of elements in the array
- *
- * @ingroup sft
- */
- void DisposeNameRecords(NameRecord* nr, int n);
-
-
-#ifndef NO_TYPE3
-/**
- * Generates a new PostScript Type 3 font and dumps it to <b>outf</b> file.
- * This functions subsititues glyph 0 for all glyphIDs that are not found in the font.
- * @param ttf pointer to the TrueTypeFont structure
- * @param outf the resulting font is written to this stream
- * @param fname font name for the new font. If it is NULL the PostScript name of the
- * original font will be used
- * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf
- * @param encoding array of encoding values. encoding[i] specifies the position of the glyph
- * glyphArray[i] in the encoding vector of the resulting Type3 font
- * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding
- * @param wmode writing mode for the output file: 0 - horizontal, 1 - vertical
- * @return return the value of SFErrCodes enum
- * @see SFErrCodes
- * @ingroup sft
- *
- */
- int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, sal_uInt16 *glyphArray, sal_uInt8 *encoding, int nGlyphs, int wmode);
-#endif
-
-#ifndef NO_TTCR
-/**
- * Generates a new TrueType font and dumps it to <b>outf</b> file.
- * This functions subsititues glyph 0 for all glyphIDs that are not found in the font.
- * @param ttf pointer to the TrueTypeFont structure
- * @param fname file name for the output TrueType font file
- * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first
- * element of this array has to be glyph 0 (default glyph)
- * @param encoding array of encoding values. encoding[i] specifies character code for
- * the glyphID glyphArray[i]. Character code 0 usually points to a default
- * glyph (glyphID 0)
- * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding
- * @param nNameRecs number of NameRecords for the font, if 0 the name table from the
- * original font will be used
- * @param nr array of NameRecords
- * @param flags or'ed TTCreationFlags
- * @return return the value of SFErrCodes enum
- * @see SFErrCodes
- * @ingroup sft
- *
- */
- int CreateTTFromTTGlyphs(TrueTypeFont *ttf,
- const char *fname,
- sal_uInt16 *glyphArray,
- sal_uInt8 *encoding,
- int nGlyphs,
- int nNameRecs,
- NameRecord *nr,
- sal_uInt32 flags);
-#endif
-
-#ifndef NO_TYPE42
-/**
- * Generates a new PostScript Type42 font and dumps it to <b>outf</b> file.
- * This functions subsititues glyph 0 for all glyphIDs that are not found in the font.
- * @param ttf pointer to the TrueTypeFont structure
- * @param outf output stream for a resulting font
- * @param psname PostScript name of the resulting font
- * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first
- * element of this array has to be glyph 0 (default glyph)
- * @param encoding array of encoding values. encoding[i] specifies character code for
- * the glyphID glyphArray[i]. Character code 0 usually points to a default
- * glyph (glyphID 0)
- * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding
- * @return SF_OK - no errors
- * SF_GLYPHNUM - too many glyphs (> 255)
- * SF_TTFORMAT - corrupted TrueType fonts
- *
- * @see SFErrCodes
- * @ingroup sft
- *
- */
- int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
- FILE *outf,
- const char *psname,
- sal_uInt16 *glyphArray,
- sal_uInt8 *encoding,
- int nGlyphs);
-#endif
-
-
-/**
- * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf
- * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding
- * @param mode writing mode: 0 - horizontal, 1 - vertical
- * @ingroup sft
- *
- */
- TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode);
-
-#ifndef NO_MAPPERS
-/**
- * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it.
- * This function behaves just like GetTTSimpleGlyphMetrics() but it takes a range of Unicode
- * characters instead of an array of glyphs.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param firstChar Unicode value of the first character in the range
- * @param nChars number of Unicode characters in the range
- * @param mode writing mode: 0 - horizontal, 1 - vertical
- *
- * @see GetTTSimpleGlyphMetrics
- * @ingroup sft
- *
- */
- TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont *ttf, sal_uInt16 firstChar, int nChars, int mode);
-
-/**
- * Maps a Unicode (UCS-2) string to a glyph array. Returns the number of glyphs in the array,
- * which for TrueType fonts is always the same as the number of input characters.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param str pointer to a UCS-2 string
- * @param nchars number of characters in <b>str</b>
- * @param glyphArray pointer to the glyph array where glyph IDs are to be recorded.
- *
- * @return MapString() returns -1 if the TrueType font has no usable 'cmap' tables.
- * Otherwise it returns the number of characters processed: <b>nChars</b>
- *
- * glyphIDs of TrueType fonts are 2 byte positive numbers. glyphID of 0 denotes a missing
- * glyph and traditionally defaults to an empty square.
- * glyphArray should be at least sizeof(sal_uInt16) * nchars bytes long. If glyphArray is NULL
- * MapString() replaces the UCS-2 characters in str with glyphIDs.
- * @ingroup sft
- */
- int MapString(TrueTypeFont *ttf, sal_uInt16 *str, int nchars, sal_uInt16 *glyphArray, int bvertical);
-
-/**
- * Maps a Unicode (UCS-2) character to a glyph ID and returns it. Missing glyph has
- * a glyphID of 0 so this function can be used to test if a character is encoded in the font.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param ch Unicode (UCS-2) character
- * @return glyph ID, if the character is missing in the font, the return value is 0.
- * @ingroup sft
- */
- sal_uInt16 MapChar(TrueTypeFont *ttf, sal_uInt16 ch, int bvertical);
-
-/**
- * Returns 0 when the font does not substitute vertical glyphs
- *
- * @param ttf pointer to the TrueTypeFont structure
- */
- int DoesVerticalSubstitution( TrueTypeFont *ttf, int bvertical);
-
-#endif
-
-/**
- * Returns global font information about the TrueType font.
- * @see TTGlobalFontInfo
- *
- * @param ttf pointer to a TrueTypeFont structure
- * @param info pointer to a TTGlobalFontInfo structure
- * @ingroup sft
- *
- */
- void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info);
-
-#ifdef TEST5
-/**
- * Returns kerning information for an array of glyphs.
- * Kerning is not cumulative.
- * kern[i] contains kerning information for a pair of glyphs at positions i and i+1
- *
- * @param ttf pointer to a TrueTypeFont structure
- * @param glyphs array of source glyphs
- * @param nglyphs number of glyphs in the array
- * @param wmode writing mode: 0 - horizontal, 1 - vertical
- * @param kern array of KernData structures. It should contain nglyphs-1 elements
- * @see KernData
- * @ingroup sft
- *
- */
- void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, KernData *kern);
-#endif
-
-/**
- * Returns nonzero if font is a symbol encoded font
- */
- int CheckSymbolEncoding(TrueTypeFont* ttf);
-
-/**
- * returns the number of glyphs in a font
- */
- int GetTTGlyphCount( TrueTypeFont* ttf );
-
-/*- private definitions */ /*FOLD00*/
-
- struct _TrueTypeFont {
- sal_uInt32 tag;
-
- char *fname;
- sal_Int32 fsize;
- sal_uInt8 *ptr;
-
- char *psname;
- char *family;
- sal_uInt16 *ufamily;
- char *subfamily;
- sal_uInt16 *usubfamily;
-
- sal_uInt32 ntables;
- sal_uInt32 *goffsets;
- sal_uInt32 nglyphs;
- sal_uInt32 unitsPerEm;
- sal_uInt32 numberOfHMetrics;
- sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */
- sal_uInt8 *cmap;
- int cmapType;
- sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */
- void **tables; /* array of pointers to tables */
- sal_uInt32 *tlens; /* array of table lengths */
- int kerntype; /* Defined in the KernType enum */
- sal_uInt32 nkern; /* number of kern subtables */
- sal_uInt8 **kerntables; /* array of pointers to kern subtables */
- void *pGSubstitution; /* info provided by GSUB for UseGSUB() */
- };
-
-#ifdef __cplusplus
-}
-#endif
-
-/* indexes into _TrueTypeFont::tables[] and _TrueTypeFont::tlens[] */
-#define O_maxp 0 /* 'maxp' */
-#define O_glyf 1 /* 'glyf' */
-#define O_head 2 /* 'head' */
-#define O_loca 3 /* 'loca' */
-#define O_name 4 /* 'name' */
-#define O_hhea 5 /* 'hhea' */
-#define O_hmtx 6 /* 'hmtx' */
-#define O_cmap 7 /* 'cmap' */
-#define O_vhea 8 /* 'vhea' */
-#define O_vmtx 9 /* 'vmtx' */
-#define O_OS2 10 /* 'OS/2' */
-#define O_post 11 /* 'post' */
-#define O_kern 12 /* 'kern' */
-#define O_cvt 13 /* 'cvt_' - only used in TT->TT generation */
-#define O_prep 14 /* 'prep' - only used in TT->TT generation */
-#define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */
-#define O_gsub 16 /* 'GSUB' */
-#define NUM_TAGS 17
-
-#endif /* __SUBFONT_H */
diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 5f22bc0a471f..e2252802ba18 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: sft.h,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,11 +25,7 @@
*
************************************************************************/
-/* $Id: sft.h,v 1.21 2008-06-25 14:20:49 kz Exp $ */
-
/**
-
- *
* @file sft.h
* @brief Sun Font Tools
* @author Alexander Gelfenbain
@@ -245,9 +238,13 @@ namespace vcl
sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */
sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */
sal_uInt8 panose[10]; /**< PANOSE classification number */
- sal_uInt16 typeFlags; /**< type flags (copyright information) */
+ sal_uInt32 typeFlags; /**< type flags (copyright bits + PS-OpenType flag) */
} TTGlobalFontInfo;
+#define TYPEFLAG_INVALID 0x8000000
+#define TYPEFLAG_COPYRIGHT_MASK 0x000000E
+#define TYPEFLAG_PS_OPENTYPE 0x0010000
+
/** Structure used by KernGlyphs() */
typedef struct {
int x; /**< positive: right, negative: left */
@@ -569,6 +566,12 @@ namespace vcl
*/
int GetTTGlyphCount( TrueTypeFont* ttf );
+/**
+ * provide access to the raw data of a SFNT-container's subtable
+ */
+ bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex,
+ const sal_uInt8** ppRawBytes, int* pRawLength );
+
/*- private definitions */ /*FOLD00*/
struct _TrueTypeFont {
@@ -590,14 +593,14 @@ namespace vcl
sal_uInt32 unitsPerEm;
sal_uInt32 numberOfHMetrics;
sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */
- sal_uInt8 *cmap;
+ const sal_uInt8* cmap;
int cmapType;
sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */
- sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */
+ const sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */
sal_uInt32 *tlens; /* array of table lengths */
int kerntype; /* Defined in the KernType enum */
sal_uInt32 nkern; /* number of kern subtables */
- sal_uInt8 **kerntables; /* array of pointers to kern subtables */
+ const sal_uInt8** kerntables; /* array of pointers to kern subtables */
void *pGSubstitution; /* info provided by GSUB for UseGSUB() */
};
@@ -619,7 +622,8 @@ namespace vcl
#define O_prep 14 /* 'prep' - only used in TT->TT generation */
#define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */
#define O_gsub 16 /* 'GSUB' */
-#define NUM_TAGS 17
+#define O_CFF 17 /* 'CFF' */
+#define NUM_TAGS 18
} // namespace vcl
diff --git a/vcl/inc/vcl/fontmanager.hxx b/vcl/inc/vcl/fontmanager.hxx
index bdfd30d12f7f..edd7a787ae3d 100644
--- a/vcl/inc/vcl/fontmanager.hxx
+++ b/vcl/inc/vcl/fontmanager.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fontmanager.hxx,v $
- * $Revision: 1.36 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -51,6 +48,7 @@
// forward declarations
namespace utl { class MultiAtomProvider; } // see unotools/atom.hxx
+class FontSubsetInfo;
namespace psp {
class PPDParser; // see ppdparser.hxx
@@ -166,6 +164,8 @@ struct FastPrintFontInfo
rtl_TextEncoding m_aEncoding;
fcstatus::type m_eEmbeddedbitmap;
fcstatus::type m_eAntialias;
+ bool m_bSubsettable;
+ bool m_bEmbeddable;
FastPrintFontInfo() :
m_nID( 0 ),
@@ -328,9 +328,9 @@ class VCL_DLLPUBLIC PrintFontManager
rtl::OString m_aFontFile; // relative to directory
rtl::OString m_aXLFD; // mainly for administration, contains the XLFD from fonts.dir
int m_nCollectionEntry; // -1 for regular fonts, 0 to ... for fonts stemming from collections
- unsigned int m_nTypeFlags; // from TrueType file; only known use is for copyright flags
+ unsigned int m_nTypeFlags; // copyright bits and PS-OpenType flag
- TrueTypeFontFile() : PrintFont( fonttype::TrueType ), m_nDirectory( 0 ), m_nCollectionEntry(-1), m_nTypeFlags( 0x80000000 ) {}
+ TrueTypeFontFile();
virtual ~TrueTypeFontFile();
virtual bool queryMetricPage( int nPage, utl::MultiAtomProvider* pProvider );
};
@@ -648,7 +648,9 @@ public:
// nGlyphs: number of glyphs in arrays
// pCapHeight:: capital height of the produced font
// pXMin, pYMin, pXMax, pYMax: outgoing font bounding box
- bool createFontSubset( fontID nFont,
+ // TODO: callers of this method should use its FontSubsetInfo counterpart directly
+ bool createFontSubset( FontSubsetInfo&,
+ fontID nFont,
const rtl::OUString& rOutFile,
sal_Int32* pGlyphIDs,
sal_uInt8* pNewEncoding,
diff --git a/vcl/inc/vcl/fontsubset.hxx b/vcl/inc/vcl/fontsubset.hxx
new file mode 100644
index 000000000000..3032490dcbab
--- /dev/null
+++ b/vcl/inc/vcl/fontsubset.hxx
@@ -0,0 +1,97 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_FONTSUBSET_HXX
+#define _SV_FONTSUBSET_HXX
+
+#include <tools/gen.hxx>
+#include <tools/string.hxx>
+#include <cstdio>
+
+namespace vcl { struct _TrueTypeFont; } // SFT's idea of a TTF font
+
+class FontSubsetInfo
+{
+public:
+ explicit FontSubsetInfo( void );
+ virtual ~FontSubsetInfo( void );
+
+ enum FontType {
+ NO_FONT = 0,
+ SFNT_TTF = 1<<1, // SFNT container with TrueType glyphs
+ SFNT_CFF = 1<<2, // SFNT container with CFF-container
+ TYPE1_PFA = 1<<3, // PSType1 Postscript Font Ascii
+ TYPE1_PFB = 1<<4, // PSType1 Postscript Font Binary
+ CFF_FONT = 1<<5, // CFF-container with PSType2 glyphs
+ TYPE3_FONT = 1<<6, // PSType3 Postscript font
+ TYPE42_FONT = 1<<7, // PSType42 wrapper for an SFNT_TTF
+ ANY_SFNT = SFNT_TTF | SFNT_CFF,
+ ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB,
+ ANY_FONT = 0xFF
+ };
+
+ bool LoadFont( FontType eInFontType,
+ const unsigned char* pFontBytes, int nByteLength );
+ bool LoadFont( vcl::_TrueTypeFont* pSftTrueTypeFont );
+
+ bool CreateFontSubset( int nOutFontTypeMask,
+ FILE* pOutFile, const char* pOutFontName,
+ const long* pReqGlyphIds, const sal_uInt8* pEncodedIds,
+ int nReqGlyphCount, sal_Int32* pOutGlyphWidths = NULL );
+
+public: // TODO: make subsetter results private and provide accessor methods instead
+ // subsetter-provided subset details needed by e.g. Postscript or PDF
+ String m_aPSName;
+ int m_nAscent; // all metrics in PS font units
+ int m_nDescent;
+ int m_nCapHeight;
+ Rectangle m_aFontBBox;
+ FontType m_nFontType; // font-type of subset result
+
+private:
+ // input-font-specific details
+ unsigned const char* mpInFontBytes;
+ int mnInByteLength;
+ FontType meInFontType; // allowed mask of input font-types
+ vcl::_TrueTypeFont* mpSftTTFont;
+
+ // subset-request details
+ int mnReqFontTypeMask; // allowed subset-target font types
+ FILE* mpOutFile;
+ const char* mpReqFontName;
+ const long* mpReqGlyphIds;
+ const sal_uInt8* mpReqEncodedIds;
+ int mnReqGlyphCount;
+
+protected:
+ bool CreateFontSubsetFromCff( sal_Int32* pOutGlyphWidths = NULL );
+ bool CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths = NULL );
+ bool CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths = NULL );
+};
+
+#endif // _SV_FONTSUBSET_HXX
+
diff --git a/vcl/inc/vcl/gdimtf.hxx b/vcl/inc/vcl/gdimtf.hxx
index 62439d4d4613..c53460d35584 100644
--- a/vcl/inc/vcl/gdimtf.hxx
+++ b/vcl/inc/vcl/gdimtf.hxx
@@ -164,6 +164,14 @@ public:
void Scale( double fScaleX, double fScaleY );
void Scale( const Fraction& rScaleX, const Fraction& rScaleY );
void Rotate( long nAngle10 );
+ /* get the bound rect of the contained actions
+ * caveats:
+ * - clip actions will limit the contained actions,
+ * but the current clipregion of the passed OutputDevice will not
+ * - coordinates of actions will be transformed to preferred mapmode
+ * - the returned rectangle is relative to the preferred mapmode of the metafile
+ */
+ Rectangle GetBoundRect( OutputDevice& i_rReference );
void Adjust( short nLuminancePercent = 0, short nContrastPercent = 0,
short nChannelRPercent = 0, short nChannelGPercent = 0,
diff --git a/vcl/inc/vcl/glyphcache.hxx b/vcl/inc/vcl/glyphcache.hxx
index 637feee34839..33a7c80b7746 100644
--- a/vcl/inc/vcl/glyphcache.hxx
+++ b/vcl/inc/vcl/glyphcache.hxx
@@ -50,6 +50,7 @@ struct ImplKernPairData;
namespace basegfx { class B2DPolyPolygon; }
class RawBitmap;
+class CmapResult;
#include <vcl/outfont.hxx>
@@ -189,7 +190,7 @@ public:
virtual void FetchFontMetric( ImplFontMetricData&, long& rFactor ) const = 0;
virtual ULONG GetKernPairs( ImplKernPairData** ) const { return 0; }
virtual int GetGlyphKernValue( int, int ) const { return 0; }
- virtual ULONG GetFontCodeRanges( sal_uInt32* ) const { return 0; }
+ virtual bool GetFontCodeRanges( CmapResult& ) const { return false; }
Point TransformPoint( const Point& ) const;
GlyphData& GetGlyphData( int nGlyphIndex );
diff --git a/vcl/inc/vcl/graph.hxx b/vcl/inc/vcl/graph.hxx
index f56c55b7db42..5f5fa8eff6ce 100644
--- a/vcl/inc/vcl/graph.hxx
+++ b/vcl/inc/vcl/graph.hxx
@@ -53,6 +53,36 @@ class OutputDevice;
class Font;
class GfxLink;
+class VCL_DLLPUBLIC GraphicConversionParameters
+{
+private:
+ Size maSizePixel; // default is (0,0)
+
+ // bitfield
+ unsigned mbUnlimitedSize : 1; // default is false
+ unsigned mbAntiAliase : 1; // default is false
+ unsigned mbSnapHorVerLines : 1; // default is false
+
+public:
+ GraphicConversionParameters(
+ const Size& rSizePixel = Size(),
+ bool bUnlimitedSize = false,
+ bool bAntiAliase = false,
+ bool bSnapHorVerLines = false)
+ : maSizePixel(rSizePixel),
+ mbUnlimitedSize(bUnlimitedSize),
+ mbAntiAliase(bAntiAliase),
+ mbSnapHorVerLines(bSnapHorVerLines)
+ {
+ }
+
+ // data read access
+ const Size getSizePixel() const { return maSizePixel; }
+ bool getUnlimitedSize() const { return mbUnlimitedSize; }
+ bool getAntiAliase() const { return mbAntiAliase; }
+ bool getSnapHorVerLines() const { return mbSnapHorVerLines; }
+};
+
class VCL_DLLPUBLIC Graphic : public SvDataCopyStream
{
private:
@@ -96,12 +126,14 @@ public:
BOOL IsAlpha() const;
BOOL IsAnimated() const;
- Bitmap GetBitmap() const;
- Bitmap GetBitmap( const Size* pSizePixel ) const;
- BitmapEx GetBitmapEx() const;
- BitmapEx GetBitmapEx( const Size* pSizePixel ) const;
- Bitmap GetUnlimitedBitmap( const Size* pSizePixel ) const;
- BitmapEx GetUnlimitedBitmapEx( const Size* pSizePixel ) const;
+ // #i102089# Access of Bitmap potentially will have to rasterconvert the Graphic
+ // if it is a MetaFile. To be able to control this conversion it is necessary to
+ // allow giving parameters which control AntiAliasing and LineSnapping of the
+ // MetaFile when played. Defaults will use a no-AAed, not snapped conversion as
+ // before.
+ Bitmap GetBitmap(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const;
+ BitmapEx GetBitmapEx(const GraphicConversionParameters& rParameters = GraphicConversionParameters()) const;
+
Animation GetAnimation() const;
const GDIMetaFile& GetGDIMetaFile() const;
@@ -174,7 +206,7 @@ public:
BOOL IsSwapOut() const;
void SetLink( const GfxLink& );
- GfxLink GetLink();
+ GfxLink GetLink() const;
BOOL IsLink() const;
BOOL ExportNative( SvStream& rOStream ) const;
diff --git a/vcl/inc/vcl/graphite_adaptors.hxx b/vcl/inc/vcl/graphite_adaptors.hxx
new file mode 100644
index 000000000000..41ffa00b0f8f
--- /dev/null
+++ b/vcl/inc/vcl/graphite_adaptors.hxx
@@ -0,0 +1,154 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITEADAPTORS_HXX
+#define _SV_GRAPHITEADAPTORS_HXX
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Standard Library
+#include <stdexcept>
+// Platform
+
+#ifndef _SVWIN_H
+#include <tools/svwin.h>
+#endif
+
+#ifndef _SV_SVSYS_HXX
+#include <svsys.h>
+#endif
+
+#ifndef _SV_SALGDI_HXX
+#include <vcl/salgdi.hxx>
+#endif
+
+#ifndef _SV_SALLAYOUT_HXX
+#include <vcl/sallayout.hxx>
+#endif
+
+// Module
+#include "vcl/dllapi.h"
+
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+
+
+// Module type definitions and forward declarations.
+//
+#ifndef MSC
+// SAL/VCL types
+class ServerFont;
+class FreetypeServerFont;
+
+// Graphite types
+
+struct FontProperties : gr::FontProps
+{
+ FontProperties(const FreetypeServerFont & font) throw();
+};
+
+namespace grutils
+{
+ class GrFeatureParser;
+}
+
+// This class adapts the Sal font and graphics services to form required by
+// the Graphite engine.
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteFontAdaptor : public gr::Font
+{
+typedef std::map<const gr::gid16, std::pair<gr::Rect, gr::Point> > GlyphMetricMap;
+
+public:
+ static bool IsGraphiteEnabledFont(ServerFont &) throw();
+
+ GraphiteFontAdaptor(ServerFont & font, const sal_Int32 dpi_x, const sal_Int32 dpi_y);
+ GraphiteFontAdaptor(const GraphiteFontAdaptor &) throw();
+ ~GraphiteFontAdaptor() throw();
+
+ gr::Font * copyThis();
+
+ // Basic attribute accessors.
+ virtual float ascent();
+ virtual float descent();
+ virtual bool bold();
+ virtual bool italic();
+ virtual float height();
+ virtual unsigned int getDPIx();
+ virtual unsigned int getDPIy();
+
+ // Font access methods.
+ virtual const void * getTable(gr::fontTableId32 tableID, size_t * pcbSize);
+ virtual void getFontMetrics(float * ascent_out, float * descent_out = 0, float * em_square_out = 0);
+
+ // Glyph metrics.
+ virtual void getGlyphMetrics(gr::gid16 glyphID, gr::Rect & boundingBox, gr::Point & advances);
+
+ // Adaptor attributes.
+ const FontProperties & fontProperties() const throw();
+ FreetypeServerFont & font() const throw();
+ const grutils::GrFeatureParser * features() const { return mpFeatures; };
+
+private:
+ virtual void UniqueCacheInfo(std::wstring &, bool &, bool &);
+
+ FreetypeServerFont& mrFont;
+ FontProperties maFontProperties;
+ const unsigned int mnDpiX, mnDpiY;
+ const float mfAscent,
+ mfDescent,
+ mfEmUnits;
+ grutils::GrFeatureParser * mpFeatures;
+ GlyphMetricMap maGlyphMetricMap;
+};
+
+// Partial implementation of class GraphiteFontAdaptor.
+//
+inline const FontProperties & GraphiteFontAdaptor::fontProperties() const throw() {
+ return maFontProperties;
+}
+
+inline FreetypeServerFont & GraphiteFontAdaptor::font() const throw() {
+ return mrFont;
+}
+#endif // not MFC
+
+// Partial implementation of class TextSourceAdaptor.
+//
+//inline const ImplLayoutArgs & TextSourceAdaptor::layoutArgs() const throw() {
+// return _layout_args;
+//}
+
+
+#endif // _SV_GRAPHITEADAPTORS_HXX
diff --git a/vcl/inc/vcl/graphite_cache.hxx b/vcl/inc/vcl/graphite_cache.hxx
new file mode 100644
index 000000000000..5a537c5f1e48
--- /dev/null
+++ b/vcl/inc/vcl/graphite_cache.hxx
@@ -0,0 +1,265 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: Classes to cache Graphite Segments to try to improve
+// rendering performance.
+
+#ifndef GraphiteSegmentCache_h
+#define GraphiteSegmentCache_h
+
+#include <tools/solar.h>
+#include <rtl/ustring.h>
+
+#define GRCACHE_REUSE_VECTORS 1
+
+//#include <rope>
+#include <hash_map>
+
+class TextSourceAdaptor;
+/**
+* GrSegRecord stores a Graphite Segment and its associated text
+*/
+class GrSegRecord {
+public:
+ GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl);
+
+ ~GrSegRecord();
+
+ void reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl);
+
+ void clearVectors();
+ void clear();
+#ifdef GRCACHE_REUSE_VECTORS
+ void setGlyphVectors(long nWidth, GraphiteLayout::Glyphs & vGlyphs, std::vector<int> vCharDxs,
+ std::vector<int> & vChar2Base, std::vector<int> & vGlyph2Char)
+ {
+ clearVectors();
+ mnWidth = nWidth;
+ mvGlyphs.insert(mvGlyphs.begin(), vGlyphs.begin(), vGlyphs.end());
+ mvCharDxs.insert(mvCharDxs.begin(),vCharDxs.begin(),vCharDxs.end());
+ mvChar2BaseGlyph.insert(mvChar2BaseGlyph.begin(),vChar2Base.begin(),vChar2Base.end());
+ mvGlyph2Char.insert(mvGlyph2Char.begin(),vGlyph2Char.begin(),vGlyph2Char.end());
+ }
+#endif
+ gr::Segment * getSegment() { return m_seg; }
+ TextSourceAdaptor * getTextSrc() { return m_text; }
+ void unlock() { --m_lockCount; }
+ bool isRtl() const { return mbIsRtl; }
+#ifdef GRCACHE_REUSE_VECTORS
+ const long & width() const { return mnWidth; }
+ const GraphiteLayout::Glyphs & glyphs() const { return mvGlyphs; }
+ const std::vector<int> & charDxs() const { return mvCharDxs; }
+ const std::vector<int> & char2BaseGlyph() const { return mvChar2BaseGlyph; }
+ const std::vector<int> & glyph2Char() const { return mvGlyph2Char; }
+#endif
+private:
+ rtl::OUString * m_rope;
+ TextSourceAdaptor * m_text;
+ gr::Segment * m_seg;
+ const xub_Unicode * m_nextKey;
+ const xub_Unicode* m_pStr;
+ size_t m_startChar;
+ float m_fontScale;
+ long mnWidth;
+ GraphiteLayout::Glyphs mvGlyphs; // glyphs in display order
+ std::vector<int> mvCharDxs; // right hand side x offset of each glyph
+ std::vector<int> mvChar2BaseGlyph;
+ std::vector<int> mvGlyph2Char;
+ bool mbIsRtl;
+ int m_lockCount;
+ friend class GraphiteSegmentCache;
+};
+
+typedef std::hash_map<long, GrSegRecord*, std::hash<long> > GraphiteSegMap;
+typedef std::hash_multimap<size_t, GrSegRecord*> GraphiteRopeMap;
+typedef std::pair<GraphiteRopeMap::iterator, GraphiteRopeMap::iterator> GrRMEntry;
+
+/**
+* GraphiteSegmentCache contains the cached Segments for one particular font size
+*/
+class GraphiteSegmentCache
+{
+ enum {
+ // not really sure what good values are here,
+ // bucket size should be >> cache size
+ SEG_BUCKET_SIZE = 4096,
+ SEG_CACHE_SIZE = 255
+ };
+public:
+ GraphiteSegmentCache()
+ : m_segMap(SEG_BUCKET_SIZE),
+ m_oldestKey(NULL) {};
+ ~GraphiteSegmentCache()
+ {
+ m_ropeMap.clear();
+ GraphiteSegMap::iterator i = m_segMap.begin();
+ while (i != m_segMap.end())
+ {
+ GrSegRecord *r = i->second;
+ delete r;
+ ++i;
+ }
+ m_segMap.clear();
+ };
+ GrSegRecord * getSegment(ImplLayoutArgs & layoutArgs, bool bIsRtl)
+ {
+ GrSegRecord * found = NULL;
+ // try to find a segment starting at correct place, if not, try to find a
+ // match for the complete buffer
+ GraphiteSegMap::iterator iMap =
+ m_segMap.find(reinterpret_cast<long>(layoutArgs.mpStr +
+ layoutArgs.mnMinCharPos));
+ if (iMap != m_segMap.end())
+ {
+ found = iMap->second;
+ }
+ else
+ {
+ iMap = m_segMap.find(reinterpret_cast<long>(layoutArgs.mpStr));
+ if (iMap != m_segMap.end())
+ {
+ found = iMap->second;
+ }
+ }
+ if (found)
+ {
+ if (found->m_seg->startCharacter() <= layoutArgs.mnMinCharPos &&
+ found->m_seg->stopCharacter() >= layoutArgs.mnEndCharPos)
+ {
+ const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos
+ + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+ DBG_ASSERT(found && found->m_seg, "null entry in GraphiteSegmentCache");
+ // restore original start character, in case it has changed
+ found->m_seg->setTextSourceOffset(found->m_startChar);
+ // check that characters are the same, at least in the range of
+ // interest
+ // We could use substr and ==, but substr does a copy,
+ // so its probably faster to do it like this
+ for (size_t i = layoutArgs.mnMinCharPos; i < seg_char_limit; i++)
+ {
+ //if (!found->m_rope->match(rtl::OUString(layoutArgs.mpStr[i], layoutArgs.mnLength), i - found->m_seg->startCharacter()))
+ if (found->m_rope->getStr()[i-found->m_seg->startCharacter()] != layoutArgs.mpStr[i])
+ return NULL;
+ }
+ if (found->isRtl() != bIsRtl)
+ {
+ return NULL;
+ }
+// if (found->m_lockCount != 0)
+// OutputDebugString("Multple users of SegRecord!");
+ found->m_lockCount++;
+ }
+ else found = NULL;
+ }
+ else
+ {
+ // the pointers aren't the same, but we might still have the same text in a segment
+ // this is expecially needed when editing a large paragraph
+ // each edit changes the pointers, but if we don't reuse any segments it gets very
+ // slow.
+ const size_t seg_char_limit = min(layoutArgs.mnLength, layoutArgs.mnEndCharPos
+ + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+ rtl::OUString * rope = new rtl::OUString(layoutArgs.mpStr + layoutArgs.mnMinCharPos,
+ seg_char_limit - layoutArgs.mnMinCharPos);
+ if (!rope) return NULL;
+ size_t nHash = (*(rope)).hashCode();
+ GrRMEntry range = m_ropeMap.equal_range(nHash);
+ while (range.first != range.second)
+ {
+ found = range.first->second;
+ if (found->m_lockCount == 0)
+ {
+ if(rope->match(*(found->m_rope)))
+ {
+ // found, but the pointers are all wrong
+ found->m_seg->setTextSourceOffset(layoutArgs.mnMinCharPos);
+ // the switch is done in graphite_layout.cxx
+ //found->m_text->switchLayoutArgs(layoutArgs);
+ found->m_lockCount++;
+ break;
+ }
+ else
+ found = NULL;
+ }
+ else
+ found = NULL;
+ ++(range.first);
+ }
+ delete rope;
+ }
+ return found;
+ };
+ GrSegRecord * cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl);
+private:
+ GraphiteSegMap m_segMap;
+ GraphiteRopeMap m_ropeMap;
+ const xub_Unicode * m_oldestKey;
+ const xub_Unicode * m_prevKey;
+};
+
+typedef std::hash_map<int, GraphiteSegmentCache *, std::hash<int> > GraphiteCacheMap;
+
+/**
+* GraphiteCacheHandler maps a particular font, style, size to a GraphiteSegmentCache
+*/
+class GraphiteCacheHandler
+{
+public:
+ GraphiteCacheHandler() : m_cacheMap(255) {};
+ ~GraphiteCacheHandler()
+ {
+ GraphiteCacheMap::iterator i = m_cacheMap.begin();
+ while (i != m_cacheMap.end())
+ {
+ GraphiteSegmentCache *r = i->second;
+ delete r;
+ ++i;
+ }
+ m_cacheMap.clear();
+ };
+
+ static GraphiteCacheHandler instance;
+
+ GraphiteSegmentCache * getCache(sal_Int32 & fontHash)
+ {
+ if (m_cacheMap.count(fontHash) > 0)
+ {
+ return m_cacheMap.find(fontHash)->second;
+ }
+ GraphiteSegmentCache *pCache = new GraphiteSegmentCache();
+ m_cacheMap[fontHash] = pCache;
+ return pCache;
+ }
+private:
+ GraphiteCacheMap m_cacheMap;
+};
+
+#endif
+
diff --git a/vcl/inc/vcl/graphite_features.hxx b/vcl/inc/vcl/graphite_features.hxx
new file mode 100644
index 000000000000..6cfe5dfca0fd
--- /dev/null
+++ b/vcl/inc/vcl/graphite_features.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description:
+// Parse a string of features specified as ; separated pairs.
+// e.g.
+// 1001=1&2002=2&fav1=0
+
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/GrFeature.h>
+
+namespace grutils
+{
+
+ class GrFeatureParser
+ {
+ public:
+ enum { MAX_FEATURES = 64 };
+ static const char FEAT_PREFIX;
+ static const char FEAT_SEPARATOR;
+ static const char FEAT_ID_VALUE_SEPARATOR;
+ static const std::string ISO_LANG;
+ GrFeatureParser(gr::Font & font, const std::string features, const std::string lang);
+ GrFeatureParser(gr::Font & font, const std::string lang);
+ GrFeatureParser(const GrFeatureParser & copy);
+ ~GrFeatureParser();
+ size_t getFontFeatures(gr::FeatureSetting settings[MAX_FEATURES]) const;
+ bool parseErrors() { return mbErrors; };
+ static bool isValid(gr::Font & font, gr::FeatureSetting & setting);
+ gr::isocode getLanguage() const { return maLang; };
+ bool hasLanguage() const { return (maLang.rgch[0] != '\0'); }
+ sal_Int32 hashCode() const;
+ private:
+ void setLang(gr::Font & font, const std::string & lang);
+ bool isCharId(const std::string & id, size_t offset, size_t length);
+ int getCharId(const std::string & id, size_t offset, size_t length);
+ int getIntValue(const std::string & id, size_t offset, size_t length);
+ size_t mnNumSettings;
+ gr::isocode maLang;
+ bool mbErrors;
+ gr::FeatureSetting maSettings[64];
+ };
+
+ union FeatId
+ {
+ gr::featid num;
+ unsigned char label[5];
+ };
+}
diff --git a/vcl/inc/vcl/graphite_layout.hxx b/vcl/inc/vcl/graphite_layout.hxx
new file mode 100644
index 000000000000..2ec3bc4c2391
--- /dev/null
+++ b/vcl/inc/vcl/graphite_layout.hxx
@@ -0,0 +1,167 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITELAYOUT_HXX
+#define _SV_GRAPHITELAYOUT_HXX
+// Description: An implementation of the SalLayout interface that uses the
+// Graphite engine.
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+#define GRCACHE 1
+
+// Standard Library
+#include <memory>
+#include <vector>
+#include <utility>
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/GrConstants.h>
+#include <graphite/GrAppData.h>
+#include <graphite/SegmentAux.h>
+// Platform
+#include <vcl/sallayout.hxx>
+#include <vcl/dllapi.h>
+// Module
+
+// For backwards compatibility with 2.4.x
+#if (SUPD == 680)
+typedef sal_Int32 sal_GlyphId;
+#endif
+
+
+// Module type definitions and forward declarations.
+//
+class TextSourceAdaptor;
+class GraphiteFontAdaptor;
+class GrSegRecord;
+// SAL/VCL types
+class ServerFont;
+// Graphite types
+namespace gr { class Segment; class GlyphIterator; }
+namespace grutils { class GrFeatureParser; }
+
+// This class uses the SIL Graphite engine to provide complex text layout services to the VCL
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteLayout : public SalLayout
+{
+public:
+ class Glyphs : public std::vector<GlyphItem>
+ {
+ public:
+ typedef std::pair<Glyphs::const_iterator, Glyphs::const_iterator> iterator_pair_t;
+
+ void fill_from(gr::Segment & rSeg, ImplLayoutArgs & rArgs,
+ bool bRtl, long &rWidth, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs);
+ void move_glyph(Glyphs::iterator, long dx);
+
+ const_iterator cluster_base(const_iterator) const;
+ iterator_pair_t neighbour_clusters(const_iterator) const;
+ private:
+ std::pair<float,float> appendCluster(gr::Segment & rSeg, ImplLayoutArgs & rArgs,
+ bool bRtl, int nFirstCharInCluster, int nNextChar,
+ int nFirstGlyphInCluster, int nNextGlyph, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs, long & rDXOffset);
+ void append(gr::Segment & rSeg, ImplLayoutArgs & rArgs, gr::GlyphInfo & rGi, float nextGlyphOrigin, float fScaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs, long & rDXOffset, bool bIsBase);
+ };
+
+ mutable Glyphs mvGlyphs;
+ void clear();
+
+private:
+ TextSourceAdaptor * mpTextSrc; // Text source.
+ gr::LayoutEnvironment maLayout;
+ const gr::Font &mrFont;
+ long mnWidth;
+ std::vector<int> mvCharDxs;
+ std::vector<int> mvChar2BaseGlyph;
+ std::vector<int> mvGlyph2Char;
+ float mfScaling;
+ const grutils::GrFeatureParser * mpFeatures;
+
+public:
+ GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * features = NULL) throw();
+
+ // used by upper layers
+ virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout
+ // split into two stages to allow dc to be restored on the segment
+#ifdef GRCACHE
+ gr::Segment * CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pRecord = NULL);
+ bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord);
+#else
+ gr::Segment * CreateSegment(ImplLayoutArgs& rArgs);
+ bool LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment);
+#endif
+
+ virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting positions
+
+ // methods using string indexing
+ virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const;
+ virtual long FillDXArray( sal_Int32* pDXArray ) const;
+ virtual void ApplyDXArray(ImplLayoutArgs &rArgs, std::vector<int> & rDeltaWidth);
+
+ virtual void GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const;
+
+ // methods using glyph indexing
+ virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&,
+ sal_Int32* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const;
+
+ // used by glyph+font+script fallback
+ virtual void MoveGlyph( int nStart, long nNewXPos );
+ virtual void DropGlyph( int nStart );
+ virtual void Simplify( bool bIsBase );
+
+ // Dummy implementation so layout can be shared between Linux/Windows
+ virtual void DrawText(SalGraphics&) const {};
+
+ virtual ~GraphiteLayout() throw();
+ void SetFeatures(grutils::GrFeatureParser * aFeature) { mpFeatures = aFeature; }
+ void SetFontScale(float s) { mfScaling = s; };
+ const TextSourceAdaptor * textSrc() const { return mpTextSrc; };
+ virtual sal_GlyphId getKashidaGlyph(int & width) = 0;
+ void kashidaJustify(std::vector<int> & rDeltaWidth, sal_GlyphId, int width);
+
+ static const int EXTRA_CONTEXT_LENGTH;
+private:
+ int glyph_to_char(Glyphs::iterator);
+ std::pair<int,int> glyph_to_chars(const GlyphItem &) const;
+
+ std::pair<long,long> caret_positions(size_t) const;
+};
+
+
+
+#endif // _SV_GRAPHITELAYOUT_HXX
diff --git a/vcl/inc/vcl/graphite_serverfont.hxx b/vcl/inc/vcl/graphite_serverfont.hxx
new file mode 100644
index 000000000000..d9e6670df79b
--- /dev/null
+++ b/vcl/inc/vcl/graphite_serverfont.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITESERVERFONT_HXX
+#define _SV_GRAPHITESERVERFONT_HXX
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+#ifndef MSC
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_adaptors.hxx>
+
+// Modules
+
+class VCL_DLLPUBLIC GraphiteLayoutImpl : public GraphiteLayout
+{
+public:
+ GraphiteLayoutImpl(const gr::Font & font, const grutils::GrFeatureParser * features, GraphiteFontAdaptor * pFont) throw()
+ : GraphiteLayout(font, features), mpFont(pFont) {};
+ virtual ~GraphiteLayoutImpl() throw() {};
+ virtual sal_GlyphId getKashidaGlyph(int & width);
+private:
+ GraphiteFontAdaptor * mpFont;
+};
+
+// This class implments the server font specific parts.
+// @author tse
+//
+class VCL_DLLPUBLIC GraphiteServerFontLayout : public ServerFontLayout
+{
+private:
+ mutable GraphiteFontAdaptor * mpFont;
+ // mutable so that the DrawOffset/DrawBase can be set
+ mutable GraphiteLayoutImpl maImpl;
+public:
+ GraphiteServerFontLayout(GraphiteFontAdaptor * font) throw();
+
+ virtual bool LayoutText( ImplLayoutArgs& rArgs) { SalLayout::AdjustLayout(rArgs); return maImpl.LayoutText(rArgs); }; // first step of layout
+ virtual void AdjustLayout( ImplLayoutArgs& rArgs)
+ {
+ SalLayout::AdjustLayout(rArgs);
+ maImpl.DrawBase() = maDrawBase;
+ maImpl.DrawOffset() = maDrawOffset;
+ maImpl.AdjustLayout(rArgs);
+ };
+ virtual long GetTextWidth() const { return maImpl.GetTextWidth(); }
+ virtual long FillDXArray( sal_Int32* dxa ) const { return maImpl.FillDXArray(dxa); }
+ virtual int GetTextBreak( long mw, long ce, int f ) const { return maImpl.GetTextBreak(mw, ce, f); }
+ virtual void GetCaretPositions( int as, sal_Int32* cxa ) const { maImpl.GetCaretPositions(as, cxa); }
+
+ // used by display layers
+ virtual int GetNextGlyphs( int l, sal_GlyphId* gia, Point& p, int& s,
+ sal_Int32* gaa = NULL, int* cpa = NULL ) const
+ {
+ maImpl.DrawBase() = maDrawBase;
+ maImpl.DrawOffset() = maDrawOffset;
+ return maImpl.GetNextGlyphs(l, gia, p, s, gaa, cpa);
+ }
+
+ virtual void MoveGlyph( int nStart, long nNewXPos ) { maImpl.MoveGlyph(nStart, nNewXPos); };
+ virtual void DropGlyph( int nStart ) { maImpl.DropGlyph(nStart); };
+ virtual void Simplify( bool bIsBase ) { maImpl.Simplify(bIsBase); };
+
+ virtual ~GraphiteServerFontLayout() throw();
+
+// For use with PspGraphics
+ const sal_Unicode* getTextPtr() const;
+ int getMinCharPos() const { return mnMinCharPos; }
+ int getMaxCharPos() const { return mnEndCharPos; }
+};
+
+
+
+#endif
+#endif //_SV_GRAPHITESERVERFONT_HXX
diff --git a/vcl/inc/vcl/impfont.hxx b/vcl/inc/vcl/impfont.hxx
index 90d8793f513f..e2b1889e8e0e 100644
--- a/vcl/inc/vcl/impfont.hxx
+++ b/vcl/inc/vcl/impfont.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: impfont.hxx,v $
- * $Revision: 1.3.134.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -140,14 +137,15 @@ public:
// - ImplFontCharMap -
// -------------------
+class CmapResult;
+
class VCL_DLLPUBLIC ImplFontCharMap
{
public:
- ImplFontCharMap( int nRangePairs,
- const sal_uInt32* pRangeCodes,
- const int* pStartGlyphs = NULL );
+ explicit ImplFontCharMap( const CmapResult& );
+
+ static ImplFontCharMap* GetDefaultMap( bool bSymbols=false);
-static ImplFontCharMap* GetDefaultMap();
bool IsDefaultMap() const;
bool HasChar( sal_uInt32 ) const;
int CountCharsInRange( sal_uInt32 cMin, sal_uInt32 cMax ) const;
@@ -165,34 +163,46 @@ static ImplFontCharMap* GetDefaultMap();
void AddReference();
void DeReference();
- int GetGlyphIndex( sal_uInt32 );
+ int GetGlyphIndex( sal_uInt32 ) const;
private:
- ~ImplFontCharMap();
+ /*virtual*/ ~ImplFontCharMap();
int ImplFindRangeIndex( sal_uInt32 ) const;
// prevent assignment and copy construction
- ImplFontCharMap( const ImplFontCharMap& );
+ explicit ImplFontCharMap( const ImplFontCharMap& );
void operator=( const ImplFontCharMap& );
private:
const sal_uInt32* mpRangeCodes; // pairs of StartCode/(EndCode+1)
- const int* mpStartGlyphs; // index of the first glyph of the ranges
+ const int* mpStartGlyphs; // range-specific mapper to glyphs
+ const USHORT* mpGlyphIds; // individual glyphid mappings
int mnRangeCount;
int mnCharCount;
int mnRefCount;
};
// CmapResult is a normalized version of the many CMAP formats
-struct CmapResult
+class
+#ifdef UNX
+ VCL_DLLPUBLIC // vcl-plugins need it
+#endif // UNX
+CmapResult
{
- sal_uInt32* mpPairCodes;
- int* mpStartGlyphs;
- int mnPairCount;
- bool mbRecoded;
- bool mbSymbolic;
+public:
+ explicit CmapResult( bool bSymbolic = false,
+ const sal_uInt32* pRangeCodes = NULL, int nRangeCount = 0,
+ const int* pStartGlyphs = 0, const USHORT* pGlyphIds = NULL );
+
+ const sal_uInt32* mpRangeCodes;
+ const int* mpStartGlyphs;
+ const USHORT* mpGlyphIds;
+ int mnRangeCount;
+ bool mbSymbolic;
+ bool mbRecoded;
};
bool ParseCMAP( const unsigned char* pRawData, int nRawLength, CmapResult& );
#endif // _SV_IMPFONT_HXX
+
diff --git a/vcl/inc/vcl/impgraph.hxx b/vcl/inc/vcl/impgraph.hxx
index 34b61a5fe21c..3b36173891ae 100644
--- a/vcl/inc/vcl/impgraph.hxx
+++ b/vcl/inc/vcl/impgraph.hxx
@@ -55,6 +55,7 @@ struct ImpSwapInfo
class OutputDevice;
class GfxLink;
struct ImpSwapFile;
+class GraphicConversionParameters;
class ImpGraphic
{
@@ -102,8 +103,8 @@ private:
BOOL ImplIsAlpha() const;
BOOL ImplIsAnimated() const;
- Bitmap ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) const;
- BitmapEx ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited ) const;
+ Bitmap ImplGetBitmap(const GraphicConversionParameters& rParameters) const;
+ BitmapEx ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const;
Animation ImplGetAnimation() const;
const GDIMetaFile& ImplGetGDIMetaFile() const;
diff --git a/vcl/inc/vcl/outdev.hxx b/vcl/inc/vcl/outdev.hxx
index 3f821f995a51..f4e42846dd5e 100644
--- a/vcl/inc/vcl/outdev.hxx
+++ b/vcl/inc/vcl/outdev.hxx
@@ -563,6 +563,20 @@ public:
// tells whether this output device is RTL in an LTR UI or LTR in a RTL UI
SAL_DLLPRIVATE bool ImplIsAntiparallel() const ;
+ // #i101491#
+ // Helper which holds the old line geometry creation and is extended to use AA when
+ // switched on. Advantage is that line geometry is only temporarily used for paint
+ SAL_DLLPRIVATE void ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo);
+
+ // #i101491#
+ // Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon
+ // without MetaFile processing
+ SAL_DLLPRIVATE void ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly);
+
+ // #i101491#
+ // Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool. Contains no AA check.
+ SAL_DLLPRIVATE bool ImpTryDrawPolyLineDirect(const basegfx::B2DPolygon& rB2DPolygon, double fLineWidth, basegfx::B2DLineJoin eLineJoin);
+
protected:
OutputDevice();
@@ -655,20 +669,20 @@ public:
void GetKerningPairs( ULONG nPairs, KerningPair* pKernPairs ) const;
BOOL GetTextBoundRect( Rectangle& rRect,
- const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
- xub_StrLen nLen = STRING_LEN ) const;
+ const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0, xub_StrLen nLen = STRING_LEN,
+ ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
BOOL GetTextOutline( PolyPolygon&,
const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE,
- const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const;
+ ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
BOOL GetTextOutlines( PolyPolyVector&,
const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE,
- const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const;
+ ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
BOOL GetTextOutlines( ::basegfx::B2DPolyPolygonVector&,
const String& rStr, xub_StrLen nBase = 0, xub_StrLen nIndex = 0,
xub_StrLen nLen = STRING_LEN, BOOL bOptimize = TRUE,
- const ULONG nWidth = 0, const sal_Int32* pDXArray = NULL ) const;
+ ULONG nLayoutWidth = 0, const sal_Int32* pDXArray = NULL ) const;
BOOL GetGlyphBoundRects( const Point& rOrigin, const String& rStr, int nIndex,
int nLen, int nBase, MetricVector& rVector );
diff --git a/vcl/inc/vcl/outfont.hxx b/vcl/inc/vcl/outfont.hxx
index 86a5e59f6345..88316130cc3a 100644
--- a/vcl/inc/vcl/outfont.hxx
+++ b/vcl/inc/vcl/outfont.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: outfont.hxx,v $
- * $Revision: 1.6.14.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -407,17 +404,5 @@ private:
ImplMultiTextLineInfo& operator=( const ImplMultiTextLineInfo& );
};
-#define SAL_FONTSUBSETINFO_TYPE_TRUETYPE 0
-#define SAL_FONTSUBSETINFO_TYPE_TYPE1 1
-
-struct FontSubsetInfo
-{
- String m_aPSName;
- int m_nFontType;
- int m_nAscent; // all lengths in PS font units
- int m_nDescent;
- int m_nCapHeight;
- Rectangle m_aFontBBox;
-};
-
#endif // _SV_OUTFONT_HXX
+
diff --git a/vcl/inc/vcl/printergfx.hxx b/vcl/inc/vcl/printergfx.hxx
index 3bb242c802dd..e34a1ce78001 100644
--- a/vcl/inc/vcl/printergfx.hxx
+++ b/vcl/inc/vcl/printergfx.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: printergfx.hxx,v $
- * $Revision: 1.19.18.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -32,6 +29,7 @@
#define _PSPRINT_PRINTERGFX_HXX_
#include "vcl/helper.hxx"
+#include "vcl/sallayout.hxx"
#include "osl/file.hxx"
#include "tools/gen.hxx"
@@ -325,7 +323,7 @@ public:
const sal_Int32* pDeltaArray = NULL);
void drawGlyphs( const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray );
@@ -428,7 +426,7 @@ public:
// for CTL
void DrawGlyphs( const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray );
diff --git a/vcl/inc/vcl/salgdi.hxx b/vcl/inc/vcl/salgdi.hxx
index 5cf6e70f5114..55f8a0d03deb 100644
--- a/vcl/inc/vcl/salgdi.hxx
+++ b/vcl/inc/vcl/salgdi.hxx
@@ -53,7 +53,7 @@ class ImplFontCharMap;
class SalLayout;
class ImplLayoutArgs;
class Rectangle;
-struct FontSubsetInfo;
+class FontSubsetInfo;
class OutputDevice;
class ServerFontLayout;
struct SystemGraphicsData;
diff --git a/vcl/inc/vcl/sallayout.hxx b/vcl/inc/vcl/sallayout.hxx
index 3141381041c8..6934cdc182b6 100755
--- a/vcl/inc/vcl/sallayout.hxx
+++ b/vcl/inc/vcl/sallayout.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: sallayout.hxx,v $
- * $Revision: 1.8.54.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/inc/vcl/settings.hxx b/vcl/inc/vcl/settings.hxx
index 5ee27e3aeb31..a7cd61477519 100644
--- a/vcl/inc/vcl/settings.hxx
+++ b/vcl/inc/vcl/settings.hxx
@@ -139,7 +139,7 @@ private:
ULONG mnMenuDelay;
ULONG mnFollow;
USHORT mnMiddleButtonAction;
- BOOL mbNoWheelActionWithoutFocus;
+ USHORT mnWheelBehavior;
BOOL mbAlign1;
};
@@ -158,6 +158,10 @@ private:
#define MOUSE_MIDDLE_AUTOSCROLL ((USHORT)1)
#define MOUSE_MIDDLE_PASTESELECTION ((USHORT)2)
+#define MOUSE_WHEEL_DISABLE ((USHORT)0)
+#define MOUSE_WHEEL_FOCUS_ONLY ((USHORT)1)
+#define MOUSE_WHEEL_ALWAYS ((USHORT)2)
+
class VCL_DLLPUBLIC MouseSettings
{
void CopyData();
@@ -257,10 +261,10 @@ public:
USHORT GetMiddleButtonAction() const
{ return mpData->mnMiddleButtonAction; }
- void SetNoWheelActionWithoutFocus( BOOL bAction )
- { CopyData(); mpData->mbNoWheelActionWithoutFocus = bAction; }
- BOOL GetNoWheelActionWithoutFocus() const
- { return mpData->mbNoWheelActionWithoutFocus; }
+ void SetWheelBehavior( USHORT nBehavior )
+ { CopyData(); mpData->mnWheelBehavior = nBehavior; }
+ USHORT GetWheelBehavior() const
+ { return mpData->mnWheelBehavior; }
const MouseSettings& operator =( const MouseSettings& rSet );
diff --git a/vcl/inc/vcl/sndstyle.hxx b/vcl/inc/vcl/sndstyle.hxx
index 2fc568a5e86d..55255171ad9f 100644
--- a/vcl/inc/vcl/sndstyle.hxx
+++ b/vcl/inc/vcl/sndstyle.hxx
@@ -44,6 +44,6 @@ typedef USHORT SoundType;
#define SOUND_ERROR ((SoundType)3)
#define SOUND_QUERY ((SoundType)4)
-#define SOUND_DISABLE (SOUND_DEFAULT)
+#define SOUND_DISABLE ((SoundType)5)
#endif // _SV_SNDSTYLE_HXX
diff --git a/vcl/inc/vcl/vclevent.hxx b/vcl/inc/vcl/vclevent.hxx
index 88ad880e26ab..a28127dd6f82 100644
--- a/vcl/inc/vcl/vclevent.hxx
+++ b/vcl/inc/vcl/vclevent.hxx
@@ -146,6 +146,10 @@ class Menu;
#define VCLEVENT_ROADMAP_ITEMSELECTED 1171
#define VCLEVENT_TOOLBOX_FORMATCHANGED 1172 // request new layout
#define VCLEVENT_COMBOBOX_SETTEXT 1173
+// --> OD 2009-04-01 #i92103#
+#define VCLEVENT_LISTBOX_ENTRY_EXPANDED 1174
+#define VCLEVENT_LISTBOX_ENTRY_COLLAPSED 1175
+// <--
// VclMenuEvent
#define VCLEVENT_MENU_ACTIVATE 1200
diff --git a/vcl/prj/build.lst b/vcl/prj/build.lst
index aea5211d074a..52b444164029 100644
--- a/vcl/prj/build.lst
+++ b/vcl/prj/build.lst
@@ -1,4 +1,4 @@
-vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL
+vc vcl : l10n apple_remote BOOST:boost rsc sot ucbhelper unotools ICU:icu GRAPHITE:graphite i18npool i18nutil unoil ridljar X11_EXTENSIONS:x11_extensions offuh basegfx basebmp tools transex3 icc SO:print_header cpputools NULL
vc vcl usr1 - all vc_mkout NULL
vc vcl\inc nmake - all vc_inc NULL
vc vcl\source\glyphs nmake - all vc_glyphs vc_inc NULL
@@ -32,6 +32,7 @@ vc vcl\unx\gtk\window nmake - u vc__gtkw vc_inc NULL
vc vcl\unx\gtk\gdi nmake - u vc__gtkg vc_inc NULL
vc vcl\unx\headless nmake - u vc__hl vc_inc NULL
vc vcl\unx\kde nmake - u vc__kde vc_inc NULL
+vc vcl\unx\kde4 nmake - u vc__kde4 vc_inc NULL
vc vcl\aqua\source\a11y nmake - u vc__aquy vc_inc NULL
vc vcl\aqua\source\app nmake - u vc__appa vc_inc NULL
vc vcl\aqua\source\gdi nmake - u vc__gdia vc_inc NULL
@@ -41,6 +42,6 @@ vc vcl\mac\source\app nmake - m vc__appm vc_inc NULL
vc vcl\mac\source\gdi nmake - m vc__gdim vc_inc NULL
vc vcl\mac\source\window nmake - m vc__winm vc_inc NULL
vc vcl\mac\source\src nmake - m vc__srcm vc_inc NULL
-vc vcl\util nmake - all vc_util vc__plug.u vc__aquy.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
+vc vcl\util nmake - all vc_util vc__plug.u vc__aquy.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__appp.p vc__gdia.u vc__gdim.m vc__gdiu.u vc__gdiw.w vc__gdip.p vc__srcm.m vc__srcw.w vc__srcp.p vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__winp.p vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc__kde4.u vc__hl.u vc__ftmu.u vc__prgu.u vc__prnu.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs vc_fts vc_components NULL
vc vcl\util\linksvp nmake - u vc_lsvp vc_util NULL
vc vcl\workben nmake - all vc_wrkb vc_util vc_salmain NULL
diff --git a/vcl/source/app/dbggui.cxx b/vcl/source/app/dbggui.cxx
index c8567264b9b9..36d0991c7640 100644
--- a/vcl/source/app/dbggui.cxx
+++ b/vcl/source/app/dbggui.cxx
@@ -1782,7 +1782,7 @@ void DbgDialogTest( Window* pWindow )
i++;
}
- delete pRectAry;
+ delete [] pRectAry;
}
// =======================================================================
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 12213c25a64f..444f1f58c8fb 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -189,7 +189,7 @@ ImplMouseData::ImplMouseData()
mnActionDelay = 250;
mnMenuDelay = 150;
mnFollow = MOUSE_FOLLOW_MENU | MOUSE_FOLLOW_DDLIST;
- mbNoWheelActionWithoutFocus = FALSE;
+ mnWheelBehavior = MOUSE_WHEEL_FOCUS_ONLY;
}
// -----------------------------------------------------------------------
@@ -217,7 +217,7 @@ ImplMouseData::ImplMouseData( const ImplMouseData& rData )
mnActionDelay = rData.mnActionDelay;
mnMenuDelay = rData.mnMenuDelay;
mnFollow = rData.mnFollow;
- mbNoWheelActionWithoutFocus = rData.mbNoWheelActionWithoutFocus;
+ mnWheelBehavior = rData.mnWheelBehavior;
}
// -----------------------------------------------------------------------
@@ -308,7 +308,7 @@ BOOL MouseSettings::operator ==( const MouseSettings& rSet ) const
(mpData->mnActionDelay == rSet.mpData->mnActionDelay) &&
(mpData->mnMenuDelay == rSet.mpData->mnMenuDelay) &&
(mpData->mnFollow == rSet.mpData->mnFollow) &&
- (mpData->mbNoWheelActionWithoutFocus == rSet.mpData->mbNoWheelActionWithoutFocus) )
+ (mpData->mnWheelBehavior == rSet.mpData->mnWheelBehavior ) )
return TRUE;
else
return FALSE;
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 42abe3fd248a..49c7e5457da7 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -142,23 +142,19 @@ void ComboBox::ImplCalcEditHeight()
if ( !IsDropDownBox() )
mnDDHeight += 4;
- // FIXME: currently only on aqua; see if we can use this on other platforms
- if( ImplGetSVData()->maNWFData.mbNoFocusRects )
+ Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 10, 10 ) ) );
+ Region aBoundRegion, aContentRegion;
+ ImplControlValue aControlValue;
+ ControlType aType = IsDropDownBox() ? CTRL_COMBOBOX : CTRL_EDITBOX;
+ if( GetNativeControlRegion( aType, PART_ENTIRE_CONTROL,
+ aCtrlRegion,
+ CTRL_STATE_ENABLED,
+ aControlValue, rtl::OUString(),
+ aBoundRegion, aContentRegion ) )
{
- Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 10, 10 ) ) );
- Region aBoundRegion, aContentRegion;
- ImplControlValue aControlValue;
- ControlType aType = IsDropDownBox() ? CTRL_COMBOBOX : CTRL_EDITBOX;
- if( GetNativeControlRegion( aType, PART_ENTIRE_CONTROL,
- aCtrlRegion,
- CTRL_STATE_ENABLED,
- aControlValue, rtl::OUString(),
- aBoundRegion, aContentRegion ) )
- {
- const long nNCHeight = aBoundRegion.GetBoundRect().GetHeight();
- if( mnDDHeight < nNCHeight )
- mnDDHeight = sal::static_int_cast<USHORT>( nNCHeight );
- }
+ const long nNCHeight = aBoundRegion.GetBoundRect().GetHeight();
+ if( mnDDHeight < nNCHeight )
+ mnDDHeight = sal::static_int_cast<USHORT>( nNCHeight );
}
}
@@ -876,10 +872,19 @@ long ComboBox::Notify( NotifyEvent& rNEvt )
(rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL) &&
(rNEvt.GetWindow() == mpSubEdit) )
{
- if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() )
+ USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() );
+ if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS )
+ || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY )
+ && HasChildPathFocus()
+ )
+ )
+ {
nDone = mpImplLB->HandleWheelAsCursorTravel( *rNEvt.GetCommandEvent() );
+ }
else
+ {
nDone = 0; // don't eat this event, let the default handling happen (i.e. scroll the context)
+ }
}
return nDone ? nDone : Edit::Notify( rNEvt );
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx
index 66722b70eef8..a5e9ff1cc7d0 100644
--- a/vcl/source/control/lstbox.cxx
+++ b/vcl/source/control/lstbox.cxx
@@ -31,21 +31,21 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_vcl.hxx"
-#ifndef _SV_RC_H
-#include <tools/rc.h>
-#endif
-#include <vcl/svdata.hxx>
-#include <vcl/decoview.hxx>
-#include <vcl/event.hxx>
-#include <vcl/scrbar.hxx>
-#include <vcl/button.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/subedit.hxx>
-#include <vcl/ilstbox.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/combobox.hxx>
-#include <vcl/controllayout.hxx>
-#include <tools/debug.hxx>
+#include "tools/rc.h"
+
+#include "vcl/svdata.hxx"
+#include "vcl/decoview.hxx"
+#include "vcl/event.hxx"
+#include "vcl/scrbar.hxx"
+#include "vcl/button.hxx"
+#include "vcl/edit.hxx"
+#include "vcl/subedit.hxx"
+#include "vcl/ilstbox.hxx"
+#include "vcl/lstbox.hxx"
+#include "vcl/combobox.hxx"
+#include "vcl/controllayout.hxx"
+
+#include "tools/debug.hxx"
@@ -127,9 +127,7 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle )
GetBorder( nLeft, nTop, nRight, nBottom );
mnDDHeight = (USHORT)(GetTextHeight() + nTop + nBottom + 4);
- // FIXME: this is currently only on mac/aqua
- if( ImplGetSVData()->maNWFData.mbNoFocusRects &&
- IsNativeWidgetEnabled() &&
+ if( IsNativeWidgetEnabled() &&
IsNativeControlSupported( CTRL_LISTBOX, PART_ENTIRE_CONTROL ) )
{
ImplControlValue aControlValue;
@@ -650,6 +648,7 @@ void ListBox::Resize()
long nTop = 0;
long nBottom = aOutSz.Height();
+ // note: in case of no border, pBorder will actually be this
Window *pBorder = GetWindow( WINDOW_BORDER );
ImplControlValue aControlValue;
Point aPoint;
@@ -678,6 +677,17 @@ void ListBox::Resize()
// use the themes drop down size
Rectangle aContentRect = aContent.GetBoundRect();
+ if( ! (GetStyle() & WB_BORDER) && ImplGetSVData()->maNWFData.mbNoFocusRects )
+ {
+ // no border but focus ring behavior -> we have a problem; the
+ // native rect relies on the border to draw the focus
+ // let's do the best we can and center vertically, so it doesn't look
+ // completely wrong.
+ Size aSz( GetOutputSizePixel() );
+ long nDiff = aContentRect.Top() - (aSz.Height() - aContentRect.GetHeight())/2;
+ aContentRect.Top() -= nDiff;
+ aContentRect.Bottom() -= nDiff;
+ }
mpImplWin->SetPosSizePixel( aContentRect.TopLeft(), aContentRect.GetSize() );
}
else
@@ -959,10 +969,19 @@ long ListBox::PreNotify( NotifyEvent& rNEvt )
(rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL) &&
(rNEvt.GetWindow() == mpImplWin) )
{
- if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() )
+ USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() );
+ if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS )
+ || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY )
+ && HasChildPathFocus()
+ )
+ )
+ {
nDone = mpImplLB->HandleWheelAsCursorTravel( *rNEvt.GetCommandEvent() );
+ }
else
+ {
nDone = 0; // don't eat this event, let the default handling happen (i.e. scroll the context)
+ }
}
}
@@ -1264,6 +1283,26 @@ Size ListBox::CalcMinimumSize() const
else
{
aSz.Height() = mpImplLB->CalcSize( 1 ).Height();
+ if( aSz.Height() < mnDDHeight )
+ {
+ aSz.Height() = mnDDHeight;
+ // FIXME: this is currently only on mac/aqua
+ if( ImplGetSVData()->maNWFData.mbNoFocusRects &&
+ IsNativeWidgetEnabled() &&
+ const_cast<ListBox*>(this)->IsNativeControlSupported( CTRL_LISTBOX, PART_ENTIRE_CONTROL ) )
+ {
+ ImplControlValue aControlValue;
+ Region aCtrlRegion( Rectangle( (const Point&)Point(), Size( 20, mnDDHeight ) ) );
+ Region aBoundingRgn( aCtrlRegion );
+ Region aContentRgn( aCtrlRegion );
+ // adjust the size of the edit field
+ if( const_cast<ListBox*>(this)->GetNativeControlRegion( CTRL_LISTBOX, PART_ENTIRE_CONTROL,
+ aCtrlRegion, 0, aControlValue, rtl::OUString(), aBoundingRgn, aContentRgn) )
+ {
+ aSz.Height() = aContentRgn.GetBoundRect().GetHeight();
+ }
+ }
+ }
aSz.Width() = mpImplLB->GetMaxEntryWidth();
aSz.Width() += GetSettings().GetStyleSettings().GetScrollBarSize();
}
diff --git a/vcl/source/control/spinfld.cxx b/vcl/source/control/spinfld.cxx
index 3f8779dc2e90..0d656da40ba7 100644
--- a/vcl/source/control/spinfld.cxx
+++ b/vcl/source/control/spinfld.cxx
@@ -599,7 +599,12 @@ long SpinField::Notify( NotifyEvent& rNEvt )
{
if ( ( rNEvt.GetCommandEvent()->GetCommand() == COMMAND_WHEEL ) && !IsReadOnly() )
{
- if( ! GetSettings().GetMouseSettings().GetNoWheelActionWithoutFocus() || HasChildPathFocus() )
+ USHORT nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() );
+ if ( ( nWheelBehavior == MOUSE_WHEEL_ALWAYS )
+ || ( ( nWheelBehavior == MOUSE_WHEEL_FOCUS_ONLY )
+ && HasChildPathFocus()
+ )
+ )
{
const CommandWheelData* pData = rNEvt.GetCommandEvent()->GetWheelData();
if ( pData->GetMode() == COMMAND_WHEEL_SCROLL )
diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx
new file mode 100644
index 000000000000..7af7e7e9c9e0
--- /dev/null
+++ b/vcl/source/fontsubset/cff.cxx
@@ -0,0 +1,2418 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <cstdio>
+#include <cstring>
+#include <assert.h>
+
+#include <vcl/fontsubset.hxx>
+
+//#define IGNORE_HINTS
+
+typedef unsigned char U8;
+typedef unsigned short U16;
+typedef long long S64;
+
+typedef sal_Int32 GlyphWidth;
+
+#include <vector>
+typedef std::vector<int> IntVector;
+
+// ====================================================================
+
+static const char* pStringIds[] = {
+/*0*/ ".notdef", "space", "exclam", "quotedbl",
+ "numbersign", "dollar", "percent", "ampersand",
+ "quoteright", "parenleft", "parenright", "asterisk",
+ "plus", "comma", "hyphen", "period",
+/*16*/ "slash", "zero", "one", "two",
+ "three", "four", "five", "six",
+ "seven", "eight", "nine", "colon",
+ "semicolon", "less", "equal", "greater",
+/*32*/ "question", "at", "A", "B",
+ "C", "D", "E", "F",
+ "G", "H", "I", "J",
+ "K", "L", "M", "N",
+/*48*/ "O", "P", "Q", "R",
+ "S", "T", "U", "V",
+ "W", "X", "Y", "Z",
+ "bracketleft", "backslash", "bracketright", "asciicircum",
+/*64*/ "underscore", "quoteleft", "a", "b",
+ "c", "d", "e", "f",
+ "g", "h", "i", "j",
+ "k", "l", "m", "n",
+/*80*/ "o", "p", "q", "r",
+ "s", "t", "u", "v",
+ "w", "x", "y", "z",
+ "braceleft", "bar", "braceright", "asciitilde",
+/*96*/ "exclamdown", "cent", "sterlin", "fraction",
+ "yen", "florin", "section", "currency",
+ "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft",
+ "guilsinglright", "fi", "fl", "endash",
+/*112*/ "dagger", "daggerdbl", "periodcentered", "paragraph",
+ "bullet", "quotesinglbase", "quotedblbase", "quotedblright",
+ "guillemotright", "ellipsis", "perthousand", "questiondown",
+ "grave", "acute", "circumflex", "tilde",
+/*128*/ "macron", "breve", "dotaccent", "dieresis",
+ "ring", "cedilla", "hungarumlaut", "ogonek",
+ "caron", "endash", "AE", "ordfeminine",
+ "Lslash", "Oslash", "OE", "ordmasculine",
+/*144*/ "ae", "dotlessi", "lslash", "oslash",
+ "oe", "germandbls", "onesuperior", "logicalnot",
+ "mu", "trademark", "Eth", "onehalf",
+ "plusminus", "Thorn", "onequarter", "divide",
+/*160*/ "brokenbar", "degree", "thorn", "threequarters",
+ "twosuperior", "registered", "minus", "eth",
+ "multiply", "threesuperior", "copyright", "Aacute",
+ "Acircumflex", "Adieresis", "Agrave", "Aring",
+/*176*/ "Atilde", "Ccedilla", "Eacute", "Ecircumflex",
+ "Edieresis", "Egrave", "Iacute", "Icircumflex",
+ "Idieresis", "Igrave", "Ntilde", "Oacute",
+ "Ocircumflex", "Odieresis", "Ograve", "Otilde",
+/*192*/ "Scaron", "Uacute", "Ucircumflex", "Udieresis",
+ "Ugrave", "Yacute", "Ydieresis", "Zcaron",
+ "aacute", "acircumflex", "adieresis", "agrave",
+ "aring", "atilde", "ccedilla", "eacute",
+/*208*/ "ecircumflex", "edieresis", "egrave", "iacute",
+ "icircumflex", "idieresis", "igrave", "ntilde",
+ "oacute", "ocircumflex", "odieresis", "ograve",
+ "otilde", "scaron", "uacute", "ucircumflex",
+/*224*/ "udieresis", "ugrave", "yacute", "ydieresis",
+ "zcaron", "exclamsmall", "Hungarumlautsmall","dollaroldstyle",
+ "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior",
+ "parenrightsuperior","twodotenleader", "onedotenleader", "zerooldstyle",
+/*240*/ "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle",
+ "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle",
+ "nineoldstile", "commasuperior", "threequartersemdash","periodsuperior",
+ "questionsmall", "asuperior", "bsuperior", "centsuperior",
+/*256*/ "dsuperior", "esuperior", "isuperior", "lsuperior",
+ "msuperior", "nsuperior", "osuperior", "rsuperior",
+ "ssuperior", "tsuperior", "ff", "ffi",
+ "ffl", "parenleftinferior","parenrightinferior","Circumflexsmall",
+/*272*/ "hyphensuperior","Gravesmall", "Asmall", "Bsmall",
+ "Csmall", "Dsmall", "Esmall", "Fsmall",
+ "Gsmall", "Hsmall", "Ismall", "Jsmall",
+ "Ksmall", "Lsmall", "Msmall", "Nsmall",
+/*288*/ "Osmall", "Psmall", "Qsmall", "Rsmall",
+ "Ssmall", "Tsmall", "Usmall", "Vsmall",
+ "Wsmall", "Xsmall", "Ysmall", "Zsmall",
+ "colonmonetary", "onefitted", "rupia", "Tildesmall",
+/*304*/ "exclamdownsmall","centoldstyle", "Lslashsmall", "Scaronsmall",
+ "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall",
+ "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior",
+ "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall",
+/*320*/ "oneeight", "threeeights", "fiveeights", "seveneights",
+ "onethird", "twothirds", "zerosuperior", "foursuperior",
+ "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior",
+ "ninesuperior", "zeroinferior", "oneinferior", "twoinferior",
+/*336*/ "threeinferior","fourinferior", "fiveinferior", "sixinferior",
+ "seveninferior", "eightinferior", "nineinferior", "centinferior",
+ "dollarinferior", "periodinferior", "commainferior", "Agravesmall",
+ "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall",
+/*352*/ "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall",
+ "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall",
+ "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall",
+ "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall",
+/*368*/ "Otildesmall", "Odieressissmall", "OEsmall", "Oslashsmall",
+ "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall",
+ "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000",
+ "001.001", "001.002", "001.003", "Black",
+/*384*/ "Bold", "Book", "Light", "Medium",
+ "Regular", "Roman", "Semibold"
+};
+
+// --------------------------------------------------------------------
+
+#if 0 // TODO: use them
+static const char* pStdEncNames[] = {
+ "ISOAdobe", "Expert", "ExpertSubSet"
+};
+#endif
+
+// --------------------------------------------------------------------
+
+// TOP DICT keywords (also covers PRIV DICT keywords)
+static const char* pDictOps[] = {
+ "sVersion", "sNotice", "sFullName", "sFamilyName",
+ "sWeight", "aFontBBox", "dBlueValues", "dOtherBlues",
+ "dFamilyBlues", "dFamilyOtherBlues", "nStdHW", "nStdVW",
+ "xESC", "nUniqueID", "aXUID", "nCharset",
+ "nEncoding", "nCharStrings", "PPrivate", "nSubrs",
+ "nDefaultWidthX", "nNominalWidthX", NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ "shortint", "longint", "BCD", NULL
+};
+
+// --------------------------------------------------------------------
+
+// TOP DICT escapes (also covers PRIV DICT escapes)
+static const char* pDictEscs[] = {
+ "sCopyright", "bIsFixedPitch", "nItalicAngle", "nUnderlinePosition",
+ "nUnderlineThickness", "nPaintType", "tCharstringType", "aFontMatrix",
+ "nStrokeWidth", "nBlueScale", "nBlueShift", "nBlueFuzz",
+ "dStemSnapH", "dStemSnapV", "bForceBold", NULL,
+ NULL, "nLanguageGroup", "nExpansionFactor", "nInitialRandomSeed",
+ "nSyntheticBase", "sPostScript", "sBaseFontName", "dBaseFontBlend",
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, "rROS", "nCIDFontVersion",
+ "nCIDFontRevision", "nCIDFontType", "nCIDCount", "nUIDBase",
+ "nFDArray", "nFDSelect", "sFontName"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pType1Ops[] = {
+ NULL, "2hstem", NULL, "2vstem",
+ "1vmoveto", "Arlineto", "1hlineto", "1vlineto",
+ "Crrcurveto", "0closepath", "Lcallsubr", "0return",
+ "xT1ESC", "2hsbw", "0endchar", NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, "2rmoveto", "1hmoveto", NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, "4vhcurveto", "4hvcurveto"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pT1EscOps[] = {
+ "0dotsection", "6vstem3", "6hstem3", NULL,
+ NULL, NULL, "5seac", "4sbw",
+ NULL, "1abs", "2add", "2sub",
+ "2div", NULL, NULL, NULL,
+ "Gcallothersubr", "1pop", NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, "2setcurrentpoint"
+};
+
+// --------------------------------------------------------------------
+
+struct TYPE1OP
+{
+ enum OPS
+ {
+ HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5,
+ HLINETO=6, VLINETO=7, RCURVETO=8, CLOSEPATH=9,
+ CALLSUBR=10, RETURN=11, T1ESC=12, HSBW=13,
+ ENDCHAR=14, RMOVETO=21, HMOVETO=22, VHCURVETO=30,
+ HVCURVETO=31
+ };
+
+ enum ESCS
+ {
+ DOTSECTION=0, VSTEM3=1, HSTEM3=2, SEAC=6,
+ SBW=7, ABS=9, ADD=10, SUB=11,
+ DIV=12, CALLOTHERSUBR=16, POP=17, SETCURRENTPOINT=33
+ };
+};
+
+// --------------------------------------------------------------------
+
+static const char* pType2Ops[] = {
+ NULL, "hhstem", NULL, "vvstem",
+ "mvmoveto", "Arlineto", "Ehlineto", "Evlineto",
+ "Crrcurveto", NULL, "Lcallsubr", "Xreturn",
+ "xT2ESC", NULL, "eendchar", NULL,
+ NULL, NULL, "Hhstemhm", "Khintmask",
+ "Kcntrmask", "Mrmoveto", "mhmoveto", "Vvstemhm",
+ ".rcurveline", ".rlinecurve", ".vvcurveto", ".hhcurveto",
+ ".shortint", "Gcallgsubr", ".vhcurveto", ".hvcurveto"
+};
+
+// --------------------------------------------------------------------
+
+static const char* pT2EscOps[] = {
+ NULL, NULL, NULL, "2and",
+ "2or", "1not", NULL, NULL,
+ NULL, "1abs", "2add", "2sub",
+ "2div", NULL, "1neg", "2eq",
+ NULL, NULL, "1drop", NULL,
+ "1put", "1get", "4ifelse", "0random",
+ "2mul", NULL, "1sqrt", "1dup",
+ "2exch", "Iindex", "Rroll", NULL,
+ NULL, NULL, "7hflex", "Fflex",
+ "9hflex1", "fflex1"
+};
+
+// --------------------------------------------------------------------
+
+struct TYPE2OP
+{
+ enum OPS
+ {
+ HSTEM=1, VSTEM=3, VMOVETO=4, RLINETO=5,
+ HLINETO=6, VLINETO=7, RCURVETO=8, CALLSUBR=10,
+ RETURN=11, T2ESC=12, ENDCHAR=14, HSTEMHM=18,
+ HINTMASK=19, CNTRMASK=20, RMOVETO=21, HMOVETO=22,
+ VSTEMHM=23, RCURVELINE=24, RLINECURVE=25, VVCURVETO=26,
+ HHCURVETO=27, SHORTINT=28, CALLGSUBR=29, VHCURVETO=30,
+ HVCURVETO=31
+ };
+
+ enum ESCS
+ {
+ AND=3, OR=4, NOT=5, ABS=9,
+ ADD=10, SUB=11, DIV=12, NEG=14,
+ EQ=15, DROP=18, PUT=20, GET=21,
+ IFELSE=22, RANDOM=23, MUL=24, SQRT=26,
+ DUP=27, EXCH=28, INDEX=29, ROLL=30,
+ HFLEX=34, FLEX=35, HFLEX1=36, FLEX1=37
+ };
+};
+
+// ====================================================================
+
+struct CffGlobal
+{
+ explicit CffGlobal();
+
+ int mnNameIdxBase;
+ int mnNameIdxCount;
+ int mnStringIdxBase;
+ int mnStringIdxCount;
+ bool mbCIDFont;
+ int mnCharStrBase;
+ int mnCharStrCount;
+ int mnEncodingBase;
+ int mnCharsetBase;
+ int mnGlobalSubrBase;
+ int mnGlobalSubrCount;
+ int mnGlobalSubrBias;
+ int mnFDSelectBase;
+ int mnFontDictBase;
+ int mnFDAryCount;
+
+ IntVector maFontBBox;
+ //FloatVector maFontMatrix;
+
+ int mnFontNameSID;
+ int mnFullNameSID;
+ int mnFamilyNameSID;
+};
+
+// ====================================================================
+
+struct CffLocal
+{
+ explicit CffLocal();
+
+ int mnPrivDictBase;
+ int mnPrivDictSize;
+ int mnLocalSubrOffs;
+ int mnLocalSubrBase;
+ int mnLocalSubrCount;
+ int mnLocalSubrBias;
+ int mnNominalWidth;
+ int mnDefaultWidth;
+
+ // ATM hinting related values
+ int mnStemStdHW;
+ int mnStemStdVW;
+ IntVector maStemSnapH;
+ IntVector maStemSnapV;
+ IntVector maBlueValues;
+ IntVector maOtherBlues;
+ IntVector maFamilyBlues;
+ IntVector maFamilyOtherBlues;
+ double mfBlueScale;
+ double mfBlueShift;
+ double mfBlueFuzz;
+ double mfExpFactor;
+ int mnLangGroup;
+ bool mbForceBold;
+};
+
+// ====================================================================
+
+class SubsetterContext
+{
+public:
+ virtual ~SubsetterContext( void);
+ virtual bool emitAsType1( class Type1Emitter&,
+ const long* pGlyphIDs, const U8* pEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& ) = 0;
+};
+
+// --------------------------------------------------------------------
+
+SubsetterContext::~SubsetterContext( void)
+{}
+
+// ====================================================================
+
+class CffSubsetterContext
+: public SubsetterContext
+, private CffGlobal
+{
+public:
+ static const int NMAXSTACK = 48; // see CFF.appendixB
+ static const int NMAXHINTS = 2*96; // see CFF.appendixB
+ static const int NMAXTRANS = 32; // see CFF.appendixB
+public:
+ explicit CffSubsetterContext( const U8* pBasePtr, int nBaseLen);
+ virtual ~CffSubsetterContext( void);
+
+ void initialCffRead( void);
+ bool emitAsType1( class Type1Emitter&,
+ const long* pGlyphIDs, const U8* pEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& );
+
+ // used by charstring converter
+ void setCharStringType( int);
+ void fakeLocalSubrCount( int nLocalSubrs ) { maCffLocal[0].mnLocalSubrCount=nLocalSubrs;}
+ void readCharString( const U8* pTypeOps, int nTypeLen);
+protected:
+ int convert2Type1Ops( CffLocal*, const U8* pType2Ops, int nType2Len, U8* pType1Ops);
+private:
+ void readTypeOp( CffSubsetterContext&);
+ void convertOneTypeOp( void);
+ void convertOneTypeEsc( void);
+ void callType2Subr( bool bGlobal, int nSubrNumber);
+ long getReadOfs( void) const { return (long)(mpReadPtr - mpBasePtr);}
+
+ const U8* mpBasePtr;
+ const U8* mpBaseEnd;
+
+ const U8* mpReadPtr;
+ const U8* mpReadEnd;
+
+ U8* mpWritePtr;
+ bool mbSawError;
+ bool mbNeedClose;
+ bool mbIgnoreHints;
+ long mnCntrMask;
+
+private:
+ int seekIndexData( int nIndexBase, int nDataIndex);
+ void seekIndexEnd( int nIndexBase);
+
+private:
+ const char** mpCharStringOps;
+ const char** mpCharStringEscs;
+
+ CffLocal maCffLocal[16];
+ CffLocal* mpCffLocal;
+
+ void readDictOp( void);
+ double readRealVal( void);
+ const char* getString( int nStringID);
+ int getFDSelect( int nGlyphIndex) const;
+ int getGlyphSID( int nGlyphIndex) const;
+ const char* getGlyphName( int nGlyphIndex);
+
+ void readTypeOp( void);
+ void read2push( void);
+ void pop2write( void);
+ void writeType1Val( int/*TODO: double*/ nVal);
+ void writeTypeOp( int nTypeOp);
+ void writeTypeEsc( int nTypeOp);
+ void writeCurveTo( int nStackPos, int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3);
+ void pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor=0);
+ void popAll2Write( int nTypeOp);
+
+public: // TODO: is public really needed?
+ // accessing the value stack
+ // TODO: add more checks
+ void push( int nVal) { mnValStack[ mnStackIdx++] = nVal;}
+ int pop( void) { return ((mnStackIdx>0) ? mnValStack[ --mnStackIdx] : 0);}
+ int peek( void) { return ((mnStackIdx>0) ? mnValStack[ mnStackIdx-1] : 0);}
+ int get( int nIndex) { return mnValStack[ nIndex];}
+ int size( void) const { return mnStackIdx;}
+ bool empty( void) const { return !mnStackIdx;}
+ void clear( void) { mnStackIdx = 0;}
+
+ // accessing the charstring hints
+ void addHints( bool bVerticalHints);
+ int getHorzHintCount( void) const { return (mnHorzHintSize/2);}
+ int getVertHintCount( void) const { return (mnHintSize-mnHorzHintSize)/2;}
+ void getHintPair( int nIndex, int* nMin, int* nEnd) const;
+
+ // accessing other charstring specifics
+ bool hasCharWidth( void) const { return (mnCharWidth != -1);}
+ int getCharWidth( void) const { return mnCharWidth;}
+ void setNominalWidth( int nWidth) { mpCffLocal->mnNominalWidth = nWidth;}
+ void setDefaultWidth( int nWidth) { mpCffLocal->mnDefaultWidth = nWidth;}
+ void updateWidth( bool bUseFirstVal);
+
+private:
+ // typeop exceution context
+ int mnStackIdx;
+ int mnValStack[ NMAXSTACK];
+ int mnTransVals[ NMAXTRANS];
+
+ int mnHintSize;
+ int mnHorzHintSize;
+ int mnHintStack[ NMAXHINTS];
+
+ int mnCharWidth;
+};
+
+// --------------------------------------------------------------------
+
+CffSubsetterContext::CffSubsetterContext( const U8* pBasePtr, int nBaseLen)
+: mpBasePtr( pBasePtr)
+, mpBaseEnd( pBasePtr+nBaseLen)
+, mnStackIdx(0)
+, mnHintSize(0)
+, mnHorzHintSize(0)
+, mnCharWidth(-1)
+{
+// setCharStringType( 1);
+ // TODO: new CffLocal[ mnFDAryCount];
+ mpCffLocal = &maCffLocal[0];
+}
+
+// --------------------------------------------------------------------
+
+CffSubsetterContext::~CffSubsetterContext( void)
+{
+ // TODO: delete[] maCffLocal;
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::updateWidth( bool bUseFirstVal)
+{
+#if 1 // TODO: is this still needed?
+ // the first value is not a hint but the charwidth
+ if( hasCharWidth())
+ return;
+#endif
+ if( bUseFirstVal) {
+ mnCharWidth = mpCffLocal->mnNominalWidth + mnValStack[0];
+ // remove bottom stack entry
+ --mnStackIdx;
+ for( int i = 0; i < mnStackIdx; ++i)
+ mnValStack[ i] = mnValStack[ i+1];
+ } else {
+ mnCharWidth = mpCffLocal->mnDefaultWidth;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::addHints( bool bVerticalHints)
+{
+ // the first charstring value may a charwidth instead of a charwidth
+ updateWidth( (mnStackIdx & 1) != 0);
+ // return early (e.g. no implicit hints for hintmask)
+ if( !mnStackIdx)
+ return;
+
+ // copy the remaining values to the hint arrays
+ // assert( (mnStackIdx & 1) == 0); // depends on called subrs
+ if( mnStackIdx & 1) --mnStackIdx;//#######
+ // TODO: if( !bSubr) assert( mnStackIdx >= 2);
+
+ assert( (mnHintSize + mnStackIdx) <= 2*NMAXHINTS);
+
+#ifdef IGNORE_HINTS
+ mnHorzHintSize += mnStackIdx;
+#else
+ int nHintOfs = 0;
+ for( int i = 0; i < mnStackIdx; ++i) {
+ nHintOfs += mnValStack[ i];
+ mnHintStack[ mnHintSize++] = nHintOfs;
+ }
+ if( !bVerticalHints)
+ mnHorzHintSize = mnHintSize;
+#endif // IGNORE_HINTS
+
+ // clear all values from the stack
+ mnStackIdx = 0;
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::getHintPair( int nIndex, int* pMin, int* pEnd) const
+{
+ nIndex *= 2;
+ assert( nIndex < mnHintSize);
+ assert( nIndex >= 0);
+ const int* pHint = &mnHintStack[ nIndex];
+ *pMin = pHint[0];
+ *pEnd = pHint[1];
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::setCharStringType( int nVal)
+{
+ switch( nVal) {
+ case 1: mpCharStringOps=pType1Ops; mpCharStringEscs=pT1EscOps; break;
+ case 2: mpCharStringOps=pType2Ops; mpCharStringEscs=pT2EscOps; break;
+ default: fprintf( stderr, "Unknown CharstringType=%d\n",nVal); break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readCharString( const U8* pTypeOps, int nTypeLen)
+{
+ mnStackIdx = 0;
+ mnHintSize = 0;
+ mnHorzHintSize = 0;
+ mnCharWidth = -1;
+
+ assert( nTypeLen >= 0);
+// assert( nEnd <= getLength());
+ mpReadPtr = pTypeOps;
+ mpReadEnd = mpReadPtr + nTypeLen;
+ // reset the execution context
+ while( mpReadPtr < mpReadEnd)
+ readTypeOp();
+//### assert( tellRel() == nEnd);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readDictOp( void)
+{
+ int nVal = 0;
+ const U8 c = *mpReadPtr;
+ if( c <= 21 ) {
+ int nOpId = *(mpReadPtr++);
+ const char* pCmdName;
+ if( nOpId != 12)
+ pCmdName = pDictOps[ nOpId];
+ else {
+ const U8 nExtId = *(mpReadPtr++);
+ pCmdName = pDictEscs[ nExtId];
+ nOpId = 900 + nExtId;
+ }
+
+ //TODO: if( nStackIdx > 0)
+ switch( *pCmdName) {
+ default: fprintf( stderr, "unsupported DictOp.type=\'%c\'\n", *pCmdName); break;
+ case 'b': // bool
+ nVal = pop();
+ switch( nOpId) {
+ case 915: mpCffLocal->mbForceBold = nVal; break; // "ForceBold"
+ default: break; // TODO: handle more boolean dictops?
+ }
+ break;
+ case 'n': // dict-op number
+ nVal = pop();
+ switch( nOpId) {
+ case 10: mpCffLocal->mnStemStdHW = nVal; break; // "StdHW"
+ case 11: mpCffLocal->mnStemStdVW = nVal; break; // "StdVW"
+ case 15: mnCharsetBase = nVal; break; // "charset"
+ case 16: mnEncodingBase = nVal; break; // "nEncoding"
+ case 17: mnCharStrBase = nVal; break; // "nCharStrings"
+ case 19: mpCffLocal->mnLocalSubrOffs = nVal; break;// "nSubrs"
+ case 20: setDefaultWidth( nVal); break; // "defaultWidthX"
+ case 21: setNominalWidth( nVal); break; // "nominalWidthX"
+ case 909: mpCffLocal->mfBlueScale = nVal; break; // "BlueScale"
+ case 910: mpCffLocal->mfBlueShift = nVal; break; // "BlueShift"
+ case 911: mpCffLocal->mfBlueFuzz = nVal; break; // "BlueFuzz"
+ case 912: mpCffLocal->mfExpFactor = nVal; break; // "ExpansionFactor"
+ case 917: mpCffLocal->mnLangGroup = nVal; break; // "LanguageGroup"
+ case 936: mnFontDictBase = nVal; break; // "nFDArray"
+ case 937: mnFDSelectBase = nVal; break; // "nFDSelect"
+ default: break; // TODO: handle more numeric dictops?
+ }
+ break;
+ case 'a': { // array
+ for( int i = 0; i < size(); ++i ) {
+ nVal = get(i);
+ switch( nOpId) {
+ case 5: maFontBBox.push_back( nVal); break; // "FontBBox"
+#if 0 // TODO
+ case 907: maFontMatrix.push_back( nVal); break; // "FontMatrix"
+#endif
+ default: break; // TODO: handle more array dictops?
+ }
+ }
+ clear();
+ } break;
+ case 'd': { // delta array
+ nVal = 0;
+ for( int i = 0; i < size(); ++i ) {
+ nVal += get(i);
+ switch( nOpId) {
+ case 6: mpCffLocal->maBlueValues.push_back( nVal); break; // "BlueValues"
+ case 7: mpCffLocal->maOtherBlues.push_back( nVal); break; // "OtherBlues"
+ case 8: mpCffLocal->maFamilyBlues.push_back( nVal); break; // "FamilyBlues"
+ case 9: mpCffLocal->maFamilyOtherBlues.push_back( nVal); break;// "FamilyOtherBlues"
+ case 912: mpCffLocal->maStemSnapH.push_back( nVal); break; // "StemSnapH"
+ case 913: mpCffLocal->maStemSnapV.push_back( nVal); break; // "StemSnapV"
+ default: break; // TODO: handle more delta-array dictops?
+ }
+ }
+ clear();
+ } break;
+ case 's': // stringid (SID)
+ nVal = pop();
+ switch( nOpId) {
+ case 2: mnFullNameSID = nVal; break; // "FullName"
+ case 3: mnFamilyNameSID = nVal; break; // "FamilyName"
+ case 938: mnFontNameSID = nVal; break; // "FontName"
+ default: break; // TODO: handle more string dictops?
+ }
+ break;
+ case 'P': // private dict
+ mpCffLocal->mnPrivDictBase = pop();
+ mpCffLocal->mnPrivDictSize = pop();
+ break;
+ case 'r': { // ROS operands
+ int nSid1 = pop();
+ int nSid2 = pop();
+ (void)nSid1; // TODO: use
+ (void)nSid2; // TODO: use
+ nVal = pop();
+ mbCIDFont = true;
+ } break;
+ case 't': // CharstringType
+ nVal = pop();
+ setCharStringType( nVal);
+ break;
+ }
+
+ return;
+ }
+
+ if( (c >= 32) || (c == 28)) {
+// --mpReadPtr;
+ read2push();
+ } else if( c == 29) { // longint
+ ++mpReadPtr; // skip 29
+ int nS32 = mpReadPtr[0] << 24;
+ nS32 += mpReadPtr[1] << 16;
+ nS32 += mpReadPtr[2] << 8;
+ nS32 += mpReadPtr[3] << 0;
+ if( (sizeof(nS32) != 4) && (nS32 & (1<<31)))
+ nS32 |= (~0U) << 31; // assuming 2s complement
+ mpReadPtr += 4;
+ nVal = nS32;
+ push( nVal);
+ } else if( c == 30) { // real number
+ ++mpReadPtr; // skip 30
+ const double fReal = readRealVal();
+ // push value onto stack
+ nVal = static_cast<int>(fReal+0.5); //TODO!!! allow float on operand stack!
+ push( nVal);
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::readTypeOp( void)
+{
+ int nVal = 0;
+ const U8 c = *mpReadPtr;
+ if( (c <= 31) && (c != 28) ) {
+ const int nOpId = *(mpReadPtr++);
+ const char* pCmdName;
+ if( nOpId != 12)
+ pCmdName = mpCharStringOps[ nOpId];
+ else {
+ const int nExtId = *(mpReadPtr++);
+ pCmdName = mpCharStringEscs[ nExtId];
+ }
+
+ if( !pCmdName )
+ pCmdName = ".NULL";
+ // handle typeop parameters
+ int nMinStack = -1, nMaxStack = -1;
+ switch( *pCmdName) {
+ default: fprintf( stderr, "unsupported TypeOp.type=\'%c\'\n", *pCmdName); break;
+ case '.': nMinStack = 0; nMaxStack = 999; break;
+ case '0': nMinStack = nMaxStack = 0; break;
+ case '1': nMinStack = nMaxStack = 1; break;
+ case '2': nMinStack = nMaxStack = 2; break;
+ case '4': nMinStack = nMaxStack = 4; break;
+ case '5': nMinStack = nMaxStack = 5; break; // not used for Type2 ops
+ case '6': nMinStack = nMaxStack = 6; break;
+ case '7': nMinStack = nMaxStack = 7; break;
+ case '9': nMinStack = nMaxStack = 9; break;
+ case 'f': nMinStack = nMaxStack = 11; break;
+ case 'F': nMinStack = nMaxStack = 13; break;
+ case 'A': nMinStack = 2; nMaxStack = 999; break;
+ case 'C': nMinStack = 6; nMaxStack = 999; break;
+ case 'E': nMinStack = 1; nMaxStack = 999; break;
+ case 'G': nMinStack = 1; nMaxStack = 999; // global subr
+ nVal = peek();
+ // TODO global subr
+ break;
+ case 'L': // local subr
+ nMinStack = 1; nMaxStack = 999;
+ nVal = peek();
+ // TODO local subr
+ break;
+ case 'I': // operands for "index"
+#if 0
+ nMinStack = nValStack[ nStackIdx-1];
+ if( nMinStack < 0) nMinStack = 0;
+ nMinStack += 1;
+#else
+ fprintf( stderr, "TODO: Iindex op\n");
+#endif
+ break;
+ case 'R': // operands for "rol"
+#if 0
+ nMinStack = nValStack[ nStackIdx-2];
+#else
+ fprintf( stderr, "TODO: Rrol op\n");
+#endif
+ case 'X': // operands for "return"
+ nMinStack = 0;
+ nMaxStack = /*### (!bInSubrs)? 0 :###*/999;
+ break;
+ case 'H': // "hstemhm"
+ case 'h': // "hstem"
+ addHints( false);
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'V': // "vstemhm"
+ case 'v': // "vstem"
+ addHints( true);
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'K': // "hintmask" or "cntrmask"
+ addHints( true); // implicit vstemhm
+ nMinStack = nMaxStack = 0;
+ break;
+ case 'e': // endchar
+ updateWidth( (size() >= 1) && (size() != 4));
+ nMinStack = nMaxStack = 0;
+ if( size() == 4)
+ fprintf( stderr,"Deprecated SEAC-like endchar is not supported for CFF subsetting!\n"); // TODO: handle deprecated op
+ break;
+ case 'm': // hmoveto or vmoveto
+ updateWidth( size() > 1);
+ nMinStack = 1;
+ nMaxStack = nMinStack;
+ break;
+ case 'M': // rmoveto
+ updateWidth( size() > 2);
+ nMinStack = 2;
+ nMaxStack = nMinStack;
+ break;
+ }
+
+ clear();
+ return;
+ }
+
+ if( (c >= 32) || (c == 28)) {
+// --mpReadPtr;
+ read2push();
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::read2push( void)
+{
+ int nVal = 0;
+
+ const U8*& p = mpReadPtr;
+ const U8 c = *p;
+ if( c == 28) {
+ short nS16 = (p[1] << 8) + p[2];
+ if( (sizeof(nS16) != 2) && (nS16 & (1<<15)))
+ nS16 |= (~0U) << 15; // assuming 2s complement
+ nVal = nS16;
+ p += 3;
+ } else if( c <= 246) { // -107..+107
+ nVal = p[0] - 139;
+ p += 1;
+ } else if( c <= 250) { // +108..+1131
+ nVal = ((p[0] << 8) + p[1]) - 63124;
+ p += 2;
+ } else if( c <= 254) { // -108..-1131
+ nVal = 64148 - ((p[0] << 8) + p[1]);
+ p += 2;
+ } else /*if( c == 255)*/ { // Fixed16.16
+ nVal = (p[1] << 8) + p[2];
+ // TODO: read non-integer part
+ p += 5;
+ }
+
+ push( nVal);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::writeType1Val( int/*TODO: double*/ nVal)
+{
+ U8* pOut = mpWritePtr;
+ if( (nVal >= -107) && (nVal <= +107)) {
+ *(pOut++) = static_cast<U8>(nVal + 139); // -107..+107
+ } else if( (nVal >= -1131) && (nVal <= +1131)) {
+ if( nVal >= 0)
+ nVal += 63124; // +108..+1131
+ else
+ nVal = 64148 - nVal; // -108..-1131
+ *(pOut++) = static_cast<U8>(nVal >> 8);
+ *(pOut++) = static_cast<U8>(nVal);
+ } else {
+ // numtype==255 means int32 for Type1, but 16.16 for Type2 charstrings!!!
+ *(pOut++) = 255;
+ *(pOut++) = static_cast<U8>(nVal >> 24);
+ *(pOut++) = static_cast<U8>(nVal >> 16);
+ *(pOut++) = static_cast<U8>(nVal >> 8);
+ *(pOut++) = static_cast<U8>(nVal);
+ }
+
+ mpWritePtr = pOut;
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::pop2write( void)
+{
+ int nVal = pop();
+ writeType1Val( nVal);
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::writeTypeOp( int nTypeOp)
+{
+ *(mpWritePtr++) = static_cast<U8>(nTypeOp);
+}
+
+// --------------------------------------------------------------------
+
+inline void CffSubsetterContext::writeTypeEsc( int nTypeEsc)
+{
+ *(mpWritePtr++) = TYPE1OP::T1ESC;
+ *(mpWritePtr++) = static_cast<U8>(nTypeEsc);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::pop2MultiWrite( int nArgsPerTypo, int nTypeOp, int nTypeXor)
+{
+ for( int i = 0; i < mnStackIdx;) {
+ for( int j = 0; j < nArgsPerTypo; ++j) {
+ int nVal = mnValStack[i+j];
+ writeType1Val( nVal);
+ }
+ i += nArgsPerTypo;
+ writeTypeOp( nTypeOp);
+ nTypeOp ^= nTypeXor; // for toggling vlineto/hlineto
+ }
+ clear();
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::popAll2Write( int nTypeOp)
+{
+ // pop in reverse order, then write
+ for( int i = 0; i < mnStackIdx; ++i) {
+ int nVal = mnValStack[i];
+ writeType1Val( nVal);
+ }
+ clear();
+ writeTypeOp( nTypeOp);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::writeCurveTo( int nStackPos,
+ int nIX1, int nIY1, int nIX2, int nIY2, int nIX3, int nIY3)
+{
+ // get the values from the stack
+ const int nDX1 = nIX1 ? mnValStack[ nStackPos+nIX1] : 0;
+ const int nDY1 = nIY1 ? mnValStack[ nStackPos+nIY1] : 0;
+ const int nDX2 = nIX2 ? mnValStack[ nStackPos+nIX2] : 0;
+ const int nDY2 = nIY2 ? mnValStack[ nStackPos+nIY2] : 0;
+ const int nDX3 = nIX3 ? mnValStack[ nStackPos+nIX3] : 0;
+ const int nDY3 = nIY3 ? mnValStack[ nStackPos+nIY3] : 0;
+
+ // emit the curveto operator and operands
+ // TODO: determine the most efficient curveto operator
+ // TODO: depending on type1op or type2op target
+ writeType1Val( nDX1);
+ writeType1Val( nDY1);
+ writeType1Val( nDX2);
+ writeType1Val( nDY2);
+ writeType1Val( nDX3);
+ writeType1Val( nDY3);
+ writeTypeOp( TYPE1OP::RCURVETO);
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::convertOneTypeOp( void)
+{
+ const int nType2Op = *(mpReadPtr++);
+
+ int i, nVal; // prevent WAE for declarations inside switch cases
+ // convert each T2op
+ switch( nType2Op) {
+ case TYPE2OP::T2ESC:
+ convertOneTypeEsc();
+ break;
+ case TYPE2OP::HSTEM:
+ case TYPE2OP::VSTEM:
+ addHints( nType2Op == TYPE2OP::VSTEM);
+#ifndef IGNORE_HINTS
+ for( i = 0; i < mnHintSize; i+=2) {
+ writeType1Val( mnHintStack[i]);
+ writeType1Val( mnHintStack[i+1] - mnHintStack[i]);
+ writeTypeOp( nType2Op);
+ }
+#endif // IGNORE_HINTS
+ break;
+ case TYPE2OP::HSTEMHM:
+ case TYPE2OP::VSTEMHM:
+ addHints( nType2Op == TYPE2OP::VSTEMHM);
+ break;
+ case TYPE2OP::CNTRMASK:
+ // TODO: replace cntrmask with vstem3/hstem3
+ addHints( true);
+#ifdef IGNORE_HINTS
+ mpReadPtr += (mnHintSize + 15) / 16;
+ mbIgnoreHints = true;
+#else
+ {
+ U8 nMaskBit = 0;
+ U8 nMaskByte = 0;
+ for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) {
+ if( !nMaskBit) {
+ nMaskByte = *(mpReadPtr++);
+ nMaskBit = 0x80;
+ }
+ if( !(nMaskByte & nMaskBit))
+ continue;
+ if( i >= 8*(int)sizeof(mnCntrMask))
+ mbIgnoreHints = true;
+ if( mbIgnoreHints)
+ continue;
+ mnCntrMask |= (1U << i);
+ }
+ }
+#endif
+ break;
+ case TYPE2OP::HINTMASK:
+ addHints( true);
+#ifdef IGNORE_HINTS
+ mpReadPtr += (mnHintSize + 15) / 16;
+#else
+ {
+ long nHintMask = 0;
+ int nCntrBits[2] = {0,0};
+ U8 nMaskBit = 0;
+ U8 nMaskByte = 0;
+ for( i = 0; i < mnHintSize; i+=2, nMaskBit>>=1) {
+ if( !nMaskBit) {
+ nMaskByte = *(mpReadPtr++);
+ nMaskBit = 0x80;
+ }
+ if( !(nMaskByte & nMaskBit))
+ continue;
+ if( i >= 8*(int)sizeof(nHintMask))
+ mbIgnoreHints = true;
+ if( mbIgnoreHints)
+ continue;
+ nHintMask |= (1U << i);
+ nCntrBits[ i < mnHorzHintSize] += (mnCntrMask >> i) & 1;
+ }
+
+ mbIgnoreHints |= (nCntrBits[0] && (nCntrBits[0] != 3));
+ mbIgnoreHints |= (nCntrBits[1] && (nCntrBits[1] != 3));
+ if( mbIgnoreHints)
+ break;
+
+ for( i = 0; i < mnHintSize; i+=2) {
+ if( !(nHintMask & (1U << i)))
+ continue;
+ writeType1Val( mnHintStack[i]);
+ writeType1Val( mnHintStack[i+1] - mnHintStack[i]);
+ const bool bHorz = (i < mnHorzHintSize);
+ if( !nCntrBits[ bHorz])
+ writeTypeOp( bHorz ? TYPE1OP::HSTEM : TYPE1OP::VSTEM);
+ else if( !--nCntrBits[ bHorz])
+ writeTypeEsc( bHorz ? TYPE1OP::HSTEM3 : TYPE1OP::VSTEM3);
+ }
+ }
+#endif
+ break;
+ case TYPE2OP::CALLSUBR:
+ case TYPE2OP::CALLGSUBR:
+ {
+ nVal = pop();
+ const bool bGlobal = (nType2Op == TYPE2OP::CALLGSUBR);
+ callType2Subr( bGlobal, nVal);
+ }
+ break;
+ case TYPE2OP::RETURN:
+ // TODO: check that we are in a subroutine
+ return;
+ case TYPE2OP::VMOVETO:
+ case TYPE2OP::HMOVETO:
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() > 1);
+ mbNeedClose = true;
+ pop2MultiWrite( 1, nType2Op);
+ break;
+ case TYPE2OP::VLINETO:
+ case TYPE2OP::HLINETO:
+ pop2MultiWrite( 1, nType2Op,
+ TYPE1OP::VLINETO ^ TYPE1OP::HLINETO);
+ break;
+ case TYPE2OP::RMOVETO:
+ // TODO: convert rmoveto to vlineto/hlineto if possible
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() > 2);
+ mbNeedClose = true;
+ pop2MultiWrite( 2, nType2Op);
+ break;
+ case TYPE2OP::RLINETO:
+ // TODO: convert rlineto to vlineto/hlineto if possible
+ pop2MultiWrite( 2, nType2Op);
+ break;
+ case TYPE2OP::RCURVETO:
+ // TODO: convert rcurveto to vh/hv/hh/vv-curveto if possible
+ pop2MultiWrite( 6, nType2Op);
+ break;
+ case TYPE2OP::RCURVELINE:
+ i = 0;
+ while( (i += 6) <= mnStackIdx)
+ writeCurveTo( i, -6, -5, -4, -3, -2, -1 );
+ i -= 6;
+ while( (i += 2) <= mnStackIdx) {
+ writeType1Val( mnValStack[i-2]);
+ writeType1Val( mnValStack[i-1]);
+ writeTypeOp( TYPE2OP::RLINETO);
+ }
+ clear();
+ break;
+ case TYPE2OP::RLINECURVE:
+ i = 0;
+ while( (i += 2) <= mnStackIdx-6) {
+ writeType1Val( mnValStack[i-2]);
+ writeType1Val( mnValStack[i-1]);
+ writeTypeOp( TYPE2OP::RLINETO);
+ }
+ i -= 2;
+ while( (i += 6) <= mnStackIdx)
+ writeCurveTo( i, -6, -5, -4, -3, -2, -1 );
+ clear();
+ break;
+ case TYPE2OP::VHCURVETO:
+ case TYPE2OP::HVCURVETO:
+ {
+ bool bVert = (nType2Op == TYPE2OP::VHCURVETO);
+ i = 0;
+ nVal = 0;
+ if( mnStackIdx & 1)
+ nVal = mnValStack[ --mnStackIdx];
+ while( (i += 4) <= mnStackIdx) {
+ // TODO: use writeCurveTo()
+ if( bVert) writeType1Val( 0);
+ writeType1Val( mnValStack[i-4]);
+ if( !bVert) writeType1Val( 0);
+ writeType1Val( mnValStack[i-3]);
+ writeType1Val( mnValStack[i-2]);
+ if( !bVert) writeType1Val( (i==mnStackIdx) ? nVal : 0);
+ writeType1Val( mnValStack[i-1]);
+ if( bVert) writeType1Val( (i==mnStackIdx) ? nVal : 0 );
+ bVert = !bVert;
+ writeTypeOp( TYPE2OP::RCURVETO);
+ }
+ }
+ clear();
+ break;
+ case TYPE2OP::HHCURVETO:
+ i = (mnStackIdx & 1);
+ while( (i += 4) <= mnStackIdx) {
+ if( i != 5)
+ writeCurveTo( i, -4, 0, -3, -2, -1, 0);
+ else
+ writeCurveTo( i, -4, -5, -3, -2, -1, 0);
+ }
+ clear();
+ break;
+ case TYPE2OP::VVCURVETO:
+ i = (mnStackIdx & 1);
+ while( (i += 4) <= mnStackIdx) {
+ if( i != 5)
+ writeCurveTo( i, 0, -4, -3, -2, 0, -1);
+ else
+ writeCurveTo( i, -5, -4, -3, -2, 0, -1);
+ }
+ clear();
+ break;
+ case TYPE2OP::ENDCHAR:
+ if( mbNeedClose)
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+ else
+ updateWidth( size() >= 1);
+ // mbNeedClose = true;
+ writeTypeOp( TYPE1OP::ENDCHAR);
+ break;
+ default:
+ if( ((nType2Op >= 32) && (nType2Op <= 255)) || (nType2Op == 28)) {
+ --mpReadPtr;
+ read2push();
+ } else {
+ popAll2Write( nType2Op);
+ assert( false); // TODO?
+ }
+ break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::convertOneTypeEsc( void)
+{
+ const int nType2Esc = *(mpReadPtr++);
+ int* pTop = &mnValStack[ mnStackIdx-1];
+ // convert each T2op
+ switch( nType2Esc) {
+ case TYPE2OP::AND:
+ assert( mnStackIdx >= 2);
+ pTop[0] &= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::OR:
+ assert( mnStackIdx >= 2);
+ pTop[0] |= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::NOT:
+ assert( mnStackIdx >= 1);
+ pTop[0] = !pTop[0];
+ break;
+ case TYPE2OP::ABS:
+ assert( mnStackIdx >= 1);
+ if( pTop[0] >= 0)
+ break;
+ // fall through
+ case TYPE2OP::NEG:
+ assert( mnStackIdx >= 1);
+ pTop[0] = -pTop[0];
+ break;
+ case TYPE2OP::ADD:
+ assert( mnStackIdx >= 2);
+ pTop[0] += pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::SUB:
+ assert( mnStackIdx >= 2);
+ pTop[0] -= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::MUL:
+ assert( mnStackIdx >= 2);
+ if( pTop[-1])
+ pTop[0] *= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::DIV:
+ assert( mnStackIdx >= 2);
+ if( pTop[-1])
+ pTop[0] /= pTop[-1];
+ --mnStackIdx;
+ break;
+ case TYPE2OP::EQ:
+ assert( mnStackIdx >= 2);
+ pTop[0] = (pTop[0] == pTop[-1]);
+ --mnStackIdx;
+ break;
+ case TYPE2OP::DROP:
+ assert( mnStackIdx >= 1);
+ --mnStackIdx;
+ break;
+ case TYPE2OP::PUT: {
+ assert( mnStackIdx >= 2);
+ const int nIdx = pTop[0];
+ assert( nIdx >= 0);
+ assert( nIdx < NMAXTRANS);
+ mnTransVals[ nIdx] = pTop[-1];
+ mnStackIdx -= 2;
+ break;
+ }
+ case TYPE2OP::GET: {
+ assert( mnStackIdx >= 1);
+ const int nIdx = pTop[0];
+ assert( nIdx >= 0);
+ assert( nIdx < NMAXTRANS);
+ pTop[0] = mnTransVals[ nIdx];
+ break;
+ }
+ case TYPE2OP::IFELSE: {
+ assert( mnStackIdx >= 4);
+ if( pTop[-1] > pTop[0])
+ pTop[-3] = pTop[-2];
+ mnStackIdx -= 3;
+ break;
+ }
+ case TYPE2OP::RANDOM:
+ pTop[+1] = 1234; // TODO
+ ++mnStackIdx;
+ break;
+ case TYPE2OP::SQRT:
+ // TODO: implement
+ break;
+ case TYPE2OP::DUP:
+ assert( mnStackIdx >= 1);
+ pTop[+1] = pTop[0];
+ ++mnStackIdx;
+ break;
+ case TYPE2OP::EXCH: {
+ assert( mnStackIdx >= 2);
+ const int nVal = pTop[0];
+ pTop[0] = pTop[-1];
+ pTop[-1] = nVal;
+ break;
+ }
+ case TYPE2OP::INDEX: {
+ assert( mnStackIdx >= 1);
+ const int nVal = pTop[0];
+ assert( nVal >= 0);
+ assert( nVal < mnStackIdx-1);
+ pTop[0] = pTop[-1-nVal];
+ break;
+ }
+ case TYPE2OP::ROLL: {
+ assert( mnStackIdx >= 1);
+ const int nNum = pTop[0];
+ assert( nNum >= 0);
+ assert( nNum < mnStackIdx-2);
+ (void)nNum; // TODO: implement
+ const int nOfs = pTop[-1];
+ mnStackIdx -= 2;
+ (void)nOfs;// TODO: implement
+ break;
+ }
+ case TYPE2OP::HFLEX1: {
+ assert( mnStackIdx == 9);
+ writeCurveTo( mnStackIdx, -9, -8, -7, -6, -5, -6);
+ writeCurveTo( mnStackIdx, -4, -6, -3, -2, -1, -8);
+ mnStackIdx -= 9;
+ }
+ break;
+ case TYPE2OP::HFLEX: {
+ assert( mnStackIdx == 7);
+ writeCurveTo( mnStackIdx, -7, 0, -6, -5, -4, -5);
+ writeCurveTo( mnStackIdx, -3, -5, -2, 0, -1, 0);
+ mnStackIdx -= 7;
+ }
+ break;
+ case TYPE2OP::FLEX: {
+ assert( mnStackIdx == 13);
+ writeCurveTo( mnStackIdx, -13, -12, -11, -10, -9, -8);
+ writeCurveTo( mnStackIdx, -7, -6, -5, -4, -3, -2);
+ const int nFlexDepth = mnValStack[ mnStackIdx-1];
+ (void)nFlexDepth; // ignoring nFlexDepth
+ mnStackIdx -= 13;
+ }
+ break;
+ case TYPE2OP::FLEX1: {
+ assert( mnStackIdx == 11);
+ // write the first part of the flex1-hinted curve
+ writeCurveTo( mnStackIdx, -11, -10, -9, -8, -7, -6);
+
+ // determine if nD6 is horizontal or vertical
+ const int i = mnStackIdx;
+ int nDeltaX = mnValStack[i-11] + mnValStack[i-9] + mnValStack[i-7] + mnValStack[i-5] + mnValStack[i-3];
+ if( nDeltaX < 0 ) nDeltaX = -nDeltaX;
+ int nDeltaY = mnValStack[i-10] + mnValStack[i-8] + mnValStack[i-6] + mnValStack[i-4] + mnValStack[i-2];
+ if( nDeltaY < 0 ) nDeltaY = -nDeltaY;
+ const bool bVertD6 = (nDeltaY > nDeltaX);
+
+ // write the second part of the flex1-hinted curve
+ if( !bVertD6 )
+ writeCurveTo( mnStackIdx, -5, -4, -3, -2, -1, 0);
+ else
+ writeCurveTo( mnStackIdx, -5, -4, -3, -2, 0, -1);
+ mnStackIdx -= 11;
+ }
+ break;
+ default:
+ fprintf( stderr,"unhandled type2esc %d\n", nType2Esc);
+ assert( false);
+ break;
+ }
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::callType2Subr( bool bGlobal, int nSubrNumber)
+{
+ const U8* const pOldReadPtr = mpReadPtr;
+ const U8* const pOldReadEnd = mpReadEnd;
+
+ int nLen = 0;
+ if( bGlobal ) {
+ nSubrNumber += mnGlobalSubrBias;
+ nLen = seekIndexData( mnGlobalSubrBase, nSubrNumber);
+ } else {
+ nSubrNumber += mpCffLocal->mnLocalSubrBias;
+ nLen = seekIndexData( mpCffLocal->mnLocalSubrBase, nSubrNumber);
+ }
+
+ while( mpReadPtr < mpReadEnd)
+ convertOneTypeOp();
+
+ mpReadPtr = pOldReadPtr;
+ mpReadEnd = pOldReadEnd;
+}
+
+// --------------------------------------------------------------------
+
+static const int MAX_T1OPS_SIZE = 81920; // TODO: use dynamic value
+
+int CffSubsetterContext::convert2Type1Ops( CffLocal* pCffLocal, const U8* const pT2Ops, int nT2Len, U8* const pT1Ops)
+{
+ mpCffLocal = pCffLocal;
+
+ // prepare the charstring conversion
+ mpWritePtr = pT1Ops;
+#if 1 // TODO: update caller
+ U8 aType1Ops[ MAX_T1OPS_SIZE];
+ if( !pT1Ops)
+ mpWritePtr = aType1Ops;
+ *const_cast<U8**>(&pT1Ops) = mpWritePtr;
+#else
+ assert( pT1Ops);
+#endif
+
+ // prepend random seed for T1crypt
+ *(mpWritePtr++) = 0x48;
+ *(mpWritePtr++) = 0x44;
+ *(mpWritePtr++) = 0x55;
+ *(mpWritePtr++) = ' ';
+#if 1 // convert the Type2 charstring to Type1
+ mpReadPtr = pT2Ops;
+ mpReadEnd = pT2Ops + nT2Len;
+ // prepend "hsbw" or "sbw"
+ // TODO: only emit hsbw when charwidth is known
+ // TODO: remove charwidth from T2 stack
+ writeType1Val( 0); // TODO: aSubsetterContext.getLeftSideBearing();
+ writeType1Val( 1000/*###getCharWidth()###*/);
+ writeTypeOp( TYPE1OP::HSBW);
+mbSawError = false;
+mbNeedClose = false;
+mbIgnoreHints = false;
+mnHintSize=mnHorzHintSize=mnStackIdx=0; mnCharWidth=-1;//#######
+mnCntrMask = 0;
+ while( mpReadPtr < mpReadEnd)
+ convertOneTypeOp();
+// if( bActivePath)
+// writeTypeOp( TYPE1OP::CLOSEPATH);
+// if( bSubRoutine)
+// writeTypeOp( TYPE1OP::RETURN);
+if( mbSawError) {
+ mpWritePtr = pT1Ops+4;
+ // create an "idiotproof" charstring
+ writeType1Val( 0);
+ writeType1Val( 800);
+ writeTypeOp( TYPE1OP::HSBW);
+ writeType1Val( 50);
+ writeTypeOp( TYPE1OP::HMOVETO);
+ writeType1Val( 650);
+ writeType1Val( 100);
+ writeTypeOp( TYPE1OP::RLINETO);
+ writeType1Val( -350);
+ writeType1Val( 700);
+ writeTypeOp( TYPE1OP::RLINETO);
+#if 0
+ writeType1Val( -300);
+ writeType1Val( -800);
+ writeTypeOp( TYPE1OP::RLINETO);
+#else
+ writeTypeOp( TYPE1OP::CLOSEPATH);
+#endif
+ writeTypeOp( TYPE1OP::ENDCHAR);
+}
+#else // useful for manually encoding charstrings
+ mpWritePtr = pT1Ops;
+ mpWritePtr += sprintf( (char*)mpWritePtr, "OOo_\x8b\x8c\x0c\x10\x0b");
+#endif
+ const int nType1Len = mpWritePtr - pT1Ops;
+
+ // encrypt the Type1 charstring
+ int nRDCryptR = 4330; // TODO: mnRDCryptSeed;
+ for( U8* p = pT1Ops; p < mpWritePtr; ++p) {
+ *p ^= (nRDCryptR >> 8);
+ nRDCryptR = (*(U8*)p + nRDCryptR) * 52845 + 22719;
+ }
+
+ return nType1Len;
+}
+
+// --------------------------------------------------------------------
+
+double CffSubsetterContext::readRealVal()
+{
+ // TODO: more thorough number validity test
+ bool bComma = false;
+ int nExpVal = 0;
+ int nExpSign = 0;
+ S64 nNumber = 0;
+ double fReal = +1.0;
+ for(;;){
+ const U8 c = *(mpReadPtr++); // read nibbles
+ // parse high nibble
+ const U8 nH = c >> 4U;
+ if( nH <= 9) {
+ nNumber = nNumber * 10 + nH;
+ --nExpVal;
+ } else if( nH == 10) { // comma
+ nExpVal = 0;
+ bComma = true;
+ } else if( nH == 11) { // +exp
+ fReal *= nNumber;
+ nExpSign = +1;
+ nNumber = 0;
+ } else if( nH == 12) { // -exp
+ fReal *= nNumber;
+ nExpSign = -1;
+ nNumber = 0;
+ } else if( nH == 13) { // reserved
+ // TODO: ignore or error?
+ } else if( nH == 14) // minus
+ fReal = -fReal;
+ else if( nH == 15) // end
+ break;
+ // parse low nibble
+ const U8 nL = c & 0x0F;
+ if( nL <= 9) {
+ nNumber = nNumber * 10 + nL;
+ --nExpVal;
+ } else if( nL == 10) { // comma
+ nExpVal = 0;
+ bComma = true;
+ } else if( nL == 11) { // +exp
+ fReal *= nNumber;
+ nNumber = 0;
+ nExpSign = +1;
+ } else if( nL == 12) { // -exp
+ fReal *= nNumber;
+ nNumber = 0;
+ nExpSign = -1;
+ } else if( nL == 13) { // reserved
+ // TODO: ignore or error?
+ } else if( nL == 14) // minus
+ fReal = -fReal;
+ else if( nL == 15) // end
+ break;
+ }
+
+ // merge exponents
+ if( !bComma)
+ nExpVal = 0;
+ if( !nExpSign) { fReal *= nNumber;}
+ else if( nExpSign > 0) { nExpVal += static_cast<int>(nNumber);}
+ else if( nExpSign < 0) { nExpVal -= static_cast<int>(nNumber);}
+
+ // apply exponents
+ if( !nExpVal) { /*nothing to apply*/}
+ else if( nExpVal > 0) { while( --nExpVal >= 0) fReal *= 10.0;}
+ else if( nExpVal < 0) { while( ++nExpVal <= 0) fReal /= 10.0;}
+ return fReal;
+}
+
+// --------------------------------------------------------------------
+
+// prepare to access an element inside a CFF/CID index table
+int CffSubsetterContext::seekIndexData( int nIndexBase, int nDataIndex)
+{
+ if( nDataIndex < 0)
+ return -1;
+ mpReadPtr = mpBasePtr + nIndexBase;
+ const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ if( nDataIndex >= nDataCount)
+ return -1;
+ const int nDataOfsSz = mpReadPtr[2];
+ mpReadPtr += 3 + (nDataOfsSz * nDataIndex);
+ int nOfs1 = 0;
+ switch( nDataOfsSz) {
+ default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return -1;
+ case 1: nOfs1 = mpReadPtr[0]; break;
+ case 2: nOfs1 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nOfs1 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break;
+ case 4: nOfs1 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+ mpReadPtr += nDataOfsSz;
+
+ int nOfs2 = 0;
+ switch( nDataOfsSz) {
+ case 1: nOfs2 = mpReadPtr[0]; break;
+ case 2: nOfs2 = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nOfs2 = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2]; break;
+ case 4: nOfs2 = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+
+ mpReadPtr = mpBasePtr + (nIndexBase + 2) + nDataOfsSz * (nDataCount + 1) + nOfs1;
+ mpReadEnd = mpReadPtr + (nOfs2 - nOfs1);
+ assert( nOfs1 >= 0);
+ assert( nOfs2 >= nOfs1);
+ assert( mpReadEnd <= mpBaseEnd);
+ return (nOfs2 - nOfs1);
+}
+
+// --------------------------------------------------------------------
+
+// skip over a CFF/CID index table
+void CffSubsetterContext::seekIndexEnd( int nIndexBase)
+{
+ mpReadPtr = mpBasePtr + nIndexBase;
+ const int nDataCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ const int nDataOfsSz = mpReadPtr[2];
+ mpReadPtr += 3 + nDataOfsSz * nDataCount;
+ int nEndOfs = 0;
+ switch( nDataOfsSz) {
+ default: fprintf( stderr, "\tINVALID nDataOfsSz=%d\n\n", nDataOfsSz); return;
+ case 1: nEndOfs = mpReadPtr[0]; break;
+ case 2: nEndOfs = (mpReadPtr[0]<<8) + mpReadPtr[1]; break;
+ case 3: nEndOfs = (mpReadPtr[0]<<16) + (mpReadPtr[1]<<8) + mpReadPtr[2];break;
+ case 4: nEndOfs = (mpReadPtr[0]<<24) + (mpReadPtr[1]<<16) + (mpReadPtr[2]<<8) + mpReadPtr[3]; break;
+ }
+ mpReadPtr += nDataOfsSz;
+ mpReadPtr += nEndOfs - 1;
+ mpReadEnd = mpBaseEnd;
+}
+
+// ====================================================================
+
+// initialize FONTDICT specific values
+CffLocal::CffLocal( void)
+: mnPrivDictBase( 0)
+, mnPrivDictSize( 0)
+, mnLocalSubrOffs( 0)
+, mnLocalSubrBase( 0)
+, mnLocalSubrCount( 0)
+, mnLocalSubrBias( 0)
+, mnNominalWidth( 0)
+, mnDefaultWidth( 0)
+, mnStemStdHW( 0)
+, mnStemStdVW( 0)
+, mfBlueScale( 0.0)
+, mfBlueShift( 0.0)
+, mfBlueFuzz( 0.0)
+, mfExpFactor( 0.0)
+, mnLangGroup( 0)
+, mbForceBold( false)
+{
+ maStemSnapH.clear();
+ maStemSnapV.clear();
+ maBlueValues.clear();
+ maOtherBlues.clear();
+ maFamilyBlues.clear();
+ maFamilyOtherBlues.clear();
+}
+
+// --------------------------------------------------------------------
+
+CffGlobal::CffGlobal( void)
+: mnNameIdxBase( 0)
+, mnNameIdxCount( 0)
+, mnStringIdxBase( 0)
+, mnStringIdxCount( 0)
+, mbCIDFont( false)
+, mnCharStrBase( 0)
+, mnCharStrCount( 0)
+, mnEncodingBase( 0)
+, mnCharsetBase( 0)
+, mnGlobalSubrBase( 0)
+, mnGlobalSubrCount( 0)
+, mnGlobalSubrBias( 0)
+, mnFDSelectBase( 0)
+, mnFontDictBase( 0)
+, mnFDAryCount( 1)
+, mnFontNameSID( 0)
+, mnFullNameSID( 0)
+, mnFamilyNameSID( 0)
+{
+ maFontBBox.clear();
+ // TODO; maFontMatrix.clear();
+}
+
+// --------------------------------------------------------------------
+
+void CffSubsetterContext::initialCffRead( void)
+{
+ // get the CFFHeader
+ mpReadPtr = mpBasePtr;
+ const U8 nVerMajor = *(mpReadPtr++);
+ const U8 nVerMinor = *(mpReadPtr++);
+ const U8 nHeaderSize = *(mpReadPtr++);
+ const U8 nOffsetSize = *(mpReadPtr++);
+ // TODO: is the version number useful for anything else?
+ assert( (nVerMajor == 1) && (nVerMinor == 0));
+ (void)(nVerMajor + nVerMinor + nOffsetSize); // avoid compiler warnings
+
+ // prepare access to the NameIndex
+ mnNameIdxBase = nHeaderSize;
+ mpReadPtr = mpBasePtr + nHeaderSize;
+ mnNameIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ seekIndexEnd( mnNameIdxBase);
+
+ // get the TopDict index
+ const long nTopDictBase = getReadOfs();
+ const int nTopDictCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ if( nTopDictCount) {
+ for( int i = 0; i < nTopDictCount; ++i) {
+ seekIndexData( nTopDictBase, i);
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ assert( mpReadPtr == mpReadEnd);
+ }
+ }
+
+ // prepare access to the String index
+ mnStringIdxBase = getReadOfs();
+ mnStringIdxCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ seekIndexEnd( mnStringIdxBase);
+
+ // prepare access to the GlobalSubr index
+ mnGlobalSubrBase = getReadOfs();
+ mnGlobalSubrCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ mnGlobalSubrBias = (mnGlobalSubrCount<1240)?107:(mnGlobalSubrCount<33900)?1131:32768;
+ // skip past the last GlobalSubr entry
+// seekIndexEnd( mnGlobalSubrBase);
+
+ // get/skip the Encodings (we got mnEncodingBase from TOPDICT)
+// seekEncodingsEnd( mnEncodingBase);
+ // get/skip the Charsets (we got mnCharsetBase from TOPDICT)
+// seekCharsetsEnd( mnCharStrBase);
+ // get/skip FDSelect (CID only) data
+
+ // prepare access to the CharStrings index (we got the base from TOPDICT)
+ mpReadPtr = mpBasePtr + mnCharStrBase;
+ mnCharStrCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+// seekIndexEnd( mnCharStrBase);
+
+ // read the FDArray index (CID only)
+ if( mbCIDFont) {
+// assert( mnFontDictBase == tellRel());
+ mpReadPtr = mpBasePtr + mnFontDictBase;
+ mnFDAryCount = (mpReadPtr[0]<<8) + mpReadPtr[1];
+ assert( mnFDAryCount < (int)(sizeof(maCffLocal)/sizeof(*maCffLocal)));
+
+ // read FDArray details to get access to the PRIVDICTs
+ for( int i = 0; i < mnFDAryCount; ++i) {
+ mpCffLocal = &maCffLocal[i];
+ seekIndexData( mnFontDictBase, i);
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ assert( mpReadPtr == mpReadEnd);
+ }
+ }
+
+ for( int i = 0; i < mnFDAryCount; ++i) {
+ mpCffLocal = &maCffLocal[i];
+
+ // get the PrivateDict index
+ // (we got mnPrivDictSize and mnPrivDictBase from TOPDICT or FDArray)
+ if( mpCffLocal->mnPrivDictSize != 0) {
+ assert( mpCffLocal->mnPrivDictSize > 0);
+ // get the PrivDict data
+ mpReadPtr = mpBasePtr + mpCffLocal->mnPrivDictBase;
+ mpReadEnd = mpReadPtr + mpCffLocal->mnPrivDictSize;
+ assert( mpReadEnd <= mpBaseEnd);
+ // read PrivDict details
+ while( mpReadPtr < mpReadEnd)
+ readDictOp();
+ }
+
+ // prepare access to the LocalSubrs (we got mnLocalSubrOffs from PRIVDICT)
+ if( mpCffLocal->mnLocalSubrOffs) {
+ // read LocalSubrs summary
+ mpCffLocal->mnLocalSubrBase = mpCffLocal->mnPrivDictBase + mpCffLocal->mnLocalSubrOffs;
+ mpReadPtr = mpBasePtr + mpCffLocal->mnLocalSubrBase;
+ const int nSubrCount = (mpReadPtr[0] << 8) + mpReadPtr[1];
+ mpCffLocal->mnLocalSubrCount = nSubrCount;
+ mpCffLocal->mnLocalSubrBias = (nSubrCount<1240)?107:(nSubrCount<33900)?1131:32768;
+// seekIndexEnd( mpCffLocal->mnLocalSubrBase);
+ }
+ }
+
+ // ignore the Notices info
+}
+
+// --------------------------------------------------------------------
+
+// get a cstring from a StringID
+const char* CffSubsetterContext::getString( int nStringID)
+{
+ // get a standard string if possible
+ const static int nStdStrings = sizeof(pStringIds)/sizeof(*pStringIds);
+ if( (nStringID >= 0) && (nStringID < nStdStrings))
+ return pStringIds[ nStringID];
+
+ // else get the string from the StringIndex table
+ const U8* pReadPtr = mpReadPtr;
+ const U8* pReadEnd = mpReadEnd;
+ nStringID -= nStdStrings;
+ int nLen = seekIndexData( mnStringIdxBase, nStringID);
+ // assert( nLen >= 0);
+ // TODO: just return the undecorated name
+ // TODO: get rid of static char buffer
+ static char aNameBuf[ 2560];
+ if( nLen < 0) {
+ sprintf( aNameBuf, "name[%d].notfound!", nStringID);
+ } else {
+ const int nMaxLen = sizeof(aNameBuf) - 1;
+ if( nLen >= nMaxLen)
+ nLen = nMaxLen;
+ for( int i = 0; i < nLen; ++i)
+ aNameBuf[i] = *(mpReadPtr++);
+ aNameBuf[ nLen] = '\0';
+ }
+ mpReadPtr = pReadPtr;
+ mpReadEnd = pReadEnd;
+ return aNameBuf;
+}
+
+// --------------------------------------------------------------------
+
+// access a CID's FDSelect table
+int CffSubsetterContext::getFDSelect( int nGlyphIndex) const
+{
+ assert( nGlyphIndex >= 0);
+ assert( nGlyphIndex < mnCharStrCount);
+ if( !mbCIDFont)
+ return 0;
+
+ const U8* pReadPtr = mpBasePtr + mnFDSelectBase;
+ const U8 nFDSelFormat = *(pReadPtr++);
+ switch( nFDSelFormat) {
+ case 0: { // FDSELECT format 0
+ pReadPtr += nGlyphIndex;
+ const U8 nFDIdx = *(pReadPtr++);
+ return nFDIdx;
+ } //break;
+ case 3: { // FDSELECT format 3
+ const U16 nRangeCount = (pReadPtr[0]<<8) + pReadPtr[1];
+ assert( nRangeCount > 0);
+ assert( nRangeCount <= mnCharStrCount);
+ U16 nPrev = (pReadPtr[2]<<8) + pReadPtr[3];
+ assert( nPrev == 0);
+ pReadPtr += 4;
+ // TODO? binary search
+ for( int i = 0; i < nRangeCount; ++i) {
+ const U8 nFDIdx = pReadPtr[0];
+ const U16 nNext = (pReadPtr[1]<<8) + pReadPtr[2];
+ assert( nPrev < nNext);
+ if( nGlyphIndex < nNext)
+ return nFDIdx;
+ pReadPtr += 3;
+ nPrev = nNext;
+ }
+ } break;
+ default: // invalid FDselect format
+ fprintf( stderr, "invalid CFF.FdselType=%d\n", nFDSelFormat);
+ break;
+ }
+
+ assert( false);
+ return -1;
+}
+
+// --------------------------------------------------------------------
+
+int CffSubsetterContext::getGlyphSID( int nGlyphIndex) const
+{
+ if( nGlyphIndex == 0)
+ return 0; // ".notdef"
+ assert( nGlyphIndex >= 0);
+ assert( nGlyphIndex < mnCharStrCount);
+ if( (nGlyphIndex < 0) || (nGlyphIndex >= mnCharStrCount))
+ return -1;
+
+ // get the SID/CID from the Charset table
+ const U8* pReadPtr = mpBasePtr + mnCharsetBase;
+ const U8 nCSetFormat = *(pReadPtr++);
+ int nGlyphsToSkip = nGlyphIndex - 1;
+ switch( nCSetFormat) {
+ case 0: // charset format 0
+ pReadPtr += 2 * nGlyphsToSkip;
+ nGlyphsToSkip = 0;
+ break;
+ case 1: // charset format 1
+ while( nGlyphsToSkip >= 0) {
+ const int nLeft = pReadPtr[2];
+ if( nGlyphsToSkip <= nLeft)
+ break;
+ nGlyphsToSkip -= nLeft + 1;
+ pReadPtr += 3;
+ }
+ break;
+ case 2: // charset format 2
+ while( nGlyphsToSkip >= 0) {
+ const int nLeft = (pReadPtr[2]<<8) + pReadPtr[3];
+ if( nGlyphsToSkip <= nLeft)
+ break;
+ nGlyphsToSkip -= nLeft + 1;
+ pReadPtr += 4;
+ }
+ break;
+ default:
+ fprintf( stderr, "ILLEGAL CFF-Charset format %d\n", nCSetFormat);
+ return -2;
+ }
+
+ int nSID = (pReadPtr[0]<<8) + pReadPtr[1];
+ nSID += nGlyphsToSkip;
+ // NOTE: for CID-fonts the resulting SID is interpreted as CID
+ return nSID;
+}
+
+// --------------------------------------------------------------------
+
+// NOTE: the result becomes invalid with the next call to this method
+const char* CffSubsetterContext::getGlyphName( int nGlyphIndex)
+{
+ // the first glyph is always the .notdef glyph
+ const char* pGlyphName = ".notdef";
+ if( nGlyphIndex == 0)
+ return pGlyphName;
+
+ // prepare a result buffer
+ // TODO: get rid of static buffer
+ static char aDefaultGlyphName[64];
+ pGlyphName = aDefaultGlyphName;
+
+ // get the glyph specific name
+ const int nSID = getGlyphSID( nGlyphIndex);
+ if( nSID < 0) // default glyph name
+ sprintf( aDefaultGlyphName, "gly%03d", nGlyphIndex);
+ else if( mbCIDFont) // default glyph name in CIDs
+ sprintf( aDefaultGlyphName, "cid%03d", nSID);
+ else { // glyph name from string table
+ const char* pSidName = getString( nSID);
+ // check validity of glyph name
+ if( pSidName) {
+ const char* p = pSidName;
+ while( (*p >= '0') && (*p <= 'z')) ++p;
+ if( (p >= pSidName+1) && (*p == '\0'))
+ pGlyphName = pSidName;
+ }
+ // if needed invent a fallback name
+ if( pGlyphName != pSidName)
+ sprintf( aDefaultGlyphName, "bad%03d", nSID);
+ }
+
+ return pGlyphName;
+}
+
+// --------------------------------------------------------------------
+
+class Type1Emitter
+{
+public:
+ explicit Type1Emitter( const char* pOutFileName, bool bPfbSubset = true);
+ explicit Type1Emitter( FILE* pOutFile, bool bPfbSubset = true);
+ /*virtual*/ ~Type1Emitter( void);
+ void setSubsetName( const char* );
+
+ void emitRawData( const char* pData, int nLength) const;
+ void emitAllRaw( void);
+ void emitAllHex( void);
+ void emitAllCrypted( void);
+ int tellPos( void) const;
+ void updateLen( int nTellPos, int nLength);
+ void emitIntVector( const char* pLineHead, const char* pLineTail, const IntVector&);
+private:
+ FILE* mpFileOut;
+ bool mbCloseOutfile;
+ char maBuffer[MAX_T1OPS_SIZE]; // TODO: dynamic allocation
+ int mnEECryptR;
+public:
+ char* mpPtr;
+
+ char maSubsetName[256];
+ bool mbPfbSubset;
+ int mnHexLineCol;
+};
+
+// --------------------------------------------------------------------
+
+Type1Emitter::Type1Emitter( const char* pPfbFileName, bool bPfbSubset)
+: mpFileOut( NULL)
+, mbCloseOutfile( true)
+, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed
+, mpPtr( maBuffer)
+, mbPfbSubset( bPfbSubset)
+, mnHexLineCol( 0)
+{
+ mpFileOut = fopen( pPfbFileName, "wb");
+ maSubsetName[0] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+Type1Emitter::Type1Emitter( FILE* pOutFile, bool bPfbSubset)
+: mpFileOut( pOutFile)
+, mbCloseOutfile( false)
+, mnEECryptR( 55665) // default eexec seed, TODO: mnEECryptSeed
+, mpPtr( maBuffer)
+, mbPfbSubset( bPfbSubset)
+, mnHexLineCol( 0)
+{
+ maSubsetName[0] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+Type1Emitter::~Type1Emitter( void)
+{
+ if( !mpFileOut)
+ return;
+ if( mbCloseOutfile )
+ fclose( mpFileOut);
+ mpFileOut = NULL;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::setSubsetName( const char* pSubsetName)
+{
+ maSubsetName[0] = '\0';
+ if( pSubsetName)
+ strncpy( maSubsetName, pSubsetName, sizeof(maSubsetName));
+ maSubsetName[sizeof(maSubsetName)-1] = '\0';
+}
+
+// --------------------------------------------------------------------
+
+int Type1Emitter::tellPos( void) const
+{
+ int nTellPos = ftell( mpFileOut);
+ return nTellPos;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::updateLen( int nTellPos, int nLength)
+{
+ // update PFB segment header length
+ U8 cData[4];
+ cData[0] = static_cast<U8>(nLength >> 0);
+ cData[1] = static_cast<U8>(nLength >> 8);
+ cData[2] = static_cast<U8>(nLength >> 16);
+ cData[3] = static_cast<U8>(nLength >> 24);
+ const int nCurrPos = ftell( mpFileOut);
+ fseek( mpFileOut, nTellPos, SEEK_SET);
+ fwrite( cData, 1, sizeof(cData), mpFileOut);
+ fseek( mpFileOut, nCurrPos, SEEK_SET);
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitRawData( const char* pData, int nLength) const
+{
+ fwrite( pData, 1, nLength, mpFileOut);
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitAllRaw( void)
+{
+ // writeout raw data
+ assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer));
+ emitRawData( maBuffer, mpPtr - maBuffer);
+ // reset the raw buffer
+ mpPtr = maBuffer;
+}
+
+// --------------------------------------------------------------------
+
+inline void Type1Emitter::emitAllHex( void)
+{
+ assert( (mpPtr - maBuffer) < (int)sizeof(maBuffer));
+ for( const char* p = maBuffer; p < mpPtr;) {
+ // convert binary chunk to hex
+ char aHexBuf[0x4000];
+ char* pOut = aHexBuf;
+ while( (p < mpPtr) && (pOut < aHexBuf+sizeof(aHexBuf)-4)) {
+ // convert each byte to hex
+ char cNibble = (*p >> 4) & 0x0F;
+ cNibble += (cNibble < 10) ? '0' : 'A'-10;
+ *(pOut++) = cNibble;
+ cNibble = *(p++) & 0x0F;
+ cNibble += (cNibble < 10) ? '0' : 'A'-10;
+ *(pOut++) = cNibble;
+ // limit the line length
+ if( (++mnHexLineCol & 0x3F) == 0)
+ *(pOut++) = '\n';
+ }
+ // writeout hex-converted chunk
+ emitRawData( aHexBuf, pOut-aHexBuf);
+ }
+ // reset the raw buffer
+ mpPtr = maBuffer;
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::emitAllCrypted( void)
+{
+ // apply t1crypt
+ for( char* p = maBuffer; p < mpPtr; ++p) {
+ *p ^= (mnEECryptR >> 8);
+ mnEECryptR = (*(U8*)p + mnEECryptR) * 52845 + 22719;
+ }
+
+ // emit the t1crypt result
+ if( mbPfbSubset)
+ emitAllRaw();
+ else
+ emitAllHex();
+}
+
+// --------------------------------------------------------------------
+
+void Type1Emitter::emitIntVector( const char* pLineHead, const char* pLineTail,
+ const IntVector& rVector)
+{
+ // ignore empty vectors
+ if( rVector.empty())
+ return;
+
+ // emit the line head
+ mpPtr += sprintf( mpPtr, pLineHead);
+ // emit the vector values
+ IntVector::value_type nVal = 0;
+ for( IntVector::const_iterator it = rVector.begin();;) {
+ nVal = *it;
+ if( ++it == rVector.end() )
+ break;
+ mpPtr += sprintf( mpPtr, "%d ", nVal);
+ }
+ // emit the last value
+ mpPtr += sprintf( mpPtr, "%d", nVal);
+ // emit the line tail
+ mpPtr += sprintf( mpPtr, pLineTail);
+}
+
+// --------------------------------------------------------------------
+
+bool CffSubsetterContext::emitAsType1( Type1Emitter& rEmitter,
+ const long* pReqGlyphIDs, const U8* pReqEncoding,
+ GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rFSInfo)
+{
+ // prepare some fontdirectory details
+ static const int nUniqueIdBase = 4100000; // using private-interchange UniqueIds
+ static int nUniqueId = nUniqueIdBase;
+ ++nUniqueId;
+
+ char* pFontName = rEmitter.maSubsetName;
+ if( !*pFontName ) {
+ if( mnFontNameSID) {
+ // get the fontname directly if available
+ strncpy( pFontName, getString( mnFontNameSID), sizeof(rEmitter.maSubsetName));
+ } else if( mnFullNameSID) {
+ // approximate fontname as fullname-whitespace
+ const char* pI = getString( mnFullNameSID);
+ char* pO = pFontName;
+ const char* pLimit = pFontName + sizeof(rEmitter.maSubsetName) - 1;
+ while( pO < pLimit) {
+ const char c = *(pI++);
+ if( c != ' ')
+ *(pO++) = c;
+ if( !c)
+ break;
+ }
+ *pO = '\0';
+ } else {
+ // fallback name of last resort
+ strncpy( pFontName, "DummyName", sizeof(rEmitter.maSubsetName));
+ }
+ }
+ const char* pFullName = pFontName;
+ const char* pFamilyName = pFontName;
+
+ char*& pOut = rEmitter.mpPtr; // convenience reference, TODO: cleanup
+
+ // create a PFB+Type1 header
+ if( rEmitter.mbPfbSubset ) {
+ static const char aPfbHeader[] = "\x80\x01\x00\x00\x00\x00";
+ rEmitter.emitRawData( aPfbHeader, sizeof(aPfbHeader)-1);
+ }
+
+ pOut += sprintf( pOut, "%%!FontType1-1.0: %s 001.003\n", rEmitter.maSubsetName);
+ // emit TOPDICT
+#if 0 // improve PS Type1 caching?
+ nOfs += sprintf( &aT1Str[nOfs],
+ "FontDirectory/%s known{/%s findfont dup/UniqueID known{dup\n"
+ "/UniqueID get %d eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+ "{save true}{false}ifelse}\n{false}ifelse\n",
+ pFamilyName, pFamilyName, nUniqueId);
+#endif
+ pOut += sprintf( pOut,
+ "11 dict begin\n" // TODO: dynamic entry count for TOPDICT
+ "/FontType 1 def\n"
+ "/PaintType 0 def\n");
+ pOut += sprintf( pOut, "/FontName /%s def\n", rEmitter.maSubsetName);
+ pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId);
+ pOut += sprintf( pOut, "/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def\n");
+ if( maFontBBox.size() == 4)
+ pOut += sprintf( pOut, "/FontBBox [%d %d %d %d ]readonly def\n",
+ maFontBBox[0], maFontBBox[1], maFontBBox[2], maFontBBox[3]);
+ else
+ pOut += sprintf( pOut, "/FontBBox [0 0 999 999]readonly def\n");
+ // emit FONTINFO into TOPDICT
+ pOut += sprintf( pOut,
+ "/FontInfo 2 dict dup begin\n" // TODO: check fontinfo entry count
+ " /FullName (%s) readonly def\n"
+ " /FamilyName (%s) readonly def\n"
+ "end readonly def\n",
+ pFullName, pFamilyName);
+#if 0 // TODO: use an standard Type1 encoding if possible
+ pOut += sprintf( pOut,
+ "/Encoding StandardEncoding def\n");
+#else
+ pOut += sprintf( pOut,
+ "/Encoding 256 array\n"
+ "0 1 255 {1 index exch /.notdef put} for\n");
+ for( int i = 1; (i < nGlyphCount) && (i < 256); ++i) {
+ const char* pGlyphName = getGlyphName( pReqGlyphIDs[i]);
+ pOut += sprintf( pOut, "dup %d /%s put\n", pReqEncoding[i], pGlyphName);
+ }
+ pOut += sprintf( pOut, "readonly def\n");
+#endif
+ pOut += sprintf( pOut,
+ // TODO: more topdict entries
+ "currentdict end\n"
+ "currentfile eexec\n");
+
+ // emit PFB header
+ rEmitter.emitAllRaw();
+ if( rEmitter.mbPfbSubset) {
+ // update PFB header segment
+ const int nPfbHeaderLen = rEmitter.tellPos() - 6;
+ rEmitter.updateLen( 2, nPfbHeaderLen);
+
+ // prepare start of eexec segment
+ rEmitter.emitRawData( "\x80\x02\x00\x00\x00\x00", 6); // segment start
+ }
+ const int nEExecSegTell = rEmitter.tellPos();
+
+ // which always starts with a privdict
+ // count the privdict entries
+ int nPrivEntryCount = 9;
+#if !defined(IGNORE_HINTS)
+ // emit blue hints only if non-default values
+ nPrivEntryCount += !mpCffLocal->maOtherBlues.empty();
+ nPrivEntryCount += !mpCffLocal->maFamilyBlues.empty();
+ nPrivEntryCount += !mpCffLocal->maFamilyOtherBlues.empty();
+ nPrivEntryCount += (mpCffLocal->mfBlueScale != 0.0);
+ nPrivEntryCount += (mpCffLocal->mfBlueShift != 0.0);
+ nPrivEntryCount += (mpCffLocal->mfBlueFuzz != 0.0);
+ // emit stem hints only if non-default values
+ nPrivEntryCount += (mpCffLocal->mnStemStdHW != 0);
+ nPrivEntryCount += (mpCffLocal->mnStemStdVW != 0);
+ nPrivEntryCount += !mpCffLocal->maStemSnapH.empty();
+ nPrivEntryCount += !mpCffLocal->maStemSnapV.empty();
+ // emit other hints only if non-default values
+ nPrivEntryCount += (mpCffLocal->mfExpFactor != 0.0);
+ nPrivEntryCount += (mpCffLocal->mnLangGroup != 0);
+ nPrivEntryCount += (mpCffLocal->mnLangGroup == 1);
+ nPrivEntryCount += (mpCffLocal->mbForceBold != false);
+#endif // IGNORE_HINTS
+ // emit the privdict header
+ pOut += sprintf( pOut,
+ "\110\104\125 "
+ "dup\n/Private %d dict dup begin\n"
+ "/RD{string currentfile exch readstring pop}executeonly def\n"
+ "/ND{noaccess def}executeonly def\n"
+ "/NP{noaccess put}executeonly def\n"
+ "/MinFeature{16 16}ND\n"
+ "/password 5839 def\n", // TODO: mnRDCryptSeed?
+ nPrivEntryCount);
+
+#if defined(IGNORE_HINTS)
+ pOut += sprintf( pOut, "/BlueValues []ND\n"); // BlueValues are mandatory
+#else
+ // emit blue hint related privdict entries
+ if( !mpCffLocal->maBlueValues.empty())
+ rEmitter.emitIntVector( "/BlueValues [", "]ND\n", mpCffLocal->maBlueValues);
+ else
+ pOut += sprintf( pOut, "/BlueValues []ND\n"); // default to empty BlueValues
+ rEmitter.emitIntVector( "/OtherBlues [", "]ND\n", mpCffLocal->maOtherBlues);
+ rEmitter.emitIntVector( "/FamilyBlues [", "]ND\n", mpCffLocal->maFamilyBlues);
+ rEmitter.emitIntVector( "/FamilyOtherBlues [", "]ND\n", mpCffLocal->maFamilyOtherBlues);
+
+ if( mpCffLocal->mfBlueScale)
+ pOut += sprintf( pOut, "/BlueScale %.6f def\n", mpCffLocal->mfBlueScale);
+ if( mpCffLocal->mfBlueShift) // default BlueShift==7
+ pOut += sprintf( pOut, "/BlueShift %.1f def\n", mpCffLocal->mfBlueShift);
+ if( mpCffLocal->mfBlueFuzz) // default BlueFuzz==1
+ pOut += sprintf( pOut, "/BlueFuzz %.1f def\n", mpCffLocal->mfBlueFuzz);
+
+ // emit stem hint related privdict entries
+ if( mpCffLocal->mnStemStdHW)
+ pOut += sprintf( pOut, "/StdHW [%d] def\n", mpCffLocal->mnStemStdHW);
+ if( mpCffLocal->mnStemStdVW)
+ pOut += sprintf( pOut, "/StdVW [%d] def\n", mpCffLocal->mnStemStdVW);
+ rEmitter.emitIntVector( "/StemSnapH [", "]ND\n", mpCffLocal->maStemSnapH);
+ rEmitter.emitIntVector( "/StemSnapV [", "]ND\n", mpCffLocal->maStemSnapV);
+
+ // emit other hints
+ if( mpCffLocal->mbForceBold)
+ pOut += sprintf( pOut, "/ForceBold true def\n");
+ if( mpCffLocal->mnLangGroup != 0)
+ pOut += sprintf( pOut, "/LanguageGroup %d def\n", mpCffLocal->mnLangGroup);
+ if( mpCffLocal->mnLangGroup == 1) // compatibility with ancient printers
+ pOut += sprintf( pOut, "/RndStemUp false def\n");
+ if( mpCffLocal->mfExpFactor)
+ pOut += sprintf( pOut, "/ExpansionFactor %.2f def\n", mpCffLocal->mfExpFactor);
+#endif // IGNORE_HINTS
+
+ // emit remaining privdict entries
+ pOut += sprintf( pOut, "/UniqueID %d def\n", nUniqueId);
+ // TODO?: more privdict entries?
+
+ static const char aOtherSubrs[] =
+ "/OtherSubrs\n"
+ "% Dummy code for faking flex hints\n"
+ "[ {} {} {} {systemdict /internaldict known not {pop 3}\n"
+ "{1183615869 systemdict /internaldict get exec\n"
+ "dup /startlock known\n"
+ "{/startlock get exec}\n"
+ "{dup /strtlck known\n"
+ "{/strtlck get exec}\n"
+ "{pop 3}\nifelse}\nifelse}\nifelse\n} executeonly\n"
+ "] ND\n";
+ memcpy( pOut, aOtherSubrs, sizeof(aOtherSubrs)-1);
+ pOut += sizeof(aOtherSubrs)-1;
+
+ // emit used GlobalSubr charstrings
+ // these are the just the default subrs
+ static const char aSubrs[] =
+ "/Subrs 5 array\n"
+ "dup 0 15 RD \x5F\x3D\x6B\xAC\x3C\xBD\x74\x3D\x3E\x17\xA0\x86\x58\x08\x85 NP\n"
+ "dup 1 9 RD \x5F\x3D\x6B\xD8\xA6\xB5\x68\xB6\xA2 NP\n"
+ "dup 2 9 RD \x5F\x3D\x6B\xAC\x39\x46\xB9\x43\xF9 NP\n"
+ "dup 3 5 RD \x5F\x3D\x6B\xAC\xB9 NP\n"
+ "dup 4 12 RD \x5F\x3D\x6B\xAC\x3E\x5D\x48\x54\x62\x76\x39\x03 NP\n"
+ "ND\n";
+ memcpy( pOut, aSubrs, sizeof(aSubrs)-1);
+ pOut += sizeof(aSubrs)-1;
+
+ // TODO: emit more GlobalSubr charstrings?
+ // TODO: emit used LocalSubr charstrings?
+
+ // emit the CharStrings for the requested glyphs
+ pOut += sprintf( pOut,
+ "2 index /CharStrings %d dict dup begin\n", nGlyphCount);
+ rEmitter.emitAllCrypted();
+ for( int i = 0; i < nGlyphCount; ++i) {
+ const int nGlyphId = pReqGlyphIDs[i];
+ assert( (nGlyphId >= 0) && (nGlyphId < mnCharStrCount));
+ // get privdict context matching to the glyph
+ const int nFDSelect = getFDSelect( nGlyphId);
+ mpCffLocal = &maCffLocal[ nFDSelect];
+ // convert the Type2op charstring to its Type1op counterpart
+ const int nT2Len = seekIndexData( mnCharStrBase, nGlyphId);
+ assert( nT2Len > 0);
+ U8 aType1Ops[ MAX_T1OPS_SIZE]; // TODO: dynamic allocation
+ const int nT1Len = convert2Type1Ops( mpCffLocal, mpReadPtr, nT2Len, aType1Ops);
+ // get the glyph name
+ const char* pGlyphName = getGlyphName( nGlyphId);
+ // emit the encrypted Type1op charstring
+ pOut += sprintf( pOut, "/%s %d RD ", pGlyphName, nT1Len);
+ memcpy( pOut, aType1Ops, nT1Len);
+ pOut += nT1Len;
+ pOut += sprintf( pOut, " ND\n");
+ rEmitter.emitAllCrypted();
+ // provide individual glyphwidths if requested
+ if( pGlyphWidths )
+ pGlyphWidths[i] = getCharWidth();
+ }
+ pOut += sprintf( pOut, "end end\nreadonly put\nput\n");
+ pOut += sprintf( pOut, "dup/FontName get exch definefont pop\n");
+ pOut += sprintf( pOut, "mark currentfile closefile\n");
+ rEmitter.emitAllCrypted();
+
+ // mark stop of eexec encryption
+ if( rEmitter.mbPfbSubset) {
+ const int nEExecLen = rEmitter.tellPos() - nEExecSegTell;
+ rEmitter.updateLen( nEExecSegTell-4, nEExecLen);
+ }
+
+ // create PFB footer
+ static const char aPfxFooter[] = "\x80\x01\x14\x02\x00\x00\n" // TODO: check segment len
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "0000000000000000000000000000000000000000000000000000000000000000\n"
+ "cleartomark\n"
+ "\x80\x03";
+ if( rEmitter.mbPfbSubset)
+ rEmitter.emitRawData( aPfxFooter, sizeof(aPfxFooter)-1);
+ else
+ rEmitter.emitRawData( aPfxFooter+6, sizeof(aPfxFooter)-9);
+
+ // provide details to the subset requesters, TODO: move into own method?
+ // note: Top and Bottom are flipped between Type1 and VCL
+ rFSInfo.m_aFontBBox = Rectangle( Point( maFontBBox[0], maFontBBox[1] ), Point( maFontBBox[2], maFontBBox[3] ) );
+ // PDF-Spec says the values below mean the ink bounds!
+ // TODO: use better approximations for these ink bounds
+ rFSInfo.m_nAscent = +rFSInfo.m_aFontBBox.Bottom(); // for capital letters
+ rFSInfo.m_nDescent = -rFSInfo.m_aFontBBox.Top(); // for all letters
+ rFSInfo.m_nCapHeight = rFSInfo.m_nAscent; // for top-flat capital letters
+
+ rFSInfo.m_nFontType = rEmitter.mbPfbSubset ? FontSubsetInfo::TYPE1_PFB : FontSubsetInfo::TYPE1_PFA;
+ rFSInfo.m_aPSName = String( rEmitter.maSubsetName, RTL_TEXTENCODING_UTF8 );
+
+ return true;
+}
+
+// ====================================================================
+
+bool FontSubsetInfo::CreateFontSubsetFromCff( GlyphWidth* pOutGlyphWidths )
+{
+ CffSubsetterContext aCff( mpInFontBytes, mnInByteLength);
+ aCff.initialCffRead();
+
+ // emit Type1 subset from the CFF input
+ // TODO: also support CFF->CFF subsetting (when PDF-export and PS-printing need it)
+ const bool bPfbSubset = (0 != (mnReqFontTypeMask & FontSubsetInfo::TYPE1_PFB));
+ Type1Emitter aType1Emitter( mpOutFile, bPfbSubset);
+ aType1Emitter.setSubsetName( mpReqFontName);
+ bool bRC = aCff.emitAsType1( aType1Emitter,
+ mpReqGlyphIds, mpReqEncodedIds,
+ pOutGlyphWidths, mnReqGlyphCount, *this);
+ return bRC;
+}
+
+// ====================================================================
+
diff --git a/vcl/source/fontsubset/fontsubset.cxx b/vcl/source/fontsubset/fontsubset.cxx
new file mode 100644
index 000000000000..e203feed1645
--- /dev/null
+++ b/vcl/source/fontsubset/fontsubset.cxx
@@ -0,0 +1,185 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <vcl/fontsubset.hxx>
+#include <sft.hxx>
+#include <tools/debug.hxx>
+
+// ====================================================================
+
+FontSubsetInfo::FontSubsetInfo()
+: m_nAscent( 0)
+, m_nDescent( 0)
+, m_nCapHeight( 0)
+, m_nFontType( FontSubsetInfo::NO_FONT)
+, mpInFontBytes( NULL)
+, mnInByteLength( NULL)
+, meInFontType( FontSubsetInfo::NO_FONT)
+, mpSftTTFont( NULL)
+{}
+
+// --------------------------------------------------------------------
+
+FontSubsetInfo::~FontSubsetInfo()
+{}
+
+// --------------------------------------------------------------------
+
+// prepare subsetting for fonts where the input font file is mapped
+bool FontSubsetInfo::LoadFont(
+ FontSubsetInfo::FontType eInFontType,
+ const unsigned char* pInFontBytes, int nInByteLength)
+{
+ DBG_ASSERT( (mpSftTTFont == NULL), "Subset from SFT and from mapped font-file requested");
+ meInFontType = eInFontType;
+ mpInFontBytes = pInFontBytes;
+ mnInByteLength = nInByteLength;
+ return (mnInByteLength > 0);
+}
+
+// --------------------------------------------------------------------
+
+// prepare subsetting for fonts that are known to the SFT-parser
+bool FontSubsetInfo::LoadFont( vcl::_TrueTypeFont* pSftTTFont )
+{
+ DBG_ASSERT( (mpInFontBytes == NULL), "Subset from SFT and from mapped font-file requested");
+ mpSftTTFont = pSftTTFont;
+ meInFontType = ANY_SFNT;
+ return (mpSftTTFont == NULL);
+}
+
+// --------------------------------------------------------------------
+
+bool FontSubsetInfo::CreateFontSubset(
+ int nReqFontTypeMask,
+ FILE* pOutFile, const char* pReqFontName,
+ const long* pReqGlyphIds, const sal_uInt8* pReqEncodedIds, int nReqGlyphCount,
+ sal_Int32* pOutGlyphWidths)
+{
+ // prepare request details needed by all underlying subsetters
+ mnReqFontTypeMask = nReqFontTypeMask;
+ mpOutFile = pOutFile;
+ mpReqFontName = pReqFontName;
+ mpReqGlyphIds = pReqGlyphIds;
+ mpReqEncodedIds = pReqEncodedIds;
+ mnReqGlyphCount = nReqGlyphCount;
+
+ // TODO: move the glyphid/encid/notdef reshuffling from the callers to here
+
+ // dispatch to underlying subsetters
+ bool bOK = false;
+
+ // TODO: better match available input-type to possible subset-types
+ switch( meInFontType) {
+ case SFNT_TTF:
+ case SFNT_CFF:
+ case ANY_SFNT:
+ bOK = CreateFontSubsetFromSfnt( pOutGlyphWidths);
+ break;
+ case CFF_FONT:
+ bOK = CreateFontSubsetFromCff( pOutGlyphWidths);
+ break;
+ case TYPE1_PFA:
+ case TYPE1_PFB:
+ case ANY_TYPE1:
+ bOK = CreateFontSubsetFromType1( pOutGlyphWidths);
+ break;
+ // fall trough
+ case NO_FONT:
+ // fall trough
+ default:
+ DBG_ERROR( "unhandled type in CreateFontSubset()");
+ break;
+ }
+
+ return bOK;
+}
+
+// --------------------------------------------------------------------
+
+// TODO: move function to sft.cxx to replace dummy implementation
+bool FontSubsetInfo::CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths )
+{
+ // handle SFNT_CFF fonts
+ int nCffLength = 0;
+ const sal_uInt8* pCffBytes = NULL;
+ if( GetSfntTable( mpSftTTFont, O_CFF, &pCffBytes, &nCffLength))
+ {
+ LoadFont( CFF_FONT, pCffBytes, nCffLength);
+ const bool bOK = CreateFontSubsetFromCff( pOutGlyphWidths);
+ return bOK;
+ }
+
+ // handle SFNT_TTF fonts
+ // by forwarding the subset request to AG's sft subsetter
+#if 1 // TODO: remove conversion tp 16bit glyphids when sft-subsetter has been updated
+ sal_uInt16 aShortGlyphIds[256];
+ for( int i = 0; i < mnReqGlyphCount; ++i)
+ aShortGlyphIds[i] = (sal_uInt16)mpReqGlyphIds[i];
+ // remove const_cast when sft-subsetter is const-correct
+ sal_uInt8* pEncArray = const_cast<sal_uInt8*>( mpReqEncodedIds );
+#endif
+ int nSFTErr = vcl::SF_BADARG;
+ if( (mnReqFontTypeMask & TYPE42_FONT) != 0 )
+ {
+ nSFTErr = CreateT42FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName,
+ aShortGlyphIds, pEncArray, mnReqGlyphCount );
+ }
+ else if( (mnReqFontTypeMask & TYPE3_FONT) != 0 )
+ {
+ nSFTErr = CreateT3FromTTGlyphs( mpSftTTFont, mpOutFile, mpReqFontName,
+ aShortGlyphIds, pEncArray, mnReqGlyphCount,
+ 0 /* 0 = horizontal, 1 = vertical */ );
+ }
+ else if( (mnReqFontTypeMask & SFNT_TTF) != 0 )
+ {
+ // TODO: use CreateTTFromTTGlyphs()
+ // TODO: move functionality from callers here
+ }
+
+ return (nSFTErr != vcl::SF_OK);
+}
+
+// --------------------------------------------------------------------
+
+// TODO: replace dummy implementation
+bool FontSubsetInfo::CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths)
+{
+#if 0
+ // TODO: replace dummy implementation when someone needs this
+#else
+ (void)pOutGlyphWidths;
+ fprintf(stderr,"CreateFontSubsetFromType1: replace dummy implementation\n");
+#endif
+ return false;
+}
+
+// ====================================================================
+
diff --git a/vcl/source/fontsubset/makefile.mk b/vcl/source/fontsubset/makefile.mk
index b7d719f3c912..95cc12bccfaa 100644
--- a/vcl/source/fontsubset/makefile.mk
+++ b/vcl/source/fontsubset/makefile.mk
@@ -40,6 +40,8 @@ ENABLE_EXCEPTIONS=true
SLOFILES=\
$(SLO)$/list.obj \
$(SLO)$/sft.obj \
+ $(SLO)$/cff.obj \
+ $(SLO)$/fontsubset.obj \
$(SLO)$/xlat.obj \
$(SLO)$/ttcr.obj \
$(SLO)$/gsub.obj
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 10d4cf774b04..0accc42af968 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -25,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
/*
* Sun Font Tools
*
@@ -131,6 +134,7 @@ static const sal_uInt32 TTFontClassTag = 0x74746663; /* 'ttfc' */
static const sal_uInt32 T_true = 0x74727565; /* 'true' */
static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */
+static const sal_uInt32 T_otto = 0x4f54544f; /* 'OTTO' */
/* standard TrueType table tags */
#define T_maxp 0x6D617870
@@ -150,6 +154,7 @@ static const sal_uInt32 T_ttcf = 0x74746366; /* 'ttcf' */
#define T_prep 0x70726570
#define T_fpgm 0x6670676D
#define T_gsub 0x47535542
+#define T_CFF 0x43464620
#define LAST_URANGE_BIT 69
const char *ulcodes[LAST_URANGE_BIT+2] = {
@@ -329,7 +334,7 @@ _inline void PutInt16(sal_Int16 val, sal_uInt8 *ptr, size_t offset, int bigendia
}
-#if defined(OSL_BIG_ENDIAN)
+#if defined(OSL_BIGENDIAN)
#define Int16FromMOTA(a) (a)
#define Int32FromMOTA(a) (a)
#else
@@ -416,7 +421,7 @@ _inline const char *UnicodeRangeName(sal_uInt16 bit)
return ulcodes[bit];
}
-_inline sal_uInt8 *getTable(TrueTypeFont *ttf, sal_uInt32 ord)
+_inline const sal_uInt8* getTable( TrueTypeFont *ttf, sal_uInt32 ord)
{
return (sal_uInt8*)ttf->tables[ord];
}
@@ -496,7 +501,7 @@ static void HexFmtBlockWrite(HexFmt *_this, const void *ptr, sal_uInt32 size)
/* fills the aw and lsb entries of the TTGlyphMetrics structure from hmtx table -*/
static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *metrics)
{
- sal_uInt8 *table = getTable(ttf, O_hmtx);
+ const sal_uInt8* table = getTable( ttf, O_hmtx );
metrics->aw = metrics->lsb = metrics->ah = metrics->tsb = 0;
if (!table || !ttf->numberOfHMetrics) return;
@@ -510,7 +515,8 @@ static void GetMetrics(TrueTypeFont *ttf, sal_uInt32 glyphID, TTGlyphMetrics *me
}
table = getTable(ttf, O_vmtx);
- if (!table || !ttf->numOfLongVerMetrics) return;
+ if( !table || !ttf->numOfLongVerMetrics )
+ return;
if (glyphID < ttf->numOfLongVerMetrics) {
metrics->ah = GetUInt16(table, 4 * glyphID, 1);
@@ -526,19 +532,21 @@ static int GetTTGlyphOutline(TrueTypeFont *, sal_uInt32 , ControlPoint **, TTGly
/* returns the number of control points, allocates the pointArray */
static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics) /*FOLD02*/
{
- sal_uInt8 *table = getTable(ttf, O_glyf);
- sal_uInt8 *ptr, *p, flag, n;
- sal_Int16 numberOfContours;
- sal_uInt16 t, instLen, lastPoint=0;
+ const sal_uInt8* table = getTable( ttf, O_glyf );
+ sal_uInt8 flag, n;
+ sal_uInt16 t, lastPoint=0;
int i, j, z;
*pointArray = 0;
/* printf("GetSimpleTTOutline(%d)\n", glyphID); */
- if (glyphID >= ttf->nglyphs) return 0; /*- glyph is not present in the font */
- ptr = table + ttf->goffsets[glyphID];
- if ((numberOfContours = GetInt16(ptr, 0, 1)) <= 0) return 0; /*- glyph is not simple */
+ if( glyphID >= ttf->nglyphs ) /*- glyph is not present in the font */
+ return 0;
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ const sal_Int16 numberOfContours = GetInt16(ptr, 0, 1);
+ if( numberOfContours <= 0 ) /*- glyph is not simple */
+ return 0;
if (metrics) { /*- GetCompoundTTOutline() calls this function with NULL metrics -*/
metrics->xMin = GetInt16(ptr, 2, 1);
@@ -554,8 +562,8 @@ static int GetSimpleTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoin
if ((t = GetUInt16(ptr, 10+i*2, 1)) > lastPoint) lastPoint = t;
}
- instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1);
- p = ptr + 10 + 2 * numberOfContours + 2 + instLen;
+ sal_uInt16 instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1);
+ const sal_uInt8* p = ptr + 10 + 2 * numberOfContours + 2 + instLen;
ControlPoint* pa = (ControlPoint*)calloc(lastPoint+1, sizeof(ControlPoint));
i = 0;
@@ -617,8 +625,7 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
{
sal_uInt16 flags, index;
sal_Int16 e, f, numberOfContours;
- sal_uInt8 *table = getTable(ttf, O_glyf);
- sal_uInt8 *ptr;
+ const sal_uInt8* table = getTable( ttf, O_glyf );
std::vector<ControlPoint> myPoints;
ControlPoint *nextComponent, *pa;
int i, np;
@@ -627,13 +634,12 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
*pointArray = 0;
/* printf("GetCompoundTTOutline(%d)\n", glyphID); */
- if (glyphID >= ttf->nglyphs) { /*- incorrect glyphID */
+ if (glyphID >= ttf->nglyphs) /*- incorrect glyphID */
return 0;
- }
- ptr = table + ttf->goffsets[glyphID];
- if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) { /*- glyph is not compound */
+
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) /*- glyph is not compound */
return 0;
- }
if (metrics) {
metrics->xMin = GetInt16(ptr, 2, 1);
@@ -819,9 +825,8 @@ static int GetCompoundTTOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPo
*/
static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics, std::vector< sal_uInt32 >* glyphlist)
{
- sal_uInt8 *ptr, *table = getTable(ttf, O_glyf);
+ const sal_uInt8 *table = getTable( ttf, O_glyf );
sal_Int16 numberOfContours;
- int length;
int res;
*pointArray = 0;
@@ -831,8 +836,8 @@ static int GetTTGlyphOutline(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint
if (glyphID >= ttf->nglyphs) return -1; /**/
- ptr = table + ttf->goffsets[glyphID];
- length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID];
+ const sal_uInt8* ptr = table + ttf->goffsets[glyphID];
+ int length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID];
if (length == 0) { /*- empty glyphs still have hmtx and vmtx metrics values */
if (metrics) GetMetrics(ttf, glyphID, metrics);
@@ -1005,15 +1010,15 @@ static int BSplineToPSPath(ControlPoint *srcA, int srcCount, PSPathElement **pat
/*- Extracts a string from the name table and allocates memory for it -*/
-static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result )
+static char *nameExtract( const sal_uInt8* name, int nTableSize, int n, int dbFlag, sal_uInt16** ucs2result )
{
int i;
char *res;
- sal_uInt8 *ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1);
+ const sal_uInt8* ptr = name + GetUInt16(name, 4, 1) + GetUInt16(name + 6, 12 * n + 10, 1);
int len = GetUInt16(name+6, 12 * n + 8, 1);
// sanity check
- if( ! len || ptr >= (name+nTableSize-len) )
+ if( (len <= 0) || ((ptr+len) > (name+nTableSize)) )
{
if( ucs2result )
*ucs2result = NULL;
@@ -1043,7 +1048,8 @@ static char *nameExtract(sal_uInt8 *name, int nTableSize, int n, int dbFlag, sal
return res;
}
-static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID)
+static int findname( const sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID,
+ sal_uInt16 encodingID, sal_uInt16 languageID, sal_uInt16 nameID )
{
int l = 0, r = n-1, i;
sal_uInt32 t1, t2;
@@ -1085,7 +1091,7 @@ static int findname(sal_uInt8 *name, sal_uInt16 n, sal_uInt16 platformID, sal_uI
static void GetNames(TrueTypeFont *t)
{
- sal_uInt8 *table = getTable(t, O_name);
+ const sal_uInt8* table = getTable( t, O_name );
int nTableSize = getTableSize(t, O_name);
sal_uInt16 n = GetUInt16(table, 2, 1);
@@ -1107,6 +1113,11 @@ static void GetNames(TrueTypeFont *t)
// some symbol fonts like Marlett have a 3,0 name!
t->psname = nameExtract(table, nTableSize, r, 1, NULL);
}
+ // for embedded font in Ghostscript PDFs
+ if ( ! t->psname && (r = findname(table, n, 2, 2, 0, 6)) != -1)
+ {
+ t->psname = nameExtract(table, nTableSize, r, 0, NULL);
+ }
if ( ! t->psname )
{
if ( t->fname )
@@ -1374,7 +1385,7 @@ static sal_uInt32 getGlyph12(const sal_uInt8 *pCmap, sal_uInt32 cChar) {
static void FindCmap(TrueTypeFont *ttf)
{
- sal_uInt8 *table = getTable(ttf, O_cmap);
+ const sal_uInt8* table = getTable(ttf, O_cmap);
sal_uInt32 table_size = getTableSize(ttf, O_cmap);
sal_uInt16 ncmaps = GetUInt16(table, 2, 1);
unsigned int i;
@@ -1468,24 +1479,20 @@ static void FindCmap(TrueTypeFont *ttf)
static void GetKern(TrueTypeFont *ttf)
{
- sal_uInt8 *table = getTable(ttf, O_kern);
- sal_uInt8 *ptr;
- sal_uInt32 i;
- /*
- sal_uInt16 v1;
- sal_uInt32 v2;
- */
+ const sal_uInt8* table = getTable(ttf, O_kern);
+ const sal_uInt8 *ptr;
- if (!table) goto badtable;
+ if( !table )
+ goto badtable;
if (GetUInt16(table, 0, 1) == 0) { /* Traditional Microsoft style table with USHORT version and nTables fields */
ttf->nkern = GetUInt16(table, 2, 1);
- ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *));
+ ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8 *));
assert(ttf->kerntables != 0);
memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *));
ttf->kerntype = KT_MICROSOFT;
ptr = table + 4;
- for (i=0; i < ttf->nkern; i++) {
+ for( unsigned i = 0; i < ttf->nkern; ++i) {
ttf->kerntables[i] = ptr;
ptr += GetUInt16(ptr, 2, 1);
/* sanity check */
@@ -1500,12 +1507,12 @@ static void GetKern(TrueTypeFont *ttf)
if (GetUInt32(table, 0, 1) == 0x00010000) { /* MacOS style kern tables: fixed32 version and sal_uInt32 nTables fields */
ttf->nkern = GetUInt32(table, 4, 1);
- ttf->kerntables = (sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*));
+ ttf->kerntables = (const sal_uInt8**)calloc(ttf->nkern, sizeof(sal_uInt8*));
assert(ttf->kerntables != 0);
memset(ttf->kerntables, 0, ttf->nkern * sizeof(sal_uInt8 *));
ttf->kerntype = KT_APPLE_NEW;
ptr = table + 8;
- for (i = 0; i < ttf->nkern; i++) {
+ for( unsigned i = 0; i < ttf->nkern; ++i) {
ttf->kerntables[i] = ptr;
ptr += GetUInt32(ptr, 0, 1);
/* sanity check; there are some fonts that are broken in this regard */
@@ -1717,7 +1724,9 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if ((version == 0x00010000) || (version == T_true)) {
tdoffset = 0;
- } else if (version == T_ttcf) { /*- TrueType collection */
+ } else if (version == T_otto) { /* PS-OpenType font */
+ tdoffset = 0;
+ } else if (version == T_ttcf) { /* TrueType collection */
if (GetUInt32(t->ptr, 4, 1) != 0x00010000) {
CloseTTFont(t);
return SF_TTFORMAT;
@@ -1743,7 +1752,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if( t->ntables >= 128 )
return SF_TTFORMAT;
- t->tables = (sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*));
+ t->tables = (const sal_uInt8**)calloc(NUM_TAGS, sizeof(sal_uInt8*));
assert(t->tables != 0);
t->tlens = (sal_uInt32*)calloc(NUM_TAGS, sizeof(sal_uInt32));
assert(t->tlens != 0);
@@ -1773,6 +1782,7 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
case T_prep: nIndex = O_prep; break;
case T_fpgm: nIndex = O_fpgm; break;
case T_gsub: nIndex = O_gsub; break;
+ case T_CFF: nIndex = O_CFF; break;
default: nIndex = -1; break;
}
if( nIndex >= 0 ) {
@@ -1817,11 +1827,12 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
if( (sal_uInt8*)t->tables[i] < t->ptr )
{
- t->tlens[i] = 0;
- t->tables[i] = NULL;
#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "font file %s has bad table offset (tagnum=%d)\n", t->fname, i );
+ if( t->tables[i] )
+ fprintf( stderr, "font file %s has bad table offset %d (tagnum=%d)\n", t->fname, (sal_uInt8*)t->tables[i]-t->ptr, i );
#endif
+ t->tlens[i] = 0;
+ t->tables[i] = NULL;
}
else if( (sal_uInt8*)t->tables[i] + t->tlens[i] > t->ptr + t->fsize )
{
@@ -1839,15 +1850,15 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
and read the basic font properties */
/* The following tables are absolutely required:
- * maxp, head, glyf, loca, name, cmap
+ * maxp, head, name, cmap
*/
- if (!(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_glyf) && getTable(t, O_loca) && getTable(t, O_name) && getTable(t, O_cmap) )) {
+ if( !(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_name) && getTable(t, O_cmap)) ) {
CloseTTFont(t);
return SF_TTFORMAT;
}
- sal_uInt8* table = getTable(t, O_maxp);
+ const sal_uInt8* table = getTable(t, O_maxp);
t->nglyphs = GetUInt16(table, 4, 1);
table = getTable(t, O_head);
@@ -1859,16 +1870,24 @@ static int doOpenTTFont( sal_uInt32 facenum, TrueTypeFont* t )
return SF_TTFORMAT;
}
- k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1;
- if (k < (int)t->nglyphs) t->nglyphs = k; /* Hack for broken Chinese fonts */
-
- table = getTable(t, O_loca);
+ if( getTable(t, O_glyf) && getTable(t, O_loca) ) { /* TTF or TTF-OpenType */
+ k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1;
+ if( k < (int)t->nglyphs ) /* Hack for broken Chinese fonts */
+ t->nglyphs = k;
- t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
- assert(t->goffsets != 0);
+ table = getTable(t, O_loca);
+ t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
+ assert(t->goffsets != 0);
- for (i = 0; i <= (int)t->nglyphs; i++) {
- t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1;
+ for( i = 0; i <= (int)t->nglyphs; ++i )
+ t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : (sal_uInt32)GetUInt16(table, i << 1, 1) << 1;
+ } else if( getTable(t, O_CFF) ) { /* PS-OpenType */
+ t->goffsets = (sal_uInt32 *) calloc(1+t->nglyphs, sizeof(sal_uInt32));
+ /* TODO: implement to get subsetting */
+ assert(t->goffsets != 0);
+ } else {
+ CloseTTFont(t);
+ return SF_TTFORMAT;
}
table = getTable(t, O_hhea);
@@ -1919,11 +1938,13 @@ int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **point
int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, std::vector< sal_uInt32 >& glyphlist)
{
- sal_uInt8 *ptr, *glyf = getTable(ttf, O_glyf);
int n = 1;
- if (glyphID >= ttf->nglyphs) return 0;
- ptr = glyf + ttf->goffsets[glyphID];
+ if( glyphID >= ttf->nglyphs )
+ return 0;
+
+ const sal_uInt8* glyf = getTable(ttf, O_glyf);
+ const sal_uInt8* ptr = glyf + ttf->goffsets[glyphID];
glyphlist.push_back( glyphID );
@@ -1964,7 +1985,7 @@ int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, /*FO
ControlPoint *pa;
PSPathElement *path;
int i, j, r, n;
- sal_uInt8 *table = getTable(ttf, O_head);
+ const sal_uInt8* table = getTable(ttf, O_head);
TTGlyphMetrics metrics;
int UPEm = ttf->unitsPerEm;
@@ -2123,7 +2144,6 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf,
{
TrueTypeCreator *ttcr;
TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0, *cmap=0, *name=0, *post = 0, *os2 = 0;
- sal_uInt8 *p;
int i;
int res;
@@ -2173,7 +2193,7 @@ int CreateTTFromTTGlyphs(TrueTypeFont *ttf,
maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp));
/** hhea **/
- p = getTable(ttf, O_hhea);
+ const sal_uInt8* p = getTable(ttf, O_hhea);
if (p) {
hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1));
} else {
@@ -2356,12 +2376,10 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
{
TrueTypeCreator *ttcr;
TrueTypeTable *head=0, *hhea=0, *maxp=0, *cvt=0, *prep=0, *glyf=0, *fpgm=0;
- sal_uInt8 *p;
int i;
int res;
sal_uInt32 ver, rev;
- sal_uInt8 *headP;
sal_uInt8 *sfntP;
sal_uInt32 sfntLen;
@@ -2374,7 +2392,8 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
TrueTypeCreatorNewEmpty(T_true, &ttcr);
/* head */
- headP = p = getTable(ttf, O_head);
+ const sal_uInt8* p = getTable(ttf, O_head);
+ const sal_uInt8* headP = p;
assert(p != 0);
head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1));
ver = GetUInt32(p, 0, 1);
@@ -2551,13 +2570,21 @@ int GetTTGlyphCount( TrueTypeFont* ttf )
return ttf->nglyphs;
}
+bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex,
+ const sal_uInt8** ppRawBytes, int* pRawLength )
+{
+ if( (nSubtableIndex < 0) || (nSubtableIndex >= NUM_TAGS) )
+ return false;
+ *pRawLength = ttf->tlens[ nSubtableIndex ];
+ *ppRawBytes = ttf->tables[ nSubtableIndex ];
+ bool bOk = (*pRawLength > 0) && (ppRawBytes != NULL);
+ return bOk;
+}
+
TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode)
{
- sal_uInt8* pTable;
- int i;
- sal_uInt16 glyphID;
+ const sal_uInt8* pTable;
sal_uInt32 n;
- int UPEm = ttf->unitsPerEm;
int nTableSize;
if (mode == 0) {
@@ -2576,9 +2603,10 @@ TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *gly
TTSimpleGlyphMetrics* res = (TTSimpleGlyphMetrics*)calloc(nGlyphs, sizeof(TTSimpleGlyphMetrics));
assert(res != 0);
- for (i=0; i<nGlyphs; i++) {
+ const int UPEm = ttf->unitsPerEm;
+ for( int i = 0; i < nGlyphs; ++i) {
int nAdvOffset, nLsbOffset;
- glyphID = glyphArray[i];
+ sal_uInt16 glyphID = glyphArray[i];
if (glyphID < n) {
nAdvOffset = 4 * glyphID;
@@ -2629,7 +2657,6 @@ TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont * ttf, sal_uInt16 firs
void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
{
- sal_uInt8 *table;
int UPEm = ttf->unitsPerEm;
memset(info, 0, sizeof(TTGlobalFontInfo));
@@ -2641,7 +2668,7 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
info->psname = ttf->psname;
info->symbolEncoded = (ttf->cmapType == CMAP_MS_Symbol);
- table = getTable(ttf, O_OS2);
+ const sal_uInt8* table = getTable(ttf, O_OS2);
if (table) {
info->weight = GetUInt16(table, 4, 1);
info->width = GetUInt16(table, 6, 1);
@@ -2670,6 +2697,8 @@ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info)
}
memcpy(info->panose, table + 32, 10);
info->typeFlags = GetUInt16( table, 8, 1 );
+ if( getTable(ttf, O_CFF) )
+ info->typeFlags |= TYPEFLAG_PS_OPENTYPE;
}
table = getTable(ttf, O_post);
@@ -2718,17 +2747,15 @@ void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, K
GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
{
- sal_uInt8 *glyf = getTable(ttf, O_glyf);
- sal_uInt8 *hmtx = getTable(ttf, O_hmtx);
- sal_uInt32 length;
- ControlPoint *cp;
+ const sal_uInt8* glyf = getTable(ttf, O_glyf);
+ const sal_uInt8* hmtx = getTable(ttf, O_hmtx);
int i, n, m;
if( glyphID >= ttf->nglyphs )
return 0;
/* #127161# check the glyph offsets */
- length = getTableSize( ttf, O_glyf );
+ sal_uInt32 length = getTableSize( ttf, O_glyf );
if( length < ttf->goffsets[ glyphID+1 ] )
return 0;
@@ -2737,7 +2764,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
GlyphData* d = (GlyphData*)malloc(sizeof(GlyphData)); assert(d != 0);
if (length > 0) {
- sal_uInt8 *srcptr = glyf + ttf->goffsets[glyphID];
+ const sal_uInt8* srcptr = glyf + ttf->goffsets[glyphID];
d->ptr = (sal_uInt8*)malloc((length + 1) & ~1); assert(d->ptr != 0);
memcpy( d->ptr, srcptr, length );
d->compflag = (GetInt16( srcptr, 0, 1 ) < 0);
@@ -2750,6 +2777,7 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
d->nbytes = (sal_uInt16)((length + 1) & ~1);
/* now calculate npoints and ncontours */
+ ControlPoint *cp;
n = GetTTGlyphPoints(ttf, glyphID, &cp);
if (n != -1) {
m = 0;
@@ -2778,18 +2806,16 @@ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID)
int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr)
{
- sal_uInt8 *table = getTable(ttf, O_name);
+ const sal_uInt8* table = getTable(ttf, O_name);
int nTableSize = getTableSize(ttf, O_name );
sal_uInt16 n = GetUInt16(table, 2, 1);
- sal_uInt8* rec_string = NULL;
int nStrBase = GetUInt16(table, 4, 1);
- NameRecord *rec;
int i;
*nr = 0;
if (n == 0) return 0;
- rec = (NameRecord*)calloc(n, sizeof(NameRecord));
+ NameRecord* rec = (NameRecord*)calloc(n, sizeof(NameRecord));
for (i = 0; i < n; i++) {
int nStrOffset = GetUInt16(table + 6, 10 + 12 * i, 1);
@@ -2805,7 +2831,7 @@ int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr)
continue;
}
- rec_string = table + nStrBase + nStrOffset;
+ const sal_uInt8* rec_string = table + nStrBase + nStrOffset;
// sanity check
if( rec_string > (sal_uInt8*)ttf->ptr && rec_string < ((sal_uInt8*)ttf->ptr + ttf->fsize - rec[i].slen ) )
{
diff --git a/vcl/source/fontsubset/ttcr.cxx b/vcl/source/fontsubset/ttcr.cxx
index 7f9ae796142b..ebd00c1e7c50 100644
--- a/vcl/source/fontsubset/ttcr.cxx
+++ b/vcl/source/fontsubset/ttcr.cxx
@@ -32,10 +32,6 @@
*
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
#if OSL_DEBUG_LEVEL == 0
# ifndef NDEBUG
# define NDEBUG
@@ -45,6 +41,7 @@
#include "ttcr.hxx"
#include "list.h"
+#include "string.h"
@@ -96,7 +93,7 @@ _inline sal_uInt32 mkTag(sal_uInt8 a, sal_uInt8 b, sal_uInt8 c, sal_uInt8 d) {
}
/*- Data access macros for data stored in big-endian or little-endian format */
-_inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_Int16 GetInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_Int16 t;
assert(ptr != 0);
@@ -110,7 +107,7 @@ _inline sal_Int16 GetInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendia
return t;
}
-_inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_uInt16 GetUInt16( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_uInt16 t;
assert(ptr != 0);
@@ -124,7 +121,7 @@ _inline sal_uInt16 GetUInt16(const sal_uInt8 *ptr, sal_uInt32 offset, int bigend
return t;
}
-_inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_Int32 GetInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_Int32 t;
assert(ptr != 0);
@@ -140,7 +137,7 @@ _inline sal_Int32 GetInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendi
return t;
}
-_inline sal_uInt32 GetUInt32(const sal_uInt8 *ptr, sal_uInt32 offset, int bigendian)
+_inline sal_uInt32 GetUInt32( const sal_uInt8* ptr, sal_uInt32 offset, int bigendian)
{
sal_uInt32 t;
assert(ptr != 0);
@@ -968,7 +965,7 @@ static struct {
TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
sal_uInt32 nbytes,
- sal_uInt8 *ptr)
+ const sal_uInt8* ptr)
{
TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable));
tdata_generic* pdata = (tdata_generic*)smalloc(sizeof(tdata_generic));
@@ -991,7 +988,7 @@ TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision,
sal_uInt16 flags,
sal_uInt16 unitsPerEm,
- sal_uInt8 *created,
+ const sal_uInt8* created,
sal_uInt16 macStyle,
sal_uInt16 lowestRecPPEM,
sal_Int16 fontDirectionHint)
@@ -1064,7 +1061,7 @@ TrueTypeTable *TrueTypeTableNew_loca(void)
return table;
}
-TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size)
+TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size)
{
TrueTypeTable* table = (TrueTypeTable*)smalloc(sizeof(TrueTypeTable));
table->data = ttmalloc(TABLESIZE_maxp);
diff --git a/vcl/source/fontsubset/ttcr.hxx b/vcl/source/fontsubset/ttcr.hxx
index 5b47f09d552a..04c617efc944 100644
--- a/vcl/source/fontsubset/ttcr.hxx
+++ b/vcl/source/fontsubset/ttcr.hxx
@@ -138,7 +138,7 @@ namespace vcl
*/
TrueTypeTable *TrueTypeTableNew(sal_uInt32 tag,
sal_uInt32 nbytes,
- sal_uInt8 *ptr);
+ const sal_uInt8* ptr);
/**
* Creates a new 'head' table for a TrueType font.
@@ -149,7 +149,7 @@ namespace vcl
TrueTypeTable *TrueTypeTableNew_head(sal_uInt32 fontRevision,
sal_uInt16 flags,
sal_uInt16 unitsPerEm,
- sal_uInt8 *created,
+ const sal_uInt8 *created,
sal_uInt16 macStyle,
sal_uInt16 lowestRecPPEM,
sal_Int16 fontDirectionHint);
@@ -177,7 +177,7 @@ namespace vcl
* size specifies the size of existing maxp table for
* error-checking purposes
*/
- TrueTypeTable *TrueTypeTableNew_maxp(sal_uInt8 *maxp, int size);
+ TrueTypeTable *TrueTypeTableNew_maxp( const sal_uInt8* maxp, int size);
/**
* Creates a new empty 'glyf' table.
diff --git a/vcl/source/fontsubset/u2big5.inc b/vcl/source/fontsubset/u2big5.inc
deleted file mode 100644
index 951b65cffc25..000000000000
--- a/vcl/source/fontsubset/u2big5.inc
+++ /dev/null
@@ -1,1756 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_BIG5 to get rid of this file
-
-sal_uInt16pair xlat_1_3[13798] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A2, 0xA246},
- {0x00A3, 0xA247},{0x00A5, 0xA244},{0x00A7, 0xA1B1},{0x00B0, 0xA258},{0x00B1, 0xA1D3},{0x00B7, 0xA150},{0x00D7, 0xA1D1},{0x00F7, 0xA1D2},
- {0x02C7, 0xA3BE},{0x02C9, 0xA3BC},{0x02CA, 0xA3BD},{0x02CB, 0xA3BF},{0x02D9, 0xA3BB},{0x0391, 0xA344},{0x0392, 0xA345},{0x0393, 0xA346},
- {0x0394, 0xA347},{0x0395, 0xA348},{0x0396, 0xA349},{0x0397, 0xA34A},{0x0398, 0xA34B},{0x0399, 0xA34C},{0x039A, 0xA34D},{0x039B, 0xA34E},
- {0x039C, 0xA34F},{0x039D, 0xA350},{0x039E, 0xA351},{0x039F, 0xA352},{0x03A0, 0xA353},{0x03A1, 0xA354},{0x03A3, 0xA355},{0x03A4, 0xA356},
- {0x03A5, 0xA357},{0x03A6, 0xA358},{0x03A7, 0xA359},{0x03A8, 0xA35A},{0x03A9, 0xA35B},{0x03B1, 0xA35C},{0x03B2, 0xA35D},{0x03B3, 0xA35E},
- {0x03B4, 0xA35F},{0x03B5, 0xA360},{0x03B6, 0xA361},{0x03B7, 0xA362},{0x03B8, 0xA363},{0x03B9, 0xA364},{0x03BA, 0xA365},{0x03BB, 0xA366},
- {0x03BC, 0xA367},{0x03BD, 0xA368},{0x03BE, 0xA369},{0x03BF, 0xA36A},{0x03C0, 0xA36B},{0x03C1, 0xA36C},{0x03C3, 0xA36D},{0x03C4, 0xA36E},
- {0x03C5, 0xA36F},{0x03C6, 0xA370},{0x03C7, 0xA371},{0x03C8, 0xA372},{0x03C9, 0xA373},{0x0401, 0xC7B3},{0x0414, 0xC7B1},{0x0415, 0xC7B2},
- {0x0416, 0xC7B4},{0x0417, 0xC7B5},{0x0418, 0xC7B6},{0x0419, 0xC7B7},{0x041A, 0xC7B8},{0x041B, 0xC7B9},{0x041C, 0xC7BA},{0x0423, 0xC7BB},
- {0x0424, 0xC7BC},{0x0425, 0xC7BD},{0x0426, 0xC7BE},{0x0427, 0xC7BF},{0x0428, 0xC7C0},{0x0429, 0xC7C1},{0x042A, 0xC7C2},{0x042B, 0xC7C3},
- {0x042C, 0xC7C4},{0x042D, 0xC7C5},{0x042E, 0xC7C6},{0x042F, 0xC7C7},{0x0430, 0xC7C8},{0x0431, 0xC7C9},{0x0432, 0xC7CA},{0x0433, 0xC7CB},
- {0x0434, 0xC7CC},{0x0435, 0xC7CD},{0x0436, 0xC7CF},{0x0437, 0xC7D0},{0x0438, 0xC7D1},{0x0439, 0xC7D2},{0x043A, 0xC7D3},{0x043B, 0xC7D4},
- {0x043C, 0xC7D5},{0x043D, 0xC7D6},{0x043E, 0xC7D7},{0x043F, 0xC7D8},{0x0440, 0xC7D9},{0x0441, 0xC7DA},{0x0442, 0xC7DB},{0x0443, 0xC7DC},
- {0x0444, 0xC7DD},{0x0445, 0xC7DE},{0x0446, 0xC7DF},{0x0447, 0xC7E0},{0x0448, 0xC7E1},{0x0449, 0xC7E2},{0x044A, 0xC7E3},{0x044B, 0xC7E4},
- {0x044C, 0xC7E5},{0x044D, 0xC7E6},{0x044E, 0xC7E7},{0x044F, 0xC7E8},{0x0451, 0xC7CE},{0x2013, 0xA156},{0x2014, 0xA158},{0x2018, 0xA1A5},
- {0x2019, 0xA1A6},{0x201C, 0xA1A7},{0x201D, 0xA1A8},{0x2022, 0xA145},{0x2025, 0xA14C},{0x2026, 0xA14B},{0x2032, 0xA1AC},{0x2035, 0xA1AB},
- {0x203B, 0xA1B0},{0x203E, 0xA1C2},{0x2103, 0xA24A},{0x2105, 0xA1C1},{0x2109, 0xA24B},{0x2160, 0xA2B9},{0x2161, 0xA2BA},{0x2162, 0xA2BB},
- {0x2163, 0xA2BC},{0x2164, 0xA2BD},{0x2165, 0xA2BE},{0x2166, 0xA2BF},{0x2167, 0xA2C0},{0x2168, 0xA2C1},{0x2169, 0xA2C2},{0x2190, 0xA1F6},
- {0x2191, 0xA1F4},{0x2192, 0xA1F7},{0x2193, 0xA1F5},{0x2196, 0xA1F8},{0x2197, 0xA1F9},{0x2198, 0xA1FB},{0x2199, 0xA1FA},{0x221A, 0xA1D4},
- {0x221E, 0xA1DB},{0x221F, 0xA1E8},{0x2220, 0xA1E7},{0x2223, 0xA1FD},{0x2225, 0xA1FC},{0x2229, 0xA1E4},{0x222A, 0xA1E5},{0x222B, 0xA1EC},
- {0x222E, 0xA1ED},{0x2234, 0xA1EF},{0x2235, 0xA1EE},{0x223C, 0xA1E3},{0x2252, 0xA1DC},{0x2260, 0xA1DA},{0x2261, 0xA1DD},{0x2266, 0xA1D8},
- {0x2267, 0xA1D9},{0x22A5, 0xA1E6},{0x22BF, 0xA1E9},{0x2460, 0xC7E9},{0x2461, 0xC7EA},{0x2462, 0xC7EB},{0x2463, 0xC7EC},{0x2464, 0xC7ED},
- {0x2465, 0xC7EE},{0x2466, 0xC7EF},{0x2467, 0xC7F0},{0x2468, 0xC7F1},{0x2469, 0xC7F2},{0x2474, 0xC7F3},{0x2475, 0xC7F4},{0x2476, 0xC7F5},
- {0x2477, 0xC7F6},{0x2478, 0xC7F7},{0x2479, 0xC7F8},{0x247A, 0xC7F9},{0x247B, 0xC7FA},{0x247C, 0xC7FB},{0x247D, 0xC7FC},{0x2500, 0xA277},
- {0x2502, 0xA278},{0x250C, 0xA27A},{0x2510, 0xA27B},{0x2514, 0xA27C},{0x2518, 0xA27D},{0x251C, 0xA275},{0x2524, 0xA274},{0x252C, 0xA273},
- {0x2534, 0xA272},{0x253C, 0xA271},{0x2550, 0xA2A4},{0x255E, 0xA2A5},{0x2561, 0xA2A7},{0x256A, 0xA2A6},{0x256D, 0xA27E},{0x256E, 0xA2A1},
- {0x256F, 0xA2A3},{0x2570, 0xA2A2},{0x2571, 0xA2AC},{0x2572, 0xA2AD},{0x2573, 0xA2AE},{0x2581, 0xA262},{0x2582, 0xA263},{0x2583, 0xA264},
- {0x2584, 0xA265},{0x2585, 0xA266},{0x2586, 0xA267},{0x2587, 0xA268},{0x2588, 0xA269},{0x2589, 0xA270},{0x258A, 0xA26F},{0x258B, 0xA26E},
- {0x258C, 0xA26D},{0x258D, 0xA26C},{0x258E, 0xA26B},{0x258F, 0xA26A},{0x2594, 0xA276},{0x2595, 0xA279},{0x25A0, 0xA1BD},{0x25A1, 0xA1BC},
- {0x25B2, 0xA1B6},{0x25B3, 0xA1B5},{0x25BC, 0xA1BF},{0x25BD, 0xA1BE},{0x25C6, 0xA1BB},{0x25C7, 0xA1BA},{0x25CB, 0xA1B3},{0x25CE, 0xA1B7},
- {0x25CF, 0xA1B4},{0x25E2, 0xA2A8},{0x25E3, 0xA2A9},{0x25E4, 0xA2AB},{0x25E5, 0xA2AA},{0x2605, 0xA1B9},{0x2606, 0xA1B8},{0x2609, 0xA1F3},
- {0x2640, 0xA1F0},{0x2641, 0xA1F2},{0x2642, 0xA1F1},{0x3000, 0xA140},{0x3001, 0xA142},{0x3002, 0xA143},{0x3003, 0xA1B2},{0x3005, 0xC6A4},
- {0x3008, 0xA171},{0x3009, 0xA172},{0x300A, 0xA16D},{0x300B, 0xA16E},{0x300C, 0xA175},{0x300D, 0xA176},{0x300E, 0xA179},{0x300F, 0xA17A},
- {0x3010, 0xA169},{0x3011, 0xA16A},{0x3012, 0xA245},{0x3014, 0xA165},{0x3015, 0xA166},{0x301D, 0xA1A9},{0x301E, 0xA1AA},{0x3021, 0xA2C3},
- {0x3022, 0xA2C4},{0x3023, 0xA2C5},{0x3024, 0xA2C6},{0x3025, 0xA2C7},{0x3026, 0xA2C8},{0x3027, 0xA2C9},{0x3028, 0xA2CA},{0x3029, 0xA2CB},
- {0x3041, 0xC6A5},{0x3042, 0xC6A6},{0x3043, 0xC6A7},{0x3044, 0xC6A8},{0x3045, 0xC6A9},{0x3046, 0xC6AA},{0x3047, 0xC6AB},{0x3048, 0xC6AC},
- {0x3049, 0xC6AD},{0x304A, 0xC6AE},{0x304B, 0xC6AF},{0x304C, 0xC6B0},{0x304D, 0xC6B1},{0x304E, 0xC6B2},{0x304F, 0xC6B3},{0x3050, 0xC6B4},
- {0x3051, 0xC6B5},{0x3052, 0xC6B6},{0x3053, 0xC6B7},{0x3054, 0xC6B8},{0x3055, 0xC6B9},{0x3056, 0xC6BA},{0x3057, 0xC6BB},{0x3058, 0xC6BC},
- {0x3059, 0xC6BD},{0x305A, 0xC6BE},{0x305B, 0xC6BF},{0x305C, 0xC6C0},{0x305D, 0xC6C1},{0x305E, 0xC6C2},{0x305F, 0xC6C3},{0x3060, 0xC6C4},
- {0x3061, 0xC6C5},{0x3062, 0xC6C6},{0x3063, 0xC6C7},{0x3064, 0xC6C8},{0x3065, 0xC6C9},{0x3066, 0xC6CA},{0x3067, 0xC6CB},{0x3068, 0xC6CC},
- {0x3069, 0xC6CD},{0x306A, 0xC6CE},{0x306B, 0xC6CF},{0x306C, 0xC6D0},{0x306D, 0xC6D1},{0x306E, 0xC6D2},{0x306F, 0xC6D3},{0x3070, 0xC6D4},
- {0x3071, 0xC6D5},{0x3072, 0xC6D6},{0x3073, 0xC6D7},{0x3074, 0xC6D8},{0x3075, 0xC6D9},{0x3076, 0xC6DA},{0x3077, 0xC6DB},{0x3078, 0xC6DC},
- {0x3079, 0xC6DD},{0x307A, 0xC6DE},{0x307B, 0xC6DF},{0x307C, 0xC6E0},{0x307D, 0xC6E1},{0x307E, 0xC6E2},{0x307F, 0xC6E3},{0x3080, 0xC6E4},
- {0x3081, 0xC6E5},{0x3082, 0xC6E6},{0x3083, 0xC6E7},{0x3084, 0xC6E8},{0x3085, 0xC6E9},{0x3086, 0xC6EA},{0x3087, 0xC6EB},{0x3088, 0xC6EC},
- {0x3089, 0xC6ED},{0x308A, 0xC6EE},{0x308B, 0xC6EF},{0x308C, 0xC6F0},{0x308D, 0xC6F1},{0x308E, 0xC6F2},{0x308F, 0xC6F3},{0x3090, 0xC6F4},
- {0x3091, 0xC6F5},{0x3092, 0xC6F6},{0x3093, 0xC6F7},{0x309D, 0xC6A2},{0x309E, 0xC6A3},{0x30A1, 0xC6F8},{0x30A2, 0xC6F9},{0x30A3, 0xC6FA},
- {0x30A4, 0xC6FB},{0x30A5, 0xC6FC},{0x30A6, 0xC6FD},{0x30A7, 0xC6FE},{0x30A8, 0xC740},{0x30A9, 0xC741},{0x30AA, 0xC742},{0x30AB, 0xC743},
- {0x30AC, 0xC744},{0x30AD, 0xC745},{0x30AE, 0xC746},{0x30AF, 0xC747},{0x30B0, 0xC748},{0x30B1, 0xC749},{0x30B2, 0xC74A},{0x30B3, 0xC74B},
- {0x30B4, 0xC74C},{0x30B5, 0xC74D},{0x30B6, 0xC74E},{0x30B7, 0xC74F},{0x30B8, 0xC750},{0x30B9, 0xC751},{0x30BA, 0xC752},{0x30BB, 0xC753},
- {0x30BC, 0xC754},{0x30BD, 0xC755},{0x30BE, 0xC756},{0x30BF, 0xC757},{0x30C0, 0xC758},{0x30C1, 0xC759},{0x30C2, 0xC75A},{0x30C3, 0xC75B},
- {0x30C4, 0xC75C},{0x30C5, 0xC75D},{0x30C6, 0xC75E},{0x30C7, 0xC75F},{0x30C8, 0xC760},{0x30C9, 0xC761},{0x30CA, 0xC762},{0x30CB, 0xC763},
- {0x30CC, 0xC764},{0x30CD, 0xC765},{0x30CE, 0xC766},{0x30CF, 0xC767},{0x30D0, 0xC768},{0x30D1, 0xC769},{0x30D2, 0xC76A},{0x30D3, 0xC76B},
- {0x30D4, 0xC76C},{0x30D5, 0xC76D},{0x30D6, 0xC76E},{0x30D7, 0xC76F},{0x30D8, 0xC770},{0x30D9, 0xC771},{0x30DA, 0xC772},{0x30DB, 0xC773},
- {0x30DC, 0xC774},{0x30DD, 0xC775},{0x30DE, 0xC776},{0x30DF, 0xC777},{0x30E0, 0xC778},{0x30E1, 0xC779},{0x30E2, 0xC77A},{0x30E3, 0xC77B},
- {0x30E4, 0xC77C},{0x30E5, 0xC77D},{0x30E6, 0xC77E},{0x30E7, 0xC7A1},{0x30E8, 0xC7A2},{0x30E9, 0xC7A3},{0x30EA, 0xC7A4},{0x30EB, 0xC7A5},
- {0x30EC, 0xC7A6},{0x30ED, 0xC7A7},{0x30EE, 0xC7A8},{0x30EF, 0xC7A9},{0x30F0, 0xC7AA},{0x30F1, 0xC7AB},{0x30F2, 0xC7AC},{0x30F3, 0xC7AD},
- {0x30F4, 0xC7AE},{0x30F5, 0xC7AF},{0x30F6, 0xC7B0},{0x30FE, 0xC6A1},{0x3105, 0xA374},{0x3106, 0xA375},{0x3107, 0xA376},{0x3108, 0xA377},
- {0x3109, 0xA378},{0x310A, 0xA379},{0x310B, 0xA37A},{0x310C, 0xA37B},{0x310D, 0xA37C},{0x310E, 0xA37D},{0x310F, 0xA37E},{0x3110, 0xA3A1},
- {0x3111, 0xA3A2},{0x3112, 0xA3A3},{0x3113, 0xA3A4},{0x3114, 0xA3A5},{0x3115, 0xA3A6},{0x3116, 0xA3A7},{0x3117, 0xA3A8},{0x3118, 0xA3A9},
- {0x3119, 0xA3AA},{0x311A, 0xA3AB},{0x311B, 0xA3AC},{0x311C, 0xA3AD},{0x311D, 0xA3AE},{0x311E, 0xA3AF},{0x311F, 0xA3B0},{0x3120, 0xA3B1},
- {0x3121, 0xA3B2},{0x3122, 0xA3B3},{0x3123, 0xA3B4},{0x3124, 0xA3B5},{0x3125, 0xA3B6},{0x3126, 0xA3B7},{0x3127, 0xA3B8},{0x3128, 0xA3B9},
- {0x3129, 0xA3BA},{0x32A3, 0xA1C0},{0x338E, 0xA255},{0x338F, 0xA256},{0x339C, 0xA250},{0x339D, 0xA251},{0x339E, 0xA252},{0x33A1, 0xA254},
- {0x33C4, 0xA257},{0x33CE, 0xA253},{0x33D1, 0xA1EB},{0x33D2, 0xA1EA},{0x33D5, 0xA24F},{0x4E00, 0xA440},{0x4E01, 0xA442},{0x4E03, 0xA443},
- {0x4E07, 0xC945},{0x4E08, 0xA456},{0x4E09, 0xA454},{0x4E0A, 0xA457},{0x4E0B, 0xA455},{0x4E0C, 0xC946},{0x4E0D, 0xA4A3},{0x4E0E, 0xC94F},
- {0x4E0F, 0xC94D},{0x4E10, 0xA4A2},{0x4E11, 0xA4A1},{0x4E14, 0xA542},{0x4E15, 0xA541},{0x4E16, 0xA540},{0x4E18, 0xA543},{0x4E19, 0xA4FE},
- {0x4E1E, 0xA5E0},{0x4E1F, 0xA5E1},{0x4E26, 0xA8C3},{0x4E2B, 0xA458},{0x4E2D, 0xA4A4},{0x4E2E, 0xC950},{0x4E30, 0xA4A5},{0x4E31, 0xC963},
- {0x4E32, 0xA6EA},{0x4E33, 0xCBB1},{0x4E38, 0xA459},{0x4E39, 0xA4A6},{0x4E3B, 0xA544},{0x4E3C, 0xC964},{0x4E42, 0xC940},{0x4E43, 0xA444},
- {0x4E45, 0xA45B},{0x4E47, 0xC947},{0x4E48, 0xA45C},{0x4E4B, 0xA4A7},{0x4E4D, 0xA545},{0x4E4E, 0xA547},{0x4E4F, 0xA546},{0x4E52, 0xA5E2},
- {0x4E53, 0xA5E3},{0x4E56, 0xA8C4},{0x4E58, 0xADBC},{0x4E59, 0xA441},{0x4E5C, 0xC941},{0x4E5D, 0xA445},{0x4E5E, 0xA45E},{0x4E5F, 0xA45D},
- {0x4E69, 0xA5E4},{0x4E73, 0xA8C5},{0x4E7E, 0xB0AE},{0x4E7F, 0xD44B},{0x4E82, 0xB6C3},{0x4E83, 0xDCB1},{0x4E84, 0xDCB2},{0x4E86, 0xA446},
- {0x4E88, 0xA4A9},{0x4E8B, 0xA8C6},{0x4E8C, 0xA447},{0x4E8D, 0xC948},{0x4E8E, 0xA45F},{0x4E91, 0xA4AA},{0x4E92, 0xA4AC},{0x4E93, 0xC951},
- {0x4E94, 0xA4AD},{0x4E95, 0xA4AB},{0x4E99, 0xA5E5},{0x4E9B, 0xA8C7},{0x4E9E, 0xA8C8},{0x4E9F, 0xAB45},{0x4EA1, 0xA460},{0x4EA2, 0xA4AE},
- {0x4EA4, 0xA5E6},{0x4EA5, 0xA5E8},{0x4EA6, 0xA5E7},{0x4EA8, 0xA6EB},{0x4EAB, 0xA8C9},{0x4EAC, 0xA8CA},{0x4EAD, 0xAB46},{0x4EAE, 0xAB47},
- {0x4EB3, 0xADBD},{0x4EB6, 0xDCB3},{0x4EB9, 0xF6D6},{0x4EBA, 0xA448},{0x4EC0, 0xA4B0},{0x4EC1, 0xA4AF},{0x4EC2, 0xC952},{0x4EC3, 0xA4B1},
- {0x4EC4, 0xA4B7},{0x4EC6, 0xA4B2},{0x4EC7, 0xA4B3},{0x4EC8, 0xC954},{0x4EC9, 0xC953},{0x4ECA, 0xA4B5},{0x4ECB, 0xA4B6},{0x4ECD, 0xA4B4},
- {0x4ED4, 0xA54A},{0x4ED5, 0xA54B},{0x4ED6, 0xA54C},{0x4ED7, 0xA54D},{0x4ED8, 0xA549},{0x4ED9, 0xA550},{0x4EDA, 0xC96A},{0x4EDC, 0xC966},
- {0x4EDD, 0xC969},{0x4EDE, 0xA551},{0x4EDF, 0xA561},{0x4EE1, 0xC968},{0x4EE3, 0xA54E},{0x4EE4, 0xA54F},{0x4EE5, 0xA548},{0x4EE8, 0xC965},
- {0x4EE9, 0xC967},{0x4EF0, 0xA5F5},{0x4EF1, 0xC9B0},{0x4EF2, 0xA5F2},{0x4EF3, 0xA5F6},{0x4EF4, 0xC9BA},{0x4EF5, 0xC9AE},{0x4EF6, 0xA5F3},
- {0x4EF7, 0xC9B2},{0x4EFB, 0xA5F4},{0x4EFD, 0xA5F7},{0x4EFF, 0xA5E9},{0x4F00, 0xC9B1},{0x4F01, 0xA5F8},{0x4F02, 0xC9B5},{0x4F04, 0xC9B9},
- {0x4F05, 0xC9B6},{0x4F08, 0xC9B3},{0x4F09, 0xA5EA},{0x4F0A, 0xA5EC},{0x4F0B, 0xA5F9},{0x4F0D, 0xA5EE},{0x4F0E, 0xC9AB},{0x4F0F, 0xA5F1},
- {0x4F10, 0xA5EF},{0x4F11, 0xA5F0},{0x4F12, 0xC9BB},{0x4F13, 0xC9B8},{0x4F14, 0xC9AF},{0x4F15, 0xA5ED},{0x4F18, 0xC9AC},{0x4F19, 0xA5EB},
- {0x4F1D, 0xC9B4},{0x4F22, 0xC9B7},{0x4F2C, 0xC9AD},{0x4F2D, 0xCA66},{0x4F2F, 0xA742},{0x4F30, 0xA6F4},{0x4F33, 0xCA67},{0x4F34, 0xA6F1},
- {0x4F36, 0xA744},{0x4F38, 0xA6F9},{0x4F3A, 0xA6F8},{0x4F3B, 0xCA5B},{0x4F3C, 0xA6FC},{0x4F3D, 0xA6F7},{0x4F3E, 0xCA60},{0x4F3F, 0xCA68},
- {0x4F41, 0xCA64},{0x4F43, 0xA6FA},{0x4F46, 0xA6FD},{0x4F47, 0xA6EE},{0x4F48, 0xA747},{0x4F49, 0xCA5D},{0x4F4C, 0xCBBD},{0x4F4D, 0xA6EC},
- {0x4F4E, 0xA743},{0x4F4F, 0xA6ED},{0x4F50, 0xA6F5},{0x4F51, 0xA6F6},{0x4F52, 0xCA62},{0x4F53, 0xCA5E},{0x4F54, 0xA6FB},{0x4F55, 0xA6F3},
- {0x4F56, 0xCA5A},{0x4F57, 0xA6EF},{0x4F58, 0xCA65},{0x4F59, 0xA745},{0x4F5A, 0xA748},{0x4F5B, 0xA6F2},{0x4F5C, 0xA740},{0x4F5D, 0xA746},
- {0x4F5E, 0xA6F0},{0x4F5F, 0xCA63},{0x4F60, 0xA741},{0x4F61, 0xCA69},{0x4F62, 0xCA5C},{0x4F63, 0xA6FE},{0x4F64, 0xCA5F},{0x4F67, 0xCA61},
- {0x4F69, 0xA8D8},{0x4F6A, 0xCBBF},{0x4F6B, 0xCBCB},{0x4F6C, 0xA8D0},{0x4F6E, 0xCBCC},{0x4F6F, 0xA8CB},{0x4F70, 0xA8D5},{0x4F73, 0xA8CE},
- {0x4F74, 0xCBB9},{0x4F75, 0xA8D6},{0x4F76, 0xCBB8},{0x4F77, 0xCBBC},{0x4F78, 0xCBC3},{0x4F79, 0xCBC1},{0x4F7A, 0xA8DE},{0x4F7B, 0xA8D9},
- {0x4F7C, 0xCBB3},{0x4F7D, 0xCBB5},{0x4F7E, 0xA8DB},{0x4F7F, 0xA8CF},{0x4F80, 0xCBB6},{0x4F81, 0xCBC2},{0x4F82, 0xCBC9},{0x4F83, 0xA8D4},
- {0x4F84, 0xCBBB},{0x4F85, 0xCBB4},{0x4F86, 0xA8D3},{0x4F87, 0xCBB7},{0x4F88, 0xA8D7},{0x4F89, 0xCBBA},{0x4F8B, 0xA8D2},{0x4F8D, 0xA8CD},
- {0x4F8F, 0xA8DC},{0x4F90, 0xCBC4},{0x4F91, 0xA8DD},{0x4F92, 0xCBC8},{0x4F94, 0xCBC6},{0x4F95, 0xCBCA},{0x4F96, 0xA8DA},{0x4F97, 0xCBBE},
- {0x4F98, 0xCBB2},{0x4F9A, 0xCBC0},{0x4F9B, 0xA8D1},{0x4F9C, 0xCBC5},{0x4F9D, 0xA8CC},{0x4F9E, 0xCBC7},{0x4FAE, 0xAB56},{0x4FAF, 0xAB4A},
- {0x4FB2, 0xCDE0},{0x4FB3, 0xCDE8},{0x4FB5, 0xAB49},{0x4FB6, 0xAB51},{0x4FB7, 0xAB5D},{0x4FB9, 0xCDEE},{0x4FBA, 0xCDEC},{0x4FBB, 0xCDE7},
- {0x4FBF, 0xAB4B},{0x4FC0, 0xCDED},{0x4FC1, 0xCDE3},{0x4FC2, 0xAB59},{0x4FC3, 0xAB50},{0x4FC4, 0xAB58},{0x4FC5, 0xCDDE},{0x4FC7, 0xCDEA},
- {0x4FC9, 0xCDE1},{0x4FCA, 0xAB54},{0x4FCB, 0xCDE2},{0x4FCD, 0xCDDD},{0x4FCE, 0xAB5B},{0x4FCF, 0xAB4E},{0x4FD0, 0xAB57},{0x4FD1, 0xAB4D},
- {0x4FD3, 0xCDDF},{0x4FD4, 0xCDE4},{0x4FD6, 0xCDEB},{0x4FD7, 0xAB55},{0x4FD8, 0xAB52},{0x4FD9, 0xCDE6},{0x4FDA, 0xAB5A},{0x4FDB, 0xCDE9},
- {0x4FDC, 0xCDE5},{0x4FDD, 0xAB4F},{0x4FDE, 0xAB5C},{0x4FDF, 0xAB53},{0x4FE0, 0xAB4C},{0x4FE1, 0xAB48},{0x4FEC, 0xCDEF},{0x4FEE, 0xADD7},
- {0x4FEF, 0xADC1},{0x4FF1, 0xADD1},{0x4FF3, 0xADD6},{0x4FF4, 0xD0D0},{0x4FF5, 0xD0CF},{0x4FF6, 0xD0D4},{0x4FF7, 0xD0D5},{0x4FF8, 0xADC4},
- {0x4FFA, 0xADCD},{0x4FFE, 0xADDA},{0x5000, 0xADCE},{0x5005, 0xD0C9},{0x5006, 0xADC7},{0x5007, 0xD0CA},{0x5009, 0xADDC},{0x500B, 0xADD3},
- {0x500C, 0xADBE},{0x500D, 0xADBF},{0x500E, 0xD0DD},{0x500F, 0xB0BF},{0x5011, 0xADCC},{0x5012, 0xADCB},{0x5013, 0xD0CB},{0x5014, 0xADCF},
- {0x5015, 0xD45B},{0x5016, 0xADC6},{0x5017, 0xD0D6},{0x5018, 0xADD5},{0x5019, 0xADD4},{0x501A, 0xADCA},{0x501B, 0xD0CE},{0x501C, 0xD0D7},
- {0x501E, 0xD0C8},{0x501F, 0xADC9},{0x5020, 0xD0D8},{0x5021, 0xADD2},{0x5022, 0xD0CC},{0x5023, 0xADC0},{0x5025, 0xADC3},{0x5026, 0xADC2},
- {0x5027, 0xD0D9},{0x5028, 0xADD0},{0x5029, 0xADC5},{0x502A, 0xADD9},{0x502B, 0xADDB},{0x502C, 0xD0D3},{0x502D, 0xADD8},{0x502F, 0xD0DB},
- {0x5030, 0xD0CD},{0x5031, 0xD0DC},{0x5033, 0xD0D1},{0x5035, 0xD0DA},{0x5037, 0xD0D2},{0x503C, 0xADC8},{0x5040, 0xD463},{0x5041, 0xD457},
- {0x5043, 0xB0B3},{0x5045, 0xD45C},{0x5046, 0xD462},{0x5047, 0xB0B2},{0x5048, 0xD455},{0x5049, 0xB0B6},{0x504A, 0xD459},{0x504B, 0xD452},
- {0x504C, 0xB0B4},{0x504D, 0xD456},{0x504E, 0xB0B9},{0x504F, 0xB0BE},{0x5051, 0xD467},{0x5053, 0xD451},{0x5055, 0xB0BA},{0x5057, 0xD466},
- {0x505A, 0xB0B5},{0x505B, 0xD458},{0x505C, 0xB0B1},{0x505D, 0xD453},{0x505E, 0xD44F},{0x505F, 0xD45D},{0x5060, 0xD450},{0x5061, 0xD44E},
- {0x5062, 0xD45A},{0x5063, 0xD460},{0x5064, 0xD461},{0x5065, 0xB0B7},{0x5068, 0xD85B},{0x5069, 0xD45E},{0x506A, 0xD44D},{0x506B, 0xD45F},
- {0x506D, 0xB0C1},{0x506E, 0xD464},{0x506F, 0xB0C0},{0x5070, 0xD44C},{0x5072, 0xD454},{0x5073, 0xD465},{0x5074, 0xB0BC},{0x5075, 0xB0BB},
- {0x5076, 0xB0B8},{0x5077, 0xB0BD},{0x507A, 0xB0AF},{0x507D, 0xB0B0},{0x5080, 0xB3C8},{0x5082, 0xD85E},{0x5083, 0xD857},{0x5085, 0xB3C5},
- {0x5087, 0xD85F},{0x508B, 0xD855},{0x508C, 0xD858},{0x508D, 0xB3C4},{0x508E, 0xD859},{0x5091, 0xB3C7},{0x5092, 0xD85D},{0x5094, 0xD853},
- {0x5095, 0xD852},{0x5096, 0xB3C9},{0x5098, 0xB3CA},{0x5099, 0xB3C6},{0x509A, 0xB3CB},{0x509B, 0xD851},{0x509C, 0xD85C},{0x509D, 0xD85A},
- {0x509E, 0xD854},{0x50A2, 0xB3C3},{0x50A3, 0xD856},{0x50AC, 0xB6CA},{0x50AD, 0xB6C4},{0x50AE, 0xDCB7},{0x50AF, 0xB6CD},{0x50B0, 0xDCBD},
- {0x50B1, 0xDCC0},{0x50B2, 0xB6C6},{0x50B3, 0xB6C7},{0x50B4, 0xDCBA},{0x50B5, 0xB6C5},{0x50B6, 0xDCC3},{0x50B7, 0xB6CB},{0x50B8, 0xDCC4},
- {0x50BA, 0xDCBF},{0x50BB, 0xB6CC},{0x50BD, 0xDCB4},{0x50BE, 0xB6C9},{0x50BF, 0xDCB5},{0x50C1, 0xDCBE},{0x50C2, 0xDCBC},{0x50C4, 0xDCB8},
- {0x50C5, 0xB6C8},{0x50C6, 0xDCB6},{0x50C7, 0xB6CE},{0x50C8, 0xDCBB},{0x50C9, 0xDCC2},{0x50CA, 0xDCB9},{0x50CB, 0xDCC1},{0x50CE, 0xB9B6},
- {0x50CF, 0xB9B3},{0x50D1, 0xB9B4},{0x50D3, 0xE0F9},{0x50D4, 0xE0F1},{0x50D5, 0xB9B2},{0x50D6, 0xB9AF},{0x50D7, 0xE0F2},{0x50DA, 0xB9B1},
- {0x50DB, 0xE0F5},{0x50DD, 0xE0F7},{0x50E0, 0xE0FE},{0x50E3, 0xE0FD},{0x50E4, 0xE0F8},{0x50E5, 0xB9AE},{0x50E6, 0xE0F0},{0x50E7, 0xB9AC},
- {0x50E8, 0xE0F3},{0x50E9, 0xB9B7},{0x50EA, 0xE0F6},{0x50EC, 0xE0FA},{0x50ED, 0xB9B0},{0x50EE, 0xB9AD},{0x50EF, 0xE0FC},{0x50F0, 0xE0FB},
- {0x50F1, 0xB9B5},{0x50F3, 0xE0F4},{0x50F5, 0xBBF8},{0x50F6, 0xE4EC},{0x50F8, 0xE4E9},{0x50F9, 0xBBF9},{0x50FB, 0xBBF7},{0x50FD, 0xE4F0},
- {0x50FE, 0xE4ED},{0x50FF, 0xE4E6},{0x5100, 0xBBF6},{0x5102, 0xBBFA},{0x5103, 0xE4E7},{0x5104, 0xBBF5},{0x5105, 0xBBFD},{0x5106, 0xE4EA},
- {0x5107, 0xE4EB},{0x5108, 0xBBFB},{0x5109, 0xBBFC},{0x510A, 0xE4F1},{0x510B, 0xE4EE},{0x510C, 0xE4EF},{0x5110, 0xBEAA},{0x5111, 0xE8F8},
- {0x5112, 0xBEA7},{0x5113, 0xE8F5},{0x5114, 0xBEA9},{0x5115, 0xBEAB},{0x5117, 0xE8F6},{0x5118, 0xBEA8},{0x511A, 0xE8F7},{0x511C, 0xE8F4},
- {0x511F, 0xC076},{0x5120, 0xECBD},{0x5121, 0xC077},{0x5122, 0xECBB},{0x5124, 0xECBC},{0x5125, 0xECBA},{0x5126, 0xECB9},{0x5129, 0xECBE},
- {0x512A, 0xC075},{0x512D, 0xEFB8},{0x512E, 0xEFB9},{0x5130, 0xE4E8},{0x5131, 0xEFB7},{0x5132, 0xC078},{0x5133, 0xC35F},{0x5134, 0xF1EB},
- {0x5135, 0xF1EC},{0x5137, 0xC4D7},{0x5138, 0xC4D8},{0x5139, 0xF5C1},{0x513A, 0xF5C0},{0x513B, 0xC56C},{0x513C, 0xC56B},{0x513D, 0xF7D0},
- {0x513F, 0xA449},{0x5140, 0xA461},{0x5141, 0xA4B9},{0x5143, 0xA4B8},{0x5144, 0xA553},{0x5145, 0xA552},{0x5146, 0xA5FC},{0x5147, 0xA5FB},
- {0x5148, 0xA5FD},{0x5149, 0xA5FA},{0x514B, 0xA74A},{0x514C, 0xA749},{0x514D, 0xA74B},{0x5152, 0xA8E0},{0x5154, 0xA8DF},{0x5155, 0xA8E1},
- {0x5157, 0xAB5E},{0x5159, 0xA259},{0x515A, 0xD0DE},{0x515B, 0xA25A},{0x515C, 0xB0C2},{0x515D, 0xA25C},{0x515E, 0xA25B},{0x515F, 0xD860},
- {0x5161, 0xA25D},{0x5162, 0xB9B8},{0x5163, 0xA25E},{0x5165, 0xA44A},{0x5167, 0xA4BA},{0x5168, 0xA5FE},{0x5169, 0xA8E2},{0x516B, 0xA44B},
- {0x516C, 0xA4BD},{0x516D, 0xA4BB},{0x516E, 0xA4BC},{0x5171, 0xA640},{0x5175, 0xA74C},{0x5176, 0xA8E4},{0x5177, 0xA8E3},{0x5178, 0xA8E5},
- {0x517C, 0xADDD},{0x5180, 0xBEAC},{0x5187, 0xC94E},{0x5189, 0xA554},{0x518A, 0xA555},{0x518D, 0xA641},{0x518F, 0xCA6A},{0x5191, 0xAB60},
- {0x5192, 0xAB5F},{0x5193, 0xD0E0},{0x5194, 0xD0DF},{0x5195, 0xB0C3},{0x5197, 0xA4BE},{0x5198, 0xC955},{0x519E, 0xCBCD},{0x51A0, 0xAB61},
- {0x51A2, 0xADE0},{0x51A4, 0xADDE},{0x51A5, 0xADDF},{0x51AA, 0xBEAD},{0x51AC, 0xA556},{0x51B0, 0xA642},{0x51B1, 0xC9BC},{0x51B6, 0xA74D},
- {0x51B7, 0xA74E},{0x51B9, 0xCA6B},{0x51BC, 0xCBCE},{0x51BD, 0xA8E6},{0x51BE, 0xCBCF},{0x51C4, 0xD0E2},{0x51C5, 0xD0E3},{0x51C6, 0xADE3},
- {0x51C8, 0xD0E4},{0x51CA, 0xD0E1},{0x51CB, 0xADE4},{0x51CC, 0xADE2},{0x51CD, 0xADE1},{0x51CE, 0xD0E5},{0x51D0, 0xD468},{0x51D4, 0xD861},
- {0x51D7, 0xDCC5},{0x51D8, 0xE140},{0x51DC, 0xBBFE},{0x51DD, 0xBEAE},{0x51DE, 0xE8F9},{0x51E0, 0xA44C},{0x51E1, 0xA45A},{0x51F0, 0xB0C4},
- {0x51F1, 0xB3CD},{0x51F3, 0xB9B9},{0x51F5, 0xC942},{0x51F6, 0xA4BF},{0x51F8, 0xA559},{0x51F9, 0xA557},{0x51FA, 0xA558},{0x51FD, 0xA8E7},
- {0x5200, 0xA44D},{0x5201, 0xA44E},{0x5203, 0xA462},{0x5206, 0xA4C0},{0x5207, 0xA4C1},{0x5208, 0xA4C2},{0x5209, 0xC9BE},{0x520A, 0xA55A},
- {0x520C, 0xC96B},{0x520E, 0xA646},{0x5210, 0xC9BF},{0x5211, 0xA644},{0x5212, 0xA645},{0x5213, 0xC9BD},{0x5216, 0xA647},{0x5217, 0xA643},
- {0x521C, 0xCA6C},{0x521D, 0xAAEC},{0x521E, 0xCA6D},{0x5221, 0xCA6E},{0x5224, 0xA750},{0x5225, 0xA74F},{0x5228, 0xA753},{0x5229, 0xA751},
- {0x522A, 0xA752},{0x522E, 0xA8ED},{0x5230, 0xA8EC},{0x5231, 0xCBD4},{0x5232, 0xCBD1},{0x5233, 0xCBD2},{0x5235, 0xCBD0},{0x5236, 0xA8EE},
- {0x5237, 0xA8EA},{0x5238, 0xA8E9},{0x523A, 0xA8EB},{0x523B, 0xA8E8},{0x5241, 0xA8EF},{0x5243, 0xAB63},{0x5244, 0xCDF0},{0x5246, 0xCBD3},
- {0x5247, 0xAB68},{0x5249, 0xCDF1},{0x524A, 0xAB64},{0x524B, 0xAB67},{0x524C, 0xAB66},{0x524D, 0xAB65},{0x524E, 0xAB62},{0x5252, 0xD0E8},
- {0x5254, 0xADE7},{0x5255, 0xD0EB},{0x5256, 0xADE5},{0x525A, 0xD0E7},{0x525B, 0xADE8},{0x525C, 0xADE6},{0x525D, 0xADE9},{0x525E, 0xD0E9},
- {0x525F, 0xD0EA},{0x5261, 0xD0E6},{0x5262, 0xD0EC},{0x5269, 0xB3D1},{0x526A, 0xB0C5},{0x526B, 0xD469},{0x526C, 0xD46B},{0x526D, 0xD46A},
- {0x526E, 0xD46C},{0x526F, 0xB0C6},{0x5272, 0xB3CE},{0x5274, 0xB3CF},{0x5275, 0xB3D0},{0x5277, 0xB6D0},{0x5278, 0xDCC7},{0x527A, 0xDCC6},
- {0x527B, 0xDCC8},{0x527C, 0xDCC9},{0x527D, 0xB6D1},{0x527F, 0xB6CF},{0x5280, 0xE141},{0x5281, 0xE142},{0x5282, 0xB9BB},{0x5283, 0xB9BA},
- {0x5284, 0xE35A},{0x5287, 0xBC40},{0x5288, 0xBC41},{0x5289, 0xBC42},{0x528A, 0xBC44},{0x528B, 0xE4F2},{0x528C, 0xE4F3},{0x528D, 0xBC43},
- {0x5291, 0xBEAF},{0x5293, 0xBEB0},{0x5296, 0xF1ED},{0x5297, 0xF5C3},{0x5298, 0xF5C2},{0x5299, 0xF7D1},{0x529B, 0xA44F},{0x529F, 0xA55C},
- {0x52A0, 0xA55B},{0x52A3, 0xA648},{0x52A6, 0xC9C0},{0x52A9, 0xA755},{0x52AA, 0xA756},{0x52AB, 0xA754},{0x52AC, 0xA757},{0x52AD, 0xCA6F},
- {0x52AE, 0xCA70},{0x52BB, 0xA8F1},{0x52BC, 0xCBD5},{0x52BE, 0xA8F0},{0x52C0, 0xCDF2},{0x52C1, 0xAB6C},{0x52C2, 0xCDF3},{0x52C3, 0xAB6B},
- {0x52C7, 0xAB69},{0x52C9, 0xAB6A},{0x52CD, 0xD0ED},{0x52D2, 0xB0C7},{0x52D3, 0xD46E},{0x52D5, 0xB0CA},{0x52D6, 0xD46D},{0x52D7, 0xB1E5},
- {0x52D8, 0xB0C9},{0x52D9, 0xB0C8},{0x52DB, 0xB3D4},{0x52DD, 0xB3D3},{0x52DE, 0xB3D2},{0x52DF, 0xB6D2},{0x52E2, 0xB6D5},{0x52E3, 0xB6D6},
- {0x52E4, 0xB6D4},{0x52E6, 0xB6D3},{0x52E9, 0xE143},{0x52EB, 0xE144},{0x52EF, 0xE4F5},{0x52F0, 0xBC45},{0x52F1, 0xE4F4},{0x52F3, 0xBEB1},
- {0x52F4, 0xECBF},{0x52F5, 0xC079},{0x52F7, 0xF1EE},{0x52F8, 0xC455},{0x52FA, 0xA463},{0x52FB, 0xA4C3},{0x52FC, 0xC956},{0x52FE, 0xA4C4},
- {0x52FF, 0xA4C5},{0x5305, 0xA55D},{0x5306, 0xA55E},{0x5308, 0xA649},{0x5309, 0xCA71},{0x530A, 0xCBD6},{0x530B, 0xCBD7},{0x530D, 0xAB6D},
- {0x530E, 0xD0EE},{0x530F, 0xB0CC},{0x5310, 0xB0CB},{0x5311, 0xD863},{0x5312, 0xD862},{0x5315, 0xA450},{0x5316, 0xA4C6},{0x5317, 0xA55F},
- {0x5319, 0xB0CD},{0x531A, 0xC943},{0x531C, 0xC96C},{0x531D, 0xA560},{0x531F, 0xC9C2},{0x5320, 0xA64B},{0x5321, 0xA64A},{0x5322, 0xC9C1},
- {0x5323, 0xA758},{0x532A, 0xADEA},{0x532D, 0xD46F},{0x532F, 0xB6D7},{0x5330, 0xE145},{0x5331, 0xB9BC},{0x5334, 0xE8FA},{0x5337, 0xF3FD},
- {0x5339, 0xA4C7},{0x533C, 0xCBD8},{0x533D, 0xCDF4},{0x533E, 0xB0D0},{0x533F, 0xB0CE},{0x5340, 0xB0CF},{0x5341, 0xA451},{0x5343, 0xA464},
- {0x5344, 0xA2CD},{0x5345, 0xA4CA},{0x5347, 0xA4C9},{0x5348, 0xA4C8},{0x5349, 0xA563},{0x534A, 0xA562},{0x534C, 0xC96D},{0x534D, 0xC9C3},
- {0x5351, 0xA8F5},{0x5352, 0xA8F2},{0x5353, 0xA8F4},{0x5354, 0xA8F3},{0x5357, 0xAB6E},{0x535A, 0xB3D5},{0x535C, 0xA452},{0x535E, 0xA4CB},
- {0x5360, 0xA565},{0x5361, 0xA564},{0x5363, 0xCA72},{0x5366, 0xA8F6},{0x536C, 0xC957},{0x536E, 0xA567},{0x536F, 0xA566},{0x5370, 0xA64C},
- {0x5371, 0xA64D},{0x5372, 0xCA73},{0x5373, 0xA759},{0x5375, 0xA75A},{0x5377, 0xA8F7},{0x5378, 0xA8F8},{0x5379, 0xA8F9},{0x537B, 0xAB6F},
- {0x537C, 0xCDF5},{0x537F, 0xADEB},{0x5382, 0xC944},{0x5384, 0xA4CC},{0x538A, 0xC9C4},{0x538E, 0xCA74},{0x538F, 0xCA75},{0x5392, 0xCBD9},
- {0x5394, 0xCBDA},{0x5396, 0xCDF7},{0x5397, 0xCDF6},{0x5398, 0xCDF9},{0x5399, 0xCDF8},{0x539A, 0xAB70},{0x539C, 0xD470},{0x539D, 0xADED},
- {0x539E, 0xD0EF},{0x539F, 0xADEC},{0x53A4, 0xD864},{0x53A5, 0xB3D6},{0x53A7, 0xD865},{0x53AC, 0xE146},{0x53AD, 0xB9BD},{0x53B2, 0xBC46},
- {0x53B4, 0xF1EF},{0x53B9, 0xC958},{0x53BB, 0xA568},{0x53C3, 0xB0D1},{0x53C8, 0xA453},{0x53C9, 0xA465},{0x53CA, 0xA4CE},{0x53CB, 0xA4CD},
- {0x53CD, 0xA4CF},{0x53D4, 0xA8FB},{0x53D6, 0xA8FA},{0x53D7, 0xA8FC},{0x53DB, 0xAB71},{0x53DF, 0xADEE},{0x53E1, 0xE8FB},{0x53E2, 0xC24F},
- {0x53E3, 0xA466},{0x53E4, 0xA56A},{0x53E5, 0xA579},{0x53E6, 0xA574},{0x53E8, 0xA56F},{0x53E9, 0xA56E},{0x53EA, 0xA575},{0x53EB, 0xA573},
- {0x53EC, 0xA56C},{0x53ED, 0xA57A},{0x53EE, 0xA56D},{0x53EF, 0xA569},{0x53F0, 0xA578},{0x53F1, 0xA577},{0x53F2, 0xA576},{0x53F3, 0xA56B},
- {0x53F5, 0xA572},{0x53F8, 0xA571},{0x53FB, 0xA57B},{0x53FC, 0xA570},{0x5401, 0xA653},{0x5403, 0xA659},{0x5404, 0xA655},{0x5406, 0xA65B},
- {0x5407, 0xC9C5},{0x5408, 0xA658},{0x5409, 0xA64E},{0x540A, 0xA651},{0x540B, 0xA654},{0x540C, 0xA650},{0x540D, 0xA657},{0x540E, 0xA65A},
- {0x540F, 0xA64F},{0x5410, 0xA652},{0x5411, 0xA656},{0x5412, 0xA65C},{0x5418, 0xCA7E},{0x5419, 0xCA7B},{0x541B, 0xA767},{0x541C, 0xCA7C},
- {0x541D, 0xA75B},{0x541E, 0xA75D},{0x541F, 0xA775},{0x5420, 0xA770},{0x5424, 0xCAA5},{0x5425, 0xCA7D},{0x5426, 0xA75F},{0x5427, 0xA761},
- {0x5428, 0xCAA4},{0x5429, 0xA768},{0x542A, 0xCA78},{0x542B, 0xA774},{0x542C, 0xA776},{0x542D, 0xA75C},{0x542E, 0xA76D},{0x5430, 0xCA76},
- {0x5431, 0xA773},{0x5433, 0xA764},{0x5435, 0xA76E},{0x5436, 0xA76F},{0x5437, 0xCA77},{0x5438, 0xA76C},{0x5439, 0xA76A},{0x543B, 0xA76B},
- {0x543C, 0xA771},{0x543D, 0xCAA1},{0x543E, 0xA75E},{0x5440, 0xA772},{0x5441, 0xCAA3},{0x5442, 0xA766},{0x5443, 0xA763},{0x5445, 0xCA7A},
- {0x5446, 0xA762},{0x5447, 0xCAA6},{0x5448, 0xA765},{0x544A, 0xA769},{0x544E, 0xA760},{0x544F, 0xCAA2},{0x5454, 0xCA79},{0x5460, 0xCBEB},
- {0x5461, 0xCBEA},{0x5462, 0xA94F},{0x5463, 0xCBED},{0x5464, 0xCBEF},{0x5465, 0xCBE4},{0x5466, 0xCBE7},{0x5467, 0xCBEE},{0x5468, 0xA950},
- {0x546B, 0xCBE1},{0x546C, 0xCBE5},{0x546F, 0xCBE9},{0x5470, 0xCE49},{0x5471, 0xA94B},{0x5472, 0xCE4D},{0x5473, 0xA8FD},{0x5474, 0xCBE6},
- {0x5475, 0xA8FE},{0x5476, 0xA94C},{0x5477, 0xA945},{0x5478, 0xA941},{0x547A, 0xCBE2},{0x547B, 0xA944},{0x547C, 0xA949},{0x547D, 0xA952},
- {0x547E, 0xCBE3},{0x547F, 0xCBDC},{0x5480, 0xA943},{0x5481, 0xCBDD},{0x5482, 0xCBDF},{0x5484, 0xA946},{0x5486, 0xA948},{0x5487, 0xCBDB},
- {0x5488, 0xCBE0},{0x548B, 0xA951},{0x548C, 0xA94D},{0x548D, 0xCBE8},{0x548E, 0xA953},{0x5490, 0xA94A},{0x5491, 0xCBDE},{0x5492, 0xA947},
- {0x5495, 0xA942},{0x5496, 0xA940},{0x5498, 0xCBEC},{0x549A, 0xA94E},{0x54A0, 0xCE48},{0x54A1, 0xCDFB},{0x54A2, 0xCE4B},{0x54A5, 0xCDFD},
- {0x54A6, 0xAB78},{0x54A7, 0xABA8},{0x54A8, 0xAB74},{0x54A9, 0xABA7},{0x54AA, 0xAB7D},{0x54AB, 0xABA4},{0x54AC, 0xAB72},{0x54AD, 0xCDFC},
- {0x54AE, 0xCE43},{0x54AF, 0xABA3},{0x54B0, 0xCE4F},{0x54B1, 0xABA5},{0x54B3, 0xAB79},{0x54B6, 0xCE45},{0x54B7, 0xCE42},{0x54B8, 0xAB77},
- {0x54BA, 0xCDFA},{0x54BB, 0xABA6},{0x54BC, 0xCE4A},{0x54BD, 0xAB7C},{0x54BE, 0xCE4C},{0x54BF, 0xABA9},{0x54C0, 0xAB73},{0x54C1, 0xAB7E},
- {0x54C2, 0xAB7B},{0x54C3, 0xCE40},{0x54C4, 0xABA1},{0x54C5, 0xCE46},{0x54C6, 0xCE47},{0x54C7, 0xAB7A},{0x54C8, 0xABA2},{0x54C9, 0xAB76},
- {0x54CE, 0xAB75},{0x54CF, 0xCDFE},{0x54D6, 0xCE44},{0x54DE, 0xCE4E},{0x54E0, 0xD144},{0x54E1, 0xADFB},{0x54E2, 0xD0F1},{0x54E4, 0xD0F6},
- {0x54E5, 0xADF4},{0x54E6, 0xAE40},{0x54E7, 0xD0F4},{0x54E8, 0xADEF},{0x54E9, 0xADF9},{0x54EA, 0xADFE},{0x54EB, 0xD0FB},{0x54ED, 0xADFA},
- {0x54EE, 0xADFD},{0x54F1, 0xD0FE},{0x54F2, 0xADF5},{0x54F3, 0xD0F5},{0x54F7, 0xD142},{0x54F8, 0xD143},{0x54FA, 0xADF7},{0x54FB, 0xD141},
- {0x54FC, 0xADF3},{0x54FD, 0xAE43},{0x54FF, 0xD0F8},{0x5501, 0xADF1},{0x5503, 0xD146},{0x5504, 0xD0F9},{0x5505, 0xD0FD},{0x5506, 0xADF6},
- {0x5507, 0xAE42},{0x5508, 0xD0FA},{0x5509, 0xADFC},{0x550A, 0xD140},{0x550B, 0xD147},{0x550C, 0xD4A1},{0x550E, 0xD145},{0x550F, 0xAE44},
- {0x5510, 0xADF0},{0x5511, 0xD0FC},{0x5512, 0xD0F3},{0x5514, 0xADF8},{0x5517, 0xD0F2},{0x551A, 0xD0F7},{0x5526, 0xD0F0},{0x5527, 0xAE41},
- {0x552A, 0xD477},{0x552C, 0xB0E4},{0x552D, 0xD4A7},{0x552E, 0xB0E2},{0x552F, 0xB0DF},{0x5530, 0xD47C},{0x5531, 0xB0DB},{0x5532, 0xD4A2},
- {0x5533, 0xB0E6},{0x5534, 0xD476},{0x5535, 0xD47B},{0x5536, 0xD47A},{0x5537, 0xADF2},{0x5538, 0xB0E1},{0x5539, 0xD4A5},{0x553B, 0xD4A8},
- {0x553C, 0xD473},{0x553E, 0xB3E8},{0x5540, 0xD4A9},{0x5541, 0xB0E7},{0x5543, 0xB0D9},{0x5544, 0xB0D6},{0x5545, 0xD47E},{0x5546, 0xB0D3},
- {0x5548, 0xD4A6},{0x554A, 0xB0DA},{0x554B, 0xD4AA},{0x554D, 0xD474},{0x554E, 0xD4A4},{0x554F, 0xB0DD},{0x5550, 0xD475},{0x5551, 0xD478},
- {0x5552, 0xD47D},{0x5555, 0xB0DE},{0x5556, 0xB0DC},{0x5557, 0xB0E8},{0x555C, 0xB0E3},{0x555E, 0xB0D7},{0x555F, 0xB1D2},{0x5561, 0xB0D8},
- {0x5562, 0xD479},{0x5563, 0xB0E5},{0x5564, 0xB0E0},{0x5565, 0xD4A3},{0x5566, 0xB0D5},{0x556A, 0xB0D4},{0x5575, 0xD471},{0x5576, 0xD472},
- {0x5577, 0xD86A},{0x557B, 0xB3D7},{0x557C, 0xB3DA},{0x557D, 0xD875},{0x557E, 0xB3EE},{0x557F, 0xD878},{0x5580, 0xB3D8},{0x5581, 0xD871},
- {0x5582, 0xB3DE},{0x5583, 0xB3E4},{0x5584, 0xB5BD},{0x5587, 0xB3E2},{0x5588, 0xD86E},{0x5589, 0xB3EF},{0x558A, 0xB3DB},{0x558B, 0xB3E3},
- {0x558C, 0xD876},{0x558D, 0xDCD7},{0x558E, 0xD87B},{0x558F, 0xD86F},{0x5591, 0xD866},{0x5592, 0xD873},{0x5593, 0xD86D},{0x5594, 0xB3E1},
- {0x5595, 0xD879},{0x5598, 0xB3DD},{0x5599, 0xB3F1},{0x559A, 0xB3EA},{0x559C, 0xB3DF},{0x559D, 0xB3DC},{0x559F, 0xB3E7},{0x55A1, 0xD87A},
- {0x55A2, 0xD86C},{0x55A3, 0xD872},{0x55A4, 0xD874},{0x55A5, 0xD868},{0x55A6, 0xD877},{0x55A7, 0xB3D9},{0x55A8, 0xD867},{0x55AA, 0xB3E0},
- {0x55AB, 0xB3F0},{0x55AC, 0xB3EC},{0x55AD, 0xD869},{0x55AE, 0xB3E6},{0x55B1, 0xB3ED},{0x55B2, 0xB3E9},{0x55B3, 0xB3E5},{0x55B5, 0xD870},
- {0x55BB, 0xB3EB},{0x55BF, 0xDCD5},{0x55C0, 0xDCD1},{0x55C2, 0xDCE0},{0x55C3, 0xDCCA},{0x55C4, 0xDCD3},{0x55C5, 0xB6E5},{0x55C6, 0xB6E6},
- {0x55C7, 0xB6DE},{0x55C8, 0xDCDC},{0x55C9, 0xB6E8},{0x55CA, 0xDCCF},{0x55CB, 0xDCCE},{0x55CC, 0xDCCC},{0x55CD, 0xDCDE},{0x55CE, 0xB6DC},
- {0x55CF, 0xDCD8},{0x55D0, 0xDCCD},{0x55D1, 0xB6DF},{0x55D2, 0xDCD6},{0x55D3, 0xB6DA},{0x55D4, 0xDCD2},{0x55D5, 0xDCD9},{0x55D6, 0xDCDB},
- {0x55D9, 0xDCDF},{0x55DA, 0xB6E3},{0x55DB, 0xDCCB},{0x55DC, 0xB6DD},{0x55DD, 0xDCD0},{0x55DF, 0xB6D8},{0x55E1, 0xB6E4},{0x55E2, 0xDCDA},
- {0x55E3, 0xB6E0},{0x55E4, 0xB6E1},{0x55E5, 0xB6E7},{0x55E6, 0xB6DB},{0x55E7, 0xA25F},{0x55E8, 0xB6D9},{0x55E9, 0xDCD4},{0x55EF, 0xB6E2},
- {0x55F2, 0xDCDD},{0x55F6, 0xB9CD},{0x55F7, 0xB9C8},{0x55F9, 0xE155},{0x55FA, 0xE151},{0x55FC, 0xE14B},{0x55FD, 0xB9C2},{0x55FE, 0xB9BE},
- {0x55FF, 0xE154},{0x5600, 0xB9BF},{0x5601, 0xE14E},{0x5602, 0xE150},{0x5604, 0xE153},{0x5606, 0xB9C4},{0x5608, 0xB9CB},{0x5609, 0xB9C5},
- {0x560C, 0xE149},{0x560D, 0xB9C6},{0x560E, 0xB9C7},{0x560F, 0xE14C},{0x5610, 0xB9CC},{0x5612, 0xE14A},{0x5613, 0xE14F},{0x5614, 0xB9C3},
- {0x5615, 0xE148},{0x5616, 0xB9C9},{0x5617, 0xB9C1},{0x561B, 0xB9C0},{0x561C, 0xE14D},{0x561D, 0xE152},{0x561F, 0xB9CA},{0x5627, 0xE147},
- {0x5629, 0xBC4D},{0x562A, 0xE547},{0x562C, 0xE544},{0x562E, 0xBC47},{0x562F, 0xBC53},{0x5630, 0xBC54},{0x5632, 0xBC4A},{0x5633, 0xE542},
- {0x5634, 0xBC4C},{0x5635, 0xE4F9},{0x5636, 0xBC52},{0x5638, 0xE546},{0x5639, 0xBC49},{0x563A, 0xE548},{0x563B, 0xBC48},{0x563D, 0xE543},
- {0x563E, 0xE545},{0x563F, 0xBC4B},{0x5640, 0xE541},{0x5641, 0xE4FA},{0x5642, 0xE4F7},{0x5645, 0xD86B},{0x5646, 0xE4FD},{0x5648, 0xE4F6},
- {0x5649, 0xE4FC},{0x564A, 0xE4FB},{0x564C, 0xE4F8},{0x564E, 0xBC4F},{0x5653, 0xBC4E},{0x5657, 0xBC50},{0x5658, 0xE4FE},{0x5659, 0xBEB2},
- {0x565A, 0xE540},{0x565E, 0xE945},{0x5660, 0xE8FD},{0x5662, 0xBEBE},{0x5663, 0xE942},{0x5664, 0xBEB6},{0x5665, 0xBEBA},{0x5666, 0xE941},
- {0x5668, 0xBEB9},{0x5669, 0xBEB5},{0x566A, 0xBEB8},{0x566B, 0xBEB3},{0x566C, 0xBEBD},{0x566D, 0xE943},{0x566E, 0xE8FE},{0x566F, 0xBEBC},
- {0x5670, 0xE8FC},{0x5671, 0xBEBB},{0x5672, 0xE944},{0x5673, 0xE940},{0x5674, 0xBC51},{0x5676, 0xBEBF},{0x5677, 0xE946},{0x5678, 0xBEB7},
- {0x5679, 0xBEB4},{0x567E, 0xECC6},{0x567F, 0xECC8},{0x5680, 0xC07B},{0x5681, 0xECC9},{0x5682, 0xECC7},{0x5683, 0xECC5},{0x5684, 0xECC4},
- {0x5685, 0xC07D},{0x5686, 0xECC3},{0x5687, 0xC07E},{0x568C, 0xECC1},{0x568D, 0xECC2},{0x568E, 0xC07A},{0x568F, 0xC0A1},{0x5690, 0xC07C},
- {0x5693, 0xECC0},{0x5695, 0xC250},{0x5697, 0xEFBC},{0x5698, 0xEFBA},{0x5699, 0xEFBF},{0x569A, 0xEFBD},{0x569C, 0xEFBB},{0x569D, 0xEFBE},
- {0x56A5, 0xC360},{0x56A6, 0xF1F2},{0x56A7, 0xF1F3},{0x56A8, 0xC456},{0x56AA, 0xF1F4},{0x56AB, 0xF1F0},{0x56AC, 0xF1F5},{0x56AD, 0xF1F1},
- {0x56AE, 0xC251},{0x56B2, 0xF3FE},{0x56B3, 0xF441},{0x56B4, 0xC459},{0x56B5, 0xF440},{0x56B6, 0xC458},{0x56B7, 0xC457},{0x56BC, 0xC45A},
- {0x56BD, 0xF5C5},{0x56BE, 0xF5C6},{0x56C0, 0xC4DA},{0x56C1, 0xC4D9},{0x56C2, 0xC4DB},{0x56C3, 0xF5C4},{0x56C5, 0xF6D8},{0x56C6, 0xF6D7},
- {0x56C8, 0xC56D},{0x56C9, 0xC56F},{0x56CA, 0xC56E},{0x56CB, 0xF6D9},{0x56CC, 0xC5C8},{0x56CD, 0xF8A6},{0x56D1, 0xC5F1},{0x56D3, 0xF8A5},
- {0x56D4, 0xF8EE},{0x56D7, 0xC949},{0x56DA, 0xA57D},{0x56DB, 0xA57C},{0x56DD, 0xA65F},{0x56DE, 0xA65E},{0x56DF, 0xC9C7},{0x56E0, 0xA65D},
- {0x56E1, 0xC9C6},{0x56E4, 0xA779},{0x56E5, 0xCAA9},{0x56E7, 0xCAA8},{0x56EA, 0xA777},{0x56EB, 0xA77A},{0x56EE, 0xCAA7},{0x56F0, 0xA778},
- {0x56F7, 0xCBF0},{0x56F9, 0xCBF1},{0x56FA, 0xA954},{0x56FF, 0xABAA},{0x5701, 0xD148},{0x5702, 0xD149},{0x5703, 0xAE45},{0x5704, 0xAE46},
- {0x5707, 0xD4AC},{0x5708, 0xB0E9},{0x5709, 0xB0EB},{0x570A, 0xD4AB},{0x570B, 0xB0EA},{0x570C, 0xD87C},{0x570D, 0xB3F2},{0x5712, 0xB6E9},
- {0x5713, 0xB6EA},{0x5714, 0xDCE1},{0x5716, 0xB9CF},{0x5718, 0xB9CE},{0x571A, 0xE549},{0x571B, 0xE948},{0x571C, 0xE947},{0x571E, 0xF96B},
- {0x571F, 0xA467},{0x5720, 0xC959},{0x5722, 0xC96E},{0x5723, 0xC96F},{0x5728, 0xA662},{0x5729, 0xA666},{0x572A, 0xC9C9},{0x572C, 0xA664},
- {0x572D, 0xA663},{0x572E, 0xC9C8},{0x572F, 0xA665},{0x5730, 0xA661},{0x5733, 0xA660},{0x5734, 0xC9CA},{0x573B, 0xA7A6},{0x573E, 0xA7A3},
- {0x5740, 0xA77D},{0x5741, 0xCAAA},{0x5745, 0xCAAB},{0x5747, 0xA7A1},{0x5749, 0xCAAD},{0x574A, 0xA77B},{0x574B, 0xCAAE},{0x574C, 0xCAAC},
- {0x574D, 0xA77E},{0x574E, 0xA7A2},{0x574F, 0xA7A5},{0x5750, 0xA7A4},{0x5751, 0xA77C},{0x5752, 0xCAAF},{0x5761, 0xA959},{0x5762, 0xCBFE},
- {0x5764, 0xA95B},{0x5766, 0xA95A},{0x5768, 0xCC40},{0x5769, 0xA958},{0x576A, 0xA957},{0x576B, 0xCBF5},{0x576D, 0xCBF4},{0x576F, 0xCBF2},
- {0x5770, 0xCBF7},{0x5771, 0xCBF6},{0x5772, 0xCBF3},{0x5773, 0xCBFC},{0x5774, 0xCBFD},{0x5775, 0xCBFA},{0x5776, 0xCBF8},{0x5777, 0xA956},
- {0x577B, 0xCBFB},{0x577C, 0xA95C},{0x577D, 0xCC41},{0x5780, 0xCBF9},{0x5782, 0xABAB},{0x5783, 0xA955},{0x578B, 0xABAC},{0x578C, 0xCE54},
- {0x578F, 0xCE5A},{0x5793, 0xABB2},{0x5794, 0xCE58},{0x5795, 0xCE5E},{0x5797, 0xCE55},{0x5798, 0xCE59},{0x5799, 0xCE5B},{0x579A, 0xCE5D},
- {0x579B, 0xCE57},{0x579D, 0xCE56},{0x579E, 0xCE51},{0x579F, 0xCE52},{0x57A0, 0xABAD},{0x57A2, 0xABAF},{0x57A3, 0xABAE},{0x57A4, 0xCE53},
- {0x57A5, 0xCE5C},{0x57AE, 0xABB1},{0x57B5, 0xCE50},{0x57B6, 0xD153},{0x57B8, 0xD152},{0x57B9, 0xD157},{0x57BA, 0xD14E},{0x57BC, 0xD151},
- {0x57BD, 0xD150},{0x57BF, 0xD154},{0x57C1, 0xD158},{0x57C2, 0xAE47},{0x57C3, 0xAE4A},{0x57C6, 0xD14F},{0x57C7, 0xD155},{0x57CB, 0xAE49},
- {0x57CC, 0xD14A},{0x57CE, 0xABB0},{0x57CF, 0xD4BA},{0x57D0, 0xD156},{0x57D2, 0xD14D},{0x57D4, 0xAE48},{0x57D5, 0xD14C},{0x57DC, 0xD4B1},
- {0x57DF, 0xB0EC},{0x57E0, 0xB0F0},{0x57E1, 0xD4C1},{0x57E2, 0xD4AF},{0x57E3, 0xD4BD},{0x57E4, 0xB0F1},{0x57E5, 0xD4BF},{0x57E7, 0xD4C5},
- {0x57E9, 0xD4C9},{0x57EC, 0xD4C0},{0x57ED, 0xD4B4},{0x57EE, 0xD4BC},{0x57F0, 0xD4CA},{0x57F1, 0xD4C8},{0x57F2, 0xD4BE},{0x57F3, 0xD4B9},
- {0x57F4, 0xD4B2},{0x57F5, 0xD8A6},{0x57F6, 0xD4B0},{0x57F7, 0xB0F5},{0x57F8, 0xD4B7},{0x57F9, 0xB0F6},{0x57FA, 0xB0F2},{0x57FB, 0xD4AD},
- {0x57FC, 0xD4C3},{0x57FD, 0xD4B5},{0x5800, 0xD4B3},{0x5801, 0xD4C6},{0x5802, 0xB0F3},{0x5804, 0xD4CC},{0x5805, 0xB0ED},{0x5806, 0xB0EF},
- {0x5807, 0xD4BB},{0x5808, 0xD4B6},{0x5809, 0xAE4B},{0x580A, 0xB0EE},{0x580B, 0xD4B8},{0x580C, 0xD4C7},{0x580D, 0xD4CB},{0x580E, 0xD4C2},
- {0x5810, 0xD4C4},{0x5814, 0xD4AE},{0x5819, 0xD8A1},{0x581B, 0xD8AA},{0x581C, 0xD8A9},{0x581D, 0xB3FA},{0x581E, 0xD8A2},{0x5820, 0xB3FB},
- {0x5821, 0xB3F9},{0x5823, 0xD8A4},{0x5824, 0xB3F6},{0x5825, 0xD8A8},{0x5827, 0xD8A3},{0x5828, 0xD8A5},{0x5829, 0xD87D},{0x582A, 0xB3F4},
- {0x582C, 0xD8B2},{0x582D, 0xD8B1},{0x582E, 0xD8AE},{0x582F, 0xB3F3},{0x5830, 0xB3F7},{0x5831, 0xB3F8},{0x5832, 0xD14B},{0x5833, 0xD8AB},
- {0x5834, 0xB3F5},{0x5835, 0xB0F4},{0x5836, 0xD8AD},{0x5837, 0xD87E},{0x5838, 0xD8B0},{0x5839, 0xD8AF},{0x583B, 0xD8B3},{0x583D, 0xDCEF},
- {0x583F, 0xD8AC},{0x5848, 0xD8A7},{0x5849, 0xDCE7},{0x584A, 0xB6F4},{0x584B, 0xB6F7},{0x584C, 0xB6F2},{0x584D, 0xDCE6},{0x584E, 0xDCEA},
- {0x584F, 0xDCE5},{0x5851, 0xB6EC},{0x5852, 0xB6F6},{0x5853, 0xDCE2},{0x5854, 0xB6F0},{0x5855, 0xDCE9},{0x5857, 0xB6EE},{0x5858, 0xB6ED},
- {0x5859, 0xDCEC},{0x585A, 0xB6EF},{0x585B, 0xDCEE},{0x585D, 0xDCEB},{0x585E, 0xB6EB},{0x5862, 0xB6F5},{0x5863, 0xDCF0},{0x5864, 0xDCE4},
- {0x5865, 0xDCED},{0x5868, 0xDCE3},{0x586B, 0xB6F1},{0x586D, 0xB6F3},{0x586F, 0xDCE8},{0x5871, 0xDCF1},{0x5874, 0xE15D},{0x5875, 0xB9D0},
- {0x5876, 0xE163},{0x5879, 0xB9D5},{0x587A, 0xE15F},{0x587B, 0xE166},{0x587C, 0xE157},{0x587D, 0xB9D7},{0x587E, 0xB9D1},{0x587F, 0xE15C},
- {0x5880, 0xBC55},{0x5881, 0xE15B},{0x5882, 0xE164},{0x5883, 0xB9D2},{0x5885, 0xB9D6},{0x5886, 0xE15A},{0x5887, 0xE160},{0x5888, 0xE165},
- {0x5889, 0xE156},{0x588A, 0xB9D4},{0x588B, 0xE15E},{0x588E, 0xE162},{0x588F, 0xE168},{0x5890, 0xE158},{0x5891, 0xE161},{0x5893, 0xB9D3},
- {0x5894, 0xE167},{0x5898, 0xE159},{0x589C, 0xBC59},{0x589D, 0xE54B},{0x589E, 0xBC57},{0x589F, 0xBC56},{0x58A0, 0xE54D},{0x58A1, 0xE552},
- {0x58A3, 0xE54E},{0x58A5, 0xE551},{0x58A6, 0xBC5C},{0x58A8, 0xBEA5},{0x58A9, 0xBC5B},{0x58AB, 0xE54A},{0x58AC, 0xE550},{0x58AE, 0xBC5A},
- {0x58AF, 0xE54F},{0x58B1, 0xE54C},{0x58B3, 0xBC58},{0x58BA, 0xE94D},{0x58BC, 0xE94F},{0x58BD, 0xE94A},{0x58BE, 0xBEC1},{0x58BF, 0xE94C},
- {0x58C1, 0xBEC0},{0x58C2, 0xE94E},{0x58C5, 0xBEC3},{0x58C6, 0xE950},{0x58C7, 0xBEC2},{0x58C8, 0xE949},{0x58C9, 0xE94B},{0x58CE, 0xC0A5},
- {0x58CF, 0xECCC},{0x58D1, 0xC0A4},{0x58D2, 0xECCD},{0x58D3, 0xC0A3},{0x58D4, 0xECCB},{0x58D5, 0xC0A2},{0x58D6, 0xECCA},{0x58D8, 0xC253},
- {0x58D9, 0xC252},{0x58DA, 0xF1F6},{0x58DB, 0xF1F8},{0x58DD, 0xF1F7},{0x58DE, 0xC361},{0x58DF, 0xC362},{0x58E2, 0xC363},{0x58E3, 0xF442},
- {0x58E4, 0xC45B},{0x58E7, 0xF7D3},{0x58E8, 0xF7D2},{0x58E9, 0xC5F2},{0x58EB, 0xA468},{0x58EC, 0xA4D0},{0x58EF, 0xA7A7},{0x58F4, 0xCE5F},
- {0x58F9, 0xB3FC},{0x58FA, 0xB3FD},{0x58FC, 0xDCF2},{0x58FD, 0xB9D8},{0x58FE, 0xE169},{0x58FF, 0xE553},{0x5903, 0xC95A},{0x5906, 0xCAB0},
- {0x590C, 0xCC42},{0x590D, 0xCE60},{0x590E, 0xD159},{0x590F, 0xAE4C},{0x5912, 0xF1F9},{0x5914, 0xC4DC},{0x5915, 0xA469},{0x5916, 0xA57E},
- {0x5917, 0xC970},{0x5919, 0xA667},{0x591A, 0xA668},{0x591C, 0xA95D},{0x5920, 0xB0F7},{0x5922, 0xB9DA},{0x5924, 0xB9DB},{0x5925, 0xB9D9},
- {0x5927, 0xA46A},{0x5929, 0xA4D1},{0x592A, 0xA4D3},{0x592B, 0xA4D2},{0x592C, 0xC95B},{0x592D, 0xA4D4},{0x592E, 0xA5A1},{0x592F, 0xC971},
- {0x5931, 0xA5A2},{0x5937, 0xA669},{0x5938, 0xA66A},{0x593C, 0xC9CB},{0x593E, 0xA7A8},{0x5940, 0xCAB1},{0x5944, 0xA961},{0x5945, 0xCC43},
- {0x5947, 0xA95F},{0x5948, 0xA960},{0x5949, 0xA95E},{0x594A, 0xD15A},{0x594E, 0xABB6},{0x594F, 0xABB5},{0x5950, 0xABB7},{0x5951, 0xABB4},
- {0x5953, 0xCE61},{0x5954, 0xA962},{0x5955, 0xABB3},{0x5957, 0xAE4D},{0x5958, 0xAE4E},{0x595A, 0xAE4F},{0x595C, 0xD4CD},{0x5960, 0xB3FE},
- {0x5961, 0xD8B4},{0x5962, 0xB0F8},{0x5967, 0xB6F8},{0x5969, 0xB9DD},{0x596A, 0xB9DC},{0x596B, 0xE16A},{0x596D, 0xBC5D},{0x596E, 0xBEC4},
- {0x5970, 0xEFC0},{0x5971, 0xF6DA},{0x5972, 0xF7D4},{0x5973, 0xA46B},{0x5974, 0xA5A3},{0x5976, 0xA5A4},{0x5977, 0xC9D1},{0x5978, 0xA66C},
- {0x5979, 0xA66F},{0x597B, 0xC9CF},{0x597C, 0xC9CD},{0x597D, 0xA66E},{0x597E, 0xC9D0},{0x597F, 0xC9D2},{0x5980, 0xC9CC},{0x5981, 0xA671},
- {0x5982, 0xA670},{0x5983, 0xA66D},{0x5984, 0xA66B},{0x5985, 0xC9CE},{0x598A, 0xA7B3},{0x598D, 0xA7B0},{0x598E, 0xCAB6},{0x598F, 0xCAB9},
- {0x5990, 0xCAB8},{0x5992, 0xA7AA},{0x5993, 0xA7B2},{0x5996, 0xA7AF},{0x5997, 0xCAB5},{0x5998, 0xCAB3},{0x5999, 0xA7AE},{0x599D, 0xA7A9},
- {0x599E, 0xA7AC},{0x59A0, 0xCAB4},{0x59A1, 0xCABB},{0x59A2, 0xCAB7},{0x59A3, 0xA7AD},{0x59A4, 0xA7B1},{0x59A5, 0xA7B4},{0x59A6, 0xCAB2},
- {0x59A7, 0xCABA},{0x59A8, 0xA7AB},{0x59AE, 0xA967},{0x59AF, 0xA96F},{0x59B1, 0xCC4F},{0x59B2, 0xCC48},{0x59B3, 0xA970},{0x59B4, 0xCC53},
- {0x59B5, 0xCC44},{0x59B6, 0xCC4B},{0x59B9, 0xA966},{0x59BA, 0xCC45},{0x59BB, 0xA964},{0x59BC, 0xCC4C},{0x59BD, 0xCC50},{0x59BE, 0xA963},
- {0x59C0, 0xCC51},{0x59C1, 0xCC4A},{0x59C3, 0xCC4D},{0x59C5, 0xA972},{0x59C6, 0xA969},{0x59C7, 0xCC54},{0x59C8, 0xCC52},{0x59CA, 0xA96E},
- {0x59CB, 0xA96C},{0x59CC, 0xCC49},{0x59CD, 0xA96B},{0x59CE, 0xCC47},{0x59CF, 0xCC46},{0x59D0, 0xA96A},{0x59D1, 0xA968},{0x59D2, 0xA971},
- {0x59D3, 0xA96D},{0x59D4, 0xA965},{0x59D6, 0xCC4E},{0x59D8, 0xABB9},{0x59DA, 0xABC0},{0x59DB, 0xCE6F},{0x59DC, 0xABB8},{0x59DD, 0xCE67},
- {0x59DE, 0xCE63},{0x59E0, 0xCE73},{0x59E1, 0xCE62},{0x59E3, 0xABBB},{0x59E4, 0xCE6C},{0x59E5, 0xABBE},{0x59E6, 0xABC1},{0x59E8, 0xABBC},
- {0x59E9, 0xCE70},{0x59EA, 0xABBF},{0x59EC, 0xAE56},{0x59ED, 0xCE76},{0x59EE, 0xCE64},{0x59F1, 0xCE66},{0x59F2, 0xCE6D},{0x59F3, 0xCE71},
- {0x59F4, 0xCE75},{0x59F5, 0xCE72},{0x59F6, 0xCE6B},{0x59F7, 0xCE6E},{0x59FA, 0xCE68},{0x59FB, 0xABC3},{0x59FC, 0xCE6A},{0x59FD, 0xCE69},
- {0x59FE, 0xCE74},{0x59FF, 0xABBA},{0x5A00, 0xCE65},{0x5A01, 0xABC2},{0x5A03, 0xABBD},{0x5A09, 0xAE5C},{0x5A0A, 0xD162},{0x5A0C, 0xAE5B},
- {0x5A0F, 0xD160},{0x5A11, 0xAE50},{0x5A13, 0xAE55},{0x5A15, 0xD15F},{0x5A16, 0xD15C},{0x5A17, 0xD161},{0x5A18, 0xAE51},{0x5A19, 0xD15B},
- {0x5A1B, 0xAE54},{0x5A1C, 0xAE52},{0x5A1E, 0xD163},{0x5A1F, 0xAE53},{0x5A20, 0xAE57},{0x5A23, 0xAE58},{0x5A25, 0xAE5A},{0x5A29, 0xAE59},
- {0x5A2D, 0xD15D},{0x5A2E, 0xD15E},{0x5A33, 0xD164},{0x5A35, 0xD4D4},{0x5A36, 0xB0F9},{0x5A37, 0xD8C2},{0x5A38, 0xD4D3},{0x5A39, 0xD4E6},
- {0x5A3C, 0xB140},{0x5A3E, 0xD4E4},{0x5A40, 0xB0FE},{0x5A41, 0xB0FA},{0x5A42, 0xD4ED},{0x5A43, 0xD4DD},{0x5A44, 0xD4E0},{0x5A46, 0xB143},
- {0x5A47, 0xD4EA},{0x5A48, 0xD4E2},{0x5A49, 0xB0FB},{0x5A4A, 0xB144},{0x5A4C, 0xD4E7},{0x5A4D, 0xD4E5},{0x5A50, 0xD4D6},{0x5A51, 0xD4EB},
- {0x5A52, 0xD4DF},{0x5A53, 0xD4DA},{0x5A55, 0xD4D0},{0x5A56, 0xD4EC},{0x5A57, 0xD4DC},{0x5A58, 0xD4CF},{0x5A5A, 0xB142},{0x5A5B, 0xD4E1},
- {0x5A5C, 0xD4EE},{0x5A5D, 0xD4DE},{0x5A5E, 0xD4D2},{0x5A5F, 0xD4D7},{0x5A60, 0xD4CE},{0x5A62, 0xB141},{0x5A64, 0xD4DB},{0x5A65, 0xD4D8},
- {0x5A66, 0xB0FC},{0x5A67, 0xD4D1},{0x5A69, 0xD4E9},{0x5A6A, 0xB0FD},{0x5A6C, 0xD4D9},{0x5A6D, 0xD4D5},{0x5A70, 0xD4E8},{0x5A77, 0xB440},
- {0x5A78, 0xD8BB},{0x5A7A, 0xD8B8},{0x5A7B, 0xD8C9},{0x5A7C, 0xD8BD},{0x5A7D, 0xD8CA},{0x5A7F, 0xB442},{0x5A83, 0xD8C6},{0x5A84, 0xD8C3},
- {0x5A8A, 0xD8C4},{0x5A8B, 0xD8C7},{0x5A8C, 0xD8CB},{0x5A8E, 0xD4E3},{0x5A8F, 0xD8CD},{0x5A90, 0xDD47},{0x5A92, 0xB443},{0x5A93, 0xD8CE},
- {0x5A94, 0xD8B6},{0x5A95, 0xD8C0},{0x5A97, 0xD8C5},{0x5A9A, 0xB441},{0x5A9B, 0xB444},{0x5A9C, 0xD8CC},{0x5A9D, 0xD8CF},{0x5A9E, 0xD8BA},
- {0x5A9F, 0xD8B7},{0x5AA2, 0xD8B9},{0x5AA5, 0xD8BE},{0x5AA6, 0xD8BC},{0x5AA7, 0xB445},{0x5AA9, 0xD8C8},{0x5AAC, 0xD8BF},{0x5AAE, 0xD8C1},
- {0x5AAF, 0xD8B5},{0x5AB0, 0xDCFA},{0x5AB1, 0xDCF8},{0x5AB2, 0xB742},{0x5AB3, 0xB740},{0x5AB4, 0xDD43},{0x5AB5, 0xDCF9},{0x5AB6, 0xDD44},
- {0x5AB7, 0xDD40},{0x5AB8, 0xDCF7},{0x5AB9, 0xDD46},{0x5ABA, 0xDCF6},{0x5ABB, 0xDCFD},{0x5ABC, 0xB6FE},{0x5ABD, 0xB6FD},{0x5ABE, 0xB6FC},
- {0x5ABF, 0xDCFB},{0x5AC0, 0xDD41},{0x5AC1, 0xB6F9},{0x5AC2, 0xB741},{0x5AC4, 0xDCF4},{0x5AC6, 0xDCFE},{0x5AC7, 0xDCF3},{0x5AC8, 0xDCFC},
- {0x5AC9, 0xB6FA},{0x5ACA, 0xDD42},{0x5ACB, 0xDCF5},{0x5ACC, 0xB6FB},{0x5ACD, 0xDD45},{0x5AD5, 0xE16E},{0x5AD6, 0xB9E2},{0x5AD7, 0xB9E1},
- {0x5AD8, 0xB9E3},{0x5AD9, 0xE17A},{0x5ADA, 0xE170},{0x5ADB, 0xE176},{0x5ADC, 0xE16B},{0x5ADD, 0xE179},{0x5ADE, 0xE178},{0x5ADF, 0xE17C},
- {0x5AE0, 0xE175},{0x5AE1, 0xB9DE},{0x5AE2, 0xE174},{0x5AE3, 0xB9E4},{0x5AE5, 0xE16D},{0x5AE6, 0xB9DF},{0x5AE8, 0xE17B},{0x5AE9, 0xB9E0},
- {0x5AEA, 0xE16F},{0x5AEB, 0xE172},{0x5AEC, 0xE177},{0x5AED, 0xE171},{0x5AEE, 0xE16C},{0x5AF3, 0xE173},{0x5AF4, 0xE555},{0x5AF5, 0xBC61},
- {0x5AF6, 0xE558},{0x5AF7, 0xE557},{0x5AF8, 0xE55A},{0x5AF9, 0xE55C},{0x5AFB, 0xBC5F},{0x5AFD, 0xE556},{0x5AFF, 0xE554},{0x5B01, 0xE55D},
- {0x5B02, 0xE55B},{0x5B03, 0xE559},{0x5B05, 0xE55F},{0x5B07, 0xE55E},{0x5B08, 0xBC63},{0x5B09, 0xBC5E},{0x5B0B, 0xBC60},{0x5B0C, 0xBC62},
- {0x5B0F, 0xE560},{0x5B10, 0xE957},{0x5B13, 0xE956},{0x5B14, 0xE955},{0x5B16, 0xE958},{0x5B17, 0xE951},{0x5B19, 0xE952},{0x5B1A, 0xE95A},
- {0x5B1B, 0xE953},{0x5B1D, 0xBEC5},{0x5B1E, 0xE95C},{0x5B20, 0xE95B},{0x5B21, 0xE954},{0x5B23, 0xECD1},{0x5B24, 0xC0A8},{0x5B25, 0xECCF},
- {0x5B26, 0xECD4},{0x5B27, 0xECD3},{0x5B28, 0xE959},{0x5B2A, 0xC0A7},{0x5B2C, 0xECD2},{0x5B2D, 0xECCE},{0x5B2E, 0xECD6},{0x5B2F, 0xECD5},
- {0x5B30, 0xC0A6},{0x5B32, 0xECD0},{0x5B34, 0xBEC6},{0x5B38, 0xC254},{0x5B3C, 0xEFC1},{0x5B3D, 0xF1FA},{0x5B3E, 0xF1FB},{0x5B3F, 0xF1FC},
- {0x5B40, 0xC45C},{0x5B43, 0xC45D},{0x5B45, 0xF443},{0x5B47, 0xF5C8},{0x5B48, 0xF5C7},{0x5B4B, 0xF6DB},{0x5B4C, 0xF6DC},{0x5B4D, 0xF7D5},
- {0x5B4E, 0xF8A7},{0x5B50, 0xA46C},{0x5B51, 0xA46D},{0x5B53, 0xA46E},{0x5B54, 0xA4D5},{0x5B55, 0xA5A5},{0x5B56, 0xC9D3},{0x5B57, 0xA672},
- {0x5B58, 0xA673},{0x5B5A, 0xA7B7},{0x5B5B, 0xA7B8},{0x5B5C, 0xA7B6},{0x5B5D, 0xA7B5},{0x5B5F, 0xA973},{0x5B62, 0xCC55},{0x5B63, 0xA975},
- {0x5B64, 0xA974},{0x5B65, 0xCC56},{0x5B69, 0xABC4},{0x5B6B, 0xAE5D},{0x5B6C, 0xD165},{0x5B6E, 0xD4F0},{0x5B70, 0xB145},{0x5B71, 0xB447},
- {0x5B72, 0xD4EF},{0x5B73, 0xB446},{0x5B75, 0xB9E5},{0x5B77, 0xE17D},{0x5B78, 0xBEC7},{0x5B7A, 0xC0A9},{0x5B7B, 0xECD7},{0x5B7D, 0xC45E},
- {0x5B7F, 0xC570},{0x5B81, 0xC972},{0x5B83, 0xA5A6},{0x5B84, 0xC973},{0x5B85, 0xA676},{0x5B87, 0xA674},{0x5B88, 0xA675},{0x5B89, 0xA677},
- {0x5B8B, 0xA7BA},{0x5B8C, 0xA7B9},{0x5B8E, 0xCABC},{0x5B8F, 0xA7BB},{0x5B92, 0xCABD},{0x5B93, 0xCC57},{0x5B95, 0xCC58},{0x5B97, 0xA976},
- {0x5B98, 0xA978},{0x5B99, 0xA97A},{0x5B9A, 0xA977},{0x5B9B, 0xA97B},{0x5B9C, 0xA979},{0x5BA2, 0xABC8},{0x5BA3, 0xABC5},{0x5BA4, 0xABC7},
- {0x5BA5, 0xABC9},{0x5BA6, 0xABC6},{0x5BA7, 0xD166},{0x5BA8, 0xCE77},{0x5BAC, 0xD168},{0x5BAD, 0xD167},{0x5BAE, 0xAE63},{0x5BB0, 0xAE5F},
- {0x5BB3, 0xAE60},{0x5BB4, 0xAE62},{0x5BB5, 0xAE64},{0x5BB6, 0xAE61},{0x5BB8, 0xAE66},{0x5BB9, 0xAE65},{0x5BBF, 0xB14A},{0x5BC0, 0xD4F2},
- {0x5BC1, 0xD4F1},{0x5BC2, 0xB149},{0x5BC4, 0xB148},{0x5BC5, 0xB147},{0x5BC6, 0xB14B},{0x5BC7, 0xB146},{0x5BCA, 0xD8D5},{0x5BCB, 0xD8D2},
- {0x5BCC, 0xB449},{0x5BCD, 0xD8D1},{0x5BCE, 0xD8D6},{0x5BD0, 0xB44B},{0x5BD1, 0xD8D4},{0x5BD2, 0xB448},{0x5BD3, 0xB44A},{0x5BD4, 0xD8D3},
- {0x5BD6, 0xDD48},{0x5BD8, 0xDD49},{0x5BD9, 0xDD4A},{0x5BDE, 0xB9E6},{0x5BDF, 0xB9EE},{0x5BE0, 0xE17E},{0x5BE1, 0xB9E8},{0x5BE2, 0xB9EC},
- {0x5BE3, 0xE1A1},{0x5BE4, 0xB9ED},{0x5BE5, 0xB9E9},{0x5BE6, 0xB9EA},{0x5BE7, 0xB9E7},{0x5BE8, 0xB9EB},{0x5BE9, 0xBC66},{0x5BEA, 0xD8D0},
- {0x5BEB, 0xBC67},{0x5BEC, 0xBC65},{0x5BEE, 0xBC64},{0x5BEF, 0xE95D},{0x5BF0, 0xBEC8},{0x5BF1, 0xECD8},{0x5BF2, 0xECD9},{0x5BF5, 0xC364},
- {0x5BF6, 0xC45F},{0x5BF8, 0xA46F},{0x5BFA, 0xA678},{0x5C01, 0xABCA},{0x5C03, 0xD169},{0x5C04, 0xAE67},{0x5C07, 0xB14E},{0x5C08, 0xB14D},
- {0x5C09, 0xB14C},{0x5C0A, 0xB44C},{0x5C0B, 0xB44D},{0x5C0C, 0xD8D7},{0x5C0D, 0xB9EF},{0x5C0E, 0xBEC9},{0x5C0F, 0xA470},{0x5C10, 0xC95C},
- {0x5C11, 0xA4D6},{0x5C12, 0xC974},{0x5C15, 0xC9D4},{0x5C16, 0xA679},{0x5C1A, 0xA97C},{0x5C1F, 0xDD4B},{0x5C22, 0xA471},{0x5C24, 0xA4D7},
- {0x5C25, 0xC9D5},{0x5C28, 0xCABE},{0x5C2A, 0xCABF},{0x5C2C, 0xA7BC},{0x5C30, 0xD8D8},{0x5C31, 0xB44E},{0x5C33, 0xDD4C},{0x5C37, 0xC0AA},
- {0x5C38, 0xA472},{0x5C39, 0xA4A8},{0x5C3A, 0xA4D8},{0x5C3B, 0xC975},{0x5C3C, 0xA5A7},{0x5C3E, 0xA7C0},{0x5C3F, 0xA7BF},{0x5C40, 0xA7BD},
- {0x5C41, 0xA7BE},{0x5C44, 0xCC59},{0x5C45, 0xA97E},{0x5C46, 0xA9A1},{0x5C47, 0xCC5A},{0x5C48, 0xA97D},{0x5C4B, 0xABCE},{0x5C4C, 0xCE78},
- {0x5C4D, 0xABCD},{0x5C4E, 0xABCB},{0x5C4F, 0xABCC},{0x5C50, 0xAE6A},{0x5C51, 0xAE68},{0x5C54, 0xD16B},{0x5C55, 0xAE69},{0x5C56, 0xD16A},
- {0x5C58, 0xAE5E},{0x5C59, 0xD4F3},{0x5C5C, 0xB150},{0x5C5D, 0xB151},{0x5C60, 0xB14F},{0x5C62, 0xB9F0},{0x5C63, 0xE1A2},{0x5C64, 0xBC68},
- {0x5C65, 0xBC69},{0x5C67, 0xE561},{0x5C68, 0xC0AB},{0x5C69, 0xEFC2},{0x5C6A, 0xEFC3},{0x5C6C, 0xC4DD},{0x5C6D, 0xF8A8},{0x5C6E, 0xC94B},
- {0x5C6F, 0xA4D9},{0x5C71, 0xA473},{0x5C73, 0xC977},{0x5C74, 0xC976},{0x5C79, 0xA67A},{0x5C7A, 0xC9D7},{0x5C7B, 0xC9D8},{0x5C7C, 0xC9D6},
- {0x5C7E, 0xC9D9},{0x5C86, 0xCAC7},{0x5C88, 0xCAC2},{0x5C89, 0xCAC4},{0x5C8A, 0xCAC6},{0x5C8B, 0xCAC3},{0x5C8C, 0xA7C4},{0x5C8D, 0xCAC0},
- {0x5C8F, 0xCAC1},{0x5C90, 0xA7C1},{0x5C91, 0xA7C2},{0x5C92, 0xCAC5},{0x5C93, 0xCAC8},{0x5C94, 0xA7C3},{0x5C95, 0xCAC9},{0x5C9D, 0xCC68},
- {0x5C9F, 0xCC62},{0x5CA0, 0xCC5D},{0x5CA1, 0xA9A3},{0x5CA2, 0xCC65},{0x5CA3, 0xCC63},{0x5CA4, 0xCC5C},{0x5CA5, 0xCC69},{0x5CA6, 0xCC6C},
- {0x5CA7, 0xCC67},{0x5CA8, 0xCC60},{0x5CA9, 0xA9A5},{0x5CAA, 0xCC66},{0x5CAB, 0xA9A6},{0x5CAC, 0xCC61},{0x5CAD, 0xCC64},{0x5CAE, 0xCC5B},
- {0x5CAF, 0xCC5F},{0x5CB0, 0xCC6B},{0x5CB1, 0xA9A7},{0x5CB3, 0xA9A8},{0x5CB5, 0xCC5E},{0x5CB6, 0xCC6A},{0x5CB7, 0xA9A2},{0x5CB8, 0xA9A4},
- {0x5CC6, 0xCEAB},{0x5CC7, 0xCEA4},{0x5CC8, 0xCEAA},{0x5CC9, 0xCEA3},{0x5CCA, 0xCEA5},{0x5CCB, 0xCE7D},{0x5CCC, 0xCE7B},{0x5CCE, 0xCEAC},
- {0x5CCF, 0xCEA9},{0x5CD0, 0xCE79},{0x5CD2, 0xABD0},{0x5CD3, 0xCEA7},{0x5CD4, 0xCEA8},{0x5CD6, 0xCEA6},{0x5CD7, 0xCE7C},{0x5CD8, 0xCE7A},
- {0x5CD9, 0xABCF},{0x5CDA, 0xCEA2},{0x5CDB, 0xCE7E},{0x5CDE, 0xCEA1},{0x5CDF, 0xCEAD},{0x5CE8, 0xAE6F},{0x5CEA, 0xAE6E},{0x5CEC, 0xD16C},
- {0x5CED, 0xAE6B},{0x5CEE, 0xD16E},{0x5CF0, 0xAE70},{0x5CF1, 0xD16F},{0x5CF4, 0xAE73},{0x5CF6, 0xAE71},{0x5CF7, 0xD170},{0x5CF8, 0xCEAE},
- {0x5CF9, 0xD172},{0x5CFB, 0xAE6D},{0x5CFD, 0xAE6C},{0x5CFF, 0xD16D},{0x5D00, 0xD171},{0x5D01, 0xAE72},{0x5D06, 0xB153},{0x5D07, 0xB152},
- {0x5D0B, 0xD4F5},{0x5D0C, 0xD4F9},{0x5D0D, 0xD4FB},{0x5D0E, 0xB154},{0x5D0F, 0xD4FE},{0x5D11, 0xB158},{0x5D12, 0xD541},{0x5D14, 0xB15A},
- {0x5D16, 0xB156},{0x5D17, 0xB15E},{0x5D19, 0xB15B},{0x5D1A, 0xD4F7},{0x5D1B, 0xB155},{0x5D1D, 0xD4F6},{0x5D1E, 0xD4F4},{0x5D1F, 0xD543},
- {0x5D20, 0xD4F8},{0x5D22, 0xB157},{0x5D23, 0xD542},{0x5D24, 0xB15C},{0x5D25, 0xD4FD},{0x5D26, 0xD4FC},{0x5D27, 0xB15D},{0x5D28, 0xD4FA},
- {0x5D29, 0xB159},{0x5D2E, 0xD544},{0x5D30, 0xD540},{0x5D31, 0xD8E7},{0x5D32, 0xD8EE},{0x5D33, 0xD8E3},{0x5D34, 0xB451},{0x5D35, 0xD8DF},
- {0x5D36, 0xD8EF},{0x5D37, 0xD8D9},{0x5D38, 0xD8EC},{0x5D39, 0xD8EA},{0x5D3A, 0xD8E4},{0x5D3C, 0xD8ED},{0x5D3D, 0xD8E6},{0x5D3F, 0xD8DE},
- {0x5D40, 0xD8F0},{0x5D41, 0xD8DC},{0x5D42, 0xD8E9},{0x5D43, 0xD8DA},{0x5D45, 0xD8F1},{0x5D47, 0xB452},{0x5D49, 0xD8EB},{0x5D4A, 0xDD4F},
- {0x5D4B, 0xD8DD},{0x5D4C, 0xB44F},{0x5D4E, 0xD8E1},{0x5D50, 0xB450},{0x5D51, 0xD8E0},{0x5D52, 0xD8E5},{0x5D55, 0xD8E2},{0x5D59, 0xD8E8},
- {0x5D5E, 0xDD53},{0x5D62, 0xDD56},{0x5D63, 0xDD4E},{0x5D65, 0xDD50},{0x5D67, 0xDD55},{0x5D68, 0xDD54},{0x5D69, 0xB743},{0x5D6B, 0xD8DB},
- {0x5D6C, 0xDD52},{0x5D6F, 0xB744},{0x5D71, 0xDD4D},{0x5D72, 0xDD51},{0x5D77, 0xE1A9},{0x5D79, 0xE1B0},{0x5D7A, 0xE1A7},{0x5D7C, 0xE1AE},
- {0x5D7D, 0xE1A5},{0x5D7E, 0xE1AD},{0x5D7F, 0xE1B1},{0x5D80, 0xE1A4},{0x5D81, 0xE1A8},{0x5D82, 0xE1A3},{0x5D84, 0xB9F1},{0x5D86, 0xE1A6},
- {0x5D87, 0xB9F2},{0x5D88, 0xE1AC},{0x5D89, 0xE1AB},{0x5D8A, 0xE1AA},{0x5D8D, 0xE1AF},{0x5D92, 0xE565},{0x5D93, 0xE567},{0x5D94, 0xBC6B},
- {0x5D95, 0xE568},{0x5D97, 0xE563},{0x5D99, 0xE562},{0x5D9A, 0xE56C},{0x5D9C, 0xE56A},{0x5D9D, 0xBC6A},{0x5D9E, 0xE56D},{0x5D9F, 0xE564},
- {0x5DA0, 0xE569},{0x5DA1, 0xE56B},{0x5DA2, 0xE566},{0x5DA7, 0xE961},{0x5DA8, 0xE966},{0x5DA9, 0xE960},{0x5DAA, 0xE965},{0x5DAC, 0xE95E},
- {0x5DAD, 0xE968},{0x5DAE, 0xE964},{0x5DAF, 0xE969},{0x5DB0, 0xE963},{0x5DB1, 0xE95F},{0x5DB2, 0xE967},{0x5DB4, 0xE96A},{0x5DB5, 0xE962},
- {0x5DB7, 0xECDA},{0x5DB8, 0xC0AF},{0x5DBA, 0xC0AD},{0x5DBC, 0xC0AC},{0x5DBD, 0xC0AE},{0x5DC0, 0xEFC4},{0x5DC2, 0xF172},{0x5DC3, 0xF1FD},
- {0x5DC6, 0xF444},{0x5DC7, 0xF445},{0x5DC9, 0xC460},{0x5DCB, 0xF5C9},{0x5DCD, 0xC4DE},{0x5DCF, 0xF5CA},{0x5DD1, 0xF6DE},{0x5DD2, 0xC572},
- {0x5DD4, 0xC571},{0x5DD5, 0xF6DD},{0x5DD6, 0xC5C9},{0x5DD8, 0xF7D6},{0x5DDD, 0xA474},{0x5DDE, 0xA67B},{0x5DDF, 0xC9DA},{0x5DE0, 0xCACA},
- {0x5DE1, 0xA8B5},{0x5DE2, 0xB15F},{0x5DE5, 0xA475},{0x5DE6, 0xA5AA},{0x5DE7, 0xA5A9},{0x5DE8, 0xA5A8},{0x5DEB, 0xA7C5},{0x5DEE, 0xAE74},
- {0x5DF0, 0xDD57},{0x5DF1, 0xA476},{0x5DF2, 0xA477},{0x5DF3, 0xA478},{0x5DF4, 0xA4DA},{0x5DF7, 0xABD1},{0x5DF9, 0xCEAF},{0x5DFD, 0xB453},
- {0x5DFE, 0xA479},{0x5DFF, 0xC95D},{0x5E02, 0xA5AB},{0x5E03, 0xA5AC},{0x5E04, 0xC978},{0x5E06, 0xA67C},{0x5E0A, 0xCACB},{0x5E0C, 0xA7C6},
- {0x5E0E, 0xCACC},{0x5E11, 0xA9AE},{0x5E14, 0xCC6E},{0x5E15, 0xA9AC},{0x5E16, 0xA9AB},{0x5E17, 0xCC6D},{0x5E18, 0xA9A9},{0x5E19, 0xCC6F},
- {0x5E1A, 0xA9AA},{0x5E1B, 0xA9AD},{0x5E1D, 0xABD2},{0x5E1F, 0xABD4},{0x5E20, 0xCEB3},{0x5E21, 0xCEB0},{0x5E22, 0xCEB1},{0x5E23, 0xCEB2},
- {0x5E24, 0xCEB4},{0x5E25, 0xABD3},{0x5E28, 0xD174},{0x5E29, 0xD173},{0x5E2B, 0xAE76},{0x5E2D, 0xAE75},{0x5E33, 0xB162},{0x5E34, 0xD546},
- {0x5E36, 0xB161},{0x5E37, 0xB163},{0x5E38, 0xB160},{0x5E3D, 0xB455},{0x5E3E, 0xD545},{0x5E40, 0xB456},{0x5E41, 0xD8F3},{0x5E43, 0xB457},
- {0x5E44, 0xD8F2},{0x5E45, 0xB454},{0x5E4A, 0xDD5A},{0x5E4B, 0xDD5C},{0x5E4C, 0xB745},{0x5E4D, 0xDD5B},{0x5E4E, 0xDD59},{0x5E4F, 0xDD58},
- {0x5E53, 0xE1B4},{0x5E54, 0xB9F7},{0x5E55, 0xB9F5},{0x5E57, 0xB9F6},{0x5E58, 0xE1B2},{0x5E59, 0xE1B3},{0x5E5B, 0xB9F3},{0x5E5C, 0xE571},
- {0x5E5D, 0xE56F},{0x5E5F, 0xBC6D},{0x5E60, 0xE570},{0x5E61, 0xBC6E},{0x5E62, 0xBC6C},{0x5E63, 0xB9F4},{0x5E66, 0xE96D},{0x5E67, 0xE96B},
- {0x5E68, 0xE96C},{0x5E69, 0xE56E},{0x5E6A, 0xECDC},{0x5E6B, 0xC0B0},{0x5E6C, 0xECDB},{0x5E6D, 0xEFC5},{0x5E6E, 0xEFC6},{0x5E6F, 0xE96E},
- {0x5E70, 0xF1FE},{0x5E72, 0xA47A},{0x5E73, 0xA5AD},{0x5E74, 0xA67E},{0x5E75, 0xC9DB},{0x5E76, 0xA67D},{0x5E78, 0xA9AF},{0x5E79, 0xB746},
- {0x5E7B, 0xA4DB},{0x5E7C, 0xA5AE},{0x5E7D, 0xABD5},{0x5E7E, 0xB458},{0x5E80, 0xC979},{0x5E82, 0xC97A},{0x5E84, 0xC9DC},{0x5E87, 0xA7C8},
- {0x5E88, 0xCAD0},{0x5E89, 0xCACE},{0x5E8A, 0xA7C9},{0x5E8B, 0xCACD},{0x5E8C, 0xCACF},{0x5E8D, 0xCAD1},{0x5E8F, 0xA7C7},{0x5E95, 0xA9B3},
- {0x5E96, 0xA9B4},{0x5E97, 0xA9B1},{0x5E9A, 0xA9B0},{0x5E9B, 0xCEB8},{0x5E9C, 0xA9B2},{0x5EA0, 0xABD6},{0x5EA2, 0xCEB7},{0x5EA3, 0xCEB9},
- {0x5EA4, 0xCEB6},{0x5EA5, 0xCEBA},{0x5EA6, 0xABD7},{0x5EA7, 0xAE79},{0x5EA8, 0xD175},{0x5EAA, 0xD177},{0x5EAB, 0xAE77},{0x5EAC, 0xD178},
- {0x5EAD, 0xAE78},{0x5EAE, 0xD176},{0x5EB0, 0xCEB5},{0x5EB1, 0xD547},{0x5EB2, 0xD54A},{0x5EB3, 0xD54B},{0x5EB4, 0xD548},{0x5EB5, 0xB167},
- {0x5EB6, 0xB166},{0x5EB7, 0xB164},{0x5EB8, 0xB165},{0x5EB9, 0xD549},{0x5EBE, 0xB168},{0x5EC1, 0xB45A},{0x5EC2, 0xB45B},{0x5EC4, 0xB45C},
- {0x5EC5, 0xDD5D},{0x5EC6, 0xDD5F},{0x5EC7, 0xDD61},{0x5EC8, 0xB748},{0x5EC9, 0xB747},{0x5ECA, 0xB459},{0x5ECB, 0xDD60},{0x5ECC, 0xDD5E},
- {0x5ECE, 0xE1B8},{0x5ED1, 0xE1B6},{0x5ED2, 0xE1BC},{0x5ED3, 0xB9F8},{0x5ED4, 0xE1BD},{0x5ED5, 0xE1BA},{0x5ED6, 0xB9F9},{0x5ED7, 0xE1B7},
- {0x5ED8, 0xE1B5},{0x5ED9, 0xE1BB},{0x5EDA, 0xBC70},{0x5EDB, 0xE573},{0x5EDC, 0xE1B9},{0x5EDD, 0xBC72},{0x5EDE, 0xE574},{0x5EDF, 0xBC71},
- {0x5EE0, 0xBC74},{0x5EE1, 0xE575},{0x5EE2, 0xBC6F},{0x5EE3, 0xBC73},{0x5EE5, 0xE973},{0x5EE6, 0xE971},{0x5EE7, 0xE970},{0x5EE8, 0xE972},
- {0x5EE9, 0xE96F},{0x5EEC, 0xC366},{0x5EEE, 0xF446},{0x5EEF, 0xF447},{0x5EF1, 0xF5CB},{0x5EF2, 0xF6DF},{0x5EF3, 0xC655},{0x5EF6, 0xA9B5},
- {0x5EF7, 0xA7CA},{0x5EFA, 0xABD8},{0x5EFE, 0xA47B},{0x5EFF, 0xA4DC},{0x5F01, 0xA5AF},{0x5F02, 0xC9DD},{0x5F04, 0xA7CB},{0x5F05, 0xCAD2},
- {0x5F07, 0xCEBB},{0x5F08, 0xABD9},{0x5F0A, 0xB9FA},{0x5F0B, 0xA47C},{0x5F0F, 0xA6A1},{0x5F12, 0xB749},{0x5F13, 0xA47D},{0x5F14, 0xA4DD},
- {0x5F15, 0xA4DE},{0x5F17, 0xA5B1},{0x5F18, 0xA5B0},{0x5F1A, 0xC9DE},{0x5F1B, 0xA6A2},{0x5F1D, 0xCAD3},{0x5F1F, 0xA7CC},{0x5F22, 0xCC71},
- {0x5F23, 0xCC72},{0x5F24, 0xCC73},{0x5F26, 0xA9B6},{0x5F27, 0xA9B7},{0x5F28, 0xCC70},{0x5F29, 0xA9B8},{0x5F2D, 0xABDA},{0x5F2E, 0xCEBC},
- {0x5F30, 0xD17A},{0x5F31, 0xAE7A},{0x5F33, 0xD179},{0x5F35, 0xB169},{0x5F36, 0xD54C},{0x5F37, 0xB16A},{0x5F38, 0xD54D},{0x5F3C, 0xB45D},
- {0x5F40, 0xDD62},{0x5F43, 0xE1BF},{0x5F44, 0xE1BE},{0x5F46, 0xB9FB},{0x5F48, 0xBC75},{0x5F49, 0xE576},{0x5F4A, 0xBECA},{0x5F4B, 0xE974},
- {0x5F4C, 0xC0B1},{0x5F4E, 0xC573},{0x5F4F, 0xF7D8},{0x5F54, 0xCC74},{0x5F56, 0xCEBD},{0x5F57, 0xB16B},{0x5F58, 0xD8F4},{0x5F59, 0xB74A},
- {0x5F5D, 0xC255},{0x5F62, 0xA7CE},{0x5F64, 0xA7CD},{0x5F65, 0xABDB},{0x5F67, 0xD17B},{0x5F69, 0xB16D},{0x5F6A, 0xB343},{0x5F6B, 0xB16E},
- {0x5F6C, 0xB16C},{0x5F6D, 0xB45E},{0x5F6F, 0xE1C0},{0x5F70, 0xB9FC},{0x5F71, 0xBC76},{0x5F73, 0xC94C},{0x5F74, 0xC9DF},{0x5F76, 0xCAD5},
- {0x5F77, 0xA7CF},{0x5F78, 0xCAD4},{0x5F79, 0xA7D0},{0x5F7C, 0xA9BC},{0x5F7D, 0xCC77},{0x5F7E, 0xCC76},{0x5F7F, 0xA9BB},{0x5F80, 0xA9B9},
- {0x5F81, 0xA9BA},{0x5F82, 0xCC75},{0x5F85, 0xABDD},{0x5F86, 0xCEBE},{0x5F87, 0xABE0},{0x5F88, 0xABDC},{0x5F89, 0xABE2},{0x5F8A, 0xABDE},
- {0x5F8B, 0xABDF},{0x5F8C, 0xABE1},{0x5F90, 0xAE7D},{0x5F91, 0xAE7C},{0x5F92, 0xAE7B},{0x5F96, 0xD54F},{0x5F97, 0xB16F},{0x5F98, 0xB172},
- {0x5F99, 0xB170},{0x5F9B, 0xD54E},{0x5F9C, 0xB175},{0x5F9E, 0xB171},{0x5F9F, 0xD550},{0x5FA0, 0xB174},{0x5FA1, 0xB173},{0x5FA5, 0xD8F6},
- {0x5FA6, 0xD8F5},{0x5FA8, 0xB461},{0x5FA9, 0xB45F},{0x5FAA, 0xB460},{0x5FAB, 0xD8F7},{0x5FAC, 0xB74B},{0x5FAD, 0xDD64},{0x5FAE, 0xB74C},
- {0x5FAF, 0xDD63},{0x5FB2, 0xE577},{0x5FB5, 0xBC78},{0x5FB6, 0xE1C1},{0x5FB7, 0xBC77},{0x5FB9, 0xB9FD},{0x5FBB, 0xECDE},{0x5FBC, 0xE975},
- {0x5FBD, 0xC0B2},{0x5FBE, 0xECDD},{0x5FBF, 0xF240},{0x5FC0, 0xF448},{0x5FC1, 0xF449},{0x5FC3, 0xA4DF},{0x5FC5, 0xA5B2},{0x5FC9, 0xC97B},
- {0x5FCC, 0xA7D2},{0x5FCD, 0xA7D4},{0x5FCF, 0xC9E2},{0x5FD0, 0xCAD8},{0x5FD1, 0xCAD7},{0x5FD2, 0xCAD6},{0x5FD4, 0xC9E1},{0x5FD5, 0xC9E0},
- {0x5FD6, 0xA6A4},{0x5FD7, 0xA7D3},{0x5FD8, 0xA7D1},{0x5FD9, 0xA6A3},{0x5FDD, 0xA9BD},{0x5FDE, 0xCC78},{0x5FE0, 0xA9BE},{0x5FE1, 0xCADD},
- {0x5FE3, 0xCADF},{0x5FE4, 0xCADE},{0x5FE5, 0xCC79},{0x5FE8, 0xCADA},{0x5FEA, 0xA7D8},{0x5FEB, 0xA7D6},{0x5FED, 0xCAD9},{0x5FEE, 0xCADB},
- {0x5FEF, 0xCAE1},{0x5FF1, 0xA7D5},{0x5FF3, 0xCADC},{0x5FF4, 0xCAE5},{0x5FF5, 0xA9C0},{0x5FF7, 0xCAE2},{0x5FF8, 0xA7D7},{0x5FFA, 0xCAE0},
- {0x5FFB, 0xCAE3},{0x5FFD, 0xA9BF},{0x5FFF, 0xA9C1},{0x6000, 0xCAE4},{0x6009, 0xCCAF},{0x600A, 0xCCA2},{0x600B, 0xCC7E},{0x600C, 0xCCAE},
- {0x600D, 0xCCA9},{0x600E, 0xABE7},{0x600F, 0xA9C2},{0x6010, 0xCCAA},{0x6011, 0xCCAD},{0x6012, 0xABE3},{0x6013, 0xCCAC},{0x6014, 0xA9C3},
- {0x6015, 0xA9C8},{0x6016, 0xA9C6},{0x6017, 0xCCA3},{0x6019, 0xCC7C},{0x601A, 0xCCA5},{0x601B, 0xA9CD},{0x601C, 0xCCB0},{0x601D, 0xABE4},
- {0x601E, 0xCCA6},{0x6020, 0xABE5},{0x6021, 0xA9C9},{0x6022, 0xCCA8},{0x6024, 0xCECD},{0x6025, 0xABE6},{0x6026, 0xCC7B},{0x6027, 0xA9CA},
- {0x6028, 0xABE8},{0x6029, 0xA9CB},{0x602A, 0xA9C7},{0x602B, 0xA9CC},{0x602C, 0xCCA7},{0x602D, 0xCC7A},{0x602E, 0xCCAB},{0x602F, 0xA9C4},
- {0x6032, 0xCC7D},{0x6033, 0xCCA4},{0x6034, 0xCCA1},{0x6035, 0xA9C5},{0x6037, 0xCEBF},{0x6039, 0xCEC0},{0x6040, 0xCECA},{0x6041, 0xD1A1},
- {0x6042, 0xCECB},{0x6043, 0xABEE},{0x6044, 0xCECE},{0x6045, 0xCEC4},{0x6046, 0xABED},{0x6047, 0xCEC6},{0x6049, 0xCEC7},{0x604C, 0xCEC9},
- {0x604D, 0xABE9},{0x6050, 0xAEA3},{0x6053, 0xCEC5},{0x6054, 0xCEC1},{0x6055, 0xAEA4},{0x6058, 0xCECF},{0x6059, 0xAE7E},{0x605A, 0xD17D},
- {0x605B, 0xCEC8},{0x605D, 0xD17C},{0x605E, 0xCEC3},{0x605F, 0xCECC},{0x6062, 0xABEC},{0x6063, 0xAEA1},{0x6064, 0xABF2},{0x6065, 0xAEA2},
- {0x6066, 0xCED0},{0x6067, 0xD17E},{0x6068, 0xABEB},{0x6069, 0xAEA6},{0x606A, 0xABF1},{0x606B, 0xABF0},{0x606C, 0xABEF},{0x606D, 0xAEA5},
- {0x606E, 0xCED1},{0x606F, 0xAEA7},{0x6070, 0xABEA},{0x6072, 0xCEC2},{0x607F, 0xB176},{0x6080, 0xD1A4},{0x6081, 0xD1A6},{0x6083, 0xD1A8},
- {0x6084, 0xAEA8},{0x6085, 0xAEAE},{0x6086, 0xD553},{0x6087, 0xD1AC},{0x6088, 0xD1A3},{0x6089, 0xB178},{0x608A, 0xD551},{0x608C, 0xAEAD},
- {0x608D, 0xAEAB},{0x608E, 0xD1AE},{0x6090, 0xD552},{0x6092, 0xD1A5},{0x6094, 0xAEAC},{0x6095, 0xD1A9},{0x6096, 0xAEAF},{0x6097, 0xD1AB},
- {0x609A, 0xAEAA},{0x609B, 0xD1AA},{0x609C, 0xD1AD},{0x609D, 0xD1A7},{0x609F, 0xAEA9},{0x60A0, 0xB179},{0x60A2, 0xD1A2},{0x60A3, 0xB177},
- {0x60A8, 0xB17A},{0x60B0, 0xD555},{0x60B1, 0xD55E},{0x60B2, 0xB464},{0x60B4, 0xB17C},{0x60B5, 0xB1A3},{0x60B6, 0xB465},{0x60B7, 0xD560},
- {0x60B8, 0xB1AA},{0x60B9, 0xD8F9},{0x60BA, 0xD556},{0x60BB, 0xB1A2},{0x60BC, 0xB1A5},{0x60BD, 0xB17E},{0x60BE, 0xD554},{0x60BF, 0xD562},
- {0x60C0, 0xD565},{0x60C1, 0xD949},{0x60C3, 0xD563},{0x60C4, 0xD8FD},{0x60C5, 0xB1A1},{0x60C6, 0xB1A8},{0x60C7, 0xB1AC},{0x60C8, 0xD55D},
- {0x60C9, 0xD8F8},{0x60CA, 0xD561},{0x60CB, 0xB17B},{0x60CC, 0xD8FA},{0x60CD, 0xD564},{0x60CE, 0xD8FC},{0x60CF, 0xD559},{0x60D1, 0xB462},
- {0x60D3, 0xD557},{0x60D4, 0xD558},{0x60D5, 0xB1A7},{0x60D8, 0xB1A6},{0x60D9, 0xD55B},{0x60DA, 0xB1AB},{0x60DB, 0xD55F},{0x60DC, 0xB1A4},
- {0x60DD, 0xD55C},{0x60DF, 0xB1A9},{0x60E0, 0xB466},{0x60E1, 0xB463},{0x60E2, 0xD8FB},{0x60E4, 0xD55A},{0x60E6, 0xB17D},{0x60F0, 0xB46B},
- {0x60F1, 0xB46F},{0x60F2, 0xD940},{0x60F3, 0xB751},{0x60F4, 0xB46D},{0x60F5, 0xD944},{0x60F6, 0xB471},{0x60F7, 0xDD65},{0x60F8, 0xD946},
- {0x60F9, 0xB753},{0x60FA, 0xB469},{0x60FB, 0xB46C},{0x60FC, 0xD947},{0x60FE, 0xD948},{0x60FF, 0xD94E},{0x6100, 0xB473},{0x6101, 0xB754},
- {0x6103, 0xD94A},{0x6104, 0xD94F},{0x6105, 0xD943},{0x6106, 0xB75E},{0x6108, 0xB755},{0x6109, 0xB472},{0x610A, 0xD941},{0x610B, 0xD950},
- {0x610D, 0xB75D},{0x610E, 0xB470},{0x610F, 0xB74E},{0x6110, 0xD94D},{0x6112, 0xB474},{0x6113, 0xD945},{0x6114, 0xD8FE},{0x6115, 0xB46A},
- {0x6116, 0xD942},{0x6118, 0xD94B},{0x611A, 0xB74D},{0x611B, 0xB752},{0x611C, 0xB467},{0x611D, 0xD94C},{0x611F, 0xB750},{0x6123, 0xB468},
- {0x6127, 0xB75C},{0x6128, 0xE1C3},{0x6129, 0xDD70},{0x612B, 0xDD68},{0x612C, 0xE1C2},{0x612E, 0xDD6C},{0x612F, 0xDD6E},{0x6132, 0xDD6B},
- {0x6134, 0xB75B},{0x6136, 0xDD6A},{0x6137, 0xB75F},{0x613B, 0xE1D2},{0x613E, 0xB75A},{0x613F, 0xBA40},{0x6140, 0xDD71},{0x6141, 0xE1C4},
- {0x6144, 0xB758},{0x6145, 0xDD69},{0x6146, 0xDD6D},{0x6147, 0xB9FE},{0x6148, 0xB74F},{0x6149, 0xDD66},{0x614A, 0xDD67},{0x614B, 0xBA41},
- {0x614C, 0xB757},{0x614D, 0xB759},{0x614E, 0xB756},{0x614F, 0xDD6F},{0x6152, 0xE1C8},{0x6153, 0xE1C9},{0x6154, 0xE1CE},{0x6155, 0xBC7D},
- {0x6156, 0xE1D5},{0x6158, 0xBA47},{0x615A, 0xBA46},{0x615B, 0xE1D0},{0x615D, 0xBC7C},{0x615E, 0xE1C5},{0x615F, 0xBA45},{0x6161, 0xE1D4},
- {0x6162, 0xBA43},{0x6163, 0xBA44},{0x6165, 0xE1D1},{0x6166, 0xE5AA},{0x6167, 0xBC7A},{0x6168, 0xB46E},{0x616A, 0xE1D3},{0x616B, 0xBCA3},
- {0x616C, 0xE1CB},{0x616E, 0xBC7B},{0x6170, 0xBCA2},{0x6171, 0xE1C6},{0x6172, 0xE1CA},{0x6173, 0xE1C7},{0x6174, 0xE1CD},{0x6175, 0xBA48},
- {0x6176, 0xBC79},{0x6177, 0xBA42},{0x6179, 0xE57A},{0x617A, 0xE1CF},{0x617C, 0xBCA1},{0x617E, 0xBCA4},{0x6180, 0xE1CC},{0x6182, 0xBC7E},
- {0x6183, 0xE579},{0x6189, 0xE57E},{0x618A, 0xBECE},{0x618B, 0xE578},{0x618C, 0xE9A3},{0x618D, 0xE5A9},{0x618E, 0xBCA8},{0x6190, 0xBCA6},
- {0x6191, 0xBECC},{0x6192, 0xE5A6},{0x6193, 0xE5A2},{0x6194, 0xBCAC},{0x6196, 0xE978},{0x619A, 0xBCAA},{0x619B, 0xE5A1},{0x619D, 0xE976},
- {0x619F, 0xE5A5},{0x61A1, 0xE5A8},{0x61A2, 0xE57D},{0x61A4, 0xBCAB},{0x61A7, 0xBCA5},{0x61A8, 0xE977},{0x61A9, 0xBECD},{0x61AA, 0xE5A7},
- {0x61AB, 0xBCA7},{0x61AC, 0xBCA9},{0x61AD, 0xE5A4},{0x61AE, 0xBCAD},{0x61AF, 0xE5A3},{0x61B0, 0xE57C},{0x61B1, 0xE57B},{0x61B2, 0xBECB},
- {0x61B3, 0xE5AB},{0x61B4, 0xE97A},{0x61B5, 0xECE0},{0x61B6, 0xBED0},{0x61B8, 0xE9A2},{0x61BA, 0xE97E},{0x61BC, 0xECE1},{0x61BE, 0xBED1},
- {0x61BF, 0xE9A1},{0x61C1, 0xE97C},{0x61C2, 0xC0B4},{0x61C3, 0xECDF},{0x61C5, 0xE979},{0x61C6, 0xE97B},{0x61C7, 0xC0B5},{0x61C8, 0xBED3},
- {0x61C9, 0xC0B3},{0x61CA, 0xBED2},{0x61CB, 0xC0B7},{0x61CC, 0xE97D},{0x61CD, 0xBECF},{0x61D6, 0xEFCF},{0x61D8, 0xEFC7},{0x61DE, 0xECE7},
- {0x61DF, 0xEFC8},{0x61E0, 0xECE3},{0x61E3, 0xC256},{0x61E4, 0xECE5},{0x61E5, 0xECE4},{0x61E6, 0xC0B6},{0x61E7, 0xECE2},{0x61E8, 0xECE6},
- {0x61E9, 0xEFD0},{0x61EA, 0xEFCC},{0x61EB, 0xEFCE},{0x61ED, 0xEFC9},{0x61EE, 0xEFCA},{0x61F0, 0xEFCD},{0x61F1, 0xEFCB},{0x61F2, 0xC367},
- {0x61F5, 0xC36A},{0x61F6, 0xC369},{0x61F7, 0xC368},{0x61F8, 0xC461},{0x61F9, 0xF44A},{0x61FA, 0xC462},{0x61FB, 0xF241},{0x61FC, 0xC4DF},
- {0x61FD, 0xF5CC},{0x61FE, 0xC4E0},{0x61FF, 0xC574},{0x6200, 0xC5CA},{0x6201, 0xF7D9},{0x6203, 0xF7DA},{0x6204, 0xF7DB},{0x6207, 0xF9BA},
- {0x6208, 0xA4E0},{0x6209, 0xC97C},{0x620A, 0xA5B3},{0x620C, 0xA6A6},{0x620D, 0xA6A7},{0x620E, 0xA6A5},{0x6210, 0xA6A8},{0x6211, 0xA7DA},
- {0x6212, 0xA7D9},{0x6214, 0xCCB1},{0x6215, 0xA9CF},{0x6216, 0xA9CE},{0x6219, 0xD1AF},{0x621A, 0xB1AD},{0x621B, 0xB1AE},{0x621F, 0xB475},
- {0x6220, 0xDD72},{0x6221, 0xB760},{0x6222, 0xB761},{0x6223, 0xDD74},{0x6224, 0xDD76},{0x6225, 0xDD75},{0x6227, 0xE1D7},{0x6229, 0xE1D6},
- {0x622A, 0xBA49},{0x622B, 0xE1D8},{0x622D, 0xE5AC},{0x622E, 0xBCAE},{0x6230, 0xBED4},{0x6232, 0xC0B8},{0x6233, 0xC257},{0x6234, 0xC0B9},
- {0x6236, 0xA4E1},{0x623A, 0xCAE6},{0x623D, 0xCCB2},{0x623E, 0xA9D1},{0x623F, 0xA9D0},{0x6240, 0xA9D2},{0x6241, 0xABF3},{0x6242, 0xCED2},
- {0x6243, 0xCED3},{0x6246, 0xD1B0},{0x6247, 0xAEB0},{0x6248, 0xB1AF},{0x6249, 0xB476},{0x624A, 0xD951},{0x624B, 0xA4E2},{0x624D, 0xA47E},
- {0x624E, 0xA4E3},{0x6250, 0xC97D},{0x6251, 0xA5B7},{0x6252, 0xA5B6},{0x6253, 0xA5B4},{0x6254, 0xA5B5},{0x6258, 0xA6AB},{0x6259, 0xC9E9},
- {0x625A, 0xC9EB},{0x625B, 0xA6AA},{0x625C, 0xC9E3},{0x625E, 0xC9E4},{0x6260, 0xC9EA},{0x6261, 0xC9E6},{0x6262, 0xC9E8},{0x6263, 0xA6A9},
- {0x6264, 0xC9E5},{0x6265, 0xC9EC},{0x6266, 0xC9E7},{0x626D, 0xA7E1},{0x626E, 0xA7EA},{0x626F, 0xA7E8},{0x6270, 0xCAF0},{0x6271, 0xCAED},
- {0x6272, 0xCAF5},{0x6273, 0xA7E6},{0x6274, 0xCAF6},{0x6276, 0xA7DF},{0x6277, 0xCAF3},{0x6279, 0xA7E5},{0x627A, 0xCAEF},{0x627B, 0xCAEE},
- {0x627C, 0xA7E3},{0x627D, 0xCAF4},{0x627E, 0xA7E4},{0x627F, 0xA9D3},{0x6280, 0xA7DE},{0x6281, 0xCAF1},{0x6283, 0xCAE7},{0x6284, 0xA7DB},
- {0x6286, 0xA7EE},{0x6287, 0xCAEC},{0x6288, 0xCAF2},{0x6289, 0xA7E0},{0x628A, 0xA7E2},{0x628C, 0xCAE8},{0x628E, 0xCAE9},{0x628F, 0xCAEA},
- {0x6291, 0xA7ED},{0x6292, 0xA7E7},{0x6293, 0xA7EC},{0x6294, 0xCAEB},{0x6295, 0xA7EB},{0x6296, 0xA7DD},{0x6297, 0xA7DC},{0x6298, 0xA7E9},
- {0x62A8, 0xA9E1},{0x62A9, 0xCCBE},{0x62AA, 0xCCB7},{0x62AB, 0xA9DC},{0x62AC, 0xA9EF},{0x62AD, 0xCCB3},{0x62AE, 0xCCBA},{0x62AF, 0xCCBC},
- {0x62B0, 0xCCBF},{0x62B1, 0xA9EA},{0x62B3, 0xCCBB},{0x62B4, 0xCCB4},{0x62B5, 0xA9E8},{0x62B6, 0xCCB8},{0x62B8, 0xCCC0},{0x62B9, 0xA9D9},
- {0x62BB, 0xCCBD},{0x62BC, 0xA9E3},{0x62BD, 0xA9E2},{0x62BE, 0xCCB6},{0x62BF, 0xA9D7},{0x62C2, 0xA9D8},{0x62C4, 0xA9D6},{0x62C6, 0xA9EE},
- {0x62C7, 0xA9E6},{0x62C8, 0xA9E0},{0x62C9, 0xA9D4},{0x62CA, 0xCCB9},{0x62CB, 0xA9DF},{0x62CC, 0xA9D5},{0x62CD, 0xA9E7},{0x62CE, 0xA9F0},
- {0x62CF, 0xCED4},{0x62D0, 0xA9E4},{0x62D1, 0xCCB5},{0x62D2, 0xA9DA},{0x62D3, 0xA9DD},{0x62D4, 0xA9DE},{0x62D6, 0xA9EC},{0x62D7, 0xA9ED},
- {0x62D8, 0xA9EB},{0x62D9, 0xA9E5},{0x62DA, 0xA9E9},{0x62DB, 0xA9DB},{0x62DC, 0xABF4},{0x62EB, 0xCEDA},{0x62EC, 0xAC41},{0x62ED, 0xABF8},
- {0x62EE, 0xABFA},{0x62EF, 0xAC40},{0x62F0, 0xCEE6},{0x62F1, 0xABFD},{0x62F2, 0xD1B1},{0x62F3, 0xAEB1},{0x62F4, 0xAC43},{0x62F5, 0xCED7},
- {0x62F6, 0xCEDF},{0x62F7, 0xABFE},{0x62F8, 0xCEDE},{0x62F9, 0xCEDB},{0x62FA, 0xCEE3},{0x62FB, 0xCEE5},{0x62FC, 0xABF7},{0x62FD, 0xABFB},
- {0x62FE, 0xAC42},{0x62FF, 0xAEB3},{0x6300, 0xCEE0},{0x6301, 0xABF9},{0x6302, 0xAC45},{0x6303, 0xCED9},{0x6307, 0xABFC},{0x6308, 0xAEB2},
- {0x6309, 0xABF6},{0x630B, 0xCED6},{0x630C, 0xCEDD},{0x630D, 0xCED5},{0x630E, 0xCED8},{0x630F, 0xCEDC},{0x6310, 0xD1B2},{0x6311, 0xAC44},
- {0x6313, 0xCEE1},{0x6314, 0xCEE2},{0x6315, 0xCEE4},{0x6316, 0xABF5},{0x6328, 0xAEC1},{0x6329, 0xD1BE},{0x632A, 0xAEBF},{0x632B, 0xAEC0},
- {0x632C, 0xD1B4},{0x632D, 0xD1C4},{0x632F, 0xAEB6},{0x6332, 0xD566},{0x6333, 0xD1C6},{0x6334, 0xD1C0},{0x6336, 0xD1B7},{0x6338, 0xD1C9},
- {0x6339, 0xD1BA},{0x633A, 0xAEBC},{0x633B, 0xD57D},{0x633C, 0xD1BD},{0x633D, 0xAEBE},{0x633E, 0xAEB5},{0x6340, 0xD1CB},{0x6341, 0xD1BF},
- {0x6342, 0xAEB8},{0x6343, 0xD1B8},{0x6344, 0xD1B5},{0x6345, 0xD1B6},{0x6346, 0xAEB9},{0x6347, 0xD1C5},{0x6348, 0xD1CC},{0x6349, 0xAEBB},
- {0x634A, 0xD1BC},{0x634B, 0xD1BB},{0x634C, 0xAEC3},{0x634D, 0xAEC2},{0x634E, 0xAEB4},{0x634F, 0xAEBA},{0x6350, 0xAEBD},{0x6351, 0xD1C8},
- {0x6354, 0xD1C2},{0x6355, 0xAEB7},{0x6356, 0xD1B3},{0x6357, 0xD1CA},{0x6358, 0xD1C1},{0x6359, 0xD1C3},{0x635A, 0xD1C7},{0x6365, 0xD567},
- {0x6367, 0xB1B7},{0x6368, 0xB1CB},{0x6369, 0xB1CA},{0x636B, 0xB1BF},{0x636D, 0xD579},{0x636E, 0xD575},{0x636F, 0xD572},{0x6370, 0xD5A6},
- {0x6371, 0xB1BA},{0x6372, 0xB1B2},{0x6375, 0xD577},{0x6376, 0xB4A8},{0x6377, 0xB1B6},{0x6378, 0xD5A1},{0x637A, 0xB1CC},{0x637B, 0xB1C9},
- {0x637C, 0xD57B},{0x637D, 0xD56A},{0x6380, 0xB1C8},{0x6381, 0xD5A3},{0x6382, 0xD569},{0x6383, 0xB1BD},{0x6384, 0xB1C1},{0x6385, 0xD5A2},
- {0x6387, 0xD573},{0x6388, 0xB1C2},{0x6389, 0xB1BC},{0x638A, 0xD568},{0x638C, 0xB478},{0x638D, 0xD5A5},{0x638E, 0xD571},{0x638F, 0xB1C7},
- {0x6390, 0xD574},{0x6391, 0xD5A4},{0x6392, 0xB1C6},{0x6394, 0xD952},{0x6396, 0xB1B3},{0x6397, 0xD56F},{0x6398, 0xB1B8},{0x6399, 0xB1C3},
- {0x639B, 0xB1BE},{0x639C, 0xD578},{0x639D, 0xD56E},{0x639E, 0xD56C},{0x639F, 0xD57E},{0x63A0, 0xB1B0},{0x63A1, 0xB1C4},{0x63A2, 0xB1B4},
- {0x63A3, 0xB477},{0x63A4, 0xD57C},{0x63A5, 0xB1B5},{0x63A7, 0xB1B1},{0x63A8, 0xB1C0},{0x63A9, 0xB1BB},{0x63AA, 0xB1B9},{0x63AB, 0xD570},
- {0x63AC, 0xB1C5},{0x63AD, 0xD56D},{0x63AE, 0xD57A},{0x63AF, 0xD576},{0x63B0, 0xD954},{0x63B1, 0xD953},{0x63BD, 0xD56B},{0x63BE, 0xD964},
- {0x63C0, 0xB47A},{0x63C2, 0xD96A},{0x63C3, 0xD959},{0x63C4, 0xD967},{0x63C5, 0xDD77},{0x63C6, 0xB47D},{0x63C7, 0xD96B},{0x63C8, 0xD96E},
- {0x63C9, 0xB47C},{0x63CA, 0xD95C},{0x63CB, 0xD96D},{0x63CC, 0xD96C},{0x63CD, 0xB47E},{0x63CE, 0xD955},{0x63CF, 0xB479},{0x63D0, 0xB4A3},
- {0x63D2, 0xB4A1},{0x63D3, 0xD969},{0x63D5, 0xD95F},{0x63D6, 0xB4A5},{0x63D7, 0xD970},{0x63D8, 0xD968},{0x63D9, 0xD971},{0x63DA, 0xB4AD},
- {0x63DB, 0xB4AB},{0x63DC, 0xD966},{0x63DD, 0xD965},{0x63DF, 0xD963},{0x63E0, 0xD95D},{0x63E1, 0xB4A4},{0x63E3, 0xB4A2},{0x63E4, 0xD1B9},
- {0x63E5, 0xD956},{0x63E7, 0xDDB7},{0x63E8, 0xD957},{0x63E9, 0xB47B},{0x63EA, 0xB4AA},{0x63EB, 0xDD79},{0x63ED, 0xB4A6},{0x63EE, 0xB4A7},
- {0x63EF, 0xD958},{0x63F0, 0xD96F},{0x63F1, 0xDD78},{0x63F2, 0xD960},{0x63F3, 0xD95B},{0x63F4, 0xB4A9},{0x63F5, 0xD961},{0x63F6, 0xD95E},
- {0x63F9, 0xB4AE},{0x6406, 0xB770},{0x6409, 0xDD7C},{0x640A, 0xDDB1},{0x640B, 0xDDB6},{0x640C, 0xDDAA},{0x640D, 0xB76C},{0x640E, 0xDDBB},
- {0x640F, 0xB769},{0x6410, 0xDD7A},{0x6412, 0xDD7B},{0x6413, 0xB762},{0x6414, 0xB76B},{0x6415, 0xDDA4},{0x6416, 0xB76E},{0x6417, 0xB76F},
- {0x6418, 0xDDA5},{0x641A, 0xDDB2},{0x641B, 0xDDB8},{0x641C, 0xB76A},{0x641E, 0xB764},{0x641F, 0xDDA3},{0x6420, 0xDD7D},{0x6421, 0xDDBA},
- {0x6422, 0xDDA8},{0x6423, 0xDDA9},{0x6424, 0xDD7E},{0x6425, 0xDDB4},{0x6426, 0xDDAB},{0x6427, 0xDDB5},{0x6428, 0xDDAD},{0x642A, 0xB765},
- {0x642B, 0xE1D9},{0x642C, 0xB768},{0x642D, 0xB766},{0x642E, 0xDDB9},{0x642F, 0xDDB0},{0x6430, 0xDDAC},{0x6433, 0xDDA1},{0x6434, 0xBA53},
- {0x6435, 0xDDAF},{0x6436, 0xB76D},{0x6437, 0xDDA7},{0x6439, 0xDDA6},{0x643D, 0xB767},{0x643E, 0xB763},{0x643F, 0xE1EE},{0x6440, 0xDDB3},
- {0x6441, 0xDDAE},{0x6443, 0xDDA2},{0x644B, 0xE1E9},{0x644D, 0xE1DA},{0x644E, 0xE1E5},{0x6450, 0xE1EC},{0x6451, 0xBA51},{0x6452, 0xB4AC},
- {0x6453, 0xE1EA},{0x6454, 0xBA4C},{0x6458, 0xBA4B},{0x6459, 0xE1F1},{0x645B, 0xE1DB},{0x645C, 0xE1E8},{0x645D, 0xE1DC},{0x645E, 0xE1E7},
- {0x645F, 0xBA4F},{0x6460, 0xE1EB},{0x6461, 0xD962},{0x6465, 0xE1F2},{0x6466, 0xE1E3},{0x6467, 0xBA52},{0x6468, 0xE5BA},{0x6469, 0xBCAF},
- {0x646B, 0xE1F0},{0x646C, 0xE1EF},{0x646D, 0xBA54},{0x646E, 0xE5AD},{0x646F, 0xBCB0},{0x6470, 0xE5AE},{0x6472, 0xE1DF},{0x6473, 0xE1E0},
- {0x6474, 0xE1DD},{0x6475, 0xE1E2},{0x6476, 0xE1DE},{0x6477, 0xE1F3},{0x6478, 0xBA4E},{0x6479, 0xBCB1},{0x647A, 0xBA50},{0x647B, 0xBA55},
- {0x647D, 0xE1E1},{0x647F, 0xE1ED},{0x6482, 0xE1E6},{0x6485, 0xE5B1},{0x6487, 0xBA4A},{0x6488, 0xBCB4},{0x6489, 0xE9AA},{0x648A, 0xE5B6},
- {0x648B, 0xE5B5},{0x648C, 0xE5B7},{0x648F, 0xE5B4},{0x6490, 0xBCB5},{0x6492, 0xBCBB},{0x6493, 0xBCB8},{0x6495, 0xBCB9},{0x6496, 0xE5AF},
- {0x6497, 0xE5B2},{0x6498, 0xE5BC},{0x6499, 0xBCC1},{0x649A, 0xBCBF},{0x649C, 0xE5B3},{0x649D, 0xD95A},{0x649E, 0xBCB2},{0x649F, 0xE5B9},
- {0x64A0, 0xE5B0},{0x64A2, 0xBCC2},{0x64A3, 0xE5B8},{0x64A4, 0xBA4D},{0x64A5, 0xBCB7},{0x64A6, 0xE1E4},{0x64A9, 0xBCBA},{0x64AB, 0xBCBE},
- {0x64AC, 0xBCC0},{0x64AD, 0xBCBD},{0x64AE, 0xBCBC},{0x64B0, 0xBCB6},{0x64B1, 0xE5BB},{0x64B2, 0xBCB3},{0x64B3, 0xBCC3},{0x64BB, 0xBED8},
- {0x64BC, 0xBED9},{0x64BD, 0xE9A9},{0x64BE, 0xBEE2},{0x64BF, 0xBEDF},{0x64C1, 0xBED6},{0x64C2, 0xBEDD},{0x64C3, 0xE9AB},{0x64C4, 0xBEDB},
- {0x64C5, 0xBED5},{0x64C7, 0xBEDC},{0x64C9, 0xE9A8},{0x64CA, 0xC0BB},{0x64CB, 0xBED7},{0x64CD, 0xBEDE},{0x64CE, 0xC0BA},{0x64CF, 0xE9A7},
- {0x64D0, 0xE9A6},{0x64D2, 0xBEE0},{0x64D4, 0xBEE1},{0x64D6, 0xE9A5},{0x64D7, 0xE9A4},{0x64D8, 0xC0BC},{0x64D9, 0xE9AE},{0x64DA, 0xBEDA},
- {0x64DB, 0xE9AC},{0x64E0, 0xC0BD},{0x64E2, 0xC0C2},{0x64E3, 0xECEA},{0x64E4, 0xECEC},{0x64E6, 0xC0BF},{0x64E8, 0xECED},{0x64E9, 0xECE9},
- {0x64EB, 0xECEB},{0x64EC, 0xC0C0},{0x64ED, 0xC0C3},{0x64EF, 0xECE8},{0x64F0, 0xC0BE},{0x64F1, 0xC0C1},{0x64F2, 0xC259},{0x64F3, 0xE9AD},
- {0x64F4, 0xC258},{0x64F7, 0xC25E},{0x64F8, 0xEFD4},{0x64FA, 0xC25C},{0x64FB, 0xC25D},{0x64FC, 0xEFD7},{0x64FD, 0xEFD3},{0x64FE, 0xC25A},
- {0x64FF, 0xEFD1},{0x6500, 0xC36B},{0x6501, 0xEFD5},{0x6503, 0xEFD6},{0x6504, 0xEFD2},{0x6506, 0xC25B},{0x6507, 0xF242},{0x6509, 0xF245},
- {0x650C, 0xF246},{0x650D, 0xF244},{0x650E, 0xF247},{0x650F, 0xC36C},{0x6510, 0xF243},{0x6513, 0xF44E},{0x6514, 0xC464},{0x6515, 0xF44D},
- {0x6516, 0xF44C},{0x6517, 0xF44B},{0x6518, 0xC463},{0x6519, 0xC465},{0x651B, 0xF5CD},{0x651C, 0xC4E2},{0x651D, 0xC4E1},{0x6520, 0xF6E1},
- {0x6521, 0xF6E0},{0x6522, 0xF6E3},{0x6523, 0xC5CB},{0x6524, 0xC575},{0x6525, 0xF7DD},{0x6526, 0xF6E2},{0x6529, 0xF7DC},{0x652A, 0xC5CD},
- {0x652B, 0xC5CC},{0x652C, 0xC5F3},{0x652D, 0xF8A9},{0x652E, 0xF8EF},{0x652F, 0xA4E4},{0x6532, 0xD972},{0x6533, 0xE9AF},{0x6536, 0xA6AC},
- {0x6537, 0xCAF7},{0x6538, 0xA7F1},{0x6539, 0xA7EF},{0x653B, 0xA7F0},{0x653D, 0xCCC1},{0x653E, 0xA9F1},{0x653F, 0xAC46},{0x6541, 0xCEE7},
- {0x6543, 0xCEE8},{0x6545, 0xAC47},{0x6546, 0xD1CE},{0x6548, 0xAEC4},{0x6549, 0xAEC5},{0x654A, 0xD1CD},{0x654F, 0xB1D3},{0x6551, 0xB1CF},
- {0x6553, 0xD5A7},{0x6554, 0xB1D6},{0x6555, 0xB1D5},{0x6556, 0xB1CE},{0x6557, 0xB1D1},{0x6558, 0xB1D4},{0x6559, 0xB1D0},{0x655C, 0xD976},
- {0x655D, 0xB1CD},{0x655E, 0xB4AF},{0x6562, 0xB4B1},{0x6563, 0xB4B2},{0x6564, 0xD975},{0x6565, 0xD978},{0x6566, 0xB4B0},{0x6567, 0xD973},
- {0x6568, 0xD977},{0x656A, 0xD974},{0x656C, 0xB771},{0x656F, 0xDDBC},{0x6572, 0xBA56},{0x6573, 0xE1F4},{0x6574, 0xBEE3},{0x6575, 0xBCC4},
- {0x6576, 0xE5BD},{0x6577, 0xBCC5},{0x6578, 0xBCC6},{0x6579, 0xE5BF},{0x657A, 0xE5BE},{0x657B, 0xE5C0},{0x657C, 0xE9B1},{0x657F, 0xE9B0},
- {0x6580, 0xECEF},{0x6581, 0xECEE},{0x6582, 0xC0C4},{0x6583, 0xC0C5},{0x6584, 0xF248},{0x6587, 0xA4E5},{0x658C, 0xD979},{0x6590, 0xB4B4},
- {0x6591, 0xB4B3},{0x6592, 0xDDBD},{0x6594, 0xEFD8},{0x6595, 0xC4E3},{0x6596, 0xF7DE},{0x6597, 0xA4E6},{0x6599, 0xAEC6},{0x659B, 0xB1D8},
- {0x659C, 0xB1D7},{0x659D, 0xD97A},{0x659E, 0xD97B},{0x659F, 0xB772},{0x65A0, 0xE1F5},{0x65A1, 0xBA57},{0x65A2, 0xE9B2},{0x65A4, 0xA4E7},
- {0x65A5, 0xA5B8},{0x65A7, 0xA9F2},{0x65A8, 0xCCC2},{0x65AA, 0xCEE9},{0x65AB, 0xAC48},{0x65AC, 0xB1D9},{0x65AE, 0xD97C},{0x65AF, 0xB4B5},
- {0x65B0, 0xB773},{0x65B2, 0xE5C1},{0x65B3, 0xE5C2},{0x65B6, 0xECF0},{0x65B7, 0xC25F},{0x65B8, 0xF8F0},{0x65B9, 0xA4E8},{0x65BB, 0xCCC3},
- {0x65BC, 0xA9F3},{0x65BD, 0xAC49},{0x65BF, 0xCEEA},{0x65C1, 0xAEC7},{0x65C2, 0xD1D2},{0x65C3, 0xD1D0},{0x65C4, 0xD1D1},{0x65C5, 0xAEC8},
- {0x65C6, 0xD1CF},{0x65CB, 0xB1DB},{0x65CC, 0xB1DC},{0x65CD, 0xD5A8},{0x65CE, 0xB1DD},{0x65CF, 0xB1DA},{0x65D0, 0xD97D},{0x65D2, 0xD97E},
- {0x65D3, 0xDDBE},{0x65D6, 0xBA59},{0x65D7, 0xBA58},{0x65DA, 0xECF1},{0x65DB, 0xEFD9},{0x65DD, 0xF24A},{0x65DE, 0xF249},{0x65DF, 0xF44F},
- {0x65E1, 0xC95E},{0x65E2, 0xAC4A},{0x65E5, 0xA4E9},{0x65E6, 0xA5B9},{0x65E8, 0xA6AE},{0x65E9, 0xA6AD},{0x65EC, 0xA6AF},{0x65ED, 0xA6B0},
- {0x65EE, 0xC9EE},{0x65EF, 0xC9ED},{0x65F0, 0xCAF8},{0x65F1, 0xA7F2},{0x65F2, 0xCAFB},{0x65F3, 0xCAFA},{0x65F4, 0xCAF9},{0x65F5, 0xCAFC},
- {0x65FA, 0xA9F4},{0x65FB, 0xCCC9},{0x65FC, 0xCCC5},{0x65FD, 0xCCCE},{0x6600, 0xA9FB},{0x6602, 0xA9F9},{0x6603, 0xCCCA},{0x6604, 0xCCC6},
- {0x6605, 0xCCCD},{0x6606, 0xA9F8},{0x6607, 0xAA40},{0x6608, 0xCCC8},{0x6609, 0xCCC4},{0x660A, 0xA9FE},{0x660B, 0xCCCB},{0x660C, 0xA9F7},
- {0x660D, 0xCCCC},{0x660E, 0xA9FA},{0x660F, 0xA9FC},{0x6610, 0xCCD0},{0x6611, 0xCCCF},{0x6612, 0xCCC7},{0x6613, 0xA9F6},{0x6614, 0xA9F5},
- {0x6615, 0xA9FD},{0x661C, 0xCEEF},{0x661D, 0xCEF5},{0x661F, 0xAC50},{0x6620, 0xAC4D},{0x6621, 0xCEEC},{0x6622, 0xCEF1},{0x6624, 0xAC53},
- {0x6625, 0xAC4B},{0x6626, 0xCEF0},{0x6627, 0xAC4E},{0x6628, 0xAC51},{0x662B, 0xCEF3},{0x662D, 0xAC4C},{0x662E, 0xCEF8},{0x662F, 0xAC4F},
- {0x6631, 0xAC52},{0x6632, 0xCEED},{0x6633, 0xCEF2},{0x6634, 0xCEF6},{0x6635, 0xCEEE},{0x6636, 0xCEEB},{0x6639, 0xCEF7},{0x663A, 0xCEF4},
- {0x6641, 0xAED0},{0x6642, 0xAEC9},{0x6643, 0xAECC},{0x6645, 0xAECF},{0x6647, 0xD1D5},{0x6649, 0xAECA},{0x664A, 0xD1D3},{0x664C, 0xAECE},
- {0x664F, 0xAECB},{0x6651, 0xD1D6},{0x6652, 0xAECD},{0x6659, 0xD5AC},{0x665A, 0xB1DF},{0x665B, 0xD5AB},{0x665C, 0xD5AD},{0x665D, 0xB1DE},
- {0x665E, 0xB1E3},{0x665F, 0xD1D4},{0x6661, 0xD5AA},{0x6662, 0xD5AE},{0x6664, 0xB1E0},{0x6665, 0xD5A9},{0x6666, 0xB1E2},{0x6668, 0xB1E1},
- {0x666A, 0xD9A7},{0x666C, 0xD9A2},{0x666E, 0xB4B6},{0x666F, 0xB4BA},{0x6670, 0xB4B7},{0x6671, 0xD9A5},{0x6672, 0xD9A8},{0x6674, 0xB4B8},
- {0x6676, 0xB4B9},{0x6677, 0xB4BE},{0x6678, 0xDDC7},{0x6679, 0xD9A6},{0x667A, 0xB4BC},{0x667B, 0xD9A3},{0x667C, 0xD9A1},{0x667E, 0xB4BD},
- {0x6680, 0xD9A4},{0x6684, 0xB779},{0x6686, 0xDDBF},{0x6687, 0xB776},{0x6688, 0xB777},{0x6689, 0xB775},{0x668A, 0xDDC4},{0x668B, 0xDDC3},
- {0x668C, 0xDDC0},{0x668D, 0xB77B},{0x6690, 0xDDC2},{0x6691, 0xB4BB},{0x6694, 0xDDC6},{0x6695, 0xDDC1},{0x6696, 0xB778},{0x6697, 0xB774},
- {0x6698, 0xB77A},{0x6699, 0xDDC5},{0x669D, 0xBA5C},{0x669F, 0xE1F8},{0x66A0, 0xE1F7},{0x66A1, 0xE1F6},{0x66A2, 0xBA5A},{0x66A8, 0xBA5B},
- {0x66A9, 0xE5C5},{0x66AA, 0xE5C8},{0x66AB, 0xBCC8},{0x66AE, 0xBCC7},{0x66AF, 0xE5C9},{0x66B0, 0xE5C4},{0x66B1, 0xBCCA},{0x66B2, 0xE5C6},
- {0x66B4, 0xBCC9},{0x66B5, 0xE5C3},{0x66B7, 0xE5C7},{0x66B8, 0xBEE9},{0x66B9, 0xBEE6},{0x66BA, 0xE9BB},{0x66BB, 0xE9BA},{0x66BD, 0xE9B9},
- {0x66BE, 0xE9B4},{0x66C0, 0xE9B5},{0x66C4, 0xBEE7},{0x66C6, 0xBEE4},{0x66C7, 0xBEE8},{0x66C8, 0xE9B3},{0x66C9, 0xBEE5},{0x66CA, 0xE9B6},
- {0x66CB, 0xE9B7},{0x66CC, 0xE9BC},{0x66CF, 0xE9B8},{0x66D2, 0xECF2},{0x66D6, 0xC0C7},{0x66D8, 0xEFDC},{0x66D9, 0xC0C6},{0x66DA, 0xEFDA},
- {0x66DB, 0xEFDB},{0x66DC, 0xC260},{0x66DD, 0xC36E},{0x66DE, 0xF24B},{0x66E0, 0xC36D},{0x66E3, 0xF451},{0x66E4, 0xF452},{0x66E6, 0xC466},
- {0x66E8, 0xF450},{0x66E9, 0xC4E4},{0x66EB, 0xF7DF},{0x66EC, 0xC5CE},{0x66ED, 0xF8AA},{0x66EE, 0xF8AB},{0x66F0, 0xA4EA},{0x66F2, 0xA6B1},
- {0x66F3, 0xA6B2},{0x66F4, 0xA7F3},{0x66F6, 0xCCD1},{0x66F7, 0xAC54},{0x66F8, 0xAED1},{0x66F9, 0xB1E4},{0x66FC, 0xB0D2},{0x66FE, 0xB4BF},
- {0x66FF, 0xB4C0},{0x6700, 0xB3CC},{0x6701, 0xD9A9},{0x6703, 0xB77C},{0x6704, 0xE1FA},{0x6705, 0xE1F9},{0x6708, 0xA4EB},{0x6709, 0xA6B3},
- {0x670A, 0xCCD2},{0x670B, 0xAA42},{0x670D, 0xAA41},{0x670F, 0xCEF9},{0x6710, 0xCEFA},{0x6712, 0xD1D7},{0x6713, 0xD1D8},{0x6714, 0xAED2},
- {0x6715, 0xAED3},{0x6717, 0xAED4},{0x6718, 0xD5AF},{0x671B, 0xB1E6},{0x671D, 0xB4C2},{0x671F, 0xB4C1},{0x6720, 0xDDC8},{0x6721, 0xDF7A},
- {0x6722, 0xE1FB},{0x6723, 0xE9BD},{0x6726, 0xC261},{0x6727, 0xC467},{0x6728, 0xA4EC},{0x672A, 0xA5BC},{0x672B, 0xA5BD},{0x672C, 0xA5BB},
- {0x672D, 0xA5BE},{0x672E, 0xA5BA},{0x6731, 0xA6B6},{0x6733, 0xC9F6},{0x6734, 0xA6B5},{0x6735, 0xA6B7},{0x6738, 0xC9F1},{0x6739, 0xC9F0},
- {0x673A, 0xC9F3},{0x673B, 0xC9F2},{0x673C, 0xC9F5},{0x673D, 0xA6B4},{0x673E, 0xC9EF},{0x673F, 0xC9F4},{0x6745, 0xCAFD},{0x6746, 0xA7FD},
- {0x6747, 0xCAFE},{0x6748, 0xCB43},{0x6749, 0xA7FC},{0x674B, 0xCB47},{0x674C, 0xCB42},{0x674D, 0xCB45},{0x674E, 0xA7F5},{0x674F, 0xA7F6},
- {0x6750, 0xA7F7},{0x6751, 0xA7F8},{0x6753, 0xA840},{0x6755, 0xCB41},{0x6756, 0xA7FA},{0x6757, 0xA841},{0x6759, 0xCB40},{0x675A, 0xCB46},
- {0x675C, 0xA7F9},{0x675D, 0xCB44},{0x675E, 0xA7FB},{0x675F, 0xA7F4},{0x6760, 0xA7FE},{0x676A, 0xAA57},{0x676C, 0xCCD4},{0x676D, 0xAA43},
- {0x676F, 0xAA4D},{0x6770, 0xAA4E},{0x6771, 0xAA46},{0x6772, 0xAA58},{0x6773, 0xAA48},{0x6774, 0xCCDC},{0x6775, 0xAA53},{0x6776, 0xCCD7},
- {0x6777, 0xAA49},{0x6778, 0xCCE6},{0x6779, 0xCCE7},{0x677A, 0xCCDF},{0x677B, 0xCCD8},{0x677C, 0xAA56},{0x677D, 0xCCE4},{0x677E, 0xAA51},
- {0x677F, 0xAA4F},{0x6781, 0xCCE5},{0x6783, 0xCCE3},{0x6784, 0xCCDB},{0x6785, 0xCCD3},{0x6786, 0xCCDA},{0x6787, 0xAA4A},{0x6789, 0xAA50},
- {0x678B, 0xAA44},{0x678C, 0xCCDE},{0x678D, 0xCCDD},{0x678E, 0xCCD5},{0x6790, 0xAA52},{0x6791, 0xCCE1},{0x6792, 0xCCD6},{0x6793, 0xAA55},
- {0x6794, 0xCCE8},{0x6795, 0xAA45},{0x6797, 0xAA4C},{0x6798, 0xCCD9},{0x6799, 0xCCE2},{0x679A, 0xAA54},{0x679C, 0xAA47},{0x679D, 0xAA4B},
- {0x679F, 0xCCE0},{0x67AE, 0xCF5B},{0x67AF, 0xAC5C},{0x67B0, 0xAC69},{0x67B2, 0xCF56},{0x67B3, 0xCF4C},{0x67B4, 0xAC62},{0x67B5, 0xCF4A},
- {0x67B6, 0xAC5B},{0x67B7, 0xCF45},{0x67B8, 0xAC65},{0x67B9, 0xCF52},{0x67BA, 0xCEFE},{0x67BB, 0xCF41},{0x67C0, 0xCF44},{0x67C1, 0xCEFB},
- {0x67C2, 0xCF51},{0x67C3, 0xCF61},{0x67C4, 0xAC60},{0x67C5, 0xCF46},{0x67C6, 0xCF58},{0x67C8, 0xCEFD},{0x67C9, 0xCF5F},{0x67CA, 0xCF60},
- {0x67CB, 0xCF63},{0x67CC, 0xCF5A},{0x67CD, 0xCF4B},{0x67CE, 0xCF53},{0x67CF, 0xAC66},{0x67D0, 0xAC59},{0x67D1, 0xAC61},{0x67D2, 0xAC6D},
- {0x67D3, 0xAC56},{0x67D4, 0xAC58},{0x67D8, 0xCF43},{0x67D9, 0xAC6A},{0x67DA, 0xAC63},{0x67DB, 0xCF5D},{0x67DC, 0xCF40},{0x67DD, 0xAC6C},
- {0x67DE, 0xAC67},{0x67DF, 0xCF49},{0x67E2, 0xAC6B},{0x67E3, 0xCF50},{0x67E4, 0xCF48},{0x67E5, 0xAC64},{0x67E6, 0xCF5C},{0x67E7, 0xCF54},
- {0x67E9, 0xAC5E},{0x67EA, 0xCF62},{0x67EB, 0xCF47},{0x67EC, 0xAC5A},{0x67ED, 0xCF59},{0x67EE, 0xCF4F},{0x67EF, 0xAC5F},{0x67F0, 0xCF55},
- {0x67F1, 0xAC57},{0x67F2, 0xCEFC},{0x67F3, 0xAC68},{0x67F4, 0xAEE3},{0x67F5, 0xAC5D},{0x67F6, 0xCF4E},{0x67F7, 0xCF4D},{0x67F8, 0xCF42},
- {0x67FA, 0xCF5E},{0x67FC, 0xCF57},{0x67FF, 0xAC55},{0x6812, 0xD1EC},{0x6813, 0xAEEA},{0x6814, 0xD1ED},{0x6816, 0xD1E1},{0x6817, 0xAEDF},
- {0x6818, 0xAEEB},{0x681A, 0xD1DA},{0x681C, 0xD1E3},{0x681D, 0xD1EB},{0x681F, 0xD1D9},{0x6820, 0xD1F4},{0x6821, 0xAED5},{0x6825, 0xD1F3},
- {0x6826, 0xD1EE},{0x6828, 0xD1EF},{0x6829, 0xAEDD},{0x682A, 0xAEE8},{0x682B, 0xD1E5},{0x682D, 0xD1E6},{0x682E, 0xD1F0},{0x682F, 0xD1E7},
- {0x6831, 0xD1E2},{0x6832, 0xD1DC},{0x6833, 0xD1DD},{0x6834, 0xD1EA},{0x6835, 0xD1E4},{0x6838, 0xAED6},{0x6839, 0xAEDA},{0x683A, 0xD1F2},
- {0x683B, 0xD1DE},{0x683C, 0xAEE6},{0x683D, 0xAEE2},{0x6840, 0xAEE5},{0x6841, 0xAEEC},{0x6842, 0xAEDB},{0x6843, 0xAEE7},{0x6844, 0xD1E9},
- {0x6845, 0xAEE9},{0x6846, 0xAED8},{0x6848, 0xAED7},{0x6849, 0xD1DB},{0x684B, 0xD1DF},{0x684C, 0xAEE0},{0x684D, 0xD1F1},{0x684E, 0xD1E8},
- {0x684F, 0xD1E0},{0x6850, 0xAEE4},{0x6851, 0xAEE1},{0x6853, 0xAED9},{0x6854, 0xAEDC},{0x686B, 0xD5C4},{0x686D, 0xD5B4},{0x686E, 0xD5B5},
- {0x686F, 0xD5B9},{0x6871, 0xD5C8},{0x6872, 0xD5C5},{0x6874, 0xD5BE},{0x6875, 0xD5BD},{0x6876, 0xB1ED},{0x6877, 0xD5C1},{0x6878, 0xD5D0},
- {0x6879, 0xD5B0},{0x687B, 0xD5D1},{0x687C, 0xD5C3},{0x687D, 0xD5D5},{0x687E, 0xD5C9},{0x687F, 0xB1EC},{0x6880, 0xD5C7},{0x6881, 0xB1E7},
- {0x6882, 0xB1FC},{0x6883, 0xB1F2},{0x6885, 0xB1F6},{0x6886, 0xB1F5},{0x6887, 0xD5B1},{0x6889, 0xD5CE},{0x688A, 0xD5D4},{0x688B, 0xD5CC},
- {0x688C, 0xD5D3},{0x688F, 0xD5C0},{0x6890, 0xD5B2},{0x6891, 0xD5D2},{0x6892, 0xD5C2},{0x6893, 0xB1EA},{0x6894, 0xB1F7},{0x6896, 0xD5CB},
- {0x6897, 0xB1F0},{0x689B, 0xD5CA},{0x689C, 0xD5B3},{0x689D, 0xB1F8},{0x689F, 0xB1FA},{0x68A0, 0xD5CD},{0x68A1, 0xB1FB},{0x68A2, 0xB1E9},
- {0x68A3, 0xD5BA},{0x68A4, 0xD5CF},{0x68A7, 0xB1EF},{0x68A8, 0xB1F9},{0x68A9, 0xD5BC},{0x68AA, 0xD5C6},{0x68AB, 0xD5B7},{0x68AC, 0xD5BB},
- {0x68AD, 0xB1F4},{0x68AE, 0xD5B6},{0x68AF, 0xB1E8},{0x68B0, 0xB1F1},{0x68B1, 0xB1EE},{0x68B2, 0xD5BF},{0x68B3, 0xAEDE},{0x68B4, 0xD9C0},
- {0x68B5, 0xB1EB},{0x68C4, 0xB1F3},{0x68C6, 0xD9C3},{0x68C7, 0xD9D9},{0x68C8, 0xD9CE},{0x68C9, 0xB4D6},{0x68CB, 0xB4D1},{0x68CC, 0xD9BD},
- {0x68CD, 0xB4D2},{0x68CE, 0xD9CD},{0x68D0, 0xD9C6},{0x68D1, 0xD9D3},{0x68D2, 0xB4CE},{0x68D3, 0xD9AB},{0x68D4, 0xD9D5},{0x68D5, 0xB4C4},
- {0x68D6, 0xD9B3},{0x68D7, 0xB4C7},{0x68D8, 0xB4C6},{0x68DA, 0xB4D7},{0x68DC, 0xD9AD},{0x68DD, 0xD9CF},{0x68DE, 0xD9D0},{0x68DF, 0xB4C9},
- {0x68E0, 0xB4C5},{0x68E1, 0xD9BB},{0x68E3, 0xB4D0},{0x68E4, 0xD9B6},{0x68E6, 0xD9D1},{0x68E7, 0xB4CC},{0x68E8, 0xD9C9},{0x68E9, 0xD9D6},
- {0x68EA, 0xD9B0},{0x68EB, 0xD9B5},{0x68EC, 0xD9AF},{0x68EE, 0xB4CB},{0x68EF, 0xD9C2},{0x68F0, 0xDDDE},{0x68F1, 0xD9B1},{0x68F2, 0xB4CF},
- {0x68F3, 0xD9BA},{0x68F4, 0xD9D2},{0x68F5, 0xB4CA},{0x68F6, 0xD9B7},{0x68F7, 0xD9B4},{0x68F8, 0xD9C5},{0x68F9, 0xB4CD},{0x68FA, 0xB4C3},
- {0x68FB, 0xB4D9},{0x68FC, 0xD9C8},{0x68FD, 0xD9C7},{0x6904, 0xD9AC},{0x6905, 0xB4C8},{0x6906, 0xD9D4},{0x6907, 0xD9BC},{0x6908, 0xD9BE},
- {0x690A, 0xD9CB},{0x690B, 0xD9CA},{0x690C, 0xD9AA},{0x690D, 0xB4D3},{0x690E, 0xB4D5},{0x690F, 0xD9B2},{0x6910, 0xD9B9},{0x6911, 0xD9C1},
- {0x6912, 0xB4D4},{0x6913, 0xD9B8},{0x6914, 0xD9C4},{0x6915, 0xD9D7},{0x6917, 0xD9CC},{0x6925, 0xD9D8},{0x692A, 0xD9AE},{0x692F, 0xDDF2},
- {0x6930, 0xB7A6},{0x6932, 0xDDF0},{0x6933, 0xDDDB},{0x6934, 0xDDE0},{0x6935, 0xDDD9},{0x6937, 0xDDEC},{0x6938, 0xDDCB},{0x6939, 0xDDD2},
- {0x693B, 0xDDEA},{0x693C, 0xDDF4},{0x693D, 0xDDDC},{0x693F, 0xDDCF},{0x6940, 0xDDE2},{0x6941, 0xDDE7},{0x6942, 0xDDD3},{0x6944, 0xDDE4},
- {0x6945, 0xDDD0},{0x6948, 0xDDD7},{0x6949, 0xDDD8},{0x694A, 0xB7A8},{0x694B, 0xDDEB},{0x694C, 0xDDE9},{0x694E, 0xDDCC},{0x694F, 0xDDEE},
- {0x6951, 0xDDEF},{0x6952, 0xDDF1},{0x6953, 0xB7AC},{0x6954, 0xB7A4},{0x6956, 0xD5B8},{0x6957, 0xDDD4},{0x6958, 0xDDE6},{0x6959, 0xDDD5},
- {0x695A, 0xB7A1},{0x695B, 0xB7B1},{0x695C, 0xDDED},{0x695D, 0xB7AF},{0x695E, 0xB7AB},{0x695F, 0xDDCA},{0x6960, 0xB7A3},{0x6962, 0xDDCD},
- {0x6963, 0xB7B0},{0x6965, 0xDDDD},{0x6966, 0xDDC9},{0x6968, 0xB7A9},{0x6969, 0xDDE1},{0x696A, 0xDDD1},{0x696B, 0xB7AA},{0x696C, 0xDDDA},
- {0x696D, 0xB77E},{0x696E, 0xB4D8},{0x696F, 0xDDE3},{0x6970, 0xD9BF},{0x6971, 0xDDCE},{0x6974, 0xDDE8},{0x6975, 0xB7A5},{0x6976, 0xDDE5},
- {0x6977, 0xB7A2},{0x6978, 0xDDDF},{0x6979, 0xB7AD},{0x697A, 0xDDD6},{0x697B, 0xDDF3},{0x6982, 0xB7A7},{0x6983, 0xDEC6},{0x6986, 0xB7AE},
- {0x698D, 0xE24A},{0x698E, 0xE248},{0x6990, 0xE25E},{0x6991, 0xE246},{0x6993, 0xE258},{0x6994, 0xB77D},{0x6995, 0xBA5F},{0x6996, 0xE242},
- {0x6997, 0xE25D},{0x6999, 0xE247},{0x699A, 0xE255},{0x699B, 0xBA64},{0x699C, 0xBA5D},{0x699E, 0xE25B},{0x69A0, 0xE240},{0x69A1, 0xE25A},
- {0x69A3, 0xBA6F},{0x69A4, 0xE251},{0x69A5, 0xE261},{0x69A6, 0xBA6D},{0x69A7, 0xE249},{0x69A8, 0xBA5E},{0x69A9, 0xE24B},{0x69AA, 0xE259},
- {0x69AB, 0xBA67},{0x69AC, 0xE244},{0x69AD, 0xBA6B},{0x69AE, 0xBA61},{0x69AF, 0xE24D},{0x69B0, 0xE243},{0x69B1, 0xE1FC},{0x69B3, 0xE257},
- {0x69B4, 0xBA68},{0x69B5, 0xE260},{0x69B6, 0xE1FD},{0x69B7, 0xBA65},{0x69B9, 0xE253},{0x69BB, 0xBA66},{0x69BC, 0xE245},{0x69BD, 0xE250},
- {0x69BE, 0xE24C},{0x69BF, 0xE24E},{0x69C1, 0xBA60},{0x69C2, 0xE25F},{0x69C3, 0xBA6E},{0x69C4, 0xE24F},{0x69C6, 0xE262},{0x69C9, 0xE1FE},
- {0x69CA, 0xE254},{0x69CB, 0xBA63},{0x69CC, 0xBA6C},{0x69CD, 0xBA6A},{0x69CE, 0xE241},{0x69CF, 0xE256},{0x69D0, 0xBA69},{0x69D3, 0xBA62},
- {0x69D4, 0xE252},{0x69D9, 0xE25C},{0x69E2, 0xE5D5},{0x69E4, 0xE5D1},{0x69E5, 0xE5CD},{0x69E6, 0xE5E1},{0x69E7, 0xE5DE},{0x69E8, 0xBCCD},
- {0x69EB, 0xE5E5},{0x69EC, 0xE5D4},{0x69ED, 0xBCD8},{0x69EE, 0xE5DB},{0x69F1, 0xE5D0},{0x69F2, 0xE5DA},{0x69F3, 0xBCD5},{0x69F4, 0xE5EE},
- {0x69F6, 0xE5EB},{0x69F7, 0xE5DD},{0x69F8, 0xE5CE},{0x69FB, 0xE5E2},{0x69FC, 0xE5E4},{0x69FD, 0xBCD1},{0x69FE, 0xE5D8},{0x69FF, 0xE5D3},
- {0x6A00, 0xE5CA},{0x6A01, 0xBCCE},{0x6A02, 0xBCD6},{0x6A04, 0xE5E7},{0x6A05, 0xBCD7},{0x6A06, 0xE5CB},{0x6A07, 0xE5ED},{0x6A08, 0xE5E0},
- {0x6A09, 0xE5E6},{0x6A0A, 0xBCD4},{0x6A0D, 0xE5E3},{0x6A0F, 0xE5EA},{0x6A11, 0xBCD9},{0x6A13, 0xBCD3},{0x6A14, 0xE5DC},{0x6A15, 0xE5CF},
- {0x6A16, 0xE5EF},{0x6A17, 0xE5CC},{0x6A18, 0xE5E8},{0x6A19, 0xBCD0},{0x6A1B, 0xE5D6},{0x6A1D, 0xE5D7},{0x6A1E, 0xBCCF},{0x6A1F, 0xBCCC},
- {0x6A20, 0xE5D2},{0x6A21, 0xBCD2},{0x6A23, 0xBCCB},{0x6A25, 0xE5E9},{0x6A26, 0xE5EC},{0x6A27, 0xE5D9},{0x6A28, 0xE9CA},{0x6A32, 0xE9C2},
- {0x6A34, 0xE9BE},{0x6A35, 0xBEF6},{0x6A38, 0xBEEB},{0x6A39, 0xBEF0},{0x6A3A, 0xBEEC},{0x6A3B, 0xE9CC},{0x6A3C, 0xE9D7},{0x6A3D, 0xBEEA},
- {0x6A3E, 0xE9C4},{0x6A3F, 0xE9CD},{0x6A40, 0xE5DF},{0x6A41, 0xE9CE},{0x6A44, 0xBEF1},{0x6A46, 0xE9DD},{0x6A47, 0xBEF5},{0x6A48, 0xBEF8},
- {0x6A49, 0xE9C0},{0x6A4B, 0xBEF4},{0x6A4D, 0xE9DB},{0x6A4E, 0xE9DC},{0x6A4F, 0xE9D2},{0x6A50, 0xE9D1},{0x6A51, 0xE9C9},{0x6A54, 0xE9D3},
- {0x6A55, 0xE9DA},{0x6A56, 0xE9D9},{0x6A58, 0xBEEF},{0x6A59, 0xBEED},{0x6A5A, 0xE9CB},{0x6A5B, 0xE9C8},{0x6A5D, 0xE9C5},{0x6A5E, 0xE9D8},
- {0x6A5F, 0xBEF7},{0x6A60, 0xE9D6},{0x6A61, 0xBEF3},{0x6A62, 0xBEF2},{0x6A64, 0xE9D0},{0x6A66, 0xE9BF},{0x6A67, 0xE9C1},{0x6A68, 0xE9C3},
- {0x6A69, 0xE9D5},{0x6A6A, 0xE9CF},{0x6A6B, 0xBEEE},{0x6A6D, 0xE9C6},{0x6A6F, 0xE9D4},{0x6A76, 0xE9C7},{0x6A7E, 0xC0CF},{0x6A7F, 0xED45},
- {0x6A80, 0xC0C8},{0x6A81, 0xECF5},{0x6A83, 0xED41},{0x6A84, 0xC0CA},{0x6A85, 0xED48},{0x6A87, 0xECFC},{0x6A89, 0xECF7},{0x6A8C, 0xED49},
- {0x6A8D, 0xECF3},{0x6A8E, 0xECFE},{0x6A90, 0xC0D1},{0x6A91, 0xED44},{0x6A92, 0xED4A},{0x6A93, 0xECFD},{0x6A94, 0xC0C9},{0x6A95, 0xED40},
- {0x6A96, 0xECF4},{0x6A97, 0xC0D0},{0x6A9A, 0xED47},{0x6A9B, 0xECF9},{0x6A9C, 0xC0CC},{0x6A9E, 0xECFB},{0x6A9F, 0xECF8},{0x6AA0, 0xC0D2},
- {0x6AA1, 0xECFA},{0x6AA2, 0xC0CB},{0x6AA3, 0xC0CE},{0x6AA4, 0xED43},{0x6AA5, 0xECF6},{0x6AA6, 0xED46},{0x6AA8, 0xED42},{0x6AAC, 0xC263},
- {0x6AAD, 0xEFE7},{0x6AAE, 0xC268},{0x6AAF, 0xC269},{0x6AB3, 0xC262},{0x6AB4, 0xEFE6},{0x6AB6, 0xEFE3},{0x6AB7, 0xEFE4},{0x6AB8, 0xC266},
- {0x6AB9, 0xEFDE},{0x6ABA, 0xEFE2},{0x6ABB, 0xC265},{0x6ABD, 0xEFDF},{0x6AC2, 0xC267},{0x6AC3, 0xC264},{0x6AC5, 0xEFDD},{0x6AC6, 0xEFE1},
- {0x6AC7, 0xEFE5},{0x6ACB, 0xF251},{0x6ACC, 0xF24E},{0x6ACD, 0xF257},{0x6ACF, 0xF256},{0x6AD0, 0xF254},{0x6AD1, 0xF24F},{0x6AD3, 0xC372},
- {0x6AD9, 0xF250},{0x6ADA, 0xC371},{0x6ADB, 0xC0CD},{0x6ADC, 0xF253},{0x6ADD, 0xC370},{0x6ADE, 0xF258},{0x6ADF, 0xF252},{0x6AE0, 0xF24D},
- {0x6AE1, 0xEFE0},{0x6AE5, 0xC36F},{0x6AE7, 0xF24C},{0x6AE8, 0xF456},{0x6AEA, 0xF455},{0x6AEB, 0xF255},{0x6AEC, 0xC468},{0x6AEE, 0xF459},
- {0x6AEF, 0xF45A},{0x6AF0, 0xF454},{0x6AF1, 0xF458},{0x6AF3, 0xF453},{0x6AF8, 0xF5D1},{0x6AF9, 0xF457},{0x6AFA, 0xC4E7},{0x6AFB, 0xC4E5},
- {0x6AFC, 0xF5CF},{0x6B00, 0xF5D2},{0x6B02, 0xF5CE},{0x6B03, 0xF5D0},{0x6B04, 0xC4E6},{0x6B08, 0xF6E5},{0x6B09, 0xF6E6},{0x6B0A, 0xC576},
- {0x6B0B, 0xF6E4},{0x6B0F, 0xF7E2},{0x6B10, 0xC5CF},{0x6B11, 0xF7E0},{0x6B12, 0xF7E1},{0x6B13, 0xF8AC},{0x6B16, 0xC656},{0x6B17, 0xF8F3},
- {0x6B18, 0xF8F1},{0x6B19, 0xF8F2},{0x6B1A, 0xF8F4},{0x6B1E, 0xF9BB},{0x6B20, 0xA4ED},{0x6B21, 0xA6B8},{0x6B23, 0xAA59},{0x6B25, 0xCCE9},
- {0x6B28, 0xCF64},{0x6B2C, 0xD1F5},{0x6B2D, 0xD1F7},{0x6B2F, 0xD1F6},{0x6B31, 0xD1F8},{0x6B32, 0xB1FD},{0x6B33, 0xD5D7},{0x6B34, 0xD1F9},
- {0x6B36, 0xD5D6},{0x6B37, 0xD5D8},{0x6B38, 0xD5D9},{0x6B39, 0xD9DA},{0x6B3A, 0xB4DB},{0x6B3B, 0xD9DB},{0x6B3C, 0xD9DD},{0x6B3D, 0xB4DC},
- {0x6B3E, 0xB4DA},{0x6B3F, 0xD9DC},{0x6B41, 0xDDFA},{0x6B42, 0xDDF8},{0x6B43, 0xDDF7},{0x6B45, 0xDDF6},{0x6B46, 0xDDF5},{0x6B47, 0xB7B2},
- {0x6B48, 0xDDF9},{0x6B49, 0xBA70},{0x6B4A, 0xE263},{0x6B4B, 0xE265},{0x6B4C, 0xBA71},{0x6B4D, 0xE264},{0x6B4E, 0xBCDB},{0x6B50, 0xBCDA},
- {0x6B51, 0xE5F0},{0x6B54, 0xE9DF},{0x6B55, 0xE9DE},{0x6B56, 0xE9E0},{0x6B59, 0xBEF9},{0x6B5B, 0xED4B},{0x6B5C, 0xC0D3},{0x6B5E, 0xEFE8},
- {0x6B5F, 0xC26A},{0x6B60, 0xF259},{0x6B61, 0xC577},{0x6B62, 0xA4EE},{0x6B63, 0xA5BF},{0x6B64, 0xA6B9},{0x6B65, 0xA842},{0x6B66, 0xAA5A},
- {0x6B67, 0xAA5B},{0x6B6A, 0xAC6E},{0x6B6D, 0xD1FA},{0x6B72, 0xB7B3},{0x6B76, 0xE6D1},{0x6B77, 0xBEFA},{0x6B78, 0xC26B},{0x6B79, 0xA4EF},
- {0x6B7B, 0xA6BA},{0x6B7E, 0xCCEB},{0x6B7F, 0xAA5C},{0x6B80, 0xCCEA},{0x6B82, 0xCF65},{0x6B83, 0xAC6F},{0x6B84, 0xCF66},{0x6B86, 0xAC70},
- {0x6B88, 0xD1FC},{0x6B89, 0xAEEE},{0x6B8A, 0xAEED},{0x6B8C, 0xD5DE},{0x6B8D, 0xD5DC},{0x6B8E, 0xD5DD},{0x6B8F, 0xD5DB},{0x6B91, 0xD5DA},
- {0x6B94, 0xD9DE},{0x6B95, 0xD9E1},{0x6B96, 0xB4DE},{0x6B97, 0xD9DF},{0x6B98, 0xB4DD},{0x6B99, 0xD9E0},{0x6B9B, 0xDDFB},{0x6B9E, 0xE266},
- {0x6B9F, 0xE267},{0x6BA0, 0xE268},{0x6BA2, 0xE5F3},{0x6BA3, 0xE5F2},{0x6BA4, 0xBCDC},{0x6BA5, 0xE5F1},{0x6BA6, 0xE5F4},{0x6BA7, 0xE9E1},
- {0x6BAA, 0xE9E2},{0x6BAB, 0xE9E3},{0x6BAD, 0xED4C},{0x6BAE, 0xC0D4},{0x6BAF, 0xC26C},{0x6BB0, 0xF25A},{0x6BB2, 0xC4E8},{0x6BB3, 0xC95F},
- {0x6BB5, 0xAC71},{0x6BB6, 0xCF67},{0x6BB7, 0xAEEF},{0x6BBA, 0xB1FE},{0x6BBC, 0xB4DF},{0x6BBD, 0xD9E2},{0x6BBF, 0xB7B5},{0x6BC0, 0xB7B4},
- {0x6BC3, 0xE269},{0x6BC4, 0xE26A},{0x6BC5, 0xBCDD},{0x6BC6, 0xBCDE},{0x6BC7, 0xE9E5},{0x6BC8, 0xE9E4},{0x6BC9, 0xEFE9},{0x6BCA, 0xF7E3},
- {0x6BCB, 0xA4F0},{0x6BCC, 0xC960},{0x6BCD, 0xA5C0},{0x6BCF, 0xA843},{0x6BD0, 0xCB48},{0x6BD2, 0xAC72},{0x6BD3, 0xB7B6},{0x6BD4, 0xA4F1},
- {0x6BD6, 0xCF68},{0x6BD7, 0xAC73},{0x6BD8, 0xCF69},{0x6BDA, 0xC0D5},{0x6BDB, 0xA4F2},{0x6BDE, 0xCCEC},{0x6BE0, 0xCF6A},{0x6BE2, 0xD242},
- {0x6BE3, 0xD241},{0x6BE4, 0xD1FE},{0x6BE6, 0xD1FD},{0x6BE7, 0xD243},{0x6BE8, 0xD240},{0x6BEB, 0xB240},{0x6BEC, 0xB241},{0x6BEF, 0xB4E0},
- {0x6BF0, 0xD9E3},{0x6BF2, 0xD9E4},{0x6BF3, 0xD9E5},{0x6BF7, 0xDE41},{0x6BF8, 0xDE42},{0x6BF9, 0xDE40},{0x6BFB, 0xDDFD},{0x6BFC, 0xDDFE},
- {0x6BFD, 0xB7B7},{0x6BFE, 0xE26B},{0x6BFF, 0xE5F7},{0x6C00, 0xE5F6},{0x6C01, 0xE5F5},{0x6C02, 0xE5F8},{0x6C03, 0xE9E7},{0x6C04, 0xE9E6},
- {0x6C05, 0xBEFB},{0x6C06, 0xE9E8},{0x6C08, 0xC0D6},{0x6C09, 0xED4D},{0x6C0B, 0xEFEA},{0x6C0C, 0xF25B},{0x6C0D, 0xF6E7},{0x6C0F, 0xA4F3},
- {0x6C10, 0xA5C2},{0x6C11, 0xA5C1},{0x6C13, 0xAA5D},{0x6C14, 0xC961},{0x6C15, 0xC97E},{0x6C16, 0xA6BB},{0x6C18, 0xC9F7},{0x6C19, 0xCB49},
- {0x6C1A, 0xCB4A},{0x6C1B, 0xAA5E},{0x6C1D, 0xCCED},{0x6C1F, 0xAC74},{0x6C20, 0xCF6B},{0x6C21, 0xCF6C},{0x6C23, 0xAEF0},{0x6C24, 0xAEF4},
- {0x6C25, 0xD244},{0x6C26, 0xAEF3},{0x6C27, 0xAEF1},{0x6C28, 0xAEF2},{0x6C2A, 0xD5DF},{0x6C2B, 0xB242},{0x6C2C, 0xB4E3},{0x6C2E, 0xB4E1},
- {0x6C2F, 0xB4E2},{0x6C30, 0xD9E6},{0x6C33, 0xBA72},{0x6C34, 0xA4F4},{0x6C36, 0xC9A1},{0x6C38, 0xA5C3},{0x6C3B, 0xC9A4},{0x6C3E, 0xA5C6},
- {0x6C3F, 0xC9A3},{0x6C40, 0xA5C5},{0x6C41, 0xA5C4},{0x6C42, 0xA844},{0x6C43, 0xC9A2},{0x6C46, 0xC9F8},{0x6C4A, 0xC9FC},{0x6C4B, 0xC9FE},
- {0x6C4C, 0xCA40},{0x6C4D, 0xA6C5},{0x6C4E, 0xA6C6},{0x6C4F, 0xC9FB},{0x6C50, 0xA6C1},{0x6C52, 0xC9F9},{0x6C54, 0xC9FD},{0x6C55, 0xA6C2},
- {0x6C57, 0xA6BD},{0x6C59, 0xA6BE},{0x6C5B, 0xA6C4},{0x6C5C, 0xC9FA},{0x6C5D, 0xA6BC},{0x6C5E, 0xA845},{0x6C5F, 0xA6BF},{0x6C60, 0xA6C0},
- {0x6C61, 0xA6C3},{0x6C65, 0xCB5B},{0x6C66, 0xCB59},{0x6C67, 0xCB4C},{0x6C68, 0xA851},{0x6C69, 0xCB53},{0x6C6A, 0xA84C},{0x6C6B, 0xCB4D},
- {0x6C6D, 0xCB55},{0x6C6F, 0xCB52},{0x6C70, 0xA84F},{0x6C71, 0xCB51},{0x6C72, 0xA856},{0x6C73, 0xCB5A},{0x6C74, 0xA858},{0x6C76, 0xA85A},
- {0x6C78, 0xCB4B},{0x6C7A, 0xA84D},{0x6C7B, 0xCB5C},{0x6C7D, 0xA854},{0x6C7E, 0xA857},{0x6C80, 0xCD45},{0x6C81, 0xA847},{0x6C82, 0xA85E},
- {0x6C83, 0xA855},{0x6C84, 0xCB4E},{0x6C85, 0xA84A},{0x6C86, 0xA859},{0x6C87, 0xCB56},{0x6C88, 0xA848},{0x6C89, 0xA849},{0x6C8A, 0xCD43},
- {0x6C8B, 0xCB4F},{0x6C8C, 0xA850},{0x6C8D, 0xA85B},{0x6C8E, 0xCB5D},{0x6C8F, 0xCB50},{0x6C90, 0xA84E},{0x6C92, 0xA853},{0x6C93, 0xCCEE},
- {0x6C94, 0xA85C},{0x6C95, 0xCB57},{0x6C96, 0xA852},{0x6C98, 0xA85D},{0x6C99, 0xA846},{0x6C9A, 0xCB54},{0x6C9B, 0xA84B},{0x6C9C, 0xCB58},
- {0x6C9D, 0xCD44},{0x6CAB, 0xAA6A},{0x6CAC, 0xAA7A},{0x6CAD, 0xCCF5},{0x6CAE, 0xAA71},{0x6CB0, 0xCD4B},{0x6CB1, 0xAA62},{0x6CB3, 0xAA65},
- {0x6CB4, 0xCD42},{0x6CB6, 0xCCF3},{0x6CB7, 0xCCF7},{0x6CB8, 0xAA6D},{0x6CB9, 0xAA6F},{0x6CBA, 0xCCFA},{0x6CBB, 0xAA76},{0x6CBC, 0xAA68},
- {0x6CBD, 0xAA66},{0x6CBE, 0xAA67},{0x6CBF, 0xAA75},{0x6CC0, 0xCD47},{0x6CC1, 0xAA70},{0x6CC2, 0xCCF9},{0x6CC3, 0xCCFB},{0x6CC4, 0xAA6E},
- {0x6CC5, 0xAA73},{0x6CC6, 0xCCFC},{0x6CC7, 0xCD4A},{0x6CC9, 0xAC75},{0x6CCA, 0xAA79},{0x6CCC, 0xAA63},{0x6CCD, 0xCD49},{0x6CCF, 0xCD4D},
- {0x6CD0, 0xCCF8},{0x6CD1, 0xCD4F},{0x6CD2, 0xCD40},{0x6CD3, 0xAA6C},{0x6CD4, 0xCCF4},{0x6CD5, 0xAA6B},{0x6CD6, 0xAA7D},{0x6CD7, 0xAA72},
- {0x6CD9, 0xCCF2},{0x6CDA, 0xCF75},{0x6CDB, 0xAA78},{0x6CDC, 0xAA7C},{0x6CDD, 0xCD41},{0x6CDE, 0xCD46},{0x6CE0, 0xAA7E},{0x6CE1, 0xAA77},
- {0x6CE2, 0xAA69},{0x6CE3, 0xAA5F},{0x6CE5, 0xAA64},{0x6CE7, 0xCCF6},{0x6CE8, 0xAA60},{0x6CE9, 0xCD4E},{0x6CEB, 0xCCF0},{0x6CEC, 0xCCEF},
- {0x6CED, 0xCCFD},{0x6CEE, 0xCCF1},{0x6CEF, 0xAA7B},{0x6CF0, 0xAEF5},{0x6CF1, 0xAA74},{0x6CF2, 0xCCFE},{0x6CF3, 0xAA61},{0x6CF5, 0xACA6},
- {0x6CF9, 0xCD4C},{0x6D00, 0xCF7C},{0x6D01, 0xCFA1},{0x6D03, 0xCFA4},{0x6D04, 0xCF77},{0x6D07, 0xCFA7},{0x6D08, 0xCFAA},{0x6D09, 0xCFAC},
- {0x6D0A, 0xCF74},{0x6D0B, 0xAC76},{0x6D0C, 0xAC7B},{0x6D0D, 0xD249},{0x6D0E, 0xACAD},{0x6D0F, 0xCFA5},{0x6D10, 0xCFAD},{0x6D11, 0xCF7B},
- {0x6D12, 0xCF73},{0x6D16, 0xD264},{0x6D17, 0xAC7E},{0x6D18, 0xCFA2},{0x6D19, 0xCF78},{0x6D1A, 0xCF7A},{0x6D1B, 0xACA5},{0x6D1D, 0xCF7D},
- {0x6D1E, 0xAC7D},{0x6D1F, 0xCF70},{0x6D20, 0xCFA8},{0x6D22, 0xCFAB},{0x6D25, 0xAC7A},{0x6D27, 0xACA8},{0x6D28, 0xCF6D},{0x6D29, 0xACAA},
- {0x6D2A, 0xAC78},{0x6D2B, 0xACAE},{0x6D2C, 0xCFA9},{0x6D2D, 0xCF6F},{0x6D2E, 0xACAB},{0x6D2F, 0xD25E},{0x6D30, 0xCD48},{0x6D31, 0xAC7C},
- {0x6D32, 0xAC77},{0x6D33, 0xCF76},{0x6D34, 0xCF6E},{0x6D35, 0xACAC},{0x6D36, 0xACA4},{0x6D37, 0xCFA3},{0x6D38, 0xACA9},{0x6D39, 0xACA7},
- {0x6D3A, 0xCF79},{0x6D3B, 0xACA1},{0x6D3C, 0xCF71},{0x6D3D, 0xACA2},{0x6D3E, 0xACA3},{0x6D3F, 0xCF72},{0x6D40, 0xCFA6},{0x6D41, 0xAC79},
- {0x6D42, 0xCF7E},{0x6D58, 0xD24C},{0x6D59, 0xAEFD},{0x6D5A, 0xAF43},{0x6D5E, 0xD255},{0x6D5F, 0xD25B},{0x6D60, 0xD257},{0x6D61, 0xD24A},
- {0x6D62, 0xD24D},{0x6D63, 0xD246},{0x6D64, 0xD247},{0x6D65, 0xAF4A},{0x6D66, 0xAEFA},{0x6D67, 0xD256},{0x6D68, 0xD25F},{0x6D69, 0xAF45},
- {0x6D6A, 0xAEF6},{0x6D6C, 0xAF40},{0x6D6D, 0xD24E},{0x6D6E, 0xAF42},{0x6D6F, 0xD24F},{0x6D70, 0xD259},{0x6D74, 0xAF44},{0x6D75, 0xD268},
- {0x6D76, 0xD248},{0x6D77, 0xAEFC},{0x6D78, 0xAEFB},{0x6D79, 0xAF48},{0x6D7A, 0xD245},{0x6D7B, 0xD266},{0x6D7C, 0xD25A},{0x6D7D, 0xD267},
- {0x6D7E, 0xD261},{0x6D7F, 0xD253},{0x6D80, 0xD262},{0x6D82, 0xD25C},{0x6D83, 0xD265},{0x6D84, 0xD263},{0x6D85, 0xAF49},{0x6D86, 0xD254},
- {0x6D87, 0xAEF9},{0x6D88, 0xAEF8},{0x6D89, 0xAF41},{0x6D8A, 0xAF47},{0x6D8B, 0xD260},{0x6D8C, 0xAF46},{0x6D8D, 0xD251},{0x6D8E, 0xB243},
- {0x6D90, 0xD269},{0x6D91, 0xD250},{0x6D92, 0xD24B},{0x6D93, 0xAEFE},{0x6D94, 0xAF4B},{0x6D95, 0xAEF7},{0x6D97, 0xD258},{0x6D98, 0xD25D},
- {0x6DAA, 0xB265},{0x6DAB, 0xD5E1},{0x6DAC, 0xD5E5},{0x6DAE, 0xB252},{0x6DAF, 0xB250},{0x6DB2, 0xB247},{0x6DB3, 0xD5E3},{0x6DB4, 0xD5E2},
- {0x6DB5, 0xB25B},{0x6DB7, 0xD5E8},{0x6DB8, 0xB255},{0x6DBA, 0xD5FA},{0x6DBB, 0xD647},{0x6DBC, 0xB244},{0x6DBD, 0xD5F7},{0x6DBE, 0xD5F0},
- {0x6DBF, 0xB267},{0x6DC0, 0xD5E0},{0x6DC2, 0xD5FC},{0x6DC4, 0xB264},{0x6DC5, 0xB258},{0x6DC6, 0xB263},{0x6DC7, 0xB24E},{0x6DC8, 0xD5EC},
- {0x6DC9, 0xD5FE},{0x6DCA, 0xD5F6},{0x6DCB, 0xB24F},{0x6DCC, 0xB249},{0x6DCD, 0xD645},{0x6DCF, 0xD5FD},{0x6DD0, 0xD640},{0x6DD1, 0xB251},
- {0x6DD2, 0xB259},{0x6DD3, 0xD642},{0x6DD4, 0xD5EA},{0x6DD5, 0xD5FB},{0x6DD6, 0xD5EF},{0x6DD7, 0xD644},{0x6DD8, 0xB25E},{0x6DD9, 0xB246},
- {0x6DDA, 0xB25C},{0x6DDB, 0xD5F4},{0x6DDC, 0xD5F2},{0x6DDD, 0xD5F3},{0x6DDE, 0xB253},{0x6DDF, 0xD5EE},{0x6DE0, 0xD5ED},{0x6DE1, 0xB248},
- {0x6DE2, 0xD5E7},{0x6DE3, 0xD646},{0x6DE4, 0xB24A},{0x6DE5, 0xD5F1},{0x6DE6, 0xB268},{0x6DE8, 0xB262},{0x6DE9, 0xD5E6},{0x6DEA, 0xB25F},
- {0x6DEB, 0xB25D},{0x6DEC, 0xB266},{0x6DED, 0xD5F8},{0x6DEE, 0xB261},{0x6DEF, 0xD252},{0x6DF0, 0xD5F9},{0x6DF1, 0xB260},{0x6DF2, 0xD641},
- {0x6DF3, 0xB245},{0x6DF4, 0xD5F5},{0x6DF5, 0xB257},{0x6DF6, 0xD5E9},{0x6DF7, 0xB256},{0x6DF9, 0xB254},{0x6DFA, 0xB24C},{0x6DFB, 0xB24B},
- {0x6DFC, 0xD9E7},{0x6DFD, 0xD643},{0x6E00, 0xD5EB},{0x6E03, 0xD9FC},{0x6E05, 0xB24D},{0x6E19, 0xB541},{0x6E1A, 0xB25A},{0x6E1B, 0xB4EE},
- {0x6E1C, 0xD9F6},{0x6E1D, 0xB4FC},{0x6E1F, 0xD9EA},{0x6E20, 0xB4EB},{0x6E21, 0xB4E7},{0x6E22, 0xDA49},{0x6E23, 0xB4ED},{0x6E24, 0xB4F1},
- {0x6E25, 0xB4EC},{0x6E26, 0xB4F5},{0x6E27, 0xDA4D},{0x6E28, 0xDA44},{0x6E2B, 0xD9F1},{0x6E2C, 0xB4FA},{0x6E2D, 0xB4F4},{0x6E2E, 0xD9FD},
- {0x6E2F, 0xB4E4},{0x6E30, 0xDA4A},{0x6E31, 0xDA43},{0x6E32, 0xB4E8},{0x6E33, 0xD9F7},{0x6E34, 0xB4F7},{0x6E35, 0xDA55},{0x6E36, 0xDA56},
- {0x6E38, 0xB4E5},{0x6E39, 0xDA48},{0x6E3A, 0xB4F9},{0x6E3B, 0xD9FB},{0x6E3C, 0xD9ED},{0x6E3D, 0xD9EE},{0x6E3E, 0xB4FD},{0x6E3F, 0xD9F2},
- {0x6E40, 0xD9F9},{0x6E41, 0xD9F3},{0x6E43, 0xB4FB},{0x6E44, 0xB544},{0x6E45, 0xD9EF},{0x6E46, 0xD9E8},{0x6E47, 0xD9E9},{0x6E49, 0xD9EB},
- {0x6E4A, 0xB4EA},{0x6E4B, 0xD9F8},{0x6E4D, 0xB4F8},{0x6E4E, 0xB542},{0x6E51, 0xD9FA},{0x6E52, 0xDA53},{0x6E53, 0xDA4B},{0x6E54, 0xB4E6},
- {0x6E55, 0xDA51},{0x6E56, 0xB4F2},{0x6E58, 0xB4F0},{0x6E5A, 0xDA57},{0x6E5B, 0xB4EF},{0x6E5C, 0xDA41},{0x6E5D, 0xD9F4},{0x6E5E, 0xD9FE},
- {0x6E5F, 0xB547},{0x6E60, 0xDA45},{0x6E61, 0xDA42},{0x6E62, 0xD9F0},{0x6E63, 0xB543},{0x6E64, 0xDA4F},{0x6E65, 0xDA4C},{0x6E66, 0xDA54},
- {0x6E67, 0xB4E9},{0x6E68, 0xDA40},{0x6E69, 0xB546},{0x6E6B, 0xDA47},{0x6E6E, 0xB4F3},{0x6E6F, 0xB4F6},{0x6E71, 0xDA46},{0x6E72, 0xB545},
- {0x6E73, 0xD9F5},{0x6E74, 0xD5E4},{0x6E77, 0xDA50},{0x6E78, 0xDA4E},{0x6E79, 0xDA52},{0x6E88, 0xD9EC},{0x6E89, 0xB540},{0x6E8D, 0xDE61},
- {0x6E8E, 0xDE60},{0x6E8F, 0xDE46},{0x6E90, 0xB7BD},{0x6E92, 0xDE5F},{0x6E93, 0xDE49},{0x6E94, 0xDE4A},{0x6E96, 0xB7C7},{0x6E97, 0xDE68},
- {0x6E98, 0xB7C2},{0x6E99, 0xDE5E},{0x6E9B, 0xDE43},{0x6E9C, 0xB7C8},{0x6E9D, 0xB7BE},{0x6E9E, 0xDE52},{0x6E9F, 0xDE48},{0x6EA0, 0xDE4B},
- {0x6EA1, 0xDE63},{0x6EA2, 0xB7B8},{0x6EA3, 0xDE6A},{0x6EA4, 0xDE62},{0x6EA5, 0xB7C1},{0x6EA6, 0xDE57},{0x6EA7, 0xB7CC},{0x6EAA, 0xB7CB},
- {0x6EAB, 0xB7C5},{0x6EAE, 0xDE69},{0x6EAF, 0xB7B9},{0x6EB0, 0xDE55},{0x6EB1, 0xDE4C},{0x6EB2, 0xDE59},{0x6EB3, 0xDE65},{0x6EB4, 0xB7CD},
- {0x6EB6, 0xB7BB},{0x6EB7, 0xDE54},{0x6EB9, 0xDE4D},{0x6EBA, 0xB7C4},{0x6EBC, 0xB7C3},{0x6EBD, 0xDE50},{0x6EBE, 0xDE5A},{0x6EBF, 0xDE64},
- {0x6EC0, 0xDE47},{0x6EC1, 0xDE51},{0x6EC2, 0xB7BC},{0x6EC3, 0xDE5B},{0x6EC4, 0xB7C9},{0x6EC5, 0xB7C0},{0x6EC6, 0xDE4E},{0x6EC7, 0xB7BF},
- {0x6EC8, 0xDE45},{0x6EC9, 0xDE53},{0x6ECA, 0xDE67},{0x6ECB, 0xB4FE},{0x6ECC, 0xBAB0},{0x6ECD, 0xDE56},{0x6ECE, 0xE26C},{0x6ECF, 0xDE58},
- {0x6ED0, 0xDE66},{0x6ED1, 0xB7C6},{0x6ED2, 0xDE4F},{0x6ED3, 0xB7BA},{0x6ED4, 0xB7CA},{0x6ED5, 0xBCF0},{0x6ED6, 0xDE44},{0x6ED8, 0xDE5D},
- {0x6EDC, 0xDE5C},{0x6EEB, 0xE2AA},{0x6EEC, 0xBAAD},{0x6EED, 0xE27D},{0x6EEE, 0xE2A4},{0x6EEF, 0xBAA2},{0x6EF1, 0xE26E},{0x6EF2, 0xBAAF},
- {0x6EF4, 0xBA77},{0x6EF5, 0xE26D},{0x6EF6, 0xE2B0},{0x6EF7, 0xBAB1},{0x6EF8, 0xE271},{0x6EF9, 0xE2A3},{0x6EFB, 0xE273},{0x6EFC, 0xE2B3},
- {0x6EFD, 0xE2AF},{0x6EFE, 0xBA75},{0x6EFF, 0xBAA1},{0x6F00, 0xE653},{0x6F01, 0xBAAE},{0x6F02, 0xBA7D},{0x6F03, 0xE26F},{0x6F05, 0xE2AE},
- {0x6F06, 0xBAA3},{0x6F07, 0xE2AB},{0x6F08, 0xE2B8},{0x6F09, 0xE275},{0x6F0A, 0xE27E},{0x6F0D, 0xE2B6},{0x6F0E, 0xE2AC},{0x6F0F, 0xBA7C},
- {0x6F12, 0xE27C},{0x6F13, 0xBA76},{0x6F14, 0xBA74},{0x6F15, 0xBAA8},{0x6F18, 0xE27A},{0x6F19, 0xE277},{0x6F1A, 0xE278},{0x6F1C, 0xE2B2},
- {0x6F1E, 0xE2B7},{0x6F1F, 0xE2B5},{0x6F20, 0xBA7A},{0x6F21, 0xE2B9},{0x6F22, 0xBA7E},{0x6F23, 0xBAA7},{0x6F25, 0xE270},{0x6F26, 0xE5FA},
- {0x6F27, 0xE279},{0x6F29, 0xBA78},{0x6F2A, 0xBAAC},{0x6F2B, 0xBAA9},{0x6F2C, 0xBA7B},{0x6F2D, 0xE2A5},{0x6F2E, 0xE274},{0x6F2F, 0xBAAA},
- {0x6F30, 0xE2A7},{0x6F31, 0xBAA4},{0x6F32, 0xBAA6},{0x6F33, 0xBA73},{0x6F35, 0xE2A9},{0x6F36, 0xE2A1},{0x6F37, 0xE272},{0x6F38, 0xBAA5},
- {0x6F39, 0xE2B1},{0x6F3A, 0xE2B4},{0x6F3B, 0xE27B},{0x6F3C, 0xE2A8},{0x6F3E, 0xBA79},{0x6F3F, 0xBCDF},{0x6F40, 0xE2A6},{0x6F41, 0xE5F9},
- {0x6F43, 0xE2AD},{0x6F4E, 0xE276},{0x6F4F, 0xE644},{0x6F50, 0xE64E},{0x6F51, 0xBCE2},{0x6F52, 0xE64D},{0x6F53, 0xE659},{0x6F54, 0xBCE4},
- {0x6F55, 0xE64B},{0x6F57, 0xE64F},{0x6F58, 0xBCEF},{0x6F5A, 0xE646},{0x6F5B, 0xBCE7},{0x6F5D, 0xE652},{0x6F5E, 0xE9F0},{0x6F5F, 0xBCF3},
- {0x6F60, 0xBCF2},{0x6F61, 0xE654},{0x6F62, 0xE643},{0x6F63, 0xE65E},{0x6F64, 0xBCED},{0x6F66, 0xBCE3},{0x6F67, 0xE657},{0x6F69, 0xE65B},
- {0x6F6A, 0xE660},{0x6F6B, 0xE655},{0x6F6C, 0xE649},{0x6F6D, 0xBCE6},{0x6F6E, 0xBCE9},{0x6F6F, 0xBCF1},{0x6F70, 0xBCEC},{0x6F72, 0xE64C},
- {0x6F73, 0xE2A2},{0x6F76, 0xE648},{0x6F77, 0xE65F},{0x6F78, 0xBCE8},{0x6F7A, 0xBCEB},{0x6F7B, 0xE661},{0x6F7C, 0xBCE0},{0x6F7D, 0xE656},
- {0x6F7E, 0xE5FB},{0x6F7F, 0xE65C},{0x6F80, 0xC0DF},{0x6F82, 0xE64A},{0x6F84, 0xBCE1},{0x6F85, 0xE645},{0x6F86, 0xBCE5},{0x6F87, 0xE5FC},
- {0x6F88, 0xBAAB},{0x6F89, 0xE641},{0x6F8B, 0xE65A},{0x6F8C, 0xE642},{0x6F8D, 0xE640},{0x6F8E, 0xBCEA},{0x6F90, 0xE658},{0x6F92, 0xE5FE},
- {0x6F93, 0xE651},{0x6F94, 0xE650},{0x6F95, 0xE65D},{0x6F96, 0xE647},{0x6F97, 0xBCEE},{0x6F9E, 0xE9F3},{0x6FA0, 0xBF49},{0x6FA1, 0xBEFE},
- {0x6FA2, 0xEA40},{0x6FA3, 0xE9EB},{0x6FA4, 0xBF41},{0x6FA5, 0xE9F7},{0x6FA6, 0xBF48},{0x6FA7, 0xBF43},{0x6FA8, 0xE9F5},{0x6FA9, 0xED4F},
- {0x6FAA, 0xE9FB},{0x6FAB, 0xEA42},{0x6FAC, 0xE9FA},{0x6FAD, 0xE9E9},{0x6FAE, 0xE9F8},{0x6FAF, 0xEA44},{0x6FB0, 0xEA46},{0x6FB1, 0xBEFD},
- {0x6FB2, 0xEA45},{0x6FB3, 0xBF44},{0x6FB4, 0xBF4A},{0x6FB6, 0xBF47},{0x6FB8, 0xE9FE},{0x6FB9, 0xBF46},{0x6FBA, 0xE9F9},{0x6FBC, 0xE9ED},
- {0x6FBD, 0xE9F2},{0x6FBF, 0xE9FD},{0x6FC0, 0xBF45},{0x6FC1, 0xBF42},{0x6FC2, 0xBEFC},{0x6FC3, 0xBF40},{0x6FC4, 0xE9F1},{0x6FC6, 0xE5FD},
- {0x6FC7, 0xE9EC},{0x6FC8, 0xE9EF},{0x6FC9, 0xEA41},{0x6FCA, 0xE9F4},{0x6FCB, 0xE9EA},{0x6FCC, 0xED4E},{0x6FCD, 0xEA43},{0x6FCE, 0xE9EE},
- {0x6FCF, 0xE9FC},{0x6FD4, 0xED51},{0x6FD5, 0xC0E3},{0x6FD8, 0xC0D7},{0x6FDB, 0xC0DB},{0x6FDC, 0xED53},{0x6FDD, 0xED59},{0x6FDE, 0xED57},
- {0x6FDF, 0xC0D9},{0x6FE0, 0xC0DA},{0x6FE1, 0xC0E1},{0x6FE2, 0xED5A},{0x6FE3, 0xED52},{0x6FE4, 0xC0DC},{0x6FE6, 0xED56},{0x6FE7, 0xED55},
- {0x6FE8, 0xED5B},{0x6FE9, 0xC0E2},{0x6FEB, 0xC0DD},{0x6FEC, 0xC0E0},{0x6FED, 0xED54},{0x6FEE, 0xC0E4},{0x6FEF, 0xC0DE},{0x6FF0, 0xC0E5},
- {0x6FF1, 0xC0D8},{0x6FF2, 0xED58},{0x6FF4, 0xED50},{0x6FF7, 0xEFF7},{0x6FFA, 0xC271},{0x6FFB, 0xEFF4},{0x6FFC, 0xEFF6},{0x6FFE, 0xC26F},
- {0x6FFF, 0xEFF2},{0x7000, 0xEFF3},{0x7001, 0xEFEE},{0x7004, 0xE9F6},{0x7005, 0xEFEF},{0x7006, 0xC270},{0x7007, 0xEFEB},{0x7009, 0xC26D},
- {0x700A, 0xEFF8},{0x700B, 0xC26E},{0x700C, 0xEFEC},{0x700D, 0xEFED},{0x700E, 0xEFF1},{0x700F, 0xC273},{0x7011, 0xC272},{0x7014, 0xEFF0},
- {0x7015, 0xC378},{0x7016, 0xF25F},{0x7017, 0xF265},{0x7018, 0xC379},{0x7019, 0xF25C},{0x701A, 0xC376},{0x701B, 0xC373},{0x701C, 0xF267},
- {0x701D, 0xC377},{0x701F, 0xC374},{0x7020, 0xF25E},{0x7021, 0xF261},{0x7022, 0xF262},{0x7023, 0xF263},{0x7024, 0xF266},{0x7026, 0xEFF5},
- {0x7027, 0xF25D},{0x7028, 0xC375},{0x7029, 0xF264},{0x702A, 0xF268},{0x702B, 0xF260},{0x702F, 0xF45D},{0x7030, 0xC46A},{0x7031, 0xF460},
- {0x7032, 0xC46B},{0x7033, 0xF468},{0x7034, 0xF45F},{0x7035, 0xF45C},{0x7037, 0xF45E},{0x7038, 0xF462},{0x7039, 0xF465},{0x703A, 0xF464},
- {0x703B, 0xF467},{0x703C, 0xF45B},{0x703E, 0xC469},{0x703F, 0xF463},{0x7040, 0xF466},{0x7041, 0xF469},{0x7042, 0xF461},{0x7043, 0xF5D3},
- {0x7044, 0xF5D4},{0x7045, 0xF5D8},{0x7046, 0xF5D9},{0x7048, 0xF5D6},{0x7049, 0xF5D7},{0x704A, 0xF5D5},{0x704C, 0xC4E9},{0x7051, 0xC578},
- {0x7052, 0xF6EB},{0x7055, 0xF6E8},{0x7056, 0xF6E9},{0x7057, 0xF6EA},{0x7058, 0xC579},{0x705A, 0xF7E5},{0x705B, 0xF7E4},{0x705D, 0xF8AF},
- {0x705E, 0xC5F4},{0x705F, 0xF8AD},{0x7060, 0xF8B0},{0x7061, 0xF8AE},{0x7062, 0xF8F5},{0x7063, 0xC657},{0x7064, 0xC665},{0x7065, 0xF9A3},
- {0x7066, 0xF96C},{0x7068, 0xF9A2},{0x7069, 0xF9D0},{0x706A, 0xF9D1},{0x706B, 0xA4F5},{0x7070, 0xA6C7},{0x7071, 0xCA41},{0x7074, 0xCB5E},
- {0x7076, 0xA85F},{0x7078, 0xA862},{0x707A, 0xCB5F},{0x707C, 0xA860},{0x707D, 0xA861},{0x7082, 0xCD58},{0x7083, 0xCD5A},{0x7084, 0xCD55},
- {0x7085, 0xCD52},{0x7086, 0xCD54},{0x708A, 0xAAA4},{0x708E, 0xAAA2},{0x7091, 0xCD56},{0x7092, 0xAAA3},{0x7093, 0xCD53},{0x7094, 0xCD50},
- {0x7095, 0xAAA1},{0x7096, 0xCD57},{0x7098, 0xCD51},{0x7099, 0xAAA5},{0x709A, 0xCD59},{0x709F, 0xCFAF},{0x70A1, 0xCFB3},{0x70A4, 0xACB7},
- {0x70A9, 0xCFB6},{0x70AB, 0xACAF},{0x70AC, 0xACB2},{0x70AD, 0xACB4},{0x70AE, 0xACB6},{0x70AF, 0xACB3},{0x70B0, 0xCFB2},{0x70B1, 0xCFB1},
- {0x70B3, 0xACB1},{0x70B4, 0xCFB4},{0x70B5, 0xCFB5},{0x70B7, 0xCFAE},{0x70B8, 0xACB5},{0x70BA, 0xACB0},{0x70BE, 0xCFB0},{0x70C5, 0xD277},
- {0x70C6, 0xD278},{0x70C7, 0xD279},{0x70C8, 0xAF50},{0x70CA, 0xAF4C},{0x70CB, 0xD26E},{0x70CD, 0xD276},{0x70CE, 0xD27B},{0x70CF, 0xAF51},
- {0x70D1, 0xD26C},{0x70D2, 0xD272},{0x70D3, 0xD26B},{0x70D4, 0xD275},{0x70D7, 0xD271},{0x70D8, 0xAF4D},{0x70D9, 0xAF4F},{0x70DA, 0xD27A},
- {0x70DC, 0xD26A},{0x70DD, 0xD26D},{0x70DE, 0xD273},{0x70E0, 0xD274},{0x70E1, 0xD27C},{0x70E2, 0xD270},{0x70E4, 0xAF4E},{0x70EF, 0xB26D},
- {0x70F0, 0xD64E},{0x70F3, 0xD650},{0x70F4, 0xD64C},{0x70F6, 0xD658},{0x70F7, 0xD64A},{0x70F8, 0xD657},{0x70F9, 0xB269},{0x70FA, 0xD648},
- {0x70FB, 0xDA5B},{0x70FC, 0xD652},{0x70FD, 0xB26C},{0x70FF, 0xD653},{0x7100, 0xD656},{0x7102, 0xD65A},{0x7104, 0xD64F},{0x7106, 0xD654},
- {0x7109, 0xB26A},{0x710A, 0xB26B},{0x710B, 0xD659},{0x710C, 0xD64D},{0x710D, 0xD649},{0x710E, 0xD65B},{0x7110, 0xD651},{0x7113, 0xD655},
- {0x7117, 0xD64B},{0x7119, 0xB548},{0x711A, 0xB549},{0x711B, 0xDA65},{0x711C, 0xB54F},{0x711E, 0xDA59},{0x711F, 0xDA62},{0x7120, 0xDA58},
- {0x7121, 0xB54C},{0x7122, 0xDA60},{0x7123, 0xDA5E},{0x7125, 0xDA5F},{0x7126, 0xB54A},{0x7128, 0xDA63},{0x712E, 0xDA5C},{0x712F, 0xDA5A},
- {0x7130, 0xB54B},{0x7131, 0xDA5D},{0x7132, 0xDA61},{0x7136, 0xB54D},{0x713A, 0xDA64},{0x7141, 0xDE70},{0x7142, 0xDE77},{0x7143, 0xDE79},
- {0x7144, 0xDEA1},{0x7146, 0xB7DA},{0x7147, 0xDE6B},{0x7149, 0xB7D2},{0x714B, 0xDE7A},{0x714C, 0xB7D7},{0x714D, 0xDEA2},{0x714E, 0xB7CE},
- {0x7150, 0xDE7D},{0x7152, 0xDE6D},{0x7153, 0xDE7E},{0x7154, 0xDE6C},{0x7156, 0xB7DC},{0x7158, 0xDE78},{0x7159, 0xB7CF},{0x715A, 0xDEA3},
- {0x715C, 0xB7D4},{0x715D, 0xDE71},{0x715E, 0xB7D9},{0x715F, 0xDE7C},{0x7160, 0xDE6F},{0x7161, 0xDE76},{0x7162, 0xDE72},{0x7163, 0xDE6E},
- {0x7164, 0xB7D1},{0x7165, 0xB7D8},{0x7166, 0xB7D6},{0x7167, 0xB7D3},{0x7168, 0xB7DB},{0x7169, 0xB7D0},{0x716A, 0xDE75},{0x716C, 0xB7D5},
- {0x716E, 0xB54E},{0x7170, 0xDE7B},{0x7172, 0xDE73},{0x7178, 0xDE74},{0x717B, 0xE2C1},{0x717D, 0xBAB4},{0x7180, 0xE2BD},{0x7181, 0xE2C3},
- {0x7182, 0xE2BF},{0x7184, 0xBAB6},{0x7185, 0xE2BE},{0x7186, 0xE2C2},{0x7187, 0xE2BA},{0x7189, 0xE2BC},{0x718A, 0xBAB5},{0x718F, 0xE2C0},
- {0x7190, 0xE2BB},{0x7192, 0xBAB7},{0x7194, 0xBAB2},{0x7197, 0xE2C4},{0x7199, 0xBAB3},{0x719A, 0xE667},{0x719B, 0xE664},{0x719C, 0xE670},
- {0x719D, 0xE66A},{0x719E, 0xE66C},{0x719F, 0xBCF4},{0x71A0, 0xE666},{0x71A1, 0xE66E},{0x71A4, 0xE66D},{0x71A5, 0xE66B},{0x71A7, 0xE671},
- {0x71A8, 0xBCF7},{0x71A9, 0xE668},{0x71AA, 0xE66F},{0x71AC, 0xBCF5},{0x71AF, 0xE663},{0x71B0, 0xE665},{0x71B1, 0xBCF6},{0x71B2, 0xE662},
- {0x71B3, 0xE672},{0x71B5, 0xE669},{0x71B8, 0xEA4A},{0x71B9, 0xBF51},{0x71BC, 0xEA55},{0x71BD, 0xEA53},{0x71BE, 0xBF4B},{0x71BF, 0xEA49},
- {0x71C0, 0xEA4C},{0x71C1, 0xEA4D},{0x71C2, 0xEA48},{0x71C3, 0xBF55},{0x71C4, 0xBF56},{0x71C5, 0xEA47},{0x71C6, 0xEA56},{0x71C7, 0xEA51},
- {0x71C8, 0xBF4F},{0x71C9, 0xBF4C},{0x71CA, 0xEA50},{0x71CB, 0xEA4E},{0x71CE, 0xBF52},{0x71CF, 0xEA52},{0x71D0, 0xBF4D},{0x71D2, 0xBF4E},
- {0x71D4, 0xEA4F},{0x71D5, 0xBF50},{0x71D6, 0xEA4B},{0x71D8, 0xEA54},{0x71D9, 0xBF53},{0x71DA, 0xEA57},{0x71DB, 0xEA58},{0x71DC, 0xBF54},
- {0x71DF, 0xC0E7},{0x71E0, 0xC0EE},{0x71E1, 0xED5C},{0x71E2, 0xED62},{0x71E4, 0xED60},{0x71E5, 0xC0EA},{0x71E6, 0xC0E9},{0x71E7, 0xC0E6},
- {0x71E8, 0xED5E},{0x71EC, 0xC0EC},{0x71ED, 0xC0EB},{0x71EE, 0xC0E8},{0x71F0, 0xED61},{0x71F1, 0xED5D},{0x71F2, 0xED5F},{0x71F4, 0xC0ED},
- {0x71F8, 0xC277},{0x71F9, 0xEFFB},{0x71FB, 0xC274},{0x71FC, 0xC275},{0x71FD, 0xEFFD},{0x71FE, 0xC276},{0x71FF, 0xEFFA},{0x7201, 0xEFF9},
- {0x7202, 0xF26C},{0x7203, 0xEFFC},{0x7205, 0xF26D},{0x7206, 0xC37A},{0x7207, 0xF26B},{0x720A, 0xF26A},{0x720C, 0xF269},{0x720D, 0xC37B},
- {0x7210, 0xC46C},{0x7213, 0xF46A},{0x7214, 0xF46B},{0x7219, 0xF5DC},{0x721A, 0xF5DB},{0x721B, 0xC4EA},{0x721D, 0xF5DA},{0x721E, 0xF6EC},
- {0x721F, 0xF6ED},{0x7222, 0xF7E6},{0x7223, 0xF8B1},{0x7226, 0xF8F6},{0x7227, 0xF9BC},{0x7228, 0xC679},{0x7229, 0xF9C6},{0x722A, 0xA4F6},
- {0x722C, 0xAAA6},{0x722D, 0xAAA7},{0x7230, 0xACB8},{0x7235, 0xC0EF},{0x7236, 0xA4F7},{0x7238, 0xAAA8},{0x7239, 0xAF52},{0x723A, 0xB7DD},
- {0x723B, 0xA4F8},{0x723D, 0xB26E},{0x723E, 0xBAB8},{0x723F, 0xC962},{0x7241, 0xCFB7},{0x7242, 0xD27D},{0x7244, 0xE2C5},{0x7246, 0xC0F0},
- {0x7247, 0xA4F9},{0x7248, 0xAAA9},{0x7249, 0xCFB8},{0x724A, 0xCFB9},{0x724B, 0xDA66},{0x724C, 0xB550},{0x724F, 0xDEA4},{0x7252, 0xB7DE},
- {0x7253, 0xE2C6},{0x7256, 0xBCF8},{0x7258, 0xC37C},{0x7259, 0xA4FA},{0x725A, 0xDA67},{0x725B, 0xA4FB},{0x725D, 0xA6C9},{0x725E, 0xCA42},
- {0x725F, 0xA6C8},{0x7260, 0xA865},{0x7261, 0xA864},{0x7262, 0xA863},{0x7263, 0xCB60},{0x7267, 0xAAAA},{0x7269, 0xAAAB},{0x726A, 0xCD5B},
- {0x726C, 0xCFBA},{0x726E, 0xCFBD},{0x726F, 0xACBA},{0x7270, 0xCFBB},{0x7272, 0xACB9},{0x7273, 0xCFBC},{0x7274, 0xACBB},{0x7276, 0xD2A2},
- {0x7277, 0xD2A1},{0x7278, 0xD27E},{0x7279, 0xAF53},{0x727B, 0xD65D},{0x727C, 0xD65E},{0x727D, 0xB26F},{0x727E, 0xD65C},{0x727F, 0xD65F},
- {0x7280, 0xB552},{0x7281, 0xB270},{0x7284, 0xB551},{0x7285, 0xDA6B},{0x7286, 0xDA6A},{0x7288, 0xDA68},{0x7289, 0xDA69},{0x728B, 0xDA6C},
- {0x728C, 0xDEA6},{0x728D, 0xDEA5},{0x728E, 0xDEA9},{0x7290, 0xDEA8},{0x7291, 0xDEA7},{0x7292, 0xBAB9},{0x7293, 0xE2C9},{0x7295, 0xE2C8},
- {0x7296, 0xBABA},{0x7297, 0xE2C7},{0x7298, 0xE673},{0x729A, 0xE674},{0x729B, 0xBCF9},{0x729D, 0xEA59},{0x729E, 0xEA5A},{0x72A1, 0xF272},
- {0x72A2, 0xC37D},{0x72A3, 0xF271},{0x72A4, 0xF270},{0x72A5, 0xF26E},{0x72A6, 0xF26F},{0x72A7, 0xC4EB},{0x72A8, 0xF46C},{0x72A9, 0xF6EE},
- {0x72AA, 0xF8F7},{0x72AC, 0xA4FC},{0x72AE, 0xC9A5},{0x72AF, 0xA5C7},{0x72B0, 0xC9A6},{0x72B4, 0xCA43},{0x72B5, 0xCA44},{0x72BA, 0xCB66},
- {0x72BD, 0xCB62},{0x72BF, 0xCB61},{0x72C0, 0xAAAC},{0x72C1, 0xCB65},{0x72C2, 0xA867},{0x72C3, 0xCB63},{0x72C4, 0xA866},{0x72C5, 0xCB67},
- {0x72C6, 0xCB64},{0x72C9, 0xCD5F},{0x72CA, 0xCFBE},{0x72CB, 0xCD5D},{0x72CC, 0xCD64},{0x72CE, 0xAAAD},{0x72D0, 0xAAB0},{0x72D1, 0xCD65},
- {0x72D2, 0xCD61},{0x72D4, 0xCD62},{0x72D6, 0xCD5C},{0x72D7, 0xAAAF},{0x72D8, 0xCD5E},{0x72D9, 0xAAAE},{0x72DA, 0xCD63},{0x72DC, 0xCD60},
- {0x72DF, 0xCFC2},{0x72E0, 0xACBD},{0x72E1, 0xACBE},{0x72E3, 0xCFC5},{0x72E4, 0xCFBF},{0x72E6, 0xCFC4},{0x72E8, 0xCFC0},{0x72E9, 0xACBC},
- {0x72EA, 0xCFC3},{0x72EB, 0xCFC1},{0x72F3, 0xD2A8},{0x72F4, 0xD2A5},{0x72F6, 0xD2A7},{0x72F7, 0xAF58},{0x72F8, 0xAF57},{0x72F9, 0xAF55},
- {0x72FA, 0xD2A4},{0x72FB, 0xD2A9},{0x72FC, 0xAF54},{0x72FD, 0xAF56},{0x72FE, 0xD2A6},{0x72FF, 0xD667},{0x7300, 0xD2A3},{0x7301, 0xD2AA},
- {0x7307, 0xD662},{0x7308, 0xD666},{0x730A, 0xD665},{0x730B, 0xDA6E},{0x730C, 0xDA79},{0x730F, 0xD668},{0x7311, 0xD663},{0x7312, 0xDA6D},
- {0x7313, 0xB274},{0x7316, 0xB273},{0x7317, 0xD661},{0x7318, 0xD664},{0x7319, 0xB275},{0x731B, 0xB272},{0x731C, 0xB271},{0x731D, 0xD660},
- {0x731E, 0xD669},{0x7322, 0xDA70},{0x7323, 0xDA77},{0x7325, 0xB554},{0x7326, 0xDA76},{0x7327, 0xDA73},{0x7329, 0xB556},{0x732D, 0xDA75},
- {0x7330, 0xDA6F},{0x7331, 0xDA71},{0x7332, 0xDA74},{0x7333, 0xDA72},{0x7334, 0xB555},{0x7335, 0xDA78},{0x7336, 0xB553},{0x7337, 0xB7DF},
- {0x733A, 0xDEAD},{0x733B, 0xDEAC},{0x733C, 0xDEAA},{0x733E, 0xB7E2},{0x733F, 0xB7E1},{0x7340, 0xDEAE},{0x7342, 0xDEAB},{0x7343, 0xE2CA},
- {0x7344, 0xBABB},{0x7345, 0xB7E0},{0x7349, 0xDEB0},{0x734A, 0xDEAF},{0x734C, 0xE2CD},{0x734D, 0xE2CB},{0x734E, 0xBCFA},{0x7350, 0xBABC},
- {0x7351, 0xE2CC},{0x7352, 0xE676},{0x7357, 0xBCFB},{0x7358, 0xE675},{0x7359, 0xE67E},{0x735A, 0xE67D},{0x735B, 0xE67B},{0x735D, 0xE67A},
- {0x735E, 0xE677},{0x735F, 0xE678},{0x7360, 0xE679},{0x7361, 0xE67C},{0x7362, 0xE6A1},{0x7365, 0xEA5F},{0x7366, 0xEA5C},{0x7367, 0xEA5D},
- {0x7368, 0xBF57},{0x7369, 0xEA5B},{0x736A, 0xEA61},{0x736B, 0xEA60},{0x736C, 0xEA5E},{0x736E, 0xED64},{0x736F, 0xED65},{0x7370, 0xC0F1},
- {0x7372, 0xC0F2},{0x7373, 0xED63},{0x7375, 0xC279},{0x7376, 0xEFFE},{0x7377, 0xC278},{0x7378, 0xC37E},{0x737A, 0xC3A1},{0x737B, 0xC46D},
- {0x737C, 0xF46E},{0x737D, 0xF46D},{0x737E, 0xF5DD},{0x737F, 0xF6EF},{0x7380, 0xC57A},{0x7381, 0xF7E8},{0x7382, 0xF7E7},{0x7383, 0xF7E9},
- {0x7384, 0xA5C8},{0x7385, 0xCFC6},{0x7386, 0xAF59},{0x7387, 0xB276},{0x7388, 0xD66A},{0x7389, 0xA5C9},{0x738A, 0xC9A7},{0x738B, 0xA4FD},
- {0x738E, 0xCA45},{0x7392, 0xCB6C},{0x7393, 0xCB6A},{0x7394, 0xCB6B},{0x7395, 0xCB68},{0x7396, 0xA868},{0x7397, 0xCB69},{0x739D, 0xCD6D},
- {0x739F, 0xAAB3},{0x73A0, 0xCD6B},{0x73A1, 0xCD67},{0x73A2, 0xCD6A},{0x73A4, 0xCD66},{0x73A5, 0xAAB5},{0x73A6, 0xCD69},{0x73A8, 0xAAB2},
- {0x73A9, 0xAAB1},{0x73AB, 0xAAB4},{0x73AC, 0xCD6C},{0x73AD, 0xCD68},{0x73B2, 0xACC2},{0x73B3, 0xACC5},{0x73B4, 0xCFCE},{0x73B5, 0xCFCD},
- {0x73B6, 0xCFCC},{0x73B7, 0xACBF},{0x73B8, 0xCFD5},{0x73B9, 0xCFCB},{0x73BB, 0xACC1},{0x73BC, 0xD2AF},{0x73BE, 0xCFD2},{0x73BF, 0xCFD0},
- {0x73C0, 0xACC4},{0x73C2, 0xCFC8},{0x73C3, 0xCFD3},{0x73C5, 0xCFCA},{0x73C6, 0xCFD4},{0x73C7, 0xCFD1},{0x73C8, 0xCFC9},{0x73CA, 0xACC0},
- {0x73CB, 0xCFD6},{0x73CC, 0xCFC7},{0x73CD, 0xACC3},{0x73D2, 0xD2B4},{0x73D3, 0xD2AB},{0x73D4, 0xD2B6},{0x73D6, 0xD2AE},{0x73D7, 0xD2B9},
- {0x73D8, 0xD2BA},{0x73D9, 0xD2AC},{0x73DA, 0xD2B8},{0x73DB, 0xD2B5},{0x73DC, 0xD2B3},{0x73DD, 0xD2B7},{0x73DE, 0xAF5F},{0x73E0, 0xAF5D},
- {0x73E3, 0xD2B1},{0x73E5, 0xD2AD},{0x73E7, 0xD2B0},{0x73E8, 0xD2BB},{0x73E9, 0xD2B2},{0x73EA, 0xAF5E},{0x73EB, 0xCFCF},{0x73ED, 0xAF5A},
- {0x73EE, 0xAF5C},{0x73F4, 0xD678},{0x73F5, 0xD66D},{0x73F6, 0xD66B},{0x73F8, 0xD66C},{0x73FA, 0xD673},{0x73FC, 0xD674},{0x73FD, 0xD670},
- {0x73FE, 0xB27B},{0x73FF, 0xD675},{0x7400, 0xD672},{0x7401, 0xD66F},{0x7403, 0xB279},{0x7404, 0xD66E},{0x7405, 0xB277},{0x7406, 0xB27A},
- {0x7407, 0xD671},{0x7408, 0xD679},{0x7409, 0xAF5B},{0x740A, 0xB278},{0x740B, 0xD677},{0x740C, 0xD676},{0x740D, 0xB27C},{0x7416, 0xDA7E},
- {0x741A, 0xDAA1},{0x741B, 0xB560},{0x741D, 0xDAA7},{0x7420, 0xDAA9},{0x7421, 0xDAA2},{0x7422, 0xB55A},{0x7423, 0xDAA6},{0x7424, 0xDAA5},
- {0x7425, 0xB55B},{0x7426, 0xB561},{0x7428, 0xB562},{0x7429, 0xDAA8},{0x742A, 0xB558},{0x742B, 0xDA7D},{0x742C, 0xDA7B},{0x742D, 0xDAA3},
- {0x742E, 0xDA7A},{0x742F, 0xB55F},{0x7430, 0xDA7C},{0x7431, 0xDAA4},{0x7432, 0xDAAA},{0x7433, 0xB559},{0x7434, 0xB55E},{0x7435, 0xB55C},
- {0x7436, 0xB55D},{0x743A, 0xB557},{0x743F, 0xB7E9},{0x7440, 0xDEB7},{0x7441, 0xB7E8},{0x7442, 0xDEBB},{0x7444, 0xDEB1},{0x7446, 0xDEBC},
- {0x744A, 0xDEB2},{0x744B, 0xDEB3},{0x744D, 0xDEBD},{0x744E, 0xDEBA},{0x744F, 0xDEB8},{0x7450, 0xDEB9},{0x7451, 0xDEB5},{0x7452, 0xDEB4},
- {0x7454, 0xDEBE},{0x7455, 0xB7E5},{0x7457, 0xDEB6},{0x7459, 0xB7EA},{0x745A, 0xB7E4},{0x745B, 0xB7EB},{0x745C, 0xB7EC},{0x745E, 0xB7E7},
- {0x745F, 0xB7E6},{0x7462, 0xE2CE},{0x7463, 0xBABE},{0x7464, 0xBABD},{0x7467, 0xE2D3},{0x7469, 0xBCFC},{0x746A, 0xBABF},{0x746D, 0xBAC1},
- {0x746E, 0xE2D4},{0x746F, 0xB7E3},{0x7470, 0xBAC0},{0x7471, 0xE2D0},{0x7472, 0xE2D2},{0x7473, 0xE2CF},{0x7475, 0xE2D1},{0x7479, 0xE6AB},
- {0x747C, 0xE6AA},{0x747D, 0xE6A7},{0x747E, 0xBD40},{0x747F, 0xEA62},{0x7480, 0xBD41},{0x7481, 0xE6A6},{0x7483, 0xBCFE},{0x7485, 0xE6A8},
- {0x7486, 0xE6A5},{0x7487, 0xE6A2},{0x7488, 0xE6A9},{0x7489, 0xE6A3},{0x748A, 0xE6A4},{0x748B, 0xBCFD},{0x7490, 0xED69},{0x7492, 0xEA66},
- {0x7494, 0xEA65},{0x7495, 0xEA67},{0x7497, 0xED66},{0x7498, 0xBF5A},{0x749A, 0xEA63},{0x749C, 0xBF58},{0x749E, 0xBF5C},{0x749F, 0xBF5B},
- {0x74A0, 0xEA64},{0x74A1, 0xEA68},{0x74A3, 0xBF59},{0x74A5, 0xED6D},{0x74A6, 0xC0F5},{0x74A7, 0xC27A},{0x74A8, 0xC0F6},{0x74A9, 0xC0F3},
- {0x74AA, 0xED6A},{0x74AB, 0xED68},{0x74AD, 0xED6B},{0x74AF, 0xED6E},{0x74B0, 0xC0F4},{0x74B1, 0xED6C},{0x74B2, 0xED67},{0x74B5, 0xF042},
- {0x74B6, 0xF045},{0x74B7, 0xF275},{0x74B8, 0xF040},{0x74BA, 0xF46F},{0x74BB, 0xF046},{0x74BD, 0xC3A2},{0x74BE, 0xF044},{0x74BF, 0xC27B},
- {0x74C0, 0xF041},{0x74C1, 0xF043},{0x74C2, 0xF047},{0x74C3, 0xF276},{0x74C5, 0xF274},{0x74CA, 0xC3A3},{0x74CB, 0xF273},{0x74CF, 0xC46E},
- {0x74D4, 0xC4ED},{0x74D5, 0xF6F1},{0x74D6, 0xC4EC},{0x74D7, 0xF6F3},{0x74D8, 0xF6F0},{0x74D9, 0xF6F2},{0x74DA, 0xC5D0},{0x74DB, 0xF8B2},
- {0x74DC, 0xA5CA},{0x74DD, 0xCD6E},{0x74DE, 0xD2BC},{0x74DF, 0xD2BD},{0x74E0, 0xB27D},{0x74E1, 0xDEBF},{0x74E2, 0xBF5D},{0x74E3, 0xC3A4},
- {0x74E4, 0xC57B},{0x74E5, 0xF8B3},{0x74E6, 0xA5CB},{0x74E8, 0xCD6F},{0x74E9, 0xA260},{0x74EC, 0xCFD7},{0x74EE, 0xCFD8},{0x74F4, 0xD2BE},
- {0x74F5, 0xD2BF},{0x74F6, 0xB27E},{0x74F7, 0xB2A1},{0x74FB, 0xDAAB},{0x74FD, 0xDEC2},{0x74FE, 0xDEC1},{0x74FF, 0xDEC0},{0x7500, 0xE2D5},
- {0x7502, 0xE2D6},{0x7503, 0xE2D7},{0x7504, 0xBAC2},{0x7507, 0xE6AD},{0x7508, 0xE6AC},{0x750B, 0xEA69},{0x750C, 0xBF5E},{0x750D, 0xBF5F},
- {0x750F, 0xED72},{0x7510, 0xED6F},{0x7511, 0xED70},{0x7512, 0xED71},{0x7513, 0xF049},{0x7514, 0xF048},{0x7515, 0xC27C},{0x7516, 0xF277},
- {0x7517, 0xF5DE},{0x7518, 0xA5CC},{0x751A, 0xACC6},{0x751C, 0xB2A2},{0x751D, 0xDEC3},{0x751F, 0xA5CD},{0x7521, 0xD2C0},{0x7522, 0xB2A3},
- {0x7525, 0xB563},{0x7526, 0xB564},{0x7528, 0xA5CE},{0x7529, 0xA5CF},{0x752A, 0xCA46},{0x752B, 0xA86A},{0x752C, 0xA869},{0x752D, 0xACC7},
- {0x752E, 0xCFD9},{0x752F, 0xDAAC},{0x7530, 0xA5D0},{0x7531, 0xA5D1},{0x7532, 0xA5D2},{0x7533, 0xA5D3},{0x7537, 0xA86B},{0x7538, 0xA86C},
- {0x7539, 0xCB6E},{0x753A, 0xCB6D},{0x753D, 0xAAB6},{0x753E, 0xCD72},{0x753F, 0xCD70},{0x7540, 0xCD71},{0x7547, 0xCFDA},{0x7548, 0xCFDB},
- {0x754B, 0xACCB},{0x754C, 0xACC9},{0x754E, 0xACCA},{0x754F, 0xACC8},{0x7554, 0xAF60},{0x7559, 0xAF64},{0x755A, 0xAF63},{0x755B, 0xD2C1},
- {0x755C, 0xAF62},{0x755D, 0xAF61},{0x755F, 0xD2C2},{0x7562, 0xB2A6},{0x7563, 0xD67B},{0x7564, 0xD67A},{0x7565, 0xB2A4},{0x7566, 0xB2A5},
- {0x756A, 0xB566},{0x756B, 0xB565},{0x756C, 0xDAAE},{0x756F, 0xDAAD},{0x7570, 0xB2A7},{0x7576, 0xB7ED},{0x7577, 0xDEC5},{0x7578, 0xB7EE},
- {0x7579, 0xDEC4},{0x757D, 0xE2D8},{0x757E, 0xE6AE},{0x757F, 0xBD42},{0x7580, 0xEA6A},{0x7584, 0xED73},{0x7586, 0xC3A6},{0x7587, 0xC3A5},
- {0x758A, 0xC57C},{0x758B, 0xA5D4},{0x758C, 0xCD73},{0x758F, 0xB2A8},{0x7590, 0xE2D9},{0x7591, 0xBAC3},{0x7594, 0xCB6F},{0x7595, 0xCB70},
- {0x7598, 0xCD74},{0x7599, 0xAAB8},{0x759A, 0xAAB9},{0x759D, 0xAAB7},{0x75A2, 0xACCF},{0x75A3, 0xACD0},{0x75A4, 0xACCD},{0x75A5, 0xACCE},
- {0x75A7, 0xCFDC},{0x75AA, 0xCFDD},{0x75AB, 0xACCC},{0x75B0, 0xD2C3},{0x75B2, 0xAF68},{0x75B3, 0xAF69},{0x75B5, 0xB2AB},{0x75B6, 0xD2C9},
- {0x75B8, 0xAF6E},{0x75B9, 0xAF6C},{0x75BA, 0xD2CA},{0x75BB, 0xD2C5},{0x75BC, 0xAF6B},{0x75BD, 0xAF6A},{0x75BE, 0xAF65},{0x75BF, 0xD2C8},
- {0x75C0, 0xD2C7},{0x75C1, 0xD2C4},{0x75C2, 0xAF6D},{0x75C4, 0xD2C6},{0x75C5, 0xAF66},{0x75C7, 0xAF67},{0x75CA, 0xB2AC},{0x75CB, 0xD6A1},
- {0x75CC, 0xD6A2},{0x75CD, 0xB2AD},{0x75CE, 0xD67C},{0x75CF, 0xD67E},{0x75D0, 0xD6A4},{0x75D1, 0xD6A3},{0x75D2, 0xD67D},{0x75D4, 0xB2A9},
- {0x75D5, 0xB2AA},{0x75D7, 0xDAB6},{0x75D8, 0xB56B},{0x75D9, 0xB56A},{0x75DA, 0xDAB0},{0x75DB, 0xB568},{0x75DD, 0xDAB3},{0x75DE, 0xB56C},
- {0x75DF, 0xDAB4},{0x75E0, 0xB56D},{0x75E1, 0xDAB1},{0x75E2, 0xB567},{0x75E3, 0xB569},{0x75E4, 0xDAB5},{0x75E6, 0xDAB2},{0x75E7, 0xDAAF},
- {0x75ED, 0xDED2},{0x75EF, 0xDEC7},{0x75F0, 0xB7F0},{0x75F1, 0xB7F3},{0x75F2, 0xB7F2},{0x75F3, 0xB7F7},{0x75F4, 0xB7F6},{0x75F5, 0xDED3},
- {0x75F6, 0xDED1},{0x75F7, 0xDECA},{0x75F8, 0xDECE},{0x75F9, 0xDECD},{0x75FA, 0xB7F4},{0x75FB, 0xDED0},{0x75FC, 0xDECC},{0x75FD, 0xDED4},
- {0x75FE, 0xDECB},{0x75FF, 0xB7F5},{0x7600, 0xB7EF},{0x7601, 0xB7F1},{0x7603, 0xDEC9},{0x7608, 0xE2DB},{0x7609, 0xBAC7},{0x760A, 0xE2DF},
- {0x760B, 0xBAC6},{0x760C, 0xE2DC},{0x760D, 0xBAC5},{0x760F, 0xDEC8},{0x7610, 0xDECF},{0x7611, 0xE2DE},{0x7613, 0xBAC8},{0x7614, 0xE2E0},
- {0x7615, 0xE2DD},{0x7616, 0xE2DA},{0x7619, 0xE6B1},{0x761A, 0xE6B5},{0x761B, 0xE6B7},{0x761C, 0xE6B3},{0x761D, 0xE6B2},{0x761E, 0xE6B0},
- {0x761F, 0xBD45},{0x7620, 0xBD43},{0x7621, 0xBD48},{0x7622, 0xBD49},{0x7623, 0xE6B4},{0x7624, 0xBD46},{0x7625, 0xE6AF},{0x7626, 0xBD47},
- {0x7627, 0xBAC4},{0x7628, 0xE6B6},{0x7629, 0xBD44},{0x762D, 0xEA6C},{0x762F, 0xEA6B},{0x7630, 0xEA73},{0x7631, 0xEA6D},{0x7632, 0xEA72},
- {0x7633, 0xEA6F},{0x7634, 0xBF60},{0x7635, 0xEA71},{0x7638, 0xBF61},{0x763A, 0xBF62},{0x763C, 0xEA70},{0x763D, 0xEA6E},{0x7642, 0xC0F8},
- {0x7643, 0xED74},{0x7646, 0xC0F7},{0x7647, 0xED77},{0x7648, 0xED75},{0x7649, 0xED76},{0x764C, 0xC0F9},{0x7650, 0xF04D},{0x7652, 0xC2A1},
- {0x7653, 0xF04E},{0x7656, 0xC27D},{0x7657, 0xF04F},{0x7658, 0xC27E},{0x7659, 0xF04C},{0x765A, 0xF050},{0x765C, 0xF04A},{0x765F, 0xC3A7},
- {0x7660, 0xF278},{0x7661, 0xC3A8},{0x7662, 0xC46F},{0x7664, 0xF04B},{0x7665, 0xC470},{0x7669, 0xC4EE},{0x766A, 0xF5DF},{0x766C, 0xC57E},
- {0x766D, 0xF6F4},{0x766E, 0xC57D},{0x7670, 0xF7EA},{0x7671, 0xC5F5},{0x7672, 0xC5F6},{0x7675, 0xF9CC},{0x7678, 0xACD1},{0x7679, 0xCFDE},
- {0x767B, 0xB56E},{0x767C, 0xB56F},{0x767D, 0xA5D5},{0x767E, 0xA6CA},{0x767F, 0xCA47},{0x7681, 0xCB71},{0x7682, 0xA86D},{0x7684, 0xAABA},
- {0x7686, 0xACD2},{0x7687, 0xACD3},{0x7688, 0xACD4},{0x7689, 0xD6A6},{0x768A, 0xD2CB},{0x768B, 0xAF6F},{0x768E, 0xB2AE},{0x768F, 0xD6A5},
- {0x7692, 0xDAB8},{0x7693, 0xB571},{0x7695, 0xDAB7},{0x7696, 0xB570},{0x7699, 0xDED5},{0x769A, 0xBD4A},{0x769B, 0xE6BB},{0x769C, 0xE6B8},
- {0x769D, 0xE6B9},{0x769E, 0xE6BA},{0x76A4, 0xED78},{0x76A6, 0xF051},{0x76AA, 0xF471},{0x76AB, 0xF470},{0x76AD, 0xF6F5},{0x76AE, 0xA5D6},
- {0x76AF, 0xCD75},{0x76B0, 0xAF70},{0x76B4, 0xB572},{0x76B5, 0xDED6},{0x76B8, 0xE2E1},{0x76BA, 0xBD4B},{0x76BB, 0xEA74},{0x76BD, 0xF052},
- {0x76BE, 0xF472},{0x76BF, 0xA5D7},{0x76C2, 0xAABB},{0x76C3, 0xACD7},{0x76C4, 0xCFDF},{0x76C5, 0xACD8},{0x76C6, 0xACD6},{0x76C8, 0xACD5},
- {0x76C9, 0xD2CC},{0x76CA, 0xAF71},{0x76CD, 0xAF72},{0x76CE, 0xAF73},{0x76D2, 0xB2B0},{0x76D3, 0xD6A7},{0x76D4, 0xB2AF},{0x76DA, 0xDAB9},
- {0x76DB, 0xB2B1},{0x76DC, 0xB573},{0x76DD, 0xDED7},{0x76DE, 0xB7F8},{0x76DF, 0xB7F9},{0x76E1, 0xBAC9},{0x76E3, 0xBACA},{0x76E4, 0xBD4C},
- {0x76E5, 0xBF64},{0x76E6, 0xEA75},{0x76E7, 0xBF63},{0x76E9, 0xED79},{0x76EA, 0xC0FA},{0x76EC, 0xF053},{0x76ED, 0xF473},{0x76EE, 0xA5D8},
- {0x76EF, 0xA86E},{0x76F0, 0xCD78},{0x76F1, 0xCD77},{0x76F2, 0xAABC},{0x76F3, 0xCD76},{0x76F4, 0xAABD},{0x76F5, 0xCD79},{0x76F7, 0xCFE5},
- {0x76F8, 0xACDB},{0x76F9, 0xACDA},{0x76FA, 0xCFE7},{0x76FB, 0xCFE6},{0x76FC, 0xACDF},{0x76FE, 0xACDE},{0x7701, 0xACD9},{0x7703, 0xCFE1},
- {0x7704, 0xCFE2},{0x7705, 0xCFE3},{0x7707, 0xACE0},{0x7708, 0xCFE0},{0x7709, 0xACDC},{0x770A, 0xCFE4},{0x770B, 0xACDD},{0x7710, 0xD2CF},
- {0x7711, 0xD2D3},{0x7712, 0xD2D1},{0x7713, 0xD2D0},{0x7715, 0xD2D4},{0x7719, 0xD2D5},{0x771A, 0xD2D6},{0x771B, 0xD2CE},{0x771D, 0xD2CD},
- {0x771F, 0xAF75},{0x7720, 0xAF76},{0x7722, 0xD2D7},{0x7723, 0xD2D2},{0x7725, 0xD6B0},{0x7727, 0xD2D8},{0x7728, 0xAF77},{0x7729, 0xAF74},
- {0x772D, 0xD6AA},{0x772F, 0xD6A9},{0x7731, 0xD6AB},{0x7732, 0xD6AC},{0x7733, 0xD6AE},{0x7734, 0xD6AD},{0x7735, 0xD6B2},{0x7736, 0xB2B5},
- {0x7737, 0xB2B2},{0x7738, 0xB2B6},{0x7739, 0xD6A8},{0x773A, 0xB2B7},{0x773B, 0xD6B1},{0x773C, 0xB2B4},{0x773D, 0xD6AF},{0x773E, 0xB2B3},
- {0x7744, 0xDABC},{0x7745, 0xDABE},{0x7746, 0xDABA},{0x7747, 0xDABB},{0x774A, 0xDABF},{0x774B, 0xDAC1},{0x774C, 0xDAC2},{0x774D, 0xDABD},
- {0x774E, 0xDAC0},{0x774F, 0xB574},{0x7752, 0xDEDB},{0x7754, 0xDEE0},{0x7755, 0xDED8},{0x7756, 0xDEDC},{0x7759, 0xDEE1},{0x775A, 0xDEDD},
- {0x775B, 0xB7FA},{0x775C, 0xB843},{0x775E, 0xB7FD},{0x775F, 0xDED9},{0x7760, 0xDEDA},{0x7761, 0xBACE},{0x7762, 0xB846},{0x7763, 0xB7FE},
- {0x7765, 0xB844},{0x7766, 0xB7FC},{0x7767, 0xDEDF},{0x7768, 0xB845},{0x7769, 0xDEDE},{0x776A, 0xB841},{0x776B, 0xB7FB},{0x776C, 0xB842},
- {0x776D, 0xDEE2},{0x776E, 0xE2E6},{0x776F, 0xE2E8},{0x7779, 0xB840},{0x777C, 0xE2E3},{0x777D, 0xBACC},{0x777E, 0xE2E9},{0x777F, 0xBACD},
- {0x7780, 0xE2E7},{0x7781, 0xE2E2},{0x7782, 0xE2E5},{0x7783, 0xE2EA},{0x7784, 0xBACB},{0x7785, 0xE2E4},{0x7787, 0xBD4E},{0x7788, 0xE6BF},
- {0x7789, 0xE6BE},{0x778B, 0xBD51},{0x778C, 0xBD4F},{0x778D, 0xE6BC},{0x778E, 0xBD4D},{0x778F, 0xE6BD},{0x7791, 0xBD50},{0x7795, 0xEA7D},
- {0x7797, 0xEAA1},{0x7799, 0xEA7E},{0x779A, 0xEA76},{0x779B, 0xEA7A},{0x779C, 0xEA79},{0x779D, 0xEA77},{0x779E, 0xBF66},{0x779F, 0xBF67},
- {0x77A0, 0xBF65},{0x77A1, 0xEA78},{0x77A2, 0xEA7B},{0x77A3, 0xEA7C},{0x77A5, 0xBF68},{0x77A7, 0xC140},{0x77A8, 0xEDA3},{0x77AA, 0xC0FC},
- {0x77AB, 0xED7B},{0x77AC, 0xC0FE},{0x77AD, 0xC141},{0x77B0, 0xC0FD},{0x77B1, 0xEDA2},{0x77B2, 0xED7C},{0x77B3, 0xC0FB},{0x77B4, 0xEDA1},
- {0x77B5, 0xED7A},{0x77B6, 0xED7E},{0x77B7, 0xED7D},{0x77BA, 0xF055},{0x77BB, 0xC2A4},{0x77BC, 0xC2A5},{0x77BD, 0xC2A2},{0x77BF, 0xC2A3},
- {0x77C2, 0xF054},{0x77C4, 0xF27B},{0x77C7, 0xC3A9},{0x77C9, 0xF279},{0x77CA, 0xF27A},{0x77CC, 0xF474},{0x77CD, 0xF477},{0x77CE, 0xF475},
- {0x77CF, 0xF476},{0x77D0, 0xF5E0},{0x77D3, 0xC4EF},{0x77D4, 0xF7EB},{0x77D5, 0xF8B4},{0x77D7, 0xC5F7},{0x77D8, 0xF8F8},{0x77D9, 0xF8F9},
- {0x77DA, 0xC666},{0x77DB, 0xA5D9},{0x77DC, 0xACE1},{0x77DE, 0xDAC3},{0x77E0, 0xDEE3},{0x77E2, 0xA5DA},{0x77E3, 0xA86F},{0x77E5, 0xAABE},
- {0x77E7, 0xCFE8},{0x77E8, 0xCFE9},{0x77E9, 0xAF78},{0x77EC, 0xDAC4},{0x77ED, 0xB575},{0x77EE, 0xB847},{0x77EF, 0xC142},{0x77F0, 0xEDA4},
- {0x77F1, 0xF27C},{0x77F2, 0xF478},{0x77F3, 0xA5DB},{0x77F7, 0xCDA1},{0x77F8, 0xCD7A},{0x77F9, 0xCD7C},{0x77FA, 0xCD7E},{0x77FB, 0xCD7D},
- {0x77FC, 0xCD7B},{0x77FD, 0xAABF},{0x7802, 0xACE2},{0x7803, 0xCFF2},{0x7805, 0xCFED},{0x7806, 0xCFEA},{0x7809, 0xCFF1},{0x780C, 0xACE4},
- {0x780D, 0xACE5},{0x780E, 0xCFF0},{0x780F, 0xCFEF},{0x7810, 0xCFEE},{0x7811, 0xCFEB},{0x7812, 0xCFEC},{0x7813, 0xCFF3},{0x7814, 0xACE3},
- {0x781D, 0xAF7C},{0x781F, 0xAFA4},{0x7820, 0xAFA3},{0x7821, 0xD2E1},{0x7822, 0xD2DB},{0x7823, 0xD2D9},{0x7825, 0xAFA1},{0x7826, 0xD6B9},
- {0x7827, 0xAF7A},{0x7828, 0xD2DE},{0x7829, 0xD2E2},{0x782A, 0xD2E4},{0x782B, 0xD2E0},{0x782C, 0xD2DA},{0x782D, 0xAFA2},{0x782E, 0xD2DF},
- {0x782F, 0xD2DD},{0x7830, 0xAF79},{0x7831, 0xD2E5},{0x7832, 0xAFA5},{0x7833, 0xD2E3},{0x7834, 0xAF7D},{0x7835, 0xD2DC},{0x7837, 0xAF7E},
- {0x7838, 0xAF7B},{0x7843, 0xB2B9},{0x7845, 0xD6BA},{0x7848, 0xD6B3},{0x7849, 0xD6B5},{0x784A, 0xD6B7},{0x784C, 0xD6B8},{0x784D, 0xD6B6},
- {0x784E, 0xB2BA},{0x7850, 0xD6BB},{0x7852, 0xD6B4},{0x785C, 0xDAC8},{0x785D, 0xB576},{0x785E, 0xDAD0},{0x7860, 0xDAC5},{0x7862, 0xDAD1},
- {0x7864, 0xDAC6},{0x7865, 0xDAC7},{0x7868, 0xDACF},{0x7869, 0xDACE},{0x786A, 0xDACB},{0x786B, 0xB2B8},{0x786C, 0xB577},{0x786D, 0xDAC9},
- {0x786E, 0xDACC},{0x786F, 0xB578},{0x7870, 0xDACD},{0x7871, 0xDACA},{0x7879, 0xDEEE},{0x787B, 0xDEF2},{0x787C, 0xB84E},{0x787E, 0xE2F0},
- {0x787F, 0xB851},{0x7880, 0xDEF0},{0x7883, 0xDEED},{0x7884, 0xDEE8},{0x7885, 0xDEEA},{0x7886, 0xDEEB},{0x7887, 0xDEE4},{0x7889, 0xB84D},
- {0x788C, 0xB84C},{0x788E, 0xB848},{0x788F, 0xDEE7},{0x7891, 0xB84F},{0x7893, 0xB850},{0x7894, 0xDEE6},{0x7895, 0xDEE9},{0x7896, 0xDEF1},
- {0x7897, 0xB84A},{0x7898, 0xB84B},{0x7899, 0xDEEF},{0x789A, 0xDEE5},{0x789E, 0xE2F2},{0x789F, 0xBAD0},{0x78A0, 0xE2F4},{0x78A1, 0xDEEC},
- {0x78A2, 0xE2F6},{0x78A3, 0xBAD4},{0x78A4, 0xE2F7},{0x78A5, 0xE2F3},{0x78A7, 0xBAD1},{0x78A8, 0xE2EF},{0x78A9, 0xBAD3},{0x78AA, 0xE2EC},
- {0x78AB, 0xE2F1},{0x78AC, 0xE2F5},{0x78AD, 0xE2EE},{0x78B0, 0xB849},{0x78B2, 0xE2EB},{0x78B3, 0xBAD2},{0x78B4, 0xE2ED},{0x78BA, 0xBD54},
- {0x78BB, 0xE6C1},{0x78BC, 0xBD58},{0x78BE, 0xBD56},{0x78C1, 0xBACF},{0x78C3, 0xE6C8},{0x78C4, 0xE6C9},{0x78C5, 0xBD53},{0x78C8, 0xE6C7},
- {0x78C9, 0xE6CA},{0x78CA, 0xBD55},{0x78CB, 0xBD52},{0x78CC, 0xE6C3},{0x78CD, 0xE6C0},{0x78CE, 0xE6C5},{0x78CF, 0xE6C2},{0x78D0, 0xBD59},
- {0x78D1, 0xE6C4},{0x78D4, 0xE6C6},{0x78D5, 0xBD57},{0x78DA, 0xBF6A},{0x78DB, 0xEAA8},{0x78DD, 0xEAA2},{0x78DE, 0xEAA6},{0x78DF, 0xEAAC},
- {0x78E0, 0xEAAD},{0x78E1, 0xEAA9},{0x78E2, 0xEAAA},{0x78E3, 0xEAA7},{0x78E5, 0xEAA4},{0x78E7, 0xBF6C},{0x78E8, 0xBF69},{0x78E9, 0xEAA3},
- {0x78EA, 0xEAA5},{0x78EC, 0xBF6B},{0x78ED, 0xEAAB},{0x78EF, 0xC146},{0x78F2, 0xEDAA},{0x78F3, 0xEDA5},{0x78F4, 0xC145},{0x78F7, 0xC143},
- {0x78F9, 0xEDAC},{0x78FA, 0xC144},{0x78FB, 0xEDA8},{0x78FC, 0xEDA9},{0x78FD, 0xEDA6},{0x78FE, 0xEDAD},{0x78FF, 0xF056},{0x7901, 0xC147},
- {0x7902, 0xEDA7},{0x7904, 0xEDAE},{0x7905, 0xEDAB},{0x7909, 0xF05A},{0x790C, 0xF057},{0x790E, 0xC2A6},{0x7910, 0xF05B},{0x7911, 0xF05D},
- {0x7912, 0xF05C},{0x7913, 0xF058},{0x7914, 0xF059},{0x7917, 0xF2A3},{0x7919, 0xC3AA},{0x791B, 0xF27E},{0x791C, 0xF2A2},{0x791D, 0xF27D},
- {0x791E, 0xF2A4},{0x7921, 0xF2A1},{0x7923, 0xF47A},{0x7924, 0xF47D},{0x7925, 0xF479},{0x7926, 0xC471},{0x7927, 0xF47B},{0x7928, 0xF47C},
- {0x7929, 0xF47E},{0x792A, 0xC472},{0x792B, 0xC474},{0x792C, 0xC473},{0x792D, 0xF5E1},{0x792F, 0xF5E3},{0x7931, 0xF5E2},{0x7935, 0xF6F6},
- {0x7938, 0xF8B5},{0x7939, 0xF8FA},{0x793A, 0xA5DC},{0x793D, 0xCB72},{0x793E, 0xAAC0},{0x793F, 0xCDA3},{0x7940, 0xAAC1},{0x7941, 0xAAC2},
- {0x7942, 0xCDA2},{0x7944, 0xCFF8},{0x7945, 0xCFF7},{0x7946, 0xACE6},{0x7947, 0xACE9},{0x7948, 0xACE8},{0x7949, 0xACE7},{0x794A, 0xCFF4},
- {0x794B, 0xCFF6},{0x794C, 0xCFF5},{0x794F, 0xD2E8},{0x7950, 0xAFA7},{0x7951, 0xD2EC},{0x7952, 0xD2EB},{0x7953, 0xD2EA},{0x7954, 0xD2E6},
- {0x7955, 0xAFA6},{0x7956, 0xAFAA},{0x7957, 0xAFAD},{0x795A, 0xAFAE},{0x795B, 0xD2E7},{0x795C, 0xD2E9},{0x795D, 0xAFAC},{0x795E, 0xAFAB},
- {0x795F, 0xAFA9},{0x7960, 0xAFA8},{0x7961, 0xD6C2},{0x7963, 0xD6C0},{0x7964, 0xD6BC},{0x7965, 0xB2BB},{0x7967, 0xD6BD},{0x7968, 0xB2BC},
- {0x7969, 0xD6BE},{0x796A, 0xD6BF},{0x796B, 0xD6C1},{0x796D, 0xB2BD},{0x7970, 0xDAD5},{0x7972, 0xDAD4},{0x7973, 0xDAD3},{0x7974, 0xDAD2},
- {0x7979, 0xDEF6},{0x797A, 0xB852},{0x797C, 0xDEF3},{0x797D, 0xDEF5},{0x797F, 0xB853},{0x7981, 0xB854},{0x7982, 0xDEF4},{0x7988, 0xE341},
- {0x798A, 0xE2F9},{0x798B, 0xE2FA},{0x798D, 0xBAD7},{0x798E, 0xBAD5},{0x798F, 0xBAD6},{0x7990, 0xE343},{0x7992, 0xE342},{0x7993, 0xE2FE},
- {0x7994, 0xE2FD},{0x7995, 0xE2FC},{0x7996, 0xE2FB},{0x7997, 0xE340},{0x7998, 0xE2F8},{0x799A, 0xE6CB},{0x799B, 0xE6D0},{0x799C, 0xE6CE},
- {0x79A0, 0xE6CD},{0x79A1, 0xE6CC},{0x79A2, 0xE6CF},{0x79A4, 0xEAAE},{0x79A6, 0xBF6D},{0x79A7, 0xC148},{0x79A8, 0xEDB0},{0x79AA, 0xC149},
- {0x79AB, 0xEDAF},{0x79AC, 0xF05F},{0x79AD, 0xF05E},{0x79AE, 0xC2A7},{0x79B0, 0xF2A5},{0x79B1, 0xC3AB},{0x79B2, 0xF4A1},{0x79B3, 0xC5A1},
- {0x79B4, 0xF6F7},{0x79B6, 0xF8B7},{0x79B7, 0xF8B6},{0x79B8, 0xC9A8},{0x79B9, 0xACEA},{0x79BA, 0xACEB},{0x79BB, 0xD6C3},{0x79BD, 0xB856},
- {0x79BE, 0xA5DD},{0x79BF, 0xA872},{0x79C0, 0xA871},{0x79C1, 0xA870},{0x79C5, 0xCDA4},{0x79C8, 0xAAC4},{0x79C9, 0xAAC3},{0x79CB, 0xACEE},
- {0x79CD, 0xCFFA},{0x79CE, 0xCFFD},{0x79CF, 0xCFFB},{0x79D1, 0xACEC},{0x79D2, 0xACED},{0x79D5, 0xCFF9},{0x79D6, 0xCFFC},{0x79D8, 0xAFB5},
- {0x79DC, 0xD2F3},{0x79DD, 0xD2F5},{0x79DE, 0xD2F4},{0x79DF, 0xAFB2},{0x79E0, 0xD2EF},{0x79E3, 0xAFB0},{0x79E4, 0xAFAF},{0x79E6, 0xAFB3},
- {0x79E7, 0xAFB1},{0x79E9, 0xAFB4},{0x79EA, 0xD2F2},{0x79EB, 0xD2ED},{0x79EC, 0xD2EE},{0x79ED, 0xD2F1},{0x79EE, 0xD2F0},{0x79F6, 0xD6C6},
- {0x79F7, 0xD6C7},{0x79F8, 0xD6C5},{0x79FA, 0xD6C4},{0x79FB, 0xB2BE},{0x7A00, 0xB57D},{0x7A02, 0xDAD6},{0x7A03, 0xDAD8},{0x7A04, 0xDADA},
- {0x7A05, 0xB57C},{0x7A08, 0xB57A},{0x7A0A, 0xDAD7},{0x7A0B, 0xB57B},{0x7A0C, 0xDAD9},{0x7A0D, 0xB579},{0x7A10, 0xDF41},{0x7A11, 0xDEF7},
- {0x7A12, 0xDEFA},{0x7A13, 0xDEFE},{0x7A14, 0xB85A},{0x7A15, 0xDEFC},{0x7A17, 0xDEFB},{0x7A18, 0xDEF8},{0x7A19, 0xDEF9},{0x7A1A, 0xB858},
- {0x7A1B, 0xDF40},{0x7A1C, 0xB857},{0x7A1E, 0xB85C},{0x7A1F, 0xB85B},{0x7A20, 0xB859},{0x7A22, 0xDEFD},{0x7A26, 0xE349},{0x7A28, 0xE348},
- {0x7A2B, 0xE344},{0x7A2E, 0xBAD8},{0x7A2F, 0xE347},{0x7A30, 0xE346},{0x7A31, 0xBAD9},{0x7A37, 0xBD5E},{0x7A39, 0xE6D2},{0x7A3B, 0xBD5F},
- {0x7A3C, 0xBD5B},{0x7A3D, 0xBD5D},{0x7A3F, 0xBD5A},{0x7A40, 0xBD5C},{0x7A44, 0xEAAF},{0x7A46, 0xBF70},{0x7A47, 0xEAB1},{0x7A48, 0xEAB0},
- {0x7A4A, 0xE345},{0x7A4B, 0xBF72},{0x7A4C, 0xBF71},{0x7A4D, 0xBF6E},{0x7A4E, 0xBF6F},{0x7A54, 0xEDB5},{0x7A56, 0xEDB3},{0x7A57, 0xC14A},
- {0x7A58, 0xEDB4},{0x7A5A, 0xEDB6},{0x7A5B, 0xEDB2},{0x7A5C, 0xEDB1},{0x7A5F, 0xF060},{0x7A60, 0xC2AA},{0x7A61, 0xC2A8},{0x7A62, 0xC2A9},
- {0x7A67, 0xF2A6},{0x7A68, 0xF2A7},{0x7A69, 0xC3AD},{0x7A6B, 0xC3AC},{0x7A6C, 0xF4A3},{0x7A6D, 0xF4A4},{0x7A6E, 0xF4A2},{0x7A70, 0xF6F8},
- {0x7A71, 0xF6F9},{0x7A74, 0xA5DE},{0x7A75, 0xCA48},{0x7A76, 0xA873},{0x7A78, 0xCDA5},{0x7A79, 0xAAC6},{0x7A7A, 0xAAC5},{0x7A7B, 0xCDA6},
- {0x7A7E, 0xD040},{0x7A7F, 0xACEF},{0x7A80, 0xCFFE},{0x7A81, 0xACF0},{0x7A84, 0xAFB6},{0x7A85, 0xD2F8},{0x7A86, 0xD2F6},{0x7A87, 0xD2FC},
- {0x7A88, 0xAFB7},{0x7A89, 0xD2F7},{0x7A8A, 0xD2FB},{0x7A8B, 0xD2F9},{0x7A8C, 0xD2FA},{0x7A8F, 0xD6C8},{0x7A90, 0xD6CA},{0x7A92, 0xB2BF},
- {0x7A94, 0xD6C9},{0x7A95, 0xB2C0},{0x7A96, 0xB5A2},{0x7A97, 0xB5A1},{0x7A98, 0xB57E},{0x7A99, 0xDADB},{0x7A9E, 0xDF44},{0x7A9F, 0xB85D},
- {0x7AA0, 0xB85E},{0x7AA2, 0xDF43},{0x7AA3, 0xDF42},{0x7AA8, 0xE34A},{0x7AA9, 0xBADB},{0x7AAA, 0xBADA},{0x7AAB, 0xE34B},{0x7AAC, 0xE34C},
- {0x7AAE, 0xBD61},{0x7AAF, 0xBD60},{0x7AB1, 0xEAB5},{0x7AB2, 0xE6D3},{0x7AB3, 0xE6D5},{0x7AB4, 0xE6D4},{0x7AB5, 0xEAB4},{0x7AB6, 0xEAB2},
- {0x7AB7, 0xEAB6},{0x7AB8, 0xEAB3},{0x7ABA, 0xBF73},{0x7ABE, 0xEDB7},{0x7ABF, 0xC14B},{0x7AC0, 0xEDB8},{0x7AC1, 0xEDB9},{0x7AC4, 0xC2AB},
- {0x7AC5, 0xC2AC},{0x7AC7, 0xC475},{0x7ACA, 0xC5D1},{0x7ACB, 0xA5DF},{0x7AD1, 0xD041},{0x7AD8, 0xD2FD},{0x7AD9, 0xAFB8},{0x7ADF, 0xB3BA},
- {0x7AE0, 0xB3B9},{0x7AE3, 0xB5A4},{0x7AE4, 0xDADD},{0x7AE5, 0xB5A3},{0x7AE6, 0xDADC},{0x7AEB, 0xDF45},{0x7AED, 0xBADC},{0x7AEE, 0xE34D},
- {0x7AEF, 0xBADD},{0x7AF6, 0xC476},{0x7AF7, 0xF4A5},{0x7AF9, 0xA6CB},{0x7AFA, 0xAAC7},{0x7AFB, 0xCDA7},{0x7AFD, 0xACF2},{0x7AFF, 0xACF1},
- {0x7B00, 0xD042},{0x7B01, 0xD043},{0x7B04, 0xD340},{0x7B05, 0xD342},{0x7B06, 0xAFB9},{0x7B08, 0xD344},{0x7B09, 0xD347},{0x7B0A, 0xD345},
- {0x7B0E, 0xD346},{0x7B0F, 0xD343},{0x7B10, 0xD2FE},{0x7B11, 0xAFBA},{0x7B12, 0xD348},{0x7B13, 0xD341},{0x7B18, 0xD6D3},{0x7B19, 0xB2C6},
- {0x7B1A, 0xD6DC},{0x7B1B, 0xB2C3},{0x7B1D, 0xD6D5},{0x7B1E, 0xB2C7},{0x7B20, 0xB2C1},{0x7B22, 0xD6D0},{0x7B23, 0xD6DD},{0x7B24, 0xD6D1},
- {0x7B25, 0xD6CE},{0x7B26, 0xB2C5},{0x7B28, 0xB2C2},{0x7B2A, 0xD6D4},{0x7B2B, 0xD6D7},{0x7B2C, 0xB2C4},{0x7B2D, 0xD6D8},{0x7B2E, 0xB2C8},
- {0x7B2F, 0xD6D9},{0x7B30, 0xD6CF},{0x7B31, 0xD6D6},{0x7B32, 0xD6DA},{0x7B33, 0xD6D2},{0x7B34, 0xD6CD},{0x7B35, 0xD6CB},{0x7B38, 0xD6DB},
- {0x7B3B, 0xDADF},{0x7B40, 0xDAE4},{0x7B44, 0xDAE0},{0x7B45, 0xDAE6},{0x7B46, 0xB5A7},{0x7B47, 0xD6CC},{0x7B48, 0xDAE1},{0x7B49, 0xB5A5},
- {0x7B4A, 0xDADE},{0x7B4B, 0xB5AC},{0x7B4C, 0xDAE2},{0x7B4D, 0xB5AB},{0x7B4E, 0xDAE3},{0x7B4F, 0xB5AD},{0x7B50, 0xB5A8},{0x7B51, 0xB5AE},
- {0x7B52, 0xB5A9},{0x7B54, 0xB5AA},{0x7B56, 0xB5A6},{0x7B58, 0xDAE5},{0x7B60, 0xB861},{0x7B61, 0xDF50},{0x7B63, 0xDF53},{0x7B64, 0xDF47},
- {0x7B65, 0xDF4C},{0x7B66, 0xDF46},{0x7B67, 0xB863},{0x7B69, 0xDF4A},{0x7B6D, 0xDF48},{0x7B6E, 0xB862},{0x7B70, 0xDF4F},{0x7B71, 0xDF4E},
- {0x7B72, 0xDF4B},{0x7B73, 0xDF4D},{0x7B74, 0xDF49},{0x7B75, 0xBAE1},{0x7B76, 0xDF52},{0x7B77, 0xB85F},{0x7B78, 0xDF51},{0x7B82, 0xE35D},
- {0x7B84, 0xBAE8},{0x7B85, 0xE358},{0x7B87, 0xBAE7},{0x7B88, 0xE34E},{0x7B8A, 0xE350},{0x7B8B, 0xBAE0},{0x7B8C, 0xE355},{0x7B8D, 0xE354},
- {0x7B8E, 0xE357},{0x7B8F, 0xBAE5},{0x7B90, 0xE352},{0x7B91, 0xE351},{0x7B94, 0xBAE4},{0x7B95, 0xBADF},{0x7B96, 0xE353},{0x7B97, 0xBAE2},
- {0x7B98, 0xE359},{0x7B99, 0xE35B},{0x7B9B, 0xE356},{0x7B9C, 0xE34F},{0x7B9D, 0xBAE3},{0x7BA0, 0xBD69},{0x7BA1, 0xBADE},{0x7BA4, 0xE35C},
- {0x7BAC, 0xE6D9},{0x7BAD, 0xBD62},{0x7BAF, 0xE6DB},{0x7BB1, 0xBD63},{0x7BB4, 0xBD65},{0x7BB5, 0xE6DE},{0x7BB7, 0xE6D6},{0x7BB8, 0xBAE6},
- {0x7BB9, 0xE6DC},{0x7BBE, 0xE6D8},{0x7BC0, 0xB860},{0x7BC1, 0xBD68},{0x7BC4, 0xBD64},{0x7BC6, 0xBD66},{0x7BC7, 0xBD67},{0x7BC9, 0xBF76},
- {0x7BCA, 0xE6DD},{0x7BCB, 0xE6D7},{0x7BCC, 0xBD6A},{0x7BCE, 0xE6DA},{0x7BD4, 0xEAC0},{0x7BD5, 0xEABB},{0x7BD8, 0xEAC5},{0x7BD9, 0xBF74},
- {0x7BDA, 0xEABD},{0x7BDB, 0xBF78},{0x7BDC, 0xEAC3},{0x7BDD, 0xEABA},{0x7BDE, 0xEAB7},{0x7BDF, 0xEAC6},{0x7BE0, 0xC151},{0x7BE1, 0xBF79},
- {0x7BE2, 0xEAC2},{0x7BE3, 0xEAB8},{0x7BE4, 0xBF77},{0x7BE5, 0xEABC},{0x7BE6, 0xBF7B},{0x7BE7, 0xEAB9},{0x7BE8, 0xEABE},{0x7BE9, 0xBF7A},
- {0x7BEA, 0xEAC1},{0x7BEB, 0xEAC4},{0x7BF0, 0xEDCB},{0x7BF1, 0xEDCC},{0x7BF2, 0xEDBC},{0x7BF3, 0xEDC3},{0x7BF4, 0xEDC1},{0x7BF7, 0xC14F},
- {0x7BF8, 0xEDC8},{0x7BF9, 0xEABF},{0x7BFB, 0xEDBF},{0x7BFD, 0xEDC9},{0x7BFE, 0xC14E},{0x7BFF, 0xEDBE},{0x7C00, 0xEDBD},{0x7C01, 0xEDC7},
- {0x7C02, 0xEDC4},{0x7C03, 0xEDC6},{0x7C05, 0xEDBA},{0x7C06, 0xEDCA},{0x7C07, 0xC14C},{0x7C09, 0xEDC5},{0x7C0A, 0xEDCE},{0x7C0B, 0xEDC2},
- {0x7C0C, 0xC150},{0x7C0D, 0xC14D},{0x7C0E, 0xEDC0},{0x7C0F, 0xEDBB},{0x7C10, 0xEDCD},{0x7C11, 0xBF75},{0x7C19, 0xF063},{0x7C1C, 0xF061},
- {0x7C1D, 0xF067},{0x7C1E, 0xC2B0},{0x7C1F, 0xF065},{0x7C20, 0xF064},{0x7C21, 0xC2B2},{0x7C22, 0xF06A},{0x7C23, 0xC2B1},{0x7C25, 0xF06B},
- {0x7C26, 0xF068},{0x7C27, 0xC2AE},{0x7C28, 0xF069},{0x7C29, 0xF062},{0x7C2A, 0xC2AF},{0x7C2B, 0xC2AD},{0x7C2C, 0xF2AB},{0x7C2D, 0xF066},
- {0x7C30, 0xF06C},{0x7C33, 0xF2A8},{0x7C37, 0xC3B2},{0x7C38, 0xC3B0},{0x7C39, 0xF2AA},{0x7C3B, 0xF2AC},{0x7C3C, 0xF2A9},{0x7C3D, 0xC3B1},
- {0x7C3E, 0xC3AE},{0x7C3F, 0xC3AF},{0x7C40, 0xC3B3},{0x7C43, 0xC478},{0x7C45, 0xF4AA},{0x7C47, 0xF4A9},{0x7C48, 0xF4A7},{0x7C49, 0xF4A6},
- {0x7C4A, 0xF4A8},{0x7C4C, 0xC477},{0x7C4D, 0xC479},{0x7C50, 0xC4F0},{0x7C53, 0xF5E5},{0x7C54, 0xF5E4},{0x7C57, 0xF6FA},{0x7C59, 0xF6FC},
- {0x7C5A, 0xF6FE},{0x7C5B, 0xF6FD},{0x7C5C, 0xF6FB},{0x7C5F, 0xC5A3},{0x7C60, 0xC5A2},{0x7C63, 0xC5D3},{0x7C64, 0xC5D2},{0x7C65, 0xC5D4},
- {0x7C66, 0xF7ED},{0x7C67, 0xF7EC},{0x7C69, 0xF8FB},{0x7C6A, 0xF8B8},{0x7C6B, 0xF8FC},{0x7C6C, 0xC658},{0x7C6E, 0xC659},{0x7C6F, 0xF96D},
- {0x7C72, 0xC67E},{0x7C73, 0xA6CC},{0x7C75, 0xCDA8},{0x7C78, 0xD045},{0x7C79, 0xD046},{0x7C7A, 0xD044},{0x7C7D, 0xACF3},{0x7C7F, 0xD047},
- {0x7C80, 0xD048},{0x7C81, 0xD049},{0x7C84, 0xD349},{0x7C85, 0xD34F},{0x7C88, 0xD34D},{0x7C89, 0xAFBB},{0x7C8A, 0xD34B},{0x7C8C, 0xD34C},
- {0x7C8D, 0xD34E},{0x7C91, 0xD34A},{0x7C92, 0xB2C9},{0x7C94, 0xD6DE},{0x7C95, 0xB2CB},{0x7C96, 0xD6E0},{0x7C97, 0xB2CA},{0x7C98, 0xD6DF},
- {0x7C9E, 0xDAE8},{0x7C9F, 0xB5AF},{0x7CA1, 0xDAEA},{0x7CA2, 0xDAE7},{0x7CA3, 0xD6E1},{0x7CA5, 0xB5B0},{0x7CA8, 0xDAE9},{0x7CAF, 0xDF56},
- {0x7CB1, 0xB864},{0x7CB2, 0xDF54},{0x7CB3, 0xB865},{0x7CB4, 0xDF55},{0x7CB5, 0xB866},{0x7CB9, 0xBAE9},{0x7CBA, 0xE361},{0x7CBB, 0xE35E},
- {0x7CBC, 0xE360},{0x7CBD, 0xBAEA},{0x7CBE, 0xBAEB},{0x7CBF, 0xE35F},{0x7CC5, 0xE6DF},{0x7CC8, 0xE6E0},{0x7CCA, 0xBD6B},{0x7CCB, 0xE6E2},
- {0x7CCC, 0xE6E1},{0x7CCE, 0xA261},{0x7CD0, 0xEACA},{0x7CD1, 0xEACB},{0x7CD2, 0xEAC7},{0x7CD4, 0xEAC8},{0x7CD5, 0xBF7C},{0x7CD6, 0xBF7D},
- {0x7CD7, 0xEAC9},{0x7CD9, 0xC157},{0x7CDC, 0xC153},{0x7CDD, 0xC158},{0x7CDE, 0xC154},{0x7CDF, 0xC156},{0x7CE0, 0xC152},{0x7CE2, 0xC155},
- {0x7CE7, 0xC2B3},{0x7CE8, 0xEDCF},{0x7CEA, 0xF2AE},{0x7CEC, 0xF2AD},{0x7CEE, 0xF4AB},{0x7CEF, 0xC47A},{0x7CF0, 0xC47B},{0x7CF1, 0xF741},
- {0x7CF2, 0xF5E6},{0x7CF4, 0xF740},{0x7CF6, 0xF8FD},{0x7CF7, 0xF9A4},{0x7CF8, 0xA6CD},{0x7CFB, 0xA874},{0x7CFD, 0xCDA9},{0x7CFE, 0xAAC8},
- {0x7D00, 0xACF6},{0x7D01, 0xD04C},{0x7D02, 0xACF4},{0x7D03, 0xD04A},{0x7D04, 0xACF9},{0x7D05, 0xACF5},{0x7D06, 0xACFA},{0x7D07, 0xACF8},
- {0x7D08, 0xD04B},{0x7D09, 0xACF7},{0x7D0A, 0xAFBF},{0x7D0B, 0xAFBE},{0x7D0C, 0xD35A},{0x7D0D, 0xAFC7},{0x7D0E, 0xD353},{0x7D0F, 0xD359},
- {0x7D10, 0xAFC3},{0x7D11, 0xD352},{0x7D12, 0xD358},{0x7D13, 0xD356},{0x7D14, 0xAFC2},{0x7D15, 0xAFC4},{0x7D16, 0xD355},{0x7D17, 0xAFBD},
- {0x7D18, 0xD354},{0x7D19, 0xAFC8},{0x7D1A, 0xAFC5},{0x7D1B, 0xAFC9},{0x7D1C, 0xAFC6},{0x7D1D, 0xD351},{0x7D1E, 0xD350},{0x7D1F, 0xD357},
- {0x7D20, 0xAFC0},{0x7D21, 0xAFBC},{0x7D22, 0xAFC1},{0x7D28, 0xD6F0},{0x7D29, 0xD6E9},{0x7D2B, 0xB5B5},{0x7D2C, 0xD6E8},{0x7D2E, 0xB2CF},
- {0x7D2F, 0xB2D6},{0x7D30, 0xB2D3},{0x7D31, 0xB2D9},{0x7D32, 0xB2D8},{0x7D33, 0xB2D4},{0x7D35, 0xD6E2},{0x7D36, 0xD6E5},{0x7D38, 0xD6E4},
- {0x7D39, 0xB2D0},{0x7D3A, 0xD6E6},{0x7D3B, 0xD6EF},{0x7D3C, 0xB2D1},{0x7D3D, 0xD6E3},{0x7D3E, 0xD6EC},{0x7D3F, 0xD6ED},{0x7D40, 0xB2D2},
- {0x7D41, 0xD6EA},{0x7D42, 0xB2D7},{0x7D43, 0xB2CD},{0x7D44, 0xB2D5},{0x7D45, 0xD6E7},{0x7D46, 0xB2CC},{0x7D47, 0xD6EB},{0x7D4A, 0xD6EE},
- {0x7D4E, 0xDAFB},{0x7D4F, 0xDAF2},{0x7D50, 0xB5B2},{0x7D51, 0xDAF9},{0x7D52, 0xDAF6},{0x7D53, 0xDAEE},{0x7D54, 0xDAF7},{0x7D55, 0xB5B4},
- {0x7D56, 0xDAEF},{0x7D58, 0xDAEB},{0x7D5B, 0xB86C},{0x7D5C, 0xDAF4},{0x7D5E, 0xB5B1},{0x7D5F, 0xDAFA},{0x7D61, 0xB5B8},{0x7D62, 0xB5BA},
- {0x7D63, 0xDAED},{0x7D66, 0xB5B9},{0x7D67, 0xDAF0},{0x7D68, 0xB5B3},{0x7D69, 0xDAF8},{0x7D6A, 0xDAF1},{0x7D6B, 0xDAF5},{0x7D6D, 0xDAF3},
- {0x7D6E, 0xB5B6},{0x7D6F, 0xDAEC},{0x7D70, 0xB5BB},{0x7D71, 0xB2CE},{0x7D72, 0xB5B7},{0x7D73, 0xB5BC},{0x7D79, 0xB868},{0x7D7A, 0xDF5D},
- {0x7D7B, 0xDF5F},{0x7D7C, 0xDF61},{0x7D7D, 0xDF65},{0x7D7F, 0xDF5B},{0x7D80, 0xDF59},{0x7D81, 0xB86A},{0x7D83, 0xDF60},{0x7D84, 0xDF64},
- {0x7D85, 0xDF5C},{0x7D86, 0xDF58},{0x7D88, 0xDF57},{0x7D8C, 0xDF62},{0x7D8D, 0xDF5A},{0x7D8E, 0xDF5E},{0x7D8F, 0xB86B},{0x7D91, 0xB869},
- {0x7D92, 0xDF66},{0x7D93, 0xB867},{0x7D94, 0xDF63},{0x7D96, 0xE372},{0x7D9C, 0xBAEE},{0x7D9D, 0xE36A},{0x7D9E, 0xBD78},{0x7D9F, 0xE374},
- {0x7DA0, 0xBAF1},{0x7DA1, 0xE378},{0x7DA2, 0xBAF7},{0x7DA3, 0xE365},{0x7DA6, 0xE375},{0x7DA7, 0xE362},{0x7DA9, 0xE377},{0x7DAA, 0xE366},
- {0x7DAC, 0xBAFE},{0x7DAD, 0xBAFB},{0x7DAE, 0xE376},{0x7DAF, 0xE370},{0x7DB0, 0xBAED},{0x7DB1, 0xBAF5},{0x7DB2, 0xBAF4},{0x7DB4, 0xBAF3},
- {0x7DB5, 0xBAF9},{0x7DB7, 0xE363},{0x7DB8, 0xBAFA},{0x7DB9, 0xE371},{0x7DBA, 0xBAF6},{0x7DBB, 0xBAEC},{0x7DBC, 0xE373},{0x7DBD, 0xBAEF},
- {0x7DBE, 0xBAF0},{0x7DBF, 0xBAF8},{0x7DC0, 0xE368},{0x7DC1, 0xE367},{0x7DC2, 0xE364},{0x7DC4, 0xE36C},{0x7DC5, 0xE369},{0x7DC6, 0xE36D},
- {0x7DC7, 0xBAFD},{0x7DC9, 0xE379},{0x7DCA, 0xBAF2},{0x7DCB, 0xE36E},{0x7DCC, 0xE36F},{0x7DCE, 0xE36B},{0x7DD2, 0xBAFC},{0x7DD7, 0xE6E7},
- {0x7DD8, 0xBD70},{0x7DD9, 0xBD79},{0x7DDA, 0xBD75},{0x7DDB, 0xE6E4},{0x7DDD, 0xBD72},{0x7DDE, 0xBD76},{0x7DDF, 0xE6F0},{0x7DE0, 0xBD6C},
- {0x7DE1, 0xE6E8},{0x7DE3, 0xBD74},{0x7DE6, 0xE6EB},{0x7DE7, 0xE6E6},{0x7DE8, 0xBD73},{0x7DE9, 0xBD77},{0x7DEA, 0xE6E5},{0x7DEC, 0xBD71},
- {0x7DEE, 0xE6EF},{0x7DEF, 0xBD6E},{0x7DF0, 0xE6EE},{0x7DF1, 0xE6ED},{0x7DF2, 0xBD7A},{0x7DF3, 0xE572},{0x7DF4, 0xBD6D},{0x7DF6, 0xE6EC},
- {0x7DF7, 0xE6E3},{0x7DF9, 0xBD7B},{0x7DFA, 0xE6EA},{0x7DFB, 0xBD6F},{0x7E03, 0xE6E9},{0x7E08, 0xBFA2},{0x7E09, 0xBFA7},{0x7E0A, 0xBF7E},
- {0x7E0B, 0xEAD8},{0x7E0C, 0xEACF},{0x7E0D, 0xEADB},{0x7E0E, 0xEAD3},{0x7E0F, 0xEAD9},{0x7E10, 0xBFA8},{0x7E11, 0xBFA1},{0x7E12, 0xEACC},
- {0x7E13, 0xEAD2},{0x7E14, 0xEADC},{0x7E15, 0xEAD5},{0x7E16, 0xEADA},{0x7E17, 0xEACE},{0x7E1A, 0xEAD6},{0x7E1B, 0xBFA3},{0x7E1C, 0xEAD4},
- {0x7E1D, 0xBFA6},{0x7E1E, 0xBFA5},{0x7E1F, 0xEAD0},{0x7E20, 0xEAD1},{0x7E21, 0xEACD},{0x7E22, 0xEAD7},{0x7E23, 0xBFA4},{0x7E24, 0xEADE},
- {0x7E25, 0xEADD},{0x7E29, 0xEDDA},{0x7E2A, 0xEDD6},{0x7E2B, 0xC15F},{0x7E2D, 0xEDD0},{0x7E2E, 0xC159},{0x7E2F, 0xC169},{0x7E30, 0xEDDC},
- {0x7E31, 0xC161},{0x7E32, 0xC15D},{0x7E33, 0xEDD3},{0x7E34, 0xC164},{0x7E35, 0xC167},{0x7E36, 0xEDDE},{0x7E37, 0xC15C},{0x7E38, 0xEDD5},
- {0x7E39, 0xC165},{0x7E3A, 0xEDE0},{0x7E3B, 0xEDDD},{0x7E3C, 0xEDD1},{0x7E3D, 0xC160},{0x7E3E, 0xC15A},{0x7E3F, 0xC168},{0x7E40, 0xEDD8},
- {0x7E41, 0xC163},{0x7E42, 0xEDD2},{0x7E43, 0xC15E},{0x7E44, 0xEDDF},{0x7E45, 0xC162},{0x7E46, 0xC15B},{0x7E47, 0xEDD9},{0x7E48, 0xC166},
- {0x7E49, 0xEDD7},{0x7E4C, 0xEDDB},{0x7E50, 0xF06E},{0x7E51, 0xF074},{0x7E52, 0xC2B9},{0x7E53, 0xF077},{0x7E54, 0xC2B4},{0x7E55, 0xC2B5},
- {0x7E56, 0xF06F},{0x7E57, 0xF076},{0x7E58, 0xF071},{0x7E59, 0xC2BA},{0x7E5A, 0xC2B7},{0x7E5C, 0xF06D},{0x7E5E, 0xC2B6},{0x7E5F, 0xF073},
- {0x7E60, 0xF075},{0x7E61, 0xC2B8},{0x7E62, 0xF072},{0x7E63, 0xF070},{0x7E68, 0xF2B8},{0x7E69, 0xC3B7},{0x7E6A, 0xC3B8},{0x7E6B, 0xC3B4},
- {0x7E6D, 0xC3B5},{0x7E6F, 0xF2B4},{0x7E70, 0xF2B2},{0x7E72, 0xF2B6},{0x7E73, 0xC3BA},{0x7E74, 0xF2B7},{0x7E75, 0xF2B0},{0x7E76, 0xF2AF},
- {0x7E77, 0xF2B3},{0x7E78, 0xF2B1},{0x7E79, 0xC3B6},{0x7E7A, 0xF2B5},{0x7E7B, 0xF4AC},{0x7E7C, 0xC47E},{0x7E7D, 0xC47D},{0x7E7E, 0xF4AD},
- {0x7E80, 0xF4AF},{0x7E81, 0xF4AE},{0x7E82, 0xC4A1},{0x7E86, 0xF5EB},{0x7E87, 0xF5E8},{0x7E88, 0xF5E9},{0x7E8A, 0xF5E7},{0x7E8B, 0xF5EA},
- {0x7E8C, 0xC4F2},{0x7E8D, 0xF5EC},{0x7E8F, 0xC4F1},{0x7E91, 0xF742},{0x7E93, 0xC5D5},{0x7E94, 0xC5D7},{0x7E95, 0xF7EE},{0x7E96, 0xC5D6},
- {0x7E97, 0xF8B9},{0x7E98, 0xF940},{0x7E99, 0xF942},{0x7E9A, 0xF8FE},{0x7E9B, 0xF941},{0x7E9C, 0xC66C},{0x7F36, 0xA6CE},{0x7F38, 0xACFB},
- {0x7F39, 0xD26F},{0x7F3A, 0xAFCA},{0x7F3D, 0xB2DA},{0x7F3E, 0xDAFC},{0x7F3F, 0xDAFD},{0x7F43, 0xEADF},{0x7F44, 0xC16A},{0x7F45, 0xEDE1},
- {0x7F48, 0xC2BB},{0x7F4A, 0xF2BA},{0x7F4B, 0xF2B9},{0x7F4C, 0xC4A2},{0x7F4D, 0xF5ED},{0x7F4F, 0xF743},{0x7F50, 0xC5F8},{0x7F51, 0xCA49},
- {0x7F54, 0xAAC9},{0x7F55, 0xA875},{0x7F58, 0xD04D},{0x7F5B, 0xD360},{0x7F5C, 0xD35B},{0x7F5D, 0xD35F},{0x7F5E, 0xD35D},{0x7F5F, 0xAFCB},
- {0x7F60, 0xD35E},{0x7F61, 0xD35C},{0x7F63, 0xD6F1},{0x7F65, 0xDAFE},{0x7F66, 0xDB40},{0x7F67, 0xDF69},{0x7F68, 0xDF6A},{0x7F69, 0xB86E},
- {0x7F6A, 0xB86F},{0x7F6B, 0xDF68},{0x7F6C, 0xDF6B},{0x7F6D, 0xDF67},{0x7F6E, 0xB86D},{0x7F70, 0xBB40},{0x7F72, 0xB870},{0x7F73, 0xE37A},
- {0x7F75, 0xBD7C},{0x7F76, 0xE6F1},{0x7F77, 0xBD7D},{0x7F79, 0xBFA9},{0x7F7A, 0xEAE2},{0x7F7B, 0xEAE0},{0x7F7C, 0xEAE1},{0x7F7D, 0xEDE4},
- {0x7F7E, 0xEDE3},{0x7F7F, 0xEDE2},{0x7F83, 0xF2BB},{0x7F85, 0xC3B9},{0x7F86, 0xF2BC},{0x7F87, 0xF744},{0x7F88, 0xC5F9},{0x7F89, 0xF8BA},
- {0x7F8A, 0xA6CF},{0x7F8B, 0xAACB},{0x7F8C, 0xAACA},{0x7F8D, 0xD04F},{0x7F8E, 0xACFC},{0x7F91, 0xD04E},{0x7F92, 0xD362},{0x7F94, 0xAFCC},
- {0x7F95, 0xD6F2},{0x7F96, 0xD361},{0x7F9A, 0xB2DC},{0x7F9B, 0xD6F5},{0x7F9C, 0xD6F3},{0x7F9D, 0xD6F4},{0x7F9E, 0xB2DB},{0x7FA0, 0xDB42},
- {0x7FA1, 0xDB43},{0x7FA2, 0xDB41},{0x7FA4, 0xB873},{0x7FA5, 0xDF6D},{0x7FA6, 0xDF6C},{0x7FA7, 0xDF6E},{0x7FA8, 0xB872},{0x7FA9, 0xB871},
- {0x7FAC, 0xE6F2},{0x7FAD, 0xE6F4},{0x7FAF, 0xBD7E},{0x7FB0, 0xE6F3},{0x7FB1, 0xEAE3},{0x7FB2, 0xBFAA},{0x7FB3, 0xF079},{0x7FB5, 0xF078},
- {0x7FB6, 0xC3BB},{0x7FB7, 0xF2BD},{0x7FB8, 0xC3BD},{0x7FB9, 0xC3BC},{0x7FBA, 0xF4B0},{0x7FBB, 0xF5EE},{0x7FBC, 0xC4F3},{0x7FBD, 0xA6D0},
- {0x7FBE, 0xD050},{0x7FBF, 0xACFD},{0x7FC0, 0xD365},{0x7FC1, 0xAFCE},{0x7FC2, 0xD364},{0x7FC3, 0xD363},{0x7FC5, 0xAFCD},{0x7FC7, 0xD6FB},
- {0x7FC9, 0xD6FD},{0x7FCA, 0xD6F6},{0x7FCB, 0xD6F7},{0x7FCC, 0xB2DD},{0x7FCD, 0xD6F8},{0x7FCE, 0xB2DE},{0x7FCF, 0xD6FC},{0x7FD0, 0xD6F9},
- {0x7FD1, 0xD6FA},{0x7FD2, 0xB2DF},{0x7FD4, 0xB5BE},{0x7FD5, 0xB5BF},{0x7FD7, 0xDB44},{0x7FDB, 0xDF6F},{0x7FDC, 0xDF70},{0x7FDE, 0xE37E},
- {0x7FDF, 0xBB43},{0x7FE0, 0xBB41},{0x7FE1, 0xBB42},{0x7FE2, 0xE37B},{0x7FE3, 0xE37C},{0x7FE5, 0xE37D},{0x7FE6, 0xE6F9},{0x7FE8, 0xE6FA},
- {0x7FE9, 0xBDA1},{0x7FEA, 0xE6F7},{0x7FEB, 0xE6F6},{0x7FEC, 0xE6F8},{0x7FED, 0xE6F5},{0x7FEE, 0xBFAD},{0x7FEF, 0xEAE4},{0x7FF0, 0xBFAB},
- {0x7FF1, 0xBFAC},{0x7FF2, 0xEDE6},{0x7FF3, 0xC16B},{0x7FF4, 0xEDE5},{0x7FF5, 0xEFA8},{0x7FF7, 0xF07A},{0x7FF8, 0xF07B},{0x7FF9, 0xC2BC},
- {0x7FFB, 0xC2BD},{0x7FFC, 0xC16C},{0x7FFD, 0xF2BE},{0x7FFE, 0xF2BF},{0x7FFF, 0xF4B1},{0x8000, 0xC4A3},{0x8001, 0xA6D1},{0x8003, 0xA6D2},
- {0x8004, 0xACFE},{0x8005, 0xAACC},{0x8006, 0xAFCF},{0x8007, 0xD051},{0x800B, 0xB5C0},{0x800C, 0xA6D3},{0x800D, 0xAD41},{0x800E, 0xD052},
- {0x800F, 0xD053},{0x8010, 0xAD40},{0x8011, 0xAD42},{0x8012, 0xA6D4},{0x8014, 0xD054},{0x8015, 0xAFD1},{0x8016, 0xD366},{0x8017, 0xAFD3},
- {0x8018, 0xAFD0},{0x8019, 0xAFD2},{0x801B, 0xD741},{0x801C, 0xB2E0},{0x801E, 0xD740},{0x801F, 0xD6FE},{0x8021, 0xDF71},{0x8024, 0xE3A1},
- {0x8026, 0xBDA2},{0x8028, 0xBFAE},{0x8029, 0xEAE6},{0x802A, 0xEAE5},{0x802C, 0xEDE7},{0x8030, 0xF5EF},{0x8033, 0xA6D5},{0x8034, 0xCB73},
- {0x8035, 0xCDAA},{0x8036, 0xAD43},{0x8037, 0xD055},{0x8039, 0xD368},{0x803D, 0xAFD4},{0x803E, 0xD367},{0x803F, 0xAFD5},{0x8043, 0xD743},
- {0x8046, 0xB2E2},{0x8047, 0xD742},{0x8048, 0xD744},{0x804A, 0xB2E1},{0x804F, 0xDB46},{0x8050, 0xDB47},{0x8051, 0xDB45},{0x8052, 0xB5C1},
- {0x8056, 0xB874},{0x8058, 0xB875},{0x805A, 0xBB45},{0x805C, 0xE3A3},{0x805D, 0xE3A2},{0x805E, 0xBB44},{0x8064, 0xE6FB},{0x8067, 0xE6FC},
- {0x806C, 0xEAE7},{0x806F, 0xC170},{0x8070, 0xC16F},{0x8071, 0xC16D},{0x8072, 0xC16E},{0x8073, 0xC171},{0x8075, 0xF07C},{0x8076, 0xC2BF},
- {0x8077, 0xC2BE},{0x8078, 0xF2C0},{0x8079, 0xF4B2},{0x807D, 0xC5A5},{0x807E, 0xC5A4},{0x807F, 0xA6D6},{0x8082, 0xD1FB},{0x8084, 0xB877},
- {0x8085, 0xB5C2},{0x8086, 0xB876},{0x8087, 0xBB46},{0x8089, 0xA6D7},{0x808A, 0xC9A9},{0x808B, 0xA6D8},{0x808C, 0xA6D9},{0x808F, 0xCDAB},
- {0x8090, 0xCB76},{0x8092, 0xCB77},{0x8093, 0xA877},{0x8095, 0xCB74},{0x8096, 0xA876},{0x8098, 0xA879},{0x8099, 0xCB75},{0x809A, 0xA87B},
- {0x809B, 0xA87A},{0x809C, 0xCB78},{0x809D, 0xA878},{0x80A1, 0xAAD1},{0x80A2, 0xAACF},{0x80A3, 0xCDAD},{0x80A5, 0xAACE},{0x80A9, 0xAAD3},
- {0x80AA, 0xAAD5},{0x80AB, 0xAAD2},{0x80AD, 0xCDB0},{0x80AE, 0xCDAC},{0x80AF, 0xAAD6},{0x80B1, 0xAAD0},{0x80B2, 0xA87C},{0x80B4, 0xAAD4},
- {0x80B5, 0xCDAF},{0x80B8, 0xCDAE},{0x80BA, 0xAACD},{0x80C2, 0xD05B},{0x80C3, 0xAD47},{0x80C4, 0xAD48},{0x80C5, 0xD05D},{0x80C7, 0xD057},
- {0x80C8, 0xD05A},{0x80C9, 0xD063},{0x80CA, 0xD061},{0x80CC, 0xAD49},{0x80CD, 0xD067},{0x80CE, 0xAD4C},{0x80CF, 0xD064},{0x80D0, 0xD05C},
- {0x80D1, 0xD059},{0x80D4, 0xDB49},{0x80D5, 0xD062},{0x80D6, 0xAD44},{0x80D7, 0xD065},{0x80D8, 0xD056},{0x80D9, 0xD05F},{0x80DA, 0xAD46},
- {0x80DB, 0xAD4B},{0x80DC, 0xD060},{0x80DD, 0xAD4F},{0x80DE, 0xAD4D},{0x80E0, 0xD058},{0x80E1, 0xAD4A},{0x80E3, 0xD05E},{0x80E4, 0xAD4E},
- {0x80E5, 0xAD45},{0x80E6, 0xD066},{0x80ED, 0xAFDA},{0x80EF, 0xAFE3},{0x80F0, 0xAFD8},{0x80F1, 0xAFD6},{0x80F2, 0xD36A},{0x80F3, 0xAFDE},
- {0x80F4, 0xAFDB},{0x80F5, 0xD36C},{0x80F8, 0xAFDD},{0x80F9, 0xD36B},{0x80FA, 0xD369},{0x80FB, 0xD36E},{0x80FC, 0xAFE2},{0x80FD, 0xAFE0},
- {0x80FE, 0xDB48},{0x8100, 0xD36F},{0x8101, 0xD36D},{0x8102, 0xAFD7},{0x8105, 0xAFD9},{0x8106, 0xAFDC},{0x8108, 0xAFDF},{0x810A, 0xAFE1},
- {0x8115, 0xD74E},{0x8116, 0xB2E4},{0x8118, 0xD745},{0x8119, 0xD747},{0x811B, 0xD748},{0x811D, 0xD750},{0x811E, 0xD74C},{0x811F, 0xD74A},
- {0x8121, 0xD74D},{0x8122, 0xD751},{0x8123, 0xB2E5},{0x8124, 0xB2E9},{0x8125, 0xD746},{0x8127, 0xD74F},{0x8129, 0xB2E7},{0x812B, 0xB2E6},
- {0x812C, 0xD74B},{0x812D, 0xD749},{0x812F, 0xB2E3},{0x8130, 0xB2E8},{0x8139, 0xB5C8},{0x813A, 0xDB51},{0x813D, 0xDB4F},{0x813E, 0xB5CA},
- {0x8143, 0xDB4A},{0x8144, 0xDFA1},{0x8146, 0xB5C9},{0x8147, 0xDB4E},{0x814A, 0xDB4B},{0x814B, 0xB5C5},{0x814C, 0xB5CB},{0x814D, 0xDB50},
- {0x814E, 0xB5C7},{0x814F, 0xDB4D},{0x8150, 0xBB47},{0x8151, 0xB5C6},{0x8152, 0xDB4C},{0x8153, 0xB5CC},{0x8154, 0xB5C4},{0x8155, 0xB5C3},
- {0x815B, 0xDF77},{0x815C, 0xDF75},{0x815E, 0xDF7B},{0x8160, 0xDF73},{0x8161, 0xDFA2},{0x8162, 0xDF78},{0x8164, 0xDF72},{0x8165, 0xB87B},
- {0x8166, 0xB8A3},{0x8167, 0xDF7D},{0x8169, 0xDF76},{0x816B, 0xB87E},{0x816E, 0xB87C},{0x816F, 0xDF7E},{0x8170, 0xB879},{0x8171, 0xB878},
- {0x8172, 0xDF79},{0x8173, 0xB87D},{0x8174, 0xB5CD},{0x8176, 0xDF7C},{0x8177, 0xDF74},{0x8178, 0xB87A},{0x8179, 0xB8A1},{0x817A, 0xB8A2},
- {0x817F, 0xBB4C},{0x8180, 0xBB48},{0x8182, 0xBB4D},{0x8183, 0xE3A6},{0x8186, 0xE3A5},{0x8187, 0xE3A7},{0x8188, 0xBB4A},{0x8189, 0xE3A4},
- {0x818A, 0xBB4B},{0x818B, 0xE3AA},{0x818C, 0xE3A9},{0x818D, 0xE3A8},{0x818F, 0xBB49},{0x8195, 0xE741},{0x8197, 0xE744},{0x8198, 0xBDA8},
- {0x8199, 0xE743},{0x819A, 0xBDA7},{0x819B, 0xBDA3},{0x819C, 0xBDA4},{0x819D, 0xBDA5},{0x819E, 0xE740},{0x819F, 0xE6FE},{0x81A0, 0xBDA6},
- {0x81A2, 0xE742},{0x81A3, 0xE6FD},{0x81A6, 0xEAE9},{0x81A7, 0xEAF3},{0x81A8, 0xBFB1},{0x81A9, 0xBFB0},{0x81AB, 0xEAED},{0x81AC, 0xEAEF},
- {0x81AE, 0xEAEA},{0x81B0, 0xEAEE},{0x81B1, 0xEAE8},{0x81B2, 0xEAF1},{0x81B3, 0xBFAF},{0x81B4, 0xEAF0},{0x81B5, 0xEAEC},{0x81B7, 0xEAF2},
- {0x81B9, 0xEAEB},{0x81BA, 0xC174},{0x81BB, 0xEDE8},{0x81BC, 0xEDEE},{0x81BD, 0xC178},{0x81BE, 0xC17A},{0x81BF, 0xC177},{0x81C0, 0xC176},
- {0x81C2, 0xC175},{0x81C3, 0xC173},{0x81C4, 0xEDE9},{0x81C5, 0xEDEC},{0x81C6, 0xC172},{0x81C7, 0xEDED},{0x81C9, 0xC179},{0x81CA, 0xEDEB},
- {0x81CC, 0xEDEA},{0x81CD, 0xC2C0},{0x81CF, 0xC2C1},{0x81D0, 0xF0A1},{0x81D1, 0xF07D},{0x81D2, 0xF07E},{0x81D5, 0xF2C2},{0x81D7, 0xF2C1},
- {0x81D8, 0xC3BE},{0x81D9, 0xF4B4},{0x81DA, 0xC4A4},{0x81DB, 0xF4B3},{0x81DD, 0xF5F0},{0x81DE, 0xF745},{0x81DF, 0xC5A6},{0x81E0, 0xF943},
- {0x81E1, 0xF944},{0x81E2, 0xC5D8},{0x81E3, 0xA6DA},{0x81E5, 0xAAD7},{0x81E6, 0xDB52},{0x81E7, 0xBB4E},{0x81E8, 0xC17B},{0x81E9, 0xEDEF},
- {0x81EA, 0xA6DB},{0x81EC, 0xAFE5},{0x81ED, 0xAFE4},{0x81EE, 0xDB53},{0x81F2, 0xEAF4},{0x81F3, 0xA6DC},{0x81F4, 0xAD50},{0x81F7, 0xDB54},
- {0x81F8, 0xDB55},{0x81F9, 0xDB56},{0x81FA, 0xBB4F},{0x81FB, 0xBFB2},{0x81FC, 0xA6DD},{0x81FE, 0xAAD8},{0x81FF, 0xD068},{0x8200, 0xAFE6},
- {0x8201, 0xD370},{0x8202, 0xB2EA},{0x8204, 0xDB57},{0x8205, 0xB8A4},{0x8207, 0xBB50},{0x8208, 0xBFB3},{0x8209, 0xC17C},{0x820A, 0xC2C2},
- {0x820B, 0xF4B5},{0x820C, 0xA6DE},{0x820D, 0xAAD9},{0x8210, 0xAFE7},{0x8211, 0xD752},{0x8212, 0xB5CE},{0x8214, 0xBB51},{0x8215, 0xE3AB},
- {0x8216, 0xE745},{0x821B, 0xA6DF},{0x821C, 0xB5CF},{0x821D, 0xDFA3},{0x821E, 0xBB52},{0x821F, 0xA6E0},{0x8220, 0xCDB1},{0x8221, 0xD069},
- {0x8222, 0xAD51},{0x8225, 0xD372},{0x8228, 0xAFEA},{0x822A, 0xAFE8},{0x822B, 0xAFE9},{0x822C, 0xAFEB},{0x822F, 0xD371},{0x8232, 0xD757},
- {0x8233, 0xD754},{0x8234, 0xD756},{0x8235, 0xB2EB},{0x8236, 0xB2ED},{0x8237, 0xB2EC},{0x8238, 0xD753},{0x8239, 0xB2EE},{0x823A, 0xD755},
- {0x823C, 0xDB58},{0x823D, 0xDB59},{0x823F, 0xDB5A},{0x8240, 0xDFA6},{0x8242, 0xDFA7},{0x8244, 0xDFA5},{0x8245, 0xDFA8},{0x8247, 0xB8A5},
- {0x8249, 0xDFA4},{0x824B, 0xBB53},{0x824E, 0xE74A},{0x824F, 0xE746},{0x8250, 0xE749},{0x8251, 0xE74B},{0x8252, 0xE748},{0x8253, 0xE747},
- {0x8255, 0xEAF5},{0x8256, 0xEAF6},{0x8257, 0xEAF7},{0x8258, 0xBFB4},{0x8259, 0xBFB5},{0x825A, 0xEDF1},{0x825B, 0xEDF0},{0x825C, 0xEDF2},
- {0x825E, 0xF0A3},{0x825F, 0xF0A2},{0x8261, 0xF2C4},{0x8263, 0xF2C5},{0x8264, 0xF2C3},{0x8266, 0xC4A5},{0x8268, 0xF4B6},{0x8269, 0xF4B7},
- {0x826B, 0xF746},{0x826C, 0xF7EF},{0x826D, 0xF8BB},{0x826E, 0xA6E1},{0x826F, 0xA87D},{0x8271, 0xC17D},{0x8272, 0xA6E2},{0x8274, 0xD758},
- {0x8275, 0xDB5B},{0x8277, 0xC641},{0x8278, 0xCA4A},{0x827C, 0xCA4B},{0x827D, 0xCA4D},{0x827E, 0xA6E3},{0x827F, 0xCA4E},{0x8280, 0xCA4C},
- {0x8283, 0xCBA2},{0x8284, 0xCBA3},{0x8285, 0xCB7B},{0x828A, 0xCBA1},{0x828B, 0xA8A1},{0x828D, 0xA8A2},{0x828E, 0xCB7C},{0x828F, 0xCB7A},
- {0x8290, 0xCB79},{0x8291, 0xCB7D},{0x8292, 0xA87E},{0x8293, 0xCB7E},{0x8294, 0xD06A},{0x8298, 0xCDB6},{0x8299, 0xAADC},{0x829A, 0xCDB5},
- {0x829B, 0xCDB7},{0x829D, 0xAADB},{0x829E, 0xCDBC},{0x829F, 0xAADF},{0x82A0, 0xCDB2},{0x82A1, 0xCDC0},{0x82A2, 0xCDC6},{0x82A3, 0xAAE6},
- {0x82A4, 0xCDC3},{0x82A5, 0xAAE3},{0x82A7, 0xCDB9},{0x82A8, 0xCDBF},{0x82A9, 0xCDC1},{0x82AB, 0xCDB4},{0x82AC, 0xAAE2},{0x82AD, 0xAADD},
- {0x82AE, 0xCDBA},{0x82AF, 0xAAE4},{0x82B0, 0xAAE7},{0x82B1, 0xAAE1},{0x82B3, 0xAADA},{0x82B4, 0xCDBE},{0x82B5, 0xCDB8},{0x82B6, 0xCDC5},
- {0x82B7, 0xAAE9},{0x82B8, 0xAAE5},{0x82B9, 0xAAE0},{0x82BA, 0xCDBD},{0x82BB, 0xAFEC},{0x82BC, 0xCDBB},{0x82BD, 0xAADE},{0x82BE, 0xAAE8},
- {0x82C0, 0xCDB3},{0x82C2, 0xCDC2},{0x82C3, 0xCDC4},{0x82D1, 0xAD62},{0x82D2, 0xAD5C},{0x82D3, 0xAD64},{0x82D4, 0xAD61},{0x82D5, 0xD071},
- {0x82D6, 0xD074},{0x82D7, 0xAD5D},{0x82D9, 0xD06B},{0x82DB, 0xAD56},{0x82DC, 0xAD60},{0x82DE, 0xAD63},{0x82DF, 0xAD65},{0x82E0, 0xD0A2},
- {0x82E1, 0xD077},{0x82E3, 0xAD55},{0x82E4, 0xD0A1},{0x82E5, 0xAD59},{0x82E6, 0xAD57},{0x82E7, 0xAD52},{0x82E8, 0xD06F},{0x82EA, 0xD07E},
- {0x82EB, 0xD073},{0x82EC, 0xD076},{0x82ED, 0xD0A5},{0x82EF, 0xAD66},{0x82F0, 0xD07D},{0x82F1, 0xAD5E},{0x82F2, 0xD078},{0x82F3, 0xD0A4},
- {0x82F4, 0xD075},{0x82F5, 0xD079},{0x82F6, 0xD07C},{0x82F9, 0xD06D},{0x82FA, 0xD0A3},{0x82FB, 0xD07B},{0x82FE, 0xD06C},{0x8300, 0xD070},
- {0x8301, 0xAD5F},{0x8302, 0xAD5A},{0x8303, 0xAD53},{0x8304, 0xAD58},{0x8305, 0xAD54},{0x8306, 0xAD67},{0x8307, 0xD06E},{0x8308, 0xD3A5},
- {0x8309, 0xAD5B},{0x830C, 0xD07A},{0x830D, 0xCE41},{0x8316, 0xD3A8},{0x8317, 0xAFFA},{0x8319, 0xD376},{0x831B, 0xD3A3},{0x831C, 0xD37D},
- {0x831E, 0xD3B2},{0x8320, 0xD3AA},{0x8322, 0xD37E},{0x8324, 0xD3A9},{0x8325, 0xD378},{0x8326, 0xD37C},{0x8327, 0xD3B5},{0x8328, 0xAFFD},
- {0x8329, 0xD3AD},{0x832A, 0xD3A4},{0x832B, 0xAFED},{0x832C, 0xD3B3},{0x832D, 0xD374},{0x832F, 0xD3AC},{0x8331, 0xAFFC},{0x8332, 0xAFF7},
- {0x8333, 0xD373},{0x8334, 0xAFF5},{0x8335, 0xAFF4},{0x8336, 0xAFF9},{0x8337, 0xD3AB},{0x8338, 0xAFF1},{0x8339, 0xAFF8},{0x833A, 0xD072},
- {0x833B, 0xDB5C},{0x833C, 0xD3A6},{0x833F, 0xD37A},{0x8340, 0xAFFB},{0x8341, 0xD37B},{0x8342, 0xD3A1},{0x8343, 0xAFFE},{0x8344, 0xD375},
- {0x8345, 0xD3AF},{0x8347, 0xD3AE},{0x8348, 0xD3B6},{0x8349, 0xAFF3},{0x834A, 0xAFF0},{0x834B, 0xD3B4},{0x834C, 0xD3B0},{0x834D, 0xD3A7},
- {0x834E, 0xD3A2},{0x834F, 0xAFF6},{0x8350, 0xAFF2},{0x8351, 0xD377},{0x8352, 0xAFEE},{0x8353, 0xD3B1},{0x8354, 0xAFEF},{0x8356, 0xD379},
- {0x8373, 0xD75E},{0x8374, 0xD760},{0x8375, 0xD765},{0x8376, 0xD779},{0x8377, 0xB2FC},{0x8378, 0xB2F2},{0x837A, 0xD75D},{0x837B, 0xB2FD},
- {0x837C, 0xB2FE},{0x837D, 0xD768},{0x837E, 0xD76F},{0x837F, 0xD775},{0x8381, 0xD762},{0x8383, 0xD769},{0x8386, 0xB340},{0x8387, 0xD777},
- {0x8388, 0xD772},{0x8389, 0xB2FA},{0x838A, 0xB2F8},{0x838B, 0xD76E},{0x838C, 0xD76A},{0x838D, 0xD75C},{0x838E, 0xB2EF},{0x838F, 0xD761},
- {0x8390, 0xD759},{0x8392, 0xB2F7},{0x8393, 0xB2F9},{0x8394, 0xD766},{0x8395, 0xD763},{0x8396, 0xB2F4},{0x8397, 0xD773},{0x8398, 0xB2F1},
- {0x8399, 0xD764},{0x839A, 0xD77A},{0x839B, 0xD76C},{0x839D, 0xD76B},{0x839E, 0xB2F0},{0x83A0, 0xB2FB},{0x83A2, 0xB2F3},{0x83A3, 0xD75A},
- {0x83A4, 0xD75F},{0x83A5, 0xD770},{0x83A6, 0xD776},{0x83A7, 0xB341},{0x83A8, 0xD75B},{0x83A9, 0xD767},{0x83AA, 0xD76D},{0x83AB, 0xB2F6},
- {0x83AE, 0xD778},{0x83AF, 0xD771},{0x83B0, 0xD774},{0x83BD, 0xB2F5},{0x83BF, 0xDB6C},{0x83C0, 0xDB60},{0x83C1, 0xB5D7},{0x83C2, 0xDB7D},
- {0x83C3, 0xDBA7},{0x83C4, 0xDBAA},{0x83C5, 0xB5D5},{0x83C6, 0xDB68},{0x83C7, 0xDBA3},{0x83C8, 0xDB69},{0x83C9, 0xDB77},{0x83CA, 0xB5E2},
- {0x83CB, 0xDB73},{0x83CC, 0xB5DF},{0x83CE, 0xDB74},{0x83CF, 0xDB5D},{0x83D1, 0xDBA4},{0x83D4, 0xB5E8},{0x83D5, 0xDBA1},{0x83D6, 0xDB75},
- {0x83D7, 0xDBAC},{0x83D8, 0xDB70},{0x83D9, 0xDFC8},{0x83DB, 0xDBAF},{0x83DC, 0xB5E6},{0x83DD, 0xDB6E},{0x83DE, 0xDB7A},{0x83DF, 0xB5E9},
- {0x83E0, 0xB5D4},{0x83E1, 0xDB72},{0x83E2, 0xDBAD},{0x83E3, 0xDB6B},{0x83E4, 0xDB64},{0x83E5, 0xDB6F},{0x83E7, 0xDB63},{0x83E8, 0xDB61},
- {0x83E9, 0xB5D0},{0x83EA, 0xDBA5},{0x83EB, 0xDB6A},{0x83EC, 0xDBA8},{0x83EE, 0xDBA9},{0x83EF, 0xB5D8},{0x83F0, 0xB5DD},{0x83F1, 0xB5D9},
- {0x83F2, 0xB5E1},{0x83F3, 0xDB7E},{0x83F4, 0xB5DA},{0x83F5, 0xDB76},{0x83F6, 0xDB66},{0x83F8, 0xB5D2},{0x83F9, 0xDB5E},{0x83FA, 0xDBA2},
- {0x83FB, 0xDBAB},{0x83FC, 0xDB65},{0x83FD, 0xB5E0},{0x83FE, 0xDBB0},{0x83FF, 0xDB71},{0x8401, 0xDB6D},{0x8403, 0xB5D1},{0x8404, 0xB5E5},
- {0x8406, 0xDB7C},{0x8407, 0xB5E7},{0x8409, 0xDB78},{0x840A, 0xB5DC},{0x840B, 0xB5D6},{0x840C, 0xB5DE},{0x840D, 0xB5D3},{0x840E, 0xB5E4},
- {0x840F, 0xDB79},{0x8410, 0xDB67},{0x8411, 0xDB7B},{0x8412, 0xDB62},{0x8413, 0xDBA6},{0x841B, 0xDBAE},{0x8423, 0xDB5F},{0x8429, 0xDFC7},
- {0x842B, 0xDFDD},{0x842C, 0xB855},{0x842D, 0xDFCC},{0x842F, 0xDFCA},{0x8430, 0xDFB5},{0x8431, 0xB8A9},{0x8432, 0xDFC5},{0x8433, 0xDFD9},
- {0x8434, 0xDFC1},{0x8435, 0xB8B1},{0x8436, 0xDFD8},{0x8437, 0xDFBF},{0x8438, 0xB5E3},{0x8439, 0xDFCF},{0x843A, 0xDFC0},{0x843B, 0xDFD6},
- {0x843C, 0xB8B0},{0x843D, 0xB8A8},{0x843F, 0xDFAA},{0x8440, 0xDFB2},{0x8442, 0xDFCB},{0x8443, 0xDFC3},{0x8444, 0xDFDC},{0x8445, 0xDFC6},
- {0x8446, 0xB8B6},{0x8447, 0xDFD7},{0x8449, 0xB8AD},{0x844B, 0xDFC9},{0x844C, 0xDFD1},{0x844D, 0xDFB6},{0x844E, 0xDFD0},{0x8450, 0xDFE1},
- {0x8451, 0xDFB1},{0x8452, 0xDFD2},{0x8454, 0xDFDF},{0x8456, 0xDFAB},{0x8457, 0xB5DB},{0x8459, 0xDFB9},{0x845A, 0xDFB8},{0x845B, 0xB8AF},
- {0x845D, 0xDFBC},{0x845E, 0xDFBE},{0x845F, 0xDFCD},{0x8460, 0xDFDE},{0x8461, 0xB8B2},{0x8463, 0xB8B3},{0x8465, 0xDFB0},{0x8466, 0xB8AB},
- {0x8467, 0xDFB4},{0x8468, 0xDFDA},{0x8469, 0xB8B4},{0x846B, 0xB8AC},{0x846C, 0xB8AE},{0x846D, 0xB8B5},{0x846E, 0xDFE0},{0x846F, 0xDFD3},
- {0x8470, 0xDFCE},{0x8473, 0xDFBB},{0x8474, 0xDFBA},{0x8475, 0xB8AA},{0x8476, 0xDFAC},{0x8477, 0xB8A7},{0x8478, 0xDFC4},{0x8479, 0xDFAD},
- {0x847A, 0xDFC2},{0x847D, 0xDFB7},{0x847E, 0xDFDB},{0x8482, 0xB8A6},{0x8486, 0xDFB3},{0x848D, 0xDFAF},{0x848E, 0xDFD5},{0x848F, 0xDFAE},
- {0x8490, 0xBB60},{0x8491, 0xE3D3},{0x8494, 0xE3C2},{0x8497, 0xE3AC},{0x8498, 0xE3CA},{0x8499, 0xBB58},{0x849A, 0xE3BB},{0x849B, 0xE3C5},
- {0x849C, 0xBB5B},{0x849D, 0xE3BE},{0x849E, 0xBB59},{0x849F, 0xE3AF},{0x84A0, 0xE3CD},{0x84A1, 0xE3AE},{0x84A2, 0xE3C1},{0x84A4, 0xE3AD},
- {0x84A7, 0xE3BF},{0x84A8, 0xE3C8},{0x84A9, 0xE3C6},{0x84AA, 0xE3BA},{0x84AB, 0xE3B5},{0x84AC, 0xE3B3},{0x84AE, 0xE3B4},{0x84AF, 0xE3C7},
- {0x84B0, 0xE3D2},{0x84B1, 0xE3BC},{0x84B2, 0xBB5A},{0x84B4, 0xE3B7},{0x84B6, 0xE3CB},{0x84B8, 0xBB5D},{0x84B9, 0xE3B6},{0x84BA, 0xE3B0},
- {0x84BB, 0xE3C0},{0x84BC, 0xBB61},{0x84BF, 0xBB55},{0x84C0, 0xBB5E},{0x84C1, 0xE3B8},{0x84C2, 0xE3B2},{0x84C4, 0xBB57},{0x84C5, 0xDFD4},
- {0x84C6, 0xBB56},{0x84C7, 0xE3C3},{0x84C9, 0xBB54},{0x84CA, 0xBB63},{0x84CB, 0xBB5C},{0x84CC, 0xE3C4},{0x84CD, 0xE3B9},{0x84CE, 0xE3B1},
- {0x84CF, 0xE3CC},{0x84D0, 0xE3BD},{0x84D1, 0xBB62},{0x84D2, 0xE3D0},{0x84D3, 0xBB5F},{0x84D4, 0xE3CF},{0x84D6, 0xE3C9},{0x84D7, 0xE3CE},
- {0x84DB, 0xE3D1},{0x84E7, 0xE773},{0x84E8, 0xE774},{0x84E9, 0xE767},{0x84EA, 0xE766},{0x84EB, 0xE762},{0x84EC, 0xBDB4},{0x84EE, 0xBDAC},
- {0x84EF, 0xE776},{0x84F0, 0xE775},{0x84F1, 0xDFA9},{0x84F2, 0xE75F},{0x84F3, 0xE763},{0x84F4, 0xE75D},{0x84F6, 0xE770},{0x84F7, 0xE761},
- {0x84F9, 0xE777},{0x84FA, 0xE75A},{0x84FB, 0xE758},{0x84FC, 0xE764},{0x84FD, 0xE76E},{0x84FE, 0xE769},{0x84FF, 0xBDB6},{0x8500, 0xE74F},
- {0x8502, 0xE76D},{0x8506, 0xBDB7},{0x8507, 0xDFBD},{0x8508, 0xE75B},{0x8509, 0xE752},{0x850A, 0xE755},{0x850B, 0xE77B},{0x850C, 0xE75C},
- {0x850D, 0xE753},{0x850E, 0xE751},{0x850F, 0xE74E},{0x8511, 0xBDB0},{0x8512, 0xE765},{0x8513, 0xBDAF},{0x8514, 0xBDB3},{0x8515, 0xE760},
- {0x8516, 0xE768},{0x8517, 0xBDA9},{0x8518, 0xE778},{0x8519, 0xE77C},{0x851A, 0xBDAB},{0x851C, 0xE757},{0x851D, 0xE76B},{0x851E, 0xE76F},
- {0x851F, 0xE754},{0x8520, 0xE779},{0x8521, 0xBDB2},{0x8523, 0xBDB1},{0x8524, 0xE74C},{0x8525, 0xBDB5},{0x8526, 0xE772},{0x8527, 0xE756},
- {0x8528, 0xE76A},{0x8529, 0xE750},{0x852A, 0xE75E},{0x852B, 0xE759},{0x852C, 0xBDAD},{0x852D, 0xBDAE},{0x852E, 0xE76C},{0x852F, 0xE77D},
- {0x8530, 0xE77A},{0x8531, 0xE771},{0x853B, 0xE74D},{0x853D, 0xBDAA},{0x853E, 0xEB49},{0x8540, 0xEB40},{0x8541, 0xEB43},{0x8543, 0xBFBB},
- {0x8544, 0xEB45},{0x8545, 0xEAF9},{0x8546, 0xEB41},{0x8547, 0xEB47},{0x8548, 0xBFB8},{0x8549, 0xBFBC},{0x854A, 0xBFB6},{0x854D, 0xEAFB},
- {0x854E, 0xEB4C},{0x8551, 0xEB46},{0x8553, 0xEAFC},{0x8554, 0xEB55},{0x8555, 0xEB4F},{0x8556, 0xEAF8},{0x8557, 0xEE46},{0x8558, 0xEAFE},
- {0x8559, 0xBFB7},{0x855B, 0xEB4A},{0x855D, 0xEB54},{0x855E, 0xBFBF},{0x8560, 0xEB51},{0x8561, 0xEAFD},{0x8562, 0xEB44},{0x8563, 0xEB48},
- {0x8564, 0xEB42},{0x8565, 0xEB56},{0x8566, 0xEB53},{0x8567, 0xEB50},{0x8568, 0xBFB9},{0x8569, 0xBFBA},{0x856A, 0xBFBE},{0x856B, 0xEAFA},
- {0x856C, 0xEB57},{0x856D, 0xBFBD},{0x856E, 0xEB4D},{0x8571, 0xEB4B},{0x8575, 0xEB4E},{0x8576, 0xEE53},{0x8577, 0xEE40},{0x8578, 0xEE45},
- {0x8579, 0xEE52},{0x857A, 0xEE44},{0x857B, 0xEDFB},{0x857C, 0xEE41},{0x857E, 0xC1A2},{0x8580, 0xEDF4},{0x8581, 0xEE4D},{0x8582, 0xEE4F},
- {0x8583, 0xEDF3},{0x8584, 0xC1A1},{0x8585, 0xEE51},{0x8586, 0xEE49},{0x8587, 0xC1A8},{0x8588, 0xEE50},{0x8589, 0xEE42},{0x858A, 0xC1AA},
- {0x858B, 0xEDF9},{0x858C, 0xEB52},{0x858D, 0xEE4A},{0x858E, 0xEE47},{0x858F, 0xEDF5},{0x8590, 0xEE55},{0x8591, 0xC1A4},{0x8594, 0xC1A5},
- {0x8595, 0xEDF7},{0x8596, 0xEE48},{0x8598, 0xEE54},{0x8599, 0xEE4B},{0x859A, 0xEDFD},{0x859B, 0xC1A7},{0x859C, 0xC1A3},{0x859D, 0xEE4C},
- {0x859E, 0xEDFE},{0x859F, 0xEE56},{0x85A0, 0xEDF8},{0x85A1, 0xEE43},{0x85A2, 0xEE4E},{0x85A3, 0xEDFA},{0x85A4, 0xEDFC},{0x85A6, 0xC2CB},
- {0x85A7, 0xEDF6},{0x85A8, 0xC1A9},{0x85A9, 0xC2C4},{0x85AA, 0xC17E},{0x85AF, 0xC1A6},{0x85B0, 0xC2C8},{0x85B1, 0xF0B3},{0x85B3, 0xF0A9},
- {0x85B4, 0xF0A4},{0x85B5, 0xF0AA},{0x85B6, 0xF0B4},{0x85B7, 0xF0B8},{0x85B8, 0xF0B7},{0x85B9, 0xC2CA},{0x85BA, 0xC2C9},{0x85BD, 0xF0AB},
- {0x85BE, 0xF0B9},{0x85BF, 0xF0AE},{0x85C0, 0xF0A6},{0x85C2, 0xF0A8},{0x85C3, 0xF0A7},{0x85C4, 0xF0AD},{0x85C5, 0xF0B2},{0x85C6, 0xF0A5},
- {0x85C7, 0xF0AC},{0x85C8, 0xF0B1},{0x85C9, 0xC2C7},{0x85CB, 0xF0AF},{0x85CD, 0xC2C5},{0x85CE, 0xF0B0},{0x85CF, 0xC2C3},{0x85D0, 0xC2C6},
- {0x85D1, 0xF2D5},{0x85D2, 0xF0B5},{0x85D5, 0xC3C2},{0x85D7, 0xF2CD},{0x85D8, 0xF2D1},{0x85D9, 0xF2C9},{0x85DA, 0xF2CC},{0x85DC, 0xF2D4},
- {0x85DD, 0xC3C0},{0x85DE, 0xF2D9},{0x85DF, 0xF2D2},{0x85E1, 0xF2CA},{0x85E2, 0xF2DA},{0x85E3, 0xF2D3},{0x85E4, 0xC3C3},{0x85E5, 0xC3C4},
- {0x85E6, 0xF2D7},{0x85E8, 0xF2CB},{0x85E9, 0xC3BF},{0x85EA, 0xC3C1},{0x85EB, 0xF2C6},{0x85EC, 0xF2CE},{0x85ED, 0xF2C8},{0x85EF, 0xF2D8},
- {0x85F0, 0xF2D6},{0x85F1, 0xF2C7},{0x85F2, 0xF2CF},{0x85F6, 0xF4BE},{0x85F7, 0xC3C5},{0x85F8, 0xF2D0},{0x85F9, 0xC4A7},{0x85FA, 0xC4A9},
- {0x85FB, 0xC4A6},{0x85FD, 0xF4C3},{0x85FE, 0xF4BB},{0x85FF, 0xF4B9},{0x8600, 0xF4BD},{0x8601, 0xF4BA},{0x8604, 0xF4BF},{0x8605, 0xF4C1},
- {0x8606, 0xC4AA},{0x8607, 0xC4AC},{0x8609, 0xF4C0},{0x860A, 0xC4AD},{0x860B, 0xC4AB},{0x860C, 0xF4C2},{0x8611, 0xC4A8},{0x8617, 0xC4F4},
- {0x8618, 0xF5F1},{0x8619, 0xF5F7},{0x861A, 0xC4F6},{0x861B, 0xF4BC},{0x861C, 0xF5F6},{0x861E, 0xF5FD},{0x861F, 0xF5F4},{0x8620, 0xF5FB},
- {0x8621, 0xF5FA},{0x8622, 0xF4B8},{0x8623, 0xF5F5},{0x8624, 0xF0B6},{0x8625, 0xF5FE},{0x8626, 0xF5F3},{0x8627, 0xF5F8},{0x8629, 0xF5FC},
- {0x862A, 0xF5F2},{0x862C, 0xF74A},{0x862D, 0xC4F5},{0x862E, 0xF5F9},{0x8631, 0xF7F4},{0x8632, 0xF74B},{0x8633, 0xF749},{0x8634, 0xF747},
- {0x8635, 0xF748},{0x8636, 0xF74C},{0x8638, 0xC5D9},{0x8639, 0xF7F2},{0x863A, 0xF7F0},{0x863B, 0xF7F5},{0x863C, 0xF7F3},{0x863E, 0xF7F6},
- {0x863F, 0xC5DA},{0x8640, 0xF7F1},{0x8643, 0xF8BC},{0x8646, 0xF945},{0x8647, 0xF946},{0x8648, 0xF947},{0x864B, 0xF9C7},{0x864C, 0xF9BD},
- {0x864D, 0xCA4F},{0x864E, 0xAAEA},{0x8650, 0xAD68},{0x8652, 0xD3B8},{0x8653, 0xD3B7},{0x8654, 0xB040},{0x8655, 0xB342},{0x8656, 0xD77C},
- {0x8659, 0xD77B},{0x865B, 0xB5EA},{0x865C, 0xB8B8},{0x865E, 0xB8B7},{0x865F, 0xB8B9},{0x8661, 0xE3D4},{0x8662, 0xE77E},{0x8663, 0xEB58},
- {0x8664, 0xEB5A},{0x8665, 0xEB59},{0x8667, 0xC1AB},{0x8668, 0xEE57},{0x8669, 0xF0BA},{0x866A, 0xF9A5},{0x866B, 0xA6E4},{0x866D, 0xCDC9},
- {0x866E, 0xCDCA},{0x866F, 0xCDC8},{0x8670, 0xCDC7},{0x8671, 0xAAEB},{0x8673, 0xD0A9},{0x8674, 0xD0A7},{0x8677, 0xD0A6},{0x8679, 0xAD69},
- {0x867A, 0xAD6B},{0x867B, 0xAD6A},{0x867C, 0xD0A8},{0x8685, 0xD3C4},{0x8686, 0xD3C1},{0x8687, 0xD3BF},{0x868A, 0xB041},{0x868B, 0xD3C2},
- {0x868C, 0xB046},{0x868D, 0xD3BC},{0x868E, 0xD3CB},{0x8690, 0xD3CD},{0x8691, 0xD3BD},{0x8693, 0xB043},{0x8694, 0xD3CE},{0x8695, 0xD3C9},
- {0x8696, 0xD3BB},{0x8697, 0xD3C0},{0x8698, 0xD3CA},{0x8699, 0xD3C6},{0x869A, 0xD3C3},{0x869C, 0xB048},{0x869D, 0xD3CC},{0x869E, 0xD3BE},
- {0x86A1, 0xD3C7},{0x86A2, 0xD3B9},{0x86A3, 0xB047},{0x86A4, 0xB044},{0x86A5, 0xD3C5},{0x86A7, 0xD3C8},{0x86A8, 0xD3BA},{0x86A9, 0xB045},
- {0x86AA, 0xB042},{0x86AF, 0xB34C},{0x86B0, 0xD7A5},{0x86B1, 0xB34B},{0x86B3, 0xD7A8},{0x86B4, 0xD7AB},{0x86B5, 0xB348},{0x86B6, 0xB346},
- {0x86B7, 0xD77E},{0x86B8, 0xD7A9},{0x86B9, 0xD7A7},{0x86BA, 0xD7A4},{0x86BB, 0xD7AC},{0x86BC, 0xD7AD},{0x86BD, 0xD7AF},{0x86BE, 0xD7B0},
- {0x86BF, 0xD77D},{0x86C0, 0xB345},{0x86C1, 0xD7A2},{0x86C2, 0xD7A1},{0x86C3, 0xD7AE},{0x86C4, 0xB347},{0x86C5, 0xD7A3},{0x86C6, 0xB349},
- {0x86C7, 0xB344},{0x86C8, 0xD7A6},{0x86C9, 0xB34D},{0x86CB, 0xB34A},{0x86CC, 0xD7AA},{0x86D0, 0xB5F1},{0x86D1, 0xDBBF},{0x86D3, 0xDBB4},
- {0x86D4, 0xB5EE},{0x86D6, 0xDFE7},{0x86D7, 0xDBBD},{0x86D8, 0xDBB1},{0x86D9, 0xB5EC},{0x86DA, 0xDBB6},{0x86DB, 0xB5EF},{0x86DC, 0xDBBA},
- {0x86DD, 0xDBB8},{0x86DE, 0xB5F2},{0x86DF, 0xB5EB},{0x86E2, 0xDBB2},{0x86E3, 0xDBB5},{0x86E4, 0xB5F0},{0x86E6, 0xDBB3},{0x86E8, 0xDBBE},
- {0x86E9, 0xDBBC},{0x86EA, 0xDBB7},{0x86EB, 0xDBB9},{0x86EC, 0xDBBB},{0x86ED, 0xB5ED},{0x86F5, 0xDFE8},{0x86F6, 0xDFEE},{0x86F7, 0xDFE4},
- {0x86F8, 0xDFEA},{0x86F9, 0xB8BA},{0x86FA, 0xDFE6},{0x86FB, 0xB8C0},{0x86FE, 0xB8BF},{0x8700, 0xB8BE},{0x8701, 0xDFED},{0x8702, 0xB8C1},
- {0x8703, 0xB8C2},{0x8704, 0xDFE3},{0x8705, 0xDFF0},{0x8706, 0xB8C3},{0x8707, 0xB8BD},{0x8708, 0xB8BC},{0x8709, 0xDFEC},{0x870A, 0xB8C4},
- {0x870B, 0xDFE2},{0x870C, 0xDFE5},{0x870D, 0xDFEF},{0x870E, 0xDFEB},{0x8711, 0xE3F4},{0x8712, 0xE3E9},{0x8713, 0xB8BB},{0x8718, 0xBB6A},
- {0x8719, 0xE3DD},{0x871A, 0xE3F2},{0x871B, 0xE3DE},{0x871C, 0xBB65},{0x871E, 0xE3DB},{0x8720, 0xE3E4},{0x8721, 0xE3DC},{0x8722, 0xBB67},
- {0x8723, 0xE3D6},{0x8724, 0xE3F1},{0x8725, 0xBB68},{0x8726, 0xE3EE},{0x8727, 0xE3EF},{0x8728, 0xE3D7},{0x8729, 0xBB6D},{0x872A, 0xE3E6},
- {0x872C, 0xE3E0},{0x872D, 0xE3E7},{0x872E, 0xE3DA},{0x8730, 0xE3F3},{0x8731, 0xE3EB},{0x8732, 0xE3E5},{0x8733, 0xE3D5},{0x8734, 0xBB69},
- {0x8735, 0xE3EC},{0x8737, 0xBB6C},{0x8738, 0xE3F0},{0x873A, 0xE3EA},{0x873B, 0xBB66},{0x873C, 0xE3E8},{0x873E, 0xE3E2},{0x873F, 0xBB64},
- {0x8740, 0xE3D9},{0x8741, 0xE3E1},{0x8742, 0xE3ED},{0x8743, 0xE3DF},{0x8746, 0xE3E3},{0x874C, 0xBDC1},{0x874D, 0xDFE9},{0x874E, 0xE7B2},
- {0x874F, 0xE7BB},{0x8750, 0xE7B1},{0x8751, 0xE7AD},{0x8752, 0xE7AA},{0x8753, 0xBDC2},{0x8754, 0xE7A8},{0x8755, 0xBB6B},{0x8756, 0xE7A1},
- {0x8757, 0xBDC0},{0x8758, 0xE7A7},{0x8759, 0xBDBF},{0x875A, 0xE7AC},{0x875B, 0xE7A9},{0x875C, 0xE7B9},{0x875D, 0xE7B4},{0x875E, 0xE7AE},
- {0x875F, 0xE7B3},{0x8760, 0xBDBB},{0x8761, 0xE7AB},{0x8762, 0xE7BE},{0x8763, 0xE7A2},{0x8764, 0xE7A3},{0x8765, 0xE7BA},{0x8766, 0xBDBC},
- {0x8767, 0xE7BF},{0x8768, 0xBDBE},{0x8769, 0xE7C0},{0x876A, 0xE7B0},{0x876B, 0xE3D8},{0x876C, 0xE7B6},{0x876D, 0xE7AF},{0x876E, 0xE7B8},
- {0x876F, 0xE7B5},{0x8773, 0xE7A6},{0x8774, 0xBDB9},{0x8775, 0xE7BD},{0x8776, 0xBDBA},{0x8777, 0xE7A4},{0x8778, 0xBDBD},{0x8779, 0xEB64},
- {0x877A, 0xE7B7},{0x877B, 0xE7BC},{0x8781, 0xEB61},{0x8782, 0xBDB8},{0x8783, 0xBFC0},{0x8784, 0xEB6B},{0x8785, 0xEB67},{0x8787, 0xEB65},
- {0x8788, 0xEB60},{0x8789, 0xEB6F},{0x878D, 0xBFC4},{0x878F, 0xEB5C},{0x8790, 0xEB68},{0x8791, 0xEB69},{0x8792, 0xEB5F},{0x8793, 0xEB5E},
- {0x8794, 0xEB6C},{0x8796, 0xEB62},{0x8797, 0xEB5D},{0x8798, 0xEB63},{0x879A, 0xEB6E},{0x879B, 0xEB5B},{0x879C, 0xEB6D},{0x879D, 0xEB6A},
- {0x879E, 0xBFC2},{0x879F, 0xBFC1},{0x87A2, 0xBFC3},{0x87A3, 0xEB66},{0x87A4, 0xF0CB},{0x87AA, 0xEE59},{0x87AB, 0xC1B1},{0x87AC, 0xEE5D},
- {0x87AD, 0xEE5A},{0x87AE, 0xEE61},{0x87AF, 0xEE67},{0x87B0, 0xEE5C},{0x87B2, 0xEE70},{0x87B3, 0xC1AE},{0x87B4, 0xEE6A},{0x87B5, 0xEE5F},
- {0x87B6, 0xEE6B},{0x87B7, 0xEE66},{0x87B8, 0xEE6D},{0x87B9, 0xEE5E},{0x87BA, 0xC1B3},{0x87BB, 0xC1B2},{0x87BC, 0xEE60},{0x87BD, 0xEE6E},
- {0x87BE, 0xEE58},{0x87BF, 0xEE6C},{0x87C0, 0xC1AC},{0x87C2, 0xEE64},{0x87C3, 0xEE63},{0x87C4, 0xEE68},{0x87C5, 0xEE5B},{0x87C6, 0xC1B0},
- {0x87C8, 0xC1B4},{0x87C9, 0xEE62},{0x87CA, 0xEE69},{0x87CB, 0xC1B5},{0x87CC, 0xEE65},{0x87D1, 0xC1AD},{0x87D2, 0xC1AF},{0x87D3, 0xF0C7},
- {0x87D4, 0xF0C5},{0x87D7, 0xF0CC},{0x87D8, 0xF0C9},{0x87D9, 0xF0CD},{0x87DB, 0xF0BE},{0x87DC, 0xF0C6},{0x87DD, 0xF0D1},{0x87DE, 0xEE6F},
- {0x87DF, 0xF0C2},{0x87E0, 0xC2CF},{0x87E1, 0xE7A5},{0x87E2, 0xF0BD},{0x87E3, 0xF0CA},{0x87E4, 0xF0C4},{0x87E5, 0xF0C1},{0x87E6, 0xF0BC},
- {0x87E7, 0xF0BB},{0x87E8, 0xF0D0},{0x87EA, 0xF0C0},{0x87EB, 0xF0BF},{0x87EC, 0xC2CD},{0x87ED, 0xF0C8},{0x87EF, 0xC2CC},{0x87F2, 0xC2CE},
- {0x87F3, 0xF0C3},{0x87F4, 0xF0CF},{0x87F6, 0xF2DE},{0x87F7, 0xF2DF},{0x87F9, 0xC3C9},{0x87FA, 0xF2DC},{0x87FB, 0xC3C6},{0x87FC, 0xF2E4},
- {0x87FE, 0xC3CA},{0x87FF, 0xF2E6},{0x8800, 0xF2DB},{0x8801, 0xF0CE},{0x8802, 0xF2E8},{0x8803, 0xF2DD},{0x8805, 0xC3C7},{0x8806, 0xF2E3},
- {0x8808, 0xF2E5},{0x8809, 0xF2E0},{0x880A, 0xF2E7},{0x880B, 0xF2E2},{0x880C, 0xF2E1},{0x880D, 0xC3C8},{0x8810, 0xF4C5},{0x8811, 0xF4C6},
- {0x8813, 0xF4C8},{0x8814, 0xC4AE},{0x8815, 0xC4AF},{0x8816, 0xF4C9},{0x8817, 0xF4C7},{0x8819, 0xF4C4},{0x881B, 0xF642},{0x881C, 0xF645},
- {0x881D, 0xF641},{0x881F, 0xC4FA},{0x8820, 0xF643},{0x8821, 0xC4F9},{0x8822, 0xC4F8},{0x8823, 0xC4F7},{0x8824, 0xF644},{0x8825, 0xF751},
- {0x8826, 0xF74F},{0x8828, 0xF74E},{0x8829, 0xF640},{0x882A, 0xF750},{0x882B, 0xF646},{0x882C, 0xF74D},{0x882E, 0xF7F9},{0x882F, 0xF7D7},
- {0x8830, 0xF7F7},{0x8831, 0xC5DB},{0x8832, 0xF7F8},{0x8833, 0xF7FA},{0x8835, 0xF8BF},{0x8836, 0xC5FA},{0x8837, 0xF8BE},{0x8838, 0xF8BD},
- {0x8839, 0xC5FB},{0x883B, 0xC65A},{0x883C, 0xF96E},{0x883D, 0xF9A7},{0x883E, 0xF9A6},{0x883F, 0xF9A8},{0x8840, 0xA6E5},{0x8841, 0xD0AA},
- {0x8843, 0xD3CF},{0x8844, 0xD3D0},{0x8848, 0xDBC0},{0x884A, 0xF647},{0x884B, 0xF8C0},{0x884C, 0xA6E6},{0x884D, 0xAD6C},{0x884E, 0xD0AB},
- {0x8852, 0xD7B1},{0x8853, 0xB34E},{0x8855, 0xDBC2},{0x8856, 0xDBC1},{0x8857, 0xB5F3},{0x8859, 0xB8C5},{0x885A, 0xE7C1},{0x885B, 0xBDC3},
- {0x885D, 0xBDC4},{0x8861, 0xBFC5},{0x8862, 0xC5FC},{0x8863, 0xA6E7},{0x8867, 0xD0AC},{0x8868, 0xAAED},{0x8869, 0xD0AE},{0x886A, 0xD0AD},
- {0x886B, 0xAD6D},{0x886D, 0xD3D1},{0x886F, 0xD3D8},{0x8870, 0xB049},{0x8871, 0xD3D6},{0x8872, 0xD3D4},{0x8874, 0xD3DB},{0x8875, 0xD3D2},
- {0x8876, 0xD3D3},{0x8877, 0xB04A},{0x8879, 0xB04E},{0x887C, 0xD3DC},{0x887D, 0xB04D},{0x887E, 0xD3DA},{0x887F, 0xD3D7},{0x8880, 0xD3D5},
- {0x8881, 0xB04B},{0x8882, 0xB04C},{0x8883, 0xD3D9},{0x8888, 0xB350},{0x8889, 0xD7B2},{0x888B, 0xB355},{0x888C, 0xD7C2},{0x888D, 0xB354},
- {0x888E, 0xD7C4},{0x8891, 0xD7B8},{0x8892, 0xB352},{0x8893, 0xD7C3},{0x8895, 0xD7B3},{0x8896, 0xB353},{0x8897, 0xD7BF},{0x8898, 0xD7BB},
- {0x8899, 0xD7BD},{0x889A, 0xD7B7},{0x889B, 0xD7BE},{0x889E, 0xB34F},{0x889F, 0xD7BA},{0x88A1, 0xD7B9},{0x88A2, 0xD7B5},{0x88A4, 0xD7C0},
- {0x88A7, 0xD7BC},{0x88A8, 0xD7B4},{0x88AA, 0xD7B6},{0x88AB, 0xB351},{0x88AC, 0xD7C1},{0x88B1, 0xB5F6},{0x88B2, 0xDBCD},{0x88B6, 0xDBC9},
- {0x88B7, 0xDBCB},{0x88B8, 0xDBC6},{0x88B9, 0xDBC5},{0x88BA, 0xDBC3},{0x88BC, 0xDBCA},{0x88BD, 0xDBCC},{0x88BE, 0xDBC8},{0x88C0, 0xDBC7},
- {0x88C1, 0xB5F4},{0x88C2, 0xB5F5},{0x88C9, 0xDBCF},{0x88CA, 0xB8CD},{0x88CB, 0xDFF2},{0x88CC, 0xDFF8},{0x88CD, 0xDFF3},{0x88CE, 0xDFF4},
- {0x88D0, 0xDFF9},{0x88D2, 0xB8CF},{0x88D4, 0xB8C7},{0x88D5, 0xB8CE},{0x88D6, 0xDFF1},{0x88D7, 0xDBC4},{0x88D8, 0xB8CA},{0x88D9, 0xB8C8},
- {0x88DA, 0xDFF7},{0x88DB, 0xDFF6},{0x88DC, 0xB8C9},{0x88DD, 0xB8CB},{0x88DE, 0xDFF5},{0x88DF, 0xB8C6},{0x88E1, 0xB8CC},{0x88E7, 0xE3F6},
- {0x88E8, 0xBB74},{0x88EB, 0xE442},{0x88EC, 0xE441},{0x88EE, 0xE3FB},{0x88EF, 0xBB76},{0x88F0, 0xE440},{0x88F1, 0xE3F7},{0x88F2, 0xE3F8},
- {0x88F3, 0xBB6E},{0x88F4, 0xBB70},{0x88F6, 0xE3FD},{0x88F7, 0xE3F5},{0x88F8, 0xBB72},{0x88F9, 0xBB71},{0x88FA, 0xE3F9},{0x88FB, 0xE3FE},
- {0x88FC, 0xE3FC},{0x88FD, 0xBB73},{0x88FE, 0xE3FA},{0x8901, 0xDBCE},{0x8902, 0xBB6F},{0x8905, 0xE7C2},{0x8906, 0xE7C9},{0x8907, 0xBDC6},
- {0x8909, 0xE7CD},{0x890A, 0xBDCA},{0x890B, 0xE7C5},{0x890C, 0xE7C3},{0x890E, 0xE7CC},{0x8910, 0xBDC5},{0x8911, 0xE7CB},{0x8912, 0xBDC7},
- {0x8913, 0xBDC8},{0x8914, 0xE7C4},{0x8915, 0xBDC9},{0x8916, 0xE7CA},{0x8917, 0xE7C6},{0x8918, 0xE7C7},{0x8919, 0xE7C8},{0x891A, 0xBB75},
- {0x891E, 0xEB70},{0x891F, 0xEB7C},{0x8921, 0xBFCA},{0x8922, 0xEB77},{0x8923, 0xEB79},{0x8925, 0xBFC8},{0x8926, 0xEB71},{0x8927, 0xEB75},
- {0x8929, 0xEB78},{0x892A, 0xBFC6},{0x892B, 0xBFC9},{0x892C, 0xEB7B},{0x892D, 0xEB73},{0x892E, 0xEB74},{0x892F, 0xEB7A},{0x8930, 0xEB72},
- {0x8931, 0xEB76},{0x8932, 0xBFC7},{0x8933, 0xEE72},{0x8935, 0xEE71},{0x8936, 0xC1B7},{0x8937, 0xEE77},{0x8938, 0xC1B9},{0x893B, 0xC1B6},
- {0x893C, 0xEE73},{0x893D, 0xC1BA},{0x893E, 0xEE74},{0x8941, 0xEE75},{0x8942, 0xEE78},{0x8944, 0xC1B8},{0x8946, 0xF0D6},{0x8949, 0xF0D9},
- {0x894B, 0xF0D3},{0x894C, 0xF0D5},{0x894F, 0xF0D4},{0x8950, 0xF0D7},{0x8951, 0xF0D8},{0x8952, 0xEE76},{0x8953, 0xF0D2},{0x8956, 0xC3CD},
- {0x8957, 0xF2EC},{0x8958, 0xF2EF},{0x8959, 0xF2F1},{0x895A, 0xF2EA},{0x895B, 0xF2EB},{0x895C, 0xF2EE},{0x895D, 0xF2F0},{0x895E, 0xC3CE},
- {0x895F, 0xC3CC},{0x8960, 0xC3CB},{0x8961, 0xF2ED},{0x8962, 0xF2E9},{0x8963, 0xF4CA},{0x8964, 0xC4B0},{0x8966, 0xF4CB},{0x8969, 0xF649},
- {0x896A, 0xC4FB},{0x896B, 0xF64B},{0x896C, 0xC4FC},{0x896D, 0xF648},{0x896E, 0xF64A},{0x896F, 0xC5A8},{0x8971, 0xF752},{0x8972, 0xC5A7},
- {0x8973, 0xF7FD},{0x8974, 0xF7FC},{0x8976, 0xF7FB},{0x8979, 0xF948},{0x897A, 0xF949},{0x897B, 0xF94B},{0x897C, 0xF94A},{0x897E, 0xCA50},
- {0x897F, 0xA6E8},{0x8981, 0xAD6E},{0x8982, 0xD7C5},{0x8983, 0xB5F7},{0x8985, 0xDFFA},{0x8986, 0xC2D0},{0x8988, 0xF2F2},{0x898B, 0xA8A3},
- {0x898F, 0xB357},{0x8993, 0xB356},{0x8995, 0xDBD0},{0x8996, 0xB5F8},{0x8997, 0xDBD2},{0x8998, 0xDBD1},{0x899B, 0xDFFB},{0x899C, 0xB8D0},
- {0x899D, 0xE443},{0x899E, 0xE446},{0x899F, 0xE445},{0x89A1, 0xE444},{0x89A2, 0xE7CE},{0x89A3, 0xE7D0},{0x89A4, 0xE7CF},{0x89A6, 0xBFCC},
- {0x89AA, 0xBFCB},{0x89AC, 0xC1BB},{0x89AD, 0xEE79},{0x89AE, 0xEE7B},{0x89AF, 0xEE7A},{0x89B2, 0xC2D1},{0x89B6, 0xF2F4},{0x89B7, 0xF2F3},
- {0x89B9, 0xF4CC},{0x89BA, 0xC4B1},{0x89BD, 0xC4FD},{0x89BE, 0xF754},{0x89BF, 0xF753},{0x89C0, 0xC65B},{0x89D2, 0xA8A4},{0x89D3, 0xD0AF},
- {0x89D4, 0xAD6F},{0x89D5, 0xD7C8},{0x89D6, 0xD7C6},{0x89D9, 0xD7C7},{0x89DA, 0xDBD4},{0x89DB, 0xDBD5},{0x89DC, 0xE043},{0x89DD, 0xDBD3},
- {0x89DF, 0xDFFC},{0x89E0, 0xE041},{0x89E1, 0xE040},{0x89E2, 0xE042},{0x89E3, 0xB8D1},{0x89E4, 0xDFFE},{0x89E5, 0xDFFD},{0x89E6, 0xE044},
- {0x89E8, 0xE449},{0x89E9, 0xE447},{0x89EB, 0xE448},{0x89EC, 0xE7D3},{0x89ED, 0xE7D1},{0x89F0, 0xE7D2},{0x89F1, 0xEB7D},{0x89F2, 0xEE7C},
- {0x89F3, 0xEE7D},{0x89F4, 0xC2D2},{0x89F6, 0xF2F5},{0x89F7, 0xF4CD},{0x89F8, 0xC4B2},{0x89FA, 0xF64C},{0x89FB, 0xF755},{0x89FC, 0xC5A9},
- {0x89FE, 0xF7FE},{0x89FF, 0xF94C},{0x8A00, 0xA8A5},{0x8A02, 0xAD71},{0x8A03, 0xAD72},{0x8A04, 0xD0B0},{0x8A07, 0xD0B1},{0x8A08, 0xAD70},
- {0x8A0A, 0xB054},{0x8A0C, 0xB052},{0x8A0E, 0xB051},{0x8A0F, 0xB058},{0x8A10, 0xB050},{0x8A11, 0xB059},{0x8A12, 0xD3DD},{0x8A13, 0xB056},
- {0x8A15, 0xB053},{0x8A16, 0xB057},{0x8A17, 0xB055},{0x8A18, 0xB04F},{0x8A1B, 0xB35F},{0x8A1D, 0xB359},{0x8A1E, 0xD7CC},{0x8A1F, 0xB35E},
- {0x8A22, 0xB360},{0x8A23, 0xB35A},{0x8A25, 0xB35B},{0x8A27, 0xD7CA},{0x8A2A, 0xB358},{0x8A2C, 0xD7CB},{0x8A2D, 0xB35D},{0x8A30, 0xD7C9},
- {0x8A31, 0xB35C},{0x8A34, 0xB644},{0x8A36, 0xB646},{0x8A39, 0xDBD8},{0x8A3A, 0xB645},{0x8A3B, 0xB5F9},{0x8A3C, 0xB5FD},{0x8A3E, 0xB8E4},
- {0x8A3F, 0xE049},{0x8A40, 0xDBDA},{0x8A41, 0xB5FE},{0x8A44, 0xDBDD},{0x8A45, 0xDBDE},{0x8A46, 0xB643},{0x8A48, 0xDBE0},{0x8A4A, 0xDBE2},
- {0x8A4C, 0xDBE3},{0x8A4D, 0xDBD7},{0x8A4E, 0xDBD6},{0x8A4F, 0xDBE4},{0x8A50, 0xB642},{0x8A51, 0xDBE1},{0x8A52, 0xDBDF},{0x8A54, 0xB640},
- {0x8A55, 0xB5FB},{0x8A56, 0xB647},{0x8A57, 0xDBDB},{0x8A58, 0xDBDC},{0x8A59, 0xDBD9},{0x8A5B, 0xB641},{0x8A5E, 0xB5FC},{0x8A60, 0xB5FA},
- {0x8A61, 0xE048},{0x8A62, 0xB8DF},{0x8A63, 0xB8DA},{0x8A66, 0xB8D5},{0x8A68, 0xB8E5},{0x8A69, 0xB8D6},{0x8A6B, 0xB8D2},{0x8A6C, 0xB8E1},
- {0x8A6D, 0xB8DE},{0x8A6E, 0xB8E0},{0x8A70, 0xB8D7},{0x8A71, 0xB8DC},{0x8A72, 0xB8D3},{0x8A73, 0xB8D4},{0x8A74, 0xE050},{0x8A75, 0xE04D},
- {0x8A76, 0xE045},{0x8A77, 0xE04A},{0x8A79, 0xB8E2},{0x8A7A, 0xE051},{0x8A7B, 0xB8E3},{0x8A7C, 0xB8D9},{0x8A7F, 0xE047},{0x8A81, 0xE04F},
- {0x8A82, 0xE04B},{0x8A83, 0xE04E},{0x8A84, 0xE04C},{0x8A85, 0xB8DD},{0x8A86, 0xE046},{0x8A87, 0xB8D8},{0x8A8B, 0xE44C},{0x8A8C, 0xBB78},
- {0x8A8D, 0xBB7B},{0x8A8F, 0xE44E},{0x8A91, 0xBBA5},{0x8A92, 0xE44D},{0x8A93, 0xBB7D},{0x8A95, 0xBDCF},{0x8A96, 0xE44F},{0x8A98, 0xBBA4},
- {0x8A99, 0xE44B},{0x8A9A, 0xBBA6},{0x8A9E, 0xBB79},{0x8AA0, 0xB8DB},{0x8AA1, 0xBB7C},{0x8AA3, 0xBB7A},{0x8AA4, 0xBB7E},{0x8AA5, 0xBBA2},
- {0x8AA6, 0xBB77},{0x8AA7, 0xBBA7},{0x8AA8, 0xBBA3},{0x8AAA, 0xBBA1},{0x8AAB, 0xE44A},{0x8AB0, 0xBDD6},{0x8AB2, 0xBDD2},{0x8AB6, 0xBDD9},
- {0x8AB8, 0xE7D6},{0x8AB9, 0xBDDA},{0x8ABA, 0xE7E2},{0x8ABB, 0xE7DB},{0x8ABC, 0xBDCB},{0x8ABD, 0xE7E3},{0x8ABE, 0xE7DD},{0x8ABF, 0xBDD5},
- {0x8AC0, 0xE7DE},{0x8AC2, 0xBDD4},{0x8AC3, 0xE7E1},{0x8AC4, 0xBDCE},{0x8AC5, 0xE7DF},{0x8AC6, 0xE7D5},{0x8AC7, 0xBDCD},{0x8AC8, 0xEBAA},
- {0x8AC9, 0xBDD3},{0x8ACB, 0xBDD0},{0x8ACD, 0xBDD8},{0x8ACF, 0xE7D4},{0x8AD1, 0xE7D8},{0x8AD2, 0xBDCC},{0x8AD3, 0xE7D7},{0x8AD4, 0xE7D9},
- {0x8AD5, 0xE7DA},{0x8AD6, 0xBDD7},{0x8AD7, 0xE7DC},{0x8AD8, 0xE7E0},{0x8AD9, 0xE7E4},{0x8ADB, 0xBDDB},{0x8ADC, 0xBFD2},{0x8ADD, 0xEBA5},
- {0x8ADE, 0xEBAB},{0x8ADF, 0xEBA8},{0x8AE0, 0xEB7E},{0x8AE1, 0xEBAC},{0x8AE2, 0xEBA1},{0x8AE4, 0xEBA7},{0x8AE6, 0xBFCD},{0x8AE7, 0xBFD3},
- {0x8AE8, 0xEBAD},{0x8AEB, 0xBFCF},{0x8AED, 0xBFD9},{0x8AEE, 0xBFD4},{0x8AEF, 0xEBAF},{0x8AF0, 0xEBA9},{0x8AF1, 0xBFD0},{0x8AF2, 0xEBA2},
- {0x8AF3, 0xBFDA},{0x8AF4, 0xEBA3},{0x8AF5, 0xEBA4},{0x8AF6, 0xBFDB},{0x8AF7, 0xBFD8},{0x8AF8, 0xBDD1},{0x8AFA, 0xBFCE},{0x8AFB, 0xEBB0},
- {0x8AFC, 0xBFDC},{0x8AFE, 0xBFD5},{0x8AFF, 0xEBAE},{0x8B00, 0xBFD1},{0x8B01, 0xBFD6},{0x8B02, 0xBFD7},{0x8B04, 0xC1C3},{0x8B05, 0xEEA4},
- {0x8B06, 0xEEAD},{0x8B07, 0xEEAA},{0x8B08, 0xEEAC},{0x8B0A, 0xC1C0},{0x8B0B, 0xEEA5},{0x8B0D, 0xEEAB},{0x8B0E, 0xC1BC},{0x8B0F, 0xEEA7},
- {0x8B10, 0xC1C4},{0x8B11, 0xEEA3},{0x8B12, 0xEEA8},{0x8B13, 0xEEAF},{0x8B14, 0xEBA6},{0x8B15, 0xEEA9},{0x8B16, 0xEEA2},{0x8B17, 0xC1BD},
- {0x8B18, 0xEEA1},{0x8B19, 0xC1BE},{0x8B1A, 0xEEB0},{0x8B1B, 0xC1BF},{0x8B1C, 0xEEAE},{0x8B1D, 0xC1C2},{0x8B1E, 0xEE7E},{0x8B20, 0xC1C1},
- {0x8B22, 0xEEA6},{0x8B23, 0xF0DC},{0x8B24, 0xF0EA},{0x8B25, 0xF0E5},{0x8B26, 0xF0E7},{0x8B27, 0xF0DB},{0x8B28, 0xC2D3},{0x8B2A, 0xF0DA},
- {0x8B2B, 0xC2D6},{0x8B2C, 0xC2D5},{0x8B2E, 0xF0E9},{0x8B2F, 0xF0E1},{0x8B30, 0xF0DE},{0x8B31, 0xF0E4},{0x8B33, 0xF0DD},{0x8B35, 0xF0DF},
- {0x8B36, 0xF0E8},{0x8B37, 0xF0E6},{0x8B39, 0xC2D4},{0x8B3A, 0xF0ED},{0x8B3B, 0xF0EB},{0x8B3C, 0xF0E2},{0x8B3D, 0xF0EC},{0x8B3E, 0xF0E3},
- {0x8B40, 0xF2F9},{0x8B41, 0xC3CF},{0x8B42, 0xF341},{0x8B45, 0xF64F},{0x8B46, 0xC3D6},{0x8B47, 0xF0E0},{0x8B48, 0xF2F7},{0x8B49, 0xC3D2},
- {0x8B4A, 0xF2F8},{0x8B4B, 0xF2FD},{0x8B4E, 0xC3D4},{0x8B4F, 0xC3D5},{0x8B50, 0xF2F6},{0x8B51, 0xF340},{0x8B52, 0xF342},{0x8B53, 0xF2FA},
- {0x8B54, 0xF2FC},{0x8B55, 0xF2FE},{0x8B56, 0xF2FB},{0x8B57, 0xF343},{0x8B58, 0xC3D1},{0x8B59, 0xC3D7},{0x8B5A, 0xC3D3},{0x8B5C, 0xC3D0},
- {0x8B5D, 0xF4D0},{0x8B5F, 0xC4B7},{0x8B60, 0xF4CE},{0x8B63, 0xF4D2},{0x8B65, 0xF4D3},{0x8B66, 0xC4B5},{0x8B67, 0xF4D4},{0x8B68, 0xF4D1},
- {0x8B6A, 0xF4CF},{0x8B6B, 0xC4B8},{0x8B6C, 0xC4B4},{0x8B6D, 0xF4D5},{0x8B6F, 0xC4B6},{0x8B70, 0xC4B3},{0x8B74, 0xC4FE},{0x8B77, 0xC540},
- {0x8B78, 0xF64E},{0x8B79, 0xF64D},{0x8B7A, 0xF650},{0x8B7B, 0xF651},{0x8B7D, 0xC541},{0x8B7E, 0xF756},{0x8B7F, 0xF75B},{0x8B80, 0xC5AA},
- {0x8B82, 0xF758},{0x8B84, 0xF757},{0x8B85, 0xF75A},{0x8B86, 0xF759},{0x8B88, 0xF843},{0x8B8A, 0xC5DC},{0x8B8B, 0xF842},{0x8B8C, 0xF840},
- {0x8B8E, 0xF841},{0x8B92, 0xC5FE},{0x8B93, 0xC5FD},{0x8B94, 0xF8C1},{0x8B95, 0xF8C2},{0x8B96, 0xC640},{0x8B98, 0xF94D},{0x8B99, 0xF94E},
- {0x8B9A, 0xC667},{0x8B9C, 0xC66D},{0x8B9E, 0xF9A9},{0x8B9F, 0xF9C8},{0x8C37, 0xA8A6},{0x8C39, 0xD7CD},{0x8C3B, 0xD7CE},{0x8C3C, 0xE052},
- {0x8C3D, 0xE450},{0x8C3E, 0xE7E5},{0x8C3F, 0xC1C6},{0x8C41, 0xC1C5},{0x8C42, 0xF0EE},{0x8C43, 0xF344},{0x8C45, 0xF844},{0x8C46, 0xA8A7},
- {0x8C47, 0xD3DE},{0x8C48, 0xB05A},{0x8C49, 0xB361},{0x8C4A, 0xE054},{0x8C4B, 0xE053},{0x8C4C, 0xBDDC},{0x8C4D, 0xE7E6},{0x8C4E, 0xBDDD},
- {0x8C4F, 0xEEB1},{0x8C50, 0xC2D7},{0x8C54, 0xC676},{0x8C55, 0xA8A8},{0x8C56, 0xCDCB},{0x8C57, 0xD3DF},{0x8C5A, 0xB362},{0x8C5C, 0xD7CF},
- {0x8C5D, 0xD7D0},{0x8C5F, 0xDBE5},{0x8C61, 0xB648},{0x8C62, 0xB8E6},{0x8C64, 0xE056},{0x8C65, 0xE055},{0x8C66, 0xE057},{0x8C68, 0xE451},
- {0x8C69, 0xE452},{0x8C6A, 0xBBA8},{0x8C6B, 0xBFDD},{0x8C6C, 0xBDDE},{0x8C6D, 0xBFDE},{0x8C6F, 0xEEB5},{0x8C70, 0xEEB2},{0x8C71, 0xEEB4},
- {0x8C72, 0xEEB3},{0x8C73, 0xC1C7},{0x8C75, 0xF0EF},{0x8C76, 0xF346},{0x8C77, 0xF345},{0x8C78, 0xCBA4},{0x8C79, 0xB05C},{0x8C7A, 0xB05B},
- {0x8C7B, 0xD3E0},{0x8C7D, 0xD7D1},{0x8C80, 0xDBE7},{0x8C81, 0xDBE6},{0x8C82, 0xB649},{0x8C84, 0xE059},{0x8C85, 0xE05A},{0x8C86, 0xE058},
- {0x8C89, 0xB8E8},{0x8C8A, 0xB8E7},{0x8C8C, 0xBBAA},{0x8C8D, 0xBBA9},{0x8C8F, 0xE7E7},{0x8C90, 0xEBB3},{0x8C91, 0xEBB1},{0x8C92, 0xEBB2},
- {0x8C93, 0xBFDF},{0x8C94, 0xEEB7},{0x8C95, 0xEEB6},{0x8C97, 0xF0F2},{0x8C98, 0xF0F1},{0x8C99, 0xF0F0},{0x8C9A, 0xF347},{0x8C9C, 0xF9AA},
- {0x8C9D, 0xA8A9},{0x8C9E, 0xAD73},{0x8CA0, 0xAD74},{0x8CA1, 0xB05D},{0x8CA2, 0xB05E},{0x8CA3, 0xD3E2},{0x8CA4, 0xD3E1},{0x8CA5, 0xD7D2},
- {0x8CA7, 0xB368},{0x8CA8, 0xB366},{0x8CA9, 0xB363},{0x8CAA, 0xB367},{0x8CAB, 0xB365},{0x8CAC, 0xB364},{0x8CAF, 0xB64A},{0x8CB0, 0xDBEA},
- {0x8CB2, 0xB8ED},{0x8CB3, 0xB64C},{0x8CB4, 0xB651},{0x8CB5, 0xDBEC},{0x8CB6, 0xB653},{0x8CB7, 0xB652},{0x8CB8, 0xB655},{0x8CB9, 0xDBEB},
- {0x8CBA, 0xDBE8},{0x8CBB, 0xB64F},{0x8CBC, 0xB64B},{0x8CBD, 0xB64D},{0x8CBE, 0xDBE9},{0x8CBF, 0xB654},{0x8CC0, 0xB650},{0x8CC1, 0xB64E},
- {0x8CC2, 0xB8EF},{0x8CC3, 0xB8EE},{0x8CC4, 0xB8EC},{0x8CC5, 0xB8F0},{0x8CC7, 0xB8EA},{0x8CC8, 0xB8EB},{0x8CCA, 0xB8E9},{0x8CCC, 0xE05B},
- {0x8CCF, 0xE454},{0x8CD1, 0xBBAC},{0x8CD2, 0xBBAD},{0x8CD3, 0xBBAB},{0x8CD5, 0xE453},{0x8CD7, 0xE455},{0x8CD9, 0xE7EA},{0x8CDA, 0xE7EC},
- {0x8CDC, 0xBDE7},{0x8CDD, 0xE7ED},{0x8CDE, 0xBDE0},{0x8CDF, 0xE7E9},{0x8CE0, 0xBDDF},{0x8CE1, 0xBDE9},{0x8CE2, 0xBDE5},{0x8CE3, 0xBDE6},
- {0x8CE4, 0xBDE2},{0x8CE5, 0xE7E8},{0x8CE6, 0xBDE1},{0x8CE7, 0xE7EE},{0x8CE8, 0xE7EB},{0x8CEA, 0xBDE8},{0x8CEC, 0xBDE3},{0x8CED, 0xBDE4},
- {0x8CEE, 0xEBB5},{0x8CF0, 0xEBB7},{0x8CF1, 0xEBB6},{0x8CF3, 0xEBB8},{0x8CF4, 0xBFE0},{0x8CF5, 0xEBB4},{0x8CF8, 0xC1CB},{0x8CF9, 0xEEB8},
- {0x8CFA, 0xC1C8},{0x8CFB, 0xC1CC},{0x8CFC, 0xC1CA},{0x8CFD, 0xC1C9},{0x8CFE, 0xF0F3},{0x8D00, 0xF0F6},{0x8D02, 0xF0F5},{0x8D04, 0xF0F4},
- {0x8D05, 0xC2D8},{0x8D06, 0xF348},{0x8D07, 0xF349},{0x8D08, 0xC3D8},{0x8D09, 0xF34A},{0x8D0A, 0xC3D9},{0x8D0D, 0xC4BA},{0x8D0F, 0xC4B9},
- {0x8D10, 0xF652},{0x8D13, 0xC542},{0x8D14, 0xF653},{0x8D15, 0xF75C},{0x8D16, 0xC5AB},{0x8D17, 0xC5AC},{0x8D19, 0xF845},{0x8D1B, 0xC642},
- {0x8D64, 0xA8AA},{0x8D66, 0xB36A},{0x8D67, 0xB369},{0x8D68, 0xE05C},{0x8D69, 0xE05D},{0x8D6B, 0xBBAE},{0x8D6C, 0xEBB9},{0x8D6D, 0xBDEA},
- {0x8D6E, 0xEBBA},{0x8D6F, 0xEEB9},{0x8D70, 0xA8AB},{0x8D72, 0xD0B2},{0x8D73, 0xAD76},{0x8D74, 0xAD75},{0x8D76, 0xD3E3},{0x8D77, 0xB05F},
- {0x8D78, 0xD3E4},{0x8D79, 0xD7D5},{0x8D7B, 0xD7D4},{0x8D7D, 0xD7D3},{0x8D80, 0xDBEE},{0x8D81, 0xB658},{0x8D84, 0xDBED},{0x8D85, 0xB657},
- {0x8D89, 0xDBEF},{0x8D8A, 0xB656},{0x8D8C, 0xE05F},{0x8D8D, 0xE062},{0x8D8E, 0xE060},{0x8D8F, 0xE061},{0x8D90, 0xE065},{0x8D91, 0xE05E},
- {0x8D92, 0xE066},{0x8D93, 0xE063},{0x8D94, 0xE064},{0x8D95, 0xBBB0},{0x8D96, 0xE456},{0x8D99, 0xBBAF},{0x8D9B, 0xE7F2},{0x8D9C, 0xE7F0},
- {0x8D9F, 0xBDEB},{0x8DA0, 0xE7EF},{0x8DA1, 0xE7F1},{0x8DA3, 0xBDEC},{0x8DA5, 0xEBBB},{0x8DA7, 0xEBBC},{0x8DA8, 0xC1CD},{0x8DAA, 0xF34C},
- {0x8DAB, 0xF34E},{0x8DAC, 0xF34B},{0x8DAD, 0xF34D},{0x8DAE, 0xF4D6},{0x8DAF, 0xF654},{0x8DB2, 0xF96F},{0x8DB3, 0xA8AC},{0x8DB4, 0xAD77},
- {0x8DB5, 0xD3E5},{0x8DB6, 0xD3E7},{0x8DB7, 0xD3E6},{0x8DB9, 0xD7D8},{0x8DBA, 0xB36C},{0x8DBC, 0xD7D6},{0x8DBE, 0xB36B},{0x8DBF, 0xD7D9},
- {0x8DC1, 0xD7DA},{0x8DC2, 0xD7D7},{0x8DC5, 0xDBFB},{0x8DC6, 0xB660},{0x8DC7, 0xDBF3},{0x8DC8, 0xDBF9},{0x8DCB, 0xB65B},{0x8DCC, 0xB65E},
- {0x8DCD, 0xDBF2},{0x8DCE, 0xB659},{0x8DCF, 0xDBF6},{0x8DD0, 0xE06C},{0x8DD1, 0xB65D},{0x8DD3, 0xDBF1},{0x8DD5, 0xDBF7},{0x8DD6, 0xDBF4},
- {0x8DD7, 0xDBFA},{0x8DD8, 0xDBF0},{0x8DD9, 0xDBF8},{0x8DDA, 0xB65C},{0x8DDB, 0xB65F},{0x8DDC, 0xDBF5},{0x8DDD, 0xB65A},{0x8DDF, 0xB8F2},
- {0x8DE0, 0xE068},{0x8DE1, 0xB8F1},{0x8DE2, 0xE06F},{0x8DE3, 0xE06E},{0x8DE4, 0xB8F8},{0x8DE6, 0xB8F9},{0x8DE7, 0xE070},{0x8DE8, 0xB8F3},
- {0x8DE9, 0xE06D},{0x8DEA, 0xB8F7},{0x8DEB, 0xE072},{0x8DEC, 0xE069},{0x8DEE, 0xE06B},{0x8DEF, 0xB8F4},{0x8DF0, 0xE067},{0x8DF1, 0xE06A},
- {0x8DF2, 0xE071},{0x8DF3, 0xB8F5},{0x8DF4, 0xE073},{0x8DFA, 0xB8F6},{0x8DFC, 0xBBB1},{0x8DFD, 0xE45B},{0x8DFE, 0xE461},{0x8DFF, 0xE459},
- {0x8E00, 0xE462},{0x8E02, 0xE458},{0x8E03, 0xE45D},{0x8E04, 0xE463},{0x8E05, 0xE460},{0x8E06, 0xE45F},{0x8E07, 0xE45E},{0x8E09, 0xE457},
- {0x8E0A, 0xE45C},{0x8E0D, 0xE45A},{0x8E0F, 0xBDF1},{0x8E10, 0xBDEE},{0x8E11, 0xE7FB},{0x8E12, 0xE841},{0x8E13, 0xE843},{0x8E14, 0xE840},
- {0x8E15, 0xE7F8},{0x8E16, 0xE7FA},{0x8E17, 0xE845},{0x8E18, 0xE842},{0x8E19, 0xE7FC},{0x8E1A, 0xE846},{0x8E1B, 0xE7F9},{0x8E1C, 0xE844},
- {0x8E1D, 0xBDEF},{0x8E1E, 0xBDF5},{0x8E1F, 0xBDF3},{0x8E20, 0xE7F3},{0x8E21, 0xBDF4},{0x8E22, 0xBDF0},{0x8E23, 0xE7F4},{0x8E24, 0xE7F6},
- {0x8E25, 0xE7F5},{0x8E26, 0xE7FD},{0x8E27, 0xE7FE},{0x8E29, 0xBDF2},{0x8E2B, 0xBDED},{0x8E2E, 0xE7F7},{0x8E30, 0xEBC6},{0x8E31, 0xBFE2},
- {0x8E33, 0xEBBD},{0x8E34, 0xBFE3},{0x8E35, 0xBFE6},{0x8E36, 0xEBC2},{0x8E38, 0xEBBF},{0x8E39, 0xBFE5},{0x8E3C, 0xEBC3},{0x8E3D, 0xEBC4},
- {0x8E3E, 0xEBBE},{0x8E3F, 0xEBC7},{0x8E40, 0xEBC0},{0x8E41, 0xEBC5},{0x8E42, 0xBFE4},{0x8E44, 0xBFE1},{0x8E45, 0xEBC1},{0x8E47, 0xEEBF},
- {0x8E48, 0xC1D0},{0x8E49, 0xC1CE},{0x8E4A, 0xC1D1},{0x8E4B, 0xC1CF},{0x8E4C, 0xEEBE},{0x8E4D, 0xEEBB},{0x8E4E, 0xEEBA},{0x8E50, 0xEEBD},
- {0x8E53, 0xEEBC},{0x8E54, 0xF145},{0x8E55, 0xC2DE},{0x8E56, 0xF0FB},{0x8E57, 0xF0FA},{0x8E59, 0xC2D9},{0x8E5A, 0xF141},{0x8E5B, 0xF140},
- {0x8E5C, 0xF0F7},{0x8E5D, 0xF143},{0x8E5E, 0xF0FC},{0x8E5F, 0xC2DD},{0x8E60, 0xF0F9},{0x8E61, 0xF142},{0x8E62, 0xF0F8},{0x8E63, 0xC2DA},
- {0x8E64, 0xC2DC},{0x8E65, 0xF0FD},{0x8E66, 0xC2DB},{0x8E67, 0xF0FE},{0x8E69, 0xF144},{0x8E6A, 0xF352},{0x8E6C, 0xC3DE},{0x8E6D, 0xF34F},
- {0x8E6F, 0xF353},{0x8E72, 0xC3DB},{0x8E73, 0xF351},{0x8E74, 0xC3E0},{0x8E76, 0xC3DD},{0x8E78, 0xF350},{0x8E7A, 0xC3DF},{0x8E7B, 0xF354},
- {0x8E7C, 0xC3DA},{0x8E81, 0xC4BC},{0x8E82, 0xC4BE},{0x8E84, 0xF4D9},{0x8E85, 0xC4BD},{0x8E86, 0xF4D7},{0x8E87, 0xC3DC},{0x8E88, 0xF4D8},
- {0x8E89, 0xC4BB},{0x8E8A, 0xC543},{0x8E8B, 0xC545},{0x8E8C, 0xF656},{0x8E8D, 0xC544},{0x8E8E, 0xF655},{0x8E90, 0xF761},{0x8E91, 0xC5AD},
- {0x8E92, 0xF760},{0x8E93, 0xC5AE},{0x8E94, 0xF75E},{0x8E95, 0xF75D},{0x8E96, 0xF762},{0x8E97, 0xF763},{0x8E98, 0xF846},{0x8E9A, 0xF75F},
- {0x8E9D, 0xF8C6},{0x8E9E, 0xF8C3},{0x8E9F, 0xF8C4},{0x8EA0, 0xF8C5},{0x8EA1, 0xC65C},{0x8EA3, 0xF951},{0x8EA4, 0xF950},{0x8EA5, 0xF94F},
- {0x8EA6, 0xF970},{0x8EA8, 0xF9BE},{0x8EA9, 0xF9AB},{0x8EAA, 0xC66E},{0x8EAB, 0xA8AD},{0x8EAC, 0xB060},{0x8EB2, 0xB8FA},{0x8EBA, 0xBDF6},
- {0x8EBD, 0xEBC8},{0x8EC0, 0xC2DF},{0x8EC2, 0xF355},{0x8EC9, 0xF9AC},{0x8ECA, 0xA8AE},{0x8ECB, 0xAAEE},{0x8ECC, 0xAD79},{0x8ECD, 0xAD78},
- {0x8ECF, 0xB063},{0x8ED1, 0xD3E8},{0x8ED2, 0xB061},{0x8ED3, 0xD3E9},{0x8ED4, 0xB062},{0x8ED7, 0xD7DF},{0x8ED8, 0xD7DB},{0x8EDB, 0xB36D},
- {0x8EDC, 0xD7DE},{0x8EDD, 0xD7DD},{0x8EDE, 0xD7DC},{0x8EDF, 0xB36E},{0x8EE0, 0xD7E0},{0x8EE1, 0xD7E1},{0x8EE5, 0xDC43},{0x8EE6, 0xDC41},
- {0x8EE7, 0xDC45},{0x8EE8, 0xDC46},{0x8EE9, 0xDC4C},{0x8EEB, 0xDC48},{0x8EEC, 0xDC4A},{0x8EEE, 0xDC42},{0x8EEF, 0xDBFC},{0x8EF1, 0xDC49},
- {0x8EF4, 0xDC4B},{0x8EF5, 0xDC44},{0x8EF6, 0xDC47},{0x8EF7, 0xDBFD},{0x8EF8, 0xB662},{0x8EF9, 0xDC40},{0x8EFA, 0xDBFE},{0x8EFB, 0xB661},
- {0x8EFC, 0xB663},{0x8EFE, 0xB8FD},{0x8EFF, 0xE075},{0x8F00, 0xE077},{0x8F01, 0xE076},{0x8F02, 0xE07B},{0x8F03, 0xB8FB},{0x8F05, 0xE078},
- {0x8F06, 0xE074},{0x8F07, 0xE079},{0x8F08, 0xE07A},{0x8F09, 0xB8FC},{0x8F0A, 0xB8FE},{0x8F0B, 0xE07C},{0x8F0D, 0xE467},{0x8F0E, 0xE466},
- {0x8F10, 0xE464},{0x8F11, 0xE465},{0x8F12, 0xBBB3},{0x8F13, 0xBBB5},{0x8F14, 0xBBB2},{0x8F15, 0xBBB4},{0x8F16, 0xE84D},{0x8F17, 0xE84E},
- {0x8F18, 0xE849},{0x8F1A, 0xE84A},{0x8F1B, 0xBDF8},{0x8F1C, 0xBDFD},{0x8F1D, 0xBDF7},{0x8F1E, 0xBDFE},{0x8F1F, 0xBDF9},{0x8F20, 0xE84B},
- {0x8F23, 0xE84C},{0x8F24, 0xE848},{0x8F25, 0xBE40},{0x8F26, 0xBDFB},{0x8F29, 0xBDFA},{0x8F2A, 0xBDFC},{0x8F2C, 0xE847},{0x8F2E, 0xEBCA},
- {0x8F2F, 0xBFE8},{0x8F32, 0xEBCC},{0x8F33, 0xBFEA},{0x8F34, 0xEBCF},{0x8F35, 0xEBCB},{0x8F36, 0xEBC9},{0x8F37, 0xEBCE},{0x8F38, 0xBFE9},
- {0x8F39, 0xEBCD},{0x8F3B, 0xBFE7},{0x8F3E, 0xC1D3},{0x8F3F, 0xC1D6},{0x8F40, 0xEEC1},{0x8F42, 0xC1D4},{0x8F43, 0xEEC0},{0x8F44, 0xC1D2},
- {0x8F45, 0xC1D5},{0x8F46, 0xF146},{0x8F47, 0xF147},{0x8F48, 0xF148},{0x8F49, 0xC2E0},{0x8F4B, 0xF149},{0x8F4D, 0xC2E1},{0x8F4E, 0xC3E2},
- {0x8F4F, 0xF358},{0x8F50, 0xF359},{0x8F51, 0xF357},{0x8F52, 0xF356},{0x8F53, 0xF35A},{0x8F54, 0xC3E1},{0x8F55, 0xF4DD},{0x8F56, 0xF4DB},
- {0x8F57, 0xF4DC},{0x8F58, 0xF4DE},{0x8F59, 0xF4DA},{0x8F5A, 0xF4DF},{0x8F5B, 0xF658},{0x8F5D, 0xF659},{0x8F5E, 0xF657},{0x8F5F, 0xC546},
- {0x8F60, 0xF764},{0x8F61, 0xC5AF},{0x8F62, 0xF765},{0x8F63, 0xF848},{0x8F64, 0xF847},{0x8F9B, 0xA8AF},{0x8F9C, 0xB664},{0x8F9F, 0xB940},
- {0x8FA3, 0xBBB6},{0x8FA6, 0xBFEC},{0x8FA8, 0xBFEB},{0x8FAD, 0xC3E3},{0x8FAE, 0xC47C},{0x8FAF, 0xC547},{0x8FB0, 0xA8B0},{0x8FB1, 0xB064},
- {0x8FB2, 0xB941},{0x8FB4, 0xF35B},{0x8FBF, 0xCBA6},{0x8FC2, 0xA8B1},{0x8FC4, 0xA8B4},{0x8FC5, 0xA8B3},{0x8FC6, 0xA8B2},{0x8FC9, 0xCBA5},
- {0x8FCB, 0xCDCD},{0x8FCD, 0xCDCF},{0x8FCE, 0xAAEF},{0x8FD1, 0xAAF1},{0x8FD2, 0xCDCC},{0x8FD3, 0xCDCE},{0x8FD4, 0xAAF0},{0x8FD5, 0xCDD1},
- {0x8FD6, 0xCDD0},{0x8FD7, 0xCDD2},{0x8FE0, 0xD0B6},{0x8FE1, 0xD0B4},{0x8FE2, 0xAD7C},{0x8FE3, 0xD0B3},{0x8FE4, 0xADA3},{0x8FE5, 0xAD7E},
- {0x8FE6, 0xAD7B},{0x8FE8, 0xADA4},{0x8FEA, 0xAD7D},{0x8FEB, 0xADA2},{0x8FED, 0xADA1},{0x8FEE, 0xD0B5},{0x8FF0, 0xAD7A},{0x8FF4, 0xB06A},
- {0x8FF5, 0xD3EB},{0x8FF6, 0xD3F1},{0x8FF7, 0xB067},{0x8FF8, 0xB06E},{0x8FFA, 0xB069},{0x8FFB, 0xD3EE},{0x8FFC, 0xD3F0},{0x8FFD, 0xB06C},
- {0x8FFE, 0xD3EA},{0x8FFF, 0xD3ED},{0x9000, 0xB068},{0x9001, 0xB065},{0x9002, 0xD3EC},{0x9003, 0xB06B},{0x9004, 0xD3EF},{0x9005, 0xB06D},
- {0x9006, 0xB066},{0x900B, 0xD7E3},{0x900C, 0xD7E6},{0x900D, 0xB370},{0x900F, 0xB37A},{0x9010, 0xB376},{0x9011, 0xD7E4},{0x9014, 0xB37E},
- {0x9015, 0xB377},{0x9016, 0xB37C},{0x9017, 0xB372},{0x9019, 0xB36F},{0x901A, 0xB371},{0x901B, 0xB37D},{0x901C, 0xD7E5},{0x901D, 0xB375},
- {0x901E, 0xB378},{0x901F, 0xB374},{0x9020, 0xB379},{0x9021, 0xD7E7},{0x9022, 0xB37B},{0x9023, 0xB373},{0x9024, 0xD7E2},{0x902D, 0xDC4D},
- {0x902E, 0xB665},{0x902F, 0xDC4F},{0x9031, 0xB667},{0x9032, 0xB669},{0x9034, 0xDC4E},{0x9035, 0xB666},{0x9036, 0xB66A},{0x9038, 0xB668},
- {0x903C, 0xB947},{0x903D, 0xE0A3},{0x903E, 0xB94F},{0x903F, 0xE07E},{0x9041, 0xB950},{0x9042, 0xB945},{0x9044, 0xE0A1},{0x9047, 0xB94A},
- {0x9049, 0xE0A2},{0x904A, 0xB943},{0x904B, 0xB942},{0x904D, 0xB94D},{0x904E, 0xB94C},{0x904F, 0xB94B},{0x9050, 0xB949},{0x9051, 0xB94E},
- {0x9052, 0xE07D},{0x9053, 0xB944},{0x9054, 0xB946},{0x9055, 0xB948},{0x9058, 0xBBB8},{0x9059, 0xBBBB},{0x905B, 0xBBBF},{0x905C, 0xBBB9},
- {0x905D, 0xBBBE},{0x905E, 0xBBBC},{0x9060, 0xBBB7},{0x9062, 0xBBBD},{0x9063, 0xBBBA},{0x9067, 0xE852},{0x9068, 0xBE43},{0x9069, 0xBE41},
- {0x906B, 0xE853},{0x906D, 0xBE44},{0x906E, 0xBE42},{0x906F, 0xE851},{0x9070, 0xE850},{0x9072, 0xBFF0},{0x9073, 0xE84F},{0x9074, 0xBFEE},
- {0x9075, 0xBFED},{0x9076, 0xEBD0},{0x9077, 0xBE45},{0x9078, 0xBFEF},{0x9079, 0xEBD1},{0x907A, 0xBFF2},{0x907B, 0xEBD2},{0x907C, 0xBFF1},
- {0x907D, 0xC1D8},{0x907E, 0xEEC3},{0x907F, 0xC1D7},{0x9080, 0xC1DC},{0x9081, 0xC1DA},{0x9082, 0xC1DB},{0x9083, 0xC2E3},{0x9084, 0xC1D9},
- {0x9085, 0xEEC2},{0x9086, 0xEBD3},{0x9087, 0xC2E2},{0x9088, 0xC2E4},{0x908A, 0xC3E4},{0x908B, 0xC3E5},{0x908D, 0xF4E0},{0x908F, 0xC5DE},
- {0x9090, 0xC5DD},{0x9091, 0xA8B6},{0x9094, 0xCA55},{0x9095, 0xB06F},{0x9097, 0xCA52},{0x9098, 0xCA53},{0x9099, 0xCA51},{0x909B, 0xCA54},
- {0x909E, 0xCBAA},{0x909F, 0xCBA7},{0x90A0, 0xCBAC},{0x90A1, 0xCBA8},{0x90A2, 0xA8B7},{0x90A3, 0xA8BA},{0x90A5, 0xCBA9},{0x90A6, 0xA8B9},
- {0x90A7, 0xCBAB},{0x90AA, 0xA8B8},{0x90AF, 0xCDD5},{0x90B0, 0xCDD7},{0x90B1, 0xAAF4},{0x90B2, 0xCDD3},{0x90B3, 0xCDD6},{0x90B4, 0xCDD4},
- {0x90B5, 0xAAF2},{0x90B6, 0xAAF5},{0x90B8, 0xAAF3},{0x90BD, 0xD0B8},{0x90BE, 0xD0BC},{0x90BF, 0xD0B9},{0x90C1, 0xADA7},{0x90C3, 0xADA8},
- {0x90C5, 0xD0BB},{0x90C7, 0xD0BD},{0x90C8, 0xD0BF},{0x90CA, 0xADA5},{0x90CB, 0xD0BE},{0x90CE, 0xADA6},{0x90D4, 0xD7EE},{0x90D5, 0xD0BA},
- {0x90D6, 0xD3F2},{0x90D7, 0xD3FB},{0x90D8, 0xD3F9},{0x90D9, 0xD3F4},{0x90DA, 0xD3F5},{0x90DB, 0xD3FA},{0x90DC, 0xD3FC},{0x90DD, 0xB071},
- {0x90DF, 0xD3F7},{0x90E0, 0xD3F3},{0x90E1, 0xB070},{0x90E2, 0xB072},{0x90E3, 0xD3F6},{0x90E4, 0xD3FD},{0x90E5, 0xD3F8},{0x90E8, 0xB3A1},
- {0x90E9, 0xD7F1},{0x90EA, 0xD7E9},{0x90EB, 0xD7EF},{0x90EC, 0xD7F0},{0x90ED, 0xB3A2},{0x90EF, 0xD7E8},{0x90F0, 0xD7EA},{0x90F1, 0xD0B7},
- {0x90F2, 0xD7EC},{0x90F3, 0xD7ED},{0x90F4, 0xD7EB},{0x90F5, 0xB66C},{0x90F9, 0xDC56},{0x90FA, 0xEBD4},{0x90FB, 0xDC57},{0x90FC, 0xDC54},
- {0x90FD, 0xB3A3},{0x90FE, 0xB66E},{0x90FF, 0xDC53},{0x9100, 0xDC59},{0x9101, 0xDC58},{0x9102, 0xB66B},{0x9103, 0xDC5C},{0x9104, 0xDC52},
- {0x9105, 0xDC5B},{0x9106, 0xDC50},{0x9107, 0xDC5A},{0x9108, 0xDC55},{0x9109, 0xB66D},{0x910B, 0xE0AA},{0x910D, 0xE0A5},{0x910E, 0xE0AB},
- {0x910F, 0xE0A6},{0x9110, 0xE0A4},{0x9111, 0xE0A7},{0x9112, 0xB951},{0x9114, 0xE0A9},{0x9116, 0xE0A8},{0x9117, 0xB952},{0x9118, 0xBBC1},
- {0x9119, 0xBBC0},{0x911A, 0xE46E},{0x911B, 0xE471},{0x911C, 0xE469},{0x911D, 0xE46D},{0x911E, 0xBBC2},{0x911F, 0xE46C},{0x9120, 0xE46A},
- {0x9121, 0xE470},{0x9122, 0xE46B},{0x9123, 0xE468},{0x9124, 0xE46F},{0x9126, 0xE859},{0x9127, 0xBE48},{0x9128, 0xF14A},{0x9129, 0xE856},
- {0x912A, 0xE857},{0x912B, 0xE855},{0x912C, 0xDC51},{0x912D, 0xBE47},{0x912E, 0xE85A},{0x912F, 0xE854},{0x9130, 0xBE46},{0x9131, 0xBE49},
- {0x9132, 0xE858},{0x9133, 0xEBD5},{0x9134, 0xBFF3},{0x9135, 0xEBD6},{0x9136, 0xEBD7},{0x9138, 0xEEC4},{0x9139, 0xC1DD},{0x913A, 0xF14B},
- {0x913B, 0xF14C},{0x913E, 0xF14D},{0x913F, 0xF35D},{0x9140, 0xF35C},{0x9141, 0xF4E2},{0x9143, 0xF4E1},{0x9144, 0xF65B},{0x9145, 0xF65C},
- {0x9146, 0xF65A},{0x9147, 0xF766},{0x9148, 0xC5B0},{0x9149, 0xA8BB},{0x914A, 0xADAA},{0x914B, 0xADA9},{0x914C, 0xB075},{0x914D, 0xB074},
- {0x914E, 0xD440},{0x914F, 0xD441},{0x9150, 0xD3FE},{0x9152, 0xB073},{0x9153, 0xD7F5},{0x9155, 0xD7F6},{0x9156, 0xD7F2},{0x9157, 0xB3A4},
- {0x9158, 0xD7F3},{0x915A, 0xD7F4},{0x915F, 0xDC5F},{0x9160, 0xDC61},{0x9161, 0xDC5D},{0x9162, 0xDC60},{0x9163, 0xB66F},{0x9164, 0xDC5E},
- {0x9165, 0xB670},{0x9168, 0xDD73},{0x9169, 0xB955},{0x916A, 0xB954},{0x916C, 0xB953},{0x916E, 0xE0AC},{0x916F, 0xE0AD},{0x9172, 0xE473},
- {0x9173, 0xE475},{0x9174, 0xBBC6},{0x9175, 0xBBC3},{0x9177, 0xBBC5},{0x9178, 0xBBC4},{0x9179, 0xE474},{0x917A, 0xE472},{0x9180, 0xE861},
- {0x9181, 0xE85E},{0x9182, 0xE85F},{0x9183, 0xBE4D},{0x9184, 0xE860},{0x9185, 0xE85B},{0x9186, 0xE85C},{0x9187, 0xBE4A},{0x9189, 0xBE4B},
- {0x918A, 0xE85D},{0x918B, 0xBE4C},{0x918D, 0xEBDB},{0x918F, 0xEBDC},{0x9190, 0xEBD9},{0x9191, 0xEBDA},{0x9192, 0xBFF4},{0x9193, 0xEBD8},
- {0x9199, 0xEEC8},{0x919A, 0xEEC5},{0x919B, 0xEEC7},{0x919C, 0xC1E0},{0x919D, 0xEECB},{0x919E, 0xC1DF},{0x919F, 0xEEC9},{0x91A0, 0xEECC},
- {0x91A1, 0xEECA},{0x91A2, 0xEEC6},{0x91A3, 0xC1DE},{0x91A5, 0xF14F},{0x91A7, 0xF150},{0x91A8, 0xF14E},{0x91AA, 0xF152},{0x91AB, 0xC2E5},
- {0x91AC, 0xC2E6},{0x91AD, 0xF35F},{0x91AE, 0xC3E7},{0x91AF, 0xF151},{0x91B0, 0xF35E},{0x91B1, 0xC3E6},{0x91B2, 0xF4E5},{0x91B3, 0xF4E6},
- {0x91B4, 0xC4BF},{0x91B5, 0xF4E4},{0x91B7, 0xF4E3},{0x91B9, 0xF65D},{0x91BA, 0xC548},{0x91BC, 0xF849},{0x91BD, 0xF8C8},{0x91BE, 0xF8C7},
- {0x91C0, 0xC643},{0x91C1, 0xC65D},{0x91C2, 0xF8C9},{0x91C3, 0xF971},{0x91C5, 0xC66F},{0x91C6, 0xA8BC},{0x91C7, 0xAAF6},{0x91C9, 0xB956},
- {0x91CB, 0xC4C0},{0x91CC, 0xA8BD},{0x91CD, 0xADAB},{0x91CE, 0xB3A5},{0x91CF, 0xB671},{0x91D0, 0xC2E7},{0x91D1, 0xAAF7},{0x91D3, 0xD0C1},
- {0x91D4, 0xD0C0},{0x91D5, 0xD442},{0x91D7, 0xB078},{0x91D8, 0xB076},{0x91D9, 0xB07A},{0x91DA, 0xD444},{0x91DC, 0xB079},{0x91DD, 0xB077},
- {0x91E2, 0xD443},{0x91E3, 0xB3A8},{0x91E4, 0xD7FC},{0x91E6, 0xB3A7},{0x91E7, 0xB3A9},{0x91E8, 0xD842},{0x91E9, 0xB3AB},{0x91EA, 0xD7FE},
- {0x91EB, 0xD840},{0x91EC, 0xD7F7},{0x91ED, 0xB3AA},{0x91EE, 0xD843},{0x91F1, 0xD7F9},{0x91F3, 0xD7FA},{0x91F4, 0xD7F8},{0x91F5, 0xB3A6},
- {0x91F7, 0xD841},{0x91F8, 0xD7FB},{0x91F9, 0xD7FD},{0x91FD, 0xDC6D},{0x91FF, 0xDC6C},{0x9200, 0xDC6A},{0x9201, 0xDC62},{0x9202, 0xDC71},
- {0x9203, 0xDC65},{0x9204, 0xDC6F},{0x9205, 0xDC76},{0x9206, 0xDC6E},{0x9207, 0xB679},{0x9209, 0xB675},{0x920A, 0xDC63},{0x920C, 0xDC69},
- {0x920D, 0xB677},{0x920F, 0xDC68},{0x9210, 0xB678},{0x9211, 0xB67A},{0x9212, 0xDC6B},{0x9214, 0xB672},{0x9215, 0xB673},{0x9216, 0xDC77},
- {0x9217, 0xDC75},{0x9219, 0xDC74},{0x921A, 0xDC66},{0x921C, 0xDC72},{0x921E, 0xB676},{0x9223, 0xB674},{0x9224, 0xDC73},{0x9225, 0xDC64},
- {0x9226, 0xDC67},{0x9227, 0xDC70},{0x922D, 0xE4BA},{0x922E, 0xE0B7},{0x9230, 0xE0B0},{0x9231, 0xE0C3},{0x9232, 0xE0CC},{0x9233, 0xE0B3},
- {0x9234, 0xB961},{0x9236, 0xE0C0},{0x9237, 0xB957},{0x9238, 0xB959},{0x9239, 0xB965},{0x923A, 0xE0B1},{0x923D, 0xB95A},{0x923E, 0xB95C},
- {0x923F, 0xB966},{0x9240, 0xB95B},{0x9245, 0xB964},{0x9246, 0xE0B9},{0x9248, 0xE0AE},{0x9249, 0xB962},{0x924A, 0xE0B8},{0x924B, 0xB95E},
- {0x924C, 0xE0CA},{0x924D, 0xB963},{0x924E, 0xE0C8},{0x924F, 0xE0BC},{0x9250, 0xE0C6},{0x9251, 0xB960},{0x9252, 0xE0AF},{0x9253, 0xE0C9},
- {0x9254, 0xE0C4},{0x9256, 0xE0CB},{0x9257, 0xB958},{0x925A, 0xB967},{0x925B, 0xB95D},{0x925E, 0xE0B5},{0x9260, 0xE0BD},{0x9261, 0xE0C1},
- {0x9263, 0xE0C5},{0x9264, 0xB95F},{0x9265, 0xE0B4},{0x9266, 0xE0B2},{0x9267, 0xE0BE},{0x926C, 0xE0BB},{0x926D, 0xE0BA},{0x926F, 0xE0BF},
- {0x9270, 0xE0C2},{0x9272, 0xE0C7},{0x9276, 0xE478},{0x9278, 0xBBC7},{0x9279, 0xE4A4},{0x927A, 0xE47A},{0x927B, 0xBBCC},{0x927C, 0xBBD0},
- {0x927D, 0xE4AD},{0x927E, 0xE4B5},{0x927F, 0xE4A6},{0x9280, 0xBBC8},{0x9282, 0xE4AA},{0x9283, 0xE0B6},{0x9285, 0xBBC9},{0x9286, 0xE4B1},
- {0x9287, 0xE4B6},{0x9288, 0xE4AE},{0x928A, 0xE4B0},{0x928B, 0xE4B9},{0x928C, 0xE4B2},{0x928D, 0xE47E},{0x928E, 0xE4A9},{0x9291, 0xBBD1},
- {0x9293, 0xBBCD},{0x9294, 0xE47C},{0x9295, 0xE4AB},{0x9296, 0xBBCB},{0x9297, 0xE4A5},{0x9298, 0xBBCA},{0x9299, 0xE4B3},{0x929A, 0xE4A2},
- {0x929B, 0xE479},{0x929C, 0xBBCE},{0x929D, 0xE4B8},{0x92A0, 0xE47B},{0x92A1, 0xE4AF},{0x92A2, 0xE4AC},{0x92A3, 0xE4A7},{0x92A4, 0xE477},
- {0x92A5, 0xE476},{0x92A6, 0xE4A1},{0x92A7, 0xE4B4},{0x92A8, 0xBBCF},{0x92A9, 0xE4B7},{0x92AA, 0xE47D},{0x92AB, 0xE4A3},{0x92AC, 0xBE52},
- {0x92B2, 0xBE5A},{0x92B3, 0xBE55},{0x92B4, 0xE8A4},{0x92B5, 0xE8A1},{0x92B6, 0xE867},{0x92B7, 0xBE50},{0x92BB, 0xBE4F},{0x92BC, 0xBE56},
- {0x92C0, 0xE865},{0x92C1, 0xBE54},{0x92C2, 0xE871},{0x92C3, 0xE863},{0x92C4, 0xE864},{0x92C5, 0xBE4E},{0x92C6, 0xE8A3},{0x92C7, 0xBE58},
- {0x92C8, 0xE874},{0x92C9, 0xE879},{0x92CA, 0xE873},{0x92CB, 0xEBEE},{0x92CC, 0xE86F},{0x92CD, 0xE877},{0x92CE, 0xE875},{0x92CF, 0xE868},
- {0x92D0, 0xE862},{0x92D1, 0xE87D},{0x92D2, 0xBE57},{0x92D3, 0xE87E},{0x92D5, 0xE878},{0x92D7, 0xE86D},{0x92D8, 0xE86B},{0x92D9, 0xE866},
- {0x92DD, 0xE86E},{0x92DE, 0xE87B},{0x92DF, 0xE86A},{0x92E0, 0xE87A},{0x92E1, 0xE8A2},{0x92E4, 0xBE53},{0x92E6, 0xE876},{0x92E7, 0xE87C},
- {0x92E8, 0xE872},{0x92E9, 0xE86C},{0x92EA, 0xBE51},{0x92EE, 0xE4A8},{0x92EF, 0xE870},{0x92F0, 0xBE59},{0x92F1, 0xE869},{0x92F7, 0xEBF4},
- {0x92F8, 0xBFF7},{0x92F9, 0xEBF3},{0x92FA, 0xEBF0},{0x92FB, 0xEC44},{0x92FC, 0xBFFB},{0x92FE, 0xEC41},{0x92FF, 0xEBF8},{0x9300, 0xEC43},
- {0x9301, 0xEBE9},{0x9302, 0xEBF6},{0x9304, 0xBFFD},{0x9306, 0xEBE1},{0x9308, 0xEBDF},{0x9309, 0xEC42},{0x930B, 0xEC40},{0x930C, 0xEBFE},
- {0x930D, 0xEBED},{0x930E, 0xEBEC},{0x930F, 0xEBE2},{0x9310, 0xC040},{0x9312, 0xEBE8},{0x9313, 0xEBF2},{0x9314, 0xEBFD},{0x9315, 0xC043},
- {0x9316, 0xEC45},{0x9318, 0xC1E8},{0x9319, 0xC045},{0x931A, 0xBFFE},{0x931B, 0xEBE6},{0x931D, 0xEBEF},{0x931E, 0xEBDE},{0x931F, 0xEBE0},
- {0x9320, 0xBFF5},{0x9321, 0xC042},{0x9322, 0xBFFA},{0x9323, 0xEBE7},{0x9324, 0xEBF7},{0x9325, 0xEBF1},{0x9326, 0xC041},{0x9327, 0xEBDD},
- {0x9328, 0xC1E3},{0x9329, 0xEBF9},{0x932A, 0xEBFC},{0x932B, 0xBFFC},{0x932D, 0xEBEB},{0x932E, 0xC044},{0x932F, 0xBFF9},{0x9333, 0xBFF8},
- {0x9334, 0xEBF5},{0x9335, 0xEBFB},{0x9336, 0xBFF6},{0x9338, 0xEBE4},{0x9339, 0xEBFA},{0x933C, 0xEBE5},{0x9346, 0xEBEA},{0x9347, 0xEED2},
- {0x9349, 0xEED7},{0x934A, 0xC1E5},{0x934B, 0xC1E7},{0x934C, 0xEEDD},{0x934D, 0xC1E1},{0x934E, 0xEEEC},{0x934F, 0xEEE3},{0x9350, 0xEED8},
- {0x9351, 0xEED9},{0x9352, 0xEEE2},{0x9354, 0xC1EE},{0x9355, 0xEEE1},{0x9356, 0xEED1},{0x9357, 0xEEE0},{0x9358, 0xEED4},{0x9359, 0xEEED},
- {0x935A, 0xC1ED},{0x935B, 0xC1EB},{0x935C, 0xEED5},{0x935E, 0xEEE8},{0x9360, 0xEEDA},{0x9361, 0xEEE7},{0x9363, 0xEEE9},{0x9364, 0xEED0},
- {0x9365, 0xC1E6},{0x9367, 0xEEEA},{0x936A, 0xEEDE},{0x936C, 0xC1EA},{0x936D, 0xEEDB},{0x9370, 0xC1EC},{0x9371, 0xEEE4},{0x9375, 0xC1E4},
- {0x9376, 0xEED6},{0x9377, 0xEEE5},{0x9379, 0xEEDF},{0x937A, 0xEBE3},{0x937B, 0xEEE6},{0x937C, 0xEED3},{0x937E, 0xC1E9},{0x9380, 0xEEEB},
- {0x9382, 0xC1E2},{0x9383, 0xEECE},{0x9388, 0xF160},{0x9389, 0xF159},{0x938A, 0xC2E9},{0x938C, 0xF154},{0x938D, 0xF163},{0x938E, 0xF15B},
- {0x938F, 0xEEDC},{0x9391, 0xF165},{0x9392, 0xF155},{0x9394, 0xC2E8},{0x9395, 0xF15F},{0x9396, 0xC2EA},{0x9397, 0xC2F2},{0x9398, 0xC2F0},
- {0x9399, 0xF161},{0x939A, 0xC2F1},{0x939B, 0xF157},{0x939D, 0xF158},{0x939E, 0xF15D},{0x939F, 0xF162},{0x93A1, 0xEECD},{0x93A2, 0xC2EB},
- {0x93A3, 0xF16A},{0x93A4, 0xF167},{0x93A5, 0xF16B},{0x93A6, 0xF15E},{0x93A7, 0xF15A},{0x93A8, 0xF168},{0x93A9, 0xF36A},{0x93AA, 0xF15C},
- {0x93AC, 0xC2EE},{0x93AE, 0xC2ED},{0x93AF, 0xEECF},{0x93B0, 0xC2EF},{0x93B1, 0xF164},{0x93B2, 0xF166},{0x93B3, 0xC2EC},{0x93B4, 0xF169},
- {0x93B5, 0xF153},{0x93B7, 0xF156},{0x93C0, 0xF373},{0x93C2, 0xF363},{0x93C3, 0xC3EB},{0x93C4, 0xF371},{0x93C7, 0xF361},{0x93C8, 0xC3EC},
- {0x93CA, 0xF36C},{0x93CC, 0xF368},{0x93CD, 0xC3F1},{0x93CE, 0xF372},{0x93CF, 0xF362},{0x93D0, 0xF365},{0x93D1, 0xC3E9},{0x93D2, 0xF374},
- {0x93D4, 0xF36D},{0x93D5, 0xF370},{0x93D6, 0xC3EF},{0x93D7, 0xC3F4},{0x93D8, 0xC3F2},{0x93D9, 0xF369},{0x93DA, 0xF364},{0x93DC, 0xC3ED},
- {0x93DD, 0xC3EE},{0x93DE, 0xF360},{0x93DF, 0xC3EA},{0x93E1, 0xC3E8},{0x93E2, 0xC3F0},{0x93E3, 0xF36F},{0x93E4, 0xC3F3},{0x93E6, 0xF36B},
- {0x93E7, 0xF375},{0x93E8, 0xC3F5},{0x93EC, 0xF367},{0x93EE, 0xF36E},{0x93F5, 0xF4F3},{0x93F6, 0xF542},{0x93F7, 0xF4F5},{0x93F8, 0xF4FC},
- {0x93F9, 0xF366},{0x93FA, 0xF4FA},{0x93FB, 0xF4E9},{0x93FC, 0xF540},{0x93FD, 0xC4C3},{0x93FE, 0xF4ED},{0x93FF, 0xF4FE},{0x9400, 0xF4F4},
- {0x9403, 0xC4C2},{0x9406, 0xF544},{0x9407, 0xF4F6},{0x9409, 0xF4FB},{0x940A, 0xF4FD},{0x940B, 0xF4E7},{0x940C, 0xF541},{0x940D, 0xF4F2},
- {0x940E, 0xF4F7},{0x940F, 0xF4EB},{0x9410, 0xF4EF},{0x9411, 0xF543},{0x9412, 0xF4F9},{0x9413, 0xF4E8},{0x9414, 0xF4EC},{0x9415, 0xF4EE},
- {0x9416, 0xF4F8},{0x9418, 0xC4C1},{0x9419, 0xF4F1},{0x9420, 0xF4EA},{0x9428, 0xF4F0},{0x9429, 0xF661},{0x942A, 0xF666},{0x942B, 0xC54F},
- {0x942C, 0xF668},{0x942E, 0xC549},{0x9430, 0xF664},{0x9431, 0xF66A},{0x9432, 0xC54E},{0x9433, 0xC54A},{0x9435, 0xC54B},{0x9436, 0xF660},
- {0x9437, 0xF667},{0x9438, 0xC54D},{0x9439, 0xF665},{0x943A, 0xC54C},{0x943B, 0xF65F},{0x943C, 0xF663},{0x943D, 0xF662},{0x943F, 0xF65E},
- {0x9440, 0xF669},{0x9444, 0xC5B1},{0x9445, 0xF76D},{0x9446, 0xF770},{0x9447, 0xF76C},{0x9448, 0xF76E},{0x9449, 0xF76F},{0x944A, 0xF769},
- {0x944B, 0xF76A},{0x944C, 0xF767},{0x944F, 0xF76B},{0x9450, 0xF768},{0x9451, 0xC5B2},{0x9452, 0xC5B3},{0x9455, 0xF84B},{0x9457, 0xF84D},
- {0x945D, 0xF84C},{0x945E, 0xF84E},{0x9460, 0xC5E0},{0x9462, 0xF84A},{0x9463, 0xC5DF},{0x9464, 0xC5E1},{0x9468, 0xF8CB},{0x9469, 0xF8CC},
- {0x946A, 0xC644},{0x946B, 0xF8CA},{0x946D, 0xF953},{0x946E, 0xF952},{0x946F, 0xF954},{0x9470, 0xC65F},{0x9471, 0xF955},{0x9472, 0xC65E},
- {0x9473, 0xF956},{0x9474, 0xF972},{0x9475, 0xF975},{0x9476, 0xF974},{0x9477, 0xC668},{0x9478, 0xF973},{0x947C, 0xC672},{0x947D, 0xC670},
- {0x947E, 0xC671},{0x947F, 0xC677},{0x9480, 0xF9C0},{0x9481, 0xF9C1},{0x9482, 0xF9BF},{0x9483, 0xF9C9},{0x9577, 0xAAF8},{0x957A, 0xD844},
- {0x957B, 0xDC78},{0x957C, 0xE8A5},{0x957D, 0xF376},{0x9580, 0xAAF9},{0x9582, 0xADAC},{0x9583, 0xB07B},{0x9586, 0xD845},{0x9588, 0xD846},
- {0x9589, 0xB3AC},{0x958B, 0xB67D},{0x958C, 0xDC7A},{0x958D, 0xDC79},{0x958E, 0xB6A3},{0x958F, 0xB67C},{0x9590, 0xDC7B},{0x9591, 0xB67E},
- {0x9592, 0xB6A2},{0x9593, 0xB6A1},{0x9594, 0xB67B},{0x9598, 0xB968},{0x959B, 0xE0D0},{0x959C, 0xE0CE},{0x959E, 0xE0CF},{0x959F, 0xE0CD},
- {0x95A1, 0xBBD2},{0x95A3, 0xBBD5},{0x95A4, 0xBBD7},{0x95A5, 0xBBD6},{0x95A8, 0xBBD3},{0x95A9, 0xBBD4},{0x95AB, 0xE8A7},{0x95AC, 0xE8A6},
- {0x95AD, 0xBE5B},{0x95AE, 0xE8A8},{0x95B0, 0xE8A9},{0x95B1, 0xBE5C},{0x95B5, 0xEC4D},{0x95B6, 0xEC4B},{0x95B7, 0xEEF3},{0x95B9, 0xEC49},
- {0x95BA, 0xEC4A},{0x95BB, 0xC046},{0x95BC, 0xEC46},{0x95BD, 0xEC4E},{0x95BE, 0xEC48},{0x95BF, 0xEC4C},{0x95C0, 0xEEEF},{0x95C3, 0xEEF1},
- {0x95C5, 0xEEF2},{0x95C6, 0xC1F3},{0x95C7, 0xEEEE},{0x95C8, 0xC1F2},{0x95C9, 0xEEF0},{0x95CA, 0xC1EF},{0x95CB, 0xC1F0},{0x95CC, 0xC1F1},
- {0x95CD, 0xEC47},{0x95D0, 0xC2F5},{0x95D1, 0xF16E},{0x95D2, 0xF16C},{0x95D3, 0xF16D},{0x95D4, 0xC2F3},{0x95D5, 0xC2F6},{0x95D6, 0xC2F4},
- {0x95DA, 0xF377},{0x95DB, 0xF378},{0x95DC, 0xC3F6},{0x95DE, 0xF545},{0x95DF, 0xF547},{0x95E0, 0xF546},{0x95E1, 0xC4C4},{0x95E2, 0xC550},
- {0x95E3, 0xF66D},{0x95E4, 0xF66C},{0x95E5, 0xF66B},{0x961C, 0xAAFA},{0x961E, 0xC9AA},{0x9620, 0xCA58},{0x9621, 0xA6E9},{0x9622, 0xCA56},
- {0x9623, 0xCA59},{0x9624, 0xCA57},{0x9628, 0xCBAE},{0x962A, 0xA8C1},{0x962C, 0xA8C2},{0x962D, 0xCBB0},{0x962E, 0xA8BF},{0x962F, 0xCBAF},
- {0x9630, 0xCBAD},{0x9631, 0xA8C0},{0x9632, 0xA8BE},{0x9639, 0xCDD8},{0x963A, 0xCDDB},{0x963B, 0xAAFD},{0x963C, 0xCDDA},{0x963D, 0xCDD9},
- {0x963F, 0xAAFC},{0x9640, 0xAAFB},{0x9642, 0xAB40},{0x9643, 0xCDDC},{0x9644, 0xAAFE},{0x964A, 0xD0C6},{0x964B, 0xADAE},{0x964C, 0xADAF},
- {0x964D, 0xADB0},{0x964E, 0xD0C7},{0x964F, 0xD0C3},{0x9650, 0xADAD},{0x9651, 0xD0C4},{0x9653, 0xD0C5},{0x9654, 0xD0C2},{0x9658, 0xB0A4},
- {0x965B, 0xB0A1},{0x965C, 0xD445},{0x965D, 0xB0A2},{0x965E, 0xB0A5},{0x965F, 0xD446},{0x9661, 0xB07E},{0x9662, 0xB07C},{0x9663, 0xB07D},
- {0x9664, 0xB0A3},{0x966A, 0xB3AD},{0x966B, 0xD849},{0x966C, 0xB3B5},{0x966D, 0xD848},{0x966F, 0xD84B},{0x9670, 0xB3B1},{0x9671, 0xD84A},
- {0x9672, 0xB6AB},{0x9673, 0xB3AF},{0x9674, 0xB3B2},{0x9675, 0xB3AE},{0x9676, 0xB3B3},{0x9677, 0xB3B4},{0x9678, 0xB3B0},{0x967C, 0xD847},
- {0x967D, 0xB6A7},{0x967E, 0xDC7D},{0x9680, 0xDCA3},{0x9683, 0xDCA2},{0x9684, 0xB6AC},{0x9685, 0xB6A8},{0x9686, 0xB6A9},{0x9687, 0xDC7C},
- {0x9688, 0xDC7E},{0x9689, 0xDCA1},{0x968A, 0xB6A4},{0x968B, 0xB6A6},{0x968D, 0xB6AA},{0x968E, 0xB6A5},{0x9691, 0xE0D3},{0x9692, 0xE0D1},
- {0x9693, 0xE0D2},{0x9694, 0xB96A},{0x9695, 0xB96B},{0x9697, 0xE0D4},{0x9698, 0xB969},{0x9699, 0xBBD8},{0x969B, 0xBBDA},{0x969C, 0xBBD9},
- {0x969E, 0xE4BB},{0x96A1, 0xE4BC},{0x96A2, 0xE8AB},{0x96A4, 0xE8AA},{0x96A7, 0xC047},{0x96A8, 0xC048},{0x96A9, 0xEC4F},{0x96AA, 0xC049},
- {0x96AC, 0xEEF6},{0x96AE, 0xEEF4},{0x96B0, 0xEEF5},{0x96B1, 0xC1F4},{0x96B3, 0xF16F},{0x96B4, 0xC3F7},{0x96B8, 0xC1F5},{0x96B9, 0xAB41},
- {0x96BB, 0xB0A6},{0x96BC, 0xD447},{0x96BF, 0xD84C},{0x96C0, 0xB3B6},{0x96C1, 0xB6AD},{0x96C2, 0xDCA4},{0x96C3, 0xDCA6},{0x96C4, 0xB6AF},
- {0x96C5, 0xB6AE},{0x96C6, 0xB6B0},{0x96C7, 0xB6B1},{0x96C8, 0xDCA5},{0x96C9, 0xB96E},{0x96CA, 0xB96F},{0x96CB, 0xB96D},{0x96CC, 0xBBDB},
- {0x96CD, 0xB96C},{0x96CE, 0xE0D5},{0x96D2, 0xBBDC},{0x96D3, 0xE8AC},{0x96D4, 0xEC50},{0x96D5, 0xC04A},{0x96D6, 0xC1F6},{0x96D7, 0xF170},
- {0x96D8, 0xF174},{0x96D9, 0xC2F9},{0x96DA, 0xF171},{0x96DB, 0xC2FA},{0x96DC, 0xC2F8},{0x96DD, 0xF175},{0x96DE, 0xC2FB},{0x96DF, 0xF173},
- {0x96E1, 0xF379},{0x96E2, 0xC2F7},{0x96E3, 0xC3F8},{0x96E5, 0xF8CD},{0x96E8, 0xAB42},{0x96E9, 0xB3B8},{0x96EA, 0xB3B7},{0x96EF, 0xB6B2},
- {0x96F0, 0xDCA8},{0x96F1, 0xDCA7},{0x96F2, 0xB6B3},{0x96F5, 0xE0D9},{0x96F6, 0xB973},{0x96F7, 0xB970},{0x96F8, 0xE0D8},{0x96F9, 0xB972},
- {0x96FA, 0xE0D6},{0x96FB, 0xB971},{0x96FD, 0xE0D7},{0x96FF, 0xE4BD},{0x9700, 0xBBDD},{0x9702, 0xE8AF},{0x9704, 0xBE5D},{0x9705, 0xE8AD},
- {0x9706, 0xBE5E},{0x9707, 0xBE5F},{0x9708, 0xE8AE},{0x9709, 0xBE60},{0x970B, 0xEC51},{0x970D, 0xC04E},{0x970E, 0xC04B},{0x970F, 0xC050},
- {0x9710, 0xEC53},{0x9711, 0xC04C},{0x9712, 0xEC52},{0x9713, 0xC04F},{0x9716, 0xC04D},{0x9718, 0xEEF9},{0x9719, 0xEEFB},{0x971C, 0xC1F7},
- {0x971D, 0xEEFA},{0x971E, 0xC1F8},{0x971F, 0xEEF8},{0x9720, 0xEEF7},{0x9722, 0xF177},{0x9723, 0xF176},{0x9724, 0xC2FC},{0x9725, 0xF178},
- {0x9726, 0xF37E},{0x9727, 0xC3FA},{0x9728, 0xF37D},{0x9729, 0xF37A},{0x972A, 0xC3F9},{0x972B, 0xF37B},{0x972C, 0xF37C},{0x972E, 0xF548},
- {0x972F, 0xF549},{0x9730, 0xC4C5},{0x9732, 0xC553},{0x9735, 0xF66E},{0x9738, 0xC551},{0x9739, 0xC552},{0x973A, 0xF66F},{0x973D, 0xC5B4},
- {0x973E, 0xC5B5},{0x973F, 0xF771},{0x9742, 0xC645},{0x9743, 0xF8CF},{0x9744, 0xC647},{0x9746, 0xF8CE},{0x9747, 0xF8D0},{0x9748, 0xC646},
- {0x9749, 0xF957},{0x974B, 0xF9AD},{0x9752, 0xAB43},{0x9756, 0xB974},{0x9758, 0xE4BE},{0x975A, 0xE8B0},{0x975B, 0xC051},{0x975C, 0xC052},
- {0x975E, 0xAB44},{0x9760, 0xBE61},{0x9761, 0xC3FB},{0x9762, 0xADB1},{0x9766, 0xC053},{0x9768, 0xC5E2},{0x9769, 0xADB2},{0x976A, 0xD84D},
- {0x976C, 0xDCA9},{0x976E, 0xDCAB},{0x9770, 0xDCAA},{0x9772, 0xE0DD},{0x9773, 0xE0DA},{0x9774, 0xB975},{0x9776, 0xB976},{0x9777, 0xE0DB},
- {0x9778, 0xE0DC},{0x977A, 0xE4C0},{0x977B, 0xE4C5},{0x977C, 0xBBDE},{0x977D, 0xE4BF},{0x977E, 0xE4C1},{0x977F, 0xE4C8},{0x9780, 0xE4C3},
- {0x9781, 0xE4C7},{0x9782, 0xE4C4},{0x9783, 0xE4C2},{0x9784, 0xE4C6},{0x9785, 0xBBDF},{0x9788, 0xE8B3},{0x978A, 0xE8B1},{0x978B, 0xBE63},
- {0x978D, 0xBE62},{0x978E, 0xE8B2},{0x978F, 0xBE64},{0x9794, 0xEC56},{0x9797, 0xEC55},{0x9798, 0xC054},{0x9799, 0xEC54},{0x979A, 0xEEFC},
- {0x979C, 0xEEFE},{0x979D, 0xEF41},{0x979E, 0xEF40},{0x97A0, 0xC1F9},{0x97A1, 0xEEFD},{0x97A2, 0xF1A1},{0x97A3, 0xC2FD},{0x97A4, 0xF17D},
- {0x97A5, 0xF1A2},{0x97A6, 0xC2FE},{0x97A8, 0xF17B},{0x97AA, 0xF17E},{0x97AB, 0xF17C},{0x97AC, 0xF179},{0x97AD, 0xC340},{0x97AE, 0xF17A},
- {0x97B3, 0xF3A1},{0x97B6, 0xF3A3},{0x97B7, 0xF3A2},{0x97B9, 0xF54A},{0x97BB, 0xF54B},{0x97BF, 0xF670},{0x97C1, 0xC5B7},{0x97C3, 0xC5B6},
- {0x97C4, 0xF84F},{0x97C5, 0xF850},{0x97C6, 0xC648},{0x97C7, 0xF8D1},{0x97C9, 0xC669},{0x97CB, 0xADB3},{0x97CC, 0xB6B4},{0x97CD, 0xE4CA},
- {0x97CE, 0xE4C9},{0x97CF, 0xE8B5},{0x97D0, 0xE8B4},{0x97D3, 0xC1FA},{0x97D4, 0xEF43},{0x97D5, 0xEF42},{0x97D6, 0xF1A5},{0x97D7, 0xF1A3},
- {0x97D8, 0xF1A6},{0x97D9, 0xF1A4},{0x97DC, 0xC3FC},{0x97DD, 0xF3A4},{0x97DE, 0xF3A5},{0x97DF, 0xF3A6},{0x97E1, 0xF671},{0x97E3, 0xF772},
- {0x97E5, 0xF8D2},{0x97ED, 0xADB4},{0x97F0, 0xEC57},{0x97F1, 0xEF44},{0x97F3, 0xADB5},{0x97F6, 0xBBE0},{0x97F8, 0xEC58},{0x97F9, 0xC341},
- {0x97FA, 0xF1A7},{0x97FB, 0xC3FD},{0x97FD, 0xF54C},{0x97FE, 0xF54D},{0x97FF, 0xC554},{0x9800, 0xF851},{0x9801, 0xADB6},{0x9802, 0xB3BB},
- {0x9803, 0xB3BC},{0x9804, 0xD84E},{0x9805, 0xB6B5},{0x9806, 0xB6B6},{0x9807, 0xDCAC},{0x9808, 0xB6B7},{0x980A, 0xB97A},{0x980C, 0xB97C},
- {0x980D, 0xE0DF},{0x980E, 0xE0E0},{0x980F, 0xE0DE},{0x9810, 0xB977},{0x9811, 0xB978},{0x9812, 0xB97B},{0x9813, 0xB979},{0x9816, 0xE4CB},
- {0x9817, 0xBBE1},{0x9818, 0xBBE2},{0x981B, 0xE8BC},{0x981C, 0xBE67},{0x981D, 0xE8B7},{0x981E, 0xE8B6},{0x9820, 0xE8BB},{0x9821, 0xBE65},
- {0x9824, 0xC05B},{0x9826, 0xE8B8},{0x9827, 0xE8BD},{0x9828, 0xE8BA},{0x9829, 0xE8B9},{0x982B, 0xBE66},{0x982D, 0xC059},{0x982F, 0xEC5A},
- {0x9830, 0xC055},{0x9832, 0xEC5B},{0x9835, 0xEC59},{0x9837, 0xC058},{0x9838, 0xC056},{0x9839, 0xC05A},{0x983B, 0xC057},{0x9841, 0xEF45},
- {0x9843, 0xEF4A},{0x9844, 0xEF46},{0x9845, 0xEF49},{0x9846, 0xC1FB},{0x9848, 0xEDD4},{0x9849, 0xEF48},{0x984A, 0xEF47},{0x984C, 0xC344},
- {0x984D, 0xC342},{0x984E, 0xC345},{0x984F, 0xC343},{0x9850, 0xF1A8},{0x9851, 0xF1A9},{0x9852, 0xF1AA},{0x9853, 0xC346},{0x9857, 0xF3AA},
- {0x9858, 0xC440},{0x9859, 0xF3A8},{0x985B, 0xC441},{0x985C, 0xF3A7},{0x985D, 0xF3A9},{0x985E, 0xC3FE},{0x985F, 0xF551},{0x9860, 0xF54E},
- {0x9862, 0xF54F},{0x9863, 0xF550},{0x9864, 0xF672},{0x9865, 0xC556},{0x9867, 0xC555},{0x9869, 0xF774},{0x986A, 0xF773},{0x986B, 0xC5B8},
- {0x986F, 0xC5E3},{0x9870, 0xC649},{0x9871, 0xC660},{0x9872, 0xF958},{0x9873, 0xF9AE},{0x9874, 0xF9AF},{0x98A8, 0xADB7},{0x98A9, 0xDCAD},
- {0x98AC, 0xE0E1},{0x98AD, 0xE4CC},{0x98AE, 0xE4CD},{0x98AF, 0xBBE3},{0x98B1, 0xBBE4},{0x98B2, 0xE8BE},{0x98B3, 0xBE68},{0x98B6, 0xC1FC},
- {0x98B8, 0xF1AB},{0x98BA, 0xC347},{0x98BB, 0xF3AD},{0x98BC, 0xC442},{0x98BD, 0xF3AC},{0x98BE, 0xF3AE},{0x98BF, 0xF3AB},{0x98C0, 0xF675},
- {0x98C1, 0xF552},{0x98C2, 0xF553},{0x98C4, 0xC4C6},{0x98C6, 0xF674},{0x98C9, 0xF673},{0x98CB, 0xF775},{0x98CC, 0xF9B0},{0x98DB, 0xADB8},
- {0x98DF, 0xADB9},{0x98E2, 0xB0A7},{0x98E3, 0xD448},{0x98E5, 0xD84F},{0x98E7, 0xB6B8},{0x98E9, 0xB6BB},{0x98EA, 0xB6B9},{0x98EB, 0xDCAE},
- {0x98ED, 0xB6BD},{0x98EF, 0xB6BA},{0x98F2, 0xB6BC},{0x98F4, 0xB97E},{0x98F6, 0xE0E2},{0x98F9, 0xE0E3},{0x98FA, 0xE8C0},{0x98FC, 0xB97D},
- {0x98FD, 0xB9A1},{0x98FE, 0xB9A2},{0x9900, 0xE4CF},{0x9902, 0xE4CE},{0x9903, 0xBBE5},{0x9905, 0xBBE6},{0x9907, 0xE4D0},{0x9908, 0xE8BF},
- {0x9909, 0xBBE8},{0x990A, 0xBE69},{0x990C, 0xBBE7},{0x9910, 0xC05C},{0x9911, 0xE8C1},{0x9912, 0xBE6B},{0x9913, 0xBE6A},{0x9914, 0xE8C2},
- {0x9915, 0xE8C5},{0x9916, 0xE8C3},{0x9917, 0xE8C4},{0x9918, 0xBE6C},{0x991A, 0xC061},{0x991B, 0xC05F},{0x991E, 0xC05E},{0x991F, 0xEC5D},
- {0x9921, 0xC060},{0x9924, 0xEC5C},{0x9925, 0xEF4B},{0x9927, 0xEC5E},{0x9928, 0xC05D},{0x9929, 0xEC5F},{0x992A, 0xEF4E},{0x992B, 0xEF4C},
- {0x992C, 0xEF4D},{0x992D, 0xEF52},{0x992E, 0xC34B},{0x992F, 0xEF51},{0x9930, 0xEF54},{0x9931, 0xEF53},{0x9932, 0xEF50},{0x9933, 0xEF4F},
- {0x9935, 0xC1FD},{0x993A, 0xF1AE},{0x993C, 0xF1AD},{0x993D, 0xC34A},{0x993E, 0xC348},{0x993F, 0xC349},{0x9941, 0xF1AC},{0x9943, 0xF3B1},
- {0x9945, 0xC443},{0x9947, 0xF3B0},{0x9948, 0xF3AF},{0x9949, 0xC444},{0x994B, 0xF558},{0x994C, 0xF557},{0x994E, 0xF555},{0x9950, 0xF554},
- {0x9951, 0xC4C8},{0x9952, 0xC4C7},{0x9953, 0xF559},{0x9954, 0xF776},{0x9955, 0xC5B9},{0x9956, 0xF677},{0x9957, 0xC557},{0x9958, 0xF676},
- {0x9959, 0xF556},{0x995B, 0xF777},{0x995C, 0xC5E4},{0x995E, 0xC661},{0x995F, 0xF959},{0x9961, 0xF9B1},{0x9996, 0xADBA},{0x9997, 0xD850},
- {0x9998, 0xEF55},{0x9999, 0xADBB},{0x999C, 0xE4D2},{0x999D, 0xE4D1},{0x999E, 0xEC60},{0x99A1, 0xEF57},{0x99A3, 0xEF56},{0x99A5, 0xC34C},
- {0x99A6, 0xF3B2},{0x99A7, 0xF3B3},{0x99A8, 0xC4C9},{0x99AB, 0xF9B2},{0x99AC, 0xB0A8},{0x99AD, 0xB6BF},{0x99AE, 0xB6BE},{0x99AF, 0xE0E4},
- {0x99B0, 0xE0E6},{0x99B1, 0xB9A4},{0x99B2, 0xE0E5},{0x99B3, 0xB9A3},{0x99B4, 0xB9A5},{0x99B5, 0xE0E7},{0x99B9, 0xE4D4},{0x99BA, 0xE4D6},
- {0x99BB, 0xE4D5},{0x99BD, 0xE4D8},{0x99C1, 0xBBE9},{0x99C2, 0xE4D7},{0x99C3, 0xE4D3},{0x99C7, 0xE4D9},{0x99C9, 0xE8CC},{0x99CB, 0xE8CF},
- {0x99CC, 0xE8D1},{0x99CD, 0xE8C7},{0x99CE, 0xE8CB},{0x99CF, 0xE8C8},{0x99D0, 0xBE6E},{0x99D1, 0xBE71},{0x99D2, 0xBE73},{0x99D3, 0xE8C9},
- {0x99D4, 0xE8CA},{0x99D5, 0xBE72},{0x99D6, 0xE8CD},{0x99D7, 0xE8D0},{0x99D8, 0xE8CE},{0x99D9, 0xBE74},{0x99DB, 0xBE70},{0x99DC, 0xE8C6},
- {0x99DD, 0xBE6D},{0x99DF, 0xBE6F},{0x99E2, 0xC063},{0x99E3, 0xEC66},{0x99E4, 0xEC64},{0x99E5, 0xEC63},{0x99E7, 0xEC69},{0x99E9, 0xEC68},
- {0x99EA, 0xEC67},{0x99EC, 0xEC62},{0x99ED, 0xC062},{0x99EE, 0xEC61},{0x99F0, 0xEC65},{0x99F1, 0xC064},{0x99F4, 0xEF5A},{0x99F6, 0xEF5E},
- {0x99F7, 0xEF5B},{0x99F8, 0xEF5D},{0x99F9, 0xEF5C},{0x99FA, 0xEF59},{0x99FB, 0xEF5F},{0x99FC, 0xEF62},{0x99FD, 0xEF60},{0x99FE, 0xEF61},
- {0x99FF, 0xC240},{0x9A01, 0xC1FE},{0x9A02, 0xEF58},{0x9A03, 0xEF63},{0x9A04, 0xF1B3},{0x9A05, 0xF1B6},{0x9A06, 0xF1B8},{0x9A07, 0xF1B7},
- {0x9A09, 0xF1B1},{0x9A0A, 0xF1B5},{0x9A0B, 0xF1B0},{0x9A0D, 0xF1B2},{0x9A0E, 0xC34D},{0x9A0F, 0xF1AF},{0x9A11, 0xF1B4},{0x9A14, 0xF3C0},
- {0x9A15, 0xF3B5},{0x9A16, 0xC445},{0x9A19, 0xC446},{0x9A1A, 0xF3B4},{0x9A1B, 0xF3B9},{0x9A1C, 0xF3BF},{0x9A1D, 0xF3B7},{0x9A1E, 0xF3BE},
- {0x9A20, 0xF3BB},{0x9A22, 0xF3BA},{0x9A23, 0xF3BD},{0x9A24, 0xF3B8},{0x9A25, 0xF3B6},{0x9A27, 0xF3BC},{0x9A29, 0xF560},{0x9A2A, 0xF55E},
- {0x9A2B, 0xC4CA},{0x9A2C, 0xF55D},{0x9A2D, 0xF563},{0x9A2E, 0xF561},{0x9A30, 0xC4CB},{0x9A31, 0xF55C},{0x9A32, 0xF55A},{0x9A34, 0xF55B},
- {0x9A35, 0xC4CD},{0x9A36, 0xF55F},{0x9A37, 0xC4CC},{0x9A38, 0xF562},{0x9A39, 0xF678},{0x9A3A, 0xF67E},{0x9A3D, 0xF679},{0x9A3E, 0xC55B},
- {0x9A3F, 0xF6A1},{0x9A40, 0xC55A},{0x9A41, 0xF67D},{0x9A42, 0xF67C},{0x9A43, 0xC559},{0x9A44, 0xF67B},{0x9A45, 0xC558},{0x9A46, 0xF67A},
- {0x9A48, 0xF77D},{0x9A49, 0xF7A1},{0x9A4A, 0xF77E},{0x9A4C, 0xF77B},{0x9A4D, 0xC5BB},{0x9A4E, 0xF778},{0x9A4F, 0xF77C},{0x9A50, 0xF7A3},
- {0x9A52, 0xF7A2},{0x9A53, 0xF779},{0x9A54, 0xF77A},{0x9A55, 0xC5BA},{0x9A56, 0xF852},{0x9A57, 0xC5E7},{0x9A59, 0xF853},{0x9A5A, 0xC5E5},
- {0x9A5B, 0xC5E6},{0x9A5E, 0xF8D3},{0x9A5F, 0xC64A},{0x9A60, 0xF976},{0x9A62, 0xC66A},{0x9A64, 0xF9B3},{0x9A65, 0xC66B},{0x9A66, 0xF9B4},
- {0x9A67, 0xF9B5},{0x9A68, 0xF9C3},{0x9A69, 0xF9C2},{0x9A6A, 0xC67A},{0x9A6B, 0xF9CD},{0x9AA8, 0xB0A9},{0x9AAB, 0xE0E9},{0x9AAD, 0xE0E8},
- {0x9AAF, 0xBBEA},{0x9AB0, 0xBBEB},{0x9AB1, 0xE4DA},{0x9AB3, 0xE8D2},{0x9AB4, 0xEC6C},{0x9AB7, 0xBE75},{0x9AB8, 0xC065},{0x9AB9, 0xEC6A},
- {0x9ABB, 0xEC6D},{0x9ABC, 0xC066},{0x9ABE, 0xEF64},{0x9ABF, 0xEC6B},{0x9AC0, 0xF1B9},{0x9AC1, 0xC34E},{0x9AC2, 0xF3C1},{0x9AC6, 0xF566},
- {0x9AC7, 0xF564},{0x9ACA, 0xF565},{0x9ACD, 0xF6A2},{0x9ACF, 0xC55C},{0x9AD0, 0xF7A4},{0x9AD1, 0xC5EA},{0x9AD2, 0xC5BC},{0x9AD3, 0xC5E8},
- {0x9AD4, 0xC5E9},{0x9AD5, 0xF8D4},{0x9AD6, 0xC662},{0x9AD8, 0xB0AA},{0x9ADC, 0xF1BA},{0x9ADF, 0xD449},{0x9AE1, 0xB9A6},{0x9AE3, 0xE4DB},
- {0x9AE6, 0xBBEC},{0x9AE7, 0xE4DC},{0x9AEB, 0xE8D4},{0x9AEC, 0xE8D3},{0x9AED, 0xC068},{0x9AEE, 0xBE76},{0x9AEF, 0xBE77},{0x9AF1, 0xE8D7},
- {0x9AF2, 0xE8D6},{0x9AF3, 0xE8D5},{0x9AF6, 0xEC6E},{0x9AF7, 0xEC71},{0x9AF9, 0xEC70},{0x9AFA, 0xEC6F},{0x9AFB, 0xC067},{0x9AFC, 0xEF68},
- {0x9AFD, 0xEF66},{0x9AFE, 0xEF65},{0x9B01, 0xEF67},{0x9B03, 0xC34F},{0x9B04, 0xF1BC},{0x9B05, 0xF1BD},{0x9B06, 0xC350},{0x9B08, 0xF1BB},
- {0x9B0A, 0xF3C3},{0x9B0B, 0xF3C2},{0x9B0C, 0xF3C5},{0x9B0D, 0xC447},{0x9B0E, 0xF3C4},{0x9B10, 0xF567},{0x9B11, 0xF569},{0x9B12, 0xF568},
- {0x9B15, 0xF6A3},{0x9B16, 0xF6A6},{0x9B17, 0xF6A4},{0x9B18, 0xF6A5},{0x9B19, 0xF7A5},{0x9B1A, 0xC5BD},{0x9B1E, 0xF854},{0x9B1F, 0xF855},
- {0x9B20, 0xF856},{0x9B22, 0xC64B},{0x9B23, 0xC663},{0x9B24, 0xF9B6},{0x9B25, 0xB0AB},{0x9B27, 0xBE78},{0x9B28, 0xC069},{0x9B29, 0xF1BE},
- {0x9B2B, 0xF7A6},{0x9B2E, 0xF9C4},{0x9B2F, 0xD44A},{0x9B31, 0xC67B},{0x9B32, 0xB0AC},{0x9B33, 0xEC72},{0x9B35, 0xF1BF},{0x9B37, 0xF3C6},
- {0x9B3A, 0xF6A7},{0x9B3B, 0xF7A7},{0x9B3C, 0xB0AD},{0x9B3E, 0xE4DD},{0x9B3F, 0xE4DE},{0x9B41, 0xBBED},{0x9B42, 0xBBEE},{0x9B43, 0xE8D9},
- {0x9B44, 0xBE7A},{0x9B45, 0xBE79},{0x9B46, 0xE8D8},{0x9B48, 0xEF69},{0x9B4A, 0xF1C0},{0x9B4B, 0xF1C2},{0x9B4C, 0xF1C1},{0x9B4D, 0xC353},
- {0x9B4E, 0xC352},{0x9B4F, 0xC351},{0x9B51, 0xC55E},{0x9B52, 0xF6A8},{0x9B54, 0xC55D},{0x9B55, 0xF7A9},{0x9B56, 0xF7A8},{0x9B58, 0xC64C},
- {0x9B59, 0xF8D5},{0x9B5A, 0xB3BD},{0x9B5B, 0xE0EA},{0x9B5F, 0xE4E1},{0x9B60, 0xE4DF},{0x9B61, 0xE4E0},{0x9B64, 0xE8E2},{0x9B66, 0xE8DD},
- {0x9B67, 0xE8DA},{0x9B68, 0xE8E1},{0x9B6C, 0xE8E3},{0x9B6F, 0xBE7C},{0x9B70, 0xE8E0},{0x9B71, 0xE8DC},{0x9B74, 0xE8DB},{0x9B75, 0xE8DF},
- {0x9B76, 0xE8DE},{0x9B77, 0xBE7B},{0x9B7A, 0xEC7D},{0x9B7B, 0xEC78},{0x9B7C, 0xEC76},{0x9B7D, 0xECA1},{0x9B7E, 0xEC77},{0x9B80, 0xEC73},
- {0x9B82, 0xEC79},{0x9B85, 0xEC74},{0x9B86, 0xEF72},{0x9B87, 0xEC75},{0x9B88, 0xECA2},{0x9B90, 0xEC7C},{0x9B91, 0xC06A},{0x9B92, 0xEC7B},
- {0x9B93, 0xEC7A},{0x9B95, 0xEC7E},{0x9B9A, 0xEF6A},{0x9B9B, 0xEF6D},{0x9B9E, 0xEF6C},{0x9BA0, 0xEF74},{0x9BA1, 0xEF6F},{0x9BA2, 0xEF73},
- {0x9BA4, 0xEF71},{0x9BA5, 0xEF70},{0x9BA6, 0xEF6E},{0x9BA8, 0xEF6B},{0x9BAA, 0xC243},{0x9BAB, 0xC242},{0x9BAD, 0xC244},{0x9BAE, 0xC241},
- {0x9BAF, 0xEF75},{0x9BB5, 0xF1C8},{0x9BB6, 0xF1CB},{0x9BB8, 0xF1C9},{0x9BB9, 0xF1CD},{0x9BBD, 0xF1CE},{0x9BBF, 0xF1C6},{0x9BC0, 0xC358},
- {0x9BC1, 0xF1C7},{0x9BC3, 0xF1C5},{0x9BC4, 0xF1CC},{0x9BC6, 0xF1C4},{0x9BC7, 0xF1C3},{0x9BC8, 0xC357},{0x9BC9, 0xC355},{0x9BCA, 0xC354},
- {0x9BD3, 0xF1CA},{0x9BD4, 0xF3CF},{0x9BD5, 0xF3D5},{0x9BD6, 0xC44A},{0x9BD7, 0xF3D0},{0x9BD9, 0xF3D3},{0x9BDA, 0xF3D7},{0x9BDB, 0xC44B},
- {0x9BDC, 0xF3D2},{0x9BDE, 0xF3CA},{0x9BE0, 0xF3C9},{0x9BE1, 0xF3D6},{0x9BE2, 0xF3CD},{0x9BE4, 0xF3CB},{0x9BE5, 0xF3D4},{0x9BE6, 0xF3CC},
- {0x9BE7, 0xC449},{0x9BE8, 0xC448},{0x9BEA, 0xF3C7},{0x9BEB, 0xF3C8},{0x9BEC, 0xF3D1},{0x9BF0, 0xF3CE},{0x9BF7, 0xF56C},{0x9BF8, 0xF56F},
- {0x9BFD, 0xC356},{0x9C05, 0xF56D},{0x9C06, 0xF573},{0x9C07, 0xF571},{0x9C08, 0xF56B},{0x9C09, 0xF576},{0x9C0B, 0xF56A},{0x9C0D, 0xC4CF},
- {0x9C0E, 0xF572},{0x9C12, 0xF56E},{0x9C13, 0xC4CE},{0x9C14, 0xF575},{0x9C17, 0xF574},{0x9C1C, 0xF6AB},{0x9C1D, 0xF6AA},{0x9C21, 0xF6B1},
- {0x9C23, 0xF6AD},{0x9C24, 0xF6B0},{0x9C25, 0xC560},{0x9C28, 0xF6AE},{0x9C29, 0xF6AF},{0x9C2B, 0xF6A9},{0x9C2C, 0xF6AC},{0x9C2D, 0xC55F},
- {0x9C31, 0xC5BF},{0x9C32, 0xF7B4},{0x9C33, 0xF7AF},{0x9C34, 0xF7B3},{0x9C36, 0xF7B6},{0x9C37, 0xF7B2},{0x9C39, 0xF7AE},{0x9C3B, 0xC5C1},
- {0x9C3C, 0xF7B1},{0x9C3D, 0xF7B5},{0x9C3E, 0xC5C0},{0x9C3F, 0xF7AC},{0x9C40, 0xF570},{0x9C41, 0xF7B0},{0x9C44, 0xF7AD},{0x9C46, 0xF7AA},
- {0x9C48, 0xF7AB},{0x9C49, 0xC5BE},{0x9C4A, 0xF85A},{0x9C4B, 0xF85C},{0x9C4C, 0xF85F},{0x9C4D, 0xF85B},{0x9C4E, 0xF860},{0x9C50, 0xF859},
- {0x9C52, 0xF857},{0x9C54, 0xC5EB},{0x9C55, 0xF85D},{0x9C56, 0xC5ED},{0x9C57, 0xC5EC},{0x9C58, 0xF858},{0x9C59, 0xF85E},{0x9C5E, 0xF8DA},
- {0x9C5F, 0xC64D},{0x9C60, 0xF8DB},{0x9C62, 0xF8D9},{0x9C63, 0xF8D6},{0x9C66, 0xF8D8},{0x9C67, 0xF8D7},{0x9C68, 0xF95A},{0x9C6D, 0xF95C},
- {0x9C6E, 0xF95B},{0x9C71, 0xF979},{0x9C73, 0xF978},{0x9C74, 0xF977},{0x9C75, 0xF97A},{0x9C77, 0xC673},{0x9C78, 0xC674},{0x9C79, 0xF9CA},
- {0x9C7A, 0xF9CE},{0x9CE5, 0xB3BE},{0x9CE6, 0xDCAF},{0x9CE7, 0xE0ED},{0x9CE9, 0xB9A7},{0x9CEA, 0xE0EB},{0x9CED, 0xE0EC},{0x9CF1, 0xE4E2},
- {0x9CF2, 0xE4E3},{0x9CF3, 0xBBF1},{0x9CF4, 0xBBEF},{0x9CF5, 0xE4E4},{0x9CF6, 0xBBF0},{0x9CF7, 0xE8E8},{0x9CF9, 0xE8EB},{0x9CFA, 0xE8E5},
- {0x9CFB, 0xE8EC},{0x9CFC, 0xE8E4},{0x9CFD, 0xE8E6},{0x9CFF, 0xE8E7},{0x9D00, 0xE8EA},{0x9D03, 0xBEA1},{0x9D04, 0xE8EF},{0x9D05, 0xE8EE},
- {0x9D06, 0xBE7D},{0x9D07, 0xE8E9},{0x9D08, 0xE8ED},{0x9D09, 0xBE7E},{0x9D10, 0xECAC},{0x9D12, 0xC06F},{0x9D14, 0xECA7},{0x9D15, 0xC06B},
- {0x9D17, 0xECA4},{0x9D18, 0xECAA},{0x9D19, 0xECAD},{0x9D1B, 0xC070},{0x9D1D, 0xECA9},{0x9D1E, 0xECA6},{0x9D1F, 0xECAE},{0x9D20, 0xECA5},
- {0x9D22, 0xECAB},{0x9D23, 0xC06C},{0x9D25, 0xECA3},{0x9D26, 0xC06D},{0x9D28, 0xC06E},{0x9D29, 0xECA8},{0x9D2D, 0xEFA9},{0x9D2E, 0xEF7A},
- {0x9D2F, 0xEF7B},{0x9D30, 0xEF7E},{0x9D31, 0xEF7C},{0x9D33, 0xEF76},{0x9D36, 0xEF79},{0x9D37, 0xEFA5},{0x9D38, 0xEF7D},{0x9D3B, 0xC245},
- {0x9D3D, 0xEFA7},{0x9D3E, 0xEFA4},{0x9D3F, 0xC246},{0x9D40, 0xEFA6},{0x9D41, 0xEF77},{0x9D42, 0xEFA2},{0x9D43, 0xEFA3},{0x9D45, 0xEFA1},
- {0x9D4A, 0xF1D2},{0x9D4B, 0xF1D4},{0x9D4C, 0xF1D7},{0x9D4F, 0xF1D1},{0x9D51, 0xC359},{0x9D52, 0xF1D9},{0x9D53, 0xF1D0},{0x9D54, 0xF1DA},
- {0x9D56, 0xF1D6},{0x9D57, 0xF1D8},{0x9D58, 0xF1DC},{0x9D59, 0xF1D5},{0x9D5A, 0xF1DD},{0x9D5B, 0xF1D3},{0x9D5C, 0xF1CF},{0x9D5D, 0xC35A},
- {0x9D5F, 0xF1DB},{0x9D60, 0xC35B},{0x9D61, 0xC44D},{0x9D67, 0xEF78},{0x9D68, 0xF3F1},{0x9D69, 0xF3E8},{0x9D6A, 0xC44F},{0x9D6B, 0xF3E4},
- {0x9D6C, 0xC450},{0x9D6F, 0xF3ED},{0x9D70, 0xF3E7},{0x9D71, 0xF3DD},{0x9D72, 0xC44E},{0x9D73, 0xF3EA},{0x9D74, 0xF3E5},{0x9D75, 0xF3E6},
- {0x9D77, 0xF3D8},{0x9D78, 0xF3DF},{0x9D79, 0xF3EE},{0x9D7B, 0xF3EB},{0x9D7D, 0xF3E3},{0x9D7F, 0xF3EF},{0x9D80, 0xF3DE},{0x9D81, 0xF3D9},
- {0x9D82, 0xF3EC},{0x9D84, 0xF3DB},{0x9D85, 0xF3E9},{0x9D86, 0xF3E0},{0x9D87, 0xF3F0},{0x9D88, 0xF3DC},{0x9D89, 0xC44C},{0x9D8A, 0xF3DA},
- {0x9D8B, 0xF3E1},{0x9D8C, 0xF3E2},{0x9D90, 0xF57D},{0x9D92, 0xF57B},{0x9D94, 0xF5A2},{0x9D96, 0xF5AE},{0x9D97, 0xF5A5},{0x9D98, 0xF57C},
- {0x9D99, 0xF578},{0x9D9A, 0xF5A7},{0x9D9B, 0xF57E},{0x9D9C, 0xF5A3},{0x9D9D, 0xF57A},{0x9D9E, 0xF5AA},{0x9D9F, 0xF577},{0x9DA0, 0xF5A1},
- {0x9DA1, 0xF5A6},{0x9DA2, 0xF5A8},{0x9DA3, 0xF5AB},{0x9DA4, 0xF579},{0x9DA6, 0xF5AF},{0x9DA7, 0xF5B0},{0x9DA8, 0xF5A9},{0x9DA9, 0xF5AD},
- {0x9DAA, 0xF5A4},{0x9DAC, 0xF6C1},{0x9DAD, 0xF6C4},{0x9DAF, 0xC561},{0x9DB1, 0xF6C3},{0x9DB2, 0xF6C8},{0x9DB3, 0xF6C6},{0x9DB4, 0xC562},
- {0x9DB5, 0xF6BD},{0x9DB6, 0xF6B3},{0x9DB7, 0xF6B2},{0x9DB8, 0xC564},{0x9DB9, 0xF6BF},{0x9DBA, 0xF6C0},{0x9DBB, 0xF6BC},{0x9DBC, 0xF6B4},
- {0x9DBE, 0xF6B9},{0x9DBF, 0xF5AC},{0x9DC1, 0xF6B5},{0x9DC2, 0xC563},{0x9DC3, 0xF6BB},{0x9DC5, 0xF6BA},{0x9DC7, 0xF6B6},{0x9DC8, 0xF6C2},
- {0x9DCA, 0xF6B7},{0x9DCB, 0xF7BB},{0x9DCC, 0xF6C5},{0x9DCD, 0xF6C7},{0x9DCE, 0xF6BE},{0x9DCF, 0xF6B8},{0x9DD0, 0xF7BC},{0x9DD1, 0xF7BE},
- {0x9DD2, 0xF7B8},{0x9DD3, 0xC5C2},{0x9DD5, 0xF7C5},{0x9DD6, 0xF7C3},{0x9DD7, 0xC5C3},{0x9DD8, 0xF7C2},{0x9DD9, 0xF7C1},{0x9DDA, 0xF7BA},
- {0x9DDB, 0xF7B7},{0x9DDC, 0xF7BD},{0x9DDD, 0xF7C6},{0x9DDE, 0xF7B9},{0x9DDF, 0xF7BF},{0x9DE1, 0xF869},{0x9DE2, 0xF86E},{0x9DE3, 0xF864},
- {0x9DE4, 0xF867},{0x9DE5, 0xC5EE},{0x9DE6, 0xF86B},{0x9DE8, 0xF872},{0x9DE9, 0xF7C0},{0x9DEB, 0xF865},{0x9DEC, 0xF86F},{0x9DED, 0xF873},
- {0x9DEE, 0xF86A},{0x9DEF, 0xF863},{0x9DF0, 0xF86D},{0x9DF2, 0xF86C},{0x9DF3, 0xF871},{0x9DF4, 0xF870},{0x9DF5, 0xF7C4},{0x9DF6, 0xF868},
- {0x9DF7, 0xF862},{0x9DF8, 0xF866},{0x9DF9, 0xC64E},{0x9DFA, 0xC64F},{0x9DFB, 0xF861},{0x9DFD, 0xF8E6},{0x9DFE, 0xF8DD},{0x9DFF, 0xF8E5},
- {0x9E00, 0xF8E2},{0x9E01, 0xF8E3},{0x9E02, 0xF8DC},{0x9E03, 0xF8DF},{0x9E04, 0xF8E7},{0x9E05, 0xF8E1},{0x9E06, 0xF8E0},{0x9E07, 0xF8DE},
- {0x9E09, 0xF8E4},{0x9E0B, 0xF95D},{0x9E0D, 0xF95E},{0x9E0F, 0xF960},{0x9E10, 0xF95F},{0x9E11, 0xF962},{0x9E12, 0xF961},{0x9E13, 0xF97C},
- {0x9E14, 0xF97B},{0x9E15, 0xF9B7},{0x9E17, 0xF9B8},{0x9E19, 0xF9C5},{0x9E1A, 0xC678},{0x9E1B, 0xC67C},{0x9E1D, 0xF9CF},{0x9E1E, 0xC67D},
- {0x9E75, 0xB3BF},{0x9E79, 0xC4D0},{0x9E7A, 0xF6C9},{0x9E7C, 0xC650},{0x9E7D, 0xC651},{0x9E7F, 0xB3C0},{0x9E80, 0xE0EE},{0x9E82, 0xB9A8},
- {0x9E83, 0xE8F0},{0x9E86, 0xECB0},{0x9E87, 0xECB1},{0x9E88, 0xECAF},{0x9E89, 0xEFAB},{0x9E8A, 0xEFAA},{0x9E8B, 0xC247},{0x9E8C, 0xF1DF},
- {0x9E8D, 0xEFAC},{0x9E8E, 0xF1DE},{0x9E91, 0xF3F3},{0x9E92, 0xC451},{0x9E93, 0xC453},{0x9E94, 0xF3F2},{0x9E97, 0xC452},{0x9E99, 0xF5B1},
- {0x9E9A, 0xF5B3},{0x9E9B, 0xF5B2},{0x9E9C, 0xF6CA},{0x9E9D, 0xC565},{0x9E9F, 0xC5EF},{0x9EA0, 0xF8E8},{0x9EA1, 0xF963},{0x9EA4, 0xF9D2},
- {0x9EA5, 0xB3C1},{0x9EA7, 0xE4E5},{0x9EA9, 0xBEA2},{0x9EAD, 0xECB3},{0x9EAE, 0xECB2},{0x9EB0, 0xEFAD},{0x9EB4, 0xC454},{0x9EB5, 0xC4D1},
- {0x9EB6, 0xF7C7},{0x9EB7, 0xF9CB},{0x9EBB, 0xB3C2},{0x9EBC, 0xBBF2},{0x9EBE, 0xBEA3},{0x9EC0, 0xF3F4},{0x9EC2, 0xF874},{0x9EC3, 0xB6C0},
- {0x9EC8, 0xEFAE},{0x9ECC, 0xC664},{0x9ECD, 0xB6C1},{0x9ECE, 0xBEA4},{0x9ECF, 0xC248},{0x9ED0, 0xF875},{0x9ED1, 0xB6C2},{0x9ED3, 0xE8F1},
- {0x9ED4, 0xC072},{0x9ED5, 0xECB4},{0x9ED6, 0xECB5},{0x9ED8, 0xC071},{0x9EDA, 0xEFAF},{0x9EDB, 0xC24C},{0x9EDC, 0xC24A},{0x9EDD, 0xC24B},
- {0x9EDE, 0xC249},{0x9EDF, 0xF1E0},{0x9EE0, 0xC35C},{0x9EE4, 0xF5B5},{0x9EE5, 0xF5B4},{0x9EE6, 0xF5B7},{0x9EE7, 0xF5B6},{0x9EE8, 0xC4D2},
- {0x9EEB, 0xF6CB},{0x9EED, 0xF6CD},{0x9EEE, 0xF6CC},{0x9EEF, 0xC566},{0x9EF0, 0xF7C8},{0x9EF2, 0xF876},{0x9EF3, 0xF877},{0x9EF4, 0xC5F0},
- {0x9EF5, 0xF964},{0x9EF6, 0xF97D},{0x9EF7, 0xC675},{0x9EF9, 0xDCB0},{0x9EFA, 0xECB6},{0x9EFB, 0xEFB0},{0x9EFC, 0xF3F5},{0x9EFD, 0xE0EF},
- {0x9EFF, 0xEFB1},{0x9F00, 0xF1E2},{0x9F01, 0xF1E1},{0x9F06, 0xF878},{0x9F07, 0xC652},{0x9F09, 0xF965},{0x9F0A, 0xF97E},{0x9F0E, 0xB9A9},
- {0x9F0F, 0xE8F2},{0x9F10, 0xE8F3},{0x9F12, 0xECB7},{0x9F13, 0xB9AA},{0x9F15, 0xC35D},{0x9F16, 0xF1E3},{0x9F18, 0xF6CF},{0x9F19, 0xC567},
- {0x9F1A, 0xF6D0},{0x9F1B, 0xF6CE},{0x9F1C, 0xF879},{0x9F1E, 0xF8E9},{0x9F20, 0xB9AB},{0x9F22, 0xEFB4},{0x9F23, 0xEFB3},{0x9F24, 0xEFB2},
- {0x9F25, 0xF1E4},{0x9F28, 0xF1E8},{0x9F29, 0xF1E7},{0x9F2A, 0xF1E6},{0x9F2B, 0xF1E5},{0x9F2C, 0xC35E},{0x9F2D, 0xF3F6},{0x9F2E, 0xF5B9},
- {0x9F2F, 0xC4D3},{0x9F30, 0xF5B8},{0x9F31, 0xF6D1},{0x9F32, 0xF7CB},{0x9F33, 0xF7CA},{0x9F34, 0xC5C4},{0x9F35, 0xF7C9},{0x9F36, 0xF87C},
- {0x9F37, 0xF87B},{0x9F38, 0xF87A},{0x9F3B, 0xBBF3},{0x9F3D, 0xECB8},{0x9F3E, 0xC24D},{0x9F40, 0xF3F7},{0x9F41, 0xF3F8},{0x9F42, 0xF7CC},
- {0x9F43, 0xF87D},{0x9F46, 0xF8EA},{0x9F47, 0xF966},{0x9F48, 0xF9B9},{0x9F49, 0xF9D4},{0x9F4A, 0xBBF4},{0x9F4B, 0xC24E},{0x9F4C, 0xF1E9},
- {0x9F4D, 0xF3F9},{0x9F4E, 0xF6D2},{0x9F4F, 0xF87E},{0x9F52, 0xBEA6},{0x9F54, 0xEFB5},{0x9F55, 0xF1EA},{0x9F56, 0xF3FA},{0x9F57, 0xF3FB},
- {0x9F58, 0xF3FC},{0x9F59, 0xF5BE},{0x9F5B, 0xF5BA},{0x9F5C, 0xC568},{0x9F5D, 0xF5BD},{0x9F5E, 0xF5BC},{0x9F5F, 0xC4D4},{0x9F60, 0xF5BB},
- {0x9F61, 0xC4D6},{0x9F63, 0xC4D5},{0x9F64, 0xF6D4},{0x9F65, 0xF6D3},{0x9F66, 0xC569},{0x9F67, 0xC56A},{0x9F6A, 0xC5C6},{0x9F6B, 0xF7CD},
- {0x9F6C, 0xC5C5},{0x9F6E, 0xF8A3},{0x9F6F, 0xF8A4},{0x9F70, 0xF8A2},{0x9F71, 0xF8A1},{0x9F72, 0xC654},{0x9F74, 0xF8EB},{0x9F75, 0xF8EC},
- {0x9F76, 0xF8ED},{0x9F77, 0xC653},{0x9F78, 0xF967},{0x9F79, 0xF96A},{0x9F7A, 0xF969},{0x9F7B, 0xF968},{0x9F7E, 0xF9D3},{0x9F8D, 0xC073},
- {0x9F90, 0xC365},{0x9F91, 0xF5BF},{0x9F92, 0xF6D5},{0x9F94, 0xC5C7},{0x9F95, 0xF7CE},{0x9F98, 0xF9D5},{0x9F9C, 0xC074},{0x9FA0, 0xEFB6},
- {0x9FA2, 0xF7CF},{0x9FA4, 0xF9A1},{0xFA0C, 0xC94A},{0xFA0D, 0xDDFC},{0xFE30, 0xA14A},{0xFE31, 0xA157},{0xFE33, 0xA159},{0xFE34, 0xA15B},
- {0xFE35, 0xA15F},{0xFE36, 0xA160},{0xFE37, 0xA163},{0xFE38, 0xA164},{0xFE39, 0xA167},{0xFE3A, 0xA168},{0xFE3B, 0xA16B},{0xFE3C, 0xA16C},
- {0xFE3D, 0xA16F},{0xFE3E, 0xA170},{0xFE3F, 0xA173},{0xFE40, 0xA174},{0xFE41, 0xA177},{0xFE42, 0xA178},{0xFE43, 0xA17B},{0xFE44, 0xA17C},
- {0xFE49, 0xA1C6},{0xFE4A, 0xA1C7},{0xFE4B, 0xA1CA},{0xFE4C, 0xA1CB},{0xFE4D, 0xA1C8},{0xFE4E, 0xA1C9},{0xFE4F, 0xA15C},{0xFE50, 0xA14D},
- {0xFE52, 0xA14F},{0xFE54, 0xA151},{0xFE55, 0xA152},{0xFE56, 0xA153},{0xFE57, 0xA154},{0xFE59, 0xA17D},{0xFE5A, 0xA17E},{0xFE5B, 0xA1A1},
- {0xFE5C, 0xA1A2},{0xFE5D, 0xA1A3},{0xFE5E, 0xA1A4},{0xFE5F, 0xA1CC},{0xFE60, 0xA1CD},{0xFE61, 0xA1CE},{0xFE62, 0xA1DE},{0xFE63, 0xA1DF},
- {0xFE64, 0xA1E0},{0xFE65, 0xA1E1},{0xFE66, 0xA1E2},{0xFE69, 0xA24C},{0xFE6A, 0xA24D},{0xFE6B, 0xA24E},{0xFF01, 0xA149},{0xFF03, 0xA1AD},
- {0xFF04, 0xA243},{0xFF05, 0xA248},{0xFF06, 0xA1AE},{0xFF08, 0xA15D},{0xFF09, 0xA15E},{0xFF0A, 0xA1AF},{0xFF0B, 0xA1CF},{0xFF0C, 0xA141},
- {0xFF0D, 0xA1D0},{0xFF0E, 0xA144},{0xFF0F, 0xA241},{0xFF10, 0xA2AF},{0xFF11, 0xA2B0},{0xFF12, 0xA2B1},{0xFF13, 0xA2B2},{0xFF14, 0xA2B3},
- {0xFF15, 0xA2B4},{0xFF16, 0xA2B5},{0xFF17, 0xA2B6},{0xFF18, 0xA2B7},{0xFF19, 0xA2B8},{0xFF1A, 0xA147},{0xFF1B, 0xA146},{0xFF1C, 0xA1D5},
- {0xFF1D, 0xA1D7},{0xFF1E, 0xA1D6},{0xFF1F, 0xA148},{0xFF20, 0xA249},{0xFF21, 0xA2CF},{0xFF22, 0xA2D0},{0xFF23, 0xA2D1},{0xFF24, 0xA2D2},
- {0xFF25, 0xA2D3},{0xFF26, 0xA2D4},{0xFF27, 0xA2D5},{0xFF28, 0xA2D6},{0xFF29, 0xA2D7},{0xFF2A, 0xA2D8},{0xFF2B, 0xA2D9},{0xFF2C, 0xA2DA},
- {0xFF2D, 0xA2DB},{0xFF2E, 0xA2DC},{0xFF2F, 0xA2DD},{0xFF30, 0xA2DE},{0xFF31, 0xA2DF},{0xFF32, 0xA2E0},{0xFF33, 0xA2E1},{0xFF34, 0xA2E2},
- {0xFF35, 0xA2E3},{0xFF36, 0xA2E4},{0xFF37, 0xA2E5},{0xFF38, 0xA2E6},{0xFF39, 0xA2E7},{0xFF3A, 0xA2E8},{0xFF3C, 0xA242},{0xFF3F, 0xA1C4},
- {0xFF41, 0xA2E9},{0xFF42, 0xA2EA},{0xFF43, 0xA2EB},{0xFF44, 0xA2EC},{0xFF45, 0xA2ED},{0xFF46, 0xA2EE},{0xFF47, 0xA2EF},{0xFF48, 0xA2F0},
- {0xFF49, 0xA2F1},{0xFF4A, 0xA2F2},{0xFF4B, 0xA2F3},{0xFF4C, 0xA2F4},{0xFF4D, 0xA2F5},{0xFF4E, 0xA2F6},{0xFF4F, 0xA2F7},{0xFF50, 0xA2F8},
- {0xFF51, 0xA2F9},{0xFF52, 0xA2FA},{0xFF53, 0xA2FB},{0xFF54, 0xA2FC},{0xFF55, 0xA2FD},{0xFF56, 0xA2FE},{0xFF57, 0xA340},{0xFF58, 0xA341},
- {0xFF59, 0xA342},{0xFF5A, 0xA343},{0xFF5B, 0xA161},{0xFF5C, 0xA155},{0xFF5D, 0xA162},{0xFF64, 0xA14E}
-};
diff --git a/vcl/source/fontsubset/u2johab.inc b/vcl/source/fontsubset/u2johab.inc
deleted file mode 100644
index f7a75afaf503..000000000000
--- a/vcl/source/fontsubset/u2johab.inc
+++ /dev/null
@@ -1,2174 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// use generic RTL_TEXTENCODING_JOHAB to get rid of this file
-
-sal_uInt16pair xlat_1_6[17141] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE},
- {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7},
- {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9},
- {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD},
- {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4},
- {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9},
- {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE},
- {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1},
- {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9},
- {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1},
- {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1},
- {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9},
- {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1},
- {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7},
- {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9},
- {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1},
- {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9},
- {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1},
- {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9},
- {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1},
- {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9},
- {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1},
- {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4},
- {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA},
- {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0},
- {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC},
- {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5},
- {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4},
- {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8},
- {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7},
- {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5},
- {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC},
- {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1},
- {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC},
- {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2},
- {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE},
- {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7},
- {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF},
- {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE},
- {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6},
- {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE},
- {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6},
- {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4},
- {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC},
- {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4},
- {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8},
- {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6},
- {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC},
- {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE},
- {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1},
- {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5},
- {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9},
- {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF},
- {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1},
- {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC},
- {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7},
- {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5},
- {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE},
- {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB},
- {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4},
- {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC},
- {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4},
- {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC},
- {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4},
- {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC},
- {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4},
- {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC},
- {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4},
- {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC},
- {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4},
- {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC},
- {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1},
- {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9},
- {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1},
- {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9},
- {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1},
- {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9},
- {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1},
- {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9},
- {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1},
- {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9},
- {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1},
- {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3},
- {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB},
- {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3},
- {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB},
- {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3},
- {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB},
- {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3},
- {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB},
- {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3},
- {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB},
- {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3},
- {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB},
- {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5},
- {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD},
- {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5},
- {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF},
- {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8},
- {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0},
- {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8},
- {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB},
- {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6},
- {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1},
- {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF},
- {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9},
- {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1},
- {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4},
- {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1},
- {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0},
- {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB},
- {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2},
- {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6},
- {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF},
- {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA},
- {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1},
- {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8},
- {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC},
- {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2},
- {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7},
- {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2},
- {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5},
- {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2},
- {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7},
- {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3},
- {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC},
- {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2},
- {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE},
- {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7},
- {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5},
- {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5},
- {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6},
- {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA},
- {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6},
- {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA},
- {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7},
- {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF},
- {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1},
- {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1},
- {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA},
- {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6},
- {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9},
- {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6},
- {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD},
- {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4},
- {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD},
- {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4},
- {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9},
- {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA},
- {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3},
- {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB},
- {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE},
- {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF},
- {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7},
- {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2},
- {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD},
- {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4},
- {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD},
- {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4},
- {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2},
- {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2},
- {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD},
- {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED},
- {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5},
- {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4},
- {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED},
- {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB},
- {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2},
- {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0},
- {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8},
- {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2},
- {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1},
- {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC},
- {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1},
- {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3},
- {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6},
- {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC},
- {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA},
- {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4},
- {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6},
- {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2},
- {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2},
- {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB},
- {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0},
- {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7},
- {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6},
- {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5},
- {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5},
- {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3},
- {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4},
- {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE},
- {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8},
- {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1},
- {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE},
- {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3},
- {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2},
- {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8},
- {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD},
- {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF},
- {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD},
- {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0},
- {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2},
- {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD},
- {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF},
- {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF},
- {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB},
- {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD},
- {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0},
- {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB},
- {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD},
- {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE},
- {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0},
- {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6},
- {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1},
- {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD},
- {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE},
- {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9},
- {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8},
- {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB},
- {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8},
- {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0},
- {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6},
- {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3},
- {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB},
- {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0},
- {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6},
- {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4},
- {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9},
- {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC},
- {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3},
- {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF},
- {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF},
- {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7},
- {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD},
- {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE},
- {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9},
- {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC},
- {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5},
- {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB},
- {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE},
- {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4},
- {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1},
- {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7},
- {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA},
- {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1},
- {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD},
- {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6},
- {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8},
- {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7},
- {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7},
- {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5},
- {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2},
- {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1},
- {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8},
- {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF},
- {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9},
- {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5},
- {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF},
- {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7},
- {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6},
- {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0},
- {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA},
- {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA},
- {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4},
- {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB},
- {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE},
- {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6},
- {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2},
- {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4},
- {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3},
- {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1},
- {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0},
- {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3},
- {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3},
- {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0},
- {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4},
- {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4},
- {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC},
- {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4},
- {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3},
- {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6},
- {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4},
- {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD},
- {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5},
- {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3},
- {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5},
- {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE},
- {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5},
- {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC},
- {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6},
- {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8},
- {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA},
- {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5},
- {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4},
- {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4},
- {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5},
- {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC},
- {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3},
- {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA},
- {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7},
- {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8},
- {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA},
- {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2},
- {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8},
- {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0},
- {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6},
- {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8},
- {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9},
- {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4},
- {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5},
- {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7},
- {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1},
- {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB},
- {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB},
- {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB},
- {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8},
- {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC},
- {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3},
- {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC},
- {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2},
- {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6},
- {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0},
- {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9},
- {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA},
- {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA},
- {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD},
- {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9},
- {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED},
- {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD},
- {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE},
- {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5},
- {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3},
- {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7},
- {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB},
- {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5},
- {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE},
- {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE},
- {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF},
- {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7},
- {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5},
- {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1},
- {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB},
- {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3},
- {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1},
- {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4},
- {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA},
- {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7},
- {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4},
- {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5},
- {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0},
- {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3},
- {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1},
- {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0},
- {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1},
- {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0},
- {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF},
- {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8},
- {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2},
- {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1},
- {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC},
- {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4},
- {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0},
- {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD},
- {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC},
- {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8},
- {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA},
- {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC},
- {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC},
- {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1},
- {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7},
- {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8},
- {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3},
- {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD},
- {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF},
- {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4},
- {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8},
- {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5},
- {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4},
- {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2},
- {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2},
- {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA},
- {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0},
- {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8},
- {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE},
- {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5},
- {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB},
- {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7},
- {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE},
- {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE},
- {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2},
- {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1},
- {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5},
- {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2},
- {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9},
- {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB},
- {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7},
- {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7},
- {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4},
- {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6},
- {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3},
- {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9},
- {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7},
- {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0},
- {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8},
- {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2},
- {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4},
- {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7},
- {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7},
- {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8},
- {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8},
- {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0},
- {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0},
- {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA},
- {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA},
- {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3},
- {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3},
- {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9},
- {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2},
- {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1},
- {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC},
- {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8},
- {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5},
- {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4},
- {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4},
- {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE},
- {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA},
- {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED},
- {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1},
- {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4},
- {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2},
- {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB},
- {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4},
- {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1},
- {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1},
- {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB},
- {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6},
- {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB},
- {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB},
- {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5},
- {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6},
- {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1},
- {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE},
- {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0},
- {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3},
- {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0},
- {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB},
- {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2},
- {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1},
- {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3},
- {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC},
- {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8},
- {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA},
- {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF},
- {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2},
- {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA},
- {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1},
- {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB},
- {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6},
- {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC},
- {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF},
- {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7},
- {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4},
- {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8},
- {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3},
- {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA},
- {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1},
- {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA},
- {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC},
- {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF},
- {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF},
- {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6},
- {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3},
- {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB},
- {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0},
- {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7},
- {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB},
- {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1},
- {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7},
- {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC},
- {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC},
- {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE},
- {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9},
- {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6},
- {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6},
- {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8},
- {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB},
- {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8},
- {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7},
- {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD},
- {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0},
- {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC},
- {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5},
- {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB},
- {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2},
- {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE},
- {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6},
- {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB},
- {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD},
- {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA},
- {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2},
- {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA},
- {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0},
- {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB},
- {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB},
- {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0},
- {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB},
- {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6},
- {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD},
- {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF},
- {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1},
- {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD},
- {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC},
- {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD},
- {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9},
- {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE},
- {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7},
- {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0},
- {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1},
- {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7},
- {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD},
- {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7},
- {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9},
- {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF},
- {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5},
- {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4},
- {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8},
- {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1},
- {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8},
- {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2},
- {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE},
- {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3},
- {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2},
- {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA},
- {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD},
- {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8},
- {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6},
- {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0},
- {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB},
- {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED},
- {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5},
- {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8},
- {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9},
- {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7},
- {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3},
- {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD},
- {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF},
- {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9},
- {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0},
- {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7},
- {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF},
- {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB},
- {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC},
- {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0},
- {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7},
- {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC},
- {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB},
- {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6},
- {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1},
- {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9},
- {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA},
- {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC},
- {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1},
- {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3},
- {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2},
- {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3},
- {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB},
- {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF},
- {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE},
- {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0},
- {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC},
- {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1},
- {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD},
- {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1},
- {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA},
- {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA},
- {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED},
- {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1},
- {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB},
- {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2},
- {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF},
- {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF},
- {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB},
- {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0},
- {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF},
- {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7},
- {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5},
- {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4},
- {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF},
- {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1},
- {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC},
- {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA},
- {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF},
- {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1},
- {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2},
- {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1},
- {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2},
- {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5},
- {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB},
- {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3},
- {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC},
- {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA},
- {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9},
- {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4},
- {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED},
- {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5},
- {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2},
- {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2},
- {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6},
- {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF},
- {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC},
- {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6},
- {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE},
- {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB},
- {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD},
- {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF},
- {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4},
- {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA},
- {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6},
- {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF},
- {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE},
- {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD},
- {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB},
- {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE},
- {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4},
- {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB},
- {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC},
- {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6},
- {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5},
- {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9},
- {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1},
- {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4},
- {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7},
- {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7},
- {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE},
- {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1},
- {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC},
- {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4},
- {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC},
- {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD},
- {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0},
- {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1},
- {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC},
- {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD},
- {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8},
- {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1},
- {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD},
- {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE},
- {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED},
- {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7},
- {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9},
- {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7},
- {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4},
- {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6},
- {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA},
- {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3},
- {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5},
- {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA},
- {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1},
- {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB},
- {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7},
- {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1},
- {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB},
- {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA},
- {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4},
- {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6},
- {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2},
- {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE},
- {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6},
- {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7},
- {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0},
- {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0},
- {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4},
- {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6},
- {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6},
- {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1},
- {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1},
- {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE},
- {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5},
- {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA},
- {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7},
- {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4},
- {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF},
- {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3},
- {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3},
- {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD},
- {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9},
- {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3},
- {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2},
- {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE},
- {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC02, 0x8141},{0xAC03, 0x8142},{0xAC04, 0xB0A3},{0xAC05, 0x8143},{0xAC06, 0x8144},
- {0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7},{0xAC0B, 0x8145},{0xAC0C, 0x8146},{0xAC0D, 0x8147},{0xAC0E, 0x8148},
- {0xAC0F, 0x8149},{0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE},
- {0xAC17, 0xB0AF},{0xAC18, 0x814A},{0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC1E, 0x814B},
- {0xAC1F, 0x814C},{0xAC20, 0xB0B5},{0xAC21, 0x814D},{0xAC22, 0x814E},{0xAC23, 0x814F},{0xAC24, 0xB0B6},{0xAC25, 0x8150},{0xAC26, 0x8151},
- {0xAC27, 0x8152},{0xAC28, 0x8153},{0xAC29, 0x8154},{0xAC2A, 0x8155},{0xAC2B, 0x8156},{0xAC2C, 0xB0B7},{0xAC2D, 0xB0B8},{0xAC2E, 0x8157},
- {0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC32, 0x8158},{0xAC33, 0x8159},{0xAC34, 0x815A},{0xAC35, 0x8161},{0xAC36, 0x8162},
- {0xAC37, 0x8163},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3A, 0x8164},{0xAC3B, 0x8165},{0xAC3C, 0xB0BE},{0xAC3D, 0x8166},{0xAC3E, 0x8167},
- {0xAC3F, 0x8168},{0xAC40, 0xB0BF},{0xAC41, 0x8169},{0xAC42, 0x816A},{0xAC43, 0x816B},{0xAC44, 0x816C},{0xAC45, 0x816D},{0xAC46, 0x816E},
- {0xAC47, 0x816F},{0xAC48, 0x8170},{0xAC49, 0x8171},{0xAC4A, 0x8172},{0xAC4B, 0xB0C0},{0xAC4C, 0x8173},{0xAC4D, 0xB0C1},{0xAC4E, 0x8174},
- {0xAC4F, 0x8175},{0xAC50, 0x8176},{0xAC51, 0x8177},{0xAC52, 0x8178},{0xAC53, 0x8179},{0xAC54, 0xB0C2},{0xAC55, 0x817A},{0xAC56, 0x8181},
- {0xAC57, 0x8182},{0xAC58, 0xB0C3},{0xAC59, 0x8183},{0xAC5A, 0x8184},{0xAC5B, 0x8185},{0xAC5C, 0xB0C4},{0xAC5D, 0x8186},{0xAC5E, 0x8187},
- {0xAC5F, 0x8188},{0xAC60, 0x8189},{0xAC61, 0x818A},{0xAC62, 0x818B},{0xAC63, 0x818C},{0xAC64, 0x818D},{0xAC65, 0x818E},{0xAC66, 0x818F},
- {0xAC67, 0x8190},{0xAC68, 0x8191},{0xAC69, 0x8192},{0xAC6A, 0x8193},{0xAC6B, 0x8194},{0xAC6C, 0x8195},{0xAC6D, 0x8196},{0xAC6E, 0x8197},
- {0xAC6F, 0x8198},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC72, 0x8199},{0xAC73, 0x819A},{0xAC74, 0xB0C7},{0xAC75, 0x819B},{0xAC76, 0x819C},
- {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC79, 0x819D},{0xAC7A, 0xB0CA},{0xAC7B, 0x819E},{0xAC7C, 0x819F},{0xAC7D, 0x81A0},{0xAC7E, 0x81A1},
- {0xAC7F, 0x81A2},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC82, 0x81A3},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF},{0xAC86, 0xB0D0},
- {0xAC87, 0x81A4},{0xAC88, 0x81A5},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC8D, 0x81A6},{0xAC8E, 0x81A7},
- {0xAC8F, 0x81A8},{0xAC90, 0xB0D5},{0xAC91, 0x81A9},{0xAC92, 0x81AA},{0xAC93, 0x81AB},{0xAC94, 0xB0D6},{0xAC95, 0x81AC},{0xAC96, 0x81AD},
- {0xAC97, 0x81AE},{0xAC98, 0x81AF},{0xAC99, 0x81B0},{0xAC9A, 0x81B1},{0xAC9B, 0x81B2},{0xAC9C, 0xB0D7},{0xAC9D, 0xB0D8},{0xAC9E, 0x81B3},
- {0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA2, 0x81B4},{0xACA3, 0x81B5},{0xACA4, 0x81B6},{0xACA5, 0x81B7},{0xACA6, 0x81B8},
- {0xACA7, 0x81B9},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAB, 0x81BA},{0xACAC, 0xB0DF},{0xACAD, 0x81BB},{0xACAE, 0x81BC},
- {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB1, 0x81BD},{0xACB2, 0x81BE},{0xACB3, 0x81BF},{0xACB4, 0x81C0},{0xACB5, 0x81C1},{0xACB6, 0x81C2},
- {0xACB7, 0x81C3},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBA, 0x81C4},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACBE, 0x81C5},
- {0xACBF, 0x81C6},{0xACC0, 0x81C7},{0xACC1, 0xB0E7},{0xACC2, 0x81C8},{0xACC3, 0x81C9},{0xACC4, 0xB0E8},{0xACC5, 0x81CA},{0xACC6, 0x81CB},
- {0xACC7, 0x81CC},{0xACC8, 0xB0E9},{0xACC9, 0x81CD},{0xACCA, 0x81CE},{0xACCB, 0x81CF},{0xACCC, 0xB0EA},{0xACCD, 0x81D0},{0xACCE, 0x81D1},
- {0xACCF, 0x81D2},{0xACD0, 0x81D3},{0xACD1, 0x81D4},{0xACD2, 0x81D5},{0xACD3, 0x81D6},{0xACD4, 0x81D7},{0xACD5, 0xB0EB},{0xACD6, 0x81D8},
- {0xACD7, 0xB0EC},{0xACD8, 0x81D9},{0xACD9, 0x81DA},{0xACDA, 0x81DB},{0xACDB, 0x81DC},{0xACDC, 0x81DD},{0xACDD, 0x81DE},{0xACDE, 0x81DF},
- {0xACDF, 0x81E0},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE2, 0x81E1},{0xACE3, 0x81E2},{0xACE4, 0xB0EF},{0xACE5, 0x81E3},{0xACE6, 0x81E4},
- {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACE9, 0x81E5},{0xACEA, 0xB0F2},{0xACEB, 0x81E6},{0xACEC, 0xB0F3},{0xACED, 0x81E7},{0xACEE, 0x81E8},
- {0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF2, 0x81E9},{0xACF3, 0xB0F7},{0xACF4, 0x81EA},{0xACF5, 0xB0F8},{0xACF6, 0xB0F9},
- {0xACF7, 0x81EB},{0xACF8, 0x81EC},{0xACF9, 0x81ED},{0xACFA, 0x81EE},{0xACFB, 0x81EF},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xACFE, 0x81F0},
- {0xACFF, 0x81F1},{0xAD00, 0xB0FC},{0xAD01, 0x81F2},{0xAD02, 0x81F3},{0xAD03, 0x81F4},{0xAD04, 0xB0FD},{0xAD05, 0x81F5},{0xAD06, 0xB0FE},
- {0xAD07, 0x81F6},{0xAD08, 0x81F7},{0xAD09, 0x81F8},{0xAD0A, 0x81F9},{0xAD0B, 0x81FA},{0xAD0C, 0xB1A1},{0xAD0D, 0xB1A2},{0xAD0E, 0x81FB},
- {0xAD0F, 0xB1A3},{0xAD10, 0x81FC},{0xAD11, 0xB1A4},{0xAD12, 0x81FD},{0xAD13, 0x81FE},{0xAD14, 0x8241},{0xAD15, 0x8242},{0xAD16, 0x8243},
- {0xAD17, 0x8244},{0xAD18, 0xB1A5},{0xAD19, 0x8245},{0xAD1A, 0x8246},{0xAD1B, 0x8247},{0xAD1C, 0xB1A6},{0xAD1D, 0x8248},{0xAD1E, 0x8249},
- {0xAD1F, 0x824A},{0xAD20, 0xB1A7},{0xAD21, 0x824B},{0xAD22, 0x824C},{0xAD23, 0x824D},{0xAD24, 0x824E},{0xAD25, 0x824F},{0xAD26, 0x8250},
- {0xAD27, 0x8251},{0xAD28, 0x8252},{0xAD29, 0xB1A8},{0xAD2A, 0x8253},{0xAD2B, 0x8254},{0xAD2C, 0xB1A9},{0xAD2D, 0xB1AA},{0xAD2E, 0x8255},
- {0xAD2F, 0x8256},{0xAD30, 0x8257},{0xAD31, 0x8258},{0xAD32, 0x8259},{0xAD33, 0x825A},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD36, 0x8261},
- {0xAD37, 0x8262},{0xAD38, 0xB1AD},{0xAD39, 0x8263},{0xAD3A, 0x8264},{0xAD3B, 0x8265},{0xAD3C, 0xB1AE},{0xAD3D, 0x8266},{0xAD3E, 0x8267},
- {0xAD3F, 0x8268},{0xAD40, 0x8269},{0xAD41, 0x826A},{0xAD42, 0x826B},{0xAD43, 0x826C},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD46, 0x826D},
- {0xAD47, 0xB1B1},{0xAD48, 0x826E},{0xAD49, 0xB1B2},{0xAD4A, 0x826F},{0xAD4B, 0x8270},{0xAD4C, 0x8271},{0xAD4D, 0x8272},{0xAD4E, 0x8273},
- {0xAD4F, 0x8274},{0xAD50, 0xB1B3},{0xAD51, 0x8275},{0xAD52, 0x8276},{0xAD53, 0x8277},{0xAD54, 0xB1B4},{0xAD55, 0x8278},{0xAD56, 0x8279},
- {0xAD57, 0x827A},{0xAD58, 0xB1B5},{0xAD59, 0x8281},{0xAD5A, 0x8282},{0xAD5B, 0x8283},{0xAD5C, 0x8284},{0xAD5D, 0x8285},{0xAD5E, 0x8286},
- {0xAD5F, 0x8287},{0xAD60, 0x8288},{0xAD61, 0xB1B6},{0xAD62, 0x8289},{0xAD63, 0xB1B7},{0xAD64, 0x828A},{0xAD65, 0x828B},{0xAD66, 0x828C},
- {0xAD67, 0x828D},{0xAD68, 0x828E},{0xAD69, 0x828F},{0xAD6A, 0x8290},{0xAD6B, 0x8291},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9},{0xAD6E, 0x8292},
- {0xAD6F, 0x8293},{0xAD70, 0xB1BA},{0xAD71, 0x8294},{0xAD72, 0x8295},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE},
- {0xAD77, 0x8296},{0xAD78, 0x8297},{0xAD79, 0x8298},{0xAD7A, 0x8299},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1},{0xAD7E, 0x829A},
- {0xAD7F, 0xB1C2},{0xAD80, 0x829B},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD83, 0x829C},{0xAD84, 0x829D},{0xAD85, 0x829E},{0xAD86, 0x829F},
- {0xAD87, 0x82A0},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8A, 0x82A1},{0xAD8B, 0x82A2},{0xAD8C, 0xB1C7},{0xAD8D, 0x82A3},{0xAD8E, 0x82A4},
- {0xAD8F, 0x82A5},{0xAD90, 0xB1C8},{0xAD91, 0x82A6},{0xAD92, 0x82A7},{0xAD93, 0x82A8},{0xAD94, 0x82A9},{0xAD95, 0x82AA},{0xAD96, 0x82AB},
- {0xAD97, 0x82AC},{0xAD98, 0x82AD},{0xAD99, 0x82AE},{0xAD9A, 0x82AF},{0xAD9B, 0x82B0},{0xAD9C, 0xB1C9},{0xAD9D, 0xB1CA},{0xAD9E, 0x82B1},
- {0xAD9F, 0x82B2},{0xADA0, 0x82B3},{0xADA1, 0x82B4},{0xADA2, 0x82B5},{0xADA3, 0x82B6},{0xADA4, 0xB1CB},{0xADA5, 0x82B7},{0xADA6, 0x82B8},
- {0xADA7, 0x82B9},{0xADA8, 0x82BA},{0xADA9, 0x82BB},{0xADAA, 0x82BC},{0xADAB, 0x82BD},{0xADAC, 0x82BE},{0xADAD, 0x82BF},{0xADAE, 0x82C0},
- {0xADAF, 0x82C1},{0xADB0, 0x82C2},{0xADB1, 0x82C3},{0xADB2, 0x82C4},{0xADB3, 0x82C5},{0xADB4, 0x82C6},{0xADB5, 0x82C7},{0xADB6, 0x82C8},
- {0xADB7, 0xB1CC},{0xADB8, 0x82C9},{0xADB9, 0x82CA},{0xADBA, 0x82CB},{0xADBB, 0x82CC},{0xADBC, 0x82CD},{0xADBD, 0x82CE},{0xADBE, 0x82CF},
- {0xADBF, 0x82D0},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC2, 0x82D1},{0xADC3, 0x82D2},{0xADC4, 0xB1CF},{0xADC5, 0x82D3},{0xADC6, 0x82D4},
- {0xADC7, 0x82D5},{0xADC8, 0xB1D0},{0xADC9, 0x82D6},{0xADCA, 0x82D7},{0xADCB, 0x82D8},{0xADCC, 0x82D9},{0xADCD, 0x82DA},{0xADCE, 0x82DB},
- {0xADCF, 0x82DC},{0xADD0, 0xB1D1},{0xADD1, 0xB1D2},{0xADD2, 0x82DD},{0xADD3, 0xB1D3},{0xADD4, 0x82DE},{0xADD5, 0x82DF},{0xADD6, 0x82E0},
- {0xADD7, 0x82E1},{0xADD8, 0x82E2},{0xADD9, 0x82E3},{0xADDA, 0x82E4},{0xADDB, 0x82E5},{0xADDC, 0xB1D4},{0xADDD, 0x82E6},{0xADDE, 0x82E7},
- {0xADDF, 0x82E8},{0xADE0, 0xB1D5},{0xADE1, 0x82E9},{0xADE2, 0x82EA},{0xADE3, 0x82EB},{0xADE4, 0xB1D6},{0xADE5, 0x82EC},{0xADE6, 0x82ED},
- {0xADE7, 0x82EE},{0xADE8, 0x82EF},{0xADE9, 0x82F0},{0xADEA, 0x82F1},{0xADEB, 0x82F2},{0xADEC, 0x82F3},{0xADED, 0x82F4},{0xADEE, 0x82F5},
- {0xADEF, 0x82F6},{0xADF0, 0x82F7},{0xADF1, 0x82F8},{0xADF2, 0x82F9},{0xADF3, 0x82FA},{0xADF4, 0x82FB},{0xADF5, 0x82FC},{0xADF6, 0x82FD},
- {0xADF7, 0x82FE},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFA, 0x8341},{0xADFB, 0x8342},{0xADFC, 0xB1D9},{0xADFD, 0x8343},{0xADFE, 0x8344},
- {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE02, 0x8345},{0xAE03, 0x8346},{0xAE04, 0x8347},{0xAE05, 0x8348},{0xAE06, 0x8349},
- {0xAE07, 0x834A},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0A, 0x834B},{0xAE0B, 0xB1DF},{0xAE0C, 0x834C},{0xAE0D, 0xB1E0},{0xAE0E, 0x834D},
- {0xAE0F, 0x834E},{0xAE10, 0x834F},{0xAE11, 0x8350},{0xAE12, 0x8351},{0xAE13, 0x8352},{0xAE14, 0xB1E1},{0xAE15, 0x8353},{0xAE16, 0x8354},
- {0xAE17, 0x8355},{0xAE18, 0x8356},{0xAE19, 0x8357},{0xAE1A, 0x8358},{0xAE1B, 0x8359},{0xAE1C, 0x835A},{0xAE1D, 0x8361},{0xAE1E, 0x8362},
- {0xAE1F, 0x8363},{0xAE20, 0x8364},{0xAE21, 0x8365},{0xAE22, 0x8366},{0xAE23, 0x8367},{0xAE24, 0x8368},{0xAE25, 0x8369},{0xAE26, 0x836A},
- {0xAE27, 0x836B},{0xAE28, 0x836C},{0xAE29, 0x836D},{0xAE2A, 0x836E},{0xAE2B, 0x836F},{0xAE2C, 0x8370},{0xAE2D, 0x8371},{0xAE2E, 0x8372},
- {0xAE2F, 0x8373},{0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE32, 0x8374},{0xAE33, 0x8375},{0xAE34, 0xB1E4},{0xAE35, 0x8376},{0xAE36, 0x8377},
- {0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE39, 0x8378},{0xAE3A, 0xB1E7},{0xAE3B, 0x8379},{0xAE3C, 0x837A},{0xAE3D, 0x8381},{0xAE3E, 0x8382},
- {0xAE3F, 0x8383},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9},{0xAE42, 0x8384},{0xAE43, 0xB1EA},{0xAE44, 0x8385},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC},
- {0xAE47, 0x8386},{0xAE48, 0x8387},{0xAE49, 0x8388},{0xAE4A, 0xB1ED},{0xAE4B, 0x8389},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0},
- {0xAE4F, 0x838A},{0xAE50, 0xB1F1},{0xAE51, 0x838B},{0xAE52, 0x838C},{0xAE53, 0x838D},{0xAE54, 0xB1F2},{0xAE55, 0x838E},{0xAE56, 0xB1F3},
- {0xAE57, 0x838F},{0xAE58, 0x8390},{0xAE59, 0x8391},{0xAE5A, 0x8392},{0xAE5B, 0x8393},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5E, 0x8394},
- {0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE62, 0x8395},{0xAE63, 0x8396},{0xAE64, 0x8397},{0xAE65, 0xB1F9},{0xAE66, 0x8398},
- {0xAE67, 0x8399},{0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6A, 0x839A},{0xAE6B, 0x839B},{0xAE6C, 0xB1FC},{0xAE6D, 0x839C},{0xAE6E, 0x839D},
- {0xAE6F, 0x839E},{0xAE70, 0xB1FD},{0xAE71, 0x839F},{0xAE72, 0x83A0},{0xAE73, 0x83A1},{0xAE74, 0x83A2},{0xAE75, 0x83A3},{0xAE76, 0x83A4},
- {0xAE77, 0x83A5},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7A, 0x83A6},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3},{0xAE7D, 0xB2A4},{0xAE7E, 0x83A7},
- {0xAE7F, 0x83A8},{0xAE80, 0x83A9},{0xAE81, 0x83AA},{0xAE82, 0x83AB},{0xAE83, 0x83AC},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE86, 0x83AD},
- {0xAE87, 0x83AE},{0xAE88, 0x83AF},{0xAE89, 0x83B0},{0xAE8A, 0x83B1},{0xAE8B, 0x83B2},{0xAE8C, 0xB2A7},{0xAE8D, 0x83B3},{0xAE8E, 0x83B4},
- {0xAE8F, 0x83B5},{0xAE90, 0x83B6},{0xAE91, 0x83B7},{0xAE92, 0x83B8},{0xAE93, 0x83B9},{0xAE94, 0x83BA},{0xAE95, 0x83BB},{0xAE96, 0x83BC},
- {0xAE97, 0x83BD},{0xAE98, 0x83BE},{0xAE99, 0x83BF},{0xAE9A, 0x83C0},{0xAE9B, 0x83C1},{0xAE9C, 0x83C2},{0xAE9D, 0x83C3},{0xAE9E, 0x83C4},
- {0xAE9F, 0x83C5},{0xAEA0, 0x83C6},{0xAEA1, 0x83C7},{0xAEA2, 0x83C8},{0xAEA3, 0x83C9},{0xAEA4, 0x83CA},{0xAEA5, 0x83CB},{0xAEA6, 0x83CC},
- {0xAEA7, 0x83CD},{0xAEA8, 0x83CE},{0xAEA9, 0x83CF},{0xAEAA, 0x83D0},{0xAEAB, 0x83D1},{0xAEAC, 0x83D2},{0xAEAD, 0x83D3},{0xAEAE, 0x83D4},
- {0xAEAF, 0x83D5},{0xAEB0, 0x83D6},{0xAEB1, 0x83D7},{0xAEB2, 0x83D8},{0xAEB3, 0x83D9},{0xAEB4, 0x83DA},{0xAEB5, 0x83DB},{0xAEB6, 0x83DC},
- {0xAEB7, 0x83DD},{0xAEB8, 0x83DE},{0xAEB9, 0x83DF},{0xAEBA, 0x83E0},{0xAEBB, 0x83E1},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA},
- {0xAEBF, 0x83E2},{0xAEC0, 0xB2AB},{0xAEC1, 0x83E3},{0xAEC2, 0x83E4},{0xAEC3, 0x83E5},{0xAEC4, 0xB2AC},{0xAEC5, 0x83E6},{0xAEC6, 0x83E7},
- {0xAEC7, 0x83E8},{0xAEC8, 0x83E9},{0xAEC9, 0x83EA},{0xAECA, 0x83EB},{0xAECB, 0x83EC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECE, 0x83ED},
- {0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED2, 0x83EE},{0xAED3, 0x83EF},{0xAED4, 0x83F0},{0xAED5, 0x83F1},{0xAED6, 0x83F2},
- {0xAED7, 0x83F3},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3},{0xAEDA, 0x83F4},{0xAEDB, 0x83F5},{0xAEDC, 0xB2B4},{0xAEDD, 0x83F6},{0xAEDE, 0x83F7},
- {0xAEDF, 0x83F8},{0xAEE0, 0x83F9},{0xAEE1, 0x83FA},{0xAEE2, 0x83FB},{0xAEE3, 0x83FC},{0xAEE4, 0x83FD},{0xAEE5, 0x83FE},{0xAEE6, 0x8441},
- {0xAEE7, 0x8442},{0xAEE8, 0xB2B5},{0xAEE9, 0x8443},{0xAEEA, 0x8444},{0xAEEB, 0xB2B6},{0xAEEC, 0x8445},{0xAEED, 0xB2B7},{0xAEEE, 0x8446},
- {0xAEEF, 0x8447},{0xAEF0, 0x8448},{0xAEF1, 0x8449},{0xAEF2, 0x844A},{0xAEF3, 0x844B},{0xAEF4, 0xB2B8},{0xAEF5, 0x844C},{0xAEF6, 0x844D},
- {0xAEF7, 0x844E},{0xAEF8, 0xB2B9},{0xAEF9, 0x844F},{0xAEFA, 0x8450},{0xAEFB, 0x8451},{0xAEFC, 0xB2BA},{0xAEFD, 0x8452},{0xAEFE, 0x8453},
- {0xAEFF, 0x8454},{0xAF00, 0x8455},{0xAF01, 0x8456},{0xAF02, 0x8457},{0xAF03, 0x8458},{0xAF04, 0x8459},{0xAF05, 0x845A},{0xAF06, 0x8461},
- {0xAF07, 0xB2BB},{0xAF08, 0xB2BC},{0xAF09, 0x8462},{0xAF0A, 0x8463},{0xAF0B, 0x8464},{0xAF0C, 0x8465},{0xAF0D, 0xB2BD},{0xAF0E, 0x8466},
- {0xAF0F, 0x8467},{0xAF10, 0xB2BE},{0xAF11, 0x8468},{0xAF12, 0x8469},{0xAF13, 0x846A},{0xAF14, 0x846B},{0xAF15, 0x846C},{0xAF16, 0x846D},
- {0xAF17, 0x846E},{0xAF18, 0x846F},{0xAF19, 0x8470},{0xAF1A, 0x8471},{0xAF1B, 0x8472},{0xAF1C, 0x8473},{0xAF1D, 0x8474},{0xAF1E, 0x8475},
- {0xAF1F, 0x8476},{0xAF20, 0x8477},{0xAF21, 0x8478},{0xAF22, 0x8479},{0xAF23, 0x847A},{0xAF24, 0x8481},{0xAF25, 0x8482},{0xAF26, 0x8483},
- {0xAF27, 0x8484},{0xAF28, 0x8485},{0xAF29, 0x8486},{0xAF2A, 0x8487},{0xAF2B, 0x8488},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF2E, 0x8489},
- {0xAF2F, 0x848A},{0xAF30, 0xB2C1},{0xAF31, 0x848B},{0xAF32, 0xB2C2},{0xAF33, 0x848C},{0xAF34, 0xB2C3},{0xAF35, 0x848D},{0xAF36, 0x848E},
- {0xAF37, 0x848F},{0xAF38, 0x8490},{0xAF39, 0x8491},{0xAF3A, 0x8492},{0xAF3B, 0x8493},{0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3E, 0x8494},
- {0xAF3F, 0xB2C6},{0xAF40, 0x8495},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF44, 0x8496},{0xAF45, 0x8497},{0xAF46, 0x8498},
- {0xAF47, 0x8499},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB},{0xAF4A, 0x849A},{0xAF4B, 0x849B},{0xAF4C, 0x849C},{0xAF4D, 0x849D},{0xAF4E, 0x849E},
- {0xAF4F, 0x849F},{0xAF50, 0xB2CC},{0xAF51, 0x84A0},{0xAF52, 0x84A1},{0xAF53, 0x84A2},{0xAF54, 0x84A3},{0xAF55, 0x84A4},{0xAF56, 0x84A5},
- {0xAF57, 0x84A6},{0xAF58, 0x84A7},{0xAF59, 0x84A8},{0xAF5A, 0x84A9},{0xAF5B, 0x84AA},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF5E, 0x84AB},
- {0xAF5F, 0x84AC},{0xAF60, 0x84AD},{0xAF61, 0x84AE},{0xAF62, 0x84AF},{0xAF63, 0x84B0},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF66, 0x84B1},
- {0xAF67, 0x84B2},{0xAF68, 0x84B3},{0xAF69, 0x84B4},{0xAF6A, 0x84B5},{0xAF6B, 0x84B6},{0xAF6C, 0x84B7},{0xAF6D, 0x84B8},{0xAF6E, 0x84B9},
- {0xAF6F, 0x84BA},{0xAF70, 0x84BB},{0xAF71, 0x84BC},{0xAF72, 0x84BD},{0xAF73, 0x84BE},{0xAF74, 0x84BF},{0xAF75, 0x84C0},{0xAF76, 0x84C1},
- {0xAF77, 0x84C2},{0xAF78, 0x84C3},{0xAF79, 0xB2D1},{0xAF7A, 0x84C4},{0xAF7B, 0x84C5},{0xAF7C, 0x84C6},{0xAF7D, 0x84C7},{0xAF7E, 0x84C8},
- {0xAF7F, 0x84C9},{0xAF80, 0xB2D2},{0xAF81, 0x84CA},{0xAF82, 0x84CB},{0xAF83, 0x84CC},{0xAF84, 0xB2D3},{0xAF85, 0x84CD},{0xAF86, 0x84CE},
- {0xAF87, 0x84CF},{0xAF88, 0xB2D4},{0xAF89, 0x84D0},{0xAF8A, 0x84D1},{0xAF8B, 0x84D2},{0xAF8C, 0x84D3},{0xAF8D, 0x84D4},{0xAF8E, 0x84D5},
- {0xAF8F, 0x84D6},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF92, 0x84D7},{0xAF93, 0x84D8},{0xAF94, 0x84D9},{0xAF95, 0xB2D7},{0xAF96, 0x84DA},
- {0xAF97, 0x84DB},{0xAF98, 0x84DC},{0xAF99, 0x84DD},{0xAF9A, 0x84DE},{0xAF9B, 0x84DF},{0xAF9C, 0xB2D8},{0xAF9D, 0x84E0},{0xAF9E, 0x84E1},
- {0xAF9F, 0x84E2},{0xAFA0, 0x84E3},{0xAFA1, 0x84E4},{0xAFA2, 0x84E5},{0xAFA3, 0x84E6},{0xAFA4, 0x84E7},{0xAFA5, 0x84E8},{0xAFA6, 0x84E9},
- {0xAFA7, 0x84EA},{0xAFA8, 0x84EB},{0xAFA9, 0x84EC},{0xAFAA, 0x84ED},{0xAFAB, 0x84EE},{0xAFAC, 0x84EF},{0xAFAD, 0x84F0},{0xAFAE, 0x84F1},
- {0xAFAF, 0x84F2},{0xAFB0, 0x84F3},{0xAFB1, 0x84F4},{0xAFB2, 0x84F5},{0xAFB3, 0x84F6},{0xAFB4, 0x84F7},{0xAFB5, 0x84F8},{0xAFB6, 0x84F9},
- {0xAFB7, 0x84FA},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBA, 0x84FB},{0xAFBB, 0x84FC},{0xAFBC, 0xB2DB},{0xAFBD, 0x84FD},{0xAFBE, 0x84FE},
- {0xAFBF, 0x8541},{0xAFC0, 0xB2DC},{0xAFC1, 0x8542},{0xAFC2, 0x8543},{0xAFC3, 0x8544},{0xAFC4, 0x8545},{0xAFC5, 0x8546},{0xAFC6, 0x8547},
- {0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCA, 0x8548},{0xAFCB, 0xB2E0},{0xAFCC, 0x8549},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2},
- {0xAFCF, 0x854A},{0xAFD0, 0x854B},{0xAFD1, 0x854C},{0xAFD2, 0x854D},{0xAFD3, 0x854E},{0xAFD4, 0xB2E3},{0xAFD5, 0x854F},{0xAFD6, 0x8550},
- {0xAFD7, 0x8551},{0xAFD8, 0x8552},{0xAFD9, 0x8553},{0xAFDA, 0x8554},{0xAFDB, 0x8555},{0xAFDC, 0xB2E4},{0xAFDD, 0x8556},{0xAFDE, 0x8557},
- {0xAFDF, 0x8558},{0xAFE0, 0x8559},{0xAFE1, 0x855A},{0xAFE2, 0x8561},{0xAFE3, 0x8562},{0xAFE4, 0x8563},{0xAFE5, 0x8564},{0xAFE6, 0x8565},
- {0xAFE7, 0x8566},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFEA, 0x8567},{0xAFEB, 0x8568},{0xAFEC, 0x8569},{0xAFED, 0x856A},{0xAFEE, 0x856B},
- {0xAFEF, 0x856C},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF2, 0x856D},{0xAFF3, 0x856E},{0xAFF4, 0xB2E9},{0xAFF5, 0x856F},{0xAFF6, 0x8570},
- {0xAFF7, 0x8571},{0xAFF8, 0xB2EA},{0xAFF9, 0x8572},{0xAFFA, 0x8573},{0xAFFB, 0x8574},{0xAFFC, 0x8575},{0xAFFD, 0x8576},{0xAFFE, 0x8577},
- {0xAFFF, 0x8578},{0xB000, 0xB2EB},{0xB001, 0xB2EC},{0xB002, 0x8579},{0xB003, 0x857A},{0xB004, 0xB2ED},{0xB005, 0x8581},{0xB006, 0x8582},
- {0xB007, 0x8583},{0xB008, 0x8584},{0xB009, 0x8585},{0xB00A, 0x8586},{0xB00B, 0x8587},{0xB00C, 0xB2EE},{0xB00D, 0x8588},{0xB00E, 0x8589},
- {0xB00F, 0x858A},{0xB010, 0xB2EF},{0xB011, 0x858B},{0xB012, 0x858C},{0xB013, 0x858D},{0xB014, 0xB2F0},{0xB015, 0x858E},{0xB016, 0x858F},
- {0xB017, 0x8590},{0xB018, 0x8591},{0xB019, 0x8592},{0xB01A, 0x8593},{0xB01B, 0x8594},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB01E, 0x8595},
- {0xB01F, 0x8596},{0xB020, 0x8597},{0xB021, 0x8598},{0xB022, 0x8599},{0xB023, 0x859A},{0xB024, 0x859B},{0xB025, 0x859C},{0xB026, 0x859D},
- {0xB027, 0x859E},{0xB028, 0xB2F3},{0xB029, 0x859F},{0xB02A, 0x85A0},{0xB02B, 0x85A1},{0xB02C, 0x85A2},{0xB02D, 0x85A3},{0xB02E, 0x85A4},
- {0xB02F, 0x85A5},{0xB030, 0x85A6},{0xB031, 0x85A7},{0xB032, 0x85A8},{0xB033, 0x85A9},{0xB034, 0x85AA},{0xB035, 0x85AB},{0xB036, 0x85AC},
- {0xB037, 0x85AD},{0xB038, 0x85AE},{0xB039, 0x85AF},{0xB03A, 0x85B0},{0xB03B, 0x85B1},{0xB03C, 0x85B2},{0xB03D, 0x85B3},{0xB03E, 0x85B4},
- {0xB03F, 0x85B5},{0xB040, 0x85B6},{0xB041, 0x85B7},{0xB042, 0x85B8},{0xB043, 0x85B9},{0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB046, 0x85BA},
- {0xB047, 0x85BB},{0xB048, 0xB2F6},{0xB049, 0x85BC},{0xB04A, 0xB2F7},{0xB04B, 0x85BD},{0xB04C, 0xB2F8},{0xB04D, 0x85BE},{0xB04E, 0xB2F9},
- {0xB04F, 0x85BF},{0xB050, 0x85C0},{0xB051, 0x85C1},{0xB052, 0x85C2},{0xB053, 0xB2FA},{0xB054, 0xB2FB},{0xB055, 0xB2FC},{0xB056, 0x85C3},
- {0xB057, 0xB2FD},{0xB058, 0x85C4},{0xB059, 0xB2FE},{0xB05A, 0x85C5},{0xB05B, 0x85C6},{0xB05C, 0x85C7},{0xB05D, 0xB3A1},{0xB05E, 0x85C8},
- {0xB05F, 0x85C9},{0xB060, 0x85CA},{0xB061, 0x85CB},{0xB062, 0x85CC},{0xB063, 0x85CD},{0xB064, 0x85CE},{0xB065, 0x85CF},{0xB066, 0x85D0},
- {0xB067, 0x85D1},{0xB068, 0x85D2},{0xB069, 0x85D3},{0xB06A, 0x85D4},{0xB06B, 0x85D5},{0xB06C, 0x85D6},{0xB06D, 0x85D7},{0xB06E, 0x85D8},
- {0xB06F, 0x85D9},{0xB070, 0x85DA},{0xB071, 0x85DB},{0xB072, 0x85DC},{0xB073, 0x85DD},{0xB074, 0x85DE},{0xB075, 0x85DF},{0xB076, 0x85E0},
- {0xB077, 0x85E1},{0xB078, 0x85E2},{0xB079, 0x85E3},{0xB07A, 0x85E4},{0xB07B, 0x85E5},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB07E, 0x85E6},
- {0xB07F, 0x85E7},{0xB080, 0xB3A4},{0xB081, 0x85E8},{0xB082, 0x85E9},{0xB083, 0x85EA},{0xB084, 0xB3A5},{0xB085, 0x85EB},{0xB086, 0x85EC},
- {0xB087, 0x85ED},{0xB088, 0x85EE},{0xB089, 0x85EF},{0xB08A, 0x85F0},{0xB08B, 0x85F1},{0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08E, 0x85F2},
- {0xB08F, 0xB3A8},{0xB090, 0x85F3},{0xB091, 0xB3A9},{0xB092, 0x85F4},{0xB093, 0x85F5},{0xB094, 0x85F6},{0xB095, 0x85F7},{0xB096, 0x85F8},
- {0xB097, 0x85F9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09B, 0x85FA},{0xB09C, 0xB3AD},{0xB09D, 0x85FB},{0xB09E, 0x85FC},
- {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A3, 0x85FD},{0xB0A4, 0x85FE},{0xB0A5, 0x8641},{0xB0A6, 0x8642},
- {0xB0A7, 0x8643},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AA, 0x8644},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5},{0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7},
- {0xB0AF, 0xB3B8},{0xB0B0, 0x8645},{0xB0B1, 0xB3B9},{0xB0B2, 0x8646},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B6, 0x8647},
- {0xB0B7, 0x8648},{0xB0B8, 0xB3BD},{0xB0B9, 0x8649},{0xB0BA, 0x864A},{0xB0BB, 0x864B},{0xB0BC, 0xB3BE},{0xB0BD, 0x864C},{0xB0BE, 0x864D},
- {0xB0BF, 0x864E},{0xB0C0, 0x864F},{0xB0C1, 0x8650},{0xB0C2, 0x8651},{0xB0C3, 0x8652},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C6, 0x8653},
- {0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0CA, 0x8654},{0xB0CB, 0x8655},{0xB0CC, 0x8656},{0xB0CD, 0x8657},{0xB0CE, 0x8658},
- {0xB0CF, 0x8659},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5},{0xB0D2, 0x865A},{0xB0D3, 0x8661},{0xB0D4, 0xB3C6},{0xB0D5, 0x8662},{0xB0D6, 0x8663},
- {0xB0D7, 0x8664},{0xB0D8, 0xB3C7},{0xB0D9, 0x8665},{0xB0DA, 0x8666},{0xB0DB, 0x8667},{0xB0DC, 0x8668},{0xB0DD, 0x8669},{0xB0DE, 0x866A},
- {0xB0DF, 0x866B},{0xB0E0, 0xB3C8},{0xB0E1, 0x866C},{0xB0E2, 0x866D},{0xB0E3, 0x866E},{0xB0E4, 0x866F},{0xB0E5, 0xB3C9},{0xB0E6, 0x8670},
- {0xB0E7, 0x8671},{0xB0E8, 0x8672},{0xB0E9, 0x8673},{0xB0EA, 0x8674},{0xB0EB, 0x8675},{0xB0EC, 0x8676},{0xB0ED, 0x8677},{0xB0EE, 0x8678},
- {0xB0EF, 0x8679},{0xB0F0, 0x867A},{0xB0F1, 0x8681},{0xB0F2, 0x8682},{0xB0F3, 0x8683},{0xB0F4, 0x8684},{0xB0F5, 0x8685},{0xB0F6, 0x8686},
- {0xB0F7, 0x8687},{0xB0F8, 0x8688},{0xB0F9, 0x8689},{0xB0FA, 0x868A},{0xB0FB, 0x868B},{0xB0FC, 0x868C},{0xB0FD, 0x868D},{0xB0FE, 0x868E},
- {0xB0FF, 0x868F},{0xB100, 0x8690},{0xB101, 0x8691},{0xB102, 0x8692},{0xB103, 0x8693},{0xB104, 0x8694},{0xB105, 0x8695},{0xB106, 0x8696},
- {0xB107, 0x8697},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10A, 0x8698},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD},{0xB10D, 0x8699},{0xB10E, 0x869A},
- {0xB10F, 0x869B},{0xB110, 0xB3CE},{0xB111, 0x869C},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB114, 0x869D},{0xB115, 0x869E},{0xB116, 0x869F},
- {0xB117, 0x86A0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11A, 0x86A1},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5},{0xB11E, 0x86A2},
- {0xB11F, 0x86A3},{0xB120, 0x86A4},{0xB121, 0x86A5},{0xB122, 0x86A6},{0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB126, 0x86A7},
- {0xB127, 0x86A8},{0xB128, 0xB3D9},{0xB129, 0x86A9},{0xB12A, 0x86AA},{0xB12B, 0x86AB},{0xB12C, 0xB3DA},{0xB12D, 0x86AC},{0xB12E, 0x86AD},
- {0xB12F, 0x86AE},{0xB130, 0x86AF},{0xB131, 0x86B0},{0xB132, 0x86B1},{0xB133, 0x86B2},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB136, 0x86B3},
- {0xB137, 0xB3DD},{0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB13A, 0x86B4},{0xB13B, 0x86B5},{0xB13C, 0x86B6},{0xB13D, 0x86B7},{0xB13E, 0x86B8},
- {0xB13F, 0x86B9},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB142, 0x86BA},{0xB143, 0x86BB},{0xB144, 0xB3E2},{0xB145, 0x86BC},{0xB146, 0x86BD},
- {0xB147, 0x86BE},{0xB148, 0xB3E3},{0xB149, 0x86BF},{0xB14A, 0x86C0},{0xB14B, 0x86C1},{0xB14C, 0x86C2},{0xB14D, 0x86C3},{0xB14E, 0x86C4},
- {0xB14F, 0x86C5},{0xB150, 0xB3E4},{0xB151, 0xB3E5},{0xB152, 0x86C6},{0xB153, 0x86C7},{0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB156, 0x86C8},
- {0xB157, 0x86C9},{0xB158, 0xB3E8},{0xB159, 0x86CA},{0xB15A, 0x86CB},{0xB15B, 0x86CC},{0xB15C, 0xB3E9},{0xB15D, 0x86CD},{0xB15E, 0x86CE},
- {0xB15F, 0x86CF},{0xB160, 0xB3EA},{0xB161, 0x86D0},{0xB162, 0x86D1},{0xB163, 0x86D2},{0xB164, 0x86D3},{0xB165, 0x86D4},{0xB166, 0x86D5},
- {0xB167, 0x86D6},{0xB168, 0x86D7},{0xB169, 0x86D8},{0xB16A, 0x86D9},{0xB16B, 0x86DA},{0xB16C, 0x86DB},{0xB16D, 0x86DC},{0xB16E, 0x86DD},
- {0xB16F, 0x86DE},{0xB170, 0x86DF},{0xB171, 0x86E0},{0xB172, 0x86E1},{0xB173, 0x86E2},{0xB174, 0x86E3},{0xB175, 0x86E4},{0xB176, 0x86E5},
- {0xB177, 0x86E6},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17A, 0x86E7},{0xB17B, 0x86E8},{0xB17C, 0xB3ED},{0xB17D, 0x86E9},{0xB17E, 0x86EA},
- {0xB17F, 0x86EB},{0xB180, 0xB3EE},{0xB181, 0x86EC},{0xB182, 0xB3EF},{0xB183, 0x86ED},{0xB184, 0x86EE},{0xB185, 0x86EF},{0xB186, 0x86F0},
- {0xB187, 0x86F1},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18A, 0x86F2},{0xB18B, 0xB3F2},{0xB18C, 0x86F3},{0xB18D, 0xB3F3},{0xB18E, 0x86F4},
- {0xB18F, 0x86F5},{0xB190, 0x86F6},{0xB191, 0x86F7},{0xB192, 0xB3F4},{0xB193, 0xB3F5},{0xB194, 0xB3F6},{0xB195, 0x86F8},{0xB196, 0x86F9},
- {0xB197, 0x86FA},{0xB198, 0xB3F7},{0xB199, 0x86FB},{0xB19A, 0x86FC},{0xB19B, 0x86FD},{0xB19C, 0xB3F8},{0xB19D, 0x86FE},{0xB19E, 0x8741},
- {0xB19F, 0x8742},{0xB1A0, 0x8743},{0xB1A1, 0x8744},{0xB1A2, 0x8745},{0xB1A3, 0x8746},{0xB1A4, 0x8747},{0xB1A5, 0x8748},{0xB1A6, 0x8749},
- {0xB1A7, 0x874A},{0xB1A8, 0xB3F9},{0xB1A9, 0x874B},{0xB1AA, 0x874C},{0xB1AB, 0x874D},{0xB1AC, 0x874E},{0xB1AD, 0x874F},{0xB1AE, 0x8750},
- {0xB1AF, 0x8751},{0xB1B0, 0x8752},{0xB1B1, 0x8753},{0xB1B2, 0x8754},{0xB1B3, 0x8755},{0xB1B4, 0x8756},{0xB1B5, 0x8757},{0xB1B6, 0x8758},
- {0xB1B7, 0x8759},{0xB1B8, 0x875A},{0xB1B9, 0x8761},{0xB1BA, 0x8762},{0xB1BB, 0x8763},{0xB1BC, 0x8764},{0xB1BD, 0x8765},{0xB1BE, 0x8766},
- {0xB1BF, 0x8767},{0xB1C0, 0x8768},{0xB1C1, 0x8769},{0xB1C2, 0x876A},{0xB1C3, 0x876B},{0xB1C4, 0x876C},{0xB1C5, 0x876D},{0xB1C6, 0x876E},
- {0xB1C7, 0x876F},{0xB1C8, 0x8770},{0xB1C9, 0x8771},{0xB1CA, 0x8772},{0xB1CB, 0x8773},{0xB1CC, 0xB3FA},{0xB1CD, 0x8774},{0xB1CE, 0x8775},
- {0xB1CF, 0x8776},{0xB1D0, 0xB3FB},{0xB1D1, 0x8777},{0xB1D2, 0x8778},{0xB1D3, 0x8779},{0xB1D4, 0xB3FC},{0xB1D5, 0x877A},{0xB1D6, 0x8781},
- {0xB1D7, 0x8782},{0xB1D8, 0x8783},{0xB1D9, 0x8784},{0xB1DA, 0x8785},{0xB1DB, 0x8786},{0xB1DC, 0xB3FD},{0xB1DD, 0xB3FE},{0xB1DE, 0x8787},
- {0xB1DF, 0xB4A1},{0xB1E0, 0x8788},{0xB1E1, 0x8789},{0xB1E2, 0x878A},{0xB1E3, 0x878B},{0xB1E4, 0x878C},{0xB1E5, 0x878D},{0xB1E6, 0x878E},
- {0xB1E7, 0x878F},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EA, 0x8790},{0xB1EB, 0x8791},{0xB1EC, 0xB4A4},{0xB1ED, 0x8792},{0xB1EE, 0x8793},
- {0xB1EF, 0x8794},{0xB1F0, 0xB4A5},{0xB1F1, 0x8795},{0xB1F2, 0x8796},{0xB1F3, 0x8797},{0xB1F4, 0x8798},{0xB1F5, 0x8799},{0xB1F6, 0x879A},
- {0xB1F7, 0x879B},{0xB1F8, 0x879C},{0xB1F9, 0xB4A6},{0xB1FA, 0x879D},{0xB1FB, 0xB4A7},{0xB1FC, 0x879E},{0xB1FD, 0xB4A8},{0xB1FE, 0x879F},
- {0xB1FF, 0x87A0},{0xB200, 0x87A1},{0xB201, 0x87A2},{0xB202, 0x87A3},{0xB203, 0x87A4},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB206, 0x87A5},
- {0xB207, 0x87A6},{0xB208, 0xB4AB},{0xB209, 0x87A7},{0xB20A, 0x87A8},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB20D, 0x87A9},{0xB20E, 0x87AA},
- {0xB20F, 0x87AB},{0xB210, 0x87AC},{0xB211, 0x87AD},{0xB212, 0x87AE},{0xB213, 0x87AF},{0xB214, 0xB4AE},{0xB215, 0xB4AF},{0xB216, 0x87B0},
- {0xB217, 0xB4B0},{0xB218, 0x87B1},{0xB219, 0xB4B1},{0xB21A, 0x87B2},{0xB21B, 0x87B3},{0xB21C, 0x87B4},{0xB21D, 0x87B5},{0xB21E, 0x87B6},
- {0xB21F, 0x87B7},{0xB220, 0xB4B2},{0xB221, 0x87B8},{0xB222, 0x87B9},{0xB223, 0x87BA},{0xB224, 0x87BB},{0xB225, 0x87BC},{0xB226, 0x87BD},
- {0xB227, 0x87BE},{0xB228, 0x87BF},{0xB229, 0x87C0},{0xB22A, 0x87C1},{0xB22B, 0x87C2},{0xB22C, 0x87C3},{0xB22D, 0x87C4},{0xB22E, 0x87C5},
- {0xB22F, 0x87C6},{0xB230, 0x87C7},{0xB231, 0x87C8},{0xB232, 0x87C9},{0xB233, 0x87CA},{0xB234, 0xB4B3},{0xB235, 0x87CB},{0xB236, 0x87CC},
- {0xB237, 0x87CD},{0xB238, 0x87CE},{0xB239, 0x87CF},{0xB23A, 0x87D0},{0xB23B, 0x87D1},{0xB23C, 0xB4B4},{0xB23D, 0x87D2},{0xB23E, 0x87D3},
- {0xB23F, 0x87D4},{0xB240, 0x87D5},{0xB241, 0x87D6},{0xB242, 0x87D7},{0xB243, 0x87D8},{0xB244, 0x87D9},{0xB245, 0x87DA},{0xB246, 0x87DB},
- {0xB247, 0x87DC},{0xB248, 0x87DD},{0xB249, 0x87DE},{0xB24A, 0x87DF},{0xB24B, 0x87E0},{0xB24C, 0x87E1},{0xB24D, 0x87E2},{0xB24E, 0x87E3},
- {0xB24F, 0x87E4},{0xB250, 0x87E5},{0xB251, 0x87E6},{0xB252, 0x87E7},{0xB253, 0x87E8},{0xB254, 0x87E9},{0xB255, 0x87EA},{0xB256, 0x87EB},
- {0xB257, 0x87EC},{0xB258, 0xB4B5},{0xB259, 0x87ED},{0xB25A, 0x87EE},{0xB25B, 0x87EF},{0xB25C, 0xB4B6},{0xB25D, 0x87F0},{0xB25E, 0x87F1},
- {0xB25F, 0x87F2},{0xB260, 0xB4B7},{0xB261, 0x87F3},{0xB262, 0x87F4},{0xB263, 0x87F5},{0xB264, 0x87F6},{0xB265, 0x87F7},{0xB266, 0x87F8},
- {0xB267, 0x87F9},{0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB26A, 0x87FA},{0xB26B, 0x87FB},{0xB26C, 0x87FC},{0xB26D, 0x87FD},{0xB26E, 0x87FE},
- {0xB26F, 0x8841},{0xB270, 0x8842},{0xB271, 0x8843},{0xB272, 0x8844},{0xB273, 0x8845},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB276, 0x8846},
- {0xB277, 0x8847},{0xB278, 0x8848},{0xB279, 0x8849},{0xB27A, 0x884A},{0xB27B, 0x884B},{0xB27C, 0xB4BC},{0xB27D, 0x884C},{0xB27E, 0x884D},
- {0xB27F, 0x884E},{0xB280, 0x884F},{0xB281, 0x8850},{0xB282, 0x8851},{0xB283, 0x8852},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB286, 0x8853},
- {0xB287, 0x8854},{0xB288, 0x8855},{0xB289, 0xB4BF},{0xB28A, 0x8856},{0xB28B, 0x8857},{0xB28C, 0x8858},{0xB28D, 0x8859},{0xB28E, 0x885A},
- {0xB28F, 0x8861},{0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB292, 0x8862},{0xB293, 0x8863},{0xB294, 0xB4C2},{0xB295, 0x8864},{0xB296, 0x8865},
- {0xB297, 0x8866},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB29B, 0x8867},{0xB29C, 0x8868},{0xB29D, 0x8869},{0xB29E, 0x886A},
- {0xB29F, 0x886B},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7},{0xB2A2, 0x886C},{0xB2A3, 0xB4C8},{0xB2A4, 0x886D},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA},
- {0xB2A7, 0x886E},{0xB2A8, 0x886F},{0xB2A9, 0x8870},{0xB2AA, 0xB4CB},{0xB2AB, 0x8871},{0xB2AC, 0xB4CC},{0xB2AD, 0x8872},{0xB2AE, 0x8873},
- {0xB2AF, 0x8874},{0xB2B0, 0xB4CD},{0xB2B1, 0x8875},{0xB2B2, 0x8876},{0xB2B3, 0x8877},{0xB2B4, 0xB4CE},{0xB2B5, 0x8878},{0xB2B6, 0x8879},
- {0xB2B7, 0x887A},{0xB2B8, 0x8881},{0xB2B9, 0x8882},{0xB2BA, 0x8883},{0xB2BB, 0x8884},{0xB2BC, 0x8885},{0xB2BD, 0x8886},{0xB2BE, 0x8887},
- {0xB2BF, 0x8888},{0xB2C0, 0x8889},{0xB2C1, 0x888A},{0xB2C2, 0x888B},{0xB2C3, 0x888C},{0xB2C4, 0x888D},{0xB2C5, 0x888E},{0xB2C6, 0x888F},
- {0xB2C7, 0x8890},{0xB2C8, 0xB4CF},{0xB2C9, 0xB4D0},{0xB2CA, 0x8891},{0xB2CB, 0x8892},{0xB2CC, 0xB4D1},{0xB2CD, 0x8893},{0xB2CE, 0x8894},
- {0xB2CF, 0x8895},{0xB2D0, 0xB4D2},{0xB2D1, 0x8896},{0xB2D2, 0xB4D3},{0xB2D3, 0x8897},{0xB2D4, 0x8898},{0xB2D5, 0x8899},{0xB2D6, 0x889A},
- {0xB2D7, 0x889B},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DA, 0x889C},{0xB2DB, 0xB4D6},{0xB2DC, 0x889D},{0xB2DD, 0xB4D7},{0xB2DE, 0x889E},
- {0xB2DF, 0x889F},{0xB2E0, 0x88A0},{0xB2E1, 0x88A1},{0xB2E2, 0xB4D8},{0xB2E3, 0x88A2},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB},
- {0xB2E7, 0x88A3},{0xB2E8, 0xB4DC},{0xB2E9, 0x88A4},{0xB2EA, 0x88A5},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF},{0xB2EE, 0xB4E0},
- {0xB2EF, 0xB4E1},{0xB2F0, 0x88A6},{0xB2F1, 0x88A7},{0xB2F2, 0x88A8},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F6, 0x88A9},
- {0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7},{0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FC, 0x88AA},{0xB2FD, 0x88AB},{0xB2FE, 0x88AC},
- {0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB302, 0x88AD},{0xB303, 0x88AE},{0xB304, 0xB4ED},{0xB305, 0x88AF},{0xB306, 0x88B0},
- {0xB307, 0x88B1},{0xB308, 0xB4EE},{0xB309, 0x88B2},{0xB30A, 0x88B3},{0xB30B, 0x88B4},{0xB30C, 0x88B5},{0xB30D, 0x88B6},{0xB30E, 0x88B7},
- {0xB30F, 0x88B8},{0xB310, 0xB4EF},{0xB311, 0xB4F0},{0xB312, 0x88B9},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB316, 0x88BA},
- {0xB317, 0x88BB},{0xB318, 0x88BC},{0xB319, 0x88BD},{0xB31A, 0x88BE},{0xB31B, 0x88BF},{0xB31C, 0xB4F4},{0xB31D, 0x88C0},{0xB31E, 0x88C1},
- {0xB31F, 0x88C2},{0xB320, 0x88C3},{0xB321, 0x88C4},{0xB322, 0x88C5},{0xB323, 0x88C6},{0xB324, 0x88C7},{0xB325, 0x88C8},{0xB326, 0x88C9},
- {0xB327, 0x88CA},{0xB328, 0x88CB},{0xB329, 0x88CC},{0xB32A, 0x88CD},{0xB32B, 0x88CE},{0xB32C, 0x88CF},{0xB32D, 0x88D0},{0xB32E, 0x88D1},
- {0xB32F, 0x88D2},{0xB330, 0x88D3},{0xB331, 0x88D4},{0xB332, 0x88D5},{0xB333, 0x88D6},{0xB334, 0x88D7},{0xB335, 0x88D8},{0xB336, 0x88D9},
- {0xB337, 0x88DA},{0xB338, 0x88DB},{0xB339, 0x88DC},{0xB33A, 0x88DD},{0xB33B, 0x88DE},{0xB33C, 0x88DF},{0xB33D, 0x88E0},{0xB33E, 0x88E1},
- {0xB33F, 0x88E2},{0xB340, 0x88E3},{0xB341, 0x88E4},{0xB342, 0x88E5},{0xB343, 0x88E6},{0xB344, 0x88E7},{0xB345, 0x88E8},{0xB346, 0x88E9},
- {0xB347, 0x88EA},{0xB348, 0x88EB},{0xB349, 0x88EC},{0xB34A, 0x88ED},{0xB34B, 0x88EE},{0xB34C, 0x88EF},{0xB34D, 0x88F0},{0xB34E, 0x88F1},
- {0xB34F, 0x88F2},{0xB350, 0x88F3},{0xB351, 0x88F4},{0xB352, 0x88F5},{0xB353, 0x88F6},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7},
- {0xB357, 0x88F7},{0xB358, 0xB4F8},{0xB359, 0x88F8},{0xB35A, 0x88F9},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35D, 0x88FA},{0xB35E, 0xB4FB},
- {0xB35F, 0xB4FC},{0xB360, 0x88FB},{0xB361, 0x88FC},{0xB362, 0x88FD},{0xB363, 0x88FE},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB366, 0x8941},
- {0xB367, 0xB5A1},{0xB368, 0x8942},{0xB369, 0xB5A2},{0xB36A, 0x8943},{0xB36B, 0xB5A3},{0xB36C, 0x8944},{0xB36D, 0x8945},{0xB36E, 0xB5A4},
- {0xB36F, 0x8946},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB372, 0x8947},{0xB373, 0x8948},{0xB374, 0xB5A7},{0xB375, 0x8949},{0xB376, 0x894A},
- {0xB377, 0x894B},{0xB378, 0xB5A8},{0xB379, 0x894C},{0xB37A, 0x894D},{0xB37B, 0x894E},{0xB37C, 0x894F},{0xB37D, 0x8950},{0xB37E, 0x8951},
- {0xB37F, 0x8952},{0xB380, 0xB5A9},{0xB381, 0xB5AA},{0xB382, 0x8953},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB386, 0x8954},
- {0xB387, 0x8955},{0xB388, 0x8956},{0xB389, 0x8957},{0xB38A, 0x8958},{0xB38B, 0x8959},{0xB38C, 0xB5AE},{0xB38D, 0x895A},{0xB38E, 0x8961},
- {0xB38F, 0x8962},{0xB390, 0xB5AF},{0xB391, 0x8963},{0xB392, 0x8964},{0xB393, 0x8965},{0xB394, 0xB5B0},{0xB395, 0x8966},{0xB396, 0x8967},
- {0xB397, 0x8968},{0xB398, 0x8969},{0xB399, 0x896A},{0xB39A, 0x896B},{0xB39B, 0x896C},{0xB39C, 0x896D},{0xB39D, 0x896E},{0xB39E, 0x896F},
- {0xB39F, 0x8970},{0xB3A0, 0xB5B1},{0xB3A1, 0xB5B2},{0xB3A2, 0x8971},{0xB3A3, 0x8972},{0xB3A4, 0x8973},{0xB3A5, 0x8974},{0xB3A6, 0x8975},
- {0xB3A7, 0x8976},{0xB3A8, 0xB5B3},{0xB3A9, 0x8977},{0xB3AA, 0x8978},{0xB3AB, 0x8979},{0xB3AC, 0xB5B4},{0xB3AD, 0x897A},{0xB3AE, 0x8981},
- {0xB3AF, 0x8982},{0xB3B0, 0x8983},{0xB3B1, 0x8984},{0xB3B2, 0x8985},{0xB3B3, 0x8986},{0xB3B4, 0x8987},{0xB3B5, 0x8988},{0xB3B6, 0x8989},
- {0xB3B7, 0x898A},{0xB3B8, 0x898B},{0xB3B9, 0x898C},{0xB3BA, 0x898D},{0xB3BB, 0x898E},{0xB3BC, 0x898F},{0xB3BD, 0x8990},{0xB3BE, 0x8991},
- {0xB3BF, 0x8992},{0xB3C0, 0x8993},{0xB3C1, 0x8994},{0xB3C2, 0x8995},{0xB3C3, 0x8996},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C6, 0x8997},
- {0xB3C7, 0x8998},{0xB3C8, 0xB5B7},{0xB3C9, 0x8999},{0xB3CA, 0x899A},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9},{0xB3CD, 0x899B},{0xB3CE, 0xB5BA},
- {0xB3CF, 0x899C},{0xB3D0, 0xB5BB},{0xB3D1, 0x899D},{0xB3D2, 0x899E},{0xB3D3, 0x899F},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D6, 0x89A0},
- {0xB3D7, 0xB5BE},{0xB3D8, 0x89A1},{0xB3D9, 0xB5BF},{0xB3DA, 0x89A2},{0xB3DB, 0xB5C0},{0xB3DC, 0x89A3},{0xB3DD, 0xB5C1},{0xB3DE, 0x89A4},
- {0xB3DF, 0x89A5},{0xB3E0, 0xB5C2},{0xB3E1, 0x89A6},{0xB3E2, 0x89A7},{0xB3E3, 0x89A8},{0xB3E4, 0xB5C3},{0xB3E5, 0x89A9},{0xB3E6, 0x89AA},
- {0xB3E7, 0x89AB},{0xB3E8, 0xB5C4},{0xB3E9, 0x89AC},{0xB3EA, 0x89AD},{0xB3EB, 0x89AE},{0xB3EC, 0x89AF},{0xB3ED, 0x89B0},{0xB3EE, 0x89B1},
- {0xB3EF, 0x89B2},{0xB3F0, 0x89B3},{0xB3F1, 0x89B4},{0xB3F2, 0x89B5},{0xB3F3, 0x89B6},{0xB3F4, 0x89B7},{0xB3F5, 0x89B8},{0xB3F6, 0x89B9},
- {0xB3F7, 0x89BA},{0xB3F8, 0x89BB},{0xB3F9, 0x89BC},{0xB3FA, 0x89BD},{0xB3FB, 0x89BE},{0xB3FC, 0xB5C5},{0xB3FD, 0x89BF},{0xB3FE, 0x89C0},
- {0xB3FF, 0x89C1},{0xB400, 0x89C2},{0xB401, 0x89C3},{0xB402, 0x89C4},{0xB403, 0x89C5},{0xB404, 0x89C6},{0xB405, 0x89C7},{0xB406, 0x89C8},
- {0xB407, 0x89C9},{0xB408, 0x89CA},{0xB409, 0x89CB},{0xB40A, 0x89CC},{0xB40B, 0x89CD},{0xB40C, 0x89CE},{0xB40D, 0x89CF},{0xB40E, 0x89D0},
- {0xB40F, 0x89D1},{0xB410, 0xB5C6},{0xB411, 0x89D2},{0xB412, 0x89D3},{0xB413, 0x89D4},{0xB414, 0x89D5},{0xB415, 0x89D6},{0xB416, 0x89D7},
- {0xB417, 0x89D8},{0xB418, 0xB5C7},{0xB419, 0x89D9},{0xB41A, 0x89DA},{0xB41B, 0x89DB},{0xB41C, 0xB5C8},{0xB41D, 0x89DC},{0xB41E, 0x89DD},
- {0xB41F, 0x89DE},{0xB420, 0xB5C9},{0xB421, 0x89DF},{0xB422, 0x89E0},{0xB423, 0x89E1},{0xB424, 0x89E2},{0xB425, 0x89E3},{0xB426, 0x89E4},
- {0xB427, 0x89E5},{0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42A, 0x89E6},{0xB42B, 0xB5CC},{0xB42C, 0x89E7},{0xB42D, 0x89E8},{0xB42E, 0x89E9},
- {0xB42F, 0x89EA},{0xB430, 0x89EB},{0xB431, 0x89EC},{0xB432, 0x89ED},{0xB433, 0x89EE},{0xB434, 0xB5CD},{0xB435, 0x89EF},{0xB436, 0x89F0},
- {0xB437, 0x89F1},{0xB438, 0x89F2},{0xB439, 0x89F3},{0xB43A, 0x89F4},{0xB43B, 0x89F5},{0xB43C, 0x89F6},{0xB43D, 0x89F7},{0xB43E, 0x89F8},
- {0xB43F, 0x89F9},{0xB440, 0x89FA},{0xB441, 0x89FB},{0xB442, 0x89FC},{0xB443, 0x89FD},{0xB444, 0x89FE},{0xB445, 0x8A41},{0xB446, 0x8A42},
- {0xB447, 0x8A43},{0xB448, 0x8A44},{0xB449, 0x8A45},{0xB44A, 0x8A46},{0xB44B, 0x8A47},{0xB44C, 0x8A48},{0xB44D, 0x8A49},{0xB44E, 0x8A4A},
- {0xB44F, 0x8A4B},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB452, 0x8A4C},{0xB453, 0x8A4D},{0xB454, 0xB5D0},{0xB455, 0x8A4E},{0xB456, 0x8A4F},
- {0xB457, 0x8A50},{0xB458, 0xB5D1},{0xB459, 0x8A51},{0xB45A, 0x8A52},{0xB45B, 0x8A53},{0xB45C, 0x8A54},{0xB45D, 0x8A55},{0xB45E, 0x8A56},
- {0xB45F, 0x8A57},{0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB462, 0x8A58},{0xB463, 0xB5D4},{0xB464, 0x8A59},{0xB465, 0xB5D5},{0xB466, 0x8A5A},
- {0xB467, 0x8A61},{0xB468, 0x8A62},{0xB469, 0x8A63},{0xB46A, 0x8A64},{0xB46B, 0x8A65},{0xB46C, 0xB5D6},{0xB46D, 0x8A66},{0xB46E, 0x8A67},
- {0xB46F, 0x8A68},{0xB470, 0x8A69},{0xB471, 0x8A6A},{0xB472, 0x8A6B},{0xB473, 0x8A6C},{0xB474, 0x8A6D},{0xB475, 0x8A6E},{0xB476, 0x8A6F},
- {0xB477, 0x8A70},{0xB478, 0x8A71},{0xB479, 0x8A72},{0xB47A, 0x8A73},{0xB47B, 0x8A74},{0xB47C, 0x8A75},{0xB47D, 0x8A76},{0xB47E, 0x8A77},
- {0xB47F, 0x8A78},{0xB480, 0xB5D7},{0xB481, 0x8A79},{0xB482, 0x8A7A},{0xB483, 0x8A81},{0xB484, 0x8A82},{0xB485, 0x8A83},{0xB486, 0x8A84},
- {0xB487, 0x8A85},{0xB488, 0xB5D8},{0xB489, 0x8A86},{0xB48A, 0x8A87},{0xB48B, 0x8A88},{0xB48C, 0x8A89},{0xB48D, 0x8A8A},{0xB48E, 0x8A8B},
- {0xB48F, 0x8A8C},{0xB490, 0x8A8D},{0xB491, 0x8A8E},{0xB492, 0x8A8F},{0xB493, 0x8A90},{0xB494, 0x8A91},{0xB495, 0x8A92},{0xB496, 0x8A93},
- {0xB497, 0x8A94},{0xB498, 0x8A95},{0xB499, 0x8A96},{0xB49A, 0x8A97},{0xB49B, 0x8A98},{0xB49C, 0x8A99},{0xB49D, 0xB5D9},{0xB49E, 0x8A9A},
- {0xB49F, 0x8A9B},{0xB4A0, 0x8A9C},{0xB4A1, 0x8A9D},{0xB4A2, 0x8A9E},{0xB4A3, 0x8A9F},{0xB4A4, 0xB5DA},{0xB4A5, 0x8AA0},{0xB4A6, 0x8AA1},
- {0xB4A7, 0x8AA2},{0xB4A8, 0xB5DB},{0xB4A9, 0x8AA3},{0xB4AA, 0x8AA4},{0xB4AB, 0x8AA5},{0xB4AC, 0xB5DC},{0xB4AD, 0x8AA6},{0xB4AE, 0x8AA7},
- {0xB4AF, 0x8AA8},{0xB4B0, 0x8AA9},{0xB4B1, 0x8AAA},{0xB4B2, 0x8AAB},{0xB4B3, 0x8AAC},{0xB4B4, 0x8AAD},{0xB4B5, 0xB5DD},{0xB4B6, 0x8AAE},
- {0xB4B7, 0xB5DE},{0xB4B8, 0x8AAF},{0xB4B9, 0xB5DF},{0xB4BA, 0x8AB0},{0xB4BB, 0x8AB1},{0xB4BC, 0x8AB2},{0xB4BD, 0x8AB3},{0xB4BE, 0x8AB4},
- {0xB4BF, 0x8AB5},{0xB4C0, 0xB5E0},{0xB4C1, 0x8AB6},{0xB4C2, 0x8AB7},{0xB4C3, 0x8AB8},{0xB4C4, 0xB5E1},{0xB4C5, 0x8AB9},{0xB4C6, 0x8ABA},
- {0xB4C7, 0x8ABB},{0xB4C8, 0xB5E2},{0xB4C9, 0x8ABC},{0xB4CA, 0x8ABD},{0xB4CB, 0x8ABE},{0xB4CC, 0x8ABF},{0xB4CD, 0x8AC0},{0xB4CE, 0x8AC1},
- {0xB4CF, 0x8AC2},{0xB4D0, 0xB5E3},{0xB4D1, 0x8AC3},{0xB4D2, 0x8AC4},{0xB4D3, 0x8AC5},{0xB4D4, 0x8AC6},{0xB4D5, 0xB5E4},{0xB4D6, 0x8AC7},
- {0xB4D7, 0x8AC8},{0xB4D8, 0x8AC9},{0xB4D9, 0x8ACA},{0xB4DA, 0x8ACB},{0xB4DB, 0x8ACC},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4DE, 0x8ACD},
- {0xB4DF, 0x8ACE},{0xB4E0, 0xB5E7},{0xB4E1, 0x8ACF},{0xB4E2, 0x8AD0},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9},{0xB4E5, 0x8AD1},{0xB4E6, 0xB5EA},
- {0xB4E7, 0x8AD2},{0xB4E8, 0x8AD3},{0xB4E9, 0x8AD4},{0xB4EA, 0x8AD5},{0xB4EB, 0x8AD6},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EE, 0x8AD7},
- {0xB4EF, 0xB5ED},{0xB4F0, 0x8AD8},{0xB4F1, 0xB5EE},{0xB4F2, 0x8AD9},{0xB4F3, 0x8ADA},{0xB4F4, 0x8ADB},{0xB4F5, 0x8ADC},{0xB4F6, 0x8ADD},
- {0xB4F7, 0x8ADE},{0xB4F8, 0xB5EF},{0xB4F9, 0x8ADF},{0xB4FA, 0x8AE0},{0xB4FB, 0x8AE1},{0xB4FC, 0x8AE2},{0xB4FD, 0x8AE3},{0xB4FE, 0x8AE4},
- {0xB4FF, 0x8AE5},{0xB500, 0x8AE6},{0xB501, 0x8AE7},{0xB502, 0x8AE8},{0xB503, 0x8AE9},{0xB504, 0x8AEA},{0xB505, 0x8AEB},{0xB506, 0x8AEC},
- {0xB507, 0x8AED},{0xB508, 0x8AEE},{0xB509, 0x8AEF},{0xB50A, 0x8AF0},{0xB50B, 0x8AF1},{0xB50C, 0x8AF2},{0xB50D, 0x8AF3},{0xB50E, 0x8AF4},
- {0xB50F, 0x8AF5},{0xB510, 0x8AF6},{0xB511, 0x8AF7},{0xB512, 0x8AF8},{0xB513, 0x8AF9},{0xB514, 0xB5F0},{0xB515, 0xB5F1},{0xB516, 0x8AFA},
- {0xB517, 0x8AFB},{0xB518, 0xB5F2},{0xB519, 0x8AFC},{0xB51A, 0x8AFD},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB51D, 0x8AFE},{0xB51E, 0x8B41},
- {0xB51F, 0x8B42},{0xB520, 0x8B43},{0xB521, 0x8B44},{0xB522, 0x8B45},{0xB523, 0x8B46},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB526, 0x8B47},
- {0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9},{0xB52A, 0xB5FA},{0xB52B, 0x8B48},{0xB52C, 0x8B49},{0xB52D, 0x8B4A},{0xB52E, 0x8B4B},
- {0xB52F, 0x8B4C},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB532, 0x8B4D},{0xB533, 0x8B4E},{0xB534, 0xB5FD},{0xB535, 0x8B4F},{0xB536, 0x8B50},
- {0xB537, 0x8B51},{0xB538, 0xB5FE},{0xB539, 0x8B52},{0xB53A, 0x8B53},{0xB53B, 0x8B54},{0xB53C, 0x8B55},{0xB53D, 0x8B56},{0xB53E, 0x8B57},
- {0xB53F, 0x8B58},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB542, 0x8B59},{0xB543, 0xB6A3},{0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB546, 0x8B5A},
- {0xB547, 0x8B61},{0xB548, 0x8B62},{0xB549, 0x8B63},{0xB54A, 0x8B64},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB54E, 0x8B65},
- {0xB54F, 0x8B66},{0xB550, 0xB6A9},{0xB551, 0x8B67},{0xB552, 0x8B68},{0xB553, 0x8B69},{0xB554, 0xB6AA},{0xB555, 0x8B6A},{0xB556, 0x8B6B},
- {0xB557, 0x8B6C},{0xB558, 0x8B6D},{0xB559, 0x8B6E},{0xB55A, 0x8B6F},{0xB55B, 0x8B70},{0xB55C, 0xB6AB},{0xB55D, 0xB6AC},{0xB55E, 0x8B71},
- {0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB562, 0x8B72},{0xB563, 0x8B73},{0xB564, 0x8B74},{0xB565, 0x8B75},{0xB566, 0x8B76},
- {0xB567, 0x8B77},{0xB568, 0x8B78},{0xB569, 0x8B79},{0xB56A, 0x8B7A},{0xB56B, 0x8B81},{0xB56C, 0x8B82},{0xB56D, 0x8B83},{0xB56E, 0x8B84},
- {0xB56F, 0x8B85},{0xB570, 0x8B86},{0xB571, 0x8B87},{0xB572, 0x8B88},{0xB573, 0x8B89},{0xB574, 0x8B8A},{0xB575, 0x8B8B},{0xB576, 0x8B8C},
- {0xB577, 0x8B8D},{0xB578, 0x8B8E},{0xB579, 0x8B8F},{0xB57A, 0x8B90},{0xB57B, 0x8B91},{0xB57C, 0x8B92},{0xB57D, 0x8B93},{0xB57E, 0x8B94},
- {0xB57F, 0x8B95},{0xB580, 0x8B96},{0xB581, 0x8B97},{0xB582, 0x8B98},{0xB583, 0x8B99},{0xB584, 0x8B9A},{0xB585, 0x8B9B},{0xB586, 0x8B9C},
- {0xB587, 0x8B9D},{0xB588, 0x8B9E},{0xB589, 0x8B9F},{0xB58A, 0x8BA0},{0xB58B, 0x8BA1},{0xB58C, 0x8BA2},{0xB58D, 0x8BA3},{0xB58E, 0x8BA4},
- {0xB58F, 0x8BA5},{0xB590, 0x8BA6},{0xB591, 0x8BA7},{0xB592, 0x8BA8},{0xB593, 0x8BA9},{0xB594, 0x8BAA},{0xB595, 0x8BAB},{0xB596, 0x8BAC},
- {0xB597, 0x8BAD},{0xB598, 0x8BAE},{0xB599, 0x8BAF},{0xB59A, 0x8BB0},{0xB59B, 0x8BB1},{0xB59C, 0x8BB2},{0xB59D, 0x8BB3},{0xB59E, 0x8BB4},
- {0xB59F, 0x8BB5},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A2, 0x8BB6},{0xB5A3, 0x8BB7},{0xB5A4, 0xB6B2},{0xB5A5, 0x8BB8},{0xB5A6, 0x8BB9},
- {0xB5A7, 0x8BBA},{0xB5A8, 0xB6B3},{0xB5A9, 0x8BBB},{0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5AC, 0x8BBC},{0xB5AD, 0x8BBD},{0xB5AE, 0x8BBE},
- {0xB5AF, 0x8BBF},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B2, 0x8BC0},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5B6, 0x8BC1},
- {0xB5B7, 0x8BC2},{0xB5B8, 0x8BC3},{0xB5B9, 0x8BC4},{0xB5BA, 0x8BC5},{0xB5BB, 0xB6BB},{0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5BE, 0x8BC6},
- {0xB5BF, 0x8BC7},{0xB5C0, 0xB6BE},{0xB5C1, 0x8BC8},{0xB5C2, 0x8BC9},{0xB5C3, 0x8BCA},{0xB5C4, 0xB6BF},{0xB5C5, 0x8BCB},{0xB5C6, 0x8BCC},
- {0xB5C7, 0x8BCD},{0xB5C8, 0x8BCE},{0xB5C9, 0x8BCF},{0xB5CA, 0x8BD0},{0xB5CB, 0x8BD1},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CE, 0x8BD2},
- {0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3},{0xB5D1, 0xB6C4},{0xB5D2, 0x8BD3},{0xB5D3, 0x8BD4},{0xB5D4, 0x8BD5},{0xB5D5, 0x8BD6},{0xB5D6, 0x8BD7},
- {0xB5D7, 0x8BD8},{0xB5D8, 0xB6C5},{0xB5D9, 0x8BD9},{0xB5DA, 0x8BDA},{0xB5DB, 0x8BDB},{0xB5DC, 0x8BDC},{0xB5DD, 0x8BDD},{0xB5DE, 0x8BDE},
- {0xB5DF, 0x8BDF},{0xB5E0, 0x8BE0},{0xB5E1, 0x8BE1},{0xB5E2, 0x8BE2},{0xB5E3, 0x8BE3},{0xB5E4, 0x8BE4},{0xB5E5, 0x8BE5},{0xB5E6, 0x8BE6},
- {0xB5E7, 0x8BE7},{0xB5E8, 0x8BE8},{0xB5E9, 0x8BE9},{0xB5EA, 0x8BEA},{0xB5EB, 0x8BEB},{0xB5EC, 0xB6C6},{0xB5ED, 0x8BEC},{0xB5EE, 0x8BED},
- {0xB5EF, 0x8BEE},{0xB5F0, 0x8BEF},{0xB5F1, 0x8BF0},{0xB5F2, 0x8BF1},{0xB5F3, 0x8BF2},{0xB5F4, 0x8BF3},{0xB5F5, 0x8BF4},{0xB5F6, 0x8BF5},
- {0xB5F7, 0x8BF6},{0xB5F8, 0x8BF7},{0xB5F9, 0x8BF8},{0xB5FA, 0x8BF9},{0xB5FB, 0x8BFA},{0xB5FC, 0x8BFB},{0xB5FD, 0x8BFC},{0xB5FE, 0x8BFD},
- {0xB5FF, 0x8BFE},{0xB600, 0x8C41},{0xB601, 0x8C42},{0xB602, 0x8C43},{0xB603, 0x8C44},{0xB604, 0x8C45},{0xB605, 0x8C46},{0xB606, 0x8C47},
- {0xB607, 0x8C48},{0xB608, 0x8C49},{0xB609, 0x8C4A},{0xB60A, 0x8C4B},{0xB60B, 0x8C4C},{0xB60C, 0x8C4D},{0xB60D, 0x8C4E},{0xB60E, 0x8C4F},
- {0xB60F, 0x8C50},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB612, 0x8C51},{0xB613, 0x8C52},{0xB614, 0xB6C9},{0xB615, 0x8C53},{0xB616, 0x8C54},
- {0xB617, 0x8C55},{0xB618, 0xB6CA},{0xB619, 0x8C56},{0xB61A, 0x8C57},{0xB61B, 0x8C58},{0xB61C, 0x8C59},{0xB61D, 0x8C5A},{0xB61E, 0x8C61},
- {0xB61F, 0x8C62},{0xB620, 0x8C63},{0xB621, 0x8C64},{0xB622, 0x8C65},{0xB623, 0x8C66},{0xB624, 0x8C67},{0xB625, 0xB6CB},{0xB626, 0x8C68},
- {0xB627, 0x8C69},{0xB628, 0x8C6A},{0xB629, 0x8C6B},{0xB62A, 0x8C6C},{0xB62B, 0x8C6D},{0xB62C, 0xB6CC},{0xB62D, 0x8C6E},{0xB62E, 0x8C6F},
- {0xB62F, 0x8C70},{0xB630, 0x8C71},{0xB631, 0x8C72},{0xB632, 0x8C73},{0xB633, 0x8C74},{0xB634, 0xB6CD},{0xB635, 0x8C75},{0xB636, 0x8C76},
- {0xB637, 0x8C77},{0xB638, 0x8C78},{0xB639, 0x8C79},{0xB63A, 0x8C7A},{0xB63B, 0x8C81},{0xB63C, 0x8C82},{0xB63D, 0x8C83},{0xB63E, 0x8C84},
- {0xB63F, 0x8C85},{0xB640, 0x8C86},{0xB641, 0x8C87},{0xB642, 0x8C88},{0xB643, 0x8C89},{0xB644, 0x8C8A},{0xB645, 0x8C8B},{0xB646, 0x8C8C},
- {0xB647, 0x8C8D},{0xB648, 0xB6CE},{0xB649, 0x8C8E},{0xB64A, 0x8C8F},{0xB64B, 0x8C90},{0xB64C, 0x8C91},{0xB64D, 0x8C92},{0xB64E, 0x8C93},
- {0xB64F, 0x8C94},{0xB650, 0x8C95},{0xB651, 0x8C96},{0xB652, 0x8C97},{0xB653, 0x8C98},{0xB654, 0x8C99},{0xB655, 0x8C9A},{0xB656, 0x8C9B},
- {0xB657, 0x8C9C},{0xB658, 0x8C9D},{0xB659, 0x8C9E},{0xB65A, 0x8C9F},{0xB65B, 0x8CA0},{0xB65C, 0x8CA1},{0xB65D, 0x8CA2},{0xB65E, 0x8CA3},
- {0xB65F, 0x8CA4},{0xB660, 0x8CA5},{0xB661, 0x8CA6},{0xB662, 0x8CA7},{0xB663, 0x8CA8},{0xB664, 0xB6CF},{0xB665, 0x8CA9},{0xB666, 0x8CAA},
- {0xB667, 0x8CAB},{0xB668, 0xB6D0},{0xB669, 0x8CAC},{0xB66A, 0x8CAD},{0xB66B, 0x8CAE},{0xB66C, 0x8CAF},{0xB66D, 0x8CB0},{0xB66E, 0x8CB1},
- {0xB66F, 0x8CB2},{0xB670, 0x8CB3},{0xB671, 0x8CB4},{0xB672, 0x8CB5},{0xB673, 0x8CB6},{0xB674, 0x8CB7},{0xB675, 0x8CB8},{0xB676, 0x8CB9},
- {0xB677, 0x8CBA},{0xB678, 0x8CBB},{0xB679, 0x8CBC},{0xB67A, 0x8CBD},{0xB67B, 0x8CBE},{0xB67C, 0x8CBF},{0xB67D, 0x8CC0},{0xB67E, 0x8CC1},
- {0xB67F, 0x8CC2},{0xB680, 0x8CC3},{0xB681, 0x8CC4},{0xB682, 0x8CC5},{0xB683, 0x8CC6},{0xB684, 0x8CC7},{0xB685, 0x8CC8},{0xB686, 0x8CC9},
- {0xB687, 0x8CCA},{0xB688, 0x8CCB},{0xB689, 0x8CCC},{0xB68A, 0x8CCD},{0xB68B, 0x8CCE},{0xB68C, 0x8CCF},{0xB68D, 0x8CD0},{0xB68E, 0x8CD1},
- {0xB68F, 0x8CD2},{0xB690, 0x8CD3},{0xB691, 0x8CD4},{0xB692, 0x8CD5},{0xB693, 0x8CD6},{0xB694, 0x8CD7},{0xB695, 0x8CD8},{0xB696, 0x8CD9},
- {0xB697, 0x8CDA},{0xB698, 0x8CDB},{0xB699, 0x8CDC},{0xB69A, 0x8CDD},{0xB69B, 0x8CDE},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB69E, 0x8CDF},
- {0xB69F, 0x8CE0},{0xB6A0, 0xB6D3},{0xB6A1, 0x8CE1},{0xB6A2, 0x8CE2},{0xB6A3, 0x8CE3},{0xB6A4, 0xB6D4},{0xB6A5, 0x8CE4},{0xB6A6, 0x8CE5},
- {0xB6A7, 0x8CE6},{0xB6A8, 0x8CE7},{0xB6A9, 0x8CE8},{0xB6AA, 0x8CE9},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6AD, 0x8CEA},{0xB6AE, 0x8CEB},
- {0xB6AF, 0x8CEC},{0xB6B0, 0x8CED},{0xB6B1, 0xB6D7},{0xB6B2, 0x8CEE},{0xB6B3, 0x8CEF},{0xB6B4, 0x8CF0},{0xB6B5, 0x8CF1},{0xB6B6, 0x8CF2},
- {0xB6B7, 0x8CF3},{0xB6B8, 0x8CF4},{0xB6B9, 0x8CF5},{0xB6BA, 0x8CF6},{0xB6BB, 0x8CF7},{0xB6BC, 0x8CF8},{0xB6BD, 0x8CF9},{0xB6BE, 0x8CFA},
- {0xB6BF, 0x8CFB},{0xB6C0, 0x8CFC},{0xB6C1, 0x8CFD},{0xB6C2, 0x8CFE},{0xB6C3, 0x8D41},{0xB6C4, 0x8D42},{0xB6C5, 0x8D43},{0xB6C6, 0x8D44},
- {0xB6C7, 0x8D45},{0xB6C8, 0x8D46},{0xB6C9, 0x8D47},{0xB6CA, 0x8D48},{0xB6CB, 0x8D49},{0xB6CC, 0x8D4A},{0xB6CD, 0x8D4B},{0xB6CE, 0x8D4C},
- {0xB6CF, 0x8D4D},{0xB6D0, 0x8D4E},{0xB6D1, 0x8D4F},{0xB6D2, 0x8D50},{0xB6D3, 0x8D51},{0xB6D4, 0xB6D8},{0xB6D5, 0x8D52},{0xB6D6, 0x8D53},
- {0xB6D7, 0x8D54},{0xB6D8, 0x8D55},{0xB6D9, 0x8D56},{0xB6DA, 0x8D57},{0xB6DB, 0x8D58},{0xB6DC, 0x8D59},{0xB6DD, 0x8D5A},{0xB6DE, 0x8D61},
- {0xB6DF, 0x8D62},{0xB6E0, 0x8D63},{0xB6E1, 0x8D64},{0xB6E2, 0x8D65},{0xB6E3, 0x8D66},{0xB6E4, 0x8D67},{0xB6E5, 0x8D68},{0xB6E6, 0x8D69},
- {0xB6E7, 0x8D6A},{0xB6E8, 0x8D6B},{0xB6E9, 0x8D6C},{0xB6EA, 0x8D6D},{0xB6EB, 0x8D6E},{0xB6EC, 0x8D6F},{0xB6ED, 0x8D70},{0xB6EE, 0x8D71},
- {0xB6EF, 0x8D72},{0xB6F0, 0xB6D9},{0xB6F1, 0x8D73},{0xB6F2, 0x8D74},{0xB6F3, 0x8D75},{0xB6F4, 0xB6DA},{0xB6F5, 0x8D76},{0xB6F6, 0x8D77},
- {0xB6F7, 0x8D78},{0xB6F8, 0xB6DB},{0xB6F9, 0x8D79},{0xB6FA, 0x8D7A},{0xB6FB, 0x8D81},{0xB6FC, 0x8D82},{0xB6FD, 0x8D83},{0xB6FE, 0x8D84},
- {0xB6FF, 0x8D85},{0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB702, 0x8D86},{0xB703, 0x8D87},{0xB704, 0x8D88},{0xB705, 0xB6DE},{0xB706, 0x8D89},
- {0xB707, 0x8D8A},{0xB708, 0x8D8B},{0xB709, 0x8D8C},{0xB70A, 0x8D8D},{0xB70B, 0x8D8E},{0xB70C, 0x8D8F},{0xB70D, 0x8D90},{0xB70E, 0x8D91},
- {0xB70F, 0x8D92},{0xB710, 0x8D93},{0xB711, 0x8D94},{0xB712, 0x8D95},{0xB713, 0x8D96},{0xB714, 0x8D97},{0xB715, 0x8D98},{0xB716, 0x8D99},
- {0xB717, 0x8D9A},{0xB718, 0x8D9B},{0xB719, 0x8D9C},{0xB71A, 0x8D9D},{0xB71B, 0x8D9E},{0xB71C, 0x8D9F},{0xB71D, 0x8DA0},{0xB71E, 0x8DA1},
- {0xB71F, 0x8DA2},{0xB720, 0x8DA3},{0xB721, 0x8DA4},{0xB722, 0x8DA5},{0xB723, 0x8DA6},{0xB724, 0x8DA7},{0xB725, 0x8DA8},{0xB726, 0x8DA9},
- {0xB727, 0x8DAA},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72A, 0x8DAB},{0xB72B, 0x8DAC},{0xB72C, 0xB6E1},{0xB72D, 0x8DAD},{0xB72E, 0x8DAE},
- {0xB72F, 0xB6E2},{0xB730, 0xB6E3},{0xB731, 0x8DAF},{0xB732, 0x8DB0},{0xB733, 0x8DB1},{0xB734, 0x8DB2},{0xB735, 0x8DB3},{0xB736, 0x8DB4},
- {0xB737, 0x8DB5},{0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73A, 0x8DB6},{0xB73B, 0xB6E6},{0xB73C, 0x8DB7},{0xB73D, 0x8DB8},{0xB73E, 0x8DB9},
- {0xB73F, 0x8DBA},{0xB740, 0x8DBB},{0xB741, 0x8DBC},{0xB742, 0x8DBD},{0xB743, 0x8DBE},{0xB744, 0xB6E7},{0xB745, 0x8DBF},{0xB746, 0x8DC0},
- {0xB747, 0x8DC1},{0xB748, 0xB6E8},{0xB749, 0x8DC2},{0xB74A, 0x8DC3},{0xB74B, 0x8DC4},{0xB74C, 0xB6E9},{0xB74D, 0x8DC5},{0xB74E, 0x8DC6},
- {0xB74F, 0x8DC7},{0xB750, 0x8DC8},{0xB751, 0x8DC9},{0xB752, 0x8DCA},{0xB753, 0x8DCB},{0xB754, 0xB6EA},{0xB755, 0xB6EB},{0xB756, 0x8DCC},
- {0xB757, 0x8DCD},{0xB758, 0x8DCE},{0xB759, 0x8DCF},{0xB75A, 0x8DD0},{0xB75B, 0x8DD1},{0xB75C, 0x8DD2},{0xB75D, 0x8DD3},{0xB75E, 0x8DD4},
- {0xB75F, 0x8DD5},{0xB760, 0xB6EC},{0xB761, 0x8DD6},{0xB762, 0x8DD7},{0xB763, 0x8DD8},{0xB764, 0xB6ED},{0xB765, 0x8DD9},{0xB766, 0x8DDA},
- {0xB767, 0x8DDB},{0xB768, 0xB6EE},{0xB769, 0x8DDC},{0xB76A, 0x8DDD},{0xB76B, 0x8DDE},{0xB76C, 0x8DDF},{0xB76D, 0x8DE0},{0xB76E, 0x8DE1},
- {0xB76F, 0x8DE2},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB772, 0x8DE3},{0xB773, 0xB6F1},{0xB774, 0x8DE4},{0xB775, 0xB6F2},{0xB776, 0x8DE5},
- {0xB777, 0x8DE6},{0xB778, 0x8DE7},{0xB779, 0x8DE8},{0xB77A, 0x8DE9},{0xB77B, 0x8DEA},{0xB77C, 0xB6F3},{0xB77D, 0xB6F4},{0xB77E, 0x8DEB},
- {0xB77F, 0x8DEC},{0xB780, 0xB6F5},{0xB781, 0x8DED},{0xB782, 0x8DEE},{0xB783, 0x8DEF},{0xB784, 0xB6F6},{0xB785, 0x8DF0},{0xB786, 0x8DF1},
- {0xB787, 0x8DF2},{0xB788, 0x8DF3},{0xB789, 0x8DF4},{0xB78A, 0x8DF5},{0xB78B, 0x8DF6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78E, 0x8DF7},
- {0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB},{0xB792, 0xB6FC},{0xB793, 0x8DF8},{0xB794, 0x8DF9},{0xB795, 0x8DFA},{0xB796, 0xB6FD},
- {0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79A, 0x8DFB},{0xB79B, 0x8DFC},{0xB79C, 0xB7A3},{0xB79D, 0x8DFD},{0xB79E, 0x8DFE},
- {0xB79F, 0x8E41},{0xB7A0, 0xB7A4},{0xB7A1, 0x8E42},{0xB7A2, 0x8E43},{0xB7A3, 0x8E44},{0xB7A4, 0x8E45},{0xB7A5, 0x8E46},{0xB7A6, 0x8E47},
- {0xB7A7, 0x8E48},{0xB7A8, 0xB7A5},{0xB7A9, 0xB7A6},{0xB7AA, 0x8E49},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7AE, 0x8E4A},
- {0xB7AF, 0x8E4B},{0xB7B0, 0x8E4C},{0xB7B1, 0x8E4D},{0xB7B2, 0x8E4E},{0xB7B3, 0x8E4F},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B6, 0x8E50},
- {0xB7B7, 0x8E51},{0xB7B8, 0xB7AC},{0xB7B9, 0x8E52},{0xB7BA, 0x8E53},{0xB7BB, 0x8E54},{0xB7BC, 0x8E55},{0xB7BD, 0x8E56},{0xB7BE, 0x8E57},
- {0xB7BF, 0x8E58},{0xB7C0, 0x8E59},{0xB7C1, 0x8E5A},{0xB7C2, 0x8E61},{0xB7C3, 0x8E62},{0xB7C4, 0x8E63},{0xB7C5, 0x8E64},{0xB7C6, 0x8E65},
- {0xB7C7, 0xB7AD},{0xB7C8, 0x8E66},{0xB7C9, 0xB7AE},{0xB7CA, 0x8E67},{0xB7CB, 0x8E68},{0xB7CC, 0x8E69},{0xB7CD, 0x8E6A},{0xB7CE, 0x8E6B},
- {0xB7CF, 0x8E6C},{0xB7D0, 0x8E6D},{0xB7D1, 0x8E6E},{0xB7D2, 0x8E6F},{0xB7D3, 0x8E70},{0xB7D4, 0x8E71},{0xB7D5, 0x8E72},{0xB7D6, 0x8E73},
- {0xB7D7, 0x8E74},{0xB7D8, 0x8E75},{0xB7D9, 0x8E76},{0xB7DA, 0x8E77},{0xB7DB, 0x8E78},{0xB7DC, 0x8E79},{0xB7DD, 0x8E7A},{0xB7DE, 0x8E81},
- {0xB7DF, 0x8E82},{0xB7E0, 0x8E83},{0xB7E1, 0x8E84},{0xB7E2, 0x8E85},{0xB7E3, 0x8E86},{0xB7E4, 0x8E87},{0xB7E5, 0x8E88},{0xB7E6, 0x8E89},
- {0xB7E7, 0x8E8A},{0xB7E8, 0x8E8B},{0xB7E9, 0x8E8C},{0xB7EA, 0x8E8D},{0xB7EB, 0x8E8E},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7EE, 0x8E8F},
- {0xB7EF, 0x8E90},{0xB7F0, 0xB7B1},{0xB7F1, 0x8E91},{0xB7F2, 0x8E92},{0xB7F3, 0x8E93},{0xB7F4, 0xB7B2},{0xB7F5, 0x8E94},{0xB7F6, 0x8E95},
- {0xB7F7, 0x8E96},{0xB7F8, 0x8E97},{0xB7F9, 0x8E98},{0xB7FA, 0x8E99},{0xB7FB, 0x8E9A},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FE, 0x8E9B},
- {0xB7FF, 0xB7B5},{0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB802, 0x8E9C},{0xB803, 0x8E9D},{0xB804, 0x8E9E},{0xB805, 0x8E9F},{0xB806, 0x8EA0},
- {0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80A, 0x8EA1},{0xB80B, 0x8EA2},{0xB80C, 0xB7BB},{0xB80D, 0x8EA3},{0xB80E, 0x8EA4},
- {0xB80F, 0x8EA5},{0xB810, 0xB7BC},{0xB811, 0x8EA6},{0xB812, 0x8EA7},{0xB813, 0x8EA8},{0xB814, 0x8EA9},{0xB815, 0x8EAA},{0xB816, 0x8EAB},
- {0xB817, 0x8EAC},{0xB818, 0xB7BD},{0xB819, 0xB7BE},{0xB81A, 0x8EAD},{0xB81B, 0xB7BF},{0xB81C, 0x8EAE},{0xB81D, 0xB7C0},{0xB81E, 0x8EAF},
- {0xB81F, 0x8EB0},{0xB820, 0x8EB1},{0xB821, 0x8EB2},{0xB822, 0x8EB3},{0xB823, 0x8EB4},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB826, 0x8EB5},
- {0xB827, 0x8EB6},{0xB828, 0xB7C3},{0xB829, 0x8EB7},{0xB82A, 0x8EB8},{0xB82B, 0x8EB9},{0xB82C, 0xB7C4},{0xB82D, 0x8EBA},{0xB82E, 0x8EBB},
- {0xB82F, 0x8EBC},{0xB830, 0x8EBD},{0xB831, 0x8EBE},{0xB832, 0x8EBF},{0xB833, 0x8EC0},{0xB834, 0xB7C5},{0xB835, 0xB7C6},{0xB836, 0x8EC1},
- {0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB83A, 0x8EC2},{0xB83B, 0x8EC3},{0xB83C, 0x8EC4},{0xB83D, 0x8EC5},{0xB83E, 0x8EC6},
- {0xB83F, 0x8EC7},{0xB840, 0xB7CA},{0xB841, 0x8EC8},{0xB842, 0x8EC9},{0xB843, 0x8ECA},{0xB844, 0xB7CB},{0xB845, 0x8ECB},{0xB846, 0x8ECC},
- {0xB847, 0x8ECD},{0xB848, 0x8ECE},{0xB849, 0x8ECF},{0xB84A, 0x8ED0},{0xB84B, 0x8ED1},{0xB84C, 0x8ED2},{0xB84D, 0x8ED3},{0xB84E, 0x8ED4},
- {0xB84F, 0x8ED5},{0xB850, 0x8ED6},{0xB851, 0xB7CC},{0xB852, 0x8ED7},{0xB853, 0xB7CD},{0xB854, 0x8ED8},{0xB855, 0x8ED9},{0xB856, 0x8EDA},
- {0xB857, 0x8EDB},{0xB858, 0x8EDC},{0xB859, 0x8EDD},{0xB85A, 0x8EDE},{0xB85B, 0x8EDF},{0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB85E, 0x8EE0},
- {0xB85F, 0x8EE1},{0xB860, 0xB7D0},{0xB861, 0x8EE2},{0xB862, 0x8EE3},{0xB863, 0x8EE4},{0xB864, 0xB7D1},{0xB865, 0x8EE5},{0xB866, 0x8EE6},
- {0xB867, 0x8EE7},{0xB868, 0x8EE8},{0xB869, 0x8EE9},{0xB86A, 0x8EEA},{0xB86B, 0x8EEB},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86E, 0x8EEC},
- {0xB86F, 0xB7D4},{0xB870, 0x8EED},{0xB871, 0xB7D5},{0xB872, 0x8EEE},{0xB873, 0x8EEF},{0xB874, 0x8EF0},{0xB875, 0x8EF1},{0xB876, 0x8EF2},
- {0xB877, 0x8EF3},{0xB878, 0xB7D6},{0xB879, 0x8EF4},{0xB87A, 0x8EF5},{0xB87B, 0x8EF6},{0xB87C, 0xB7D7},{0xB87D, 0x8EF7},{0xB87E, 0x8EF8},
- {0xB87F, 0x8EF9},{0xB880, 0x8EFA},{0xB881, 0x8EFB},{0xB882, 0x8EFC},{0xB883, 0x8EFD},{0xB884, 0x8EFE},{0xB885, 0x8F41},{0xB886, 0x8F42},
- {0xB887, 0x8F43},{0xB888, 0x8F44},{0xB889, 0x8F45},{0xB88A, 0x8F46},{0xB88B, 0x8F47},{0xB88C, 0x8F48},{0xB88D, 0xB7D8},{0xB88E, 0x8F49},
- {0xB88F, 0x8F4A},{0xB890, 0x8F4B},{0xB891, 0x8F4C},{0xB892, 0x8F4D},{0xB893, 0x8F4E},{0xB894, 0x8F4F},{0xB895, 0x8F50},{0xB896, 0x8F51},
- {0xB897, 0x8F52},{0xB898, 0x8F53},{0xB899, 0x8F54},{0xB89A, 0x8F55},{0xB89B, 0x8F56},{0xB89C, 0x8F57},{0xB89D, 0x8F58},{0xB89E, 0x8F59},
- {0xB89F, 0x8F5A},{0xB8A0, 0x8F61},{0xB8A1, 0x8F62},{0xB8A2, 0x8F63},{0xB8A3, 0x8F64},{0xB8A4, 0x8F65},{0xB8A5, 0x8F66},{0xB8A6, 0x8F67},
- {0xB8A7, 0x8F68},{0xB8A8, 0xB7D9},{0xB8A9, 0x8F69},{0xB8AA, 0x8F6A},{0xB8AB, 0x8F6B},{0xB8AC, 0x8F6C},{0xB8AD, 0x8F6D},{0xB8AE, 0x8F6E},
- {0xB8AF, 0x8F6F},{0xB8B0, 0xB7DA},{0xB8B1, 0x8F70},{0xB8B2, 0x8F71},{0xB8B3, 0x8F72},{0xB8B4, 0xB7DB},{0xB8B5, 0x8F73},{0xB8B6, 0x8F74},
- {0xB8B7, 0x8F75},{0xB8B8, 0xB7DC},{0xB8B9, 0x8F76},{0xB8BA, 0x8F77},{0xB8BB, 0x8F78},{0xB8BC, 0x8F79},{0xB8BD, 0x8F7A},{0xB8BE, 0x8F81},
- {0xB8BF, 0x8F82},{0xB8C0, 0xB7DD},{0xB8C1, 0xB7DE},{0xB8C2, 0x8F83},{0xB8C3, 0xB7DF},{0xB8C4, 0x8F84},{0xB8C5, 0xB7E0},{0xB8C6, 0x8F85},
- {0xB8C7, 0x8F86},{0xB8C8, 0x8F87},{0xB8C9, 0x8F88},{0xB8CA, 0x8F89},{0xB8CB, 0x8F8A},{0xB8CC, 0xB7E1},{0xB8CD, 0x8F8B},{0xB8CE, 0x8F8C},
- {0xB8CF, 0x8F8D},{0xB8D0, 0xB7E2},{0xB8D1, 0x8F8E},{0xB8D2, 0x8F8F},{0xB8D3, 0x8F90},{0xB8D4, 0xB7E3},{0xB8D5, 0x8F91},{0xB8D6, 0x8F92},
- {0xB8D7, 0x8F93},{0xB8D8, 0x8F94},{0xB8D9, 0x8F95},{0xB8DA, 0x8F96},{0xB8DB, 0x8F97},{0xB8DC, 0x8F98},{0xB8DD, 0xB7E4},{0xB8DE, 0x8F99},
- {0xB8DF, 0xB7E5},{0xB8E0, 0x8F9A},{0xB8E1, 0xB7E6},{0xB8E2, 0x8F9B},{0xB8E3, 0x8F9C},{0xB8E4, 0x8F9D},{0xB8E5, 0x8F9E},{0xB8E6, 0x8F9F},
- {0xB8E7, 0x8FA0},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EA, 0x8FA1},{0xB8EB, 0x8FA2},{0xB8EC, 0xB7E9},{0xB8ED, 0x8FA3},{0xB8EE, 0x8FA4},
- {0xB8EF, 0x8FA5},{0xB8F0, 0xB7EA},{0xB8F1, 0x8FA6},{0xB8F2, 0x8FA7},{0xB8F3, 0x8FA8},{0xB8F4, 0x8FA9},{0xB8F5, 0x8FAA},{0xB8F6, 0x8FAB},
- {0xB8F7, 0x8FAC},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FA, 0x8FAD},{0xB8FB, 0xB7ED},{0xB8FC, 0x8FAE},{0xB8FD, 0xB7EE},{0xB8FE, 0x8FAF},
- {0xB8FF, 0x8FB0},{0xB900, 0x8FB1},{0xB901, 0x8FB2},{0xB902, 0x8FB3},{0xB903, 0x8FB4},{0xB904, 0xB7EF},{0xB905, 0x8FB5},{0xB906, 0x8FB6},
- {0xB907, 0x8FB7},{0xB908, 0x8FB8},{0xB909, 0x8FB9},{0xB90A, 0x8FBA},{0xB90B, 0x8FBB},{0xB90C, 0x8FBC},{0xB90D, 0x8FBD},{0xB90E, 0x8FBE},
- {0xB90F, 0x8FBF},{0xB910, 0x8FC0},{0xB911, 0x8FC1},{0xB912, 0x8FC2},{0xB913, 0x8FC3},{0xB914, 0x8FC4},{0xB915, 0x8FC5},{0xB916, 0x8FC6},
- {0xB917, 0x8FC7},{0xB918, 0xB7F0},{0xB919, 0x8FC8},{0xB91A, 0x8FC9},{0xB91B, 0x8FCA},{0xB91C, 0x8FCB},{0xB91D, 0x8FCC},{0xB91E, 0x8FCD},
- {0xB91F, 0x8FCE},{0xB920, 0xB7F1},{0xB921, 0x8FCF},{0xB922, 0x8FD0},{0xB923, 0x8FD1},{0xB924, 0x8FD2},{0xB925, 0x8FD3},{0xB926, 0x8FD4},
- {0xB927, 0x8FD5},{0xB928, 0x8FD6},{0xB929, 0x8FD7},{0xB92A, 0x8FD8},{0xB92B, 0x8FD9},{0xB92C, 0x8FDA},{0xB92D, 0x8FDB},{0xB92E, 0x8FDC},
- {0xB92F, 0x8FDD},{0xB930, 0x8FDE},{0xB931, 0x8FDF},{0xB932, 0x8FE0},{0xB933, 0x8FE1},{0xB934, 0x8FE2},{0xB935, 0x8FE3},{0xB936, 0x8FE4},
- {0xB937, 0x8FE5},{0xB938, 0x8FE6},{0xB939, 0x8FE7},{0xB93A, 0x8FE8},{0xB93B, 0x8FE9},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB93E, 0x8FEA},
- {0xB93F, 0x8FEB},{0xB940, 0xB7F4},{0xB941, 0x8FEC},{0xB942, 0x8FED},{0xB943, 0x8FEE},{0xB944, 0xB7F5},{0xB945, 0x8FEF},{0xB946, 0x8FF0},
- {0xB947, 0x8FF1},{0xB948, 0x8FF2},{0xB949, 0x8FF3},{0xB94A, 0x8FF4},{0xB94B, 0x8FF5},{0xB94C, 0xB7F6},{0xB94D, 0x8FF6},{0xB94E, 0x8FF7},
- {0xB94F, 0xB7F7},{0xB950, 0x8FF8},{0xB951, 0xB7F8},{0xB952, 0x8FF9},{0xB953, 0x8FFA},{0xB954, 0x8FFB},{0xB955, 0x8FFC},{0xB956, 0x8FFD},
- {0xB957, 0x8FFE},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95A, 0x9041},{0xB95B, 0x9042},{0xB95C, 0xB7FB},{0xB95D, 0x9043},{0xB95E, 0x9044},
- {0xB95F, 0x9045},{0xB960, 0xB7FC},{0xB961, 0x9046},{0xB962, 0x9047},{0xB963, 0x9048},{0xB964, 0x9049},{0xB965, 0x904A},{0xB966, 0x904B},
- {0xB967, 0x904C},{0xB968, 0xB7FD},{0xB969, 0xB7FE},{0xB96A, 0x904D},{0xB96B, 0xB8A1},{0xB96C, 0x904E},{0xB96D, 0xB8A2},{0xB96E, 0x904F},
- {0xB96F, 0x9050},{0xB970, 0x9051},{0xB971, 0x9052},{0xB972, 0x9053},{0xB973, 0x9054},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB976, 0x9055},
- {0xB977, 0x9056},{0xB978, 0xB8A5},{0xB979, 0x9057},{0xB97A, 0x9058},{0xB97B, 0x9059},{0xB97C, 0xB8A6},{0xB97D, 0x905A},{0xB97E, 0x9061},
- {0xB97F, 0x9062},{0xB980, 0x9063},{0xB981, 0x9064},{0xB982, 0x9065},{0xB983, 0x9066},{0xB984, 0xB8A7},{0xB985, 0xB8A8},{0xB986, 0x9067},
- {0xB987, 0xB8A9},{0xB988, 0x9068},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98B, 0x9069},{0xB98C, 0x906A},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD},
- {0xB98F, 0x906B},{0xB990, 0x906C},{0xB991, 0x906D},{0xB992, 0x906E},{0xB993, 0x906F},{0xB994, 0x9070},{0xB995, 0x9071},{0xB996, 0x9072},
- {0xB997, 0x9073},{0xB998, 0x9074},{0xB999, 0x9075},{0xB99A, 0x9076},{0xB99B, 0x9077},{0xB99C, 0x9078},{0xB99D, 0x9079},{0xB99E, 0x907A},
- {0xB99F, 0x9081},{0xB9A0, 0x9082},{0xB9A1, 0x9083},{0xB9A2, 0x9084},{0xB9A3, 0x9085},{0xB9A4, 0x9086},{0xB9A5, 0x9087},{0xB9A6, 0x9088},
- {0xB9A7, 0x9089},{0xB9A8, 0x908A},{0xB9A9, 0x908B},{0xB9AA, 0x908C},{0xB9AB, 0x908D},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF},{0xB9AE, 0x908E},
- {0xB9AF, 0x908F},{0xB9B0, 0xB8B0},{0xB9B1, 0x9090},{0xB9B2, 0x9091},{0xB9B3, 0x9092},{0xB9B4, 0xB8B1},{0xB9B5, 0x9093},{0xB9B6, 0x9094},
- {0xB9B7, 0x9095},{0xB9B8, 0x9096},{0xB9B9, 0x9097},{0xB9BA, 0x9098},{0xB9BB, 0x9099},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BE, 0x909A},
- {0xB9BF, 0xB8B4},{0xB9C0, 0x909B},{0xB9C1, 0xB8B5},{0xB9C2, 0x909C},{0xB9C3, 0x909D},{0xB9C4, 0x909E},{0xB9C5, 0x909F},{0xB9C6, 0x90A0},
- {0xB9C7, 0x90A1},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7},{0xB9CA, 0x90A2},{0xB9CB, 0x90A3},{0xB9CC, 0xB8B8},{0xB9CD, 0x90A4},{0xB9CE, 0xB8B9},
- {0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D3, 0x90A5},{0xB9D4, 0x90A6},{0xB9D5, 0x90A7},{0xB9D6, 0x90A8},
- {0xB9D7, 0x90A9},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF},{0xB9DA, 0x90AA},{0xB9DB, 0xB8C0},{0xB9DC, 0x90AB},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2},
- {0xB9DF, 0x90AC},{0xB9E0, 0x90AD},{0xB9E1, 0xB8C3},{0xB9E2, 0x90AE},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E6, 0x90AF},
- {0xB9E7, 0x90B0},{0xB9E8, 0xB8C7},{0xB9E9, 0x90B1},{0xB9EA, 0x90B2},{0xB9EB, 0x90B3},{0xB9EC, 0xB8C8},{0xB9ED, 0x90B4},{0xB9EE, 0x90B5},
- {0xB9EF, 0x90B6},{0xB9F0, 0x90B7},{0xB9F1, 0x90B8},{0xB9F2, 0x90B9},{0xB9F3, 0x90BA},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F6, 0x90BB},
- {0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xB9FB, 0x90BC},{0xB9FC, 0x90BD},{0xB9FD, 0x90BE},{0xB9FE, 0x90BF},
- {0xB9FF, 0x90C0},{0xBA00, 0xB8CF},{0xBA01, 0xB8D0},{0xBA02, 0x90C1},{0xBA03, 0x90C2},{0xBA04, 0x90C3},{0xBA05, 0x90C4},{0xBA06, 0x90C5},
- {0xBA07, 0x90C6},{0xBA08, 0xB8D1},{0xBA09, 0x90C7},{0xBA0A, 0x90C8},{0xBA0B, 0x90C9},{0xBA0C, 0x90CA},{0xBA0D, 0x90CB},{0xBA0E, 0x90CC},
- {0xBA0F, 0x90CD},{0xBA10, 0x90CE},{0xBA11, 0x90CF},{0xBA12, 0x90D0},{0xBA13, 0x90D1},{0xBA14, 0x90D2},{0xBA15, 0xB8D2},{0xBA16, 0x90D3},
- {0xBA17, 0x90D4},{0xBA18, 0x90D5},{0xBA19, 0x90D6},{0xBA1A, 0x90D7},{0xBA1B, 0x90D8},{0xBA1C, 0x90D9},{0xBA1D, 0x90DA},{0xBA1E, 0x90DB},
- {0xBA1F, 0x90DC},{0xBA20, 0x90DD},{0xBA21, 0x90DE},{0xBA22, 0x90DF},{0xBA23, 0x90E0},{0xBA24, 0x90E1},{0xBA25, 0x90E2},{0xBA26, 0x90E3},
- {0xBA27, 0x90E4},{0xBA28, 0x90E5},{0xBA29, 0x90E6},{0xBA2A, 0x90E7},{0xBA2B, 0x90E8},{0xBA2C, 0x90E9},{0xBA2D, 0x90EA},{0xBA2E, 0x90EB},
- {0xBA2F, 0x90EC},{0xBA30, 0x90ED},{0xBA31, 0x90EE},{0xBA32, 0x90EF},{0xBA33, 0x90F0},{0xBA34, 0x90F1},{0xBA35, 0x90F2},{0xBA36, 0x90F3},
- {0xBA37, 0x90F4},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3A, 0x90F5},{0xBA3B, 0x90F6},{0xBA3C, 0xB8D5},{0xBA3D, 0x90F7},{0xBA3E, 0x90F8},
- {0xBA3F, 0x90F9},{0xBA40, 0xB8D6},{0xBA41, 0x90FA},{0xBA42, 0xB8D7},{0xBA43, 0x90FB},{0xBA44, 0x90FC},{0xBA45, 0x90FD},{0xBA46, 0x90FE},
- {0xBA47, 0x9141},{0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4A, 0x9142},{0xBA4B, 0xB8DA},{0xBA4C, 0x9143},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC},
- {0xBA4F, 0x9144},{0xBA50, 0x9145},{0xBA51, 0x9146},{0xBA52, 0x9147},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF},{0xBA56, 0x9148},
- {0xBA57, 0x9149},{0xBA58, 0xB8E0},{0xBA59, 0x914A},{0xBA5A, 0x914B},{0xBA5B, 0x914C},{0xBA5C, 0xB8E1},{0xBA5D, 0x914D},{0xBA5E, 0x914E},
- {0xBA5F, 0x914F},{0xBA60, 0x9150},{0xBA61, 0x9151},{0xBA62, 0x9152},{0xBA63, 0x9153},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA66, 0x9154},
- {0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA6A, 0x9155},{0xBA6B, 0x9156},{0xBA6C, 0x9157},{0xBA6D, 0x9158},{0xBA6E, 0x9159},
- {0xBA6F, 0x915A},{0xBA70, 0xB8E7},{0xBA71, 0xB8E8},{0xBA72, 0x9161},{0xBA73, 0x9162},{0xBA74, 0xB8E9},{0xBA75, 0x9163},{0xBA76, 0x9164},
- {0xBA77, 0x9165},{0xBA78, 0xB8EA},{0xBA79, 0x9166},{0xBA7A, 0x9167},{0xBA7B, 0x9168},{0xBA7C, 0x9169},{0xBA7D, 0x916A},{0xBA7E, 0x916B},
- {0xBA7F, 0x916C},{0xBA80, 0x916D},{0xBA81, 0x916E},{0xBA82, 0x916F},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA86, 0x9170},
- {0xBA87, 0xB8EE},{0xBA88, 0x9171},{0xBA89, 0x9172},{0xBA8A, 0x9173},{0xBA8B, 0x9174},{0xBA8C, 0xB8EF},{0xBA8D, 0x9175},{0xBA8E, 0x9176},
- {0xBA8F, 0x9177},{0xBA90, 0x9178},{0xBA91, 0x9179},{0xBA92, 0x917A},{0xBA93, 0x9181},{0xBA94, 0x9182},{0xBA95, 0x9183},{0xBA96, 0x9184},
- {0xBA97, 0x9185},{0xBA98, 0x9186},{0xBA99, 0x9187},{0xBA9A, 0x9188},{0xBA9B, 0x9189},{0xBA9C, 0x918A},{0xBA9D, 0x918B},{0xBA9E, 0x918C},
- {0xBA9F, 0x918D},{0xBAA0, 0x918E},{0xBAA1, 0x918F},{0xBAA2, 0x9190},{0xBAA3, 0x9191},{0xBAA4, 0x9192},{0xBAA5, 0x9193},{0xBAA6, 0x9194},
- {0xBAA7, 0x9195},{0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAA, 0x9196},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAAD, 0x9197},{0xBAAE, 0x9198},
- {0xBAAF, 0x9199},{0xBAB0, 0xB8F4},{0xBAB1, 0x919A},{0xBAB2, 0xB8F5},{0xBAB3, 0x919B},{0xBAB4, 0x919C},{0xBAB5, 0x919D},{0xBAB6, 0x919E},
- {0xBAB7, 0x919F},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7},{0xBABA, 0x91A0},{0xBABB, 0xB8F8},{0xBABC, 0x91A1},{0xBABD, 0xB8F9},{0xBABE, 0x91A2},
- {0xBABF, 0x91A3},{0xBAC0, 0x91A4},{0xBAC1, 0x91A5},{0xBAC2, 0x91A6},{0xBAC3, 0x91A7},{0xBAC4, 0xB8FA},{0xBAC5, 0x91A8},{0xBAC6, 0x91A9},
- {0xBAC7, 0x91AA},{0xBAC8, 0xB8FB},{0xBAC9, 0x91AB},{0xBACA, 0x91AC},{0xBACB, 0x91AD},{0xBACC, 0x91AE},{0xBACD, 0x91AF},{0xBACE, 0x91B0},
- {0xBACF, 0x91B1},{0xBAD0, 0x91B2},{0xBAD1, 0x91B3},{0xBAD2, 0x91B4},{0xBAD3, 0x91B5},{0xBAD4, 0x91B6},{0xBAD5, 0x91B7},{0xBAD6, 0x91B8},
- {0xBAD7, 0x91B9},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBADA, 0x91BA},{0xBADB, 0x91BB},{0xBADC, 0x91BC},{0xBADD, 0x91BD},{0xBADE, 0x91BE},
- {0xBADF, 0x91BF},{0xBAE0, 0x91C0},{0xBAE1, 0x91C1},{0xBAE2, 0x91C2},{0xBAE3, 0x91C3},{0xBAE4, 0x91C4},{0xBAE5, 0x91C5},{0xBAE6, 0x91C6},
- {0xBAE7, 0x91C7},{0xBAE8, 0x91C8},{0xBAE9, 0x91C9},{0xBAEA, 0x91CA},{0xBAEB, 0x91CB},{0xBAEC, 0x91CC},{0xBAED, 0x91CD},{0xBAEE, 0x91CE},
- {0xBAEF, 0x91CF},{0xBAF0, 0x91D0},{0xBAF1, 0x91D1},{0xBAF2, 0x91D2},{0xBAF3, 0x91D3},{0xBAF4, 0x91D4},{0xBAF5, 0x91D5},{0xBAF6, 0x91D6},
- {0xBAF7, 0x91D7},{0xBAF8, 0x91D8},{0xBAF9, 0x91D9},{0xBAFA, 0x91DA},{0xBAFB, 0x91DB},{0xBAFC, 0xB8FE},{0xBAFD, 0x91DC},{0xBAFE, 0x91DD},
- {0xBAFF, 0x91DE},{0xBB00, 0xB9A1},{0xBB01, 0x91DF},{0xBB02, 0x91E0},{0xBB03, 0x91E1},{0xBB04, 0xB9A2},{0xBB05, 0x91E2},{0xBB06, 0x91E3},
- {0xBB07, 0x91E4},{0xBB08, 0x91E5},{0xBB09, 0x91E6},{0xBB0A, 0x91E7},{0xBB0B, 0x91E8},{0xBB0C, 0x91E9},{0xBB0D, 0xB9A3},{0xBB0E, 0x91EA},
- {0xBB0F, 0xB9A4},{0xBB10, 0x91EB},{0xBB11, 0xB9A5},{0xBB12, 0x91EC},{0xBB13, 0x91ED},{0xBB14, 0x91EE},{0xBB15, 0x91EF},{0xBB16, 0x91F0},
- {0xBB17, 0x91F1},{0xBB18, 0xB9A6},{0xBB19, 0x91F2},{0xBB1A, 0x91F3},{0xBB1B, 0x91F4},{0xBB1C, 0xB9A7},{0xBB1D, 0x91F5},{0xBB1E, 0x91F6},
- {0xBB1F, 0x91F7},{0xBB20, 0xB9A8},{0xBB21, 0x91F8},{0xBB22, 0x91F9},{0xBB23, 0x91FA},{0xBB24, 0x91FB},{0xBB25, 0x91FC},{0xBB26, 0x91FD},
- {0xBB27, 0x91FE},{0xBB28, 0x9241},{0xBB29, 0xB9A9},{0xBB2A, 0x9242},{0xBB2B, 0xB9AA},{0xBB2C, 0x9243},{0xBB2D, 0x9244},{0xBB2E, 0x9245},
- {0xBB2F, 0x9246},{0xBB30, 0x9247},{0xBB31, 0x9248},{0xBB32, 0x9249},{0xBB33, 0x924A},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD},
- {0xBB37, 0x924B},{0xBB38, 0xB9AE},{0xBB39, 0x924C},{0xBB3A, 0x924D},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1},{0xBB3E, 0xB9B2},
- {0xBB3F, 0x924E},{0xBB40, 0x924F},{0xBB41, 0x9250},{0xBB42, 0x9251},{0xBB43, 0x9252},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB46, 0x9253},
- {0xBB47, 0xB9B5},{0xBB48, 0x9254},{0xBB49, 0xB9B6},{0xBB4A, 0x9255},{0xBB4B, 0x9256},{0xBB4C, 0x9257},{0xBB4D, 0xB9B7},{0xBB4E, 0x9258},
- {0xBB4F, 0xB9B8},{0xBB50, 0xB9B9},{0xBB51, 0x9259},{0xBB52, 0x925A},{0xBB53, 0x9261},{0xBB54, 0xB9BA},{0xBB55, 0x9262},{0xBB56, 0x9263},
- {0xBB57, 0x9264},{0xBB58, 0xB9BB},{0xBB59, 0x9265},{0xBB5A, 0x9266},{0xBB5B, 0x9267},{0xBB5C, 0x9268},{0xBB5D, 0x9269},{0xBB5E, 0x926A},
- {0xBB5F, 0x926B},{0xBB60, 0x926C},{0xBB61, 0xB9BC},{0xBB62, 0x926D},{0xBB63, 0xB9BD},{0xBB64, 0x926E},{0xBB65, 0x926F},{0xBB66, 0x9270},
- {0xBB67, 0x9271},{0xBB68, 0x9272},{0xBB69, 0x9273},{0xBB6A, 0x9274},{0xBB6B, 0x9275},{0xBB6C, 0xB9BE},{0xBB6D, 0x9276},{0xBB6E, 0x9277},
- {0xBB6F, 0x9278},{0xBB70, 0x9279},{0xBB71, 0x927A},{0xBB72, 0x9281},{0xBB73, 0x9282},{0xBB74, 0x9283},{0xBB75, 0x9284},{0xBB76, 0x9285},
- {0xBB77, 0x9286},{0xBB78, 0x9287},{0xBB79, 0x9288},{0xBB7A, 0x9289},{0xBB7B, 0x928A},{0xBB7C, 0x928B},{0xBB7D, 0x928C},{0xBB7E, 0x928D},
- {0xBB7F, 0x928E},{0xBB80, 0x928F},{0xBB81, 0x9290},{0xBB82, 0x9291},{0xBB83, 0x9292},{0xBB84, 0x9293},{0xBB85, 0x9294},{0xBB86, 0x9295},
- {0xBB87, 0x9296},{0xBB88, 0xB9BF},{0xBB89, 0x9297},{0xBB8A, 0x9298},{0xBB8B, 0x9299},{0xBB8C, 0xB9C0},{0xBB8D, 0x929A},{0xBB8E, 0x929B},
- {0xBB8F, 0x929C},{0xBB90, 0xB9C1},{0xBB91, 0x929D},{0xBB92, 0x929E},{0xBB93, 0x929F},{0xBB94, 0x92A0},{0xBB95, 0x92A1},{0xBB96, 0x92A2},
- {0xBB97, 0x92A3},{0xBB98, 0x92A4},{0xBB99, 0x92A5},{0xBB9A, 0x92A6},{0xBB9B, 0x92A7},{0xBB9C, 0x92A8},{0xBB9D, 0x92A9},{0xBB9E, 0x92AA},
- {0xBB9F, 0x92AB},{0xBBA0, 0x92AC},{0xBBA1, 0x92AD},{0xBBA2, 0x92AE},{0xBBA3, 0x92AF},{0xBBA4, 0xB9C2},{0xBBA5, 0x92B0},{0xBBA6, 0x92B1},
- {0xBBA7, 0x92B2},{0xBBA8, 0xB9C3},{0xBBA9, 0x92B3},{0xBBAA, 0x92B4},{0xBBAB, 0x92B5},{0xBBAC, 0xB9C4},{0xBBAD, 0x92B6},{0xBBAE, 0x92B7},
- {0xBBAF, 0x92B8},{0xBBB0, 0x92B9},{0xBBB1, 0x92BA},{0xBBB2, 0x92BB},{0xBBB3, 0x92BC},{0xBBB4, 0xB9C5},{0xBBB5, 0x92BD},{0xBBB6, 0x92BE},
- {0xBBB7, 0xB9C6},{0xBBB8, 0x92BF},{0xBBB9, 0x92C0},{0xBBBA, 0x92C1},{0xBBBB, 0x92C2},{0xBBBC, 0x92C3},{0xBBBD, 0x92C4},{0xBBBE, 0x92C5},
- {0xBBBF, 0x92C6},{0xBBC0, 0xB9C7},{0xBBC1, 0x92C7},{0xBBC2, 0x92C8},{0xBBC3, 0x92C9},{0xBBC4, 0xB9C8},{0xBBC5, 0x92CA},{0xBBC6, 0x92CB},
- {0xBBC7, 0x92CC},{0xBBC8, 0xB9C9},{0xBBC9, 0x92CD},{0xBBCA, 0x92CE},{0xBBCB, 0x92CF},{0xBBCC, 0x92D0},{0xBBCD, 0x92D1},{0xBBCE, 0x92D2},
- {0xBBCF, 0x92D3},{0xBBD0, 0xB9CA},{0xBBD1, 0x92D4},{0xBBD2, 0x92D5},{0xBBD3, 0xB9CB},{0xBBD4, 0x92D6},{0xBBD5, 0x92D7},{0xBBD6, 0x92D8},
- {0xBBD7, 0x92D9},{0xBBD8, 0x92DA},{0xBBD9, 0x92DB},{0xBBDA, 0x92DC},{0xBBDB, 0x92DD},{0xBBDC, 0x92DE},{0xBBDD, 0x92DF},{0xBBDE, 0x92E0},
- {0xBBDF, 0x92E1},{0xBBE0, 0x92E2},{0xBBE1, 0x92E3},{0xBBE2, 0x92E4},{0xBBE3, 0x92E5},{0xBBE4, 0x92E6},{0xBBE5, 0x92E7},{0xBBE6, 0x92E8},
- {0xBBE7, 0x92E9},{0xBBE8, 0x92EA},{0xBBE9, 0x92EB},{0xBBEA, 0x92EC},{0xBBEB, 0x92ED},{0xBBEC, 0x92EE},{0xBBED, 0x92EF},{0xBBEE, 0x92F0},
- {0xBBEF, 0x92F1},{0xBBF0, 0x92F2},{0xBBF1, 0x92F3},{0xBBF2, 0x92F4},{0xBBF3, 0x92F5},{0xBBF4, 0x92F6},{0xBBF5, 0x92F7},{0xBBF6, 0x92F8},
- {0xBBF7, 0x92F9},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFA, 0x92FA},{0xBBFB, 0x92FB},{0xBBFC, 0xB9CE},{0xBBFD, 0x92FC},{0xBBFE, 0x92FD},
- {0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC01, 0x92FE},{0xBC02, 0xB9D1},{0xBC03, 0x9341},{0xBC04, 0x9342},{0xBC05, 0x9343},{0xBC06, 0x9344},
- {0xBC07, 0x9345},{0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0A, 0x9346},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0E, 0x9347},
- {0xBC0F, 0xB9D7},{0xBC10, 0x9348},{0xBC11, 0xB9D8},{0xBC12, 0x9349},{0xBC13, 0x934A},{0xBC14, 0xB9D9},{0xBC15, 0xB9DA},{0xBC16, 0xB9DB},
- {0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC19, 0x934B},{0xBC1A, 0x934C},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1},
- {0xBC1F, 0xB9E2},{0xBC20, 0x934D},{0xBC21, 0x934E},{0xBC22, 0x934F},{0xBC23, 0x9350},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC26, 0x9351},
- {0xBC27, 0xB9E5},{0xBC28, 0x9352},{0xBC29, 0xB9E6},{0xBC2A, 0x9353},{0xBC2B, 0x9354},{0xBC2C, 0x9355},{0xBC2D, 0xB9E7},{0xBC2E, 0x9356},
- {0xBC2F, 0x9357},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9},{0xBC32, 0x9358},{0xBC33, 0x9359},{0xBC34, 0xB9EA},{0xBC35, 0x935A},{0xBC36, 0x9361},
- {0xBC37, 0x9362},{0xBC38, 0xB9EB},{0xBC39, 0x9363},{0xBC3A, 0x9364},{0xBC3B, 0x9365},{0xBC3C, 0x9366},{0xBC3D, 0x9367},{0xBC3E, 0x9368},
- {0xBC3F, 0x9369},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC42, 0x936A},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC46, 0x936B},
- {0xBC47, 0x936C},{0xBC48, 0x936D},{0xBC49, 0xB9F1},{0xBC4A, 0x936E},{0xBC4B, 0x936F},{0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC4E, 0x9370},
- {0xBC4F, 0x9371},{0xBC50, 0xB9F4},{0xBC51, 0x9372},{0xBC52, 0x9373},{0xBC53, 0x9374},{0xBC54, 0x9375},{0xBC55, 0x9376},{0xBC56, 0x9377},
- {0xBC57, 0x9378},{0xBC58, 0x9379},{0xBC59, 0x937A},{0xBC5A, 0x9381},{0xBC5B, 0x9382},{0xBC5C, 0x9383},{0xBC5D, 0xB9F5},{0xBC5E, 0x9384},
- {0xBC5F, 0x9385},{0xBC60, 0x9386},{0xBC61, 0x9387},{0xBC62, 0x9388},{0xBC63, 0x9389},{0xBC64, 0x938A},{0xBC65, 0x938B},{0xBC66, 0x938C},
- {0xBC67, 0x938D},{0xBC68, 0x938E},{0xBC69, 0x938F},{0xBC6A, 0x9390},{0xBC6B, 0x9391},{0xBC6C, 0x9392},{0xBC6D, 0x9393},{0xBC6E, 0x9394},
- {0xBC6F, 0x9395},{0xBC70, 0x9396},{0xBC71, 0x9397},{0xBC72, 0x9398},{0xBC73, 0x9399},{0xBC74, 0x939A},{0xBC75, 0x939B},{0xBC76, 0x939C},
- {0xBC77, 0x939D},{0xBC78, 0x939E},{0xBC79, 0x939F},{0xBC7A, 0x93A0},{0xBC7B, 0x93A1},{0xBC7C, 0x93A2},{0xBC7D, 0x93A3},{0xBC7E, 0x93A4},
- {0xBC7F, 0x93A5},{0xBC80, 0x93A6},{0xBC81, 0x93A7},{0xBC82, 0x93A8},{0xBC83, 0x93A9},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC86, 0x93AA},
- {0xBC87, 0x93AB},{0xBC88, 0xB9F8},{0xBC89, 0x93AC},{0xBC8A, 0x93AD},{0xBC8B, 0xB9F9},{0xBC8C, 0xB9FA},{0xBC8D, 0x93AE},{0xBC8E, 0xB9FB},
- {0xBC8F, 0x93AF},{0xBC90, 0x93B0},{0xBC91, 0x93B1},{0xBC92, 0x93B2},{0xBC93, 0x93B3},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC96, 0x93B4},
- {0xBC97, 0xB9FE},{0xBC98, 0x93B5},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBC9B, 0x93B6},{0xBC9C, 0x93B7},{0xBC9D, 0x93B8},{0xBC9E, 0x93B9},
- {0xBC9F, 0x93BA},{0xBCA0, 0xBAA3},{0xBCA1, 0xBAA4},{0xBCA2, 0x93BB},{0xBCA3, 0x93BC},{0xBCA4, 0xBAA5},{0xBCA5, 0x93BD},{0xBCA6, 0x93BE},
- {0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCA9, 0x93BF},{0xBCAA, 0x93C0},{0xBCAB, 0x93C1},{0xBCAC, 0x93C2},{0xBCAD, 0x93C3},{0xBCAE, 0x93C4},
- {0xBCAF, 0x93C5},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB2, 0x93C6},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB},{0xBCB5, 0xBAAC},{0xBCB6, 0x93C7},
- {0xBCB7, 0x93C8},{0xBCB8, 0x93C9},{0xBCB9, 0x93CA},{0xBCBA, 0x93CB},{0xBCBB, 0x93CC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCBE, 0x93CD},
- {0xBCBF, 0x93CE},{0xBCC0, 0xBAAF},{0xBCC1, 0x93CF},{0xBCC2, 0x93D0},{0xBCC3, 0x93D1},{0xBCC4, 0xBAB0},{0xBCC5, 0x93D2},{0xBCC6, 0x93D3},
- {0xBCC7, 0x93D4},{0xBCC8, 0x93D5},{0xBCC9, 0x93D6},{0xBCCA, 0x93D7},{0xBCCB, 0x93D8},{0xBCCC, 0x93D9},{0xBCCD, 0xBAB1},{0xBCCE, 0x93DA},
- {0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3},{0xBCD1, 0xBAB4},{0xBCD2, 0x93DB},{0xBCD3, 0x93DC},{0xBCD4, 0x93DD},{0xBCD5, 0xBAB5},{0xBCD6, 0x93DE},
- {0xBCD7, 0x93DF},{0xBCD8, 0xBAB6},{0xBCD9, 0x93E0},{0xBCDA, 0x93E1},{0xBCDB, 0x93E2},{0xBCDC, 0xBAB7},{0xBCDD, 0x93E3},{0xBCDE, 0x93E4},
- {0xBCDF, 0x93E5},{0xBCE0, 0x93E6},{0xBCE1, 0x93E7},{0xBCE2, 0x93E8},{0xBCE3, 0x93E9},{0xBCE4, 0x93EA},{0xBCE5, 0x93EB},{0xBCE6, 0x93EC},
- {0xBCE7, 0x93ED},{0xBCE8, 0x93EE},{0xBCE9, 0x93EF},{0xBCEA, 0x93F0},{0xBCEB, 0x93F1},{0xBCEC, 0x93F2},{0xBCED, 0x93F3},{0xBCEE, 0x93F4},
- {0xBCEF, 0x93F5},{0xBCF0, 0x93F6},{0xBCF1, 0x93F7},{0xBCF2, 0x93F8},{0xBCF3, 0x93F9},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA},
- {0xBCF7, 0x93FA},{0xBCF8, 0xBABB},{0xBCF9, 0x93FB},{0xBCFA, 0x93FC},{0xBCFB, 0x93FD},{0xBCFC, 0xBABC},{0xBCFD, 0x93FE},{0xBCFE, 0x9441},
- {0xBCFF, 0x9442},{0xBD00, 0x9443},{0xBD01, 0x9444},{0xBD02, 0x9445},{0xBD03, 0x9446},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD06, 0x9447},
- {0xBD07, 0xBABF},{0xBD08, 0x9448},{0xBD09, 0xBAC0},{0xBD0A, 0x9449},{0xBD0B, 0x944A},{0xBD0C, 0x944B},{0xBD0D, 0x944C},{0xBD0E, 0x944D},
- {0xBD0F, 0x944E},{0xBD10, 0xBAC1},{0xBD11, 0x944F},{0xBD12, 0x9450},{0xBD13, 0x9451},{0xBD14, 0xBAC2},{0xBD15, 0x9452},{0xBD16, 0x9453},
- {0xBD17, 0x9454},{0xBD18, 0x9455},{0xBD19, 0x9456},{0xBD1A, 0x9457},{0xBD1B, 0x9458},{0xBD1C, 0x9459},{0xBD1D, 0x945A},{0xBD1E, 0x9461},
- {0xBD1F, 0x9462},{0xBD20, 0x9463},{0xBD21, 0x9464},{0xBD22, 0x9465},{0xBD23, 0x9466},{0xBD24, 0xBAC3},{0xBD25, 0x9467},{0xBD26, 0x9468},
- {0xBD27, 0x9469},{0xBD28, 0x946A},{0xBD29, 0x946B},{0xBD2A, 0x946C},{0xBD2B, 0x946D},{0xBD2C, 0xBAC4},{0xBD2D, 0x946E},{0xBD2E, 0x946F},
- {0xBD2F, 0x9470},{0xBD30, 0x9471},{0xBD31, 0x9472},{0xBD32, 0x9473},{0xBD33, 0x9474},{0xBD34, 0x9475},{0xBD35, 0x9476},{0xBD36, 0x9477},
- {0xBD37, 0x9478},{0xBD38, 0x9479},{0xBD39, 0x947A},{0xBD3A, 0x9481},{0xBD3B, 0x9482},{0xBD3C, 0x9483},{0xBD3D, 0x9484},{0xBD3E, 0x9485},
- {0xBD3F, 0x9486},{0xBD40, 0xBAC5},{0xBD41, 0x9487},{0xBD42, 0x9488},{0xBD43, 0x9489},{0xBD44, 0x948A},{0xBD45, 0x948B},{0xBD46, 0x948C},
- {0xBD47, 0x948D},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4A, 0x948E},{0xBD4B, 0x948F},{0xBD4C, 0xBAC8},{0xBD4D, 0x9490},{0xBD4E, 0x9491},
- {0xBD4F, 0x9492},{0xBD50, 0xBAC9},{0xBD51, 0x9493},{0xBD52, 0x9494},{0xBD53, 0x9495},{0xBD54, 0x9496},{0xBD55, 0x9497},{0xBD56, 0x9498},
- {0xBD57, 0x9499},{0xBD58, 0xBACA},{0xBD59, 0xBACB},{0xBD5A, 0x949A},{0xBD5B, 0x949B},{0xBD5C, 0x949C},{0xBD5D, 0x949D},{0xBD5E, 0x949E},
- {0xBD5F, 0x949F},{0xBD60, 0x94A0},{0xBD61, 0x94A1},{0xBD62, 0x94A2},{0xBD63, 0x94A3},{0xBD64, 0xBACC},{0xBD65, 0x94A4},{0xBD66, 0x94A5},
- {0xBD67, 0x94A6},{0xBD68, 0xBACD},{0xBD69, 0x94A7},{0xBD6A, 0x94A8},{0xBD6B, 0x94A9},{0xBD6C, 0x94AA},{0xBD6D, 0x94AB},{0xBD6E, 0x94AC},
- {0xBD6F, 0x94AD},{0xBD70, 0x94AE},{0xBD71, 0x94AF},{0xBD72, 0x94B0},{0xBD73, 0x94B1},{0xBD74, 0x94B2},{0xBD75, 0x94B3},{0xBD76, 0x94B4},
- {0xBD77, 0x94B5},{0xBD78, 0x94B6},{0xBD79, 0x94B7},{0xBD7A, 0x94B8},{0xBD7B, 0x94B9},{0xBD7C, 0x94BA},{0xBD7D, 0x94BB},{0xBD7E, 0x94BC},
- {0xBD7F, 0x94BD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD82, 0x94BE},{0xBD83, 0x94BF},{0xBD84, 0xBAD0},{0xBD85, 0x94C0},{0xBD86, 0x94C1},
- {0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3},{0xBD8A, 0xBAD4},{0xBD8B, 0x94C2},{0xBD8C, 0x94C3},{0xBD8D, 0x94C4},{0xBD8E, 0x94C5},
- {0xBD8F, 0x94C6},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD92, 0x94C7},{0xBD93, 0xBAD7},{0xBD94, 0x94C8},{0xBD95, 0xBAD8},{0xBD96, 0x94C9},
- {0xBD97, 0x94CA},{0xBD98, 0x94CB},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9B, 0x94CC},{0xBD9C, 0xBADB},{0xBD9D, 0x94CD},{0xBD9E, 0x94CE},
- {0xBD9F, 0x94CF},{0xBDA0, 0x94D0},{0xBDA1, 0x94D1},{0xBDA2, 0x94D2},{0xBDA3, 0x94D3},{0xBDA4, 0xBADC},{0xBDA5, 0x94D4},{0xBDA6, 0x94D5},
- {0xBDA7, 0x94D6},{0xBDA8, 0x94D7},{0xBDA9, 0x94D8},{0xBDAA, 0x94D9},{0xBDAB, 0x94DA},{0xBDAC, 0x94DB},{0xBDAD, 0x94DC},{0xBDAE, 0x94DD},
- {0xBDAF, 0x94DE},{0xBDB0, 0xBADD},{0xBDB1, 0x94DF},{0xBDB2, 0x94E0},{0xBDB3, 0x94E1},{0xBDB4, 0x94E2},{0xBDB5, 0x94E3},{0xBDB6, 0x94E4},
- {0xBDB7, 0x94E5},{0xBDB8, 0xBADE},{0xBDB9, 0x94E6},{0xBDBA, 0x94E7},{0xBDBB, 0x94E8},{0xBDBC, 0x94E9},{0xBDBD, 0x94EA},{0xBDBE, 0x94EB},
- {0xBDBF, 0x94EC},{0xBDC0, 0x94ED},{0xBDC1, 0x94EE},{0xBDC2, 0x94EF},{0xBDC3, 0x94F0},{0xBDC4, 0x94F1},{0xBDC5, 0x94F2},{0xBDC6, 0x94F3},
- {0xBDC7, 0x94F4},{0xBDC8, 0x94F5},{0xBDC9, 0x94F6},{0xBDCA, 0x94F7},{0xBDCB, 0x94F8},{0xBDCC, 0x94F9},{0xBDCD, 0x94FA},{0xBDCE, 0x94FB},
- {0xBDCF, 0x94FC},{0xBDD0, 0x94FD},{0xBDD1, 0x94FE},{0xBDD2, 0x9541},{0xBDD3, 0x9542},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD6, 0x9543},
- {0xBDD7, 0x9544},{0xBDD8, 0xBAE1},{0xBDD9, 0x9545},{0xBDDA, 0x9546},{0xBDDB, 0x9547},{0xBDDC, 0xBAE2},{0xBDDD, 0x9548},{0xBDDE, 0x9549},
- {0xBDDF, 0x954A},{0xBDE0, 0x954B},{0xBDE1, 0x954C},{0xBDE2, 0x954D},{0xBDE3, 0x954E},{0xBDE4, 0x954F},{0xBDE5, 0x9550},{0xBDE6, 0x9551},
- {0xBDE7, 0x9552},{0xBDE8, 0x9553},{0xBDE9, 0xBAE3},{0xBDEA, 0x9554},{0xBDEB, 0x9555},{0xBDEC, 0x9556},{0xBDED, 0x9557},{0xBDEE, 0x9558},
- {0xBDEF, 0x9559},{0xBDF0, 0xBAE4},{0xBDF1, 0x955A},{0xBDF2, 0x9561},{0xBDF3, 0x9562},{0xBDF4, 0xBAE5},{0xBDF5, 0x9563},{0xBDF6, 0x9564},
- {0xBDF7, 0x9565},{0xBDF8, 0xBAE6},{0xBDF9, 0x9566},{0xBDFA, 0x9567},{0xBDFB, 0x9568},{0xBDFC, 0x9569},{0xBDFD, 0x956A},{0xBDFE, 0x956B},
- {0xBDFF, 0x956C},{0xBE00, 0xBAE7},{0xBE01, 0x956D},{0xBE02, 0x956E},{0xBE03, 0xBAE8},{0xBE04, 0x956F},{0xBE05, 0xBAE9},{0xBE06, 0x9570},
- {0xBE07, 0x9571},{0xBE08, 0x9572},{0xBE09, 0x9573},{0xBE0A, 0x9574},{0xBE0B, 0x9575},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB},{0xBE0E, 0x9576},
- {0xBE0F, 0x9577},{0xBE10, 0xBAEC},{0xBE11, 0x9578},{0xBE12, 0x9579},{0xBE13, 0x957A},{0xBE14, 0xBAED},{0xBE15, 0x9581},{0xBE16, 0x9582},
- {0xBE17, 0x9583},{0xBE18, 0x9584},{0xBE19, 0x9585},{0xBE1A, 0x9586},{0xBE1B, 0x9587},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1E, 0x9588},
- {0xBE1F, 0xBAF0},{0xBE20, 0x9589},{0xBE21, 0x958A},{0xBE22, 0x958B},{0xBE23, 0x958C},{0xBE24, 0x958D},{0xBE25, 0x958E},{0xBE26, 0x958F},
- {0xBE27, 0x9590},{0xBE28, 0x9591},{0xBE29, 0x9592},{0xBE2A, 0x9593},{0xBE2B, 0x9594},{0xBE2C, 0x9595},{0xBE2D, 0x9596},{0xBE2E, 0x9597},
- {0xBE2F, 0x9598},{0xBE30, 0x9599},{0xBE31, 0x959A},{0xBE32, 0x959B},{0xBE33, 0x959C},{0xBE34, 0x959D},{0xBE35, 0x959E},{0xBE36, 0x959F},
- {0xBE37, 0x95A0},{0xBE38, 0x95A1},{0xBE39, 0x95A2},{0xBE3A, 0x95A3},{0xBE3B, 0x95A4},{0xBE3C, 0x95A5},{0xBE3D, 0x95A6},{0xBE3E, 0x95A7},
- {0xBE3F, 0x95A8},{0xBE40, 0x95A9},{0xBE41, 0x95AA},{0xBE42, 0x95AB},{0xBE43, 0x95AC},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE46, 0x95AD},
- {0xBE47, 0x95AE},{0xBE48, 0xBAF3},{0xBE49, 0x95AF},{0xBE4A, 0x95B0},{0xBE4B, 0x95B1},{0xBE4C, 0xBAF4},{0xBE4D, 0x95B2},{0xBE4E, 0xBAF5},
- {0xBE4F, 0x95B3},{0xBE50, 0x95B4},{0xBE51, 0x95B5},{0xBE52, 0x95B6},{0xBE53, 0x95B7},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE56, 0x95B8},
- {0xBE57, 0xBAF8},{0xBE58, 0x95B9},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB},{0xBE5C, 0x95BA},{0xBE5D, 0x95BB},{0xBE5E, 0x95BC},
- {0xBE5F, 0x95BD},{0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE62, 0x95BE},{0xBE63, 0x95BF},{0xBE64, 0xBAFE},{0xBE65, 0x95C0},{0xBE66, 0x95C1},
- {0xBE67, 0x95C2},{0xBE68, 0xBBA1},{0xBE69, 0x95C3},{0xBE6A, 0xBBA2},{0xBE6B, 0x95C4},{0xBE6C, 0x95C5},{0xBE6D, 0x95C6},{0xBE6E, 0x95C7},
- {0xBE6F, 0x95C8},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE72, 0x95C9},{0xBE73, 0xBBA5},{0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE76, 0x95CA},
- {0xBE77, 0x95CB},{0xBE78, 0x95CC},{0xBE79, 0x95CD},{0xBE7A, 0x95CE},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE7E, 0x95CF},
- {0xBE7F, 0x95D0},{0xBE80, 0xBBAB},{0xBE81, 0x95D1},{0xBE82, 0x95D2},{0xBE83, 0x95D3},{0xBE84, 0xBBAC},{0xBE85, 0x95D4},{0xBE86, 0x95D5},
- {0xBE87, 0x95D6},{0xBE88, 0x95D7},{0xBE89, 0x95D8},{0xBE8A, 0x95D9},{0xBE8B, 0x95DA},{0xBE8C, 0xBBAD},{0xBE8D, 0xBBAE},{0xBE8E, 0x95DB},
- {0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE92, 0x95DC},{0xBE93, 0x95DD},{0xBE94, 0x95DE},{0xBE95, 0x95DF},{0xBE96, 0x95E0},
- {0xBE97, 0x95E1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBE9A, 0x95E2},{0xBE9B, 0x95E3},{0xBE9C, 0x95E4},{0xBE9D, 0x95E5},{0xBE9E, 0x95E6},
- {0xBE9F, 0x95E7},{0xBEA0, 0x95E8},{0xBEA1, 0x95E9},{0xBEA2, 0x95EA},{0xBEA3, 0x95EB},{0xBEA4, 0x95EC},{0xBEA5, 0x95ED},{0xBEA6, 0x95EE},
- {0xBEA7, 0x95EF},{0xBEA8, 0xBBB4},{0xBEA9, 0x95F0},{0xBEAA, 0x95F1},{0xBEAB, 0x95F2},{0xBEAC, 0x95F3},{0xBEAD, 0x95F4},{0xBEAE, 0x95F5},
- {0xBEAF, 0x95F6},{0xBEB0, 0x95F7},{0xBEB1, 0x95F8},{0xBEB2, 0x95F9},{0xBEB3, 0x95FA},{0xBEB4, 0x95FB},{0xBEB5, 0x95FC},{0xBEB6, 0x95FD},
- {0xBEB7, 0x95FE},{0xBEB8, 0x9641},{0xBEB9, 0x9642},{0xBEBA, 0x9643},{0xBEBB, 0x9644},{0xBEBC, 0x9645},{0xBEBD, 0x9646},{0xBEBE, 0x9647},
- {0xBEBF, 0x9648},{0xBEC0, 0x9649},{0xBEC1, 0x964A},{0xBEC2, 0x964B},{0xBEC3, 0x964C},{0xBEC4, 0x964D},{0xBEC5, 0x964E},{0xBEC6, 0x964F},
- {0xBEC7, 0x9650},{0xBEC8, 0x9651},{0xBEC9, 0x9652},{0xBECA, 0x9653},{0xBECB, 0x9654},{0xBECC, 0x9655},{0xBECD, 0x9656},{0xBECE, 0x9657},
- {0xBECF, 0x9658},{0xBED0, 0xBBB5},{0xBED1, 0xBBB6},{0xBED2, 0x9659},{0xBED3, 0x965A},{0xBED4, 0xBBB7},{0xBED5, 0x9661},{0xBED6, 0x9662},
- {0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBED9, 0x9663},{0xBEDA, 0x9664},{0xBEDB, 0x9665},{0xBEDC, 0x9666},{0xBEDD, 0x9667},{0xBEDE, 0x9668},
- {0xBEDF, 0x9669},{0xBEE0, 0xBBBA},{0xBEE1, 0x966A},{0xBEE2, 0x966B},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD},{0xBEE6, 0x966C},
- {0xBEE7, 0x966D},{0xBEE8, 0x966E},{0xBEE9, 0x966F},{0xBEEA, 0x9670},{0xBEEB, 0x9671},{0xBEEC, 0xBBBE},{0xBEED, 0x9672},{0xBEEE, 0x9673},
- {0xBEEF, 0x9674},{0xBEF0, 0x9675},{0xBEF1, 0x9676},{0xBEF2, 0x9677},{0xBEF3, 0x9678},{0xBEF4, 0x9679},{0xBEF5, 0x967A},{0xBEF6, 0x9681},
- {0xBEF7, 0x9682},{0xBEF8, 0x9683},{0xBEF9, 0x9684},{0xBEFA, 0x9685},{0xBEFB, 0x9686},{0xBEFC, 0x9687},{0xBEFD, 0x9688},{0xBEFE, 0x9689},
- {0xBEFF, 0x968A},{0xBF00, 0x968B},{0xBF01, 0xBBBF},{0xBF02, 0x968C},{0xBF03, 0x968D},{0xBF04, 0x968E},{0xBF05, 0x968F},{0xBF06, 0x9690},
- {0xBF07, 0x9691},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF0A, 0x9692},{0xBF0B, 0x9693},{0xBF0C, 0x9694},{0xBF0D, 0x9695},{0xBF0E, 0x9696},
- {0xBF0F, 0x9697},{0xBF10, 0x9698},{0xBF11, 0x9699},{0xBF12, 0x969A},{0xBF13, 0x969B},{0xBF14, 0x969C},{0xBF15, 0x969D},{0xBF16, 0x969E},
- {0xBF17, 0x969F},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1A, 0x96A0},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5},{0xBF1D, 0xBBC6},{0xBF1E, 0x96A1},
- {0xBF1F, 0x96A2},{0xBF20, 0x96A3},{0xBF21, 0x96A4},{0xBF22, 0x96A5},{0xBF23, 0x96A6},{0xBF24, 0x96A7},{0xBF25, 0x96A8},{0xBF26, 0x96A9},
- {0xBF27, 0x96AA},{0xBF28, 0x96AB},{0xBF29, 0x96AC},{0xBF2A, 0x96AD},{0xBF2B, 0x96AE},{0xBF2C, 0x96AF},{0xBF2D, 0x96B0},{0xBF2E, 0x96B1},
- {0xBF2F, 0x96B2},{0xBF30, 0x96B3},{0xBF31, 0x96B4},{0xBF32, 0x96B5},{0xBF33, 0x96B6},{0xBF34, 0x96B7},{0xBF35, 0x96B8},{0xBF36, 0x96B9},
- {0xBF37, 0x96BA},{0xBF38, 0x96BB},{0xBF39, 0x96BC},{0xBF3A, 0x96BD},{0xBF3B, 0x96BE},{0xBF3C, 0x96BF},{0xBF3D, 0x96C0},{0xBF3E, 0x96C1},
- {0xBF3F, 0x96C2},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF42, 0x96C3},{0xBF43, 0x96C4},{0xBF44, 0xBBC9},{0xBF45, 0x96C5},{0xBF46, 0x96C6},
- {0xBF47, 0x96C7},{0xBF48, 0xBBCA},{0xBF49, 0x96C8},{0xBF4A, 0x96C9},{0xBF4B, 0x96CA},{0xBF4C, 0x96CB},{0xBF4D, 0x96CC},{0xBF4E, 0x96CD},
- {0xBF4F, 0x96CE},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF52, 0x96CF},{0xBF53, 0x96D0},{0xBF54, 0x96D1},{0xBF55, 0xBBCD},{0xBF56, 0x96D2},
- {0xBF57, 0x96D3},{0xBF58, 0x96D4},{0xBF59, 0x96D5},{0xBF5A, 0x96D6},{0xBF5B, 0x96D7},{0xBF5C, 0x96D8},{0xBF5D, 0x96D9},{0xBF5E, 0x96DA},
- {0xBF5F, 0x96DB},{0xBF60, 0x96DC},{0xBF61, 0x96DD},{0xBF62, 0x96DE},{0xBF63, 0x96DF},{0xBF64, 0x96E0},{0xBF65, 0x96E1},{0xBF66, 0x96E2},
- {0xBF67, 0x96E3},{0xBF68, 0x96E4},{0xBF69, 0x96E5},{0xBF6A, 0x96E6},{0xBF6B, 0x96E7},{0xBF6C, 0x96E8},{0xBF6D, 0x96E9},{0xBF6E, 0x96EA},
- {0xBF6F, 0x96EB},{0xBF70, 0x96EC},{0xBF71, 0x96ED},{0xBF72, 0x96EE},{0xBF73, 0x96EF},{0xBF74, 0x96F0},{0xBF75, 0x96F1},{0xBF76, 0x96F2},
- {0xBF77, 0x96F3},{0xBF78, 0x96F4},{0xBF79, 0x96F5},{0xBF7A, 0x96F6},{0xBF7B, 0x96F7},{0xBF7C, 0x96F8},{0xBF7D, 0x96F9},{0xBF7E, 0x96FA},
- {0xBF7F, 0x96FB},{0xBF80, 0x96FC},{0xBF81, 0x96FD},{0xBF82, 0x96FE},{0xBF83, 0x9741},{0xBF84, 0x9742},{0xBF85, 0x9743},{0xBF86, 0x9744},
- {0xBF87, 0x9745},{0xBF88, 0x9746},{0xBF89, 0x9747},{0xBF8A, 0x9748},{0xBF8B, 0x9749},{0xBF8C, 0x974A},{0xBF8D, 0x974B},{0xBF8E, 0x974C},
- {0xBF8F, 0x974D},{0xBF90, 0x974E},{0xBF91, 0x974F},{0xBF92, 0x9750},{0xBF93, 0x9751},{0xBF94, 0xBBCE},{0xBF95, 0x9752},{0xBF96, 0x9753},
- {0xBF97, 0x9754},{0xBF98, 0x9755},{0xBF99, 0x9756},{0xBF9A, 0x9757},{0xBF9B, 0x9758},{0xBF9C, 0x9759},{0xBF9D, 0x975A},{0xBF9E, 0x9761},
- {0xBF9F, 0x9762},{0xBFA0, 0x9763},{0xBFA1, 0x9764},{0xBFA2, 0x9765},{0xBFA3, 0x9766},{0xBFA4, 0x9767},{0xBFA5, 0x9768},{0xBFA6, 0x9769},
- {0xBFA7, 0x976A},{0xBFA8, 0x976B},{0xBFA9, 0x976C},{0xBFAA, 0x976D},{0xBFAB, 0x976E},{0xBFAC, 0x976F},{0xBFAD, 0x9770},{0xBFAE, 0x9771},
- {0xBFAF, 0x9772},{0xBFB0, 0xBBCF},{0xBFB1, 0x9773},{0xBFB2, 0x9774},{0xBFB3, 0x9775},{0xBFB4, 0x9776},{0xBFB5, 0x9777},{0xBFB6, 0x9778},
- {0xBFB7, 0x9779},{0xBFB8, 0x977A},{0xBFB9, 0x9781},{0xBFBA, 0x9782},{0xBFBB, 0x9783},{0xBFBC, 0x9784},{0xBFBD, 0x9785},{0xBFBE, 0x9786},
- {0xBFBF, 0x9787},{0xBFC0, 0x9788},{0xBFC1, 0x9789},{0xBFC2, 0x978A},{0xBFC3, 0x978B},{0xBFC4, 0x978C},{0xBFC5, 0xBBD0},{0xBFC6, 0x978D},
- {0xBFC7, 0x978E},{0xBFC8, 0x978F},{0xBFC9, 0x9790},{0xBFCA, 0x9791},{0xBFCB, 0x9792},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFCE, 0x9793},
- {0xBFCF, 0x9794},{0xBFD0, 0xBBD3},{0xBFD1, 0x9795},{0xBFD2, 0x9796},{0xBFD3, 0x9797},{0xBFD4, 0xBBD4},{0xBFD5, 0x9798},{0xBFD6, 0x9799},
- {0xBFD7, 0x979A},{0xBFD8, 0x979B},{0xBFD9, 0x979C},{0xBFDA, 0x979D},{0xBFDB, 0x979E},{0xBFDC, 0xBBD5},{0xBFDD, 0x979F},{0xBFDE, 0x97A0},
- {0xBFDF, 0xBBD6},{0xBFE0, 0x97A1},{0xBFE1, 0xBBD7},{0xBFE2, 0x97A2},{0xBFE3, 0x97A3},{0xBFE4, 0x97A4},{0xBFE5, 0x97A5},{0xBFE6, 0x97A6},
- {0xBFE7, 0x97A7},{0xBFE8, 0x97A8},{0xBFE9, 0x97A9},{0xBFEA, 0x97AA},{0xBFEB, 0x97AB},{0xBFEC, 0x97AC},{0xBFED, 0x97AD},{0xBFEE, 0x97AE},
- {0xBFEF, 0x97AF},{0xBFF0, 0x97B0},{0xBFF1, 0x97B1},{0xBFF2, 0x97B2},{0xBFF3, 0x97B3},{0xBFF4, 0x97B4},{0xBFF5, 0x97B5},{0xBFF6, 0x97B6},
- {0xBFF7, 0x97B7},{0xBFF8, 0x97B8},{0xBFF9, 0x97B9},{0xBFFA, 0x97BA},{0xBFFB, 0x97BB},{0xBFFC, 0x97BC},{0xBFFD, 0x97BD},{0xBFFE, 0x97BE},
- {0xBFFF, 0x97BF},{0xC000, 0x97C0},{0xC001, 0x97C1},{0xC002, 0x97C2},{0xC003, 0x97C3},{0xC004, 0x97C4},{0xC005, 0x97C5},{0xC006, 0x97C6},
- {0xC007, 0x97C7},{0xC008, 0x97C8},{0xC009, 0x97C9},{0xC00A, 0x97CA},{0xC00B, 0x97CB},{0xC00C, 0x97CC},{0xC00D, 0x97CD},{0xC00E, 0x97CE},
- {0xC00F, 0x97CF},{0xC010, 0x97D0},{0xC011, 0x97D1},{0xC012, 0x97D2},{0xC013, 0x97D3},{0xC014, 0x97D4},{0xC015, 0x97D5},{0xC016, 0x97D6},
- {0xC017, 0x97D7},{0xC018, 0x97D8},{0xC019, 0x97D9},{0xC01A, 0x97DA},{0xC01B, 0x97DB},{0xC01C, 0x97DC},{0xC01D, 0x97DD},{0xC01E, 0x97DE},
- {0xC01F, 0x97DF},{0xC020, 0x97E0},{0xC021, 0x97E1},{0xC022, 0x97E2},{0xC023, 0x97E3},{0xC024, 0x97E4},{0xC025, 0x97E5},{0xC026, 0x97E6},
- {0xC027, 0x97E7},{0xC028, 0x97E8},{0xC029, 0x97E9},{0xC02A, 0x97EA},{0xC02B, 0x97EB},{0xC02C, 0x97EC},{0xC02D, 0x97ED},{0xC02E, 0x97EE},
- {0xC02F, 0x97EF},{0xC030, 0x97F0},{0xC031, 0x97F1},{0xC032, 0x97F2},{0xC033, 0x97F3},{0xC034, 0x97F4},{0xC035, 0x97F5},{0xC036, 0x97F6},
- {0xC037, 0x97F7},{0xC038, 0x97F8},{0xC039, 0x97F9},{0xC03A, 0x97FA},{0xC03B, 0x97FB},{0xC03C, 0xBBD8},{0xC03D, 0x97FC},{0xC03E, 0x97FD},
- {0xC03F, 0x97FE},{0xC040, 0x9841},{0xC041, 0x9842},{0xC042, 0x9843},{0xC043, 0x9844},{0xC044, 0x9845},{0xC045, 0x9846},{0xC046, 0x9847},
- {0xC047, 0x9848},{0xC048, 0x9849},{0xC049, 0x984A},{0xC04A, 0x984B},{0xC04B, 0x984C},{0xC04C, 0x984D},{0xC04D, 0x984E},{0xC04E, 0x984F},
- {0xC04F, 0x9850},{0xC050, 0x9851},{0xC051, 0xBBD9},{0xC052, 0x9852},{0xC053, 0x9853},{0xC054, 0x9854},{0xC055, 0x9855},{0xC056, 0x9856},
- {0xC057, 0x9857},{0xC058, 0xBBDA},{0xC059, 0x9858},{0xC05A, 0x9859},{0xC05B, 0x985A},{0xC05C, 0xBBDB},{0xC05D, 0x9861},{0xC05E, 0x9862},
- {0xC05F, 0x9863},{0xC060, 0xBBDC},{0xC061, 0x9864},{0xC062, 0x9865},{0xC063, 0x9866},{0xC064, 0x9867},{0xC065, 0x9868},{0xC066, 0x9869},
- {0xC067, 0x986A},{0xC068, 0xBBDD},{0xC069, 0xBBDE},{0xC06A, 0x986B},{0xC06B, 0x986C},{0xC06C, 0x986D},{0xC06D, 0x986E},{0xC06E, 0x986F},
- {0xC06F, 0x9870},{0xC070, 0x9871},{0xC071, 0x9872},{0xC072, 0x9873},{0xC073, 0x9874},{0xC074, 0x9875},{0xC075, 0x9876},{0xC076, 0x9877},
- {0xC077, 0x9878},{0xC078, 0x9879},{0xC079, 0x987A},{0xC07A, 0x9881},{0xC07B, 0x9882},{0xC07C, 0x9883},{0xC07D, 0x9884},{0xC07E, 0x9885},
- {0xC07F, 0x9886},{0xC080, 0x9887},{0xC081, 0x9888},{0xC082, 0x9889},{0xC083, 0x988A},{0xC084, 0x988B},{0xC085, 0x988C},{0xC086, 0x988D},
- {0xC087, 0x988E},{0xC088, 0x988F},{0xC089, 0x9890},{0xC08A, 0x9891},{0xC08B, 0x9892},{0xC08C, 0x9893},{0xC08D, 0x9894},{0xC08E, 0x9895},
- {0xC08F, 0x9896},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC092, 0x9897},{0xC093, 0x9898},{0xC094, 0xBBE1},{0xC095, 0x9899},{0xC096, 0x989A},
- {0xC097, 0x989B},{0xC098, 0xBBE2},{0xC099, 0x989C},{0xC09A, 0x989D},{0xC09B, 0x989E},{0xC09C, 0x989F},{0xC09D, 0x98A0},{0xC09E, 0x98A1},
- {0xC09F, 0x98A2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A2, 0x98A3},{0xC0A3, 0xBBE5},{0xC0A4, 0x98A4},{0xC0A5, 0xBBE6},{0xC0A6, 0x98A5},
- {0xC0A7, 0x98A6},{0xC0A8, 0x98A7},{0xC0A9, 0x98A8},{0xC0AA, 0x98A9},{0xC0AB, 0x98AA},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AE, 0x98AB},
- {0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B1, 0x98AC},{0xC0B2, 0x98AD},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED},{0xC0B6, 0xBBEE},
- {0xC0B7, 0x98AE},{0xC0B8, 0x98AF},{0xC0B9, 0x98B0},{0xC0BA, 0x98B1},{0xC0BB, 0x98B2},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BE, 0x98B3},
- {0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C2, 0x98B4},{0xC0C3, 0x98B5},{0xC0C4, 0x98B6},{0xC0C5, 0xBBF4},{0xC0C6, 0x98B7},
- {0xC0C7, 0x98B8},{0xC0C8, 0xBBF5},{0xC0C9, 0xBBF6},{0xC0CA, 0x98B9},{0xC0CB, 0x98BA},{0xC0CC, 0xBBF7},{0xC0CD, 0x98BB},{0xC0CE, 0x98BC},
- {0xC0CF, 0x98BD},{0xC0D0, 0xBBF8},{0xC0D1, 0x98BE},{0xC0D2, 0x98BF},{0xC0D3, 0x98C0},{0xC0D4, 0x98C1},{0xC0D5, 0x98C2},{0xC0D6, 0x98C3},
- {0xC0D7, 0x98C4},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DA, 0x98C5},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD},{0xC0DE, 0x98C6},
- {0xC0DF, 0x98C7},{0xC0E0, 0x98C8},{0xC0E1, 0x98C9},{0xC0E2, 0x98CA},{0xC0E3, 0x98CB},{0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E6, 0x98CC},
- {0xC0E7, 0x98CD},{0xC0E8, 0xBCA2},{0xC0E9, 0x98CE},{0xC0EA, 0x98CF},{0xC0EB, 0x98D0},{0xC0EC, 0xBCA3},{0xC0ED, 0x98D1},{0xC0EE, 0x98D2},
- {0xC0EF, 0x98D3},{0xC0F0, 0x98D4},{0xC0F1, 0x98D5},{0xC0F2, 0x98D6},{0xC0F3, 0x98D7},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F6, 0x98D8},
- {0xC0F7, 0xBCA6},{0xC0F8, 0x98D9},{0xC0F9, 0xBCA7},{0xC0FA, 0x98DA},{0xC0FB, 0x98DB},{0xC0FC, 0x98DC},{0xC0FD, 0x98DD},{0xC0FE, 0x98DE},
- {0xC0FF, 0x98DF},{0xC100, 0xBCA8},{0xC101, 0x98E0},{0xC102, 0x98E1},{0xC103, 0x98E2},{0xC104, 0xBCA9},{0xC105, 0x98E3},{0xC106, 0x98E4},
- {0xC107, 0x98E5},{0xC108, 0xBCAA},{0xC109, 0x98E6},{0xC10A, 0x98E7},{0xC10B, 0x98E8},{0xC10C, 0x98E9},{0xC10D, 0x98EA},{0xC10E, 0x98EB},
- {0xC10F, 0x98EC},{0xC110, 0xBCAB},{0xC111, 0x98ED},{0xC112, 0x98EE},{0xC113, 0x98EF},{0xC114, 0x98F0},{0xC115, 0xBCAC},{0xC116, 0x98F1},
- {0xC117, 0x98F2},{0xC118, 0x98F3},{0xC119, 0x98F4},{0xC11A, 0x98F5},{0xC11B, 0x98F6},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF},
- {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC121, 0x98F7},{0xC122, 0x98F8},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC125, 0x98F9},{0xC126, 0xBCB4},
- {0xC127, 0xBCB5},{0xC128, 0x98FA},{0xC129, 0x98FB},{0xC12A, 0x98FC},{0xC12B, 0x98FD},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7},{0xC12E, 0x98FE},
- {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC132, 0x9941},{0xC133, 0x9942},{0xC134, 0x9943},{0xC135, 0x9944},{0xC136, 0xBCBB},
- {0xC137, 0x9945},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13A, 0x9946},{0xC13B, 0x9947},{0xC13C, 0xBCBE},{0xC13D, 0x9948},{0xC13E, 0x9949},
- {0xC13F, 0x994A},{0xC140, 0xBCBF},{0xC141, 0x994B},{0xC142, 0x994C},{0xC143, 0x994D},{0xC144, 0x994E},{0xC145, 0x994F},{0xC146, 0x9950},
- {0xC147, 0x9951},{0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14A, 0x9952},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC14E, 0x9953},
- {0xC14F, 0x9954},{0xC150, 0x9955},{0xC151, 0x9956},{0xC152, 0x9957},{0xC153, 0x9958},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC156, 0x9959},
- {0xC157, 0x995A},{0xC158, 0xBCC7},{0xC159, 0x9961},{0xC15A, 0x9962},{0xC15B, 0x9963},{0xC15C, 0xBCC8},{0xC15D, 0x9964},{0xC15E, 0x9965},
- {0xC15F, 0x9966},{0xC160, 0x9967},{0xC161, 0x9968},{0xC162, 0x9969},{0xC163, 0x996A},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC166, 0x996B},
- {0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC16A, 0x996C},{0xC16B, 0x996D},{0xC16C, 0x996E},{0xC16D, 0x996F},{0xC16E, 0x9970},
- {0xC16F, 0x9971},{0xC170, 0xBCCE},{0xC171, 0x9972},{0xC172, 0x9973},{0xC173, 0x9974},{0xC174, 0xBCCF},{0xC175, 0x9975},{0xC176, 0x9976},
- {0xC177, 0x9977},{0xC178, 0xBCD0},{0xC179, 0x9978},{0xC17A, 0x9979},{0xC17B, 0x997A},{0xC17C, 0x9981},{0xC17D, 0x9982},{0xC17E, 0x9983},
- {0xC17F, 0x9984},{0xC180, 0x9985},{0xC181, 0x9986},{0xC182, 0x9987},{0xC183, 0x9988},{0xC184, 0x9989},{0xC185, 0xBCD1},{0xC186, 0x998A},
- {0xC187, 0x998B},{0xC188, 0x998C},{0xC189, 0x998D},{0xC18A, 0x998E},{0xC18B, 0x998F},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4},
- {0xC18F, 0x9990},{0xC190, 0xBCD5},{0xC191, 0x9991},{0xC192, 0x9992},{0xC193, 0x9993},{0xC194, 0xBCD6},{0xC195, 0x9994},{0xC196, 0xBCD7},
- {0xC197, 0x9995},{0xC198, 0x9996},{0xC199, 0x9997},{0xC19A, 0x9998},{0xC19B, 0x9999},{0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19E, 0x999A},
- {0xC19F, 0xBCDA},{0xC1A0, 0x999B},{0xC1A1, 0xBCDB},{0xC1A2, 0x999C},{0xC1A3, 0x999D},{0xC1A4, 0x999E},{0xC1A5, 0xBCDC},{0xC1A6, 0x999F},
- {0xC1A7, 0x99A0},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AA, 0x99A1},{0xC1AB, 0x99A2},{0xC1AC, 0xBCDF},{0xC1AD, 0x99A3},{0xC1AE, 0x99A4},
- {0xC1AF, 0x99A5},{0xC1B0, 0xBCE0},{0xC1B1, 0x99A6},{0xC1B2, 0x99A7},{0xC1B3, 0x99A8},{0xC1B4, 0x99A9},{0xC1B5, 0x99AA},{0xC1B6, 0x99AB},
- {0xC1B7, 0x99AC},{0xC1B8, 0x99AD},{0xC1B9, 0x99AE},{0xC1BA, 0x99AF},{0xC1BB, 0x99B0},{0xC1BC, 0x99B1},{0xC1BD, 0xBCE1},{0xC1BE, 0x99B2},
- {0xC1BF, 0x99B3},{0xC1C0, 0x99B4},{0xC1C1, 0x99B5},{0xC1C2, 0x99B6},{0xC1C3, 0x99B7},{0xC1C4, 0xBCE2},{0xC1C5, 0x99B8},{0xC1C6, 0x99B9},
- {0xC1C7, 0x99BA},{0xC1C8, 0xBCE3},{0xC1C9, 0x99BB},{0xC1CA, 0x99BC},{0xC1CB, 0x99BD},{0xC1CC, 0xBCE4},{0xC1CD, 0x99BE},{0xC1CE, 0x99BF},
- {0xC1CF, 0x99C0},{0xC1D0, 0x99C1},{0xC1D1, 0x99C2},{0xC1D2, 0x99C3},{0xC1D3, 0x99C4},{0xC1D4, 0xBCE5},{0xC1D5, 0x99C5},{0xC1D6, 0x99C6},
- {0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7},{0xC1D9, 0x99C7},{0xC1DA, 0x99C8},{0xC1DB, 0x99C9},{0xC1DC, 0x99CA},{0xC1DD, 0x99CB},{0xC1DE, 0x99CC},
- {0xC1DF, 0x99CD},{0xC1E0, 0xBCE8},{0xC1E1, 0x99CE},{0xC1E2, 0x99CF},{0xC1E3, 0x99D0},{0xC1E4, 0xBCE9},{0xC1E5, 0x99D1},{0xC1E6, 0x99D2},
- {0xC1E7, 0x99D3},{0xC1E8, 0xBCEA},{0xC1E9, 0x99D4},{0xC1EA, 0x99D5},{0xC1EB, 0x99D6},{0xC1EC, 0x99D7},{0xC1ED, 0x99D8},{0xC1EE, 0x99D9},
- {0xC1EF, 0x99DA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F2, 0x99DB},{0xC1F3, 0xBCED},{0xC1F4, 0x99DC},{0xC1F5, 0x99DD},{0xC1F6, 0x99DE},
- {0xC1F7, 0x99DF},{0xC1F8, 0x99E0},{0xC1F9, 0x99E1},{0xC1FA, 0x99E2},{0xC1FB, 0x99E3},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF},{0xC1FE, 0x99E4},
- {0xC1FF, 0x99E5},{0xC200, 0xBCF0},{0xC201, 0x99E6},{0xC202, 0x99E7},{0xC203, 0x99E8},{0xC204, 0xBCF1},{0xC205, 0x99E9},{0xC206, 0x99EA},
- {0xC207, 0x99EB},{0xC208, 0x99EC},{0xC209, 0x99ED},{0xC20A, 0x99EE},{0xC20B, 0x99EF},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20E, 0x99F0},
- {0xC20F, 0xBCF4},{0xC210, 0x99F1},{0xC211, 0xBCF5},{0xC212, 0x99F2},{0xC213, 0x99F3},{0xC214, 0x99F4},{0xC215, 0x99F5},{0xC216, 0x99F6},
- {0xC217, 0x99F7},{0xC218, 0xBCF6},{0xC219, 0xBCF7},{0xC21A, 0x99F8},{0xC21B, 0x99F9},{0xC21C, 0xBCF8},{0xC21D, 0x99FA},{0xC21E, 0x99FB},
- {0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC221, 0x99FC},{0xC222, 0x99FD},{0xC223, 0x99FE},{0xC224, 0x9A41},{0xC225, 0x9A42},{0xC226, 0x9A43},
- {0xC227, 0x9A44},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22A, 0x9A45},{0xC22B, 0xBCFD},{0xC22C, 0x9A46},{0xC22D, 0xBCFE},{0xC22E, 0x9A47},
- {0xC22F, 0xBDA1},{0xC230, 0x9A48},{0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC233, 0x9A49},{0xC234, 0xBDA4},{0xC235, 0x9A4A},{0xC236, 0x9A4B},
- {0xC237, 0x9A4C},{0xC238, 0x9A4D},{0xC239, 0x9A4E},{0xC23A, 0x9A4F},{0xC23B, 0x9A50},{0xC23C, 0x9A51},{0xC23D, 0x9A52},{0xC23E, 0x9A53},
- {0xC23F, 0x9A54},{0xC240, 0x9A55},{0xC241, 0x9A56},{0xC242, 0x9A57},{0xC243, 0x9A58},{0xC244, 0x9A59},{0xC245, 0x9A5A},{0xC246, 0x9A61},
- {0xC247, 0x9A62},{0xC248, 0xBDA5},{0xC249, 0x9A63},{0xC24A, 0x9A64},{0xC24B, 0x9A65},{0xC24C, 0x9A66},{0xC24D, 0x9A67},{0xC24E, 0x9A68},
- {0xC24F, 0x9A69},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC252, 0x9A6A},{0xC253, 0x9A6B},{0xC254, 0xBDA8},{0xC255, 0x9A6C},{0xC256, 0x9A6D},
- {0xC257, 0x9A6E},{0xC258, 0xBDA9},{0xC259, 0x9A6F},{0xC25A, 0x9A70},{0xC25B, 0x9A71},{0xC25C, 0x9A72},{0xC25D, 0x9A73},{0xC25E, 0x9A74},
- {0xC25F, 0x9A75},{0xC260, 0xBDAA},{0xC261, 0x9A76},{0xC262, 0x9A77},{0xC263, 0x9A78},{0xC264, 0x9A79},{0xC265, 0xBDAB},{0xC266, 0x9A7A},
- {0xC267, 0x9A81},{0xC268, 0x9A82},{0xC269, 0x9A83},{0xC26A, 0x9A84},{0xC26B, 0x9A85},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC26E, 0x9A86},
- {0xC26F, 0x9A87},{0xC270, 0xBDAE},{0xC271, 0x9A88},{0xC272, 0x9A89},{0xC273, 0x9A8A},{0xC274, 0xBDAF},{0xC275, 0x9A8B},{0xC276, 0x9A8C},
- {0xC277, 0x9A8D},{0xC278, 0x9A8E},{0xC279, 0x9A8F},{0xC27A, 0x9A90},{0xC27B, 0x9A91},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1},{0xC27E, 0x9A92},
- {0xC27F, 0xBDB2},{0xC280, 0x9A93},{0xC281, 0xBDB3},{0xC282, 0x9A94},{0xC283, 0x9A95},{0xC284, 0x9A96},{0xC285, 0x9A97},{0xC286, 0x9A98},
- {0xC287, 0x9A99},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC28A, 0x9A9A},{0xC28B, 0x9A9B},{0xC28C, 0x9A9C},{0xC28D, 0x9A9D},{0xC28E, 0x9A9E},
- {0xC28F, 0x9A9F},{0xC290, 0xBDB6},{0xC291, 0x9AA0},{0xC292, 0x9AA1},{0xC293, 0x9AA2},{0xC294, 0x9AA3},{0xC295, 0x9AA4},{0xC296, 0x9AA5},
- {0xC297, 0x9AA6},{0xC298, 0xBDB7},{0xC299, 0x9AA7},{0xC29A, 0x9AA8},{0xC29B, 0xBDB8},{0xC29C, 0x9AA9},{0xC29D, 0xBDB9},{0xC29E, 0x9AAA},
- {0xC29F, 0x9AAB},{0xC2A0, 0x9AAC},{0xC2A1, 0x9AAD},{0xC2A2, 0x9AAE},{0xC2A3, 0x9AAF},{0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A6, 0x9AB0},
- {0xC2A7, 0x9AB1},{0xC2A8, 0xBDBC},{0xC2A9, 0x9AB2},{0xC2AA, 0x9AB3},{0xC2AB, 0x9AB4},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2AE, 0x9AB5},
- {0xC2AF, 0x9AB6},{0xC2B0, 0x9AB7},{0xC2B1, 0x9AB8},{0xC2B2, 0x9AB9},{0xC2B3, 0x9ABA},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B6, 0x9ABB},
- {0xC2B7, 0xBDC1},{0xC2B8, 0x9ABC},{0xC2B9, 0xBDC2},{0xC2BA, 0x9ABD},{0xC2BB, 0x9ABE},{0xC2BC, 0x9ABF},{0xC2BD, 0x9AC0},{0xC2BE, 0x9AC1},
- {0xC2BF, 0x9AC2},{0xC2C0, 0x9AC3},{0xC2C1, 0x9AC4},{0xC2C2, 0x9AC5},{0xC2C3, 0x9AC6},{0xC2C4, 0x9AC7},{0xC2C5, 0x9AC8},{0xC2C6, 0x9AC9},
- {0xC2C7, 0x9ACA},{0xC2C8, 0x9ACB},{0xC2C9, 0x9ACC},{0xC2CA, 0x9ACD},{0xC2CB, 0x9ACE},{0xC2CC, 0x9ACF},{0xC2CD, 0x9AD0},{0xC2CE, 0x9AD1},
- {0xC2CF, 0x9AD2},{0xC2D0, 0x9AD3},{0xC2D1, 0x9AD4},{0xC2D2, 0x9AD5},{0xC2D3, 0x9AD6},{0xC2D4, 0x9AD7},{0xC2D5, 0x9AD8},{0xC2D6, 0x9AD9},
- {0xC2D7, 0x9ADA},{0xC2D8, 0x9ADB},{0xC2D9, 0x9ADC},{0xC2DA, 0x9ADD},{0xC2DB, 0x9ADE},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2DE, 0x9ADF},
- {0xC2DF, 0x9AE0},{0xC2E0, 0xBDC5},{0xC2E1, 0x9AE1},{0xC2E2, 0x9AE2},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2E5, 0x9AE3},{0xC2E6, 0x9AE4},
- {0xC2E7, 0x9AE5},{0xC2E8, 0x9AE6},{0xC2E9, 0x9AE7},{0xC2EA, 0x9AE8},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9},{0xC2ED, 0xBDCA},{0xC2EE, 0x9AE9},
- {0xC2EF, 0xBDCB},{0xC2F0, 0x9AEA},{0xC2F1, 0xBDCC},{0xC2F2, 0x9AEB},{0xC2F3, 0x9AEC},{0xC2F4, 0x9AED},{0xC2F5, 0x9AEE},{0xC2F6, 0xBDCD},
- {0xC2F7, 0x9AEF},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FA, 0x9AF0},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1},{0xC2FD, 0x9AF1},{0xC2FE, 0x9AF2},
- {0xC2FF, 0x9AF3},{0xC300, 0xBDD2},{0xC301, 0x9AF4},{0xC302, 0x9AF5},{0xC303, 0x9AF6},{0xC304, 0x9AF7},{0xC305, 0x9AF8},{0xC306, 0x9AF9},
- {0xC307, 0x9AFA},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30A, 0x9AFB},{0xC30B, 0x9AFC},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC30E, 0x9AFD},
- {0xC30F, 0x9AFE},{0xC310, 0x9B41},{0xC311, 0x9B42},{0xC312, 0x9B43},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9},{0xC316, 0x9B44},
- {0xC317, 0x9B45},{0xC318, 0xBDDA},{0xC319, 0x9B46},{0xC31A, 0x9B47},{0xC31B, 0x9B48},{0xC31C, 0xBDDB},{0xC31D, 0x9B49},{0xC31E, 0x9B4A},
- {0xC31F, 0x9B4B},{0xC320, 0x9B4C},{0xC321, 0x9B4D},{0xC322, 0x9B4E},{0xC323, 0x9B4F},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC326, 0x9B50},
- {0xC327, 0x9B51},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC32A, 0x9B52},{0xC32B, 0x9B53},{0xC32C, 0x9B54},{0xC32D, 0x9B55},{0xC32E, 0x9B56},
- {0xC32F, 0x9B57},{0xC330, 0x9B58},{0xC331, 0x9B59},{0xC332, 0x9B5A},{0xC333, 0x9B61},{0xC334, 0x9B62},{0xC335, 0x9B63},{0xC336, 0x9B64},
- {0xC337, 0x9B65},{0xC338, 0x9B66},{0xC339, 0x9B67},{0xC33A, 0x9B68},{0xC33B, 0x9B69},{0xC33C, 0x9B6A},{0xC33D, 0x9B6B},{0xC33E, 0x9B6C},
- {0xC33F, 0x9B6D},{0xC340, 0x9B6E},{0xC341, 0x9B6F},{0xC342, 0x9B70},{0xC343, 0x9B71},{0xC344, 0x9B72},{0xC345, 0xBDE0},{0xC346, 0x9B73},
- {0xC347, 0x9B74},{0xC348, 0x9B75},{0xC349, 0x9B76},{0xC34A, 0x9B77},{0xC34B, 0x9B78},{0xC34C, 0x9B79},{0xC34D, 0x9B7A},{0xC34E, 0x9B81},
- {0xC34F, 0x9B82},{0xC350, 0x9B83},{0xC351, 0x9B84},{0xC352, 0x9B85},{0xC353, 0x9B86},{0xC354, 0x9B87},{0xC355, 0x9B88},{0xC356, 0x9B89},
- {0xC357, 0x9B8A},{0xC358, 0x9B8B},{0xC359, 0x9B8C},{0xC35A, 0x9B8D},{0xC35B, 0x9B8E},{0xC35C, 0x9B8F},{0xC35D, 0x9B90},{0xC35E, 0x9B91},
- {0xC35F, 0x9B92},{0xC360, 0x9B93},{0xC361, 0x9B94},{0xC362, 0x9B95},{0xC363, 0x9B96},{0xC364, 0x9B97},{0xC365, 0x9B98},{0xC366, 0x9B99},
- {0xC367, 0x9B9A},{0xC368, 0xBDE1},{0xC369, 0xBDE2},{0xC36A, 0x9B9B},{0xC36B, 0x9B9C},{0xC36C, 0xBDE3},{0xC36D, 0x9B9D},{0xC36E, 0x9B9E},
- {0xC36F, 0x9B9F},{0xC370, 0xBDE4},{0xC371, 0x9BA0},{0xC372, 0xBDE5},{0xC373, 0x9BA1},{0xC374, 0x9BA2},{0xC375, 0x9BA3},{0xC376, 0x9BA4},
- {0xC377, 0x9BA5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37A, 0x9BA6},{0xC37B, 0x9BA7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9},{0xC37E, 0x9BA8},
- {0xC37F, 0x9BA9},{0xC380, 0x9BAA},{0xC381, 0x9BAB},{0xC382, 0x9BAC},{0xC383, 0x9BAD},{0xC384, 0xBDEA},{0xC385, 0x9BAE},{0xC386, 0x9BAF},
- {0xC387, 0x9BB0},{0xC388, 0xBDEB},{0xC389, 0x9BB1},{0xC38A, 0x9BB2},{0xC38B, 0x9BB3},{0xC38C, 0xBDEC},{0xC38D, 0x9BB4},{0xC38E, 0x9BB5},
- {0xC38F, 0x9BB6},{0xC390, 0x9BB7},{0xC391, 0x9BB8},{0xC392, 0x9BB9},{0xC393, 0x9BBA},{0xC394, 0x9BBB},{0xC395, 0x9BBC},{0xC396, 0x9BBD},
- {0xC397, 0x9BBE},{0xC398, 0x9BBF},{0xC399, 0x9BC0},{0xC39A, 0x9BC1},{0xC39B, 0x9BC2},{0xC39C, 0x9BC3},{0xC39D, 0x9BC4},{0xC39E, 0x9BC5},
- {0xC39F, 0x9BC6},{0xC3A0, 0x9BC7},{0xC3A1, 0x9BC8},{0xC3A2, 0x9BC9},{0xC3A3, 0x9BCA},{0xC3A4, 0x9BCB},{0xC3A5, 0x9BCC},{0xC3A6, 0x9BCD},
- {0xC3A7, 0x9BCE},{0xC3A8, 0x9BCF},{0xC3A9, 0x9BD0},{0xC3AA, 0x9BD1},{0xC3AB, 0x9BD2},{0xC3AC, 0x9BD3},{0xC3AD, 0x9BD4},{0xC3AE, 0x9BD5},
- {0xC3AF, 0x9BD6},{0xC3B0, 0x9BD7},{0xC3B1, 0x9BD8},{0xC3B2, 0x9BD9},{0xC3B3, 0x9BDA},{0xC3B4, 0x9BDB},{0xC3B5, 0x9BDC},{0xC3B6, 0x9BDD},
- {0xC3B7, 0x9BDE},{0xC3B8, 0x9BDF},{0xC3B9, 0x9BE0},{0xC3BA, 0x9BE1},{0xC3BB, 0x9BE2},{0xC3BC, 0x9BE3},{0xC3BD, 0x9BE4},{0xC3BE, 0x9BE5},
- {0xC3BF, 0x9BE6},{0xC3C0, 0xBDED},{0xC3C1, 0x9BE7},{0xC3C2, 0x9BE8},{0xC3C3, 0x9BE9},{0xC3C4, 0x9BEA},{0xC3C5, 0x9BEB},{0xC3C6, 0x9BEC},
- {0xC3C7, 0x9BED},{0xC3C8, 0x9BEE},{0xC3C9, 0x9BEF},{0xC3CA, 0x9BF0},{0xC3CB, 0x9BF1},{0xC3CC, 0x9BF2},{0xC3CD, 0x9BF3},{0xC3CE, 0x9BF4},
- {0xC3CF, 0x9BF5},{0xC3D0, 0x9BF6},{0xC3D1, 0x9BF7},{0xC3D2, 0x9BF8},{0xC3D3, 0x9BF9},{0xC3D4, 0x9BFA},{0xC3D5, 0x9BFB},{0xC3D6, 0x9BFC},
- {0xC3D7, 0x9BFD},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DA, 0x9BFE},{0xC3DB, 0x9C41},{0xC3DC, 0xBDF0},{0xC3DD, 0x9C42},{0xC3DE, 0x9C43},
- {0xC3DF, 0xBDF1},{0xC3E0, 0xBDF2},{0xC3E1, 0x9C44},{0xC3E2, 0xBDF3},{0xC3E3, 0x9C45},{0xC3E4, 0x9C46},{0xC3E5, 0x9C47},{0xC3E6, 0x9C48},
- {0xC3E7, 0x9C49},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3EA, 0x9C4A},{0xC3EB, 0x9C4B},{0xC3EC, 0x9C4C},{0xC3ED, 0xBDF6},{0xC3EE, 0x9C4D},
- {0xC3EF, 0x9C4E},{0xC3F0, 0x9C4F},{0xC3F1, 0x9C50},{0xC3F2, 0x9C51},{0xC3F3, 0x9C52},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F6, 0x9C53},
- {0xC3F7, 0x9C54},{0xC3F8, 0xBDF9},{0xC3F9, 0x9C55},{0xC3FA, 0x9C56},{0xC3FB, 0x9C57},{0xC3FC, 0x9C58},{0xC3FD, 0x9C59},{0xC3FE, 0x9C5A},
- {0xC3FF, 0x9C61},{0xC400, 0x9C62},{0xC401, 0x9C63},{0xC402, 0x9C64},{0xC403, 0x9C65},{0xC404, 0x9C66},{0xC405, 0x9C67},{0xC406, 0x9C68},
- {0xC407, 0x9C69},{0xC408, 0xBDFA},{0xC409, 0x9C6A},{0xC40A, 0x9C6B},{0xC40B, 0x9C6C},{0xC40C, 0x9C6D},{0xC40D, 0x9C6E},{0xC40E, 0x9C6F},
- {0xC40F, 0x9C70},{0xC410, 0xBDFB},{0xC411, 0x9C71},{0xC412, 0x9C72},{0xC413, 0x9C73},{0xC414, 0x9C74},{0xC415, 0x9C75},{0xC416, 0x9C76},
- {0xC417, 0x9C77},{0xC418, 0x9C78},{0xC419, 0x9C79},{0xC41A, 0x9C7A},{0xC41B, 0x9C81},{0xC41C, 0x9C82},{0xC41D, 0x9C83},{0xC41E, 0x9C84},
- {0xC41F, 0x9C85},{0xC420, 0x9C86},{0xC421, 0x9C87},{0xC422, 0x9C88},{0xC423, 0x9C89},{0xC424, 0xBDFC},{0xC425, 0x9C8A},{0xC426, 0x9C8B},
- {0xC427, 0x9C8C},{0xC428, 0x9C8D},{0xC429, 0x9C8E},{0xC42A, 0x9C8F},{0xC42B, 0x9C90},{0xC42C, 0xBDFD},{0xC42D, 0x9C91},{0xC42E, 0x9C92},
- {0xC42F, 0x9C93},{0xC430, 0xBDFE},{0xC431, 0x9C94},{0xC432, 0x9C95},{0xC433, 0x9C96},{0xC434, 0xBEA1},{0xC435, 0x9C97},{0xC436, 0x9C98},
- {0xC437, 0x9C99},{0xC438, 0x9C9A},{0xC439, 0x9C9B},{0xC43A, 0x9C9C},{0xC43B, 0x9C9D},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3},{0xC43E, 0x9C9E},
- {0xC43F, 0x9C9F},{0xC440, 0x9CA0},{0xC441, 0x9CA1},{0xC442, 0x9CA2},{0xC443, 0x9CA3},{0xC444, 0x9CA4},{0xC445, 0x9CA5},{0xC446, 0x9CA6},
- {0xC447, 0x9CA7},{0xC448, 0xBEA4},{0xC449, 0x9CA8},{0xC44A, 0x9CA9},{0xC44B, 0x9CAA},{0xC44C, 0x9CAB},{0xC44D, 0x9CAC},{0xC44E, 0x9CAD},
- {0xC44F, 0x9CAE},{0xC450, 0x9CAF},{0xC451, 0x9CB0},{0xC452, 0x9CB1},{0xC453, 0x9CB2},{0xC454, 0x9CB3},{0xC455, 0x9CB4},{0xC456, 0x9CB5},
- {0xC457, 0x9CB6},{0xC458, 0x9CB7},{0xC459, 0x9CB8},{0xC45A, 0x9CB9},{0xC45B, 0x9CBA},{0xC45C, 0x9CBB},{0xC45D, 0x9CBC},{0xC45E, 0x9CBD},
- {0xC45F, 0x9CBE},{0xC460, 0x9CBF},{0xC461, 0x9CC0},{0xC462, 0x9CC1},{0xC463, 0x9CC2},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC466, 0x9CC3},
- {0xC467, 0x9CC4},{0xC468, 0xBEA7},{0xC469, 0x9CC5},{0xC46A, 0x9CC6},{0xC46B, 0x9CC7},{0xC46C, 0xBEA8},{0xC46D, 0x9CC8},{0xC46E, 0x9CC9},
- {0xC46F, 0x9CCA},{0xC470, 0x9CCB},{0xC471, 0x9CCC},{0xC472, 0x9CCD},{0xC473, 0x9CCE},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC476, 0x9CCF},
- {0xC477, 0x9CD0},{0xC478, 0x9CD1},{0xC479, 0xBEAB},{0xC47A, 0x9CD2},{0xC47B, 0x9CD3},{0xC47C, 0x9CD4},{0xC47D, 0x9CD5},{0xC47E, 0x9CD6},
- {0xC47F, 0x9CD7},{0xC480, 0xBEAC},{0xC481, 0x9CD8},{0xC482, 0x9CD9},{0xC483, 0x9CDA},{0xC484, 0x9CDB},{0xC485, 0x9CDC},{0xC486, 0x9CDD},
- {0xC487, 0x9CDE},{0xC488, 0x9CDF},{0xC489, 0x9CE0},{0xC48A, 0x9CE1},{0xC48B, 0x9CE2},{0xC48C, 0x9CE3},{0xC48D, 0x9CE4},{0xC48E, 0x9CE5},
- {0xC48F, 0x9CE6},{0xC490, 0x9CE7},{0xC491, 0x9CE8},{0xC492, 0x9CE9},{0xC493, 0x9CEA},{0xC494, 0xBEAD},{0xC495, 0x9CEB},{0xC496, 0x9CEC},
- {0xC497, 0x9CED},{0xC498, 0x9CEE},{0xC499, 0x9CEF},{0xC49A, 0x9CF0},{0xC49B, 0x9CF1},{0xC49C, 0xBEAE},{0xC49D, 0x9CF2},{0xC49E, 0x9CF3},
- {0xC49F, 0x9CF4},{0xC4A0, 0x9CF5},{0xC4A1, 0x9CF6},{0xC4A2, 0x9CF7},{0xC4A3, 0x9CF8},{0xC4A4, 0x9CF9},{0xC4A5, 0x9CFA},{0xC4A6, 0x9CFB},
- {0xC4A7, 0x9CFC},{0xC4A8, 0x9CFD},{0xC4A9, 0x9CFE},{0xC4AA, 0x9D41},{0xC4AB, 0x9D42},{0xC4AC, 0x9D43},{0xC4AD, 0x9D44},{0xC4AE, 0x9D45},
- {0xC4AF, 0x9D46},{0xC4B0, 0x9D47},{0xC4B1, 0x9D48},{0xC4B2, 0x9D49},{0xC4B3, 0x9D4A},{0xC4B4, 0x9D4B},{0xC4B5, 0x9D4C},{0xC4B6, 0x9D4D},
- {0xC4B7, 0x9D4E},{0xC4B8, 0xBEAF},{0xC4B9, 0x9D4F},{0xC4BA, 0x9D50},{0xC4BB, 0x9D51},{0xC4BC, 0xBEB0},{0xC4BD, 0x9D52},{0xC4BE, 0x9D53},
- {0xC4BF, 0x9D54},{0xC4C0, 0x9D55},{0xC4C1, 0x9D56},{0xC4C2, 0x9D57},{0xC4C3, 0x9D58},{0xC4C4, 0x9D59},{0xC4C5, 0x9D5A},{0xC4C6, 0x9D61},
- {0xC4C7, 0x9D62},{0xC4C8, 0x9D63},{0xC4C9, 0x9D64},{0xC4CA, 0x9D65},{0xC4CB, 0x9D66},{0xC4CC, 0x9D67},{0xC4CD, 0x9D68},{0xC4CE, 0x9D69},
- {0xC4CF, 0x9D6A},{0xC4D0, 0x9D6B},{0xC4D1, 0x9D6C},{0xC4D2, 0x9D6D},{0xC4D3, 0x9D6E},{0xC4D4, 0x9D6F},{0xC4D5, 0x9D70},{0xC4D6, 0x9D71},
- {0xC4D7, 0x9D72},{0xC4D8, 0x9D73},{0xC4D9, 0x9D74},{0xC4DA, 0x9D75},{0xC4DB, 0x9D76},{0xC4DC, 0x9D77},{0xC4DD, 0x9D78},{0xC4DE, 0x9D79},
- {0xC4DF, 0x9D7A},{0xC4E0, 0x9D81},{0xC4E1, 0x9D82},{0xC4E2, 0x9D83},{0xC4E3, 0x9D84},{0xC4E4, 0x9D85},{0xC4E5, 0x9D86},{0xC4E6, 0x9D87},
- {0xC4E7, 0x9D88},{0xC4E8, 0x9D89},{0xC4E9, 0xBEB1},{0xC4EA, 0x9D8A},{0xC4EB, 0x9D8B},{0xC4EC, 0x9D8C},{0xC4ED, 0x9D8D},{0xC4EE, 0x9D8E},
- {0xC4EF, 0x9D8F},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3},{0xC4F2, 0x9D90},{0xC4F3, 0x9D91},{0xC4F4, 0xBEB4},{0xC4F5, 0x9D92},{0xC4F6, 0x9D93},
- {0xC4F7, 0x9D94},{0xC4F8, 0xBEB5},{0xC4F9, 0x9D95},{0xC4FA, 0xBEB6},{0xC4FB, 0x9D96},{0xC4FC, 0x9D97},{0xC4FD, 0x9D98},{0xC4FE, 0x9D99},
- {0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC502, 0x9D9A},{0xC503, 0x9D9B},{0xC504, 0x9D9C},{0xC505, 0x9D9D},{0xC506, 0x9D9E},
- {0xC507, 0x9D9F},{0xC508, 0x9DA0},{0xC509, 0x9DA1},{0xC50A, 0x9DA2},{0xC50B, 0x9DA3},{0xC50C, 0xBEBA},{0xC50D, 0x9DA4},{0xC50E, 0x9DA5},
- {0xC50F, 0x9DA6},{0xC510, 0xBEBB},{0xC511, 0x9DA7},{0xC512, 0x9DA8},{0xC513, 0x9DA9},{0xC514, 0xBEBC},{0xC515, 0x9DAA},{0xC516, 0x9DAB},
- {0xC517, 0x9DAC},{0xC518, 0x9DAD},{0xC519, 0x9DAE},{0xC51A, 0x9DAF},{0xC51B, 0x9DB0},{0xC51C, 0xBEBD},{0xC51D, 0x9DB1},{0xC51E, 0x9DB2},
- {0xC51F, 0x9DB3},{0xC520, 0x9DB4},{0xC521, 0x9DB5},{0xC522, 0x9DB6},{0xC523, 0x9DB7},{0xC524, 0x9DB8},{0xC525, 0x9DB9},{0xC526, 0x9DBA},
- {0xC527, 0x9DBB},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52A, 0x9DBC},{0xC52B, 0x9DBD},{0xC52C, 0xBEC0},{0xC52D, 0x9DBE},{0xC52E, 0x9DBF},
- {0xC52F, 0x9DC0},{0xC530, 0xBEC1},{0xC531, 0x9DC1},{0xC532, 0x9DC2},{0xC533, 0x9DC3},{0xC534, 0x9DC4},{0xC535, 0x9DC5},{0xC536, 0x9DC6},
- {0xC537, 0x9DC7},{0xC538, 0xBEC2},{0xC539, 0xBEC3},{0xC53A, 0x9DC8},{0xC53B, 0xBEC4},{0xC53C, 0x9DC9},{0xC53D, 0xBEC5},{0xC53E, 0x9DCA},
- {0xC53F, 0x9DCB},{0xC540, 0x9DCC},{0xC541, 0x9DCD},{0xC542, 0x9DCE},{0xC543, 0x9DCF},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC546, 0x9DD0},
- {0xC547, 0x9DD1},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54B, 0x9DD2},{0xC54C, 0xBECB},{0xC54D, 0xBECC},{0xC54E, 0xBECD},
- {0xC54F, 0x9DD3},{0xC550, 0x9DD4},{0xC551, 0x9DD5},{0xC552, 0x9DD6},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC556, 0x9DD7},
- {0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3},{0xC55A, 0x9DD8},{0xC55B, 0x9DD9},{0xC55C, 0x9DDA},{0xC55D, 0xBED4},{0xC55E, 0xBED5},
- {0xC55F, 0x9DDB},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC562, 0x9DDC},{0xC563, 0x9DDD},{0xC564, 0xBED8},{0xC565, 0x9DDE},{0xC566, 0x9DDF},
- {0xC567, 0x9DE0},{0xC568, 0xBED9},{0xC569, 0x9DE1},{0xC56A, 0x9DE2},{0xC56B, 0x9DE3},{0xC56C, 0x9DE4},{0xC56D, 0x9DE5},{0xC56E, 0x9DE6},
- {0xC56F, 0x9DE7},{0xC570, 0xBEDA},{0xC571, 0xBEDB},{0xC572, 0x9DE8},{0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC576, 0x9DE9},
- {0xC577, 0x9DEA},{0xC578, 0x9DEB},{0xC579, 0x9DEC},{0xC57A, 0x9DED},{0xC57B, 0x9DEE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC57E, 0x9DEF},
- {0xC57F, 0x9DF0},{0xC580, 0xBEE1},{0xC581, 0x9DF1},{0xC582, 0x9DF2},{0xC583, 0x9DF3},{0xC584, 0xBEE2},{0xC585, 0x9DF4},{0xC586, 0x9DF5},
- {0xC587, 0xBEE3},{0xC588, 0x9DF6},{0xC589, 0x9DF7},{0xC58A, 0x9DF8},{0xC58B, 0x9DF9},{0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58E, 0x9DFA},
- {0xC58F, 0xBEE6},{0xC590, 0x9DFB},{0xC591, 0xBEE7},{0xC592, 0x9DFC},{0xC593, 0x9DFD},{0xC594, 0x9DFE},{0xC595, 0xBEE8},{0xC596, 0x9E41},
- {0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC599, 0x9E42},{0xC59A, 0x9E43},{0xC59B, 0x9E44},{0xC59C, 0xBEEB},{0xC59D, 0x9E45},{0xC59E, 0x9E46},
- {0xC59F, 0x9E47},{0xC5A0, 0xBEEC},{0xC5A1, 0x9E48},{0xC5A2, 0x9E49},{0xC5A3, 0x9E4A},{0xC5A4, 0x9E4B},{0xC5A5, 0x9E4C},{0xC5A6, 0x9E4D},
- {0xC5A7, 0x9E4E},{0xC5A8, 0x9E4F},{0xC5A9, 0xBEED},{0xC5AA, 0x9E50},{0xC5AB, 0x9E51},{0xC5AC, 0x9E52},{0xC5AD, 0x9E53},{0xC5AE, 0x9E54},
- {0xC5AF, 0x9E55},{0xC5B0, 0x9E56},{0xC5B1, 0x9E57},{0xC5B2, 0x9E58},{0xC5B3, 0x9E59},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B6, 0x9E5A},
- {0xC5B7, 0x9E61},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BA, 0x9E62},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3},{0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5},
- {0xC5BF, 0x9E63},{0xC5C0, 0x9E64},{0xC5C1, 0x9E65},{0xC5C2, 0x9E66},{0xC5C3, 0x9E67},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8},
- {0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB},{0xC5CA, 0xBEFC},{0xC5CB, 0x9E68},{0xC5CC, 0xBEFD},{0xC5CD, 0x9E69},{0xC5CE, 0xBEFE},
- {0xC5CF, 0x9E6A},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D2, 0x9E6B},{0xC5D3, 0x9E6C},{0xC5D4, 0xBFA3},{0xC5D5, 0x9E6D},{0xC5D6, 0x9E6E},
- {0xC5D7, 0x9E6F},{0xC5D8, 0xBFA4},{0xC5D9, 0x9E70},{0xC5DA, 0x9E71},{0xC5DB, 0x9E72},{0xC5DC, 0x9E73},{0xC5DD, 0x9E74},{0xC5DE, 0x9E75},
- {0xC5DF, 0x9E76},{0xC5E0, 0xBFA5},{0xC5E1, 0xBFA6},{0xC5E2, 0x9E77},{0xC5E3, 0xBFA7},{0xC5E4, 0x9E78},{0xC5E5, 0xBFA8},{0xC5E6, 0x9E79},
- {0xC5E7, 0x9E7A},{0xC5E8, 0x9E81},{0xC5E9, 0x9E82},{0xC5EA, 0x9E83},{0xC5EB, 0x9E84},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB},
- {0xC5EF, 0x9E85},{0xC5F0, 0xBFAC},{0xC5F1, 0x9E86},{0xC5F2, 0x9E87},{0xC5F3, 0x9E88},{0xC5F4, 0xBFAD},{0xC5F5, 0x9E89},{0xC5F6, 0xBFAE},
- {0xC5F7, 0xBFAF},{0xC5F8, 0x9E8A},{0xC5F9, 0x9E8B},{0xC5FA, 0x9E8C},{0xC5FB, 0x9E8D},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2},
- {0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5},{0xC602, 0x9E8E},{0xC603, 0x9E8F},{0xC604, 0x9E90},{0xC605, 0xBFB6},{0xC606, 0xBFB7},
- {0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC609, 0x9E91},{0xC60A, 0x9E92},{0xC60B, 0x9E93},{0xC60C, 0xBFBA},{0xC60D, 0x9E94},{0xC60E, 0x9E95},
- {0xC60F, 0x9E96},{0xC610, 0xBFBB},{0xC611, 0x9E97},{0xC612, 0x9E98},{0xC613, 0x9E99},{0xC614, 0x9E9A},{0xC615, 0x9E9B},{0xC616, 0x9E9C},
- {0xC617, 0x9E9D},{0xC618, 0xBFBC},{0xC619, 0xBFBD},{0xC61A, 0x9E9E},{0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC61D, 0x9E9F},{0xC61E, 0x9EA0},
- {0xC61F, 0x9EA1},{0xC620, 0x9EA2},{0xC621, 0x9EA3},{0xC622, 0x9EA4},{0xC623, 0x9EA5},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC626, 0x9EA6},
- {0xC627, 0x9EA7},{0xC628, 0xBFC2},{0xC629, 0x9EA8},{0xC62A, 0x9EA9},{0xC62B, 0x9EAA},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5},
- {0xC62F, 0x9EAB},{0xC630, 0xBFC6},{0xC631, 0x9EAC},{0xC632, 0x9EAD},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC636, 0x9EAE},
- {0xC637, 0xBFCA},{0xC638, 0x9EAF},{0xC639, 0xBFCB},{0xC63A, 0x9EB0},{0xC63B, 0xBFCC},{0xC63C, 0x9EB1},{0xC63D, 0x9EB2},{0xC63E, 0x9EB3},
- {0xC63F, 0x9EB4},{0xC640, 0xBFCD},{0xC641, 0xBFCE},{0xC642, 0x9EB5},{0xC643, 0x9EB6},{0xC644, 0xBFCF},{0xC645, 0x9EB7},{0xC646, 0x9EB8},
- {0xC647, 0x9EB9},{0xC648, 0xBFD0},{0xC649, 0x9EBA},{0xC64A, 0x9EBB},{0xC64B, 0x9EBC},{0xC64C, 0x9EBD},{0xC64D, 0x9EBE},{0xC64E, 0x9EBF},
- {0xC64F, 0x9EC0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC652, 0x9EC1},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5},{0xC656, 0x9EC2},
- {0xC657, 0x9EC3},{0xC658, 0x9EC4},{0xC659, 0x9EC5},{0xC65A, 0x9EC6},{0xC65B, 0x9EC7},{0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC65E, 0x9EC8},
- {0xC65F, 0x9EC9},{0xC660, 0xBFD8},{0xC661, 0x9ECA},{0xC662, 0x9ECB},{0xC663, 0x9ECC},{0xC664, 0x9ECD},{0xC665, 0x9ECE},{0xC666, 0x9ECF},
- {0xC667, 0x9ED0},{0xC668, 0x9ED1},{0xC669, 0x9ED2},{0xC66A, 0x9ED3},{0xC66B, 0x9ED4},{0xC66C, 0xBFD9},{0xC66D, 0x9ED5},{0xC66E, 0x9ED6},
- {0xC66F, 0xBFDA},{0xC670, 0x9ED7},{0xC671, 0xBFDB},{0xC672, 0x9ED8},{0xC673, 0x9ED9},{0xC674, 0x9EDA},{0xC675, 0x9EDB},{0xC676, 0x9EDC},
- {0xC677, 0x9EDD},{0xC678, 0xBFDC},{0xC679, 0xBFDD},{0xC67A, 0x9EDE},{0xC67B, 0x9EDF},{0xC67C, 0xBFDE},{0xC67D, 0x9EE0},{0xC67E, 0x9EE1},
- {0xC67F, 0x9EE2},{0xC680, 0xBFDF},{0xC681, 0x9EE3},{0xC682, 0x9EE4},{0xC683, 0x9EE5},{0xC684, 0x9EE6},{0xC685, 0x9EE7},{0xC686, 0x9EE8},
- {0xC687, 0x9EE9},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68A, 0x9EEA},{0xC68B, 0xBFE2},{0xC68C, 0x9EEB},{0xC68D, 0xBFE3},{0xC68E, 0x9EEC},
- {0xC68F, 0x9EED},{0xC690, 0x9EEE},{0xC691, 0x9EEF},{0xC692, 0x9EF0},{0xC693, 0x9EF1},{0xC694, 0xBFE4},{0xC695, 0xBFE5},{0xC696, 0x9EF2},
- {0xC697, 0x9EF3},{0xC698, 0xBFE6},{0xC699, 0x9EF4},{0xC69A, 0x9EF5},{0xC69B, 0x9EF6},{0xC69C, 0xBFE7},{0xC69D, 0x9EF7},{0xC69E, 0x9EF8},
- {0xC69F, 0x9EF9},{0xC6A0, 0x9EFA},{0xC6A1, 0x9EFB},{0xC6A2, 0x9EFC},{0xC6A3, 0x9EFD},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A6, 0x9EFE},
- {0xC6A7, 0xBFEA},{0xC6A8, 0x9F41},{0xC6A9, 0xBFEB},{0xC6AA, 0x9F42},{0xC6AB, 0x9F43},{0xC6AC, 0x9F44},{0xC6AD, 0x9F45},{0xC6AE, 0x9F46},
- {0xC6AF, 0x9F47},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED},{0xC6B2, 0x9F48},{0xC6B3, 0x9F49},{0xC6B4, 0xBFEE},{0xC6B5, 0x9F4A},{0xC6B6, 0x9F4B},
- {0xC6B7, 0x9F4C},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6BB, 0x9F4D},{0xC6BC, 0x9F4E},{0xC6BD, 0x9F4F},{0xC6BE, 0x9F50},
- {0xC6BF, 0x9F51},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C2, 0x9F52},{0xC6C3, 0xBFF4},{0xC6C4, 0x9F53},{0xC6C5, 0xBFF5},{0xC6C6, 0x9F54},
- {0xC6C7, 0x9F55},{0xC6C8, 0x9F56},{0xC6C9, 0x9F57},{0xC6CA, 0x9F58},{0xC6CB, 0x9F59},{0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6CE, 0x9F5A},
- {0xC6CF, 0x9F61},{0xC6D0, 0xBFF8},{0xC6D1, 0x9F62},{0xC6D2, 0x9F63},{0xC6D3, 0x9F64},{0xC6D4, 0xBFF9},{0xC6D5, 0x9F65},{0xC6D6, 0x9F66},
- {0xC6D7, 0x9F67},{0xC6D8, 0x9F68},{0xC6D9, 0x9F69},{0xC6DA, 0x9F6A},{0xC6DB, 0x9F6B},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6DE, 0x9F6C},
- {0xC6DF, 0x9F6D},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD},{0xC6E2, 0x9F6E},{0xC6E3, 0x9F6F},{0xC6E4, 0x9F70},{0xC6E5, 0x9F71},{0xC6E6, 0x9F72},
- {0xC6E7, 0x9F73},{0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EA, 0x9F74},{0xC6EB, 0x9F75},{0xC6EC, 0xC0A2},{0xC6ED, 0x9F76},{0xC6EE, 0x9F77},
- {0xC6EF, 0x9F78},{0xC6F0, 0xC0A3},{0xC6F1, 0x9F79},{0xC6F2, 0x9F7A},{0xC6F3, 0x9F81},{0xC6F4, 0x9F82},{0xC6F5, 0x9F83},{0xC6F6, 0x9F84},
- {0xC6F7, 0x9F85},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FA, 0x9F86},{0xC6FB, 0x9F87},{0xC6FC, 0x9F88},{0xC6FD, 0xC0A6},{0xC6FE, 0x9F89},
- {0xC6FF, 0x9F8A},{0xC700, 0x9F8B},{0xC701, 0x9F8C},{0xC702, 0x9F8D},{0xC703, 0x9F8E},{0xC704, 0xC0A7},{0xC705, 0xC0A8},{0xC706, 0x9F8F},
- {0xC707, 0x9F90},{0xC708, 0xC0A9},{0xC709, 0x9F91},{0xC70A, 0x9F92},{0xC70B, 0x9F93},{0xC70C, 0xC0AA},{0xC70D, 0x9F94},{0xC70E, 0x9F95},
- {0xC70F, 0x9F96},{0xC710, 0x9F97},{0xC711, 0x9F98},{0xC712, 0x9F99},{0xC713, 0x9F9A},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC716, 0x9F9B},
- {0xC717, 0xC0AD},{0xC718, 0x9F9C},{0xC719, 0xC0AE},{0xC71A, 0x9F9D},{0xC71B, 0x9F9E},{0xC71C, 0x9F9F},{0xC71D, 0x9FA0},{0xC71E, 0x9FA1},
- {0xC71F, 0x9FA2},{0xC720, 0xC0AF},{0xC721, 0xC0B0},{0xC722, 0x9FA3},{0xC723, 0x9FA4},{0xC724, 0xC0B1},{0xC725, 0x9FA5},{0xC726, 0x9FA6},
- {0xC727, 0x9FA7},{0xC728, 0xC0B2},{0xC729, 0x9FA8},{0xC72A, 0x9FA9},{0xC72B, 0x9FAA},{0xC72C, 0x9FAB},{0xC72D, 0x9FAC},{0xC72E, 0x9FAD},
- {0xC72F, 0x9FAE},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC732, 0x9FAF},{0xC733, 0xC0B5},{0xC734, 0x9FB0},{0xC735, 0xC0B6},{0xC736, 0x9FB1},
- {0xC737, 0xC0B7},{0xC738, 0x9FB2},{0xC739, 0x9FB3},{0xC73A, 0x9FB4},{0xC73B, 0x9FB5},{0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC73E, 0x9FB6},
- {0xC73F, 0x9FB7},{0xC740, 0xC0BA},{0xC741, 0x9FB8},{0xC742, 0x9FB9},{0xC743, 0x9FBA},{0xC744, 0xC0BB},{0xC745, 0x9FBB},{0xC746, 0x9FBC},
- {0xC747, 0x9FBD},{0xC748, 0x9FBE},{0xC749, 0x9FBF},{0xC74A, 0xC0BC},{0xC74B, 0x9FC0},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74E, 0x9FC1},
- {0xC74F, 0xC0BF},{0xC750, 0x9FC2},{0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5},
- {0xC757, 0xC0C6},{0xC758, 0xC0C7},{0xC759, 0x9FC3},{0xC75A, 0x9FC4},{0xC75B, 0x9FC5},{0xC75C, 0xC0C8},{0xC75D, 0x9FC6},{0xC75E, 0x9FC7},
- {0xC75F, 0x9FC8},{0xC760, 0xC0C9},{0xC761, 0x9FC9},{0xC762, 0x9FCA},{0xC763, 0x9FCB},{0xC764, 0x9FCC},{0xC765, 0x9FCD},{0xC766, 0x9FCE},
- {0xC767, 0x9FCF},{0xC768, 0xC0CA},{0xC769, 0x9FD0},{0xC76A, 0x9FD1},{0xC76B, 0xC0CB},{0xC76C, 0x9FD2},{0xC76D, 0x9FD3},{0xC76E, 0x9FD4},
- {0xC76F, 0x9FD5},{0xC770, 0x9FD6},{0xC771, 0x9FD7},{0xC772, 0x9FD8},{0xC773, 0x9FD9},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC776, 0x9FDA},
- {0xC777, 0x9FDB},{0xC778, 0xC0CE},{0xC779, 0x9FDC},{0xC77A, 0x9FDD},{0xC77B, 0x9FDE},{0xC77C, 0xC0CF},{0xC77D, 0xC0D0},{0xC77E, 0xC0D1},
- {0xC77F, 0x9FDF},{0xC780, 0x9FE0},{0xC781, 0x9FE1},{0xC782, 0x9FE2},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC786, 0x9FE3},
- {0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7},{0xC78A, 0xC0D8},{0xC78B, 0x9FE4},{0xC78C, 0x9FE5},{0xC78D, 0x9FE6},{0xC78E, 0xC0D9},
- {0xC78F, 0x9FE7},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC792, 0x9FE8},{0xC793, 0x9FE9},{0xC794, 0xC0DC},{0xC795, 0x9FEA},{0xC796, 0xC0DD},
- {0xC797, 0xC0DE},{0xC798, 0xC0DF},{0xC799, 0x9FEB},{0xC79A, 0xC0E0},{0xC79B, 0x9FEC},{0xC79C, 0x9FED},{0xC79D, 0x9FEE},{0xC79E, 0x9FEF},
- {0xC79F, 0x9FF0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A2, 0x9FF1},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6},
- {0xC7A7, 0x9FF2},{0xC7A8, 0x9FF3},{0xC7A9, 0x9FF4},{0xC7AA, 0x9FF5},{0xC7AB, 0x9FF6},{0xC7AC, 0xC0E7},{0xC7AD, 0xC0E8},{0xC7AE, 0x9FF7},
- {0xC7AF, 0x9FF8},{0xC7B0, 0xC0E9},{0xC7B1, 0x9FF9},{0xC7B2, 0x9FFA},{0xC7B3, 0x9FFB},{0xC7B4, 0xC0EA},{0xC7B5, 0x9FFC},{0xC7B6, 0x9FFD},
- {0xC7B7, 0x9FFE},{0xC7B8, 0xA041},{0xC7B9, 0xA042},{0xC7BA, 0xA043},{0xC7BB, 0xA044},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BE, 0xA045},
- {0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF},{0xC7C2, 0xA046},{0xC7C3, 0xA047},{0xC7C4, 0xA048},{0xC7C5, 0xA049},{0xC7C6, 0xA04A},
- {0xC7C7, 0xA04B},{0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CA, 0xA04C},{0xC7CB, 0xA04D},{0xC7CC, 0xC0F2},{0xC7CD, 0xA04E},{0xC7CE, 0xC0F3},
- {0xC7CF, 0xA04F},{0xC7D0, 0xC0F4},{0xC7D1, 0xA050},{0xC7D2, 0xA051},{0xC7D3, 0xA052},{0xC7D4, 0xA053},{0xC7D5, 0xA054},{0xC7D6, 0xA055},
- {0xC7D7, 0xA056},{0xC7D8, 0xC0F5},{0xC7D9, 0xA057},{0xC7DA, 0xA058},{0xC7DB, 0xA059},{0xC7DC, 0xA05A},{0xC7DD, 0xC0F6},{0xC7DE, 0xA061},
- {0xC7DF, 0xA062},{0xC7E0, 0xA063},{0xC7E1, 0xA064},{0xC7E2, 0xA065},{0xC7E3, 0xA066},{0xC7E4, 0xC0F7},{0xC7E5, 0xA067},{0xC7E6, 0xA068},
- {0xC7E7, 0xA069},{0xC7E8, 0xC0F8},{0xC7E9, 0xA06A},{0xC7EA, 0xA06B},{0xC7EB, 0xA06C},{0xC7EC, 0xC0F9},{0xC7ED, 0xA06D},{0xC7EE, 0xA06E},
- {0xC7EF, 0xA06F},{0xC7F0, 0xA070},{0xC7F1, 0xA071},{0xC7F2, 0xA072},{0xC7F3, 0xA073},{0xC7F4, 0xA074},{0xC7F5, 0xA075},{0xC7F6, 0xA076},
- {0xC7F7, 0xA077},{0xC7F8, 0xA078},{0xC7F9, 0xA079},{0xC7FA, 0xA07A},{0xC7FB, 0xA081},{0xC7FC, 0xA082},{0xC7FD, 0xA083},{0xC7FE, 0xA084},
- {0xC7FF, 0xA085},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC802, 0xA086},{0xC803, 0xA087},{0xC804, 0xC0FC},{0xC805, 0xA088},{0xC806, 0xA089},
- {0xC807, 0xA08A},{0xC808, 0xC0FD},{0xC809, 0xA08B},{0xC80A, 0xC0FE},{0xC80B, 0xA08C},{0xC80C, 0xA08D},{0xC80D, 0xA08E},{0xC80E, 0xA08F},
- {0xC80F, 0xA090},{0xC810, 0xC1A1},{0xC811, 0xC1A2},{0xC812, 0xA091},{0xC813, 0xC1A3},{0xC814, 0xA092},{0xC815, 0xC1A4},{0xC816, 0xC1A5},
- {0xC817, 0xA093},{0xC818, 0xA094},{0xC819, 0xA095},{0xC81A, 0xA096},{0xC81B, 0xA097},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC81E, 0xA098},
- {0xC81F, 0xA099},{0xC820, 0xC1A8},{0xC821, 0xA09A},{0xC822, 0xA09B},{0xC823, 0xA09C},{0xC824, 0xC1A9},{0xC825, 0xA09D},{0xC826, 0xA09E},
- {0xC827, 0xA09F},{0xC828, 0xA0A0},{0xC829, 0xA0A1},{0xC82A, 0xA0A2},{0xC82B, 0xA0A3},{0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82E, 0xA0A4},
- {0xC82F, 0xC1AC},{0xC830, 0xA0A5},{0xC831, 0xC1AD},{0xC832, 0xA0A6},{0xC833, 0xA0A7},{0xC834, 0xA0A8},{0xC835, 0xA0A9},{0xC836, 0xA0AA},
- {0xC837, 0xA0AB},{0xC838, 0xC1AE},{0xC839, 0xA0AC},{0xC83A, 0xA0AD},{0xC83B, 0xA0AE},{0xC83C, 0xC1AF},{0xC83D, 0xA0AF},{0xC83E, 0xA0B0},
- {0xC83F, 0xA0B1},{0xC840, 0xC1B0},{0xC841, 0xA0B2},{0xC842, 0xA0B3},{0xC843, 0xA0B4},{0xC844, 0xA0B5},{0xC845, 0xA0B6},{0xC846, 0xA0B7},
- {0xC847, 0xA0B8},{0xC848, 0xC1B1},{0xC849, 0xC1B2},{0xC84A, 0xA0B9},{0xC84B, 0xA0BA},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC84E, 0xA0BB},
- {0xC84F, 0xA0BC},{0xC850, 0xA0BD},{0xC851, 0xA0BE},{0xC852, 0xA0BF},{0xC853, 0xA0C0},{0xC854, 0xC1B5},{0xC855, 0xA0C1},{0xC856, 0xA0C2},
- {0xC857, 0xA0C3},{0xC858, 0xA0C4},{0xC859, 0xA0C5},{0xC85A, 0xA0C6},{0xC85B, 0xA0C7},{0xC85C, 0xA0C8},{0xC85D, 0xA0C9},{0xC85E, 0xA0CA},
- {0xC85F, 0xA0CB},{0xC860, 0xA0CC},{0xC861, 0xA0CD},{0xC862, 0xA0CE},{0xC863, 0xA0CF},{0xC864, 0xA0D0},{0xC865, 0xA0D1},{0xC866, 0xA0D2},
- {0xC867, 0xA0D3},{0xC868, 0xA0D4},{0xC869, 0xA0D5},{0xC86A, 0xA0D6},{0xC86B, 0xA0D7},{0xC86C, 0xA0D8},{0xC86D, 0xA0D9},{0xC86E, 0xA0DA},
- {0xC86F, 0xA0DB},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC872, 0xA0DC},{0xC873, 0xA0DD},{0xC874, 0xC1B8},{0xC875, 0xA0DE},{0xC876, 0xA0DF},
- {0xC877, 0xA0E0},{0xC878, 0xC1B9},{0xC879, 0xA0E1},{0xC87A, 0xC1BA},{0xC87B, 0xA0E2},{0xC87C, 0xA0E3},{0xC87D, 0xA0E4},{0xC87E, 0xA0E5},
- {0xC87F, 0xA0E6},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC882, 0xA0E7},{0xC883, 0xC1BD},{0xC884, 0xA0E8},{0xC885, 0xC1BE},{0xC886, 0xC1BF},
- {0xC887, 0xC1C0},{0xC888, 0xA0E9},{0xC889, 0xA0EA},{0xC88A, 0xA0EB},{0xC88B, 0xC1C1},{0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC88E, 0xA0EC},
- {0xC88F, 0xA0ED},{0xC890, 0xA0EE},{0xC891, 0xA0EF},{0xC892, 0xA0F0},{0xC893, 0xA0F1},{0xC894, 0xC1C4},{0xC895, 0xA0F2},{0xC896, 0xA0F3},
- {0xC897, 0xA0F4},{0xC898, 0xA0F5},{0xC899, 0xA0F6},{0xC89A, 0xA0F7},{0xC89B, 0xA0F8},{0xC89C, 0xA0F9},{0xC89D, 0xC1C5},{0xC89E, 0xA0FA},
- {0xC89F, 0xC1C6},{0xC8A0, 0xA0FB},{0xC8A1, 0xC1C7},{0xC8A2, 0xA0FC},{0xC8A3, 0xA0FD},{0xC8A4, 0xA0FE},{0xC8A5, 0xA141},{0xC8A6, 0xA142},
- {0xC8A7, 0xA143},{0xC8A8, 0xC1C8},{0xC8A9, 0xA144},{0xC8AA, 0xA145},{0xC8AB, 0xA146},{0xC8AC, 0xA147},{0xC8AD, 0xA148},{0xC8AE, 0xA149},
- {0xC8AF, 0xA14A},{0xC8B0, 0xA14B},{0xC8B1, 0xA14C},{0xC8B2, 0xA14D},{0xC8B3, 0xA14E},{0xC8B4, 0xA14F},{0xC8B5, 0xA150},{0xC8B6, 0xA151},
- {0xC8B7, 0xA152},{0xC8B8, 0xA153},{0xC8B9, 0xA154},{0xC8BA, 0xA155},{0xC8BB, 0xA156},{0xC8BC, 0xC1C9},{0xC8BD, 0xC1CA},{0xC8BE, 0xA157},
- {0xC8BF, 0xA158},{0xC8C0, 0xA159},{0xC8C1, 0xA15A},{0xC8C2, 0xA161},{0xC8C3, 0xA162},{0xC8C4, 0xC1CB},{0xC8C5, 0xA163},{0xC8C6, 0xA164},
- {0xC8C7, 0xA165},{0xC8C8, 0xC1CC},{0xC8C9, 0xA166},{0xC8CA, 0xA167},{0xC8CB, 0xA168},{0xC8CC, 0xC1CD},{0xC8CD, 0xA169},{0xC8CE, 0xA16A},
- {0xC8CF, 0xA16B},{0xC8D0, 0xA16C},{0xC8D1, 0xA16D},{0xC8D2, 0xA16E},{0xC8D3, 0xA16F},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D6, 0xA170},
- {0xC8D7, 0xC1D0},{0xC8D8, 0xA171},{0xC8D9, 0xC1D1},{0xC8DA, 0xA172},{0xC8DB, 0xA173},{0xC8DC, 0xA174},{0xC8DD, 0xA175},{0xC8DE, 0xA176},
- {0xC8DF, 0xA177},{0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E2, 0xA178},{0xC8E3, 0xA179},{0xC8E4, 0xC1D4},{0xC8E5, 0xA17A},{0xC8E6, 0xA181},
- {0xC8E7, 0xA182},{0xC8E8, 0xA183},{0xC8E9, 0xA184},{0xC8EA, 0xA185},{0xC8EB, 0xA186},{0xC8EC, 0xA187},{0xC8ED, 0xA188},{0xC8EE, 0xA189},
- {0xC8EF, 0xA18A},{0xC8F0, 0xA18B},{0xC8F1, 0xA18C},{0xC8F2, 0xA18D},{0xC8F3, 0xA18E},{0xC8F4, 0xA18F},{0xC8F5, 0xC1D5},{0xC8F6, 0xA190},
- {0xC8F7, 0xA191},{0xC8F8, 0xA192},{0xC8F9, 0xA193},{0xC8FA, 0xA194},{0xC8FB, 0xA195},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC8FE, 0xA196},
- {0xC8FF, 0xA197},{0xC900, 0xC1D8},{0xC901, 0xA198},{0xC902, 0xA199},{0xC903, 0xA19A},{0xC904, 0xC1D9},{0xC905, 0xC1DA},{0xC906, 0xC1DB},
- {0xC907, 0xA19B},{0xC908, 0xA19C},{0xC909, 0xA19D},{0xC90A, 0xA19E},{0xC90B, 0xA19F},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90E, 0xA1A0},
- {0xC90F, 0xC1DE},{0xC910, 0xA241},{0xC911, 0xC1DF},{0xC912, 0xA242},{0xC913, 0xA243},{0xC914, 0xA244},{0xC915, 0xA245},{0xC916, 0xA246},
- {0xC917, 0xA247},{0xC918, 0xC1E0},{0xC919, 0xA248},{0xC91A, 0xA249},{0xC91B, 0xA24A},{0xC91C, 0xA24B},{0xC91D, 0xA24C},{0xC91E, 0xA24D},
- {0xC91F, 0xA24E},{0xC920, 0xA24F},{0xC921, 0xA250},{0xC922, 0xA251},{0xC923, 0xA252},{0xC924, 0xA253},{0xC925, 0xA254},{0xC926, 0xA255},
- {0xC927, 0xA256},{0xC928, 0xA257},{0xC929, 0xA258},{0xC92A, 0xA259},{0xC92B, 0xA25A},{0xC92C, 0xC1E1},{0xC92D, 0xA261},{0xC92E, 0xA262},
- {0xC92F, 0xA263},{0xC930, 0xA264},{0xC931, 0xA265},{0xC932, 0xA266},{0xC933, 0xA267},{0xC934, 0xC1E2},{0xC935, 0xA268},{0xC936, 0xA269},
- {0xC937, 0xA26A},{0xC938, 0xA26B},{0xC939, 0xA26C},{0xC93A, 0xA26D},{0xC93B, 0xA26E},{0xC93C, 0xA26F},{0xC93D, 0xA270},{0xC93E, 0xA271},
- {0xC93F, 0xA272},{0xC940, 0xA273},{0xC941, 0xA274},{0xC942, 0xA275},{0xC943, 0xA276},{0xC944, 0xA277},{0xC945, 0xA278},{0xC946, 0xA279},
- {0xC947, 0xA27A},{0xC948, 0xA281},{0xC949, 0xA282},{0xC94A, 0xA283},{0xC94B, 0xA284},{0xC94C, 0xA285},{0xC94D, 0xA286},{0xC94E, 0xA287},
- {0xC94F, 0xA288},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC952, 0xA289},{0xC953, 0xA28A},{0xC954, 0xC1E5},{0xC955, 0xA28B},{0xC956, 0xA28C},
- {0xC957, 0xA28D},{0xC958, 0xC1E6},{0xC959, 0xA28E},{0xC95A, 0xA28F},{0xC95B, 0xA290},{0xC95C, 0xA291},{0xC95D, 0xA292},{0xC95E, 0xA293},
- {0xC95F, 0xA294},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC962, 0xA295},{0xC963, 0xC1E9},{0xC964, 0xA296},{0xC965, 0xA297},{0xC966, 0xA298},
- {0xC967, 0xA299},{0xC968, 0xA29A},{0xC969, 0xA29B},{0xC96A, 0xA29C},{0xC96B, 0xA29D},{0xC96C, 0xC1EA},{0xC96D, 0xA29E},{0xC96E, 0xA29F},
- {0xC96F, 0xA2A0},{0xC970, 0xC1EB},{0xC971, 0xA341},{0xC972, 0xA342},{0xC973, 0xA343},{0xC974, 0xC1EC},{0xC975, 0xA344},{0xC976, 0xA345},
- {0xC977, 0xA346},{0xC978, 0xA347},{0xC979, 0xA348},{0xC97A, 0xA349},{0xC97B, 0xA34A},{0xC97C, 0xC1ED},{0xC97D, 0xA34B},{0xC97E, 0xA34C},
- {0xC97F, 0xA34D},{0xC980, 0xA34E},{0xC981, 0xA34F},{0xC982, 0xA350},{0xC983, 0xA351},{0xC984, 0xA352},{0xC985, 0xA353},{0xC986, 0xA354},
- {0xC987, 0xA355},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98A, 0xA356},{0xC98B, 0xA357},{0xC98C, 0xC1F0},{0xC98D, 0xA358},{0xC98E, 0xA359},
- {0xC98F, 0xA35A},{0xC990, 0xC1F1},{0xC991, 0xA361},{0xC992, 0xA362},{0xC993, 0xA363},{0xC994, 0xA364},{0xC995, 0xA365},{0xC996, 0xA366},
- {0xC997, 0xA367},{0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99A, 0xA368},{0xC99B, 0xC1F4},{0xC99C, 0xA369},{0xC99D, 0xC1F5},{0xC99E, 0xA36A},
- {0xC99F, 0xA36B},{0xC9A0, 0xA36C},{0xC9A1, 0xA36D},{0xC9A2, 0xA36E},{0xC9A3, 0xA36F},{0xC9A4, 0xA370},{0xC9A5, 0xA371},{0xC9A6, 0xA372},
- {0xC9A7, 0xA373},{0xC9A8, 0xA374},{0xC9A9, 0xA375},{0xC9AA, 0xA376},{0xC9AB, 0xA377},{0xC9AC, 0xA378},{0xC9AD, 0xA379},{0xC9AE, 0xA37A},
- {0xC9AF, 0xA381},{0xC9B0, 0xA382},{0xC9B1, 0xA383},{0xC9B2, 0xA384},{0xC9B3, 0xA385},{0xC9B4, 0xA386},{0xC9B5, 0xA387},{0xC9B6, 0xA388},
- {0xC9B7, 0xA389},{0xC9B8, 0xA38A},{0xC9B9, 0xA38B},{0xC9BA, 0xA38C},{0xC9BB, 0xA38D},{0xC9BC, 0xA38E},{0xC9BD, 0xA38F},{0xC9BE, 0xA390},
- {0xC9BF, 0xA391},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C2, 0xA392},{0xC9C3, 0xA393},{0xC9C4, 0xC1F8},{0xC9C5, 0xA394},{0xC9C6, 0xA395},
- {0xC9C7, 0xC1F9},{0xC9C8, 0xC1FA},{0xC9C9, 0xA396},{0xC9CA, 0xC1FB},{0xC9CB, 0xA397},{0xC9CC, 0xA398},{0xC9CD, 0xA399},{0xC9CE, 0xA39A},
- {0xC9CF, 0xA39B},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D2, 0xA39C},{0xC9D3, 0xC1FE},{0xC9D4, 0xA39D},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2},
- {0xC9D7, 0xA39E},{0xC9D8, 0xA39F},{0xC9D9, 0xC2A3},{0xC9DA, 0xC2A4},{0xC9DB, 0xA3A0},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9DE, 0xA441},
- {0xC9DF, 0xA442},{0xC9E0, 0xC2A7},{0xC9E1, 0xA443},{0xC9E2, 0xC2A8},{0xC9E3, 0xA444},{0xC9E4, 0xC2A9},{0xC9E5, 0xA445},{0xC9E6, 0xA446},
- {0xC9E7, 0xC2AA},{0xC9E8, 0xA447},{0xC9E9, 0xA448},{0xC9EA, 0xA449},{0xC9EB, 0xA44A},{0xC9EC, 0xC2AB},{0xC9ED, 0xC2AC},{0xC9EE, 0xA44B},
- {0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F2, 0xA44C},{0xC9F3, 0xA44D},{0xC9F4, 0xA44E},{0xC9F5, 0xA44F},{0xC9F6, 0xA450},
- {0xC9F7, 0xA451},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FA, 0xA452},{0xC9FB, 0xA453},{0xC9FC, 0xC2B2},{0xC9FD, 0xA454},{0xC9FE, 0xA455},
- {0xC9FF, 0xA456},{0xCA00, 0xC2B3},{0xCA01, 0xA457},{0xCA02, 0xA458},{0xCA03, 0xA459},{0xCA04, 0xA45A},{0xCA05, 0xA461},{0xCA06, 0xA462},
- {0xCA07, 0xA463},{0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0A, 0xA464},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA0E, 0xA465},
- {0xCA0F, 0xA466},{0xCA10, 0xA467},{0xCA11, 0xA468},{0xCA12, 0xA469},{0xCA13, 0xA46A},{0xCA14, 0xC2B9},{0xCA15, 0xA46B},{0xCA16, 0xA46C},
- {0xCA17, 0xA46D},{0xCA18, 0xC2BA},{0xCA19, 0xA46E},{0xCA1A, 0xA46F},{0xCA1B, 0xA470},{0xCA1C, 0xA471},{0xCA1D, 0xA472},{0xCA1E, 0xA473},
- {0xCA1F, 0xA474},{0xCA20, 0xA475},{0xCA21, 0xA476},{0xCA22, 0xA477},{0xCA23, 0xA478},{0xCA24, 0xA479},{0xCA25, 0xA47A},{0xCA26, 0xA481},
- {0xCA27, 0xA482},{0xCA28, 0xA483},{0xCA29, 0xC2BB},{0xCA2A, 0xA484},{0xCA2B, 0xA485},{0xCA2C, 0xA486},{0xCA2D, 0xA487},{0xCA2E, 0xA488},
- {0xCA2F, 0xA489},{0xCA30, 0xA48A},{0xCA31, 0xA48B},{0xCA32, 0xA48C},{0xCA33, 0xA48D},{0xCA34, 0xA48E},{0xCA35, 0xA48F},{0xCA36, 0xA490},
- {0xCA37, 0xA491},{0xCA38, 0xA492},{0xCA39, 0xA493},{0xCA3A, 0xA494},{0xCA3B, 0xA495},{0xCA3C, 0xA496},{0xCA3D, 0xA497},{0xCA3E, 0xA498},
- {0xCA3F, 0xA499},{0xCA40, 0xA49A},{0xCA41, 0xA49B},{0xCA42, 0xA49C},{0xCA43, 0xA49D},{0xCA44, 0xA49E},{0xCA45, 0xA49F},{0xCA46, 0xA4A0},
- {0xCA47, 0xA541},{0xCA48, 0xA542},{0xCA49, 0xA543},{0xCA4A, 0xA544},{0xCA4B, 0xA545},{0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA4E, 0xA546},
- {0xCA4F, 0xA547},{0xCA50, 0xC2BE},{0xCA51, 0xA548},{0xCA52, 0xA549},{0xCA53, 0xA54A},{0xCA54, 0xC2BF},{0xCA55, 0xA54B},{0xCA56, 0xA54C},
- {0xCA57, 0xA54D},{0xCA58, 0xA54E},{0xCA59, 0xA54F},{0xCA5A, 0xA550},{0xCA5B, 0xA551},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5E, 0xA552},
- {0xCA5F, 0xC2C2},{0xCA60, 0xC2C3},{0xCA61, 0xC2C4},{0xCA62, 0xA553},{0xCA63, 0xA554},{0xCA64, 0xA555},{0xCA65, 0xA556},{0xCA66, 0xA557},
- {0xCA67, 0xA558},{0xCA68, 0xC2C5},{0xCA69, 0xA559},{0xCA6A, 0xA55A},{0xCA6B, 0xA561},{0xCA6C, 0xA562},{0xCA6D, 0xA563},{0xCA6E, 0xA564},
- {0xCA6F, 0xA565},{0xCA70, 0xA566},{0xCA71, 0xA567},{0xCA72, 0xA568},{0xCA73, 0xA569},{0xCA74, 0xA56A},{0xCA75, 0xA56B},{0xCA76, 0xA56C},
- {0xCA77, 0xA56D},{0xCA78, 0xA56E},{0xCA79, 0xA56F},{0xCA7A, 0xA570},{0xCA7B, 0xA571},{0xCA7C, 0xA572},{0xCA7D, 0xC2C6},{0xCA7E, 0xA573},
- {0xCA7F, 0xA574},{0xCA80, 0xA575},{0xCA81, 0xA576},{0xCA82, 0xA577},{0xCA83, 0xA578},{0xCA84, 0xC2C7},{0xCA85, 0xA579},{0xCA86, 0xA57A},
- {0xCA87, 0xA581},{0xCA88, 0xA582},{0xCA89, 0xA583},{0xCA8A, 0xA584},{0xCA8B, 0xA585},{0xCA8C, 0xA586},{0xCA8D, 0xA587},{0xCA8E, 0xA588},
- {0xCA8F, 0xA589},{0xCA90, 0xA58A},{0xCA91, 0xA58B},{0xCA92, 0xA58C},{0xCA93, 0xA58D},{0xCA94, 0xA58E},{0xCA95, 0xA58F},{0xCA96, 0xA590},
- {0xCA97, 0xA591},{0xCA98, 0xC2C8},{0xCA99, 0xA592},{0xCA9A, 0xA593},{0xCA9B, 0xA594},{0xCA9C, 0xA595},{0xCA9D, 0xA596},{0xCA9E, 0xA597},
- {0xCA9F, 0xA598},{0xCAA0, 0xA599},{0xCAA1, 0xA59A},{0xCAA2, 0xA59B},{0xCAA3, 0xA59C},{0xCAA4, 0xA59D},{0xCAA5, 0xA59E},{0xCAA6, 0xA59F},
- {0xCAA7, 0xA5A0},{0xCAA8, 0xA641},{0xCAA9, 0xA642},{0xCAAA, 0xA643},{0xCAAB, 0xA644},{0xCAAC, 0xA645},{0xCAAD, 0xA646},{0xCAAE, 0xA647},
- {0xCAAF, 0xA648},{0xCAB0, 0xA649},{0xCAB1, 0xA64A},{0xCAB2, 0xA64B},{0xCAB3, 0xA64C},{0xCAB4, 0xA64D},{0xCAB5, 0xA64E},{0xCAB6, 0xA64F},
- {0xCAB7, 0xA650},{0xCAB8, 0xA651},{0xCAB9, 0xA652},{0xCABA, 0xA653},{0xCABB, 0xA654},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCABE, 0xA655},
- {0xCABF, 0xA656},{0xCAC0, 0xC2CB},{0xCAC1, 0xA657},{0xCAC2, 0xA658},{0xCAC3, 0xA659},{0xCAC4, 0xC2CC},{0xCAC5, 0xA65A},{0xCAC6, 0xA661},
- {0xCAC7, 0xA662},{0xCAC8, 0xA663},{0xCAC9, 0xA664},{0xCACA, 0xA665},{0xCACB, 0xA666},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACE, 0xA667},
- {0xCACF, 0xC2CF},{0xCAD0, 0xA668},{0xCAD1, 0xC2D0},{0xCAD2, 0xA669},{0xCAD3, 0xC2D1},{0xCAD4, 0xA66A},{0xCAD5, 0xA66B},{0xCAD6, 0xA66C},
- {0xCAD7, 0xA66D},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3},{0xCADA, 0xA66E},{0xCADB, 0xA66F},{0xCADC, 0xA670},{0xCADD, 0xA671},{0xCADE, 0xA672},
- {0xCADF, 0xA673},{0xCAE0, 0xC2D4},{0xCAE1, 0xA674},{0xCAE2, 0xA675},{0xCAE3, 0xA676},{0xCAE4, 0xA677},{0xCAE5, 0xA678},{0xCAE6, 0xA679},
- {0xCAE7, 0xA67A},{0xCAE8, 0xA681},{0xCAE9, 0xA682},{0xCAEA, 0xA683},{0xCAEB, 0xA684},{0xCAEC, 0xC2D5},{0xCAED, 0xA685},{0xCAEE, 0xA686},
- {0xCAEF, 0xA687},{0xCAF0, 0xA688},{0xCAF1, 0xA689},{0xCAF2, 0xA68A},{0xCAF3, 0xA68B},{0xCAF4, 0xC2D6},{0xCAF5, 0xA68C},{0xCAF6, 0xA68D},
- {0xCAF7, 0xA68E},{0xCAF8, 0xA68F},{0xCAF9, 0xA690},{0xCAFA, 0xA691},{0xCAFB, 0xA692},{0xCAFC, 0xA693},{0xCAFD, 0xA694},{0xCAFE, 0xA695},
- {0xCAFF, 0xA696},{0xCB00, 0xA697},{0xCB01, 0xA698},{0xCB02, 0xA699},{0xCB03, 0xA69A},{0xCB04, 0xA69B},{0xCB05, 0xA69C},{0xCB06, 0xA69D},
- {0xCB07, 0xA69E},{0xCB08, 0xC2D7},{0xCB09, 0xA69F},{0xCB0A, 0xA6A0},{0xCB0B, 0xA741},{0xCB0C, 0xA742},{0xCB0D, 0xA743},{0xCB0E, 0xA744},
- {0xCB0F, 0xA745},{0xCB10, 0xC2D8},{0xCB11, 0xA746},{0xCB12, 0xA747},{0xCB13, 0xA748},{0xCB14, 0xC2D9},{0xCB15, 0xA749},{0xCB16, 0xA74A},
- {0xCB17, 0xA74B},{0xCB18, 0xC2DA},{0xCB19, 0xA74C},{0xCB1A, 0xA74D},{0xCB1B, 0xA74E},{0xCB1C, 0xA74F},{0xCB1D, 0xA750},{0xCB1E, 0xA751},
- {0xCB1F, 0xA752},{0xCB20, 0xC2DB},{0xCB21, 0xC2DC},{0xCB22, 0xA753},{0xCB23, 0xA754},{0xCB24, 0xA755},{0xCB25, 0xA756},{0xCB26, 0xA757},
- {0xCB27, 0xA758},{0xCB28, 0xA759},{0xCB29, 0xA75A},{0xCB2A, 0xA761},{0xCB2B, 0xA762},{0xCB2C, 0xA763},{0xCB2D, 0xA764},{0xCB2E, 0xA765},
- {0xCB2F, 0xA766},{0xCB30, 0xA767},{0xCB31, 0xA768},{0xCB32, 0xA769},{0xCB33, 0xA76A},{0xCB34, 0xA76B},{0xCB35, 0xA76C},{0xCB36, 0xA76D},
- {0xCB37, 0xA76E},{0xCB38, 0xA76F},{0xCB39, 0xA770},{0xCB3A, 0xA771},{0xCB3B, 0xA772},{0xCB3C, 0xA773},{0xCB3D, 0xA774},{0xCB3E, 0xA775},
- {0xCB3F, 0xA776},{0xCB40, 0xA777},{0xCB41, 0xC2DD},{0xCB42, 0xA778},{0xCB43, 0xA779},{0xCB44, 0xA77A},{0xCB45, 0xA781},{0xCB46, 0xA782},
- {0xCB47, 0xA783},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4A, 0xA784},{0xCB4B, 0xA785},{0xCB4C, 0xC2E0},{0xCB4D, 0xA786},{0xCB4E, 0xA787},
- {0xCB4F, 0xA788},{0xCB50, 0xC2E1},{0xCB51, 0xA789},{0xCB52, 0xA78A},{0xCB53, 0xA78B},{0xCB54, 0xA78C},{0xCB55, 0xA78D},{0xCB56, 0xA78E},
- {0xCB57, 0xA78F},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3},{0xCB5A, 0xA790},{0xCB5B, 0xA791},{0xCB5C, 0xA792},{0xCB5D, 0xC2E4},{0xCB5E, 0xA793},
- {0xCB5F, 0xA794},{0xCB60, 0xA795},{0xCB61, 0xA796},{0xCB62, 0xA797},{0xCB63, 0xA798},{0xCB64, 0xC2E5},{0xCB65, 0xA799},{0xCB66, 0xA79A},
- {0xCB67, 0xA79B},{0xCB68, 0xA79C},{0xCB69, 0xA79D},{0xCB6A, 0xA79E},{0xCB6B, 0xA79F},{0xCB6C, 0xA7A0},{0xCB6D, 0xA841},{0xCB6E, 0xA842},
- {0xCB6F, 0xA843},{0xCB70, 0xA844},{0xCB71, 0xA845},{0xCB72, 0xA846},{0xCB73, 0xA847},{0xCB74, 0xA848},{0xCB75, 0xA849},{0xCB76, 0xA84A},
- {0xCB77, 0xA84B},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB7A, 0xA84C},{0xCB7B, 0xA84D},{0xCB7C, 0xA84E},{0xCB7D, 0xA84F},{0xCB7E, 0xA850},
- {0xCB7F, 0xA851},{0xCB80, 0xA852},{0xCB81, 0xA853},{0xCB82, 0xA854},{0xCB83, 0xA855},{0xCB84, 0xA856},{0xCB85, 0xA857},{0xCB86, 0xA858},
- {0xCB87, 0xA859},{0xCB88, 0xA85A},{0xCB89, 0xA861},{0xCB8A, 0xA862},{0xCB8B, 0xA863},{0xCB8C, 0xA864},{0xCB8D, 0xA865},{0xCB8E, 0xA866},
- {0xCB8F, 0xA867},{0xCB90, 0xA868},{0xCB91, 0xA869},{0xCB92, 0xA86A},{0xCB93, 0xA86B},{0xCB94, 0xA86C},{0xCB95, 0xA86D},{0xCB96, 0xA86E},
- {0xCB97, 0xA86F},{0xCB98, 0xA870},{0xCB99, 0xA871},{0xCB9A, 0xA872},{0xCB9B, 0xA873},{0xCB9C, 0xC2E8},{0xCB9D, 0xA874},{0xCB9E, 0xA875},
- {0xCB9F, 0xA876},{0xCBA0, 0xA877},{0xCBA1, 0xA878},{0xCBA2, 0xA879},{0xCBA3, 0xA87A},{0xCBA4, 0xA881},{0xCBA5, 0xA882},{0xCBA6, 0xA883},
- {0xCBA7, 0xA884},{0xCBA8, 0xA885},{0xCBA9, 0xA886},{0xCBAA, 0xA887},{0xCBAB, 0xA888},{0xCBAC, 0xA889},{0xCBAD, 0xA88A},{0xCBAE, 0xA88B},
- {0xCBAF, 0xA88C},{0xCBB0, 0xA88D},{0xCBB1, 0xA88E},{0xCBB2, 0xA88F},{0xCBB3, 0xA890},{0xCBB4, 0xA891},{0xCBB5, 0xA892},{0xCBB6, 0xA893},
- {0xCBB7, 0xA894},{0xCBB8, 0xC2E9},{0xCBB9, 0xA895},{0xCBBA, 0xA896},{0xCBBB, 0xA897},{0xCBBC, 0xA898},{0xCBBD, 0xA899},{0xCBBE, 0xA89A},
- {0xCBBF, 0xA89B},{0xCBC0, 0xA89C},{0xCBC1, 0xA89D},{0xCBC2, 0xA89E},{0xCBC3, 0xA89F},{0xCBC4, 0xA8A0},{0xCBC5, 0xA941},{0xCBC6, 0xA942},
- {0xCBC7, 0xA943},{0xCBC8, 0xA944},{0xCBC9, 0xA945},{0xCBCA, 0xA946},{0xCBCB, 0xA947},{0xCBCC, 0xA948},{0xCBCD, 0xA949},{0xCBCE, 0xA94A},
- {0xCBCF, 0xA94B},{0xCBD0, 0xA94C},{0xCBD1, 0xA94D},{0xCBD2, 0xA94E},{0xCBD3, 0xA94F},{0xCBD4, 0xC2EA},{0xCBD5, 0xA950},{0xCBD6, 0xA951},
- {0xCBD7, 0xA952},{0xCBD8, 0xA953},{0xCBD9, 0xA954},{0xCBDA, 0xA955},{0xCBDB, 0xA956},{0xCBDC, 0xA957},{0xCBDD, 0xA958},{0xCBDE, 0xA959},
- {0xCBDF, 0xA95A},{0xCBE0, 0xA961},{0xCBE1, 0xA962},{0xCBE2, 0xA963},{0xCBE3, 0xA964},{0xCBE4, 0xC2EB},{0xCBE5, 0xA965},{0xCBE6, 0xA966},
- {0xCBE7, 0xC2EC},{0xCBE8, 0xA967},{0xCBE9, 0xC2ED},{0xCBEA, 0xA968},{0xCBEB, 0xA969},{0xCBEC, 0xA96A},{0xCBED, 0xA96B},{0xCBEE, 0xA96C},
- {0xCBEF, 0xA96D},{0xCBF0, 0xA96E},{0xCBF1, 0xA96F},{0xCBF2, 0xA970},{0xCBF3, 0xA971},{0xCBF4, 0xA972},{0xCBF5, 0xA973},{0xCBF6, 0xA974},
- {0xCBF7, 0xA975},{0xCBF8, 0xA976},{0xCBF9, 0xA977},{0xCBFA, 0xA978},{0xCBFB, 0xA979},{0xCBFC, 0xA97A},{0xCBFD, 0xA981},{0xCBFE, 0xA982},
- {0xCBFF, 0xA983},{0xCC00, 0xA984},{0xCC01, 0xA985},{0xCC02, 0xA986},{0xCC03, 0xA987},{0xCC04, 0xA988},{0xCC05, 0xA989},{0xCC06, 0xA98A},
- {0xCC07, 0xA98B},{0xCC08, 0xA98C},{0xCC09, 0xA98D},{0xCC0A, 0xA98E},{0xCC0B, 0xA98F},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC0E, 0xA990},
- {0xCC0F, 0xA991},{0xCC10, 0xC2F0},{0xCC11, 0xA992},{0xCC12, 0xA993},{0xCC13, 0xA994},{0xCC14, 0xC2F1},{0xCC15, 0xA995},{0xCC16, 0xA996},
- {0xCC17, 0xA997},{0xCC18, 0xA998},{0xCC19, 0xA999},{0xCC1A, 0xA99A},{0xCC1B, 0xA99B},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3},{0xCC1E, 0xA99C},
- {0xCC1F, 0xA99D},{0xCC20, 0xA99E},{0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC23, 0xA99F},{0xCC24, 0xA9A0},{0xCC25, 0xAA41},{0xCC26, 0xAA42},
- {0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2A, 0xAA43},{0xCC2B, 0xAA44},{0xCC2C, 0xC2F9},{0xCC2D, 0xAA45},{0xCC2E, 0xC2FA},
- {0xCC2F, 0xAA46},{0xCC30, 0xC2FB},{0xCC31, 0xAA47},{0xCC32, 0xAA48},{0xCC33, 0xAA49},{0xCC34, 0xAA4A},{0xCC35, 0xAA4B},{0xCC36, 0xAA4C},
- {0xCC37, 0xAA4D},{0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3A, 0xAA4E},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3},
- {0xCC3F, 0xAA4F},{0xCC40, 0xAA50},{0xCC41, 0xAA51},{0xCC42, 0xAA52},{0xCC43, 0xAA53},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5},{0xCC46, 0xAA54},
- {0xCC47, 0xAA55},{0xCC48, 0xC3A6},{0xCC49, 0xAA56},{0xCC4A, 0xAA57},{0xCC4B, 0xAA58},{0xCC4C, 0xC3A7},{0xCC4D, 0xAA59},{0xCC4E, 0xAA5A},
- {0xCC4F, 0xAA61},{0xCC50, 0xAA62},{0xCC51, 0xAA63},{0xCC52, 0xAA64},{0xCC53, 0xAA65},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC56, 0xAA66},
- {0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC5A, 0xAA67},{0xCC5B, 0xAA68},{0xCC5C, 0xAA69},{0xCC5D, 0xAA6A},{0xCC5E, 0xAA6B},
- {0xCC5F, 0xAA6C},{0xCC60, 0xC3AD},{0xCC61, 0xAA6D},{0xCC62, 0xAA6E},{0xCC63, 0xAA6F},{0xCC64, 0xC3AE},{0xCC65, 0xAA70},{0xCC66, 0xC3AF},
- {0xCC67, 0xAA71},{0xCC68, 0xC3B0},{0xCC69, 0xAA72},{0xCC6A, 0xAA73},{0xCC6B, 0xAA74},{0xCC6C, 0xAA75},{0xCC6D, 0xAA76},{0xCC6E, 0xAA77},
- {0xCC6F, 0xAA78},{0xCC70, 0xC3B1},{0xCC71, 0xAA79},{0xCC72, 0xAA7A},{0xCC73, 0xAA81},{0xCC74, 0xAA82},{0xCC75, 0xC3B2},{0xCC76, 0xAA83},
- {0xCC77, 0xAA84},{0xCC78, 0xAA85},{0xCC79, 0xAA86},{0xCC7A, 0xAA87},{0xCC7B, 0xAA88},{0xCC7C, 0xAA89},{0xCC7D, 0xAA8A},{0xCC7E, 0xAA8B},
- {0xCC7F, 0xAA8C},{0xCC80, 0xAA8D},{0xCC81, 0xAA8E},{0xCC82, 0xAA8F},{0xCC83, 0xAA90},{0xCC84, 0xAA91},{0xCC85, 0xAA92},{0xCC86, 0xAA93},
- {0xCC87, 0xAA94},{0xCC88, 0xAA95},{0xCC89, 0xAA96},{0xCC8A, 0xAA97},{0xCC8B, 0xAA98},{0xCC8C, 0xAA99},{0xCC8D, 0xAA9A},{0xCC8E, 0xAA9B},
- {0xCC8F, 0xAA9C},{0xCC90, 0xAA9D},{0xCC91, 0xAA9E},{0xCC92, 0xAA9F},{0xCC93, 0xAAA0},{0xCC94, 0xAB41},{0xCC95, 0xAB42},{0xCC96, 0xAB43},
- {0xCC97, 0xAB44},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9A, 0xAB45},{0xCC9B, 0xAB46},{0xCC9C, 0xC3B5},{0xCC9D, 0xAB47},{0xCC9E, 0xAB48},
- {0xCC9F, 0xAB49},{0xCCA0, 0xC3B6},{0xCCA1, 0xAB4A},{0xCCA2, 0xAB4B},{0xCCA3, 0xAB4C},{0xCCA4, 0xAB4D},{0xCCA5, 0xAB4E},{0xCCA6, 0xAB4F},
- {0xCCA7, 0xAB50},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAA, 0xAB51},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCAE, 0xAB52},
- {0xCCAF, 0xAB53},{0xCCB0, 0xAB54},{0xCCB1, 0xAB55},{0xCCB2, 0xAB56},{0xCCB3, 0xAB57},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD},{0xCCB6, 0xAB58},
- {0xCCB7, 0xAB59},{0xCCB8, 0xC3BE},{0xCCB9, 0xAB5A},{0xCCBA, 0xAB61},{0xCCBB, 0xAB62},{0xCCBC, 0xC3BF},{0xCCBD, 0xAB63},{0xCCBE, 0xAB64},
- {0xCCBF, 0xAB65},{0xCCC0, 0xAB66},{0xCCC1, 0xAB67},{0xCCC2, 0xAB68},{0xCCC3, 0xAB69},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC6, 0xAB6A},
- {0xCCC7, 0xC3C2},{0xCCC8, 0xAB6B},{0xCCC9, 0xC3C3},{0xCCCA, 0xAB6C},{0xCCCB, 0xAB6D},{0xCCCC, 0xAB6E},{0xCCCD, 0xAB6F},{0xCCCE, 0xAB70},
- {0xCCCF, 0xAB71},{0xCCD0, 0xC3C4},{0xCCD1, 0xAB72},{0xCCD2, 0xAB73},{0xCCD3, 0xAB74},{0xCCD4, 0xC3C5},{0xCCD5, 0xAB75},{0xCCD6, 0xAB76},
- {0xCCD7, 0xAB77},{0xCCD8, 0xAB78},{0xCCD9, 0xAB79},{0xCCDA, 0xAB7A},{0xCCDB, 0xAB81},{0xCCDC, 0xAB82},{0xCCDD, 0xAB83},{0xCCDE, 0xAB84},
- {0xCCDF, 0xAB85},{0xCCE0, 0xAB86},{0xCCE1, 0xAB87},{0xCCE2, 0xAB88},{0xCCE3, 0xAB89},{0xCCE4, 0xC3C6},{0xCCE5, 0xAB8A},{0xCCE6, 0xAB8B},
- {0xCCE7, 0xAB8C},{0xCCE8, 0xAB8D},{0xCCE9, 0xAB8E},{0xCCEA, 0xAB8F},{0xCCEB, 0xAB90},{0xCCEC, 0xC3C7},{0xCCED, 0xAB91},{0xCCEE, 0xAB92},
- {0xCCEF, 0xAB93},{0xCCF0, 0xC3C8},{0xCCF1, 0xAB94},{0xCCF2, 0xAB95},{0xCCF3, 0xAB96},{0xCCF4, 0xAB97},{0xCCF5, 0xAB98},{0xCCF6, 0xAB99},
- {0xCCF7, 0xAB9A},{0xCCF8, 0xAB9B},{0xCCF9, 0xAB9C},{0xCCFA, 0xAB9D},{0xCCFB, 0xAB9E},{0xCCFC, 0xAB9F},{0xCCFD, 0xABA0},{0xCCFE, 0xAC41},
- {0xCCFF, 0xAC42},{0xCD00, 0xAC43},{0xCD01, 0xC3C9},{0xCD02, 0xAC44},{0xCD03, 0xAC45},{0xCD04, 0xAC46},{0xCD05, 0xAC47},{0xCD06, 0xAC48},
- {0xCD07, 0xAC49},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0A, 0xAC4A},{0xCD0B, 0xAC4B},{0xCD0C, 0xC3CC},{0xCD0D, 0xAC4C},{0xCD0E, 0xAC4D},
- {0xCD0F, 0xAC4E},{0xCD10, 0xC3CD},{0xCD11, 0xAC4F},{0xCD12, 0xAC50},{0xCD13, 0xAC51},{0xCD14, 0xAC52},{0xCD15, 0xAC53},{0xCD16, 0xAC54},
- {0xCD17, 0xAC55},{0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1A, 0xAC56},{0xCD1B, 0xC3D0},{0xCD1C, 0xAC57},{0xCD1D, 0xC3D1},{0xCD1E, 0xAC58},
- {0xCD1F, 0xAC59},{0xCD20, 0xAC5A},{0xCD21, 0xAC61},{0xCD22, 0xAC62},{0xCD23, 0xAC63},{0xCD24, 0xC3D2},{0xCD25, 0xAC64},{0xCD26, 0xAC65},
- {0xCD27, 0xAC66},{0xCD28, 0xC3D3},{0xCD29, 0xAC67},{0xCD2A, 0xAC68},{0xCD2B, 0xAC69},{0xCD2C, 0xC3D4},{0xCD2D, 0xAC6A},{0xCD2E, 0xAC6B},
- {0xCD2F, 0xAC6C},{0xCD30, 0xAC6D},{0xCD31, 0xAC6E},{0xCD32, 0xAC6F},{0xCD33, 0xAC70},{0xCD34, 0xAC71},{0xCD35, 0xAC72},{0xCD36, 0xAC73},
- {0xCD37, 0xAC74},{0xCD38, 0xAC75},{0xCD39, 0xC3D5},{0xCD3A, 0xAC76},{0xCD3B, 0xAC77},{0xCD3C, 0xAC78},{0xCD3D, 0xAC79},{0xCD3E, 0xAC7A},
- {0xCD3F, 0xAC81},{0xCD40, 0xAC82},{0xCD41, 0xAC83},{0xCD42, 0xAC84},{0xCD43, 0xAC85},{0xCD44, 0xAC86},{0xCD45, 0xAC87},{0xCD46, 0xAC88},
- {0xCD47, 0xAC89},{0xCD48, 0xAC8A},{0xCD49, 0xAC8B},{0xCD4A, 0xAC8C},{0xCD4B, 0xAC8D},{0xCD4C, 0xAC8E},{0xCD4D, 0xAC8F},{0xCD4E, 0xAC90},
- {0xCD4F, 0xAC91},{0xCD50, 0xAC92},{0xCD51, 0xAC93},{0xCD52, 0xAC94},{0xCD53, 0xAC95},{0xCD54, 0xAC96},{0xCD55, 0xAC97},{0xCD56, 0xAC98},
- {0xCD57, 0xAC99},{0xCD58, 0xAC9A},{0xCD59, 0xAC9B},{0xCD5A, 0xAC9C},{0xCD5B, 0xAC9D},{0xCD5C, 0xC3D6},{0xCD5D, 0xAC9E},{0xCD5E, 0xAC9F},
- {0xCD5F, 0xACA0},{0xCD60, 0xC3D7},{0xCD61, 0xAD41},{0xCD62, 0xAD42},{0xCD63, 0xAD43},{0xCD64, 0xC3D8},{0xCD65, 0xAD44},{0xCD66, 0xAD45},
- {0xCD67, 0xAD46},{0xCD68, 0xAD47},{0xCD69, 0xAD48},{0xCD6A, 0xAD49},{0xCD6B, 0xAD4A},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6E, 0xAD4B},
- {0xCD6F, 0xC3DB},{0xCD70, 0xAD4C},{0xCD71, 0xC3DC},{0xCD72, 0xAD4D},{0xCD73, 0xAD4E},{0xCD74, 0xAD4F},{0xCD75, 0xAD50},{0xCD76, 0xAD51},
- {0xCD77, 0xAD52},{0xCD78, 0xC3DD},{0xCD79, 0xAD53},{0xCD7A, 0xAD54},{0xCD7B, 0xAD55},{0xCD7C, 0xAD56},{0xCD7D, 0xAD57},{0xCD7E, 0xAD58},
- {0xCD7F, 0xAD59},{0xCD80, 0xAD5A},{0xCD81, 0xAD61},{0xCD82, 0xAD62},{0xCD83, 0xAD63},{0xCD84, 0xAD64},{0xCD85, 0xAD65},{0xCD86, 0xAD66},
- {0xCD87, 0xAD67},{0xCD88, 0xC3DE},{0xCD89, 0xAD68},{0xCD8A, 0xAD69},{0xCD8B, 0xAD6A},{0xCD8C, 0xAD6B},{0xCD8D, 0xAD6C},{0xCD8E, 0xAD6D},
- {0xCD8F, 0xAD6E},{0xCD90, 0xAD6F},{0xCD91, 0xAD70},{0xCD92, 0xAD71},{0xCD93, 0xAD72},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD96, 0xAD73},
- {0xCD97, 0xAD74},{0xCD98, 0xC3E1},{0xCD99, 0xAD75},{0xCD9A, 0xAD76},{0xCD9B, 0xAD77},{0xCD9C, 0xC3E2},{0xCD9D, 0xAD78},{0xCD9E, 0xAD79},
- {0xCD9F, 0xAD7A},{0xCDA0, 0xAD81},{0xCDA1, 0xAD82},{0xCDA2, 0xAD83},{0xCDA3, 0xAD84},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA6, 0xAD85},
- {0xCDA7, 0xC3E5},{0xCDA8, 0xAD86},{0xCDA9, 0xC3E6},{0xCDAA, 0xAD87},{0xCDAB, 0xAD88},{0xCDAC, 0xAD89},{0xCDAD, 0xAD8A},{0xCDAE, 0xAD8B},
- {0xCDAF, 0xAD8C},{0xCDB0, 0xC3E7},{0xCDB1, 0xAD8D},{0xCDB2, 0xAD8E},{0xCDB3, 0xAD8F},{0xCDB4, 0xAD90},{0xCDB5, 0xAD91},{0xCDB6, 0xAD92},
- {0xCDB7, 0xAD93},{0xCDB8, 0xAD94},{0xCDB9, 0xAD95},{0xCDBA, 0xAD96},{0xCDBB, 0xAD97},{0xCDBC, 0xAD98},{0xCDBD, 0xAD99},{0xCDBE, 0xAD9A},
- {0xCDBF, 0xAD9B},{0xCDC0, 0xAD9C},{0xCDC1, 0xAD9D},{0xCDC2, 0xAD9E},{0xCDC3, 0xAD9F},{0xCDC4, 0xC3E8},{0xCDC5, 0xADA0},{0xCDC6, 0xAE41},
- {0xCDC7, 0xAE42},{0xCDC8, 0xAE43},{0xCDC9, 0xAE44},{0xCDCA, 0xAE45},{0xCDCB, 0xAE46},{0xCDCC, 0xC3E9},{0xCDCD, 0xAE47},{0xCDCE, 0xAE48},
- {0xCDCF, 0xAE49},{0xCDD0, 0xC3EA},{0xCDD1, 0xAE4A},{0xCDD2, 0xAE4B},{0xCDD3, 0xAE4C},{0xCDD4, 0xAE4D},{0xCDD5, 0xAE4E},{0xCDD6, 0xAE4F},
- {0xCDD7, 0xAE50},{0xCDD8, 0xAE51},{0xCDD9, 0xAE52},{0xCDDA, 0xAE53},{0xCDDB, 0xAE54},{0xCDDC, 0xAE55},{0xCDDD, 0xAE56},{0xCDDE, 0xAE57},
- {0xCDDF, 0xAE58},{0xCDE0, 0xAE59},{0xCDE1, 0xAE5A},{0xCDE2, 0xAE61},{0xCDE3, 0xAE62},{0xCDE4, 0xAE63},{0xCDE5, 0xAE64},{0xCDE6, 0xAE65},
- {0xCDE7, 0xAE66},{0xCDE8, 0xC3EB},{0xCDE9, 0xAE67},{0xCDEA, 0xAE68},{0xCDEB, 0xAE69},{0xCDEC, 0xC3EC},{0xCDED, 0xAE6A},{0xCDEE, 0xAE6B},
- {0xCDEF, 0xAE6C},{0xCDF0, 0xC3ED},{0xCDF1, 0xAE6D},{0xCDF2, 0xAE6E},{0xCDF3, 0xAE6F},{0xCDF4, 0xAE70},{0xCDF5, 0xAE71},{0xCDF6, 0xAE72},
- {0xCDF7, 0xAE73},{0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFA, 0xAE74},{0xCDFB, 0xC3F0},{0xCDFC, 0xAE75},{0xCDFD, 0xC3F1},{0xCDFE, 0xAE76},
- {0xCDFF, 0xAE77},{0xCE00, 0xAE78},{0xCE01, 0xAE79},{0xCE02, 0xAE7A},{0xCE03, 0xAE81},{0xCE04, 0xC3F2},{0xCE05, 0xAE82},{0xCE06, 0xAE83},
- {0xCE07, 0xAE84},{0xCE08, 0xC3F3},{0xCE09, 0xAE85},{0xCE0A, 0xAE86},{0xCE0B, 0xAE87},{0xCE0C, 0xC3F4},{0xCE0D, 0xAE88},{0xCE0E, 0xAE89},
- {0xCE0F, 0xAE8A},{0xCE10, 0xAE8B},{0xCE11, 0xAE8C},{0xCE12, 0xAE8D},{0xCE13, 0xAE8E},{0xCE14, 0xC3F5},{0xCE15, 0xAE8F},{0xCE16, 0xAE90},
- {0xCE17, 0xAE91},{0xCE18, 0xAE92},{0xCE19, 0xC3F6},{0xCE1A, 0xAE93},{0xCE1B, 0xAE94},{0xCE1C, 0xAE95},{0xCE1D, 0xAE96},{0xCE1E, 0xAE97},
- {0xCE1F, 0xAE98},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE22, 0xAE99},{0xCE23, 0xAE9A},{0xCE24, 0xC3F9},{0xCE25, 0xAE9B},{0xCE26, 0xAE9C},
- {0xCE27, 0xAE9D},{0xCE28, 0xC3FA},{0xCE29, 0xAE9E},{0xCE2A, 0xAE9F},{0xCE2B, 0xAEA0},{0xCE2C, 0xAF41},{0xCE2D, 0xAF42},{0xCE2E, 0xAF43},
- {0xCE2F, 0xAF44},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE32, 0xAF45},{0xCE33, 0xC3FD},{0xCE34, 0xAF46},{0xCE35, 0xC3FE},{0xCE36, 0xAF47},
- {0xCE37, 0xAF48},{0xCE38, 0xAF49},{0xCE39, 0xAF4A},{0xCE3A, 0xAF4B},{0xCE3B, 0xAF4C},{0xCE3C, 0xAF4D},{0xCE3D, 0xAF4E},{0xCE3E, 0xAF4F},
- {0xCE3F, 0xAF50},{0xCE40, 0xAF51},{0xCE41, 0xAF52},{0xCE42, 0xAF53},{0xCE43, 0xAF54},{0xCE44, 0xAF55},{0xCE45, 0xAF56},{0xCE46, 0xAF57},
- {0xCE47, 0xAF58},{0xCE48, 0xAF59},{0xCE49, 0xAF5A},{0xCE4A, 0xAF61},{0xCE4B, 0xAF62},{0xCE4C, 0xAF63},{0xCE4D, 0xAF64},{0xCE4E, 0xAF65},
- {0xCE4F, 0xAF66},{0xCE50, 0xAF67},{0xCE51, 0xAF68},{0xCE52, 0xAF69},{0xCE53, 0xAF6A},{0xCE54, 0xAF6B},{0xCE55, 0xAF6C},{0xCE56, 0xAF6D},
- {0xCE57, 0xAF6E},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5A, 0xAF6F},{0xCE5B, 0xAF70},{0xCE5C, 0xC4A3},{0xCE5D, 0xAF71},{0xCE5E, 0xAF72},
- {0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE62, 0xAF73},{0xCE63, 0xAF74},{0xCE64, 0xAF75},{0xCE65, 0xAF76},{0xCE66, 0xAF77},
- {0xCE67, 0xAF78},{0xCE68, 0xC4A7},{0xCE69, 0xC4A8},{0xCE6A, 0xAF79},{0xCE6B, 0xC4A9},{0xCE6C, 0xAF7A},{0xCE6D, 0xC4AA},{0xCE6E, 0xAF81},
- {0xCE6F, 0xAF82},{0xCE70, 0xAF83},{0xCE71, 0xAF84},{0xCE72, 0xAF85},{0xCE73, 0xAF86},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE76, 0xAF87},
- {0xCE77, 0xAF88},{0xCE78, 0xC4AD},{0xCE79, 0xAF89},{0xCE7A, 0xAF8A},{0xCE7B, 0xAF8B},{0xCE7C, 0xC4AE},{0xCE7D, 0xAF8C},{0xCE7E, 0xAF8D},
- {0xCE7F, 0xAF8E},{0xCE80, 0xAF8F},{0xCE81, 0xAF90},{0xCE82, 0xAF91},{0xCE83, 0xAF92},{0xCE84, 0xC4AF},{0xCE85, 0xC4B0},{0xCE86, 0xAF93},
- {0xCE87, 0xC4B1},{0xCE88, 0xAF94},{0xCE89, 0xC4B2},{0xCE8A, 0xAF95},{0xCE8B, 0xAF96},{0xCE8C, 0xAF97},{0xCE8D, 0xAF98},{0xCE8E, 0xAF99},
- {0xCE8F, 0xAF9A},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE92, 0xAF9B},{0xCE93, 0xAF9C},{0xCE94, 0xC4B5},{0xCE95, 0xAF9D},{0xCE96, 0xAF9E},
- {0xCE97, 0xAF9F},{0xCE98, 0xC4B6},{0xCE99, 0xAFA0},{0xCE9A, 0xB041},{0xCE9B, 0xB042},{0xCE9C, 0xB043},{0xCE9D, 0xB044},{0xCE9E, 0xB045},
- {0xCE9F, 0xB046},{0xCEA0, 0xC4B7},{0xCEA1, 0xC4B8},{0xCEA2, 0xB047},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEA6, 0xB048},
- {0xCEA7, 0xB049},{0xCEA8, 0xB04A},{0xCEA9, 0xB04B},{0xCEAA, 0xB04C},{0xCEAB, 0xB04D},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEAE, 0xB04E},
- {0xCEAF, 0xB04F},{0xCEB0, 0xB050},{0xCEB1, 0xB051},{0xCEB2, 0xB052},{0xCEB3, 0xB053},{0xCEB4, 0xB054},{0xCEB5, 0xB055},{0xCEB6, 0xB056},
- {0xCEB7, 0xB057},{0xCEB8, 0xB058},{0xCEB9, 0xB059},{0xCEBA, 0xB05A},{0xCEBB, 0xB061},{0xCEBC, 0xB062},{0xCEBD, 0xB063},{0xCEBE, 0xB064},
- {0xCEBF, 0xB065},{0xCEC0, 0xB066},{0xCEC1, 0xC4BE},{0xCEC2, 0xB067},{0xCEC3, 0xB068},{0xCEC4, 0xB069},{0xCEC5, 0xB06A},{0xCEC6, 0xB06B},
- {0xCEC7, 0xB06C},{0xCEC8, 0xB06D},{0xCEC9, 0xB06E},{0xCECA, 0xB06F},{0xCECB, 0xB070},{0xCECC, 0xB071},{0xCECD, 0xB072},{0xCECE, 0xB073},
- {0xCECF, 0xB074},{0xCED0, 0xB075},{0xCED1, 0xB076},{0xCED2, 0xB077},{0xCED3, 0xB078},{0xCED4, 0xB079},{0xCED5, 0xB07A},{0xCED6, 0xB081},
- {0xCED7, 0xB082},{0xCED8, 0xB083},{0xCED9, 0xB084},{0xCEDA, 0xB085},{0xCEDB, 0xB086},{0xCEDC, 0xB087},{0xCEDD, 0xB088},{0xCEDE, 0xB089},
- {0xCEDF, 0xB08A},{0xCEE0, 0xB08B},{0xCEE1, 0xB08C},{0xCEE2, 0xB08D},{0xCEE3, 0xB08E},{0xCEE4, 0xC4BF},{0xCEE5, 0xC4C0},{0xCEE6, 0xB08F},
- {0xCEE7, 0xB090},{0xCEE8, 0xC4C1},{0xCEE9, 0xB091},{0xCEEA, 0xB092},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEED, 0xB093},{0xCEEE, 0xB094},
- {0xCEEF, 0xB095},{0xCEF0, 0xB096},{0xCEF1, 0xB097},{0xCEF2, 0xB098},{0xCEF3, 0xB099},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF6, 0xB09A},
- {0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7},{0xCEF9, 0xC4C8},{0xCEFA, 0xB09B},{0xCEFB, 0xB09C},{0xCEFC, 0xB09D},{0xCEFD, 0xB09E},{0xCEFE, 0xB09F},
- {0xCEFF, 0xB0A0},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF02, 0xB141},{0xCF03, 0xB142},{0xCF04, 0xC4CB},{0xCF05, 0xB143},{0xCF06, 0xB144},
- {0xCF07, 0xB145},{0xCF08, 0xC4CC},{0xCF09, 0xB146},{0xCF0A, 0xB147},{0xCF0B, 0xB148},{0xCF0C, 0xB149},{0xCF0D, 0xB14A},{0xCF0E, 0xB14B},
- {0xCF0F, 0xB14C},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF12, 0xB14D},{0xCF13, 0xC4CF},{0xCF14, 0xB14E},{0xCF15, 0xC4D0},{0xCF16, 0xB14F},
- {0xCF17, 0xB150},{0xCF18, 0xB151},{0xCF19, 0xB152},{0xCF1A, 0xB153},{0xCF1B, 0xB154},{0xCF1C, 0xC4D1},{0xCF1D, 0xB155},{0xCF1E, 0xB156},
- {0xCF1F, 0xB157},{0xCF20, 0xC4D2},{0xCF21, 0xB158},{0xCF22, 0xB159},{0xCF23, 0xB15A},{0xCF24, 0xC4D3},{0xCF25, 0xB161},{0xCF26, 0xB162},
- {0xCF27, 0xB163},{0xCF28, 0xB164},{0xCF29, 0xB165},{0xCF2A, 0xB166},{0xCF2B, 0xB167},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2E, 0xB168},
- {0xCF2F, 0xC4D6},{0xCF30, 0xC4D7},{0xCF31, 0xC4D8},{0xCF32, 0xB169},{0xCF33, 0xB16A},{0xCF34, 0xB16B},{0xCF35, 0xB16C},{0xCF36, 0xB16D},
- {0xCF37, 0xB16E},{0xCF38, 0xC4D9},{0xCF39, 0xB16F},{0xCF3A, 0xB170},{0xCF3B, 0xB171},{0xCF3C, 0xB172},{0xCF3D, 0xB173},{0xCF3E, 0xB174},
- {0xCF3F, 0xB175},{0xCF40, 0xB176},{0xCF41, 0xB177},{0xCF42, 0xB178},{0xCF43, 0xB179},{0xCF44, 0xB17A},{0xCF45, 0xB181},{0xCF46, 0xB182},
- {0xCF47, 0xB183},{0xCF48, 0xB184},{0xCF49, 0xB185},{0xCF4A, 0xB186},{0xCF4B, 0xB187},{0xCF4C, 0xB188},{0xCF4D, 0xB189},{0xCF4E, 0xB18A},
- {0xCF4F, 0xB18B},{0xCF50, 0xB18C},{0xCF51, 0xB18D},{0xCF52, 0xB18E},{0xCF53, 0xB18F},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF56, 0xB190},
- {0xCF57, 0xB191},{0xCF58, 0xC4DC},{0xCF59, 0xB192},{0xCF5A, 0xB193},{0xCF5B, 0xB194},{0xCF5C, 0xC4DD},{0xCF5D, 0xB195},{0xCF5E, 0xB196},
- {0xCF5F, 0xB197},{0xCF60, 0xB198},{0xCF61, 0xB199},{0xCF62, 0xB19A},{0xCF63, 0xB19B},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF},{0xCF66, 0xB19C},
- {0xCF67, 0xC4E0},{0xCF68, 0xB19D},{0xCF69, 0xC4E1},{0xCF6A, 0xB19E},{0xCF6B, 0xB19F},{0xCF6C, 0xB1A0},{0xCF6D, 0xB241},{0xCF6E, 0xB242},
- {0xCF6F, 0xB243},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF72, 0xB244},{0xCF73, 0xB245},{0xCF74, 0xC4E4},{0xCF75, 0xB246},{0xCF76, 0xB247},
- {0xCF77, 0xB248},{0xCF78, 0xC4E5},{0xCF79, 0xB249},{0xCF7A, 0xB24A},{0xCF7B, 0xB24B},{0xCF7C, 0xB24C},{0xCF7D, 0xB24D},{0xCF7E, 0xB24E},
- {0xCF7F, 0xB24F},{0xCF80, 0xC4E6},{0xCF81, 0xB250},{0xCF82, 0xB251},{0xCF83, 0xB252},{0xCF84, 0xB253},{0xCF85, 0xC4E7},{0xCF86, 0xB254},
- {0xCF87, 0xB255},{0xCF88, 0xB256},{0xCF89, 0xB257},{0xCF8A, 0xB258},{0xCF8B, 0xB259},{0xCF8C, 0xC4E8},{0xCF8D, 0xB25A},{0xCF8E, 0xB261},
- {0xCF8F, 0xB262},{0xCF90, 0xB263},{0xCF91, 0xB264},{0xCF92, 0xB265},{0xCF93, 0xB266},{0xCF94, 0xB267},{0xCF95, 0xB268},{0xCF96, 0xB269},
- {0xCF97, 0xB26A},{0xCF98, 0xB26B},{0xCF99, 0xB26C},{0xCF9A, 0xB26D},{0xCF9B, 0xB26E},{0xCF9C, 0xB26F},{0xCF9D, 0xB270},{0xCF9E, 0xB271},
- {0xCF9F, 0xB272},{0xCFA0, 0xB273},{0xCFA1, 0xC4E9},{0xCFA2, 0xB274},{0xCFA3, 0xB275},{0xCFA4, 0xB276},{0xCFA5, 0xB277},{0xCFA6, 0xB278},
- {0xCFA7, 0xB279},{0xCFA8, 0xC4EA},{0xCFA9, 0xB27A},{0xCFAA, 0xB281},{0xCFAB, 0xB282},{0xCFAC, 0xB283},{0xCFAD, 0xB284},{0xCFAE, 0xB285},
- {0xCFAF, 0xB286},{0xCFB0, 0xC4EB},{0xCFB1, 0xB287},{0xCFB2, 0xB288},{0xCFB3, 0xB289},{0xCFB4, 0xB28A},{0xCFB5, 0xB28B},{0xCFB6, 0xB28C},
- {0xCFB7, 0xB28D},{0xCFB8, 0xB28E},{0xCFB9, 0xB28F},{0xCFBA, 0xB290},{0xCFBB, 0xB291},{0xCFBC, 0xB292},{0xCFBD, 0xB293},{0xCFBE, 0xB294},
- {0xCFBF, 0xB295},{0xCFC0, 0xB296},{0xCFC1, 0xB297},{0xCFC2, 0xB298},{0xCFC3, 0xB299},{0xCFC4, 0xC4EC},{0xCFC5, 0xB29A},{0xCFC6, 0xB29B},
- {0xCFC7, 0xB29C},{0xCFC8, 0xB29D},{0xCFC9, 0xB29E},{0xCFCA, 0xB29F},{0xCFCB, 0xB2A0},{0xCFCC, 0xB341},{0xCFCD, 0xB342},{0xCFCE, 0xB343},
- {0xCFCF, 0xB344},{0xCFD0, 0xB345},{0xCFD1, 0xB346},{0xCFD2, 0xB347},{0xCFD3, 0xB348},{0xCFD4, 0xB349},{0xCFD5, 0xB34A},{0xCFD6, 0xB34B},
- {0xCFD7, 0xB34C},{0xCFD8, 0xB34D},{0xCFD9, 0xB34E},{0xCFDA, 0xB34F},{0xCFDB, 0xB350},{0xCFDC, 0xB351},{0xCFDD, 0xB352},{0xCFDE, 0xB353},
- {0xCFDF, 0xB354},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE2, 0xB355},{0xCFE3, 0xB356},{0xCFE4, 0xC4EF},{0xCFE5, 0xB357},{0xCFE6, 0xB358},
- {0xCFE7, 0xB359},{0xCFE8, 0xC4F0},{0xCFE9, 0xB35A},{0xCFEA, 0xB361},{0xCFEB, 0xB362},{0xCFEC, 0xB363},{0xCFED, 0xB364},{0xCFEE, 0xB365},
- {0xCFEF, 0xB366},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF2, 0xB367},{0xCFF3, 0xC4F3},{0xCFF4, 0xB368},{0xCFF5, 0xC4F4},{0xCFF6, 0xB369},
- {0xCFF7, 0xB36A},{0xCFF8, 0xB36B},{0xCFF9, 0xB36C},{0xCFFA, 0xB36D},{0xCFFB, 0xB36E},{0xCFFC, 0xC4F5},{0xCFFD, 0xB36F},{0xCFFE, 0xB370},
- {0xCFFF, 0xB371},{0xD000, 0xC4F6},{0xD001, 0xB372},{0xD002, 0xB373},{0xD003, 0xB374},{0xD004, 0xC4F7},{0xD005, 0xB375},{0xD006, 0xB376},
- {0xD007, 0xB377},{0xD008, 0xB378},{0xD009, 0xB379},{0xD00A, 0xB37A},{0xD00B, 0xB381},{0xD00C, 0xB382},{0xD00D, 0xB383},{0xD00E, 0xB384},
- {0xD00F, 0xB385},{0xD010, 0xB386},{0xD011, 0xC4F8},{0xD012, 0xB387},{0xD013, 0xB388},{0xD014, 0xB389},{0xD015, 0xB38A},{0xD016, 0xB38B},
- {0xD017, 0xB38C},{0xD018, 0xC4F9},{0xD019, 0xB38D},{0xD01A, 0xB38E},{0xD01B, 0xB38F},{0xD01C, 0xB390},{0xD01D, 0xB391},{0xD01E, 0xB392},
- {0xD01F, 0xB393},{0xD020, 0xB394},{0xD021, 0xB395},{0xD022, 0xB396},{0xD023, 0xB397},{0xD024, 0xB398},{0xD025, 0xB399},{0xD026, 0xB39A},
- {0xD027, 0xB39B},{0xD028, 0xB39C},{0xD029, 0xB39D},{0xD02A, 0xB39E},{0xD02B, 0xB39F},{0xD02C, 0xB3A0},{0xD02D, 0xC4FA},{0xD02E, 0xB441},
- {0xD02F, 0xB442},{0xD030, 0xB443},{0xD031, 0xB444},{0xD032, 0xB445},{0xD033, 0xB446},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD036, 0xB447},
- {0xD037, 0xB448},{0xD038, 0xC4FD},{0xD039, 0xB449},{0xD03A, 0xB44A},{0xD03B, 0xB44B},{0xD03C, 0xC4FE},{0xD03D, 0xB44C},{0xD03E, 0xB44D},
- {0xD03F, 0xB44E},{0xD040, 0xB44F},{0xD041, 0xB450},{0xD042, 0xB451},{0xD043, 0xB452},{0xD044, 0xC5A1},{0xD045, 0xC5A2},{0xD046, 0xB453},
- {0xD047, 0xC5A3},{0xD048, 0xB454},{0xD049, 0xC5A4},{0xD04A, 0xB455},{0xD04B, 0xB456},{0xD04C, 0xB457},{0xD04D, 0xB458},{0xD04E, 0xB459},
- {0xD04F, 0xB45A},{0xD050, 0xC5A5},{0xD051, 0xB461},{0xD052, 0xB462},{0xD053, 0xB463},{0xD054, 0xC5A6},{0xD055, 0xB464},{0xD056, 0xB465},
- {0xD057, 0xB466},{0xD058, 0xC5A7},{0xD059, 0xB467},{0xD05A, 0xB468},{0xD05B, 0xB469},{0xD05C, 0xB46A},{0xD05D, 0xB46B},{0xD05E, 0xB46C},
- {0xD05F, 0xB46D},{0xD060, 0xC5A8},{0xD061, 0xB46E},{0xD062, 0xB46F},{0xD063, 0xB470},{0xD064, 0xB471},{0xD065, 0xB472},{0xD066, 0xB473},
- {0xD067, 0xB474},{0xD068, 0xB475},{0xD069, 0xB476},{0xD06A, 0xB477},{0xD06B, 0xB478},{0xD06C, 0xC5A9},{0xD06D, 0xC5AA},{0xD06E, 0xB479},
- {0xD06F, 0xB47A},{0xD070, 0xC5AB},{0xD071, 0xB481},{0xD072, 0xB482},{0xD073, 0xB483},{0xD074, 0xC5AC},{0xD075, 0xB484},{0xD076, 0xB485},
- {0xD077, 0xB486},{0xD078, 0xB487},{0xD079, 0xB488},{0xD07A, 0xB489},{0xD07B, 0xB48A},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD07E, 0xB48B},
- {0xD07F, 0xB48C},{0xD080, 0xB48D},{0xD081, 0xC5AF},{0xD082, 0xB48E},{0xD083, 0xB48F},{0xD084, 0xB490},{0xD085, 0xB491},{0xD086, 0xB492},
- {0xD087, 0xB493},{0xD088, 0xB494},{0xD089, 0xB495},{0xD08A, 0xB496},{0xD08B, 0xB497},{0xD08C, 0xB498},{0xD08D, 0xB499},{0xD08E, 0xB49A},
- {0xD08F, 0xB49B},{0xD090, 0xB49C},{0xD091, 0xB49D},{0xD092, 0xB49E},{0xD093, 0xB49F},{0xD094, 0xB4A0},{0xD095, 0xB541},{0xD096, 0xB542},
- {0xD097, 0xB543},{0xD098, 0xB544},{0xD099, 0xB545},{0xD09A, 0xB546},{0xD09B, 0xB547},{0xD09C, 0xB548},{0xD09D, 0xB549},{0xD09E, 0xB54A},
- {0xD09F, 0xB54B},{0xD0A0, 0xB54C},{0xD0A1, 0xB54D},{0xD0A2, 0xB54E},{0xD0A3, 0xB54F},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1},{0xD0A6, 0xB550},
- {0xD0A7, 0xB551},{0xD0A8, 0xC5B2},{0xD0A9, 0xB552},{0xD0AA, 0xB553},{0xD0AB, 0xB554},{0xD0AC, 0xC5B3},{0xD0AD, 0xB555},{0xD0AE, 0xB556},
- {0xD0AF, 0xB557},{0xD0B0, 0xB558},{0xD0B1, 0xB559},{0xD0B2, 0xB55A},{0xD0B3, 0xB561},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B6, 0xB562},
- {0xD0B7, 0xC5B6},{0xD0B8, 0xB563},{0xD0B9, 0xC5B7},{0xD0BA, 0xB564},{0xD0BB, 0xB565},{0xD0BC, 0xB566},{0xD0BD, 0xB567},{0xD0BE, 0xB568},
- {0xD0BF, 0xB569},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9},{0xD0C2, 0xB56A},{0xD0C3, 0xB56B},{0xD0C4, 0xC5BA},{0xD0C5, 0xB56C},{0xD0C6, 0xB56D},
- {0xD0C7, 0xB56E},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0CA, 0xB56F},{0xD0CB, 0xB570},{0xD0CC, 0xB571},{0xD0CD, 0xB572},{0xD0CE, 0xB573},
- {0xD0CF, 0xB574},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D2, 0xB575},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1},{0xD0D6, 0xB576},
- {0xD0D7, 0xB577},{0xD0D8, 0xB578},{0xD0D9, 0xB579},{0xD0DA, 0xB57A},{0xD0DB, 0xB581},{0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0DE, 0xB582},
- {0xD0DF, 0xB583},{0xD0E0, 0xC5C4},{0xD0E1, 0xB584},{0xD0E2, 0xB585},{0xD0E3, 0xB586},{0xD0E4, 0xC5C5},{0xD0E5, 0xB587},{0xD0E6, 0xB588},
- {0xD0E7, 0xB589},{0xD0E8, 0xB58A},{0xD0E9, 0xB58B},{0xD0EA, 0xB58C},{0xD0EB, 0xB58D},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EE, 0xB58E},
- {0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9},{0xD0F1, 0xC5CA},{0xD0F2, 0xB58F},{0xD0F3, 0xB590},{0xD0F4, 0xB591},{0xD0F5, 0xB592},{0xD0F6, 0xB593},
- {0xD0F7, 0xB594},{0xD0F8, 0xC5CB},{0xD0F9, 0xB595},{0xD0FA, 0xB596},{0xD0FB, 0xB597},{0xD0FC, 0xB598},{0xD0FD, 0xB599},{0xD0FE, 0xB59A},
- {0xD0FF, 0xB59B},{0xD100, 0xB59C},{0xD101, 0xB59D},{0xD102, 0xB59E},{0xD103, 0xB59F},{0xD104, 0xB5A0},{0xD105, 0xB641},{0xD106, 0xB642},
- {0xD107, 0xB643},{0xD108, 0xB644},{0xD109, 0xB645},{0xD10A, 0xB646},{0xD10B, 0xB647},{0xD10C, 0xB648},{0xD10D, 0xC5CC},{0xD10E, 0xB649},
- {0xD10F, 0xB64A},{0xD110, 0xB64B},{0xD111, 0xB64C},{0xD112, 0xB64D},{0xD113, 0xB64E},{0xD114, 0xB64F},{0xD115, 0xB650},{0xD116, 0xB651},
- {0xD117, 0xB652},{0xD118, 0xB653},{0xD119, 0xB654},{0xD11A, 0xB655},{0xD11B, 0xB656},{0xD11C, 0xB657},{0xD11D, 0xB658},{0xD11E, 0xB659},
- {0xD11F, 0xB65A},{0xD120, 0xB661},{0xD121, 0xB662},{0xD122, 0xB663},{0xD123, 0xB664},{0xD124, 0xB665},{0xD125, 0xB666},{0xD126, 0xB667},
- {0xD127, 0xB668},{0xD128, 0xB669},{0xD129, 0xB66A},{0xD12A, 0xB66B},{0xD12B, 0xB66C},{0xD12C, 0xB66D},{0xD12D, 0xB66E},{0xD12E, 0xB66F},
- {0xD12F, 0xB670},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD132, 0xB671},{0xD133, 0xB672},{0xD134, 0xC5CF},{0xD135, 0xB673},{0xD136, 0xB674},
- {0xD137, 0xB675},{0xD138, 0xC5D0},{0xD139, 0xB676},{0xD13A, 0xC5D1},{0xD13B, 0xB677},{0xD13C, 0xB678},{0xD13D, 0xB679},{0xD13E, 0xB67A},
- {0xD13F, 0xB681},{0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD142, 0xB682},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD146, 0xB683},
- {0xD147, 0xB684},{0xD148, 0xB685},{0xD149, 0xB686},{0xD14A, 0xB687},{0xD14B, 0xB688},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD14E, 0xB689},
- {0xD14F, 0xB68A},{0xD150, 0xC5D9},{0xD151, 0xB68B},{0xD152, 0xB68C},{0xD153, 0xB68D},{0xD154, 0xC5DA},{0xD155, 0xB68E},{0xD156, 0xB68F},
- {0xD157, 0xB690},{0xD158, 0xB691},{0xD159, 0xB692},{0xD15A, 0xB693},{0xD15B, 0xB694},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15E, 0xB695},
- {0xD15F, 0xC5DD},{0xD160, 0xB696},{0xD161, 0xC5DE},{0xD162, 0xB697},{0xD163, 0xB698},{0xD164, 0xB699},{0xD165, 0xB69A},{0xD166, 0xB69B},
- {0xD167, 0xB69C},{0xD168, 0xC5DF},{0xD169, 0xB69D},{0xD16A, 0xB69E},{0xD16B, 0xB69F},{0xD16C, 0xC5E0},{0xD16D, 0xB6A0},{0xD16E, 0xB741},
- {0xD16F, 0xB742},{0xD170, 0xB743},{0xD171, 0xB744},{0xD172, 0xB745},{0xD173, 0xB746},{0xD174, 0xB747},{0xD175, 0xB748},{0xD176, 0xB749},
- {0xD177, 0xB74A},{0xD178, 0xB74B},{0xD179, 0xB74C},{0xD17A, 0xB74D},{0xD17B, 0xB74E},{0xD17C, 0xC5E1},{0xD17D, 0xB74F},{0xD17E, 0xB750},
- {0xD17F, 0xB751},{0xD180, 0xB752},{0xD181, 0xB753},{0xD182, 0xB754},{0xD183, 0xB755},{0xD184, 0xC5E2},{0xD185, 0xB756},{0xD186, 0xB757},
- {0xD187, 0xB758},{0xD188, 0xC5E3},{0xD189, 0xB759},{0xD18A, 0xB75A},{0xD18B, 0xB761},{0xD18C, 0xB762},{0xD18D, 0xB763},{0xD18E, 0xB764},
- {0xD18F, 0xB765},{0xD190, 0xB766},{0xD191, 0xB767},{0xD192, 0xB768},{0xD193, 0xB769},{0xD194, 0xB76A},{0xD195, 0xB76B},{0xD196, 0xB76C},
- {0xD197, 0xB76D},{0xD198, 0xB76E},{0xD199, 0xB76F},{0xD19A, 0xB770},{0xD19B, 0xB771},{0xD19C, 0xB772},{0xD19D, 0xB773},{0xD19E, 0xB774},
- {0xD19F, 0xB775},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A2, 0xB776},{0xD1A3, 0xB777},{0xD1A4, 0xC5E6},{0xD1A5, 0xB778},{0xD1A6, 0xB779},
- {0xD1A7, 0xB77A},{0xD1A8, 0xC5E7},{0xD1A9, 0xB781},{0xD1AA, 0xB782},{0xD1AB, 0xB783},{0xD1AC, 0xB784},{0xD1AD, 0xB785},{0xD1AE, 0xB786},
- {0xD1AF, 0xB787},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9},{0xD1B2, 0xB788},{0xD1B3, 0xC5EA},{0xD1B4, 0xB789},{0xD1B5, 0xC5EB},{0xD1B6, 0xB78A},
- {0xD1B7, 0xB78B},{0xD1B8, 0xB78C},{0xD1B9, 0xB78D},{0xD1BA, 0xC5EC},{0xD1BB, 0xB78E},{0xD1BC, 0xC5ED},{0xD1BD, 0xB78F},{0xD1BE, 0xB790},
- {0xD1BF, 0xB791},{0xD1C0, 0xC5EE},{0xD1C1, 0xB792},{0xD1C2, 0xB793},{0xD1C3, 0xB794},{0xD1C4, 0xB795},{0xD1C5, 0xB796},{0xD1C6, 0xB797},
- {0xD1C7, 0xB798},{0xD1C8, 0xB799},{0xD1C9, 0xB79A},{0xD1CA, 0xB79B},{0xD1CB, 0xB79C},{0xD1CC, 0xB79D},{0xD1CD, 0xB79E},{0xD1CE, 0xB79F},
- {0xD1CF, 0xB7A0},{0xD1D0, 0xB841},{0xD1D1, 0xB842},{0xD1D2, 0xB843},{0xD1D3, 0xB844},{0xD1D4, 0xB845},{0xD1D5, 0xB846},{0xD1D6, 0xB847},
- {0xD1D7, 0xB848},{0xD1D8, 0xC5EF},{0xD1D9, 0xB849},{0xD1DA, 0xB84A},{0xD1DB, 0xB84B},{0xD1DC, 0xB84C},{0xD1DD, 0xB84D},{0xD1DE, 0xB84E},
- {0xD1DF, 0xB84F},{0xD1E0, 0xB850},{0xD1E1, 0xB851},{0xD1E2, 0xB852},{0xD1E3, 0xB853},{0xD1E4, 0xB854},{0xD1E5, 0xB855},{0xD1E6, 0xB856},
- {0xD1E7, 0xB857},{0xD1E8, 0xB858},{0xD1E9, 0xB859},{0xD1EA, 0xB85A},{0xD1EB, 0xB861},{0xD1EC, 0xB862},{0xD1ED, 0xB863},{0xD1EE, 0xB864},
- {0xD1EF, 0xB865},{0xD1F0, 0xB866},{0xD1F1, 0xB867},{0xD1F2, 0xB868},{0xD1F3, 0xB869},{0xD1F4, 0xC5F0},{0xD1F5, 0xB86A},{0xD1F6, 0xB86B},
- {0xD1F7, 0xB86C},{0xD1F8, 0xC5F1},{0xD1F9, 0xB86D},{0xD1FA, 0xB86E},{0xD1FB, 0xB86F},{0xD1FC, 0xB870},{0xD1FD, 0xB871},{0xD1FE, 0xB872},
- {0xD1FF, 0xB873},{0xD200, 0xB874},{0xD201, 0xB875},{0xD202, 0xB876},{0xD203, 0xB877},{0xD204, 0xB878},{0xD205, 0xB879},{0xD206, 0xB87A},
- {0xD207, 0xC5F2},{0xD208, 0xB881},{0xD209, 0xC5F3},{0xD20A, 0xB882},{0xD20B, 0xB883},{0xD20C, 0xB884},{0xD20D, 0xB885},{0xD20E, 0xB886},
- {0xD20F, 0xB887},{0xD210, 0xC5F4},{0xD211, 0xB888},{0xD212, 0xB889},{0xD213, 0xB88A},{0xD214, 0xB88B},{0xD215, 0xB88C},{0xD216, 0xB88D},
- {0xD217, 0xB88E},{0xD218, 0xB88F},{0xD219, 0xB890},{0xD21A, 0xB891},{0xD21B, 0xB892},{0xD21C, 0xB893},{0xD21D, 0xB894},{0xD21E, 0xB895},
- {0xD21F, 0xB896},{0xD220, 0xB897},{0xD221, 0xB898},{0xD222, 0xB899},{0xD223, 0xB89A},{0xD224, 0xB89B},{0xD225, 0xB89C},{0xD226, 0xB89D},
- {0xD227, 0xB89E},{0xD228, 0xB89F},{0xD229, 0xB8A0},{0xD22A, 0xB941},{0xD22B, 0xB942},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD22E, 0xB943},
- {0xD22F, 0xB944},{0xD230, 0xC5F7},{0xD231, 0xB945},{0xD232, 0xB946},{0xD233, 0xB947},{0xD234, 0xC5F8},{0xD235, 0xB948},{0xD236, 0xB949},
- {0xD237, 0xB94A},{0xD238, 0xB94B},{0xD239, 0xB94C},{0xD23A, 0xB94D},{0xD23B, 0xB94E},{0xD23C, 0xC5F9},{0xD23D, 0xC5FA},{0xD23E, 0xB94F},
- {0xD23F, 0xC5FB},{0xD240, 0xB950},{0xD241, 0xC5FC},{0xD242, 0xB951},{0xD243, 0xB952},{0xD244, 0xB953},{0xD245, 0xB954},{0xD246, 0xB955},
- {0xD247, 0xB956},{0xD248, 0xC5FD},{0xD249, 0xB957},{0xD24A, 0xB958},{0xD24B, 0xB959},{0xD24C, 0xB95A},{0xD24D, 0xB961},{0xD24E, 0xB962},
- {0xD24F, 0xB963},{0xD250, 0xB964},{0xD251, 0xB965},{0xD252, 0xB966},{0xD253, 0xB967},{0xD254, 0xB968},{0xD255, 0xB969},{0xD256, 0xB96A},
- {0xD257, 0xB96B},{0xD258, 0xB96C},{0xD259, 0xB96D},{0xD25A, 0xB96E},{0xD25B, 0xB96F},{0xD25C, 0xC5FE},{0xD25D, 0xB970},{0xD25E, 0xB971},
- {0xD25F, 0xB972},{0xD260, 0xB973},{0xD261, 0xB974},{0xD262, 0xB975},{0xD263, 0xB976},{0xD264, 0xC6A1},{0xD265, 0xB977},{0xD266, 0xB978},
- {0xD267, 0xB979},{0xD268, 0xB97A},{0xD269, 0xB981},{0xD26A, 0xB982},{0xD26B, 0xB983},{0xD26C, 0xB984},{0xD26D, 0xB985},{0xD26E, 0xB986},
- {0xD26F, 0xB987},{0xD270, 0xB988},{0xD271, 0xB989},{0xD272, 0xB98A},{0xD273, 0xB98B},{0xD274, 0xB98C},{0xD275, 0xB98D},{0xD276, 0xB98E},
- {0xD277, 0xB98F},{0xD278, 0xB990},{0xD279, 0xB991},{0xD27A, 0xB992},{0xD27B, 0xB993},{0xD27C, 0xB994},{0xD27D, 0xB995},{0xD27E, 0xB996},
- {0xD27F, 0xB997},{0xD280, 0xC6A2},{0xD281, 0xC6A3},{0xD282, 0xB998},{0xD283, 0xB999},{0xD284, 0xC6A4},{0xD285, 0xB99A},{0xD286, 0xB99B},
- {0xD287, 0xB99C},{0xD288, 0xC6A5},{0xD289, 0xB99D},{0xD28A, 0xB99E},{0xD28B, 0xB99F},{0xD28C, 0xB9A0},{0xD28D, 0xBA41},{0xD28E, 0xBA42},
- {0xD28F, 0xBA43},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD292, 0xBA44},{0xD293, 0xBA45},{0xD294, 0xBA46},{0xD295, 0xC6A8},{0xD296, 0xBA47},
- {0xD297, 0xBA48},{0xD298, 0xBA49},{0xD299, 0xBA4A},{0xD29A, 0xBA4B},{0xD29B, 0xBA4C},{0xD29C, 0xC6A9},{0xD29D, 0xBA4D},{0xD29E, 0xBA4E},
- {0xD29F, 0xBA4F},{0xD2A0, 0xC6AA},{0xD2A1, 0xBA50},{0xD2A2, 0xBA51},{0xD2A3, 0xBA52},{0xD2A4, 0xC6AB},{0xD2A5, 0xBA53},{0xD2A6, 0xBA54},
- {0xD2A7, 0xBA55},{0xD2A8, 0xBA56},{0xD2A9, 0xBA57},{0xD2AA, 0xBA58},{0xD2AB, 0xBA59},{0xD2AC, 0xC6AC},{0xD2AD, 0xBA5A},{0xD2AE, 0xBA61},
- {0xD2AF, 0xBA62},{0xD2B0, 0xBA63},{0xD2B1, 0xC6AD},{0xD2B2, 0xBA64},{0xD2B3, 0xBA65},{0xD2B4, 0xBA66},{0xD2B5, 0xBA67},{0xD2B6, 0xBA68},
- {0xD2B7, 0xBA69},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BA, 0xBA6A},{0xD2BB, 0xBA6B},{0xD2BC, 0xC6B0},{0xD2BD, 0xBA6C},{0xD2BE, 0xBA6D},
- {0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C1, 0xBA6E},{0xD2C2, 0xC6B3},{0xD2C3, 0xBA6F},{0xD2C4, 0xBA70},{0xD2C5, 0xBA71},{0xD2C6, 0xBA72},
- {0xD2C7, 0xBA73},{0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CA, 0xBA74},{0xD2CB, 0xC6B6},{0xD2CC, 0xBA75},{0xD2CD, 0xBA76},{0xD2CE, 0xBA77},
- {0xD2CF, 0xBA78},{0xD2D0, 0xBA79},{0xD2D1, 0xBA7A},{0xD2D2, 0xBA81},{0xD2D3, 0xBA82},{0xD2D4, 0xC6B7},{0xD2D5, 0xBA83},{0xD2D6, 0xBA84},
- {0xD2D7, 0xBA85},{0xD2D8, 0xC6B8},{0xD2D9, 0xBA86},{0xD2DA, 0xBA87},{0xD2DB, 0xBA88},{0xD2DC, 0xC6B9},{0xD2DD, 0xBA89},{0xD2DE, 0xBA8A},
- {0xD2DF, 0xBA8B},{0xD2E0, 0xBA8C},{0xD2E1, 0xBA8D},{0xD2E2, 0xBA8E},{0xD2E3, 0xBA8F},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB},{0xD2E6, 0xBA90},
- {0xD2E7, 0xBA91},{0xD2E8, 0xBA92},{0xD2E9, 0xBA93},{0xD2EA, 0xBA94},{0xD2EB, 0xBA95},{0xD2EC, 0xBA96},{0xD2ED, 0xBA97},{0xD2EE, 0xBA98},
- {0xD2EF, 0xBA99},{0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F2, 0xBA9A},{0xD2F3, 0xBA9B},{0xD2F4, 0xC6BE},{0xD2F5, 0xBA9C},{0xD2F6, 0xBA9D},
- {0xD2F7, 0xBA9E},{0xD2F8, 0xC6BF},{0xD2F9, 0xBA9F},{0xD2FA, 0xBAA0},{0xD2FB, 0xBB41},{0xD2FC, 0xBB42},{0xD2FD, 0xBB43},{0xD2FE, 0xBB44},
- {0xD2FF, 0xBB45},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD302, 0xBB46},{0xD303, 0xC6C2},{0xD304, 0xBB47},{0xD305, 0xC6C3},{0xD306, 0xBB48},
- {0xD307, 0xBB49},{0xD308, 0xBB4A},{0xD309, 0xBB4B},{0xD30A, 0xBB4C},{0xD30B, 0xBB4D},{0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6},
- {0xD30F, 0xBB4E},{0xD310, 0xC6C7},{0xD311, 0xBB4F},{0xD312, 0xBB50},{0xD313, 0xBB51},{0xD314, 0xC6C8},{0xD315, 0xBB52},{0xD316, 0xC6C9},
- {0xD317, 0xBB53},{0xD318, 0xBB54},{0xD319, 0xBB55},{0xD31A, 0xBB56},{0xD31B, 0xBB57},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB},{0xD31E, 0xBB58},
- {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD322, 0xBB59},{0xD323, 0xBB5A},{0xD324, 0xBB61},{0xD325, 0xC6CF},{0xD326, 0xBB62},
- {0xD327, 0xBB63},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32A, 0xBB64},{0xD32B, 0xBB65},{0xD32C, 0xC6D2},{0xD32D, 0xBB66},{0xD32E, 0xBB67},
- {0xD32F, 0xBB68},{0xD330, 0xC6D3},{0xD331, 0xBB69},{0xD332, 0xBB6A},{0xD333, 0xBB6B},{0xD334, 0xBB6C},{0xD335, 0xBB6D},{0xD336, 0xBB6E},
- {0xD337, 0xBB6F},{0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33A, 0xBB70},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD33E, 0xBB71},
- {0xD33F, 0xBB72},{0xD340, 0xBB73},{0xD341, 0xBB74},{0xD342, 0xBB75},{0xD343, 0xBB76},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD346, 0xBB77},
- {0xD347, 0xBB78},{0xD348, 0xBB79},{0xD349, 0xBB7A},{0xD34A, 0xBB81},{0xD34B, 0xBB82},{0xD34C, 0xBB83},{0xD34D, 0xBB84},{0xD34E, 0xBB85},
- {0xD34F, 0xBB86},{0xD350, 0xBB87},{0xD351, 0xBB88},{0xD352, 0xBB89},{0xD353, 0xBB8A},{0xD354, 0xBB8B},{0xD355, 0xBB8C},{0xD356, 0xBB8D},
- {0xD357, 0xBB8E},{0xD358, 0xBB8F},{0xD359, 0xBB90},{0xD35A, 0xBB91},{0xD35B, 0xBB92},{0xD35C, 0xBB93},{0xD35D, 0xBB94},{0xD35E, 0xBB95},
- {0xD35F, 0xBB96},{0xD360, 0xBB97},{0xD361, 0xBB98},{0xD362, 0xBB99},{0xD363, 0xBB9A},{0xD364, 0xBB9B},{0xD365, 0xBB9C},{0xD366, 0xBB9D},
- {0xD367, 0xBB9E},{0xD368, 0xBB9F},{0xD369, 0xBBA0},{0xD36A, 0xBC41},{0xD36B, 0xBC42},{0xD36C, 0xBC43},{0xD36D, 0xBC44},{0xD36E, 0xBC45},
- {0xD36F, 0xBC46},{0xD370, 0xBC47},{0xD371, 0xBC48},{0xD372, 0xBC49},{0xD373, 0xBC4A},{0xD374, 0xBC4B},{0xD375, 0xBC4C},{0xD376, 0xBC4D},
- {0xD377, 0xBC4E},{0xD378, 0xBC4F},{0xD379, 0xBC50},{0xD37A, 0xBC51},{0xD37B, 0xBC52},{0xD37C, 0xC6DB},{0xD37D, 0xC6DC},{0xD37E, 0xBC53},
- {0xD37F, 0xBC54},{0xD380, 0xC6DD},{0xD381, 0xBC55},{0xD382, 0xBC56},{0xD383, 0xBC57},{0xD384, 0xC6DE},{0xD385, 0xBC58},{0xD386, 0xBC59},
- {0xD387, 0xBC5A},{0xD388, 0xBC61},{0xD389, 0xBC62},{0xD38A, 0xBC63},{0xD38B, 0xBC64},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38E, 0xBC65},
- {0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3},{0xD392, 0xBC66},{0xD393, 0xBC67},{0xD394, 0xBC68},{0xD395, 0xBC69},{0xD396, 0xBC6A},
- {0xD397, 0xBC6B},{0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39A, 0xBC6C},{0xD39B, 0xBC6D},{0xD39C, 0xC6E6},{0xD39D, 0xBC6E},{0xD39E, 0xBC6F},
- {0xD39F, 0xBC70},{0xD3A0, 0xC6E7},{0xD3A1, 0xBC71},{0xD3A2, 0xBC72},{0xD3A3, 0xBC73},{0xD3A4, 0xBC74},{0xD3A5, 0xBC75},{0xD3A6, 0xBC76},
- {0xD3A7, 0xBC77},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AA, 0xBC78},{0xD3AB, 0xC6EA},{0xD3AC, 0xBC79},{0xD3AD, 0xC6EB},{0xD3AE, 0xBC7A},
- {0xD3AF, 0xBC81},{0xD3B0, 0xBC82},{0xD3B1, 0xBC83},{0xD3B2, 0xBC84},{0xD3B3, 0xBC85},{0xD3B4, 0xC6EC},{0xD3B5, 0xBC86},{0xD3B6, 0xBC87},
- {0xD3B7, 0xBC88},{0xD3B8, 0xC6ED},{0xD3B9, 0xBC89},{0xD3BA, 0xBC8A},{0xD3BB, 0xBC8B},{0xD3BC, 0xC6EE},{0xD3BD, 0xBC8C},{0xD3BE, 0xBC8D},
- {0xD3BF, 0xBC8E},{0xD3C0, 0xBC8F},{0xD3C1, 0xBC90},{0xD3C2, 0xBC91},{0xD3C3, 0xBC92},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C6, 0xBC93},
- {0xD3C7, 0xBC94},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3CA, 0xBC95},{0xD3CB, 0xBC96},{0xD3CC, 0xBC97},{0xD3CD, 0xBC98},{0xD3CE, 0xBC99},
- {0xD3CF, 0xBC9A},{0xD3D0, 0xC6F3},{0xD3D1, 0xBC9B},{0xD3D2, 0xBC9C},{0xD3D3, 0xBC9D},{0xD3D4, 0xBC9E},{0xD3D5, 0xBC9F},{0xD3D6, 0xBCA0},
- {0xD3D7, 0xBD41},{0xD3D8, 0xC6F4},{0xD3D9, 0xBD42},{0xD3DA, 0xBD43},{0xD3DB, 0xBD44},{0xD3DC, 0xBD45},{0xD3DD, 0xBD46},{0xD3DE, 0xBD47},
- {0xD3DF, 0xBD48},{0xD3E0, 0xBD49},{0xD3E1, 0xC6F5},{0xD3E2, 0xBD4A},{0xD3E3, 0xC6F6},{0xD3E4, 0xBD4B},{0xD3E5, 0xBD4C},{0xD3E6, 0xBD4D},
- {0xD3E7, 0xBD4E},{0xD3E8, 0xBD4F},{0xD3E9, 0xBD50},{0xD3EA, 0xBD51},{0xD3EB, 0xBD52},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3EE, 0xBD53},
- {0xD3EF, 0xBD54},{0xD3F0, 0xC6F9},{0xD3F1, 0xBD55},{0xD3F2, 0xBD56},{0xD3F3, 0xBD57},{0xD3F4, 0xC6FA},{0xD3F5, 0xBD58},{0xD3F6, 0xBD59},
- {0xD3F7, 0xBD5A},{0xD3F8, 0xBD61},{0xD3F9, 0xBD62},{0xD3FA, 0xBD63},{0xD3FB, 0xBD64},{0xD3FC, 0xC6FB},{0xD3FD, 0xC6FC},{0xD3FE, 0xBD65},
- {0xD3FF, 0xC6FD},{0xD400, 0xBD66},{0xD401, 0xC6FE},{0xD402, 0xBD67},{0xD403, 0xBD68},{0xD404, 0xBD69},{0xD405, 0xBD6A},{0xD406, 0xBD6B},
- {0xD407, 0xBD6C},{0xD408, 0xC7A1},{0xD409, 0xBD6D},{0xD40A, 0xBD6E},{0xD40B, 0xBD6F},{0xD40C, 0xBD70},{0xD40D, 0xBD71},{0xD40E, 0xBD72},
- {0xD40F, 0xBD73},{0xD410, 0xBD74},{0xD411, 0xBD75},{0xD412, 0xBD76},{0xD413, 0xBD77},{0xD414, 0xBD78},{0xD415, 0xBD79},{0xD416, 0xBD7A},
- {0xD417, 0xBD81},{0xD418, 0xBD82},{0xD419, 0xBD83},{0xD41A, 0xBD84},{0xD41B, 0xBD85},{0xD41C, 0xBD86},{0xD41D, 0xC7A2},{0xD41E, 0xBD87},
- {0xD41F, 0xBD88},{0xD420, 0xBD89},{0xD421, 0xBD8A},{0xD422, 0xBD8B},{0xD423, 0xBD8C},{0xD424, 0xBD8D},{0xD425, 0xBD8E},{0xD426, 0xBD8F},
- {0xD427, 0xBD90},{0xD428, 0xBD91},{0xD429, 0xBD92},{0xD42A, 0xBD93},{0xD42B, 0xBD94},{0xD42C, 0xBD95},{0xD42D, 0xBD96},{0xD42E, 0xBD97},
- {0xD42F, 0xBD98},{0xD430, 0xBD99},{0xD431, 0xBD9A},{0xD432, 0xBD9B},{0xD433, 0xBD9C},{0xD434, 0xBD9D},{0xD435, 0xBD9E},{0xD436, 0xBD9F},
- {0xD437, 0xBDA0},{0xD438, 0xBE41},{0xD439, 0xBE42},{0xD43A, 0xBE43},{0xD43B, 0xBE44},{0xD43C, 0xBE45},{0xD43D, 0xBE46},{0xD43E, 0xBE47},
- {0xD43F, 0xBE48},{0xD440, 0xC7A3},{0xD441, 0xBE49},{0xD442, 0xBE4A},{0xD443, 0xBE4B},{0xD444, 0xC7A4},{0xD445, 0xBE4C},{0xD446, 0xBE4D},
- {0xD447, 0xBE4E},{0xD448, 0xBE4F},{0xD449, 0xBE50},{0xD44A, 0xBE51},{0xD44B, 0xBE52},{0xD44C, 0xBE53},{0xD44D, 0xBE54},{0xD44E, 0xBE55},
- {0xD44F, 0xBE56},{0xD450, 0xBE57},{0xD451, 0xBE58},{0xD452, 0xBE59},{0xD453, 0xBE5A},{0xD454, 0xBE61},{0xD455, 0xBE62},{0xD456, 0xBE63},
- {0xD457, 0xBE64},{0xD458, 0xBE65},{0xD459, 0xBE66},{0xD45A, 0xBE67},{0xD45B, 0xBE68},{0xD45C, 0xC7A5},{0xD45D, 0xBE69},{0xD45E, 0xBE6A},
- {0xD45F, 0xBE6B},{0xD460, 0xC7A6},{0xD461, 0xBE6C},{0xD462, 0xBE6D},{0xD463, 0xBE6E},{0xD464, 0xC7A7},{0xD465, 0xBE6F},{0xD466, 0xBE70},
- {0xD467, 0xBE71},{0xD468, 0xBE72},{0xD469, 0xBE73},{0xD46A, 0xBE74},{0xD46B, 0xBE75},{0xD46C, 0xBE76},{0xD46D, 0xC7A8},{0xD46E, 0xBE77},
- {0xD46F, 0xC7A9},{0xD470, 0xBE78},{0xD471, 0xBE79},{0xD472, 0xBE7A},{0xD473, 0xBE81},{0xD474, 0xBE82},{0xD475, 0xBE83},{0xD476, 0xBE84},
- {0xD477, 0xBE85},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47A, 0xBE86},{0xD47B, 0xBE87},{0xD47C, 0xC7AC},{0xD47D, 0xBE88},{0xD47E, 0xBE89},
- {0xD47F, 0xC7AD},{0xD480, 0xC7AE},{0xD481, 0xBE8A},{0xD482, 0xC7AF},{0xD483, 0xBE8B},{0xD484, 0xBE8C},{0xD485, 0xBE8D},{0xD486, 0xBE8E},
- {0xD487, 0xBE8F},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48A, 0xBE90},{0xD48B, 0xC7B2},{0xD48C, 0xBE91},{0xD48D, 0xC7B3},{0xD48E, 0xBE92},
- {0xD48F, 0xBE93},{0xD490, 0xBE94},{0xD491, 0xBE95},{0xD492, 0xBE96},{0xD493, 0xBE97},{0xD494, 0xC7B4},{0xD495, 0xBE98},{0xD496, 0xBE99},
- {0xD497, 0xBE9A},{0xD498, 0xBE9B},{0xD499, 0xBE9C},{0xD49A, 0xBE9D},{0xD49B, 0xBE9E},{0xD49C, 0xBE9F},{0xD49D, 0xBEA0},{0xD49E, 0xBF41},
- {0xD49F, 0xBF42},{0xD4A0, 0xBF43},{0xD4A1, 0xBF44},{0xD4A2, 0xBF45},{0xD4A3, 0xBF46},{0xD4A4, 0xBF47},{0xD4A5, 0xBF48},{0xD4A6, 0xBF49},
- {0xD4A7, 0xBF4A},{0xD4A8, 0xBF4B},{0xD4A9, 0xC7B5},{0xD4AA, 0xBF4C},{0xD4AB, 0xBF4D},{0xD4AC, 0xBF4E},{0xD4AD, 0xBF4F},{0xD4AE, 0xBF50},
- {0xD4AF, 0xBF51},{0xD4B0, 0xBF52},{0xD4B1, 0xBF53},{0xD4B2, 0xBF54},{0xD4B3, 0xBF55},{0xD4B4, 0xBF56},{0xD4B5, 0xBF57},{0xD4B6, 0xBF58},
- {0xD4B7, 0xBF59},{0xD4B8, 0xBF5A},{0xD4B9, 0xBF61},{0xD4BA, 0xBF62},{0xD4BB, 0xBF63},{0xD4BC, 0xBF64},{0xD4BD, 0xBF65},{0xD4BE, 0xBF66},
- {0xD4BF, 0xBF67},{0xD4C0, 0xBF68},{0xD4C1, 0xBF69},{0xD4C2, 0xBF6A},{0xD4C3, 0xBF6B},{0xD4C4, 0xBF6C},{0xD4C5, 0xBF6D},{0xD4C6, 0xBF6E},
- {0xD4C7, 0xBF6F},{0xD4C8, 0xBF70},{0xD4C9, 0xBF71},{0xD4CA, 0xBF72},{0xD4CB, 0xBF73},{0xD4CC, 0xC7B6},{0xD4CD, 0xBF74},{0xD4CE, 0xBF75},
- {0xD4CF, 0xBF76},{0xD4D0, 0xC7B7},{0xD4D1, 0xBF77},{0xD4D2, 0xBF78},{0xD4D3, 0xBF79},{0xD4D4, 0xC7B8},{0xD4D5, 0xBF7A},{0xD4D6, 0xBF81},
- {0xD4D7, 0xBF82},{0xD4D8, 0xBF83},{0xD4D9, 0xBF84},{0xD4DA, 0xBF85},{0xD4DB, 0xBF86},{0xD4DC, 0xC7B9},{0xD4DD, 0xBF87},{0xD4DE, 0xBF88},
- {0xD4DF, 0xC7BA},{0xD4E0, 0xBF89},{0xD4E1, 0xBF8A},{0xD4E2, 0xBF8B},{0xD4E3, 0xBF8C},{0xD4E4, 0xBF8D},{0xD4E5, 0xBF8E},{0xD4E6, 0xBF8F},
- {0xD4E7, 0xBF90},{0xD4E8, 0xC7BB},{0xD4E9, 0xBF91},{0xD4EA, 0xBF92},{0xD4EB, 0xBF93},{0xD4EC, 0xC7BC},{0xD4ED, 0xBF94},{0xD4EE, 0xBF95},
- {0xD4EF, 0xBF96},{0xD4F0, 0xC7BD},{0xD4F1, 0xBF97},{0xD4F2, 0xBF98},{0xD4F3, 0xBF99},{0xD4F4, 0xBF9A},{0xD4F5, 0xBF9B},{0xD4F6, 0xBF9C},
- {0xD4F7, 0xBF9D},{0xD4F8, 0xC7BE},{0xD4F9, 0xBF9E},{0xD4FA, 0xBF9F},{0xD4FB, 0xC7BF},{0xD4FC, 0xBFA0},{0xD4FD, 0xC7C0},{0xD4FE, 0xC041},
- {0xD4FF, 0xC042},{0xD500, 0xC043},{0xD501, 0xC044},{0xD502, 0xC045},{0xD503, 0xC046},{0xD504, 0xC7C1},{0xD505, 0xC047},{0xD506, 0xC048},
- {0xD507, 0xC049},{0xD508, 0xC7C2},{0xD509, 0xC04A},{0xD50A, 0xC04B},{0xD50B, 0xC04C},{0xD50C, 0xC7C3},{0xD50D, 0xC04D},{0xD50E, 0xC04E},
- {0xD50F, 0xC04F},{0xD510, 0xC050},{0xD511, 0xC051},{0xD512, 0xC052},{0xD513, 0xC053},{0xD514, 0xC7C4},{0xD515, 0xC7C5},{0xD516, 0xC054},
- {0xD517, 0xC7C6},{0xD518, 0xC055},{0xD519, 0xC056},{0xD51A, 0xC057},{0xD51B, 0xC058},{0xD51C, 0xC059},{0xD51D, 0xC05A},{0xD51E, 0xC061},
- {0xD51F, 0xC062},{0xD520, 0xC063},{0xD521, 0xC064},{0xD522, 0xC065},{0xD523, 0xC066},{0xD524, 0xC067},{0xD525, 0xC068},{0xD526, 0xC069},
- {0xD527, 0xC06A},{0xD528, 0xC06B},{0xD529, 0xC06C},{0xD52A, 0xC06D},{0xD52B, 0xC06E},{0xD52C, 0xC06F},{0xD52D, 0xC070},{0xD52E, 0xC071},
- {0xD52F, 0xC072},{0xD530, 0xC073},{0xD531, 0xC074},{0xD532, 0xC075},{0xD533, 0xC076},{0xD534, 0xC077},{0xD535, 0xC078},{0xD536, 0xC079},
- {0xD537, 0xC07A},{0xD538, 0xC081},{0xD539, 0xC082},{0xD53A, 0xC083},{0xD53B, 0xC084},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD53E, 0xC085},
- {0xD53F, 0xC086},{0xD540, 0xC7C9},{0xD541, 0xC087},{0xD542, 0xC088},{0xD543, 0xC089},{0xD544, 0xC7CA},{0xD545, 0xC08A},{0xD546, 0xC08B},
- {0xD547, 0xC08C},{0xD548, 0xC08D},{0xD549, 0xC08E},{0xD54A, 0xC08F},{0xD54B, 0xC090},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54E, 0xC091},
- {0xD54F, 0xC7CD},{0xD550, 0xC092},{0xD551, 0xC7CE},{0xD552, 0xC093},{0xD553, 0xC094},{0xD554, 0xC095},{0xD555, 0xC096},{0xD556, 0xC097},
- {0xD557, 0xC098},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55A, 0xC099},{0xD55B, 0xC09A},{0xD55C, 0xC7D1},{0xD55D, 0xC09B},{0xD55E, 0xC09C},
- {0xD55F, 0xC09D},{0xD560, 0xC7D2},{0xD561, 0xC09E},{0xD562, 0xC09F},{0xD563, 0xC0A0},{0xD564, 0xC141},{0xD565, 0xC7D3},{0xD566, 0xC142},
- {0xD567, 0xC143},{0xD568, 0xC7D4},{0xD569, 0xC7D5},{0xD56A, 0xC144},{0xD56B, 0xC7D6},{0xD56C, 0xC145},{0xD56D, 0xC7D7},{0xD56E, 0xC146},
- {0xD56F, 0xC147},{0xD570, 0xC148},{0xD571, 0xC149},{0xD572, 0xC14A},{0xD573, 0xC14B},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD576, 0xC14C},
- {0xD577, 0xC14D},{0xD578, 0xC7DA},{0xD579, 0xC14E},{0xD57A, 0xC14F},{0xD57B, 0xC150},{0xD57C, 0xC7DB},{0xD57D, 0xC151},{0xD57E, 0xC152},
- {0xD57F, 0xC153},{0xD580, 0xC154},{0xD581, 0xC155},{0xD582, 0xC156},{0xD583, 0xC157},{0xD584, 0xC7DC},{0xD585, 0xC7DD},{0xD586, 0xC158},
- {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD58A, 0xC159},{0xD58B, 0xC15A},{0xD58C, 0xC161},{0xD58D, 0xC162},{0xD58E, 0xC163},
- {0xD58F, 0xC164},{0xD590, 0xC7E1},{0xD591, 0xC165},{0xD592, 0xC166},{0xD593, 0xC167},{0xD594, 0xC168},{0xD595, 0xC169},{0xD596, 0xC16A},
- {0xD597, 0xC16B},{0xD598, 0xC16C},{0xD599, 0xC16D},{0xD59A, 0xC16E},{0xD59B, 0xC16F},{0xD59C, 0xC170},{0xD59D, 0xC171},{0xD59E, 0xC172},
- {0xD59F, 0xC173},{0xD5A0, 0xC174},{0xD5A1, 0xC175},{0xD5A2, 0xC176},{0xD5A3, 0xC177},{0xD5A4, 0xC178},{0xD5A5, 0xC7E2},{0xD5A6, 0xC179},
- {0xD5A7, 0xC17A},{0xD5A8, 0xC181},{0xD5A9, 0xC182},{0xD5AA, 0xC183},{0xD5AB, 0xC184},{0xD5AC, 0xC185},{0xD5AD, 0xC186},{0xD5AE, 0xC187},
- {0xD5AF, 0xC188},{0xD5B0, 0xC189},{0xD5B1, 0xC18A},{0xD5B2, 0xC18B},{0xD5B3, 0xC18C},{0xD5B4, 0xC18D},{0xD5B5, 0xC18E},{0xD5B6, 0xC18F},
- {0xD5B7, 0xC190},{0xD5B8, 0xC191},{0xD5B9, 0xC192},{0xD5BA, 0xC193},{0xD5BB, 0xC194},{0xD5BC, 0xC195},{0xD5BD, 0xC196},{0xD5BE, 0xC197},
- {0xD5BF, 0xC198},{0xD5C0, 0xC199},{0xD5C1, 0xC19A},{0xD5C2, 0xC19B},{0xD5C3, 0xC19C},{0xD5C4, 0xC19D},{0xD5C5, 0xC19E},{0xD5C6, 0xC19F},
- {0xD5C7, 0xC1A0},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CA, 0xC241},{0xD5CB, 0xC242},{0xD5CC, 0xC7E5},{0xD5CD, 0xC243},{0xD5CE, 0xC244},
- {0xD5CF, 0xC245},{0xD5D0, 0xC7E6},{0xD5D1, 0xC246},{0xD5D2, 0xC7E7},{0xD5D3, 0xC247},{0xD5D4, 0xC248},{0xD5D5, 0xC249},{0xD5D6, 0xC24A},
- {0xD5D7, 0xC24B},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DA, 0xC24C},{0xD5DB, 0xC7EA},{0xD5DC, 0xC24D},{0xD5DD, 0xC7EB},{0xD5DE, 0xC24E},
- {0xD5DF, 0xC24F},{0xD5E0, 0xC250},{0xD5E1, 0xC251},{0xD5E2, 0xC252},{0xD5E3, 0xC253},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED},{0xD5E6, 0xC254},
- {0xD5E7, 0xC255},{0xD5E8, 0xC7EE},{0xD5E9, 0xC256},{0xD5EA, 0xC257},{0xD5EB, 0xC258},{0xD5EC, 0xC7EF},{0xD5ED, 0xC259},{0xD5EE, 0xC25A},
- {0xD5EF, 0xC261},{0xD5F0, 0xC262},{0xD5F1, 0xC263},{0xD5F2, 0xC264},{0xD5F3, 0xC265},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F6, 0xC266},
- {0xD5F7, 0xC7F2},{0xD5F8, 0xC267},{0xD5F9, 0xC7F3},{0xD5FA, 0xC268},{0xD5FB, 0xC269},{0xD5FC, 0xC26A},{0xD5FD, 0xC26B},{0xD5FE, 0xC26C},
- {0xD5FF, 0xC26D},{0xD600, 0xC7F4},{0xD601, 0xC7F5},{0xD602, 0xC26E},{0xD603, 0xC26F},{0xD604, 0xC7F6},{0xD605, 0xC270},{0xD606, 0xC271},
- {0xD607, 0xC272},{0xD608, 0xC7F7},{0xD609, 0xC273},{0xD60A, 0xC274},{0xD60B, 0xC275},{0xD60C, 0xC276},{0xD60D, 0xC277},{0xD60E, 0xC278},
- {0xD60F, 0xC279},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD612, 0xC27A},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD616, 0xC281},
- {0xD617, 0xC282},{0xD618, 0xC283},{0xD619, 0xC284},{0xD61A, 0xC285},{0xD61B, 0xC286},{0xD61C, 0xC7FD},{0xD61D, 0xC287},{0xD61E, 0xC288},
- {0xD61F, 0xC289},{0xD620, 0xC7FE},{0xD621, 0xC28A},{0xD622, 0xC28B},{0xD623, 0xC28C},{0xD624, 0xC8A1},{0xD625, 0xC28D},{0xD626, 0xC28E},
- {0xD627, 0xC28F},{0xD628, 0xC290},{0xD629, 0xC291},{0xD62A, 0xC292},{0xD62B, 0xC293},{0xD62C, 0xC294},{0xD62D, 0xC8A2},{0xD62E, 0xC295},
- {0xD62F, 0xC296},{0xD630, 0xC297},{0xD631, 0xC298},{0xD632, 0xC299},{0xD633, 0xC29A},{0xD634, 0xC29B},{0xD635, 0xC29C},{0xD636, 0xC29D},
- {0xD637, 0xC29E},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63A, 0xC29F},{0xD63B, 0xC2A0},{0xD63C, 0xC8A5},{0xD63D, 0xC341},{0xD63E, 0xC342},
- {0xD63F, 0xC343},{0xD640, 0xC8A6},{0xD641, 0xC344},{0xD642, 0xC345},{0xD643, 0xC346},{0xD644, 0xC347},{0xD645, 0xC8A7},{0xD646, 0xC348},
- {0xD647, 0xC349},{0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64A, 0xC34A},{0xD64B, 0xC8AA},{0xD64C, 0xC34B},{0xD64D, 0xC8AB},{0xD64E, 0xC34C},
- {0xD64F, 0xC34D},{0xD650, 0xC34E},{0xD651, 0xC8AC},{0xD652, 0xC34F},{0xD653, 0xC350},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD656, 0xC351},
- {0xD657, 0xC352},{0xD658, 0xC8AF},{0xD659, 0xC353},{0xD65A, 0xC354},{0xD65B, 0xC355},{0xD65C, 0xC8B0},{0xD65D, 0xC356},{0xD65E, 0xC357},
- {0xD65F, 0xC358},{0xD660, 0xC359},{0xD661, 0xC35A},{0xD662, 0xC361},{0xD663, 0xC362},{0xD664, 0xC363},{0xD665, 0xC364},{0xD666, 0xC365},
- {0xD667, 0xC8B1},{0xD668, 0xC366},{0xD669, 0xC8B2},{0xD66A, 0xC367},{0xD66B, 0xC368},{0xD66C, 0xC369},{0xD66D, 0xC36A},{0xD66E, 0xC36B},
- {0xD66F, 0xC36C},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD672, 0xC36D},{0xD673, 0xC36E},{0xD674, 0xC8B5},{0xD675, 0xC36F},{0xD676, 0xC370},
- {0xD677, 0xC371},{0xD678, 0xC372},{0xD679, 0xC373},{0xD67A, 0xC374},{0xD67B, 0xC375},{0xD67C, 0xC376},{0xD67D, 0xC377},{0xD67E, 0xC378},
- {0xD67F, 0xC379},{0xD680, 0xC37A},{0xD681, 0xC381},{0xD682, 0xC382},{0xD683, 0xC8B6},{0xD684, 0xC383},{0xD685, 0xC8B7},{0xD686, 0xC384},
- {0xD687, 0xC385},{0xD688, 0xC386},{0xD689, 0xC387},{0xD68A, 0xC388},{0xD68B, 0xC389},{0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD68E, 0xC38A},
- {0xD68F, 0xC38B},{0xD690, 0xC8BA},{0xD691, 0xC38C},{0xD692, 0xC38D},{0xD693, 0xC38E},{0xD694, 0xC8BB},{0xD695, 0xC38F},{0xD696, 0xC390},
- {0xD697, 0xC391},{0xD698, 0xC392},{0xD699, 0xC393},{0xD69A, 0xC394},{0xD69B, 0xC395},{0xD69C, 0xC396},{0xD69D, 0xC8BC},{0xD69E, 0xC397},
- {0xD69F, 0xC8BD},{0xD6A0, 0xC398},{0xD6A1, 0xC8BE},{0xD6A2, 0xC399},{0xD6A3, 0xC39A},{0xD6A4, 0xC39B},{0xD6A5, 0xC39C},{0xD6A6, 0xC39D},
- {0xD6A7, 0xC39E},{0xD6A8, 0xC8BF},{0xD6A9, 0xC39F},{0xD6AA, 0xC3A0},{0xD6AB, 0xC441},{0xD6AC, 0xC8C0},{0xD6AD, 0xC442},{0xD6AE, 0xC443},
- {0xD6AF, 0xC444},{0xD6B0, 0xC8C1},{0xD6B1, 0xC445},{0xD6B2, 0xC446},{0xD6B3, 0xC447},{0xD6B4, 0xC448},{0xD6B5, 0xC449},{0xD6B6, 0xC44A},
- {0xD6B7, 0xC44B},{0xD6B8, 0xC44C},{0xD6B9, 0xC8C2},{0xD6BA, 0xC44D},{0xD6BB, 0xC8C3},{0xD6BC, 0xC44E},{0xD6BD, 0xC44F},{0xD6BE, 0xC450},
- {0xD6BF, 0xC451},{0xD6C0, 0xC452},{0xD6C1, 0xC453},{0xD6C2, 0xC454},{0xD6C3, 0xC455},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C6, 0xC456},
- {0xD6C7, 0xC457},{0xD6C8, 0xC8C6},{0xD6C9, 0xC458},{0xD6CA, 0xC459},{0xD6CB, 0xC45A},{0xD6CC, 0xC8C7},{0xD6CD, 0xC461},{0xD6CE, 0xC462},
- {0xD6CF, 0xC463},{0xD6D0, 0xC464},{0xD6D1, 0xC8C8},{0xD6D2, 0xC465},{0xD6D3, 0xC466},{0xD6D4, 0xC8C9},{0xD6D5, 0xC467},{0xD6D6, 0xC468},
- {0xD6D7, 0xC8CA},{0xD6D8, 0xC469},{0xD6D9, 0xC8CB},{0xD6DA, 0xC46A},{0xD6DB, 0xC46B},{0xD6DC, 0xC46C},{0xD6DD, 0xC46D},{0xD6DE, 0xC46E},
- {0xD6DF, 0xC46F},{0xD6E0, 0xC8CC},{0xD6E1, 0xC470},{0xD6E2, 0xC471},{0xD6E3, 0xC472},{0xD6E4, 0xC8CD},{0xD6E5, 0xC473},{0xD6E6, 0xC474},
- {0xD6E7, 0xC475},{0xD6E8, 0xC8CE},{0xD6E9, 0xC476},{0xD6EA, 0xC477},{0xD6EB, 0xC478},{0xD6EC, 0xC479},{0xD6ED, 0xC47A},{0xD6EE, 0xC481},
- {0xD6EF, 0xC482},{0xD6F0, 0xC8CF},{0xD6F1, 0xC483},{0xD6F2, 0xC484},{0xD6F3, 0xC485},{0xD6F4, 0xC486},{0xD6F5, 0xC8D0},{0xD6F6, 0xC487},
- {0xD6F7, 0xC488},{0xD6F8, 0xC489},{0xD6F9, 0xC48A},{0xD6FA, 0xC48B},{0xD6FB, 0xC48C},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD6FE, 0xC48D},
- {0xD6FF, 0xC48E},{0xD700, 0xC8D3},{0xD701, 0xC48F},{0xD702, 0xC490},{0xD703, 0xC491},{0xD704, 0xC8D4},{0xD705, 0xC492},{0xD706, 0xC493},
- {0xD707, 0xC494},{0xD708, 0xC495},{0xD709, 0xC496},{0xD70A, 0xC497},{0xD70B, 0xC498},{0xD70C, 0xC499},{0xD70D, 0xC49A},{0xD70E, 0xC49B},
- {0xD70F, 0xC49C},{0xD710, 0xC49D},{0xD711, 0xC8D5},{0xD712, 0xC49E},{0xD713, 0xC49F},{0xD714, 0xC4A0},{0xD715, 0xC541},{0xD716, 0xC542},
- {0xD717, 0xC543},{0xD718, 0xC8D6},{0xD719, 0xC8D7},{0xD71A, 0xC544},{0xD71B, 0xC545},{0xD71C, 0xC8D8},{0xD71D, 0xC546},{0xD71E, 0xC547},
- {0xD71F, 0xC548},{0xD720, 0xC8D9},{0xD721, 0xC549},{0xD722, 0xC54A},{0xD723, 0xC54B},{0xD724, 0xC54C},{0xD725, 0xC54D},{0xD726, 0xC54E},
- {0xD727, 0xC54F},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72A, 0xC550},{0xD72B, 0xC8DC},{0xD72C, 0xC551},{0xD72D, 0xC8DD},{0xD72E, 0xC552},
- {0xD72F, 0xC553},{0xD730, 0xC554},{0xD731, 0xC555},{0xD732, 0xC556},{0xD733, 0xC557},{0xD734, 0xC8DE},{0xD735, 0xC8DF},{0xD736, 0xC558},
- {0xD737, 0xC559},{0xD738, 0xC8E0},{0xD739, 0xC55A},{0xD73A, 0xC561},{0xD73B, 0xC562},{0xD73C, 0xC8E1},{0xD73D, 0xC563},{0xD73E, 0xC564},
- {0xD73F, 0xC565},{0xD740, 0xC566},{0xD741, 0xC567},{0xD742, 0xC568},{0xD743, 0xC569},{0xD744, 0xC8E2},{0xD745, 0xC56A},{0xD746, 0xC56B},
- {0xD747, 0xC8E3},{0xD748, 0xC56C},{0xD749, 0xC8E4},{0xD74A, 0xC56D},{0xD74B, 0xC56E},{0xD74C, 0xC56F},{0xD74D, 0xC570},{0xD74E, 0xC571},
- {0xD74F, 0xC572},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD752, 0xC573},{0xD753, 0xC574},{0xD754, 0xC8E7},{0xD755, 0xC575},{0xD756, 0xC8E8},
- {0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD75A, 0xC576},{0xD75B, 0xC577},{0xD75C, 0xC578},{0xD75D, 0xC579},{0xD75E, 0xC57A},
- {0xD75F, 0xC581},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD762, 0xC582},{0xD763, 0xC8EE},{0xD764, 0xC583},{0xD765, 0xC8EF},{0xD766, 0xC584},
- {0xD767, 0xC585},{0xD768, 0xC586},{0xD769, 0xC8F0},{0xD76A, 0xC587},{0xD76B, 0xC588},{0xD76C, 0xC8F1},{0xD76D, 0xC589},{0xD76E, 0xC58A},
- {0xD76F, 0xC58B},{0xD770, 0xC8F2},{0xD771, 0xC58C},{0xD772, 0xC58D},{0xD773, 0xC58E},{0xD774, 0xC8F3},{0xD775, 0xC58F},{0xD776, 0xC590},
- {0xD777, 0xC591},{0xD778, 0xC592},{0xD779, 0xC593},{0xD77A, 0xC594},{0xD77B, 0xC595},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD77E, 0xC596},
- {0xD77F, 0xC597},{0xD780, 0xC598},{0xD781, 0xC8F6},{0xD782, 0xC599},{0xD783, 0xC59A},{0xD784, 0xC59B},{0xD785, 0xC59C},{0xD786, 0xC59D},
- {0xD787, 0xC59E},{0xD788, 0xC8F7},{0xD789, 0xC8F8},{0xD78A, 0xC59F},{0xD78B, 0xC5A0},{0xD78C, 0xC8F9},{0xD78D, 0xC641},{0xD78E, 0xC642},
- {0xD78F, 0xC643},{0xD790, 0xC8FA},{0xD791, 0xC644},{0xD792, 0xC645},{0xD793, 0xC646},{0xD794, 0xC647},{0xD795, 0xC648},{0xD796, 0xC649},
- {0xD797, 0xC64A},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79A, 0xC64B},{0xD79B, 0xC8FD},{0xD79C, 0xC64C},{0xD79D, 0xC8FE},{0xD79E, 0xC64D},
- {0xD79F, 0xC64E},{0xD7A0, 0xC64F},{0xD7A1, 0xC650},{0xD7A2, 0xC651},{0xD7A3, 0xC652},{0xF900, 0xCBD0},{0xF901, 0xCBD6},{0xF902, 0xCBE7},
- {0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8},{0xF909, 0xD0D0},{0xF90A, 0xD0DD},
- {0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD},{0xF911, 0xD1DE},{0xF912, 0xD1DF},
- {0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6},{0xF919, 0xD1E8},{0xF91A, 0xD1E9},
- {0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2},{0xF921, 0xD1F6},{0xF922, 0xD1FA},
- {0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7},{0xF929, 0xD2A8},{0xF92A, 0xD2A9},
- {0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2},{0xF931, 0xD2C3},{0xF932, 0xD2C4},
- {0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB},{0xF939, 0xD2CD},{0xF93A, 0xD2CE},
- {0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4},{0xF941, 0xD2D5},{0xF942, 0xD2D6},
- {0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1},{0xF949, 0xD2E2},{0xF94A, 0xD2E4},
- {0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA},{0xF951, 0xD2EB},{0xF952, 0xD2F0},
- {0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7},{0xF959, 0xD2F8},{0xF95A, 0xD4E6},
- {0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD},{0xF961, 0xD7CB},{0xF962, 0xD7E4},
- {0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4},{0xF969, 0xDEFC},{0xF96A, 0xDEFE},
- {0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED},{0xF971, 0xE3F5},{0xF972, 0xE4A1},
- {0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB},{0xF979, 0xE5BC},{0xF97A, 0xE5C4},
- {0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB},{0xF981, 0xE5FC},{0xF982, 0xE5FE},
- {0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0},{0xF989, 0xE6B1},{0xF98A, 0xE6B3},
- {0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7},{0xF991, 0xE6CA},{0xF992, 0xE6D2},
- {0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4},{0xF999, 0xE6E5},{0xF99A, 0xE6E6},
- {0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1},{0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5},
- {0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9},{0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC},
- {0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7},{0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD},
- {0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6},{0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7},
- {0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB},{0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7},
- {0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4},{0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC},
- {0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA},{0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD},
- {0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF},{0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1},
- {0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF},{0xF9E1, 0xECB0},{0xF9E2, 0xECB1},
- {0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1},{0xF9E9, 0xECC5},{0xF9EA, 0xECC6},
- {0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1},{0xF9F1, 0xECE4},{0xF9F2, 0xECE7},
- {0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2},{0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE},
- {0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE},{0xFA01, 0xF6F4},{0xFA02, 0xF6F6},
- {0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1},{0xFA09, 0xFAA2},{0xFA0A, 0xFAE6},
- {0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7},
- {0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},
- {0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7},
- {0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},
- {0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7},
- {0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},
- {0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7},
- {0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},
- {0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7},
- {0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},
- {0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7},
- {0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB},
- {0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC}
-};
diff --git a/vcl/source/fontsubset/u2prc.inc b/vcl/source/fontsubset/u2prc.inc
deleted file mode 100644
index 445461b59653..000000000000
--- a/vcl/source/fontsubset/u2prc.inc
+++ /dev/null
@@ -1,3036 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// use generic RTL_TEXTENCODING_ to get rid of this file
-
-sal_uInt16pair xlat_1_4[24035] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A4, 0xA1E8},
- {0x00A7, 0xA1EC},{0x00A8, 0xA1A7},{0x00B0, 0xA1E3},{0x00B1, 0xA1C0},{0x00B7, 0xA1A4},{0x00D7, 0xA1C1},{0x00E0, 0xA8A4},{0x00E1, 0xA8A2},
- {0x00E8, 0xA8A8},{0x00E9, 0xA8A6},{0x00EA, 0xA8BA},{0x00EC, 0xA8AC},{0x00ED, 0xA8AA},{0x00F2, 0xA8B0},{0x00F3, 0xA8AE},{0x00F7, 0xA1C2},
- {0x00F9, 0xA8B4},{0x00FA, 0xA8B2},{0x00FC, 0xA8B9},{0x0101, 0xA8A1},{0x0113, 0xA8A5},{0x011B, 0xA8A7},{0x012B, 0xA8A9},{0x0144, 0xA8BD},
- {0x0148, 0xA8BE},{0x014D, 0xA8AD},{0x016B, 0xA8B1},{0x01CE, 0xA8A3},{0x01D0, 0xA8AB},{0x01D2, 0xA8AF},{0x01D4, 0xA8B3},{0x01D6, 0xA8B5},
- {0x01D8, 0xA8B6},{0x01DA, 0xA8B7},{0x01DC, 0xA8B8},{0x0251, 0xA8BB},{0x0261, 0xA8C0},{0x02C7, 0xA1A6},{0x02C9, 0xA1A5},{0x02CA, 0xA840},
- {0x02CB, 0xA841},{0x02D9, 0xA842},{0x0391, 0xA6A1},{0x0392, 0xA6A2},{0x0393, 0xA6A3},{0x0394, 0xA6A4},{0x0395, 0xA6A5},{0x0396, 0xA6A6},
- {0x0397, 0xA6A7},{0x0398, 0xA6A8},{0x0399, 0xA6A9},{0x039A, 0xA6AA},{0x039B, 0xA6AB},{0x039C, 0xA6AC},{0x039D, 0xA6AD},{0x039E, 0xA6AE},
- {0x039F, 0xA6AF},{0x03A0, 0xA6B0},{0x03A1, 0xA6B1},{0x03A3, 0xA6B2},{0x03A4, 0xA6B3},{0x03A5, 0xA6B4},{0x03A6, 0xA6B5},{0x03A7, 0xA6B6},
- {0x03A8, 0xA6B7},{0x03A9, 0xA6B8},{0x03B1, 0xA6C1},{0x03B2, 0xA6C2},{0x03B3, 0xA6C3},{0x03B4, 0xA6C4},{0x03B5, 0xA6C5},{0x03B6, 0xA6C6},
- {0x03B7, 0xA6C7},{0x03B8, 0xA6C8},{0x03B9, 0xA6C9},{0x03BA, 0xA6CA},{0x03BB, 0xA6CB},{0x03BC, 0xA6CC},{0x03BD, 0xA6CD},{0x03BE, 0xA6CE},
- {0x03BF, 0xA6CF},{0x03C0, 0xA6D0},{0x03C1, 0xA6D1},{0x03C3, 0xA6D2},{0x03C4, 0xA6D3},{0x03C5, 0xA6D4},{0x03C6, 0xA6D5},{0x03C7, 0xA6D6},
- {0x03C8, 0xA6D7},{0x03C9, 0xA6D8},{0x0401, 0xA7A7},{0x0410, 0xA7A1},{0x0411, 0xA7A2},{0x0412, 0xA7A3},{0x0413, 0xA7A4},{0x0414, 0xA7A5},
- {0x0415, 0xA7A6},{0x0416, 0xA7A8},{0x0417, 0xA7A9},{0x0418, 0xA7AA},{0x0419, 0xA7AB},{0x041A, 0xA7AC},{0x041B, 0xA7AD},{0x041C, 0xA7AE},
- {0x041D, 0xA7AF},{0x041E, 0xA7B0},{0x041F, 0xA7B1},{0x0420, 0xA7B2},{0x0421, 0xA7B3},{0x0422, 0xA7B4},{0x0423, 0xA7B5},{0x0424, 0xA7B6},
- {0x0425, 0xA7B7},{0x0426, 0xA7B8},{0x0427, 0xA7B9},{0x0428, 0xA7BA},{0x0429, 0xA7BB},{0x042A, 0xA7BC},{0x042B, 0xA7BD},{0x042C, 0xA7BE},
- {0x042D, 0xA7BF},{0x042E, 0xA7C0},{0x042F, 0xA7C1},{0x0430, 0xA7D1},{0x0431, 0xA7D2},{0x0432, 0xA7D3},{0x0433, 0xA7D4},{0x0434, 0xA7D5},
- {0x0435, 0xA7D6},{0x0436, 0xA7D8},{0x0437, 0xA7D9},{0x0438, 0xA7DA},{0x0439, 0xA7DB},{0x043A, 0xA7DC},{0x043B, 0xA7DD},{0x043C, 0xA7DE},
- {0x043D, 0xA7DF},{0x043E, 0xA7E0},{0x043F, 0xA7E1},{0x0440, 0xA7E2},{0x0441, 0xA7E3},{0x0442, 0xA7E4},{0x0443, 0xA7E5},{0x0444, 0xA7E6},
- {0x0445, 0xA7E7},{0x0446, 0xA7E8},{0x0447, 0xA7E9},{0x0448, 0xA7EA},{0x0449, 0xA7EB},{0x044A, 0xA7EC},{0x044B, 0xA7ED},{0x044C, 0xA7EE},
- {0x044D, 0xA7EF},{0x044E, 0xA7F0},{0x044F, 0xA7F1},{0x0451, 0xA7D7},{0x2010, 0xA95C},{0x2013, 0xA843},{0x2014, 0xA1AA},{0x2015, 0xA844},
- {0x2016, 0xA1AC},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2025, 0xA845},{0x2026, 0xA1AD},{0x2030, 0xA1EB},
- {0x2032, 0xA1E4},{0x2033, 0xA1E5},{0x2035, 0xA846},{0x203B, 0xA1F9},{0x2103, 0xA1E6},{0x2105, 0xA847},{0x2109, 0xA848},{0x2116, 0xA1ED},
- {0x2121, 0xA959},{0x2160, 0xA2F1},{0x2161, 0xA2F2},{0x2162, 0xA2F3},{0x2163, 0xA2F4},{0x2164, 0xA2F5},{0x2165, 0xA2F6},{0x2166, 0xA2F7},
- {0x2167, 0xA2F8},{0x2168, 0xA2F9},{0x2169, 0xA2FA},{0x216A, 0xA2FB},{0x216B, 0xA2FC},{0x2170, 0xA2A1},{0x2171, 0xA2A2},{0x2172, 0xA2A3},
- {0x2173, 0xA2A4},{0x2174, 0xA2A5},{0x2175, 0xA2A6},{0x2176, 0xA2A7},{0x2177, 0xA2A8},{0x2178, 0xA2A9},{0x2179, 0xA2AA},{0x2190, 0xA1FB},
- {0x2191, 0xA1FC},{0x2192, 0xA1FA},{0x2193, 0xA1FD},{0x2196, 0xA849},{0x2197, 0xA84A},{0x2198, 0xA84B},{0x2199, 0xA84C},{0x2208, 0xA1CA},
- {0x220F, 0xA1C7},{0x2211, 0xA1C6},{0x2215, 0xA84D},{0x221A, 0xA1CC},{0x221D, 0xA1D8},{0x221E, 0xA1DE},{0x221F, 0xA84E},{0x2220, 0xA1CF},
- {0x2223, 0xA84F},{0x2225, 0xA1CE},{0x2227, 0xA1C4},{0x2228, 0xA1C5},{0x2229, 0xA1C9},{0x222A, 0xA1C8},{0x222B, 0xA1D2},{0x222E, 0xA1D3},
- {0x2234, 0xA1E0},{0x2235, 0xA1DF},{0x2236, 0xA1C3},{0x2237, 0xA1CB},{0x223D, 0xA1D7},{0x2248, 0xA1D6},{0x224C, 0xA1D5},{0x2252, 0xA850},
- {0x2260, 0xA1D9},{0x2261, 0xA1D4},{0x2264, 0xA1DC},{0x2265, 0xA1DD},{0x2266, 0xA851},{0x2267, 0xA852},{0x226E, 0xA1DA},{0x226F, 0xA1DB},
- {0x2299, 0xA1D1},{0x22A5, 0xA1CD},{0x22BF, 0xA853},{0x2312, 0xA1D0},{0x2460, 0xA2D9},{0x2461, 0xA2DA},{0x2462, 0xA2DB},{0x2463, 0xA2DC},
- {0x2464, 0xA2DD},{0x2465, 0xA2DE},{0x2466, 0xA2DF},{0x2467, 0xA2E0},{0x2468, 0xA2E1},{0x2469, 0xA2E2},{0x2474, 0xA2C5},{0x2475, 0xA2C6},
- {0x2476, 0xA2C7},{0x2477, 0xA2C8},{0x2478, 0xA2C9},{0x2479, 0xA2CA},{0x247A, 0xA2CB},{0x247B, 0xA2CC},{0x247C, 0xA2CD},{0x247D, 0xA2CE},
- {0x247E, 0xA2CF},{0x247F, 0xA2D0},{0x2480, 0xA2D1},{0x2481, 0xA2D2},{0x2482, 0xA2D3},{0x2483, 0xA2D4},{0x2484, 0xA2D5},{0x2485, 0xA2D6},
- {0x2486, 0xA2D7},{0x2487, 0xA2D8},{0x2488, 0xA2B1},{0x2489, 0xA2B2},{0x248A, 0xA2B3},{0x248B, 0xA2B4},{0x248C, 0xA2B5},{0x248D, 0xA2B6},
- {0x248E, 0xA2B7},{0x248F, 0xA2B8},{0x2490, 0xA2B9},{0x2491, 0xA2BA},{0x2492, 0xA2BB},{0x2493, 0xA2BC},{0x2494, 0xA2BD},{0x2495, 0xA2BE},
- {0x2496, 0xA2BF},{0x2497, 0xA2C0},{0x2498, 0xA2C1},{0x2499, 0xA2C2},{0x249A, 0xA2C3},{0x249B, 0xA2C4},{0x2500, 0xA9A4},{0x2501, 0xA9A5},
- {0x2502, 0xA9A6},{0x2503, 0xA9A7},{0x2504, 0xA9A8},{0x2505, 0xA9A9},{0x2506, 0xA9AA},{0x2507, 0xA9AB},{0x2508, 0xA9AC},{0x2509, 0xA9AD},
- {0x250A, 0xA9AE},{0x250B, 0xA9AF},{0x250C, 0xA9B0},{0x250D, 0xA9B1},{0x250E, 0xA9B2},{0x250F, 0xA9B3},{0x2510, 0xA9B4},{0x2511, 0xA9B5},
- {0x2512, 0xA9B6},{0x2513, 0xA9B7},{0x2514, 0xA9B8},{0x2515, 0xA9B9},{0x2516, 0xA9BA},{0x2517, 0xA9BB},{0x2518, 0xA9BC},{0x2519, 0xA9BD},
- {0x251A, 0xA9BE},{0x251B, 0xA9BF},{0x251C, 0xA9C0},{0x251D, 0xA9C1},{0x251E, 0xA9C2},{0x251F, 0xA9C3},{0x2520, 0xA9C4},{0x2521, 0xA9C5},
- {0x2522, 0xA9C6},{0x2523, 0xA9C7},{0x2524, 0xA9C8},{0x2525, 0xA9C9},{0x2526, 0xA9CA},{0x2527, 0xA9CB},{0x2528, 0xA9CC},{0x2529, 0xA9CD},
- {0x252A, 0xA9CE},{0x252B, 0xA9CF},{0x252C, 0xA9D0},{0x252D, 0xA9D1},{0x252E, 0xA9D2},{0x252F, 0xA9D3},{0x2530, 0xA9D4},{0x2531, 0xA9D5},
- {0x2532, 0xA9D6},{0x2533, 0xA9D7},{0x2534, 0xA9D8},{0x2535, 0xA9D9},{0x2536, 0xA9DA},{0x2537, 0xA9DB},{0x2538, 0xA9DC},{0x2539, 0xA9DD},
- {0x253A, 0xA9DE},{0x253B, 0xA9DF},{0x253C, 0xA9E0},{0x253D, 0xA9E1},{0x253E, 0xA9E2},{0x253F, 0xA9E3},{0x2540, 0xA9E4},{0x2541, 0xA9E5},
- {0x2542, 0xA9E6},{0x2543, 0xA9E7},{0x2544, 0xA9E8},{0x2545, 0xA9E9},{0x2546, 0xA9EA},{0x2547, 0xA9EB},{0x2548, 0xA9EC},{0x2549, 0xA9ED},
- {0x254A, 0xA9EE},{0x254B, 0xA9EF},{0x2550, 0xA854},{0x2551, 0xA855},{0x2552, 0xA856},{0x2553, 0xA857},{0x2554, 0xA858},{0x2555, 0xA859},
- {0x2556, 0xA85A},{0x2557, 0xA85B},{0x2558, 0xA85C},{0x2559, 0xA85D},{0x255A, 0xA85E},{0x255B, 0xA85F},{0x255C, 0xA860},{0x255D, 0xA861},
- {0x255E, 0xA862},{0x255F, 0xA863},{0x2560, 0xA864},{0x2561, 0xA865},{0x2562, 0xA866},{0x2563, 0xA867},{0x2564, 0xA868},{0x2565, 0xA869},
- {0x2566, 0xA86A},{0x2567, 0xA86B},{0x2568, 0xA86C},{0x2569, 0xA86D},{0x256A, 0xA86E},{0x256B, 0xA86F},{0x256C, 0xA870},{0x256D, 0xA871},
- {0x256E, 0xA872},{0x256F, 0xA873},{0x2570, 0xA874},{0x2571, 0xA875},{0x2572, 0xA876},{0x2573, 0xA877},{0x2581, 0xA878},{0x2582, 0xA879},
- {0x2583, 0xA87A},{0x2584, 0xA87B},{0x2585, 0xA87C},{0x2586, 0xA87D},{0x2587, 0xA87E},{0x2588, 0xA880},{0x2589, 0xA881},{0x258A, 0xA882},
- {0x258B, 0xA883},{0x258C, 0xA884},{0x258D, 0xA885},{0x258E, 0xA886},{0x258F, 0xA887},{0x2593, 0xA888},{0x2594, 0xA889},{0x2595, 0xA88A},
- {0x25A0, 0xA1F6},{0x25A1, 0xA1F5},{0x25B2, 0xA1F8},{0x25B3, 0xA1F7},{0x25BC, 0xA88B},{0x25BD, 0xA88C},{0x25C6, 0xA1F4},{0x25C7, 0xA1F3},
- {0x25CB, 0xA1F0},{0x25CE, 0xA1F2},{0x25CF, 0xA1F1},{0x25E2, 0xA88D},{0x25E3, 0xA88E},{0x25E4, 0xA88F},{0x25E5, 0xA890},{0x2605, 0xA1EF},
- {0x2606, 0xA1EE},{0x2609, 0xA891},{0x2640, 0xA1E2},{0x2641, 0xA892},{0x2642, 0xA1E1},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},
- {0x3003, 0xA1A8},{0x3005, 0xA1A9},{0x3006, 0xA965},{0x3007, 0xA996},{0x3008, 0xA1B4},{0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},
- {0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BE},{0x3011, 0xA1BF},{0x3012, 0xA893},{0x3013, 0xA1FE},
- {0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3016, 0xA1BC},{0x3017, 0xA1BD},{0x301D, 0xA894},{0x301E, 0xA895},{0x3021, 0xA940},{0x3022, 0xA941},
- {0x3023, 0xA942},{0x3024, 0xA943},{0x3025, 0xA944},{0x3026, 0xA945},{0x3027, 0xA946},{0x3028, 0xA947},{0x3029, 0xA948},{0x3041, 0xA4A1},
- {0x3042, 0xA4A2},{0x3043, 0xA4A3},{0x3044, 0xA4A4},{0x3045, 0xA4A5},{0x3046, 0xA4A6},{0x3047, 0xA4A7},{0x3048, 0xA4A8},{0x3049, 0xA4A9},
- {0x304A, 0xA4AA},{0x304B, 0xA4AB},{0x304C, 0xA4AC},{0x304D, 0xA4AD},{0x304E, 0xA4AE},{0x304F, 0xA4AF},{0x3050, 0xA4B0},{0x3051, 0xA4B1},
- {0x3052, 0xA4B2},{0x3053, 0xA4B3},{0x3054, 0xA4B4},{0x3055, 0xA4B5},{0x3056, 0xA4B6},{0x3057, 0xA4B7},{0x3058, 0xA4B8},{0x3059, 0xA4B9},
- {0x305A, 0xA4BA},{0x305B, 0xA4BB},{0x305C, 0xA4BC},{0x305D, 0xA4BD},{0x305E, 0xA4BE},{0x305F, 0xA4BF},{0x3060, 0xA4C0},{0x3061, 0xA4C1},
- {0x3062, 0xA4C2},{0x3063, 0xA4C3},{0x3064, 0xA4C4},{0x3065, 0xA4C5},{0x3066, 0xA4C6},{0x3067, 0xA4C7},{0x3068, 0xA4C8},{0x3069, 0xA4C9},
- {0x306A, 0xA4CA},{0x306B, 0xA4CB},{0x306C, 0xA4CC},{0x306D, 0xA4CD},{0x306E, 0xA4CE},{0x306F, 0xA4CF},{0x3070, 0xA4D0},{0x3071, 0xA4D1},
- {0x3072, 0xA4D2},{0x3073, 0xA4D3},{0x3074, 0xA4D4},{0x3075, 0xA4D5},{0x3076, 0xA4D6},{0x3077, 0xA4D7},{0x3078, 0xA4D8},{0x3079, 0xA4D9},
- {0x307A, 0xA4DA},{0x307B, 0xA4DB},{0x307C, 0xA4DC},{0x307D, 0xA4DD},{0x307E, 0xA4DE},{0x307F, 0xA4DF},{0x3080, 0xA4E0},{0x3081, 0xA4E1},
- {0x3082, 0xA4E2},{0x3083, 0xA4E3},{0x3084, 0xA4E4},{0x3085, 0xA4E5},{0x3086, 0xA4E6},{0x3087, 0xA4E7},{0x3088, 0xA4E8},{0x3089, 0xA4E9},
- {0x308A, 0xA4EA},{0x308B, 0xA4EB},{0x308C, 0xA4EC},{0x308D, 0xA4ED},{0x308E, 0xA4EE},{0x308F, 0xA4EF},{0x3090, 0xA4F0},{0x3091, 0xA4F1},
- {0x3092, 0xA4F2},{0x3093, 0xA4F3},{0x309B, 0xA961},{0x309C, 0xA962},{0x309D, 0xA966},{0x309E, 0xA967},{0x30A1, 0xA5A1},{0x30A2, 0xA5A2},
- {0x30A3, 0xA5A3},{0x30A4, 0xA5A4},{0x30A5, 0xA5A5},{0x30A6, 0xA5A6},{0x30A7, 0xA5A7},{0x30A8, 0xA5A8},{0x30A9, 0xA5A9},{0x30AA, 0xA5AA},
- {0x30AB, 0xA5AB},{0x30AC, 0xA5AC},{0x30AD, 0xA5AD},{0x30AE, 0xA5AE},{0x30AF, 0xA5AF},{0x30B0, 0xA5B0},{0x30B1, 0xA5B1},{0x30B2, 0xA5B2},
- {0x30B3, 0xA5B3},{0x30B4, 0xA5B4},{0x30B5, 0xA5B5},{0x30B6, 0xA5B6},{0x30B7, 0xA5B7},{0x30B8, 0xA5B8},{0x30B9, 0xA5B9},{0x30BA, 0xA5BA},
- {0x30BB, 0xA5BB},{0x30BC, 0xA5BC},{0x30BD, 0xA5BD},{0x30BE, 0xA5BE},{0x30BF, 0xA5BF},{0x30C0, 0xA5C0},{0x30C1, 0xA5C1},{0x30C2, 0xA5C2},
- {0x30C3, 0xA5C3},{0x30C4, 0xA5C4},{0x30C5, 0xA5C5},{0x30C6, 0xA5C6},{0x30C7, 0xA5C7},{0x30C8, 0xA5C8},{0x30C9, 0xA5C9},{0x30CA, 0xA5CA},
- {0x30CB, 0xA5CB},{0x30CC, 0xA5CC},{0x30CD, 0xA5CD},{0x30CE, 0xA5CE},{0x30CF, 0xA5CF},{0x30D0, 0xA5D0},{0x30D1, 0xA5D1},{0x30D2, 0xA5D2},
- {0x30D3, 0xA5D3},{0x30D4, 0xA5D4},{0x30D5, 0xA5D5},{0x30D6, 0xA5D6},{0x30D7, 0xA5D7},{0x30D8, 0xA5D8},{0x30D9, 0xA5D9},{0x30DA, 0xA5DA},
- {0x30DB, 0xA5DB},{0x30DC, 0xA5DC},{0x30DD, 0xA5DD},{0x30DE, 0xA5DE},{0x30DF, 0xA5DF},{0x30E0, 0xA5E0},{0x30E1, 0xA5E1},{0x30E2, 0xA5E2},
- {0x30E3, 0xA5E3},{0x30E4, 0xA5E4},{0x30E5, 0xA5E5},{0x30E6, 0xA5E6},{0x30E7, 0xA5E7},{0x30E8, 0xA5E8},{0x30E9, 0xA5E9},{0x30EA, 0xA5EA},
- {0x30EB, 0xA5EB},{0x30EC, 0xA5EC},{0x30ED, 0xA5ED},{0x30EE, 0xA5EE},{0x30EF, 0xA5EF},{0x30F0, 0xA5F0},{0x30F1, 0xA5F1},{0x30F2, 0xA5F2},
- {0x30F3, 0xA5F3},{0x30F4, 0xA5F4},{0x30F5, 0xA5F5},{0x30F6, 0xA5F6},{0x30FC, 0xA960},{0x30FD, 0xA963},{0x30FE, 0xA964},{0x3105, 0xA8C5},
- {0x3106, 0xA8C6},{0x3107, 0xA8C7},{0x3108, 0xA8C8},{0x3109, 0xA8C9},{0x310A, 0xA8CA},{0x310B, 0xA8CB},{0x310C, 0xA8CC},{0x310D, 0xA8CD},
- {0x310E, 0xA8CE},{0x310F, 0xA8CF},{0x3110, 0xA8D0},{0x3111, 0xA8D1},{0x3112, 0xA8D2},{0x3113, 0xA8D3},{0x3114, 0xA8D4},{0x3115, 0xA8D5},
- {0x3116, 0xA8D6},{0x3117, 0xA8D7},{0x3118, 0xA8D8},{0x3119, 0xA8D9},{0x311A, 0xA8DA},{0x311B, 0xA8DB},{0x311C, 0xA8DC},{0x311D, 0xA8DD},
- {0x311E, 0xA8DE},{0x311F, 0xA8DF},{0x3120, 0xA8E0},{0x3121, 0xA8E1},{0x3122, 0xA8E2},{0x3123, 0xA8E3},{0x3124, 0xA8E4},{0x3125, 0xA8E5},
- {0x3126, 0xA8E6},{0x3127, 0xA8E7},{0x3128, 0xA8E8},{0x3129, 0xA8E9},{0x3220, 0xA2E5},{0x3221, 0xA2E6},{0x3222, 0xA2E7},{0x3223, 0xA2E8},
- {0x3224, 0xA2E9},{0x3225, 0xA2EA},{0x3226, 0xA2EB},{0x3227, 0xA2EC},{0x3228, 0xA2ED},{0x3229, 0xA2EE},{0x3231, 0xA95A},{0x32A3, 0xA949},
- {0x338E, 0xA94A},{0x338F, 0xA94B},{0x339C, 0xA94C},{0x339D, 0xA94D},{0x339E, 0xA94E},{0x33A1, 0xA94F},{0x33C4, 0xA950},{0x33CE, 0xA951},
- {0x33D1, 0xA952},{0x33D2, 0xA953},{0x33D5, 0xA954},{0x4E00, 0xD2BB},{0x4E01, 0xB6A1},{0x4E02, 0x8140},{0x4E03, 0xC6DF},{0x4E04, 0x8141},
- {0x4E05, 0x8142},{0x4E06, 0x8143},{0x4E07, 0xCDF2},{0x4E08, 0xD5C9},{0x4E09, 0xC8FD},{0x4E0A, 0xC9CF},{0x4E0B, 0xCFC2},{0x4E0C, 0xD8A2},
- {0x4E0D, 0xB2BB},{0x4E0E, 0xD3EB},{0x4E0F, 0x8144},{0x4E10, 0xD8A4},{0x4E11, 0xB3F3},{0x4E12, 0x8145},{0x4E13, 0xD7A8},{0x4E14, 0xC7D2},
- {0x4E15, 0xD8A7},{0x4E16, 0xCAC0},{0x4E17, 0x8146},{0x4E18, 0xC7F0},{0x4E19, 0xB1FB},{0x4E1A, 0xD2B5},{0x4E1B, 0xB4D4},{0x4E1C, 0xB6AB},
- {0x4E1D, 0xCBBF},{0x4E1E, 0xD8A9},{0x4E1F, 0x8147},{0x4E20, 0x8148},{0x4E21, 0x8149},{0x4E22, 0xB6AA},{0x4E23, 0x814A},{0x4E24, 0xC1BD},
- {0x4E25, 0xD1CF},{0x4E26, 0x814B},{0x4E27, 0xC9A5},{0x4E28, 0xD8AD},{0x4E29, 0x814C},{0x4E2A, 0xB8F6},{0x4E2B, 0xD1BE},{0x4E2C, 0xE3DC},
- {0x4E2D, 0xD6D0},{0x4E2E, 0x814D},{0x4E2F, 0x814E},{0x4E30, 0xB7E1},{0x4E31, 0x814F},{0x4E32, 0xB4AE},{0x4E33, 0x8150},{0x4E34, 0xC1D9},
- {0x4E35, 0x8151},{0x4E36, 0xD8BC},{0x4E37, 0x8152},{0x4E38, 0xCDE8},{0x4E39, 0xB5A4},{0x4E3A, 0xCEAA},{0x4E3B, 0xD6F7},{0x4E3C, 0x8153},
- {0x4E3D, 0xC0F6},{0x4E3E, 0xBED9},{0x4E3F, 0xD8AF},{0x4E40, 0x8154},{0x4E41, 0x8155},{0x4E42, 0x8156},{0x4E43, 0xC4CB},{0x4E44, 0x8157},
- {0x4E45, 0xBEC3},{0x4E46, 0x8158},{0x4E47, 0xD8B1},{0x4E48, 0xC3B4},{0x4E49, 0xD2E5},{0x4E4A, 0x8159},{0x4E4B, 0xD6AE},{0x4E4C, 0xCEDA},
- {0x4E4D, 0xD5A7},{0x4E4E, 0xBAF5},{0x4E4F, 0xB7A6},{0x4E50, 0xC0D6},{0x4E51, 0x815A},{0x4E52, 0xC6B9},{0x4E53, 0xC5D2},{0x4E54, 0xC7C7},
- {0x4E55, 0x815B},{0x4E56, 0xB9D4},{0x4E57, 0x815C},{0x4E58, 0xB3CB},{0x4E59, 0xD2D2},{0x4E5A, 0x815D},{0x4E5B, 0x815E},{0x4E5C, 0xD8BF},
- {0x4E5D, 0xBEC5},{0x4E5E, 0xC6F2},{0x4E5F, 0xD2B2},{0x4E60, 0xCFB0},{0x4E61, 0xCFE7},{0x4E62, 0x815F},{0x4E63, 0x8160},{0x4E64, 0x8161},
- {0x4E65, 0x8162},{0x4E66, 0xCAE9},{0x4E67, 0x8163},{0x4E68, 0x8164},{0x4E69, 0xD8C0},{0x4E6A, 0x8165},{0x4E6B, 0x8166},{0x4E6C, 0x8167},
- {0x4E6D, 0x8168},{0x4E6E, 0x8169},{0x4E6F, 0x816A},{0x4E70, 0xC2F2},{0x4E71, 0xC2D2},{0x4E72, 0x816B},{0x4E73, 0xC8E9},{0x4E74, 0x816C},
- {0x4E75, 0x816D},{0x4E76, 0x816E},{0x4E77, 0x816F},{0x4E78, 0x8170},{0x4E79, 0x8171},{0x4E7A, 0x8172},{0x4E7B, 0x8173},{0x4E7C, 0x8174},
- {0x4E7D, 0x8175},{0x4E7E, 0xC7AC},{0x4E7F, 0x8176},{0x4E80, 0x8177},{0x4E81, 0x8178},{0x4E82, 0x8179},{0x4E83, 0x817A},{0x4E84, 0x817B},
- {0x4E85, 0x817C},{0x4E86, 0xC1CB},{0x4E87, 0x817D},{0x4E88, 0xD3E8},{0x4E89, 0xD5F9},{0x4E8A, 0x817E},{0x4E8B, 0xCAC2},{0x4E8C, 0xB6FE},
- {0x4E8D, 0xD8A1},{0x4E8E, 0xD3DA},{0x4E8F, 0xBFF7},{0x4E90, 0x8180},{0x4E91, 0xD4C6},{0x4E92, 0xBBA5},{0x4E93, 0xD8C1},{0x4E94, 0xCEE5},
- {0x4E95, 0xBEAE},{0x4E96, 0x8181},{0x4E97, 0x8182},{0x4E98, 0xD8A8},{0x4E99, 0x8183},{0x4E9A, 0xD1C7},{0x4E9B, 0xD0A9},{0x4E9C, 0x8184},
- {0x4E9D, 0x8185},{0x4E9E, 0x8186},{0x4E9F, 0xD8BD},{0x4EA0, 0xD9EF},{0x4EA1, 0xCDF6},{0x4EA2, 0xBFBA},{0x4EA3, 0x8187},{0x4EA4, 0xBDBB},
- {0x4EA5, 0xBAA5},{0x4EA6, 0xD2E0},{0x4EA7, 0xB2FA},{0x4EA8, 0xBAE0},{0x4EA9, 0xC4B6},{0x4EAA, 0x8188},{0x4EAB, 0xCFED},{0x4EAC, 0xBEA9},
- {0x4EAD, 0xCDA4},{0x4EAE, 0xC1C1},{0x4EAF, 0x8189},{0x4EB0, 0x818A},{0x4EB1, 0x818B},{0x4EB2, 0xC7D7},{0x4EB3, 0xD9F1},{0x4EB4, 0x818C},
- {0x4EB5, 0xD9F4},{0x4EB6, 0x818D},{0x4EB7, 0x818E},{0x4EB8, 0x818F},{0x4EB9, 0x8190},{0x4EBA, 0xC8CB},{0x4EBB, 0xD8E9},{0x4EBC, 0x8191},
- {0x4EBD, 0x8192},{0x4EBE, 0x8193},{0x4EBF, 0xD2DA},{0x4EC0, 0xCAB2},{0x4EC1, 0xC8CA},{0x4EC2, 0xD8EC},{0x4EC3, 0xD8EA},{0x4EC4, 0xD8C6},
- {0x4EC5, 0xBDF6},{0x4EC6, 0xC6CD},{0x4EC7, 0xB3F0},{0x4EC8, 0x8194},{0x4EC9, 0xD8EB},{0x4ECA, 0xBDF1},{0x4ECB, 0xBDE9},{0x4ECC, 0x8195},
- {0x4ECD, 0xC8D4},{0x4ECE, 0xB4D3},{0x4ECF, 0x8196},{0x4ED0, 0x8197},{0x4ED1, 0xC2D8},{0x4ED2, 0x8198},{0x4ED3, 0xB2D6},{0x4ED4, 0xD7D0},
- {0x4ED5, 0xCACB},{0x4ED6, 0xCBFB},{0x4ED7, 0xD5CC},{0x4ED8, 0xB8B6},{0x4ED9, 0xCFC9},{0x4EDA, 0x8199},{0x4EDB, 0x819A},{0x4EDC, 0x819B},
- {0x4EDD, 0xD9DA},{0x4EDE, 0xD8F0},{0x4EDF, 0xC7AA},{0x4EE0, 0x819C},{0x4EE1, 0xD8EE},{0x4EE2, 0x819D},{0x4EE3, 0xB4FA},{0x4EE4, 0xC1EE},
- {0x4EE5, 0xD2D4},{0x4EE6, 0x819E},{0x4EE7, 0x819F},{0x4EE8, 0xD8ED},{0x4EE9, 0x81A0},{0x4EEA, 0xD2C7},{0x4EEB, 0xD8EF},{0x4EEC, 0xC3C7},
- {0x4EED, 0x81A1},{0x4EEE, 0x81A2},{0x4EEF, 0x81A3},{0x4EF0, 0xD1F6},{0x4EF1, 0x81A4},{0x4EF2, 0xD6D9},{0x4EF3, 0xD8F2},{0x4EF4, 0x81A5},
- {0x4EF5, 0xD8F5},{0x4EF6, 0xBCFE},{0x4EF7, 0xBCDB},{0x4EF8, 0x81A6},{0x4EF9, 0x81A7},{0x4EFA, 0x81A8},{0x4EFB, 0xC8CE},{0x4EFC, 0x81A9},
- {0x4EFD, 0xB7DD},{0x4EFE, 0x81AA},{0x4EFF, 0xB7C2},{0x4F00, 0x81AB},{0x4F01, 0xC6F3},{0x4F02, 0x81AC},{0x4F03, 0x81AD},{0x4F04, 0x81AE},
- {0x4F05, 0x81AF},{0x4F06, 0x81B0},{0x4F07, 0x81B1},{0x4F08, 0x81B2},{0x4F09, 0xD8F8},{0x4F0A, 0xD2C1},{0x4F0B, 0x81B3},{0x4F0C, 0x81B4},
- {0x4F0D, 0xCEE9},{0x4F0E, 0xBCBF},{0x4F0F, 0xB7FC},{0x4F10, 0xB7A5},{0x4F11, 0xD0DD},{0x4F12, 0x81B5},{0x4F13, 0x81B6},{0x4F14, 0x81B7},
- {0x4F15, 0x81B8},{0x4F16, 0x81B9},{0x4F17, 0xD6DA},{0x4F18, 0xD3C5},{0x4F19, 0xBBEF},{0x4F1A, 0xBBE1},{0x4F1B, 0xD8F1},{0x4F1C, 0x81BA},
- {0x4F1D, 0x81BB},{0x4F1E, 0xC9A1},{0x4F1F, 0xCEB0},{0x4F20, 0xB4AB},{0x4F21, 0x81BC},{0x4F22, 0xD8F3},{0x4F23, 0x81BD},{0x4F24, 0xC9CB},
- {0x4F25, 0xD8F6},{0x4F26, 0xC2D7},{0x4F27, 0xD8F7},{0x4F28, 0x81BE},{0x4F29, 0x81BF},{0x4F2A, 0xCEB1},{0x4F2B, 0xD8F9},{0x4F2C, 0x81C0},
- {0x4F2D, 0x81C1},{0x4F2E, 0x81C2},{0x4F2F, 0xB2AE},{0x4F30, 0xB9C0},{0x4F31, 0x81C3},{0x4F32, 0xD9A3},{0x4F33, 0x81C4},{0x4F34, 0xB0E9},
- {0x4F35, 0x81C5},{0x4F36, 0xC1E6},{0x4F37, 0x81C6},{0x4F38, 0xC9EC},{0x4F39, 0x81C7},{0x4F3A, 0xCBC5},{0x4F3B, 0x81C8},{0x4F3C, 0xCBC6},
- {0x4F3D, 0xD9A4},{0x4F3E, 0x81C9},{0x4F3F, 0x81CA},{0x4F40, 0x81CB},{0x4F41, 0x81CC},{0x4F42, 0x81CD},{0x4F43, 0xB5E8},{0x4F44, 0x81CE},
- {0x4F45, 0x81CF},{0x4F46, 0xB5AB},{0x4F47, 0x81D0},{0x4F48, 0x81D1},{0x4F49, 0x81D2},{0x4F4A, 0x81D3},{0x4F4B, 0x81D4},{0x4F4C, 0x81D5},
- {0x4F4D, 0xCEBB},{0x4F4E, 0xB5CD},{0x4F4F, 0xD7A1},{0x4F50, 0xD7F4},{0x4F51, 0xD3D3},{0x4F52, 0x81D6},{0x4F53, 0xCCE5},{0x4F54, 0x81D7},
- {0x4F55, 0xBACE},{0x4F56, 0x81D8},{0x4F57, 0xD9A2},{0x4F58, 0xD9DC},{0x4F59, 0xD3E0},{0x4F5A, 0xD8FD},{0x4F5B, 0xB7F0},{0x4F5C, 0xD7F7},
- {0x4F5D, 0xD8FE},{0x4F5E, 0xD8FA},{0x4F5F, 0xD9A1},{0x4F60, 0xC4E3},{0x4F61, 0x81D9},{0x4F62, 0x81DA},{0x4F63, 0xD3B6},{0x4F64, 0xD8F4},
- {0x4F65, 0xD9DD},{0x4F66, 0x81DB},{0x4F67, 0xD8FB},{0x4F68, 0x81DC},{0x4F69, 0xC5E5},{0x4F6A, 0x81DD},{0x4F6B, 0x81DE},{0x4F6C, 0xC0D0},
- {0x4F6D, 0x81DF},{0x4F6E, 0x81E0},{0x4F6F, 0xD1F0},{0x4F70, 0xB0DB},{0x4F71, 0x81E1},{0x4F72, 0x81E2},{0x4F73, 0xBCD1},{0x4F74, 0xD9A6},
- {0x4F75, 0x81E3},{0x4F76, 0xD9A5},{0x4F77, 0x81E4},{0x4F78, 0x81E5},{0x4F79, 0x81E6},{0x4F7A, 0x81E7},{0x4F7B, 0xD9AC},{0x4F7C, 0xD9AE},
- {0x4F7D, 0x81E8},{0x4F7E, 0xD9AB},{0x4F7F, 0xCAB9},{0x4F80, 0x81E9},{0x4F81, 0x81EA},{0x4F82, 0x81EB},{0x4F83, 0xD9A9},{0x4F84, 0xD6B6},
- {0x4F85, 0x81EC},{0x4F86, 0x81ED},{0x4F87, 0x81EE},{0x4F88, 0xB3DE},{0x4F89, 0xD9A8},{0x4F8A, 0x81EF},{0x4F8B, 0xC0FD},{0x4F8C, 0x81F0},
- {0x4F8D, 0xCACC},{0x4F8E, 0x81F1},{0x4F8F, 0xD9AA},{0x4F90, 0x81F2},{0x4F91, 0xD9A7},{0x4F92, 0x81F3},{0x4F93, 0x81F4},{0x4F94, 0xD9B0},
- {0x4F95, 0x81F5},{0x4F96, 0x81F6},{0x4F97, 0xB6B1},{0x4F98, 0x81F7},{0x4F99, 0x81F8},{0x4F9A, 0x81F9},{0x4F9B, 0xB9A9},{0x4F9C, 0x81FA},
- {0x4F9D, 0xD2C0},{0x4F9E, 0x81FB},{0x4F9F, 0x81FC},{0x4FA0, 0xCFC0},{0x4FA1, 0x81FD},{0x4FA2, 0x81FE},{0x4FA3, 0xC2C2},{0x4FA4, 0x8240},
- {0x4FA5, 0xBDC4},{0x4FA6, 0xD5EC},{0x4FA7, 0xB2E0},{0x4FA8, 0xC7C8},{0x4FA9, 0xBFEB},{0x4FAA, 0xD9AD},{0x4FAB, 0x8241},{0x4FAC, 0xD9AF},
- {0x4FAD, 0x8242},{0x4FAE, 0xCEEA},{0x4FAF, 0xBAEE},{0x4FB0, 0x8243},{0x4FB1, 0x8244},{0x4FB2, 0x8245},{0x4FB3, 0x8246},{0x4FB4, 0x8247},
- {0x4FB5, 0xC7D6},{0x4FB6, 0x8248},{0x4FB7, 0x8249},{0x4FB8, 0x824A},{0x4FB9, 0x824B},{0x4FBA, 0x824C},{0x4FBB, 0x824D},{0x4FBC, 0x824E},
- {0x4FBD, 0x824F},{0x4FBE, 0x8250},{0x4FBF, 0xB1E3},{0x4FC0, 0x8251},{0x4FC1, 0x8252},{0x4FC2, 0x8253},{0x4FC3, 0xB4D9},{0x4FC4, 0xB6ED},
- {0x4FC5, 0xD9B4},{0x4FC6, 0x8254},{0x4FC7, 0x8255},{0x4FC8, 0x8256},{0x4FC9, 0x8257},{0x4FCA, 0xBFA1},{0x4FCB, 0x8258},{0x4FCC, 0x8259},
- {0x4FCD, 0x825A},{0x4FCE, 0xD9DE},{0x4FCF, 0xC7CE},{0x4FD0, 0xC0FE},{0x4FD1, 0xD9B8},{0x4FD2, 0x825B},{0x4FD3, 0x825C},{0x4FD4, 0x825D},
- {0x4FD5, 0x825E},{0x4FD6, 0x825F},{0x4FD7, 0xCBD7},{0x4FD8, 0xB7FD},{0x4FD9, 0x8260},{0x4FDA, 0xD9B5},{0x4FDB, 0x8261},{0x4FDC, 0xD9B7},
- {0x4FDD, 0xB1A3},{0x4FDE, 0xD3E1},{0x4FDF, 0xD9B9},{0x4FE0, 0x8262},{0x4FE1, 0xD0C5},{0x4FE2, 0x8263},{0x4FE3, 0xD9B6},{0x4FE4, 0x8264},
- {0x4FE5, 0x8265},{0x4FE6, 0xD9B1},{0x4FE7, 0x8266},{0x4FE8, 0xD9B2},{0x4FE9, 0xC1A9},{0x4FEA, 0xD9B3},{0x4FEB, 0x8267},{0x4FEC, 0x8268},
- {0x4FED, 0xBCF3},{0x4FEE, 0xD0DE},{0x4FEF, 0xB8A9},{0x4FF0, 0x8269},{0x4FF1, 0xBEE3},{0x4FF2, 0x826A},{0x4FF3, 0xD9BD},{0x4FF4, 0x826B},
- {0x4FF5, 0x826C},{0x4FF6, 0x826D},{0x4FF7, 0x826E},{0x4FF8, 0xD9BA},{0x4FF9, 0x826F},{0x4FFA, 0xB0B3},{0x4FFB, 0x8270},{0x4FFC, 0x8271},
- {0x4FFD, 0x8272},{0x4FFE, 0xD9C2},{0x4FFF, 0x8273},{0x5000, 0x8274},{0x5001, 0x8275},{0x5002, 0x8276},{0x5003, 0x8277},{0x5004, 0x8278},
- {0x5005, 0x8279},{0x5006, 0x827A},{0x5007, 0x827B},{0x5008, 0x827C},{0x5009, 0x827D},{0x500A, 0x827E},{0x500B, 0x8280},{0x500C, 0xD9C4},
- {0x500D, 0xB1B6},{0x500E, 0x8281},{0x500F, 0xD9BF},{0x5010, 0x8282},{0x5011, 0x8283},{0x5012, 0xB5B9},{0x5013, 0x8284},{0x5014, 0xBEF3},
- {0x5015, 0x8285},{0x5016, 0x8286},{0x5017, 0x8287},{0x5018, 0xCCC8},{0x5019, 0xBAF2},{0x501A, 0xD2D0},{0x501B, 0x8288},{0x501C, 0xD9C3},
- {0x501D, 0x8289},{0x501E, 0x828A},{0x501F, 0xBDE8},{0x5020, 0x828B},{0x5021, 0xB3AB},{0x5022, 0x828C},{0x5023, 0x828D},{0x5024, 0x828E},
- {0x5025, 0xD9C5},{0x5026, 0xBEEB},{0x5027, 0x828F},{0x5028, 0xD9C6},{0x5029, 0xD9BB},{0x502A, 0xC4DF},{0x502B, 0x8290},{0x502C, 0xD9BE},
- {0x502D, 0xD9C1},{0x502E, 0xD9C0},{0x502F, 0x8291},{0x5030, 0x8292},{0x5031, 0x8293},{0x5032, 0x8294},{0x5033, 0x8295},{0x5034, 0x8296},
- {0x5035, 0x8297},{0x5036, 0x8298},{0x5037, 0x8299},{0x5038, 0x829A},{0x5039, 0x829B},{0x503A, 0xD5AE},{0x503B, 0x829C},{0x503C, 0xD6B5},
- {0x503D, 0x829D},{0x503E, 0xC7E3},{0x503F, 0x829E},{0x5040, 0x829F},{0x5041, 0x82A0},{0x5042, 0x82A1},{0x5043, 0xD9C8},{0x5044, 0x82A2},
- {0x5045, 0x82A3},{0x5046, 0x82A4},{0x5047, 0xBCD9},{0x5048, 0xD9CA},{0x5049, 0x82A5},{0x504A, 0x82A6},{0x504B, 0x82A7},{0x504C, 0xD9BC},
- {0x504D, 0x82A8},{0x504E, 0xD9CB},{0x504F, 0xC6AB},{0x5050, 0x82A9},{0x5051, 0x82AA},{0x5052, 0x82AB},{0x5053, 0x82AC},{0x5054, 0x82AD},
- {0x5055, 0xD9C9},{0x5056, 0x82AE},{0x5057, 0x82AF},{0x5058, 0x82B0},{0x5059, 0x82B1},{0x505A, 0xD7F6},{0x505B, 0x82B2},{0x505C, 0xCDA3},
- {0x505D, 0x82B3},{0x505E, 0x82B4},{0x505F, 0x82B5},{0x5060, 0x82B6},{0x5061, 0x82B7},{0x5062, 0x82B8},{0x5063, 0x82B9},{0x5064, 0x82BA},
- {0x5065, 0xBDA1},{0x5066, 0x82BB},{0x5067, 0x82BC},{0x5068, 0x82BD},{0x5069, 0x82BE},{0x506A, 0x82BF},{0x506B, 0x82C0},{0x506C, 0xD9CC},
- {0x506D, 0x82C1},{0x506E, 0x82C2},{0x506F, 0x82C3},{0x5070, 0x82C4},{0x5071, 0x82C5},{0x5072, 0x82C6},{0x5073, 0x82C7},{0x5074, 0x82C8},
- {0x5075, 0x82C9},{0x5076, 0xC5BC},{0x5077, 0xCDB5},{0x5078, 0x82CA},{0x5079, 0x82CB},{0x507A, 0x82CC},{0x507B, 0xD9CD},{0x507C, 0x82CD},
- {0x507D, 0x82CE},{0x507E, 0xD9C7},{0x507F, 0xB3A5},{0x5080, 0xBFFE},{0x5081, 0x82CF},{0x5082, 0x82D0},{0x5083, 0x82D1},{0x5084, 0x82D2},
- {0x5085, 0xB8B5},{0x5086, 0x82D3},{0x5087, 0x82D4},{0x5088, 0xC0FC},{0x5089, 0x82D5},{0x508A, 0x82D6},{0x508B, 0x82D7},{0x508C, 0x82D8},
- {0x508D, 0xB0F8},{0x508E, 0x82D9},{0x508F, 0x82DA},{0x5090, 0x82DB},{0x5091, 0x82DC},{0x5092, 0x82DD},{0x5093, 0x82DE},{0x5094, 0x82DF},
- {0x5095, 0x82E0},{0x5096, 0x82E1},{0x5097, 0x82E2},{0x5098, 0x82E3},{0x5099, 0x82E4},{0x509A, 0x82E5},{0x509B, 0x82E6},{0x509C, 0x82E7},
- {0x509D, 0x82E8},{0x509E, 0x82E9},{0x509F, 0x82EA},{0x50A0, 0x82EB},{0x50A1, 0x82EC},{0x50A2, 0x82ED},{0x50A3, 0xB4F6},{0x50A4, 0x82EE},
- {0x50A5, 0xD9CE},{0x50A6, 0x82EF},{0x50A7, 0xD9CF},{0x50A8, 0xB4A2},{0x50A9, 0xD9D0},{0x50AA, 0x82F0},{0x50AB, 0x82F1},{0x50AC, 0xB4DF},
- {0x50AD, 0x82F2},{0x50AE, 0x82F3},{0x50AF, 0x82F4},{0x50B0, 0x82F5},{0x50B1, 0x82F6},{0x50B2, 0xB0C1},{0x50B3, 0x82F7},{0x50B4, 0x82F8},
- {0x50B5, 0x82F9},{0x50B6, 0x82FA},{0x50B7, 0x82FB},{0x50B8, 0x82FC},{0x50B9, 0x82FD},{0x50BA, 0xD9D1},{0x50BB, 0xC9B5},{0x50BC, 0x82FE},
- {0x50BD, 0x8340},{0x50BE, 0x8341},{0x50BF, 0x8342},{0x50C0, 0x8343},{0x50C1, 0x8344},{0x50C2, 0x8345},{0x50C3, 0x8346},{0x50C4, 0x8347},
- {0x50C5, 0x8348},{0x50C6, 0x8349},{0x50C7, 0x834A},{0x50C8, 0x834B},{0x50C9, 0x834C},{0x50CA, 0x834D},{0x50CB, 0x834E},{0x50CC, 0x834F},
- {0x50CD, 0x8350},{0x50CE, 0x8351},{0x50CF, 0xCFF1},{0x50D0, 0x8352},{0x50D1, 0x8353},{0x50D2, 0x8354},{0x50D3, 0x8355},{0x50D4, 0x8356},
- {0x50D5, 0x8357},{0x50D6, 0xD9D2},{0x50D7, 0x8358},{0x50D8, 0x8359},{0x50D9, 0x835A},{0x50DA, 0xC1C5},{0x50DB, 0x835B},{0x50DC, 0x835C},
- {0x50DD, 0x835D},{0x50DE, 0x835E},{0x50DF, 0x835F},{0x50E0, 0x8360},{0x50E1, 0x8361},{0x50E2, 0x8362},{0x50E3, 0x8363},{0x50E4, 0x8364},
- {0x50E5, 0x8365},{0x50E6, 0xD9D6},{0x50E7, 0xC9AE},{0x50E8, 0x8366},{0x50E9, 0x8367},{0x50EA, 0x8368},{0x50EB, 0x8369},{0x50EC, 0xD9D5},
- {0x50ED, 0xD9D4},{0x50EE, 0xD9D7},{0x50EF, 0x836A},{0x50F0, 0x836B},{0x50F1, 0x836C},{0x50F2, 0x836D},{0x50F3, 0xCBDB},{0x50F4, 0x836E},
- {0x50F5, 0xBDA9},{0x50F6, 0x836F},{0x50F7, 0x8370},{0x50F8, 0x8371},{0x50F9, 0x8372},{0x50FA, 0x8373},{0x50FB, 0xC6A7},{0x50FC, 0x8374},
- {0x50FD, 0x8375},{0x50FE, 0x8376},{0x50FF, 0x8377},{0x5100, 0x8378},{0x5101, 0x8379},{0x5102, 0x837A},{0x5103, 0x837B},{0x5104, 0x837C},
- {0x5105, 0x837D},{0x5106, 0xD9D3},{0x5107, 0xD9D8},{0x5108, 0x837E},{0x5109, 0x8380},{0x510A, 0x8381},{0x510B, 0xD9D9},{0x510C, 0x8382},
- {0x510D, 0x8383},{0x510E, 0x8384},{0x510F, 0x8385},{0x5110, 0x8386},{0x5111, 0x8387},{0x5112, 0xC8E5},{0x5113, 0x8388},{0x5114, 0x8389},
- {0x5115, 0x838A},{0x5116, 0x838B},{0x5117, 0x838C},{0x5118, 0x838D},{0x5119, 0x838E},{0x511A, 0x838F},{0x511B, 0x8390},{0x511C, 0x8391},
- {0x511D, 0x8392},{0x511E, 0x8393},{0x511F, 0x8394},{0x5120, 0x8395},{0x5121, 0xC0DC},{0x5122, 0x8396},{0x5123, 0x8397},{0x5124, 0x8398},
- {0x5125, 0x8399},{0x5126, 0x839A},{0x5127, 0x839B},{0x5128, 0x839C},{0x5129, 0x839D},{0x512A, 0x839E},{0x512B, 0x839F},{0x512C, 0x83A0},
- {0x512D, 0x83A1},{0x512E, 0x83A2},{0x512F, 0x83A3},{0x5130, 0x83A4},{0x5131, 0x83A5},{0x5132, 0x83A6},{0x5133, 0x83A7},{0x5134, 0x83A8},
- {0x5135, 0x83A9},{0x5136, 0x83AA},{0x5137, 0x83AB},{0x5138, 0x83AC},{0x5139, 0x83AD},{0x513A, 0x83AE},{0x513B, 0x83AF},{0x513C, 0x83B0},
- {0x513D, 0x83B1},{0x513E, 0x83B2},{0x513F, 0xB6F9},{0x5140, 0xD8A3},{0x5141, 0xD4CA},{0x5142, 0x83B3},{0x5143, 0xD4AA},{0x5144, 0xD0D6},
- {0x5145, 0xB3E4},{0x5146, 0xD5D7},{0x5147, 0x83B4},{0x5148, 0xCFC8},{0x5149, 0xB9E2},{0x514A, 0x83B5},{0x514B, 0xBFCB},{0x514C, 0x83B6},
- {0x514D, 0xC3E2},{0x514E, 0x83B7},{0x514F, 0x83B8},{0x5150, 0x83B9},{0x5151, 0xB6D2},{0x5152, 0x83BA},{0x5153, 0x83BB},{0x5154, 0xCDC3},
- {0x5155, 0xD9EE},{0x5156, 0xD9F0},{0x5157, 0x83BC},{0x5158, 0x83BD},{0x5159, 0x83BE},{0x515A, 0xB5B3},{0x515B, 0x83BF},{0x515C, 0xB6B5},
- {0x515D, 0x83C0},{0x515E, 0x83C1},{0x515F, 0x83C2},{0x5160, 0x83C3},{0x5161, 0x83C4},{0x5162, 0xBEA4},{0x5163, 0x83C5},{0x5164, 0x83C6},
- {0x5165, 0xC8EB},{0x5166, 0x83C7},{0x5167, 0x83C8},{0x5168, 0xC8AB},{0x5169, 0x83C9},{0x516A, 0x83CA},{0x516B, 0xB0CB},{0x516C, 0xB9AB},
- {0x516D, 0xC1F9},{0x516E, 0xD9E2},{0x516F, 0x83CB},{0x5170, 0xC0BC},{0x5171, 0xB9B2},{0x5172, 0x83CC},{0x5173, 0xB9D8},{0x5174, 0xD0CB},
- {0x5175, 0xB1F8},{0x5176, 0xC6E4},{0x5177, 0xBEDF},{0x5178, 0xB5E4},{0x5179, 0xD7C8},{0x517A, 0x83CD},{0x517B, 0xD1F8},{0x517C, 0xBCE6},
- {0x517D, 0xCADE},{0x517E, 0x83CE},{0x517F, 0x83CF},{0x5180, 0xBCBD},{0x5181, 0xD9E6},{0x5182, 0xD8E7},{0x5183, 0x83D0},{0x5184, 0x83D1},
- {0x5185, 0xC4DA},{0x5186, 0x83D2},{0x5187, 0x83D3},{0x5188, 0xB8D4},{0x5189, 0xC8BD},{0x518A, 0x83D4},{0x518B, 0x83D5},{0x518C, 0xB2E1},
- {0x518D, 0xD4D9},{0x518E, 0x83D6},{0x518F, 0x83D7},{0x5190, 0x83D8},{0x5191, 0x83D9},{0x5192, 0xC3B0},{0x5193, 0x83DA},{0x5194, 0x83DB},
- {0x5195, 0xC3E1},{0x5196, 0xDAA2},{0x5197, 0xC8DF},{0x5198, 0x83DC},{0x5199, 0xD0B4},{0x519A, 0x83DD},{0x519B, 0xBEFC},{0x519C, 0xC5A9},
- {0x519D, 0x83DE},{0x519E, 0x83DF},{0x519F, 0x83E0},{0x51A0, 0xB9DA},{0x51A1, 0x83E1},{0x51A2, 0xDAA3},{0x51A3, 0x83E2},{0x51A4, 0xD4A9},
- {0x51A5, 0xDAA4},{0x51A6, 0x83E3},{0x51A7, 0x83E4},{0x51A8, 0x83E5},{0x51A9, 0x83E6},{0x51AA, 0x83E7},{0x51AB, 0xD9FB},{0x51AC, 0xB6AC},
- {0x51AD, 0x83E8},{0x51AE, 0x83E9},{0x51AF, 0xB7EB},{0x51B0, 0xB1F9},{0x51B1, 0xD9FC},{0x51B2, 0xB3E5},{0x51B3, 0xBEF6},{0x51B4, 0x83EA},
- {0x51B5, 0xBFF6},{0x51B6, 0xD2B1},{0x51B7, 0xC0E4},{0x51B8, 0x83EB},{0x51B9, 0x83EC},{0x51BA, 0x83ED},{0x51BB, 0xB6B3},{0x51BC, 0xD9FE},
- {0x51BD, 0xD9FD},{0x51BE, 0x83EE},{0x51BF, 0x83EF},{0x51C0, 0xBEBB},{0x51C1, 0x83F0},{0x51C2, 0x83F1},{0x51C3, 0x83F2},{0x51C4, 0xC6E0},
- {0x51C5, 0x83F3},{0x51C6, 0xD7BC},{0x51C7, 0xDAA1},{0x51C8, 0x83F4},{0x51C9, 0xC1B9},{0x51CA, 0x83F5},{0x51CB, 0xB5F2},{0x51CC, 0xC1E8},
- {0x51CD, 0x83F6},{0x51CE, 0x83F7},{0x51CF, 0xBCF5},{0x51D0, 0x83F8},{0x51D1, 0xB4D5},{0x51D2, 0x83F9},{0x51D3, 0x83FA},{0x51D4, 0x83FB},
- {0x51D5, 0x83FC},{0x51D6, 0x83FD},{0x51D7, 0x83FE},{0x51D8, 0x8440},{0x51D9, 0x8441},{0x51DA, 0x8442},{0x51DB, 0xC1DD},{0x51DC, 0x8443},
- {0x51DD, 0xC4FD},{0x51DE, 0x8444},{0x51DF, 0x8445},{0x51E0, 0xBCB8},{0x51E1, 0xB7B2},{0x51E2, 0x8446},{0x51E3, 0x8447},{0x51E4, 0xB7EF},
- {0x51E5, 0x8448},{0x51E6, 0x8449},{0x51E7, 0x844A},{0x51E8, 0x844B},{0x51E9, 0x844C},{0x51EA, 0x844D},{0x51EB, 0xD9EC},{0x51EC, 0x844E},
- {0x51ED, 0xC6BE},{0x51EE, 0x844F},{0x51EF, 0xBFAD},{0x51F0, 0xBBCB},{0x51F1, 0x8450},{0x51F2, 0x8451},{0x51F3, 0xB5CA},{0x51F4, 0x8452},
- {0x51F5, 0xDBC9},{0x51F6, 0xD0D7},{0x51F7, 0x8453},{0x51F8, 0xCDB9},{0x51F9, 0xB0BC},{0x51FA, 0xB3F6},{0x51FB, 0xBBF7},{0x51FC, 0xDBCA},
- {0x51FD, 0xBAAF},{0x51FE, 0x8454},{0x51FF, 0xD4E4},{0x5200, 0xB5B6},{0x5201, 0xB5F3},{0x5202, 0xD8D6},{0x5203, 0xC8D0},{0x5204, 0x8455},
- {0x5205, 0x8456},{0x5206, 0xB7D6},{0x5207, 0xC7D0},{0x5208, 0xD8D7},{0x5209, 0x8457},{0x520A, 0xBFAF},{0x520B, 0x8458},{0x520C, 0x8459},
- {0x520D, 0xDBBB},{0x520E, 0xD8D8},{0x520F, 0x845A},{0x5210, 0x845B},{0x5211, 0xD0CC},{0x5212, 0xBBAE},{0x5213, 0x845C},{0x5214, 0x845D},
- {0x5215, 0x845E},{0x5216, 0xEBBE},{0x5217, 0xC1D0},{0x5218, 0xC1F5},{0x5219, 0xD4F2},{0x521A, 0xB8D5},{0x521B, 0xB4B4},{0x521C, 0x845F},
- {0x521D, 0xB3F5},{0x521E, 0x8460},{0x521F, 0x8461},{0x5220, 0xC9BE},{0x5221, 0x8462},{0x5222, 0x8463},{0x5223, 0x8464},{0x5224, 0xC5D0},
- {0x5225, 0x8465},{0x5226, 0x8466},{0x5227, 0x8467},{0x5228, 0xC5D9},{0x5229, 0xC0FB},{0x522A, 0x8468},{0x522B, 0xB1F0},{0x522C, 0x8469},
- {0x522D, 0xD8D9},{0x522E, 0xB9CE},{0x522F, 0x846A},{0x5230, 0xB5BD},{0x5231, 0x846B},{0x5232, 0x846C},{0x5233, 0xD8DA},{0x5234, 0x846D},
- {0x5235, 0x846E},{0x5236, 0xD6C6},{0x5237, 0xCBA2},{0x5238, 0xC8AF},{0x5239, 0xC9B2},{0x523A, 0xB4CC},{0x523B, 0xBFCC},{0x523C, 0x846F},
- {0x523D, 0xB9F4},{0x523E, 0x8470},{0x523F, 0xD8DB},{0x5240, 0xD8DC},{0x5241, 0xB6E7},{0x5242, 0xBCC1},{0x5243, 0xCCEA},{0x5244, 0x8471},
- {0x5245, 0x8472},{0x5246, 0x8473},{0x5247, 0x8474},{0x5248, 0x8475},{0x5249, 0x8476},{0x524A, 0xCFF7},{0x524B, 0x8477},{0x524C, 0xD8DD},
- {0x524D, 0xC7B0},{0x524E, 0x8478},{0x524F, 0x8479},{0x5250, 0xB9D0},{0x5251, 0xBDA3},{0x5252, 0x847A},{0x5253, 0x847B},{0x5254, 0xCCDE},
- {0x5255, 0x847C},{0x5256, 0xC6CA},{0x5257, 0x847D},{0x5258, 0x847E},{0x5259, 0x8480},{0x525A, 0x8481},{0x525B, 0x8482},{0x525C, 0xD8E0},
- {0x525D, 0x8483},{0x525E, 0xD8DE},{0x525F, 0x8484},{0x5260, 0x8485},{0x5261, 0xD8DF},{0x5262, 0x8486},{0x5263, 0x8487},{0x5264, 0x8488},
- {0x5265, 0xB0FE},{0x5266, 0x8489},{0x5267, 0xBEE7},{0x5268, 0x848A},{0x5269, 0xCAA3},{0x526A, 0xBCF4},{0x526B, 0x848B},{0x526C, 0x848C},
- {0x526D, 0x848D},{0x526E, 0x848E},{0x526F, 0xB8B1},{0x5270, 0x848F},{0x5271, 0x8490},{0x5272, 0xB8EE},{0x5273, 0x8491},{0x5274, 0x8492},
- {0x5275, 0x8493},{0x5276, 0x8494},{0x5277, 0x8495},{0x5278, 0x8496},{0x5279, 0x8497},{0x527A, 0x8498},{0x527B, 0x8499},{0x527C, 0x849A},
- {0x527D, 0xD8E2},{0x527E, 0x849B},{0x527F, 0xBDCB},{0x5280, 0x849C},{0x5281, 0xD8E4},{0x5282, 0xD8E3},{0x5283, 0x849D},{0x5284, 0x849E},
- {0x5285, 0x849F},{0x5286, 0x84A0},{0x5287, 0x84A1},{0x5288, 0xC5FC},{0x5289, 0x84A2},{0x528A, 0x84A3},{0x528B, 0x84A4},{0x528C, 0x84A5},
- {0x528D, 0x84A6},{0x528E, 0x84A7},{0x528F, 0x84A8},{0x5290, 0xD8E5},{0x5291, 0x84A9},{0x5292, 0x84AA},{0x5293, 0xD8E6},{0x5294, 0x84AB},
- {0x5295, 0x84AC},{0x5296, 0x84AD},{0x5297, 0x84AE},{0x5298, 0x84AF},{0x5299, 0x84B0},{0x529A, 0x84B1},{0x529B, 0xC1A6},{0x529C, 0x84B2},
- {0x529D, 0xC8B0},{0x529E, 0xB0EC},{0x529F, 0xB9A6},{0x52A0, 0xBCD3},{0x52A1, 0xCEF1},{0x52A2, 0xDBBD},{0x52A3, 0xC1D3},{0x52A4, 0x84B3},
- {0x52A5, 0x84B4},{0x52A6, 0x84B5},{0x52A7, 0x84B6},{0x52A8, 0xB6AF},{0x52A9, 0xD6FA},{0x52AA, 0xC5AC},{0x52AB, 0xBDD9},{0x52AC, 0xDBBE},
- {0x52AD, 0xDBBF},{0x52AE, 0x84B7},{0x52AF, 0x84B8},{0x52B0, 0x84B9},{0x52B1, 0xC0F8},{0x52B2, 0xBEA2},{0x52B3, 0xC0CD},{0x52B4, 0x84BA},
- {0x52B5, 0x84BB},{0x52B6, 0x84BC},{0x52B7, 0x84BD},{0x52B8, 0x84BE},{0x52B9, 0x84BF},{0x52BA, 0x84C0},{0x52BB, 0x84C1},{0x52BC, 0x84C2},
- {0x52BD, 0x84C3},{0x52BE, 0xDBC0},{0x52BF, 0xCAC6},{0x52C0, 0x84C4},{0x52C1, 0x84C5},{0x52C2, 0x84C6},{0x52C3, 0xB2AA},{0x52C4, 0x84C7},
- {0x52C5, 0x84C8},{0x52C6, 0x84C9},{0x52C7, 0xD3C2},{0x52C8, 0x84CA},{0x52C9, 0xC3E3},{0x52CA, 0x84CB},{0x52CB, 0xD1AB},{0x52CC, 0x84CC},
- {0x52CD, 0x84CD},{0x52CE, 0x84CE},{0x52CF, 0x84CF},{0x52D0, 0xDBC2},{0x52D1, 0x84D0},{0x52D2, 0xC0D5},{0x52D3, 0x84D1},{0x52D4, 0x84D2},
- {0x52D5, 0x84D3},{0x52D6, 0xDBC3},{0x52D7, 0x84D4},{0x52D8, 0xBFB1},{0x52D9, 0x84D5},{0x52DA, 0x84D6},{0x52DB, 0x84D7},{0x52DC, 0x84D8},
- {0x52DD, 0x84D9},{0x52DE, 0x84DA},{0x52DF, 0xC4BC},{0x52E0, 0x84DB},{0x52E1, 0x84DC},{0x52E2, 0x84DD},{0x52E3, 0x84DE},{0x52E4, 0xC7DA},
- {0x52E5, 0x84DF},{0x52E6, 0x84E0},{0x52E7, 0x84E1},{0x52E8, 0x84E2},{0x52E9, 0x84E3},{0x52EA, 0x84E4},{0x52EB, 0x84E5},{0x52EC, 0x84E6},
- {0x52ED, 0x84E7},{0x52EE, 0x84E8},{0x52EF, 0x84E9},{0x52F0, 0xDBC4},{0x52F1, 0x84EA},{0x52F2, 0x84EB},{0x52F3, 0x84EC},{0x52F4, 0x84ED},
- {0x52F5, 0x84EE},{0x52F6, 0x84EF},{0x52F7, 0x84F0},{0x52F8, 0x84F1},{0x52F9, 0xD9E8},{0x52FA, 0xC9D7},{0x52FB, 0x84F2},{0x52FC, 0x84F3},
- {0x52FD, 0x84F4},{0x52FE, 0xB9B4},{0x52FF, 0xCEF0},{0x5300, 0xD4C8},{0x5301, 0x84F5},{0x5302, 0x84F6},{0x5303, 0x84F7},{0x5304, 0x84F8},
- {0x5305, 0xB0FC},{0x5306, 0xB4D2},{0x5307, 0x84F9},{0x5308, 0xD0D9},{0x5309, 0x84FA},{0x530A, 0x84FB},{0x530B, 0x84FC},{0x530C, 0x84FD},
- {0x530D, 0xD9E9},{0x530E, 0x84FE},{0x530F, 0xDECB},{0x5310, 0xD9EB},{0x5311, 0x8540},{0x5312, 0x8541},{0x5313, 0x8542},{0x5314, 0x8543},
- {0x5315, 0xD8B0},{0x5316, 0xBBAF},{0x5317, 0xB1B1},{0x5318, 0x8544},{0x5319, 0xB3D7},{0x531A, 0xD8CE},{0x531B, 0x8545},{0x531C, 0x8546},
- {0x531D, 0xD4D1},{0x531E, 0x8547},{0x531F, 0x8548},{0x5320, 0xBDB3},{0x5321, 0xBFEF},{0x5322, 0x8549},{0x5323, 0xCFBB},{0x5324, 0x854A},
- {0x5325, 0x854B},{0x5326, 0xD8D0},{0x5327, 0x854C},{0x5328, 0x854D},{0x5329, 0x854E},{0x532A, 0xB7CB},{0x532B, 0x854F},{0x532C, 0x8550},
- {0x532D, 0x8551},{0x532E, 0xD8D1},{0x532F, 0x8552},{0x5330, 0x8553},{0x5331, 0x8554},{0x5332, 0x8555},{0x5333, 0x8556},{0x5334, 0x8557},
- {0x5335, 0x8558},{0x5336, 0x8559},{0x5337, 0x855A},{0x5338, 0x855B},{0x5339, 0xC6A5},{0x533A, 0xC7F8},{0x533B, 0xD2BD},{0x533C, 0x855C},
- {0x533D, 0x855D},{0x533E, 0xD8D2},{0x533F, 0xC4E4},{0x5340, 0x855E},{0x5341, 0xCAAE},{0x5342, 0x855F},{0x5343, 0xC7A7},{0x5344, 0x8560},
- {0x5345, 0xD8A6},{0x5346, 0x8561},{0x5347, 0xC9FD},{0x5348, 0xCEE7},{0x5349, 0xBBDC},{0x534A, 0xB0EB},{0x534B, 0x8562},{0x534C, 0x8563},
- {0x534D, 0x8564},{0x534E, 0xBBAA},{0x534F, 0xD0AD},{0x5350, 0x8565},{0x5351, 0xB1B0},{0x5352, 0xD7E4},{0x5353, 0xD7BF},{0x5354, 0x8566},
- {0x5355, 0xB5A5},{0x5356, 0xC2F4},{0x5357, 0xC4CF},{0x5358, 0x8567},{0x5359, 0x8568},{0x535A, 0xB2A9},{0x535B, 0x8569},{0x535C, 0xB2B7},
- {0x535D, 0x856A},{0x535E, 0xB1E5},{0x535F, 0xDFB2},{0x5360, 0xD5BC},{0x5361, 0xBFA8},{0x5362, 0xC2AC},{0x5363, 0xD8D5},{0x5364, 0xC2B1},
- {0x5365, 0x856B},{0x5366, 0xD8D4},{0x5367, 0xCED4},{0x5368, 0x856C},{0x5369, 0xDAE0},{0x536A, 0x856D},{0x536B, 0xCEC0},{0x536C, 0x856E},
- {0x536D, 0x856F},{0x536E, 0xD8B4},{0x536F, 0xC3AE},{0x5370, 0xD3A1},{0x5371, 0xCEA3},{0x5372, 0x8570},{0x5373, 0xBCB4},{0x5374, 0xC8B4},
- {0x5375, 0xC2D1},{0x5376, 0x8571},{0x5377, 0xBEED},{0x5378, 0xD0B6},{0x5379, 0x8572},{0x537A, 0xDAE1},{0x537B, 0x8573},{0x537C, 0x8574},
- {0x537D, 0x8575},{0x537E, 0x8576},{0x537F, 0xC7E4},{0x5380, 0x8577},{0x5381, 0x8578},{0x5382, 0xB3A7},{0x5383, 0x8579},{0x5384, 0xB6F2},
- {0x5385, 0xCCFC},{0x5386, 0xC0FA},{0x5387, 0x857A},{0x5388, 0x857B},{0x5389, 0xC0F7},{0x538A, 0x857C},{0x538B, 0xD1B9},{0x538C, 0xD1E1},
- {0x538D, 0xD8C7},{0x538E, 0x857D},{0x538F, 0x857E},{0x5390, 0x8580},{0x5391, 0x8581},{0x5392, 0x8582},{0x5393, 0x8583},{0x5394, 0x8584},
- {0x5395, 0xB2DE},{0x5396, 0x8585},{0x5397, 0x8586},{0x5398, 0xC0E5},{0x5399, 0x8587},{0x539A, 0xBAF1},{0x539B, 0x8588},{0x539C, 0x8589},
- {0x539D, 0xD8C8},{0x539E, 0x858A},{0x539F, 0xD4AD},{0x53A0, 0x858B},{0x53A1, 0x858C},{0x53A2, 0xCFE1},{0x53A3, 0xD8C9},{0x53A4, 0x858D},
- {0x53A5, 0xD8CA},{0x53A6, 0xCFC3},{0x53A7, 0x858E},{0x53A8, 0xB3F8},{0x53A9, 0xBEC7},{0x53AA, 0x858F},{0x53AB, 0x8590},{0x53AC, 0x8591},
- {0x53AD, 0x8592},{0x53AE, 0xD8CB},{0x53AF, 0x8593},{0x53B0, 0x8594},{0x53B1, 0x8595},{0x53B2, 0x8596},{0x53B3, 0x8597},{0x53B4, 0x8598},
- {0x53B5, 0x8599},{0x53B6, 0xDBCC},{0x53B7, 0x859A},{0x53B8, 0x859B},{0x53B9, 0x859C},{0x53BA, 0x859D},{0x53BB, 0xC8A5},{0x53BC, 0x859E},
- {0x53BD, 0x859F},{0x53BE, 0x85A0},{0x53BF, 0xCFD8},{0x53C0, 0x85A1},{0x53C1, 0xC8FE},{0x53C2, 0xB2CE},{0x53C3, 0x85A2},{0x53C4, 0x85A3},
- {0x53C5, 0x85A4},{0x53C6, 0x85A5},{0x53C7, 0x85A6},{0x53C8, 0xD3D6},{0x53C9, 0xB2E6},{0x53CA, 0xBCB0},{0x53CB, 0xD3D1},{0x53CC, 0xCBAB},
- {0x53CD, 0xB7B4},{0x53CE, 0x85A7},{0x53CF, 0x85A8},{0x53D0, 0x85A9},{0x53D1, 0xB7A2},{0x53D2, 0x85AA},{0x53D3, 0x85AB},{0x53D4, 0xCAE5},
- {0x53D5, 0x85AC},{0x53D6, 0xC8A1},{0x53D7, 0xCADC},{0x53D8, 0xB1E4},{0x53D9, 0xD0F0},{0x53DA, 0x85AD},{0x53DB, 0xC5D1},{0x53DC, 0x85AE},
- {0x53DD, 0x85AF},{0x53DE, 0x85B0},{0x53DF, 0xDBC5},{0x53E0, 0xB5FE},{0x53E1, 0x85B1},{0x53E2, 0x85B2},{0x53E3, 0xBFDA},{0x53E4, 0xB9C5},
- {0x53E5, 0xBEE4},{0x53E6, 0xC1ED},{0x53E7, 0x85B3},{0x53E8, 0xDFB6},{0x53E9, 0xDFB5},{0x53EA, 0xD6BB},{0x53EB, 0xBDD0},{0x53EC, 0xD5D9},
- {0x53ED, 0xB0C8},{0x53EE, 0xB6A3},{0x53EF, 0xBFC9},{0x53F0, 0xCCA8},{0x53F1, 0xDFB3},{0x53F2, 0xCAB7},{0x53F3, 0xD3D2},{0x53F4, 0x85B4},
- {0x53F5, 0xD8CF},{0x53F6, 0xD2B6},{0x53F7, 0xBAC5},{0x53F8, 0xCBBE},{0x53F9, 0xCCBE},{0x53FA, 0x85B5},{0x53FB, 0xDFB7},{0x53FC, 0xB5F0},
- {0x53FD, 0xDFB4},{0x53FE, 0x85B6},{0x53FF, 0x85B7},{0x5400, 0x85B8},{0x5401, 0xD3F5},{0x5402, 0x85B9},{0x5403, 0xB3D4},{0x5404, 0xB8F7},
- {0x5405, 0x85BA},{0x5406, 0xDFBA},{0x5407, 0x85BB},{0x5408, 0xBACF},{0x5409, 0xBCAA},{0x540A, 0xB5F5},{0x540B, 0x85BC},{0x540C, 0xCDAC},
- {0x540D, 0xC3FB},{0x540E, 0xBAF3},{0x540F, 0xC0F4},{0x5410, 0xCDC2},{0x5411, 0xCFF2},{0x5412, 0xDFB8},{0x5413, 0xCFC5},{0x5414, 0x85BD},
- {0x5415, 0xC2C0},{0x5416, 0xDFB9},{0x5417, 0xC2F0},{0x5418, 0x85BE},{0x5419, 0x85BF},{0x541A, 0x85C0},{0x541B, 0xBEFD},{0x541C, 0x85C1},
- {0x541D, 0xC1DF},{0x541E, 0xCDCC},{0x541F, 0xD2F7},{0x5420, 0xB7CD},{0x5421, 0xDFC1},{0x5422, 0x85C2},{0x5423, 0xDFC4},{0x5424, 0x85C3},
- {0x5425, 0x85C4},{0x5426, 0xB7F1},{0x5427, 0xB0C9},{0x5428, 0xB6D6},{0x5429, 0xB7D4},{0x542A, 0x85C5},{0x542B, 0xBAAC},{0x542C, 0xCCFD},
- {0x542D, 0xBFD4},{0x542E, 0xCBB1},{0x542F, 0xC6F4},{0x5430, 0x85C6},{0x5431, 0xD6A8},{0x5432, 0xDFC5},{0x5433, 0x85C7},{0x5434, 0xCEE2},
- {0x5435, 0xB3B3},{0x5436, 0x85C8},{0x5437, 0x85C9},{0x5438, 0xCEFC},{0x5439, 0xB4B5},{0x543A, 0x85CA},{0x543B, 0xCEC7},{0x543C, 0xBAF0},
- {0x543D, 0x85CB},{0x543E, 0xCEE1},{0x543F, 0x85CC},{0x5440, 0xD1BD},{0x5441, 0x85CD},{0x5442, 0x85CE},{0x5443, 0xDFC0},{0x5444, 0x85CF},
- {0x5445, 0x85D0},{0x5446, 0xB4F4},{0x5447, 0x85D1},{0x5448, 0xB3CA},{0x5449, 0x85D2},{0x544A, 0xB8E6},{0x544B, 0xDFBB},{0x544C, 0x85D3},
- {0x544D, 0x85D4},{0x544E, 0x85D5},{0x544F, 0x85D6},{0x5450, 0xC4C5},{0x5451, 0x85D7},{0x5452, 0xDFBC},{0x5453, 0xDFBD},{0x5454, 0xDFBE},
- {0x5455, 0xC5BB},{0x5456, 0xDFBF},{0x5457, 0xDFC2},{0x5458, 0xD4B1},{0x5459, 0xDFC3},{0x545A, 0x85D8},{0x545B, 0xC7BA},{0x545C, 0xCED8},
- {0x545D, 0x85D9},{0x545E, 0x85DA},{0x545F, 0x85DB},{0x5460, 0x85DC},{0x5461, 0x85DD},{0x5462, 0xC4D8},{0x5463, 0x85DE},{0x5464, 0xDFCA},
- {0x5465, 0x85DF},{0x5466, 0xDFCF},{0x5467, 0x85E0},{0x5468, 0xD6DC},{0x5469, 0x85E1},{0x546A, 0x85E2},{0x546B, 0x85E3},{0x546C, 0x85E4},
- {0x546D, 0x85E5},{0x546E, 0x85E6},{0x546F, 0x85E7},{0x5470, 0x85E8},{0x5471, 0xDFC9},{0x5472, 0xDFDA},{0x5473, 0xCEB6},{0x5474, 0x85E9},
- {0x5475, 0xBAC7},{0x5476, 0xDFCE},{0x5477, 0xDFC8},{0x5478, 0xC5DE},{0x5479, 0x85EA},{0x547A, 0x85EB},{0x547B, 0xC9EB},{0x547C, 0xBAF4},
- {0x547D, 0xC3FC},{0x547E, 0x85EC},{0x547F, 0x85ED},{0x5480, 0xBED7},{0x5481, 0x85EE},{0x5482, 0xDFC6},{0x5483, 0x85EF},{0x5484, 0xDFCD},
- {0x5485, 0x85F0},{0x5486, 0xC5D8},{0x5487, 0x85F1},{0x5488, 0x85F2},{0x5489, 0x85F3},{0x548A, 0x85F4},{0x548B, 0xD5A6},{0x548C, 0xBACD},
- {0x548D, 0x85F5},{0x548E, 0xBECC},{0x548F, 0xD3BD},{0x5490, 0xB8C0},{0x5491, 0x85F6},{0x5492, 0xD6E4},{0x5493, 0x85F7},{0x5494, 0xDFC7},
- {0x5495, 0xB9BE},{0x5496, 0xBFA7},{0x5497, 0x85F8},{0x5498, 0x85F9},{0x5499, 0xC1FC},{0x549A, 0xDFCB},{0x549B, 0xDFCC},{0x549C, 0x85FA},
- {0x549D, 0xDFD0},{0x549E, 0x85FB},{0x549F, 0x85FC},{0x54A0, 0x85FD},{0x54A1, 0x85FE},{0x54A2, 0x8640},{0x54A3, 0xDFDB},{0x54A4, 0xDFE5},
- {0x54A5, 0x8641},{0x54A6, 0xDFD7},{0x54A7, 0xDFD6},{0x54A8, 0xD7C9},{0x54A9, 0xDFE3},{0x54AA, 0xDFE4},{0x54AB, 0xE5EB},{0x54AC, 0xD2A7},
- {0x54AD, 0xDFD2},{0x54AE, 0x8642},{0x54AF, 0xBFA9},{0x54B0, 0x8643},{0x54B1, 0xD4DB},{0x54B2, 0x8644},{0x54B3, 0xBFC8},{0x54B4, 0xDFD4},
- {0x54B5, 0x8645},{0x54B6, 0x8646},{0x54B7, 0x8647},{0x54B8, 0xCFCC},{0x54B9, 0x8648},{0x54BA, 0x8649},{0x54BB, 0xDFDD},{0x54BC, 0x864A},
- {0x54BD, 0xD1CA},{0x54BE, 0x864B},{0x54BF, 0xDFDE},{0x54C0, 0xB0A7},{0x54C1, 0xC6B7},{0x54C2, 0xDFD3},{0x54C3, 0x864C},{0x54C4, 0xBAE5},
- {0x54C5, 0x864D},{0x54C6, 0xB6DF},{0x54C7, 0xCDDB},{0x54C8, 0xB9FE},{0x54C9, 0xD4D5},{0x54CA, 0x864E},{0x54CB, 0x864F},{0x54CC, 0xDFDF},
- {0x54CD, 0xCFEC},{0x54CE, 0xB0A5},{0x54CF, 0xDFE7},{0x54D0, 0xDFD1},{0x54D1, 0xD1C6},{0x54D2, 0xDFD5},{0x54D3, 0xDFD8},{0x54D4, 0xDFD9},
- {0x54D5, 0xDFDC},{0x54D6, 0x8650},{0x54D7, 0xBBA9},{0x54D8, 0x8651},{0x54D9, 0xDFE0},{0x54DA, 0xDFE1},{0x54DB, 0x8652},{0x54DC, 0xDFE2},
- {0x54DD, 0xDFE6},{0x54DE, 0xDFE8},{0x54DF, 0xD3B4},{0x54E0, 0x8653},{0x54E1, 0x8654},{0x54E2, 0x8655},{0x54E3, 0x8656},{0x54E4, 0x8657},
- {0x54E5, 0xB8E7},{0x54E6, 0xC5B6},{0x54E7, 0xDFEA},{0x54E8, 0xC9DA},{0x54E9, 0xC1A8},{0x54EA, 0xC4C4},{0x54EB, 0x8658},{0x54EC, 0x8659},
- {0x54ED, 0xBFDE},{0x54EE, 0xCFF8},{0x54EF, 0x865A},{0x54F0, 0x865B},{0x54F1, 0x865C},{0x54F2, 0xD5DC},{0x54F3, 0xDFEE},{0x54F4, 0x865D},
- {0x54F5, 0x865E},{0x54F6, 0x865F},{0x54F7, 0x8660},{0x54F8, 0x8661},{0x54F9, 0x8662},{0x54FA, 0xB2B8},{0x54FB, 0x8663},{0x54FC, 0xBADF},
- {0x54FD, 0xDFEC},{0x54FE, 0x8664},{0x54FF, 0xDBC1},{0x5500, 0x8665},{0x5501, 0xD1E4},{0x5502, 0x8666},{0x5503, 0x8667},{0x5504, 0x8668},
- {0x5505, 0x8669},{0x5506, 0xCBF4},{0x5507, 0xB4BD},{0x5508, 0x866A},{0x5509, 0xB0A6},{0x550A, 0x866B},{0x550B, 0x866C},{0x550C, 0x866D},
- {0x550D, 0x866E},{0x550E, 0x866F},{0x550F, 0xDFF1},{0x5510, 0xCCC6},{0x5511, 0xDFF2},{0x5512, 0x8670},{0x5513, 0x8671},{0x5514, 0xDFED},
- {0x5515, 0x8672},{0x5516, 0x8673},{0x5517, 0x8674},{0x5518, 0x8675},{0x5519, 0x8676},{0x551A, 0x8677},{0x551B, 0xDFE9},{0x551C, 0x8678},
- {0x551D, 0x8679},{0x551E, 0x867A},{0x551F, 0x867B},{0x5520, 0xDFEB},{0x5521, 0x867C},{0x5522, 0xDFEF},{0x5523, 0xDFF0},{0x5524, 0xBBBD},
- {0x5525, 0x867D},{0x5526, 0x867E},{0x5527, 0xDFF3},{0x5528, 0x8680},{0x5529, 0x8681},{0x552A, 0xDFF4},{0x552B, 0x8682},{0x552C, 0xBBA3},
- {0x552D, 0x8683},{0x552E, 0xCADB},{0x552F, 0xCEA8},{0x5530, 0xE0A7},{0x5531, 0xB3AA},{0x5532, 0x8684},{0x5533, 0xE0A6},{0x5534, 0x8685},
- {0x5535, 0x8686},{0x5536, 0x8687},{0x5537, 0xE0A1},{0x5538, 0x8688},{0x5539, 0x8689},{0x553A, 0x868A},{0x553B, 0x868B},{0x553C, 0xDFFE},
- {0x553D, 0x868C},{0x553E, 0xCDD9},{0x553F, 0xDFFC},{0x5540, 0x868D},{0x5541, 0xDFFA},{0x5542, 0x868E},{0x5543, 0xBFD0},{0x5544, 0xD7C4},
- {0x5545, 0x868F},{0x5546, 0xC9CC},{0x5547, 0x8690},{0x5548, 0x8691},{0x5549, 0xDFF8},{0x554A, 0xB0A1},{0x554B, 0x8692},{0x554C, 0x8693},
- {0x554D, 0x8694},{0x554E, 0x8695},{0x554F, 0x8696},{0x5550, 0xDFFD},{0x5551, 0x8697},{0x5552, 0x8698},{0x5553, 0x8699},{0x5554, 0x869A},
- {0x5555, 0xDFFB},{0x5556, 0xE0A2},{0x5557, 0x869B},{0x5558, 0x869C},{0x5559, 0x869D},{0x555A, 0x869E},{0x555B, 0x869F},{0x555C, 0xE0A8},
- {0x555D, 0x86A0},{0x555E, 0x86A1},{0x555F, 0x86A2},{0x5560, 0x86A3},{0x5561, 0xB7C8},{0x5562, 0x86A4},{0x5563, 0x86A5},{0x5564, 0xC6A1},
- {0x5565, 0xC9B6},{0x5566, 0xC0B2},{0x5567, 0xDFF5},{0x5568, 0x86A6},{0x5569, 0x86A7},{0x556A, 0xC5BE},{0x556B, 0x86A8},{0x556C, 0xD8C4},
- {0x556D, 0xDFF9},{0x556E, 0xC4F6},{0x556F, 0x86A9},{0x5570, 0x86AA},{0x5571, 0x86AB},{0x5572, 0x86AC},{0x5573, 0x86AD},{0x5574, 0x86AE},
- {0x5575, 0xE0A3},{0x5576, 0xE0A4},{0x5577, 0xE0A5},{0x5578, 0xD0A5},{0x5579, 0x86AF},{0x557A, 0x86B0},{0x557B, 0xE0B4},{0x557C, 0xCCE4},
- {0x557D, 0x86B1},{0x557E, 0xE0B1},{0x557F, 0x86B2},{0x5580, 0xBFA6},{0x5581, 0xE0AF},{0x5582, 0xCEB9},{0x5583, 0xE0AB},{0x5584, 0xC9C6},
- {0x5585, 0x86B3},{0x5586, 0x86B4},{0x5587, 0xC0AE},{0x5588, 0xE0AE},{0x5589, 0xBAED},{0x558A, 0xBAB0},{0x558B, 0xE0A9},{0x558C, 0x86B5},
- {0x558D, 0x86B6},{0x558E, 0x86B7},{0x558F, 0xDFF6},{0x5590, 0x86B8},{0x5591, 0xE0B3},{0x5592, 0x86B9},{0x5593, 0x86BA},{0x5594, 0xE0B8},
- {0x5595, 0x86BB},{0x5596, 0x86BC},{0x5597, 0x86BD},{0x5598, 0xB4AD},{0x5599, 0xE0B9},{0x559A, 0x86BE},{0x559B, 0x86BF},{0x559C, 0xCFB2},
- {0x559D, 0xBAC8},{0x559E, 0x86C0},{0x559F, 0xE0B0},{0x55A0, 0x86C1},{0x55A1, 0x86C2},{0x55A2, 0x86C3},{0x55A3, 0x86C4},{0x55A4, 0x86C5},
- {0x55A5, 0x86C6},{0x55A6, 0x86C7},{0x55A7, 0xD0FA},{0x55A8, 0x86C8},{0x55A9, 0x86C9},{0x55AA, 0x86CA},{0x55AB, 0x86CB},{0x55AC, 0x86CC},
- {0x55AD, 0x86CD},{0x55AE, 0x86CE},{0x55AF, 0x86CF},{0x55B0, 0x86D0},{0x55B1, 0xE0AC},{0x55B2, 0x86D1},{0x55B3, 0xD4FB},{0x55B4, 0x86D2},
- {0x55B5, 0xDFF7},{0x55B6, 0x86D3},{0x55B7, 0xC5E7},{0x55B8, 0x86D4},{0x55B9, 0xE0AD},{0x55BA, 0x86D5},{0x55BB, 0xD3F7},{0x55BC, 0x86D6},
- {0x55BD, 0xE0B6},{0x55BE, 0xE0B7},{0x55BF, 0x86D7},{0x55C0, 0x86D8},{0x55C1, 0x86D9},{0x55C2, 0x86DA},{0x55C3, 0x86DB},{0x55C4, 0xE0C4},
- {0x55C5, 0xD0E1},{0x55C6, 0x86DC},{0x55C7, 0x86DD},{0x55C8, 0x86DE},{0x55C9, 0xE0BC},{0x55CA, 0x86DF},{0x55CB, 0x86E0},{0x55CC, 0xE0C9},
- {0x55CD, 0xE0CA},{0x55CE, 0x86E1},{0x55CF, 0x86E2},{0x55D0, 0x86E3},{0x55D1, 0xE0BE},{0x55D2, 0xE0AA},{0x55D3, 0xC9A4},{0x55D4, 0xE0C1},
- {0x55D5, 0x86E4},{0x55D6, 0xE0B2},{0x55D7, 0x86E5},{0x55D8, 0x86E6},{0x55D9, 0x86E7},{0x55DA, 0x86E8},{0x55DB, 0x86E9},{0x55DC, 0xCAC8},
- {0x55DD, 0xE0C3},{0x55DE, 0x86EA},{0x55DF, 0xE0B5},{0x55E0, 0x86EB},{0x55E1, 0xCECB},{0x55E2, 0x86EC},{0x55E3, 0xCBC3},{0x55E4, 0xE0CD},
- {0x55E5, 0xE0C6},{0x55E6, 0xE0C2},{0x55E7, 0x86ED},{0x55E8, 0xE0CB},{0x55E9, 0x86EE},{0x55EA, 0xE0BA},{0x55EB, 0xE0BF},{0x55EC, 0xE0C0},
- {0x55ED, 0x86EF},{0x55EE, 0x86F0},{0x55EF, 0xE0C5},{0x55F0, 0x86F1},{0x55F1, 0x86F2},{0x55F2, 0xE0C7},{0x55F3, 0xE0C8},{0x55F4, 0x86F3},
- {0x55F5, 0xE0CC},{0x55F6, 0x86F4},{0x55F7, 0xE0BB},{0x55F8, 0x86F5},{0x55F9, 0x86F6},{0x55FA, 0x86F7},{0x55FB, 0x86F8},{0x55FC, 0x86F9},
- {0x55FD, 0xCBD4},{0x55FE, 0xE0D5},{0x55FF, 0x86FA},{0x5600, 0xE0D6},{0x5601, 0xE0D2},{0x5602, 0x86FB},{0x5603, 0x86FC},{0x5604, 0x86FD},
- {0x5605, 0x86FE},{0x5606, 0x8740},{0x5607, 0x8741},{0x5608, 0xE0D0},{0x5609, 0xBCCE},{0x560A, 0x8742},{0x560B, 0x8743},{0x560C, 0xE0D1},
- {0x560D, 0x8744},{0x560E, 0xB8C2},{0x560F, 0xD8C5},{0x5610, 0x8745},{0x5611, 0x8746},{0x5612, 0x8747},{0x5613, 0x8748},{0x5614, 0x8749},
- {0x5615, 0x874A},{0x5616, 0x874B},{0x5617, 0x874C},{0x5618, 0xD0EA},{0x5619, 0x874D},{0x561A, 0x874E},{0x561B, 0xC2EF},{0x561C, 0x874F},
- {0x561D, 0x8750},{0x561E, 0xE0CF},{0x561F, 0xE0BD},{0x5620, 0x8751},{0x5621, 0x8752},{0x5622, 0x8753},{0x5623, 0xE0D4},{0x5624, 0xE0D3},
- {0x5625, 0x8754},{0x5626, 0x8755},{0x5627, 0xE0D7},{0x5628, 0x8756},{0x5629, 0x8757},{0x562A, 0x8758},{0x562B, 0x8759},{0x562C, 0xE0DC},
- {0x562D, 0xE0D8},{0x562E, 0x875A},{0x562F, 0x875B},{0x5630, 0x875C},{0x5631, 0xD6F6},{0x5632, 0xB3B0},{0x5633, 0x875D},{0x5634, 0xD7EC},
- {0x5635, 0x875E},{0x5636, 0xCBBB},{0x5637, 0x875F},{0x5638, 0x8760},{0x5639, 0xE0DA},{0x563A, 0x8761},{0x563B, 0xCEFB},{0x563C, 0x8762},
- {0x563D, 0x8763},{0x563E, 0x8764},{0x563F, 0xBAD9},{0x5640, 0x8765},{0x5641, 0x8766},{0x5642, 0x8767},{0x5643, 0x8768},{0x5644, 0x8769},
- {0x5645, 0x876A},{0x5646, 0x876B},{0x5647, 0x876C},{0x5648, 0x876D},{0x5649, 0x876E},{0x564A, 0x876F},{0x564B, 0x8770},{0x564C, 0xE0E1},
- {0x564D, 0xE0DD},{0x564E, 0xD2AD},{0x564F, 0x8771},{0x5650, 0x8772},{0x5651, 0x8773},{0x5652, 0x8774},{0x5653, 0x8775},{0x5654, 0xE0E2},
- {0x5655, 0x8776},{0x5656, 0x8777},{0x5657, 0xE0DB},{0x5658, 0xE0D9},{0x5659, 0xE0DF},{0x565A, 0x8778},{0x565B, 0x8779},{0x565C, 0xE0E0},
- {0x565D, 0x877A},{0x565E, 0x877B},{0x565F, 0x877C},{0x5660, 0x877D},{0x5661, 0x877E},{0x5662, 0xE0DE},{0x5663, 0x8780},{0x5664, 0xE0E4},
- {0x5665, 0x8781},{0x5666, 0x8782},{0x5667, 0x8783},{0x5668, 0xC6F7},{0x5669, 0xD8AC},{0x566A, 0xD4EB},{0x566B, 0xE0E6},{0x566C, 0xCAC9},
- {0x566D, 0x8784},{0x566E, 0x8785},{0x566F, 0x8786},{0x5670, 0x8787},{0x5671, 0xE0E5},{0x5672, 0x8788},{0x5673, 0x8789},{0x5674, 0x878A},
- {0x5675, 0x878B},{0x5676, 0xB8C1},{0x5677, 0x878C},{0x5678, 0x878D},{0x5679, 0x878E},{0x567A, 0x878F},{0x567B, 0xE0E7},{0x567C, 0xE0E8},
- {0x567D, 0x8790},{0x567E, 0x8791},{0x567F, 0x8792},{0x5680, 0x8793},{0x5681, 0x8794},{0x5682, 0x8795},{0x5683, 0x8796},{0x5684, 0x8797},
- {0x5685, 0xE0E9},{0x5686, 0xE0E3},{0x5687, 0x8798},{0x5688, 0x8799},{0x5689, 0x879A},{0x568A, 0x879B},{0x568B, 0x879C},{0x568C, 0x879D},
- {0x568D, 0x879E},{0x568E, 0xBABF},{0x568F, 0xCCE7},{0x5690, 0x879F},{0x5691, 0x87A0},{0x5692, 0x87A1},{0x5693, 0xE0EA},{0x5694, 0x87A2},
- {0x5695, 0x87A3},{0x5696, 0x87A4},{0x5697, 0x87A5},{0x5698, 0x87A6},{0x5699, 0x87A7},{0x569A, 0x87A8},{0x569B, 0x87A9},{0x569C, 0x87AA},
- {0x569D, 0x87AB},{0x569E, 0x87AC},{0x569F, 0x87AD},{0x56A0, 0x87AE},{0x56A1, 0x87AF},{0x56A2, 0x87B0},{0x56A3, 0xCFF9},{0x56A4, 0x87B1},
- {0x56A5, 0x87B2},{0x56A6, 0x87B3},{0x56A7, 0x87B4},{0x56A8, 0x87B5},{0x56A9, 0x87B6},{0x56AA, 0x87B7},{0x56AB, 0x87B8},{0x56AC, 0x87B9},
- {0x56AD, 0x87BA},{0x56AE, 0x87BB},{0x56AF, 0xE0EB},{0x56B0, 0x87BC},{0x56B1, 0x87BD},{0x56B2, 0x87BE},{0x56B3, 0x87BF},{0x56B4, 0x87C0},
- {0x56B5, 0x87C1},{0x56B6, 0x87C2},{0x56B7, 0xC8C2},{0x56B8, 0x87C3},{0x56B9, 0x87C4},{0x56BA, 0x87C5},{0x56BB, 0x87C6},{0x56BC, 0xBDC0},
- {0x56BD, 0x87C7},{0x56BE, 0x87C8},{0x56BF, 0x87C9},{0x56C0, 0x87CA},{0x56C1, 0x87CB},{0x56C2, 0x87CC},{0x56C3, 0x87CD},{0x56C4, 0x87CE},
- {0x56C5, 0x87CF},{0x56C6, 0x87D0},{0x56C7, 0x87D1},{0x56C8, 0x87D2},{0x56C9, 0x87D3},{0x56CA, 0xC4D2},{0x56CB, 0x87D4},{0x56CC, 0x87D5},
- {0x56CD, 0x87D6},{0x56CE, 0x87D7},{0x56CF, 0x87D8},{0x56D0, 0x87D9},{0x56D1, 0x87DA},{0x56D2, 0x87DB},{0x56D3, 0x87DC},{0x56D4, 0xE0EC},
- {0x56D5, 0x87DD},{0x56D6, 0x87DE},{0x56D7, 0xE0ED},{0x56D8, 0x87DF},{0x56D9, 0x87E0},{0x56DA, 0xC7F4},{0x56DB, 0xCBC4},{0x56DC, 0x87E1},
- {0x56DD, 0xE0EE},{0x56DE, 0xBBD8},{0x56DF, 0xD8B6},{0x56E0, 0xD2F2},{0x56E1, 0xE0EF},{0x56E2, 0xCDC5},{0x56E3, 0x87E2},{0x56E4, 0xB6DA},
- {0x56E5, 0x87E3},{0x56E6, 0x87E4},{0x56E7, 0x87E5},{0x56E8, 0x87E6},{0x56E9, 0x87E7},{0x56EA, 0x87E8},{0x56EB, 0xE0F1},{0x56EC, 0x87E9},
- {0x56ED, 0xD4B0},{0x56EE, 0x87EA},{0x56EF, 0x87EB},{0x56F0, 0xC0A7},{0x56F1, 0xB4D1},{0x56F2, 0x87EC},{0x56F3, 0x87ED},{0x56F4, 0xCEA7},
- {0x56F5, 0xE0F0},{0x56F6, 0x87EE},{0x56F7, 0x87EF},{0x56F8, 0x87F0},{0x56F9, 0xE0F2},{0x56FA, 0xB9CC},{0x56FB, 0x87F1},{0x56FC, 0x87F2},
- {0x56FD, 0xB9FA},{0x56FE, 0xCDBC},{0x56FF, 0xE0F3},{0x5700, 0x87F3},{0x5701, 0x87F4},{0x5702, 0x87F5},{0x5703, 0xC6D4},{0x5704, 0xE0F4},
- {0x5705, 0x87F6},{0x5706, 0xD4B2},{0x5707, 0x87F7},{0x5708, 0xC8A6},{0x5709, 0xE0F6},{0x570A, 0xE0F5},{0x570B, 0x87F8},{0x570C, 0x87F9},
- {0x570D, 0x87FA},{0x570E, 0x87FB},{0x570F, 0x87FC},{0x5710, 0x87FD},{0x5711, 0x87FE},{0x5712, 0x8840},{0x5713, 0x8841},{0x5714, 0x8842},
- {0x5715, 0x8843},{0x5716, 0x8844},{0x5717, 0x8845},{0x5718, 0x8846},{0x5719, 0x8847},{0x571A, 0x8848},{0x571B, 0x8849},{0x571C, 0xE0F7},
- {0x571D, 0x884A},{0x571E, 0x884B},{0x571F, 0xCDC1},{0x5720, 0x884C},{0x5721, 0x884D},{0x5722, 0x884E},{0x5723, 0xCAA5},{0x5724, 0x884F},
- {0x5725, 0x8850},{0x5726, 0x8851},{0x5727, 0x8852},{0x5728, 0xD4DA},{0x5729, 0xDBD7},{0x572A, 0xDBD9},{0x572B, 0x8853},{0x572C, 0xDBD8},
- {0x572D, 0xB9E7},{0x572E, 0xDBDC},{0x572F, 0xDBDD},{0x5730, 0xB5D8},{0x5731, 0x8854},{0x5732, 0x8855},{0x5733, 0xDBDA},{0x5734, 0x8856},
- {0x5735, 0x8857},{0x5736, 0x8858},{0x5737, 0x8859},{0x5738, 0x885A},{0x5739, 0xDBDB},{0x573A, 0xB3A1},{0x573B, 0xDBDF},{0x573C, 0x885B},
- {0x573D, 0x885C},{0x573E, 0xBBF8},{0x573F, 0x885D},{0x5740, 0xD6B7},{0x5741, 0x885E},{0x5742, 0xDBE0},{0x5743, 0x885F},{0x5744, 0x8860},
- {0x5745, 0x8861},{0x5746, 0x8862},{0x5747, 0xBEF9},{0x5748, 0x8863},{0x5749, 0x8864},{0x574A, 0xB7BB},{0x574B, 0x8865},{0x574C, 0xDBD0},
- {0x574D, 0xCCAE},{0x574E, 0xBFB2},{0x574F, 0xBBB5},{0x5750, 0xD7F8},{0x5751, 0xBFD3},{0x5752, 0x8866},{0x5753, 0x8867},{0x5754, 0x8868},
- {0x5755, 0x8869},{0x5756, 0x886A},{0x5757, 0xBFE9},{0x5758, 0x886B},{0x5759, 0x886C},{0x575A, 0xBCE1},{0x575B, 0xCCB3},{0x575C, 0xDBDE},
- {0x575D, 0xB0D3},{0x575E, 0xCEEB},{0x575F, 0xB7D8},{0x5760, 0xD7B9},{0x5761, 0xC6C2},{0x5762, 0x886D},{0x5763, 0x886E},{0x5764, 0xC0A4},
- {0x5765, 0x886F},{0x5766, 0xCCB9},{0x5767, 0x8870},{0x5768, 0xDBE7},{0x5769, 0xDBE1},{0x576A, 0xC6BA},{0x576B, 0xDBE3},{0x576C, 0x8871},
- {0x576D, 0xDBE8},{0x576E, 0x8872},{0x576F, 0xC5F7},{0x5770, 0x8873},{0x5771, 0x8874},{0x5772, 0x8875},{0x5773, 0xDBEA},{0x5774, 0x8876},
- {0x5775, 0x8877},{0x5776, 0xDBE9},{0x5777, 0xBFC0},{0x5778, 0x8878},{0x5779, 0x8879},{0x577A, 0x887A},{0x577B, 0xDBE6},{0x577C, 0xDBE5},
- {0x577D, 0x887B},{0x577E, 0x887C},{0x577F, 0x887D},{0x5780, 0x887E},{0x5781, 0x8880},{0x5782, 0xB4B9},{0x5783, 0xC0AC},{0x5784, 0xC2A2},
- {0x5785, 0xDBE2},{0x5786, 0xDBE4},{0x5787, 0x8881},{0x5788, 0x8882},{0x5789, 0x8883},{0x578A, 0x8884},{0x578B, 0xD0CD},{0x578C, 0xDBED},
- {0x578D, 0x8885},{0x578E, 0x8886},{0x578F, 0x8887},{0x5790, 0x8888},{0x5791, 0x8889},{0x5792, 0xC0DD},{0x5793, 0xDBF2},{0x5794, 0x888A},
- {0x5795, 0x888B},{0x5796, 0x888C},{0x5797, 0x888D},{0x5798, 0x888E},{0x5799, 0x888F},{0x579A, 0x8890},{0x579B, 0xB6E2},{0x579C, 0x8891},
- {0x579D, 0x8892},{0x579E, 0x8893},{0x579F, 0x8894},{0x57A0, 0xDBF3},{0x57A1, 0xDBD2},{0x57A2, 0xB9B8},{0x57A3, 0xD4AB},{0x57A4, 0xDBEC},
- {0x57A5, 0x8895},{0x57A6, 0xBFD1},{0x57A7, 0xDBF0},{0x57A8, 0x8896},{0x57A9, 0xDBD1},{0x57AA, 0x8897},{0x57AB, 0xB5E6},{0x57AC, 0x8898},
- {0x57AD, 0xDBEB},{0x57AE, 0xBFE5},{0x57AF, 0x8899},{0x57B0, 0x889A},{0x57B1, 0x889B},{0x57B2, 0xDBEE},{0x57B3, 0x889C},{0x57B4, 0xDBF1},
- {0x57B5, 0x889D},{0x57B6, 0x889E},{0x57B7, 0x889F},{0x57B8, 0xDBF9},{0x57B9, 0x88A0},{0x57BA, 0x88A1},{0x57BB, 0x88A2},{0x57BC, 0x88A3},
- {0x57BD, 0x88A4},{0x57BE, 0x88A5},{0x57BF, 0x88A6},{0x57C0, 0x88A7},{0x57C1, 0x88A8},{0x57C2, 0xB9A1},{0x57C3, 0xB0A3},{0x57C4, 0x88A9},
- {0x57C5, 0x88AA},{0x57C6, 0x88AB},{0x57C7, 0x88AC},{0x57C8, 0x88AD},{0x57C9, 0x88AE},{0x57CA, 0x88AF},{0x57CB, 0xC2F1},{0x57CC, 0x88B0},
- {0x57CD, 0x88B1},{0x57CE, 0xB3C7},{0x57CF, 0xDBEF},{0x57D0, 0x88B2},{0x57D1, 0x88B3},{0x57D2, 0xDBF8},{0x57D3, 0x88B4},{0x57D4, 0xC6D2},
- {0x57D5, 0xDBF4},{0x57D6, 0x88B5},{0x57D7, 0x88B6},{0x57D8, 0xDBF5},{0x57D9, 0xDBF7},{0x57DA, 0xDBF6},{0x57DB, 0x88B7},{0x57DC, 0x88B8},
- {0x57DD, 0xDBFE},{0x57DE, 0x88B9},{0x57DF, 0xD3F2},{0x57E0, 0xB2BA},{0x57E1, 0x88BA},{0x57E2, 0x88BB},{0x57E3, 0x88BC},{0x57E4, 0xDBFD},
- {0x57E5, 0x88BD},{0x57E6, 0x88BE},{0x57E7, 0x88BF},{0x57E8, 0x88C0},{0x57E9, 0x88C1},{0x57EA, 0x88C2},{0x57EB, 0x88C3},{0x57EC, 0x88C4},
- {0x57ED, 0xDCA4},{0x57EE, 0x88C5},{0x57EF, 0xDBFB},{0x57F0, 0x88C6},{0x57F1, 0x88C7},{0x57F2, 0x88C8},{0x57F3, 0x88C9},{0x57F4, 0xDBFA},
- {0x57F5, 0x88CA},{0x57F6, 0x88CB},{0x57F7, 0x88CC},{0x57F8, 0xDBFC},{0x57F9, 0xC5E0},{0x57FA, 0xBBF9},{0x57FB, 0x88CD},{0x57FC, 0x88CE},
- {0x57FD, 0xDCA3},{0x57FE, 0x88CF},{0x57FF, 0x88D0},{0x5800, 0xDCA5},{0x5801, 0x88D1},{0x5802, 0xCCC3},{0x5803, 0x88D2},{0x5804, 0x88D3},
- {0x5805, 0x88D4},{0x5806, 0xB6D1},{0x5807, 0xDDC0},{0x5808, 0x88D5},{0x5809, 0x88D6},{0x580A, 0x88D7},{0x580B, 0xDCA1},{0x580C, 0x88D8},
- {0x580D, 0xDCA2},{0x580E, 0x88D9},{0x580F, 0x88DA},{0x5810, 0x88DB},{0x5811, 0xC7B5},{0x5812, 0x88DC},{0x5813, 0x88DD},{0x5814, 0x88DE},
- {0x5815, 0xB6E9},{0x5816, 0x88DF},{0x5817, 0x88E0},{0x5818, 0x88E1},{0x5819, 0xDCA7},{0x581A, 0x88E2},{0x581B, 0x88E3},{0x581C, 0x88E4},
- {0x581D, 0x88E5},{0x581E, 0xDCA6},{0x581F, 0x88E6},{0x5820, 0xDCA9},{0x5821, 0xB1A4},{0x5822, 0x88E7},{0x5823, 0x88E8},{0x5824, 0xB5CC},
- {0x5825, 0x88E9},{0x5826, 0x88EA},{0x5827, 0x88EB},{0x5828, 0x88EC},{0x5829, 0x88ED},{0x582A, 0xBFB0},{0x582B, 0x88EE},{0x582C, 0x88EF},
- {0x582D, 0x88F0},{0x582E, 0x88F1},{0x582F, 0x88F2},{0x5830, 0xD1DF},{0x5831, 0x88F3},{0x5832, 0x88F4},{0x5833, 0x88F5},{0x5834, 0x88F6},
- {0x5835, 0xB6C2},{0x5836, 0x88F7},{0x5837, 0x88F8},{0x5838, 0x88F9},{0x5839, 0x88FA},{0x583A, 0x88FB},{0x583B, 0x88FC},{0x583C, 0x88FD},
- {0x583D, 0x88FE},{0x583E, 0x8940},{0x583F, 0x8941},{0x5840, 0x8942},{0x5841, 0x8943},{0x5842, 0x8944},{0x5843, 0x8945},{0x5844, 0xDCA8},
- {0x5845, 0x8946},{0x5846, 0x8947},{0x5847, 0x8948},{0x5848, 0x8949},{0x5849, 0x894A},{0x584A, 0x894B},{0x584B, 0x894C},{0x584C, 0xCBFA},
- {0x584D, 0xEBF3},{0x584E, 0x894D},{0x584F, 0x894E},{0x5850, 0x894F},{0x5851, 0xCBDC},{0x5852, 0x8950},{0x5853, 0x8951},{0x5854, 0xCBFE},
- {0x5855, 0x8952},{0x5856, 0x8953},{0x5857, 0x8954},{0x5858, 0xCCC1},{0x5859, 0x8955},{0x585A, 0x8956},{0x585B, 0x8957},{0x585C, 0x8958},
- {0x585D, 0x8959},{0x585E, 0xC8FB},{0x585F, 0x895A},{0x5860, 0x895B},{0x5861, 0x895C},{0x5862, 0x895D},{0x5863, 0x895E},{0x5864, 0x895F},
- {0x5865, 0xDCAA},{0x5866, 0x8960},{0x5867, 0x8961},{0x5868, 0x8962},{0x5869, 0x8963},{0x586A, 0x8964},{0x586B, 0xCCEE},{0x586C, 0xDCAB},
- {0x586D, 0x8965},{0x586E, 0x8966},{0x586F, 0x8967},{0x5870, 0x8968},{0x5871, 0x8969},{0x5872, 0x896A},{0x5873, 0x896B},{0x5874, 0x896C},
- {0x5875, 0x896D},{0x5876, 0x896E},{0x5877, 0x896F},{0x5878, 0x8970},{0x5879, 0x8971},{0x587A, 0x8972},{0x587B, 0x8973},{0x587C, 0x8974},
- {0x587D, 0x8975},{0x587E, 0xDBD3},{0x587F, 0x8976},{0x5880, 0xDCAF},{0x5881, 0xDCAC},{0x5882, 0x8977},{0x5883, 0xBEB3},{0x5884, 0x8978},
- {0x5885, 0xCAFB},{0x5886, 0x8979},{0x5887, 0x897A},{0x5888, 0x897B},{0x5889, 0xDCAD},{0x588A, 0x897C},{0x588B, 0x897D},{0x588C, 0x897E},
- {0x588D, 0x8980},{0x588E, 0x8981},{0x588F, 0x8982},{0x5890, 0x8983},{0x5891, 0x8984},{0x5892, 0xC9CA},{0x5893, 0xC4B9},{0x5894, 0x8985},
- {0x5895, 0x8986},{0x5896, 0x8987},{0x5897, 0x8988},{0x5898, 0x8989},{0x5899, 0xC7BD},{0x589A, 0xDCAE},{0x589B, 0x898A},{0x589C, 0x898B},
- {0x589D, 0x898C},{0x589E, 0xD4F6},{0x589F, 0xD0E6},{0x58A0, 0x898D},{0x58A1, 0x898E},{0x58A2, 0x898F},{0x58A3, 0x8990},{0x58A4, 0x8991},
- {0x58A5, 0x8992},{0x58A6, 0x8993},{0x58A7, 0x8994},{0x58A8, 0xC4AB},{0x58A9, 0xB6D5},{0x58AA, 0x8995},{0x58AB, 0x8996},{0x58AC, 0x8997},
- {0x58AD, 0x8998},{0x58AE, 0x8999},{0x58AF, 0x899A},{0x58B0, 0x899B},{0x58B1, 0x899C},{0x58B2, 0x899D},{0x58B3, 0x899E},{0x58B4, 0x899F},
- {0x58B5, 0x89A0},{0x58B6, 0x89A1},{0x58B7, 0x89A2},{0x58B8, 0x89A3},{0x58B9, 0x89A4},{0x58BA, 0x89A5},{0x58BB, 0x89A6},{0x58BC, 0xDBD4},
- {0x58BD, 0x89A7},{0x58BE, 0x89A8},{0x58BF, 0x89A9},{0x58C0, 0x89AA},{0x58C1, 0xB1DA},{0x58C2, 0x89AB},{0x58C3, 0x89AC},{0x58C4, 0x89AD},
- {0x58C5, 0xDBD5},{0x58C6, 0x89AE},{0x58C7, 0x89AF},{0x58C8, 0x89B0},{0x58C9, 0x89B1},{0x58CA, 0x89B2},{0x58CB, 0x89B3},{0x58CC, 0x89B4},
- {0x58CD, 0x89B5},{0x58CE, 0x89B6},{0x58CF, 0x89B7},{0x58D0, 0x89B8},{0x58D1, 0xDBD6},{0x58D2, 0x89B9},{0x58D3, 0x89BA},{0x58D4, 0x89BB},
- {0x58D5, 0xBABE},{0x58D6, 0x89BC},{0x58D7, 0x89BD},{0x58D8, 0x89BE},{0x58D9, 0x89BF},{0x58DA, 0x89C0},{0x58DB, 0x89C1},{0x58DC, 0x89C2},
- {0x58DD, 0x89C3},{0x58DE, 0x89C4},{0x58DF, 0x89C5},{0x58E0, 0x89C6},{0x58E1, 0x89C7},{0x58E2, 0x89C8},{0x58E3, 0x89C9},{0x58E4, 0xC8C0},
- {0x58E5, 0x89CA},{0x58E6, 0x89CB},{0x58E7, 0x89CC},{0x58E8, 0x89CD},{0x58E9, 0x89CE},{0x58EA, 0x89CF},{0x58EB, 0xCABF},{0x58EC, 0xC8C9},
- {0x58ED, 0x89D0},{0x58EE, 0xD7B3},{0x58EF, 0x89D1},{0x58F0, 0xC9F9},{0x58F1, 0x89D2},{0x58F2, 0x89D3},{0x58F3, 0xBFC7},{0x58F4, 0x89D4},
- {0x58F5, 0x89D5},{0x58F6, 0xBAF8},{0x58F7, 0x89D6},{0x58F8, 0x89D7},{0x58F9, 0xD2BC},{0x58FA, 0x89D8},{0x58FB, 0x89D9},{0x58FC, 0x89DA},
- {0x58FD, 0x89DB},{0x58FE, 0x89DC},{0x58FF, 0x89DD},{0x5900, 0x89DE},{0x5901, 0x89DF},{0x5902, 0xE2BA},{0x5903, 0x89E0},{0x5904, 0xB4A6},
- {0x5905, 0x89E1},{0x5906, 0x89E2},{0x5907, 0xB1B8},{0x5908, 0x89E3},{0x5909, 0x89E4},{0x590A, 0x89E5},{0x590B, 0x89E6},{0x590C, 0x89E7},
- {0x590D, 0xB8B4},{0x590E, 0x89E8},{0x590F, 0xCFC4},{0x5910, 0x89E9},{0x5911, 0x89EA},{0x5912, 0x89EB},{0x5913, 0x89EC},{0x5914, 0xD9E7},
- {0x5915, 0xCFA6},{0x5916, 0xCDE2},{0x5917, 0x89ED},{0x5918, 0x89EE},{0x5919, 0xD9ED},{0x591A, 0xB6E0},{0x591B, 0x89EF},{0x591C, 0xD2B9},
- {0x591D, 0x89F0},{0x591E, 0x89F1},{0x591F, 0xB9BB},{0x5920, 0x89F2},{0x5921, 0x89F3},{0x5922, 0x89F4},{0x5923, 0x89F5},{0x5924, 0xE2B9},
- {0x5925, 0xE2B7},{0x5926, 0x89F6},{0x5927, 0xB4F3},{0x5928, 0x89F7},{0x5929, 0xCCEC},{0x592A, 0xCCAB},{0x592B, 0xB7F2},{0x592C, 0x89F8},
- {0x592D, 0xD8B2},{0x592E, 0xD1EB},{0x592F, 0xBABB},{0x5930, 0x89F9},{0x5931, 0xCAA7},{0x5932, 0x89FA},{0x5933, 0x89FB},{0x5934, 0xCDB7},
- {0x5935, 0x89FC},{0x5936, 0x89FD},{0x5937, 0xD2C4},{0x5938, 0xBFE4},{0x5939, 0xBCD0},{0x593A, 0xB6E1},{0x593B, 0x89FE},{0x593C, 0xDEC5},
- {0x593D, 0x8A40},{0x593E, 0x8A41},{0x593F, 0x8A42},{0x5940, 0x8A43},{0x5941, 0xDEC6},{0x5942, 0xDBBC},{0x5943, 0x8A44},{0x5944, 0xD1D9},
- {0x5945, 0x8A45},{0x5946, 0x8A46},{0x5947, 0xC6E6},{0x5948, 0xC4CE},{0x5949, 0xB7EE},{0x594A, 0x8A47},{0x594B, 0xB7DC},{0x594C, 0x8A48},
- {0x594D, 0x8A49},{0x594E, 0xBFFC},{0x594F, 0xD7E0},{0x5950, 0x8A4A},{0x5951, 0xC6F5},{0x5952, 0x8A4B},{0x5953, 0x8A4C},{0x5954, 0xB1BC},
- {0x5955, 0xDEC8},{0x5956, 0xBDB1},{0x5957, 0xCCD7},{0x5958, 0xDECA},{0x5959, 0x8A4D},{0x595A, 0xDEC9},{0x595B, 0x8A4E},{0x595C, 0x8A4F},
- {0x595D, 0x8A50},{0x595E, 0x8A51},{0x595F, 0x8A52},{0x5960, 0xB5EC},{0x5961, 0x8A53},{0x5962, 0xC9DD},{0x5963, 0x8A54},{0x5964, 0x8A55},
- {0x5965, 0xB0C2},{0x5966, 0x8A56},{0x5967, 0x8A57},{0x5968, 0x8A58},{0x5969, 0x8A59},{0x596A, 0x8A5A},{0x596B, 0x8A5B},{0x596C, 0x8A5C},
- {0x596D, 0x8A5D},{0x596E, 0x8A5E},{0x596F, 0x8A5F},{0x5970, 0x8A60},{0x5971, 0x8A61},{0x5972, 0x8A62},{0x5973, 0xC5AE},{0x5974, 0xC5AB},
- {0x5975, 0x8A63},{0x5976, 0xC4CC},{0x5977, 0x8A64},{0x5978, 0xBCE9},{0x5979, 0xCBFD},{0x597A, 0x8A65},{0x597B, 0x8A66},{0x597C, 0x8A67},
- {0x597D, 0xBAC3},{0x597E, 0x8A68},{0x597F, 0x8A69},{0x5980, 0x8A6A},{0x5981, 0xE5F9},{0x5982, 0xC8E7},{0x5983, 0xE5FA},{0x5984, 0xCDFD},
- {0x5985, 0x8A6B},{0x5986, 0xD7B1},{0x5987, 0xB8BE},{0x5988, 0xC2E8},{0x5989, 0x8A6C},{0x598A, 0xC8D1},{0x598B, 0x8A6D},{0x598C, 0x8A6E},
- {0x598D, 0xE5FB},{0x598E, 0x8A6F},{0x598F, 0x8A70},{0x5990, 0x8A71},{0x5991, 0x8A72},{0x5992, 0xB6CA},{0x5993, 0xBCCB},{0x5994, 0x8A73},
- {0x5995, 0x8A74},{0x5996, 0xD1FD},{0x5997, 0xE6A1},{0x5998, 0x8A75},{0x5999, 0xC3EE},{0x599A, 0x8A76},{0x599B, 0x8A77},{0x599C, 0x8A78},
- {0x599D, 0x8A79},{0x599E, 0xE6A4},{0x599F, 0x8A7A},{0x59A0, 0x8A7B},{0x59A1, 0x8A7C},{0x59A2, 0x8A7D},{0x59A3, 0xE5FE},{0x59A4, 0xE6A5},
- {0x59A5, 0xCDD7},{0x59A6, 0x8A7E},{0x59A7, 0x8A80},{0x59A8, 0xB7C1},{0x59A9, 0xE5FC},{0x59AA, 0xE5FD},{0x59AB, 0xE6A3},{0x59AC, 0x8A81},
- {0x59AD, 0x8A82},{0x59AE, 0xC4DD},{0x59AF, 0xE6A8},{0x59B0, 0x8A83},{0x59B1, 0x8A84},{0x59B2, 0xE6A7},{0x59B3, 0x8A85},{0x59B4, 0x8A86},
- {0x59B5, 0x8A87},{0x59B6, 0x8A88},{0x59B7, 0x8A89},{0x59B8, 0x8A8A},{0x59B9, 0xC3C3},{0x59BA, 0x8A8B},{0x59BB, 0xC6DE},{0x59BC, 0x8A8C},
- {0x59BD, 0x8A8D},{0x59BE, 0xE6AA},{0x59BF, 0x8A8E},{0x59C0, 0x8A8F},{0x59C1, 0x8A90},{0x59C2, 0x8A91},{0x59C3, 0x8A92},{0x59C4, 0x8A93},
- {0x59C5, 0x8A94},{0x59C6, 0xC4B7},{0x59C7, 0x8A95},{0x59C8, 0x8A96},{0x59C9, 0x8A97},{0x59CA, 0xE6A2},{0x59CB, 0xCABC},{0x59CC, 0x8A98},
- {0x59CD, 0x8A99},{0x59CE, 0x8A9A},{0x59CF, 0x8A9B},{0x59D0, 0xBDE3},{0x59D1, 0xB9C3},{0x59D2, 0xE6A6},{0x59D3, 0xD0D5},{0x59D4, 0xCEAF},
- {0x59D5, 0x8A9C},{0x59D6, 0x8A9D},{0x59D7, 0xE6A9},{0x59D8, 0xE6B0},{0x59D9, 0x8A9E},{0x59DA, 0xD2A6},{0x59DB, 0x8A9F},{0x59DC, 0xBDAA},
- {0x59DD, 0xE6AD},{0x59DE, 0x8AA0},{0x59DF, 0x8AA1},{0x59E0, 0x8AA2},{0x59E1, 0x8AA3},{0x59E2, 0x8AA4},{0x59E3, 0xE6AF},{0x59E4, 0x8AA5},
- {0x59E5, 0xC0D1},{0x59E6, 0x8AA6},{0x59E7, 0x8AA7},{0x59E8, 0xD2CC},{0x59E9, 0x8AA8},{0x59EA, 0x8AA9},{0x59EB, 0x8AAA},{0x59EC, 0xBCA7},
- {0x59ED, 0x8AAB},{0x59EE, 0x8AAC},{0x59EF, 0x8AAD},{0x59F0, 0x8AAE},{0x59F1, 0x8AAF},{0x59F2, 0x8AB0},{0x59F3, 0x8AB1},{0x59F4, 0x8AB2},
- {0x59F5, 0x8AB3},{0x59F6, 0x8AB4},{0x59F7, 0x8AB5},{0x59F8, 0x8AB6},{0x59F9, 0xE6B1},{0x59FA, 0x8AB7},{0x59FB, 0xD2F6},{0x59FC, 0x8AB8},
- {0x59FD, 0x8AB9},{0x59FE, 0x8ABA},{0x59FF, 0xD7CB},{0x5A00, 0x8ABB},{0x5A01, 0xCDFE},{0x5A02, 0x8ABC},{0x5A03, 0xCDDE},{0x5A04, 0xC2A6},
- {0x5A05, 0xE6AB},{0x5A06, 0xE6AC},{0x5A07, 0xBDBF},{0x5A08, 0xE6AE},{0x5A09, 0xE6B3},{0x5A0A, 0x8ABD},{0x5A0B, 0x8ABE},{0x5A0C, 0xE6B2},
- {0x5A0D, 0x8ABF},{0x5A0E, 0x8AC0},{0x5A0F, 0x8AC1},{0x5A10, 0x8AC2},{0x5A11, 0xE6B6},{0x5A12, 0x8AC3},{0x5A13, 0xE6B8},{0x5A14, 0x8AC4},
- {0x5A15, 0x8AC5},{0x5A16, 0x8AC6},{0x5A17, 0x8AC7},{0x5A18, 0xC4EF},{0x5A19, 0x8AC8},{0x5A1A, 0x8AC9},{0x5A1B, 0x8ACA},{0x5A1C, 0xC4C8},
- {0x5A1D, 0x8ACB},{0x5A1E, 0x8ACC},{0x5A1F, 0xBEEA},{0x5A20, 0xC9EF},{0x5A21, 0x8ACD},{0x5A22, 0x8ACE},{0x5A23, 0xE6B7},{0x5A24, 0x8ACF},
- {0x5A25, 0xB6F0},{0x5A26, 0x8AD0},{0x5A27, 0x8AD1},{0x5A28, 0x8AD2},{0x5A29, 0xC3E4},{0x5A2A, 0x8AD3},{0x5A2B, 0x8AD4},{0x5A2C, 0x8AD5},
- {0x5A2D, 0x8AD6},{0x5A2E, 0x8AD7},{0x5A2F, 0x8AD8},{0x5A30, 0x8AD9},{0x5A31, 0xD3E9},{0x5A32, 0xE6B4},{0x5A33, 0x8ADA},{0x5A34, 0xE6B5},
- {0x5A35, 0x8ADB},{0x5A36, 0xC8A2},{0x5A37, 0x8ADC},{0x5A38, 0x8ADD},{0x5A39, 0x8ADE},{0x5A3A, 0x8ADF},{0x5A3B, 0x8AE0},{0x5A3C, 0xE6BD},
- {0x5A3D, 0x8AE1},{0x5A3E, 0x8AE2},{0x5A3F, 0x8AE3},{0x5A40, 0xE6B9},{0x5A41, 0x8AE4},{0x5A42, 0x8AE5},{0x5A43, 0x8AE6},{0x5A44, 0x8AE7},
- {0x5A45, 0x8AE8},{0x5A46, 0xC6C5},{0x5A47, 0x8AE9},{0x5A48, 0x8AEA},{0x5A49, 0xCDF1},{0x5A4A, 0xE6BB},{0x5A4B, 0x8AEB},{0x5A4C, 0x8AEC},
- {0x5A4D, 0x8AED},{0x5A4E, 0x8AEE},{0x5A4F, 0x8AEF},{0x5A50, 0x8AF0},{0x5A51, 0x8AF1},{0x5A52, 0x8AF2},{0x5A53, 0x8AF3},{0x5A54, 0x8AF4},
- {0x5A55, 0xE6BC},{0x5A56, 0x8AF5},{0x5A57, 0x8AF6},{0x5A58, 0x8AF7},{0x5A59, 0x8AF8},{0x5A5A, 0xBBE9},{0x5A5B, 0x8AF9},{0x5A5C, 0x8AFA},
- {0x5A5D, 0x8AFB},{0x5A5E, 0x8AFC},{0x5A5F, 0x8AFD},{0x5A60, 0x8AFE},{0x5A61, 0x8B40},{0x5A62, 0xE6BE},{0x5A63, 0x8B41},{0x5A64, 0x8B42},
- {0x5A65, 0x8B43},{0x5A66, 0x8B44},{0x5A67, 0xE6BA},{0x5A68, 0x8B45},{0x5A69, 0x8B46},{0x5A6A, 0xC0B7},{0x5A6B, 0x8B47},{0x5A6C, 0x8B48},
- {0x5A6D, 0x8B49},{0x5A6E, 0x8B4A},{0x5A6F, 0x8B4B},{0x5A70, 0x8B4C},{0x5A71, 0x8B4D},{0x5A72, 0x8B4E},{0x5A73, 0x8B4F},{0x5A74, 0xD3A4},
- {0x5A75, 0xE6BF},{0x5A76, 0xC9F4},{0x5A77, 0xE6C3},{0x5A78, 0x8B50},{0x5A79, 0x8B51},{0x5A7A, 0xE6C4},{0x5A7B, 0x8B52},{0x5A7C, 0x8B53},
- {0x5A7D, 0x8B54},{0x5A7E, 0x8B55},{0x5A7F, 0xD0F6},{0x5A80, 0x8B56},{0x5A81, 0x8B57},{0x5A82, 0x8B58},{0x5A83, 0x8B59},{0x5A84, 0x8B5A},
- {0x5A85, 0x8B5B},{0x5A86, 0x8B5C},{0x5A87, 0x8B5D},{0x5A88, 0x8B5E},{0x5A89, 0x8B5F},{0x5A8A, 0x8B60},{0x5A8B, 0x8B61},{0x5A8C, 0x8B62},
- {0x5A8D, 0x8B63},{0x5A8E, 0x8B64},{0x5A8F, 0x8B65},{0x5A90, 0x8B66},{0x5A91, 0x8B67},{0x5A92, 0xC3BD},{0x5A93, 0x8B68},{0x5A94, 0x8B69},
- {0x5A95, 0x8B6A},{0x5A96, 0x8B6B},{0x5A97, 0x8B6C},{0x5A98, 0x8B6D},{0x5A99, 0x8B6E},{0x5A9A, 0xC3C4},{0x5A9B, 0xE6C2},{0x5A9C, 0x8B6F},
- {0x5A9D, 0x8B70},{0x5A9E, 0x8B71},{0x5A9F, 0x8B72},{0x5AA0, 0x8B73},{0x5AA1, 0x8B74},{0x5AA2, 0x8B75},{0x5AA3, 0x8B76},{0x5AA4, 0x8B77},
- {0x5AA5, 0x8B78},{0x5AA6, 0x8B79},{0x5AA7, 0x8B7A},{0x5AA8, 0x8B7B},{0x5AA9, 0x8B7C},{0x5AAA, 0xE6C1},{0x5AAB, 0x8B7D},{0x5AAC, 0x8B7E},
- {0x5AAD, 0x8B80},{0x5AAE, 0x8B81},{0x5AAF, 0x8B82},{0x5AB0, 0x8B83},{0x5AB1, 0x8B84},{0x5AB2, 0xE6C7},{0x5AB3, 0xCFB1},{0x5AB4, 0x8B85},
- {0x5AB5, 0xEBF4},{0x5AB6, 0x8B86},{0x5AB7, 0x8B87},{0x5AB8, 0xE6CA},{0x5AB9, 0x8B88},{0x5ABA, 0x8B89},{0x5ABB, 0x8B8A},{0x5ABC, 0x8B8B},
- {0x5ABD, 0x8B8C},{0x5ABE, 0xE6C5},{0x5ABF, 0x8B8D},{0x5AC0, 0x8B8E},{0x5AC1, 0xBCDE},{0x5AC2, 0xC9A9},{0x5AC3, 0x8B8F},{0x5AC4, 0x8B90},
- {0x5AC5, 0x8B91},{0x5AC6, 0x8B92},{0x5AC7, 0x8B93},{0x5AC8, 0x8B94},{0x5AC9, 0xBCB5},{0x5ACA, 0x8B95},{0x5ACB, 0x8B96},{0x5ACC, 0xCFD3},
- {0x5ACD, 0x8B97},{0x5ACE, 0x8B98},{0x5ACF, 0x8B99},{0x5AD0, 0x8B9A},{0x5AD1, 0x8B9B},{0x5AD2, 0xE6C8},{0x5AD3, 0x8B9C},{0x5AD4, 0xE6C9},
- {0x5AD5, 0x8B9D},{0x5AD6, 0xE6CE},{0x5AD7, 0x8B9E},{0x5AD8, 0xE6D0},{0x5AD9, 0x8B9F},{0x5ADA, 0x8BA0},{0x5ADB, 0x8BA1},{0x5ADC, 0xE6D1},
- {0x5ADD, 0x8BA2},{0x5ADE, 0x8BA3},{0x5ADF, 0x8BA4},{0x5AE0, 0xE6CB},{0x5AE1, 0xB5D5},{0x5AE2, 0x8BA5},{0x5AE3, 0xE6CC},{0x5AE4, 0x8BA6},
- {0x5AE5, 0x8BA7},{0x5AE6, 0xE6CF},{0x5AE7, 0x8BA8},{0x5AE8, 0x8BA9},{0x5AE9, 0xC4DB},{0x5AEA, 0x8BAA},{0x5AEB, 0xE6C6},{0x5AEC, 0x8BAB},
- {0x5AED, 0x8BAC},{0x5AEE, 0x8BAD},{0x5AEF, 0x8BAE},{0x5AF0, 0x8BAF},{0x5AF1, 0xE6CD},{0x5AF2, 0x8BB0},{0x5AF3, 0x8BB1},{0x5AF4, 0x8BB2},
- {0x5AF5, 0x8BB3},{0x5AF6, 0x8BB4},{0x5AF7, 0x8BB5},{0x5AF8, 0x8BB6},{0x5AF9, 0x8BB7},{0x5AFA, 0x8BB8},{0x5AFB, 0x8BB9},{0x5AFC, 0x8BBA},
- {0x5AFD, 0x8BBB},{0x5AFE, 0x8BBC},{0x5AFF, 0x8BBD},{0x5B00, 0x8BBE},{0x5B01, 0x8BBF},{0x5B02, 0x8BC0},{0x5B03, 0x8BC1},{0x5B04, 0x8BC2},
- {0x5B05, 0x8BC3},{0x5B06, 0x8BC4},{0x5B07, 0x8BC5},{0x5B08, 0x8BC6},{0x5B09, 0xE6D2},{0x5B0A, 0x8BC7},{0x5B0B, 0x8BC8},{0x5B0C, 0x8BC9},
- {0x5B0D, 0x8BCA},{0x5B0E, 0x8BCB},{0x5B0F, 0x8BCC},{0x5B10, 0x8BCD},{0x5B11, 0x8BCE},{0x5B12, 0x8BCF},{0x5B13, 0x8BD0},{0x5B14, 0x8BD1},
- {0x5B15, 0x8BD2},{0x5B16, 0xE6D4},{0x5B17, 0xE6D3},{0x5B18, 0x8BD3},{0x5B19, 0x8BD4},{0x5B1A, 0x8BD5},{0x5B1B, 0x8BD6},{0x5B1C, 0x8BD7},
- {0x5B1D, 0x8BD8},{0x5B1E, 0x8BD9},{0x5B1F, 0x8BDA},{0x5B20, 0x8BDB},{0x5B21, 0x8BDC},{0x5B22, 0x8BDD},{0x5B23, 0x8BDE},{0x5B24, 0x8BDF},
- {0x5B25, 0x8BE0},{0x5B26, 0x8BE1},{0x5B27, 0x8BE2},{0x5B28, 0x8BE3},{0x5B29, 0x8BE4},{0x5B2A, 0x8BE5},{0x5B2B, 0x8BE6},{0x5B2C, 0x8BE7},
- {0x5B2D, 0x8BE8},{0x5B2E, 0x8BE9},{0x5B2F, 0x8BEA},{0x5B30, 0x8BEB},{0x5B31, 0x8BEC},{0x5B32, 0xE6D5},{0x5B33, 0x8BED},{0x5B34, 0xD9F8},
- {0x5B35, 0x8BEE},{0x5B36, 0x8BEF},{0x5B37, 0xE6D6},{0x5B38, 0x8BF0},{0x5B39, 0x8BF1},{0x5B3A, 0x8BF2},{0x5B3B, 0x8BF3},{0x5B3C, 0x8BF4},
- {0x5B3D, 0x8BF5},{0x5B3E, 0x8BF6},{0x5B3F, 0x8BF7},{0x5B40, 0xE6D7},{0x5B41, 0x8BF8},{0x5B42, 0x8BF9},{0x5B43, 0x8BFA},{0x5B44, 0x8BFB},
- {0x5B45, 0x8BFC},{0x5B46, 0x8BFD},{0x5B47, 0x8BFE},{0x5B48, 0x8C40},{0x5B49, 0x8C41},{0x5B4A, 0x8C42},{0x5B4B, 0x8C43},{0x5B4C, 0x8C44},
- {0x5B4D, 0x8C45},{0x5B4E, 0x8C46},{0x5B4F, 0x8C47},{0x5B50, 0xD7D3},{0x5B51, 0xE6DD},{0x5B52, 0x8C48},{0x5B53, 0xE6DE},{0x5B54, 0xBFD7},
- {0x5B55, 0xD4D0},{0x5B56, 0x8C49},{0x5B57, 0xD7D6},{0x5B58, 0xB4E6},{0x5B59, 0xCBEF},{0x5B5A, 0xE6DA},{0x5B5B, 0xD8C3},{0x5B5C, 0xD7CE},
- {0x5B5D, 0xD0A2},{0x5B5E, 0x8C4A},{0x5B5F, 0xC3CF},{0x5B60, 0x8C4B},{0x5B61, 0x8C4C},{0x5B62, 0xE6DF},{0x5B63, 0xBCBE},{0x5B64, 0xB9C2},
- {0x5B65, 0xE6DB},{0x5B66, 0xD1A7},{0x5B67, 0x8C4D},{0x5B68, 0x8C4E},{0x5B69, 0xBAA2},{0x5B6A, 0xC2CF},{0x5B6B, 0x8C4F},{0x5B6C, 0xD8AB},
- {0x5B6D, 0x8C50},{0x5B6E, 0x8C51},{0x5B6F, 0x8C52},{0x5B70, 0xCAEB},{0x5B71, 0xE5EE},{0x5B72, 0x8C53},{0x5B73, 0xE6DC},{0x5B74, 0x8C54},
- {0x5B75, 0xB7F5},{0x5B76, 0x8C55},{0x5B77, 0x8C56},{0x5B78, 0x8C57},{0x5B79, 0x8C58},{0x5B7A, 0xC8E6},{0x5B7B, 0x8C59},{0x5B7C, 0x8C5A},
- {0x5B7D, 0xC4F5},{0x5B7E, 0x8C5B},{0x5B7F, 0x8C5C},{0x5B80, 0xE5B2},{0x5B81, 0xC4FE},{0x5B82, 0x8C5D},{0x5B83, 0xCBFC},{0x5B84, 0xE5B3},
- {0x5B85, 0xD5AC},{0x5B86, 0x8C5E},{0x5B87, 0xD3EE},{0x5B88, 0xCAD8},{0x5B89, 0xB0B2},{0x5B8A, 0x8C5F},{0x5B8B, 0xCBCE},{0x5B8C, 0xCDEA},
- {0x5B8D, 0x8C60},{0x5B8E, 0x8C61},{0x5B8F, 0xBAEA},{0x5B90, 0x8C62},{0x5B91, 0x8C63},{0x5B92, 0x8C64},{0x5B93, 0xE5B5},{0x5B94, 0x8C65},
- {0x5B95, 0xE5B4},{0x5B96, 0x8C66},{0x5B97, 0xD7DA},{0x5B98, 0xB9D9},{0x5B99, 0xD6E6},{0x5B9A, 0xB6A8},{0x5B9B, 0xCDF0},{0x5B9C, 0xD2CB},
- {0x5B9D, 0xB1A6},{0x5B9E, 0xCAB5},{0x5B9F, 0x8C67},{0x5BA0, 0xB3E8},{0x5BA1, 0xC9F3},{0x5BA2, 0xBFCD},{0x5BA3, 0xD0FB},{0x5BA4, 0xCAD2},
- {0x5BA5, 0xE5B6},{0x5BA6, 0xBBC2},{0x5BA7, 0x8C68},{0x5BA8, 0x8C69},{0x5BA9, 0x8C6A},{0x5BAA, 0xCFDC},{0x5BAB, 0xB9AC},{0x5BAC, 0x8C6B},
- {0x5BAD, 0x8C6C},{0x5BAE, 0x8C6D},{0x5BAF, 0x8C6E},{0x5BB0, 0xD4D7},{0x5BB1, 0x8C6F},{0x5BB2, 0x8C70},{0x5BB3, 0xBAA6},{0x5BB4, 0xD1E7},
- {0x5BB5, 0xCFFC},{0x5BB6, 0xBCD2},{0x5BB7, 0x8C71},{0x5BB8, 0xE5B7},{0x5BB9, 0xC8DD},{0x5BBA, 0x8C72},{0x5BBB, 0x8C73},{0x5BBC, 0x8C74},
- {0x5BBD, 0xBFED},{0x5BBE, 0xB1F6},{0x5BBF, 0xCBDE},{0x5BC0, 0x8C75},{0x5BC1, 0x8C76},{0x5BC2, 0xBCC5},{0x5BC3, 0x8C77},{0x5BC4, 0xBCC4},
- {0x5BC5, 0xD2FA},{0x5BC6, 0xC3DC},{0x5BC7, 0xBFDC},{0x5BC8, 0x8C78},{0x5BC9, 0x8C79},{0x5BCA, 0x8C7A},{0x5BCB, 0x8C7B},{0x5BCC, 0xB8BB},
- {0x5BCD, 0x8C7C},{0x5BCE, 0x8C7D},{0x5BCF, 0x8C7E},{0x5BD0, 0xC3C2},{0x5BD1, 0x8C80},{0x5BD2, 0xBAAE},{0x5BD3, 0xD4A2},{0x5BD4, 0x8C81},
- {0x5BD5, 0x8C82},{0x5BD6, 0x8C83},{0x5BD7, 0x8C84},{0x5BD8, 0x8C85},{0x5BD9, 0x8C86},{0x5BDA, 0x8C87},{0x5BDB, 0x8C88},{0x5BDC, 0x8C89},
- {0x5BDD, 0xC7DE},{0x5BDE, 0xC4AF},{0x5BDF, 0xB2EC},{0x5BE0, 0x8C8A},{0x5BE1, 0xB9D1},{0x5BE2, 0x8C8B},{0x5BE3, 0x8C8C},{0x5BE4, 0xE5BB},
- {0x5BE5, 0xC1C8},{0x5BE6, 0x8C8D},{0x5BE7, 0x8C8E},{0x5BE8, 0xD5AF},{0x5BE9, 0x8C8F},{0x5BEA, 0x8C90},{0x5BEB, 0x8C91},{0x5BEC, 0x8C92},
- {0x5BED, 0x8C93},{0x5BEE, 0xE5BC},{0x5BEF, 0x8C94},{0x5BF0, 0xE5BE},{0x5BF1, 0x8C95},{0x5BF2, 0x8C96},{0x5BF3, 0x8C97},{0x5BF4, 0x8C98},
- {0x5BF5, 0x8C99},{0x5BF6, 0x8C9A},{0x5BF7, 0x8C9B},{0x5BF8, 0xB4E7},{0x5BF9, 0xB6D4},{0x5BFA, 0xCBC2},{0x5BFB, 0xD1B0},{0x5BFC, 0xB5BC},
- {0x5BFD, 0x8C9C},{0x5BFE, 0x8C9D},{0x5BFF, 0xCAD9},{0x5C00, 0x8C9E},{0x5C01, 0xB7E2},{0x5C02, 0x8C9F},{0x5C03, 0x8CA0},{0x5C04, 0xC9E4},
- {0x5C05, 0x8CA1},{0x5C06, 0xBDAB},{0x5C07, 0x8CA2},{0x5C08, 0x8CA3},{0x5C09, 0xCEBE},{0x5C0A, 0xD7F0},{0x5C0B, 0x8CA4},{0x5C0C, 0x8CA5},
- {0x5C0D, 0x8CA6},{0x5C0E, 0x8CA7},{0x5C0F, 0xD0A1},{0x5C10, 0x8CA8},{0x5C11, 0xC9D9},{0x5C12, 0x8CA9},{0x5C13, 0x8CAA},{0x5C14, 0xB6FB},
- {0x5C15, 0xE6D8},{0x5C16, 0xBCE2},{0x5C17, 0x8CAB},{0x5C18, 0xB3BE},{0x5C19, 0x8CAC},{0x5C1A, 0xC9D0},{0x5C1B, 0x8CAD},{0x5C1C, 0xE6D9},
- {0x5C1D, 0xB3A2},{0x5C1E, 0x8CAE},{0x5C1F, 0x8CAF},{0x5C20, 0x8CB0},{0x5C21, 0x8CB1},{0x5C22, 0xDECC},{0x5C23, 0x8CB2},{0x5C24, 0xD3C8},
- {0x5C25, 0xDECD},{0x5C26, 0x8CB3},{0x5C27, 0xD2A2},{0x5C28, 0x8CB4},{0x5C29, 0x8CB5},{0x5C2A, 0x8CB6},{0x5C2B, 0x8CB7},{0x5C2C, 0xDECE},
- {0x5C2D, 0x8CB8},{0x5C2E, 0x8CB9},{0x5C2F, 0x8CBA},{0x5C30, 0x8CBB},{0x5C31, 0xBECD},{0x5C32, 0x8CBC},{0x5C33, 0x8CBD},{0x5C34, 0xDECF},
- {0x5C35, 0x8CBE},{0x5C36, 0x8CBF},{0x5C37, 0x8CC0},{0x5C38, 0xCAAC},{0x5C39, 0xD2FC},{0x5C3A, 0xB3DF},{0x5C3B, 0xE5EA},{0x5C3C, 0xC4E1},
- {0x5C3D, 0xBEA1},{0x5C3E, 0xCEB2},{0x5C3F, 0xC4F2},{0x5C40, 0xBED6},{0x5C41, 0xC6A8},{0x5C42, 0xB2E3},{0x5C43, 0x8CC1},{0x5C44, 0x8CC2},
- {0x5C45, 0xBED3},{0x5C46, 0x8CC3},{0x5C47, 0x8CC4},{0x5C48, 0xC7FC},{0x5C49, 0xCCEB},{0x5C4A, 0xBDEC},{0x5C4B, 0xCEDD},{0x5C4C, 0x8CC5},
- {0x5C4D, 0x8CC6},{0x5C4E, 0xCABA},{0x5C4F, 0xC6C1},{0x5C50, 0xE5EC},{0x5C51, 0xD0BC},{0x5C52, 0x8CC7},{0x5C53, 0x8CC8},{0x5C54, 0x8CC9},
- {0x5C55, 0xD5B9},{0x5C56, 0x8CCA},{0x5C57, 0x8CCB},{0x5C58, 0x8CCC},{0x5C59, 0xE5ED},{0x5C5A, 0x8CCD},{0x5C5B, 0x8CCE},{0x5C5C, 0x8CCF},
- {0x5C5D, 0x8CD0},{0x5C5E, 0xCAF4},{0x5C5F, 0x8CD1},{0x5C60, 0xCDC0},{0x5C61, 0xC2C5},{0x5C62, 0x8CD2},{0x5C63, 0xE5EF},{0x5C64, 0x8CD3},
- {0x5C65, 0xC2C4},{0x5C66, 0xE5F0},{0x5C67, 0x8CD4},{0x5C68, 0x8CD5},{0x5C69, 0x8CD6},{0x5C6A, 0x8CD7},{0x5C6B, 0x8CD8},{0x5C6C, 0x8CD9},
- {0x5C6D, 0x8CDA},{0x5C6E, 0xE5F8},{0x5C6F, 0xCDCD},{0x5C70, 0x8CDB},{0x5C71, 0xC9BD},{0x5C72, 0x8CDC},{0x5C73, 0x8CDD},{0x5C74, 0x8CDE},
- {0x5C75, 0x8CDF},{0x5C76, 0x8CE0},{0x5C77, 0x8CE1},{0x5C78, 0x8CE2},{0x5C79, 0xD2D9},{0x5C7A, 0xE1A8},{0x5C7B, 0x8CE3},{0x5C7C, 0x8CE4},
- {0x5C7D, 0x8CE5},{0x5C7E, 0x8CE6},{0x5C7F, 0xD3EC},{0x5C80, 0x8CE7},{0x5C81, 0xCBEA},{0x5C82, 0xC6F1},{0x5C83, 0x8CE8},{0x5C84, 0x8CE9},
- {0x5C85, 0x8CEA},{0x5C86, 0x8CEB},{0x5C87, 0x8CEC},{0x5C88, 0xE1AC},{0x5C89, 0x8CED},{0x5C8A, 0x8CEE},{0x5C8B, 0x8CEF},{0x5C8C, 0xE1A7},
- {0x5C8D, 0xE1A9},{0x5C8E, 0x8CF0},{0x5C8F, 0x8CF1},{0x5C90, 0xE1AA},{0x5C91, 0xE1AF},{0x5C92, 0x8CF2},{0x5C93, 0x8CF3},{0x5C94, 0xB2ED},
- {0x5C95, 0x8CF4},{0x5C96, 0xE1AB},{0x5C97, 0xB8DA},{0x5C98, 0xE1AD},{0x5C99, 0xE1AE},{0x5C9A, 0xE1B0},{0x5C9B, 0xB5BA},{0x5C9C, 0xE1B1},
- {0x5C9D, 0x8CF5},{0x5C9E, 0x8CF6},{0x5C9F, 0x8CF7},{0x5CA0, 0x8CF8},{0x5CA1, 0x8CF9},{0x5CA2, 0xE1B3},{0x5CA3, 0xE1B8},{0x5CA4, 0x8CFA},
- {0x5CA5, 0x8CFB},{0x5CA6, 0x8CFC},{0x5CA7, 0x8CFD},{0x5CA8, 0x8CFE},{0x5CA9, 0xD1D2},{0x5CAA, 0x8D40},{0x5CAB, 0xE1B6},{0x5CAC, 0xE1B5},
- {0x5CAD, 0xC1EB},{0x5CAE, 0x8D41},{0x5CAF, 0x8D42},{0x5CB0, 0x8D43},{0x5CB1, 0xE1B7},{0x5CB2, 0x8D44},{0x5CB3, 0xD4C0},{0x5CB4, 0x8D45},
- {0x5CB5, 0xE1B2},{0x5CB6, 0x8D46},{0x5CB7, 0xE1BA},{0x5CB8, 0xB0B6},{0x5CB9, 0x8D47},{0x5CBA, 0x8D48},{0x5CBB, 0x8D49},{0x5CBC, 0x8D4A},
- {0x5CBD, 0xE1B4},{0x5CBE, 0x8D4B},{0x5CBF, 0xBFF9},{0x5CC0, 0x8D4C},{0x5CC1, 0xE1B9},{0x5CC2, 0x8D4D},{0x5CC3, 0x8D4E},{0x5CC4, 0xE1BB},
- {0x5CC5, 0x8D4F},{0x5CC6, 0x8D50},{0x5CC7, 0x8D51},{0x5CC8, 0x8D52},{0x5CC9, 0x8D53},{0x5CCA, 0x8D54},{0x5CCB, 0xE1BE},{0x5CCC, 0x8D55},
- {0x5CCD, 0x8D56},{0x5CCE, 0x8D57},{0x5CCF, 0x8D58},{0x5CD0, 0x8D59},{0x5CD1, 0x8D5A},{0x5CD2, 0xE1BC},{0x5CD3, 0x8D5B},{0x5CD4, 0x8D5C},
- {0x5CD5, 0x8D5D},{0x5CD6, 0x8D5E},{0x5CD7, 0x8D5F},{0x5CD8, 0x8D60},{0x5CD9, 0xD6C5},{0x5CDA, 0x8D61},{0x5CDB, 0x8D62},{0x5CDC, 0x8D63},
- {0x5CDD, 0x8D64},{0x5CDE, 0x8D65},{0x5CDF, 0x8D66},{0x5CE0, 0x8D67},{0x5CE1, 0xCFBF},{0x5CE2, 0x8D68},{0x5CE3, 0x8D69},{0x5CE4, 0xE1BD},
- {0x5CE5, 0xE1BF},{0x5CE6, 0xC2CD},{0x5CE7, 0x8D6A},{0x5CE8, 0xB6EB},{0x5CE9, 0x8D6B},{0x5CEA, 0xD3F8},{0x5CEB, 0x8D6C},{0x5CEC, 0x8D6D},
- {0x5CED, 0xC7CD},{0x5CEE, 0x8D6E},{0x5CEF, 0x8D6F},{0x5CF0, 0xB7E5},{0x5CF1, 0x8D70},{0x5CF2, 0x8D71},{0x5CF3, 0x8D72},{0x5CF4, 0x8D73},
- {0x5CF5, 0x8D74},{0x5CF6, 0x8D75},{0x5CF7, 0x8D76},{0x5CF8, 0x8D77},{0x5CF9, 0x8D78},{0x5CFA, 0x8D79},{0x5CFB, 0xBEFE},{0x5CFC, 0x8D7A},
- {0x5CFD, 0x8D7B},{0x5CFE, 0x8D7C},{0x5CFF, 0x8D7D},{0x5D00, 0x8D7E},{0x5D01, 0x8D80},{0x5D02, 0xE1C0},{0x5D03, 0xE1C1},{0x5D04, 0x8D81},
- {0x5D05, 0x8D82},{0x5D06, 0xE1C7},{0x5D07, 0xB3E7},{0x5D08, 0x8D83},{0x5D09, 0x8D84},{0x5D0A, 0x8D85},{0x5D0B, 0x8D86},{0x5D0C, 0x8D87},
- {0x5D0D, 0x8D88},{0x5D0E, 0xC6E9},{0x5D0F, 0x8D89},{0x5D10, 0x8D8A},{0x5D11, 0x8D8B},{0x5D12, 0x8D8C},{0x5D13, 0x8D8D},{0x5D14, 0xB4DE},
- {0x5D15, 0x8D8E},{0x5D16, 0xD1C2},{0x5D17, 0x8D8F},{0x5D18, 0x8D90},{0x5D19, 0x8D91},{0x5D1A, 0x8D92},{0x5D1B, 0xE1C8},{0x5D1C, 0x8D93},
- {0x5D1D, 0x8D94},{0x5D1E, 0xE1C6},{0x5D1F, 0x8D95},{0x5D20, 0x8D96},{0x5D21, 0x8D97},{0x5D22, 0x8D98},{0x5D23, 0x8D99},{0x5D24, 0xE1C5},
- {0x5D25, 0x8D9A},{0x5D26, 0xE1C3},{0x5D27, 0xE1C2},{0x5D28, 0x8D9B},{0x5D29, 0xB1C0},{0x5D2A, 0x8D9C},{0x5D2B, 0x8D9D},{0x5D2C, 0x8D9E},
- {0x5D2D, 0xD5B8},{0x5D2E, 0xE1C4},{0x5D2F, 0x8D9F},{0x5D30, 0x8DA0},{0x5D31, 0x8DA1},{0x5D32, 0x8DA2},{0x5D33, 0x8DA3},{0x5D34, 0xE1CB},
- {0x5D35, 0x8DA4},{0x5D36, 0x8DA5},{0x5D37, 0x8DA6},{0x5D38, 0x8DA7},{0x5D39, 0x8DA8},{0x5D3A, 0x8DA9},{0x5D3B, 0x8DAA},{0x5D3C, 0x8DAB},
- {0x5D3D, 0xE1CC},{0x5D3E, 0xE1CA},{0x5D3F, 0x8DAC},{0x5D40, 0x8DAD},{0x5D41, 0x8DAE},{0x5D42, 0x8DAF},{0x5D43, 0x8DB0},{0x5D44, 0x8DB1},
- {0x5D45, 0x8DB2},{0x5D46, 0x8DB3},{0x5D47, 0xEFFA},{0x5D48, 0x8DB4},{0x5D49, 0x8DB5},{0x5D4A, 0xE1D3},{0x5D4B, 0xE1D2},{0x5D4C, 0xC7B6},
- {0x5D4D, 0x8DB6},{0x5D4E, 0x8DB7},{0x5D4F, 0x8DB8},{0x5D50, 0x8DB9},{0x5D51, 0x8DBA},{0x5D52, 0x8DBB},{0x5D53, 0x8DBC},{0x5D54, 0x8DBD},
- {0x5D55, 0x8DBE},{0x5D56, 0x8DBF},{0x5D57, 0x8DC0},{0x5D58, 0xE1C9},{0x5D59, 0x8DC1},{0x5D5A, 0x8DC2},{0x5D5B, 0xE1CE},{0x5D5C, 0x8DC3},
- {0x5D5D, 0xE1D0},{0x5D5E, 0x8DC4},{0x5D5F, 0x8DC5},{0x5D60, 0x8DC6},{0x5D61, 0x8DC7},{0x5D62, 0x8DC8},{0x5D63, 0x8DC9},{0x5D64, 0x8DCA},
- {0x5D65, 0x8DCB},{0x5D66, 0x8DCC},{0x5D67, 0x8DCD},{0x5D68, 0x8DCE},{0x5D69, 0xE1D4},{0x5D6A, 0x8DCF},{0x5D6B, 0xE1D1},{0x5D6C, 0xE1CD},
- {0x5D6D, 0x8DD0},{0x5D6E, 0x8DD1},{0x5D6F, 0xE1CF},{0x5D70, 0x8DD2},{0x5D71, 0x8DD3},{0x5D72, 0x8DD4},{0x5D73, 0x8DD5},{0x5D74, 0xE1D5},
- {0x5D75, 0x8DD6},{0x5D76, 0x8DD7},{0x5D77, 0x8DD8},{0x5D78, 0x8DD9},{0x5D79, 0x8DDA},{0x5D7A, 0x8DDB},{0x5D7B, 0x8DDC},{0x5D7C, 0x8DDD},
- {0x5D7D, 0x8DDE},{0x5D7E, 0x8DDF},{0x5D7F, 0x8DE0},{0x5D80, 0x8DE1},{0x5D81, 0x8DE2},{0x5D82, 0xE1D6},{0x5D83, 0x8DE3},{0x5D84, 0x8DE4},
- {0x5D85, 0x8DE5},{0x5D86, 0x8DE6},{0x5D87, 0x8DE7},{0x5D88, 0x8DE8},{0x5D89, 0x8DE9},{0x5D8A, 0x8DEA},{0x5D8B, 0x8DEB},{0x5D8C, 0x8DEC},
- {0x5D8D, 0x8DED},{0x5D8E, 0x8DEE},{0x5D8F, 0x8DEF},{0x5D90, 0x8DF0},{0x5D91, 0x8DF1},{0x5D92, 0x8DF2},{0x5D93, 0x8DF3},{0x5D94, 0x8DF4},
- {0x5D95, 0x8DF5},{0x5D96, 0x8DF6},{0x5D97, 0x8DF7},{0x5D98, 0x8DF8},{0x5D99, 0xE1D7},{0x5D9A, 0x8DF9},{0x5D9B, 0x8DFA},{0x5D9C, 0x8DFB},
- {0x5D9D, 0xE1D8},{0x5D9E, 0x8DFC},{0x5D9F, 0x8DFD},{0x5DA0, 0x8DFE},{0x5DA1, 0x8E40},{0x5DA2, 0x8E41},{0x5DA3, 0x8E42},{0x5DA4, 0x8E43},
- {0x5DA5, 0x8E44},{0x5DA6, 0x8E45},{0x5DA7, 0x8E46},{0x5DA8, 0x8E47},{0x5DA9, 0x8E48},{0x5DAA, 0x8E49},{0x5DAB, 0x8E4A},{0x5DAC, 0x8E4B},
- {0x5DAD, 0x8E4C},{0x5DAE, 0x8E4D},{0x5DAF, 0x8E4E},{0x5DB0, 0x8E4F},{0x5DB1, 0x8E50},{0x5DB2, 0x8E51},{0x5DB3, 0x8E52},{0x5DB4, 0x8E53},
- {0x5DB5, 0x8E54},{0x5DB6, 0x8E55},{0x5DB7, 0xE1DA},{0x5DB8, 0x8E56},{0x5DB9, 0x8E57},{0x5DBA, 0x8E58},{0x5DBB, 0x8E59},{0x5DBC, 0x8E5A},
- {0x5DBD, 0x8E5B},{0x5DBE, 0x8E5C},{0x5DBF, 0x8E5D},{0x5DC0, 0x8E5E},{0x5DC1, 0x8E5F},{0x5DC2, 0x8E60},{0x5DC3, 0x8E61},{0x5DC4, 0x8E62},
- {0x5DC5, 0xE1DB},{0x5DC6, 0x8E63},{0x5DC7, 0x8E64},{0x5DC8, 0x8E65},{0x5DC9, 0x8E66},{0x5DCA, 0x8E67},{0x5DCB, 0x8E68},{0x5DCC, 0x8E69},
- {0x5DCD, 0xCEA1},{0x5DCE, 0x8E6A},{0x5DCF, 0x8E6B},{0x5DD0, 0x8E6C},{0x5DD1, 0x8E6D},{0x5DD2, 0x8E6E},{0x5DD3, 0x8E6F},{0x5DD4, 0x8E70},
- {0x5DD5, 0x8E71},{0x5DD6, 0x8E72},{0x5DD7, 0x8E73},{0x5DD8, 0x8E74},{0x5DD9, 0x8E75},{0x5DDA, 0x8E76},{0x5DDB, 0xE7DD},{0x5DDC, 0x8E77},
- {0x5DDD, 0xB4A8},{0x5DDE, 0xD6DD},{0x5DDF, 0x8E78},{0x5DE0, 0x8E79},{0x5DE1, 0xD1B2},{0x5DE2, 0xB3B2},{0x5DE3, 0x8E7A},{0x5DE4, 0x8E7B},
- {0x5DE5, 0xB9A4},{0x5DE6, 0xD7F3},{0x5DE7, 0xC7C9},{0x5DE8, 0xBEDE},{0x5DE9, 0xB9AE},{0x5DEA, 0x8E7C},{0x5DEB, 0xCED7},{0x5DEC, 0x8E7D},
- {0x5DED, 0x8E7E},{0x5DEE, 0xB2EE},{0x5DEF, 0xDBCF},{0x5DF0, 0x8E80},{0x5DF1, 0xBCBA},{0x5DF2, 0xD2D1},{0x5DF3, 0xCBC8},{0x5DF4, 0xB0CD},
- {0x5DF5, 0x8E81},{0x5DF6, 0x8E82},{0x5DF7, 0xCFEF},{0x5DF8, 0x8E83},{0x5DF9, 0x8E84},{0x5DFA, 0x8E85},{0x5DFB, 0x8E86},{0x5DFC, 0x8E87},
- {0x5DFD, 0xD9E3},{0x5DFE, 0xBDED},{0x5DFF, 0x8E88},{0x5E00, 0x8E89},{0x5E01, 0xB1D2},{0x5E02, 0xCAD0},{0x5E03, 0xB2BC},{0x5E04, 0x8E8A},
- {0x5E05, 0xCBA7},{0x5E06, 0xB7AB},{0x5E07, 0x8E8B},{0x5E08, 0xCAA6},{0x5E09, 0x8E8C},{0x5E0A, 0x8E8D},{0x5E0B, 0x8E8E},{0x5E0C, 0xCFA3},
- {0x5E0D, 0x8E8F},{0x5E0E, 0x8E90},{0x5E0F, 0xE0F8},{0x5E10, 0xD5CA},{0x5E11, 0xE0FB},{0x5E12, 0x8E91},{0x5E13, 0x8E92},{0x5E14, 0xE0FA},
- {0x5E15, 0xC5C1},{0x5E16, 0xCCFB},{0x5E17, 0x8E93},{0x5E18, 0xC1B1},{0x5E19, 0xE0F9},{0x5E1A, 0xD6E3},{0x5E1B, 0xB2AF},{0x5E1C, 0xD6C4},
- {0x5E1D, 0xB5DB},{0x5E1E, 0x8E94},{0x5E1F, 0x8E95},{0x5E20, 0x8E96},{0x5E21, 0x8E97},{0x5E22, 0x8E98},{0x5E23, 0x8E99},{0x5E24, 0x8E9A},
- {0x5E25, 0x8E9B},{0x5E26, 0xB4F8},{0x5E27, 0xD6A1},{0x5E28, 0x8E9C},{0x5E29, 0x8E9D},{0x5E2A, 0x8E9E},{0x5E2B, 0x8E9F},{0x5E2C, 0x8EA0},
- {0x5E2D, 0xCFAF},{0x5E2E, 0xB0EF},{0x5E2F, 0x8EA1},{0x5E30, 0x8EA2},{0x5E31, 0xE0FC},{0x5E32, 0x8EA3},{0x5E33, 0x8EA4},{0x5E34, 0x8EA5},
- {0x5E35, 0x8EA6},{0x5E36, 0x8EA7},{0x5E37, 0xE1A1},{0x5E38, 0xB3A3},{0x5E39, 0x8EA8},{0x5E3A, 0x8EA9},{0x5E3B, 0xE0FD},{0x5E3C, 0xE0FE},
- {0x5E3D, 0xC3B1},{0x5E3E, 0x8EAA},{0x5E3F, 0x8EAB},{0x5E40, 0x8EAC},{0x5E41, 0x8EAD},{0x5E42, 0xC3DD},{0x5E43, 0x8EAE},{0x5E44, 0xE1A2},
- {0x5E45, 0xB7F9},{0x5E46, 0x8EAF},{0x5E47, 0x8EB0},{0x5E48, 0x8EB1},{0x5E49, 0x8EB2},{0x5E4A, 0x8EB3},{0x5E4B, 0x8EB4},{0x5E4C, 0xBBCF},
- {0x5E4D, 0x8EB5},{0x5E4E, 0x8EB6},{0x5E4F, 0x8EB7},{0x5E50, 0x8EB8},{0x5E51, 0x8EB9},{0x5E52, 0x8EBA},{0x5E53, 0x8EBB},{0x5E54, 0xE1A3},
- {0x5E55, 0xC4BB},{0x5E56, 0x8EBC},{0x5E57, 0x8EBD},{0x5E58, 0x8EBE},{0x5E59, 0x8EBF},{0x5E5A, 0x8EC0},{0x5E5B, 0xE1A4},{0x5E5C, 0x8EC1},
- {0x5E5D, 0x8EC2},{0x5E5E, 0xE1A5},{0x5E5F, 0x8EC3},{0x5E60, 0x8EC4},{0x5E61, 0xE1A6},{0x5E62, 0xB4B1},{0x5E63, 0x8EC5},{0x5E64, 0x8EC6},
- {0x5E65, 0x8EC7},{0x5E66, 0x8EC8},{0x5E67, 0x8EC9},{0x5E68, 0x8ECA},{0x5E69, 0x8ECB},{0x5E6A, 0x8ECC},{0x5E6B, 0x8ECD},{0x5E6C, 0x8ECE},
- {0x5E6D, 0x8ECF},{0x5E6E, 0x8ED0},{0x5E6F, 0x8ED1},{0x5E70, 0x8ED2},{0x5E71, 0x8ED3},{0x5E72, 0xB8C9},{0x5E73, 0xC6BD},{0x5E74, 0xC4EA},
- {0x5E75, 0x8ED4},{0x5E76, 0xB2A2},{0x5E77, 0x8ED5},{0x5E78, 0xD0D2},{0x5E79, 0x8ED6},{0x5E7A, 0xE7DB},{0x5E7B, 0xBBC3},{0x5E7C, 0xD3D7},
- {0x5E7D, 0xD3C4},{0x5E7E, 0x8ED7},{0x5E7F, 0xB9E3},{0x5E80, 0xE2CF},{0x5E81, 0x8ED8},{0x5E82, 0x8ED9},{0x5E83, 0x8EDA},{0x5E84, 0xD7AF},
- {0x5E85, 0x8EDB},{0x5E86, 0xC7EC},{0x5E87, 0xB1D3},{0x5E88, 0x8EDC},{0x5E89, 0x8EDD},{0x5E8A, 0xB4B2},{0x5E8B, 0xE2D1},{0x5E8C, 0x8EDE},
- {0x5E8D, 0x8EDF},{0x5E8E, 0x8EE0},{0x5E8F, 0xD0F2},{0x5E90, 0xC2AE},{0x5E91, 0xE2D0},{0x5E92, 0x8EE1},{0x5E93, 0xBFE2},{0x5E94, 0xD3A6},
- {0x5E95, 0xB5D7},{0x5E96, 0xE2D2},{0x5E97, 0xB5EA},{0x5E98, 0x8EE2},{0x5E99, 0xC3ED},{0x5E9A, 0xB8FD},{0x5E9B, 0x8EE3},{0x5E9C, 0xB8AE},
- {0x5E9D, 0x8EE4},{0x5E9E, 0xC5D3},{0x5E9F, 0xB7CF},{0x5EA0, 0xE2D4},{0x5EA1, 0x8EE5},{0x5EA2, 0x8EE6},{0x5EA3, 0x8EE7},{0x5EA4, 0x8EE8},
- {0x5EA5, 0xE2D3},{0x5EA6, 0xB6C8},{0x5EA7, 0xD7F9},{0x5EA8, 0x8EE9},{0x5EA9, 0x8EEA},{0x5EAA, 0x8EEB},{0x5EAB, 0x8EEC},{0x5EAC, 0x8EED},
- {0x5EAD, 0xCDA5},{0x5EAE, 0x8EEE},{0x5EAF, 0x8EEF},{0x5EB0, 0x8EF0},{0x5EB1, 0x8EF1},{0x5EB2, 0x8EF2},{0x5EB3, 0xE2D8},{0x5EB4, 0x8EF3},
- {0x5EB5, 0xE2D6},{0x5EB6, 0xCAFC},{0x5EB7, 0xBFB5},{0x5EB8, 0xD3B9},{0x5EB9, 0xE2D5},{0x5EBA, 0x8EF4},{0x5EBB, 0x8EF5},{0x5EBC, 0x8EF6},
- {0x5EBD, 0x8EF7},{0x5EBE, 0xE2D7},{0x5EBF, 0x8EF8},{0x5EC0, 0x8EF9},{0x5EC1, 0x8EFA},{0x5EC2, 0x8EFB},{0x5EC3, 0x8EFC},{0x5EC4, 0x8EFD},
- {0x5EC5, 0x8EFE},{0x5EC6, 0x8F40},{0x5EC7, 0x8F41},{0x5EC8, 0x8F42},{0x5EC9, 0xC1AE},{0x5ECA, 0xC0C8},{0x5ECB, 0x8F43},{0x5ECC, 0x8F44},
- {0x5ECD, 0x8F45},{0x5ECE, 0x8F46},{0x5ECF, 0x8F47},{0x5ED0, 0x8F48},{0x5ED1, 0xE2DB},{0x5ED2, 0xE2DA},{0x5ED3, 0xC0AA},{0x5ED4, 0x8F49},
- {0x5ED5, 0x8F4A},{0x5ED6, 0xC1CE},{0x5ED7, 0x8F4B},{0x5ED8, 0x8F4C},{0x5ED9, 0x8F4D},{0x5EDA, 0x8F4E},{0x5EDB, 0xE2DC},{0x5EDC, 0x8F4F},
- {0x5EDD, 0x8F50},{0x5EDE, 0x8F51},{0x5EDF, 0x8F52},{0x5EE0, 0x8F53},{0x5EE1, 0x8F54},{0x5EE2, 0x8F55},{0x5EE3, 0x8F56},{0x5EE4, 0x8F57},
- {0x5EE5, 0x8F58},{0x5EE6, 0x8F59},{0x5EE7, 0x8F5A},{0x5EE8, 0xE2DD},{0x5EE9, 0x8F5B},{0x5EEA, 0xE2DE},{0x5EEB, 0x8F5C},{0x5EEC, 0x8F5D},
- {0x5EED, 0x8F5E},{0x5EEE, 0x8F5F},{0x5EEF, 0x8F60},{0x5EF0, 0x8F61},{0x5EF1, 0x8F62},{0x5EF2, 0x8F63},{0x5EF3, 0x8F64},{0x5EF4, 0xDBC8},
- {0x5EF5, 0x8F65},{0x5EF6, 0xD1D3},{0x5EF7, 0xCDA2},{0x5EF8, 0x8F66},{0x5EF9, 0x8F67},{0x5EFA, 0xBDA8},{0x5EFB, 0x8F68},{0x5EFC, 0x8F69},
- {0x5EFD, 0x8F6A},{0x5EFE, 0xDEC3},{0x5EFF, 0xD8A5},{0x5F00, 0xBFAA},{0x5F01, 0xDBCD},{0x5F02, 0xD2EC},{0x5F03, 0xC6FA},{0x5F04, 0xC5AA},
- {0x5F05, 0x8F6B},{0x5F06, 0x8F6C},{0x5F07, 0x8F6D},{0x5F08, 0xDEC4},{0x5F09, 0x8F6E},{0x5F0A, 0xB1D7},{0x5F0B, 0xDFAE},{0x5F0C, 0x8F6F},
- {0x5F0D, 0x8F70},{0x5F0E, 0x8F71},{0x5F0F, 0xCABD},{0x5F10, 0x8F72},{0x5F11, 0xDFB1},{0x5F12, 0x8F73},{0x5F13, 0xB9AD},{0x5F14, 0x8F74},
- {0x5F15, 0xD2FD},{0x5F16, 0x8F75},{0x5F17, 0xB8A5},{0x5F18, 0xBAEB},{0x5F19, 0x8F76},{0x5F1A, 0x8F77},{0x5F1B, 0xB3DA},{0x5F1C, 0x8F78},
- {0x5F1D, 0x8F79},{0x5F1E, 0x8F7A},{0x5F1F, 0xB5DC},{0x5F20, 0xD5C5},{0x5F21, 0x8F7B},{0x5F22, 0x8F7C},{0x5F23, 0x8F7D},{0x5F24, 0x8F7E},
- {0x5F25, 0xC3D6},{0x5F26, 0xCFD2},{0x5F27, 0xBBA1},{0x5F28, 0x8F80},{0x5F29, 0xE5F3},{0x5F2A, 0xE5F2},{0x5F2B, 0x8F81},{0x5F2C, 0x8F82},
- {0x5F2D, 0xE5F4},{0x5F2E, 0x8F83},{0x5F2F, 0xCDE4},{0x5F30, 0x8F84},{0x5F31, 0xC8F5},{0x5F32, 0x8F85},{0x5F33, 0x8F86},{0x5F34, 0x8F87},
- {0x5F35, 0x8F88},{0x5F36, 0x8F89},{0x5F37, 0x8F8A},{0x5F38, 0x8F8B},{0x5F39, 0xB5AF},{0x5F3A, 0xC7BF},{0x5F3B, 0x8F8C},{0x5F3C, 0xE5F6},
- {0x5F3D, 0x8F8D},{0x5F3E, 0x8F8E},{0x5F3F, 0x8F8F},{0x5F40, 0xECB0},{0x5F41, 0x8F90},{0x5F42, 0x8F91},{0x5F43, 0x8F92},{0x5F44, 0x8F93},
- {0x5F45, 0x8F94},{0x5F46, 0x8F95},{0x5F47, 0x8F96},{0x5F48, 0x8F97},{0x5F49, 0x8F98},{0x5F4A, 0x8F99},{0x5F4B, 0x8F9A},{0x5F4C, 0x8F9B},
- {0x5F4D, 0x8F9C},{0x5F4E, 0x8F9D},{0x5F4F, 0x8F9E},{0x5F50, 0xE5E6},{0x5F51, 0x8F9F},{0x5F52, 0xB9E9},{0x5F53, 0xB5B1},{0x5F54, 0x8FA0},
- {0x5F55, 0xC2BC},{0x5F56, 0xE5E8},{0x5F57, 0xE5E7},{0x5F58, 0xE5E9},{0x5F59, 0x8FA1},{0x5F5A, 0x8FA2},{0x5F5B, 0x8FA3},{0x5F5C, 0x8FA4},
- {0x5F5D, 0xD2CD},{0x5F5E, 0x8FA5},{0x5F5F, 0x8FA6},{0x5F60, 0x8FA7},{0x5F61, 0xE1EA},{0x5F62, 0xD0CE},{0x5F63, 0x8FA8},{0x5F64, 0xCDAE},
- {0x5F65, 0x8FA9},{0x5F66, 0xD1E5},{0x5F67, 0x8FAA},{0x5F68, 0x8FAB},{0x5F69, 0xB2CA},{0x5F6A, 0xB1EB},{0x5F6B, 0x8FAC},{0x5F6C, 0xB1F2},
- {0x5F6D, 0xC5ED},{0x5F6E, 0x8FAD},{0x5F6F, 0x8FAE},{0x5F70, 0xD5C3},{0x5F71, 0xD3B0},{0x5F72, 0x8FAF},{0x5F73, 0xE1DC},{0x5F74, 0x8FB0},
- {0x5F75, 0x8FB1},{0x5F76, 0x8FB2},{0x5F77, 0xE1DD},{0x5F78, 0x8FB3},{0x5F79, 0xD2DB},{0x5F7A, 0x8FB4},{0x5F7B, 0xB3B9},{0x5F7C, 0xB1CB},
- {0x5F7D, 0x8FB5},{0x5F7E, 0x8FB6},{0x5F7F, 0x8FB7},{0x5F80, 0xCDF9},{0x5F81, 0xD5F7},{0x5F82, 0xE1DE},{0x5F83, 0x8FB8},{0x5F84, 0xBEB6},
- {0x5F85, 0xB4FD},{0x5F86, 0x8FB9},{0x5F87, 0xE1DF},{0x5F88, 0xBADC},{0x5F89, 0xE1E0},{0x5F8A, 0xBBB2},{0x5F8B, 0xC2C9},{0x5F8C, 0xE1E1},
- {0x5F8D, 0x8FBA},{0x5F8E, 0x8FBB},{0x5F8F, 0x8FBC},{0x5F90, 0xD0EC},{0x5F91, 0x8FBD},{0x5F92, 0xCDBD},{0x5F93, 0x8FBE},{0x5F94, 0x8FBF},
- {0x5F95, 0xE1E2},{0x5F96, 0x8FC0},{0x5F97, 0xB5C3},{0x5F98, 0xC5C7},{0x5F99, 0xE1E3},{0x5F9A, 0x8FC1},{0x5F9B, 0x8FC2},{0x5F9C, 0xE1E4},
- {0x5F9D, 0x8FC3},{0x5F9E, 0x8FC4},{0x5F9F, 0x8FC5},{0x5FA0, 0x8FC6},{0x5FA1, 0xD3F9},{0x5FA2, 0x8FC7},{0x5FA3, 0x8FC8},{0x5FA4, 0x8FC9},
- {0x5FA5, 0x8FCA},{0x5FA6, 0x8FCB},{0x5FA7, 0x8FCC},{0x5FA8, 0xE1E5},{0x5FA9, 0x8FCD},{0x5FAA, 0xD1AD},{0x5FAB, 0x8FCE},{0x5FAC, 0x8FCF},
- {0x5FAD, 0xE1E6},{0x5FAE, 0xCEA2},{0x5FAF, 0x8FD0},{0x5FB0, 0x8FD1},{0x5FB1, 0x8FD2},{0x5FB2, 0x8FD3},{0x5FB3, 0x8FD4},{0x5FB4, 0x8FD5},
- {0x5FB5, 0xE1E7},{0x5FB6, 0x8FD6},{0x5FB7, 0xB5C2},{0x5FB8, 0x8FD7},{0x5FB9, 0x8FD8},{0x5FBA, 0x8FD9},{0x5FBB, 0x8FDA},{0x5FBC, 0xE1E8},
- {0x5FBD, 0xBBD5},{0x5FBE, 0x8FDB},{0x5FBF, 0x8FDC},{0x5FC0, 0x8FDD},{0x5FC1, 0x8FDE},{0x5FC2, 0x8FDF},{0x5FC3, 0xD0C4},{0x5FC4, 0xE2E0},
- {0x5FC5, 0xB1D8},{0x5FC6, 0xD2E4},{0x5FC7, 0x8FE0},{0x5FC8, 0x8FE1},{0x5FC9, 0xE2E1},{0x5FCA, 0x8FE2},{0x5FCB, 0x8FE3},{0x5FCC, 0xBCC9},
- {0x5FCD, 0xC8CC},{0x5FCE, 0x8FE4},{0x5FCF, 0xE2E3},{0x5FD0, 0xECFE},{0x5FD1, 0xECFD},{0x5FD2, 0xDFAF},{0x5FD3, 0x8FE5},{0x5FD4, 0x8FE6},
- {0x5FD5, 0x8FE7},{0x5FD6, 0xE2E2},{0x5FD7, 0xD6BE},{0x5FD8, 0xCDFC},{0x5FD9, 0xC3A6},{0x5FDA, 0x8FE8},{0x5FDB, 0x8FE9},{0x5FDC, 0x8FEA},
- {0x5FDD, 0xE3C3},{0x5FDE, 0x8FEB},{0x5FDF, 0x8FEC},{0x5FE0, 0xD6D2},{0x5FE1, 0xE2E7},{0x5FE2, 0x8FED},{0x5FE3, 0x8FEE},{0x5FE4, 0xE2E8},
- {0x5FE5, 0x8FEF},{0x5FE6, 0x8FF0},{0x5FE7, 0xD3C7},{0x5FE8, 0x8FF1},{0x5FE9, 0x8FF2},{0x5FEA, 0xE2EC},{0x5FEB, 0xBFEC},{0x5FEC, 0x8FF3},
- {0x5FED, 0xE2ED},{0x5FEE, 0xE2E5},{0x5FEF, 0x8FF4},{0x5FF0, 0x8FF5},{0x5FF1, 0xB3C0},{0x5FF2, 0x8FF6},{0x5FF3, 0x8FF7},{0x5FF4, 0x8FF8},
- {0x5FF5, 0xC4EE},{0x5FF6, 0x8FF9},{0x5FF7, 0x8FFA},{0x5FF8, 0xE2EE},{0x5FF9, 0x8FFB},{0x5FFA, 0x8FFC},{0x5FFB, 0xD0C3},{0x5FFC, 0x8FFD},
- {0x5FFD, 0xBAF6},{0x5FFE, 0xE2E9},{0x5FFF, 0xB7DE},{0x6000, 0xBBB3},{0x6001, 0xCCAC},{0x6002, 0xCBCB},{0x6003, 0xE2E4},{0x6004, 0xE2E6},
- {0x6005, 0xE2EA},{0x6006, 0xE2EB},{0x6007, 0x8FFE},{0x6008, 0x9040},{0x6009, 0x9041},{0x600A, 0xE2F7},{0x600B, 0x9042},{0x600C, 0x9043},
- {0x600D, 0xE2F4},{0x600E, 0xD4F5},{0x600F, 0xE2F3},{0x6010, 0x9044},{0x6011, 0x9045},{0x6012, 0xC5AD},{0x6013, 0x9046},{0x6014, 0xD5FA},
- {0x6015, 0xC5C2},{0x6016, 0xB2C0},{0x6017, 0x9047},{0x6018, 0x9048},{0x6019, 0xE2EF},{0x601A, 0x9049},{0x601B, 0xE2F2},{0x601C, 0xC1AF},
- {0x601D, 0xCBBC},{0x601E, 0x904A},{0x601F, 0x904B},{0x6020, 0xB5A1},{0x6021, 0xE2F9},{0x6022, 0x904C},{0x6023, 0x904D},{0x6024, 0x904E},
- {0x6025, 0xBCB1},{0x6026, 0xE2F1},{0x6027, 0xD0D4},{0x6028, 0xD4B9},{0x6029, 0xE2F5},{0x602A, 0xB9D6},{0x602B, 0xE2F6},{0x602C, 0x904F},
- {0x602D, 0x9050},{0x602E, 0x9051},{0x602F, 0xC7D3},{0x6030, 0x9052},{0x6031, 0x9053},{0x6032, 0x9054},{0x6033, 0x9055},{0x6034, 0x9056},
- {0x6035, 0xE2F0},{0x6036, 0x9057},{0x6037, 0x9058},{0x6038, 0x9059},{0x6039, 0x905A},{0x603A, 0x905B},{0x603B, 0xD7DC},{0x603C, 0xEDA1},
- {0x603D, 0x905C},{0x603E, 0x905D},{0x603F, 0xE2F8},{0x6040, 0x905E},{0x6041, 0xEDA5},{0x6042, 0xE2FE},{0x6043, 0xCAD1},{0x6044, 0x905F},
- {0x6045, 0x9060},{0x6046, 0x9061},{0x6047, 0x9062},{0x6048, 0x9063},{0x6049, 0x9064},{0x604A, 0x9065},{0x604B, 0xC1B5},{0x604C, 0x9066},
- {0x604D, 0xBBD0},{0x604E, 0x9067},{0x604F, 0x9068},{0x6050, 0xBFD6},{0x6051, 0x9069},{0x6052, 0xBAE3},{0x6053, 0x906A},{0x6054, 0x906B},
- {0x6055, 0xCBA1},{0x6056, 0x906C},{0x6057, 0x906D},{0x6058, 0x906E},{0x6059, 0xEDA6},{0x605A, 0xEDA3},{0x605B, 0x906F},{0x605C, 0x9070},
- {0x605D, 0xEDA2},{0x605E, 0x9071},{0x605F, 0x9072},{0x6060, 0x9073},{0x6061, 0x9074},{0x6062, 0xBBD6},{0x6063, 0xEDA7},{0x6064, 0xD0F4},
- {0x6065, 0x9075},{0x6066, 0x9076},{0x6067, 0xEDA4},{0x6068, 0xBADE},{0x6069, 0xB6F7},{0x606A, 0xE3A1},{0x606B, 0xB6B2},{0x606C, 0xCCF1},
- {0x606D, 0xB9A7},{0x606E, 0x9077},{0x606F, 0xCFA2},{0x6070, 0xC7A1},{0x6071, 0x9078},{0x6072, 0x9079},{0x6073, 0xBFD2},{0x6074, 0x907A},
- {0x6075, 0x907B},{0x6076, 0xB6F1},{0x6077, 0x907C},{0x6078, 0xE2FA},{0x6079, 0xE2FB},{0x607A, 0xE2FD},{0x607B, 0xE2FC},{0x607C, 0xC4D5},
- {0x607D, 0xE3A2},{0x607E, 0x907D},{0x607F, 0xD3C1},{0x6080, 0x907E},{0x6081, 0x9080},{0x6082, 0x9081},{0x6083, 0xE3A7},{0x6084, 0xC7C4},
- {0x6085, 0x9082},{0x6086, 0x9083},{0x6087, 0x9084},{0x6088, 0x9085},{0x6089, 0xCFA4},{0x608A, 0x9086},{0x608B, 0x9087},{0x608C, 0xE3A9},
- {0x608D, 0xBAB7},{0x608E, 0x9088},{0x608F, 0x9089},{0x6090, 0x908A},{0x6091, 0x908B},{0x6092, 0xE3A8},{0x6093, 0x908C},{0x6094, 0xBBDA},
- {0x6095, 0x908D},{0x6096, 0xE3A3},{0x6097, 0x908E},{0x6098, 0x908F},{0x6099, 0x9090},{0x609A, 0xE3A4},{0x609B, 0xE3AA},{0x609C, 0x9091},
- {0x609D, 0xE3A6},{0x609E, 0x9092},{0x609F, 0xCEF2},{0x60A0, 0xD3C6},{0x60A1, 0x9093},{0x60A2, 0x9094},{0x60A3, 0xBBBC},{0x60A4, 0x9095},
- {0x60A5, 0x9096},{0x60A6, 0xD4C3},{0x60A7, 0x9097},{0x60A8, 0xC4FA},{0x60A9, 0x9098},{0x60AA, 0x9099},{0x60AB, 0xEDA8},{0x60AC, 0xD0FC},
- {0x60AD, 0xE3A5},{0x60AE, 0x909A},{0x60AF, 0xC3F5},{0x60B0, 0x909B},{0x60B1, 0xE3AD},{0x60B2, 0xB1AF},{0x60B3, 0x909C},{0x60B4, 0xE3B2},
- {0x60B5, 0x909D},{0x60B6, 0x909E},{0x60B7, 0x909F},{0x60B8, 0xBCC2},{0x60B9, 0x90A0},{0x60BA, 0x90A1},{0x60BB, 0xE3AC},{0x60BC, 0xB5BF},
- {0x60BD, 0x90A2},{0x60BE, 0x90A3},{0x60BF, 0x90A4},{0x60C0, 0x90A5},{0x60C1, 0x90A6},{0x60C2, 0x90A7},{0x60C3, 0x90A8},{0x60C4, 0x90A9},
- {0x60C5, 0xC7E9},{0x60C6, 0xE3B0},{0x60C7, 0x90AA},{0x60C8, 0x90AB},{0x60C9, 0x90AC},{0x60CA, 0xBEAA},{0x60CB, 0xCDEF},{0x60CC, 0x90AD},
- {0x60CD, 0x90AE},{0x60CE, 0x90AF},{0x60CF, 0x90B0},{0x60D0, 0x90B1},{0x60D1, 0xBBF3},{0x60D2, 0x90B2},{0x60D3, 0x90B3},{0x60D4, 0x90B4},
- {0x60D5, 0xCCE8},{0x60D6, 0x90B5},{0x60D7, 0x90B6},{0x60D8, 0xE3AF},{0x60D9, 0x90B7},{0x60DA, 0xE3B1},{0x60DB, 0x90B8},{0x60DC, 0xCFA7},
- {0x60DD, 0xE3AE},{0x60DE, 0x90B9},{0x60DF, 0xCEA9},{0x60E0, 0xBBDD},{0x60E1, 0x90BA},{0x60E2, 0x90BB},{0x60E3, 0x90BC},{0x60E4, 0x90BD},
- {0x60E5, 0x90BE},{0x60E6, 0xB5EB},{0x60E7, 0xBEE5},{0x60E8, 0xB2D2},{0x60E9, 0xB3CD},{0x60EA, 0x90BF},{0x60EB, 0xB1B9},{0x60EC, 0xE3AB},
- {0x60ED, 0xB2D1},{0x60EE, 0xB5AC},{0x60EF, 0xB9DF},{0x60F0, 0xB6E8},{0x60F1, 0x90C0},{0x60F2, 0x90C1},{0x60F3, 0xCFEB},{0x60F4, 0xE3B7},
- {0x60F5, 0x90C2},{0x60F6, 0xBBCC},{0x60F7, 0x90C3},{0x60F8, 0x90C4},{0x60F9, 0xC8C7},{0x60FA, 0xD0CA},{0x60FB, 0x90C5},{0x60FC, 0x90C6},
- {0x60FD, 0x90C7},{0x60FE, 0x90C8},{0x60FF, 0x90C9},{0x6100, 0xE3B8},{0x6101, 0xB3EE},{0x6102, 0x90CA},{0x6103, 0x90CB},{0x6104, 0x90CC},
- {0x6105, 0x90CD},{0x6106, 0xEDA9},{0x6107, 0x90CE},{0x6108, 0xD3FA},{0x6109, 0xD3E4},{0x610A, 0x90CF},{0x610B, 0x90D0},{0x610C, 0x90D1},
- {0x610D, 0xEDAA},{0x610E, 0xE3B9},{0x610F, 0xD2E2},{0x6110, 0x90D2},{0x6111, 0x90D3},{0x6112, 0x90D4},{0x6113, 0x90D5},{0x6114, 0x90D6},
- {0x6115, 0xE3B5},{0x6116, 0x90D7},{0x6117, 0x90D8},{0x6118, 0x90D9},{0x6119, 0x90DA},{0x611A, 0xD3DE},{0x611B, 0x90DB},{0x611C, 0x90DC},
- {0x611D, 0x90DD},{0x611E, 0x90DE},{0x611F, 0xB8D0},{0x6120, 0xE3B3},{0x6121, 0x90DF},{0x6122, 0x90E0},{0x6123, 0xE3B6},{0x6124, 0xB7DF},
- {0x6125, 0x90E1},{0x6126, 0xE3B4},{0x6127, 0xC0A2},{0x6128, 0x90E2},{0x6129, 0x90E3},{0x612A, 0x90E4},{0x612B, 0xE3BA},{0x612C, 0x90E5},
- {0x612D, 0x90E6},{0x612E, 0x90E7},{0x612F, 0x90E8},{0x6130, 0x90E9},{0x6131, 0x90EA},{0x6132, 0x90EB},{0x6133, 0x90EC},{0x6134, 0x90ED},
- {0x6135, 0x90EE},{0x6136, 0x90EF},{0x6137, 0x90F0},{0x6138, 0x90F1},{0x6139, 0x90F2},{0x613A, 0x90F3},{0x613B, 0x90F4},{0x613C, 0x90F5},
- {0x613D, 0x90F6},{0x613E, 0x90F7},{0x613F, 0xD4B8},{0x6140, 0x90F8},{0x6141, 0x90F9},{0x6142, 0x90FA},{0x6143, 0x90FB},{0x6144, 0x90FC},
- {0x6145, 0x90FD},{0x6146, 0x90FE},{0x6147, 0x9140},{0x6148, 0xB4C8},{0x6149, 0x9141},{0x614A, 0xE3BB},{0x614B, 0x9142},{0x614C, 0xBBC5},
- {0x614D, 0x9143},{0x614E, 0xC9F7},{0x614F, 0x9144},{0x6150, 0x9145},{0x6151, 0xC9E5},{0x6152, 0x9146},{0x6153, 0x9147},{0x6154, 0x9148},
- {0x6155, 0xC4BD},{0x6156, 0x9149},{0x6157, 0x914A},{0x6158, 0x914B},{0x6159, 0x914C},{0x615A, 0x914D},{0x615B, 0x914E},{0x615C, 0x914F},
- {0x615D, 0xEDAB},{0x615E, 0x9150},{0x615F, 0x9151},{0x6160, 0x9152},{0x6161, 0x9153},{0x6162, 0xC2FD},{0x6163, 0x9154},{0x6164, 0x9155},
- {0x6165, 0x9156},{0x6166, 0x9157},{0x6167, 0xBBDB},{0x6168, 0xBFAE},{0x6169, 0x9158},{0x616A, 0x9159},{0x616B, 0x915A},{0x616C, 0x915B},
- {0x616D, 0x915C},{0x616E, 0x915D},{0x616F, 0x915E},{0x6170, 0xCEBF},{0x6171, 0x915F},{0x6172, 0x9160},{0x6173, 0x9161},{0x6174, 0x9162},
- {0x6175, 0xE3BC},{0x6176, 0x9163},{0x6177, 0xBFB6},{0x6178, 0x9164},{0x6179, 0x9165},{0x617A, 0x9166},{0x617B, 0x9167},{0x617C, 0x9168},
- {0x617D, 0x9169},{0x617E, 0x916A},{0x617F, 0x916B},{0x6180, 0x916C},{0x6181, 0x916D},{0x6182, 0x916E},{0x6183, 0x916F},{0x6184, 0x9170},
- {0x6185, 0x9171},{0x6186, 0x9172},{0x6187, 0x9173},{0x6188, 0x9174},{0x6189, 0x9175},{0x618A, 0x9176},{0x618B, 0xB1EF},{0x618C, 0x9177},
- {0x618D, 0x9178},{0x618E, 0xD4F7},{0x618F, 0x9179},{0x6190, 0x917A},{0x6191, 0x917B},{0x6192, 0x917C},{0x6193, 0x917D},{0x6194, 0xE3BE},
- {0x6195, 0x917E},{0x6196, 0x9180},{0x6197, 0x9181},{0x6198, 0x9182},{0x6199, 0x9183},{0x619A, 0x9184},{0x619B, 0x9185},{0x619C, 0x9186},
- {0x619D, 0xEDAD},{0x619E, 0x9187},{0x619F, 0x9188},{0x61A0, 0x9189},{0x61A1, 0x918A},{0x61A2, 0x918B},{0x61A3, 0x918C},{0x61A4, 0x918D},
- {0x61A5, 0x918E},{0x61A6, 0x918F},{0x61A7, 0xE3BF},{0x61A8, 0xBAA9},{0x61A9, 0xEDAC},{0x61AA, 0x9190},{0x61AB, 0x9191},{0x61AC, 0xE3BD},
- {0x61AD, 0x9192},{0x61AE, 0x9193},{0x61AF, 0x9194},{0x61B0, 0x9195},{0x61B1, 0x9196},{0x61B2, 0x9197},{0x61B3, 0x9198},{0x61B4, 0x9199},
- {0x61B5, 0x919A},{0x61B6, 0x919B},{0x61B7, 0xE3C0},{0x61B8, 0x919C},{0x61B9, 0x919D},{0x61BA, 0x919E},{0x61BB, 0x919F},{0x61BC, 0x91A0},
- {0x61BD, 0x91A1},{0x61BE, 0xBAB6},{0x61BF, 0x91A2},{0x61C0, 0x91A3},{0x61C1, 0x91A4},{0x61C2, 0xB6AE},{0x61C3, 0x91A5},{0x61C4, 0x91A6},
- {0x61C5, 0x91A7},{0x61C6, 0x91A8},{0x61C7, 0x91A9},{0x61C8, 0xD0B8},{0x61C9, 0x91AA},{0x61CA, 0xB0C3},{0x61CB, 0xEDAE},{0x61CC, 0x91AB},
- {0x61CD, 0x91AC},{0x61CE, 0x91AD},{0x61CF, 0x91AE},{0x61D0, 0x91AF},{0x61D1, 0xEDAF},{0x61D2, 0xC0C1},{0x61D3, 0x91B0},{0x61D4, 0xE3C1},
- {0x61D5, 0x91B1},{0x61D6, 0x91B2},{0x61D7, 0x91B3},{0x61D8, 0x91B4},{0x61D9, 0x91B5},{0x61DA, 0x91B6},{0x61DB, 0x91B7},{0x61DC, 0x91B8},
- {0x61DD, 0x91B9},{0x61DE, 0x91BA},{0x61DF, 0x91BB},{0x61E0, 0x91BC},{0x61E1, 0x91BD},{0x61E2, 0x91BE},{0x61E3, 0x91BF},{0x61E4, 0x91C0},
- {0x61E5, 0x91C1},{0x61E6, 0xC5B3},{0x61E7, 0x91C2},{0x61E8, 0x91C3},{0x61E9, 0x91C4},{0x61EA, 0x91C5},{0x61EB, 0x91C6},{0x61EC, 0x91C7},
- {0x61ED, 0x91C8},{0x61EE, 0x91C9},{0x61EF, 0x91CA},{0x61F0, 0x91CB},{0x61F1, 0x91CC},{0x61F2, 0x91CD},{0x61F3, 0x91CE},{0x61F4, 0x91CF},
- {0x61F5, 0xE3C2},{0x61F6, 0x91D0},{0x61F7, 0x91D1},{0x61F8, 0x91D2},{0x61F9, 0x91D3},{0x61FA, 0x91D4},{0x61FB, 0x91D5},{0x61FC, 0x91D6},
- {0x61FD, 0x91D7},{0x61FE, 0x91D8},{0x61FF, 0xDCB2},{0x6200, 0x91D9},{0x6201, 0x91DA},{0x6202, 0x91DB},{0x6203, 0x91DC},{0x6204, 0x91DD},
- {0x6205, 0x91DE},{0x6206, 0xEDB0},{0x6207, 0x91DF},{0x6208, 0xB8EA},{0x6209, 0x91E0},{0x620A, 0xCEEC},{0x620B, 0xEAA7},{0x620C, 0xD0E7},
- {0x620D, 0xCAF9},{0x620E, 0xC8D6},{0x620F, 0xCFB7},{0x6210, 0xB3C9},{0x6211, 0xCED2},{0x6212, 0xBDE4},{0x6213, 0x91E1},{0x6214, 0x91E2},
- {0x6215, 0xE3DE},{0x6216, 0xBBF2},{0x6217, 0xEAA8},{0x6218, 0xD5BD},{0x6219, 0x91E3},{0x621A, 0xC6DD},{0x621B, 0xEAA9},{0x621C, 0x91E4},
- {0x621D, 0x91E5},{0x621E, 0x91E6},{0x621F, 0xEAAA},{0x6220, 0x91E7},{0x6221, 0xEAAC},{0x6222, 0xEAAB},{0x6223, 0x91E8},{0x6224, 0xEAAE},
- {0x6225, 0xEAAD},{0x6226, 0x91E9},{0x6227, 0x91EA},{0x6228, 0x91EB},{0x6229, 0x91EC},{0x622A, 0xBDD8},{0x622B, 0x91ED},{0x622C, 0xEAAF},
- {0x622D, 0x91EE},{0x622E, 0xC2BE},{0x622F, 0x91EF},{0x6230, 0x91F0},{0x6231, 0x91F1},{0x6232, 0x91F2},{0x6233, 0xB4C1},{0x6234, 0xB4F7},
- {0x6235, 0x91F3},{0x6236, 0x91F4},{0x6237, 0xBBA7},{0x6238, 0x91F5},{0x6239, 0x91F6},{0x623A, 0x91F7},{0x623B, 0x91F8},{0x623C, 0x91F9},
- {0x623D, 0xECE6},{0x623E, 0xECE5},{0x623F, 0xB7BF},{0x6240, 0xCBF9},{0x6241, 0xB1E2},{0x6242, 0x91FA},{0x6243, 0xECE7},{0x6244, 0x91FB},
- {0x6245, 0x91FC},{0x6246, 0x91FD},{0x6247, 0xC9C8},{0x6248, 0xECE8},{0x6249, 0xECE9},{0x624A, 0x91FE},{0x624B, 0xCAD6},{0x624C, 0xDED0},
- {0x624D, 0xB2C5},{0x624E, 0xD4FA},{0x624F, 0x9240},{0x6250, 0x9241},{0x6251, 0xC6CB},{0x6252, 0xB0C7},{0x6253, 0xB4F2},{0x6254, 0xC8D3},
- {0x6255, 0x9242},{0x6256, 0x9243},{0x6257, 0x9244},{0x6258, 0xCDD0},{0x6259, 0x9245},{0x625A, 0x9246},{0x625B, 0xBFB8},{0x625C, 0x9247},
- {0x625D, 0x9248},{0x625E, 0x9249},{0x625F, 0x924A},{0x6260, 0x924B},{0x6261, 0x924C},{0x6262, 0x924D},{0x6263, 0xBFDB},{0x6264, 0x924E},
- {0x6265, 0x924F},{0x6266, 0xC7A4},{0x6267, 0xD6B4},{0x6268, 0x9250},{0x6269, 0xC0A9},{0x626A, 0xDED1},{0x626B, 0xC9A8},{0x626C, 0xD1EF},
- {0x626D, 0xC5A4},{0x626E, 0xB0E7},{0x626F, 0xB3B6},{0x6270, 0xC8C5},{0x6271, 0x9251},{0x6272, 0x9252},{0x6273, 0xB0E2},{0x6274, 0x9253},
- {0x6275, 0x9254},{0x6276, 0xB7F6},{0x6277, 0x9255},{0x6278, 0x9256},{0x6279, 0xC5FA},{0x627A, 0x9257},{0x627B, 0x9258},{0x627C, 0xB6F3},
- {0x627D, 0x9259},{0x627E, 0xD5D2},{0x627F, 0xB3D0},{0x6280, 0xBCBC},{0x6281, 0x925A},{0x6282, 0x925B},{0x6283, 0x925C},{0x6284, 0xB3AD},
- {0x6285, 0x925D},{0x6286, 0x925E},{0x6287, 0x925F},{0x6288, 0x9260},{0x6289, 0xBEF1},{0x628A, 0xB0D1},{0x628B, 0x9261},{0x628C, 0x9262},
- {0x628D, 0x9263},{0x628E, 0x9264},{0x628F, 0x9265},{0x6290, 0x9266},{0x6291, 0xD2D6},{0x6292, 0xCAE3},{0x6293, 0xD7A5},{0x6294, 0x9267},
- {0x6295, 0xCDB6},{0x6296, 0xB6B6},{0x6297, 0xBFB9},{0x6298, 0xD5DB},{0x6299, 0x9268},{0x629A, 0xB8A7},{0x629B, 0xC5D7},{0x629C, 0x9269},
- {0x629D, 0x926A},{0x629E, 0x926B},{0x629F, 0xDED2},{0x62A0, 0xBFD9},{0x62A1, 0xC2D5},{0x62A2, 0xC7C0},{0x62A3, 0x926C},{0x62A4, 0xBBA4},
- {0x62A5, 0xB1A8},{0x62A6, 0x926D},{0x62A7, 0x926E},{0x62A8, 0xC5EA},{0x62A9, 0x926F},{0x62AA, 0x9270},{0x62AB, 0xC5FB},{0x62AC, 0xCCA7},
- {0x62AD, 0x9271},{0x62AE, 0x9272},{0x62AF, 0x9273},{0x62B0, 0x9274},{0x62B1, 0xB1A7},{0x62B2, 0x9275},{0x62B3, 0x9276},{0x62B4, 0x9277},
- {0x62B5, 0xB5D6},{0x62B6, 0x9278},{0x62B7, 0x9279},{0x62B8, 0x927A},{0x62B9, 0xC4A8},{0x62BA, 0x927B},{0x62BB, 0xDED3},{0x62BC, 0xD1BA},
- {0x62BD, 0xB3E9},{0x62BE, 0x927C},{0x62BF, 0xC3F2},{0x62C0, 0x927D},{0x62C1, 0x927E},{0x62C2, 0xB7F7},{0x62C3, 0x9280},{0x62C4, 0xD6F4},
- {0x62C5, 0xB5A3},{0x62C6, 0xB2F0},{0x62C7, 0xC4B4},{0x62C8, 0xC4E9},{0x62C9, 0xC0AD},{0x62CA, 0xDED4},{0x62CB, 0x9281},{0x62CC, 0xB0E8},
- {0x62CD, 0xC5C4},{0x62CE, 0xC1E0},{0x62CF, 0x9282},{0x62D0, 0xB9D5},{0x62D1, 0x9283},{0x62D2, 0xBEDC},{0x62D3, 0xCDD8},{0x62D4, 0xB0CE},
- {0x62D5, 0x9284},{0x62D6, 0xCDCF},{0x62D7, 0xDED6},{0x62D8, 0xBED0},{0x62D9, 0xD7BE},{0x62DA, 0xDED5},{0x62DB, 0xD5D0},{0x62DC, 0xB0DD},
- {0x62DD, 0x9285},{0x62DE, 0x9286},{0x62DF, 0xC4E2},{0x62E0, 0x9287},{0x62E1, 0x9288},{0x62E2, 0xC2A3},{0x62E3, 0xBCF0},{0x62E4, 0x9289},
- {0x62E5, 0xD3B5},{0x62E6, 0xC0B9},{0x62E7, 0xC5A1},{0x62E8, 0xB2A6},{0x62E9, 0xD4F1},{0x62EA, 0x928A},{0x62EB, 0x928B},{0x62EC, 0xC0A8},
- {0x62ED, 0xCAC3},{0x62EE, 0xDED7},{0x62EF, 0xD5FC},{0x62F0, 0x928C},{0x62F1, 0xB9B0},{0x62F2, 0x928D},{0x62F3, 0xC8AD},{0x62F4, 0xCBA9},
- {0x62F5, 0x928E},{0x62F6, 0xDED9},{0x62F7, 0xBFBD},{0x62F8, 0x928F},{0x62F9, 0x9290},{0x62FA, 0x9291},{0x62FB, 0x9292},{0x62FC, 0xC6B4},
- {0x62FD, 0xD7A7},{0x62FE, 0xCAB0},{0x62FF, 0xC4C3},{0x6300, 0x9293},{0x6301, 0xB3D6},{0x6302, 0xB9D2},{0x6303, 0x9294},{0x6304, 0x9295},
- {0x6305, 0x9296},{0x6306, 0x9297},{0x6307, 0xD6B8},{0x6308, 0xEAFC},{0x6309, 0xB0B4},{0x630A, 0x9298},{0x630B, 0x9299},{0x630C, 0x929A},
- {0x630D, 0x929B},{0x630E, 0xBFE6},{0x630F, 0x929C},{0x6310, 0x929D},{0x6311, 0xCCF4},{0x6312, 0x929E},{0x6313, 0x929F},{0x6314, 0x92A0},
- {0x6315, 0x92A1},{0x6316, 0xCDDA},{0x6317, 0x92A2},{0x6318, 0x92A3},{0x6319, 0x92A4},{0x631A, 0xD6BF},{0x631B, 0xC2CE},{0x631C, 0x92A5},
- {0x631D, 0xCECE},{0x631E, 0xCCA2},{0x631F, 0xD0AE},{0x6320, 0xC4D3},{0x6321, 0xB5B2},{0x6322, 0xDED8},{0x6323, 0xD5F5},{0x6324, 0xBCB7},
- {0x6325, 0xBBD3},{0x6326, 0x92A6},{0x6327, 0x92A7},{0x6328, 0xB0A4},{0x6329, 0x92A8},{0x632A, 0xC5B2},{0x632B, 0xB4EC},{0x632C, 0x92A9},
- {0x632D, 0x92AA},{0x632E, 0x92AB},{0x632F, 0xD5F1},{0x6330, 0x92AC},{0x6331, 0x92AD},{0x6332, 0xEAFD},{0x6333, 0x92AE},{0x6334, 0x92AF},
- {0x6335, 0x92B0},{0x6336, 0x92B1},{0x6337, 0x92B2},{0x6338, 0x92B3},{0x6339, 0xDEDA},{0x633A, 0xCDA6},{0x633B, 0x92B4},{0x633C, 0x92B5},
- {0x633D, 0xCDEC},{0x633E, 0x92B6},{0x633F, 0x92B7},{0x6340, 0x92B8},{0x6341, 0x92B9},{0x6342, 0xCEE6},{0x6343, 0xDEDC},{0x6344, 0x92BA},
- {0x6345, 0xCDB1},{0x6346, 0xC0A6},{0x6347, 0x92BB},{0x6348, 0x92BC},{0x6349, 0xD7BD},{0x634A, 0x92BD},{0x634B, 0xDEDB},{0x634C, 0xB0C6},
- {0x634D, 0xBAB4},{0x634E, 0xC9D3},{0x634F, 0xC4F3},{0x6350, 0xBEE8},{0x6351, 0x92BE},{0x6352, 0x92BF},{0x6353, 0x92C0},{0x6354, 0x92C1},
- {0x6355, 0xB2B6},{0x6356, 0x92C2},{0x6357, 0x92C3},{0x6358, 0x92C4},{0x6359, 0x92C5},{0x635A, 0x92C6},{0x635B, 0x92C7},{0x635C, 0x92C8},
- {0x635D, 0x92C9},{0x635E, 0xC0CC},{0x635F, 0xCBF0},{0x6360, 0x92CA},{0x6361, 0xBCF1},{0x6362, 0xBBBB},{0x6363, 0xB5B7},{0x6364, 0x92CB},
- {0x6365, 0x92CC},{0x6366, 0x92CD},{0x6367, 0xC5F5},{0x6368, 0x92CE},{0x6369, 0xDEE6},{0x636A, 0x92CF},{0x636B, 0x92D0},{0x636C, 0x92D1},
- {0x636D, 0xDEE3},{0x636E, 0xBEDD},{0x636F, 0x92D2},{0x6370, 0x92D3},{0x6371, 0xDEDF},{0x6372, 0x92D4},{0x6373, 0x92D5},{0x6374, 0x92D6},
- {0x6375, 0x92D7},{0x6376, 0xB4B7},{0x6377, 0xBDDD},{0x6378, 0x92D8},{0x6379, 0x92D9},{0x637A, 0xDEE0},{0x637B, 0xC4ED},{0x637C, 0x92DA},
- {0x637D, 0x92DB},{0x637E, 0x92DC},{0x637F, 0x92DD},{0x6380, 0xCFC6},{0x6381, 0x92DE},{0x6382, 0xB5E0},{0x6383, 0x92DF},{0x6384, 0x92E0},
- {0x6385, 0x92E1},{0x6386, 0x92E2},{0x6387, 0xB6DE},{0x6388, 0xCADA},{0x6389, 0xB5F4},{0x638A, 0xDEE5},{0x638B, 0x92E3},{0x638C, 0xD5C6},
- {0x638D, 0x92E4},{0x638E, 0xDEE1},{0x638F, 0xCCCD},{0x6390, 0xC6FE},{0x6391, 0x92E5},{0x6392, 0xC5C5},{0x6393, 0x92E6},{0x6394, 0x92E7},
- {0x6395, 0x92E8},{0x6396, 0xD2B4},{0x6397, 0x92E9},{0x6398, 0xBEF2},{0x6399, 0x92EA},{0x639A, 0x92EB},{0x639B, 0x92EC},{0x639C, 0x92ED},
- {0x639D, 0x92EE},{0x639E, 0x92EF},{0x639F, 0x92F0},{0x63A0, 0xC2D3},{0x63A1, 0x92F1},{0x63A2, 0xCCBD},{0x63A3, 0xB3B8},{0x63A4, 0x92F2},
- {0x63A5, 0xBDD3},{0x63A6, 0x92F3},{0x63A7, 0xBFD8},{0x63A8, 0xCDC6},{0x63A9, 0xD1DA},{0x63AA, 0xB4EB},{0x63AB, 0x92F4},{0x63AC, 0xDEE4},
- {0x63AD, 0xDEDD},{0x63AE, 0xDEE7},{0x63AF, 0x92F5},{0x63B0, 0xEAFE},{0x63B1, 0x92F6},{0x63B2, 0x92F7},{0x63B3, 0xC2B0},{0x63B4, 0xDEE2},
- {0x63B5, 0x92F8},{0x63B6, 0x92F9},{0x63B7, 0xD6C0},{0x63B8, 0xB5A7},{0x63B9, 0x92FA},{0x63BA, 0xB2F4},{0x63BB, 0x92FB},{0x63BC, 0xDEE8},
- {0x63BD, 0x92FC},{0x63BE, 0xDEF2},{0x63BF, 0x92FD},{0x63C0, 0x92FE},{0x63C1, 0x9340},{0x63C2, 0x9341},{0x63C3, 0x9342},{0x63C4, 0xDEED},
- {0x63C5, 0x9343},{0x63C6, 0xDEF1},{0x63C7, 0x9344},{0x63C8, 0x9345},{0x63C9, 0xC8E0},{0x63CA, 0x9346},{0x63CB, 0x9347},{0x63CC, 0x9348},
- {0x63CD, 0xD7E1},{0x63CE, 0xDEEF},{0x63CF, 0xC3E8},{0x63D0, 0xCCE1},{0x63D1, 0x9349},{0x63D2, 0xB2E5},{0x63D3, 0x934A},{0x63D4, 0x934B},
- {0x63D5, 0x934C},{0x63D6, 0xD2BE},{0x63D7, 0x934D},{0x63D8, 0x934E},{0x63D9, 0x934F},{0x63DA, 0x9350},{0x63DB, 0x9351},{0x63DC, 0x9352},
- {0x63DD, 0x9353},{0x63DE, 0xDEEE},{0x63DF, 0x9354},{0x63E0, 0xDEEB},{0x63E1, 0xCED5},{0x63E2, 0x9355},{0x63E3, 0xB4A7},{0x63E4, 0x9356},
- {0x63E5, 0x9357},{0x63E6, 0x9358},{0x63E7, 0x9359},{0x63E8, 0x935A},{0x63E9, 0xBFAB},{0x63EA, 0xBEBE},{0x63EB, 0x935B},{0x63EC, 0x935C},
- {0x63ED, 0xBDD2},{0x63EE, 0x935D},{0x63EF, 0x935E},{0x63F0, 0x935F},{0x63F1, 0x9360},{0x63F2, 0xDEE9},{0x63F3, 0x9361},{0x63F4, 0xD4AE},
- {0x63F5, 0x9362},{0x63F6, 0xDEDE},{0x63F7, 0x9363},{0x63F8, 0xDEEA},{0x63F9, 0x9364},{0x63FA, 0x9365},{0x63FB, 0x9366},{0x63FC, 0x9367},
- {0x63FD, 0xC0BF},{0x63FE, 0x9368},{0x63FF, 0xDEEC},{0x6400, 0xB2F3},{0x6401, 0xB8E9},{0x6402, 0xC2A7},{0x6403, 0x9369},{0x6404, 0x936A},
- {0x6405, 0xBDC1},{0x6406, 0x936B},{0x6407, 0x936C},{0x6408, 0x936D},{0x6409, 0x936E},{0x640A, 0x936F},{0x640B, 0xDEF5},{0x640C, 0xDEF8},
- {0x640D, 0x9370},{0x640E, 0x9371},{0x640F, 0xB2AB},{0x6410, 0xB4A4},{0x6411, 0x9372},{0x6412, 0x9373},{0x6413, 0xB4EA},{0x6414, 0xC9A6},
- {0x6415, 0x9374},{0x6416, 0x9375},{0x6417, 0x9376},{0x6418, 0x9377},{0x6419, 0x9378},{0x641A, 0x9379},{0x641B, 0xDEF6},{0x641C, 0xCBD1},
- {0x641D, 0x937A},{0x641E, 0xB8E3},{0x641F, 0x937B},{0x6420, 0xDEF7},{0x6421, 0xDEFA},{0x6422, 0x937C},{0x6423, 0x937D},{0x6424, 0x937E},
- {0x6425, 0x9380},{0x6426, 0xDEF9},{0x6427, 0x9381},{0x6428, 0x9382},{0x6429, 0x9383},{0x642A, 0xCCC2},{0x642B, 0x9384},{0x642C, 0xB0E1},
- {0x642D, 0xB4EE},{0x642E, 0x9385},{0x642F, 0x9386},{0x6430, 0x9387},{0x6431, 0x9388},{0x6432, 0x9389},{0x6433, 0x938A},{0x6434, 0xE5BA},
- {0x6435, 0x938B},{0x6436, 0x938C},{0x6437, 0x938D},{0x6438, 0x938E},{0x6439, 0x938F},{0x643A, 0xD0AF},{0x643B, 0x9390},{0x643C, 0x9391},
- {0x643D, 0xB2EB},{0x643E, 0x9392},{0x643F, 0xEBA1},{0x6440, 0x9393},{0x6441, 0xDEF4},{0x6442, 0x9394},{0x6443, 0x9395},{0x6444, 0xC9E3},
- {0x6445, 0xDEF3},{0x6446, 0xB0DA},{0x6447, 0xD2A1},{0x6448, 0xB1F7},{0x6449, 0x9396},{0x644A, 0xCCAF},{0x644B, 0x9397},{0x644C, 0x9398},
- {0x644D, 0x9399},{0x644E, 0x939A},{0x644F, 0x939B},{0x6450, 0x939C},{0x6451, 0x939D},{0x6452, 0xDEF0},{0x6453, 0x939E},{0x6454, 0xCBA4},
- {0x6455, 0x939F},{0x6456, 0x93A0},{0x6457, 0x93A1},{0x6458, 0xD5AA},{0x6459, 0x93A2},{0x645A, 0x93A3},{0x645B, 0x93A4},{0x645C, 0x93A5},
- {0x645D, 0x93A6},{0x645E, 0xDEFB},{0x645F, 0x93A7},{0x6460, 0x93A8},{0x6461, 0x93A9},{0x6462, 0x93AA},{0x6463, 0x93AB},{0x6464, 0x93AC},
- {0x6465, 0x93AD},{0x6466, 0x93AE},{0x6467, 0xB4DD},{0x6468, 0x93AF},{0x6469, 0xC4A6},{0x646A, 0x93B0},{0x646B, 0x93B1},{0x646C, 0x93B2},
- {0x646D, 0xDEFD},{0x646E, 0x93B3},{0x646F, 0x93B4},{0x6470, 0x93B5},{0x6471, 0x93B6},{0x6472, 0x93B7},{0x6473, 0x93B8},{0x6474, 0x93B9},
- {0x6475, 0x93BA},{0x6476, 0x93BB},{0x6477, 0x93BC},{0x6478, 0xC3FE},{0x6479, 0xC4A1},{0x647A, 0xDFA1},{0x647B, 0x93BD},{0x647C, 0x93BE},
- {0x647D, 0x93BF},{0x647E, 0x93C0},{0x647F, 0x93C1},{0x6480, 0x93C2},{0x6481, 0x93C3},{0x6482, 0xC1CC},{0x6483, 0x93C4},{0x6484, 0xDEFC},
- {0x6485, 0xBEEF},{0x6486, 0x93C5},{0x6487, 0xC6B2},{0x6488, 0x93C6},{0x6489, 0x93C7},{0x648A, 0x93C8},{0x648B, 0x93C9},{0x648C, 0x93CA},
- {0x648D, 0x93CB},{0x648E, 0x93CC},{0x648F, 0x93CD},{0x6490, 0x93CE},{0x6491, 0xB3C5},{0x6492, 0xC8F6},{0x6493, 0x93CF},{0x6494, 0x93D0},
- {0x6495, 0xCBBA},{0x6496, 0xDEFE},{0x6497, 0x93D1},{0x6498, 0x93D2},{0x6499, 0xDFA4},{0x649A, 0x93D3},{0x649B, 0x93D4},{0x649C, 0x93D5},
- {0x649D, 0x93D6},{0x649E, 0xD7B2},{0x649F, 0x93D7},{0x64A0, 0x93D8},{0x64A1, 0x93D9},{0x64A2, 0x93DA},{0x64A3, 0x93DB},{0x64A4, 0xB3B7},
- {0x64A5, 0x93DC},{0x64A6, 0x93DD},{0x64A7, 0x93DE},{0x64A8, 0x93DF},{0x64A9, 0xC1C3},{0x64AA, 0x93E0},{0x64AB, 0x93E1},{0x64AC, 0xC7CB},
- {0x64AD, 0xB2A5},{0x64AE, 0xB4E9},{0x64AF, 0x93E2},{0x64B0, 0xD7AB},{0x64B1, 0x93E3},{0x64B2, 0x93E4},{0x64B3, 0x93E5},{0x64B4, 0x93E6},
- {0x64B5, 0xC4EC},{0x64B6, 0x93E7},{0x64B7, 0xDFA2},{0x64B8, 0xDFA3},{0x64B9, 0x93E8},{0x64BA, 0xDFA5},{0x64BB, 0x93E9},{0x64BC, 0xBAB3},
- {0x64BD, 0x93EA},{0x64BE, 0x93EB},{0x64BF, 0x93EC},{0x64C0, 0xDFA6},{0x64C1, 0x93ED},{0x64C2, 0xC0DE},{0x64C3, 0x93EE},{0x64C4, 0x93EF},
- {0x64C5, 0xC9C3},{0x64C6, 0x93F0},{0x64C7, 0x93F1},{0x64C8, 0x93F2},{0x64C9, 0x93F3},{0x64CA, 0x93F4},{0x64CB, 0x93F5},{0x64CC, 0x93F6},
- {0x64CD, 0xB2D9},{0x64CE, 0xC7E6},{0x64CF, 0x93F7},{0x64D0, 0xDFA7},{0x64D1, 0x93F8},{0x64D2, 0xC7DC},{0x64D3, 0x93F9},{0x64D4, 0x93FA},
- {0x64D5, 0x93FB},{0x64D6, 0x93FC},{0x64D7, 0xDFA8},{0x64D8, 0xEBA2},{0x64D9, 0x93FD},{0x64DA, 0x93FE},{0x64DB, 0x9440},{0x64DC, 0x9441},
- {0x64DD, 0x9442},{0x64DE, 0xCBD3},{0x64DF, 0x9443},{0x64E0, 0x9444},{0x64E1, 0x9445},{0x64E2, 0xDFAA},{0x64E3, 0x9446},{0x64E4, 0xDFA9},
- {0x64E5, 0x9447},{0x64E6, 0xB2C1},{0x64E7, 0x9448},{0x64E8, 0x9449},{0x64E9, 0x944A},{0x64EA, 0x944B},{0x64EB, 0x944C},{0x64EC, 0x944D},
- {0x64ED, 0x944E},{0x64EE, 0x944F},{0x64EF, 0x9450},{0x64F0, 0x9451},{0x64F1, 0x9452},{0x64F2, 0x9453},{0x64F3, 0x9454},{0x64F4, 0x9455},
- {0x64F5, 0x9456},{0x64F6, 0x9457},{0x64F7, 0x9458},{0x64F8, 0x9459},{0x64F9, 0x945A},{0x64FA, 0x945B},{0x64FB, 0x945C},{0x64FC, 0x945D},
- {0x64FD, 0x945E},{0x64FE, 0x945F},{0x64FF, 0x9460},{0x6500, 0xC5CA},{0x6501, 0x9461},{0x6502, 0x9462},{0x6503, 0x9463},{0x6504, 0x9464},
- {0x6505, 0x9465},{0x6506, 0x9466},{0x6507, 0x9467},{0x6508, 0x9468},{0x6509, 0xDFAB},{0x650A, 0x9469},{0x650B, 0x946A},{0x650C, 0x946B},
- {0x650D, 0x946C},{0x650E, 0x946D},{0x650F, 0x946E},{0x6510, 0x946F},{0x6511, 0x9470},{0x6512, 0xD4DC},{0x6513, 0x9471},{0x6514, 0x9472},
- {0x6515, 0x9473},{0x6516, 0x9474},{0x6517, 0x9475},{0x6518, 0xC8C1},{0x6519, 0x9476},{0x651A, 0x9477},{0x651B, 0x9478},{0x651C, 0x9479},
- {0x651D, 0x947A},{0x651E, 0x947B},{0x651F, 0x947C},{0x6520, 0x947D},{0x6521, 0x947E},{0x6522, 0x9480},{0x6523, 0x9481},{0x6524, 0x9482},
- {0x6525, 0xDFAC},{0x6526, 0x9483},{0x6527, 0x9484},{0x6528, 0x9485},{0x6529, 0x9486},{0x652A, 0x9487},{0x652B, 0xBEF0},{0x652C, 0x9488},
- {0x652D, 0x9489},{0x652E, 0xDFAD},{0x652F, 0xD6A7},{0x6530, 0x948A},{0x6531, 0x948B},{0x6532, 0x948C},{0x6533, 0x948D},{0x6534, 0xEAB7},
- {0x6535, 0xEBB6},{0x6536, 0xCAD5},{0x6537, 0x948E},{0x6538, 0xD8FC},{0x6539, 0xB8C4},{0x653A, 0x948F},{0x653B, 0xB9A5},{0x653C, 0x9490},
- {0x653D, 0x9491},{0x653E, 0xB7C5},{0x653F, 0xD5FE},{0x6540, 0x9492},{0x6541, 0x9493},{0x6542, 0x9494},{0x6543, 0x9495},{0x6544, 0x9496},
- {0x6545, 0xB9CA},{0x6546, 0x9497},{0x6547, 0x9498},{0x6548, 0xD0A7},{0x6549, 0xF4CD},{0x654A, 0x9499},{0x654B, 0x949A},{0x654C, 0xB5D0},
- {0x654D, 0x949B},{0x654E, 0x949C},{0x654F, 0xC3F4},{0x6550, 0x949D},{0x6551, 0xBEC8},{0x6552, 0x949E},{0x6553, 0x949F},{0x6554, 0x94A0},
- {0x6555, 0xEBB7},{0x6556, 0xB0BD},{0x6557, 0x94A1},{0x6558, 0x94A2},{0x6559, 0xBDCC},{0x655A, 0x94A3},{0x655B, 0xC1B2},{0x655C, 0x94A4},
- {0x655D, 0xB1D6},{0x655E, 0xB3A8},{0x655F, 0x94A5},{0x6560, 0x94A6},{0x6561, 0x94A7},{0x6562, 0xB8D2},{0x6563, 0xC9A2},{0x6564, 0x94A8},
- {0x6565, 0x94A9},{0x6566, 0xB6D8},{0x6567, 0x94AA},{0x6568, 0x94AB},{0x6569, 0x94AC},{0x656A, 0x94AD},{0x656B, 0xEBB8},{0x656C, 0xBEB4},
- {0x656D, 0x94AE},{0x656E, 0x94AF},{0x656F, 0x94B0},{0x6570, 0xCAFD},{0x6571, 0x94B1},{0x6572, 0xC7C3},{0x6573, 0x94B2},{0x6574, 0xD5FB},
- {0x6575, 0x94B3},{0x6576, 0x94B4},{0x6577, 0xB7F3},{0x6578, 0x94B5},{0x6579, 0x94B6},{0x657A, 0x94B7},{0x657B, 0x94B8},{0x657C, 0x94B9},
- {0x657D, 0x94BA},{0x657E, 0x94BB},{0x657F, 0x94BC},{0x6580, 0x94BD},{0x6581, 0x94BE},{0x6582, 0x94BF},{0x6583, 0x94C0},{0x6584, 0x94C1},
- {0x6585, 0x94C2},{0x6586, 0x94C3},{0x6587, 0xCEC4},{0x6588, 0x94C4},{0x6589, 0x94C5},{0x658A, 0x94C6},{0x658B, 0xD5AB},{0x658C, 0xB1F3},
- {0x658D, 0x94C7},{0x658E, 0x94C8},{0x658F, 0x94C9},{0x6590, 0xECB3},{0x6591, 0xB0DF},{0x6592, 0x94CA},{0x6593, 0xECB5},{0x6594, 0x94CB},
- {0x6595, 0x94CC},{0x6596, 0x94CD},{0x6597, 0xB6B7},{0x6598, 0x94CE},{0x6599, 0xC1CF},{0x659A, 0x94CF},{0x659B, 0xF5FA},{0x659C, 0xD0B1},
- {0x659D, 0x94D0},{0x659E, 0x94D1},{0x659F, 0xD5E5},{0x65A0, 0x94D2},{0x65A1, 0xCED3},{0x65A2, 0x94D3},{0x65A3, 0x94D4},{0x65A4, 0xBDEF},
- {0x65A5, 0xB3E2},{0x65A6, 0x94D5},{0x65A7, 0xB8AB},{0x65A8, 0x94D6},{0x65A9, 0xD5B6},{0x65AA, 0x94D7},{0x65AB, 0xEDBD},{0x65AC, 0x94D8},
- {0x65AD, 0xB6CF},{0x65AE, 0x94D9},{0x65AF, 0xCBB9},{0x65B0, 0xD0C2},{0x65B1, 0x94DA},{0x65B2, 0x94DB},{0x65B3, 0x94DC},{0x65B4, 0x94DD},
- {0x65B5, 0x94DE},{0x65B6, 0x94DF},{0x65B7, 0x94E0},{0x65B8, 0x94E1},{0x65B9, 0xB7BD},{0x65BA, 0x94E2},{0x65BB, 0x94E3},{0x65BC, 0xECB6},
- {0x65BD, 0xCAA9},{0x65BE, 0x94E4},{0x65BF, 0x94E5},{0x65C0, 0x94E6},{0x65C1, 0xC5D4},{0x65C2, 0x94E7},{0x65C3, 0xECB9},{0x65C4, 0xECB8},
- {0x65C5, 0xC2C3},{0x65C6, 0xECB7},{0x65C7, 0x94E8},{0x65C8, 0x94E9},{0x65C9, 0x94EA},{0x65CA, 0x94EB},{0x65CB, 0xD0FD},{0x65CC, 0xECBA},
- {0x65CD, 0x94EC},{0x65CE, 0xECBB},{0x65CF, 0xD7E5},{0x65D0, 0x94ED},{0x65D1, 0x94EE},{0x65D2, 0xECBC},{0x65D3, 0x94EF},{0x65D4, 0x94F0},
- {0x65D5, 0x94F1},{0x65D6, 0xECBD},{0x65D7, 0xC6EC},{0x65D8, 0x94F2},{0x65D9, 0x94F3},{0x65DA, 0x94F4},{0x65DB, 0x94F5},{0x65DC, 0x94F6},
- {0x65DD, 0x94F7},{0x65DE, 0x94F8},{0x65DF, 0x94F9},{0x65E0, 0xCEDE},{0x65E1, 0x94FA},{0x65E2, 0xBCC8},{0x65E3, 0x94FB},{0x65E4, 0x94FC},
- {0x65E5, 0xC8D5},{0x65E6, 0xB5A9},{0x65E7, 0xBEC9},{0x65E8, 0xD6BC},{0x65E9, 0xD4E7},{0x65EA, 0x94FD},{0x65EB, 0x94FE},{0x65EC, 0xD1AE},
- {0x65ED, 0xD0F1},{0x65EE, 0xEAB8},{0x65EF, 0xEAB9},{0x65F0, 0xEABA},{0x65F1, 0xBAB5},{0x65F2, 0x9540},{0x65F3, 0x9541},{0x65F4, 0x9542},
- {0x65F5, 0x9543},{0x65F6, 0xCAB1},{0x65F7, 0xBFF5},{0x65F8, 0x9544},{0x65F9, 0x9545},{0x65FA, 0xCDFA},{0x65FB, 0x9546},{0x65FC, 0x9547},
- {0x65FD, 0x9548},{0x65FE, 0x9549},{0x65FF, 0x954A},{0x6600, 0xEAC0},{0x6601, 0x954B},{0x6602, 0xB0BA},{0x6603, 0xEABE},{0x6604, 0x954C},
- {0x6605, 0x954D},{0x6606, 0xC0A5},{0x6607, 0x954E},{0x6608, 0x954F},{0x6609, 0x9550},{0x660A, 0xEABB},{0x660B, 0x9551},{0x660C, 0xB2FD},
- {0x660D, 0x9552},{0x660E, 0xC3F7},{0x660F, 0xBBE8},{0x6610, 0x9553},{0x6611, 0x9554},{0x6612, 0x9555},{0x6613, 0xD2D7},{0x6614, 0xCEF4},
- {0x6615, 0xEABF},{0x6616, 0x9556},{0x6617, 0x9557},{0x6618, 0x9558},{0x6619, 0xEABC},{0x661A, 0x9559},{0x661B, 0x955A},{0x661C, 0x955B},
- {0x661D, 0xEAC3},{0x661E, 0x955C},{0x661F, 0xD0C7},{0x6620, 0xD3B3},{0x6621, 0x955D},{0x6622, 0x955E},{0x6623, 0x955F},{0x6624, 0x9560},
- {0x6625, 0xB4BA},{0x6626, 0x9561},{0x6627, 0xC3C1},{0x6628, 0xD7F2},{0x6629, 0x9562},{0x662A, 0x9563},{0x662B, 0x9564},{0x662C, 0x9565},
- {0x662D, 0xD5D1},{0x662E, 0x9566},{0x662F, 0xCAC7},{0x6630, 0x9567},{0x6631, 0xEAC5},{0x6632, 0x9568},{0x6633, 0x9569},{0x6634, 0xEAC4},
- {0x6635, 0xEAC7},{0x6636, 0xEAC6},{0x6637, 0x956A},{0x6638, 0x956B},{0x6639, 0x956C},{0x663A, 0x956D},{0x663B, 0x956E},{0x663C, 0xD6E7},
- {0x663D, 0x956F},{0x663E, 0xCFD4},{0x663F, 0x9570},{0x6640, 0x9571},{0x6641, 0xEACB},{0x6642, 0x9572},{0x6643, 0xBBCE},{0x6644, 0x9573},
- {0x6645, 0x9574},{0x6646, 0x9575},{0x6647, 0x9576},{0x6648, 0x9577},{0x6649, 0x9578},{0x664A, 0x9579},{0x664B, 0xBDFA},{0x664C, 0xC9CE},
- {0x664D, 0x957A},{0x664E, 0x957B},{0x664F, 0xEACC},{0x6650, 0x957C},{0x6651, 0x957D},{0x6652, 0xC9B9},{0x6653, 0xCFFE},{0x6654, 0xEACA},
- {0x6655, 0xD4CE},{0x6656, 0xEACD},{0x6657, 0xEACF},{0x6658, 0x957E},{0x6659, 0x9580},{0x665A, 0xCDED},{0x665B, 0x9581},{0x665C, 0x9582},
- {0x665D, 0x9583},{0x665E, 0x9584},{0x665F, 0xEAC9},{0x6660, 0x9585},{0x6661, 0xEACE},{0x6662, 0x9586},{0x6663, 0x9587},{0x6664, 0xCEEE},
- {0x6665, 0x9588},{0x6666, 0xBBDE},{0x6667, 0x9589},{0x6668, 0xB3BF},{0x6669, 0x958A},{0x666A, 0x958B},{0x666B, 0x958C},{0x666C, 0x958D},
- {0x666D, 0x958E},{0x666E, 0xC6D5},{0x666F, 0xBEB0},{0x6670, 0xCEFA},{0x6671, 0x958F},{0x6672, 0x9590},{0x6673, 0x9591},{0x6674, 0xC7E7},
- {0x6675, 0x9592},{0x6676, 0xBEA7},{0x6677, 0xEAD0},{0x6678, 0x9593},{0x6679, 0x9594},{0x667A, 0xD6C7},{0x667B, 0x9595},{0x667C, 0x9596},
- {0x667D, 0x9597},{0x667E, 0xC1C0},{0x667F, 0x9598},{0x6680, 0x9599},{0x6681, 0x959A},{0x6682, 0xD4DD},{0x6683, 0x959B},{0x6684, 0xEAD1},
- {0x6685, 0x959C},{0x6686, 0x959D},{0x6687, 0xCFBE},{0x6688, 0x959E},{0x6689, 0x959F},{0x668A, 0x95A0},{0x668B, 0x95A1},{0x668C, 0xEAD2},
- {0x668D, 0x95A2},{0x668E, 0x95A3},{0x668F, 0x95A4},{0x6690, 0x95A5},{0x6691, 0xCAEE},{0x6692, 0x95A6},{0x6693, 0x95A7},{0x6694, 0x95A8},
- {0x6695, 0x95A9},{0x6696, 0xC5AF},{0x6697, 0xB0B5},{0x6698, 0x95AA},{0x6699, 0x95AB},{0x669A, 0x95AC},{0x669B, 0x95AD},{0x669C, 0x95AE},
- {0x669D, 0xEAD4},{0x669E, 0x95AF},{0x669F, 0x95B0},{0x66A0, 0x95B1},{0x66A1, 0x95B2},{0x66A2, 0x95B3},{0x66A3, 0x95B4},{0x66A4, 0x95B5},
- {0x66A5, 0x95B6},{0x66A6, 0x95B7},{0x66A7, 0xEAD3},{0x66A8, 0xF4DF},{0x66A9, 0x95B8},{0x66AA, 0x95B9},{0x66AB, 0x95BA},{0x66AC, 0x95BB},
- {0x66AD, 0x95BC},{0x66AE, 0xC4BA},{0x66AF, 0x95BD},{0x66B0, 0x95BE},{0x66B1, 0x95BF},{0x66B2, 0x95C0},{0x66B3, 0x95C1},{0x66B4, 0xB1A9},
- {0x66B5, 0x95C2},{0x66B6, 0x95C3},{0x66B7, 0x95C4},{0x66B8, 0x95C5},{0x66B9, 0xE5DF},{0x66BA, 0x95C6},{0x66BB, 0x95C7},{0x66BC, 0x95C8},
- {0x66BD, 0x95C9},{0x66BE, 0xEAD5},{0x66BF, 0x95CA},{0x66C0, 0x95CB},{0x66C1, 0x95CC},{0x66C2, 0x95CD},{0x66C3, 0x95CE},{0x66C4, 0x95CF},
- {0x66C5, 0x95D0},{0x66C6, 0x95D1},{0x66C7, 0x95D2},{0x66C8, 0x95D3},{0x66C9, 0x95D4},{0x66CA, 0x95D5},{0x66CB, 0x95D6},{0x66CC, 0x95D7},
- {0x66CD, 0x95D8},{0x66CE, 0x95D9},{0x66CF, 0x95DA},{0x66D0, 0x95DB},{0x66D1, 0x95DC},{0x66D2, 0x95DD},{0x66D3, 0x95DE},{0x66D4, 0x95DF},
- {0x66D5, 0x95E0},{0x66D6, 0x95E1},{0x66D7, 0x95E2},{0x66D8, 0x95E3},{0x66D9, 0xCAEF},{0x66DA, 0x95E4},{0x66DB, 0xEAD6},{0x66DC, 0xEAD7},
- {0x66DD, 0xC6D8},{0x66DE, 0x95E5},{0x66DF, 0x95E6},{0x66E0, 0x95E7},{0x66E1, 0x95E8},{0x66E2, 0x95E9},{0x66E3, 0x95EA},{0x66E4, 0x95EB},
- {0x66E5, 0x95EC},{0x66E6, 0xEAD8},{0x66E7, 0x95ED},{0x66E8, 0x95EE},{0x66E9, 0xEAD9},{0x66EA, 0x95EF},{0x66EB, 0x95F0},{0x66EC, 0x95F1},
- {0x66ED, 0x95F2},{0x66EE, 0x95F3},{0x66EF, 0x95F4},{0x66F0, 0xD4BB},{0x66F1, 0x95F5},{0x66F2, 0xC7FA},{0x66F3, 0xD2B7},{0x66F4, 0xB8FC},
- {0x66F5, 0x95F6},{0x66F6, 0x95F7},{0x66F7, 0xEAC2},{0x66F8, 0x95F8},{0x66F9, 0xB2DC},{0x66FA, 0x95F9},{0x66FB, 0x95FA},{0x66FC, 0xC2FC},
- {0x66FD, 0x95FB},{0x66FE, 0xD4F8},{0x66FF, 0xCCE6},{0x6700, 0xD7EE},{0x6701, 0x95FC},{0x6702, 0x95FD},{0x6703, 0x95FE},{0x6704, 0x9640},
- {0x6705, 0x9641},{0x6706, 0x9642},{0x6707, 0x9643},{0x6708, 0xD4C2},{0x6709, 0xD3D0},{0x670A, 0xEBC3},{0x670B, 0xC5F3},{0x670C, 0x9644},
- {0x670D, 0xB7FE},{0x670E, 0x9645},{0x670F, 0x9646},{0x6710, 0xEBD4},{0x6711, 0x9647},{0x6712, 0x9648},{0x6713, 0x9649},{0x6714, 0xCBB7},
- {0x6715, 0xEBDE},{0x6716, 0x964A},{0x6717, 0xC0CA},{0x6718, 0x964B},{0x6719, 0x964C},{0x671A, 0x964D},{0x671B, 0xCDFB},{0x671C, 0x964E},
- {0x671D, 0xB3AF},{0x671E, 0x964F},{0x671F, 0xC6DA},{0x6720, 0x9650},{0x6721, 0x9651},{0x6722, 0x9652},{0x6723, 0x9653},{0x6724, 0x9654},
- {0x6725, 0x9655},{0x6726, 0xEBFC},{0x6727, 0x9656},{0x6728, 0xC4BE},{0x6729, 0x9657},{0x672A, 0xCEB4},{0x672B, 0xC4A9},{0x672C, 0xB1BE},
- {0x672D, 0xD4FD},{0x672E, 0x9658},{0x672F, 0xCAF5},{0x6730, 0x9659},{0x6731, 0xD6EC},{0x6732, 0x965A},{0x6733, 0x965B},{0x6734, 0xC6D3},
- {0x6735, 0xB6E4},{0x6736, 0x965C},{0x6737, 0x965D},{0x6738, 0x965E},{0x6739, 0x965F},{0x673A, 0xBBFA},{0x673B, 0x9660},{0x673C, 0x9661},
- {0x673D, 0xD0E0},{0x673E, 0x9662},{0x673F, 0x9663},{0x6740, 0xC9B1},{0x6741, 0x9664},{0x6742, 0xD4D3},{0x6743, 0xC8A8},{0x6744, 0x9665},
- {0x6745, 0x9666},{0x6746, 0xB8CB},{0x6747, 0x9667},{0x6748, 0xE8BE},{0x6749, 0xC9BC},{0x674A, 0x9668},{0x674B, 0x9669},{0x674C, 0xE8BB},
- {0x674D, 0x966A},{0x674E, 0xC0EE},{0x674F, 0xD0D3},{0x6750, 0xB2C4},{0x6751, 0xB4E5},{0x6752, 0x966B},{0x6753, 0xE8BC},{0x6754, 0x966C},
- {0x6755, 0x966D},{0x6756, 0xD5C8},{0x6757, 0x966E},{0x6758, 0x966F},{0x6759, 0x9670},{0x675A, 0x9671},{0x675B, 0x9672},{0x675C, 0xB6C5},
- {0x675D, 0x9673},{0x675E, 0xE8BD},{0x675F, 0xCAF8},{0x6760, 0xB8DC},{0x6761, 0xCCF5},{0x6762, 0x9674},{0x6763, 0x9675},{0x6764, 0x9676},
- {0x6765, 0xC0B4},{0x6766, 0x9677},{0x6767, 0x9678},{0x6768, 0xD1EE},{0x6769, 0xE8BF},{0x676A, 0xE8C2},{0x676B, 0x9679},{0x676C, 0x967A},
- {0x676D, 0xBABC},{0x676E, 0x967B},{0x676F, 0xB1AD},{0x6770, 0xBDDC},{0x6771, 0x967C},{0x6772, 0xEABD},{0x6773, 0xE8C3},{0x6774, 0x967D},
- {0x6775, 0xE8C6},{0x6776, 0x967E},{0x6777, 0xE8CB},{0x6778, 0x9680},{0x6779, 0x9681},{0x677A, 0x9682},{0x677B, 0x9683},{0x677C, 0xE8CC},
- {0x677D, 0x9684},{0x677E, 0xCBC9},{0x677F, 0xB0E5},{0x6780, 0x9685},{0x6781, 0xBCAB},{0x6782, 0x9686},{0x6783, 0x9687},{0x6784, 0xB9B9},
- {0x6785, 0x9688},{0x6786, 0x9689},{0x6787, 0xE8C1},{0x6788, 0x968A},{0x6789, 0xCDF7},{0x678A, 0x968B},{0x678B, 0xE8CA},{0x678C, 0x968C},
- {0x678D, 0x968D},{0x678E, 0x968E},{0x678F, 0x968F},{0x6790, 0xCEF6},{0x6791, 0x9690},{0x6792, 0x9691},{0x6793, 0x9692},{0x6794, 0x9693},
- {0x6795, 0xD5ED},{0x6796, 0x9694},{0x6797, 0xC1D6},{0x6798, 0xE8C4},{0x6799, 0x9695},{0x679A, 0xC3B6},{0x679B, 0x9696},{0x679C, 0xB9FB},
- {0x679D, 0xD6A6},{0x679E, 0xE8C8},{0x679F, 0x9697},{0x67A0, 0x9698},{0x67A1, 0x9699},{0x67A2, 0xCAE0},{0x67A3, 0xD4E6},{0x67A4, 0x969A},
- {0x67A5, 0xE8C0},{0x67A6, 0x969B},{0x67A7, 0xE8C5},{0x67A8, 0xE8C7},{0x67A9, 0x969C},{0x67AA, 0xC7B9},{0x67AB, 0xB7E3},{0x67AC, 0x969D},
- {0x67AD, 0xE8C9},{0x67AE, 0x969E},{0x67AF, 0xBFDD},{0x67B0, 0xE8D2},{0x67B1, 0x969F},{0x67B2, 0x96A0},{0x67B3, 0xE8D7},{0x67B4, 0x96A1},
- {0x67B5, 0xE8D5},{0x67B6, 0xBCDC},{0x67B7, 0xBCCF},{0x67B8, 0xE8DB},{0x67B9, 0x96A2},{0x67BA, 0x96A3},{0x67BB, 0x96A4},{0x67BC, 0x96A5},
- {0x67BD, 0x96A6},{0x67BE, 0x96A7},{0x67BF, 0x96A8},{0x67C0, 0x96A9},{0x67C1, 0xE8DE},{0x67C2, 0x96AA},{0x67C3, 0xE8DA},{0x67C4, 0xB1FA},
- {0x67C5, 0x96AB},{0x67C6, 0x96AC},{0x67C7, 0x96AD},{0x67C8, 0x96AE},{0x67C9, 0x96AF},{0x67CA, 0x96B0},{0x67CB, 0x96B1},{0x67CC, 0x96B2},
- {0x67CD, 0x96B3},{0x67CE, 0x96B4},{0x67CF, 0xB0D8},{0x67D0, 0xC4B3},{0x67D1, 0xB8CC},{0x67D2, 0xC6E2},{0x67D3, 0xC8BE},{0x67D4, 0xC8E1},
- {0x67D5, 0x96B5},{0x67D6, 0x96B6},{0x67D7, 0x96B7},{0x67D8, 0xE8CF},{0x67D9, 0xE8D4},{0x67DA, 0xE8D6},{0x67DB, 0x96B8},{0x67DC, 0xB9F1},
- {0x67DD, 0xE8D8},{0x67DE, 0xD7F5},{0x67DF, 0x96B9},{0x67E0, 0xC4FB},{0x67E1, 0x96BA},{0x67E2, 0xE8DC},{0x67E3, 0x96BB},{0x67E4, 0x96BC},
- {0x67E5, 0xB2E9},{0x67E6, 0x96BD},{0x67E7, 0x96BE},{0x67E8, 0x96BF},{0x67E9, 0xE8D1},{0x67EA, 0x96C0},{0x67EB, 0x96C1},{0x67EC, 0xBCED},
- {0x67ED, 0x96C2},{0x67EE, 0x96C3},{0x67EF, 0xBFC2},{0x67F0, 0xE8CD},{0x67F1, 0xD6F9},{0x67F2, 0x96C4},{0x67F3, 0xC1F8},{0x67F4, 0xB2F1},
- {0x67F5, 0x96C5},{0x67F6, 0x96C6},{0x67F7, 0x96C7},{0x67F8, 0x96C8},{0x67F9, 0x96C9},{0x67FA, 0x96CA},{0x67FB, 0x96CB},{0x67FC, 0x96CC},
- {0x67FD, 0xE8DF},{0x67FE, 0x96CD},{0x67FF, 0xCAC1},{0x6800, 0xE8D9},{0x6801, 0x96CE},{0x6802, 0x96CF},{0x6803, 0x96D0},{0x6804, 0x96D1},
- {0x6805, 0xD5A4},{0x6806, 0x96D2},{0x6807, 0xB1EA},{0x6808, 0xD5BB},{0x6809, 0xE8CE},{0x680A, 0xE8D0},{0x680B, 0xB6B0},{0x680C, 0xE8D3},
- {0x680D, 0x96D3},{0x680E, 0xE8DD},{0x680F, 0xC0B8},{0x6810, 0x96D4},{0x6811, 0xCAF7},{0x6812, 0x96D5},{0x6813, 0xCBA8},{0x6814, 0x96D6},
- {0x6815, 0x96D7},{0x6816, 0xC6DC},{0x6817, 0xC0F5},{0x6818, 0x96D8},{0x6819, 0x96D9},{0x681A, 0x96DA},{0x681B, 0x96DB},{0x681C, 0x96DC},
- {0x681D, 0xE8E9},{0x681E, 0x96DD},{0x681F, 0x96DE},{0x6820, 0x96DF},{0x6821, 0xD0A3},{0x6822, 0x96E0},{0x6823, 0x96E1},{0x6824, 0x96E2},
- {0x6825, 0x96E3},{0x6826, 0x96E4},{0x6827, 0x96E5},{0x6828, 0x96E6},{0x6829, 0xE8F2},{0x682A, 0xD6EA},{0x682B, 0x96E7},{0x682C, 0x96E8},
- {0x682D, 0x96E9},{0x682E, 0x96EA},{0x682F, 0x96EB},{0x6830, 0x96EC},{0x6831, 0x96ED},{0x6832, 0xE8E0},{0x6833, 0xE8E1},{0x6834, 0x96EE},
- {0x6835, 0x96EF},{0x6836, 0x96F0},{0x6837, 0xD1F9},{0x6838, 0xBACB},{0x6839, 0xB8F9},{0x683A, 0x96F1},{0x683B, 0x96F2},{0x683C, 0xB8F1},
- {0x683D, 0xD4D4},{0x683E, 0xE8EF},{0x683F, 0x96F3},{0x6840, 0xE8EE},{0x6841, 0xE8EC},{0x6842, 0xB9F0},{0x6843, 0xCCD2},{0x6844, 0xE8E6},
- {0x6845, 0xCEA6},{0x6846, 0xBFF2},{0x6847, 0x96F4},{0x6848, 0xB0B8},{0x6849, 0xE8F1},{0x684A, 0xE8F0},{0x684B, 0x96F5},{0x684C, 0xD7C0},
- {0x684D, 0x96F6},{0x684E, 0xE8E4},{0x684F, 0x96F7},{0x6850, 0xCDA9},{0x6851, 0xC9A3},{0x6852, 0x96F8},{0x6853, 0xBBB8},{0x6854, 0xBDDB},
- {0x6855, 0xE8EA},{0x6856, 0x96F9},{0x6857, 0x96FA},{0x6858, 0x96FB},{0x6859, 0x96FC},{0x685A, 0x96FD},{0x685B, 0x96FE},{0x685C, 0x9740},
- {0x685D, 0x9741},{0x685E, 0x9742},{0x685F, 0x9743},{0x6860, 0xE8E2},{0x6861, 0xE8E3},{0x6862, 0xE8E5},{0x6863, 0xB5B5},{0x6864, 0xE8E7},
- {0x6865, 0xC7C5},{0x6866, 0xE8EB},{0x6867, 0xE8ED},{0x6868, 0xBDB0},{0x6869, 0xD7AE},{0x686A, 0x9744},{0x686B, 0xE8F8},{0x686C, 0x9745},
- {0x686D, 0x9746},{0x686E, 0x9747},{0x686F, 0x9748},{0x6870, 0x9749},{0x6871, 0x974A},{0x6872, 0x974B},{0x6873, 0x974C},{0x6874, 0xE8F5},
- {0x6875, 0x974D},{0x6876, 0xCDB0},{0x6877, 0xE8F6},{0x6878, 0x974E},{0x6879, 0x974F},{0x687A, 0x9750},{0x687B, 0x9751},{0x687C, 0x9752},
- {0x687D, 0x9753},{0x687E, 0x9754},{0x687F, 0x9755},{0x6880, 0x9756},{0x6881, 0xC1BA},{0x6882, 0x9757},{0x6883, 0xE8E8},{0x6884, 0x9758},
- {0x6885, 0xC3B7},{0x6886, 0xB0F0},{0x6887, 0x9759},{0x6888, 0x975A},{0x6889, 0x975B},{0x688A, 0x975C},{0x688B, 0x975D},{0x688C, 0x975E},
- {0x688D, 0x975F},{0x688E, 0x9760},{0x688F, 0xE8F4},{0x6890, 0x9761},{0x6891, 0x9762},{0x6892, 0x9763},{0x6893, 0xE8F7},{0x6894, 0x9764},
- {0x6895, 0x9765},{0x6896, 0x9766},{0x6897, 0xB9A3},{0x6898, 0x9767},{0x6899, 0x9768},{0x689A, 0x9769},{0x689B, 0x976A},{0x689C, 0x976B},
- {0x689D, 0x976C},{0x689E, 0x976D},{0x689F, 0x976E},{0x68A0, 0x976F},{0x68A1, 0x9770},{0x68A2, 0xC9D2},{0x68A3, 0x9771},{0x68A4, 0x9772},
- {0x68A5, 0x9773},{0x68A6, 0xC3CE},{0x68A7, 0xCEE0},{0x68A8, 0xC0E6},{0x68A9, 0x9774},{0x68AA, 0x9775},{0x68AB, 0x9776},{0x68AC, 0x9777},
- {0x68AD, 0xCBF3},{0x68AE, 0x9778},{0x68AF, 0xCCDD},{0x68B0, 0xD0B5},{0x68B1, 0x9779},{0x68B2, 0x977A},{0x68B3, 0xCAE1},{0x68B4, 0x977B},
- {0x68B5, 0xE8F3},{0x68B6, 0x977C},{0x68B7, 0x977D},{0x68B8, 0x977E},{0x68B9, 0x9780},{0x68BA, 0x9781},{0x68BB, 0x9782},{0x68BC, 0x9783},
- {0x68BD, 0x9784},{0x68BE, 0x9785},{0x68BF, 0x9786},{0x68C0, 0xBCEC},{0x68C1, 0x9787},{0x68C2, 0xE8F9},{0x68C3, 0x9788},{0x68C4, 0x9789},
- {0x68C5, 0x978A},{0x68C6, 0x978B},{0x68C7, 0x978C},{0x68C8, 0x978D},{0x68C9, 0xC3DE},{0x68CA, 0x978E},{0x68CB, 0xC6E5},{0x68CC, 0x978F},
- {0x68CD, 0xB9F7},{0x68CE, 0x9790},{0x68CF, 0x9791},{0x68D0, 0x9792},{0x68D1, 0x9793},{0x68D2, 0xB0F4},{0x68D3, 0x9794},{0x68D4, 0x9795},
- {0x68D5, 0xD7D8},{0x68D6, 0x9796},{0x68D7, 0x9797},{0x68D8, 0xBCAC},{0x68D9, 0x9798},{0x68DA, 0xC5EF},{0x68DB, 0x9799},{0x68DC, 0x979A},
- {0x68DD, 0x979B},{0x68DE, 0x979C},{0x68DF, 0x979D},{0x68E0, 0xCCC4},{0x68E1, 0x979E},{0x68E2, 0x979F},{0x68E3, 0xE9A6},{0x68E4, 0x97A0},
- {0x68E5, 0x97A1},{0x68E6, 0x97A2},{0x68E7, 0x97A3},{0x68E8, 0x97A4},{0x68E9, 0x97A5},{0x68EA, 0x97A6},{0x68EB, 0x97A7},{0x68EC, 0x97A8},
- {0x68ED, 0x97A9},{0x68EE, 0xC9AD},{0x68EF, 0x97AA},{0x68F0, 0xE9A2},{0x68F1, 0xC0E2},{0x68F2, 0x97AB},{0x68F3, 0x97AC},{0x68F4, 0x97AD},
- {0x68F5, 0xBFC3},{0x68F6, 0x97AE},{0x68F7, 0x97AF},{0x68F8, 0x97B0},{0x68F9, 0xE8FE},{0x68FA, 0xB9D7},{0x68FB, 0x97B1},{0x68FC, 0xE8FB},
- {0x68FD, 0x97B2},{0x68FE, 0x97B3},{0x68FF, 0x97B4},{0x6900, 0x97B5},{0x6901, 0xE9A4},{0x6902, 0x97B6},{0x6903, 0x97B7},{0x6904, 0x97B8},
- {0x6905, 0xD2CE},{0x6906, 0x97B9},{0x6907, 0x97BA},{0x6908, 0x97BB},{0x6909, 0x97BC},{0x690A, 0x97BD},{0x690B, 0xE9A3},{0x690C, 0x97BE},
- {0x690D, 0xD6B2},{0x690E, 0xD7B5},{0x690F, 0x97BF},{0x6910, 0xE9A7},{0x6911, 0x97C0},{0x6912, 0xBDB7},{0x6913, 0x97C1},{0x6914, 0x97C2},
- {0x6915, 0x97C3},{0x6916, 0x97C4},{0x6917, 0x97C5},{0x6918, 0x97C6},{0x6919, 0x97C7},{0x691A, 0x97C8},{0x691B, 0x97C9},{0x691C, 0x97CA},
- {0x691D, 0x97CB},{0x691E, 0x97CC},{0x691F, 0xE8FC},{0x6920, 0xE8FD},{0x6921, 0x97CD},{0x6922, 0x97CE},{0x6923, 0x97CF},{0x6924, 0xE9A1},
- {0x6925, 0x97D0},{0x6926, 0x97D1},{0x6927, 0x97D2},{0x6928, 0x97D3},{0x6929, 0x97D4},{0x692A, 0x97D5},{0x692B, 0x97D6},{0x692C, 0x97D7},
- {0x692D, 0xCDD6},{0x692E, 0x97D8},{0x692F, 0x97D9},{0x6930, 0xD2AC},{0x6931, 0x97DA},{0x6932, 0x97DB},{0x6933, 0x97DC},{0x6934, 0xE9B2},
- {0x6935, 0x97DD},{0x6936, 0x97DE},{0x6937, 0x97DF},{0x6938, 0x97E0},{0x6939, 0xE9A9},{0x693A, 0x97E1},{0x693B, 0x97E2},{0x693C, 0x97E3},
- {0x693D, 0xB4AA},{0x693E, 0x97E4},{0x693F, 0xB4BB},{0x6940, 0x97E5},{0x6941, 0x97E6},{0x6942, 0xE9AB},{0x6943, 0x97E7},{0x6944, 0x97E8},
- {0x6945, 0x97E9},{0x6946, 0x97EA},{0x6947, 0x97EB},{0x6948, 0x97EC},{0x6949, 0x97ED},{0x694A, 0x97EE},{0x694B, 0x97EF},{0x694C, 0x97F0},
- {0x694D, 0x97F1},{0x694E, 0x97F2},{0x694F, 0x97F3},{0x6950, 0x97F4},{0x6951, 0x97F5},{0x6952, 0x97F6},{0x6953, 0x97F7},{0x6954, 0xD0A8},
- {0x6955, 0x97F8},{0x6956, 0x97F9},{0x6957, 0xE9A5},{0x6958, 0x97FA},{0x6959, 0x97FB},{0x695A, 0xB3FE},{0x695B, 0x97FC},{0x695C, 0x97FD},
- {0x695D, 0xE9AC},{0x695E, 0xC0E3},{0x695F, 0x97FE},{0x6960, 0xE9AA},{0x6961, 0x9840},{0x6962, 0x9841},{0x6963, 0xE9B9},{0x6964, 0x9842},
- {0x6965, 0x9843},{0x6966, 0xE9B8},{0x6967, 0x9844},{0x6968, 0x9845},{0x6969, 0x9846},{0x696A, 0x9847},{0x696B, 0xE9AE},{0x696C, 0x9848},
- {0x696D, 0x9849},{0x696E, 0xE8FA},{0x696F, 0x984A},{0x6970, 0x984B},{0x6971, 0xE9A8},{0x6972, 0x984C},{0x6973, 0x984D},{0x6974, 0x984E},
- {0x6975, 0x984F},{0x6976, 0x9850},{0x6977, 0xBFAC},{0x6978, 0xE9B1},{0x6979, 0xE9BA},{0x697A, 0x9851},{0x697B, 0x9852},{0x697C, 0xC2A5},
- {0x697D, 0x9853},{0x697E, 0x9854},{0x697F, 0x9855},{0x6980, 0xE9AF},{0x6981, 0x9856},{0x6982, 0xB8C5},{0x6983, 0x9857},{0x6984, 0xE9AD},
- {0x6985, 0x9858},{0x6986, 0xD3DC},{0x6987, 0xE9B4},{0x6988, 0xE9B5},{0x6989, 0xE9B7},{0x698A, 0x9859},{0x698B, 0x985A},{0x698C, 0x985B},
- {0x698D, 0xE9C7},{0x698E, 0x985C},{0x698F, 0x985D},{0x6990, 0x985E},{0x6991, 0x985F},{0x6992, 0x9860},{0x6993, 0x9861},{0x6994, 0xC0C6},
- {0x6995, 0xE9C5},{0x6996, 0x9862},{0x6997, 0x9863},{0x6998, 0xE9B0},{0x6999, 0x9864},{0x699A, 0x9865},{0x699B, 0xE9BB},{0x699C, 0xB0F1},
- {0x699D, 0x9866},{0x699E, 0x9867},{0x699F, 0x9868},{0x69A0, 0x9869},{0x69A1, 0x986A},{0x69A2, 0x986B},{0x69A3, 0x986C},{0x69A4, 0x986D},
- {0x69A5, 0x986E},{0x69A6, 0x986F},{0x69A7, 0xE9BC},{0x69A8, 0xD5A5},{0x69A9, 0x9870},{0x69AA, 0x9871},{0x69AB, 0xE9BE},{0x69AC, 0x9872},
- {0x69AD, 0xE9BF},{0x69AE, 0x9873},{0x69AF, 0x9874},{0x69B0, 0x9875},{0x69B1, 0xE9C1},{0x69B2, 0x9876},{0x69B3, 0x9877},{0x69B4, 0xC1F1},
- {0x69B5, 0x9878},{0x69B6, 0x9879},{0x69B7, 0xC8B6},{0x69B8, 0x987A},{0x69B9, 0x987B},{0x69BA, 0x987C},{0x69BB, 0xE9BD},{0x69BC, 0x987D},
- {0x69BD, 0x987E},{0x69BE, 0x9880},{0x69BF, 0x9881},{0x69C0, 0x9882},{0x69C1, 0xE9C2},{0x69C2, 0x9883},{0x69C3, 0x9884},{0x69C4, 0x9885},
- {0x69C5, 0x9886},{0x69C6, 0x9887},{0x69C7, 0x9888},{0x69C8, 0x9889},{0x69C9, 0x988A},{0x69CA, 0xE9C3},{0x69CB, 0x988B},{0x69CC, 0xE9B3},
- {0x69CD, 0x988C},{0x69CE, 0xE9B6},{0x69CF, 0x988D},{0x69D0, 0xBBB1},{0x69D1, 0x988E},{0x69D2, 0x988F},{0x69D3, 0x9890},{0x69D4, 0xE9C0},
- {0x69D5, 0x9891},{0x69D6, 0x9892},{0x69D7, 0x9893},{0x69D8, 0x9894},{0x69D9, 0x9895},{0x69DA, 0x9896},{0x69DB, 0xBCF7},{0x69DC, 0x9897},
- {0x69DD, 0x9898},{0x69DE, 0x9899},{0x69DF, 0xE9C4},{0x69E0, 0xE9C6},{0x69E1, 0x989A},{0x69E2, 0x989B},{0x69E3, 0x989C},{0x69E4, 0x989D},
- {0x69E5, 0x989E},{0x69E6, 0x989F},{0x69E7, 0x98A0},{0x69E8, 0x98A1},{0x69E9, 0x98A2},{0x69EA, 0x98A3},{0x69EB, 0x98A4},{0x69EC, 0x98A5},
- {0x69ED, 0xE9CA},{0x69EE, 0x98A6},{0x69EF, 0x98A7},{0x69F0, 0x98A8},{0x69F1, 0x98A9},{0x69F2, 0xE9CE},{0x69F3, 0x98AA},{0x69F4, 0x98AB},
- {0x69F5, 0x98AC},{0x69F6, 0x98AD},{0x69F7, 0x98AE},{0x69F8, 0x98AF},{0x69F9, 0x98B0},{0x69FA, 0x98B1},{0x69FB, 0x98B2},{0x69FC, 0x98B3},
- {0x69FD, 0xB2DB},{0x69FE, 0x98B4},{0x69FF, 0xE9C8},{0x6A00, 0x98B5},{0x6A01, 0x98B6},{0x6A02, 0x98B7},{0x6A03, 0x98B8},{0x6A04, 0x98B9},
- {0x6A05, 0x98BA},{0x6A06, 0x98BB},{0x6A07, 0x98BC},{0x6A08, 0x98BD},{0x6A09, 0x98BE},{0x6A0A, 0xB7AE},{0x6A0B, 0x98BF},{0x6A0C, 0x98C0},
- {0x6A0D, 0x98C1},{0x6A0E, 0x98C2},{0x6A0F, 0x98C3},{0x6A10, 0x98C4},{0x6A11, 0x98C5},{0x6A12, 0x98C6},{0x6A13, 0x98C7},{0x6A14, 0x98C8},
- {0x6A15, 0x98C9},{0x6A16, 0x98CA},{0x6A17, 0xE9CB},{0x6A18, 0xE9CC},{0x6A19, 0x98CB},{0x6A1A, 0x98CC},{0x6A1B, 0x98CD},{0x6A1C, 0x98CE},
- {0x6A1D, 0x98CF},{0x6A1E, 0x98D0},{0x6A1F, 0xD5C1},{0x6A20, 0x98D1},{0x6A21, 0xC4A3},{0x6A22, 0x98D2},{0x6A23, 0x98D3},{0x6A24, 0x98D4},
- {0x6A25, 0x98D5},{0x6A26, 0x98D6},{0x6A27, 0x98D7},{0x6A28, 0xE9D8},{0x6A29, 0x98D8},{0x6A2A, 0xBAE1},{0x6A2B, 0x98D9},{0x6A2C, 0x98DA},
- {0x6A2D, 0x98DB},{0x6A2E, 0x98DC},{0x6A2F, 0xE9C9},{0x6A30, 0x98DD},{0x6A31, 0xD3A3},{0x6A32, 0x98DE},{0x6A33, 0x98DF},{0x6A34, 0x98E0},
- {0x6A35, 0xE9D4},{0x6A36, 0x98E1},{0x6A37, 0x98E2},{0x6A38, 0x98E3},{0x6A39, 0x98E4},{0x6A3A, 0x98E5},{0x6A3B, 0x98E6},{0x6A3C, 0x98E7},
- {0x6A3D, 0xE9D7},{0x6A3E, 0xE9D0},{0x6A3F, 0x98E8},{0x6A40, 0x98E9},{0x6A41, 0x98EA},{0x6A42, 0x98EB},{0x6A43, 0x98EC},{0x6A44, 0xE9CF},
- {0x6A45, 0x98ED},{0x6A46, 0x98EE},{0x6A47, 0xC7C1},{0x6A48, 0x98EF},{0x6A49, 0x98F0},{0x6A4A, 0x98F1},{0x6A4B, 0x98F2},{0x6A4C, 0x98F3},
- {0x6A4D, 0x98F4},{0x6A4E, 0x98F5},{0x6A4F, 0x98F6},{0x6A50, 0xE9D2},{0x6A51, 0x98F7},{0x6A52, 0x98F8},{0x6A53, 0x98F9},{0x6A54, 0x98FA},
- {0x6A55, 0x98FB},{0x6A56, 0x98FC},{0x6A57, 0x98FD},{0x6A58, 0xE9D9},{0x6A59, 0xB3C8},{0x6A5A, 0x98FE},{0x6A5B, 0xE9D3},{0x6A5C, 0x9940},
- {0x6A5D, 0x9941},{0x6A5E, 0x9942},{0x6A5F, 0x9943},{0x6A60, 0x9944},{0x6A61, 0xCFF0},{0x6A62, 0x9945},{0x6A63, 0x9946},{0x6A64, 0x9947},
- {0x6A65, 0xE9CD},{0x6A66, 0x9948},{0x6A67, 0x9949},{0x6A68, 0x994A},{0x6A69, 0x994B},{0x6A6A, 0x994C},{0x6A6B, 0x994D},{0x6A6C, 0x994E},
- {0x6A6D, 0x994F},{0x6A6E, 0x9950},{0x6A6F, 0x9951},{0x6A70, 0x9952},{0x6A71, 0xB3F7},{0x6A72, 0x9953},{0x6A73, 0x9954},{0x6A74, 0x9955},
- {0x6A75, 0x9956},{0x6A76, 0x9957},{0x6A77, 0x9958},{0x6A78, 0x9959},{0x6A79, 0xE9D6},{0x6A7A, 0x995A},{0x6A7B, 0x995B},{0x6A7C, 0xE9DA},
- {0x6A7D, 0x995C},{0x6A7E, 0x995D},{0x6A7F, 0x995E},{0x6A80, 0xCCB4},{0x6A81, 0x995F},{0x6A82, 0x9960},{0x6A83, 0x9961},{0x6A84, 0xCFAD},
- {0x6A85, 0x9962},{0x6A86, 0x9963},{0x6A87, 0x9964},{0x6A88, 0x9965},{0x6A89, 0x9966},{0x6A8A, 0x9967},{0x6A8B, 0x9968},{0x6A8C, 0x9969},
- {0x6A8D, 0x996A},{0x6A8E, 0xE9D5},{0x6A8F, 0x996B},{0x6A90, 0xE9DC},{0x6A91, 0xE9DB},{0x6A92, 0x996C},{0x6A93, 0x996D},{0x6A94, 0x996E},
- {0x6A95, 0x996F},{0x6A96, 0x9970},{0x6A97, 0xE9DE},{0x6A98, 0x9971},{0x6A99, 0x9972},{0x6A9A, 0x9973},{0x6A9B, 0x9974},{0x6A9C, 0x9975},
- {0x6A9D, 0x9976},{0x6A9E, 0x9977},{0x6A9F, 0x9978},{0x6AA0, 0xE9D1},{0x6AA1, 0x9979},{0x6AA2, 0x997A},{0x6AA3, 0x997B},{0x6AA4, 0x997C},
- {0x6AA5, 0x997D},{0x6AA6, 0x997E},{0x6AA7, 0x9980},{0x6AA8, 0x9981},{0x6AA9, 0xE9DD},{0x6AAA, 0x9982},{0x6AAB, 0xE9DF},{0x6AAC, 0xC3CA},
- {0x6AAD, 0x9983},{0x6AAE, 0x9984},{0x6AAF, 0x9985},{0x6AB0, 0x9986},{0x6AB1, 0x9987},{0x6AB2, 0x9988},{0x6AB3, 0x9989},{0x6AB4, 0x998A},
- {0x6AB5, 0x998B},{0x6AB6, 0x998C},{0x6AB7, 0x998D},{0x6AB8, 0x998E},{0x6AB9, 0x998F},{0x6ABA, 0x9990},{0x6ABB, 0x9991},{0x6ABC, 0x9992},
- {0x6ABD, 0x9993},{0x6ABE, 0x9994},{0x6ABF, 0x9995},{0x6AC0, 0x9996},{0x6AC1, 0x9997},{0x6AC2, 0x9998},{0x6AC3, 0x9999},{0x6AC4, 0x999A},
- {0x6AC5, 0x999B},{0x6AC6, 0x999C},{0x6AC7, 0x999D},{0x6AC8, 0x999E},{0x6AC9, 0x999F},{0x6ACA, 0x99A0},{0x6ACB, 0x99A1},{0x6ACC, 0x99A2},
- {0x6ACD, 0x99A3},{0x6ACE, 0x99A4},{0x6ACF, 0x99A5},{0x6AD0, 0x99A6},{0x6AD1, 0x99A7},{0x6AD2, 0x99A8},{0x6AD3, 0x99A9},{0x6AD4, 0x99AA},
- {0x6AD5, 0x99AB},{0x6AD6, 0x99AC},{0x6AD7, 0x99AD},{0x6AD8, 0x99AE},{0x6AD9, 0x99AF},{0x6ADA, 0x99B0},{0x6ADB, 0x99B1},{0x6ADC, 0x99B2},
- {0x6ADD, 0x99B3},{0x6ADE, 0x99B4},{0x6ADF, 0x99B5},{0x6AE0, 0x99B6},{0x6AE1, 0x99B7},{0x6AE2, 0x99B8},{0x6AE3, 0x99B9},{0x6AE4, 0x99BA},
- {0x6AE5, 0x99BB},{0x6AE6, 0x99BC},{0x6AE7, 0x99BD},{0x6AE8, 0x99BE},{0x6AE9, 0x99BF},{0x6AEA, 0x99C0},{0x6AEB, 0x99C1},{0x6AEC, 0x99C2},
- {0x6AED, 0x99C3},{0x6AEE, 0x99C4},{0x6AEF, 0x99C5},{0x6AF0, 0x99C6},{0x6AF1, 0x99C7},{0x6AF2, 0x99C8},{0x6AF3, 0x99C9},{0x6AF4, 0x99CA},
- {0x6AF5, 0x99CB},{0x6AF6, 0x99CC},{0x6AF7, 0x99CD},{0x6AF8, 0x99CE},{0x6AF9, 0x99CF},{0x6AFA, 0x99D0},{0x6AFB, 0x99D1},{0x6AFC, 0x99D2},
- {0x6AFD, 0x99D3},{0x6AFE, 0x99D4},{0x6AFF, 0x99D5},{0x6B00, 0x99D6},{0x6B01, 0x99D7},{0x6B02, 0x99D8},{0x6B03, 0x99D9},{0x6B04, 0x99DA},
- {0x6B05, 0x99DB},{0x6B06, 0x99DC},{0x6B07, 0x99DD},{0x6B08, 0x99DE},{0x6B09, 0x99DF},{0x6B0A, 0x99E0},{0x6B0B, 0x99E1},{0x6B0C, 0x99E2},
- {0x6B0D, 0x99E3},{0x6B0E, 0x99E4},{0x6B0F, 0x99E5},{0x6B10, 0x99E6},{0x6B11, 0x99E7},{0x6B12, 0x99E8},{0x6B13, 0x99E9},{0x6B14, 0x99EA},
- {0x6B15, 0x99EB},{0x6B16, 0x99EC},{0x6B17, 0x99ED},{0x6B18, 0x99EE},{0x6B19, 0x99EF},{0x6B1A, 0x99F0},{0x6B1B, 0x99F1},{0x6B1C, 0x99F2},
- {0x6B1D, 0x99F3},{0x6B1E, 0x99F4},{0x6B1F, 0x99F5},{0x6B20, 0xC7B7},{0x6B21, 0xB4CE},{0x6B22, 0xBBB6},{0x6B23, 0xD0C0},{0x6B24, 0xECA3},
- {0x6B25, 0x99F6},{0x6B26, 0x99F7},{0x6B27, 0xC5B7},{0x6B28, 0x99F8},{0x6B29, 0x99F9},{0x6B2A, 0x99FA},{0x6B2B, 0x99FB},{0x6B2C, 0x99FC},
- {0x6B2D, 0x99FD},{0x6B2E, 0x99FE},{0x6B2F, 0x9A40},{0x6B30, 0x9A41},{0x6B31, 0x9A42},{0x6B32, 0xD3FB},{0x6B33, 0x9A43},{0x6B34, 0x9A44},
- {0x6B35, 0x9A45},{0x6B36, 0x9A46},{0x6B37, 0xECA4},{0x6B38, 0x9A47},{0x6B39, 0xECA5},{0x6B3A, 0xC6DB},{0x6B3B, 0x9A48},{0x6B3C, 0x9A49},
- {0x6B3D, 0x9A4A},{0x6B3E, 0xBFEE},{0x6B3F, 0x9A4B},{0x6B40, 0x9A4C},{0x6B41, 0x9A4D},{0x6B42, 0x9A4E},{0x6B43, 0xECA6},{0x6B44, 0x9A4F},
- {0x6B45, 0x9A50},{0x6B46, 0xECA7},{0x6B47, 0xD0AA},{0x6B48, 0x9A51},{0x6B49, 0xC7B8},{0x6B4A, 0x9A52},{0x6B4B, 0x9A53},{0x6B4C, 0xB8E8},
- {0x6B4D, 0x9A54},{0x6B4E, 0x9A55},{0x6B4F, 0x9A56},{0x6B50, 0x9A57},{0x6B51, 0x9A58},{0x6B52, 0x9A59},{0x6B53, 0x9A5A},{0x6B54, 0x9A5B},
- {0x6B55, 0x9A5C},{0x6B56, 0x9A5D},{0x6B57, 0x9A5E},{0x6B58, 0x9A5F},{0x6B59, 0xECA8},{0x6B5A, 0x9A60},{0x6B5B, 0x9A61},{0x6B5C, 0x9A62},
- {0x6B5D, 0x9A63},{0x6B5E, 0x9A64},{0x6B5F, 0x9A65},{0x6B60, 0x9A66},{0x6B61, 0x9A67},{0x6B62, 0xD6B9},{0x6B63, 0xD5FD},{0x6B64, 0xB4CB},
- {0x6B65, 0xB2BD},{0x6B66, 0xCEE4},{0x6B67, 0xC6E7},{0x6B68, 0x9A68},{0x6B69, 0x9A69},{0x6B6A, 0xCDE1},{0x6B6B, 0x9A6A},{0x6B6C, 0x9A6B},
- {0x6B6D, 0x9A6C},{0x6B6E, 0x9A6D},{0x6B6F, 0x9A6E},{0x6B70, 0x9A6F},{0x6B71, 0x9A70},{0x6B72, 0x9A71},{0x6B73, 0x9A72},{0x6B74, 0x9A73},
- {0x6B75, 0x9A74},{0x6B76, 0x9A75},{0x6B77, 0x9A76},{0x6B78, 0x9A77},{0x6B79, 0xB4F5},{0x6B7A, 0x9A78},{0x6B7B, 0xCBC0},{0x6B7C, 0xBCDF},
- {0x6B7D, 0x9A79},{0x6B7E, 0x9A7A},{0x6B7F, 0x9A7B},{0x6B80, 0x9A7C},{0x6B81, 0xE9E2},{0x6B82, 0xE9E3},{0x6B83, 0xD1EA},{0x6B84, 0xE9E5},
- {0x6B85, 0x9A7D},{0x6B86, 0xB4F9},{0x6B87, 0xE9E4},{0x6B88, 0x9A7E},{0x6B89, 0xD1B3},{0x6B8A, 0xCAE2},{0x6B8B, 0xB2D0},{0x6B8C, 0x9A80},
- {0x6B8D, 0xE9E8},{0x6B8E, 0x9A81},{0x6B8F, 0x9A82},{0x6B90, 0x9A83},{0x6B91, 0x9A84},{0x6B92, 0xE9E6},{0x6B93, 0xE9E7},{0x6B94, 0x9A85},
- {0x6B95, 0x9A86},{0x6B96, 0xD6B3},{0x6B97, 0x9A87},{0x6B98, 0x9A88},{0x6B99, 0x9A89},{0x6B9A, 0xE9E9},{0x6B9B, 0xE9EA},{0x6B9C, 0x9A8A},
- {0x6B9D, 0x9A8B},{0x6B9E, 0x9A8C},{0x6B9F, 0x9A8D},{0x6BA0, 0x9A8E},{0x6BA1, 0xE9EB},{0x6BA2, 0x9A8F},{0x6BA3, 0x9A90},{0x6BA4, 0x9A91},
- {0x6BA5, 0x9A92},{0x6BA6, 0x9A93},{0x6BA7, 0x9A94},{0x6BA8, 0x9A95},{0x6BA9, 0x9A96},{0x6BAA, 0xE9EC},{0x6BAB, 0x9A97},{0x6BAC, 0x9A98},
- {0x6BAD, 0x9A99},{0x6BAE, 0x9A9A},{0x6BAF, 0x9A9B},{0x6BB0, 0x9A9C},{0x6BB1, 0x9A9D},{0x6BB2, 0x9A9E},{0x6BB3, 0xECAF},{0x6BB4, 0xC5B9},
- {0x6BB5, 0xB6CE},{0x6BB6, 0x9A9F},{0x6BB7, 0xD2F3},{0x6BB8, 0x9AA0},{0x6BB9, 0x9AA1},{0x6BBA, 0x9AA2},{0x6BBB, 0x9AA3},{0x6BBC, 0x9AA4},
- {0x6BBD, 0x9AA5},{0x6BBE, 0x9AA6},{0x6BBF, 0xB5EE},{0x6BC0, 0x9AA7},{0x6BC1, 0xBBD9},{0x6BC2, 0xECB1},{0x6BC3, 0x9AA8},{0x6BC4, 0x9AA9},
- {0x6BC5, 0xD2E3},{0x6BC6, 0x9AAA},{0x6BC7, 0x9AAB},{0x6BC8, 0x9AAC},{0x6BC9, 0x9AAD},{0x6BCA, 0x9AAE},{0x6BCB, 0xCEE3},{0x6BCC, 0x9AAF},
- {0x6BCD, 0xC4B8},{0x6BCE, 0x9AB0},{0x6BCF, 0xC3BF},{0x6BD0, 0x9AB1},{0x6BD1, 0x9AB2},{0x6BD2, 0xB6BE},{0x6BD3, 0xD8B9},{0x6BD4, 0xB1C8},
- {0x6BD5, 0xB1CF},{0x6BD6, 0xB1D1},{0x6BD7, 0xC5FE},{0x6BD8, 0x9AB3},{0x6BD9, 0xB1D0},{0x6BDA, 0x9AB4},{0x6BDB, 0xC3AB},{0x6BDC, 0x9AB5},
- {0x6BDD, 0x9AB6},{0x6BDE, 0x9AB7},{0x6BDF, 0x9AB8},{0x6BE0, 0x9AB9},{0x6BE1, 0xD5B1},{0x6BE2, 0x9ABA},{0x6BE3, 0x9ABB},{0x6BE4, 0x9ABC},
- {0x6BE5, 0x9ABD},{0x6BE6, 0x9ABE},{0x6BE7, 0x9ABF},{0x6BE8, 0x9AC0},{0x6BE9, 0x9AC1},{0x6BEA, 0xEBA4},{0x6BEB, 0xBAC1},{0x6BEC, 0x9AC2},
- {0x6BED, 0x9AC3},{0x6BEE, 0x9AC4},{0x6BEF, 0xCCBA},{0x6BF0, 0x9AC5},{0x6BF1, 0x9AC6},{0x6BF2, 0x9AC7},{0x6BF3, 0xEBA5},{0x6BF4, 0x9AC8},
- {0x6BF5, 0xEBA7},{0x6BF6, 0x9AC9},{0x6BF7, 0x9ACA},{0x6BF8, 0x9ACB},{0x6BF9, 0xEBA8},{0x6BFA, 0x9ACC},{0x6BFB, 0x9ACD},{0x6BFC, 0x9ACE},
- {0x6BFD, 0xEBA6},{0x6BFE, 0x9ACF},{0x6BFF, 0x9AD0},{0x6C00, 0x9AD1},{0x6C01, 0x9AD2},{0x6C02, 0x9AD3},{0x6C03, 0x9AD4},{0x6C04, 0x9AD5},
- {0x6C05, 0xEBA9},{0x6C06, 0xEBAB},{0x6C07, 0xEBAA},{0x6C08, 0x9AD6},{0x6C09, 0x9AD7},{0x6C0A, 0x9AD8},{0x6C0B, 0x9AD9},{0x6C0C, 0x9ADA},
- {0x6C0D, 0xEBAC},{0x6C0E, 0x9ADB},{0x6C0F, 0xCACF},{0x6C10, 0xD8B5},{0x6C11, 0xC3F1},{0x6C12, 0x9ADC},{0x6C13, 0xC3A5},{0x6C14, 0xC6F8},
- {0x6C15, 0xEBAD},{0x6C16, 0xC4CA},{0x6C17, 0x9ADD},{0x6C18, 0xEBAE},{0x6C19, 0xEBAF},{0x6C1A, 0xEBB0},{0x6C1B, 0xB7D5},{0x6C1C, 0x9ADE},
- {0x6C1D, 0x9ADF},{0x6C1E, 0x9AE0},{0x6C1F, 0xB7FA},{0x6C20, 0x9AE1},{0x6C21, 0xEBB1},{0x6C22, 0xC7E2},{0x6C23, 0x9AE2},{0x6C24, 0xEBB3},
- {0x6C25, 0x9AE3},{0x6C26, 0xBAA4},{0x6C27, 0xD1F5},{0x6C28, 0xB0B1},{0x6C29, 0xEBB2},{0x6C2A, 0xEBB4},{0x6C2B, 0x9AE4},{0x6C2C, 0x9AE5},
- {0x6C2D, 0x9AE6},{0x6C2E, 0xB5AA},{0x6C2F, 0xC2C8},{0x6C30, 0xC7E8},{0x6C31, 0x9AE7},{0x6C32, 0xEBB5},{0x6C33, 0x9AE8},{0x6C34, 0xCBAE},
- {0x6C35, 0xE3DF},{0x6C36, 0x9AE9},{0x6C37, 0x9AEA},{0x6C38, 0xD3C0},{0x6C39, 0x9AEB},{0x6C3A, 0x9AEC},{0x6C3B, 0x9AED},{0x6C3C, 0x9AEE},
- {0x6C3D, 0xD9DB},{0x6C3E, 0x9AEF},{0x6C3F, 0x9AF0},{0x6C40, 0xCDA1},{0x6C41, 0xD6AD},{0x6C42, 0xC7F3},{0x6C43, 0x9AF1},{0x6C44, 0x9AF2},
- {0x6C45, 0x9AF3},{0x6C46, 0xD9E0},{0x6C47, 0xBBE3},{0x6C48, 0x9AF4},{0x6C49, 0xBABA},{0x6C4A, 0xE3E2},{0x6C4B, 0x9AF5},{0x6C4C, 0x9AF6},
- {0x6C4D, 0x9AF7},{0x6C4E, 0x9AF8},{0x6C4F, 0x9AF9},{0x6C50, 0xCFAB},{0x6C51, 0x9AFA},{0x6C52, 0x9AFB},{0x6C53, 0x9AFC},{0x6C54, 0xE3E0},
- {0x6C55, 0xC9C7},{0x6C56, 0x9AFD},{0x6C57, 0xBAB9},{0x6C58, 0x9AFE},{0x6C59, 0x9B40},{0x6C5A, 0x9B41},{0x6C5B, 0xD1B4},{0x6C5C, 0xE3E1},
- {0x6C5D, 0xC8EA},{0x6C5E, 0xB9AF},{0x6C5F, 0xBDAD},{0x6C60, 0xB3D8},{0x6C61, 0xCEDB},{0x6C62, 0x9B42},{0x6C63, 0x9B43},{0x6C64, 0xCCC0},
- {0x6C65, 0x9B44},{0x6C66, 0x9B45},{0x6C67, 0x9B46},{0x6C68, 0xE3E8},{0x6C69, 0xE3E9},{0x6C6A, 0xCDF4},{0x6C6B, 0x9B47},{0x6C6C, 0x9B48},
- {0x6C6D, 0x9B49},{0x6C6E, 0x9B4A},{0x6C6F, 0x9B4B},{0x6C70, 0xCCAD},{0x6C71, 0x9B4C},{0x6C72, 0xBCB3},{0x6C73, 0x9B4D},{0x6C74, 0xE3EA},
- {0x6C75, 0x9B4E},{0x6C76, 0xE3EB},{0x6C77, 0x9B4F},{0x6C78, 0x9B50},{0x6C79, 0xD0DA},{0x6C7A, 0x9B51},{0x6C7B, 0x9B52},{0x6C7C, 0x9B53},
- {0x6C7D, 0xC6FB},{0x6C7E, 0xB7DA},{0x6C7F, 0x9B54},{0x6C80, 0x9B55},{0x6C81, 0xC7DF},{0x6C82, 0xD2CA},{0x6C83, 0xCED6},{0x6C84, 0x9B56},
- {0x6C85, 0xE3E4},{0x6C86, 0xE3EC},{0x6C87, 0x9B57},{0x6C88, 0xC9F2},{0x6C89, 0xB3C1},{0x6C8A, 0x9B58},{0x6C8B, 0x9B59},{0x6C8C, 0xE3E7},
- {0x6C8D, 0x9B5A},{0x6C8E, 0x9B5B},{0x6C8F, 0xC6E3},{0x6C90, 0xE3E5},{0x6C91, 0x9B5C},{0x6C92, 0x9B5D},{0x6C93, 0xEDB3},{0x6C94, 0xE3E6},
- {0x6C95, 0x9B5E},{0x6C96, 0x9B5F},{0x6C97, 0x9B60},{0x6C98, 0x9B61},{0x6C99, 0xC9B3},{0x6C9A, 0x9B62},{0x6C9B, 0xC5E6},{0x6C9C, 0x9B63},
- {0x6C9D, 0x9B64},{0x6C9E, 0x9B65},{0x6C9F, 0xB9B5},{0x6CA0, 0x9B66},{0x6CA1, 0xC3BB},{0x6CA2, 0x9B67},{0x6CA3, 0xE3E3},{0x6CA4, 0xC5BD},
- {0x6CA5, 0xC1A4},{0x6CA6, 0xC2D9},{0x6CA7, 0xB2D7},{0x6CA8, 0x9B68},{0x6CA9, 0xE3ED},{0x6CAA, 0xBBA6},{0x6CAB, 0xC4AD},{0x6CAC, 0x9B69},
- {0x6CAD, 0xE3F0},{0x6CAE, 0xBEDA},{0x6CAF, 0x9B6A},{0x6CB0, 0x9B6B},{0x6CB1, 0xE3FB},{0x6CB2, 0xE3F5},{0x6CB3, 0xBAD3},{0x6CB4, 0x9B6C},
- {0x6CB5, 0x9B6D},{0x6CB6, 0x9B6E},{0x6CB7, 0x9B6F},{0x6CB8, 0xB7D0},{0x6CB9, 0xD3CD},{0x6CBA, 0x9B70},{0x6CBB, 0xD6CE},{0x6CBC, 0xD5D3},
- {0x6CBD, 0xB9C1},{0x6CBE, 0xD5B4},{0x6CBF, 0xD1D8},{0x6CC0, 0x9B71},{0x6CC1, 0x9B72},{0x6CC2, 0x9B73},{0x6CC3, 0x9B74},{0x6CC4, 0xD0B9},
- {0x6CC5, 0xC7F6},{0x6CC6, 0x9B75},{0x6CC7, 0x9B76},{0x6CC8, 0x9B77},{0x6CC9, 0xC8AA},{0x6CCA, 0xB2B4},{0x6CCB, 0x9B78},{0x6CCC, 0xC3DA},
- {0x6CCD, 0x9B79},{0x6CCE, 0x9B7A},{0x6CCF, 0x9B7B},{0x6CD0, 0xE3EE},{0x6CD1, 0x9B7C},{0x6CD2, 0x9B7D},{0x6CD3, 0xE3FC},{0x6CD4, 0xE3EF},
- {0x6CD5, 0xB7A8},{0x6CD6, 0xE3F7},{0x6CD7, 0xE3F4},{0x6CD8, 0x9B7E},{0x6CD9, 0x9B80},{0x6CDA, 0x9B81},{0x6CDB, 0xB7BA},{0x6CDC, 0x9B82},
- {0x6CDD, 0x9B83},{0x6CDE, 0xC5A2},{0x6CDF, 0x9B84},{0x6CE0, 0xE3F6},{0x6CE1, 0xC5DD},{0x6CE2, 0xB2A8},{0x6CE3, 0xC6FC},{0x6CE4, 0x9B85},
- {0x6CE5, 0xC4E0},{0x6CE6, 0x9B86},{0x6CE7, 0x9B87},{0x6CE8, 0xD7A2},{0x6CE9, 0x9B88},{0x6CEA, 0xC0E1},{0x6CEB, 0xE3F9},{0x6CEC, 0x9B89},
- {0x6CED, 0x9B8A},{0x6CEE, 0xE3FA},{0x6CEF, 0xE3FD},{0x6CF0, 0xCCA9},{0x6CF1, 0xE3F3},{0x6CF2, 0x9B8B},{0x6CF3, 0xD3BE},{0x6CF4, 0x9B8C},
- {0x6CF5, 0xB1C3},{0x6CF6, 0xEDB4},{0x6CF7, 0xE3F1},{0x6CF8, 0xE3F2},{0x6CF9, 0x9B8D},{0x6CFA, 0xE3F8},{0x6CFB, 0xD0BA},{0x6CFC, 0xC6C3},
- {0x6CFD, 0xD4F3},{0x6CFE, 0xE3FE},{0x6CFF, 0x9B8E},{0x6D00, 0x9B8F},{0x6D01, 0xBDE0},{0x6D02, 0x9B90},{0x6D03, 0x9B91},{0x6D04, 0xE4A7},
- {0x6D05, 0x9B92},{0x6D06, 0x9B93},{0x6D07, 0xE4A6},{0x6D08, 0x9B94},{0x6D09, 0x9B95},{0x6D0A, 0x9B96},{0x6D0B, 0xD1F3},{0x6D0C, 0xE4A3},
- {0x6D0D, 0x9B97},{0x6D0E, 0xE4A9},{0x6D0F, 0x9B98},{0x6D10, 0x9B99},{0x6D11, 0x9B9A},{0x6D12, 0xC8F7},{0x6D13, 0x9B9B},{0x6D14, 0x9B9C},
- {0x6D15, 0x9B9D},{0x6D16, 0x9B9E},{0x6D17, 0xCFB4},{0x6D18, 0x9B9F},{0x6D19, 0xE4A8},{0x6D1A, 0xE4AE},{0x6D1B, 0xC2E5},{0x6D1C, 0x9BA0},
- {0x6D1D, 0x9BA1},{0x6D1E, 0xB6B4},{0x6D1F, 0x9BA2},{0x6D20, 0x9BA3},{0x6D21, 0x9BA4},{0x6D22, 0x9BA5},{0x6D23, 0x9BA6},{0x6D24, 0x9BA7},
- {0x6D25, 0xBDF2},{0x6D26, 0x9BA8},{0x6D27, 0xE4A2},{0x6D28, 0x9BA9},{0x6D29, 0x9BAA},{0x6D2A, 0xBAE9},{0x6D2B, 0xE4AA},{0x6D2C, 0x9BAB},
- {0x6D2D, 0x9BAC},{0x6D2E, 0xE4AC},{0x6D2F, 0x9BAD},{0x6D30, 0x9BAE},{0x6D31, 0xB6FD},{0x6D32, 0xD6DE},{0x6D33, 0xE4B2},{0x6D34, 0x9BAF},
- {0x6D35, 0xE4AD},{0x6D36, 0x9BB0},{0x6D37, 0x9BB1},{0x6D38, 0x9BB2},{0x6D39, 0xE4A1},{0x6D3A, 0x9BB3},{0x6D3B, 0xBBEE},{0x6D3C, 0xCDDD},
- {0x6D3D, 0xC7A2},{0x6D3E, 0xC5C9},{0x6D3F, 0x9BB4},{0x6D40, 0x9BB5},{0x6D41, 0xC1F7},{0x6D42, 0x9BB6},{0x6D43, 0xE4A4},{0x6D44, 0x9BB7},
- {0x6D45, 0xC7B3},{0x6D46, 0xBDAC},{0x6D47, 0xBDBD},{0x6D48, 0xE4A5},{0x6D49, 0x9BB8},{0x6D4A, 0xD7C7},{0x6D4B, 0xB2E2},{0x6D4C, 0x9BB9},
- {0x6D4D, 0xE4AB},{0x6D4E, 0xBCC3},{0x6D4F, 0xE4AF},{0x6D50, 0x9BBA},{0x6D51, 0xBBEB},{0x6D52, 0xE4B0},{0x6D53, 0xC5A8},{0x6D54, 0xE4B1},
- {0x6D55, 0x9BBB},{0x6D56, 0x9BBC},{0x6D57, 0x9BBD},{0x6D58, 0x9BBE},{0x6D59, 0xD5E3},{0x6D5A, 0xBFA3},{0x6D5B, 0x9BBF},{0x6D5C, 0xE4BA},
- {0x6D5D, 0x9BC0},{0x6D5E, 0xE4B7},{0x6D5F, 0x9BC1},{0x6D60, 0xE4BB},{0x6D61, 0x9BC2},{0x6D62, 0x9BC3},{0x6D63, 0xE4BD},{0x6D64, 0x9BC4},
- {0x6D65, 0x9BC5},{0x6D66, 0xC6D6},{0x6D67, 0x9BC6},{0x6D68, 0x9BC7},{0x6D69, 0xBAC6},{0x6D6A, 0xC0CB},{0x6D6B, 0x9BC8},{0x6D6C, 0x9BC9},
- {0x6D6D, 0x9BCA},{0x6D6E, 0xB8A1},{0x6D6F, 0xE4B4},{0x6D70, 0x9BCB},{0x6D71, 0x9BCC},{0x6D72, 0x9BCD},{0x6D73, 0x9BCE},{0x6D74, 0xD4A1},
- {0x6D75, 0x9BCF},{0x6D76, 0x9BD0},{0x6D77, 0xBAA3},{0x6D78, 0xBDFE},{0x6D79, 0x9BD1},{0x6D7A, 0x9BD2},{0x6D7B, 0x9BD3},{0x6D7C, 0xE4BC},
- {0x6D7D, 0x9BD4},{0x6D7E, 0x9BD5},{0x6D7F, 0x9BD6},{0x6D80, 0x9BD7},{0x6D81, 0x9BD8},{0x6D82, 0xCDBF},{0x6D83, 0x9BD9},{0x6D84, 0x9BDA},
- {0x6D85, 0xC4F9},{0x6D86, 0x9BDB},{0x6D87, 0x9BDC},{0x6D88, 0xCFFB},{0x6D89, 0xC9E6},{0x6D8A, 0x9BDD},{0x6D8B, 0x9BDE},{0x6D8C, 0xD3BF},
- {0x6D8D, 0x9BDF},{0x6D8E, 0xCFD1},{0x6D8F, 0x9BE0},{0x6D90, 0x9BE1},{0x6D91, 0xE4B3},{0x6D92, 0x9BE2},{0x6D93, 0xE4B8},{0x6D94, 0xE4B9},
- {0x6D95, 0xCCE9},{0x6D96, 0x9BE3},{0x6D97, 0x9BE4},{0x6D98, 0x9BE5},{0x6D99, 0x9BE6},{0x6D9A, 0x9BE7},{0x6D9B, 0xCCCE},{0x6D9C, 0x9BE8},
- {0x6D9D, 0xC0D4},{0x6D9E, 0xE4B5},{0x6D9F, 0xC1B0},{0x6DA0, 0xE4B6},{0x6DA1, 0xCED0},{0x6DA2, 0x9BE9},{0x6DA3, 0xBBC1},{0x6DA4, 0xB5D3},
- {0x6DA5, 0x9BEA},{0x6DA6, 0xC8F3},{0x6DA7, 0xBDA7},{0x6DA8, 0xD5C7},{0x6DA9, 0xC9AC},{0x6DAA, 0xB8A2},{0x6DAB, 0xE4CA},{0x6DAC, 0x9BEB},
- {0x6DAD, 0x9BEC},{0x6DAE, 0xE4CC},{0x6DAF, 0xD1C4},{0x6DB0, 0x9BED},{0x6DB1, 0x9BEE},{0x6DB2, 0xD2BA},{0x6DB3, 0x9BEF},{0x6DB4, 0x9BF0},
- {0x6DB5, 0xBAAD},{0x6DB6, 0x9BF1},{0x6DB7, 0x9BF2},{0x6DB8, 0xBAD4},{0x6DB9, 0x9BF3},{0x6DBA, 0x9BF4},{0x6DBB, 0x9BF5},{0x6DBC, 0x9BF6},
- {0x6DBD, 0x9BF7},{0x6DBE, 0x9BF8},{0x6DBF, 0xE4C3},{0x6DC0, 0xB5ED},{0x6DC1, 0x9BF9},{0x6DC2, 0x9BFA},{0x6DC3, 0x9BFB},{0x6DC4, 0xD7CD},
- {0x6DC5, 0xE4C0},{0x6DC6, 0xCFFD},{0x6DC7, 0xE4BF},{0x6DC8, 0x9BFC},{0x6DC9, 0x9BFD},{0x6DCA, 0x9BFE},{0x6DCB, 0xC1DC},{0x6DCC, 0xCCCA},
- {0x6DCD, 0x9C40},{0x6DCE, 0x9C41},{0x6DCF, 0x9C42},{0x6DD0, 0x9C43},{0x6DD1, 0xCAE7},{0x6DD2, 0x9C44},{0x6DD3, 0x9C45},{0x6DD4, 0x9C46},
- {0x6DD5, 0x9C47},{0x6DD6, 0xC4D7},{0x6DD7, 0x9C48},{0x6DD8, 0xCCD4},{0x6DD9, 0xE4C8},{0x6DDA, 0x9C49},{0x6DDB, 0x9C4A},{0x6DDC, 0x9C4B},
- {0x6DDD, 0xE4C7},{0x6DDE, 0xE4C1},{0x6DDF, 0x9C4C},{0x6DE0, 0xE4C4},{0x6DE1, 0xB5AD},{0x6DE2, 0x9C4D},{0x6DE3, 0x9C4E},{0x6DE4, 0xD3D9},
- {0x6DE5, 0x9C4F},{0x6DE6, 0xE4C6},{0x6DE7, 0x9C50},{0x6DE8, 0x9C51},{0x6DE9, 0x9C52},{0x6DEA, 0x9C53},{0x6DEB, 0xD2F9},{0x6DEC, 0xB4E3},
- {0x6DED, 0x9C54},{0x6DEE, 0xBBB4},{0x6DEF, 0x9C55},{0x6DF0, 0x9C56},{0x6DF1, 0xC9EE},{0x6DF2, 0x9C57},{0x6DF3, 0xB4BE},{0x6DF4, 0x9C58},
- {0x6DF5, 0x9C59},{0x6DF6, 0x9C5A},{0x6DF7, 0xBBEC},{0x6DF8, 0x9C5B},{0x6DF9, 0xD1CD},{0x6DFA, 0x9C5C},{0x6DFB, 0xCCED},{0x6DFC, 0xEDB5},
- {0x6DFD, 0x9C5D},{0x6DFE, 0x9C5E},{0x6DFF, 0x9C5F},{0x6E00, 0x9C60},{0x6E01, 0x9C61},{0x6E02, 0x9C62},{0x6E03, 0x9C63},{0x6E04, 0x9C64},
- {0x6E05, 0xC7E5},{0x6E06, 0x9C65},{0x6E07, 0x9C66},{0x6E08, 0x9C67},{0x6E09, 0x9C68},{0x6E0A, 0xD4A8},{0x6E0B, 0x9C69},{0x6E0C, 0xE4CB},
- {0x6E0D, 0xD7D5},{0x6E0E, 0xE4C2},{0x6E0F, 0x9C6A},{0x6E10, 0xBDA5},{0x6E11, 0xE4C5},{0x6E12, 0x9C6B},{0x6E13, 0x9C6C},{0x6E14, 0xD3E6},
- {0x6E15, 0x9C6D},{0x6E16, 0xE4C9},{0x6E17, 0xC9F8},{0x6E18, 0x9C6E},{0x6E19, 0x9C6F},{0x6E1A, 0xE4BE},{0x6E1B, 0x9C70},{0x6E1C, 0x9C71},
- {0x6E1D, 0xD3E5},{0x6E1E, 0x9C72},{0x6E1F, 0x9C73},{0x6E20, 0xC7FE},{0x6E21, 0xB6C9},{0x6E22, 0x9C74},{0x6E23, 0xD4FC},{0x6E24, 0xB2B3},
- {0x6E25, 0xE4D7},{0x6E26, 0x9C75},{0x6E27, 0x9C76},{0x6E28, 0x9C77},{0x6E29, 0xCEC2},{0x6E2A, 0x9C78},{0x6E2B, 0xE4CD},{0x6E2C, 0x9C79},
- {0x6E2D, 0xCEBC},{0x6E2E, 0x9C7A},{0x6E2F, 0xB8DB},{0x6E30, 0x9C7B},{0x6E31, 0x9C7C},{0x6E32, 0xE4D6},{0x6E33, 0x9C7D},{0x6E34, 0xBFCA},
- {0x6E35, 0x9C7E},{0x6E36, 0x9C80},{0x6E37, 0x9C81},{0x6E38, 0xD3CE},{0x6E39, 0x9C82},{0x6E3A, 0xC3EC},{0x6E3B, 0x9C83},{0x6E3C, 0x9C84},
- {0x6E3D, 0x9C85},{0x6E3E, 0x9C86},{0x6E3F, 0x9C87},{0x6E40, 0x9C88},{0x6E41, 0x9C89},{0x6E42, 0x9C8A},{0x6E43, 0xC5C8},{0x6E44, 0xE4D8},
- {0x6E45, 0x9C8B},{0x6E46, 0x9C8C},{0x6E47, 0x9C8D},{0x6E48, 0x9C8E},{0x6E49, 0x9C8F},{0x6E4A, 0x9C90},{0x6E4B, 0x9C91},{0x6E4C, 0x9C92},
- {0x6E4D, 0xCDC4},{0x6E4E, 0xE4CF},{0x6E4F, 0x9C93},{0x6E50, 0x9C94},{0x6E51, 0x9C95},{0x6E52, 0x9C96},{0x6E53, 0xE4D4},{0x6E54, 0xE4D5},
- {0x6E55, 0x9C97},{0x6E56, 0xBAFE},{0x6E57, 0x9C98},{0x6E58, 0xCFE6},{0x6E59, 0x9C99},{0x6E5A, 0x9C9A},{0x6E5B, 0xD5BF},{0x6E5C, 0x9C9B},
- {0x6E5D, 0x9C9C},{0x6E5E, 0x9C9D},{0x6E5F, 0xE4D2},{0x6E60, 0x9C9E},{0x6E61, 0x9C9F},{0x6E62, 0x9CA0},{0x6E63, 0x9CA1},{0x6E64, 0x9CA2},
- {0x6E65, 0x9CA3},{0x6E66, 0x9CA4},{0x6E67, 0x9CA5},{0x6E68, 0x9CA6},{0x6E69, 0x9CA7},{0x6E6A, 0x9CA8},{0x6E6B, 0xE4D0},{0x6E6C, 0x9CA9},
- {0x6E6D, 0x9CAA},{0x6E6E, 0xE4CE},{0x6E6F, 0x9CAB},{0x6E70, 0x9CAC},{0x6E71, 0x9CAD},{0x6E72, 0x9CAE},{0x6E73, 0x9CAF},{0x6E74, 0x9CB0},
- {0x6E75, 0x9CB1},{0x6E76, 0x9CB2},{0x6E77, 0x9CB3},{0x6E78, 0x9CB4},{0x6E79, 0x9CB5},{0x6E7A, 0x9CB6},{0x6E7B, 0x9CB7},{0x6E7C, 0x9CB8},
- {0x6E7D, 0x9CB9},{0x6E7E, 0xCDE5},{0x6E7F, 0xCAAA},{0x6E80, 0x9CBA},{0x6E81, 0x9CBB},{0x6E82, 0x9CBC},{0x6E83, 0xC0A3},{0x6E84, 0x9CBD},
- {0x6E85, 0xBDA6},{0x6E86, 0xE4D3},{0x6E87, 0x9CBE},{0x6E88, 0x9CBF},{0x6E89, 0xB8C8},{0x6E8A, 0x9CC0},{0x6E8B, 0x9CC1},{0x6E8C, 0x9CC2},
- {0x6E8D, 0x9CC3},{0x6E8E, 0x9CC4},{0x6E8F, 0xE4E7},{0x6E90, 0xD4B4},{0x6E91, 0x9CC5},{0x6E92, 0x9CC6},{0x6E93, 0x9CC7},{0x6E94, 0x9CC8},
- {0x6E95, 0x9CC9},{0x6E96, 0x9CCA},{0x6E97, 0x9CCB},{0x6E98, 0xE4DB},{0x6E99, 0x9CCC},{0x6E9A, 0x9CCD},{0x6E9B, 0x9CCE},{0x6E9C, 0xC1EF},
- {0x6E9D, 0x9CCF},{0x6E9E, 0x9CD0},{0x6E9F, 0xE4E9},{0x6EA0, 0x9CD1},{0x6EA1, 0x9CD2},{0x6EA2, 0xD2E7},{0x6EA3, 0x9CD3},{0x6EA4, 0x9CD4},
- {0x6EA5, 0xE4DF},{0x6EA6, 0x9CD5},{0x6EA7, 0xE4E0},{0x6EA8, 0x9CD6},{0x6EA9, 0x9CD7},{0x6EAA, 0xCFAA},{0x6EAB, 0x9CD8},{0x6EAC, 0x9CD9},
- {0x6EAD, 0x9CDA},{0x6EAE, 0x9CDB},{0x6EAF, 0xCBDD},{0x6EB0, 0x9CDC},{0x6EB1, 0xE4DA},{0x6EB2, 0xE4D1},{0x6EB3, 0x9CDD},{0x6EB4, 0xE4E5},
- {0x6EB5, 0x9CDE},{0x6EB6, 0xC8DC},{0x6EB7, 0xE4E3},{0x6EB8, 0x9CDF},{0x6EB9, 0x9CE0},{0x6EBA, 0xC4E7},{0x6EBB, 0xE4E2},{0x6EBC, 0x9CE1},
- {0x6EBD, 0xE4E1},{0x6EBE, 0x9CE2},{0x6EBF, 0x9CE3},{0x6EC0, 0x9CE4},{0x6EC1, 0xB3FC},{0x6EC2, 0xE4E8},{0x6EC3, 0x9CE5},{0x6EC4, 0x9CE6},
- {0x6EC5, 0x9CE7},{0x6EC6, 0x9CE8},{0x6EC7, 0xB5E1},{0x6EC8, 0x9CE9},{0x6EC9, 0x9CEA},{0x6ECA, 0x9CEB},{0x6ECB, 0xD7CC},{0x6ECC, 0x9CEC},
- {0x6ECD, 0x9CED},{0x6ECE, 0x9CEE},{0x6ECF, 0xE4E6},{0x6ED0, 0x9CEF},{0x6ED1, 0xBBAC},{0x6ED2, 0x9CF0},{0x6ED3, 0xD7D2},{0x6ED4, 0xCCCF},
- {0x6ED5, 0xEBF8},{0x6ED6, 0x9CF1},{0x6ED7, 0xE4E4},{0x6ED8, 0x9CF2},{0x6ED9, 0x9CF3},{0x6EDA, 0xB9F6},{0x6EDB, 0x9CF4},{0x6EDC, 0x9CF5},
- {0x6EDD, 0x9CF6},{0x6EDE, 0xD6CD},{0x6EDF, 0xE4D9},{0x6EE0, 0xE4DC},{0x6EE1, 0xC2FA},{0x6EE2, 0xE4DE},{0x6EE3, 0x9CF7},{0x6EE4, 0xC2CB},
- {0x6EE5, 0xC0C4},{0x6EE6, 0xC2D0},{0x6EE7, 0x9CF8},{0x6EE8, 0xB1F5},{0x6EE9, 0xCCB2},{0x6EEA, 0x9CF9},{0x6EEB, 0x9CFA},{0x6EEC, 0x9CFB},
- {0x6EED, 0x9CFC},{0x6EEE, 0x9CFD},{0x6EEF, 0x9CFE},{0x6EF0, 0x9D40},{0x6EF1, 0x9D41},{0x6EF2, 0x9D42},{0x6EF3, 0x9D43},{0x6EF4, 0xB5CE},
- {0x6EF5, 0x9D44},{0x6EF6, 0x9D45},{0x6EF7, 0x9D46},{0x6EF8, 0x9D47},{0x6EF9, 0xE4EF},{0x6EFA, 0x9D48},{0x6EFB, 0x9D49},{0x6EFC, 0x9D4A},
- {0x6EFD, 0x9D4B},{0x6EFE, 0x9D4C},{0x6EFF, 0x9D4D},{0x6F00, 0x9D4E},{0x6F01, 0x9D4F},{0x6F02, 0xC6AF},{0x6F03, 0x9D50},{0x6F04, 0x9D51},
- {0x6F05, 0x9D52},{0x6F06, 0xC6E1},{0x6F07, 0x9D53},{0x6F08, 0x9D54},{0x6F09, 0xE4F5},{0x6F0A, 0x9D55},{0x6F0B, 0x9D56},{0x6F0C, 0x9D57},
- {0x6F0D, 0x9D58},{0x6F0E, 0x9D59},{0x6F0F, 0xC2A9},{0x6F10, 0x9D5A},{0x6F11, 0x9D5B},{0x6F12, 0x9D5C},{0x6F13, 0xC0EC},{0x6F14, 0xD1DD},
- {0x6F15, 0xE4EE},{0x6F16, 0x9D5D},{0x6F17, 0x9D5E},{0x6F18, 0x9D5F},{0x6F19, 0x9D60},{0x6F1A, 0x9D61},{0x6F1B, 0x9D62},{0x6F1C, 0x9D63},
- {0x6F1D, 0x9D64},{0x6F1E, 0x9D65},{0x6F1F, 0x9D66},{0x6F20, 0xC4AE},{0x6F21, 0x9D67},{0x6F22, 0x9D68},{0x6F23, 0x9D69},{0x6F24, 0xE4ED},
- {0x6F25, 0x9D6A},{0x6F26, 0x9D6B},{0x6F27, 0x9D6C},{0x6F28, 0x9D6D},{0x6F29, 0xE4F6},{0x6F2A, 0xE4F4},{0x6F2B, 0xC2FE},{0x6F2C, 0x9D6E},
- {0x6F2D, 0xE4DD},{0x6F2E, 0x9D6F},{0x6F2F, 0xE4F0},{0x6F30, 0x9D70},{0x6F31, 0xCAFE},{0x6F32, 0x9D71},{0x6F33, 0xD5C4},{0x6F34, 0x9D72},
- {0x6F35, 0x9D73},{0x6F36, 0xE4F1},{0x6F37, 0x9D74},{0x6F38, 0x9D75},{0x6F39, 0x9D76},{0x6F3A, 0x9D77},{0x6F3B, 0x9D78},{0x6F3C, 0x9D79},
- {0x6F3D, 0x9D7A},{0x6F3E, 0xD1FA},{0x6F3F, 0x9D7B},{0x6F40, 0x9D7C},{0x6F41, 0x9D7D},{0x6F42, 0x9D7E},{0x6F43, 0x9D80},{0x6F44, 0x9D81},
- {0x6F45, 0x9D82},{0x6F46, 0xE4EB},{0x6F47, 0xE4EC},{0x6F48, 0x9D83},{0x6F49, 0x9D84},{0x6F4A, 0x9D85},{0x6F4B, 0xE4F2},{0x6F4C, 0x9D86},
- {0x6F4D, 0xCEAB},{0x6F4E, 0x9D87},{0x6F4F, 0x9D88},{0x6F50, 0x9D89},{0x6F51, 0x9D8A},{0x6F52, 0x9D8B},{0x6F53, 0x9D8C},{0x6F54, 0x9D8D},
- {0x6F55, 0x9D8E},{0x6F56, 0x9D8F},{0x6F57, 0x9D90},{0x6F58, 0xC5CB},{0x6F59, 0x9D91},{0x6F5A, 0x9D92},{0x6F5B, 0x9D93},{0x6F5C, 0xC7B1},
- {0x6F5D, 0x9D94},{0x6F5E, 0xC2BA},{0x6F5F, 0x9D95},{0x6F60, 0x9D96},{0x6F61, 0x9D97},{0x6F62, 0xE4EA},{0x6F63, 0x9D98},{0x6F64, 0x9D99},
- {0x6F65, 0x9D9A},{0x6F66, 0xC1CA},{0x6F67, 0x9D9B},{0x6F68, 0x9D9C},{0x6F69, 0x9D9D},{0x6F6A, 0x9D9E},{0x6F6B, 0x9D9F},{0x6F6C, 0x9DA0},
- {0x6F6D, 0xCCB6},{0x6F6E, 0xB3B1},{0x6F6F, 0x9DA1},{0x6F70, 0x9DA2},{0x6F71, 0x9DA3},{0x6F72, 0xE4FB},{0x6F73, 0x9DA4},{0x6F74, 0xE4F3},
- {0x6F75, 0x9DA5},{0x6F76, 0x9DA6},{0x6F77, 0x9DA7},{0x6F78, 0xE4FA},{0x6F79, 0x9DA8},{0x6F7A, 0xE4FD},{0x6F7B, 0x9DA9},{0x6F7C, 0xE4FC},
- {0x6F7D, 0x9DAA},{0x6F7E, 0x9DAB},{0x6F7F, 0x9DAC},{0x6F80, 0x9DAD},{0x6F81, 0x9DAE},{0x6F82, 0x9DAF},{0x6F83, 0x9DB0},{0x6F84, 0xB3CE},
- {0x6F85, 0x9DB1},{0x6F86, 0x9DB2},{0x6F87, 0x9DB3},{0x6F88, 0xB3BA},{0x6F89, 0xE4F7},{0x6F8A, 0x9DB4},{0x6F8B, 0x9DB5},{0x6F8C, 0xE4F9},
- {0x6F8D, 0xE4F8},{0x6F8E, 0xC5EC},{0x6F8F, 0x9DB6},{0x6F90, 0x9DB7},{0x6F91, 0x9DB8},{0x6F92, 0x9DB9},{0x6F93, 0x9DBA},{0x6F94, 0x9DBB},
- {0x6F95, 0x9DBC},{0x6F96, 0x9DBD},{0x6F97, 0x9DBE},{0x6F98, 0x9DBF},{0x6F99, 0x9DC0},{0x6F9A, 0x9DC1},{0x6F9B, 0x9DC2},{0x6F9C, 0xC0BD},
- {0x6F9D, 0x9DC3},{0x6F9E, 0x9DC4},{0x6F9F, 0x9DC5},{0x6FA0, 0x9DC6},{0x6FA1, 0xD4E8},{0x6FA2, 0x9DC7},{0x6FA3, 0x9DC8},{0x6FA4, 0x9DC9},
- {0x6FA5, 0x9DCA},{0x6FA6, 0x9DCB},{0x6FA7, 0xE5A2},{0x6FA8, 0x9DCC},{0x6FA9, 0x9DCD},{0x6FAA, 0x9DCE},{0x6FAB, 0x9DCF},{0x6FAC, 0x9DD0},
- {0x6FAD, 0x9DD1},{0x6FAE, 0x9DD2},{0x6FAF, 0x9DD3},{0x6FB0, 0x9DD4},{0x6FB1, 0x9DD5},{0x6FB2, 0x9DD6},{0x6FB3, 0xB0C4},{0x6FB4, 0x9DD7},
- {0x6FB5, 0x9DD8},{0x6FB6, 0xE5A4},{0x6FB7, 0x9DD9},{0x6FB8, 0x9DDA},{0x6FB9, 0xE5A3},{0x6FBA, 0x9DDB},{0x6FBB, 0x9DDC},{0x6FBC, 0x9DDD},
- {0x6FBD, 0x9DDE},{0x6FBE, 0x9DDF},{0x6FBF, 0x9DE0},{0x6FC0, 0xBCA4},{0x6FC1, 0x9DE1},{0x6FC2, 0xE5A5},{0x6FC3, 0x9DE2},{0x6FC4, 0x9DE3},
- {0x6FC5, 0x9DE4},{0x6FC6, 0x9DE5},{0x6FC7, 0x9DE6},{0x6FC8, 0x9DE7},{0x6FC9, 0xE5A1},{0x6FCA, 0x9DE8},{0x6FCB, 0x9DE9},{0x6FCC, 0x9DEA},
- {0x6FCD, 0x9DEB},{0x6FCE, 0x9DEC},{0x6FCF, 0x9DED},{0x6FD0, 0x9DEE},{0x6FD1, 0xE4FE},{0x6FD2, 0xB1F4},{0x6FD3, 0x9DEF},{0x6FD4, 0x9DF0},
- {0x6FD5, 0x9DF1},{0x6FD6, 0x9DF2},{0x6FD7, 0x9DF3},{0x6FD8, 0x9DF4},{0x6FD9, 0x9DF5},{0x6FDA, 0x9DF6},{0x6FDB, 0x9DF7},{0x6FDC, 0x9DF8},
- {0x6FDD, 0x9DF9},{0x6FDE, 0xE5A8},{0x6FDF, 0x9DFA},{0x6FE0, 0xE5A9},{0x6FE1, 0xE5A6},{0x6FE2, 0x9DFB},{0x6FE3, 0x9DFC},{0x6FE4, 0x9DFD},
- {0x6FE5, 0x9DFE},{0x6FE6, 0x9E40},{0x6FE7, 0x9E41},{0x6FE8, 0x9E42},{0x6FE9, 0x9E43},{0x6FEA, 0x9E44},{0x6FEB, 0x9E45},{0x6FEC, 0x9E46},
- {0x6FED, 0x9E47},{0x6FEE, 0xE5A7},{0x6FEF, 0xE5AA},{0x6FF0, 0x9E48},{0x6FF1, 0x9E49},{0x6FF2, 0x9E4A},{0x6FF3, 0x9E4B},{0x6FF4, 0x9E4C},
- {0x6FF5, 0x9E4D},{0x6FF6, 0x9E4E},{0x6FF7, 0x9E4F},{0x6FF8, 0x9E50},{0x6FF9, 0x9E51},{0x6FFA, 0x9E52},{0x6FFB, 0x9E53},{0x6FFC, 0x9E54},
- {0x6FFD, 0x9E55},{0x6FFE, 0x9E56},{0x6FFF, 0x9E57},{0x7000, 0x9E58},{0x7001, 0x9E59},{0x7002, 0x9E5A},{0x7003, 0x9E5B},{0x7004, 0x9E5C},
- {0x7005, 0x9E5D},{0x7006, 0x9E5E},{0x7007, 0x9E5F},{0x7008, 0x9E60},{0x7009, 0x9E61},{0x700A, 0x9E62},{0x700B, 0x9E63},{0x700C, 0x9E64},
- {0x700D, 0x9E65},{0x700E, 0x9E66},{0x700F, 0x9E67},{0x7010, 0x9E68},{0x7011, 0xC6D9},{0x7012, 0x9E69},{0x7013, 0x9E6A},{0x7014, 0x9E6B},
- {0x7015, 0x9E6C},{0x7016, 0x9E6D},{0x7017, 0x9E6E},{0x7018, 0x9E6F},{0x7019, 0x9E70},{0x701A, 0xE5AB},{0x701B, 0xE5AD},{0x701C, 0x9E71},
- {0x701D, 0x9E72},{0x701E, 0x9E73},{0x701F, 0x9E74},{0x7020, 0x9E75},{0x7021, 0x9E76},{0x7022, 0x9E77},{0x7023, 0xE5AC},{0x7024, 0x9E78},
- {0x7025, 0x9E79},{0x7026, 0x9E7A},{0x7027, 0x9E7B},{0x7028, 0x9E7C},{0x7029, 0x9E7D},{0x702A, 0x9E7E},{0x702B, 0x9E80},{0x702C, 0x9E81},
- {0x702D, 0x9E82},{0x702E, 0x9E83},{0x702F, 0x9E84},{0x7030, 0x9E85},{0x7031, 0x9E86},{0x7032, 0x9E87},{0x7033, 0x9E88},{0x7034, 0x9E89},
- {0x7035, 0xE5AF},{0x7036, 0x9E8A},{0x7037, 0x9E8B},{0x7038, 0x9E8C},{0x7039, 0xE5AE},{0x703A, 0x9E8D},{0x703B, 0x9E8E},{0x703C, 0x9E8F},
- {0x703D, 0x9E90},{0x703E, 0x9E91},{0x703F, 0x9E92},{0x7040, 0x9E93},{0x7041, 0x9E94},{0x7042, 0x9E95},{0x7043, 0x9E96},{0x7044, 0x9E97},
- {0x7045, 0x9E98},{0x7046, 0x9E99},{0x7047, 0x9E9A},{0x7048, 0x9E9B},{0x7049, 0x9E9C},{0x704A, 0x9E9D},{0x704B, 0x9E9E},{0x704C, 0xB9E0},
- {0x704D, 0x9E9F},{0x704E, 0x9EA0},{0x704F, 0xE5B0},{0x7050, 0x9EA1},{0x7051, 0x9EA2},{0x7052, 0x9EA3},{0x7053, 0x9EA4},{0x7054, 0x9EA5},
- {0x7055, 0x9EA6},{0x7056, 0x9EA7},{0x7057, 0x9EA8},{0x7058, 0x9EA9},{0x7059, 0x9EAA},{0x705A, 0x9EAB},{0x705B, 0x9EAC},{0x705C, 0x9EAD},
- {0x705D, 0x9EAE},{0x705E, 0xE5B1},{0x705F, 0x9EAF},{0x7060, 0x9EB0},{0x7061, 0x9EB1},{0x7062, 0x9EB2},{0x7063, 0x9EB3},{0x7064, 0x9EB4},
- {0x7065, 0x9EB5},{0x7066, 0x9EB6},{0x7067, 0x9EB7},{0x7068, 0x9EB8},{0x7069, 0x9EB9},{0x706A, 0x9EBA},{0x706B, 0xBBF0},{0x706C, 0xECE1},
- {0x706D, 0xC3F0},{0x706E, 0x9EBB},{0x706F, 0xB5C6},{0x7070, 0xBBD2},{0x7071, 0x9EBC},{0x7072, 0x9EBD},{0x7073, 0x9EBE},{0x7074, 0x9EBF},
- {0x7075, 0xC1E9},{0x7076, 0xD4EE},{0x7077, 0x9EC0},{0x7078, 0xBEC4},{0x7079, 0x9EC1},{0x707A, 0x9EC2},{0x707B, 0x9EC3},{0x707C, 0xD7C6},
- {0x707D, 0x9EC4},{0x707E, 0xD4D6},{0x707F, 0xB2D3},{0x7080, 0xECBE},{0x7081, 0x9EC5},{0x7082, 0x9EC6},{0x7083, 0x9EC7},{0x7084, 0x9EC8},
- {0x7085, 0xEAC1},{0x7086, 0x9EC9},{0x7087, 0x9ECA},{0x7088, 0x9ECB},{0x7089, 0xC2AF},{0x708A, 0xB4B6},{0x708B, 0x9ECC},{0x708C, 0x9ECD},
- {0x708D, 0x9ECE},{0x708E, 0xD1D7},{0x708F, 0x9ECF},{0x7090, 0x9ED0},{0x7091, 0x9ED1},{0x7092, 0xB3B4},{0x7093, 0x9ED2},{0x7094, 0xC8B2},
- {0x7095, 0xBFBB},{0x7096, 0xECC0},{0x7097, 0x9ED3},{0x7098, 0x9ED4},{0x7099, 0xD6CB},{0x709A, 0x9ED5},{0x709B, 0x9ED6},{0x709C, 0xECBF},
- {0x709D, 0xECC1},{0x709E, 0x9ED7},{0x709F, 0x9ED8},{0x70A0, 0x9ED9},{0x70A1, 0x9EDA},{0x70A2, 0x9EDB},{0x70A3, 0x9EDC},{0x70A4, 0x9EDD},
- {0x70A5, 0x9EDE},{0x70A6, 0x9EDF},{0x70A7, 0x9EE0},{0x70A8, 0x9EE1},{0x70A9, 0x9EE2},{0x70AA, 0x9EE3},{0x70AB, 0xECC5},{0x70AC, 0xBEE6},
- {0x70AD, 0xCCBF},{0x70AE, 0xC5DA},{0x70AF, 0xBEBC},{0x70B0, 0x9EE4},{0x70B1, 0xECC6},{0x70B2, 0x9EE5},{0x70B3, 0xB1FE},{0x70B4, 0x9EE6},
- {0x70B5, 0x9EE7},{0x70B6, 0x9EE8},{0x70B7, 0xECC4},{0x70B8, 0xD5A8},{0x70B9, 0xB5E3},{0x70BA, 0x9EE9},{0x70BB, 0xECC2},{0x70BC, 0xC1B6},
- {0x70BD, 0xB3E3},{0x70BE, 0x9EEA},{0x70BF, 0x9EEB},{0x70C0, 0xECC3},{0x70C1, 0xCBB8},{0x70C2, 0xC0C3},{0x70C3, 0xCCFE},{0x70C4, 0x9EEC},
- {0x70C5, 0x9EED},{0x70C6, 0x9EEE},{0x70C7, 0x9EEF},{0x70C8, 0xC1D2},{0x70C9, 0x9EF0},{0x70CA, 0xECC8},{0x70CB, 0x9EF1},{0x70CC, 0x9EF2},
- {0x70CD, 0x9EF3},{0x70CE, 0x9EF4},{0x70CF, 0x9EF5},{0x70D0, 0x9EF6},{0x70D1, 0x9EF7},{0x70D2, 0x9EF8},{0x70D3, 0x9EF9},{0x70D4, 0x9EFA},
- {0x70D5, 0x9EFB},{0x70D6, 0x9EFC},{0x70D7, 0x9EFD},{0x70D8, 0xBAE6},{0x70D9, 0xC0D3},{0x70DA, 0x9EFE},{0x70DB, 0xD6F2},{0x70DC, 0x9F40},
- {0x70DD, 0x9F41},{0x70DE, 0x9F42},{0x70DF, 0xD1CC},{0x70E0, 0x9F43},{0x70E1, 0x9F44},{0x70E2, 0x9F45},{0x70E3, 0x9F46},{0x70E4, 0xBFBE},
- {0x70E5, 0x9F47},{0x70E6, 0xB7B3},{0x70E7, 0xC9D5},{0x70E8, 0xECC7},{0x70E9, 0xBBE2},{0x70EA, 0x9F48},{0x70EB, 0xCCCC},{0x70EC, 0xBDFD},
- {0x70ED, 0xC8C8},{0x70EE, 0x9F49},{0x70EF, 0xCFA9},{0x70F0, 0x9F4A},{0x70F1, 0x9F4B},{0x70F2, 0x9F4C},{0x70F3, 0x9F4D},{0x70F4, 0x9F4E},
- {0x70F5, 0x9F4F},{0x70F6, 0x9F50},{0x70F7, 0xCDE9},{0x70F8, 0x9F51},{0x70F9, 0xC5EB},{0x70FA, 0x9F52},{0x70FB, 0x9F53},{0x70FC, 0x9F54},
- {0x70FD, 0xB7E9},{0x70FE, 0x9F55},{0x70FF, 0x9F56},{0x7100, 0x9F57},{0x7101, 0x9F58},{0x7102, 0x9F59},{0x7103, 0x9F5A},{0x7104, 0x9F5B},
- {0x7105, 0x9F5C},{0x7106, 0x9F5D},{0x7107, 0x9F5E},{0x7108, 0x9F5F},{0x7109, 0xD1C9},{0x710A, 0xBAB8},{0x710B, 0x9F60},{0x710C, 0x9F61},
- {0x710D, 0x9F62},{0x710E, 0x9F63},{0x710F, 0x9F64},{0x7110, 0xECC9},{0x7111, 0x9F65},{0x7112, 0x9F66},{0x7113, 0xECCA},{0x7114, 0x9F67},
- {0x7115, 0xBBC0},{0x7116, 0xECCB},{0x7117, 0x9F68},{0x7118, 0xECE2},{0x7119, 0xB1BA},{0x711A, 0xB7D9},{0x711B, 0x9F69},{0x711C, 0x9F6A},
- {0x711D, 0x9F6B},{0x711E, 0x9F6C},{0x711F, 0x9F6D},{0x7120, 0x9F6E},{0x7121, 0x9F6F},{0x7122, 0x9F70},{0x7123, 0x9F71},{0x7124, 0x9F72},
- {0x7125, 0x9F73},{0x7126, 0xBDB9},{0x7127, 0x9F74},{0x7128, 0x9F75},{0x7129, 0x9F76},{0x712A, 0x9F77},{0x712B, 0x9F78},{0x712C, 0x9F79},
- {0x712D, 0x9F7A},{0x712E, 0x9F7B},{0x712F, 0xECCC},{0x7130, 0xD1E6},{0x7131, 0xECCD},{0x7132, 0x9F7C},{0x7133, 0x9F7D},{0x7134, 0x9F7E},
- {0x7135, 0x9F80},{0x7136, 0xC8BB},{0x7137, 0x9F81},{0x7138, 0x9F82},{0x7139, 0x9F83},{0x713A, 0x9F84},{0x713B, 0x9F85},{0x713C, 0x9F86},
- {0x713D, 0x9F87},{0x713E, 0x9F88},{0x713F, 0x9F89},{0x7140, 0x9F8A},{0x7141, 0x9F8B},{0x7142, 0x9F8C},{0x7143, 0x9F8D},{0x7144, 0x9F8E},
- {0x7145, 0xECD1},{0x7146, 0x9F8F},{0x7147, 0x9F90},{0x7148, 0x9F91},{0x7149, 0x9F92},{0x714A, 0xECD3},{0x714B, 0x9F93},{0x714C, 0xBBCD},
- {0x714D, 0x9F94},{0x714E, 0xBCE5},{0x714F, 0x9F95},{0x7150, 0x9F96},{0x7151, 0x9F97},{0x7152, 0x9F98},{0x7153, 0x9F99},{0x7154, 0x9F9A},
- {0x7155, 0x9F9B},{0x7156, 0x9F9C},{0x7157, 0x9F9D},{0x7158, 0x9F9E},{0x7159, 0x9F9F},{0x715A, 0x9FA0},{0x715B, 0x9FA1},{0x715C, 0xECCF},
- {0x715D, 0x9FA2},{0x715E, 0xC9B7},{0x715F, 0x9FA3},{0x7160, 0x9FA4},{0x7161, 0x9FA5},{0x7162, 0x9FA6},{0x7163, 0x9FA7},{0x7164, 0xC3BA},
- {0x7165, 0x9FA8},{0x7166, 0xECE3},{0x7167, 0xD5D5},{0x7168, 0xECD0},{0x7169, 0x9FA9},{0x716A, 0x9FAA},{0x716B, 0x9FAB},{0x716C, 0x9FAC},
- {0x716D, 0x9FAD},{0x716E, 0xD6F3},{0x716F, 0x9FAE},{0x7170, 0x9FAF},{0x7171, 0x9FB0},{0x7172, 0xECD2},{0x7173, 0xECCE},{0x7174, 0x9FB1},
- {0x7175, 0x9FB2},{0x7176, 0x9FB3},{0x7177, 0x9FB4},{0x7178, 0xECD4},{0x7179, 0x9FB5},{0x717A, 0xECD5},{0x717B, 0x9FB6},{0x717C, 0x9FB7},
- {0x717D, 0xC9BF},{0x717E, 0x9FB8},{0x717F, 0x9FB9},{0x7180, 0x9FBA},{0x7181, 0x9FBB},{0x7182, 0x9FBC},{0x7183, 0x9FBD},{0x7184, 0xCFA8},
- {0x7185, 0x9FBE},{0x7186, 0x9FBF},{0x7187, 0x9FC0},{0x7188, 0x9FC1},{0x7189, 0x9FC2},{0x718A, 0xD0DC},{0x718B, 0x9FC3},{0x718C, 0x9FC4},
- {0x718D, 0x9FC5},{0x718E, 0x9FC6},{0x718F, 0xD1AC},{0x7190, 0x9FC7},{0x7191, 0x9FC8},{0x7192, 0x9FC9},{0x7193, 0x9FCA},{0x7194, 0xC8DB},
- {0x7195, 0x9FCB},{0x7196, 0x9FCC},{0x7197, 0x9FCD},{0x7198, 0xECD6},{0x7199, 0xCEF5},{0x719A, 0x9FCE},{0x719B, 0x9FCF},{0x719C, 0x9FD0},
- {0x719D, 0x9FD1},{0x719E, 0x9FD2},{0x719F, 0xCAEC},{0x71A0, 0xECDA},{0x71A1, 0x9FD3},{0x71A2, 0x9FD4},{0x71A3, 0x9FD5},{0x71A4, 0x9FD6},
- {0x71A5, 0x9FD7},{0x71A6, 0x9FD8},{0x71A7, 0x9FD9},{0x71A8, 0xECD9},{0x71A9, 0x9FDA},{0x71AA, 0x9FDB},{0x71AB, 0x9FDC},{0x71AC, 0xB0BE},
- {0x71AD, 0x9FDD},{0x71AE, 0x9FDE},{0x71AF, 0x9FDF},{0x71B0, 0x9FE0},{0x71B1, 0x9FE1},{0x71B2, 0x9FE2},{0x71B3, 0xECD7},{0x71B4, 0x9FE3},
- {0x71B5, 0xECD8},{0x71B6, 0x9FE4},{0x71B7, 0x9FE5},{0x71B8, 0x9FE6},{0x71B9, 0xECE4},{0x71BA, 0x9FE7},{0x71BB, 0x9FE8},{0x71BC, 0x9FE9},
- {0x71BD, 0x9FEA},{0x71BE, 0x9FEB},{0x71BF, 0x9FEC},{0x71C0, 0x9FED},{0x71C1, 0x9FEE},{0x71C2, 0x9FEF},{0x71C3, 0xC8BC},{0x71C4, 0x9FF0},
- {0x71C5, 0x9FF1},{0x71C6, 0x9FF2},{0x71C7, 0x9FF3},{0x71C8, 0x9FF4},{0x71C9, 0x9FF5},{0x71CA, 0x9FF6},{0x71CB, 0x9FF7},{0x71CC, 0x9FF8},
- {0x71CD, 0x9FF9},{0x71CE, 0xC1C7},{0x71CF, 0x9FFA},{0x71D0, 0x9FFB},{0x71D1, 0x9FFC},{0x71D2, 0x9FFD},{0x71D3, 0x9FFE},{0x71D4, 0xECDC},
- {0x71D5, 0xD1E0},{0x71D6, 0xA040},{0x71D7, 0xA041},{0x71D8, 0xA042},{0x71D9, 0xA043},{0x71DA, 0xA044},{0x71DB, 0xA045},{0x71DC, 0xA046},
- {0x71DD, 0xA047},{0x71DE, 0xA048},{0x71DF, 0xA049},{0x71E0, 0xECDB},{0x71E1, 0xA04A},{0x71E2, 0xA04B},{0x71E3, 0xA04C},{0x71E4, 0xA04D},
- {0x71E5, 0xD4EF},{0x71E6, 0xA04E},{0x71E7, 0xECDD},{0x71E8, 0xA04F},{0x71E9, 0xA050},{0x71EA, 0xA051},{0x71EB, 0xA052},{0x71EC, 0xA053},
- {0x71ED, 0xA054},{0x71EE, 0xDBC6},{0x71EF, 0xA055},{0x71F0, 0xA056},{0x71F1, 0xA057},{0x71F2, 0xA058},{0x71F3, 0xA059},{0x71F4, 0xA05A},
- {0x71F5, 0xA05B},{0x71F6, 0xA05C},{0x71F7, 0xA05D},{0x71F8, 0xA05E},{0x71F9, 0xECDE},{0x71FA, 0xA05F},{0x71FB, 0xA060},{0x71FC, 0xA061},
- {0x71FD, 0xA062},{0x71FE, 0xA063},{0x71FF, 0xA064},{0x7200, 0xA065},{0x7201, 0xA066},{0x7202, 0xA067},{0x7203, 0xA068},{0x7204, 0xA069},
- {0x7205, 0xA06A},{0x7206, 0xB1AC},{0x7207, 0xA06B},{0x7208, 0xA06C},{0x7209, 0xA06D},{0x720A, 0xA06E},{0x720B, 0xA06F},{0x720C, 0xA070},
- {0x720D, 0xA071},{0x720E, 0xA072},{0x720F, 0xA073},{0x7210, 0xA074},{0x7211, 0xA075},{0x7212, 0xA076},{0x7213, 0xA077},{0x7214, 0xA078},
- {0x7215, 0xA079},{0x7216, 0xA07A},{0x7217, 0xA07B},{0x7218, 0xA07C},{0x7219, 0xA07D},{0x721A, 0xA07E},{0x721B, 0xA080},{0x721C, 0xA081},
- {0x721D, 0xECDF},{0x721E, 0xA082},{0x721F, 0xA083},{0x7220, 0xA084},{0x7221, 0xA085},{0x7222, 0xA086},{0x7223, 0xA087},{0x7224, 0xA088},
- {0x7225, 0xA089},{0x7226, 0xA08A},{0x7227, 0xA08B},{0x7228, 0xECE0},{0x7229, 0xA08C},{0x722A, 0xD7A6},{0x722B, 0xA08D},{0x722C, 0xC5C0},
- {0x722D, 0xA08E},{0x722E, 0xA08F},{0x722F, 0xA090},{0x7230, 0xEBBC},{0x7231, 0xB0AE},{0x7232, 0xA091},{0x7233, 0xA092},{0x7234, 0xA093},
- {0x7235, 0xBEF4},{0x7236, 0xB8B8},{0x7237, 0xD2AF},{0x7238, 0xB0D6},{0x7239, 0xB5F9},{0x723A, 0xA094},{0x723B, 0xD8B3},{0x723C, 0xA095},
- {0x723D, 0xCBAC},{0x723E, 0xA096},{0x723F, 0xE3DD},{0x7240, 0xA097},{0x7241, 0xA098},{0x7242, 0xA099},{0x7243, 0xA09A},{0x7244, 0xA09B},
- {0x7245, 0xA09C},{0x7246, 0xA09D},{0x7247, 0xC6AC},{0x7248, 0xB0E6},{0x7249, 0xA09E},{0x724A, 0xA09F},{0x724B, 0xA0A0},{0x724C, 0xC5C6},
- {0x724D, 0xEBB9},{0x724E, 0xA0A1},{0x724F, 0xA0A2},{0x7250, 0xA0A3},{0x7251, 0xA0A4},{0x7252, 0xEBBA},{0x7253, 0xA0A5},{0x7254, 0xA0A6},
- {0x7255, 0xA0A7},{0x7256, 0xEBBB},{0x7257, 0xA0A8},{0x7258, 0xA0A9},{0x7259, 0xD1C0},{0x725A, 0xA0AA},{0x725B, 0xC5A3},{0x725C, 0xA0AB},
- {0x725D, 0xEAF2},{0x725E, 0xA0AC},{0x725F, 0xC4B2},{0x7260, 0xA0AD},{0x7261, 0xC4B5},{0x7262, 0xC0CE},{0x7263, 0xA0AE},{0x7264, 0xA0AF},
- {0x7265, 0xA0B0},{0x7266, 0xEAF3},{0x7267, 0xC4C1},{0x7268, 0xA0B1},{0x7269, 0xCEEF},{0x726A, 0xA0B2},{0x726B, 0xA0B3},{0x726C, 0xA0B4},
- {0x726D, 0xA0B5},{0x726E, 0xEAF0},{0x726F, 0xEAF4},{0x7270, 0xA0B6},{0x7271, 0xA0B7},{0x7272, 0xC9FC},{0x7273, 0xA0B8},{0x7274, 0xA0B9},
- {0x7275, 0xC7A3},{0x7276, 0xA0BA},{0x7277, 0xA0BB},{0x7278, 0xA0BC},{0x7279, 0xCCD8},{0x727A, 0xCEFE},{0x727B, 0xA0BD},{0x727C, 0xA0BE},
- {0x727D, 0xA0BF},{0x727E, 0xEAF5},{0x727F, 0xEAF6},{0x7280, 0xCFAC},{0x7281, 0xC0E7},{0x7282, 0xA0C0},{0x7283, 0xA0C1},{0x7284, 0xEAF7},
- {0x7285, 0xA0C2},{0x7286, 0xA0C3},{0x7287, 0xA0C4},{0x7288, 0xA0C5},{0x7289, 0xA0C6},{0x728A, 0xB6BF},{0x728B, 0xEAF8},{0x728C, 0xA0C7},
- {0x728D, 0xEAF9},{0x728E, 0xA0C8},{0x728F, 0xEAFA},{0x7290, 0xA0C9},{0x7291, 0xA0CA},{0x7292, 0xEAFB},{0x7293, 0xA0CB},{0x7294, 0xA0CC},
- {0x7295, 0xA0CD},{0x7296, 0xA0CE},{0x7297, 0xA0CF},{0x7298, 0xA0D0},{0x7299, 0xA0D1},{0x729A, 0xA0D2},{0x729B, 0xA0D3},{0x729C, 0xA0D4},
- {0x729D, 0xA0D5},{0x729E, 0xA0D6},{0x729F, 0xEAF1},{0x72A0, 0xA0D7},{0x72A1, 0xA0D8},{0x72A2, 0xA0D9},{0x72A3, 0xA0DA},{0x72A4, 0xA0DB},
- {0x72A5, 0xA0DC},{0x72A6, 0xA0DD},{0x72A7, 0xA0DE},{0x72A8, 0xA0DF},{0x72A9, 0xA0E0},{0x72AA, 0xA0E1},{0x72AB, 0xA0E2},{0x72AC, 0xC8AE},
- {0x72AD, 0xE1EB},{0x72AE, 0xA0E3},{0x72AF, 0xB7B8},{0x72B0, 0xE1EC},{0x72B1, 0xA0E4},{0x72B2, 0xA0E5},{0x72B3, 0xA0E6},{0x72B4, 0xE1ED},
- {0x72B5, 0xA0E7},{0x72B6, 0xD7B4},{0x72B7, 0xE1EE},{0x72B8, 0xE1EF},{0x72B9, 0xD3CC},{0x72BA, 0xA0E8},{0x72BB, 0xA0E9},{0x72BC, 0xA0EA},
- {0x72BD, 0xA0EB},{0x72BE, 0xA0EC},{0x72BF, 0xA0ED},{0x72C0, 0xA0EE},{0x72C1, 0xE1F1},{0x72C2, 0xBFF1},{0x72C3, 0xE1F0},{0x72C4, 0xB5D2},
- {0x72C5, 0xA0EF},{0x72C6, 0xA0F0},{0x72C7, 0xA0F1},{0x72C8, 0xB1B7},{0x72C9, 0xA0F2},{0x72CA, 0xA0F3},{0x72CB, 0xA0F4},{0x72CC, 0xA0F5},
- {0x72CD, 0xE1F3},{0x72CE, 0xE1F2},{0x72CF, 0xA0F6},{0x72D0, 0xBAFC},{0x72D1, 0xA0F7},{0x72D2, 0xE1F4},{0x72D3, 0xA0F8},{0x72D4, 0xA0F9},
- {0x72D5, 0xA0FA},{0x72D6, 0xA0FB},{0x72D7, 0xB9B7},{0x72D8, 0xA0FC},{0x72D9, 0xBED1},{0x72DA, 0xA0FD},{0x72DB, 0xA0FE},{0x72DC, 0xAA40},
- {0x72DD, 0xAA41},{0x72DE, 0xC4FC},{0x72DF, 0xAA42},{0x72E0, 0xBADD},{0x72E1, 0xBDC6},{0x72E2, 0xAA43},{0x72E3, 0xAA44},{0x72E4, 0xAA45},
- {0x72E5, 0xAA46},{0x72E6, 0xAA47},{0x72E7, 0xAA48},{0x72E8, 0xE1F5},{0x72E9, 0xE1F7},{0x72EA, 0xAA49},{0x72EB, 0xAA4A},{0x72EC, 0xB6C0},
- {0x72ED, 0xCFC1},{0x72EE, 0xCAA8},{0x72EF, 0xE1F6},{0x72F0, 0xD5F8},{0x72F1, 0xD3FC},{0x72F2, 0xE1F8},{0x72F3, 0xE1FC},{0x72F4, 0xE1F9},
- {0x72F5, 0xAA4B},{0x72F6, 0xAA4C},{0x72F7, 0xE1FA},{0x72F8, 0xC0EA},{0x72F9, 0xAA4D},{0x72FA, 0xE1FE},{0x72FB, 0xE2A1},{0x72FC, 0xC0C7},
- {0x72FD, 0xAA4E},{0x72FE, 0xAA4F},{0x72FF, 0xAA50},{0x7300, 0xAA51},{0x7301, 0xE1FB},{0x7302, 0xAA52},{0x7303, 0xE1FD},{0x7304, 0xAA53},
- {0x7305, 0xAA54},{0x7306, 0xAA55},{0x7307, 0xAA56},{0x7308, 0xAA57},{0x7309, 0xAA58},{0x730A, 0xE2A5},{0x730B, 0xAA59},{0x730C, 0xAA5A},
- {0x730D, 0xAA5B},{0x730E, 0xC1D4},{0x730F, 0xAA5C},{0x7310, 0xAA5D},{0x7311, 0xAA5E},{0x7312, 0xAA5F},{0x7313, 0xE2A3},{0x7314, 0xAA60},
- {0x7315, 0xE2A8},{0x7316, 0xB2FE},{0x7317, 0xE2A2},{0x7318, 0xAA61},{0x7319, 0xAA62},{0x731A, 0xAA63},{0x731B, 0xC3CD},{0x731C, 0xB2C2},
- {0x731D, 0xE2A7},{0x731E, 0xE2A6},{0x731F, 0xAA64},{0x7320, 0xAA65},{0x7321, 0xE2A4},{0x7322, 0xE2A9},{0x7323, 0xAA66},{0x7324, 0xAA67},
- {0x7325, 0xE2AB},{0x7326, 0xAA68},{0x7327, 0xAA69},{0x7328, 0xAA6A},{0x7329, 0xD0C9},{0x732A, 0xD6ED},{0x732B, 0xC3A8},{0x732C, 0xE2AC},
- {0x732D, 0xAA6B},{0x732E, 0xCFD7},{0x732F, 0xAA6C},{0x7330, 0xAA6D},{0x7331, 0xE2AE},{0x7332, 0xAA6E},{0x7333, 0xAA6F},{0x7334, 0xBAEF},
- {0x7335, 0xAA70},{0x7336, 0xAA71},{0x7337, 0xE9E0},{0x7338, 0xE2AD},{0x7339, 0xE2AA},{0x733A, 0xAA72},{0x733B, 0xAA73},{0x733C, 0xAA74},
- {0x733D, 0xAA75},{0x733E, 0xBBAB},{0x733F, 0xD4B3},{0x7340, 0xAA76},{0x7341, 0xAA77},{0x7342, 0xAA78},{0x7343, 0xAA79},{0x7344, 0xAA7A},
- {0x7345, 0xAA7B},{0x7346, 0xAA7C},{0x7347, 0xAA7D},{0x7348, 0xAA7E},{0x7349, 0xAA80},{0x734A, 0xAA81},{0x734B, 0xAA82},{0x734C, 0xAA83},
- {0x734D, 0xE2B0},{0x734E, 0xAA84},{0x734F, 0xAA85},{0x7350, 0xE2AF},{0x7351, 0xAA86},{0x7352, 0xE9E1},{0x7353, 0xAA87},{0x7354, 0xAA88},
- {0x7355, 0xAA89},{0x7356, 0xAA8A},{0x7357, 0xE2B1},{0x7358, 0xAA8B},{0x7359, 0xAA8C},{0x735A, 0xAA8D},{0x735B, 0xAA8E},{0x735C, 0xAA8F},
- {0x735D, 0xAA90},{0x735E, 0xAA91},{0x735F, 0xAA92},{0x7360, 0xE2B2},{0x7361, 0xAA93},{0x7362, 0xAA94},{0x7363, 0xAA95},{0x7364, 0xAA96},
- {0x7365, 0xAA97},{0x7366, 0xAA98},{0x7367, 0xAA99},{0x7368, 0xAA9A},{0x7369, 0xAA9B},{0x736A, 0xAA9C},{0x736B, 0xAA9D},{0x736C, 0xE2B3},
- {0x736D, 0xCCA1},{0x736E, 0xAA9E},{0x736F, 0xE2B4},{0x7370, 0xAA9F},{0x7371, 0xAAA0},{0x7372, 0xAB40},{0x7373, 0xAB41},{0x7374, 0xAB42},
- {0x7375, 0xAB43},{0x7376, 0xAB44},{0x7377, 0xAB45},{0x7378, 0xAB46},{0x7379, 0xAB47},{0x737A, 0xAB48},{0x737B, 0xAB49},{0x737C, 0xAB4A},
- {0x737D, 0xAB4B},{0x737E, 0xE2B5},{0x737F, 0xAB4C},{0x7380, 0xAB4D},{0x7381, 0xAB4E},{0x7382, 0xAB4F},{0x7383, 0xAB50},{0x7384, 0xD0FE},
- {0x7385, 0xAB51},{0x7386, 0xAB52},{0x7387, 0xC2CA},{0x7388, 0xAB53},{0x7389, 0xD3F1},{0x738A, 0xAB54},{0x738B, 0xCDF5},{0x738C, 0xAB55},
- {0x738D, 0xAB56},{0x738E, 0xE7E0},{0x738F, 0xAB57},{0x7390, 0xAB58},{0x7391, 0xE7E1},{0x7392, 0xAB59},{0x7393, 0xAB5A},{0x7394, 0xAB5B},
- {0x7395, 0xAB5C},{0x7396, 0xBEC1},{0x7397, 0xAB5D},{0x7398, 0xAB5E},{0x7399, 0xAB5F},{0x739A, 0xAB60},{0x739B, 0xC2EA},{0x739C, 0xAB61},
- {0x739D, 0xAB62},{0x739E, 0xAB63},{0x739F, 0xE7E4},{0x73A0, 0xAB64},{0x73A1, 0xAB65},{0x73A2, 0xE7E3},{0x73A3, 0xAB66},{0x73A4, 0xAB67},
- {0x73A5, 0xAB68},{0x73A6, 0xAB69},{0x73A7, 0xAB6A},{0x73A8, 0xAB6B},{0x73A9, 0xCDE6},{0x73AA, 0xAB6C},{0x73AB, 0xC3B5},{0x73AC, 0xAB6D},
- {0x73AD, 0xAB6E},{0x73AE, 0xE7E2},{0x73AF, 0xBBB7},{0x73B0, 0xCFD6},{0x73B1, 0xAB6F},{0x73B2, 0xC1E1},{0x73B3, 0xE7E9},{0x73B4, 0xAB70},
- {0x73B5, 0xAB71},{0x73B6, 0xAB72},{0x73B7, 0xE7E8},{0x73B8, 0xAB73},{0x73B9, 0xAB74},{0x73BA, 0xE7F4},{0x73BB, 0xB2A3},{0x73BC, 0xAB75},
- {0x73BD, 0xAB76},{0x73BE, 0xAB77},{0x73BF, 0xAB78},{0x73C0, 0xE7EA},{0x73C1, 0xAB79},{0x73C2, 0xE7E6},{0x73C3, 0xAB7A},{0x73C4, 0xAB7B},
- {0x73C5, 0xAB7C},{0x73C6, 0xAB7D},{0x73C7, 0xAB7E},{0x73C8, 0xE7EC},{0x73C9, 0xE7EB},{0x73CA, 0xC9BA},{0x73CB, 0xAB80},{0x73CC, 0xAB81},
- {0x73CD, 0xD5E4},{0x73CE, 0xAB82},{0x73CF, 0xE7E5},{0x73D0, 0xB7A9},{0x73D1, 0xE7E7},{0x73D2, 0xAB83},{0x73D3, 0xAB84},{0x73D4, 0xAB85},
- {0x73D5, 0xAB86},{0x73D6, 0xAB87},{0x73D7, 0xAB88},{0x73D8, 0xAB89},{0x73D9, 0xE7EE},{0x73DA, 0xAB8A},{0x73DB, 0xAB8B},{0x73DC, 0xAB8C},
- {0x73DD, 0xAB8D},{0x73DE, 0xE7F3},{0x73DF, 0xAB8E},{0x73E0, 0xD6E9},{0x73E1, 0xAB8F},{0x73E2, 0xAB90},{0x73E3, 0xAB91},{0x73E4, 0xAB92},
- {0x73E5, 0xE7ED},{0x73E6, 0xAB93},{0x73E7, 0xE7F2},{0x73E8, 0xAB94},{0x73E9, 0xE7F1},{0x73EA, 0xAB95},{0x73EB, 0xAB96},{0x73EC, 0xAB97},
- {0x73ED, 0xB0E0},{0x73EE, 0xAB98},{0x73EF, 0xAB99},{0x73F0, 0xAB9A},{0x73F1, 0xAB9B},{0x73F2, 0xE7F5},{0x73F3, 0xAB9C},{0x73F4, 0xAB9D},
- {0x73F5, 0xAB9E},{0x73F6, 0xAB9F},{0x73F7, 0xABA0},{0x73F8, 0xAC40},{0x73F9, 0xAC41},{0x73FA, 0xAC42},{0x73FB, 0xAC43},{0x73FC, 0xAC44},
- {0x73FD, 0xAC45},{0x73FE, 0xAC46},{0x73FF, 0xAC47},{0x7400, 0xAC48},{0x7401, 0xAC49},{0x7402, 0xAC4A},{0x7403, 0xC7F2},{0x7404, 0xAC4B},
- {0x7405, 0xC0C5},{0x7406, 0xC0ED},{0x7407, 0xAC4C},{0x7408, 0xAC4D},{0x7409, 0xC1F0},{0x740A, 0xE7F0},{0x740B, 0xAC4E},{0x740C, 0xAC4F},
- {0x740D, 0xAC50},{0x740E, 0xAC51},{0x740F, 0xE7F6},{0x7410, 0xCBF6},{0x7411, 0xAC52},{0x7412, 0xAC53},{0x7413, 0xAC54},{0x7414, 0xAC55},
- {0x7415, 0xAC56},{0x7416, 0xAC57},{0x7417, 0xAC58},{0x7418, 0xAC59},{0x7419, 0xAC5A},{0x741A, 0xE8A2},{0x741B, 0xE8A1},{0x741C, 0xAC5B},
- {0x741D, 0xAC5C},{0x741E, 0xAC5D},{0x741F, 0xAC5E},{0x7420, 0xAC5F},{0x7421, 0xAC60},{0x7422, 0xD7C1},{0x7423, 0xAC61},{0x7424, 0xAC62},
- {0x7425, 0xE7FA},{0x7426, 0xE7F9},{0x7427, 0xAC63},{0x7428, 0xE7FB},{0x7429, 0xAC64},{0x742A, 0xE7F7},{0x742B, 0xAC65},{0x742C, 0xE7FE},
- {0x742D, 0xAC66},{0x742E, 0xE7FD},{0x742F, 0xAC67},{0x7430, 0xE7FC},{0x7431, 0xAC68},{0x7432, 0xAC69},{0x7433, 0xC1D5},{0x7434, 0xC7D9},
- {0x7435, 0xC5FD},{0x7436, 0xC5C3},{0x7437, 0xAC6A},{0x7438, 0xAC6B},{0x7439, 0xAC6C},{0x743A, 0xAC6D},{0x743B, 0xAC6E},{0x743C, 0xC7ED},
- {0x743D, 0xAC6F},{0x743E, 0xAC70},{0x743F, 0xAC71},{0x7440, 0xAC72},{0x7441, 0xE8A3},{0x7442, 0xAC73},{0x7443, 0xAC74},{0x7444, 0xAC75},
- {0x7445, 0xAC76},{0x7446, 0xAC77},{0x7447, 0xAC78},{0x7448, 0xAC79},{0x7449, 0xAC7A},{0x744A, 0xAC7B},{0x744B, 0xAC7C},{0x744C, 0xAC7D},
- {0x744D, 0xAC7E},{0x744E, 0xAC80},{0x744F, 0xAC81},{0x7450, 0xAC82},{0x7451, 0xAC83},{0x7452, 0xAC84},{0x7453, 0xAC85},{0x7454, 0xAC86},
- {0x7455, 0xE8A6},{0x7456, 0xAC87},{0x7457, 0xE8A5},{0x7458, 0xAC88},{0x7459, 0xE8A7},{0x745A, 0xBAF7},{0x745B, 0xE7F8},{0x745C, 0xE8A4},
- {0x745D, 0xAC89},{0x745E, 0xC8F0},{0x745F, 0xC9AA},{0x7460, 0xAC8A},{0x7461, 0xAC8B},{0x7462, 0xAC8C},{0x7463, 0xAC8D},{0x7464, 0xAC8E},
- {0x7465, 0xAC8F},{0x7466, 0xAC90},{0x7467, 0xAC91},{0x7468, 0xAC92},{0x7469, 0xAC93},{0x746A, 0xAC94},{0x746B, 0xAC95},{0x746C, 0xAC96},
- {0x746D, 0xE8A9},{0x746E, 0xAC97},{0x746F, 0xAC98},{0x7470, 0xB9E5},{0x7471, 0xAC99},{0x7472, 0xAC9A},{0x7473, 0xAC9B},{0x7474, 0xAC9C},
- {0x7475, 0xAC9D},{0x7476, 0xD1FE},{0x7477, 0xE8A8},{0x7478, 0xAC9E},{0x7479, 0xAC9F},{0x747A, 0xACA0},{0x747B, 0xAD40},{0x747C, 0xAD41},
- {0x747D, 0xAD42},{0x747E, 0xE8AA},{0x747F, 0xAD43},{0x7480, 0xE8AD},{0x7481, 0xE8AE},{0x7482, 0xAD44},{0x7483, 0xC1A7},{0x7484, 0xAD45},
- {0x7485, 0xAD46},{0x7486, 0xAD47},{0x7487, 0xE8AF},{0x7488, 0xAD48},{0x7489, 0xAD49},{0x748A, 0xAD4A},{0x748B, 0xE8B0},{0x748C, 0xAD4B},
- {0x748D, 0xAD4C},{0x748E, 0xE8AC},{0x748F, 0xAD4D},{0x7490, 0xE8B4},{0x7491, 0xAD4E},{0x7492, 0xAD4F},{0x7493, 0xAD50},{0x7494, 0xAD51},
- {0x7495, 0xAD52},{0x7496, 0xAD53},{0x7497, 0xAD54},{0x7498, 0xAD55},{0x7499, 0xAD56},{0x749A, 0xAD57},{0x749B, 0xAD58},{0x749C, 0xE8AB},
- {0x749D, 0xAD59},{0x749E, 0xE8B1},{0x749F, 0xAD5A},{0x74A0, 0xAD5B},{0x74A1, 0xAD5C},{0x74A2, 0xAD5D},{0x74A3, 0xAD5E},{0x74A4, 0xAD5F},
- {0x74A5, 0xAD60},{0x74A6, 0xAD61},{0x74A7, 0xE8B5},{0x74A8, 0xE8B2},{0x74A9, 0xE8B3},{0x74AA, 0xAD62},{0x74AB, 0xAD63},{0x74AC, 0xAD64},
- {0x74AD, 0xAD65},{0x74AE, 0xAD66},{0x74AF, 0xAD67},{0x74B0, 0xAD68},{0x74B1, 0xAD69},{0x74B2, 0xAD6A},{0x74B3, 0xAD6B},{0x74B4, 0xAD6C},
- {0x74B5, 0xAD6D},{0x74B6, 0xAD6E},{0x74B7, 0xAD6F},{0x74B8, 0xAD70},{0x74B9, 0xAD71},{0x74BA, 0xE8B7},{0x74BB, 0xAD72},{0x74BC, 0xAD73},
- {0x74BD, 0xAD74},{0x74BE, 0xAD75},{0x74BF, 0xAD76},{0x74C0, 0xAD77},{0x74C1, 0xAD78},{0x74C2, 0xAD79},{0x74C3, 0xAD7A},{0x74C4, 0xAD7B},
- {0x74C5, 0xAD7C},{0x74C6, 0xAD7D},{0x74C7, 0xAD7E},{0x74C8, 0xAD80},{0x74C9, 0xAD81},{0x74CA, 0xAD82},{0x74CB, 0xAD83},{0x74CC, 0xAD84},
- {0x74CD, 0xAD85},{0x74CE, 0xAD86},{0x74CF, 0xAD87},{0x74D0, 0xAD88},{0x74D1, 0xAD89},{0x74D2, 0xE8B6},{0x74D3, 0xAD8A},{0x74D4, 0xAD8B},
- {0x74D5, 0xAD8C},{0x74D6, 0xAD8D},{0x74D7, 0xAD8E},{0x74D8, 0xAD8F},{0x74D9, 0xAD90},{0x74DA, 0xAD91},{0x74DB, 0xAD92},{0x74DC, 0xB9CF},
- {0x74DD, 0xAD93},{0x74DE, 0xF0AC},{0x74DF, 0xAD94},{0x74E0, 0xF0AD},{0x74E1, 0xAD95},{0x74E2, 0xC6B0},{0x74E3, 0xB0EA},{0x74E4, 0xC8BF},
- {0x74E5, 0xAD96},{0x74E6, 0xCDDF},{0x74E7, 0xAD97},{0x74E8, 0xAD98},{0x74E9, 0xAD99},{0x74EA, 0xAD9A},{0x74EB, 0xAD9B},{0x74EC, 0xAD9C},
- {0x74ED, 0xAD9D},{0x74EE, 0xCECD},{0x74EF, 0xEAB1},{0x74F0, 0xAD9E},{0x74F1, 0xAD9F},{0x74F2, 0xADA0},{0x74F3, 0xAE40},{0x74F4, 0xEAB2},
- {0x74F5, 0xAE41},{0x74F6, 0xC6BF},{0x74F7, 0xB4C9},{0x74F8, 0xAE42},{0x74F9, 0xAE43},{0x74FA, 0xAE44},{0x74FB, 0xAE45},{0x74FC, 0xAE46},
- {0x74FD, 0xAE47},{0x74FE, 0xAE48},{0x74FF, 0xEAB3},{0x7500, 0xAE49},{0x7501, 0xAE4A},{0x7502, 0xAE4B},{0x7503, 0xAE4C},{0x7504, 0xD5E7},
- {0x7505, 0xAE4D},{0x7506, 0xAE4E},{0x7507, 0xAE4F},{0x7508, 0xAE50},{0x7509, 0xAE51},{0x750A, 0xAE52},{0x750B, 0xAE53},{0x750C, 0xAE54},
- {0x750D, 0xDDF9},{0x750E, 0xAE55},{0x750F, 0xEAB4},{0x7510, 0xAE56},{0x7511, 0xEAB5},{0x7512, 0xAE57},{0x7513, 0xEAB6},{0x7514, 0xAE58},
- {0x7515, 0xAE59},{0x7516, 0xAE5A},{0x7517, 0xAE5B},{0x7518, 0xB8CA},{0x7519, 0xDFB0},{0x751A, 0xC9F5},{0x751B, 0xAE5C},{0x751C, 0xCCF0},
- {0x751D, 0xAE5D},{0x751E, 0xAE5E},{0x751F, 0xC9FA},{0x7520, 0xAE5F},{0x7521, 0xAE60},{0x7522, 0xAE61},{0x7523, 0xAE62},{0x7524, 0xAE63},
- {0x7525, 0xC9FB},{0x7526, 0xAE64},{0x7527, 0xAE65},{0x7528, 0xD3C3},{0x7529, 0xCBA6},{0x752A, 0xAE66},{0x752B, 0xB8A6},{0x752C, 0xF0AE},
- {0x752D, 0xB1C2},{0x752E, 0xAE67},{0x752F, 0xE5B8},{0x7530, 0xCCEF},{0x7531, 0xD3C9},{0x7532, 0xBCD7},{0x7533, 0xC9EA},{0x7534, 0xAE68},
- {0x7535, 0xB5E7},{0x7536, 0xAE69},{0x7537, 0xC4D0},{0x7538, 0xB5E9},{0x7539, 0xAE6A},{0x753A, 0xEEAE},{0x753B, 0xBBAD},{0x753C, 0xAE6B},
- {0x753D, 0xAE6C},{0x753E, 0xE7DE},{0x753F, 0xAE6D},{0x7540, 0xEEAF},{0x7541, 0xAE6E},{0x7542, 0xAE6F},{0x7543, 0xAE70},{0x7544, 0xAE71},
- {0x7545, 0xB3A9},{0x7546, 0xAE72},{0x7547, 0xAE73},{0x7548, 0xEEB2},{0x7549, 0xAE74},{0x754A, 0xAE75},{0x754B, 0xEEB1},{0x754C, 0xBDE7},
- {0x754D, 0xAE76},{0x754E, 0xEEB0},{0x754F, 0xCEB7},{0x7550, 0xAE77},{0x7551, 0xAE78},{0x7552, 0xAE79},{0x7553, 0xAE7A},{0x7554, 0xC5CF},
- {0x7555, 0xAE7B},{0x7556, 0xAE7C},{0x7557, 0xAE7D},{0x7558, 0xAE7E},{0x7559, 0xC1F4},{0x755A, 0xDBCE},{0x755B, 0xEEB3},{0x755C, 0xD0F3},
- {0x755D, 0xAE80},{0x755E, 0xAE81},{0x755F, 0xAE82},{0x7560, 0xAE83},{0x7561, 0xAE84},{0x7562, 0xAE85},{0x7563, 0xAE86},{0x7564, 0xAE87},
- {0x7565, 0xC2D4},{0x7566, 0xC6E8},{0x7567, 0xAE88},{0x7568, 0xAE89},{0x7569, 0xAE8A},{0x756A, 0xB7AC},{0x756B, 0xAE8B},{0x756C, 0xAE8C},
- {0x756D, 0xAE8D},{0x756E, 0xAE8E},{0x756F, 0xAE8F},{0x7570, 0xAE90},{0x7571, 0xAE91},{0x7572, 0xEEB4},{0x7573, 0xAE92},{0x7574, 0xB3EB},
- {0x7575, 0xAE93},{0x7576, 0xAE94},{0x7577, 0xAE95},{0x7578, 0xBBFB},{0x7579, 0xEEB5},{0x757A, 0xAE96},{0x757B, 0xAE97},{0x757C, 0xAE98},
- {0x757D, 0xAE99},{0x757E, 0xAE9A},{0x757F, 0xE7DC},{0x7580, 0xAE9B},{0x7581, 0xAE9C},{0x7582, 0xAE9D},{0x7583, 0xEEB6},{0x7584, 0xAE9E},
- {0x7585, 0xAE9F},{0x7586, 0xBDAE},{0x7587, 0xAEA0},{0x7588, 0xAF40},{0x7589, 0xAF41},{0x758A, 0xAF42},{0x758B, 0xF1E2},{0x758C, 0xAF43},
- {0x758D, 0xAF44},{0x758E, 0xAF45},{0x758F, 0xCAE8},{0x7590, 0xAF46},{0x7591, 0xD2C9},{0x7592, 0xF0DA},{0x7593, 0xAF47},{0x7594, 0xF0DB},
- {0x7595, 0xAF48},{0x7596, 0xF0DC},{0x7597, 0xC1C6},{0x7598, 0xAF49},{0x7599, 0xB8ED},{0x759A, 0xBECE},{0x759B, 0xAF4A},{0x759C, 0xAF4B},
- {0x759D, 0xF0DE},{0x759E, 0xAF4C},{0x759F, 0xC5B1},{0x75A0, 0xF0DD},{0x75A1, 0xD1F1},{0x75A2, 0xAF4D},{0x75A3, 0xF0E0},{0x75A4, 0xB0CC},
- {0x75A5, 0xBDEA},{0x75A6, 0xAF4E},{0x75A7, 0xAF4F},{0x75A8, 0xAF50},{0x75A9, 0xAF51},{0x75AA, 0xAF52},{0x75AB, 0xD2DF},{0x75AC, 0xF0DF},
- {0x75AD, 0xAF53},{0x75AE, 0xB4AF},{0x75AF, 0xB7E8},{0x75B0, 0xF0E6},{0x75B1, 0xF0E5},{0x75B2, 0xC6A3},{0x75B3, 0xF0E1},{0x75B4, 0xF0E2},
- {0x75B5, 0xB4C3},{0x75B6, 0xAF54},{0x75B7, 0xAF55},{0x75B8, 0xF0E3},{0x75B9, 0xD5EE},{0x75BA, 0xAF56},{0x75BB, 0xAF57},{0x75BC, 0xCCDB},
- {0x75BD, 0xBED2},{0x75BE, 0xBCB2},{0x75BF, 0xAF58},{0x75C0, 0xAF59},{0x75C1, 0xAF5A},{0x75C2, 0xF0E8},{0x75C3, 0xF0E7},{0x75C4, 0xF0E4},
- {0x75C5, 0xB2A1},{0x75C6, 0xAF5B},{0x75C7, 0xD6A2},{0x75C8, 0xD3B8},{0x75C9, 0xBEB7},{0x75CA, 0xC8AC},{0x75CB, 0xAF5C},{0x75CC, 0xAF5D},
- {0x75CD, 0xF0EA},{0x75CE, 0xAF5E},{0x75CF, 0xAF5F},{0x75D0, 0xAF60},{0x75D1, 0xAF61},{0x75D2, 0xD1F7},{0x75D3, 0xAF62},{0x75D4, 0xD6CC},
- {0x75D5, 0xBADB},{0x75D6, 0xF0E9},{0x75D7, 0xAF63},{0x75D8, 0xB6BB},{0x75D9, 0xAF64},{0x75DA, 0xAF65},{0x75DB, 0xCDB4},{0x75DC, 0xAF66},
- {0x75DD, 0xAF67},{0x75DE, 0xC6A6},{0x75DF, 0xAF68},{0x75E0, 0xAF69},{0x75E1, 0xAF6A},{0x75E2, 0xC1A1},{0x75E3, 0xF0EB},{0x75E4, 0xF0EE},
- {0x75E5, 0xAF6B},{0x75E6, 0xF0ED},{0x75E7, 0xF0F0},{0x75E8, 0xF0EC},{0x75E9, 0xAF6C},{0x75EA, 0xBBBE},{0x75EB, 0xF0EF},{0x75EC, 0xAF6D},
- {0x75ED, 0xAF6E},{0x75EE, 0xAF6F},{0x75EF, 0xAF70},{0x75F0, 0xCCB5},{0x75F1, 0xF0F2},{0x75F2, 0xAF71},{0x75F3, 0xAF72},{0x75F4, 0xB3D5},
- {0x75F5, 0xAF73},{0x75F6, 0xAF74},{0x75F7, 0xAF75},{0x75F8, 0xAF76},{0x75F9, 0xB1D4},{0x75FA, 0xAF77},{0x75FB, 0xAF78},{0x75FC, 0xF0F3},
- {0x75FD, 0xAF79},{0x75FE, 0xAF7A},{0x75FF, 0xF0F4},{0x7600, 0xF0F6},{0x7601, 0xB4E1},{0x7602, 0xAF7B},{0x7603, 0xF0F1},{0x7604, 0xAF7C},
- {0x7605, 0xF0F7},{0x7606, 0xAF7D},{0x7607, 0xAF7E},{0x7608, 0xAF80},{0x7609, 0xAF81},{0x760A, 0xF0FA},{0x760B, 0xAF82},{0x760C, 0xF0F8},
- {0x760D, 0xAF83},{0x760E, 0xAF84},{0x760F, 0xAF85},{0x7610, 0xF0F5},{0x7611, 0xAF86},{0x7612, 0xAF87},{0x7613, 0xAF88},{0x7614, 0xAF89},
- {0x7615, 0xF0FD},{0x7616, 0xAF8A},{0x7617, 0xF0F9},{0x7618, 0xF0FC},{0x7619, 0xF0FE},{0x761A, 0xAF8B},{0x761B, 0xF1A1},{0x761C, 0xAF8C},
- {0x761D, 0xAF8D},{0x761E, 0xAF8E},{0x761F, 0xCEC1},{0x7620, 0xF1A4},{0x7621, 0xAF8F},{0x7622, 0xF1A3},{0x7623, 0xAF90},{0x7624, 0xC1F6},
- {0x7625, 0xF0FB},{0x7626, 0xCADD},{0x7627, 0xAF91},{0x7628, 0xAF92},{0x7629, 0xB4F1},{0x762A, 0xB1F1},{0x762B, 0xCCB1},{0x762C, 0xAF93},
- {0x762D, 0xF1A6},{0x762E, 0xAF94},{0x762F, 0xAF95},{0x7630, 0xF1A7},{0x7631, 0xAF96},{0x7632, 0xAF97},{0x7633, 0xF1AC},{0x7634, 0xD5CE},
- {0x7635, 0xF1A9},{0x7636, 0xAF98},{0x7637, 0xAF99},{0x7638, 0xC8B3},{0x7639, 0xAF9A},{0x763A, 0xAF9B},{0x763B, 0xAF9C},{0x763C, 0xF1A2},
- {0x763D, 0xAF9D},{0x763E, 0xF1AB},{0x763F, 0xF1A8},{0x7640, 0xF1A5},{0x7641, 0xAF9E},{0x7642, 0xAF9F},{0x7643, 0xF1AA},{0x7644, 0xAFA0},
- {0x7645, 0xB040},{0x7646, 0xB041},{0x7647, 0xB042},{0x7648, 0xB043},{0x7649, 0xB044},{0x764A, 0xB045},{0x764B, 0xB046},{0x764C, 0xB0A9},
- {0x764D, 0xF1AD},{0x764E, 0xB047},{0x764F, 0xB048},{0x7650, 0xB049},{0x7651, 0xB04A},{0x7652, 0xB04B},{0x7653, 0xB04C},{0x7654, 0xF1AF},
- {0x7655, 0xB04D},{0x7656, 0xF1B1},{0x7657, 0xB04E},{0x7658, 0xB04F},{0x7659, 0xB050},{0x765A, 0xB051},{0x765B, 0xB052},{0x765C, 0xF1B0},
- {0x765D, 0xB053},{0x765E, 0xF1AE},{0x765F, 0xB054},{0x7660, 0xB055},{0x7661, 0xB056},{0x7662, 0xB057},{0x7663, 0xD1A2},{0x7664, 0xB058},
- {0x7665, 0xB059},{0x7666, 0xB05A},{0x7667, 0xB05B},{0x7668, 0xB05C},{0x7669, 0xB05D},{0x766A, 0xB05E},{0x766B, 0xF1B2},{0x766C, 0xB05F},
- {0x766D, 0xB060},{0x766E, 0xB061},{0x766F, 0xF1B3},{0x7670, 0xB062},{0x7671, 0xB063},{0x7672, 0xB064},{0x7673, 0xB065},{0x7674, 0xB066},
- {0x7675, 0xB067},{0x7676, 0xB068},{0x7677, 0xB069},{0x7678, 0xB9EF},{0x7679, 0xB06A},{0x767A, 0xB06B},{0x767B, 0xB5C7},{0x767C, 0xB06C},
- {0x767D, 0xB0D7},{0x767E, 0xB0D9},{0x767F, 0xB06D},{0x7680, 0xB06E},{0x7681, 0xB06F},{0x7682, 0xD4ED},{0x7683, 0xB070},{0x7684, 0xB5C4},
- {0x7685, 0xB071},{0x7686, 0xBDD4},{0x7687, 0xBBCA},{0x7688, 0xF0A7},{0x7689, 0xB072},{0x768A, 0xB073},{0x768B, 0xB8DE},{0x768C, 0xB074},
- {0x768D, 0xB075},{0x768E, 0xF0A8},{0x768F, 0xB076},{0x7690, 0xB077},{0x7691, 0xB0A8},{0x7692, 0xB078},{0x7693, 0xF0A9},{0x7694, 0xB079},
- {0x7695, 0xB07A},{0x7696, 0xCDEE},{0x7697, 0xB07B},{0x7698, 0xB07C},{0x7699, 0xF0AA},{0x769A, 0xB07D},{0x769B, 0xB07E},{0x769C, 0xB080},
- {0x769D, 0xB081},{0x769E, 0xB082},{0x769F, 0xB083},{0x76A0, 0xB084},{0x76A1, 0xB085},{0x76A2, 0xB086},{0x76A3, 0xB087},{0x76A4, 0xF0AB},
- {0x76A5, 0xB088},{0x76A6, 0xB089},{0x76A7, 0xB08A},{0x76A8, 0xB08B},{0x76A9, 0xB08C},{0x76AA, 0xB08D},{0x76AB, 0xB08E},{0x76AC, 0xB08F},
- {0x76AD, 0xB090},{0x76AE, 0xC6A4},{0x76AF, 0xB091},{0x76B0, 0xB092},{0x76B1, 0xD6E5},{0x76B2, 0xF1E4},{0x76B3, 0xB093},{0x76B4, 0xF1E5},
- {0x76B5, 0xB094},{0x76B6, 0xB095},{0x76B7, 0xB096},{0x76B8, 0xB097},{0x76B9, 0xB098},{0x76BA, 0xB099},{0x76BB, 0xB09A},{0x76BC, 0xB09B},
- {0x76BD, 0xB09C},{0x76BE, 0xB09D},{0x76BF, 0xC3F3},{0x76C0, 0xB09E},{0x76C1, 0xB09F},{0x76C2, 0xD3DB},{0x76C3, 0xB0A0},{0x76C4, 0xB140},
- {0x76C5, 0xD6D1},{0x76C6, 0xC5E8},{0x76C7, 0xB141},{0x76C8, 0xD3AF},{0x76C9, 0xB142},{0x76CA, 0xD2E6},{0x76CB, 0xB143},{0x76CC, 0xB144},
- {0x76CD, 0xEEC1},{0x76CE, 0xB0BB},{0x76CF, 0xD5B5},{0x76D0, 0xD1CE},{0x76D1, 0xBCE0},{0x76D2, 0xBAD0},{0x76D3, 0xB145},{0x76D4, 0xBFF8},
- {0x76D5, 0xB146},{0x76D6, 0xB8C7},{0x76D7, 0xB5C1},{0x76D8, 0xC5CC},{0x76D9, 0xB147},{0x76DA, 0xB148},{0x76DB, 0xCAA2},{0x76DC, 0xB149},
- {0x76DD, 0xB14A},{0x76DE, 0xB14B},{0x76DF, 0xC3CB},{0x76E0, 0xB14C},{0x76E1, 0xB14D},{0x76E2, 0xB14E},{0x76E3, 0xB14F},{0x76E4, 0xB150},
- {0x76E5, 0xEEC2},{0x76E6, 0xB151},{0x76E7, 0xB152},{0x76E8, 0xB153},{0x76E9, 0xB154},{0x76EA, 0xB155},{0x76EB, 0xB156},{0x76EC, 0xB157},
- {0x76ED, 0xB158},{0x76EE, 0xC4BF},{0x76EF, 0xB6A2},{0x76F0, 0xB159},{0x76F1, 0xEDEC},{0x76F2, 0xC3A4},{0x76F3, 0xB15A},{0x76F4, 0xD6B1},
- {0x76F5, 0xB15B},{0x76F6, 0xB15C},{0x76F7, 0xB15D},{0x76F8, 0xCFE0},{0x76F9, 0xEDEF},{0x76FA, 0xB15E},{0x76FB, 0xB15F},{0x76FC, 0xC5CE},
- {0x76FD, 0xB160},{0x76FE, 0xB6DC},{0x76FF, 0xB161},{0x7700, 0xB162},{0x7701, 0xCAA1},{0x7702, 0xB163},{0x7703, 0xB164},{0x7704, 0xEDED},
- {0x7705, 0xB165},{0x7706, 0xB166},{0x7707, 0xEDF0},{0x7708, 0xEDF1},{0x7709, 0xC3BC},{0x770A, 0xB167},{0x770B, 0xBFB4},{0x770C, 0xB168},
- {0x770D, 0xEDEE},{0x770E, 0xB169},{0x770F, 0xB16A},{0x7710, 0xB16B},{0x7711, 0xB16C},{0x7712, 0xB16D},{0x7713, 0xB16E},{0x7714, 0xB16F},
- {0x7715, 0xB170},{0x7716, 0xB171},{0x7717, 0xB172},{0x7718, 0xB173},{0x7719, 0xEDF4},{0x771A, 0xEDF2},{0x771B, 0xB174},{0x771C, 0xB175},
- {0x771D, 0xB176},{0x771E, 0xB177},{0x771F, 0xD5E6},{0x7720, 0xC3DF},{0x7721, 0xB178},{0x7722, 0xEDF3},{0x7723, 0xB179},{0x7724, 0xB17A},
- {0x7725, 0xB17B},{0x7726, 0xEDF6},{0x7727, 0xB17C},{0x7728, 0xD5A3},{0x7729, 0xD1A3},{0x772A, 0xB17D},{0x772B, 0xB17E},{0x772C, 0xB180},
- {0x772D, 0xEDF5},{0x772E, 0xB181},{0x772F, 0xC3D0},{0x7730, 0xB182},{0x7731, 0xB183},{0x7732, 0xB184},{0x7733, 0xB185},{0x7734, 0xB186},
- {0x7735, 0xEDF7},{0x7736, 0xBFF4},{0x7737, 0xBEEC},{0x7738, 0xEDF8},{0x7739, 0xB187},{0x773A, 0xCCF7},{0x773B, 0xB188},{0x773C, 0xD1DB},
- {0x773D, 0xB189},{0x773E, 0xB18A},{0x773F, 0xB18B},{0x7740, 0xD7C5},{0x7741, 0xD5F6},{0x7742, 0xB18C},{0x7743, 0xEDFC},{0x7744, 0xB18D},
- {0x7745, 0xB18E},{0x7746, 0xB18F},{0x7747, 0xEDFB},{0x7748, 0xB190},{0x7749, 0xB191},{0x774A, 0xB192},{0x774B, 0xB193},{0x774C, 0xB194},
- {0x774D, 0xB195},{0x774E, 0xB196},{0x774F, 0xB197},{0x7750, 0xEDF9},{0x7751, 0xEDFA},{0x7752, 0xB198},{0x7753, 0xB199},{0x7754, 0xB19A},
- {0x7755, 0xB19B},{0x7756, 0xB19C},{0x7757, 0xB19D},{0x7758, 0xB19E},{0x7759, 0xB19F},{0x775A, 0xEDFD},{0x775B, 0xBEA6},{0x775C, 0xB1A0},
- {0x775D, 0xB240},{0x775E, 0xB241},{0x775F, 0xB242},{0x7760, 0xB243},{0x7761, 0xCBAF},{0x7762, 0xEEA1},{0x7763, 0xB6BD},{0x7764, 0xB244},
- {0x7765, 0xEEA2},{0x7766, 0xC4C0},{0x7767, 0xB245},{0x7768, 0xEDFE},{0x7769, 0xB246},{0x776A, 0xB247},{0x776B, 0xBDDE},{0x776C, 0xB2C7},
- {0x776D, 0xB248},{0x776E, 0xB249},{0x776F, 0xB24A},{0x7770, 0xB24B},{0x7771, 0xB24C},{0x7772, 0xB24D},{0x7773, 0xB24E},{0x7774, 0xB24F},
- {0x7775, 0xB250},{0x7776, 0xB251},{0x7777, 0xB252},{0x7778, 0xB253},{0x7779, 0xB6C3},{0x777A, 0xB254},{0x777B, 0xB255},{0x777C, 0xB256},
- {0x777D, 0xEEA5},{0x777E, 0xD8BA},{0x777F, 0xEEA3},{0x7780, 0xEEA6},{0x7781, 0xB257},{0x7782, 0xB258},{0x7783, 0xB259},{0x7784, 0xC3E9},
- {0x7785, 0xB3F2},{0x7786, 0xB25A},{0x7787, 0xB25B},{0x7788, 0xB25C},{0x7789, 0xB25D},{0x778A, 0xB25E},{0x778B, 0xB25F},{0x778C, 0xEEA7},
- {0x778D, 0xEEA4},{0x778E, 0xCFB9},{0x778F, 0xB260},{0x7790, 0xB261},{0x7791, 0xEEA8},{0x7792, 0xC2F7},{0x7793, 0xB262},{0x7794, 0xB263},
- {0x7795, 0xB264},{0x7796, 0xB265},{0x7797, 0xB266},{0x7798, 0xB267},{0x7799, 0xB268},{0x779A, 0xB269},{0x779B, 0xB26A},{0x779C, 0xB26B},
- {0x779D, 0xB26C},{0x779E, 0xB26D},{0x779F, 0xEEA9},{0x77A0, 0xEEAA},{0x77A1, 0xB26E},{0x77A2, 0xDEAB},{0x77A3, 0xB26F},{0x77A4, 0xB270},
- {0x77A5, 0xC6B3},{0x77A6, 0xB271},{0x77A7, 0xC7C6},{0x77A8, 0xB272},{0x77A9, 0xD6F5},{0x77AA, 0xB5C9},{0x77AB, 0xB273},{0x77AC, 0xCBB2},
- {0x77AD, 0xB274},{0x77AE, 0xB275},{0x77AF, 0xB276},{0x77B0, 0xEEAB},{0x77B1, 0xB277},{0x77B2, 0xB278},{0x77B3, 0xCDAB},{0x77B4, 0xB279},
- {0x77B5, 0xEEAC},{0x77B6, 0xB27A},{0x77B7, 0xB27B},{0x77B8, 0xB27C},{0x77B9, 0xB27D},{0x77BA, 0xB27E},{0x77BB, 0xD5B0},{0x77BC, 0xB280},
- {0x77BD, 0xEEAD},{0x77BE, 0xB281},{0x77BF, 0xF6C4},{0x77C0, 0xB282},{0x77C1, 0xB283},{0x77C2, 0xB284},{0x77C3, 0xB285},{0x77C4, 0xB286},
- {0x77C5, 0xB287},{0x77C6, 0xB288},{0x77C7, 0xB289},{0x77C8, 0xB28A},{0x77C9, 0xB28B},{0x77CA, 0xB28C},{0x77CB, 0xB28D},{0x77CC, 0xB28E},
- {0x77CD, 0xDBC7},{0x77CE, 0xB28F},{0x77CF, 0xB290},{0x77D0, 0xB291},{0x77D1, 0xB292},{0x77D2, 0xB293},{0x77D3, 0xB294},{0x77D4, 0xB295},
- {0x77D5, 0xB296},{0x77D6, 0xB297},{0x77D7, 0xB4A3},{0x77D8, 0xB298},{0x77D9, 0xB299},{0x77DA, 0xB29A},{0x77DB, 0xC3AC},{0x77DC, 0xF1E6},
- {0x77DD, 0xB29B},{0x77DE, 0xB29C},{0x77DF, 0xB29D},{0x77E0, 0xB29E},{0x77E1, 0xB29F},{0x77E2, 0xCAB8},{0x77E3, 0xD2D3},{0x77E4, 0xB2A0},
- {0x77E5, 0xD6AA},{0x77E6, 0xB340},{0x77E7, 0xEFF2},{0x77E8, 0xB341},{0x77E9, 0xBED8},{0x77EA, 0xB342},{0x77EB, 0xBDC3},{0x77EC, 0xEFF3},
- {0x77ED, 0xB6CC},{0x77EE, 0xB0AB},{0x77EF, 0xB343},{0x77F0, 0xB344},{0x77F1, 0xB345},{0x77F2, 0xB346},{0x77F3, 0xCAAF},{0x77F4, 0xB347},
- {0x77F5, 0xB348},{0x77F6, 0xEDB6},{0x77F7, 0xB349},{0x77F8, 0xEDB7},{0x77F9, 0xB34A},{0x77FA, 0xB34B},{0x77FB, 0xB34C},{0x77FC, 0xB34D},
- {0x77FD, 0xCEF9},{0x77FE, 0xB7AF},{0x77FF, 0xBFF3},{0x7800, 0xEDB8},{0x7801, 0xC2EB},{0x7802, 0xC9B0},{0x7803, 0xB34E},{0x7804, 0xB34F},
- {0x7805, 0xB350},{0x7806, 0xB351},{0x7807, 0xB352},{0x7808, 0xB353},{0x7809, 0xEDB9},{0x780A, 0xB354},{0x780B, 0xB355},{0x780C, 0xC6F6},
- {0x780D, 0xBFB3},{0x780E, 0xB356},{0x780F, 0xB357},{0x7810, 0xB358},{0x7811, 0xEDBC},{0x7812, 0xC5F8},{0x7813, 0xB359},{0x7814, 0xD1D0},
- {0x7815, 0xB35A},{0x7816, 0xD7A9},{0x7817, 0xEDBA},{0x7818, 0xEDBB},{0x7819, 0xB35B},{0x781A, 0xD1E2},{0x781B, 0xB35C},{0x781C, 0xEDBF},
- {0x781D, 0xEDC0},{0x781E, 0xB35D},{0x781F, 0xEDC4},{0x7820, 0xB35E},{0x7821, 0xB35F},{0x7822, 0xB360},{0x7823, 0xEDC8},{0x7824, 0xB361},
- {0x7825, 0xEDC6},{0x7826, 0xEDCE},{0x7827, 0xD5E8},{0x7828, 0xB362},{0x7829, 0xEDC9},{0x782A, 0xB363},{0x782B, 0xB364},{0x782C, 0xEDC7},
- {0x782D, 0xEDBE},{0x782E, 0xB365},{0x782F, 0xB366},{0x7830, 0xC5E9},{0x7831, 0xB367},{0x7832, 0xB368},{0x7833, 0xB369},{0x7834, 0xC6C6},
- {0x7835, 0xB36A},{0x7836, 0xB36B},{0x7837, 0xC9E9},{0x7838, 0xD4D2},{0x7839, 0xEDC1},{0x783A, 0xEDC2},{0x783B, 0xEDC3},{0x783C, 0xEDC5},
- {0x783D, 0xB36C},{0x783E, 0xC0F9},{0x783F, 0xB36D},{0x7840, 0xB4A1},{0x7841, 0xB36E},{0x7842, 0xB36F},{0x7843, 0xB370},{0x7844, 0xB371},
- {0x7845, 0xB9E8},{0x7846, 0xB372},{0x7847, 0xEDD0},{0x7848, 0xB373},{0x7849, 0xB374},{0x784A, 0xB375},{0x784B, 0xB376},{0x784C, 0xEDD1},
- {0x784D, 0xB377},{0x784E, 0xEDCA},{0x784F, 0xB378},{0x7850, 0xEDCF},{0x7851, 0xB379},{0x7852, 0xCEF8},{0x7853, 0xB37A},{0x7854, 0xB37B},
- {0x7855, 0xCBB6},{0x7856, 0xEDCC},{0x7857, 0xEDCD},{0x7858, 0xB37C},{0x7859, 0xB37D},{0x785A, 0xB37E},{0x785B, 0xB380},{0x785C, 0xB381},
- {0x785D, 0xCFF5},{0x785E, 0xB382},{0x785F, 0xB383},{0x7860, 0xB384},{0x7861, 0xB385},{0x7862, 0xB386},{0x7863, 0xB387},{0x7864, 0xB388},
- {0x7865, 0xB389},{0x7866, 0xB38A},{0x7867, 0xB38B},{0x7868, 0xB38C},{0x7869, 0xB38D},{0x786A, 0xEDD2},{0x786B, 0xC1F2},{0x786C, 0xD3B2},
- {0x786D, 0xEDCB},{0x786E, 0xC8B7},{0x786F, 0xB38E},{0x7870, 0xB38F},{0x7871, 0xB390},{0x7872, 0xB391},{0x7873, 0xB392},{0x7874, 0xB393},
- {0x7875, 0xB394},{0x7876, 0xB395},{0x7877, 0xBCEF},{0x7878, 0xB396},{0x7879, 0xB397},{0x787A, 0xB398},{0x787B, 0xB399},{0x787C, 0xC5F0},
- {0x787D, 0xB39A},{0x787E, 0xB39B},{0x787F, 0xB39C},{0x7880, 0xB39D},{0x7881, 0xB39E},{0x7882, 0xB39F},{0x7883, 0xB3A0},{0x7884, 0xB440},
- {0x7885, 0xB441},{0x7886, 0xB442},{0x7887, 0xEDD6},{0x7888, 0xB443},{0x7889, 0xB5EF},{0x788A, 0xB444},{0x788B, 0xB445},{0x788C, 0xC2B5},
- {0x788D, 0xB0AD},{0x788E, 0xCBE9},{0x788F, 0xB446},{0x7890, 0xB447},{0x7891, 0xB1AE},{0x7892, 0xB448},{0x7893, 0xEDD4},{0x7894, 0xB449},
- {0x7895, 0xB44A},{0x7896, 0xB44B},{0x7897, 0xCDEB},{0x7898, 0xB5E2},{0x7899, 0xB44C},{0x789A, 0xEDD5},{0x789B, 0xEDD3},{0x789C, 0xEDD7},
- {0x789D, 0xB44D},{0x789E, 0xB44E},{0x789F, 0xB5FA},{0x78A0, 0xB44F},{0x78A1, 0xEDD8},{0x78A2, 0xB450},{0x78A3, 0xEDD9},{0x78A4, 0xB451},
- {0x78A5, 0xEDDC},{0x78A6, 0xB452},{0x78A7, 0xB1CC},{0x78A8, 0xB453},{0x78A9, 0xB454},{0x78AA, 0xB455},{0x78AB, 0xB456},{0x78AC, 0xB457},
- {0x78AD, 0xB458},{0x78AE, 0xB459},{0x78AF, 0xB45A},{0x78B0, 0xC5F6},{0x78B1, 0xBCEE},{0x78B2, 0xEDDA},{0x78B3, 0xCCBC},{0x78B4, 0xB2EA},
- {0x78B5, 0xB45B},{0x78B6, 0xB45C},{0x78B7, 0xB45D},{0x78B8, 0xB45E},{0x78B9, 0xEDDB},{0x78BA, 0xB45F},{0x78BB, 0xB460},{0x78BC, 0xB461},
- {0x78BD, 0xB462},{0x78BE, 0xC4EB},{0x78BF, 0xB463},{0x78C0, 0xB464},{0x78C1, 0xB4C5},{0x78C2, 0xB465},{0x78C3, 0xB466},{0x78C4, 0xB467},
- {0x78C5, 0xB0F5},{0x78C6, 0xB468},{0x78C7, 0xB469},{0x78C8, 0xB46A},{0x78C9, 0xEDDF},{0x78CA, 0xC0DA},{0x78CB, 0xB4E8},{0x78CC, 0xB46B},
- {0x78CD, 0xB46C},{0x78CE, 0xB46D},{0x78CF, 0xB46E},{0x78D0, 0xC5CD},{0x78D1, 0xB46F},{0x78D2, 0xB470},{0x78D3, 0xB471},{0x78D4, 0xEDDD},
- {0x78D5, 0xBFC4},{0x78D6, 0xB472},{0x78D7, 0xB473},{0x78D8, 0xB474},{0x78D9, 0xEDDE},{0x78DA, 0xB475},{0x78DB, 0xB476},{0x78DC, 0xB477},
- {0x78DD, 0xB478},{0x78DE, 0xB479},{0x78DF, 0xB47A},{0x78E0, 0xB47B},{0x78E1, 0xB47C},{0x78E2, 0xB47D},{0x78E3, 0xB47E},{0x78E4, 0xB480},
- {0x78E5, 0xB481},{0x78E6, 0xB482},{0x78E7, 0xB483},{0x78E8, 0xC4A5},{0x78E9, 0xB484},{0x78EA, 0xB485},{0x78EB, 0xB486},{0x78EC, 0xEDE0},
- {0x78ED, 0xB487},{0x78EE, 0xB488},{0x78EF, 0xB489},{0x78F0, 0xB48A},{0x78F1, 0xB48B},{0x78F2, 0xEDE1},{0x78F3, 0xB48C},{0x78F4, 0xEDE3},
- {0x78F5, 0xB48D},{0x78F6, 0xB48E},{0x78F7, 0xC1D7},{0x78F8, 0xB48F},{0x78F9, 0xB490},{0x78FA, 0xBBC7},{0x78FB, 0xB491},{0x78FC, 0xB492},
- {0x78FD, 0xB493},{0x78FE, 0xB494},{0x78FF, 0xB495},{0x7900, 0xB496},{0x7901, 0xBDB8},{0x7902, 0xB497},{0x7903, 0xB498},{0x7904, 0xB499},
- {0x7905, 0xEDE2},{0x7906, 0xB49A},{0x7907, 0xB49B},{0x7908, 0xB49C},{0x7909, 0xB49D},{0x790A, 0xB49E},{0x790B, 0xB49F},{0x790C, 0xB4A0},
- {0x790D, 0xB540},{0x790E, 0xB541},{0x790F, 0xB542},{0x7910, 0xB543},{0x7911, 0xB544},{0x7912, 0xB545},{0x7913, 0xEDE4},{0x7914, 0xB546},
- {0x7915, 0xB547},{0x7916, 0xB548},{0x7917, 0xB549},{0x7918, 0xB54A},{0x7919, 0xB54B},{0x791A, 0xB54C},{0x791B, 0xB54D},{0x791C, 0xB54E},
- {0x791D, 0xB54F},{0x791E, 0xEDE6},{0x791F, 0xB550},{0x7920, 0xB551},{0x7921, 0xB552},{0x7922, 0xB553},{0x7923, 0xB554},{0x7924, 0xEDE5},
- {0x7925, 0xB555},{0x7926, 0xB556},{0x7927, 0xB557},{0x7928, 0xB558},{0x7929, 0xB559},{0x792A, 0xB55A},{0x792B, 0xB55B},{0x792C, 0xB55C},
- {0x792D, 0xB55D},{0x792E, 0xB55E},{0x792F, 0xB55F},{0x7930, 0xB560},{0x7931, 0xB561},{0x7932, 0xB562},{0x7933, 0xB563},{0x7934, 0xEDE7},
- {0x7935, 0xB564},{0x7936, 0xB565},{0x7937, 0xB566},{0x7938, 0xB567},{0x7939, 0xB568},{0x793A, 0xCABE},{0x793B, 0xECEA},{0x793C, 0xC0F1},
- {0x793D, 0xB569},{0x793E, 0xC9E7},{0x793F, 0xB56A},{0x7940, 0xECEB},{0x7941, 0xC6EE},{0x7942, 0xB56B},{0x7943, 0xB56C},{0x7944, 0xB56D},
- {0x7945, 0xB56E},{0x7946, 0xECEC},{0x7947, 0xB56F},{0x7948, 0xC6ED},{0x7949, 0xECED},{0x794A, 0xB570},{0x794B, 0xB571},{0x794C, 0xB572},
- {0x794D, 0xB573},{0x794E, 0xB574},{0x794F, 0xB575},{0x7950, 0xB576},{0x7951, 0xB577},{0x7952, 0xB578},{0x7953, 0xECF0},{0x7954, 0xB579},
- {0x7955, 0xB57A},{0x7956, 0xD7E6},{0x7957, 0xECF3},{0x7958, 0xB57B},{0x7959, 0xB57C},{0x795A, 0xECF1},{0x795B, 0xECEE},{0x795C, 0xECEF},
- {0x795D, 0xD7A3},{0x795E, 0xC9F1},{0x795F, 0xCBEE},{0x7960, 0xECF4},{0x7961, 0xB57D},{0x7962, 0xECF2},{0x7963, 0xB57E},{0x7964, 0xB580},
- {0x7965, 0xCFE9},{0x7966, 0xB581},{0x7967, 0xECF6},{0x7968, 0xC6B1},{0x7969, 0xB582},{0x796A, 0xB583},{0x796B, 0xB584},{0x796C, 0xB585},
- {0x796D, 0xBCC0},{0x796E, 0xB586},{0x796F, 0xECF5},{0x7970, 0xB587},{0x7971, 0xB588},{0x7972, 0xB589},{0x7973, 0xB58A},{0x7974, 0xB58B},
- {0x7975, 0xB58C},{0x7976, 0xB58D},{0x7977, 0xB5BB},{0x7978, 0xBBF6},{0x7979, 0xB58E},{0x797A, 0xECF7},{0x797B, 0xB58F},{0x797C, 0xB590},
- {0x797D, 0xB591},{0x797E, 0xB592},{0x797F, 0xB593},{0x7980, 0xD9F7},{0x7981, 0xBDFB},{0x7982, 0xB594},{0x7983, 0xB595},{0x7984, 0xC2BB},
- {0x7985, 0xECF8},{0x7986, 0xB596},{0x7987, 0xB597},{0x7988, 0xB598},{0x7989, 0xB599},{0x798A, 0xECF9},{0x798B, 0xB59A},{0x798C, 0xB59B},
- {0x798D, 0xB59C},{0x798E, 0xB59D},{0x798F, 0xB8A3},{0x7990, 0xB59E},{0x7991, 0xB59F},{0x7992, 0xB5A0},{0x7993, 0xB640},{0x7994, 0xB641},
- {0x7995, 0xB642},{0x7996, 0xB643},{0x7997, 0xB644},{0x7998, 0xB645},{0x7999, 0xB646},{0x799A, 0xECFA},{0x799B, 0xB647},{0x799C, 0xB648},
- {0x799D, 0xB649},{0x799E, 0xB64A},{0x799F, 0xB64B},{0x79A0, 0xB64C},{0x79A1, 0xB64D},{0x79A2, 0xB64E},{0x79A3, 0xB64F},{0x79A4, 0xB650},
- {0x79A5, 0xB651},{0x79A6, 0xB652},{0x79A7, 0xECFB},{0x79A8, 0xB653},{0x79A9, 0xB654},{0x79AA, 0xB655},{0x79AB, 0xB656},{0x79AC, 0xB657},
- {0x79AD, 0xB658},{0x79AE, 0xB659},{0x79AF, 0xB65A},{0x79B0, 0xB65B},{0x79B1, 0xB65C},{0x79B2, 0xB65D},{0x79B3, 0xECFC},{0x79B4, 0xB65E},
- {0x79B5, 0xB65F},{0x79B6, 0xB660},{0x79B7, 0xB661},{0x79B8, 0xB662},{0x79B9, 0xD3ED},{0x79BA, 0xD8AE},{0x79BB, 0xC0EB},{0x79BC, 0xB663},
- {0x79BD, 0xC7DD},{0x79BE, 0xBACC},{0x79BF, 0xB664},{0x79C0, 0xD0E3},{0x79C1, 0xCBBD},{0x79C2, 0xB665},{0x79C3, 0xCDBA},{0x79C4, 0xB666},
- {0x79C5, 0xB667},{0x79C6, 0xB8D1},{0x79C7, 0xB668},{0x79C8, 0xB669},{0x79C9, 0xB1FC},{0x79CA, 0xB66A},{0x79CB, 0xC7EF},{0x79CC, 0xB66B},
- {0x79CD, 0xD6D6},{0x79CE, 0xB66C},{0x79CF, 0xB66D},{0x79D0, 0xB66E},{0x79D1, 0xBFC6},{0x79D2, 0xC3EB},{0x79D3, 0xB66F},{0x79D4, 0xB670},
- {0x79D5, 0xEFF5},{0x79D6, 0xB671},{0x79D7, 0xB672},{0x79D8, 0xC3D8},{0x79D9, 0xB673},{0x79DA, 0xB674},{0x79DB, 0xB675},{0x79DC, 0xB676},
- {0x79DD, 0xB677},{0x79DE, 0xB678},{0x79DF, 0xD7E2},{0x79E0, 0xB679},{0x79E1, 0xB67A},{0x79E2, 0xB67B},{0x79E3, 0xEFF7},{0x79E4, 0xB3D3},
- {0x79E5, 0xB67C},{0x79E6, 0xC7D8},{0x79E7, 0xD1ED},{0x79E8, 0xB67D},{0x79E9, 0xD6C8},{0x79EA, 0xB67E},{0x79EB, 0xEFF8},{0x79EC, 0xB680},
- {0x79ED, 0xEFF6},{0x79EE, 0xB681},{0x79EF, 0xBBFD},{0x79F0, 0xB3C6},{0x79F1, 0xB682},{0x79F2, 0xB683},{0x79F3, 0xB684},{0x79F4, 0xB685},
- {0x79F5, 0xB686},{0x79F6, 0xB687},{0x79F7, 0xB688},{0x79F8, 0xBDD5},{0x79F9, 0xB689},{0x79FA, 0xB68A},{0x79FB, 0xD2C6},{0x79FC, 0xB68B},
- {0x79FD, 0xBBE0},{0x79FE, 0xB68C},{0x79FF, 0xB68D},{0x7A00, 0xCFA1},{0x7A01, 0xB68E},{0x7A02, 0xEFFC},{0x7A03, 0xEFFB},{0x7A04, 0xB68F},
- {0x7A05, 0xB690},{0x7A06, 0xEFF9},{0x7A07, 0xB691},{0x7A08, 0xB692},{0x7A09, 0xB693},{0x7A0A, 0xB694},{0x7A0B, 0xB3CC},{0x7A0C, 0xB695},
- {0x7A0D, 0xC9D4},{0x7A0E, 0xCBB0},{0x7A0F, 0xB696},{0x7A10, 0xB697},{0x7A11, 0xB698},{0x7A12, 0xB699},{0x7A13, 0xB69A},{0x7A14, 0xEFFE},
- {0x7A15, 0xB69B},{0x7A16, 0xB69C},{0x7A17, 0xB0DE},{0x7A18, 0xB69D},{0x7A19, 0xB69E},{0x7A1A, 0xD6C9},{0x7A1B, 0xB69F},{0x7A1C, 0xB6A0},
- {0x7A1D, 0xB740},{0x7A1E, 0xEFFD},{0x7A1F, 0xB741},{0x7A20, 0xB3ED},{0x7A21, 0xB742},{0x7A22, 0xB743},{0x7A23, 0xF6D5},{0x7A24, 0xB744},
- {0x7A25, 0xB745},{0x7A26, 0xB746},{0x7A27, 0xB747},{0x7A28, 0xB748},{0x7A29, 0xB749},{0x7A2A, 0xB74A},{0x7A2B, 0xB74B},{0x7A2C, 0xB74C},
- {0x7A2D, 0xB74D},{0x7A2E, 0xB74E},{0x7A2F, 0xB74F},{0x7A30, 0xB750},{0x7A31, 0xB751},{0x7A32, 0xB752},{0x7A33, 0xCEC8},{0x7A34, 0xB753},
- {0x7A35, 0xB754},{0x7A36, 0xB755},{0x7A37, 0xF0A2},{0x7A38, 0xB756},{0x7A39, 0xF0A1},{0x7A3A, 0xB757},{0x7A3B, 0xB5BE},{0x7A3C, 0xBCDA},
- {0x7A3D, 0xBBFC},{0x7A3E, 0xB758},{0x7A3F, 0xB8E5},{0x7A40, 0xB759},{0x7A41, 0xB75A},{0x7A42, 0xB75B},{0x7A43, 0xB75C},{0x7A44, 0xB75D},
- {0x7A45, 0xB75E},{0x7A46, 0xC4C2},{0x7A47, 0xB75F},{0x7A48, 0xB760},{0x7A49, 0xB761},{0x7A4A, 0xB762},{0x7A4B, 0xB763},{0x7A4C, 0xB764},
- {0x7A4D, 0xB765},{0x7A4E, 0xB766},{0x7A4F, 0xB767},{0x7A50, 0xB768},{0x7A51, 0xF0A3},{0x7A52, 0xB769},{0x7A53, 0xB76A},{0x7A54, 0xB76B},
- {0x7A55, 0xB76C},{0x7A56, 0xB76D},{0x7A57, 0xCBEB},{0x7A58, 0xB76E},{0x7A59, 0xB76F},{0x7A5A, 0xB770},{0x7A5B, 0xB771},{0x7A5C, 0xB772},
- {0x7A5D, 0xB773},{0x7A5E, 0xB774},{0x7A5F, 0xB775},{0x7A60, 0xB776},{0x7A61, 0xB777},{0x7A62, 0xB778},{0x7A63, 0xB779},{0x7A64, 0xB77A},
- {0x7A65, 0xB77B},{0x7A66, 0xB77C},{0x7A67, 0xB77D},{0x7A68, 0xB77E},{0x7A69, 0xB780},{0x7A6A, 0xB781},{0x7A6B, 0xB782},{0x7A6C, 0xB783},
- {0x7A6D, 0xB784},{0x7A6E, 0xB785},{0x7A6F, 0xB786},{0x7A70, 0xF0A6},{0x7A71, 0xB787},{0x7A72, 0xB788},{0x7A73, 0xB789},{0x7A74, 0xD1A8},
- {0x7A75, 0xB78A},{0x7A76, 0xBEBF},{0x7A77, 0xC7EE},{0x7A78, 0xF1B6},{0x7A79, 0xF1B7},{0x7A7A, 0xBFD5},{0x7A7B, 0xB78B},{0x7A7C, 0xB78C},
- {0x7A7D, 0xB78D},{0x7A7E, 0xB78E},{0x7A7F, 0xB4A9},{0x7A80, 0xF1B8},{0x7A81, 0xCDBB},{0x7A82, 0xB78F},{0x7A83, 0xC7D4},{0x7A84, 0xD5AD},
- {0x7A85, 0xB790},{0x7A86, 0xF1B9},{0x7A87, 0xB791},{0x7A88, 0xF1BA},{0x7A89, 0xB792},{0x7A8A, 0xB793},{0x7A8B, 0xB794},{0x7A8C, 0xB795},
- {0x7A8D, 0xC7CF},{0x7A8E, 0xB796},{0x7A8F, 0xB797},{0x7A90, 0xB798},{0x7A91, 0xD2A4},{0x7A92, 0xD6CF},{0x7A93, 0xB799},{0x7A94, 0xB79A},
- {0x7A95, 0xF1BB},{0x7A96, 0xBDD1},{0x7A97, 0xB4B0},{0x7A98, 0xBEBD},{0x7A99, 0xB79B},{0x7A9A, 0xB79C},{0x7A9B, 0xB79D},{0x7A9C, 0xB4DC},
- {0x7A9D, 0xCED1},{0x7A9E, 0xB79E},{0x7A9F, 0xBFDF},{0x7AA0, 0xF1BD},{0x7AA1, 0xB79F},{0x7AA2, 0xB7A0},{0x7AA3, 0xB840},{0x7AA4, 0xB841},
- {0x7AA5, 0xBFFA},{0x7AA6, 0xF1BC},{0x7AA7, 0xB842},{0x7AA8, 0xF1BF},{0x7AA9, 0xB843},{0x7AAA, 0xB844},{0x7AAB, 0xB845},{0x7AAC, 0xF1BE},
- {0x7AAD, 0xF1C0},{0x7AAE, 0xB846},{0x7AAF, 0xB847},{0x7AB0, 0xB848},{0x7AB1, 0xB849},{0x7AB2, 0xB84A},{0x7AB3, 0xF1C1},{0x7AB4, 0xB84B},
- {0x7AB5, 0xB84C},{0x7AB6, 0xB84D},{0x7AB7, 0xB84E},{0x7AB8, 0xB84F},{0x7AB9, 0xB850},{0x7ABA, 0xB851},{0x7ABB, 0xB852},{0x7ABC, 0xB853},
- {0x7ABD, 0xB854},{0x7ABE, 0xB855},{0x7ABF, 0xC1FE},{0x7AC0, 0xB856},{0x7AC1, 0xB857},{0x7AC2, 0xB858},{0x7AC3, 0xB859},{0x7AC4, 0xB85A},
- {0x7AC5, 0xB85B},{0x7AC6, 0xB85C},{0x7AC7, 0xB85D},{0x7AC8, 0xB85E},{0x7AC9, 0xB85F},{0x7ACA, 0xB860},{0x7ACB, 0xC1A2},{0x7ACC, 0xB861},
- {0x7ACD, 0xB862},{0x7ACE, 0xB863},{0x7ACF, 0xB864},{0x7AD0, 0xB865},{0x7AD1, 0xB866},{0x7AD2, 0xB867},{0x7AD3, 0xB868},{0x7AD4, 0xB869},
- {0x7AD5, 0xB86A},{0x7AD6, 0xCAFA},{0x7AD7, 0xB86B},{0x7AD8, 0xB86C},{0x7AD9, 0xD5BE},{0x7ADA, 0xB86D},{0x7ADB, 0xB86E},{0x7ADC, 0xB86F},
- {0x7ADD, 0xB870},{0x7ADE, 0xBEBA},{0x7ADF, 0xBEB9},{0x7AE0, 0xD5C2},{0x7AE1, 0xB871},{0x7AE2, 0xB872},{0x7AE3, 0xBFA2},{0x7AE4, 0xB873},
- {0x7AE5, 0xCDAF},{0x7AE6, 0xF1B5},{0x7AE7, 0xB874},{0x7AE8, 0xB875},{0x7AE9, 0xB876},{0x7AEA, 0xB877},{0x7AEB, 0xB878},{0x7AEC, 0xB879},
- {0x7AED, 0xBDDF},{0x7AEE, 0xB87A},{0x7AEF, 0xB6CB},{0x7AF0, 0xB87B},{0x7AF1, 0xB87C},{0x7AF2, 0xB87D},{0x7AF3, 0xB87E},{0x7AF4, 0xB880},
- {0x7AF5, 0xB881},{0x7AF6, 0xB882},{0x7AF7, 0xB883},{0x7AF8, 0xB884},{0x7AF9, 0xD6F1},{0x7AFA, 0xF3C3},{0x7AFB, 0xB885},{0x7AFC, 0xB886},
- {0x7AFD, 0xF3C4},{0x7AFE, 0xB887},{0x7AFF, 0xB8CD},{0x7B00, 0xB888},{0x7B01, 0xB889},{0x7B02, 0xB88A},{0x7B03, 0xF3C6},{0x7B04, 0xF3C7},
- {0x7B05, 0xB88B},{0x7B06, 0xB0CA},{0x7B07, 0xB88C},{0x7B08, 0xF3C5},{0x7B09, 0xB88D},{0x7B0A, 0xF3C9},{0x7B0B, 0xCBF1},{0x7B0C, 0xB88E},
- {0x7B0D, 0xB88F},{0x7B0E, 0xB890},{0x7B0F, 0xF3CB},{0x7B10, 0xB891},{0x7B11, 0xD0A6},{0x7B12, 0xB892},{0x7B13, 0xB893},{0x7B14, 0xB1CA},
- {0x7B15, 0xF3C8},{0x7B16, 0xB894},{0x7B17, 0xB895},{0x7B18, 0xB896},{0x7B19, 0xF3CF},{0x7B1A, 0xB897},{0x7B1B, 0xB5D1},{0x7B1C, 0xB898},
- {0x7B1D, 0xB899},{0x7B1E, 0xF3D7},{0x7B1F, 0xB89A},{0x7B20, 0xF3D2},{0x7B21, 0xB89B},{0x7B22, 0xB89C},{0x7B23, 0xB89D},{0x7B24, 0xF3D4},
- {0x7B25, 0xF3D3},{0x7B26, 0xB7FB},{0x7B27, 0xB89E},{0x7B28, 0xB1BF},{0x7B29, 0xB89F},{0x7B2A, 0xF3CE},{0x7B2B, 0xF3CA},{0x7B2C, 0xB5DA},
- {0x7B2D, 0xB8A0},{0x7B2E, 0xF3D0},{0x7B2F, 0xB940},{0x7B30, 0xB941},{0x7B31, 0xF3D1},{0x7B32, 0xB942},{0x7B33, 0xF3D5},{0x7B34, 0xB943},
- {0x7B35, 0xB944},{0x7B36, 0xB945},{0x7B37, 0xB946},{0x7B38, 0xF3CD},{0x7B39, 0xB947},{0x7B3A, 0xBCE3},{0x7B3B, 0xB948},{0x7B3C, 0xC1FD},
- {0x7B3D, 0xB949},{0x7B3E, 0xF3D6},{0x7B3F, 0xB94A},{0x7B40, 0xB94B},{0x7B41, 0xB94C},{0x7B42, 0xB94D},{0x7B43, 0xB94E},{0x7B44, 0xB94F},
- {0x7B45, 0xF3DA},{0x7B46, 0xB950},{0x7B47, 0xF3CC},{0x7B48, 0xB951},{0x7B49, 0xB5C8},{0x7B4A, 0xB952},{0x7B4B, 0xBDEE},{0x7B4C, 0xF3DC},
- {0x7B4D, 0xB953},{0x7B4E, 0xB954},{0x7B4F, 0xB7A4},{0x7B50, 0xBFF0},{0x7B51, 0xD6FE},{0x7B52, 0xCDB2},{0x7B53, 0xB955},{0x7B54, 0xB4F0},
- {0x7B55, 0xB956},{0x7B56, 0xB2DF},{0x7B57, 0xB957},{0x7B58, 0xF3D8},{0x7B59, 0xB958},{0x7B5A, 0xF3D9},{0x7B5B, 0xC9B8},{0x7B5C, 0xB959},
- {0x7B5D, 0xF3DD},{0x7B5E, 0xB95A},{0x7B5F, 0xB95B},{0x7B60, 0xF3DE},{0x7B61, 0xB95C},{0x7B62, 0xF3E1},{0x7B63, 0xB95D},{0x7B64, 0xB95E},
- {0x7B65, 0xB95F},{0x7B66, 0xB960},{0x7B67, 0xB961},{0x7B68, 0xB962},{0x7B69, 0xB963},{0x7B6A, 0xB964},{0x7B6B, 0xB965},{0x7B6C, 0xB966},
- {0x7B6D, 0xB967},{0x7B6E, 0xF3DF},{0x7B6F, 0xB968},{0x7B70, 0xB969},{0x7B71, 0xF3E3},{0x7B72, 0xF3E2},{0x7B73, 0xB96A},{0x7B74, 0xB96B},
- {0x7B75, 0xF3DB},{0x7B76, 0xB96C},{0x7B77, 0xBFEA},{0x7B78, 0xB96D},{0x7B79, 0xB3EF},{0x7B7A, 0xB96E},{0x7B7B, 0xF3E0},{0x7B7C, 0xB96F},
- {0x7B7D, 0xB970},{0x7B7E, 0xC7A9},{0x7B7F, 0xB971},{0x7B80, 0xBCF2},{0x7B81, 0xB972},{0x7B82, 0xB973},{0x7B83, 0xB974},{0x7B84, 0xB975},
- {0x7B85, 0xF3EB},{0x7B86, 0xB976},{0x7B87, 0xB977},{0x7B88, 0xB978},{0x7B89, 0xB979},{0x7B8A, 0xB97A},{0x7B8B, 0xB97B},{0x7B8C, 0xB97C},
- {0x7B8D, 0xB9BF},{0x7B8E, 0xB97D},{0x7B8F, 0xB97E},{0x7B90, 0xF3E4},{0x7B91, 0xB980},{0x7B92, 0xB981},{0x7B93, 0xB982},{0x7B94, 0xB2AD},
- {0x7B95, 0xBBFE},{0x7B96, 0xB983},{0x7B97, 0xCBE3},{0x7B98, 0xB984},{0x7B99, 0xB985},{0x7B9A, 0xB986},{0x7B9B, 0xB987},{0x7B9C, 0xF3ED},
- {0x7B9D, 0xF3E9},{0x7B9E, 0xB988},{0x7B9F, 0xB989},{0x7BA0, 0xB98A},{0x7BA1, 0xB9DC},{0x7BA2, 0xF3EE},{0x7BA3, 0xB98B},{0x7BA4, 0xB98C},
- {0x7BA5, 0xB98D},{0x7BA6, 0xF3E5},{0x7BA7, 0xF3E6},{0x7BA8, 0xF3EA},{0x7BA9, 0xC2E1},{0x7BAA, 0xF3EC},{0x7BAB, 0xF3EF},{0x7BAC, 0xF3E8},
- {0x7BAD, 0xBCFD},{0x7BAE, 0xB98E},{0x7BAF, 0xB98F},{0x7BB0, 0xB990},{0x7BB1, 0xCFE4},{0x7BB2, 0xB991},{0x7BB3, 0xB992},{0x7BB4, 0xF3F0},
- {0x7BB5, 0xB993},{0x7BB6, 0xB994},{0x7BB7, 0xB995},{0x7BB8, 0xF3E7},{0x7BB9, 0xB996},{0x7BBA, 0xB997},{0x7BBB, 0xB998},{0x7BBC, 0xB999},
- {0x7BBD, 0xB99A},{0x7BBE, 0xB99B},{0x7BBF, 0xB99C},{0x7BC0, 0xB99D},{0x7BC1, 0xF3F2},{0x7BC2, 0xB99E},{0x7BC3, 0xB99F},{0x7BC4, 0xB9A0},
- {0x7BC5, 0xBA40},{0x7BC6, 0xD7AD},{0x7BC7, 0xC6AA},{0x7BC8, 0xBA41},{0x7BC9, 0xBA42},{0x7BCA, 0xBA43},{0x7BCB, 0xBA44},{0x7BCC, 0xF3F3},
- {0x7BCD, 0xBA45},{0x7BCE, 0xBA46},{0x7BCF, 0xBA47},{0x7BD0, 0xBA48},{0x7BD1, 0xF3F1},{0x7BD2, 0xBA49},{0x7BD3, 0xC2A8},{0x7BD4, 0xBA4A},
- {0x7BD5, 0xBA4B},{0x7BD6, 0xBA4C},{0x7BD7, 0xBA4D},{0x7BD8, 0xBA4E},{0x7BD9, 0xB8DD},{0x7BDA, 0xF3F5},{0x7BDB, 0xBA4F},{0x7BDC, 0xBA50},
- {0x7BDD, 0xF3F4},{0x7BDE, 0xBA51},{0x7BDF, 0xBA52},{0x7BE0, 0xBA53},{0x7BE1, 0xB4DB},{0x7BE2, 0xBA54},{0x7BE3, 0xBA55},{0x7BE4, 0xBA56},
- {0x7BE5, 0xF3F6},{0x7BE6, 0xF3F7},{0x7BE7, 0xBA57},{0x7BE8, 0xBA58},{0x7BE9, 0xBA59},{0x7BEA, 0xF3F8},{0x7BEB, 0xBA5A},{0x7BEC, 0xBA5B},
- {0x7BED, 0xBA5C},{0x7BEE, 0xC0BA},{0x7BEF, 0xBA5D},{0x7BF0, 0xBA5E},{0x7BF1, 0xC0E9},{0x7BF2, 0xBA5F},{0x7BF3, 0xBA60},{0x7BF4, 0xBA61},
- {0x7BF5, 0xBA62},{0x7BF6, 0xBA63},{0x7BF7, 0xC5F1},{0x7BF8, 0xBA64},{0x7BF9, 0xBA65},{0x7BFA, 0xBA66},{0x7BFB, 0xBA67},{0x7BFC, 0xF3FB},
- {0x7BFD, 0xBA68},{0x7BFE, 0xF3FA},{0x7BFF, 0xBA69},{0x7C00, 0xBA6A},{0x7C01, 0xBA6B},{0x7C02, 0xBA6C},{0x7C03, 0xBA6D},{0x7C04, 0xBA6E},
- {0x7C05, 0xBA6F},{0x7C06, 0xBA70},{0x7C07, 0xB4D8},{0x7C08, 0xBA71},{0x7C09, 0xBA72},{0x7C0A, 0xBA73},{0x7C0B, 0xF3FE},{0x7C0C, 0xF3F9},
- {0x7C0D, 0xBA74},{0x7C0E, 0xBA75},{0x7C0F, 0xF3FC},{0x7C10, 0xBA76},{0x7C11, 0xBA77},{0x7C12, 0xBA78},{0x7C13, 0xBA79},{0x7C14, 0xBA7A},
- {0x7C15, 0xBA7B},{0x7C16, 0xF3FD},{0x7C17, 0xBA7C},{0x7C18, 0xBA7D},{0x7C19, 0xBA7E},{0x7C1A, 0xBA80},{0x7C1B, 0xBA81},{0x7C1C, 0xBA82},
- {0x7C1D, 0xBA83},{0x7C1E, 0xBA84},{0x7C1F, 0xF4A1},{0x7C20, 0xBA85},{0x7C21, 0xBA86},{0x7C22, 0xBA87},{0x7C23, 0xBA88},{0x7C24, 0xBA89},
- {0x7C25, 0xBA8A},{0x7C26, 0xF4A3},{0x7C27, 0xBBC9},{0x7C28, 0xBA8B},{0x7C29, 0xBA8C},{0x7C2A, 0xF4A2},{0x7C2B, 0xBA8D},{0x7C2C, 0xBA8E},
- {0x7C2D, 0xBA8F},{0x7C2E, 0xBA90},{0x7C2F, 0xBA91},{0x7C30, 0xBA92},{0x7C31, 0xBA93},{0x7C32, 0xBA94},{0x7C33, 0xBA95},{0x7C34, 0xBA96},
- {0x7C35, 0xBA97},{0x7C36, 0xBA98},{0x7C37, 0xBA99},{0x7C38, 0xF4A4},{0x7C39, 0xBA9A},{0x7C3A, 0xBA9B},{0x7C3B, 0xBA9C},{0x7C3C, 0xBA9D},
- {0x7C3D, 0xBA9E},{0x7C3E, 0xBA9F},{0x7C3F, 0xB2BE},{0x7C40, 0xF4A6},{0x7C41, 0xF4A5},{0x7C42, 0xBAA0},{0x7C43, 0xBB40},{0x7C44, 0xBB41},
- {0x7C45, 0xBB42},{0x7C46, 0xBB43},{0x7C47, 0xBB44},{0x7C48, 0xBB45},{0x7C49, 0xBB46},{0x7C4A, 0xBB47},{0x7C4B, 0xBB48},{0x7C4C, 0xBB49},
- {0x7C4D, 0xBCAE},{0x7C4E, 0xBB4A},{0x7C4F, 0xBB4B},{0x7C50, 0xBB4C},{0x7C51, 0xBB4D},{0x7C52, 0xBB4E},{0x7C53, 0xBB4F},{0x7C54, 0xBB50},
- {0x7C55, 0xBB51},{0x7C56, 0xBB52},{0x7C57, 0xBB53},{0x7C58, 0xBB54},{0x7C59, 0xBB55},{0x7C5A, 0xBB56},{0x7C5B, 0xBB57},{0x7C5C, 0xBB58},
- {0x7C5D, 0xBB59},{0x7C5E, 0xBB5A},{0x7C5F, 0xBB5B},{0x7C60, 0xBB5C},{0x7C61, 0xBB5D},{0x7C62, 0xBB5E},{0x7C63, 0xBB5F},{0x7C64, 0xBB60},
- {0x7C65, 0xBB61},{0x7C66, 0xBB62},{0x7C67, 0xBB63},{0x7C68, 0xBB64},{0x7C69, 0xBB65},{0x7C6A, 0xBB66},{0x7C6B, 0xBB67},{0x7C6C, 0xBB68},
- {0x7C6D, 0xBB69},{0x7C6E, 0xBB6A},{0x7C6F, 0xBB6B},{0x7C70, 0xBB6C},{0x7C71, 0xBB6D},{0x7C72, 0xBB6E},{0x7C73, 0xC3D7},{0x7C74, 0xD9E1},
- {0x7C75, 0xBB6F},{0x7C76, 0xBB70},{0x7C77, 0xBB71},{0x7C78, 0xBB72},{0x7C79, 0xBB73},{0x7C7A, 0xBB74},{0x7C7B, 0xC0E0},{0x7C7C, 0xF4CC},
- {0x7C7D, 0xD7D1},{0x7C7E, 0xBB75},{0x7C7F, 0xBB76},{0x7C80, 0xBB77},{0x7C81, 0xBB78},{0x7C82, 0xBB79},{0x7C83, 0xBB7A},{0x7C84, 0xBB7B},
- {0x7C85, 0xBB7C},{0x7C86, 0xBB7D},{0x7C87, 0xBB7E},{0x7C88, 0xBB80},{0x7C89, 0xB7DB},{0x7C8A, 0xBB81},{0x7C8B, 0xBB82},{0x7C8C, 0xBB83},
- {0x7C8D, 0xBB84},{0x7C8E, 0xBB85},{0x7C8F, 0xBB86},{0x7C90, 0xBB87},{0x7C91, 0xF4CE},{0x7C92, 0xC1A3},{0x7C93, 0xBB88},{0x7C94, 0xBB89},
- {0x7C95, 0xC6C9},{0x7C96, 0xBB8A},{0x7C97, 0xB4D6},{0x7C98, 0xD5B3},{0x7C99, 0xBB8B},{0x7C9A, 0xBB8C},{0x7C9B, 0xBB8D},{0x7C9C, 0xF4D0},
- {0x7C9D, 0xF4CF},{0x7C9E, 0xF4D1},{0x7C9F, 0xCBDA},{0x7CA0, 0xBB8E},{0x7CA1, 0xBB8F},{0x7CA2, 0xF4D2},{0x7CA3, 0xBB90},{0x7CA4, 0xD4C1},
- {0x7CA5, 0xD6E0},{0x7CA6, 0xBB91},{0x7CA7, 0xBB92},{0x7CA8, 0xBB93},{0x7CA9, 0xBB94},{0x7CAA, 0xB7E0},{0x7CAB, 0xBB95},{0x7CAC, 0xBB96},
- {0x7CAD, 0xBB97},{0x7CAE, 0xC1B8},{0x7CAF, 0xBB98},{0x7CB0, 0xBB99},{0x7CB1, 0xC1BB},{0x7CB2, 0xF4D3},{0x7CB3, 0xBEAC},{0x7CB4, 0xBB9A},
- {0x7CB5, 0xBB9B},{0x7CB6, 0xBB9C},{0x7CB7, 0xBB9D},{0x7CB8, 0xBB9E},{0x7CB9, 0xB4E2},{0x7CBA, 0xBB9F},{0x7CBB, 0xBBA0},{0x7CBC, 0xF4D4},
- {0x7CBD, 0xF4D5},{0x7CBE, 0xBEAB},{0x7CBF, 0xBC40},{0x7CC0, 0xBC41},{0x7CC1, 0xF4D6},{0x7CC2, 0xBC42},{0x7CC3, 0xBC43},{0x7CC4, 0xBC44},
- {0x7CC5, 0xF4DB},{0x7CC6, 0xBC45},{0x7CC7, 0xF4D7},{0x7CC8, 0xF4DA},{0x7CC9, 0xBC46},{0x7CCA, 0xBAFD},{0x7CCB, 0xBC47},{0x7CCC, 0xF4D8},
- {0x7CCD, 0xF4D9},{0x7CCE, 0xBC48},{0x7CCF, 0xBC49},{0x7CD0, 0xBC4A},{0x7CD1, 0xBC4B},{0x7CD2, 0xBC4C},{0x7CD3, 0xBC4D},{0x7CD4, 0xBC4E},
- {0x7CD5, 0xB8E2},{0x7CD6, 0xCCC7},{0x7CD7, 0xF4DC},{0x7CD8, 0xBC4F},{0x7CD9, 0xB2DA},{0x7CDA, 0xBC50},{0x7CDB, 0xBC51},{0x7CDC, 0xC3D3},
- {0x7CDD, 0xBC52},{0x7CDE, 0xBC53},{0x7CDF, 0xD4E3},{0x7CE0, 0xBFB7},{0x7CE1, 0xBC54},{0x7CE2, 0xBC55},{0x7CE3, 0xBC56},{0x7CE4, 0xBC57},
- {0x7CE5, 0xBC58},{0x7CE6, 0xBC59},{0x7CE7, 0xBC5A},{0x7CE8, 0xF4DD},{0x7CE9, 0xBC5B},{0x7CEA, 0xBC5C},{0x7CEB, 0xBC5D},{0x7CEC, 0xBC5E},
- {0x7CED, 0xBC5F},{0x7CEE, 0xBC60},{0x7CEF, 0xC5B4},{0x7CF0, 0xBC61},{0x7CF1, 0xBC62},{0x7CF2, 0xBC63},{0x7CF3, 0xBC64},{0x7CF4, 0xBC65},
- {0x7CF5, 0xBC66},{0x7CF6, 0xBC67},{0x7CF7, 0xBC68},{0x7CF8, 0xF4E9},{0x7CF9, 0xBC69},{0x7CFA, 0xBC6A},{0x7CFB, 0xCFB5},{0x7CFC, 0xBC6B},
- {0x7CFD, 0xBC6C},{0x7CFE, 0xBC6D},{0x7CFF, 0xBC6E},{0x7D00, 0xBC6F},{0x7D01, 0xBC70},{0x7D02, 0xBC71},{0x7D03, 0xBC72},{0x7D04, 0xBC73},
- {0x7D05, 0xBC74},{0x7D06, 0xBC75},{0x7D07, 0xBC76},{0x7D08, 0xBC77},{0x7D09, 0xBC78},{0x7D0A, 0xCEC9},{0x7D0B, 0xBC79},{0x7D0C, 0xBC7A},
- {0x7D0D, 0xBC7B},{0x7D0E, 0xBC7C},{0x7D0F, 0xBC7D},{0x7D10, 0xBC7E},{0x7D11, 0xBC80},{0x7D12, 0xBC81},{0x7D13, 0xBC82},{0x7D14, 0xBC83},
- {0x7D15, 0xBC84},{0x7D16, 0xBC85},{0x7D17, 0xBC86},{0x7D18, 0xBC87},{0x7D19, 0xBC88},{0x7D1A, 0xBC89},{0x7D1B, 0xBC8A},{0x7D1C, 0xBC8B},
- {0x7D1D, 0xBC8C},{0x7D1E, 0xBC8D},{0x7D1F, 0xBC8E},{0x7D20, 0xCBD8},{0x7D21, 0xBC8F},{0x7D22, 0xCBF7},{0x7D23, 0xBC90},{0x7D24, 0xBC91},
- {0x7D25, 0xBC92},{0x7D26, 0xBC93},{0x7D27, 0xBDF4},{0x7D28, 0xBC94},{0x7D29, 0xBC95},{0x7D2A, 0xBC96},{0x7D2B, 0xD7CF},{0x7D2C, 0xBC97},
- {0x7D2D, 0xBC98},{0x7D2E, 0xBC99},{0x7D2F, 0xC0DB},{0x7D30, 0xBC9A},{0x7D31, 0xBC9B},{0x7D32, 0xBC9C},{0x7D33, 0xBC9D},{0x7D34, 0xBC9E},
- {0x7D35, 0xBC9F},{0x7D36, 0xBCA0},{0x7D37, 0xBD40},{0x7D38, 0xBD41},{0x7D39, 0xBD42},{0x7D3A, 0xBD43},{0x7D3B, 0xBD44},{0x7D3C, 0xBD45},
- {0x7D3D, 0xBD46},{0x7D3E, 0xBD47},{0x7D3F, 0xBD48},{0x7D40, 0xBD49},{0x7D41, 0xBD4A},{0x7D42, 0xBD4B},{0x7D43, 0xBD4C},{0x7D44, 0xBD4D},
- {0x7D45, 0xBD4E},{0x7D46, 0xBD4F},{0x7D47, 0xBD50},{0x7D48, 0xBD51},{0x7D49, 0xBD52},{0x7D4A, 0xBD53},{0x7D4B, 0xBD54},{0x7D4C, 0xBD55},
- {0x7D4D, 0xBD56},{0x7D4E, 0xBD57},{0x7D4F, 0xBD58},{0x7D50, 0xBD59},{0x7D51, 0xBD5A},{0x7D52, 0xBD5B},{0x7D53, 0xBD5C},{0x7D54, 0xBD5D},
- {0x7D55, 0xBD5E},{0x7D56, 0xBD5F},{0x7D57, 0xBD60},{0x7D58, 0xBD61},{0x7D59, 0xBD62},{0x7D5A, 0xBD63},{0x7D5B, 0xBD64},{0x7D5C, 0xBD65},
- {0x7D5D, 0xBD66},{0x7D5E, 0xBD67},{0x7D5F, 0xBD68},{0x7D60, 0xBD69},{0x7D61, 0xBD6A},{0x7D62, 0xBD6B},{0x7D63, 0xBD6C},{0x7D64, 0xBD6D},
- {0x7D65, 0xBD6E},{0x7D66, 0xBD6F},{0x7D67, 0xBD70},{0x7D68, 0xBD71},{0x7D69, 0xBD72},{0x7D6A, 0xBD73},{0x7D6B, 0xBD74},{0x7D6C, 0xBD75},
- {0x7D6D, 0xBD76},{0x7D6E, 0xD0F5},{0x7D6F, 0xBD77},{0x7D70, 0xBD78},{0x7D71, 0xBD79},{0x7D72, 0xBD7A},{0x7D73, 0xBD7B},{0x7D74, 0xBD7C},
- {0x7D75, 0xBD7D},{0x7D76, 0xBD7E},{0x7D77, 0xF4EA},{0x7D78, 0xBD80},{0x7D79, 0xBD81},{0x7D7A, 0xBD82},{0x7D7B, 0xBD83},{0x7D7C, 0xBD84},
- {0x7D7D, 0xBD85},{0x7D7E, 0xBD86},{0x7D7F, 0xBD87},{0x7D80, 0xBD88},{0x7D81, 0xBD89},{0x7D82, 0xBD8A},{0x7D83, 0xBD8B},{0x7D84, 0xBD8C},
- {0x7D85, 0xBD8D},{0x7D86, 0xBD8E},{0x7D87, 0xBD8F},{0x7D88, 0xBD90},{0x7D89, 0xBD91},{0x7D8A, 0xBD92},{0x7D8B, 0xBD93},{0x7D8C, 0xBD94},
- {0x7D8D, 0xBD95},{0x7D8E, 0xBD96},{0x7D8F, 0xBD97},{0x7D90, 0xBD98},{0x7D91, 0xBD99},{0x7D92, 0xBD9A},{0x7D93, 0xBD9B},{0x7D94, 0xBD9C},
- {0x7D95, 0xBD9D},{0x7D96, 0xBD9E},{0x7D97, 0xBD9F},{0x7D98, 0xBDA0},{0x7D99, 0xBE40},{0x7D9A, 0xBE41},{0x7D9B, 0xBE42},{0x7D9C, 0xBE43},
- {0x7D9D, 0xBE44},{0x7D9E, 0xBE45},{0x7D9F, 0xBE46},{0x7DA0, 0xBE47},{0x7DA1, 0xBE48},{0x7DA2, 0xBE49},{0x7DA3, 0xBE4A},{0x7DA4, 0xBE4B},
- {0x7DA5, 0xBE4C},{0x7DA6, 0xF4EB},{0x7DA7, 0xBE4D},{0x7DA8, 0xBE4E},{0x7DA9, 0xBE4F},{0x7DAA, 0xBE50},{0x7DAB, 0xBE51},{0x7DAC, 0xBE52},
- {0x7DAD, 0xBE53},{0x7DAE, 0xF4EC},{0x7DAF, 0xBE54},{0x7DB0, 0xBE55},{0x7DB1, 0xBE56},{0x7DB2, 0xBE57},{0x7DB3, 0xBE58},{0x7DB4, 0xBE59},
- {0x7DB5, 0xBE5A},{0x7DB6, 0xBE5B},{0x7DB7, 0xBE5C},{0x7DB8, 0xBE5D},{0x7DB9, 0xBE5E},{0x7DBA, 0xBE5F},{0x7DBB, 0xBE60},{0x7DBC, 0xBE61},
- {0x7DBD, 0xBE62},{0x7DBE, 0xBE63},{0x7DBF, 0xBE64},{0x7DC0, 0xBE65},{0x7DC1, 0xBE66},{0x7DC2, 0xBE67},{0x7DC3, 0xBE68},{0x7DC4, 0xBE69},
- {0x7DC5, 0xBE6A},{0x7DC6, 0xBE6B},{0x7DC7, 0xBE6C},{0x7DC8, 0xBE6D},{0x7DC9, 0xBE6E},{0x7DCA, 0xBE6F},{0x7DCB, 0xBE70},{0x7DCC, 0xBE71},
- {0x7DCD, 0xBE72},{0x7DCE, 0xBE73},{0x7DCF, 0xBE74},{0x7DD0, 0xBE75},{0x7DD1, 0xBE76},{0x7DD2, 0xBE77},{0x7DD3, 0xBE78},{0x7DD4, 0xBE79},
- {0x7DD5, 0xBE7A},{0x7DD6, 0xBE7B},{0x7DD7, 0xBE7C},{0x7DD8, 0xBE7D},{0x7DD9, 0xBE7E},{0x7DDA, 0xBE80},{0x7DDB, 0xBE81},{0x7DDC, 0xBE82},
- {0x7DDD, 0xBE83},{0x7DDE, 0xBE84},{0x7DDF, 0xBE85},{0x7DE0, 0xBE86},{0x7DE1, 0xBE87},{0x7DE2, 0xBE88},{0x7DE3, 0xBE89},{0x7DE4, 0xBE8A},
- {0x7DE5, 0xBE8B},{0x7DE6, 0xBE8C},{0x7DE7, 0xBE8D},{0x7DE8, 0xBE8E},{0x7DE9, 0xBE8F},{0x7DEA, 0xBE90},{0x7DEB, 0xBE91},{0x7DEC, 0xBE92},
- {0x7DED, 0xBE93},{0x7DEE, 0xBE94},{0x7DEF, 0xBE95},{0x7DF0, 0xBE96},{0x7DF1, 0xBE97},{0x7DF2, 0xBE98},{0x7DF3, 0xBE99},{0x7DF4, 0xBE9A},
- {0x7DF5, 0xBE9B},{0x7DF6, 0xBE9C},{0x7DF7, 0xBE9D},{0x7DF8, 0xBE9E},{0x7DF9, 0xBE9F},{0x7DFA, 0xBEA0},{0x7DFB, 0xBF40},{0x7DFC, 0xBF41},
- {0x7DFD, 0xBF42},{0x7DFE, 0xBF43},{0x7DFF, 0xBF44},{0x7E00, 0xBF45},{0x7E01, 0xBF46},{0x7E02, 0xBF47},{0x7E03, 0xBF48},{0x7E04, 0xBF49},
- {0x7E05, 0xBF4A},{0x7E06, 0xBF4B},{0x7E07, 0xBF4C},{0x7E08, 0xBF4D},{0x7E09, 0xBF4E},{0x7E0A, 0xBF4F},{0x7E0B, 0xBF50},{0x7E0C, 0xBF51},
- {0x7E0D, 0xBF52},{0x7E0E, 0xBF53},{0x7E0F, 0xBF54},{0x7E10, 0xBF55},{0x7E11, 0xBF56},{0x7E12, 0xBF57},{0x7E13, 0xBF58},{0x7E14, 0xBF59},
- {0x7E15, 0xBF5A},{0x7E16, 0xBF5B},{0x7E17, 0xBF5C},{0x7E18, 0xBF5D},{0x7E19, 0xBF5E},{0x7E1A, 0xBF5F},{0x7E1B, 0xBF60},{0x7E1C, 0xBF61},
- {0x7E1D, 0xBF62},{0x7E1E, 0xBF63},{0x7E1F, 0xBF64},{0x7E20, 0xBF65},{0x7E21, 0xBF66},{0x7E22, 0xBF67},{0x7E23, 0xBF68},{0x7E24, 0xBF69},
- {0x7E25, 0xBF6A},{0x7E26, 0xBF6B},{0x7E27, 0xBF6C},{0x7E28, 0xBF6D},{0x7E29, 0xBF6E},{0x7E2A, 0xBF6F},{0x7E2B, 0xBF70},{0x7E2C, 0xBF71},
- {0x7E2D, 0xBF72},{0x7E2E, 0xBF73},{0x7E2F, 0xBF74},{0x7E30, 0xBF75},{0x7E31, 0xBF76},{0x7E32, 0xBF77},{0x7E33, 0xBF78},{0x7E34, 0xBF79},
- {0x7E35, 0xBF7A},{0x7E36, 0xBF7B},{0x7E37, 0xBF7C},{0x7E38, 0xBF7D},{0x7E39, 0xBF7E},{0x7E3A, 0xBF80},{0x7E3B, 0xF7E3},{0x7E3C, 0xBF81},
- {0x7E3D, 0xBF82},{0x7E3E, 0xBF83},{0x7E3F, 0xBF84},{0x7E40, 0xBF85},{0x7E41, 0xB7B1},{0x7E42, 0xBF86},{0x7E43, 0xBF87},{0x7E44, 0xBF88},
- {0x7E45, 0xBF89},{0x7E46, 0xBF8A},{0x7E47, 0xF4ED},{0x7E48, 0xBF8B},{0x7E49, 0xBF8C},{0x7E4A, 0xBF8D},{0x7E4B, 0xBF8E},{0x7E4C, 0xBF8F},
- {0x7E4D, 0xBF90},{0x7E4E, 0xBF91},{0x7E4F, 0xBF92},{0x7E50, 0xBF93},{0x7E51, 0xBF94},{0x7E52, 0xBF95},{0x7E53, 0xBF96},{0x7E54, 0xBF97},
- {0x7E55, 0xBF98},{0x7E56, 0xBF99},{0x7E57, 0xBF9A},{0x7E58, 0xBF9B},{0x7E59, 0xBF9C},{0x7E5A, 0xBF9D},{0x7E5B, 0xBF9E},{0x7E5C, 0xBF9F},
- {0x7E5D, 0xBFA0},{0x7E5E, 0xC040},{0x7E5F, 0xC041},{0x7E60, 0xC042},{0x7E61, 0xC043},{0x7E62, 0xC044},{0x7E63, 0xC045},{0x7E64, 0xC046},
- {0x7E65, 0xC047},{0x7E66, 0xC048},{0x7E67, 0xC049},{0x7E68, 0xC04A},{0x7E69, 0xC04B},{0x7E6A, 0xC04C},{0x7E6B, 0xC04D},{0x7E6C, 0xC04E},
- {0x7E6D, 0xC04F},{0x7E6E, 0xC050},{0x7E6F, 0xC051},{0x7E70, 0xC052},{0x7E71, 0xC053},{0x7E72, 0xC054},{0x7E73, 0xC055},{0x7E74, 0xC056},
- {0x7E75, 0xC057},{0x7E76, 0xC058},{0x7E77, 0xC059},{0x7E78, 0xC05A},{0x7E79, 0xC05B},{0x7E7A, 0xC05C},{0x7E7B, 0xC05D},{0x7E7C, 0xC05E},
- {0x7E7D, 0xC05F},{0x7E7E, 0xC060},{0x7E7F, 0xC061},{0x7E80, 0xC062},{0x7E81, 0xC063},{0x7E82, 0xD7EB},{0x7E83, 0xC064},{0x7E84, 0xC065},
- {0x7E85, 0xC066},{0x7E86, 0xC067},{0x7E87, 0xC068},{0x7E88, 0xC069},{0x7E89, 0xC06A},{0x7E8A, 0xC06B},{0x7E8B, 0xC06C},{0x7E8C, 0xC06D},
- {0x7E8D, 0xC06E},{0x7E8E, 0xC06F},{0x7E8F, 0xC070},{0x7E90, 0xC071},{0x7E91, 0xC072},{0x7E92, 0xC073},{0x7E93, 0xC074},{0x7E94, 0xC075},
- {0x7E95, 0xC076},{0x7E96, 0xC077},{0x7E97, 0xC078},{0x7E98, 0xC079},{0x7E99, 0xC07A},{0x7E9A, 0xC07B},{0x7E9B, 0xF4EE},{0x7E9C, 0xC07C},
- {0x7E9D, 0xC07D},{0x7E9E, 0xC07E},{0x7E9F, 0xE6F9},{0x7EA0, 0xBEC0},{0x7EA1, 0xE6FA},{0x7EA2, 0xBAEC},{0x7EA3, 0xE6FB},{0x7EA4, 0xCFCB},
- {0x7EA5, 0xE6FC},{0x7EA6, 0xD4BC},{0x7EA7, 0xBCB6},{0x7EA8, 0xE6FD},{0x7EA9, 0xE6FE},{0x7EAA, 0xBCCD},{0x7EAB, 0xC8D2},{0x7EAC, 0xCEB3},
- {0x7EAD, 0xE7A1},{0x7EAE, 0xC080},{0x7EAF, 0xB4BF},{0x7EB0, 0xE7A2},{0x7EB1, 0xC9B4},{0x7EB2, 0xB8D9},{0x7EB3, 0xC4C9},{0x7EB4, 0xC081},
- {0x7EB5, 0xD7DD},{0x7EB6, 0xC2DA},{0x7EB7, 0xB7D7},{0x7EB8, 0xD6BD},{0x7EB9, 0xCEC6},{0x7EBA, 0xB7C4},{0x7EBB, 0xC082},{0x7EBC, 0xC083},
- {0x7EBD, 0xC5A6},{0x7EBE, 0xE7A3},{0x7EBF, 0xCFDF},{0x7EC0, 0xE7A4},{0x7EC1, 0xE7A5},{0x7EC2, 0xE7A6},{0x7EC3, 0xC1B7},{0x7EC4, 0xD7E9},
- {0x7EC5, 0xC9F0},{0x7EC6, 0xCFB8},{0x7EC7, 0xD6AF},{0x7EC8, 0xD6D5},{0x7EC9, 0xE7A7},{0x7ECA, 0xB0ED},{0x7ECB, 0xE7A8},{0x7ECC, 0xE7A9},
- {0x7ECD, 0xC9DC},{0x7ECE, 0xD2EF},{0x7ECF, 0xBEAD},{0x7ED0, 0xE7AA},{0x7ED1, 0xB0F3},{0x7ED2, 0xC8DE},{0x7ED3, 0xBDE1},{0x7ED4, 0xE7AB},
- {0x7ED5, 0xC8C6},{0x7ED6, 0xC084},{0x7ED7, 0xE7AC},{0x7ED8, 0xBBE6},{0x7ED9, 0xB8F8},{0x7EDA, 0xD1A4},{0x7EDB, 0xE7AD},{0x7EDC, 0xC2E7},
- {0x7EDD, 0xBEF8},{0x7EDE, 0xBDCA},{0x7EDF, 0xCDB3},{0x7EE0, 0xE7AE},{0x7EE1, 0xE7AF},{0x7EE2, 0xBEEE},{0x7EE3, 0xD0E5},{0x7EE4, 0xC085},
- {0x7EE5, 0xCBE7},{0x7EE6, 0xCCD0},{0x7EE7, 0xBCCC},{0x7EE8, 0xE7B0},{0x7EE9, 0xBCA8},{0x7EEA, 0xD0F7},{0x7EEB, 0xE7B1},{0x7EEC, 0xC086},
- {0x7EED, 0xD0F8},{0x7EEE, 0xE7B2},{0x7EEF, 0xE7B3},{0x7EF0, 0xB4C2},{0x7EF1, 0xE7B4},{0x7EF2, 0xE7B5},{0x7EF3, 0xC9FE},{0x7EF4, 0xCEAC},
- {0x7EF5, 0xC3E0},{0x7EF6, 0xE7B7},{0x7EF7, 0xB1C1},{0x7EF8, 0xB3F1},{0x7EF9, 0xC087},{0x7EFA, 0xE7B8},{0x7EFB, 0xE7B9},{0x7EFC, 0xD7DB},
- {0x7EFD, 0xD5C0},{0x7EFE, 0xE7BA},{0x7EFF, 0xC2CC},{0x7F00, 0xD7BA},{0x7F01, 0xE7BB},{0x7F02, 0xE7BC},{0x7F03, 0xE7BD},{0x7F04, 0xBCEA},
- {0x7F05, 0xC3E5},{0x7F06, 0xC0C2},{0x7F07, 0xE7BE},{0x7F08, 0xE7BF},{0x7F09, 0xBCA9},{0x7F0A, 0xC088},{0x7F0B, 0xE7C0},{0x7F0C, 0xE7C1},
- {0x7F0D, 0xE7B6},{0x7F0E, 0xB6D0},{0x7F0F, 0xE7C2},{0x7F10, 0xC089},{0x7F11, 0xE7C3},{0x7F12, 0xE7C4},{0x7F13, 0xBBBA},{0x7F14, 0xB5DE},
- {0x7F15, 0xC2C6},{0x7F16, 0xB1E0},{0x7F17, 0xE7C5},{0x7F18, 0xD4B5},{0x7F19, 0xE7C6},{0x7F1A, 0xB8BF},{0x7F1B, 0xE7C8},{0x7F1C, 0xE7C7},
- {0x7F1D, 0xB7EC},{0x7F1E, 0xC08A},{0x7F1F, 0xE7C9},{0x7F20, 0xB2F8},{0x7F21, 0xE7CA},{0x7F22, 0xE7CB},{0x7F23, 0xE7CC},{0x7F24, 0xE7CD},
- {0x7F25, 0xE7CE},{0x7F26, 0xE7CF},{0x7F27, 0xE7D0},{0x7F28, 0xD3A7},{0x7F29, 0xCBF5},{0x7F2A, 0xE7D1},{0x7F2B, 0xE7D2},{0x7F2C, 0xE7D3},
- {0x7F2D, 0xE7D4},{0x7F2E, 0xC9C9},{0x7F2F, 0xE7D5},{0x7F30, 0xE7D6},{0x7F31, 0xE7D7},{0x7F32, 0xE7D8},{0x7F33, 0xE7D9},{0x7F34, 0xBDC9},
- {0x7F35, 0xE7DA},{0x7F36, 0xF3BE},{0x7F37, 0xC08B},{0x7F38, 0xB8D7},{0x7F39, 0xC08C},{0x7F3A, 0xC8B1},{0x7F3B, 0xC08D},{0x7F3C, 0xC08E},
- {0x7F3D, 0xC08F},{0x7F3E, 0xC090},{0x7F3F, 0xC091},{0x7F40, 0xC092},{0x7F41, 0xC093},{0x7F42, 0xF3BF},{0x7F43, 0xC094},{0x7F44, 0xF3C0},
- {0x7F45, 0xF3C1},{0x7F46, 0xC095},{0x7F47, 0xC096},{0x7F48, 0xC097},{0x7F49, 0xC098},{0x7F4A, 0xC099},{0x7F4B, 0xC09A},{0x7F4C, 0xC09B},
- {0x7F4D, 0xC09C},{0x7F4E, 0xC09D},{0x7F4F, 0xC09E},{0x7F50, 0xB9DE},{0x7F51, 0xCDF8},{0x7F52, 0xC09F},{0x7F53, 0xC0A0},{0x7F54, 0xD8E8},
- {0x7F55, 0xBAB1},{0x7F56, 0xC140},{0x7F57, 0xC2DE},{0x7F58, 0xEEB7},{0x7F59, 0xC141},{0x7F5A, 0xB7A3},{0x7F5B, 0xC142},{0x7F5C, 0xC143},
- {0x7F5D, 0xC144},{0x7F5E, 0xC145},{0x7F5F, 0xEEB9},{0x7F60, 0xC146},{0x7F61, 0xEEB8},{0x7F62, 0xB0D5},{0x7F63, 0xC147},{0x7F64, 0xC148},
- {0x7F65, 0xC149},{0x7F66, 0xC14A},{0x7F67, 0xC14B},{0x7F68, 0xEEBB},{0x7F69, 0xD5D6},{0x7F6A, 0xD7EF},{0x7F6B, 0xC14C},{0x7F6C, 0xC14D},
- {0x7F6D, 0xC14E},{0x7F6E, 0xD6C3},{0x7F6F, 0xC14F},{0x7F70, 0xC150},{0x7F71, 0xEEBD},{0x7F72, 0xCAF0},{0x7F73, 0xC151},{0x7F74, 0xEEBC},
- {0x7F75, 0xC152},{0x7F76, 0xC153},{0x7F77, 0xC154},{0x7F78, 0xC155},{0x7F79, 0xEEBE},{0x7F7A, 0xC156},{0x7F7B, 0xC157},{0x7F7C, 0xC158},
- {0x7F7D, 0xC159},{0x7F7E, 0xEEC0},{0x7F7F, 0xC15A},{0x7F80, 0xC15B},{0x7F81, 0xEEBF},{0x7F82, 0xC15C},{0x7F83, 0xC15D},{0x7F84, 0xC15E},
- {0x7F85, 0xC15F},{0x7F86, 0xC160},{0x7F87, 0xC161},{0x7F88, 0xC162},{0x7F89, 0xC163},{0x7F8A, 0xD1F2},{0x7F8B, 0xC164},{0x7F8C, 0xC7BC},
- {0x7F8D, 0xC165},{0x7F8E, 0xC3C0},{0x7F8F, 0xC166},{0x7F90, 0xC167},{0x7F91, 0xC168},{0x7F92, 0xC169},{0x7F93, 0xC16A},{0x7F94, 0xB8E1},
- {0x7F95, 0xC16B},{0x7F96, 0xC16C},{0x7F97, 0xC16D},{0x7F98, 0xC16E},{0x7F99, 0xC16F},{0x7F9A, 0xC1E7},{0x7F9B, 0xC170},{0x7F9C, 0xC171},
- {0x7F9D, 0xF4C6},{0x7F9E, 0xD0DF},{0x7F9F, 0xF4C7},{0x7FA0, 0xC172},{0x7FA1, 0xCFDB},{0x7FA2, 0xC173},{0x7FA3, 0xC174},{0x7FA4, 0xC8BA},
- {0x7FA5, 0xC175},{0x7FA6, 0xC176},{0x7FA7, 0xF4C8},{0x7FA8, 0xC177},{0x7FA9, 0xC178},{0x7FAA, 0xC179},{0x7FAB, 0xC17A},{0x7FAC, 0xC17B},
- {0x7FAD, 0xC17C},{0x7FAE, 0xC17D},{0x7FAF, 0xF4C9},{0x7FB0, 0xF4CA},{0x7FB1, 0xC17E},{0x7FB2, 0xF4CB},{0x7FB3, 0xC180},{0x7FB4, 0xC181},
- {0x7FB5, 0xC182},{0x7FB6, 0xC183},{0x7FB7, 0xC184},{0x7FB8, 0xD9FA},{0x7FB9, 0xB8FE},{0x7FBA, 0xC185},{0x7FBB, 0xC186},{0x7FBC, 0xE5F1},
- {0x7FBD, 0xD3F0},{0x7FBE, 0xC187},{0x7FBF, 0xF4E0},{0x7FC0, 0xC188},{0x7FC1, 0xCECC},{0x7FC2, 0xC189},{0x7FC3, 0xC18A},{0x7FC4, 0xC18B},
- {0x7FC5, 0xB3E1},{0x7FC6, 0xC18C},{0x7FC7, 0xC18D},{0x7FC8, 0xC18E},{0x7FC9, 0xC18F},{0x7FCA, 0xF1B4},{0x7FCB, 0xC190},{0x7FCC, 0xD2EE},
- {0x7FCD, 0xC191},{0x7FCE, 0xF4E1},{0x7FCF, 0xC192},{0x7FD0, 0xC193},{0x7FD1, 0xC194},{0x7FD2, 0xC195},{0x7FD3, 0xC196},{0x7FD4, 0xCFE8},
- {0x7FD5, 0xF4E2},{0x7FD6, 0xC197},{0x7FD7, 0xC198},{0x7FD8, 0xC7CC},{0x7FD9, 0xC199},{0x7FDA, 0xC19A},{0x7FDB, 0xC19B},{0x7FDC, 0xC19C},
- {0x7FDD, 0xC19D},{0x7FDE, 0xC19E},{0x7FDF, 0xB5D4},{0x7FE0, 0xB4E4},{0x7FE1, 0xF4E4},{0x7FE2, 0xC19F},{0x7FE3, 0xC1A0},{0x7FE4, 0xC240},
- {0x7FE5, 0xF4E3},{0x7FE6, 0xF4E5},{0x7FE7, 0xC241},{0x7FE8, 0xC242},{0x7FE9, 0xF4E6},{0x7FEA, 0xC243},{0x7FEB, 0xC244},{0x7FEC, 0xC245},
- {0x7FED, 0xC246},{0x7FEE, 0xF4E7},{0x7FEF, 0xC247},{0x7FF0, 0xBAB2},{0x7FF1, 0xB0BF},{0x7FF2, 0xC248},{0x7FF3, 0xF4E8},{0x7FF4, 0xC249},
- {0x7FF5, 0xC24A},{0x7FF6, 0xC24B},{0x7FF7, 0xC24C},{0x7FF8, 0xC24D},{0x7FF9, 0xC24E},{0x7FFA, 0xC24F},{0x7FFB, 0xB7AD},{0x7FFC, 0xD2ED},
- {0x7FFD, 0xC250},{0x7FFE, 0xC251},{0x7FFF, 0xC252},{0x8000, 0xD2AB},{0x8001, 0xC0CF},{0x8002, 0xC253},{0x8003, 0xBFBC},{0x8004, 0xEBA3},
- {0x8005, 0xD5DF},{0x8006, 0xEAC8},{0x8007, 0xC254},{0x8008, 0xC255},{0x8009, 0xC256},{0x800A, 0xC257},{0x800B, 0xF1F3},{0x800C, 0xB6F8},
- {0x800D, 0xCBA3},{0x800E, 0xC258},{0x800F, 0xC259},{0x8010, 0xC4CD},{0x8011, 0xC25A},{0x8012, 0xF1E7},{0x8013, 0xC25B},{0x8014, 0xF1E8},
- {0x8015, 0xB8FB},{0x8016, 0xF1E9},{0x8017, 0xBAC4},{0x8018, 0xD4C5},{0x8019, 0xB0D2},{0x801A, 0xC25C},{0x801B, 0xC25D},{0x801C, 0xF1EA},
- {0x801D, 0xC25E},{0x801E, 0xC25F},{0x801F, 0xC260},{0x8020, 0xF1EB},{0x8021, 0xC261},{0x8022, 0xF1EC},{0x8023, 0xC262},{0x8024, 0xC263},
- {0x8025, 0xF1ED},{0x8026, 0xF1EE},{0x8027, 0xF1EF},{0x8028, 0xF1F1},{0x8029, 0xF1F0},{0x802A, 0xC5D5},{0x802B, 0xC264},{0x802C, 0xC265},
- {0x802D, 0xC266},{0x802E, 0xC267},{0x802F, 0xC268},{0x8030, 0xC269},{0x8031, 0xF1F2},{0x8032, 0xC26A},{0x8033, 0xB6FA},{0x8034, 0xC26B},
- {0x8035, 0xF1F4},{0x8036, 0xD2AE},{0x8037, 0xDEC7},{0x8038, 0xCBCA},{0x8039, 0xC26C},{0x803A, 0xC26D},{0x803B, 0xB3DC},{0x803C, 0xC26E},
- {0x803D, 0xB5A2},{0x803E, 0xC26F},{0x803F, 0xB9A2},{0x8040, 0xC270},{0x8041, 0xC271},{0x8042, 0xC4F4},{0x8043, 0xF1F5},{0x8044, 0xC272},
- {0x8045, 0xC273},{0x8046, 0xF1F6},{0x8047, 0xC274},{0x8048, 0xC275},{0x8049, 0xC276},{0x804A, 0xC1C4},{0x804B, 0xC1FB},{0x804C, 0xD6B0},
- {0x804D, 0xF1F7},{0x804E, 0xC277},{0x804F, 0xC278},{0x8050, 0xC279},{0x8051, 0xC27A},{0x8052, 0xF1F8},{0x8053, 0xC27B},{0x8054, 0xC1AA},
- {0x8055, 0xC27C},{0x8056, 0xC27D},{0x8057, 0xC27E},{0x8058, 0xC6B8},{0x8059, 0xC280},{0x805A, 0xBEDB},{0x805B, 0xC281},{0x805C, 0xC282},
- {0x805D, 0xC283},{0x805E, 0xC284},{0x805F, 0xC285},{0x8060, 0xC286},{0x8061, 0xC287},{0x8062, 0xC288},{0x8063, 0xC289},{0x8064, 0xC28A},
- {0x8065, 0xC28B},{0x8066, 0xC28C},{0x8067, 0xC28D},{0x8068, 0xC28E},{0x8069, 0xF1F9},{0x806A, 0xB4CF},{0x806B, 0xC28F},{0x806C, 0xC290},
- {0x806D, 0xC291},{0x806E, 0xC292},{0x806F, 0xC293},{0x8070, 0xC294},{0x8071, 0xF1FA},{0x8072, 0xC295},{0x8073, 0xC296},{0x8074, 0xC297},
- {0x8075, 0xC298},{0x8076, 0xC299},{0x8077, 0xC29A},{0x8078, 0xC29B},{0x8079, 0xC29C},{0x807A, 0xC29D},{0x807B, 0xC29E},{0x807C, 0xC29F},
- {0x807D, 0xC2A0},{0x807E, 0xC340},{0x807F, 0xEDB2},{0x8080, 0xEDB1},{0x8081, 0xC341},{0x8082, 0xC342},{0x8083, 0xCBE0},{0x8084, 0xD2DE},
- {0x8085, 0xC343},{0x8086, 0xCBC1},{0x8087, 0xD5D8},{0x8088, 0xC344},{0x8089, 0xC8E2},{0x808A, 0xC345},{0x808B, 0xC0DF},{0x808C, 0xBCA1},
- {0x808D, 0xC346},{0x808E, 0xC347},{0x808F, 0xC348},{0x8090, 0xC349},{0x8091, 0xC34A},{0x8092, 0xC34B},{0x8093, 0xEBC1},{0x8094, 0xC34C},
- {0x8095, 0xC34D},{0x8096, 0xD0A4},{0x8097, 0xC34E},{0x8098, 0xD6E2},{0x8099, 0xC34F},{0x809A, 0xB6C7},{0x809B, 0xB8D8},{0x809C, 0xEBC0},
- {0x809D, 0xB8CE},{0x809E, 0xC350},{0x809F, 0xEBBF},{0x80A0, 0xB3A6},{0x80A1, 0xB9C9},{0x80A2, 0xD6AB},{0x80A3, 0xC351},{0x80A4, 0xB7F4},
- {0x80A5, 0xB7CA},{0x80A6, 0xC352},{0x80A7, 0xC353},{0x80A8, 0xC354},{0x80A9, 0xBCE7},{0x80AA, 0xB7BE},{0x80AB, 0xEBC6},{0x80AC, 0xC355},
- {0x80AD, 0xEBC7},{0x80AE, 0xB0B9},{0x80AF, 0xBFCF},{0x80B0, 0xC356},{0x80B1, 0xEBC5},{0x80B2, 0xD3FD},{0x80B3, 0xC357},{0x80B4, 0xEBC8},
- {0x80B5, 0xC358},{0x80B6, 0xC359},{0x80B7, 0xEBC9},{0x80B8, 0xC35A},{0x80B9, 0xC35B},{0x80BA, 0xB7CE},{0x80BB, 0xC35C},{0x80BC, 0xEBC2},
- {0x80BD, 0xEBC4},{0x80BE, 0xC9F6},{0x80BF, 0xD6D7},{0x80C0, 0xD5CD},{0x80C1, 0xD0B2},{0x80C2, 0xEBCF},{0x80C3, 0xCEB8},{0x80C4, 0xEBD0},
- {0x80C5, 0xC35D},{0x80C6, 0xB5A8},{0x80C7, 0xC35E},{0x80C8, 0xC35F},{0x80C9, 0xC360},{0x80CA, 0xC361},{0x80CB, 0xC362},{0x80CC, 0xB1B3},
- {0x80CD, 0xEBD2},{0x80CE, 0xCCA5},{0x80CF, 0xC363},{0x80D0, 0xC364},{0x80D1, 0xC365},{0x80D2, 0xC366},{0x80D3, 0xC367},{0x80D4, 0xC368},
- {0x80D5, 0xC369},{0x80D6, 0xC5D6},{0x80D7, 0xEBD3},{0x80D8, 0xC36A},{0x80D9, 0xEBD1},{0x80DA, 0xC5DF},{0x80DB, 0xEBCE},{0x80DC, 0xCAA4},
- {0x80DD, 0xEBD5},{0x80DE, 0xB0FB},{0x80DF, 0xC36B},{0x80E0, 0xC36C},{0x80E1, 0xBAFA},{0x80E2, 0xC36D},{0x80E3, 0xC36E},{0x80E4, 0xD8B7},
- {0x80E5, 0xF1E3},{0x80E6, 0xC36F},{0x80E7, 0xEBCA},{0x80E8, 0xEBCB},{0x80E9, 0xEBCC},{0x80EA, 0xEBCD},{0x80EB, 0xEBD6},{0x80EC, 0xE6C0},
- {0x80ED, 0xEBD9},{0x80EE, 0xC370},{0x80EF, 0xBFE8},{0x80F0, 0xD2C8},{0x80F1, 0xEBD7},{0x80F2, 0xEBDC},{0x80F3, 0xB8EC},{0x80F4, 0xEBD8},
- {0x80F5, 0xC371},{0x80F6, 0xBDBA},{0x80F7, 0xC372},{0x80F8, 0xD0D8},{0x80F9, 0xC373},{0x80FA, 0xB0B7},{0x80FB, 0xC374},{0x80FC, 0xEBDD},
- {0x80FD, 0xC4DC},{0x80FE, 0xC375},{0x80FF, 0xC376},{0x8100, 0xC377},{0x8101, 0xC378},{0x8102, 0xD6AC},{0x8103, 0xC379},{0x8104, 0xC37A},
- {0x8105, 0xC37B},{0x8106, 0xB4E0},{0x8107, 0xC37C},{0x8108, 0xC37D},{0x8109, 0xC2F6},{0x810A, 0xBCB9},{0x810B, 0xC37E},{0x810C, 0xC380},
- {0x810D, 0xEBDA},{0x810E, 0xEBDB},{0x810F, 0xD4E0},{0x8110, 0xC6EA},{0x8111, 0xC4D4},{0x8112, 0xEBDF},{0x8113, 0xC5A7},{0x8114, 0xD9F5},
- {0x8115, 0xC381},{0x8116, 0xB2B1},{0x8117, 0xC382},{0x8118, 0xEBE4},{0x8119, 0xC383},{0x811A, 0xBDC5},{0x811B, 0xC384},{0x811C, 0xC385},
- {0x811D, 0xC386},{0x811E, 0xEBE2},{0x811F, 0xC387},{0x8120, 0xC388},{0x8121, 0xC389},{0x8122, 0xC38A},{0x8123, 0xC38B},{0x8124, 0xC38C},
- {0x8125, 0xC38D},{0x8126, 0xC38E},{0x8127, 0xC38F},{0x8128, 0xC390},{0x8129, 0xC391},{0x812A, 0xC392},{0x812B, 0xC393},{0x812C, 0xEBE3},
- {0x812D, 0xC394},{0x812E, 0xC395},{0x812F, 0xB8AC},{0x8130, 0xC396},{0x8131, 0xCDD1},{0x8132, 0xEBE5},{0x8133, 0xC397},{0x8134, 0xC398},
- {0x8135, 0xC399},{0x8136, 0xEBE1},{0x8137, 0xC39A},{0x8138, 0xC1B3},{0x8139, 0xC39B},{0x813A, 0xC39C},{0x813B, 0xC39D},{0x813C, 0xC39E},
- {0x813D, 0xC39F},{0x813E, 0xC6A2},{0x813F, 0xC3A0},{0x8140, 0xC440},{0x8141, 0xC441},{0x8142, 0xC442},{0x8143, 0xC443},{0x8144, 0xC444},
- {0x8145, 0xC445},{0x8146, 0xCCF3},{0x8147, 0xC446},{0x8148, 0xEBE6},{0x8149, 0xC447},{0x814A, 0xC0B0},{0x814B, 0xD2B8},{0x814C, 0xEBE7},
- {0x814D, 0xC448},{0x814E, 0xC449},{0x814F, 0xC44A},{0x8150, 0xB8AF},{0x8151, 0xB8AD},{0x8152, 0xC44B},{0x8153, 0xEBE8},{0x8154, 0xC7BB},
- {0x8155, 0xCDF3},{0x8156, 0xC44C},{0x8157, 0xC44D},{0x8158, 0xC44E},{0x8159, 0xEBEA},{0x815A, 0xEBEB},{0x815B, 0xC44F},{0x815C, 0xC450},
- {0x815D, 0xC451},{0x815E, 0xC452},{0x815F, 0xC453},{0x8160, 0xEBED},{0x8161, 0xC454},{0x8162, 0xC455},{0x8163, 0xC456},{0x8164, 0xC457},
- {0x8165, 0xD0C8},{0x8166, 0xC458},{0x8167, 0xEBF2},{0x8168, 0xC459},{0x8169, 0xEBEE},{0x816A, 0xC45A},{0x816B, 0xC45B},{0x816C, 0xC45C},
- {0x816D, 0xEBF1},{0x816E, 0xC8F9},{0x816F, 0xC45D},{0x8170, 0xD1FC},{0x8171, 0xEBEC},{0x8172, 0xC45E},{0x8173, 0xC45F},{0x8174, 0xEBE9},
- {0x8175, 0xC460},{0x8176, 0xC461},{0x8177, 0xC462},{0x8178, 0xC463},{0x8179, 0xB8B9},{0x817A, 0xCFD9},{0x817B, 0xC4E5},{0x817C, 0xEBEF},
- {0x817D, 0xEBF0},{0x817E, 0xCCDA},{0x817F, 0xCDC8},{0x8180, 0xB0F2},{0x8181, 0xC464},{0x8182, 0xEBF6},{0x8183, 0xC465},{0x8184, 0xC466},
- {0x8185, 0xC467},{0x8186, 0xC468},{0x8187, 0xC469},{0x8188, 0xEBF5},{0x8189, 0xC46A},{0x818A, 0xB2B2},{0x818B, 0xC46B},{0x818C, 0xC46C},
- {0x818D, 0xC46D},{0x818E, 0xC46E},{0x818F, 0xB8E0},{0x8190, 0xC46F},{0x8191, 0xEBF7},{0x8192, 0xC470},{0x8193, 0xC471},{0x8194, 0xC472},
- {0x8195, 0xC473},{0x8196, 0xC474},{0x8197, 0xC475},{0x8198, 0xB1EC},{0x8199, 0xC476},{0x819A, 0xC477},{0x819B, 0xCCC5},{0x819C, 0xC4A4},
- {0x819D, 0xCFA5},{0x819E, 0xC478},{0x819F, 0xC479},{0x81A0, 0xC47A},{0x81A1, 0xC47B},{0x81A2, 0xC47C},{0x81A3, 0xEBF9},{0x81A4, 0xC47D},
- {0x81A5, 0xC47E},{0x81A6, 0xECA2},{0x81A7, 0xC480},{0x81A8, 0xC5F2},{0x81A9, 0xC481},{0x81AA, 0xEBFA},{0x81AB, 0xC482},{0x81AC, 0xC483},
- {0x81AD, 0xC484},{0x81AE, 0xC485},{0x81AF, 0xC486},{0x81B0, 0xC487},{0x81B1, 0xC488},{0x81B2, 0xC489},{0x81B3, 0xC9C5},{0x81B4, 0xC48A},
- {0x81B5, 0xC48B},{0x81B6, 0xC48C},{0x81B7, 0xC48D},{0x81B8, 0xC48E},{0x81B9, 0xC48F},{0x81BA, 0xE2DF},{0x81BB, 0xEBFE},{0x81BC, 0xC490},
- {0x81BD, 0xC491},{0x81BE, 0xC492},{0x81BF, 0xC493},{0x81C0, 0xCDCE},{0x81C1, 0xECA1},{0x81C2, 0xB1DB},{0x81C3, 0xD3B7},{0x81C4, 0xC494},
- {0x81C5, 0xC495},{0x81C6, 0xD2DC},{0x81C7, 0xC496},{0x81C8, 0xC497},{0x81C9, 0xC498},{0x81CA, 0xEBFD},{0x81CB, 0xC499},{0x81CC, 0xEBFB},
- {0x81CD, 0xC49A},{0x81CE, 0xC49B},{0x81CF, 0xC49C},{0x81D0, 0xC49D},{0x81D1, 0xC49E},{0x81D2, 0xC49F},{0x81D3, 0xC4A0},{0x81D4, 0xC540},
- {0x81D5, 0xC541},{0x81D6, 0xC542},{0x81D7, 0xC543},{0x81D8, 0xC544},{0x81D9, 0xC545},{0x81DA, 0xC546},{0x81DB, 0xC547},{0x81DC, 0xC548},
- {0x81DD, 0xC549},{0x81DE, 0xC54A},{0x81DF, 0xC54B},{0x81E0, 0xC54C},{0x81E1, 0xC54D},{0x81E2, 0xC54E},{0x81E3, 0xB3BC},{0x81E4, 0xC54F},
- {0x81E5, 0xC550},{0x81E6, 0xC551},{0x81E7, 0xEAB0},{0x81E8, 0xC552},{0x81E9, 0xC553},{0x81EA, 0xD7D4},{0x81EB, 0xC554},{0x81EC, 0xF4AB},
- {0x81ED, 0xB3F4},{0x81EE, 0xC555},{0x81EF, 0xC556},{0x81F0, 0xC557},{0x81F1, 0xC558},{0x81F2, 0xC559},{0x81F3, 0xD6C1},{0x81F4, 0xD6C2},
- {0x81F5, 0xC55A},{0x81F6, 0xC55B},{0x81F7, 0xC55C},{0x81F8, 0xC55D},{0x81F9, 0xC55E},{0x81FA, 0xC55F},{0x81FB, 0xD5E9},{0x81FC, 0xBECA},
- {0x81FD, 0xC560},{0x81FE, 0xF4A7},{0x81FF, 0xC561},{0x8200, 0xD2A8},{0x8201, 0xF4A8},{0x8202, 0xF4A9},{0x8203, 0xC562},{0x8204, 0xF4AA},
- {0x8205, 0xBECB},{0x8206, 0xD3DF},{0x8207, 0xC563},{0x8208, 0xC564},{0x8209, 0xC565},{0x820A, 0xC566},{0x820B, 0xC567},{0x820C, 0xC9E0},
- {0x820D, 0xC9E1},{0x820E, 0xC568},{0x820F, 0xC569},{0x8210, 0xF3C2},{0x8211, 0xC56A},{0x8212, 0xCAE6},{0x8213, 0xC56B},{0x8214, 0xCCF2},
- {0x8215, 0xC56C},{0x8216, 0xC56D},{0x8217, 0xC56E},{0x8218, 0xC56F},{0x8219, 0xC570},{0x821A, 0xC571},{0x821B, 0xE2B6},{0x821C, 0xCBB4},
- {0x821D, 0xC572},{0x821E, 0xCEE8},{0x821F, 0xD6DB},{0x8220, 0xC573},{0x8221, 0xF4AD},{0x8222, 0xF4AE},{0x8223, 0xF4AF},{0x8224, 0xC574},
- {0x8225, 0xC575},{0x8226, 0xC576},{0x8227, 0xC577},{0x8228, 0xF4B2},{0x8229, 0xC578},{0x822A, 0xBABD},{0x822B, 0xF4B3},{0x822C, 0xB0E3},
- {0x822D, 0xF4B0},{0x822E, 0xC579},{0x822F, 0xF4B1},{0x8230, 0xBDA2},{0x8231, 0xB2D5},{0x8232, 0xC57A},{0x8233, 0xF4B6},{0x8234, 0xF4B7},
- {0x8235, 0xB6E6},{0x8236, 0xB2B0},{0x8237, 0xCFCF},{0x8238, 0xF4B4},{0x8239, 0xB4AC},{0x823A, 0xC57B},{0x823B, 0xF4B5},{0x823C, 0xC57C},
- {0x823D, 0xC57D},{0x823E, 0xF4B8},{0x823F, 0xC57E},{0x8240, 0xC580},{0x8241, 0xC581},{0x8242, 0xC582},{0x8243, 0xC583},{0x8244, 0xF4B9},
- {0x8245, 0xC584},{0x8246, 0xC585},{0x8247, 0xCDA7},{0x8248, 0xC586},{0x8249, 0xF4BA},{0x824A, 0xC587},{0x824B, 0xF4BB},{0x824C, 0xC588},
- {0x824D, 0xC589},{0x824E, 0xC58A},{0x824F, 0xF4BC},{0x8250, 0xC58B},{0x8251, 0xC58C},{0x8252, 0xC58D},{0x8253, 0xC58E},{0x8254, 0xC58F},
- {0x8255, 0xC590},{0x8256, 0xC591},{0x8257, 0xC592},{0x8258, 0xCBD2},{0x8259, 0xC593},{0x825A, 0xF4BD},{0x825B, 0xC594},{0x825C, 0xC595},
- {0x825D, 0xC596},{0x825E, 0xC597},{0x825F, 0xF4BE},{0x8260, 0xC598},{0x8261, 0xC599},{0x8262, 0xC59A},{0x8263, 0xC59B},{0x8264, 0xC59C},
- {0x8265, 0xC59D},{0x8266, 0xC59E},{0x8267, 0xC59F},{0x8268, 0xF4BF},{0x8269, 0xC5A0},{0x826A, 0xC640},{0x826B, 0xC641},{0x826C, 0xC642},
- {0x826D, 0xC643},{0x826E, 0xF4DE},{0x826F, 0xC1BC},{0x8270, 0xBCE8},{0x8271, 0xC644},{0x8272, 0xC9AB},{0x8273, 0xD1DE},{0x8274, 0xE5F5},
- {0x8275, 0xC645},{0x8276, 0xC646},{0x8277, 0xC647},{0x8278, 0xC648},{0x8279, 0xDCB3},{0x827A, 0xD2D5},{0x827B, 0xC649},{0x827C, 0xC64A},
- {0x827D, 0xDCB4},{0x827E, 0xB0AC},{0x827F, 0xDCB5},{0x8280, 0xC64B},{0x8281, 0xC64C},{0x8282, 0xBDDA},{0x8283, 0xC64D},{0x8284, 0xDCB9},
- {0x8285, 0xC64E},{0x8286, 0xC64F},{0x8287, 0xC650},{0x8288, 0xD8C2},{0x8289, 0xC651},{0x828A, 0xDCB7},{0x828B, 0xD3F3},{0x828C, 0xC652},
- {0x828D, 0xC9D6},{0x828E, 0xDCBA},{0x828F, 0xDCB6},{0x8290, 0xC653},{0x8291, 0xDCBB},{0x8292, 0xC3A2},{0x8293, 0xC654},{0x8294, 0xC655},
- {0x8295, 0xC656},{0x8296, 0xC657},{0x8297, 0xDCBC},{0x8298, 0xDCC5},{0x8299, 0xDCBD},{0x829A, 0xC658},{0x829B, 0xC659},{0x829C, 0xCEDF},
- {0x829D, 0xD6A5},{0x829E, 0xC65A},{0x829F, 0xDCCF},{0x82A0, 0xC65B},{0x82A1, 0xDCCD},{0x82A2, 0xC65C},{0x82A3, 0xC65D},{0x82A4, 0xDCD2},
- {0x82A5, 0xBDE6},{0x82A6, 0xC2AB},{0x82A7, 0xC65E},{0x82A8, 0xDCB8},{0x82A9, 0xDCCB},{0x82AA, 0xDCCE},{0x82AB, 0xDCBE},{0x82AC, 0xB7D2},
- {0x82AD, 0xB0C5},{0x82AE, 0xDCC7},{0x82AF, 0xD0BE},{0x82B0, 0xDCC1},{0x82B1, 0xBBA8},{0x82B2, 0xC65F},{0x82B3, 0xB7BC},{0x82B4, 0xDCCC},
- {0x82B5, 0xC660},{0x82B6, 0xC661},{0x82B7, 0xDCC6},{0x82B8, 0xDCBF},{0x82B9, 0xC7DB},{0x82BA, 0xC662},{0x82BB, 0xC663},{0x82BC, 0xC664},
- {0x82BD, 0xD1BF},{0x82BE, 0xDCC0},{0x82BF, 0xC665},{0x82C0, 0xC666},{0x82C1, 0xDCCA},{0x82C2, 0xC667},{0x82C3, 0xC668},{0x82C4, 0xDCD0},
- {0x82C5, 0xC669},{0x82C6, 0xC66A},{0x82C7, 0xCEAD},{0x82C8, 0xDCC2},{0x82C9, 0xC66B},{0x82CA, 0xDCC3},{0x82CB, 0xDCC8},{0x82CC, 0xDCC9},
- {0x82CD, 0xB2D4},{0x82CE, 0xDCD1},{0x82CF, 0xCBD5},{0x82D0, 0xC66C},{0x82D1, 0xD4B7},{0x82D2, 0xDCDB},{0x82D3, 0xDCDF},{0x82D4, 0xCCA6},
- {0x82D5, 0xDCE6},{0x82D6, 0xC66D},{0x82D7, 0xC3E7},{0x82D8, 0xDCDC},{0x82D9, 0xC66E},{0x82DA, 0xC66F},{0x82DB, 0xBFC1},{0x82DC, 0xDCD9},
- {0x82DD, 0xC670},{0x82DE, 0xB0FA},{0x82DF, 0xB9B6},{0x82E0, 0xDCE5},{0x82E1, 0xDCD3},{0x82E2, 0xC671},{0x82E3, 0xDCC4},{0x82E4, 0xDCD6},
- {0x82E5, 0xC8F4},{0x82E6, 0xBFE0},{0x82E7, 0xC672},{0x82E8, 0xC673},{0x82E9, 0xC674},{0x82EA, 0xC675},{0x82EB, 0xC9BB},{0x82EC, 0xC676},
- {0x82ED, 0xC677},{0x82EE, 0xC678},{0x82EF, 0xB1BD},{0x82F0, 0xC679},{0x82F1, 0xD3A2},{0x82F2, 0xC67A},{0x82F3, 0xC67B},{0x82F4, 0xDCDA},
- {0x82F5, 0xC67C},{0x82F6, 0xC67D},{0x82F7, 0xDCD5},{0x82F8, 0xC67E},{0x82F9, 0xC6BB},{0x82FA, 0xC680},{0x82FB, 0xDCDE},{0x82FC, 0xC681},
- {0x82FD, 0xC682},{0x82FE, 0xC683},{0x82FF, 0xC684},{0x8300, 0xC685},{0x8301, 0xD7C2},{0x8302, 0xC3AF},{0x8303, 0xB7B6},{0x8304, 0xC7D1},
- {0x8305, 0xC3A9},{0x8306, 0xDCE2},{0x8307, 0xDCD8},{0x8308, 0xDCEB},{0x8309, 0xDCD4},{0x830A, 0xC686},{0x830B, 0xC687},{0x830C, 0xDCDD},
- {0x830D, 0xC688},{0x830E, 0xBEA5},{0x830F, 0xDCD7},{0x8310, 0xC689},{0x8311, 0xDCE0},{0x8312, 0xC68A},{0x8313, 0xC68B},{0x8314, 0xDCE3},
- {0x8315, 0xDCE4},{0x8316, 0xC68C},{0x8317, 0xDCF8},{0x8318, 0xC68D},{0x8319, 0xC68E},{0x831A, 0xDCE1},{0x831B, 0xDDA2},{0x831C, 0xDCE7},
- {0x831D, 0xC68F},{0x831E, 0xC690},{0x831F, 0xC691},{0x8320, 0xC692},{0x8321, 0xC693},{0x8322, 0xC694},{0x8323, 0xC695},{0x8324, 0xC696},
- {0x8325, 0xC697},{0x8326, 0xC698},{0x8327, 0xBCEB},{0x8328, 0xB4C4},{0x8329, 0xC699},{0x832A, 0xC69A},{0x832B, 0xC3A3},{0x832C, 0xB2E7},
- {0x832D, 0xDCFA},{0x832E, 0xC69B},{0x832F, 0xDCF2},{0x8330, 0xC69C},{0x8331, 0xDCEF},{0x8332, 0xC69D},{0x8333, 0xDCFC},{0x8334, 0xDCEE},
- {0x8335, 0xD2F0},{0x8336, 0xB2E8},{0x8337, 0xC69E},{0x8338, 0xC8D7},{0x8339, 0xC8E3},{0x833A, 0xDCFB},{0x833B, 0xC69F},{0x833C, 0xDCED},
- {0x833D, 0xC6A0},{0x833E, 0xC740},{0x833F, 0xC741},{0x8340, 0xDCF7},{0x8341, 0xC742},{0x8342, 0xC743},{0x8343, 0xDCF5},{0x8344, 0xC744},
- {0x8345, 0xC745},{0x8346, 0xBEA3},{0x8347, 0xDCF4},{0x8348, 0xC746},{0x8349, 0xB2DD},{0x834A, 0xC747},{0x834B, 0xC748},{0x834C, 0xC749},
- {0x834D, 0xC74A},{0x834E, 0xC74B},{0x834F, 0xDCF3},{0x8350, 0xBCF6},{0x8351, 0xDCE8},{0x8352, 0xBBC4},{0x8353, 0xC74C},{0x8354, 0xC0F3},
- {0x8355, 0xC74D},{0x8356, 0xC74E},{0x8357, 0xC74F},{0x8358, 0xC750},{0x8359, 0xC751},{0x835A, 0xBCD4},{0x835B, 0xDCE9},{0x835C, 0xDCEA},
- {0x835D, 0xC752},{0x835E, 0xDCF1},{0x835F, 0xDCF6},{0x8360, 0xDCF9},{0x8361, 0xB5B4},{0x8362, 0xC753},{0x8363, 0xC8D9},{0x8364, 0xBBE7},
- {0x8365, 0xDCFE},{0x8366, 0xDCFD},{0x8367, 0xD3AB},{0x8368, 0xDDA1},{0x8369, 0xDDA3},{0x836A, 0xDDA5},{0x836B, 0xD2F1},{0x836C, 0xDDA4},
- {0x836D, 0xDDA6},{0x836E, 0xDDA7},{0x836F, 0xD2A9},{0x8370, 0xC754},{0x8371, 0xC755},{0x8372, 0xC756},{0x8373, 0xC757},{0x8374, 0xC758},
- {0x8375, 0xC759},{0x8376, 0xC75A},{0x8377, 0xBAC9},{0x8378, 0xDDA9},{0x8379, 0xC75B},{0x837A, 0xC75C},{0x837B, 0xDDB6},{0x837C, 0xDDB1},
- {0x837D, 0xDDB4},{0x837E, 0xC75D},{0x837F, 0xC75E},{0x8380, 0xC75F},{0x8381, 0xC760},{0x8382, 0xC761},{0x8383, 0xC762},{0x8384, 0xC763},
- {0x8385, 0xDDB0},{0x8386, 0xC6CE},{0x8387, 0xC764},{0x8388, 0xC765},{0x8389, 0xC0F2},{0x838A, 0xC766},{0x838B, 0xC767},{0x838C, 0xC768},
- {0x838D, 0xC769},{0x838E, 0xC9AF},{0x838F, 0xC76A},{0x8390, 0xC76B},{0x8391, 0xC76C},{0x8392, 0xDCEC},{0x8393, 0xDDAE},{0x8394, 0xC76D},
- {0x8395, 0xC76E},{0x8396, 0xC76F},{0x8397, 0xC770},{0x8398, 0xDDB7},{0x8399, 0xC771},{0x839A, 0xC772},{0x839B, 0xDCF0},{0x839C, 0xDDAF},
- {0x839D, 0xC773},{0x839E, 0xDDB8},{0x839F, 0xC774},{0x83A0, 0xDDAC},{0x83A1, 0xC775},{0x83A2, 0xC776},{0x83A3, 0xC777},{0x83A4, 0xC778},
- {0x83A5, 0xC779},{0x83A6, 0xC77A},{0x83A7, 0xC77B},{0x83A8, 0xDDB9},{0x83A9, 0xDDB3},{0x83AA, 0xDDAD},{0x83AB, 0xC4AA},{0x83AC, 0xC77C},
- {0x83AD, 0xC77D},{0x83AE, 0xC77E},{0x83AF, 0xC780},{0x83B0, 0xDDA8},{0x83B1, 0xC0B3},{0x83B2, 0xC1AB},{0x83B3, 0xDDAA},{0x83B4, 0xDDAB},
- {0x83B5, 0xC781},{0x83B6, 0xDDB2},{0x83B7, 0xBBF1},{0x83B8, 0xDDB5},{0x83B9, 0xD3A8},{0x83BA, 0xDDBA},{0x83BB, 0xC782},{0x83BC, 0xDDBB},
- {0x83BD, 0xC3A7},{0x83BE, 0xC783},{0x83BF, 0xC784},{0x83C0, 0xDDD2},{0x83C1, 0xDDBC},{0x83C2, 0xC785},{0x83C3, 0xC786},{0x83C4, 0xC787},
- {0x83C5, 0xDDD1},{0x83C6, 0xC788},{0x83C7, 0xB9BD},{0x83C8, 0xC789},{0x83C9, 0xC78A},{0x83CA, 0xBED5},{0x83CB, 0xC78B},{0x83CC, 0xBEFA},
- {0x83CD, 0xC78C},{0x83CE, 0xC78D},{0x83CF, 0xBACA},{0x83D0, 0xC78E},{0x83D1, 0xC78F},{0x83D2, 0xC790},{0x83D3, 0xC791},{0x83D4, 0xDDCA},
- {0x83D5, 0xC792},{0x83D6, 0xDDC5},{0x83D7, 0xC793},{0x83D8, 0xDDBF},{0x83D9, 0xC794},{0x83DA, 0xC795},{0x83DB, 0xC796},{0x83DC, 0xB2CB},
- {0x83DD, 0xDDC3},{0x83DE, 0xC797},{0x83DF, 0xDDCB},{0x83E0, 0xB2A4},{0x83E1, 0xDDD5},{0x83E2, 0xC798},{0x83E3, 0xC799},{0x83E4, 0xC79A},
- {0x83E5, 0xDDBE},{0x83E6, 0xC79B},{0x83E7, 0xC79C},{0x83E8, 0xC79D},{0x83E9, 0xC6D0},{0x83EA, 0xDDD0},{0x83EB, 0xC79E},{0x83EC, 0xC79F},
- {0x83ED, 0xC7A0},{0x83EE, 0xC840},{0x83EF, 0xC841},{0x83F0, 0xDDD4},{0x83F1, 0xC1E2},{0x83F2, 0xB7C6},{0x83F3, 0xC842},{0x83F4, 0xC843},
- {0x83F5, 0xC844},{0x83F6, 0xC845},{0x83F7, 0xC846},{0x83F8, 0xDDCE},{0x83F9, 0xDDCF},{0x83FA, 0xC847},{0x83FB, 0xC848},{0x83FC, 0xC849},
- {0x83FD, 0xDDC4},{0x83FE, 0xC84A},{0x83FF, 0xC84B},{0x8400, 0xC84C},{0x8401, 0xDDBD},{0x8402, 0xC84D},{0x8403, 0xDDCD},{0x8404, 0xCCD1},
- {0x8405, 0xC84E},{0x8406, 0xDDC9},{0x8407, 0xC84F},{0x8408, 0xC850},{0x8409, 0xC851},{0x840A, 0xC852},{0x840B, 0xDDC2},{0x840C, 0xC3C8},
- {0x840D, 0xC6BC},{0x840E, 0xCEAE},{0x840F, 0xDDCC},{0x8410, 0xC853},{0x8411, 0xDDC8},{0x8412, 0xC854},{0x8413, 0xC855},{0x8414, 0xC856},
- {0x8415, 0xC857},{0x8416, 0xC858},{0x8417, 0xC859},{0x8418, 0xDDC1},{0x8419, 0xC85A},{0x841A, 0xC85B},{0x841B, 0xC85C},{0x841C, 0xDDC6},
- {0x841D, 0xC2DC},{0x841E, 0xC85D},{0x841F, 0xC85E},{0x8420, 0xC85F},{0x8421, 0xC860},{0x8422, 0xC861},{0x8423, 0xC862},{0x8424, 0xD3A9},
- {0x8425, 0xD3AA},{0x8426, 0xDDD3},{0x8427, 0xCFF4},{0x8428, 0xC8F8},{0x8429, 0xC863},{0x842A, 0xC864},{0x842B, 0xC865},{0x842C, 0xC866},
- {0x842D, 0xC867},{0x842E, 0xC868},{0x842F, 0xC869},{0x8430, 0xC86A},{0x8431, 0xDDE6},{0x8432, 0xC86B},{0x8433, 0xC86C},{0x8434, 0xC86D},
- {0x8435, 0xC86E},{0x8436, 0xC86F},{0x8437, 0xC870},{0x8438, 0xDDC7},{0x8439, 0xC871},{0x843A, 0xC872},{0x843B, 0xC873},{0x843C, 0xDDE0},
- {0x843D, 0xC2E4},{0x843E, 0xC874},{0x843F, 0xC875},{0x8440, 0xC876},{0x8441, 0xC877},{0x8442, 0xC878},{0x8443, 0xC879},{0x8444, 0xC87A},
- {0x8445, 0xC87B},{0x8446, 0xDDE1},{0x8447, 0xC87C},{0x8448, 0xC87D},{0x8449, 0xC87E},{0x844A, 0xC880},{0x844B, 0xC881},{0x844C, 0xC882},
- {0x844D, 0xC883},{0x844E, 0xC884},{0x844F, 0xC885},{0x8450, 0xC886},{0x8451, 0xDDD7},{0x8452, 0xC887},{0x8453, 0xC888},{0x8454, 0xC889},
- {0x8455, 0xC88A},{0x8456, 0xC88B},{0x8457, 0xD6F8},{0x8458, 0xC88C},{0x8459, 0xDDD9},{0x845A, 0xDDD8},{0x845B, 0xB8F0},{0x845C, 0xDDD6},
- {0x845D, 0xC88D},{0x845E, 0xC88E},{0x845F, 0xC88F},{0x8460, 0xC890},{0x8461, 0xC6CF},{0x8462, 0xC891},{0x8463, 0xB6AD},{0x8464, 0xC892},
- {0x8465, 0xC893},{0x8466, 0xC894},{0x8467, 0xC895},{0x8468, 0xC896},{0x8469, 0xDDE2},{0x846A, 0xC897},{0x846B, 0xBAF9},{0x846C, 0xD4E1},
- {0x846D, 0xDDE7},{0x846E, 0xC898},{0x846F, 0xC899},{0x8470, 0xC89A},{0x8471, 0xB4D0},{0x8472, 0xC89B},{0x8473, 0xDDDA},{0x8474, 0xC89C},
- {0x8475, 0xBFFB},{0x8476, 0xDDE3},{0x8477, 0xC89D},{0x8478, 0xDDDF},{0x8479, 0xC89E},{0x847A, 0xDDDD},{0x847B, 0xC89F},{0x847C, 0xC8A0},
- {0x847D, 0xC940},{0x847E, 0xC941},{0x847F, 0xC942},{0x8480, 0xC943},{0x8481, 0xC944},{0x8482, 0xB5D9},{0x8483, 0xC945},{0x8484, 0xC946},
- {0x8485, 0xC947},{0x8486, 0xC948},{0x8487, 0xDDDB},{0x8488, 0xDDDC},{0x8489, 0xDDDE},{0x848A, 0xC949},{0x848B, 0xBDAF},{0x848C, 0xDDE4},
- {0x848D, 0xC94A},{0x848E, 0xDDE5},{0x848F, 0xC94B},{0x8490, 0xC94C},{0x8491, 0xC94D},{0x8492, 0xC94E},{0x8493, 0xC94F},{0x8494, 0xC950},
- {0x8495, 0xC951},{0x8496, 0xC952},{0x8497, 0xDDF5},{0x8498, 0xC953},{0x8499, 0xC3C9},{0x849A, 0xC954},{0x849B, 0xC955},{0x849C, 0xCBE2},
- {0x849D, 0xC956},{0x849E, 0xC957},{0x849F, 0xC958},{0x84A0, 0xC959},{0x84A1, 0xDDF2},{0x84A2, 0xC95A},{0x84A3, 0xC95B},{0x84A4, 0xC95C},
- {0x84A5, 0xC95D},{0x84A6, 0xC95E},{0x84A7, 0xC95F},{0x84A8, 0xC960},{0x84A9, 0xC961},{0x84AA, 0xC962},{0x84AB, 0xC963},{0x84AC, 0xC964},
- {0x84AD, 0xC965},{0x84AE, 0xC966},{0x84AF, 0xD8E1},{0x84B0, 0xC967},{0x84B1, 0xC968},{0x84B2, 0xC6D1},{0x84B3, 0xC969},{0x84B4, 0xDDF4},
- {0x84B5, 0xC96A},{0x84B6, 0xC96B},{0x84B7, 0xC96C},{0x84B8, 0xD5F4},{0x84B9, 0xDDF3},{0x84BA, 0xDDF0},{0x84BB, 0xC96D},{0x84BC, 0xC96E},
- {0x84BD, 0xDDEC},{0x84BE, 0xC96F},{0x84BF, 0xDDEF},{0x84C0, 0xC970},{0x84C1, 0xDDE8},{0x84C2, 0xC971},{0x84C3, 0xC972},{0x84C4, 0xD0EE},
- {0x84C5, 0xC973},{0x84C6, 0xC974},{0x84C7, 0xC975},{0x84C8, 0xC976},{0x84C9, 0xC8D8},{0x84CA, 0xDDEE},{0x84CB, 0xC977},{0x84CC, 0xC978},
- {0x84CD, 0xDDE9},{0x84CE, 0xC979},{0x84CF, 0xC97A},{0x84D0, 0xDDEA},{0x84D1, 0xCBF2},{0x84D2, 0xC97B},{0x84D3, 0xDDED},{0x84D4, 0xC97C},
- {0x84D5, 0xC97D},{0x84D6, 0xB1CD},{0x84D7, 0xC97E},{0x84D8, 0xC980},{0x84D9, 0xC981},{0x84DA, 0xC982},{0x84DB, 0xC983},{0x84DC, 0xC984},
- {0x84DD, 0xC0B6},{0x84DE, 0xC985},{0x84DF, 0xBCBB},{0x84E0, 0xDDF1},{0x84E1, 0xC986},{0x84E2, 0xC987},{0x84E3, 0xDDF7},{0x84E4, 0xC988},
- {0x84E5, 0xDDF6},{0x84E6, 0xDDEB},{0x84E7, 0xC989},{0x84E8, 0xC98A},{0x84E9, 0xC98B},{0x84EA, 0xC98C},{0x84EB, 0xC98D},{0x84EC, 0xC5EE},
- {0x84ED, 0xC98E},{0x84EE, 0xC98F},{0x84EF, 0xC990},{0x84F0, 0xDDFB},{0x84F1, 0xC991},{0x84F2, 0xC992},{0x84F3, 0xC993},{0x84F4, 0xC994},
- {0x84F5, 0xC995},{0x84F6, 0xC996},{0x84F7, 0xC997},{0x84F8, 0xC998},{0x84F9, 0xC999},{0x84FA, 0xC99A},{0x84FB, 0xC99B},{0x84FC, 0xDEA4},
- {0x84FD, 0xC99C},{0x84FE, 0xC99D},{0x84FF, 0xDEA3},{0x8500, 0xC99E},{0x8501, 0xC99F},{0x8502, 0xC9A0},{0x8503, 0xCA40},{0x8504, 0xCA41},
- {0x8505, 0xCA42},{0x8506, 0xCA43},{0x8507, 0xCA44},{0x8508, 0xCA45},{0x8509, 0xCA46},{0x850A, 0xCA47},{0x850B, 0xCA48},{0x850C, 0xDDF8},
- {0x850D, 0xCA49},{0x850E, 0xCA4A},{0x850F, 0xCA4B},{0x8510, 0xCA4C},{0x8511, 0xC3EF},{0x8512, 0xCA4D},{0x8513, 0xC2FB},{0x8514, 0xCA4E},
- {0x8515, 0xCA4F},{0x8516, 0xCA50},{0x8517, 0xD5E1},{0x8518, 0xCA51},{0x8519, 0xCA52},{0x851A, 0xCEB5},{0x851B, 0xCA53},{0x851C, 0xCA54},
- {0x851D, 0xCA55},{0x851E, 0xCA56},{0x851F, 0xDDFD},{0x8520, 0xCA57},{0x8521, 0xB2CC},{0x8522, 0xCA58},{0x8523, 0xCA59},{0x8524, 0xCA5A},
- {0x8525, 0xCA5B},{0x8526, 0xCA5C},{0x8527, 0xCA5D},{0x8528, 0xCA5E},{0x8529, 0xCA5F},{0x852A, 0xCA60},{0x852B, 0xC4E8},{0x852C, 0xCADF},
- {0x852D, 0xCA61},{0x852E, 0xCA62},{0x852F, 0xCA63},{0x8530, 0xCA64},{0x8531, 0xCA65},{0x8532, 0xCA66},{0x8533, 0xCA67},{0x8534, 0xCA68},
- {0x8535, 0xCA69},{0x8536, 0xCA6A},{0x8537, 0xC7BE},{0x8538, 0xDDFA},{0x8539, 0xDDFC},{0x853A, 0xDDFE},{0x853B, 0xDEA2},{0x853C, 0xB0AA},
- {0x853D, 0xB1CE},{0x853E, 0xCA6B},{0x853F, 0xCA6C},{0x8540, 0xCA6D},{0x8541, 0xCA6E},{0x8542, 0xCA6F},{0x8543, 0xDEAC},{0x8544, 0xCA70},
- {0x8545, 0xCA71},{0x8546, 0xCA72},{0x8547, 0xCA73},{0x8548, 0xDEA6},{0x8549, 0xBDB6},{0x854A, 0xC8EF},{0x854B, 0xCA74},{0x854C, 0xCA75},
- {0x854D, 0xCA76},{0x854E, 0xCA77},{0x854F, 0xCA78},{0x8550, 0xCA79},{0x8551, 0xCA7A},{0x8552, 0xCA7B},{0x8553, 0xCA7C},{0x8554, 0xCA7D},
- {0x8555, 0xCA7E},{0x8556, 0xDEA1},{0x8557, 0xCA80},{0x8558, 0xCA81},{0x8559, 0xDEA5},{0x855A, 0xCA82},{0x855B, 0xCA83},{0x855C, 0xCA84},
- {0x855D, 0xCA85},{0x855E, 0xDEA9},{0x855F, 0xCA86},{0x8560, 0xCA87},{0x8561, 0xCA88},{0x8562, 0xCA89},{0x8563, 0xCA8A},{0x8564, 0xDEA8},
- {0x8565, 0xCA8B},{0x8566, 0xCA8C},{0x8567, 0xCA8D},{0x8568, 0xDEA7},{0x8569, 0xCA8E},{0x856A, 0xCA8F},{0x856B, 0xCA90},{0x856C, 0xCA91},
- {0x856D, 0xCA92},{0x856E, 0xCA93},{0x856F, 0xCA94},{0x8570, 0xCA95},{0x8571, 0xCA96},{0x8572, 0xDEAD},{0x8573, 0xCA97},{0x8574, 0xD4CC},
- {0x8575, 0xCA98},{0x8576, 0xCA99},{0x8577, 0xCA9A},{0x8578, 0xCA9B},{0x8579, 0xDEB3},{0x857A, 0xDEAA},{0x857B, 0xDEAE},{0x857C, 0xCA9C},
- {0x857D, 0xCA9D},{0x857E, 0xC0D9},{0x857F, 0xCA9E},{0x8580, 0xCA9F},{0x8581, 0xCAA0},{0x8582, 0xCB40},{0x8583, 0xCB41},{0x8584, 0xB1A1},
- {0x8585, 0xDEB6},{0x8586, 0xCB42},{0x8587, 0xDEB1},{0x8588, 0xCB43},{0x8589, 0xCB44},{0x858A, 0xCB45},{0x858B, 0xCB46},{0x858C, 0xCB47},
- {0x858D, 0xCB48},{0x858E, 0xCB49},{0x858F, 0xDEB2},{0x8590, 0xCB4A},{0x8591, 0xCB4B},{0x8592, 0xCB4C},{0x8593, 0xCB4D},{0x8594, 0xCB4E},
- {0x8595, 0xCB4F},{0x8596, 0xCB50},{0x8597, 0xCB51},{0x8598, 0xCB52},{0x8599, 0xCB53},{0x859A, 0xCB54},{0x859B, 0xD1A6},{0x859C, 0xDEB5},
- {0x859D, 0xCB55},{0x859E, 0xCB56},{0x859F, 0xCB57},{0x85A0, 0xCB58},{0x85A1, 0xCB59},{0x85A2, 0xCB5A},{0x85A3, 0xCB5B},{0x85A4, 0xDEAF},
- {0x85A5, 0xCB5C},{0x85A6, 0xCB5D},{0x85A7, 0xCB5E},{0x85A8, 0xDEB0},{0x85A9, 0xCB5F},{0x85AA, 0xD0BD},{0x85AB, 0xCB60},{0x85AC, 0xCB61},
- {0x85AD, 0xCB62},{0x85AE, 0xDEB4},{0x85AF, 0xCAED},{0x85B0, 0xDEB9},{0x85B1, 0xCB63},{0x85B2, 0xCB64},{0x85B3, 0xCB65},{0x85B4, 0xCB66},
- {0x85B5, 0xCB67},{0x85B6, 0xCB68},{0x85B7, 0xDEB8},{0x85B8, 0xCB69},{0x85B9, 0xDEB7},{0x85BA, 0xCB6A},{0x85BB, 0xCB6B},{0x85BC, 0xCB6C},
- {0x85BD, 0xCB6D},{0x85BE, 0xCB6E},{0x85BF, 0xCB6F},{0x85C0, 0xCB70},{0x85C1, 0xDEBB},{0x85C2, 0xCB71},{0x85C3, 0xCB72},{0x85C4, 0xCB73},
- {0x85C5, 0xCB74},{0x85C6, 0xCB75},{0x85C7, 0xCB76},{0x85C8, 0xCB77},{0x85C9, 0xBDE5},{0x85CA, 0xCB78},{0x85CB, 0xCB79},{0x85CC, 0xCB7A},
- {0x85CD, 0xCB7B},{0x85CE, 0xCB7C},{0x85CF, 0xB2D8},{0x85D0, 0xC3EA},{0x85D1, 0xCB7D},{0x85D2, 0xCB7E},{0x85D3, 0xDEBA},{0x85D4, 0xCB80},
- {0x85D5, 0xC5BA},{0x85D6, 0xCB81},{0x85D7, 0xCB82},{0x85D8, 0xCB83},{0x85D9, 0xCB84},{0x85DA, 0xCB85},{0x85DB, 0xCB86},{0x85DC, 0xDEBC},
- {0x85DD, 0xCB87},{0x85DE, 0xCB88},{0x85DF, 0xCB89},{0x85E0, 0xCB8A},{0x85E1, 0xCB8B},{0x85E2, 0xCB8C},{0x85E3, 0xCB8D},{0x85E4, 0xCCD9},
- {0x85E5, 0xCB8E},{0x85E6, 0xCB8F},{0x85E7, 0xCB90},{0x85E8, 0xCB91},{0x85E9, 0xB7AA},{0x85EA, 0xCB92},{0x85EB, 0xCB93},{0x85EC, 0xCB94},
- {0x85ED, 0xCB95},{0x85EE, 0xCB96},{0x85EF, 0xCB97},{0x85F0, 0xCB98},{0x85F1, 0xCB99},{0x85F2, 0xCB9A},{0x85F3, 0xCB9B},{0x85F4, 0xCB9C},
- {0x85F5, 0xCB9D},{0x85F6, 0xCB9E},{0x85F7, 0xCB9F},{0x85F8, 0xCBA0},{0x85F9, 0xCC40},{0x85FA, 0xCC41},{0x85FB, 0xD4E5},{0x85FC, 0xCC42},
- {0x85FD, 0xCC43},{0x85FE, 0xCC44},{0x85FF, 0xDEBD},{0x8600, 0xCC45},{0x8601, 0xCC46},{0x8602, 0xCC47},{0x8603, 0xCC48},{0x8604, 0xCC49},
- {0x8605, 0xDEBF},{0x8606, 0xCC4A},{0x8607, 0xCC4B},{0x8608, 0xCC4C},{0x8609, 0xCC4D},{0x860A, 0xCC4E},{0x860B, 0xCC4F},{0x860C, 0xCC50},
- {0x860D, 0xCC51},{0x860E, 0xCC52},{0x860F, 0xCC53},{0x8610, 0xCC54},{0x8611, 0xC4A2},{0x8612, 0xCC55},{0x8613, 0xCC56},{0x8614, 0xCC57},
- {0x8615, 0xCC58},{0x8616, 0xDEC1},{0x8617, 0xCC59},{0x8618, 0xCC5A},{0x8619, 0xCC5B},{0x861A, 0xCC5C},{0x861B, 0xCC5D},{0x861C, 0xCC5E},
- {0x861D, 0xCC5F},{0x861E, 0xCC60},{0x861F, 0xCC61},{0x8620, 0xCC62},{0x8621, 0xCC63},{0x8622, 0xCC64},{0x8623, 0xCC65},{0x8624, 0xCC66},
- {0x8625, 0xCC67},{0x8626, 0xCC68},{0x8627, 0xDEBE},{0x8628, 0xCC69},{0x8629, 0xDEC0},{0x862A, 0xCC6A},{0x862B, 0xCC6B},{0x862C, 0xCC6C},
- {0x862D, 0xCC6D},{0x862E, 0xCC6E},{0x862F, 0xCC6F},{0x8630, 0xCC70},{0x8631, 0xCC71},{0x8632, 0xCC72},{0x8633, 0xCC73},{0x8634, 0xCC74},
- {0x8635, 0xCC75},{0x8636, 0xCC76},{0x8637, 0xCC77},{0x8638, 0xD5BA},{0x8639, 0xCC78},{0x863A, 0xCC79},{0x863B, 0xCC7A},{0x863C, 0xDEC2},
- {0x863D, 0xCC7B},{0x863E, 0xCC7C},{0x863F, 0xCC7D},{0x8640, 0xCC7E},{0x8641, 0xCC80},{0x8642, 0xCC81},{0x8643, 0xCC82},{0x8644, 0xCC83},
- {0x8645, 0xCC84},{0x8646, 0xCC85},{0x8647, 0xCC86},{0x8648, 0xCC87},{0x8649, 0xCC88},{0x864A, 0xCC89},{0x864B, 0xCC8A},{0x864C, 0xCC8B},
- {0x864D, 0xF2AE},{0x864E, 0xBBA2},{0x864F, 0xC2B2},{0x8650, 0xC5B0},{0x8651, 0xC2C7},{0x8652, 0xCC8C},{0x8653, 0xCC8D},{0x8654, 0xF2AF},
- {0x8655, 0xCC8E},{0x8656, 0xCC8F},{0x8657, 0xCC90},{0x8658, 0xCC91},{0x8659, 0xCC92},{0x865A, 0xD0E9},{0x865B, 0xCC93},{0x865C, 0xCC94},
- {0x865D, 0xCC95},{0x865E, 0xD3DD},{0x865F, 0xCC96},{0x8660, 0xCC97},{0x8661, 0xCC98},{0x8662, 0xEBBD},{0x8663, 0xCC99},{0x8664, 0xCC9A},
- {0x8665, 0xCC9B},{0x8666, 0xCC9C},{0x8667, 0xCC9D},{0x8668, 0xCC9E},{0x8669, 0xCC9F},{0x866A, 0xCCA0},{0x866B, 0xB3E6},{0x866C, 0xF2B0},
- {0x866D, 0xCD40},{0x866E, 0xF2B1},{0x866F, 0xCD41},{0x8670, 0xCD42},{0x8671, 0xCAAD},{0x8672, 0xCD43},{0x8673, 0xCD44},{0x8674, 0xCD45},
- {0x8675, 0xCD46},{0x8676, 0xCD47},{0x8677, 0xCD48},{0x8678, 0xCD49},{0x8679, 0xBAE7},{0x867A, 0xF2B3},{0x867B, 0xF2B5},{0x867C, 0xF2B4},
- {0x867D, 0xCBE4},{0x867E, 0xCFBA},{0x867F, 0xF2B2},{0x8680, 0xCAB4},{0x8681, 0xD2CF},{0x8682, 0xC2EC},{0x8683, 0xCD4A},{0x8684, 0xCD4B},
- {0x8685, 0xCD4C},{0x8686, 0xCD4D},{0x8687, 0xCD4E},{0x8688, 0xCD4F},{0x8689, 0xCD50},{0x868A, 0xCEC3},{0x868B, 0xF2B8},{0x868C, 0xB0F6},
- {0x868D, 0xF2B7},{0x868E, 0xCD51},{0x868F, 0xCD52},{0x8690, 0xCD53},{0x8691, 0xCD54},{0x8692, 0xCD55},{0x8693, 0xF2BE},{0x8694, 0xCD56},
- {0x8695, 0xB2CF},{0x8696, 0xCD57},{0x8697, 0xCD58},{0x8698, 0xCD59},{0x8699, 0xCD5A},{0x869A, 0xCD5B},{0x869B, 0xCD5C},{0x869C, 0xD1C1},
- {0x869D, 0xF2BA},{0x869E, 0xCD5D},{0x869F, 0xCD5E},{0x86A0, 0xCD5F},{0x86A1, 0xCD60},{0x86A2, 0xCD61},{0x86A3, 0xF2BC},{0x86A4, 0xD4E9},
- {0x86A5, 0xCD62},{0x86A6, 0xCD63},{0x86A7, 0xF2BB},{0x86A8, 0xF2B6},{0x86A9, 0xF2BF},{0x86AA, 0xF2BD},{0x86AB, 0xCD64},{0x86AC, 0xF2B9},
- {0x86AD, 0xCD65},{0x86AE, 0xCD66},{0x86AF, 0xF2C7},{0x86B0, 0xF2C4},{0x86B1, 0xF2C6},{0x86B2, 0xCD67},{0x86B3, 0xCD68},{0x86B4, 0xF2CA},
- {0x86B5, 0xF2C2},{0x86B6, 0xF2C0},{0x86B7, 0xCD69},{0x86B8, 0xCD6A},{0x86B9, 0xCD6B},{0x86BA, 0xF2C5},{0x86BB, 0xCD6C},{0x86BC, 0xCD6D},
- {0x86BD, 0xCD6E},{0x86BE, 0xCD6F},{0x86BF, 0xCD70},{0x86C0, 0xD6FB},{0x86C1, 0xCD71},{0x86C2, 0xCD72},{0x86C3, 0xCD73},{0x86C4, 0xF2C1},
- {0x86C5, 0xCD74},{0x86C6, 0xC7F9},{0x86C7, 0xC9DF},{0x86C8, 0xCD75},{0x86C9, 0xF2C8},{0x86CA, 0xB9C6},{0x86CB, 0xB5B0},{0x86CC, 0xCD76},
- {0x86CD, 0xCD77},{0x86CE, 0xF2C3},{0x86CF, 0xF2C9},{0x86D0, 0xF2D0},{0x86D1, 0xF2D6},{0x86D2, 0xCD78},{0x86D3, 0xCD79},{0x86D4, 0xBBD7},
- {0x86D5, 0xCD7A},{0x86D6, 0xCD7B},{0x86D7, 0xCD7C},{0x86D8, 0xF2D5},{0x86D9, 0xCDDC},{0x86DA, 0xCD7D},{0x86DB, 0xD6EB},{0x86DC, 0xCD7E},
- {0x86DD, 0xCD80},{0x86DE, 0xF2D2},{0x86DF, 0xF2D4},{0x86E0, 0xCD81},{0x86E1, 0xCD82},{0x86E2, 0xCD83},{0x86E3, 0xCD84},{0x86E4, 0xB8F2},
- {0x86E5, 0xCD85},{0x86E6, 0xCD86},{0x86E7, 0xCD87},{0x86E8, 0xCD88},{0x86E9, 0xF2CB},{0x86EA, 0xCD89},{0x86EB, 0xCD8A},{0x86EC, 0xCD8B},
- {0x86ED, 0xF2CE},{0x86EE, 0xC2F9},{0x86EF, 0xCD8C},{0x86F0, 0xD5DD},{0x86F1, 0xF2CC},{0x86F2, 0xF2CD},{0x86F3, 0xF2CF},{0x86F4, 0xF2D3},
- {0x86F5, 0xCD8D},{0x86F6, 0xCD8E},{0x86F7, 0xCD8F},{0x86F8, 0xF2D9},{0x86F9, 0xD3BC},{0x86FA, 0xCD90},{0x86FB, 0xCD91},{0x86FC, 0xCD92},
- {0x86FD, 0xCD93},{0x86FE, 0xB6EA},{0x86FF, 0xCD94},{0x8700, 0xCAF1},{0x8701, 0xCD95},{0x8702, 0xB7E4},{0x8703, 0xF2D7},{0x8704, 0xCD96},
- {0x8705, 0xCD97},{0x8706, 0xCD98},{0x8707, 0xF2D8},{0x8708, 0xF2DA},{0x8709, 0xF2DD},{0x870A, 0xF2DB},{0x870B, 0xCD99},{0x870C, 0xCD9A},
- {0x870D, 0xF2DC},{0x870E, 0xCD9B},{0x870F, 0xCD9C},{0x8710, 0xCD9D},{0x8711, 0xCD9E},{0x8712, 0xD1D1},{0x8713, 0xF2D1},{0x8714, 0xCD9F},
- {0x8715, 0xCDC9},{0x8716, 0xCDA0},{0x8717, 0xCECF},{0x8718, 0xD6A9},{0x8719, 0xCE40},{0x871A, 0xF2E3},{0x871B, 0xCE41},{0x871C, 0xC3DB},
- {0x871D, 0xCE42},{0x871E, 0xF2E0},{0x871F, 0xCE43},{0x8720, 0xCE44},{0x8721, 0xC0AF},{0x8722, 0xF2EC},{0x8723, 0xF2DE},{0x8724, 0xCE45},
- {0x8725, 0xF2E1},{0x8726, 0xCE46},{0x8727, 0xCE47},{0x8728, 0xCE48},{0x8729, 0xF2E8},{0x872A, 0xCE49},{0x872B, 0xCE4A},{0x872C, 0xCE4B},
- {0x872D, 0xCE4C},{0x872E, 0xF2E2},{0x872F, 0xCE4D},{0x8730, 0xCE4E},{0x8731, 0xF2E7},{0x8732, 0xCE4F},{0x8733, 0xCE50},{0x8734, 0xF2E6},
- {0x8735, 0xCE51},{0x8736, 0xCE52},{0x8737, 0xF2E9},{0x8738, 0xCE53},{0x8739, 0xCE54},{0x873A, 0xCE55},{0x873B, 0xF2DF},{0x873C, 0xCE56},
- {0x873D, 0xCE57},{0x873E, 0xF2E4},{0x873F, 0xF2EA},{0x8740, 0xCE58},{0x8741, 0xCE59},{0x8742, 0xCE5A},{0x8743, 0xCE5B},{0x8744, 0xCE5C},
- {0x8745, 0xCE5D},{0x8746, 0xCE5E},{0x8747, 0xD3AC},{0x8748, 0xF2E5},{0x8749, 0xB2F5},{0x874A, 0xCE5F},{0x874B, 0xCE60},{0x874C, 0xF2F2},
- {0x874D, 0xCE61},{0x874E, 0xD0AB},{0x874F, 0xCE62},{0x8750, 0xCE63},{0x8751, 0xCE64},{0x8752, 0xCE65},{0x8753, 0xF2F5},{0x8754, 0xCE66},
- {0x8755, 0xCE67},{0x8756, 0xCE68},{0x8757, 0xBBC8},{0x8758, 0xCE69},{0x8759, 0xF2F9},{0x875A, 0xCE6A},{0x875B, 0xCE6B},{0x875C, 0xCE6C},
- {0x875D, 0xCE6D},{0x875E, 0xCE6E},{0x875F, 0xCE6F},{0x8760, 0xF2F0},{0x8761, 0xCE70},{0x8762, 0xCE71},{0x8763, 0xF2F6},{0x8764, 0xF2F8},
- {0x8765, 0xF2FA},{0x8766, 0xCE72},{0x8767, 0xCE73},{0x8768, 0xCE74},{0x8769, 0xCE75},{0x876A, 0xCE76},{0x876B, 0xCE77},{0x876C, 0xCE78},
- {0x876D, 0xCE79},{0x876E, 0xF2F3},{0x876F, 0xCE7A},{0x8770, 0xF2F1},{0x8771, 0xCE7B},{0x8772, 0xCE7C},{0x8773, 0xCE7D},{0x8774, 0xBAFB},
- {0x8775, 0xCE7E},{0x8776, 0xB5FB},{0x8777, 0xCE80},{0x8778, 0xCE81},{0x8779, 0xCE82},{0x877A, 0xCE83},{0x877B, 0xF2EF},{0x877C, 0xF2F7},
- {0x877D, 0xF2ED},{0x877E, 0xF2EE},{0x877F, 0xCE84},{0x8780, 0xCE85},{0x8781, 0xCE86},{0x8782, 0xF2EB},{0x8783, 0xF3A6},{0x8784, 0xCE87},
- {0x8785, 0xF3A3},{0x8786, 0xCE88},{0x8787, 0xCE89},{0x8788, 0xF3A2},{0x8789, 0xCE8A},{0x878A, 0xCE8B},{0x878B, 0xF2F4},{0x878C, 0xCE8C},
- {0x878D, 0xC8DA},{0x878E, 0xCE8D},{0x878F, 0xCE8E},{0x8790, 0xCE8F},{0x8791, 0xCE90},{0x8792, 0xCE91},{0x8793, 0xF2FB},{0x8794, 0xCE92},
- {0x8795, 0xCE93},{0x8796, 0xCE94},{0x8797, 0xF3A5},{0x8798, 0xCE95},{0x8799, 0xCE96},{0x879A, 0xCE97},{0x879B, 0xCE98},{0x879C, 0xCE99},
- {0x879D, 0xCE9A},{0x879E, 0xCE9B},{0x879F, 0xC3F8},{0x87A0, 0xCE9C},{0x87A1, 0xCE9D},{0x87A2, 0xCE9E},{0x87A3, 0xCE9F},{0x87A4, 0xCEA0},
- {0x87A5, 0xCF40},{0x87A6, 0xCF41},{0x87A7, 0xCF42},{0x87A8, 0xF2FD},{0x87A9, 0xCF43},{0x87AA, 0xCF44},{0x87AB, 0xF3A7},{0x87AC, 0xF3A9},
- {0x87AD, 0xF3A4},{0x87AE, 0xCF45},{0x87AF, 0xF2FC},{0x87B0, 0xCF46},{0x87B1, 0xCF47},{0x87B2, 0xCF48},{0x87B3, 0xF3AB},{0x87B4, 0xCF49},
- {0x87B5, 0xF3AA},{0x87B6, 0xCF4A},{0x87B7, 0xCF4B},{0x87B8, 0xCF4C},{0x87B9, 0xCF4D},{0x87BA, 0xC2DD},{0x87BB, 0xCF4E},{0x87BC, 0xCF4F},
- {0x87BD, 0xF3AE},{0x87BE, 0xCF50},{0x87BF, 0xCF51},{0x87C0, 0xF3B0},{0x87C1, 0xCF52},{0x87C2, 0xCF53},{0x87C3, 0xCF54},{0x87C4, 0xCF55},
- {0x87C5, 0xCF56},{0x87C6, 0xF3A1},{0x87C7, 0xCF57},{0x87C8, 0xCF58},{0x87C9, 0xCF59},{0x87CA, 0xF3B1},{0x87CB, 0xF3AC},{0x87CC, 0xCF5A},
- {0x87CD, 0xCF5B},{0x87CE, 0xCF5C},{0x87CF, 0xCF5D},{0x87D0, 0xCF5E},{0x87D1, 0xF3AF},{0x87D2, 0xF2FE},{0x87D3, 0xF3AD},{0x87D4, 0xCF5F},
- {0x87D5, 0xCF60},{0x87D6, 0xCF61},{0x87D7, 0xCF62},{0x87D8, 0xCF63},{0x87D9, 0xCF64},{0x87DA, 0xCF65},{0x87DB, 0xF3B2},{0x87DC, 0xCF66},
- {0x87DD, 0xCF67},{0x87DE, 0xCF68},{0x87DF, 0xCF69},{0x87E0, 0xF3B4},{0x87E1, 0xCF6A},{0x87E2, 0xCF6B},{0x87E3, 0xCF6C},{0x87E4, 0xCF6D},
- {0x87E5, 0xF3A8},{0x87E6, 0xCF6E},{0x87E7, 0xCF6F},{0x87E8, 0xCF70},{0x87E9, 0xCF71},{0x87EA, 0xF3B3},{0x87EB, 0xCF72},{0x87EC, 0xCF73},
- {0x87ED, 0xCF74},{0x87EE, 0xF3B5},{0x87EF, 0xCF75},{0x87F0, 0xCF76},{0x87F1, 0xCF77},{0x87F2, 0xCF78},{0x87F3, 0xCF79},{0x87F4, 0xCF7A},
- {0x87F5, 0xCF7B},{0x87F6, 0xCF7C},{0x87F7, 0xCF7D},{0x87F8, 0xCF7E},{0x87F9, 0xD0B7},{0x87FA, 0xCF80},{0x87FB, 0xCF81},{0x87FC, 0xCF82},
- {0x87FD, 0xCF83},{0x87FE, 0xF3B8},{0x87FF, 0xCF84},{0x8800, 0xCF85},{0x8801, 0xCF86},{0x8802, 0xCF87},{0x8803, 0xD9F9},{0x8804, 0xCF88},
- {0x8805, 0xCF89},{0x8806, 0xCF8A},{0x8807, 0xCF8B},{0x8808, 0xCF8C},{0x8809, 0xCF8D},{0x880A, 0xF3B9},{0x880B, 0xCF8E},{0x880C, 0xCF8F},
- {0x880D, 0xCF90},{0x880E, 0xCF91},{0x880F, 0xCF92},{0x8810, 0xCF93},{0x8811, 0xCF94},{0x8812, 0xCF95},{0x8813, 0xF3B7},{0x8814, 0xCF96},
- {0x8815, 0xC8E4},{0x8816, 0xF3B6},{0x8817, 0xCF97},{0x8818, 0xCF98},{0x8819, 0xCF99},{0x881A, 0xCF9A},{0x881B, 0xF3BA},{0x881C, 0xCF9B},
- {0x881D, 0xCF9C},{0x881E, 0xCF9D},{0x881F, 0xCF9E},{0x8820, 0xCF9F},{0x8821, 0xF3BB},{0x8822, 0xB4C0},{0x8823, 0xCFA0},{0x8824, 0xD040},
- {0x8825, 0xD041},{0x8826, 0xD042},{0x8827, 0xD043},{0x8828, 0xD044},{0x8829, 0xD045},{0x882A, 0xD046},{0x882B, 0xD047},{0x882C, 0xD048},
- {0x882D, 0xD049},{0x882E, 0xD04A},{0x882F, 0xD04B},{0x8830, 0xD04C},{0x8831, 0xD04D},{0x8832, 0xEEC3},{0x8833, 0xD04E},{0x8834, 0xD04F},
- {0x8835, 0xD050},{0x8836, 0xD051},{0x8837, 0xD052},{0x8838, 0xD053},{0x8839, 0xF3BC},{0x883A, 0xD054},{0x883B, 0xD055},{0x883C, 0xF3BD},
- {0x883D, 0xD056},{0x883E, 0xD057},{0x883F, 0xD058},{0x8840, 0xD1AA},{0x8841, 0xD059},{0x8842, 0xD05A},{0x8843, 0xD05B},{0x8844, 0xF4AC},
- {0x8845, 0xD0C6},{0x8846, 0xD05C},{0x8847, 0xD05D},{0x8848, 0xD05E},{0x8849, 0xD05F},{0x884A, 0xD060},{0x884B, 0xD061},{0x884C, 0xD0D0},
- {0x884D, 0xD1DC},{0x884E, 0xD062},{0x884F, 0xD063},{0x8850, 0xD064},{0x8851, 0xD065},{0x8852, 0xD066},{0x8853, 0xD067},{0x8854, 0xCFCE},
- {0x8855, 0xD068},{0x8856, 0xD069},{0x8857, 0xBDD6},{0x8858, 0xD06A},{0x8859, 0xD1C3},{0x885A, 0xD06B},{0x885B, 0xD06C},{0x885C, 0xD06D},
- {0x885D, 0xD06E},{0x885E, 0xD06F},{0x885F, 0xD070},{0x8860, 0xD071},{0x8861, 0xBAE2},{0x8862, 0xE1E9},{0x8863, 0xD2C2},{0x8864, 0xF1C2},
- {0x8865, 0xB2B9},{0x8866, 0xD072},{0x8867, 0xD073},{0x8868, 0xB1ED},{0x8869, 0xF1C3},{0x886A, 0xD074},{0x886B, 0xC9C0},{0x886C, 0xB3C4},
- {0x886D, 0xD075},{0x886E, 0xD9F2},{0x886F, 0xD076},{0x8870, 0xCBA5},{0x8871, 0xD077},{0x8872, 0xF1C4},{0x8873, 0xD078},{0x8874, 0xD079},
- {0x8875, 0xD07A},{0x8876, 0xD07B},{0x8877, 0xD6D4},{0x8878, 0xD07C},{0x8879, 0xD07D},{0x887A, 0xD07E},{0x887B, 0xD080},{0x887C, 0xD081},
- {0x887D, 0xF1C5},{0x887E, 0xF4C0},{0x887F, 0xF1C6},{0x8880, 0xD082},{0x8881, 0xD4AC},{0x8882, 0xF1C7},{0x8883, 0xD083},{0x8884, 0xB0C0},
- {0x8885, 0xF4C1},{0x8886, 0xD084},{0x8887, 0xD085},{0x8888, 0xF4C2},{0x8889, 0xD086},{0x888A, 0xD087},{0x888B, 0xB4FC},{0x888C, 0xD088},
- {0x888D, 0xC5DB},{0x888E, 0xD089},{0x888F, 0xD08A},{0x8890, 0xD08B},{0x8891, 0xD08C},{0x8892, 0xCCBB},{0x8893, 0xD08D},{0x8894, 0xD08E},
- {0x8895, 0xD08F},{0x8896, 0xD0E4},{0x8897, 0xD090},{0x8898, 0xD091},{0x8899, 0xD092},{0x889A, 0xD093},{0x889B, 0xD094},{0x889C, 0xCDE0},
- {0x889D, 0xD095},{0x889E, 0xD096},{0x889F, 0xD097},{0x88A0, 0xD098},{0x88A1, 0xD099},{0x88A2, 0xF1C8},{0x88A3, 0xD09A},{0x88A4, 0xD9F3},
- {0x88A5, 0xD09B},{0x88A6, 0xD09C},{0x88A7, 0xD09D},{0x88A8, 0xD09E},{0x88A9, 0xD09F},{0x88AA, 0xD0A0},{0x88AB, 0xB1BB},{0x88AC, 0xD140},
- {0x88AD, 0xCFAE},{0x88AE, 0xD141},{0x88AF, 0xD142},{0x88B0, 0xD143},{0x88B1, 0xB8A4},{0x88B2, 0xD144},{0x88B3, 0xD145},{0x88B4, 0xD146},
- {0x88B5, 0xD147},{0x88B6, 0xD148},{0x88B7, 0xF1CA},{0x88B8, 0xD149},{0x88B9, 0xD14A},{0x88BA, 0xD14B},{0x88BB, 0xD14C},{0x88BC, 0xF1CB},
- {0x88BD, 0xD14D},{0x88BE, 0xD14E},{0x88BF, 0xD14F},{0x88C0, 0xD150},{0x88C1, 0xB2C3},{0x88C2, 0xC1D1},{0x88C3, 0xD151},{0x88C4, 0xD152},
- {0x88C5, 0xD7B0},{0x88C6, 0xF1C9},{0x88C7, 0xD153},{0x88C8, 0xD154},{0x88C9, 0xF1CC},{0x88CA, 0xD155},{0x88CB, 0xD156},{0x88CC, 0xD157},
- {0x88CD, 0xD158},{0x88CE, 0xF1CE},{0x88CF, 0xD159},{0x88D0, 0xD15A},{0x88D1, 0xD15B},{0x88D2, 0xD9F6},{0x88D3, 0xD15C},{0x88D4, 0xD2E1},
- {0x88D5, 0xD4A3},{0x88D6, 0xD15D},{0x88D7, 0xD15E},{0x88D8, 0xF4C3},{0x88D9, 0xC8B9},{0x88DA, 0xD15F},{0x88DB, 0xD160},{0x88DC, 0xD161},
- {0x88DD, 0xD162},{0x88DE, 0xD163},{0x88DF, 0xF4C4},{0x88E0, 0xD164},{0x88E1, 0xD165},{0x88E2, 0xF1CD},{0x88E3, 0xF1CF},{0x88E4, 0xBFE3},
- {0x88E5, 0xF1D0},{0x88E6, 0xD166},{0x88E7, 0xD167},{0x88E8, 0xF1D4},{0x88E9, 0xD168},{0x88EA, 0xD169},{0x88EB, 0xD16A},{0x88EC, 0xD16B},
- {0x88ED, 0xD16C},{0x88EE, 0xD16D},{0x88EF, 0xD16E},{0x88F0, 0xF1D6},{0x88F1, 0xF1D1},{0x88F2, 0xD16F},{0x88F3, 0xC9D1},{0x88F4, 0xC5E1},
- {0x88F5, 0xD170},{0x88F6, 0xD171},{0x88F7, 0xD172},{0x88F8, 0xC2E3},{0x88F9, 0xB9FC},{0x88FA, 0xD173},{0x88FB, 0xD174},{0x88FC, 0xF1D3},
- {0x88FD, 0xD175},{0x88FE, 0xF1D5},{0x88FF, 0xD176},{0x8900, 0xD177},{0x8901, 0xD178},{0x8902, 0xB9D3},{0x8903, 0xD179},{0x8904, 0xD17A},
- {0x8905, 0xD17B},{0x8906, 0xD17C},{0x8907, 0xD17D},{0x8908, 0xD17E},{0x8909, 0xD180},{0x890A, 0xF1DB},{0x890B, 0xD181},{0x890C, 0xD182},
- {0x890D, 0xD183},{0x890E, 0xD184},{0x890F, 0xD185},{0x8910, 0xBAD6},{0x8911, 0xD186},{0x8912, 0xB0FD},{0x8913, 0xF1D9},{0x8914, 0xD187},
- {0x8915, 0xD188},{0x8916, 0xD189},{0x8917, 0xD18A},{0x8918, 0xD18B},{0x8919, 0xF1D8},{0x891A, 0xF1D2},{0x891B, 0xF1DA},{0x891C, 0xD18C},
- {0x891D, 0xD18D},{0x891E, 0xD18E},{0x891F, 0xD18F},{0x8920, 0xD190},{0x8921, 0xF1D7},{0x8922, 0xD191},{0x8923, 0xD192},{0x8924, 0xD193},
- {0x8925, 0xC8EC},{0x8926, 0xD194},{0x8927, 0xD195},{0x8928, 0xD196},{0x8929, 0xD197},{0x892A, 0xCDCA},{0x892B, 0xF1DD},{0x892C, 0xD198},
- {0x892D, 0xD199},{0x892E, 0xD19A},{0x892F, 0xD19B},{0x8930, 0xE5BD},{0x8931, 0xD19C},{0x8932, 0xD19D},{0x8933, 0xD19E},{0x8934, 0xF1DC},
- {0x8935, 0xD19F},{0x8936, 0xF1DE},{0x8937, 0xD1A0},{0x8938, 0xD240},{0x8939, 0xD241},{0x893A, 0xD242},{0x893B, 0xD243},{0x893C, 0xD244},
- {0x893D, 0xD245},{0x893E, 0xD246},{0x893F, 0xD247},{0x8940, 0xD248},{0x8941, 0xF1DF},{0x8942, 0xD249},{0x8943, 0xD24A},{0x8944, 0xCFE5},
- {0x8945, 0xD24B},{0x8946, 0xD24C},{0x8947, 0xD24D},{0x8948, 0xD24E},{0x8949, 0xD24F},{0x894A, 0xD250},{0x894B, 0xD251},{0x894C, 0xD252},
- {0x894D, 0xD253},{0x894E, 0xD254},{0x894F, 0xD255},{0x8950, 0xD256},{0x8951, 0xD257},{0x8952, 0xD258},{0x8953, 0xD259},{0x8954, 0xD25A},
- {0x8955, 0xD25B},{0x8956, 0xD25C},{0x8957, 0xD25D},{0x8958, 0xD25E},{0x8959, 0xD25F},{0x895A, 0xD260},{0x895B, 0xD261},{0x895C, 0xD262},
- {0x895D, 0xD263},{0x895E, 0xF4C5},{0x895F, 0xBDF3},{0x8960, 0xD264},{0x8961, 0xD265},{0x8962, 0xD266},{0x8963, 0xD267},{0x8964, 0xD268},
- {0x8965, 0xD269},{0x8966, 0xF1E0},{0x8967, 0xD26A},{0x8968, 0xD26B},{0x8969, 0xD26C},{0x896A, 0xD26D},{0x896B, 0xD26E},{0x896C, 0xD26F},
- {0x896D, 0xD270},{0x896E, 0xD271},{0x896F, 0xD272},{0x8970, 0xD273},{0x8971, 0xD274},{0x8972, 0xD275},{0x8973, 0xD276},{0x8974, 0xD277},
- {0x8975, 0xD278},{0x8976, 0xD279},{0x8977, 0xD27A},{0x8978, 0xD27B},{0x8979, 0xD27C},{0x897A, 0xD27D},{0x897B, 0xF1E1},{0x897C, 0xD27E},
- {0x897D, 0xD280},{0x897E, 0xD281},{0x897F, 0xCEF7},{0x8980, 0xD282},{0x8981, 0xD2AA},{0x8982, 0xD283},{0x8983, 0xF1FB},{0x8984, 0xD284},
- {0x8985, 0xD285},{0x8986, 0xB8B2},{0x8987, 0xD286},{0x8988, 0xD287},{0x8989, 0xD288},{0x898A, 0xD289},{0x898B, 0xD28A},{0x898C, 0xD28B},
- {0x898D, 0xD28C},{0x898E, 0xD28D},{0x898F, 0xD28E},{0x8990, 0xD28F},{0x8991, 0xD290},{0x8992, 0xD291},{0x8993, 0xD292},{0x8994, 0xD293},
- {0x8995, 0xD294},{0x8996, 0xD295},{0x8997, 0xD296},{0x8998, 0xD297},{0x8999, 0xD298},{0x899A, 0xD299},{0x899B, 0xD29A},{0x899C, 0xD29B},
- {0x899D, 0xD29C},{0x899E, 0xD29D},{0x899F, 0xD29E},{0x89A0, 0xD29F},{0x89A1, 0xD2A0},{0x89A2, 0xD340},{0x89A3, 0xD341},{0x89A4, 0xD342},
- {0x89A5, 0xD343},{0x89A6, 0xD344},{0x89A7, 0xD345},{0x89A8, 0xD346},{0x89A9, 0xD347},{0x89AA, 0xD348},{0x89AB, 0xD349},{0x89AC, 0xD34A},
- {0x89AD, 0xD34B},{0x89AE, 0xD34C},{0x89AF, 0xD34D},{0x89B0, 0xD34E},{0x89B1, 0xD34F},{0x89B2, 0xD350},{0x89B3, 0xD351},{0x89B4, 0xD352},
- {0x89B5, 0xD353},{0x89B6, 0xD354},{0x89B7, 0xD355},{0x89B8, 0xD356},{0x89B9, 0xD357},{0x89BA, 0xD358},{0x89BB, 0xD359},{0x89BC, 0xD35A},
- {0x89BD, 0xD35B},{0x89BE, 0xD35C},{0x89BF, 0xD35D},{0x89C0, 0xD35E},{0x89C1, 0xBCFB},{0x89C2, 0xB9DB},{0x89C3, 0xD35F},{0x89C4, 0xB9E6},
- {0x89C5, 0xC3D9},{0x89C6, 0xCAD3},{0x89C7, 0xEAE8},{0x89C8, 0xC0C0},{0x89C9, 0xBEF5},{0x89CA, 0xEAE9},{0x89CB, 0xEAEA},{0x89CC, 0xEAEB},
- {0x89CD, 0xD360},{0x89CE, 0xEAEC},{0x89CF, 0xEAED},{0x89D0, 0xEAEE},{0x89D1, 0xEAEF},{0x89D2, 0xBDC7},{0x89D3, 0xD361},{0x89D4, 0xD362},
- {0x89D5, 0xD363},{0x89D6, 0xF5FB},{0x89D7, 0xD364},{0x89D8, 0xD365},{0x89D9, 0xD366},{0x89DA, 0xF5FD},{0x89DB, 0xD367},{0x89DC, 0xF5FE},
- {0x89DD, 0xD368},{0x89DE, 0xF5FC},{0x89DF, 0xD369},{0x89E0, 0xD36A},{0x89E1, 0xD36B},{0x89E2, 0xD36C},{0x89E3, 0xBDE2},{0x89E4, 0xD36D},
- {0x89E5, 0xF6A1},{0x89E6, 0xB4A5},{0x89E7, 0xD36E},{0x89E8, 0xD36F},{0x89E9, 0xD370},{0x89EA, 0xD371},{0x89EB, 0xF6A2},{0x89EC, 0xD372},
- {0x89ED, 0xD373},{0x89EE, 0xD374},{0x89EF, 0xF6A3},{0x89F0, 0xD375},{0x89F1, 0xD376},{0x89F2, 0xD377},{0x89F3, 0xECB2},{0x89F4, 0xD378},
- {0x89F5, 0xD379},{0x89F6, 0xD37A},{0x89F7, 0xD37B},{0x89F8, 0xD37C},{0x89F9, 0xD37D},{0x89FA, 0xD37E},{0x89FB, 0xD380},{0x89FC, 0xD381},
- {0x89FD, 0xD382},{0x89FE, 0xD383},{0x89FF, 0xD384},{0x8A00, 0xD1D4},{0x8A01, 0xD385},{0x8A02, 0xD386},{0x8A03, 0xD387},{0x8A04, 0xD388},
- {0x8A05, 0xD389},{0x8A06, 0xD38A},{0x8A07, 0xD9EA},{0x8A08, 0xD38B},{0x8A09, 0xD38C},{0x8A0A, 0xD38D},{0x8A0B, 0xD38E},{0x8A0C, 0xD38F},
- {0x8A0D, 0xD390},{0x8A0E, 0xD391},{0x8A0F, 0xD392},{0x8A10, 0xD393},{0x8A11, 0xD394},{0x8A12, 0xD395},{0x8A13, 0xD396},{0x8A14, 0xD397},
- {0x8A15, 0xD398},{0x8A16, 0xD399},{0x8A17, 0xD39A},{0x8A18, 0xD39B},{0x8A19, 0xD39C},{0x8A1A, 0xD39D},{0x8A1B, 0xD39E},{0x8A1C, 0xD39F},
- {0x8A1D, 0xD3A0},{0x8A1E, 0xD440},{0x8A1F, 0xD441},{0x8A20, 0xD442},{0x8A21, 0xD443},{0x8A22, 0xD444},{0x8A23, 0xD445},{0x8A24, 0xD446},
- {0x8A25, 0xD447},{0x8A26, 0xD448},{0x8A27, 0xD449},{0x8A28, 0xD44A},{0x8A29, 0xD44B},{0x8A2A, 0xD44C},{0x8A2B, 0xD44D},{0x8A2C, 0xD44E},
- {0x8A2D, 0xD44F},{0x8A2E, 0xD450},{0x8A2F, 0xD451},{0x8A30, 0xD452},{0x8A31, 0xD453},{0x8A32, 0xD454},{0x8A33, 0xD455},{0x8A34, 0xD456},
- {0x8A35, 0xD457},{0x8A36, 0xD458},{0x8A37, 0xD459},{0x8A38, 0xD45A},{0x8A39, 0xD45B},{0x8A3A, 0xD45C},{0x8A3B, 0xD45D},{0x8A3C, 0xD45E},
- {0x8A3D, 0xD45F},{0x8A3E, 0xF6A4},{0x8A3F, 0xD460},{0x8A40, 0xD461},{0x8A41, 0xD462},{0x8A42, 0xD463},{0x8A43, 0xD464},{0x8A44, 0xD465},
- {0x8A45, 0xD466},{0x8A46, 0xD467},{0x8A47, 0xD468},{0x8A48, 0xEEBA},{0x8A49, 0xD469},{0x8A4A, 0xD46A},{0x8A4B, 0xD46B},{0x8A4C, 0xD46C},
- {0x8A4D, 0xD46D},{0x8A4E, 0xD46E},{0x8A4F, 0xD46F},{0x8A50, 0xD470},{0x8A51, 0xD471},{0x8A52, 0xD472},{0x8A53, 0xD473},{0x8A54, 0xD474},
- {0x8A55, 0xD475},{0x8A56, 0xD476},{0x8A57, 0xD477},{0x8A58, 0xD478},{0x8A59, 0xD479},{0x8A5A, 0xD47A},{0x8A5B, 0xD47B},{0x8A5C, 0xD47C},
- {0x8A5D, 0xD47D},{0x8A5E, 0xD47E},{0x8A5F, 0xD480},{0x8A60, 0xD481},{0x8A61, 0xD482},{0x8A62, 0xD483},{0x8A63, 0xD484},{0x8A64, 0xD485},
- {0x8A65, 0xD486},{0x8A66, 0xD487},{0x8A67, 0xD488},{0x8A68, 0xD489},{0x8A69, 0xD48A},{0x8A6A, 0xD48B},{0x8A6B, 0xD48C},{0x8A6C, 0xD48D},
- {0x8A6D, 0xD48E},{0x8A6E, 0xD48F},{0x8A6F, 0xD490},{0x8A70, 0xD491},{0x8A71, 0xD492},{0x8A72, 0xD493},{0x8A73, 0xD494},{0x8A74, 0xD495},
- {0x8A75, 0xD496},{0x8A76, 0xD497},{0x8A77, 0xD498},{0x8A78, 0xD499},{0x8A79, 0xD5B2},{0x8A7A, 0xD49A},{0x8A7B, 0xD49B},{0x8A7C, 0xD49C},
- {0x8A7D, 0xD49D},{0x8A7E, 0xD49E},{0x8A7F, 0xD49F},{0x8A80, 0xD4A0},{0x8A81, 0xD540},{0x8A82, 0xD541},{0x8A83, 0xD542},{0x8A84, 0xD543},
- {0x8A85, 0xD544},{0x8A86, 0xD545},{0x8A87, 0xD546},{0x8A88, 0xD547},{0x8A89, 0xD3FE},{0x8A8A, 0xCCDC},{0x8A8B, 0xD548},{0x8A8C, 0xD549},
- {0x8A8D, 0xD54A},{0x8A8E, 0xD54B},{0x8A8F, 0xD54C},{0x8A90, 0xD54D},{0x8A91, 0xD54E},{0x8A92, 0xD54F},{0x8A93, 0xCAC4},{0x8A94, 0xD550},
- {0x8A95, 0xD551},{0x8A96, 0xD552},{0x8A97, 0xD553},{0x8A98, 0xD554},{0x8A99, 0xD555},{0x8A9A, 0xD556},{0x8A9B, 0xD557},{0x8A9C, 0xD558},
- {0x8A9D, 0xD559},{0x8A9E, 0xD55A},{0x8A9F, 0xD55B},{0x8AA0, 0xD55C},{0x8AA1, 0xD55D},{0x8AA2, 0xD55E},{0x8AA3, 0xD55F},{0x8AA4, 0xD560},
- {0x8AA5, 0xD561},{0x8AA6, 0xD562},{0x8AA7, 0xD563},{0x8AA8, 0xD564},{0x8AA9, 0xD565},{0x8AAA, 0xD566},{0x8AAB, 0xD567},{0x8AAC, 0xD568},
- {0x8AAD, 0xD569},{0x8AAE, 0xD56A},{0x8AAF, 0xD56B},{0x8AB0, 0xD56C},{0x8AB1, 0xD56D},{0x8AB2, 0xD56E},{0x8AB3, 0xD56F},{0x8AB4, 0xD570},
- {0x8AB5, 0xD571},{0x8AB6, 0xD572},{0x8AB7, 0xD573},{0x8AB8, 0xD574},{0x8AB9, 0xD575},{0x8ABA, 0xD576},{0x8ABB, 0xD577},{0x8ABC, 0xD578},
- {0x8ABD, 0xD579},{0x8ABE, 0xD57A},{0x8ABF, 0xD57B},{0x8AC0, 0xD57C},{0x8AC1, 0xD57D},{0x8AC2, 0xD57E},{0x8AC3, 0xD580},{0x8AC4, 0xD581},
- {0x8AC5, 0xD582},{0x8AC6, 0xD583},{0x8AC7, 0xD584},{0x8AC8, 0xD585},{0x8AC9, 0xD586},{0x8ACA, 0xD587},{0x8ACB, 0xD588},{0x8ACC, 0xD589},
- {0x8ACD, 0xD58A},{0x8ACE, 0xD58B},{0x8ACF, 0xD58C},{0x8AD0, 0xD58D},{0x8AD1, 0xD58E},{0x8AD2, 0xD58F},{0x8AD3, 0xD590},{0x8AD4, 0xD591},
- {0x8AD5, 0xD592},{0x8AD6, 0xD593},{0x8AD7, 0xD594},{0x8AD8, 0xD595},{0x8AD9, 0xD596},{0x8ADA, 0xD597},{0x8ADB, 0xD598},{0x8ADC, 0xD599},
- {0x8ADD, 0xD59A},{0x8ADE, 0xD59B},{0x8ADF, 0xD59C},{0x8AE0, 0xD59D},{0x8AE1, 0xD59E},{0x8AE2, 0xD59F},{0x8AE3, 0xD5A0},{0x8AE4, 0xD640},
- {0x8AE5, 0xD641},{0x8AE6, 0xD642},{0x8AE7, 0xD643},{0x8AE8, 0xD644},{0x8AE9, 0xD645},{0x8AEA, 0xD646},{0x8AEB, 0xD647},{0x8AEC, 0xD648},
- {0x8AED, 0xD649},{0x8AEE, 0xD64A},{0x8AEF, 0xD64B},{0x8AF0, 0xD64C},{0x8AF1, 0xD64D},{0x8AF2, 0xD64E},{0x8AF3, 0xD64F},{0x8AF4, 0xD650},
- {0x8AF5, 0xD651},{0x8AF6, 0xD652},{0x8AF7, 0xD653},{0x8AF8, 0xD654},{0x8AF9, 0xD655},{0x8AFA, 0xD656},{0x8AFB, 0xD657},{0x8AFC, 0xD658},
- {0x8AFD, 0xD659},{0x8AFE, 0xD65A},{0x8AFF, 0xD65B},{0x8B00, 0xD65C},{0x8B01, 0xD65D},{0x8B02, 0xD65E},{0x8B03, 0xD65F},{0x8B04, 0xD660},
- {0x8B05, 0xD661},{0x8B06, 0xD662},{0x8B07, 0xE5C0},{0x8B08, 0xD663},{0x8B09, 0xD664},{0x8B0A, 0xD665},{0x8B0B, 0xD666},{0x8B0C, 0xD667},
- {0x8B0D, 0xD668},{0x8B0E, 0xD669},{0x8B0F, 0xD66A},{0x8B10, 0xD66B},{0x8B11, 0xD66C},{0x8B12, 0xD66D},{0x8B13, 0xD66E},{0x8B14, 0xD66F},
- {0x8B15, 0xD670},{0x8B16, 0xD671},{0x8B17, 0xD672},{0x8B18, 0xD673},{0x8B19, 0xD674},{0x8B1A, 0xD675},{0x8B1B, 0xD676},{0x8B1C, 0xD677},
- {0x8B1D, 0xD678},{0x8B1E, 0xD679},{0x8B1F, 0xD67A},{0x8B20, 0xD67B},{0x8B21, 0xD67C},{0x8B22, 0xD67D},{0x8B23, 0xD67E},{0x8B24, 0xD680},
- {0x8B25, 0xD681},{0x8B26, 0xF6A5},{0x8B27, 0xD682},{0x8B28, 0xD683},{0x8B29, 0xD684},{0x8B2A, 0xD685},{0x8B2B, 0xD686},{0x8B2C, 0xD687},
- {0x8B2D, 0xD688},{0x8B2E, 0xD689},{0x8B2F, 0xD68A},{0x8B30, 0xD68B},{0x8B31, 0xD68C},{0x8B32, 0xD68D},{0x8B33, 0xD68E},{0x8B34, 0xD68F},
- {0x8B35, 0xD690},{0x8B36, 0xD691},{0x8B37, 0xD692},{0x8B38, 0xD693},{0x8B39, 0xD694},{0x8B3A, 0xD695},{0x8B3B, 0xD696},{0x8B3C, 0xD697},
- {0x8B3D, 0xD698},{0x8B3E, 0xD699},{0x8B3F, 0xD69A},{0x8B40, 0xD69B},{0x8B41, 0xD69C},{0x8B42, 0xD69D},{0x8B43, 0xD69E},{0x8B44, 0xD69F},
- {0x8B45, 0xD6A0},{0x8B46, 0xD740},{0x8B47, 0xD741},{0x8B48, 0xD742},{0x8B49, 0xD743},{0x8B4A, 0xD744},{0x8B4B, 0xD745},{0x8B4C, 0xD746},
- {0x8B4D, 0xD747},{0x8B4E, 0xD748},{0x8B4F, 0xD749},{0x8B50, 0xD74A},{0x8B51, 0xD74B},{0x8B52, 0xD74C},{0x8B53, 0xD74D},{0x8B54, 0xD74E},
- {0x8B55, 0xD74F},{0x8B56, 0xD750},{0x8B57, 0xD751},{0x8B58, 0xD752},{0x8B59, 0xD753},{0x8B5A, 0xD754},{0x8B5B, 0xD755},{0x8B5C, 0xD756},
- {0x8B5D, 0xD757},{0x8B5E, 0xD758},{0x8B5F, 0xD759},{0x8B60, 0xD75A},{0x8B61, 0xD75B},{0x8B62, 0xD75C},{0x8B63, 0xD75D},{0x8B64, 0xD75E},
- {0x8B65, 0xD75F},{0x8B66, 0xBEAF},{0x8B67, 0xD760},{0x8B68, 0xD761},{0x8B69, 0xD762},{0x8B6A, 0xD763},{0x8B6B, 0xD764},{0x8B6C, 0xC6A9},
- {0x8B6D, 0xD765},{0x8B6E, 0xD766},{0x8B6F, 0xD767},{0x8B70, 0xD768},{0x8B71, 0xD769},{0x8B72, 0xD76A},{0x8B73, 0xD76B},{0x8B74, 0xD76C},
- {0x8B75, 0xD76D},{0x8B76, 0xD76E},{0x8B77, 0xD76F},{0x8B78, 0xD770},{0x8B79, 0xD771},{0x8B7A, 0xD772},{0x8B7B, 0xD773},{0x8B7C, 0xD774},
- {0x8B7D, 0xD775},{0x8B7E, 0xD776},{0x8B7F, 0xD777},{0x8B80, 0xD778},{0x8B81, 0xD779},{0x8B82, 0xD77A},{0x8B83, 0xD77B},{0x8B84, 0xD77C},
- {0x8B85, 0xD77D},{0x8B86, 0xD77E},{0x8B87, 0xD780},{0x8B88, 0xD781},{0x8B89, 0xD782},{0x8B8A, 0xD783},{0x8B8B, 0xD784},{0x8B8C, 0xD785},
- {0x8B8D, 0xD786},{0x8B8E, 0xD787},{0x8B8F, 0xD788},{0x8B90, 0xD789},{0x8B91, 0xD78A},{0x8B92, 0xD78B},{0x8B93, 0xD78C},{0x8B94, 0xD78D},
- {0x8B95, 0xD78E},{0x8B96, 0xD78F},{0x8B97, 0xD790},{0x8B98, 0xD791},{0x8B99, 0xD792},{0x8B9A, 0xD793},{0x8B9B, 0xD794},{0x8B9C, 0xD795},
- {0x8B9D, 0xD796},{0x8B9E, 0xD797},{0x8B9F, 0xD798},{0x8BA0, 0xDAA5},{0x8BA1, 0xBCC6},{0x8BA2, 0xB6A9},{0x8BA3, 0xB8BC},{0x8BA4, 0xC8CF},
- {0x8BA5, 0xBCA5},{0x8BA6, 0xDAA6},{0x8BA7, 0xDAA7},{0x8BA8, 0xCCD6},{0x8BA9, 0xC8C3},{0x8BAA, 0xDAA8},{0x8BAB, 0xC6FD},{0x8BAC, 0xD799},
- {0x8BAD, 0xD1B5},{0x8BAE, 0xD2E9},{0x8BAF, 0xD1B6},{0x8BB0, 0xBCC7},{0x8BB1, 0xD79A},{0x8BB2, 0xBDB2},{0x8BB3, 0xBBE4},{0x8BB4, 0xDAA9},
- {0x8BB5, 0xDAAA},{0x8BB6, 0xD1C8},{0x8BB7, 0xDAAB},{0x8BB8, 0xD0ED},{0x8BB9, 0xB6EF},{0x8BBA, 0xC2DB},{0x8BBB, 0xD79B},{0x8BBC, 0xCBCF},
- {0x8BBD, 0xB7ED},{0x8BBE, 0xC9E8},{0x8BBF, 0xB7C3},{0x8BC0, 0xBEF7},{0x8BC1, 0xD6A4},{0x8BC2, 0xDAAC},{0x8BC3, 0xDAAD},{0x8BC4, 0xC6C0},
- {0x8BC5, 0xD7E7},{0x8BC6, 0xCAB6},{0x8BC7, 0xD79C},{0x8BC8, 0xD5A9},{0x8BC9, 0xCBDF},{0x8BCA, 0xD5EF},{0x8BCB, 0xDAAE},{0x8BCC, 0xD6DF},
- {0x8BCD, 0xB4CA},{0x8BCE, 0xDAB0},{0x8BCF, 0xDAAF},{0x8BD0, 0xD79D},{0x8BD1, 0xD2EB},{0x8BD2, 0xDAB1},{0x8BD3, 0xDAB2},{0x8BD4, 0xDAB3},
- {0x8BD5, 0xCAD4},{0x8BD6, 0xDAB4},{0x8BD7, 0xCAAB},{0x8BD8, 0xDAB5},{0x8BD9, 0xDAB6},{0x8BDA, 0xB3CF},{0x8BDB, 0xD6EF},{0x8BDC, 0xDAB7},
- {0x8BDD, 0xBBB0},{0x8BDE, 0xB5AE},{0x8BDF, 0xDAB8},{0x8BE0, 0xDAB9},{0x8BE1, 0xB9EE},{0x8BE2, 0xD1AF},{0x8BE3, 0xD2E8},{0x8BE4, 0xDABA},
- {0x8BE5, 0xB8C3},{0x8BE6, 0xCFEA},{0x8BE7, 0xB2EF},{0x8BE8, 0xDABB},{0x8BE9, 0xDABC},{0x8BEA, 0xD79E},{0x8BEB, 0xBDEB},{0x8BEC, 0xCEDC},
- {0x8BED, 0xD3EF},{0x8BEE, 0xDABD},{0x8BEF, 0xCEF3},{0x8BF0, 0xDABE},{0x8BF1, 0xD3D5},{0x8BF2, 0xBBE5},{0x8BF3, 0xDABF},{0x8BF4, 0xCBB5},
- {0x8BF5, 0xCBD0},{0x8BF6, 0xDAC0},{0x8BF7, 0xC7EB},{0x8BF8, 0xD6EE},{0x8BF9, 0xDAC1},{0x8BFA, 0xC5B5},{0x8BFB, 0xB6C1},{0x8BFC, 0xDAC2},
- {0x8BFD, 0xB7CC},{0x8BFE, 0xBFCE},{0x8BFF, 0xDAC3},{0x8C00, 0xDAC4},{0x8C01, 0xCBAD},{0x8C02, 0xDAC5},{0x8C03, 0xB5F7},{0x8C04, 0xDAC6},
- {0x8C05, 0xC1C2},{0x8C06, 0xD7BB},{0x8C07, 0xDAC7},{0x8C08, 0xCCB8},{0x8C09, 0xD79F},{0x8C0A, 0xD2EA},{0x8C0B, 0xC4B1},{0x8C0C, 0xDAC8},
- {0x8C0D, 0xB5FD},{0x8C0E, 0xBBD1},{0x8C0F, 0xDAC9},{0x8C10, 0xD0B3},{0x8C11, 0xDACA},{0x8C12, 0xDACB},{0x8C13, 0xCEBD},{0x8C14, 0xDACC},
- {0x8C15, 0xDACD},{0x8C16, 0xDACE},{0x8C17, 0xB2F7},{0x8C18, 0xDAD1},{0x8C19, 0xDACF},{0x8C1A, 0xD1E8},{0x8C1B, 0xDAD0},{0x8C1C, 0xC3D5},
- {0x8C1D, 0xDAD2},{0x8C1E, 0xD7A0},{0x8C1F, 0xDAD3},{0x8C20, 0xDAD4},{0x8C21, 0xDAD5},{0x8C22, 0xD0BB},{0x8C23, 0xD2A5},{0x8C24, 0xB0F9},
- {0x8C25, 0xDAD6},{0x8C26, 0xC7AB},{0x8C27, 0xDAD7},{0x8C28, 0xBDF7},{0x8C29, 0xC3A1},{0x8C2A, 0xDAD8},{0x8C2B, 0xDAD9},{0x8C2C, 0xC3FD},
- {0x8C2D, 0xCCB7},{0x8C2E, 0xDADA},{0x8C2F, 0xDADB},{0x8C30, 0xC0BE},{0x8C31, 0xC6D7},{0x8C32, 0xDADC},{0x8C33, 0xDADD},{0x8C34, 0xC7B4},
- {0x8C35, 0xDADE},{0x8C36, 0xDADF},{0x8C37, 0xB9C8},{0x8C38, 0xD840},{0x8C39, 0xD841},{0x8C3A, 0xD842},{0x8C3B, 0xD843},{0x8C3C, 0xD844},
- {0x8C3D, 0xD845},{0x8C3E, 0xD846},{0x8C3F, 0xD847},{0x8C40, 0xD848},{0x8C41, 0xBBED},{0x8C42, 0xD849},{0x8C43, 0xD84A},{0x8C44, 0xD84B},
- {0x8C45, 0xD84C},{0x8C46, 0xB6B9},{0x8C47, 0xF4F8},{0x8C48, 0xD84D},{0x8C49, 0xF4F9},{0x8C4A, 0xD84E},{0x8C4B, 0xD84F},{0x8C4C, 0xCDE3},
- {0x8C4D, 0xD850},{0x8C4E, 0xD851},{0x8C4F, 0xD852},{0x8C50, 0xD853},{0x8C51, 0xD854},{0x8C52, 0xD855},{0x8C53, 0xD856},{0x8C54, 0xD857},
- {0x8C55, 0xF5B9},{0x8C56, 0xD858},{0x8C57, 0xD859},{0x8C58, 0xD85A},{0x8C59, 0xD85B},{0x8C5A, 0xEBE0},{0x8C5B, 0xD85C},{0x8C5C, 0xD85D},
- {0x8C5D, 0xD85E},{0x8C5E, 0xD85F},{0x8C5F, 0xD860},{0x8C60, 0xD861},{0x8C61, 0xCFF3},{0x8C62, 0xBBBF},{0x8C63, 0xD862},{0x8C64, 0xD863},
- {0x8C65, 0xD864},{0x8C66, 0xD865},{0x8C67, 0xD866},{0x8C68, 0xD867},{0x8C69, 0xD868},{0x8C6A, 0xBAC0},{0x8C6B, 0xD4A5},{0x8C6C, 0xD869},
- {0x8C6D, 0xD86A},{0x8C6E, 0xD86B},{0x8C6F, 0xD86C},{0x8C70, 0xD86D},{0x8C71, 0xD86E},{0x8C72, 0xD86F},{0x8C73, 0xE1D9},{0x8C74, 0xD870},
- {0x8C75, 0xD871},{0x8C76, 0xD872},{0x8C77, 0xD873},{0x8C78, 0xF5F4},{0x8C79, 0xB1AA},{0x8C7A, 0xB2F2},{0x8C7B, 0xD874},{0x8C7C, 0xD875},
- {0x8C7D, 0xD876},{0x8C7E, 0xD877},{0x8C7F, 0xD878},{0x8C80, 0xD879},{0x8C81, 0xD87A},{0x8C82, 0xF5F5},{0x8C83, 0xD87B},{0x8C84, 0xD87C},
- {0x8C85, 0xF5F7},{0x8C86, 0xD87D},{0x8C87, 0xD87E},{0x8C88, 0xD880},{0x8C89, 0xBAD1},{0x8C8A, 0xF5F6},{0x8C8B, 0xD881},{0x8C8C, 0xC3B2},
- {0x8C8D, 0xD882},{0x8C8E, 0xD883},{0x8C8F, 0xD884},{0x8C90, 0xD885},{0x8C91, 0xD886},{0x8C92, 0xD887},{0x8C93, 0xD888},{0x8C94, 0xF5F9},
- {0x8C95, 0xD889},{0x8C96, 0xD88A},{0x8C97, 0xD88B},{0x8C98, 0xF5F8},{0x8C99, 0xD88C},{0x8C9A, 0xD88D},{0x8C9B, 0xD88E},{0x8C9C, 0xD88F},
- {0x8C9D, 0xD890},{0x8C9E, 0xD891},{0x8C9F, 0xD892},{0x8CA0, 0xD893},{0x8CA1, 0xD894},{0x8CA2, 0xD895},{0x8CA3, 0xD896},{0x8CA4, 0xD897},
- {0x8CA5, 0xD898},{0x8CA6, 0xD899},{0x8CA7, 0xD89A},{0x8CA8, 0xD89B},{0x8CA9, 0xD89C},{0x8CAA, 0xD89D},{0x8CAB, 0xD89E},{0x8CAC, 0xD89F},
- {0x8CAD, 0xD8A0},{0x8CAE, 0xD940},{0x8CAF, 0xD941},{0x8CB0, 0xD942},{0x8CB1, 0xD943},{0x8CB2, 0xD944},{0x8CB3, 0xD945},{0x8CB4, 0xD946},
- {0x8CB5, 0xD947},{0x8CB6, 0xD948},{0x8CB7, 0xD949},{0x8CB8, 0xD94A},{0x8CB9, 0xD94B},{0x8CBA, 0xD94C},{0x8CBB, 0xD94D},{0x8CBC, 0xD94E},
- {0x8CBD, 0xD94F},{0x8CBE, 0xD950},{0x8CBF, 0xD951},{0x8CC0, 0xD952},{0x8CC1, 0xD953},{0x8CC2, 0xD954},{0x8CC3, 0xD955},{0x8CC4, 0xD956},
- {0x8CC5, 0xD957},{0x8CC6, 0xD958},{0x8CC7, 0xD959},{0x8CC8, 0xD95A},{0x8CC9, 0xD95B},{0x8CCA, 0xD95C},{0x8CCB, 0xD95D},{0x8CCC, 0xD95E},
- {0x8CCD, 0xD95F},{0x8CCE, 0xD960},{0x8CCF, 0xD961},{0x8CD0, 0xD962},{0x8CD1, 0xD963},{0x8CD2, 0xD964},{0x8CD3, 0xD965},{0x8CD4, 0xD966},
- {0x8CD5, 0xD967},{0x8CD6, 0xD968},{0x8CD7, 0xD969},{0x8CD8, 0xD96A},{0x8CD9, 0xD96B},{0x8CDA, 0xD96C},{0x8CDB, 0xD96D},{0x8CDC, 0xD96E},
- {0x8CDD, 0xD96F},{0x8CDE, 0xD970},{0x8CDF, 0xD971},{0x8CE0, 0xD972},{0x8CE1, 0xD973},{0x8CE2, 0xD974},{0x8CE3, 0xD975},{0x8CE4, 0xD976},
- {0x8CE5, 0xD977},{0x8CE6, 0xD978},{0x8CE7, 0xD979},{0x8CE8, 0xD97A},{0x8CE9, 0xD97B},{0x8CEA, 0xD97C},{0x8CEB, 0xD97D},{0x8CEC, 0xD97E},
- {0x8CED, 0xD980},{0x8CEE, 0xD981},{0x8CEF, 0xD982},{0x8CF0, 0xD983},{0x8CF1, 0xD984},{0x8CF2, 0xD985},{0x8CF3, 0xD986},{0x8CF4, 0xD987},
- {0x8CF5, 0xD988},{0x8CF6, 0xD989},{0x8CF7, 0xD98A},{0x8CF8, 0xD98B},{0x8CF9, 0xD98C},{0x8CFA, 0xD98D},{0x8CFB, 0xD98E},{0x8CFC, 0xD98F},
- {0x8CFD, 0xD990},{0x8CFE, 0xD991},{0x8CFF, 0xD992},{0x8D00, 0xD993},{0x8D01, 0xD994},{0x8D02, 0xD995},{0x8D03, 0xD996},{0x8D04, 0xD997},
- {0x8D05, 0xD998},{0x8D06, 0xD999},{0x8D07, 0xD99A},{0x8D08, 0xD99B},{0x8D09, 0xD99C},{0x8D0A, 0xD99D},{0x8D0B, 0xD99E},{0x8D0C, 0xD99F},
- {0x8D0D, 0xD9A0},{0x8D0E, 0xDA40},{0x8D0F, 0xDA41},{0x8D10, 0xDA42},{0x8D11, 0xDA43},{0x8D12, 0xDA44},{0x8D13, 0xDA45},{0x8D14, 0xDA46},
- {0x8D15, 0xDA47},{0x8D16, 0xDA48},{0x8D17, 0xDA49},{0x8D18, 0xDA4A},{0x8D19, 0xDA4B},{0x8D1A, 0xDA4C},{0x8D1B, 0xDA4D},{0x8D1C, 0xDA4E},
- {0x8D1D, 0xB1B4},{0x8D1E, 0xD5EA},{0x8D1F, 0xB8BA},{0x8D20, 0xDA4F},{0x8D21, 0xB9B1},{0x8D22, 0xB2C6},{0x8D23, 0xD4F0},{0x8D24, 0xCFCD},
- {0x8D25, 0xB0DC},{0x8D26, 0xD5CB},{0x8D27, 0xBBF5},{0x8D28, 0xD6CA},{0x8D29, 0xB7B7},{0x8D2A, 0xCCB0},{0x8D2B, 0xC6B6},{0x8D2C, 0xB1E1},
- {0x8D2D, 0xB9BA},{0x8D2E, 0xD6FC},{0x8D2F, 0xB9E1},{0x8D30, 0xB7A1},{0x8D31, 0xBCFA},{0x8D32, 0xEADA},{0x8D33, 0xEADB},{0x8D34, 0xCCF9},
- {0x8D35, 0xB9F3},{0x8D36, 0xEADC},{0x8D37, 0xB4FB},{0x8D38, 0xC3B3},{0x8D39, 0xB7D1},{0x8D3A, 0xBAD8},{0x8D3B, 0xEADD},{0x8D3C, 0xD4F4},
- {0x8D3D, 0xEADE},{0x8D3E, 0xBCD6},{0x8D3F, 0xBBDF},{0x8D40, 0xEADF},{0x8D41, 0xC1DE},{0x8D42, 0xC2B8},{0x8D43, 0xD4DF},{0x8D44, 0xD7CA},
- {0x8D45, 0xEAE0},{0x8D46, 0xEAE1},{0x8D47, 0xEAE4},{0x8D48, 0xEAE2},{0x8D49, 0xEAE3},{0x8D4A, 0xC9DE},{0x8D4B, 0xB8B3},{0x8D4C, 0xB6C4},
- {0x8D4D, 0xEAE5},{0x8D4E, 0xCAEA},{0x8D4F, 0xC9CD},{0x8D50, 0xB4CD},{0x8D51, 0xDA50},{0x8D52, 0xDA51},{0x8D53, 0xE2D9},{0x8D54, 0xC5E2},
- {0x8D55, 0xEAE6},{0x8D56, 0xC0B5},{0x8D57, 0xDA52},{0x8D58, 0xD7B8},{0x8D59, 0xEAE7},{0x8D5A, 0xD7AC},{0x8D5B, 0xC8FC},{0x8D5C, 0xD8D3},
- {0x8D5D, 0xD8CD},{0x8D5E, 0xD4DE},{0x8D5F, 0xDA53},{0x8D60, 0xD4F9},{0x8D61, 0xC9C4},{0x8D62, 0xD3AE},{0x8D63, 0xB8D3},{0x8D64, 0xB3E0},
- {0x8D65, 0xDA54},{0x8D66, 0xC9E2},{0x8D67, 0xF4F6},{0x8D68, 0xDA55},{0x8D69, 0xDA56},{0x8D6A, 0xDA57},{0x8D6B, 0xBAD5},{0x8D6C, 0xDA58},
- {0x8D6D, 0xF4F7},{0x8D6E, 0xDA59},{0x8D6F, 0xDA5A},{0x8D70, 0xD7DF},{0x8D71, 0xDA5B},{0x8D72, 0xDA5C},{0x8D73, 0xF4F1},{0x8D74, 0xB8B0},
- {0x8D75, 0xD5D4},{0x8D76, 0xB8CF},{0x8D77, 0xC6F0},{0x8D78, 0xDA5D},{0x8D79, 0xDA5E},{0x8D7A, 0xDA5F},{0x8D7B, 0xDA60},{0x8D7C, 0xDA61},
- {0x8D7D, 0xDA62},{0x8D7E, 0xDA63},{0x8D7F, 0xDA64},{0x8D80, 0xDA65},{0x8D81, 0xB3C3},{0x8D82, 0xDA66},{0x8D83, 0xDA67},{0x8D84, 0xF4F2},
- {0x8D85, 0xB3AC},{0x8D86, 0xDA68},{0x8D87, 0xDA69},{0x8D88, 0xDA6A},{0x8D89, 0xDA6B},{0x8D8A, 0xD4BD},{0x8D8B, 0xC7F7},{0x8D8C, 0xDA6C},
- {0x8D8D, 0xDA6D},{0x8D8E, 0xDA6E},{0x8D8F, 0xDA6F},{0x8D90, 0xDA70},{0x8D91, 0xF4F4},{0x8D92, 0xDA71},{0x8D93, 0xDA72},{0x8D94, 0xF4F3},
- {0x8D95, 0xDA73},{0x8D96, 0xDA74},{0x8D97, 0xDA75},{0x8D98, 0xDA76},{0x8D99, 0xDA77},{0x8D9A, 0xDA78},{0x8D9B, 0xDA79},{0x8D9C, 0xDA7A},
- {0x8D9D, 0xDA7B},{0x8D9E, 0xDA7C},{0x8D9F, 0xCCCB},{0x8DA0, 0xDA7D},{0x8DA1, 0xDA7E},{0x8DA2, 0xDA80},{0x8DA3, 0xC8A4},{0x8DA4, 0xDA81},
- {0x8DA5, 0xDA82},{0x8DA6, 0xDA83},{0x8DA7, 0xDA84},{0x8DA8, 0xDA85},{0x8DA9, 0xDA86},{0x8DAA, 0xDA87},{0x8DAB, 0xDA88},{0x8DAC, 0xDA89},
- {0x8DAD, 0xDA8A},{0x8DAE, 0xDA8B},{0x8DAF, 0xDA8C},{0x8DB0, 0xDA8D},{0x8DB1, 0xF4F5},{0x8DB2, 0xDA8E},{0x8DB3, 0xD7E3},{0x8DB4, 0xC5BF},
- {0x8DB5, 0xF5C0},{0x8DB6, 0xDA8F},{0x8DB7, 0xDA90},{0x8DB8, 0xF5BB},{0x8DB9, 0xDA91},{0x8DBA, 0xF5C3},{0x8DBB, 0xDA92},{0x8DBC, 0xF5C2},
- {0x8DBD, 0xDA93},{0x8DBE, 0xD6BA},{0x8DBF, 0xF5C1},{0x8DC0, 0xDA94},{0x8DC1, 0xDA95},{0x8DC2, 0xDA96},{0x8DC3, 0xD4BE},{0x8DC4, 0xF5C4},
- {0x8DC5, 0xDA97},{0x8DC6, 0xF5CC},{0x8DC7, 0xDA98},{0x8DC8, 0xDA99},{0x8DC9, 0xDA9A},{0x8DCA, 0xDA9B},{0x8DCB, 0xB0CF},{0x8DCC, 0xB5F8},
- {0x8DCD, 0xDA9C},{0x8DCE, 0xF5C9},{0x8DCF, 0xF5CA},{0x8DD0, 0xDA9D},{0x8DD1, 0xC5DC},{0x8DD2, 0xDA9E},{0x8DD3, 0xDA9F},{0x8DD4, 0xDAA0},
- {0x8DD5, 0xDB40},{0x8DD6, 0xF5C5},{0x8DD7, 0xF5C6},{0x8DD8, 0xDB41},{0x8DD9, 0xDB42},{0x8DDA, 0xF5C7},{0x8DDB, 0xF5CB},{0x8DDC, 0xDB43},
- {0x8DDD, 0xBEE0},{0x8DDE, 0xF5C8},{0x8DDF, 0xB8FA},{0x8DE0, 0xDB44},{0x8DE1, 0xDB45},{0x8DE2, 0xDB46},{0x8DE3, 0xF5D0},{0x8DE4, 0xF5D3},
- {0x8DE5, 0xDB47},{0x8DE6, 0xDB48},{0x8DE7, 0xDB49},{0x8DE8, 0xBFE7},{0x8DE9, 0xDB4A},{0x8DEA, 0xB9F2},{0x8DEB, 0xF5BC},{0x8DEC, 0xF5CD},
- {0x8DED, 0xDB4B},{0x8DEE, 0xDB4C},{0x8DEF, 0xC2B7},{0x8DF0, 0xDB4D},{0x8DF1, 0xDB4E},{0x8DF2, 0xDB4F},{0x8DF3, 0xCCF8},{0x8DF4, 0xDB50},
- {0x8DF5, 0xBCF9},{0x8DF6, 0xDB51},{0x8DF7, 0xF5CE},{0x8DF8, 0xF5CF},{0x8DF9, 0xF5D1},{0x8DFA, 0xB6E5},{0x8DFB, 0xF5D2},{0x8DFC, 0xDB52},
- {0x8DFD, 0xF5D5},{0x8DFE, 0xDB53},{0x8DFF, 0xDB54},{0x8E00, 0xDB55},{0x8E01, 0xDB56},{0x8E02, 0xDB57},{0x8E03, 0xDB58},{0x8E04, 0xDB59},
- {0x8E05, 0xF5BD},{0x8E06, 0xDB5A},{0x8E07, 0xDB5B},{0x8E08, 0xDB5C},{0x8E09, 0xF5D4},{0x8E0A, 0xD3BB},{0x8E0B, 0xDB5D},{0x8E0C, 0xB3EC},
- {0x8E0D, 0xDB5E},{0x8E0E, 0xDB5F},{0x8E0F, 0xCCA4},{0x8E10, 0xDB60},{0x8E11, 0xDB61},{0x8E12, 0xDB62},{0x8E13, 0xDB63},{0x8E14, 0xF5D6},
- {0x8E15, 0xDB64},{0x8E16, 0xDB65},{0x8E17, 0xDB66},{0x8E18, 0xDB67},{0x8E19, 0xDB68},{0x8E1A, 0xDB69},{0x8E1B, 0xDB6A},{0x8E1C, 0xDB6B},
- {0x8E1D, 0xF5D7},{0x8E1E, 0xBEE1},{0x8E1F, 0xF5D8},{0x8E20, 0xDB6C},{0x8E21, 0xDB6D},{0x8E22, 0xCCDF},{0x8E23, 0xF5DB},{0x8E24, 0xDB6E},
- {0x8E25, 0xDB6F},{0x8E26, 0xDB70},{0x8E27, 0xDB71},{0x8E28, 0xDB72},{0x8E29, 0xB2C8},{0x8E2A, 0xD7D9},{0x8E2B, 0xDB73},{0x8E2C, 0xF5D9},
- {0x8E2D, 0xDB74},{0x8E2E, 0xF5DA},{0x8E2F, 0xF5DC},{0x8E30, 0xDB75},{0x8E31, 0xF5E2},{0x8E32, 0xDB76},{0x8E33, 0xDB77},{0x8E34, 0xDB78},
- {0x8E35, 0xF5E0},{0x8E36, 0xDB79},{0x8E37, 0xDB7A},{0x8E38, 0xDB7B},{0x8E39, 0xF5DF},{0x8E3A, 0xF5DD},{0x8E3B, 0xDB7C},{0x8E3C, 0xDB7D},
- {0x8E3D, 0xF5E1},{0x8E3E, 0xDB7E},{0x8E3F, 0xDB80},{0x8E40, 0xF5DE},{0x8E41, 0xF5E4},{0x8E42, 0xF5E5},{0x8E43, 0xDB81},{0x8E44, 0xCCE3},
- {0x8E45, 0xDB82},{0x8E46, 0xDB83},{0x8E47, 0xE5BF},{0x8E48, 0xB5B8},{0x8E49, 0xF5E3},{0x8E4A, 0xF5E8},{0x8E4B, 0xCCA3},{0x8E4C, 0xDB84},
- {0x8E4D, 0xDB85},{0x8E4E, 0xDB86},{0x8E4F, 0xDB87},{0x8E50, 0xDB88},{0x8E51, 0xF5E6},{0x8E52, 0xF5E7},{0x8E53, 0xDB89},{0x8E54, 0xDB8A},
- {0x8E55, 0xDB8B},{0x8E56, 0xDB8C},{0x8E57, 0xDB8D},{0x8E58, 0xDB8E},{0x8E59, 0xF5BE},{0x8E5A, 0xDB8F},{0x8E5B, 0xDB90},{0x8E5C, 0xDB91},
- {0x8E5D, 0xDB92},{0x8E5E, 0xDB93},{0x8E5F, 0xDB94},{0x8E60, 0xDB95},{0x8E61, 0xDB96},{0x8E62, 0xDB97},{0x8E63, 0xDB98},{0x8E64, 0xDB99},
- {0x8E65, 0xDB9A},{0x8E66, 0xB1C4},{0x8E67, 0xDB9B},{0x8E68, 0xDB9C},{0x8E69, 0xF5BF},{0x8E6A, 0xDB9D},{0x8E6B, 0xDB9E},{0x8E6C, 0xB5C5},
- {0x8E6D, 0xB2E4},{0x8E6E, 0xDB9F},{0x8E6F, 0xF5EC},{0x8E70, 0xF5E9},{0x8E71, 0xDBA0},{0x8E72, 0xB6D7},{0x8E73, 0xDC40},{0x8E74, 0xF5ED},
- {0x8E75, 0xDC41},{0x8E76, 0xF5EA},{0x8E77, 0xDC42},{0x8E78, 0xDC43},{0x8E79, 0xDC44},{0x8E7A, 0xDC45},{0x8E7B, 0xDC46},{0x8E7C, 0xF5EB},
- {0x8E7D, 0xDC47},{0x8E7E, 0xDC48},{0x8E7F, 0xB4DA},{0x8E80, 0xDC49},{0x8E81, 0xD4EA},{0x8E82, 0xDC4A},{0x8E83, 0xDC4B},{0x8E84, 0xDC4C},
- {0x8E85, 0xF5EE},{0x8E86, 0xDC4D},{0x8E87, 0xB3F9},{0x8E88, 0xDC4E},{0x8E89, 0xDC4F},{0x8E8A, 0xDC50},{0x8E8B, 0xDC51},{0x8E8C, 0xDC52},
- {0x8E8D, 0xDC53},{0x8E8E, 0xDC54},{0x8E8F, 0xF5EF},{0x8E90, 0xF5F1},{0x8E91, 0xDC55},{0x8E92, 0xDC56},{0x8E93, 0xDC57},{0x8E94, 0xF5F0},
- {0x8E95, 0xDC58},{0x8E96, 0xDC59},{0x8E97, 0xDC5A},{0x8E98, 0xDC5B},{0x8E99, 0xDC5C},{0x8E9A, 0xDC5D},{0x8E9B, 0xDC5E},{0x8E9C, 0xF5F2},
- {0x8E9D, 0xDC5F},{0x8E9E, 0xF5F3},{0x8E9F, 0xDC60},{0x8EA0, 0xDC61},{0x8EA1, 0xDC62},{0x8EA2, 0xDC63},{0x8EA3, 0xDC64},{0x8EA4, 0xDC65},
- {0x8EA5, 0xDC66},{0x8EA6, 0xDC67},{0x8EA7, 0xDC68},{0x8EA8, 0xDC69},{0x8EA9, 0xDC6A},{0x8EAA, 0xDC6B},{0x8EAB, 0xC9ED},{0x8EAC, 0xB9AA},
- {0x8EAD, 0xDC6C},{0x8EAE, 0xDC6D},{0x8EAF, 0xC7FB},{0x8EB0, 0xDC6E},{0x8EB1, 0xDC6F},{0x8EB2, 0xB6E3},{0x8EB3, 0xDC70},{0x8EB4, 0xDC71},
- {0x8EB5, 0xDC72},{0x8EB6, 0xDC73},{0x8EB7, 0xDC74},{0x8EB8, 0xDC75},{0x8EB9, 0xDC76},{0x8EBA, 0xCCC9},{0x8EBB, 0xDC77},{0x8EBC, 0xDC78},
- {0x8EBD, 0xDC79},{0x8EBE, 0xDC7A},{0x8EBF, 0xDC7B},{0x8EC0, 0xDC7C},{0x8EC1, 0xDC7D},{0x8EC2, 0xDC7E},{0x8EC3, 0xDC80},{0x8EC4, 0xDC81},
- {0x8EC5, 0xDC82},{0x8EC6, 0xDC83},{0x8EC7, 0xDC84},{0x8EC8, 0xDC85},{0x8EC9, 0xDC86},{0x8ECA, 0xDC87},{0x8ECB, 0xDC88},{0x8ECC, 0xDC89},
- {0x8ECD, 0xDC8A},{0x8ECE, 0xEAA6},{0x8ECF, 0xDC8B},{0x8ED0, 0xDC8C},{0x8ED1, 0xDC8D},{0x8ED2, 0xDC8E},{0x8ED3, 0xDC8F},{0x8ED4, 0xDC90},
- {0x8ED5, 0xDC91},{0x8ED6, 0xDC92},{0x8ED7, 0xDC93},{0x8ED8, 0xDC94},{0x8ED9, 0xDC95},{0x8EDA, 0xDC96},{0x8EDB, 0xDC97},{0x8EDC, 0xDC98},
- {0x8EDD, 0xDC99},{0x8EDE, 0xDC9A},{0x8EDF, 0xDC9B},{0x8EE0, 0xDC9C},{0x8EE1, 0xDC9D},{0x8EE2, 0xDC9E},{0x8EE3, 0xDC9F},{0x8EE4, 0xDCA0},
- {0x8EE5, 0xDD40},{0x8EE6, 0xDD41},{0x8EE7, 0xDD42},{0x8EE8, 0xDD43},{0x8EE9, 0xDD44},{0x8EEA, 0xDD45},{0x8EEB, 0xDD46},{0x8EEC, 0xDD47},
- {0x8EED, 0xDD48},{0x8EEE, 0xDD49},{0x8EEF, 0xDD4A},{0x8EF0, 0xDD4B},{0x8EF1, 0xDD4C},{0x8EF2, 0xDD4D},{0x8EF3, 0xDD4E},{0x8EF4, 0xDD4F},
- {0x8EF5, 0xDD50},{0x8EF6, 0xDD51},{0x8EF7, 0xDD52},{0x8EF8, 0xDD53},{0x8EF9, 0xDD54},{0x8EFA, 0xDD55},{0x8EFB, 0xDD56},{0x8EFC, 0xDD57},
- {0x8EFD, 0xDD58},{0x8EFE, 0xDD59},{0x8EFF, 0xDD5A},{0x8F00, 0xDD5B},{0x8F01, 0xDD5C},{0x8F02, 0xDD5D},{0x8F03, 0xDD5E},{0x8F04, 0xDD5F},
- {0x8F05, 0xDD60},{0x8F06, 0xDD61},{0x8F07, 0xDD62},{0x8F08, 0xDD63},{0x8F09, 0xDD64},{0x8F0A, 0xDD65},{0x8F0B, 0xDD66},{0x8F0C, 0xDD67},
- {0x8F0D, 0xDD68},{0x8F0E, 0xDD69},{0x8F0F, 0xDD6A},{0x8F10, 0xDD6B},{0x8F11, 0xDD6C},{0x8F12, 0xDD6D},{0x8F13, 0xDD6E},{0x8F14, 0xDD6F},
- {0x8F15, 0xDD70},{0x8F16, 0xDD71},{0x8F17, 0xDD72},{0x8F18, 0xDD73},{0x8F19, 0xDD74},{0x8F1A, 0xDD75},{0x8F1B, 0xDD76},{0x8F1C, 0xDD77},
- {0x8F1D, 0xDD78},{0x8F1E, 0xDD79},{0x8F1F, 0xDD7A},{0x8F20, 0xDD7B},{0x8F21, 0xDD7C},{0x8F22, 0xDD7D},{0x8F23, 0xDD7E},{0x8F24, 0xDD80},
- {0x8F25, 0xDD81},{0x8F26, 0xDD82},{0x8F27, 0xDD83},{0x8F28, 0xDD84},{0x8F29, 0xDD85},{0x8F2A, 0xDD86},{0x8F2B, 0xDD87},{0x8F2C, 0xDD88},
- {0x8F2D, 0xDD89},{0x8F2E, 0xDD8A},{0x8F2F, 0xDD8B},{0x8F30, 0xDD8C},{0x8F31, 0xDD8D},{0x8F32, 0xDD8E},{0x8F33, 0xDD8F},{0x8F34, 0xDD90},
- {0x8F35, 0xDD91},{0x8F36, 0xDD92},{0x8F37, 0xDD93},{0x8F38, 0xDD94},{0x8F39, 0xDD95},{0x8F3A, 0xDD96},{0x8F3B, 0xDD97},{0x8F3C, 0xDD98},
- {0x8F3D, 0xDD99},{0x8F3E, 0xDD9A},{0x8F3F, 0xDD9B},{0x8F40, 0xDD9C},{0x8F41, 0xDD9D},{0x8F42, 0xDD9E},{0x8F43, 0xDD9F},{0x8F44, 0xDDA0},
- {0x8F45, 0xDE40},{0x8F46, 0xDE41},{0x8F47, 0xDE42},{0x8F48, 0xDE43},{0x8F49, 0xDE44},{0x8F4A, 0xDE45},{0x8F4B, 0xDE46},{0x8F4C, 0xDE47},
- {0x8F4D, 0xDE48},{0x8F4E, 0xDE49},{0x8F4F, 0xDE4A},{0x8F50, 0xDE4B},{0x8F51, 0xDE4C},{0x8F52, 0xDE4D},{0x8F53, 0xDE4E},{0x8F54, 0xDE4F},
- {0x8F55, 0xDE50},{0x8F56, 0xDE51},{0x8F57, 0xDE52},{0x8F58, 0xDE53},{0x8F59, 0xDE54},{0x8F5A, 0xDE55},{0x8F5B, 0xDE56},{0x8F5C, 0xDE57},
- {0x8F5D, 0xDE58},{0x8F5E, 0xDE59},{0x8F5F, 0xDE5A},{0x8F60, 0xDE5B},{0x8F61, 0xDE5C},{0x8F62, 0xDE5D},{0x8F63, 0xDE5E},{0x8F64, 0xDE5F},
- {0x8F65, 0xDE60},{0x8F66, 0xB3B5},{0x8F67, 0xD4FE},{0x8F68, 0xB9EC},{0x8F69, 0xD0F9},{0x8F6A, 0xDE61},{0x8F6B, 0xE9ED},{0x8F6C, 0xD7AA},
- {0x8F6D, 0xE9EE},{0x8F6E, 0xC2D6},{0x8F6F, 0xC8ED},{0x8F70, 0xBAE4},{0x8F71, 0xE9EF},{0x8F72, 0xE9F0},{0x8F73, 0xE9F1},{0x8F74, 0xD6E1},
- {0x8F75, 0xE9F2},{0x8F76, 0xE9F3},{0x8F77, 0xE9F5},{0x8F78, 0xE9F4},{0x8F79, 0xE9F6},{0x8F7A, 0xE9F7},{0x8F7B, 0xC7E1},{0x8F7C, 0xE9F8},
- {0x8F7D, 0xD4D8},{0x8F7E, 0xE9F9},{0x8F7F, 0xBDCE},{0x8F80, 0xDE62},{0x8F81, 0xE9FA},{0x8F82, 0xE9FB},{0x8F83, 0xBDCF},{0x8F84, 0xE9FC},
- {0x8F85, 0xB8A8},{0x8F86, 0xC1BE},{0x8F87, 0xE9FD},{0x8F88, 0xB1B2},{0x8F89, 0xBBD4},{0x8F8A, 0xB9F5},{0x8F8B, 0xE9FE},{0x8F8C, 0xDE63},
- {0x8F8D, 0xEAA1},{0x8F8E, 0xEAA2},{0x8F8F, 0xEAA3},{0x8F90, 0xB7F8},{0x8F91, 0xBCAD},{0x8F92, 0xDE64},{0x8F93, 0xCAE4},{0x8F94, 0xE0CE},
- {0x8F95, 0xD4AF},{0x8F96, 0xCFBD},{0x8F97, 0xD5B7},{0x8F98, 0xEAA4},{0x8F99, 0xD5DE},{0x8F9A, 0xEAA5},{0x8F9B, 0xD0C1},{0x8F9C, 0xB9BC},
- {0x8F9D, 0xDE65},{0x8F9E, 0xB4C7},{0x8F9F, 0xB1D9},{0x8FA0, 0xDE66},{0x8FA1, 0xDE67},{0x8FA2, 0xDE68},{0x8FA3, 0xC0B1},{0x8FA4, 0xDE69},
- {0x8FA5, 0xDE6A},{0x8FA6, 0xDE6B},{0x8FA7, 0xDE6C},{0x8FA8, 0xB1E6},{0x8FA9, 0xB1E7},{0x8FAA, 0xDE6D},{0x8FAB, 0xB1E8},{0x8FAC, 0xDE6E},
- {0x8FAD, 0xDE6F},{0x8FAE, 0xDE70},{0x8FAF, 0xDE71},{0x8FB0, 0xB3BD},{0x8FB1, 0xC8E8},{0x8FB2, 0xDE72},{0x8FB3, 0xDE73},{0x8FB4, 0xDE74},
- {0x8FB5, 0xDE75},{0x8FB6, 0xE5C1},{0x8FB7, 0xDE76},{0x8FB8, 0xDE77},{0x8FB9, 0xB1DF},{0x8FBA, 0xDE78},{0x8FBB, 0xDE79},{0x8FBC, 0xDE7A},
- {0x8FBD, 0xC1C9},{0x8FBE, 0xB4EF},{0x8FBF, 0xDE7B},{0x8FC0, 0xDE7C},{0x8FC1, 0xC7A8},{0x8FC2, 0xD3D8},{0x8FC3, 0xDE7D},{0x8FC4, 0xC6F9},
- {0x8FC5, 0xD1B8},{0x8FC6, 0xDE7E},{0x8FC7, 0xB9FD},{0x8FC8, 0xC2F5},{0x8FC9, 0xDE80},{0x8FCA, 0xDE81},{0x8FCB, 0xDE82},{0x8FCC, 0xDE83},
- {0x8FCD, 0xDE84},{0x8FCE, 0xD3AD},{0x8FCF, 0xDE85},{0x8FD0, 0xD4CB},{0x8FD1, 0xBDFC},{0x8FD2, 0xDE86},{0x8FD3, 0xE5C2},{0x8FD4, 0xB7B5},
- {0x8FD5, 0xE5C3},{0x8FD6, 0xDE87},{0x8FD7, 0xDE88},{0x8FD8, 0xBBB9},{0x8FD9, 0xD5E2},{0x8FDA, 0xDE89},{0x8FDB, 0xBDF8},{0x8FDC, 0xD4B6},
- {0x8FDD, 0xCEA5},{0x8FDE, 0xC1AC},{0x8FDF, 0xB3D9},{0x8FE0, 0xDE8A},{0x8FE1, 0xDE8B},{0x8FE2, 0xCCF6},{0x8FE3, 0xDE8C},{0x8FE4, 0xE5C6},
- {0x8FE5, 0xE5C4},{0x8FE6, 0xE5C8},{0x8FE7, 0xDE8D},{0x8FE8, 0xE5CA},{0x8FE9, 0xE5C7},{0x8FEA, 0xB5CF},{0x8FEB, 0xC6C8},{0x8FEC, 0xDE8E},
- {0x8FED, 0xB5FC},{0x8FEE, 0xE5C5},{0x8FEF, 0xDE8F},{0x8FF0, 0xCAF6},{0x8FF1, 0xDE90},{0x8FF2, 0xDE91},{0x8FF3, 0xE5C9},{0x8FF4, 0xDE92},
- {0x8FF5, 0xDE93},{0x8FF6, 0xDE94},{0x8FF7, 0xC3D4},{0x8FF8, 0xB1C5},{0x8FF9, 0xBCA3},{0x8FFA, 0xDE95},{0x8FFB, 0xDE96},{0x8FFC, 0xDE97},
- {0x8FFD, 0xD7B7},{0x8FFE, 0xDE98},{0x8FFF, 0xDE99},{0x9000, 0xCDCB},{0x9001, 0xCBCD},{0x9002, 0xCACA},{0x9003, 0xCCD3},{0x9004, 0xE5CC},
- {0x9005, 0xE5CB},{0x9006, 0xC4E6},{0x9007, 0xDE9A},{0x9008, 0xDE9B},{0x9009, 0xD1A1},{0x900A, 0xD1B7},{0x900B, 0xE5CD},{0x900C, 0xDE9C},
- {0x900D, 0xE5D0},{0x900E, 0xDE9D},{0x900F, 0xCDB8},{0x9010, 0xD6F0},{0x9011, 0xE5CF},{0x9012, 0xB5DD},{0x9013, 0xDE9E},{0x9014, 0xCDBE},
- {0x9015, 0xDE9F},{0x9016, 0xE5D1},{0x9017, 0xB6BA},{0x9018, 0xDEA0},{0x9019, 0xDF40},{0x901A, 0xCDA8},{0x901B, 0xB9E4},{0x901C, 0xDF41},
- {0x901D, 0xCAC5},{0x901E, 0xB3D1},{0x901F, 0xCBD9},{0x9020, 0xD4EC},{0x9021, 0xE5D2},{0x9022, 0xB7EA},{0x9023, 0xDF42},{0x9024, 0xDF43},
- {0x9025, 0xDF44},{0x9026, 0xE5CE},{0x9027, 0xDF45},{0x9028, 0xDF46},{0x9029, 0xDF47},{0x902A, 0xDF48},{0x902B, 0xDF49},{0x902C, 0xDF4A},
- {0x902D, 0xE5D5},{0x902E, 0xB4FE},{0x902F, 0xE5D6},{0x9030, 0xDF4B},{0x9031, 0xDF4C},{0x9032, 0xDF4D},{0x9033, 0xDF4E},{0x9034, 0xDF4F},
- {0x9035, 0xE5D3},{0x9036, 0xE5D4},{0x9037, 0xDF50},{0x9038, 0xD2DD},{0x9039, 0xDF51},{0x903A, 0xDF52},{0x903B, 0xC2DF},{0x903C, 0xB1C6},
- {0x903D, 0xDF53},{0x903E, 0xD3E2},{0x903F, 0xDF54},{0x9040, 0xDF55},{0x9041, 0xB6DD},{0x9042, 0xCBEC},{0x9043, 0xDF56},{0x9044, 0xE5D7},
- {0x9045, 0xDF57},{0x9046, 0xDF58},{0x9047, 0xD3F6},{0x9048, 0xDF59},{0x9049, 0xDF5A},{0x904A, 0xDF5B},{0x904B, 0xDF5C},{0x904C, 0xDF5D},
- {0x904D, 0xB1E9},{0x904E, 0xDF5E},{0x904F, 0xB6F4},{0x9050, 0xE5DA},{0x9051, 0xE5D8},{0x9052, 0xE5D9},{0x9053, 0xB5C0},{0x9054, 0xDF5F},
- {0x9055, 0xDF60},{0x9056, 0xDF61},{0x9057, 0xD2C5},{0x9058, 0xE5DC},{0x9059, 0xDF62},{0x905A, 0xDF63},{0x905B, 0xE5DE},{0x905C, 0xDF64},
- {0x905D, 0xDF65},{0x905E, 0xDF66},{0x905F, 0xDF67},{0x9060, 0xDF68},{0x9061, 0xDF69},{0x9062, 0xE5DD},{0x9063, 0xC7B2},{0x9064, 0xDF6A},
- {0x9065, 0xD2A3},{0x9066, 0xDF6B},{0x9067, 0xDF6C},{0x9068, 0xE5DB},{0x9069, 0xDF6D},{0x906A, 0xDF6E},{0x906B, 0xDF6F},{0x906C, 0xDF70},
- {0x906D, 0xD4E2},{0x906E, 0xD5DA},{0x906F, 0xDF71},{0x9070, 0xDF72},{0x9071, 0xDF73},{0x9072, 0xDF74},{0x9073, 0xDF75},{0x9074, 0xE5E0},
- {0x9075, 0xD7F1},{0x9076, 0xDF76},{0x9077, 0xDF77},{0x9078, 0xDF78},{0x9079, 0xDF79},{0x907A, 0xDF7A},{0x907B, 0xDF7B},{0x907C, 0xDF7C},
- {0x907D, 0xE5E1},{0x907E, 0xDF7D},{0x907F, 0xB1DC},{0x9080, 0xD1FB},{0x9081, 0xDF7E},{0x9082, 0xE5E2},{0x9083, 0xE5E4},{0x9084, 0xDF80},
- {0x9085, 0xDF81},{0x9086, 0xDF82},{0x9087, 0xDF83},{0x9088, 0xE5E3},{0x9089, 0xDF84},{0x908A, 0xDF85},{0x908B, 0xE5E5},{0x908C, 0xDF86},
- {0x908D, 0xDF87},{0x908E, 0xDF88},{0x908F, 0xDF89},{0x9090, 0xDF8A},{0x9091, 0xD2D8},{0x9092, 0xDF8B},{0x9093, 0xB5CB},{0x9094, 0xDF8C},
- {0x9095, 0xE7DF},{0x9096, 0xDF8D},{0x9097, 0xDAF5},{0x9098, 0xDF8E},{0x9099, 0xDAF8},{0x909A, 0xDF8F},{0x909B, 0xDAF6},{0x909C, 0xDF90},
- {0x909D, 0xDAF7},{0x909E, 0xDF91},{0x909F, 0xDF92},{0x90A0, 0xDF93},{0x90A1, 0xDAFA},{0x90A2, 0xD0CF},{0x90A3, 0xC4C7},{0x90A4, 0xDF94},
- {0x90A5, 0xDF95},{0x90A6, 0xB0EE},{0x90A7, 0xDF96},{0x90A8, 0xDF97},{0x90A9, 0xDF98},{0x90AA, 0xD0B0},{0x90AB, 0xDF99},{0x90AC, 0xDAF9},
- {0x90AD, 0xDF9A},{0x90AE, 0xD3CA},{0x90AF, 0xBAAA},{0x90B0, 0xDBA2},{0x90B1, 0xC7F1},{0x90B2, 0xDF9B},{0x90B3, 0xDAFC},{0x90B4, 0xDAFB},
- {0x90B5, 0xC9DB},{0x90B6, 0xDAFD},{0x90B7, 0xDF9C},{0x90B8, 0xDBA1},{0x90B9, 0xD7DE},{0x90BA, 0xDAFE},{0x90BB, 0xC1DA},{0x90BC, 0xDF9D},
- {0x90BD, 0xDF9E},{0x90BE, 0xDBA5},{0x90BF, 0xDF9F},{0x90C0, 0xDFA0},{0x90C1, 0xD3F4},{0x90C2, 0xE040},{0x90C3, 0xE041},{0x90C4, 0xDBA7},
- {0x90C5, 0xDBA4},{0x90C6, 0xE042},{0x90C7, 0xDBA8},{0x90C8, 0xE043},{0x90C9, 0xE044},{0x90CA, 0xBDBC},{0x90CB, 0xE045},{0x90CC, 0xE046},
- {0x90CD, 0xE047},{0x90CE, 0xC0C9},{0x90CF, 0xDBA3},{0x90D0, 0xDBA6},{0x90D1, 0xD6A3},{0x90D2, 0xE048},{0x90D3, 0xDBA9},{0x90D4, 0xE049},
- {0x90D5, 0xE04A},{0x90D6, 0xE04B},{0x90D7, 0xDBAD},{0x90D8, 0xE04C},{0x90D9, 0xE04D},{0x90DA, 0xE04E},{0x90DB, 0xDBAE},{0x90DC, 0xDBAC},
- {0x90DD, 0xBAC2},{0x90DE, 0xE04F},{0x90DF, 0xE050},{0x90E0, 0xE051},{0x90E1, 0xBFA4},{0x90E2, 0xDBAB},{0x90E3, 0xE052},{0x90E4, 0xE053},
- {0x90E5, 0xE054},{0x90E6, 0xDBAA},{0x90E7, 0xD4C7},{0x90E8, 0xB2BF},{0x90E9, 0xE055},{0x90EA, 0xE056},{0x90EB, 0xDBAF},{0x90EC, 0xE057},
- {0x90ED, 0xB9F9},{0x90EE, 0xE058},{0x90EF, 0xDBB0},{0x90F0, 0xE059},{0x90F1, 0xE05A},{0x90F2, 0xE05B},{0x90F3, 0xE05C},{0x90F4, 0xB3BB},
- {0x90F5, 0xE05D},{0x90F6, 0xE05E},{0x90F7, 0xE05F},{0x90F8, 0xB5A6},{0x90F9, 0xE060},{0x90FA, 0xE061},{0x90FB, 0xE062},{0x90FC, 0xE063},
- {0x90FD, 0xB6BC},{0x90FE, 0xDBB1},{0x90FF, 0xE064},{0x9100, 0xE065},{0x9101, 0xE066},{0x9102, 0xB6F5},{0x9103, 0xE067},{0x9104, 0xDBB2},
- {0x9105, 0xE068},{0x9106, 0xE069},{0x9107, 0xE06A},{0x9108, 0xE06B},{0x9109, 0xE06C},{0x910A, 0xE06D},{0x910B, 0xE06E},{0x910C, 0xE06F},
- {0x910D, 0xE070},{0x910E, 0xE071},{0x910F, 0xE072},{0x9110, 0xE073},{0x9111, 0xE074},{0x9112, 0xE075},{0x9113, 0xE076},{0x9114, 0xE077},
- {0x9115, 0xE078},{0x9116, 0xE079},{0x9117, 0xE07A},{0x9118, 0xE07B},{0x9119, 0xB1C9},{0x911A, 0xE07C},{0x911B, 0xE07D},{0x911C, 0xE07E},
- {0x911D, 0xE080},{0x911E, 0xDBB4},{0x911F, 0xE081},{0x9120, 0xE082},{0x9121, 0xE083},{0x9122, 0xDBB3},{0x9123, 0xDBB5},{0x9124, 0xE084},
- {0x9125, 0xE085},{0x9126, 0xE086},{0x9127, 0xE087},{0x9128, 0xE088},{0x9129, 0xE089},{0x912A, 0xE08A},{0x912B, 0xE08B},{0x912C, 0xE08C},
- {0x912D, 0xE08D},{0x912E, 0xE08E},{0x912F, 0xDBB7},{0x9130, 0xE08F},{0x9131, 0xDBB6},{0x9132, 0xE090},{0x9133, 0xE091},{0x9134, 0xE092},
- {0x9135, 0xE093},{0x9136, 0xE094},{0x9137, 0xE095},{0x9138, 0xE096},{0x9139, 0xDBB8},{0x913A, 0xE097},{0x913B, 0xE098},{0x913C, 0xE099},
- {0x913D, 0xE09A},{0x913E, 0xE09B},{0x913F, 0xE09C},{0x9140, 0xE09D},{0x9141, 0xE09E},{0x9142, 0xE09F},{0x9143, 0xDBB9},{0x9144, 0xE0A0},
- {0x9145, 0xE140},{0x9146, 0xDBBA},{0x9147, 0xE141},{0x9148, 0xE142},{0x9149, 0xD3CF},{0x914A, 0xF4FA},{0x914B, 0xC7F5},{0x914C, 0xD7C3},
- {0x914D, 0xC5E4},{0x914E, 0xF4FC},{0x914F, 0xF4FD},{0x9150, 0xF4FB},{0x9151, 0xE143},{0x9152, 0xBEC6},{0x9153, 0xE144},{0x9154, 0xE145},
- {0x9155, 0xE146},{0x9156, 0xE147},{0x9157, 0xD0EF},{0x9158, 0xE148},{0x9159, 0xE149},{0x915A, 0xB7D3},{0x915B, 0xE14A},{0x915C, 0xE14B},
- {0x915D, 0xD4CD},{0x915E, 0xCCAA},{0x915F, 0xE14C},{0x9160, 0xE14D},{0x9161, 0xF5A2},{0x9162, 0xF5A1},{0x9163, 0xBAA8},{0x9164, 0xF4FE},
- {0x9165, 0xCBD6},{0x9166, 0xE14E},{0x9167, 0xE14F},{0x9168, 0xE150},{0x9169, 0xF5A4},{0x916A, 0xC0D2},{0x916B, 0xE151},{0x916C, 0xB3EA},
- {0x916D, 0xE152},{0x916E, 0xCDAA},{0x916F, 0xF5A5},{0x9170, 0xF5A3},{0x9171, 0xBDB4},{0x9172, 0xF5A8},{0x9173, 0xE153},{0x9174, 0xF5A9},
- {0x9175, 0xBDCD},{0x9176, 0xC3B8},{0x9177, 0xBFE1},{0x9178, 0xCBE1},{0x9179, 0xF5AA},{0x917A, 0xE154},{0x917B, 0xE155},{0x917C, 0xE156},
- {0x917D, 0xF5A6},{0x917E, 0xF5A7},{0x917F, 0xC4F0},{0x9180, 0xE157},{0x9181, 0xE158},{0x9182, 0xE159},{0x9183, 0xE15A},{0x9184, 0xE15B},
- {0x9185, 0xF5AC},{0x9186, 0xE15C},{0x9187, 0xB4BC},{0x9188, 0xE15D},{0x9189, 0xD7ED},{0x918A, 0xE15E},{0x918B, 0xB4D7},{0x918C, 0xF5AB},
- {0x918D, 0xF5AE},{0x918E, 0xE15F},{0x918F, 0xE160},{0x9190, 0xF5AD},{0x9191, 0xF5AF},{0x9192, 0xD0D1},{0x9193, 0xE161},{0x9194, 0xE162},
- {0x9195, 0xE163},{0x9196, 0xE164},{0x9197, 0xE165},{0x9198, 0xE166},{0x9199, 0xE167},{0x919A, 0xC3D1},{0x919B, 0xC8A9},{0x919C, 0xE168},
- {0x919D, 0xE169},{0x919E, 0xE16A},{0x919F, 0xE16B},{0x91A0, 0xE16C},{0x91A1, 0xE16D},{0x91A2, 0xF5B0},{0x91A3, 0xF5B1},{0x91A4, 0xE16E},
- {0x91A5, 0xE16F},{0x91A6, 0xE170},{0x91A7, 0xE171},{0x91A8, 0xE172},{0x91A9, 0xE173},{0x91AA, 0xF5B2},{0x91AB, 0xE174},{0x91AC, 0xE175},
- {0x91AD, 0xF5B3},{0x91AE, 0xF5B4},{0x91AF, 0xF5B5},{0x91B0, 0xE176},{0x91B1, 0xE177},{0x91B2, 0xE178},{0x91B3, 0xE179},{0x91B4, 0xF5B7},
- {0x91B5, 0xF5B6},{0x91B6, 0xE17A},{0x91B7, 0xE17B},{0x91B8, 0xE17C},{0x91B9, 0xE17D},{0x91BA, 0xF5B8},{0x91BB, 0xE17E},{0x91BC, 0xE180},
- {0x91BD, 0xE181},{0x91BE, 0xE182},{0x91BF, 0xE183},{0x91C0, 0xE184},{0x91C1, 0xE185},{0x91C2, 0xE186},{0x91C3, 0xE187},{0x91C4, 0xE188},
- {0x91C5, 0xE189},{0x91C6, 0xE18A},{0x91C7, 0xB2C9},{0x91C8, 0xE18B},{0x91C9, 0xD3D4},{0x91CA, 0xCACD},{0x91CB, 0xE18C},{0x91CC, 0xC0EF},
- {0x91CD, 0xD6D8},{0x91CE, 0xD2B0},{0x91CF, 0xC1BF},{0x91D0, 0xE18D},{0x91D1, 0xBDF0},{0x91D2, 0xE18E},{0x91D3, 0xE18F},{0x91D4, 0xE190},
- {0x91D5, 0xE191},{0x91D6, 0xE192},{0x91D7, 0xE193},{0x91D8, 0xE194},{0x91D9, 0xE195},{0x91DA, 0xE196},{0x91DB, 0xE197},{0x91DC, 0xB8AA},
- {0x91DD, 0xE198},{0x91DE, 0xE199},{0x91DF, 0xE19A},{0x91E0, 0xE19B},{0x91E1, 0xE19C},{0x91E2, 0xE19D},{0x91E3, 0xE19E},{0x91E4, 0xE19F},
- {0x91E5, 0xE1A0},{0x91E6, 0xE240},{0x91E7, 0xE241},{0x91E8, 0xE242},{0x91E9, 0xE243},{0x91EA, 0xE244},{0x91EB, 0xE245},{0x91EC, 0xE246},
- {0x91ED, 0xE247},{0x91EE, 0xE248},{0x91EF, 0xE249},{0x91F0, 0xE24A},{0x91F1, 0xE24B},{0x91F2, 0xE24C},{0x91F3, 0xE24D},{0x91F4, 0xE24E},
- {0x91F5, 0xE24F},{0x91F6, 0xE250},{0x91F7, 0xE251},{0x91F8, 0xE252},{0x91F9, 0xE253},{0x91FA, 0xE254},{0x91FB, 0xE255},{0x91FC, 0xE256},
- {0x91FD, 0xE257},{0x91FE, 0xE258},{0x91FF, 0xE259},{0x9200, 0xE25A},{0x9201, 0xE25B},{0x9202, 0xE25C},{0x9203, 0xE25D},{0x9204, 0xE25E},
- {0x9205, 0xE25F},{0x9206, 0xE260},{0x9207, 0xE261},{0x9208, 0xE262},{0x9209, 0xE263},{0x920A, 0xE264},{0x920B, 0xE265},{0x920C, 0xE266},
- {0x920D, 0xE267},{0x920E, 0xE268},{0x920F, 0xE269},{0x9210, 0xE26A},{0x9211, 0xE26B},{0x9212, 0xE26C},{0x9213, 0xE26D},{0x9214, 0xE26E},
- {0x9215, 0xE26F},{0x9216, 0xE270},{0x9217, 0xE271},{0x9218, 0xE272},{0x9219, 0xE273},{0x921A, 0xE274},{0x921B, 0xE275},{0x921C, 0xE276},
- {0x921D, 0xE277},{0x921E, 0xE278},{0x921F, 0xE279},{0x9220, 0xE27A},{0x9221, 0xE27B},{0x9222, 0xE27C},{0x9223, 0xE27D},{0x9224, 0xE27E},
- {0x9225, 0xE280},{0x9226, 0xE281},{0x9227, 0xE282},{0x9228, 0xE283},{0x9229, 0xE284},{0x922A, 0xE285},{0x922B, 0xE286},{0x922C, 0xE287},
- {0x922D, 0xE288},{0x922E, 0xE289},{0x922F, 0xE28A},{0x9230, 0xE28B},{0x9231, 0xE28C},{0x9232, 0xE28D},{0x9233, 0xE28E},{0x9234, 0xE28F},
- {0x9235, 0xE290},{0x9236, 0xE291},{0x9237, 0xE292},{0x9238, 0xE293},{0x9239, 0xE294},{0x923A, 0xE295},{0x923B, 0xE296},{0x923C, 0xE297},
- {0x923D, 0xE298},{0x923E, 0xE299},{0x923F, 0xE29A},{0x9240, 0xE29B},{0x9241, 0xE29C},{0x9242, 0xE29D},{0x9243, 0xE29E},{0x9244, 0xE29F},
- {0x9245, 0xE2A0},{0x9246, 0xE340},{0x9247, 0xE341},{0x9248, 0xE342},{0x9249, 0xE343},{0x924A, 0xE344},{0x924B, 0xE345},{0x924C, 0xE346},
- {0x924D, 0xE347},{0x924E, 0xE348},{0x924F, 0xE349},{0x9250, 0xE34A},{0x9251, 0xE34B},{0x9252, 0xE34C},{0x9253, 0xE34D},{0x9254, 0xE34E},
- {0x9255, 0xE34F},{0x9256, 0xE350},{0x9257, 0xE351},{0x9258, 0xE352},{0x9259, 0xE353},{0x925A, 0xE354},{0x925B, 0xE355},{0x925C, 0xE356},
- {0x925D, 0xE357},{0x925E, 0xE358},{0x925F, 0xE359},{0x9260, 0xE35A},{0x9261, 0xE35B},{0x9262, 0xE35C},{0x9263, 0xE35D},{0x9264, 0xE35E},
- {0x9265, 0xE35F},{0x9266, 0xE360},{0x9267, 0xE361},{0x9268, 0xE362},{0x9269, 0xE363},{0x926A, 0xE364},{0x926B, 0xE365},{0x926C, 0xE366},
- {0x926D, 0xE367},{0x926E, 0xE368},{0x926F, 0xE369},{0x9270, 0xE36A},{0x9271, 0xE36B},{0x9272, 0xE36C},{0x9273, 0xE36D},{0x9274, 0xBCF8},
- {0x9275, 0xE36E},{0x9276, 0xE36F},{0x9277, 0xE370},{0x9278, 0xE371},{0x9279, 0xE372},{0x927A, 0xE373},{0x927B, 0xE374},{0x927C, 0xE375},
- {0x927D, 0xE376},{0x927E, 0xE377},{0x927F, 0xE378},{0x9280, 0xE379},{0x9281, 0xE37A},{0x9282, 0xE37B},{0x9283, 0xE37C},{0x9284, 0xE37D},
- {0x9285, 0xE37E},{0x9286, 0xE380},{0x9287, 0xE381},{0x9288, 0xE382},{0x9289, 0xE383},{0x928A, 0xE384},{0x928B, 0xE385},{0x928C, 0xE386},
- {0x928D, 0xE387},{0x928E, 0xF6C6},{0x928F, 0xE388},{0x9290, 0xE389},{0x9291, 0xE38A},{0x9292, 0xE38B},{0x9293, 0xE38C},{0x9294, 0xE38D},
- {0x9295, 0xE38E},{0x9296, 0xE38F},{0x9297, 0xE390},{0x9298, 0xE391},{0x9299, 0xE392},{0x929A, 0xE393},{0x929B, 0xE394},{0x929C, 0xE395},
- {0x929D, 0xE396},{0x929E, 0xE397},{0x929F, 0xE398},{0x92A0, 0xE399},{0x92A1, 0xE39A},{0x92A2, 0xE39B},{0x92A3, 0xE39C},{0x92A4, 0xE39D},
- {0x92A5, 0xE39E},{0x92A6, 0xE39F},{0x92A7, 0xE3A0},{0x92A8, 0xE440},{0x92A9, 0xE441},{0x92AA, 0xE442},{0x92AB, 0xE443},{0x92AC, 0xE444},
- {0x92AD, 0xE445},{0x92AE, 0xF6C7},{0x92AF, 0xE446},{0x92B0, 0xE447},{0x92B1, 0xE448},{0x92B2, 0xE449},{0x92B3, 0xE44A},{0x92B4, 0xE44B},
- {0x92B5, 0xE44C},{0x92B6, 0xE44D},{0x92B7, 0xE44E},{0x92B8, 0xE44F},{0x92B9, 0xE450},{0x92BA, 0xE451},{0x92BB, 0xE452},{0x92BC, 0xE453},
- {0x92BD, 0xE454},{0x92BE, 0xE455},{0x92BF, 0xE456},{0x92C0, 0xE457},{0x92C1, 0xE458},{0x92C2, 0xE459},{0x92C3, 0xE45A},{0x92C4, 0xE45B},
- {0x92C5, 0xE45C},{0x92C6, 0xE45D},{0x92C7, 0xE45E},{0x92C8, 0xF6C8},{0x92C9, 0xE45F},{0x92CA, 0xE460},{0x92CB, 0xE461},{0x92CC, 0xE462},
- {0x92CD, 0xE463},{0x92CE, 0xE464},{0x92CF, 0xE465},{0x92D0, 0xE466},{0x92D1, 0xE467},{0x92D2, 0xE468},{0x92D3, 0xE469},{0x92D4, 0xE46A},
- {0x92D5, 0xE46B},{0x92D6, 0xE46C},{0x92D7, 0xE46D},{0x92D8, 0xE46E},{0x92D9, 0xE46F},{0x92DA, 0xE470},{0x92DB, 0xE471},{0x92DC, 0xE472},
- {0x92DD, 0xE473},{0x92DE, 0xE474},{0x92DF, 0xE475},{0x92E0, 0xE476},{0x92E1, 0xE477},{0x92E2, 0xE478},{0x92E3, 0xE479},{0x92E4, 0xE47A},
- {0x92E5, 0xE47B},{0x92E6, 0xE47C},{0x92E7, 0xE47D},{0x92E8, 0xE47E},{0x92E9, 0xE480},{0x92EA, 0xE481},{0x92EB, 0xE482},{0x92EC, 0xE483},
- {0x92ED, 0xE484},{0x92EE, 0xE485},{0x92EF, 0xE486},{0x92F0, 0xE487},{0x92F1, 0xE488},{0x92F2, 0xE489},{0x92F3, 0xE48A},{0x92F4, 0xE48B},
- {0x92F5, 0xE48C},{0x92F6, 0xE48D},{0x92F7, 0xE48E},{0x92F8, 0xE48F},{0x92F9, 0xE490},{0x92FA, 0xE491},{0x92FB, 0xE492},{0x92FC, 0xE493},
- {0x92FD, 0xE494},{0x92FE, 0xE495},{0x92FF, 0xE496},{0x9300, 0xE497},{0x9301, 0xE498},{0x9302, 0xE499},{0x9303, 0xE49A},{0x9304, 0xE49B},
- {0x9305, 0xE49C},{0x9306, 0xE49D},{0x9307, 0xE49E},{0x9308, 0xE49F},{0x9309, 0xE4A0},{0x930A, 0xE540},{0x930B, 0xE541},{0x930C, 0xE542},
- {0x930D, 0xE543},{0x930E, 0xE544},{0x930F, 0xE545},{0x9310, 0xE546},{0x9311, 0xE547},{0x9312, 0xE548},{0x9313, 0xE549},{0x9314, 0xE54A},
- {0x9315, 0xE54B},{0x9316, 0xE54C},{0x9317, 0xE54D},{0x9318, 0xE54E},{0x9319, 0xE54F},{0x931A, 0xE550},{0x931B, 0xE551},{0x931C, 0xE552},
- {0x931D, 0xE553},{0x931E, 0xE554},{0x931F, 0xE555},{0x9320, 0xE556},{0x9321, 0xE557},{0x9322, 0xE558},{0x9323, 0xE559},{0x9324, 0xE55A},
- {0x9325, 0xE55B},{0x9326, 0xE55C},{0x9327, 0xE55D},{0x9328, 0xE55E},{0x9329, 0xE55F},{0x932A, 0xE560},{0x932B, 0xE561},{0x932C, 0xE562},
- {0x932D, 0xE563},{0x932E, 0xE564},{0x932F, 0xE565},{0x9330, 0xE566},{0x9331, 0xE567},{0x9332, 0xE568},{0x9333, 0xE569},{0x9334, 0xE56A},
- {0x9335, 0xE56B},{0x9336, 0xE56C},{0x9337, 0xE56D},{0x9338, 0xE56E},{0x9339, 0xE56F},{0x933A, 0xE570},{0x933B, 0xE571},{0x933C, 0xE572},
- {0x933D, 0xE573},{0x933E, 0xF6C9},{0x933F, 0xE574},{0x9340, 0xE575},{0x9341, 0xE576},{0x9342, 0xE577},{0x9343, 0xE578},{0x9344, 0xE579},
- {0x9345, 0xE57A},{0x9346, 0xE57B},{0x9347, 0xE57C},{0x9348, 0xE57D},{0x9349, 0xE57E},{0x934A, 0xE580},{0x934B, 0xE581},{0x934C, 0xE582},
- {0x934D, 0xE583},{0x934E, 0xE584},{0x934F, 0xE585},{0x9350, 0xE586},{0x9351, 0xE587},{0x9352, 0xE588},{0x9353, 0xE589},{0x9354, 0xE58A},
- {0x9355, 0xE58B},{0x9356, 0xE58C},{0x9357, 0xE58D},{0x9358, 0xE58E},{0x9359, 0xE58F},{0x935A, 0xE590},{0x935B, 0xE591},{0x935C, 0xE592},
- {0x935D, 0xE593},{0x935E, 0xE594},{0x935F, 0xE595},{0x9360, 0xE596},{0x9361, 0xE597},{0x9362, 0xE598},{0x9363, 0xE599},{0x9364, 0xE59A},
- {0x9365, 0xE59B},{0x9366, 0xE59C},{0x9367, 0xE59D},{0x9368, 0xE59E},{0x9369, 0xE59F},{0x936A, 0xF6CA},{0x936B, 0xE5A0},{0x936C, 0xE640},
- {0x936D, 0xE641},{0x936E, 0xE642},{0x936F, 0xE643},{0x9370, 0xE644},{0x9371, 0xE645},{0x9372, 0xE646},{0x9373, 0xE647},{0x9374, 0xE648},
- {0x9375, 0xE649},{0x9376, 0xE64A},{0x9377, 0xE64B},{0x9378, 0xE64C},{0x9379, 0xE64D},{0x937A, 0xE64E},{0x937B, 0xE64F},{0x937C, 0xE650},
- {0x937D, 0xE651},{0x937E, 0xE652},{0x937F, 0xE653},{0x9380, 0xE654},{0x9381, 0xE655},{0x9382, 0xE656},{0x9383, 0xE657},{0x9384, 0xE658},
- {0x9385, 0xE659},{0x9386, 0xE65A},{0x9387, 0xE65B},{0x9388, 0xE65C},{0x9389, 0xE65D},{0x938A, 0xE65E},{0x938B, 0xE65F},{0x938C, 0xE660},
- {0x938D, 0xE661},{0x938E, 0xE662},{0x938F, 0xF6CC},{0x9390, 0xE663},{0x9391, 0xE664},{0x9392, 0xE665},{0x9393, 0xE666},{0x9394, 0xE667},
- {0x9395, 0xE668},{0x9396, 0xE669},{0x9397, 0xE66A},{0x9398, 0xE66B},{0x9399, 0xE66C},{0x939A, 0xE66D},{0x939B, 0xE66E},{0x939C, 0xE66F},
- {0x939D, 0xE670},{0x939E, 0xE671},{0x939F, 0xE672},{0x93A0, 0xE673},{0x93A1, 0xE674},{0x93A2, 0xE675},{0x93A3, 0xE676},{0x93A4, 0xE677},
- {0x93A5, 0xE678},{0x93A6, 0xE679},{0x93A7, 0xE67A},{0x93A8, 0xE67B},{0x93A9, 0xE67C},{0x93AA, 0xE67D},{0x93AB, 0xE67E},{0x93AC, 0xE680},
- {0x93AD, 0xE681},{0x93AE, 0xE682},{0x93AF, 0xE683},{0x93B0, 0xE684},{0x93B1, 0xE685},{0x93B2, 0xE686},{0x93B3, 0xE687},{0x93B4, 0xE688},
- {0x93B5, 0xE689},{0x93B6, 0xE68A},{0x93B7, 0xE68B},{0x93B8, 0xE68C},{0x93B9, 0xE68D},{0x93BA, 0xE68E},{0x93BB, 0xE68F},{0x93BC, 0xE690},
- {0x93BD, 0xE691},{0x93BE, 0xE692},{0x93BF, 0xE693},{0x93C0, 0xE694},{0x93C1, 0xE695},{0x93C2, 0xE696},{0x93C3, 0xE697},{0x93C4, 0xE698},
- {0x93C5, 0xE699},{0x93C6, 0xE69A},{0x93C7, 0xE69B},{0x93C8, 0xE69C},{0x93C9, 0xE69D},{0x93CA, 0xF6CB},{0x93CB, 0xE69E},{0x93CC, 0xE69F},
- {0x93CD, 0xE6A0},{0x93CE, 0xE740},{0x93CF, 0xE741},{0x93D0, 0xE742},{0x93D1, 0xE743},{0x93D2, 0xE744},{0x93D3, 0xE745},{0x93D4, 0xE746},
- {0x93D5, 0xE747},{0x93D6, 0xF7E9},{0x93D7, 0xE748},{0x93D8, 0xE749},{0x93D9, 0xE74A},{0x93DA, 0xE74B},{0x93DB, 0xE74C},{0x93DC, 0xE74D},
- {0x93DD, 0xE74E},{0x93DE, 0xE74F},{0x93DF, 0xE750},{0x93E0, 0xE751},{0x93E1, 0xE752},{0x93E2, 0xE753},{0x93E3, 0xE754},{0x93E4, 0xE755},
- {0x93E5, 0xE756},{0x93E6, 0xE757},{0x93E7, 0xE758},{0x93E8, 0xE759},{0x93E9, 0xE75A},{0x93EA, 0xE75B},{0x93EB, 0xE75C},{0x93EC, 0xE75D},
- {0x93ED, 0xE75E},{0x93EE, 0xE75F},{0x93EF, 0xE760},{0x93F0, 0xE761},{0x93F1, 0xE762},{0x93F2, 0xE763},{0x93F3, 0xE764},{0x93F4, 0xE765},
- {0x93F5, 0xE766},{0x93F6, 0xE767},{0x93F7, 0xE768},{0x93F8, 0xE769},{0x93F9, 0xE76A},{0x93FA, 0xE76B},{0x93FB, 0xE76C},{0x93FC, 0xE76D},
- {0x93FD, 0xE76E},{0x93FE, 0xE76F},{0x93FF, 0xE770},{0x9400, 0xE771},{0x9401, 0xE772},{0x9402, 0xE773},{0x9403, 0xE774},{0x9404, 0xE775},
- {0x9405, 0xE776},{0x9406, 0xE777},{0x9407, 0xE778},{0x9408, 0xE779},{0x9409, 0xE77A},{0x940A, 0xE77B},{0x940B, 0xE77C},{0x940C, 0xE77D},
- {0x940D, 0xE77E},{0x940E, 0xE780},{0x940F, 0xE781},{0x9410, 0xE782},{0x9411, 0xE783},{0x9412, 0xE784},{0x9413, 0xE785},{0x9414, 0xE786},
- {0x9415, 0xE787},{0x9416, 0xE788},{0x9417, 0xE789},{0x9418, 0xE78A},{0x9419, 0xE78B},{0x941A, 0xE78C},{0x941B, 0xE78D},{0x941C, 0xE78E},
- {0x941D, 0xE78F},{0x941E, 0xE790},{0x941F, 0xE791},{0x9420, 0xE792},{0x9421, 0xE793},{0x9422, 0xE794},{0x9423, 0xE795},{0x9424, 0xE796},
- {0x9425, 0xE797},{0x9426, 0xE798},{0x9427, 0xE799},{0x9428, 0xE79A},{0x9429, 0xE79B},{0x942A, 0xE79C},{0x942B, 0xE79D},{0x942C, 0xE79E},
- {0x942D, 0xE79F},{0x942E, 0xE7A0},{0x942F, 0xE840},{0x9430, 0xE841},{0x9431, 0xE842},{0x9432, 0xE843},{0x9433, 0xE844},{0x9434, 0xE845},
- {0x9435, 0xE846},{0x9436, 0xE847},{0x9437, 0xE848},{0x9438, 0xE849},{0x9439, 0xE84A},{0x943A, 0xE84B},{0x943B, 0xE84C},{0x943C, 0xE84D},
- {0x943D, 0xE84E},{0x943E, 0xF6CD},{0x943F, 0xE84F},{0x9440, 0xE850},{0x9441, 0xE851},{0x9442, 0xE852},{0x9443, 0xE853},{0x9444, 0xE854},
- {0x9445, 0xE855},{0x9446, 0xE856},{0x9447, 0xE857},{0x9448, 0xE858},{0x9449, 0xE859},{0x944A, 0xE85A},{0x944B, 0xE85B},{0x944C, 0xE85C},
- {0x944D, 0xE85D},{0x944E, 0xE85E},{0x944F, 0xE85F},{0x9450, 0xE860},{0x9451, 0xE861},{0x9452, 0xE862},{0x9453, 0xE863},{0x9454, 0xE864},
- {0x9455, 0xE865},{0x9456, 0xE866},{0x9457, 0xE867},{0x9458, 0xE868},{0x9459, 0xE869},{0x945A, 0xE86A},{0x945B, 0xE86B},{0x945C, 0xE86C},
- {0x945D, 0xE86D},{0x945E, 0xE86E},{0x945F, 0xE86F},{0x9460, 0xE870},{0x9461, 0xE871},{0x9462, 0xE872},{0x9463, 0xE873},{0x9464, 0xE874},
- {0x9465, 0xE875},{0x9466, 0xE876},{0x9467, 0xE877},{0x9468, 0xE878},{0x9469, 0xE879},{0x946A, 0xE87A},{0x946B, 0xF6CE},{0x946C, 0xE87B},
- {0x946D, 0xE87C},{0x946E, 0xE87D},{0x946F, 0xE87E},{0x9470, 0xE880},{0x9471, 0xE881},{0x9472, 0xE882},{0x9473, 0xE883},{0x9474, 0xE884},
- {0x9475, 0xE885},{0x9476, 0xE886},{0x9477, 0xE887},{0x9478, 0xE888},{0x9479, 0xE889},{0x947A, 0xE88A},{0x947B, 0xE88B},{0x947C, 0xE88C},
- {0x947D, 0xE88D},{0x947E, 0xE88E},{0x947F, 0xE88F},{0x9480, 0xE890},{0x9481, 0xE891},{0x9482, 0xE892},{0x9483, 0xE893},{0x9484, 0xE894},
- {0x9485, 0xEEC4},{0x9486, 0xEEC5},{0x9487, 0xEEC6},{0x9488, 0xD5EB},{0x9489, 0xB6A4},{0x948A, 0xEEC8},{0x948B, 0xEEC7},{0x948C, 0xEEC9},
- {0x948D, 0xEECA},{0x948E, 0xC7A5},{0x948F, 0xEECB},{0x9490, 0xEECC},{0x9491, 0xE895},{0x9492, 0xB7B0},{0x9493, 0xB5F6},{0x9494, 0xEECD},
- {0x9495, 0xEECF},{0x9496, 0xE896},{0x9497, 0xEECE},{0x9498, 0xE897},{0x9499, 0xB8C6},{0x949A, 0xEED0},{0x949B, 0xEED1},{0x949C, 0xEED2},
- {0x949D, 0xB6DB},{0x949E, 0xB3AE},{0x949F, 0xD6D3},{0x94A0, 0xC4C6},{0x94A1, 0xB1B5},{0x94A2, 0xB8D6},{0x94A3, 0xEED3},{0x94A4, 0xEED4},
- {0x94A5, 0xD4BF},{0x94A6, 0xC7D5},{0x94A7, 0xBEFB},{0x94A8, 0xCED9},{0x94A9, 0xB9B3},{0x94AA, 0xEED6},{0x94AB, 0xEED5},{0x94AC, 0xEED8},
- {0x94AD, 0xEED7},{0x94AE, 0xC5A5},{0x94AF, 0xEED9},{0x94B0, 0xEEDA},{0x94B1, 0xC7AE},{0x94B2, 0xEEDB},{0x94B3, 0xC7AF},{0x94B4, 0xEEDC},
- {0x94B5, 0xB2A7},{0x94B6, 0xEEDD},{0x94B7, 0xEEDE},{0x94B8, 0xEEDF},{0x94B9, 0xEEE0},{0x94BA, 0xEEE1},{0x94BB, 0xD7EA},{0x94BC, 0xEEE2},
- {0x94BD, 0xEEE3},{0x94BE, 0xBCD8},{0x94BF, 0xEEE4},{0x94C0, 0xD3CB},{0x94C1, 0xCCFA},{0x94C2, 0xB2AC},{0x94C3, 0xC1E5},{0x94C4, 0xEEE5},
- {0x94C5, 0xC7A6},{0x94C6, 0xC3AD},{0x94C7, 0xE898},{0x94C8, 0xEEE6},{0x94C9, 0xEEE7},{0x94CA, 0xEEE8},{0x94CB, 0xEEE9},{0x94CC, 0xEEEA},
- {0x94CD, 0xEEEB},{0x94CE, 0xEEEC},{0x94CF, 0xE899},{0x94D0, 0xEEED},{0x94D1, 0xEEEE},{0x94D2, 0xEEEF},{0x94D3, 0xE89A},{0x94D4, 0xE89B},
- {0x94D5, 0xEEF0},{0x94D6, 0xEEF1},{0x94D7, 0xEEF2},{0x94D8, 0xEEF4},{0x94D9, 0xEEF3},{0x94DA, 0xE89C},{0x94DB, 0xEEF5},{0x94DC, 0xCDAD},
- {0x94DD, 0xC2C1},{0x94DE, 0xEEF6},{0x94DF, 0xEEF7},{0x94E0, 0xEEF8},{0x94E1, 0xD5A1},{0x94E2, 0xEEF9},{0x94E3, 0xCFB3},{0x94E4, 0xEEFA},
- {0x94E5, 0xEEFB},{0x94E6, 0xE89D},{0x94E7, 0xEEFC},{0x94E8, 0xEEFD},{0x94E9, 0xEFA1},{0x94EA, 0xEEFE},{0x94EB, 0xEFA2},{0x94EC, 0xB8F5},
- {0x94ED, 0xC3FA},{0x94EE, 0xEFA3},{0x94EF, 0xEFA4},{0x94F0, 0xBDC2},{0x94F1, 0xD2BF},{0x94F2, 0xB2F9},{0x94F3, 0xEFA5},{0x94F4, 0xEFA6},
- {0x94F5, 0xEFA7},{0x94F6, 0xD2F8},{0x94F7, 0xEFA8},{0x94F8, 0xD6FD},{0x94F9, 0xEFA9},{0x94FA, 0xC6CC},{0x94FB, 0xE89E},{0x94FC, 0xEFAA},
- {0x94FD, 0xEFAB},{0x94FE, 0xC1B4},{0x94FF, 0xEFAC},{0x9500, 0xCFFA},{0x9501, 0xCBF8},{0x9502, 0xEFAE},{0x9503, 0xEFAD},{0x9504, 0xB3FA},
- {0x9505, 0xB9F8},{0x9506, 0xEFAF},{0x9507, 0xEFB0},{0x9508, 0xD0E2},{0x9509, 0xEFB1},{0x950A, 0xEFB2},{0x950B, 0xB7E6},{0x950C, 0xD0BF},
- {0x950D, 0xEFB3},{0x950E, 0xEFB4},{0x950F, 0xEFB5},{0x9510, 0xC8F1},{0x9511, 0xCCE0},{0x9512, 0xEFB6},{0x9513, 0xEFB7},{0x9514, 0xEFB8},
- {0x9515, 0xEFB9},{0x9516, 0xEFBA},{0x9517, 0xD5E0},{0x9518, 0xEFBB},{0x9519, 0xB4ED},{0x951A, 0xC3AA},{0x951B, 0xEFBC},{0x951C, 0xE89F},
- {0x951D, 0xEFBD},{0x951E, 0xEFBE},{0x951F, 0xEFBF},{0x9520, 0xE8A0},{0x9521, 0xCEFD},{0x9522, 0xEFC0},{0x9523, 0xC2E0},{0x9524, 0xB4B8},
- {0x9525, 0xD7B6},{0x9526, 0xBDF5},{0x9527, 0xE940},{0x9528, 0xCFC7},{0x9529, 0xEFC3},{0x952A, 0xEFC1},{0x952B, 0xEFC2},{0x952C, 0xEFC4},
- {0x952D, 0xB6A7},{0x952E, 0xBCFC},{0x952F, 0xBEE2},{0x9530, 0xC3CC},{0x9531, 0xEFC5},{0x9532, 0xEFC6},{0x9533, 0xE941},{0x9534, 0xEFC7},
- {0x9535, 0xEFCF},{0x9536, 0xEFC8},{0x9537, 0xEFC9},{0x9538, 0xEFCA},{0x9539, 0xC7C2},{0x953A, 0xEFF1},{0x953B, 0xB6CD},{0x953C, 0xEFCB},
- {0x953D, 0xE942},{0x953E, 0xEFCC},{0x953F, 0xEFCD},{0x9540, 0xB6C6},{0x9541, 0xC3BE},{0x9542, 0xEFCE},{0x9543, 0xE943},{0x9544, 0xEFD0},
- {0x9545, 0xEFD1},{0x9546, 0xEFD2},{0x9547, 0xD5F2},{0x9548, 0xE944},{0x9549, 0xEFD3},{0x954A, 0xC4F7},{0x954B, 0xE945},{0x954C, 0xEFD4},
- {0x954D, 0xC4F8},{0x954E, 0xEFD5},{0x954F, 0xEFD6},{0x9550, 0xB8E4},{0x9551, 0xB0F7},{0x9552, 0xEFD7},{0x9553, 0xEFD8},{0x9554, 0xEFD9},
- {0x9555, 0xE946},{0x9556, 0xEFDA},{0x9557, 0xEFDB},{0x9558, 0xEFDC},{0x9559, 0xEFDD},{0x955A, 0xE947},{0x955B, 0xEFDE},{0x955C, 0xBEB5},
- {0x955D, 0xEFE1},{0x955E, 0xEFDF},{0x955F, 0xEFE0},{0x9560, 0xE948},{0x9561, 0xEFE2},{0x9562, 0xEFE3},{0x9563, 0xC1CD},{0x9564, 0xEFE4},
- {0x9565, 0xEFE5},{0x9566, 0xEFE6},{0x9567, 0xEFE7},{0x9568, 0xEFE8},{0x9569, 0xEFE9},{0x956A, 0xEFEA},{0x956B, 0xEFEB},{0x956C, 0xEFEC},
- {0x956D, 0xC0D8},{0x956E, 0xE949},{0x956F, 0xEFED},{0x9570, 0xC1AD},{0x9571, 0xEFEE},{0x9572, 0xEFEF},{0x9573, 0xEFF0},{0x9574, 0xE94A},
- {0x9575, 0xE94B},{0x9576, 0xCFE2},{0x9577, 0xE94C},{0x9578, 0xE94D},{0x9579, 0xE94E},{0x957A, 0xE94F},{0x957B, 0xE950},{0x957C, 0xE951},
- {0x957D, 0xE952},{0x957E, 0xE953},{0x957F, 0xB3A4},{0x9580, 0xE954},{0x9581, 0xE955},{0x9582, 0xE956},{0x9583, 0xE957},{0x9584, 0xE958},
- {0x9585, 0xE959},{0x9586, 0xE95A},{0x9587, 0xE95B},{0x9588, 0xE95C},{0x9589, 0xE95D},{0x958A, 0xE95E},{0x958B, 0xE95F},{0x958C, 0xE960},
- {0x958D, 0xE961},{0x958E, 0xE962},{0x958F, 0xE963},{0x9590, 0xE964},{0x9591, 0xE965},{0x9592, 0xE966},{0x9593, 0xE967},{0x9594, 0xE968},
- {0x9595, 0xE969},{0x9596, 0xE96A},{0x9597, 0xE96B},{0x9598, 0xE96C},{0x9599, 0xE96D},{0x959A, 0xE96E},{0x959B, 0xE96F},{0x959C, 0xE970},
- {0x959D, 0xE971},{0x959E, 0xE972},{0x959F, 0xE973},{0x95A0, 0xE974},{0x95A1, 0xE975},{0x95A2, 0xE976},{0x95A3, 0xE977},{0x95A4, 0xE978},
- {0x95A5, 0xE979},{0x95A6, 0xE97A},{0x95A7, 0xE97B},{0x95A8, 0xE97C},{0x95A9, 0xE97D},{0x95AA, 0xE97E},{0x95AB, 0xE980},{0x95AC, 0xE981},
- {0x95AD, 0xE982},{0x95AE, 0xE983},{0x95AF, 0xE984},{0x95B0, 0xE985},{0x95B1, 0xE986},{0x95B2, 0xE987},{0x95B3, 0xE988},{0x95B4, 0xE989},
- {0x95B5, 0xE98A},{0x95B6, 0xE98B},{0x95B7, 0xE98C},{0x95B8, 0xE98D},{0x95B9, 0xE98E},{0x95BA, 0xE98F},{0x95BB, 0xE990},{0x95BC, 0xE991},
- {0x95BD, 0xE992},{0x95BE, 0xE993},{0x95BF, 0xE994},{0x95C0, 0xE995},{0x95C1, 0xE996},{0x95C2, 0xE997},{0x95C3, 0xE998},{0x95C4, 0xE999},
- {0x95C5, 0xE99A},{0x95C6, 0xE99B},{0x95C7, 0xE99C},{0x95C8, 0xE99D},{0x95C9, 0xE99E},{0x95CA, 0xE99F},{0x95CB, 0xE9A0},{0x95CC, 0xEA40},
- {0x95CD, 0xEA41},{0x95CE, 0xEA42},{0x95CF, 0xEA43},{0x95D0, 0xEA44},{0x95D1, 0xEA45},{0x95D2, 0xEA46},{0x95D3, 0xEA47},{0x95D4, 0xEA48},
- {0x95D5, 0xEA49},{0x95D6, 0xEA4A},{0x95D7, 0xEA4B},{0x95D8, 0xEA4C},{0x95D9, 0xEA4D},{0x95DA, 0xEA4E},{0x95DB, 0xEA4F},{0x95DC, 0xEA50},
- {0x95DD, 0xEA51},{0x95DE, 0xEA52},{0x95DF, 0xEA53},{0x95E0, 0xEA54},{0x95E1, 0xEA55},{0x95E2, 0xEA56},{0x95E3, 0xEA57},{0x95E4, 0xEA58},
- {0x95E5, 0xEA59},{0x95E6, 0xEA5A},{0x95E7, 0xEA5B},{0x95E8, 0xC3C5},{0x95E9, 0xE3C5},{0x95EA, 0xC9C1},{0x95EB, 0xE3C6},{0x95EC, 0xEA5C},
- {0x95ED, 0xB1D5},{0x95EE, 0xCECA},{0x95EF, 0xB4B3},{0x95F0, 0xC8F2},{0x95F1, 0xE3C7},{0x95F2, 0xCFD0},{0x95F3, 0xE3C8},{0x95F4, 0xBCE4},
- {0x95F5, 0xE3C9},{0x95F6, 0xE3CA},{0x95F7, 0xC3C6},{0x95F8, 0xD5A2},{0x95F9, 0xC4D6},{0x95FA, 0xB9EB},{0x95FB, 0xCEC5},{0x95FC, 0xE3CB},
- {0x95FD, 0xC3F6},{0x95FE, 0xE3CC},{0x95FF, 0xEA5D},{0x9600, 0xB7A7},{0x9601, 0xB8F3},{0x9602, 0xBAD2},{0x9603, 0xE3CD},{0x9604, 0xE3CE},
- {0x9605, 0xD4C4},{0x9606, 0xE3CF},{0x9607, 0xEA5E},{0x9608, 0xE3D0},{0x9609, 0xD1CB},{0x960A, 0xE3D1},{0x960B, 0xE3D2},{0x960C, 0xE3D3},
- {0x960D, 0xE3D4},{0x960E, 0xD1D6},{0x960F, 0xE3D5},{0x9610, 0xB2FB},{0x9611, 0xC0BB},{0x9612, 0xE3D6},{0x9613, 0xEA5F},{0x9614, 0xC0AB},
- {0x9615, 0xE3D7},{0x9616, 0xE3D8},{0x9617, 0xE3D9},{0x9618, 0xEA60},{0x9619, 0xE3DA},{0x961A, 0xE3DB},{0x961B, 0xEA61},{0x961C, 0xB8B7},
- {0x961D, 0xDAE2},{0x961E, 0xEA62},{0x961F, 0xB6D3},{0x9620, 0xEA63},{0x9621, 0xDAE4},{0x9622, 0xDAE3},{0x9623, 0xEA64},{0x9624, 0xEA65},
- {0x9625, 0xEA66},{0x9626, 0xEA67},{0x9627, 0xEA68},{0x9628, 0xEA69},{0x9629, 0xEA6A},{0x962A, 0xDAE6},{0x962B, 0xEA6B},{0x962C, 0xEA6C},
- {0x962D, 0xEA6D},{0x962E, 0xC8EE},{0x962F, 0xEA6E},{0x9630, 0xEA6F},{0x9631, 0xDAE5},{0x9632, 0xB7C0},{0x9633, 0xD1F4},{0x9634, 0xD2F5},
- {0x9635, 0xD5F3},{0x9636, 0xBDD7},{0x9637, 0xEA70},{0x9638, 0xEA71},{0x9639, 0xEA72},{0x963A, 0xEA73},{0x963B, 0xD7E8},{0x963C, 0xDAE8},
- {0x963D, 0xDAE7},{0x963E, 0xEA74},{0x963F, 0xB0A2},{0x9640, 0xCDD3},{0x9641, 0xEA75},{0x9642, 0xDAE9},{0x9643, 0xEA76},{0x9644, 0xB8BD},
- {0x9645, 0xBCCA},{0x9646, 0xC2BD},{0x9647, 0xC2A4},{0x9648, 0xB3C2},{0x9649, 0xDAEA},{0x964A, 0xEA77},{0x964B, 0xC2AA},{0x964C, 0xC4B0},
- {0x964D, 0xBDB5},{0x964E, 0xEA78},{0x964F, 0xEA79},{0x9650, 0xCFDE},{0x9651, 0xEA7A},{0x9652, 0xEA7B},{0x9653, 0xEA7C},{0x9654, 0xDAEB},
- {0x9655, 0xC9C2},{0x9656, 0xEA7D},{0x9657, 0xEA7E},{0x9658, 0xEA80},{0x9659, 0xEA81},{0x965A, 0xEA82},{0x965B, 0xB1DD},{0x965C, 0xEA83},
- {0x965D, 0xEA84},{0x965E, 0xEA85},{0x965F, 0xDAEC},{0x9660, 0xEA86},{0x9661, 0xB6B8},{0x9662, 0xD4BA},{0x9663, 0xEA87},{0x9664, 0xB3FD},
- {0x9665, 0xEA88},{0x9666, 0xEA89},{0x9667, 0xDAED},{0x9668, 0xD4C9},{0x9669, 0xCFD5},{0x966A, 0xC5E3},{0x966B, 0xEA8A},{0x966C, 0xDAEE},
- {0x966D, 0xEA8B},{0x966E, 0xEA8C},{0x966F, 0xEA8D},{0x9670, 0xEA8E},{0x9671, 0xEA8F},{0x9672, 0xDAEF},{0x9673, 0xEA90},{0x9674, 0xDAF0},
- {0x9675, 0xC1EA},{0x9676, 0xCCD5},{0x9677, 0xCFDD},{0x9678, 0xEA91},{0x9679, 0xEA92},{0x967A, 0xEA93},{0x967B, 0xEA94},{0x967C, 0xEA95},
- {0x967D, 0xEA96},{0x967E, 0xEA97},{0x967F, 0xEA98},{0x9680, 0xEA99},{0x9681, 0xEA9A},{0x9682, 0xEA9B},{0x9683, 0xEA9C},{0x9684, 0xEA9D},
- {0x9685, 0xD3E7},{0x9686, 0xC2A1},{0x9687, 0xEA9E},{0x9688, 0xDAF1},{0x9689, 0xEA9F},{0x968A, 0xEAA0},{0x968B, 0xCBE5},{0x968C, 0xEB40},
- {0x968D, 0xDAF2},{0x968E, 0xEB41},{0x968F, 0xCBE6},{0x9690, 0xD2FE},{0x9691, 0xEB42},{0x9692, 0xEB43},{0x9693, 0xEB44},{0x9694, 0xB8F4},
- {0x9695, 0xEB45},{0x9696, 0xEB46},{0x9697, 0xDAF3},{0x9698, 0xB0AF},{0x9699, 0xCFB6},{0x969A, 0xEB47},{0x969B, 0xEB48},{0x969C, 0xD5CF},
- {0x969D, 0xEB49},{0x969E, 0xEB4A},{0x969F, 0xEB4B},{0x96A0, 0xEB4C},{0x96A1, 0xEB4D},{0x96A2, 0xEB4E},{0x96A3, 0xEB4F},{0x96A4, 0xEB50},
- {0x96A5, 0xEB51},{0x96A6, 0xEB52},{0x96A7, 0xCBED},{0x96A8, 0xEB53},{0x96A9, 0xEB54},{0x96AA, 0xEB55},{0x96AB, 0xEB56},{0x96AC, 0xEB57},
- {0x96AD, 0xEB58},{0x96AE, 0xEB59},{0x96AF, 0xEB5A},{0x96B0, 0xDAF4},{0x96B1, 0xEB5B},{0x96B2, 0xEB5C},{0x96B3, 0xE3C4},{0x96B4, 0xEB5D},
- {0x96B5, 0xEB5E},{0x96B6, 0xC1A5},{0x96B7, 0xEB5F},{0x96B8, 0xEB60},{0x96B9, 0xF6BF},{0x96BA, 0xEB61},{0x96BB, 0xEB62},{0x96BC, 0xF6C0},
- {0x96BD, 0xF6C1},{0x96BE, 0xC4D1},{0x96BF, 0xEB63},{0x96C0, 0xC8B8},{0x96C1, 0xD1E3},{0x96C2, 0xEB64},{0x96C3, 0xEB65},{0x96C4, 0xD0DB},
- {0x96C5, 0xD1C5},{0x96C6, 0xBCAF},{0x96C7, 0xB9CD},{0x96C8, 0xEB66},{0x96C9, 0xEFF4},{0x96CA, 0xEB67},{0x96CB, 0xEB68},{0x96CC, 0xB4C6},
- {0x96CD, 0xD3BA},{0x96CE, 0xF6C2},{0x96CF, 0xB3FB},{0x96D0, 0xEB69},{0x96D1, 0xEB6A},{0x96D2, 0xF6C3},{0x96D3, 0xEB6B},{0x96D4, 0xEB6C},
- {0x96D5, 0xB5F1},{0x96D6, 0xEB6D},{0x96D7, 0xEB6E},{0x96D8, 0xEB6F},{0x96D9, 0xEB70},{0x96DA, 0xEB71},{0x96DB, 0xEB72},{0x96DC, 0xEB73},
- {0x96DD, 0xEB74},{0x96DE, 0xEB75},{0x96DF, 0xEB76},{0x96E0, 0xF6C5},{0x96E1, 0xEB77},{0x96E2, 0xEB78},{0x96E3, 0xEB79},{0x96E4, 0xEB7A},
- {0x96E5, 0xEB7B},{0x96E6, 0xEB7C},{0x96E7, 0xEB7D},{0x96E8, 0xD3EA},{0x96E9, 0xF6A7},{0x96EA, 0xD1A9},{0x96EB, 0xEB7E},{0x96EC, 0xEB80},
- {0x96ED, 0xEB81},{0x96EE, 0xEB82},{0x96EF, 0xF6A9},{0x96F0, 0xEB83},{0x96F1, 0xEB84},{0x96F2, 0xEB85},{0x96F3, 0xF6A8},{0x96F4, 0xEB86},
- {0x96F5, 0xEB87},{0x96F6, 0xC1E3},{0x96F7, 0xC0D7},{0x96F8, 0xEB88},{0x96F9, 0xB1A2},{0x96FA, 0xEB89},{0x96FB, 0xEB8A},{0x96FC, 0xEB8B},
- {0x96FD, 0xEB8C},{0x96FE, 0xCEED},{0x96FF, 0xEB8D},{0x9700, 0xD0E8},{0x9701, 0xF6AB},{0x9702, 0xEB8E},{0x9703, 0xEB8F},{0x9704, 0xCFF6},
- {0x9705, 0xEB90},{0x9706, 0xF6AA},{0x9707, 0xD5F0},{0x9708, 0xF6AC},{0x9709, 0xC3B9},{0x970A, 0xEB91},{0x970B, 0xEB92},{0x970C, 0xEB93},
- {0x970D, 0xBBF4},{0x970E, 0xF6AE},{0x970F, 0xF6AD},{0x9710, 0xEB94},{0x9711, 0xEB95},{0x9712, 0xEB96},{0x9713, 0xC4DE},{0x9714, 0xEB97},
- {0x9715, 0xEB98},{0x9716, 0xC1D8},{0x9717, 0xEB99},{0x9718, 0xEB9A},{0x9719, 0xEB9B},{0x971A, 0xEB9C},{0x971B, 0xEB9D},{0x971C, 0xCBAA},
- {0x971D, 0xEB9E},{0x971E, 0xCFBC},{0x971F, 0xEB9F},{0x9720, 0xEBA0},{0x9721, 0xEC40},{0x9722, 0xEC41},{0x9723, 0xEC42},{0x9724, 0xEC43},
- {0x9725, 0xEC44},{0x9726, 0xEC45},{0x9727, 0xEC46},{0x9728, 0xEC47},{0x9729, 0xEC48},{0x972A, 0xF6AF},{0x972B, 0xEC49},{0x972C, 0xEC4A},
- {0x972D, 0xF6B0},{0x972E, 0xEC4B},{0x972F, 0xEC4C},{0x9730, 0xF6B1},{0x9731, 0xEC4D},{0x9732, 0xC2B6},{0x9733, 0xEC4E},{0x9734, 0xEC4F},
- {0x9735, 0xEC50},{0x9736, 0xEC51},{0x9737, 0xEC52},{0x9738, 0xB0D4},{0x9739, 0xC5F9},{0x973A, 0xEC53},{0x973B, 0xEC54},{0x973C, 0xEC55},
- {0x973D, 0xEC56},{0x973E, 0xF6B2},{0x973F, 0xEC57},{0x9740, 0xEC58},{0x9741, 0xEC59},{0x9742, 0xEC5A},{0x9743, 0xEC5B},{0x9744, 0xEC5C},
- {0x9745, 0xEC5D},{0x9746, 0xEC5E},{0x9747, 0xEC5F},{0x9748, 0xEC60},{0x9749, 0xEC61},{0x974A, 0xEC62},{0x974B, 0xEC63},{0x974C, 0xEC64},
- {0x974D, 0xEC65},{0x974E, 0xEC66},{0x974F, 0xEC67},{0x9750, 0xEC68},{0x9751, 0xEC69},{0x9752, 0xC7E0},{0x9753, 0xF6A6},{0x9754, 0xEC6A},
- {0x9755, 0xEC6B},{0x9756, 0xBEB8},{0x9757, 0xEC6C},{0x9758, 0xEC6D},{0x9759, 0xBEB2},{0x975A, 0xEC6E},{0x975B, 0xB5E5},{0x975C, 0xEC6F},
- {0x975D, 0xEC70},{0x975E, 0xB7C7},{0x975F, 0xEC71},{0x9760, 0xBFBF},{0x9761, 0xC3D2},{0x9762, 0xC3E6},{0x9763, 0xEC72},{0x9764, 0xEC73},
- {0x9765, 0xD8CC},{0x9766, 0xEC74},{0x9767, 0xEC75},{0x9768, 0xEC76},{0x9769, 0xB8EF},{0x976A, 0xEC77},{0x976B, 0xEC78},{0x976C, 0xEC79},
- {0x976D, 0xEC7A},{0x976E, 0xEC7B},{0x976F, 0xEC7C},{0x9770, 0xEC7D},{0x9771, 0xEC7E},{0x9772, 0xEC80},{0x9773, 0xBDF9},{0x9774, 0xD1A5},
- {0x9775, 0xEC81},{0x9776, 0xB0D0},{0x9777, 0xEC82},{0x9778, 0xEC83},{0x9779, 0xEC84},{0x977A, 0xEC85},{0x977B, 0xEC86},{0x977C, 0xF7B0},
- {0x977D, 0xEC87},{0x977E, 0xEC88},{0x977F, 0xEC89},{0x9780, 0xEC8A},{0x9781, 0xEC8B},{0x9782, 0xEC8C},{0x9783, 0xEC8D},{0x9784, 0xEC8E},
- {0x9785, 0xF7B1},{0x9786, 0xEC8F},{0x9787, 0xEC90},{0x9788, 0xEC91},{0x9789, 0xEC92},{0x978A, 0xEC93},{0x978B, 0xD0AC},{0x978C, 0xEC94},
- {0x978D, 0xB0B0},{0x978E, 0xEC95},{0x978F, 0xEC96},{0x9790, 0xEC97},{0x9791, 0xF7B2},{0x9792, 0xF7B3},{0x9793, 0xEC98},{0x9794, 0xF7B4},
- {0x9795, 0xEC99},{0x9796, 0xEC9A},{0x9797, 0xEC9B},{0x9798, 0xC7CA},{0x9799, 0xEC9C},{0x979A, 0xEC9D},{0x979B, 0xEC9E},{0x979C, 0xEC9F},
- {0x979D, 0xECA0},{0x979E, 0xED40},{0x979F, 0xED41},{0x97A0, 0xBECF},{0x97A1, 0xED42},{0x97A2, 0xED43},{0x97A3, 0xF7B7},{0x97A4, 0xED44},
- {0x97A5, 0xED45},{0x97A6, 0xED46},{0x97A7, 0xED47},{0x97A8, 0xED48},{0x97A9, 0xED49},{0x97AA, 0xED4A},{0x97AB, 0xF7B6},{0x97AC, 0xED4B},
- {0x97AD, 0xB1DE},{0x97AE, 0xED4C},{0x97AF, 0xF7B5},{0x97B0, 0xED4D},{0x97B1, 0xED4E},{0x97B2, 0xF7B8},{0x97B3, 0xED4F},{0x97B4, 0xF7B9},
- {0x97B5, 0xED50},{0x97B6, 0xED51},{0x97B7, 0xED52},{0x97B8, 0xED53},{0x97B9, 0xED54},{0x97BA, 0xED55},{0x97BB, 0xED56},{0x97BC, 0xED57},
- {0x97BD, 0xED58},{0x97BE, 0xED59},{0x97BF, 0xED5A},{0x97C0, 0xED5B},{0x97C1, 0xED5C},{0x97C2, 0xED5D},{0x97C3, 0xED5E},{0x97C4, 0xED5F},
- {0x97C5, 0xED60},{0x97C6, 0xED61},{0x97C7, 0xED62},{0x97C8, 0xED63},{0x97C9, 0xED64},{0x97CA, 0xED65},{0x97CB, 0xED66},{0x97CC, 0xED67},
- {0x97CD, 0xED68},{0x97CE, 0xED69},{0x97CF, 0xED6A},{0x97D0, 0xED6B},{0x97D1, 0xED6C},{0x97D2, 0xED6D},{0x97D3, 0xED6E},{0x97D4, 0xED6F},
- {0x97D5, 0xED70},{0x97D6, 0xED71},{0x97D7, 0xED72},{0x97D8, 0xED73},{0x97D9, 0xED74},{0x97DA, 0xED75},{0x97DB, 0xED76},{0x97DC, 0xED77},
- {0x97DD, 0xED78},{0x97DE, 0xED79},{0x97DF, 0xED7A},{0x97E0, 0xED7B},{0x97E1, 0xED7C},{0x97E2, 0xED7D},{0x97E3, 0xED7E},{0x97E4, 0xED80},
- {0x97E5, 0xED81},{0x97E6, 0xCEA4},{0x97E7, 0xC8CD},{0x97E8, 0xED82},{0x97E9, 0xBAAB},{0x97EA, 0xE8B8},{0x97EB, 0xE8B9},{0x97EC, 0xE8BA},
- {0x97ED, 0xBEC2},{0x97EE, 0xED83},{0x97EF, 0xED84},{0x97F0, 0xED85},{0x97F1, 0xED86},{0x97F2, 0xED87},{0x97F3, 0xD2F4},{0x97F4, 0xED88},
- {0x97F5, 0xD4CF},{0x97F6, 0xC9D8},{0x97F7, 0xED89},{0x97F8, 0xED8A},{0x97F9, 0xED8B},{0x97FA, 0xED8C},{0x97FB, 0xED8D},{0x97FC, 0xED8E},
- {0x97FD, 0xED8F},{0x97FE, 0xED90},{0x97FF, 0xED91},{0x9800, 0xED92},{0x9801, 0xED93},{0x9802, 0xED94},{0x9803, 0xED95},{0x9804, 0xED96},
- {0x9805, 0xED97},{0x9806, 0xED98},{0x9807, 0xED99},{0x9808, 0xED9A},{0x9809, 0xED9B},{0x980A, 0xED9C},{0x980B, 0xED9D},{0x980C, 0xED9E},
- {0x980D, 0xED9F},{0x980E, 0xEDA0},{0x980F, 0xEE40},{0x9810, 0xEE41},{0x9811, 0xEE42},{0x9812, 0xEE43},{0x9813, 0xEE44},{0x9814, 0xEE45},
- {0x9815, 0xEE46},{0x9816, 0xEE47},{0x9817, 0xEE48},{0x9818, 0xEE49},{0x9819, 0xEE4A},{0x981A, 0xEE4B},{0x981B, 0xEE4C},{0x981C, 0xEE4D},
- {0x981D, 0xEE4E},{0x981E, 0xEE4F},{0x981F, 0xEE50},{0x9820, 0xEE51},{0x9821, 0xEE52},{0x9822, 0xEE53},{0x9823, 0xEE54},{0x9824, 0xEE55},
- {0x9825, 0xEE56},{0x9826, 0xEE57},{0x9827, 0xEE58},{0x9828, 0xEE59},{0x9829, 0xEE5A},{0x982A, 0xEE5B},{0x982B, 0xEE5C},{0x982C, 0xEE5D},
- {0x982D, 0xEE5E},{0x982E, 0xEE5F},{0x982F, 0xEE60},{0x9830, 0xEE61},{0x9831, 0xEE62},{0x9832, 0xEE63},{0x9833, 0xEE64},{0x9834, 0xEE65},
- {0x9835, 0xEE66},{0x9836, 0xEE67},{0x9837, 0xEE68},{0x9838, 0xEE69},{0x9839, 0xEE6A},{0x983A, 0xEE6B},{0x983B, 0xEE6C},{0x983C, 0xEE6D},
- {0x983D, 0xEE6E},{0x983E, 0xEE6F},{0x983F, 0xEE70},{0x9840, 0xEE71},{0x9841, 0xEE72},{0x9842, 0xEE73},{0x9843, 0xEE74},{0x9844, 0xEE75},
- {0x9845, 0xEE76},{0x9846, 0xEE77},{0x9847, 0xEE78},{0x9848, 0xEE79},{0x9849, 0xEE7A},{0x984A, 0xEE7B},{0x984B, 0xEE7C},{0x984C, 0xEE7D},
- {0x984D, 0xEE7E},{0x984E, 0xEE80},{0x984F, 0xEE81},{0x9850, 0xEE82},{0x9851, 0xEE83},{0x9852, 0xEE84},{0x9853, 0xEE85},{0x9854, 0xEE86},
- {0x9855, 0xEE87},{0x9856, 0xEE88},{0x9857, 0xEE89},{0x9858, 0xEE8A},{0x9859, 0xEE8B},{0x985A, 0xEE8C},{0x985B, 0xEE8D},{0x985C, 0xEE8E},
- {0x985D, 0xEE8F},{0x985E, 0xEE90},{0x985F, 0xEE91},{0x9860, 0xEE92},{0x9861, 0xEE93},{0x9862, 0xEE94},{0x9863, 0xEE95},{0x9864, 0xEE96},
- {0x9865, 0xEE97},{0x9866, 0xEE98},{0x9867, 0xEE99},{0x9868, 0xEE9A},{0x9869, 0xEE9B},{0x986A, 0xEE9C},{0x986B, 0xEE9D},{0x986C, 0xEE9E},
- {0x986D, 0xEE9F},{0x986E, 0xEEA0},{0x986F, 0xEF40},{0x9870, 0xEF41},{0x9871, 0xEF42},{0x9872, 0xEF43},{0x9873, 0xEF44},{0x9874, 0xEF45},
- {0x9875, 0xD2B3},{0x9876, 0xB6A5},{0x9877, 0xC7EA},{0x9878, 0xF1FC},{0x9879, 0xCFEE},{0x987A, 0xCBB3},{0x987B, 0xD0EB},{0x987C, 0xE7EF},
- {0x987D, 0xCDE7},{0x987E, 0xB9CB},{0x987F, 0xB6D9},{0x9880, 0xF1FD},{0x9881, 0xB0E4},{0x9882, 0xCBCC},{0x9883, 0xF1FE},{0x9884, 0xD4A4},
- {0x9885, 0xC2AD},{0x9886, 0xC1EC},{0x9887, 0xC6C4},{0x9888, 0xBEB1},{0x9889, 0xF2A1},{0x988A, 0xBCD5},{0x988B, 0xEF46},{0x988C, 0xF2A2},
- {0x988D, 0xF2A3},{0x988E, 0xEF47},{0x988F, 0xF2A4},{0x9890, 0xD2C3},{0x9891, 0xC6B5},{0x9892, 0xEF48},{0x9893, 0xCDC7},{0x9894, 0xF2A5},
- {0x9895, 0xEF49},{0x9896, 0xD3B1},{0x9897, 0xBFC5},{0x9898, 0xCCE2},{0x9899, 0xEF4A},{0x989A, 0xF2A6},{0x989B, 0xF2A7},{0x989C, 0xD1D5},
- {0x989D, 0xB6EE},{0x989E, 0xF2A8},{0x989F, 0xF2A9},{0x98A0, 0xB5DF},{0x98A1, 0xF2AA},{0x98A2, 0xF2AB},{0x98A3, 0xEF4B},{0x98A4, 0xB2FC},
- {0x98A5, 0xF2AC},{0x98A6, 0xF2AD},{0x98A7, 0xC8A7},{0x98A8, 0xEF4C},{0x98A9, 0xEF4D},{0x98AA, 0xEF4E},{0x98AB, 0xEF4F},{0x98AC, 0xEF50},
- {0x98AD, 0xEF51},{0x98AE, 0xEF52},{0x98AF, 0xEF53},{0x98B0, 0xEF54},{0x98B1, 0xEF55},{0x98B2, 0xEF56},{0x98B3, 0xEF57},{0x98B4, 0xEF58},
- {0x98B5, 0xEF59},{0x98B6, 0xEF5A},{0x98B7, 0xEF5B},{0x98B8, 0xEF5C},{0x98B9, 0xEF5D},{0x98BA, 0xEF5E},{0x98BB, 0xEF5F},{0x98BC, 0xEF60},
- {0x98BD, 0xEF61},{0x98BE, 0xEF62},{0x98BF, 0xEF63},{0x98C0, 0xEF64},{0x98C1, 0xEF65},{0x98C2, 0xEF66},{0x98C3, 0xEF67},{0x98C4, 0xEF68},
- {0x98C5, 0xEF69},{0x98C6, 0xEF6A},{0x98C7, 0xEF6B},{0x98C8, 0xEF6C},{0x98C9, 0xEF6D},{0x98CA, 0xEF6E},{0x98CB, 0xEF6F},{0x98CC, 0xEF70},
- {0x98CD, 0xEF71},{0x98CE, 0xB7E7},{0x98CF, 0xEF72},{0x98D0, 0xEF73},{0x98D1, 0xECA9},{0x98D2, 0xECAA},{0x98D3, 0xECAB},{0x98D4, 0xEF74},
- {0x98D5, 0xECAC},{0x98D6, 0xEF75},{0x98D7, 0xEF76},{0x98D8, 0xC6AE},{0x98D9, 0xECAD},{0x98DA, 0xECAE},{0x98DB, 0xEF77},{0x98DC, 0xEF78},
- {0x98DD, 0xEF79},{0x98DE, 0xB7C9},{0x98DF, 0xCAB3},{0x98E0, 0xEF7A},{0x98E1, 0xEF7B},{0x98E2, 0xEF7C},{0x98E3, 0xEF7D},{0x98E4, 0xEF7E},
- {0x98E5, 0xEF80},{0x98E6, 0xEF81},{0x98E7, 0xE2B8},{0x98E8, 0xF7CF},{0x98E9, 0xEF82},{0x98EA, 0xEF83},{0x98EB, 0xEF84},{0x98EC, 0xEF85},
- {0x98ED, 0xEF86},{0x98EE, 0xEF87},{0x98EF, 0xEF88},{0x98F0, 0xEF89},{0x98F1, 0xEF8A},{0x98F2, 0xEF8B},{0x98F3, 0xEF8C},{0x98F4, 0xEF8D},
- {0x98F5, 0xEF8E},{0x98F6, 0xEF8F},{0x98F7, 0xEF90},{0x98F8, 0xEF91},{0x98F9, 0xEF92},{0x98FA, 0xEF93},{0x98FB, 0xEF94},{0x98FC, 0xEF95},
- {0x98FD, 0xEF96},{0x98FE, 0xEF97},{0x98FF, 0xEF98},{0x9900, 0xEF99},{0x9901, 0xEF9A},{0x9902, 0xEF9B},{0x9903, 0xEF9C},{0x9904, 0xEF9D},
- {0x9905, 0xEF9E},{0x9906, 0xEF9F},{0x9907, 0xEFA0},{0x9908, 0xF040},{0x9909, 0xF041},{0x990A, 0xF042},{0x990B, 0xF043},{0x990C, 0xF044},
- {0x990D, 0xF7D0},{0x990E, 0xF045},{0x990F, 0xF046},{0x9910, 0xB2CD},{0x9911, 0xF047},{0x9912, 0xF048},{0x9913, 0xF049},{0x9914, 0xF04A},
- {0x9915, 0xF04B},{0x9916, 0xF04C},{0x9917, 0xF04D},{0x9918, 0xF04E},{0x9919, 0xF04F},{0x991A, 0xF050},{0x991B, 0xF051},{0x991C, 0xF052},
- {0x991D, 0xF053},{0x991E, 0xF054},{0x991F, 0xF055},{0x9920, 0xF056},{0x9921, 0xF057},{0x9922, 0xF058},{0x9923, 0xF059},{0x9924, 0xF05A},
- {0x9925, 0xF05B},{0x9926, 0xF05C},{0x9927, 0xF05D},{0x9928, 0xF05E},{0x9929, 0xF05F},{0x992A, 0xF060},{0x992B, 0xF061},{0x992C, 0xF062},
- {0x992D, 0xF063},{0x992E, 0xF7D1},{0x992F, 0xF064},{0x9930, 0xF065},{0x9931, 0xF066},{0x9932, 0xF067},{0x9933, 0xF068},{0x9934, 0xF069},
- {0x9935, 0xF06A},{0x9936, 0xF06B},{0x9937, 0xF06C},{0x9938, 0xF06D},{0x9939, 0xF06E},{0x993A, 0xF06F},{0x993B, 0xF070},{0x993C, 0xF071},
- {0x993D, 0xF072},{0x993E, 0xF073},{0x993F, 0xF074},{0x9940, 0xF075},{0x9941, 0xF076},{0x9942, 0xF077},{0x9943, 0xF078},{0x9944, 0xF079},
- {0x9945, 0xF07A},{0x9946, 0xF07B},{0x9947, 0xF07C},{0x9948, 0xF07D},{0x9949, 0xF07E},{0x994A, 0xF080},{0x994B, 0xF081},{0x994C, 0xF082},
- {0x994D, 0xF083},{0x994E, 0xF084},{0x994F, 0xF085},{0x9950, 0xF086},{0x9951, 0xF087},{0x9952, 0xF088},{0x9953, 0xF089},{0x9954, 0xF7D3},
- {0x9955, 0xF7D2},{0x9956, 0xF08A},{0x9957, 0xF08B},{0x9958, 0xF08C},{0x9959, 0xF08D},{0x995A, 0xF08E},{0x995B, 0xF08F},{0x995C, 0xF090},
- {0x995D, 0xF091},{0x995E, 0xF092},{0x995F, 0xF093},{0x9960, 0xF094},{0x9961, 0xF095},{0x9962, 0xF096},{0x9963, 0xE2BB},{0x9964, 0xF097},
- {0x9965, 0xBCA2},{0x9966, 0xF098},{0x9967, 0xE2BC},{0x9968, 0xE2BD},{0x9969, 0xE2BE},{0x996A, 0xE2BF},{0x996B, 0xE2C0},{0x996C, 0xE2C1},
- {0x996D, 0xB7B9},{0x996E, 0xD2FB},{0x996F, 0xBDA4},{0x9970, 0xCACE},{0x9971, 0xB1A5},{0x9972, 0xCBC7},{0x9973, 0xF099},{0x9974, 0xE2C2},
- {0x9975, 0xB6FC},{0x9976, 0xC8C4},{0x9977, 0xE2C3},{0x9978, 0xF09A},{0x9979, 0xF09B},{0x997A, 0xBDC8},{0x997B, 0xF09C},{0x997C, 0xB1FD},
- {0x997D, 0xE2C4},{0x997E, 0xF09D},{0x997F, 0xB6F6},{0x9980, 0xE2C5},{0x9981, 0xC4D9},{0x9982, 0xF09E},{0x9983, 0xF09F},{0x9984, 0xE2C6},
- {0x9985, 0xCFDA},{0x9986, 0xB9DD},{0x9987, 0xE2C7},{0x9988, 0xC0A1},{0x9989, 0xF0A0},{0x998A, 0xE2C8},{0x998B, 0xB2F6},{0x998C, 0xF140},
- {0x998D, 0xE2C9},{0x998E, 0xF141},{0x998F, 0xC1F3},{0x9990, 0xE2CA},{0x9991, 0xE2CB},{0x9992, 0xC2F8},{0x9993, 0xE2CC},{0x9994, 0xE2CD},
- {0x9995, 0xE2CE},{0x9996, 0xCAD7},{0x9997, 0xD8B8},{0x9998, 0xD9E5},{0x9999, 0xCFE3},{0x999A, 0xF142},{0x999B, 0xF143},{0x999C, 0xF144},
- {0x999D, 0xF145},{0x999E, 0xF146},{0x999F, 0xF147},{0x99A0, 0xF148},{0x99A1, 0xF149},{0x99A2, 0xF14A},{0x99A3, 0xF14B},{0x99A4, 0xF14C},
- {0x99A5, 0xF0A5},{0x99A6, 0xF14D},{0x99A7, 0xF14E},{0x99A8, 0xDCB0},{0x99A9, 0xF14F},{0x99AA, 0xF150},{0x99AB, 0xF151},{0x99AC, 0xF152},
- {0x99AD, 0xF153},{0x99AE, 0xF154},{0x99AF, 0xF155},{0x99B0, 0xF156},{0x99B1, 0xF157},{0x99B2, 0xF158},{0x99B3, 0xF159},{0x99B4, 0xF15A},
- {0x99B5, 0xF15B},{0x99B6, 0xF15C},{0x99B7, 0xF15D},{0x99B8, 0xF15E},{0x99B9, 0xF15F},{0x99BA, 0xF160},{0x99BB, 0xF161},{0x99BC, 0xF162},
- {0x99BD, 0xF163},{0x99BE, 0xF164},{0x99BF, 0xF165},{0x99C0, 0xF166},{0x99C1, 0xF167},{0x99C2, 0xF168},{0x99C3, 0xF169},{0x99C4, 0xF16A},
- {0x99C5, 0xF16B},{0x99C6, 0xF16C},{0x99C7, 0xF16D},{0x99C8, 0xF16E},{0x99C9, 0xF16F},{0x99CA, 0xF170},{0x99CB, 0xF171},{0x99CC, 0xF172},
- {0x99CD, 0xF173},{0x99CE, 0xF174},{0x99CF, 0xF175},{0x99D0, 0xF176},{0x99D1, 0xF177},{0x99D2, 0xF178},{0x99D3, 0xF179},{0x99D4, 0xF17A},
- {0x99D5, 0xF17B},{0x99D6, 0xF17C},{0x99D7, 0xF17D},{0x99D8, 0xF17E},{0x99D9, 0xF180},{0x99DA, 0xF181},{0x99DB, 0xF182},{0x99DC, 0xF183},
- {0x99DD, 0xF184},{0x99DE, 0xF185},{0x99DF, 0xF186},{0x99E0, 0xF187},{0x99E1, 0xF188},{0x99E2, 0xF189},{0x99E3, 0xF18A},{0x99E4, 0xF18B},
- {0x99E5, 0xF18C},{0x99E6, 0xF18D},{0x99E7, 0xF18E},{0x99E8, 0xF18F},{0x99E9, 0xF190},{0x99EA, 0xF191},{0x99EB, 0xF192},{0x99EC, 0xF193},
- {0x99ED, 0xF194},{0x99EE, 0xF195},{0x99EF, 0xF196},{0x99F0, 0xF197},{0x99F1, 0xF198},{0x99F2, 0xF199},{0x99F3, 0xF19A},{0x99F4, 0xF19B},
- {0x99F5, 0xF19C},{0x99F6, 0xF19D},{0x99F7, 0xF19E},{0x99F8, 0xF19F},{0x99F9, 0xF1A0},{0x99FA, 0xF240},{0x99FB, 0xF241},{0x99FC, 0xF242},
- {0x99FD, 0xF243},{0x99FE, 0xF244},{0x99FF, 0xF245},{0x9A00, 0xF246},{0x9A01, 0xF247},{0x9A02, 0xF248},{0x9A03, 0xF249},{0x9A04, 0xF24A},
- {0x9A05, 0xF24B},{0x9A06, 0xF24C},{0x9A07, 0xF24D},{0x9A08, 0xF24E},{0x9A09, 0xF24F},{0x9A0A, 0xF250},{0x9A0B, 0xF251},{0x9A0C, 0xF252},
- {0x9A0D, 0xF253},{0x9A0E, 0xF254},{0x9A0F, 0xF255},{0x9A10, 0xF256},{0x9A11, 0xF257},{0x9A12, 0xF258},{0x9A13, 0xF259},{0x9A14, 0xF25A},
- {0x9A15, 0xF25B},{0x9A16, 0xF25C},{0x9A17, 0xF25D},{0x9A18, 0xF25E},{0x9A19, 0xF25F},{0x9A1A, 0xF260},{0x9A1B, 0xF261},{0x9A1C, 0xF262},
- {0x9A1D, 0xF263},{0x9A1E, 0xF264},{0x9A1F, 0xF265},{0x9A20, 0xF266},{0x9A21, 0xF267},{0x9A22, 0xF268},{0x9A23, 0xF269},{0x9A24, 0xF26A},
- {0x9A25, 0xF26B},{0x9A26, 0xF26C},{0x9A27, 0xF26D},{0x9A28, 0xF26E},{0x9A29, 0xF26F},{0x9A2A, 0xF270},{0x9A2B, 0xF271},{0x9A2C, 0xF272},
- {0x9A2D, 0xF273},{0x9A2E, 0xF274},{0x9A2F, 0xF275},{0x9A30, 0xF276},{0x9A31, 0xF277},{0x9A32, 0xF278},{0x9A33, 0xF279},{0x9A34, 0xF27A},
- {0x9A35, 0xF27B},{0x9A36, 0xF27C},{0x9A37, 0xF27D},{0x9A38, 0xF27E},{0x9A39, 0xF280},{0x9A3A, 0xF281},{0x9A3B, 0xF282},{0x9A3C, 0xF283},
- {0x9A3D, 0xF284},{0x9A3E, 0xF285},{0x9A3F, 0xF286},{0x9A40, 0xF287},{0x9A41, 0xF288},{0x9A42, 0xF289},{0x9A43, 0xF28A},{0x9A44, 0xF28B},
- {0x9A45, 0xF28C},{0x9A46, 0xF28D},{0x9A47, 0xF28E},{0x9A48, 0xF28F},{0x9A49, 0xF290},{0x9A4A, 0xF291},{0x9A4B, 0xF292},{0x9A4C, 0xF293},
- {0x9A4D, 0xF294},{0x9A4E, 0xF295},{0x9A4F, 0xF296},{0x9A50, 0xF297},{0x9A51, 0xF298},{0x9A52, 0xF299},{0x9A53, 0xF29A},{0x9A54, 0xF29B},
- {0x9A55, 0xF29C},{0x9A56, 0xF29D},{0x9A57, 0xF29E},{0x9A58, 0xF29F},{0x9A59, 0xF2A0},{0x9A5A, 0xF340},{0x9A5B, 0xF341},{0x9A5C, 0xF342},
- {0x9A5D, 0xF343},{0x9A5E, 0xF344},{0x9A5F, 0xF345},{0x9A60, 0xF346},{0x9A61, 0xF347},{0x9A62, 0xF348},{0x9A63, 0xF349},{0x9A64, 0xF34A},
- {0x9A65, 0xF34B},{0x9A66, 0xF34C},{0x9A67, 0xF34D},{0x9A68, 0xF34E},{0x9A69, 0xF34F},{0x9A6A, 0xF350},{0x9A6B, 0xF351},{0x9A6C, 0xC2ED},
- {0x9A6D, 0xD4A6},{0x9A6E, 0xCDD4},{0x9A6F, 0xD1B1},{0x9A70, 0xB3DB},{0x9A71, 0xC7FD},{0x9A72, 0xF352},{0x9A73, 0xB2B5},{0x9A74, 0xC2BF},
- {0x9A75, 0xE6E0},{0x9A76, 0xCABB},{0x9A77, 0xE6E1},{0x9A78, 0xE6E2},{0x9A79, 0xBED4},{0x9A7A, 0xE6E3},{0x9A7B, 0xD7A4},{0x9A7C, 0xCDD5},
- {0x9A7D, 0xE6E5},{0x9A7E, 0xBCDD},{0x9A7F, 0xE6E4},{0x9A80, 0xE6E6},{0x9A81, 0xE6E7},{0x9A82, 0xC2EE},{0x9A83, 0xF353},{0x9A84, 0xBDBE},
- {0x9A85, 0xE6E8},{0x9A86, 0xC2E6},{0x9A87, 0xBAA7},{0x9A88, 0xE6E9},{0x9A89, 0xF354},{0x9A8A, 0xE6EA},{0x9A8B, 0xB3D2},{0x9A8C, 0xD1E9},
- {0x9A8D, 0xF355},{0x9A8E, 0xF356},{0x9A8F, 0xBFA5},{0x9A90, 0xE6EB},{0x9A91, 0xC6EF},{0x9A92, 0xE6EC},{0x9A93, 0xE6ED},{0x9A94, 0xF357},
- {0x9A95, 0xF358},{0x9A96, 0xE6EE},{0x9A97, 0xC6AD},{0x9A98, 0xE6EF},{0x9A99, 0xF359},{0x9A9A, 0xC9A7},{0x9A9B, 0xE6F0},{0x9A9C, 0xE6F1},
- {0x9A9D, 0xE6F2},{0x9A9E, 0xE5B9},{0x9A9F, 0xE6F3},{0x9AA0, 0xE6F4},{0x9AA1, 0xC2E2},{0x9AA2, 0xE6F5},{0x9AA3, 0xE6F6},{0x9AA4, 0xD6E8},
- {0x9AA5, 0xE6F7},{0x9AA6, 0xF35A},{0x9AA7, 0xE6F8},{0x9AA8, 0xB9C7},{0x9AA9, 0xF35B},{0x9AAA, 0xF35C},{0x9AAB, 0xF35D},{0x9AAC, 0xF35E},
- {0x9AAD, 0xF35F},{0x9AAE, 0xF360},{0x9AAF, 0xF361},{0x9AB0, 0xF7BB},{0x9AB1, 0xF7BA},{0x9AB2, 0xF362},{0x9AB3, 0xF363},{0x9AB4, 0xF364},
- {0x9AB5, 0xF365},{0x9AB6, 0xF7BE},{0x9AB7, 0xF7BC},{0x9AB8, 0xBAA1},{0x9AB9, 0xF366},{0x9ABA, 0xF7BF},{0x9ABB, 0xF367},{0x9ABC, 0xF7C0},
- {0x9ABD, 0xF368},{0x9ABE, 0xF369},{0x9ABF, 0xF36A},{0x9AC0, 0xF7C2},{0x9AC1, 0xF7C1},{0x9AC2, 0xF7C4},{0x9AC3, 0xF36B},{0x9AC4, 0xF36C},
- {0x9AC5, 0xF7C3},{0x9AC6, 0xF36D},{0x9AC7, 0xF36E},{0x9AC8, 0xF36F},{0x9AC9, 0xF370},{0x9ACA, 0xF371},{0x9ACB, 0xF7C5},{0x9ACC, 0xF7C6},
- {0x9ACD, 0xF372},{0x9ACE, 0xF373},{0x9ACF, 0xF374},{0x9AD0, 0xF375},{0x9AD1, 0xF7C7},{0x9AD2, 0xF376},{0x9AD3, 0xCBE8},{0x9AD4, 0xF377},
- {0x9AD5, 0xF378},{0x9AD6, 0xF379},{0x9AD7, 0xF37A},{0x9AD8, 0xB8DF},{0x9AD9, 0xF37B},{0x9ADA, 0xF37C},{0x9ADB, 0xF37D},{0x9ADC, 0xF37E},
- {0x9ADD, 0xF380},{0x9ADE, 0xF381},{0x9ADF, 0xF7D4},{0x9AE0, 0xF382},{0x9AE1, 0xF7D5},{0x9AE2, 0xF383},{0x9AE3, 0xF384},{0x9AE4, 0xF385},
- {0x9AE5, 0xF386},{0x9AE6, 0xF7D6},{0x9AE7, 0xF387},{0x9AE8, 0xF388},{0x9AE9, 0xF389},{0x9AEA, 0xF38A},{0x9AEB, 0xF7D8},{0x9AEC, 0xF38B},
- {0x9AED, 0xF7DA},{0x9AEE, 0xF38C},{0x9AEF, 0xF7D7},{0x9AF0, 0xF38D},{0x9AF1, 0xF38E},{0x9AF2, 0xF38F},{0x9AF3, 0xF390},{0x9AF4, 0xF391},
- {0x9AF5, 0xF392},{0x9AF6, 0xF393},{0x9AF7, 0xF394},{0x9AF8, 0xF395},{0x9AF9, 0xF7DB},{0x9AFA, 0xF396},{0x9AFB, 0xF7D9},{0x9AFC, 0xF397},
- {0x9AFD, 0xF398},{0x9AFE, 0xF399},{0x9AFF, 0xF39A},{0x9B00, 0xF39B},{0x9B01, 0xF39C},{0x9B02, 0xF39D},{0x9B03, 0xD7D7},{0x9B04, 0xF39E},
- {0x9B05, 0xF39F},{0x9B06, 0xF3A0},{0x9B07, 0xF440},{0x9B08, 0xF7DC},{0x9B09, 0xF441},{0x9B0A, 0xF442},{0x9B0B, 0xF443},{0x9B0C, 0xF444},
- {0x9B0D, 0xF445},{0x9B0E, 0xF446},{0x9B0F, 0xF7DD},{0x9B10, 0xF447},{0x9B11, 0xF448},{0x9B12, 0xF449},{0x9B13, 0xF7DE},{0x9B14, 0xF44A},
- {0x9B15, 0xF44B},{0x9B16, 0xF44C},{0x9B17, 0xF44D},{0x9B18, 0xF44E},{0x9B19, 0xF44F},{0x9B1A, 0xF450},{0x9B1B, 0xF451},{0x9B1C, 0xF452},
- {0x9B1D, 0xF453},{0x9B1E, 0xF454},{0x9B1F, 0xF7DF},{0x9B20, 0xF455},{0x9B21, 0xF456},{0x9B22, 0xF457},{0x9B23, 0xF7E0},{0x9B24, 0xF458},
- {0x9B25, 0xF459},{0x9B26, 0xF45A},{0x9B27, 0xF45B},{0x9B28, 0xF45C},{0x9B29, 0xF45D},{0x9B2A, 0xF45E},{0x9B2B, 0xF45F},{0x9B2C, 0xF460},
- {0x9B2D, 0xF461},{0x9B2E, 0xF462},{0x9B2F, 0xDBCB},{0x9B30, 0xF463},{0x9B31, 0xF464},{0x9B32, 0xD8AA},{0x9B33, 0xF465},{0x9B34, 0xF466},
- {0x9B35, 0xF467},{0x9B36, 0xF468},{0x9B37, 0xF469},{0x9B38, 0xF46A},{0x9B39, 0xF46B},{0x9B3A, 0xF46C},{0x9B3B, 0xE5F7},{0x9B3C, 0xB9ED},
- {0x9B3D, 0xF46D},{0x9B3E, 0xF46E},{0x9B3F, 0xF46F},{0x9B40, 0xF470},{0x9B41, 0xBFFD},{0x9B42, 0xBBEA},{0x9B43, 0xF7C9},{0x9B44, 0xC6C7},
- {0x9B45, 0xF7C8},{0x9B46, 0xF471},{0x9B47, 0xF7CA},{0x9B48, 0xF7CC},{0x9B49, 0xF7CB},{0x9B4A, 0xF472},{0x9B4B, 0xF473},{0x9B4C, 0xF474},
- {0x9B4D, 0xF7CD},{0x9B4E, 0xF475},{0x9B4F, 0xCEBA},{0x9B50, 0xF476},{0x9B51, 0xF7CE},{0x9B52, 0xF477},{0x9B53, 0xF478},{0x9B54, 0xC4A7},
- {0x9B55, 0xF479},{0x9B56, 0xF47A},{0x9B57, 0xF47B},{0x9B58, 0xF47C},{0x9B59, 0xF47D},{0x9B5A, 0xF47E},{0x9B5B, 0xF480},{0x9B5C, 0xF481},
- {0x9B5D, 0xF482},{0x9B5E, 0xF483},{0x9B5F, 0xF484},{0x9B60, 0xF485},{0x9B61, 0xF486},{0x9B62, 0xF487},{0x9B63, 0xF488},{0x9B64, 0xF489},
- {0x9B65, 0xF48A},{0x9B66, 0xF48B},{0x9B67, 0xF48C},{0x9B68, 0xF48D},{0x9B69, 0xF48E},{0x9B6A, 0xF48F},{0x9B6B, 0xF490},{0x9B6C, 0xF491},
- {0x9B6D, 0xF492},{0x9B6E, 0xF493},{0x9B6F, 0xF494},{0x9B70, 0xF495},{0x9B71, 0xF496},{0x9B72, 0xF497},{0x9B73, 0xF498},{0x9B74, 0xF499},
- {0x9B75, 0xF49A},{0x9B76, 0xF49B},{0x9B77, 0xF49C},{0x9B78, 0xF49D},{0x9B79, 0xF49E},{0x9B7A, 0xF49F},{0x9B7B, 0xF4A0},{0x9B7C, 0xF540},
- {0x9B7D, 0xF541},{0x9B7E, 0xF542},{0x9B7F, 0xF543},{0x9B80, 0xF544},{0x9B81, 0xF545},{0x9B82, 0xF546},{0x9B83, 0xF547},{0x9B84, 0xF548},
- {0x9B85, 0xF549},{0x9B86, 0xF54A},{0x9B87, 0xF54B},{0x9B88, 0xF54C},{0x9B89, 0xF54D},{0x9B8A, 0xF54E},{0x9B8B, 0xF54F},{0x9B8C, 0xF550},
- {0x9B8D, 0xF551},{0x9B8E, 0xF552},{0x9B8F, 0xF553},{0x9B90, 0xF554},{0x9B91, 0xF555},{0x9B92, 0xF556},{0x9B93, 0xF557},{0x9B94, 0xF558},
- {0x9B95, 0xF559},{0x9B96, 0xF55A},{0x9B97, 0xF55B},{0x9B98, 0xF55C},{0x9B99, 0xF55D},{0x9B9A, 0xF55E},{0x9B9B, 0xF55F},{0x9B9C, 0xF560},
- {0x9B9D, 0xF561},{0x9B9E, 0xF562},{0x9B9F, 0xF563},{0x9BA0, 0xF564},{0x9BA1, 0xF565},{0x9BA2, 0xF566},{0x9BA3, 0xF567},{0x9BA4, 0xF568},
- {0x9BA5, 0xF569},{0x9BA6, 0xF56A},{0x9BA7, 0xF56B},{0x9BA8, 0xF56C},{0x9BA9, 0xF56D},{0x9BAA, 0xF56E},{0x9BAB, 0xF56F},{0x9BAC, 0xF570},
- {0x9BAD, 0xF571},{0x9BAE, 0xF572},{0x9BAF, 0xF573},{0x9BB0, 0xF574},{0x9BB1, 0xF575},{0x9BB2, 0xF576},{0x9BB3, 0xF577},{0x9BB4, 0xF578},
- {0x9BB5, 0xF579},{0x9BB6, 0xF57A},{0x9BB7, 0xF57B},{0x9BB8, 0xF57C},{0x9BB9, 0xF57D},{0x9BBA, 0xF57E},{0x9BBB, 0xF580},{0x9BBC, 0xF581},
- {0x9BBD, 0xF582},{0x9BBE, 0xF583},{0x9BBF, 0xF584},{0x9BC0, 0xF585},{0x9BC1, 0xF586},{0x9BC2, 0xF587},{0x9BC3, 0xF588},{0x9BC4, 0xF589},
- {0x9BC5, 0xF58A},{0x9BC6, 0xF58B},{0x9BC7, 0xF58C},{0x9BC8, 0xF58D},{0x9BC9, 0xF58E},{0x9BCA, 0xF58F},{0x9BCB, 0xF590},{0x9BCC, 0xF591},
- {0x9BCD, 0xF592},{0x9BCE, 0xF593},{0x9BCF, 0xF594},{0x9BD0, 0xF595},{0x9BD1, 0xF596},{0x9BD2, 0xF597},{0x9BD3, 0xF598},{0x9BD4, 0xF599},
- {0x9BD5, 0xF59A},{0x9BD6, 0xF59B},{0x9BD7, 0xF59C},{0x9BD8, 0xF59D},{0x9BD9, 0xF59E},{0x9BDA, 0xF59F},{0x9BDB, 0xF5A0},{0x9BDC, 0xF640},
- {0x9BDD, 0xF641},{0x9BDE, 0xF642},{0x9BDF, 0xF643},{0x9BE0, 0xF644},{0x9BE1, 0xF645},{0x9BE2, 0xF646},{0x9BE3, 0xF647},{0x9BE4, 0xF648},
- {0x9BE5, 0xF649},{0x9BE6, 0xF64A},{0x9BE7, 0xF64B},{0x9BE8, 0xF64C},{0x9BE9, 0xF64D},{0x9BEA, 0xF64E},{0x9BEB, 0xF64F},{0x9BEC, 0xF650},
- {0x9BED, 0xF651},{0x9BEE, 0xF652},{0x9BEF, 0xF653},{0x9BF0, 0xF654},{0x9BF1, 0xF655},{0x9BF2, 0xF656},{0x9BF3, 0xF657},{0x9BF4, 0xF658},
- {0x9BF5, 0xF659},{0x9BF6, 0xF65A},{0x9BF7, 0xF65B},{0x9BF8, 0xF65C},{0x9BF9, 0xF65D},{0x9BFA, 0xF65E},{0x9BFB, 0xF65F},{0x9BFC, 0xF660},
- {0x9BFD, 0xF661},{0x9BFE, 0xF662},{0x9BFF, 0xF663},{0x9C00, 0xF664},{0x9C01, 0xF665},{0x9C02, 0xF666},{0x9C03, 0xF667},{0x9C04, 0xF668},
- {0x9C05, 0xF669},{0x9C06, 0xF66A},{0x9C07, 0xF66B},{0x9C08, 0xF66C},{0x9C09, 0xF66D},{0x9C0A, 0xF66E},{0x9C0B, 0xF66F},{0x9C0C, 0xF670},
- {0x9C0D, 0xF671},{0x9C0E, 0xF672},{0x9C0F, 0xF673},{0x9C10, 0xF674},{0x9C11, 0xF675},{0x9C12, 0xF676},{0x9C13, 0xF677},{0x9C14, 0xF678},
- {0x9C15, 0xF679},{0x9C16, 0xF67A},{0x9C17, 0xF67B},{0x9C18, 0xF67C},{0x9C19, 0xF67D},{0x9C1A, 0xF67E},{0x9C1B, 0xF680},{0x9C1C, 0xF681},
- {0x9C1D, 0xF682},{0x9C1E, 0xF683},{0x9C1F, 0xF684},{0x9C20, 0xF685},{0x9C21, 0xF686},{0x9C22, 0xF687},{0x9C23, 0xF688},{0x9C24, 0xF689},
- {0x9C25, 0xF68A},{0x9C26, 0xF68B},{0x9C27, 0xF68C},{0x9C28, 0xF68D},{0x9C29, 0xF68E},{0x9C2A, 0xF68F},{0x9C2B, 0xF690},{0x9C2C, 0xF691},
- {0x9C2D, 0xF692},{0x9C2E, 0xF693},{0x9C2F, 0xF694},{0x9C30, 0xF695},{0x9C31, 0xF696},{0x9C32, 0xF697},{0x9C33, 0xF698},{0x9C34, 0xF699},
- {0x9C35, 0xF69A},{0x9C36, 0xF69B},{0x9C37, 0xF69C},{0x9C38, 0xF69D},{0x9C39, 0xF69E},{0x9C3A, 0xF69F},{0x9C3B, 0xF6A0},{0x9C3C, 0xF740},
- {0x9C3D, 0xF741},{0x9C3E, 0xF742},{0x9C3F, 0xF743},{0x9C40, 0xF744},{0x9C41, 0xF745},{0x9C42, 0xF746},{0x9C43, 0xF747},{0x9C44, 0xF748},
- {0x9C45, 0xF749},{0x9C46, 0xF74A},{0x9C47, 0xF74B},{0x9C48, 0xF74C},{0x9C49, 0xF74D},{0x9C4A, 0xF74E},{0x9C4B, 0xF74F},{0x9C4C, 0xF750},
- {0x9C4D, 0xF751},{0x9C4E, 0xF752},{0x9C4F, 0xF753},{0x9C50, 0xF754},{0x9C51, 0xF755},{0x9C52, 0xF756},{0x9C53, 0xF757},{0x9C54, 0xF758},
- {0x9C55, 0xF759},{0x9C56, 0xF75A},{0x9C57, 0xF75B},{0x9C58, 0xF75C},{0x9C59, 0xF75D},{0x9C5A, 0xF75E},{0x9C5B, 0xF75F},{0x9C5C, 0xF760},
- {0x9C5D, 0xF761},{0x9C5E, 0xF762},{0x9C5F, 0xF763},{0x9C60, 0xF764},{0x9C61, 0xF765},{0x9C62, 0xF766},{0x9C63, 0xF767},{0x9C64, 0xF768},
- {0x9C65, 0xF769},{0x9C66, 0xF76A},{0x9C67, 0xF76B},{0x9C68, 0xF76C},{0x9C69, 0xF76D},{0x9C6A, 0xF76E},{0x9C6B, 0xF76F},{0x9C6C, 0xF770},
- {0x9C6D, 0xF771},{0x9C6E, 0xF772},{0x9C6F, 0xF773},{0x9C70, 0xF774},{0x9C71, 0xF775},{0x9C72, 0xF776},{0x9C73, 0xF777},{0x9C74, 0xF778},
- {0x9C75, 0xF779},{0x9C76, 0xF77A},{0x9C77, 0xF77B},{0x9C78, 0xF77C},{0x9C79, 0xF77D},{0x9C7A, 0xF77E},{0x9C7B, 0xF780},{0x9C7C, 0xD3E3},
- {0x9C7D, 0xF781},{0x9C7E, 0xF782},{0x9C7F, 0xF6CF},{0x9C80, 0xF783},{0x9C81, 0xC2B3},{0x9C82, 0xF6D0},{0x9C83, 0xF784},{0x9C84, 0xF785},
- {0x9C85, 0xF6D1},{0x9C86, 0xF6D2},{0x9C87, 0xF6D3},{0x9C88, 0xF6D4},{0x9C89, 0xF786},{0x9C8A, 0xF787},{0x9C8B, 0xF6D6},{0x9C8C, 0xF788},
- {0x9C8D, 0xB1AB},{0x9C8E, 0xF6D7},{0x9C8F, 0xF789},{0x9C90, 0xF6D8},{0x9C91, 0xF6D9},{0x9C92, 0xF6DA},{0x9C93, 0xF78A},{0x9C94, 0xF6DB},
- {0x9C95, 0xF6DC},{0x9C96, 0xF78B},{0x9C97, 0xF78C},{0x9C98, 0xF78D},{0x9C99, 0xF78E},{0x9C9A, 0xF6DD},{0x9C9B, 0xF6DE},{0x9C9C, 0xCFCA},
- {0x9C9D, 0xF78F},{0x9C9E, 0xF6DF},{0x9C9F, 0xF6E0},{0x9CA0, 0xF6E1},{0x9CA1, 0xF6E2},{0x9CA2, 0xF6E3},{0x9CA3, 0xF6E4},{0x9CA4, 0xC0F0},
- {0x9CA5, 0xF6E5},{0x9CA6, 0xF6E6},{0x9CA7, 0xF6E7},{0x9CA8, 0xF6E8},{0x9CA9, 0xF6E9},{0x9CAA, 0xF790},{0x9CAB, 0xF6EA},{0x9CAC, 0xF791},
- {0x9CAD, 0xF6EB},{0x9CAE, 0xF6EC},{0x9CAF, 0xF792},{0x9CB0, 0xF6ED},{0x9CB1, 0xF6EE},{0x9CB2, 0xF6EF},{0x9CB3, 0xF6F0},{0x9CB4, 0xF6F1},
- {0x9CB5, 0xF6F2},{0x9CB6, 0xF6F3},{0x9CB7, 0xF6F4},{0x9CB8, 0xBEA8},{0x9CB9, 0xF793},{0x9CBA, 0xF6F5},{0x9CBB, 0xF6F6},{0x9CBC, 0xF6F7},
- {0x9CBD, 0xF6F8},{0x9CBE, 0xF794},{0x9CBF, 0xF795},{0x9CC0, 0xF796},{0x9CC1, 0xF797},{0x9CC2, 0xF798},{0x9CC3, 0xC8FA},{0x9CC4, 0xF6F9},
- {0x9CC5, 0xF6FA},{0x9CC6, 0xF6FB},{0x9CC7, 0xF6FC},{0x9CC8, 0xF799},{0x9CC9, 0xF79A},{0x9CCA, 0xF6FD},{0x9CCB, 0xF6FE},{0x9CCC, 0xF7A1},
- {0x9CCD, 0xF7A2},{0x9CCE, 0xF7A3},{0x9CCF, 0xF7A4},{0x9CD0, 0xF7A5},{0x9CD1, 0xF79B},{0x9CD2, 0xF79C},{0x9CD3, 0xF7A6},{0x9CD4, 0xF7A7},
- {0x9CD5, 0xF7A8},{0x9CD6, 0xB1EE},{0x9CD7, 0xF7A9},{0x9CD8, 0xF7AA},{0x9CD9, 0xF7AB},{0x9CDA, 0xF79D},{0x9CDB, 0xF79E},{0x9CDC, 0xF7AC},
- {0x9CDD, 0xF7AD},{0x9CDE, 0xC1DB},{0x9CDF, 0xF7AE},{0x9CE0, 0xF79F},{0x9CE1, 0xF7A0},{0x9CE2, 0xF7AF},{0x9CE3, 0xF840},{0x9CE4, 0xF841},
- {0x9CE5, 0xF842},{0x9CE6, 0xF843},{0x9CE7, 0xF844},{0x9CE8, 0xF845},{0x9CE9, 0xF846},{0x9CEA, 0xF847},{0x9CEB, 0xF848},{0x9CEC, 0xF849},
- {0x9CED, 0xF84A},{0x9CEE, 0xF84B},{0x9CEF, 0xF84C},{0x9CF0, 0xF84D},{0x9CF1, 0xF84E},{0x9CF2, 0xF84F},{0x9CF3, 0xF850},{0x9CF4, 0xF851},
- {0x9CF5, 0xF852},{0x9CF6, 0xF853},{0x9CF7, 0xF854},{0x9CF8, 0xF855},{0x9CF9, 0xF856},{0x9CFA, 0xF857},{0x9CFB, 0xF858},{0x9CFC, 0xF859},
- {0x9CFD, 0xF85A},{0x9CFE, 0xF85B},{0x9CFF, 0xF85C},{0x9D00, 0xF85D},{0x9D01, 0xF85E},{0x9D02, 0xF85F},{0x9D03, 0xF860},{0x9D04, 0xF861},
- {0x9D05, 0xF862},{0x9D06, 0xF863},{0x9D07, 0xF864},{0x9D08, 0xF865},{0x9D09, 0xF866},{0x9D0A, 0xF867},{0x9D0B, 0xF868},{0x9D0C, 0xF869},
- {0x9D0D, 0xF86A},{0x9D0E, 0xF86B},{0x9D0F, 0xF86C},{0x9D10, 0xF86D},{0x9D11, 0xF86E},{0x9D12, 0xF86F},{0x9D13, 0xF870},{0x9D14, 0xF871},
- {0x9D15, 0xF872},{0x9D16, 0xF873},{0x9D17, 0xF874},{0x9D18, 0xF875},{0x9D19, 0xF876},{0x9D1A, 0xF877},{0x9D1B, 0xF878},{0x9D1C, 0xF879},
- {0x9D1D, 0xF87A},{0x9D1E, 0xF87B},{0x9D1F, 0xF87C},{0x9D20, 0xF87D},{0x9D21, 0xF87E},{0x9D22, 0xF880},{0x9D23, 0xF881},{0x9D24, 0xF882},
- {0x9D25, 0xF883},{0x9D26, 0xF884},{0x9D27, 0xF885},{0x9D28, 0xF886},{0x9D29, 0xF887},{0x9D2A, 0xF888},{0x9D2B, 0xF889},{0x9D2C, 0xF88A},
- {0x9D2D, 0xF88B},{0x9D2E, 0xF88C},{0x9D2F, 0xF88D},{0x9D30, 0xF88E},{0x9D31, 0xF88F},{0x9D32, 0xF890},{0x9D33, 0xF891},{0x9D34, 0xF892},
- {0x9D35, 0xF893},{0x9D36, 0xF894},{0x9D37, 0xF895},{0x9D38, 0xF896},{0x9D39, 0xF897},{0x9D3A, 0xF898},{0x9D3B, 0xF899},{0x9D3C, 0xF89A},
- {0x9D3D, 0xF89B},{0x9D3E, 0xF89C},{0x9D3F, 0xF89D},{0x9D40, 0xF89E},{0x9D41, 0xF89F},{0x9D42, 0xF8A0},{0x9D43, 0xF940},{0x9D44, 0xF941},
- {0x9D45, 0xF942},{0x9D46, 0xF943},{0x9D47, 0xF944},{0x9D48, 0xF945},{0x9D49, 0xF946},{0x9D4A, 0xF947},{0x9D4B, 0xF948},{0x9D4C, 0xF949},
- {0x9D4D, 0xF94A},{0x9D4E, 0xF94B},{0x9D4F, 0xF94C},{0x9D50, 0xF94D},{0x9D51, 0xF94E},{0x9D52, 0xF94F},{0x9D53, 0xF950},{0x9D54, 0xF951},
- {0x9D55, 0xF952},{0x9D56, 0xF953},{0x9D57, 0xF954},{0x9D58, 0xF955},{0x9D59, 0xF956},{0x9D5A, 0xF957},{0x9D5B, 0xF958},{0x9D5C, 0xF959},
- {0x9D5D, 0xF95A},{0x9D5E, 0xF95B},{0x9D5F, 0xF95C},{0x9D60, 0xF95D},{0x9D61, 0xF95E},{0x9D62, 0xF95F},{0x9D63, 0xF960},{0x9D64, 0xF961},
- {0x9D65, 0xF962},{0x9D66, 0xF963},{0x9D67, 0xF964},{0x9D68, 0xF965},{0x9D69, 0xF966},{0x9D6A, 0xF967},{0x9D6B, 0xF968},{0x9D6C, 0xF969},
- {0x9D6D, 0xF96A},{0x9D6E, 0xF96B},{0x9D6F, 0xF96C},{0x9D70, 0xF96D},{0x9D71, 0xF96E},{0x9D72, 0xF96F},{0x9D73, 0xF970},{0x9D74, 0xF971},
- {0x9D75, 0xF972},{0x9D76, 0xF973},{0x9D77, 0xF974},{0x9D78, 0xF975},{0x9D79, 0xF976},{0x9D7A, 0xF977},{0x9D7B, 0xF978},{0x9D7C, 0xF979},
- {0x9D7D, 0xF97A},{0x9D7E, 0xF97B},{0x9D7F, 0xF97C},{0x9D80, 0xF97D},{0x9D81, 0xF97E},{0x9D82, 0xF980},{0x9D83, 0xF981},{0x9D84, 0xF982},
- {0x9D85, 0xF983},{0x9D86, 0xF984},{0x9D87, 0xF985},{0x9D88, 0xF986},{0x9D89, 0xF987},{0x9D8A, 0xF988},{0x9D8B, 0xF989},{0x9D8C, 0xF98A},
- {0x9D8D, 0xF98B},{0x9D8E, 0xF98C},{0x9D8F, 0xF98D},{0x9D90, 0xF98E},{0x9D91, 0xF98F},{0x9D92, 0xF990},{0x9D93, 0xF991},{0x9D94, 0xF992},
- {0x9D95, 0xF993},{0x9D96, 0xF994},{0x9D97, 0xF995},{0x9D98, 0xF996},{0x9D99, 0xF997},{0x9D9A, 0xF998},{0x9D9B, 0xF999},{0x9D9C, 0xF99A},
- {0x9D9D, 0xF99B},{0x9D9E, 0xF99C},{0x9D9F, 0xF99D},{0x9DA0, 0xF99E},{0x9DA1, 0xF99F},{0x9DA2, 0xF9A0},{0x9DA3, 0xFA40},{0x9DA4, 0xFA41},
- {0x9DA5, 0xFA42},{0x9DA6, 0xFA43},{0x9DA7, 0xFA44},{0x9DA8, 0xFA45},{0x9DA9, 0xFA46},{0x9DAA, 0xFA47},{0x9DAB, 0xFA48},{0x9DAC, 0xFA49},
- {0x9DAD, 0xFA4A},{0x9DAE, 0xFA4B},{0x9DAF, 0xFA4C},{0x9DB0, 0xFA4D},{0x9DB1, 0xFA4E},{0x9DB2, 0xFA4F},{0x9DB3, 0xFA50},{0x9DB4, 0xFA51},
- {0x9DB5, 0xFA52},{0x9DB6, 0xFA53},{0x9DB7, 0xFA54},{0x9DB8, 0xFA55},{0x9DB9, 0xFA56},{0x9DBA, 0xFA57},{0x9DBB, 0xFA58},{0x9DBC, 0xFA59},
- {0x9DBD, 0xFA5A},{0x9DBE, 0xFA5B},{0x9DBF, 0xFA5C},{0x9DC0, 0xFA5D},{0x9DC1, 0xFA5E},{0x9DC2, 0xFA5F},{0x9DC3, 0xFA60},{0x9DC4, 0xFA61},
- {0x9DC5, 0xFA62},{0x9DC6, 0xFA63},{0x9DC7, 0xFA64},{0x9DC8, 0xFA65},{0x9DC9, 0xFA66},{0x9DCA, 0xFA67},{0x9DCB, 0xFA68},{0x9DCC, 0xFA69},
- {0x9DCD, 0xFA6A},{0x9DCE, 0xFA6B},{0x9DCF, 0xFA6C},{0x9DD0, 0xFA6D},{0x9DD1, 0xFA6E},{0x9DD2, 0xFA6F},{0x9DD3, 0xFA70},{0x9DD4, 0xFA71},
- {0x9DD5, 0xFA72},{0x9DD6, 0xFA73},{0x9DD7, 0xFA74},{0x9DD8, 0xFA75},{0x9DD9, 0xFA76},{0x9DDA, 0xFA77},{0x9DDB, 0xFA78},{0x9DDC, 0xFA79},
- {0x9DDD, 0xFA7A},{0x9DDE, 0xFA7B},{0x9DDF, 0xFA7C},{0x9DE0, 0xFA7D},{0x9DE1, 0xFA7E},{0x9DE2, 0xFA80},{0x9DE3, 0xFA81},{0x9DE4, 0xFA82},
- {0x9DE5, 0xFA83},{0x9DE6, 0xFA84},{0x9DE7, 0xFA85},{0x9DE8, 0xFA86},{0x9DE9, 0xFA87},{0x9DEA, 0xFA88},{0x9DEB, 0xFA89},{0x9DEC, 0xFA8A},
- {0x9DED, 0xFA8B},{0x9DEE, 0xFA8C},{0x9DEF, 0xFA8D},{0x9DF0, 0xFA8E},{0x9DF1, 0xFA8F},{0x9DF2, 0xFA90},{0x9DF3, 0xFA91},{0x9DF4, 0xFA92},
- {0x9DF5, 0xFA93},{0x9DF6, 0xFA94},{0x9DF7, 0xFA95},{0x9DF8, 0xFA96},{0x9DF9, 0xFA97},{0x9DFA, 0xFA98},{0x9DFB, 0xFA99},{0x9DFC, 0xFA9A},
- {0x9DFD, 0xFA9B},{0x9DFE, 0xFA9C},{0x9DFF, 0xFA9D},{0x9E00, 0xFA9E},{0x9E01, 0xFA9F},{0x9E02, 0xFAA0},{0x9E03, 0xFB40},{0x9E04, 0xFB41},
- {0x9E05, 0xFB42},{0x9E06, 0xFB43},{0x9E07, 0xFB44},{0x9E08, 0xFB45},{0x9E09, 0xFB46},{0x9E0A, 0xFB47},{0x9E0B, 0xFB48},{0x9E0C, 0xFB49},
- {0x9E0D, 0xFB4A},{0x9E0E, 0xFB4B},{0x9E0F, 0xFB4C},{0x9E10, 0xFB4D},{0x9E11, 0xFB4E},{0x9E12, 0xFB4F},{0x9E13, 0xFB50},{0x9E14, 0xFB51},
- {0x9E15, 0xFB52},{0x9E16, 0xFB53},{0x9E17, 0xFB54},{0x9E18, 0xFB55},{0x9E19, 0xFB56},{0x9E1A, 0xFB57},{0x9E1B, 0xFB58},{0x9E1C, 0xFB59},
- {0x9E1D, 0xFB5A},{0x9E1E, 0xFB5B},{0x9E1F, 0xC4F1},{0x9E20, 0xF0AF},{0x9E21, 0xBCA6},{0x9E22, 0xF0B0},{0x9E23, 0xC3F9},{0x9E24, 0xFB5C},
- {0x9E25, 0xC5B8},{0x9E26, 0xD1BB},{0x9E27, 0xFB5D},{0x9E28, 0xF0B1},{0x9E29, 0xF0B2},{0x9E2A, 0xF0B3},{0x9E2B, 0xF0B4},{0x9E2C, 0xF0B5},
- {0x9E2D, 0xD1BC},{0x9E2E, 0xFB5E},{0x9E2F, 0xD1EC},{0x9E30, 0xFB5F},{0x9E31, 0xF0B7},{0x9E32, 0xF0B6},{0x9E33, 0xD4A7},{0x9E34, 0xFB60},
- {0x9E35, 0xCDD2},{0x9E36, 0xF0B8},{0x9E37, 0xF0BA},{0x9E38, 0xF0B9},{0x9E39, 0xF0BB},{0x9E3A, 0xF0BC},{0x9E3B, 0xFB61},{0x9E3C, 0xFB62},
- {0x9E3D, 0xB8EB},{0x9E3E, 0xF0BD},{0x9E3F, 0xBAE8},{0x9E40, 0xFB63},{0x9E41, 0xF0BE},{0x9E42, 0xF0BF},{0x9E43, 0xBEE9},{0x9E44, 0xF0C0},
- {0x9E45, 0xB6EC},{0x9E46, 0xF0C1},{0x9E47, 0xF0C2},{0x9E48, 0xF0C3},{0x9E49, 0xF0C4},{0x9E4A, 0xC8B5},{0x9E4B, 0xF0C5},{0x9E4C, 0xF0C6},
- {0x9E4D, 0xFB64},{0x9E4E, 0xF0C7},{0x9E4F, 0xC5F4},{0x9E50, 0xFB65},{0x9E51, 0xF0C8},{0x9E52, 0xFB66},{0x9E53, 0xFB67},{0x9E54, 0xFB68},
- {0x9E55, 0xF0C9},{0x9E56, 0xFB69},{0x9E57, 0xF0CA},{0x9E58, 0xF7BD},{0x9E59, 0xFB6A},{0x9E5A, 0xF0CB},{0x9E5B, 0xF0CC},{0x9E5C, 0xF0CD},
- {0x9E5D, 0xFB6B},{0x9E5E, 0xF0CE},{0x9E5F, 0xFB6C},{0x9E60, 0xFB6D},{0x9E61, 0xFB6E},{0x9E62, 0xFB6F},{0x9E63, 0xF0CF},{0x9E64, 0xBAD7},
- {0x9E65, 0xFB70},{0x9E66, 0xF0D0},{0x9E67, 0xF0D1},{0x9E68, 0xF0D2},{0x9E69, 0xF0D3},{0x9E6A, 0xF0D4},{0x9E6B, 0xF0D5},{0x9E6C, 0xF0D6},
- {0x9E6D, 0xF0D8},{0x9E6E, 0xFB71},{0x9E6F, 0xFB72},{0x9E70, 0xD3A5},{0x9E71, 0xF0D7},{0x9E72, 0xFB73},{0x9E73, 0xF0D9},{0x9E74, 0xFB74},
- {0x9E75, 0xFB75},{0x9E76, 0xFB76},{0x9E77, 0xFB77},{0x9E78, 0xFB78},{0x9E79, 0xFB79},{0x9E7A, 0xFB7A},{0x9E7B, 0xFB7B},{0x9E7C, 0xFB7C},
- {0x9E7D, 0xFB7D},{0x9E7E, 0xF5BA},{0x9E7F, 0xC2B9},{0x9E80, 0xFB7E},{0x9E81, 0xFB80},{0x9E82, 0xF7E4},{0x9E83, 0xFB81},{0x9E84, 0xFB82},
- {0x9E85, 0xFB83},{0x9E86, 0xFB84},{0x9E87, 0xF7E5},{0x9E88, 0xF7E6},{0x9E89, 0xFB85},{0x9E8A, 0xFB86},{0x9E8B, 0xF7E7},{0x9E8C, 0xFB87},
- {0x9E8D, 0xFB88},{0x9E8E, 0xFB89},{0x9E8F, 0xFB8A},{0x9E90, 0xFB8B},{0x9E91, 0xFB8C},{0x9E92, 0xF7E8},{0x9E93, 0xC2B4},{0x9E94, 0xFB8D},
- {0x9E95, 0xFB8E},{0x9E96, 0xFB8F},{0x9E97, 0xFB90},{0x9E98, 0xFB91},{0x9E99, 0xFB92},{0x9E9A, 0xFB93},{0x9E9B, 0xFB94},{0x9E9C, 0xFB95},
- {0x9E9D, 0xF7EA},{0x9E9E, 0xFB96},{0x9E9F, 0xF7EB},{0x9EA0, 0xFB97},{0x9EA1, 0xFB98},{0x9EA2, 0xFB99},{0x9EA3, 0xFB9A},{0x9EA4, 0xFB9B},
- {0x9EA5, 0xFB9C},{0x9EA6, 0xC2F3},{0x9EA7, 0xFB9D},{0x9EA8, 0xFB9E},{0x9EA9, 0xFB9F},{0x9EAA, 0xFBA0},{0x9EAB, 0xFC40},{0x9EAC, 0xFC41},
- {0x9EAD, 0xFC42},{0x9EAE, 0xFC43},{0x9EAF, 0xFC44},{0x9EB0, 0xFC45},{0x9EB1, 0xFC46},{0x9EB2, 0xFC47},{0x9EB3, 0xFC48},{0x9EB4, 0xF4F0},
- {0x9EB5, 0xFC49},{0x9EB6, 0xFC4A},{0x9EB7, 0xFC4B},{0x9EB8, 0xF4EF},{0x9EB9, 0xFC4C},{0x9EBA, 0xFC4D},{0x9EBB, 0xC2E9},{0x9EBC, 0xFC4E},
- {0x9EBD, 0xF7E1},{0x9EBE, 0xF7E2},{0x9EBF, 0xFC4F},{0x9EC0, 0xFC50},{0x9EC1, 0xFC51},{0x9EC2, 0xFC52},{0x9EC3, 0xFC53},{0x9EC4, 0xBBC6},
- {0x9EC5, 0xFC54},{0x9EC6, 0xFC55},{0x9EC7, 0xFC56},{0x9EC8, 0xFC57},{0x9EC9, 0xD9E4},{0x9ECA, 0xFC58},{0x9ECB, 0xFC59},{0x9ECC, 0xFC5A},
- {0x9ECD, 0xCAF2},{0x9ECE, 0xC0E8},{0x9ECF, 0xF0A4},{0x9ED0, 0xFC5B},{0x9ED1, 0xBADA},{0x9ED2, 0xFC5C},{0x9ED3, 0xFC5D},{0x9ED4, 0xC7AD},
- {0x9ED5, 0xFC5E},{0x9ED6, 0xFC5F},{0x9ED7, 0xFC60},{0x9ED8, 0xC4AC},{0x9ED9, 0xFC61},{0x9EDA, 0xFC62},{0x9EDB, 0xF7EC},{0x9EDC, 0xF7ED},
- {0x9EDD, 0xF7EE},{0x9EDE, 0xFC63},{0x9EDF, 0xF7F0},{0x9EE0, 0xF7EF},{0x9EE1, 0xFC64},{0x9EE2, 0xF7F1},{0x9EE3, 0xFC65},{0x9EE4, 0xFC66},
- {0x9EE5, 0xF7F4},{0x9EE6, 0xFC67},{0x9EE7, 0xF7F3},{0x9EE8, 0xFC68},{0x9EE9, 0xF7F2},{0x9EEA, 0xF7F5},{0x9EEB, 0xFC69},{0x9EEC, 0xFC6A},
- {0x9EED, 0xFC6B},{0x9EEE, 0xFC6C},{0x9EEF, 0xF7F6},{0x9EF0, 0xFC6D},{0x9EF1, 0xFC6E},{0x9EF2, 0xFC6F},{0x9EF3, 0xFC70},{0x9EF4, 0xFC71},
- {0x9EF5, 0xFC72},{0x9EF6, 0xFC73},{0x9EF7, 0xFC74},{0x9EF8, 0xFC75},{0x9EF9, 0xEDE9},{0x9EFA, 0xFC76},{0x9EFB, 0xEDEA},{0x9EFC, 0xEDEB},
- {0x9EFD, 0xFC77},{0x9EFE, 0xF6BC},{0x9EFF, 0xFC78},{0x9F00, 0xFC79},{0x9F01, 0xFC7A},{0x9F02, 0xFC7B},{0x9F03, 0xFC7C},{0x9F04, 0xFC7D},
- {0x9F05, 0xFC7E},{0x9F06, 0xFC80},{0x9F07, 0xFC81},{0x9F08, 0xFC82},{0x9F09, 0xFC83},{0x9F0A, 0xFC84},{0x9F0B, 0xF6BD},{0x9F0C, 0xFC85},
- {0x9F0D, 0xF6BE},{0x9F0E, 0xB6A6},{0x9F0F, 0xFC86},{0x9F10, 0xD8BE},{0x9F11, 0xFC87},{0x9F12, 0xFC88},{0x9F13, 0xB9C4},{0x9F14, 0xFC89},
- {0x9F15, 0xFC8A},{0x9F16, 0xFC8B},{0x9F17, 0xD8BB},{0x9F18, 0xFC8C},{0x9F19, 0xDCB1},{0x9F1A, 0xFC8D},{0x9F1B, 0xFC8E},{0x9F1C, 0xFC8F},
- {0x9F1D, 0xFC90},{0x9F1E, 0xFC91},{0x9F1F, 0xFC92},{0x9F20, 0xCAF3},{0x9F21, 0xFC93},{0x9F22, 0xF7F7},{0x9F23, 0xFC94},{0x9F24, 0xFC95},
- {0x9F25, 0xFC96},{0x9F26, 0xFC97},{0x9F27, 0xFC98},{0x9F28, 0xFC99},{0x9F29, 0xFC9A},{0x9F2A, 0xFC9B},{0x9F2B, 0xFC9C},{0x9F2C, 0xF7F8},
- {0x9F2D, 0xFC9D},{0x9F2E, 0xFC9E},{0x9F2F, 0xF7F9},{0x9F30, 0xFC9F},{0x9F31, 0xFCA0},{0x9F32, 0xFD40},{0x9F33, 0xFD41},{0x9F34, 0xFD42},
- {0x9F35, 0xFD43},{0x9F36, 0xFD44},{0x9F37, 0xF7FB},{0x9F38, 0xFD45},{0x9F39, 0xF7FA},{0x9F3A, 0xFD46},{0x9F3B, 0xB1C7},{0x9F3C, 0xFD47},
- {0x9F3D, 0xF7FC},{0x9F3E, 0xF7FD},{0x9F3F, 0xFD48},{0x9F40, 0xFD49},{0x9F41, 0xFD4A},{0x9F42, 0xFD4B},{0x9F43, 0xFD4C},{0x9F44, 0xF7FE},
- {0x9F45, 0xFD4D},{0x9F46, 0xFD4E},{0x9F47, 0xFD4F},{0x9F48, 0xFD50},{0x9F49, 0xFD51},{0x9F4A, 0xFD52},{0x9F4B, 0xFD53},{0x9F4C, 0xFD54},
- {0x9F4D, 0xFD55},{0x9F4E, 0xFD56},{0x9F4F, 0xFD57},{0x9F50, 0xC6EB},{0x9F51, 0xECB4},{0x9F52, 0xFD58},{0x9F53, 0xFD59},{0x9F54, 0xFD5A},
- {0x9F55, 0xFD5B},{0x9F56, 0xFD5C},{0x9F57, 0xFD5D},{0x9F58, 0xFD5E},{0x9F59, 0xFD5F},{0x9F5A, 0xFD60},{0x9F5B, 0xFD61},{0x9F5C, 0xFD62},
- {0x9F5D, 0xFD63},{0x9F5E, 0xFD64},{0x9F5F, 0xFD65},{0x9F60, 0xFD66},{0x9F61, 0xFD67},{0x9F62, 0xFD68},{0x9F63, 0xFD69},{0x9F64, 0xFD6A},
- {0x9F65, 0xFD6B},{0x9F66, 0xFD6C},{0x9F67, 0xFD6D},{0x9F68, 0xFD6E},{0x9F69, 0xFD6F},{0x9F6A, 0xFD70},{0x9F6B, 0xFD71},{0x9F6C, 0xFD72},
- {0x9F6D, 0xFD73},{0x9F6E, 0xFD74},{0x9F6F, 0xFD75},{0x9F70, 0xFD76},{0x9F71, 0xFD77},{0x9F72, 0xFD78},{0x9F73, 0xFD79},{0x9F74, 0xFD7A},
- {0x9F75, 0xFD7B},{0x9F76, 0xFD7C},{0x9F77, 0xFD7D},{0x9F78, 0xFD7E},{0x9F79, 0xFD80},{0x9F7A, 0xFD81},{0x9F7B, 0xFD82},{0x9F7C, 0xFD83},
- {0x9F7D, 0xFD84},{0x9F7E, 0xFD85},{0x9F7F, 0xB3DD},{0x9F80, 0xF6B3},{0x9F81, 0xFD86},{0x9F82, 0xFD87},{0x9F83, 0xF6B4},{0x9F84, 0xC1E4},
- {0x9F85, 0xF6B5},{0x9F86, 0xF6B6},{0x9F87, 0xF6B7},{0x9F88, 0xF6B8},{0x9F89, 0xF6B9},{0x9F8A, 0xF6BA},{0x9F8B, 0xC8A3},{0x9F8C, 0xF6BB},
- {0x9F8D, 0xFD88},{0x9F8E, 0xFD89},{0x9F8F, 0xFD8A},{0x9F90, 0xFD8B},{0x9F91, 0xFD8C},{0x9F92, 0xFD8D},{0x9F93, 0xFD8E},{0x9F94, 0xFD8F},
- {0x9F95, 0xFD90},{0x9F96, 0xFD91},{0x9F97, 0xFD92},{0x9F98, 0xFD93},{0x9F99, 0xC1FA},{0x9F9A, 0xB9A8},{0x9F9B, 0xEDE8},{0x9F9C, 0xFD94},
- {0x9F9D, 0xFD95},{0x9F9E, 0xFD96},{0x9F9F, 0xB9EA},{0x9FA0, 0xD9DF},{0x9FA1, 0xFD97},{0x9FA2, 0xFD98},{0x9FA3, 0xFD99},{0x9FA4, 0xFD9A},
- {0x9FA5, 0xFD9B},{0xE000, 0xAAA1},{0xE001, 0xAAA2},{0xE002, 0xAAA3},{0xE003, 0xAAA4},{0xE004, 0xAAA5},{0xE005, 0xAAA6},{0xE006, 0xAAA7},
- {0xE007, 0xAAA8},{0xE008, 0xAAA9},{0xE009, 0xAAAA},{0xE00A, 0xAAAB},{0xE00B, 0xAAAC},{0xE00C, 0xAAAD},{0xE00D, 0xAAAE},{0xE00E, 0xAAAF},
- {0xE00F, 0xAAB0},{0xE010, 0xAAB1},{0xE011, 0xAAB2},{0xE012, 0xAAB3},{0xE013, 0xAAB4},{0xE014, 0xAAB5},{0xE015, 0xAAB6},{0xE016, 0xAAB7},
- {0xE017, 0xAAB8},{0xE018, 0xAAB9},{0xE019, 0xAABA},{0xE01A, 0xAABB},{0xE01B, 0xAABC},{0xE01C, 0xAABD},{0xE01D, 0xAABE},{0xE01E, 0xAABF},
- {0xE01F, 0xAAC0},{0xE020, 0xAAC1},{0xE021, 0xAAC2},{0xE022, 0xAAC3},{0xE023, 0xAAC4},{0xE024, 0xAAC5},{0xE025, 0xAAC6},{0xE026, 0xAAC7},
- {0xE027, 0xAAC8},{0xE028, 0xAAC9},{0xE029, 0xAACA},{0xE02A, 0xAACB},{0xE02B, 0xAACC},{0xE02C, 0xAACD},{0xE02D, 0xAACE},{0xE02E, 0xAACF},
- {0xE02F, 0xAAD0},{0xE030, 0xAAD1},{0xE031, 0xAAD2},{0xE032, 0xAAD3},{0xE033, 0xAAD4},{0xE034, 0xAAD5},{0xE035, 0xAAD6},{0xE036, 0xAAD7},
- {0xE037, 0xAAD8},{0xE038, 0xAAD9},{0xE039, 0xAADA},{0xE03A, 0xAADB},{0xE03B, 0xAADC},{0xE03C, 0xAADD},{0xE03D, 0xAADE},{0xE03E, 0xAADF},
- {0xE03F, 0xAAE0},{0xE040, 0xAAE1},{0xE041, 0xAAE2},{0xE042, 0xAAE3},{0xE043, 0xAAE4},{0xE044, 0xAAE5},{0xE045, 0xAAE6},{0xE046, 0xAAE7},
- {0xE047, 0xAAE8},{0xE048, 0xAAE9},{0xE049, 0xAAEA},{0xE04A, 0xAAEB},{0xE04B, 0xAAEC},{0xE04C, 0xAAED},{0xE04D, 0xAAEE},{0xE04E, 0xAAEF},
- {0xE04F, 0xAAF0},{0xE050, 0xAAF1},{0xE051, 0xAAF2},{0xE052, 0xAAF3},{0xE053, 0xAAF4},{0xE054, 0xAAF5},{0xE055, 0xAAF6},{0xE056, 0xAAF7},
- {0xE057, 0xAAF8},{0xE058, 0xAAF9},{0xE059, 0xAAFA},{0xE05A, 0xAAFB},{0xE05B, 0xAAFC},{0xE05C, 0xAAFD},{0xE05D, 0xAAFE},{0xE05E, 0xABA1},
- {0xE05F, 0xABA2},{0xE060, 0xABA3},{0xE061, 0xABA4},{0xE062, 0xABA5},{0xE063, 0xABA6},{0xE064, 0xABA7},{0xE065, 0xABA8},{0xE066, 0xABA9},
- {0xE067, 0xABAA},{0xE068, 0xABAB},{0xE069, 0xABAC},{0xE06A, 0xABAD},{0xE06B, 0xABAE},{0xE06C, 0xABAF},{0xE06D, 0xABB0},{0xE06E, 0xABB1},
- {0xE06F, 0xABB2},{0xE070, 0xABB3},{0xE071, 0xABB4},{0xE072, 0xABB5},{0xE073, 0xABB6},{0xE074, 0xABB7},{0xE075, 0xABB8},{0xE076, 0xABB9},
- {0xE077, 0xABBA},{0xE078, 0xABBB},{0xE079, 0xABBC},{0xE07A, 0xABBD},{0xE07B, 0xABBE},{0xE07C, 0xABBF},{0xE07D, 0xABC0},{0xE07E, 0xABC1},
- {0xE07F, 0xABC2},{0xE080, 0xABC3},{0xE081, 0xABC4},{0xE082, 0xABC5},{0xE083, 0xABC6},{0xE084, 0xABC7},{0xE085, 0xABC8},{0xE086, 0xABC9},
- {0xE087, 0xABCA},{0xE088, 0xABCB},{0xE089, 0xABCC},{0xE08A, 0xABCD},{0xE08B, 0xABCE},{0xE08C, 0xABCF},{0xE08D, 0xABD0},{0xE08E, 0xABD1},
- {0xE08F, 0xABD2},{0xE090, 0xABD3},{0xE091, 0xABD4},{0xE092, 0xABD5},{0xE093, 0xABD6},{0xE094, 0xABD7},{0xE095, 0xABD8},{0xE096, 0xABD9},
- {0xE097, 0xABDA},{0xE098, 0xABDB},{0xE099, 0xABDC},{0xE09A, 0xABDD},{0xE09B, 0xABDE},{0xE09C, 0xABDF},{0xE09D, 0xABE0},{0xE09E, 0xABE1},
- {0xE09F, 0xABE2},{0xE0A0, 0xABE3},{0xE0A1, 0xABE4},{0xE0A2, 0xABE5},{0xE0A3, 0xABE6},{0xE0A4, 0xABE7},{0xE0A5, 0xABE8},{0xE0A6, 0xABE9},
- {0xE0A7, 0xABEA},{0xE0A8, 0xABEB},{0xE0A9, 0xABEC},{0xE0AA, 0xABED},{0xE0AB, 0xABEE},{0xE0AC, 0xABEF},{0xE0AD, 0xABF0},{0xE0AE, 0xABF1},
- {0xE0AF, 0xABF2},{0xE0B0, 0xABF3},{0xE0B1, 0xABF4},{0xE0B2, 0xABF5},{0xE0B3, 0xABF6},{0xE0B4, 0xABF7},{0xE0B5, 0xABF8},{0xE0B6, 0xABF9},
- {0xE0B7, 0xABFA},{0xE0B8, 0xABFB},{0xE0B9, 0xABFC},{0xE0BA, 0xABFD},{0xE0BB, 0xABFE},{0xE0BC, 0xACA1},{0xE0BD, 0xACA2},{0xE0BE, 0xACA3},
- {0xE0BF, 0xACA4},{0xE0C0, 0xACA5},{0xE0C1, 0xACA6},{0xE0C2, 0xACA7},{0xE0C3, 0xACA8},{0xE0C4, 0xACA9},{0xE0C5, 0xACAA},{0xE0C6, 0xACAB},
- {0xE0C7, 0xACAC},{0xE0C8, 0xACAD},{0xE0C9, 0xACAE},{0xE0CA, 0xACAF},{0xE0CB, 0xACB0},{0xE0CC, 0xACB1},{0xE0CD, 0xACB2},{0xE0CE, 0xACB3},
- {0xE0CF, 0xACB4},{0xE0D0, 0xACB5},{0xE0D1, 0xACB6},{0xE0D2, 0xACB7},{0xE0D3, 0xACB8},{0xE0D4, 0xACB9},{0xE0D5, 0xACBA},{0xE0D6, 0xACBB},
- {0xE0D7, 0xACBC},{0xE0D8, 0xACBD},{0xE0D9, 0xACBE},{0xE0DA, 0xACBF},{0xE0DB, 0xACC0},{0xE0DC, 0xACC1},{0xE0DD, 0xACC2},{0xE0DE, 0xACC3},
- {0xE0DF, 0xACC4},{0xE0E0, 0xACC5},{0xE0E1, 0xACC6},{0xE0E2, 0xACC7},{0xE0E3, 0xACC8},{0xE0E4, 0xACC9},{0xE0E5, 0xACCA},{0xE0E6, 0xACCB},
- {0xE0E7, 0xACCC},{0xE0E8, 0xACCD},{0xE0E9, 0xACCE},{0xE0EA, 0xACCF},{0xE0EB, 0xACD0},{0xE0EC, 0xACD1},{0xE0ED, 0xACD2},{0xE0EE, 0xACD3},
- {0xE0EF, 0xACD4},{0xE0F0, 0xACD5},{0xE0F1, 0xACD6},{0xE0F2, 0xACD7},{0xE0F3, 0xACD8},{0xE0F4, 0xACD9},{0xE0F5, 0xACDA},{0xE0F6, 0xACDB},
- {0xE0F7, 0xACDC},{0xE0F8, 0xACDD},{0xE0F9, 0xACDE},{0xE0FA, 0xACDF},{0xE0FB, 0xACE0},{0xE0FC, 0xACE1},{0xE0FD, 0xACE2},{0xE0FE, 0xACE3},
- {0xE0FF, 0xACE4},{0xE100, 0xACE5},{0xE101, 0xACE6},{0xE102, 0xACE7},{0xE103, 0xACE8},{0xE104, 0xACE9},{0xE105, 0xACEA},{0xE106, 0xACEB},
- {0xE107, 0xACEC},{0xE108, 0xACED},{0xE109, 0xACEE},{0xE10A, 0xACEF},{0xE10B, 0xACF0},{0xE10C, 0xACF1},{0xE10D, 0xACF2},{0xE10E, 0xACF3},
- {0xE10F, 0xACF4},{0xE110, 0xACF5},{0xE111, 0xACF6},{0xE112, 0xACF7},{0xE113, 0xACF8},{0xE114, 0xACF9},{0xE115, 0xACFA},{0xE116, 0xACFB},
- {0xE117, 0xACFC},{0xE118, 0xACFD},{0xE119, 0xACFE},{0xE11A, 0xADA1},{0xE11B, 0xADA2},{0xE11C, 0xADA3},{0xE11D, 0xADA4},{0xE11E, 0xADA5},
- {0xE11F, 0xADA6},{0xE120, 0xADA7},{0xE121, 0xADA8},{0xE122, 0xADA9},{0xE123, 0xADAA},{0xE124, 0xADAB},{0xE125, 0xADAC},{0xE126, 0xADAD},
- {0xE127, 0xADAE},{0xE128, 0xADAF},{0xE129, 0xADB0},{0xE12A, 0xADB1},{0xE12B, 0xADB2},{0xE12C, 0xADB3},{0xE12D, 0xADB4},{0xE12E, 0xADB5},
- {0xE12F, 0xADB6},{0xE130, 0xADB7},{0xE131, 0xADB8},{0xE132, 0xADB9},{0xE133, 0xADBA},{0xE134, 0xADBB},{0xE135, 0xADBC},{0xE136, 0xADBD},
- {0xE137, 0xADBE},{0xE138, 0xADBF},{0xE139, 0xADC0},{0xE13A, 0xADC1},{0xE13B, 0xADC2},{0xE13C, 0xADC3},{0xE13D, 0xADC4},{0xE13E, 0xADC5},
- {0xE13F, 0xADC6},{0xE140, 0xADC7},{0xE141, 0xADC8},{0xE142, 0xADC9},{0xE143, 0xADCA},{0xE144, 0xADCB},{0xE145, 0xADCC},{0xE146, 0xADCD},
- {0xE147, 0xADCE},{0xE148, 0xADCF},{0xE149, 0xADD0},{0xE14A, 0xADD1},{0xE14B, 0xADD2},{0xE14C, 0xADD3},{0xE14D, 0xADD4},{0xE14E, 0xADD5},
- {0xE14F, 0xADD6},{0xE150, 0xADD7},{0xE151, 0xADD8},{0xE152, 0xADD9},{0xE153, 0xADDA},{0xE154, 0xADDB},{0xE155, 0xADDC},{0xE156, 0xADDD},
- {0xE157, 0xADDE},{0xE158, 0xADDF},{0xE159, 0xADE0},{0xE15A, 0xADE1},{0xE15B, 0xADE2},{0xE15C, 0xADE3},{0xE15D, 0xADE4},{0xE15E, 0xADE5},
- {0xE15F, 0xADE6},{0xE160, 0xADE7},{0xE161, 0xADE8},{0xE162, 0xADE9},{0xE163, 0xADEA},{0xE164, 0xADEB},{0xE165, 0xADEC},{0xE166, 0xADED},
- {0xE167, 0xADEE},{0xE168, 0xADEF},{0xE169, 0xADF0},{0xE16A, 0xADF1},{0xE16B, 0xADF2},{0xE16C, 0xADF3},{0xE16D, 0xADF4},{0xE16E, 0xADF5},
- {0xE16F, 0xADF6},{0xE170, 0xADF7},{0xE171, 0xADF8},{0xE172, 0xADF9},{0xE173, 0xADFA},{0xE174, 0xADFB},{0xE175, 0xADFC},{0xE176, 0xADFD},
- {0xE177, 0xADFE},{0xE178, 0xAEA1},{0xE179, 0xAEA2},{0xE17A, 0xAEA3},{0xE17B, 0xAEA4},{0xE17C, 0xAEA5},{0xE17D, 0xAEA6},{0xE17E, 0xAEA7},
- {0xE17F, 0xAEA8},{0xE180, 0xAEA9},{0xE181, 0xAEAA},{0xE182, 0xAEAB},{0xE183, 0xAEAC},{0xE184, 0xAEAD},{0xE185, 0xAEAE},{0xE186, 0xAEAF},
- {0xE187, 0xAEB0},{0xE188, 0xAEB1},{0xE189, 0xAEB2},{0xE18A, 0xAEB3},{0xE18B, 0xAEB4},{0xE18C, 0xAEB5},{0xE18D, 0xAEB6},{0xE18E, 0xAEB7},
- {0xE18F, 0xAEB8},{0xE190, 0xAEB9},{0xE191, 0xAEBA},{0xE192, 0xAEBB},{0xE193, 0xAEBC},{0xE194, 0xAEBD},{0xE195, 0xAEBE},{0xE196, 0xAEBF},
- {0xE197, 0xAEC0},{0xE198, 0xAEC1},{0xE199, 0xAEC2},{0xE19A, 0xAEC3},{0xE19B, 0xAEC4},{0xE19C, 0xAEC5},{0xE19D, 0xAEC6},{0xE19E, 0xAEC7},
- {0xE19F, 0xAEC8},{0xE1A0, 0xAEC9},{0xE1A1, 0xAECA},{0xE1A2, 0xAECB},{0xE1A3, 0xAECC},{0xE1A4, 0xAECD},{0xE1A5, 0xAECE},{0xE1A6, 0xAECF},
- {0xE1A7, 0xAED0},{0xE1A8, 0xAED1},{0xE1A9, 0xAED2},{0xE1AA, 0xAED3},{0xE1AB, 0xAED4},{0xE1AC, 0xAED5},{0xE1AD, 0xAED6},{0xE1AE, 0xAED7},
- {0xE1AF, 0xAED8},{0xE1B0, 0xAED9},{0xE1B1, 0xAEDA},{0xE1B2, 0xAEDB},{0xE1B3, 0xAEDC},{0xE1B4, 0xAEDD},{0xE1B5, 0xAEDE},{0xE1B6, 0xAEDF},
- {0xE1B7, 0xAEE0},{0xE1B8, 0xAEE1},{0xE1B9, 0xAEE2},{0xE1BA, 0xAEE3},{0xE1BB, 0xAEE4},{0xE1BC, 0xAEE5},{0xE1BD, 0xAEE6},{0xE1BE, 0xAEE7},
- {0xE1BF, 0xAEE8},{0xE1C0, 0xAEE9},{0xE1C1, 0xAEEA},{0xE1C2, 0xAEEB},{0xE1C3, 0xAEEC},{0xE1C4, 0xAEED},{0xE1C5, 0xAEEE},{0xE1C6, 0xAEEF},
- {0xE1C7, 0xAEF0},{0xE1C8, 0xAEF1},{0xE1C9, 0xAEF2},{0xE1CA, 0xAEF3},{0xE1CB, 0xAEF4},{0xE1CC, 0xAEF5},{0xE1CD, 0xAEF6},{0xE1CE, 0xAEF7},
- {0xE1CF, 0xAEF8},{0xE1D0, 0xAEF9},{0xE1D1, 0xAEFA},{0xE1D2, 0xAEFB},{0xE1D3, 0xAEFC},{0xE1D4, 0xAEFD},{0xE1D5, 0xAEFE},{0xE1D6, 0xAFA1},
- {0xE1D7, 0xAFA2},{0xE1D8, 0xAFA3},{0xE1D9, 0xAFA4},{0xE1DA, 0xAFA5},{0xE1DB, 0xAFA6},{0xE1DC, 0xAFA7},{0xE1DD, 0xAFA8},{0xE1DE, 0xAFA9},
- {0xE1DF, 0xAFAA},{0xE1E0, 0xAFAB},{0xE1E1, 0xAFAC},{0xE1E2, 0xAFAD},{0xE1E3, 0xAFAE},{0xE1E4, 0xAFAF},{0xE1E5, 0xAFB0},{0xE1E6, 0xAFB1},
- {0xE1E7, 0xAFB2},{0xE1E8, 0xAFB3},{0xE1E9, 0xAFB4},{0xE1EA, 0xAFB5},{0xE1EB, 0xAFB6},{0xE1EC, 0xAFB7},{0xE1ED, 0xAFB8},{0xE1EE, 0xAFB9},
- {0xE1EF, 0xAFBA},{0xE1F0, 0xAFBB},{0xE1F1, 0xAFBC},{0xE1F2, 0xAFBD},{0xE1F3, 0xAFBE},{0xE1F4, 0xAFBF},{0xE1F5, 0xAFC0},{0xE1F6, 0xAFC1},
- {0xE1F7, 0xAFC2},{0xE1F8, 0xAFC3},{0xE1F9, 0xAFC4},{0xE1FA, 0xAFC5},{0xE1FB, 0xAFC6},{0xE1FC, 0xAFC7},{0xE1FD, 0xAFC8},{0xE1FE, 0xAFC9},
- {0xE1FF, 0xAFCA},{0xE200, 0xAFCB},{0xE201, 0xAFCC},{0xE202, 0xAFCD},{0xE203, 0xAFCE},{0xE204, 0xAFCF},{0xE205, 0xAFD0},{0xE206, 0xAFD1},
- {0xE207, 0xAFD2},{0xE208, 0xAFD3},{0xE209, 0xAFD4},{0xE20A, 0xAFD5},{0xE20B, 0xAFD6},{0xE20C, 0xAFD7},{0xE20D, 0xAFD8},{0xE20E, 0xAFD9},
- {0xE20F, 0xAFDA},{0xE210, 0xAFDB},{0xE211, 0xAFDC},{0xE212, 0xAFDD},{0xE213, 0xAFDE},{0xE214, 0xAFDF},{0xE215, 0xAFE0},{0xE216, 0xAFE1},
- {0xE217, 0xAFE2},{0xE218, 0xAFE3},{0xE219, 0xAFE4},{0xE21A, 0xAFE5},{0xE21B, 0xAFE6},{0xE21C, 0xAFE7},{0xE21D, 0xAFE8},{0xE21E, 0xAFE9},
- {0xE21F, 0xAFEA},{0xE220, 0xAFEB},{0xE221, 0xAFEC},{0xE222, 0xAFED},{0xE223, 0xAFEE},{0xE224, 0xAFEF},{0xE225, 0xAFF0},{0xE226, 0xAFF1},
- {0xE227, 0xAFF2},{0xE228, 0xAFF3},{0xE229, 0xAFF4},{0xE22A, 0xAFF5},{0xE22B, 0xAFF6},{0xE22C, 0xAFF7},{0xE22D, 0xAFF8},{0xE22E, 0xAFF9},
- {0xE22F, 0xAFFA},{0xE230, 0xAFFB},{0xE231, 0xAFFC},{0xE232, 0xAFFD},{0xE233, 0xAFFE},{0xE234, 0xF8A1},{0xE235, 0xF8A2},{0xE236, 0xF8A3},
- {0xE237, 0xF8A4},{0xE238, 0xF8A5},{0xE239, 0xF8A6},{0xE23A, 0xF8A7},{0xE23B, 0xF8A8},{0xE23C, 0xF8A9},{0xE23D, 0xF8AA},{0xE23E, 0xF8AB},
- {0xE23F, 0xF8AC},{0xE240, 0xF8AD},{0xE241, 0xF8AE},{0xE242, 0xF8AF},{0xE243, 0xF8B0},{0xE244, 0xF8B1},{0xE245, 0xF8B2},{0xE246, 0xF8B3},
- {0xE247, 0xF8B4},{0xE248, 0xF8B5},{0xE249, 0xF8B6},{0xE24A, 0xF8B7},{0xE24B, 0xF8B8},{0xE24C, 0xF8B9},{0xE24D, 0xF8BA},{0xE24E, 0xF8BB},
- {0xE24F, 0xF8BC},{0xE250, 0xF8BD},{0xE251, 0xF8BE},{0xE252, 0xF8BF},{0xE253, 0xF8C0},{0xE254, 0xF8C1},{0xE255, 0xF8C2},{0xE256, 0xF8C3},
- {0xE257, 0xF8C4},{0xE258, 0xF8C5},{0xE259, 0xF8C6},{0xE25A, 0xF8C7},{0xE25B, 0xF8C8},{0xE25C, 0xF8C9},{0xE25D, 0xF8CA},{0xE25E, 0xF8CB},
- {0xE25F, 0xF8CC},{0xE260, 0xF8CD},{0xE261, 0xF8CE},{0xE262, 0xF8CF},{0xE263, 0xF8D0},{0xE264, 0xF8D1},{0xE265, 0xF8D2},{0xE266, 0xF8D3},
- {0xE267, 0xF8D4},{0xE268, 0xF8D5},{0xE269, 0xF8D6},{0xE26A, 0xF8D7},{0xE26B, 0xF8D8},{0xE26C, 0xF8D9},{0xE26D, 0xF8DA},{0xE26E, 0xF8DB},
- {0xE26F, 0xF8DC},{0xE270, 0xF8DD},{0xE271, 0xF8DE},{0xE272, 0xF8DF},{0xE273, 0xF8E0},{0xE274, 0xF8E1},{0xE275, 0xF8E2},{0xE276, 0xF8E3},
- {0xE277, 0xF8E4},{0xE278, 0xF8E5},{0xE279, 0xF8E6},{0xE27A, 0xF8E7},{0xE27B, 0xF8E8},{0xE27C, 0xF8E9},{0xE27D, 0xF8EA},{0xE27E, 0xF8EB},
- {0xE27F, 0xF8EC},{0xE280, 0xF8ED},{0xE281, 0xF8EE},{0xE282, 0xF8EF},{0xE283, 0xF8F0},{0xE284, 0xF8F1},{0xE285, 0xF8F2},{0xE286, 0xF8F3},
- {0xE287, 0xF8F4},{0xE288, 0xF8F5},{0xE289, 0xF8F6},{0xE28A, 0xF8F7},{0xE28B, 0xF8F8},{0xE28C, 0xF8F9},{0xE28D, 0xF8FA},{0xE28E, 0xF8FB},
- {0xE28F, 0xF8FC},{0xE290, 0xF8FD},{0xE291, 0xF8FE},{0xE292, 0xF9A1},{0xE293, 0xF9A2},{0xE294, 0xF9A3},{0xE295, 0xF9A4},{0xE296, 0xF9A5},
- {0xE297, 0xF9A6},{0xE298, 0xF9A7},{0xE299, 0xF9A8},{0xE29A, 0xF9A9},{0xE29B, 0xF9AA},{0xE29C, 0xF9AB},{0xE29D, 0xF9AC},{0xE29E, 0xF9AD},
- {0xE29F, 0xF9AE},{0xE2A0, 0xF9AF},{0xE2A1, 0xF9B0},{0xE2A2, 0xF9B1},{0xE2A3, 0xF9B2},{0xE2A4, 0xF9B3},{0xE2A5, 0xF9B4},{0xE2A6, 0xF9B5},
- {0xE2A7, 0xF9B6},{0xE2A8, 0xF9B7},{0xE2A9, 0xF9B8},{0xE2AA, 0xF9B9},{0xE2AB, 0xF9BA},{0xE2AC, 0xF9BB},{0xE2AD, 0xF9BC},{0xE2AE, 0xF9BD},
- {0xE2AF, 0xF9BE},{0xE2B0, 0xF9BF},{0xE2B1, 0xF9C0},{0xE2B2, 0xF9C1},{0xE2B3, 0xF9C2},{0xE2B4, 0xF9C3},{0xE2B5, 0xF9C4},{0xE2B6, 0xF9C5},
- {0xE2B7, 0xF9C6},{0xE2B8, 0xF9C7},{0xE2B9, 0xF9C8},{0xE2BA, 0xF9C9},{0xE2BB, 0xF9CA},{0xE2BC, 0xF9CB},{0xE2BD, 0xF9CC},{0xE2BE, 0xF9CD},
- {0xE2BF, 0xF9CE},{0xE2C0, 0xF9CF},{0xE2C1, 0xF9D0},{0xE2C2, 0xF9D1},{0xE2C3, 0xF9D2},{0xE2C4, 0xF9D3},{0xE2C5, 0xF9D4},{0xE2C6, 0xF9D5},
- {0xE2C7, 0xF9D6},{0xE2C8, 0xF9D7},{0xE2C9, 0xF9D8},{0xE2CA, 0xF9D9},{0xE2CB, 0xF9DA},{0xE2CC, 0xF9DB},{0xE2CD, 0xF9DC},{0xE2CE, 0xF9DD},
- {0xE2CF, 0xF9DE},{0xE2D0, 0xF9DF},{0xE2D1, 0xF9E0},{0xE2D2, 0xF9E1},{0xE2D3, 0xF9E2},{0xE2D4, 0xF9E3},{0xE2D5, 0xF9E4},{0xE2D6, 0xF9E5},
- {0xE2D7, 0xF9E6},{0xE2D8, 0xF9E7},{0xE2D9, 0xF9E8},{0xE2DA, 0xF9E9},{0xE2DB, 0xF9EA},{0xE2DC, 0xF9EB},{0xE2DD, 0xF9EC},{0xE2DE, 0xF9ED},
- {0xE2DF, 0xF9EE},{0xE2E0, 0xF9EF},{0xE2E1, 0xF9F0},{0xE2E2, 0xF9F1},{0xE2E3, 0xF9F2},{0xE2E4, 0xF9F3},{0xE2E5, 0xF9F4},{0xE2E6, 0xF9F5},
- {0xE2E7, 0xF9F6},{0xE2E8, 0xF9F7},{0xE2E9, 0xF9F8},{0xE2EA, 0xF9F9},{0xE2EB, 0xF9FA},{0xE2EC, 0xF9FB},{0xE2ED, 0xF9FC},{0xE2EE, 0xF9FD},
- {0xE2EF, 0xF9FE},{0xE2F0, 0xFAA1},{0xE2F1, 0xFAA2},{0xE2F2, 0xFAA3},{0xE2F3, 0xFAA4},{0xE2F4, 0xFAA5},{0xE2F5, 0xFAA6},{0xE2F6, 0xFAA7},
- {0xE2F7, 0xFAA8},{0xE2F8, 0xFAA9},{0xE2F9, 0xFAAA},{0xE2FA, 0xFAAB},{0xE2FB, 0xFAAC},{0xE2FC, 0xFAAD},{0xE2FD, 0xFAAE},{0xE2FE, 0xFAAF},
- {0xE2FF, 0xFAB0},{0xE300, 0xFAB1},{0xE301, 0xFAB2},{0xE302, 0xFAB3},{0xE303, 0xFAB4},{0xE304, 0xFAB5},{0xE305, 0xFAB6},{0xE306, 0xFAB7},
- {0xE307, 0xFAB8},{0xE308, 0xFAB9},{0xE309, 0xFABA},{0xE30A, 0xFABB},{0xE30B, 0xFABC},{0xE30C, 0xFABD},{0xE30D, 0xFABE},{0xE30E, 0xFABF},
- {0xE30F, 0xFAC0},{0xE310, 0xFAC1},{0xE311, 0xFAC2},{0xE312, 0xFAC3},{0xE313, 0xFAC4},{0xE314, 0xFAC5},{0xE315, 0xFAC6},{0xE316, 0xFAC7},
- {0xE317, 0xFAC8},{0xE318, 0xFAC9},{0xE319, 0xFACA},{0xE31A, 0xFACB},{0xE31B, 0xFACC},{0xE31C, 0xFACD},{0xE31D, 0xFACE},{0xE31E, 0xFACF},
- {0xE31F, 0xFAD0},{0xE320, 0xFAD1},{0xE321, 0xFAD2},{0xE322, 0xFAD3},{0xE323, 0xFAD4},{0xE324, 0xFAD5},{0xE325, 0xFAD6},{0xE326, 0xFAD7},
- {0xE327, 0xFAD8},{0xE328, 0xFAD9},{0xE329, 0xFADA},{0xE32A, 0xFADB},{0xE32B, 0xFADC},{0xE32C, 0xFADD},{0xE32D, 0xFADE},{0xE32E, 0xFADF},
- {0xE32F, 0xFAE0},{0xE330, 0xFAE1},{0xE331, 0xFAE2},{0xE332, 0xFAE3},{0xE333, 0xFAE4},{0xE334, 0xFAE5},{0xE335, 0xFAE6},{0xE336, 0xFAE7},
- {0xE337, 0xFAE8},{0xE338, 0xFAE9},{0xE339, 0xFAEA},{0xE33A, 0xFAEB},{0xE33B, 0xFAEC},{0xE33C, 0xFAED},{0xE33D, 0xFAEE},{0xE33E, 0xFAEF},
- {0xE33F, 0xFAF0},{0xE340, 0xFAF1},{0xE341, 0xFAF2},{0xE342, 0xFAF3},{0xE343, 0xFAF4},{0xE344, 0xFAF5},{0xE345, 0xFAF6},{0xE346, 0xFAF7},
- {0xE347, 0xFAF8},{0xE348, 0xFAF9},{0xE349, 0xFAFA},{0xE34A, 0xFAFB},{0xE34B, 0xFAFC},{0xE34C, 0xFAFD},{0xE34D, 0xFAFE},{0xE34E, 0xFBA1},
- {0xE34F, 0xFBA2},{0xE350, 0xFBA3},{0xE351, 0xFBA4},{0xE352, 0xFBA5},{0xE353, 0xFBA6},{0xE354, 0xFBA7},{0xE355, 0xFBA8},{0xE356, 0xFBA9},
- {0xE357, 0xFBAA},{0xE358, 0xFBAB},{0xE359, 0xFBAC},{0xE35A, 0xFBAD},{0xE35B, 0xFBAE},{0xE35C, 0xFBAF},{0xE35D, 0xFBB0},{0xE35E, 0xFBB1},
- {0xE35F, 0xFBB2},{0xE360, 0xFBB3},{0xE361, 0xFBB4},{0xE362, 0xFBB5},{0xE363, 0xFBB6},{0xE364, 0xFBB7},{0xE365, 0xFBB8},{0xE366, 0xFBB9},
- {0xE367, 0xFBBA},{0xE368, 0xFBBB},{0xE369, 0xFBBC},{0xE36A, 0xFBBD},{0xE36B, 0xFBBE},{0xE36C, 0xFBBF},{0xE36D, 0xFBC0},{0xE36E, 0xFBC1},
- {0xE36F, 0xFBC2},{0xE370, 0xFBC3},{0xE371, 0xFBC4},{0xE372, 0xFBC5},{0xE373, 0xFBC6},{0xE374, 0xFBC7},{0xE375, 0xFBC8},{0xE376, 0xFBC9},
- {0xE377, 0xFBCA},{0xE378, 0xFBCB},{0xE379, 0xFBCC},{0xE37A, 0xFBCD},{0xE37B, 0xFBCE},{0xE37C, 0xFBCF},{0xE37D, 0xFBD0},{0xE37E, 0xFBD1},
- {0xE37F, 0xFBD2},{0xE380, 0xFBD3},{0xE381, 0xFBD4},{0xE382, 0xFBD5},{0xE383, 0xFBD6},{0xE384, 0xFBD7},{0xE385, 0xFBD8},{0xE386, 0xFBD9},
- {0xE387, 0xFBDA},{0xE388, 0xFBDB},{0xE389, 0xFBDC},{0xE38A, 0xFBDD},{0xE38B, 0xFBDE},{0xE38C, 0xFBDF},{0xE38D, 0xFBE0},{0xE38E, 0xFBE1},
- {0xE38F, 0xFBE2},{0xE390, 0xFBE3},{0xE391, 0xFBE4},{0xE392, 0xFBE5},{0xE393, 0xFBE6},{0xE394, 0xFBE7},{0xE395, 0xFBE8},{0xE396, 0xFBE9},
- {0xE397, 0xFBEA},{0xE398, 0xFBEB},{0xE399, 0xFBEC},{0xE39A, 0xFBED},{0xE39B, 0xFBEE},{0xE39C, 0xFBEF},{0xE39D, 0xFBF0},{0xE39E, 0xFBF1},
- {0xE39F, 0xFBF2},{0xE3A0, 0xFBF3},{0xE3A1, 0xFBF4},{0xE3A2, 0xFBF5},{0xE3A3, 0xFBF6},{0xE3A4, 0xFBF7},{0xE3A5, 0xFBF8},{0xE3A6, 0xFBF9},
- {0xE3A7, 0xFBFA},{0xE3A8, 0xFBFB},{0xE3A9, 0xFBFC},{0xE3AA, 0xFBFD},{0xE3AB, 0xFBFE},{0xE3AC, 0xFCA1},{0xE3AD, 0xFCA2},{0xE3AE, 0xFCA3},
- {0xE3AF, 0xFCA4},{0xE3B0, 0xFCA5},{0xE3B1, 0xFCA6},{0xE3B2, 0xFCA7},{0xE3B3, 0xFCA8},{0xE3B4, 0xFCA9},{0xE3B5, 0xFCAA},{0xE3B6, 0xFCAB},
- {0xE3B7, 0xFCAC},{0xE3B8, 0xFCAD},{0xE3B9, 0xFCAE},{0xE3BA, 0xFCAF},{0xE3BB, 0xFCB0},{0xE3BC, 0xFCB1},{0xE3BD, 0xFCB2},{0xE3BE, 0xFCB3},
- {0xE3BF, 0xFCB4},{0xE3C0, 0xFCB5},{0xE3C1, 0xFCB6},{0xE3C2, 0xFCB7},{0xE3C3, 0xFCB8},{0xE3C4, 0xFCB9},{0xE3C5, 0xFCBA},{0xE3C6, 0xFCBB},
- {0xE3C7, 0xFCBC},{0xE3C8, 0xFCBD},{0xE3C9, 0xFCBE},{0xE3CA, 0xFCBF},{0xE3CB, 0xFCC0},{0xE3CC, 0xFCC1},{0xE3CD, 0xFCC2},{0xE3CE, 0xFCC3},
- {0xE3CF, 0xFCC4},{0xE3D0, 0xFCC5},{0xE3D1, 0xFCC6},{0xE3D2, 0xFCC7},{0xE3D3, 0xFCC8},{0xE3D4, 0xFCC9},{0xE3D5, 0xFCCA},{0xE3D6, 0xFCCB},
- {0xE3D7, 0xFCCC},{0xE3D8, 0xFCCD},{0xE3D9, 0xFCCE},{0xE3DA, 0xFCCF},{0xE3DB, 0xFCD0},{0xE3DC, 0xFCD1},{0xE3DD, 0xFCD2},{0xE3DE, 0xFCD3},
- {0xE3DF, 0xFCD4},{0xE3E0, 0xFCD5},{0xE3E1, 0xFCD6},{0xE3E2, 0xFCD7},{0xE3E3, 0xFCD8},{0xE3E4, 0xFCD9},{0xE3E5, 0xFCDA},{0xE3E6, 0xFCDB},
- {0xE3E7, 0xFCDC},{0xE3E8, 0xFCDD},{0xE3E9, 0xFCDE},{0xE3EA, 0xFCDF},{0xE3EB, 0xFCE0},{0xE3EC, 0xFCE1},{0xE3ED, 0xFCE2},{0xE3EE, 0xFCE3},
- {0xE3EF, 0xFCE4},{0xE3F0, 0xFCE5},{0xE3F1, 0xFCE6},{0xE3F2, 0xFCE7},{0xE3F3, 0xFCE8},{0xE3F4, 0xFCE9},{0xE3F5, 0xFCEA},{0xE3F6, 0xFCEB},
- {0xE3F7, 0xFCEC},{0xE3F8, 0xFCED},{0xE3F9, 0xFCEE},{0xE3FA, 0xFCEF},{0xE3FB, 0xFCF0},{0xE3FC, 0xFCF1},{0xE3FD, 0xFCF2},{0xE3FE, 0xFCF3},
- {0xE3FF, 0xFCF4},{0xE400, 0xFCF5},{0xE401, 0xFCF6},{0xE402, 0xFCF7},{0xE403, 0xFCF8},{0xE404, 0xFCF9},{0xE405, 0xFCFA},{0xE406, 0xFCFB},
- {0xE407, 0xFCFC},{0xE408, 0xFCFD},{0xE409, 0xFCFE},{0xE40A, 0xFDA1},{0xE40B, 0xFDA2},{0xE40C, 0xFDA3},{0xE40D, 0xFDA4},{0xE40E, 0xFDA5},
- {0xE40F, 0xFDA6},{0xE410, 0xFDA7},{0xE411, 0xFDA8},{0xE412, 0xFDA9},{0xE413, 0xFDAA},{0xE414, 0xFDAB},{0xE415, 0xFDAC},{0xE416, 0xFDAD},
- {0xE417, 0xFDAE},{0xE418, 0xFDAF},{0xE419, 0xFDB0},{0xE41A, 0xFDB1},{0xE41B, 0xFDB2},{0xE41C, 0xFDB3},{0xE41D, 0xFDB4},{0xE41E, 0xFDB5},
- {0xE41F, 0xFDB6},{0xE420, 0xFDB7},{0xE421, 0xFDB8},{0xE422, 0xFDB9},{0xE423, 0xFDBA},{0xE424, 0xFDBB},{0xE425, 0xFDBC},{0xE426, 0xFDBD},
- {0xE427, 0xFDBE},{0xE428, 0xFDBF},{0xE429, 0xFDC0},{0xE42A, 0xFDC1},{0xE42B, 0xFDC2},{0xE42C, 0xFDC3},{0xE42D, 0xFDC4},{0xE42E, 0xFDC5},
- {0xE42F, 0xFDC6},{0xE430, 0xFDC7},{0xE431, 0xFDC8},{0xE432, 0xFDC9},{0xE433, 0xFDCA},{0xE434, 0xFDCB},{0xE435, 0xFDCC},{0xE436, 0xFDCD},
- {0xE437, 0xFDCE},{0xE438, 0xFDCF},{0xE439, 0xFDD0},{0xE43A, 0xFDD1},{0xE43B, 0xFDD2},{0xE43C, 0xFDD3},{0xE43D, 0xFDD4},{0xE43E, 0xFDD5},
- {0xE43F, 0xFDD6},{0xE440, 0xFDD7},{0xE441, 0xFDD8},{0xE442, 0xFDD9},{0xE443, 0xFDDA},{0xE444, 0xFDDB},{0xE445, 0xFDDC},{0xE446, 0xFDDD},
- {0xE447, 0xFDDE},{0xE448, 0xFDDF},{0xE449, 0xFDE0},{0xE44A, 0xFDE1},{0xE44B, 0xFDE2},{0xE44C, 0xFDE3},{0xE44D, 0xFDE4},{0xE44E, 0xFDE5},
- {0xE44F, 0xFDE6},{0xE450, 0xFDE7},{0xE451, 0xFDE8},{0xE452, 0xFDE9},{0xE453, 0xFDEA},{0xE454, 0xFDEB},{0xE455, 0xFDEC},{0xE456, 0xFDED},
- {0xE457, 0xFDEE},{0xE458, 0xFDEF},{0xE459, 0xFDF0},{0xE45A, 0xFDF1},{0xE45B, 0xFDF2},{0xE45C, 0xFDF3},{0xE45D, 0xFDF4},{0xE45E, 0xFDF5},
- {0xE45F, 0xFDF6},{0xE460, 0xFDF7},{0xE461, 0xFDF8},{0xE462, 0xFDF9},{0xE463, 0xFDFA},{0xE464, 0xFDFB},{0xE465, 0xFDFC},{0xE466, 0xFDFD},
- {0xE467, 0xFDFE},{0xE468, 0xFEA1},{0xE469, 0xFEA2},{0xE46A, 0xFEA3},{0xE46B, 0xFEA4},{0xE46C, 0xFEA5},{0xE46D, 0xFEA6},{0xE46E, 0xFEA7},
- {0xE46F, 0xFEA8},{0xE470, 0xFEA9},{0xE471, 0xFEAA},{0xE472, 0xFEAB},{0xE473, 0xFEAC},{0xE474, 0xFEAD},{0xE475, 0xFEAE},{0xE476, 0xFEAF},
- {0xE477, 0xFEB0},{0xE478, 0xFEB1},{0xE479, 0xFEB2},{0xE47A, 0xFEB3},{0xE47B, 0xFEB4},{0xE47C, 0xFEB5},{0xE47D, 0xFEB6},{0xE47E, 0xFEB7},
- {0xE47F, 0xFEB8},{0xE480, 0xFEB9},{0xE481, 0xFEBA},{0xE482, 0xFEBB},{0xE483, 0xFEBC},{0xE484, 0xFEBD},{0xE485, 0xFEBE},{0xE486, 0xFEBF},
- {0xE487, 0xFEC0},{0xE488, 0xFEC1},{0xE489, 0xFEC2},{0xE48A, 0xFEC3},{0xE48B, 0xFEC4},{0xE48C, 0xFEC5},{0xE48D, 0xFEC6},{0xE48E, 0xFEC7},
- {0xE48F, 0xFEC8},{0xE490, 0xFEC9},{0xE491, 0xFECA},{0xE492, 0xFECB},{0xE493, 0xFECC},{0xE494, 0xFECD},{0xE495, 0xFECE},{0xE496, 0xFECF},
- {0xE497, 0xFED0},{0xE498, 0xFED1},{0xE499, 0xFED2},{0xE49A, 0xFED3},{0xE49B, 0xFED4},{0xE49C, 0xFED5},{0xE49D, 0xFED6},{0xE49E, 0xFED7},
- {0xE49F, 0xFED8},{0xE4A0, 0xFED9},{0xE4A1, 0xFEDA},{0xE4A2, 0xFEDB},{0xE4A3, 0xFEDC},{0xE4A4, 0xFEDD},{0xE4A5, 0xFEDE},{0xE4A6, 0xFEDF},
- {0xE4A7, 0xFEE0},{0xE4A8, 0xFEE1},{0xE4A9, 0xFEE2},{0xE4AA, 0xFEE3},{0xE4AB, 0xFEE4},{0xE4AC, 0xFEE5},{0xE4AD, 0xFEE6},{0xE4AE, 0xFEE7},
- {0xE4AF, 0xFEE8},{0xE4B0, 0xFEE9},{0xE4B1, 0xFEEA},{0xE4B2, 0xFEEB},{0xE4B3, 0xFEEC},{0xE4B4, 0xFEED},{0xE4B5, 0xFEEE},{0xE4B6, 0xFEEF},
- {0xE4B7, 0xFEF0},{0xE4B8, 0xFEF1},{0xE4B9, 0xFEF2},{0xE4BA, 0xFEF3},{0xE4BB, 0xFEF4},{0xE4BC, 0xFEF5},{0xE4BD, 0xFEF6},{0xE4BE, 0xFEF7},
- {0xE4BF, 0xFEF8},{0xE4C0, 0xFEF9},{0xE4C1, 0xFEFA},{0xE4C2, 0xFEFB},{0xE4C3, 0xFEFC},{0xE4C4, 0xFEFD},{0xE4C5, 0xFEFE},{0xE4C6, 0xA140},
- {0xE4C7, 0xA141},{0xE4C8, 0xA142},{0xE4C9, 0xA143},{0xE4CA, 0xA144},{0xE4CB, 0xA145},{0xE4CC, 0xA146},{0xE4CD, 0xA147},{0xE4CE, 0xA148},
- {0xE4CF, 0xA149},{0xE4D0, 0xA14A},{0xE4D1, 0xA14B},{0xE4D2, 0xA14C},{0xE4D3, 0xA14D},{0xE4D4, 0xA14E},{0xE4D5, 0xA14F},{0xE4D6, 0xA150},
- {0xE4D7, 0xA151},{0xE4D8, 0xA152},{0xE4D9, 0xA153},{0xE4DA, 0xA154},{0xE4DB, 0xA155},{0xE4DC, 0xA156},{0xE4DD, 0xA157},{0xE4DE, 0xA158},
- {0xE4DF, 0xA159},{0xE4E0, 0xA15A},{0xE4E1, 0xA15B},{0xE4E2, 0xA15C},{0xE4E3, 0xA15D},{0xE4E4, 0xA15E},{0xE4E5, 0xA15F},{0xE4E6, 0xA160},
- {0xE4E7, 0xA161},{0xE4E8, 0xA162},{0xE4E9, 0xA163},{0xE4EA, 0xA164},{0xE4EB, 0xA165},{0xE4EC, 0xA166},{0xE4ED, 0xA167},{0xE4EE, 0xA168},
- {0xE4EF, 0xA169},{0xE4F0, 0xA16A},{0xE4F1, 0xA16B},{0xE4F2, 0xA16C},{0xE4F3, 0xA16D},{0xE4F4, 0xA16E},{0xE4F5, 0xA16F},{0xE4F6, 0xA170},
- {0xE4F7, 0xA171},{0xE4F8, 0xA172},{0xE4F9, 0xA173},{0xE4FA, 0xA174},{0xE4FB, 0xA175},{0xE4FC, 0xA176},{0xE4FD, 0xA177},{0xE4FE, 0xA178},
- {0xE4FF, 0xA179},{0xE500, 0xA17A},{0xE501, 0xA17B},{0xE502, 0xA17C},{0xE503, 0xA17D},{0xE504, 0xA17E},{0xE505, 0xA180},{0xE506, 0xA181},
- {0xE507, 0xA182},{0xE508, 0xA183},{0xE509, 0xA184},{0xE50A, 0xA185},{0xE50B, 0xA186},{0xE50C, 0xA187},{0xE50D, 0xA188},{0xE50E, 0xA189},
- {0xE50F, 0xA18A},{0xE510, 0xA18B},{0xE511, 0xA18C},{0xE512, 0xA18D},{0xE513, 0xA18E},{0xE514, 0xA18F},{0xE515, 0xA190},{0xE516, 0xA191},
- {0xE517, 0xA192},{0xE518, 0xA193},{0xE519, 0xA194},{0xE51A, 0xA195},{0xE51B, 0xA196},{0xE51C, 0xA197},{0xE51D, 0xA198},{0xE51E, 0xA199},
- {0xE51F, 0xA19A},{0xE520, 0xA19B},{0xE521, 0xA19C},{0xE522, 0xA19D},{0xE523, 0xA19E},{0xE524, 0xA19F},{0xE525, 0xA1A0},{0xE526, 0xA240},
- {0xE527, 0xA241},{0xE528, 0xA242},{0xE529, 0xA243},{0xE52A, 0xA244},{0xE52B, 0xA245},{0xE52C, 0xA246},{0xE52D, 0xA247},{0xE52E, 0xA248},
- {0xE52F, 0xA249},{0xE530, 0xA24A},{0xE531, 0xA24B},{0xE532, 0xA24C},{0xE533, 0xA24D},{0xE534, 0xA24E},{0xE535, 0xA24F},{0xE536, 0xA250},
- {0xE537, 0xA251},{0xE538, 0xA252},{0xE539, 0xA253},{0xE53A, 0xA254},{0xE53B, 0xA255},{0xE53C, 0xA256},{0xE53D, 0xA257},{0xE53E, 0xA258},
- {0xE53F, 0xA259},{0xE540, 0xA25A},{0xE541, 0xA25B},{0xE542, 0xA25C},{0xE543, 0xA25D},{0xE544, 0xA25E},{0xE545, 0xA25F},{0xE546, 0xA260},
- {0xE547, 0xA261},{0xE548, 0xA262},{0xE549, 0xA263},{0xE54A, 0xA264},{0xE54B, 0xA265},{0xE54C, 0xA266},{0xE54D, 0xA267},{0xE54E, 0xA268},
- {0xE54F, 0xA269},{0xE550, 0xA26A},{0xE551, 0xA26B},{0xE552, 0xA26C},{0xE553, 0xA26D},{0xE554, 0xA26E},{0xE555, 0xA26F},{0xE556, 0xA270},
- {0xE557, 0xA271},{0xE558, 0xA272},{0xE559, 0xA273},{0xE55A, 0xA274},{0xE55B, 0xA275},{0xE55C, 0xA276},{0xE55D, 0xA277},{0xE55E, 0xA278},
- {0xE55F, 0xA279},{0xE560, 0xA27A},{0xE561, 0xA27B},{0xE562, 0xA27C},{0xE563, 0xA27D},{0xE564, 0xA27E},{0xE565, 0xA280},{0xE566, 0xA281},
- {0xE567, 0xA282},{0xE568, 0xA283},{0xE569, 0xA284},{0xE56A, 0xA285},{0xE56B, 0xA286},{0xE56C, 0xA287},{0xE56D, 0xA288},{0xE56E, 0xA289},
- {0xE56F, 0xA28A},{0xE570, 0xA28B},{0xE571, 0xA28C},{0xE572, 0xA28D},{0xE573, 0xA28E},{0xE574, 0xA28F},{0xE575, 0xA290},{0xE576, 0xA291},
- {0xE577, 0xA292},{0xE578, 0xA293},{0xE579, 0xA294},{0xE57A, 0xA295},{0xE57B, 0xA296},{0xE57C, 0xA297},{0xE57D, 0xA298},{0xE57E, 0xA299},
- {0xE57F, 0xA29A},{0xE580, 0xA29B},{0xE581, 0xA29C},{0xE582, 0xA29D},{0xE583, 0xA29E},{0xE584, 0xA29F},{0xE585, 0xA2A0},{0xE586, 0xA2AB},
- {0xE587, 0xA2AC},{0xE588, 0xA2AD},{0xE589, 0xA2AE},{0xE58A, 0xA2AF},{0xE58B, 0xA2B0},{0xE58C, 0xA2E3},{0xE58D, 0xA2E4},{0xE58E, 0xA2EF},
- {0xE58F, 0xA2F0},{0xE590, 0xA2FD},{0xE591, 0xA2FE},{0xE592, 0xA340},{0xE593, 0xA341},{0xE594, 0xA342},{0xE595, 0xA343},{0xE596, 0xA344},
- {0xE597, 0xA345},{0xE598, 0xA346},{0xE599, 0xA347},{0xE59A, 0xA348},{0xE59B, 0xA349},{0xE59C, 0xA34A},{0xE59D, 0xA34B},{0xE59E, 0xA34C},
- {0xE59F, 0xA34D},{0xE5A0, 0xA34E},{0xE5A1, 0xA34F},{0xE5A2, 0xA350},{0xE5A3, 0xA351},{0xE5A4, 0xA352},{0xE5A5, 0xA353},{0xE5A6, 0xA354},
- {0xE5A7, 0xA355},{0xE5A8, 0xA356},{0xE5A9, 0xA357},{0xE5AA, 0xA358},{0xE5AB, 0xA359},{0xE5AC, 0xA35A},{0xE5AD, 0xA35B},{0xE5AE, 0xA35C},
- {0xE5AF, 0xA35D},{0xE5B0, 0xA35E},{0xE5B1, 0xA35F},{0xE5B2, 0xA360},{0xE5B3, 0xA361},{0xE5B4, 0xA362},{0xE5B5, 0xA363},{0xE5B6, 0xA364},
- {0xE5B7, 0xA365},{0xE5B8, 0xA366},{0xE5B9, 0xA367},{0xE5BA, 0xA368},{0xE5BB, 0xA369},{0xE5BC, 0xA36A},{0xE5BD, 0xA36B},{0xE5BE, 0xA36C},
- {0xE5BF, 0xA36D},{0xE5C0, 0xA36E},{0xE5C1, 0xA36F},{0xE5C2, 0xA370},{0xE5C3, 0xA371},{0xE5C4, 0xA372},{0xE5C5, 0xA373},{0xE5C6, 0xA374},
- {0xE5C7, 0xA375},{0xE5C8, 0xA376},{0xE5C9, 0xA377},{0xE5CA, 0xA378},{0xE5CB, 0xA379},{0xE5CC, 0xA37A},{0xE5CD, 0xA37B},{0xE5CE, 0xA37C},
- {0xE5CF, 0xA37D},{0xE5D0, 0xA37E},{0xE5D1, 0xA380},{0xE5D2, 0xA381},{0xE5D3, 0xA382},{0xE5D4, 0xA383},{0xE5D5, 0xA384},{0xE5D6, 0xA385},
- {0xE5D7, 0xA386},{0xE5D8, 0xA387},{0xE5D9, 0xA388},{0xE5DA, 0xA389},{0xE5DB, 0xA38A},{0xE5DC, 0xA38B},{0xE5DD, 0xA38C},{0xE5DE, 0xA38D},
- {0xE5DF, 0xA38E},{0xE5E0, 0xA38F},{0xE5E1, 0xA390},{0xE5E2, 0xA391},{0xE5E3, 0xA392},{0xE5E4, 0xA393},{0xE5E5, 0xA394},{0xE5E6, 0xA395},
- {0xE5E7, 0xA396},{0xE5E8, 0xA397},{0xE5E9, 0xA398},{0xE5EA, 0xA399},{0xE5EB, 0xA39A},{0xE5EC, 0xA39B},{0xE5ED, 0xA39C},{0xE5EE, 0xA39D},
- {0xE5EF, 0xA39E},{0xE5F0, 0xA39F},{0xE5F1, 0xA3A0},{0xE5F2, 0xA440},{0xE5F3, 0xA441},{0xE5F4, 0xA442},{0xE5F5, 0xA443},{0xE5F6, 0xA444},
- {0xE5F7, 0xA445},{0xE5F8, 0xA446},{0xE5F9, 0xA447},{0xE5FA, 0xA448},{0xE5FB, 0xA449},{0xE5FC, 0xA44A},{0xE5FD, 0xA44B},{0xE5FE, 0xA44C},
- {0xE5FF, 0xA44D},{0xE600, 0xA44E},{0xE601, 0xA44F},{0xE602, 0xA450},{0xE603, 0xA451},{0xE604, 0xA452},{0xE605, 0xA453},{0xE606, 0xA454},
- {0xE607, 0xA455},{0xE608, 0xA456},{0xE609, 0xA457},{0xE60A, 0xA458},{0xE60B, 0xA459},{0xE60C, 0xA45A},{0xE60D, 0xA45B},{0xE60E, 0xA45C},
- {0xE60F, 0xA45D},{0xE610, 0xA45E},{0xE611, 0xA45F},{0xE612, 0xA460},{0xE613, 0xA461},{0xE614, 0xA462},{0xE615, 0xA463},{0xE616, 0xA464},
- {0xE617, 0xA465},{0xE618, 0xA466},{0xE619, 0xA467},{0xE61A, 0xA468},{0xE61B, 0xA469},{0xE61C, 0xA46A},{0xE61D, 0xA46B},{0xE61E, 0xA46C},
- {0xE61F, 0xA46D},{0xE620, 0xA46E},{0xE621, 0xA46F},{0xE622, 0xA470},{0xE623, 0xA471},{0xE624, 0xA472},{0xE625, 0xA473},{0xE626, 0xA474},
- {0xE627, 0xA475},{0xE628, 0xA476},{0xE629, 0xA477},{0xE62A, 0xA478},{0xE62B, 0xA479},{0xE62C, 0xA47A},{0xE62D, 0xA47B},{0xE62E, 0xA47C},
- {0xE62F, 0xA47D},{0xE630, 0xA47E},{0xE631, 0xA480},{0xE632, 0xA481},{0xE633, 0xA482},{0xE634, 0xA483},{0xE635, 0xA484},{0xE636, 0xA485},
- {0xE637, 0xA486},{0xE638, 0xA487},{0xE639, 0xA488},{0xE63A, 0xA489},{0xE63B, 0xA48A},{0xE63C, 0xA48B},{0xE63D, 0xA48C},{0xE63E, 0xA48D},
- {0xE63F, 0xA48E},{0xE640, 0xA48F},{0xE641, 0xA490},{0xE642, 0xA491},{0xE643, 0xA492},{0xE644, 0xA493},{0xE645, 0xA494},{0xE646, 0xA495},
- {0xE647, 0xA496},{0xE648, 0xA497},{0xE649, 0xA498},{0xE64A, 0xA499},{0xE64B, 0xA49A},{0xE64C, 0xA49B},{0xE64D, 0xA49C},{0xE64E, 0xA49D},
- {0xE64F, 0xA49E},{0xE650, 0xA49F},{0xE651, 0xA4A0},{0xE652, 0xA4F4},{0xE653, 0xA4F5},{0xE654, 0xA4F6},{0xE655, 0xA4F7},{0xE656, 0xA4F8},
- {0xE657, 0xA4F9},{0xE658, 0xA4FA},{0xE659, 0xA4FB},{0xE65A, 0xA4FC},{0xE65B, 0xA4FD},{0xE65C, 0xA4FE},{0xE65D, 0xA540},{0xE65E, 0xA541},
- {0xE65F, 0xA542},{0xE660, 0xA543},{0xE661, 0xA544},{0xE662, 0xA545},{0xE663, 0xA546},{0xE664, 0xA547},{0xE665, 0xA548},{0xE666, 0xA549},
- {0xE667, 0xA54A},{0xE668, 0xA54B},{0xE669, 0xA54C},{0xE66A, 0xA54D},{0xE66B, 0xA54E},{0xE66C, 0xA54F},{0xE66D, 0xA550},{0xE66E, 0xA551},
- {0xE66F, 0xA552},{0xE670, 0xA553},{0xE671, 0xA554},{0xE672, 0xA555},{0xE673, 0xA556},{0xE674, 0xA557},{0xE675, 0xA558},{0xE676, 0xA559},
- {0xE677, 0xA55A},{0xE678, 0xA55B},{0xE679, 0xA55C},{0xE67A, 0xA55D},{0xE67B, 0xA55E},{0xE67C, 0xA55F},{0xE67D, 0xA560},{0xE67E, 0xA561},
- {0xE67F, 0xA562},{0xE680, 0xA563},{0xE681, 0xA564},{0xE682, 0xA565},{0xE683, 0xA566},{0xE684, 0xA567},{0xE685, 0xA568},{0xE686, 0xA569},
- {0xE687, 0xA56A},{0xE688, 0xA56B},{0xE689, 0xA56C},{0xE68A, 0xA56D},{0xE68B, 0xA56E},{0xE68C, 0xA56F},{0xE68D, 0xA570},{0xE68E, 0xA571},
- {0xE68F, 0xA572},{0xE690, 0xA573},{0xE691, 0xA574},{0xE692, 0xA575},{0xE693, 0xA576},{0xE694, 0xA577},{0xE695, 0xA578},{0xE696, 0xA579},
- {0xE697, 0xA57A},{0xE698, 0xA57B},{0xE699, 0xA57C},{0xE69A, 0xA57D},{0xE69B, 0xA57E},{0xE69C, 0xA580},{0xE69D, 0xA581},{0xE69E, 0xA582},
- {0xE69F, 0xA583},{0xE6A0, 0xA584},{0xE6A1, 0xA585},{0xE6A2, 0xA586},{0xE6A3, 0xA587},{0xE6A4, 0xA588},{0xE6A5, 0xA589},{0xE6A6, 0xA58A},
- {0xE6A7, 0xA58B},{0xE6A8, 0xA58C},{0xE6A9, 0xA58D},{0xE6AA, 0xA58E},{0xE6AB, 0xA58F},{0xE6AC, 0xA590},{0xE6AD, 0xA591},{0xE6AE, 0xA592},
- {0xE6AF, 0xA593},{0xE6B0, 0xA594},{0xE6B1, 0xA595},{0xE6B2, 0xA596},{0xE6B3, 0xA597},{0xE6B4, 0xA598},{0xE6B5, 0xA599},{0xE6B6, 0xA59A},
- {0xE6B7, 0xA59B},{0xE6B8, 0xA59C},{0xE6B9, 0xA59D},{0xE6BA, 0xA59E},{0xE6BB, 0xA59F},{0xE6BC, 0xA5A0},{0xE6BD, 0xA5F7},{0xE6BE, 0xA5F8},
- {0xE6BF, 0xA5F9},{0xE6C0, 0xA5FA},{0xE6C1, 0xA5FB},{0xE6C2, 0xA5FC},{0xE6C3, 0xA5FD},{0xE6C4, 0xA5FE},{0xE6C5, 0xA640},{0xE6C6, 0xA641},
- {0xE6C7, 0xA642},{0xE6C8, 0xA643},{0xE6C9, 0xA644},{0xE6CA, 0xA645},{0xE6CB, 0xA646},{0xE6CC, 0xA647},{0xE6CD, 0xA648},{0xE6CE, 0xA649},
- {0xE6CF, 0xA64A},{0xE6D0, 0xA64B},{0xE6D1, 0xA64C},{0xE6D2, 0xA64D},{0xE6D3, 0xA64E},{0xE6D4, 0xA64F},{0xE6D5, 0xA650},{0xE6D6, 0xA651},
- {0xE6D7, 0xA652},{0xE6D8, 0xA653},{0xE6D9, 0xA654},{0xE6DA, 0xA655},{0xE6DB, 0xA656},{0xE6DC, 0xA657},{0xE6DD, 0xA658},{0xE6DE, 0xA659},
- {0xE6DF, 0xA65A},{0xE6E0, 0xA65B},{0xE6E1, 0xA65C},{0xE6E2, 0xA65D},{0xE6E3, 0xA65E},{0xE6E4, 0xA65F},{0xE6E5, 0xA660},{0xE6E6, 0xA661},
- {0xE6E7, 0xA662},{0xE6E8, 0xA663},{0xE6E9, 0xA664},{0xE6EA, 0xA665},{0xE6EB, 0xA666},{0xE6EC, 0xA667},{0xE6ED, 0xA668},{0xE6EE, 0xA669},
- {0xE6EF, 0xA66A},{0xE6F0, 0xA66B},{0xE6F1, 0xA66C},{0xE6F2, 0xA66D},{0xE6F3, 0xA66E},{0xE6F4, 0xA66F},{0xE6F5, 0xA670},{0xE6F6, 0xA671},
- {0xE6F7, 0xA672},{0xE6F8, 0xA673},{0xE6F9, 0xA674},{0xE6FA, 0xA675},{0xE6FB, 0xA676},{0xE6FC, 0xA677},{0xE6FD, 0xA678},{0xE6FE, 0xA679},
- {0xE6FF, 0xA67A},{0xE700, 0xA67B},{0xE701, 0xA67C},{0xE702, 0xA67D},{0xE703, 0xA67E},{0xE704, 0xA680},{0xE705, 0xA681},{0xE706, 0xA682},
- {0xE707, 0xA683},{0xE708, 0xA684},{0xE709, 0xA685},{0xE70A, 0xA686},{0xE70B, 0xA687},{0xE70C, 0xA688},{0xE70D, 0xA689},{0xE70E, 0xA68A},
- {0xE70F, 0xA68B},{0xE710, 0xA68C},{0xE711, 0xA68D},{0xE712, 0xA68E},{0xE713, 0xA68F},{0xE714, 0xA690},{0xE715, 0xA691},{0xE716, 0xA692},
- {0xE717, 0xA693},{0xE718, 0xA694},{0xE719, 0xA695},{0xE71A, 0xA696},{0xE71B, 0xA697},{0xE71C, 0xA698},{0xE71D, 0xA699},{0xE71E, 0xA69A},
- {0xE71F, 0xA69B},{0xE720, 0xA69C},{0xE721, 0xA69D},{0xE722, 0xA69E},{0xE723, 0xA69F},{0xE724, 0xA6A0},{0xE725, 0xA6B9},{0xE726, 0xA6BA},
- {0xE727, 0xA6BB},{0xE728, 0xA6BC},{0xE729, 0xA6BD},{0xE72A, 0xA6BE},{0xE72B, 0xA6BF},{0xE72C, 0xA6C0},{0xE72D, 0xA6D9},{0xE72E, 0xA6DA},
- {0xE72F, 0xA6DB},{0xE730, 0xA6DC},{0xE731, 0xA6DD},{0xE732, 0xA6DE},{0xE733, 0xA6DF},{0xE734, 0xA6EC},{0xE735, 0xA6ED},{0xE736, 0xA6F3},
- {0xE737, 0xA6F6},{0xE738, 0xA6F7},{0xE739, 0xA6F8},{0xE73A, 0xA6F9},{0xE73B, 0xA6FA},{0xE73C, 0xA6FB},{0xE73D, 0xA6FC},{0xE73E, 0xA6FD},
- {0xE73F, 0xA6FE},{0xE740, 0xA740},{0xE741, 0xA741},{0xE742, 0xA742},{0xE743, 0xA743},{0xE744, 0xA744},{0xE745, 0xA745},{0xE746, 0xA746},
- {0xE747, 0xA747},{0xE748, 0xA748},{0xE749, 0xA749},{0xE74A, 0xA74A},{0xE74B, 0xA74B},{0xE74C, 0xA74C},{0xE74D, 0xA74D},{0xE74E, 0xA74E},
- {0xE74F, 0xA74F},{0xE750, 0xA750},{0xE751, 0xA751},{0xE752, 0xA752},{0xE753, 0xA753},{0xE754, 0xA754},{0xE755, 0xA755},{0xE756, 0xA756},
- {0xE757, 0xA757},{0xE758, 0xA758},{0xE759, 0xA759},{0xE75A, 0xA75A},{0xE75B, 0xA75B},{0xE75C, 0xA75C},{0xE75D, 0xA75D},{0xE75E, 0xA75E},
- {0xE75F, 0xA75F},{0xE760, 0xA760},{0xE761, 0xA761},{0xE762, 0xA762},{0xE763, 0xA763},{0xE764, 0xA764},{0xE765, 0xA765},{0xE766, 0xA766},
- {0xE767, 0xA767},{0xE768, 0xA768},{0xE769, 0xA769},{0xE76A, 0xA76A},{0xE76B, 0xA76B},{0xE76C, 0xA76C},{0xE76D, 0xA76D},{0xE76E, 0xA76E},
- {0xE76F, 0xA76F},{0xE770, 0xA770},{0xE771, 0xA771},{0xE772, 0xA772},{0xE773, 0xA773},{0xE774, 0xA774},{0xE775, 0xA775},{0xE776, 0xA776},
- {0xE777, 0xA777},{0xE778, 0xA778},{0xE779, 0xA779},{0xE77A, 0xA77A},{0xE77B, 0xA77B},{0xE77C, 0xA77C},{0xE77D, 0xA77D},{0xE77E, 0xA77E},
- {0xE77F, 0xA780},{0xE780, 0xA781},{0xE781, 0xA782},{0xE782, 0xA783},{0xE783, 0xA784},{0xE784, 0xA785},{0xE785, 0xA786},{0xE786, 0xA787},
- {0xE787, 0xA788},{0xE788, 0xA789},{0xE789, 0xA78A},{0xE78A, 0xA78B},{0xE78B, 0xA78C},{0xE78C, 0xA78D},{0xE78D, 0xA78E},{0xE78E, 0xA78F},
- {0xE78F, 0xA790},{0xE790, 0xA791},{0xE791, 0xA792},{0xE792, 0xA793},{0xE793, 0xA794},{0xE794, 0xA795},{0xE795, 0xA796},{0xE796, 0xA797},
- {0xE797, 0xA798},{0xE798, 0xA799},{0xE799, 0xA79A},{0xE79A, 0xA79B},{0xE79B, 0xA79C},{0xE79C, 0xA79D},{0xE79D, 0xA79E},{0xE79E, 0xA79F},
- {0xE79F, 0xA7A0},{0xE7A0, 0xA7C2},{0xE7A1, 0xA7C3},{0xE7A2, 0xA7C4},{0xE7A3, 0xA7C5},{0xE7A4, 0xA7C6},{0xE7A5, 0xA7C7},{0xE7A6, 0xA7C8},
- {0xE7A7, 0xA7C9},{0xE7A8, 0xA7CA},{0xE7A9, 0xA7CB},{0xE7AA, 0xA7CC},{0xE7AB, 0xA7CD},{0xE7AC, 0xA7CE},{0xE7AD, 0xA7CF},{0xE7AE, 0xA7D0},
- {0xE7AF, 0xA7F2},{0xE7B0, 0xA7F3},{0xE7B1, 0xA7F4},{0xE7B2, 0xA7F5},{0xE7B3, 0xA7F6},{0xE7B4, 0xA7F7},{0xE7B5, 0xA7F8},{0xE7B6, 0xA7F9},
- {0xE7B7, 0xA7FA},{0xE7B8, 0xA7FB},{0xE7B9, 0xA7FC},{0xE7BA, 0xA7FD},{0xE7BB, 0xA7FE},{0xE7BC, 0xA896},{0xE7BD, 0xA897},{0xE7BE, 0xA898},
- {0xE7BF, 0xA899},{0xE7C0, 0xA89A},{0xE7C1, 0xA89B},{0xE7C2, 0xA89C},{0xE7C3, 0xA89D},{0xE7C4, 0xA89E},{0xE7C5, 0xA89F},{0xE7C6, 0xA8A0},
- {0xE7C7, 0xA8BC},{0xE7C8, 0xA8BF},{0xE7C9, 0xA8C1},{0xE7CA, 0xA8C2},{0xE7CB, 0xA8C3},{0xE7CC, 0xA8C4},{0xE7CD, 0xA8EA},{0xE7CE, 0xA8EB},
- {0xE7CF, 0xA8EC},{0xE7D0, 0xA8ED},{0xE7D1, 0xA8EE},{0xE7D2, 0xA8EF},{0xE7D3, 0xA8F0},{0xE7D4, 0xA8F1},{0xE7D5, 0xA8F2},{0xE7D6, 0xA8F3},
- {0xE7D7, 0xA8F4},{0xE7D8, 0xA8F5},{0xE7D9, 0xA8F6},{0xE7DA, 0xA8F7},{0xE7DB, 0xA8F8},{0xE7DC, 0xA8F9},{0xE7DD, 0xA8FA},{0xE7DE, 0xA8FB},
- {0xE7DF, 0xA8FC},{0xE7E0, 0xA8FD},{0xE7E1, 0xA8FE},{0xE7E2, 0xA958},{0xE7E3, 0xA95B},{0xE7E4, 0xA95D},{0xE7E5, 0xA95E},{0xE7E6, 0xA95F},
- {0xE7E7, 0xA989},{0xE7E8, 0xA98A},{0xE7E9, 0xA98B},{0xE7EA, 0xA98C},{0xE7EB, 0xA98D},{0xE7EC, 0xA98E},{0xE7ED, 0xA98F},{0xE7EE, 0xA990},
- {0xE7EF, 0xA991},{0xE7F0, 0xA992},{0xE7F1, 0xA993},{0xE7F2, 0xA994},{0xE7F3, 0xA995},{0xE7F4, 0xA997},{0xE7F5, 0xA998},{0xE7F6, 0xA999},
- {0xE7F7, 0xA99A},{0xE7F8, 0xA99B},{0xE7F9, 0xA99C},{0xE7FA, 0xA99D},{0xE7FB, 0xA99E},{0xE7FC, 0xA99F},{0xE7FD, 0xA9A0},{0xE7FE, 0xA9A1},
- {0xE7FF, 0xA9A2},{0xE800, 0xA9A3},{0xE801, 0xA9F0},{0xE802, 0xA9F1},{0xE803, 0xA9F2},{0xE804, 0xA9F3},{0xE805, 0xA9F4},{0xE806, 0xA9F5},
- {0xE807, 0xA9F6},{0xE808, 0xA9F7},{0xE809, 0xA9F8},{0xE80A, 0xA9F9},{0xE80B, 0xA9FA},{0xE80C, 0xA9FB},{0xE80D, 0xA9FC},{0xE80E, 0xA9FD},
- {0xE80F, 0xA9FE},{0xE810, 0xD7FA},{0xE811, 0xD7FB},{0xE812, 0xD7FC},{0xE813, 0xD7FD},{0xE814, 0xD7FE},{0xE815, 0xFE50},{0xE816, 0xFE51},
- {0xE817, 0xFE52},{0xE818, 0xFE53},{0xE819, 0xFE54},{0xE81A, 0xFE55},{0xE81B, 0xFE56},{0xE81C, 0xFE57},{0xE81D, 0xFE58},{0xE81E, 0xFE59},
- {0xE81F, 0xFE5A},{0xE820, 0xFE5B},{0xE821, 0xFE5C},{0xE822, 0xFE5D},{0xE823, 0xFE5E},{0xE824, 0xFE5F},{0xE825, 0xFE60},{0xE826, 0xFE61},
- {0xE827, 0xFE62},{0xE828, 0xFE63},{0xE829, 0xFE64},{0xE82A, 0xFE65},{0xE82B, 0xFE66},{0xE82C, 0xFE67},{0xE82D, 0xFE68},{0xE82E, 0xFE69},
- {0xE82F, 0xFE6A},{0xE830, 0xFE6B},{0xE831, 0xFE6C},{0xE832, 0xFE6D},{0xE833, 0xFE6E},{0xE834, 0xFE6F},{0xE835, 0xFE70},{0xE836, 0xFE71},
- {0xE837, 0xFE72},{0xE838, 0xFE73},{0xE839, 0xFE74},{0xE83A, 0xFE75},{0xE83B, 0xFE76},{0xE83C, 0xFE77},{0xE83D, 0xFE78},{0xE83E, 0xFE79},
- {0xE83F, 0xFE7A},{0xE840, 0xFE7B},{0xE841, 0xFE7C},{0xE842, 0xFE7D},{0xE843, 0xFE7E},{0xE844, 0xFE80},{0xE845, 0xFE81},{0xE846, 0xFE82},
- {0xE847, 0xFE83},{0xE848, 0xFE84},{0xE849, 0xFE85},{0xE84A, 0xFE86},{0xE84B, 0xFE87},{0xE84C, 0xFE88},{0xE84D, 0xFE89},{0xE84E, 0xFE8A},
- {0xE84F, 0xFE8B},{0xE850, 0xFE8C},{0xE851, 0xFE8D},{0xE852, 0xFE8E},{0xE853, 0xFE8F},{0xE854, 0xFE90},{0xE855, 0xFE91},{0xE856, 0xFE92},
- {0xE857, 0xFE93},{0xE858, 0xFE94},{0xE859, 0xFE95},{0xE85A, 0xFE96},{0xE85B, 0xFE97},{0xE85C, 0xFE98},{0xE85D, 0xFE99},{0xE85E, 0xFE9A},
- {0xE85F, 0xFE9B},{0xE860, 0xFE9C},{0xE861, 0xFE9D},{0xE862, 0xFE9E},{0xE863, 0xFE9F},{0xE864, 0xFEA0},{0xF92C, 0xFD9C},{0xF979, 0xFD9D},
- {0xF995, 0xFD9E},{0xF9E7, 0xFD9F},{0xF9F1, 0xFDA0},{0xFA0C, 0xFE40},{0xFA0D, 0xFE41},{0xFA0E, 0xFE42},{0xFA0F, 0xFE43},{0xFA11, 0xFE44},
- {0xFA13, 0xFE45},{0xFA14, 0xFE46},{0xFA18, 0xFE47},{0xFA1F, 0xFE48},{0xFA20, 0xFE49},{0xFA21, 0xFE4A},{0xFA23, 0xFE4B},{0xFA24, 0xFE4C},
- {0xFA27, 0xFE4D},{0xFA28, 0xFE4E},{0xFA29, 0xFE4F},{0xFE30, 0xA955},{0xFE31, 0xA6F2},{0xFE33, 0xA6F4},{0xFE34, 0xA6F5},{0xFE35, 0xA6E0},
- {0xFE36, 0xA6E1},{0xFE37, 0xA6F0},{0xFE38, 0xA6F1},{0xFE39, 0xA6E2},{0xFE3A, 0xA6E3},{0xFE3B, 0xA6EE},{0xFE3C, 0xA6EF},{0xFE3D, 0xA6E6},
- {0xFE3E, 0xA6E7},{0xFE3F, 0xA6E4},{0xFE40, 0xA6E5},{0xFE41, 0xA6E8},{0xFE42, 0xA6E9},{0xFE43, 0xA6EA},{0xFE44, 0xA6EB},{0xFE49, 0xA968},
- {0xFE4A, 0xA969},{0xFE4B, 0xA96A},{0xFE4C, 0xA96B},{0xFE4D, 0xA96C},{0xFE4E, 0xA96D},{0xFE4F, 0xA96E},{0xFE50, 0xA96F},{0xFE51, 0xA970},
- {0xFE52, 0xA971},{0xFE54, 0xA972},{0xFE55, 0xA973},{0xFE56, 0xA974},{0xFE57, 0xA975},{0xFE59, 0xA976},{0xFE5A, 0xA977},{0xFE5B, 0xA978},
- {0xFE5C, 0xA979},{0xFE5D, 0xA97A},{0xFE5E, 0xA97B},{0xFE5F, 0xA97C},{0xFE60, 0xA97D},{0xFE61, 0xA97E},{0xFE62, 0xA980},{0xFE63, 0xA981},
- {0xFE64, 0xA982},{0xFE65, 0xA983},{0xFE66, 0xA984},{0xFE68, 0xA985},{0xFE69, 0xA986},{0xFE6A, 0xA987},{0xFE6B, 0xA988},{0xFF01, 0xA3A1},
- {0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA1E7},{0xFF05, 0xA3A5},{0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9},
- {0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},{0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1},
- {0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},{0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9},
- {0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},{0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1},
- {0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},{0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9},
- {0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},{0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1},
- {0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},{0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9},
- {0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA3DC},{0xFF3D, 0xA3DD},{0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1},
- {0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},{0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9},
- {0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},{0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1},
- {0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},{0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9},
- {0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},{0xFF5E, 0xA1AB},{0xFFE0, 0xA1E9},{0xFFE1, 0xA1EA},{0xFFE2, 0xA956},
- {0xFFE3, 0xA3FE},{0xFFE4, 0xA957},{0xFFE5, 0xA3A4}
-};
diff --git a/vcl/source/fontsubset/u2shiftjis.inc b/vcl/source/fontsubset/u2shiftjis.inc
deleted file mode 100644
index ebc6f1676784..000000000000
--- a/vcl/source/fontsubset/u2shiftjis.inc
+++ /dev/null
@@ -1,967 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_SHIFTJIS to get rid of this file
-
-sal_uInt16pair xlat_1_2[7484] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A7, 0x8198},
- {0x00A8, 0x814E},{0x00B0, 0x818B},{0x00B1, 0x817D},{0x00B4, 0x814C},{0x00B6, 0x81F7},{0x00D7, 0x817E},{0x00F7, 0x8180},{0x0391, 0x839F},
- {0x0392, 0x83A0},{0x0393, 0x83A1},{0x0394, 0x83A2},{0x0395, 0x83A3},{0x0396, 0x83A4},{0x0397, 0x83A5},{0x0398, 0x83A6},{0x0399, 0x83A7},
- {0x039A, 0x83A8},{0x039B, 0x83A9},{0x039C, 0x83AA},{0x039D, 0x83AB},{0x039E, 0x83AC},{0x039F, 0x83AD},{0x03A0, 0x83AE},{0x03A1, 0x83AF},
- {0x03A3, 0x83B0},{0x03A4, 0x83B1},{0x03A5, 0x83B2},{0x03A6, 0x83B3},{0x03A7, 0x83B4},{0x03A8, 0x83B5},{0x03A9, 0x83B6},{0x03B1, 0x83BF},
- {0x03B2, 0x83C0},{0x03B3, 0x83C1},{0x03B4, 0x83C2},{0x03B5, 0x83C3},{0x03B6, 0x83C4},{0x03B7, 0x83C5},{0x03B8, 0x83C6},{0x03B9, 0x83C7},
- {0x03BA, 0x83C8},{0x03BB, 0x83C9},{0x03BC, 0x83CA},{0x03BD, 0x83CB},{0x03BE, 0x83CC},{0x03BF, 0x83CD},{0x03C0, 0x83CE},{0x03C1, 0x83CF},
- {0x03C3, 0x83D0},{0x03C4, 0x83D1},{0x03C5, 0x83D2},{0x03C6, 0x83D3},{0x03C7, 0x83D4},{0x03C8, 0x83D5},{0x03C9, 0x83D6},{0x0401, 0x8446},
- {0x0410, 0x8440},{0x0411, 0x8441},{0x0412, 0x8442},{0x0413, 0x8443},{0x0414, 0x8444},{0x0415, 0x8445},{0x0416, 0x8447},{0x0417, 0x8448},
- {0x0418, 0x8449},{0x0419, 0x844A},{0x041A, 0x844B},{0x041B, 0x844C},{0x041C, 0x844D},{0x041D, 0x844E},{0x041E, 0x844F},{0x041F, 0x8450},
- {0x0420, 0x8451},{0x0421, 0x8452},{0x0422, 0x8453},{0x0423, 0x8454},{0x0424, 0x8455},{0x0425, 0x8456},{0x0426, 0x8457},{0x0427, 0x8458},
- {0x0428, 0x8459},{0x0429, 0x845A},{0x042A, 0x845B},{0x042B, 0x845C},{0x042C, 0x845D},{0x042D, 0x845E},{0x042E, 0x845F},{0x042F, 0x8460},
- {0x0430, 0x8470},{0x0431, 0x8471},{0x0432, 0x8472},{0x0433, 0x8473},{0x0434, 0x8474},{0x0435, 0x8475},{0x0436, 0x8477},{0x0437, 0x8478},
- {0x0438, 0x8479},{0x0439, 0x847A},{0x043A, 0x847B},{0x043B, 0x847C},{0x043C, 0x847D},{0x043D, 0x847E},{0x043E, 0x8480},{0x043F, 0x8481},
- {0x0440, 0x8482},{0x0441, 0x8483},{0x0442, 0x8484},{0x0443, 0x8485},{0x0444, 0x8486},{0x0445, 0x8487},{0x0446, 0x8488},{0x0447, 0x8489},
- {0x0448, 0x848A},{0x0449, 0x848B},{0x044A, 0x848C},{0x044B, 0x848D},{0x044C, 0x848E},{0x044D, 0x848F},{0x044E, 0x8490},{0x044F, 0x8491},
- {0x0451, 0x8476},{0x2010, 0x815D},{0x2015, 0x815C},{0x2018, 0x8165},{0x2019, 0x8166},{0x201C, 0x8167},{0x201D, 0x8168},{0x2020, 0x81F5},
- {0x2021, 0x81F6},{0x2025, 0x8164},{0x2026, 0x8163},{0x2030, 0x81F1},{0x2032, 0x818C},{0x2033, 0x818D},{0x203B, 0x81A6},{0x2103, 0x818E},
- {0x2116, 0x8782},{0x2121, 0x8784},{0x212B, 0x81F0},{0x2160, 0x8754},{0x2161, 0x8755},{0x2162, 0x8756},{0x2163, 0x8757},{0x2164, 0x8758},
- {0x2165, 0x8759},{0x2166, 0x875A},{0x2167, 0x875B},{0x2168, 0x875C},{0x2169, 0x875D},{0x2170, 0xEEEF},{0x2171, 0xEEF0},{0x2172, 0xEEF1},
- {0x2173, 0xEEF2},{0x2174, 0xEEF3},{0x2175, 0xEEF4},{0x2176, 0xEEF5},{0x2177, 0xEEF6},{0x2178, 0xEEF7},{0x2179, 0xEEF8},{0x2190, 0x81A9},
- {0x2191, 0x81AA},{0x2192, 0x81A8},{0x2193, 0x81AB},{0x21D2, 0x81CB},{0x21D4, 0x81CC},{0x2200, 0x81CD},{0x2202, 0x81DD},{0x2203, 0x81CE},
- {0x2207, 0x81DE},{0x2208, 0x81B8},{0x220B, 0x81B9},{0x2211, 0x8794},{0x221A, 0x81E3},{0x221D, 0x81E5},{0x221E, 0x8187},{0x221F, 0x8798},
- {0x2220, 0x81DA},{0x2225, 0x8161},{0x2227, 0x81C8},{0x2228, 0x81C9},{0x2229, 0x81BF},{0x222A, 0x81BE},{0x222B, 0x81E7},{0x222C, 0x81E8},
- {0x222E, 0x8793},{0x2234, 0x8188},{0x2235, 0x81E6},{0x223D, 0x81E4},{0x2252, 0x81E0},{0x2260, 0x8182},{0x2261, 0x81DF},{0x2266, 0x8185},
- {0x2267, 0x8186},{0x226A, 0x81E1},{0x226B, 0x81E2},{0x2282, 0x81BC},{0x2283, 0x81BD},{0x2286, 0x81BA},{0x2287, 0x81BB},{0x22A5, 0x81DB},
- {0x22BF, 0x8799},{0x2312, 0x81DC},{0x2460, 0x8740},{0x2461, 0x8741},{0x2462, 0x8742},{0x2463, 0x8743},{0x2464, 0x8744},{0x2465, 0x8745},
- {0x2466, 0x8746},{0x2467, 0x8747},{0x2468, 0x8748},{0x2469, 0x8749},{0x246A, 0x874A},{0x246B, 0x874B},{0x246C, 0x874C},{0x246D, 0x874D},
- {0x246E, 0x874E},{0x246F, 0x874F},{0x2470, 0x8750},{0x2471, 0x8751},{0x2472, 0x8752},{0x2473, 0x8753},{0x2500, 0x849F},{0x2501, 0x84AA},
- {0x2502, 0x84A0},{0x2503, 0x84AB},{0x250C, 0x84A1},{0x250F, 0x84AC},{0x2510, 0x84A2},{0x2513, 0x84AD},{0x2514, 0x84A4},{0x2517, 0x84AF},
- {0x2518, 0x84A3},{0x251B, 0x84AE},{0x251C, 0x84A5},{0x251D, 0x84BA},{0x2520, 0x84B5},{0x2523, 0x84B0},{0x2524, 0x84A7},{0x2525, 0x84BC},
- {0x2528, 0x84B7},{0x252B, 0x84B2},{0x252C, 0x84A6},{0x252F, 0x84B6},{0x2530, 0x84BB},{0x2533, 0x84B1},{0x2534, 0x84A8},{0x2537, 0x84B8},
- {0x2538, 0x84BD},{0x253B, 0x84B3},{0x253C, 0x84A9},{0x253F, 0x84B9},{0x2542, 0x84BE},{0x254B, 0x84B4},{0x25A0, 0x81A1},{0x25A1, 0x81A0},
- {0x25B2, 0x81A3},{0x25B3, 0x81A2},{0x25BC, 0x81A5},{0x25BD, 0x81A4},{0x25C6, 0x819F},{0x25C7, 0x819E},{0x25CB, 0x819B},{0x25CE, 0x819D},
- {0x25CF, 0x819C},{0x25EF, 0x81FC},{0x2605, 0x819A},{0x2606, 0x8199},{0x2640, 0x818A},{0x2642, 0x8189},{0x266A, 0x81F4},{0x266D, 0x81F3},
- {0x266F, 0x81F2},{0x3000, 0x8140},{0x3001, 0x8141},{0x3002, 0x8142},{0x3003, 0x8156},{0x3005, 0x8158},{0x3006, 0x8159},{0x3007, 0x815A},
- {0x3008, 0x8171},{0x3009, 0x8172},{0x300A, 0x8173},{0x300B, 0x8174},{0x300C, 0x8175},{0x300D, 0x8176},{0x300E, 0x8177},{0x300F, 0x8178},
- {0x3010, 0x8179},{0x3011, 0x817A},{0x3012, 0x81A7},{0x3013, 0x81AC},{0x3014, 0x816B},{0x3015, 0x816C},{0x301D, 0x8780},{0x301F, 0x8781},
- {0x3041, 0x829F},{0x3042, 0x82A0},{0x3043, 0x82A1},{0x3044, 0x82A2},{0x3045, 0x82A3},{0x3046, 0x82A4},{0x3047, 0x82A5},{0x3048, 0x82A6},
- {0x3049, 0x82A7},{0x304A, 0x82A8},{0x304B, 0x82A9},{0x304C, 0x82AA},{0x304D, 0x82AB},{0x304E, 0x82AC},{0x304F, 0x82AD},{0x3050, 0x82AE},
- {0x3051, 0x82AF},{0x3052, 0x82B0},{0x3053, 0x82B1},{0x3054, 0x82B2},{0x3055, 0x82B3},{0x3056, 0x82B4},{0x3057, 0x82B5},{0x3058, 0x82B6},
- {0x3059, 0x82B7},{0x305A, 0x82B8},{0x305B, 0x82B9},{0x305C, 0x82BA},{0x305D, 0x82BB},{0x305E, 0x82BC},{0x305F, 0x82BD},{0x3060, 0x82BE},
- {0x3061, 0x82BF},{0x3062, 0x82C0},{0x3063, 0x82C1},{0x3064, 0x82C2},{0x3065, 0x82C3},{0x3066, 0x82C4},{0x3067, 0x82C5},{0x3068, 0x82C6},
- {0x3069, 0x82C7},{0x306A, 0x82C8},{0x306B, 0x82C9},{0x306C, 0x82CA},{0x306D, 0x82CB},{0x306E, 0x82CC},{0x306F, 0x82CD},{0x3070, 0x82CE},
- {0x3071, 0x82CF},{0x3072, 0x82D0},{0x3073, 0x82D1},{0x3074, 0x82D2},{0x3075, 0x82D3},{0x3076, 0x82D4},{0x3077, 0x82D5},{0x3078, 0x82D6},
- {0x3079, 0x82D7},{0x307A, 0x82D8},{0x307B, 0x82D9},{0x307C, 0x82DA},{0x307D, 0x82DB},{0x307E, 0x82DC},{0x307F, 0x82DD},{0x3080, 0x82DE},
- {0x3081, 0x82DF},{0x3082, 0x82E0},{0x3083, 0x82E1},{0x3084, 0x82E2},{0x3085, 0x82E3},{0x3086, 0x82E4},{0x3087, 0x82E5},{0x3088, 0x82E6},
- {0x3089, 0x82E7},{0x308A, 0x82E8},{0x308B, 0x82E9},{0x308C, 0x82EA},{0x308D, 0x82EB},{0x308E, 0x82EC},{0x308F, 0x82ED},{0x3090, 0x82EE},
- {0x3091, 0x82EF},{0x3092, 0x82F0},{0x3093, 0x82F1},{0x309B, 0x814A},{0x309C, 0x814B},{0x309D, 0x8154},{0x309E, 0x8155},{0x30A1, 0x8340},
- {0x30A2, 0x8341},{0x30A3, 0x8342},{0x30A4, 0x8343},{0x30A5, 0x8344},{0x30A6, 0x8345},{0x30A7, 0x8346},{0x30A8, 0x8347},{0x30A9, 0x8348},
- {0x30AA, 0x8349},{0x30AB, 0x834A},{0x30AC, 0x834B},{0x30AD, 0x834C},{0x30AE, 0x834D},{0x30AF, 0x834E},{0x30B0, 0x834F},{0x30B1, 0x8350},
- {0x30B2, 0x8351},{0x30B3, 0x8352},{0x30B4, 0x8353},{0x30B5, 0x8354},{0x30B6, 0x8355},{0x30B7, 0x8356},{0x30B8, 0x8357},{0x30B9, 0x8358},
- {0x30BA, 0x8359},{0x30BB, 0x835A},{0x30BC, 0x835B},{0x30BD, 0x835C},{0x30BE, 0x835D},{0x30BF, 0x835E},{0x30C0, 0x835F},{0x30C1, 0x8360},
- {0x30C2, 0x8361},{0x30C3, 0x8362},{0x30C4, 0x8363},{0x30C5, 0x8364},{0x30C6, 0x8365},{0x30C7, 0x8366},{0x30C8, 0x8367},{0x30C9, 0x8368},
- {0x30CA, 0x8369},{0x30CB, 0x836A},{0x30CC, 0x836B},{0x30CD, 0x836C},{0x30CE, 0x836D},{0x30CF, 0x836E},{0x30D0, 0x836F},{0x30D1, 0x8370},
- {0x30D2, 0x8371},{0x30D3, 0x8372},{0x30D4, 0x8373},{0x30D5, 0x8374},{0x30D6, 0x8375},{0x30D7, 0x8376},{0x30D8, 0x8377},{0x30D9, 0x8378},
- {0x30DA, 0x8379},{0x30DB, 0x837A},{0x30DC, 0x837B},{0x30DD, 0x837C},{0x30DE, 0x837D},{0x30DF, 0x837E},{0x30E0, 0x8380},{0x30E1, 0x8381},
- {0x30E2, 0x8382},{0x30E3, 0x8383},{0x30E4, 0x8384},{0x30E5, 0x8385},{0x30E6, 0x8386},{0x30E7, 0x8387},{0x30E8, 0x8388},{0x30E9, 0x8389},
- {0x30EA, 0x838A},{0x30EB, 0x838B},{0x30EC, 0x838C},{0x30ED, 0x838D},{0x30EE, 0x838E},{0x30EF, 0x838F},{0x30F0, 0x8390},{0x30F1, 0x8391},
- {0x30F2, 0x8392},{0x30F3, 0x8393},{0x30F4, 0x8394},{0x30F5, 0x8395},{0x30F6, 0x8396},{0x30FB, 0x8145},{0x30FC, 0x815B},{0x30FD, 0x8152},
- {0x30FE, 0x8153},{0x3231, 0x878A},{0x3232, 0x878B},{0x3239, 0x878C},{0x32A4, 0x8785},{0x32A5, 0x8786},{0x32A6, 0x8787},{0x32A7, 0x8788},
- {0x32A8, 0x8789},{0x3303, 0x8765},{0x330D, 0x8769},{0x3314, 0x8760},{0x3318, 0x8763},{0x3322, 0x8761},{0x3323, 0x876B},{0x3326, 0x876A},
- {0x3327, 0x8764},{0x332B, 0x876C},{0x3336, 0x8766},{0x333B, 0x876E},{0x3349, 0x875F},{0x334A, 0x876D},{0x334D, 0x8762},{0x3351, 0x8767},
- {0x3357, 0x8768},{0x337B, 0x877E},{0x337C, 0x878F},{0x337D, 0x878E},{0x337E, 0x878D},{0x338E, 0x8772},{0x338F, 0x8773},{0x339C, 0x876F},
- {0x339D, 0x8770},{0x339E, 0x8771},{0x33A1, 0x8775},{0x33C4, 0x8774},{0x33CD, 0x8783},{0x4E00, 0x88EA},{0x4E01, 0x929A},{0x4E03, 0x8EB5},
- {0x4E07, 0x969C},{0x4E08, 0x8FE4},{0x4E09, 0x8E4F},{0x4E0A, 0x8FE3},{0x4E0B, 0x89BA},{0x4E0D, 0x9573},{0x4E0E, 0x975E},{0x4E10, 0x98A0},
- {0x4E11, 0x894E},{0x4E14, 0x8A8E},{0x4E15, 0x98A1},{0x4E16, 0x90A2},{0x4E17, 0x99C0},{0x4E18, 0x8B75},{0x4E19, 0x95B8},{0x4E1E, 0x8FE5},
- {0x4E21, 0x97BC},{0x4E26, 0x95C0},{0x4E28, 0xED4C},{0x4E2A, 0x98A2},{0x4E2D, 0x9286},{0x4E31, 0x98A3},{0x4E32, 0x8BF8},{0x4E36, 0x98A4},
- {0x4E38, 0x8ADB},{0x4E39, 0x924F},{0x4E3B, 0x8EE5},{0x4E3C, 0x98A5},{0x4E3F, 0x98A6},{0x4E42, 0x98A7},{0x4E43, 0x9454},{0x4E45, 0x8B76},
- {0x4E4B, 0x9456},{0x4E4D, 0x93E1},{0x4E4E, 0x8CC1},{0x4E4F, 0x9652},{0x4E55, 0xE568},{0x4E56, 0x98A8},{0x4E57, 0x8FE6},{0x4E58, 0x98A9},
- {0x4E59, 0x89B3},{0x4E5D, 0x8BE3},{0x4E5E, 0x8CEE},{0x4E5F, 0x96E7},{0x4E62, 0x9BA4},{0x4E71, 0x9790},{0x4E73, 0x93FB},{0x4E7E, 0x8AA3},
- {0x4E80, 0x8B54},{0x4E82, 0x98AA},{0x4E85, 0x98AB},{0x4E86, 0x97B9},{0x4E88, 0x975C},{0x4E89, 0x9188},{0x4E8A, 0x98AD},{0x4E8B, 0x8E96},
- {0x4E8C, 0x93F1},{0x4E8E, 0x98B0},{0x4E91, 0x895D},{0x4E92, 0x8CDD},{0x4E94, 0x8CDC},{0x4E95, 0x88E4},{0x4E98, 0x986A},{0x4E99, 0x9869},
- {0x4E9B, 0x8DB1},{0x4E9C, 0x889F},{0x4E9E, 0x98B1},{0x4E9F, 0x98B2},{0x4EA0, 0x98B3},{0x4EA1, 0x9653},{0x4EA2, 0x98B4},{0x4EA4, 0x8CF0},
- {0x4EA5, 0x88E5},{0x4EA6, 0x9692},{0x4EA8, 0x8B9C},{0x4EAB, 0x8B9D},{0x4EAC, 0x8B9E},{0x4EAD, 0x92E0},{0x4EAE, 0x97BA},{0x4EB0, 0x98B5},
- {0x4EB3, 0x98B6},{0x4EB6, 0x98B7},{0x4EBA, 0x906C},{0x4EC0, 0x8F59},{0x4EC1, 0x906D},{0x4EC2, 0x98BC},{0x4EC4, 0x98BA},{0x4EC6, 0x98BB},
- {0x4EC7, 0x8B77},{0x4ECA, 0x8DA1},{0x4ECB, 0x89EE},{0x4ECD, 0x98B9},{0x4ECE, 0x98B8},{0x4ECF, 0x95A7},{0x4ED4, 0x8E65},{0x4ED5, 0x8E64},
- {0x4ED6, 0x91BC},{0x4ED7, 0x98BD},{0x4ED8, 0x9574},{0x4ED9, 0x90E5},{0x4EDD, 0x8157},{0x4EDE, 0x98BE},{0x4EDF, 0x98C0},{0x4EE1, 0xED4D},
- {0x4EE3, 0x91E3},{0x4EE4, 0x97DF},{0x4EE5, 0x88C8},{0x4EED, 0x98BF},{0x4EEE, 0x89BC},{0x4EF0, 0x8BC2},{0x4EF2, 0x9287},{0x4EF6, 0x8C8F},
- {0x4EF7, 0x98C1},{0x4EFB, 0x9443},{0x4EFC, 0xED4E},{0x4F00, 0xED4F},{0x4F01, 0x8AE9},{0x4F03, 0xED50},{0x4F09, 0x98C2},{0x4F0A, 0x88C9},
- {0x4F0D, 0x8CDE},{0x4F0E, 0x8AEA},{0x4F0F, 0x959A},{0x4F10, 0x94B0},{0x4F11, 0x8B78},{0x4F1A, 0x89EF},{0x4F1C, 0x98E5},{0x4F1D, 0x9360},
- {0x4F2F, 0x948C},{0x4F30, 0x98C4},{0x4F34, 0x94BA},{0x4F36, 0x97E0},{0x4F38, 0x904C},{0x4F39, 0xED51},{0x4F3A, 0x8E66},{0x4F3C, 0x8E97},
- {0x4F3D, 0x89BE},{0x4F43, 0x92CF},{0x4F46, 0x9241},{0x4F47, 0x98C8},{0x4F4D, 0x88CA},{0x4F4E, 0x92E1},{0x4F4F, 0x8F5A},{0x4F50, 0x8DB2},
- {0x4F51, 0x9743},{0x4F53, 0x91CC},{0x4F55, 0x89BD},{0x4F56, 0xED52},{0x4F57, 0x98C7},{0x4F59, 0x975D},{0x4F5A, 0x98C3},{0x4F5B, 0x98C5},
- {0x4F5C, 0x8DEC},{0x4F5D, 0x98C6},{0x4F5E, 0x9B43},{0x4F69, 0x98CE},{0x4F6F, 0x98D1},{0x4F70, 0x98CF},{0x4F73, 0x89C0},{0x4F75, 0x95B9},
- {0x4F76, 0x98C9},{0x4F7B, 0x98CD},{0x4F7C, 0x8CF1},{0x4F7F, 0x8E67},{0x4F83, 0x8AA4},{0x4F86, 0x98D2},{0x4F88, 0x98CA},{0x4F8A, 0xED54},
- {0x4F8B, 0x97E1},{0x4F8D, 0x8E98},{0x4F8F, 0x98CB},{0x4F91, 0x98D0},{0x4F92, 0xED53},{0x4F94, 0xED56},{0x4F96, 0x98D3},{0x4F98, 0x98CC},
- {0x4F9A, 0xED55},{0x4F9B, 0x8B9F},{0x4F9D, 0x88CB},{0x4FA0, 0x8BA0},{0x4FA1, 0x89BF},{0x4FAB, 0x9B44},{0x4FAD, 0x9699},{0x4FAE, 0x958E},
- {0x4FAF, 0x8CF2},{0x4FB5, 0x904E},{0x4FB6, 0x97B5},{0x4FBF, 0x95D6},{0x4FC2, 0x8C57},{0x4FC3, 0x91A3},{0x4FC4, 0x89E2},{0x4FC9, 0xED45},
- {0x4FCA, 0x8F72},{0x4FCD, 0xED57},{0x4FCE, 0x98D7},{0x4FD0, 0x98DC},{0x4FD1, 0x98DA},{0x4FD4, 0x98D5},{0x4FD7, 0x91AD},{0x4FD8, 0x98D8},
- {0x4FDA, 0x98DB},{0x4FDB, 0x98D9},{0x4FDD, 0x95DB},{0x4FDF, 0x98D6},{0x4FE1, 0x904D},{0x4FE3, 0x9693},{0x4FE4, 0x98DD},{0x4FE5, 0x98DE},
- {0x4FEE, 0x8F43},{0x4FEF, 0x98EB},{0x4FF3, 0x946F},{0x4FF5, 0x9555},{0x4FF6, 0x98E6},{0x4FF8, 0x95EE},{0x4FFA, 0x89B4},{0x4FFE, 0x98EA},
- {0x4FFF, 0xED5A},{0x5005, 0x98E4},{0x5006, 0x98ED},{0x5009, 0x9171},{0x500B, 0x8CC2},{0x500D, 0x947B},{0x500F, 0xE0C5},{0x5011, 0x98EC},
- {0x5012, 0x937C},{0x5014, 0x98E1},{0x5016, 0x8CF4},{0x5019, 0x8CF3},{0x501A, 0x98DF},{0x501E, 0xED5B},{0x501F, 0x8ED8},{0x5021, 0x98E7},
- {0x5022, 0xED59},{0x5023, 0x95ED},{0x5024, 0x926C},{0x5025, 0x98E3},{0x5026, 0x8C91},{0x5028, 0x98E0},{0x5029, 0x98E8},{0x502A, 0x98E2},
- {0x502B, 0x97CF},{0x502C, 0x98E9},{0x502D, 0x9860},{0x5036, 0x8BE4},{0x5039, 0x8C90},{0x5040, 0xED58},{0x5042, 0xED5E},{0x5043, 0x98EE},
- {0x5046, 0xED5C},{0x5047, 0x98EF},{0x5048, 0x98F3},{0x5049, 0x88CC},{0x504F, 0x95CE},{0x5050, 0x98F2},{0x5055, 0x98F1},{0x5056, 0x98F5},
- {0x505A, 0x98F4},{0x505C, 0x92E2},{0x5065, 0x8C92},{0x506C, 0x98F6},{0x5070, 0xED5D},{0x5072, 0x8EC3},{0x5074, 0x91A4},{0x5075, 0x92E3},
- {0x5076, 0x8BF4},{0x5078, 0x98F7},{0x507D, 0x8B55},{0x5080, 0x98F8},{0x5085, 0x98FA},{0x508D, 0x9654},{0x5091, 0x8C86},{0x5094, 0xED5F},
- {0x5098, 0x8E50},{0x5099, 0x94F5},{0x509A, 0x98F9},{0x50AC, 0x8DC3},{0x50AD, 0x9762},{0x50B2, 0x98FC},{0x50B3, 0x9942},{0x50B4, 0x98FB},
- {0x50B5, 0x8DC2},{0x50B7, 0x8F9D},{0x50BE, 0x8C58},{0x50C2, 0x9943},{0x50C5, 0x8BCD},{0x50C9, 0x9940},{0x50CA, 0x9941},{0x50CD, 0x93AD},
- {0x50CF, 0x919C},{0x50D1, 0x8BA1},{0x50D5, 0x966C},{0x50D6, 0x9944},{0x50D8, 0xED61},{0x50DA, 0x97BB},{0x50DE, 0x9945},{0x50E3, 0x9948},
- {0x50E5, 0x9946},{0x50E7, 0x916D},{0x50ED, 0x9947},{0x50EE, 0x9949},{0x50F4, 0xED60},{0x50F5, 0x994B},{0x50F9, 0x994A},{0x50FB, 0x95C6},
- {0x5100, 0x8B56},{0x5101, 0x994D},{0x5102, 0x994E},{0x5104, 0x89AD},{0x5109, 0x994C},{0x5112, 0x8EF2},{0x5114, 0x9951},{0x5115, 0x9950},
- {0x5116, 0x994F},{0x5118, 0x98D4},{0x511A, 0x9952},{0x511F, 0x8F9E},{0x5121, 0x9953},{0x512A, 0x9744},{0x5132, 0x96D7},{0x5137, 0x9955},
- {0x513A, 0x9954},{0x513B, 0x9957},{0x513C, 0x9956},{0x513F, 0x9958},{0x5140, 0x9959},{0x5141, 0x88F2},{0x5143, 0x8CB3},{0x5144, 0x8C5A},
- {0x5145, 0x8F5B},{0x5146, 0x929B},{0x5147, 0x8BA2},{0x5148, 0x90E6},{0x5149, 0x8CF5},{0x514A, 0xED62},{0x514B, 0x8D8E},{0x514C, 0x995B},
- {0x514D, 0x96C6},{0x514E, 0x9365},{0x5150, 0x8E99},{0x5152, 0x995A},{0x5154, 0x995C},{0x515A, 0x937D},{0x515C, 0x8A95},{0x5162, 0x995D},
- {0x5164, 0xED63},{0x5165, 0x93FC},{0x5168, 0x9153},{0x5169, 0x995F},{0x516A, 0x9960},{0x516B, 0x94AA},{0x516C, 0x8CF6},{0x516D, 0x985A},
- {0x516E, 0x9961},{0x5171, 0x8BA4},{0x5175, 0x95BA},{0x5176, 0x91B4},{0x5177, 0x8BEF},{0x5178, 0x9354},{0x517C, 0x8C93},{0x5180, 0x9962},
- {0x5182, 0x9963},{0x5185, 0x93E0},{0x5186, 0x897E},{0x5189, 0x9966},{0x518A, 0x8DFB},{0x518C, 0x9965},{0x518D, 0x8DC4},{0x518F, 0x9967},
- {0x5190, 0xE3EC},{0x5191, 0x9968},{0x5192, 0x9660},{0x5193, 0x9969},{0x5195, 0x996A},{0x5196, 0x996B},{0x5197, 0x8FE7},{0x5199, 0x8ECA},
- {0x519D, 0xED64},{0x51A0, 0x8AA5},{0x51A2, 0x996E},{0x51A4, 0x996C},{0x51A5, 0x96BB},{0x51A6, 0x996D},{0x51A8, 0x9579},{0x51A9, 0x996F},
- {0x51AA, 0x9970},{0x51AB, 0x9971},{0x51AC, 0x937E},{0x51B0, 0x9975},{0x51B1, 0x9973},{0x51B2, 0x9974},{0x51B3, 0x9972},{0x51B4, 0x8DE1},
- {0x51B5, 0x9976},{0x51B6, 0x96E8},{0x51B7, 0x97E2},{0x51BD, 0x9977},{0x51BE, 0xED65},{0x51C4, 0x90A6},{0x51C5, 0x9978},{0x51C6, 0x8F79},
- {0x51C9, 0x9979},{0x51CB, 0x929C},{0x51CC, 0x97BD},{0x51CD, 0x9380},{0x51D6, 0x99C3},{0x51DB, 0x997A},{0x51DC, 0xEAA3},{0x51DD, 0x8BC3},
- {0x51E0, 0x997B},{0x51E1, 0x967D},{0x51E6, 0x8F88},{0x51E7, 0x91FA},{0x51E9, 0x997D},{0x51EA, 0x93E2},{0x51EC, 0xED66},{0x51ED, 0x997E},
- {0x51F0, 0x9980},{0x51F1, 0x8A4D},{0x51F5, 0x9981},{0x51F6, 0x8BA5},{0x51F8, 0x93CA},{0x51F9, 0x899A},{0x51FA, 0x8F6F},{0x51FD, 0x949F},
- {0x51FE, 0x9982},{0x5200, 0x9381},{0x5203, 0x906E},{0x5204, 0x9983},{0x5206, 0x95AA},{0x5207, 0x90D8},{0x5208, 0x8AA0},{0x520A, 0x8AA7},
- {0x520B, 0x9984},{0x520E, 0x9986},{0x5211, 0x8C59},{0x5214, 0x9985},{0x5215, 0xED67},{0x5217, 0x97F1},{0x521D, 0x8F89},{0x5224, 0x94BB},
- {0x5225, 0x95CA},{0x5227, 0x9987},{0x5229, 0x9798},{0x522A, 0x9988},{0x522E, 0x9989},{0x5230, 0x939E},{0x5233, 0x998A},{0x5236, 0x90A7},
- {0x5237, 0x8DFC},{0x5238, 0x8C94},{0x5239, 0x998B},{0x523A, 0x8E68},{0x523B, 0x8D8F},{0x5243, 0x92E4},{0x5244, 0x998D},{0x5247, 0x91A5},
- {0x524A, 0x8DED},{0x524B, 0x998E},{0x524C, 0x998F},{0x524D, 0x914F},{0x524F, 0x998C},{0x5254, 0x9991},{0x5256, 0x9655},{0x525B, 0x8D84},
- {0x525E, 0x9990},{0x5263, 0x8C95},{0x5264, 0x8DDC},{0x5265, 0x948D},{0x5269, 0x9994},{0x526A, 0x9992},{0x526F, 0x959B},{0x5270, 0x8FE8},
- {0x5271, 0x999B},{0x5272, 0x8A84},{0x5273, 0x9995},{0x5274, 0x9993},{0x5275, 0x916E},{0x527D, 0x9997},{0x527F, 0x9996},{0x5283, 0x8A63},
- {0x5287, 0x8C80},{0x5288, 0x999C},{0x5289, 0x97AB},{0x528D, 0x9998},{0x5291, 0x999D},{0x5292, 0x999A},{0x5294, 0x9999},{0x529B, 0x97CD},
- {0x529C, 0xED68},{0x529F, 0x8CF7},{0x52A0, 0x89C1},{0x52A3, 0x97F2},{0x52A6, 0xED69},{0x52A9, 0x8F95},{0x52AA, 0x9377},{0x52AB, 0x8D85},
- {0x52AC, 0x99A0},{0x52AD, 0x99A1},{0x52AF, 0xEE5B},{0x52B1, 0x97E3},{0x52B4, 0x984A},{0x52B5, 0x99A3},{0x52B9, 0x8CF8},{0x52BC, 0x99A2},
- {0x52BE, 0x8A4E},{0x52C0, 0xED6A},{0x52C1, 0x99A4},{0x52C3, 0x9675},{0x52C5, 0x92BA},{0x52C7, 0x9745},{0x52C9, 0x95D7},{0x52CD, 0x99A5},
- {0x52D2, 0xE8D3},{0x52D5, 0x93AE},{0x52D7, 0x99A6},{0x52D8, 0x8AA8},{0x52D9, 0x96B1},{0x52DB, 0xED6B},{0x52DD, 0x8F9F},{0x52DE, 0x99A7},
- {0x52DF, 0x95E5},{0x52E0, 0x99AB},{0x52E2, 0x90A8},{0x52E3, 0x99A8},{0x52E4, 0x8BCE},{0x52E6, 0x99A9},{0x52E7, 0x8AA9},{0x52F2, 0x8C4D},
- {0x52F3, 0x99AC},{0x52F5, 0x99AD},{0x52F8, 0x99AE},{0x52F9, 0x99AF},{0x52FA, 0x8ED9},{0x52FE, 0x8CF9},{0x52FF, 0x96DC},{0x5300, 0xED6C},
- {0x5301, 0x96E6},{0x5302, 0x93F5},{0x5305, 0x95EF},{0x5306, 0x99B0},{0x5307, 0xED6D},{0x5308, 0x99B1},{0x530D, 0x99B3},{0x530F, 0x99B5},
- {0x5310, 0x99B4},{0x5315, 0x99B6},{0x5316, 0x89BB},{0x5317, 0x966B},{0x5319, 0x8DFA},{0x531A, 0x99B7},{0x531D, 0x9178},{0x5320, 0x8FA0},
- {0x5321, 0x8BA7},{0x5323, 0x99B8},{0x5324, 0xED6E},{0x532A, 0x94D9},{0x532F, 0x99B9},{0x5331, 0x99BA},{0x5333, 0x99BB},{0x5338, 0x99BC},
- {0x5339, 0x9543},{0x533A, 0x8BE6},{0x533B, 0x88E3},{0x533F, 0x93BD},{0x5340, 0x99BD},{0x5341, 0x8F5C},{0x5343, 0x90E7},{0x5345, 0x99BF},
- {0x5346, 0x99BE},{0x5347, 0x8FA1},{0x5348, 0x8CDF},{0x5349, 0x99C1},{0x534A, 0x94BC},{0x534D, 0x99C2},{0x5351, 0x94DA},{0x5352, 0x91B2},
- {0x5353, 0x91EC},{0x5354, 0x8BA6},{0x5357, 0x93EC},{0x5358, 0x9250},{0x535A, 0x948E},{0x535C, 0x966D},{0x535E, 0x99C4},{0x5360, 0x90E8},
- {0x5366, 0x8C54},{0x5369, 0x99C5},{0x536E, 0x99C6},{0x536F, 0x894B},{0x5370, 0x88F3},{0x5371, 0x8AEB},{0x5372, 0xED6F},{0x5373, 0x91A6},
- {0x5374, 0x8B70},{0x5375, 0x9791},{0x5377, 0x99C9},{0x5378, 0x89B5},{0x537B, 0x99C8},{0x537F, 0x8BA8},{0x5382, 0x99CA},{0x5384, 0x96EF},
- {0x5393, 0xED70},{0x5396, 0x99CB},{0x5398, 0x97D0},{0x539A, 0x8CFA},{0x539F, 0x8CB4},{0x53A0, 0x99CC},{0x53A5, 0x99CE},{0x53A6, 0x99CD},
- {0x53A8, 0x907E},{0x53A9, 0x8958},{0x53AD, 0x897D},{0x53AE, 0x99CF},{0x53B0, 0x99D0},{0x53B2, 0xED71},{0x53B3, 0x8CB5},{0x53B6, 0x99D1},
- {0x53BB, 0x8B8E},{0x53C2, 0x8E51},{0x53C3, 0x99D2},{0x53C8, 0x9694},{0x53C9, 0x8DB3},{0x53CA, 0x8B79},{0x53CB, 0x9746},{0x53CC, 0x916F},
- {0x53CD, 0x94BD},{0x53CE, 0x8EFB},{0x53D4, 0x8F66},{0x53D6, 0x8EE6},{0x53D7, 0x8EF3},{0x53D9, 0x8F96},{0x53DB, 0x94BE},{0x53DD, 0xED72},
- {0x53DF, 0x99D5},{0x53E1, 0x8962},{0x53E2, 0x9170},{0x53E3, 0x8CFB},{0x53E4, 0x8CC3},{0x53E5, 0x8BE5},{0x53E8, 0x99D9},{0x53E9, 0x9240},
- {0x53EA, 0x91FC},{0x53EB, 0x8BA9},{0x53EC, 0x8FA2},{0x53ED, 0x99DA},{0x53EE, 0x99D8},{0x53EF, 0x89C2},{0x53F0, 0x91E4},{0x53F1, 0x8EB6},
- {0x53F2, 0x8E6A},{0x53F3, 0x8945},{0x53F6, 0x8A90},{0x53F7, 0x8D86},{0x53F8, 0x8E69},{0x53FA, 0x99DB},{0x5401, 0x99DC},{0x5403, 0x8B68},
- {0x5404, 0x8A65},{0x5408, 0x8D87},{0x5409, 0x8B67},{0x540A, 0x92DD},{0x540B, 0x8944},{0x540C, 0x93AF},{0x540D, 0x96BC},{0x540E, 0x8D40},
- {0x540F, 0x9799},{0x5410, 0x9366},{0x5411, 0x8CFC},{0x541B, 0x8C4E},{0x541D, 0x99E5},{0x541F, 0x8BE1},{0x5420, 0x9669},{0x5426, 0x94DB},
- {0x5429, 0x99E4},{0x542B, 0x8ADC},{0x542C, 0x99DF},{0x542D, 0x99E0},{0x542E, 0x99E2},{0x5436, 0x99E3},{0x5438, 0x8B7A},{0x5439, 0x9081},
- {0x543B, 0x95AB},{0x543C, 0x99E1},{0x543D, 0x99DD},{0x543E, 0x8CE1},{0x5440, 0x99DE},{0x5442, 0x9843},{0x5446, 0x95F0},{0x5448, 0x92E6},
- {0x5449, 0x8CE0},{0x544A, 0x8D90},{0x544E, 0x99E6},{0x5451, 0x93DB},{0x545F, 0x99EA},{0x5468, 0x8EFC},{0x546A, 0x8EF4},{0x5470, 0x99ED},
- {0x5471, 0x99EB},{0x5473, 0x96A1},{0x5475, 0x99E8},{0x5476, 0x99F1},{0x5477, 0x99EC},{0x547B, 0x99EF},{0x547C, 0x8CC4},{0x547D, 0x96BD},
- {0x5480, 0x99F0},{0x5484, 0x99F2},{0x5486, 0x99F4},{0x548A, 0xED75},{0x548B, 0x8DEE},{0x548C, 0x9861},{0x548E, 0x99E9},{0x548F, 0x99E7},
- {0x5490, 0x99F3},{0x5492, 0x99EE},{0x549C, 0xED74},{0x54A2, 0x99F6},{0x54A4, 0x9A42},{0x54A5, 0x99F8},{0x54A8, 0x99FC},{0x54A9, 0xED76},
- {0x54AB, 0x9A40},{0x54AC, 0x99F9},{0x54AF, 0x9A5D},{0x54B2, 0x8DE7},{0x54B3, 0x8A50},{0x54B8, 0x99F7},{0x54BC, 0x9A44},{0x54BD, 0x88F4},
- {0x54BE, 0x9A43},{0x54C0, 0x88A3},{0x54C1, 0x9569},{0x54C2, 0x9A41},{0x54C4, 0x99FA},{0x54C7, 0x99F5},{0x54C8, 0x99FB},{0x54C9, 0x8DC6},
- {0x54D8, 0x9A45},{0x54E1, 0x88F5},{0x54E2, 0x9A4E},{0x54E5, 0x9A46},{0x54E6, 0x9A47},{0x54E8, 0x8FA3},{0x54E9, 0x9689},{0x54ED, 0x9A4C},
- {0x54EE, 0x9A4B},{0x54F2, 0x934E},{0x54FA, 0x9A4D},{0x54FD, 0x9A4A},{0x54FF, 0xED77},{0x5504, 0x8953},{0x5506, 0x8DB4},{0x5507, 0x904F},
- {0x550F, 0x9A48},{0x5510, 0x9382},{0x5514, 0x9A49},{0x5516, 0x88A0},{0x552E, 0x9A53},{0x552F, 0x9742},{0x5531, 0x8FA5},{0x5533, 0x9A59},
- {0x5538, 0x9A58},{0x5539, 0x9A4F},{0x553E, 0x91C1},{0x5540, 0x9A50},{0x5544, 0x91ED},{0x5545, 0x9A55},{0x5546, 0x8FA4},{0x554C, 0x9A52},
- {0x554F, 0x96E2},{0x5553, 0x8C5B},{0x5556, 0x9A56},{0x5557, 0x9A57},{0x555C, 0x9A54},{0x555D, 0x9A5A},{0x5563, 0x9A51},{0x557B, 0x9A60},
- {0x557C, 0x9A65},{0x557E, 0x9A61},{0x5580, 0x9A5C},{0x5583, 0x9A66},{0x5584, 0x9150},{0x5586, 0xED78},{0x5587, 0x9A68},{0x5589, 0x8D41},
- {0x558A, 0x9A5E},{0x558B, 0x929D},{0x5598, 0x9A62},{0x5599, 0x9A5B},{0x559A, 0x8AAB},{0x559C, 0x8AEC},{0x559D, 0x8A85},{0x559E, 0x9A63},
- {0x559F, 0x9A5F},{0x55A7, 0x8C96},{0x55A8, 0x9A69},{0x55A9, 0x9A67},{0x55AA, 0x9172},{0x55AB, 0x8B69},{0x55AC, 0x8BAA},{0x55AE, 0x9A64},
- {0x55B0, 0x8BF2},{0x55B6, 0x8963},{0x55C4, 0x9A6D},{0x55C5, 0x9A6B},{0x55C7, 0x9AA5},{0x55D4, 0x9A70},{0x55DA, 0x9A6A},{0x55DC, 0x9A6E},
- {0x55DF, 0x9A6C},{0x55E3, 0x8E6B},{0x55E4, 0x9A6F},{0x55F7, 0x9A72},{0x55F9, 0x9A77},{0x55FD, 0x9A75},{0x55FE, 0x9A74},{0x5606, 0x9251},
- {0x5609, 0x89C3},{0x5614, 0x9A71},{0x5616, 0x9A73},{0x5617, 0x8FA6},{0x5618, 0x8952},{0x561B, 0x9A76},{0x5629, 0x89DC},{0x562F, 0x9A82},
- {0x5631, 0x8FFA},{0x5632, 0x9A7D},{0x5634, 0x9A7B},{0x5636, 0x9A7C},{0x5638, 0x9A7E},{0x5642, 0x895C},{0x564C, 0x9158},{0x564E, 0x9A78},
- {0x5650, 0x9A79},{0x565B, 0x8A9A},{0x5664, 0x9A81},{0x5668, 0x8AED},{0x566A, 0x9A84},{0x566B, 0x9A80},{0x566C, 0x9A83},{0x5674, 0x95AC},
- {0x5678, 0x93D3},{0x567A, 0x94B6},{0x5680, 0x9A86},{0x5686, 0x9A85},{0x5687, 0x8A64},{0x568A, 0x9A87},{0x568F, 0x9A8A},{0x5694, 0x9A89},
- {0x56A0, 0x9A88},{0x56A2, 0x9458},{0x56A5, 0x9A8B},{0x56AE, 0x9A8C},{0x56B4, 0x9A8E},{0x56B6, 0x9A8D},{0x56BC, 0x9A90},{0x56C0, 0x9A93},
- {0x56C1, 0x9A91},{0x56C2, 0x9A8F},{0x56C3, 0x9A92},{0x56C8, 0x9A94},{0x56CE, 0x9A95},{0x56D1, 0x9A96},{0x56D3, 0x9A97},{0x56D7, 0x9A98},
- {0x56D8, 0x9964},{0x56DA, 0x8EFA},{0x56DB, 0x8E6C},{0x56DE, 0x89F1},{0x56E0, 0x88F6},{0x56E3, 0x9263},{0x56EE, 0x9A99},{0x56F0, 0x8DA2},
- {0x56F2, 0x88CD},{0x56F3, 0x907D},{0x56F9, 0x9A9A},{0x56FA, 0x8CC5},{0x56FD, 0x8D91},{0x56FF, 0x9A9C},{0x5700, 0x9A9B},{0x5703, 0x95DE},
- {0x5704, 0x9A9D},{0x5708, 0x9A9F},{0x5709, 0x9A9E},{0x570B, 0x9AA0},{0x570D, 0x9AA1},{0x570F, 0x8C97},{0x5712, 0x8980},{0x5713, 0x9AA2},
- {0x5716, 0x9AA4},{0x5718, 0x9AA3},{0x571C, 0x9AA6},{0x571F, 0x9379},{0x5726, 0x9AA7},{0x5727, 0x88B3},{0x5728, 0x8DDD},{0x572D, 0x8C5C},
- {0x5730, 0x926E},{0x5737, 0x9AA8},{0x5738, 0x9AA9},{0x573B, 0x9AAB},{0x5740, 0x9AAC},{0x5742, 0x8DE2},{0x5747, 0x8BCF},{0x574A, 0x9656},
- {0x574E, 0x9AAA},{0x574F, 0x9AAD},{0x5750, 0x8DBF},{0x5751, 0x8D42},{0x5759, 0xED79},{0x5761, 0x9AB1},{0x5764, 0x8DA3},{0x5765, 0xED7A},
- {0x5766, 0x9252},{0x5769, 0x9AAE},{0x576A, 0x92D8},{0x577F, 0x9AB2},{0x5782, 0x9082},{0x5788, 0x9AB0},{0x5789, 0x9AB3},{0x578B, 0x8C5E},
- {0x5793, 0x9AB4},{0x57A0, 0x9AB5},{0x57A2, 0x8D43},{0x57A3, 0x8A5F},{0x57A4, 0x9AB7},{0x57AA, 0x9AB8},{0x57AC, 0xED7B},{0x57B0, 0x9AB9},
- {0x57B3, 0x9AB6},{0x57C0, 0x9AAF},{0x57C3, 0x9ABA},{0x57C6, 0x9ABB},{0x57C7, 0xED7D},{0x57C8, 0xED7C},{0x57CB, 0x9684},{0x57CE, 0x8FE9},
- {0x57D2, 0x9ABD},{0x57D3, 0x9ABE},{0x57D4, 0x9ABC},{0x57D6, 0x9AC0},{0x57DC, 0x9457},{0x57DF, 0x88E6},{0x57E0, 0x9575},{0x57E3, 0x9AC1},
- {0x57F4, 0x8FFB},{0x57F7, 0x8EB7},{0x57F9, 0x947C},{0x57FA, 0x8AEE},{0x57FC, 0x8DE9},{0x5800, 0x9678},{0x5802, 0x93B0},{0x5805, 0x8C98},
- {0x5806, 0x91CD},{0x580A, 0x9ABF},{0x580B, 0x9AC2},{0x5815, 0x91C2},{0x5819, 0x9AC3},{0x581D, 0x9AC4},{0x5821, 0x9AC6},{0x5824, 0x92E7},
- {0x582A, 0x8AAC},{0x582F, 0xEA9F},{0x5830, 0x8981},{0x5831, 0x95F1},{0x5834, 0x8FEA},{0x5835, 0x9367},{0x583A, 0x8DE4},{0x583D, 0x9ACC},
- {0x5840, 0x95BB},{0x5841, 0x97DB},{0x584A, 0x89F2},{0x584B, 0x9AC8},{0x5851, 0x9159},{0x5852, 0x9ACB},{0x5854, 0x9383},{0x5857, 0x9368},
- {0x5858, 0x9384},{0x5859, 0x94B7},{0x585A, 0x92CB},{0x585E, 0x8DC7},{0x5862, 0x9AC7},{0x5869, 0x8996},{0x586B, 0x9355},{0x5870, 0x9AC9},
- {0x5872, 0x9AC5},{0x5875, 0x906F},{0x5879, 0x9ACD},{0x587E, 0x8F6D},{0x5883, 0x8BAB},{0x5885, 0x9ACE},{0x5893, 0x95E6},{0x5897, 0x919D},
- {0x589C, 0x92C4},{0x589E, 0xED81},{0x589F, 0x9AD0},{0x58A8, 0x966E},{0x58AB, 0x9AD1},{0x58AE, 0x9AD6},{0x58B2, 0xED82},{0x58B3, 0x95AD},
- {0x58B8, 0x9AD5},{0x58B9, 0x9ACF},{0x58BA, 0x9AD2},{0x58BB, 0x9AD4},{0x58BE, 0x8DA4},{0x58C1, 0x95C7},{0x58C5, 0x9AD7},{0x58C7, 0x9264},
- {0x58CA, 0x89F3},{0x58CC, 0x8FEB},{0x58D1, 0x9AD9},{0x58D3, 0x9AD8},{0x58D5, 0x8D88},{0x58D7, 0x9ADA},{0x58D8, 0x9ADC},{0x58D9, 0x9ADB},
- {0x58DC, 0x9ADE},{0x58DE, 0x9AD3},{0x58DF, 0x9AE0},{0x58E4, 0x9ADF},{0x58E5, 0x9ADD},{0x58EB, 0x8E6D},{0x58EC, 0x9070},{0x58EE, 0x9173},
- {0x58EF, 0x9AE1},{0x58F0, 0x90BA},{0x58F1, 0x88EB},{0x58F2, 0x9484},{0x58F7, 0x92D9},{0x58F9, 0x9AE3},{0x58FA, 0x9AE2},{0x58FB, 0x9AE4},
- {0x58FC, 0x9AE5},{0x58FD, 0x9AE6},{0x5902, 0x9AE7},{0x5909, 0x95CF},{0x590A, 0x9AE8},{0x590B, 0xED83},{0x590F, 0x89C4},{0x5910, 0x9AE9},
- {0x5915, 0x975B},{0x5916, 0x8A4F},{0x5918, 0x99C7},{0x5919, 0x8F67},{0x591A, 0x91BD},{0x591B, 0x9AEA},{0x591C, 0x96E9},{0x5922, 0x96B2},
- {0x5925, 0x9AEC},{0x5927, 0x91E5},{0x5929, 0x9356},{0x592A, 0x91BE},{0x592B, 0x9576},{0x592C, 0x9AED},{0x592D, 0x9AEE},{0x592E, 0x899B},
- {0x5931, 0x8EB8},{0x5932, 0x9AEF},{0x5937, 0x88CE},{0x5938, 0x9AF0},{0x593E, 0x9AF1},{0x5944, 0x8982},{0x5947, 0x8AEF},{0x5948, 0x93DE},
- {0x5949, 0x95F2},{0x594E, 0x9AF5},{0x594F, 0x9174},{0x5950, 0x9AF4},{0x5951, 0x8C5F},{0x5953, 0xED84},{0x5954, 0x967A},{0x5955, 0x9AF3},
- {0x5957, 0x9385},{0x5958, 0x9AF7},{0x595A, 0x9AF6},{0x595B, 0xED85},{0x595D, 0xED86},{0x5960, 0x9AF9},{0x5962, 0x9AF8},{0x5963, 0xED87},
- {0x5965, 0x899C},{0x5967, 0x9AFA},{0x5968, 0x8FA7},{0x5969, 0x9AFC},{0x596A, 0x9244},{0x596C, 0x9AFB},{0x596E, 0x95B1},{0x5973, 0x8F97},
- {0x5974, 0x937A},{0x5978, 0x9B40},{0x597D, 0x8D44},{0x5981, 0x9B41},{0x5982, 0x9440},{0x5983, 0x94DC},{0x5984, 0x96CF},{0x598A, 0x9444},
- {0x598D, 0x9B4A},{0x5993, 0x8B57},{0x5996, 0x9764},{0x5999, 0x96AD},{0x599B, 0x9BAA},{0x599D, 0x9B42},{0x59A3, 0x9B45},{0x59A4, 0xED88},
- {0x59A5, 0x91C3},{0x59A8, 0x9657},{0x59AC, 0x9369},{0x59B2, 0x9B46},{0x59B9, 0x9685},{0x59BA, 0xED89},{0x59BB, 0x8DC8},{0x59BE, 0x8FA8},
- {0x59C6, 0x9B47},{0x59C9, 0x8E6F},{0x59CB, 0x8E6E},{0x59D0, 0x88B7},{0x59D1, 0x8CC6},{0x59D3, 0x90A9},{0x59D4, 0x88CF},{0x59D9, 0x9B4B},
- {0x59DA, 0x9B4C},{0x59DC, 0x9B49},{0x59E5, 0x8957},{0x59E6, 0x8AAD},{0x59E8, 0x9B48},{0x59EA, 0x96C3},{0x59EB, 0x9550},{0x59F6, 0x88A6},
- {0x59FB, 0x88F7},{0x59FF, 0x8E70},{0x5A01, 0x88D0},{0x5A03, 0x88A1},{0x5A09, 0x9B51},{0x5A11, 0x9B4F},{0x5A18, 0x96BA},{0x5A1A, 0x9B52},
- {0x5A1C, 0x9B50},{0x5A1F, 0x9B4E},{0x5A20, 0x9050},{0x5A25, 0x9B4D},{0x5A29, 0x95D8},{0x5A2F, 0x8CE2},{0x5A35, 0x9B56},{0x5A36, 0x9B57},
- {0x5A3C, 0x8FA9},{0x5A40, 0x9B53},{0x5A41, 0x984B},{0x5A46, 0x946B},{0x5A49, 0x9B55},{0x5A5A, 0x8DA5},{0x5A62, 0x9B58},{0x5A66, 0x9577},
- {0x5A6A, 0x9B59},{0x5A6C, 0x9B54},{0x5A7F, 0x96B9},{0x5A92, 0x947D},{0x5A9A, 0x9B5A},{0x5A9B, 0x9551},{0x5ABC, 0x9B5B},{0x5ABD, 0x9B5F},
- {0x5ABE, 0x9B5C},{0x5AC1, 0x89C5},{0x5AC2, 0x9B5E},{0x5AC9, 0x8EB9},{0x5ACB, 0x9B5D},{0x5ACC, 0x8C99},{0x5AD0, 0x9B6B},{0x5AD6, 0x9B64},
- {0x5AD7, 0x9B61},{0x5AE1, 0x9284},{0x5AE3, 0x9B60},{0x5AE6, 0x9B62},{0x5AE9, 0x9B63},{0x5AFA, 0x9B65},{0x5AFB, 0x9B66},{0x5B09, 0x8AF0},
- {0x5B0B, 0x9B68},{0x5B0C, 0x9B67},{0x5B16, 0x9B69},{0x5B22, 0x8FEC},{0x5B2A, 0x9B6C},{0x5B2C, 0x92DA},{0x5B30, 0x8964},{0x5B32, 0x9B6A},
- {0x5B36, 0x9B6D},{0x5B3E, 0x9B6E},{0x5B40, 0x9B71},{0x5B43, 0x9B6F},{0x5B45, 0x9B70},{0x5B50, 0x8E71},{0x5B51, 0x9B72},{0x5B54, 0x8D45},
- {0x5B55, 0x9B73},{0x5B56, 0xED8A},{0x5B57, 0x8E9A},{0x5B58, 0x91B6},{0x5B5A, 0x9B74},{0x5B5B, 0x9B75},{0x5B5C, 0x8E79},{0x5B5D, 0x8D46},
- {0x5B5F, 0x96D0},{0x5B63, 0x8B47},{0x5B64, 0x8CC7},{0x5B65, 0x9B76},{0x5B66, 0x8A77},{0x5B69, 0x9B77},{0x5B6B, 0x91B7},{0x5B70, 0x9B78},
- {0x5B71, 0x9BA1},{0x5B73, 0x9B79},{0x5B75, 0x9B7A},{0x5B78, 0x9B7B},{0x5B7A, 0x9B7D},{0x5B80, 0x9B7E},{0x5B83, 0x9B80},{0x5B85, 0x91EE},
- {0x5B87, 0x8946},{0x5B88, 0x8EE7},{0x5B89, 0x88C0},{0x5B8B, 0x9176},{0x5B8C, 0x8AAE},{0x5B8D, 0x8EB3},{0x5B8F, 0x8D47},{0x5B95, 0x9386},
- {0x5B97, 0x8F40},{0x5B98, 0x8AAF},{0x5B99, 0x9288},{0x5B9A, 0x92E8},{0x5B9B, 0x88B6},{0x5B9C, 0x8B58},{0x5B9D, 0x95F3},{0x5B9F, 0x8EC0},
- {0x5BA2, 0x8B71},{0x5BA3, 0x90E9},{0x5BA4, 0x8EBA},{0x5BA5, 0x9747},{0x5BA6, 0x9B81},{0x5BAE, 0x8B7B},{0x5BB0, 0x8DC9},{0x5BB3, 0x8A51},
- {0x5BB4, 0x8983},{0x5BB5, 0x8FAA},{0x5BB6, 0x89C6},{0x5BB8, 0x9B82},{0x5BB9, 0x9765},{0x5BBF, 0x8F68},{0x5BC0, 0xED8B},{0x5BC2, 0x8EE2},
- {0x5BC3, 0x9B83},{0x5BC4, 0x8AF1},{0x5BC5, 0x93D0},{0x5BC6, 0x96A7},{0x5BC7, 0x9B84},{0x5BC9, 0x9B85},{0x5BCC, 0x9578},{0x5BD0, 0x9B87},
- {0x5BD2, 0x8AA6},{0x5BD3, 0x8BF5},{0x5BD4, 0x9B86},{0x5BD8, 0xED8D},{0x5BDB, 0x8AB0},{0x5BDD, 0x9051},{0x5BDE, 0x9B8B},{0x5BDF, 0x8E40},
- {0x5BE1, 0x89C7},{0x5BE2, 0x9B8A},{0x5BE4, 0x9B88},{0x5BE5, 0x9B8C},{0x5BE6, 0x9B89},{0x5BE7, 0x944A},{0x5BE8, 0x9ECB},{0x5BE9, 0x9052},
- {0x5BEB, 0x9B8D},{0x5BEC, 0xED8E},{0x5BEE, 0x97BE},{0x5BF0, 0x9B8E},{0x5BF3, 0x9B90},{0x5BF5, 0x929E},{0x5BF6, 0x9B8F},{0x5BF8, 0x90A1},
- {0x5BFA, 0x8E9B},{0x5BFE, 0x91CE},{0x5BFF, 0x8EF5},{0x5C01, 0x9595},{0x5C02, 0x90EA},{0x5C04, 0x8ECB},{0x5C05, 0x9B91},{0x5C06, 0x8FAB},
- {0x5C07, 0x9B92},{0x5C08, 0x9B93},{0x5C09, 0x88D1},{0x5C0A, 0x91B8},{0x5C0B, 0x9071},{0x5C0D, 0x9B94},{0x5C0E, 0x93B1},{0x5C0F, 0x8FAC},
- {0x5C11, 0x8FAD},{0x5C13, 0x9B95},{0x5C16, 0x90EB},{0x5C1A, 0x8FAE},{0x5C1E, 0xED8F},{0x5C20, 0x9B96},{0x5C22, 0x9B97},{0x5C24, 0x96DE},
- {0x5C28, 0x9B98},{0x5C2D, 0x8BC4},{0x5C31, 0x8F41},{0x5C38, 0x9B99},{0x5C39, 0x9B9A},{0x5C3A, 0x8EDA},{0x5C3B, 0x904B},{0x5C3C, 0x93F2},
- {0x5C3D, 0x9073},{0x5C3E, 0x94F6},{0x5C3F, 0x9441},{0x5C40, 0x8BC7},{0x5C41, 0x9B9B},{0x5C45, 0x8B8F},{0x5C46, 0x9B9C},{0x5C48, 0x8BFC},
- {0x5C4A, 0x93CD},{0x5C4B, 0x89AE},{0x5C4D, 0x8E72},{0x5C4E, 0x9B9D},{0x5C4F, 0x9BA0},{0x5C50, 0x9B9F},{0x5C51, 0x8BFB},{0x5C53, 0x9B9E},
- {0x5C55, 0x9357},{0x5C5E, 0x91AE},{0x5C60, 0x936A},{0x5C61, 0x8EC6},{0x5C64, 0x9177},{0x5C65, 0x979A},{0x5C6C, 0x9BA2},{0x5C6E, 0x9BA3},
- {0x5C6F, 0x93D4},{0x5C71, 0x8E52},{0x5C76, 0x9BA5},{0x5C79, 0x9BA6},{0x5C8C, 0x9BA7},{0x5C90, 0x8AF2},{0x5C91, 0x9BA8},{0x5C94, 0x9BA9},
- {0x5CA1, 0x89AA},{0x5CA6, 0xED90},{0x5CA8, 0x915A},{0x5CA9, 0x8AE2},{0x5CAB, 0x9BAB},{0x5CAC, 0x96A6},{0x5CB1, 0x91D0},{0x5CB3, 0x8A78},
- {0x5CB6, 0x9BAD},{0x5CB7, 0x9BAF},{0x5CB8, 0x8ADD},{0x5CBA, 0xED91},{0x5CBB, 0x9BAC},{0x5CBC, 0x9BAE},{0x5CBE, 0x9BB1},{0x5CC5, 0x9BB0},
- {0x5CC7, 0x9BB2},{0x5CD9, 0x9BB3},{0x5CE0, 0x93BB},{0x5CE1, 0x8BAC},{0x5CE8, 0x89E3},{0x5CE9, 0x9BB4},{0x5CEA, 0x9BB9},{0x5CED, 0x9BB7},
- {0x5CEF, 0x95F5},{0x5CF0, 0x95F4},{0x5CF5, 0xED92},{0x5CF6, 0x9387},{0x5CFA, 0x9BB6},{0x5CFB, 0x8F73},{0x5CFD, 0x9BB5},{0x5D07, 0x9092},
- {0x5D0B, 0x9BBA},{0x5D0E, 0x8DE8},{0x5D11, 0x9BC0},{0x5D14, 0x9BC1},{0x5D15, 0x9BBB},{0x5D16, 0x8A52},{0x5D17, 0x9BBC},{0x5D18, 0x9BC5},
- {0x5D19, 0x9BC4},{0x5D1A, 0x9BC3},{0x5D1B, 0x9BBF},{0x5D1F, 0x9BBE},{0x5D22, 0x9BC2},{0x5D27, 0xED93},{0x5D29, 0x95F6},{0x5D42, 0xED96},
- {0x5D4B, 0x9BC9},{0x5D4C, 0x9BC6},{0x5D4E, 0x9BC8},{0x5D50, 0x9792},{0x5D52, 0x9BC7},{0x5D53, 0xED94},{0x5D5C, 0x9BBD},{0x5D69, 0x9093},
- {0x5D6C, 0x9BCA},{0x5D6D, 0xED97},{0x5D6F, 0x8DB5},{0x5D73, 0x9BCB},{0x5D76, 0x9BCC},{0x5D82, 0x9BCF},{0x5D84, 0x9BCE},{0x5D87, 0x9BCD},
- {0x5D8B, 0x9388},{0x5D8C, 0x9BB8},{0x5D90, 0x9BD5},{0x5D9D, 0x9BD1},{0x5DA2, 0x9BD0},{0x5DAC, 0x9BD2},{0x5DAE, 0x9BD3},{0x5DB7, 0x9BD6},
- {0x5DB8, 0xED98},{0x5DB9, 0xED99},{0x5DBA, 0x97E4},{0x5DBC, 0x9BD7},{0x5DBD, 0x9BD4},{0x5DC9, 0x9BD8},{0x5DCC, 0x8ADE},{0x5DCD, 0x9BD9},
- {0x5DD0, 0xED9A},{0x5DD2, 0x9BDB},{0x5DD3, 0x9BDA},{0x5DD6, 0x9BDC},{0x5DDB, 0x9BDD},{0x5DDD, 0x90EC},{0x5DDE, 0x8F42},{0x5DE1, 0x8F84},
- {0x5DE3, 0x9183},{0x5DE5, 0x8D48},{0x5DE6, 0x8DB6},{0x5DE7, 0x8D49},{0x5DE8, 0x8B90},{0x5DEB, 0x9BDE},{0x5DEE, 0x8DB7},{0x5DF1, 0x8CC8},
- {0x5DF2, 0x9BDF},{0x5DF3, 0x96A4},{0x5DF4, 0x9462},{0x5DF5, 0x9BE0},{0x5DF7, 0x8D4A},{0x5DFB, 0x8AAA},{0x5DFD, 0x9246},{0x5DFE, 0x8BD0},
- {0x5E02, 0x8E73},{0x5E03, 0x957A},{0x5E06, 0x94BF},{0x5E0B, 0x9BE1},{0x5E0C, 0x8AF3},{0x5E11, 0x9BE4},{0x5E16, 0x929F},{0x5E19, 0x9BE3},
- {0x5E1A, 0x9BE2},{0x5E1B, 0x9BE5},{0x5E1D, 0x92E9},{0x5E25, 0x9083},{0x5E2B, 0x8E74},{0x5E2D, 0x90C8},{0x5E2F, 0x91D1},{0x5E30, 0x8B41},
- {0x5E33, 0x92A0},{0x5E36, 0x9BE6},{0x5E37, 0x9BE7},{0x5E38, 0x8FED},{0x5E3D, 0x9658},{0x5E40, 0x9BEA},{0x5E43, 0x9BE9},{0x5E44, 0x9BE8},
- {0x5E45, 0x959D},{0x5E47, 0x9BF1},{0x5E4C, 0x9679},{0x5E4E, 0x9BEB},{0x5E54, 0x9BED},{0x5E55, 0x968B},{0x5E57, 0x9BEC},{0x5E5F, 0x9BEE},
- {0x5E61, 0x94A6},{0x5E62, 0x9BEF},{0x5E63, 0x95BC},{0x5E64, 0x9BF0},{0x5E72, 0x8AB1},{0x5E73, 0x95BD},{0x5E74, 0x944E},{0x5E75, 0x9BF2},
- {0x5E76, 0x9BF3},{0x5E78, 0x8D4B},{0x5E79, 0x8AB2},{0x5E7A, 0x9BF4},{0x5E7B, 0x8CB6},{0x5E7C, 0x9763},{0x5E7D, 0x9748},{0x5E7E, 0x8AF4},
- {0x5E7F, 0x9BF6},{0x5E81, 0x92A1},{0x5E83, 0x8D4C},{0x5E84, 0x8FAF},{0x5E87, 0x94DD},{0x5E8A, 0x8FB0},{0x5E8F, 0x8F98},{0x5E95, 0x92EA},
- {0x5E96, 0x95F7},{0x5E97, 0x9358},{0x5E9A, 0x8D4D},{0x5E9C, 0x957B},{0x5EA0, 0x9BF7},{0x5EA6, 0x9378},{0x5EA7, 0x8DC0},{0x5EAB, 0x8CC9},
- {0x5EAD, 0x92EB},{0x5EB5, 0x88C1},{0x5EB6, 0x8F8E},{0x5EB7, 0x8D4E},{0x5EB8, 0x9766},{0x5EC1, 0x9BF8},{0x5EC2, 0x9BF9},{0x5EC3, 0x9470},
- {0x5EC8, 0x9BFA},{0x5EC9, 0x97F5},{0x5ECA, 0x984C},{0x5ECF, 0x9BFC},{0x5ED0, 0x9BFB},{0x5ED3, 0x8A66},{0x5ED6, 0x9C40},{0x5EDA, 0x9C43},
- {0x5EDB, 0x9C44},{0x5EDD, 0x9C42},{0x5EDF, 0x955F},{0x5EE0, 0x8FB1},{0x5EE1, 0x9C46},{0x5EE2, 0x9C45},{0x5EE3, 0x9C41},{0x5EE8, 0x9C47},
- {0x5EE9, 0x9C48},{0x5EEC, 0x9C49},{0x5EF0, 0x9C4C},{0x5EF1, 0x9C4A},{0x5EF3, 0x9C4B},{0x5EF4, 0x9C4D},{0x5EF6, 0x8984},{0x5EF7, 0x92EC},
- {0x5EF8, 0x9C4E},{0x5EFA, 0x8C9A},{0x5EFB, 0x89F4},{0x5EFC, 0x9455},{0x5EFE, 0x9C4F},{0x5EFF, 0x93F9},{0x5F01, 0x95D9},{0x5F03, 0x9C50},
- {0x5F04, 0x984D},{0x5F09, 0x9C51},{0x5F0A, 0x95BE},{0x5F0B, 0x9C54},{0x5F0C, 0x989F},{0x5F0D, 0x98AF},{0x5F0F, 0x8EAE},{0x5F10, 0x93F3},
- {0x5F11, 0x9C55},{0x5F13, 0x8B7C},{0x5F14, 0x92A2},{0x5F15, 0x88F8},{0x5F16, 0x9C56},{0x5F17, 0x95A4},{0x5F18, 0x8D4F},{0x5F1B, 0x926F},
- {0x5F1F, 0x92ED},{0x5F21, 0xED9B},{0x5F25, 0x96ED},{0x5F26, 0x8CB7},{0x5F27, 0x8CCA},{0x5F29, 0x9C57},{0x5F2D, 0x9C58},{0x5F2F, 0x9C5E},
- {0x5F31, 0x8EE3},{0x5F34, 0xED9C},{0x5F35, 0x92A3},{0x5F37, 0x8BAD},{0x5F38, 0x9C59},{0x5F3C, 0x954A},{0x5F3E, 0x9265},{0x5F41, 0x9C5A},
- {0x5F45, 0xED4B},{0x5F48, 0x9C5B},{0x5F4A, 0x8BAE},{0x5F4C, 0x9C5C},{0x5F4E, 0x9C5D},{0x5F51, 0x9C5F},{0x5F53, 0x9396},{0x5F56, 0x9C60},
- {0x5F57, 0x9C61},{0x5F59, 0x9C62},{0x5F5C, 0x9C53},{0x5F5D, 0x9C52},{0x5F61, 0x9C63},{0x5F62, 0x8C60},{0x5F66, 0x9546},{0x5F67, 0xED9D},
- {0x5F69, 0x8DCA},{0x5F6A, 0x9556},{0x5F6B, 0x92A4},{0x5F6C, 0x956A},{0x5F6D, 0x9C64},{0x5F70, 0x8FB2},{0x5F71, 0x8965},{0x5F73, 0x9C65},
- {0x5F77, 0x9C66},{0x5F79, 0x96F0},{0x5F7C, 0x94DE},{0x5F7F, 0x9C69},{0x5F80, 0x899D},{0x5F81, 0x90AA},{0x5F82, 0x9C68},{0x5F83, 0x9C67},
- {0x5F84, 0x8C61},{0x5F85, 0x91D2},{0x5F87, 0x9C6D},{0x5F88, 0x9C6B},{0x5F8A, 0x9C6A},{0x5F8B, 0x97A5},{0x5F8C, 0x8CE3},{0x5F90, 0x8F99},
- {0x5F91, 0x9C6C},{0x5F92, 0x936B},{0x5F93, 0x8F5D},{0x5F97, 0x93BE},{0x5F98, 0x9C70},{0x5F99, 0x9C6F},{0x5F9E, 0x9C6E},{0x5FA0, 0x9C71},
- {0x5FA1, 0x8CE4},{0x5FA8, 0x9C72},{0x5FA9, 0x959C},{0x5FAA, 0x8F7A},{0x5FAD, 0x9C73},{0x5FAE, 0x94F7},{0x5FB3, 0x93BF},{0x5FB4, 0x92A5},
- {0x5FB7, 0xED9E},{0x5FB9, 0x934F},{0x5FBC, 0x9C74},{0x5FBD, 0x8B4A},{0x5FC3, 0x9053},{0x5FC5, 0x954B},{0x5FCC, 0x8AF5},{0x5FCD, 0x9445},
- {0x5FD6, 0x9C75},{0x5FD7, 0x8E75},{0x5FD8, 0x9659},{0x5FD9, 0x965A},{0x5FDC, 0x899E},{0x5FDD, 0x9C7A},{0x5FDE, 0xED9F},{0x5FE0, 0x9289},
- {0x5FE4, 0x9C77},{0x5FEB, 0x89F5},{0x5FF0, 0x9CAB},{0x5FF1, 0x9C79},{0x5FF5, 0x944F},{0x5FF8, 0x9C78},{0x5FFB, 0x9C76},{0x5FFD, 0x8D9A},
- {0x5FFF, 0x9C7C},{0x600E, 0x9C83},{0x600F, 0x9C89},{0x6010, 0x9C81},{0x6012, 0x937B},{0x6015, 0x9C86},{0x6016, 0x957C},{0x6019, 0x9C80},
- {0x601B, 0x9C85},{0x601C, 0x97E5},{0x601D, 0x8E76},{0x6020, 0x91D3},{0x6021, 0x9C7D},{0x6025, 0x8B7D},{0x6026, 0x9C88},{0x6027, 0x90AB},
- {0x6028, 0x8985},{0x6029, 0x9C82},{0x602A, 0x89F6},{0x602B, 0x9C87},{0x602F, 0x8BAF},{0x6031, 0x9C84},{0x603A, 0x9C8A},{0x6041, 0x9C8C},
- {0x6042, 0x9C96},{0x6043, 0x9C94},{0x6046, 0x9C91},{0x604A, 0x9C90},{0x604B, 0x97F6},{0x604D, 0x9C92},{0x6050, 0x8BB0},{0x6052, 0x8D50},
- {0x6055, 0x8F9A},{0x6059, 0x9C99},{0x605A, 0x9C8B},{0x605D, 0xEDA0},{0x605F, 0x9C8F},{0x6060, 0x9C7E},{0x6062, 0x89F8},{0x6063, 0x9C93},
- {0x6064, 0x9C95},{0x6065, 0x9270},{0x6068, 0x8DA6},{0x6069, 0x89B6},{0x606A, 0x9C8D},{0x606B, 0x9C98},{0x606C, 0x9C97},{0x606D, 0x8BB1},
- {0x606F, 0x91A7},{0x6070, 0x8A86},{0x6075, 0x8C62},{0x6077, 0x9C8E},{0x6081, 0x9C9A},{0x6083, 0x9C9D},{0x6084, 0x9C9F},{0x6085, 0xEDA1},
- {0x6089, 0x8EBB},{0x608A, 0xEDA2},{0x608B, 0x9CA5},{0x608C, 0x92EE},{0x608D, 0x9C9B},{0x6092, 0x9CA3},{0x6094, 0x89F7},{0x6096, 0x9CA1},
- {0x6097, 0x9CA2},{0x609A, 0x9C9E},{0x609B, 0x9CA0},{0x609F, 0x8CE5},{0x60A0, 0x9749},{0x60A3, 0x8AB3},{0x60A6, 0x8978},{0x60A7, 0x9CA4},
- {0x60A9, 0x9459},{0x60AA, 0x88AB},{0x60B2, 0x94DF},{0x60B3, 0x9C7B},{0x60B4, 0x9CAA},{0x60B5, 0x9CAE},{0x60B6, 0x96E3},{0x60B8, 0x9CA7},
- {0x60BC, 0x9389},{0x60BD, 0x9CAC},{0x60C5, 0x8FEE},{0x60C6, 0x9CAD},{0x60C7, 0x93D5},{0x60D1, 0x9866},{0x60D3, 0x9CA9},{0x60D5, 0xEDA4},
- {0x60D8, 0x9CAF},{0x60DA, 0x8D9B},{0x60DC, 0x90C9},{0x60DE, 0xEDA3},{0x60DF, 0x88D2},{0x60E0, 0x9CA8},{0x60E1, 0x9CA6},{0x60E3, 0x9179},
- {0x60E7, 0x9C9C},{0x60E8, 0x8E53},{0x60F0, 0x91C4},{0x60F1, 0x9CBB},{0x60F2, 0xEDA6},{0x60F3, 0x917A},{0x60F4, 0x9CB6},{0x60F6, 0x9CB3},
- {0x60F7, 0x9CB4},{0x60F9, 0x8EE4},{0x60FA, 0x9CB7},{0x60FB, 0x9CBA},{0x6100, 0x9CB5},{0x6101, 0x8F44},{0x6103, 0x9CB8},{0x6106, 0x9CB2},
- {0x6108, 0x96FA},{0x6109, 0x96F9},{0x610D, 0x9CBC},{0x610E, 0x9CBD},{0x610F, 0x88D3},{0x6111, 0xEDA7},{0x6115, 0x9CB1},{0x611A, 0x8BF0},
- {0x611B, 0x88A4},{0x611F, 0x8AB4},{0x6120, 0xEDA5},{0x6121, 0x9CB9},{0x6127, 0x9CC1},{0x6128, 0x9CC0},{0x612C, 0x9CC5},{0x6130, 0xEDA9},
- {0x6134, 0x9CC6},{0x6137, 0xEDA8},{0x613C, 0x9CC4},{0x613D, 0x9CC7},{0x613E, 0x9CBF},{0x613F, 0x9CC3},{0x6142, 0x9CC8},{0x6144, 0x9CC9},
- {0x6147, 0x9CBE},{0x6148, 0x8E9C},{0x614A, 0x9CC2},{0x614B, 0x91D4},{0x614C, 0x8D51},{0x614D, 0x9CB0},{0x614E, 0x9054},{0x6153, 0x9CD6},
- {0x6155, 0x95E7},{0x6158, 0x9CCC},{0x6159, 0x9CCD},{0x615A, 0x9CCE},{0x615D, 0x9CD5},{0x615F, 0x9CD4},{0x6162, 0x969D},{0x6163, 0x8AB5},
- {0x6165, 0x9CD2},{0x6167, 0x8C64},{0x6168, 0x8A53},{0x616B, 0x9CCF},{0x616E, 0x97B6},{0x616F, 0x9CD1},{0x6170, 0x88D4},{0x6171, 0x9CD3},
- {0x6173, 0x9CCA},{0x6174, 0x9CD0},{0x6175, 0x9CD7},{0x6176, 0x8C63},{0x6177, 0x9CCB},{0x617E, 0x977C},{0x6182, 0x974A},{0x6187, 0x9CDA},
- {0x618A, 0x9CDE},{0x618E, 0x919E},{0x6190, 0x97F7},{0x6191, 0x9CDF},{0x6194, 0x9CDC},{0x6196, 0x9CD9},{0x6198, 0xEDAA},{0x6199, 0x9CD8},
- {0x619A, 0x9CDD},{0x61A4, 0x95AE},{0x61A7, 0x93B2},{0x61A9, 0x8C65},{0x61AB, 0x9CE0},{0x61AC, 0x9CDB},{0x61AE, 0x9CE1},{0x61B2, 0x8C9B},
- {0x61B6, 0x89AF},{0x61BA, 0x9CE9},{0x61BE, 0x8AB6},{0x61C3, 0x9CE7},{0x61C6, 0x9CE8},{0x61C7, 0x8DA7},{0x61C8, 0x9CE6},{0x61C9, 0x9CE4},
- {0x61CA, 0x9CE3},{0x61CB, 0x9CEA},{0x61CC, 0x9CE2},{0x61CD, 0x9CEC},{0x61D0, 0x89F9},{0x61E3, 0x9CEE},{0x61E6, 0x9CED},{0x61F2, 0x92A6},
- {0x61F4, 0x9CF1},{0x61F6, 0x9CEF},{0x61F7, 0x9CE5},{0x61F8, 0x8C9C},{0x61FA, 0x9CF0},{0x61FC, 0x9CF4},{0x61FD, 0x9CF3},{0x61FE, 0x9CF5},
- {0x61FF, 0x9CF2},{0x6200, 0x9CF6},{0x6208, 0x9CF7},{0x6209, 0x9CF8},{0x620A, 0x95E8},{0x620C, 0x9CFA},{0x620D, 0x9CF9},{0x620E, 0x8F5E},
- {0x6210, 0x90AC},{0x6211, 0x89E4},{0x6212, 0x89FA},{0x6213, 0xEDAB},{0x6214, 0x9CFB},{0x6216, 0x88BD},{0x621A, 0x90CA},{0x621B, 0x9CFC},
- {0x621D, 0xE6C1},{0x621E, 0x9D40},{0x621F, 0x8C81},{0x6221, 0x9D41},{0x6226, 0x90ED},{0x622A, 0x9D42},{0x622E, 0x9D43},{0x622F, 0x8B59},
- {0x6230, 0x9D44},{0x6232, 0x9D45},{0x6233, 0x9D46},{0x6234, 0x91D5},{0x6238, 0x8CCB},{0x623B, 0x96DF},{0x623F, 0x965B},{0x6240, 0x8F8A},
- {0x6241, 0x9D47},{0x6247, 0x90EE},{0x6248, 0xE7BB},{0x6249, 0x94E0},{0x624B, 0x8EE8},{0x624D, 0x8DCB},{0x624E, 0x9D48},{0x6253, 0x91C5},
- {0x6255, 0x95A5},{0x6258, 0x91EF},{0x625B, 0x9D4B},{0x625E, 0x9D49},{0x6260, 0x9D4C},{0x6263, 0x9D4A},{0x6268, 0x9D4D},{0x626E, 0x95AF},
- {0x6271, 0x88B5},{0x6276, 0x957D},{0x6279, 0x94E1},{0x627C, 0x9D4E},{0x627E, 0x9D51},{0x627F, 0x8FB3},{0x6280, 0x8B5A},{0x6282, 0x9D4F},
- {0x6283, 0x9D56},{0x6284, 0x8FB4},{0x6289, 0x9D50},{0x628A, 0x9463},{0x6291, 0x977D},{0x6292, 0x9D52},{0x6293, 0x9D53},{0x6294, 0x9D57},
- {0x6295, 0x938A},{0x6296, 0x9D54},{0x6297, 0x8D52},{0x6298, 0x90DC},{0x629B, 0x9D65},{0x629C, 0x94B2},{0x629E, 0x91F0},{0x62A6, 0xEDAC},
- {0x62AB, 0x94E2},{0x62AC, 0x9DAB},{0x62B1, 0x95F8},{0x62B5, 0x92EF},{0x62B9, 0x9695},{0x62BB, 0x9D5A},{0x62BC, 0x899F},{0x62BD, 0x928A},
- {0x62C2, 0x9D63},{0x62C5, 0x9253},{0x62C6, 0x9D5D},{0x62C7, 0x9D64},{0x62C8, 0x9D5F},{0x62C9, 0x9D66},{0x62CA, 0x9D62},{0x62CC, 0x9D61},
- {0x62CD, 0x948F},{0x62CF, 0x9D5B},{0x62D0, 0x89FB},{0x62D1, 0x9D59},{0x62D2, 0x8B91},{0x62D3, 0x91F1},{0x62D4, 0x9D55},{0x62D7, 0x9D58},
- {0x62D8, 0x8D53},{0x62D9, 0x90D9},{0x62DB, 0x8FB5},{0x62DC, 0x9D60},{0x62DD, 0x9471},{0x62E0, 0x8B92},{0x62E1, 0x8A67},{0x62EC, 0x8A87},
- {0x62ED, 0x9040},{0x62EE, 0x9D68},{0x62EF, 0x9D6D},{0x62F1, 0x9D69},{0x62F3, 0x8C9D},{0x62F5, 0x9D6E},{0x62F6, 0x8E41},{0x62F7, 0x8D89},
- {0x62FE, 0x8F45},{0x62FF, 0x9D5C},{0x6301, 0x8E9D},{0x6302, 0x9D6B},{0x6307, 0x8E77},{0x6308, 0x9D6C},{0x6309, 0x88C2},{0x630C, 0x9D67},
- {0x6311, 0x92A7},{0x6319, 0x8B93},{0x631F, 0x8BB2},{0x6327, 0x9D6A},{0x6328, 0x88A5},{0x632B, 0x8DC1},{0x632F, 0x9055},{0x633A, 0x92F0},
- {0x633D, 0x94D2},{0x633E, 0x9D70},{0x633F, 0x917D},{0x6349, 0x91A8},{0x634C, 0x8E4A},{0x634D, 0x9D71},{0x634F, 0x9D73},{0x6350, 0x9D6F},
- {0x6355, 0x95DF},{0x6357, 0x92BB},{0x635C, 0x917B},{0x6367, 0x95F9},{0x6368, 0x8ECC},{0x6369, 0x9D80},{0x636B, 0x9D7E},{0x636E, 0x9098},
- {0x6372, 0x8C9E},{0x6376, 0x9D78},{0x6377, 0x8FB7},{0x637A, 0x93E6},{0x637B, 0x9450},{0x6380, 0x9D76},{0x6383, 0x917C},{0x6388, 0x8EF6},
- {0x6389, 0x9D7B},{0x638C, 0x8FB6},{0x638E, 0x9D75},{0x638F, 0x9D7A},{0x6392, 0x9472},{0x6396, 0x9D74},{0x6398, 0x8C40},{0x639B, 0x8A7C},
- {0x639F, 0x9D7C},{0x63A0, 0x97A9},{0x63A1, 0x8DCC},{0x63A2, 0x9254},{0x63A3, 0x9D79},{0x63A5, 0x90DA},{0x63A7, 0x8D54},{0x63A8, 0x9084},
- {0x63A9, 0x8986},{0x63AA, 0x915B},{0x63AB, 0x9D77},{0x63AC, 0x8B64},{0x63B2, 0x8C66},{0x63B4, 0x92CD},{0x63B5, 0x9D7D},{0x63BB, 0x917E},
- {0x63BE, 0x9D81},{0x63C0, 0x9D83},{0x63C3, 0x91B5},{0x63C4, 0x9D89},{0x63C6, 0x9D84},{0x63C9, 0x9D86},{0x63CF, 0x9560},{0x63D0, 0x92F1},
- {0x63D2, 0x9D87},{0x63D6, 0x974B},{0x63DA, 0x9767},{0x63DB, 0x8AB7},{0x63E1, 0x88AC},{0x63E3, 0x9D85},{0x63E9, 0x9D82},{0x63EE, 0x8AF6},
- {0x63F4, 0x8987},{0x63F5, 0xEDAD},{0x63F6, 0x9D88},{0x63FA, 0x9768},{0x6406, 0x9D8C},{0x640D, 0x91B9},{0x640F, 0x9D93},{0x6413, 0x9D8D},
- {0x6416, 0x9D8A},{0x6417, 0x9D91},{0x641C, 0x9D72},{0x6426, 0x9D8E},{0x6428, 0x9D92},{0x642C, 0x94C0},{0x642D, 0x938B},{0x6434, 0x9D8B},
- {0x6436, 0x9D8F},{0x643A, 0x8C67},{0x643E, 0x8DEF},{0x6442, 0x90DB},{0x644E, 0x9D97},{0x6458, 0x9345},{0x6460, 0xEDAE},{0x6467, 0x9D94},
- {0x6469, 0x9680},{0x646F, 0x9D95},{0x6476, 0x9D96},{0x6478, 0x96CC},{0x647A, 0x90A0},{0x6483, 0x8C82},{0x6488, 0x9D9D},{0x6492, 0x8E54},
- {0x6493, 0x9D9A},{0x6495, 0x9D99},{0x649A, 0x9451},{0x649D, 0xEDAF},{0x649E, 0x93B3},{0x64A4, 0x9350},{0x64A5, 0x9D9B},{0x64A9, 0x9D9C},
- {0x64AB, 0x958F},{0x64AD, 0x9464},{0x64AE, 0x8E42},{0x64B0, 0x90EF},{0x64B2, 0x966F},{0x64B9, 0x8A68},{0x64BB, 0x9DA3},{0x64BC, 0x9D9E},
- {0x64C1, 0x9769},{0x64C2, 0x9DA5},{0x64C5, 0x9DA1},{0x64C7, 0x9DA2},{0x64CD, 0x9180},{0x64CE, 0xEDB0},{0x64D2, 0x9DA0},{0x64D4, 0x9D5E},
- {0x64D8, 0x9DA4},{0x64DA, 0x9D9F},{0x64E0, 0x9DA9},{0x64E1, 0x9DAA},{0x64E2, 0x9346},{0x64E3, 0x9DAC},{0x64E6, 0x8E43},{0x64E7, 0x9DA7},
- {0x64EC, 0x8B5B},{0x64EF, 0x9DAD},{0x64F1, 0x9DA6},{0x64F2, 0x9DB1},{0x64F4, 0x9DB0},{0x64F6, 0x9DAF},{0x64FA, 0x9DB2},{0x64FD, 0x9DB4},
- {0x64FE, 0x8FEF},{0x6500, 0x9DB3},{0x6505, 0x9DB7},{0x6518, 0x9DB5},{0x651C, 0x9DB6},{0x651D, 0x9D90},{0x6523, 0x9DB9},{0x6524, 0x9DB8},
- {0x652A, 0x9D98},{0x652B, 0x9DBA},{0x652C, 0x9DAE},{0x652F, 0x8E78},{0x6534, 0x9DBB},{0x6535, 0x9DBC},{0x6536, 0x9DBE},{0x6537, 0x9DBD},
- {0x6538, 0x9DBF},{0x6539, 0x89FC},{0x653B, 0x8D55},{0x653E, 0x95FA},{0x653F, 0x90AD},{0x6545, 0x8CCC},{0x6548, 0x9DC1},{0x654D, 0x9DC4},
- {0x654E, 0xEDB1},{0x654F, 0x9571},{0x6551, 0x8B7E},{0x6555, 0x9DC3},{0x6556, 0x9DC2},{0x6557, 0x9473},{0x6558, 0x9DC5},{0x6559, 0x8BB3},
- {0x655D, 0x9DC7},{0x655E, 0x9DC6},{0x6562, 0x8AB8},{0x6563, 0x8E55},{0x6566, 0x93D6},{0x656C, 0x8C68},{0x6570, 0x9094},{0x6572, 0x9DC8},
- {0x6574, 0x90AE},{0x6575, 0x9347},{0x6577, 0x957E},{0x6578, 0x9DC9},{0x6582, 0x9DCA},{0x6583, 0x9DCB},{0x6587, 0x95B6},{0x6588, 0x9B7C},
- {0x6589, 0x90C4},{0x658C, 0x956B},{0x658E, 0x8DD6},{0x6590, 0x94E3},{0x6591, 0x94C1},{0x6597, 0x936C},{0x6599, 0x97BF},{0x659B, 0x9DCD},
- {0x659C, 0x8ECE},{0x659F, 0x9DCE},{0x65A1, 0x88B4},{0x65A4, 0x8BD2},{0x65A5, 0x90CB},{0x65A7, 0x9580},{0x65AB, 0x9DCF},{0x65AC, 0x8E61},
- {0x65AD, 0x9266},{0x65AF, 0x8E7A},{0x65B0, 0x9056},{0x65B7, 0x9DD0},{0x65B9, 0x95FB},{0x65BC, 0x8997},{0x65BD, 0x8E7B},{0x65C1, 0x9DD3},
- {0x65C3, 0x9DD1},{0x65C4, 0x9DD4},{0x65C5, 0x97B7},{0x65C6, 0x9DD2},{0x65CB, 0x90F9},{0x65CC, 0x9DD5},{0x65CF, 0x91B0},{0x65D2, 0x9DD6},
- {0x65D7, 0x8AF8},{0x65D9, 0x9DD8},{0x65DB, 0x9DD7},{0x65E0, 0x9DD9},{0x65E1, 0x9DDA},{0x65E2, 0x8AF9},{0x65E5, 0x93FA},{0x65E6, 0x9255},
- {0x65E7, 0x8B8C},{0x65E8, 0x8E7C},{0x65E9, 0x9181},{0x65EC, 0x8F7B},{0x65ED, 0x88AE},{0x65F1, 0x9DDB},{0x65FA, 0x89A0},{0x65FB, 0x9DDF},
- {0x6600, 0xEDB2},{0x6602, 0x8D56},{0x6603, 0x9DDE},{0x6606, 0x8DA9},{0x6607, 0x8FB8},{0x6609, 0xEDB5},{0x660A, 0x9DDD},{0x660C, 0x8FB9},
- {0x660E, 0x96BE},{0x660F, 0x8DA8},{0x6613, 0x88D5},{0x6614, 0x90CC},{0x6615, 0xEDB3},{0x661C, 0x9DE4},{0x661E, 0xEDB7},{0x661F, 0x90AF},
- {0x6620, 0x8966},{0x6624, 0xEDB8},{0x6625, 0x8F74},{0x6627, 0x9686},{0x6628, 0x8DF0},{0x662D, 0x8FBA},{0x662E, 0xEDB6},{0x662F, 0x90A5},
- {0x6631, 0xED47},{0x6634, 0x9DE3},{0x6635, 0x9DE1},{0x6636, 0x9DE2},{0x663B, 0xEDB4},{0x663C, 0x928B},{0x663F, 0x9E45},{0x6641, 0x9DE8},
- {0x6642, 0x8E9E},{0x6643, 0x8D57},{0x6644, 0x9DE6},{0x6649, 0x9DE7},{0x664B, 0x9057},{0x664F, 0x9DE5},{0x6652, 0x8E4E},{0x6657, 0xEDBA},
- {0x6659, 0xEDBB},{0x665D, 0x9DEA},{0x665E, 0x9DE9},{0x665F, 0x9DEE},{0x6662, 0x9DEF},{0x6664, 0x9DEB},{0x6665, 0xEDB9},{0x6666, 0x8A41},
- {0x6667, 0x9DEC},{0x6668, 0x9DED},{0x6669, 0x94D3},{0x666E, 0x9581},{0x666F, 0x8C69},{0x6670, 0x9DF0},{0x6673, 0xEDBD},{0x6674, 0x90B0},
- {0x6676, 0x8FBB},{0x667A, 0x9271},{0x6681, 0x8BC5},{0x6683, 0x9DF1},{0x6684, 0x9DF5},{0x6687, 0x89C9},{0x6688, 0x9DF2},{0x6689, 0x9DF4},
- {0x668E, 0x9DF3},{0x6691, 0x8F8B},{0x6696, 0x9267},{0x6697, 0x88C3},{0x6698, 0x9DF6},{0x6699, 0xEDBE},{0x669D, 0x9DF7},{0x66A0, 0xEDBF},
- {0x66A2, 0x92A8},{0x66A6, 0x97EF},{0x66AB, 0x8E62},{0x66AE, 0x95E9},{0x66B2, 0xEDC0},{0x66B4, 0x965C},{0x66B8, 0x9E41},{0x66B9, 0x9DF9},
- {0x66BC, 0x9DFC},{0x66BE, 0x9DFB},{0x66BF, 0xEDC1},{0x66C1, 0x9DF8},{0x66C4, 0x9E40},{0x66C7, 0x93DC},{0x66C9, 0x9DFA},{0x66D6, 0x9E42},
- {0x66D9, 0x8F8C},{0x66DA, 0x9E43},{0x66DC, 0x976A},{0x66DD, 0x9498},{0x66E0, 0x9E44},{0x66E6, 0x9E46},{0x66E9, 0x9E47},{0x66F0, 0x9E48},
- {0x66F2, 0x8BC8},{0x66F3, 0x8967},{0x66F4, 0x8D58},{0x66F5, 0x9E49},{0x66F7, 0x9E4A},{0x66F8, 0x8F91},{0x66F9, 0x9182},{0x66FA, 0xEDC2},
- {0x66FB, 0xED4A},{0x66FC, 0x99D6},{0x66FD, 0x915D},{0x66FE, 0x915C},{0x66FF, 0x91D6},{0x6700, 0x8DC5},{0x6703, 0x98F0},{0x6708, 0x8C8E},
- {0x6709, 0x974C},{0x670B, 0x95FC},{0x670D, 0x959E},{0x670E, 0xEDC3},{0x670F, 0x9E4B},{0x6714, 0x8DF1},{0x6715, 0x92BD},{0x6716, 0x9E4C},
- {0x6717, 0x984E},{0x671B, 0x965D},{0x671D, 0x92A9},{0x671E, 0x9E4D},{0x671F, 0x8AFA},{0x6726, 0x9E4E},{0x6727, 0x9E4F},{0x6728, 0x96D8},
- {0x672A, 0x96A2},{0x672B, 0x9696},{0x672C, 0x967B},{0x672D, 0x8E44},{0x672E, 0x9E51},{0x6731, 0x8EE9},{0x6734, 0x9670},{0x6736, 0x9E53},
- {0x6737, 0x9E56},{0x6738, 0x9E55},{0x673A, 0x8AF7},{0x673D, 0x8B80},{0x673F, 0x9E52},{0x6741, 0x9E54},{0x6746, 0x9E57},{0x6749, 0x9099},
- {0x674E, 0x979B},{0x674F, 0x88C7},{0x6750, 0x8DDE},{0x6751, 0x91BA},{0x6753, 0x8EDB},{0x6756, 0x8FF1},{0x6759, 0x9E5A},{0x675C, 0x936D},
- {0x675E, 0x9E58},{0x675F, 0x91A9},{0x6760, 0x9E59},{0x6761, 0x8FF0},{0x6762, 0x96DB},{0x6763, 0x9E5B},{0x6764, 0x9E5C},{0x6765, 0x9788},
- {0x6766, 0xEDC5},{0x676A, 0x9E61},{0x676D, 0x8D59},{0x676F, 0x9474},{0x6770, 0x9E5E},{0x6771, 0x938C},{0x6772, 0x9DDC},{0x6773, 0x9DE0},
- {0x6775, 0x8B6E},{0x6777, 0x9466},{0x677C, 0x9E60},{0x677E, 0x8FBC},{0x677F, 0x94C2},{0x6785, 0x9E66},{0x6787, 0x94F8},{0x6789, 0x9E5D},
- {0x678B, 0x9E63},{0x678C, 0x9E62},{0x6790, 0x90CD},{0x6795, 0x968D},{0x6797, 0x97D1},{0x679A, 0x9687},{0x679C, 0x89CA},{0x679D, 0x8E7D},
- {0x67A0, 0x9867},{0x67A1, 0x9E65},{0x67A2, 0x9095},{0x67A6, 0x9E64},{0x67A9, 0x9E5F},{0x67AF, 0x8CCD},{0x67B3, 0x9E6B},{0x67B4, 0x9E69},
- {0x67B6, 0x89CB},{0x67B7, 0x9E67},{0x67B8, 0x9E6D},{0x67B9, 0x9E73},{0x67BB, 0xEDC6},{0x67C0, 0xEDC8},{0x67C1, 0x91C6},{0x67C4, 0x95BF},
- {0x67C6, 0x9E75},{0x67CA, 0x9541},{0x67CE, 0x9E74},{0x67CF, 0x9490},{0x67D0, 0x965E},{0x67D1, 0x8AB9},{0x67D3, 0x90F5},{0x67D4, 0x8F5F},
- {0x67D8, 0x92D1},{0x67DA, 0x974D},{0x67DD, 0x9E70},{0x67DE, 0x9E6F},{0x67E2, 0x9E71},{0x67E4, 0x9E6E},{0x67E7, 0x9E76},{0x67E9, 0x9E6C},
- {0x67EC, 0x9E6A},{0x67EE, 0x9E72},{0x67EF, 0x9E68},{0x67F1, 0x928C},{0x67F3, 0x96F6},{0x67F4, 0x8EC4},{0x67F5, 0x8DF2},{0x67FB, 0x8DB8},
- {0x67FE, 0x968F},{0x67FF, 0x8A60},{0x6801, 0xEDC9},{0x6802, 0x92CC},{0x6803, 0x93C8},{0x6804, 0x8968},{0x6813, 0x90F0},{0x6816, 0x90B2},
- {0x6817, 0x8C49},{0x681E, 0x9E78},{0x6821, 0x8D5A},{0x6822, 0x8A9C},{0x6829, 0x9E7A},{0x682A, 0x8A94},{0x682B, 0x9E81},{0x6832, 0x9E7D},
- {0x6834, 0x90F1},{0x6838, 0x8A6A},{0x6839, 0x8DAA},{0x683C, 0x8A69},{0x683D, 0x8DCD},{0x6840, 0x9E7B},{0x6841, 0x8C85},{0x6842, 0x8C6A},
- {0x6843, 0x938D},{0x6844, 0xEDCA},{0x6846, 0x9E79},{0x6848, 0x88C4},{0x684D, 0x9E7C},{0x684E, 0x9E7E},{0x6850, 0x8BCB},{0x6851, 0x8C4B},
- {0x6852, 0xEDC7},{0x6853, 0x8ABA},{0x6854, 0x8B6A},{0x6859, 0x9E82},{0x685C, 0x8DF7},{0x685D, 0x9691},{0x685F, 0x8E56},{0x6863, 0x9E83},
- {0x6867, 0x954F},{0x6874, 0x9E8F},{0x6876, 0x89B1},{0x6877, 0x9E84},{0x687E, 0x9E95},{0x687F, 0x9E85},{0x6881, 0x97C0},{0x6883, 0x9E8C},
- {0x6885, 0x947E},{0x688D, 0x9E94},{0x688F, 0x9E87},{0x6893, 0x88B2},{0x6894, 0x9E89},{0x6897, 0x8D5B},{0x689B, 0x9E8B},{0x689D, 0x9E8A},
- {0x689F, 0x9E86},{0x68A0, 0x9E91},{0x68A2, 0x8FBD},{0x68A6, 0x9AEB},{0x68A7, 0x8CE6},{0x68A8, 0x979C},{0x68AD, 0x9E88},{0x68AF, 0x92F2},
- {0x68B0, 0x8A42},{0x68B1, 0x8DAB},{0x68B3, 0x9E80},{0x68B5, 0x9E90},{0x68B6, 0x8A81},{0x68B9, 0x9E8E},{0x68BA, 0x9E92},{0x68BC, 0x938E},
- {0x68C4, 0x8AFC},{0x68C6, 0x9EB0},{0x68C8, 0xED48},{0x68C9, 0x96C7},{0x68CA, 0x9E97},{0x68CB, 0x8AFB},{0x68CD, 0x9E9E},{0x68CF, 0xEDCB},
- {0x68D2, 0x965F},{0x68D4, 0x9E9F},{0x68D5, 0x9EA1},{0x68D7, 0x9EA5},{0x68D8, 0x9E99},{0x68DA, 0x9249},{0x68DF, 0x938F},{0x68E0, 0x9EA9},
- {0x68E1, 0x9E9C},{0x68E3, 0x9EA6},{0x68E7, 0x9EA0},{0x68EE, 0x9058},{0x68EF, 0x9EAA},{0x68F2, 0x90B1},{0x68F9, 0x9EA8},{0x68FA, 0x8ABB},
- {0x6900, 0x986F},{0x6901, 0x9E96},{0x6904, 0x9EA4},{0x6905, 0x88D6},{0x6908, 0x9E98},{0x690B, 0x96B8},{0x690C, 0x9E9D},{0x690D, 0x9041},
- {0x690E, 0x92C5},{0x690F, 0x9E93},{0x6912, 0x9EA3},{0x6919, 0x909A},{0x691A, 0x9EAD},{0x691B, 0x8A91},{0x691C, 0x8C9F},{0x6921, 0x9EAF},
- {0x6922, 0x9E9A},{0x6923, 0x9EAE},{0x6925, 0x9EA7},{0x6926, 0x9E9B},{0x6928, 0x9EAB},{0x692A, 0x9EAC},{0x6930, 0x9EBD},{0x6934, 0x93CC},
- {0x6936, 0x9EA2},{0x6939, 0x9EB9},{0x693D, 0x9EBB},{0x693F, 0x92D6},{0x694A, 0x976B},{0x6953, 0x9596},{0x6954, 0x9EB6},{0x6955, 0x91C8},
- {0x6959, 0x9EBC},{0x695A, 0x915E},{0x695C, 0x9EB3},{0x695D, 0x9EC0},{0x695E, 0x9EBF},{0x6960, 0x93ED},{0x6961, 0x9EBE},{0x6962, 0x93E8},
- {0x6968, 0xEDCD},{0x696A, 0x9EC2},{0x696B, 0x9EB5},{0x696D, 0x8BC6},{0x696E, 0x9EB8},{0x696F, 0x8F7C},{0x6973, 0x9480},{0x6974, 0x9EBA},
- {0x6975, 0x8BC9},{0x6977, 0x9EB2},{0x6978, 0x9EB4},{0x6979, 0x9EB1},{0x697C, 0x984F},{0x697D, 0x8A79},{0x697E, 0x9EB7},{0x6981, 0x9EC1},
- {0x6982, 0x8A54},{0x698A, 0x8DE5},{0x698E, 0x897C},{0x6991, 0x9ED2},{0x6994, 0x9850},{0x6995, 0x9ED5},{0x6998, 0xEDCF},{0x699B, 0x9059},
- {0x699C, 0x9ED4},{0x69A0, 0x9ED3},{0x69A7, 0x9ED0},{0x69AE, 0x9EC4},{0x69B1, 0x9EE1},{0x69B2, 0x9EC3},{0x69B4, 0x9ED6},{0x69BB, 0x9ECE},
- {0x69BE, 0x9EC9},{0x69BF, 0x9EC6},{0x69C1, 0x9EC7},{0x69C3, 0x9ECF},{0x69C7, 0xEAA0},{0x69CA, 0x9ECC},{0x69CB, 0x8D5C},{0x69CC, 0x92C6},
- {0x69CD, 0x9184},{0x69CE, 0x9ECA},{0x69D0, 0x9EC5},{0x69D3, 0x9EC8},{0x69D8, 0x976C},{0x69D9, 0x968A},{0x69DD, 0x9ECD},{0x69DE, 0x9ED7},
- {0x69E2, 0xEDD0},{0x69E7, 0x9EDF},{0x69E8, 0x9ED8},{0x69EB, 0x9EE5},{0x69ED, 0x9EE3},{0x69F2, 0x9EDE},{0x69F9, 0x9EDD},{0x69FB, 0x92CE},
- {0x69FD, 0x9185},{0x69FF, 0x9EDB},{0x6A02, 0x9ED9},{0x6A05, 0x9EE0},{0x6A0A, 0x9EE6},{0x6A0B, 0x94F3},{0x6A0C, 0x9EEC},{0x6A12, 0x9EE7},
- {0x6A13, 0x9EEA},{0x6A14, 0x9EE4},{0x6A17, 0x9294},{0x6A19, 0x9557},{0x6A1B, 0x9EDA},{0x6A1E, 0x9EE2},{0x6A1F, 0x8FBE},{0x6A21, 0x96CD},
- {0x6A22, 0x9EF6},{0x6A23, 0x9EE9},{0x6A29, 0x8CA0},{0x6A2A, 0x89A1},{0x6A2B, 0x8A7E},{0x6A2E, 0x9ED1},{0x6A30, 0xEDD1},{0x6A35, 0x8FBF},
- {0x6A36, 0x9EEE},{0x6A38, 0x9EF5},{0x6A39, 0x8EF7},{0x6A3A, 0x8A92},{0x6A3D, 0x924D},{0x6A44, 0x9EEB},{0x6A46, 0xEDD3},{0x6A47, 0x9EF0},
- {0x6A48, 0x9EF4},{0x6A4B, 0x8BB4},{0x6A58, 0x8B6B},{0x6A59, 0x9EF2},{0x6A5F, 0x8B40},{0x6A61, 0x93C9},{0x6A62, 0x9EF1},{0x6A66, 0x9EF3},
- {0x6A6B, 0xEDD2},{0x6A72, 0x9EED},{0x6A73, 0xEDD4},{0x6A78, 0x9EEF},{0x6A7E, 0xEDD5},{0x6A7F, 0x8A80},{0x6A80, 0x9268},{0x6A84, 0x9EFA},
- {0x6A8D, 0x9EF8},{0x6A8E, 0x8CE7},{0x6A90, 0x9EF7},{0x6A97, 0x9F40},{0x6A9C, 0x9E77},{0x6AA0, 0x9EF9},{0x6AA2, 0x9EFB},{0x6AA3, 0x9EFC},
- {0x6AAA, 0x9F4B},{0x6AAC, 0x9F47},{0x6AAE, 0x9E8D},{0x6AB3, 0x9F46},{0x6AB8, 0x9F45},{0x6ABB, 0x9F42},{0x6AC1, 0x9EE8},{0x6AC2, 0x9F44},
- {0x6AC3, 0x9F43},{0x6AD1, 0x9F49},{0x6AD3, 0x9845},{0x6ADA, 0x9F4C},{0x6ADB, 0x8BF9},{0x6ADE, 0x9F48},{0x6ADF, 0x9F4A},{0x6AE2, 0xEDD6},
- {0x6AE4, 0xEDD7},{0x6AE8, 0x94A5},{0x6AEA, 0x9F4D},{0x6AFA, 0x9F51},{0x6AFB, 0x9F4E},{0x6B04, 0x9793},{0x6B05, 0x9F4F},{0x6B0A, 0x9EDC},
- {0x6B12, 0x9F52},{0x6B16, 0x9F53},{0x6B1D, 0x8954},{0x6B1F, 0x9F55},{0x6B20, 0x8C87},{0x6B21, 0x8E9F},{0x6B23, 0x8BD3},{0x6B27, 0x89A2},
- {0x6B32, 0x977E},{0x6B37, 0x9F57},{0x6B38, 0x9F56},{0x6B39, 0x9F59},{0x6B3A, 0x8B5C},{0x6B3D, 0x8BD4},{0x6B3E, 0x8ABC},{0x6B43, 0x9F5C},
- {0x6B47, 0x9F5B},{0x6B49, 0x9F5D},{0x6B4C, 0x89CC},{0x6B4E, 0x9256},{0x6B50, 0x9F5E},{0x6B53, 0x8ABD},{0x6B54, 0x9F60},{0x6B59, 0x9F5F},
- {0x6B5B, 0x9F61},{0x6B5F, 0x9F62},{0x6B61, 0x9F63},{0x6B62, 0x8E7E},{0x6B63, 0x90B3},{0x6B64, 0x8D9F},{0x6B66, 0x9590},{0x6B69, 0x95E0},
- {0x6B6A, 0x9863},{0x6B6F, 0x8E95},{0x6B73, 0x8DCE},{0x6B74, 0x97F0},{0x6B78, 0x9F64},{0x6B79, 0x9F65},{0x6B7B, 0x8E80},{0x6B7F, 0x9F66},
- {0x6B80, 0x9F67},{0x6B83, 0x9F69},{0x6B84, 0x9F68},{0x6B86, 0x9677},{0x6B89, 0x8F7D},{0x6B8A, 0x8EEA},{0x6B8B, 0x8E63},{0x6B8D, 0x9F6A},
- {0x6B95, 0x9F6C},{0x6B96, 0x9042},{0x6B98, 0x9F6B},{0x6B9E, 0x9F6D},{0x6BA4, 0x9F6E},{0x6BAA, 0x9F6F},{0x6BAB, 0x9F70},{0x6BAF, 0x9F71},
- {0x6BB1, 0x9F73},{0x6BB2, 0x9F72},{0x6BB3, 0x9F74},{0x6BB4, 0x89A3},{0x6BB5, 0x9269},{0x6BB7, 0x9F75},{0x6BBA, 0x8E45},{0x6BBB, 0x8A6B},
- {0x6BBC, 0x9F76},{0x6BBF, 0x9361},{0x6BC0, 0x9ACA},{0x6BC5, 0x8B42},{0x6BC6, 0x9F77},{0x6BCB, 0x9F78},{0x6BCD, 0x95EA},{0x6BCE, 0x9688},
- {0x6BD2, 0x93C5},{0x6BD3, 0x9F79},{0x6BD4, 0x94E4},{0x6BD6, 0xEDD8},{0x6BD8, 0x94F9},{0x6BDB, 0x96D1},{0x6BDF, 0x9F7A},{0x6BEB, 0x9F7C},
- {0x6BEC, 0x9F7B},{0x6BEF, 0x9F7E},{0x6BF3, 0x9F7D},{0x6C08, 0x9F81},{0x6C0F, 0x8E81},{0x6C11, 0x96AF},{0x6C13, 0x9F82},{0x6C14, 0x9F83},
- {0x6C17, 0x8B43},{0x6C1B, 0x9F84},{0x6C23, 0x9F86},{0x6C24, 0x9F85},{0x6C34, 0x9085},{0x6C37, 0x9558},{0x6C38, 0x8969},{0x6C3E, 0x94C3},
- {0x6C3F, 0xEDD9},{0x6C40, 0x92F3},{0x6C41, 0x8F60},{0x6C42, 0x8B81},{0x6C4E, 0x94C4},{0x6C50, 0x8EAC},{0x6C55, 0x9F88},{0x6C57, 0x8ABE},
- {0x6C5A, 0x8998},{0x6C5C, 0xEDDA},{0x6C5D, 0x93F0},{0x6C5E, 0x9F87},{0x6C5F, 0x8D5D},{0x6C60, 0x9272},{0x6C62, 0x9F89},{0x6C68, 0x9F91},
- {0x6C6A, 0x9F8A},{0x6C6F, 0xEDDC},{0x6C70, 0x91BF},{0x6C72, 0x8B82},{0x6C73, 0x9F92},{0x6C7A, 0x8C88},{0x6C7D, 0x8B44},{0x6C7E, 0x9F90},
- {0x6C81, 0x9F8E},{0x6C82, 0x9F8B},{0x6C83, 0x9780},{0x6C86, 0xEDDB},{0x6C88, 0x92BE},{0x6C8C, 0x93D7},{0x6C8D, 0x9F8C},{0x6C90, 0x9F94},
- {0x6C92, 0x9F93},{0x6C93, 0x8C42},{0x6C96, 0x89AB},{0x6C99, 0x8DB9},{0x6C9A, 0x9F8D},{0x6C9B, 0x9F8F},{0x6CA1, 0x9676},{0x6CA2, 0x91F2},
- {0x6CAB, 0x9697},{0x6CAE, 0x9F9C},{0x6CB1, 0x9F9D},{0x6CB3, 0x89CD},{0x6CB8, 0x95A6},{0x6CB9, 0x96FB},{0x6CBA, 0x9F9F},{0x6CBB, 0x8EA1},
- {0x6CBC, 0x8FC0},{0x6CBD, 0x9F98},{0x6CBE, 0x9F9E},{0x6CBF, 0x8988},{0x6CC1, 0x8BB5},{0x6CC4, 0x9F95},{0x6CC5, 0x9F9A},{0x6CC9, 0x90F2},
- {0x6CCA, 0x9491},{0x6CCC, 0x94E5},{0x6CD3, 0x9F97},{0x6CD5, 0x9640},{0x6CD7, 0x9F99},{0x6CD9, 0x9FA2},{0x6CDA, 0xEDDD},{0x6CDB, 0x9FA0},
- {0x6CDD, 0x9F9B},{0x6CE1, 0x9641},{0x6CE2, 0x9467},{0x6CE3, 0x8B83},{0x6CE5, 0x9344},{0x6CE8, 0x928D},{0x6CEA, 0x9FA3},{0x6CEF, 0x9FA1},
- {0x6CF0, 0x91D7},{0x6CF1, 0x9F96},{0x6CF3, 0x896A},{0x6D04, 0xEDDE},{0x6D0B, 0x976D},{0x6D0C, 0x9FAE},{0x6D12, 0x9FAD},{0x6D17, 0x90F4},
- {0x6D19, 0x9FAA},{0x6D1B, 0x978C},{0x6D1E, 0x93B4},{0x6D1F, 0x9FA4},{0x6D25, 0x92C3},{0x6D29, 0x896B},{0x6D2A, 0x8D5E},{0x6D2B, 0x9FA7},
- {0x6D32, 0x8F46},{0x6D33, 0x9FAC},{0x6D35, 0x9FAB},{0x6D36, 0x9FA6},{0x6D38, 0x9FA9},{0x6D3B, 0x8A88},{0x6D3D, 0x9FA8},{0x6D3E, 0x9468},
- {0x6D41, 0x97AC},{0x6D44, 0x8FF2},{0x6D45, 0x90F3},{0x6D59, 0x9FB4},{0x6D5A, 0x9FB2},{0x6D5C, 0x956C},{0x6D63, 0x9FAF},{0x6D64, 0x9FB1},
- {0x6D66, 0x8959},{0x6D69, 0x8D5F},{0x6D6A, 0x9851},{0x6D6C, 0x8A5C},{0x6D6E, 0x9582},{0x6D6F, 0xEDE0},{0x6D74, 0x9781},{0x6D77, 0x8A43},
- {0x6D78, 0x905A},{0x6D79, 0x9FB3},{0x6D85, 0x9FB8},{0x6D87, 0xEDDF},{0x6D88, 0x8FC1},{0x6D8C, 0x974F},{0x6D8E, 0x9FB5},{0x6D93, 0x9FB0},
- {0x6D95, 0x9FB6},{0x6D96, 0xEDE1},{0x6D99, 0x97DC},{0x6D9B, 0x9393},{0x6D9C, 0x93C0},{0x6DAC, 0xEDE2},{0x6DAF, 0x8A55},{0x6DB2, 0x8974},
- {0x6DB5, 0x9FBC},{0x6DB8, 0x9FBF},{0x6DBC, 0x97C1},{0x6DC0, 0x9784},{0x6DC5, 0x9FC6},{0x6DC6, 0x9FC0},{0x6DC7, 0x9FBD},{0x6DCB, 0x97D2},
- {0x6DCC, 0x9FC3},{0x6DCF, 0xEDE3},{0x6DD1, 0x8F69},{0x6DD2, 0x9FC5},{0x6DD5, 0x9FCA},{0x6DD8, 0x9391},{0x6DD9, 0x9FC8},{0x6DDE, 0x9FC2},
- {0x6DE1, 0x9257},{0x6DE4, 0x9FC9},{0x6DE6, 0x9FBE},{0x6DE8, 0x9FC4},{0x6DEA, 0x9FCB},{0x6DEB, 0x88FA},{0x6DEC, 0x9FC1},{0x6DEE, 0x9FCC},
- {0x6DF1, 0x905B},{0x6DF2, 0xEDE5},{0x6DF3, 0x8F7E},{0x6DF5, 0x95A3},{0x6DF7, 0x8DAC},{0x6DF8, 0xEDE4},{0x6DF9, 0x9FB9},{0x6DFA, 0x9FC7},
- {0x6DFB, 0x9359},{0x6DFC, 0xEDE6},{0x6E05, 0x90B4},{0x6E07, 0x8A89},{0x6E08, 0x8DCF},{0x6E09, 0x8FC2},{0x6E0A, 0x9FBB},{0x6E0B, 0x8F61},
- {0x6E13, 0x8C6B},{0x6E15, 0x9FBA},{0x6E19, 0x9FD0},{0x6E1A, 0x8F8D},{0x6E1B, 0x8CB8},{0x6E1D, 0x9FDF},{0x6E1F, 0x9FD9},{0x6E20, 0x8B94},
- {0x6E21, 0x936E},{0x6E23, 0x9FD4},{0x6E24, 0x9FDD},{0x6E25, 0x88AD},{0x6E26, 0x8951},{0x6E27, 0xEDE9},{0x6E29, 0x89B7},{0x6E2B, 0x9FD6},
- {0x6E2C, 0x91AA},{0x6E2D, 0x9FCD},{0x6E2E, 0x9FCF},{0x6E2F, 0x8D60},{0x6E38, 0x9FE0},{0x6E39, 0xEDE7},{0x6E3A, 0x9FDB},{0x6E3C, 0xEDEA},
- {0x6E3E, 0x9FD3},{0x6E43, 0x9FDA},{0x6E4A, 0x96A9},{0x6E4D, 0x9FD8},{0x6E4E, 0x9FDC},{0x6E56, 0x8CCE},{0x6E58, 0x8FC3},{0x6E5B, 0x9258},
- {0x6E5C, 0xEDE8},{0x6E5F, 0x9FD2},{0x6E67, 0x974E},{0x6E6B, 0x9FD5},{0x6E6E, 0x9FCE},{0x6E6F, 0x9392},{0x6E72, 0x9FD1},{0x6E76, 0x9FD7},
- {0x6E7E, 0x9870},{0x6E7F, 0x8EBC},{0x6E80, 0x969E},{0x6E82, 0x9FE1},{0x6E8C, 0x94AC},{0x6E8F, 0x9FED},{0x6E90, 0x8CB9},{0x6E96, 0x8F80},
- {0x6E98, 0x9FE3},{0x6E9C, 0x97AD},{0x6E9D, 0x8D61},{0x6E9F, 0x9FF0},{0x6EA2, 0x88EC},{0x6EA5, 0x9FEE},{0x6EAA, 0x9FE2},{0x6EAF, 0x9FE8},
- {0x6EB2, 0x9FEA},{0x6EB6, 0x976E},{0x6EB7, 0x9FE5},{0x6EBA, 0x934D},{0x6EBD, 0x9FE7},{0x6EBF, 0xEDEB},{0x6EC2, 0x9FEF},{0x6EC4, 0x9FE9},
- {0x6EC5, 0x96C5},{0x6EC9, 0x9FE4},{0x6ECB, 0x8EA0},{0x6ECC, 0x9FFC},{0x6ED1, 0x8A8A},{0x6ED3, 0x9FE6},{0x6ED4, 0x9FEB},{0x6ED5, 0x9FEC},
- {0x6EDD, 0x91EA},{0x6EDE, 0x91D8},{0x6EEC, 0x9FF4},{0x6EEF, 0x9FFA},{0x6EF2, 0x9FF8},{0x6EF4, 0x9348},{0x6EF7, 0xE042},{0x6EF8, 0x9FF5},
- {0x6EFE, 0x9FF6},{0x6EFF, 0x9FDE},{0x6F01, 0x8B99},{0x6F02, 0x9559},{0x6F06, 0x8EBD},{0x6F09, 0x8D97},{0x6F0F, 0x9852},{0x6F11, 0x9FF2},
- {0x6F13, 0xE041},{0x6F14, 0x8989},{0x6F15, 0x9186},{0x6F20, 0x9499},{0x6F22, 0x8ABF},{0x6F23, 0x97F8},{0x6F2B, 0x969F},{0x6F2C, 0x92D0},
- {0x6F31, 0x9FF9},{0x6F32, 0x9FFB},{0x6F38, 0x9151},{0x6F3E, 0xE040},{0x6F3F, 0x9FF7},{0x6F41, 0x9FF1},{0x6F45, 0x8AC1},{0x6F54, 0x8C89},
- {0x6F58, 0xE04E},{0x6F5B, 0xE049},{0x6F5C, 0x90F6},{0x6F5F, 0x8A83},{0x6F64, 0x8F81},{0x6F66, 0xE052},{0x6F6D, 0xE04B},{0x6F6E, 0x92AA},
- {0x6F6F, 0xE048},{0x6F70, 0x92D7},{0x6F74, 0xE06B},{0x6F78, 0xE045},{0x6F7A, 0xE044},{0x6F7C, 0xE04D},{0x6F80, 0xE047},{0x6F81, 0xE046},
- {0x6F82, 0xE04C},{0x6F84, 0x909F},{0x6F86, 0xE043},{0x6F88, 0xEDEC},{0x6F8E, 0xE04F},{0x6F91, 0xE050},{0x6F97, 0x8AC0},{0x6FA1, 0xE055},
- {0x6FA3, 0xE054},{0x6FA4, 0xE056},{0x6FAA, 0xE059},{0x6FB1, 0x9362},{0x6FB3, 0xE053},{0x6FB5, 0xEDED},{0x6FB9, 0xE057},{0x6FC0, 0x8C83},
- {0x6FC1, 0x91F7},{0x6FC2, 0xE051},{0x6FC3, 0x945A},{0x6FC6, 0xE058},{0x6FD4, 0xE05D},{0x6FD5, 0xE05B},{0x6FD8, 0xE05E},{0x6FDB, 0xE061},
- {0x6FDF, 0xE05A},{0x6FE0, 0x8D8A},{0x6FE1, 0x9447},{0x6FE4, 0x9FB7},{0x6FEB, 0x9794},{0x6FEC, 0xE05C},{0x6FEE, 0xE060},{0x6FEF, 0x91F3},
- {0x6FF1, 0xE05F},{0x6FF3, 0xE04A},{0x6FF5, 0xEDEE},{0x6FF6, 0xE889},{0x6FFA, 0xE064},{0x6FFE, 0xE068},{0x7001, 0xE066},{0x7005, 0xEDEF},
- {0x7007, 0xEDF0},{0x7009, 0xE062},{0x700B, 0xE063},{0x700F, 0xE067},{0x7011, 0xE065},{0x7015, 0x956D},{0x7018, 0xE06D},{0x701A, 0xE06A},
- {0x701B, 0xE069},{0x701D, 0xE06C},{0x701E, 0x93D2},{0x701F, 0xE06E},{0x7026, 0x9295},{0x7027, 0x91EB},{0x7028, 0xEDF1},{0x702C, 0x90A3},
- {0x7030, 0xE06F},{0x7032, 0xE071},{0x703E, 0xE070},{0x704C, 0x9FF3},{0x7051, 0xE072},{0x7058, 0x93E5},{0x7063, 0xE073},{0x706B, 0x89CE},
- {0x706F, 0x9394},{0x7070, 0x8A44},{0x7078, 0x8B84},{0x707C, 0x8EDC},{0x707D, 0x8DD0},{0x7085, 0xEDF2},{0x7089, 0x9846},{0x708A, 0x9086},
- {0x708E, 0x898A},{0x7092, 0xE075},{0x7099, 0xE074},{0x70AB, 0xEDF3},{0x70AC, 0xE078},{0x70AD, 0x9259},{0x70AE, 0xE07B},{0x70AF, 0xE076},
- {0x70B3, 0xE07A},{0x70B8, 0xE079},{0x70B9, 0x935F},{0x70BA, 0x88D7},{0x70BB, 0xED46},{0x70C8, 0x97F3},{0x70CB, 0xE07D},{0x70CF, 0x8947},
- {0x70D9, 0xE080},{0x70DD, 0xE07E},{0x70DF, 0xE07C},{0x70F1, 0xE077},{0x70F9, 0x9642},{0x70FD, 0xE082},{0x7104, 0xEDF5},{0x7109, 0xE081},
- {0x710F, 0xEDF4},{0x7114, 0x898B},{0x7119, 0xE084},{0x711A, 0x95B0},{0x711C, 0xE083},{0x7121, 0x96B3},{0x7126, 0x8FC5},{0x7136, 0x9152},
- {0x713C, 0x8FC4},{0x7146, 0xEDF7},{0x7147, 0xEDF8},{0x7149, 0x97F9},{0x714C, 0xE08A},{0x714E, 0x90F7},{0x7155, 0xE086},{0x7156, 0xE08B},
- {0x7159, 0x898C},{0x715C, 0xEDF6},{0x7162, 0xE089},{0x7164, 0x9481},{0x7165, 0xE085},{0x7166, 0xE088},{0x7167, 0x8FC6},{0x7169, 0x94CF},
- {0x716C, 0xE08C},{0x716E, 0x8ECF},{0x717D, 0x90F8},{0x7184, 0xE08F},{0x7188, 0xE087},{0x718A, 0x8C46},{0x718F, 0xE08D},{0x7194, 0x976F},
- {0x7195, 0xE090},{0x7199, 0xEAA4},{0x719F, 0x8F6E},{0x71A8, 0xE091},{0x71AC, 0xE092},{0x71B1, 0x944D},{0x71B9, 0xE094},{0x71BE, 0xE095},
- {0x71C1, 0xEDFA},{0x71C3, 0x9452},{0x71C8, 0x9395},{0x71C9, 0xE097},{0x71CE, 0xE099},{0x71D0, 0x97D3},{0x71D2, 0xE096},{0x71D4, 0xE098},
- {0x71D5, 0x898D},{0x71D7, 0xE093},{0x71DF, 0x9A7A},{0x71E0, 0xE09A},{0x71E5, 0x9187},{0x71E6, 0x8E57},{0x71E7, 0xE09C},{0x71EC, 0xE09B},
- {0x71ED, 0x9043},{0x71EE, 0x99D7},{0x71F5, 0xE09D},{0x71F9, 0xE09F},{0x71FB, 0xE08E},{0x71FC, 0xE09E},{0x71FE, 0xEDFB},{0x71FF, 0xE0A0},
- {0x7206, 0x949A},{0x720D, 0xE0A1},{0x7210, 0xE0A2},{0x721B, 0xE0A3},{0x7228, 0xE0A4},{0x722A, 0x92DC},{0x722C, 0xE0A6},{0x722D, 0xE0A5},
- {0x7230, 0xE0A7},{0x7232, 0xE0A8},{0x7235, 0x8EDD},{0x7236, 0x9583},{0x723A, 0x96EA},{0x723B, 0xE0A9},{0x723C, 0xE0AA},{0x723D, 0x9175},
- {0x723E, 0x8EA2},{0x723F, 0xE0AB},{0x7240, 0xE0AC},{0x7246, 0xE0AD},{0x7247, 0x95D0},{0x7248, 0x94C5},{0x724B, 0xE0AE},{0x724C, 0x9476},
- {0x7252, 0x92AB},{0x7258, 0xE0AF},{0x7259, 0x89E5},{0x725B, 0x8B8D},{0x725D, 0x96C4},{0x725F, 0x96B4},{0x7261, 0x89B2},{0x7262, 0x9853},
- {0x7267, 0x9671},{0x7269, 0x95A8},{0x7272, 0x90B5},{0x7274, 0xE0B0},{0x7279, 0x93C1},{0x727D, 0x8CA1},{0x727E, 0xE0B1},{0x7280, 0x8DD2},
- {0x7281, 0xE0B3},{0x7282, 0xE0B2},{0x7287, 0xE0B4},{0x7292, 0xE0B5},{0x7296, 0xE0B6},{0x72A0, 0x8B5D},{0x72A2, 0xE0B7},{0x72A7, 0xE0B8},
- {0x72AC, 0x8CA2},{0x72AF, 0x94C6},{0x72B1, 0xEDFC},{0x72B2, 0xE0BA},{0x72B6, 0x8FF3},{0x72B9, 0xE0B9},{0x72BE, 0xEE40},{0x72C2, 0x8BB6},
- {0x72C3, 0xE0BB},{0x72C4, 0xE0BD},{0x72C6, 0xE0BC},{0x72CE, 0xE0BE},{0x72D0, 0x8CCF},{0x72D2, 0xE0BF},{0x72D7, 0x8BE7},{0x72D9, 0x915F},
- {0x72DB, 0x8D9D},{0x72E0, 0xE0C1},{0x72E1, 0xE0C2},{0x72E2, 0xE0C0},{0x72E9, 0x8EEB},{0x72EC, 0x93C6},{0x72ED, 0x8BB7},{0x72F7, 0xE0C4},
- {0x72F8, 0x924B},{0x72F9, 0xE0C3},{0x72FC, 0x9854},{0x72FD, 0x9482},{0x730A, 0xE0C7},{0x7316, 0xE0C9},{0x7317, 0xE0C6},{0x731B, 0x96D2},
- {0x731C, 0xE0C8},{0x731D, 0xE0CA},{0x731F, 0x97C2},{0x7324, 0xEE41},{0x7325, 0xE0CE},{0x7329, 0xE0CD},{0x732A, 0x9296},{0x732B, 0x944C},
- {0x732E, 0x8CA3},{0x732F, 0xE0CC},{0x7334, 0xE0CB},{0x7336, 0x9750},{0x7337, 0x9751},{0x733E, 0xE0CF},{0x733F, 0x898E},{0x7344, 0x8D96},
- {0x7345, 0x8E82},{0x734E, 0xE0D0},{0x734F, 0xE0D1},{0x7357, 0xE0D3},{0x7363, 0x8F62},{0x7368, 0xE0D5},{0x736A, 0xE0D4},{0x7370, 0xE0D6},
- {0x7372, 0x8A6C},{0x7375, 0xE0D8},{0x7377, 0xEE43},{0x7378, 0xE0D7},{0x737A, 0xE0DA},{0x737B, 0xE0D9},{0x7384, 0x8CBA},{0x7387, 0x97A6},
- {0x7389, 0x8BCA},{0x738B, 0x89A4},{0x7396, 0x8BE8},{0x73A9, 0x8ADF},{0x73B2, 0x97E6},{0x73B3, 0xE0DC},{0x73BB, 0xE0DE},{0x73BD, 0xEE44},
- {0x73C0, 0xE0DF},{0x73C2, 0x89CF},{0x73C8, 0xE0DB},{0x73C9, 0xEE45},{0x73CA, 0x8E58},{0x73CD, 0x92BF},{0x73CE, 0xE0DD},{0x73D2, 0xEE48},
- {0x73D6, 0xEE46},{0x73DE, 0xE0E2},{0x73E0, 0x8EEC},{0x73E3, 0xEE47},{0x73E5, 0xE0E0},{0x73EA, 0x8C5D},{0x73ED, 0x94C7},{0x73EE, 0xE0E1},
- {0x73F1, 0xE0FC},{0x73F5, 0xEE4A},{0x73F8, 0xE0E7},{0x73FE, 0x8CBB},{0x7403, 0x8B85},{0x7405, 0xE0E4},{0x7406, 0x979D},{0x7407, 0xEE49},
- {0x7409, 0x97AE},{0x7422, 0x91F4},{0x7425, 0xE0E6},{0x7426, 0xEE4B},{0x7429, 0xEE4D},{0x742A, 0xEE4C},{0x742E, 0xEE4E},{0x7432, 0xE0E8},
- {0x7433, 0x97D4},{0x7434, 0x8BD5},{0x7435, 0x94FA},{0x7436, 0x9469},{0x743A, 0xE0E9},{0x743F, 0xE0EB},{0x7441, 0xE0EE},{0x7455, 0xE0EA},
- {0x7459, 0xE0ED},{0x745A, 0x8CE8},{0x745B, 0x896C},{0x745C, 0xE0EF},{0x745E, 0x9090},{0x745F, 0xE0EC},{0x7460, 0x97DA},{0x7462, 0xEE4F},
- {0x7463, 0xE0F2},{0x7464, 0xEAA2},{0x7469, 0xE0F0},{0x746A, 0xE0F3},{0x746F, 0xE0E5},{0x7470, 0xE0F1},{0x7473, 0x8DBA},{0x7476, 0xE0F4},
- {0x747E, 0xE0F5},{0x7483, 0x979E},{0x7489, 0xEE50},{0x748B, 0xE0F6},{0x749E, 0xE0F7},{0x749F, 0xEE51},{0x74A2, 0xE0E3},{0x74A7, 0xE0F8},
- {0x74B0, 0x8AC2},{0x74BD, 0x8EA3},{0x74CA, 0xE0F9},{0x74CF, 0xE0FA},{0x74D4, 0xE0FB},{0x74DC, 0x895A},{0x74E0, 0xE140},{0x74E2, 0x955A},
- {0x74E3, 0xE141},{0x74E6, 0x8AA2},{0x74E7, 0xE142},{0x74E9, 0xE143},{0x74EE, 0xE144},{0x74F0, 0xE146},{0x74F1, 0xE147},{0x74F2, 0xE145},
- {0x74F6, 0x9572},{0x74F7, 0xE149},{0x74F8, 0xE148},{0x7501, 0xEE52},{0x7503, 0xE14B},{0x7504, 0xE14A},{0x7505, 0xE14C},{0x750C, 0xE14D},
- {0x750D, 0xE14F},{0x750E, 0xE14E},{0x7511, 0x8D99},{0x7513, 0xE151},{0x7515, 0xE150},{0x7518, 0x8AC3},{0x751A, 0x9072},{0x751C, 0x935B},
- {0x751E, 0xE152},{0x751F, 0x90B6},{0x7523, 0x8E59},{0x7525, 0x8999},{0x7526, 0xE153},{0x7528, 0x9770},{0x752B, 0x95E1},{0x752C, 0xE154},
- {0x752F, 0xED8C},{0x7530, 0x9363},{0x7531, 0x9752},{0x7532, 0x8D62},{0x7533, 0x905C},{0x7537, 0x926A},{0x7538, 0x99B2},{0x753A, 0x92AC},
- {0x753B, 0x89E6},{0x753C, 0xE155},{0x7544, 0xE156},{0x7546, 0xE15B},{0x7549, 0xE159},{0x754A, 0xE158},{0x754B, 0x9DC0},{0x754C, 0x8A45},
- {0x754D, 0xE157},{0x754F, 0x88D8},{0x7551, 0x94A8},{0x7554, 0x94C8},{0x7559, 0x97AF},{0x755A, 0xE15C},{0x755B, 0xE15A},{0x755C, 0x927B},
- {0x755D, 0x90A4},{0x7560, 0x94A9},{0x7562, 0x954C},{0x7564, 0xE15E},{0x7565, 0x97AA},{0x7566, 0x8C6C},{0x7567, 0xE15F},{0x7569, 0xE15D},
- {0x756A, 0x94D4},{0x756B, 0xE160},{0x756D, 0xE161},{0x756F, 0xEE53},{0x7570, 0x88D9},{0x7573, 0x8FF4},{0x7574, 0xE166},{0x7576, 0xE163},
- {0x7577, 0x93EB},{0x7578, 0xE162},{0x757F, 0x8B45},{0x7582, 0xE169},{0x7586, 0xE164},{0x7587, 0xE165},{0x7589, 0xE168},{0x758A, 0xE167},
- {0x758B, 0x9544},{0x758E, 0x9161},{0x758F, 0x9160},{0x7591, 0x8B5E},{0x7594, 0xE16A},{0x759A, 0xE16B},{0x759D, 0xE16C},{0x75A3, 0xE16E},
- {0x75A5, 0xE16D},{0x75AB, 0x8975},{0x75B1, 0xE176},{0x75B2, 0x94E6},{0x75B3, 0xE170},{0x75B5, 0xE172},{0x75B8, 0xE174},{0x75B9, 0x905D},
- {0x75BC, 0xE175},{0x75BD, 0xE173},{0x75BE, 0x8EBE},{0x75C2, 0xE16F},{0x75C3, 0xE171},{0x75C5, 0x9561},{0x75C7, 0x8FC7},{0x75CA, 0xE178},
- {0x75CD, 0xE177},{0x75D2, 0xE179},{0x75D4, 0x8EA4},{0x75D5, 0x8DAD},{0x75D8, 0x9397},{0x75D9, 0xE17A},{0x75DB, 0x92C9},{0x75DE, 0xE17C},
- {0x75E2, 0x979F},{0x75E3, 0xE17B},{0x75E9, 0x9189},{0x75F0, 0xE182},{0x75F2, 0xE184},{0x75F3, 0xE185},{0x75F4, 0x9273},{0x75FA, 0xE183},
- {0x75FC, 0xE180},{0x75FE, 0xE17D},{0x75FF, 0xE17E},{0x7601, 0xE181},{0x7609, 0xE188},{0x760B, 0xE186},{0x760D, 0xE187},{0x761F, 0xE189},
- {0x7620, 0xE18B},{0x7621, 0xE18C},{0x7622, 0xE18D},{0x7624, 0xE18E},{0x7627, 0xE18A},{0x7630, 0xE190},{0x7634, 0xE18F},{0x763B, 0xE191},
- {0x7642, 0x97C3},{0x7646, 0xE194},{0x7647, 0xE192},{0x7648, 0xE193},{0x764C, 0x8AE0},{0x7652, 0x96FC},{0x7656, 0x95C8},{0x7658, 0xE196},
- {0x765C, 0xE195},{0x7661, 0xE197},{0x7662, 0xE198},{0x7667, 0xE19C},{0x7668, 0xE199},{0x7669, 0xE19A},{0x766A, 0xE19B},{0x766C, 0xE19D},
- {0x7670, 0xE19E},{0x7672, 0xE19F},{0x7676, 0xE1A0},{0x7678, 0xE1A1},{0x767A, 0x94AD},{0x767B, 0x936F},{0x767C, 0xE1A2},{0x767D, 0x9492},
- {0x767E, 0x9553},{0x7680, 0xE1A3},{0x7682, 0xEE54},{0x7683, 0xE1A4},{0x7684, 0x9349},{0x7686, 0x8A46},{0x7687, 0x8D63},{0x7688, 0xE1A5},
- {0x768B, 0xE1A6},{0x768E, 0xE1A7},{0x7690, 0x8E48},{0x7693, 0xE1A9},{0x7696, 0xE1A8},{0x7699, 0xE1AA},{0x769A, 0xE1AB},{0x769B, 0xEE57},
- {0x769C, 0xEE55},{0x769E, 0xEE56},{0x76A6, 0xEE58},{0x76AE, 0x94E7},{0x76B0, 0xE1AC},{0x76B4, 0xE1AD},{0x76B7, 0xEA89},{0x76B8, 0xE1AE},
- {0x76B9, 0xE1AF},{0x76BA, 0xE1B0},{0x76BF, 0x8E4D},{0x76C2, 0xE1B1},{0x76C3, 0x9475},{0x76C6, 0x967E},{0x76C8, 0x896D},{0x76CA, 0x8976},
- {0x76CD, 0xE1B2},{0x76D2, 0xE1B4},{0x76D6, 0xE1B3},{0x76D7, 0x9390},{0x76DB, 0x90B7},{0x76DC, 0x9F58},{0x76DE, 0xE1B5},{0x76DF, 0x96BF},
- {0x76E1, 0xE1B6},{0x76E3, 0x8AC4},{0x76E4, 0x94D5},{0x76E5, 0xE1B7},{0x76E7, 0xE1B8},{0x76EA, 0xE1B9},{0x76EE, 0x96DA},{0x76F2, 0x96D3},
- {0x76F4, 0x92BC},{0x76F8, 0x918A},{0x76FB, 0xE1BB},{0x76FE, 0x8F82},{0x7701, 0x8FC8},{0x7704, 0xE1BE},{0x7707, 0xE1BD},{0x7708, 0xE1BC},
- {0x7709, 0x94FB},{0x770B, 0x8AC5},{0x770C, 0x8CA7},{0x771B, 0xE1C4},{0x771E, 0xE1C1},{0x771F, 0x905E},{0x7720, 0x96B0},{0x7724, 0xE1C0},
- {0x7725, 0xE1C2},{0x7726, 0xE1C3},{0x7729, 0xE1BF},{0x7737, 0xE1C5},{0x7738, 0xE1C6},{0x773A, 0x92AD},{0x773C, 0x8AE1},{0x7740, 0x9285},
- {0x7746, 0xEE5A},{0x7747, 0xE1C7},{0x775A, 0xE1C8},{0x775B, 0xE1CB},{0x7761, 0x9087},{0x7763, 0x93C2},{0x7765, 0xE1CC},{0x7766, 0x9672},
- {0x7768, 0xE1C9},{0x776B, 0xE1CA},{0x7779, 0xE1CF},{0x777E, 0xE1CE},{0x777F, 0xE1CD},{0x778B, 0xE1D1},{0x778E, 0xE1D0},{0x7791, 0xE1D2},
- {0x779E, 0xE1D4},{0x77A0, 0xE1D3},{0x77A5, 0x95CB},{0x77AC, 0x8F75},{0x77AD, 0x97C4},{0x77B0, 0xE1D5},{0x77B3, 0x93B5},{0x77B6, 0xE1D6},
- {0x77B9, 0xE1D7},{0x77BB, 0xE1DB},{0x77BC, 0xE1D9},{0x77BD, 0xE1DA},{0x77BF, 0xE1D8},{0x77C7, 0xE1DC},{0x77CD, 0xE1DD},{0x77D7, 0xE1DE},
- {0x77DA, 0xE1DF},{0x77DB, 0x96B5},{0x77DC, 0xE1E0},{0x77E2, 0x96EE},{0x77E3, 0xE1E1},{0x77E5, 0x926D},{0x77E7, 0x948A},{0x77E9, 0x8BE9},
- {0x77ED, 0x925A},{0x77EE, 0xE1E2},{0x77EF, 0x8BB8},{0x77F3, 0x90CE},{0x77FC, 0xE1E3},{0x7802, 0x8DBB},{0x780C, 0xE1E4},{0x7812, 0xE1E5},
- {0x7814, 0x8CA4},{0x7815, 0x8DD3},{0x7820, 0xE1E7},{0x7821, 0xEE5C},{0x7825, 0x9375},{0x7826, 0x8DD4},{0x7827, 0x8B6D},{0x7832, 0x9643},
- {0x7834, 0x946A},{0x783A, 0x9376},{0x783F, 0x8D7B},{0x7845, 0xE1E9},{0x784E, 0xEE5D},{0x785D, 0x8FC9},{0x7864, 0xEE5E},{0x786B, 0x97B0},
- {0x786C, 0x8D64},{0x786F, 0x8CA5},{0x7872, 0x94A1},{0x7874, 0xE1EB},{0x787A, 0xEE5F},{0x787C, 0xE1ED},{0x7881, 0x8CE9},{0x7886, 0xE1EC},
- {0x7887, 0x92F4},{0x788C, 0xE1EF},{0x788D, 0x8A56},{0x788E, 0xE1EA},{0x7891, 0x94E8},{0x7893, 0x894F},{0x7895, 0x8DEA},{0x7897, 0x9871},
- {0x789A, 0xE1EE},{0x78A3, 0xE1F0},{0x78A7, 0x95C9},{0x78A9, 0x90D7},{0x78AA, 0xE1F2},{0x78AF, 0xE1F3},{0x78B5, 0xE1F1},{0x78BA, 0x8A6D},
- {0x78BC, 0xE1F9},{0x78BE, 0xE1F8},{0x78C1, 0x8EA5},{0x78C5, 0xE1FA},{0x78C6, 0xE1F5},{0x78CA, 0xE1FB},{0x78CB, 0xE1F6},{0x78D0, 0x94D6},
- {0x78D1, 0xE1F4},{0x78D4, 0xE1F7},{0x78DA, 0xE241},{0x78E7, 0xE240},{0x78E8, 0x9681},{0x78EC, 0xE1FC},{0x78EF, 0x88E9},{0x78F4, 0xE243},
- {0x78FD, 0xE242},{0x7901, 0x8FCA},{0x7907, 0xE244},{0x790E, 0x9162},{0x7911, 0xE246},{0x7912, 0xE245},{0x7919, 0xE247},{0x7926, 0xE1E6},
- {0x792A, 0xE1E8},{0x792B, 0xE249},{0x792C, 0xE248},{0x7930, 0xEE60},{0x793A, 0x8EA6},{0x793C, 0x97E7},{0x793E, 0x8ED0},{0x7940, 0xE24A},
- {0x7941, 0x8C56},{0x7947, 0x8B5F},{0x7948, 0x8B46},{0x7949, 0x8E83},{0x7950, 0x9753},{0x7953, 0xE250},{0x7955, 0xE24F},{0x7956, 0x9163},
- {0x7957, 0xE24C},{0x795A, 0xE24E},{0x795D, 0x8F6A},{0x795E, 0x905F},{0x795F, 0xE24D},{0x7960, 0xE24B},{0x7962, 0x9449},{0x7965, 0x8FCB},
- {0x7968, 0x955B},{0x796D, 0x8DD5},{0x7977, 0x9398},{0x797A, 0xE251},{0x797F, 0xE252},{0x7980, 0xE268},{0x7981, 0x8BD6},{0x7984, 0x985C},
- {0x7985, 0x9154},{0x798A, 0xE253},{0x798D, 0x89D0},{0x798E, 0x92F5},{0x798F, 0x959F},{0x7994, 0xEE64},{0x799B, 0xEE66},{0x799D, 0xE254},
- {0x79A6, 0x8B9A},{0x79A7, 0xE255},{0x79AA, 0xE257},{0x79AE, 0xE258},{0x79B0, 0x9448},{0x79B3, 0xE259},{0x79B9, 0xE25A},{0x79BA, 0xE25B},
- {0x79BD, 0x8BD7},{0x79BE, 0x89D1},{0x79BF, 0x93C3},{0x79C0, 0x8F47},{0x79C1, 0x8E84},{0x79C9, 0xE25C},{0x79CB, 0x8F48},{0x79D1, 0x89C8},
- {0x79D2, 0x9562},{0x79D5, 0xE25D},{0x79D8, 0x94E9},{0x79DF, 0x9164},{0x79E1, 0xE260},{0x79E3, 0xE261},{0x79E4, 0x9489},{0x79E6, 0x9060},
- {0x79E7, 0xE25E},{0x79E9, 0x9281},{0x79EC, 0xE25F},{0x79F0, 0x8FCC},{0x79FB, 0x88DA},{0x7A00, 0x8B48},{0x7A08, 0xE262},{0x7A0B, 0x92F6},
- {0x7A0D, 0xE263},{0x7A0E, 0x90C5},{0x7A14, 0x96AB},{0x7A17, 0x9542},{0x7A18, 0xE264},{0x7A19, 0xE265},{0x7A1A, 0x9274},{0x7A1C, 0x97C5},
- {0x7A1F, 0xE267},{0x7A20, 0xE266},{0x7A2E, 0x8EED},{0x7A31, 0xE269},{0x7A32, 0x88EE},{0x7A37, 0xE26C},{0x7A3B, 0xE26A},{0x7A3C, 0x89D2},
- {0x7A3D, 0x8C6D},{0x7A3E, 0xE26B},{0x7A3F, 0x8D65},{0x7A40, 0x8D92},{0x7A42, 0x95E4},{0x7A43, 0xE26D},{0x7A46, 0x9673},{0x7A49, 0xE26F},
- {0x7A4D, 0x90CF},{0x7A4E, 0x896E},{0x7A4F, 0x89B8},{0x7A50, 0x88AA},{0x7A57, 0xE26E},{0x7A61, 0xE270},{0x7A62, 0xE271},{0x7A63, 0x8FF5},
- {0x7A69, 0xE272},{0x7A6B, 0x8A6E},{0x7A70, 0xE274},{0x7A74, 0x8C8A},{0x7A76, 0x8B86},{0x7A79, 0xE275},{0x7A7A, 0x8BF3},{0x7A7D, 0xE276},
- {0x7A7F, 0x90FA},{0x7A81, 0x93CB},{0x7A83, 0x90DE},{0x7A84, 0x8DF3},{0x7A88, 0xE277},{0x7A92, 0x9282},{0x7A93, 0x918B},{0x7A95, 0xE279},
- {0x7A96, 0xE27B},{0x7A97, 0xE278},{0x7A98, 0xE27A},{0x7A9F, 0x8C41},{0x7AA9, 0xE27C},{0x7AAA, 0x8C45},{0x7AAE, 0x8B87},{0x7AAF, 0x9771},
- {0x7AB0, 0xE27E},{0x7AB6, 0xE280},{0x7ABA, 0x894D},{0x7ABF, 0xE283},{0x7AC3, 0x8A96},{0x7AC4, 0xE282},{0x7AC5, 0xE281},{0x7AC7, 0xE285},
- {0x7AC8, 0xE27D},{0x7ACA, 0xE286},{0x7ACB, 0x97A7},{0x7ACD, 0xE287},{0x7ACF, 0xE288},{0x7AD1, 0xEE67},{0x7AD2, 0x9AF2},{0x7AD3, 0xE28A},
- {0x7AD5, 0xE289},{0x7AD9, 0xE28B},{0x7ADA, 0xE28C},{0x7ADC, 0x97B3},{0x7ADD, 0xE28D},{0x7ADF, 0xE8ED},{0x7AE0, 0x8FCD},{0x7AE1, 0xE28E},
- {0x7AE2, 0xE28F},{0x7AE3, 0x8F76},{0x7AE5, 0x93B6},{0x7AE6, 0xE290},{0x7AE7, 0xEE68},{0x7AEA, 0x9247},{0x7AEB, 0xEE6A},{0x7AED, 0xE291},
- {0x7AEF, 0x925B},{0x7AF0, 0xE292},{0x7AF6, 0x8BA3},{0x7AF8, 0x995E},{0x7AF9, 0x927C},{0x7AFA, 0x8EB1},{0x7AFF, 0x8AC6},{0x7B02, 0xE293},
- {0x7B04, 0xE2A0},{0x7B06, 0xE296},{0x7B08, 0x8B88},{0x7B0A, 0xE295},{0x7B0B, 0xE2A2},{0x7B0F, 0xE294},{0x7B11, 0x8FCE},{0x7B18, 0xE298},
- {0x7B19, 0xE299},{0x7B1B, 0x934A},{0x7B1E, 0xE29A},{0x7B20, 0x8A7D},{0x7B25, 0x9079},{0x7B26, 0x9584},{0x7B28, 0xE29C},{0x7B2C, 0x91E6},
- {0x7B33, 0xE297},{0x7B35, 0xE29B},{0x7B36, 0xE29D},{0x7B39, 0x8DF9},{0x7B45, 0xE2A4},{0x7B46, 0x954D},{0x7B48, 0x94A4},{0x7B49, 0x9399},
- {0x7B4B, 0x8BD8},{0x7B4C, 0xE2A3},{0x7B4D, 0xE2A1},{0x7B4F, 0x94B3},{0x7B50, 0xE29E},{0x7B51, 0x927D},{0x7B52, 0x939B},{0x7B54, 0x939A},
- {0x7B56, 0x8DF4},{0x7B5D, 0xE2B6},{0x7B65, 0xE2A6},{0x7B67, 0xE2A8},{0x7B6C, 0xE2AB},{0x7B6E, 0xE2AC},{0x7B70, 0xE2A9},{0x7B71, 0xE2AA},
- {0x7B74, 0xE2A7},{0x7B75, 0xE2A5},{0x7B7A, 0xE29F},{0x7B86, 0x95CD},{0x7B87, 0x89D3},{0x7B8B, 0xE2B3},{0x7B8D, 0xE2B0},{0x7B8F, 0xE2B5},
- {0x7B92, 0xE2B4},{0x7B94, 0x9493},{0x7B95, 0x96A5},{0x7B97, 0x8E5A},{0x7B98, 0xE2AE},{0x7B99, 0xE2B7},{0x7B9A, 0xE2B2},{0x7B9C, 0xE2B1},
- {0x7B9D, 0xE2AD},{0x7B9E, 0xEE6B},{0x7B9F, 0xE2AF},{0x7BA1, 0x8AC7},{0x7BAA, 0x925C},{0x7BAD, 0x90FB},{0x7BB1, 0x94A0},{0x7BB4, 0xE2BC},
- {0x7BB8, 0x94A2},{0x7BC0, 0x90DF},{0x7BC1, 0xE2B9},{0x7BC4, 0x94CD},{0x7BC6, 0xE2BD},{0x7BC7, 0x95D1},{0x7BC9, 0x927A},{0x7BCB, 0xE2B8},
- {0x7BCC, 0xE2BA},{0x7BCF, 0xE2BB},{0x7BDD, 0xE2BE},{0x7BE0, 0x8EC2},{0x7BE4, 0x93C4},{0x7BE5, 0xE2C3},{0x7BE6, 0xE2C2},{0x7BE9, 0xE2BF},
- {0x7BED, 0x9855},{0x7BF3, 0xE2C8},{0x7BF6, 0xE2CC},{0x7BF7, 0xE2C9},{0x7C00, 0xE2C5},{0x7C07, 0xE2C6},{0x7C0D, 0xE2CB},{0x7C11, 0xE2C0},
- {0x7C12, 0x99D3},{0x7C13, 0xE2C7},{0x7C14, 0xE2C1},{0x7C17, 0xE2CA},{0x7C1F, 0xE2D0},{0x7C21, 0x8AC8},{0x7C23, 0xE2CD},{0x7C27, 0xE2CE},
- {0x7C2A, 0xE2CF},{0x7C2B, 0xE2D2},{0x7C37, 0xE2D1},{0x7C38, 0x94F4},{0x7C3D, 0xE2D3},{0x7C3E, 0x97FA},{0x7C3F, 0x95EB},{0x7C40, 0xE2D8},
- {0x7C43, 0xE2D5},{0x7C4C, 0xE2D4},{0x7C4D, 0x90D0},{0x7C4F, 0xE2D7},{0x7C50, 0xE2D9},{0x7C54, 0xE2D6},{0x7C56, 0xE2DD},{0x7C58, 0xE2DA},
- {0x7C5F, 0xE2DB},{0x7C60, 0xE2C4},{0x7C64, 0xE2DC},{0x7C65, 0xE2DE},{0x7C6C, 0xE2DF},{0x7C73, 0x95C4},{0x7C75, 0xE2E0},{0x7C7E, 0x96E0},
- {0x7C81, 0x8BCC},{0x7C82, 0x8C48},{0x7C83, 0xE2E1},{0x7C89, 0x95B2},{0x7C8B, 0x9088},{0x7C8D, 0x96AE},{0x7C90, 0xE2E2},{0x7C92, 0x97B1},
- {0x7C95, 0x9494},{0x7C97, 0x9165},{0x7C98, 0x9453},{0x7C9B, 0x8F6C},{0x7C9F, 0x88BE},{0x7CA1, 0xE2E7},{0x7CA2, 0xE2E5},{0x7CA4, 0xE2E3},
- {0x7CA5, 0x8A9F},{0x7CA7, 0x8FCF},{0x7CA8, 0xE2E8},{0x7CAB, 0xE2E6},{0x7CAD, 0xE2E4},{0x7CAE, 0xE2EC},{0x7CB1, 0xE2EB},{0x7CB2, 0xE2EA},
- {0x7CB3, 0xE2E9},{0x7CB9, 0xE2ED},{0x7CBD, 0xE2EE},{0x7CBE, 0x90B8},{0x7CC0, 0xE2EF},{0x7CC2, 0xE2F1},{0x7CC5, 0xE2F0},{0x7CCA, 0x8CD0},
- {0x7CCE, 0x9157},{0x7CD2, 0xE2F3},{0x7CD6, 0x939C},{0x7CD8, 0xE2F2},{0x7CDC, 0xE2F4},{0x7CDE, 0x95B3},{0x7CDF, 0x918C},{0x7CE0, 0x8D66},
- {0x7CE2, 0xE2F5},{0x7CE7, 0x97C6},{0x7CEF, 0xE2F7},{0x7CF2, 0xE2F8},{0x7CF4, 0xE2F9},{0x7CF6, 0xE2FA},{0x7CF8, 0x8E85},{0x7CFA, 0xE2FB},
- {0x7CFB, 0x8C6E},{0x7CFE, 0x8B8A},{0x7D00, 0x8B49},{0x7D02, 0xE340},{0x7D04, 0x96F1},{0x7D05, 0x8D67},{0x7D06, 0xE2FC},{0x7D0A, 0xE343},
- {0x7D0B, 0x96E4},{0x7D0D, 0x945B},{0x7D10, 0x9552},{0x7D14, 0x8F83},{0x7D15, 0xE342},{0x7D17, 0x8ED1},{0x7D18, 0x8D68},{0x7D19, 0x8E86},
- {0x7D1A, 0x8B89},{0x7D1B, 0x95B4},{0x7D1C, 0xE341},{0x7D20, 0x9166},{0x7D21, 0x9661},{0x7D22, 0x8DF5},{0x7D2B, 0x8E87},{0x7D2C, 0x92DB},
- {0x7D2E, 0xE346},{0x7D2F, 0x97DD},{0x7D30, 0x8DD7},{0x7D32, 0xE347},{0x7D33, 0x9061},{0x7D35, 0xE349},{0x7D39, 0x8FD0},{0x7D3A, 0x8DAE},
- {0x7D3F, 0xE348},{0x7D42, 0x8F49},{0x7D43, 0x8CBC},{0x7D44, 0x9167},{0x7D45, 0xE344},{0x7D46, 0xE34A},{0x7D48, 0xEE6D},{0x7D4B, 0xE345},
- {0x7D4C, 0x8C6F},{0x7D4E, 0xE34D},{0x7D4F, 0xE351},{0x7D50, 0x8C8B},{0x7D56, 0xE34C},{0x7D5B, 0xE355},{0x7D5C, 0xEE6E},{0x7D5E, 0x8D69},
- {0x7D61, 0x978D},{0x7D62, 0x88BA},{0x7D63, 0xE352},{0x7D66, 0x8B8B},{0x7D68, 0xE34F},{0x7D6E, 0xE350},{0x7D71, 0x939D},{0x7D72, 0xE34E},
- {0x7D73, 0xE34B},{0x7D75, 0x8A47},{0x7D76, 0x90E2},{0x7D79, 0x8CA6},{0x7D7D, 0xE357},{0x7D89, 0xE354},{0x7D8F, 0xE356},{0x7D93, 0xE353},
- {0x7D99, 0x8C70},{0x7D9A, 0x91B1},{0x7D9B, 0xE358},{0x7D9C, 0x918E},{0x7D9F, 0xE365},{0x7DA0, 0xEE70},{0x7DA2, 0xE361},{0x7DA3, 0xE35B},
- {0x7DAB, 0xE35F},{0x7DAC, 0x8EF8},{0x7DAD, 0x88DB},{0x7DAE, 0xE35A},{0x7DAF, 0xE362},{0x7DB0, 0xE366},{0x7DB1, 0x8D6A},{0x7DB2, 0x96D4},
- {0x7DB4, 0x92D4},{0x7DB5, 0xE35C},{0x7DB7, 0xEE6F},{0x7DB8, 0xE364},{0x7DBA, 0xE359},{0x7DBB, 0x925D},{0x7DBD, 0xE35E},{0x7DBE, 0x88BB},
- {0x7DBF, 0x96C8},{0x7DC7, 0xE35D},{0x7DCA, 0x8BD9},{0x7DCB, 0x94EA},{0x7DCF, 0x918D},{0x7DD1, 0x97CE},{0x7DD2, 0x8F8F},{0x7DD5, 0xE38E},
- {0x7DD6, 0xEE71},{0x7DD8, 0xE367},{0x7DDA, 0x90FC},{0x7DDC, 0xE363},{0x7DDD, 0xE368},{0x7DDE, 0xE36A},{0x7DE0, 0x92F7},{0x7DE1, 0xE36D},
- {0x7DE4, 0xE369},{0x7DE8, 0x95D2},{0x7DE9, 0x8AC9},{0x7DEC, 0x96C9},{0x7DEF, 0x88DC},{0x7DF2, 0xE36C},{0x7DF4, 0x97FB},{0x7DFB, 0xE36B},
- {0x7E01, 0x898F},{0x7E04, 0x93EA},{0x7E05, 0xE36E},{0x7E09, 0xE375},{0x7E0A, 0xE36F},{0x7E0B, 0xE376},{0x7E12, 0xE372},{0x7E1B, 0x949B},
- {0x7E1E, 0x8EC8},{0x7E1F, 0xE374},{0x7E21, 0xE371},{0x7E22, 0xE377},{0x7E23, 0xE370},{0x7E26, 0x8F63},{0x7E2B, 0x9644},{0x7E2E, 0x8F6B},
- {0x7E31, 0xE373},{0x7E32, 0xE380},{0x7E35, 0xE37B},{0x7E37, 0xE37E},{0x7E39, 0xE37C},{0x7E3A, 0xE381},{0x7E3B, 0xE37A},{0x7E3D, 0xE360},
- {0x7E3E, 0x90D1},{0x7E41, 0x94C9},{0x7E43, 0xE37D},{0x7E46, 0xE378},{0x7E4A, 0x9140},{0x7E4B, 0x8C71},{0x7E4D, 0x8F4A},{0x7E52, 0xEE72},
- {0x7E54, 0x9044},{0x7E55, 0x9155},{0x7E56, 0xE384},{0x7E59, 0xE386},{0x7E5A, 0xE387},{0x7E5D, 0xE383},{0x7E5E, 0xE385},{0x7E66, 0xE379},
- {0x7E67, 0xE382},{0x7E69, 0xE38A},{0x7E6A, 0xE389},{0x7E6D, 0x969A},{0x7E70, 0x8C4A},{0x7E79, 0xE388},{0x7E7B, 0xE38C},{0x7E7C, 0xE38B},
- {0x7E7D, 0xE38F},{0x7E7F, 0xE391},{0x7E82, 0x8E5B},{0x7E83, 0xE38D},{0x7E88, 0xE392},{0x7E89, 0xE393},{0x7E8A, 0xED40},{0x7E8C, 0xE394},
- {0x7E8E, 0xE39A},{0x7E8F, 0x935A},{0x7E90, 0xE396},{0x7E92, 0xE395},{0x7E93, 0xE397},{0x7E94, 0xE398},{0x7E96, 0xE399},{0x7E9B, 0xE39B},
- {0x7E9C, 0xE39C},{0x7F36, 0x8ACA},{0x7F38, 0xE39D},{0x7F3A, 0xE39E},{0x7F45, 0xE39F},{0x7F47, 0xEE73},{0x7F4C, 0xE3A0},{0x7F4D, 0xE3A1},
- {0x7F4E, 0xE3A2},{0x7F50, 0xE3A3},{0x7F51, 0xE3A4},{0x7F54, 0xE3A6},{0x7F55, 0xE3A5},{0x7F58, 0xE3A7},{0x7F5F, 0xE3A8},{0x7F60, 0xE3A9},
- {0x7F67, 0xE3AC},{0x7F68, 0xE3AA},{0x7F69, 0xE3AB},{0x7F6A, 0x8DDF},{0x7F6B, 0x8C72},{0x7F6E, 0x9275},{0x7F70, 0x94B1},{0x7F72, 0x8F90},
- {0x7F75, 0x946C},{0x7F77, 0x94EB},{0x7F78, 0xE3AD},{0x7F79, 0x9CEB},{0x7F82, 0xE3AE},{0x7F83, 0xE3B0},{0x7F85, 0x9785},{0x7F86, 0xE3AF},
- {0x7F87, 0xE3B2},{0x7F88, 0xE3B1},{0x7F8A, 0x9772},{0x7F8C, 0xE3B3},{0x7F8E, 0x94FC},{0x7F94, 0xE3B4},{0x7F9A, 0xE3B7},{0x7F9D, 0xE3B6},
- {0x7F9E, 0xE3B5},{0x7FA1, 0xEE74},{0x7FA3, 0xE3B8},{0x7FA4, 0x8C51},{0x7FA8, 0x9141},{0x7FA9, 0x8B60},{0x7FAE, 0xE3BC},{0x7FAF, 0xE3B9},
- {0x7FB2, 0xE3BA},{0x7FB6, 0xE3BD},{0x7FB8, 0xE3BE},{0x7FB9, 0xE3BB},{0x7FBD, 0x8948},{0x7FC1, 0x89A5},{0x7FC5, 0xE3C0},{0x7FC6, 0xE3C1},
- {0x7FCA, 0xE3C2},{0x7FCC, 0x9782},{0x7FD2, 0x8F4B},{0x7FD4, 0xE3C4},{0x7FD5, 0xE3C3},{0x7FE0, 0x9089},{0x7FE1, 0xE3C5},{0x7FE6, 0xE3C6},
- {0x7FE9, 0xE3C7},{0x7FEB, 0x8AE3},{0x7FF0, 0x8ACB},{0x7FF3, 0xE3C8},{0x7FF9, 0xE3C9},{0x7FFB, 0x967C},{0x7FFC, 0x9783},{0x8000, 0x9773},
- {0x8001, 0x9856},{0x8003, 0x8D6C},{0x8004, 0xE3CC},{0x8005, 0x8ED2},{0x8006, 0xE3CB},{0x800B, 0xE3CD},{0x800C, 0x8EA7},{0x8010, 0x91CF},
- {0x8012, 0xE3CE},{0x8015, 0x8D6B},{0x8017, 0x96D5},{0x8018, 0xE3CF},{0x8019, 0xE3D0},{0x801C, 0xE3D1},{0x8021, 0xE3D2},{0x8028, 0xE3D3},
- {0x8033, 0x8EA8},{0x8036, 0x96EB},{0x803B, 0xE3D5},{0x803D, 0x925E},{0x803F, 0xE3D4},{0x8046, 0xE3D7},{0x804A, 0xE3D6},{0x8052, 0xE3D8},
- {0x8056, 0x90B9},{0x8058, 0xE3D9},{0x805A, 0xE3DA},{0x805E, 0x95B7},{0x805F, 0xE3DB},{0x8061, 0x918F},{0x8062, 0xE3DC},{0x8068, 0xE3DD},
- {0x806F, 0x97FC},{0x8070, 0xE3E0},{0x8072, 0xE3DF},{0x8073, 0xE3DE},{0x8074, 0x92AE},{0x8076, 0xE3E1},{0x8077, 0x9045},{0x8079, 0xE3E2},
- {0x807D, 0xE3E3},{0x807E, 0x9857},{0x807F, 0xE3E4},{0x8084, 0xE3E5},{0x8085, 0xE3E7},{0x8086, 0xE3E6},{0x8087, 0x94A3},{0x8089, 0x93F7},
- {0x808B, 0x985D},{0x808C, 0x94A7},{0x8093, 0xE3E9},{0x8096, 0x8FD1},{0x8098, 0x9549},{0x809A, 0xE3EA},{0x809B, 0xE3E8},{0x809D, 0x8ACC},
- {0x80A1, 0x8CD2},{0x80A2, 0x8E88},{0x80A5, 0x94EC},{0x80A9, 0x8CA8},{0x80AA, 0x9662},{0x80AC, 0xE3ED},{0x80AD, 0xE3EB},{0x80AF, 0x8D6D},
- {0x80B1, 0x8D6E},{0x80B2, 0x88E7},{0x80B4, 0x8DE6},{0x80BA, 0x9478},{0x80C3, 0x88DD},{0x80C4, 0xE3F2},{0x80C6, 0x925F},{0x80CC, 0x9477},
- {0x80CE, 0x91D9},{0x80D6, 0xE3F4},{0x80D9, 0xE3F0},{0x80DA, 0xE3F3},{0x80DB, 0xE3EE},{0x80DD, 0xE3F1},{0x80DE, 0x9645},{0x80E1, 0x8CD3},
- {0x80E4, 0x88FB},{0x80E5, 0xE3EF},{0x80EF, 0xE3F6},{0x80F1, 0xE3F7},{0x80F4, 0x93B7},{0x80F8, 0x8BB9},{0x80FC, 0xE445},{0x80FD, 0x945C},
- {0x8102, 0x8E89},{0x8105, 0x8BBA},{0x8106, 0x90C6},{0x8107, 0x9865},{0x8108, 0x96AC},{0x8109, 0xE3F5},{0x810A, 0x90D2},{0x811A, 0x8B72},
- {0x811B, 0xE3F8},{0x8123, 0xE3FA},{0x8129, 0xE3F9},{0x812F, 0xE3FB},{0x8131, 0x9245},{0x8133, 0x945D},{0x8139, 0x92AF},{0x813E, 0xE442},
- {0x8146, 0xE441},{0x814B, 0xE3FC},{0x814E, 0x9074},{0x8150, 0x9585},{0x8151, 0xE444},{0x8153, 0xE443},{0x8154, 0x8D6F},{0x8155, 0x9872},
- {0x815F, 0xE454},{0x8165, 0xE448},{0x8166, 0xE449},{0x816B, 0x8EEE},{0x816E, 0xE447},{0x8170, 0x8D98},{0x8171, 0xE446},{0x8174, 0xE44A},
- {0x8178, 0x92B0},{0x8179, 0x95A0},{0x817A, 0x9142},{0x817F, 0x91DA},{0x8180, 0xE44E},{0x8182, 0xE44F},{0x8183, 0xE44B},{0x8188, 0xE44C},
- {0x818A, 0xE44D},{0x818F, 0x8D70},{0x8193, 0xE455},{0x8195, 0xE451},{0x819A, 0x9586},{0x819C, 0x968C},{0x819D, 0x9547},{0x81A0, 0xE450},
- {0x81A3, 0xE453},{0x81A4, 0xE452},{0x81A8, 0x9663},{0x81A9, 0xE456},{0x81B0, 0xE457},{0x81B3, 0x9156},{0x81B5, 0xE458},{0x81B8, 0xE45A},
- {0x81BA, 0xE45E},{0x81BD, 0xE45B},{0x81BE, 0xE459},{0x81BF, 0x945E},{0x81C0, 0xE45C},{0x81C2, 0xE45D},{0x81C6, 0x89B0},{0x81C8, 0xE464},
- {0x81C9, 0xE45F},{0x81CD, 0xE460},{0x81D1, 0xE461},{0x81D3, 0x919F},{0x81D8, 0xE463},{0x81D9, 0xE462},{0x81DA, 0xE465},{0x81DF, 0xE466},
- {0x81E0, 0xE467},{0x81E3, 0x9062},{0x81E5, 0x89E7},{0x81E7, 0xE468},{0x81E8, 0x97D5},{0x81EA, 0x8EA9},{0x81ED, 0x8F4C},{0x81F3, 0x8E8A},
- {0x81F4, 0x9276},{0x81FA, 0xE469},{0x81FB, 0xE46A},{0x81FC, 0x8950},{0x81FE, 0xE46B},{0x8201, 0xE46C},{0x8202, 0xE46D},{0x8205, 0xE46E},
- {0x8207, 0xE46F},{0x8208, 0x8BBB},{0x8209, 0x9DA8},{0x820A, 0xE470},{0x820C, 0x90E3},{0x820D, 0xE471},{0x820E, 0x8EC9},{0x8210, 0xE472},
- {0x8212, 0x98AE},{0x8216, 0xE473},{0x8217, 0x95DC},{0x8218, 0x8ADA},{0x821B, 0x9143},{0x821C, 0x8F77},{0x821E, 0x9591},{0x821F, 0x8F4D},
- {0x8229, 0xE474},{0x822A, 0x8D71},{0x822B, 0xE475},{0x822C, 0x94CA},{0x822E, 0xE484},{0x8233, 0xE477},{0x8235, 0x91C7},{0x8236, 0x9495},
- {0x8237, 0x8CBD},{0x8238, 0xE476},{0x8239, 0x9144},{0x8240, 0xE478},{0x8247, 0x92F8},{0x8258, 0xE47A},{0x8259, 0xE479},{0x825A, 0xE47C},
- {0x825D, 0xE47B},{0x825F, 0xE47D},{0x8262, 0xE480},{0x8264, 0xE47E},{0x8266, 0x8ACD},{0x8268, 0xE481},{0x826A, 0xE482},{0x826B, 0xE483},
- {0x826E, 0x8DAF},{0x826F, 0x97C7},{0x8271, 0xE485},{0x8272, 0x9046},{0x8276, 0x8990},{0x8277, 0xE486},{0x8278, 0xE487},{0x827E, 0xE488},
- {0x828B, 0x88F0},{0x828D, 0xE489},{0x8292, 0xE48A},{0x8299, 0x9587},{0x829D, 0x8EC5},{0x829F, 0xE48C},{0x82A5, 0x8A48},{0x82A6, 0x88B0},
- {0x82AB, 0xE48B},{0x82AC, 0xE48E},{0x82AD, 0x946D},{0x82AF, 0x9063},{0x82B1, 0x89D4},{0x82B3, 0x9646},{0x82B8, 0x8C7C},{0x82B9, 0x8BDA},
- {0x82BB, 0xE48D},{0x82BD, 0x89E8},{0x82C5, 0x8AA1},{0x82D1, 0x8991},{0x82D2, 0xE492},{0x82D3, 0x97E8},{0x82D4, 0x91DB},{0x82D7, 0x9563},
- {0x82D9, 0xE49E},{0x82DB, 0x89D5},{0x82DC, 0xE49C},{0x82DE, 0xE49A},{0x82DF, 0xE491},{0x82E1, 0xE48F},{0x82E3, 0xE490},{0x82E5, 0x8EE1},
- {0x82E6, 0x8BEA},{0x82E7, 0x9297},{0x82EB, 0x93CF},{0x82F1, 0x8970},{0x82F3, 0xE494},{0x82F4, 0xE493},{0x82F9, 0xE499},{0x82FA, 0xE495},
- {0x82FB, 0xE498},{0x8301, 0xEE76},{0x8302, 0x96CE},{0x8303, 0xE497},{0x8304, 0x89D6},{0x8305, 0x8A9D},{0x8306, 0xE49B},{0x8309, 0xE49D},
- {0x830E, 0x8C73},{0x8316, 0xE4A1},{0x8317, 0xE4AA},{0x8318, 0xE4AB},{0x831C, 0x88A9},{0x8323, 0xE4B2},{0x8328, 0x88EF},{0x832B, 0xE4A9},
- {0x832F, 0xE4A8},{0x8331, 0xE4A3},{0x8332, 0xE4A2},{0x8334, 0xE4A0},{0x8335, 0xE49F},{0x8336, 0x9283},{0x8338, 0x91F9},{0x8339, 0xE4A5},
- {0x8340, 0xE4A4},{0x8345, 0xE4A7},{0x8349, 0x9190},{0x834A, 0x8C74},{0x834F, 0x8960},{0x8350, 0xE4A6},{0x8352, 0x8D72},{0x8358, 0x9191},
- {0x8362, 0xEE77},{0x8373, 0xE4B8},{0x8375, 0xE4B9},{0x8377, 0x89D7},{0x837B, 0x89AC},{0x837C, 0xE4B6},{0x837F, 0xEE78},{0x8385, 0xE4AC},
- {0x8387, 0xE4B4},{0x8389, 0xE4BB},{0x838A, 0xE4B5},{0x838E, 0xE4B3},{0x8393, 0xE496},{0x8396, 0xE4B1},{0x839A, 0xE4AD},{0x839E, 0x8ACE},
- {0x839F, 0xE4AF},{0x83A0, 0xE4BA},{0x83A2, 0xE4B0},{0x83A8, 0xE4BC},{0x83AA, 0xE4AE},{0x83AB, 0x949C},{0x83B1, 0x9789},{0x83B5, 0xE4B7},
- {0x83BD, 0xE4CD},{0x83C1, 0xE4C5},{0x83C5, 0x909B},{0x83C7, 0xEE79},{0x83CA, 0x8B65},{0x83CC, 0x8BDB},{0x83CE, 0xE4C0},{0x83D3, 0x89D9},
- {0x83D6, 0x8FD2},{0x83D8, 0xE4C3},{0x83DC, 0x8DD8},{0x83DF, 0x9370},{0x83E0, 0xE4C8},{0x83E9, 0x95EC},{0x83EB, 0xE4BF},{0x83EF, 0x89D8},
- {0x83F0, 0x8CD4},{0x83F1, 0x9548},{0x83F2, 0xE4C9},{0x83F4, 0xE4BD},{0x83F6, 0xEE7A},{0x83F7, 0xE4C6},{0x83FB, 0xE4D0},{0x83FD, 0xE4C1},
- {0x8403, 0xE4C2},{0x8404, 0x93B8},{0x8407, 0xE4C7},{0x840B, 0xE4C4},{0x840C, 0x9647},{0x840D, 0xE4CA},{0x840E, 0x88DE},{0x8413, 0xE4BE},
- {0x8420, 0xE4CC},{0x8422, 0xE4CB},{0x8429, 0x948B},{0x842A, 0xE4D2},{0x842C, 0xE4DD},{0x8431, 0x8A9E},{0x8435, 0xE4E0},{0x8438, 0xE4CE},
- {0x843C, 0xE4D3},{0x843D, 0x978E},{0x8446, 0xE4DC},{0x8448, 0xEE7B},{0x8449, 0x9774},{0x844E, 0x97A8},{0x8457, 0x9298},{0x845B, 0x8A8B},
- {0x8461, 0x9592},{0x8462, 0xE4E2},{0x8463, 0x939F},{0x8466, 0x88AF},{0x8469, 0xE4DB},{0x846B, 0xE4D7},{0x846C, 0x9192},{0x846D, 0xE4D1},
- {0x846E, 0xE4D9},{0x846F, 0xE4DE},{0x8471, 0x944B},{0x8475, 0x88A8},{0x8477, 0xE4D6},{0x8479, 0xE4DF},{0x847A, 0x9598},{0x8482, 0xE4DA},
- {0x8484, 0xE4D5},{0x848B, 0x8FD3},{0x8490, 0x8F4E},{0x8494, 0x8EAA},{0x8499, 0x96D6},{0x849C, 0x9566},{0x849F, 0xE4E5},{0x84A1, 0xE4EE},
- {0x84AD, 0xE4D8},{0x84B2, 0x8A97},{0x84B4, 0xEE7C},{0x84B8, 0x8FF6},{0x84B9, 0xE4E3},{0x84BB, 0xE4E8},{0x84BC, 0x9193},{0x84BF, 0xE4E4},
- {0x84C1, 0xE4EB},{0x84C4, 0x927E},{0x84C6, 0xE4EC},{0x84C9, 0x9775},{0x84CA, 0xE4E1},{0x84CB, 0x8A57},{0x84CD, 0xE4E7},{0x84D0, 0xE4EA},
- {0x84D1, 0x96AA},{0x84D6, 0xE4ED},{0x84D9, 0xE4E6},{0x84DA, 0xE4E9},{0x84DC, 0xED44},{0x84EC, 0x9648},{0x84EE, 0x9840},{0x84F4, 0xE4F1},
- {0x84FC, 0xE4F8},{0x84FF, 0xE4F0},{0x8500, 0x8EC1},{0x8506, 0xE4CF},{0x8511, 0x95CC},{0x8513, 0x96A0},{0x8514, 0xE4F7},{0x8515, 0xE4F6},
- {0x8517, 0xE4F2},{0x8518, 0xE4F3},{0x851A, 0x8955},{0x851F, 0xE4F5},{0x8521, 0xE4EF},{0x8526, 0x92D3},{0x852C, 0xE4F4},{0x852D, 0x88FC},
- {0x8535, 0x91A0},{0x853D, 0x95C1},{0x8540, 0xE4F9},{0x8541, 0xE540},{0x8543, 0x94D7},{0x8548, 0xE4FC},{0x8549, 0x8FD4},{0x854A, 0x8EC7},
- {0x854B, 0xE542},{0x854E, 0x8BBC},{0x8553, 0xEE7D},{0x8555, 0xE543},{0x8557, 0x9599},{0x8558, 0xE4FB},{0x8559, 0xEE7E},{0x855A, 0xE4D4},
- {0x8563, 0xE4FA},{0x8568, 0x986E},{0x8569, 0x93A0},{0x856A, 0x9593},{0x856B, 0xEE80},{0x856D, 0xE54A},{0x8577, 0xE550},{0x857E, 0xE551},
- {0x8580, 0xE544},{0x8584, 0x9496},{0x8587, 0xE54E},{0x8588, 0xE546},{0x858A, 0xE548},{0x8590, 0xE552},{0x8591, 0xE547},{0x8594, 0xE54B},
- {0x8597, 0x8992},{0x8599, 0x93E3},{0x859B, 0xE54C},{0x859C, 0xE54F},{0x85A4, 0xE545},{0x85A6, 0x9145},{0x85A8, 0xE549},{0x85A9, 0x8E46},
- {0x85AA, 0x9064},{0x85AB, 0x8C4F},{0x85AC, 0x96F2},{0x85AE, 0x96F7},{0x85AF, 0x8F92},{0x85B0, 0xEE82},{0x85B9, 0xE556},{0x85BA, 0xE554},
- {0x85C1, 0x986D},{0x85C9, 0xE553},{0x85CD, 0x9795},{0x85CF, 0xE555},{0x85D0, 0xE557},{0x85D5, 0xE558},{0x85DC, 0xE55B},{0x85DD, 0xE559},
- {0x85E4, 0x93A1},{0x85E5, 0xE55A},{0x85E9, 0x94CB},{0x85EA, 0xE54D},{0x85F7, 0x8F93},{0x85F9, 0xE55C},{0x85FA, 0xE561},{0x85FB, 0x9194},
- {0x85FE, 0xE560},{0x8602, 0xE541},{0x8606, 0xE562},{0x8607, 0x9168},{0x860A, 0xE55D},{0x860B, 0xE55F},{0x8613, 0xE55E},{0x8616, 0x9F50},
- {0x8617, 0x9F41},{0x861A, 0xE564},{0x8622, 0xE563},{0x862D, 0x9796},{0x862F, 0xE1BA},{0x8630, 0xE565},{0x863F, 0xE566},{0x864D, 0xE567},
- {0x864E, 0x8CD5},{0x8650, 0x8B73},{0x8654, 0xE569},{0x8655, 0x997C},{0x865A, 0x8B95},{0x865C, 0x97B8},{0x865E, 0x8BF1},{0x865F, 0xE56A},
- {0x8667, 0xE56B},{0x866B, 0x928E},{0x8671, 0xE56C},{0x8679, 0x93F8},{0x867B, 0x88B8},{0x868A, 0x89E1},{0x868B, 0xE571},{0x868C, 0xE572},
- {0x8693, 0xE56D},{0x8695, 0x8E5C},{0x86A3, 0xE56E},{0x86A4, 0x9461},{0x86A9, 0xE56F},{0x86AA, 0xE570},{0x86AB, 0xE57A},{0x86AF, 0xE574},
- {0x86B0, 0xE577},{0x86B6, 0xE573},{0x86C4, 0xE575},{0x86C6, 0xE576},{0x86C7, 0x8ED6},{0x86C9, 0xE578},{0x86CB, 0x9260},{0x86CD, 0x8C75},
- {0x86CE, 0x8A61},{0x86D4, 0xE57B},{0x86D9, 0x8A5E},{0x86DB, 0xE581},{0x86DE, 0xE57C},{0x86DF, 0xE580},{0x86E4, 0x94B8},{0x86E9, 0xE57D},
- {0x86EC, 0xE57E},{0x86ED, 0x9567},{0x86EE, 0x94D8},{0x86EF, 0xE582},{0x86F8, 0x91FB},{0x86F9, 0xE58C},{0x86FB, 0xE588},{0x86FE, 0x89E9},
- {0x8700, 0xE586},{0x8702, 0x9649},{0x8703, 0xE587},{0x8706, 0xE584},{0x8708, 0xE585},{0x8709, 0xE58A},{0x870A, 0xE58D},{0x870D, 0xE58B},
- {0x8711, 0xE589},{0x8712, 0xE583},{0x8718, 0x9277},{0x871A, 0xE594},{0x871C, 0x96A8},{0x8725, 0xE592},{0x8729, 0xE593},{0x8734, 0xE58E},
- {0x8737, 0xE590},{0x873B, 0xE591},{0x873F, 0xE58F},{0x8749, 0x90E4},{0x874B, 0x9858},{0x874C, 0xE598},{0x874E, 0xE599},{0x8753, 0xE59F},
- {0x8755, 0x9049},{0x8757, 0xE59B},{0x8759, 0xE59E},{0x875F, 0xE596},{0x8760, 0xE595},{0x8763, 0xE5A0},{0x8766, 0x89DA},{0x8768, 0xE59C},
- {0x876A, 0xE5A1},{0x876E, 0xE59D},{0x8774, 0xE59A},{0x8776, 0x92B1},{0x8778, 0xE597},{0x877F, 0x9488},{0x8782, 0xE5A5},{0x878D, 0x975A},
- {0x879F, 0xE5A4},{0x87A2, 0xE5A3},{0x87AB, 0xE5AC},{0x87AF, 0xE5A6},{0x87B3, 0xE5AE},{0x87BA, 0x9786},{0x87BB, 0xE5B1},{0x87BD, 0xE5A8},
- {0x87C0, 0xE5A9},{0x87C4, 0xE5AD},{0x87C6, 0xE5B0},{0x87C7, 0xE5AF},{0x87CB, 0xE5A7},{0x87D0, 0xE5AA},{0x87D2, 0xE5BB},{0x87E0, 0xE5B4},
- {0x87EF, 0xE5B2},{0x87F2, 0xE5B3},{0x87F6, 0xE5B8},{0x87F7, 0xE5B9},{0x87F9, 0x8A49},{0x87FB, 0x8B61},{0x87FE, 0xE5B7},{0x8805, 0xE5A2},
- {0x8807, 0xEE85},{0x880D, 0xE5B6},{0x880E, 0xE5BA},{0x880F, 0xE5B5},{0x8811, 0xE5BC},{0x8815, 0xE5BE},{0x8816, 0xE5BD},{0x8821, 0xE5C0},
- {0x8822, 0xE5BF},{0x8823, 0xE579},{0x8827, 0xE5C4},{0x8831, 0xE5C1},{0x8836, 0xE5C2},{0x8839, 0xE5C3},{0x883B, 0xE5C5},{0x8840, 0x8C8C},
- {0x8842, 0xE5C7},{0x8844, 0xE5C6},{0x8846, 0x8F4F},{0x884C, 0x8D73},{0x884D, 0x9FA5},{0x8852, 0xE5C8},{0x8853, 0x8F70},{0x8857, 0x8A58},
- {0x8859, 0xE5C9},{0x885B, 0x8971},{0x885D, 0x8FD5},{0x885E, 0xE5CA},{0x8861, 0x8D74},{0x8862, 0xE5CB},{0x8863, 0x88DF},{0x8868, 0x955C},
- {0x886B, 0xE5CC},{0x8870, 0x908A},{0x8872, 0xE5D3},{0x8875, 0xE5D0},{0x8877, 0x928F},{0x887D, 0xE5D1},{0x887E, 0xE5CE},{0x887F, 0x8BDC},
- {0x8881, 0xE5CD},{0x8882, 0xE5D4},{0x8888, 0x8C55},{0x888B, 0x91DC},{0x888D, 0xE5DA},{0x8892, 0xE5D6},{0x8896, 0x91B3},{0x8897, 0xE5D5},
- {0x8899, 0xE5D8},{0x889E, 0xE5CF},{0x88A2, 0xE5D9},{0x88A4, 0xE5DB},{0x88AB, 0x94ED},{0x88AE, 0xE5D7},{0x88B0, 0xE5DC},{0x88B1, 0xE5DE},
- {0x88B4, 0x8CD1},{0x88B5, 0xE5D2},{0x88B7, 0x88BF},{0x88BF, 0xE5DD},{0x88C1, 0x8DD9},{0x88C2, 0x97F4},{0x88C3, 0xE5DF},{0x88C4, 0xE5E0},
- {0x88C5, 0x9195},{0x88CF, 0x97A0},{0x88D4, 0xE5E1},{0x88D5, 0x9754},{0x88D8, 0xE5E2},{0x88D9, 0xE5E3},{0x88DC, 0x95E2},{0x88DD, 0xE5E4},
- {0x88DF, 0x8DBE},{0x88E1, 0x97A1},{0x88E8, 0xE5E9},{0x88F2, 0xE5EA},{0x88F3, 0x8FD6},{0x88F4, 0xE5E8},{0x88F5, 0xEE86},{0x88F8, 0x9787},
- {0x88F9, 0xE5E5},{0x88FC, 0xE5E7},{0x88FD, 0x90BB},{0x88FE, 0x909E},{0x8902, 0xE5E6},{0x8904, 0xE5EB},{0x8907, 0x95A1},{0x890A, 0xE5ED},
- {0x890C, 0xE5EC},{0x8910, 0x8A8C},{0x8912, 0x964A},{0x8913, 0xE5EE},{0x891C, 0xED41},{0x891D, 0xE5FA},{0x891E, 0xE5F0},{0x8925, 0xE5F1},
- {0x892A, 0xE5F2},{0x892B, 0xE5F3},{0x8936, 0xE5F7},{0x8938, 0xE5F8},{0x893B, 0xE5F6},{0x8941, 0xE5F4},{0x8943, 0xE5EF},{0x8944, 0xE5F5},
- {0x894C, 0xE5F9},{0x894D, 0xE8B5},{0x8956, 0x89A6},{0x895E, 0xE5FC},{0x895F, 0x8BDD},{0x8960, 0xE5FB},{0x8964, 0xE641},{0x8966, 0xE640},
- {0x896A, 0xE643},{0x896D, 0xE642},{0x896F, 0xE644},{0x8972, 0x8F50},{0x8974, 0xE645},{0x8977, 0xE646},{0x897E, 0xE647},{0x897F, 0x90BC},
- {0x8981, 0x9776},{0x8983, 0xE648},{0x8986, 0x95A2},{0x8987, 0x9465},{0x8988, 0xE649},{0x898A, 0xE64A},{0x898B, 0x8CA9},{0x898F, 0x8B4B},
- {0x8993, 0xE64B},{0x8996, 0x8E8B},{0x8997, 0x9460},{0x8998, 0xE64C},{0x899A, 0x8A6F},{0x89A1, 0xE64D},{0x89A6, 0xE64F},{0x89A7, 0x9797},
- {0x89A9, 0xE64E},{0x89AA, 0x9065},{0x89AC, 0xE650},{0x89AF, 0xE651},{0x89B2, 0xE652},{0x89B3, 0x8ACF},{0x89BA, 0xE653},{0x89BD, 0xE654},
- {0x89BF, 0xE655},{0x89C0, 0xE656},{0x89D2, 0x8A70},{0x89DA, 0xE657},{0x89DC, 0xE658},{0x89DD, 0xE659},{0x89E3, 0x89F0},{0x89E6, 0x9047},
- {0x89E7, 0xE65A},{0x89F4, 0xE65B},{0x89F8, 0xE65C},{0x8A00, 0x8CBE},{0x8A02, 0x92F9},{0x8A03, 0xE65D},{0x8A08, 0x8C76},{0x8A0A, 0x9075},
- {0x8A0C, 0xE660},{0x8A0E, 0x93A2},{0x8A10, 0xE65F},{0x8A12, 0xEE87},{0x8A13, 0x8C50},{0x8A16, 0xE65E},{0x8A17, 0x91F5},{0x8A18, 0x8B4C},
- {0x8A1B, 0xE661},{0x8A1D, 0xE662},{0x8A1F, 0x8FD7},{0x8A23, 0x8C8D},{0x8A25, 0xE663},{0x8A2A, 0x964B},{0x8A2D, 0x90DD},{0x8A31, 0x8B96},
- {0x8A33, 0x96F3},{0x8A34, 0x9169},{0x8A36, 0xE664},{0x8A37, 0xEE88},{0x8A3A, 0x9066},{0x8A3B, 0x9290},{0x8A3C, 0x8FD8},{0x8A41, 0xE665},
- {0x8A46, 0xE668},{0x8A48, 0xE669},{0x8A50, 0x8DBC},{0x8A51, 0x91C0},{0x8A52, 0xE667},{0x8A54, 0x8FD9},{0x8A55, 0x955D},{0x8A5B, 0xE666},
- {0x8A5E, 0x8E8C},{0x8A60, 0x8972},{0x8A62, 0xE66D},{0x8A63, 0x8C77},{0x8A66, 0x8E8E},{0x8A69, 0x8E8D},{0x8A6B, 0x986C},{0x8A6C, 0xE66C},
- {0x8A6D, 0xE66B},{0x8A6E, 0x9146},{0x8A70, 0x8B6C},{0x8A71, 0x9862},{0x8A72, 0x8A59},{0x8A73, 0x8FDA},{0x8A79, 0xEE89},{0x8A7C, 0xE66A},
- {0x8A82, 0xE66F},{0x8A84, 0xE670},{0x8A85, 0xE66E},{0x8A87, 0x8CD6},{0x8A89, 0x975F},{0x8A8C, 0x8E8F},{0x8A8D, 0x9446},{0x8A91, 0xE673},
- {0x8A93, 0x90BE},{0x8A95, 0x9261},{0x8A98, 0x9755},{0x8A9A, 0xE676},{0x8A9E, 0x8CEA},{0x8AA0, 0x90BD},{0x8AA1, 0xE672},{0x8AA3, 0xE677},
- {0x8AA4, 0x8CEB},{0x8AA5, 0xE674},{0x8AA6, 0xE675},{0x8AA7, 0xEE8A},{0x8AA8, 0xE671},{0x8AAC, 0x90E0},{0x8AAD, 0x93C7},{0x8AB0, 0x924E},
- {0x8AB2, 0x89DB},{0x8AB9, 0x94EE},{0x8ABC, 0x8B62},{0x8ABE, 0xEE8B},{0x8ABF, 0x92B2},{0x8AC2, 0xE67A},{0x8AC4, 0xE678},{0x8AC7, 0x926B},
- {0x8ACB, 0x90BF},{0x8ACC, 0x8AD0},{0x8ACD, 0xE679},{0x8ACF, 0x907A},{0x8AD2, 0x97C8},{0x8AD6, 0x985F},{0x8ADA, 0xE67B},{0x8ADB, 0xE687},
- {0x8ADC, 0x92B3},{0x8ADE, 0xE686},{0x8ADF, 0xEE8C},{0x8AE0, 0xE683},{0x8AE1, 0xE68B},{0x8AE2, 0xE684},{0x8AE4, 0xE680},{0x8AE6, 0x92FA},
- {0x8AE7, 0xE67E},{0x8AEB, 0xE67C},{0x8AED, 0x9740},{0x8AEE, 0x8E90},{0x8AF1, 0xE681},{0x8AF3, 0xE67D},{0x8AF6, 0xEE8E},{0x8AF7, 0xE685},
- {0x8AF8, 0x8F94},{0x8AFA, 0x8CBF},{0x8AFE, 0x91F8},{0x8B00, 0x9664},{0x8B01, 0x8979},{0x8B02, 0x88E0},{0x8B04, 0x93A3},{0x8B07, 0xE689},
- {0x8B0C, 0xE688},{0x8B0E, 0x93E4},{0x8B10, 0xE68D},{0x8B14, 0xE682},{0x8B16, 0xE68C},{0x8B17, 0xE68E},{0x8B19, 0x8CAA},{0x8B1A, 0xE68A},
- {0x8B1B, 0x8D75},{0x8B1D, 0x8ED3},{0x8B20, 0xE68F},{0x8B21, 0x9777},{0x8B26, 0xE692},{0x8B28, 0xE695},{0x8B2B, 0xE693},{0x8B2C, 0x9554},
- {0x8B33, 0xE690},{0x8B39, 0x8BDE},{0x8B3E, 0xE694},{0x8B41, 0xE696},{0x8B49, 0xE69A},{0x8B4C, 0xE697},{0x8B4E, 0xE699},{0x8B4F, 0xE698},
- {0x8B53, 0xEE8F},{0x8B56, 0xE69B},{0x8B58, 0x8EAF},{0x8B5A, 0xE69D},{0x8B5B, 0xE69C},{0x8B5C, 0x9588},{0x8B5F, 0xE69F},{0x8B66, 0x8C78},
- {0x8B6B, 0xE69E},{0x8B6C, 0xE6A0},{0x8B6F, 0xE6A1},{0x8B70, 0x8B63},{0x8B71, 0xE3BF},{0x8B72, 0x8FF7},{0x8B74, 0xE6A2},{0x8B77, 0x8CEC},
- {0x8B7D, 0xE6A3},{0x8B7F, 0xEE90},{0x8B80, 0xE6A4},{0x8B83, 0x8E5D},{0x8B8A, 0x9DCC},{0x8B8C, 0xE6A5},{0x8B8E, 0xE6A6},{0x8B90, 0x8F51},
- {0x8B92, 0xE6A7},{0x8B93, 0xE6A8},{0x8B96, 0xE6A9},{0x8B99, 0xE6AA},{0x8B9A, 0xE6AB},{0x8C37, 0x924A},{0x8C3A, 0xE6AC},{0x8C3F, 0xE6AE},
- {0x8C41, 0xE6AD},{0x8C46, 0x93A4},{0x8C48, 0xE6AF},{0x8C4A, 0x964C},{0x8C4C, 0xE6B0},{0x8C4E, 0xE6B1},{0x8C50, 0xE6B2},{0x8C55, 0xE6B3},
- {0x8C5A, 0x93D8},{0x8C61, 0x8FDB},{0x8C62, 0xE6B4},{0x8C6A, 0x8D8B},{0x8C6B, 0x98AC},{0x8C6C, 0xE6B5},{0x8C78, 0xE6B6},{0x8C79, 0x955E},
- {0x8C7A, 0xE6B7},{0x8C7C, 0xE6BF},{0x8C82, 0xE6B8},{0x8C85, 0xE6BA},{0x8C89, 0xE6B9},{0x8C8A, 0xE6BB},{0x8C8C, 0x9665},{0x8C8D, 0xE6BC},
- {0x8C8E, 0xE6BD},{0x8C94, 0xE6BE},{0x8C98, 0xE6C0},{0x8C9D, 0x8A4C},{0x8C9E, 0x92E5},{0x8CA0, 0x9589},{0x8CA1, 0x8DE0},{0x8CA2, 0x8D76},
- {0x8CA7, 0x956E},{0x8CA8, 0x89DD},{0x8CA9, 0x94CC},{0x8CAA, 0xE6C3},{0x8CAB, 0x8AD1},{0x8CAC, 0x90D3},{0x8CAD, 0xE6C2},{0x8CAE, 0xE6C7},
- {0x8CAF, 0x9299},{0x8CB0, 0x96E1},{0x8CB2, 0xE6C5},{0x8CB3, 0xE6C6},{0x8CB4, 0x8B4D},{0x8CB6, 0xE6C8},{0x8CB7, 0x9483},{0x8CB8, 0x91DD},
- {0x8CBB, 0x94EF},{0x8CBC, 0x935C},{0x8CBD, 0xE6C4},{0x8CBF, 0x9666},{0x8CC0, 0x89EA},{0x8CC1, 0xE6CA},{0x8CC2, 0x9847},{0x8CC3, 0x92C0},
- {0x8CC4, 0x9864},{0x8CC7, 0x8E91},{0x8CC8, 0xE6C9},{0x8CCA, 0x91AF},{0x8CCD, 0xE6DA},{0x8CCE, 0x9147},{0x8CD1, 0x93F6},{0x8CD3, 0x956F},
- {0x8CDA, 0xE6CD},{0x8CDB, 0x8E5E},{0x8CDC, 0x8E92},{0x8CDE, 0x8FDC},{0x8CE0, 0x9485},{0x8CE2, 0x8CAB},{0x8CE3, 0xE6CC},{0x8CE4, 0xE6CB},
- {0x8CE6, 0x958A},{0x8CEA, 0x8EBF},{0x8CED, 0x9371},{0x8CF0, 0xEE91},{0x8CF4, 0xEE92},{0x8CFA, 0xE6CF},{0x8CFB, 0xE6D0},{0x8CFC, 0x8D77},
- {0x8CFD, 0xE6CE},{0x8D04, 0xE6D1},{0x8D05, 0xE6D2},{0x8D07, 0xE6D4},{0x8D08, 0x91A1},{0x8D0A, 0xE6D3},{0x8D0B, 0x8AE4},{0x8D0D, 0xE6D6},
- {0x8D0F, 0xE6D5},{0x8D10, 0xE6D7},{0x8D12, 0xEE93},{0x8D13, 0xE6D9},{0x8D14, 0xE6DB},{0x8D16, 0xE6DC},{0x8D64, 0x90D4},{0x8D66, 0x8ECD},
- {0x8D67, 0xE6DD},{0x8D6B, 0x8A71},{0x8D6D, 0xE6DE},{0x8D70, 0x9196},{0x8D71, 0xE6DF},{0x8D73, 0xE6E0},{0x8D74, 0x958B},{0x8D76, 0xEE94},
- {0x8D77, 0x8B4E},{0x8D81, 0xE6E1},{0x8D85, 0x92B4},{0x8D8A, 0x897A},{0x8D99, 0xE6E2},{0x8DA3, 0x8EEF},{0x8DA8, 0x9096},{0x8DB3, 0x91AB},
- {0x8DBA, 0xE6E5},{0x8DBE, 0xE6E4},{0x8DC2, 0xE6E3},{0x8DCB, 0xE6EB},{0x8DCC, 0xE6E9},{0x8DCF, 0xE6E6},{0x8DD6, 0xE6E8},{0x8DDA, 0xE6E7},
- {0x8DDB, 0xE6EA},{0x8DDD, 0x8B97},{0x8DDF, 0xE6EE},{0x8DE1, 0x90D5},{0x8DE3, 0xE6EF},{0x8DE8, 0x8CD7},{0x8DEA, 0xE6EC},{0x8DEB, 0xE6ED},
- {0x8DEF, 0x9848},{0x8DF3, 0x92B5},{0x8DF5, 0x9148},{0x8DFC, 0xE6F0},{0x8DFF, 0xE6F3},{0x8E08, 0xE6F1},{0x8E09, 0xE6F2},{0x8E0A, 0x9778},
- {0x8E0F, 0x93A5},{0x8E10, 0xE6F6},{0x8E1D, 0xE6F4},{0x8E1E, 0xE6F5},{0x8E1F, 0xE6F7},{0x8E2A, 0xE748},{0x8E30, 0xE6FA},{0x8E34, 0xE6FB},
- {0x8E35, 0xE6F9},{0x8E42, 0xE6F8},{0x8E44, 0x92FB},{0x8E47, 0xE740},{0x8E48, 0xE744},{0x8E49, 0xE741},{0x8E4A, 0xE6FC},{0x8E4C, 0xE742},
- {0x8E50, 0xE743},{0x8E55, 0xE74A},{0x8E59, 0xE745},{0x8E5F, 0x90D6},{0x8E60, 0xE747},{0x8E63, 0xE749},{0x8E64, 0xE746},{0x8E72, 0xE74C},
- {0x8E74, 0x8F52},{0x8E76, 0xE74B},{0x8E7C, 0xE74D},{0x8E81, 0xE74E},{0x8E84, 0xE751},{0x8E85, 0xE750},{0x8E87, 0xE74F},{0x8E8A, 0xE753},
- {0x8E8B, 0xE752},{0x8E8D, 0x96F4},{0x8E91, 0xE755},{0x8E93, 0xE754},{0x8E94, 0xE756},{0x8E99, 0xE757},{0x8EA1, 0xE759},{0x8EAA, 0xE758},
- {0x8EAB, 0x9067},{0x8EAC, 0xE75A},{0x8EAF, 0x8BEB},{0x8EB0, 0xE75B},{0x8EB1, 0xE75D},{0x8EBE, 0xE75E},{0x8EC5, 0xE75F},{0x8EC6, 0xE75C},
- {0x8EC8, 0xE760},{0x8ECA, 0x8ED4},{0x8ECB, 0xE761},{0x8ECC, 0x8B4F},{0x8ECD, 0x8C52},{0x8ECF, 0xEE96},{0x8ED2, 0x8CAC},{0x8EDB, 0xE762},
- {0x8EDF, 0x93EE},{0x8EE2, 0x935D},{0x8EE3, 0xE763},{0x8EEB, 0xE766},{0x8EF8, 0x8EB2},{0x8EFB, 0xE765},{0x8EFC, 0xE764},{0x8EFD, 0x8C79},
- {0x8EFE, 0xE767},{0x8F03, 0x8A72},{0x8F05, 0xE769},{0x8F09, 0x8DDA},{0x8F0A, 0xE768},{0x8F0C, 0xE771},{0x8F12, 0xE76B},{0x8F13, 0xE76D},
- {0x8F14, 0x95E3},{0x8F15, 0xE76A},{0x8F19, 0xE76C},{0x8F1B, 0xE770},{0x8F1C, 0xE76E},{0x8F1D, 0x8B50},{0x8F1F, 0xE76F},{0x8F26, 0xE772},
- {0x8F29, 0x9479},{0x8F2A, 0x97D6},{0x8F2F, 0x8F53},{0x8F33, 0xE773},{0x8F38, 0x9741},{0x8F39, 0xE775},{0x8F3B, 0xE774},{0x8F3E, 0xE778},
- {0x8F3F, 0x9760},{0x8F42, 0xE777},{0x8F44, 0x8A8D},{0x8F45, 0xE776},{0x8F46, 0xE77B},{0x8F49, 0xE77A},{0x8F4C, 0xE779},{0x8F4D, 0x9351},
- {0x8F4E, 0xE77C},{0x8F57, 0xE77D},{0x8F5C, 0xE77E},{0x8F5F, 0x8D8C},{0x8F61, 0x8C44},{0x8F62, 0xE780},{0x8F63, 0xE781},{0x8F64, 0xE782},
- {0x8F9B, 0x9068},{0x8F9C, 0xE783},{0x8F9E, 0x8EAB},{0x8F9F, 0xE784},{0x8FA3, 0xE785},{0x8FA7, 0x999F},{0x8FA8, 0x999E},{0x8FAD, 0xE786},
- {0x8FAE, 0xE390},{0x8FAF, 0xE787},{0x8FB0, 0x9243},{0x8FB1, 0x904A},{0x8FB2, 0x945F},{0x8FB7, 0xE788},{0x8FBA, 0x95D3},{0x8FBB, 0x92D2},
- {0x8FBC, 0x8D9E},{0x8FBF, 0x9248},{0x8FC2, 0x8949},{0x8FC4, 0x9698},{0x8FC5, 0x9076},{0x8FCE, 0x8C7D},{0x8FD1, 0x8BDF},{0x8FD4, 0x95D4},
- {0x8FDA, 0xE789},{0x8FE2, 0xE78B},{0x8FE5, 0xE78A},{0x8FE6, 0x89DE},{0x8FE9, 0x93F4},{0x8FEA, 0xE78C},{0x8FEB, 0x9497},{0x8FED, 0x9352},
- {0x8FEF, 0xE78D},{0x8FF0, 0x8F71},{0x8FF4, 0xE78F},{0x8FF7, 0x96C0},{0x8FF8, 0xE79E},{0x8FF9, 0xE791},{0x8FFA, 0xE792},{0x8FFD, 0x92C7},
- {0x9000, 0x91DE},{0x9001, 0x9197},{0x9003, 0x93A6},{0x9005, 0xE790},{0x9006, 0x8B74},{0x900B, 0xE799},{0x900D, 0xE796},{0x900E, 0xE7A3},
- {0x900F, 0x93A7},{0x9010, 0x9280},{0x9011, 0xE793},{0x9013, 0x92FC},{0x9014, 0x9372},{0x9015, 0xE794},{0x9016, 0xE798},{0x9017, 0x9080},
- {0x9019, 0x9487},{0x901A, 0x92CA},{0x901D, 0x90C0},{0x901E, 0xE797},{0x901F, 0x91AC},{0x9020, 0x91A2},{0x9021, 0xE795},{0x9022, 0x88A7},
- {0x9023, 0x9841},{0x9027, 0xE79A},{0x902E, 0x91DF},{0x9031, 0x8F54},{0x9032, 0x9069},{0x9035, 0xE79C},{0x9036, 0xE79B},{0x9038, 0x88ED},
- {0x9039, 0xE79D},{0x903C, 0x954E},{0x903E, 0xE7A5},{0x9041, 0x93D9},{0x9042, 0x908B},{0x9045, 0x9278},{0x9047, 0x8BF6},{0x9049, 0xE7A4},
- {0x904A, 0x9756},{0x904B, 0x895E},{0x904D, 0x95D5},{0x904E, 0x89DF},{0x904F, 0xE79F},{0x9050, 0xE7A0},{0x9051, 0xE7A1},{0x9052, 0xE7A2},
- {0x9053, 0x93B9},{0x9054, 0x9242},{0x9055, 0x88E1},{0x9056, 0xE7A6},{0x9058, 0xE7A7},{0x9059, 0xEAA1},{0x905C, 0x91BB},{0x905E, 0xE7A8},
- {0x9060, 0x8993},{0x9061, 0x916B},{0x9063, 0x8CAD},{0x9065, 0x9779},{0x9067, 0xEE99},{0x9068, 0xE7A9},{0x9069, 0x934B},{0x906D, 0x9198},
- {0x906E, 0x8ED5},{0x906F, 0xE7AA},{0x9072, 0xE7AD},{0x9075, 0x8F85},{0x9076, 0xE7AB},{0x9077, 0x914A},{0x9078, 0x9149},{0x907A, 0x88E2},
- {0x907C, 0x97C9},{0x907D, 0xE7AF},{0x907F, 0x94F0},{0x9080, 0xE7B1},{0x9081, 0xE7B0},{0x9082, 0xE7AE},{0x9083, 0xE284},{0x9084, 0x8AD2},
- {0x9087, 0xE78E},{0x9089, 0xE7B3},{0x908A, 0xE7B2},{0x908F, 0xE7B4},{0x9091, 0x9757},{0x90A3, 0x93DF},{0x90A6, 0x964D},{0x90A8, 0xE7B5},
- {0x90AA, 0x8ED7},{0x90AF, 0xE7B6},{0x90B1, 0xE7B7},{0x90B5, 0xE7B8},{0x90B8, 0x9340},{0x90C1, 0x88E8},{0x90CA, 0x8D78},{0x90CE, 0x9859},
- {0x90DB, 0xE7BC},{0x90DE, 0xEE9A},{0x90E1, 0x8C53},{0x90E2, 0xE7B9},{0x90E4, 0xE7BA},{0x90E8, 0x9594},{0x90ED, 0x8A73},{0x90F5, 0x9758},
- {0x90F7, 0x8BBD},{0x90FD, 0x9373},{0x9102, 0xE7BD},{0x9112, 0xE7BE},{0x9115, 0xEE9C},{0x9119, 0xE7BF},{0x9127, 0xEE9D},{0x912D, 0x9341},
- {0x9130, 0xE7C1},{0x9132, 0xE7C0},{0x9149, 0x93D1},{0x914A, 0xE7C2},{0x914B, 0x8F55},{0x914C, 0x8EDE},{0x914D, 0x947A},{0x914E, 0x9291},
- {0x9152, 0x8EF0},{0x9154, 0x908C},{0x9156, 0xE7C3},{0x9158, 0xE7C4},{0x9162, 0x907C},{0x9163, 0xE7C5},{0x9165, 0xE7C6},{0x9169, 0xE7C7},
- {0x916A, 0x978F},{0x916C, 0x8F56},{0x9172, 0xE7C9},{0x9173, 0xE7C8},{0x9175, 0x8D79},{0x9177, 0x8D93},{0x9178, 0x8E5F},{0x9182, 0xE7CC},
- {0x9187, 0x8F86},{0x9189, 0xE7CB},{0x918B, 0xE7CA},{0x918D, 0x91E7},{0x9190, 0x8CED},{0x9192, 0x90C1},{0x9197, 0x94AE},{0x919C, 0x8F58},
- {0x91A2, 0xE7CD},{0x91A4, 0x8FDD},{0x91AA, 0xE7D0},{0x91AB, 0xE7CE},{0x91AF, 0xE7CF},{0x91B4, 0xE7D2},{0x91B5, 0xE7D1},{0x91B8, 0x8FF8},
- {0x91BA, 0xE7D3},{0x91C0, 0xE7D4},{0x91C1, 0xE7D5},{0x91C6, 0x94CE},{0x91C7, 0x8DD1},{0x91C8, 0x8EDF},{0x91C9, 0xE7D6},{0x91CB, 0xE7D7},
- {0x91CC, 0x97A2},{0x91CD, 0x8F64},{0x91CE, 0x96EC},{0x91CF, 0x97CA},{0x91D0, 0xE7D8},{0x91D1, 0x8BE0},{0x91D6, 0xE7D9},{0x91D7, 0xEE9F},
- {0x91D8, 0x9342},{0x91DA, 0xEE9E},{0x91DB, 0xE7DC},{0x91DC, 0x8A98},{0x91DD, 0x906A},{0x91DE, 0xEEA0},{0x91DF, 0xE7DA},{0x91E1, 0xE7DB},
- {0x91E3, 0x92DE},{0x91E4, 0xEEA3},{0x91E5, 0xEEA4},{0x91E6, 0x9674},{0x91E7, 0x8BFA},{0x91ED, 0xEEA1},{0x91EE, 0xEEA2},{0x91F5, 0xE7DE},
- {0x91F6, 0xE7DF},{0x91FC, 0xE7DD},{0x91FF, 0xE7E1},{0x9206, 0xEEA5},{0x920A, 0xEEA7},{0x920D, 0x93DD},{0x920E, 0x8A62},{0x9210, 0xEEA6},
- {0x9211, 0xE7E5},{0x9214, 0xE7E2},{0x9215, 0xE7E4},{0x921E, 0xE7E0},{0x9229, 0xE86E},{0x922C, 0xE7E3},{0x9234, 0x97E9},{0x9237, 0x8CD8},
- {0x9239, 0xEEAE},{0x923A, 0xEEA8},{0x923C, 0xEEAA},{0x923F, 0xE7ED},{0x9240, 0xEEA9},{0x9244, 0x9353},{0x9245, 0xE7E8},{0x9248, 0xE7EB},
- {0x9249, 0xE7E9},{0x924B, 0xE7EE},{0x924E, 0xEEAB},{0x9250, 0xE7EF},{0x9251, 0xEEAD},{0x9257, 0xE7E7},{0x9259, 0xEEAC},{0x925A, 0xE7F4},
- {0x925B, 0x8994},{0x925E, 0xE7E6},{0x9262, 0x94AB},{0x9264, 0xE7EA},{0x9266, 0x8FDE},{0x9267, 0xEEAF},{0x9271, 0x8D7A},{0x9277, 0xEEB1},
- {0x9278, 0xEEB2},{0x927E, 0x9667},{0x9280, 0x8BE2},{0x9283, 0x8F65},{0x9285, 0x93BA},{0x9288, 0xED43},{0x9291, 0x914C},{0x9293, 0xE7F2},
- {0x9295, 0xE7EC},{0x9296, 0xE7F1},{0x9298, 0x96C1},{0x929A, 0x92B6},{0x929B, 0xE7F3},{0x929C, 0xE7F0},{0x92A7, 0xEEB0},{0x92AD, 0x914B},
- {0x92B7, 0xE7F7},{0x92B9, 0xE7F6},{0x92CF, 0xE7F5},{0x92D0, 0xEEB6},{0x92D2, 0x964E},{0x92D3, 0xEEBA},{0x92D5, 0xEEB8},{0x92D7, 0xEEB4},
- {0x92D9, 0xEEB5},{0x92E0, 0xEEB9},{0x92E4, 0x8F9B},{0x92E7, 0xEEB3},{0x92E9, 0xE7F8},{0x92EA, 0x95DD},{0x92ED, 0x8973},{0x92F2, 0x9565},
- {0x92F3, 0x9292},{0x92F8, 0x8B98},{0x92F9, 0xED49},{0x92FA, 0xE7FA},{0x92FB, 0xEEBD},{0x92FC, 0x8D7C},{0x92FF, 0xEEC0},{0x9302, 0xEEC2},
- {0x9306, 0x8E4B},{0x930F, 0xE7F9},{0x9310, 0x908D},{0x9318, 0x908E},{0x9319, 0xE840},{0x931A, 0xE842},{0x931D, 0xEEC1},{0x931E, 0xEEBF},
- {0x9320, 0x8FF9},{0x9321, 0xEEBC},{0x9322, 0xE841},{0x9323, 0xE843},{0x9325, 0xEEBB},{0x9326, 0x8BD1},{0x9328, 0x9564},{0x932B, 0x8EE0},
- {0x932C, 0x9842},{0x932E, 0xE7FC},{0x932F, 0x8DF6},{0x9332, 0x985E},{0x9335, 0xE845},{0x933A, 0xE844},{0x933B, 0xE846},{0x9344, 0xE7FB},
- {0x9348, 0xED42},{0x934B, 0x93E7},{0x934D, 0x9374},{0x9354, 0x92D5},{0x9356, 0xE84B},{0x9357, 0xEEC4},{0x935B, 0x9262},{0x935C, 0xE847},
- {0x9360, 0xE848},{0x936C, 0x8C4C},{0x936E, 0xE84A},{0x9370, 0xEEC3},{0x9375, 0x8CAE},{0x937C, 0xE849},{0x937E, 0x8FDF},{0x938C, 0x8A99},
- {0x9394, 0xE84F},{0x9396, 0x8DBD},{0x9397, 0x9199},{0x939A, 0x92C8},{0x93A4, 0xEEC5},{0x93A7, 0x8A5A},{0x93AC, 0xE84D},{0x93AD, 0xE84E},
- {0x93AE, 0x92C1},{0x93B0, 0xE84C},{0x93B9, 0xE850},{0x93C3, 0xE856},{0x93C6, 0xEEC6},{0x93C8, 0xE859},{0x93D0, 0xE858},{0x93D1, 0x934C},
- {0x93D6, 0xE851},{0x93D7, 0xE852},{0x93D8, 0xE855},{0x93DD, 0xE857},{0x93DE, 0xEEC7},{0x93E1, 0x8BBE},{0x93E4, 0xE85A},{0x93E5, 0xE854},
- {0x93E8, 0xE853},{0x93F8, 0xEEC8},{0x9403, 0xE85E},{0x9407, 0xE85F},{0x9410, 0xE860},{0x9413, 0xE85D},{0x9414, 0xE85C},{0x9418, 0x8FE0},
- {0x9419, 0x93A8},{0x941A, 0xE85B},{0x9421, 0xE864},{0x942B, 0xE862},{0x9431, 0xEEC9},{0x9435, 0xE863},{0x9436, 0xE861},{0x9438, 0x91F6},
- {0x943A, 0xE865},{0x9441, 0xE866},{0x9444, 0xE868},{0x9445, 0xEECA},{0x9448, 0xEECB},{0x9451, 0x8AD3},{0x9452, 0xE867},{0x9453, 0x96F8},
- {0x945A, 0xE873},{0x945B, 0xE869},{0x945E, 0xE86C},{0x9460, 0xE86A},{0x9462, 0xE86B},{0x946A, 0xE86D},{0x9470, 0xE86F},{0x9475, 0xE870},
- {0x9477, 0xE871},{0x947C, 0xE874},{0x947D, 0xE872},{0x947E, 0xE875},{0x947F, 0xE877},{0x9481, 0xE876},{0x9577, 0x92B7},{0x9580, 0x96E5},
- {0x9582, 0xE878},{0x9583, 0x914D},{0x9587, 0xE879},{0x9589, 0x95C2},{0x958A, 0xE87A},{0x958B, 0x8A4A},{0x958F, 0x895B},{0x9591, 0x8AD5},
- {0x9592, 0xEECC},{0x9593, 0x8AD4},{0x9594, 0xE87B},{0x9596, 0xE87C},{0x9598, 0xE87D},{0x9599, 0xE87E},{0x95A0, 0xE880},{0x95A2, 0x8AD6},
- {0x95A3, 0x8A74},{0x95A4, 0x8D7D},{0x95A5, 0x94B4},{0x95A7, 0xE882},{0x95A8, 0xE881},{0x95AD, 0xE883},{0x95B2, 0x897B},{0x95B9, 0xE886},
- {0x95BB, 0xE885},{0x95BC, 0xE884},{0x95BE, 0xE887},{0x95C3, 0xE88A},{0x95C7, 0x88C5},{0x95CA, 0xE888},{0x95CC, 0xE88C},{0x95CD, 0xE88B},
- {0x95D4, 0xE88E},{0x95D5, 0xE88D},{0x95D6, 0xE88F},{0x95D8, 0x93AC},{0x95DC, 0xE890},{0x95E1, 0xE891},{0x95E2, 0xE893},{0x95E5, 0xE892},
- {0x961C, 0x958C},{0x9621, 0xE894},{0x9628, 0xE895},{0x962A, 0x8DE3},{0x962E, 0xE896},{0x962F, 0xE897},{0x9632, 0x9668},{0x963B, 0x916A},
- {0x963F, 0x88A2},{0x9640, 0x91C9},{0x9642, 0xE898},{0x9644, 0x958D},{0x964B, 0xE89B},{0x964C, 0xE899},{0x964D, 0x8D7E},{0x964F, 0xE89A},
- {0x9650, 0x8CC0},{0x965B, 0x95C3},{0x965C, 0xE89D},{0x965D, 0xE89F},{0x965E, 0xE89E},{0x965F, 0xE8A0},{0x9662, 0x8940},{0x9663, 0x9077},
- {0x9664, 0x8F9C},{0x9665, 0x8AD7},{0x9666, 0xE8A1},{0x966A, 0x9486},{0x966C, 0xE8A3},{0x9670, 0x8941},{0x9672, 0xE8A2},{0x9673, 0x92C2},
- {0x9675, 0x97CB},{0x9676, 0x93A9},{0x9677, 0xE89C},{0x9678, 0x97A4},{0x967A, 0x8CAF},{0x967D, 0x977A},{0x9685, 0x8BF7},{0x9686, 0x97B2},
- {0x9688, 0x8C47},{0x968A, 0x91E0},{0x968B, 0xE440},{0x968D, 0xE8A4},{0x968E, 0x8A4B},{0x968F, 0x908F},{0x9694, 0x8A75},{0x9695, 0xE8A6},
- {0x9697, 0xE8A7},{0x9698, 0xE8A5},{0x9699, 0x8C84},{0x969B, 0x8DDB},{0x969C, 0x8FE1},{0x969D, 0xEECF},{0x96A0, 0x8942},{0x96A3, 0x97D7},
- {0x96A7, 0xE8A9},{0x96A8, 0xE7AC},{0x96AA, 0xE8A8},{0x96AF, 0xEED0},{0x96B0, 0xE8AC},{0x96B1, 0xE8AA},{0x96B2, 0xE8AB},{0x96B4, 0xE8AD},
- {0x96B6, 0xE8AE},{0x96B7, 0x97EA},{0x96B8, 0xE8AF},{0x96B9, 0xE8B0},{0x96BB, 0x90C7},{0x96BC, 0x94B9},{0x96C0, 0x909D},{0x96C1, 0x8AE5},
- {0x96C4, 0x9759},{0x96C5, 0x89EB},{0x96C6, 0x8F57},{0x96C7, 0x8CD9},{0x96C9, 0xE8B3},{0x96CB, 0xE8B2},{0x96CC, 0x8E93},{0x96CD, 0xE8B4},
- {0x96CE, 0xE8B1},{0x96D1, 0x8E47},{0x96D5, 0xE8B8},{0x96D6, 0xE5AB},{0x96D9, 0x99D4},{0x96DB, 0x9097},{0x96DC, 0xE8B6},{0x96E2, 0x97A3},
- {0x96E3, 0x93EF},{0x96E8, 0x894A},{0x96EA, 0x90E1},{0x96EB, 0x8EB4},{0x96F0, 0x95B5},{0x96F2, 0x895F},{0x96F6, 0x97EB},{0x96F7, 0x978B},
- {0x96F9, 0xE8B9},{0x96FB, 0x9364},{0x9700, 0x8EF9},{0x9704, 0xE8BA},{0x9706, 0xE8BB},{0x9707, 0x906B},{0x9708, 0xE8BC},{0x970A, 0x97EC},
- {0x970D, 0xE8B7},{0x970E, 0xE8BE},{0x970F, 0xE8C0},{0x9711, 0xE8BF},{0x9713, 0xE8BD},{0x9716, 0xE8C1},{0x9719, 0xE8C2},{0x971C, 0x919A},
- {0x971E, 0x89E0},{0x9724, 0xE8C3},{0x9727, 0x96B6},{0x972A, 0xE8C4},{0x9730, 0xE8C5},{0x9732, 0x9849},{0x9733, 0xEED1},{0x9738, 0x9E50},
- {0x9739, 0xE8C6},{0x973B, 0xEED2},{0x973D, 0xE8C7},{0x973E, 0xE8C8},{0x9742, 0xE8CC},{0x9743, 0xEED3},{0x9744, 0xE8C9},{0x9746, 0xE8CA},
- {0x9748, 0xE8CB},{0x9749, 0xE8CD},{0x974D, 0xEED4},{0x974F, 0xEED5},{0x9751, 0xEED6},{0x9752, 0x90C2},{0x9755, 0xEED7},{0x9756, 0x96F5},
- {0x9759, 0x90C3},{0x975C, 0xE8CE},{0x975E, 0x94F1},{0x9760, 0xE8CF},{0x9761, 0xEA72},{0x9762, 0x96CA},{0x9764, 0xE8D0},{0x9766, 0xE8D1},
- {0x9768, 0xE8D2},{0x9769, 0x8A76},{0x976B, 0xE8D4},{0x976D, 0x9078},{0x9771, 0xE8D5},{0x9774, 0x8C43},{0x9779, 0xE8D6},{0x977A, 0xE8DA},
- {0x977C, 0xE8D8},{0x9781, 0xE8D9},{0x9784, 0x8A93},{0x9785, 0xE8D7},{0x9786, 0xE8DB},{0x978B, 0xE8DC},{0x978D, 0x88C6},{0x978F, 0xE8DD},
- {0x9790, 0xE8DE},{0x9798, 0x8FE2},{0x979C, 0xE8DF},{0x97A0, 0x8B66},{0x97A3, 0xE8E2},{0x97A6, 0xE8E1},{0x97A8, 0xE8E0},{0x97AB, 0xE691},
- {0x97AD, 0x95DA},{0x97B3, 0xE8E3},{0x97B4, 0xE8E4},{0x97C3, 0xE8E5},{0x97C6, 0xE8E6},{0x97C8, 0xE8E7},{0x97CB, 0xE8E8},{0x97D3, 0x8AD8},
- {0x97DC, 0xE8E9},{0x97ED, 0xE8EA},{0x97EE, 0x9442},{0x97F2, 0xE8EC},{0x97F3, 0x89B9},{0x97F5, 0xE8EF},{0x97F6, 0xE8EE},{0x97FB, 0x8943},
- {0x97FF, 0x8BBF},{0x9801, 0x95C5},{0x9802, 0x92B8},{0x9803, 0x8DA0},{0x9805, 0x8D80},{0x9806, 0x8F87},{0x9808, 0x907B},{0x980C, 0xE8F1},
- {0x980F, 0xE8F0},{0x9810, 0x9761},{0x9811, 0x8AE6},{0x9812, 0x94D0},{0x9813, 0x93DA},{0x9817, 0x909C},{0x9818, 0x97CC},{0x981A, 0x8C7A},
- {0x9821, 0xE8F4},{0x9824, 0xE8F3},{0x982C, 0x966A},{0x982D, 0x93AA},{0x9834, 0x896F},{0x9837, 0xE8F5},{0x9838, 0xE8F2},{0x983B, 0x9570},
- {0x983C, 0x978A},{0x983D, 0xE8F6},{0x9846, 0xE8F7},{0x984B, 0xE8F9},{0x984C, 0x91E8},{0x984D, 0x8A7A},{0x984E, 0x8A7B},{0x984F, 0xE8F8},
- {0x9854, 0x8AE7},{0x9855, 0x8CB0},{0x9857, 0xEED8},{0x9858, 0x8AE8},{0x985B, 0x935E},{0x985E, 0x97DE},{0x9865, 0xEED9},{0x9867, 0x8CDA},
- {0x986B, 0xE8FA},{0x986F, 0xE8FB},{0x9870, 0xE8FC},{0x9871, 0xE940},{0x9873, 0xE942},{0x9874, 0xE941},{0x98A8, 0x9597},{0x98AA, 0xE943},
- {0x98AF, 0xE944},{0x98B1, 0xE945},{0x98B6, 0xE946},{0x98C3, 0xE948},{0x98C4, 0xE947},{0x98C6, 0xE949},{0x98DB, 0x94F2},{0x98DC, 0xE3CA},
- {0x98DF, 0x9048},{0x98E2, 0x8B51},{0x98E9, 0xE94A},{0x98EB, 0xE94B},{0x98ED, 0x99AA},{0x98EE, 0x9F5A},{0x98EF, 0x94D1},{0x98F2, 0x88F9},
- {0x98F4, 0x88B9},{0x98FC, 0x8E94},{0x98FD, 0x964F},{0x98FE, 0x8FFC},{0x9903, 0xE94C},{0x9905, 0x96DD},{0x9909, 0xE94D},{0x990A, 0x977B},
- {0x990C, 0x8961},{0x9910, 0x8E60},{0x9912, 0xE94E},{0x9913, 0x89EC},{0x9914, 0xE94F},{0x9918, 0xE950},{0x991D, 0xE952},{0x991E, 0xE953},
- {0x9920, 0xE955},{0x9921, 0xE951},{0x9924, 0xE954},{0x9927, 0xEEDC},{0x9928, 0x8AD9},{0x992C, 0xE956},{0x992E, 0xE957},{0x993D, 0xE958},
- {0x993E, 0xE959},{0x9942, 0xE95A},{0x9945, 0xE95C},{0x9949, 0xE95B},{0x994B, 0xE95E},{0x994C, 0xE961},{0x9950, 0xE95D},{0x9951, 0xE95F},
- {0x9952, 0xE960},{0x9955, 0xE962},{0x9957, 0x8BC0},{0x9996, 0x8EF1},{0x9997, 0xE963},{0x9998, 0xE964},{0x9999, 0x8D81},{0x999E, 0xEEDE},
- {0x99A5, 0xE965},{0x99A8, 0x8A5D},{0x99AC, 0x946E},{0x99AD, 0xE966},{0x99AE, 0xE967},{0x99B3, 0x9279},{0x99B4, 0x93E9},{0x99BC, 0xE968},
- {0x99C1, 0x949D},{0x99C4, 0x91CA},{0x99C5, 0x8977},{0x99C6, 0x8BEC},{0x99C8, 0x8BED},{0x99D0, 0x9293},{0x99D1, 0xE96D},{0x99D2, 0x8BEE},
- {0x99D5, 0x89ED},{0x99D8, 0xE96C},{0x99DB, 0xE96A},{0x99DD, 0xE96B},{0x99DF, 0xE969},{0x99E2, 0xE977},{0x99ED, 0xE96E},{0x99EE, 0xE96F},
- {0x99F1, 0xE970},{0x99F2, 0xE971},{0x99F8, 0xE973},{0x99FB, 0xE972},{0x99FF, 0x8F78},{0x9A01, 0xE974},{0x9A05, 0xE976},{0x9A0E, 0x8B52},
- {0x9A0F, 0xE975},{0x9A12, 0x919B},{0x9A13, 0x8CB1},{0x9A19, 0xE978},{0x9A28, 0x91CB},{0x9A2B, 0xE979},{0x9A30, 0x93AB},{0x9A37, 0xE97A},
- {0x9A3E, 0xE980},{0x9A40, 0xE97D},{0x9A42, 0xE97C},{0x9A43, 0xE97E},{0x9A45, 0xE97B},{0x9A4D, 0xE982},{0x9A4E, 0xEEDF},{0x9A55, 0xE981},
- {0x9A57, 0xE984},{0x9A5A, 0x8BC1},{0x9A5B, 0xE983},{0x9A5F, 0xE985},{0x9A62, 0xE986},{0x9A64, 0xE988},{0x9A65, 0xE987},{0x9A69, 0xE989},
- {0x9A6A, 0xE98B},{0x9A6B, 0xE98A},{0x9AA8, 0x8D9C},{0x9AAD, 0xE98C},{0x9AB0, 0xE98D},{0x9AB8, 0x8A5B},{0x9ABC, 0xE98E},{0x9AC0, 0xE98F},
- {0x9AC4, 0x9091},{0x9ACF, 0xE990},{0x9AD1, 0xE991},{0x9AD3, 0xE992},{0x9AD4, 0xE993},{0x9AD8, 0x8D82},{0x9AD9, 0xEEE0},{0x9ADC, 0xEEE1},
- {0x9ADE, 0xE994},{0x9ADF, 0xE995},{0x9AE2, 0xE996},{0x9AE3, 0xE997},{0x9AE6, 0xE998},{0x9AEA, 0x94AF},{0x9AEB, 0xE99A},{0x9AED, 0x9545},
- {0x9AEE, 0xE99B},{0x9AEF, 0xE999},{0x9AF1, 0xE99D},{0x9AF4, 0xE99C},{0x9AF7, 0xE99E},{0x9AFB, 0xE99F},{0x9B06, 0xE9A0},{0x9B18, 0xE9A1},
- {0x9B1A, 0xE9A2},{0x9B1F, 0xE9A3},{0x9B22, 0xE9A4},{0x9B23, 0xE9A5},{0x9B25, 0xE9A6},{0x9B27, 0xE9A7},{0x9B28, 0xE9A8},{0x9B29, 0xE9A9},
- {0x9B2A, 0xE9AA},{0x9B2E, 0xE9AB},{0x9B2F, 0xE9AC},{0x9B31, 0x9F54},{0x9B32, 0xE9AD},{0x9B3B, 0xE2F6},{0x9B3C, 0x8B53},{0x9B41, 0x8A40},
- {0x9B42, 0x8DB0},{0x9B43, 0xE9AF},{0x9B44, 0xE9AE},{0x9B45, 0x96A3},{0x9B4D, 0xE9B1},{0x9B4E, 0xE9B2},{0x9B4F, 0xE9B0},{0x9B51, 0xE9B3},
- {0x9B54, 0x9682},{0x9B58, 0xE9B4},{0x9B5A, 0x8B9B},{0x9B6F, 0x9844},{0x9B72, 0xEEE3},{0x9B74, 0xE9B5},{0x9B75, 0xEEE2},{0x9B83, 0xE9B7},
- {0x9B8E, 0x88BC},{0x9B8F, 0xEEE4},{0x9B91, 0xE9B8},{0x9B92, 0x95A9},{0x9B93, 0xE9B6},{0x9B96, 0xE9B9},{0x9B97, 0xE9BA},{0x9B9F, 0xE9BB},
- {0x9BA0, 0xE9BC},{0x9BA8, 0xE9BD},{0x9BAA, 0x968E},{0x9BAB, 0x8E4C},{0x9BAD, 0x8DF8},{0x9BAE, 0x914E},{0x9BB1, 0xEEE5},{0x9BB4, 0xE9BE},
- {0x9BB9, 0xE9C1},{0x9BBB, 0xEEE6},{0x9BC0, 0xE9BF},{0x9BC6, 0xE9C2},{0x9BC9, 0x8CEF},{0x9BCA, 0xE9C0},{0x9BCF, 0xE9C3},{0x9BD1, 0xE9C4},
- {0x9BD2, 0xE9C5},{0x9BD4, 0xE9C9},{0x9BD6, 0x8E49},{0x9BDB, 0x91E2},{0x9BE1, 0xE9CA},{0x9BE2, 0xE9C7},{0x9BE3, 0xE9C6},{0x9BE4, 0xE9C8},
- {0x9BE8, 0x8C7E},{0x9BF0, 0xE9CE},{0x9BF1, 0xE9CD},{0x9BF2, 0xE9CC},{0x9BF5, 0x88B1},{0x9C00, 0xEEE7},{0x9C04, 0xE9D8},{0x9C06, 0xE9D4},
- {0x9C08, 0xE9D5},{0x9C09, 0xE9D1},{0x9C0A, 0xE9D7},{0x9C0C, 0xE9D3},{0x9C0D, 0x8A82},{0x9C10, 0x986B},{0x9C12, 0xE9D6},{0x9C13, 0xE9D2},
- {0x9C14, 0xE9D0},{0x9C15, 0xE9CF},{0x9C1B, 0xE9DA},{0x9C21, 0xE9DD},{0x9C24, 0xE9DC},{0x9C25, 0xE9DB},{0x9C2D, 0x9568},{0x9C2E, 0xE9D9},
- {0x9C2F, 0x88F1},{0x9C30, 0xE9DE},{0x9C32, 0xE9E0},{0x9C39, 0x8A8F},{0x9C3A, 0xE9CB},{0x9C3B, 0x8956},{0x9C3E, 0xE9E2},{0x9C46, 0xE9E1},
- {0x9C47, 0xE9DF},{0x9C48, 0x924C},{0x9C52, 0x9690},{0x9C57, 0x97D8},{0x9C5A, 0xE9E3},{0x9C60, 0xE9E4},{0x9C67, 0xE9E5},{0x9C76, 0xE9E6},
- {0x9C78, 0xE9E7},{0x9CE5, 0x92B9},{0x9CE7, 0xE9E8},{0x9CE9, 0x94B5},{0x9CEB, 0xE9ED},{0x9CEC, 0xE9E9},{0x9CF0, 0xE9EA},{0x9CF3, 0x9650},
- {0x9CF4, 0x96C2},{0x9CF6, 0x93CE},{0x9D03, 0xE9EE},{0x9D06, 0xE9EF},{0x9D07, 0x93BC},{0x9D08, 0xE9EC},{0x9D09, 0xE9EB},{0x9D0E, 0x89A8},
- {0x9D12, 0xE9F7},{0x9D15, 0xE9F6},{0x9D1B, 0x8995},{0x9D1F, 0xE9F4},{0x9D23, 0xE9F3},{0x9D26, 0xE9F1},{0x9D28, 0x8A9B},{0x9D2A, 0xE9F0},
- {0x9D2B, 0x8EB0},{0x9D2C, 0x89A7},{0x9D3B, 0x8D83},{0x9D3E, 0xE9FA},{0x9D3F, 0xE9F9},{0x9D41, 0xE9F8},{0x9D44, 0xE9F5},{0x9D46, 0xE9FB},
- {0x9D48, 0xE9FC},{0x9D50, 0xEA44},{0x9D51, 0xEA43},{0x9D59, 0xEA45},{0x9D5C, 0x894C},{0x9D5D, 0xEA40},{0x9D5E, 0xEA41},{0x9D60, 0x8D94},
- {0x9D61, 0x96B7},{0x9D64, 0xEA42},{0x9D6B, 0xEEE9},{0x9D6C, 0x9651},{0x9D6F, 0xEA4A},{0x9D70, 0xEEE8},{0x9D72, 0xEA46},{0x9D7A, 0xEA4B},
- {0x9D87, 0xEA48},{0x9D89, 0xEA47},{0x9D8F, 0x8C7B},{0x9D9A, 0xEA4C},{0x9DA4, 0xEA4D},{0x9DA9, 0xEA4E},{0x9DAB, 0xEA49},{0x9DAF, 0xE9F2},
- {0x9DB2, 0xEA4F},{0x9DB4, 0x92DF},{0x9DB8, 0xEA53},{0x9DBA, 0xEA54},{0x9DBB, 0xEA52},{0x9DC1, 0xEA51},{0x9DC2, 0xEA57},{0x9DC4, 0xEA50},
- {0x9DC6, 0xEA55},{0x9DCF, 0xEA56},{0x9DD3, 0xEA59},{0x9DD9, 0xEA58},{0x9DE6, 0xEA5B},{0x9DED, 0xEA5C},{0x9DEF, 0xEA5D},{0x9DF2, 0x9868},
- {0x9DF8, 0xEA5A},{0x9DF9, 0x91E9},{0x9DFA, 0x8DEB},{0x9DFD, 0xEA5E},{0x9E19, 0xEEEB},{0x9E1A, 0xEA5F},{0x9E1B, 0xEA60},{0x9E1E, 0xEA61},
- {0x9E75, 0xEA62},{0x9E78, 0x8CB2},{0x9E79, 0xEA63},{0x9E7D, 0xEA64},{0x9E7F, 0x8EAD},{0x9E81, 0xEA65},{0x9E88, 0xEA66},{0x9E8B, 0xEA67},
- {0x9E8C, 0xEA68},{0x9E91, 0xEA6B},{0x9E92, 0xEA69},{0x9E93, 0x985B},{0x9E95, 0xEA6A},{0x9E97, 0x97ED},{0x9E9D, 0xEA6C},{0x9E9F, 0x97D9},
- {0x9EA5, 0xEA6D},{0x9EA6, 0x949E},{0x9EA9, 0xEA6E},{0x9EAA, 0xEA70},{0x9EAD, 0xEA71},{0x9EB8, 0xEA6F},{0x9EB9, 0x8D8D},{0x9EBA, 0x96CB},
- {0x9EBB, 0x9683},{0x9EBC, 0x9BF5},{0x9EBE, 0x9F80},{0x9EBF, 0x969B},{0x9EC4, 0x89A9},{0x9ECC, 0xEA73},{0x9ECD, 0x8B6F},{0x9ECE, 0xEA74},
- {0x9ECF, 0xEA75},{0x9ED0, 0xEA76},{0x9ED1, 0xEEEC},{0x9ED2, 0x8D95},{0x9ED4, 0xEA77},{0x9ED8, 0xE0D2},{0x9ED9, 0x96D9},{0x9EDB, 0x91E1},
- {0x9EDC, 0xEA78},{0x9EDD, 0xEA7A},{0x9EDE, 0xEA79},{0x9EE0, 0xEA7B},{0x9EE5, 0xEA7C},{0x9EE8, 0xEA7D},{0x9EEF, 0xEA7E},{0x9EF4, 0xEA80},
- {0x9EF6, 0xEA81},{0x9EF7, 0xEA82},{0x9EF9, 0xEA83},{0x9EFB, 0xEA84},{0x9EFC, 0xEA85},{0x9EFD, 0xEA86},{0x9F07, 0xEA87},{0x9F08, 0xEA88},
- {0x9F0E, 0x9343},{0x9F13, 0x8CDB},{0x9F15, 0xEA8A},{0x9F20, 0x916C},{0x9F21, 0xEA8B},{0x9F2C, 0xEA8C},{0x9F3B, 0x9540},{0x9F3E, 0xEA8D},
- {0x9F4A, 0xEA8E},{0x9F4B, 0xE256},{0x9F4E, 0xE6D8},{0x9F4F, 0xE8EB},{0x9F52, 0xEA8F},{0x9F54, 0xEA90},{0x9F5F, 0xEA92},{0x9F60, 0xEA93},
- {0x9F61, 0xEA94},{0x9F62, 0x97EE},{0x9F63, 0xEA91},{0x9F66, 0xEA95},{0x9F67, 0xEA96},{0x9F6A, 0xEA98},{0x9F6C, 0xEA97},{0x9F72, 0xEA9A},
- {0x9F76, 0xEA9B},{0x9F77, 0xEA99},{0x9F8D, 0x97B4},{0x9F95, 0xEA9C},{0x9F9C, 0xEA9D},{0x9F9D, 0xE273},{0x9FA0, 0xEA9E},{0xF929, 0xEDC4},
- {0xF9DC, 0xEECD},{0xFA0E, 0xED73},{0xFA0F, 0xED7E},{0xFA10, 0xED80},{0xFA11, 0xED95},{0xFA12, 0xEDBC},{0xFA13, 0xEDCC},{0xFA14, 0xEDCE},
- {0xFA15, 0xEDF9},{0xFA16, 0xEE42},{0xFA17, 0xEE59},{0xFA18, 0xEE61},{0xFA19, 0xEE62},{0xFA1A, 0xEE63},{0xFA1B, 0xEE65},{0xFA1C, 0xEE69},
- {0xFA1D, 0xEE6C},{0xFA1E, 0xEE75},{0xFA1F, 0xEE81},{0xFA20, 0xEE83},{0xFA21, 0xEE84},{0xFA22, 0xEE8D},{0xFA23, 0xEE95},{0xFA24, 0xEE97},
- {0xFA25, 0xEE98},{0xFA26, 0xEE9B},{0xFA27, 0xEEB7},{0xFA28, 0xEEBE},{0xFA29, 0xEECE},{0xFA2A, 0xEEDA},{0xFA2B, 0xEEDB},{0xFA2C, 0xEEDD},
- {0xFA2D, 0xEEEA},{0xFF01, 0x8149},{0xFF02, 0xEEFC},{0xFF03, 0x8194},{0xFF04, 0x8190},{0xFF05, 0x8193},{0xFF06, 0x8195},{0xFF07, 0xEEFB},
- {0xFF08, 0x8169},{0xFF09, 0x816A},{0xFF0A, 0x8196},{0xFF0B, 0x817B},{0xFF0C, 0x8143},{0xFF0D, 0x817C},{0xFF0E, 0x8144},{0xFF0F, 0x815E},
- {0xFF10, 0x824F},{0xFF11, 0x8250},{0xFF12, 0x8251},{0xFF13, 0x8252},{0xFF14, 0x8253},{0xFF15, 0x8254},{0xFF16, 0x8255},{0xFF17, 0x8256},
- {0xFF18, 0x8257},{0xFF19, 0x8258},{0xFF1A, 0x8146},{0xFF1B, 0x8147},{0xFF1C, 0x8183},{0xFF1D, 0x8181},{0xFF1E, 0x8184},{0xFF1F, 0x8148},
- {0xFF20, 0x8197},{0xFF21, 0x8260},{0xFF22, 0x8261},{0xFF23, 0x8262},{0xFF24, 0x8263},{0xFF25, 0x8264},{0xFF26, 0x8265},{0xFF27, 0x8266},
- {0xFF28, 0x8267},{0xFF29, 0x8268},{0xFF2A, 0x8269},{0xFF2B, 0x826A},{0xFF2C, 0x826B},{0xFF2D, 0x826C},{0xFF2E, 0x826D},{0xFF2F, 0x826E},
- {0xFF30, 0x826F},{0xFF31, 0x8270},{0xFF32, 0x8271},{0xFF33, 0x8272},{0xFF34, 0x8273},{0xFF35, 0x8274},{0xFF36, 0x8275},{0xFF37, 0x8276},
- {0xFF38, 0x8277},{0xFF39, 0x8278},{0xFF3A, 0x8279},{0xFF3B, 0x816D},{0xFF3C, 0x815F},{0xFF3D, 0x816E},{0xFF3E, 0x814F},{0xFF3F, 0x8151},
- {0xFF40, 0x814D},{0xFF41, 0x8281},{0xFF42, 0x8282},{0xFF43, 0x8283},{0xFF44, 0x8284},{0xFF45, 0x8285},{0xFF46, 0x8286},{0xFF47, 0x8287},
- {0xFF48, 0x8288},{0xFF49, 0x8289},{0xFF4A, 0x828A},{0xFF4B, 0x828B},{0xFF4C, 0x828C},{0xFF4D, 0x828D},{0xFF4E, 0x828E},{0xFF4F, 0x828F},
- {0xFF50, 0x8290},{0xFF51, 0x8291},{0xFF52, 0x8292},{0xFF53, 0x8293},{0xFF54, 0x8294},{0xFF55, 0x8295},{0xFF56, 0x8296},{0xFF57, 0x8297},
- {0xFF58, 0x8298},{0xFF59, 0x8299},{0xFF5A, 0x829A},{0xFF5B, 0x816F},{0xFF5C, 0x8162},{0xFF5D, 0x8170},{0xFF5E, 0x8160},{0xFF61, 0x00A1},
- {0xFF62, 0x00A2},{0xFF63, 0x00A3},{0xFF64, 0x00A4},{0xFF65, 0x00A5},{0xFF66, 0x00A6},{0xFF67, 0x00A7},{0xFF68, 0x00A8},{0xFF69, 0x00A9},
- {0xFF6A, 0x00AA},{0xFF6B, 0x00AB},{0xFF6C, 0x00AC},{0xFF6D, 0x00AD},{0xFF6E, 0x00AE},{0xFF6F, 0x00AF},{0xFF70, 0x00B0},{0xFF71, 0x00B1},
- {0xFF72, 0x00B2},{0xFF73, 0x00B3},{0xFF74, 0x00B4},{0xFF75, 0x00B5},{0xFF76, 0x00B6},{0xFF77, 0x00B7},{0xFF78, 0x00B8},{0xFF79, 0x00B9},
- {0xFF7A, 0x00BA},{0xFF7B, 0x00BB},{0xFF7C, 0x00BC},{0xFF7D, 0x00BD},{0xFF7E, 0x00BE},{0xFF7F, 0x00BF},{0xFF80, 0x00C0},{0xFF81, 0x00C1},
- {0xFF82, 0x00C2},{0xFF83, 0x00C3},{0xFF84, 0x00C4},{0xFF85, 0x00C5},{0xFF86, 0x00C6},{0xFF87, 0x00C7},{0xFF88, 0x00C8},{0xFF89, 0x00C9},
- {0xFF8A, 0x00CA},{0xFF8B, 0x00CB},{0xFF8C, 0x00CC},{0xFF8D, 0x00CD},{0xFF8E, 0x00CE},{0xFF8F, 0x00CF},{0xFF90, 0x00D0},{0xFF91, 0x00D1},
- {0xFF92, 0x00D2},{0xFF93, 0x00D3},{0xFF94, 0x00D4},{0xFF95, 0x00D5},{0xFF96, 0x00D6},{0xFF97, 0x00D7},{0xFF98, 0x00D8},{0xFF99, 0x00D9},
- {0xFF9A, 0x00DA},{0xFF9B, 0x00DB},{0xFF9C, 0x00DC},{0xFF9D, 0x00DD},{0xFF9E, 0x00DE},{0xFF9F, 0x00DF},{0xFFE0, 0x8191},{0xFFE1, 0x8192},
- {0xFFE2, 0x81CA},{0xFFE3, 0x8150},{0xFFE4, 0xEEFA},{0xFFE5, 0x818F}
-};
diff --git a/vcl/source/fontsubset/u2wansung.inc b/vcl/source/fontsubset/u2wansung.inc
deleted file mode 100644
index b321c9e58bfa..000000000000
--- a/vcl/source/fontsubset/u2wansung.inc
+++ /dev/null
@@ -1,1071 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// TODO: use generic RTL_TEXTENCODING_WANSUNG to get rid of this file
-
-sal_uInt16pair xlat_1_5[8319] = {
- {0x0020, 0x0020},{0x0021, 0x0021},{0x0022, 0x0022},{0x0023, 0x0023},{0x0024, 0x0024},{0x0025, 0x0025},{0x0026, 0x0026},{0x0027, 0x0027},
- {0x0028, 0x0028},{0x0029, 0x0029},{0x002A, 0x002A},{0x002B, 0x002B},{0x002C, 0x002C},{0x002D, 0x002D},{0x002E, 0x002E},{0x002F, 0x002F},
- {0x0030, 0x0030},{0x0031, 0x0031},{0x0032, 0x0032},{0x0033, 0x0033},{0x0034, 0x0034},{0x0035, 0x0035},{0x0036, 0x0036},{0x0037, 0x0037},
- {0x0038, 0x0038},{0x0039, 0x0039},{0x003A, 0x003A},{0x003B, 0x003B},{0x003C, 0x003C},{0x003D, 0x003D},{0x003E, 0x003E},{0x003F, 0x003F},
- {0x0040, 0x0040},{0x0041, 0x0041},{0x0042, 0x0042},{0x0043, 0x0043},{0x0044, 0x0044},{0x0045, 0x0045},{0x0046, 0x0046},{0x0047, 0x0047},
- {0x0048, 0x0048},{0x0049, 0x0049},{0x004A, 0x004A},{0x004B, 0x004B},{0x004C, 0x004C},{0x004D, 0x004D},{0x004E, 0x004E},{0x004F, 0x004F},
- {0x0050, 0x0050},{0x0051, 0x0051},{0x0052, 0x0052},{0x0053, 0x0053},{0x0054, 0x0054},{0x0055, 0x0055},{0x0056, 0x0056},{0x0057, 0x0057},
- {0x0058, 0x0058},{0x0059, 0x0059},{0x005A, 0x005A},{0x005B, 0x005B},{0x005C, 0x005C},{0x005D, 0x005D},{0x005E, 0x005E},{0x005F, 0x005F},
- {0x0060, 0x0060},{0x0061, 0x0061},{0x0062, 0x0062},{0x0063, 0x0063},{0x0064, 0x0064},{0x0065, 0x0065},{0x0066, 0x0066},{0x0067, 0x0067},
- {0x0068, 0x0068},{0x0069, 0x0069},{0x006A, 0x006A},{0x006B, 0x006B},{0x006C, 0x006C},{0x006D, 0x006D},{0x006E, 0x006E},{0x006F, 0x006F},
- {0x0070, 0x0070},{0x0071, 0x0071},{0x0072, 0x0072},{0x0073, 0x0073},{0x0074, 0x0074},{0x0075, 0x0075},{0x0076, 0x0076},{0x0077, 0x0077},
- {0x0078, 0x0078},{0x0079, 0x0079},{0x007A, 0x007A},{0x007B, 0x007B},{0x007C, 0x007C},{0x007D, 0x007D},{0x007E, 0x007E},{0x00A1, 0xA2AE},
- {0x00A4, 0xA2B4},{0x00A7, 0xA1D7},{0x00A8, 0xA1A7},{0x00AA, 0xA8A3},{0x00AD, 0xA1A9},{0x00B0, 0xA1C6},{0x00B1, 0xA1BE},{0x00B2, 0xA9F7},
- {0x00B3, 0xA9F8},{0x00B4, 0xA2A5},{0x00B6, 0xA2D2},{0x00B7, 0xA1A4},{0x00B8, 0xA2AC},{0x00B9, 0xA9F6},{0x00BA, 0xA8AC},{0x00BC, 0xA8F9},
- {0x00BD, 0xA8F6},{0x00BE, 0xA8FA},{0x00BF, 0xA2AF},{0x00C6, 0xA8A1},{0x00D0, 0xA8A2},{0x00D7, 0xA1BF},{0x00D8, 0xA8AA},{0x00DE, 0xA8AD},
- {0x00DF, 0xA9AC},{0x00E6, 0xA9A1},{0x00F0, 0xA9A3},{0x00F7, 0xA1C0},{0x00F8, 0xA9AA},{0x00FE, 0xA9AD},{0x0111, 0xA9A2},{0x0126, 0xA8A4},
- {0x0127, 0xA9A4},{0x0131, 0xA9A5},{0x0132, 0xA8A6},{0x0133, 0xA9A6},{0x0138, 0xA9A7},{0x013F, 0xA8A8},{0x0140, 0xA9A8},{0x0141, 0xA8A9},
- {0x0142, 0xA9A9},{0x0149, 0xA9B0},{0x014A, 0xA8AF},{0x014B, 0xA9AF},{0x0152, 0xA8AB},{0x0153, 0xA9AB},{0x0166, 0xA8AE},{0x0167, 0xA9AE},
- {0x02C7, 0xA2A7},{0x02D0, 0xA2B0},{0x02D8, 0xA2A8},{0x02D9, 0xA2AB},{0x02DA, 0xA2AA},{0x02DB, 0xA2AD},{0x02DD, 0xA2A9},{0x0391, 0xA5C1},
- {0x0392, 0xA5C2},{0x0393, 0xA5C3},{0x0394, 0xA5C4},{0x0395, 0xA5C5},{0x0396, 0xA5C6},{0x0397, 0xA5C7},{0x0398, 0xA5C8},{0x0399, 0xA5C9},
- {0x039A, 0xA5CA},{0x039B, 0xA5CB},{0x039C, 0xA5CC},{0x039D, 0xA5CD},{0x039E, 0xA5CE},{0x039F, 0xA5CF},{0x03A0, 0xA5D0},{0x03A1, 0xA5D1},
- {0x03A3, 0xA5D2},{0x03A4, 0xA5D3},{0x03A5, 0xA5D4},{0x03A6, 0xA5D5},{0x03A7, 0xA5D6},{0x03A8, 0xA5D7},{0x03A9, 0xA5D8},{0x03B1, 0xA5E1},
- {0x03B2, 0xA5E2},{0x03B3, 0xA5E3},{0x03B4, 0xA5E4},{0x03B5, 0xA5E5},{0x03B6, 0xA5E6},{0x03B7, 0xA5E7},{0x03B8, 0xA5E8},{0x03B9, 0xA5E9},
- {0x03BA, 0xA5EA},{0x03BB, 0xA5EB},{0x03BC, 0xA5EC},{0x03BD, 0xA5ED},{0x03BE, 0xA5EE},{0x03BF, 0xA5EF},{0x03C0, 0xA5F0},{0x03C1, 0xA5F1},
- {0x03C3, 0xA5F2},{0x03C4, 0xA5F3},{0x03C5, 0xA5F4},{0x03C6, 0xA5F5},{0x03C7, 0xA5F6},{0x03C8, 0xA5F7},{0x03C9, 0xA5F8},{0x0401, 0xACA7},
- {0x0410, 0xACA1},{0x0411, 0xACA2},{0x0412, 0xACA3},{0x0413, 0xACA4},{0x0414, 0xACA5},{0x0415, 0xACA6},{0x0416, 0xACA8},{0x0417, 0xACA9},
- {0x0418, 0xACAA},{0x0419, 0xACAB},{0x041A, 0xACAC},{0x041B, 0xACAD},{0x041C, 0xACAE},{0x041D, 0xACAF},{0x041E, 0xACB0},{0x041F, 0xACB1},
- {0x0420, 0xACB2},{0x0421, 0xACB3},{0x0422, 0xACB4},{0x0423, 0xACB5},{0x0424, 0xACB6},{0x0425, 0xACB7},{0x0426, 0xACB8},{0x0427, 0xACB9},
- {0x0428, 0xACBA},{0x0429, 0xACBB},{0x042A, 0xACBC},{0x042B, 0xACBD},{0x042C, 0xACBE},{0x042D, 0xACBF},{0x042E, 0xACC0},{0x042F, 0xACC1},
- {0x0430, 0xACD1},{0x0431, 0xACD2},{0x0432, 0xACD3},{0x0433, 0xACD4},{0x0434, 0xACD5},{0x0435, 0xACD6},{0x0436, 0xACD8},{0x0437, 0xACD9},
- {0x0438, 0xACDA},{0x0439, 0xACDB},{0x043A, 0xACDC},{0x043B, 0xACDD},{0x043C, 0xACDE},{0x043D, 0xACDF},{0x043E, 0xACE0},{0x043F, 0xACE1},
- {0x0440, 0xACE2},{0x0441, 0xACE3},{0x0442, 0xACE4},{0x0443, 0xACE5},{0x0444, 0xACE6},{0x0445, 0xACE7},{0x0446, 0xACE8},{0x0447, 0xACE9},
- {0x0448, 0xACEA},{0x0449, 0xACEB},{0x044A, 0xACEC},{0x044B, 0xACED},{0x044C, 0xACEE},{0x044D, 0xACEF},{0x044E, 0xACF0},{0x044F, 0xACF1},
- {0x0451, 0xACD7},{0x2015, 0xA1AA},{0x2018, 0xA1AE},{0x2019, 0xA1AF},{0x201C, 0xA1B0},{0x201D, 0xA1B1},{0x2020, 0xA2D3},{0x2021, 0xA2D4},
- {0x2025, 0xA1A5},{0x2026, 0xA1A6},{0x2030, 0xA2B6},{0x2032, 0xA1C7},{0x2033, 0xA1C8},{0x203B, 0xA1D8},{0x2074, 0xA9F9},{0x207F, 0xA9FA},
- {0x2081, 0xA9FB},{0x2082, 0xA9FC},{0x2083, 0xA9FD},{0x2084, 0xA9FE},{0x2103, 0xA1C9},{0x2109, 0xA2B5},{0x2113, 0xA7A4},{0x2116, 0xA2E0},
- {0x2121, 0xA2E5},{0x2122, 0xA2E2},{0x2126, 0xA7D9},{0x212B, 0xA1CA},{0x2153, 0xA8F7},{0x2154, 0xA8F8},{0x215B, 0xA8FB},{0x215C, 0xA8FC},
- {0x215D, 0xA8FD},{0x215E, 0xA8FE},{0x2160, 0xA5B0},{0x2161, 0xA5B1},{0x2162, 0xA5B2},{0x2163, 0xA5B3},{0x2164, 0xA5B4},{0x2165, 0xA5B5},
- {0x2166, 0xA5B6},{0x2167, 0xA5B7},{0x2168, 0xA5B8},{0x2169, 0xA5B9},{0x2170, 0xA5A1},{0x2171, 0xA5A2},{0x2172, 0xA5A3},{0x2173, 0xA5A4},
- {0x2174, 0xA5A5},{0x2175, 0xA5A6},{0x2176, 0xA5A7},{0x2177, 0xA5A8},{0x2178, 0xA5A9},{0x2179, 0xA5AA},{0x2190, 0xA1E7},{0x2191, 0xA1E8},
- {0x2192, 0xA1E6},{0x2193, 0xA1E9},{0x2194, 0xA1EA},{0x2195, 0xA2D5},{0x2196, 0xA2D8},{0x2197, 0xA2D6},{0x2198, 0xA2D9},{0x2199, 0xA2D7},
- {0x21D2, 0xA2A1},{0x21D4, 0xA2A2},{0x2200, 0xA2A3},{0x2202, 0xA1D3},{0x2203, 0xA2A4},{0x2207, 0xA1D4},{0x2208, 0xA1F4},{0x220B, 0xA1F5},
- {0x220F, 0xA2B3},{0x2211, 0xA2B2},{0x221A, 0xA1EE},{0x221D, 0xA1F0},{0x221E, 0xA1C4},{0x2220, 0xA1D0},{0x2225, 0xA1AB},{0x2227, 0xA1FC},
- {0x2228, 0xA1FD},{0x2229, 0xA1FB},{0x222A, 0xA1FA},{0x222B, 0xA1F2},{0x222C, 0xA1F3},{0x222E, 0xA2B1},{0x2234, 0xA1C5},{0x2235, 0xA1F1},
- {0x223C, 0xA1AD},{0x223D, 0xA1EF},{0x2252, 0xA1D6},{0x2260, 0xA1C1},{0x2261, 0xA1D5},{0x2264, 0xA1C2},{0x2265, 0xA1C3},{0x226A, 0xA1EC},
- {0x226B, 0xA1ED},{0x2282, 0xA1F8},{0x2283, 0xA1F9},{0x2286, 0xA1F6},{0x2287, 0xA1F7},{0x2299, 0xA2C1},{0x22A5, 0xA1D1},{0x2312, 0xA1D2},
- {0x2460, 0xA8E7},{0x2461, 0xA8E8},{0x2462, 0xA8E9},{0x2463, 0xA8EA},{0x2464, 0xA8EB},{0x2465, 0xA8EC},{0x2466, 0xA8ED},{0x2467, 0xA8EE},
- {0x2468, 0xA8EF},{0x2469, 0xA8F0},{0x246A, 0xA8F1},{0x246B, 0xA8F2},{0x246C, 0xA8F3},{0x246D, 0xA8F4},{0x246E, 0xA8F5},{0x2474, 0xA9E7},
- {0x2475, 0xA9E8},{0x2476, 0xA9E9},{0x2477, 0xA9EA},{0x2478, 0xA9EB},{0x2479, 0xA9EC},{0x247A, 0xA9ED},{0x247B, 0xA9EE},{0x247C, 0xA9EF},
- {0x247D, 0xA9F0},{0x247E, 0xA9F1},{0x247F, 0xA9F2},{0x2480, 0xA9F3},{0x2481, 0xA9F4},{0x2482, 0xA9F5},{0x249C, 0xA9CD},{0x249D, 0xA9CE},
- {0x249E, 0xA9CF},{0x249F, 0xA9D0},{0x24A0, 0xA9D1},{0x24A1, 0xA9D2},{0x24A2, 0xA9D3},{0x24A3, 0xA9D4},{0x24A4, 0xA9D5},{0x24A5, 0xA9D6},
- {0x24A6, 0xA9D7},{0x24A7, 0xA9D8},{0x24A8, 0xA9D9},{0x24A9, 0xA9DA},{0x24AA, 0xA9DB},{0x24AB, 0xA9DC},{0x24AC, 0xA9DD},{0x24AD, 0xA9DE},
- {0x24AE, 0xA9DF},{0x24AF, 0xA9E0},{0x24B0, 0xA9E1},{0x24B1, 0xA9E2},{0x24B2, 0xA9E3},{0x24B3, 0xA9E4},{0x24B4, 0xA9E5},{0x24B5, 0xA9E6},
- {0x24D0, 0xA8CD},{0x24D1, 0xA8CE},{0x24D2, 0xA8CF},{0x24D3, 0xA8D0},{0x24D4, 0xA8D1},{0x24D5, 0xA8D2},{0x24D6, 0xA8D3},{0x24D7, 0xA8D4},
- {0x24D8, 0xA8D5},{0x24D9, 0xA8D6},{0x24DA, 0xA8D7},{0x24DB, 0xA8D8},{0x24DC, 0xA8D9},{0x24DD, 0xA8DA},{0x24DE, 0xA8DB},{0x24DF, 0xA8DC},
- {0x24E0, 0xA8DD},{0x24E1, 0xA8DE},{0x24E2, 0xA8DF},{0x24E3, 0xA8E0},{0x24E4, 0xA8E1},{0x24E5, 0xA8E2},{0x24E6, 0xA8E3},{0x24E7, 0xA8E4},
- {0x24E8, 0xA8E5},{0x24E9, 0xA8E6},{0x2500, 0xA6A1},{0x2501, 0xA6AC},{0x2502, 0xA6A2},{0x2503, 0xA6AD},{0x250C, 0xA6A3},{0x250D, 0xA6C8},
- {0x250E, 0xA6C7},{0x250F, 0xA6AE},{0x2510, 0xA6A4},{0x2511, 0xA6C2},{0x2512, 0xA6C1},{0x2513, 0xA6AF},{0x2514, 0xA6A6},{0x2515, 0xA6C6},
- {0x2516, 0xA6C5},{0x2517, 0xA6B1},{0x2518, 0xA6A5},{0x2519, 0xA6C4},{0x251A, 0xA6C3},{0x251B, 0xA6B0},{0x251C, 0xA6A7},{0x251D, 0xA6BC},
- {0x251E, 0xA6C9},{0x251F, 0xA6CA},{0x2520, 0xA6B7},{0x2521, 0xA6CB},{0x2522, 0xA6CC},{0x2523, 0xA6B2},{0x2524, 0xA6A9},{0x2525, 0xA6BE},
- {0x2526, 0xA6CD},{0x2527, 0xA6CE},{0x2528, 0xA6B9},{0x2529, 0xA6CF},{0x252A, 0xA6D0},{0x252B, 0xA6B4},{0x252C, 0xA6A8},{0x252D, 0xA6D1},
- {0x252E, 0xA6D2},{0x252F, 0xA6B8},{0x2530, 0xA6BD},{0x2531, 0xA6D3},{0x2532, 0xA6D4},{0x2533, 0xA6B3},{0x2534, 0xA6AA},{0x2535, 0xA6D5},
- {0x2536, 0xA6D6},{0x2537, 0xA6BA},{0x2538, 0xA6BF},{0x2539, 0xA6D7},{0x253A, 0xA6D8},{0x253B, 0xA6B5},{0x253C, 0xA6AB},{0x253D, 0xA6D9},
- {0x253E, 0xA6DA},{0x253F, 0xA6BB},{0x2540, 0xA6DB},{0x2541, 0xA6DC},{0x2542, 0xA6C0},{0x2543, 0xA6DD},{0x2544, 0xA6DE},{0x2545, 0xA6DF},
- {0x2546, 0xA6E0},{0x2547, 0xA6E1},{0x2548, 0xA6E2},{0x2549, 0xA6E3},{0x254A, 0xA6E4},{0x254B, 0xA6B6},{0x2592, 0xA2C6},{0x25A0, 0xA1E1},
- {0x25A1, 0xA1E0},{0x25A3, 0xA2C3},{0x25A4, 0xA2C7},{0x25A5, 0xA2C8},{0x25A6, 0xA2CB},{0x25A7, 0xA2CA},{0x25A8, 0xA2C9},{0x25A9, 0xA2CC},
- {0x25B2, 0xA1E3},{0x25B3, 0xA1E2},{0x25B6, 0xA2BA},{0x25B7, 0xA2B9},{0x25BC, 0xA1E5},{0x25BD, 0xA1E4},{0x25C0, 0xA2B8},{0x25C1, 0xA2B7},
- {0x25C6, 0xA1DF},{0x25C7, 0xA1DE},{0x25C8, 0xA2C2},{0x25CB, 0xA1DB},{0x25CE, 0xA1DD},{0x25CF, 0xA1DC},{0x25D0, 0xA2C4},{0x25D1, 0xA2C5},
- {0x2605, 0xA1DA},{0x2606, 0xA1D9},{0x260E, 0xA2CF},{0x260F, 0xA2CE},{0x261C, 0xA2D0},{0x261E, 0xA2D1},{0x2640, 0xA1CF},{0x2642, 0xA1CE},
- {0x2660, 0xA2BC},{0x2661, 0xA2BD},{0x2663, 0xA2C0},{0x2664, 0xA2BB},{0x2665, 0xA2BE},{0x2667, 0xA2BF},{0x2668, 0xA2CD},{0x2669, 0xA2DB},
- {0x266A, 0xA2DC},{0x266C, 0xA2DD},{0x266D, 0xA2DA},{0x3000, 0xA1A1},{0x3001, 0xA1A2},{0x3002, 0xA1A3},{0x3003, 0xA1A8},{0x3008, 0xA1B4},
- {0x3009, 0xA1B5},{0x300A, 0xA1B6},{0x300B, 0xA1B7},{0x300C, 0xA1B8},{0x300D, 0xA1B9},{0x300E, 0xA1BA},{0x300F, 0xA1BB},{0x3010, 0xA1BC},
- {0x3011, 0xA1BD},{0x3013, 0xA1EB},{0x3014, 0xA1B2},{0x3015, 0xA1B3},{0x3041, 0xAAA1},{0x3042, 0xAAA2},{0x3043, 0xAAA3},{0x3044, 0xAAA4},
- {0x3045, 0xAAA5},{0x3046, 0xAAA6},{0x3047, 0xAAA7},{0x3048, 0xAAA8},{0x3049, 0xAAA9},{0x304A, 0xAAAA},{0x304B, 0xAAAB},{0x304C, 0xAAAC},
- {0x304D, 0xAAAD},{0x304E, 0xAAAE},{0x304F, 0xAAAF},{0x3050, 0xAAB0},{0x3051, 0xAAB1},{0x3052, 0xAAB2},{0x3053, 0xAAB3},{0x3054, 0xAAB4},
- {0x3055, 0xAAB5},{0x3056, 0xAAB6},{0x3057, 0xAAB7},{0x3058, 0xAAB8},{0x3059, 0xAAB9},{0x305A, 0xAABA},{0x305B, 0xAABB},{0x305C, 0xAABC},
- {0x305D, 0xAABD},{0x305E, 0xAABE},{0x305F, 0xAABF},{0x3060, 0xAAC0},{0x3061, 0xAAC1},{0x3062, 0xAAC2},{0x3063, 0xAAC3},{0x3064, 0xAAC4},
- {0x3065, 0xAAC5},{0x3066, 0xAAC6},{0x3067, 0xAAC7},{0x3068, 0xAAC8},{0x3069, 0xAAC9},{0x306A, 0xAACA},{0x306B, 0xAACB},{0x306C, 0xAACC},
- {0x306D, 0xAACD},{0x306E, 0xAACE},{0x306F, 0xAACF},{0x3070, 0xAAD0},{0x3071, 0xAAD1},{0x3072, 0xAAD2},{0x3073, 0xAAD3},{0x3074, 0xAAD4},
- {0x3075, 0xAAD5},{0x3076, 0xAAD6},{0x3077, 0xAAD7},{0x3078, 0xAAD8},{0x3079, 0xAAD9},{0x307A, 0xAADA},{0x307B, 0xAADB},{0x307C, 0xAADC},
- {0x307D, 0xAADD},{0x307E, 0xAADE},{0x307F, 0xAADF},{0x3080, 0xAAE0},{0x3081, 0xAAE1},{0x3082, 0xAAE2},{0x3083, 0xAAE3},{0x3084, 0xAAE4},
- {0x3085, 0xAAE5},{0x3086, 0xAAE6},{0x3087, 0xAAE7},{0x3088, 0xAAE8},{0x3089, 0xAAE9},{0x308A, 0xAAEA},{0x308B, 0xAAEB},{0x308C, 0xAAEC},
- {0x308D, 0xAAED},{0x308E, 0xAAEE},{0x308F, 0xAAEF},{0x3090, 0xAAF0},{0x3091, 0xAAF1},{0x3092, 0xAAF2},{0x3093, 0xAAF3},{0x30A1, 0xABA1},
- {0x30A2, 0xABA2},{0x30A3, 0xABA3},{0x30A4, 0xABA4},{0x30A5, 0xABA5},{0x30A6, 0xABA6},{0x30A7, 0xABA7},{0x30A8, 0xABA8},{0x30A9, 0xABA9},
- {0x30AA, 0xABAA},{0x30AB, 0xABAB},{0x30AC, 0xABAC},{0x30AD, 0xABAD},{0x30AE, 0xABAE},{0x30AF, 0xABAF},{0x30B0, 0xABB0},{0x30B1, 0xABB1},
- {0x30B2, 0xABB2},{0x30B3, 0xABB3},{0x30B4, 0xABB4},{0x30B5, 0xABB5},{0x30B6, 0xABB6},{0x30B7, 0xABB7},{0x30B8, 0xABB8},{0x30B9, 0xABB9},
- {0x30BA, 0xABBA},{0x30BB, 0xABBB},{0x30BC, 0xABBC},{0x30BD, 0xABBD},{0x30BE, 0xABBE},{0x30BF, 0xABBF},{0x30C0, 0xABC0},{0x30C1, 0xABC1},
- {0x30C2, 0xABC2},{0x30C3, 0xABC3},{0x30C4, 0xABC4},{0x30C5, 0xABC5},{0x30C6, 0xABC6},{0x30C7, 0xABC7},{0x30C8, 0xABC8},{0x30C9, 0xABC9},
- {0x30CA, 0xABCA},{0x30CB, 0xABCB},{0x30CC, 0xABCC},{0x30CD, 0xABCD},{0x30CE, 0xABCE},{0x30CF, 0xABCF},{0x30D0, 0xABD0},{0x30D1, 0xABD1},
- {0x30D2, 0xABD2},{0x30D3, 0xABD3},{0x30D4, 0xABD4},{0x30D5, 0xABD5},{0x30D6, 0xABD6},{0x30D7, 0xABD7},{0x30D8, 0xABD8},{0x30D9, 0xABD9},
- {0x30DA, 0xABDA},{0x30DB, 0xABDB},{0x30DC, 0xABDC},{0x30DD, 0xABDD},{0x30DE, 0xABDE},{0x30DF, 0xABDF},{0x30E0, 0xABE0},{0x30E1, 0xABE1},
- {0x30E2, 0xABE2},{0x30E3, 0xABE3},{0x30E4, 0xABE4},{0x30E5, 0xABE5},{0x30E6, 0xABE6},{0x30E7, 0xABE7},{0x30E8, 0xABE8},{0x30E9, 0xABE9},
- {0x30EA, 0xABEA},{0x30EB, 0xABEB},{0x30EC, 0xABEC},{0x30ED, 0xABED},{0x30EE, 0xABEE},{0x30EF, 0xABEF},{0x30F0, 0xABF0},{0x30F1, 0xABF1},
- {0x30F2, 0xABF2},{0x30F3, 0xABF3},{0x30F4, 0xABF4},{0x30F5, 0xABF5},{0x30F6, 0xABF6},{0x3131, 0xA4A1},{0x3132, 0xA4A2},{0x3133, 0xA4A3},
- {0x3134, 0xA4A4},{0x3135, 0xA4A5},{0x3136, 0xA4A6},{0x3137, 0xA4A7},{0x3138, 0xA4A8},{0x3139, 0xA4A9},{0x313A, 0xA4AA},{0x313B, 0xA4AB},
- {0x313C, 0xA4AC},{0x313D, 0xA4AD},{0x313E, 0xA4AE},{0x313F, 0xA4AF},{0x3140, 0xA4B0},{0x3141, 0xA4B1},{0x3142, 0xA4B2},{0x3143, 0xA4B3},
- {0x3144, 0xA4B4},{0x3145, 0xA4B5},{0x3146, 0xA4B6},{0x3147, 0xA4B7},{0x3148, 0xA4B8},{0x3149, 0xA4B9},{0x314A, 0xA4BA},{0x314B, 0xA4BB},
- {0x314C, 0xA4BC},{0x314D, 0xA4BD},{0x314E, 0xA4BE},{0x314F, 0xA4BF},{0x3150, 0xA4C0},{0x3151, 0xA4C1},{0x3152, 0xA4C2},{0x3153, 0xA4C3},
- {0x3154, 0xA4C4},{0x3155, 0xA4C5},{0x3156, 0xA4C6},{0x3157, 0xA4C7},{0x3158, 0xA4C8},{0x3159, 0xA4C9},{0x315A, 0xA4CA},{0x315B, 0xA4CB},
- {0x315C, 0xA4CC},{0x315D, 0xA4CD},{0x315E, 0xA4CE},{0x315F, 0xA4CF},{0x3160, 0xA4D0},{0x3161, 0xA4D1},{0x3162, 0xA4D2},{0x3163, 0xA4D3},
- {0x3164, 0xA4D4},{0x3165, 0xA4D5},{0x3166, 0xA4D6},{0x3167, 0xA4D7},{0x3168, 0xA4D8},{0x3169, 0xA4D9},{0x316A, 0xA4DA},{0x316B, 0xA4DB},
- {0x316C, 0xA4DC},{0x316D, 0xA4DD},{0x316E, 0xA4DE},{0x316F, 0xA4DF},{0x3170, 0xA4E0},{0x3171, 0xA4E1},{0x3172, 0xA4E2},{0x3173, 0xA4E3},
- {0x3174, 0xA4E4},{0x3175, 0xA4E5},{0x3176, 0xA4E6},{0x3177, 0xA4E7},{0x3178, 0xA4E8},{0x3179, 0xA4E9},{0x317A, 0xA4EA},{0x317B, 0xA4EB},
- {0x317C, 0xA4EC},{0x317D, 0xA4ED},{0x317E, 0xA4EE},{0x317F, 0xA4EF},{0x3180, 0xA4F0},{0x3181, 0xA4F1},{0x3182, 0xA4F2},{0x3183, 0xA4F3},
- {0x3184, 0xA4F4},{0x3185, 0xA4F5},{0x3186, 0xA4F6},{0x3187, 0xA4F7},{0x3188, 0xA4F8},{0x3189, 0xA4F9},{0x318A, 0xA4FA},{0x318B, 0xA4FB},
- {0x318C, 0xA4FC},{0x318D, 0xA4FD},{0x318E, 0xA4FE},{0x3200, 0xA9B1},{0x3201, 0xA9B2},{0x3202, 0xA9B3},{0x3203, 0xA9B4},{0x3204, 0xA9B5},
- {0x3205, 0xA9B6},{0x3206, 0xA9B7},{0x3207, 0xA9B8},{0x3208, 0xA9B9},{0x3209, 0xA9BA},{0x320A, 0xA9BB},{0x320B, 0xA9BC},{0x320C, 0xA9BD},
- {0x320D, 0xA9BE},{0x320E, 0xA9BF},{0x320F, 0xA9C0},{0x3210, 0xA9C1},{0x3211, 0xA9C2},{0x3212, 0xA9C3},{0x3213, 0xA9C4},{0x3214, 0xA9C5},
- {0x3215, 0xA9C6},{0x3216, 0xA9C7},{0x3217, 0xA9C8},{0x3218, 0xA9C9},{0x3219, 0xA9CA},{0x321A, 0xA9CB},{0x321B, 0xA9CC},{0x321C, 0xA2DF},
- {0x3260, 0xA8B1},{0x3261, 0xA8B2},{0x3262, 0xA8B3},{0x3263, 0xA8B4},{0x3264, 0xA8B5},{0x3265, 0xA8B6},{0x3266, 0xA8B7},{0x3267, 0xA8B8},
- {0x3268, 0xA8B9},{0x3269, 0xA8BA},{0x326A, 0xA8BB},{0x326B, 0xA8BC},{0x326C, 0xA8BD},{0x326D, 0xA8BE},{0x326E, 0xA8BF},{0x326F, 0xA8C0},
- {0x3270, 0xA8C1},{0x3271, 0xA8C2},{0x3272, 0xA8C3},{0x3273, 0xA8C4},{0x3274, 0xA8C5},{0x3275, 0xA8C6},{0x3276, 0xA8C7},{0x3277, 0xA8C8},
- {0x3278, 0xA8C9},{0x3279, 0xA8CA},{0x327A, 0xA8CB},{0x327B, 0xA8CC},{0x327F, 0xA2DE},{0x3380, 0xA7C9},{0x3381, 0xA7CA},{0x3382, 0xA7CB},
- {0x3383, 0xA7CC},{0x3384, 0xA7CD},{0x3388, 0xA7BA},{0x3389, 0xA7BB},{0x338A, 0xA7DC},{0x338B, 0xA7DD},{0x338C, 0xA7DE},{0x338D, 0xA7B6},
- {0x338E, 0xA7B7},{0x338F, 0xA7B8},{0x3390, 0xA7D4},{0x3391, 0xA7D5},{0x3392, 0xA7D6},{0x3393, 0xA7D7},{0x3394, 0xA7D8},{0x3395, 0xA7A1},
- {0x3396, 0xA7A2},{0x3397, 0xA7A3},{0x3398, 0xA7A5},{0x3399, 0xA7AB},{0x339A, 0xA7AC},{0x339B, 0xA7AD},{0x339C, 0xA7AE},{0x339D, 0xA7AF},
- {0x339E, 0xA7B0},{0x339F, 0xA7B1},{0x33A0, 0xA7B2},{0x33A1, 0xA7B3},{0x33A2, 0xA7B4},{0x33A3, 0xA7A7},{0x33A4, 0xA7A8},{0x33A5, 0xA7A9},
- {0x33A6, 0xA7AA},{0x33A7, 0xA7BD},{0x33A8, 0xA7BE},{0x33A9, 0xA7E5},{0x33AA, 0xA7E6},{0x33AB, 0xA7E7},{0x33AC, 0xA7E8},{0x33AD, 0xA7E1},
- {0x33AE, 0xA7E2},{0x33AF, 0xA7E3},{0x33B0, 0xA7BF},{0x33B1, 0xA7C0},{0x33B2, 0xA7C1},{0x33B3, 0xA7C2},{0x33B4, 0xA7C3},{0x33B5, 0xA7C4},
- {0x33B6, 0xA7C5},{0x33B7, 0xA7C6},{0x33B8, 0xA7C7},{0x33B9, 0xA7C8},{0x33BA, 0xA7CE},{0x33BB, 0xA7CF},{0x33BC, 0xA7D0},{0x33BD, 0xA7D1},
- {0x33BE, 0xA7D2},{0x33BF, 0xA7D3},{0x33C0, 0xA7DA},{0x33C1, 0xA7DB},{0x33C2, 0xA2E3},{0x33C3, 0xA7EC},{0x33C4, 0xA7A6},{0x33C5, 0xA7E0},
- {0x33C6, 0xA7EF},{0x33C7, 0xA2E1},{0x33C8, 0xA7BC},{0x33C9, 0xA7ED},{0x33CA, 0xA7B5},{0x33CF, 0xA7B9},{0x33D0, 0xA7EA},{0x33D3, 0xA7EB},
- {0x33D6, 0xA7DF},{0x33D8, 0xA2E4},{0x33DB, 0xA7E4},{0x33DC, 0xA7EE},{0x33DD, 0xA7E9},{0x4E00, 0xECE9},{0x4E01, 0xEFCB},{0x4E03, 0xF6D2},
- {0x4E07, 0xD8B2},{0x4E08, 0xEDDB},{0x4E09, 0xDFB2},{0x4E0A, 0xDFBE},{0x4E0B, 0xF9BB},{0x4E0D, 0xDCF4},{0x4E11, 0xF5E4},{0x4E14, 0xF3A6},
- {0x4E15, 0xDDE0},{0x4E16, 0xE1A6},{0x4E18, 0xCEF8},{0x4E19, 0xDCB0},{0x4E1E, 0xE3AA},{0x4E2D, 0xF1E9},{0x4E32, 0xCDFA},{0x4E38, 0xFCAF},
- {0x4E39, 0xD3A1},{0x4E3B, 0xF1AB},{0x4E42, 0xE7D1},{0x4E43, 0xD2AC},{0x4E45, 0xCEF9},{0x4E4B, 0xF1FD},{0x4E4D, 0xDEBF},{0x4E4E, 0xFBBA},
- {0x4E4F, 0xF9B9},{0x4E56, 0xCED2},{0x4E58, 0xE3AB},{0x4E59, 0xEBE0},{0x4E5D, 0xCEFA},{0x4E5E, 0xCBF7},{0x4E5F, 0xE5A5},{0x4E6B, 0xCAE1},
- {0x4E6D, 0xD4CC},{0x4E73, 0xEAE1},{0x4E76, 0xDCE3},{0x4E77, 0xDFAD},{0x4E7E, 0xCBEB},{0x4E82, 0xD5AF},{0x4E86, 0xD6F5},{0x4E88, 0xE5F8},
- {0x4E8B, 0xDEC0},{0x4E8C, 0xECA3},{0x4E8E, 0xE9CD},{0x4E90, 0xEAA7},{0x4E91, 0xE9F6},{0x4E92, 0xFBBB},{0x4E94, 0xE7E9},{0x4E95, 0xEFCC},
- {0x4E98, 0xD0E6},{0x4E9B, 0xDEC1},{0x4E9E, 0xE4AC},{0x4EA1, 0xD8CC},{0x4EA2, 0xF9F1},{0x4EA4, 0xCEDF},{0x4EA5, 0xFAA4},{0x4EA6, 0xE6B2},
- {0x4EA8, 0xFAFB},{0x4EAB, 0xFABD},{0x4EAC, 0xCCC8},{0x4EAD, 0xEFCD},{0x4EAE, 0xD5D5},{0x4EB6, 0xD3A2},{0x4EBA, 0xECD1},{0x4EC0, 0xE4A7},
- {0x4EC1, 0xECD2},{0x4EC4, 0xF6B1},{0x4EC7, 0xCEFB},{0x4ECA, 0xD0D1},{0x4ECB, 0xCBBF},{0x4ECD, 0xEDA4},{0x4ED4, 0xEDA8},{0x4ED5, 0xDEC2},
- {0x4ED6, 0xF6E2},{0x4ED7, 0xEDDC},{0x4ED8, 0xDCF5},{0x4ED9, 0xE0B9},{0x4EDD, 0xD4CE},{0x4EDF, 0xF4B5},{0x4EE3, 0xD3DB},{0x4EE4, 0xD6B5},
- {0x4EE5, 0xECA4},{0x4EF0, 0xE4E6},{0x4EF2, 0xF1EA},{0x4EF6, 0xCBEC},{0x4EF7, 0xCBC0},{0x4EFB, 0xECF2},{0x4F01, 0xD0EA},{0x4F09, 0xF9F2},
- {0x4F0A, 0xECA5},{0x4F0B, 0xD0DF},{0x4F0D, 0xE7EA},{0x4F0E, 0xD0EB},{0x4F0F, 0xDCD1},{0x4F10, 0xDBE9},{0x4F11, 0xFDCC},{0x4F2F, 0xDBD7},
- {0x4F34, 0xDAE1},{0x4F36, 0xD6B6},{0x4F38, 0xE3DF},{0x4F3A, 0xDEC3},{0x4F3C, 0xDEC4},{0x4F3D, 0xCAA1},{0x4F43, 0xEEEC},{0x4F46, 0xD3A3},
- {0x4F47, 0xEEB7},{0x4F48, 0xF8CF},{0x4F4D, 0xEAC8},{0x4F4E, 0xEEB8},{0x4F4F, 0xF1AC},{0x4F50, 0xF1A5},{0x4F51, 0xE9CE},{0x4F55, 0xF9BC},
- {0x4F59, 0xE5F9},{0x4F5A, 0xECEA},{0x4F5B, 0xDDD6},{0x4F5C, 0xEDC2},{0x4F69, 0xF8A5},{0x4F6F, 0xE5BA},{0x4F70, 0xDBD8},{0x4F73, 0xCAA2},
- {0x4F76, 0xD1CD},{0x4F7A, 0xEEED},{0x4F7E, 0xECEB},{0x4F7F, 0xDEC5},{0x4F81, 0xE3E0},{0x4F83, 0xCAC9},{0x4F84, 0xF2E9},{0x4F86, 0xD5CE},
- {0x4F88, 0xF6B6},{0x4F8A, 0xCEC2},{0x4F8B, 0xD6C7},{0x4F8D, 0xE3B4},{0x4F8F, 0xF1AD},{0x4F91, 0xEAE2},{0x4F96, 0xD7C2},{0x4F98, 0xF3A7},
- {0x4F9B, 0xCDEA},{0x4F9D, 0xEBEE},{0x4FAE, 0xD9B2},{0x4FAF, 0xFDA5},{0x4FB5, 0xF6D5},{0x4FB6, 0xD5E2},{0x4FBF, 0xF8B5},{0x4FC2, 0xCCF5},
- {0x4FC3, 0xF5B5},{0x4FC4, 0xE4AD},{0x4FC9, 0xE7EB},{0x4FCA, 0xF1D5},{0x4FCE, 0xF0BB},{0x4FD1, 0xE9B5},{0x4FD3, 0xCCC9},{0x4FD4, 0xFAD5},
- {0x4FD7, 0xE1D4},{0x4FDA, 0xD7D6},{0x4FDD, 0xDCC1},{0x4FDF, 0xDEC6},{0x4FE0, 0xFAEF},{0x4FE1, 0xE3E1},{0x4FEE, 0xE1F3},{0x4FEF, 0xDCF6},
- {0x4FF1, 0xCEFC},{0x4FF3, 0xDBC4},{0x4FF5, 0xF8F1},{0x4FF8, 0xDCE4},{0x4FFA, 0xE5EF},{0x5002, 0xDCB1},{0x5006, 0xD5D6},{0x5009, 0xF3DA},
- {0x500B, 0xCBC1},{0x500D, 0xDBC3},{0x5011, 0xD9FA},{0x5012, 0xD3EE},{0x5016, 0xFAB8},{0x5019, 0xFDA6},{0x501A, 0xEBEF},{0x501C, 0xF4A6},
- {0x501E, 0xCCCA},{0x501F, 0xF3A8},{0x5021, 0xF3DB},{0x5023, 0xDBA7},{0x5024, 0xF6B7},{0x5026, 0xCFE6},{0x5027, 0xF0F2},{0x5028, 0xCBDA},
- {0x502A, 0xE7D2},{0x502B, 0xD7C3},{0x502C, 0xF6F0},{0x502D, 0xE8DE},{0x503B, 0xE5A6},{0x5043, 0xE5E7},{0x5047, 0xCAA3},{0x5048, 0xCCA7},
- {0x5049, 0xEAC9},{0x504F, 0xF8B6},{0x5055, 0xFAA5},{0x505A, 0xF1AE},{0x505C, 0xEFCE},{0x5065, 0xCBED},{0x5074, 0xF6B0},{0x5075, 0xEFCF},
- {0x5076, 0xE9CF},{0x5078, 0xF7DE},{0x5080, 0xCED3},{0x5085, 0xDCF7},{0x508D, 0xDBA8},{0x5091, 0xCBF8},{0x5098, 0xDFA1},{0x5099, 0xDDE1},
- {0x50AC, 0xF5CA},{0x50AD, 0xE9B6},{0x50B2, 0xE7EC},{0x50B3, 0xEEEE},{0x50B5, 0xF3F0},{0x50B7, 0xDFBF},{0x50BE, 0xCCCB},{0x50C5, 0xD0C1},
- {0x50C9, 0xF4D2},{0x50CA, 0xE0BA},{0x50CF, 0xDFC0},{0x50D1, 0xCEE0},{0x50D5, 0xDCD2},{0x50D6, 0xFDEA},{0x50DA, 0xD6F6},{0x50DE, 0xEACA},
- {0x50E5, 0xE8E9},{0x50E7, 0xE3AC},{0x50ED, 0xF3D0},{0x50F9, 0xCAA4},{0x50FB, 0xDBF8},{0x50FF, 0xDEC7},{0x5100, 0xEBF0},{0x5101, 0xF1D6},
- {0x5104, 0xE5E2},{0x5106, 0xCCCC},{0x5109, 0xCBFB},{0x5112, 0xEAE3},{0x511F, 0xDFC1},{0x5121, 0xD6ED},{0x512A, 0xE9D0},{0x5132, 0xEEB9},
- {0x5137, 0xD5E3},{0x513A, 0xD1D3},{0x513C, 0xE5F0},{0x5140, 0xE8B4},{0x5141, 0xEBC3},{0x5143, 0xEAAA},{0x5144, 0xFAFC},{0x5145, 0xF5F6},
- {0x5146, 0xF0BC},{0x5147, 0xFDD4},{0x5148, 0xE0BB},{0x5149, 0xCEC3},{0x514B, 0xD0BA},{0x514C, 0xF7BA},{0x514D, 0xD8F3},{0x514E, 0xF7CD},
- {0x5152, 0xE4AE},{0x515C, 0xD4DF},{0x5162, 0xD0E7},{0x5165, 0xECFD},{0x5167, 0xD2AE},{0x5168, 0xEEEF},{0x5169, 0xD5D7},{0x516A, 0xEAE4},
- {0x516B, 0xF8A2},{0x516C, 0xCDEB},{0x516D, 0xD7BF},{0x516E, 0xFBB1},{0x5171, 0xCDEC},{0x5175, 0xDCB2},{0x5176, 0xD0EC},{0x5177, 0xCEFD},
- {0x5178, 0xEEF0},{0x517C, 0xCCC2},{0x5180, 0xD0ED},{0x5186, 0xE5F7},{0x518A, 0xF3FC},{0x518D, 0xEEA2},{0x5192, 0xD9B3},{0x5195, 0xD8F4},
- {0x5197, 0xE9B7},{0x51A0, 0xCEAE},{0x51A5, 0xD9A2},{0x51AA, 0xD8F1},{0x51AC, 0xD4CF},{0x51B6, 0xE5A7},{0x51B7, 0xD5D2},{0x51BD, 0xD6A9},
- {0x51C4, 0xF4A2},{0x51C6, 0xF1D7},{0x51C9, 0xD5D8},{0x51CB, 0xF0BD},{0x51CC, 0xD7D0},{0x51CD, 0xD4D0},{0x51DC, 0xD7CF},{0x51DD, 0xEBEA},
- {0x51DE, 0xFDEB},{0x51E1, 0xDBED},{0x51F0, 0xFCC5},{0x51F1, 0xCBC2},{0x51F6, 0xFDD5},{0x51F8, 0xF4C8},{0x51F9, 0xE8EA},{0x51FA, 0xF5F3},
- {0x51FD, 0xF9DE},{0x5200, 0xD3EF},{0x5203, 0xECD3},{0x5206, 0xDDC2},{0x5207, 0xEFB7},{0x5208, 0xE7D4},{0x520A, 0xCACA},{0x520E, 0xD9FB},
- {0x5211, 0xFAFD},{0x5217, 0xD6AA},{0x521D, 0xF4F8},{0x5224, 0xF7F7},{0x5225, 0xDCAC},{0x5229, 0xD7D7},{0x522A, 0xDFA2},{0x522E, 0xCEBE},
- {0x5230, 0xD3F0},{0x5236, 0xF0A4},{0x5237, 0xE1EC},{0x5238, 0xCFE7},{0x5239, 0xF3CB},{0x523A, 0xEDA9},{0x523B, 0xCABE},{0x5243, 0xF4EF},
- {0x5247, 0xF6CE},{0x524A, 0xDEFB},{0x524B, 0xD0BB},{0x524C, 0xD5B7},{0x524D, 0xEEF1},{0x5254, 0xF4A8},{0x5256, 0xDCF8},{0x525B, 0xCBA7},
- {0x525D, 0xDACE},{0x5261, 0xE0E6},{0x5269, 0xEDA5},{0x526A, 0xEEF2},{0x526F, 0xDCF9},{0x5272, 0xF9DC},{0x5275, 0xF3DC},{0x527D, 0xF8F2},
- {0x527F, 0xF4F9},{0x5283, 0xFCF1},{0x5287, 0xD0BC},{0x5288, 0xDBF9},{0x5289, 0xD7B1},{0x528D, 0xCBFC},{0x5291, 0xF0A5},{0x5292, 0xCBFD},
- {0x529B, 0xD5F4},{0x529F, 0xCDED},{0x52A0, 0xCAA5},{0x52A3, 0xD6AB},{0x52A4, 0xD0C2},{0x52A9, 0xF0BE},{0x52AA, 0xD2BD},{0x52AB, 0xCCA4},
- {0x52BE, 0xFAB6},{0x52C1, 0xCCCD},{0x52C3, 0xDAFA},{0x52C5, 0xF6CF},{0x52C7, 0xE9B8},{0x52C9, 0xD8F5},{0x52CD, 0xCCCE},{0x52D2, 0xD7CD},
- {0x52D5, 0xD4D1},{0x52D6, 0xE9ED},{0x52D8, 0xCAEB},{0x52D9, 0xD9E2},{0x52DB, 0xFDB2},{0x52DD, 0xE3AD},{0x52DE, 0xD6CC},{0x52DF, 0xD9B4},
- {0x52E2, 0xE1A7},{0x52E3, 0xEED3},{0x52E4, 0xD0C3},{0x52F3, 0xFDB3},{0x52F5, 0xD5E4},{0x52F8, 0xCFE8},{0x52FA, 0xEDC3},{0x52FB, 0xD0B2},
- {0x52FE, 0xCEFE},{0x52FF, 0xDAA8},{0x5305, 0xF8D0},{0x5308, 0xFDD6},{0x530D, 0xF8D1},{0x530F, 0xF8D2},{0x5310, 0xDCD3},{0x5315, 0xDDE2},
- {0x5316, 0xFBF9},{0x5317, 0xDDC1},{0x5319, 0xE3B5},{0x5320, 0xEDDD},{0x5321, 0xCEC4},{0x5323, 0xCBA1},{0x532A, 0xDDE3},{0x532F, 0xFCDD},
- {0x5339, 0xF9AF},{0x533F, 0xD2FB},{0x5340, 0xCFA1},{0x5341, 0xE4A8},{0x5343, 0xF4B6},{0x5344, 0xECFE},{0x5347, 0xE3AE},{0x5348, 0xE7ED},
- {0x5349, 0xFDC1},{0x534A, 0xDAE2},{0x534D, 0xD8B3},{0x5351, 0xDDE4},{0x5352, 0xF0EF},{0x5353, 0xF6F1},{0x5354, 0xFAF0},{0x5357, 0xD1F5},
- {0x535A, 0xDACF},{0x535C, 0xDCD4},{0x535E, 0xDCA6},{0x5360, 0xEFBF},{0x5366, 0xCECF},{0x5368, 0xE0D9},{0x536F, 0xD9D6},{0x5370, 0xECD4},
- {0x5371, 0xEACB},{0x5374, 0xCABF},{0x5375, 0xD5B0},{0x5377, 0xCFE9},{0x537D, 0xF1ED},{0x537F, 0xCCCF},{0x5384, 0xE4F8},{0x5393, 0xE4ED},
- {0x5398, 0xD7D8},{0x539A, 0xFDA7},{0x539F, 0xEAAB},{0x53A0, 0xF6B2},{0x53A5, 0xCFF0},{0x53A6, 0xF9BD},{0x53AD, 0xE6F4},{0x53BB, 0xCBDB},
- {0x53C3, 0xF3D1},{0x53C8, 0xE9D1},{0x53C9, 0xF3A9},{0x53CA, 0xD0E0},{0x53CB, 0xE9D2},{0x53CD, 0xDAE3},{0x53D4, 0xE2D2},{0x53D6, 0xF6A2},
- {0x53D7, 0xE1F4},{0x53DB, 0xDAE4},{0x53E1, 0xE7D5},{0x53E2, 0xF5BF},{0x53E3, 0xCFA2},{0x53E4, 0xCDAF},{0x53E5, 0xCFA3},{0x53E9, 0xCDB0},
- {0x53EA, 0xF1FE},{0x53EB, 0xD0A3},{0x53EC, 0xE1AF},{0x53ED, 0xF8A3},{0x53EF, 0xCAA6},{0x53F0, 0xF7BB},{0x53F1, 0xF2EA},{0x53F2, 0xDEC8},
- {0x53F3, 0xE9D3},{0x53F8, 0xDEC9},{0x5403, 0xFDDE},{0x5404, 0xCAC0},{0x5408, 0xF9EA},{0x5409, 0xD1CE},{0x540A, 0xEED4},{0x540C, 0xD4D2},
- {0x540D, 0xD9A3},{0x540E, 0xFDA8},{0x540F, 0xD7D9},{0x5410, 0xF7CE},{0x5411, 0xFABE},{0x541B, 0xCFD6},{0x541D, 0xD7F0},{0x541F, 0xEBE1},
- {0x5420, 0xF8C5},{0x5426, 0xDCFA},{0x5429, 0xDDC3},{0x542B, 0xF9DF},{0x5433, 0xE7EF},{0x5438, 0xFDE5},{0x5439, 0xF6A3},{0x543B, 0xD9FC},
- {0x543C, 0xFDA9},{0x543E, 0xE7EE},{0x5442, 0xD5E5},{0x5448, 0xEFD0},{0x544A, 0xCDB1},{0x5451, 0xF7A2},{0x5468, 0xF1B2},{0x546A, 0xF1B1},
- {0x5471, 0xCDB2},{0x5473, 0xDAAB},{0x5475, 0xCAA7},{0x547B, 0xE3E2},{0x547C, 0xFBBC},{0x547D, 0xD9A4},{0x5480, 0xEEBA},{0x5486, 0xF8D3},
- {0x548C, 0xFBFA},{0x548E, 0xCFA4},{0x5490, 0xDCFB},{0x54A4, 0xF6E3},{0x54A8, 0xEDAA},{0x54AB, 0xF2A1},{0x54AC, 0xCEE1},{0x54B3, 0xFAA6},
- {0x54B8, 0xF9E0},{0x54BD, 0xECD6},{0x54C0, 0xE4EE},{0x54C1, 0xF9A1},{0x54C4, 0xFBEF},{0x54C8, 0xF9EB},{0x54C9, 0xEEA3},{0x54E1, 0xEAAC},
- {0x54E5, 0xCAA8},{0x54E8, 0xF4FA},{0x54ED, 0xCDD6},{0x54EE, 0xFCF6},{0x54F2, 0xF4C9},{0x54FA, 0xF8D4},{0x5504, 0xF8A6},{0x5506, 0xDECA},
- {0x5507, 0xF2C6},{0x550E, 0xD7DA},{0x5510, 0xD3D0},{0x551C, 0xD8C5},{0x552F, 0xEAE6},{0x5531, 0xF3DD},{0x5535, 0xE4DA},{0x553E, 0xF6E4},
- {0x5544, 0xF6F2},{0x5546, 0xDFC2},{0x554F, 0xD9FD},{0x5553, 0xCCF6},{0x5556, 0xD3BA},{0x555E, 0xE4AF},{0x5563, 0xF9E1},{0x557C, 0xF0A6},
- {0x5580, 0xCBD3},{0x5584, 0xE0BC},{0x5586, 0xF4CA},{0x5587, 0xD4FA},{0x5589, 0xFDAA},{0x558A, 0xF9E2},{0x5598, 0xF4B7},{0x5599, 0xFDC2},
- {0x559A, 0xFCB0},{0x559C, 0xFDEC},{0x559D, 0xCAE2},{0x55A7, 0xFDBD},{0x55A9, 0xEAE7},{0x55AA, 0xDFC3},{0x55AB, 0xD1D2},{0x55AC, 0xCEE2},
- {0x55AE, 0xD3A4},{0x55C5, 0xFDAB},{0x55C7, 0xDFE0},{0x55D4, 0xF2C7},{0x55DA, 0xE7F0},{0x55DC, 0xD0EE},{0x55DF, 0xF3AA},{0x55E3, 0xDECB},
- {0x55E4, 0xF6B8},{0x55FD, 0xE1F5},{0x55FE, 0xF1B3},{0x5606, 0xF7A3},{0x5609, 0xCAA9},{0x5614, 0xCFA5},{0x5617, 0xDFC4},{0x562F, 0xE1B0},
- {0x5632, 0xF0BF},{0x5634, 0xF6A4},{0x5636, 0xE3B6},{0x5653, 0xFAC6},{0x5668, 0xD0EF},{0x566B, 0xFDED},{0x5674, 0xDDC4},{0x5686, 0xFCF7},
- {0x56A5, 0xE6BF},{0x56AC, 0xDEAD},{0x56AE, 0xFABF},{0x56B4, 0xE5F1},{0x56BC, 0xEDC4},{0x56CA, 0xD2A5},{0x56CD, 0xFDEE},{0x56D1, 0xF5B6},
- {0x56DA, 0xE1F6},{0x56DB, 0xDECC},{0x56DE, 0xFCDE},{0x56E0, 0xECD7},{0x56F0, 0xCDDD},{0x56F9, 0xD6B7},{0x56FA, 0xCDB3},{0x5703, 0xF8D5},
- {0x5704, 0xE5D8},{0x5708, 0xCFEA},{0x570B, 0xCFD0},{0x570D, 0xEACC},{0x5712, 0xEAAE},{0x5713, 0xEAAD},{0x5716, 0xD3F1},{0x5718, 0xD3A5},
- {0x571F, 0xF7CF},{0x5728, 0xEEA4},{0x572D, 0xD0A4},{0x5730, 0xF2A2},{0x573B, 0xD0F0},{0x5740, 0xF2A3},{0x5742, 0xF7F8},{0x5747, 0xD0B3},
- {0x574A, 0xDBA9},{0x574D, 0xD3BB},{0x574E, 0xCAEC},{0x5750, 0xF1A6},{0x5751, 0xCBD5},{0x5761, 0xF7E7},{0x5764, 0xCDDE},{0x5766, 0xF7A4},
- {0x576A, 0xF8C0},{0x576E, 0xD3DD},{0x5770, 0xCCD0},{0x5775, 0xCFA6},{0x577C, 0xF6F3},{0x5782, 0xE1F7},{0x5788, 0xD3DC},{0x578B, 0xFAFE},
- {0x5793, 0xFAA7},{0x57A0, 0xEBD9},{0x57A2, 0xCFA7},{0x57A3, 0xEAAF},{0x57C3, 0xE4EF},{0x57C7, 0xE9B9},{0x57C8, 0xF1D8},{0x57CB, 0xD8D8},
- {0x57CE, 0xE0F2},{0x57DF, 0xE6B4},{0x57E0, 0xDCFC},{0x57F0, 0xF3F1},{0x57F4, 0xE3D0},{0x57F7, 0xF2FB},{0x57F9, 0xDBC6},{0x57FA, 0xD0F1},
- {0x57FC, 0xD0F2},{0x5800, 0xCFDC},{0x5802, 0xD3D1},{0x5805, 0xCCB1},{0x5806, 0xF7D8},{0x5808, 0xCBA8},{0x5809, 0xEBBC},{0x580A, 0xE4BE},
- {0x581E, 0xF4DC},{0x5821, 0xDCC2},{0x5824, 0xF0A7},{0x5827, 0xE6C0},{0x582A, 0xCAED},{0x582F, 0xE8EB},{0x5830, 0xE5E8},{0x5831, 0xDCC3},
- {0x5834, 0xEDDE},{0x5835, 0xD3F2},{0x583A, 0xCCF7},{0x584A, 0xCED4},{0x584B, 0xE7AB},{0x584F, 0xCBC3},{0x5851, 0xE1B1},{0x5854, 0xF7B2},
- {0x5857, 0xD3F3},{0x5858, 0xD3D2},{0x585A, 0xF5C0},{0x585E, 0xDFDD},{0x5861, 0xEEF3},{0x5862, 0xE7F1},{0x5864, 0xFDB4},{0x5875, 0xF2C8},
- {0x5879, 0xF3D2},{0x587C, 0xEEF4},{0x587E, 0xE2D3},{0x5883, 0xCCD1},{0x5885, 0xDFEA},{0x5889, 0xE9BA},{0x5893, 0xD9D7},{0x589C, 0xF5CD},
- {0x589E, 0xF1F2},{0x589F, 0xFAC7},{0x58A8, 0xD9F8},{0x58A9, 0xD4C2},{0x58AE, 0xF6E5},{0x58B3, 0xDDC5},{0x58BA, 0xE7F2},{0x58BB, 0xEDDF},
- {0x58BE, 0xCACB},{0x58C1, 0xDBFA},{0x58C5, 0xE8B5},{0x58C7, 0xD3A6},{0x58CE, 0xFDB5},{0x58D1, 0xF9C9},{0x58D3, 0xE4E2},{0x58D5, 0xFBBD},
- {0x58D8, 0xD7A4},{0x58D9, 0xCEC5},{0x58DE, 0xCED5},{0x58DF, 0xD6E6},{0x58E4, 0xE5BD},{0x58EB, 0xDECD},{0x58EC, 0xECF3},{0x58EF, 0xEDE0},
- {0x58F9, 0xECEC},{0x58FA, 0xFBBE},{0x58FB, 0xDFEB},{0x58FD, 0xE1F8},{0x590F, 0xF9BE},{0x5914, 0xD0F3},{0x5915, 0xE0AA},{0x5916, 0xE8E2},
- {0x5919, 0xE2D4},{0x591A, 0xD2FD},{0x591C, 0xE5A8},{0x5922, 0xD9D3},{0x5927, 0xD3DE},{0x5929, 0xF4B8},{0x592A, 0xF7BC},{0x592B, 0xDCFD},
- {0x592D, 0xE8EC},{0x592E, 0xE4E7},{0x5931, 0xE3F7},{0x5937, 0xECA8},{0x593E, 0xFAF1},{0x5944, 0xE5F2},{0x5947, 0xD0F4},{0x5948, 0xD2AF},
- {0x5949, 0xDCE5},{0x594E, 0xD0A5},{0x594F, 0xF1B4},{0x5950, 0xFCB1},{0x5951, 0xCCF8},{0x5954, 0xDDC6},{0x5955, 0xFAD1},{0x5957, 0xF7DF},
- {0x595A, 0xFAA8},{0x5960, 0xEEF5},{0x5962, 0xDECE},{0x5967, 0xE7F3},{0x596A, 0xF7AC},{0x596B, 0xEBC4},{0x596C, 0xEDE1},{0x596D, 0xE0AB},
- {0x596E, 0xDDC7},{0x5973, 0xD2B3},{0x5974, 0xD2BF},{0x5978, 0xCACC},{0x597D, 0xFBBF},{0x5982, 0xE5FD},{0x5983, 0xDDE5},{0x5984, 0xD8CD},
- {0x598A, 0xECF4},{0x5993, 0xD0F5},{0x5996, 0xE8ED},{0x5997, 0xD0D2},{0x5999, 0xD9D8},{0x59A5, 0xF6E6},{0x59A8, 0xDBAA},{0x59AC, 0xF7E0},
- {0x59B9, 0xD8D9},{0x59BB, 0xF4A3},{0x59BE, 0xF4DD},{0x59C3, 0xEFD1},{0x59C6, 0xD9B5},{0x59C9, 0xEDAB},{0x59CB, 0xE3B7},{0x59D0, 0xEEBB},
- {0x59D1, 0xCDB4},{0x59D3, 0xE0F3},{0x59D4, 0xEACD},{0x59D9, 0xECF5},{0x59DA, 0xE8EE},{0x59DC, 0xCBA9},{0x59DD, 0xF1AF},{0x59E6, 0xCACD},
- {0x59E8, 0xECA9},{0x59EA, 0xF2EB},{0x59EC, 0xFDEF},{0x59EE, 0xF9F3},{0x59F8, 0xE6C1},{0x59FB, 0xECD8},{0x59FF, 0xEDAC},{0x5A01, 0xEACE},
- {0x5A03, 0xE8DF},{0x5A11, 0xDECF},{0x5A18, 0xD2A6},{0x5A1B, 0xE7F4},{0x5A1C, 0xD1D6},{0x5A1F, 0xE6C2},{0x5A20, 0xE3E3},{0x5A25, 0xE4B0},
- {0x5A29, 0xD8B4},{0x5A36, 0xF6A5},{0x5A3C, 0xF3DE},{0x5A41, 0xD7A5},{0x5A46, 0xF7E8},{0x5A49, 0xE8C6},{0x5A5A, 0xFBE6},{0x5A62, 0xDDE6},
- {0x5A66, 0xDCFE},{0x5A92, 0xD8DA},{0x5A9A, 0xDAAC},{0x5A9B, 0xEAB0},{0x5AA4, 0xE3B8},{0x5AC1, 0xCAAA},{0x5AC2, 0xE1F9},{0x5AC4, 0xEAB1},
- {0x5AC9, 0xF2EC},{0x5ACC, 0xFAEE},{0x5AE1, 0xEED5},{0x5AE6, 0xF9F4},{0x5AE9, 0xD2EC},{0x5B05, 0xFBFB},{0x5B09, 0xFDF0},{0x5B0B, 0xE0BD},
- {0x5B0C, 0xCEE3},{0x5B16, 0xF8C6},{0x5B2A, 0xDEAE},{0x5B40, 0xDFC5},{0x5B43, 0xE5BE},{0x5B50, 0xEDAD},{0x5B51, 0xFAEA},{0x5B54, 0xCDEE},
- {0x5B55, 0xEDA6},{0x5B57, 0xEDAE},{0x5B58, 0xF0ED},{0x5B5A, 0xDDA1},{0x5B5C, 0xEDAF},{0x5B5D, 0xFCF8},{0x5B5F, 0xD8EB},{0x5B63, 0xCCF9},
- {0x5B64, 0xCDB5},{0x5B69, 0xFAA9},{0x5B6B, 0xE1DD},{0x5B70, 0xE2D5},{0x5B71, 0xEDCF},{0x5B75, 0xDDA2},{0x5B78, 0xF9CA},{0x5B7A, 0xEAE8},
- {0x5B7C, 0xE5ED},{0x5B85, 0xD3EB},{0x5B87, 0xE9D4},{0x5B88, 0xE1FA},{0x5B89, 0xE4CC},{0x5B8B, 0xE1E4},{0x5B8C, 0xE8C7},{0x5B8F, 0xCEDB},
- {0x5B93, 0xDCD5},{0x5B95, 0xF7B5},{0x5B96, 0xFCF3},{0x5B97, 0xF0F3},{0x5B98, 0xCEAF},{0x5B99, 0xF1B5},{0x5B9A, 0xEFD2},{0x5B9B, 0xE8C8},
- {0x5B9C, 0xEBF1},{0x5BA2, 0xCBD4},{0x5BA3, 0xE0BE},{0x5BA4, 0xE3F8},{0x5BA5, 0xEAE9},{0x5BA6, 0xFCB2},{0x5BAC, 0xE0F4},{0x5BAE, 0xCFE0},
- {0x5BB0, 0xEEA5},{0x5BB3, 0xFAAA},{0x5BB4, 0xE6C3},{0x5BB5, 0xE1B2},{0x5BB6, 0xCAAB},{0x5BB8, 0xE3E4},{0x5BB9, 0xE9BB},{0x5BBF, 0xE2D6},
- {0x5BC0, 0xF3F2},{0x5BC2, 0xEED6},{0x5BC3, 0xEAB2},{0x5BC4, 0xD0F6},{0x5BC5, 0xECD9},{0x5BC6, 0xDACB},{0x5BC7, 0xCFA8},{0x5BCC, 0xDDA3},
- {0x5BD0, 0xD8DB},{0x5BD2, 0xF9CE},{0x5BD3, 0xE9D5},{0x5BD4, 0xE3D1},{0x5BD7, 0xD2BC},{0x5BDE, 0xD8AC},{0x5BDF, 0xF3CC},{0x5BE1, 0xCDFB},
- {0x5BE2, 0xF6D6},{0x5BE4, 0xE7F5},{0x5BE5, 0xE8EF},{0x5BE6, 0xE3F9},{0x5BE7, 0xD2BB},{0x5BE8, 0xF3F3},{0x5BE9, 0xE3FB},{0x5BEB, 0xDED0},
- {0x5BEC, 0xCEB0},{0x5BEE, 0xD6F7},{0x5BEF, 0xF1D9},{0x5BF5, 0xF5C1},{0x5BF6, 0xDCC4},{0x5BF8, 0xF5BB},{0x5BFA, 0xDED1},{0x5C01, 0xDCE6},
- {0x5C04, 0xDED2},{0x5C07, 0xEDE2},{0x5C08, 0xEEF6},{0x5C09, 0xEACF},{0x5C0A, 0xF0EE},{0x5C0B, 0xE3FC},{0x5C0D, 0xD3DF},{0x5C0E, 0xD3F4},
- {0x5C0F, 0xE1B3},{0x5C11, 0xE1B4},{0x5C16, 0xF4D3},{0x5C19, 0xDFC6},{0x5C24, 0xE9D6},{0x5C28, 0xDBAB},{0x5C31, 0xF6A6},{0x5C38, 0xE3B9},
- {0x5C39, 0xEBC5},{0x5C3A, 0xF4A9},{0x5C3B, 0xCDB6},{0x5C3C, 0xD2F9},{0x5C3E, 0xDAAD},{0x5C3F, 0xD2E3},{0x5C40, 0xCFD1},{0x5C45, 0xCBDC},
- {0x5C46, 0xCCFA},{0x5C48, 0xCFDD},{0x5C4B, 0xE8A9},{0x5C4D, 0xE3BB},{0x5C4E, 0xE3BA},{0x5C51, 0xE0DA},{0x5C55, 0xEEF7},{0x5C5B, 0xDCB3},
- {0x5C60, 0xD3F5},{0x5C62, 0xD7A6},{0x5C64, 0xF6B5},{0x5C65, 0xD7DB},{0x5C6C, 0xE1D5},{0x5C6F, 0xD4EA},{0x5C71, 0xDFA3},{0x5C79, 0xFDDF},
- {0x5C90, 0xD0F7},{0x5C91, 0xEDD4},{0x5CA1, 0xCBAA},{0x5CA9, 0xE4DB},{0x5CAB, 0xE1FB},{0x5CAC, 0xCBA2},{0x5CB1, 0xD3E0},{0x5CB3, 0xE4BF},
- {0x5CB5, 0xFBC0},{0x5CB7, 0xDABE},{0x5CB8, 0xE4CD},{0x5CBA, 0xD6B9},{0x5CBE, 0xEFC0},{0x5CC0, 0xE1FC},{0x5CD9, 0xF6B9},{0x5CE0, 0xDFC7},
- {0x5CE8, 0xE4B1},{0x5CEF, 0xDCE7},{0x5CF0, 0xDCE8},{0x5CF4, 0xFAD6},{0x5CF6, 0xD3F6},{0x5CFB, 0xF1DA},{0x5CFD, 0xFAF2},{0x5D07, 0xE2FD},
- {0x5D0D, 0xD5CF},{0x5D0E, 0xD0F8},{0x5D11, 0xCDDF},{0x5D14, 0xF5CB},{0x5D16, 0xE4F0},{0x5D17, 0xCBAB},{0x5D19, 0xD7C4},{0x5D27, 0xE2FE},
- {0x5D29, 0xDDDA},{0x5D4B, 0xDAAE},{0x5D4C, 0xCAEE},{0x5D50, 0xD5B9},{0x5D69, 0xE3A1},{0x5D6C, 0xE8E3},{0x5D6F, 0xF3AB},{0x5D87, 0xCFA9},
- {0x5D8B, 0xD3F7},{0x5D9D, 0xD4F1},{0x5DA0, 0xCEE4},{0x5DA2, 0xE8F2},{0x5DAA, 0xE5F5},{0x5DB8, 0xE7AE},{0x5DBA, 0xD6BA},{0x5DBC, 0xDFEC},
- {0x5DBD, 0xE4C0},{0x5DCD, 0xE8E4},{0x5DD2, 0xD8B5},{0x5DD6, 0xE4DC},{0x5DDD, 0xF4B9},{0x5DDE, 0xF1B6},{0x5DE1, 0xE2DE},{0x5DE2, 0xE1B5},
- {0x5DE5, 0xCDEF},{0x5DE6, 0xF1A7},{0x5DE7, 0xCEE5},{0x5DE8, 0xCBDD},{0x5DEB, 0xD9E3},{0x5DEE, 0xF3AC},{0x5DF1, 0xD0F9},{0x5DF2, 0xECAB},
- {0x5DF3, 0xDED3},{0x5DF4, 0xF7E9},{0x5DF7, 0xF9F5},{0x5DFD, 0xE1DE},{0x5DFE, 0xCBEE},{0x5E02, 0xE3BC},{0x5E03, 0xF8D6},{0x5E06, 0xDBEE},
- {0x5E0C, 0xFDF1},{0x5E11, 0xF7B6},{0x5E16, 0xF4DE},{0x5E19, 0xF2ED},{0x5E1B, 0xDBD9},{0x5E1D, 0xF0A8},{0x5E25, 0xE1FD},{0x5E2B, 0xDED4},
- {0x5E2D, 0xE0AC},{0x5E33, 0xEDE3},{0x5E36, 0xD3E1},{0x5E38, 0xDFC8},{0x5E3D, 0xD9B6},{0x5E3F, 0xFDAC},{0x5E40, 0xEFD3},{0x5E44, 0xE4C1},
- {0x5E45, 0xF8EB},{0x5E47, 0xDBAC},{0x5E4C, 0xFCC6},{0x5E55, 0xD8AD},{0x5E5F, 0xF6BA},{0x5E61, 0xDBDF},{0x5E62, 0xD3D3},{0x5E63, 0xF8C7},
- {0x5E72, 0xCACE},{0x5E73, 0xF8C1},{0x5E74, 0xD2B4},{0x5E77, 0xDCB4},{0x5E78, 0xFAB9},{0x5E79, 0xCACF},{0x5E7B, 0xFCB3},{0x5E7C, 0xEAEA},
- {0x5E7D, 0xEAEB},{0x5E7E, 0xD0FA},{0x5E84, 0xEDE4},{0x5E87, 0xDDE7},{0x5E8A, 0xDFC9},{0x5E8F, 0xDFED},{0x5E95, 0xEEBC},{0x5E97, 0xEFC1},
- {0x5E9A, 0xCCD2},{0x5E9C, 0xDDA4},{0x5EA0, 0xDFCA},{0x5EA6, 0xD3F8},{0x5EA7, 0xF1A8},{0x5EAB, 0xCDB7},{0x5EAD, 0xEFD4},{0x5EB5, 0xE4DD},
- {0x5EB6, 0xDFEE},{0x5EB7, 0xCBAC},{0x5EB8, 0xE9BC},{0x5EBE, 0xEAEC},{0x5EC2, 0xDFCB},{0x5EC8, 0xF9BF},{0x5EC9, 0xD6AF},{0x5ECA, 0xD5C6},
- {0x5ED0, 0xCFAA},{0x5ED3, 0xCEA9},{0x5ED6, 0xD6F8},{0x5EDA, 0xF1B7},{0x5EDB, 0xEEF8},{0x5EDF, 0xD9D9},{0x5EE0, 0xF3DF},{0x5EE2, 0xF8C8},
- {0x5EE3, 0xCEC6},{0x5EEC, 0xD5E6},{0x5EF3, 0xF4E6},{0x5EF6, 0xE6C5},{0x5EF7, 0xEFD5},{0x5EFA, 0xCBEF},{0x5EFB, 0xFCDF},{0x5F01, 0xDCA7},
- {0x5F04, 0xD6E7},{0x5F0A, 0xF8C9},{0x5F0F, 0xE3D2},{0x5F11, 0xE3BD},{0x5F13, 0xCFE1},{0x5F14, 0xF0C0},{0x5F15, 0xECDA},{0x5F17, 0xDDD7},
- {0x5F18, 0xFBF0},{0x5F1B, 0xECAC},{0x5F1F, 0xF0A9},{0x5F26, 0xFAD7},{0x5F27, 0xFBC1},{0x5F29, 0xD2C0},{0x5F31, 0xE5B0},{0x5F35, 0xEDE5},
- {0x5F3A, 0xCBAD},{0x5F3C, 0xF9B0},{0x5F48, 0xF7A5},{0x5F4A, 0xCBAE},{0x5F4C, 0xDAAF},{0x5F4E, 0xD8B6},{0x5F56, 0xD3A7},{0x5F57, 0xFBB2},
- {0x5F59, 0xFDC4},{0x5F5B, 0xECAD},{0x5F62, 0xFBA1},{0x5F66, 0xE5E9},{0x5F67, 0xE9EE},{0x5F69, 0xF3F4},{0x5F6A, 0xF8F3},{0x5F6B, 0xF0C1},
- {0x5F6C, 0xDEAF},{0x5F6D, 0xF8B0},{0x5F70, 0xF3E0},{0x5F71, 0xE7AF},{0x5F77, 0xDBAD},{0x5F79, 0xE6B5},{0x5F7C, 0xF9A8},{0x5F7F, 0xDDD8},
- {0x5F80, 0xE8D9},{0x5F81, 0xEFD6},{0x5F85, 0xD3E2},{0x5F87, 0xE2DF},{0x5F8A, 0xFCE0},{0x5F8B, 0xD7C8},{0x5F8C, 0xFDAD},{0x5F90, 0xDFEF},
- {0x5F91, 0xCCD3},{0x5F92, 0xD3F9},{0x5F97, 0xD4F0},{0x5F98, 0xDBC7},{0x5F99, 0xDED5},{0x5F9E, 0xF0F4},{0x5FA0, 0xD5D0},{0x5FA1, 0xE5D9},
- {0x5FA8, 0xFCC7},{0x5FA9, 0xDCD6},{0x5FAA, 0xE2E0},{0x5FAE, 0xDAB0},{0x5FB5, 0xF3A3},{0x5FB7, 0xD3EC},{0x5FB9, 0xF4CB},{0x5FBD, 0xFDC5},
- {0x5FC3, 0xE3FD},{0x5FC5, 0xF9B1},{0x5FCC, 0xD0FB},{0x5FCD, 0xECDB},{0x5FD6, 0xF5BC},{0x5FD7, 0xF2A4},{0x5FD8, 0xD8CE},{0x5FD9, 0xD8CF},
- {0x5FE0, 0xF5F7},{0x5FEB, 0xF6E1},{0x5FF5, 0xD2B7},{0x5FFD, 0xFBEC},{0x5FFF, 0xDDC8},{0x600F, 0xE4E8},{0x6012, 0xD2C1},{0x6016, 0xF8D7},
- {0x601C, 0xD6BB},{0x601D, 0xDED6},{0x6020, 0xF7BD},{0x6021, 0xECAE},{0x6025, 0xD0E1},{0x6027, 0xE0F5},{0x6028, 0xEAB3},{0x602A, 0xCED6},
- {0x602F, 0xCCA5},{0x6041, 0xECF6},{0x6042, 0xE2E1},{0x6043, 0xE3BE},{0x604D, 0xFCC8},{0x6050, 0xCDF0},{0x6052, 0xF9F6},{0x6055, 0xDFF0},
- {0x6059, 0xE5BF},{0x605D, 0xCEBF},{0x6062, 0xFCE1},{0x6063, 0xEDB0},{0x6064, 0xFDD1},{0x6065, 0xF6BB},{0x6068, 0xF9CF},{0x6069, 0xEBDA},
- {0x606A, 0xCAC1},{0x606C, 0xD2B8},{0x606D, 0xCDF1},{0x606F, 0xE3D3},{0x6070, 0xFDE6},{0x6085, 0xE6ED},{0x6089, 0xE3FA},{0x608C, 0xF0AA},
- {0x608D, 0xF9D0},{0x6094, 0xFCE2},{0x6096, 0xF8A7},{0x609A, 0xE1E5},{0x609B, 0xEEF9},{0x609F, 0xE7F6},{0x60A0, 0xEAED},{0x60A3, 0xFCB4},
- {0x60A4, 0xF5C2},{0x60A7, 0xD7DC},{0x60B0, 0xF0F5},{0x60B2, 0xDDE8},{0x60B3, 0xD3ED},{0x60B4, 0xF5FC},{0x60B6, 0xDABF},{0x60B8, 0xCCFB},
- {0x60BC, 0xD3FA},{0x60BD, 0xF4A4},{0x60C5, 0xEFD7},{0x60C7, 0xD4C3},{0x60D1, 0xFBE3},{0x60DA, 0xFBED},{0x60DC, 0xE0AD},{0x60DF, 0xEAEE},
- {0x60E0, 0xFBB3},{0x60E1, 0xE4C2},{0x60F0, 0xF6E7},{0x60F1, 0xD2DD},{0x60F3, 0xDFCC},{0x60F6, 0xFCC9},{0x60F9, 0xE5A9},{0x60FA, 0xE0F6},
- {0x60FB, 0xF6B3},{0x6101, 0xE1FE},{0x6106, 0xCBF0},{0x6108, 0xEAEF},{0x6109, 0xEAF0},{0x610D, 0xDAC0},{0x610E, 0xF8B4},{0x610F, 0xEBF2},
- {0x6115, 0xE4C3},{0x611A, 0xE9D7},{0x611B, 0xE4F1},{0x611F, 0xCAEF},{0x6127, 0xCED7},{0x6130, 0xFCCA},{0x6134, 0xF3E1},{0x6137, 0xCBC4},
- {0x613C, 0xE3E5},{0x613E, 0xCBC5},{0x613F, 0xEAB4},{0x6142, 0xE9BD},{0x6144, 0xD7C9},{0x6147, 0xEBDB},{0x6148, 0xEDB1},{0x614A, 0xCCC3},
- {0x614B, 0xF7BE},{0x614C, 0xFCCB},{0x6153, 0xF8F4},{0x6155, 0xD9B7},{0x6158, 0xF3D3},{0x6159, 0xF3D4},{0x615D, 0xF7E4},{0x615F, 0xF7D1},
- {0x6162, 0xD8B7},{0x6163, 0xCEB1},{0x6164, 0xCAC2},{0x6167, 0xFBB4},{0x6168, 0xCBC6},{0x616B, 0xF0F6},{0x616E, 0xD5E7},{0x6170, 0xEAD0},
- {0x6176, 0xCCD4},{0x6177, 0xCBAF},{0x617D, 0xF4AA},{0x617E, 0xE9AF},{0x6181, 0xF5C3},{0x6182, 0xE9D8},{0x618A, 0xDDE9},{0x618E, 0xF1F3},
- {0x6190, 0xD5FB},{0x6191, 0xDEBB},{0x6194, 0xF4FB},{0x6198, 0xFDF3},{0x6199, 0xFDF2},{0x619A, 0xF7A6},{0x61A4, 0xDDC9},{0x61A7, 0xD4D3},
- {0x61A9, 0xCCA8},{0x61AB, 0xDAC1},{0x61AC, 0xCCD5},{0x61AE, 0xD9E4},{0x61B2, 0xFACA},{0x61B6, 0xE5E3},{0x61BA, 0xD3BC},{0x61BE, 0xCAF0},
- {0x61C3, 0xD0C4},{0x61C7, 0xCAD0},{0x61C8, 0xFAAB},{0x61C9, 0xEBEB},{0x61CA, 0xE7F8},{0x61CB, 0xD9E5},{0x61E6, 0xD1D7},{0x61F2, 0xF3A4},
- {0x61F6, 0xD4FB},{0x61F7, 0xFCE3},{0x61F8, 0xFAD8},{0x61FA, 0xF3D5},{0x61FC, 0xCFAB},{0x61FF, 0xEBF3},{0x6200, 0xD5FC},{0x6207, 0xD3D4},
- {0x6208, 0xCDFC},{0x620A, 0xD9E6},{0x620C, 0xE2F9},{0x620D, 0xE2A1},{0x620E, 0xEBD4},{0x6210, 0xE0F7},{0x6211, 0xE4B2},{0x6212, 0xCCFC},
- {0x6216, 0xFBE4},{0x621A, 0xF4AB},{0x621F, 0xD0BD},{0x6221, 0xCAF1},{0x622A, 0xEFB8},{0x622E, 0xD7C0},{0x6230, 0xEEFA},{0x6231, 0xFDF4},
- {0x6234, 0xD3E3},{0x6236, 0xFBC2},{0x623E, 0xD5E8},{0x623F, 0xDBAE},{0x6240, 0xE1B6},{0x6241, 0xF8B7},{0x6247, 0xE0BF},{0x6248, 0xFBC3},
- {0x6249, 0xDDEA},{0x624B, 0xE2A2},{0x624D, 0xEEA6},{0x6253, 0xF6E8},{0x6258, 0xF6F5},{0x626E, 0xDDCA},{0x6271, 0xD0E2},{0x6276, 0xDDA6},
- {0x6279, 0xDDEB},{0x627C, 0xE4F9},{0x627F, 0xE3AF},{0x6280, 0xD0FC},{0x6284, 0xF4FC},{0x6289, 0xCCBC},{0x628A, 0xF7EA},{0x6291, 0xE5E4},
- {0x6292, 0xDFF1},{0x6295, 0xF7E1},{0x6297, 0xF9F7},{0x6298, 0xEFB9},{0x629B, 0xF8D8},{0x62AB, 0xF9A9},{0x62B1, 0xF8D9},{0x62B5, 0xEEBD},
- {0x62B9, 0xD8C6},{0x62BC, 0xE4E3},{0x62BD, 0xF5CE},{0x62C2, 0xDDD9},{0x62C7, 0xD9E7},{0x62C8, 0xD2B9},{0x62C9, 0xD5C3},{0x62CC, 0xDAE5},
- {0x62CD, 0xDAD0},{0x62CF, 0xD1D9},{0x62D0, 0xCED8},{0x62D2, 0xCBDE},{0x62D3, 0xF4AC},{0x62D4, 0xDAFB},{0x62D6, 0xF6E9},{0x62D7, 0xE8F3},
- {0x62D8, 0xCFAC},{0x62D9, 0xF0F0},{0x62DB, 0xF4FD},{0x62DC, 0xDBC8},{0x62EC, 0xCEC0},{0x62ED, 0xE3D4},{0x62EE, 0xD1CF},{0x62EF, 0xF1F5},
- {0x62F1, 0xCDF2},{0x62F3, 0xCFEB},{0x62F7, 0xCDB8},{0x62FE, 0xE3A6},{0x62FF, 0xD1DA},{0x6301, 0xF2A5},{0x6307, 0xF2A6},{0x6309, 0xE4CE},
- {0x6311, 0xD3FB},{0x632B, 0xF1A9},{0x632F, 0xF2C9},{0x633A, 0xEFD8},{0x633B, 0xE6C9},{0x633D, 0xD8B8},{0x633E, 0xFAF3},{0x6349, 0xF3B5},
- {0x634C, 0xF8A4},{0x634F, 0xD1F3},{0x6350, 0xE6C8},{0x6355, 0xF8DA},{0x6367, 0xDCE9},{0x6368, 0xDED7},{0x636E, 0xCBDF},{0x6372, 0xCFEC},
- {0x6377, 0xF4DF},{0x637A, 0xD1F4},{0x637B, 0xD2BA},{0x637F, 0xDFF2},{0x6383, 0xE1B7},{0x6388, 0xE2A3},{0x6389, 0xD3FC},{0x638C, 0xEDE6},
- {0x6392, 0xDBC9},{0x6396, 0xE4FA},{0x6398, 0xCFDE},{0x639B, 0xCED0},{0x63A0, 0xD5D3},{0x63A1, 0xF3F5},{0x63A2, 0xF7AE},{0x63A5, 0xEFC8},
- {0x63A7, 0xCDF3},{0x63A8, 0xF5CF},{0x63A9, 0xE5F3},{0x63AA, 0xF0C2},{0x63C0, 0xCAD1},{0x63C4, 0xEAF1},{0x63C6, 0xD0A6},{0x63CF, 0xD9DA},
- {0x63D0, 0xF0AB},{0x63D6, 0xEBE7},{0x63DA, 0xE5C0},{0x63DB, 0xFCB5},{0x63E1, 0xE4C4},{0x63ED, 0xCCA9},{0x63EE, 0xFDC6},{0x63F4, 0xEAB5},
- {0x63F6, 0xE5AA},{0x63F7, 0xDFBA},{0x640D, 0xE1DF},{0x640F, 0xDAD1},{0x6414, 0xE1B8},{0x6416, 0xE8F4},{0x6417, 0xD3FD},{0x641C, 0xE2A4},
- {0x6422, 0xF2CA},{0x642C, 0xDAE6},{0x642D, 0xF7B3},{0x643A, 0xFDCD},{0x643E, 0xF3B6},{0x6458, 0xEED7},{0x6460, 0xF5C4},{0x6469, 0xD8A4},
- {0x646F, 0xF2A7},{0x6478, 0xD9B8},{0x6479, 0xD9B9},{0x647A, 0xEFC9},{0x6488, 0xD6CE},{0x6491, 0xF7CB},{0x6492, 0xDFAE},{0x6493, 0xE8F5},
- {0x649A, 0xD2B5},{0x649E, 0xD3D5},{0x64A4, 0xF4CC},{0x64A5, 0xDAFC},{0x64AB, 0xD9E8},{0x64AD, 0xF7EB},{0x64AE, 0xF5C9},{0x64B0, 0xF3BC},
- {0x64B2, 0xDAD2},{0x64BB, 0xD3B5},{0x64C1, 0xE8B6},{0x64C4, 0xD6CF},{0x64C5, 0xF4BA},{0x64C7, 0xF7C9},{0x64CA, 0xCCAA},{0x64CD, 0xF0C3},
- {0x64CE, 0xCCD6},{0x64D2, 0xD0D3},{0x64D4, 0xD3BD},{0x64D8, 0xDBFB},{0x64DA, 0xCBE0},{0x64E1, 0xD3E4},{0x64E2, 0xF6F7},{0x64E5, 0xD5BA},
- {0x64E6, 0xF3CD},{0x64E7, 0xCBE1},{0x64EC, 0xEBF4},{0x64F2, 0xF4AD},{0x64F4, 0xFCAA},{0x64FA, 0xF7EC},{0x64FE, 0xE8F6},{0x6500, 0xDAE7},
- {0x6504, 0xF7CC},{0x6518, 0xE5C1},{0x651D, 0xE0EE},{0x6523, 0xD5FD},{0x652A, 0xCEE6},{0x652B, 0xFCAB},{0x652C, 0xD5BB},{0x652F, 0xF2A8},
- {0x6536, 0xE2A5},{0x6537, 0xCDB9},{0x6538, 0xEAF2},{0x6539, 0xCBC7},{0x653B, 0xCDF4},{0x653E, 0xDBAF},{0x653F, 0xEFD9},{0x6545, 0xCDBA},
- {0x6548, 0xFCF9},{0x654D, 0xDFF3},{0x654E, 0xCEE7},{0x654F, 0xDAC2},{0x6551, 0xCFAD},{0x6556, 0xE7F9},{0x6557, 0xF8A8},{0x655E, 0xF3E2},
- {0x6562, 0xCAF2},{0x6563, 0xDFA4},{0x6566, 0xD4C4},{0x656C, 0xCCD7},{0x656D, 0xE5C2},{0x6572, 0xCDBB},{0x6574, 0xEFDA},{0x6575, 0xEED8},
- {0x6577, 0xDDA7},{0x6578, 0xE2A6},{0x657E, 0xE0C0},{0x6582, 0xD6B0},{0x6583, 0xF8CA},{0x6585, 0xFCFA},{0x6587, 0xD9FE},{0x658C, 0xDEB0},
- {0x6590, 0xDDEC},{0x6591, 0xDAE8},{0x6597, 0xD4E0},{0x6599, 0xD6F9},{0x659B, 0xCDD7},{0x659C, 0xDED8},{0x659F, 0xF2F8},{0x65A1, 0xE4D6},
- {0x65A4, 0xD0C5},{0x65A5, 0xF4AE},{0x65A7, 0xDDA8},{0x65AB, 0xEDC5},{0x65AC, 0xF3D6},{0x65AF, 0xDED9},{0x65B0, 0xE3E6},{0x65B7, 0xD3A8},
- {0x65B9, 0xDBB0},{0x65BC, 0xE5DA},{0x65BD, 0xE3BF},{0x65C1, 0xDBB1},{0x65C5, 0xD5E9},{0x65CB, 0xE0C1},{0x65CC, 0xEFDB},{0x65CF, 0xF0E9},
- {0x65D2, 0xD7B2},{0x65D7, 0xD0FD},{0x65E0, 0xD9E9},{0x65E3, 0xD0FE},{0x65E5, 0xECED},{0x65E6, 0xD3A9},{0x65E8, 0xF2A9},{0x65E9, 0xF0C4},
- {0x65EC, 0xE2E2},{0x65ED, 0xE9EF},{0x65F1, 0xF9D1},{0x65F4, 0xE9D9},{0x65FA, 0xE8DA},{0x65FB, 0xDAC3},{0x65FC, 0xDAC4},{0x65FD, 0xD4C5},
- {0x65FF, 0xE7FA},{0x6606, 0xCDE0},{0x6607, 0xE3B0},{0x6609, 0xDBB2},{0x660A, 0xFBC4},{0x660C, 0xF3E3},{0x660E, 0xD9A5},{0x660F, 0xFBE7},
- {0x6610, 0xDDCB},{0x6611, 0xD0D4},{0x6613, 0xE6B6},{0x6614, 0xE0AE},{0x6615, 0xFDDA},{0x661E, 0xDCB5},{0x661F, 0xE0F8},{0x6620, 0xE7B1},
- {0x6625, 0xF5F0},{0x6627, 0xD8DC},{0x6628, 0xEDC6},{0x662D, 0xE1B9},{0x662F, 0xE3C0},{0x6630, 0xF9C0},{0x6631, 0xE9F0},{0x6634, 0xD9DB},
- {0x6636, 0xF3E4},{0x663A, 0xDCB6},{0x663B, 0xE4E9},{0x6641, 0xF0C5},{0x6642, 0xE3C1},{0x6643, 0xFCCC},{0x6644, 0xFCCD},{0x6649, 0xF2CB},
- {0x664B, 0xF2CC},{0x664F, 0xE4CF},{0x6659, 0xF1DB},{0x665B, 0xFAD9},{0x665D, 0xF1B8},{0x665E, 0xFDF5},{0x665F, 0xE0F9},{0x6664, 0xE7FB},
- {0x6665, 0xFCB7},{0x6666, 0xFCE4},{0x6667, 0xFBC5},{0x6668, 0xE3E7},{0x6669, 0xD8B9},{0x666B, 0xF6F8},{0x666E, 0xDCC5},{0x666F, 0xCCD8},
- {0x6673, 0xE0AF},{0x6674, 0xF4E7},{0x6676, 0xEFDC},{0x6677, 0xCFFC},{0x6678, 0xEFDD},{0x667A, 0xF2AA},{0x6684, 0xFDBE},{0x6687, 0xCAAC},
- {0x6688, 0xFDBB},{0x6689, 0xFDC7},{0x668E, 0xE7B2},{0x6690, 0xEAD1},{0x6691, 0xDFF4},{0x6696, 0xD1EC},{0x6697, 0xE4DE},{0x6698, 0xE5C3},
- {0x669D, 0xD9A6},{0x66A0, 0xCDBC},{0x66A2, 0xF3E5},{0x66AB, 0xEDD5},{0x66AE, 0xD9BA},{0x66B2, 0xEDE7},{0x66B3, 0xFBB5},{0x66B4, 0xF8EC},
- {0x66B9, 0xE0E7},{0x66BB, 0xCCD9},{0x66BE, 0xD4C6},{0x66C4, 0xE7A5},{0x66C6, 0xD5F5},{0x66C7, 0xD3BE},{0x66C9, 0xFCFB},{0x66D6, 0xE4F2},
- {0x66D9, 0xDFF5},{0x66DC, 0xE8F8},{0x66DD, 0xF8ED},{0x66E0, 0xCEC7},{0x66E6, 0xFDF6},{0x66F0, 0xE8D8},{0x66F2, 0xCDD8},{0x66F3, 0xE7D6},
- {0x66F4, 0xCCDA},{0x66F7, 0xCAE3},{0x66F8, 0xDFF6},{0x66F9, 0xF0C7},{0x66FA, 0xF0C6},{0x66FC, 0xD8BA},{0x66FE, 0xF1F4},{0x66FF, 0xF4F0},
- {0x6700, 0xF5CC},{0x6703, 0xFCE5},{0x6708, 0xEAC5},{0x6709, 0xEAF3},{0x670B, 0xDDDB},{0x670D, 0xDCD7},{0x6714, 0xDEFD},{0x6715, 0xF2F9},
- {0x6717, 0xD5C7},{0x671B, 0xD8D0},{0x671D, 0xF0C8},{0x671E, 0xD1A1},{0x671F, 0xD1A2},{0x6726, 0xD9D4},{0x6727, 0xD6E8},{0x6728, 0xD9CA},
- {0x672A, 0xDAB1},{0x672B, 0xD8C7},{0x672C, 0xDCE2},{0x672D, 0xF3CE},{0x672E, 0xF5F4},{0x6731, 0xF1B9},{0x6734, 0xDAD3},{0x6736, 0xF6EA},
- {0x673A, 0xCFF5},{0x673D, 0xFDAE},{0x6746, 0xCAD2},{0x6749, 0xDFB4},{0x674E, 0xD7DD},{0x674F, 0xFABA},{0x6750, 0xEEA7},{0x6751, 0xF5BD},
- {0x6753, 0xF8F5},{0x6756, 0xEDE8},{0x675C, 0xD4E1},{0x675E, 0xD1A3},{0x675F, 0xE1D6},{0x676D, 0xF9F8},{0x676F, 0xDBCA},{0x6770, 0xCBF9},
- {0x6771, 0xD4D4},{0x6773, 0xD9DC},{0x6775, 0xEEBE},{0x6777, 0xF7ED},{0x677B, 0xD2EE},{0x677E, 0xE1E6},{0x677F, 0xF7F9},{0x6787, 0xDDED},
- {0x6789, 0xE8DB},{0x678B, 0xDBB3},{0x678F, 0xD1F7},{0x6790, 0xE0B0},{0x6793, 0xD4E2},{0x6795, 0xF6D7},{0x6797, 0xD7F9},{0x679A, 0xD8DD},
- {0x679C, 0xCDFD},{0x679D, 0xF2AB},{0x67AF, 0xCDBD},{0x67B0, 0xF8C2},{0x67B3, 0xF2AC},{0x67B6, 0xCAAD},{0x67B7, 0xCAAE},{0x67B8, 0xCFAE},
- {0x67BE, 0xE3C2},{0x67C4, 0xDCB7},{0x67CF, 0xDBDA},{0x67D0, 0xD9BB},{0x67D1, 0xCAF3},{0x67D2, 0xF6D3},{0x67D3, 0xE6F8},{0x67D4, 0xEAF5},
- {0x67DA, 0xEAF6},{0x67DD, 0xF6F9},{0x67E9, 0xCFAF},{0x67EC, 0xCAD3},{0x67EF, 0xCAAF},{0x67F0, 0xD2B0},{0x67F1, 0xF1BA},{0x67F3, 0xD7B3},
- {0x67F4, 0xE3C3},{0x67F5, 0xF3FD},{0x67F6, 0xDEDA},{0x67FB, 0xDEDB},{0x67FE, 0xEFDE},{0x6812, 0xE2E3},{0x6813, 0xEEFB},{0x6816, 0xDFF7},
- {0x6817, 0xD7CA},{0x6821, 0xCEE8},{0x6822, 0xDBDB},{0x682A, 0xF1BB},{0x682F, 0xE9F1},{0x6838, 0xFAB7},{0x6839, 0xD0C6},{0x683C, 0xCCAB},
- {0x683D, 0xEEA8},{0x6840, 0xCBFA},{0x6841, 0xF9F9},{0x6842, 0xCCFD},{0x6843, 0xD3FE},{0x6848, 0xE4D0},{0x684E, 0xF2EE},{0x6850, 0xD4D5},
- {0x6851, 0xDFCD},{0x6853, 0xFCB8},{0x6854, 0xD1D0},{0x686D, 0xF2CD},{0x6876, 0xF7D2},{0x687F, 0xCAD4},{0x6881, 0xD5D9},{0x6885, 0xD8DE},
- {0x688F, 0xCDD9},{0x6893, 0xEEA9},{0x6894, 0xF6BC},{0x6897, 0xCCDB},{0x689D, 0xF0C9},{0x689F, 0xFCFC},{0x68A1, 0xE8C9},{0x68A2, 0xF4FE},
- {0x68A7, 0xE7FC},{0x68A8, 0xD7DE},{0x68AD, 0xDEDC},{0x68AF, 0xF0AC},{0x68B0, 0xCCFE},{0x68B1, 0xCDE1},{0x68B3, 0xE1BA},{0x68B5, 0xDBEF},
- {0x68B6, 0xDAB2},{0x68C4, 0xD1A5},{0x68C5, 0xDCB8},{0x68C9, 0xD8F6},{0x68CB, 0xD1A4},{0x68CD, 0xCDE2},{0x68D2, 0xDCEA},{0x68D5, 0xF0F7},
- {0x68D7, 0xF0CA},{0x68D8, 0xD0BE},{0x68DA, 0xDDDC},{0x68DF, 0xD4D6},{0x68E0, 0xD3D6},{0x68E7, 0xEDD0},{0x68E8, 0xCDA1},{0x68EE, 0xDFB5},
- {0x68F2, 0xDFF8},{0x68F9, 0xD4A1},{0x68FA, 0xCEB2},{0x6900, 0xE8CA},{0x6905, 0xEBF5},{0x690D, 0xE3D5},{0x690E, 0xF5D0},{0x6912, 0xF5A1},
- {0x6927, 0xD9A7},{0x6930, 0xE5AB},{0x693D, 0xE6CB},{0x693F, 0xF5F1},{0x694A, 0xE5C5},{0x6953, 0xF9A3},{0x6954, 0xE0DB},{0x6955, 0xF6EB},
- {0x6957, 0xCBF1},{0x6959, 0xD9EA},{0x695A, 0xF5A2},{0x695E, 0xD7D1},{0x6960, 0xD1F8},{0x6961, 0xEAF8},{0x6962, 0xEAF9},{0x6963, 0xDAB3},
- {0x6968, 0xEFDF},{0x696B, 0xF1EF},{0x696D, 0xE5F6},{0x696E, 0xEEBF},{0x696F, 0xE2E4},{0x6975, 0xD0BF},{0x6977, 0xFAAC},{0x6978, 0xF5D1},
- {0x6979, 0xE7B3},{0x6995, 0xE9BE},{0x699B, 0xF2CE},{0x699C, 0xDBB4},{0x69A5, 0xFCCE},{0x69A7, 0xDDEE},{0x69AE, 0xE7B4},{0x69B4, 0xD7B4},
- {0x69BB, 0xF7B4},{0x69C1, 0xCDBE},{0x69C3, 0xDAE9},{0x69CB, 0xCFB0},{0x69CC, 0xF7D9},{0x69CD, 0xF3E6},{0x69D0, 0xCED9},{0x69E8, 0xCEAA},
- {0x69EA, 0xCBC8},{0x69FB, 0xD0A7},{0x69FD, 0xF0CB},{0x69FF, 0xD0C7},{0x6A02, 0xE4C5},{0x6A0A, 0xDBE0},{0x6A11, 0xD5DA},{0x6A13, 0xD7A7},
- {0x6A17, 0xEEC0},{0x6A19, 0xF8F6},{0x6A1E, 0xF5D2},{0x6A1F, 0xEDE9},{0x6A21, 0xD9BC},{0x6A23, 0xE5C6},{0x6A35, 0xF5A3},{0x6A38, 0xDAD4},
- {0x6A39, 0xE2A7},{0x6A3A, 0xFBFC},{0x6A3D, 0xF1DC},{0x6A44, 0xCAF4},{0x6A48, 0xE8FA},{0x6A4B, 0xCEE9},{0x6A52, 0xE9F8},{0x6A53, 0xE2E5},
- {0x6A58, 0xD0B9},{0x6A59, 0xD4F2},{0x6A5F, 0xD1A6},{0x6A61, 0xDFCE},{0x6A6B, 0xFCF4},{0x6A80, 0xD3AA},{0x6A84, 0xCCAC},{0x6A89, 0xEFE0},
- {0x6A8D, 0xE5E5},{0x6A8E, 0xD0D5},{0x6A97, 0xDBFC},{0x6A9C, 0xFCE6},{0x6AA2, 0xCBFE},{0x6AA3, 0xEDEA},{0x6AB3, 0xDEB1},{0x6ABB, 0xF9E3},
- {0x6AC2, 0xD4A2},{0x6AC3, 0xCFF6},{0x6AD3, 0xD6D0},{0x6ADA, 0xD5EA},{0x6ADB, 0xF1EE},{0x6AF6, 0xFACB},{0x6AFB, 0xE5A1},{0x6B04, 0xD5B1},
- {0x6B0A, 0xCFED},{0x6B0C, 0xEDEB},{0x6B12, 0xD5B2},{0x6B16, 0xD5BC},{0x6B20, 0xFDE2},{0x6B21, 0xF3AD},{0x6B23, 0xFDDB},{0x6B32, 0xE9B0},
- {0x6B3A, 0xD1A7},{0x6B3D, 0xFDE3},{0x6B3E, 0xCEB3},{0x6B46, 0xFDE4},{0x6B47, 0xFACE},{0x6B4C, 0xCAB0},{0x6B4E, 0xF7A7},{0x6B50, 0xCFB1},
- {0x6B5F, 0xE6A2},{0x6B61, 0xFCB6},{0x6B62, 0xF2AD},{0x6B63, 0xEFE1},{0x6B64, 0xF3AE},{0x6B65, 0xDCC6},{0x6B66, 0xD9EB},{0x6B6A, 0xE8E0},
- {0x6B72, 0xE1A8},{0x6B77, 0xD5F6},{0x6B78, 0xCFFD},{0x6B7B, 0xDEDD},{0x6B7F, 0xD9D1},{0x6B83, 0xE4EA},{0x6B84, 0xF2CF},{0x6B86, 0xF7BF},
- {0x6B89, 0xE2E6},{0x6B8A, 0xE2A8},{0x6B96, 0xE3D6},{0x6B98, 0xEDD1},{0x6B9E, 0xE9F9},{0x6BAE, 0xD6B1},{0x6BAF, 0xDEB2},{0x6BB2, 0xE0E8},
- {0x6BB5, 0xD3AB},{0x6BB7, 0xEBDC},{0x6BBA, 0xDFAF},{0x6BBC, 0xCAC3},{0x6BBF, 0xEEFC},{0x6BC1, 0xFDC3},{0x6BC5, 0xEBF6},{0x6BC6, 0xCFB2},
- {0x6BCB, 0xD9EC},{0x6BCD, 0xD9BD},{0x6BCF, 0xD8DF},{0x6BD2, 0xD4B8},{0x6BD3, 0xEBBE},{0x6BD4, 0xDDEF},{0x6BD6, 0xDDF0},{0x6BD7, 0xDDF1},
- {0x6BD8, 0xDDF2},{0x6BDB, 0xD9BE},{0x6BEB, 0xFBC6},{0x6BEC, 0xCFB3},{0x6C08, 0xEEFD},{0x6C0F, 0xE4AB},{0x6C11, 0xDAC5},{0x6C13, 0xD8EC},
- {0x6C23, 0xD1A8},{0x6C34, 0xE2A9},{0x6C37, 0xDEBC},{0x6C38, 0xE7B5},{0x6C3E, 0xDBF0},{0x6C40, 0xEFE2},{0x6C41, 0xF1F0},{0x6C42, 0xCFB4},
- {0x6C4E, 0xDBF1},{0x6C50, 0xE0B1},{0x6C55, 0xDFA5},{0x6C57, 0xF9D2},{0x6C5A, 0xE7FD},{0x6C5D, 0xE6A3},{0x6C5E, 0xFBF1},{0x6C5F, 0xCBB0},
- {0x6C60, 0xF2AE},{0x6C68, 0xCDE7},{0x6C6A, 0xE8DC},{0x6C6D, 0xE7D7},{0x6C70, 0xF7C0},{0x6C72, 0xD0E3},{0x6C76, 0xDAA1},{0x6C7A, 0xCCBD},
- {0x6C7D, 0xD1A9},{0x6C7E, 0xDDCC},{0x6C81, 0xE3FE},{0x6C82, 0xD1AA},{0x6C83, 0xE8AA},{0x6C85, 0xEAB6},{0x6C86, 0xF9FA},{0x6C87, 0xE6CC},
- {0x6C88, 0xF6D8},{0x6C8C, 0xD4C7},{0x6C90, 0xD9CB},{0x6C92, 0xD9D2},{0x6C93, 0xD3CB},{0x6C94, 0xD8F7},{0x6C95, 0xDAA9},{0x6C96, 0xF5F8},
- {0x6C99, 0xDEDE},{0x6C9A, 0xF2AF},{0x6C9B, 0xF8A9},{0x6CAB, 0xD8C8},{0x6CAE, 0xEEC1},{0x6CB3, 0xF9C1},{0x6CB8, 0xDDF3},{0x6CB9, 0xEAFA},
- {0x6CBB, 0xF6BD},{0x6CBC, 0xE1BB},{0x6CBD, 0xCDBF},{0x6CBE, 0xF4D4},{0x6CBF, 0xE6CD},{0x6CC1, 0xFCCF},{0x6CC2, 0xFBA2},{0x6CC4, 0xE0DC},
- {0x6CC9, 0xF4BB},{0x6CCA, 0xDAD5},{0x6CCC, 0xF9B2},{0x6CD3, 0xFBF2},{0x6CD5, 0xDBF6},{0x6CD7, 0xDEDF},{0x6CDB, 0xDBF2},{0x6CE1, 0xF8DC},
- {0x6CE2, 0xF7EE},{0x6CE3, 0xEBE8},{0x6CE5, 0xD2FA},{0x6CE8, 0xF1BC},{0x6CEB, 0xFADA},{0x6CEE, 0xDAEA},{0x6CEF, 0xDAC6},{0x6CF0, 0xF7C1},
- {0x6CF3, 0xE7B6},{0x6D0B, 0xE5C7},{0x6D0C, 0xD6AC},{0x6D11, 0xDCC7},{0x6D17, 0xE1A9},{0x6D19, 0xE2AA},{0x6D1B, 0xD5A6},{0x6D1E, 0xD4D7},
- {0x6D25, 0xF2D0},{0x6D27, 0xEAFB},{0x6D29, 0xE0DD},{0x6D2A, 0xFBF3},{0x6D32, 0xF1BD},{0x6D35, 0xE2E7},{0x6D36, 0xFDD7},{0x6D38, 0xCEC8},
- {0x6D39, 0xEAB7},{0x6D3B, 0xFCC0},{0x6D3D, 0xFDE7},{0x6D3E, 0xF7EF},{0x6D41, 0xD7B5},{0x6D59, 0xEFBA},{0x6D5A, 0xF1DD},{0x6D5C, 0xDEB3},
- {0x6D63, 0xE8CB},{0x6D66, 0xF8DD},{0x6D69, 0xFBC7},{0x6D6A, 0xD5C8},{0x6D6C, 0xD7DF},{0x6D6E, 0xDDA9},{0x6D74, 0xE9B1},{0x6D77, 0xFAAD},
- {0x6D78, 0xF6D9},{0x6D79, 0xFAF4},{0x6D7F, 0xF8AA},{0x6D85, 0xE6EE},{0x6D87, 0xCCDC},{0x6D88, 0xE1BC},{0x6D89, 0xE0EF},{0x6D8C, 0xE9BF},
- {0x6D8D, 0xFCFD},{0x6D8E, 0xE6CE},{0x6D91, 0xE1D7},{0x6D93, 0xE6CF},{0x6D95, 0xF4F1},{0x6DAF, 0xE4F3},{0x6DB2, 0xE4FB},{0x6DB5, 0xF9E4},
- {0x6DC0, 0xEFE3},{0x6DC3, 0xCFEE},{0x6DC4, 0xF6BE},{0x6DC5, 0xE0B2},{0x6DC6, 0xFCFE},{0x6DC7, 0xD1AB},{0x6DCB, 0xD7FA},{0x6DCF, 0xFBC8},
- {0x6DD1, 0xE2D7},{0x6DD8, 0xD4A3},{0x6DD9, 0xF0F8},{0x6DDA, 0xD7A8},{0x6DDE, 0xE1E7},{0x6DE1, 0xD3BF},{0x6DE8, 0xEFE4},{0x6DEA, 0xD7C5},
- {0x6DEB, 0xEBE2},{0x6DEE, 0xFCE7},{0x6DF1, 0xE4A2},{0x6DF3, 0xE2E8},{0x6DF5, 0xE6D0},{0x6DF7, 0xFBE8},{0x6DF8, 0xF4E8},{0x6DF9, 0xE5F4},
- {0x6DFA, 0xF4BC},{0x6DFB, 0xF4D5},{0x6E17, 0xDFB6},{0x6E19, 0xFCB9},{0x6E1A, 0xEEC2},{0x6E1B, 0xCAF5},{0x6E1F, 0xEFE5},{0x6E20, 0xCBE2},
- {0x6E21, 0xD4A4},{0x6E23, 0xDEE0},{0x6E24, 0xDAFD},{0x6E25, 0xE4C6},{0x6E26, 0xE8BE},{0x6E2B, 0xE0DE},{0x6E2C, 0xF6B4},{0x6E2D, 0xEAD2},
- {0x6E2F, 0xF9FB},{0x6E32, 0xE0C2},{0x6E34, 0xCAE4},{0x6E36, 0xE7B7},{0x6E38, 0xEAFD},{0x6E3A, 0xD9DD},{0x6E3C, 0xDAB4},{0x6E3D, 0xEEAA},
- {0x6E3E, 0xFBE9},{0x6E43, 0xDBCB},{0x6E44, 0xDAB5},{0x6E4A, 0xF1BE},{0x6E4D, 0xD3AC},{0x6E56, 0xFBC9},{0x6E58, 0xDFCF},{0x6E5B, 0xD3C0},
- {0x6E5C, 0xE3D7},{0x6E5E, 0xEFE6},{0x6E5F, 0xFCD0},{0x6E67, 0xE9C0},{0x6E6B, 0xF5D3},{0x6E6E, 0xECDC},{0x6E6F, 0xF7B7},{0x6E72, 0xEAB8},
- {0x6E73, 0xD1F9},{0x6E7A, 0xDCC8},{0x6E90, 0xEAB9},{0x6E96, 0xF1DE},{0x6E9C, 0xD7B6},{0x6E9D, 0xCFB5},{0x6E9F, 0xD9A8},{0x6EA2, 0xECEE},
- {0x6EA5, 0xDDAA},{0x6EAA, 0xCDA2},{0x6EAB, 0xE8AE},{0x6EAF, 0xE1BD},{0x6EB1, 0xF2D1},{0x6EB6, 0xE9C1},{0x6EBA, 0xD2FC},{0x6EC2, 0xDBB5},
- {0x6EC4, 0xF3E7},{0x6EC5, 0xD8FE},{0x6EC9, 0xFCD1},{0x6ECB, 0xEDB2},{0x6ECC, 0xF4AF},{0x6ECE, 0xFBA3},{0x6ED1, 0xFCC1},{0x6ED3, 0xEEAB},
- {0x6ED4, 0xD4A5},{0x6EEF, 0xF4F2},{0x6EF4, 0xEED9},{0x6EF8, 0xFBCA},{0x6EFE, 0xCDE3},{0x6EFF, 0xD8BB},{0x6F01, 0xE5DB},{0x6F02, 0xF8F7},
- {0x6F06, 0xF6D4},{0x6F0F, 0xD7A9},{0x6F11, 0xCBC9},{0x6F14, 0xE6D1},{0x6F15, 0xF0CC},{0x6F20, 0xD8AE},{0x6F22, 0xF9D3},{0x6F23, 0xD5FE},
- {0x6F2B, 0xD8BC},{0x6F2C, 0xF2B0},{0x6F31, 0xE2AB},{0x6F32, 0xF3E8},{0x6F38, 0xEFC2},{0x6F3F, 0xEDEC},{0x6F41, 0xE7B8},{0x6F51, 0xDAFE},
- {0x6F54, 0xCCBE},{0x6F57, 0xF2FC},{0x6F58, 0xDAEB},{0x6F5A, 0xE2D8},{0x6F5B, 0xEDD6},{0x6F5E, 0xD6D1},{0x6F5F, 0xE0B3},{0x6F62, 0xFCD2},
- {0x6F64, 0xEBC8},{0x6F6D, 0xD3C1},{0x6F6E, 0xF0CD},{0x6F70, 0xCFF7},{0x6F7A, 0xEDD2},{0x6F7C, 0xD4D8},{0x6F7D, 0xDCC9},{0x6F7E, 0xD7F1},
- {0x6F81, 0xDFBB},{0x6F84, 0xF3A5},{0x6F88, 0xF4CD},{0x6F8D, 0xF1BF},{0x6F8E, 0xF8B1},{0x6F90, 0xE9FA},{0x6F94, 0xFBCB},{0x6F97, 0xCAD5},
- {0x6FA3, 0xF9D4},{0x6FA4, 0xF7CA},{0x6FA7, 0xD6C8},{0x6FAE, 0xFCE8},{0x6FAF, 0xF3BD},{0x6FB1, 0xEEFE},{0x6FB3, 0xE7FE},{0x6FB9, 0xD3C2},
- {0x6FBE, 0xD3B6},{0x6FC0, 0xCCAD},{0x6FC1, 0xF6FA},{0x6FC2, 0xD6B2},{0x6FC3, 0xD2D8},{0x6FCA, 0xE7D8},{0x6FD5, 0xE3A5},{0x6FDA, 0xE7B9},
- {0x6FDF, 0xF0AD},{0x6FE0, 0xFBCC},{0x6FE1, 0xEBA1},{0x6FE4, 0xD4A6},{0x6FE9, 0xFBCD},{0x6FEB, 0xD5BD},{0x6FEC, 0xF1DF},{0x6FEF, 0xF6FB},
- {0x6FF1, 0xDEB4},{0x6FFE, 0xD5EB},{0x7001, 0xE5C8},{0x7005, 0xFBA4},{0x7006, 0xD4B9},{0x7009, 0xDEE1},{0x700B, 0xE4A3},{0x700F, 0xD7B7},
- {0x7011, 0xF8EE},{0x7015, 0xDEB5},{0x7018, 0xD6D2},{0x701A, 0xF9D5},{0x701B, 0xE7BA},{0x701C, 0xEBD5},{0x701D, 0xD5F7},{0x701E, 0xEFE7},
- {0x701F, 0xE1BE},{0x7023, 0xFAAE},{0x7027, 0xD6E9},{0x7028, 0xD6EE},{0x702F, 0xE7BB},{0x7037, 0xECCB},{0x703E, 0xD5B3},{0x704C, 0xCEB4},
- {0x7050, 0xFBA5},{0x7051, 0xE1EE},{0x7058, 0xF7A8},{0x705D, 0xFBCE},{0x7063, 0xD8BD},{0x706B, 0xFBFD},{0x7070, 0xFCE9},{0x7078, 0xCFB6},
- {0x707C, 0xEDC7},{0x707D, 0xEEAC},{0x7085, 0xCCDD},{0x708A, 0xF6A7},{0x708E, 0xE6FA},{0x7092, 0xF5A4},{0x7098, 0xFDDC},{0x7099, 0xEDB3},
- {0x709A, 0xCEC9},{0x70A1, 0xEFE8},{0x70A4, 0xE1BF},{0x70AB, 0xFADB},{0x70AC, 0xCBE3},{0x70AD, 0xF7A9},{0x70AF, 0xFBA6},{0x70B3, 0xDCB9},
- {0x70B7, 0xF1C0},{0x70B8, 0xEDC8},{0x70B9, 0xEFC3},{0x70C8, 0xD6AD},{0x70CB, 0xFDCE},{0x70CF, 0xE8A1},{0x70D8, 0xFBF4},{0x70D9, 0xD5A7},
- {0x70DD, 0xF1F6},{0x70DF, 0xE6D3},{0x70F1, 0xCCDE},{0x70F9, 0xF8B2},{0x70FD, 0xDCEB},{0x7104, 0xFDB6},{0x7109, 0xE5EA},{0x710C, 0xF1E0},
- {0x7119, 0xDBCC},{0x711A, 0xDDCD},{0x711E, 0xD4C8},{0x7121, 0xD9ED},{0x7126, 0xF5A5},{0x7130, 0xE6FB},{0x7136, 0xE6D4},{0x7147, 0xFDC8},
- {0x7149, 0xD6A1},{0x714A, 0xFDBF},{0x714C, 0xFCD3},{0x714E, 0xEFA1},{0x7150, 0xE7BC},{0x7156, 0xD1EE},{0x7159, 0xE6D5},{0x715C, 0xE9F2},
- {0x715E, 0xDFB0},{0x7164, 0xD8E0},{0x7165, 0xFCBA},{0x7166, 0xFDAF},{0x7167, 0xF0CE},{0x7169, 0xDBE1},{0x716C, 0xE5C9},{0x716E, 0xEDB4},
- {0x717D, 0xE0C3},{0x7184, 0xE3D8},{0x7189, 0xE9FB},{0x718A, 0xEAA8},{0x718F, 0xFDB7},{0x7192, 0xFBA7},{0x7194, 0xE9C2},{0x7199, 0xFDF7},
- {0x719F, 0xE2D9},{0x71A2, 0xDCEC},{0x71AC, 0xE8A2},{0x71B1, 0xE6F0},{0x71B9, 0xFDF8},{0x71BA, 0xFDF9},{0x71BE, 0xF6BF},{0x71C1, 0xE7A7},
- {0x71C3, 0xE6D7},{0x71C8, 0xD4F3},{0x71C9, 0xD4C9},{0x71CE, 0xD6FA},{0x71D0, 0xD7F2},{0x71D2, 0xE1C0},{0x71D4, 0xDBE2},{0x71D5, 0xE6D8},
- {0x71DF, 0xE7BD},{0x71E5, 0xF0CF},{0x71E6, 0xF3BE},{0x71E7, 0xE2AC},{0x71ED, 0xF5B7},{0x71EE, 0xE0F0},{0x71FB, 0xFDB8},{0x71FC, 0xE3E8},
- {0x71FE, 0xD4A7},{0x71FF, 0xE8FC},{0x7200, 0xFAD2},{0x7206, 0xF8EF},{0x7210, 0xD6D3},{0x721B, 0xD5B4},{0x722A, 0xF0D0},{0x722C, 0xF7F0},
- {0x722D, 0xEEB3},{0x7230, 0xEABA},{0x7232, 0xEAD3},{0x7235, 0xEDC9},{0x7236, 0xDDAB},{0x723A, 0xE5AC},{0x723B, 0xFDA1},{0x723D, 0xDFD0},
- {0x723E, 0xECB3},{0x7240, 0xDFD1},{0x7246, 0xEDED},{0x7247, 0xF8B8},{0x7248, 0xF7FA},{0x724C, 0xF8AB},{0x7252, 0xF4E0},{0x7258, 0xD4BA},
- {0x7259, 0xE4B3},{0x725B, 0xE9DA},{0x725D, 0xDEB6},{0x725F, 0xD9BF},{0x7261, 0xD9C0},{0x7262, 0xD6EF},{0x7267, 0xD9CC},{0x7269, 0xDAAA},
- {0x7272, 0xDFE5},{0x7279, 0xF7E5},{0x727D, 0xCCB2},{0x7280, 0xDFF9},{0x7281, 0xD7E0},{0x72A2, 0xD4BB},{0x72A7, 0xFDFA},{0x72AC, 0xCCB3},
- {0x72AF, 0xDBF3},{0x72C0, 0xDFD2},{0x72C2, 0xCECA},{0x72C4, 0xEEDA},{0x72CE, 0xE4E4},{0x72D0, 0xFBCF},{0x72D7, 0xCFB7},{0x72D9, 0xEEC3},
- {0x72E1, 0xCEEA},{0x72E9, 0xE2AD},{0x72F8, 0xD7E1},{0x72F9, 0xFAF5},{0x72FC, 0xD5C9},{0x72FD, 0xF8AC},{0x730A, 0xE7D9},{0x7316, 0xF3E9},
- {0x731B, 0xD8ED},{0x731C, 0xE3C4},{0x731D, 0xF0F1},{0x7325, 0xE8E5},{0x7329, 0xE0FA},{0x732A, 0xEEC4},{0x732B, 0xD9DE},{0x7336, 0xEBA2},
- {0x7337, 0xEBA3},{0x733E, 0xFCC2},{0x733F, 0xEABB},{0x7344, 0xE8AB},{0x7345, 0xDEE2},{0x7350, 0xEDEF},{0x7352, 0xE8A3},{0x7357, 0xCFF1},
- {0x7368, 0xD4BC},{0x736A, 0xFCEA},{0x7370, 0xE7BE},{0x7372, 0xFCF2},{0x7375, 0xD6B4},{0x7378, 0xE2AE},{0x737A, 0xD3B7},{0x737B, 0xFACC},
- {0x7384, 0xFADC},{0x7386, 0xEDB5},{0x7387, 0xE1E3},{0x7389, 0xE8AC},{0x738B, 0xE8DD},{0x738E, 0xEFE9},{0x7394, 0xF4BD},{0x7396, 0xCFB8},
- {0x7397, 0xE9DB},{0x7398, 0xD1AC},{0x739F, 0xDAC7},{0x73A7, 0xEBC9},{0x73A9, 0xE8CC},{0x73AD, 0xDEB7},{0x73B2, 0xD6BC},{0x73B3, 0xD3E5},
- {0x73B9, 0xFADD},{0x73C0, 0xDAD6},{0x73C2, 0xCAB1},{0x73C9, 0xDAC8},{0x73CA, 0xDFA6},{0x73CC, 0xF9B3},{0x73CD, 0xF2D2},{0x73CF, 0xCAC4},
- {0x73D6, 0xCECB},{0x73D9, 0xCDF5},{0x73DD, 0xFDB0},{0x73DE, 0xD5A8},{0x73E0, 0xF1C1},{0x73E3, 0xE2E9},{0x73E4, 0xDCCA},{0x73E5, 0xECB4},
- {0x73E6, 0xFAC0},{0x73E9, 0xFBA8},{0x73EA, 0xD0A8},{0x73ED, 0xDAEC},{0x73F7, 0xD9EE},{0x73F9, 0xE0FB},{0x73FD, 0xEFEA},{0x73FE, 0xFADE},
- {0x7401, 0xE0C4},{0x7403, 0xCFB9},{0x7405, 0xD5CA},{0x7406, 0xD7E2},{0x7407, 0xE2AF},{0x7409, 0xD7B8},{0x7413, 0xE8CD},{0x741B, 0xF6DA},
- {0x7420, 0xEFA2},{0x7421, 0xE2DA},{0x7422, 0xF6FC},{0x7425, 0xFBD0},{0x7426, 0xD1AD},{0x7428, 0xCDE4},{0x742A, 0xD1AE},{0x742B, 0xDCED},
- {0x742C, 0xE8CE},{0x742E, 0xF0F9},{0x742F, 0xCEB5},{0x7430, 0xE6FC},{0x7433, 0xD7FB},{0x7434, 0xD0D6},{0x7435, 0xDDF5},{0x7436, 0xF7F1},
- {0x7438, 0xF6FD},{0x743A, 0xDBF7},{0x743F, 0xFBEA},{0x7440, 0xE9DC},{0x7441, 0xD9C1},{0x7443, 0xF5F2},{0x7444, 0xE0C5},{0x744B, 0xEAD4},
- {0x7455, 0xF9C2},{0x7457, 0xEABC},{0x7459, 0xD2C5},{0x745A, 0xFBD1},{0x745B, 0xE7C0},{0x745C, 0xEBA5},{0x745E, 0xDFFA},{0x745F, 0xE3A2},
- {0x7460, 0xD7B9},{0x7462, 0xE9C3},{0x7464, 0xE8FD},{0x7465, 0xE8AF},{0x7468, 0xF2D3},{0x7469, 0xFBA9},{0x746A, 0xD8A5},{0x746F, 0xD5CB},
- {0x747E, 0xD0C8},{0x7482, 0xD1AF},{0x7483, 0xD7E3},{0x7487, 0xE0C6},{0x7489, 0xD6A2},{0x748B, 0xEDF0},{0x7498, 0xD7F3},{0x749C, 0xFCD4},
- {0x749E, 0xDAD7},{0x749F, 0xCCDF},{0x74A1, 0xF2D4},{0x74A3, 0xD1B0},{0x74A5, 0xCCE0},{0x74A7, 0xDBFD},{0x74A8, 0xF3BF},{0x74AA, 0xF0D1},
- {0x74B0, 0xFCBB},{0x74B2, 0xE2B0},{0x74B5, 0xE6A5},{0x74B9, 0xE2DB},{0x74BD, 0xDFDE},{0x74BF, 0xE0C7},{0x74C6, 0xF2EF},{0x74CA, 0xCCE1},
- {0x74CF, 0xD6EA},{0x74D4, 0xE7C2},{0x74D8, 0xCEB6},{0x74DA, 0xF3C0},{0x74DC, 0xCDFE},{0x74E0, 0xFBD2},{0x74E2, 0xF8F8},{0x74E3, 0xF7FB},
- {0x74E6, 0xE8BF},{0x74EE, 0xE8B7},{0x74F7, 0xEDB6},{0x7501, 0xDCBA},{0x7504, 0xCCB4},{0x7511, 0xF1F7},{0x7515, 0xE8B8},{0x7518, 0xCAF6},
- {0x751A, 0xE4A4},{0x751B, 0xF4D6},{0x751F, 0xDFE6},{0x7523, 0xDFA7},{0x7525, 0xDFE7},{0x7526, 0xE1C1},{0x7528, 0xE9C4},{0x752B, 0xDCCB},
- {0x752C, 0xE9C5},{0x7530, 0xEFA3},{0x7531, 0xEBA6},{0x7532, 0xCBA3},{0x7533, 0xE3E9},{0x7537, 0xD1FB},{0x7538, 0xEFA4},{0x753A, 0xEFEB},
- {0x7547, 0xD0B4},{0x754C, 0xCDA3},{0x754F, 0xE8E6},{0x7551, 0xEFA5},{0x7553, 0xD3CC},{0x7554, 0xDAED},{0x7559, 0xD7BA},{0x755B, 0xF2D5},
- {0x755C, 0xF5E5},{0x755D, 0xD9EF},{0x7562, 0xF9B4},{0x7565, 0xD5D4},{0x7566, 0xFDCF},{0x756A, 0xDBE3},{0x756F, 0xF1E1},{0x7570, 0xECB6},
- {0x7575, 0xFBFE},{0x7576, 0xD3D7},{0x7578, 0xD1B1},{0x757A, 0xCBB1},{0x757F, 0xD1B2},{0x7586, 0xCBB2},{0x7587, 0xF1C2},{0x758A, 0xF4E1},
- {0x758B, 0xF9B5},{0x758E, 0xE1C3},{0x758F, 0xE1C2},{0x7591, 0xEBF7},{0x759D, 0xDFA8},{0x75A5, 0xCBCA},{0x75AB, 0xE6B9},{0x75B1, 0xF8DE},
- {0x75B2, 0xF9AA},{0x75B3, 0xCAF7},{0x75B5, 0xEDB7},{0x75B8, 0xD3B8},{0x75B9, 0xF2D6},{0x75BC, 0xD4D9},{0x75BD, 0xEEC5},{0x75BE, 0xF2F0},
- {0x75C2, 0xCAB2},{0x75C5, 0xDCBB},{0x75C7, 0xF1F8},{0x75CD, 0xECB7},{0x75D2, 0xE5CA},{0x75D4, 0xF6C0},{0x75D5, 0xFDDD},{0x75D8, 0xD4E3},
- {0x75D9, 0xCCE2},{0x75DB, 0xF7D4},{0x75E2, 0xD7E5},{0x75F0, 0xD3C3},{0x75F2, 0xD8A6},{0x75F4, 0xF6C1},{0x75FA, 0xDDF6},{0x75FC, 0xCDC0},
- {0x7600, 0xE5DC},{0x760D, 0xE5CB},{0x7619, 0xE1C4},{0x761F, 0xE8B0},{0x7620, 0xF4B0},{0x7621, 0xF3EA},{0x7622, 0xDAEE},{0x7624, 0xD7BB},
- {0x7626, 0xE2B1},{0x763B, 0xD7AA},{0x7642, 0xD6FB},{0x764C, 0xE4DF},{0x764E, 0xCAD6},{0x7652, 0xEBA8},{0x7656, 0xDBFE},{0x7661, 0xF6C2},
- {0x7664, 0xEFBB},{0x7669, 0xD4FD},{0x766C, 0xE0C8},{0x7670, 0xE8B9},{0x7672, 0xEFA6},{0x7678, 0xCDA4},{0x767B, 0xD4F4},{0x767C, 0xDBA1},
- {0x767D, 0xDBDC},{0x767E, 0xDBDD},{0x7684, 0xEEDC},{0x7686, 0xCBCB},{0x7687, 0xFCD5},{0x768E, 0xCEEB},{0x7690, 0xCDC1},{0x7693, 0xFBD3},
- {0x76AE, 0xF9AB},{0x76BA, 0xF5D4},{0x76BF, 0xD9A9},{0x76C2, 0xE9DD},{0x76C3, 0xDBCD},{0x76C6, 0xDDCE},{0x76C8, 0xE7C3},{0x76CA, 0xECCC},
- {0x76D2, 0xF9EC},{0x76D6, 0xCBCC},{0x76DB, 0xE0FC},{0x76DC, 0xD4A8},{0x76DE, 0xEDD3},{0x76DF, 0xD8EF},{0x76E1, 0xF2D7},{0x76E3, 0xCAF8},
- {0x76E4, 0xDAEF},{0x76E7, 0xD6D4},{0x76EE, 0xD9CD},{0x76F2, 0xD8EE},{0x76F4, 0xF2C1},{0x76F8, 0xDFD3},{0x76FC, 0xDAF0},{0x76FE, 0xE2EA},
- {0x7701, 0xE0FD},{0x7704, 0xD8F8},{0x7708, 0xF7AF},{0x7709, 0xDAB6},{0x770B, 0xCAD7},{0x771E, 0xF2D8},{0x7720, 0xD8F9},{0x7729, 0xFADF},
- {0x7737, 0xCFEF},{0x7738, 0xD9C2},{0x773A, 0xF0D2},{0x773C, 0xE4D1},{0x7740, 0xF3B7},{0x774D, 0xFAE0},{0x775B, 0xEFEC},{0x7761, 0xE2B2},
- {0x7763, 0xD4BD},{0x7766, 0xD9CE},{0x776B, 0xF4E2},{0x7779, 0xD4A9},{0x777E, 0xCDC2},{0x777F, 0xE7DA},{0x778B, 0xF2D9},{0x7791, 0xD9AA},
- {0x779E, 0xD8BE},{0x77A5, 0xDCAD},{0x77AC, 0xE2EB},{0x77AD, 0xD6FC},{0x77B0, 0xCAF9},{0x77B3, 0xD4DA},{0x77BB, 0xF4D7},{0x77BC, 0xCCA1},
- {0x77BF, 0xCFBA},{0x77D7, 0xF5B8},{0x77DB, 0xD9C3},{0x77DC, 0xD0E8},{0x77E2, 0xE3C5},{0x77E3, 0xEBF8},{0x77E5, 0xF2B1},{0x77E9, 0xCFBB},
- {0x77ED, 0xD3AD},{0x77EE, 0xE8E1},{0x77EF, 0xCEEC},{0x77F3, 0xE0B4},{0x7802, 0xDEE3},{0x7812, 0xDDF7},{0x7825, 0xF2B2},{0x7826, 0xF3F6},
- {0x7827, 0xF6DB},{0x782C, 0xD7FE},{0x7832, 0xF8DF},{0x7834, 0xF7F2},{0x7845, 0xD0A9},{0x784F, 0xE6DA},{0x785D, 0xF5A6},{0x786B, 0xD7BC},
- {0x786C, 0xCCE3},{0x786F, 0xE6DB},{0x787C, 0xDDDD},{0x7881, 0xD1B3},{0x7887, 0xEFED},{0x788C, 0xD6DE},{0x788D, 0xE4F4},{0x788E, 0xE1EF},
- {0x7891, 0xDDF8},{0x7897, 0xE8CF},{0x78A3, 0xCAE5},{0x78A7, 0xDCA1},{0x78A9, 0xE0B5},{0x78BA, 0xFCAC},{0x78BB, 0xFCAD},{0x78BC, 0xD8A7},
- {0x78C1, 0xEDB8},{0x78C5, 0xDBB6},{0x78CA, 0xD6F0},{0x78CB, 0xF3AF},{0x78CE, 0xCDA5},{0x78D0, 0xDAF1},{0x78E8, 0xD8A8},{0x78EC, 0xCCE4},
- {0x78EF, 0xD1B4},{0x78F5, 0xCAD8},{0x78FB, 0xDAF2},{0x7901, 0xF5A7},{0x790E, 0xF5A8},{0x7916, 0xE6A6},{0x792A, 0xD5EC},{0x792B, 0xD5F8},
- {0x792C, 0xDAF3},{0x793A, 0xE3C6},{0x793E, 0xDEE4},{0x7940, 0xDEE5},{0x7941, 0xD1B5},{0x7947, 0xD1B6},{0x7948, 0xD1B7},{0x7949, 0xF2B3},
- {0x7950, 0xE9DE},{0x7956, 0xF0D3},{0x7957, 0xF2B4},{0x795A, 0xF0D4},{0x795B, 0xCBE4},{0x795C, 0xFBD4},{0x795D, 0xF5E6},{0x795E, 0xE3EA},
- {0x7960, 0xDEE6},{0x7965, 0xDFD4},{0x7968, 0xF8F9},{0x796D, 0xF0AE},{0x797A, 0xD1B8},{0x797F, 0xD6DF},{0x7981, 0xD0D7},{0x798D, 0xFCA1},
- {0x798E, 0xEFEE},{0x798F, 0xDCD8},{0x7991, 0xE9DF},{0x79A6, 0xE5DD},{0x79A7, 0xFDFB},{0x79AA, 0xE0C9},{0x79AE, 0xD6C9},{0x79B1, 0xD4AA},
- {0x79B3, 0xE5CC},{0x79B9, 0xE9E0},{0x79BD, 0xD0D8},{0x79BE, 0xFCA2},{0x79BF, 0xD4BE},{0x79C0, 0xE2B3},{0x79C1, 0xDEE7},{0x79C9, 0xDCBC},
- {0x79CA, 0xD2B6},{0x79CB, 0xF5D5},{0x79D1, 0xCEA1},{0x79D2, 0xF5A9},{0x79D5, 0xDDF9},{0x79D8, 0xDDFA},{0x79DF, 0xF0D5},{0x79E4, 0xF6DF},
- {0x79E6, 0xF2DA},{0x79E7, 0xE4EB},{0x79E9, 0xF2F1},{0x79FB, 0xECB9},{0x7A00, 0xFDFC},{0x7A05, 0xE1AA},{0x7A08, 0xCAD9},{0x7A0B, 0xEFEF},
- {0x7A0D, 0xF5AA},{0x7A14, 0xECF9},{0x7A17, 0xF8AD},{0x7A19, 0xF2C2},{0x7A1A, 0xF6C3},{0x7A1C, 0xD7D2},{0x7A1F, 0xF9A2},{0x7A20, 0xF0D6},
- {0x7A2E, 0xF0FA},{0x7A31, 0xF6E0},{0x7A36, 0xE9F3},{0x7A37, 0xF2C3},{0x7A3B, 0xD4AB},{0x7A3C, 0xCAB3},{0x7A3D, 0xCDA6},{0x7A3F, 0xCDC3},
- {0x7A40, 0xCDDA},{0x7A46, 0xD9CF},{0x7A49, 0xF6C4},{0x7A4D, 0xEEDD},{0x7A4E, 0xE7C4},{0x7A57, 0xE2B4},{0x7A61, 0xDFE2},{0x7A62, 0xE7DB},
- {0x7A69, 0xE8B1},{0x7A6B, 0xFCAE},{0x7A70, 0xE5CD},{0x7A74, 0xFAEB},{0x7A76, 0xCFBC},{0x7A79, 0xCFE2},{0x7A7A, 0xCDF6},{0x7A7D, 0xEFF0},
- {0x7A7F, 0xF4BE},{0x7A81, 0xD4CD},{0x7A84, 0xF3B8},{0x7A88, 0xE9A1},{0x7A92, 0xF2F2},{0x7A93, 0xF3EB},{0x7A95, 0xF0D7},{0x7A98, 0xCFD7},
- {0x7A9F, 0xCFDF},{0x7AA9, 0xE8C0},{0x7AAA, 0xE8C1},{0x7AAE, 0xCFE3},{0x7AAF, 0xE9A2},{0x7ABA, 0xD0AA},{0x7AC4, 0xF3C1},{0x7AC5, 0xD0AB},
- {0x7AC7, 0xD4E4},{0x7ACA, 0xEFBC},{0x7ACB, 0xD8A1},{0x7AD7, 0xD9DF},{0x7AD9, 0xF3D7},{0x7ADD, 0xDCBD},{0x7ADF, 0xCCE5},{0x7AE0, 0xEDF1},
- {0x7AE3, 0xF1E2},{0x7AE5, 0xD4DB},{0x7AEA, 0xE2B5},{0x7AED, 0xCAE6},{0x7AEF, 0xD3AE},{0x7AF6, 0xCCE6},{0x7AF9, 0xF1D3},{0x7AFA, 0xF5E7},
- {0x7AFF, 0xCADA},{0x7B0F, 0xFBEE},{0x7B11, 0xE1C5},{0x7B19, 0xDFE9},{0x7B1B, 0xEEDE},{0x7B1E, 0xF7C2},{0x7B20, 0xD8A2},{0x7B26, 0xDDAC},
- {0x7B2C, 0xF0AF},{0x7B2D, 0xD6BD},{0x7B39, 0xE1AB},{0x7B46, 0xF9B6},{0x7B49, 0xD4F5},{0x7B4B, 0xD0C9},{0x7B4C, 0xEFA7},{0x7B4D, 0xE2EC},
- {0x7B4F, 0xDBEA},{0x7B50, 0xCECC},{0x7B51, 0xF5E8},{0x7B52, 0xF7D5},{0x7B54, 0xD3CD},{0x7B56, 0xF3FE},{0x7B60, 0xD0B5},{0x7B6C, 0xE0FE},
- {0x7B6E, 0xDFFB},{0x7B75, 0xE6DD},{0x7B7D, 0xE8A4},{0x7B87, 0xCBCD},{0x7B8B, 0xEFA8},{0x7B8F, 0xEEB4},{0x7B94, 0xDAD8},{0x7B95, 0xD1B9},
- {0x7B97, 0xDFA9},{0x7B9A, 0xF3B0},{0x7B9D, 0xCCC4},{0x7BA1, 0xCEB7},{0x7BAD, 0xEFA9},{0x7BB1, 0xDFD5},{0x7BB4, 0xEDD7},{0x7BB8, 0xEEC6},
- {0x7BC0, 0xEFBD},{0x7BC1, 0xFCD6},{0x7BC4, 0xDBF4},{0x7BC6, 0xEFAA},{0x7BC7, 0xF8B9},{0x7BC9, 0xF5E9},{0x7BD2, 0xE3D9},{0x7BE0, 0xE1C6},
- {0x7BE4, 0xD4BF},{0x7BE9, 0xDEE8},{0x7C07, 0xF0EA},{0x7C12, 0xF3C2},{0x7C1E, 0xD3AF},{0x7C21, 0xCADB},{0x7C27, 0xFCD7},{0x7C2A, 0xEDD8},
- {0x7C2B, 0xE1C7},{0x7C3D, 0xF4D8},{0x7C3E, 0xD6B3},{0x7C3F, 0xDDAD},{0x7C43, 0xD5BE},{0x7C4C, 0xF1C3},{0x7C4D, 0xEEDF},{0x7C60, 0xD6EB},
- {0x7C64, 0xF4D9},{0x7C6C, 0xD7E6},{0x7C73, 0xDAB7},{0x7C83, 0xDDFB},{0x7C89, 0xDDCF},{0x7C92, 0xD8A3},{0x7C95, 0xDAD9},{0x7C97, 0xF0D8},
- {0x7C98, 0xEFC4},{0x7C9F, 0xE1D8},{0x7CA5, 0xF1D4},{0x7CA7, 0xEDF2},{0x7CAE, 0xD5DB},{0x7CB1, 0xD5DC},{0x7CB2, 0xF3C4},{0x7CB3, 0xCBD7},
- {0x7CB9, 0xE2B6},{0x7CBE, 0xEFF1},{0x7CCA, 0xFBD5},{0x7CD6, 0xD3D8},{0x7CDE, 0xDDD0},{0x7CDF, 0xF0D9},{0x7CE0, 0xCBB3},{0x7CE7, 0xD5DD},
- {0x7CFB, 0xCDA7},{0x7CFE, 0xD0AC},{0x7D00, 0xD1BA},{0x7D02, 0xF1C4},{0x7D04, 0xE5B3},{0x7D05, 0xFBF5},{0x7D06, 0xE9E1},{0x7D07, 0xFDE0},
- {0x7D08, 0xFCBC},{0x7D0A, 0xDAA2},{0x7D0B, 0xDAA3},{0x7D0D, 0xD2A1},{0x7D10, 0xD2EF},{0x7D14, 0xE2ED},{0x7D17, 0xDEE9},{0x7D18, 0xCEDC},
- {0x7D19, 0xF2B5},{0x7D1A, 0xD0E4},{0x7D1B, 0xDDD1},{0x7D20, 0xE1C8},{0x7D21, 0xDBB7},{0x7D22, 0xDFE3},{0x7D2B, 0xEDB9},{0x7D2C, 0xF1C5},
- {0x7D2E, 0xF3CF},{0x7D2F, 0xD7AB},{0x7D30, 0xE1AC},{0x7D33, 0xE3EB},{0x7D35, 0xEEC7},{0x7D39, 0xE1C9},{0x7D3A, 0xCAFA},{0x7D42, 0xF0FB},
- {0x7D43, 0xFAE1},{0x7D44, 0xF0DA},{0x7D45, 0xCCE7},{0x7D46, 0xDAF4},{0x7D50, 0xCCBF},{0x7D5E, 0xCEED},{0x7D61, 0xD5A9},{0x7D62, 0xFAE2},
- {0x7D66, 0xD0E5},{0x7D68, 0xEBD6},{0x7D6A, 0xECDF},{0x7D6E, 0xDFFC},{0x7D71, 0xF7D6},{0x7D72, 0xDEEA},{0x7D73, 0xCBB4},{0x7D76, 0xEFBE},
- {0x7D79, 0xCCB5},{0x7D7F, 0xCFBD},{0x7D8E, 0xEFF2},{0x7D8F, 0xE2B7},{0x7D93, 0xCCE8},{0x7D9C, 0xF0FC},{0x7DA0, 0xD6E0},{0x7DA2, 0xF1C6},
- {0x7DAC, 0xE2B8},{0x7DAD, 0xEBAB},{0x7DB1, 0xCBB5},{0x7DB2, 0xD8D1},{0x7DB4, 0xF4CE},{0x7DB5, 0xF3F7},{0x7DB8, 0xD7C6},{0x7DBA, 0xD1BB},
- {0x7DBB, 0xF7AA},{0x7DBD, 0xEDCA},{0x7DBE, 0xD7D3},{0x7DBF, 0xD8FA},{0x7DC7, 0xF6C5},{0x7DCA, 0xD1CC},{0x7DCB, 0xDDFC},{0x7DD6, 0xDFFD},
- {0x7DD8, 0xF9E5},{0x7DDA, 0xE0CA},{0x7DDD, 0xF2FD},{0x7DDE, 0xD3B0},{0x7DE0, 0xF4F3},{0x7DE1, 0xDAC9},{0x7DE3, 0xE6DE},{0x7DE8, 0xF8BA},
- {0x7DE9, 0xE8D0},{0x7DEC, 0xD8FB},{0x7DEF, 0xEAD5},{0x7DF4, 0xD6A3},{0x7DFB, 0xF6C6},{0x7E09, 0xF2DB},{0x7E0A, 0xE4FC},{0x7E15, 0xE8B2},
- {0x7E1B, 0xDADA},{0x7E1D, 0xF2DC},{0x7E1E, 0xFBD6},{0x7E1F, 0xE9B2},{0x7E21, 0xEEAD},{0x7E23, 0xFAE3},{0x7E2B, 0xDCEE},{0x7E2E, 0xF5EA},
- {0x7E2F, 0xE6E0},{0x7E31, 0xF0FD},{0x7E37, 0xD7AC},{0x7E3D, 0xF5C5},{0x7E3E, 0xEEE0},{0x7E41, 0xDBE5},{0x7E43, 0xDDDE},{0x7E46, 0xD9F0},
- {0x7E47, 0xE9A3},{0x7E52, 0xF1F9},{0x7E54, 0xF2C4},{0x7E55, 0xE0CB},{0x7E5E, 0xE9A4},{0x7E61, 0xE2B9},{0x7E69, 0xE3B1},{0x7E6A, 0xFCEB},
- {0x7E6B, 0xCDA8},{0x7E6D, 0xCCB6},{0x7E70, 0xF0DB},{0x7E79, 0xE6BA},{0x7E7C, 0xCDA9},{0x7E82, 0xF3C3},{0x7E8C, 0xE1D9},{0x7E8F, 0xEFAB},
- {0x7E93, 0xE7C5},{0x7E96, 0xE0E9},{0x7E98, 0xF3C5},{0x7E9B, 0xD4C0},{0x7E9C, 0xD5BF},{0x7F36, 0xDDAE},{0x7F38, 0xF9FC},{0x7F3A, 0xCCC0},
- {0x7F4C, 0xE5A2},{0x7F50, 0xCEB8},{0x7F54, 0xD8D2},{0x7F55, 0xF9D6},{0x7F6A, 0xF1AA},{0x7F6B, 0xCED1},{0x7F6E, 0xF6C7},{0x7F70, 0xDBEB},
- {0x7F72, 0xDFFE},{0x7F75, 0xD8E1},{0x7F77, 0xF7F3},{0x7F79, 0xD7E7},{0x7F85, 0xD4FE},{0x7F88, 0xD1BC},{0x7F8A, 0xE5CF},{0x7F8C, 0xCBB6},
- {0x7F8E, 0xDAB8},{0x7F94, 0xCDC4},{0x7F9A, 0xD6BE},{0x7F9E, 0xE2BA},{0x7FA4, 0xCFD8},{0x7FA8, 0xE0CC},{0x7FA9, 0xEBF9},{0x7FB2, 0xFDFD},
- {0x7FB8, 0xD7E8},{0x7FB9, 0xCBD8},{0x7FBD, 0xE9E2},{0x7FC1, 0xE8BA},{0x7FC5, 0xE3C7},{0x7FCA, 0xECCD},{0x7FCC, 0xECCE},{0x7FCE, 0xD6BF},
- {0x7FD2, 0xE3A7},{0x7FD4, 0xDFD6},{0x7FD5, 0xFDE8},{0x7FDF, 0xEEE1},{0x7FE0, 0xF6A8},{0x7FE1, 0xDDFD},{0x7FE9, 0xF8BB},{0x7FEB, 0xE8D1},
- {0x7FF0, 0xF9D7},{0x7FF9, 0xCEEE},{0x7FFC, 0xECCF},{0x8000, 0xE9A5},{0x8001, 0xD6D5},{0x8003, 0xCDC5},{0x8005, 0xEDBA},{0x8006, 0xD1BD},
- {0x8009, 0xCFBE},{0x800C, 0xECBB},{0x8010, 0xD2B1},{0x8015, 0xCCE9},{0x8017, 0xD9C4},{0x8018, 0xE9FC},{0x802D, 0xD1BE},{0x8033, 0xECBC},
- {0x8036, 0xE5AD},{0x803D, 0xF7B0},{0x803F, 0xCCEA},{0x8043, 0xD3C4},{0x8046, 0xD6C0},{0x804A, 0xD6FD},{0x8056, 0xE1A1},{0x8058, 0xDEBD},
- {0x805A, 0xF6A9},{0x805E, 0xDAA4},{0x806F, 0xD6A4},{0x8070, 0xF5C6},{0x8072, 0xE1A2},{0x8073, 0xE9C6},{0x8077, 0xF2C5},{0x807D, 0xF4E9},
- {0x807E, 0xD6EC},{0x807F, 0xEBD3},{0x8084, 0xECBD},{0x8085, 0xE2DC},{0x8086, 0xDEEB},{0x8087, 0xF0DC},{0x8089, 0xEBBF},{0x808B, 0xD7CE},
- {0x808C, 0xD1BF},{0x8096, 0xF5AB},{0x809B, 0xF9FD},{0x809D, 0xCADC},{0x80A1, 0xCDC6},{0x80A2, 0xF2B6},{0x80A5, 0xDDFE},{0x80A9, 0xCCB7},
- {0x80AA, 0xDBB8},{0x80AF, 0xD0E9},{0x80B1, 0xCEDD},{0x80B2, 0xEBC0},{0x80B4, 0xFDA2},{0x80BA, 0xF8CB},{0x80C3, 0xEAD6},{0x80C4, 0xF1B0},
- {0x80CC, 0xDBCE},{0x80CE, 0xF7C3},{0x80DA, 0xDBCF},{0x80DB, 0xCBA4},{0x80DE, 0xF8E0},{0x80E1, 0xFBD7},{0x80E4, 0xEBCA},{0x80E5, 0xE0A1},
- {0x80F1, 0xCECD},{0x80F4, 0xD4DC},{0x80F8, 0xFDD8},{0x80FD, 0xD2F6},{0x8102, 0xF2B7},{0x8105, 0xFAF6},{0x8106, 0xF6AA},{0x8107, 0xFAF7},
- {0x8108, 0xD8E6},{0x810A, 0xF4B1},{0x8118, 0xE8D2},{0x811A, 0xCAC5},{0x811B, 0xCCEB},{0x8123, 0xE2EE},{0x8129, 0xE2BB},{0x812B, 0xF7AD},
- {0x812F, 0xF8E1},{0x8139, 0xF3EC},{0x813E, 0xDEA1},{0x814B, 0xE4FD},{0x814E, 0xE3EC},{0x8150, 0xDDAF},{0x8151, 0xDDB0},{0x8154, 0xCBB7},
- {0x8155, 0xE8D3},{0x8165, 0xE1A3},{0x8166, 0xD2E0},{0x816B, 0xF0FE},{0x8170, 0xE9A6},{0x8171, 0xCBF2},{0x8178, 0xEDF3},{0x8179, 0xDCD9},
- {0x817A, 0xE0CD},{0x817F, 0xF7DA},{0x8180, 0xDBB9},{0x8188, 0xCCAE},{0x818A, 0xDADB},{0x818F, 0xCDC7},{0x819A, 0xDDB1},{0x819C, 0xD8AF},
- {0x819D, 0xE3A3},{0x81A0, 0xCEEF},{0x81A3, 0xF2F3},{0x81A8, 0xF8B3},{0x81B3, 0xE0CE},{0x81B5, 0xF5FD},{0x81BA, 0xEBEC},{0x81BD, 0xD3C5},
- {0x81BE, 0xFCEC},{0x81BF, 0xD2DB},{0x81C0, 0xD4EB},{0x81C2, 0xDEA2},{0x81C6, 0xE5E6},{0x81CD, 0xF0B0},{0x81D8, 0xD5C4},{0x81DF, 0xEDF4},
- {0x81E3, 0xE3ED},{0x81E5, 0xE8C2},{0x81E7, 0xEDF5},{0x81E8, 0xD7FC},{0x81EA, 0xEDBB},{0x81ED, 0xF6AB},{0x81F3, 0xF2B8},{0x81F4, 0xF6C8},
- {0x81FA, 0xD3E6},{0x81FB, 0xF2DD},{0x81FC, 0xCFBF},{0x81FE, 0xEBAC},{0x8205, 0xCFC0},{0x8207, 0xE6A8},{0x8208, 0xFDE9},{0x820A, 0xCFC1},
- {0x820C, 0xE0DF},{0x820D, 0xDEEC},{0x8212, 0xE0A2},{0x821B, 0xF4BF},{0x821C, 0xE2EF},{0x821E, 0xD9F1},{0x821F, 0xF1C7},{0x8221, 0xCBB8},
- {0x822A, 0xF9FE},{0x822B, 0xDBBA},{0x822C, 0xDAF5},{0x8235, 0xF6EC},{0x8236, 0xDADC},{0x8237, 0xFAE4},{0x8239, 0xE0CF},{0x8240, 0xDDB2},
- {0x8245, 0xE6A9},{0x8247, 0xEFF3},{0x8259, 0xF3ED},{0x8264, 0xEBFA},{0x8266, 0xF9E6},{0x826E, 0xCADD},{0x826F, 0xD5DE},{0x8271, 0xCADE},
- {0x8272, 0xDFE4},{0x8276, 0xE6FD},{0x8278, 0xF5AC},{0x827E, 0xE4F5},{0x828B, 0xE9E3},{0x828D, 0xEDCB},{0x828E, 0xCFE4},{0x8292, 0xD8D3},
- {0x8299, 0xDDB3},{0x829A, 0xD4EC},{0x829D, 0xF2B9},{0x829F, 0xDFB7},{0x82A5, 0xCBCE},{0x82A6, 0xFBD8},{0x82A9, 0xD0D9},{0x82AC, 0xDDD2},
- {0x82AD, 0xF7F4},{0x82AE, 0xE7DC},{0x82AF, 0xE4A5},{0x82B1, 0xFCA3},{0x82B3, 0xDBBB},{0x82B7, 0xF2BA},{0x82B8, 0xE9FD},{0x82B9, 0xD0CA},
- {0x82BB, 0xF5D6},{0x82BC, 0xD9C5},{0x82BD, 0xE4B4},{0x82BF, 0xEDA7},{0x82D1, 0xEABD},{0x82D2, 0xE6FE},{0x82D4, 0xF7C4},{0x82D5, 0xF5AD},
- {0x82D7, 0xD9E0},{0x82DB, 0xCAB4},{0x82DE, 0xF8E2},{0x82DF, 0xCFC2},{0x82E1, 0xECBE},{0x82E5, 0xE5B4},{0x82E6, 0xCDC8},{0x82E7, 0xEEC8},
- {0x82F1, 0xE7C8},{0x82FD, 0xCDC9},{0x82FE, 0xF9B7},{0x8301, 0xF1E8},{0x8302, 0xD9F2},{0x8303, 0xDBF5},{0x8304, 0xCAB5},{0x8305, 0xD9C6},
- {0x8309, 0xD8C9},{0x8317, 0xD9AB},{0x8328, 0xEDBC},{0x832B, 0xD8D4},{0x832F, 0xDCDA},{0x8331, 0xE2BC},{0x8334, 0xFCED},{0x8335, 0xECE0},
- {0x8336, 0xD2FE},{0x8338, 0xE9C7},{0x8339, 0xE6AA},{0x8340, 0xE2F0},{0x8347, 0xFABB},{0x8349, 0xF5AE},{0x834A, 0xFBAA},{0x834F, 0xECFB},
- {0x8351, 0xECBF},{0x8352, 0xFCD8},{0x8373, 0xD4E5},{0x8377, 0xF9C3},{0x837B, 0xEEE2},{0x8389, 0xD7E9},{0x838A, 0xEDF6},{0x838E, 0xDEED},
- {0x8396, 0xCCEC},{0x8398, 0xE3EE},{0x839E, 0xE8D4},{0x83A2, 0xFAF8},{0x83A9, 0xDDB4},{0x83AA, 0xE4B5},{0x83AB, 0xD8B0},{0x83BD, 0xD8D5},
- {0x83C1, 0xF4EA},{0x83C5, 0xCEB9},{0x83C9, 0xD6E1},{0x83CA, 0xCFD2},{0x83CC, 0xD0B6},{0x83D3, 0xCEA2},{0x83D6, 0xF3EE},{0x83DC, 0xF3F8},
- {0x83E9, 0xDCCC},{0x83EB, 0xD0CB},{0x83EF, 0xFCA4},{0x83F0, 0xCDCA},{0x83F1, 0xD7D4},{0x83F2, 0xDEA3},{0x83F4, 0xE4E0},{0x83F9, 0xEEC9},
- {0x83FD, 0xE2DD},{0x8403, 0xF5FE},{0x8404, 0xD4AC},{0x840A, 0xD5D1},{0x840C, 0xD8F0},{0x840D, 0xF8C3},{0x840E, 0xEAD7},{0x8429, 0xF5D7},
- {0x842C, 0xD8BF},{0x8431, 0xFDC0},{0x8438, 0xEBAD},{0x843D, 0xD5AA},{0x8449, 0xE7A8},{0x8457, 0xEECA},{0x845B, 0xCAE7},{0x8461, 0xF8E3},
- {0x8463, 0xD4DD},{0x8466, 0xEAD8},{0x846B, 0xFBD9},{0x846C, 0xEDF7},{0x846F, 0xE5B5},{0x8475, 0xD0AD},{0x847A, 0xF1F1},{0x8490, 0xE2BD},
- {0x8494, 0xE3C8},{0x8499, 0xD9D5},{0x849C, 0xDFAA},{0x84A1, 0xDBBC},{0x84B2, 0xF8E4},{0x84B8, 0xF1FA},{0x84BB, 0xE5B6},{0x84BC, 0xF3EF},
- {0x84BF, 0xFBDA},{0x84C0, 0xE1E0},{0x84C2, 0xD9AC},{0x84C4, 0xF5EB},{0x84C6, 0xE0B6},{0x84C9, 0xE9C8},{0x84CB, 0xCBCF},{0x84CD, 0xE3C9},
- {0x84D1, 0xDEEE},{0x84DA, 0xE2BE},{0x84EC, 0xDCEF},{0x84EE, 0xD6A5},{0x84F4, 0xE2F1},{0x84FC, 0xD6FE},{0x8511, 0xD9A1},{0x8513, 0xD8C0},
- {0x8514, 0xDCDB},{0x8517, 0xEDBD},{0x8518, 0xDFB8},{0x851A, 0xEAA5},{0x851E, 0xD7AD},{0x8521, 0xF3F9},{0x8523, 0xEDF8},{0x8525, 0xF5C7},
- {0x852C, 0xE1CA},{0x852D, 0xEBE3},{0x852F, 0xF2DE},{0x853D, 0xF8CC},{0x853F, 0xEAD9},{0x8541, 0xD3C6},{0x8543, 0xDBE6},{0x8549, 0xF5AF},
- {0x854E, 0xCEF0},{0x8553, 0xE9FE},{0x8559, 0xFBB6},{0x8563, 0xE2F2},{0x8568, 0xCFF2},{0x8569, 0xF7B9},{0x856A, 0xD9F3},{0x856D, 0xE1CB},
- {0x8584, 0xDADD},{0x8587, 0xDAB9},{0x858F, 0xEBFB},{0x8591, 0xCBB9},{0x8594, 0xEDF9},{0x859B, 0xE0E0},{0x85A6, 0xF4C0},{0x85A8, 0xFDBC},
- {0x85A9, 0xDFB1},{0x85AA, 0xE3EF},{0x85AF, 0xE0A3},{0x85B0, 0xFDB9},{0x85BA, 0xF0B1},{0x85C1, 0xCDCB},{0x85C9, 0xEDBE},{0x85CD, 0xD5C0},
- {0x85CE, 0xE3F0},{0x85CF, 0xEDFA},{0x85D5, 0xE9E4},{0x85DC, 0xD5ED},{0x85DD, 0xE7DD},{0x85E4, 0xD4F6},{0x85E5, 0xE5B7},{0x85E9, 0xDBE7},
- {0x85EA, 0xE2BF},{0x85F7, 0xEECB},{0x85FA, 0xD7F4},{0x85FB, 0xF0DD},{0x85FF, 0xCEAB},{0x8602, 0xE7DE},{0x8606, 0xD6D6},{0x8607, 0xE1CC},
- {0x860A, 0xE8B3},{0x8616, 0xE5EE},{0x8617, 0xDCA2},{0x861A, 0xE0D0},{0x862D, 0xD5B5},{0x863F, 0xD5A1},{0x864E, 0xFBDB},{0x8650, 0xF9CB},
- {0x8654, 0xCBF3},{0x8655, 0xF4A5},{0x865B, 0xFAC8},{0x865C, 0xD6D7},{0x865E, 0xE9E5},{0x865F, 0xFBDC},{0x8667, 0xFDD0},{0x8679, 0xFBF6},
- {0x868A, 0xDAA5},{0x868C, 0xDBBD},{0x8693, 0xECE2},{0x86A3, 0xCDF7},{0x86A4, 0xF0DE},{0x86A9, 0xF6C9},{0x86C7, 0xDEEF},{0x86CB, 0xD3B1},
- {0x86D4, 0xFCEE},{0x86D9, 0xE8C3},{0x86DB, 0xF1C8},{0x86DF, 0xCEF1},{0x86E4, 0xF9ED},{0x86ED, 0xF2F4},{0x86FE, 0xE4B6},{0x8700, 0xF5B9},
- {0x8702, 0xDCF0},{0x8703, 0xE3F1},{0x8708, 0xE8A5},{0x8718, 0xF2BB},{0x871A, 0xDEA4},{0x871C, 0xDACC},{0x874E, 0xCAE9},{0x8755, 0xE3DA},
- {0x8757, 0xFCD9},{0x875F, 0xEADA},{0x8766, 0xF9C4},{0x8768, 0xE3A4},{0x8774, 0xFBDD},{0x8776, 0xEFCA},{0x8778, 0xE8C4},{0x8782, 0xD5CC},
- {0x878D, 0xEBD7},{0x879F, 0xD9AD},{0x87A2, 0xFBAB},{0x87B3, 0xD3D9},{0x87BA, 0xD5A2},{0x87C4, 0xF6DE},{0x87E0, 0xDAF6},{0x87EC, 0xE0D1},
- {0x87EF, 0xE9A8},{0x87F2, 0xF5F9},{0x87F9, 0xFAAF},{0x87FB, 0xEBFC},{0x87FE, 0xE0EA},{0x8805, 0xE3B2},{0x881F, 0xD5C5},{0x8822, 0xF1E3},
- {0x8823, 0xD5EE},{0x8831, 0xCDCC},{0x8836, 0xEDD9},{0x883B, 0xD8C1},{0x8840, 0xFAEC},{0x8846, 0xF1EB},{0x884C, 0xFABC},{0x884D, 0xE6E2},
- {0x8852, 0xFAE5},{0x8853, 0xE2FA},{0x8857, 0xCAB6},{0x8859, 0xE4B7},{0x885B, 0xEADB},{0x885D, 0xF5FA},{0x8861, 0xFBAC},{0x8862, 0xCFC3},
- {0x8863, 0xEBFD},{0x8868, 0xF8FA},{0x886B, 0xDFB9},{0x8870, 0xE1F1},{0x8872, 0xD2A4},{0x8877, 0xF5FB},{0x887E, 0xD0DA},{0x887F, 0xD0DB},
- {0x8881, 0xEABE},{0x8882, 0xD9B1},{0x8888, 0xCAB7},{0x888B, 0xD3E7},{0x888D, 0xF8E5},{0x8892, 0xD3B2},{0x8896, 0xE2C0},{0x8897, 0xF2DF},
- {0x889E, 0xCDE5},{0x88AB, 0xF9AC},{0x88B4, 0xCDCD},{0x88C1, 0xEEAE},{0x88C2, 0xD6AE},{0x88CF, 0xD7EA},{0x88D4, 0xE7E0},{0x88D5, 0xEBAE},
- {0x88D9, 0xCFD9},{0x88DC, 0xDCCD},{0x88DD, 0xEDFB},{0x88DF, 0xDEF0},{0x88E1, 0xD7EB},{0x88E8, 0xDEA5},{0x88F3, 0xDFD7},{0x88F4, 0xDBD0},
- {0x88F5, 0xDBD1},{0x88F8, 0xD5A3},{0x88FD, 0xF0B2},{0x8907, 0xDCDC},{0x8910, 0xCAE8},{0x8912, 0xF8E6},{0x8913, 0xDCCE},{0x8918, 0xEADC},
- {0x8919, 0xDBD2},{0x8925, 0xE9B3},{0x892A, 0xF7DB},{0x8936, 0xE3A8},{0x8938, 0xD7AE},{0x893B, 0xE0E1},{0x8941, 0xCBBA},{0x8944, 0xE5D1},
- {0x895F, 0xD0DC},{0x8964, 0xD5C1},{0x896A, 0xD8CA},{0x8972, 0xE3A9},{0x897F, 0xE0A4},{0x8981, 0xE9A9},{0x8983, 0xD3C7},{0x8986, 0xDCDD},
- {0x8987, 0xF8AE},{0x898B, 0xCCB8},{0x898F, 0xD0AE},{0x8993, 0xD8F2},{0x8996, 0xE3CA},{0x89A1, 0xCCAF},{0x89A9, 0xD4AD},{0x89AA, 0xF6D1},
- {0x89B2, 0xD0CC},{0x89BA, 0xCAC6},{0x89BD, 0xD5C2},{0x89C0, 0xCEBA},{0x89D2, 0xCAC7},{0x89E3, 0xFAB0},{0x89F4, 0xDFD8},{0x89F8, 0xF5BA},
- {0x8A00, 0xE5EB},{0x8A02, 0xEFF4},{0x8A03, 0xDDB5},{0x8A08, 0xCDAA},{0x8A0A, 0xE3F2},{0x8A0C, 0xFBF7},{0x8A0E, 0xF7D0},{0x8A13, 0xFDBA},
- {0x8A16, 0xFDE1},{0x8A17, 0xF6FE},{0x8A18, 0xD1C0},{0x8A1B, 0xE8C5},{0x8A1D, 0xE4B8},{0x8A1F, 0xE1E8},{0x8A23, 0xCCC1},{0x8A25, 0xD2ED},
- {0x8A2A, 0xDBBE},{0x8A2D, 0xE0E2},{0x8A31, 0xFAC9},{0x8A34, 0xE1CD},{0x8A36, 0xCAB8},{0x8A3A, 0xF2E0},{0x8A3B, 0xF1C9},{0x8A50, 0xDEF1},
- {0x8A54, 0xF0DF},{0x8A55, 0xF8C4},{0x8A5B, 0xEECC},{0x8A5E, 0xDEF2},{0x8A60, 0xE7C9},{0x8A62, 0xE2F3},{0x8A63, 0xE7E1},{0x8A66, 0xE3CB},
- {0x8A69, 0xE3CC},{0x8A6D, 0xCFF8},{0x8A6E, 0xEFAC},{0x8A70, 0xFDFE},{0x8A71, 0xFCA5},{0x8A72, 0xFAB1},{0x8A73, 0xDFD9},{0x8A75, 0xE0D2},
- {0x8A79, 0xF4DA},{0x8A85, 0xF1CA},{0x8A87, 0xCEA3},{0x8A8C, 0xF2BC},{0x8A8D, 0xECE3},{0x8A93, 0xE0A5},{0x8A95, 0xF7AB},{0x8A98, 0xEBAF},
- {0x8A9E, 0xE5DE},{0x8AA0, 0xE1A4},{0x8AA1, 0xCDAB},{0x8AA3, 0xD9F4},{0x8AA4, 0xE8A6},{0x8AA5, 0xCDCE},{0x8AA6, 0xE1E9},{0x8AA8, 0xFCEF},
- {0x8AAA, 0xE0E3},{0x8AB0, 0xE2C1},{0x8AB2, 0xCEA4},{0x8AB9, 0xDEA6},{0x8ABC, 0xEBFE},{0x8ABE, 0xEBDD},{0x8ABF, 0xF0E0},{0x8AC2, 0xF4DB},
- {0x8AC4, 0xE2F4},{0x8AC7, 0xD3C8},{0x8ACB, 0xF4EB},{0x8ACD, 0xEEB5},{0x8ACF, 0xF5D8},{0x8AD2, 0xD5DF},{0x8AD6, 0xD6E5},{0x8ADB, 0xEBB0},
- {0x8ADC, 0xF4E3},{0x8AE1, 0xE3CD},{0x8AE6, 0xF4F4},{0x8AE7, 0xFAB2},{0x8AEA, 0xEFF5},{0x8AEB, 0xCADF},{0x8AED, 0xEBB1},{0x8AEE, 0xEDBF},
- {0x8AF1, 0xFDC9},{0x8AF6, 0xE4A6},{0x8AF7, 0xF9A4},{0x8AF8, 0xF0B3},{0x8AFA, 0xE5EC},{0x8AFE, 0xD1E7},{0x8B00, 0xD9C7},{0x8B01, 0xE4D7},
- {0x8B02, 0xEADD},{0x8B04, 0xD4F7},{0x8B0E, 0xDABA},{0x8B10, 0xDACD},{0x8B14, 0xF9CC},{0x8B16, 0xE1DA},{0x8B17, 0xDBBF},{0x8B19, 0xCCC5},
- {0x8B1A, 0xECD0},{0x8B1B, 0xCBBB},{0x8B1D, 0xDEF3},{0x8B20, 0xE9AA},{0x8B28, 0xD9C8},{0x8B2B, 0xEEE3},{0x8B2C, 0xD7BD},{0x8B33, 0xCFC4},
- {0x8B39, 0xD0CD},{0x8B41, 0xFCA6},{0x8B49, 0xF1FB},{0x8B4E, 0xFDD2},{0x8B4F, 0xD1C1},{0x8B58, 0xE3DB},{0x8B5A, 0xD3C9},{0x8B5C, 0xDCCF},
- {0x8B66, 0xCCED},{0x8B6C, 0xDEA7},{0x8B6F, 0xE6BB},{0x8B70, 0xECA1},{0x8B74, 0xCCB9},{0x8B77, 0xFBDE},{0x8B7D, 0xE7E2},{0x8B80, 0xD4C1},
- {0x8B8A, 0xDCA8},{0x8B90, 0xE2C2},{0x8B92, 0xF3D8},{0x8B93, 0xE5D3},{0x8B96, 0xF3D9},{0x8B9A, 0xF3C6},{0x8C37, 0xCDDB},{0x8C3F, 0xCDAC},
- {0x8C41, 0xFCC3},{0x8C46, 0xD4E7},{0x8C48, 0xD1C2},{0x8C4A, 0xF9A5},{0x8C4C, 0xE8D5},{0x8C55, 0xE3CE},{0x8C5A, 0xD4CA},{0x8C61, 0xDFDA},
- {0x8C6A, 0xFBDF},{0x8C6B, 0xE7E3},{0x8C79, 0xF8FB},{0x8C7A, 0xE3CF},{0x8C82, 0xF5B0},{0x8C8A, 0xD8E7},{0x8C8C, 0xD9C9},{0x8C9D, 0xF8AF},
- {0x8C9E, 0xEFF6},{0x8CA0, 0xDDB6},{0x8CA1, 0xEEAF},{0x8CA2, 0xCDF8},{0x8CA7, 0xDEB8},{0x8CA8, 0xFCA7},{0x8CA9, 0xF7FC},{0x8CAA, 0xF7B1},
- {0x8CAB, 0xCEBB},{0x8CAC, 0xF4A1},{0x8CAF, 0xEECD},{0x8CB0, 0xE1AE},{0x8CB3, 0xECC3},{0x8CB4, 0xCFFE},{0x8CB6, 0xF8BF},{0x8CB7, 0xD8E2},
- {0x8CB8, 0xD3E8},{0x8CBB, 0xDEA8},{0x8CBC, 0xF4E4},{0x8CBD, 0xECC2},{0x8CBF, 0xD9F5},{0x8CC0, 0xF9C5},{0x8CC1, 0xDDD3},{0x8CC2, 0xD6F1},
- {0x8CC3, 0xECFC},{0x8CC4, 0xFCF0},{0x8CC7, 0xEDC0},{0x8CC8, 0xCAB9},{0x8CCA, 0xEEE4},{0x8CD1, 0xF2E1},{0x8CD3, 0xDEB9},{0x8CDA, 0xD6F2},
- {0x8CDC, 0xDEF4},{0x8CDE, 0xDFDB},{0x8CE0, 0xDBD3},{0x8CE2, 0xFAE7},{0x8CE3, 0xD8E3},{0x8CE4, 0xF4C1},{0x8CE6, 0xDDB7},{0x8CEA, 0xF2F5},
- {0x8CED, 0xD4AE},{0x8CF4, 0xD6F3},{0x8CFB, 0xDDB8},{0x8CFC, 0xCFC5},{0x8CFD, 0xDFDF},{0x8D04, 0xF2BE},{0x8D05, 0xF6A1},{0x8D07, 0xEBCB},
- {0x8D08, 0xF1FC},{0x8D0A, 0xF3C7},{0x8D0D, 0xE0EB},{0x8D13, 0xEDFC},{0x8D16, 0xE1DB},{0x8D64, 0xEEE5},{0x8D66, 0xDEF5},{0x8D6B, 0xFAD3},
- {0x8D70, 0xF1CB},{0x8D73, 0xD0AF},{0x8D74, 0xDDB9},{0x8D77, 0xD1C3},{0x8D85, 0xF5B1},{0x8D8A, 0xEAC6},{0x8D99, 0xF0E1},{0x8DA3, 0xF6AC},
- {0x8DA8, 0xF5D9},{0x8DB3, 0xF0EB},{0x8DBA, 0xDDBA},{0x8DBE, 0xF2BF},{0x8DC6, 0xF7C5},{0x8DCB, 0xDBA2},{0x8DCC, 0xF2F6},{0x8DCF, 0xCABA},
- {0x8DDB, 0xF7F5},{0x8DDD, 0xCBE5},{0x8DE1, 0xEEE6},{0x8DE3, 0xE0D3},{0x8DE8, 0xCEA5},{0x8DEF, 0xD6D8},{0x8DF3, 0xD4AF},{0x8E0A, 0xE9C9},
- {0x8E0F, 0xD3CE},{0x8E10, 0xF4C2},{0x8E1E, 0xCBE6},{0x8E2A, 0xF1A1},{0x8E30, 0xEBB2},{0x8E35, 0xF1A2},{0x8E42, 0xEBB3},{0x8E44, 0xF0B4},
- {0x8E47, 0xCBF4},{0x8E48, 0xD4B0},{0x8E49, 0xF3B2},{0x8E4A, 0xFBB7},{0x8E59, 0xF5EC},{0x8E5F, 0xEEE7},{0x8E60, 0xF4B2},{0x8E74, 0xF5ED},
- {0x8E76, 0xCFF3},{0x8E81, 0xF0E2},{0x8E87, 0xEECE},{0x8E8A, 0xF1CC},{0x8E8D, 0xE5B8},{0x8EAA, 0xD7F5},{0x8EAB, 0xE3F3},{0x8EAC, 0xCFE5},
- {0x8EC0, 0xCFC6},{0x8ECA, 0xF3B3},{0x8ECB, 0xE4D8},{0x8ECC, 0xCFF9},{0x8ECD, 0xCFDA},{0x8ED2, 0xFACD},{0x8EDF, 0xE6E3},{0x8EEB, 0xF2E2},
- {0x8EF8, 0xF5EE},{0x8EFB, 0xCABB},{0x8EFE, 0xE3DC},{0x8F03, 0xCEF2},{0x8F05, 0xD6D9},{0x8F09, 0xEEB0},{0x8F12, 0xF4E5},{0x8F13, 0xD8C2},
- {0x8F14, 0xDCD0},{0x8F15, 0xCCEE},{0x8F1B, 0xD5E0},{0x8F1C, 0xF6CA},{0x8F1D, 0xFDCA},{0x8F1E, 0xD8D6},{0x8F1F, 0xF4CF},{0x8F26, 0xD6A6},
- {0x8F27, 0xDCBE},{0x8F29, 0xDBD4},{0x8F2A, 0xD7C7},{0x8F2F, 0xF2FE},{0x8F33, 0xF1CD},{0x8F38, 0xE2C3},{0x8F39, 0xDCDE},{0x8F3B, 0xDCDF},
- {0x8F3E, 0xEFAD},{0x8F3F, 0xE6AB},{0x8F44, 0xF9DD},{0x8F45, 0xEABF},{0x8F49, 0xEFAE},{0x8F4D, 0xF4D0},{0x8F4E, 0xCEF3},{0x8F5D, 0xE6AC},
- {0x8F5F, 0xCEDE},{0x8F62, 0xD5F9},{0x8F9B, 0xE3F4},{0x8F9C, 0xCDD0},{0x8FA3, 0xD5B8},{0x8FA6, 0xF7FD},{0x8FA8, 0xDCA9},{0x8FAD, 0xDEF6},
- {0x8FAF, 0xDCAA},{0x8FB0, 0xF2E3},{0x8FB1, 0xE9B4},{0x8FB2, 0xD2DC},{0x8FC2, 0xE9E6},{0x8FC5, 0xE3F6},{0x8FCE, 0xE7CA},{0x8FD1, 0xD0CE},
- {0x8FD4, 0xDAF7},{0x8FE6, 0xCABC},{0x8FEA, 0xEEE8},{0x8FEB, 0xDADE},{0x8FED, 0xF2F7},{0x8FF0, 0xE2FB},{0x8FF2, 0xCCA6},{0x8FF7, 0xDABB},
- {0x8FF9, 0xEEE9},{0x8FFD, 0xF5DA},{0x9000, 0xF7DC},{0x9001, 0xE1EA},{0x9002, 0xCEC1},{0x9003, 0xD4B1},{0x9005, 0xFDB1},{0x9006, 0xE6BD},
- {0x9008, 0xFBAD},{0x900B, 0xF8E7},{0x900D, 0xE1CE},{0x900F, 0xF7E2},{0x9010, 0xF5EF},{0x9011, 0xCFC7},{0x9014, 0xD4B2},{0x9015, 0xCCEF},
- {0x9017, 0xD4E8},{0x9019, 0xEECF},{0x901A, 0xF7D7},{0x901D, 0xE0A6},{0x901E, 0xD6C1},{0x901F, 0xE1DC},{0x9020, 0xF0E3},{0x9021, 0xF1E4},
- {0x9022, 0xDCF1},{0x9023, 0xD6A7},{0x902E, 0xF4F5},{0x9031, 0xF1CE},{0x9032, 0xF2E4},{0x9035, 0xD0B0},{0x9038, 0xECEF},{0x903C, 0xF9BA},
- {0x903E, 0xEBB5},{0x9041, 0xD4ED},{0x9042, 0xE2C4},{0x9047, 0xE9E7},{0x904A, 0xEBB4},{0x904B, 0xEAA1},{0x904D, 0xF8BC},{0x904E, 0xCEA6},
- {0x9050, 0xF9C6},{0x9051, 0xFCDA},{0x9053, 0xD4B3},{0x9054, 0xD3B9},{0x9055, 0xEADE},{0x9059, 0xE9AB},{0x905C, 0xE1E1},{0x905D, 0xD3CF},
- {0x905E, 0xF4F6},{0x9060, 0xEAC0},{0x9061, 0xE1CF},{0x9063, 0xCCBA},{0x9069, 0xEEEA},{0x906D, 0xF0E4},{0x906E, 0xF3B4},{0x906F, 0xD4EE},
- {0x9072, 0xF2C0},{0x9075, 0xF1E5},{0x9077, 0xF4C3},{0x9078, 0xE0D4},{0x907A, 0xEBB6},{0x907C, 0xD7A1},{0x907D, 0xCBE8},{0x907F, 0xF9AD},
- {0x9080, 0xE9AD},{0x9081, 0xD8E4},{0x9082, 0xFAB3},{0x9083, 0xE2C5},{0x9084, 0xFCBD},{0x9087, 0xECC4},{0x9088, 0xD8B1},{0x908A, 0xDCAB},
- {0x908F, 0xD5A4},{0x9091, 0xEBE9},{0x9095, 0xE8BB},{0x9099, 0xD8D7},{0x90A2, 0xFBAE},{0x90A3, 0xD1E1},{0x90A6, 0xDBC0},{0x90A8, 0xF5BE},
- {0x90AA, 0xDEF7},{0x90AF, 0xCAFB},{0x90B0, 0xF7C6},{0x90B1, 0xCFC8},{0x90B5, 0xE1D0},{0x90B8, 0xEED0},{0x90C1, 0xE9F4},{0x90CA, 0xCEF4},
- {0x90DE, 0xD5CD},{0x90E1, 0xCFDB},{0x90E8, 0xDDBB},{0x90ED, 0xCEAC},{0x90F5, 0xE9E8},{0x90FD, 0xD4B4},{0x9102, 0xE4C7},{0x9112, 0xF5DB},
- {0x9115, 0xFAC1},{0x9119, 0xDEA9},{0x9127, 0xD4F8},{0x912D, 0xEFF7},{0x9132, 0xD3B3},{0x9149, 0xEBB7},{0x914A, 0xEFF8},{0x914B, 0xF5DC},
- {0x914C, 0xEDCC},{0x914D, 0xDBD5},{0x914E, 0xF1CF},{0x9152, 0xF1D0},{0x9162, 0xF5B2},{0x9169, 0xD9AE},{0x916A, 0xD5AC},{0x916C, 0xE2C6},
- {0x9175, 0xFDA3},{0x9177, 0xFBE5},{0x9178, 0xDFAB},{0x9187, 0xE2F5},{0x9189, 0xF6AD},{0x918B, 0xF5B3},{0x918D, 0xF0B5},{0x9192, 0xE1A5},
- {0x919C, 0xF5DD},{0x91AB, 0xECA2},{0x91AC, 0xEDFD},{0x91AE, 0xF5B4},{0x91AF, 0xFBB8},{0x91B1, 0xDBA3},{0x91B4, 0xD6CA},{0x91B5, 0xCBD9},
- {0x91C0, 0xE5D4},{0x91C7, 0xF3FA},{0x91C9, 0xEBB8},{0x91CB, 0xE0B7},{0x91CC, 0xD7EC},{0x91CD, 0xF1EC},{0x91CE, 0xE5AF},{0x91CF, 0xD5E1},
- {0x91D0, 0xD7ED},{0x91D1, 0xD1D1},{0x91D7, 0xE1F2},{0x91D8, 0xEFF9},{0x91DC, 0xDDBC},{0x91DD, 0xF6DC},{0x91E3, 0xF0E5},{0x91E7, 0xF4C4},
- {0x91EA, 0xE9E9},{0x91F5, 0xF3FB},{0x920D, 0xD4EF},{0x9210, 0xCCA2},{0x9211, 0xF7FE},{0x9212, 0xDFBC},{0x9217, 0xEBCD},{0x921E, 0xD0B7},
- {0x9234, 0xD6C2},{0x923A, 0xE8AD},{0x923F, 0xEFAF},{0x9240, 0xCBA5},{0x9245, 0xCBE9},{0x9249, 0xFAE8},{0x9257, 0xCCC6},{0x925B, 0xE6E7},
- {0x925E, 0xEAC7},{0x9262, 0xDBA4},{0x9264, 0xCFC9},{0x9265, 0xE2FC},{0x9266, 0xEFFA},{0x9280, 0xEBDE},{0x9283, 0xF5C8},{0x9285, 0xD4DE},
- {0x9291, 0xE0D5},{0x9293, 0xEFB0},{0x9296, 0xE2C7},{0x9298, 0xD9AF},{0x929C, 0xF9E7},{0x92B3, 0xE7E5},{0x92B6, 0xCFCA},{0x92B7, 0xE1D1},
- {0x92B9, 0xE2C8},{0x92CC, 0xEFFB},{0x92CF, 0xFAF9},{0x92D2, 0xDCF2},{0x92E4, 0xE0A7},{0x92EA, 0xF8E8},{0x92F8, 0xCBEA},{0x92FC, 0xCBBC},
- {0x9304, 0xD6E2},{0x9310, 0xF5DE},{0x9318, 0xF5DF},{0x931A, 0xEEB6},{0x931E, 0xE2F6},{0x931F, 0xD3CA},{0x9320, 0xEFFC},{0x9321, 0xD1C4},
- {0x9322, 0xEFB1},{0x9324, 0xD1C5},{0x9326, 0xD0DE},{0x9328, 0xD9E1},{0x932B, 0xE0B8},{0x932E, 0xCDD1},{0x932F, 0xF3B9},{0x9348, 0xE7CC},
- {0x934A, 0xD6A8},{0x934B, 0xCEA7},{0x934D, 0xD4B5},{0x9354, 0xE4C8},{0x935B, 0xD3B4},{0x936E, 0xEBB9},{0x9375, 0xCBF5},{0x937C, 0xF6DD},
- {0x937E, 0xF1A3},{0x938C, 0xCCC7},{0x9394, 0xE9CA},{0x9396, 0xE1F0},{0x939A, 0xF5E0},{0x93A3, 0xFBAF},{0x93A7, 0xCBD1},{0x93AC, 0xFBE0},
- {0x93AD, 0xF2E5},{0x93B0, 0xECF0},{0x93C3, 0xF0EC},{0x93D1, 0xEEEB},{0x93DE, 0xE9CB},{0x93E1, 0xCCF0},{0x93E4, 0xD7AF},{0x93F6, 0xF3A1},
- {0x9404, 0xFCF5},{0x9418, 0xF1A4},{0x9425, 0xE0D6},{0x942B, 0xEFB2},{0x9435, 0xF4D1},{0x9438, 0xF7A1},{0x9444, 0xF1D1},{0x9451, 0xCAFC},
- {0x9452, 0xCAFD},{0x945B, 0xCECE},{0x947D, 0xF3C8},{0x947F, 0xF3BA},{0x9577, 0xEDFE},{0x9580, 0xDAA6},{0x9583, 0xE0EC},{0x9589, 0xF8CD},
- {0x958B, 0xCBD2},{0x958F, 0xEBCE},{0x9591, 0xF9D8},{0x9592, 0xF9D9},{0x9593, 0xCAE0},{0x9594, 0xDACA},{0x9598, 0xCBA6},{0x95A3, 0xCAC8},
- {0x95A4, 0xF9EE},{0x95A5, 0xDBEC},{0x95A8, 0xD0B1},{0x95AD, 0xD5EF},{0x95B1, 0xE6F3},{0x95BB, 0xE7A2},{0x95BC, 0xE4D9},{0x95C7, 0xE4E1},
- {0x95CA, 0xFCC4},{0x95D4, 0xF9EF},{0x95D5, 0xCFF4},{0x95D6, 0xF7E6},{0x95DC, 0xCEBC},{0x95E1, 0xF4C5},{0x95E2, 0xDCA3},{0x961C, 0xDDBD},
- {0x9621, 0xF4C6},{0x962A, 0xF8A1},{0x962E, 0xE8D6},{0x9632, 0xDBC1},{0x963B, 0xF0E6},{0x963F, 0xE4B9},{0x9640, 0xF6ED},{0x9642, 0xF9AE},
- {0x9644, 0xDDBE},{0x964B, 0xD7B0},{0x964C, 0xD8E8},{0x964D, 0xCBBD},{0x9650, 0xF9DA},{0x965B, 0xF8CE},{0x965C, 0xF9F0},{0x965D, 0xE0ED},
- {0x965E, 0xE3B3},{0x965F, 0xF4B3},{0x9662, 0xEAC2},{0x9663, 0xF2E6},{0x9664, 0xF0B6},{0x966A, 0xDBD6},{0x9670, 0xEBE4},{0x9673, 0xF2E7},
- {0x9675, 0xD7D5},{0x9676, 0xD4B6},{0x9677, 0xF9E8},{0x9678, 0xD7C1},{0x967D, 0xE5D5},{0x9685, 0xE9EA},{0x9686, 0xD7CC},{0x968A, 0xD3E9},
- {0x968B, 0xE2C9},{0x968D, 0xFCDB},{0x968E, 0xCDAD},{0x9694, 0xCCB0},{0x9695, 0xEAA2},{0x9698, 0xE4F6},{0x9699, 0xD0C0},{0x969B, 0xF0B7},
- {0x969C, 0xEEA1},{0x96A3, 0xD7F6},{0x96A7, 0xE2CA},{0x96A8, 0xE2CB},{0x96AA, 0xFACF},{0x96B1, 0xEBDF},{0x96B7, 0xD6CB},{0x96BB, 0xF4B4},
- {0x96C0, 0xEDCD},{0x96C1, 0xE4D2},{0x96C4, 0xEAA9},{0x96C5, 0xE4BA},{0x96C6, 0xF3A2},{0x96C7, 0xCDD2},{0x96C9, 0xF6CB},{0x96CB, 0xF1E6},
- {0x96CC, 0xEDC1},{0x96CD, 0xE8BC},{0x96CE, 0xEED1},{0x96D5, 0xF0E7},{0x96D6, 0xE2CC},{0x96D9, 0xE4AA},{0x96DB, 0xF5E1},{0x96DC, 0xEDDA},
- {0x96E2, 0xD7EE},{0x96E3, 0xD1F1},{0x96E8, 0xE9EB},{0x96E9, 0xE9EC},{0x96EA, 0xE0E4},{0x96EF, 0xDAA7},{0x96F0, 0xDDD4},{0x96F2, 0xEAA3},
- {0x96F6, 0xD6C3},{0x96F7, 0xD6F4},{0x96F9, 0xDADF},{0x96FB, 0xEFB3},{0x9700, 0xE2CD},{0x9706, 0xEFFD},{0x9707, 0xF2E8},{0x9711, 0xEFC5},
- {0x9713, 0xE7E7},{0x9716, 0xD7FD},{0x9719, 0xE7CE},{0x971C, 0xDFDC},{0x971E, 0xF9C7},{0x9727, 0xD9F6},{0x9730, 0xDFAC},{0x9732, 0xD6DA},
- {0x9739, 0xDCA4},{0x973D, 0xF0B8},{0x9742, 0xD5FA},{0x9744, 0xE4F7},{0x9748, 0xD6C4},{0x9751, 0xF4EC},{0x9756, 0xEFFE},{0x975C, 0xF0A1},
- {0x975E, 0xDEAA},{0x9761, 0xDABC},{0x9762, 0xD8FC},{0x9769, 0xFAD4},{0x976D, 0xECE5},{0x9774, 0xFCA8},{0x9777, 0xECE6},{0x977A, 0xD8CB},
- {0x978B, 0xFBB9},{0x978D, 0xE4D3},{0x978F, 0xCDF9},{0x97A0, 0xCFD3},{0x97A8, 0xCAEA},{0x97AB, 0xCFD4},{0x97AD, 0xF8BD},{0x97C6, 0xF4C7},
- {0x97CB, 0xEADF},{0x97D3, 0xF9DB},{0x97DC, 0xD4B7},{0x97F3, 0xEBE5},{0x97F6, 0xE1D2},{0x97FB, 0xEAA4},{0x97FF, 0xFAC2},{0x9800, 0xFBE1},
- {0x9801, 0xFAED},{0x9802, 0xF0A2},{0x9803, 0xCCF1},{0x9805, 0xFAA3},{0x9806, 0xE2F7},{0x9808, 0xE2CE},{0x980A, 0xE9F5},{0x980C, 0xE1EB},
- {0x9810, 0xE7E8},{0x9811, 0xE8D7},{0x9812, 0xDAF8},{0x9813, 0xD4CB},{0x9817, 0xF7F6},{0x9818, 0xD6C5},{0x982D, 0xD4E9},{0x9830, 0xFAFA},
- {0x9838, 0xCCF2},{0x9839, 0xF7DD},{0x983B, 0xDEBA},{0x9846, 0xCEA8},{0x984C, 0xF0B9},{0x984D, 0xE4FE},{0x984E, 0xE4C9},{0x9854, 0xE4D4},
- {0x9858, 0xEAC3},{0x985A, 0xEFB4},{0x985E, 0xD7BE},{0x9865, 0xFBE2},{0x9867, 0xCDD3},{0x986B, 0xEFB5},{0x986F, 0xFAE9},{0x98A8, 0xF9A6},
- {0x98AF, 0xDFBD},{0x98B1, 0xF7C7},{0x98C4, 0xF8FD},{0x98C7, 0xF8FC},{0x98DB, 0xDEAB},{0x98DC, 0xDBE8},{0x98DF, 0xE3DD},{0x98E1, 0xE1E2},
- {0x98E2, 0xD1C6},{0x98ED, 0xF6D0},{0x98EE, 0xEBE6},{0x98EF, 0xDAF9},{0x98F4, 0xECC7},{0x98FC, 0xDEF8},{0x98FD, 0xF8E9},{0x98FE, 0xE3DE},
- {0x9903, 0xCEF5},{0x9909, 0xFAC3},{0x990A, 0xE5D7},{0x990C, 0xECC8},{0x9910, 0xF3C9},{0x9913, 0xE4BB},{0x9918, 0xE6AE},{0x991E, 0xEFB6},
- {0x9920, 0xDCBF},{0x9928, 0xCEBD},{0x9945, 0xD8C3},{0x9949, 0xD0CF},{0x994B, 0xCFFA},{0x994C, 0xF3CA},{0x994D, 0xE0D7},{0x9951, 0xD1C7},
- {0x9952, 0xE9AE},{0x9954, 0xE8BD},{0x9957, 0xFAC4},{0x9996, 0xE2CF},{0x9999, 0xFAC5},{0x999D, 0xF9B8},{0x99A5, 0xDCE0},{0x99A8, 0xFBB0},
- {0x99AC, 0xD8A9},{0x99AD, 0xE5DF},{0x99AE, 0xF9A7},{0x99B1, 0xF6EE},{0x99B3, 0xF6CC},{0x99B4, 0xE2F8},{0x99B9, 0xECF1},{0x99C1, 0xDAE0},
- {0x99D0, 0xF1D2},{0x99D1, 0xD2CC},{0x99D2, 0xCFCB},{0x99D5, 0xCABD},{0x99D9, 0xDDBF},{0x99DD, 0xF6EF},{0x99DF, 0xDEF9},{0x99ED, 0xFAB4},
- {0x99F1, 0xD5AD},{0x99FF, 0xF1E7},{0x9A01, 0xDEBE},{0x9A08, 0xDCC0},{0x9A0E, 0xD1C8},{0x9A0F, 0xD1C9},{0x9A19, 0xF8BE},{0x9A2B, 0xCBF6},
- {0x9A30, 0xD4F9},{0x9A36, 0xF5E2},{0x9A37, 0xE1D3},{0x9A40, 0xD8E9},{0x9A43, 0xF8FE},{0x9A45, 0xCFCC},{0x9A4D, 0xFDA4},{0x9A55, 0xCEF6},
- {0x9A57, 0xFAD0},{0x9A5A, 0xCCF3},{0x9A5B, 0xE6BE},{0x9A5F, 0xF6AE},{0x9A62, 0xD5F0},{0x9A65, 0xD1CA},{0x9A69, 0xFCBE},{0x9A6A, 0xD5F1},
- {0x9AA8, 0xCDE9},{0x9AB8, 0xFAB5},{0x9AD3, 0xE2D0},{0x9AD4, 0xF4F7},{0x9AD8, 0xCDD4},{0x9AE5, 0xE7A3},{0x9AEE, 0xDBA5},{0x9B1A, 0xE2D1},
- {0x9B27, 0xD7A2},{0x9B2A, 0xF7E3},{0x9B31, 0xEAA6},{0x9B3C, 0xD0A1},{0x9B41, 0xCEDA},{0x9B42, 0xFBEB},{0x9B43, 0xDBA6},{0x9B44, 0xDBDE},
- {0x9B45, 0xD8E5},{0x9B4F, 0xEAE0},{0x9B54, 0xD8AA},{0x9B5A, 0xE5E0},{0x9B6F, 0xD6DB},{0x9B8E, 0xEFC6},{0x9B91, 0xF8EA},{0x9B9F, 0xE4D5},
- {0x9BAB, 0xCEF7},{0x9BAE, 0xE0D8},{0x9BC9, 0xD7EF},{0x9BD6, 0xF4ED},{0x9BE4, 0xCDE6},{0x9BE8, 0xCCF4},{0x9C0D, 0xF5E3},{0x9C10, 0xE4CA},
- {0x9C12, 0xDCE1},{0x9C15, 0xF9C8},{0x9C25, 0xFCBF},{0x9C32, 0xE8A7},{0x9C3B, 0xD8C4},{0x9C47, 0xCBBE},{0x9C49, 0xDCAE},{0x9C57, 0xD7F7},
- {0x9CE5, 0xF0E8},{0x9CE7, 0xDDC0},{0x9CE9, 0xCFCD},{0x9CF3, 0xDCF3},{0x9CF4, 0xD9B0},{0x9CF6, 0xE6E9},{0x9D09, 0xE4BC},{0x9D1B, 0xEAC4},
- {0x9D26, 0xE4EC},{0x9D28, 0xE4E5},{0x9D3B, 0xFBF8},{0x9D51, 0xCCBB},{0x9D5D, 0xE4BD},{0x9D60, 0xCDDC},{0x9D61, 0xD9F7},{0x9D6C, 0xDDDF},
- {0x9D72, 0xEDCE},{0x9DA9, 0xD9D0},{0x9DAF, 0xE5A3},{0x9DB4, 0xF9CD},{0x9DC4, 0xCDAE},{0x9DD7, 0xCFCE},{0x9DF2, 0xF6AF},{0x9DF8, 0xFDD3},
- {0x9DF9, 0xEBED},{0x9DFA, 0xD6DC},{0x9E1A, 0xE5A4},{0x9E1E, 0xD5B6},{0x9E75, 0xD6DD},{0x9E79, 0xF9E9},{0x9E7D, 0xE7A4},{0x9E7F, 0xD6E3},
- {0x9E92, 0xD1CB},{0x9E93, 0xD6E4},{0x9E97, 0xD5F2},{0x9E9D, 0xDEFA},{0x9E9F, 0xD7F8},{0x9EA5, 0xD8EA},{0x9EB4, 0xCFD5},{0x9EB5, 0xD8FD},
- {0x9EBB, 0xD8AB},{0x9EBE, 0xFDCB},{0x9EC3, 0xFCDC},{0x9ECD, 0xE0A8},{0x9ECE, 0xD5F3},{0x9ED1, 0xFDD9},{0x9ED4, 0xCCA3},{0x9ED8, 0xD9F9},
- {0x9EDB, 0xD3EA},{0x9EDC, 0xF5F5},{0x9EDE, 0xEFC7},{0x9EE8, 0xD3DA},{0x9EF4, 0xDABD},{0x9F07, 0xE8A8},{0x9F08, 0xDCAF},{0x9F0E, 0xF0A3},
- {0x9F13, 0xCDD5},{0x9F20, 0xE0A9},{0x9F3B, 0xDEAC},{0x9F4A, 0xF0BA},{0x9F4B, 0xEEB1},{0x9F4E, 0xEEB2},{0x9F52, 0xF6CD},{0x9F5F, 0xEED2},
- {0x9F61, 0xD6C6},{0x9F67, 0xE0E5},{0x9F6A, 0xF3BB},{0x9F6C, 0xE5E1},{0x9F77, 0xE4CB},{0x9F8D, 0xD7A3},{0x9F90, 0xDBC2},{0x9F95, 0xCAFE},
- {0x9F9C, 0xCFCF},{0xAC00, 0xB0A1},{0xAC01, 0xB0A2},{0xAC04, 0xB0A3},{0xAC07, 0xB0A4},{0xAC08, 0xB0A5},{0xAC09, 0xB0A6},{0xAC0A, 0xB0A7},
- {0xAC10, 0xB0A8},{0xAC11, 0xB0A9},{0xAC12, 0xB0AA},{0xAC13, 0xB0AB},{0xAC14, 0xB0AC},{0xAC15, 0xB0AD},{0xAC16, 0xB0AE},{0xAC17, 0xB0AF},
- {0xAC19, 0xB0B0},{0xAC1A, 0xB0B1},{0xAC1B, 0xB0B2},{0xAC1C, 0xB0B3},{0xAC1D, 0xB0B4},{0xAC20, 0xB0B5},{0xAC24, 0xB0B6},{0xAC2C, 0xB0B7},
- {0xAC2D, 0xB0B8},{0xAC2F, 0xB0B9},{0xAC30, 0xB0BA},{0xAC31, 0xB0BB},{0xAC38, 0xB0BC},{0xAC39, 0xB0BD},{0xAC3C, 0xB0BE},{0xAC40, 0xB0BF},
- {0xAC4B, 0xB0C0},{0xAC4D, 0xB0C1},{0xAC54, 0xB0C2},{0xAC58, 0xB0C3},{0xAC5C, 0xB0C4},{0xAC70, 0xB0C5},{0xAC71, 0xB0C6},{0xAC74, 0xB0C7},
- {0xAC77, 0xB0C8},{0xAC78, 0xB0C9},{0xAC7A, 0xB0CA},{0xAC80, 0xB0CB},{0xAC81, 0xB0CC},{0xAC83, 0xB0CD},{0xAC84, 0xB0CE},{0xAC85, 0xB0CF},
- {0xAC86, 0xB0D0},{0xAC89, 0xB0D1},{0xAC8A, 0xB0D2},{0xAC8B, 0xB0D3},{0xAC8C, 0xB0D4},{0xAC90, 0xB0D5},{0xAC94, 0xB0D6},{0xAC9C, 0xB0D7},
- {0xAC9D, 0xB0D8},{0xAC9F, 0xB0D9},{0xACA0, 0xB0DA},{0xACA1, 0xB0DB},{0xACA8, 0xB0DC},{0xACA9, 0xB0DD},{0xACAA, 0xB0DE},{0xACAC, 0xB0DF},
- {0xACAF, 0xB0E0},{0xACB0, 0xB0E1},{0xACB8, 0xB0E2},{0xACB9, 0xB0E3},{0xACBB, 0xB0E4},{0xACBC, 0xB0E5},{0xACBD, 0xB0E6},{0xACC1, 0xB0E7},
- {0xACC4, 0xB0E8},{0xACC8, 0xB0E9},{0xACCC, 0xB0EA},{0xACD5, 0xB0EB},{0xACD7, 0xB0EC},{0xACE0, 0xB0ED},{0xACE1, 0xB0EE},{0xACE4, 0xB0EF},
- {0xACE7, 0xB0F0},{0xACE8, 0xB0F1},{0xACEA, 0xB0F2},{0xACEC, 0xB0F3},{0xACEF, 0xB0F4},{0xACF0, 0xB0F5},{0xACF1, 0xB0F6},{0xACF3, 0xB0F7},
- {0xACF5, 0xB0F8},{0xACF6, 0xB0F9},{0xACFC, 0xB0FA},{0xACFD, 0xB0FB},{0xAD00, 0xB0FC},{0xAD04, 0xB0FD},{0xAD06, 0xB0FE},{0xAD0C, 0xB1A1},
- {0xAD0D, 0xB1A2},{0xAD0F, 0xB1A3},{0xAD11, 0xB1A4},{0xAD18, 0xB1A5},{0xAD1C, 0xB1A6},{0xAD20, 0xB1A7},{0xAD29, 0xB1A8},{0xAD2C, 0xB1A9},
- {0xAD2D, 0xB1AA},{0xAD34, 0xB1AB},{0xAD35, 0xB1AC},{0xAD38, 0xB1AD},{0xAD3C, 0xB1AE},{0xAD44, 0xB1AF},{0xAD45, 0xB1B0},{0xAD47, 0xB1B1},
- {0xAD49, 0xB1B2},{0xAD50, 0xB1B3},{0xAD54, 0xB1B4},{0xAD58, 0xB1B5},{0xAD61, 0xB1B6},{0xAD63, 0xB1B7},{0xAD6C, 0xB1B8},{0xAD6D, 0xB1B9},
- {0xAD70, 0xB1BA},{0xAD73, 0xB1BB},{0xAD74, 0xB1BC},{0xAD75, 0xB1BD},{0xAD76, 0xB1BE},{0xAD7B, 0xB1BF},{0xAD7C, 0xB1C0},{0xAD7D, 0xB1C1},
- {0xAD7F, 0xB1C2},{0xAD81, 0xB1C3},{0xAD82, 0xB1C4},{0xAD88, 0xB1C5},{0xAD89, 0xB1C6},{0xAD8C, 0xB1C7},{0xAD90, 0xB1C8},{0xAD9C, 0xB1C9},
- {0xAD9D, 0xB1CA},{0xADA4, 0xB1CB},{0xADB7, 0xB1CC},{0xADC0, 0xB1CD},{0xADC1, 0xB1CE},{0xADC4, 0xB1CF},{0xADC8, 0xB1D0},{0xADD0, 0xB1D1},
- {0xADD1, 0xB1D2},{0xADD3, 0xB1D3},{0xADDC, 0xB1D4},{0xADE0, 0xB1D5},{0xADE4, 0xB1D6},{0xADF8, 0xB1D7},{0xADF9, 0xB1D8},{0xADFC, 0xB1D9},
- {0xADFF, 0xB1DA},{0xAE00, 0xB1DB},{0xAE01, 0xB1DC},{0xAE08, 0xB1DD},{0xAE09, 0xB1DE},{0xAE0B, 0xB1DF},{0xAE0D, 0xB1E0},{0xAE14, 0xB1E1},
- {0xAE30, 0xB1E2},{0xAE31, 0xB1E3},{0xAE34, 0xB1E4},{0xAE37, 0xB1E5},{0xAE38, 0xB1E6},{0xAE3A, 0xB1E7},{0xAE40, 0xB1E8},{0xAE41, 0xB1E9},
- {0xAE43, 0xB1EA},{0xAE45, 0xB1EB},{0xAE46, 0xB1EC},{0xAE4A, 0xB1ED},{0xAE4C, 0xB1EE},{0xAE4D, 0xB1EF},{0xAE4E, 0xB1F0},{0xAE50, 0xB1F1},
- {0xAE54, 0xB1F2},{0xAE56, 0xB1F3},{0xAE5C, 0xB1F4},{0xAE5D, 0xB1F5},{0xAE5F, 0xB1F6},{0xAE60, 0xB1F7},{0xAE61, 0xB1F8},{0xAE65, 0xB1F9},
- {0xAE68, 0xB1FA},{0xAE69, 0xB1FB},{0xAE6C, 0xB1FC},{0xAE70, 0xB1FD},{0xAE78, 0xB1FE},{0xAE79, 0xB2A1},{0xAE7B, 0xB2A2},{0xAE7C, 0xB2A3},
- {0xAE7D, 0xB2A4},{0xAE84, 0xB2A5},{0xAE85, 0xB2A6},{0xAE8C, 0xB2A7},{0xAEBC, 0xB2A8},{0xAEBD, 0xB2A9},{0xAEBE, 0xB2AA},{0xAEC0, 0xB2AB},
- {0xAEC4, 0xB2AC},{0xAECC, 0xB2AD},{0xAECD, 0xB2AE},{0xAECF, 0xB2AF},{0xAED0, 0xB2B0},{0xAED1, 0xB2B1},{0xAED8, 0xB2B2},{0xAED9, 0xB2B3},
- {0xAEDC, 0xB2B4},{0xAEE8, 0xB2B5},{0xAEEB, 0xB2B6},{0xAEED, 0xB2B7},{0xAEF4, 0xB2B8},{0xAEF8, 0xB2B9},{0xAEFC, 0xB2BA},{0xAF07, 0xB2BB},
- {0xAF08, 0xB2BC},{0xAF0D, 0xB2BD},{0xAF10, 0xB2BE},{0xAF2C, 0xB2BF},{0xAF2D, 0xB2C0},{0xAF30, 0xB2C1},{0xAF32, 0xB2C2},{0xAF34, 0xB2C3},
- {0xAF3C, 0xB2C4},{0xAF3D, 0xB2C5},{0xAF3F, 0xB2C6},{0xAF41, 0xB2C7},{0xAF42, 0xB2C8},{0xAF43, 0xB2C9},{0xAF48, 0xB2CA},{0xAF49, 0xB2CB},
- {0xAF50, 0xB2CC},{0xAF5C, 0xB2CD},{0xAF5D, 0xB2CE},{0xAF64, 0xB2CF},{0xAF65, 0xB2D0},{0xAF79, 0xB2D1},{0xAF80, 0xB2D2},{0xAF84, 0xB2D3},
- {0xAF88, 0xB2D4},{0xAF90, 0xB2D5},{0xAF91, 0xB2D6},{0xAF95, 0xB2D7},{0xAF9C, 0xB2D8},{0xAFB8, 0xB2D9},{0xAFB9, 0xB2DA},{0xAFBC, 0xB2DB},
- {0xAFC0, 0xB2DC},{0xAFC7, 0xB2DD},{0xAFC8, 0xB2DE},{0xAFC9, 0xB2DF},{0xAFCB, 0xB2E0},{0xAFCD, 0xB2E1},{0xAFCE, 0xB2E2},{0xAFD4, 0xB2E3},
- {0xAFDC, 0xB2E4},{0xAFE8, 0xB2E5},{0xAFE9, 0xB2E6},{0xAFF0, 0xB2E7},{0xAFF1, 0xB2E8},{0xAFF4, 0xB2E9},{0xAFF8, 0xB2EA},{0xB000, 0xB2EB},
- {0xB001, 0xB2EC},{0xB004, 0xB2ED},{0xB00C, 0xB2EE},{0xB010, 0xB2EF},{0xB014, 0xB2F0},{0xB01C, 0xB2F1},{0xB01D, 0xB2F2},{0xB028, 0xB2F3},
- {0xB044, 0xB2F4},{0xB045, 0xB2F5},{0xB048, 0xB2F6},{0xB04A, 0xB2F7},{0xB04C, 0xB2F8},{0xB04E, 0xB2F9},{0xB053, 0xB2FA},{0xB054, 0xB2FB},
- {0xB055, 0xB2FC},{0xB057, 0xB2FD},{0xB059, 0xB2FE},{0xB05D, 0xB3A1},{0xB07C, 0xB3A2},{0xB07D, 0xB3A3},{0xB080, 0xB3A4},{0xB084, 0xB3A5},
- {0xB08C, 0xB3A6},{0xB08D, 0xB3A7},{0xB08F, 0xB3A8},{0xB091, 0xB3A9},{0xB098, 0xB3AA},{0xB099, 0xB3AB},{0xB09A, 0xB3AC},{0xB09C, 0xB3AD},
- {0xB09F, 0xB3AE},{0xB0A0, 0xB3AF},{0xB0A1, 0xB3B0},{0xB0A2, 0xB3B1},{0xB0A8, 0xB3B2},{0xB0A9, 0xB3B3},{0xB0AB, 0xB3B4},{0xB0AC, 0xB3B5},
- {0xB0AD, 0xB3B6},{0xB0AE, 0xB3B7},{0xB0AF, 0xB3B8},{0xB0B1, 0xB3B9},{0xB0B3, 0xB3BA},{0xB0B4, 0xB3BB},{0xB0B5, 0xB3BC},{0xB0B8, 0xB3BD},
- {0xB0BC, 0xB3BE},{0xB0C4, 0xB3BF},{0xB0C5, 0xB3C0},{0xB0C7, 0xB3C1},{0xB0C8, 0xB3C2},{0xB0C9, 0xB3C3},{0xB0D0, 0xB3C4},{0xB0D1, 0xB3C5},
- {0xB0D4, 0xB3C6},{0xB0D8, 0xB3C7},{0xB0E0, 0xB3C8},{0xB0E5, 0xB3C9},{0xB108, 0xB3CA},{0xB109, 0xB3CB},{0xB10B, 0xB3CC},{0xB10C, 0xB3CD},
- {0xB110, 0xB3CE},{0xB112, 0xB3CF},{0xB113, 0xB3D0},{0xB118, 0xB3D1},{0xB119, 0xB3D2},{0xB11B, 0xB3D3},{0xB11C, 0xB3D4},{0xB11D, 0xB3D5},
- {0xB123, 0xB3D6},{0xB124, 0xB3D7},{0xB125, 0xB3D8},{0xB128, 0xB3D9},{0xB12C, 0xB3DA},{0xB134, 0xB3DB},{0xB135, 0xB3DC},{0xB137, 0xB3DD},
- {0xB138, 0xB3DE},{0xB139, 0xB3DF},{0xB140, 0xB3E0},{0xB141, 0xB3E1},{0xB144, 0xB3E2},{0xB148, 0xB3E3},{0xB150, 0xB3E4},{0xB151, 0xB3E5},
- {0xB154, 0xB3E6},{0xB155, 0xB3E7},{0xB158, 0xB3E8},{0xB15C, 0xB3E9},{0xB160, 0xB3EA},{0xB178, 0xB3EB},{0xB179, 0xB3EC},{0xB17C, 0xB3ED},
- {0xB180, 0xB3EE},{0xB182, 0xB3EF},{0xB188, 0xB3F0},{0xB189, 0xB3F1},{0xB18B, 0xB3F2},{0xB18D, 0xB3F3},{0xB192, 0xB3F4},{0xB193, 0xB3F5},
- {0xB194, 0xB3F6},{0xB198, 0xB3F7},{0xB19C, 0xB3F8},{0xB1A8, 0xB3F9},{0xB1CC, 0xB3FA},{0xB1D0, 0xB3FB},{0xB1D4, 0xB3FC},{0xB1DC, 0xB3FD},
- {0xB1DD, 0xB3FE},{0xB1DF, 0xB4A1},{0xB1E8, 0xB4A2},{0xB1E9, 0xB4A3},{0xB1EC, 0xB4A4},{0xB1F0, 0xB4A5},{0xB1F9, 0xB4A6},{0xB1FB, 0xB4A7},
- {0xB1FD, 0xB4A8},{0xB204, 0xB4A9},{0xB205, 0xB4AA},{0xB208, 0xB4AB},{0xB20B, 0xB4AC},{0xB20C, 0xB4AD},{0xB214, 0xB4AE},{0xB215, 0xB4AF},
- {0xB217, 0xB4B0},{0xB219, 0xB4B1},{0xB220, 0xB4B2},{0xB234, 0xB4B3},{0xB23C, 0xB4B4},{0xB258, 0xB4B5},{0xB25C, 0xB4B6},{0xB260, 0xB4B7},
- {0xB268, 0xB4B8},{0xB269, 0xB4B9},{0xB274, 0xB4BA},{0xB275, 0xB4BB},{0xB27C, 0xB4BC},{0xB284, 0xB4BD},{0xB285, 0xB4BE},{0xB289, 0xB4BF},
- {0xB290, 0xB4C0},{0xB291, 0xB4C1},{0xB294, 0xB4C2},{0xB298, 0xB4C3},{0xB299, 0xB4C4},{0xB29A, 0xB4C5},{0xB2A0, 0xB4C6},{0xB2A1, 0xB4C7},
- {0xB2A3, 0xB4C8},{0xB2A5, 0xB4C9},{0xB2A6, 0xB4CA},{0xB2AA, 0xB4CB},{0xB2AC, 0xB4CC},{0xB2B0, 0xB4CD},{0xB2B4, 0xB4CE},{0xB2C8, 0xB4CF},
- {0xB2C9, 0xB4D0},{0xB2CC, 0xB4D1},{0xB2D0, 0xB4D2},{0xB2D2, 0xB4D3},{0xB2D8, 0xB4D4},{0xB2D9, 0xB4D5},{0xB2DB, 0xB4D6},{0xB2DD, 0xB4D7},
- {0xB2E2, 0xB4D8},{0xB2E4, 0xB4D9},{0xB2E5, 0xB4DA},{0xB2E6, 0xB4DB},{0xB2E8, 0xB4DC},{0xB2EB, 0xB4DD},{0xB2EC, 0xB4DE},{0xB2ED, 0xB4DF},
- {0xB2EE, 0xB4E0},{0xB2EF, 0xB4E1},{0xB2F3, 0xB4E2},{0xB2F4, 0xB4E3},{0xB2F5, 0xB4E4},{0xB2F7, 0xB4E5},{0xB2F8, 0xB4E6},{0xB2F9, 0xB4E7},
- {0xB2FA, 0xB4E8},{0xB2FB, 0xB4E9},{0xB2FF, 0xB4EA},{0xB300, 0xB4EB},{0xB301, 0xB4EC},{0xB304, 0xB4ED},{0xB308, 0xB4EE},{0xB310, 0xB4EF},
- {0xB311, 0xB4F0},{0xB313, 0xB4F1},{0xB314, 0xB4F2},{0xB315, 0xB4F3},{0xB31C, 0xB4F4},{0xB354, 0xB4F5},{0xB355, 0xB4F6},{0xB356, 0xB4F7},
- {0xB358, 0xB4F8},{0xB35B, 0xB4F9},{0xB35C, 0xB4FA},{0xB35E, 0xB4FB},{0xB35F, 0xB4FC},{0xB364, 0xB4FD},{0xB365, 0xB4FE},{0xB367, 0xB5A1},
- {0xB369, 0xB5A2},{0xB36B, 0xB5A3},{0xB36E, 0xB5A4},{0xB370, 0xB5A5},{0xB371, 0xB5A6},{0xB374, 0xB5A7},{0xB378, 0xB5A8},{0xB380, 0xB5A9},
- {0xB381, 0xB5AA},{0xB383, 0xB5AB},{0xB384, 0xB5AC},{0xB385, 0xB5AD},{0xB38C, 0xB5AE},{0xB390, 0xB5AF},{0xB394, 0xB5B0},{0xB3A0, 0xB5B1},
- {0xB3A1, 0xB5B2},{0xB3A8, 0xB5B3},{0xB3AC, 0xB5B4},{0xB3C4, 0xB5B5},{0xB3C5, 0xB5B6},{0xB3C8, 0xB5B7},{0xB3CB, 0xB5B8},{0xB3CC, 0xB5B9},
- {0xB3CE, 0xB5BA},{0xB3D0, 0xB5BB},{0xB3D4, 0xB5BC},{0xB3D5, 0xB5BD},{0xB3D7, 0xB5BE},{0xB3D9, 0xB5BF},{0xB3DB, 0xB5C0},{0xB3DD, 0xB5C1},
- {0xB3E0, 0xB5C2},{0xB3E4, 0xB5C3},{0xB3E8, 0xB5C4},{0xB3FC, 0xB5C5},{0xB410, 0xB5C6},{0xB418, 0xB5C7},{0xB41C, 0xB5C8},{0xB420, 0xB5C9},
- {0xB428, 0xB5CA},{0xB429, 0xB5CB},{0xB42B, 0xB5CC},{0xB434, 0xB5CD},{0xB450, 0xB5CE},{0xB451, 0xB5CF},{0xB454, 0xB5D0},{0xB458, 0xB5D1},
- {0xB460, 0xB5D2},{0xB461, 0xB5D3},{0xB463, 0xB5D4},{0xB465, 0xB5D5},{0xB46C, 0xB5D6},{0xB480, 0xB5D7},{0xB488, 0xB5D8},{0xB49D, 0xB5D9},
- {0xB4A4, 0xB5DA},{0xB4A8, 0xB5DB},{0xB4AC, 0xB5DC},{0xB4B5, 0xB5DD},{0xB4B7, 0xB5DE},{0xB4B9, 0xB5DF},{0xB4C0, 0xB5E0},{0xB4C4, 0xB5E1},
- {0xB4C8, 0xB5E2},{0xB4D0, 0xB5E3},{0xB4D5, 0xB5E4},{0xB4DC, 0xB5E5},{0xB4DD, 0xB5E6},{0xB4E0, 0xB5E7},{0xB4E3, 0xB5E8},{0xB4E4, 0xB5E9},
- {0xB4E6, 0xB5EA},{0xB4EC, 0xB5EB},{0xB4ED, 0xB5EC},{0xB4EF, 0xB5ED},{0xB4F1, 0xB5EE},{0xB4F8, 0xB5EF},{0xB514, 0xB5F0},{0xB515, 0xB5F1},
- {0xB518, 0xB5F2},{0xB51B, 0xB5F3},{0xB51C, 0xB5F4},{0xB524, 0xB5F5},{0xB525, 0xB5F6},{0xB527, 0xB5F7},{0xB528, 0xB5F8},{0xB529, 0xB5F9},
- {0xB52A, 0xB5FA},{0xB530, 0xB5FB},{0xB531, 0xB5FC},{0xB534, 0xB5FD},{0xB538, 0xB5FE},{0xB540, 0xB6A1},{0xB541, 0xB6A2},{0xB543, 0xB6A3},
- {0xB544, 0xB6A4},{0xB545, 0xB6A5},{0xB54B, 0xB6A6},{0xB54C, 0xB6A7},{0xB54D, 0xB6A8},{0xB550, 0xB6A9},{0xB554, 0xB6AA},{0xB55C, 0xB6AB},
- {0xB55D, 0xB6AC},{0xB55F, 0xB6AD},{0xB560, 0xB6AE},{0xB561, 0xB6AF},{0xB5A0, 0xB6B0},{0xB5A1, 0xB6B1},{0xB5A4, 0xB6B2},{0xB5A8, 0xB6B3},
- {0xB5AA, 0xB6B4},{0xB5AB, 0xB6B5},{0xB5B0, 0xB6B6},{0xB5B1, 0xB6B7},{0xB5B3, 0xB6B8},{0xB5B4, 0xB6B9},{0xB5B5, 0xB6BA},{0xB5BB, 0xB6BB},
- {0xB5BC, 0xB6BC},{0xB5BD, 0xB6BD},{0xB5C0, 0xB6BE},{0xB5C4, 0xB6BF},{0xB5CC, 0xB6C0},{0xB5CD, 0xB6C1},{0xB5CF, 0xB6C2},{0xB5D0, 0xB6C3},
- {0xB5D1, 0xB6C4},{0xB5D8, 0xB6C5},{0xB5EC, 0xB6C6},{0xB610, 0xB6C7},{0xB611, 0xB6C8},{0xB614, 0xB6C9},{0xB618, 0xB6CA},{0xB625, 0xB6CB},
- {0xB62C, 0xB6CC},{0xB634, 0xB6CD},{0xB648, 0xB6CE},{0xB664, 0xB6CF},{0xB668, 0xB6D0},{0xB69C, 0xB6D1},{0xB69D, 0xB6D2},{0xB6A0, 0xB6D3},
- {0xB6A4, 0xB6D4},{0xB6AB, 0xB6D5},{0xB6AC, 0xB6D6},{0xB6B1, 0xB6D7},{0xB6D4, 0xB6D8},{0xB6F0, 0xB6D9},{0xB6F4, 0xB6DA},{0xB6F8, 0xB6DB},
- {0xB700, 0xB6DC},{0xB701, 0xB6DD},{0xB705, 0xB6DE},{0xB728, 0xB6DF},{0xB729, 0xB6E0},{0xB72C, 0xB6E1},{0xB72F, 0xB6E2},{0xB730, 0xB6E3},
- {0xB738, 0xB6E4},{0xB739, 0xB6E5},{0xB73B, 0xB6E6},{0xB744, 0xB6E7},{0xB748, 0xB6E8},{0xB74C, 0xB6E9},{0xB754, 0xB6EA},{0xB755, 0xB6EB},
- {0xB760, 0xB6EC},{0xB764, 0xB6ED},{0xB768, 0xB6EE},{0xB770, 0xB6EF},{0xB771, 0xB6F0},{0xB773, 0xB6F1},{0xB775, 0xB6F2},{0xB77C, 0xB6F3},
- {0xB77D, 0xB6F4},{0xB780, 0xB6F5},{0xB784, 0xB6F6},{0xB78C, 0xB6F7},{0xB78D, 0xB6F8},{0xB78F, 0xB6F9},{0xB790, 0xB6FA},{0xB791, 0xB6FB},
- {0xB792, 0xB6FC},{0xB796, 0xB6FD},{0xB797, 0xB6FE},{0xB798, 0xB7A1},{0xB799, 0xB7A2},{0xB79C, 0xB7A3},{0xB7A0, 0xB7A4},{0xB7A8, 0xB7A5},
- {0xB7A9, 0xB7A6},{0xB7AB, 0xB7A7},{0xB7AC, 0xB7A8},{0xB7AD, 0xB7A9},{0xB7B4, 0xB7AA},{0xB7B5, 0xB7AB},{0xB7B8, 0xB7AC},{0xB7C7, 0xB7AD},
- {0xB7C9, 0xB7AE},{0xB7EC, 0xB7AF},{0xB7ED, 0xB7B0},{0xB7F0, 0xB7B1},{0xB7F4, 0xB7B2},{0xB7FC, 0xB7B3},{0xB7FD, 0xB7B4},{0xB7FF, 0xB7B5},
- {0xB800, 0xB7B6},{0xB801, 0xB7B7},{0xB807, 0xB7B8},{0xB808, 0xB7B9},{0xB809, 0xB7BA},{0xB80C, 0xB7BB},{0xB810, 0xB7BC},{0xB818, 0xB7BD},
- {0xB819, 0xB7BE},{0xB81B, 0xB7BF},{0xB81D, 0xB7C0},{0xB824, 0xB7C1},{0xB825, 0xB7C2},{0xB828, 0xB7C3},{0xB82C, 0xB7C4},{0xB834, 0xB7C5},
- {0xB835, 0xB7C6},{0xB837, 0xB7C7},{0xB838, 0xB7C8},{0xB839, 0xB7C9},{0xB840, 0xB7CA},{0xB844, 0xB7CB},{0xB851, 0xB7CC},{0xB853, 0xB7CD},
- {0xB85C, 0xB7CE},{0xB85D, 0xB7CF},{0xB860, 0xB7D0},{0xB864, 0xB7D1},{0xB86C, 0xB7D2},{0xB86D, 0xB7D3},{0xB86F, 0xB7D4},{0xB871, 0xB7D5},
- {0xB878, 0xB7D6},{0xB87C, 0xB7D7},{0xB88D, 0xB7D8},{0xB8A8, 0xB7D9},{0xB8B0, 0xB7DA},{0xB8B4, 0xB7DB},{0xB8B8, 0xB7DC},{0xB8C0, 0xB7DD},
- {0xB8C1, 0xB7DE},{0xB8C3, 0xB7DF},{0xB8C5, 0xB7E0},{0xB8CC, 0xB7E1},{0xB8D0, 0xB7E2},{0xB8D4, 0xB7E3},{0xB8DD, 0xB7E4},{0xB8DF, 0xB7E5},
- {0xB8E1, 0xB7E6},{0xB8E8, 0xB7E7},{0xB8E9, 0xB7E8},{0xB8EC, 0xB7E9},{0xB8F0, 0xB7EA},{0xB8F8, 0xB7EB},{0xB8F9, 0xB7EC},{0xB8FB, 0xB7ED},
- {0xB8FD, 0xB7EE},{0xB904, 0xB7EF},{0xB918, 0xB7F0},{0xB920, 0xB7F1},{0xB93C, 0xB7F2},{0xB93D, 0xB7F3},{0xB940, 0xB7F4},{0xB944, 0xB7F5},
- {0xB94C, 0xB7F6},{0xB94F, 0xB7F7},{0xB951, 0xB7F8},{0xB958, 0xB7F9},{0xB959, 0xB7FA},{0xB95C, 0xB7FB},{0xB960, 0xB7FC},{0xB968, 0xB7FD},
- {0xB969, 0xB7FE},{0xB96B, 0xB8A1},{0xB96D, 0xB8A2},{0xB974, 0xB8A3},{0xB975, 0xB8A4},{0xB978, 0xB8A5},{0xB97C, 0xB8A6},{0xB984, 0xB8A7},
- {0xB985, 0xB8A8},{0xB987, 0xB8A9},{0xB989, 0xB8AA},{0xB98A, 0xB8AB},{0xB98D, 0xB8AC},{0xB98E, 0xB8AD},{0xB9AC, 0xB8AE},{0xB9AD, 0xB8AF},
- {0xB9B0, 0xB8B0},{0xB9B4, 0xB8B1},{0xB9BC, 0xB8B2},{0xB9BD, 0xB8B3},{0xB9BF, 0xB8B4},{0xB9C1, 0xB8B5},{0xB9C8, 0xB8B6},{0xB9C9, 0xB8B7},
- {0xB9CC, 0xB8B8},{0xB9CE, 0xB8B9},{0xB9CF, 0xB8BA},{0xB9D0, 0xB8BB},{0xB9D1, 0xB8BC},{0xB9D2, 0xB8BD},{0xB9D8, 0xB8BE},{0xB9D9, 0xB8BF},
- {0xB9DB, 0xB8C0},{0xB9DD, 0xB8C1},{0xB9DE, 0xB8C2},{0xB9E1, 0xB8C3},{0xB9E3, 0xB8C4},{0xB9E4, 0xB8C5},{0xB9E5, 0xB8C6},{0xB9E8, 0xB8C7},
- {0xB9EC, 0xB8C8},{0xB9F4, 0xB8C9},{0xB9F5, 0xB8CA},{0xB9F7, 0xB8CB},{0xB9F8, 0xB8CC},{0xB9F9, 0xB8CD},{0xB9FA, 0xB8CE},{0xBA00, 0xB8CF},
- {0xBA01, 0xB8D0},{0xBA08, 0xB8D1},{0xBA15, 0xB8D2},{0xBA38, 0xB8D3},{0xBA39, 0xB8D4},{0xBA3C, 0xB8D5},{0xBA40, 0xB8D6},{0xBA42, 0xB8D7},
- {0xBA48, 0xB8D8},{0xBA49, 0xB8D9},{0xBA4B, 0xB8DA},{0xBA4D, 0xB8DB},{0xBA4E, 0xB8DC},{0xBA53, 0xB8DD},{0xBA54, 0xB8DE},{0xBA55, 0xB8DF},
- {0xBA58, 0xB8E0},{0xBA5C, 0xB8E1},{0xBA64, 0xB8E2},{0xBA65, 0xB8E3},{0xBA67, 0xB8E4},{0xBA68, 0xB8E5},{0xBA69, 0xB8E6},{0xBA70, 0xB8E7},
- {0xBA71, 0xB8E8},{0xBA74, 0xB8E9},{0xBA78, 0xB8EA},{0xBA83, 0xB8EB},{0xBA84, 0xB8EC},{0xBA85, 0xB8ED},{0xBA87, 0xB8EE},{0xBA8C, 0xB8EF},
- {0xBAA8, 0xB8F0},{0xBAA9, 0xB8F1},{0xBAAB, 0xB8F2},{0xBAAC, 0xB8F3},{0xBAB0, 0xB8F4},{0xBAB2, 0xB8F5},{0xBAB8, 0xB8F6},{0xBAB9, 0xB8F7},
- {0xBABB, 0xB8F8},{0xBABD, 0xB8F9},{0xBAC4, 0xB8FA},{0xBAC8, 0xB8FB},{0xBAD8, 0xB8FC},{0xBAD9, 0xB8FD},{0xBAFC, 0xB8FE},{0xBB00, 0xB9A1},
- {0xBB04, 0xB9A2},{0xBB0D, 0xB9A3},{0xBB0F, 0xB9A4},{0xBB11, 0xB9A5},{0xBB18, 0xB9A6},{0xBB1C, 0xB9A7},{0xBB20, 0xB9A8},{0xBB29, 0xB9A9},
- {0xBB2B, 0xB9AA},{0xBB34, 0xB9AB},{0xBB35, 0xB9AC},{0xBB36, 0xB9AD},{0xBB38, 0xB9AE},{0xBB3B, 0xB9AF},{0xBB3C, 0xB9B0},{0xBB3D, 0xB9B1},
- {0xBB3E, 0xB9B2},{0xBB44, 0xB9B3},{0xBB45, 0xB9B4},{0xBB47, 0xB9B5},{0xBB49, 0xB9B6},{0xBB4D, 0xB9B7},{0xBB4F, 0xB9B8},{0xBB50, 0xB9B9},
- {0xBB54, 0xB9BA},{0xBB58, 0xB9BB},{0xBB61, 0xB9BC},{0xBB63, 0xB9BD},{0xBB6C, 0xB9BE},{0xBB88, 0xB9BF},{0xBB8C, 0xB9C0},{0xBB90, 0xB9C1},
- {0xBBA4, 0xB9C2},{0xBBA8, 0xB9C3},{0xBBAC, 0xB9C4},{0xBBB4, 0xB9C5},{0xBBB7, 0xB9C6},{0xBBC0, 0xB9C7},{0xBBC4, 0xB9C8},{0xBBC8, 0xB9C9},
- {0xBBD0, 0xB9CA},{0xBBD3, 0xB9CB},{0xBBF8, 0xB9CC},{0xBBF9, 0xB9CD},{0xBBFC, 0xB9CE},{0xBBFF, 0xB9CF},{0xBC00, 0xB9D0},{0xBC02, 0xB9D1},
- {0xBC08, 0xB9D2},{0xBC09, 0xB9D3},{0xBC0B, 0xB9D4},{0xBC0C, 0xB9D5},{0xBC0D, 0xB9D6},{0xBC0F, 0xB9D7},{0xBC11, 0xB9D8},{0xBC14, 0xB9D9},
- {0xBC15, 0xB9DA},{0xBC16, 0xB9DB},{0xBC17, 0xB9DC},{0xBC18, 0xB9DD},{0xBC1B, 0xB9DE},{0xBC1C, 0xB9DF},{0xBC1D, 0xB9E0},{0xBC1E, 0xB9E1},
- {0xBC1F, 0xB9E2},{0xBC24, 0xB9E3},{0xBC25, 0xB9E4},{0xBC27, 0xB9E5},{0xBC29, 0xB9E6},{0xBC2D, 0xB9E7},{0xBC30, 0xB9E8},{0xBC31, 0xB9E9},
- {0xBC34, 0xB9EA},{0xBC38, 0xB9EB},{0xBC40, 0xB9EC},{0xBC41, 0xB9ED},{0xBC43, 0xB9EE},{0xBC44, 0xB9EF},{0xBC45, 0xB9F0},{0xBC49, 0xB9F1},
- {0xBC4C, 0xB9F2},{0xBC4D, 0xB9F3},{0xBC50, 0xB9F4},{0xBC5D, 0xB9F5},{0xBC84, 0xB9F6},{0xBC85, 0xB9F7},{0xBC88, 0xB9F8},{0xBC8B, 0xB9F9},
- {0xBC8C, 0xB9FA},{0xBC8E, 0xB9FB},{0xBC94, 0xB9FC},{0xBC95, 0xB9FD},{0xBC97, 0xB9FE},{0xBC99, 0xBAA1},{0xBC9A, 0xBAA2},{0xBCA0, 0xBAA3},
- {0xBCA1, 0xBAA4},{0xBCA4, 0xBAA5},{0xBCA7, 0xBAA6},{0xBCA8, 0xBAA7},{0xBCB0, 0xBAA8},{0xBCB1, 0xBAA9},{0xBCB3, 0xBAAA},{0xBCB4, 0xBAAB},
- {0xBCB5, 0xBAAC},{0xBCBC, 0xBAAD},{0xBCBD, 0xBAAE},{0xBCC0, 0xBAAF},{0xBCC4, 0xBAB0},{0xBCCD, 0xBAB1},{0xBCCF, 0xBAB2},{0xBCD0, 0xBAB3},
- {0xBCD1, 0xBAB4},{0xBCD5, 0xBAB5},{0xBCD8, 0xBAB6},{0xBCDC, 0xBAB7},{0xBCF4, 0xBAB8},{0xBCF5, 0xBAB9},{0xBCF6, 0xBABA},{0xBCF8, 0xBABB},
- {0xBCFC, 0xBABC},{0xBD04, 0xBABD},{0xBD05, 0xBABE},{0xBD07, 0xBABF},{0xBD09, 0xBAC0},{0xBD10, 0xBAC1},{0xBD14, 0xBAC2},{0xBD24, 0xBAC3},
- {0xBD2C, 0xBAC4},{0xBD40, 0xBAC5},{0xBD48, 0xBAC6},{0xBD49, 0xBAC7},{0xBD4C, 0xBAC8},{0xBD50, 0xBAC9},{0xBD58, 0xBACA},{0xBD59, 0xBACB},
- {0xBD64, 0xBACC},{0xBD68, 0xBACD},{0xBD80, 0xBACE},{0xBD81, 0xBACF},{0xBD84, 0xBAD0},{0xBD87, 0xBAD1},{0xBD88, 0xBAD2},{0xBD89, 0xBAD3},
- {0xBD8A, 0xBAD4},{0xBD90, 0xBAD5},{0xBD91, 0xBAD6},{0xBD93, 0xBAD7},{0xBD95, 0xBAD8},{0xBD99, 0xBAD9},{0xBD9A, 0xBADA},{0xBD9C, 0xBADB},
- {0xBDA4, 0xBADC},{0xBDB0, 0xBADD},{0xBDB8, 0xBADE},{0xBDD4, 0xBADF},{0xBDD5, 0xBAE0},{0xBDD8, 0xBAE1},{0xBDDC, 0xBAE2},{0xBDE9, 0xBAE3},
- {0xBDF0, 0xBAE4},{0xBDF4, 0xBAE5},{0xBDF8, 0xBAE6},{0xBE00, 0xBAE7},{0xBE03, 0xBAE8},{0xBE05, 0xBAE9},{0xBE0C, 0xBAEA},{0xBE0D, 0xBAEB},
- {0xBE10, 0xBAEC},{0xBE14, 0xBAED},{0xBE1C, 0xBAEE},{0xBE1D, 0xBAEF},{0xBE1F, 0xBAF0},{0xBE44, 0xBAF1},{0xBE45, 0xBAF2},{0xBE48, 0xBAF3},
- {0xBE4C, 0xBAF4},{0xBE4E, 0xBAF5},{0xBE54, 0xBAF6},{0xBE55, 0xBAF7},{0xBE57, 0xBAF8},{0xBE59, 0xBAF9},{0xBE5A, 0xBAFA},{0xBE5B, 0xBAFB},
- {0xBE60, 0xBAFC},{0xBE61, 0xBAFD},{0xBE64, 0xBAFE},{0xBE68, 0xBBA1},{0xBE6A, 0xBBA2},{0xBE70, 0xBBA3},{0xBE71, 0xBBA4},{0xBE73, 0xBBA5},
- {0xBE74, 0xBBA6},{0xBE75, 0xBBA7},{0xBE7B, 0xBBA8},{0xBE7C, 0xBBA9},{0xBE7D, 0xBBAA},{0xBE80, 0xBBAB},{0xBE84, 0xBBAC},{0xBE8C, 0xBBAD},
- {0xBE8D, 0xBBAE},{0xBE8F, 0xBBAF},{0xBE90, 0xBBB0},{0xBE91, 0xBBB1},{0xBE98, 0xBBB2},{0xBE99, 0xBBB3},{0xBEA8, 0xBBB4},{0xBED0, 0xBBB5},
- {0xBED1, 0xBBB6},{0xBED4, 0xBBB7},{0xBED7, 0xBBB8},{0xBED8, 0xBBB9},{0xBEE0, 0xBBBA},{0xBEE3, 0xBBBB},{0xBEE4, 0xBBBC},{0xBEE5, 0xBBBD},
- {0xBEEC, 0xBBBE},{0xBF01, 0xBBBF},{0xBF08, 0xBBC0},{0xBF09, 0xBBC1},{0xBF18, 0xBBC2},{0xBF19, 0xBBC3},{0xBF1B, 0xBBC4},{0xBF1C, 0xBBC5},
- {0xBF1D, 0xBBC6},{0xBF40, 0xBBC7},{0xBF41, 0xBBC8},{0xBF44, 0xBBC9},{0xBF48, 0xBBCA},{0xBF50, 0xBBCB},{0xBF51, 0xBBCC},{0xBF55, 0xBBCD},
- {0xBF94, 0xBBCE},{0xBFB0, 0xBBCF},{0xBFC5, 0xBBD0},{0xBFCC, 0xBBD1},{0xBFCD, 0xBBD2},{0xBFD0, 0xBBD3},{0xBFD4, 0xBBD4},{0xBFDC, 0xBBD5},
- {0xBFDF, 0xBBD6},{0xBFE1, 0xBBD7},{0xC03C, 0xBBD8},{0xC051, 0xBBD9},{0xC058, 0xBBDA},{0xC05C, 0xBBDB},{0xC060, 0xBBDC},{0xC068, 0xBBDD},
- {0xC069, 0xBBDE},{0xC090, 0xBBDF},{0xC091, 0xBBE0},{0xC094, 0xBBE1},{0xC098, 0xBBE2},{0xC0A0, 0xBBE3},{0xC0A1, 0xBBE4},{0xC0A3, 0xBBE5},
- {0xC0A5, 0xBBE6},{0xC0AC, 0xBBE7},{0xC0AD, 0xBBE8},{0xC0AF, 0xBBE9},{0xC0B0, 0xBBEA},{0xC0B3, 0xBBEB},{0xC0B4, 0xBBEC},{0xC0B5, 0xBBED},
- {0xC0B6, 0xBBEE},{0xC0BC, 0xBBEF},{0xC0BD, 0xBBF0},{0xC0BF, 0xBBF1},{0xC0C0, 0xBBF2},{0xC0C1, 0xBBF3},{0xC0C5, 0xBBF4},{0xC0C8, 0xBBF5},
- {0xC0C9, 0xBBF6},{0xC0CC, 0xBBF7},{0xC0D0, 0xBBF8},{0xC0D8, 0xBBF9},{0xC0D9, 0xBBFA},{0xC0DB, 0xBBFB},{0xC0DC, 0xBBFC},{0xC0DD, 0xBBFD},
- {0xC0E4, 0xBBFE},{0xC0E5, 0xBCA1},{0xC0E8, 0xBCA2},{0xC0EC, 0xBCA3},{0xC0F4, 0xBCA4},{0xC0F5, 0xBCA5},{0xC0F7, 0xBCA6},{0xC0F9, 0xBCA7},
- {0xC100, 0xBCA8},{0xC104, 0xBCA9},{0xC108, 0xBCAA},{0xC110, 0xBCAB},{0xC115, 0xBCAC},{0xC11C, 0xBCAD},{0xC11D, 0xBCAE},{0xC11E, 0xBCAF},
- {0xC11F, 0xBCB0},{0xC120, 0xBCB1},{0xC123, 0xBCB2},{0xC124, 0xBCB3},{0xC126, 0xBCB4},{0xC127, 0xBCB5},{0xC12C, 0xBCB6},{0xC12D, 0xBCB7},
- {0xC12F, 0xBCB8},{0xC130, 0xBCB9},{0xC131, 0xBCBA},{0xC136, 0xBCBB},{0xC138, 0xBCBC},{0xC139, 0xBCBD},{0xC13C, 0xBCBE},{0xC140, 0xBCBF},
- {0xC148, 0xBCC0},{0xC149, 0xBCC1},{0xC14B, 0xBCC2},{0xC14C, 0xBCC3},{0xC14D, 0xBCC4},{0xC154, 0xBCC5},{0xC155, 0xBCC6},{0xC158, 0xBCC7},
- {0xC15C, 0xBCC8},{0xC164, 0xBCC9},{0xC165, 0xBCCA},{0xC167, 0xBCCB},{0xC168, 0xBCCC},{0xC169, 0xBCCD},{0xC170, 0xBCCE},{0xC174, 0xBCCF},
- {0xC178, 0xBCD0},{0xC185, 0xBCD1},{0xC18C, 0xBCD2},{0xC18D, 0xBCD3},{0xC18E, 0xBCD4},{0xC190, 0xBCD5},{0xC194, 0xBCD6},{0xC196, 0xBCD7},
- {0xC19C, 0xBCD8},{0xC19D, 0xBCD9},{0xC19F, 0xBCDA},{0xC1A1, 0xBCDB},{0xC1A5, 0xBCDC},{0xC1A8, 0xBCDD},{0xC1A9, 0xBCDE},{0xC1AC, 0xBCDF},
- {0xC1B0, 0xBCE0},{0xC1BD, 0xBCE1},{0xC1C4, 0xBCE2},{0xC1C8, 0xBCE3},{0xC1CC, 0xBCE4},{0xC1D4, 0xBCE5},{0xC1D7, 0xBCE6},{0xC1D8, 0xBCE7},
- {0xC1E0, 0xBCE8},{0xC1E4, 0xBCE9},{0xC1E8, 0xBCEA},{0xC1F0, 0xBCEB},{0xC1F1, 0xBCEC},{0xC1F3, 0xBCED},{0xC1FC, 0xBCEE},{0xC1FD, 0xBCEF},
- {0xC200, 0xBCF0},{0xC204, 0xBCF1},{0xC20C, 0xBCF2},{0xC20D, 0xBCF3},{0xC20F, 0xBCF4},{0xC211, 0xBCF5},{0xC218, 0xBCF6},{0xC219, 0xBCF7},
- {0xC21C, 0xBCF8},{0xC21F, 0xBCF9},{0xC220, 0xBCFA},{0xC228, 0xBCFB},{0xC229, 0xBCFC},{0xC22B, 0xBCFD},{0xC22D, 0xBCFE},{0xC22F, 0xBDA1},
- {0xC231, 0xBDA2},{0xC232, 0xBDA3},{0xC234, 0xBDA4},{0xC248, 0xBDA5},{0xC250, 0xBDA6},{0xC251, 0xBDA7},{0xC254, 0xBDA8},{0xC258, 0xBDA9},
- {0xC260, 0xBDAA},{0xC265, 0xBDAB},{0xC26C, 0xBDAC},{0xC26D, 0xBDAD},{0xC270, 0xBDAE},{0xC274, 0xBDAF},{0xC27C, 0xBDB0},{0xC27D, 0xBDB1},
- {0xC27F, 0xBDB2},{0xC281, 0xBDB3},{0xC288, 0xBDB4},{0xC289, 0xBDB5},{0xC290, 0xBDB6},{0xC298, 0xBDB7},{0xC29B, 0xBDB8},{0xC29D, 0xBDB9},
- {0xC2A4, 0xBDBA},{0xC2A5, 0xBDBB},{0xC2A8, 0xBDBC},{0xC2AC, 0xBDBD},{0xC2AD, 0xBDBE},{0xC2B4, 0xBDBF},{0xC2B5, 0xBDC0},{0xC2B7, 0xBDC1},
- {0xC2B9, 0xBDC2},{0xC2DC, 0xBDC3},{0xC2DD, 0xBDC4},{0xC2E0, 0xBDC5},{0xC2E3, 0xBDC6},{0xC2E4, 0xBDC7},{0xC2EB, 0xBDC8},{0xC2EC, 0xBDC9},
- {0xC2ED, 0xBDCA},{0xC2EF, 0xBDCB},{0xC2F1, 0xBDCC},{0xC2F6, 0xBDCD},{0xC2F8, 0xBDCE},{0xC2F9, 0xBDCF},{0xC2FB, 0xBDD0},{0xC2FC, 0xBDD1},
- {0xC300, 0xBDD2},{0xC308, 0xBDD3},{0xC309, 0xBDD4},{0xC30C, 0xBDD5},{0xC30D, 0xBDD6},{0xC313, 0xBDD7},{0xC314, 0xBDD8},{0xC315, 0xBDD9},
- {0xC318, 0xBDDA},{0xC31C, 0xBDDB},{0xC324, 0xBDDC},{0xC325, 0xBDDD},{0xC328, 0xBDDE},{0xC329, 0xBDDF},{0xC345, 0xBDE0},{0xC368, 0xBDE1},
- {0xC369, 0xBDE2},{0xC36C, 0xBDE3},{0xC370, 0xBDE4},{0xC372, 0xBDE5},{0xC378, 0xBDE6},{0xC379, 0xBDE7},{0xC37C, 0xBDE8},{0xC37D, 0xBDE9},
- {0xC384, 0xBDEA},{0xC388, 0xBDEB},{0xC38C, 0xBDEC},{0xC3C0, 0xBDED},{0xC3D8, 0xBDEE},{0xC3D9, 0xBDEF},{0xC3DC, 0xBDF0},{0xC3DF, 0xBDF1},
- {0xC3E0, 0xBDF2},{0xC3E2, 0xBDF3},{0xC3E8, 0xBDF4},{0xC3E9, 0xBDF5},{0xC3ED, 0xBDF6},{0xC3F4, 0xBDF7},{0xC3F5, 0xBDF8},{0xC3F8, 0xBDF9},
- {0xC408, 0xBDFA},{0xC410, 0xBDFB},{0xC424, 0xBDFC},{0xC42C, 0xBDFD},{0xC430, 0xBDFE},{0xC434, 0xBEA1},{0xC43C, 0xBEA2},{0xC43D, 0xBEA3},
- {0xC448, 0xBEA4},{0xC464, 0xBEA5},{0xC465, 0xBEA6},{0xC468, 0xBEA7},{0xC46C, 0xBEA8},{0xC474, 0xBEA9},{0xC475, 0xBEAA},{0xC479, 0xBEAB},
- {0xC480, 0xBEAC},{0xC494, 0xBEAD},{0xC49C, 0xBEAE},{0xC4B8, 0xBEAF},{0xC4BC, 0xBEB0},{0xC4E9, 0xBEB1},{0xC4F0, 0xBEB2},{0xC4F1, 0xBEB3},
- {0xC4F4, 0xBEB4},{0xC4F8, 0xBEB5},{0xC4FA, 0xBEB6},{0xC4FF, 0xBEB7},{0xC500, 0xBEB8},{0xC501, 0xBEB9},{0xC50C, 0xBEBA},{0xC510, 0xBEBB},
- {0xC514, 0xBEBC},{0xC51C, 0xBEBD},{0xC528, 0xBEBE},{0xC529, 0xBEBF},{0xC52C, 0xBEC0},{0xC530, 0xBEC1},{0xC538, 0xBEC2},{0xC539, 0xBEC3},
- {0xC53B, 0xBEC4},{0xC53D, 0xBEC5},{0xC544, 0xBEC6},{0xC545, 0xBEC7},{0xC548, 0xBEC8},{0xC549, 0xBEC9},{0xC54A, 0xBECA},{0xC54C, 0xBECB},
- {0xC54D, 0xBECC},{0xC54E, 0xBECD},{0xC553, 0xBECE},{0xC554, 0xBECF},{0xC555, 0xBED0},{0xC557, 0xBED1},{0xC558, 0xBED2},{0xC559, 0xBED3},
- {0xC55D, 0xBED4},{0xC55E, 0xBED5},{0xC560, 0xBED6},{0xC561, 0xBED7},{0xC564, 0xBED8},{0xC568, 0xBED9},{0xC570, 0xBEDA},{0xC571, 0xBEDB},
- {0xC573, 0xBEDC},{0xC574, 0xBEDD},{0xC575, 0xBEDE},{0xC57C, 0xBEDF},{0xC57D, 0xBEE0},{0xC580, 0xBEE1},{0xC584, 0xBEE2},{0xC587, 0xBEE3},
- {0xC58C, 0xBEE4},{0xC58D, 0xBEE5},{0xC58F, 0xBEE6},{0xC591, 0xBEE7},{0xC595, 0xBEE8},{0xC597, 0xBEE9},{0xC598, 0xBEEA},{0xC59C, 0xBEEB},
- {0xC5A0, 0xBEEC},{0xC5A9, 0xBEED},{0xC5B4, 0xBEEE},{0xC5B5, 0xBEEF},{0xC5B8, 0xBEF0},{0xC5B9, 0xBEF1},{0xC5BB, 0xBEF2},{0xC5BC, 0xBEF3},
- {0xC5BD, 0xBEF4},{0xC5BE, 0xBEF5},{0xC5C4, 0xBEF6},{0xC5C5, 0xBEF7},{0xC5C6, 0xBEF8},{0xC5C7, 0xBEF9},{0xC5C8, 0xBEFA},{0xC5C9, 0xBEFB},
- {0xC5CA, 0xBEFC},{0xC5CC, 0xBEFD},{0xC5CE, 0xBEFE},{0xC5D0, 0xBFA1},{0xC5D1, 0xBFA2},{0xC5D4, 0xBFA3},{0xC5D8, 0xBFA4},{0xC5E0, 0xBFA5},
- {0xC5E1, 0xBFA6},{0xC5E3, 0xBFA7},{0xC5E5, 0xBFA8},{0xC5EC, 0xBFA9},{0xC5ED, 0xBFAA},{0xC5EE, 0xBFAB},{0xC5F0, 0xBFAC},{0xC5F4, 0xBFAD},
- {0xC5F6, 0xBFAE},{0xC5F7, 0xBFAF},{0xC5FC, 0xBFB0},{0xC5FD, 0xBFB1},{0xC5FE, 0xBFB2},{0xC5FF, 0xBFB3},{0xC600, 0xBFB4},{0xC601, 0xBFB5},
- {0xC605, 0xBFB6},{0xC606, 0xBFB7},{0xC607, 0xBFB8},{0xC608, 0xBFB9},{0xC60C, 0xBFBA},{0xC610, 0xBFBB},{0xC618, 0xBFBC},{0xC619, 0xBFBD},
- {0xC61B, 0xBFBE},{0xC61C, 0xBFBF},{0xC624, 0xBFC0},{0xC625, 0xBFC1},{0xC628, 0xBFC2},{0xC62C, 0xBFC3},{0xC62D, 0xBFC4},{0xC62E, 0xBFC5},
- {0xC630, 0xBFC6},{0xC633, 0xBFC7},{0xC634, 0xBFC8},{0xC635, 0xBFC9},{0xC637, 0xBFCA},{0xC639, 0xBFCB},{0xC63B, 0xBFCC},{0xC640, 0xBFCD},
- {0xC641, 0xBFCE},{0xC644, 0xBFCF},{0xC648, 0xBFD0},{0xC650, 0xBFD1},{0xC651, 0xBFD2},{0xC653, 0xBFD3},{0xC654, 0xBFD4},{0xC655, 0xBFD5},
- {0xC65C, 0xBFD6},{0xC65D, 0xBFD7},{0xC660, 0xBFD8},{0xC66C, 0xBFD9},{0xC66F, 0xBFDA},{0xC671, 0xBFDB},{0xC678, 0xBFDC},{0xC679, 0xBFDD},
- {0xC67C, 0xBFDE},{0xC680, 0xBFDF},{0xC688, 0xBFE0},{0xC689, 0xBFE1},{0xC68B, 0xBFE2},{0xC68D, 0xBFE3},{0xC694, 0xBFE4},{0xC695, 0xBFE5},
- {0xC698, 0xBFE6},{0xC69C, 0xBFE7},{0xC6A4, 0xBFE8},{0xC6A5, 0xBFE9},{0xC6A7, 0xBFEA},{0xC6A9, 0xBFEB},{0xC6B0, 0xBFEC},{0xC6B1, 0xBFED},
- {0xC6B4, 0xBFEE},{0xC6B8, 0xBFEF},{0xC6B9, 0xBFF0},{0xC6BA, 0xBFF1},{0xC6C0, 0xBFF2},{0xC6C1, 0xBFF3},{0xC6C3, 0xBFF4},{0xC6C5, 0xBFF5},
- {0xC6CC, 0xBFF6},{0xC6CD, 0xBFF7},{0xC6D0, 0xBFF8},{0xC6D4, 0xBFF9},{0xC6DC, 0xBFFA},{0xC6DD, 0xBFFB},{0xC6E0, 0xBFFC},{0xC6E1, 0xBFFD},
- {0xC6E8, 0xBFFE},{0xC6E9, 0xC0A1},{0xC6EC, 0xC0A2},{0xC6F0, 0xC0A3},{0xC6F8, 0xC0A4},{0xC6F9, 0xC0A5},{0xC6FD, 0xC0A6},{0xC704, 0xC0A7},
- {0xC705, 0xC0A8},{0xC708, 0xC0A9},{0xC70C, 0xC0AA},{0xC714, 0xC0AB},{0xC715, 0xC0AC},{0xC717, 0xC0AD},{0xC719, 0xC0AE},{0xC720, 0xC0AF},
- {0xC721, 0xC0B0},{0xC724, 0xC0B1},{0xC728, 0xC0B2},{0xC730, 0xC0B3},{0xC731, 0xC0B4},{0xC733, 0xC0B5},{0xC735, 0xC0B6},{0xC737, 0xC0B7},
- {0xC73C, 0xC0B8},{0xC73D, 0xC0B9},{0xC740, 0xC0BA},{0xC744, 0xC0BB},{0xC74A, 0xC0BC},{0xC74C, 0xC0BD},{0xC74D, 0xC0BE},{0xC74F, 0xC0BF},
- {0xC751, 0xC0C0},{0xC752, 0xC0C1},{0xC753, 0xC0C2},{0xC754, 0xC0C3},{0xC755, 0xC0C4},{0xC756, 0xC0C5},{0xC757, 0xC0C6},{0xC758, 0xC0C7},
- {0xC75C, 0xC0C8},{0xC760, 0xC0C9},{0xC768, 0xC0CA},{0xC76B, 0xC0CB},{0xC774, 0xC0CC},{0xC775, 0xC0CD},{0xC778, 0xC0CE},{0xC77C, 0xC0CF},
- {0xC77D, 0xC0D0},{0xC77E, 0xC0D1},{0xC783, 0xC0D2},{0xC784, 0xC0D3},{0xC785, 0xC0D4},{0xC787, 0xC0D5},{0xC788, 0xC0D6},{0xC789, 0xC0D7},
- {0xC78A, 0xC0D8},{0xC78E, 0xC0D9},{0xC790, 0xC0DA},{0xC791, 0xC0DB},{0xC794, 0xC0DC},{0xC796, 0xC0DD},{0xC797, 0xC0DE},{0xC798, 0xC0DF},
- {0xC79A, 0xC0E0},{0xC7A0, 0xC0E1},{0xC7A1, 0xC0E2},{0xC7A3, 0xC0E3},{0xC7A4, 0xC0E4},{0xC7A5, 0xC0E5},{0xC7A6, 0xC0E6},{0xC7AC, 0xC0E7},
- {0xC7AD, 0xC0E8},{0xC7B0, 0xC0E9},{0xC7B4, 0xC0EA},{0xC7BC, 0xC0EB},{0xC7BD, 0xC0EC},{0xC7BF, 0xC0ED},{0xC7C0, 0xC0EE},{0xC7C1, 0xC0EF},
- {0xC7C8, 0xC0F0},{0xC7C9, 0xC0F1},{0xC7CC, 0xC0F2},{0xC7CE, 0xC0F3},{0xC7D0, 0xC0F4},{0xC7D8, 0xC0F5},{0xC7DD, 0xC0F6},{0xC7E4, 0xC0F7},
- {0xC7E8, 0xC0F8},{0xC7EC, 0xC0F9},{0xC800, 0xC0FA},{0xC801, 0xC0FB},{0xC804, 0xC0FC},{0xC808, 0xC0FD},{0xC80A, 0xC0FE},{0xC810, 0xC1A1},
- {0xC811, 0xC1A2},{0xC813, 0xC1A3},{0xC815, 0xC1A4},{0xC816, 0xC1A5},{0xC81C, 0xC1A6},{0xC81D, 0xC1A7},{0xC820, 0xC1A8},{0xC824, 0xC1A9},
- {0xC82C, 0xC1AA},{0xC82D, 0xC1AB},{0xC82F, 0xC1AC},{0xC831, 0xC1AD},{0xC838, 0xC1AE},{0xC83C, 0xC1AF},{0xC840, 0xC1B0},{0xC848, 0xC1B1},
- {0xC849, 0xC1B2},{0xC84C, 0xC1B3},{0xC84D, 0xC1B4},{0xC854, 0xC1B5},{0xC870, 0xC1B6},{0xC871, 0xC1B7},{0xC874, 0xC1B8},{0xC878, 0xC1B9},
- {0xC87A, 0xC1BA},{0xC880, 0xC1BB},{0xC881, 0xC1BC},{0xC883, 0xC1BD},{0xC885, 0xC1BE},{0xC886, 0xC1BF},{0xC887, 0xC1C0},{0xC88B, 0xC1C1},
- {0xC88C, 0xC1C2},{0xC88D, 0xC1C3},{0xC894, 0xC1C4},{0xC89D, 0xC1C5},{0xC89F, 0xC1C6},{0xC8A1, 0xC1C7},{0xC8A8, 0xC1C8},{0xC8BC, 0xC1C9},
- {0xC8BD, 0xC1CA},{0xC8C4, 0xC1CB},{0xC8C8, 0xC1CC},{0xC8CC, 0xC1CD},{0xC8D4, 0xC1CE},{0xC8D5, 0xC1CF},{0xC8D7, 0xC1D0},{0xC8D9, 0xC1D1},
- {0xC8E0, 0xC1D2},{0xC8E1, 0xC1D3},{0xC8E4, 0xC1D4},{0xC8F5, 0xC1D5},{0xC8FC, 0xC1D6},{0xC8FD, 0xC1D7},{0xC900, 0xC1D8},{0xC904, 0xC1D9},
- {0xC905, 0xC1DA},{0xC906, 0xC1DB},{0xC90C, 0xC1DC},{0xC90D, 0xC1DD},{0xC90F, 0xC1DE},{0xC911, 0xC1DF},{0xC918, 0xC1E0},{0xC92C, 0xC1E1},
- {0xC934, 0xC1E2},{0xC950, 0xC1E3},{0xC951, 0xC1E4},{0xC954, 0xC1E5},{0xC958, 0xC1E6},{0xC960, 0xC1E7},{0xC961, 0xC1E8},{0xC963, 0xC1E9},
- {0xC96C, 0xC1EA},{0xC970, 0xC1EB},{0xC974, 0xC1EC},{0xC97C, 0xC1ED},{0xC988, 0xC1EE},{0xC989, 0xC1EF},{0xC98C, 0xC1F0},{0xC990, 0xC1F1},
- {0xC998, 0xC1F2},{0xC999, 0xC1F3},{0xC99B, 0xC1F4},{0xC99D, 0xC1F5},{0xC9C0, 0xC1F6},{0xC9C1, 0xC1F7},{0xC9C4, 0xC1F8},{0xC9C7, 0xC1F9},
- {0xC9C8, 0xC1FA},{0xC9CA, 0xC1FB},{0xC9D0, 0xC1FC},{0xC9D1, 0xC1FD},{0xC9D3, 0xC1FE},{0xC9D5, 0xC2A1},{0xC9D6, 0xC2A2},{0xC9D9, 0xC2A3},
- {0xC9DA, 0xC2A4},{0xC9DC, 0xC2A5},{0xC9DD, 0xC2A6},{0xC9E0, 0xC2A7},{0xC9E2, 0xC2A8},{0xC9E4, 0xC2A9},{0xC9E7, 0xC2AA},{0xC9EC, 0xC2AB},
- {0xC9ED, 0xC2AC},{0xC9EF, 0xC2AD},{0xC9F0, 0xC2AE},{0xC9F1, 0xC2AF},{0xC9F8, 0xC2B0},{0xC9F9, 0xC2B1},{0xC9FC, 0xC2B2},{0xCA00, 0xC2B3},
- {0xCA08, 0xC2B4},{0xCA09, 0xC2B5},{0xCA0B, 0xC2B6},{0xCA0C, 0xC2B7},{0xCA0D, 0xC2B8},{0xCA14, 0xC2B9},{0xCA18, 0xC2BA},{0xCA29, 0xC2BB},
- {0xCA4C, 0xC2BC},{0xCA4D, 0xC2BD},{0xCA50, 0xC2BE},{0xCA54, 0xC2BF},{0xCA5C, 0xC2C0},{0xCA5D, 0xC2C1},{0xCA5F, 0xC2C2},{0xCA60, 0xC2C3},
- {0xCA61, 0xC2C4},{0xCA68, 0xC2C5},{0xCA7D, 0xC2C6},{0xCA84, 0xC2C7},{0xCA98, 0xC2C8},{0xCABC, 0xC2C9},{0xCABD, 0xC2CA},{0xCAC0, 0xC2CB},
- {0xCAC4, 0xC2CC},{0xCACC, 0xC2CD},{0xCACD, 0xC2CE},{0xCACF, 0xC2CF},{0xCAD1, 0xC2D0},{0xCAD3, 0xC2D1},{0xCAD8, 0xC2D2},{0xCAD9, 0xC2D3},
- {0xCAE0, 0xC2D4},{0xCAEC, 0xC2D5},{0xCAF4, 0xC2D6},{0xCB08, 0xC2D7},{0xCB10, 0xC2D8},{0xCB14, 0xC2D9},{0xCB18, 0xC2DA},{0xCB20, 0xC2DB},
- {0xCB21, 0xC2DC},{0xCB41, 0xC2DD},{0xCB48, 0xC2DE},{0xCB49, 0xC2DF},{0xCB4C, 0xC2E0},{0xCB50, 0xC2E1},{0xCB58, 0xC2E2},{0xCB59, 0xC2E3},
- {0xCB5D, 0xC2E4},{0xCB64, 0xC2E5},{0xCB78, 0xC2E6},{0xCB79, 0xC2E7},{0xCB9C, 0xC2E8},{0xCBB8, 0xC2E9},{0xCBD4, 0xC2EA},{0xCBE4, 0xC2EB},
- {0xCBE7, 0xC2EC},{0xCBE9, 0xC2ED},{0xCC0C, 0xC2EE},{0xCC0D, 0xC2EF},{0xCC10, 0xC2F0},{0xCC14, 0xC2F1},{0xCC1C, 0xC2F2},{0xCC1D, 0xC2F3},
- {0xCC21, 0xC2F4},{0xCC22, 0xC2F5},{0xCC27, 0xC2F6},{0xCC28, 0xC2F7},{0xCC29, 0xC2F8},{0xCC2C, 0xC2F9},{0xCC2E, 0xC2FA},{0xCC30, 0xC2FB},
- {0xCC38, 0xC2FC},{0xCC39, 0xC2FD},{0xCC3B, 0xC2FE},{0xCC3C, 0xC3A1},{0xCC3D, 0xC3A2},{0xCC3E, 0xC3A3},{0xCC44, 0xC3A4},{0xCC45, 0xC3A5},
- {0xCC48, 0xC3A6},{0xCC4C, 0xC3A7},{0xCC54, 0xC3A8},{0xCC55, 0xC3A9},{0xCC57, 0xC3AA},{0xCC58, 0xC3AB},{0xCC59, 0xC3AC},{0xCC60, 0xC3AD},
- {0xCC64, 0xC3AE},{0xCC66, 0xC3AF},{0xCC68, 0xC3B0},{0xCC70, 0xC3B1},{0xCC75, 0xC3B2},{0xCC98, 0xC3B3},{0xCC99, 0xC3B4},{0xCC9C, 0xC3B5},
- {0xCCA0, 0xC3B6},{0xCCA8, 0xC3B7},{0xCCA9, 0xC3B8},{0xCCAB, 0xC3B9},{0xCCAC, 0xC3BA},{0xCCAD, 0xC3BB},{0xCCB4, 0xC3BC},{0xCCB5, 0xC3BD},
- {0xCCB8, 0xC3BE},{0xCCBC, 0xC3BF},{0xCCC4, 0xC3C0},{0xCCC5, 0xC3C1},{0xCCC7, 0xC3C2},{0xCCC9, 0xC3C3},{0xCCD0, 0xC3C4},{0xCCD4, 0xC3C5},
- {0xCCE4, 0xC3C6},{0xCCEC, 0xC3C7},{0xCCF0, 0xC3C8},{0xCD01, 0xC3C9},{0xCD08, 0xC3CA},{0xCD09, 0xC3CB},{0xCD0C, 0xC3CC},{0xCD10, 0xC3CD},
- {0xCD18, 0xC3CE},{0xCD19, 0xC3CF},{0xCD1B, 0xC3D0},{0xCD1D, 0xC3D1},{0xCD24, 0xC3D2},{0xCD28, 0xC3D3},{0xCD2C, 0xC3D4},{0xCD39, 0xC3D5},
- {0xCD5C, 0xC3D6},{0xCD60, 0xC3D7},{0xCD64, 0xC3D8},{0xCD6C, 0xC3D9},{0xCD6D, 0xC3DA},{0xCD6F, 0xC3DB},{0xCD71, 0xC3DC},{0xCD78, 0xC3DD},
- {0xCD88, 0xC3DE},{0xCD94, 0xC3DF},{0xCD95, 0xC3E0},{0xCD98, 0xC3E1},{0xCD9C, 0xC3E2},{0xCDA4, 0xC3E3},{0xCDA5, 0xC3E4},{0xCDA7, 0xC3E5},
- {0xCDA9, 0xC3E6},{0xCDB0, 0xC3E7},{0xCDC4, 0xC3E8},{0xCDCC, 0xC3E9},{0xCDD0, 0xC3EA},{0xCDE8, 0xC3EB},{0xCDEC, 0xC3EC},{0xCDF0, 0xC3ED},
- {0xCDF8, 0xC3EE},{0xCDF9, 0xC3EF},{0xCDFB, 0xC3F0},{0xCDFD, 0xC3F1},{0xCE04, 0xC3F2},{0xCE08, 0xC3F3},{0xCE0C, 0xC3F4},{0xCE14, 0xC3F5},
- {0xCE19, 0xC3F6},{0xCE20, 0xC3F7},{0xCE21, 0xC3F8},{0xCE24, 0xC3F9},{0xCE28, 0xC3FA},{0xCE30, 0xC3FB},{0xCE31, 0xC3FC},{0xCE33, 0xC3FD},
- {0xCE35, 0xC3FE},{0xCE58, 0xC4A1},{0xCE59, 0xC4A2},{0xCE5C, 0xC4A3},{0xCE5F, 0xC4A4},{0xCE60, 0xC4A5},{0xCE61, 0xC4A6},{0xCE68, 0xC4A7},
- {0xCE69, 0xC4A8},{0xCE6B, 0xC4A9},{0xCE6D, 0xC4AA},{0xCE74, 0xC4AB},{0xCE75, 0xC4AC},{0xCE78, 0xC4AD},{0xCE7C, 0xC4AE},{0xCE84, 0xC4AF},
- {0xCE85, 0xC4B0},{0xCE87, 0xC4B1},{0xCE89, 0xC4B2},{0xCE90, 0xC4B3},{0xCE91, 0xC4B4},{0xCE94, 0xC4B5},{0xCE98, 0xC4B6},{0xCEA0, 0xC4B7},
- {0xCEA1, 0xC4B8},{0xCEA3, 0xC4B9},{0xCEA4, 0xC4BA},{0xCEA5, 0xC4BB},{0xCEAC, 0xC4BC},{0xCEAD, 0xC4BD},{0xCEC1, 0xC4BE},{0xCEE4, 0xC4BF},
- {0xCEE5, 0xC4C0},{0xCEE8, 0xC4C1},{0xCEEB, 0xC4C2},{0xCEEC, 0xC4C3},{0xCEF4, 0xC4C4},{0xCEF5, 0xC4C5},{0xCEF7, 0xC4C6},{0xCEF8, 0xC4C7},
- {0xCEF9, 0xC4C8},{0xCF00, 0xC4C9},{0xCF01, 0xC4CA},{0xCF04, 0xC4CB},{0xCF08, 0xC4CC},{0xCF10, 0xC4CD},{0xCF11, 0xC4CE},{0xCF13, 0xC4CF},
- {0xCF15, 0xC4D0},{0xCF1C, 0xC4D1},{0xCF20, 0xC4D2},{0xCF24, 0xC4D3},{0xCF2C, 0xC4D4},{0xCF2D, 0xC4D5},{0xCF2F, 0xC4D6},{0xCF30, 0xC4D7},
- {0xCF31, 0xC4D8},{0xCF38, 0xC4D9},{0xCF54, 0xC4DA},{0xCF55, 0xC4DB},{0xCF58, 0xC4DC},{0xCF5C, 0xC4DD},{0xCF64, 0xC4DE},{0xCF65, 0xC4DF},
- {0xCF67, 0xC4E0},{0xCF69, 0xC4E1},{0xCF70, 0xC4E2},{0xCF71, 0xC4E3},{0xCF74, 0xC4E4},{0xCF78, 0xC4E5},{0xCF80, 0xC4E6},{0xCF85, 0xC4E7},
- {0xCF8C, 0xC4E8},{0xCFA1, 0xC4E9},{0xCFA8, 0xC4EA},{0xCFB0, 0xC4EB},{0xCFC4, 0xC4EC},{0xCFE0, 0xC4ED},{0xCFE1, 0xC4EE},{0xCFE4, 0xC4EF},
- {0xCFE8, 0xC4F0},{0xCFF0, 0xC4F1},{0xCFF1, 0xC4F2},{0xCFF3, 0xC4F3},{0xCFF5, 0xC4F4},{0xCFFC, 0xC4F5},{0xD000, 0xC4F6},{0xD004, 0xC4F7},
- {0xD011, 0xC4F8},{0xD018, 0xC4F9},{0xD02D, 0xC4FA},{0xD034, 0xC4FB},{0xD035, 0xC4FC},{0xD038, 0xC4FD},{0xD03C, 0xC4FE},{0xD044, 0xC5A1},
- {0xD045, 0xC5A2},{0xD047, 0xC5A3},{0xD049, 0xC5A4},{0xD050, 0xC5A5},{0xD054, 0xC5A6},{0xD058, 0xC5A7},{0xD060, 0xC5A8},{0xD06C, 0xC5A9},
- {0xD06D, 0xC5AA},{0xD070, 0xC5AB},{0xD074, 0xC5AC},{0xD07C, 0xC5AD},{0xD07D, 0xC5AE},{0xD081, 0xC5AF},{0xD0A4, 0xC5B0},{0xD0A5, 0xC5B1},
- {0xD0A8, 0xC5B2},{0xD0AC, 0xC5B3},{0xD0B4, 0xC5B4},{0xD0B5, 0xC5B5},{0xD0B7, 0xC5B6},{0xD0B9, 0xC5B7},{0xD0C0, 0xC5B8},{0xD0C1, 0xC5B9},
- {0xD0C4, 0xC5BA},{0xD0C8, 0xC5BB},{0xD0C9, 0xC5BC},{0xD0D0, 0xC5BD},{0xD0D1, 0xC5BE},{0xD0D3, 0xC5BF},{0xD0D4, 0xC5C0},{0xD0D5, 0xC5C1},
- {0xD0DC, 0xC5C2},{0xD0DD, 0xC5C3},{0xD0E0, 0xC5C4},{0xD0E4, 0xC5C5},{0xD0EC, 0xC5C6},{0xD0ED, 0xC5C7},{0xD0EF, 0xC5C8},{0xD0F0, 0xC5C9},
- {0xD0F1, 0xC5CA},{0xD0F8, 0xC5CB},{0xD10D, 0xC5CC},{0xD130, 0xC5CD},{0xD131, 0xC5CE},{0xD134, 0xC5CF},{0xD138, 0xC5D0},{0xD13A, 0xC5D1},
- {0xD140, 0xC5D2},{0xD141, 0xC5D3},{0xD143, 0xC5D4},{0xD144, 0xC5D5},{0xD145, 0xC5D6},{0xD14C, 0xC5D7},{0xD14D, 0xC5D8},{0xD150, 0xC5D9},
- {0xD154, 0xC5DA},{0xD15C, 0xC5DB},{0xD15D, 0xC5DC},{0xD15F, 0xC5DD},{0xD161, 0xC5DE},{0xD168, 0xC5DF},{0xD16C, 0xC5E0},{0xD17C, 0xC5E1},
- {0xD184, 0xC5E2},{0xD188, 0xC5E3},{0xD1A0, 0xC5E4},{0xD1A1, 0xC5E5},{0xD1A4, 0xC5E6},{0xD1A8, 0xC5E7},{0xD1B0, 0xC5E8},{0xD1B1, 0xC5E9},
- {0xD1B3, 0xC5EA},{0xD1B5, 0xC5EB},{0xD1BA, 0xC5EC},{0xD1BC, 0xC5ED},{0xD1C0, 0xC5EE},{0xD1D8, 0xC5EF},{0xD1F4, 0xC5F0},{0xD1F8, 0xC5F1},
- {0xD207, 0xC5F2},{0xD209, 0xC5F3},{0xD210, 0xC5F4},{0xD22C, 0xC5F5},{0xD22D, 0xC5F6},{0xD230, 0xC5F7},{0xD234, 0xC5F8},{0xD23C, 0xC5F9},
- {0xD23D, 0xC5FA},{0xD23F, 0xC5FB},{0xD241, 0xC5FC},{0xD248, 0xC5FD},{0xD25C, 0xC5FE},{0xD264, 0xC6A1},{0xD280, 0xC6A2},{0xD281, 0xC6A3},
- {0xD284, 0xC6A4},{0xD288, 0xC6A5},{0xD290, 0xC6A6},{0xD291, 0xC6A7},{0xD295, 0xC6A8},{0xD29C, 0xC6A9},{0xD2A0, 0xC6AA},{0xD2A4, 0xC6AB},
- {0xD2AC, 0xC6AC},{0xD2B1, 0xC6AD},{0xD2B8, 0xC6AE},{0xD2B9, 0xC6AF},{0xD2BC, 0xC6B0},{0xD2BF, 0xC6B1},{0xD2C0, 0xC6B2},{0xD2C2, 0xC6B3},
- {0xD2C8, 0xC6B4},{0xD2C9, 0xC6B5},{0xD2CB, 0xC6B6},{0xD2D4, 0xC6B7},{0xD2D8, 0xC6B8},{0xD2DC, 0xC6B9},{0xD2E4, 0xC6BA},{0xD2E5, 0xC6BB},
- {0xD2F0, 0xC6BC},{0xD2F1, 0xC6BD},{0xD2F4, 0xC6BE},{0xD2F8, 0xC6BF},{0xD300, 0xC6C0},{0xD301, 0xC6C1},{0xD303, 0xC6C2},{0xD305, 0xC6C3},
- {0xD30C, 0xC6C4},{0xD30D, 0xC6C5},{0xD30E, 0xC6C6},{0xD310, 0xC6C7},{0xD314, 0xC6C8},{0xD316, 0xC6C9},{0xD31C, 0xC6CA},{0xD31D, 0xC6CB},
- {0xD31F, 0xC6CC},{0xD320, 0xC6CD},{0xD321, 0xC6CE},{0xD325, 0xC6CF},{0xD328, 0xC6D0},{0xD329, 0xC6D1},{0xD32C, 0xC6D2},{0xD330, 0xC6D3},
- {0xD338, 0xC6D4},{0xD339, 0xC6D5},{0xD33B, 0xC6D6},{0xD33C, 0xC6D7},{0xD33D, 0xC6D8},{0xD344, 0xC6D9},{0xD345, 0xC6DA},{0xD37C, 0xC6DB},
- {0xD37D, 0xC6DC},{0xD380, 0xC6DD},{0xD384, 0xC6DE},{0xD38C, 0xC6DF},{0xD38D, 0xC6E0},{0xD38F, 0xC6E1},{0xD390, 0xC6E2},{0xD391, 0xC6E3},
- {0xD398, 0xC6E4},{0xD399, 0xC6E5},{0xD39C, 0xC6E6},{0xD3A0, 0xC6E7},{0xD3A8, 0xC6E8},{0xD3A9, 0xC6E9},{0xD3AB, 0xC6EA},{0xD3AD, 0xC6EB},
- {0xD3B4, 0xC6EC},{0xD3B8, 0xC6ED},{0xD3BC, 0xC6EE},{0xD3C4, 0xC6EF},{0xD3C5, 0xC6F0},{0xD3C8, 0xC6F1},{0xD3C9, 0xC6F2},{0xD3D0, 0xC6F3},
- {0xD3D8, 0xC6F4},{0xD3E1, 0xC6F5},{0xD3E3, 0xC6F6},{0xD3EC, 0xC6F7},{0xD3ED, 0xC6F8},{0xD3F0, 0xC6F9},{0xD3F4, 0xC6FA},{0xD3FC, 0xC6FB},
- {0xD3FD, 0xC6FC},{0xD3FF, 0xC6FD},{0xD401, 0xC6FE},{0xD408, 0xC7A1},{0xD41D, 0xC7A2},{0xD440, 0xC7A3},{0xD444, 0xC7A4},{0xD45C, 0xC7A5},
- {0xD460, 0xC7A6},{0xD464, 0xC7A7},{0xD46D, 0xC7A8},{0xD46F, 0xC7A9},{0xD478, 0xC7AA},{0xD479, 0xC7AB},{0xD47C, 0xC7AC},{0xD47F, 0xC7AD},
- {0xD480, 0xC7AE},{0xD482, 0xC7AF},{0xD488, 0xC7B0},{0xD489, 0xC7B1},{0xD48B, 0xC7B2},{0xD48D, 0xC7B3},{0xD494, 0xC7B4},{0xD4A9, 0xC7B5},
- {0xD4CC, 0xC7B6},{0xD4D0, 0xC7B7},{0xD4D4, 0xC7B8},{0xD4DC, 0xC7B9},{0xD4DF, 0xC7BA},{0xD4E8, 0xC7BB},{0xD4EC, 0xC7BC},{0xD4F0, 0xC7BD},
- {0xD4F8, 0xC7BE},{0xD4FB, 0xC7BF},{0xD4FD, 0xC7C0},{0xD504, 0xC7C1},{0xD508, 0xC7C2},{0xD50C, 0xC7C3},{0xD514, 0xC7C4},{0xD515, 0xC7C5},
- {0xD517, 0xC7C6},{0xD53C, 0xC7C7},{0xD53D, 0xC7C8},{0xD540, 0xC7C9},{0xD544, 0xC7CA},{0xD54C, 0xC7CB},{0xD54D, 0xC7CC},{0xD54F, 0xC7CD},
- {0xD551, 0xC7CE},{0xD558, 0xC7CF},{0xD559, 0xC7D0},{0xD55C, 0xC7D1},{0xD560, 0xC7D2},{0xD565, 0xC7D3},{0xD568, 0xC7D4},{0xD569, 0xC7D5},
- {0xD56B, 0xC7D6},{0xD56D, 0xC7D7},{0xD574, 0xC7D8},{0xD575, 0xC7D9},{0xD578, 0xC7DA},{0xD57C, 0xC7DB},{0xD584, 0xC7DC},{0xD585, 0xC7DD},
- {0xD587, 0xC7DE},{0xD588, 0xC7DF},{0xD589, 0xC7E0},{0xD590, 0xC7E1},{0xD5A5, 0xC7E2},{0xD5C8, 0xC7E3},{0xD5C9, 0xC7E4},{0xD5CC, 0xC7E5},
- {0xD5D0, 0xC7E6},{0xD5D2, 0xC7E7},{0xD5D8, 0xC7E8},{0xD5D9, 0xC7E9},{0xD5DB, 0xC7EA},{0xD5DD, 0xC7EB},{0xD5E4, 0xC7EC},{0xD5E5, 0xC7ED},
- {0xD5E8, 0xC7EE},{0xD5EC, 0xC7EF},{0xD5F4, 0xC7F0},{0xD5F5, 0xC7F1},{0xD5F7, 0xC7F2},{0xD5F9, 0xC7F3},{0xD600, 0xC7F4},{0xD601, 0xC7F5},
- {0xD604, 0xC7F6},{0xD608, 0xC7F7},{0xD610, 0xC7F8},{0xD611, 0xC7F9},{0xD613, 0xC7FA},{0xD614, 0xC7FB},{0xD615, 0xC7FC},{0xD61C, 0xC7FD},
- {0xD620, 0xC7FE},{0xD624, 0xC8A1},{0xD62D, 0xC8A2},{0xD638, 0xC8A3},{0xD639, 0xC8A4},{0xD63C, 0xC8A5},{0xD640, 0xC8A6},{0xD645, 0xC8A7},
- {0xD648, 0xC8A8},{0xD649, 0xC8A9},{0xD64B, 0xC8AA},{0xD64D, 0xC8AB},{0xD651, 0xC8AC},{0xD654, 0xC8AD},{0xD655, 0xC8AE},{0xD658, 0xC8AF},
- {0xD65C, 0xC8B0},{0xD667, 0xC8B1},{0xD669, 0xC8B2},{0xD670, 0xC8B3},{0xD671, 0xC8B4},{0xD674, 0xC8B5},{0xD683, 0xC8B6},{0xD685, 0xC8B7},
- {0xD68C, 0xC8B8},{0xD68D, 0xC8B9},{0xD690, 0xC8BA},{0xD694, 0xC8BB},{0xD69D, 0xC8BC},{0xD69F, 0xC8BD},{0xD6A1, 0xC8BE},{0xD6A8, 0xC8BF},
- {0xD6AC, 0xC8C0},{0xD6B0, 0xC8C1},{0xD6B9, 0xC8C2},{0xD6BB, 0xC8C3},{0xD6C4, 0xC8C4},{0xD6C5, 0xC8C5},{0xD6C8, 0xC8C6},{0xD6CC, 0xC8C7},
- {0xD6D1, 0xC8C8},{0xD6D4, 0xC8C9},{0xD6D7, 0xC8CA},{0xD6D9, 0xC8CB},{0xD6E0, 0xC8CC},{0xD6E4, 0xC8CD},{0xD6E8, 0xC8CE},{0xD6F0, 0xC8CF},
- {0xD6F5, 0xC8D0},{0xD6FC, 0xC8D1},{0xD6FD, 0xC8D2},{0xD700, 0xC8D3},{0xD704, 0xC8D4},{0xD711, 0xC8D5},{0xD718, 0xC8D6},{0xD719, 0xC8D7},
- {0xD71C, 0xC8D8},{0xD720, 0xC8D9},{0xD728, 0xC8DA},{0xD729, 0xC8DB},{0xD72B, 0xC8DC},{0xD72D, 0xC8DD},{0xD734, 0xC8DE},{0xD735, 0xC8DF},
- {0xD738, 0xC8E0},{0xD73C, 0xC8E1},{0xD744, 0xC8E2},{0xD747, 0xC8E3},{0xD749, 0xC8E4},{0xD750, 0xC8E5},{0xD751, 0xC8E6},{0xD754, 0xC8E7},
- {0xD756, 0xC8E8},{0xD757, 0xC8E9},{0xD758, 0xC8EA},{0xD759, 0xC8EB},{0xD760, 0xC8EC},{0xD761, 0xC8ED},{0xD763, 0xC8EE},{0xD765, 0xC8EF},
- {0xD769, 0xC8F0},{0xD76C, 0xC8F1},{0xD770, 0xC8F2},{0xD774, 0xC8F3},{0xD77C, 0xC8F4},{0xD77D, 0xC8F5},{0xD781, 0xC8F6},{0xD788, 0xC8F7},
- {0xD789, 0xC8F8},{0xD78C, 0xC8F9},{0xD790, 0xC8FA},{0xD798, 0xC8FB},{0xD799, 0xC8FC},{0xD79B, 0xC8FD},{0xD79D, 0xC8FE},{0xF900, 0xCBD0},
- {0xF901, 0xCBD6},{0xF902, 0xCBE7},{0xF903, 0xCDCF},{0xF904, 0xCDE8},{0xF905, 0xCEAD},{0xF906, 0xCFFB},{0xF907, 0xD0A2},{0xF908, 0xD0B8},
- {0xF909, 0xD0D0},{0xF90A, 0xD0DD},{0xF90B, 0xD1D4},{0xF90C, 0xD1D5},{0xF90D, 0xD1D8},{0xF90E, 0xD1DB},{0xF90F, 0xD1DC},{0xF910, 0xD1DD},
- {0xF911, 0xD1DE},{0xF912, 0xD1DF},{0xF913, 0xD1E0},{0xF914, 0xD1E2},{0xF915, 0xD1E3},{0xF916, 0xD1E4},{0xF917, 0xD1E5},{0xF918, 0xD1E6},
- {0xF919, 0xD1E8},{0xF91A, 0xD1E9},{0xF91B, 0xD1EA},{0xF91C, 0xD1EB},{0xF91D, 0xD1ED},{0xF91E, 0xD1EF},{0xF91F, 0xD1F0},{0xF920, 0xD1F2},
- {0xF921, 0xD1F6},{0xF922, 0xD1FA},{0xF923, 0xD1FC},{0xF924, 0xD1FD},{0xF925, 0xD1FE},{0xF926, 0xD2A2},{0xF927, 0xD2A3},{0xF928, 0xD2A7},
- {0xF929, 0xD2A8},{0xF92A, 0xD2A9},{0xF92B, 0xD2AA},{0xF92C, 0xD2AB},{0xF92D, 0xD2AD},{0xF92E, 0xD2B2},{0xF92F, 0xD2BE},{0xF930, 0xD2C2},
- {0xF931, 0xD2C3},{0xF932, 0xD2C4},{0xF933, 0xD2C6},{0xF934, 0xD2C7},{0xF935, 0xD2C8},{0xF936, 0xD2C9},{0xF937, 0xD2CA},{0xF938, 0xD2CB},
- {0xF939, 0xD2CD},{0xF93A, 0xD2CE},{0xF93B, 0xD2CF},{0xF93C, 0xD2D0},{0xF93D, 0xD2D1},{0xF93E, 0xD2D2},{0xF93F, 0xD2D3},{0xF940, 0xD2D4},
- {0xF941, 0xD2D5},{0xF942, 0xD2D6},{0xF943, 0xD2D7},{0xF944, 0xD2D9},{0xF945, 0xD2DA},{0xF946, 0xD2DE},{0xF947, 0xD2DF},{0xF948, 0xD2E1},
- {0xF949, 0xD2E2},{0xF94A, 0xD2E4},{0xF94B, 0xD2E5},{0xF94C, 0xD2E6},{0xF94D, 0xD2E7},{0xF94E, 0xD2E8},{0xF94F, 0xD2E9},{0xF950, 0xD2EA},
- {0xF951, 0xD2EB},{0xF952, 0xD2F0},{0xF953, 0xD2F1},{0xF954, 0xD2F2},{0xF955, 0xD2F3},{0xF956, 0xD2F4},{0xF957, 0xD2F5},{0xF958, 0xD2F7},
- {0xF959, 0xD2F8},{0xF95A, 0xD4E6},{0xF95B, 0xD4FC},{0xF95C, 0xD5A5},{0xF95D, 0xD5AB},{0xF95E, 0xD5AE},{0xF95F, 0xD6B8},{0xF960, 0xD6CD},
- {0xF961, 0xD7CB},{0xF962, 0xD7E4},{0xF963, 0xDBC5},{0xF964, 0xDBE4},{0xF965, 0xDCA5},{0xF966, 0xDDA5},{0xF967, 0xDDD5},{0xF968, 0xDDF4},
- {0xF969, 0xDEFC},{0xF96A, 0xDEFE},{0xF96B, 0xDFB3},{0xF96C, 0xDFE1},{0xF96D, 0xDFE8},{0xF96E, 0xE0F1},{0xF96F, 0xE1AD},{0xF970, 0xE1ED},
- {0xF971, 0xE3F5},{0xF972, 0xE4A1},{0xF973, 0xE4A9},{0xF974, 0xE5AE},{0xF975, 0xE5B1},{0xF976, 0xE5B2},{0xF977, 0xE5B9},{0xF978, 0xE5BB},
- {0xF979, 0xE5BC},{0xF97A, 0xE5C4},{0xF97B, 0xE5CE},{0xF97C, 0xE5D0},{0xF97D, 0xE5D2},{0xF97E, 0xE5D6},{0xF97F, 0xE5FA},{0xF980, 0xE5FB},
- {0xF981, 0xE5FC},{0xF982, 0xE5FE},{0xF983, 0xE6A1},{0xF984, 0xE6A4},{0xF985, 0xE6A7},{0xF986, 0xE6AD},{0xF987, 0xE6AF},{0xF988, 0xE6B0},
- {0xF989, 0xE6B1},{0xF98A, 0xE6B3},{0xF98B, 0xE6B7},{0xF98C, 0xE6B8},{0xF98D, 0xE6BC},{0xF98E, 0xE6C4},{0xF98F, 0xE6C6},{0xF990, 0xE6C7},
- {0xF991, 0xE6CA},{0xF992, 0xE6D2},{0xF993, 0xE6D6},{0xF994, 0xE6D9},{0xF995, 0xE6DC},{0xF996, 0xE6DF},{0xF997, 0xE6E1},{0xF998, 0xE6E4},
- {0xF999, 0xE6E5},{0xF99A, 0xE6E6},{0xF99B, 0xE6E8},{0xF99C, 0xE6EA},{0xF99D, 0xE6EB},{0xF99E, 0xE6EC},{0xF99F, 0xE6EF},{0xF9A0, 0xE6F1},
- {0xF9A1, 0xE6F2},{0xF9A2, 0xE6F5},{0xF9A3, 0xE6F6},{0xF9A4, 0xE6F7},{0xF9A5, 0xE6F9},{0xF9A6, 0xE7A1},{0xF9A7, 0xE7A6},{0xF9A8, 0xE7A9},
- {0xF9A9, 0xE7AA},{0xF9AA, 0xE7AC},{0xF9AB, 0xE7AD},{0xF9AC, 0xE7B0},{0xF9AD, 0xE7BF},{0xF9AE, 0xE7C1},{0xF9AF, 0xE7C6},{0xF9B0, 0xE7C7},
- {0xF9B1, 0xE7CB},{0xF9B2, 0xE7CD},{0xF9B3, 0xE7CF},{0xF9B4, 0xE7D0},{0xF9B5, 0xE7D3},{0xF9B6, 0xE7DF},{0xF9B7, 0xE7E4},{0xF9B8, 0xE7E6},
- {0xF9B9, 0xE7F7},{0xF9BA, 0xE8E7},{0xF9BB, 0xE8E8},{0xF9BC, 0xE8F0},{0xF9BD, 0xE8F1},{0xF9BE, 0xE8F7},{0xF9BF, 0xE8F9},{0xF9C0, 0xE8FB},
- {0xF9C1, 0xE8FE},{0xF9C2, 0xE9A7},{0xF9C3, 0xE9AC},{0xF9C4, 0xE9CC},{0xF9C5, 0xE9F7},{0xF9C6, 0xEAC1},{0xF9C7, 0xEAE5},{0xF9C8, 0xEAF4},
- {0xF9C9, 0xEAF7},{0xF9CA, 0xEAFC},{0xF9CB, 0xEAFE},{0xF9CC, 0xEBA4},{0xF9CD, 0xEBA7},{0xF9CE, 0xEBA9},{0xF9CF, 0xEBAA},{0xF9D0, 0xEBBA},
- {0xF9D1, 0xEBBB},{0xF9D2, 0xEBBD},{0xF9D3, 0xEBC1},{0xF9D4, 0xEBC2},{0xF9D5, 0xEBC6},{0xF9D6, 0xEBC7},{0xF9D7, 0xEBCC},{0xF9D8, 0xEBCF},
- {0xF9D9, 0xEBD0},{0xF9DA, 0xEBD1},{0xF9DB, 0xEBD2},{0xF9DC, 0xEBD8},{0xF9DD, 0xECA6},{0xF9DE, 0xECA7},{0xF9DF, 0xECAA},{0xF9E0, 0xECAF},
- {0xF9E1, 0xECB0},{0xF9E2, 0xECB1},{0xF9E3, 0xECB2},{0xF9E4, 0xECB5},{0xF9E5, 0xECB8},{0xF9E6, 0xECBA},{0xF9E7, 0xECC0},{0xF9E8, 0xECC1},
- {0xF9E9, 0xECC5},{0xF9EA, 0xECC6},{0xF9EB, 0xECC9},{0xF9EC, 0xECCA},{0xF9ED, 0xECD5},{0xF9EE, 0xECDD},{0xF9EF, 0xECDE},{0xF9F0, 0xECE1},
- {0xF9F1, 0xECE4},{0xF9F2, 0xECE7},{0xF9F3, 0xECE8},{0xF9F4, 0xECF7},{0xF9F5, 0xECF8},{0xF9F6, 0xECFA},{0xF9F7, 0xEDA1},{0xF9F8, 0xEDA2},
- {0xF9F9, 0xEDA3},{0xF9FA, 0xEDEE},{0xF9FB, 0xEEDB},{0xF9FC, 0xF2BD},{0xF9FD, 0xF2FA},{0xF9FE, 0xF3B1},{0xF9FF, 0xF4A7},{0xFA00, 0xF4EE},
- {0xFA01, 0xF6F4},{0xFA02, 0xF6F6},{0xFA03, 0xF7B8},{0xFA04, 0xF7C8},{0xFA05, 0xF7D3},{0xFA06, 0xF8DB},{0xFA07, 0xF8F0},{0xFA08, 0xFAA1},
- {0xFA09, 0xFAA2},{0xFA0A, 0xFAE6},{0xFA0B, 0xFCA9},{0xFF01, 0xA3A1},{0xFF02, 0xA3A2},{0xFF03, 0xA3A3},{0xFF04, 0xA3A4},{0xFF05, 0xA3A5},
- {0xFF06, 0xA3A6},{0xFF07, 0xA3A7},{0xFF08, 0xA3A8},{0xFF09, 0xA3A9},{0xFF0A, 0xA3AA},{0xFF0B, 0xA3AB},{0xFF0C, 0xA3AC},{0xFF0D, 0xA3AD},
- {0xFF0E, 0xA3AE},{0xFF0F, 0xA3AF},{0xFF10, 0xA3B0},{0xFF11, 0xA3B1},{0xFF12, 0xA3B2},{0xFF13, 0xA3B3},{0xFF14, 0xA3B4},{0xFF15, 0xA3B5},
- {0xFF16, 0xA3B6},{0xFF17, 0xA3B7},{0xFF18, 0xA3B8},{0xFF19, 0xA3B9},{0xFF1A, 0xA3BA},{0xFF1B, 0xA3BB},{0xFF1C, 0xA3BC},{0xFF1D, 0xA3BD},
- {0xFF1E, 0xA3BE},{0xFF1F, 0xA3BF},{0xFF20, 0xA3C0},{0xFF21, 0xA3C1},{0xFF22, 0xA3C2},{0xFF23, 0xA3C3},{0xFF24, 0xA3C4},{0xFF25, 0xA3C5},
- {0xFF26, 0xA3C6},{0xFF27, 0xA3C7},{0xFF28, 0xA3C8},{0xFF29, 0xA3C9},{0xFF2A, 0xA3CA},{0xFF2B, 0xA3CB},{0xFF2C, 0xA3CC},{0xFF2D, 0xA3CD},
- {0xFF2E, 0xA3CE},{0xFF2F, 0xA3CF},{0xFF30, 0xA3D0},{0xFF31, 0xA3D1},{0xFF32, 0xA3D2},{0xFF33, 0xA3D3},{0xFF34, 0xA3D4},{0xFF35, 0xA3D5},
- {0xFF36, 0xA3D6},{0xFF37, 0xA3D7},{0xFF38, 0xA3D8},{0xFF39, 0xA3D9},{0xFF3A, 0xA3DA},{0xFF3B, 0xA3DB},{0xFF3C, 0xA1AC},{0xFF3D, 0xA3DD},
- {0xFF3E, 0xA3DE},{0xFF3F, 0xA3DF},{0xFF40, 0xA3E0},{0xFF41, 0xA3E1},{0xFF42, 0xA3E2},{0xFF43, 0xA3E3},{0xFF44, 0xA3E4},{0xFF45, 0xA3E5},
- {0xFF46, 0xA3E6},{0xFF47, 0xA3E7},{0xFF48, 0xA3E8},{0xFF49, 0xA3E9},{0xFF4A, 0xA3EA},{0xFF4B, 0xA3EB},{0xFF4C, 0xA3EC},{0xFF4D, 0xA3ED},
- {0xFF4E, 0xA3EE},{0xFF4F, 0xA3EF},{0xFF50, 0xA3F0},{0xFF51, 0xA3F1},{0xFF52, 0xA3F2},{0xFF53, 0xA3F3},{0xFF54, 0xA3F4},{0xFF55, 0xA3F5},
- {0xFF56, 0xA3F6},{0xFF57, 0xA3F7},{0xFF58, 0xA3F8},{0xFF59, 0xA3F9},{0xFF5A, 0xA3FA},{0xFF5B, 0xA3FB},{0xFF5C, 0xA3FC},{0xFF5D, 0xA3FD},
- {0xFF5E, 0xA2A6},{0xFFE0, 0xA1CB},{0xFFE1, 0xA1CC},{0xFFE2, 0xA1FE},{0xFFE3, 0xA3FE},{0xFFE5, 0xA1CD},{0xFFE6, 0xA3DC}
-};
diff --git a/vcl/source/fontsubset/xlat.cxx b/vcl/source/fontsubset/xlat.cxx
index 27b2f517f4a1..c4699ec5a81a 100644
--- a/vcl/source/fontsubset/xlat.cxx
+++ b/vcl/source/fontsubset/xlat.cxx
@@ -25,163 +25,196 @@
*
************************************************************************/
-/*
- *
- * Data translation from Unicode to MS encodings
- * If the host system provides this functionality
- * this file should be rewritten to use it and
- * the large translation arrays should be removed
- *
- * Author: Alexander Gelfenbain
- *
- */
+#include "rtl/textcvt.h"
+#include <tools/debug.hxx>
-#include "xlat.hxx"
+namespace { // anonymous namespace
-namespace vcl
-{
+// ====================================================================
-// TODO: use generic encoding converters and get rid of the include files below
-#include "u2big5.inc"
-#include "u2johab.inc"
-#include "u2prc.inc"
-#include "u2shiftjis.inc"
-#include "u2wansung.inc"
+#define MAX_CVT_SELECT 6
-#define MISSING_CODE 0
+class ConverterCache
+{
+public:
+ explicit ConverterCache( void );
+ ~ConverterCache( void );
+ sal_uInt16 convertOne( int nSelect, sal_Unicode );
+ void convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount );
+protected:
+ void ensureConverter( int nSelect );
+private:
+ rtl_UnicodeToTextConverter maConverterCache[ MAX_CVT_SELECT+1 ];
+ rtl_UnicodeToTextContext maContexts[ MAX_CVT_SELECT+1 ];
+};
+
+// ====================================================================
+
+ConverterCache::ConverterCache( void)
+{
+ for( int i = 0; i <= MAX_CVT_SELECT; ++i)
+ {
+ maConverterCache[i] = NULL;
+ maContexts[i] = NULL;
+ }
+}
-static sal_uInt16 xlat(sal_uInt16pair p[], sal_uInt32 n, sal_uInt16 src)
+// --------------------------------------------------------------------
+
+ConverterCache::~ConverterCache( void)
{
- int l = 0, r = n - 1, i;
- sal_uInt16 t, res = MISSING_CODE;
+ for( int i = 0; i <= MAX_CVT_SELECT; ++i)
+ {
+ if( !maContexts[i] )
+ continue;
+ rtl_destroyUnicodeToTextContext( maConverterCache[i], maContexts[i] );
+ rtl_destroyUnicodeToTextConverter( maConverterCache[i] );
+ }
+}
- do {
- i = (l + r) >> 1;
- t = p[i].s;
- if (src >= t) l = i + 1;
- if (src <= t) r = i - 1;
- } while (l <= r);
+// --------------------------------------------------------------------
- if (l - r == 2) {
- res = p[l-1].d;
+void ConverterCache::ensureConverter( int nSelect )
+{
+ // DBG_ASSERT( (2<=nSelect) && (nSelect<=MAX_CVT_SELECT)), "invalid XLAT.Converter requested" );
+ rtl_UnicodeToTextContext aContext = maContexts[ nSelect ];
+ if( !aContext )
+ {
+ rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE;
+ switch( nSelect )
+ {
+ default: nSelect = 1; // fall through to unicode recoding
+ case 1: eRecodeFrom = RTL_TEXTENCODING_UNICODE; break;
+ case 2: eRecodeFrom = RTL_TEXTENCODING_SHIFT_JIS; break;
+ case 3: eRecodeFrom = RTL_TEXTENCODING_GB_2312; break;
+ case 4: eRecodeFrom = RTL_TEXTENCODING_BIG5; break;
+ case 5: eRecodeFrom = RTL_TEXTENCODING_MS_949; break;
+ case 6: eRecodeFrom = RTL_TEXTENCODING_MS_1361; break;
+ }
+ rtl_UnicodeToTextConverter aRecodeConverter = rtl_createUnicodeToTextConverter( eRecodeFrom );
+ maConverterCache[ nSelect ] = aRecodeConverter;
+
+ aContext = rtl_createUnicodeToTextContext( aRecodeConverter );
+ maContexts[ nSelect ] = aContext;
}
- return res;
+ rtl_resetUnicodeToTextContext( maConverterCache[ nSelect ], aContext );
+}
+
+// --------------------------------------------------------------------
+
+sal_uInt16 ConverterCache::convertOne( int nSelect, sal_Unicode aChar )
+{
+ ensureConverter( nSelect );
+
+ sal_Unicode aUCS2Char = aChar;
+ sal_Char aTempArray[8];
+ sal_Size nTempSize;
+ sal_uInt32 nCvtInfo;
+
+ // TODO: use direct unicode->mbcs converter should there ever be one
+ int nCodeLen = rtl_convertUnicodeToText(
+ maConverterCache[ nSelect ], maContexts[ nSelect ],
+ &aUCS2Char, 1, aTempArray, sizeof(aTempArray),
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_0,
+ &nCvtInfo, &nTempSize );
+
+ sal_uInt16 aCode = aTempArray[0];
+ for( int i = 1; i < nCodeLen; ++i )
+ aCode = (aCode << 8) + (aTempArray[i] & 0xFF);
+ return aCode;
+}
+
+// --------------------------------------------------------------------
+
+void ConverterCache::convertStr( int nSelect, const sal_Unicode* pSrc, sal_uInt16* pDst, int nCount )
+{
+ ensureConverter( nSelect );
+
+ for( int n = 0; n < nCount; ++n )
+ {
+ sal_Unicode aUCS2Char = pSrc[n];
+
+ sal_Char aTempArray[8];
+ sal_Size nTempSize;
+ sal_uInt32 nCvtInfo;
+
+ // assume that non-unicode-fonts do not support codepoints >U+FFFF
+ // TODO: use direct unicode->mbcs converter should there ever be one
+ int nCodeLen = rtl_convertUnicodeToText(
+ maConverterCache[ nSelect ], maContexts[ nSelect ],
+ &aUCS2Char, 1, aTempArray, sizeof(aTempArray),
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_0,
+ &nCvtInfo, &nTempSize );
+
+ sal_uInt16 aCode = aTempArray[0];
+ for( int i = 1; i < nCodeLen; ++i )
+ aCode = (aCode << 8) + (aTempArray[i] & 0xFF);
+ pDst[n] = aCode;
+ }
}
+} // anonymous namespace
+
+// ====================================================================
+
+#include "xlat.hxx"
+
+namespace vcl
+{
+
+static ConverterCache aCC;
+
sal_uInt16 TranslateChar12(sal_uInt16 src)
{
- return xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), src);
+ return aCC.convertOne( 2, src);
}
sal_uInt16 TranslateChar13(sal_uInt16 src)
{
- return xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), src);
+ return aCC.convertOne( 3, src);
}
sal_uInt16 TranslateChar14(sal_uInt16 src)
{
- return xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), src);
+ return aCC.convertOne( 4, src);
}
sal_uInt16 TranslateChar15(sal_uInt16 src)
{
- return xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), src);
+ return aCC.convertOne( 5, src);
}
sal_uInt16 TranslateChar16(sal_uInt16 src)
{
- return xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_5[0]), src);
+ return aCC.convertOne( 6, src);
}
void TranslateString12(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_2, sizeof(xlat_1_2) / sizeof(xlat_1_2[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 2, src, dst, n);
}
void TranslateString13(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_3, sizeof(xlat_1_3) / sizeof(xlat_1_3[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 3, src, dst, n);
}
void TranslateString14(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_4, sizeof(xlat_1_4) / sizeof(xlat_1_4[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 4, src, dst, n);
}
void TranslateString15(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_5, sizeof(xlat_1_5) / sizeof(xlat_1_5[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 5, src, dst, n);
}
void TranslateString16(sal_uInt16 *src, sal_uInt16 *dst, sal_uInt32 n)
{
- sal_uInt32 i;
- sal_uInt16 lastS, lastD;
-
- if (n == 0) return;
-
- lastD = dst[0] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[0]);
-
- for (i=1; i < n; i++) {
- if (src[i] == lastS) {
- dst[i] = lastD;
- } else {
- lastD = dst[i] = xlat(xlat_1_6, sizeof(xlat_1_6) / sizeof(xlat_1_6[0]), lastS = src[i]);
- }
- }
+ aCC.convertStr( 6, src, dst, n);
}
} // namespace vcl
diff --git a/vcl/source/fontsubset/xlat.hxx b/vcl/source/fontsubset/xlat.hxx
index c3bd076f6fbd..2e6d1721776b 100644
--- a/vcl/source/fontsubset/xlat.hxx
+++ b/vcl/source/fontsubset/xlat.hxx
@@ -31,7 +31,7 @@
#ifndef __XLAT_H
#define __XLAT_H
-#include "sft.hxx"
+//####include "sft.hxx"
namespace vcl
{
diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx
index 3a29e6d56095..6483c8292df7 100644
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@ -1403,6 +1403,436 @@ void GDIMetaFile::Rotate( long nAngle10 )
// ------------------------------------------------------------------------
+static void ImplActionBounds( Rectangle& o_rOutBounds,
+ const Rectangle& i_rInBounds,
+ const std::vector<Rectangle>& i_rClipStack )
+{
+ Rectangle aBounds( i_rInBounds );
+ if( ! i_rInBounds.IsEmpty() && ! i_rClipStack.empty() && ! i_rClipStack.back().IsEmpty() )
+ aBounds.Intersection( i_rClipStack.back() );
+ if( ! aBounds.IsEmpty() )
+ {
+ if( ! o_rOutBounds.IsEmpty() )
+ o_rOutBounds.Union( aBounds );
+ else
+ o_rOutBounds = aBounds;
+ }
+}
+
+Rectangle GDIMetaFile::GetBoundRect( OutputDevice& i_rReference )
+{
+ GDIMetaFile aMtf;
+ VirtualDevice aMapVDev( i_rReference );
+
+ aMapVDev.EnableOutput( FALSE );
+ aMapVDev.SetMapMode( GetPrefMapMode() );
+
+ std::vector<Rectangle> aClipStack( 1, Rectangle() );
+ std::vector<USHORT> aPushFlagStack;
+
+ Rectangle aBound;
+
+ for( MetaAction* pAction = (MetaAction*) First(); pAction; pAction = (MetaAction*) Next() )
+ {
+ const USHORT nActionType = pAction->GetType();
+
+ switch( nActionType )
+ {
+ case( META_PIXEL_ACTION ):
+ {
+ MetaPixelAction* pAct = (MetaPixelAction*) pAction;
+ ImplActionBounds( aBound,
+ Rectangle( aMapVDev.LogicToLogic( pAct->GetPoint(), aMapVDev.GetMapMode(), GetPrefMapMode() ),
+ aMapVDev.PixelToLogic( Size( 1, 1 ), GetPrefMapMode() ) ),
+ aClipStack );
+ }
+ break;
+
+ case( META_POINT_ACTION ):
+ {
+ MetaPointAction* pAct = (MetaPointAction*) pAction;
+ ImplActionBounds( aBound,
+ Rectangle( aMapVDev.LogicToLogic( pAct->GetPoint(), aMapVDev.GetMapMode(), GetPrefMapMode() ),
+ aMapVDev.PixelToLogic( Size( 1, 1 ), GetPrefMapMode() ) ),
+ aClipStack );
+ }
+ break;
+
+ case( META_LINE_ACTION ):
+ {
+ MetaLineAction* pAct = (MetaLineAction*) pAction;
+ Point aP1( pAct->GetStartPoint() ), aP2( pAct->GetEndPoint() );
+ Rectangle aRect( aP1, aP2 );
+ aRect.Justify();
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_RECT_ACTION ):
+ {
+ MetaRectAction* pAct = (MetaRectAction*) pAction;
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_ROUNDRECT_ACTION ):
+ {
+ MetaRoundRectAction* pAct = (MetaRoundRectAction*) pAction;
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_ELLIPSE_ACTION ):
+ {
+ MetaEllipseAction* pAct = (MetaEllipseAction*) pAction;
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_ARC_ACTION ):
+ {
+ MetaArcAction* pAct = (MetaArcAction*) pAction;
+ // FIXME: this is imprecise
+ // e.g. for small arcs the whole rectangle is WAY too large
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_PIE_ACTION ):
+ {
+ MetaPieAction* pAct = (MetaPieAction*) pAction;
+ // FIXME: this is imprecise
+ // e.g. for small arcs the whole rectangle is WAY too large
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_CHORD_ACTION ):
+ {
+ MetaChordAction* pAct = (MetaChordAction*) pAction;
+ // FIXME: this is imprecise
+ // e.g. for small arcs the whole rectangle is WAY too large
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_POLYLINE_ACTION ):
+ {
+ MetaPolyLineAction* pAct = (MetaPolyLineAction*) pAction;
+ Rectangle aRect( pAct->GetPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_POLYGON_ACTION ):
+ {
+ MetaPolygonAction* pAct = (MetaPolygonAction*) pAction;
+ Rectangle aRect( pAct->GetPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_POLYPOLYGON_ACTION ):
+ {
+ MetaPolyPolygonAction* pAct = (MetaPolyPolygonAction*) pAction;
+ Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_TEXT_ACTION ):
+ {
+ MetaTextAction* pAct = (MetaTextAction*) pAction;
+ Rectangle aRect;
+ // hdu said base = index
+ aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen() );
+ Point aPt( pAct->GetPoint() );
+ aRect.Move( aPt.X(), aPt.Y() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_TEXTARRAY_ACTION ):
+ {
+ MetaTextArrayAction* pAct = (MetaTextArrayAction*) pAction;
+ Rectangle aRect;
+ // hdu said base = index
+ aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen(),
+ 0, pAct->GetDXArray() );
+ Point aPt( pAct->GetPoint() );
+ aRect.Move( aPt.X(), aPt.Y() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_STRETCHTEXT_ACTION ):
+ {
+ MetaStretchTextAction* pAct = (MetaStretchTextAction*) pAction;
+ Rectangle aRect;
+ // hdu said base = index
+ aMapVDev.GetTextBoundRect( aRect, pAct->GetText(), pAct->GetIndex(), pAct->GetIndex(), pAct->GetLen(),
+ pAct->GetWidth(), NULL );
+ Point aPt( pAct->GetPoint() );
+ aRect.Move( aPt.X(), aPt.Y() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_TEXTLINE_ACTION ):
+ {
+ MetaTextLineAction* pAct = (MetaTextLineAction*) pAction;
+ // measure a test string to get ascend and descent right
+ static const sal_Unicode pStr[] = { 0xc4, 0x67, 0 };
+ String aStr( pStr );
+
+ Rectangle aRect;
+ aMapVDev.GetTextBoundRect( aRect, aStr, 0, 0, aStr.Len(), 0, NULL );
+ Point aPt( pAct->GetStartPoint() );
+ aRect.Move( aPt.X(), aPt.Y() );
+ aRect.Right() = aRect.Left() + pAct->GetWidth();
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_BMPSCALE_ACTION ):
+ {
+ MetaBmpScaleAction* pAct = (MetaBmpScaleAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), pAct->GetSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_BMPSCALEPART_ACTION ):
+ {
+ MetaBmpScalePartAction* pAct = (MetaBmpScalePartAction*) pAction;
+ Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_BMPEXSCALE_ACTION ):
+ {
+ MetaBmpExScaleAction* pAct = (MetaBmpExScaleAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), pAct->GetSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_BMPEXSCALEPART_ACTION ):
+ {
+ MetaBmpExScalePartAction* pAct = (MetaBmpExScalePartAction*) pAction;
+ Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_GRADIENT_ACTION ):
+ {
+ MetaGradientAction* pAct = (MetaGradientAction*) pAction;
+ Rectangle aRect( pAct->GetRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_GRADIENTEX_ACTION ):
+ {
+ MetaGradientExAction* pAct = (MetaGradientExAction*) pAction;
+ Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_COMMENT_ACTION ):
+ {
+ // nothing to do
+ };
+ break;
+
+ case( META_HATCH_ACTION ):
+ {
+ MetaHatchAction* pAct = (MetaHatchAction*) pAction;
+ Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_TRANSPARENT_ACTION ):
+ {
+ MetaTransparentAction* pAct = (MetaTransparentAction*) pAction;
+ Rectangle aRect( pAct->GetPolyPolygon().GetBoundRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_FLOATTRANSPARENT_ACTION ):
+ {
+ MetaFloatTransparentAction* pAct = (MetaFloatTransparentAction*) pAction;
+ GDIMetaFile aTransMtf( pAct->GetGDIMetaFile() );
+ // get the bound rect of the contained metafile
+ Rectangle aRect( aTransMtf.GetBoundRect( i_rReference ) );
+ // scale the rect now on the assumption that the correct top left of the metafile
+ // (not its bounds !) is (0,0)
+ Size aPSize( aTransMtf.GetPrefSize() );
+ aPSize = aMapVDev.LogicToLogic( aPSize, aTransMtf.GetPrefMapMode(), aMapVDev.GetMapMode() );
+ Size aActSize( pAct->GetSize() );
+ double fX = double(aActSize.Width())/double(aPSize.Width());
+ double fY = double(aActSize.Height())/double(aPSize.Height());
+ aRect.Left() = long(double(aRect.Left())*fX);
+ aRect.Right() = long(double(aRect.Right())*fX);
+ aRect.Top() = long(double(aRect.Top())*fY);
+ aRect.Bottom() = long(double(aRect.Bottom())*fY);
+
+ // transform the rect to current VDev state
+ aRect = aMapVDev.LogicToLogic( aRect, aTransMtf.GetPrefMapMode(), aMapVDev.GetMapMode() );
+
+ ImplActionBounds( aBound, aRect, aClipStack );
+ }
+ break;
+
+ case( META_EPS_ACTION ):
+ {
+ MetaEPSAction* pAct = (MetaEPSAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), pAct->GetSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_CLIPREGION_ACTION ):
+ {
+ MetaClipRegionAction* pAct = (MetaClipRegionAction*) pAction;
+ if( pAct->IsClipping() )
+ aClipStack.back() = aMapVDev.LogicToLogic( pAct->GetRegion().GetBoundRect(), aMapVDev.GetMapMode(), GetPrefMapMode() );
+ else
+ aClipStack.back() = Rectangle();
+ }
+ break;
+
+ case( META_ISECTRECTCLIPREGION_ACTION ):
+ {
+ MetaISectRectClipRegionAction* pAct = (MetaISectRectClipRegionAction*) pAction;
+ Rectangle aRect( aMapVDev.LogicToLogic( pAct->GetRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ) );
+ if( aClipStack.back().IsEmpty() )
+ aClipStack.back() = aRect;
+ else
+ aClipStack.back().Intersection( aRect );
+ }
+ break;
+
+ case( META_ISECTREGIONCLIPREGION_ACTION ):
+ {
+ MetaISectRegionClipRegionAction* pAct = (MetaISectRegionClipRegionAction*) pAction;
+ Rectangle aRect( aMapVDev.LogicToLogic( pAct->GetRegion().GetBoundRect(), aMapVDev.GetMapMode(), GetPrefMapMode() ) );
+ if( aClipStack.back().IsEmpty() )
+ aClipStack.back() = aRect;
+ else
+ aClipStack.back().Intersection( aRect );
+ }
+ break;
+
+ case( META_BMP_ACTION ):
+ {
+ MetaBmpAction* pAct = (MetaBmpAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmap().GetSizePixel() ) );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_BMPEX_ACTION ):
+ {
+ MetaBmpExAction* pAct = (MetaBmpExAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmapEx().GetSizePixel() ) );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_MASK_ACTION ):
+ {
+ MetaMaskAction* pAct = (MetaMaskAction*) pAction;
+ Rectangle aRect( pAct->GetPoint(), aMapVDev.PixelToLogic( pAct->GetBitmap().GetSizePixel() ) );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_MASKSCALE_ACTION ):
+ {
+ MetaMaskScalePartAction* pAct = (MetaMaskScalePartAction*) pAction;
+ Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_MASKSCALEPART_ACTION ):
+ {
+ MetaMaskScalePartAction* pAct = (MetaMaskScalePartAction*) pAction;
+ Rectangle aRect( pAct->GetDestPoint(), pAct->GetDestSize() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_WALLPAPER_ACTION ):
+ {
+ MetaWallpaperAction* pAct = (MetaWallpaperAction*) pAction;
+ Rectangle aRect( pAct->GetRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_TEXTRECT_ACTION ):
+ {
+ MetaTextRectAction* pAct = (MetaTextRectAction*) pAction;
+ Rectangle aRect( pAct->GetRect() );
+ ImplActionBounds( aBound, aMapVDev.LogicToLogic( aRect, aMapVDev.GetMapMode(), GetPrefMapMode() ), aClipStack );
+ }
+ break;
+
+ case( META_MOVECLIPREGION_ACTION ):
+ {
+ MetaMoveClipRegionAction* pAct = (MetaMoveClipRegionAction*) pAction;
+ if( ! aClipStack.back().IsEmpty() )
+ {
+ Size aDelta( pAct->GetHorzMove(), pAct->GetVertMove() );
+ aDelta = aMapVDev.LogicToLogic( aDelta, aMapVDev.GetMapMode(), GetPrefMapMode() );
+ aClipStack.back().Move( aDelta.Width(), aDelta.Width() );
+ }
+ }
+ break;
+
+ default:
+ {
+ pAction->Execute( &aMapVDev );
+
+ if( nActionType == META_PUSH_ACTION )
+ {
+ MetaPushAction* pAct = (MetaPushAction*) pAction;
+ aPushFlagStack.push_back( pAct->GetFlags() );
+ if( (aPushFlagStack.back() & PUSH_CLIPREGION) != 0 )
+ {
+ Rectangle aRect( aClipStack.back() );
+ aClipStack.push_back( aRect );
+ }
+ }
+ else if( nActionType == META_POP_ACTION )
+ {
+ // sanity check
+ if( ! aPushFlagStack.empty() )
+ {
+ if( (aPushFlagStack.back() & PUSH_CLIPREGION) != 0 )
+ {
+ if( aClipStack.size() > 1 )
+ aClipStack.pop_back();
+ }
+ aPushFlagStack.pop_back();
+ }
+ }
+ }
+ break;
+ }
+ }
+ return aBound;
+}
+
+// ------------------------------------------------------------------------
+
Color GDIMetaFile::ImplColAdjustFnc( const Color& rColor, const void* pColParam )
{
return Color( rColor.GetTransparency(),
diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx
index dfa155e29eae..76e94e091ff7 100644
--- a/vcl/source/gdi/graph.cxx
+++ b/vcl/source/gdi/graph.cxx
@@ -430,44 +430,16 @@ BOOL Graphic::IsAnimated() const
// ------------------------------------------------------------------------
-Bitmap Graphic::GetBitmap() const
+Bitmap Graphic::GetBitmap(const GraphicConversionParameters& rParameters) const
{
- return GetBitmap( NULL );
+ return mpImpGraphic->ImplGetBitmap(rParameters);
}
// ------------------------------------------------------------------------
-BitmapEx Graphic::GetBitmapEx() const
+BitmapEx Graphic::GetBitmapEx(const GraphicConversionParameters& rParameters) const
{
- return GetBitmapEx( NULL );
-}
-
-// ------------------------------------------------------------------------
-
-Bitmap Graphic::GetBitmap( const Size* pSizePixel ) const
-{
- return mpImpGraphic->ImplGetBitmap( pSizePixel, FALSE );
-}
-
-// ------------------------------------------------------------------------
-
-BitmapEx Graphic::GetBitmapEx( const Size* pSizePixel ) const
-{
- return mpImpGraphic->ImplGetBitmapEx( pSizePixel, FALSE );
-}
-
-// ------------------------------------------------------------------------
-
-Bitmap Graphic::GetUnlimitedBitmap( const Size* pSizePixel ) const
-{
- return mpImpGraphic->ImplGetBitmap( pSizePixel, TRUE ) ;
-}
-
-// ------------------------------------------------------------------------
-
-BitmapEx Graphic::GetUnlimitedBitmapEx( const Size* pSizePixel ) const
-{
- return mpImpGraphic->ImplGetBitmapEx( pSizePixel, TRUE ) ;
+ return mpImpGraphic->ImplGetBitmapEx(rParameters);
}
// ------------------------------------------------------------------------
@@ -553,7 +525,7 @@ Size Graphic::GetSizePixel( const OutputDevice* pRefDevice ) const
Size aRet;
if( GRAPHIC_BITMAP == mpImpGraphic->ImplGetType() )
- aRet = mpImpGraphic->ImplGetBitmapEx( NULL, FALSE ).GetSizePixel();
+ aRet = mpImpGraphic->ImplGetBitmapEx(GraphicConversionParameters()).GetSizePixel();
else
aRet = ( pRefDevice ? pRefDevice : Application::GetDefaultDevice() )->LogicToPixel( GetPrefSize(), GetPrefMapMode() );
@@ -803,7 +775,7 @@ void Graphic::SetLink( const GfxLink& rGfxLink )
// ------------------------------------------------------------------------
-GfxLink Graphic::GetLink()
+GfxLink Graphic::GetLink() const
{
return mpImpGraphic->ImplGetLink();
}
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index a67d6fa7feac..d73f35bef962 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -483,7 +483,7 @@ BOOL ImpGraphic::ImplIsAnimated() const
// ------------------------------------------------------------------------
-Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) const
+Bitmap ImpGraphic::ImplGetBitmap(const GraphicConversionParameters& rParameters) const
{
Bitmap aRetBmp;
@@ -494,8 +494,8 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons
aRetBmp = rRetBmpEx.GetBitmap( &aReplaceColor );
- if( pSizePixel )
- aRetBmp.Scale( *pSizePixel );
+ if(rParameters.getSizePixel().Width() || rParameters.getSizePixel().Height())
+ aRetBmp.Scale(rParameters.getSizePixel());
}
else if( ( meType != GRAPHIC_DEFAULT ) && ImplIsSupportedGraphic() )
{
@@ -508,16 +508,18 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons
Size aDrawSize( aVDev.LogicToPixel( maMetaFile.GetPrefSize(), maMetaFile.GetPrefMapMode() ) );
Size aSizePix( labs( aBRPix.X() - aTLPix.X() ) + 1, labs( aBRPix.Y() - aTLPix.Y() ) + 1 );
- if( pSizePixel && aSizePix.Width() && aSizePix.Height() )
+ if(rParameters.getSizePixel().Width() && rParameters.getSizePixel().Height())
{
- aDrawSize.Width() = FRound( (double) pSizePixel->Width() * (double) aDrawSize.Width() / (double) aSizePix.Width() );
- aDrawSize.Height() = FRound( (double) pSizePixel->Height() * (double) aDrawSize.Height() / (double) aSizePix.Height() );
+ aDrawSize.Width() = FRound((double)rParameters.getSizePixel().Width() *
+ (double)aDrawSize.Width() / (double)aSizePix.Width());
+ aDrawSize.Height() = FRound((double)rParameters.getSizePixel().Height() *
+ (double)aDrawSize.Height() / (double)aSizePix.Height());
- aSizePix = *pSizePixel;
+ aSizePix = rParameters.getSizePixel();
}
- if( aSizePix.Width() && aSizePix.Height() && !bUnlimited &&
- ( aSizePix.Width() > GRAPHIC_MTFTOBMP_MAXEXT || aSizePix.Height() > GRAPHIC_MTFTOBMP_MAXEXT ) )
+ if( aSizePix.Width() && aSizePix.Height() && !rParameters.getUnlimitedSize()
+ && (aSizePix.Width() > GRAPHIC_MTFTOBMP_MAXEXT || aSizePix.Height() > GRAPHIC_MTFTOBMP_MAXEXT))
{
const Size aOldSizePix( aSizePix );
double fWH = (double) aSizePix.Width() / aSizePix.Height();
@@ -533,6 +535,16 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons
if( aVDev.SetOutputSizePixel( aSizePix ) )
{
+ if(rParameters.getAntiAliase())
+ {
+ aVDev.SetAntialiasing(aVDev.GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW);
+ }
+
+ if(rParameters.getSnapHorVerLines())
+ {
+ aVDev.SetAntialiasing(aVDev.GetAntialiasing() | ANTIALIASING_PIXELSNAPHAIRLINE);
+ }
+
ImplDraw( &aVDev, aNullPt, aDrawSize );
aRetBmp = aVDev.GetBitmap( aNullPt, aVDev.GetOutputSizePixel() );
}
@@ -549,7 +561,7 @@ Bitmap ImpGraphic::ImplGetBitmap( const Size* pSizePixel, BOOL bUnlimited ) cons
// ------------------------------------------------------------------------
-BitmapEx ImpGraphic::ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited ) const
+BitmapEx ImpGraphic::ImplGetBitmapEx(const GraphicConversionParameters& rParameters) const
{
BitmapEx aRetBmpEx;
@@ -557,13 +569,13 @@ BitmapEx ImpGraphic::ImplGetBitmapEx( const Size* pSizePixel, BOOL bUnlimited )
{
aRetBmpEx = ( mpAnimation ? mpAnimation->GetBitmapEx() : maEx );
- if( pSizePixel )
- aRetBmpEx.Scale( *pSizePixel );
+ if(rParameters.getSizePixel().Width() || rParameters.getSizePixel().Height())
+ aRetBmpEx.Scale(rParameters.getSizePixel());
}
else if( ( meType != GRAPHIC_DEFAULT ) && ImplIsSupportedGraphic() )
{
const ImpGraphic aMonoMask( maMetaFile.GetMonochromeMtf( COL_BLACK ) );
- aRetBmpEx = BitmapEx( ImplGetBitmap( pSizePixel, bUnlimited ), aMonoMask.ImplGetBitmap( pSizePixel, bUnlimited ) );
+ aRetBmpEx = BitmapEx(ImplGetBitmap(rParameters), aMonoMask.ImplGetBitmap(rParameters));
}
return aRetBmpEx;
diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx
index 9e1378f22326..039041826124 100644
--- a/vcl/source/gdi/impimagetree.cxx
+++ b/vcl/source/gdi/impimagetree.cxx
@@ -189,6 +189,17 @@ void ImplImageTree::resetZips() {
m_zips.clear();
{
rtl::OUString url(
+ RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/program/edition/images.zip"));
+ rtl::Bootstrap::expandMacros(url);
+ INetURLObject u(url);
+ OSL_ASSERT(!u.HasError());
+ m_zips.push_back(
+ std::make_pair(
+ u.GetMainURL(INetURLObject::NO_DECODE),
+ css::uno::Reference< css::container::XNameAccess >()));
+ }
+ {
+ rtl::OUString url(
RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR/share/config"));
rtl::Bootstrap::expandMacros(url);
INetURLObject u(url);
diff --git a/vcl/source/gdi/makefile.mk b/vcl/source/gdi/makefile.mk
index 977e5386fe97..a09ae92dcb5e 100644
--- a/vcl/source/gdi/makefile.mk
+++ b/vcl/source/gdi/makefile.mk
@@ -45,6 +45,9 @@ TARGET=gdi
.IF "$(COM)"=="ICC"
CDEFS+=-D_STD_NO_NAMESPACE -D_VOS_NO_NAMESPACE -D_UNO_NO_NAMESPACE
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CDEFS+=-DENABLE_GRAPHITE
+.ENDIF
# --- Files --------------------------------------------------------
@@ -137,6 +140,7 @@ EXCEPTIONSFILES= $(SLO)$/salmisc.obj \
$(SLO)$/pngwrite.obj \
$(SLO)$/virdev.obj \
$(SLO)$/impprn.obj \
+ $(SLO)$/gdimtf.obj \
$(SLO)$/graphictools.obj
diff --git a/vcl/source/gdi/metric.cxx b/vcl/source/gdi/metric.cxx
index 49e4dc080d8f..c387bd158306 100644
--- a/vcl/source/gdi/metric.cxx
+++ b/vcl/source/gdi/metric.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: metric.cxx,v $
- * $Revision: 1.23 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -236,50 +233,80 @@ BOOL FontMetric::operator==( const FontMetric& rMetric ) const
// =======================================================================
-ImplFontCharMap::ImplFontCharMap( int nRangePairs,
- const sal_uInt32* pRangeCodes, const int* pStartGlyphs )
-: mpRangeCodes( pRangeCodes ),
- mpStartGlyphs( pStartGlyphs ),
- mnRangeCount( nRangePairs ),
- mnCharCount( 0 ),
- mnRefCount( 1 )
+CmapResult::CmapResult( bool bSymbolic,
+ const sal_uInt32* pRangeCodes, int nRangeCount,
+ const int* pStartGlyphs, const USHORT* pExtraGlyphIds )
+: mpRangeCodes( pRangeCodes)
+, mpStartGlyphs( pStartGlyphs)
+, mpGlyphIds( pExtraGlyphIds)
+, mnRangeCount( nRangeCount)
+, mbSymbolic( bSymbolic)
+, mbRecoded( false)
+{}
+
+// =======================================================================
+
+ImplFontCharMap::ImplFontCharMap( const CmapResult& rCR )
+: mpRangeCodes( rCR.mpRangeCodes )
+, mpStartGlyphs( rCR.mpStartGlyphs )
+, mpGlyphIds( rCR.mpGlyphIds )
+, mnRangeCount( rCR.mnRangeCount )
+, mnCharCount( 0 )
+, mnRefCount( 1 )
{
- while( --nRangePairs >= 0 )
+ const sal_uInt32* pRangePtr = mpRangeCodes;
+ for( int i = mnRangeCount; --i >= 0; pRangePtr += 2 )
{
- sal_uInt32 cFirst = *(pRangeCodes++);
- sal_uInt32 cLast = *(pRangeCodes++);
+ sal_uInt32 cFirst = pRangePtr[0];
+ sal_uInt32 cLast = pRangePtr[1];
mnCharCount += cLast - cFirst;
}
}
static ImplFontCharMap* pDefaultImplFontCharMap = NULL;
-static const sal_uInt32 pDefaultRangeCodes[] = {0x0020,0xD800, 0xE000,0xFFF0};
+static const sal_uInt32 aDefaultUnicodeRanges[] = {0x0020,0xD800, 0xE000,0xFFF0};
+static const sal_uInt32 aDefaultSymbolRanges[] = {0x0020,0x0100, 0xF020,0xF100};
+
+// -----------------------------------------------------------------------
+
+bool ImplFontCharMap::IsDefaultMap() const
+{
+ const bool bIsDefault = (mpRangeCodes == aDefaultUnicodeRanges) || (mpRangeCodes == aDefaultSymbolRanges);
+ return bIsDefault;
+}
// -----------------------------------------------------------------------
ImplFontCharMap::~ImplFontCharMap()
{
- if( mpRangeCodes != pDefaultRangeCodes )
- delete[] mpRangeCodes;
+ if( IsDefaultMap() )
+ return;
+ delete[] mpRangeCodes;
delete[] mpStartGlyphs;
+ delete[] mpGlyphIds;
}
// -----------------------------------------------------------------------
-ImplFontCharMap* ImplFontCharMap::GetDefaultMap()
+ImplFontCharMap* ImplFontCharMap::GetDefaultMap( bool bSymbols)
{
if( pDefaultImplFontCharMap )
pDefaultImplFontCharMap->AddReference();
else
- pDefaultImplFontCharMap = new ImplFontCharMap( 2, pDefaultRangeCodes, NULL );
- return pDefaultImplFontCharMap;
-}
+ {
+ const sal_uInt32* pRangeCodes = aDefaultUnicodeRanges;
+ int nCodesCount = sizeof(aDefaultUnicodeRanges) / sizeof(*pRangeCodes);
+ if( bSymbols )
+ {
+ pRangeCodes = aDefaultSymbolRanges;
+ nCodesCount = sizeof(aDefaultSymbolRanges) / sizeof(*pRangeCodes);
+ }
-// -----------------------------------------------------------------------
+ CmapResult aDefaultCR( bSymbols, pRangeCodes, nCodesCount/2 );
+ pDefaultImplFontCharMap = new ImplFontCharMap( aDefaultCR );
+ }
-bool ImplFontCharMap::IsDefaultMap() const
-{
- return (mpRangeCodes == pDefaultRangeCodes);
+ return pDefaultImplFontCharMap;
}
// -----------------------------------------------------------------------
@@ -328,15 +355,24 @@ int ImplFontCharMap::ImplFindRangeIndex( sal_uInt32 cChar ) const
bool ImplFontCharMap::HasChar( sal_uInt32 cChar ) const
{
- int nRange = ImplFindRangeIndex( cChar );
- if( nRange==0 && cChar<mpRangeCodes[0] )
- return false;
- return ((nRange & 1) == 0);
+ bool bHasChar = false;
+
+ if( mpStartGlyphs == NULL ) { // only the char-ranges are known
+ const int nRange = ImplFindRangeIndex( cChar );
+ if( nRange==0 && cChar<mpRangeCodes[0] )
+ return false;
+ bHasChar = ((nRange & 1) == 0); // inside a range
+ } else { // glyph mapping is available
+ const int nGlyphIndex = GetGlyphIndex( cChar );
+ bHasChar = (nGlyphIndex != 0); // not the notdef-glyph
+ }
+
+ return bHasChar;
}
// -----------------------------------------------------------------------
-int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar )
+int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar ) const
{
// return -1 if the object doesn't know the glyph ids
if( !mpStartGlyphs )
@@ -344,14 +380,30 @@ int ImplFontCharMap::GetGlyphIndex( sal_uInt32 cChar )
// return 0 if the unicode doesn't have a matching glyph
int nRange = ImplFindRangeIndex( cChar );
- if( nRange==0 && cChar<mpRangeCodes[0] )
- return 0;
- if( nRange & 1 )
+ // check that we are inside any range
+ if( (nRange == 0) && (cChar < mpRangeCodes[0]) ) {
+ // symbol aliasing gives symbol fonts a second chance
+ const bool bSymbolic = (mpRangeCodes[0]>=0xF000) & (mpRangeCodes[1]<=0xF0FF);
+ if( !bSymbolic )
+ return 0;
+ // check for symbol aliasing (U+F0xx -> U+00xx)
+ nRange = ImplFindRangeIndex( cChar | 0xF000 );
+ }
+ // check that we are inside a range
+ if( (nRange & 1) != 0 )
return 0;
- // calculate the glyph index with the range' start code and start glyph
- int nGlyphIndex = mpStartGlyphs[ nRange/2 ];
- nGlyphIndex += cChar - mpRangeCodes[ nRange ];
+ // get glyph index directly or indirectly
+ int nGlyphIndex = cChar - mpRangeCodes[ nRange ];
+ const int nStartIndex = mpStartGlyphs[ nRange/2 ];
+ if( nStartIndex >= 0 ) {
+ // the glyph index can be calculated
+ nGlyphIndex += nStartIndex;
+ } else {
+ // the glyphid array has the glyph index
+ nGlyphIndex = mpGlyphIds[ nGlyphIndex - nStartIndex];
+ }
+
return nGlyphIndex;
}
@@ -478,24 +530,29 @@ static int GetSShort( const unsigned char* p ){ return((static_cast<signed char>
// TODO: move CMAP parsing directly into the ImplFontCharMap class
bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
{
+ rResult.mpRangeCodes = NULL;
+ rResult.mpStartGlyphs= NULL;
+ rResult.mpGlyphIds = NULL;
+ rResult.mnRangeCount = 0;
+ rResult.mbRecoded = false;
+ rResult.mbSymbolic = false;
+
+ // parse the table header and check for validity
if( !pCmap || (nLength < 24) )
return false;
- rResult.mpPairCodes = NULL;
- rResult.mpStartGlyphs= NULL;
- rResult.mnPairCount = 0;
- rResult.mbRecoded = false;
- rResult.mbSymbolic = false;
-
if( GetUShort( pCmap ) != 0x0000 ) // simple check for CMAP corruption
return false;
+ int nSubTables = GetUShort( pCmap + 2 );
+ if( (nSubTables <= 0) || (nLength < (24 + 8*nSubTables)) )
+ return false;
+
// find the most interesting subtable in the CMAP
rtl_TextEncoding eRecodeFrom = RTL_TEXTENCODING_UNICODE;
int nOffset = 0;
int nFormat = -1;
int nBestVal = 0;
- int nSubTables = GetUShort( pCmap + 2 );
for( const unsigned char* p = pCmap + 4; --nSubTables >= 0; p += 8 )
{
int nPlatform = GetUShort( p );
@@ -548,6 +605,11 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
sal_uInt32* pCodePairs = NULL;
int* pStartGlyphs = NULL;
+ typedef std::vector<USHORT> U16Vector;
+ U16Vector aGlyphIdArray;
+ aGlyphIdArray.reserve( 0x1000 );
+ aGlyphIdArray.push_back( 0 );
+
// format 4, the most common 16bit char mapping table
if( (nFormat == 4) && ((nOffset+16) < nLength) )
{
@@ -557,20 +619,33 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
pStartGlyphs = new int[ nRangeCount ];
const unsigned char* pLimitBase = pCmap + nOffset + 14;
const unsigned char* pBeginBase = pLimitBase + nSegCountX2 + 2;
- const unsigned char* pGlyphBase = pBeginBase + nSegCountX2;
+ const unsigned char* pDeltaBase = pBeginBase + nSegCountX2;
+ const unsigned char* pOffsetBase = pDeltaBase + nSegCountX2;
sal_uInt32* pCP = pCodePairs;
for( int i = 0; i < nRangeCount; ++i )
{
- sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i );
- sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i );
- int nStartGlyph = cMinChar + GetSShort( pGlyphBase + 2*i );
+ const sal_uInt32 cMinChar = GetUShort( pBeginBase + 2*i );
+ const sal_uInt32 cMaxChar = GetUShort( pLimitBase + 2*i );
+ const int nGlyphDelta = GetSShort( pDeltaBase + 2*i );
+ const int nRangeOffset = GetUShort( pOffsetBase + 2*i );
if( cMinChar > cMaxChar ) // no sane font should trigger this
break;
if( cMaxChar == 0xFFFF )
break;
*(pCP++) = cMinChar;
*(pCP++) = cMaxChar + 1;
- pStartGlyphs[i] = nStartGlyph;
+ if( !nRangeOffset ) {
+ // glyphid can be calculated directly
+ pStartGlyphs[i] = (cMinChar + nGlyphDelta) & 0xFFFF;
+ } else {
+ // update the glyphid-array with the glyphs in this range
+ pStartGlyphs[i] = -(int)aGlyphIdArray.size();
+ const unsigned char* pGlyphIdPtr = pOffsetBase + 2*i + nRangeOffset;
+ for( sal_uInt32 c = cMinChar; c <= cMaxChar; ++c, pGlyphIdPtr+=2 ) {
+ const int nGlyphIndex = GetUShort( pGlyphIdPtr ) + nGlyphDelta;
+ aGlyphIdArray.push_back( static_cast<USHORT>(nGlyphIndex) );
+ }
+ }
}
nRangeCount = (pCP - pCodePairs) / 2;
}
@@ -604,6 +679,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
nRangeCount = (pCP - pCodePairs) / 2;
}
+ // check if any subtable resulted in something usable
if( nRangeCount <= 0 )
{
delete[] pCodePairs;
@@ -617,8 +693,8 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
pCodePairs[1] = 0x0100;
pCodePairs[2] = 0xF020; // original symbols
pCodePairs[3] = 0xF100;
- rResult.mpPairCodes = pCodePairs;
- rResult.mnPairCount = 2;
+ rResult.mpRangeCodes = pCodePairs;
+ rResult.mnRangeCount = 2;
return true;
}
@@ -701,6 +777,7 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
// glyph mapping for non-unicode fonts not implemented
delete[] pStartGlyphs;
pStartGlyphs = NULL;
+ aGlyphIdArray.clear();
// make a pCodePairs array using the vector from above
delete[] pCodePairs;
@@ -713,9 +790,23 @@ bool ParseCMAP( const unsigned char* pCmap, int nLength, CmapResult& rResult )
*(pCP++) = *itInt;
}
- rResult.mpPairCodes = pCodePairs;
+ // prepare the glyphid-array if needed
+ // TODO: merge ranges if they are close enough?
+ USHORT* pGlyphIds = NULL;
+ if( !aGlyphIdArray.empty())
+ {
+ pGlyphIds = new USHORT[ aGlyphIdArray.size() ];
+ USHORT* pOut = pGlyphIds;
+ U16Vector::const_iterator it = aGlyphIdArray.begin();
+ while( it != aGlyphIdArray.end() )
+ *(pOut++) = *(it++);
+ }
+
+ // update the result struct
+ rResult.mpRangeCodes = pCodePairs;
rResult.mpStartGlyphs = pStartGlyphs;
- rResult.mnPairCount = nRangeCount;
+ rResult.mnRangeCount = nRangeCount;
+ rResult.mpGlyphIds = pGlyphIds;
return true;
}
@@ -821,3 +912,4 @@ sal_uInt32 FontCharMap::GetCharFromIndex( int nIndex ) const
}
// =======================================================================
+
diff --git a/vcl/source/gdi/outdev.cxx b/vcl/source/gdi/outdev.cxx
index 0e9da9f81136..5b543258cb0b 100644
--- a/vcl/source/gdi/outdev.cxx
+++ b/vcl/source/gdi/outdev.cxx
@@ -68,6 +68,8 @@
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dlinegeometry.hxx>
#include <com/sun/star/awt/XGraphics.hpp>
#include <com/sun/star/uno/Sequence.hxx>
@@ -2285,8 +2287,35 @@ void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt )
if ( mbInitLineColor )
ImplInitLineColor();
- Point aStartPt = ImplLogicToDevicePixel( rStartPt );
- Point aEndPt = ImplLogicToDevicePixel( rEndPt );
+ // #i101598# support AA and snap for lines, too
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && IsLineColor())
+ {
+ // at least transform with double precision to device coordinates; this will
+ // avoid pixel snap of single, appended lines
+ const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation());
+ const basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 );
+ basegfx::B2DPolygon aB2DPolyLine;
+
+ aB2DPolyLine.append(basegfx::B2DPoint(rStartPt.X(), rStartPt.Y()));
+ aB2DPolyLine.append(basegfx::B2DPoint(rEndPt.X(), rEndPt.Y()));
+ aB2DPolyLine.transform( aTransform );
+
+ if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
+ {
+ aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine);
+ }
+
+ if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
+ {
+ return;
+ }
+ }
+
+ const Point aStartPt(ImplLogicToDevicePixel(rStartPt));
+ const Point aEndPt(ImplLogicToDevicePixel(rEndPt));
mpGraphics->DrawLine( aStartPt.X(), aStartPt.Y(), aEndPt.X(), aEndPt.Y(), this );
@@ -2444,22 +2473,30 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly )
if ( mbInitLineColor )
ImplInitLineColor();
+ const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && IsLineColor());
+
// use b2dpolygon drawing if possible
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ if(bTryAA && ImpTryDrawPolyLineDirect(rPoly.getB2DPolygon(), 0.0, basegfx::B2DLINEJOIN_NONE))
{
- ::basegfx::B2DPolygon aB2DPolyLine = rPoly.getB2DPolygon();
+ basegfx::B2DPolygon aB2DPolyLine(rPoly.getB2DPolygon());
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- aB2DPolyLine.transform( aTransform );
const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 );
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && (mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE))
+ // transform the polygon
+ aB2DPolyLine.transform( aTransform );
+
+ if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
{
- // #i98289#
aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine);
}
- if( mpGraphics->DrawPolyLine( aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_ROUND, this ) )
+ if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
+ {
return;
+ }
}
Polygon aPoly = ImplLogicToDevicePixel( rPoly );
@@ -2499,9 +2536,23 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo
return;
}
+ // #i101491#
+ // Try direct Fallback to B2D-Version of DrawPolyLine
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && LINE_SOLID == rLineInfo.GetStyle())
+ {
+ DrawPolyLine(rPoly.getB2DPolygon(), (double)rLineInfo.GetWidth(), basegfx::B2DLINEJOIN_ROUND);
+ return;
+ }
+
if ( mpMetaFile )
mpMetaFile->AddAction( new MetaPolyLineAction( rPoly, rLineInfo ) );
+ ImpDrawPolyLineWithLineInfo(rPoly, rLineInfo);
+}
+
+void OutputDevice::ImpDrawPolyLineWithLineInfo(const Polygon& rPoly, const LineInfo& rLineInfo)
+{
USHORT nPoints = rPoly.GetSize();
if ( !IsDeviceOutputNecessary() || !mbLineColor || ( nPoints < 2 ) || ( LINE_NONE == rLineInfo.GetStyle() ) || ImplIsRecordLayout() )
@@ -2527,6 +2578,10 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo
return;
const LineInfo aInfo( ImplLogicToDevicePixel( rLineInfo ) );
+ const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && IsLineColor());
if( aInfo.GetWidth() > 1L )
{
@@ -2540,9 +2595,32 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo
ImplInitLineColor();
SetFillColor( aOldLineColor );
ImplInitFillColor();
+ bool bDone(false);
+
+ if(bTryAA)
+ {
+ // #i101491# try AAed version
+ // Use old on-the-fly geometry preparation, combine with AA
+ bool bSuccess(true);
- for( const Polygon* pPoly = aLineCvt.ImplGetFirst(); pPoly; pPoly = aLineCvt.ImplGetNext() )
- mpGraphics->DrawPolygon( pPoly->GetSize(), (const SalPoint*) pPoly->GetConstPointAry(), this );
+ for(const Polygon* pPoly = aLineCvt.ImplGetFirst(); bSuccess && pPoly; pPoly = aLineCvt.ImplGetNext())
+ {
+ bSuccess = mpGraphics->DrawPolyPolygon(basegfx::B2DPolyPolygon(pPoly->getB2DPolygon()), 0.0, this);
+ }
+
+ if(bSuccess)
+ {
+ bDone = true;
+ }
+ }
+
+ if(!bDone)
+ {
+ for( const Polygon* pPoly = aLineCvt.ImplGetFirst(); pPoly; pPoly = aLineCvt.ImplGetNext() )
+ {
+ mpGraphics->DrawPolygon( pPoly->GetSize(), (const SalPoint*) pPoly->GetConstPointAry(), this );
+ }
+ }
SetLineColor( aOldLineColor );
SetFillColor( aOldFillColor );
@@ -2598,13 +2676,40 @@ void OutputDevice::DrawPolygon( const Polygon& rPoly )
ImplInitFillColor();
// use b2dpolygon drawing if possible
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && (IsLineColor() || IsFillColor()))
{
- ::basegfx::B2DPolyPolygon aB2DPolyPolygon( rPoly.getB2DPolygon() );
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- aB2DPolyPolygon.transform( aTransform );
- if( mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, 0.0, this ) )
+ basegfx::B2DPolygon aB2DPolygon(rPoly.getB2DPolygon());
+ bool bSuccess(true);
+
+ // transform the polygon and ensure closed
+ aB2DPolygon.transform(aTransform);
+ aB2DPolygon.setClosed(true);
+
+ if(IsFillColor())
+ {
+ bSuccess = mpGraphics->DrawPolyPolygon(basegfx::B2DPolyPolygon(aB2DPolygon), 0.0, this);
+ }
+
+ if(bSuccess && IsLineColor())
+ {
+ const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 );
+
+ if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
+ {
+ aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon);
+ }
+
+ bSuccess = mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ }
+
+ if(bSuccess)
+ {
return;
+ }
}
Polygon aPoly = ImplLogicToDevicePixel( rPoly );
@@ -2661,13 +2766,43 @@ void OutputDevice::DrawPolyPolygon( const PolyPolygon& rPolyPoly )
ImplInitFillColor();
// use b2dpolygon drawing if possible
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && (IsLineColor() || IsFillColor()))
{
- ::basegfx::B2DPolyPolygon aB2DPolyPolygon = rPolyPoly.getB2DPolyPolygon();
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- aB2DPolyPolygon.transform( aTransform );
- if( mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, 0.0, this ) )
+ basegfx::B2DPolyPolygon aB2DPolyPolygon(rPolyPoly.getB2DPolyPolygon());
+ bool bSuccess(true);
+
+ // transform the polygon and ensure closed
+ aB2DPolyPolygon.transform(aTransform);
+ aB2DPolyPolygon.setClosed(true);
+
+ if(IsFillColor())
+ {
+ bSuccess = mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, 0.0, this);
+ }
+
+ if(bSuccess && IsLineColor())
+ {
+ const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 );
+
+ if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
+ {
+ aB2DPolyPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyPolygon);
+ }
+
+ for(sal_uInt32 a(0); bSuccess && a < aB2DPolyPolygon.count(); a++)
+ {
+ bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ }
+ }
+
+ if(bSuccess)
+ {
return;
+ }
}
if ( nPoly == 1 )
@@ -2729,6 +2864,12 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly
mpMetaFile->AddAction( new MetaPolyPolygonAction( PolyPolygon( rB2DPolyPoly ) ) );
#endif
+ // call helper
+ ImpDrawPolyPolygonWithB2DPolyPolygon(rB2DPolyPoly);
+}
+
+void OutputDevice::ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly)
+{
// AW: Do NOT paint empty PolyPolygons
if(!rB2DPolyPoly.count())
return;
@@ -2748,13 +2889,43 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly
if( mbInitFillColor )
ImplInitFillColor();
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && (IsLineColor() || IsFillColor()))
{
- const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- ::basegfx::B2DPolyPolygon aB2DPP = rB2DPolyPoly;
- aB2DPP.transform( aTransform );
- if( mpGraphics->DrawPolyPolygon( aB2DPP, 0.0, this ) )
+ const basegfx::B2DHomMatrix aTransform(ImplGetDeviceTransformation());
+ basegfx::B2DPolyPolygon aB2DPolyPolygon(rB2DPolyPoly);
+ bool bSuccess(true);
+
+ // transform the polygon and ensure closed
+ aB2DPolyPolygon.transform(aTransform);
+ aB2DPolyPolygon.setClosed(true);
+
+ if(IsFillColor())
+ {
+ bSuccess = mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, 0.0, this);
+ }
+
+ if(bSuccess && IsLineColor())
+ {
+ const ::basegfx::B2DVector aB2DLineWidth( 1.0, 1.0 );
+
+ if(mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
+ {
+ aB2DPolyPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyPolygon);
+ }
+
+ for(sal_uInt32 a(0);bSuccess && a < aB2DPolyPolygon.count(); a++)
+ {
+ bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ }
+ }
+
+ if(bSuccess)
+ {
return;
+ }
}
// fallback to old polygon drawing if needed
@@ -2765,6 +2936,38 @@ void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly
// -----------------------------------------------------------------------
+bool OutputDevice::ImpTryDrawPolyLineDirect(
+ const basegfx::B2DPolygon& rB2DPolygon,
+ double fLineWidth,
+ basegfx::B2DLineJoin eLineJoin)
+{
+ const basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
+ basegfx::B2DVector aB2DLineWidth(1.0, 1.0);
+
+ // transform the line width if used
+ if( fLineWidth != 0.0 )
+ {
+ aB2DLineWidth = aTransform * ::basegfx::B2DVector( fLineWidth, fLineWidth );
+ }
+
+ // transform the polygon
+ basegfx::B2DPolygon aB2DPolygon(rB2DPolygon);
+ aB2DPolygon.transform(aTransform);
+
+ if((mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE)
+ && aB2DPolygon.count() < 1000)
+ {
+ // #i98289#, #i101491#
+ // better to remove doubles on device coordinates. Also assume from a given amount
+ // of points that the single edges are not long enough to smooth
+ aB2DPolygon.removeDoublePoints();
+ aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon);
+ }
+
+ // draw the polyline
+ return mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, eLineJoin, this);
+}
+
void OutputDevice::DrawPolyLine(
const basegfx::B2DPolygon& rB2DPolygon,
double fLineWidth,
@@ -2808,37 +3011,62 @@ void OutputDevice::DrawPolyLine(
if( mbInitLineColor )
ImplInitLineColor();
- // #i98289# use b2dpolygon drawing if possible
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ const bool bTryAA((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && IsLineColor());
+
+ // use b2dpolygon drawing if possible
+ if(bTryAA && ImpTryDrawPolyLineDirect(rB2DPolygon, fLineWidth, eLineJoin))
{
- const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- ::basegfx::B2DVector aB2DLineWidth(1.0, 1.0);
+ return;
+ }
- // transform the line width if used
- if( fLineWidth != 0.0 )
- aB2DLineWidth = aTransform * ::basegfx::B2DVector( fLineWidth, fLineWidth );
+ // #i101491#
+ // no output yet; fallback to geometry decomposition and use filled polygon paint
+ // when line is fat and not too complex. ImpDrawPolyPolygonWithB2DPolyPolygon
+ // will do internal needed AA checks etc.
+ if(fLineWidth >= 2.5
+ && rB2DPolygon.count()
+ && rB2DPolygon.count() <= 1000)
+ {
+ const double fHalfLineWidth((fLineWidth * 0.5) + 0.5);
+ const basegfx::B2DPolyPolygon aAreaPolyPolygon(basegfx::tools::createAreaGeometry(
+ rB2DPolygon, fHalfLineWidth, eLineJoin));
- // transform the polygon
- ::basegfx::B2DPolygon aB2DPL = rB2DPolygon;
- aB2DPL.transform( aTransform );
+ const Color aOldLineColor(maLineColor);
+ const Color aOldFillColor(maFillColor);
+
+ SetLineColor();
+ ImplInitLineColor();
+ SetFillColor(aOldLineColor);
+ ImplInitFillColor();
+
+ ImpDrawPolyPolygonWithB2DPolyPolygon(aAreaPolyPolygon);
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && (mnAntialiasing & ANTIALIASING_PIXELSNAPHAIRLINE))
+ SetLineColor(aOldLineColor);
+ ImplInitLineColor();
+ SetFillColor(aOldFillColor);
+ ImplInitFillColor();
+
+ if(bTryAA)
{
- // #i98289#
- aB2DPL = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPL);
+ // when AA it is necessary to also paint the filled polygon's outline
+ // to avoid optical gaps
+ for(sal_uInt32 a(0); a < aAreaPolyPolygon.count(); a++)
+ {
+ ImpTryDrawPolyLineDirect(aAreaPolyPolygon.getB2DPolygon(a), 0.0, basegfx::B2DLINEJOIN_NONE);
+ }
}
-
- // draw the polyline
- if( mpGraphics->DrawPolyLine( aB2DPL, aB2DLineWidth, eLineJoin, this ) )
- return;
}
- // fallback to old polygon drawing if needed
+ // fallback to old polygon drawing if needed. This will really
+ // use ImplLineConverter, but still try to AA lines
const Polygon aToolsPolygon( rB2DPolygon );
LineInfo aLineInfo;
if( fLineWidth != 0.0 )
aLineInfo.SetWidth( static_cast<long>(fLineWidth+0.5) );
- DrawPolyLine( aToolsPolygon, aLineInfo );
+ ImpDrawPolyLineWithLineInfo( aToolsPolygon, aLineInfo );
}
// -----------------------------------------------------------------------
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index 537964582ceb..345dc162e67e 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -7,7 +7,6 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: outdev3.cxx,v $
- * $Revision: 1.240.14.5 $
*
* This file is part of OpenOffice.org.
*
@@ -67,6 +66,9 @@
#ifndef _OSL_FILE_H
#include <osl/file.h>
#endif
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_features.hxx>
+#endif
#include <vcl/unohelp.hxx>
#include <pdfwriter_impl.hxx>
@@ -2750,6 +2752,14 @@ size_t ImplFontCache::IFSD_Hash::operator()( const ImplFontSelectData& rFSD ) co
// TODO: does it pay off to improve this hash function?
static FontNameHash aFontNameHash;
size_t nHash = aFontNameHash( rFSD.maSearchName );
+#ifdef ENABLE_GRAPHITE
+ // check for features and generate a unique hash if necessary
+ if (rFSD.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND)
+ {
+ nHash = aFontNameHash( rFSD.maTargetName );
+ }
+#endif
nHash += 11 * rFSD.mnHeight;
nHash += 19 * rFSD.meWeight;
nHash += 29 * rFSD.meItalic;
@@ -2801,6 +2811,15 @@ bool ImplFontCache::IFSD_Equal::operator()(const ImplFontSelectData& rA, const I
return false;
}
+#ifdef ENABLE_GRAPHITE
+ // check for features
+ if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND ||
+ rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName)
+ return false;
+#endif
+
return true;
}
@@ -2838,7 +2857,12 @@ ImplFontEntry* ImplFontCache::GetFontEntry( ImplDevFontList* pFontList,
// if it is already known get its normalized search name
FontNameList::const_iterator it_name = maFontNameList.find( aSearchName );
if( it_name != maFontNameList.end() )
- if( !(*it_name).second.EqualsAscii( "hg", 0, 2) )
+ if( !(*it_name).second.EqualsAscii( "hg", 0, 2)
+#ifdef ENABLE_GRAPHITE
+ && (aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ == STRING_NOTFOUND)
+#endif
+ )
aSearchName = (*it_name).second;
}
@@ -2943,6 +2967,22 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
{
rFSD.maTargetName = GetNextFontToken( rFSD.maName, nTokenPos );
aSearchName = rFSD.maTargetName;
+
+#ifdef ENABLE_GRAPHITE
+ // Until features are properly supported, they are appended to the
+ // font name, so we need to strip them off so the font is found.
+ xub_StrLen nFeat = aSearchName.Search(grutils::GrFeatureParser::FEAT_PREFIX);
+ String aOrigName = rFSD.maTargetName;
+ String aBaseFontName(aSearchName, 0, (nFeat != STRING_NOTFOUND)?nFeat:aSearchName.Len());
+ if (nFeat != STRING_NOTFOUND && STRING_NOTFOUND !=
+ aSearchName.Search(grutils::GrFeatureParser::FEAT_ID_VALUE_SEPARATOR, nFeat))
+ {
+ aSearchName = aBaseFontName;
+ rFSD.maTargetName = aBaseFontName;
+ }
+
+#endif
+
ImplGetEnglishSearchFontName( aSearchName );
ImplFontSubstitute( aSearchName, nSubstFlags, pDevSpecific );
// #114999# special emboldening for Ricoh fonts
@@ -2973,6 +3013,10 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
}
}
+#ifdef ENABLE_GRAPHITE
+ // restore the features to make the font selection data unique
+ rFSD.maTargetName = aOrigName;
+#endif
// check if the current font name token or its substitute is valid
ImplDevFontListData* pFoundData = ImplFindBySearchName( aSearchName );
if( pFoundData )
@@ -2981,16 +3025,21 @@ ImplDevFontListData* ImplDevFontList::ImplFindByFont( ImplFontSelectData& rFSD,
// some systems provide special customization
// e.g. they suggest "serif" as UI-font, but this name cannot be used directly
// because the system wants to map it to another font first, e.g. "Helvetica"
+#ifdef ENABLE_GRAPHITE
+ // use the target name to search in the prematch hook
+ rFSD.maTargetName = aBaseFontName;
+#endif
if( mpPreMatchHook )
- {
if( mpPreMatchHook->FindFontSubstitute( rFSD ) )
- {
ImplGetEnglishSearchFontName( aSearchName );
- pFoundData = ImplFindBySearchName( aSearchName );
- if( pFoundData )
- return pFoundData;
- }
- }
+#ifdef ENABLE_GRAPHITE
+ // the prematch hook uses the target name to search, but we now need
+ // to restore the features to make the font selection data unique
+ rFSD.maTargetName = aOrigName;
+#endif
+ pFoundData = ImplFindBySearchName( aSearchName );
+ if( pFoundData )
+ return pFoundData;
// break after last font name token was checked unsuccessfully
if( nTokenPos == STRING_NOTFOUND)
@@ -5441,6 +5490,7 @@ void OutputDevice::SetFont( const Font& rNewFont )
DBG_CHKOBJ( &rNewFont, Font, NULL );
Font aFont( rNewFont );
+ aFont.SetLanguage(rNewFont.GetLanguage());
if ( mnDrawMode & (DRAWMODE_BLACKTEXT | DRAWMODE_WHITETEXT | DRAWMODE_GRAYTEXT | DRAWMODE_GHOSTEDTEXT | DRAWMODE_SETTINGSTEXT |
DRAWMODE_BLACKFILL | DRAWMODE_WHITEFILL | DRAWMODE_GRAYFILL | DRAWMODE_NOFILL |
DRAWMODE_GHOSTEDFILL | DRAWMODE_SETTINGSFILL ) )
@@ -6484,7 +6534,7 @@ SalLayout* OutputDevice::ImplLayout( const String& rOrigStr,
nRTLOffset = nPixelWidth;
else
nRTLOffset = pSalLayout->GetTextWidth() / pSalLayout->GetUnitsPerPixel();
- pSalLayout->DrawOffset().X() = -nRTLOffset;
+ pSalLayout->DrawOffset().X() = 1 - nRTLOffset;
}
return pSalLayout;
@@ -6919,13 +6969,13 @@ void OutputDevice::ImplDrawText( const Rectangle& rRect,
nStyle &= ~TEXT_DRAW_CLIP;
}
- // Vertikales Alignment
+ // horizontal text alignment
if ( nStyle & TEXT_DRAW_RIGHT )
aPos.X() += nWidth-nTextWidth;
else if ( nStyle & TEXT_DRAW_CENTER )
aPos.X() += (nWidth-nTextWidth)/2;
- // Font Alignment
+ // vertical font alignment
if ( eAlign == ALIGN_BOTTOM )
aPos.Y() += nTextHeight;
else if ( eAlign == ALIGN_BASELINE )
@@ -7919,8 +7969,8 @@ BOOL OutputDevice::GetGlyphBoundRects( const Point& rOrigin, const String& rStr,
// -----------------------------------------------------------------------
BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect,
- const String& rStr, xub_StrLen nBase, xub_StrLen nIndex,
- xub_StrLen nLen ) const
+ const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen,
+ ULONG nLayoutWidth, const sal_Int32* pDXAry ) const
{
DBG_TRACE( "OutputDevice::GetTextBoundRect()" );
DBG_CHKTHIS( OutputDevice, ImplDbgCheckOutputDevice );
@@ -7929,13 +7979,14 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect,
rRect.SetEmpty();
SalLayout* pSalLayout = NULL;
+ const Point aPoint;
// calculate offset when nBase!=nIndex
long nXOffset = 0;
if( nBase != nIndex )
{
xub_StrLen nStart = Min( nBase, nIndex );
xub_StrLen nOfsLen = Max( nBase, nIndex ) - nStart;
- pSalLayout = ImplLayout( rStr, nStart, nOfsLen );
+ pSalLayout = ImplLayout( rStr, nStart, nOfsLen, aPoint, nLayoutWidth, pDXAry );
if( pSalLayout )
{
nXOffset = pSalLayout->GetTextWidth();
@@ -7947,7 +7998,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect,
}
}
- pSalLayout = ImplLayout( rStr, nIndex, nLen );
+ pSalLayout = ImplLayout( rStr, nIndex, nLen, aPoint, nLayoutWidth, pDXAry );
Rectangle aPixelRect;
if( pSalLayout )
{
@@ -7997,7 +8048,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect,
aVDev.SetTextAlign( ALIGN_TOP );
// layout the text on the virtual device
- pSalLayout = aVDev.ImplLayout( rStr, nIndex, nLen );
+ pSalLayout = aVDev.ImplLayout( rStr, nIndex, nLen, aPoint, nLayoutWidth, pDXAry );
if( !pSalLayout )
return false;
@@ -8097,7 +8148,7 @@ BOOL OutputDevice::GetTextBoundRect( Rectangle& rRect,
BOOL OutputDevice::GetTextOutlines( ::basegfx::B2DPolyPolygonVector& rVector,
const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen,
- BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const
+ BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const
{
// the fonts need to be initialized
if( mbNewFont )
@@ -8326,7 +8377,7 @@ BOOL OutputDevice::GetTextOutlines( ::basegfx::B2DPolyPolygonVector& rVector,
BOOL OutputDevice::GetTextOutlines( PolyPolyVector& rResultVector,
const String& rStr, xub_StrLen nBase, xub_StrLen nIndex,
- xub_StrLen nLen, BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const
+ xub_StrLen nLen, BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const
{
rResultVector.clear();
@@ -8349,7 +8400,7 @@ BOOL OutputDevice::GetTextOutlines( PolyPolyVector& rResultVector,
BOOL OutputDevice::GetTextOutline( PolyPolygon& rPolyPoly,
const String& rStr, xub_StrLen nBase, xub_StrLen nIndex, xub_StrLen nLen,
- BOOL bOptimize, const ULONG nTWidth, const sal_Int32* pDXArray ) const
+ BOOL bOptimize, ULONG nTWidth, const sal_Int32* pDXArray ) const
{
rPolyPoly.Clear();
diff --git a/vcl/source/gdi/outdev6.cxx b/vcl/source/gdi/outdev6.cxx
index cee4f475a577..79986988afd7 100644
--- a/vcl/source/gdi/outdev6.cxx
+++ b/vcl/source/gdi/outdev6.cxx
@@ -185,14 +185,20 @@ void OutputDevice::DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly,
if( mbInitFillColor )
ImplInitFillColor();
- if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW) && mpGraphics->supportsOperation(OutDevSupport_B2DDraw))
+ if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
+ && mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
+ && ROP_OVERPAINT == GetRasterOp()
+ && IsFillColor())
{
// b2dpolygon support not implemented yet on non-UNX platforms
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
- ::basegfx::B2DPolyPolygon aB2DPP = rB2DPolyPoly;
- aB2DPP.transform( aTransform );
+ basegfx::B2DPolyPolygon aB2DPolyPolygon(rB2DPolyPoly);
- if( mpGraphics->DrawPolyPolygon( aB2DPP, fTransparency, this ) )
+ // transform the polygon and ensure closed
+ aB2DPolyPolygon.transform(aTransform);
+ aB2DPolyPolygon.setClosed(true);
+
+ if(mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, fTransparency, this))
{
#if 0
// MetaB2DPolyPolygonAction is not implemented yet:
@@ -636,51 +642,105 @@ void OutputDevice::DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos,
if( pVDev->SetOutputSizePixel( aDstRect.GetSize() ) )
{
- Bitmap aPaint, aMask;
- AlphaMask aAlpha;
- MapMode aMap( GetMapMode() );
- Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) );
- const BOOL bOldMap = mbMap;
-
- aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) );
- pVDev->SetMapMode( aMap );
- const BOOL bVDevOldMap = pVDev->IsMapModeEnabled();
-
- // create paint bitmap
- ( (GDIMetaFile&) rMtf ).WindStart();
- ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
- ( (GDIMetaFile&) rMtf ).WindStart();
- pVDev->EnableMapMode( FALSE );
- aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
- pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
-
- // create mask bitmap
- pVDev->SetLineColor( COL_BLACK );
- pVDev->SetFillColor( COL_BLACK );
- pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) );
- pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT |
- DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT );
- ( (GDIMetaFile&) rMtf ).WindStart();
- ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
- ( (GDIMetaFile&) rMtf ).WindStart();
- pVDev->EnableMapMode( FALSE );
- aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
- pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
-
- // create alpha mask from gradient
- pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT );
- pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient );
- pVDev->SetDrawMode( DRAWMODE_DEFAULT );
- pVDev->EnableMapMode( FALSE );
- pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) );
-
- aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
-
- delete pVDev;
-
- EnableMapMode( FALSE );
- DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) );
- EnableMapMode( bOldMap );
+ if(GetAntialiasing())
+ {
+ // #i102109#
+ // For MetaFile replay (see task) it may now be neccessary to take
+ // into account that the content is AntiAlialised and needs to be masked
+ // like that. Instead of masking, i will use a copy-modify-paste cycle
+ // here (as i already use in the VclPrimiziveRenderer with successs)
+ pVDev->SetAntialiasing(GetAntialiasing());
+
+ // create MapMode for buffer (offset needed) and set
+ MapMode aMap(GetMapMode());
+ const Point aOutPos(PixelToLogic(aDstRect.TopLeft()));
+ aMap.SetOrigin(Point(-aOutPos.X(), -aOutPos.Y()));
+ pVDev->SetMapMode(aMap);
+
+ // copy MapMode state and disable for target
+ const bool bOrigMapModeEnabled(IsMapModeEnabled());
+ EnableMapMode(false);
+
+ // copy MapMode state and disable for buffer
+ const bool bBufferMapModeEnabled(pVDev->IsMapModeEnabled());
+ pVDev->EnableMapMode(false);
+
+ // copy content from original to buffer
+ pVDev->DrawOutDev(
+ aPoint, pVDev->GetOutputSizePixel(), // dest
+ aDstRect.TopLeft(), pVDev->GetOutputSizePixel(), // source
+ *this);
+
+ // draw MetaFile to buffer
+ pVDev->EnableMapMode(bBufferMapModeEnabled);
+ ((GDIMetaFile&)rMtf).WindStart();
+ ((GDIMetaFile&)rMtf).Play(pVDev, rPos, rSize);
+ ((GDIMetaFile&)rMtf).WindStart();
+
+ // get content bitmap from buffer
+ pVDev->EnableMapMode(false);
+ const Bitmap aPaint(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel()));
+
+ // create alpha mask from gradient and get as Bitmap
+ pVDev->EnableMapMode(bBufferMapModeEnabled);
+ pVDev->SetDrawMode(DRAWMODE_GRAYGRADIENT);
+ pVDev->DrawGradient(Rectangle(rPos, rSize), rTransparenceGradient);
+ pVDev->SetDrawMode(DRAWMODE_DEFAULT);
+ pVDev->EnableMapMode(false);
+ const AlphaMask aAlpha(pVDev->GetBitmap(aPoint, pVDev->GetOutputSizePixel()));
+
+ // draw masked content to target and restore MapMode
+ DrawBitmapEx(aDstRect.TopLeft(), BitmapEx(aPaint, aAlpha));
+ EnableMapMode(bOrigMapModeEnabled);
+ }
+ else
+ {
+ Bitmap aPaint, aMask;
+ AlphaMask aAlpha;
+ MapMode aMap( GetMapMode() );
+ Point aOutPos( PixelToLogic( aDstRect.TopLeft() ) );
+ const BOOL bOldMap = mbMap;
+
+ aMap.SetOrigin( Point( -aOutPos.X(), -aOutPos.Y() ) );
+ pVDev->SetMapMode( aMap );
+ const BOOL bVDevOldMap = pVDev->IsMapModeEnabled();
+
+ // create paint bitmap
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ pVDev->EnableMapMode( FALSE );
+ aPaint = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+ pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
+
+ // create mask bitmap
+ pVDev->SetLineColor( COL_BLACK );
+ pVDev->SetFillColor( COL_BLACK );
+ pVDev->DrawRect( Rectangle( pVDev->PixelToLogic( Point() ), pVDev->GetOutputSize() ) );
+ pVDev->SetDrawMode( DRAWMODE_WHITELINE | DRAWMODE_WHITEFILL | DRAWMODE_WHITETEXT |
+ DRAWMODE_WHITEBITMAP | DRAWMODE_WHITEGRADIENT );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ ( (GDIMetaFile&) rMtf ).Play( pVDev, rPos, rSize );
+ ( (GDIMetaFile&) rMtf ).WindStart();
+ pVDev->EnableMapMode( FALSE );
+ aMask = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+ pVDev->EnableMapMode( bVDevOldMap ); // #i35331#: MUST NOT use EnableMapMode( TRUE ) here!
+
+ // create alpha mask from gradient
+ pVDev->SetDrawMode( DRAWMODE_GRAYGRADIENT );
+ pVDev->DrawGradient( Rectangle( rPos, rSize ), rTransparenceGradient );
+ pVDev->SetDrawMode( DRAWMODE_DEFAULT );
+ pVDev->EnableMapMode( FALSE );
+ pVDev->DrawMask( Point(), pVDev->GetOutputSizePixel(), aMask, Color( COL_WHITE ) );
+
+ aAlpha = pVDev->GetBitmap( Point(), pVDev->GetOutputSizePixel() );
+
+ delete pVDev;
+
+ EnableMapMode( FALSE );
+ DrawBitmapEx( aDstRect.TopLeft(), BitmapEx( aPaint, aAlpha ) );
+ EnableMapMode( bOldMap );
+ }
}
else
delete pVDev;
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 3f648fda8589..2cbebf6f23e2 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -50,6 +50,7 @@
#include <vcl/outdev.h>
#include <vcl/sallayout.hxx>
#include <vcl/metric.hxx>
+#include <vcl/fontsubset.hxx>
#include <svsys.h>
#include <vcl/salgdi.hxx>
#include <vcl/svapp.hxx>
@@ -792,7 +793,8 @@ static void appendNonStrokingColor( const Color& rColor, OStringBuffer& rBuffer
}
// matrix helper class
-namespace vcl
+// TODO: use basegfx matrix class instead or derive from it
+namespace vcl // TODO: use anonymous namespace to keep this class local
{
/* for sparse matrices of the form (2D linear transformations)
* f[0] f[1] 0
@@ -812,6 +814,7 @@ public:
void scale( double sx, double sy );
void rotate( double angle );
void translate( double tx, double ty );
+ bool invert();
void append( PDFWriterImpl::PDFPage& rPage, OStringBuffer& rBuffer, Point* pBack = NULL );
@@ -888,6 +891,36 @@ void Matrix3::translate( double tx, double ty )
f[5] += ty;
}
+bool Matrix3::invert()
+{
+ // short circuit trivial cases
+ if( f[1]==f[2] && f[1]==0.0 && f[0]==f[3] && f[0]==1.0 )
+ {
+ f[4] = -f[4];
+ f[5] = -f[5];
+ return true;
+ }
+
+ // check determinant
+ const double fDet = f[0]*f[3]-f[1]*f[2];
+ if( fDet == 0.0 )
+ return false;
+
+ // invert the matrix
+ double fn[6];
+ fn[0] = +f[3] / fDet;
+ fn[1] = -f[1] / fDet;
+ fn[2] = -f[2] / fDet;
+ fn[3] = +f[0] / fDet;
+
+ // apply inversion to translation
+ fn[4] = -(f[4]*fn[0] + f[5]*fn[2]);
+ fn[5] = -(f[4]*fn[1] + f[5]*fn[3]);
+
+ set( fn );
+ return true;
+}
+
void Matrix3::append( PDFWriterImpl::PDFPage& rPage, OStringBuffer& rBuffer, Point* pBack )
{
appendDouble( f[0], rBuffer );
@@ -2780,6 +2813,38 @@ sal_Int32 PDFWriterImpl::emitBuiltinFont( const ImplFontData* pFont, sal_Int32 n
return nFontObject;
}
+typedef int ThreeInts[3];
+static bool getPfbSegmentLengths( const unsigned char* pFontBytes, int nByteLen,
+ ThreeInts& rSegmentLengths )
+{
+ if( !pFontBytes || (nByteLen < 0) )
+ return false;
+ const unsigned char* pPtr = pFontBytes;
+ const unsigned char* pEnd = pFontBytes + nByteLen;
+
+ for( int i = 0; i < 3; ++i) {
+ // read segment1 header
+ if( pPtr+6 >= pEnd )
+ return false;
+ if( (pPtr[0] != 0x80) || (pPtr[1] >= 0x03) )
+ return false;
+ const int nLen = (pPtr[5]<<24) + (pPtr[4]<<16) + (pPtr[3]<<8) + pPtr[2];
+ if( nLen <= 0)
+ return false;
+ rSegmentLengths[i] = nLen;
+ pPtr += nLen + 6;
+ }
+
+ // read segment-end header
+ if( pPtr+2 >= pEnd )
+ return false;
+ if( (pPtr[0] != 0x80) || (pPtr[1] != 0x03) )
+ return false;
+
+ return true;
+}
+
+// TODO: always subset instead of embedding the full font => this method becomes obsolete then
std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFontData* pFont, EmbedFont& rEmbed )
{
std::map< sal_Int32, sal_Int32 > aRet;
@@ -2820,7 +2885,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont
sal_Int32 nLength1, nLength2;
if( (pFontData = (const unsigned char*)m_pReferenceDevice->mpGraphics->GetEmbedFontData( pFont, nEncodedCodes, pWidths, aInfo, &nFontLen )) != NULL )
{
- if( aInfo.m_nFontType != SAL_FONTSUBSETINFO_TYPE_TYPE1 )
+ if( (aInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) == 0 )
goto streamend;
// see whether it is pfb or pfa; if it is a pfb, fill ranges
// of 6 bytes that are not part of the font program
@@ -2841,6 +2906,7 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont
}
// search for eexec
+ // TODO: use getPfbSegmentLengths() if possible to skip the search thingies below
nIndex = 0;
int nEndAsciiIndex;
int nBeginBinaryIndex;
@@ -3541,10 +3607,11 @@ sal_Int32 PDFWriterImpl::emitFontDescriptor( const ImplFontData* pFont, FontSubs
"/FontFile" );
switch( rInfo.m_nFontType )
{
- case SAL_FONTSUBSETINFO_TYPE_TRUETYPE:
+ case FontSubsetInfo::SFNT_TTF:
aLine.append( '2' );
break;
- case SAL_FONTSUBSETINFO_TYPE_TYPE1:
+ case FontSubsetInfo::TYPE1_PFA:
+ case FontSubsetInfo::TYPE1_PFB:
break;
default:
DBG_ERROR( "unknown fonttype in PDF font descriptor" );
@@ -3577,7 +3644,6 @@ bool PDFWriterImpl::emitFonts()
return false;
OStringBuffer aLine( 1024 );
- char buf[8192];
std::map< sal_Int32, sal_Int32 > aFontIDToObject;
@@ -3620,14 +3686,13 @@ bool PDFWriterImpl::emitFonts()
FontSubsetInfo aSubsetInfo;
if( m_pReferenceDevice->mpGraphics->CreateFontSubset( aTmpName, it->first, pGlyphIDs, pEncoding, pWidths, nGlyphs, aSubsetInfo ) )
{
- DBG_ASSERT( aSubsetInfo.m_nFontType == SAL_FONTSUBSETINFO_TYPE_TRUETYPE, "wrong font type in font subset" );
// create font stream
oslFileHandle aFontFile;
CHECK_RETURN( (osl_File_E_None == osl_openFile( aTmpName.pData, &aFontFile, osl_File_OpenFlag_Read ) ) );
// get file size
- sal_uInt64 nLength;
+ sal_uInt64 nLength1;
CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_End, 0 ) ) );
- CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength ) ) );
+ CHECK_RETURN( (osl_File_E_None == osl_getFilePos( aFontFile, &nLength1 ) ) );
CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) );
#if OSL_DEBUG_LEVEL > 1
@@ -3649,25 +3714,74 @@ bool PDFWriterImpl::emitFonts()
"/Filter/FlateDecode"
#endif
"/Length1 " );
- aLine.append( (sal_Int32)nLength );
+
+ sal_uInt64 nStartPos = 0;
+ if( aSubsetInfo.m_nFontType == FontSubsetInfo::SFNT_TTF )
+ {
+ aLine.append( (sal_Int32)nLength1 );
+
aLine.append( ">>\n"
"stream\n" );
CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) );
-
- sal_uInt64 nStartPos = 0;
CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) );
// copy font file
beginCompression();
checkAndEnableStreamEncryption( nFontStream );
- sal_uInt64 nRead;
sal_Bool bEOF = sal_False;
do
{
+ char buf[8192];
+ sal_uInt64 nRead;
CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, buf, sizeof( buf ), &nRead ) ) );
CHECK_RETURN( writeBuffer( buf, nRead ) );
CHECK_RETURN( (osl_File_E_None == osl_isEndOfFile( aFontFile, &bEOF ) ) );
} while( ! bEOF );
+ }
+ else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::CFF_FONT) != 0 )
+ {
+ // TODO: implement
+ DBG_ERROR( "PDFWriterImpl does not support CFF-font subsets yet!" );
+ }
+ else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::TYPE1_PFB) != 0 ) // TODO: also support PFA?
+ {
+ unsigned char* pBuffer = new unsigned char[ (int)nLength1 ];
+
+ sal_uInt64 nBytesRead = 0;
+ CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, pBuffer, nLength1, &nBytesRead ) ) );
+ DBG_ASSERT( nBytesRead==nLength1, "PDF-FontSubset read incomplete!" );
+ CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) );
+ // get the PFB-segment lengths
+ ThreeInts aSegmentLengths = {0,0,0};
+ getPfbSegmentLengths( pBuffer, (int)nBytesRead, aSegmentLengths );
+ // the lengths below are mandatory for PDF-exported Type1 fonts
+ // because the PFB segment headers get stripped! WhyOhWhy.
+ aLine.append( (sal_Int32)aSegmentLengths[0] );
+ aLine.append( "/Length2 " );
+ aLine.append( (sal_Int32)aSegmentLengths[1] );
+ aLine.append( "/Length3 " );
+ aLine.append( (sal_Int32)aSegmentLengths[2] );
+
+ aLine.append( ">>\n"
+ "stream\n" );
+ CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) );
+ CHECK_RETURN( (osl_File_E_None == osl_getFilePos( m_aFile, &nStartPos ) ) );
+
+ // emit PFB-sections without section headers
+ beginCompression();
+ checkAndEnableStreamEncryption( nFontStream );
+ CHECK_RETURN( writeBuffer( pBuffer+ 6, aSegmentLengths[0] ) );
+ CHECK_RETURN( writeBuffer( pBuffer+12 + aSegmentLengths[0], aSegmentLengths[1] ) );
+ CHECK_RETURN( writeBuffer( pBuffer+18 + aSegmentLengths[0] + aSegmentLengths[1], aSegmentLengths[2] ) );
+
+ delete[] pBuffer;
+ }
+ else
+ {
+ fprintf( stderr, "PDF: CreateFontSubset result in not yet supported format=%d\n",aSubsetInfo.m_nFontType);
+ aLine.append( "0 >>\nstream\n" );
+ }
+
endCompression();
disableStreamEncryption();
// close the file
@@ -3699,8 +3813,11 @@ bool PDFWriterImpl::emitFonts()
CHECK_RETURN( updateObject( nFontObject ) );
aLine.setLength( 0 );
aLine.append( nFontObject );
- aLine.append( " 0 obj\n"
- "<</Type/Font/Subtype/TrueType/BaseFont/" );
+
+ aLine.append( " 0 obj\n" );
+ aLine.append( ((aSubsetInfo.m_nFontType & FontSubsetInfo::ANY_TYPE1) != 0) ?
+ "<</Type/Font/Subtype/Type1/BaseFont/" :
+ "<</Type/Font/Subtype/TrueType/BaseFont/" );
appendSubsetName( lit->m_nFontID, aSubsetInfo.m_aPSName, aLine );
aLine.append( "\n"
"/FirstChar 0\n"
@@ -6635,6 +6752,7 @@ void PDFWriterImpl::drawHorizontalGlyphs(
// subsequent use of that operator would move
// the texline matrix relative to what was set before
// making use of that would drive us into rounding issues
+ Matrix3 aMat;
if( nRun == 0 && fAngle == 0.0 && fXScale == 1.0 && fSkew == 0.0 )
{
m_aPages.back().appendPoint( aCurPos, rLine, false );
@@ -6642,7 +6760,6 @@ void PDFWriterImpl::drawHorizontalGlyphs(
}
else
{
- Matrix3 aMat;
if( fSkew != 0.0 )
aMat.skew( 0.0, fSkew );
aMat.scale( fXScale, 1.0 );
@@ -6665,15 +6782,17 @@ void PDFWriterImpl::drawHorizontalGlyphs(
appendHex( rGlyphs[nBeginRun].m_nMappedGlyphId, aKernedLine );
appendHex( rGlyphs[nBeginRun].m_nMappedGlyphId, aUnkernedLine );
+ aMat.invert();
bool bNeedKern = false;
for( sal_uInt32 nPos = nBeginRun+1; nPos < aRunEnds[nRun]; nPos++ )
{
appendHex( rGlyphs[nPos].m_nMappedGlyphId, aUnkernedLine );
- // check for adjustment
- double fTheoreticalGlyphWidth = rGlyphs[nPos].m_aPos.X() - rGlyphs[nPos-1].m_aPos.X();
- fTheoreticalGlyphWidth = fabs( fTheoreticalGlyphWidth ); // #i100522# workaround until #i87686# gets fixed
- fTheoreticalGlyphWidth = 1000.0 * fTheoreticalGlyphWidth / fXScale / double(nPixelFontHeight);
- sal_Int32 nAdjustment = rGlyphs[nPos-1].m_nNativeWidth - sal_Int32(fTheoreticalGlyphWidth+0.5);
+ // check if glyph advance matches with the width of the previous glyph, else adjust
+ const Point aThisPos = aMat.transform( rGlyphs[nPos].m_aPos );
+ const Point aPrevPos = aMat.transform( rGlyphs[nPos-1].m_aPos );
+ double fAdvance = aThisPos.X() - aPrevPos.X();
+ fAdvance *= 1000.0 / (fXScale * nPixelFontHeight);
+ const sal_Int32 nAdjustment = rGlyphs[nPos-1].m_nNativeWidth - sal_Int32(fAdvance+0.5);
if( nAdjustment != 0 )
{
bNeedKern = true;
@@ -11777,3 +11896,4 @@ according to the table 3.15, pdf v 1.4 */
m_aContext.Encrypt = false; //then turn the encryption off
}
/* end i12626 methods */
+
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index 50c0bafc0489..7d5ec2bf4f61 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pdfwriter_impl.hxx,v $
- * $Revision: 1.55.134.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -57,7 +54,7 @@
class ImplFontSelectData;
class ImplFontMetricData;
-struct FontSubsetInfo;
+class FontSubsetInfo;
class ZCodec;
// the maximum password length
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index a96d4dc64b89..21ac05a498fc 100755
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -63,6 +63,26 @@
#include <algorithm>
+#ifdef DEBUG
+//#define MULTI_SL_DEBUG
+#endif
+
+#ifdef MULTI_SL_DEBUG
+#include <string>
+FILE * mslLogFile = NULL;
+FILE * mslLog()
+{
+#ifdef MSC
+ std::string logFileName(getenv("TEMP"));
+ logFileName.append("\\msllayout.log");
+ if (mslLogFile == NULL) mslLogFile = fopen(logFileName.c_str(),"w");
+ else fflush(mslLogFile);
+ return mslLogFile;
+#else
+ return stdout;
+#endif
+}
+#endif
// =======================================================================
// TODO: ask the glyph directly, for now we need this method because of #i99367#
@@ -1157,11 +1177,17 @@ void GenericSalLayout::ApplyDXArray( ImplLayoutArgs& rArgs )
for( int nCharPos = i = -1; rArgs.GetNextPos( &nCharPos, &bRTL ); )
{
n = nCharPos - rArgs.mnMinCharPos;
- i = pLogCluster[ n ];
- long nDelta = rArgs.mpDXArray[ n ] ;
- if( n > 0 )
- nDelta -= rArgs.mpDXArray[ n-1 ];
- pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel;
+ if( (n < 0) || (nCharCount <= n) ) continue;
+
+ if( pLogCluster[ n ] >= 0 )
+ i = pLogCluster[ n ];
+ if( i >= 0 )
+ {
+ long nDelta = rArgs.mpDXArray[ n ] ;
+ if( n > 0 )
+ nDelta -= rArgs.mpDXArray[ n-1 ];
+ pNewGlyphWidths[ i ] += nDelta * mnUnitsPerPixel;
+ }
}
// move cluster positions using the adjusted widths
@@ -1768,6 +1794,19 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
}
}
+ // Compute rtl flags, since in some scripts glyphs/char order can be
+ // reversed for a few character sequencies e.g. Myanmar
+ std::vector<bool> vRtl(rArgs.mnEndCharPos - rArgs.mnMinCharPos, false);
+ rArgs.ResetPos();
+ bool bRtl;
+ int nRunStart, nRunEnd;
+ while (rArgs.GetNextRun(&nRunStart, &nRunEnd, &bRtl))
+ {
+ if (bRtl) std::fill(vRtl.begin() + nRunStart - rArgs.mnMinCharPos,
+ vRtl.begin() + nRunEnd - rArgs.mnMinCharPos, true);
+ }
+ rArgs.ResetPos();
+
// prepare "merge sort"
int nStartOld[ MAX_FALLBACK ];
int nStartNew[ MAX_FALLBACK ];
@@ -1804,6 +1843,10 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
nStartNew[ nLevel ] = nStartOld[ nLevel ] = 0;
nValid[ nLevel ] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[ nLevel ], &nGlyphAdv[ nLevel ], &nCharPos[ nLevel ] );
+#ifdef MULTI_SL_DEBUG
+ if (nValid[nLevel]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", n, nStartOld[nLevel], nStartNew[nLevel], aPos.X(), nGlyphAdv[nLevel], nCharPos[nLevel],
+ rArgs.mpStr[nCharPos[nLevel]]);
+#endif
if( (n > 0) && !nValid[ nLevel ] )
{
// an empty fallback layout can be released
@@ -1829,6 +1872,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
for( n = 0; n < nLevel; ++n )
maFallbackRuns[n].ResetPos();
int nActiveCharPos = nCharPos[0];
+ int nLastRunEndChar = (vRtl[nActiveCharPos - mnMinCharPos])?
+ rArgs.mnEndCharPos : rArgs.mnMinCharPos - 1;
+ int nRunVisibleEndChar = nCharPos[0];
while( nValid[0] && (nLevel > 0))
{
// find best fallback level
@@ -1864,6 +1910,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
nStartOld[0] = nStartNew[0];
nValid[0] = mpLayouts[0]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[0], &nGlyphAdv[0], &nCharPos[0] );
+#ifdef MULTI_SL_DEBUG
+ if (nValid[0]) fprintf(mslLog(), "layout[0]->GetNextGlyphs %d,%d x%d a%d c%d %x\n", nStartOld[0], nStartNew[0], aPos.X(), nGlyphAdv[0], nCharPos[0], rArgs.mpStr[nCharPos[0]]);
+#endif
if( !nValid[0] )
break;
}
@@ -1881,7 +1930,9 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
int nOrigCharPos = nCharPos[n];
nValid[n] = mpLayouts[n]->GetNextGlyphs( 1, &nDummy, aPos,
nStartNew[n], &nGlyphAdv[n], &nCharPos[n] );
-
+#ifdef MULTI_SL_DEBUG
+ if (nValid[n]) fprintf(mslLog(), "layout[%d]->GetNextGlyphs %d,%d a%d c%d %x\n", n, nStartOld[n], nStartNew[n], nGlyphAdv[n], nCharPos[n], rArgs.mpStr[nCharPos[n]]);
+#endif
// break after last glyph of active layout
if( !nValid[n] )
{
@@ -1927,6 +1978,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
{ maFallbackRuns[0].NextRun(); break; }
bKeepNotDef = bNeedFallback;
}
+ // check for reordered glyphs
+ if (aMultiArgs.mpDXArray &&
+ nRunVisibleEndChar < mnEndCharPos &&
+ nRunVisibleEndChar >= mnMinCharPos &&
+ nCharPos[n] < mnEndCharPos &&
+ nCharPos[n] >= mnMinCharPos)
+ {
+ if (vRtl[nActiveCharPos - mnMinCharPos])
+ {
+ if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos]
+ >= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos])
+ {
+ nRunVisibleEndChar = nCharPos[n];
+ }
+ }
+ else if (aMultiArgs.mpDXArray[nRunVisibleEndChar-mnMinCharPos]
+ <= aMultiArgs.mpDXArray[nCharPos[n] - mnMinCharPos])
+ {
+ nRunVisibleEndChar = nCharPos[n];
+ }
+ }
}
// if a justification array is available
@@ -1936,16 +2008,40 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
// the run advance is the width from the first char
// in the run to the first char in the next run
nRunAdvance = 0;
- const bool bLTR = (nActiveCharPos < nCharPos[0]);
+#ifdef MULTI_SL_DEBUG
+ const bool bLTR = !(vRtl[nActiveCharPos - mnMinCharPos]);//(nActiveCharPos < nCharPos[0]);
+ int nOldRunAdv = 0;
int nDXIndex = nCharPos[0] - mnMinCharPos - bLTR;
if( nDXIndex >= 0 )
- nRunAdvance += aMultiArgs.mpDXArray[ nDXIndex ];
+ nOldRunAdv += aMultiArgs.mpDXArray[ nDXIndex ];
nDXIndex = nActiveCharPos - mnMinCharPos - bLTR;
if( nDXIndex >= 0 )
- nRunAdvance -= aMultiArgs.mpDXArray[ nDXIndex ];
+ nOldRunAdv -= aMultiArgs.mpDXArray[ nDXIndex ];
if( !bLTR )
- nRunAdvance = -nRunAdvance;
-
+ nOldRunAdv = -nOldRunAdv;
+#endif
+ if (vRtl[nActiveCharPos - mnMinCharPos])
+ {
+ if (nRunVisibleEndChar > mnMinCharPos && nRunVisibleEndChar <= mnEndCharPos)
+ nRunAdvance -= aMultiArgs.mpDXArray[nRunVisibleEndChar - 1 - mnMinCharPos];
+ if (nLastRunEndChar > mnMinCharPos && nLastRunEndChar <= mnEndCharPos)
+ nRunAdvance += aMultiArgs.mpDXArray[nLastRunEndChar - 1 - mnMinCharPos];
+#ifdef MULTI_SL_DEBUG
+ fprintf(mslLog(), "rtl visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar-1, nRunVisibleEndChar-1, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv);
+#endif
+ }
+ else
+ {
+ if (nRunVisibleEndChar >= mnMinCharPos)
+ nRunAdvance += aMultiArgs.mpDXArray[nRunVisibleEndChar - mnMinCharPos];
+ if (nLastRunEndChar >= mnMinCharPos)
+ nRunAdvance -= aMultiArgs.mpDXArray[nLastRunEndChar - mnMinCharPos];
+#ifdef MULTI_SL_DEBUG
+ fprintf(mslLog(), "visible %d-%d,%d-%d adv%d(%d)\n", nLastRunEndChar, nRunVisibleEndChar, nActiveCharPos - bLTR, nCharPos[0] - bLTR, nRunAdvance, nOldRunAdv);
+#endif
+ }
+ nLastRunEndChar = nRunVisibleEndChar;
+ nRunVisibleEndChar = nCharPos[0];
// the requested width is still in pixel units
// => convert it to base level font units
nRunAdvance *= mnUnitsPerPixel;
@@ -1963,9 +2059,27 @@ void MultiSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
// prepare for next fallback run
nActiveCharPos = nCharPos[0];
+ // it essential that the runs don't get ahead of themselves and in the
+ // if( bKeepNotDef && !bNeedFallback ) statement above, the next run may
+ // have already been reached on the base level
for( int i = nFBLevel; --i >= 0;)
- if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) )
- maFallbackRuns[i].NextRun();
+ {
+ if (maFallbackRuns[i].GetRun(&nRunStart, &nRunEnd, &bRtl))
+ {
+ if (bRtl)
+ {
+ if (nRunStart > nActiveCharPos)
+ maFallbackRuns[i].NextRun();
+ }
+ else
+ {
+ if (nRunEnd <= nActiveCharPos)
+ maFallbackRuns[i].NextRun();
+ }
+ }
+ }
+// if( !maFallbackRuns[i].PosIsInRun( nActiveCharPos ) )
+// maFallbackRuns[i].NextRun();
}
mpLayouts[0]->Simplify( true );
diff --git a/vcl/source/glyphs/gcach_ftyp.cxx b/vcl/source/glyphs/gcach_ftyp.cxx
index d149ee26284f..712c2334b35c 100644
--- a/vcl/source/glyphs/gcach_ftyp.cxx
+++ b/vcl/source/glyphs/gcach_ftyp.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_ftyp.cxx,v $
- * $Revision: 1.151 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -353,7 +350,7 @@ FT_FaceRec_* FtFontInfo::GetFaceFT()
maFaceFT = NULL;
}
- return maFaceFT;
+ return maFaceFT;
}
// -----------------------------------------------------------------------
@@ -1058,7 +1055,7 @@ static inline void SplitGlyphFlags( const FreetypeServerFont& rFont, int& nGlyph
// -----------------------------------------------------------------------
int FreetypeServerFont::ApplyGlyphTransform( int nGlyphFlags,
- FT_GlyphRec_* pGlyphFT, bool bForBitmapProcessing ) const
+ FT_Glyph pGlyphFT, bool bForBitmapProcessing ) const
{
int nAngle = GetFontSelData().mnOrientation;
// shortcut most common case
@@ -1130,9 +1127,9 @@ int FreetypeServerFont::ApplyGlyphTransform( int nGlyphFlags,
else
{
// FT<=2005 ignores transforms for bitmaps, so do it manually
- FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast<FT_BitmapGlyph&>(pGlyphFT);
- rBmpGlyphFT->left += (aVector.x + 32) >> 6;
- rBmpGlyphFT->top += (aVector.y + 32) >> 6;
+ FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast<FT_BitmapGlyph>(pGlyphFT);
+ pBmpGlyphFT->left += (aVector.x + 32) >> 6;
+ pBmpGlyphFT->top += (aVector.y + 32) >> 6;
}
return nAngle;
@@ -1425,6 +1422,20 @@ bool FreetypeServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap
FT_Glyph_Transform( pGlyphFT, &aMatrix, NULL );
}
+ // Check for zero area bounding boxes as this crashes some versions of FT.
+ // This also provides a handy short cut as much of the code following
+ // becomes an expensive nop when a glyph covers no pixels.
+ FT_BBox cbox;
+ FT_Glyph_Get_CBox(pGlyphFT, ft_glyph_bbox_unscaled, &cbox);
+
+ if( (cbox.xMax - cbox.xMin) == 0 || (cbox.yMax - cbox.yMin == 0) )
+ {
+ nAngle = 0;
+ memset(&rRawBitmap, 0, sizeof rRawBitmap);
+ FT_Done_Glyph( pGlyphFT );
+ return true;
+ }
+
if( pGlyphFT->format != FT_GLYPH_FORMAT_BITMAP )
{
if( pGlyphFT->format == FT_GLYPH_FORMAT_OUTLINE )
@@ -1440,12 +1451,12 @@ bool FreetypeServerFont::GetGlyphBitmap1( int nGlyphIndex, RawBitmap& rRawBitmap
}
}
- const FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast<const FT_BitmapGlyph&>(pGlyphFT);
+ const FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast<const FT_BitmapGlyph>(pGlyphFT);
// NOTE: autohinting in FT<=2.0.2 miscalculates the offsets below by +-1
- rRawBitmap.mnXOffset = +rBmpGlyphFT->left;
- rRawBitmap.mnYOffset = -rBmpGlyphFT->top;
+ rRawBitmap.mnXOffset = +pBmpGlyphFT->left;
+ rRawBitmap.mnYOffset = -pBmpGlyphFT->top;
- const FT_Bitmap& rBitmapFT = rBmpGlyphFT->bitmap;
+ const FT_Bitmap& rBitmapFT = pBmpGlyphFT->bitmap;
rRawBitmap.mnHeight = rBitmapFT.rows;
rRawBitmap.mnBitCount = 1;
if( mbArtBold && !pFTEmbolden )
@@ -1595,11 +1606,11 @@ bool FreetypeServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap
}
}
- const FT_BitmapGlyph& rBmpGlyphFT = reinterpret_cast<const FT_BitmapGlyph&>(pGlyphFT);
- rRawBitmap.mnXOffset = +rBmpGlyphFT->left;
- rRawBitmap.mnYOffset = -rBmpGlyphFT->top;
+ const FT_BitmapGlyph pBmpGlyphFT = reinterpret_cast<const FT_BitmapGlyph>(pGlyphFT);
+ rRawBitmap.mnXOffset = +pBmpGlyphFT->left;
+ rRawBitmap.mnYOffset = -pBmpGlyphFT->top;
- const FT_Bitmap& rBitmapFT = rBmpGlyphFT->bitmap;
+ const FT_Bitmap& rBitmapFT = pBmpGlyphFT->bitmap;
rRawBitmap.mnHeight = rBitmapFT.rows;
rRawBitmap.mnWidth = rBitmapFT.width;
rRawBitmap.mnBitCount = 8;
@@ -1698,60 +1709,55 @@ bool FreetypeServerFont::GetGlyphBitmap8( int nGlyphIndex, RawBitmap& rRawBitmap
// -----------------------------------------------------------------------
// TODO: replace with GetFontCharMap()
-ULONG FreetypeServerFont::GetFontCodeRanges( sal_uInt32* pCodes ) const
+bool FreetypeServerFont::GetFontCodeRanges( CmapResult& rResult ) const
{
- CmapResult aResult;
- aResult.mnPairCount = 0;
- aResult.mpPairCodes = NULL;
- aResult.mbSymbolic = mpFontInfo->IsSymbolFont();
+ rResult.mbSymbolic = mpFontInfo->IsSymbolFont();
+ // TODO: is the full CmapResult needed on platforms calling this?
if( FT_IS_SFNT( maFaceFT ) )
{
ULONG nLength = 0;
const unsigned char* pCmap = mpFontInfo->GetTable( "cmap", &nLength );
- if( pCmap && nLength && ParseCMAP( pCmap, nLength, aResult ) )
- {
- // copy the ranges into the provided array...
- if( pCodes )
- for( int i = 0; i < 2*aResult.mnPairCount; ++i )
- pCodes[ i ] = aResult.mpPairCodes[ i ];
-
- delete[] aResult.mpPairCodes;
- }
+ if( pCmap && (nLength > 0) )
+ if( ParseCMAP( pCmap, nLength, rResult ) )
+ return true;
}
- if( aResult.mnPairCount <= 0 )
+ typedef std::vector<sal_uInt32> U32Vector;
+ U32Vector aCodes;
+
+ // FT's coverage is available since FT>=2.1.0 (OOo-baseline>=2.1.4 => ok)
+ aCodes.reserve( 0x1000 );
+ FT_UInt nGlyphIndex;
+ for( sal_uInt32 cCode = FT_Get_First_Char( maFaceFT, &nGlyphIndex );; )
{
- if( aResult.mbSymbolic )
- {
- // we usually get here for Type1 symbol fonts
- if( pCodes )
- {
- pCodes[ 0 ] = 0xF020;
- pCodes[ 1 ] = 0xF100;
- }
- aResult.mnPairCount = 1;
- }
- else
- {
- // we have to use the brute force method...
- for( sal_uInt32 cCode = 0x0020;; )
- {
- for(; cCode<0xFFF0 && !GetGlyphIndex( cCode ); ++cCode ) ;
- if( cCode >= 0xFFF0 )
- break;
- ++aResult.mnPairCount;
- if( pCodes )
- *(pCodes++) = cCode;
- for(; cCode<0xFFF0 && GetGlyphIndex( cCode ); ++cCode ) ;
- if( pCodes )
- *(pCodes++) = cCode;
- }
- }
+ if( !nGlyphIndex )
+ break;
+ aCodes.push_back( cCode ); // first code inside range
+ sal_uInt32 cNext = cCode;
+ do cNext = FT_Get_Next_Char( maFaceFT, cCode, &nGlyphIndex ); while( cNext == ++cCode );
+ aCodes.push_back( cCode ); // first code outside range
+ cCode = cNext;
}
- return aResult.mnPairCount;
+ const int nCount = aCodes.size();
+ if( !nCount) {
+ if( !rResult.mbSymbolic )
+ return false;
+
+ // we usually get here for Type1 symbol fonts
+ aCodes.push_back( 0xF020 );
+ aCodes.push_back( 0xF100 );
+ }
+
+ sal_uInt32* pCodes = new sal_uInt32[ nCount ];
+ for( int i = 0; i < nCount; ++i )
+ pCodes[i] = aCodes[i];
+ rResult.mpRangeCodes = pCodes;
+ rResult.mnRangeCount = nCount / 2;
+ return true;
}
+
// -----------------------------------------------------------------------
// kerning stuff
// -----------------------------------------------------------------------
diff --git a/vcl/source/glyphs/gcach_ftyp.hxx b/vcl/source/glyphs/gcach_ftyp.hxx
index 660f772d43ed..936abdc02e59 100644
--- a/vcl/source/glyphs/gcach_ftyp.hxx
+++ b/vcl/source/glyphs/gcach_ftyp.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_ftyp.hxx,v $
- * $Revision: 1.41 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -208,7 +205,7 @@ protected:
int ApplyGlyphTransform( int nGlyphFlags, FT_GlyphRec_*, bool ) const;
virtual void InitGlyphData( int nGlyphIndex, GlyphData& ) const;
- virtual ULONG GetFontCodeRanges( sal_uInt32* pCodes ) const;
+ virtual bool GetFontCodeRanges( CmapResult& ) const;
bool ApplyGSUB( const ImplFontSelectData& );
virtual ServerFontLayoutEngine* GetLayoutEngine();
diff --git a/vcl/source/glyphs/gcach_layout.cxx b/vcl/source/glyphs/gcach_layout.cxx
index 6bbf78f819b0..364a1fcd3beb 100755
--- a/vcl/source/glyphs/gcach_layout.cxx
+++ b/vcl/source/glyphs/gcach_layout.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_layout.cxx,v $
- * $Revision: 1.46 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_rbmp.cxx b/vcl/source/glyphs/gcach_rbmp.cxx
index 9cba5332f281..1419a205f9a6 100755
--- a/vcl/source/glyphs/gcach_rbmp.cxx
+++ b/vcl/source/glyphs/gcach_rbmp.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_rbmp.cxx,v $
- * $Revision: 1.10.114.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_vdev.cxx b/vcl/source/glyphs/gcach_vdev.cxx
index 31e0824ea0ba..1ac9ee9bf0a6 100644
--- a/vcl/source/glyphs/gcach_vdev.cxx
+++ b/vcl/source/glyphs/gcach_vdev.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_vdev.cxx,v $
- * $Revision: 1.20 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/gcach_vdev.hxx b/vcl/source/glyphs/gcach_vdev.hxx
index ae90c23d46a4..01ebc0f704cd 100644
--- a/vcl/source/glyphs/gcach_vdev.hxx
+++ b/vcl/source/glyphs/gcach_vdev.hxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: gcach_vdev.hxx,v $
- * $Revision: 1.11 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/vcl/source/glyphs/glyphcache.cxx b/vcl/source/glyphs/glyphcache.cxx
index acfc8e3ac38d..e3e840e40730 100644
--- a/vcl/source/glyphs/glyphcache.cxx
+++ b/vcl/source/glyphs/glyphcache.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: glyphcache.cxx,v $
- * $Revision: 1.44 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -41,6 +38,10 @@
#include <vcl/bitmap.hxx>
#include <vcl/outfont.hxx>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_features.hxx>
+#endif
+
#include <rtl/ustring.hxx> // used only for string=>hashvalue
#include <osl/file.hxx>
#include <tools/debug.hxx>
@@ -85,12 +86,23 @@ size_t GlyphCache::IFSD_Hash::operator()( const ImplFontSelectData& rFontSelData
{
// TODO: is it worth to improve this hash function?
sal_IntPtr nFontId = reinterpret_cast<sal_IntPtr>( rFontSelData.mpFontData );
+#ifdef ENABLE_GRAPHITE
+ if (rFontSelData.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND)
+ {
+ rtl::OString aFeatName = rtl::OUStringToOString( rFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
+ nFontId ^= aFeatName.hashCode();
+ }
+#endif
size_t nHash = nFontId << 8;
nHash += rFontSelData.mnHeight;
nHash += rFontSelData.mnOrientation;
nHash += rFontSelData.mbVertical;
nHash += rFontSelData.meItalic;
nHash += rFontSelData.meWeight;
+#ifdef ENABLE_GRAPHITE
+ nHash += rFontSelData.meLanguage;
+#endif
return nHash;
}
@@ -121,7 +133,16 @@ bool GlyphCache::IFSD_Equal::operator()( const ImplFontSelectData& rA, const Imp
if( (rA.mnWidth != rB.mnWidth)
&& ((rA.mnHeight != rB.mnWidth) || (rA.mnWidth != 0)) )
return false;
-
+#ifdef ENABLE_GRAPHITE
+ if (rA.meLanguage != rB.meLanguage)
+ return false;
+ // check for features
+ if ((rA.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND ||
+ rB.maTargetName.Search(grutils::GrFeatureParser::FEAT_PREFIX)
+ != STRING_NOTFOUND) && rA.maTargetName != rB.maTargetName)
+ return false;
+#endif
return true;
}
diff --git a/vcl/source/glyphs/graphite_adaptors.cxx b/vcl/source/glyphs/graphite_adaptors.cxx
new file mode 100644
index 000000000000..67330698ffdf
--- /dev/null
+++ b/vcl/source/glyphs/graphite_adaptors.cxx
@@ -0,0 +1,327 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: Implements the Graphite interfaces with access to the
+// platform's font and graphics systems.
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+// Standard Library
+#include <string>
+#include <cassert>
+// Libraries
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <i18npool/mslangid.hxx>
+// Platform
+#ifndef MSC
+#include <saldisp.hxx>
+
+#include <vcl/salgdi.hxx>
+
+#include <freetype/ftsynth.h>
+
+// Module
+#include "gcach_ftyp.hxx"
+
+#include <vcl/graphite_features.hxx>
+#include <vcl/graphite_adaptors.hxx>
+
+// Module private type definitions and forward declarations.
+//
+using gr::GrResult;
+namespace
+{
+ inline float from_hinted(const int x) {
+ return static_cast<float>(x + 32) / 64.0;
+ }
+ typedef std::hash_map<long,bool> SilfMap;
+ SilfMap sSilfMap;
+}
+
+// class CharacterRenderProperties implentation.
+//
+FontProperties::FontProperties(const FreetypeServerFont &font) throw()
+{
+ clrFore = gr::kclrBlack;
+ clrBack = gr::kclrTransparent;
+
+ pixHeight = from_hinted(font.GetMetricsFT().height);
+
+ switch (font.GetFontSelData().meWeight)
+ {
+ case WEIGHT_SEMIBOLD: case WEIGHT_BOLD:
+ case WEIGHT_ULTRABOLD: case WEIGHT_BLACK:
+ fBold = true;
+ break;
+ default :
+ fBold = false;
+ }
+
+ switch (font.GetFontSelData().meItalic)
+ {
+ case ITALIC_NORMAL: case ITALIC_OBLIQUE:
+ fItalic = true;
+ break;
+ default :
+ fItalic = false;
+ }
+
+ // Get the font name.
+ const sal_Unicode * name = font.GetFontSelData().maName.GetBuffer();
+ const size_t name_sz = std::min(sizeof szFaceName/sizeof(wchar_t)-1,
+ size_t(font.GetFontSelData().maName.Len()));
+
+ std::copy(name, name + name_sz, szFaceName);
+ szFaceName[name_sz] = '\0';
+}
+
+// class GraphiteFontAdaptor implementaion.
+//
+GraphiteFontAdaptor::GraphiteFontAdaptor(ServerFont & sfont, const sal_Int32 dpiX, const sal_Int32 dpiY)
+ : mrFont(static_cast<FreetypeServerFont &>(sfont)),
+ maFontProperties(static_cast<FreetypeServerFont &>(sfont)),
+ mnDpiX(dpiX),
+ mnDpiY(dpiY),
+ mfAscent(from_hinted(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().ascender)),
+ mfDescent(from_hinted(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().descender)),
+ mfEmUnits(static_cast<FreetypeServerFont &>(sfont).GetMetricsFT().y_ppem),
+ mpFeatures(NULL)
+{
+ //std::wstring face_name(maFontProperties.szFaceName);
+ const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( sfont.GetFontSelData().meLanguage );
+#ifdef DEBUG
+ printf("GraphiteFontAdaptor %lx\n", (long)this);
+#endif
+ rtl::OString name = rtl::OUStringToOString(
+ sfont.GetFontSelData().maTargetName, RTL_TEXTENCODING_UTF8 );
+ sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1;
+ if (nFeat > 0)
+ {
+ rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat);
+ mpFeatures = new grutils::GrFeatureParser(*this, aFeat.getStr(), aLang.getStr());
+#ifdef DEBUG
+ printf("GraphiteFontAdaptor %s/%s/%s %x language %d features %d errors\n",
+ rtl::OUStringToOString( sfont.GetFontSelData().maName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( sfont.GetFontSelData().maTargetName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( sfont.GetFontSelData().maSearchName,
+ RTL_TEXTENCODING_UTF8 ).getStr(),
+ sfont.GetFontSelData().meLanguage,
+ (int)mpFeatures->getFontFeatures(NULL), mpFeatures->parseErrors());
+#endif
+ }
+ else
+ {
+ mpFeatures = new grutils::GrFeatureParser(*this, aLang.getStr());
+ }
+}
+
+GraphiteFontAdaptor::GraphiteFontAdaptor(const GraphiteFontAdaptor &rhs) throw()
+ : Font(rhs),
+ mrFont (rhs.mrFont), maFontProperties(rhs.maFontProperties),
+ mnDpiX(rhs.mnDpiX), mnDpiY(rhs.mnDpiY),
+ mfAscent(rhs.mfAscent), mfDescent(rhs.mfDescent), mfEmUnits(rhs.mfEmUnits),
+ mpFeatures(NULL)
+{
+ if (rhs.mpFeatures) mpFeatures = new grutils::GrFeatureParser(*(rhs.mpFeatures));
+}
+
+
+GraphiteFontAdaptor::~GraphiteFontAdaptor() throw()
+{
+ maGlyphMetricMap.clear();
+ if (mpFeatures) delete mpFeatures;
+ mpFeatures = NULL;
+}
+
+void GraphiteFontAdaptor::UniqueCacheInfo(std::wstring & face_name_out, bool & bold_out, bool & italic_out)
+{
+ face_name_out = maFontProperties.szFaceName;
+ bold_out = maFontProperties.fBold;
+ italic_out = maFontProperties.fItalic;
+}
+
+bool GraphiteFontAdaptor::IsGraphiteEnabledFont(ServerFont & font) throw()
+{
+ // NOTE: this assumes that the same FTFace pointer won't be reused,
+ // so FtFontInfo::ReleaseFaceFT must only be called at shutdown.
+ FreetypeServerFont & aFtFont = dynamic_cast<FreetypeServerFont &>(font);
+ FT_Face aFace = reinterpret_cast<FT_FaceRec_*>(aFtFont.GetFtFace());
+ SilfMap::iterator i = sSilfMap.find(reinterpret_cast<long>(aFace));
+ if (i != sSilfMap.end())
+ {
+#ifdef DEBUG
+ if (static_cast<bool>(aFtFont.GetTable("Silf", 0)) != (*i).second)
+ printf("Silf cache font mismatch\n");
+#endif
+ return (*i).second;
+ }
+ bool bHasSilf = aFtFont.GetTable("Silf", 0);
+ sSilfMap[reinterpret_cast<long>(aFace)] = bHasSilf;
+ return bHasSilf;
+}
+
+
+gr::Font * GraphiteFontAdaptor::copyThis() {
+ return new GraphiteFontAdaptor(*this);
+}
+
+
+unsigned int GraphiteFontAdaptor::getDPIx() {
+ return mnDpiX;
+}
+
+
+unsigned int GraphiteFontAdaptor::getDPIy() {
+ return mnDpiY;
+}
+
+
+float GraphiteFontAdaptor::ascent() {
+ return mfAscent;
+}
+
+
+float GraphiteFontAdaptor::descent() {
+ return mfDescent;
+}
+
+
+bool GraphiteFontAdaptor::bold() {
+ return maFontProperties.fBold;
+}
+
+
+bool GraphiteFontAdaptor::italic() {
+ return maFontProperties.fItalic;
+}
+
+
+float GraphiteFontAdaptor::height() {
+ return maFontProperties.pixHeight;
+}
+
+
+void GraphiteFontAdaptor::getFontMetrics(float * ascent_out, float * descent_out, float * em_square_out) {
+ if (ascent_out) *ascent_out = mfAscent;
+ if (descent_out) *descent_out = mfDescent;
+ if (em_square_out) *em_square_out = mfEmUnits;
+}
+
+
+const void * GraphiteFontAdaptor::getTable(gr::fontTableId32 table_id, size_t * buffer_sz)
+{
+ char tag_name[5] = {char(table_id >> 24), char(table_id >> 16), char(table_id >> 8), char(table_id), 0};
+ ULONG temp = *buffer_sz;
+
+ const void * const tbl_buf = static_cast<FreetypeServerFont &>(mrFont).GetTable(tag_name, &temp);
+ *buffer_sz = temp;
+
+ return tbl_buf;
+}
+
+#define fix26_6(x) (x >> 6) + (x & 32 ? (x > 0 ? 1 : 0) : (x < 0 ? -1 : 0))
+
+// Return the glyph's metrics in pixels.
+void GraphiteFontAdaptor::getGlyphMetrics(gr::gid16 nGlyphId, gr::Rect & aBounding, gr::Point & advances)
+{
+ // Graphite gets really confused if the glyphs have been transformed, so
+ // if orientation has been set we can't use the font's glyph cache
+ // unfortunately the font selection data, doesn't always have the orientation
+ // set, even if it was when the glyphs were cached, so we use our own cache.
+
+// const GlyphMetric & metric = mrFont.GetGlyphMetric(nGlyphId);
+//
+// aBounding.right = aBounding.left = metric.GetOffset().X();
+// aBounding.bottom = aBounding.top = -metric.GetOffset().Y();
+// aBounding.right += metric.GetSize().Width();
+// aBounding.bottom -= metric.GetSize().Height();
+//
+// advances.x = metric.GetDelta().X();
+// advances.y = -metric.GetDelta().Y();
+
+ GlyphMetricMap::const_iterator gm_itr = maGlyphMetricMap.find(nGlyphId);
+ if (gm_itr != maGlyphMetricMap.end())
+ {
+ // We've cached the results from last time.
+ aBounding = gm_itr->second.first;
+ advances = gm_itr->second.second;
+ }
+ else
+ {
+ // We need to look up the glyph.
+ FT_Int nLoadFlags = mrFont.GetLoadFlags();
+
+ FT_Face aFace = reinterpret_cast<FT_Face>(mrFont.GetFtFace());
+ if (!aFace)
+ {
+ aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0;
+ advances.x = advances.y = 0;
+ return;
+ }
+ FT_Error aStatus = -1;
+ aStatus = FT_Load_Glyph(aFace, nGlyphId, nLoadFlags);
+ if( aStatus != FT_Err_Ok || (!aFace->glyph))
+ {
+ aBounding.top = aBounding.bottom = aBounding.left = aBounding.right = 0;
+ advances.x = advances.y = 0;
+ return;
+ }
+ // check whether we need synthetic bold/italic otherwise metric is wrong
+ if (mrFont.NeedsArtificialBold())
+ FT_GlyphSlot_Embolden(aFace->glyph);
+
+ if (mrFont.NeedsArtificialItalic())
+ FT_GlyphSlot_Oblique(aFace->glyph);
+
+ const FT_Glyph_Metrics &gm = aFace->glyph->metrics;
+
+ // Fill out the bounding box an advances.
+ aBounding.top = aBounding.bottom = fix26_6(gm.horiBearingY);
+ aBounding.bottom -= fix26_6(gm.height);
+ aBounding.left = aBounding.right = fix26_6(gm.horiBearingX);
+ aBounding.right += fix26_6(gm.width);
+ advances.x = fix26_6(gm.horiAdvance);
+ advances.y = 0;
+
+ // Now add an entry to our metrics map.
+ maGlyphMetricMap[nGlyphId] = std::make_pair(aBounding, advances);
+ }
+}
+
+#endif
diff --git a/vcl/source/glyphs/graphite_cache.cxx b/vcl/source/glyphs/graphite_cache.cxx
new file mode 100644
index 000000000000..c1bca0f87cb8
--- /dev/null
+++ b/vcl/source/glyphs/graphite_cache.cxx
@@ -0,0 +1,198 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#ifdef MSC
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <tools/debug.hxx>
+#include <vcl/sallayout.hxx>
+
+#include <graphite/GrClient.h>
+#include <graphite/Segment.h>
+
+#include <rtl/ustring.hxx>
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_cache.hxx>
+
+#include "graphite_textsrc.hxx"
+
+GrSegRecord::GrSegRecord(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl)
+ : m_rope(rope), m_text(textSrc), m_seg(seg), m_nextKey(NULL),
+ m_fontScale(0.0f), mbIsRtl(bIsRtl), m_lockCount(0)
+{
+ m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter();
+ m_startChar = seg->startCharacter();
+}
+
+GrSegRecord::~GrSegRecord()
+{
+ clear();
+}
+
+void GrSegRecord::reuse(rtl::OUString * rope, TextSourceAdaptor * textSrc, gr::Segment * seg, bool bIsRtl)
+{
+ clear();
+ mnWidth = 0;
+ m_rope = rope;
+ m_text = textSrc;
+ m_seg = seg;
+ m_nextKey = NULL;
+ m_pStr = textSrc->getLayoutArgs().mpStr + seg->startCharacter();
+ m_startChar = seg->startCharacter();
+ mbIsRtl = bIsRtl;
+}
+
+void GrSegRecord::clearVectors()
+{
+ mvGlyphs.clear();
+ mvCharDxs.clear();
+ mvChar2BaseGlyph.clear();
+ mvGlyph2Char.clear();
+}
+
+void GrSegRecord::clear()
+{
+#ifdef GR_DEBUG_TEXT
+ if (m_lockCount != 0)
+ OutputDebugString("GrSegRecord locked!");
+#endif
+ clearVectors();
+ delete m_rope;
+ delete m_seg;
+ delete m_text;
+ m_rope = NULL;
+ m_seg = NULL;
+ m_text = NULL;
+ m_fontScale = 0.0f;
+ m_lockCount = 0;
+}
+
+GrSegRecord * GraphiteSegmentCache::cacheSegment(TextSourceAdaptor * adapter, gr::Segment * seg, bool bIsRtl)
+{
+ GrSegRecord * record = NULL;
+ // We keep a record of the oldest key and the last key added
+ // when the next key is added, the record for the prevKey's m_nextKey field
+ // is updated to the newest key so that m_oldestKey can be updated to the
+ // next oldest key when the record for m_oldestKey is deleted
+ if (m_segMap.size() > SEG_CACHE_SIZE)
+ {
+ GraphiteSegMap::iterator oldestPair = m_segMap.find(reinterpret_cast<long>(m_oldestKey));
+ // oldest record may no longer exist if a buffer was changed
+ if (oldestPair != m_segMap.end())
+ {
+ record = oldestPair->second;
+ m_segMap.erase(reinterpret_cast<long>(m_oldestKey));
+ GrRMEntry range = m_ropeMap.equal_range((*(record->m_rope)).hashCode());
+ while (range.first != range.second)
+ {
+ if (range.first->second == record)
+ {
+ m_ropeMap.erase(range.first);
+ break;
+ }
+ ++range.first;
+ }
+ m_oldestKey = record->m_nextKey;
+ // record will be reused, so don't delete
+ }
+ }
+
+
+// const int seg_char_limit = min(adapter->maLayoutArgs().mnLength,
+// adapter->maLayoutArgs().mnEndCharPos
+// + GraphiteLayout::EXTRA_CONTEXT_LENGTH);
+// if (seg->stopCharacter() - seg->startCharacter() <= 0)
+// OutputDebugString("Invalid seg indices\n");
+ rtl::OUString * pRope = new rtl::OUString(adapter->getLayoutArgs().mpStr + seg->startCharacter(),
+ seg->stopCharacter() - seg->startCharacter());
+ if (!pRope) return NULL;
+ bool reuse = false;
+ if (record)
+ record->reuse(pRope, adapter, seg, bIsRtl);
+ else
+ record = new GrSegRecord(pRope, adapter, seg, bIsRtl);
+ if (!record)
+ {
+ delete pRope;
+ return NULL;
+ }
+ GraphiteSegMap::iterator iMap =
+ m_segMap.find(reinterpret_cast<long>(record->m_pStr));
+ if (iMap != m_segMap.end())
+ {
+ // the buffer has changed, so the old cached Segment is useless
+ reuse = true;
+ GrSegRecord * found = iMap->second;
+ // Note: we reuse the old next key to avoid breaking our history
+ // chain. This means it will be prematurely deleted, but this is
+ // unlikely to happen very often.
+ record->m_nextKey = found->m_nextKey;
+ // overwrite the old record
+ m_segMap[reinterpret_cast<long>(record->m_pStr)] = record;
+ // erase the old rope key and save the new one
+ GrRMEntry range = m_ropeMap.equal_range((*(found->m_rope)).hashCode());
+ while (range.first != range.second)
+ {
+ if (range.first->second == found)
+ {
+ m_ropeMap.erase(range.first);
+ break;
+ }
+ ++range.first;
+ }
+ GraphiteRopeMap::value_type mapEntry(record->m_rope->hashCode(), record);
+ m_ropeMap.insert(mapEntry);
+ // remove the old record
+ delete found;
+ record->m_lockCount++;
+ return record;
+ }
+ m_segMap[reinterpret_cast<long>(record->m_pStr)] = record;
+ GraphiteRopeMap::value_type mapEntry((*(record->m_rope)).hashCode(), record);
+ m_ropeMap.insert(mapEntry);
+
+ if (m_oldestKey == NULL)
+ {
+ m_oldestKey = record->m_pStr;
+ m_prevKey = record->m_pStr;
+ }
+ else if (reuse == false)
+ {
+ DBG_ASSERT(m_segMap.count(reinterpret_cast<long>(m_prevKey)),
+ "Previous key got lost somehow!");
+ m_segMap.find(reinterpret_cast<long>(m_prevKey))
+ ->second->m_nextKey = record->m_pStr;
+ m_prevKey = record->m_pStr;
+ }
+ record->m_lockCount++;
+ return record;
+}
diff --git a/vcl/source/glyphs/graphite_features.cxx b/vcl/source/glyphs/graphite_features.cxx
new file mode 100644
index 000000000000..3c5214d3c420
--- /dev/null
+++ b/vcl/source/glyphs/graphite_features.cxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description:
+// Parse a string of features specified as & separated pairs.
+// e.g.
+// 1001=1&2002=2&fav1=0
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include <sal/types.h>
+
+#ifdef MSC
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <vcl/graphite_features.hxx>
+
+using namespace grutils;
+// These mustn't conflict with font name lists which use ; and ,
+const char GrFeatureParser::FEAT_PREFIX = ':';
+const char GrFeatureParser::FEAT_SEPARATOR = '&';
+const char GrFeatureParser::FEAT_ID_VALUE_SEPARATOR = '=';
+const std::string GrFeatureParser::ISO_LANG("lang");
+
+GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string lang)
+ : mnNumSettings(0), mbErrors(false)
+{
+ maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0';
+ setLang(font, lang);
+}
+
+GrFeatureParser::GrFeatureParser(gr::Font & font, const std::string features, const std::string lang)
+ : mnNumSettings(0), mbErrors(false)
+{
+ size_t nEquals = 0;
+ size_t nFeatEnd = 0;
+ size_t pos = 0;
+ maLang.rgch[0] = maLang.rgch[1] = maLang.rgch[2] = maLang.rgch[3] = '\0';
+ setLang(font, lang);
+ while (pos < features.length() && mnNumSettings < MAX_FEATURES)
+ {
+ nEquals = features.find(FEAT_ID_VALUE_SEPARATOR,pos);
+ if (nEquals == std::string::npos)
+ {
+ mbErrors = true;
+ break;
+ }
+ // check for a lang=xxx specification
+ if (features.compare(pos, nEquals - pos, ISO_LANG) == 0)
+ {
+ pos = nEquals + 1;
+ nFeatEnd = features.find(FEAT_SEPARATOR, pos);
+ if (nFeatEnd == std::string::npos)
+ {
+ nFeatEnd = features.length();
+ }
+ if (nFeatEnd - pos > 3)
+ mbErrors = true;
+ else
+ {
+ gr::isocode aLang = maLang;
+ for (size_t i = pos; i < nFeatEnd; i++)
+ aLang.rgch[i-pos] = features[i];
+ std::pair<gr::LanguageIterator,gr::LanguageIterator> aSupported
+ = font.getSupportedLanguages();
+ gr::LanguageIterator iL = aSupported.first;
+ while (iL != aSupported.second)
+ {
+ gr::isocode aSupportedLang = *iL;
+ // here we only expect full 3 letter codes
+ if (aLang.rgch[0] == aSupportedLang.rgch[0] &&
+ aLang.rgch[1] == aSupportedLang.rgch[1] &&
+ aLang.rgch[2] == aSupportedLang.rgch[2] &&
+ aLang.rgch[3] == aSupportedLang.rgch[3]) break;
+ ++iL;
+ }
+ if (iL == aSupported.second) mbErrors = true;
+ else maLang = aLang;
+ }
+ }
+ else
+ {
+ if (isCharId(features, pos, nEquals - pos))
+ maSettings[mnNumSettings].id = getCharId(features, pos, nEquals - pos);
+ else maSettings[mnNumSettings].id = getIntValue(features, pos, nEquals - pos);
+ pos = nEquals + 1;
+ nFeatEnd = features.find(FEAT_SEPARATOR, pos);
+ if (nFeatEnd == std::string::npos)
+ {
+ nFeatEnd = features.length();
+ }
+ if (isCharId(features, pos, nFeatEnd - pos))
+ maSettings[mnNumSettings].value = getCharId(features, pos, nFeatEnd - pos);
+ else
+ maSettings[mnNumSettings].value= getIntValue(features, pos, nFeatEnd - pos);
+ if (isValid(font, maSettings[mnNumSettings]))
+ mnNumSettings++;
+ else
+ mbErrors = true;
+ }
+ pos = nFeatEnd + 1;
+ }
+}
+
+void GrFeatureParser::setLang(gr::Font & font, const std::string & lang)
+{
+ gr::isocode aLang = {{0,0,0,0}};
+ if (lang.length() > 2)
+ {
+ for (size_t i = 0; i < lang.length() && i < 3; i++)
+ {
+ if (lang[i] == '-') break;
+ aLang.rgch[i] = lang[i];
+ }
+ std::pair<gr::LanguageIterator,gr::LanguageIterator> aSupported
+ = font.getSupportedLanguages();
+ gr::LanguageIterator iL = aSupported.first;
+ while (iL != aSupported.second)
+ {
+ gr::isocode aSupportedLang = *iL;
+ if (aLang.rgch[0] == aSupportedLang.rgch[0] &&
+ aLang.rgch[1] == aSupportedLang.rgch[1] &&
+ aLang.rgch[2] == aSupportedLang.rgch[2] &&
+ aLang.rgch[3] == aSupportedLang.rgch[3]) break;
+ ++iL;
+ }
+ if (iL != aSupported.second)
+ maLang = aLang;
+#ifdef DEBUG
+ else
+ printf("%s has no features\n", aLang.rgch);
+#endif
+ }
+}
+
+GrFeatureParser::GrFeatureParser(const GrFeatureParser & aCopy)
+ : maLang(aCopy.maLang), mbErrors(aCopy.mbErrors)
+{
+ mnNumSettings = aCopy.getFontFeatures(maSettings);
+}
+
+GrFeatureParser::~GrFeatureParser()
+{
+}
+
+size_t GrFeatureParser::getFontFeatures(gr::FeatureSetting settings[64]) const
+{
+ if (settings)
+ {
+ std::copy(maSettings, maSettings + mnNumSettings, settings);
+ }
+ return mnNumSettings;
+}
+
+bool GrFeatureParser::isValid(gr::Font & font, gr::FeatureSetting & setting)
+{
+ gr::FeatureIterator i = font.featureWithID(setting.id);
+ if (font.getFeatures().second == i)
+ {
+ return false;
+ }
+ std::pair< gr::FeatureSettingIterator, gr::FeatureSettingIterator >
+ validValues = font.getFeatureSettings(i);
+ gr::FeatureSettingIterator j = validValues.first;
+ while (j != validValues.second)
+ {
+ if (*j == setting.value) return true;
+ ++j;
+ }
+ return false;
+}
+
+bool GrFeatureParser::isCharId(const std::string & id, size_t offset, size_t length)
+{
+ if (length > 4) return false;
+ for (size_t i = 0; i < length; i++)
+ {
+ if (i > 0 && id[offset+i] == '\0') continue;
+ if ((id[offset+i]) < 0x20 || (id[offset+i]) < 0)
+ return false;
+ if (i==0 && id[offset+i] < 0x41)
+ return false;
+ }
+ return true;
+}
+
+int GrFeatureParser::getCharId(const std::string & id, size_t offset, size_t length)
+{
+ FeatId charId;
+ charId.num = 0;
+#ifdef WORDS_BIGENDIAN
+ for (size_t i = 0; i < length; i++)
+ {
+ charId.label[i] = id[offset+i];
+ }
+#else
+ for (size_t i = 0; i < length; i++)
+ {
+ charId.label[3-i] = id[offset+i];
+ }
+#endif
+ return charId.num;
+}
+
+int GrFeatureParser::getIntValue(const std::string & id, size_t offset, size_t length)
+{
+ int value = 0;
+ int sign = 1;
+ for (size_t i = 0; i < length; i++)
+ {
+ switch (id[offset + i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ value *= 10;
+ if (sign < 0)
+ {
+ value = -(id[offset + i] - '0');
+ sign = 1;
+ }
+ value += (id[offset + i] - '0');
+ break;
+ case '-':
+ if (i == 0)
+ sign = -1;
+ else
+ {
+ mbErrors = true;
+ break;
+ }
+ default:
+ mbErrors = true;
+ break;
+ }
+ }
+ return value;
+}
+
+
+sal_Int32 GrFeatureParser::hashCode() const
+{
+ union IsoHash { sal_Int32 mInt; gr::isocode mCode; };
+ IsoHash isoHash;
+ isoHash.mCode = maLang;
+ sal_Int32 hash = isoHash.mInt;
+ for (size_t i = 0; i < mnNumSettings; i++)
+ {
+ hash = (hash << 16) ^ ((maSettings[i].id << 8) | maSettings[i].value);
+ }
+ return hash;
+}
diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx
new file mode 100644
index 000000000000..751c3694d033
--- /dev/null
+++ b/vcl/source/glyphs/graphite_layout.cxx
@@ -0,0 +1,1367 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// Description: An implementation of the SalLayout interface that uses the
+// Graphite engine.
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Enable lots of debug info
+#ifdef DEBUG
+//#define GRLAYOUT_DEBUG 1
+//#undef NDEBUG
+#endif
+
+// Header files
+//
+// Standard Library
+#include <algorithm>
+#include <cassert>
+#include <functional>
+#include <limits>
+#include <numeric>
+#include <deque>
+
+// Platform
+#ifdef MSC
+#include <tools/svwin.h>
+#include <svsys.h>
+#endif
+
+#include <vcl/salgdi.hxx>
+
+#include <unicode/uchar.h>
+#include <unicode/ubidi.h>
+#include <unicode/uscript.h>
+
+// Graphite Libraries (must be after vcl headers on windows)
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+#include <graphite/Segment.h>
+#include <graphite/SegmentPainter.h>
+
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_features.hxx>
+#include "graphite_textsrc.hxx"
+
+
+// Module private type definitions and forward declarations.
+//
+// Module private names.
+//
+
+#ifdef GRLAYOUT_DEBUG
+FILE * grLogFile = NULL;
+FILE * grLog()
+{
+#ifdef MSC
+ std::string logFileName(getenv("TEMP"));
+ logFileName.append("\\graphitelayout.log");
+ if (grLogFile == NULL) grLogFile = fopen(logFileName.c_str(),"w");
+ else fflush(grLogFile);
+ return grLogFile;
+#else
+ return stdout;
+#endif
+}
+#endif
+
+#ifdef GRCACHE
+#include <vcl/graphite_cache.hxx>
+#endif
+
+
+namespace
+{
+ typedef std::pair<gr::GlyphIterator, gr::GlyphIterator> glyph_range_t;
+ typedef std::pair<gr::GlyphSetIterator, gr::GlyphSetIterator> glyph_set_range_t;
+
+ inline long round(const float n) {
+ return long(n + (n < 0 ? -0.5 : 0.5));
+ }
+
+
+ template<typename T>
+ inline bool in_range(const T i, const T b, const T e) {
+ return !(b > i) && i < e;
+ }
+
+
+ template<typename T>
+ inline bool is_subrange(const T sb, const T se, const T b, const T e) {
+ return !(b > sb || se > e);
+ }
+
+
+ template<typename T>
+ inline bool is_subrange(const std::pair<T, T> &s, const T b, const T e) {
+ return is_subrange(s.first, s.second, b, e);
+ }
+
+ int findSameDirLimit(const xub_Unicode* buffer, int charCount, bool rtl)
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ UBiDi *ubidi = ubidi_openSized(charCount, 0, &status);
+ int limit = 0;
+ ubidi_setPara(ubidi, buffer, charCount,
+ (rtl)?UBIDI_DEFAULT_RTL:UBIDI_DEFAULT_LTR, NULL, &status);
+ UBiDiLevel level = 0;
+ ubidi_getLogicalRun(ubidi, 0, &limit, &level);
+ ubidi_close(ubidi);
+ if ((rtl && !(level & 1)) || (!rtl && (level & 1)))
+ {
+ limit = 0;
+ }
+ return limit;
+ }
+
+} // namespace
+
+
+
+// Impementation of the GraphiteLayout::Glyphs container class.
+// This is an extended vector class with methods added to enable
+// o Correctly filling with glyphs.
+// o Querying clustering relationships.
+// o manipulations that affect neighouring glyphs.
+
+const int GraphiteLayout::EXTRA_CONTEXT_LENGTH = 10;
+#ifdef GRCACHE
+GraphiteCacheHandler GraphiteCacheHandler::instance;
+#endif
+
+// The Graphite glyph stream is really a sequence of glyph attachment trees
+// each rooted at a non-attached base glyph. fill_from walks the glyph stream
+// find each non-attached base glyph and calls append to record them as a
+// sequence of clusters.
+void
+GraphiteLayout::Glyphs::fill_from(gr::Segment & rSegment, ImplLayoutArgs &rArgs,
+ bool bRtl, long &rWidth, float fScaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs)
+{
+ // Create a glyph item for each of the glyph and append it to the base class glyph list.
+ typedef std::pair< gr::GlyphSetIterator, gr::GlyphSetIterator > GrGlyphSet;
+ int nChar = rArgs.mnEndCharPos - rArgs.mnMinCharPos;
+ glyph_range_t iGlyphs = rSegment.glyphs();
+ int nGlyphs = iGlyphs.second - iGlyphs.first;
+ gr::GlyphIterator prevBase = iGlyphs.second;
+ float fMinX = rSegment.advanceWidth();
+ float fMaxX = 0.0f;
+ rGlyph2Char.assign(nGlyphs, -1);
+ long nDxOffset = 0;
+ int nGlyphIndex = (bRtl)? (nGlyphs - 1) : 0;
+ // OOo always expects the glyphs in ltr order
+ int nDelta = (bRtl)? -1 : 1;
+
+ int nLastGlyph = (bRtl)? nGlyphs - 1: 0;
+ int nNextChar = (bRtl)? (rSegment.stopCharacter() - 1) : rSegment.startCharacter();//rArgs.mnMinCharPos;
+ // current glyph number (Graphite glyphs)
+ //int currGlyph = 0;
+ int nFirstCharInCluster = nNextChar;
+ int nFirstGlyphInCluster = nLastGlyph;
+
+ // ltr first char in cluster is lowest, same is true for rtl
+ // ltr first glyph in cluster is lowest, rtl first glyph is highest
+
+ // loop over the glyphs determining which characters are linked to them
+ gr::GlyphIterator gi;
+ for (gi = iGlyphs.first + nGlyphIndex;
+ nGlyphIndex >= 0 && nGlyphIndex < nGlyphs;
+ nGlyphIndex+= nDelta, gi = iGlyphs.first + nGlyphIndex)
+ {
+ gr::GlyphInfo info = (*gi);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Glyph %d %f,%f\n", (int)info.logicalIndex(), info.origin(), info.yOffset());
+#endif
+ // the last character associated with this glyph is after
+ // our current cluster buffer position
+ if ((bRtl && ((signed)info.firstChar() <= nNextChar)) ||
+ (!bRtl && ((signed)info.lastChar() >= nNextChar)))
+ {
+ if ((bRtl && nGlyphIndex < nLastGlyph) ||
+ (!bRtl && nGlyphIndex > nLastGlyph))
+ {
+ // this glyph is after the previous one left->right
+ // if insertion is allowed before it then we are in a
+ // new cluster
+ int nAttachedBase = (*(info.attachedClusterBase())).logicalIndex();
+ if (!info.isAttached() ||
+ !in_range(nAttachedBase, nFirstGlyphInCluster, nGlyphIndex))
+ {
+ if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) &&
+ nFirstGlyphInCluster != nGlyphIndex)
+ {
+ std::pair <float,float> aBounds =
+ appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster,
+ nNextChar, nFirstGlyphInCluster, nGlyphIndex, fScaling,
+ rChar2Base, rGlyph2Char, rCharDxs, nDxOffset);
+ fMinX = std::min(aBounds.first, fMinX);
+ fMaxX = std::max(aBounds.second, fMaxX);
+ }
+ nFirstCharInCluster = (bRtl)? info.lastChar() : info.firstChar();
+ nFirstGlyphInCluster = nGlyphIndex;
+ }
+ nLastGlyph = (bRtl)? std::min(nGlyphIndex, nAttachedBase) :
+ std::max(nGlyphIndex, nAttachedBase);
+ }
+ // loop over chacters associated with this glyph and characters
+ // between nextChar and the last character associated with this glyph
+ // giving them the current cluster id. This allows for character /glyph
+ // order reversal.
+ // For each character we do a reverse glyph id look up
+ // and store the glyph id with the highest logical index in nLastGlyph
+ while ((bRtl && ((signed)info.firstChar() <= nNextChar)) ||
+ (!bRtl && (signed)info.lastChar() >= nNextChar))
+ {
+ GrGlyphSet charGlyphs = rSegment.charToGlyphs(nNextChar);
+ nNextChar += nDelta;
+ gr::GlyphSetIterator gj = charGlyphs.first;
+ while (gj != charGlyphs.second)
+ {
+ nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*gj).logicalIndex()) : max(nLastGlyph, (signed)(*gj).logicalIndex());
+ ++gj;
+ }
+ }
+ // Loop over attached glyphs and make sure they are all in the cluster since you
+ // can have glyphs attached with another base glyph in between
+ glyph_set_range_t iAttached = info.attachedClusterGlyphs();
+ for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi)
+ {
+ nLastGlyph = (bRtl)? min(nLastGlyph, (signed)(*agi).logicalIndex()) : max(nLastGlyph, (signed)(*agi).logicalIndex());
+ }
+
+ // if this is a rtl attached glyph, then we need to include its
+ // base in the cluster, which will have a lower graphite index
+ if (bRtl)
+ {
+ if ((signed)info.attachedClusterBase()->logicalIndex() < nLastGlyph)
+ {
+ nLastGlyph = info.attachedClusterBase()->logicalIndex();
+ }
+ }
+ }
+
+ // it is possible for the lastChar to be after nextChar and
+ // firstChar to be before the nFirstCharInCluster in rare
+ // circumstances e.g. Myanmar word for cemetery
+ if ((bRtl && ((signed)info.lastChar() > nFirstCharInCluster)) ||
+ (!bRtl && ((signed)info.firstChar() < nFirstCharInCluster)))
+ {
+ nFirstCharInCluster = info.firstChar();
+ }
+ }
+ // process last cluster
+ if (in_range(nFirstCharInCluster, rArgs.mnMinCharPos, rArgs.mnEndCharPos) &&
+ nFirstGlyphInCluster != nGlyphIndex)
+ {
+ std::pair <float,float> aBounds =
+ appendCluster(rSegment, rArgs, bRtl, nFirstCharInCluster, nNextChar,
+ nFirstGlyphInCluster, nGlyphIndex, fScaling,
+ rChar2Base, rGlyph2Char, rCharDxs, nDxOffset);
+ fMinX = std::min(aBounds.first, fMinX);
+ fMaxX = std::max(aBounds.second, fMaxX);
+ }
+ long nXOffset = round(fMinX * fScaling);
+ rWidth = round(fMaxX * fScaling) - nXOffset + nDxOffset;
+ if (rWidth < 0)
+ {
+ // This can happen when there was no base inside the range
+ rWidth = 0;
+ }
+ // fill up non-base char dx with cluster widths from previous base glyph
+ if (bRtl)
+ {
+ if (rCharDxs[nChar-1] == -1)
+ rCharDxs[nChar-1] = 0;
+ else
+ rCharDxs[nChar-1] -= nXOffset;
+ for (int i = nChar - 2; i >= 0; i--)
+ {
+ if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i+1];
+ else rCharDxs[i] -= nXOffset;
+ }
+ }
+ else
+ {
+ if (rCharDxs[0] == -1)
+ rCharDxs[0] = 0;
+ else
+ rCharDxs[0] -= nXOffset;
+ for (int i = 1; i < nChar; i++)
+ {
+ if (rCharDxs[i] == -1) rCharDxs[i] = rCharDxs[i-1];
+ else rCharDxs[i] -= nXOffset;
+ }
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Glyphs xOff%ld dropDx%ld w%ld\n", nXOffset, nDxOffset, rWidth);
+#endif
+ // remove offset due to context if there is one
+ if (nXOffset != 0)
+ {
+ for (size_t i = 0; i < size(); i++)
+ (*this)[i].maLinearPos.X() -= nXOffset;
+ }
+}
+
+std::pair<float,float> GraphiteLayout::Glyphs::appendCluster(gr::Segment & rSeg,
+ ImplLayoutArgs & rArgs, bool bRtl, int nFirstCharInCluster, int nNextChar,
+ int nFirstGlyphInCluster, int nNextGlyph, float fScaling,
+ std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char,
+ std::vector<int> & rCharDxs, long & rDXOffset)
+{
+ glyph_range_t iGlyphs = rSeg.glyphs();
+ int nGlyphs = iGlyphs.second - iGlyphs.first;
+ int nDelta = (bRtl)? -1 : 1;
+ gr::GlyphInfo aFirstGlyph = *(iGlyphs.first + nFirstGlyphInCluster);
+ std::pair <float, float> aBounds;
+ aBounds.first = aFirstGlyph.origin();
+ aBounds.second = aFirstGlyph.origin();
+ // before we add the glyphs to this vector, we record the
+ // glyph's index in the vector (which is not the same as
+ // the Segment's glyph index!)
+ assert(size() < rGlyph2Char.size());
+ rChar2Base[nFirstCharInCluster-rArgs.mnMinCharPos] = size();
+ rGlyph2Char[size()] = nFirstCharInCluster;
+ bool bBaseGlyph = true;
+ for (int j = nFirstGlyphInCluster;
+ j != nNextGlyph; j += nDelta)
+ {
+ long nNextOrigin;
+ float fNextOrigin;
+ gr::GlyphInfo aGlyph = *(iGlyphs.first + j);
+ if (j + nDelta >= nGlyphs || j + nDelta < 0) // at rhs ltr,rtl
+ {
+ fNextOrigin = rSeg.advanceWidth();
+ nNextOrigin = round(rSeg.advanceWidth() * fScaling + rDXOffset);
+ aBounds.second = std::max(rSeg.advanceWidth(), aBounds.second);
+ }
+ else
+ {
+ gr::GlyphInfo aNextGlyph = *(iGlyphs.first + j + nDelta);
+ fNextOrigin = std::max(aNextGlyph.attachedClusterBase()->origin(), aNextGlyph.origin());
+ aBounds.second = std::max(fNextOrigin, aBounds.second);
+ nNextOrigin = round(fNextOrigin * fScaling + rDXOffset);
+ }
+ aBounds.first = std::min(aGlyph.origin(), aBounds.first);
+ if ((signed)aGlyph.firstChar() < rArgs.mnEndCharPos &&
+ (signed)aGlyph.firstChar() >= rArgs.mnMinCharPos)
+ {
+ rCharDxs[aGlyph.firstChar()-rArgs.mnMinCharPos] = nNextOrigin;
+ }
+ if ((signed)aGlyph.attachedClusterBase()->logicalIndex() == j)
+ {
+ append(rSeg, rArgs, aGlyph, fNextOrigin, fScaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, bBaseGlyph);
+ bBaseGlyph = false;
+ }
+ }
+ // from the point of view of the dx array, the xpos is
+ // the origin of the first glyph of the next cluster ltr
+ // rtl it is the origin of the 1st glyph of the cluster
+ long nXPos = (bRtl)?
+ round(aFirstGlyph.attachedClusterBase()->origin() * fScaling) + rDXOffset :
+ round(aBounds.second * fScaling) + rDXOffset;
+ // force the last char in range to have the width of the cluster
+ if (bRtl)
+ {
+ for (int n = nNextChar + 1; n <= nFirstCharInCluster; n++)
+ {
+ if ((n < rArgs.mnEndCharPos) && (n >= rArgs.mnMinCharPos))
+ rCharDxs[n-rArgs.mnMinCharPos] = nXPos;
+ }
+ }
+ else
+ {
+ for (int n = nNextChar - 1; n >= nFirstCharInCluster; n--)
+ {
+ if (n < rArgs.mnEndCharPos && n >= rArgs.mnMinCharPos)
+ rCharDxs[n-rArgs.mnMinCharPos] = nXPos;
+ }
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Cluster g[%d-%d) c[%d-%d)%x x%ld y%f\n", nFirstGlyphInCluster, nNextGlyph, nFirstCharInCluster, nNextChar, rArgs.mpStr[nFirstCharInCluster], nXPos, aFirstGlyph.yOffset());
+#endif
+ return aBounds;
+}
+
+// append walks an attachment tree, flattening it, and converting it into a
+// sequence of GlyphItem objects which we can later manipulate.
+void
+GraphiteLayout::Glyphs::append(gr::Segment &segment, ImplLayoutArgs &args, gr::GlyphInfo & gi, float nextGlyphOrigin, float scaling, std::vector<int> & rChar2Base, std::vector<int> & rGlyph2Char, std::vector<int> & rCharDxs, long & rDXOffset, bool bIsBase)
+{
+ float nextOrigin = nextGlyphOrigin;
+ int firstChar = std::min(gi.firstChar(), gi.lastChar());
+ assert(size() < rGlyph2Char.size());
+ if (!bIsBase) rGlyph2Char[size()] = firstChar;
+ // is the next glyph attached or in the next cluster?
+ glyph_set_range_t iAttached = gi.attachedClusterGlyphs();
+ if (iAttached.first != iAttached.second)
+ {
+ nextOrigin = iAttached.first->origin();
+ }
+ long glyphId = gi.glyphID();
+ long deltaOffset = 0;
+ int glyphWidth = round(nextOrigin * scaling) - round(gi.origin() * scaling);
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"c%d g%d gWidth%d x%f ", firstChar, (int)gi.logicalIndex(), glyphWidth, nextOrigin);
+#endif
+ if (glyphId == 0)
+ {
+ args.NeedFallback(
+ firstChar,
+ gr::RightToLeftDir(gr::DirCode(gi.directionality())));
+ if( (SAL_LAYOUT_FOR_FALLBACK & args.mnFlags ))
+ {
+ glyphId = GF_DROPPED;
+ deltaOffset -= glyphWidth;
+ glyphWidth = 0;
+ }
+ }
+ else if(args.mnFlags & SAL_LAYOUT_FOR_FALLBACK)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"fallback c%d %x in run %d\n", firstChar, args.mpStr[firstChar],
+ args.maRuns.PosIsInAnyRun(firstChar));
+#endif
+ // glyphs that aren't requested for fallback will be taken from base
+ // layout, so mark them as dropped (should this wait until Simplify(false) is called?)
+ if (!args.maRuns.PosIsInAnyRun(firstChar) &&
+ in_range(firstChar, args.mnMinCharPos, args.mnEndCharPos))
+ {
+ glyphId = GF_DROPPED;
+ deltaOffset -= glyphWidth;
+ glyphWidth = 0;
+ }
+ }
+ // append this glyph.
+ long nGlyphFlags = bIsBase ? 0 : GlyphItem::IS_IN_CLUSTER;
+ // directionality seems to be unreliable
+ //nGlyphFlags |= gr::RightToLeftDir(gr::DirCode(gi.attachedClusterBase()->directionality())) ? GlyphItem::IS_RTL_GLYPH : 0;
+ nGlyphFlags |= (gi.directionLevel() & 0x1)? GlyphItem::IS_RTL_GLYPH : 0;
+ GlyphItem aGlyphItem(size(),//gi.logicalIndex(),
+ glyphId,
+ Point(round(gi.origin() * scaling + rDXOffset),
+ round((-gi.yOffset() * scaling) - segment.AscentOffset()* scaling)),
+ nGlyphFlags,
+ glyphWidth);
+ aGlyphItem.mnOrigWidth = round(gi.advanceWidth() * scaling);
+ push_back(aGlyphItem);
+
+ // update the offset if this glyph was dropped
+ rDXOffset += deltaOffset;
+
+ // Recursively apply append all the attached glyphs.
+ for (gr::GlyphSetIterator agi = iAttached.first; agi != iAttached.second; ++agi)
+ {
+ if (agi + 1 == iAttached.second)
+ append(segment, args, *agi, nextGlyphOrigin, scaling, rChar2Base, rGlyph2Char,rCharDxs, rDXOffset, false);
+ else
+ append(segment, args, *agi, (agi + 1)->origin(), scaling, rChar2Base, rGlyph2Char, rCharDxs, rDXOffset, false);
+ }
+}
+
+//
+// An implementation of the SalLayout interface to enable Graphite enabled fonts to be used.
+//
+GraphiteLayout::GraphiteLayout(const gr::Font & font, const grutils::GrFeatureParser * pFeatures) throw()
+ : mpTextSrc(0),
+ mrFont(font),
+ mnWidth(0),
+ mfScaling(1.0),
+ mpFeatures(pFeatures)
+{
+ // Line settings can have subtle affects on space handling
+ // since we don't really know whether it is the end of a line or just a run
+ // in the middle, it is hard to know what to set them to.
+ // If true, it can cause end of line spaces to be hidden e.g. Doulos SIL
+ maLayout.setStartOfLine(false);
+ maLayout.setEndOfLine(false);
+// maLayout.setDumbFallback(false);
+ // trailing ws doesn't seem to always take affect if end of line is true
+ maLayout.setTrailingWs(gr::ktwshAll);
+#ifdef GRLAYOUT_DEBUG
+ gr::ScriptDirCode aDirCode = font.getSupportedScriptDirections();
+ fprintf(grLog(),"GraphiteLayout scripts %x %lx\n", aDirCode, long(this));
+#endif
+}
+
+
+GraphiteLayout::~GraphiteLayout() throw()
+{
+ clear();
+ // the features are owned by the platform layers
+ mpFeatures = NULL;
+}
+
+void GraphiteLayout::clear()
+{
+ // Destroy the segment and text source from any previous invocation of
+ // LayoutText
+ mvGlyphs.clear();
+ mvCharDxs.clear();
+ mvChar2BaseGlyph.clear();
+ mvGlyph2Char.clear();
+
+#ifndef GRCACHE
+ delete mpTextSrc;
+#endif
+
+ // Reset the state to the empty state.
+ mpTextSrc=0;
+ mnWidth = 0;
+ // Don't reset the scaling, because it is set before LayoutText
+}
+
+// This method shouldn't be called on windows, since it needs the dc reset
+bool GraphiteLayout::LayoutText(ImplLayoutArgs & rArgs)
+{
+#ifdef GRCACHE
+ GrSegRecord * pSegRecord = NULL;
+ gr::Segment * pSegment = CreateSegment(rArgs, &pSegRecord);
+ if (!pSegment)
+ return false;
+
+ // layout the glyphs as required by OpenOffice
+ bool success = LayoutGlyphs(rArgs, pSegment, pSegRecord);
+
+ if (pSegRecord) pSegRecord->unlock();
+ else delete pSegment;
+#else
+ gr::Segment * pSegment = CreateSegment(rArgs);
+ bool success = LayoutGlyphs(rArgs, pSegment);
+ delete pSegment;
+#endif
+ return success;
+}
+
+#ifdef GRCACHE
+class GrFontHasher : public gr::Font
+{
+public:
+ GrFontHasher(const gr::Font & aFont) : gr::Font(aFont), mrRealFont(const_cast<gr::Font&>(aFont)) {};
+ ~GrFontHasher(){};
+ virtual bool bold() { return mrRealFont.bold(); };
+ virtual bool italic() { return mrRealFont.italic(); };
+ virtual float ascent() { return mrRealFont.ascent(); };
+ virtual float descent() { return mrRealFont.descent(); };
+ virtual float height() { return mrRealFont.height(); };
+ virtual gr::Font* copyThis() { return mrRealFont.copyThis(); };
+ virtual unsigned int getDPIx() { return mrRealFont.getDPIx(); };
+ virtual unsigned int getDPIy() { return mrRealFont.getDPIy(); };
+ virtual const void* getTable(gr::fontTableId32 nId, size_t* nSize)
+ { return mrRealFont.getTable(nId,nSize); }
+ virtual void getFontMetrics(float*pA, float*pB, float*pC) { mrRealFont.getFontMetrics(pA,pB,pC); };
+
+ sal_Int32 hashCode(const grutils::GrFeatureParser * mpFeatures)
+ {
+ // is this sufficient?
+ std::wstring aFace;
+ bool bBold;
+ bool bItalic;
+ UniqueCacheInfo(aFace, bBold, bItalic);
+ sal_Unicode uName[32]; // max length used in gr::Font
+ // Note: graphite stores font names as UTF-16 even if wchar_t is 32bit
+ // this conversion should be OK.
+ for (size_t i = 0; i < aFace.size() && i < 32; i++)
+ {
+ uName[i] = aFace[i];
+ }
+ size_t iSize = aFace.size();
+ if (0 == iSize) return 0;
+ sal_Int32 hash = rtl_ustr_hashCode_WithLength(uName, iSize);
+ hash ^= static_cast<sal_Int32>(height());
+ hash |= (bBold)? 0x1000000 : 0;
+ hash |= (bItalic)? 0x2000000 : 0;
+ if (mpFeatures)
+ hash ^= mpFeatures->hashCode();
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(), "font hash %x size %f\n", (int)hash, height());
+#endif
+ return hash;
+ };
+
+private:
+ gr::Font & mrRealFont;
+};
+#endif
+
+#ifdef GRCACHE
+gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs, GrSegRecord ** pSegRecord)
+#else
+gr::Segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs)
+#endif
+{
+ assert(rArgs.mnLength >= 0);
+
+ gr::Segment * pSegment = NULL;
+
+ // Set the SalLayouts values to be the inital ones.
+ SalLayout::AdjustLayout(rArgs);
+ // TODO check if this is needed
+ if (mnUnitsPerPixel > 1)
+ mfScaling = 1.0f / mnUnitsPerPixel;
+
+ // Clear out any previous buffers
+ clear();
+ bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL;
+ try
+ {
+ // Don't set RTL if font doesn't support it otherwise it forces rtl on
+ // everything
+ if (bRtl && (mrFont.getSupportedScriptDirections() & gr::kfsdcHorizRtl))
+ maLayout.setRightToLeft(bRtl);
+
+#ifdef GRCACHE
+ GrFontHasher hasher(mrFont);
+ sal_Int32 aFontHash = hasher.hashCode(mpFeatures);
+ GraphiteSegmentCache * pCache =
+ (GraphiteCacheHandler::instance).getCache(aFontHash);
+ if (pCache)
+ {
+ *pSegRecord = pCache->getSegment(rArgs, bRtl);
+ if (*pSegRecord)
+ {
+ pSegment = (*pSegRecord)->getSegment();
+ mpTextSrc = (*pSegRecord)->getTextSrc();
+ maLayout.setRightToLeft((*pSegRecord)->isRtl());
+ if (rArgs.mpStr != mpTextSrc->getLayoutArgs().mpStr ||
+ rArgs.mnMinCharPos != mpTextSrc->getLayoutArgs().mnMinCharPos ||
+ rArgs.mnEndCharPos != mpTextSrc->getLayoutArgs().mnEndCharPos ||
+ (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) )
+ {
+ (*pSegRecord)->clearVectors();
+ }
+ mpTextSrc->switchLayoutArgs(rArgs);
+ return pSegment;
+ }
+ }
+#endif
+
+ // Context is often needed beyond the specified end, however, we don't
+ // want it if there has been a direction change, since it is hard
+ // to tell between reordering within one direction and multi-directional
+ // text.
+ const int segCharLimit = min(rArgs.mnLength, mnEndCharPos + EXTRA_CONTEXT_LENGTH);
+ int limit = rArgs.mnEndCharPos;
+ if (segCharLimit > limit)
+ {
+ limit += findSameDirLimit(rArgs.mpStr + rArgs.mnEndCharPos,
+ segCharLimit - rArgs.mnEndCharPos, bRtl);
+ }
+
+ // Create a new TextSource object for the engine.
+ mpTextSrc = new TextSourceAdaptor(rArgs, limit);
+ if (mpFeatures) mpTextSrc->setFeatures(mpFeatures);
+
+ pSegment = new gr::RangeSegment((gr::Font *)&mrFont, mpTextSrc, &maLayout, mnMinCharPos, limit);
+ if (pSegment != NULL)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Gr::LayoutText %d-%d, context %d,len%d rtl%d/%d scaling %f\n", rArgs.mnMinCharPos,
+ rArgs.mnEndCharPos, limit, rArgs.mnLength, maLayout.rightToLeft(), pSegment->rightToLeft(), mfScaling);
+#endif
+#ifdef GRCACHE
+ // on a new segment rightToLeft should be correct
+ *pSegRecord = pCache->cacheSegment(mpTextSrc, pSegment, pSegment->rightToLeft());
+#endif
+ }
+ else
+ {
+ clear();
+ return NULL;
+ }
+ }
+ catch (...)
+ {
+ clear(); // destroy the text source and any partially built segments.
+ return NULL;
+ }
+ return pSegment;
+}
+
+#ifdef GRCACHE
+bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment, GrSegRecord * pSegRecord)
+#else
+bool GraphiteLayout::LayoutGlyphs(ImplLayoutArgs& rArgs, gr::Segment * pSegment)
+#endif
+{
+#ifdef GRCACHE
+#ifdef GRCACHE_REUSE_VECTORS
+ // if we have an exact match, then we can reuse the glyph vectors from before
+ if (pSegRecord && (pSegRecord->glyphs().size() > 0) &&
+ !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) )
+ {
+ mnWidth = pSegRecord->width();
+ mvGlyphs = pSegRecord->glyphs();
+ mvCharDxs = pSegRecord->charDxs();
+ mvChar2BaseGlyph = pSegRecord->char2BaseGlyph();
+ mvGlyph2Char = pSegRecord->glyph2Char();
+ return true;
+ }
+#endif
+#endif
+ // Calculate the initial character dxs.
+ mvCharDxs.assign(mnEndCharPos - mnMinCharPos, -1);
+ mvChar2BaseGlyph.assign(mnEndCharPos - mnMinCharPos, -1);
+ mnWidth = 0;
+ if (mvCharDxs.size() > 0)
+ {
+ // Discover all the clusters.
+ try
+ {
+ // Note: we use the layout rightToLeft() because in cached segments
+ // rightToLeft() may no longer be valid if the engine has been run
+ // ltr since the segment was created.
+#ifdef GRCACHE
+ bool bRtl = pSegRecord? pSegRecord->isRtl() : pSegment->rightToLeft();
+#else
+ bool bRtl = pSegment->rightToLeft();
+#endif
+ mvGlyphs.fill_from(*pSegment, rArgs, bRtl,
+ mnWidth, mfScaling, mvChar2BaseGlyph, mvGlyph2Char, mvCharDxs);
+
+ if (bRtl)
+ {
+ // not needed for adjacent differences, but for mouse clicks to char
+ std::transform(mvCharDxs.begin(), mvCharDxs.end(), mvCharDxs.begin(),
+ std::bind1st(std::minus<long>(), mnWidth));
+ // fixup last dx to ensure it always equals the width
+ mvCharDxs[mvCharDxs.size() - 1] = mnWidth;
+ }
+#ifdef GRCACHE
+#ifdef GRCACHE_REUSE_VECTORS
+ if (pSegRecord && rArgs.maReruns.IsEmpty() &&
+ !(SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags))
+ {
+ pSegRecord->setGlyphVectors(mnWidth, mvGlyphs, mvCharDxs,
+ mvChar2BaseGlyph, mvGlyph2Char);
+ }
+#endif
+#endif
+ }
+ catch (std::exception e)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"LayoutGlyphs failed %s\n", e.what());
+#endif
+ return false;
+ }
+ catch (...)
+ {
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"LayoutGlyphs failed with exception");
+#endif
+ return false;
+ }
+ }
+ else
+ {
+ mnWidth = 0;
+ }
+ return true;
+}
+
+int GraphiteLayout::GetTextBreak(long maxmnWidth, long char_extra, int factor) const
+{
+ // Adjust maxmnWidth so FindNextBreakPoint returns a sensible answer.
+ maxmnWidth -= (mnEndCharPos-mnMinCharPos-1)*char_extra; // extra character spacing.
+ maxmnWidth /= factor; // scaling factor.
+
+ // Ask the segment for the nearest whole letter break for the width.
+ //float width;
+ float targetWidth = maxmnWidth/mfScaling;
+ // return quickly if this segment is narrower than the target width
+ // (sometimes graphite doesn't seem to realise this!)
+ if (targetWidth > mnWidth)
+ return STRING_LEN;
+ //int nBreak = mpSegment->findNextBreakPoint(mnMinCharPos,
+ // gr::klbWordBreak, gr::klbLetterBreak, targetWidth, &width);
+
+ // LineFillSegment seems to give better results that findNextBreakPoint
+ // though it may be slower
+ gr::LayoutEnvironment aLE;
+ gr::LineFillSegment lineSeg(const_cast<gr::Font *>(&mrFont), mpTextSrc, &aLE,
+ mnMinCharPos, mpTextSrc->getContextLength(),
+ targetWidth);
+ int nBreak = lineSeg.stopCharacter();
+
+ if (nBreak > mnEndCharPos) nBreak = STRING_LEN;
+ else if (nBreak < mnMinCharPos) nBreak = mnMinCharPos;
+ return nBreak;
+}
+
+
+long GraphiteLayout::FillDXArray( sal_Int32* pDXArray ) const
+{
+ if (mnEndCharPos == mnMinCharPos)
+ // Then we must be zero width!
+ return 0;
+
+ if (pDXArray)
+ {
+ for (size_t i = 0; i < mvCharDxs.size(); i++)
+ {
+ assert((mvChar2BaseGlyph[i] >= -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size()));
+ if (mvChar2BaseGlyph[i] != -1 &&
+ mvGlyphs[mvChar2BaseGlyph[i]].mnGlyphIndex == GF_DROPPED)
+ {
+ // when used in MultiSalLayout::GetTextBreak dropped glyphs
+ // must have zero width
+ pDXArray[i] = 0;
+ }
+ else
+ {
+ pDXArray[i] = mvCharDxs[i];
+ if (i > 0) pDXArray[i] -= mvCharDxs[i-1];
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%d,%ld ", (int)i, (int)mvCharDxs[i], pDXArray[i]);
+#endif
+ }
+ //std::adjacent_difference(mvCharDxs.begin(), mvCharDxs.end(), pDXArray);
+ //for (size_t i = 0; i < mvCharDxs.size(); i++)
+ // fprintf(grLog(),"%d,%d,%d ", (int)i, (int)mvCharDxs[i], pDXArray[i]);
+ //fprintf(grLog(),"FillDX %ld,%d\n", mnWidth, std::accumulate(pDXArray, pDXArray + mvCharDxs.size(), 0));
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"FillDXArray %d-%d,%d=%ld\n", mnMinCharPos, mnEndCharPos, (int)mpTextSrc->getLength(), mnWidth);
+#endif
+ return mnWidth;
+}
+
+
+void GraphiteLayout::AdjustLayout(ImplLayoutArgs& rArgs)
+{
+ SalLayout::AdjustLayout(rArgs);
+
+ if(rArgs.mpDXArray)
+ {
+ std::vector<int> vDeltaWidths(mvGlyphs.size(), 0);
+ ApplyDXArray(rArgs, vDeltaWidths);
+
+ if( (mnLayoutFlags & SAL_LAYOUT_BIDI_RTL) &&
+ !(rArgs.mnFlags & SAL_LAYOUT_FOR_FALLBACK) )
+ {
+ // check if this is a kashida script
+ bool bKashidaScript = false;
+ for (int i = rArgs.mnMinCharPos; i < rArgs.mnEndCharPos; i++)
+ {
+ UErrorCode aStatus = U_ZERO_ERROR;
+ UScriptCode scriptCode = uscript_getScript(rArgs.mpStr[i], &aStatus);
+ if (scriptCode == USCRIPT_ARABIC || scriptCode == USCRIPT_SYRIAC)
+ {
+ bKashidaScript = true;
+ break;
+ }
+ }
+ int nKashidaWidth = 0;
+ int nKashidaIndex = getKashidaGlyph(nKashidaWidth);
+ if( nKashidaIndex != 0 && bKashidaScript)
+ {
+ kashidaJustify( vDeltaWidths, nKashidaIndex, nKashidaWidth );
+ }
+ }
+ }
+}
+
+
+void GraphiteLayout::ApplyDXArray(ImplLayoutArgs &args, std::vector<int> & rDeltaWidth)
+{
+ const size_t nChars = args.mnEndCharPos - args.mnMinCharPos;
+ if (nChars == 0) return;
+
+#ifdef GRLAYOUT_DEBUG
+ for (size_t iDx = 0; iDx < mvCharDxs.size(); iDx++)
+ fprintf(grLog(),"%d,%d,%ld ", (int)iDx, (int)mvCharDxs[iDx], args.mpDXArray[iDx]);
+ fprintf(grLog(),"ApplyDx\n");
+#endif
+ bool bRtl = mnLayoutFlags & SAL_LAYOUT_BIDI_RTL;
+ int nXOffset = 0;
+ if (bRtl)
+ {
+ nXOffset = args.mpDXArray[nChars - 1] - mvCharDxs[nChars - 1];
+ }
+ int nPrevClusterGlyph = (bRtl)? mvGlyphs.size() : -1;
+ int nPrevClusterLastChar = -1;
+ for (size_t i = 0; i < nChars; i++)
+ {
+ if (mvChar2BaseGlyph[i] > -1 && mvChar2BaseGlyph[i] != nPrevClusterGlyph)
+ {
+ assert((mvChar2BaseGlyph[i] > -1) && (mvChar2BaseGlyph[i] < (signed)mvGlyphs.size()));
+ GlyphItem & gi = mvGlyphs[mvChar2BaseGlyph[i]];
+ if (!gi.IsClusterStart())
+ continue;
+
+ // find last glyph of this cluster
+ size_t j = i + 1;
+ int nLastChar = i;
+ int nLastGlyph = mvChar2BaseGlyph[i];
+ for (; j < nChars; j++)
+ {
+ assert((mvChar2BaseGlyph[j] >= -1) && (mvChar2BaseGlyph[j] < (signed)mvGlyphs.size()));
+ if (mvChar2BaseGlyph[j] != -1 && mvGlyphs[mvChar2BaseGlyph[j]].IsClusterStart())
+ {
+ nLastGlyph = mvChar2BaseGlyph[j] + ((bRtl)? 1 : -1);
+ nLastChar = j - 1;
+ break;
+ }
+ }
+ if (nLastGlyph < 0)
+ {
+ nLastGlyph = mvChar2BaseGlyph[i];
+ }
+ // Its harder to find the last glyph rtl, since the first of
+ // cluster is still on the left so we need to search towards
+ // the previous cluster to the right
+ if (bRtl)
+ {
+ nLastGlyph = mvChar2BaseGlyph[i];
+ while (nLastGlyph + 1 < (signed)mvGlyphs.size() &&
+ !mvGlyphs[nLastGlyph+1].IsClusterStart())
+ {
+ ++nLastGlyph;
+ }
+ }
+ if (j == nChars)
+ {
+ nLastChar = nChars - 1;
+ if (!bRtl) nLastGlyph = mvGlyphs.size() - 1;
+ }
+ assert((nLastChar > -1) && (nLastChar < (signed)nChars));
+ long nNewClusterWidth = args.mpDXArray[nLastChar];
+ long nOrigClusterWidth = mvCharDxs[nLastChar];
+ long nDGlyphOrigin = 0;
+ if (nPrevClusterLastChar > - 1)
+ {
+ assert(nPrevClusterLastChar < (signed)nChars);
+ nNewClusterWidth -= args.mpDXArray[nPrevClusterLastChar];
+ nOrigClusterWidth -= mvCharDxs[nPrevClusterLastChar];
+ nDGlyphOrigin = args.mpDXArray[nPrevClusterLastChar] - mvCharDxs[nPrevClusterLastChar];
+ }
+ long nDWidth = nNewClusterWidth - nOrigClusterWidth;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(), "c%d last glyph %d/%d\n", i, nLastGlyph, mvGlyphs.size());
+#endif
+ assert((nLastGlyph > -1) && (nLastGlyph < (signed)mvGlyphs.size()));
+ mvGlyphs[nLastGlyph].mnNewWidth += nDWidth;
+ if (gi.mnGlyphIndex != GF_DROPPED)
+ mvGlyphs[nLastGlyph].mnNewWidth += nDWidth;
+ else
+ nDGlyphOrigin += nDWidth;
+ // update glyph positions
+ if (bRtl)
+ {
+ for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++)
+ {
+ assert((n > - 1) && (n < (signed)mvGlyphs.size()));
+ mvGlyphs[n].maLinearPos.X() += -nDGlyphOrigin + nXOffset;
+ }
+ }
+ else
+ {
+ for (int n = mvChar2BaseGlyph[i]; n <= nLastGlyph; n++)
+ {
+ assert((n > - 1) && (n < (signed)mvGlyphs.size()));
+ mvGlyphs[n].maLinearPos.X() += nDGlyphOrigin + nXOffset;
+ }
+ }
+ rDeltaWidth[mvChar2BaseGlyph[i]] = nDWidth;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"c%d g%d-%d dW%ld-%ld=%ld dX%ld x%ld\t", (int)i, mvChar2BaseGlyph[i], nLastGlyph, nNewClusterWidth, nOrigClusterWidth, nDWidth, nDGlyphOrigin, mvGlyphs[mvChar2BaseGlyph[i]].maLinearPos.X());
+#endif
+ nPrevClusterGlyph = mvChar2BaseGlyph[i];
+ nPrevClusterLastChar = nLastChar;
+ i = nLastChar;
+ }
+ }
+ // Update the dx vector with the new values.
+ std::copy(args.mpDXArray, args.mpDXArray + nChars,
+ mvCharDxs.begin() + (args.mnMinCharPos - mnMinCharPos));
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"ApplyDx %ld(%ld)\n", args.mpDXArray[nChars - 1], mnWidth);
+#endif
+ mnWidth = args.mpDXArray[nChars - 1];
+}
+
+void GraphiteLayout::kashidaJustify(std::vector<int>& rDeltaWidths, sal_GlyphId nKashidaIndex, int nKashidaWidth)
+{
+ // skip if the kashida glyph in the font looks suspicious
+ if( nKashidaWidth <= 0 )
+ return;
+
+ // calculate max number of needed kashidas
+ Glyphs::iterator i = mvGlyphs.begin();
+ int nKashidaCount = 0;
+ int nOrigGlyphIndex = -1;
+ int nGlyphIndex = -1;
+ while (i != mvGlyphs.end())
+ {
+ nOrigGlyphIndex++;
+ nGlyphIndex++;
+ // only inject kashidas in RTL contexts
+ if( !(*i).IsRTLGlyph() )
+ {
+ ++i;
+ continue;
+ }
+ // no kashida-injection for blank justified expansion either
+ if( IsSpacingGlyph( (*i).mnGlyphIndex ) )
+ {
+ ++i;
+ continue;
+ }
+ // calculate gap, ignore if too small
+ int nGapWidth = rDeltaWidths[nOrigGlyphIndex];;
+ // worst case is one kashida even for mini-gaps
+ if( 3 * nGapWidth < nKashidaWidth )
+ {
+ ++i;
+ continue;
+ }
+ nKashidaCount = 1 + (nGapWidth / nKashidaWidth);
+#ifdef GRLAYOUT_DEBUG
+ printf("inserting %d kashidas at %ld\n", nKashidaCount, (*i).mnGlyphIndex);
+#endif
+ GlyphItem glyphItem = *i;
+ Point aPos(0, 0);
+ aPos.X() = (*i).maLinearPos.X();
+ GlyphItem newGi(glyphItem.mnCharPos, nKashidaIndex, aPos,
+ GlyphItem::IS_IN_CLUSTER|GlyphItem::IS_RTL_GLYPH, nKashidaWidth);
+ mvGlyphs.reserve(mvGlyphs.size() + nKashidaCount);
+ i = mvGlyphs.begin() + nGlyphIndex;
+ mvGlyphs.insert(i, nKashidaCount, newGi);
+ i = mvGlyphs.begin() + nGlyphIndex;
+ nGlyphIndex += nKashidaCount;
+ // now fix up the kashida positions
+ for (int j = 0; j < nKashidaCount; j++)
+ {
+ (*(i)).maLinearPos.X() -= nGapWidth;
+ nGapWidth -= nKashidaWidth;
+ i++;
+ }
+
+ // fixup rightmost kashida for gap remainder
+ if( nGapWidth < 0 )
+ {
+ if( nKashidaCount <= 1 )
+ nGapWidth /= 2; // for small gap move kashida to middle
+ (*(i-1)).mnNewWidth += nGapWidth; // adjust kashida width to gap width
+ (*(i-1)).maLinearPos.X() += nGapWidth;
+ }
+
+ (*i).mnNewWidth = (*i).mnOrigWidth;
+ ++i;
+ }
+
+}
+
+void GraphiteLayout::GetCaretPositions( int nArraySize, sal_Int32* pCaretXArray ) const
+{
+ // For each character except the last discover the caret positions
+ // immediatly before and after that character.
+ // This is used for underlines in the GUI amongst other things.
+ // It may be used from MultiSalLayout, in which case it must take into account
+ // glyphs that have been moved.
+ std::fill(pCaretXArray, pCaretXArray + nArraySize, -1);
+ // the layout method doesn't modify the layout even though it isn't
+ // const in the interface
+ bool bRtl = const_cast<GraphiteLayout*>(this)->maLayout.rightToLeft();
+ int prevBase = -1;
+ long prevClusterWidth = 0;
+ for (int i = 0, nCharSlot = 0; i < nArraySize && nCharSlot < static_cast<int>(mvCharDxs.size()); ++nCharSlot, i+=2)
+ {
+ if (mvChar2BaseGlyph[nCharSlot] != -1)
+ {
+ assert((mvChar2BaseGlyph[nCharSlot] > -1) && (mvChar2BaseGlyph[nCharSlot] < (signed)mvGlyphs.size()));
+ GlyphItem gi = mvGlyphs[mvChar2BaseGlyph[nCharSlot]];
+ if (gi.mnGlyphIndex == GF_DROPPED)
+ {
+ continue;
+ }
+ int nCluster = mvChar2BaseGlyph[nCharSlot];
+ long origClusterWidth = gi.mnNewWidth;
+ long nMin = gi.maLinearPos.X();
+ long nMax = gi.maLinearPos.X() + gi.mnNewWidth;
+ // attached glyphs are always stored after their base rtl or ltr
+ while (++nCluster < static_cast<int>(mvGlyphs.size()) &&
+ !mvGlyphs[nCluster].IsClusterStart())
+ {
+ origClusterWidth += mvGlyphs[nCluster].mnNewWidth;
+ if (mvGlyph2Char[nCluster] == nCharSlot)
+ {
+ nMin = std::min(nMin, mvGlyphs[nCluster].maLinearPos.X());
+ nMax = std::min(nMax, mvGlyphs[nCluster].maLinearPos.X() + mvGlyphs[nCluster].mnNewWidth);
+ }
+ }
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = nMin;
+ pCaretXArray[i] = nMax;
+ }
+ else
+ {
+ pCaretXArray[i] = nMin;
+ pCaretXArray[i+1] = nMax;
+ }
+ prevBase = mvChar2BaseGlyph[nCharSlot];
+ prevClusterWidth = origClusterWidth;
+ }
+ else if (prevBase > -1)
+ {
+ // this could probably be improved
+ assert((prevBase > -1) && (prevBase < (signed)mvGlyphs.size()));
+ GlyphItem gi = mvGlyphs[prevBase];
+ int nGlyph = prevBase + 1;
+ // try to find a better match, otherwise default to complete cluster
+ for (; nGlyph < static_cast<int>(mvGlyphs.size()) &&
+ !mvGlyphs[nGlyph].IsClusterStart(); nGlyph++)
+ {
+ if (mvGlyph2Char[nGlyph] == nCharSlot)
+ {
+ gi = mvGlyphs[nGlyph];
+ break;
+ }
+ }
+ long nGWidth = gi.mnNewWidth;
+ // if no match position at end of cluster
+ if (nGlyph == static_cast<int>(mvGlyphs.size()) ||
+ mvGlyphs[nGlyph].IsClusterStart())
+ {
+ nGWidth = prevClusterWidth;
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = gi.maLinearPos.X();
+ pCaretXArray[i] = gi.maLinearPos.X();
+ }
+ else
+ {
+ pCaretXArray[i] = gi.maLinearPos.X() + prevClusterWidth;
+ pCaretXArray[i+1] = gi.maLinearPos.X() + prevClusterWidth;
+ }
+ }
+ else
+ {
+ if (bRtl)
+ {
+ pCaretXArray[i+1] = gi.maLinearPos.X();
+ pCaretXArray[i] = gi.maLinearPos.X() + gi.mnNewWidth;
+ }
+ else
+ {
+ pCaretXArray[i] = gi.maLinearPos.X();
+ pCaretXArray[i+1] = gi.maLinearPos.X() + gi.mnNewWidth;
+ }
+ }
+ }
+ else
+ {
+ pCaretXArray[i] = pCaretXArray[i+1] = 0;
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"%d,%ld-%ld\t", nCharSlot, pCaretXArray[i], pCaretXArray[i+1]);
+#endif
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"\n");
+#endif
+}
+
+
+// GetNextGlyphs returns a contiguous sequence of glyphs that can be
+// rendered together. It should never return a dropped glyph.
+// The glyph_slot returned should be the index of the next visible
+// glyph after the last glyph returned by this call.
+// The char_index array should be filled with the characters corresponding
+// to each glyph returned.
+// glyph_adv array should be a virtual width such that if successive
+// glyphs returned by this method are added one after the other they
+// have the correct spacing.
+// The logic in this method must match that expected in MultiSalLayout which
+// is used when glyph fallback is in operation.
+int GraphiteLayout::GetNextGlyphs( int length, sal_GlyphId * glyph_out,
+ ::Point & aPosOut, int &glyph_slot, sal_Int32 * glyph_adv, int *char_index) const
+{
+ // Sanity check on the slot index.
+ if (glyph_slot >= signed(mvGlyphs.size()))
+ {
+ glyph_slot = mvGlyphs.size();
+ return 0;
+ }
+ assert(glyph_slot >= 0);
+ // Find the first glyph in the substring.
+ for (; glyph_slot < signed(mvGlyphs.size()) &&
+ ((mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED);
+ ++glyph_slot) {};
+
+ // Update the length
+ const int nGlyphSlotEnd = std::min(size_t(glyph_slot + length), mvGlyphs.size());
+
+ // We're all out of glyphs here.
+ if (glyph_slot == nGlyphSlotEnd)
+ {
+ return 0;
+ }
+
+ // Find as many glyphs as we can which can be drawn in one go.
+ Glyphs::const_iterator glyph_itr = mvGlyphs.begin() + glyph_slot;
+ const int glyph_slot_begin = glyph_slot;
+ const int initial_y_pos = glyph_itr->maLinearPos.Y();
+
+ // Set the position to the position of the start glyph.
+ ::Point aStartPos = glyph_itr->maLinearPos;
+ //aPosOut = glyph_itr->maLinearPos;
+ aPosOut = GetDrawPosition(aStartPos);
+
+
+ for (;;) // Forever
+ {
+ // last index of the range from glyph_to_chars does not include this glyph
+ if (char_index)
+ {
+ assert((glyph_slot >= -1) && (glyph_slot < (signed)mvGlyph2Char.size()));
+ if (mvGlyph2Char[glyph_slot] == -1)
+ *char_index++ = mvCharDxs.size();
+ else
+ *char_index++ = mvGlyph2Char[glyph_slot];
+ }
+ // Copy out this glyphs data.
+ ++glyph_slot;
+ *glyph_out++ = glyph_itr->mnGlyphIndex;
+
+ // Find the actual advance - this must be correct if called from
+ // MultiSalLayout::AdjustLayout which requests one glyph at a time.
+ const long nGlyphAdvance = (glyph_slot == static_cast<int>(mvGlyphs.size()))?
+ glyph_itr->mnNewWidth :
+ ((glyph_itr+1)->maLinearPos.X() - glyph_itr->maLinearPos.X());
+
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"GetNextGlyphs g%d c%d x%ld,%ld adv%ld, pos %ld,%ld\n", glyph_slot - 1,
+ mvGlyph2Char[glyph_slot-1], glyph_itr->maLinearPos.X(), glyph_itr->maLinearPos.Y(), nGlyphAdvance,
+ aPosOut.X(), aPosOut.Y());
+#endif
+
+ if (glyph_adv) // If we are returning advance store it.
+ *glyph_adv++ = nGlyphAdvance;
+ else // Stop when next advance is unexpected.
+ if (glyph_itr->mnOrigWidth != nGlyphAdvance) break;
+
+ // Have fetched all the glyphs we need to
+ if (glyph_slot == nGlyphSlotEnd)
+ break;
+
+ ++glyph_itr;
+ // Stop when next y position is unexpected.
+ if (initial_y_pos != glyph_itr->maLinearPos.Y())
+ break;
+
+ // Stop if glyph dropped
+ if (glyph_itr->mnGlyphIndex == GF_DROPPED)
+ break;
+ }
+ int numGlyphs = glyph_slot - glyph_slot_begin;
+ // move the next glyph_slot to a glyph that hasn't been dropped
+ while (glyph_slot < static_cast<int>(mvGlyphs.size()) &&
+ (mvGlyphs.begin() + glyph_slot)->mnGlyphIndex == GF_DROPPED)
+ ++glyph_slot;
+ return numGlyphs;
+}
+
+
+void GraphiteLayout::MoveGlyph( int nGlyphIndex, long nNewPos )
+{
+ // TODO it might be better to actualy implement simplify properly, but this
+ // needs to be done carefully so the glyph/char maps are maintained
+ // If a glyph has been dropped then it wasn't returned by GetNextGlyphs, so
+ // the index here may be wrong
+ while ((mvGlyphs[nGlyphIndex].mnGlyphIndex == GF_DROPPED) &&
+ (nGlyphIndex < (signed)mvGlyphs.size()))
+ {
+ nGlyphIndex++;
+ }
+ const long dx = nNewPos - mvGlyphs[nGlyphIndex].maLinearPos.X();
+
+ if (dx == 0) return;
+ // GenericSalLayout only changes maLinearPos, mvCharDxs doesn't change
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Move %d (%ld,%ld) c%d by %ld\n", nGlyphIndex, mvGlyphs[nGlyphIndex].maLinearPos.X(), nNewPos, mvGlyph2Char[nGlyphIndex], dx);
+#endif
+ for (size_t gi = nGlyphIndex; gi < mvGlyphs.size(); gi++)
+ {
+ mvGlyphs[gi].maLinearPos.X() += dx;
+ }
+ // width does need to be updated for correct fallback
+ mnWidth += dx;
+}
+
+
+void GraphiteLayout::DropGlyph( int nGlyphIndex )
+{
+ if(nGlyphIndex >= signed(mvGlyphs.size()))
+ return;
+
+ GlyphItem & glyph = mvGlyphs[nGlyphIndex];
+ glyph.mnGlyphIndex = GF_DROPPED;
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Dropped %d\n", nGlyphIndex);
+#endif
+}
+
+void GraphiteLayout::Simplify( bool isBaseLayout )
+{
+ const sal_GlyphId dropMarker = isBaseLayout ? GF_DROPPED : 0;
+
+ Glyphs::iterator gi = mvGlyphs.begin();
+ // TODO check whether we need to adjust positions here
+ // MultiSalLayout seems to move the glyphs itself, so it may not be needed.
+ long deltaX = 0;
+ while (gi != mvGlyphs.end())
+ {
+ if (gi->mnGlyphIndex == dropMarker)
+ {
+ deltaX += gi->mnNewWidth;
+ gi->mnNewWidth = 0;
+ }
+ else
+ {
+ deltaX = 0;
+ }
+ //mvCharDxs[mvGlyph2Char[gi->mnCharPos]] -= deltaX;
+ ++gi;
+ }
+#ifdef GRLAYOUT_DEBUG
+ fprintf(grLog(),"Simplify base%d dx=%ld newW=%ld\n", isBaseLayout, deltaX, mnWidth - deltaX);
+#endif
+ // discard width from trailing dropped glyphs, but not those in the middle
+ mnWidth -= deltaX;
+}
diff --git a/vcl/source/glyphs/graphite_serverfont.cxx b/vcl/source/glyphs/graphite_serverfont.cxx
new file mode 100644
index 000000000000..e8cd152b43ac
--- /dev/null
+++ b/vcl/source/glyphs/graphite_serverfont.cxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+
+// Platform
+#include <vcl/sallayout.hxx>
+// Module
+#include "gcach_ftyp.hxx"
+#include <vcl/graphite_features.hxx>
+#include "graphite_textsrc.hxx"
+#include <vcl/graphite_serverfont.hxx>
+
+#ifndef MSC
+
+//
+// An implementation of the GraphiteLayout interface to enable Graphite enabled fonts to be used.
+//
+
+GraphiteServerFontLayout::GraphiteServerFontLayout(GraphiteFontAdaptor * pFont) throw()
+ : ServerFontLayout(pFont->font()), mpFont(pFont),
+ maImpl(*mpFont, mpFont->features(), pFont)
+{
+ // Nothing needed here
+}
+
+GraphiteServerFontLayout::~GraphiteServerFontLayout() throw()
+{
+ delete mpFont;
+ mpFont = NULL;
+}
+
+const sal_Unicode* GraphiteServerFontLayout::getTextPtr() const
+{
+ return maImpl.textSrc()->getLayoutArgs().mpStr +
+ maImpl.textSrc()->getLayoutArgs().mnMinCharPos;
+}
+
+sal_GlyphId GraphiteLayoutImpl::getKashidaGlyph(int & width)
+{
+ int nKashidaIndex = mpFont->font().GetGlyphIndex( 0x0640 );
+ if( nKashidaIndex != 0 )
+ {
+ const GlyphMetric& rGM = mpFont->font().GetGlyphMetric( nKashidaIndex );
+ width = rGM.GetCharWidth();
+ }
+ else
+ {
+ width = 0;
+ }
+ return nKashidaIndex;
+}
+
+#endif
diff --git a/vcl/source/glyphs/graphite_textsrc.cxx b/vcl/source/glyphs/graphite_textsrc.cxx
new file mode 100644
index 000000000000..adc2ae99c4f8
--- /dev/null
+++ b/vcl/source/glyphs/graphite_textsrc.cxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Header files
+//
+// Standard Library
+#include <string>
+#include <cassert>
+#include "graphite_textsrc.hxx"
+#include <vcl/graphite_features.hxx>
+
+// class TextSourceAdaptor implementation.
+//
+TextSourceAdaptor::~TextSourceAdaptor()
+{
+ delete mpFeatures;
+}
+
+gr::UtfType TextSourceAdaptor::utfEncodingForm() {
+ return gr::kutf16;
+}
+
+
+size_t TextSourceAdaptor::getLength()
+{
+ return maLayoutArgs.mnLength;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf32 *)
+{
+ assert(false);
+ return 0;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset offset, size_t char_count, gr::utf16 * char_buffer)
+{
+ assert(char_buffer);
+
+ size_t copy_count = std::min(size_t(maLayoutArgs.mnLength), char_count);
+ std::copy(maLayoutArgs.mpStr + offset, maLayoutArgs.mpStr + offset + copy_count, char_buffer);
+
+ return copy_count;
+}
+
+
+size_t TextSourceAdaptor::fetch(gr::toffset, size_t, gr::utf8 *)
+{
+ assert(false);
+ return 0;
+}
+
+
+inline void TextSourceAdaptor::getCharProperties(const int nCharIdx, int & min, int & lim, size_t & depth)
+{
+ maLayoutArgs.ResetPos();
+ bool rtl = maLayoutArgs.mnFlags & SAL_LAYOUT_BIDI_RTL;
+ for(depth = ((rtl)? 1:0); maLayoutArgs.maRuns.GetRun(&min, &lim, &rtl); maLayoutArgs.maRuns.NextRun())
+ {
+ if (min > nCharIdx)
+ break;
+ // Only increase the depth when a change of direction occurs.
+ depth += int(rtl ^ bool(depth & 0x1));
+ if (min <= nCharIdx && nCharIdx < lim)
+ break;
+ }
+ // If there is no run for this position increment the depth, but don't
+ // change if this is out of bounds context
+ if (lim > 0 && nCharIdx >= lim && nCharIdx < maLayoutArgs.mnEndCharPos)
+ depth++;
+}
+
+
+bool TextSourceAdaptor::getRightToLeft(gr::toffset nCharIdx)
+{
+ size_t depth;
+ int min, lim = 0;
+ getCharProperties(nCharIdx, min, lim, depth);
+ //printf("getRtl %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth & 0x1);
+ return depth & 0x1;
+}
+
+
+unsigned int TextSourceAdaptor::getDirectionDepth(gr::toffset nCharIdx)
+{
+ size_t depth;
+ int min, lim;
+ getCharProperties(nCharIdx, min, lim, depth);
+ //printf("getDirectionDepth %d,%x=%d\n", nCharIdx, maLayoutArgs.mpStr[nCharIdx], depth);
+ return depth;
+}
+
+
+float TextSourceAdaptor::getVerticalOffset(gr::toffset)
+{
+ return 0.0f; //TODO: Implement correctly
+}
+
+gr::isocode TextSourceAdaptor::getLanguage(gr::toffset)
+{
+ if (mpFeatures && mpFeatures->hasLanguage())
+ return mpFeatures->getLanguage();
+ gr::isocode unknown = {{0,0,0,0}};
+ return unknown;
+}
+
+std::pair<gr::toffset, gr::toffset> TextSourceAdaptor::propertyRange(gr::toffset nCharIdx)
+{
+
+ if (nCharIdx < unsigned(maLayoutArgs.mnMinCharPos))
+ return std::make_pair(0, maLayoutArgs.mnMinCharPos);
+
+ if (nCharIdx < mnEnd)
+ return std::make_pair(maLayoutArgs.mnMinCharPos, mnEnd);
+
+ return std::make_pair(mnEnd, maLayoutArgs.mnLength);
+}
+
+size_t TextSourceAdaptor::getFontFeatures(gr::toffset, gr::FeatureSetting * settings)
+{
+ if (mpFeatures) return mpFeatures->getFontFeatures(settings);
+ return 0;
+}
+
+
+bool TextSourceAdaptor::sameSegment(gr::toffset char_idx1, gr::toffset char_idx2)
+{
+ const std::pair<gr::toffset, gr::toffset>
+ range1 = propertyRange(char_idx1),
+ range2 = propertyRange(char_idx2);
+
+ return range1 == range2;
+}
+
+void TextSourceAdaptor::setFeatures(const grutils::GrFeatureParser * pFeatures)
+{
+ mpFeatures = new grutils::GrFeatureParser(*pFeatures);
+}
diff --git a/vcl/source/glyphs/graphite_textsrc.hxx b/vcl/source/glyphs/graphite_textsrc.hxx
new file mode 100644
index 000000000000..6f701988bb01
--- /dev/null
+++ b/vcl/source/glyphs/graphite_textsrc.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _SV_GRAPHITETEXTSRC_HXX
+#define _SV_GRAPHITETEXTSRC_HXX
+// Description: Implements the Graphite interfaces IGrTextSource and
+// IGrGraphics which provide Graphite with access to the
+// app's text storage system and the platform's font and
+// graphics systems.
+
+// We need this to enable namespace support in libgrengine headers.
+#define GR_NAMESPACE
+
+// Standard Library
+#include <stdexcept>
+// Platform
+
+#ifndef _SVWIN_H
+#include <tools/svwin.h>
+#endif
+
+#ifndef _SV_SVSYS_HXX
+#include <svsys.h>
+#endif
+
+#ifndef _SV_SALGDI_HXX
+#include <vcl/salgdi.hxx>
+#endif
+
+#ifndef _SV_SALLAYOUT_HXX
+#include <vcl/sallayout.hxx>
+#endif
+
+// Module
+#include "vcl/dllapi.h"
+
+// Libraries
+#include <graphite/GrClient.h>
+#include <graphite/Font.h>
+#include <graphite/ITextSource.h>
+
+// Module type definitions and forward declarations.
+//
+namespace grutils
+{
+ class GrFeatureParser;
+}
+// Implements the Adaptor pattern to adapt the LayoutArgs and the ServerFont interfaces to the
+// gr::IGrTextSource interface.
+// @author tse
+//
+class TextSourceAdaptor : public gr::ITextSource
+{
+public:
+ TextSourceAdaptor(ImplLayoutArgs &layout_args, const int nContextLen) throw();
+ ~TextSourceAdaptor();
+ virtual gr::UtfType utfEncodingForm();
+ virtual size_t getLength();
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchBuffer);
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer);
+ virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchsBuffer);
+ virtual bool getRightToLeft(gr::toffset ich);
+ virtual unsigned int getDirectionDepth(gr::toffset ich);
+ virtual float getVerticalOffset(gr::toffset ich);
+ virtual gr::isocode getLanguage(gr::toffset ich);
+
+ virtual std::pair<gr::toffset, gr::toffset> propertyRange(gr::toffset ich);
+ virtual size_t getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset);
+ virtual bool sameSegment(gr::toffset ich1, gr::toffset ich2);
+
+ operator ImplLayoutArgs & () throw();
+ void setFeatures(const grutils::GrFeatureParser * pFeatures);
+ const ImplLayoutArgs & getLayoutArgs() const { return maLayoutArgs; }
+ size_t getContextLength() const { return mnEnd; };
+ inline void switchLayoutArgs(ImplLayoutArgs & newArgs);
+private:
+ // Prevent the generation of a default assignment operator.
+ TextSourceAdaptor & operator=(const TextSourceAdaptor &);
+
+ void getCharProperties(const int, int &, int &, size_t &);
+
+ ImplLayoutArgs maLayoutArgs;
+ size_t mnEnd;
+ const grutils::GrFeatureParser * mpFeatures;
+};
+
+inline TextSourceAdaptor::TextSourceAdaptor(ImplLayoutArgs &la, const int nContextLen) throw()
+ : maLayoutArgs(la),
+ mnEnd(std::min(la.mnLength, nContextLen)),
+ mpFeatures(NULL)
+{
+}
+
+inline TextSourceAdaptor::operator ImplLayoutArgs & () throw() {
+ return maLayoutArgs;
+}
+
+inline void TextSourceAdaptor::switchLayoutArgs(ImplLayoutArgs & aNewArgs)
+{
+ mnEnd += aNewArgs.mnMinCharPos - maLayoutArgs.mnMinCharPos;
+ maLayoutArgs = aNewArgs;
+}
+
+#endif
diff --git a/vcl/source/glyphs/makefile.mk b/vcl/source/glyphs/makefile.mk
index b08777d7020f..3e79cdc63da2 100644
--- a/vcl/source/glyphs/makefile.mk
+++ b/vcl/source/glyphs/makefile.mk
@@ -49,11 +49,36 @@ CFLAGS+=-DUSE_FT_EMBOLDEN
# --- Files --------------------------------------------------------
.IF "$(USE_BUILTIN_RASTERIZER)" != ""
+# GlyphCache + FreeType support (only on UNX platforms currently)
SLOFILES=\
$(SLO)$/glyphcache.obj \
$(SLO)$/gcach_rbmp.obj \
$(SLO)$/gcach_layout.obj \
$(SLO)$/gcach_ftyp.obj
+
+.IF "$(ENABLE_GRAPHITE)" != ""
+# Graphite support using the glyphcache infrastructure
+CFLAGS+=-DENABLE_GRAPHITE
+SLOFILES+= $(SLO)$/graphite_adaptors.obj \
+ $(SLO)$/graphite_features.obj \
+ $(SLO)$/graphite_cache.obj \
+ $(SLO)$/graphite_textsrc.obj \
+ $(SLO)$/graphite_serverfont.obj \
+ $(SLO)$/graphite_layout.obj
+.ENDIF
+
+.ELSE
+
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+# Graphite support on non-UNX platforms
+# make use of stlport headerfiles
+EXT_USE_STLPORT=TRUE
+SLOFILES=\
+ $(SLO)$/graphite_textsrc.obj \
+ $(SLO)$/graphite_cache.obj \
+ $(SLO)$/graphite_features.obj \
+ $(SLO)$/graphite_layout.obj
+.ENDIF
.ENDIF
# --- Targets ------------------------------------------------------
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 392c2ceaa478..c6f64d74c5fc 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -46,10 +46,41 @@ using namespace ::com::sun::star;
// =======================================================================
+static BOOL ImplHasIndirectTabParent( Window* pWindow )
+{
+ // The window has inderect tab parent if it is included in tab hierarchy
+ // of the indirect parent window
+
+ return ( pWindow && pWindow->GetParent()
+ && ( pWindow->GetParent()->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) );
+}
+
+// -----------------------------------------------------------------------
+
+static Window* ImplGetTopParentOfTabHierarchy( Window* pParent )
+{
+ // The method allows to find the most close parent containing all the
+ // window from the current tab-hierarchy
+ // The direct parent should be provided as a parameter here
+
+ Window* pResult = pParent;
+
+ if ( pResult )
+ {
+ while ( pResult->GetParent() && ( pResult->ImplGetWindow()->GetStyle() & WB_CHILDDLGCTRL ) )
+ pResult = pResult->GetParent();
+ }
+
+ return pResult;
+}
+
+// -----------------------------------------------------------------------
+
static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex )
{
Window* pTabPage = NULL;
Window* pFoundWindow = NULL;
+
Window* pWindow = pParent->GetWindow( WINDOW_FIRSTCHILD );
Window* pNextWindow = pWindow;
while ( pWindow )
@@ -96,7 +127,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex
}
}
}
- else if ( pWindow->GetStyle() & WB_DIALOGCONTROL )
+ else if ( ( pWindow->GetStyle() & WB_DIALOGCONTROL )
+ || ( pWindow->GetStyle() & WB_CHILDDLGCTRL ) )
pFoundWindow = ImplGetSubChildWindow( pWindow, n, nIndex );
}
@@ -122,6 +154,8 @@ static Window* ImplGetSubChildWindow( Window* pParent, USHORT n, USHORT& nIndex
static Window* ImplGetChildWindow( Window* pParent, USHORT n, USHORT& nIndex, BOOL bTestEnable )
{
+ pParent = ImplGetTopParentOfTabHierarchy( pParent );
+
nIndex = 0;
Window* pWindow = ImplGetSubChildWindow( pParent, n, nIndex );
if ( bTestEnable )
@@ -284,14 +318,16 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT&
USHORT nFormEnd;
// Focus-Fenster in der Child-Liste suchen
- pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE );
+ Window* pFirstChildWindow = pSWindow = ImplGetChildWindow( pParent, 0, i, FALSE );
if( pWindow == NULL )
pWindow = pSWindow;
while ( pSWindow )
{
- if ( pSWindow->ImplGetWindow()->IsDialogControlStart() )
+ // the DialogControlStart mark is only accepted for the direct children
+ if ( !ImplHasIndirectTabParent( pSWindow )
+ && pSWindow->ImplGetWindow()->IsDialogControlStart() )
nFormStart = i;
// SecondWindow wegen zusammengesetzten Controls wie
@@ -331,12 +367,33 @@ static Window* ImplFindDlgCtrlWindow( Window* pParent, Window* pWindow, USHORT&
// Formularende suchen
nFormEnd = nFormStart;
pTempWindow = pSWindow;
+ sal_Int32 nIteration = 0;
do
{
nFormEnd = i;
pTempWindow = ImplGetNextWindow( pParent, i, i, FALSE );
- if ( !i || (pTempWindow && pTempWindow->ImplGetWindow()->IsDialogControlStart()) )
+
+ // the DialogControlStart mark is only accepted for the direct children
+ if ( !i
+ || ( pTempWindow && !ImplHasIndirectTabParent( pTempWindow )
+ && pTempWindow->ImplGetWindow()->IsDialogControlStart() ) )
break;
+
+ if ( pTempWindow && pTempWindow == pFirstChildWindow )
+ {
+ // It is possible to go through the begin of hierarchy once
+ // while looking for DialogControlStart mark.
+ // If it happens second time, it looks like an endless loop,
+ // that should be impossible, but just for the case...
+ nIteration++;
+ if ( nIteration >= 2 )
+ {
+ // this is an unexpected scenario
+ DBG_ASSERT( FALSE, "It seems to be an endless loop!" );
+ rFormStart = 0;
+ break;
+ }
+ }
}
while ( pTempWindow );
rFormEnd = nFormEnd;
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index c827905e94e6..ccf75dbd59b3 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -3480,11 +3480,6 @@ USHORT PopupMenu::Execute( Window* pExecWindow, const Rectangle& rRect, USHORT n
USHORT PopupMenu::ImplExecute( Window* pW, const Rectangle& rRect, ULONG nPopupModeFlags, Menu* pSFrom, BOOL bPreSelectFirst )
{
-
- // #59614# Mit TH abgesprochen dass die ASSERTION raus kommt,
- // weil es evtl. legitim ist...
-// DBG_ASSERT( !PopupMenu::IsInExecute() || pSFrom, "PopupMenu::Execute() called in PopupMenu::Execute()" );
-
if ( !pSFrom && ( PopupMenu::IsInExecute() || !GetItemCount() ) )
return 0;
@@ -3660,8 +3655,16 @@ USHORT PopupMenu::ImplExecute( Window* pW, const Rectangle& rRect, ULONG nPopupM
{
pWin->ImplAddDel( &aDelData );
+ ImplDelData aModalWinDel;
+ pW->ImplAddDel( &aModalWinDel );
+ pW->ImplIncModalCount();
+
pWin->Execute();
+ DBG_ASSERT( ! aModalWinDel.IsDead(), "window for popup died, modal count incorrect !" );
+ if( ! aModalWinDel.IsDead() )
+ pW->ImplDecModalCount();
+
if ( !aDelData.IsDelete() )
pWin->ImplRemoveDel( &aDelData );
else
diff --git a/vcl/source/window/tabpage.cxx b/vcl/source/window/tabpage.cxx
index 57eec66e705a..e28026876fad 100644
--- a/vcl/source/window/tabpage.cxx
+++ b/vcl/source/window/tabpage.cxx
@@ -121,6 +121,8 @@ void TabPage::StateChanged( StateChangedType nType )
{
if ( GetSettings().GetStyleSettings().GetAutoMnemonic() )
ImplWindowAutoMnemonic( this );
+ // FIXME: no layouting, workaround some clipping issues
+ ImplAdjustNWFSizes();
}
else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
{
diff --git a/vcl/source/window/taskpanelist.cxx b/vcl/source/window/taskpanelist.cxx
index bae6d99430f0..d1e598532b88 100644
--- a/vcl/source/window/taskpanelist.cxx
+++ b/vcl/source/window/taskpanelist.cxx
@@ -197,18 +197,21 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
{
// F6 cycles through everything and works always
- // Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is
- // only active if one of those items has the focus
- BOOL bF6 = FALSE;
+
+ // MAV, #i104204#
+ // The old design was the following one:
+ // < Ctrl-TAB cycles through Menubar, Toolbars and Floatingwindows only and is
+ // < only active if one of those items has the focus
+ //
+ // Since the design of Ctrl-Tab looks to be inconsistent ( non-modal dialogs are not reachable
+ // and the shortcut conflicts with tab-control shortcut ), it is no more supported
BOOL bSplitterOnly = FALSE;
BOOL bFocusInList = FALSE;
KeyCode aKeyCode = aKeyEvent.GetKeyCode();
BOOL bForward = !aKeyCode.IsShift();
- if( ( (aKeyCode.IsMod1() || aKeyCode.IsMod2()) && aKeyCode.GetCode() == KEY_TAB ) // Ctrl-TAB or Alt-TAB
- || ( bF6 = ( aKeyCode.GetCode()) == KEY_F6 ) != FALSE // F6
- )
+ if( aKeyCode.GetCode() == KEY_F6 ) // F6
{
- bSplitterOnly = bF6 && aKeyCode.IsMod1() && aKeyCode.IsShift();
+ bSplitterOnly = aKeyCode.IsMod1() && aKeyCode.IsShift();
// is the focus in the list ?
::std::vector< Window* >::iterator p = mTaskPanes.begin();
@@ -219,12 +222,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
{
bFocusInList = TRUE;
- // Ctrl-TAB does not work in Dialogs
- if( !bF6 && pWin->IsDialog() )
- return FALSE;
-
// Ctrl-F6 goes directly to the document
- if( !pWin->IsDialog() && bF6 && aKeyCode.IsMod1() && !aKeyCode.IsShift() )
+ if( !pWin->IsDialog() && aKeyCode.IsMod1() && !aKeyCode.IsShift() )
{
pWin->GrabFocusToDocument();
return TRUE;
@@ -236,7 +235,8 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
if( bSplitterOnly )
pNextWin = FindNextSplitter( *p, TRUE );
else
- pNextWin = bF6 ? FindNextFloat( *p, bForward ) : FindNextPane( *p, bForward );
+ pNextWin = FindNextFloat( *p, bForward );
+
if( pNextWin != pWin )
{
ImplGetSVData()->maWinData.mbNoSaveFocus = TRUE;
@@ -261,7 +261,7 @@ BOOL TaskPaneList::HandleKeyEvent( KeyEvent aKeyEvent )
}
// the focus is not in the list: activate first float if F6 was pressed
- if( !bFocusInList && bF6 )
+ if( !bFocusInList )
{
Window *pWin;
if( bSplitterOnly )
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 279775d712e4..5333d20d4306 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -5844,18 +5844,15 @@ void Window::UpdateSettings( const AllSettings& rSettings, BOOL bChild )
ImplInitResolutionSettings();
/* #i73785#
- * do not overwrite a NoWheelActionWithoutFocus with false
- * this looks kind of a hack, but NoWheelActionWithoutFocus
+ * do not overwrite a WheelBehavior with false
+ * this looks kind of a hack, but WheelBehavior
* is always a local change, not a system property,
- * so we can spare all our users the hassel of reacting on
+ * so we can spare all our users the hassle of reacting on
* this in their respective DataChanged.
*/
- if( aOldSettings.GetMouseSettings().GetNoWheelActionWithoutFocus() )
- {
- MouseSettings aSet( maSettings.GetMouseSettings() );
- aSet.SetNoWheelActionWithoutFocus( TRUE );
- maSettings.SetMouseSettings( aSet );
- }
+ MouseSettings aSet( maSettings.GetMouseSettings() );
+ aSet.SetWheelBehavior( aOldSettings.GetMouseSettings().GetWheelBehavior() );
+ maSettings.SetMouseSettings( aSet );
if( (nChangeFlags & SETTINGS_STYLE) && IsBackground() )
{
@@ -6224,6 +6221,15 @@ void Window::SetParent( Window* pNewParent )
pSysWin->GetTaskPaneList()->RemoveWindow( this );
}
}
+ // remove ownerdraw decorated windows from list in the top-most frame window
+ if( (GetStyle() & WB_OWNERDRAWDECORATION) && mpWindowImpl->mbFrame )
+ {
+ ::std::vector< Window* >& rList = ImplGetOwnerDrawList();
+ ::std::vector< Window* >::iterator p;
+ p = ::std::find( rList.begin(), rList.end(), this );
+ if( p != rList.end() )
+ rList.erase( p );
+ }
ImplSetFrameParent( pNewParent );
@@ -6353,6 +6359,9 @@ void Window::SetParent( Window* pNewParent )
if( bChangeTaskPaneList )
pNewSysWin->GetTaskPaneList()->AddWindow( this );
+ if( (GetStyle() & WB_OWNERDRAWDECORATION) && mpWindowImpl->mbFrame )
+ ImplGetOwnerDrawList().push_back( this );
+
if ( bVisible )
Show( TRUE, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE );
}
diff --git a/vcl/unx/gtk/a11y/atklistener.cxx b/vcl/unx/gtk/a11y/atklistener.cxx
index c3b2859f7c3f..f083e7cc584e 100644
--- a/vcl/unx/gtk/a11y/atklistener.cxx
+++ b/vcl/unx/gtk/a11y/atklistener.cxx
@@ -360,6 +360,32 @@ void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEven
break;
}
+ // --> OD 2009-05-26 #i92103#
+ case accessibility::AccessibleEventId::LISTBOX_ENTRY_EXPANDED:
+ {
+ AtkObject *pChild = getObjFromAny( aEvent.NewValue );
+ if( pChild )
+ {
+ AtkStateType eExpandedState = ATK_STATE_EXPANDED;
+ atk_object_notify_state_change( pChild, eExpandedState, true );
+ g_object_unref( pChild );
+ }
+ break;
+ }
+
+ case accessibility::AccessibleEventId::LISTBOX_ENTRY_COLLAPSED:
+ {
+ AtkObject *pChild = getObjFromAny( aEvent.NewValue );
+ if( pChild )
+ {
+ AtkStateType eExpandedState = ATK_STATE_EXPANDED;
+ atk_object_notify_state_change( pChild, eExpandedState, false );
+ g_object_unref( pChild );
+ }
+ break;
+ }
+ // <--
+
// AtkAction signals ...
case accessibility::AccessibleEventId::ACTION_CHANGED:
g_signal_emit_by_name( G_OBJECT( atk_obj ), "property_change::accessible-actions");
diff --git a/vcl/unx/gtk/a11y/atktext.cxx b/vcl/unx/gtk/a11y/atktext.cxx
index 1c839ed58839..8bdfe1706962 100644
--- a/vcl/unx/gtk/a11y/atktext.cxx
+++ b/vcl/unx/gtk/a11y/atktext.cxx
@@ -442,13 +442,20 @@ text_wrapper_get_run_attributes( AtkText *text,
pTextAttributes->getRunAttributes( offset, uno::Sequence< rtl::OUString > () );
pSet = attribute_set_new_from_property_values( aAttributeList, true, text );
- if( pSet )
+ // --> OD 2009-06-22 #i100938#
+ // - always provide start_offset and end_offset
+// if( pSet )
+ // <--
{
accessibility::TextSegment aTextSegment =
pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN);
*start_offset = aTextSegment.SegmentStart;
- *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME
+ // --> OD 2009-06-22 #i100938#
+ // Do _not_ increment the end_offset provide by <accessibility::TextSegment> instance
+// *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME
+ *end_offset = aTextSegment.SegmentEnd;
+ // <--
}
}
}
diff --git a/vcl/unx/gtk/a11y/atkutil.cxx b/vcl/unx/gtk/a11y/atkutil.cxx
index 91f4b3280448..5206c8ce87ca 100644
--- a/vcl/unx/gtk/a11y/atkutil.cxx
+++ b/vcl/unx/gtk/a11y/atkutil.cxx
@@ -36,6 +36,9 @@
#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
+// --> OD 2009-04-14 #i93269#
+#include <com/sun/star/accessibility/XAccessibleText.hpp>
+// <--
#include <cppuhelper/implbase1.hxx>
#include <vos/mutex.hxx>
#include <rtl/ref.hxx>
@@ -86,6 +89,34 @@ atk_wrapper_focus_idle_handler (gpointer data)
fprintf(stderr, "notifying focus event for %p\n", atk_obj);
#endif
atk_focus_tracker_notify(atk_obj);
+ // --> OD 2009-04-14 #i93269#
+ // emit text_caret_moved event for <XAccessibleText> object,
+ // if cursor is inside the <XAccessibleText> object.
+ // also emit state-changed:focused event under the same condition.
+ {
+ AtkObjectWrapper* wrapper_obj = ATK_OBJECT_WRAPPER (atk_obj);
+ if( !wrapper_obj->mpText && wrapper_obj->mpContext )
+ {
+ uno::Any any = wrapper_obj->mpContext->queryInterface( accessibility::XAccessibleText::static_type(NULL) );
+ if ( typelib_TypeClass_INTERFACE == any.pType->eTypeClass &&
+ any.pReserved != 0 )
+ {
+ wrapper_obj->mpText = reinterpret_cast< accessibility::XAccessibleText * > (any.pReserved);
+ if ( wrapper_obj->mpText != 0 )
+ {
+ wrapper_obj->mpText->acquire();
+ gint caretPos = wrapper_obj->mpText->getCaretPosition();
+
+ if ( caretPos != -1 )
+ {
+ atk_object_notify_state_change( atk_obj, ATK_STATE_FOCUSED, TRUE );
+ g_signal_emit_by_name( atk_obj, "text_caret_moved", caretPos );
+ }
+ }
+ }
+ }
+ }
+ // <--
g_object_unref(atk_obj);
}
}
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index 9dbb218403d0..fdaa102c614b 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -454,6 +454,10 @@ void GtkData::deInitNWF( void )
gtk_widget_destroy( gWidgetData[i].gMenuWidget );
if( gWidgetData[i].gTooltipPopup )
gtk_widget_destroy( gWidgetData[i].gTooltipPopup );
+ delete gWidgetData[i].gCacheTabPages;
+ gWidgetData[i].gCacheTabPages = NULL;
+ delete gWidgetData[i].gCacheTabItems;
+ gWidgetData[i].gCacheTabItems = NULL;
delete gWidgetData[i].gNWPixmapCacheList;
gWidgetData[i].gNWPixmapCacheList = NULL;
}
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index 57f48df66c3c..b6770ca1a77e 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -834,7 +834,7 @@ void GtkSalFrame::Init( SalFrame* pParent, ULONG nStyle )
}
if( (nStyle & SAL_FRAME_STYLE_PARTIAL_FULLSCREEN ) )
{
- eType = GDK_WINDOW_TYPE_HINT_DOCK;
+ eType = GDK_WINDOW_TYPE_HINT_TOOLBAR;
gtk_window_set_keep_above( GTK_WINDOW(m_pWindow), true );
}
diff --git a/vcl/unx/headless/svpgdi.cxx b/vcl/unx/headless/svpgdi.cxx
index cd3e286d167a..bd317c883b0b 100644
--- a/vcl/unx/headless/svpgdi.cxx
+++ b/vcl/unx/headless/svpgdi.cxx
@@ -429,7 +429,7 @@ void SvpSalGraphics::copyArea( long nDestX,
{
B2IRange aSrcRect( nSrcX, nSrcY, nSrcX+nSrcWidth, nSrcY+nSrcHeight );
B2IRange aDestRect( nDestX, nDestY, nDestX+nSrcWidth, nDestY+nSrcHeight );
- m_aDevice->drawBitmap( m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap );
+ m_aDevice->drawBitmap( m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap );
dbgOut( m_aDevice );
}
@@ -444,7 +444,7 @@ void SvpSalGraphics::copyBits( const SalTwoRect* pPosAry,
B2IRange aDestRect( pPosAry->mnDestX, pPosAry->mnDestY,
pPosAry->mnDestX+pPosAry->mnDestWidth,
pPosAry->mnDestY+pPosAry->mnDestHeight );
- m_aDevice->drawBitmap( pSrc->m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap );
+ m_aDevice->drawBitmap( pSrc->m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT, m_aClipMap );
dbgOut( m_aDevice );
}
@@ -519,7 +519,7 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh
m_aDevice );
B2IRange aSrcRect( nX, nY, nX+nWidth, nY+nHeight );
B2IRange aDestRect( 0, 0, nWidth, nHeight );
- aCopy->drawBitmap( m_aDevice, aSrcRect, aDestRect, DrawMode_PAINT );
+ aCopy->drawBitmap( m_aOrigDevice, aSrcRect, aDestRect, DrawMode_PAINT );
SvpSalBitmap* pBitmap = new SvpSalBitmap();
pBitmap->setBitmap( aCopy );
diff --git a/vcl/unx/headless/svpprn.cxx b/vcl/unx/headless/svpprn.cxx
index c3253ed163e8..1882b50e6ad7 100644
--- a/vcl/unx/headless/svpprn.cxx
+++ b/vcl/unx/headless/svpprn.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svpprn.cxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
#include "vcl/svapp.hxx"
#include "vcl/jobset.h"
#include "vcl/print.h"
diff --git a/vcl/unx/headless/svppspgraphics.cxx b/vcl/unx/headless/svppspgraphics.cxx
index eb342a130d85..3e9d67bcbbe9 100644
--- a/vcl/unx/headless/svppspgraphics.cxx
+++ b/vcl/unx/headless/svppspgraphics.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svppspgraphics.cxx,v $
- * $Revision: 1.9 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -28,6 +25,9 @@
*
************************************************************************/
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
#include "svppspgraphics.hxx"
#include "svpbmp.hxx"
@@ -39,6 +39,7 @@
#include "vcl/glyphcache.hxx"
#include "vcl/impfont.hxx"
#include "vcl/outfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/svapp.hxx"
#include "vcl/salprn.hxx"
#include "vcl/sysdata.hxx"
@@ -685,16 +686,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout )
ImplFontCharMap* PspGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
- if( !nPairCount )
+ if( !m_pServerFont[0] )
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( m_pServerFont[0] )
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel )
@@ -906,7 +904,7 @@ BOOL PspGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -916,7 +914,16 @@ BOOL PspGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
@@ -970,50 +977,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont,
// static helpers of PspGraphics
-bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo )
-{
- psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- psp::PrintFontInfo aFontInfo;
-
- if( ! rMgr.getFontInfo( aFont, aFontInfo ) )
- return false;
-
- // fill in font info
- switch( aFontInfo.m_eType )
- {
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
- default:
- return false;
- }
- rInfo.m_nAscent = aFontInfo.m_nAscend;
- rInfo.m_nDescent = aFontInfo.m_nDescend;
- rInfo.m_aPSName = rMgr.getPSName( aFont );
-
- int xMin, yMin, xMax, yMax;
- rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax );
-
- if( ! rMgr.createFontSubset( aFont,
- rToFile,
- pGlyphIDs,
- pEncoding,
- pWidths,
- nGlyphs
- ) )
- return false;
-
- rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
- rInfo.m_nCapHeight = yMax; // Well ...
-
- return true;
-}
-
const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen )
{
psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -1025,8 +988,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico
// fill in font info
switch( aFontInfo.m_eType )
{
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
default:
return NULL;
}
diff --git a/vcl/unx/headless/svppspgraphics.hxx b/vcl/unx/headless/svppspgraphics.hxx
index 81e4a29b8d55..7e5ff051f27b 100644
--- a/vcl/unx/headless/svppspgraphics.hxx
+++ b/vcl/unx/headless/svppspgraphics.hxx
@@ -72,13 +72,6 @@ public:
virtual ~PspGraphics();
// helper methods for sharing with X11SalGraphics
- static bool DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo );
static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen );
static void DoFreeEmbedFontData( const void* pData, long nLen );
static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded );
diff --git a/vcl/unx/headless/svptext.cxx b/vcl/unx/headless/svptext.cxx
index dc96aaaa8160..eac9e46c2348 100644
--- a/vcl/unx/headless/svptext.cxx
+++ b/vcl/unx/headless/svptext.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: svptext.cxx,v $
- * $Revision: 1.4 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -274,20 +271,13 @@ ULONG SvpSalGraphics::GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs )
ImplFontCharMap* SvpSalGraphics::GetImplFontCharMap() const
{
- ImplFontCharMap* pMap = NULL;
-
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
+ if( !m_pServerFont[0] )
+ return NULL;
- if( nPairCount > 0 )
- {
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- pMap = new ImplFontCharMap( nPairCount, pCodePairs );
- }
-
- return pMap;
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
// ---------------------------------------------------------------------------
@@ -354,7 +344,7 @@ BOOL SvpSalGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -364,7 +354,16 @@ BOOL SvpSalGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
// ---------------------------------------------------------------------------
diff --git a/vcl/unx/headless/svpvd.cxx b/vcl/unx/headless/svpvd.cxx
index 3f48584036f6..6220af0b28b8 100644
--- a/vcl/unx/headless/svpvd.cxx
+++ b/vcl/unx/headless/svpvd.cxx
@@ -34,6 +34,8 @@
#include <basegfx/vector/b2ivector.hxx>
#include <basebmp/scanlineformats.hxx>
+#include "stdio.h"
+
using namespace basegfx;
using namespace basebmp;
@@ -80,16 +82,19 @@ BOOL SvpSalVirtualDevice::SetSize( long nNewDX, long nNewDY )
#else
case 16: nFormat = Format::SIXTEEN_BIT_LSB_TC_MASK; break;
#endif
+ case 0:
case 24: nFormat = Format::TWENTYFOUR_BIT_TC_MASK; break;
case 32: nFormat = Format::THIRTYTWO_BIT_TC_MASK; break;
}
m_aDevice = aDevPal.empty()
? createBitmapDevice( aDevSize, false, nFormat )
: createBitmapDevice( aDevSize, false, nFormat, PaletteMemorySharedVector( new std::vector< basebmp::Color >(aDevPal) ) );
+
// update device in existing graphics
for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin();
it != m_aGraphics.end(); ++it )
(*it)->setDevice( m_aDevice );
+
}
return true;
}
diff --git a/vcl/unx/inc/pspgraphics.h b/vcl/unx/inc/pspgraphics.h
index 219cc5f0a8ff..0ccc13291714 100644
--- a/vcl/unx/inc/pspgraphics.h
+++ b/vcl/unx/inc/pspgraphics.h
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pspgraphics.h,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -68,13 +65,6 @@ public:
virtual ~PspGraphics();
// helper methods for sharing with X11SalGraphics
- static bool DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo );
static const void* DoGetEmbedFontData( psp::fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen );
static void DoFreeEmbedFontData( const void* pData, long nLen );
static const Ucs2SIntMap* DoGetFontEncodingVector( psp::fontID aFont, const Ucs2OStrMap** pNonEncoded );
diff --git a/vcl/unx/inc/salgdi.h b/vcl/unx/inc/salgdi.h
index 16276cdeb5c9..f893b547e847 100644
--- a/vcl/unx/inc/salgdi.h
+++ b/vcl/unx/inc/salgdi.h
@@ -106,6 +106,8 @@ protected:
Pixel nTextPixel_;
BOOL bFontVertical_;
+ BOOL bDisableGraphite_;
+
GC pBrushGC_; // Brush attributes
SalColor nBrushColor_;
Pixel nBrushPixel_;
diff --git a/vcl/unx/kde/kdedata.cxx b/vcl/unx/kde/kdedata.cxx
index f29ef1d4ff96..15a5ba087ab2 100644
--- a/vcl/unx/kde/kdedata.cxx
+++ b/vcl/unx/kde/kdedata.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: kdedata.cxx,v $
- * $Revision: 1.21 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -248,7 +245,7 @@ extern "C" {
if( nMajor != 3 || nMinor < 2 || (nMinor == 2 && nMicro < 2) )
{
#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "unsuitable qt version %"SAL_PRIdINT32".%"SAL_PRIdINT32".%"SAL_PRIdINT32"\n", nMajor, nMinor, nMicro );
+ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", (int)nMajor, (int)nMinor, (int)nMicro );
#endif
return NULL;
}
diff --git a/vcl/unx/kde4/KDEData.cxx b/vcl/unx/kde4/KDEData.cxx
new file mode 100644
index 000000000000..07a10c60d933
--- /dev/null
+++ b/vcl/unx/kde4/KDEData.cxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "KDEData.hxx"
+
+#include "KDEXLib.hxx"
+
+KDEData::~KDEData()
+{
+}
+
+void KDEData::Init()
+{
+ pXLib_ = new KDEXLib();
+ pXLib_->Init();
+}
+
+void KDEData::initNWF()
+{
+ ImplSVData *pSVData = ImplGetSVData();
+
+ // draw toolbars on separate lines
+ pSVData->maNWFData.mbDockingAreaSeparateTB = true;
+}
+
+void KDEData::deInitNWF()
+{
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/KDEData.hxx b/vcl/unx/kde4/KDEData.hxx
new file mode 100644
index 000000000000..68645abc28d3
--- /dev/null
+++ b/vcl/unx/kde4/KDEData.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <saldisp.hxx>
+#include <saldata.hxx>
+
+class KDEData : public X11SalData
+{
+ public:
+ KDEData() {}
+ virtual ~KDEData();
+
+ virtual void Init();
+ virtual void initNWF();
+ virtual void deInitNWF();
+}; \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalDisplay.cxx b/vcl/unx/kde4/KDESalDisplay.cxx
new file mode 100644
index 000000000000..61044c3de71b
--- /dev/null
+++ b/vcl/unx/kde4/KDESalDisplay.cxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "KDESalDisplay.hxx"
+
+#include "KDEXLib.hxx"
+
+SalKDEDisplay::SalKDEDisplay( Display* pDisp )
+ : SalX11Display( pDisp )
+{
+}
+
+SalKDEDisplay::~SalKDEDisplay()
+{
+ // in case never a frame opened
+ static_cast<KDEXLib*>(GetXLib())->doStartup();
+ // clean up own members
+ doDestruct();
+ // prevent SalDisplay from closing KApplication's display
+ pDisp_ = NULL;
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalDisplay.hxx b/vcl/unx/kde4/KDESalDisplay.hxx
new file mode 100644
index 000000000000..ce294f45087d
--- /dev/null
+++ b/vcl/unx/kde4/KDESalDisplay.hxx
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <saldisp.hxx>
+
+class SalKDEDisplay : public SalX11Display
+{
+ public:
+ SalKDEDisplay( Display* pDisp );
+ virtual ~SalKDEDisplay();
+};
diff --git a/vcl/unx/kde4/KDESalFrame.cxx b/vcl/unx/kde4/KDESalFrame.cxx
new file mode 100644
index 000000000000..ad8f467ee960
--- /dev/null
+++ b/vcl/unx/kde4/KDESalFrame.cxx
@@ -0,0 +1,409 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#define Region QtXRegion
+
+#include <QColor>
+#include <QStyle>
+
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kmenubar.h>
+#include <kconfiggroup.h>
+#include <kmainwindow.h>
+#include <kapplication.h>
+#include <ktoolbar.h>
+
+#undef Region
+
+#include "KDESalFrame.hxx"
+#include "KDEXLib.hxx"
+#include "KDESalGraphics.hxx"
+
+#include <vcl/settings.hxx>
+#include <vcl/font.hxx>
+#include <tools/color.hxx>
+
+#include <vcl/svdata.hxx>
+
+#include <pspgraphics.h>
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+KDESalFrame::KDESalFrame( SalFrame* pParent, ULONG nState ) :
+ X11SalFrame( pParent, nState )
+{
+}
+
+void KDESalFrame::Show( BOOL bVisible, BOOL bNoActivate )
+{
+ if ( !GetParent() && ! (GetStyle() & SAL_FRAME_STYLE_INTRO) )
+ {
+ KDEXLib* pXLib = static_cast<KDEXLib*>(GetDisplay()->GetXLib());
+ pXLib->doStartup();
+ }
+
+ X11SalFrame::Show( bVisible, bNoActivate );
+}
+
+/** Helper function to convert colors.
+*/
+static Color toColor( const QColor &rColor )
+{
+ return Color( rColor.red(), rColor.green(), rColor.blue() );
+}
+
+/** Helper function to read untranslated text entry from KConfig configuration repository.
+*/
+static OUString readEntryUntranslated( KConfigGroup *pGroup, const char *pKey )
+{
+ return OUString::createFromAscii( (const char *) pGroup->readEntryUntranslated( pKey ).toAscii() );
+}
+
+/** Helper function to read color from KConfig configuration repository.
+*/
+static Color readColor( KConfigGroup *pGroup, const char *pKey )
+{
+ return toColor( pGroup->readEntry( pKey, QColor(Qt::white) ) );
+}
+
+/** Helper function to add information to Font from QFont.
+
+ Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx).
+*/
+static Font toFont( const QFont &rQFont, const ::com::sun::star::lang::Locale& rLocale )
+{
+ psp::FastPrintFontInfo aInfo;
+ QFontInfo qFontInfo( rQFont );
+
+ // set family name
+ aInfo.m_aFamilyName = String( (const char *) rQFont.family().toUtf8(), RTL_TEXTENCODING_UTF8 );
+
+ // set italic
+ aInfo.m_eItalic = ( qFontInfo.italic()? psp::italic::Italic: psp::italic::Upright );
+
+ // set weight
+ int nWeight = qFontInfo.weight();
+ if ( nWeight <= QFont::Light )
+ aInfo.m_eWeight = psp::weight::Light;
+ else if ( nWeight <= QFont::Normal )
+ aInfo.m_eWeight = psp::weight::Normal;
+ else if ( nWeight <= QFont::DemiBold )
+ aInfo.m_eWeight = psp::weight::SemiBold;
+ else if ( nWeight <= QFont::Bold )
+ aInfo.m_eWeight = psp::weight::Bold;
+ else
+ aInfo.m_eWeight = psp::weight::UltraBold;
+
+ // set width
+ int nStretch = rQFont.stretch();
+ if ( nStretch <= QFont::UltraCondensed )
+ aInfo.m_eWidth = psp::width::UltraCondensed;
+ else if ( nStretch <= QFont::ExtraCondensed )
+ aInfo.m_eWidth = psp::width::ExtraCondensed;
+ else if ( nStretch <= QFont::Condensed )
+ aInfo.m_eWidth = psp::width::Condensed;
+ else if ( nStretch <= QFont::SemiCondensed )
+ aInfo.m_eWidth = psp::width::SemiCondensed;
+ else if ( nStretch <= QFont::Unstretched )
+ aInfo.m_eWidth = psp::width::Normal;
+ else if ( nStretch <= QFont::SemiExpanded )
+ aInfo.m_eWidth = psp::width::SemiExpanded;
+ else if ( nStretch <= QFont::Expanded )
+ aInfo.m_eWidth = psp::width::Expanded;
+ else if ( nStretch <= QFont::ExtraExpanded )
+ aInfo.m_eWidth = psp::width::ExtraExpanded;
+ else
+ aInfo.m_eWidth = psp::width::UltraExpanded;
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "font name BEFORE system match: \"%s\"\n", OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+#endif
+
+ // match font to e.g. resolve "Sans"
+ psp::PrintFontManager::get().matchFont( aInfo, rLocale );
+
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "font match %s, name AFTER: \"%s\"\n",
+ aInfo.m_nID != 0 ? "succeeded" : "failed",
+ OUStringToOString( aInfo.m_aFamilyName, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+#endif
+
+ // font height
+ int nPointHeight = qFontInfo.pointSize();
+ if ( nPointHeight <= 0 )
+ nPointHeight = rQFont.pointSize();
+
+ // Create the font
+ Font aFont( aInfo.m_aFamilyName, Size( 0, nPointHeight ) );
+ if( aInfo.m_eWeight != psp::weight::Unknown )
+ aFont.SetWeight( PspGraphics::ToFontWeight( aInfo.m_eWeight ) );
+ if( aInfo.m_eWidth != psp::width::Unknown )
+ aFont.SetWidthType( PspGraphics::ToFontWidth( aInfo.m_eWidth ) );
+ if( aInfo.m_eItalic != psp::italic::Unknown )
+ aFont.SetItalic( PspGraphics::ToFontItalic( aInfo.m_eItalic ) );
+ if( aInfo.m_ePitch != psp::pitch::Unknown )
+ aFont.SetPitch( PspGraphics::ToFontPitch( aInfo.m_ePitch ) );
+
+ return aFont;
+}
+
+/** Implementation of KDE integration's main method.
+*/
+void KDESalFrame::UpdateSettings( AllSettings& rSettings )
+{
+ StyleSettings style( rSettings.GetStyleSettings() );
+ BOOL bSetTitleFont = false;
+
+
+ // General settings
+ QPalette pal = kapp->palette();
+
+ style.SetActiveColor(toColor(pal.color(QPalette::Active, QPalette::Window)));
+ style.SetDeactiveColor(toColor(pal.color(QPalette::Inactive, QPalette::Window)));
+
+ style.SetActiveColor2(toColor(pal.color(QPalette::Active, QPalette::Window)));
+ style.SetDeactiveColor2(toColor(pal.color(QPalette::Inactive, QPalette::Window)));
+
+ style.SetActiveTextColor(toColor(pal.color(QPalette::Active, QPalette::WindowText)));
+ style.SetDeactiveTextColor(toColor(pal.color(QPalette::Inactive, QPalette::WindowText)));
+
+ // WM settings
+ KConfig *pConfig = KGlobal::config().data();
+ if ( pConfig )
+ {
+ KConfigGroup aGroup = pConfig->group( "WM" );
+ const char *pKey;
+
+ pKey = "titleFont";
+ if ( aGroup.hasKey( pKey ) )
+ {
+ Font aFont = toFont( aGroup.readEntry( pKey, QFont() ), rSettings.GetUILocale() );
+ style.SetTitleFont( aFont );
+ bSetTitleFont = true;
+ }
+
+ aGroup = pConfig->group( "Icons" );
+
+ pKey = "Theme";
+ if ( aGroup.hasKey( pKey ) )
+ style.SetPreferredSymbolsStyleName( readEntryUntranslated( &aGroup, pKey ) );
+ }
+
+ Color aFore = toColor( pal.color( QPalette::Active, QPalette::WindowText ) );
+ Color aBack = toColor( pal.color( QPalette::Active, QPalette::Window ) );
+ Color aText = toColor( pal.color( QPalette::Active, QPalette::Text ) );
+ Color aBase = toColor( pal.color( QPalette::Active, QPalette::Base ) );
+ Color aButn = toColor( pal.color( QPalette::Active, QPalette::ButtonText ) );
+ Color aMid = toColor( pal.color( QPalette::Active, QPalette::Mid ) );
+ Color aHigh = toColor( pal.color( QPalette::Active, QPalette::Highlight ) );
+
+ // Foreground
+ style.SetRadioCheckTextColor( aFore );
+ style.SetLabelTextColor( aFore );
+ style.SetInfoTextColor( aFore );
+ style.SetDialogTextColor( aFore );
+ style.SetGroupTextColor( aFore );
+
+ // Text
+ style.SetFieldTextColor( aText );
+ style.SetFieldRolloverTextColor( aText );
+ style.SetWindowTextColor( aText );
+ style.SetHelpTextColor( aText );
+
+ // Base
+ style.SetFieldColor( aBase );
+ style.SetHelpColor( aBase );
+ style.SetWindowColor( aBase );
+ style.SetActiveTabColor( aBase );
+
+ // Buttons
+ style.SetButtonTextColor( aButn );
+ style.SetButtonRolloverTextColor( aButn );
+
+ // Disable color
+ style.SetDisableColor( aMid );
+
+ // Workspace
+ style.SetWorkspaceColor( aMid );
+
+ // Background
+ style.Set3DColors( aBack );
+ style.SetFaceColor( aBack );
+ style.SetInactiveTabColor( aBack );
+ style.SetDialogColor( aBack );
+
+ if( aBack == COL_LIGHTGRAY )
+ style.SetCheckedColor( Color( 0xCC, 0xCC, 0xCC ) );
+ else
+ {
+ Color aColor2 = style.GetLightColor();
+ style.
+ SetCheckedColor( Color( (BYTE)(((USHORT)aBack.GetRed()+(USHORT)aColor2.GetRed())/2),
+ (BYTE)(((USHORT)aBack.GetGreen()+(USHORT)aColor2.GetGreen())/2),
+ (BYTE)(((USHORT)aBack.GetBlue()+(USHORT)aColor2.GetBlue())/2)
+ ) );
+ }
+
+ // Selection
+ style.SetHighlightColor( aHigh );
+ style.SetHighlightTextColor( toColor(pal.color( QPalette::HighlightedText)) );
+
+ // Font
+ Font aFont = toFont( kapp->font(), rSettings.GetUILocale() );
+
+ style.SetAppFont( aFont );
+ style.SetHelpFont( aFont );
+
+ if( !bSetTitleFont )
+ {
+ style.SetTitleFont( aFont );
+ }
+
+ style.SetFloatTitleFont( aFont );
+ style.SetMenuFont( aFont ); // will be changed according to pMenuBar
+ style.SetToolFont( aFont ); // will be changed according to pToolBar
+ style.SetLabelFont( aFont );
+ style.SetInfoFont( aFont );
+ style.SetRadioCheckFont( aFont );
+ style.SetPushButtonFont( aFont );
+ style.SetFieldFont( aFont );
+ style.SetIconFont( aFont );
+ style.SetGroupFont( aFont );
+
+ int flash_time = QApplication::cursorFlashTime();
+ style.SetCursorBlinkTime( flash_time != 0 ? flash_time/2 : STYLE_CURSOR_NOBLINKTIME );
+
+ KMainWindow qMainWindow;
+
+ // Menu
+ style.SetSkipDisabledInMenus( TRUE );
+ KMenuBar *pMenuBar = qMainWindow.menuBar();
+ if ( pMenuBar )
+ {
+ // Color
+ QPalette qMenuCG = pMenuBar->palette();
+
+ // Menu text and background color, theme specific
+ Color aMenuFore = toColor( qMenuCG.color( QPalette::WindowText ) );
+ Color aMenuBack = toColor( qMenuCG.color( QPalette::Window ) );
+
+ aMenuFore = toColor( qMenuCG.color( QPalette::ButtonText ) );
+ aMenuBack = toColor( qMenuCG.color( QPalette::Button ) );
+
+ style.SetMenuTextColor( aMenuFore );
+ style.SetMenuColor( aMenuBack );
+ style.SetMenuBarColor( aMenuBack );
+
+ style.SetMenuHighlightColor( toColor ( qMenuCG.color( QPalette::Highlight ) ) );
+
+ style.SetMenuHighlightTextColor( aMenuFore );
+
+ // set special menubar higlight text color
+ if ( kapp->style()->inherits( "HighContrastStyle" ) )
+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = toColor( qMenuCG.color( QPalette::HighlightedText ) );
+ else
+ ImplGetSVData()->maNWFData.maMenuBarHighlightTextColor = aMenuFore;
+
+ // Font
+ aFont = toFont( pMenuBar->font(), rSettings.GetUILocale() );
+ style.SetMenuFont( aFont );
+ }
+
+ // Tool bar
+ KToolBar *pToolBar = qMainWindow.toolBar();
+ if ( pToolBar )
+ {
+ aFont = toFont( pToolBar->font(), rSettings.GetUILocale() );
+ style.SetToolFont( aFont );
+ }
+
+ // Scroll bar size
+ style.SetScrollBarSize( kapp->style()->pixelMetric( QStyle::PM_ScrollBarExtent ) );
+
+ // #i59364# high contrast mode
+ BOOL bHC = ( style.GetFaceColor().IsDark() ||
+ style.GetWindowColor().IsDark() );
+ style.SetHighContrastMode( bHC );
+
+ rSettings.SetStyleSettings( style );
+}
+
+
+void KDESalFrame::ReleaseGraphics( SalGraphics *pGraphics )
+{
+ for( int i = 0; i < nMaxGraphics; i++ )
+ {
+ if( m_aGraphics[i].pGraphics == pGraphics )
+ {
+ m_aGraphics[i].bInUse = false;
+ break;
+ }
+ }
+}
+
+void KDESalFrame::updateGraphics()
+{
+ for( int i = 0; i < nMaxGraphics; i++ )
+ {
+ if( m_aGraphics[i].bInUse )
+ m_aGraphics[i].pGraphics->SetDrawable( GetWindow(), GetScreenNumber() );
+ }
+}
+
+KDESalFrame::~KDESalFrame()
+{
+}
+
+KDESalFrame::GraphicsHolder::~GraphicsHolder()
+{
+ delete pGraphics;
+}
+
+SalGraphics* KDESalFrame::GetGraphics()
+{
+ if( GetWindow() )
+ {
+ for( int i = 0; i < nMaxGraphics; i++ )
+ {
+ if( ! m_aGraphics[i].bInUse )
+ {
+ m_aGraphics[i].bInUse = true;
+ if( ! m_aGraphics[i].pGraphics )
+ {
+ m_aGraphics[i].pGraphics = new KDESalGraphics();
+ m_aGraphics[i].pGraphics->Init( this, GetWindow(), GetScreenNumber() );
+ }
+ return m_aGraphics[i].pGraphics;
+ }
+ }
+ }
+
+ return NULL;
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalFrame.hxx b/vcl/unx/kde4/KDESalFrame.hxx
new file mode 100644
index 000000000000..11a22bd93ba5
--- /dev/null
+++ b/vcl/unx/kde4/KDESalFrame.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <saldisp.hxx>
+#include <salframe.h>
+
+class KDESalFrame : public X11SalFrame
+{
+ private:
+ static const int nMaxGraphics = 2;
+
+ struct GraphicsHolder
+ {
+ X11SalGraphics* pGraphics;
+ bool bInUse;
+
+ GraphicsHolder() : pGraphics(0),bInUse( false ) {}
+ ~GraphicsHolder();
+ };
+
+ GraphicsHolder m_aGraphics[ nMaxGraphics ];
+
+ public:
+ KDESalFrame( SalFrame* pParent, ULONG nStyle );
+ virtual ~KDESalFrame();
+
+ virtual SalGraphics* GetGraphics();
+ virtual void ReleaseGraphics( SalGraphics *pGraphics );
+ virtual void updateGraphics();
+ virtual void UpdateSettings( AllSettings& rSettings );
+ virtual void Show( BOOL bVisible, BOOL bNoActivate );
+}; \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalGraphics.cxx b/vcl/unx/kde4/KDESalGraphics.cxx
new file mode 100644
index 000000000000..ae917f252b11
--- /dev/null
+++ b/vcl/unx/kde4/KDESalGraphics.cxx
@@ -0,0 +1,819 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#define _SV_SALNATIVEWIDGETS_KDE_CXX
+
+#define Region QtXRegion
+
+#include <QStyle>
+#include <QStyleOption>
+#include <QPainter>
+
+#include <kapplication.h>
+
+#undef Region
+
+#include "KDESalGraphics.hxx"
+
+#include <vcl/settings.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <stdio.h>
+
+using namespace ::rtl;
+
+/**
+ Conversion function between VCL ControlState together with
+ ImplControlValue and Qt state flags.
+ @param nControlState State of the widget (default, focused, ...) in Native Widget Framework.
+ @param aValue Value held by the widget (on, off, ...)
+*/
+QStyle::State vclStateValue2StateFlag( ControlState nControlState,
+ const ImplControlValue& aValue )
+{
+ QStyle::State nState =
+ ( (nControlState & CTRL_STATE_DEFAULT)? QStyle::State_None: QStyle::State_None ) |
+ ( (nControlState & CTRL_STATE_ENABLED)? QStyle::State_Enabled: QStyle::State_None ) |
+ ( (nControlState & CTRL_STATE_FOCUSED)? QStyle::State_HasFocus: QStyle::State_None ) |
+ ( (nControlState & CTRL_STATE_PRESSED)? QStyle::State_Sunken: QStyle::State_None ) |
+ ( (nControlState & CTRL_STATE_SELECTED)? QStyle::State_Selected : QStyle::State_None ) |
+ ( (nControlState & CTRL_STATE_ROLLOVER)? QStyle::State_MouseOver: QStyle::State_None );
+ //TODO ( (nControlState & CTRL_STATE_HIDDEN)? QStyle::State_: QStyle::State_None ) |
+
+ switch ( aValue.getTristateVal() )
+ {
+ case BUTTONVALUE_ON: nState |= QStyle::State_On; break;
+ case BUTTONVALUE_OFF: nState |= QStyle::State_Off; break;
+ case BUTTONVALUE_MIXED: nState |= QStyle::State_NoChange; break;
+ default: break;
+ }
+
+ return nState;
+}
+
+/**
+ Convert VCL Region to QRect.
+ @param rControlRegion The region to convert.
+ @return The bounding box of the region.
+*/
+QRect region2QRect( const Region& rControlRegion )
+{
+ Rectangle aRect = rControlRegion.GetBoundRect();
+
+ return QRect( QPoint( aRect.Left(), aRect.Top() ),
+ QPoint( aRect.Right(), aRect.Bottom() ) );
+}
+
+BOOL KDESalGraphics::IsNativeControlSupported( ControlType type, ControlPart part )
+{
+ if (type == CTRL_PUSHBUTTON) return true;
+
+ if (type == CTRL_MENUBAR) return true;
+
+ if (type == CTRL_MENU_POPUP) return true;
+
+ if (type == CTRL_EDITBOX) return true;
+
+ if (type == CTRL_COMBOBOX) return true;
+
+ if (type == CTRL_TOOLBAR) return true;
+
+ if (type == CTRL_CHECKBOX) return true;
+
+ if (type == CTRL_LISTBOX) return true;
+
+ if (type == CTRL_LISTNODE) return true;
+
+ if (type == CTRL_FRAME) return true;
+
+ if (type == CTRL_SCROLLBAR) return true;
+
+ if (type == CTRL_WINDOW_BACKGROUND) return true;
+
+ if (type == CTRL_SPINBOX && (part == PART_ENTIRE_CONTROL || part == HAS_BACKGROUND_TEXTURE) ) return true;
+
+ // no spinbuttons for KDE, paint spinbox complete
+ //if (type == CTRL_SPINBUTTONS) return true;
+
+ if (type == CTRL_GROUPBOX) return true;
+
+ if (type == CTRL_FIXEDLINE) return true;
+
+ if (type == CTRL_FIXEDBORDER) return true;
+
+ if (type == CTRL_TOOLTIP) return true;
+
+ if (type == CTRL_RADIOBUTTON) return true;
+
+ return false;
+
+ if ( (type == CTRL_TAB_ITEM) && (part == PART_ENTIRE_CONTROL) ) return true;
+ if ( (type == CTRL_TAB_PANE) && (part == PART_ENTIRE_CONTROL) ) return true;
+ // no CTRL_TAB_BODY for KDE
+ if ( (type == CTRL_PROGRESS) && (part == PART_ENTIRE_CONTROL) ) return true;
+
+ return false;
+}
+
+
+BOOL KDESalGraphics::hitTestNativeControl( ControlType, ControlPart,
+ const Region&, const Point&,
+ SalControlHandle&, BOOL& )
+{
+ return FALSE;
+}
+
+BOOL KDESalGraphics::drawNativeControl( ControlType type, ControlPart part,
+ const Region& rControlRegion, ControlState nControlState,
+ const ImplControlValue& value, SalControlHandle&,
+ const OUString& )
+{
+ // put not implemented types here
+ if (type == CTRL_SPINBUTTONS)
+ {
+ return false;
+ }
+
+ BOOL returnVal = true;
+
+ Display* dpy = GetXDisplay();
+ XLIB_Window drawable = GetDrawable();
+ GC gc = SelectPen();
+
+ QRect widgetRect = region2QRect(rControlRegion);
+ if( type == CTRL_SPINBOX && part == PART_ALL_BUTTONS )
+ type = CTRL_SPINBUTTONS;
+ if( type == CTRL_SPINBUTTONS )
+ {
+ SpinbuttonValue* pSpinVal = (SpinbuttonValue *)(value.getOptionalVal());
+ Rectangle aButtonRect( pSpinVal->maUpperRect);
+ aButtonRect.Union( pSpinVal->maLowerRect );;
+ widgetRect = QRect( aButtonRect.Left(), aButtonRect.Top(),
+ aButtonRect.Right(), aButtonRect.Bottom() );
+ }
+
+ //draw right onto the window
+ QPixmap pixmap(widgetRect.width(), widgetRect.height());
+
+ if (pixmap.isNull())
+ {
+ return false;
+ }
+
+ QPainter painter(&pixmap);
+ // painter.setBackgroundMode(Qt::OpaqueMode);
+
+ //copy previous screen contents for proper blending
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QPixmap screen = QPixmap::fromX11Pixmap(drawable);
+ painter.drawPixmap(0,0, screen, widgetRect.left(), widgetRect.top(), widgetRect.width(), widgetRect.height());
+ #else
+ const QX11Info& rX11Info( pixmap.x11Info() );
+ X11SalGraphics::CopyScreenArea( dpy,
+ drawable, GetScreenNumber(), GetBitCount(),
+ pixmap.handle(), rX11Info.screen(), rX11Info.depth(),
+ GetDisplay()->GetCopyGC( GetScreenNumber() ),
+ widgetRect.left(), widgetRect.top(), widgetRect.width(), widgetRect.height(),
+ 0, 0 );
+ #endif
+
+ if (type == CTRL_PUSHBUTTON)
+ {
+ QStyleOptionButton styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state =vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl( QStyle::CE_PushButton, &styleOption, &painter);
+ }
+ else if ( (type == CTRL_MENUBAR))
+ {
+ if (part == PART_MENU_ITEM)
+ {
+ QStyleOptionMenuItem styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl( QStyle::CE_MenuBarItem, &styleOption, &painter);
+ }
+ else
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+ }
+ }
+ else if (type == CTRL_MENU_POPUP)
+ {
+ if (part == PART_MENU_ITEM)
+ {
+ QStyleOptionMenuItem styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl( QStyle::CE_MenuItem, &styleOption, &painter);
+ }
+ else if (part == PART_MENU_ITEM_CHECK_MARK)
+ {
+ QStyleOptionButton styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ if (nControlState & CTRL_STATE_PRESSED)
+ {
+ kapp->style()->drawPrimitive( QStyle::PE_IndicatorMenuCheckMark, &styleOption, &painter);
+ }
+ }
+ else if (part == PART_MENU_ITEM_RADIO_MARK)
+ {
+ QStyleOptionButton styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ if (nControlState & CTRL_STATE_PRESSED)
+ {
+ kapp->style()->drawPrimitive( QStyle::PE_IndicatorRadioButton, &styleOption, &painter);
+ }
+ }
+ else
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QStyleOptionFrameV3 styleOption;
+ #else
+ QStyleOptionFrameV2 styleOption;
+ #endif
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ styleOption.frameShape = QFrame::StyledPanel;
+ #endif
+
+ kapp->style()->drawPrimitive( QStyle::PE_FrameMenu, &styleOption, &painter);
+ }
+ }
+ else if ( (type == CTRL_TOOLBAR) && (part == PART_BUTTON) )
+ {
+ QStyleOptionToolButton styleOption;
+
+ styleOption.arrowType = Qt::NoArrow;
+ styleOption.subControls = QStyle::SC_ToolButton;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ styleOption.state |= QStyle::State_Raised | QStyle::State_Enabled | QStyle::State_AutoRaise;
+
+ kapp->style()->drawComplexControl( QStyle::CC_ToolButton, &styleOption, &painter);
+ }
+ else if ( (type == CTRL_TOOLBAR) && (part == PART_ENTIRE_CONTROL) )
+ {
+ QStyleOptionToolBar styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl( QStyle::CE_ToolBar, &styleOption, &painter);
+ }
+ else if ( (type == CTRL_TOOLBAR) && (part == PART_THUMB_VERT) )
+ {
+ QStyleOption styleOption;
+
+ int width = kapp->style()->pixelMetric(QStyle::PM_ToolBarHandleExtent);
+
+ styleOption.rect = QRect(0, 0, width, widgetRect.height());
+ styleOption.state = QStyle::State_Horizontal;
+
+ kapp->style()->drawPrimitive( QStyle::PE_IndicatorToolBarHandle, &styleOption, &painter);
+ }
+ else if (type == CTRL_EDITBOX)
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+
+ //TODO hover?? OO does not seem to do this for line edits
+
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QStyleOptionFrameV3 styleOption;
+ #else
+ QStyleOptionFrameV2 styleOption;
+ #endif
+
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ //TODO...how does the line edit draw itself internally??
+ styleOption.rect = QRect(2, 2, widgetRect.width()-4, widgetRect.height()-4);
+ kapp->style()->drawPrimitive( QStyle::PE_PanelLineEdit, &styleOption, &painter);
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ kapp->style()->drawPrimitive( QStyle::PE_FrameLineEdit, &styleOption, &painter);
+ }
+ else if (type == CTRL_COMBOBOX)
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+
+ QStyleOptionComboBox styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ styleOption.editable = true;
+
+ kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter);
+ }
+ else if (type == CTRL_LISTBOX)
+ {
+ QStyleOptionComboBox styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ if (part == PART_SUB_EDIT)
+ {
+ kapp->style()->drawControl(QStyle::CE_ComboBoxLabel, &styleOption, &painter);
+ }
+ else
+ {
+ kapp->style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, &painter);
+ }
+ }
+ else if (type == CTRL_LISTNODE)
+ {
+ QStyleOption styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ styleOption.state |= QStyle::State_Item;
+ styleOption.state |= QStyle::State_Children;
+
+ if (nControlState & CTRL_STATE_PRESSED)
+ {
+ styleOption.state |= QStyle::State_Open;
+ }
+
+ kapp->style()->drawPrimitive(QStyle::PE_IndicatorBranch, &styleOption, &painter);
+ }
+ else if (type == CTRL_CHECKBOX)
+ {
+ QStyleOptionButton styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl(QStyle::CE_CheckBox, &styleOption, &painter);
+ }
+ else if (type == CTRL_SCROLLBAR)
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+
+ if ((part == PART_DRAW_BACKGROUND_VERT) || (part == PART_DRAW_BACKGROUND_HORZ))
+ {
+ ScrollbarValue* sbVal = static_cast<ScrollbarValue *> ( value.getOptionalVal() );
+
+ QStyleOptionSlider styleOption;
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+
+ //if the scroll bar is active (aka not degenrate...allow for hover events
+ if (sbVal->mnVisibleSize < sbVal->mnMax)
+ {
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ styleOption.state |= QStyle::State_MouseOver;
+ }
+
+ //horizontal or vertical
+ if (part == PART_DRAW_BACKGROUND_VERT)
+ {
+ styleOption.orientation = Qt::Vertical;
+ }
+ else
+ {
+ styleOption.state |= QStyle::State_Horizontal;
+ }
+
+ //setup parameters from the OO values
+ styleOption.minimum = sbVal->mnMin;
+ styleOption.maximum = sbVal->mnMax - sbVal->mnVisibleSize;
+ styleOption.sliderValue = sbVal->mnCur;
+ styleOption.sliderPosition = sbVal->mnCur;
+ styleOption.pageStep = sbVal->mnVisibleSize;
+
+ //setup the active control...always the slider
+ if (sbVal->mnThumbState & CTRL_STATE_ROLLOVER)
+ {
+ styleOption.activeSubControls = QStyle::SC_ScrollBarSlider;
+ }
+
+ kapp->style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, &painter);
+ }
+ }
+ else if (type == CTRL_SPINBOX)
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+
+ QStyleOptionSpinBox styleOption;
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ // determine active control
+ SpinbuttonValue* pSpinVal = (SpinbuttonValue *)(value.getOptionalVal());
+ if( pSpinVal )
+ {
+ if( (pSpinVal->mnUpperState & CTRL_STATE_PRESSED) )
+ styleOption.activeSubControls |= QStyle::SC_SpinBoxUp;
+ if( (pSpinVal->mnLowerState & CTRL_STATE_PRESSED) )
+ styleOption.activeSubControls |= QStyle::SC_SpinBoxDown;
+ }
+
+ kapp->style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, &painter);
+ }
+ else if (type == CTRL_GROUPBOX)
+ {
+ QStyleOptionGroupBox styleOption;
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawComplexControl(QStyle::CC_GroupBox, &styleOption, &painter);
+ }
+ else if (type == CTRL_RADIOBUTTON)
+ {
+ QStyleOptionButton styleOption;
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawControl(QStyle::CE_RadioButton, &styleOption, &painter);
+ }
+ else if (type == CTRL_TOOLTIP)
+ {
+ QStyleOption styleOption;
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+
+ kapp->style()->drawPrimitive(QStyle::PE_PanelTipLabel, &styleOption, &painter);
+ }
+ else if (type == CTRL_FRAME)
+ {
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QStyleOptionFrameV3 styleOption;
+ #else
+ QStyleOptionFrameV2 styleOption;
+ #endif
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ styleOption.frameShape = QFrame::StyledPanel;
+ #endif
+
+ kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter);
+ }
+ else if (type == CTRL_FIXEDBORDER)
+ {
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ QStyleOptionFrameV3 styleOption;
+ #else
+ QStyleOptionFrameV2 styleOption;
+ #endif
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 4, 5, 0 ) )
+ styleOption.frameShape = QFrame::StyledPanel;
+ #endif
+
+ kapp->style()->drawPrimitive(QStyle::PE_FrameWindow, &styleOption, &painter);
+ }
+ else if (type == CTRL_WINDOW_BACKGROUND)
+ {
+ pixmap.fill(KApplication::palette().color(QPalette::Window));
+ }
+ else if (type == CTRL_FIXEDLINE)
+ {
+ QStyleOptionMenuItem styleOption;
+
+ styleOption.rect = QRect(0, 0, widgetRect.width(), widgetRect.height());
+ styleOption.state = vclStateValue2StateFlag( nControlState, value );
+ styleOption.menuItemType = QStyleOptionMenuItem::Separator;
+ styleOption.state |= QStyle::State_Item;
+
+ kapp->style()->drawControl( QStyle::CE_MenuItem, &styleOption, &painter);
+ }
+ else
+ {
+ returnVal = false;
+ }
+
+ if (returnVal)
+ {
+ X11SalGraphics::CopyScreenArea( dpy,
+ pixmap.handle(), pixmap.x11Info().screen(), pixmap.x11Info().depth(),
+ drawable, GetScreenNumber(), GetVisual().GetDepth(), gc,
+ 0, 0, widgetRect.width(), widgetRect.height(), widgetRect.left(), widgetRect.top() );
+ }
+
+ return returnVal;
+}
+
+BOOL KDESalGraphics::getNativeControlRegion( ControlType type, ControlPart part,
+ const Region& controlRegion, ControlState controlState,
+ const ImplControlValue& val, SalControlHandle&,
+ const OUString&,
+ Region &nativeBoundingRegion, Region &nativeContentRegion )
+{
+ bool retVal = false;
+
+ QRect boundingRect = region2QRect( controlRegion );
+ QRect contentRect = boundingRect;
+ QStyleOptionComplex styleOption;
+
+ switch ( type )
+ {
+ // Metrics of the push button
+ case CTRL_PUSHBUTTON:
+ if (part == PART_ENTIRE_CONTROL)
+ {
+ styleOption.state = vclStateValue2StateFlag(controlState, val);
+
+ if ( controlState & CTRL_STATE_DEFAULT )
+ {
+ int size = kapp->style()->pixelMetric(
+ QStyle::PM_ButtonDefaultIndicator, &styleOption );
+
+ boundingRect.adjust( -size, -size, size, size );
+
+ retVal = true;
+ }
+ }
+ break;
+ case CTRL_EDITBOX:
+ {
+ styleOption.rect = QRect(0, 0, contentRect.width(), contentRect.height());
+ styleOption.state = vclStateValue2StateFlag(controlState, val);
+
+ int size = kapp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) - 1;
+
+ contentRect.adjust( -size, -size, size, size);
+ boundingRect = contentRect;
+
+ retVal = true;
+
+ break;
+ }
+ case CTRL_CHECKBOX:
+ if (part == PART_ENTIRE_CONTROL)
+ {
+ styleOption.state = vclStateValue2StateFlag(controlState, val);
+
+ contentRect.setWidth(kapp->style()->pixelMetric(
+ QStyle::PM_IndicatorWidth, &styleOption));
+ contentRect.setHeight(kapp->style()->pixelMetric(
+ QStyle::PM_IndicatorHeight, &styleOption));
+
+ contentRect.adjust(0, 0,
+ 2 * kapp->style()->pixelMetric(
+ QStyle::PM_FocusFrameHMargin, &styleOption),
+ 2 * kapp->style()->pixelMetric(
+ QStyle::PM_FocusFrameVMargin, &styleOption)
+ );
+
+ boundingRect = contentRect;
+
+ retVal = true;
+
+ break;
+ }
+ case CTRL_COMBOBOX:
+ case CTRL_LISTBOX:
+ {
+ QStyleOptionComboBox cbo;
+
+ cbo.rect = QRect(0, 0, contentRect.width(), contentRect.height());
+ cbo.state = vclStateValue2StateFlag(controlState, val);
+
+ switch ( part )
+ {
+ case PART_ENTIRE_CONTROL:
+ {
+ int size = kapp->style()->pixelMetric(QStyle::PM_ComboBoxFrameWidth) - 2;
+ contentRect.adjust(-size,-size,size,size);
+
+ // find out the minimum size that should be used
+ // assume contents is a text ling
+ int nHeight = kapp->fontMetrics().height();
+ QSize aContentSize( contentRect.width(), nHeight );
+ QSize aMinSize = kapp->style()->
+ sizeFromContents( QStyle::CT_ComboBox, &cbo, aContentSize );
+ if( aMinSize.height() > contentRect.height() )
+ contentRect.adjust( 0, 0, 0, aMinSize.height() - contentRect.height() );
+ boundingRect = contentRect;
+ retVal = true;
+ break;
+ }
+ case PART_BUTTON_DOWN:
+ //the entire control can be used as the "down" button
+ retVal = true;
+ break;
+ case PART_SUB_EDIT:
+ contentRect = kapp->style()->subControlRect(
+ QStyle::CC_ComboBox, &cbo, QStyle::SC_ComboBoxEditField );
+
+ contentRect.translate( boundingRect.left(), boundingRect.top() );
+
+ retVal = true;
+ break;
+ }
+ break;
+ }
+ case CTRL_SPINBOX:
+ {
+ QStyleOptionSpinBox sbo;
+
+ sbo.rect = QRect(0, 0, contentRect.width(), contentRect.height());
+ sbo.state = vclStateValue2StateFlag(controlState, val);
+
+ switch ( part )
+ {
+ case PART_BUTTON_UP:
+ contentRect = kapp->style()->subControlRect(
+ QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxUp );
+ contentRect.translate( boundingRect.left(), boundingRect.top() );
+ retVal = true;
+ boundingRect = QRect();
+ break;
+
+ case PART_BUTTON_DOWN:
+ contentRect = kapp->style()->subControlRect(
+ QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxDown );
+ retVal = true;
+ contentRect.translate( boundingRect.left(), boundingRect.top() );
+ boundingRect = QRect();
+ break;
+
+ case PART_SUB_EDIT:
+ contentRect = kapp->style()->subControlRect(
+ QStyle::CC_SpinBox, &sbo, QStyle::SC_SpinBoxEditField );
+ retVal = true;
+ contentRect.translate( boundingRect.left(), boundingRect.top() );
+ break;
+ default:
+ retVal = true;
+ }
+ break;
+ }
+ case CTRL_MENU_POPUP:
+ //just limit the widget of the menu items
+ //OO isn't very flexible in all reguards with the menu
+ //so we do the best we can
+ if (part == PART_MENU_ITEM_CHECK_MARK)
+ {
+ contentRect.setWidth(contentRect.height());
+ retVal = true;
+ }
+ else if (part == PART_MENU_ITEM_RADIO_MARK)
+ {
+ contentRect.setWidth(contentRect.height());
+ retVal = true;
+ }
+ break;
+ case CTRL_FRAME:
+ {
+ if (part == PART_BORDER)
+ {
+ int size = kapp->style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ //contentRect.adjust(size, size, size, size);
+ boundingRect.adjust(-size, -size, size, size);
+ retVal = true;
+ }
+
+ break;
+ }
+ case CTRL_RADIOBUTTON:
+ {
+ const int h = kapp->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight);
+ const int w = kapp->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth);
+
+ contentRect = QRect(boundingRect.left(), boundingRect.top(), w, h);
+ contentRect.adjust(0, 0,
+ 2 * kapp->style()->pixelMetric(
+ QStyle::PM_FocusFrameHMargin, &styleOption),
+ 2 * kapp->style()->pixelMetric(
+ QStyle::PM_FocusFrameVMargin, &styleOption)
+ );
+ boundingRect = contentRect;
+
+ retVal = true;
+ }
+ default:
+ break;
+ }
+#if 0
+
+
+ // Metrics of the scroll bar
+ case CTRL_SCROLLBAR:
+ //pWidget = pWidgetPainter->scrollBar( rControlRegion,
+ //( part == PART_BUTTON_LEFT || part == PART_BUTTON_RIGHT ),
+ //ImplControlValue() );
+ //aStyleOption.initFrom( pWidget );
+
+ switch ( part )
+ {
+ case PART_BUTTON_LEFT:
+ case PART_BUTTON_UP:
+ qRect = kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption, QStyle::SC_ScrollBarSubLine );
+
+ // Workaround for Platinum style scroll bars. It makes the
+ // left/up button invisible.
+ if ( part == PART_BUTTON_LEFT )
+ {
+ if ( qRect.left() > kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption,
+ QStyle::SC_ScrollBarSubPage ).left() )
+ {
+ qRect.setLeft( 0 );
+ qRect.setRight( 0 );
+ }
+ }
+ else
+ {
+ if ( qRect.top() > kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption,
+ QStyle::SC_ScrollBarSubPage ).top() )
+ {
+ qRect.setTop( 0 );
+ qRect.setBottom( 0 );
+ }
+ }
+
+ qRect.translate( qBoundingRect.left(), qBoundingRect.top() );
+
+ bReturn = TRUE;
+ break;
+
+ case PART_BUTTON_RIGHT:
+ case PART_BUTTON_DOWN:
+ qRect = kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption, QStyle::SC_ScrollBarAddLine );
+
+ // Workaround for Platinum and 3 button style scroll bars.
+ // It makes the right/down button bigger.
+ if ( part == PART_BUTTON_RIGHT )
+ qRect.setLeft( kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption,
+ QStyle::SC_ScrollBarAddPage ).right() + 1 );
+ else
+ qRect.setTop( kapp->style()->subControlRect(
+ QStyle::CC_ScrollBar, &aStyleOption,
+ QStyle::SC_ScrollBarAddPage ).bottom() + 1 );
+
+ qRect.translate( qBoundingRect.left(), qBoundingRect.top() );
+
+ bReturn = TRUE;
+ break;
+ }
+ break;
+ }
+#endif
+
+ if (retVal)
+ {
+ // Bounding region
+ Point aBPoint( boundingRect.x(), boundingRect.y() );
+ Size aBSize( boundingRect.width(), boundingRect.height() );
+ nativeBoundingRegion = Region( Rectangle( aBPoint, aBSize ) );
+
+ // Region of the content
+ Point aPoint( contentRect.x(), contentRect.y() );
+ Size aSize( contentRect.width(), contentRect.height() );
+ nativeContentRegion = Region( Rectangle( aPoint, aSize ) );
+ }
+
+ return retVal;
+}
diff --git a/vcl/unx/kde4/KDESalGraphics.hxx b/vcl/unx/kde4/KDESalGraphics.hxx
new file mode 100644
index 000000000000..e598f75be75f
--- /dev/null
+++ b/vcl/unx/kde4/KDESalGraphics.hxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <rtl/string.hxx>
+#include <saldisp.hxx>
+#include <salgdi.h>
+
+/** handles graphics drawings requests and performs the needed drawing operations */
+class KDESalGraphics : public X11SalGraphics
+{
+ public:
+ KDESalGraphics() {}
+ virtual ~KDESalGraphics() {}
+
+ /**
+ What widgets can be drawn the native way.
+ @param type Type of the widget.
+ @param part Specification of the widget's part if it consists of more than one.
+ @return true if the platform supports native drawing of the widget type defined by part.
+ */
+ virtual BOOL IsNativeControlSupported( ControlType type, ControlPart part );
+
+ /** Test whether the position is in the native widget.
+ If the return value is TRUE, bIsInside contains information whether
+ aPos was or was not inside the native widget specified by the
+ type/part combination.
+ */
+ virtual BOOL hitTestNativeControl( ControlType type, ControlPart part,
+ const Region& rControlRegion, const Point& aPos,
+ SalControlHandle& rControlHandle, BOOL& rIsInside );
+ /** Draw the requested control described by part/nControlState.
+
+ @param rControlRegion
+ The bounding region of the complete control in VCL frame coordinates.
+
+ @param aValue
+ An optional value (tristate/numerical/string).
+
+ @param rControlHandle
+ Carries platform dependent data and is maintained by the SalFrame implementation.
+
+ @param aCaption
+ A caption or title string (like button text etc.)
+ */
+ virtual BOOL drawNativeControl( ControlType type, ControlPart part,
+ const Region& rControlRegion, ControlState nControlState,
+ const ImplControlValue& aValue, SalControlHandle& rControlHandle,
+ const rtl::OUString& aCaption );
+
+ /** Draw text on the widget.
+ OPTIONAL. Draws the requested text for the control described by part/nControlState.
+ Used if text is not drawn by DrawNativeControl().
+
+ @param rControlRegion The bounding region of the complete control in VCL frame coordinates.
+ @param aValue An optional value (tristate/numerical/string)
+ @param rControlHandle Carries platform dependent data and is maintained by the SalFrame implementation.
+ @param aCaption A caption or title string (like button text etc.)
+ */
+ virtual BOOL drawNativeControlText( ControlType, ControlPart,
+ const Region&, ControlState,
+ const ImplControlValue&, SalControlHandle&,
+ const rtl::OUString& ) { return false; }
+ /** Check if the bounding regions match.
+
+ If the return value is TRUE, rNativeBoundingRegion
+ contains the true bounding region covered by the control
+ including any adornment, while rNativeContentRegion contains the area
+ within the control that can be safely drawn into without drawing over
+ the borders of the control.
+
+ @param rControlRegion
+ The bounding region of the control in VCL frame coordinates.
+
+ @param aValue
+ An optional value (tristate/numerical/string)
+
+ @param rControlHandle
+ Carries platform dependent data and is maintained by the SalFrame implementation.
+
+ @param aCaption
+ A caption or title string (like button text etc.)
+ */
+ virtual BOOL getNativeControlRegion( ControlType type, ControlPart part,
+ const Region& rControlRegion, ControlState nControlState,
+ const ImplControlValue& aValue, SalControlHandle& rControlHandle,
+ const rtl::OUString& aCaption,
+ Region &rNativeBoundingRegion, Region &rNativeContentRegion );
+}; \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalInstance.cxx b/vcl/unx/kde4/KDESalInstance.cxx
new file mode 100644
index 000000000000..b9aab9a0184a
--- /dev/null
+++ b/vcl/unx/kde4/KDESalInstance.cxx
@@ -0,0 +1,35 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "KDESalInstance.hxx"
+
+#include "KDESalFrame.hxx"
+
+SalFrame* KDESalInstance::CreateFrame( SalFrame *pParent, ULONG nState )
+{
+ return new KDESalFrame( pParent, nState );
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/KDESalInstance.hxx b/vcl/unx/kde4/KDESalInstance.hxx
new file mode 100644
index 000000000000..6f0b268cc397
--- /dev/null
+++ b/vcl/unx/kde4/KDESalInstance.hxx
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <salinst.h>
+
+class SalYieldMutex;
+class SalFrame;
+
+class KDESalInstance : public X11SalInstance
+{
+ public:
+ KDESalInstance( SalYieldMutex* pMutex ) : X11SalInstance( pMutex ) {}
+ virtual ~KDESalInstance() {}
+ virtual SalFrame* CreateFrame( SalFrame* pParent, ULONG nStyle );
+}; \ No newline at end of file
diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx
new file mode 100644
index 000000000000..70b1796df7f0
--- /dev/null
+++ b/vcl/unx/kde4/KDEXLib.cxx
@@ -0,0 +1,171 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "VCLKDEApplication.hxx"
+
+#define Region QtXRegion
+
+#include <kapplication.h>
+#include <klocale.h>
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kstartupinfo.h>
+
+#undef Region
+
+#include "KDEXLib.hxx"
+
+#include <i18n_im.hxx>
+#include <i18n_xkb.hxx>
+
+#include <saldata.hxx>
+#include <vos/process.hxx>
+
+#include "KDESalDisplay.hxx"
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+KDEXLib::KDEXLib() :
+ SalXLib(), m_bStartupDone(false), m_pApplication(0),
+ m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 )
+{
+}
+
+KDEXLib::~KDEXLib()
+{
+ delete (VCLKDEApplication*)m_pApplication;
+
+ // free the faked cmdline arguments no longer needed by KApplication
+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
+ {
+ free( m_pFreeCmdLineArgs[i] );
+ }
+
+ delete [] m_pFreeCmdLineArgs;
+ delete [] m_pAppCmdLineArgs;
+}
+
+void KDEXLib::Init()
+{
+ SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod;
+ pInputMethod->SetLocale();
+ XrmInitialize();
+
+ KAboutData *kAboutData = new KAboutData( "OpenOffice.org",
+ "OpenOffice.org",
+ ki18n( "OpenOffice.org" ),
+ "3.0.0",
+ ki18n( "OpenOffice.org with KDE Native Widget Support." ),
+ KAboutData::License_LGPL,
+ ki18n( "Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 Novell, Inc"),
+ ki18n( "OpenOffice.org is an office suite.\n" ),
+ "http://kde.openoffice.org/index.html",
+ "dev@kde.openoffice.org" );
+ kAboutData->addAuthor( ki18n( "Jan Holesovsky" ),
+ ki18n( "Original author and maintainer of the KDE NWF." ),
+ "kendy@artax.karlin.mff.cuni.cz",
+ "http://artax.karlin.mff.cuni.cz/~kendy" );
+ kAboutData->addAuthor( ki18n("Eric Bischoff"),
+ ki18n( "Accessibility fixes, porting to KDE 4." ),
+ "bischoff@kde.org" );
+
+ m_nFakeCmdLineArgs = 1;
+ USHORT nIdx;
+ vos::OExtCommandLine aCommandLine;
+ int nParams = aCommandLine.getCommandArgCount();
+ rtl::OString aDisplay;
+ rtl::OUString aParam, aBin;
+
+ for ( nIdx = 0; nIdx < nParams; ++nIdx )
+ {
+ aCommandLine.getCommandArg( nIdx, aParam );
+ if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams )
+ {
+ aCommandLine.getCommandArg( nIdx + 1, aParam );
+ aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() );
+
+ m_nFakeCmdLineArgs = 3;
+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
+ m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" );
+ m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() );
+ }
+ }
+ if ( !m_pFreeCmdLineArgs )
+ m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
+
+ osl_getExecutableFile( &aParam.pData );
+ osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData );
+ rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() );
+ m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() );
+
+ // make a copy of the string list for freeing it since
+ // KApplication manipulates the pointers inside the argument vector
+ // note: KApplication bad !
+ m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
+ for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
+ m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i];
+
+ KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData );
+
+ m_pApplication = new VCLKDEApplication();
+ kapp->disableSessionManagement();
+
+ Display* pDisp = QX11Info::display();
+ SalKDEDisplay *pSalDisplay = new SalKDEDisplay(pDisp);
+
+ ((VCLKDEApplication*)m_pApplication)->disp = pSalDisplay;
+
+ XSetIOErrorHandler ( (XIOErrorHandler)X11SalData::XIOErrorHdl );
+ XSetErrorHandler ( (XErrorHandler)X11SalData::XErrorHdl );
+
+ pInputMethod->CreateMethod( pDisp );
+ pInputMethod->AddConnectionWatch( pDisp, (void*)this );
+ pSalDisplay->SetInputMethod( pInputMethod );
+
+ PushXErrorLevel( true );
+ SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp );
+ XSync( pDisp, False );
+
+ pKbdExtension->UseExtension( ! HasXErrorOccured() );
+ PopXErrorLevel();
+
+ pSalDisplay->SetKbdExtension( pKbdExtension );
+}
+
+void KDEXLib::doStartup()
+{
+ if( ! m_bStartupDone )
+ {
+ KStartupInfo::appStarted();
+ m_bStartupDone = true;
+ #if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "called KStartupInfo::appStarted()\n" );
+ #endif
+ }
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/KDEXLib.hxx b/vcl/unx/kde4/KDEXLib.hxx
new file mode 100644
index 000000000000..0380db7212ef
--- /dev/null
+++ b/vcl/unx/kde4/KDEXLib.hxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <saldisp.hxx>
+
+class KDEXLib : public SalXLib
+{
+ private:
+ bool m_bStartupDone;
+ void* m_pApplication;
+ char** m_pFreeCmdLineArgs;
+ char** m_pAppCmdLineArgs;
+ int m_nFakeCmdLineArgs;
+
+ public:
+ KDEXLib();
+
+ virtual ~KDEXLib();
+ virtual void Init();
+
+ void doStartup();
+};
diff --git a/vcl/unx/kde4/VCLKDEApplication.cxx b/vcl/unx/kde4/VCLKDEApplication.cxx
new file mode 100644
index 000000000000..29adcae6ceff
--- /dev/null
+++ b/vcl/unx/kde4/VCLKDEApplication.cxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "VCLKDEApplication.hxx"
+
+#define Region QtXRegion
+#include <QEvent>
+#undef Region
+
+#include "KDESalDisplay.hxx"
+
+VCLKDEApplication::VCLKDEApplication() :
+ KApplication()
+{
+ disp = 0;
+}
+
+bool VCLKDEApplication::x11EventFilter(XEvent* event)
+{
+ //if we have a display and the display consumes the event
+ //do not process the event in qt
+ if (disp && disp->Dispatch(event) > 0)
+ {
+ return true;
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/vcl/unx/kde4/VCLKDEApplication.hxx b/vcl/unx/kde4/VCLKDEApplication.hxx
new file mode 100644
index 000000000000..839b664ea8d2
--- /dev/null
+++ b/vcl/unx/kde4/VCLKDEApplication.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#pragma once
+
+#define Region QtXRegion
+
+#include <QSessionManager>
+
+#include <kapplication.h>
+
+#undef Region
+
+class SalKDEDisplay;
+
+/* #i59042# override KApplications method for session management
+ * since it will interfere badly with our own.
+ */
+class VCLKDEApplication : public KApplication
+{
+ public:
+ VCLKDEApplication();
+
+ virtual void commitData(QSessionManager&) {};
+
+ virtual bool x11EventFilter(XEvent* event);
+
+ SalKDEDisplay* disp;
+}; \ No newline at end of file
diff --git a/vcl/unx/kde4/main.cxx b/vcl/unx/kde4/main.cxx
new file mode 100644
index 000000000000..2a48624d9d14
--- /dev/null
+++ b/vcl/unx/kde4/main.cxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#define Region QtXRegion
+#include <QApplication>
+#undef Region
+
+#include "KDEData.hxx"
+#include "KDESalInstance.hxx"
+
+#if OSL_DEBUG_LEVEL > 1
+#include <stdio.h>
+#endif
+
+#include <rtl/string.hxx>
+
+/// entry point for the KDE4 VCL plugin
+extern "C" {
+ VCL_DLLPUBLIC SalInstance* create_SalInstance( oslModule )
+ {
+#if QT_VERSION < 0x050000
+ // Qt 4.x support needs >= 4.1.0
+ rtl::OString aVersion( qVersion() );
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "qt version string is \"%s\"\n", aVersion.getStr() );
+#endif
+ sal_Int32 nIndex = 0, nMajor = 0, nMinor = 0, nMicro = 0;
+ nMajor = aVersion.getToken( 0, '.', nIndex ).toInt32();
+ if( nIndex > 0 )
+ nMinor = aVersion.getToken( 0, '.', nIndex ).toInt32();
+ if( nIndex > 0 )
+ nMicro = aVersion.getToken( 0, '.', nIndex ).toInt32();
+ if( nMajor != 4 || nMinor < 1 )
+ {
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "unsuitable qt version %d.%d.%d\n", nMajor, nMinor, nMicro );
+#endif
+ return NULL;
+ }
+#endif
+
+ KDESalInstance* pInstance = new KDESalInstance( new SalYieldMutex() );
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "created KDESalInstance 0x%p\n", pInstance );
+#endif
+
+ // initialize SalData
+ KDEData *salData = new KDEData();
+ SetSalData(salData);
+ salData->m_pInstance = pInstance;
+ salData->Init();
+ salData->initNWF();
+
+ return pInstance;
+ }
+}
diff --git a/vcl/unx/kde4/makefile.mk b/vcl/unx/kde4/makefile.mk
new file mode 100644
index 000000000000..48a2dc87c3a6
--- /dev/null
+++ b/vcl/unx/kde4/makefile.mk
@@ -0,0 +1,92 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2008 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.10 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=vcl
+TARGET=kde4plug
+.INCLUDE : $(PRJ)$/util$/makefile.pmk
+
+# workaround for makedepend hang
+MKDEPENDSOLVER=
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/makefile2.pmk
+
+# For some of the included external KDE headers, GCC complains about shadowed
+# symbols in instantiated template code only at the end of a compilation unit,
+# so the only solution is to disable that warning here:
+.IF "$(COM)" == "GCC"
+CFLAGSCXX+=-Wno-shadow
+.ENDIF
+
+# --- Files --------------------------------------------------------
+
+.IF "$(GUIBASE)"!="unx"
+
+dummy:
+ @echo "Nothing to build for GUIBASE $(GUIBASE)"
+
+.ELSE # "$(GUIBASE)"!="unx"
+
+.IF "$(ENABLE_KDE4)" != ""
+
+CFLAGS+=$(KDE4_CFLAGS)
+
+.IF "$(ENABLE_RANDR)" != ""
+CDEFS+=-DUSE_RANDR
+.ENDIF
+
+SLOFILES=\
+ $(SLO)$/main.obj \
+ $(SLO)$/VCLKDEApplication.obj \
+ $(SLO)$/KDEXLib.obj \
+ $(SLO)$/KDESalDisplay.obj \
+ $(SLO)$/KDESalFrame.obj \
+ $(SLO)$/KDESalGraphics.obj \
+ $(SLO)$/KDESalInstance.obj \
+ $(SLO)$/KDEData.obj
+
+
+.ELSE # "$(ENABLE_KDE4)" != ""
+
+dummy:
+ @echo KDE disabled - nothing to build
+.ENDIF
+.ENDIF # "$(GUIBASE)"!="unx"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.INCLUDE : $(PRJ)$/util$/target.pmk
diff --git a/vcl/unx/source/fontmanager/fontcache.cxx b/vcl/unx/source/fontmanager/fontcache.cxx
index 4932f7a771e0..524a365ee20b 100644
--- a/vcl/unx/source/fontmanager/fontcache.cxx
+++ b/vcl/unx/source/fontmanager/fontcache.cxx
@@ -7,7 +7,6 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: fontcache.cxx,v $
- * $Revision: 1.26 $
*
* This file is part of OpenOffice.org.
*
@@ -50,7 +49,7 @@
#endif
#define FONTCACHEFILE "/user/psprint/pspfontcache"
-#define CACHE_MAGIC "PspFontCacheFile format 3"
+#define CACHE_MAGIC "PspFontCacheFile format 4"
using namespace std;
using namespace rtl;
diff --git a/vcl/unx/source/fontmanager/fontmanager.cxx b/vcl/unx/source/fontmanager/fontmanager.cxx
index 995abb5fb89f..99f19ba2fc31 100644
--- a/vcl/unx/source/fontmanager/fontmanager.cxx
+++ b/vcl/unx/source/fontmanager/fontmanager.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: fontmanager.cxx,v $
- * $Revision: 1.81.22.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -41,7 +38,8 @@
#include "vcl/fontmanager.hxx"
#include "vcl/fontcache.hxx"
-#include "vcl/helper.hxx"
+#include "vcl/fontcache.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/strhelper.hxx"
#include "vcl/ppdparser.hxx"
#include "vcl/svdata.hxx"
@@ -377,6 +375,15 @@ PrintFontManager::Type1FontFile::~Type1FontFile()
// -------------------------------------------------------------------------
+PrintFontManager::TrueTypeFontFile::TrueTypeFontFile()
+: PrintFont( fonttype::TrueType )
+, m_nDirectory( 0 )
+, m_nCollectionEntry(-1)
+, m_nTypeFlags( TYPEFLAG_INVALID )
+{}
+
+// -------------------------------------------------------------------------
+
PrintFontManager::TrueTypeFontFile::~TrueTypeFontFile()
{
}
@@ -1353,7 +1360,7 @@ bool PrintFontManager::analyzeFontFile( int nDirID, const OString& rFontFile, co
}
else if( aExt.EqualsIgnoreCaseAscii( "ttf" )
|| aExt.EqualsIgnoreCaseAscii( "tte" ) // #i33947# for Gaiji support
- || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // #112957# allow GLYF-OTF
+ || aExt.EqualsIgnoreCaseAscii( "otf" ) ) // check for TTF- and PS-OpenType too
{
TrueTypeFontFile* pFont = new TrueTypeFontFile();
pFont->m_nDirectory = nDirID;
@@ -2625,6 +2632,10 @@ void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, FastPrintFontInfo& r
rInfo.m_aEncoding = pFont->m_aEncoding;
rInfo.m_eEmbeddedbitmap = pFont->m_eEmbeddedbitmap;
rInfo.m_eAntialias = pFont->m_eAntialias;
+
+ rInfo.m_bEmbeddable = (pFont->m_eType == fonttype::Type1);
+ rInfo.m_bSubsettable = (pFont->m_eType == fonttype::TrueType); // TODO: rename to SfntType
+
rInfo.m_aAliases.clear();
for( ::std::list< int >::iterator it = pFont->m_aAliases.begin(); it != pFont->m_aAliases.end(); ++it )
rInfo.m_aAliases.push_back( m_pAtoms->getString( ATOM_FAMILYNAME, *it ) );
@@ -3054,7 +3065,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const
if( pFont && pFont->m_eType == fonttype::TrueType )
{
TrueTypeFontFile* pTTFontFile = static_cast<TrueTypeFontFile*>(pFont);
- if( pTTFontFile->m_nTypeFlags & 0x80000000 )
+ if( pTTFontFile->m_nTypeFlags & TYPEFLAG_INVALID )
{
TrueTypeFont* pTTFont = NULL;
ByteString aFile = getFontFile( pFont );
@@ -3068,7 +3079,7 @@ bool PrintFontManager::isFontDownloadingAllowed( fontID nFont ) const
}
}
- unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & 0x0e;
+ unsigned int nCopyrightFlags = pTTFontFile->m_nTypeFlags & TYPEFLAG_COPYRIGHT_MASK;
// font embedding is allowed if either
// no restriction at all (bit 1 clear)
@@ -3610,7 +3621,9 @@ bool PrintFontManager::getAlternativeFamilyNames( fontID nFont, ::std::list< OUS
// -------------------------------------------------------------------------
+// TODO: move most of this stuff into the central font-subsetting code
bool PrintFontManager::createFontSubset(
+ FontSubsetInfo& rInfo,
fontID nFont,
const OUString& rOutFile,
sal_Int32* pGlyphIDs,
@@ -3621,27 +3634,31 @@ bool PrintFontManager::createFontSubset(
)
{
PrintFont* pFont = getFont( nFont );
- if( !pFont || pFont->m_eType != fonttype::TrueType )
+ if( !pFont )
return false;
- OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) )
+ switch( pFont->m_eType )
+ {
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
+ default:
+ return false;
+ }
+ // TODO: remove when Type1 subsetting gets implemented
+ if( pFont->m_eType != fonttype::TrueType )
return false;
- rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
- ByteString aFromFile = getFontFile( pFont );
- ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) );
-
+ // reshuffle array of requested glyphs to make sure glyph0==notdef
sal_uInt8 pEnc[256];
sal_uInt16 pGID[256];
sal_uInt8 pOldIndex[256];
-
memset( pEnc, 0, sizeof( pEnc ) );
memset( pGID, 0, sizeof( pGID ) );
memset( pOldIndex, 0, sizeof( pOldIndex ) );
+ if( nGlyphs > 256 )
+ return false;
int nChar = 1;
- int i;
- for( i = 0; i < nGlyphs; i++ )
+ for( int i = 0; i < nGlyphs; i++ )
{
if( pNewEncoding[i] == 0 )
{
@@ -3660,21 +3677,70 @@ bool PrintFontManager::createFontSubset(
}
nGlyphs = nChar; // either input value or increased by one
- if( nGlyphs > 256 )
- return false;
+ // prepare system name for read access for subset source file
+ // TODO: since this file is usually already mmapped there is no need to open it again
+ const ByteString aFromFile = getFontFile( pFont );
- TrueTypeFont* pTTFont = NULL;
+ TrueTypeFont* pTTFont = NULL; // TODO: rename to SfntFont
TrueTypeFontFile* pTTFontFile = static_cast< TrueTypeFontFile* >(pFont);
if( OpenTTFontFile( aFromFile.GetBuffer(), pTTFontFile->m_nCollectionEntry < 0 ? 0 : pTTFontFile->m_nCollectionEntry, &pTTFont ) != SF_OK )
return false;
+ // prepare system name for write access for subset file target
+ OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rOutFile.pData, &aSysPath.pData ) )
+ return false;
+ const rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( OUStringToOString( aSysPath, aEncoding ) );
+
+ // do CFF subsetting if possible
+ int nCffLength = 0;
+ const sal_uInt8* pCffBytes = NULL;
+ if( GetSfntTable( pTTFont, O_CFF, &pCffBytes, &nCffLength ) )
+ {
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, pCffBytes, nCffLength );
+#if 1 // TODO: remove 16bit->long conversion when related methods handle non-16bit glyphids
+ long aRequestedGlyphs[256];
+ for( int i = 0; i < nGlyphs; ++i )
+ aRequestedGlyphs[i] = pGID[i];
+#endif
+ // create subset file at requested path
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ // create font subset
+ const char* pGlyphSetName = NULL; // TODO: better name?
+ const bool bOK = rInfo.CreateFontSubset(
+ FontSubsetInfo::TYPE1_PFB,
+ pOutFile, pGlyphSetName,
+ aRequestedGlyphs, pEnc, nGlyphs, pWidths );
+ fclose( pOutFile );
+ // cleanup before early return
+ CloseTTFont( pTTFont );
+ return bOK;
+ }
+
+ // do TTF->Type42 or Type3 subsetting
+ // fill in font info
+ psp::PrintFontInfo aFontInfo;
+ if( ! getFontInfo( nFont, aFontInfo ) )
+ return false;
+
+ rInfo.m_nAscent = aFontInfo.m_nAscend;
+ rInfo.m_nDescent = aFontInfo.m_nDescend;
+ rInfo.m_aPSName = getPSName( nFont );
+
+ int xMin, yMin, xMax, yMax;
+ getFontBoundingBox( nFont, xMin, yMin, xMax, yMax );
+ rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
+ rInfo.m_nCapHeight = yMax; // Well ...
+
+ // fill in glyph advance widths
TTSimpleGlyphMetrics* pMetrics = GetTTSimpleGlyphMetrics( pTTFont,
pGID,
nGlyphs,
bVertical ? 1 : 0 );
if( pMetrics )
{
- for( i = 0; i < nGlyphs; i++ )
+ for( int i = 0; i < nGlyphs; i++ )
pWidths[pOldIndex[i]] = pMetrics[i].adv;
free( pMetrics );
}
diff --git a/vcl/unx/source/gdi/makefile.mk b/vcl/unx/source/gdi/makefile.mk
index 8f0faf863af2..bdd400baa8ad 100644
--- a/vcl/unx/source/gdi/makefile.mk
+++ b/vcl/unx/source/gdi/makefile.mk
@@ -90,6 +90,10 @@ ENVCFLAGS+=-DUSE_CDE
CFLAGS+=-DXRENDER_LINK
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
.ENDIF # "$(GUIBASE)"!="unx"
# --- Targets ------------------------------------------------------
diff --git a/vcl/unx/source/gdi/pspgraphics.cxx b/vcl/unx/source/gdi/pspgraphics.cxx
index e8dfe391dc86..009b14c56062 100644
--- a/vcl/unx/source/gdi/pspgraphics.cxx
+++ b/vcl/unx/source/gdi/pspgraphics.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: pspgraphics.cxx,v $
- * $Revision: 1.33 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -40,6 +37,7 @@
#include "vcl/glyphcache.hxx"
#include "vcl/impfont.hxx"
#include "vcl/outfont.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/svapp.hxx"
#include "vcl/salprn.hxx"
#include "vcl/sysdata.hxx"
@@ -51,6 +49,11 @@
#include <sys/stat.h>
#include <sys/types.h>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_serverfont.hxx>
+#endif
+
using namespace psp;
using namespace rtl;
@@ -699,9 +702,30 @@ static void DrawPrinterLayout( const SalLayout& rLayout, ::psp::PrinterGfx& rGfx
Point aPos;
long nUnitsPerPixel = rLayout.GetUnitsPerPixel();
- const sal_Unicode* pText = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getTextPtr() : NULL;
- int nMinCharPos = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getMinCharPos() : 0;
- int nMaxCharPos = bIsPspServerFontLayout ? static_cast<const PspServerFontLayout&>(rLayout).getMaxCharPos() : 0;
+ const sal_Unicode* pText = NULL;
+ int nMinCharPos = 0;
+ int nMaxCharPos = 0;
+ if (bIsPspServerFontLayout)
+ {
+ const PspServerFontLayout * pPspLayout = dynamic_cast<const PspServerFontLayout*>(&rLayout);
+#ifdef ENABLE_GRAPHITE
+ const GraphiteServerFontLayout * pGrLayout = dynamic_cast<const GraphiteServerFontLayout*>(&rLayout);
+#endif
+ if (pPspLayout)
+ {
+ pText = pPspLayout->getTextPtr();
+ nMinCharPos = pPspLayout->getMinCharPos();
+ nMaxCharPos = pPspLayout->getMaxCharPos();
+ }
+#ifdef ENABLE_GRAPHITE
+ else if (pGrLayout)
+ {
+ pText = pGrLayout->getTextPtr();
+ nMinCharPos = pGrLayout->getMinCharPos();
+ nMaxCharPos = pGrLayout->getMaxCharPos();
+ }
+#endif
+ }
for( int nStart = 0;; )
{
int nGlyphCount = rLayout.GetNextGlyphs( nMaxGlyphs, aGlyphAry, aPos, nStart, aWidthAry, bIsPspServerFontLayout ? aCharPosAry : NULL );
@@ -749,16 +773,13 @@ void PspGraphics::DrawServerFontLayout( const ServerFontLayout& rLayout )
ImplFontCharMap* PspGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( m_pServerFont[0] )
- nPairCount = m_pServerFont[0]->GetFontCodeRanges( NULL );
- if( !nPairCount )
+ if( !m_pServerFont[0] )
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( m_pServerFont[0] )
- m_pServerFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !m_pServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
USHORT PspGraphics::SetFont( ImplFontSelectData *pEntry, int nFallbackLevel )
@@ -961,7 +982,21 @@ SalLayout* PspGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel
if( m_pServerFont[ nFallbackLevel ]
&& !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) )
- pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs );
+ {
+#ifdef ENABLE_GRAPHITE
+ // Is this a Graphite font?
+ if (GraphiteFontAdaptor::IsGraphiteEnabledFont(*m_pServerFont[nFallbackLevel]))
+ {
+ sal_Int32 xdpi, ydpi;
+ GetResolution(xdpi, ydpi);
+ GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *m_pServerFont[nFallbackLevel], xdpi, ydpi);
+ if (!pGrfont) return NULL;
+ pLayout = new GraphiteServerFontLayout(pGrfont);
+ }
+ else
+#endif
+ pLayout = new PspServerFontLayout( *m_pPrinterGfx, *m_pServerFont[nFallbackLevel], rArgs );
+ }
else
pLayout = new PspFontLayout( *m_pPrinterGfx );
@@ -976,7 +1011,7 @@ BOOL PspGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
@@ -986,7 +1021,16 @@ BOOL PspGraphics::CreateFontSubset(
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
@@ -1041,50 +1085,6 @@ void PspGraphics::GetGlyphWidths( const ImplFontData* pFont,
// static helpers of PspGraphics
-bool PspGraphics::DoCreateFontSubset( const rtl::OUString& rToFile,
- psp::fontID aFont,
- sal_Int32* pGlyphIDs,
- sal_uInt8* pEncoding,
- sal_Int32* pWidths,
- int nGlyphs,
- FontSubsetInfo& rInfo )
-{
- psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
- psp::PrintFontInfo aFontInfo;
-
- if( ! rMgr.getFontInfo( aFont, aFontInfo ) )
- return false;
-
- // fill in font info
- switch( aFontInfo.m_eType )
- {
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
- default:
- return false;
- }
- rInfo.m_nAscent = aFontInfo.m_nAscend;
- rInfo.m_nDescent = aFontInfo.m_nDescend;
- rInfo.m_aPSName = rMgr.getPSName( aFont );
-
- int xMin, yMin, xMax, yMax;
- rMgr.getFontBoundingBox( aFont, xMin, yMin, xMax, yMax );
-
- if( ! rMgr.createFontSubset( aFont,
- rToFile,
- pGlyphIDs,
- pEncoding,
- pWidths,
- nGlyphs
- ) )
- return false;
-
- rInfo.m_aFontBBox = Rectangle( Point( xMin, yMin ), Size( xMax-xMin, yMax-yMin ) );
- rInfo.m_nCapHeight = yMax; // Well ...
-
- return true;
-}
-
const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnicodes, sal_Int32* pWidths, FontSubsetInfo& rInfo, long* pDataLen )
{
psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -1096,8 +1096,8 @@ const void* PspGraphics::DoGetEmbedFontData( fontID aFont, const sal_Ucs* pUnico
// fill in font info
switch( aFontInfo.m_eType )
{
- case psp::fonttype::TrueType: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;break;
- case psp::fonttype::Type1: rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;break;
+ case psp::fonttype::TrueType: rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF; break;
+ case psp::fonttype::Type1: rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1; break;
default:
return NULL;
}
@@ -1275,6 +1275,8 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF
aDFA.meWidthType = ToFontWidth (rInfo.m_eWidth);
aDFA.mePitch = ToFontPitch (rInfo.m_ePitch);
aDFA.mbSymbolFlag = (rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL);
+ aDFA.mbSubsettable = rInfo.m_bSubsettable;
+ aDFA.mbEmbeddable = rInfo.m_bEmbeddable;
switch (rInfo.m_eEmbeddedbitmap)
{
@@ -1307,26 +1309,18 @@ ImplDevFontAttributes PspGraphics::Info2DevFontAttributes( const psp::FastPrintF
case psp::fonttype::Builtin:
aDFA.mnQuality = 1024;
aDFA.mbDevice = true;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = false;
break;
case psp::fonttype::TrueType:
aDFA.mnQuality = 512;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = true;
- aDFA.mbEmbeddable = false;
break;
case psp::fonttype::Type1:
aDFA.mnQuality = 0;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = true;
break;
default:
aDFA.mnQuality = 0;
aDFA.mbDevice = false;
- aDFA.mbSubsettable = false;
- aDFA.mbEmbeddable = false;
break;
}
diff --git a/vcl/unx/source/gdi/salgdi.cxx b/vcl/unx/source/gdi/salgdi.cxx
index db49c97de00c..4d3e40840a7b 100644
--- a/vcl/unx/source/gdi/salgdi.cxx
+++ b/vcl/unx/source/gdi/salgdi.cxx
@@ -1,1539 +1,1553 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_vcl.hxx"
-
-#include "Xproto.h"
-
-#include "salunx.h"
-#include "saldata.hxx"
-#include "saldisp.hxx"
-#include "salgdi.h"
-#include "salframe.h"
-#include "salvd.h"
-#include "xrender_peer.hxx"
-
-#include "vcl/printergfx.hxx"
-#include "vcl/jobdata.hxx"
-
-#include "tools/debug.hxx"
-
-#include "basegfx/polygon/b2dpolygon.hxx"
-#include "basegfx/polygon/b2dpolypolygon.hxx"
-#include "basegfx/polygon/b2dpolypolygontools.hxx"
-#include "basegfx/polygon/b2dpolygontools.hxx"
-#include "basegfx/polygon/b2dpolygonclipper.hxx"
-#include "basegfx/polygon/b2dlinegeometry.hxx"
-#include "basegfx/matrix/b2dhommatrix.hxx"
-#include "basegfx/polygon/b2dpolypolygoncutter.hxx"
-
-#include <vector>
-#include <queue>
-#include <set>
-
-// -=-= SalPolyLine =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-#define STATIC_POINTS 64
-
-class SalPolyLine
-{
- XPoint Points_[STATIC_POINTS];
- XPoint *pFirst_;
-public:
- inline SalPolyLine( ULONG nPoints );
- inline SalPolyLine( ULONG nPoints, const SalPoint *p );
- inline ~SalPolyLine();
- inline XPoint &operator [] ( ULONG n ) const
- { return pFirst_[n]; }
-};
-
-inline SalPolyLine::SalPolyLine( ULONG nPoints )
- : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ )
-{}
-
-inline SalPolyLine::SalPolyLine( ULONG nPoints, const SalPoint *p )
- : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ )
-{
- for( ULONG i = 0; i < nPoints; i++ )
- {
- pFirst_[i].x = (short)p[i].mnX;
- pFirst_[i].y = (short)p[i].mnY;
- }
- pFirst_[nPoints] = pFirst_[0]; // close polyline
-}
-
-inline SalPolyLine::~SalPolyLine()
-{ if( pFirst_ != Points_ ) delete [] pFirst_; }
-
-#undef STATIC_POINTS
-// -=-= X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-X11SalGraphics::X11SalGraphics()
-{
- m_pFrame = NULL;
- m_pVDev = NULL;
- m_pDeleteColormap = NULL;
- hDrawable_ = None;
- m_aRenderPicture = 0;
- m_pRenderFormat = NULL;
-
- pClipRegion_ = NULL;
- pPaintRegion_ = NULL;
-
- pPenGC_ = NULL;
- nPenPixel_ = 0;
- nPenColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black
-
- pFontGC_ = NULL;
- for( int i = 0; i < MAX_FALLBACK; ++i )
- {
- mXFont[i] = NULL;
- mpServerFont[i] = NULL;
- }
-
- nTextPixel_ = 0;
- nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black
-
- pBrushGC_ = NULL;
- nBrushPixel_ = 0;
- nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White
- hBrush_ = None;
-
- pMonoGC_ = NULL;
- pCopyGC_ = NULL;
- pMaskGC_ = NULL;
- pInvertGC_ = NULL;
- pInvert50GC_ = NULL;
- pStippleGC_ = NULL;
- pTrackingGC_ = NULL;
-
- bWindow_ = FALSE;
- bPrinter_ = FALSE;
- bVirDev_ = FALSE;
- bPenGC_ = FALSE;
- bFontGC_ = FALSE;
- bBrushGC_ = FALSE;
- bMonoGC_ = FALSE;
- bCopyGC_ = FALSE;
- bInvertGC_ = FALSE;
- bInvert50GC_ = FALSE;
- bStippleGC_ = FALSE;
- bTrackingGC_ = FALSE;
- bXORMode_ = FALSE;
- bDitherBrush_ = FALSE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-X11SalGraphics::~X11SalGraphics()
-{
- ReleaseFonts();
- freeResources();
-}
-
-// -=-= SalGraphics / X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-void X11SalGraphics::freeResources()
-{
- Display *pDisplay = GetXDisplay();
-
- DBG_ASSERT( !pPaintRegion_, "pPaintRegion_" );
- if( pClipRegion_ ) XDestroyRegion( pClipRegion_ ), pClipRegion_ = None;
-
- if( hBrush_ ) XFreePixmap( pDisplay, hBrush_ ), hBrush_ = None;
- if( pPenGC_ ) XFreeGC( pDisplay, pPenGC_ ), pPenGC_ = None;
- if( pFontGC_ ) XFreeGC( pDisplay, pFontGC_ ), pFontGC_ = None;
- if( pBrushGC_ ) XFreeGC( pDisplay, pBrushGC_ ), pBrushGC_ = None;
- if( pMonoGC_ ) XFreeGC( pDisplay, pMonoGC_ ), pMonoGC_ = None;
- if( pCopyGC_ ) XFreeGC( pDisplay, pCopyGC_ ), pCopyGC_ = None;
- if( pMaskGC_ ) XFreeGC( pDisplay, pMaskGC_ ), pMaskGC_ = None;
- if( pInvertGC_ ) XFreeGC( pDisplay, pInvertGC_ ), pInvertGC_ = None;
- if( pInvert50GC_ ) XFreeGC( pDisplay, pInvert50GC_ ), pInvert50GC_ = None;
- if( pStippleGC_ ) XFreeGC( pDisplay, pStippleGC_ ), pStippleGC_ = None;
- if( pTrackingGC_ ) XFreeGC( pDisplay, pTrackingGC_ ), pTrackingGC_ = None;
- if( m_pDeleteColormap )
- delete m_pDeleteColormap, m_pColormap = m_pDeleteColormap = NULL;
-
- if( m_aRenderPicture )
- XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0;
-
- bPenGC_ = bFontGC_ = bBrushGC_ = bMonoGC_ = bCopyGC_ = bInvertGC_ = bInvert50GC_ = bStippleGC_ = bTrackingGC_ = false;
-}
-
-void X11SalGraphics::SetDrawable( Drawable aDrawable, int nScreen )
-{
- // shortcut if nothing changed
- if( hDrawable_ == aDrawable )
- return;
-
- // free screen specific resources if needed
- if( nScreen != m_nScreen )
- {
- freeResources();
- m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap( nScreen );
- m_nScreen = nScreen;
- }
-
- hDrawable_ = aDrawable;
- SetXRenderFormat( NULL );
- if( m_aRenderPicture )
- {
- XRenderPeer::GetInstance().FreePicture( m_aRenderPicture );
- m_aRenderPicture = 0;
- }
-
- if( hDrawable_ )
- {
- nPenPixel_ = GetPixel( nPenColor_ );
- nTextPixel_ = GetPixel( nTextColor_ );
- nBrushPixel_ = GetPixel( nBrushColor_ );
- }
-}
-
-void X11SalGraphics::Init( SalFrame *pFrame, Drawable aTarget, int nScreen )
-{
-#if 0 // TODO: use SetDrawable() instead
- m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen);
- hDrawable_ = aTarget;
- m_nScreen = nScreen;
- SetXRenderFormat( NULL );
- if( m_aRenderPicture )
- XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0;
-
- nPenPixel_ = GetPixel( nPenColor_ );
- nTextPixel_ = GetPixel( nTextColor_ );
- nBrushPixel_ = GetPixel( nBrushColor_ );
-#else
- m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen);
- m_nScreen = nScreen;
- SetDrawable( aTarget, nScreen );
-#endif
-
- bWindow_ = TRUE;
- m_pFrame = pFrame;
- m_pVDev = NULL;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::DeInit()
-{
- SetDrawable( None, m_nScreen );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetClipRegion( GC pGC, XLIB_Region pXReg ) const
-{
- Display *pDisplay = GetXDisplay();
-
- int n = 0;
- XLIB_Region Regions[3];
-
- if( pClipRegion_ /* && !XEmptyRegion( pClipRegion_ ) */ )
- Regions[n++] = pClipRegion_;
-// if( pPaintRegion_ /* && !XEmptyRegion( pPaintRegion_ ) */ )
-// Regions[n++] = pPaintRegion_;
-
- if( pXReg && !XEmptyRegion( pXReg ) )
- Regions[n++] = pXReg;
-
- if( 0 == n )
- XSetClipMask( pDisplay, pGC, None );
- else if( 1 == n )
- XSetRegion( pDisplay, pGC, Regions[0] );
- else
- {
- XLIB_Region pTmpRegion = XCreateRegion();
- XIntersectRegion( Regions[0], Regions[1], pTmpRegion );
-// if( 3 == n )
-// XIntersectRegion( Regions[2], pTmpRegion, pTmpRegion );
- XSetRegion( pDisplay, pGC, pTmpRegion );
- XDestroyRegion( pTmpRegion );
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-GC X11SalGraphics::SelectPen()
-{
- Display *pDisplay = GetXDisplay();
-
- if( !pPenGC_ )
- {
- XGCValues values;
- values.subwindow_mode = ClipByChildren;
- values.fill_rule = EvenOddRule; // Pict import/ Gradient
- values.graphics_exposures = False;
-
- pPenGC_ = XCreateGC( pDisplay, hDrawable_,
- GCSubwindowMode | GCFillRule | GCGraphicsExposures,
- &values );
- }
-
- if( !bPenGC_ )
- {
- if( nPenColor_ != SALCOLOR_NONE )
- XSetForeground( pDisplay, pPenGC_, nPenPixel_ );
- XSetFunction ( pDisplay, pPenGC_, bXORMode_ ? GXxor : GXcopy );
- SetClipRegion( pPenGC_ );
- bPenGC_ = TRUE;
- }
-
- return pPenGC_;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-GC X11SalGraphics::SelectBrush()
-{
- Display *pDisplay = GetXDisplay();
-
- DBG_ASSERT( nBrushColor_ != SALCOLOR_NONE, "Brush Transparent" );
-
- if( !pBrushGC_ )
- {
- XGCValues values;
- // values.subwindow_mode = IncludeInferiors;
- values.subwindow_mode = ClipByChildren;
- values.fill_rule = EvenOddRule; // Pict import/ Gradient
- values.graphics_exposures = False;
-
- pBrushGC_ = XCreateGC( pDisplay, hDrawable_,
- GCSubwindowMode | GCFillRule | GCGraphicsExposures,
- &values );
- }
-
- if( !bBrushGC_ )
- {
- if( !bDitherBrush_ )
- {
- XSetFillStyle ( pDisplay, pBrushGC_, FillSolid );
- XSetForeground( pDisplay, pBrushGC_, nBrushPixel_ );
- #if defined(_USE_PRINT_EXTENSION_)
- XSetBackground( pDisplay, pBrushGC_,
- WhitePixel(pDisplay, DefaultScreen(pDisplay)) );
- #else
- if( bPrinter_ )
- XSetTile( pDisplay, pBrushGC_, None );
- #endif
- }
- else
- {
- // Bug in Sun Solaris 2.5.1, XFillPolygon doesn't allways reflect
- // changes of the tile. PROPERTY_BUG_Tile doesn't fix this !
- if (GetDisplay()->GetProperties() & PROPERTY_BUG_FillPolygon_Tile)
- XSetFillStyle ( pDisplay, pBrushGC_, FillSolid );
-
- XSetFillStyle ( pDisplay, pBrushGC_, FillTiled );
- XSetTile ( pDisplay, pBrushGC_, hBrush_ );
- }
- XSetFunction ( pDisplay, pBrushGC_, bXORMode_ ? GXxor : GXcopy );
- SetClipRegion( pBrushGC_ );
-
- bBrushGC_ = TRUE;
- }
-
- return pBrushGC_;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-GC X11SalGraphics::GetTrackingGC()
-{
- const char dash_list[2] = {2, 2};
-
- if( !pTrackingGC_ )
- {
- XGCValues values;
-
- values.graphics_exposures = False;
- values.foreground = m_pColormap->GetBlackPixel()
- ^ m_pColormap->GetWhitePixel();
- values.function = GXxor;
- values.line_width = 1;
- values.line_style = LineOnOffDash;
-
- pTrackingGC_ = XCreateGC( GetXDisplay(), GetDrawable(),
- GCGraphicsExposures | GCForeground | GCFunction
- | GCLineWidth | GCLineStyle,
- &values );
- XSetDashes( GetXDisplay(), pTrackingGC_, 0, dash_list, 2 );
- }
-
- if( !bTrackingGC_ )
- {
- SetClipRegion( pTrackingGC_ );
- bTrackingGC_ = TRUE;
- }
-
- return pTrackingGC_;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::DrawLines( ULONG nPoints,
- const SalPolyLine &rPoints,
- GC pGC,
- bool bClose
- )
-{
- // errechne wie viele Linien XWindow auf einmal zeichnen kann
- ULONG nMaxLines = (GetDisplay()->GetMaxRequestSize() - sizeof(xPolyPointReq))
- / sizeof(xPoint);
- if( nMaxLines > nPoints ) nMaxLines = nPoints;
-
- // gebe alle Linien aus, die XWindows zeichnen kann.
- ULONG n;
- for( n = 0; nPoints - n > nMaxLines; n += nMaxLines - 1 )
- XDrawLines( GetXDisplay(),
- GetDrawable(),
- pGC,
- &rPoints[n],
- nMaxLines,
- CoordModeOrigin );
-
- if( n < nPoints )
- XDrawLines( GetXDisplay(),
- GetDrawable(),
- pGC,
- &rPoints[n],
- nPoints - n,
- CoordModeOrigin );
- if( bClose )
- {
- if( rPoints[nPoints-1].x != rPoints[0].x || rPoints[nPoints-1].y != rPoints[0].y )
- drawLine( rPoints[nPoints-1].x, rPoints[nPoints-1].y, rPoints[0].x, rPoints[0].y );
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-// Dithern: Calculate a dither-pixmap and make a brush of it
-#define P_DELTA 51
-#define DMAP( v, m ) ((v % P_DELTA) > m ? (v / P_DELTA) + 1 : (v / P_DELTA))
-
-BOOL X11SalGraphics::GetDitherPixmap( SalColor nSalColor )
-{
- static const short nOrdDither8Bit[ 8 ][ 8 ] =
- {
- { 0, 38, 9, 48, 2, 40, 12, 50},
- {25, 12, 35, 22, 28, 15, 37, 24},
- { 6, 44, 3, 41, 8, 47, 5, 44},
- {32, 19, 28, 16, 34, 21, 31, 18},
- { 1, 40, 11, 49, 0, 39, 10, 48},
- {27, 14, 36, 24, 26, 13, 36, 23},
- { 8, 46, 4, 43, 7, 45, 4, 42},
- {33, 20, 30, 17, 32, 20, 29, 16}
- };
-
- // test for correct depth (8bit)
- if( GetColormap().GetVisual().GetDepth() != 8 )
- return FALSE;
-
- char pBits[64];
- char *pBitsPtr = pBits;
-
- // Set the pallette-entries for the dithering tile
- UINT8 nSalColorRed = SALCOLOR_RED ( nSalColor );
- UINT8 nSalColorGreen = SALCOLOR_GREEN ( nSalColor );
- UINT8 nSalColorBlue = SALCOLOR_BLUE ( nSalColor );
-
- for( int nY = 0; nY < 8; nY++ )
- {
- for( int nX = 0; nX < 8; nX++ )
- {
- short nMagic = nOrdDither8Bit[nY][nX];
- UINT8 nR = P_DELTA * DMAP( nSalColorRed, nMagic );
- UINT8 nG = P_DELTA * DMAP( nSalColorGreen, nMagic );
- UINT8 nB = P_DELTA * DMAP( nSalColorBlue, nMagic );
-
- *pBitsPtr++ = GetColormap().GetPixel( MAKE_SALCOLOR( nR, nG, nB ) );
- }
- }
-
- // create the tile as ximage and an according pixmap -> caching
- XImage *pImage = XCreateImage( GetXDisplay(),
- GetColormap().GetXVisual(),
- 8,
- ZPixmap,
- 0, // offset
- pBits, // data
- 8, 8, // width & height
- 8, // bitmap_pad
- 0 ); // (default) bytes_per_line
-
- if ( GetDisplay()->GetProperties() & PROPERTY_BUG_Tile )
- {
- if (hBrush_)
- XFreePixmap (GetXDisplay(), hBrush_);
- hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 );
- }
- else
- if( !hBrush_ )
- hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 );
-
- // put the ximage to the pixmap
- XPutImage( GetXDisplay(),
- hBrush_,
- GetDisplay()->GetCopyGC( m_nScreen ),
- pImage,
- 0, 0, // Source
- 0, 0, // Destination
- 8, 8 ); // width & height
-
- // destroy image-frame but not palette-data
- pImage->data = NULL;
- XDestroyImage( pImage );
-
- return TRUE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY ) // const
-{
- const SalDisplay *pDisplay = GetDisplay();
-
- rDPIX = pDisplay->GetResolution().A();
- rDPIY = pDisplay->GetResolution().B();
- if( !pDisplay->GetExactResolution() && rDPIY < 96 )
- {
- rDPIX = Divide( rDPIX * 96, rDPIY );
- rDPIY = 96;
- }
- else if ( rDPIY > 200 )
- {
- rDPIX = Divide( rDPIX * 200, rDPIY );
- rDPIY = 200;
- }
-
- // #i12705# equalize x- and y-resolution if they are close enough
- if( rDPIX != rDPIY )
- {
- // different x- and y- resolutions are usually artifacts of
- // a wrongly calculated screen size.
- //if( (13*rDPIX >= 10*rDPIY) && (13*rDPIY >= 10*rDPIX) ) //+-30%
- {
-#ifdef DEBUG
- printf("Forcing Resolution from %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 " to %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 "\n",
- rDPIX,rDPIY,rDPIY,rDPIY);
-#endif
- rDPIX = rDPIY; // y-resolution is more trustworthy
- }
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-USHORT X11SalGraphics::GetBitCount() // const
-{
- return GetVisual().GetDepth();
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-long X11SalGraphics::GetGraphicsWidth() const
-{
- if( m_pFrame )
- return m_pFrame->maGeometry.nWidth;
- else if( m_pVDev )
- return m_pVDev->GetWidth();
- else
- return 0;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-long X11SalGraphics::GetGraphicsHeight() const
-{
- if( m_pFrame )
- return m_pFrame->maGeometry.nHeight;
- else if( m_pVDev )
- return m_pVDev->GetHeight();
- else
- return 0;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::ResetClipRegion()
-{
- if( pClipRegion_ )
- {
- bPenGC_ = FALSE;
- bFontGC_ = FALSE;
- bBrushGC_ = FALSE;
- bMonoGC_ = FALSE;
- bCopyGC_ = FALSE;
- bInvertGC_ = FALSE;
- bInvert50GC_ = FALSE;
- bStippleGC_ = FALSE;
- bTrackingGC_ = FALSE;
-
- XDestroyRegion( pClipRegion_ );
- pClipRegion_ = NULL;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::BeginSetClipRegion( ULONG )
-{
- if( pClipRegion_ )
- XDestroyRegion( pClipRegion_ );
- pClipRegion_ = XCreateRegion();
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-BOOL X11SalGraphics::unionClipRegion( long nX, long nY, long nDX, long nDY )
-{
- if (!nDX || !nDY)
- return TRUE;
-
- XRectangle aRect;
- aRect.x = (short)nX;
- aRect.y = (short)nY;
- aRect.width = (unsigned short)nDX;
- aRect.height = (unsigned short)nDY;
-
- XUnionRectWithRegion( &aRect, pClipRegion_, pClipRegion_ );
-
- return TRUE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-bool X11SalGraphics::unionClipRegion( const ::basegfx::B2DPolyPolygon& )
-{
- // TODO: implement and advertise OutDevSupport_B2DClip support
- return false;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::EndSetClipRegion()
-{
- bPenGC_ = FALSE;
- bFontGC_ = FALSE;
- bBrushGC_ = FALSE;
- bMonoGC_ = FALSE;
- bCopyGC_ = FALSE;
- bInvertGC_ = FALSE;
- bInvert50GC_ = FALSE;
- bStippleGC_ = FALSE;
- bTrackingGC_ = FALSE;
-
- if( XEmptyRegion( pClipRegion_ ) )
- {
- XDestroyRegion( pClipRegion_ );
- pClipRegion_= NULL;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetLineColor()
-{
- if( nPenColor_ != SALCOLOR_NONE )
- {
- nPenColor_ = SALCOLOR_NONE;
- bPenGC_ = FALSE;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetLineColor( SalColor nSalColor )
-{
- if( nPenColor_ != nSalColor )
- {
- nPenColor_ = nSalColor;
- nPenPixel_ = GetPixel( nSalColor );
- bPenGC_ = FALSE;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetFillColor()
-{
- if( nBrushColor_ != SALCOLOR_NONE )
- {
- bDitherBrush_ = FALSE;
- nBrushColor_ = SALCOLOR_NONE;
- bBrushGC_ = FALSE;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetFillColor( SalColor nSalColor )
-{
- if( nBrushColor_ != nSalColor )
- {
- bDitherBrush_ = FALSE;
- nBrushColor_ = nSalColor;
- nBrushPixel_ = GetPixel( nSalColor );
- if( TrueColor != GetColormap().GetVisual().GetClass()
- && GetColormap().GetColor( nBrushPixel_ ) != nBrushColor_
- && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x00 ) // black
- && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x80 ) // blue
- && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x00 ) // green
- && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x80 ) // cyan
- && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x00 ) // red
- && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x80 ) // magenta
- && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x00 ) // brown
- && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x80 ) // gray
- && nSalColor != MAKE_SALCOLOR( 0xC0, 0xC0, 0xC0 ) // light gray
- && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0xFF ) // light blue
- && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0x00 ) // light green
- && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0xFF ) // light cyan
- && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0x00 ) // light red
- && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0xFF ) // light magenta
- && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0x00 ) // light brown
- && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ) )
- bDitherBrush_ = GetDitherPixmap(nSalColor);
- bBrushGC_ = FALSE;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetROPLineColor( SalROPColor nROPColor )
-{
- switch( nROPColor )
- {
- case SAL_ROP_0 : // 0
- nPenPixel_ = (Pixel)0;
- break;
- case SAL_ROP_1 : // 1
- nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
- break;
- case SAL_ROP_INVERT : // 2
- nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
- break;
- }
- nPenColor_ = GetColormap().GetColor( nPenPixel_ );
- bPenGC_ = FALSE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetROPFillColor( SalROPColor nROPColor )
-{
- switch( nROPColor )
- {
- case SAL_ROP_0 : // 0
- nBrushPixel_ = (Pixel)0;
- break;
- case SAL_ROP_1 : // 1
- nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
- break;
- case SAL_ROP_INVERT : // 2
- nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
- break;
- }
- bDitherBrush_ = FALSE;
- nBrushColor_ = GetColormap().GetColor( nBrushPixel_ );
- bBrushGC_ = FALSE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::SetXORMode( bool bSet, bool )
-{
- if( !bXORMode_ == bSet )
- {
- bXORMode_ = bSet;
- bPenGC_ = FALSE;
- bBrushGC_ = FALSE;
- bMonoGC_ = FALSE;
- bCopyGC_ = FALSE;
- bInvertGC_ = FALSE;
- bInvert50GC_ = FALSE;
- bStippleGC_ = FALSE;
- bTrackingGC_ = FALSE;
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawPixel( long nX, long nY )
-{
- if( nPenColor_ != SALCOLOR_NONE )
- XDrawPoint( GetXDisplay(), GetDrawable(), SelectPen(), nX, nY );
-}
-
-void X11SalGraphics::drawPixel( long nX, long nY, SalColor nSalColor )
-{
- if( nSalColor != SALCOLOR_NONE )
- {
- Display *pDisplay = GetXDisplay();
-
- if( (nPenColor_ == SALCOLOR_NONE) && !bPenGC_ )
- {
- SetLineColor( nSalColor );
- XDrawPoint( pDisplay, GetDrawable(), SelectPen(), nX, nY );
- nPenColor_ = SALCOLOR_NONE;
- bPenGC_ = False;
- }
- else
- {
- GC pGC = SelectPen();
-
- if( nSalColor != nPenColor_ )
- XSetForeground( pDisplay, pGC, GetPixel( nSalColor ) );
-
- XDrawPoint( pDisplay, GetDrawable(), pGC, nX, nY );
-
- if( nSalColor != nPenColor_ )
- XSetForeground( pDisplay, pGC, nPenPixel_ );
- }
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 )
-{
- if( nPenColor_ != SALCOLOR_NONE )
- {
- if ( GetDisplay()->GetProperties() & PROPERTY_BUG_DrawLine )
- {
- GC aGC = SelectPen();
- XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX1, (int)nY1);
- XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX2, (int)nY2);
- XDrawLine (GetXDisplay(), GetDrawable(), aGC, nX1, nY1, nX2, nY2 );
- }
- else
- XDrawLine( GetXDisplay(), GetDrawable(),SelectPen(),
- nX1, nY1, nX2, nY2 );
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawRect( long nX, long nY, long nDX, long nDY )
-{
- if( nBrushColor_ != SALCOLOR_NONE )
- {
- XFillRectangle( GetXDisplay(),
- GetDrawable(),
- SelectBrush(),
- nX, nY, nDX, nDY );
- }
- // Beschreibung DrawRect verkehrt, deshalb -1
- if( nPenColor_ != SALCOLOR_NONE )
- XDrawRectangle( GetXDisplay(),
- GetDrawable(),
- SelectPen(),
- nX, nY, nDX-1, nDY-1 );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry )
-{
- drawPolyLine( nPoints, pPtAry, false );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry, bool bClose )
-{
- if( nPenColor_ != 0xFFFFFFFF )
- {
- SalPolyLine Points( nPoints, pPtAry );
-
- DrawLines( nPoints, Points, SelectPen(), bClose );
- }
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawPolygon( ULONG nPoints, const SalPoint* pPtAry )
-{
- if( nPoints == 0 )
- return;
-
- if( nPoints < 3 )
- {
- if( !bXORMode_ )
- {
- if( 1 == nPoints )
- drawPixel( pPtAry[0].mnX, pPtAry[0].mnY );
- else
- drawLine( pPtAry[0].mnX, pPtAry[0].mnY,
- pPtAry[1].mnX, pPtAry[1].mnY );
- }
- return;
- }
-
- SalPolyLine Points( nPoints, pPtAry );
-
- nPoints++;
-
- /* WORKAROUND: some Xservers (Xorg, VIA chipset in this case)
- * do not draw the visible part of a polygon
- * if it overlaps to the left of screen 0,y.
- * This happens to be the case in the gradient drawn in the
- * menubar background. workaround for the special case of
- * of a rectangle overlapping to the left.
- */
- if( nPoints == 5 &&
- Points[ 0 ].x == Points[ 1 ].x &&
- Points[ 1 ].y == Points[ 2 ].y &&
- Points[ 2 ].x == Points[ 3 ].x &&
- Points[ 0 ].x == Points[ 4 ].x && Points[ 0 ].y == Points[ 4 ].y
- )
- {
- bool bLeft = false;
- bool bRight = false;
- for(unsigned int i = 0; i < nPoints; i++ )
- {
- if( Points[i].x < 0 )
- bLeft = true;
- else
- bRight= true;
- }
- if( bLeft && ! bRight )
- return;
- if( bLeft && bRight )
- {
- for( unsigned int i = 0; i < nPoints; i++ )
- if( Points[i].x < 0 )
- Points[i].x = 0;
- }
- }
-
- if( nBrushColor_ != SALCOLOR_NONE )
- XFillPolygon( GetXDisplay(),
- GetDrawable(),
- SelectBrush(),
- &Points[0], nPoints,
- Complex, CoordModeOrigin );
-
- if( nPenColor_ != 0xFFFFFFFF )
- DrawLines( nPoints, Points, SelectPen(), true );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-void X11SalGraphics::drawPolyPolygon( sal_uInt32 nPoly,
- const sal_uInt32 *pPoints,
- PCONSTSALPOINT *pPtAry )
-{
- if( nBrushColor_ != SALCOLOR_NONE )
- {
- ULONG i, n;
- XLIB_Region pXRegA = NULL;
-
- for( i = 0; i < nPoly; i++ ) {
- n = pPoints[i];
- SalPolyLine Points( n, pPtAry[i] );
- if( n > 2 )
- {
- XLIB_Region pXRegB = XPolygonRegion( &Points[0], n+1, WindingRule );
- if( !pXRegA )
- pXRegA = pXRegB;
- else
- {
- XXorRegion( pXRegA, pXRegB, pXRegA );
- XDestroyRegion( pXRegB );
- }
- }
- }
-
- if( pXRegA )
- {
- XRectangle aXRect;
- XClipBox( pXRegA, &aXRect );
-
- GC pGC = SelectBrush();
- SetClipRegion( pGC, pXRegA ); // ??? doppelt
- XDestroyRegion( pXRegA );
- bBrushGC_ = FALSE;
-
- XFillRectangle( GetXDisplay(),
- GetDrawable(),
- pGC,
- aXRect.x, aXRect.y, aXRect.width, aXRect.height );
- }
- }
-
- if( nPenColor_ != SALCOLOR_NONE )
- for( ULONG i = 0; i < nPoly; i++ )
- drawPolyLine( pPoints[i], pPtAry[i], true );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-sal_Bool X11SalGraphics::drawPolyLineBezier( ULONG, const SalPoint*, const BYTE* )
-{
- return sal_False;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-sal_Bool X11SalGraphics::drawPolygonBezier( ULONG, const SalPoint*, const BYTE* )
-{
- return sal_False;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-sal_Bool X11SalGraphics::drawPolyPolygonBezier( sal_uInt32, const sal_uInt32*,
- const SalPoint* const*, const BYTE* const* )
-{
- return sal_False;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-void X11SalGraphics::invert( ULONG nPoints,
- const SalPoint* pPtAry,
- SalInvert nFlags )
-{
- SalPolyLine Points ( nPoints, pPtAry );
-
- GC pGC;
- if( SAL_INVERT_50 & nFlags )
- pGC = GetInvert50GC();
- else
- if ( SAL_INVERT_TRACKFRAME & nFlags )
- pGC = GetTrackingGC();
- else
- pGC = GetInvertGC();
-
- if( SAL_INVERT_TRACKFRAME & nFlags )
- DrawLines ( nPoints, Points, pGC, true );
- else
- XFillPolygon( GetXDisplay(),
- GetDrawable(),
- pGC,
- &Points[0], nPoints,
- Complex, CoordModeOrigin );
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-BOOL X11SalGraphics::drawEPS( long,long,long,long,void*,ULONG )
-{
- return FALSE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-XID X11SalGraphics::GetXRenderPicture()
-{
- if( !m_aRenderPicture )
- {
- // check xrender support for matching visual
- // find a XRenderPictFormat compatible with the Drawable
- XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
- XRenderPictFormat* pVisualFormat = static_cast<XRenderPictFormat*>(GetXRenderFormat());
- if( !pVisualFormat )
- {
- Visual* pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual();
- pVisualFormat = rRenderPeer.FindVisualFormat( pVisual );
- if( !pVisualFormat )
- return 0;
- // cache the XRenderPictFormat
- SetXRenderFormat( static_cast<void*>(pVisualFormat) );
- }
-
- // get the matching xrender target for drawable
- m_aRenderPicture = rRenderPeer.CreatePicture( hDrawable_, pVisualFormat, 0, NULL );
- }
-
-#if 0
- // setup clipping so the callers don't have to do it themselves
- // TODO: avoid clipping if already set correctly
- if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) )
- rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ );
-#endif
-
- return m_aRenderPicture;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-SystemGraphicsData X11SalGraphics::GetGraphicsData() const
-{
- SystemGraphicsData aRes;
-
- aRes.nSize = sizeof(aRes);
- aRes.pDisplay = GetXDisplay();
- aRes.hDrawable = hDrawable_;
- aRes.pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual();
- aRes.nScreen = m_nScreen;
- aRes.nDepth = GetDisplay()->GetVisual( m_nScreen ).GetDepth();
- aRes.aColormap = GetDisplay()->GetColormap( m_nScreen ).GetXColormap();
- aRes.pRenderFormat = m_pRenderFormat;
- return aRes;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-// B2DPolygon support methods
-
-namespace { // anonymous namespace to prevent export
-// the methods and structures here are used by the
-// B2DPolyPolygon->RenderTrapezoid conversion algorithm
-
-// compare two line segments
-// assumption: both segments point downward
-// assumption: they must have at least some y-overlap
-// assumption: rA.p1.y <= rB.p1.y
-bool IsLeftOf( const XLineFixed& rA, const XLineFixed& rB )
-{
- bool bAbove = (rA.p1.y <= rB.p1.y);
- const XLineFixed& rU = bAbove ? rA : rB;
- const XLineFixed& rL = bAbove ? rB : rA;
-
- const XFixed aXDiff = rU.p2.x - rU.p1.x;
- const XFixed aYDiff = rU.p2.y - rU.p1.y;
-
- if( (rU.p1.y != rL.p1.y) || (rU.p1.x != rL.p1.x) )
- {
- const sal_Int64 n1 = (sal_Int64)aXDiff * (rL.p1.y - rU.p1.y);
- const sal_Int64 n2 = (sal_Int64)aYDiff * (rL.p1.x - rU.p1.x);
- if( n1 != n2 )
- return ((n1 < n2) == bAbove);
- }
-
- if( (rU.p2.y != rL.p2.y) || (rU.p2.x != rL.p2.x) )
- {
- const sal_Int64 n3 = (sal_Int64)aXDiff * (rL.p2.y - rU.p1.y);
- const sal_Int64 n4 = (sal_Int64)aYDiff * (rL.p2.x - rU.p1.x);
- if( n3 != n4 )
- return ((n3 < n4) == bAbove);
- }
-
- // both segments overlap
- return false;
-}
-
-struct HalfTrapezoid
-{
- // assumptions:
- // maLine.p1.y <= mnY < maLine.p2.y
- XLineFixed maLine;
- XFixed mnY;
-};
-
-struct HalfTrapCompare
-{
- bool operator()( const HalfTrapezoid& rA, const HalfTrapezoid& rB ) const
- {
- bool bIsTopLeft = false;
- if( rA.mnY != rB.mnY ) // sort top-first if possible
- bIsTopLeft = (rA.mnY < rB.mnY);
- else // else sort left-first
- bIsTopLeft = IsLeftOf( rA.maLine, rB.maLine );
- // adjust to priority_queue sorting convention
- return !bIsTopLeft;
- }
-};
-
-typedef std::priority_queue< HalfTrapezoid, std::vector<HalfTrapezoid>, HalfTrapCompare > HTQueueBase;
-// we need a priority queue with a reserve() to prevent countless reallocations
-class HTQueue
-: public HTQueueBase
-{
-public:
- void reserve( size_t n ) { c.reserve( n ); }
- int capacity() { return c.capacity(); }
-};
-
-typedef std::vector<XTrapezoid> TrapezoidVector;
-
-class TrapezoidXCompare
-{
- const TrapezoidVector& mrVector;
-public:
- TrapezoidXCompare( const TrapezoidVector& rVector )
- : mrVector( rVector ) {}
- bool operator()( int nA, int nB ) const
- { return IsLeftOf( mrVector[nA].left, mrVector[nB].left ); }
-};
-
-typedef std::multiset< int, TrapezoidXCompare > ActiveTrapSet;
-
-class TrapezoidYCompare
-{
- const TrapezoidVector& mrVector;
-public:
- TrapezoidYCompare( const TrapezoidVector& rVector )
- : mrVector( rVector ) {}
- bool operator()( int nA, int nB ) const
- { return (mrVector[nA].bottom < mrVector[nB].bottom); }
-};
-
-typedef std::multiset< int, TrapezoidYCompare > VerticalTrapSet;
-} // end of anonymous namespace
-
-// draw a poly-polygon
-bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency)
-{
- // nothing to do for empty polypolygons
- const int nPolygonCount = rPolyPoly.count();
- if( nPolygonCount <= 0 )
- return TRUE;
-
- // nothing to do if everything is transparent
- if( (nBrushColor_ == SALCOLOR_NONE)
- && (nPenColor_ == SALCOLOR_NONE) )
- return TRUE;
-
- // cannot handle pencolor!=brushcolor yet
- if( (nPenColor_ != SALCOLOR_NONE)
- && (nPenColor_ != nBrushColor_) )
- return FALSE;
-
- // TODO: remove the env-variable when no longer needed
- static const char* pRenderEnv = getenv( "SAL_DISABLE_RENDER_POLY" );
- if( pRenderEnv )
- return FALSE;
-
- // check xrender support for trapezoids
- XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
- if( !rRenderPeer.AreTrapezoidsSupported() )
- return FALSE;
- Picture aDstPic = GetXRenderPicture();
- // check xrender support for this drawable
- if( !aDstPic )
- return FALSE;
-
- // don't bother with polygons outside of visible area
- const basegfx::B2DRange aViewRange( 0, 0, GetGraphicsWidth(), GetGraphicsHeight() );
- const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rPolyPoly );
- const bool bNeedViewClip = !aPolyRange.isInside( aViewRange );
- if( !aPolyRange.overlaps( aViewRange ) )
- return true;
-
- // convert the polypolygon to trapezoids
-
- // first convert the B2DPolyPolygon to HalfTrapezoids
- // #i100922# try to prevent priority-queue reallocations by reservering enough
- int nHTQueueReserve = 0;
- for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
- {
- const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
- const int nPointCount = aOuterPolygon.count();
- nHTQueueReserve += aOuterPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount;
- }
- nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1;
- HTQueue aHTQueue;
- aHTQueue.reserve( nHTQueueReserve );
- for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
- {
- const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
-
- // render-trapezoids should be inside the view => clip polygon against view range
- basegfx::B2DPolyPolygon aClippedPolygon( aOuterPolygon );
- if( bNeedViewClip )
- {
- aClippedPolygon = basegfx::tools::clipPolygonOnRange( aOuterPolygon, aViewRange, true, false );
- DBG_ASSERT( aClippedPolygon.count(), "polygon confirmed to overlap with view should not get here" );
- if( !aClippedPolygon.count() )
- continue;
- }
-
- // render-trapezoids have linear edges => get rid of bezier segments
- if( aClippedPolygon.areControlPointsUsed() )
- aClippedPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aClippedPolygon, 0.125 );
-
- // test and remove self intersections
- // TODO: make code intersection save, then remove this test
- basegfx::B2DPolyPolygon aInnerPolyPoly(basegfx::tools::solveCrossovers( aClippedPolygon));
- const int nInnerPolyCount = aInnerPolyPoly.count();
- for( int nInnerPolyIdx = 0; nInnerPolyIdx < nInnerPolyCount; ++nInnerPolyIdx )
- {
- ::basegfx::B2DPolygon aInnerPolygon = aInnerPolyPoly.getB2DPolygon( nInnerPolyIdx );
- const int nPointCount = aInnerPolygon.count();
- if( !nPointCount )
- continue;
-
- aHTQueue.reserve( aHTQueue.size() + 8 * nPointCount );
-
- // convert polygon point pairs to HalfTrapezoids
- // connect the polygon point with the first one if needed
- XPointFixed aOldXPF = { 0, 0 };
- XPointFixed aNewXPF;
- for( int nPointIdx = 0; nPointIdx <= nPointCount; ++nPointIdx, aOldXPF = aNewXPF )
- {
- const int k = (nPointIdx < nPointCount) ? nPointIdx : 0;
- const ::basegfx::B2DPoint& aPoint = aInnerPolygon.getB2DPoint( k );
-
- // convert the B2DPoint into XRENDER units
- if(getAntiAliasB2DDraw())
- {
- aNewXPF.x = XDoubleToFixed( aPoint.getX() );
- aNewXPF.y = XDoubleToFixed( aPoint.getY() );
- }
- else
- {
- aNewXPF.x = XDoubleToFixed( basegfx::fround( aPoint.getX() ) );
- aNewXPF.y = XDoubleToFixed( basegfx::fround( aPoint.getY() ) );
- }
-
- // check if enough data is available for a new HalfTrapezoid
- if( nPointIdx == 0 )
- continue;
- // ignore vertical segments
- if( aNewXPF.y == aOldXPF.y )
- continue;
-
- // construct HalfTrapezoid as topdown segment
- HalfTrapezoid aHT;
- if( aNewXPF.y < aOldXPF.y )
- {
- aHT.maLine.p1 = aNewXPF;
- aHT.maLine.p2 = aOldXPF;
- }
- else
- {
- aHT.maLine.p2 = aNewXPF;
- aHT.maLine.p1 = aOldXPF;
- }
-
- aHT.mnY = aHT.maLine.p1.y;
-
-#if 0 // ignore clipped HalfTrapezoids
- if( aHT.mnY < 0 )
- aHT.mnY = 0;
- else if( aHT.mnY > 10000 )
- continue;
-#endif
-
- // queue up the HalfTrapezoid
- aHTQueue.push( aHT );
- }
- }
- }
-
- if( aHTQueue.empty() )
- return TRUE;
-
- // then convert the HalfTrapezoids into full Trapezoids
- TrapezoidVector aTrapVector;
- aTrapVector.reserve( aHTQueue.size() * 2 ); // just a guess
-
- TrapezoidXCompare aTrapXCompare( aTrapVector );
- ActiveTrapSet aActiveTraps( aTrapXCompare );
-
- TrapezoidYCompare aTrapYCompare( aTrapVector );
- VerticalTrapSet aVerticalTraps( aTrapYCompare );
-
- while( !aHTQueue.empty() )
- {
- XTrapezoid aTrapezoid;
-
- // convert a HalfTrapezoid pair
- const HalfTrapezoid& rLeft = aHTQueue.top();
- aTrapezoid.top = rLeft.mnY;
- aTrapezoid.bottom = rLeft.maLine.p2.y;
- aTrapezoid.left = rLeft.maLine;
-
-#if 0
- // ignore empty trapezoids
- if( aTrapezoid.bottom <= aTrapezoid.top )
- continue;
-#endif
-
- aHTQueue.pop();
- if( aHTQueue.empty() ) // TODO: assert
- break;
- const HalfTrapezoid& rRight = aHTQueue.top();
- aTrapezoid.right = rRight.maLine;
- aHTQueue.pop();
-
- aTrapezoid.bottom = aTrapezoid.left.p2.y;
- if( aTrapezoid.bottom > aTrapezoid.right.p2.y )
- aTrapezoid.bottom = aTrapezoid.right.p2.y;
-
- // keep the full Trapezoid candidate
- aTrapVector.push_back( aTrapezoid );
-
- // unless it splits an older trapezoid
- bool bSplit = false;
- for(;;)
- {
- // check if the new trapezoid overlaps with an old trapezoid
- ActiveTrapSet::iterator aActiveTrapsIt
- = aActiveTraps.upper_bound( aTrapVector.size()-1 );
- if( aActiveTrapsIt == aActiveTraps.begin() )
- break;
- --aActiveTrapsIt;
-
- XTrapezoid& rLeftTrap = aTrapVector[ *aActiveTrapsIt ];
-
- // in the ActiveTrapSet there are still trapezoids where
- // a vertical overlap with new trapezoids is no longer possible
- // they could have been removed in the verticaltraps loop below
- // but this would have been expensive and is not needed as we can
- // simply ignore them now and remove them from the ActiveTrapSet
- // so they won't bother us in the future
- if( rLeftTrap.bottom <= aTrapezoid.top )
- {
- aActiveTraps.erase( aActiveTrapsIt );
- continue;
- }
-
- // check if there is horizontal overlap
- // aTrapezoid.left==rLeftTrap.right is allowed though
- if( !IsLeftOf( aTrapezoid.left, rLeftTrap.right ) )
- break;
-
- // split the old trapezoid and keep its upper part
- // find the old trapezoids entry in the VerticalTrapSet and remove it
- typedef std::pair<VerticalTrapSet::iterator, VerticalTrapSet::iterator> VTSPair;
- VTSPair aVTSPair = aVerticalTraps.equal_range( *aActiveTrapsIt );
- VerticalTrapSet::iterator aVTSit = aVTSPair.first;
- for(; (aVTSit != aVTSPair.second) && (*aVTSit != *aActiveTrapsIt); ++aVTSit ) ;
- if( aVTSit != aVTSPair.second )
- aVerticalTraps.erase( aVTSit );
- // then update the old trapezoid's bottom
- rLeftTrap.bottom = aTrapezoid.top;
- // enter the updated old trapzoid in VerticalTrapSet
- aVerticalTraps.insert( aVerticalTraps.begin(), *aActiveTrapsIt );
- // the old trapezoid is no longer active
- aActiveTraps.erase( aActiveTrapsIt );
-
- // the trapezoid causing the split has become obsolete
- // so its both sides have to be re-queued
- HalfTrapezoid aHT;
- aHT.mnY = aTrapezoid.top;
- aHT.maLine = aTrapezoid.left;
- aHTQueue.push( aHT );
- aHT.maLine = aTrapezoid.right;
- aHTQueue.push( aHT );
-
- bSplit = true;
- break;
- }
-
- // keep or forget the resulting full Trapezoid
- if( bSplit )
- aTrapVector.pop_back();
- else
- {
- aActiveTraps.insert( aTrapVector.size()-1 );
- aVerticalTraps.insert( aTrapVector.size()-1 );
- }
-
- // mark trapezoids that can no longer be split as inactive
- // and recycle their sides which were not fully resolved
- static const XFixed nMaxTop = +0x7FFFFFFF;
- XFixed nNewTop = aHTQueue.empty() ? nMaxTop : aHTQueue.top().mnY;
- while( !aVerticalTraps.empty() )
- {
- const XTrapezoid& rOldTrap = aTrapVector[ *aVerticalTraps.begin() ];
- if( nNewTop < rOldTrap.bottom )
- break;
- // the reference Trapezoid can no longer be split
- aVerticalTraps.erase( aVerticalTraps.begin() );
-
- // recycle its sides that were not fully resolved
- HalfTrapezoid aHT;
- aHT.mnY = rOldTrap.bottom;
- if( rOldTrap.left.p2.y > rOldTrap.bottom )
- {
- aHT.maLine = rOldTrap.left;
- aHTQueue.push( aHT );
- }
- if( rOldTrap.right.p2.y > rOldTrap.bottom )
- {
- aHT.maLine = rOldTrap.right;
- aHTQueue.push( aHT );
- }
- }
- }
-
- // create xrender Picture for polygon foreground
- SalDisplay::RenderEntry& rEntry = GetDisplay()->GetRenderEntries( m_nScreen )[ 32 ];
- if( !rEntry.m_aPicture )
- {
- Display* pXDisplay = GetXDisplay();
-
- rEntry.m_aPixmap = ::XCreatePixmap( pXDisplay, hDrawable_, 1, 1, 32 );
- XRenderPictureAttributes aAttr;
- aAttr.repeat = true;
-
- XRenderPictFormat* pXRPF = rRenderPeer.FindStandardFormat( PictStandardARGB32 );
- rEntry.m_aPicture = rRenderPeer.CreatePicture( rEntry.m_aPixmap, pXRPF, CPRepeat, &aAttr );
- }
-
- // set polygon foreground color and opacity
- XRenderColor aRenderColor = GetXRenderColor( nBrushColor_ , fTransparency );
- rRenderPeer.FillRectangle( PictOpSrc, rEntry.m_aPicture, &aRenderColor, 0, 0, 1, 1 );
-
- // set clipping
- // TODO: move into GetXRenderPicture?
- if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) )
- rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ );
-
- // render the trapezoids
- const XRenderPictFormat* pMaskFormat = rRenderPeer.GetStandardFormatA8();
- rRenderPeer.CompositeTrapezoids( PictOpOver,
- rEntry.m_aPicture, aDstPic, pMaskFormat, 0, 0, &aTrapVector[0], aTrapVector.size() );
-
- return TRUE;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin)
-{
- const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
- if( !rRenderPeer.AreTrapezoidsSupported() )
- return false;
-
- // get the area polygon for the line polygon
- basegfx::B2DPolygon aPolygon = rPolygon;
- if( (rLineWidth.getX() != rLineWidth.getY())
- && !basegfx::fTools::equalZero( rLineWidth.getY() ) )
- {
- // prepare for createAreaGeometry() with anisotropic linewidth
- basegfx::B2DHomMatrix aAnisoMatrix;
- aAnisoMatrix.scale( 1.0, rLineWidth.getX() / rLineWidth.getY() );
- aPolygon.transform( aAnisoMatrix );
- }
-
- // AW: reSegment no longer needed; new createAreaGeometry will remove exteme positions
- // and create bezier polygons
- //if( aPolygon.areControlPointsUsed() )
- // aPolygon = basegfx::tools::reSegmentPolygonEdges( aPolygon, 8, true, false );
- //const basegfx::B2DPolyPolygon aAreaPolyPoly = basegfx::tools::createAreaGeometryForSimplePolygon(
- // aPolygon, 0.5*rLineWidth.getX(), eLineJoin );
- const basegfx::B2DPolyPolygon aAreaPolyPoly(basegfx::tools::createAreaGeometry(aPolygon, 0.5*rLineWidth.getX(), eLineJoin));
-
- if( (rLineWidth.getX() != rLineWidth.getY())
- && !basegfx::fTools::equalZero( rLineWidth.getX() ) )
- {
- // postprocess createAreaGeometry() for anisotropic linewidth
- basegfx::B2DHomMatrix aAnisoMatrix;
- aAnisoMatrix.scale( 1.0, rLineWidth.getY() / rLineWidth.getX() );
- aPolygon.transform( aAnisoMatrix );
- }
-
- // temporarily adjust brush color to pen color
- // since the line is drawn as an area-polygon
- const SalColor aKeepBrushColor = nBrushColor_;
- nBrushColor_ = nPenColor_;
-
- // draw each area polypolygon component individually
- // to emulate the polypolygon winding rule "non-zero"
- bool bDrawOk = true;
- const int nPolyCount = aAreaPolyPoly.count();
- for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx )
- {
- const ::basegfx::B2DPolyPolygon aOnePoly( aAreaPolyPoly.getB2DPolygon( nPolyIdx ) );
- bDrawOk = drawPolyPolygon( aOnePoly, 0.0);
- if( !bDrawOk )
- break;
- }
-
- // restore the original brush GC
- nBrushColor_ = aKeepBrushColor;
- return bDrawOk;
-}
-
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_vcl.hxx"
+
+#include "Xproto.h"
+
+#include "salunx.h"
+#include "saldata.hxx"
+#include "saldisp.hxx"
+#include "salgdi.h"
+#include "salframe.h"
+#include "salvd.h"
+#include "xrender_peer.hxx"
+
+#include "vcl/printergfx.hxx"
+#include "vcl/jobdata.hxx"
+
+#include "tools/debug.hxx"
+
+#include "basegfx/polygon/b2dpolygon.hxx"
+#include "basegfx/polygon/b2dpolypolygon.hxx"
+#include "basegfx/polygon/b2dpolypolygontools.hxx"
+#include "basegfx/polygon/b2dpolygontools.hxx"
+#include "basegfx/polygon/b2dpolygonclipper.hxx"
+#include "basegfx/polygon/b2dlinegeometry.hxx"
+#include "basegfx/matrix/b2dhommatrix.hxx"
+#include "basegfx/polygon/b2dpolypolygoncutter.hxx"
+
+#include <vector>
+#include <queue>
+#include <set>
+
+// -=-= SalPolyLine =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#define STATIC_POINTS 64
+
+class SalPolyLine
+{
+ XPoint Points_[STATIC_POINTS];
+ XPoint *pFirst_;
+public:
+ inline SalPolyLine( ULONG nPoints );
+ inline SalPolyLine( ULONG nPoints, const SalPoint *p );
+ inline ~SalPolyLine();
+ inline XPoint &operator [] ( ULONG n ) const
+ { return pFirst_[n]; }
+};
+
+inline SalPolyLine::SalPolyLine( ULONG nPoints )
+ : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ )
+{}
+
+inline SalPolyLine::SalPolyLine( ULONG nPoints, const SalPoint *p )
+ : pFirst_( nPoints+1 > STATIC_POINTS ? new XPoint[nPoints+1] : Points_ )
+{
+ for( ULONG i = 0; i < nPoints; i++ )
+ {
+ pFirst_[i].x = (short)p[i].mnX;
+ pFirst_[i].y = (short)p[i].mnY;
+ }
+ pFirst_[nPoints] = pFirst_[0]; // close polyline
+}
+
+inline SalPolyLine::~SalPolyLine()
+{ if( pFirst_ != Points_ ) delete [] pFirst_; }
+
+#undef STATIC_POINTS
+// -=-= X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+X11SalGraphics::X11SalGraphics()
+{
+ m_pFrame = NULL;
+ m_pVDev = NULL;
+ m_pDeleteColormap = NULL;
+ hDrawable_ = None;
+ m_aRenderPicture = 0;
+ m_pRenderFormat = NULL;
+
+ pClipRegion_ = NULL;
+ pPaintRegion_ = NULL;
+
+ pPenGC_ = NULL;
+ nPenPixel_ = 0;
+ nPenColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black
+
+ pFontGC_ = NULL;
+ for( int i = 0; i < MAX_FALLBACK; ++i )
+ {
+ mXFont[i] = NULL;
+ mpServerFont[i] = NULL;
+ }
+
+ nTextPixel_ = 0;
+ nTextColor_ = MAKE_SALCOLOR( 0x00, 0x00, 0x00 ); // Black
+
+#ifdef ENABLE_GRAPHITE
+ // check if graphite fonts have been disabled
+ static const char* pDisableGraphiteStr = getenv( "SAL_DISABLE_GRAPHITE" );
+ bDisableGraphite_ = pDisableGraphiteStr ? (pDisableGraphiteStr[0]!='0') : FALSE;
+#endif
+
+ pBrushGC_ = NULL;
+ nBrushPixel_ = 0;
+ nBrushColor_ = MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ); // White
+ hBrush_ = None;
+
+ pMonoGC_ = NULL;
+ pCopyGC_ = NULL;
+ pMaskGC_ = NULL;
+ pInvertGC_ = NULL;
+ pInvert50GC_ = NULL;
+ pStippleGC_ = NULL;
+ pTrackingGC_ = NULL;
+
+ bWindow_ = FALSE;
+ bPrinter_ = FALSE;
+ bVirDev_ = FALSE;
+ bPenGC_ = FALSE;
+ bFontGC_ = FALSE;
+ bBrushGC_ = FALSE;
+ bMonoGC_ = FALSE;
+ bCopyGC_ = FALSE;
+ bInvertGC_ = FALSE;
+ bInvert50GC_ = FALSE;
+ bStippleGC_ = FALSE;
+ bTrackingGC_ = FALSE;
+ bXORMode_ = FALSE;
+ bDitherBrush_ = FALSE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+X11SalGraphics::~X11SalGraphics()
+{
+ ReleaseFonts();
+ freeResources();
+}
+
+// -=-= SalGraphics / X11SalGraphics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+void X11SalGraphics::freeResources()
+{
+ Display *pDisplay = GetXDisplay();
+
+ DBG_ASSERT( !pPaintRegion_, "pPaintRegion_" );
+ if( pClipRegion_ ) XDestroyRegion( pClipRegion_ ), pClipRegion_ = None;
+
+ if( hBrush_ ) XFreePixmap( pDisplay, hBrush_ ), hBrush_ = None;
+ if( pPenGC_ ) XFreeGC( pDisplay, pPenGC_ ), pPenGC_ = None;
+ if( pFontGC_ ) XFreeGC( pDisplay, pFontGC_ ), pFontGC_ = None;
+ if( pBrushGC_ ) XFreeGC( pDisplay, pBrushGC_ ), pBrushGC_ = None;
+ if( pMonoGC_ ) XFreeGC( pDisplay, pMonoGC_ ), pMonoGC_ = None;
+ if( pCopyGC_ ) XFreeGC( pDisplay, pCopyGC_ ), pCopyGC_ = None;
+ if( pMaskGC_ ) XFreeGC( pDisplay, pMaskGC_ ), pMaskGC_ = None;
+ if( pInvertGC_ ) XFreeGC( pDisplay, pInvertGC_ ), pInvertGC_ = None;
+ if( pInvert50GC_ ) XFreeGC( pDisplay, pInvert50GC_ ), pInvert50GC_ = None;
+ if( pStippleGC_ ) XFreeGC( pDisplay, pStippleGC_ ), pStippleGC_ = None;
+ if( pTrackingGC_ ) XFreeGC( pDisplay, pTrackingGC_ ), pTrackingGC_ = None;
+ if( m_pDeleteColormap )
+ delete m_pDeleteColormap, m_pColormap = m_pDeleteColormap = NULL;
+
+ if( m_aRenderPicture )
+ XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0;
+
+ bPenGC_ = bFontGC_ = bBrushGC_ = bMonoGC_ = bCopyGC_ = bInvertGC_ = bInvert50GC_ = bStippleGC_ = bTrackingGC_ = false;
+}
+
+void X11SalGraphics::SetDrawable( Drawable aDrawable, int nScreen )
+{
+ // shortcut if nothing changed
+ if( hDrawable_ == aDrawable )
+ return;
+
+ // free screen specific resources if needed
+ if( nScreen != m_nScreen )
+ {
+ freeResources();
+ m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap( nScreen );
+ m_nScreen = nScreen;
+ }
+
+ hDrawable_ = aDrawable;
+ SetXRenderFormat( NULL );
+ if( m_aRenderPicture )
+ {
+ XRenderPeer::GetInstance().FreePicture( m_aRenderPicture );
+ m_aRenderPicture = 0;
+ }
+
+ if( hDrawable_ )
+ {
+ nPenPixel_ = GetPixel( nPenColor_ );
+ nTextPixel_ = GetPixel( nTextColor_ );
+ nBrushPixel_ = GetPixel( nBrushColor_ );
+ }
+}
+
+void X11SalGraphics::Init( SalFrame *pFrame, Drawable aTarget, int nScreen )
+{
+#if 0 // TODO: use SetDrawable() instead
+ m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen);
+ hDrawable_ = aTarget;
+ m_nScreen = nScreen;
+ SetXRenderFormat( NULL );
+ if( m_aRenderPicture )
+ XRenderPeer::GetInstance().FreePicture( m_aRenderPicture ), m_aRenderPicture = 0;
+
+ nPenPixel_ = GetPixel( nPenColor_ );
+ nTextPixel_ = GetPixel( nTextColor_ );
+ nBrushPixel_ = GetPixel( nBrushColor_ );
+#else
+ m_pColormap = &GetX11SalData()->GetDisplay()->GetColormap(nScreen);
+ m_nScreen = nScreen;
+ SetDrawable( aTarget, nScreen );
+#endif
+
+ bWindow_ = TRUE;
+ m_pFrame = pFrame;
+ m_pVDev = NULL;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::DeInit()
+{
+ SetDrawable( None, m_nScreen );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetClipRegion( GC pGC, XLIB_Region pXReg ) const
+{
+ Display *pDisplay = GetXDisplay();
+
+ int n = 0;
+ XLIB_Region Regions[3];
+
+ if( pClipRegion_ /* && !XEmptyRegion( pClipRegion_ ) */ )
+ Regions[n++] = pClipRegion_;
+// if( pPaintRegion_ /* && !XEmptyRegion( pPaintRegion_ ) */ )
+// Regions[n++] = pPaintRegion_;
+
+ if( pXReg && !XEmptyRegion( pXReg ) )
+ Regions[n++] = pXReg;
+
+ if( 0 == n )
+ XSetClipMask( pDisplay, pGC, None );
+ else if( 1 == n )
+ XSetRegion( pDisplay, pGC, Regions[0] );
+ else
+ {
+ XLIB_Region pTmpRegion = XCreateRegion();
+ XIntersectRegion( Regions[0], Regions[1], pTmpRegion );
+// if( 3 == n )
+// XIntersectRegion( Regions[2], pTmpRegion, pTmpRegion );
+ XSetRegion( pDisplay, pGC, pTmpRegion );
+ XDestroyRegion( pTmpRegion );
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+GC X11SalGraphics::SelectPen()
+{
+ Display *pDisplay = GetXDisplay();
+
+ if( !pPenGC_ )
+ {
+ XGCValues values;
+ values.subwindow_mode = ClipByChildren;
+ values.fill_rule = EvenOddRule; // Pict import/ Gradient
+ values.graphics_exposures = False;
+
+ pPenGC_ = XCreateGC( pDisplay, hDrawable_,
+ GCSubwindowMode | GCFillRule | GCGraphicsExposures,
+ &values );
+ }
+
+ if( !bPenGC_ )
+ {
+ if( nPenColor_ != SALCOLOR_NONE )
+ XSetForeground( pDisplay, pPenGC_, nPenPixel_ );
+ XSetFunction ( pDisplay, pPenGC_, bXORMode_ ? GXxor : GXcopy );
+ SetClipRegion( pPenGC_ );
+ bPenGC_ = TRUE;
+ }
+
+ return pPenGC_;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+GC X11SalGraphics::SelectBrush()
+{
+ Display *pDisplay = GetXDisplay();
+
+ DBG_ASSERT( nBrushColor_ != SALCOLOR_NONE, "Brush Transparent" );
+
+ if( !pBrushGC_ )
+ {
+ XGCValues values;
+ // values.subwindow_mode = IncludeInferiors;
+ values.subwindow_mode = ClipByChildren;
+ values.fill_rule = EvenOddRule; // Pict import/ Gradient
+ values.graphics_exposures = False;
+
+ pBrushGC_ = XCreateGC( pDisplay, hDrawable_,
+ GCSubwindowMode | GCFillRule | GCGraphicsExposures,
+ &values );
+ }
+
+ if( !bBrushGC_ )
+ {
+ if( !bDitherBrush_ )
+ {
+ XSetFillStyle ( pDisplay, pBrushGC_, FillSolid );
+ XSetForeground( pDisplay, pBrushGC_, nBrushPixel_ );
+ #if defined(_USE_PRINT_EXTENSION_)
+ XSetBackground( pDisplay, pBrushGC_,
+ WhitePixel(pDisplay, DefaultScreen(pDisplay)) );
+ #else
+ if( bPrinter_ )
+ XSetTile( pDisplay, pBrushGC_, None );
+ #endif
+ }
+ else
+ {
+ // Bug in Sun Solaris 2.5.1, XFillPolygon doesn't allways reflect
+ // changes of the tile. PROPERTY_BUG_Tile doesn't fix this !
+ if (GetDisplay()->GetProperties() & PROPERTY_BUG_FillPolygon_Tile)
+ XSetFillStyle ( pDisplay, pBrushGC_, FillSolid );
+
+ XSetFillStyle ( pDisplay, pBrushGC_, FillTiled );
+ XSetTile ( pDisplay, pBrushGC_, hBrush_ );
+ }
+ XSetFunction ( pDisplay, pBrushGC_, bXORMode_ ? GXxor : GXcopy );
+ SetClipRegion( pBrushGC_ );
+
+ bBrushGC_ = TRUE;
+ }
+
+ return pBrushGC_;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+GC X11SalGraphics::GetTrackingGC()
+{
+ const char dash_list[2] = {2, 2};
+
+ if( !pTrackingGC_ )
+ {
+ XGCValues values;
+
+ values.graphics_exposures = False;
+ values.foreground = m_pColormap->GetBlackPixel()
+ ^ m_pColormap->GetWhitePixel();
+ values.function = GXxor;
+ values.line_width = 1;
+ values.line_style = LineOnOffDash;
+
+ pTrackingGC_ = XCreateGC( GetXDisplay(), GetDrawable(),
+ GCGraphicsExposures | GCForeground | GCFunction
+ | GCLineWidth | GCLineStyle,
+ &values );
+ XSetDashes( GetXDisplay(), pTrackingGC_, 0, dash_list, 2 );
+ }
+
+ if( !bTrackingGC_ )
+ {
+ SetClipRegion( pTrackingGC_ );
+ bTrackingGC_ = TRUE;
+ }
+
+ return pTrackingGC_;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::DrawLines( ULONG nPoints,
+ const SalPolyLine &rPoints,
+ GC pGC,
+ bool bClose
+ )
+{
+ // errechne wie viele Linien XWindow auf einmal zeichnen kann
+ ULONG nMaxLines = (GetDisplay()->GetMaxRequestSize() - sizeof(xPolyPointReq))
+ / sizeof(xPoint);
+ if( nMaxLines > nPoints ) nMaxLines = nPoints;
+
+ // gebe alle Linien aus, die XWindows zeichnen kann.
+ ULONG n;
+ for( n = 0; nPoints - n > nMaxLines; n += nMaxLines - 1 )
+ XDrawLines( GetXDisplay(),
+ GetDrawable(),
+ pGC,
+ &rPoints[n],
+ nMaxLines,
+ CoordModeOrigin );
+
+ if( n < nPoints )
+ XDrawLines( GetXDisplay(),
+ GetDrawable(),
+ pGC,
+ &rPoints[n],
+ nPoints - n,
+ CoordModeOrigin );
+ if( bClose )
+ {
+ if( rPoints[nPoints-1].x != rPoints[0].x || rPoints[nPoints-1].y != rPoints[0].y )
+ drawLine( rPoints[nPoints-1].x, rPoints[nPoints-1].y, rPoints[0].x, rPoints[0].y );
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+// Dithern: Calculate a dither-pixmap and make a brush of it
+#define P_DELTA 51
+#define DMAP( v, m ) ((v % P_DELTA) > m ? (v / P_DELTA) + 1 : (v / P_DELTA))
+
+BOOL X11SalGraphics::GetDitherPixmap( SalColor nSalColor )
+{
+ static const short nOrdDither8Bit[ 8 ][ 8 ] =
+ {
+ { 0, 38, 9, 48, 2, 40, 12, 50},
+ {25, 12, 35, 22, 28, 15, 37, 24},
+ { 6, 44, 3, 41, 8, 47, 5, 44},
+ {32, 19, 28, 16, 34, 21, 31, 18},
+ { 1, 40, 11, 49, 0, 39, 10, 48},
+ {27, 14, 36, 24, 26, 13, 36, 23},
+ { 8, 46, 4, 43, 7, 45, 4, 42},
+ {33, 20, 30, 17, 32, 20, 29, 16}
+ };
+
+ // test for correct depth (8bit)
+ if( GetColormap().GetVisual().GetDepth() != 8 )
+ return FALSE;
+
+ char pBits[64];
+ char *pBitsPtr = pBits;
+
+ // Set the pallette-entries for the dithering tile
+ UINT8 nSalColorRed = SALCOLOR_RED ( nSalColor );
+ UINT8 nSalColorGreen = SALCOLOR_GREEN ( nSalColor );
+ UINT8 nSalColorBlue = SALCOLOR_BLUE ( nSalColor );
+
+ for( int nY = 0; nY < 8; nY++ )
+ {
+ for( int nX = 0; nX < 8; nX++ )
+ {
+ short nMagic = nOrdDither8Bit[nY][nX];
+ UINT8 nR = P_DELTA * DMAP( nSalColorRed, nMagic );
+ UINT8 nG = P_DELTA * DMAP( nSalColorGreen, nMagic );
+ UINT8 nB = P_DELTA * DMAP( nSalColorBlue, nMagic );
+
+ *pBitsPtr++ = GetColormap().GetPixel( MAKE_SALCOLOR( nR, nG, nB ) );
+ }
+ }
+
+ // create the tile as ximage and an according pixmap -> caching
+ XImage *pImage = XCreateImage( GetXDisplay(),
+ GetColormap().GetXVisual(),
+ 8,
+ ZPixmap,
+ 0, // offset
+ pBits, // data
+ 8, 8, // width & height
+ 8, // bitmap_pad
+ 0 ); // (default) bytes_per_line
+
+ if ( GetDisplay()->GetProperties() & PROPERTY_BUG_Tile )
+ {
+ if (hBrush_)
+ XFreePixmap (GetXDisplay(), hBrush_);
+ hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 );
+ }
+ else
+ if( !hBrush_ )
+ hBrush_ = XCreatePixmap( GetXDisplay(), GetDrawable(), 8, 8, 8 );
+
+ // put the ximage to the pixmap
+ XPutImage( GetXDisplay(),
+ hBrush_,
+ GetDisplay()->GetCopyGC( m_nScreen ),
+ pImage,
+ 0, 0, // Source
+ 0, 0, // Destination
+ 8, 8 ); // width & height
+
+ // destroy image-frame but not palette-data
+ pImage->data = NULL;
+ XDestroyImage( pImage );
+
+ return TRUE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY ) // const
+{
+ const SalDisplay *pDisplay = GetDisplay();
+
+ rDPIX = pDisplay->GetResolution().A();
+ rDPIY = pDisplay->GetResolution().B();
+ if( !pDisplay->GetExactResolution() && rDPIY < 96 )
+ {
+ rDPIX = Divide( rDPIX * 96, rDPIY );
+ rDPIY = 96;
+ }
+ else if ( rDPIY > 200 )
+ {
+ rDPIX = Divide( rDPIX * 200, rDPIY );
+ rDPIY = 200;
+ }
+
+ // #i12705# equalize x- and y-resolution if they are close enough
+ if( rDPIX != rDPIY )
+ {
+ // different x- and y- resolutions are usually artifacts of
+ // a wrongly calculated screen size.
+ //if( (13*rDPIX >= 10*rDPIY) && (13*rDPIY >= 10*rDPIX) ) //+-30%
+ {
+#ifdef DEBUG
+ printf("Forcing Resolution from %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 " to %" SAL_PRIdINT32 "x%" SAL_PRIdINT32 "\n",
+ rDPIX,rDPIY,rDPIY,rDPIY);
+#endif
+ rDPIX = rDPIY; // y-resolution is more trustworthy
+ }
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+USHORT X11SalGraphics::GetBitCount() // const
+{
+ return GetVisual().GetDepth();
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+long X11SalGraphics::GetGraphicsWidth() const
+{
+ if( m_pFrame )
+ return m_pFrame->maGeometry.nWidth;
+ else if( m_pVDev )
+ return m_pVDev->GetWidth();
+ else
+ return 0;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+long X11SalGraphics::GetGraphicsHeight() const
+{
+ if( m_pFrame )
+ return m_pFrame->maGeometry.nHeight;
+ else if( m_pVDev )
+ return m_pVDev->GetHeight();
+ else
+ return 0;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::ResetClipRegion()
+{
+ if( pClipRegion_ )
+ {
+ bPenGC_ = FALSE;
+ bFontGC_ = FALSE;
+ bBrushGC_ = FALSE;
+ bMonoGC_ = FALSE;
+ bCopyGC_ = FALSE;
+ bInvertGC_ = FALSE;
+ bInvert50GC_ = FALSE;
+ bStippleGC_ = FALSE;
+ bTrackingGC_ = FALSE;
+
+ XDestroyRegion( pClipRegion_ );
+ pClipRegion_ = NULL;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::BeginSetClipRegion( ULONG )
+{
+ if( pClipRegion_ )
+ XDestroyRegion( pClipRegion_ );
+ pClipRegion_ = XCreateRegion();
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+BOOL X11SalGraphics::unionClipRegion( long nX, long nY, long nDX, long nDY )
+{
+ if (!nDX || !nDY)
+ return TRUE;
+
+ XRectangle aRect;
+ aRect.x = (short)nX;
+ aRect.y = (short)nY;
+ aRect.width = (unsigned short)nDX;
+ aRect.height = (unsigned short)nDY;
+
+ XUnionRectWithRegion( &aRect, pClipRegion_, pClipRegion_ );
+
+ return TRUE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+bool X11SalGraphics::unionClipRegion( const ::basegfx::B2DPolyPolygon& )
+{
+ // TODO: implement and advertise OutDevSupport_B2DClip support
+ return false;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::EndSetClipRegion()
+{
+ bPenGC_ = FALSE;
+ bFontGC_ = FALSE;
+ bBrushGC_ = FALSE;
+ bMonoGC_ = FALSE;
+ bCopyGC_ = FALSE;
+ bInvertGC_ = FALSE;
+ bInvert50GC_ = FALSE;
+ bStippleGC_ = FALSE;
+ bTrackingGC_ = FALSE;
+
+ if( XEmptyRegion( pClipRegion_ ) )
+ {
+ XDestroyRegion( pClipRegion_ );
+ pClipRegion_= NULL;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetLineColor()
+{
+ if( nPenColor_ != SALCOLOR_NONE )
+ {
+ nPenColor_ = SALCOLOR_NONE;
+ bPenGC_ = FALSE;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetLineColor( SalColor nSalColor )
+{
+ if( nPenColor_ != nSalColor )
+ {
+ nPenColor_ = nSalColor;
+ nPenPixel_ = GetPixel( nSalColor );
+ bPenGC_ = FALSE;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetFillColor()
+{
+ if( nBrushColor_ != SALCOLOR_NONE )
+ {
+ bDitherBrush_ = FALSE;
+ nBrushColor_ = SALCOLOR_NONE;
+ bBrushGC_ = FALSE;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetFillColor( SalColor nSalColor )
+{
+ if( nBrushColor_ != nSalColor )
+ {
+ bDitherBrush_ = FALSE;
+ nBrushColor_ = nSalColor;
+ nBrushPixel_ = GetPixel( nSalColor );
+ if( TrueColor != GetColormap().GetVisual().GetClass()
+ && GetColormap().GetColor( nBrushPixel_ ) != nBrushColor_
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x00 ) // black
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0x80 ) // blue
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x00 ) // green
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0x80, 0x80 ) // cyan
+ && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x00 ) // red
+ && nSalColor != MAKE_SALCOLOR( 0x80, 0x00, 0x80 ) // magenta
+ && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x00 ) // brown
+ && nSalColor != MAKE_SALCOLOR( 0x80, 0x80, 0x80 ) // gray
+ && nSalColor != MAKE_SALCOLOR( 0xC0, 0xC0, 0xC0 ) // light gray
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0x00, 0xFF ) // light blue
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0x00 ) // light green
+ && nSalColor != MAKE_SALCOLOR( 0x00, 0xFF, 0xFF ) // light cyan
+ && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0x00 ) // light red
+ && nSalColor != MAKE_SALCOLOR( 0xFF, 0x00, 0xFF ) // light magenta
+ && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0x00 ) // light brown
+ && nSalColor != MAKE_SALCOLOR( 0xFF, 0xFF, 0xFF ) )
+ bDitherBrush_ = GetDitherPixmap(nSalColor);
+ bBrushGC_ = FALSE;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetROPLineColor( SalROPColor nROPColor )
+{
+ switch( nROPColor )
+ {
+ case SAL_ROP_0 : // 0
+ nPenPixel_ = (Pixel)0;
+ break;
+ case SAL_ROP_1 : // 1
+ nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
+ break;
+ case SAL_ROP_INVERT : // 2
+ nPenPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
+ break;
+ }
+ nPenColor_ = GetColormap().GetColor( nPenPixel_ );
+ bPenGC_ = FALSE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetROPFillColor( SalROPColor nROPColor )
+{
+ switch( nROPColor )
+ {
+ case SAL_ROP_0 : // 0
+ nBrushPixel_ = (Pixel)0;
+ break;
+ case SAL_ROP_1 : // 1
+ nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
+ break;
+ case SAL_ROP_INVERT : // 2
+ nBrushPixel_ = (Pixel)(1 << GetVisual().GetDepth()) - 1;
+ break;
+ }
+ bDitherBrush_ = FALSE;
+ nBrushColor_ = GetColormap().GetColor( nBrushPixel_ );
+ bBrushGC_ = FALSE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::SetXORMode( bool bSet, bool )
+{
+ if( !bXORMode_ == bSet )
+ {
+ bXORMode_ = bSet;
+ bPenGC_ = FALSE;
+ bBrushGC_ = FALSE;
+ bMonoGC_ = FALSE;
+ bCopyGC_ = FALSE;
+ bInvertGC_ = FALSE;
+ bInvert50GC_ = FALSE;
+ bStippleGC_ = FALSE;
+ bTrackingGC_ = FALSE;
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawPixel( long nX, long nY )
+{
+ if( nPenColor_ != SALCOLOR_NONE )
+ XDrawPoint( GetXDisplay(), GetDrawable(), SelectPen(), nX, nY );
+}
+
+void X11SalGraphics::drawPixel( long nX, long nY, SalColor nSalColor )
+{
+ if( nSalColor != SALCOLOR_NONE )
+ {
+ Display *pDisplay = GetXDisplay();
+
+ if( (nPenColor_ == SALCOLOR_NONE) && !bPenGC_ )
+ {
+ SetLineColor( nSalColor );
+ XDrawPoint( pDisplay, GetDrawable(), SelectPen(), nX, nY );
+ nPenColor_ = SALCOLOR_NONE;
+ bPenGC_ = False;
+ }
+ else
+ {
+ GC pGC = SelectPen();
+
+ if( nSalColor != nPenColor_ )
+ XSetForeground( pDisplay, pGC, GetPixel( nSalColor ) );
+
+ XDrawPoint( pDisplay, GetDrawable(), pGC, nX, nY );
+
+ if( nSalColor != nPenColor_ )
+ XSetForeground( pDisplay, pGC, nPenPixel_ );
+ }
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 )
+{
+ if( nPenColor_ != SALCOLOR_NONE )
+ {
+ if ( GetDisplay()->GetProperties() & PROPERTY_BUG_DrawLine )
+ {
+ GC aGC = SelectPen();
+ XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX1, (int)nY1);
+ XDrawPoint (GetXDisplay(), GetDrawable(), aGC, (int)nX2, (int)nY2);
+ XDrawLine (GetXDisplay(), GetDrawable(), aGC, nX1, nY1, nX2, nY2 );
+ }
+ else
+ XDrawLine( GetXDisplay(), GetDrawable(),SelectPen(),
+ nX1, nY1, nX2, nY2 );
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawRect( long nX, long nY, long nDX, long nDY )
+{
+ if( nBrushColor_ != SALCOLOR_NONE )
+ {
+ XFillRectangle( GetXDisplay(),
+ GetDrawable(),
+ SelectBrush(),
+ nX, nY, nDX, nDY );
+ }
+ // Beschreibung DrawRect verkehrt, deshalb -1
+ if( nPenColor_ != SALCOLOR_NONE )
+ XDrawRectangle( GetXDisplay(),
+ GetDrawable(),
+ SelectPen(),
+ nX, nY, nDX-1, nDY-1 );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry )
+{
+ drawPolyLine( nPoints, pPtAry, false );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawPolyLine( ULONG nPoints, const SalPoint *pPtAry, bool bClose )
+{
+ if( nPenColor_ != 0xFFFFFFFF )
+ {
+ SalPolyLine Points( nPoints, pPtAry );
+
+ DrawLines( nPoints, Points, SelectPen(), bClose );
+ }
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawPolygon( ULONG nPoints, const SalPoint* pPtAry )
+{
+ if( nPoints == 0 )
+ return;
+
+ if( nPoints < 3 )
+ {
+ if( !bXORMode_ )
+ {
+ if( 1 == nPoints )
+ drawPixel( pPtAry[0].mnX, pPtAry[0].mnY );
+ else
+ drawLine( pPtAry[0].mnX, pPtAry[0].mnY,
+ pPtAry[1].mnX, pPtAry[1].mnY );
+ }
+ return;
+ }
+
+ SalPolyLine Points( nPoints, pPtAry );
+
+ nPoints++;
+
+ /* WORKAROUND: some Xservers (Xorg, VIA chipset in this case)
+ * do not draw the visible part of a polygon
+ * if it overlaps to the left of screen 0,y.
+ * This happens to be the case in the gradient drawn in the
+ * menubar background. workaround for the special case of
+ * of a rectangle overlapping to the left.
+ */
+ if( nPoints == 5 &&
+ Points[ 0 ].x == Points[ 1 ].x &&
+ Points[ 1 ].y == Points[ 2 ].y &&
+ Points[ 2 ].x == Points[ 3 ].x &&
+ Points[ 0 ].x == Points[ 4 ].x && Points[ 0 ].y == Points[ 4 ].y
+ )
+ {
+ bool bLeft = false;
+ bool bRight = false;
+ for(unsigned int i = 0; i < nPoints; i++ )
+ {
+ if( Points[i].x < 0 )
+ bLeft = true;
+ else
+ bRight= true;
+ }
+ if( bLeft && ! bRight )
+ return;
+ if( bLeft && bRight )
+ {
+ for( unsigned int i = 0; i < nPoints; i++ )
+ if( Points[i].x < 0 )
+ Points[i].x = 0;
+ }
+ }
+
+ if( nBrushColor_ != SALCOLOR_NONE )
+ XFillPolygon( GetXDisplay(),
+ GetDrawable(),
+ SelectBrush(),
+ &Points[0], nPoints,
+ Complex, CoordModeOrigin );
+
+ if( nPenColor_ != 0xFFFFFFFF )
+ DrawLines( nPoints, Points, SelectPen(), true );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+void X11SalGraphics::drawPolyPolygon( sal_uInt32 nPoly,
+ const sal_uInt32 *pPoints,
+ PCONSTSALPOINT *pPtAry )
+{
+ if( nBrushColor_ != SALCOLOR_NONE )
+ {
+ ULONG i, n;
+ XLIB_Region pXRegA = NULL;
+
+ for( i = 0; i < nPoly; i++ ) {
+ n = pPoints[i];
+ SalPolyLine Points( n, pPtAry[i] );
+ if( n > 2 )
+ {
+ XLIB_Region pXRegB = XPolygonRegion( &Points[0], n+1, WindingRule );
+ if( !pXRegA )
+ pXRegA = pXRegB;
+ else
+ {
+ XXorRegion( pXRegA, pXRegB, pXRegA );
+ XDestroyRegion( pXRegB );
+ }
+ }
+ }
+
+ if( pXRegA )
+ {
+ XRectangle aXRect;
+ XClipBox( pXRegA, &aXRect );
+
+ GC pGC = SelectBrush();
+ SetClipRegion( pGC, pXRegA ); // ??? doppelt
+ XDestroyRegion( pXRegA );
+ bBrushGC_ = FALSE;
+
+ XFillRectangle( GetXDisplay(),
+ GetDrawable(),
+ pGC,
+ aXRect.x, aXRect.y, aXRect.width, aXRect.height );
+ }
+ }
+
+ if( nPenColor_ != SALCOLOR_NONE )
+ for( ULONG i = 0; i < nPoly; i++ )
+ drawPolyLine( pPoints[i], pPtAry[i], true );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+sal_Bool X11SalGraphics::drawPolyLineBezier( ULONG, const SalPoint*, const BYTE* )
+{
+ return sal_False;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+sal_Bool X11SalGraphics::drawPolygonBezier( ULONG, const SalPoint*, const BYTE* )
+{
+ return sal_False;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+sal_Bool X11SalGraphics::drawPolyPolygonBezier( sal_uInt32, const sal_uInt32*,
+ const SalPoint* const*, const BYTE* const* )
+{
+ return sal_False;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+void X11SalGraphics::invert( ULONG nPoints,
+ const SalPoint* pPtAry,
+ SalInvert nFlags )
+{
+ SalPolyLine Points ( nPoints, pPtAry );
+
+ GC pGC;
+ if( SAL_INVERT_50 & nFlags )
+ pGC = GetInvert50GC();
+ else
+ if ( SAL_INVERT_TRACKFRAME & nFlags )
+ pGC = GetTrackingGC();
+ else
+ pGC = GetInvertGC();
+
+ if( SAL_INVERT_TRACKFRAME & nFlags )
+ DrawLines ( nPoints, Points, pGC, true );
+ else
+ XFillPolygon( GetXDisplay(),
+ GetDrawable(),
+ pGC,
+ &Points[0], nPoints,
+ Complex, CoordModeOrigin );
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+BOOL X11SalGraphics::drawEPS( long,long,long,long,void*,ULONG )
+{
+ return FALSE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+XID X11SalGraphics::GetXRenderPicture()
+{
+ if( !m_aRenderPicture )
+ {
+ // check xrender support for matching visual
+ // find a XRenderPictFormat compatible with the Drawable
+ XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
+ XRenderPictFormat* pVisualFormat = static_cast<XRenderPictFormat*>(GetXRenderFormat());
+ if( !pVisualFormat )
+ {
+ Visual* pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual();
+ pVisualFormat = rRenderPeer.FindVisualFormat( pVisual );
+ if( !pVisualFormat )
+ return 0;
+ // cache the XRenderPictFormat
+ SetXRenderFormat( static_cast<void*>(pVisualFormat) );
+ }
+
+ // get the matching xrender target for drawable
+ m_aRenderPicture = rRenderPeer.CreatePicture( hDrawable_, pVisualFormat, 0, NULL );
+ }
+
+#if 0
+ // setup clipping so the callers don't have to do it themselves
+ // TODO: avoid clipping if already set correctly
+ if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) )
+ rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ );
+#endif
+
+ return m_aRenderPicture;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+SystemGraphicsData X11SalGraphics::GetGraphicsData() const
+{
+ SystemGraphicsData aRes;
+
+ aRes.nSize = sizeof(aRes);
+ aRes.pDisplay = GetXDisplay();
+ aRes.hDrawable = hDrawable_;
+ aRes.pVisual = GetDisplay()->GetVisual( m_nScreen ).GetVisual();
+ aRes.nScreen = m_nScreen;
+ aRes.nDepth = GetDisplay()->GetVisual( m_nScreen ).GetDepth();
+ aRes.aColormap = GetDisplay()->GetColormap( m_nScreen ).GetXColormap();
+ aRes.pRenderFormat = m_pRenderFormat;
+ return aRes;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+// B2DPolygon support methods
+
+namespace { // anonymous namespace to prevent export
+// the methods and structures here are used by the
+// B2DPolyPolygon->RenderTrapezoid conversion algorithm
+
+// compare two line segments
+// assumption: both segments point downward
+// assumption: they must have at least some y-overlap
+// assumption: rA.p1.y <= rB.p1.y
+bool IsLeftOf( const XLineFixed& rA, const XLineFixed& rB )
+{
+ bool bAbove = (rA.p1.y <= rB.p1.y);
+ const XLineFixed& rU = bAbove ? rA : rB;
+ const XLineFixed& rL = bAbove ? rB : rA;
+
+ const XFixed aXDiff = rU.p2.x - rU.p1.x;
+ const XFixed aYDiff = rU.p2.y - rU.p1.y;
+
+ if( (rU.p1.y != rL.p1.y) || (rU.p1.x != rL.p1.x) )
+ {
+ const sal_Int64 n1 = (sal_Int64)aXDiff * (rL.p1.y - rU.p1.y);
+ const sal_Int64 n2 = (sal_Int64)aYDiff * (rL.p1.x - rU.p1.x);
+ if( n1 != n2 )
+ return ((n1 < n2) == bAbove);
+ }
+
+ if( (rU.p2.y != rL.p2.y) || (rU.p2.x != rL.p2.x) )
+ {
+ const sal_Int64 n3 = (sal_Int64)aXDiff * (rL.p2.y - rU.p1.y);
+ const sal_Int64 n4 = (sal_Int64)aYDiff * (rL.p2.x - rU.p1.x);
+ if( n3 != n4 )
+ return ((n3 < n4) == bAbove);
+ }
+
+ // both segments overlap
+ return false;
+}
+
+struct HalfTrapezoid
+{
+ // assumptions:
+ // maLine.p1.y <= mnY < maLine.p2.y
+ XLineFixed maLine;
+ XFixed mnY;
+};
+
+struct HalfTrapCompare
+{
+ bool operator()( const HalfTrapezoid& rA, const HalfTrapezoid& rB ) const
+ {
+ bool bIsTopLeft = false;
+ if( rA.mnY != rB.mnY ) // sort top-first if possible
+ bIsTopLeft = (rA.mnY < rB.mnY);
+ else // else sort left-first
+ bIsTopLeft = IsLeftOf( rA.maLine, rB.maLine );
+ // adjust to priority_queue sorting convention
+ return !bIsTopLeft;
+ }
+};
+
+typedef std::priority_queue< HalfTrapezoid, std::vector<HalfTrapezoid>, HalfTrapCompare > HTQueueBase;
+// we need a priority queue with a reserve() to prevent countless reallocations
+class HTQueue
+: public HTQueueBase
+{
+public:
+ void reserve( size_t n ) { c.reserve( n ); }
+ int capacity() { return c.capacity(); }
+};
+
+typedef std::vector<XTrapezoid> TrapezoidVector;
+
+class TrapezoidXCompare
+{
+ const TrapezoidVector& mrVector;
+public:
+ TrapezoidXCompare( const TrapezoidVector& rVector )
+ : mrVector( rVector ) {}
+ bool operator()( int nA, int nB ) const
+ { return IsLeftOf( mrVector[nA].left, mrVector[nB].left ); }
+};
+
+typedef std::multiset< int, TrapezoidXCompare > ActiveTrapSet;
+
+class TrapezoidYCompare
+{
+ const TrapezoidVector& mrVector;
+public:
+ TrapezoidYCompare( const TrapezoidVector& rVector )
+ : mrVector( rVector ) {}
+ bool operator()( int nA, int nB ) const
+ { return (mrVector[nA].bottom < mrVector[nB].bottom); }
+};
+
+typedef std::multiset< int, TrapezoidYCompare > VerticalTrapSet;
+} // end of anonymous namespace
+
+// draw a poly-polygon
+bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency)
+{
+ // nothing to do for empty polypolygons
+ const int nPolygonCount = rPolyPoly.count();
+ if( nPolygonCount <= 0 )
+ return TRUE;
+
+ // nothing to do if everything is transparent
+ if( (nBrushColor_ == SALCOLOR_NONE)
+ && (nPenColor_ == SALCOLOR_NONE) )
+ return TRUE;
+
+ // cannot handle pencolor!=brushcolor yet
+ if( (nPenColor_ != SALCOLOR_NONE)
+ && (nPenColor_ != nBrushColor_) )
+ return FALSE;
+
+ // TODO: remove the env-variable when no longer needed
+ static const char* pRenderEnv = getenv( "SAL_DISABLE_RENDER_POLY" );
+ if( pRenderEnv )
+ return FALSE;
+
+ // check xrender support for trapezoids
+ XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
+ if( !rRenderPeer.AreTrapezoidsSupported() )
+ return FALSE;
+ Picture aDstPic = GetXRenderPicture();
+ // check xrender support for this drawable
+ if( !aDstPic )
+ return FALSE;
+
+ // don't bother with polygons outside of visible area
+ const basegfx::B2DRange aViewRange( 0, 0, GetGraphicsWidth(), GetGraphicsHeight() );
+ const basegfx::B2DRange aPolyRange = basegfx::tools::getRange( rPolyPoly );
+ const bool bNeedViewClip = !aPolyRange.isInside( aViewRange );
+ if( !aPolyRange.overlaps( aViewRange ) )
+ return true;
+
+ // convert the polypolygon to trapezoids
+
+ // first convert the B2DPolyPolygon to HalfTrapezoids
+ // #i100922# try to prevent priority-queue reallocations by reservering enough
+ int nHTQueueReserve = 0;
+ for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
+ {
+ const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
+ const int nPointCount = aOuterPolygon.count();
+ nHTQueueReserve += aOuterPolygon.areControlPointsUsed() ? 8 * nPointCount : nPointCount;
+ }
+ nHTQueueReserve = ((4*nHTQueueReserve) | 0x1FFF) + 1;
+ HTQueue aHTQueue;
+ aHTQueue.reserve( nHTQueueReserve );
+ for( int nOuterPolyIdx = 0; nOuterPolyIdx < nPolygonCount; ++nOuterPolyIdx )
+ {
+ const ::basegfx::B2DPolygon aOuterPolygon = rPolyPoly.getB2DPolygon( nOuterPolyIdx );
+
+ // render-trapezoids should be inside the view => clip polygon against view range
+ basegfx::B2DPolyPolygon aClippedPolygon( aOuterPolygon );
+ if( bNeedViewClip )
+ {
+ aClippedPolygon = basegfx::tools::clipPolygonOnRange( aOuterPolygon, aViewRange, true, false );
+ DBG_ASSERT( aClippedPolygon.count(), "polygon confirmed to overlap with view should not get here" );
+ if( !aClippedPolygon.count() )
+ continue;
+ }
+
+ // render-trapezoids have linear edges => get rid of bezier segments
+ if( aClippedPolygon.areControlPointsUsed() )
+ aClippedPolygon = ::basegfx::tools::adaptiveSubdivideByDistance( aClippedPolygon, 0.125 );
+
+ // test and remove self intersections
+ // TODO: make code intersection save, then remove this test
+ basegfx::B2DPolyPolygon aInnerPolyPoly(basegfx::tools::solveCrossovers( aClippedPolygon));
+ const int nInnerPolyCount = aInnerPolyPoly.count();
+ for( int nInnerPolyIdx = 0; nInnerPolyIdx < nInnerPolyCount; ++nInnerPolyIdx )
+ {
+ ::basegfx::B2DPolygon aInnerPolygon = aInnerPolyPoly.getB2DPolygon( nInnerPolyIdx );
+ const int nPointCount = aInnerPolygon.count();
+ if( !nPointCount )
+ continue;
+
+ aHTQueue.reserve( aHTQueue.size() + 8 * nPointCount );
+
+ // convert polygon point pairs to HalfTrapezoids
+ // connect the polygon point with the first one if needed
+ XPointFixed aOldXPF = { 0, 0 };
+ XPointFixed aNewXPF;
+ for( int nPointIdx = 0; nPointIdx <= nPointCount; ++nPointIdx, aOldXPF = aNewXPF )
+ {
+ const int k = (nPointIdx < nPointCount) ? nPointIdx : 0;
+ const ::basegfx::B2DPoint& aPoint = aInnerPolygon.getB2DPoint( k );
+
+ // convert the B2DPoint into XRENDER units
+ if(getAntiAliasB2DDraw())
+ {
+ aNewXPF.x = XDoubleToFixed( aPoint.getX() );
+ aNewXPF.y = XDoubleToFixed( aPoint.getY() );
+ }
+ else
+ {
+ aNewXPF.x = XDoubleToFixed( basegfx::fround( aPoint.getX() ) );
+ aNewXPF.y = XDoubleToFixed( basegfx::fround( aPoint.getY() ) );
+ }
+
+ // check if enough data is available for a new HalfTrapezoid
+ if( nPointIdx == 0 )
+ continue;
+ // ignore vertical segments
+ if( aNewXPF.y == aOldXPF.y )
+ continue;
+
+ // construct HalfTrapezoid as topdown segment
+ HalfTrapezoid aHT;
+ if( aNewXPF.y < aOldXPF.y )
+ {
+ aHT.maLine.p1 = aNewXPF;
+ aHT.maLine.p2 = aOldXPF;
+ }
+ else
+ {
+ aHT.maLine.p2 = aNewXPF;
+ aHT.maLine.p1 = aOldXPF;
+ }
+
+ aHT.mnY = aHT.maLine.p1.y;
+
+#if 0 // ignore clipped HalfTrapezoids
+ if( aHT.mnY < 0 )
+ aHT.mnY = 0;
+ else if( aHT.mnY > 10000 )
+ continue;
+#endif
+
+ // queue up the HalfTrapezoid
+ aHTQueue.push( aHT );
+ }
+ }
+ }
+
+ if( aHTQueue.empty() )
+ return TRUE;
+
+ // then convert the HalfTrapezoids into full Trapezoids
+ TrapezoidVector aTrapVector;
+ aTrapVector.reserve( aHTQueue.size() * 2 ); // just a guess
+
+ TrapezoidXCompare aTrapXCompare( aTrapVector );
+ ActiveTrapSet aActiveTraps( aTrapXCompare );
+
+ TrapezoidYCompare aTrapYCompare( aTrapVector );
+ VerticalTrapSet aVerticalTraps( aTrapYCompare );
+
+ while( !aHTQueue.empty() )
+ {
+ XTrapezoid aTrapezoid;
+
+ // convert a HalfTrapezoid pair
+ const HalfTrapezoid& rLeft = aHTQueue.top();
+ aTrapezoid.top = rLeft.mnY;
+ aTrapezoid.bottom = rLeft.maLine.p2.y;
+ aTrapezoid.left = rLeft.maLine;
+
+#if 0
+ // ignore empty trapezoids
+ if( aTrapezoid.bottom <= aTrapezoid.top )
+ continue;
+#endif
+
+ aHTQueue.pop();
+ if( aHTQueue.empty() ) // TODO: assert
+ break;
+ const HalfTrapezoid& rRight = aHTQueue.top();
+ aTrapezoid.right = rRight.maLine;
+ aHTQueue.pop();
+
+ aTrapezoid.bottom = aTrapezoid.left.p2.y;
+ if( aTrapezoid.bottom > aTrapezoid.right.p2.y )
+ aTrapezoid.bottom = aTrapezoid.right.p2.y;
+
+ // keep the full Trapezoid candidate
+ aTrapVector.push_back( aTrapezoid );
+
+ // unless it splits an older trapezoid
+ bool bSplit = false;
+ for(;;)
+ {
+ // check if the new trapezoid overlaps with an old trapezoid
+ ActiveTrapSet::iterator aActiveTrapsIt
+ = aActiveTraps.upper_bound( aTrapVector.size()-1 );
+ if( aActiveTrapsIt == aActiveTraps.begin() )
+ break;
+ --aActiveTrapsIt;
+
+ XTrapezoid& rLeftTrap = aTrapVector[ *aActiveTrapsIt ];
+
+ // in the ActiveTrapSet there are still trapezoids where
+ // a vertical overlap with new trapezoids is no longer possible
+ // they could have been removed in the verticaltraps loop below
+ // but this would have been expensive and is not needed as we can
+ // simply ignore them now and remove them from the ActiveTrapSet
+ // so they won't bother us in the future
+ if( rLeftTrap.bottom <= aTrapezoid.top )
+ {
+ aActiveTraps.erase( aActiveTrapsIt );
+ continue;
+ }
+
+ // check if there is horizontal overlap
+ // aTrapezoid.left==rLeftTrap.right is allowed though
+ if( !IsLeftOf( aTrapezoid.left, rLeftTrap.right ) )
+ break;
+
+ // split the old trapezoid and keep its upper part
+ // find the old trapezoids entry in the VerticalTrapSet and remove it
+ typedef std::pair<VerticalTrapSet::iterator, VerticalTrapSet::iterator> VTSPair;
+ VTSPair aVTSPair = aVerticalTraps.equal_range( *aActiveTrapsIt );
+ VerticalTrapSet::iterator aVTSit = aVTSPair.first;
+ for(; (aVTSit != aVTSPair.second) && (*aVTSit != *aActiveTrapsIt); ++aVTSit ) ;
+ if( aVTSit != aVTSPair.second )
+ aVerticalTraps.erase( aVTSit );
+ // then update the old trapezoid's bottom
+ rLeftTrap.bottom = aTrapezoid.top;
+ // enter the updated old trapzoid in VerticalTrapSet
+ aVerticalTraps.insert( aVerticalTraps.begin(), *aActiveTrapsIt );
+ // the old trapezoid is no longer active
+ aActiveTraps.erase( aActiveTrapsIt );
+
+ // the trapezoid causing the split has become obsolete
+ // so its both sides have to be re-queued
+ HalfTrapezoid aHT;
+ aHT.mnY = aTrapezoid.top;
+ aHT.maLine = aTrapezoid.left;
+ aHTQueue.push( aHT );
+ aHT.maLine = aTrapezoid.right;
+ aHTQueue.push( aHT );
+
+ bSplit = true;
+ break;
+ }
+
+ // keep or forget the resulting full Trapezoid
+ if( bSplit )
+ aTrapVector.pop_back();
+ else
+ {
+ aActiveTraps.insert( aTrapVector.size()-1 );
+ aVerticalTraps.insert( aTrapVector.size()-1 );
+ }
+
+ // mark trapezoids that can no longer be split as inactive
+ // and recycle their sides which were not fully resolved
+ static const XFixed nMaxTop = +0x7FFFFFFF;
+ XFixed nNewTop = aHTQueue.empty() ? nMaxTop : aHTQueue.top().mnY;
+ while( !aVerticalTraps.empty() )
+ {
+ const XTrapezoid& rOldTrap = aTrapVector[ *aVerticalTraps.begin() ];
+ if( nNewTop < rOldTrap.bottom )
+ break;
+ // the reference Trapezoid can no longer be split
+ aVerticalTraps.erase( aVerticalTraps.begin() );
+
+ // recycle its sides that were not fully resolved
+ HalfTrapezoid aHT;
+ aHT.mnY = rOldTrap.bottom;
+ if( rOldTrap.left.p2.y > rOldTrap.bottom )
+ {
+ aHT.maLine = rOldTrap.left;
+ aHTQueue.push( aHT );
+ }
+ if( rOldTrap.right.p2.y > rOldTrap.bottom )
+ {
+ aHT.maLine = rOldTrap.right;
+ aHTQueue.push( aHT );
+ }
+ }
+ }
+
+ // create xrender Picture for polygon foreground
+ SalDisplay::RenderEntry& rEntry = GetDisplay()->GetRenderEntries( m_nScreen )[ 32 ];
+ if( !rEntry.m_aPicture )
+ {
+ Display* pXDisplay = GetXDisplay();
+
+ rEntry.m_aPixmap = ::XCreatePixmap( pXDisplay, hDrawable_, 1, 1, 32 );
+ XRenderPictureAttributes aAttr;
+ aAttr.repeat = true;
+
+ XRenderPictFormat* pXRPF = rRenderPeer.FindStandardFormat( PictStandardARGB32 );
+ rEntry.m_aPicture = rRenderPeer.CreatePicture( rEntry.m_aPixmap, pXRPF, CPRepeat, &aAttr );
+ }
+
+ // set polygon foreground color and opacity
+ XRenderColor aRenderColor = GetXRenderColor( nBrushColor_ , fTransparency );
+ rRenderPeer.FillRectangle( PictOpSrc, rEntry.m_aPicture, &aRenderColor, 0, 0, 1, 1 );
+
+ // set clipping
+ // TODO: move into GetXRenderPicture?
+ if( pClipRegion_ && !XEmptyRegion( pClipRegion_ ) )
+ rRenderPeer.SetPictureClipRegion( aDstPic, pClipRegion_ );
+
+ // render the trapezoids
+ const XRenderPictFormat* pMaskFormat = rRenderPeer.GetStandardFormatA8();
+ rRenderPeer.CompositeTrapezoids( PictOpOver,
+ rEntry.m_aPicture, aDstPic, pMaskFormat, 0, 0, &aTrapVector[0], aTrapVector.size() );
+
+ return TRUE;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin)
+{
+ // #i101491#
+ if(rPolygon.count() > 1000)
+ {
+ // the used basegfx::tools::createAreaGeometry is simply too
+ // expensive with very big polygons; fallback to caller (who
+ // should use ImplLineConverter normally)
+ return false;
+ }
+ const XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
+ if( !rRenderPeer.AreTrapezoidsSupported() )
+ return false;
+
+ // get the area polygon for the line polygon
+ basegfx::B2DPolygon aPolygon = rPolygon;
+ if( (rLineWidth.getX() != rLineWidth.getY())
+ && !basegfx::fTools::equalZero( rLineWidth.getY() ) )
+ {
+ // prepare for createAreaGeometry() with anisotropic linewidth
+ basegfx::B2DHomMatrix aAnisoMatrix;
+ aAnisoMatrix.scale( 1.0, rLineWidth.getX() / rLineWidth.getY() );
+ aPolygon.transform( aAnisoMatrix );
+ }
+
+ // AW: reSegment no longer needed; new createAreaGeometry will remove exteme positions
+ // and create bezier polygons
+ //if( aPolygon.areControlPointsUsed() )
+ // aPolygon = basegfx::tools::reSegmentPolygonEdges( aPolygon, 8, true, false );
+ //const basegfx::B2DPolyPolygon aAreaPolyPoly = basegfx::tools::createAreaGeometryForSimplePolygon(
+ // aPolygon, 0.5*rLineWidth.getX(), eLineJoin );
+ const basegfx::B2DPolyPolygon aAreaPolyPoly(basegfx::tools::createAreaGeometry(aPolygon, 0.5*rLineWidth.getX(), eLineJoin));
+
+ if( (rLineWidth.getX() != rLineWidth.getY())
+ && !basegfx::fTools::equalZero( rLineWidth.getX() ) )
+ {
+ // postprocess createAreaGeometry() for anisotropic linewidth
+ basegfx::B2DHomMatrix aAnisoMatrix;
+ aAnisoMatrix.scale( 1.0, rLineWidth.getY() / rLineWidth.getX() );
+ aPolygon.transform( aAnisoMatrix );
+ }
+
+ // temporarily adjust brush color to pen color
+ // since the line is drawn as an area-polygon
+ const SalColor aKeepBrushColor = nBrushColor_;
+ nBrushColor_ = nPenColor_;
+
+ // draw each area polypolygon component individually
+ // to emulate the polypolygon winding rule "non-zero"
+ bool bDrawOk = true;
+ const int nPolyCount = aAreaPolyPoly.count();
+ for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx )
+ {
+ const ::basegfx::B2DPolyPolygon aOnePoly( aAreaPolyPoly.getB2DPolygon( nPolyIdx ) );
+ bDrawOk = drawPolyPolygon( aOnePoly, 0.0);
+ if( !bDrawOk )
+ break;
+ }
+
+ // restore the original brush GC
+ nBrushColor_ = aKeepBrushColor;
+ return bDrawOk;
+}
+
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
diff --git a/vcl/unx/source/gdi/salgdi3.cxx b/vcl/unx/source/gdi/salgdi3.cxx
index d1a60cda4097..5d6cd464376a 100644
--- a/vcl/unx/source/gdi/salgdi3.cxx
+++ b/vcl/unx/source/gdi/salgdi3.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi3.cxx,v $
- * $Revision: 1.157.12.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -82,6 +79,11 @@
#include <hash_set>
+#ifdef ENABLE_GRAPHITE
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_serverfont.hxx>
+#endif
+
struct cairo_surface_t;
struct cairo_t;
struct cairo_font_face_t;
@@ -1450,21 +1452,17 @@ void X11SalGraphics::DrawStringUCS2MB( ExtendedFontStruct& rFont,
ImplFontCharMap* X11SalGraphics::GetImplFontCharMap() const
{
// TODO: get ImplFontCharMap directly from fonts
- int nPairCount = 0;
- if( mpServerFont[0] )
- nPairCount = mpServerFont[0]->GetFontCodeRanges( NULL );
- else if( mXFont[0] )
- nPairCount = mXFont[0]->GetFontCodeRanges( NULL );
-
- if( !nPairCount )
+ if( !mpServerFont[0] )
+#if 0 // RIP XLFD fonts
+ if( mXFont[0] )
+ // TODO?: nPairCount = mXFont[0]->GetFontCodeRanges( NULL );
+#endif
return NULL;
- sal_uInt32* pCodePairs = new sal_uInt32[ 2 * nPairCount ];
- if( mpServerFont[0] )
- mpServerFont[0]->GetFontCodeRanges( pCodePairs );
- else if( mXFont[0] )
- mXFont[0]->GetFontCodeRanges( pCodePairs );
- return new ImplFontCharMap( nPairCount, pCodePairs );
+ CmapResult aCmapResult;
+ if( !mpServerFont[0]->GetFontCodeRanges( aCmapResult ) )
+ return NULL;
+ return new ImplFontCharMap( aCmapResult );
}
// ----------------------------------------------------------------------------
@@ -1681,11 +1679,29 @@ BOOL X11SalGraphics::GetGlyphOutline( long nGlyphIndex,
SalLayout* X11SalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel )
{
- GenericSalLayout* pLayout = NULL;
+ SalLayout* pLayout = NULL;
if( mpServerFont[ nFallbackLevel ]
&& !(rArgs.mnFlags & SAL_LAYOUT_DISABLE_GLYPH_PROCESSING) )
- pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] );
+ {
+#ifdef ENABLE_GRAPHITE
+ // Is this a Graphite font?
+ if (!bDisableGraphite_ &&
+ GraphiteFontAdaptor::IsGraphiteEnabledFont(*mpServerFont[nFallbackLevel]))
+ {
+ sal_Int32 xdpi, ydpi;
+
+ xdpi = GetDisplay()->GetResolution().A();
+ ydpi = GetDisplay()->GetResolution().B();
+
+ GraphiteFontAdaptor * pGrfont = new GraphiteFontAdaptor( *mpServerFont[nFallbackLevel], xdpi, ydpi);
+ if (!pGrfont) return NULL;
+ pLayout = new GraphiteServerFontLayout(pGrfont);
+ }
+ else
+#endif
+ pLayout = new ServerFontLayout( *mpServerFont[ nFallbackLevel ] );
+ }
else if( mXFont[ nFallbackLevel ] )
pLayout = new X11FontLayout( *mXFont[ nFallbackLevel ] );
else
@@ -1727,21 +1743,26 @@ BOOL X11SalGraphics::CreateFontSubset(
sal_Int32* pGlyphIDs,
sal_uInt8* pEncoding,
sal_Int32* pWidths,
- int nGlyphs,
+ int nGlyphCount,
FontSubsetInfo& rInfo
)
{
-#ifndef _USE_PRINT_EXTENSION_
// in this context the pFont->GetFontId() is a valid PSP
// font since they are the only ones left after the PDF
// export has filtered its list of subsettable fonts (for
// which this method was created). The correct way would
// be to have the GlyphCache search for the ImplFontData pFont
psp::fontID aFont = pFont->GetFontId();
- return PspGraphics::DoCreateFontSubset( rToFile, aFont, pGlyphIDs, pEncoding, pWidths, nGlyphs, rInfo );
-#else
- return FALSE;
-#endif
+
+ psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
+ bool bSuccess = rMgr.createFontSubset( rInfo,
+ aFont,
+ rToFile,
+ pGlyphIDs,
+ pEncoding,
+ pWidths,
+ nGlyphCount );
+ return bSuccess;
}
//--------------------------------------------------------------------------
diff --git a/vcl/unx/source/plugadapt/salplug.cxx b/vcl/unx/source/plugadapt/salplug.cxx
index 0c791ca8091f..8a1ed05b8e25 100644
--- a/vcl/unx/source/plugadapt/salplug.cxx
+++ b/vcl/unx/source/plugadapt/salplug.cxx
@@ -55,13 +55,16 @@ typedef SalInstance*(*salFactoryProc)( oslModule pModule);
static oslModule pCloseModule = NULL;
-#define DESKTOP_NONE 0
-#define DESKTOP_UNKNOWN 1
-#define DESKTOP_GNOME 2
-#define DESKTOP_KDE 3
-#define DESKTOP_CDE 4
+enum {
+ DESKTOP_NONE = 0,
+ DESKTOP_UNKNOWN,
+ DESKTOP_GNOME,
+ DESKTOP_KDE,
+ DESKTOP_KDE4,
+ DESKTOP_CDE
+};
-static const char * desktop_strings[5] = { "none", "unknown", "GNOME", "KDE", "CDE" };
+static const char * desktop_strings[] = { "none", "unknown", "GNOME", "KDE", "KDE4", "CDE" };
static SalInstance* tryInstance( const OUString& rModuleBase )
{
@@ -225,15 +228,18 @@ extern "C"
typedef int(* XErrorHandler)(Display*,XErrorEvent*);
}
-static OUString getNetWMName( Display* pDisplay )
+static int KDEVersion( Display* pDisplay )
{
- OUString aRet;
+ int nRet = 0;
- Atom nWmCheck = XInternAtom( pDisplay, "_NET_SUPPORTING_WM_CHECK", True );
- Atom nWmName = XInternAtom( pDisplay, "_NET_WM_NAME", True );
- if( nWmName && nWmCheck )
+ Atom nFullSession = XInternAtom( pDisplay, "KDE_FULL_SESSION", True );
+ Atom nKDEVersion = XInternAtom( pDisplay, "KDE_SESSION_VERSION", True );
+
+ if( nFullSession )
{
- XLIB_Window aCheckWin = None;
+ if( !nKDEVersion )
+ return 3;
+
Atom aRealType = None;
int nFormat = 8;
unsigned long nItems = 0;
@@ -241,86 +247,63 @@ static OUString getNetWMName( Display* pDisplay )
unsigned char* pProperty = NULL;
XGetWindowProperty( pDisplay,
DefaultRootWindow( pDisplay ),
- nWmCheck,
+ nKDEVersion,
0, 1,
False,
- XA_WINDOW,
+ AnyPropertyType,
&aRealType,
&nFormat,
&nItems,
&nBytesLeft,
&pProperty );
- if( aRealType == XA_WINDOW && nFormat == 32 && nItems != 0 )
- aCheckWin = *(XLIB_Window*)pProperty;
+ if( !WasXError() && nItems != 0 && pProperty )
+ {
+ nRet = *reinterpret_cast< sal_Int32* >( pProperty );
+ }
if( pProperty )
{
XFree( pProperty );
pProperty = NULL;
}
+ }
+ return nRet;
+}
- // see if that window really exists and has the check property set
- if( aCheckWin != None )
+static bool is_kde_desktop( Display* pDisplay )
+{
+ if ( NULL != getenv( "KDE_FULL_SESSION" ) )
+ {
+ const char *pVer = getenv( "KDE_SESSION_VERSION" );
+ if ( !pVer || pVer[0] == '0' )
{
- // clear error flag
- WasXError();
- // get the property
- XGetWindowProperty( pDisplay,
- aCheckWin,
- nWmCheck,
- 0, 1,
- False,
- XA_WINDOW,
- &aRealType,
- &nFormat,
- &nItems,
- &nBytesLeft,
- &pProperty );
- if( ! WasXError() && aRealType == XA_WINDOW && nFormat == 32 && nItems != 0 && pProperty )
- {
- if( aCheckWin == *(XLIB_Window*)pProperty )
- {
- XFree( pProperty );
- pProperty = NULL;
- XGetWindowProperty( pDisplay,
- aCheckWin,
- nWmName,
- 0, 256,
- False,
- AnyPropertyType,
- &aRealType,
- &nFormat,
- &nItems,
- &nBytesLeft,
- &pProperty );
- if( !WasXError() && nItems != 0 && pProperty && *pProperty )
- {
- if( aRealType == XA_STRING ) // some WM's use this although the should use UTF8_STRING
- {
- aRet = rtl::OStringToOUString( rtl::OString( (sal_Char*)pProperty ), RTL_TEXTENCODING_ISO_8859_1 );
- }
- else
- aRet = rtl::OStringToOUString( rtl::OString( (sal_Char*)pProperty ), RTL_TEXTENCODING_UTF8 );
- }
- }
- }
- if( pProperty )
- {
- XFree( pProperty );
- pProperty = NULL;
- }
+ return true; // does not exist => KDE3
+ }
+
+ rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "3" ) );
+ if ( aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
+ {
+ return true;
}
}
- return aRet;
+
+ if ( KDEVersion( pDisplay ) == 3 )
+ return true;
+
+ return false;
}
-static bool is_kde_desktop( Display* pDisplay )
+static bool is_kde4_desktop( Display* pDisplay )
{
if ( NULL != getenv( "KDE_FULL_SESSION" ) )
- return true;
+ {
+ rtl::OUString aVer( RTL_CONSTASCII_USTRINGPARAM( "4" ) );
+
+ const char *pVer = getenv( "KDE_SESSION_VERSION" );
+ if ( pVer && aVer.equalsIgnoreAsciiCaseAscii( pVer ) )
+ return true;
+ }
- // check for kwin
- rtl::OUString aWM = getNetWMName( pDisplay );
- if( aWM.equalsIgnoreAsciiCaseAscii( "KWin" ) )
+ if ( KDEVersion( pDisplay ) == 4 )
return true;
return false;
@@ -355,6 +338,8 @@ static const char * get_desktop_environment()
pRet = desktop_strings[DESKTOP_CDE];
if ( aOver.equalsIgnoreAsciiCase( "kde" ) )
pRet = desktop_strings[DESKTOP_KDE];
+ if ( aOver.equalsIgnoreAsciiCase( "kde4" ) )
+ pRet = desktop_strings[DESKTOP_KDE4];
if ( aOver.equalsIgnoreAsciiCase( "gnome" ) )
pRet = desktop_strings[DESKTOP_GNOME];
if ( aOver.equalsIgnoreAsciiCase( "none" ) )
@@ -395,7 +380,9 @@ static const char * get_desktop_environment()
{
XErrorHandler pOldHdl = XSetErrorHandler( autodect_error_handler );
- if ( is_kde_desktop( pDisplay ) )
+ if ( is_kde4_desktop( pDisplay ) )
+ pRet = desktop_strings[DESKTOP_KDE4];
+ else if ( is_kde_desktop( pDisplay ) )
pRet = desktop_strings[DESKTOP_KDE];
else if ( is_gnome_desktop( pDisplay ) )
pRet = desktop_strings[DESKTOP_GNOME];
@@ -428,6 +415,8 @@ static const char* autodetect_plugin()
pRet = "gtk";
else if( desktop == desktop_strings[DESKTOP_KDE] )
pRet = "kde";
+ else if( desktop == desktop_strings[DESKTOP_KDE4] )
+ pRet = "kde4";
else
{
// #i95296# use the much nicer looking gtk plugin
diff --git a/vcl/unx/source/printergfx/glyphset.cxx b/vcl/unx/source/printergfx/glyphset.cxx
index 2a35e975cbab..156517d98220 100644
--- a/vcl/unx/source/printergfx/glyphset.cxx
+++ b/vcl/unx/source/printergfx/glyphset.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: glyphset.cxx,v $
- * $Revision: 1.24 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -38,6 +35,7 @@
#include "vcl/printergfx.hxx"
#include "vcl/fontmanager.hxx"
+#include "vcl/fontsubset.hxx"
#include "osl/thread.h"
@@ -787,8 +785,32 @@ GlyphSet::PSUploadEncoding(osl::File* pOutFile, PrinterGfx &rGfx)
return sal_True;
}
+static void CreatePSUploadableFont( TrueTypeFont* pSrcFont, FILE* pTmpFile,
+ const char* pGlyphSetName, int nGlyphCount,
+ /*const*/ sal_uInt16* pRequestedGlyphs, /*const*/ sal_uChar* pEncoding,
+ bool bAllowType42, bool /*bAllowCID*/ )
+{
+ // match the font-subset to the printer capabilities
+ // TODO: allow CFF for capable printers
+ int nTargetMask = FontSubsetInfo::TYPE1_PFA | FontSubsetInfo::TYPE3_FONT;
+ if( bAllowType42 )
+ nTargetMask |= FontSubsetInfo::TYPE42_FONT;
+
+ FontSubsetInfo aInfo;
+ aInfo.LoadFont( pSrcFont );
+
+#if 1 // TODO: remove 16bit->long conversion when input args has been changed
+ long aRequestedGlyphs[256];
+ for( int i = 0; i < nGlyphCount; ++i )
+ aRequestedGlyphs[i] = pRequestedGlyphs[i];
+#endif
+
+ aInfo.CreateFontSubset( nTargetMask, pTmpFile, pGlyphSetName,
+ aRequestedGlyphs, pEncoding, nGlyphCount, NULL );
+}
+
sal_Bool
-GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, std::list< OString >& rSuppliedFonts )
+GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAllowType42, std::list< OString >& rSuppliedFonts )
{
// only for truetype fonts
if (meBaseType != fonttype::TrueType)
@@ -811,6 +833,7 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// of the glyph in the output file
sal_uChar pEncoding[256];
sal_uInt16 pTTGlyphMapping[256];
+ const bool bAllowCID = false; // TODO: nPSLanguageLevel>=3
// loop thru all the font subsets
sal_Int32 nCharSetID;
@@ -838,13 +861,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// create the current subset
OString aCharSetName = GetCharSetName(nCharSetID);
fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aCharSetName.getStr() );
- if( bAsType42 )
- CreateT42FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aCharSet).size() );
- else
- CreateT3FromTTGlyphs (pTTFont, pTmpFile, aCharSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aCharSet).size(),
- 0 /* 0 = horizontal, 1 = vertical */ );
+ CreatePSUploadableFont( pTTFont, pTmpFile, aCharSetName.getStr(), (*aCharSet).size(),
+ pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID );
fprintf( pTmpFile, "%%%%EndResource\n" );
rSuppliedFonts.push_back( aCharSetName );
}
@@ -872,13 +890,8 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
// create the current subset
OString aGlyphSetName = GetGlyphSetName(nGlyphSetID);
fprintf( pTmpFile, "%%%%BeginResource: font %s\n", aGlyphSetName.getStr() );
- if( bAsType42 )
- CreateT42FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aGlyphSet).size() );
- else
- CreateT3FromTTGlyphs (pTTFont, pTmpFile, aGlyphSetName.getStr(),
- pTTGlyphMapping, pEncoding, (*aGlyphSet).size(),
- 0 /* 0 = horizontal, 1 = vertical */ );
+ CreatePSUploadableFont( pTTFont, pTmpFile, aGlyphSetName.getStr(), (*aGlyphSet).size(),
+ pTTGlyphMapping, pEncoding, bAllowType42, bAllowCID );
fprintf( pTmpFile, "%%%%EndResource\n" );
rSuppliedFonts.push_back( aGlyphSetName );
}
@@ -903,5 +916,3 @@ GlyphSet::PSUploadFont (osl::File& rOutFile, PrinterGfx &rGfx, bool bAsType42, s
return sal_True;
}
-
-
diff --git a/vcl/unx/source/printergfx/text_gfx.cxx b/vcl/unx/source/printergfx/text_gfx.cxx
index e9c173682f87..00e3ab5f44c2 100644
--- a/vcl/unx/source/printergfx/text_gfx.cxx
+++ b/vcl/unx/source/printergfx/text_gfx.cxx
@@ -199,7 +199,7 @@ void PrinterGfx::drawGlyphs(
void PrinterGfx::DrawGlyphs(
const Point& rPoint,
- sal_uInt32* pGlyphIds,
+ sal_GlyphId* pGlyphIds,
sal_Unicode* pUnicodes,
sal_Int16 nLen,
sal_Int32* pDeltaArray
@@ -256,8 +256,8 @@ void PrinterGfx::DrawGlyphs(
for( sal_Int16 i = 0; i < nLen; i++ )
{
- sal_Int32 nRot = ((pGlyphIds[i] >> 24) & 3);
- if( nRot == 0 )
+ const sal_GlyphId nRot = pGlyphIds[i] & GF_ROTMASK;
+ if( nRot == GF_NONE )
{
pTempUnicodes[nTempLen] = pUnicodes[i];
pTempGlyphIds[nTempLen] = pGlyphIds[i];
@@ -282,20 +282,20 @@ void PrinterGfx::DrawGlyphs(
sal_Int32 nRotAngle = 0;
switch( nRot )
{
- case 3:
+ case GF_ROTR:
nRotAngle = 2700;
aRotPoint = Point( -nAscend*nTextWidth/nTextHeight, -nDescend*nTextWidth/nTextHeight - nOffset );
break;
- case 2:
+ case GF_VERT:
nRotAngle = 1800;
aRotPoint = Point( -nOffset, (nAscend+nDescend) );
break;
- case 1:
+ case GF_ROTL:
nRotAngle = 900;
aRotPoint = Point( -nDescend*nTextWidth/nTextHeight, nOffset + nAscend*nTextWidth/nTextHeight );
break;
}
- sal_uInt32 nRotGlyphId = pGlyphIds[i];
+ sal_GlyphId nRotGlyphId = pGlyphIds[i];
sal_Unicode nRotUnicode = pUnicodes[i];
sal_Int32 nRotDelta = 0;
diff --git a/vcl/unx/source/window/salframe.cxx b/vcl/unx/source/window/salframe.cxx
index 22e43999caa6..04eb9cd32771 100644
--- a/vcl/unx/source/window/salframe.cxx
+++ b/vcl/unx/source/window/salframe.cxx
@@ -72,6 +72,7 @@
#include "tools/debug.hxx"
#include "sal/alloca.h"
+#include <com/sun/star/uno/Exception.hpp>
#include <algorithm>
@@ -425,15 +426,26 @@ void X11SalFrame::Init( ULONG nSalFrameStyle, int nScreen, SystemParentData* pPa
if( IsOverrideRedirect() )
Attributes.override_redirect = True;
// default icon
- if( (nStyle_ & SAL_FRAME_STYLE_INTRO) == 0 &&
- SelectAppIconPixmap( pDisplay_, m_nScreen,
- mnIconID != 1 ? mnIconID :
- (mpParent ? mpParent->mnIconID : 1), 32,
- Hints.icon_pixmap, Hints.icon_mask ))
+ if( (nStyle_ & SAL_FRAME_STYLE_INTRO) == 0 )
{
- Hints.flags |= IconPixmapHint;
- if( Hints.icon_mask )
- Hints.flags |= IconMaskHint;
+ bool bOk=false;
+ try
+ {
+ bOk=SelectAppIconPixmap( pDisplay_, m_nScreen,
+ mnIconID != 1 ? mnIconID :
+ (mpParent ? mpParent->mnIconID : 1), 32,
+ Hints.icon_pixmap, Hints.icon_mask );
+ }
+ catch( com::sun::star::uno::Exception& )
+ {
+ // can happen - no ucb during early startup
+ }
+ if( bOk )
+ {
+ Hints.flags |= IconPixmapHint;
+ if( Hints.icon_mask )
+ Hints.flags |= IconMaskHint;
+ }
}
// find the top level frame of the transience hierarchy
diff --git a/vcl/util/makefile.mk b/vcl/util/makefile.mk
index 96c28980118f..5bb18f25ecd3 100644
--- a/vcl/util/makefile.mk
+++ b/vcl/util/makefile.mk
@@ -6,10 +6,6 @@
#
# OpenOffice.org - a multi-platform office productivity suite
#
-# $RCSfile: makefile.mk,v $
-#
-# $Revision: 1.111.36.3 $
-#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
@@ -184,6 +180,16 @@ SHL1STDLIBS+=\
$(ICUDATALIB) \
$(ICULELIB) \
$(JVMACCESSLIB)
+
+.IF "$(GUI)" == "UNX"
+.IF "$(ENABLE_GRAPHITE)" != ""
+.IF "$(SYSTEM_GRAPHITE)" == "YES"
+SHL1STDLIBS+= $(GRAPHITE_LIBS)
+.ELSE
+SHL1STDLIBS+= $(SOLARVERSION)/$(INPATH)/lib$(UPDMINOREXT)/libgraphite.a
+.ENDIF
+.ENDIF
+.ENDIF
SHL1USE_EXPORTS=name
.IF "$(GUIBASE)"=="aqua"
@@ -198,12 +204,16 @@ LIB1FILES+= \
.IF "$(USE_BUILTIN_RASTERIZER)"!=""
LIB1FILES += $(SLB)$/glyphs.lib
SHL1STDLIBS+= $(FREETYPELIB)
+.ELSE
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+ LIB1FILES += $(SLB)$/glyphs.lib
+.ENDIF
.ENDIF # USE_BUILTIN_RASTERIZER
SHL1LIBS= $(LIB1TARGET)
.IF "$(GUI)"!="UNX"
.IF "$(COM)"!="GCC"
-SHL1OBJS= $(SLO)$/salshl.obj
+#SHL1OBJS= $(SLO)$/salshl.obj
.ENDIF
.ENDIF
@@ -223,6 +233,14 @@ DEFLIB1NAME =vcl
.IF "$(GUI)" == "WNT"
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+.IF "$(COM)" == "GCC"
+SHL1STDLIBS += -lgraphite
+.ELSE
+SHL1STDLIBS += graphite_dll.lib
+.ENDIF
+.ENDIF
+
SHL1STDLIBS += $(UWINAPILIB) \
$(GDI32LIB) \
$(GDIPLUSLIB) \
@@ -296,7 +314,7 @@ SHL2STDLIBS+=`pkg-config --libs xrender`
.IF "$(GUIBASE)"=="unx"
SHL2STDLIBS += -lXext -lSM -lICE -lX11
-.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD"
+.IF "$(OS)"!="MACOSX" && "$(OS)"!="FREEBSD" && "$(OS)"!="NETBSD"
# needed by salprnpsp.cxx
SHL2STDLIBS+= -ldl
.ENDIF
@@ -366,7 +384,7 @@ SHL5IMPLIB=ikde_plug_
SHL5LIBS=$(LIB5TARGET)
SHL5DEPN=$(SHL2TARGETN)
# libs for KDE plugin
-SHL5STDLIBS=$(KDE_LIBS)
+SHL5LINKFLAGS+=$(KDE_LIBS)
SHL5STDLIBS+=-l$(SHL2TARGET)
SHL5STDLIBS+=\
$(VCLLIB) \
@@ -382,6 +400,35 @@ SHL5STDLIBS+= $(XRANDR_LIBS)
.ENDIF # "$(ENABLE_KDE)" != ""
+# KDE4 plugin
+.IF "$(ENABLE_KDE4)" != ""
+.IF "$(KDE4_ROOT)"!=""
+EXTRALIBPATHS+=-L$(KDE4_ROOT)$/lib
+.ENDIF
+LIB6TARGET=$(SLB)$/ikde4_plug_
+LIB6FILES=$(SLB)$/kde4plug.lib
+SHL6TARGET=vclplug_kde4$(DLLPOSTFIX)
+SHL6IMPLIB=ikde4_plug_
+SHL6LIBS=$(LIB6TARGET)
+SHL6DEPN=$(SHL2TARGETN)
+# libs for KDE4 plugin
+SHL6LINKFLAGS+=$(KDE4_LIBS)
+SHL6STDLIBS+=-l$(SHL2TARGET)
+SHL6STDLIBS+=\
+ $(VCLLIB) \
+ $(PSPLIB) \
+ $(TOOLSLIB) \
+ $(VOSLIB) \
+ $(SALLIB)
+
+.IF "$(ENABLE_RANDR)" != ""
+.IF "$(XRANDR_DLOPEN)" == "FALSE"
+SHL6STDLIBS+= $(XRANDR_LIBS)
+.ENDIF
+.ENDIF
+
+.ENDIF # "$(ENABLE_KDE4)" != ""
+
.ENDIF # UNX
# --- Allgemein ----------------------------------------------------------
diff --git a/vcl/win/inc/salgdi.h b/vcl/win/inc/salgdi.h
index 0475ea4a193e..c7ceb68199b9 100644
--- a/vcl/win/inc/salgdi.h
+++ b/vcl/win/inc/salgdi.h
@@ -81,6 +81,9 @@ public:
bool SupportsArabic() const { return mbHasArabicSupport; }
bool AliasSymbolsHigh() const { return mbAliasSymbolsHigh; }
bool AliasSymbolsLow() const { return mbAliasSymbolsLow; }
+#ifdef ENABLE_GRAPHITE
+ bool SupportsGraphite() const { return mbHasGraphiteSupport; }
+#endif
ImplFontCharMap* GetImplFontCharMap() const;
const Ucs2SIntMap* GetEncodingVector() const { return mpEncodingVector; }
@@ -97,6 +100,9 @@ private:
mutable bool mbDisableGlyphApi;
mutable bool mbHasKoreanRange;
mutable bool mbHasCJKSupport;
+#ifdef ENABLE_GRAPHITE
+ mutable bool mbHasGraphiteSupport;
+#endif
mutable bool mbHasArabicSupport;
mutable ImplFontCharMap* mpUnicodeMap;
mutable const Ucs2SIntMap* mpEncodingVector;
diff --git a/vcl/win/source/gdi/MAKEFILE.MK b/vcl/win/source/gdi/MAKEFILE.MK
index a6d84d41f3ea..3d8fd904b35b 100644
--- a/vcl/win/source/gdi/MAKEFILE.MK
+++ b/vcl/win/source/gdi/MAKEFILE.MK
@@ -64,6 +64,10 @@ SLOFILES= $(SLO)$/salgdi.obj \
EXCEPTIONSFILES= $(SLO)$/salprn.obj
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx
index 99f276faa964..73f4d8320acc 100644
--- a/vcl/win/source/gdi/salgdi3.cxx
+++ b/vcl/win/source/gdi/salgdi3.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salgdi3.cxx,v $
- * $Revision: 1.95.14.5 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -47,6 +44,7 @@
#include "vcl/svapp.hxx"
#include "vcl/outfont.hxx"
#include "vcl/font.hxx"
+#include "vcl/fontsubset.hxx"
#include "vcl/sallayout.hxx"
#include "rtl/logfile.hxx"
@@ -74,6 +72,11 @@
#include <algorithm>
#endif
+#ifdef ENABLE_GRAPHITE
+#include <graphite/GrClient.h>
+#include <graphite/WinFont.h>
+#endif
+
#include <vector>
#include <set>
#include <map>
@@ -551,13 +554,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE
aDFA.mbEmbeddable = false;
aDFA.mbSubsettable = false;
- if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 )
- if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 )
- // TODO: implement type1 or CFF subsetting
- if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) )
- aDFA.mbSubsettable = true;
- // for now we can only embed Type1 fonts
- if( 0 != (rMetric.ntmFlags & NTM_TYPE1 ) )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
+ || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE))
+ aDFA.mbSubsettable = true;
+ else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too
aDFA.mbEmbeddable = true;
// heuristics for font quality
@@ -566,7 +566,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXA& rE
aDFA.mnQuality = 0;
if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE )
aDFA.mnQuality += 50;
- if( rMetric.ntmFlags & NTM_TT_OPENTYPE )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) )
aDFA.mnQuality += 10;
if( aDFA.mbSubsettable )
aDFA.mnQuality += 200;
@@ -633,13 +633,10 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE
aDFA.mbEmbeddable = false;
aDFA.mbSubsettable = false;
- if( (rMetric.tmPitchAndFamily & TMPF_TRUETYPE) != 0 )
- if( (rMetric.tmPitchAndFamily & TMPF_DEVICE) == 0 )
- // TODO: implement type1 or CFF subsetting
- if( 0 == (rMetric.ntmFlags & (NTM_PS_OPENTYPE | NTM_TYPE1) ) )
- aDFA.mbSubsettable = true;
- // for now we can only embed Type1 fonts
- if( rMetric.ntmFlags & NTM_TYPE1 )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
+ || 0 != (rMetric.tmPitchAndFamily & TMPF_TRUETYPE))
+ aDFA.mbSubsettable = true;
+ else if( 0 != (rMetric.tmPitchAndFamily & NTM_TYPE1) ) // TODO: implement subsetting for type1 too
aDFA.mbEmbeddable = true;
// heuristics for font quality
@@ -648,7 +645,7 @@ static ImplDevFontAttributes WinFont2DevFontAttributes( const ENUMLOGFONTEXW& rE
aDFA.mnQuality = 0;
if( rMetric.tmPitchAndFamily & TMPF_TRUETYPE )
aDFA.mnQuality += 50;
- if( rMetric.ntmFlags & NTM_TT_OPENTYPE )
+ if( 0 != (rMetric.ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) )
aDFA.mnQuality += 10;
if( aDFA.mbSubsettable )
aDFA.mnQuality += 200;
@@ -807,6 +804,9 @@ ImplWinFontData::ImplWinFontData( const ImplDevFontAttributes& rDFS,
mbDisableGlyphApi( false ),
mbHasKoreanRange( false ),
mbHasCJKSupport( false ),
+#ifdef ENABLE_GRAPHITE
+ mbHasGraphiteSupport( false ),
+#endif
mbHasArabicSupport ( false ),
mbAliasSymbolsLow( false ),
mbAliasSymbolsHigh( false ),
@@ -865,6 +865,13 @@ void ImplWinFontData::UpdateFromHDC( HDC hDC ) const
ReadCmapTable( hDC );
ReadOs2Table( hDC );
+#ifdef ENABLE_GRAPHITE
+ static const char* pDisableGraphiteText = getenv( "SAL_DISABLE_GRAPHITE" );
+ if( !pDisableGraphiteText || (pDisableGraphiteText[0] == '0') )
+ {
+ mbHasGraphiteSupport = gr::WinFont::FontHasGraphiteTables(hDC);
+ }
+#endif
// even if the font works some fonts have problems with the glyph API
// => the heuristic below tries to figure out which fonts have the problem
@@ -993,27 +1000,25 @@ void ImplWinFontData::ReadGsubTable( HDC hDC ) const
void ImplWinFontData::ReadCmapTable( HDC hDC ) const
{
- CmapResult aResult;
- aResult.mnPairCount = 0;
- aResult.mpPairCodes = NULL;
- aResult.mpStartGlyphs = NULL;
- aResult.mbSymbolic = (meWinCharSet == SYMBOL_CHARSET);
- aResult.mbRecoded = true;
+ if( mpUnicodeMap != NULL )
+ return;
+ bool bIsSymbolFont = (meWinCharSet == SYMBOL_CHARSET);
// get the CMAP table from the font which is selected into the DC
const DWORD nCmapTag = CalcTag( "cmap" );
const RawFontData aRawFontData( hDC, nCmapTag );
// parse the CMAP table if available
- if( aRawFontData.get() )
+ if( aRawFontData.get() ) {
+ CmapResult aResult;
ParseCMAP( aRawFontData.get(), aRawFontData.size(), aResult );
+ mbDisableGlyphApi |= aResult.mbRecoded;
+ aResult.mbSymbolic = bIsSymbolFont;
+ if( aResult.mnRangeCount > 0 )
+ mpUnicodeMap = new ImplFontCharMap( aResult );
+ }
- mbDisableGlyphApi |= aResult.mbRecoded;
-
- if( aResult.mnPairCount > 0 )
- mpUnicodeMap = new ImplFontCharMap( aResult.mnPairCount,
- aResult.mpPairCodes, aResult.mpStartGlyphs );
- else
- mpUnicodeMap = ImplFontCharMap::GetDefaultMap();
+ if( !mpUnicodeMap )
+ mpUnicodeMap = ImplFontCharMap::GetDefaultMap( bIsSymbolFont );
}
// =======================================================================
@@ -2547,6 +2552,8 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
const ImplFontData* pFont, long* pGlyphIDs, sal_uInt8* pEncoding,
sal_Int32* pGlyphWidths, int nGlyphCount, FontSubsetInfo& rInfo )
{
+ // TODO: use more of the central font-subsetting code, move stuff there if needed
+
// create matching ImplFontSelectData
// we need just enough to get to the font file data
// use height=1000 for easier debugging (to match psprint's font units)
@@ -2554,10 +2561,14 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
// TODO: much better solution: move SetFont and restoration of old font to caller
ScopedFont aOldFont(*this);
- float fScale = 0.0;
+ float fScale = 1.0;
HFONT hOldFont = 0;
ImplDoSetFont( &aIFSD, fScale, hOldFont );
+ ImplWinFontData* pWinFontData = (ImplWinFontData*)aIFSD.mpFontData;
+ pWinFontData->UpdateFromHDC( mhDC );
+/*const*/ ImplFontCharMap* pImplFontCharMap = pWinFontData->GetImplFontCharMap();
+
#if OSL_DEBUG_LEVEL > 1
// get font metrics
TEXTMETRICA aWinMetric;
@@ -2568,8 +2579,42 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
DBG_ASSERT( aWinMetric.tmPitchAndFamily & TMPF_TRUETYPE, "can only subset TT font" );
#endif
+ rtl::OUString aSysPath;
+ if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
+ return FALSE;
+ const rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
+ const ByteString aToFile( aSysPath.getStr(), (xub_StrLen)aSysPath.getLength(), aThreadEncoding );
+
+ // check if the font has a CFF-table
+ const DWORD nCffTag = CalcTag( "CFF " );
+ const RawFontData aRawCffData( mhDC, nCffTag );
+ if( aRawCffData.get() )
+ {
+ long nRealGlyphIds[ 256 ];
+ for( int i = 0; i < nGlyphCount; ++i )
+ {
+ // TODO: remap notdef glyph if needed
+ // TODO: use GDI's GetGlyphIndices instead? Does it handle GSUB properly?
+ sal_uInt32 nGlyphIdx = pGlyphIDs[i] & GF_IDXMASK;
+ if( pGlyphIDs[i] & GF_ISCHAR ) // remaining pseudo-glyphs need to be translated
+ nGlyphIdx = pImplFontCharMap->GetGlyphIndex( nGlyphIdx );
+ if( (pGlyphIDs[i] & (GF_ROTMASK|GF_GSUB)) != 0) // TODO: vertical substitution
+ {/*####*/}
+
+ nRealGlyphIds[i] = nGlyphIdx;
+ }
+
+ // provide a font subset from the CFF-table
+ FILE* pOutFile = fopen( aToFile.GetBuffer(), "wb" );
+ rInfo.LoadFont( FontSubsetInfo::CFF_FONT, aRawCffData.get(), aRawCffData.size() );
+ bool bRC = rInfo.CreateFontSubset( FontSubsetInfo::TYPE1_PFB, pOutFile, NULL,
+ nRealGlyphIds, pEncoding, nGlyphCount, pGlyphWidths );
+ fclose( pOutFile );
+ return bRC;
+ }
+
// get raw font file data
- const RawFontData xRawFontData( mhDC );
+ const RawFontData xRawFontData( mhDC, NULL );
if( !xRawFontData.get() )
return FALSE;
@@ -2585,7 +2630,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
TTGlobalFontInfo aTTInfo;
::GetTTGlobalFontInfo( aSftTTF.get(), &aTTInfo );
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TRUETYPE;
+ rInfo.m_nFontType = FontSubsetInfo::SFNT_TTF;
rInfo.m_aPSName = ImplSalGetUniString( aTTInfo.psname );
rInfo.m_nAscent = +aTTInfo.winAscent;
rInfo.m_nDescent = -aTTInfo.winDescent;
@@ -2593,7 +2638,7 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
Point( aTTInfo.xMax, aTTInfo.yMax ) );
rInfo.m_nCapHeight = aTTInfo.yMax; // Well ...
- // subset glyphs and get their properties
+ // subset TTF-glyphs and get their properties
// take care that subset fonts require the NotDef glyph in pos 0
int nOrigCount = nGlyphCount;
USHORT aShortIDs[ 256 ];
@@ -2649,11 +2694,6 @@ BOOL WinSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
free( pMetrics );
// write subset into destination file
- rtl::OUString aSysPath;
- if( osl_File_E_None != osl_getSystemPathFromFileURL( rToFile.pData, &aSysPath.pData ) )
- return FALSE;
- rtl_TextEncoding aThreadEncoding = osl_getThreadTextEncoding();
- ByteString aToFile( rtl::OUStringToOString( aSysPath, aThreadEncoding ) );
nRC = ::CreateTTFromTTGlyphs( aSftTTF.get(), aToFile.GetBuffer(), aShortIDs,
aTempEncs, nGlyphCount, 0, NULL, 0 );
return (nRC == SF_OK);
@@ -2683,7 +2723,7 @@ const void* WinSalGraphics::GetEmbedFontData( const ImplFontData* pFont,
TEXTMETRICA aTm;
if( !::GetTextMetricsA( mhDC, &aTm ) )
*pDataLen = 0;
- rInfo.m_nFontType = SAL_FONTSUBSETINFO_TYPE_TYPE1;
+ rInfo.m_nFontType = FontSubsetInfo::ANY_TYPE1;
WCHAR aFaceName[64];
int nFNLen = ::GetTextFaceW( mhDC, 64, aFaceName );
// #i59854# strip eventual null byte
@@ -2876,3 +2916,4 @@ SystemFontData WinSalGraphics::GetSysFontData( int nFallbacklevel ) const
}
//--------------------------------------------------------------------------
+
diff --git a/vcl/win/source/gdi/salgdi_gdiplus.cxx b/vcl/win/source/gdi/salgdi_gdiplus.cxx
index 8709fc872540..5c00c786e22d 100644
--- a/vcl/win/source/gdi/salgdi_gdiplus.cxx
+++ b/vcl/win/source/gdi/salgdi_gdiplus.cxx
@@ -64,75 +64,79 @@
void impAddB2DPolygonToGDIPlusGraphicsPath(Gdiplus::GraphicsPath& rPath, const basegfx::B2DPolygon& rPolygon)
{
- const sal_uInt32 nCount(rPolygon.count());
-
- if(nCount)
- {
- const sal_uInt32 nEdgeCount(rPolygon.isClosed() ? nCount : nCount - 1);
- const bool bControls(rPolygon.areControlPointsUsed());
- basegfx::B2DPoint aCurr(rPolygon.getB2DPoint(0));
- Gdiplus::PointF aFCurr(Gdiplus::REAL(aCurr.getX()), Gdiplus::REAL(aCurr.getY()));
-
- for(sal_uInt32 a(0); a < nEdgeCount; a++)
- {
- const sal_uInt32 nNextIndex((a + 1) % nCount);
- const basegfx::B2DPoint aNext(rPolygon.getB2DPoint(nNextIndex));
- const Gdiplus::PointF aFNext(Gdiplus::REAL(aNext.getX()), Gdiplus::REAL(aNext.getY()));
-
- if(bControls && (rPolygon.isNextControlPointUsed(a) || rPolygon.isPrevControlPointUsed(nNextIndex)))
- {
- const basegfx::B2DPoint aCa(rPolygon.getNextControlPoint(a));
- const basegfx::B2DPoint aCb(rPolygon.getPrevControlPoint(nNextIndex));
-
- rPath.AddBezier(
- aFCurr,
- Gdiplus::PointF(Gdiplus::REAL(aCa.getX()), Gdiplus::REAL(aCa.getY())),
- Gdiplus::PointF(Gdiplus::REAL(aCb.getX()), Gdiplus::REAL(aCb.getY())),
- aFNext);
- }
- else
- {
- rPath.AddLine(aFCurr, aFNext);
- }
-
- if(a + 1 < nEdgeCount)
- {
- aCurr = aNext;
- aFCurr = aFNext;
- }
- }
- }
+ const sal_uInt32 nCount(rPolygon.count());
+
+ if(nCount)
+ {
+ const sal_uInt32 nEdgeCount(rPolygon.isClosed() ? nCount : nCount - 1);
+ const bool bControls(rPolygon.areControlPointsUsed());
+ basegfx::B2DPoint aCurr(rPolygon.getB2DPoint(0));
+ Gdiplus::PointF aFCurr(Gdiplus::REAL(aCurr.getX()), Gdiplus::REAL(aCurr.getY()));
+
+ for(sal_uInt32 a(0); a < nEdgeCount; a++)
+ {
+ const sal_uInt32 nNextIndex((a + 1) % nCount);
+ const basegfx::B2DPoint aNext(rPolygon.getB2DPoint(nNextIndex));
+ const Gdiplus::PointF aFNext(Gdiplus::REAL(aNext.getX()), Gdiplus::REAL(aNext.getY()));
+
+ if(bControls && (rPolygon.isNextControlPointUsed(a) || rPolygon.isPrevControlPointUsed(nNextIndex)))
+ {
+ const basegfx::B2DPoint aCa(rPolygon.getNextControlPoint(a));
+ const basegfx::B2DPoint aCb(rPolygon.getPrevControlPoint(nNextIndex));
+
+ rPath.AddBezier(
+ aFCurr,
+ Gdiplus::PointF(Gdiplus::REAL(aCa.getX()), Gdiplus::REAL(aCa.getY())),
+ Gdiplus::PointF(Gdiplus::REAL(aCb.getX()), Gdiplus::REAL(aCb.getY())),
+ aFNext);
+ }
+ else
+ {
+ rPath.AddLine(aFCurr, aFNext);
+ }
+
+ if(a + 1 < nEdgeCount)
+ {
+ aCurr = aNext;
+ aFCurr = aFNext;
+ }
+ }
+ }
}
bool WinSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency)
{
- const sal_uInt32 nCount(rPolyPolygon.count());
+ const sal_uInt32 nCount(rPolyPolygon.count());
if(mbBrush && nCount && (fTransparency >= 0.0 && fTransparency < 1.0))
{
- Gdiplus::Graphics aGraphics(mhDC);
+ Gdiplus::Graphics aGraphics(mhDC);
const sal_uInt8 aTrans((sal_uInt8)255 - (sal_uInt8)basegfx::fround(fTransparency * 255.0));
- Gdiplus::Color aTestColor(aTrans, SALCOLOR_RED(maFillColor), SALCOLOR_GREEN(maFillColor), SALCOLOR_BLUE(maFillColor));
- Gdiplus::SolidBrush aTestBrush(aTestColor);
- Gdiplus::GraphicsPath aPath;
+ Gdiplus::Color aTestColor(aTrans, SALCOLOR_RED(maFillColor), SALCOLOR_GREEN(maFillColor), SALCOLOR_BLUE(maFillColor));
+ Gdiplus::SolidBrush aTestBrush(aTestColor);
+ Gdiplus::GraphicsPath aPath;
for(sal_uInt32 a(0); a < nCount; a++)
{
- aPath.StartFigure();
+ if(0 != a)
+ {
+ aPath.StartFigure(); // #i101491# not needed for first run
+ }
+
impAddB2DPolygonToGDIPlusGraphicsPath(aPath, rPolyPolygon.getB2DPolygon(a));
aPath.CloseFigure();
}
if(getAntiAliasB2DDraw())
{
- aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
- }
- else
- {
- aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone);
- }
-
- aGraphics.FillPath(&aTestBrush, &aPath);
+ aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
+ }
+ else
+ {
+ aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone);
+ }
+
+ aGraphics.FillPath(&aTestBrush, &aPath);
}
return true;
@@ -140,53 +144,59 @@ bool WinSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly
bool WinSalGraphics::drawPolyLine(const basegfx::B2DPolygon& rPolygon, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin eLineJoin)
{
- const sal_uInt32 nCount(rPolygon.count());
+ const sal_uInt32 nCount(rPolygon.count());
if(mbPen && nCount)
{
- Gdiplus::Graphics aGraphics(mhDC);
- Gdiplus::Color aTestColor(255, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor));
- Gdiplus::Pen aTestPen(aTestColor, Gdiplus::REAL(rLineWidths.getX()));
- Gdiplus::GraphicsPath aPath;
-
- switch(eLineJoin)
- {
+ Gdiplus::Graphics aGraphics(mhDC);
+ Gdiplus::Color aTestColor(255, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor));
+ Gdiplus::Pen aTestPen(aTestColor, Gdiplus::REAL(rLineWidths.getX()));
+ Gdiplus::GraphicsPath aPath;
+
+ switch(eLineJoin)
+ {
default : // basegfx::B2DLINEJOIN_NONE :
{
break;
}
case basegfx::B2DLINEJOIN_BEVEL :
{
- aTestPen.SetLineJoin(Gdiplus::LineJoinBevel);
+ aTestPen.SetLineJoin(Gdiplus::LineJoinBevel);
break;
}
case basegfx::B2DLINEJOIN_MIDDLE :
case basegfx::B2DLINEJOIN_MITER :
{
const Gdiplus::REAL aMiterLimit(15.0);
- aTestPen.SetMiterLimit(aMiterLimit);
- aTestPen.SetLineJoin(Gdiplus::LineJoinMiter);
+ aTestPen.SetMiterLimit(aMiterLimit);
+ aTestPen.SetLineJoin(Gdiplus::LineJoinMiter);
break;
}
case basegfx::B2DLINEJOIN_ROUND :
{
- aTestPen.SetLineJoin(Gdiplus::LineJoinRound);
+ aTestPen.SetLineJoin(Gdiplus::LineJoinRound);
break;
}
- }
+ }
impAddB2DPolygonToGDIPlusGraphicsPath(aPath, rPolygon);
-
- if(getAntiAliasB2DDraw())
- {
- aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
- }
- else
- {
- aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone);
- }
-
- aGraphics.DrawPath(&aTestPen, &aPath);
+
+ if(rPolygon.isClosed())
+ {
+ // #i101491# needed to create the correct line joins
+ aPath.CloseFigure();
+ }
+
+ if(getAntiAliasB2DDraw())
+ {
+ aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
+ }
+ else
+ {
+ aGraphics.SetSmoothingMode(Gdiplus::SmoothingModeNone);
+ }
+
+ aGraphics.DrawPath(&aTestPen, &aPath);
}
return true;
diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index 8d9347e7e352..2d335808e4c1 100755
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -71,6 +71,17 @@
typedef std::hash_map<int,int> IntMap;
typedef std::set<int> IntSet;
+// Graphite headers
+#ifdef ENABLE_GRAPHITE
+#include <i18npool/mslangid.hxx>
+#include <graphite/GrClient.h>
+#include <graphite/WinFont.h>
+#include <graphite/Segment.h>
+#include <vcl/graphite_layout.hxx>
+#include <vcl/graphite_cache.hxx>
+#include <vcl/graphite_features.hxx>
+#endif
+
#define DROPPED_OUTGLYPH 0xFFFF
using namespace rtl;
@@ -1757,6 +1768,8 @@ bool UniscribeLayout::GetItemSubrange( const VisualItem& rVisualItem,
if( nMaxGlyphPos < n )
nMaxGlyphPos = n;
}
+ if (nMaxGlyphPos > rVisualItem.mnEndGlyphPos)
+ nMaxGlyphPos = rVisualItem.mnEndGlyphPos - 1;
// extend the glyph range to account for all glyphs in referenced clusters
if( !rVisualItem.IsRTL() ) // LTR-item
@@ -2041,11 +2054,25 @@ void UniscribeLayout::MoveGlyph( int nStartx8, long nNewXPos )
long nDelta = nNewXPos - pVI->mnXOffset;
if( nStart > nMinGlyphPos )
{
- // move the glyph by expanding its left glyph
- int i;
+ // move the glyph by expanding its left glyph but ignore dropped glyphs
+ int i, nLastUndropped = nMinGlyphPos - 1;
for( i = nMinGlyphPos; i < nStart; ++i )
- nDelta -= mpGlyphAdvances[ i ];
- mpGlyphAdvances[ i-1 ] += nDelta;
+ {
+ if (mpOutGlyphs[i] != DROPPED_OUTGLYPH)
+ {
+ nDelta -= (mpJustifications)? mpJustifications[ i ] : mpGlyphAdvances[ i ];
+ nLastUndropped = i;
+ }
+ }
+ if (nLastUndropped >= nMinGlyphPos)
+ {
+ mpGlyphAdvances[ nLastUndropped ] += nDelta;
+ if (mpJustifications) mpJustifications[ nLastUndropped ] += nDelta;
+ }
+ else
+ {
+ pVI->mnXOffset += nDelta;
+ }
}
else
{
@@ -2066,11 +2093,18 @@ void UniscribeLayout::DropGlyph( int nStartx8 )
--nStart;
else // nStart<=0 for first visible glyph
{
- const VisualItem* pVI = mpVisualItems;
+ VisualItem* pVI = mpVisualItems;
for( int i = mnItemCount, nDummy; --i >= 0; ++pVI )
if( GetItemSubrange( *pVI, nStart, nDummy ) )
break;
DBG_ASSERT( nStart <= mnGlyphCount, "USPLayout::DropG overflow" );
+ int nOffset = 0;
+ int j = pVI->mnMinGlyphPos;
+ while (mpOutGlyphs[j] == DROPPED_OUTGLYPH) j++;
+ if (j == nStart)
+ {
+ pVI->mnXOffset += ((mpJustifications)? mpJustifications[nStart] : mpGlyphAdvances[nStart]);
+ }
}
mpOutGlyphs[ nStart ] = DROPPED_OUTGLYPH;
@@ -2127,11 +2161,12 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
}
// handle dropped glyphs at start of visual item
- int nEndGlyphPos;
- GetItemSubrange( rVI, i, nEndGlyphPos );
+ int nMinGlyphPos, nEndGlyphPos, nOrigMinGlyphPos = rVI.mnMinGlyphPos;
+ GetItemSubrange( rVI, nMinGlyphPos, nEndGlyphPos );
+ i = nMinGlyphPos;
while( (mpOutGlyphs[i] == cDroppedGlyph) && (i < nEndGlyphPos) )
{
- rVI.mnXOffset += pGlyphWidths[ i ];
+ //rVI.mnXOffset += pGlyphWidths[ i ];
rVI.mnMinGlyphPos = ++i;
}
@@ -2141,6 +2176,17 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
rVI.mnEndGlyphPos = 0;
continue;
}
+ // If there are still glyphs in the cluster and mnMinGlyphPos
+ // has changed then we need to remove the dropped glyphs at start
+ // to correct logClusters, which is unsigned and relative to the
+ // item start.
+ if (rVI.mnMinGlyphPos != nOrigMinGlyphPos)
+ {
+ // drop any glyphs in the visual item outside the range
+ for (i = nOrigMinGlyphPos; i < nMinGlyphPos; i++)
+ mpOutGlyphs[ i ] = cDroppedGlyph;
+ rVI.mnMinGlyphPos = i = nOrigMinGlyphPos;
+ }
// handle dropped glyphs in the middle of visual item
for(; i < nEndGlyphPos; ++i )
@@ -2157,9 +2203,10 @@ void UniscribeLayout::Simplify( bool /*bIsBase*/ )
mpGlyphAdvances[ j ] = mpGlyphAdvances[ i ];
if( mpJustifications )
mpJustifications[ j ] = mpJustifications[ i ];
- int k = mpGlyphs2Chars[ i ];
+ const int k = mpGlyphs2Chars[ i ];
mpGlyphs2Chars[ j ] = k;
- mpLogClusters[ k ] = sal::static_int_cast<WORD>(j++);
+ const int nRelGlyphPos = (j++) - rVI.mnMinGlyphPos;
+ mpLogClusters[ k ] = static_cast<WORD>(nRelGlyphPos);
}
rVI.mnEndGlyphPos = j;
@@ -2751,6 +2798,234 @@ bool UniscribeLayout::IsKashidaPosValid ( int nCharPos ) const
#endif // USE_UNISCRIBE
+#ifdef ENABLE_GRAPHITE
+
+class GraphiteLayoutWinImpl : public GraphiteLayout
+{
+public:
+ GraphiteLayoutWinImpl(const gr::Font & font, ImplWinFontEntry & rFont)
+ throw()
+ : GraphiteLayout(font), mrFont(rFont) {};
+ virtual ~GraphiteLayoutWinImpl() throw() {};
+ virtual sal_GlyphId getKashidaGlyph(int & rWidth);
+private:
+ ImplWinFontEntry & mrFont;
+};
+
+sal_GlyphId GraphiteLayoutWinImpl::getKashidaGlyph(int & rWidth)
+{
+ rWidth = mrFont.GetMinKashidaWidth();
+ return mrFont.GetMinKashidaGlyph();
+}
+
+// This class uses the SIL Graphite engine to provide complex text layout services to the VCL
+// @author tse
+//
+class GraphiteWinLayout : public WinLayout
+{
+private:
+ mutable gr::WinFont mpFont;
+ grutils::GrFeatureParser * mpFeatures;
+ mutable GraphiteLayoutWinImpl maImpl;
+public:
+ GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE);
+
+ static bool IsGraphiteEnabledFont(HDC hDC) throw();
+
+ // used by upper layers
+ virtual bool LayoutText( ImplLayoutArgs& ); // first step of layout
+ virtual void AdjustLayout( ImplLayoutArgs& ); // adjusting after fallback etc.
+ // virtual void InitFont() const;
+ virtual void DrawText( SalGraphics& ) const;
+
+ // methods using string indexing
+ virtual int GetTextBreak( long nMaxWidth, long nCharExtra=0, int nFactor=1 ) const;
+ virtual long FillDXArray( long* pDXArray ) const;
+
+ virtual void GetCaretPositions( int nArraySize, long* pCaretXArray ) const;
+
+ // methods using glyph indexing
+ virtual int GetNextGlyphs(int nLen, sal_GlyphId* pGlyphIdxAry, ::Point & rPos, int&,
+ long* pGlyphAdvAry = 0, int* pCharPosAry = 0 ) const;
+
+ // used by glyph+font+script fallback
+ virtual void MoveGlyph( int nStart, long nNewXPos );
+ virtual void DropGlyph( int nStart );
+ virtual void Simplify( bool bIsBase );
+ ~GraphiteWinLayout() { delete mpFeatures; mpFeatures = NULL; };
+protected:
+ virtual void ReplaceDC(gr::Segment & segment) const;
+ virtual void RestoreDC(gr::Segment & segment) const;
+};
+
+bool GraphiteWinLayout::IsGraphiteEnabledFont(HDC hDC) throw()
+{
+ return gr::WinFont::FontHasGraphiteTables(hDC);
+}
+
+GraphiteWinLayout::GraphiteWinLayout(HDC hDC, const ImplWinFontData& rWFD, ImplWinFontEntry& rWFE) throw()
+ : WinLayout(hDC, rWFD, rWFE), mpFont(hDC),
+ maImpl(mpFont, rWFE)
+{
+ const rtl::OString aLang = MsLangId::convertLanguageToIsoByteString( rWFE.maFontSelData.meLanguage );
+ rtl::OString name = rtl::OUStringToOString(
+ rWFE.maFontSelData.maTargetName, RTL_TEXTENCODING_UTF8 );
+ sal_Int32 nFeat = name.indexOf(grutils::GrFeatureParser::FEAT_PREFIX) + 1;
+ if (nFeat > 0)
+ {
+ rtl::OString aFeat = name.copy(nFeat, name.getLength() - nFeat);
+ mpFeatures = new grutils::GrFeatureParser(mpFont, aFeat.getStr(), aLang.getStr());
+ }
+ else
+ {
+ mpFeatures = new grutils::GrFeatureParser(mpFont, aLang.getStr());
+ }
+ maImpl.SetFeatures(mpFeatures);
+}
+
+void GraphiteWinLayout::ReplaceDC(gr::Segment & segment) const
+{
+ COLORREF color = GetTextColor(mhDC);
+ dynamic_cast<gr::WinFont&>(segment.getFont()).replaceDC(mhDC);
+ SetTextColor(mhDC, color);
+}
+
+void GraphiteWinLayout::RestoreDC(gr::Segment & segment) const
+{
+ dynamic_cast<gr::WinFont&>(segment.getFont()).restoreDC();
+}
+
+bool GraphiteWinLayout::LayoutText( ImplLayoutArgs & args)
+{
+ HFONT hUnRotatedFont;
+ if (args.mnOrientation)
+ {
+ // Graphite gets very confused if the font is rotated
+ LOGFONTW aLogFont;
+ ::GetObjectW( mhFont, sizeof(LOGFONTW), &aLogFont);
+ aLogFont.lfEscapement = 0;
+ aLogFont.lfOrientation = 0;
+ hUnRotatedFont = ::CreateFontIndirectW( &aLogFont);
+ ::SelectFont(mhDC, hUnRotatedFont);
+ }
+ WinLayout::AdjustLayout(args);
+ mpFont.replaceDC(mhDC);
+ maImpl.SetFontScale(WinLayout::mfFontScale);
+ //bool succeeded = maImpl.LayoutText(args);
+#ifdef GRCACHE
+ GrSegRecord * pSegRecord = NULL;
+ gr::Segment * pSegment = maImpl.CreateSegment(args, &pSegRecord);
+#else
+ gr::Segment * pSegment = maImpl.CreateSegment(args);
+#endif
+ bool bSucceeded = false;
+ if (pSegment)
+ {
+ // replace the DC on the font within the segment
+ ReplaceDC(*pSegment);
+ // create glyph vectors
+#ifdef GRCACHE
+ bSucceeded = maImpl.LayoutGlyphs(args, pSegment, pSegRecord);
+#else
+ bSucceeded = maImpl.LayoutGlyphs(args, pSegment);
+#endif
+ // restore original DC
+ RestoreDC(*pSegment);
+#ifdef GRCACHE
+ if (pSegRecord) pSegRecord->unlock();
+ else delete pSegment;
+#else
+ delete pSegment;
+#endif
+ }
+ mpFont.restoreDC();
+ if (args.mnOrientation)
+ {
+ // restore the rotated font
+ ::SelectFont(mhDC, mhFont);
+ ::DeleteObject(hUnRotatedFont);
+ }
+ return bSucceeded;
+}
+
+void GraphiteWinLayout::AdjustLayout(ImplLayoutArgs& rArgs)
+{
+ WinLayout::AdjustLayout(rArgs);
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ if ( (rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL) && rArgs.mpDXArray)
+ {
+ mrWinFontEntry.InitKashidaHandling(mhDC);
+ }
+ maImpl.AdjustLayout(rArgs);
+}
+
+void GraphiteWinLayout::DrawText(SalGraphics &sal_graphics) const
+{
+ HFONT hOrigFont = DisableFontScaling();
+ HDC aHDC = static_cast<WinSalGraphics&>(sal_graphics).mhDC;
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ const int MAX_GLYPHS = 2;
+ sal_GlyphId glyphIntStr[MAX_GLYPHS];
+ WORD glyphWStr[MAX_GLYPHS];
+ int glyphIndex = 0;
+ Point aPos(0,0);
+ int nGlyphs = 0;
+ do
+ {
+ nGlyphs = maImpl.GetNextGlyphs(1, glyphIntStr, aPos, glyphIndex);
+ if (nGlyphs < 1)
+ break;
+ std::copy(glyphIntStr, glyphIntStr + nGlyphs, glyphWStr);
+ ::ExtTextOutW(aHDC, aPos.X(), aPos.Y(), ETO_GLYPH_INDEX,
+ NULL, (LPCWSTR)&(glyphWStr), nGlyphs, NULL);
+ } while (nGlyphs);
+ if( hOrigFont )
+ DeleteFont( SelectFont( mhDC, hOrigFont ) );
+}
+
+int GraphiteWinLayout::GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const
+{
+ mpFont.replaceDC(mhDC);
+ int nBreak = maImpl.GetTextBreak(nMaxWidth, nCharExtra, nFactor);
+ mpFont.restoreDC();
+ return nBreak;
+}
+
+long GraphiteWinLayout::FillDXArray( long* pDXArray ) const
+{
+ return maImpl.FillDXArray(pDXArray);
+}
+
+void GraphiteWinLayout::GetCaretPositions( int nArraySize, long* pCaretXArray ) const
+{
+ maImpl.GetCaretPositions(nArraySize, pCaretXArray);
+}
+
+int GraphiteWinLayout::GetNextGlyphs( int length, sal_GlyphId* glyph_out,
+ ::Point & pos_out, int &glyph_slot, long * glyph_adv, int *char_index) const
+{
+ maImpl.DrawBase() = WinLayout::maDrawBase;
+ maImpl.DrawOffset() = WinLayout::maDrawOffset;
+ return maImpl.GetNextGlyphs(length, glyph_out, pos_out, glyph_slot, glyph_adv, char_index);
+}
+
+void GraphiteWinLayout::MoveGlyph( int glyph_idx, long new_x_pos )
+{
+ maImpl.MoveGlyph(glyph_idx, new_x_pos);
+}
+
+void GraphiteWinLayout::DropGlyph( int glyph_idx )
+{
+ maImpl.DropGlyph(glyph_idx);
+}
+
+void GraphiteWinLayout::Simplify( bool is_base )
+{
+ maImpl.Simplify(is_base);
+}
+#endif // ENABLE_GRAPHITE
// =======================================================================
SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLevel )
@@ -2766,6 +3041,11 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe
if( !(rArgs.mnFlags & SAL_LAYOUT_COMPLEX_DISABLED)
&& (aUspModule || (bUspEnabled && InitUSP())) ) // CTL layout engine
{
+#ifdef ENABLE_GRAPHITE
+ if (rFontFace.SupportsGraphite())
+ pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance);
+ else
+#endif // ENABLE_GRAPHITE
// script complexity is determined in upper layers
pWinLayout = new UniscribeLayout( mhDC, rFontFace, rFontInstance );
// NOTE: it must be guaranteed that the WinSalGraphics lives longer than
@@ -2788,7 +3068,12 @@ SalLayout* WinSalGraphics::GetTextLayout( ImplLayoutArgs& rArgs, int nFallbackLe
BYTE eCharSet = ANSI_CHARSET;
if( mpLogFont )
eCharSet = mpLogFont->lfCharSet;
- pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance );
+#ifdef ENABLE_GRAPHITE
+ if (rFontFace.SupportsGraphite())
+ pWinLayout = new GraphiteWinLayout(mhDC, rFontFace, rFontInstance);
+ else
+#endif // ENABLE_GRAPHITE
+ pWinLayout = new SimpleWinLayout( mhDC, eCharSet, rFontFace, rFontInstance );
}
if( mfFontScale != 1.0 )
diff --git a/vcl/win/source/window/MAKEFILE.MK b/vcl/win/source/window/MAKEFILE.MK
index 17e73db1e75e..67cb1bf3e080 100644
--- a/vcl/win/source/window/MAKEFILE.MK
+++ b/vcl/win/source/window/MAKEFILE.MK
@@ -60,6 +60,10 @@ SLOFILES= \
EXCEPTIONSFILES= $(SLO)$/salframe.obj
.ENDIF
+.IF "$(ENABLE_GRAPHITE)" == "TRUE"
+CFLAGS+=-DENABLE_GRAPHITE
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx
index 57ad272bcf51..3ffc358bd76d 100644
--- a/vcl/win/source/window/salframe.cxx
+++ b/vcl/win/source/window/salframe.cxx
@@ -6,9 +6,6 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: salframe.cxx,v $
- * $Revision: 1.157.20.2 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -355,11 +352,9 @@ SalFrame* ImplSalCreateFrame( WinSalInstance* pInst,
{
OUString aLibraryName( RTL_CONSTASCII_USTRINGPARAM( "user32" ) );
oslModule pLib = osl_loadModule( aLibraryName.pData, SAL_LOADMODULE_DEFAULT );
- void *pFunc = NULL;
+ oslGenericFunction pFunc = NULL;
if( pLib )
- {
pFunc = osl_getAsciiFunctionSymbol( pLib, "SetLayeredWindowAttributes" );
- }
lpfnSetLayeredWindowAttributes = ( SetLayeredWindowAttributes_Proc_T ) pFunc;
@@ -3155,7 +3150,8 @@ void WinSalFrame::Beep( SoundType eSoundType )
MB_ICONQUESTION // SOUND_QUERY
};
- MessageBeep( aImplSoundTab[eSoundType] );
+ if( eSoundType != SOUND_DISABLE ) // don't beep on disable
+ MessageBeep( aImplSoundTab[eSoundType] );
}
// -----------------------------------------------------------------------
diff --git a/vcl/workben/makefile.mk b/vcl/workben/makefile.mk
index 83abbbf4e6bf..34316356a1a6 100644
--- a/vcl/workben/makefile.mk
+++ b/vcl/workben/makefile.mk
@@ -125,6 +125,7 @@ APP5OBJS= $(OBJ)$/svpclient.obj
APP5STDLIBS= $(CPPULIB) \
$(CPPUHELPERLIB) \
$(COMPHELPERLIB) \
+ $(UCBHELPERLIB) \
$(VCLLIB) \
$(TOOLSLIB) \
$(SALLIB) \
diff --git a/vcl/workben/svpclient.cxx b/vcl/workben/svpclient.cxx
index cf64d58110e8..7bea0b94f76a 100644
--- a/vcl/workben/svpclient.cxx
+++ b/vcl/workben/svpclient.cxx
@@ -50,6 +50,8 @@
#include <comphelper/processfactory.hxx>
#include <cppuhelper/servicefactory.hxx>
#include <cppuhelper/bootstrap.hxx>
+#include "ucbhelper/contentbroker.hxx"
+#include "ucbhelper/configurationkeys.hxx"
#include <errno.h>
#include <unistd.h>
@@ -60,6 +62,8 @@
using namespace rtl;
+using namespace cppu;
+using namespace comphelper;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
// -----------------------------------------------------------------------
@@ -73,10 +77,47 @@ SAL_IMPLEMENT_MAIN()
{
tools::extendApplicationEnvironment();
- Reference< XMultiServiceFactory > xMS;
- xMS = cppu::createRegistryServiceFactory( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "applicat.rdb" ) ), sal_True );
+ //-------------------------------------------------
+ // create the global service-manager
+ //-------------------------------------------------
+ Reference< XMultiServiceFactory > xFactory;
+ try
+ {
+ Reference< XComponentContext > xCtx = defaultBootstrap_InitialComponentContext();
+ xFactory = Reference< XMultiServiceFactory >( xCtx->getServiceManager(), UNO_QUERY );
+ if( xFactory.is() )
+ setProcessServiceFactory( xFactory );
+ }
+ catch( com::sun::star::uno::Exception& rExc)
+ {
+ }
+
+ if( ! xFactory.is() )
+ {
+ fprintf( stderr, "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" );
+ exit( 1 );
+ }
+
+ /*
+ * Create UCB.
+ */
+ Sequence< Any > aArgs( 2 );
+ aArgs[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL );
+ aArgs[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE );
+#if OSL_DEBUG_LEVEL > 1
+ sal_Bool bSuccess =
+#endif
+ ::ucbhelper::ContentBroker::initialize( xFactory, aArgs );
+
+#if OSL_DEBUG_LEVEL > 1
+ if ( !bSuccess )
+ {
+ fprintf( stderr, "Error creating UCB, installation must be in disorder. Exiting.\n" );
+ exit( 1 );
+ }
+#endif
- InitVCL( xMS );
+ InitVCL( xFactory );
::Main();
DeInitVCL();