diff options
author | Mathias Bauer <mba@openoffice.org> | 2009-09-09 11:45:13 +0200 |
---|---|---|
committer | Mathias Bauer <mba@openoffice.org> | 2009-09-09 11:45:13 +0200 |
commit | 0cb550725d7e128e72e67739aff5338865c28abc (patch) | |
tree | 0ffabe03dd8b83e273539f26f633273d50c37397 | |
parent | aa611d78df11fcc1e35ead5fa093143bf17e4cf6 (diff) | |
parent | 1f0839c836781bc41f8c301b6262eabc978c90f8 (diff) |
merge commit to DEV300_m57
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(); |