DO NOT MERGE Update FreeType library to 2.4.7
Copied common files from upstream repository only.
changes to ftoption.h which were intentionally NOT taken:
/* contain no glyph data, but supply it via a callback function. */
/* This is required by clients supporting document formats which */
/* supply font data incrementally as the document is parsed, such */
/* as the Ghostscript interpreter for the PostScript language. */
/* */
-/* #define FT_CONFIG_OPTION_INCREMENTAL */
+#define FT_CONFIG_OPTION_INCREMENTAL
/*************************************************************************/
/* */
/* The size in bytes of the render pool used by the scan-line converter */
@@ -553,11 +553,11 @@ FT_BEGIN_HEADER
/* TrueType glyphs without hinting. */
/* */
/* Do not #undef this macro here, since the build system might */
/* define it for certain configurations only. */
/* */
-/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
/*************************************************************************/
/* */
/* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
@@ -603,11 +603,11 @@ FT_BEGIN_HEADER
/* */
/* error = FT_Open_Face( library, &open_args, index, &face ); */
/* ... */
/* } */
/* */
-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
+/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
Manual changes to ftmodule.h:
+/*
+ * New modules in 2.4.7:
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Module_Class, psaux_module_class )
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+ */
+
These lines were added for 2.4.7 but we decided to stick with our current use.
Change-Id: Ic1b52909580c78ead44cf4f882be06f2837539db
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index 7af737f..a9e767c 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -95,10 +95,6 @@
#endif
- /* Preferred alignment of data */
-#define FT_ALIGNMENT 8
-
-
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
/* used -- this is only used to get rid of unpleasant compiler warnings */
#ifndef FT_UNUSED
@@ -354,12 +350,12 @@
__asm__ __volatile__ (
- "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
- "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
- "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
- "adds %1, %1, %0\n\t" /* %1 += %0 */
- "adc %2, %2, #0\n\t" /* %2 += carry */
- "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
+ "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
+ "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
+ "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
+ "adds %1, %1, %0\n\t" /* %1 += %0 */
+ "adc %2, %2, #0\n\t" /* %2 += carry */
+ "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
"orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
: "=r"(a), "=&r"(t2), "=&r"(t)
: "r"(a), "r"(b) );
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
index e145790..8a91d17 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -21,4 +21,16 @@
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
+/*
+ * New modules in 2.4.7:
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Module_Class, psaux_module_class )
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+ */
+
/* EOF */
diff --git a/include/freetype/config/ftstdlib.h b/include/freetype/config/ftstdlib.h
index 30ec14e..11d5d0e 100644
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
/* ANSI-specific library and header configuration file (specification */
/* only). */
/* */
-/* Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2009 by */
+/* Copyright 2002-2007, 2009, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -59,11 +59,12 @@
#include <limits.h>
-#define FT_CHAR_BIT CHAR_BIT
-#define FT_INT_MAX INT_MAX
-#define FT_INT_MIN INT_MIN
-#define FT_UINT_MAX UINT_MAX
-#define FT_ULONG_MAX ULONG_MAX
+#define FT_CHAR_BIT CHAR_BIT
+#define FT_USHORT_MAX USHRT_MAX
+#define FT_INT_MAX INT_MAX
+#define FT_INT_MIN INT_MIN
+#define FT_UINT_MAX UINT_MAX
+#define FT_ULONG_MAX ULONG_MAX
/**********************************************************************/
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index 660b303..08b77e1 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -3810,7 +3810,7 @@
*/
#define FREETYPE_MAJOR 2
#define FREETYPE_MINOR 4
-#define FREETYPE_PATCH 6
+#define FREETYPE_PATCH 7
/*************************************************************************/
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
index 9c12186..8b18500 100644
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -460,27 +460,27 @@
/* read a 16-bit big-endian unsigned integer from a stream */
FT_BASE( FT_UShort )
FT_Stream_ReadUShort( FT_Stream stream,
- FT_Error* error );
+ FT_Error* error );
/* read a 24-bit big-endian unsigned integer from a stream */
FT_BASE( FT_ULong )
FT_Stream_ReadUOffset( FT_Stream stream,
- FT_Error* error );
+ FT_Error* error );
/* read a 32-bit big-endian integer from a stream */
FT_BASE( FT_ULong )
FT_Stream_ReadULong( FT_Stream stream,
- FT_Error* error );
+ FT_Error* error );
/* read a 16-bit little-endian unsigned integer from a stream */
FT_BASE( FT_UShort )
FT_Stream_ReadUShortLE( FT_Stream stream,
- FT_Error* error );
+ FT_Error* error );
/* read a 32-bit little-endian unsigned integer from a stream */
FT_BASE( FT_ULong )
FT_Stream_ReadULongLE( FT_Stream stream,
- FT_Error* error );
+ FT_Error* error );
/* Read a structure from a stream. The structure must be described */
/* by an array of FT_Frame_Field records. */
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index d5876ff..54fcf7f 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -134,7 +134,7 @@
dist = -dist;
if ( num_widths < AF_LATIN_MAX_WIDTHS )
- axis->widths[ num_widths++ ].org = dist;
+ axis->widths[num_widths++].org = dist;
}
}
@@ -221,7 +221,7 @@
for ( ; p < limit && *p; p++ )
{
FT_UInt glyph_index;
- FT_Pos best_y; /* same as points.y */
+ FT_Pos best_y; /* same as points.y */
FT_Int best_point, best_first, best_last;
FT_Vector* points;
FT_Bool round = 0;
@@ -265,7 +265,7 @@
/* In some fonts, they correspond to mark attachment points */
/* which are way outside of the glyph's real outline. */
if ( last <= first )
- continue;
+ continue;
if ( AF_LATIN_IS_TOP_BLUE( bb ) )
{
@@ -367,9 +367,9 @@
af_sort_pos( num_rounds, rounds );
af_sort_pos( num_flats, flats );
- blue = & axis->blues[axis->blue_count];
- blue_ref = & blue->ref.org;
- blue_shoot = & blue->shoot.org;
+ blue = &axis->blues[axis->blue_count];
+ blue_ref = &blue->ref.org;
+ blue_shoot = &blue->shoot.org;
axis->blue_count++;
@@ -436,7 +436,7 @@
FT_Fixed advance, old_advance = 0;
- /* digit `0' is 0x30 in all supported charmaps */
+ /* digit `0' is 0x30 in all supported charmaps */
for ( i = 0x30; i <= 0x39; i++ )
{
FT_UInt glyph_index;
@@ -726,14 +726,14 @@
af_latin_hints_compute_segments( AF_GlyphHints hints,
AF_Dimension dim )
{
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = AF_Err_Ok;
- AF_Segment segment = NULL;
- AF_SegmentRec seg0;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- AF_Direction major_dir, segment_dir;
+ AF_AxisHints axis = &hints->axis[dim];
+ FT_Memory memory = hints->memory;
+ FT_Error error = AF_Err_Ok;
+ AF_Segment segment = NULL;
+ AF_SegmentRec seg0;
+ AF_Point* contour = hints->contours;
+ AF_Point* contour_limit = contour + hints->num_contours;
+ AF_Direction major_dir, segment_dir;
FT_ZERO( &seg0 );
@@ -829,7 +829,7 @@
/* a segment is round if either its first or last point */
/* is a control point */
if ( ( segment->first->flags | point->flags ) &
- AF_FLAG_CONTROL )
+ AF_FLAG_CONTROL )
segment->flags |= AF_EDGE_ROUND;
/* compute segment size */
@@ -970,50 +970,50 @@
/* search for stems having opposite directions, */
/* with seg1 to the `left' of seg2 */
for ( seg2 = segments; seg2 < segment_limit; seg2++ )
- {
- FT_Pos pos1 = seg1->pos;
- FT_Pos pos2 = seg2->pos;
+ {
+ FT_Pos pos1 = seg1->pos;
+ FT_Pos pos2 = seg2->pos;
if ( seg1->dir + seg2->dir == 0 && pos2 > pos1 )
{
/* compute distance between the two segments */
FT_Pos dist = pos2 - pos1;
- FT_Pos min = seg1->min_coord;
- FT_Pos max = seg1->max_coord;
- FT_Pos len, score;
+ FT_Pos min = seg1->min_coord;
+ FT_Pos max = seg1->max_coord;
+ FT_Pos len, score;
- if ( min < seg2->min_coord )
- min = seg2->min_coord;
+ if ( min < seg2->min_coord )
+ min = seg2->min_coord;
- if ( max > seg2->max_coord )
- max = seg2->max_coord;
+ if ( max > seg2->max_coord )
+ max = seg2->max_coord;
/* compute maximum coordinate difference of the two segments */
- len = max - min;
- if ( len >= len_threshold )
- {
+ len = max - min;
+ if ( len >= len_threshold )
+ {
/* small coordinate differences cause a higher score, and */
/* segments with a greater distance cause a higher score also */
- score = dist + len_score / len;
+ score = dist + len_score / len;
/* and we search for the smallest score */
/* of the sum of the two values */
- if ( score < seg1->score )
- {
- seg1->score = score;
- seg1->link = seg2;
- }
+ if ( score < seg1->score )
+ {
+ seg1->score = score;
+ seg1->link = seg2;
+ }
- if ( score < seg2->score )
- {
- seg2->score = score;
- seg2->link = seg1;
- }
+ if ( score < seg2->score )
+ {
+ seg2->score = score;
+ seg2->link = seg1;
}
}
}
+ }
}
/* now compute the `serif' segments, cf. explanations in `afhints.h' */
@@ -1234,9 +1234,9 @@
#if 0
/* check for segment direction */
if ( seg->dir == up_dir )
- ups += seg->max_coord-seg->min_coord;
+ ups += seg->max_coord - seg->min_coord;
else
- downs += seg->max_coord-seg->min_coord;
+ downs += seg->max_coord - seg->min_coord;
#endif
/* check for links -- if seg->serif is set, then seg->link must */
@@ -1354,10 +1354,10 @@
af_latin_hints_compute_blue_edges( AF_GlyphHints hints,
AF_LatinMetrics metrics )
{
- AF_AxisHints axis = &hints->axis[ AF_DIMENSION_VERT ];
+ AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
AF_Edge edge = axis->edges;
AF_Edge edge_limit = edge + axis->num_edges;
- AF_LatinAxis latin = &metrics->axis[ AF_DIMENSION_VERT ];
+ AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
FT_Fixed scale = latin->scale;
@@ -1414,7 +1414,7 @@
if ( dist < best_dist )
{
best_dist = dist;
- best_blue = & blue->ref;
+ best_blue = &blue->ref;
}
/* now compare it to the overshoot position and check whether */
@@ -1436,7 +1436,7 @@
if ( dist < best_dist )
{
best_dist = dist;
- best_blue = & blue->shoot;
+ best_blue = &blue->shoot;
}
}
}
@@ -1511,8 +1511,8 @@
* In `light' hinting mode we disable horizontal hinting completely.
* We also do it if the face is italic.
*/
- if ( mode == FT_RENDER_MODE_LIGHT ||
- (face->style_flags & FT_STYLE_FLAG_ITALIC) != 0 )
+ if ( mode == FT_RENDER_MODE_LIGHT ||
+ ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
hints->scaler_flags = scaler_flags;
@@ -1597,7 +1597,7 @@
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
- axis->extra_light )
+ axis->extra_light )
return width;
if ( dist < 0 )
@@ -1631,19 +1631,19 @@
/* compare to standard width */
- delta = dist - axis->widths[0].cur;
+ delta = dist - axis->widths[0].cur;
- if ( delta < 0 )
- delta = -delta;
+ if ( delta < 0 )
+ delta = -delta;
- if ( delta < 40 )
- {
- dist = axis->widths[0].cur;
- if ( dist < 48 )
- dist = 48;
+ if ( delta < 40 )
+ {
+ dist = axis->widths[0].cur;
+ if ( dist < 48 )
+ dist = 48;
- goto Done_Width;
- }
+ goto Done_Width;
+ }
if ( dist < 3 * 64 )
{
@@ -1763,9 +1763,9 @@
stem_edge->pos = base_edge->pos + fitted_width;
FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to (%.2f),"
- "dist was %.2f, now %.2f\n",
- stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
- stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
+ " dist was %.2f, now %.2f\n",
+ stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
+ stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
}
@@ -1779,7 +1779,7 @@
{
FT_UNUSED( hints );
- serif->pos = base->pos + (serif->opos - base->opos);
+ serif->pos = base->pos + ( serif->opos - base->opos );
}
@@ -1845,9 +1845,9 @@
continue;
FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to (%.2f),"
- "was (%.2f)\n",
- edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
- edge1->pos / 64.0 ));
+ " was (%.2f)\n",
+ edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0,
+ edge1->pos / 64.0 ));
edge1->pos = blue->fit;
edge1->flags |= AF_EDGE_DONE;
@@ -1864,7 +1864,7 @@
}
/* now we align all other stem edges, trying to maintain the */
- /* relative order of stems in the glyph */
+ /* relative order of stems in the glyph */
for ( edge = edges; edge < edge_limit; edge++ )
{
AF_Edge edge2;
@@ -1948,10 +1948,10 @@
edge->pos = FT_PIX_ROUND( edge->opos );
FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
- "snapped to (%.2f) (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ " snapped to (%.2f) (%.2f)\n",
+ edge - edges, edge->opos / 64.0,
+ edge2 - edges, edge2->opos / 64.0,
+ edge->pos / 64.0, edge2->pos / 64.0 ));
anchor = edge;
edge->flags |= AF_EDGE_DONE;
@@ -1969,9 +1969,9 @@
org_center = org_pos + ( org_len >> 1 );
cur_len = af_latin_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ hints, dim, org_len,
+ (AF_Edge_Flags)edge->flags,
+ (AF_Edge_Flags)edge2->flags );
if ( edge2->flags & AF_EDGE_DONE )
{
@@ -2017,10 +2017,10 @@
edge2->pos = cur_pos1 + cur_len / 2;
FT_TRACE5(( " STEM: %d (opos=%.2f) to %d (opos=%.2f)"
- "snapped to (%.2f) and (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ " snapped to (%.2f) and (%.2f)\n",
+ edge - edges, edge->opos / 64.0,
+ edge2 - edges, edge2->opos / 64.0,
+ edge->pos / 64.0, edge2->pos / 64.0 ));
}
else
{
@@ -2033,13 +2033,13 @@
(AF_Edge_Flags)edge->flags,
(AF_Edge_Flags)edge2->flags );
- cur_pos1 = FT_PIX_ROUND( org_pos );
- delta1 = cur_pos1 + ( cur_len >> 1 ) - org_center;
+ cur_pos1 = FT_PIX_ROUND( org_pos );
+ delta1 = cur_pos1 + ( cur_len >> 1 ) - org_center;
if ( delta1 < 0 )
delta1 = -delta1;
- cur_pos2 = FT_PIX_ROUND( org_pos + org_len ) - cur_len;
- delta2 = cur_pos2 + ( cur_len >> 1 ) - org_center;
+ cur_pos2 = FT_PIX_ROUND( org_pos + org_len ) - cur_len;
+ delta2 = cur_pos2 + ( cur_len >> 1 ) - org_center;
if ( delta2 < 0 )
delta2 = -delta2;
@@ -2047,10 +2047,10 @@
edge2->pos = edge->pos + cur_len;
FT_TRACE5(( " STEM: %d (opos=%.2f) to %d (opos=%.2f)"
- "snapped to (%.2f) and (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge2-edges, edge2->opos / 64.0,
- edge->pos / 64.0, edge2->pos / 64.0 ));
+ " snapped to (%.2f) and (%.2f)\n",
+ edge - edges, edge->opos / 64.0,
+ edge2 - edges, edge2->opos / 64.0,
+ edge->pos / 64.0, edge2->pos / 64.0 ));
}
edge->flags |= AF_EDGE_DONE;
@@ -2059,7 +2059,7 @@
if ( edge > edges && edge->pos < edge[-1].pos )
{
FT_TRACE5(( " BOUND: %d (pos=%.2f) to (%.2f)\n",
- edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
+ edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
edge->pos = edge[-1].pos;
}
}
@@ -2154,10 +2154,10 @@
{
af_latin_align_serif_edge( hints, edge->serif, edge );
FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
- "aligned to (%.2f)\n",
- edge-edges, edge->opos / 64.0,
- edge->serif - edges, edge->serif->opos / 64.0,
- edge->pos / 64.0 ));
+ " aligned to (%.2f)\n",
+ edge - edges, edge->opos / 64.0,
+ edge->serif - edges, edge->serif->opos / 64.0,
+ edge->pos / 64.0 ));
}
else if ( !anchor )
{
@@ -2192,8 +2192,8 @@
after->opos - before->opos );
FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
- "from %d (opos=%.2f)\n",
- edge-edges, edge->opos / 64.0,
+ " from %d (opos=%.2f)\n",
+ edge - edges, edge->opos / 64.0,
edge->pos / 64.0,
before - edges, before->opos / 64.0 ));
}
@@ -2204,7 +2204,7 @@
FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)"
" snapped to (%.2f)\n",
- edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
+ edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
}
}
@@ -2242,7 +2242,7 @@
/* analyze glyph outline */
#ifdef AF_CONFIG_OPTION_USE_WARPER
if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
+ AF_HINTS_DO_HORIZONTAL( hints ) )
#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
#endif
@@ -2341,7 +2341,7 @@
};
- AF_DEFINE_SCRIPT_CLASS(af_latin_script_class,
+ AF_DEFINE_SCRIPT_CLASS(af_latin_script_class,
AF_SCRIPT_LATIN,
af_latin_uniranges,
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index 22ec337..5ef7ac7 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility functions for bitmaps (body). */
/* */
-/* Copyright 2004, 2005, 2006, 2007, 2008, 2009 by */
+/* Copyright 2004-2009, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -417,6 +417,10 @@
target->pitch = source->width + pad;
+ if ( target->pitch > 0 &&
+ target->rows > FT_ULONG_MAX / target->pitch )
+ return FT_Err_Invalid_Argument;
+
if ( target->rows * target->pitch > old_size &&
FT_QREALLOC( target->buffer,
old_size, target->rows * target->pitch ) )
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 5069afb..64575af 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -620,7 +620,8 @@
FT_DRIVER_IS_SCALABLE( driver ) &&
FT_DRIVER_USES_OUTLINES( driver ) &&
!FT_IS_TRICKY( face ) &&
- ( ( face->internal->transform_matrix.yx == 0 &&
+ ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) ||
+ ( face->internal->transform_matrix.yx == 0 &&
face->internal->transform_matrix.xx != 0 ) ||
( face->internal->transform_matrix.xx == 0 &&
face->internal->transform_matrix.yx != 0 ) ) )
@@ -756,11 +757,11 @@
else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
{
/* apply `standard' transformation if no renderer is available */
- if ( &internal->transform_matrix )
+ if ( internal->transform_flags & 1 )
FT_Outline_Transform( &slot->outline,
&internal->transform_matrix );
- if ( &internal->transform_delta )
+ if ( internal->transform_flags & 2 )
FT_Outline_Translate( &slot->outline,
internal->transform_delta.x,
internal->transform_delta.y );
@@ -2613,6 +2614,18 @@
metrics->height = bsize->height << 6;
metrics->max_advance = bsize->x_ppem;
}
+
+ FT_TRACE5(( "FT_Select_Metrics:\n" ));
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
@@ -2721,6 +2734,18 @@
metrics->x_scale = 1L << 16;
metrics->y_scale = 1L << 16;
}
+
+ FT_TRACE5(( "FT_Request_Metrics:\n" ));
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
@@ -2742,7 +2767,33 @@
clazz = face->driver->clazz;
if ( clazz->select_size )
- return clazz->select_size( face->size, (FT_ULong)strike_index );
+ {
+ FT_Error error;
+
+
+ error = clazz->select_size( face->size, (FT_ULong)strike_index );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Size_Metrics* metrics = &face->size->metrics;
+
+
+ FT_TRACE5(( "FT_Select_Size (font driver's `select_size'):\n" ));
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ }
+#endif
+
+ return error;
+ }
FT_Select_Metrics( face, (FT_ULong)strike_index );
@@ -2770,7 +2821,33 @@
clazz = face->driver->clazz;
if ( clazz->request_size )
- return clazz->request_size( face->size, req );
+ {
+ FT_Error error;
+
+
+ error = clazz->request_size( face->size, req );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Size_Metrics* metrics = &face->size->metrics;
+
+
+ FT_TRACE5(( "FT_Request_Size (font driver's `request_size'):\n" ));
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ }
+#endif
+
+ return error;
+ }
/*
* The reason that a driver doesn't have `request_size' defined is
diff --git a/src/cache/ftcbasic.c b/src/cache/ftcbasic.c
new file mode 100644
index 0000000..09d793e
--- /dev/null
+++ b/src/cache/ftcbasic.c
@@ -0,0 +1,855 @@
+/***************************************************************************/
+/* */
+/* ftcbasic.c */
+/* */
+/* The FreeType basic cache interface (body). */
+/* */
+/* Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_CACHE_H
+#include "ftcglyph.h"
+#include "ftcimage.h"
+#include "ftcsbits.h"
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#define FT_COMPONENT trace_cache
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /*
+ * These structures correspond to the FTC_Font and FTC_ImageDesc types
+ * that were defined in version 2.1.7.
+ */
+ typedef struct FTC_OldFontRec_
+ {
+ FTC_FaceID face_id;
+ FT_UShort pix_width;
+ FT_UShort pix_height;
+
+ } FTC_OldFontRec, *FTC_OldFont;
+
+
+ typedef struct FTC_OldImageDescRec_
+ {
+ FTC_OldFontRec font;
+ FT_UInt32 flags;
+
+ } FTC_OldImageDescRec, *FTC_OldImageDesc;
+
+
+ /*
+ * Notice that FTC_OldImageDescRec and FTC_ImageTypeRec are nearly
+ * identical, bit-wise. The only difference is that the `width' and
+ * `height' fields are expressed as 16-bit integers in the old structure,
+ * and as normal `int' in the new one.
+ *
+ * We are going to perform a weird hack to detect which structure is
+ * being passed to the image and sbit caches. If the new structure's
+ * `width' is larger than 0x10000, we assume that we are really receiving
+ * an FTC_OldImageDesc.
+ */
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ /*
+ * Basic Families
+ *
+ */
+ typedef struct FTC_BasicAttrRec_
+ {
+ FTC_ScalerRec scaler;
+ FT_UInt load_flags;
+
+ } FTC_BasicAttrRec, *FTC_BasicAttrs;
+
+#define FTC_BASIC_ATTR_COMPARE( a, b ) \
+ FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
+ (a)->load_flags == (b)->load_flags )
+
+#define FTC_BASIC_ATTR_HASH( a ) \
+ ( FTC_SCALER_HASH( &(a)->scaler ) + 31*(a)->load_flags )
+
+
+ typedef struct FTC_BasicQueryRec_
+ {
+ FTC_GQueryRec gquery;
+ FTC_BasicAttrRec attrs;
+
+ } FTC_BasicQueryRec, *FTC_BasicQuery;
+
+
+ typedef struct FTC_BasicFamilyRec_
+ {
+ FTC_FamilyRec family;
+ FTC_BasicAttrRec attrs;
+
+ } FTC_BasicFamilyRec, *FTC_BasicFamily;
+
+
+ FT_CALLBACK_DEF( FT_Bool )
+ ftc_basic_family_compare( FTC_MruNode ftcfamily,
+ FT_Pointer ftcquery )
+ {
+ FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
+ FTC_BasicQuery query = (FTC_BasicQuery)ftcquery;
+
+
+ return FTC_BASIC_ATTR_COMPARE( &family->attrs, &query->attrs );
+ }
+
+
+ FT_CALLBACK_DEF( FT_Error )
+ ftc_basic_family_init( FTC_MruNode ftcfamily,
+ FT_Pointer ftcquery,
+ FT_Pointer ftccache )
+ {
+ FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
+ FTC_BasicQuery query = (FTC_BasicQuery)ftcquery;
+ FTC_Cache cache = (FTC_Cache)ftccache;
+
+
+ FTC_Family_Init( FTC_FAMILY( family ), cache );
+ family->attrs = query->attrs;
+ return 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ ftc_basic_family_get_count( FTC_Family ftcfamily,
+ FTC_Manager manager )
+ {
+ FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
+ FT_Error error;
+ FT_Face face;
+ FT_UInt result = 0;
+
+
+ error = FTC_Manager_LookupFace( manager, family->attrs.scaler.face_id,
+ &face );
+
+ if ( error || !face )
+ return result;
+
+ if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
+ {
+ FT_TRACE1(( "ftc_basic_family_get_count: too large number of glyphs " ));
+ FT_TRACE1(( "in this face, truncated\n", face->num_glyphs ));
+ }
+
+ if ( !error )
+ result = (FT_UInt)face->num_glyphs;
+
+ return result;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Error )
+ ftc_basic_family_load_bitmap( FTC_Family ftcfamily,
+ FT_UInt gindex,
+ FTC_Manager manager,
+ FT_Face *aface )
+ {
+ FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
+ FT_Error error;
+ FT_Size size;
+
+
+ error = FTC_Manager_LookupSize( manager, &family->attrs.scaler, &size );
+ if ( !error )
+ {
+ FT_Face face = size->face;
+
+
+ error = FT_Load_Glyph( face, gindex,
+ family->attrs.load_flags | FT_LOAD_RENDER );
+ if ( !error )
+ *aface = face;
+ }
+
+ return error;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Error )
+ ftc_basic_family_load_glyph( FTC_Family ftcfamily,
+ FT_UInt gindex,
+ FTC_Cache cache,
+ FT_Glyph *aglyph )
+ {
+ FTC_BasicFamily family = (FTC_BasicFamily)ftcfamily;
+ FT_Error error;
+ FTC_Scaler scaler = &family->attrs.scaler;
+ FT_Face face;
+ FT_Size size;
+
+
+ /* we will now load the glyph image */
+ error = FTC_Manager_LookupSize( cache->manager,
+ scaler,
+ &size );
+ if ( !error )
+ {
+ face = size->face;
+
+ error = FT_Load_Glyph( face, gindex, family->attrs.load_flags );
+ if ( !error )
+ {
+ if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP ||
+ face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
+ {
+ /* ok, copy it */
+ FT_Glyph glyph;
+
+
+ error = FT_Get_Glyph( face->glyph, &glyph );
+ if ( !error )
+ {
+ *aglyph = glyph;
+ goto Exit;
+ }
+ }
+ else
+ error = FTC_Err_Invalid_Argument;
+ }
+ }
+
+ Exit:
+ return error;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Bool )
+ ftc_basic_gnode_compare_faceid( FTC_Node ftcgnode,
+ FT_Pointer ftcface_id,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ FTC_GNode gnode = (FTC_GNode)ftcgnode;
+ FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
+ FTC_BasicFamily family = (FTC_BasicFamily)gnode->family;
+ FT_Bool result;
+
+
+ if ( list_changed )
+ *list_changed = FALSE;
+ result = FT_BOOL( family->attrs.scaler.face_id == face_id );
+ if ( result )
+ {
+ /* we must call this function to avoid this node from appearing
+ * in later lookups with the same face_id!
+ */
+ FTC_GNode_UnselectFamily( gnode, cache );
+ }
+ return result;
+ }
+
+
+ /*
+ *
+ * basic image cache
+ *
+ */
+
+ FT_CALLBACK_TABLE_DEF
+ const FTC_IFamilyClassRec ftc_basic_image_family_class =
+ {
+ {
+ sizeof ( FTC_BasicFamilyRec ),
+ ftc_basic_family_compare,
+ ftc_basic_family_init,
+ 0, /* FTC_MruNode_ResetFunc */
+ 0 /* FTC_MruNode_DoneFunc */
+ },
+ ftc_basic_family_load_glyph
+ };
+
+
+ FT_CALLBACK_TABLE_DEF
+ const FTC_GCacheClassRec ftc_basic_image_cache_class =
+ {
+ {
+ ftc_inode_new,
+ ftc_inode_weight,
+ ftc_gnode_compare,
+ ftc_basic_gnode_compare_faceid,
+ ftc_inode_free,
+
+ sizeof ( FTC_GCacheRec ),
+ ftc_gcache_init,
+ ftc_gcache_done
+ },
+ (FTC_MruListClass)&ftc_basic_image_family_class
+ };
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_ImageCache_New( FTC_Manager manager,
+ FTC_ImageCache *acache )
+ {
+ return FTC_GCache_New( manager, &ftc_basic_image_cache_class,
+ (FTC_GCache*)acache );
+ }
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_ImageCache_Lookup( FTC_ImageCache cache,
+ FTC_ImageType type,
+ FT_UInt gindex,
+ FT_Glyph *aglyph,
+ FTC_Node *anode )
+ {
+ FTC_BasicQueryRec query;
+ FTC_Node node = 0; /* make compiler happy */
+ FT_Error error;
+ FT_PtrDist hash;
+
+
+ /* some argument checks are delayed to FTC_Cache_Lookup */
+ if ( !aglyph )
+ {
+ error = FTC_Err_Invalid_Argument;
+ goto Exit;
+ }
+
+ *aglyph = NULL;
+ if ( anode )
+ *anode = NULL;
+
+#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
+
+ /*
+ * This one is a major hack used to detect whether we are passed a
+ * regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
+ */
+ if ( (FT_ULong)type->width >= 0x10000L )
+ {
+ FTC_OldImageDesc desc = (FTC_OldImageDesc)type;
+
+
+ query.attrs.scaler.face_id = desc->font.face_id;
+ query.attrs.scaler.width = desc->font.pix_width;
+ query.attrs.scaler.height = desc->font.pix_height;
+ query.attrs.load_flags = desc->flags;
+ }
+ else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+ {
+ if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
+ {
+ FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
+ FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
+ }
+
+ query.attrs.scaler.face_id = type->face_id;
+ query.attrs.scaler.width = type->width;
+ query.attrs.scaler.height = type->height;
+ query.attrs.load_flags = (FT_UInt)type->flags;
+ }
+
+ query.attrs.scaler.pixel = 1;
+ query.attrs.scaler.x_res = 0; /* make compilers happy */
+ query.attrs.scaler.y_res = 0;
+
+ hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
+
+#if 1 /* inlining is about 50% faster! */
+ FTC_GCACHE_LOOKUP_CMP( cache,
+ ftc_basic_family_compare,
+ FTC_GNode_Compare,
+ hash, gindex,
+ &query,
+ node,
+ error );
+#else
+ error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
+ hash, gindex,
+ FTC_GQUERY( &query ),
+ &node );
+#endif
+ if ( !error )
+ {
+ *aglyph = FTC_INODE( node )->glyph;
+
+ if ( anode )
+ {
+ *anode = node;
+ node->ref_count++;
+ }
+ }
+
+ Exit:
+ return error;
+ }
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_ImageCache_LookupScaler( FTC_ImageCache cache,
+ FTC_Scaler scaler,
+ FT_ULong load_flags,
+ FT_UInt gindex,
+ FT_Glyph *aglyph,
+ FTC_Node *anode )
+ {
+ FTC_BasicQueryRec query;
+ FTC_Node node = 0; /* make compiler happy */
+ FT_Error error;
+ FT_PtrDist hash;
+
+
+ /* some argument checks are delayed to FTC_Cache_Lookup */
+ if ( !aglyph || !scaler )
+ {
+ error = FTC_Err_Invalid_Argument;
+ goto Exit;
+ }
+
+ *aglyph = NULL;
+ if ( anode )
+ *anode = NULL;
+
+ /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
+ if ( load_flags > FT_UINT_MAX )
+ {
+ FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
+ FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
+ }
+
+ query.attrs.scaler = scaler[0];
+ query.attrs.load_flags = (FT_UInt)load_flags;
+
+ hash = FTC_BASIC_ATTR_HASH( &query.attrs ) + gindex;
+
+ FTC_GCACHE_LOOKUP_CMP( cache,
+ ftc_basic_family_compare,
+ FTC_GNode_Compare,
+ hash, gindex,
+ &query,
+ node,
+ error );
+ if ( !error )
+ {
+ *aglyph = FTC_INODE( node )->glyph;
+
+ if ( anode )
+ {
+ *anode = node;
+ node->ref_count++;
+ }
+ }
+
+ Exit:
+ return error;
+ }
+
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /* yet another backwards-legacy structure */
+ typedef struct FTC_OldImage_Desc_
+ {
+ FTC_FontRec font;
+ FT_UInt image_type;
+
+ } FTC_OldImage_Desc;
+
+
+#define FTC_OLD_IMAGE_FORMAT( x ) ( (x) & 7 )
+
+
+#define ftc_old_image_format_bitmap 0x0000
+#define ftc_old_image_format_outline 0x0001
+
+#define ftc_old_image_format_mask 0x000F
+
+#define ftc_old_image_flag_monochrome 0x0010
+#define ftc_old_image_flag_unhinted 0x0020
+#define ftc_old_image_flag_autohinted 0x0040
+#define ftc_old_image_flag_unscaled 0x0080
+#define ftc_old_image_flag_no_sbits 0x0100
+
+ /* monochrome bitmap */
+#define ftc_old_image_mono ftc_old_image_format_bitmap | \
+ ftc_old_image_flag_monochrome
+
+ /* anti-aliased bitmap */
+#define ftc_old_image_grays ftc_old_image_format_bitmap
+
+ /* scaled outline */
+#define ftc_old_image_outline ftc_old_image_format_outline
+
+
+ static void
+ ftc_image_type_from_old_desc( FTC_ImageType typ,
+ FTC_OldImage_Desc* desc )
+ {
+ typ->face_id = desc->font.face_id;
+ typ->width = desc->font.pix_width;
+ typ->height = desc->font.pix_height;
+
+ /* convert image type flags to load flags */
+ {
+ FT_UInt load_flags = FT_LOAD_DEFAULT;
+ FT_UInt type = desc->image_type;
+
+
+ /* determine load flags, depending on the font description's */
+ /* image type */
+
+ if ( FTC_OLD_IMAGE_FORMAT( type ) == ftc_old_image_format_bitmap )
+ {
+ if ( type & ftc_old_image_flag_monochrome )
+ load_flags |= FT_LOAD_MONOCHROME;
+
+ /* disable embedded bitmaps loading if necessary */
+ if ( type & ftc_old_image_flag_no_sbits )
+ load_flags |= FT_LOAD_NO_BITMAP;
+ }
+ else
+ {
+ /* we want an outline, don't load embedded bitmaps */
+ load_flags |= FT_LOAD_NO_BITMAP;
+
+ if ( type & ftc_old_image_flag_unscaled )
+ load_flags |= FT_LOAD_NO_SCALE;
+ }
+
+ /* always render glyphs to bitmaps */
+ load_flags |= FT_LOAD_RENDER;
+
+ if ( type & ftc_old_image_flag_unhinted )
+ load_flags |= FT_LOAD_NO_HINTING;
+
+ if ( type & ftc_old_image_flag_autohinted )
+ load_flags |= FT_LOAD_FORCE_AUTOHINT;
+
+ typ->flags = load_flags;
+ }
+ }
+
+
+ FT_EXPORT( FT_Error )
+ FTC_Image_Cache_New( FTC_Manager manager,
+ FTC_ImageCache *acache );
+
+ FT_EXPORT( FT_Error )
+ FTC_Image_Cache_Lookup( FTC_ImageCache icache,
+ FTC_OldImage_Desc* desc,
+ FT_UInt gindex,
+ FT_Glyph *aglyph );
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_Image_Cache_New( FTC_Manager manager,
+ FTC_ImageCache *acache )
+ {
+ return FTC_ImageCache_New( manager, (FTC_ImageCache*)acache );
+ }
+
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_Image_Cache_Lookup( FTC_ImageCache icache,
+ FTC_OldImage_Desc* desc,
+ FT_UInt gindex,
+ FT_Glyph *aglyph )
+ {
+ FTC_ImageTypeRec type0;
+
+
+ if ( !desc )
+ return FTC_Err_Invalid_Argument;
+
+ ftc_image_type_from_old_desc( &type0, desc );
+
+ return FTC_ImageCache_Lookup( (FTC_ImageCache)icache,
+ &type0,
+ gindex,
+ aglyph,
+ NULL );
+ }
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ /*
+ *
+ * basic small bitmap cache
+ *
+ */
+
+
+ FT_CALLBACK_TABLE_DEF
+ const FTC_SFamilyClassRec ftc_basic_sbit_family_class =
+ {
+ {
+ sizeof( FTC_BasicFamilyRec ),
+ ftc_basic_family_compare,
+ ftc_basic_family_init,
+ 0, /* FTC_MruNode_ResetFunc */
+ 0 /* FTC_MruNode_DoneFunc */
+ },
+ ftc_basic_family_get_count,
+ ftc_basic_family_load_bitmap
+ };
+
+
+ FT_CALLBACK_TABLE_DEF
+ const FTC_GCacheClassRec ftc_basic_sbit_cache_class =
+ {
+ {
+ ftc_snode_new,
+ ftc_snode_weight,
+ ftc_snode_compare,
+ ftc_basic_gnode_compare_faceid,
+ ftc_snode_free,
+
+ sizeof ( FTC_GCacheRec ),
+ ftc_gcache_init,
+ ftc_gcache_done
+ },
+ (FTC_MruListClass)&ftc_basic_sbit_family_class
+ };
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_SBitCache_New( FTC_Manager manager,
+ FTC_SBitCache *acache )
+ {
+ return FTC_GCache_New( manager, &ftc_basic_sbit_cache_class,
+ (FTC_GCache*)acache );
+ }
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_SBitCache_Lookup( FTC_SBitCache cache,
+ FTC_ImageType type,
+ FT_UInt gindex,
+ FTC_SBit *ansbit,
+ FTC_Node *anode )
+ {
+ FT_Error error;
+ FTC_BasicQueryRec query;
+ FTC_Node node = 0; /* make compiler happy */
+ FT_PtrDist hash;
+
+
+ if ( anode )
+ *anode = NULL;
+
+ /* other argument checks delayed to FTC_Cache_Lookup */
+ if ( !ansbit )
+ return FTC_Err_Invalid_Argument;
+
+ *ansbit = NULL;
+
+#if defined( FT_CONFIG_OPTION_OLD_INTERNALS ) && ( FT_INT_MAX > 0xFFFFU )
+
+ /* This one is a major hack used to detect whether we are passed a
+ * regular FTC_ImageType handle, or a legacy FTC_OldImageDesc one.
+ */
+ if ( (FT_ULong)type->width >= 0x10000L )
+ {
+ FTC_OldImageDesc desc = (FTC_OldImageDesc)type;
+
+
+ query.attrs.scaler.face_id = desc->font.face_id;
+ query.attrs.scaler.width = desc->font.pix_width;
+ query.attrs.scaler.height = desc->font.pix_height;
+ query.attrs.load_flags = desc->flags;
+ }
+ else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+ {
+ if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
+ {
+ FT_TRACE1(( "FTC_ImageCache_Lookup: higher bits in load_flags" ));
+ FT_TRACE1(( "0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX)) ));
+ }
+
+ query.attrs.scaler.face_id = type->face_id;
+ query.attrs.scaler.width = type->width;
+ query.attrs.scaler.height = type->height;
+ query.attrs.load_flags = (FT_UInt)type->flags;
+ }
+
+ query.attrs.scaler.pixel = 1;
+ query.attrs.scaler.x_res = 0; /* make compilers happy */
+ query.attrs.scaler.y_res = 0;
+
+ /* beware, the hash must be the same for all glyph ranges! */
+ hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
+ gindex / FTC_SBIT_ITEMS_PER_NODE;
+
+#if 1 /* inlining is about 50% faster! */
+ FTC_GCACHE_LOOKUP_CMP( cache,
+ ftc_basic_family_compare,
+ FTC_SNode_Compare,
+ hash, gindex,
+ &query,
+ node,
+ error );
+#else
+ error = FTC_GCache_Lookup( FTC_GCACHE( cache ),
+ hash,
+ gindex,
+ FTC_GQUERY( &query ),
+ &node );
+#endif
+ if ( error )
+ goto Exit;
+
+ *ansbit = FTC_SNODE( node )->sbits +
+ ( gindex - FTC_GNODE( node )->gindex );
+
+ if ( anode )
+ {
+ *anode = node;
+ node->ref_count++;
+ }
+
+ Exit:
+ return error;
+ }
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
+ FTC_Scaler scaler,
+ FT_ULong load_flags,
+ FT_UInt gindex,
+ FTC_SBit *ansbit,
+ FTC_Node *anode )
+ {
+ FT_Error error;
+ FTC_BasicQueryRec query;
+ FTC_Node node = 0; /* make compiler happy */
+ FT_PtrDist hash;
+
+
+ if ( anode )
+ *anode = NULL;
+
+ /* other argument checks delayed to FTC_Cache_Lookup */
+ if ( !ansbit || !scaler )
+ return FTC_Err_Invalid_Argument;
+
+ *ansbit = NULL;
+
+ /* FT_Load_Glyph(), FT_Load_Char() take FT_UInt flags */
+ if ( load_flags > FT_UINT_MAX )
+ {
+ FT_TRACE1(( "FTC_ImageCache_LookupScaler: higher bits in load_flags" ));
+ FT_TRACE1(( "0x%x are dropped\n", (load_flags & ~((FT_ULong)FT_UINT_MAX)) ));
+ }
+
+ query.attrs.scaler = scaler[0];
+ query.attrs.load_flags = (FT_UInt)load_flags;
+
+ /* beware, the hash must be the same for all glyph ranges! */
+ hash = FTC_BASIC_ATTR_HASH( &query.attrs ) +
+ gindex / FTC_SBIT_ITEMS_PER_NODE;
+
+ FTC_GCACHE_LOOKUP_CMP( cache,
+ ftc_basic_family_compare,
+ FTC_SNode_Compare,
+ hash, gindex,
+ &query,
+ node,
+ error );
+ if ( error )
+ goto Exit;
+
+ *ansbit = FTC_SNODE( node )->sbits +
+ ( gindex - FTC_GNODE( node )->gindex );
+
+ if ( anode )
+ {
+ *anode = node;
+ node->ref_count++;
+ }
+
+ Exit:
+ return error;
+ }
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ FT_EXPORT( FT_Error )
+ FTC_SBit_Cache_New( FTC_Manager manager,
+ FTC_SBitCache *acache );
+
+ FT_EXPORT( FT_Error )
+ FTC_SBit_Cache_Lookup( FTC_SBitCache cache,
+ FTC_OldImage_Desc* desc,
+ FT_UInt gindex,
+ FTC_SBit *ansbit );
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_SBit_Cache_New( FTC_Manager manager,
+ FTC_SBitCache *acache )
+ {
+ return FTC_SBitCache_New( manager, (FTC_SBitCache*)acache );
+ }
+
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_SBit_Cache_Lookup( FTC_SBitCache cache,
+ FTC_OldImage_Desc* desc,
+ FT_UInt gindex,
+ FTC_SBit *ansbit )
+ {
+ FTC_ImageTypeRec type0;
+
+
+ if ( !desc )
+ return FTC_Err_Invalid_Argument;
+
+ ftc_image_type_from_old_desc( &type0, desc );
+
+ return FTC_SBitCache_Lookup( (FTC_SBitCache)cache,
+ &type0,
+ gindex,
+ ansbit,
+ NULL );
+ }
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+/* END */
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
new file mode 100644
index 0000000..f01c403
--- /dev/null
+++ b/src/cache/ftccache.c
@@ -0,0 +1,626 @@
+/***************************************************************************/
+/* */
+/* ftccache.c */
+/* */
+/* The FreeType internal cache interface (body). */
+/* */
+/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, */
+/* 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include "ftcmanag.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_cache
+
+
+#define FTC_HASH_MAX_LOAD 2
+#define FTC_HASH_MIN_LOAD 1
+#define FTC_HASH_SUB_LOAD ( FTC_HASH_MAX_LOAD - FTC_HASH_MIN_LOAD )
+
+ /* this one _must_ be a power of 2! */
+#define FTC_HASH_INITIAL_SIZE 8
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CACHE NODE DEFINITIONS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /* add a new node to the head of the manager's circular MRU list */
+ static void
+ ftc_node_mru_link( FTC_Node node,
+ FTC_Manager manager )
+ {
+ void *nl = &manager->nodes_list;
+
+
+ FTC_MruNode_Prepend( (FTC_MruNode*)nl,
+ (FTC_MruNode)node );
+ manager->num_nodes++;
+ }
+
+
+ /* remove a node from the manager's MRU list */
+ static void
+ ftc_node_mru_unlink( FTC_Node node,
+ FTC_Manager manager )
+ {
+ void *nl = &manager->nodes_list;
+
+
+ FTC_MruNode_Remove( (FTC_MruNode*)nl,
+ (FTC_MruNode)node );
+ manager->num_nodes--;
+ }
+
+
+#ifndef FTC_INLINE
+
+ /* move a node to the head of the manager's MRU list */
+ static void
+ ftc_node_mru_up( FTC_Node node,
+ FTC_Manager manager )
+ {
+ FTC_MruNode_Up( (FTC_MruNode*)&manager->nodes_list,
+ (FTC_MruNode)node );
+ }
+
+
+ /* get a top bucket for specified hash from cache,
+ * body for FTC_NODE__TOP_FOR_HASH( cache, hash )
+ */
+ FT_LOCAL_DEF( FTC_Node* )
+ ftc_get_top_node_for_hash( FTC_Cache cache,
+ FT_PtrDist hash )
+ {
+ FTC_Node* pnode;
+ FT_UInt idx;
+
+
+ idx = (FT_UInt)( hash & cache->mask );
+ if ( idx < cache->p )
+ idx = (FT_UInt)( hash & ( 2 * cache->mask + 1 ) );
+ pnode = cache->buckets + idx;
+ return pnode;
+ }
+
+#endif /* !FTC_INLINE */
+
+
+ /* Note that this function cannot fail. If we cannot re-size the
+ * buckets array appropriately, we simply degrade the hash table's
+ * performance!
+ */
+ static void
+ ftc_cache_resize( FTC_Cache cache )
+ {
+ for (;;)
+ {
+ FTC_Node node, *pnode;
+ FT_UFast p = cache->p;
+ FT_UFast mask = cache->mask;
+ FT_UFast count = mask + p + 1; /* number of buckets */
+
+
+ /* do we need to shrink the buckets array? */
+ if ( cache->slack < 0 )
+ {
+ FTC_Node new_list = NULL;
+
+
+ /* try to expand the buckets array _before_ splitting
+ * the bucket lists
+ */
+ if ( p >= mask )
+ {
+ FT_Memory memory = cache->memory;
+ FT_Error error;
+
+
+ /* if we can't expand the array, leave immediately */
+ if ( FT_RENEW_ARRAY( cache->buckets,
+ ( mask + 1 ) * 2, ( mask + 1 ) * 4 ) )
+ break;
+ }
+
+ /* split a single bucket */
+ pnode = cache->buckets + p;
+
+ for (;;)
+ {
+ node = *pnode;
+ if ( node == NULL )
+ break;
+
+ if ( node->hash & ( mask + 1 ) )
+ {
+ *pnode = node->link;
+ node->link = new_list;
+ new_list = node;
+ }
+ else
+ pnode = &node->link;
+ }
+
+ cache->buckets[p + mask + 1] = new_list;
+
+ cache->slack += FTC_HASH_MAX_LOAD;
+
+ if ( p >= mask )
+ {
+ cache->mask = 2 * mask + 1;
+ cache->p = 0;
+ }
+ else
+ cache->p = p + 1;
+ }
+
+ /* do we need to expand the buckets array? */
+ else if ( cache->slack > (FT_Long)count * FTC_HASH_SUB_LOAD )
+ {
+ FT_UFast old_index = p + mask;
+ FTC_Node* pold;
+
+
+ if ( old_index + 1 <= FTC_HASH_INITIAL_SIZE )
+ break;
+
+ if ( p == 0 )
+ {
+ FT_Memory memory = cache->memory;
+ FT_Error error;
+
+
+ /* if we can't shrink the array, leave immediately */
+ if ( FT_RENEW_ARRAY( cache->buckets,
+ ( mask + 1 ) * 2, mask + 1 ) )
+ break;
+
+ cache->mask >>= 1;
+ p = cache->mask;
+ }
+ else
+ p--;
+
+ pnode = cache->buckets + p;
+ while ( *pnode )
+ pnode = &(*pnode)->link;
+
+ pold = cache->buckets + old_index;
+ *pnode = *pold;
+ *pold = NULL;
+
+ cache->slack -= FTC_HASH_MAX_LOAD;
+ cache->p = p;
+ }
+
+ /* otherwise, the hash table is balanced */
+ else
+ break;
+ }
+ }
+
+
+ /* remove a node from its cache's hash table */
+ static void
+ ftc_node_hash_unlink( FTC_Node node0,
+ FTC_Cache cache )
+ {
+ FTC_Node *pnode = FTC_NODE__TOP_FOR_HASH( cache, node0->hash );
+
+
+ for (;;)
+ {
+ FTC_Node node = *pnode;
+
+
+ if ( node == NULL )
+ {
+ FT_TRACE0(( "ftc_node_hash_unlink: unknown node\n" ));
+ return;
+ }
+
+ if ( node == node0 )
+ break;
+
+ pnode = &(*pnode)->link;
+ }
+
+ *pnode = node0->link;
+ node0->link = NULL;
+
+ cache->slack++;
+ ftc_cache_resize( cache );
+ }
+
+
+ /* add a node to the `top' of its cache's hash table */
+ static void
+ ftc_node_hash_link( FTC_Node node,
+ FTC_Cache cache )
+ {
+ FTC_Node *pnode = FTC_NODE__TOP_FOR_HASH( cache, node->hash );
+
+
+ node->link = *pnode;
+ *pnode = node;
+
+ cache->slack--;
+ ftc_cache_resize( cache );
+ }
+
+
+ /* remove a node from the cache manager */
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+ FT_BASE_DEF( void )
+#else
+ FT_LOCAL_DEF( void )
+#endif
+ ftc_node_destroy( FTC_Node node,
+ FTC_Manager manager )
+ {
+ FTC_Cache cache;
+
+
+#ifdef FT_DEBUG_ERROR
+ /* find node's cache */
+ if ( node->cache_index >= manager->num_caches )
+ {
+ FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
+ return;
+ }
+#endif
+
+ cache = manager->caches[node->cache_index];
+
+#ifdef FT_DEBUG_ERROR
+ if ( cache == NULL )
+ {
+ FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
+ return;
+ }
+#endif
+
+ manager->cur_weight -= cache->clazz.node_weight( node, cache );
+
+ /* remove node from mru list */
+ ftc_node_mru_unlink( node, manager );
+
+ /* remove node from cache's hash table */
+ ftc_node_hash_unlink( node, cache );
+
+ /* now finalize it */
+ cache->clazz.node_free( node, cache );
+
+#if 0
+ /* check, just in case of general corruption :-) */
+ if ( manager->num_nodes == 0 )
+ FT_TRACE0(( "ftc_node_destroy: invalid cache node count (%d)\n",
+ manager->num_nodes ));
+#endif
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** ABSTRACT CACHE CLASS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_Cache_Init( FTC_Cache cache )
+ {
+ return ftc_cache_init( cache );
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ ftc_cache_init( FTC_Cache cache )
+ {
+ FT_Memory memory = cache->memory;
+ FT_Error error;
+
+
+ cache->p = 0;
+ cache->mask = FTC_HASH_INITIAL_SIZE - 1;
+ cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
+
+ (void)FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
+ return error;
+ }
+
+
+ static void
+ FTC_Cache_Clear( FTC_Cache cache )
+ {
+ if ( cache && cache->buckets )
+ {
+ FTC_Manager manager = cache->manager;
+ FT_UFast i;
+ FT_UFast count;
+
+
+ count = cache->p + cache->mask + 1;
+
+ for ( i = 0; i < count; i++ )
+ {
+ FTC_Node *pnode = cache->buckets + i, next, node = *pnode;
+
+
+ while ( node )
+ {
+ next = node->link;
+ node->link = NULL;
+
+ /* remove node from mru list */
+ ftc_node_mru_unlink( node, manager );
+
+ /* now finalize it */
+ manager->cur_weight -= cache->clazz.node_weight( node, cache );
+
+ cache->clazz.node_free( node, cache );
+ node = next;
+ }
+ cache->buckets[i] = NULL;
+ }
+ ftc_cache_resize( cache );
+ }
+ }
+
+
+ FT_LOCAL_DEF( void )
+ ftc_cache_done( FTC_Cache cache )
+ {
+ if ( cache->memory )
+ {
+ FT_Memory memory = cache->memory;
+
+
+ FTC_Cache_Clear( cache );
+
+ FT_FREE( cache->buckets );
+ cache->mask = 0;
+ cache->p = 0;
+ cache->slack = 0;
+
+ cache->memory = NULL;
+ }
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_Cache_Done( FTC_Cache cache )
+ {
+ ftc_cache_done( cache );
+ }
+
+
+ static void
+ ftc_cache_add( FTC_Cache cache,
+ FT_PtrDist hash,
+ FTC_Node node )
+ {
+ node->hash = hash;
+ node->cache_index = (FT_UInt16)cache->index;
+ node->ref_count = 0;
+
+ ftc_node_hash_link( node, cache );
+ ftc_node_mru_link( node, cache->manager );
+
+ {
+ FTC_Manager manager = cache->manager;
+
+
+ manager->cur_weight += cache->clazz.node_weight( node, cache );
+
+ if ( manager->cur_weight >= manager->max_weight )
+ {
+ node->ref_count++;
+ FTC_Manager_Compress( manager );
+ node->ref_count--;
+ }
+ }
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_Cache_NewNode( FTC_Cache cache,
+ FT_PtrDist hash,
+ FT_Pointer query,
+ FTC_Node *anode )
+ {
+ FT_Error error;
+ FTC_Node node;
+
+
+ /*
+ * We use the FTC_CACHE_TRYLOOP macros to support out-of-memory
+ * errors (OOM) correctly, i.e., by flushing the cache progressively
+ * in order to make more room.
+ */
+
+ FTC_CACHE_TRYLOOP( cache )
+ {
+ error = cache->clazz.node_new( &node, query, cache );
+ }
+ FTC_CACHE_TRYLOOP_END( NULL );
+
+ if ( error )
+ node = NULL;
+ else
+ {
+ /* don't assume that the cache has the same number of buckets, since
+ * our allocation request might have triggered global cache flushing
+ */
+ ftc_cache_add( cache, hash, node );
+ }
+
+ *anode = node;
+ return error;
+ }
+
+
+#ifndef FTC_INLINE
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_Cache_Lookup( FTC_Cache cache,
+ FT_PtrDist hash,
+ FT_Pointer query,
+ FTC_Node *anode )
+ {
+ FTC_Node* bucket;
+ FTC_Node* pnode;
+ FTC_Node node;
+ FT_Error error = FTC_Err_Ok;
+ FT_Bool list_changed = FALSE;
+
+ FTC_Node_CompareFunc compare = cache->clazz.node_compare;
+
+
+ if ( cache == NULL || anode == NULL )
+ return FTC_Err_Invalid_Argument;
+
+ /* Go to the `top' node of the list sharing same masked hash */
+ bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+
+ /* Lookup a node with exactly same hash and queried properties. */
+ /* NOTE: _nodcomp() may change the linked list to reduce memory. */
+ for (;;)
+ {
+ node = *pnode;
+ if ( node == NULL )
+ goto NewNode;
+
+ if ( node->hash == hash &&
+ compare( node, query, cache, &list_changed ) )
+ break;
+
+ pnode = &node->link;
+ }
+
+ if ( list_changed )
+ {
+ /* Update bucket by modified linked list */
+ bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+
+ /* Update pnode by modified linked list */
+ while ( *pnode != node )
+ {
+ if ( *pnode == NULL )
+ {
+ FT_ERROR(( "FTC_Cache_Lookup: oops!!! node missing\n" ));
+ goto NewNode;
+ }
+ else
+ pnode = &((*pnode)->link);
+ }
+ }
+
+ /* Reorder the list to move the found node to the `top' */
+ if ( node != *bucket )
+ {
+ *pnode = node->link;
+ node->link = *bucket;
+ *bucket = node;
+ }
+
+ /* move to head of MRU list */
+ {
+ FTC_Manager manager = cache->manager;
+
+
+ if ( node != manager->nodes_list )
+ ftc_node_mru_up( node, manager );
+ }
+ *anode = node;
+
+ return error;
+
+ NewNode:
+ return FTC_Cache_NewNode( cache, hash, query, anode );
+ }
+
+#endif /* !FTC_INLINE */
+
+
+ FT_LOCAL_DEF( void )
+ FTC_Cache_RemoveFaceID( FTC_Cache cache,
+ FTC_FaceID face_id )
+ {
+ FT_UFast i, count;
+ FTC_Manager manager = cache->manager;
+ FTC_Node frees = NULL;
+
+
+ count = cache->p + cache->mask + 1;
+ for ( i = 0; i < count; i++ )
+ {
+ FTC_Node* bucket = cache->buckets + i;
+ FTC_Node* pnode = bucket;
+
+
+ for ( ;; )
+ {
+ FTC_Node node = *pnode;
+ FT_Bool list_changed = FALSE;
+
+
+ if ( node == NULL )
+ break;
+
+ if ( cache->clazz.node_remove_faceid( node, face_id,
+ cache, &list_changed ) )
+ {
+ *pnode = node->link;
+ node->link = frees;
+ frees = node;
+ }
+ else
+ pnode = &node->link;
+ }
+ }
+
+ /* remove all nodes in the free list */
+ while ( frees )
+ {
+ FTC_Node node;
+
+
+ node = frees;
+ frees = node->link;
+
+ manager->cur_weight -= cache->clazz.node_weight( node, cache );
+ ftc_node_mru_unlink( node, manager );
+
+ cache->clazz.node_free( node, cache );
+
+ cache->slack++;
+ }
+
+ ftc_cache_resize( cache );
+ }
+
+
+/* END */
diff --git a/src/cache/ftccache.h b/src/cache/ftccache.h
new file mode 100644
index 0000000..d60984f
--- /dev/null
+++ b/src/cache/ftccache.h
@@ -0,0 +1,359 @@
+/***************************************************************************/
+/* */
+/* ftccache.h */
+/* */
+/* FreeType internal cache interface (specification). */
+/* */
+/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, */
+/* 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTCCACHE_H__
+#define __FTCCACHE_H__
+
+
+#include "ftcmru.h"
+
+FT_BEGIN_HEADER
+
+#define _FTC_FACE_ID_HASH( i ) \
+ ((FT_PtrDist)(( (FT_PtrDist)(i) >> 3 ) ^ ( (FT_PtrDist)(i) << 7 )))
+
+ /* handle to cache object */
+ typedef struct FTC_CacheRec_* FTC_Cache;
+
+ /* handle to cache class */
+ typedef const struct FTC_CacheClassRec_* FTC_CacheClass;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CACHE NODE DEFINITIONS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* Each cache controls one or more cache nodes. Each node is part of */
+ /* the global_lru list of the manager. Its `data' field however is used */
+ /* as a reference count for now. */
+ /* */
+ /* A node can be anything, depending on the type of information held by */
+ /* the cache. It can be an individual glyph image, a set of bitmaps */
+ /* glyphs for a given size, some metrics, etc. */
+ /* */
+ /*************************************************************************/
+
+ /* structure size should be 20 bytes on 32-bits machines */
+ typedef struct FTC_NodeRec_
+ {
+ FTC_MruNodeRec mru; /* circular mru list pointer */
+ FTC_Node link; /* used for hashing */
+ FT_PtrDist hash; /* used for hashing too */
+ FT_UShort cache_index; /* index of cache the node belongs to */
+ FT_Short ref_count; /* reference count for this node */
+
+ } FTC_NodeRec;
+
+
+#define FTC_NODE( x ) ( (FTC_Node)(x) )
+#define FTC_NODE_P( x ) ( (FTC_Node*)(x) )
+
+#define FTC_NODE__NEXT( x ) FTC_NODE( (x)->mru.next )
+#define FTC_NODE__PREV( x ) FTC_NODE( (x)->mru.prev )
+
+#ifdef FTC_INLINE
+#define FTC_NODE__TOP_FOR_HASH( cache, hash ) \
+ ( ( cache )->buckets + \
+ ( ( ( ( hash ) & ( cache )->mask ) < ( cache )->p ) \
+ ? ( ( hash ) & ( ( cache )->mask * 2 + 1 ) ) \
+ : ( ( hash ) & ( cache )->mask ) ) )
+#else
+ FT_LOCAL( FTC_Node* )
+ ftc_get_top_node_for_hash( FTC_Cache cache,
+ FT_PtrDist hash );
+#define FTC_NODE__TOP_FOR_HASH( cache, hash ) \
+ ftc_get_top_node_for_hash( ( cache ), ( hash ) )
+#endif
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+ FT_BASE( void )
+ ftc_node_destroy( FTC_Node node,
+ FTC_Manager manager );
+#endif
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CACHE DEFINITIONS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /* initialize a new cache node */
+ typedef FT_Error
+ (*FTC_Node_NewFunc)( FTC_Node *pnode,
+ FT_Pointer query,
+ FTC_Cache cache );
+
+ typedef FT_Offset
+ (*FTC_Node_WeightFunc)( FTC_Node node,
+ FTC_Cache cache );
+
+ /* compare a node to a given key pair */
+ typedef FT_Bool
+ (*FTC_Node_CompareFunc)( FTC_Node node,
+ FT_Pointer key,
+ FTC_Cache cache,
+ FT_Bool* list_changed );
+
+
+ typedef void
+ (*FTC_Node_FreeFunc)( FTC_Node node,
+ FTC_Cache cache );
+
+ typedef FT_Error
+ (*FTC_Cache_InitFunc)( FTC_Cache cache );
+
+ typedef void
+ (*FTC_Cache_DoneFunc)( FTC_Cache cache );
+
+
+ typedef struct FTC_CacheClassRec_
+ {
+ FTC_Node_NewFunc node_new;
+ FTC_Node_WeightFunc node_weight;
+ FTC_Node_CompareFunc node_compare;
+ FTC_Node_CompareFunc node_remove_faceid;
+ FTC_Node_FreeFunc node_free;
+
+ FT_Offset cache_size;
+ FTC_Cache_InitFunc cache_init;
+ FTC_Cache_DoneFunc cache_done;
+
+ } FTC_CacheClassRec;
+
+
+ /* each cache really implements a dynamic hash table to manage its nodes */
+ typedef struct FTC_CacheRec_
+ {
+ FT_UFast p;
+ FT_UFast mask;
+ FT_Long slack;
+ FTC_Node* buckets;
+
+ FTC_CacheClassRec clazz; /* local copy, for speed */
+
+ FTC_Manager manager;
+ FT_Memory memory;
+ FT_UInt index; /* in manager's table */
+
+ FTC_CacheClass org_class; /* original class pointer */
+
+ } FTC_CacheRec;
+
+
+#define FTC_CACHE( x ) ( (FTC_Cache)(x) )
+#define FTC_CACHE_P( x ) ( (FTC_Cache*)(x) )
+
+
+ /* default cache initialize */
+ FT_LOCAL( FT_Error )
+ FTC_Cache_Init( FTC_Cache cache );
+
+ /* default cache finalizer */
+ FT_LOCAL( void )
+ FTC_Cache_Done( FTC_Cache cache );
+
+ /* Call this function to look up the cache. If no corresponding
+ * node is found, a new one is automatically created. This function
+ * is capable of flushing the cache adequately to make room for the
+ * new cache object.
+ */
+
+#ifndef FTC_INLINE
+ FT_LOCAL( FT_Error )
+ FTC_Cache_Lookup( FTC_Cache cache,
+ FT_PtrDist hash,
+ FT_Pointer query,
+ FTC_Node *anode );
+#endif
+
+ FT_LOCAL( FT_Error )
+ FTC_Cache_NewNode( FTC_Cache cache,
+ FT_PtrDist hash,
+ FT_Pointer query,
+ FTC_Node *anode );
+
+ /* Remove all nodes that relate to a given face_id. This is useful
+ * when un-installing fonts. Note that if a cache node relates to
+ * the face_id but is locked (i.e., has `ref_count > 0'), the node
+ * will _not_ be destroyed, but its internal face_id reference will
+ * be modified.
+ *
+ * The final result will be that the node will never come back
+ * in further lookup requests, and will be flushed on demand from
+ * the cache normally when its reference count reaches 0.
+ */
+ FT_LOCAL( void )
+ FTC_Cache_RemoveFaceID( FTC_Cache cache,
+ FTC_FaceID face_id );
+
+
+#ifdef FTC_INLINE
+
+#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
+ FT_BEGIN_STMNT \
+ FTC_Node *_bucket, *_pnode, _node; \
+ FTC_Cache _cache = FTC_CACHE(cache); \
+ FT_PtrDist _hash = (FT_PtrDist)(hash); \
+ FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \
+ FT_Bool _list_changed = FALSE; \
+ \
+ \
+ error = FTC_Err_Ok; \
+ node = NULL; \
+ \
+ /* Go to the `top' node of the list sharing same masked hash */ \
+ _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash ); \
+ \
+ /* Look up a node with identical hash and queried properties. */ \
+ /* NOTE: _nodcomp() may change the linked list to reduce memory. */ \
+ for (;;) \
+ { \
+ _node = *_pnode; \
+ if ( _node == NULL ) \
+ goto _NewNode; \
+ \
+ if ( _node->hash == _hash && \
+ _nodcomp( _node, query, _cache, &_list_changed ) ) \
+ break; \
+ \
+ _pnode = &_node->link; \
+ } \
+ \
+ if ( _list_changed ) \
+ { \
+ /* Update _bucket by possibly modified linked list */ \
+ _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash ); \
+ \
+ /* Update _pnode by possibly modified linked list */ \
+ while ( *_pnode != _node ) \
+ { \
+ if ( *_pnode == NULL ) \
+ { \
+ FT_ERROR(( "FTC_CACHE_LOOKUP_CMP: oops!!! node missing\n" )); \
+ goto _NewNode; \
+ } \
+ else \
+ _pnode = &((*_pnode)->link); \
+ } \
+ } \
+ \
+ /* Reorder the list to move the found node to the `top' */ \
+ if ( _node != *_bucket ) \
+ { \
+ *_pnode = _node->link; \
+ _node->link = *_bucket; \
+ *_bucket = _node; \
+ } \
+ \
+ /* Update MRU list */ \
+ { \
+ FTC_Manager _manager = _cache->manager; \
+ void* _nl = &_manager->nodes_list; \
+ \
+ \
+ if ( _node != _manager->nodes_list ) \
+ FTC_MruNode_Up( (FTC_MruNode*)_nl, \
+ (FTC_MruNode)_node ); \
+ } \
+ goto _Ok; \
+ \
+ _NewNode: \
+ error = FTC_Cache_NewNode( _cache, _hash, query, &_node ); \
+ \
+ _Ok: \
+ node = _node; \
+ FT_END_STMNT
+
+#else /* !FTC_INLINE */
+
+#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
+ FT_BEGIN_STMNT \
+ error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, \
+ (FTC_Node*)&(node) ); \
+ FT_END_STMNT
+
+#endif /* !FTC_INLINE */
+
+
+ /*
+ * This macro, together with FTC_CACHE_TRYLOOP_END, defines a retry
+ * loop to flush the cache repeatedly in case of memory overflows.
+ *
+ * It is used when creating a new cache node, or within a lookup
+ * that needs to allocate data (e.g. the sbit cache lookup).
+ *
+ * Example:
+ *
+ * {
+ * FTC_CACHE_TRYLOOP( cache )
+ * error = load_data( ... );
+ * FTC_CACHE_TRYLOOP_END()
+ * }
+ *
+ */
+#define FTC_CACHE_TRYLOOP( cache ) \
+ { \
+ FTC_Manager _try_manager = FTC_CACHE( cache )->manager; \
+ FT_UInt _try_count = 4; \
+ \
+ \
+ for (;;) \
+ { \
+ FT_UInt _try_done;
+
+
+#define FTC_CACHE_TRYLOOP_END( list_changed ) \
+ if ( !error || error != FTC_Err_Out_Of_Memory ) \
+ break; \
+ \
+ _try_done = FTC_Manager_FlushN( _try_manager, _try_count ); \
+ if ( _try_done > 0 && ( list_changed ) ) \
+ *(FT_Bool*)( list_changed ) = TRUE; \
+ \
+ if ( _try_done == 0 ) \
+ break; \
+ \
+ if ( _try_done == _try_count ) \
+ { \
+ _try_count *= 2; \
+ if ( _try_count < _try_done || \
+ _try_count > _try_manager->num_nodes ) \
+ _try_count = _try_manager->num_nodes; \
+ } \
+ } \
+ }
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __FTCCACHE_H__ */
+
+
+/* END */
diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h
new file mode 100644
index 0000000..80ec9ce
--- /dev/null
+++ b/src/cache/ftccback.h
@@ -0,0 +1,92 @@
+/***************************************************************************/
+/* */
+/* ftccback.h */
+/* */
+/* Callback functions of the caching sub-system (specification only). */
+/* */
+/* Copyright 2004, 2005, 2006, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+#ifndef __FTCCBACK_H__
+#define __FTCCBACK_H__
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include "ftcimage.h"
+#include "ftcmanag.h"
+#include "ftcglyph.h"
+#include "ftcsbits.h"
+
+
+ FT_LOCAL( void )
+ ftc_inode_free( FTC_Node inode,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Error )
+ ftc_inode_new( FTC_Node *pinode,
+ FT_Pointer gquery,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Offset )
+ ftc_inode_weight( FTC_Node inode,
+ FTC_Cache cache );
+
+
+ FT_LOCAL( void )
+ ftc_snode_free( FTC_Node snode,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Error )
+ ftc_snode_new( FTC_Node *psnode,
+ FT_Pointer gquery,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Offset )
+ ftc_snode_weight( FTC_Node snode,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Bool )
+ ftc_snode_compare( FTC_Node snode,
+ FT_Pointer gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed );
+
+
+ FT_LOCAL( FT_Bool )
+ ftc_gnode_compare( FTC_Node gnode,
+ FT_Pointer gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed );
+
+
+ FT_LOCAL( FT_Error )
+ ftc_gcache_init( FTC_Cache cache );
+
+ FT_LOCAL( void )
+ ftc_gcache_done( FTC_Cache cache );
+
+
+ FT_LOCAL( FT_Error )
+ ftc_cache_init( FTC_Cache cache );
+
+ FT_LOCAL( void )
+ ftc_cache_done( FTC_Cache cache );
+
+#ifndef FT_CONFIG_OPTION_OLD_INTERNALS
+ FT_LOCAL( void )
+ ftc_node_destroy( FTC_Node node,
+ FTC_Manager manager );
+#endif
+
+#endif /* __FTCCBACK_H__ */
+
+/* END */
diff --git a/src/cache/ftccmap.c b/src/cache/ftccmap.c
new file mode 100644
index 0000000..b7bd291
--- /dev/null
+++ b/src/cache/ftccmap.c
@@ -0,0 +1,438 @@
+/***************************************************************************/
+/* */
+/* ftccmap.c */
+/* */
+/* FreeType CharMap cache (body) */
+/* */
+/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
+/* 2010, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_CACHE_H
+#include "ftcmanag.h"
+#include FT_INTERNAL_MEMORY_H
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_cache
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ typedef enum FTC_OldCMapType_
+ {
+ FTC_OLD_CMAP_BY_INDEX = 0,
+ FTC_OLD_CMAP_BY_ENCODING = 1,
+ FTC_OLD_CMAP_BY_ID = 2
+
+ } FTC_OldCMapType;
+
+
+ typedef struct FTC_OldCMapIdRec_
+ {
+ FT_UInt platform;
+ FT_UInt encoding;
+
+ } FTC_OldCMapIdRec, *FTC_OldCMapId;
+
+
+ typedef struct FTC_OldCMapDescRec_
+ {
+ FTC_FaceID face_id;
+ FTC_OldCMapType type;
+
+ union
+ {
+ FT_UInt index;
+ FT_Encoding encoding;
+ FTC_OldCMapIdRec id;
+
+ } u;
+
+ } FTC_OldCMapDescRec, *FTC_OldCMapDesc;
+
+#endif /* FT_CONFIG_OLD_INTERNALS */
+
+
+ /*************************************************************************/
+ /* */
+ /* Each FTC_CMapNode contains a simple array to map a range of character */
+ /* codes to equivalent glyph indices. */
+ /* */
+ /* For now, the implementation is very basic: Each node maps a range of */
+ /* 128 consecutive character codes to their corresponding glyph indices. */
+ /* */
+ /* We could do more complex things, but I don't think it is really very */
+ /* useful. */
+ /* */
+ /*************************************************************************/
+
+
+ /* number of glyph indices / character code per node */
+#define FTC_CMAP_INDICES_MAX 128
+
+ /* compute a query/node hash */
+#define FTC_CMAP_HASH( faceid, index, charcode ) \
+ ( _FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
+ ( (charcode) / FTC_CMAP_INDICES_MAX ) )
+
+ /* the charmap query */
+ typedef struct FTC_CMapQueryRec_
+ {
+ FTC_FaceID face_id;
+ FT_UInt cmap_index;
+ FT_UInt32 char_code;
+
+ } FTC_CMapQueryRec, *FTC_CMapQuery;
+
+#define FTC_CMAP_QUERY( x ) ((FTC_CMapQuery)(x))
+#define FTC_CMAP_QUERY_HASH( x ) \
+ FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->char_code )
+
+ /* the cmap cache node */
+ typedef struct FTC_CMapNodeRec_
+ {
+ FTC_NodeRec node;
+ FTC_FaceID face_id;
+ FT_UInt cmap_index;
+ FT_UInt32 first; /* first character in node */
+ FT_UInt16 indices[FTC_CMAP_INDICES_MAX]; /* array of glyph indices */
+
+ } FTC_CMapNodeRec, *FTC_CMapNode;
+
+#define FTC_CMAP_NODE( x ) ( (FTC_CMapNode)( x ) )
+#define FTC_CMAP_NODE_HASH( x ) \
+ FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->first )
+
+ /* if (indices[n] == FTC_CMAP_UNKNOWN), we assume that the corresponding */
+ /* glyph indices haven't been queried through FT_Get_Glyph_Index() yet */
+#define FTC_CMAP_UNKNOWN ( (FT_UInt16)-1 )
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CHARMAP NODES *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ FT_CALLBACK_DEF( void )
+ ftc_cmap_node_free( FTC_Node ftcnode,
+ FTC_Cache cache )
+ {
+ FTC_CMapNode node = (FTC_CMapNode)ftcnode;
+ FT_Memory memory = cache->memory;
+
+
+ FT_FREE( node );
+ }
+
+
+ /* initialize a new cmap node */
+ FT_CALLBACK_DEF( FT_Error )
+ ftc_cmap_node_new( FTC_Node *ftcanode,
+ FT_Pointer ftcquery,
+ FTC_Cache cache )
+ {
+ FTC_CMapNode *anode = (FTC_CMapNode*)ftcanode;
+ FTC_CMapQuery query = (FTC_CMapQuery)ftcquery;
+ FT_Error error;
+ FT_Memory memory = cache->memory;
+ FTC_CMapNode node = NULL;
+ FT_UInt nn;
+
+
+ if ( !FT_NEW( node ) )
+ {
+ node->face_id = query->face_id;
+ node->cmap_index = query->cmap_index;
+ node->first = (query->char_code / FTC_CMAP_INDICES_MAX) *
+ FTC_CMAP_INDICES_MAX;
+
+ for ( nn = 0; nn < FTC_CMAP_INDICES_MAX; nn++ )
+ node->indices[nn] = FTC_CMAP_UNKNOWN;
+ }
+
+ *anode = node;
+ return error;
+ }
+
+
+ /* compute the weight of a given cmap node */
+ FT_CALLBACK_DEF( FT_Offset )
+ ftc_cmap_node_weight( FTC_Node cnode,
+ FTC_Cache cache )
+ {
+ FT_UNUSED( cnode );
+ FT_UNUSED( cache );
+
+ return sizeof ( *cnode );
+ }
+
+
+ /* compare a cmap node to a given query */
+ FT_CALLBACK_DEF( FT_Bool )
+ ftc_cmap_node_compare( FTC_Node ftcnode,
+ FT_Pointer ftcquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ FTC_CMapNode node = (FTC_CMapNode)ftcnode;
+ FTC_CMapQuery query = (FTC_CMapQuery)ftcquery;
+ FT_UNUSED( cache );
+
+
+ if ( list_changed )
+ *list_changed = FALSE;
+ if ( node->face_id == query->face_id &&
+ node->cmap_index == query->cmap_index )
+ {
+ FT_UInt32 offset = (FT_UInt32)( query->char_code - node->first );
+
+
+ return FT_BOOL( offset < FTC_CMAP_INDICES_MAX );
+ }
+
+ return 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Bool )
+ ftc_cmap_node_remove_faceid( FTC_Node ftcnode,
+ FT_Pointer ftcface_id,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ FTC_CMapNode node = (FTC_CMapNode)ftcnode;
+ FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
+ FT_UNUSED( cache );
+
+
+ if ( list_changed )
+ *list_changed = FALSE;
+ return FT_BOOL( node->face_id == face_id );
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** GLYPH IMAGE CACHE *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ FT_CALLBACK_TABLE_DEF
+ const FTC_CacheClassRec ftc_cmap_cache_class =
+ {
+ ftc_cmap_node_new,
+ ftc_cmap_node_weight,
+ ftc_cmap_node_compare,
+ ftc_cmap_node_remove_faceid,
+ ftc_cmap_node_free,
+
+ sizeof ( FTC_CacheRec ),
+ ftc_cache_init,
+ ftc_cache_done,
+ };
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FTC_CMapCache_New( FTC_Manager manager,
+ FTC_CMapCache *acache )
+ {
+ return FTC_Manager_RegisterCache( manager,
+ &ftc_cmap_cache_class,
+ FTC_CACHE_P( acache ) );
+ }
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /*
+ * Unfortunately, it is not possible to support binary backwards
+ * compatibility in the cmap cache. The FTC_CMapCache_Lookup signature
+ * changes were too deep, and there is no clever hackish way to detect
+ * what kind of structure we are being passed.
+ *
+ * On the other hand it seems that no production code is using this
+ * function on Unix distributions.
+ */
+
+#endif
+
+
+ /* documentation is in ftcache.h */
+
+ FT_EXPORT_DEF( FT_UInt )
+ FTC_CMapCache_Lookup( FTC_CMapCache cmap_cache,
+ FTC_FaceID face_id,
+ FT_Int cmap_index,
+ FT_UInt32 char_code )
+ {
+ FTC_Cache cache = FTC_CACHE( cmap_cache );
+ FTC_CMapQueryRec query;
+ FTC_Node node;
+ FT_Error error;
+ FT_UInt gindex = 0;
+ FT_PtrDist hash;
+ FT_Int no_cmap_change = 0;
+
+
+ if ( cmap_index < 0 )
+ {
+ /* Treat a negative cmap index as a special value, meaning that you */
+ /* don't want to change the FT_Face's character map through this */
+ /* call. This can be useful if the face requester callback already */
+ /* sets the face's charmap to the appropriate value. */
+
+ no_cmap_change = 1;
+ cmap_index = 0;
+ }
+
+ if ( !cache )
+ {
+ FT_TRACE0(( "FTC_CMapCache_Lookup: bad arguments, returning 0\n" ));
+ return 0;
+ }
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /*
+ * If cmap_index is greater than the maximum number of cachable
+ * charmaps, we assume the request is from a legacy rogue client
+ * using old internal header. See include/config/ftoption.h.
+ */
+ if ( cmap_index > FT_MAX_CHARMAP_CACHEABLE && !no_cmap_change )
+ {
+ FTC_OldCMapDesc desc = (FTC_OldCMapDesc) face_id;
+
+
+ char_code = (FT_UInt32)cmap_index;
+ query.face_id = desc->face_id;
+
+
+ switch ( desc->type )
+ {
+ case FTC_OLD_CMAP_BY_INDEX:
+ query.cmap_index = desc->u.index;
+ query.char_code = (FT_UInt32)cmap_index;
+ break;
+
+ case FTC_OLD_CMAP_BY_ENCODING:
+ {
+ FT_Face face;
+
+
+ error = FTC_Manager_LookupFace( cache->manager, desc->face_id,
+ &face );
+ if ( error )
+ return 0;
+
+ FT_Select_Charmap( face, desc->u.encoding );
+
+ return FT_Get_Char_Index( face, char_code );
+ }
+
+ default:
+ return 0;
+ }
+ }
+ else
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+ {
+ query.face_id = face_id;
+ query.cmap_index = (FT_UInt)cmap_index;
+ query.char_code = char_code;
+ }
+
+ hash = FTC_CMAP_HASH( face_id, cmap_index, char_code );
+
+#if 1
+ FTC_CACHE_LOOKUP_CMP( cache, ftc_cmap_node_compare, hash, &query,
+ node, error );
+#else
+ error = FTC_Cache_Lookup( cache, hash, &query, &node );
+#endif
+ if ( error )
+ goto Exit;
+
+ FT_ASSERT( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first ) <
+ FTC_CMAP_INDICES_MAX );
+
+ /* something rotten can happen with rogue clients */
+ if ( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first >=
+ FTC_CMAP_INDICES_MAX ) )
+ return 0; /* XXX: should return appropriate error */
+
+ gindex = FTC_CMAP_NODE( node )->indices[char_code -
+ FTC_CMAP_NODE( node )->first];
+ if ( gindex == FTC_CMAP_UNKNOWN )
+ {
+ FT_Face face;
+
+
+ gindex = 0;
+
+ error = FTC_Manager_LookupFace( cache->manager,
+ FTC_CMAP_NODE( node )->face_id,
+ &face );
+ if ( error )
+ goto Exit;
+
+#ifdef FT_MAX_CHARMAP_CACHEABLE
+ /* something rotten can happen with rogue clients */
+ if ( cmap_index > FT_MAX_CHARMAP_CACHEABLE )
+ return 0; /* XXX: should return appropriate error */
+#endif
+
+ if ( (FT_UInt)cmap_index < (FT_UInt)face->num_charmaps )
+ {
+ FT_CharMap old, cmap = NULL;
+
+
+ old = face->charmap;
+ cmap = face->charmaps[cmap_index];
+
+ if ( old != cmap && !no_cmap_change )
+ FT_Set_Charmap( face, cmap );
+
+ gindex = FT_Get_Char_Index( face, char_code );
+
+ if ( old != cmap && !no_cmap_change )
+ FT_Set_Charmap( face, old );
+ }
+
+ FTC_CMAP_NODE( node )->indices[char_code -
+ FTC_CMAP_NODE( node )->first]
+ = (FT_UShort)gindex;
+ }
+
+ Exit:
+ return gindex;
+ }
+
+
+/* END */
diff --git a/src/cache/ftcglyph.c b/src/cache/ftcglyph.c
new file mode 100644
index 0000000..441e177
--- /dev/null
+++ b/src/cache/ftcglyph.c
@@ -0,0 +1,219 @@
+/***************************************************************************/
+/* */
+/* ftcglyph.c */
+/* */
+/* FreeType Glyph Image (FT_Glyph) cache (body). */
+/* */
+/* Copyright 2000-2001, 2003, 2004, 2006, 2009, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_OBJECTS_H
+#include FT_CACHE_H
+#include "ftcglyph.h"
+#include FT_ERRORS_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+
+ /* create a new chunk node, setting its cache index and ref count */
+ FT_LOCAL_DEF( void )
+ FTC_GNode_Init( FTC_GNode gnode,
+ FT_UInt gindex,
+ FTC_Family family )
+ {
+ gnode->family = family;
+ gnode->gindex = gindex;
+ family->num_nodes++;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_GNode_UnselectFamily( FTC_GNode gnode,
+ FTC_Cache cache )
+ {
+ FTC_Family family = gnode->family;
+
+
+ gnode->family = NULL;
+ if ( family && --family->num_nodes == 0 )
+ FTC_FAMILY_FREE( family, cache );
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_GNode_Done( FTC_GNode gnode,
+ FTC_Cache cache )
+ {
+ /* finalize the node */
+ gnode->gindex = 0;
+
+ FTC_GNode_UnselectFamily( gnode, cache );
+ }
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ ftc_gnode_compare( FTC_Node ftcgnode,
+ FT_Pointer ftcgquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ FTC_GNode gnode = (FTC_GNode)ftcgnode;
+ FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
+ FT_UNUSED( cache );
+
+
+ if ( list_changed )
+ *list_changed = FALSE;
+ return FT_BOOL( gnode->family == gquery->family &&
+ gnode->gindex == gquery->gindex );
+ }
+
+
+#ifdef FTC_INLINE
+
+ FT_LOCAL_DEF( FT_Bool )
+ FTC_GNode_Compare( FTC_GNode gnode,
+ FTC_GQuery gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ return ftc_gnode_compare( FTC_NODE( gnode ), gquery,
+ cache, list_changed );
+ }
+
+#endif
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CHUNK SETS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ FT_LOCAL_DEF( void )
+ FTC_Family_Init( FTC_Family family,
+ FTC_Cache cache )
+ {
+ FTC_GCacheClass clazz = FTC_CACHE__GCACHE_CLASS( cache );
+
+
+ family->clazz = clazz->family_class;
+ family->num_nodes = 0;
+ family->cache = cache;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ ftc_gcache_init( FTC_Cache ftccache )
+ {
+ FTC_GCache cache = (FTC_GCache)ftccache;
+ FT_Error error;
+
+
+ error = FTC_Cache_Init( FTC_CACHE( cache ) );
+ if ( !error )
+ {
+ FTC_GCacheClass clazz = (FTC_GCacheClass)FTC_CACHE( cache )->org_class;
+
+ FTC_MruList_Init( &cache->families,
+ clazz->family_class,
+ 0, /* no maximum here! */
+ cache,
+ FTC_CACHE( cache )->memory );
+ }
+
+ return error;
+ }
+
+
+#if 0
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_GCache_Init( FTC_GCache cache )
+ {
+ return ftc_gcache_init( FTC_CACHE( cache ) );
+ }
+
+#endif /* 0 */
+
+
+ FT_LOCAL_DEF( void )
+ ftc_gcache_done( FTC_Cache ftccache )
+ {
+ FTC_GCache cache = (FTC_GCache)ftccache;
+
+
+ FTC_Cache_Done( (FTC_Cache)cache );
+ FTC_MruList_Done( &cache->families );
+ }
+
+
+#if 0
+
+ FT_LOCAL_DEF( void )
+ FTC_GCache_Done( FTC_GCache cache )
+ {
+ ftc_gcache_done( FTC_CACHE( cache ) );
+ }
+
+#endif /* 0 */
+
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_GCache_New( FTC_Manager manager,
+ FTC_GCacheClass clazz,
+ FTC_GCache *acache )
+ {
+ return FTC_Manager_RegisterCache( manager, (FTC_CacheClass)clazz,
+ (FTC_Cache*)acache );
+ }
+
+
+#ifndef FTC_INLINE
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_GCache_Lookup( FTC_GCache cache,
+ FT_PtrDist hash,
+ FT_UInt gindex,
+ FTC_GQuery query,
+ FTC_Node *anode )
+ {
+ FT_Error error;
+
+
+ query->gindex = gindex;
+
+ FTC_MRULIST_LOOKUP( &cache->families, query, query->family, error );
+ if ( !error )
+ {
+ FTC_Family family = query->family;
+
+
+ /* prevent the family from being destroyed too early when an */
+ /* out-of-memory condition occurs during glyph node initialization. */
+ family->num_nodes++;
+
+ error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, anode );
+
+ if ( --family->num_nodes == 0 )
+ FTC_FAMILY_FREE( family, cache );
+ }
+ return error;
+ }
+
+#endif /* !FTC_INLINE */
+
+
+/* END */
diff --git a/src/cache/ftcglyph.h b/src/cache/ftcglyph.h
new file mode 100644
index 0000000..5fed19c
--- /dev/null
+++ b/src/cache/ftcglyph.h
@@ -0,0 +1,329 @@
+/***************************************************************************/
+/* */
+/* ftcglyph.h */
+/* */
+/* FreeType abstract glyph cache (specification). */
+/* */
+/* Copyright 2000-2001, 2003, 2004, 2006, 2007, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*
+ *
+ * FTC_GCache is an _abstract_ cache object optimized to store glyph
+ * data. It works as follows:
+ *
+ * - It manages FTC_GNode objects. Each one of them can hold one or more
+ * glyph `items'. Item types are not specified in the FTC_GCache but
+ * in classes that extend it.
+ *
+ * - Glyph attributes, like face ID, character size, render mode, etc.,
+ * can be grouped into abstract `glyph families'. This avoids storing
+ * the attributes within the FTC_GCache, since it is likely that many
+ * FTC_GNodes will belong to the same family in typical uses.
+ *
+ * - Each FTC_GNode is thus an FTC_Node with two additional fields:
+ *
+ * * gindex: A glyph index, or the first index in a glyph range.
+ * * family: A pointer to a glyph `family'.
+ *
+ * - Family types are not fully specific in the FTC_Family type, but
+ * by classes that extend it.
+ *
+ * Note that both FTC_ImageCache and FTC_SBitCache extend FTC_GCache.
+ * They share an FTC_Family sub-class called FTC_BasicFamily which is
+ * used to store the following data: face ID, pixel/point sizes, load
+ * flags. For more details see the file `src/cache/ftcbasic.c'.
+ *
+ * Client applications can extend FTC_GNode with their own FTC_GNode
+ * and FTC_Family sub-classes to implement more complex caches (e.g.,
+ * handling automatic synthesis, like obliquing & emboldening, colored
+ * glyphs, etc.).
+ *
+ * See also the FTC_ICache & FTC_SCache classes in `ftcimage.h' and
+ * `ftcsbits.h', which both extend FTC_GCache with additional
+ * optimizations.
+ *
+ * A typical FTC_GCache implementation must provide at least the
+ * following:
+ *
+ * - FTC_GNode sub-class, e.g. MyNode, with relevant methods:
+ * my_node_new (must call FTC_GNode_Init)
+ * my_node_free (must call FTC_GNode_Done)
+ * my_node_compare (must call FTC_GNode_Compare)
+ * my_node_remove_faceid (must call ftc_gnode_unselect in case
+ * of match)
+ *
+ * - FTC_Family sub-class, e.g. MyFamily, with relevant methods:
+ * my_family_compare
+ * my_family_init
+ * my_family_reset (optional)
+ * my_family_done
+ *
+ * - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
+ * data.
+ *
+ * - Constant structures for a FTC_GNodeClass.
+ *
+ * - MyCacheNew() can be implemented easily as a call to the convenience
+ * function FTC_GCache_New.
+ *
+ * - MyCacheLookup with a call to FTC_GCache_Lookup. This function will
+ * automatically:
+ *
+ * - Search for the corresponding family in the cache, or create
+ * a new one if necessary. Put it in FTC_GQUERY(myquery).family
+ *
+ * - Call FTC_Cache_Lookup.
+ *
+ * If it returns NULL, you should create a new node, then call
+ * ftc_cache_add as usual.
+ */
+
+
+ /*************************************************************************/
+ /* */
+ /* Important: The functions defined in this file are only used to */
+ /* implement an abstract glyph cache class. You need to */
+ /* provide additional logic to implement a complete cache. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /********* *********/
+ /********* WARNING, THIS IS BETA CODE. *********/
+ /********* *********/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+#ifndef __FTCGLYPH_H__
+#define __FTCGLYPH_H__
+
+
+#include <ft2build.h>
+#include "ftcmanag.h"
+
+
+FT_BEGIN_HEADER
+
+
+ /*
+ * We can group glyphs into `families'. Each family correspond to a
+ * given face ID, character size, transform, etc.
+ *
+ * Families are implemented as MRU list nodes. They are
+ * reference-counted.
+ */
+
+ typedef struct FTC_FamilyRec_
+ {
+ FTC_MruNodeRec mrunode;
+ FT_UInt num_nodes; /* current number of nodes in this family */
+ FTC_Cache cache;
+ FTC_MruListClass clazz;
+
+ } FTC_FamilyRec, *FTC_Family;
+
+#define FTC_FAMILY(x) ( (FTC_Family)(x) )
+#define FTC_FAMILY_P(x) ( (FTC_Family*)(x) )
+
+
+ typedef struct FTC_GNodeRec_
+ {
+ FTC_NodeRec node;
+ FTC_Family family;
+ FT_UInt gindex;
+
+ } FTC_GNodeRec, *FTC_GNode;
+
+#define FTC_GNODE( x ) ( (FTC_GNode)(x) )
+#define FTC_GNODE_P( x ) ( (FTC_GNode*)(x) )
+
+
+ typedef struct FTC_GQueryRec_
+ {
+ FT_UInt gindex;
+ FTC_Family family;
+
+ } FTC_GQueryRec, *FTC_GQuery;
+
+#define FTC_GQUERY( x ) ( (FTC_GQuery)(x) )
+
+
+ /*************************************************************************/
+ /* */
+ /* These functions are exported so that they can be called from */
+ /* user-provided cache classes; otherwise, they are really part of the */
+ /* cache sub-system internals. */
+ /* */
+
+ /* must be called by derived FTC_Node_InitFunc routines */
+ FT_LOCAL( void )
+ FTC_GNode_Init( FTC_GNode node,
+ FT_UInt gindex, /* glyph index for node */
+ FTC_Family family );
+
+#ifdef FTC_INLINE
+
+ /* returns TRUE iff the query's glyph index correspond to the node; */
+ /* this assumes that the `family' and `hash' fields of the query are */
+ /* already correctly set */
+ FT_LOCAL( FT_Bool )
+ FTC_GNode_Compare( FTC_GNode gnode,
+ FTC_GQuery gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed );
+
+#endif
+
+ /* call this function to clear a node's family -- this is necessary */
+ /* to implement the `node_remove_faceid' cache method correctly */
+ FT_LOCAL( void )
+ FTC_GNode_UnselectFamily( FTC_GNode gnode,
+ FTC_Cache cache );
+
+ /* must be called by derived FTC_Node_DoneFunc routines */
+ FT_LOCAL( void )
+ FTC_GNode_Done( FTC_GNode node,
+ FTC_Cache cache );
+
+
+ FT_LOCAL( void )
+ FTC_Family_Init( FTC_Family family,
+ FTC_Cache cache );
+
+ typedef struct FTC_GCacheRec_
+ {
+ FTC_CacheRec cache;
+ FTC_MruListRec families;
+
+ } FTC_GCacheRec, *FTC_GCache;
+
+#define FTC_GCACHE( x ) ((FTC_GCache)(x))
+
+
+#if 0
+ /* can be used as @FTC_Cache_InitFunc */
+ FT_LOCAL( FT_Error )
+ FTC_GCache_Init( FTC_GCache cache );
+#endif
+
+
+#if 0
+ /* can be used as @FTC_Cache_DoneFunc */
+ FT_LOCAL( void )
+ FTC_GCache_Done( FTC_GCache cache );
+#endif
+
+
+ /* the glyph cache class adds fields for the family implementation */
+ typedef struct FTC_GCacheClassRec_
+ {
+ FTC_CacheClassRec clazz;
+ FTC_MruListClass family_class;
+
+ } FTC_GCacheClassRec;
+
+ typedef const FTC_GCacheClassRec* FTC_GCacheClass;
+
+#define FTC_GCACHE_CLASS( x ) ((FTC_GCacheClass)(x))
+
+#define FTC_CACHE__GCACHE_CLASS( x ) \
+ FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
+#define FTC_CACHE__FAMILY_CLASS( x ) \
+ ( (FTC_MruListClass)FTC_CACHE__GCACHE_CLASS( x )->family_class )
+
+
+ /* convenience function; use it instead of FTC_Manager_Register_Cache */
+ FT_LOCAL( FT_Error )
+ FTC_GCache_New( FTC_Manager manager,
+ FTC_GCacheClass clazz,
+ FTC_GCache *acache );
+
+#ifndef FTC_INLINE
+ FT_LOCAL( FT_Error )
+ FTC_GCache_Lookup( FTC_GCache cache,
+ FT_PtrDist hash,
+ FT_UInt gindex,
+ FTC_GQuery query,
+ FTC_Node *anode );
+#endif
+
+
+ /* */
+
+
+#define FTC_FAMILY_FREE( family, cache ) \
+ FTC_MruList_Remove( &FTC_GCACHE((cache))->families, \
+ (FTC_MruNode)(family) )
+
+
+#ifdef FTC_INLINE
+
+#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
+ gindex, query, node, error ) \
+ FT_BEGIN_STMNT \
+ FTC_GCache _gcache = FTC_GCACHE( cache ); \
+ FTC_GQuery _gquery = (FTC_GQuery)( query ); \
+ FTC_MruNode_CompareFunc _fcompare = (FTC_MruNode_CompareFunc)(famcmp); \
+ FTC_MruNode _mrunode; \
+ \
+ \
+ _gquery->gindex = (gindex); \
+ \
+ FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare, \
+ _mrunode, error ); \
+ _gquery->family = FTC_FAMILY( _mrunode ); \
+ if ( !error ) \
+ { \
+ FTC_Family _gqfamily = _gquery->family; \
+ \
+ \
+ _gqfamily->num_nodes++; \
+ \
+ FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ); \
+ \
+ if ( --_gqfamily->num_nodes == 0 ) \
+ FTC_FAMILY_FREE( _gqfamily, _gcache ); \
+ } \
+ FT_END_STMNT
+ /* */
+
+#else /* !FTC_INLINE */
+
+#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
+ gindex, query, node, error ) \
+ FT_BEGIN_STMNT \
+ \
+ error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex, \
+ FTC_GQUERY( query ), &node ); \
+ \
+ FT_END_STMNT
+
+#endif /* !FTC_INLINE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCGLYPH_H__ */
+
+
+/* END */
diff --git a/src/cache/ftcmanag.h b/src/cache/ftcmanag.h
new file mode 100644
index 0000000..d6c8516
--- /dev/null
+++ b/src/cache/ftcmanag.h
@@ -0,0 +1,175 @@
+/***************************************************************************/
+/* */
+/* ftcmanag.h */
+/* */
+/* FreeType Cache Manager (specification). */
+/* */
+/* Copyright 2000-2001, 2003, 2004, 2006, 2010 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* A cache manager is in charge of the following: */
+ /* */
+ /* - Maintain a mapping between generic FTC_FaceIDs and live FT_Face */
+ /* objects. The mapping itself is performed through a user-provided */
+ /* callback. However, the manager maintains a small cache of FT_Face */
+ /* and FT_Size objects in order to speed up things considerably. */
+ /* */
+ /* - Manage one or more cache objects. Each cache is in charge of */
+ /* holding a varying number of `cache nodes'. Each cache node */
+ /* represents a minimal amount of individually accessible cached */
+ /* data. For example, a cache node can be an FT_Glyph image */
+ /* containing a vector outline, or some glyph metrics, or anything */
+ /* else. */
+ /* */
+ /* Each cache node has a certain size in bytes that is added to the */
+ /* total amount of `cache memory' within the manager. */
+ /* */
+ /* All cache nodes are located in a global LRU list, where the oldest */
+ /* node is at the tail of the list. */
+ /* */
+ /* Each node belongs to a single cache, and includes a reference */
+ /* count to avoid destroying it (due to caching). */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /********* *********/
+ /********* WARNING, THIS IS BETA CODE. *********/
+ /********* *********/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+#ifndef __FTCMANAG_H__
+#define __FTCMANAG_H__
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include "ftccache.h"
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* cache_subsystem */
+ /* */
+ /*************************************************************************/
+
+
+#define FTC_MAX_FACES_DEFAULT 2
+#define FTC_MAX_SIZES_DEFAULT 4
+#define FTC_MAX_BYTES_DEFAULT 200000L /* ~200kByte by default */
+
+ /* maximum number of caches registered in a single manager */
+#define FTC_MAX_CACHES 16
+
+
+ typedef struct FTC_ManagerRec_
+ {
+ FT_Library library;
+ FT_Memory memory;
+
+ FTC_Node nodes_list;
+ FT_ULong max_weight;
+ FT_ULong cur_weight;
+ FT_UInt num_nodes;
+
+ FTC_Cache caches[FTC_MAX_CACHES];
+ FT_UInt num_caches;
+
+ FTC_MruListRec faces;
+ FTC_MruListRec sizes;
+
+ FT_Pointer request_data;
+ FTC_Face_Requester request_face;
+
+ } FTC_ManagerRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_Compress */
+ /* */
+ /* <Description> */
+ /* This function is used to check the state of the cache manager if */
+ /* its `num_bytes' field is greater than its `max_bytes' field. It */
+ /* will flush as many old cache nodes as possible (ignoring cache */
+ /* nodes with a non-zero reference count). */
+ /* */
+ /* <InOut> */
+ /* manager :: A handle to the cache manager. */
+ /* */
+ /* <Note> */
+ /* Client applications should not call this function directly. It is */
+ /* normally invoked by specific cache implementations. */
+ /* */
+ /* The reason this function is exported is to allow client-specific */
+ /* cache classes. */
+ /* */
+ FT_LOCAL( void )
+ FTC_Manager_Compress( FTC_Manager manager );
+
+
+ /* try to flush `count' old nodes from the cache; return the number
+ * of really flushed nodes
+ */
+ FT_LOCAL( FT_UInt )
+ FTC_Manager_FlushN( FTC_Manager manager,
+ FT_UInt count );
+
+
+ /* this must be used internally for the moment */
+ FT_LOCAL( FT_Error )
+ FTC_Manager_RegisterCache( FTC_Manager manager,
+ FTC_CacheClass clazz,
+ FTC_Cache *acache );
+
+ /* */
+
+#define FTC_SCALER_COMPARE( a, b ) \
+ ( (a)->face_id == (b)->face_id && \
+ (a)->width == (b)->width && \
+ (a)->height == (b)->height && \
+ ((a)->pixel != 0) == ((b)->pixel != 0) && \
+ ( (a)->pixel || \
+ ( (a)->x_res == (b)->x_res && \
+ (a)->y_res == (b)->y_res ) ) )
+
+#define FTC_SCALER_HASH( q ) \
+ ( _FTC_FACE_ID_HASH( (q)->face_id ) + \
+ (q)->width + (q)->height*7 + \
+ ( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) )
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCMANAG_H__ */
+
+
+/* END */
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
new file mode 100644
index 0000000..dc8b4cc
--- /dev/null
+++ b/src/cache/ftcmru.c
@@ -0,0 +1,357 @@
+/***************************************************************************/
+/* */
+/* ftcmru.c */
+/* */
+/* FreeType MRU support (body). */
+/* */
+/* Copyright 2003, 2004, 2006, 2009 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcmru.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftcerror.h"
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruNode_Prepend( FTC_MruNode *plist,
+ FTC_MruNode node )
+ {
+ FTC_MruNode first = *plist;
+
+
+ if ( first )
+ {
+ FTC_MruNode last = first->prev;
+
+
+#ifdef FT_DEBUG_ERROR
+ {
+ FTC_MruNode cnode = first;
+
+
+ do
+ {
+ if ( cnode == node )
+ {
+ fprintf( stderr, "FTC_MruNode_Prepend: invalid action\n" );
+ exit( 2 );
+ }
+ cnode = cnode->next;
+
+ } while ( cnode != first );
+ }
+#endif
+
+ first->prev = node;
+ last->next = node;
+ node->next = first;
+ node->prev = last;
+ }
+ else
+ {
+ node->next = node;
+ node->prev = node;
+ }
+ *plist = node;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruNode_Up( FTC_MruNode *plist,
+ FTC_MruNode node )
+ {
+ FTC_MruNode first = *plist;
+
+
+ FT_ASSERT( first != NULL );
+
+ if ( first != node )
+ {
+ FTC_MruNode prev, next, last;
+
+
+#ifdef FT_DEBUG_ERROR
+ {
+ FTC_MruNode cnode = first;
+ do
+ {
+ if ( cnode == node )
+ goto Ok;
+ cnode = cnode->next;
+
+ } while ( cnode != first );
+
+ fprintf( stderr, "FTC_MruNode_Up: invalid action\n" );
+ exit( 2 );
+ Ok:
+ }
+#endif
+ prev = node->prev;
+ next = node->next;
+
+ prev->next = next;
+ next->prev = prev;
+
+ last = first->prev;
+
+ last->next = node;
+ first->prev = node;
+
+ node->next = first;
+ node->prev = last;
+
+ *plist = node;
+ }
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruNode_Remove( FTC_MruNode *plist,
+ FTC_MruNode node )
+ {
+ FTC_MruNode first = *plist;
+ FTC_MruNode prev, next;
+
+
+ FT_ASSERT( first != NULL );
+
+#ifdef FT_DEBUG_ERROR
+ {
+ FTC_MruNode cnode = first;
+
+
+ do
+ {
+ if ( cnode == node )
+ goto Ok;
+ cnode = cnode->next;
+
+ } while ( cnode != first );
+
+ fprintf( stderr, "FTC_MruNode_Remove: invalid action\n" );
+ exit( 2 );
+ Ok:
+ }
+#endif
+
+ prev = node->prev;
+ next = node->next;
+
+ prev->next = next;
+ next->prev = prev;
+
+ if ( node == next )
+ {
+ FT_ASSERT( first == node );
+ FT_ASSERT( prev == node );
+
+ *plist = NULL;
+ }
+ else if ( node == first )
+ *plist = next;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruList_Init( FTC_MruList list,
+ FTC_MruListClass clazz,
+ FT_UInt max_nodes,
+ FT_Pointer data,
+ FT_Memory memory )
+ {
+ list->num_nodes = 0;
+ list->max_nodes = max_nodes;
+ list->nodes = NULL;
+ list->clazz = *clazz;
+ list->data = data;
+ list->memory = memory;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruList_Reset( FTC_MruList list )
+ {
+ while ( list->nodes )
+ FTC_MruList_Remove( list, list->nodes );
+
+ FT_ASSERT( list->num_nodes == 0 );
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruList_Done( FTC_MruList list )
+ {
+ FTC_MruList_Reset( list );
+ }
+
+
+#ifndef FTC_INLINE
+ FT_LOCAL_DEF( FTC_MruNode )
+ FTC_MruList_Find( FTC_MruList list,
+ FT_Pointer key )
+ {
+ FTC_MruNode_CompareFunc compare = list->clazz.node_compare;
+ FTC_MruNode first, node;
+
+
+ first = list->nodes;
+ node = NULL;
+
+ if ( first )
+ {
+ node = first;
+ do
+ {
+ if ( compare( node, key ) )
+ {
+ if ( node != first )
+ FTC_MruNode_Up( &list->nodes, node );
+
+ return node;
+ }
+
+ node = node->next;
+
+ } while ( node != first);
+ }
+
+ return NULL;
+ }
+#endif
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_MruList_New( FTC_MruList list,
+ FT_Pointer key,
+ FTC_MruNode *anode )
+ {
+ FT_Error error;
+ FTC_MruNode node = NULL;
+ FT_Memory memory = list->memory;
+
+
+ if ( list->num_nodes >= list->max_nodes && list->max_nodes > 0 )
+ {
+ node = list->nodes->prev;
+
+ FT_ASSERT( node );
+
+ if ( list->clazz.node_reset )
+ {
+ FTC_MruNode_Up( &list->nodes, node );
+
+ error = list->clazz.node_reset( node, key, list->data );
+ if ( !error )
+ goto Exit;
+ }
+
+ FTC_MruNode_Remove( &list->nodes, node );
+ list->num_nodes--;
+
+ if ( list->clazz.node_done )
+ list->clazz.node_done( node, list->data );
+ }
+ else if ( FT_ALLOC( node, list->clazz.node_size ) )
+ goto Exit;
+
+ error = list->clazz.node_init( node, key, list->data );
+ if ( error )
+ goto Fail;
+
+ FTC_MruNode_Prepend( &list->nodes, node );
+ list->num_nodes++;
+
+ Exit:
+ *anode = node;
+ return error;
+
+ Fail:
+ if ( list->clazz.node_done )
+ list->clazz.node_done( node, list->data );
+
+ FT_FREE( node );
+ goto Exit;
+ }
+
+
+#ifndef FTC_INLINE
+ FT_LOCAL_DEF( FT_Error )
+ FTC_MruList_Lookup( FTC_MruList list,
+ FT_Pointer key,
+ FTC_MruNode *anode )
+ {
+ FTC_MruNode node;
+
+
+ node = FTC_MruList_Find( list, key );
+ if ( node == NULL )
+ return FTC_MruList_New( list, key, anode );
+
+ *anode = node;
+ return 0;
+ }
+#endif /* FTC_INLINE */
+
+ FT_LOCAL_DEF( void )
+ FTC_MruList_Remove( FTC_MruList list,
+ FTC_MruNode node )
+ {
+ FTC_MruNode_Remove( &list->nodes, node );
+ list->num_nodes--;
+
+ {
+ FT_Memory memory = list->memory;
+
+
+ if ( list->clazz.node_done )
+ list->clazz.node_done( node, list->data );
+
+ FT_FREE( node );
+ }
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_MruList_RemoveSelection( FTC_MruList list,
+ FTC_MruNode_CompareFunc selection,
+ FT_Pointer key )
+ {
+ FTC_MruNode first, node, next;
+
+
+ first = list->nodes;
+ while ( first && ( selection == NULL || selection( first, key ) ) )
+ {
+ FTC_MruList_Remove( list, first );
+ first = list->nodes;
+ }
+
+ if ( first )
+ {
+ node = first->next;
+ while ( node != first )
+ {
+ next = node->next;
+
+ if ( selection( node, key ) )
+ FTC_MruList_Remove( list, node );
+
+ node = next;
+ }
+ }
+ }
+
+
+/* END */
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
new file mode 100644
index 0000000..8bf8d60
--- /dev/null
+++ b/src/cache/ftcsbits.c
@@ -0,0 +1,421 @@
+/***************************************************************************/
+/* */
+/* ftcsbits.c */
+/* */
+/* FreeType sbits manager (body). */
+/* */
+/* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcsbits.h"
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_ERRORS_H
+
+#include "ftccback.h"
+#include "ftcerror.h"
+
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_cache
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** SBIT CACHE NODES *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ static FT_Error
+ ftc_sbit_copy_bitmap( FTC_SBit sbit,
+ FT_Bitmap* bitmap,
+ FT_Memory memory )
+ {
+ FT_Error error;
+ FT_Int pitch = bitmap->pitch;
+ FT_ULong size;
+
+
+ if ( pitch < 0 )
+ pitch = -pitch;
+
+ size = (FT_ULong)( pitch * bitmap->rows );
+
+ if ( !FT_ALLOC( sbit->buffer, size ) )
+ FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ ftc_snode_free( FTC_Node ftcsnode,
+ FTC_Cache cache )
+ {
+ FTC_SNode snode = (FTC_SNode)ftcsnode;
+ FTC_SBit sbit = snode->sbits;
+ FT_UInt count = snode->count;
+ FT_Memory memory = cache->memory;
+
+
+ for ( ; count > 0; sbit++, count-- )
+ FT_FREE( sbit->buffer );
+
+ FTC_GNode_Done( FTC_GNODE( snode ), cache );
+
+ FT_FREE( snode );
+ }
+
+
+ FT_LOCAL_DEF( void )
+ FTC_SNode_Free( FTC_SNode snode,
+ FTC_Cache cache )
+ {
+ ftc_snode_free( FTC_NODE( snode ), cache );
+ }
+
+
+ /*
+ * This function tries to load a small bitmap within a given FTC_SNode.
+ * Note that it returns a non-zero error code _only_ in the case of
+ * out-of-memory condition. For all other errors (e.g., corresponding
+ * to a bad font file), this function will mark the sbit as `unavailable'
+ * and return a value of 0.
+ *
+ * You should also read the comment within the @ftc_snode_compare
+ * function below to see how out-of-memory is handled during a lookup.
+ */
+ static FT_Error
+ ftc_snode_load( FTC_SNode snode,
+ FTC_Manager manager,
+ FT_UInt gindex,
+ FT_ULong *asize )
+ {
+ FT_Error error;
+ FTC_GNode gnode = FTC_GNODE( snode );
+ FTC_Family family = gnode->family;
+ FT_Memory memory = manager->memory;
+ FT_Face face;
+ FTC_SBit sbit;
+ FTC_SFamilyClass clazz;
+
+
+ if ( (FT_UInt)(gindex - gnode->gindex) >= snode->count )
+ {
+ FT_ERROR(( "ftc_snode_load: invalid glyph index" ));
+ return FTC_Err_Invalid_Argument;
+ }
+
+ sbit = snode->sbits + ( gindex - gnode->gindex );
+ clazz = (FTC_SFamilyClass)family->clazz;
+
+ sbit->buffer = 0;
+
+ error = clazz->family_load_glyph( family, gindex, manager, &face );
+ if ( error )
+ goto BadGlyph;
+
+ {
+ FT_Int temp;
+ FT_GlyphSlot slot = face->glyph;
+ FT_Bitmap* bitmap = &slot->bitmap;
+ FT_Pos xadvance, yadvance; /* FT_GlyphSlot->advance.{x|y} */
+
+
+ if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
+ {
+ FT_TRACE0(( "ftc_snode_load:"
+ " glyph loaded didn't return a bitmap\n" ));
+ goto BadGlyph;
+ }
+
+ /* Check that our values fit into 8-bit containers! */
+ /* If this is not the case, our bitmap is too large */
+ /* and we will leave it as `missing' with sbit.buffer = 0 */
+
+#define CHECK_CHAR( d ) ( temp = (FT_Char)d, temp == d )
+#define CHECK_BYTE( d ) ( temp = (FT_Byte)d, temp == d )
+
+ /* horizontal advance in pixels */
+ xadvance = ( slot->advance.x + 32 ) >> 6;
+ yadvance = ( slot->advance.y + 32 ) >> 6;
+
+ if ( !CHECK_BYTE( bitmap->rows ) ||
+ !CHECK_BYTE( bitmap->width ) ||
+ !CHECK_CHAR( bitmap->pitch ) ||
+ !CHECK_CHAR( slot->bitmap_left ) ||
+ !CHECK_CHAR( slot->bitmap_top ) ||
+ !CHECK_CHAR( xadvance ) ||
+ !CHECK_CHAR( yadvance ) )
+ {
+ FT_TRACE2(( "ftc_snode_load:"
+ " glyph too large for small bitmap cache\n"));
+ goto BadGlyph;
+ }
+
+ sbit->width = (FT_Byte)bitmap->width;
+ sbit->height = (FT_Byte)bitmap->rows;
+ sbit->pitch = (FT_Char)bitmap->pitch;
+ sbit->left = (FT_Char)slot->bitmap_left;
+ sbit->top = (FT_Char)slot->bitmap_top;
+ sbit->xadvance = (FT_Char)xadvance;
+ sbit->yadvance = (FT_Char)yadvance;
+ sbit->format = (FT_Byte)bitmap->pixel_mode;
+ sbit->max_grays = (FT_Byte)(bitmap->num_grays - 1);
+
+ /* copy the bitmap into a new buffer -- ignore error */
+ error = ftc_sbit_copy_bitmap( sbit, bitmap, memory );
+
+ /* now, compute size */
+ if ( asize )
+ *asize = FT_ABS( sbit->pitch ) * sbit->height;
+
+ } /* glyph loading successful */
+
+ /* ignore the errors that might have occurred -- */
+ /* we mark unloaded glyphs with `sbit.buffer == 0' */
+ /* and `width == 255', `height == 0' */
+ /* */
+ if ( error && error != FTC_Err_Out_Of_Memory )
+ {
+ BadGlyph:
+ sbit->width = 255;
+ sbit->height = 0;
+ sbit->buffer = NULL;
+ error = FTC_Err_Ok;
+ if ( asize )
+ *asize = 0;
+ }
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ FTC_SNode_New( FTC_SNode *psnode,
+ FTC_GQuery gquery,
+ FTC_Cache cache )
+ {
+ FT_Memory memory = cache->memory;
+ FT_Error error;
+ FTC_SNode snode = NULL;
+ FT_UInt gindex = gquery->gindex;
+ FTC_Family family = gquery->family;
+
+ FTC_SFamilyClass clazz = FTC_CACHE__SFAMILY_CLASS( cache );
+ FT_UInt total;
+ FT_UInt node_count;
+
+
+ total = clazz->family_get_count( family, cache->manager );
+ if ( total == 0 || gindex >= total )
+ {
+ error = FTC_Err_Invalid_Argument;
+ goto Exit;
+ }
+
+ if ( !FT_NEW( snode ) )
+ {
+ FT_UInt count, start;
+
+
+ start = gindex - ( gindex % FTC_SBIT_ITEMS_PER_NODE );
+ count = total - start;
+ if ( count > FTC_SBIT_ITEMS_PER_NODE )
+ count = FTC_SBIT_ITEMS_PER_NODE;
+
+ FTC_GNode_Init( FTC_GNODE( snode ), start, family );
+
+ snode->count = count;
+ for ( node_count = 0; node_count < count; node_count++ )
+ {
+ snode->sbits[node_count].width = 255;
+ }
+
+ error = ftc_snode_load( snode,
+ cache->manager,
+ gindex,
+ NULL );
+ if ( error )
+ {
+ FTC_SNode_Free( snode, cache );
+ snode = NULL;
+ }
+ }
+
+ Exit:
+ *psnode = snode;
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ ftc_snode_new( FTC_Node *ftcpsnode,
+ FT_Pointer ftcgquery,
+ FTC_Cache cache )
+ {
+ FTC_SNode *psnode = (FTC_SNode*)ftcpsnode;
+ FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
+
+
+ return FTC_SNode_New( psnode, gquery, cache );
+ }
+
+
+ FT_LOCAL_DEF( FT_Offset )
+ ftc_snode_weight( FTC_Node ftcsnode,
+ FTC_Cache cache )
+ {
+ FTC_SNode snode = (FTC_SNode)ftcsnode;
+ FT_UInt count = snode->count;
+ FTC_SBit sbit = snode->sbits;
+ FT_Int pitch;
+ FT_Offset size;
+
+ FT_UNUSED( cache );
+
+
+ FT_ASSERT( snode->count <= FTC_SBIT_ITEMS_PER_NODE );
+
+ /* the node itself */
+ size = sizeof ( *snode );
+
+ for ( ; count > 0; count--, sbit++ )
+ {
+ if ( sbit->buffer )
+ {
+ pitch = sbit->pitch;
+ if ( pitch < 0 )
+ pitch = -pitch;
+
+ /* add the size of a given glyph image */
+ size += pitch * sbit->height;
+ }
+ }
+
+ return size;
+ }
+
+
+#if 0
+
+ FT_LOCAL_DEF( FT_Offset )
+ FTC_SNode_Weight( FTC_SNode snode )
+ {
+ return ftc_snode_weight( FTC_NODE( snode ), NULL );
+ }
+
+#endif /* 0 */
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ ftc_snode_compare( FTC_Node ftcsnode,
+ FT_Pointer ftcgquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ FTC_SNode snode = (FTC_SNode)ftcsnode;
+ FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
+ FTC_GNode gnode = FTC_GNODE( snode );
+ FT_UInt gindex = gquery->gindex;
+ FT_Bool result;
+
+
+ if (list_changed)
+ *list_changed = FALSE;
+ result = FT_BOOL( gnode->family == gquery->family &&
+ (FT_UInt)( gindex - gnode->gindex ) < snode->count );
+ if ( result )
+ {
+ /* check if we need to load the glyph bitmap now */
+ FTC_SBit sbit = snode->sbits + ( gindex - gnode->gindex );
+
+
+ /*
+ * The following code illustrates what to do when you want to
+ * perform operations that may fail within a lookup function.
+ *
+ * Here, we want to load a small bitmap on-demand; we thus
+ * need to call the `ftc_snode_load' function which may return
+ * a non-zero error code only when we are out of memory (OOM).
+ *
+ * The correct thing to do is to use @FTC_CACHE_TRYLOOP and
+ * @FTC_CACHE_TRYLOOP_END in order to implement a retry loop
+ * that is capable of flushing the cache incrementally when
+ * an OOM errors occur.
+ *
+ * However, we need to `lock' the node before this operation to
+ * prevent it from being flushed within the loop.
+ *
+ * When we exit the loop, we unlock the node, then check the `error'
+ * variable. If it is non-zero, this means that the cache was
+ * completely flushed and that no usable memory was found to load
+ * the bitmap.
+ *
+ * We then prefer to return a value of 0 (i.e., NO MATCH). This
+ * ensures that the caller will try to allocate a new node.
+ * This operation consequently _fail_ and the lookup function
+ * returns the appropriate OOM error code.
+ *
+ * Note that `buffer == NULL && width == 255' is a hack used to
+ * tag `unavailable' bitmaps in the array. We should never try
+ * to load these.
+ *
+ */
+
+ if ( sbit->buffer == NULL && sbit->width == 255 )
+ {
+ FT_ULong size;
+ FT_Error error;
+
+
+ ftcsnode->ref_count++; /* lock node to prevent flushing */
+ /* in retry loop */
+
+ FTC_CACHE_TRYLOOP( cache )
+ {
+ error = ftc_snode_load( snode, cache->manager, gindex, &size );
+ }
+ FTC_CACHE_TRYLOOP_END( list_changed );
+
+ ftcsnode->ref_count--; /* unlock the node */
+
+ if ( error )
+ result = 0;
+ else
+ cache->manager->cur_weight += size;
+ }
+ }
+
+ return result;
+ }
+
+
+#ifdef FTC_INLINE
+
+ FT_LOCAL_DEF( FT_Bool )
+ FTC_SNode_Compare( FTC_SNode snode,
+ FTC_GQuery gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed )
+ {
+ return ftc_snode_compare( FTC_NODE( snode ), gquery,
+ cache, list_changed );
+ }
+
+#endif
+
+/* END */
diff --git a/src/cache/ftcsbits.h b/src/cache/ftcsbits.h
new file mode 100644
index 0000000..df55dca
--- /dev/null
+++ b/src/cache/ftcsbits.h
@@ -0,0 +1,103 @@
+/***************************************************************************/
+/* */
+/* ftcsbits.h */
+/* */
+/* A small-bitmap cache (specification). */
+/* */
+/* Copyright 2000-2001, 2002, 2003, 2006, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTCSBITS_H__
+#define __FTCSBITS_H__
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include "ftcglyph.h"
+
+
+FT_BEGIN_HEADER
+
+#define FTC_SBIT_ITEMS_PER_NODE 16
+
+ typedef struct FTC_SNodeRec_
+ {
+ FTC_GNodeRec gnode;
+ FT_UInt count;
+ FTC_SBitRec sbits[FTC_SBIT_ITEMS_PER_NODE];
+
+ } FTC_SNodeRec, *FTC_SNode;
+
+
+#define FTC_SNODE( x ) ( (FTC_SNode)( x ) )
+#define FTC_SNODE_GINDEX( x ) FTC_GNODE( x )->gindex
+#define FTC_SNODE_FAMILY( x ) FTC_GNODE( x )->family
+
+ typedef FT_UInt
+ (*FTC_SFamily_GetCountFunc)( FTC_Family family,
+ FTC_Manager manager );
+
+ typedef FT_Error
+ (*FTC_SFamily_LoadGlyphFunc)( FTC_Family family,
+ FT_UInt gindex,
+ FTC_Manager manager,
+ FT_Face *aface );
+
+ typedef struct FTC_SFamilyClassRec_
+ {
+ FTC_MruListClassRec clazz;
+ FTC_SFamily_GetCountFunc family_get_count;
+ FTC_SFamily_LoadGlyphFunc family_load_glyph;
+
+ } FTC_SFamilyClassRec;
+
+ typedef const FTC_SFamilyClassRec* FTC_SFamilyClass;
+
+#define FTC_SFAMILY_CLASS( x ) ((FTC_SFamilyClass)(x))
+
+#define FTC_CACHE__SFAMILY_CLASS( x ) \
+ FTC_SFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS( x )->family_class )
+
+
+ FT_LOCAL( void )
+ FTC_SNode_Free( FTC_SNode snode,
+ FTC_Cache cache );
+
+ FT_LOCAL( FT_Error )
+ FTC_SNode_New( FTC_SNode *psnode,
+ FTC_GQuery gquery,
+ FTC_Cache cache );
+
+#if 0
+ FT_LOCAL( FT_ULong )
+ FTC_SNode_Weight( FTC_SNode inode );
+#endif
+
+
+#ifdef FTC_INLINE
+
+ FT_LOCAL( FT_Bool )
+ FTC_SNode_Compare( FTC_SNode snode,
+ FTC_GQuery gquery,
+ FTC_Cache cache,
+ FT_Bool* list_changed);
+
+#endif
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCSBITS_H__ */
+
+
+/* END */
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index 629d38e..8bbf474 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -4,8 +4,7 @@
/* */
/* OpenType and CFF data/program tables loader (body). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
-/* 2010 by */
+/* Copyright 1996-2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -1269,7 +1268,7 @@
if ( gid != 0 )
{
encoding->codes[j] = (FT_UShort)gid;
- encoding->count = j + 1;
+ encoding->count = j + 1;
}
else
{
@@ -1337,7 +1336,10 @@
error = cff_index_access_element( idx, font_index, &dict, &dict_len );
if ( !error )
+ {
+ FT_TRACE4(( " top dictionary:\n" ));
error = cff_parser_run( &parser, dict, dict + dict_len );
+ }
cff_index_forget_element( idx, &dict );
@@ -1366,6 +1368,7 @@
FT_FRAME_ENTER( font->font_dict.private_size ) )
goto Exit;
+ FT_TRACE4(( " private dictionary:\n" ));
error = cff_parser_run( &parser,
(FT_Byte*)stream->cursor,
(FT_Byte*)stream->limit );
@@ -1494,6 +1497,7 @@
goto Exit;
/* now, parse the top-level font dictionary */
+ FT_TRACE4(( "parsing top-level\n" ));
error = cff_subfont_load( &font->top_font,
&font->font_dict_index,
face_index,
@@ -1546,6 +1550,7 @@
for ( idx = 0; idx < fd_index.count; idx++ )
{
sub = font->subfonts[idx];
+ FT_TRACE4(( "parsing subfont %u\n", idx ));
error = cff_subfont_load( sub, &fd_index, idx,
stream, base_offset, library );
if ( error )
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index cd38676..15707a2 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -607,7 +607,25 @@
goto Bad_Format;
}
- if ( !dict->units_per_em )
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_UInt idx;
+ FT_String* s;
+
+
+ FT_TRACE4(( "SIDs\n" ));
+
+ /* dump string index, including default strings for convenience */
+ for ( idx = 0; idx < cff->num_strings + 390; idx++ )
+ {
+ s = cff_index_get_sid_string( cff, idx );
+ if ( s )
+ FT_TRACE4((" %5d %s\n", idx, s ));
+ }
+ }
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+ if ( !dict->has_font_matrix )
dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
/* Normalize the font matrix so that `matrix->xx' is 1; the */
@@ -652,26 +670,32 @@
FT_Fixed temp;
- if ( sub->units_per_em )
+ if ( sub->has_font_matrix )
{
FT_Long scaling;
- if ( top->units_per_em > 1 && sub->units_per_em > 1 )
- scaling = FT_MIN( top->units_per_em, sub->units_per_em );
- else
- scaling = 1;
+ /* if we have a top-level matrix, */
+ /* concatenate the subfont matrix */
- FT_Matrix_Multiply_Scaled( &top->font_matrix,
- &sub->font_matrix,
- scaling );
- FT_Vector_Transform_Scaled( &sub->font_offset,
- &top->font_matrix,
- scaling );
+ if ( top->has_font_matrix )
+ {
+ if ( top->units_per_em > 1 && sub->units_per_em > 1 )
+ scaling = FT_MIN( top->units_per_em, sub->units_per_em );
+ else
+ scaling = 1;
- sub->units_per_em = FT_MulDiv( sub->units_per_em,
- top->units_per_em,
- scaling );
+ FT_Matrix_Multiply_Scaled( &top->font_matrix,
+ &sub->font_matrix,
+ scaling );
+ FT_Vector_Transform_Scaled( &sub->font_offset,
+ &top->font_matrix,
+ scaling );
+
+ sub->units_per_em = FT_MulDiv( sub->units_per_em,
+ top->units_per_em,
+ scaling );
+ }
}
else
{
@@ -690,16 +714,6 @@
{
*upm = FT_DivFix( *upm, temp );
- /* if *upm is larger than 100*1000 we divide by 1000 -- */
- /* this can happen if e.g. there is no top-font FontMatrix */
- /* and the subfont FontMatrix already contains the complete */
- /* scaling for the subfont (see section 5.11 of the PLRM) */
-
- /* 100 is a heuristic value */
-
- if ( *upm > 100L * 1000L )
- *upm = ( *upm + 500 ) / 1000;
-
matrix->xx = FT_DivFix( matrix->xx, temp );
matrix->yx = FT_DivFix( matrix->yx, temp );
matrix->xy = FT_DivFix( matrix->xy, temp );
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
index b12a8d3..61fa87c 100644
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -460,6 +460,8 @@
error = CFF_Err_Ok;
+ dict->has_font_matrix = TRUE;
+
/* We expect a well-formed font matrix, this is, the matrix elements */
/* `xx' and `yy' are of approximately the same magnitude. To avoid */
/* loss of precision, we use the magnitude of element `xx' to scale */
@@ -498,11 +500,13 @@
*upm = power_tens[scaling];
- FT_TRACE4(( " font matrix: [%f %f %f %f]\n",
+ FT_TRACE4(( " [%f %f %f %f %f %f]\n",
(double)matrix->xx / *upm / 65536,
(double)matrix->xy / *upm / 65536,
(double)matrix->yx / *upm / 65536,
- (double)matrix->yy / *upm / 65536 ));
+ (double)matrix->yy / *upm / 65536,
+ (double)offset->x / *upm / 65536,
+ (double)offset->y / *upm / 65536 ));
}
Exit:
@@ -529,7 +533,7 @@
bbox->yMax = FT_RoundFix( cff_parse_fixed( data ) );
error = CFF_Err_Ok;
- FT_TRACE4(( " bbox: [%d %d %d %d]\n",
+ FT_TRACE4(( " [%d %d %d %d]\n",
bbox->xMin / 65536,
bbox->yMin / 65536,
bbox->xMax / 65536,
@@ -554,6 +558,9 @@
{
dict->private_size = cff_parse_num( data++ );
dict->private_offset = cff_parse_num( data );
+ FT_TRACE4(( " %lu %lu\n",
+ dict->private_size, dict->private_offset ));
+
error = CFF_Err_Ok;
}
@@ -573,8 +580,8 @@
if ( parser->top >= parser->stack + 3 )
{
- dict->cid_registry = (FT_UInt)cff_parse_num( data++ );
- dict->cid_ordering = (FT_UInt)cff_parse_num( data++ );
+ dict->cid_registry = (FT_UInt)cff_parse_num( data++ );
+ dict->cid_ordering = (FT_UInt)cff_parse_num( data++ );
if ( **data == 30 )
FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" ));
dict->cid_supplement = cff_parse_num( data );
@@ -583,7 +590,7 @@
dict->cid_supplement ));
error = CFF_Err_Ok;
- FT_TRACE4(( " ROS: registry sid %d, ordering sid %d, supplement %d\n",
+ FT_TRACE4(( " %d %d %d\n",
dict->cid_registry,
dict->cid_ordering,
dict->cid_supplement ));
@@ -593,54 +600,59 @@
}
-#define CFF_FIELD_NUM( code, name ) \
- CFF_FIELD( code, name, cff_kind_num )
-#define CFF_FIELD_FIXED( code, name ) \
- CFF_FIELD( code, name, cff_kind_fixed )
-#define CFF_FIELD_FIXED_1000( code, name ) \
- CFF_FIELD( code, name, cff_kind_fixed_thousand )
-#define CFF_FIELD_STRING( code, name ) \
- CFF_FIELD( code, name, cff_kind_string )
-#define CFF_FIELD_BOOL( code, name ) \
- CFF_FIELD( code, name, cff_kind_bool )
-#define CFF_FIELD_DELTA( code, name, max ) \
- CFF_FIELD( code, name, cff_kind_delta )
+#define CFF_FIELD_NUM( code, name, id ) \
+ CFF_FIELD( code, name, id, cff_kind_num )
+#define CFF_FIELD_FIXED( code, name, id ) \
+ CFF_FIELD( code, name, id, cff_kind_fixed )
+#define CFF_FIELD_FIXED_1000( code, name, id ) \
+ CFF_FIELD( code, name, id, cff_kind_fixed_thousand )
+#define CFF_FIELD_STRING( code, name, id ) \
+ CFF_FIELD( code, name, id, cff_kind_string )
+#define CFF_FIELD_BOOL( code, name, id ) \
+ CFF_FIELD( code, name, id, cff_kind_bool )
#define CFFCODE_TOPDICT 0x1000
#define CFFCODE_PRIVATE 0x2000
+
#ifndef FT_CONFIG_OPTION_PIC
-#define CFF_FIELD_CALLBACK( code, name ) \
- { \
- cff_kind_callback, \
- code | CFFCODE, \
- 0, 0, \
- cff_parse_ ## name, \
- 0, 0 \
- },
#undef CFF_FIELD
-#define CFF_FIELD( code, name, kind ) \
- { \
- kind, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE( name ), \
- 0, 0, 0 \
+#undef CFF_FIELD_DELTA
+
+
+#ifndef FT_DEBUG_LEVEL_TRACE
+
+
+#define CFF_FIELD_CALLBACK( code, name, id ) \
+ { \
+ cff_kind_callback, \
+ code | CFFCODE, \
+ 0, 0, \
+ cff_parse_ ## name, \
+ 0, 0 \
},
-#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code, name, max ) \
- { \
- cff_kind_delta, \
- code | CFFCODE, \
- FT_FIELD_OFFSET( name ), \
- FT_FIELD_SIZE_DELTA( name ), \
- 0, \
- max, \
- FT_FIELD_OFFSET( num_ ## name ) \
- },
+#define CFF_FIELD( code, name, id, kind ) \
+ { \
+ kind, \
+ code | CFFCODE, \
+ FT_FIELD_OFFSET( name ), \
+ FT_FIELD_SIZE( name ), \
+ 0, 0, 0 \
+ },
+
+#define CFF_FIELD_DELTA( code, name, max, id ) \
+ { \
+ cff_kind_delta, \
+ code | CFFCODE, \
+ FT_FIELD_OFFSET( name ), \
+ FT_FIELD_SIZE_DELTA( name ), \
+ 0, \
+ max, \
+ FT_FIELD_OFFSET( num_ ## name ) \
+ },
static const CFF_Field_Handler cff_field_handlers[] =
{
@@ -651,83 +663,200 @@
};
+#else /* FT_DEBUG_LEVEL_TRACE */
+
+
+
+#define CFF_FIELD_CALLBACK( code, name, id ) \
+ { \
+ cff_kind_callback, \
+ code | CFFCODE, \
+ 0, 0, \
+ cff_parse_ ## name, \
+ 0, 0, \
+ id \
+ },
+
+#define CFF_FIELD( code, name, id, kind ) \
+ { \
+ kind, \
+ code | CFFCODE, \
+ FT_FIELD_OFFSET( name ), \
+ FT_FIELD_SIZE( name ), \
+ 0, 0, 0, \
+ id \
+ },
+
+#define CFF_FIELD_DELTA( code, name, max, id ) \
+ { \
+ cff_kind_delta, \
+ code | CFFCODE, \
+ FT_FIELD_OFFSET( name ), \
+ FT_FIELD_SIZE_DELTA( name ), \
+ 0, \
+ max, \
+ FT_FIELD_OFFSET( num_ ## name ), \
+ id \
+ },
+
+ static const CFF_Field_Handler cff_field_handlers[] =
+ {
+
+#include "cfftoken.h"
+
+ { 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
#else /* FT_CONFIG_OPTION_PIC */
- void FT_Destroy_Class_cff_field_handlers(FT_Library library, CFF_Field_Handler* clazz)
+
+ void
+ FT_Destroy_Class_cff_field_handlers( FT_Library library,
+ CFF_Field_Handler* clazz )
{
- FT_Memory memory = library->memory;
+ FT_Memory memory = library->memory;
+
+
if ( clazz )
FT_FREE( clazz );
}
- FT_Error FT_Create_Class_cff_field_handlers(FT_Library library, CFF_Field_Handler** output_class)
+
+ FT_Error
+ FT_Create_Class_cff_field_handlers( FT_Library library,
+ CFF_Field_Handler** output_class )
{
CFF_Field_Handler* clazz;
- FT_Error error;
- FT_Memory memory = library->memory;
- int i=0;
+ FT_Error error;
+ FT_Memory memory = library->memory;
+
+ int i = 0;
+
#undef CFF_FIELD
+#define CFF_FIELD( code, name, id, kind ) i++;
#undef CFF_FIELD_DELTA
+#define CFF_FIELD_DELTA( code, name, max, id ) i++;
#undef CFF_FIELD_CALLBACK
-#define CFF_FIELD_CALLBACK( code, name ) i++;
-#define CFF_FIELD( code, name, kind ) i++;
-#define CFF_FIELD_DELTA( code, name, max ) i++;
+#define CFF_FIELD_CALLBACK( code, name, id ) i++;
#include "cfftoken.h"
- i++;/*{ 0, 0, 0, 0, 0, 0, 0 }*/
- if ( FT_ALLOC( clazz, sizeof(CFF_Field_Handler)*i ) )
+ i++; /* { 0, 0, 0, 0, 0, 0, 0 } */
+
+ if ( FT_ALLOC( clazz, sizeof ( CFF_Field_Handler ) * i ) )
return error;
- i=0;
-#undef CFF_FIELD
-#undef CFF_FIELD_DELTA
-#undef CFF_FIELD_CALLBACK
+ i = 0;
-#define CFF_FIELD_CALLBACK( code_, name_ ) \
- clazz[i].kind = cff_kind_callback; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = 0; \
- clazz[i].size = 0; \
- clazz[i].reader = cff_parse_ ## name_; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++;
+
+#ifndef FT_DEBUG_LEVEL_TRACE
+
+
+#undef CFF_FIELD_CALLBACK
+#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
+ clazz[i].kind = cff_kind_callback; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = 0; \
+ clazz[i].size = 0; \
+ clazz[i].reader = cff_parse_ ## name_; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ i++;
#undef CFF_FIELD
-#define CFF_FIELD( code_, name_, kind_ ) \
- clazz[i].kind = kind_; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = 0; \
- clazz[i].count_offset = 0; \
- i++; \
+#define CFF_FIELD( code_, name_, id_, kind_ ) \
+ clazz[i].kind = kind_; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
+ clazz[i].size = FT_FIELD_SIZE( name_ ); \
+ clazz[i].reader = 0; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ i++; \
#undef CFF_FIELD_DELTA
-#define CFF_FIELD_DELTA( code_, name_, max_ ) \
- clazz[i].kind = cff_kind_delta; \
- clazz[i].code = code_ | CFFCODE; \
- clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
- clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
- clazz[i].reader = 0; \
- clazz[i].array_max = max_; \
- clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
- i++;
+#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
+ clazz[i].kind = cff_kind_delta; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
+ clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
+ clazz[i].reader = 0; \
+ clazz[i].array_max = max_; \
+ clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
+ i++;
#include "cfftoken.h"
- clazz[i].kind = 0;
- clazz[i].code = 0;
- clazz[i].offset = 0;
- clazz[i].size = 0;
- clazz[i].reader = 0;
- clazz[i].array_max = 0;
+ clazz[i].kind = 0;
+ clazz[i].code = 0;
+ clazz[i].offset = 0;
+ clazz[i].size = 0;
+ clazz[i].reader = 0;
+ clazz[i].array_max = 0;
clazz[i].count_offset = 0;
+
+#else /* FT_DEBUG_LEVEL_TRACE */
+
+
+#undef CFF_FIELD_CALLBACK
+#define CFF_FIELD_CALLBACK( code_, name_, id_ ) \
+ clazz[i].kind = cff_kind_callback; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = 0; \
+ clazz[i].size = 0; \
+ clazz[i].reader = cff_parse_ ## name_; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ clazz[i].id = id_; \
+ i++;
+
+#undef CFF_FIELD
+#define CFF_FIELD( code_, name_, id_, kind_ ) \
+ clazz[i].kind = kind_; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
+ clazz[i].size = FT_FIELD_SIZE( name_ ); \
+ clazz[i].reader = 0; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ clazz[i].id = id_; \
+ i++; \
+
+#undef CFF_FIELD_DELTA
+#define CFF_FIELD_DELTA( code_, name_, max_, id_ ) \
+ clazz[i].kind = cff_kind_delta; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = FT_FIELD_OFFSET( name_ ); \
+ clazz[i].size = FT_FIELD_SIZE_DELTA( name_ ); \
+ clazz[i].reader = 0; \
+ clazz[i].array_max = max_; \
+ clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
+ clazz[i].id = id_; \
+ i++;
+
+#include "cfftoken.h"
+
+ clazz[i].kind = 0;
+ clazz[i].code = 0;
+ clazz[i].offset = 0;
+ clazz[i].size = 0;
+ clazz[i].reader = 0;
+ clazz[i].array_max = 0;
+ clazz[i].count_offset = 0;
+ clazz[i].id = 0;
+
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
*output_class = clazz;
+
return CFF_Err_Ok;
}
@@ -743,7 +872,7 @@
FT_Byte* p = start;
FT_Error error = CFF_Err_Ok;
FT_Library library = parser->library;
- FT_UNUSED(library);
+ FT_UNUSED( library );
parser->top = parser->stack;
@@ -824,6 +953,10 @@
FT_Byte* q = (FT_Byte*)parser->object + field->offset;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " %s", field->id ));
+#endif
+
/* check that we have enough arguments -- except for */
/* delta encoded arrays, which can be empty */
if ( field->kind != cff_kind_delta && num_args < 1 )
@@ -862,6 +995,34 @@
default: /* for 64-bit systems */
*(FT_Long*)q = val;
}
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ switch ( field->kind )
+ {
+ case cff_kind_bool:
+ FT_TRACE4(( " %s\n", val ? "true" : "false" ));
+ break;
+
+ case cff_kind_string:
+ FT_TRACE4(( " %ld (SID)\n", val ));
+ break;
+
+ case cff_kind_num:
+ FT_TRACE4(( " %ld\n", val ));
+ break;
+
+ case cff_kind_fixed:
+ FT_TRACE4(( " %f\n", (double)val / 65536 ));
+ break;
+
+ case cff_kind_fixed_thousand:
+ FT_TRACE4(( " %f\n", (double)val / 65536 / 1000 ));
+
+ default:
+ ; /* never reached */
+ }
+#endif
+
break;
case cff_kind_delta:
@@ -875,6 +1036,8 @@
if ( num_args > field->array_max )
num_args = field->array_max;
+ FT_TRACE4(( " [" ));
+
/* store count */
*qcount = (FT_Byte)num_args;
@@ -900,9 +1063,13 @@
*(FT_Long*)q = val;
}
+ FT_TRACE4(( " %ld", val ));
+
q += field->size;
num_args--;
}
+
+ FT_TRACE4(( "]\n" ));
}
break;
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
index 7e2c00a..61d91ed 100644
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -4,7 +4,7 @@
/* */
/* CFF token stream parser (specification) */
/* */
-/* Copyright 1996-2001, 2002, 2003 by */
+/* Copyright 1996-2003, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -90,6 +90,10 @@
FT_UInt array_max;
FT_UInt count_offset;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ const char* id;
+#endif
+
} CFF_Field_Handler;
diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h
index 6bb27d5..bcb4276 100644
--- a/src/cff/cfftoken.h
+++ b/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
/* */
/* CFF token definitions (specification only). */
/* */
-/* Copyright 1996-2001, 2002, 2003 by */
+/* Copyright 1996-2003, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,48 +22,48 @@
#undef CFFCODE
#define CFFCODE CFFCODE_TOPDICT
- CFF_FIELD_STRING ( 0, version )
- CFF_FIELD_STRING ( 1, notice )
- CFF_FIELD_STRING ( 0x100, copyright )
- CFF_FIELD_STRING ( 2, full_name )
- CFF_FIELD_STRING ( 3, family_name )
- CFF_FIELD_STRING ( 4, weight )
- CFF_FIELD_BOOL ( 0x101, is_fixed_pitch )
- CFF_FIELD_FIXED ( 0x102, italic_angle )
- CFF_FIELD_FIXED ( 0x103, underline_position )
- CFF_FIELD_FIXED ( 0x104, underline_thickness )
- CFF_FIELD_NUM ( 0x105, paint_type )
- CFF_FIELD_NUM ( 0x106, charstring_type )
- CFF_FIELD_CALLBACK( 0x107, font_matrix )
- CFF_FIELD_NUM ( 13, unique_id )
- CFF_FIELD_CALLBACK( 5, font_bbox )
- CFF_FIELD_NUM ( 0x108, stroke_width )
- CFF_FIELD_NUM ( 15, charset_offset )
- CFF_FIELD_NUM ( 16, encoding_offset )
- CFF_FIELD_NUM ( 17, charstrings_offset )
- CFF_FIELD_CALLBACK( 18, private_dict )
- CFF_FIELD_NUM ( 0x114, synthetic_base )
- CFF_FIELD_STRING ( 0x115, embedded_postscript )
+ CFF_FIELD_STRING ( 0, version, "Version" )
+ CFF_FIELD_STRING ( 1, notice, "Notice" )
+ CFF_FIELD_STRING ( 0x100, copyright, "Copyright" )
+ CFF_FIELD_STRING ( 2, full_name, "FullName" )
+ CFF_FIELD_STRING ( 3, family_name, "FamilyName" )
+ CFF_FIELD_STRING ( 4, weight, "Weight" )
+ CFF_FIELD_BOOL ( 0x101, is_fixed_pitch, "isFixedPitch" )
+ CFF_FIELD_FIXED ( 0x102, italic_angle, "ItalicAngle" )
+ CFF_FIELD_FIXED ( 0x103, underline_position, "UnderlinePosition" )
+ CFF_FIELD_FIXED ( 0x104, underline_thickness, "UnderlineThickness" )
+ CFF_FIELD_NUM ( 0x105, paint_type, "PaintType" )
+ CFF_FIELD_NUM ( 0x106, charstring_type, "CharstringType" )
+ CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
+ CFF_FIELD_NUM ( 13, unique_id, "UniqueID" )
+ CFF_FIELD_CALLBACK( 5, font_bbox, "FontBBox" )
+ CFF_FIELD_NUM ( 0x108, stroke_width, "StrokeWidth" )
+ CFF_FIELD_NUM ( 15, charset_offset, "charset" )
+ CFF_FIELD_NUM ( 16, encoding_offset, "Encoding" )
+ CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" )
+ CFF_FIELD_CALLBACK( 18, private_dict, "Private" )
+ CFF_FIELD_NUM ( 0x114, synthetic_base, "SyntheticBase" )
+ CFF_FIELD_STRING ( 0x115, embedded_postscript, "PostScript" )
#if 0
- CFF_FIELD_STRING ( 0x116, base_font_name )
- CFF_FIELD_DELTA ( 0x117, base_font_blend, 16 )
- CFF_FIELD_CALLBACK( 0x118, multiple_master )
- CFF_FIELD_CALLBACK( 0x119, blend_axis_types )
+ CFF_FIELD_STRING ( 0x116, base_font_name, "BaseFontName" )
+ CFF_FIELD_DELTA ( 0x117, base_font_blend, 16, "BaseFontBlend" )
+ CFF_FIELD_CALLBACK( 0x118, multiple_master, "MultipleMaster" )
+ CFF_FIELD_CALLBACK( 0x119, blend_axis_types, "BlendAxisTypes" )
#endif
- CFF_FIELD_CALLBACK( 0x11E, cid_ros )
- CFF_FIELD_NUM ( 0x11F, cid_font_version )
- CFF_FIELD_NUM ( 0x120, cid_font_revision )
- CFF_FIELD_NUM ( 0x121, cid_font_type )
- CFF_FIELD_NUM ( 0x122, cid_count )
- CFF_FIELD_NUM ( 0x123, cid_uid_base )
- CFF_FIELD_NUM ( 0x124, cid_fd_array_offset )
- CFF_FIELD_NUM ( 0x125, cid_fd_select_offset )
- CFF_FIELD_STRING ( 0x126, cid_font_name )
+ CFF_FIELD_CALLBACK( 0x11E, cid_ros, "ROS" )
+ CFF_FIELD_NUM ( 0x11F, cid_font_version, "CIDFontVersion" )
+ CFF_FIELD_NUM ( 0x120, cid_font_revision, "CIDFontRevision" )
+ CFF_FIELD_NUM ( 0x121, cid_font_type, "CIDFontType" )
+ CFF_FIELD_NUM ( 0x122, cid_count, "CIDCount" )
+ CFF_FIELD_NUM ( 0x123, cid_uid_base, "UIDBase" )
+ CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" )
+ CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" )
+ CFF_FIELD_STRING ( 0x126, cid_font_name, "FontName" )
#if 0
- CFF_FIELD_NUM ( 0x127, chameleon )
+ CFF_FIELD_NUM ( 0x127, chameleon, "Chameleon" )
#endif
@@ -72,26 +72,26 @@
#undef CFFCODE
#define CFFCODE CFFCODE_PRIVATE
- CFF_FIELD_DELTA ( 6, blue_values, 14 )
- CFF_FIELD_DELTA ( 7, other_blues, 10 )
- CFF_FIELD_DELTA ( 8, family_blues, 14 )
- CFF_FIELD_DELTA ( 9, family_other_blues, 10 )
- CFF_FIELD_FIXED_1000( 0x109, blue_scale )
- CFF_FIELD_NUM ( 0x10A, blue_shift )
- CFF_FIELD_NUM ( 0x10B, blue_fuzz )
- CFF_FIELD_NUM ( 10, standard_width )
- CFF_FIELD_NUM ( 11, standard_height )
- CFF_FIELD_DELTA ( 0x10C, snap_widths, 13 )
- CFF_FIELD_DELTA ( 0x10D, snap_heights, 13 )
- CFF_FIELD_BOOL ( 0x10E, force_bold )
- CFF_FIELD_FIXED ( 0x10F, force_bold_threshold )
- CFF_FIELD_NUM ( 0x110, lenIV )
- CFF_FIELD_NUM ( 0x111, language_group )
- CFF_FIELD_FIXED ( 0x112, expansion_factor )
- CFF_FIELD_NUM ( 0x113, initial_random_seed )
- CFF_FIELD_NUM ( 19, local_subrs_offset )
- CFF_FIELD_NUM ( 20, default_width )
- CFF_FIELD_NUM ( 21, nominal_width )
+ CFF_FIELD_DELTA ( 6, blue_values, 14, "BlueValues" )
+ CFF_FIELD_DELTA ( 7, other_blues, 10, "OtherBlues" )
+ CFF_FIELD_DELTA ( 8, family_blues, 14, "FamilyBlues" )
+ CFF_FIELD_DELTA ( 9, family_other_blues, 10, "FamilyOtherBlues" )
+ CFF_FIELD_FIXED_1000( 0x109, blue_scale, "BlueScale" )
+ CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" )
+ CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" )
+ CFF_FIELD_NUM ( 10, standard_width, "StdHW" )
+ CFF_FIELD_NUM ( 11, standard_height, "StdVW" )
+ CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" )
+ CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" )
+ CFF_FIELD_BOOL ( 0x10E, force_bold, "ForceBold" )
+ CFF_FIELD_FIXED ( 0x10F, force_bold_threshold, "ForceBoldThreshold" )
+ CFF_FIELD_NUM ( 0x110, lenIV, "lenIV" )
+ CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" )
+ CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" )
+ CFF_FIELD_NUM ( 0x113, initial_random_seed, "initialRandomSeed" )
+ CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" )
+ CFF_FIELD_NUM ( 20, default_width, "defaultWidthX" )
+ CFF_FIELD_NUM ( 21, nominal_width, "nominalWidthX" )
/* END */
diff --git a/src/cff/cfftypes.h b/src/cff/cfftypes.h
index 665ab6f..cae3689 100644
--- a/src/cff/cfftypes.h
+++ b/src/cff/cfftypes.h
@@ -117,6 +117,7 @@
FT_Int paint_type;
FT_Int charstring_type;
FT_Matrix font_matrix;
+ FT_Bool has_font_matrix;
FT_ULong units_per_em; /* temporarily used as scaling value also */
FT_Vector font_offset;
FT_ULong unique_id;
diff --git a/src/pfr/pfrload.c b/src/pfr/pfrload.c
new file mode 100644
index 0000000..325322e
--- /dev/null
+++ b/src/pfr/pfrload.c
@@ -0,0 +1,941 @@
+/***************************************************************************/
+/* */
+/* pfrload.c */
+/* */
+/* FreeType PFR loader (body). */
+/* */
+/* Copyright 2002, 2003, 2004, 2005, 2007, 2009, 2010 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include "pfrload.h"
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+
+#include "pfrerror.h"
+
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_pfr
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** EXTRA ITEMS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_extra_items_skip( FT_Byte* *pp,
+ FT_Byte* limit )
+ {
+ return pfr_extra_items_parse( pp, limit, NULL, NULL );
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_extra_items_parse( FT_Byte* *pp,
+ FT_Byte* limit,
+ PFR_ExtraItem item_list,
+ FT_Pointer item_data )
+ {
+ FT_Error error = PFR_Err_Ok;
+ FT_Byte* p = *pp;
+ FT_UInt num_items, item_type, item_size;
+
+
+ PFR_CHECK( 1 );
+ num_items = PFR_NEXT_BYTE( p );
+
+ for ( ; num_items > 0; num_items-- )
+ {
+ PFR_CHECK( 2 );
+ item_size = PFR_NEXT_BYTE( p );
+ item_type = PFR_NEXT_BYTE( p );
+
+ PFR_CHECK( item_size );
+
+ if ( item_list )
+ {
+ PFR_ExtraItem extra = item_list;
+
+
+ for ( extra = item_list; extra->parser != NULL; extra++ )
+ {
+ if ( extra->type == item_type )
+ {
+ error = extra->parser( p, p + item_size, item_data );
+ if ( error ) goto Exit;
+
+ break;
+ }
+ }
+ }
+
+ p += item_size;
+ }
+
+ Exit:
+ *pp = p;
+ return error;
+
+ Too_Short:
+ FT_ERROR(( "pfr_extra_items_parse: invalid extra items table\n" ));
+ error = PFR_Err_Invalid_Table;
+ goto Exit;
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PFR HEADER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ static const FT_Frame_Field pfr_header_fields[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE PFR_HeaderRec
+
+ FT_FRAME_START( 58 ),
+ FT_FRAME_ULONG ( signature ),
+ FT_FRAME_USHORT( version ),
+ FT_FRAME_USHORT( signature2 ),
+ FT_FRAME_USHORT( header_size ),
+
+ FT_FRAME_USHORT( log_dir_size ),
+ FT_FRAME_USHORT( log_dir_offset ),
+
+ FT_FRAME_USHORT( log_font_max_size ),
+ FT_FRAME_UOFF3 ( log_font_section_size ),
+ FT_FRAME_UOFF3 ( log_font_section_offset ),
+
+ FT_FRAME_USHORT( phy_font_max_size ),
+ FT_FRAME_UOFF3 ( phy_font_section_size ),
+ FT_FRAME_UOFF3 ( phy_font_section_offset ),
+
+ FT_FRAME_USHORT( gps_max_size ),
+ FT_FRAME_UOFF3 ( gps_section_size ),
+ FT_FRAME_UOFF3 ( gps_section_offset ),
+
+ FT_FRAME_BYTE ( max_blue_values ),
+ FT_FRAME_BYTE ( max_x_orus ),
+ FT_FRAME_BYTE ( max_y_orus ),
+
+ FT_FRAME_BYTE ( phy_font_max_size_high ),
+ FT_FRAME_BYTE ( color_flags ),
+
+ FT_FRAME_UOFF3 ( bct_max_size ),
+ FT_FRAME_UOFF3 ( bct_set_max_size ),
+ FT_FRAME_UOFF3 ( phy_bct_set_max_size ),
+
+ FT_FRAME_USHORT( num_phy_fonts ),
+ FT_FRAME_BYTE ( max_vert_stem_snap ),
+ FT_FRAME_BYTE ( max_horz_stem_snap ),
+ FT_FRAME_USHORT( max_chars ),
+ FT_FRAME_END
+ };
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_header_load( PFR_Header header,
+ FT_Stream stream )
+ {
+ FT_Error error;
+
+
+ /* read header directly */
+ if ( !FT_STREAM_SEEK( 0 ) &&
+ !FT_STREAM_READ_FIELDS( pfr_header_fields, header ) )
+ {
+ /* make a few adjustments to the header */
+ header->phy_font_max_size +=
+ (FT_UInt32)header->phy_font_max_size_high << 16;
+ }
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ pfr_header_check( PFR_Header header )
+ {
+ FT_Bool result = 1;
+
+
+ /* check signature and header size */
+ if ( header->signature != 0x50465230L || /* "PFR0" */
+ header->version > 4 ||
+ header->header_size < 58 ||
+ header->signature2 != 0x0d0a ) /* CR/LF */
+ {
+ result = 0;
+ }
+ return result;
+ }
+
+
+ /***********************************************************************/
+ /***********************************************************************/
+ /***** *****/
+ /***** PFR LOGICAL FONTS *****/
+ /***** *****/
+ /***********************************************************************/
+ /***********************************************************************/
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_log_font_count( FT_Stream stream,
+ FT_UInt32 section_offset,
+ FT_UInt *acount )
+ {
+ FT_Error error;
+ FT_UInt count;
+ FT_UInt result = 0;
+
+
+ if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
+ goto Exit;
+
+ result = count;
+
+ Exit:
+ *acount = result;
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_log_font_load( PFR_LogFont log_font,
+ FT_Stream stream,
+ FT_UInt idx,
+ FT_UInt32 section_offset,
+ FT_Bool size_increment )
+ {
+ FT_UInt num_log_fonts;
+ FT_UInt flags;
+ FT_UInt32 offset;
+ FT_UInt32 size;
+ FT_Error error;
+
+
+ if ( FT_STREAM_SEEK( section_offset ) ||
+ FT_READ_USHORT( num_log_fonts ) )
+ goto Exit;
+
+ if ( idx >= num_log_fonts )
+ return PFR_Err_Invalid_Argument;
+
+ if ( FT_STREAM_SKIP( idx * 5 ) ||
+ FT_READ_USHORT( size ) ||
+ FT_READ_UOFF3 ( offset ) )
+ goto Exit;
+
+ /* save logical font size and offset */
+ log_font->size = size;
+ log_font->offset = offset;
+
+ /* now, check the rest of the table before loading it */
+ {
+ FT_Byte* p;
+ FT_Byte* limit;
+ FT_UInt local;
+
+
+ if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+ goto Exit;
+
+ p = stream->cursor;
+ limit = p + size;
+
+ PFR_CHECK(13);
+
+ log_font->matrix[0] = PFR_NEXT_LONG( p );
+ log_font->matrix[1] = PFR_NEXT_LONG( p );
+ log_font->matrix[2] = PFR_NEXT_LONG( p );
+ log_font->matrix[3] = PFR_NEXT_LONG( p );
+
+ flags = PFR_NEXT_BYTE( p );
+
+ local = 0;
+ if ( flags & PFR_LOG_STROKE )
+ {
+ local++;
+ if ( flags & PFR_LOG_2BYTE_STROKE )
+ local++;
+
+ if ( (flags & PFR_LINE_JOIN_MASK) == PFR_LINE_JOIN_MITER )
+ local += 3;
+ }
+ if ( flags & PFR_LOG_BOLD )
+ {
+ local++;
+ if ( flags & PFR_LOG_2BYTE_BOLD )
+ local++;
+ }
+
+ PFR_CHECK( local );
+
+ if ( flags & PFR_LOG_STROKE )
+ {
+ log_font->stroke_thickness = ( flags & PFR_LOG_2BYTE_STROKE )
+ ? PFR_NEXT_SHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
+ log_font->miter_limit = PFR_NEXT_LONG( p );
+ }
+
+ if ( flags & PFR_LOG_BOLD )
+ {
+ log_font->bold_thickness = ( flags & PFR_LOG_2BYTE_BOLD )
+ ? PFR_NEXT_SHORT( p )
+ : PFR_NEXT_BYTE( p );
+ }
+
+ if ( flags & PFR_LOG_EXTRA_ITEMS )
+ {
+ error = pfr_extra_items_skip( &p, limit );
+ if (error) goto Fail;
+ }
+
+ PFR_CHECK(5);
+ log_font->phys_size = PFR_NEXT_USHORT( p );
+ log_font->phys_offset = PFR_NEXT_ULONG( p );
+ if ( size_increment )
+ {
+ PFR_CHECK( 1 );
+ log_font->phys_size += (FT_UInt32)PFR_NEXT_BYTE( p ) << 16;
+ }
+ }
+
+ Fail:
+ FT_FRAME_EXIT();
+
+ Exit:
+ return error;
+
+ Too_Short:
+ FT_ERROR(( "pfr_log_font_load: invalid logical font table\n" ));
+ error = PFR_Err_Invalid_Table;
+ goto Fail;
+ }
+
+
+ /***********************************************************************/
+ /***********************************************************************/
+ /***** *****/
+ /***** PFR PHYSICAL FONTS *****/
+ /***** *****/
+ /***********************************************************************/
+ /***********************************************************************/
+
+
+ /* load bitmap strikes lists */
+ FT_CALLBACK_DEF( FT_Error )
+ pfr_extra_item_load_bitmap_info( FT_Byte* p,
+ FT_Byte* limit,
+ PFR_PhyFont phy_font )
+ {
+ FT_Memory memory = phy_font->memory;
+ PFR_Strike strike;
+ FT_UInt flags0;
+ FT_UInt n, count, size1;
+ FT_Error error = PFR_Err_Ok;
+
+
+ PFR_CHECK( 5 );
+
+ p += 3; /* skip bctSize */
+ flags0 = PFR_NEXT_BYTE( p );
+ count = PFR_NEXT_BYTE( p );
+
+ /* re-allocate when needed */
+ if ( phy_font->num_strikes + count > phy_font->max_strikes )
+ {
+ FT_UInt new_max = FT_PAD_CEIL( phy_font->num_strikes + count, 4 );
+
+
+ if ( FT_RENEW_ARRAY( phy_font->strikes,
+ phy_font->num_strikes,
+ new_max ) )
+ goto Exit;
+
+ phy_font->max_strikes = new_max;
+ }
+
+ size1 = 1 + 1 + 1 + 2 + 2 + 1;
+ if ( flags0 & PFR_STRIKE_2BYTE_XPPM )
+ size1++;
+
+ if ( flags0 & PFR_STRIKE_2BYTE_YPPM )
+ size1++;
+
+ if ( flags0 & PFR_STRIKE_3BYTE_SIZE )
+ size1++;
+
+ if ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
+ size1++;
+
+ if ( flags0 & PFR_STRIKE_2BYTE_COUNT )
+ size1++;
+
+ strike = phy_font->strikes + phy_font->num_strikes;
+
+ PFR_CHECK( count * size1 );
+
+ for ( n = 0; n < count; n++, strike++ )
+ {
+ strike->x_ppm = ( flags0 & PFR_STRIKE_2BYTE_XPPM )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ strike->y_ppm = ( flags0 & PFR_STRIKE_2BYTE_YPPM )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ strike->flags = PFR_NEXT_BYTE( p );
+
+ strike->bct_size = ( flags0 & PFR_STRIKE_3BYTE_SIZE )
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
+
+ strike->bct_offset = ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
+
+ strike->num_bitmaps = ( flags0 & PFR_STRIKE_2BYTE_COUNT )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+ }
+
+ phy_font->num_strikes += count;
+
+ Exit:
+ return error;
+
+ Too_Short:
+ error = PFR_Err_Invalid_Table;
+ FT_ERROR(( "pfr_extra_item_load_bitmap_info:"
+ " invalid bitmap info table\n" ));
+ goto Exit;
+ }
+
+
+ /* Load font ID. This is a so-called "unique" name that is rather
+ * long and descriptive (like "Tiresias ScreenFont v7.51").
+ *
+ * Note that a PFR font's family name is contained in an *undocumented*
+ * string of the "auxiliary data" portion of a physical font record. This
+ * may also contain the "real" style name!
+ *
+ * If no family name is present, the font ID is used instead for the
+ * family.
+ */
+ FT_CALLBACK_DEF( FT_Error )
+ pfr_extra_item_load_font_id( FT_Byte* p,
+ FT_Byte* limit,
+ PFR_PhyFont phy_font )
+ {
+ FT_Error error = PFR_Err_Ok;
+ FT_Memory memory = phy_font->memory;
+ FT_PtrDist len = limit - p;
+
+
+ if ( phy_font->font_id != NULL )
+ goto Exit;
+
+ if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
+ goto Exit;
+
+ /* copy font ID name, and terminate it for safety */
+ FT_MEM_COPY( phy_font->font_id, p, len );
+ phy_font->font_id[len] = 0;
+
+ Exit:
+ return error;
+ }
+
+
+ /* load stem snap tables */
+ FT_CALLBACK_DEF( FT_Error )
+ pfr_extra_item_load_stem_snaps( FT_Byte* p,
+ FT_Byte* limit,
+ PFR_PhyFont phy_font )
+ {
+ FT_UInt count, num_vert, num_horz;
+ FT_Int* snaps = NULL;
+ FT_Error error = PFR_Err_Ok;
+ FT_Memory memory = phy_font->memory;
+
+
+ if ( phy_font->vertical.stem_snaps != NULL )
+ goto Exit;
+
+ PFR_CHECK( 1 );
+ count = PFR_NEXT_BYTE( p );
+
+ num_vert = count & 15;
+ num_horz = count >> 4;
+ count = num_vert + num_horz;
+
+ PFR_CHECK( count * 2 );
+
+ if ( FT_NEW_ARRAY( snaps, count ) )
+ goto Exit;
+
+ phy_font->vertical.stem_snaps = snaps;
+ phy_font->horizontal.stem_snaps = snaps + num_vert;
+
+ for ( ; count > 0; count--, snaps++ )
+ *snaps = FT_NEXT_SHORT( p );
+
+ Exit:
+ return error;
+
+ Too_Short:
+ error = PFR_Err_Invalid_Table;
+ FT_ERROR(( "pfr_exta_item_load_stem_snaps:"
+ " invalid stem snaps table\n" ));
+ goto Exit;
+ }
+
+
+
+ /* load kerning pair data */
+ FT_CALLBACK_DEF( FT_Error )
+ pfr_extra_item_load_kerning_pairs( FT_Byte* p,
+ FT_Byte* limit,
+ PFR_PhyFont phy_font )
+ {
+ PFR_KernItem item = NULL;
+ FT_Error error = PFR_Err_Ok;
+ FT_Memory memory = phy_font->memory;
+
+
+ FT_TRACE2(( "pfr_extra_item_load_kerning_pairs()\n" ));
+
+ if ( FT_NEW( item ) )
+ goto Exit;
+
+ PFR_CHECK( 4 );
+
+ item->pair_count = PFR_NEXT_BYTE( p );
+ item->base_adj = PFR_NEXT_SHORT( p );
+ item->flags = PFR_NEXT_BYTE( p );
+ item->offset = phy_font->offset + ( p - phy_font->cursor );
+
+#ifndef PFR_CONFIG_NO_CHECKS
+ item->pair_size = 3;
+
+ if ( item->flags & PFR_KERN_2BYTE_CHAR )
+ item->pair_size += 2;
+
+ if ( item->flags & PFR_KERN_2BYTE_ADJ )
+ item->pair_size += 1;
+
+ PFR_CHECK( item->pair_count * item->pair_size );
+#endif
+
+ /* load first and last pairs into the item to speed up */
+ /* lookup later... */
+ if ( item->pair_count > 0 )
+ {
+ FT_UInt char1, char2;
+ FT_Byte* q;
+
+
+ if ( item->flags & PFR_KERN_2BYTE_CHAR )
+ {
+ q = p;
+ char1 = PFR_NEXT_USHORT( q );
+ char2 = PFR_NEXT_USHORT( q );
+
+ item->pair1 = PFR_KERN_INDEX( char1, char2 );
+
+ q = p + item->pair_size * ( item->pair_count - 1 );
+ char1 = PFR_NEXT_USHORT( q );
+ char2 = PFR_NEXT_USHORT( q );
+
+ item->pair2 = PFR_KERN_INDEX( char1, char2 );
+ }
+ else
+ {
+ q = p;
+ char1 = PFR_NEXT_BYTE( q );
+ char2 = PFR_NEXT_BYTE( q );
+
+ item->pair1 = PFR_KERN_INDEX( char1, char2 );
+
+ q = p + item->pair_size * ( item->pair_count - 1 );
+ char1 = PFR_NEXT_BYTE( q );
+ char2 = PFR_NEXT_BYTE( q );
+
+ item->pair2 = PFR_KERN_INDEX( char1, char2 );
+ }
+
+ /* add new item to the current list */
+ item->next = NULL;
+ *phy_font->kern_items_tail = item;
+ phy_font->kern_items_tail = &item->next;
+ phy_font->num_kern_pairs += item->pair_count;
+ }
+ else
+ {
+ /* empty item! */
+ FT_FREE( item );
+ }
+
+ Exit:
+ return error;
+
+ Too_Short:
+ FT_FREE( item );
+
+ error = PFR_Err_Invalid_Table;
+ FT_ERROR(( "pfr_extra_item_load_kerning_pairs:"
+ " invalid kerning pairs table\n" ));
+ goto Exit;
+ }
+
+
+
+ static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
+ {
+ { 1, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_bitmap_info },
+ { 2, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_font_id },
+ { 3, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_stem_snaps },
+ { 4, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_kerning_pairs },
+ { 0, NULL }
+ };
+
+
+ /* Loads a name from the auxiliary data. Since this extracts undocumented
+ * strings from the font file, we need to be careful here.
+ */
+ static FT_Error
+ pfr_aux_name_load( FT_Byte* p,
+ FT_UInt len,
+ FT_Memory memory,
+ FT_String* *astring )
+ {
+ FT_Error error = PFR_Err_Ok;
+ FT_String* result = NULL;
+ FT_UInt n, ok;
+
+
+ if ( len > 0 && p[len - 1] == 0 )
+ len--;
+
+ /* check that each character is ASCII for making sure not to
+ load garbage
+ */
+ ok = ( len > 0 );
+ for ( n = 0; n < len; n++ )
+ if ( p[n] < 32 || p[n] > 127 )
+ {
+ ok = 0;
+ break;
+ }
+
+ if ( ok )
+ {
+ if ( FT_ALLOC( result, len + 1 ) )
+ goto Exit;
+
+ FT_MEM_COPY( result, p, len );
+ result[len] = 0;
+ }
+ Exit:
+ *astring = result;
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ pfr_phy_font_done( PFR_PhyFont phy_font,
+ FT_Memory memory )
+ {
+ FT_FREE( phy_font->font_id );
+ FT_FREE( phy_font->family_name );
+ FT_FREE( phy_font->style_name );
+
+ FT_FREE( phy_font->vertical.stem_snaps );
+ phy_font->vertical.num_stem_snaps = 0;
+
+ phy_font->horizontal.stem_snaps = NULL;
+ phy_font->horizontal.num_stem_snaps = 0;
+
+ FT_FREE( phy_font->strikes );
+ phy_font->num_strikes = 0;
+ phy_font->max_strikes = 0;
+
+ FT_FREE( phy_font->chars );
+ phy_font->num_chars = 0;
+ phy_font->chars_offset = 0;
+
+ FT_FREE( phy_font->blue_values );
+ phy_font->num_blue_values = 0;
+
+ {
+ PFR_KernItem item, next;
+
+
+ item = phy_font->kern_items;
+ while ( item )
+ {
+ next = item->next;
+ FT_FREE( item );
+ item = next;
+ }
+ phy_font->kern_items = NULL;
+ phy_font->kern_items_tail = NULL;
+ }
+
+ phy_font->num_kern_pairs = 0;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ pfr_phy_font_load( PFR_PhyFont phy_font,
+ FT_Stream stream,
+ FT_UInt32 offset,
+ FT_UInt32 size )
+ {
+ FT_Error error;
+ FT_Memory memory = stream->memory;
+ FT_UInt flags;
+ FT_ULong num_aux;
+ FT_Byte* p;
+ FT_Byte* limit;
+
+
+ phy_font->memory = memory;
+ phy_font->offset = offset;
+
+ phy_font->kern_items = NULL;
+ phy_font->kern_items_tail = &phy_font->kern_items;
+
+ if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+ goto Exit;
+
+ phy_font->cursor = stream->cursor;
+
+ p = stream->cursor;
+ limit = p + size;
+
+ PFR_CHECK( 15 );
+ phy_font->font_ref_number = PFR_NEXT_USHORT( p );
+ phy_font->outline_resolution = PFR_NEXT_USHORT( p );
+ phy_font->metrics_resolution = PFR_NEXT_USHORT( p );
+ phy_font->bbox.xMin = PFR_NEXT_SHORT( p );
+ phy_font->bbox.yMin = PFR_NEXT_SHORT( p );
+ phy_font->bbox.xMax = PFR_NEXT_SHORT( p );
+ phy_font->bbox.yMax = PFR_NEXT_SHORT( p );
+ phy_font->flags = flags = PFR_NEXT_BYTE( p );
+
+ /* get the standard advance for non-proportional fonts */
+ if ( !(flags & PFR_PHY_PROPORTIONAL) )
+ {
+ PFR_CHECK( 2 );
+ phy_font->standard_advance = PFR_NEXT_SHORT( p );
+ }
+
+ /* load the extra items when present */
+ if ( flags & PFR_PHY_EXTRA_ITEMS )
+ {
+ error = pfr_extra_items_parse( &p, limit,
+ pfr_phy_font_extra_items, phy_font );
+
+ if ( error )
+ goto Fail;
+ }
+
+ /* In certain fonts, the auxiliary bytes contain interesting */
+ /* information. These are not in the specification but can be */
+ /* guessed by looking at the content of a few PFR0 fonts. */
+ PFR_CHECK( 3 );
+ num_aux = PFR_NEXT_ULONG( p );
+
+ if ( num_aux > 0 )
+ {
+ FT_Byte* q = p;
+ FT_Byte* q2;
+
+
+ PFR_CHECK( num_aux );
+ p += num_aux;
+
+ while ( num_aux > 0 )
+ {
+ FT_UInt length, type;
+
+
+ if ( q + 4 > p )
+ break;
+
+ length = PFR_NEXT_USHORT( q );
+ if ( length < 4 || length > num_aux )
+ break;
+
+ q2 = q + length - 2;
+ type = PFR_NEXT_USHORT( q );
+
+ switch ( type )
+ {
+ case 1:
+ /* this seems to correspond to the font's family name,
+ * padded to 16-bits with one zero when necessary
+ */
+ error = pfr_aux_name_load( q, length - 4U, memory,
+ &phy_font->family_name );
+ if ( error )
+ goto Exit;
+ break;
+
+ case 2:
+ if ( q + 32 > q2 )
+ break;
+
+ q += 10;
+ phy_font->ascent = PFR_NEXT_SHORT( q );
+ phy_font->descent = PFR_NEXT_SHORT( q );
+ phy_font->leading = PFR_NEXT_SHORT( q );
+ q += 16;
+ break;
+
+ case 3:
+ /* this seems to correspond to the font's style name,
+ * padded to 16-bits with one zero when necessary
+ */
+ error = pfr_aux_name_load( q, length - 4U, memory,
+ &phy_font->style_name );
+ if ( error )
+ goto Exit;
+ break;
+
+ default:
+ ;
+ }
+
+ q = q2;
+ num_aux -= length;
+ }
+ }
+
+ /* read the blue values */
+ {
+ FT_UInt n, count;
+
+
+ PFR_CHECK( 1 );
+ phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );
+
+ PFR_CHECK( count * 2 );
+
+ if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )
+ goto Fail;
+
+ for ( n = 0; n < count; n++ )
+ phy_font->blue_values[n] = PFR_NEXT_SHORT( p );
+ }
+
+ PFR_CHECK( 8 );
+ phy_font->blue_fuzz = PFR_NEXT_BYTE( p );
+ phy_font->blue_scale = PFR_NEXT_BYTE( p );
+
+ phy_font->vertical.standard = PFR_NEXT_USHORT( p );
+ phy_font->horizontal.standard = PFR_NEXT_USHORT( p );
+
+ /* read the character descriptors */
+ {
+ FT_UInt n, count, Size;
+
+
+ phy_font->num_chars = count = PFR_NEXT_USHORT( p );
+ phy_font->chars_offset = offset + ( p - stream->cursor );
+
+ if ( FT_NEW_ARRAY( phy_font->chars, count ) )
+ goto Fail;
+
+ Size = 1 + 1 + 2;
+ if ( flags & PFR_PHY_2BYTE_CHARCODE )
+ Size += 1;
+
+ if ( flags & PFR_PHY_PROPORTIONAL )
+ Size += 2;
+
+ if ( flags & PFR_PHY_ASCII_CODE )
+ Size += 1;
+
+ if ( flags & PFR_PHY_2BYTE_GPS_SIZE )
+ Size += 1;
+
+ if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
+ Size += 1;
+
+ PFR_CHECK( count * Size );
+
+ for ( n = 0; n < count; n++ )
+ {
+ PFR_Char cur = &phy_font->chars[n];
+
+
+ cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ cur->advance = ( flags & PFR_PHY_PROPORTIONAL )
+ ? PFR_NEXT_SHORT( p )
+ : (FT_Int) phy_font->standard_advance;
+
+#if 0
+ cur->ascii = ( flags & PFR_PHY_ASCII_CODE )
+ ? PFR_NEXT_BYTE( p )
+ : 0;
+#else
+ if ( flags & PFR_PHY_ASCII_CODE )
+ p += 1;
+#endif
+ cur->gps_size = ( flags & PFR_PHY_2BYTE_GPS_SIZE )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
+ }
+ }
+
+ /* that's it! */
+
+ Fail:
+ FT_FRAME_EXIT();
+
+ /* save position of bitmap info */
+ phy_font->bct_offset = FT_STREAM_POS();
+ phy_font->cursor = NULL;
+
+ Exit:
+ return error;
+
+ Too_Short:
+ error = PFR_Err_Invalid_Table;
+ FT_ERROR(( "pfr_phy_font_load: invalid physical font table\n" ));
+ goto Fail;
+ }
+
+
+/* END */
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index 5b160ce..a28b5fc 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -185,8 +185,8 @@
/* grow the base block if needed */
if ( table->cursor + length > table->capacity )
{
- FT_Error error;
- FT_Offset new_size = table->capacity;
+ FT_Error error;
+ FT_Offset new_size = table->capacity;
FT_PtrDist in_offset;
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 90874f0..b3ccbdd 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -764,6 +764,13 @@
if ( arg_cnt != 0 )
goto Unexpected_OtherSubr;
+ if ( decoder->flex_state == 0 )
+ {
+ FT_ERROR(( "t1_decoder_parse_charstrings:"
+ " missing flex start\n" ));
+ goto Syntax_Error;
+ }
+
/* note that we should not add a point for index 0; */
/* this will move our current position to the flex */
/* point without adding any point to the outline */
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
index 1521e9c..0a6637f 100644
--- a/src/psnames/pstables.h
+++ b/src/psnames/pstables.h
@@ -4,7 +4,7 @@
/* */
/* PostScript glyph names. */
/* */
-/* Copyright 2005, 2008 by */
+/* Copyright 2005, 2008, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -564,15 +564,15 @@
#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
- static const unsigned char ft_adobe_glyph_list[54791L] =
+ static const unsigned char ft_adobe_glyph_list[55997L] =
{
0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23,
11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88,
22,110, 23, 32, 23, 71, 24, 77, 27,156, 29, 73, 31,247, 32,107,
- 32,222, 33, 55, 34,154, 35,218, 53, 84, 59,196, 68, 6, 75,183,
- 83,178, 88,135, 93,242,101,165,109,185,111, 55,117,254,123, 73,
- 130,238,138,206,145, 31,153,182,156,189,163,249,178,221,193, 17,
- 197, 99,199,240,204, 27,204,155,210,100, 65,143, 0, 65, 0,140,
+ 32,222, 33, 55, 34,154, 35,218, 58, 10, 64,122, 72,188, 80,109,
+ 88,104, 93, 61, 98,168,106, 91,114,111,115,237,122,180,127,255,
+ 135,164,143,132,149,213,158,108,161,115,168,175,183,147,197,199,
+ 202, 25,204,166,208,209,209, 81,215, 26, 65,143, 0, 65, 0,140,
0,175, 0,193, 1, 15, 1,147, 1,233, 1,251, 2, 7, 2, 40,
2, 57, 2, 82, 2, 91, 2,128, 2,136, 2,154, 69,131, 0,198,
0,150, 0,158, 0,167,225,227,245,244,101,128, 1,252,237,225,
@@ -1139,2858 +1139,2933 @@
233,243,227,249,242,233,236,236,233, 99,128, 4,220,236,233,238,
229,226,229,236,239,119,128, 30,148,237,239,238,239,243,240,225,
227,101,128,255, 58,115, 2, 35,203, 35,210,237,225,236,108,128,
- 247,122,244,242,239,235,101,128, 1,181, 97,149, 0, 97, 36, 8,
- 36,144, 37, 35, 37,211, 38, 55, 38, 91, 45, 10, 45, 47, 45, 74,
- 46, 43, 46, 81, 47,170, 47,242, 48,197, 48,206, 49, 79, 51, 87,
- 52, 77, 52,124, 53, 19, 53, 33, 97, 7, 36, 24, 36, 34, 36, 41,
- 36, 48, 36, 73, 36, 89, 36,100,226,229,238,231,225,236,105,128,
- 9,134,227,245,244,101,128, 0,225,228,229,246, 97,128, 9, 6,
- 231,117, 2, 36, 55, 36, 64,234,225,242,225,244,105,128, 10,134,
- 242,237,245,235,232,105,128, 10, 6,237,225,244,242,225,231,245,
- 242,237,245,235,232,105,128, 10, 62,242,245,243,241,245,225,242,
- 101,128, 51, 3,246,239,247,229,236,243,233,231,110, 3, 36,116,
- 36,126, 36,133,226,229,238,231,225,236,105,128, 9,190,228,229,
- 246, 97,128, 9, 62,231,245,234,225,242,225,244,105,128, 10,190,
- 98, 4, 36,154, 36,195, 36,204, 36,214,226,242,229,246,233,225,
- 244,233,239,110, 2, 36,169, 36,184,237,225,242,235,225,242,237,
- 229,238,233,225,110,128, 5, 95,243,233,231,238,228,229,246, 97,
- 128, 9,112,229,238,231,225,236,105,128, 9,133,239,240,239,237,
- 239,230,111,128, 49, 26,242,229,246,101,134, 1, 3, 36,233, 36,
- 241, 36,252, 37, 7, 37, 15, 37, 27,225,227,245,244,101,128, 30,
- 175,227,249,242,233,236,236,233, 99,128, 4,209,228,239,244,226,
- 229,236,239,119,128, 30,183,231,242,225,246,101,128, 30,177,232,
- 239,239,235,225,226,239,246,101,128, 30,179,244,233,236,228,101,
- 128, 30,181, 99, 4, 37, 45, 37, 52, 37,131, 37,201,225,242,239,
- 110,128, 1,206,233,242, 99, 2, 37, 60, 37, 65,236,101,128, 36,
- 208,245,237,230,236,229,120,133, 0,226, 37, 84, 37, 92, 37,103,
- 37,111, 37,123,225,227,245,244,101,128, 30,165,228,239,244,226,
- 229,236,239,119,128, 30,173,231,242,225,246,101,128, 30,167,232,
- 239,239,235,225,226,239,246,101,128, 30,169,244,233,236,228,101,
- 128, 30,171,245,244,101,133, 0,180, 37,147, 37,158, 37,175, 37,
- 182, 37,191,226,229,236,239,247,227,237, 98,128, 3, 23, 99, 2,
- 37,164, 37,169,237, 98,128, 3, 1,239,237, 98,128, 3, 1,228,
- 229,246, 97,128, 9, 84,236,239,247,237,239,100,128, 2,207,244,
- 239,238,229,227,237, 98,128, 3, 65,249,242,233,236,236,233, 99,
- 128, 4, 48,100, 5, 37,223, 37,233, 37,247, 37,253, 38, 31,226,
- 236,231,242,225,246,101,128, 2, 1,228,225,235,231,245,242,237,
- 245,235,232,105,128, 10,113,229,246, 97,128, 9, 5,233,229,242,
- 229,243,233,115,130, 0,228, 38, 11, 38, 22,227,249,242,233,236,
- 236,233, 99,128, 4,211,237,225,227,242,239,110,128, 1,223,239,
- 116, 2, 38, 38, 38, 46,226,229,236,239,119,128, 30,161,237,225,
- 227,242,239,110,128, 1,225,101,131, 0,230, 38, 65, 38, 73, 38,
- 82,225,227,245,244,101,128, 1,253,235,239,242,229,225,110,128,
- 49, 80,237,225,227,242,239,110,128, 1,227,230,233,105, 6, 38,
- 107, 38,127, 41, 64, 41, 70, 41, 85, 44,185, 48, 2, 38,113, 38,
- 120,176,178,176, 56,128, 32, 21,184,185,180, 49,128, 32,164,177,
- 48, 3, 38,136, 40,160, 41, 39, 48, 9, 38,156, 38,176, 38,238,
- 39, 44, 39,106, 39,168, 39,230, 40, 36, 40, 98, 49, 3, 38,164,
- 38,168, 38,172, 55,128, 4, 16, 56,128, 4, 17, 57,128, 4, 18,
- 50, 10, 38,198, 38,202, 38,206, 38,210, 38,214, 38,218, 38,222,
- 38,226, 38,230, 38,234, 48,128, 4, 19, 49,128, 4, 20, 50,128,
- 4, 21, 51,128, 4, 1, 52,128, 4, 22, 53,128, 4, 23, 54,128,
- 4, 24, 55,128, 4, 25, 56,128, 4, 26, 57,128, 4, 27, 51, 10,
- 39, 4, 39, 8, 39, 12, 39, 16, 39, 20, 39, 24, 39, 28, 39, 32,
- 39, 36, 39, 40, 48,128, 4, 28, 49,128, 4, 29, 50,128, 4, 30,
- 51,128, 4, 31, 52,128, 4, 32, 53,128, 4, 33, 54,128, 4, 34,
- 55,128, 4, 35, 56,128, 4, 36, 57,128, 4, 37, 52, 10, 39, 66,
- 39, 70, 39, 74, 39, 78, 39, 82, 39, 86, 39, 90, 39, 94, 39, 98,
- 39,102, 48,128, 4, 38, 49,128, 4, 39, 50,128, 4, 40, 51,128,
- 4, 41, 52,128, 4, 42, 53,128, 4, 43, 54,128, 4, 44, 55,128,
- 4, 45, 56,128, 4, 46, 57,128, 4, 47, 53, 10, 39,128, 39,132,
- 39,136, 39,140, 39,144, 39,148, 39,152, 39,156, 39,160, 39,164,
- 48,128, 4,144, 49,128, 4, 2, 50,128, 4, 3, 51,128, 4, 4,
- 52,128, 4, 5, 53,128, 4, 6, 54,128, 4, 7, 55,128, 4, 8,
- 56,128, 4, 9, 57,128, 4, 10, 54, 10, 39,190, 39,194, 39,198,
- 39,202, 39,206, 39,210, 39,214, 39,218, 39,222, 39,226, 48,128,
- 4, 11, 49,128, 4, 12, 50,128, 4, 14, 51,128,246,196, 52,128,
- 246,197, 53,128, 4, 48, 54,128, 4, 49, 55,128, 4, 50, 56,128,
- 4, 51, 57,128, 4, 52, 55, 10, 39,252, 40, 0, 40, 4, 40, 8,
- 40, 12, 40, 16, 40, 20, 40, 24, 40, 28, 40, 32, 48,128, 4, 53,
- 49,128, 4, 81, 50,128, 4, 54, 51,128, 4, 55, 52,128, 4, 56,
- 53,128, 4, 57, 54,128, 4, 58, 55,128, 4, 59, 56,128, 4, 60,
- 57,128, 4, 61, 56, 10, 40, 58, 40, 62, 40, 66, 40, 70, 40, 74,
- 40, 78, 40, 82, 40, 86, 40, 90, 40, 94, 48,128, 4, 62, 49,128,
- 4, 63, 50,128, 4, 64, 51,128, 4, 65, 52,128, 4, 66, 53,128,
- 4, 67, 54,128, 4, 68, 55,128, 4, 69, 56,128, 4, 70, 57,128,
- 4, 71, 57, 10, 40,120, 40,124, 40,128, 40,132, 40,136, 40,140,
- 40,144, 40,148, 40,152, 40,156, 48,128, 4, 72, 49,128, 4, 73,
- 50,128, 4, 74, 51,128, 4, 75, 52,128, 4, 76, 53,128, 4, 77,
- 54,128, 4, 78, 55,128, 4, 79, 56,128, 4,145, 57,128, 4, 82,
- 49, 4, 40,170, 40,232, 40,237, 41, 7, 48, 10, 40,192, 40,196,
- 40,200, 40,204, 40,208, 40,212, 40,216, 40,220, 40,224, 40,228,
- 48,128, 4, 83, 49,128, 4, 84, 50,128, 4, 85, 51,128, 4, 86,
- 52,128, 4, 87, 53,128, 4, 88, 54,128, 4, 89, 55,128, 4, 90,
- 56,128, 4, 91, 57,128, 4, 92,177, 48,128, 4, 94, 52, 4, 40,
- 247, 40,251, 40,255, 41, 3, 53,128, 4, 15, 54,128, 4, 98, 55,
- 128, 4,114, 56,128, 4,116, 57, 5, 41, 19, 41, 23, 41, 27, 41,
- 31, 41, 35, 50,128,246,198, 51,128, 4, 95, 52,128, 4, 99, 53,
- 128, 4,115, 54,128, 4,117, 56, 2, 41, 45, 41, 59, 51, 2, 41,
- 51, 41, 55, 49,128,246,199, 50,128,246,200,180, 54,128, 4,217,
- 178,185, 57,128, 32, 14,179, 48, 2, 41, 77, 41, 81, 48,128, 32,
- 15, 49,128, 32, 13,181, 55, 7, 41,102, 41,172, 42,237, 43, 58,
- 44, 15, 44,108, 44,179, 51, 2, 41,108, 41,122, 56, 2, 41,114,
- 41,118, 49,128, 6,106, 56,128, 6, 12, 57, 8, 41,140, 41,144,
- 41,148, 41,152, 41,156, 41,160, 41,164, 41,168, 50,128, 6, 96,
- 51,128, 6, 97, 52,128, 6, 98, 53,128, 6, 99, 54,128, 6,100,
- 55,128, 6,101, 56,128, 6,102, 57,128, 6,103, 52, 7, 41,188,
- 41,220, 42, 26, 42, 88, 42,120, 42,176, 42,232, 48, 5, 41,200,
- 41,204, 41,208, 41,212, 41,216, 48,128, 6,104, 49,128, 6,105,
- 51,128, 6, 27, 55,128, 6, 31, 57,128, 6, 33, 49, 10, 41,242,
- 41,246, 41,250, 41,254, 42, 2, 42, 6, 42, 10, 42, 14, 42, 18,
- 42, 22, 48,128, 6, 34, 49,128, 6, 35, 50,128, 6, 36, 51,128,
- 6, 37, 52,128, 6, 38, 53,128, 6, 39, 54,128, 6, 40, 55,128,
- 6, 41, 56,128, 6, 42, 57,128, 6, 43, 50, 10, 42, 48, 42, 52,
- 42, 56, 42, 60, 42, 64, 42, 68, 42, 72, 42, 76, 42, 80, 42, 84,
- 48,128, 6, 44, 49,128, 6, 45, 50,128, 6, 46, 51,128, 6, 47,
- 52,128, 6, 48, 53,128, 6, 49, 54,128, 6, 50, 55,128, 6, 51,
- 56,128, 6, 52, 57,128, 6, 53, 51, 5, 42,100, 42,104, 42,108,
- 42,112, 42,116, 48,128, 6, 54, 49,128, 6, 55, 50,128, 6, 56,
- 51,128, 6, 57, 52,128, 6, 58, 52, 9, 42,140, 42,144, 42,148,
- 42,152, 42,156, 42,160, 42,164, 42,168, 42,172, 48,128, 6, 64,
- 49,128, 6, 65, 50,128, 6, 66, 51,128, 6, 67, 52,128, 6, 68,
- 53,128, 6, 69, 54,128, 6, 70, 56,128, 6, 72, 57,128, 6, 73,
- 53, 9, 42,196, 42,200, 42,204, 42,208, 42,212, 42,216, 42,220,
- 42,224, 42,228, 48,128, 6, 74, 49,128, 6, 75, 50,128, 6, 76,
- 51,128, 6, 77, 52,128, 6, 78, 53,128, 6, 79, 54,128, 6, 80,
- 55,128, 6, 81, 56,128, 6, 82,183, 48,128, 6, 71, 53, 3, 42,
- 245, 43, 21, 43, 53, 48, 5, 43, 1, 43, 5, 43, 9, 43, 13, 43,
- 17, 53,128, 6,164, 54,128, 6,126, 55,128, 6,134, 56,128, 6,
- 152, 57,128, 6,175, 49, 5, 43, 33, 43, 37, 43, 41, 43, 45, 43,
- 49, 49,128, 6,121, 50,128, 6,136, 51,128, 6,145, 52,128, 6,
- 186, 57,128, 6,210,179, 52,128, 6,213, 54, 7, 43, 74, 43, 79,
- 43, 84, 43, 89, 43,127, 43,189, 43,251,179, 54,128, 32,170,180,
- 53,128, 5,190,181, 56,128, 5,195, 54, 6, 43,103, 43,107, 43,
- 111, 43,115, 43,119, 43,123, 52,128, 5,208, 53,128, 5,209, 54,
- 128, 5,210, 55,128, 5,211, 56,128, 5,212, 57,128, 5,213, 55,
- 10, 43,149, 43,153, 43,157, 43,161, 43,165, 43,169, 43,173, 43,
- 177, 43,181, 43,185, 48,128, 5,214, 49,128, 5,215, 50,128, 5,
- 216, 51,128, 5,217, 52,128, 5,218, 53,128, 5,219, 54,128, 5,
- 220, 55,128, 5,221, 56,128, 5,222, 57,128, 5,223, 56, 10, 43,
- 211, 43,215, 43,219, 43,223, 43,227, 43,231, 43,235, 43,239, 43,
- 243, 43,247, 48,128, 5,224, 49,128, 5,225, 50,128, 5,226, 51,
- 128, 5,227, 52,128, 5,228, 53,128, 5,229, 54,128, 5,230, 55,
- 128, 5,231, 56,128, 5,232, 57,128, 5,233, 57, 3, 44, 3, 44,
- 7, 44, 11, 48,128, 5,234, 52,128,251, 42, 53,128,251, 43, 55,
- 4, 44, 25, 44, 39, 44, 59, 44, 64, 48, 2, 44, 31, 44, 35, 48,
- 128,251, 75, 53,128,251, 31, 49, 3, 44, 47, 44, 51, 44, 55, 54,
- 128, 5,240, 55,128, 5,241, 56,128, 5,242,178, 51,128,251, 53,
- 57, 7, 44, 80, 44, 84, 44, 88, 44, 92, 44, 96, 44,100, 44,104,
- 51,128, 5,180, 52,128, 5,181, 53,128, 5,182, 54,128, 5,187,
- 55,128, 5,184, 56,128, 5,183, 57,128, 5,176, 56, 3, 44,116,
- 44,160, 44,165, 48, 7, 44,132, 44,136, 44,140, 44,144, 44,148,
- 44,152, 44,156, 48,128, 5,178, 49,128, 5,177, 50,128, 5,179,
- 51,128, 5,194, 52,128, 5,193, 54,128, 5,185, 55,128, 5,188,
- 179, 57,128, 5,189, 52, 2, 44,171, 44,175, 49,128, 5,191, 50,
- 128, 5,192,185,178, 57,128, 2,188, 54, 3, 44,193, 44,252, 45,
- 3, 49, 4, 44,203, 44,219, 44,225, 44,246, 50, 2, 44,209, 44,
- 214,180, 56,128, 33, 5,184, 57,128, 33, 19,179,181, 50,128, 33,
- 22,181, 55, 3, 44,234, 44,238, 44,242, 51,128, 32, 44, 52,128,
- 32, 45, 53,128, 32, 46,182,182, 52,128, 32, 12,179,177,182, 55,
- 128, 6,109,180,185,179, 55,128, 2,189,103, 2, 45, 16, 45, 23,
- 242,225,246,101,128, 0,224,117, 2, 45, 29, 45, 38,234,225,242,
- 225,244,105,128, 10,133,242,237,245,235,232,105,128, 10, 5,104,
- 2, 45, 53, 45, 63,233,242,225,231,225,238, 97,128, 48, 66,239,
- 239,235,225,226,239,246,101,128, 30,163,105, 7, 45, 90, 45,115,
- 45,122, 45,134, 45,159, 45,175, 45,255, 98, 2, 45, 96, 45,105,
- 229,238,231,225,236,105,128, 9,144,239,240,239,237,239,230,111,
- 128, 49, 30,228,229,246, 97,128, 9, 16,229,227,249,242,233,236,
- 236,233, 99,128, 4,213,231,117, 2, 45,141, 45,150,234,225,242,
- 225,244,105,128, 10,144,242,237,245,235,232,105,128, 10, 16,237,
- 225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 72,110,
- 5, 45,187, 45,196, 45,210, 45,226, 45,241,225,242,225,226,233,
- 99,128, 6, 57,230,233,238,225,236,225,242,225,226,233, 99,128,
- 254,202,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 254,203,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
- 204,246,229,242,244,229,228,226,242,229,246,101,128, 2, 3,246,
- 239,247,229,236,243,233,231,110, 3, 46, 15, 46, 25, 46, 32,226,
- 229,238,231,225,236,105,128, 9,200,228,229,246, 97,128, 9, 72,
- 231,245,234,225,242,225,244,105,128, 10,200,107, 2, 46, 49, 46,
- 73,225,244,225,235,225,238, 97,129, 48,162, 46, 61,232,225,236,
- 230,247,233,228,244,104,128,255,113,239,242,229,225,110,128, 49,
- 79,108, 3, 46, 89, 47,145, 47,154,101, 2, 46, 95, 47,140,102,
- 136, 5,208, 46,115, 46,124, 46,139, 46,153, 46,242, 47, 0, 47,
- 111, 47,125,225,242,225,226,233, 99,128, 6, 39,228,225,231,229,
- 243,232,232,229,226,242,229,119,128,251, 48,230,233,238,225,236,
- 225,242,225,226,233, 99,128,254,142,104, 2, 46,159, 46,234,225,
- 237,250, 97, 2, 46,168, 46,201,225,226,239,246,101, 2, 46,178,
- 46,187,225,242,225,226,233, 99,128, 6, 35,230,233,238,225,236,
- 225,242,225,226,233, 99,128,254,132,226,229,236,239,119, 2, 46,
- 211, 46,220,225,242,225,226,233, 99,128, 6, 37,230,233,238,225,
- 236,225,242,225,226,233, 99,128,254,136,229,226,242,229,119,128,
- 5,208,236,225,237,229,228,232,229,226,242,229,119,128,251, 79,
- 237, 97, 2, 47, 7, 47, 43,228,228,225,225,226,239,246,101, 2,
- 47, 20, 47, 29,225,242,225,226,233, 99,128, 6, 34,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,130,235,243,245,242, 97,
- 4, 47, 57, 47, 66, 47, 80, 47, 96,225,242,225,226,233, 99,128,
- 6, 73,230,233,238,225,236,225,242,225,226,233, 99,128,254,240,
- 233,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,243,
- 237,229,228,233,225,236,225,242,225,226,233, 99,128,254,244,240,
- 225,244,225,232,232,229,226,242,229,119,128,251, 46,241,225,237,
- 225,244,243,232,229,226,242,229,119,128,251, 47,240,104,128, 33,
- 53,236,229,241,245,225,108,128, 34, 76,240,232, 97,129, 3,177,
- 47,162,244,239,238,239,115,128, 3,172,109, 4, 47,180, 47,188,
- 47,199, 47,233,225,227,242,239,110,128, 1, 1,239,238,239,243,
- 240,225,227,101,128,255, 65,240,229,242,243,225,238,100,130, 0,
- 38, 47,213, 47,225,237,239,238,239,243,240,225,227,101,128,255,
- 6,243,237,225,236,108,128,247, 38,243,241,245,225,242,101,128,
- 51,194,110, 4, 47,252, 48, 7, 48,129, 48,139,226,239,240,239,
- 237,239,230,111,128, 49, 34,103, 4, 48, 17, 48, 28, 48, 42, 48,
- 121,226,239,240,239,237,239,230,111,128, 49, 36,235,232,225,238,
- 235,232,245,244,232,225,105,128, 14, 90,236,101,131, 34, 32, 48,
- 53, 48,106, 48,113,226,242,225,227,235,229,116, 2, 48, 65, 48,
- 85,236,229,230,116,129, 48, 8, 48, 74,246,229,242,244,233,227,
- 225,108,128,254, 63,242,233,231,232,116,129, 48, 9, 48, 95,246,
- 229,242,244,233,227,225,108,128,254, 64,236,229,230,116,128, 35,
- 41,242,233,231,232,116,128, 35, 42,243,244,242,239,109,128, 33,
- 43,239,244,229,236,229,233, 97,128, 3,135,117, 2, 48,145, 48,
- 157,228,225,244,244,225,228,229,246, 97,128, 9, 82,243,246,225,
- 242, 97, 3, 48,169, 48,179, 48,186,226,229,238,231,225,236,105,
- 128, 9,130,228,229,246, 97,128, 9, 2,231,245,234,225,242,225,
- 244,105,128, 10,130,239,231,239,238,229,107,128, 1, 5,112, 3,
- 48,214, 48,238, 49, 12, 97, 2, 48,220, 48,232,225,244,239,243,
- 241,245,225,242,101,128, 51, 0,242,229,110,128, 36,156,239,243,
- 244,242,239,240,232,101, 2, 48,251, 49, 6,225,242,237,229,238,
- 233,225,110,128, 5, 90,237,239,100,128, 2,188,112, 2, 49, 18,
- 49, 23,236,101,128,248,255,242,111, 2, 49, 30, 49, 38,225,227,
- 232,229,115,128, 34, 80,120, 2, 49, 44, 49, 64,229,241,245,225,
- 108,129, 34, 72, 49, 54,239,242,233,237,225,231,101,128, 34, 82,
- 233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 69,114,
- 4, 49, 89, 49,116, 49,120, 49,165,225,229, 97, 2, 49, 97, 49,
- 107,229,235,239,242,229,225,110,128, 49,142,235,239,242,229,225,
- 110,128, 49,141, 99,128, 35, 18,105, 2, 49,126, 49,140,231,232,
- 244,232,225,236,230,242,233,238,103,128, 30,154,238,103,130, 0,
- 229, 49,149, 49,157,225,227,245,244,101,128, 1,251,226,229,236,
- 239,119,128, 30, 1,242,239,119, 8, 49,185, 49,192, 50, 65, 50,
- 131, 50,181, 50,236, 51, 3, 51, 78,226,239,244,104,128, 33,148,
- 100, 3, 49,200, 49,239, 50, 30,225,243,104, 4, 49,212, 49,219,
- 49,226, 49,234,228,239,247,110,128, 33,227,236,229,230,116,128,
- 33,224,242,233,231,232,116,128, 33,226,245,112,128, 33,225,226,
- 108, 5, 49,252, 50, 3, 50, 10, 50, 17, 50, 25,226,239,244,104,
- 128, 33,212,228,239,247,110,128, 33,211,236,229,230,116,128, 33,
- 208,242,233,231,232,116,128, 33,210,245,112,128, 33,209,239,247,
- 110,131, 33,147, 50, 42, 50, 49, 50, 57,236,229,230,116,128, 33,
- 153,242,233,231,232,116,128, 33,152,247,232,233,244,101,128, 33,
- 233,104, 2, 50, 71, 50,122,229,225,100, 4, 50, 83, 50, 93, 50,
- 103, 50,114,228,239,247,238,237,239,100,128, 2,197,236,229,230,
- 244,237,239,100,128, 2,194,242,233,231,232,244,237,239,100,128,
- 2,195,245,240,237,239,100,128, 2,196,239,242,233,250,229,120,
- 128,248,231,236,229,230,116,131, 33,144, 50,144, 50,161, 50,173,
- 228,226,108,129, 33,208, 50,152,243,244,242,239,235,101,128, 33,
- 205,239,246,229,242,242,233,231,232,116,128, 33,198,247,232,233,
- 244,101,128, 33,230,242,233,231,232,116,132, 33,146, 50,197, 50,
- 209, 50,217, 50,228,228,226,236,243,244,242,239,235,101,128, 33,
- 207,232,229,225,246,121,128, 39,158,239,246,229,242,236,229,230,
- 116,128, 33,196,247,232,233,244,101,128, 33,232,244,225, 98, 2,
- 50,244, 50,251,236,229,230,116,128, 33,228,242,233,231,232,116,
- 128, 33,229,245,112,132, 33,145, 51, 16, 51, 44, 51, 62, 51, 70,
- 100, 2, 51, 22, 51, 34,110,129, 33,149, 51, 28,226,243,101,128,
- 33,168,239,247,238,226,225,243,101,128, 33,168,236,229,230,116,
- 129, 33,150, 51, 53,239,230,228,239,247,110,128, 33,197,242,233,
- 231,232,116,128, 33,151,247,232,233,244,101,128, 33,231,246,229,
- 242,244,229,120,128,248,230,115, 5, 51, 99, 51,175, 51,220, 52,
- 47, 52, 57, 99, 2, 51,105, 51,157,233,105, 2, 51,112, 51,135,
- 227,233,242,227,245,109,129, 0, 94, 51,123,237,239,238,239,243,
- 240,225,227,101,128,255, 62,244,233,236,228,101,129, 0,126, 51,
- 145,237,239,238,239,243,240,225,227,101,128,255, 94,242,233,240,
- 116,129, 2, 81, 51,166,244,245,242,238,229,100,128, 2, 82,237,
- 225,236,108, 2, 51,184, 51,195,232,233,242,225,231,225,238, 97,
- 128, 48, 65,235,225,244,225,235,225,238, 97,129, 48,161, 51,208,
- 232,225,236,230,247,233,228,244,104,128,255,103,244,229,242,233,
- 115, 2, 51,230, 52, 43,107,131, 0, 42, 51,240, 52, 12, 52, 35,
- 97, 2, 51,246, 52, 4,236,244,239,238,229,225,242,225,226,233,
- 99,128, 6,109,242,225,226,233, 99,128, 6,109,109, 2, 52, 18,
- 52, 24,225,244,104,128, 34, 23,239,238,239,243,240,225,227,101,
- 128,255, 10,243,237,225,236,108,128,254, 97,109,128, 32, 66,245,
- 240,229,242,233,239,114,128,246,233,249,237,240,244,239,244,233,
- 227,225,236,236,249,229,241,245,225,108,128, 34, 67,116,132, 0,
- 64, 52, 89, 52, 96, 52,108, 52,116,233,236,228,101,128, 0,227,
- 237,239,238,239,243,240,225,227,101,128,255, 32,243,237,225,236,
- 108,128,254,107,245,242,238,229,100,128, 2, 80,117, 6, 52,138,
- 52,163, 52,170, 52,195, 52,215, 52,231, 98, 2, 52,144, 52,153,
- 229,238,231,225,236,105,128, 9,148,239,240,239,237,239,230,111,
- 128, 49, 32,228,229,246, 97,128, 9, 20,231,117, 2, 52,177, 52,
- 186,234,225,242,225,244,105,128, 10,148,242,237,245,235,232,105,
- 128, 10, 20,236,229,238,231,244,232,237,225,242,235,226,229,238,
- 231,225,236,105,128, 9,215,237,225,244,242,225,231,245,242,237,
- 245,235,232,105,128, 10, 76,246,239,247,229,236,243,233,231,110,
- 3, 52,247, 53, 1, 53, 8,226,229,238,231,225,236,105,128, 9,
- 204,228,229,246, 97,128, 9, 76,231,245,234,225,242,225,244,105,
- 128, 10,204,246,225,231,242,225,232,225,228,229,246, 97,128, 9,
- 61,121, 2, 53, 39, 53, 51,226,225,242,237,229,238,233,225,110,
- 128, 5, 97,233,110,130, 5,226, 53, 60, 53, 75,225,236,244,239,
- 238,229,232,229,226,242,229,119,128,251, 32,232,229,226,242,229,
- 119,128, 5,226, 98,144, 0, 98, 53,120, 53,255, 54, 10, 54, 19,
- 54, 44, 55, 85, 55,147, 55,220, 57,146, 57,158, 57,201, 57,209,
- 57,219, 59, 89, 59,113, 59,122, 97, 7, 53,136, 53,146, 53,170,
- 53,177, 53,202, 53,226, 53,237,226,229,238,231,225,236,105,128,
- 9,172,227,235,243,236,225,243,104,129, 0, 92, 53,158,237,239,
- 238,239,243,240,225,227,101,128,255, 60,228,229,246, 97,128, 9,
- 44,231,117, 2, 53,184, 53,193,234,225,242,225,244,105,128, 10,
- 172,242,237,245,235,232,105,128, 10, 44,104, 2, 53,208, 53,218,
- 233,242,225,231,225,238, 97,128, 48,112,244,244,232,225,105,128,
- 14, 63,235,225,244,225,235,225,238, 97,128, 48,208,114,129, 0,
- 124, 53,243,237,239,238,239,243,240,225,227,101,128,255, 92,226,
- 239,240,239,237,239,230,111,128, 49, 5,227,233,242,227,236,101,
- 128, 36,209,228,239,116, 2, 54, 27, 54, 36,225,227,227,229,238,
- 116,128, 30, 3,226,229,236,239,119,128, 30, 5,101, 6, 54, 58,
- 54, 79, 54,102, 54,244, 54,255, 55, 11,225,237,229,228,243,233,
- 248,244,229,229,238,244,232,238,239,244,229,115,128, 38,108, 99,
- 2, 54, 85, 54, 92,225,245,243,101,128, 34, 53,249,242,233,236,
- 236,233, 99,128, 4, 49,104, 5, 54,114, 54,123, 54,137, 54,167,
- 54,226,225,242,225,226,233, 99,128, 6, 40,230,233,238,225,236,
- 225,242,225,226,233, 99,128,254,144,105, 2, 54,143, 54,158,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,254,145,242,225,
- 231,225,238, 97,128, 48,121,237,101, 2, 54,174, 54,187,228,233,
- 225,236,225,242,225,226,233, 99,128,254,146,229,237,105, 2, 54,
- 195, 54,210,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 252,159,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,
- 252, 8,238,239,239,238,230,233,238,225,236,225,242,225,226,233,
- 99,128,252,109,235,225,244,225,235,225,238, 97,128, 48,217,238,
- 225,242,237,229,238,233,225,110,128, 5, 98,116,132, 5,209, 55,
- 23, 55, 43, 55, 63, 55, 72, 97,129, 3,178, 55, 29,243,249,237,
- 226,239,236,231,242,229,229,107,128, 3,208,228,225,231,229,243,
- 104,129,251, 49, 55, 54,232,229,226,242,229,119,128,251, 49,232,
- 229,226,242,229,119,128, 5,209,242,225,230,229,232,229,226,242,
- 229,119,128,251, 76,104, 2, 55, 91, 55,141, 97, 3, 55, 99, 55,
- 109, 55,116,226,229,238,231,225,236,105,128, 9,173,228,229,246,
- 97,128, 9, 45,231,117, 2, 55,123, 55,132,234,225,242,225,244,
- 105,128, 10,173,242,237,245,235,232,105,128, 10, 45,239,239,107,
- 128, 2, 83,105, 5, 55,159, 55,170, 55,181, 55,195, 55,209,232,
- 233,242,225,231,225,238, 97,128, 48,115,235,225,244,225,235,225,
- 238, 97,128, 48,211,236,225,226,233,225,236,227,236,233,227,107,
- 128, 2,152,238,228,233,231,245,242,237,245,235,232,105,128, 10,
- 2,242,245,243,241,245,225,242,101,128, 51, 49,108, 3, 55,228,
- 57,129, 57,140, 97, 2, 55,234, 57,124,227,107, 6, 55,249, 56,
- 2, 56, 39, 56,188, 56,243, 57, 39,227,233,242,227,236,101,128,
- 37,207,100, 2, 56, 8, 56, 17,233,225,237,239,238,100,128, 37,
- 198,239,247,238,240,239,233,238,244,233,238,231,244,242,233,225,
- 238,231,236,101,128, 37,188,108, 2, 56, 45, 56,148,101, 2, 56,
- 51, 56, 87,230,244,240,239,233,238,244,233,238,103, 2, 56, 66,
- 56, 76,240,239,233,238,244,229,114,128, 37,196,244,242,233,225,
- 238,231,236,101,128, 37,192,238,244,233,227,245,236,225,242,226,
- 242,225,227,235,229,116, 2, 56,107, 56,127,236,229,230,116,129,
- 48, 16, 56,116,246,229,242,244,233,227,225,108,128,254, 59,242,
- 233,231,232,116,129, 48, 17, 56,137,246,229,242,244,233,227,225,
- 108,128,254, 60,239,247,229,114, 2, 56,157, 56,172,236,229,230,
- 244,244,242,233,225,238,231,236,101,128, 37,227,242,233,231,232,
- 244,244,242,233,225,238,231,236,101,128, 37,226,114, 2, 56,194,
- 56,205,229,227,244,225,238,231,236,101,128, 37,172,233,231,232,
- 244,240,239,233,238,244,233,238,103, 2, 56,222, 56,232,240,239,
- 233,238,244,229,114,128, 37,186,244,242,233,225,238,231,236,101,
- 128, 37,182,115, 3, 56,251, 57, 25, 57, 33,109, 2, 57, 1, 57,
- 13,225,236,236,243,241,245,225,242,101,128, 37,170,233,236,233,
- 238,231,230,225,227,101,128, 38, 59,241,245,225,242,101,128, 37,
- 160,244,225,114,128, 38, 5,245,240,112, 2, 57, 47, 57, 85,229,
- 114, 2, 57, 54, 57, 69,236,229,230,244,244,242,233,225,238,231,
- 236,101,128, 37,228,242,233,231,232,244,244,242,233,225,238,231,
- 236,101,128, 37,229,239,233,238,244,233,238,103, 2, 57, 97, 57,
- 113,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
- 180,244,242,233,225,238,231,236,101,128, 37,178,238,107,128, 36,
- 35,233,238,229,226,229,236,239,119,128, 30, 7,239,227,107,128,
- 37,136,237,239,238,239,243,240,225,227,101,128,255, 66,111, 3,
- 57,166, 57,179, 57,190,226,225,233,237,225,233,244,232,225,105,
- 128, 14, 26,232,233,242,225,231,225,238, 97,128, 48,124,235,225,
- 244,225,235,225,238, 97,128, 48,220,240,225,242,229,110,128, 36,
- 157,241,243,241,245,225,242,101,128, 51,195,114, 4, 57,229, 58,
- 223, 59, 40, 59, 79,225, 99, 2, 57,236, 58,130,101, 3, 57,244,
- 57,249, 58, 61,229,120,128,248,244,236,229,230,116,133, 0,123,
- 58, 10, 58, 15, 58, 37, 58, 45, 58, 50,226,116,128,248,243,109,
- 2, 58, 21, 58, 26,233,100,128,248,242,239,238,239,243,240,225,
- 227,101,128,255, 91,243,237,225,236,108,128,254, 91,244,112,128,
- 248,241,246,229,242,244,233,227,225,108,128,254, 55,242,233,231,
- 232,116,133, 0,125, 58, 79, 58, 84, 58,106, 58,114, 58,119,226,
- 116,128,248,254,109, 2, 58, 90, 58, 95,233,100,128,248,253,239,
- 238,239,243,240,225,227,101,128,255, 93,243,237,225,236,108,128,
- 254, 92,244,112,128,248,252,246,229,242,244,233,227,225,108,128,
- 254, 56,235,229,116, 2, 58,138, 58,180,236,229,230,116,132, 0,
- 91, 58,153, 58,158, 58,163, 58,175,226,116,128,248,240,229,120,
- 128,248,239,237,239,238,239,243,240,225,227,101,128,255, 59,244,
- 112,128,248,238,242,233,231,232,116,132, 0, 93, 58,196, 58,201,
- 58,206, 58,218,226,116,128,248,251,229,120,128,248,250,237,239,
- 238,239,243,240,225,227,101,128,255, 61,244,112,128,248,249,229,
- 246,101,131, 2,216, 58,235, 58,246, 58,252,226,229,236,239,247,
- 227,237, 98,128, 3, 46,227,237, 98,128, 3, 6,233,238,246,229,
- 242,244,229,100, 3, 59, 11, 59, 22, 59, 28,226,229,236,239,247,
- 227,237, 98,128, 3, 47,227,237, 98,128, 3, 17,228,239,245,226,
- 236,229,227,237, 98,128, 3, 97,233,228,231,101, 2, 59, 49, 59,
- 60,226,229,236,239,247,227,237, 98,128, 3, 42,233,238,246,229,
- 242,244,229,228,226,229,236,239,247,227,237, 98,128, 3, 58,239,
- 235,229,238,226,225,114,128, 0,166,115, 2, 59, 95, 59,103,244,
- 242,239,235,101,128, 1,128,245,240,229,242,233,239,114,128,246,
- 234,244,239,240,226,225,114,128, 1,131,117, 3, 59,130, 59,141,
- 59,152,232,233,242,225,231,225,238, 97,128, 48,118,235,225,244,
- 225,235,225,238, 97,128, 48,214,236,108, 2, 59,159, 59,189,229,
- 116,130, 32, 34, 59,168, 59,178,233,238,246,229,242,243,101,128,
- 37,216,239,240,229,242,225,244,239,114,128, 34, 25,243,229,249,
- 101,128, 37,206, 99,143, 0, 99, 59,230, 60,179, 60,190, 60,254,
- 61, 29, 61,122, 63, 33, 64, 17, 64,117, 64,166, 67,158, 67,166,
- 67,176, 67,188, 67,221, 97, 9, 59,250, 60, 5, 60, 15, 60, 22,
- 60, 29, 60, 54, 60, 64, 60,116, 60,125,225,242,237,229,238,233,
- 225,110,128, 5,110,226,229,238,231,225,236,105,128, 9,154,227,
- 245,244,101,128, 1, 7,228,229,246, 97,128, 9, 26,231,117, 2,
- 60, 36, 60, 45,234,225,242,225,244,105,128, 10,154,242,237,245,
- 235,232,105,128, 10, 26,236,243,241,245,225,242,101,128, 51,136,
- 238,228,242,225,226,233,238,228,117, 4, 60, 82, 60, 92, 60, 98,
- 60,105,226,229,238,231,225,236,105,128, 9,129,227,237, 98,128,
- 3, 16,228,229,246, 97,128, 9, 1,231,245,234,225,242,225,244,
- 105,128, 10,129,240,243,236,239,227,107,128, 33,234,114, 3, 60,
- 133, 60,139, 60,165,229,239,102,128, 33, 5,239,110,130, 2,199,
- 60,148, 60,159,226,229,236,239,247,227,237, 98,128, 3, 44,227,
- 237, 98,128, 3, 12,242,233,225,231,229,242,229,244,245,242,110,
- 128, 33,181,226,239,240,239,237,239,230,111,128, 49, 24, 99, 4,
- 60,200, 60,207, 60,226, 60,248,225,242,239,110,128, 1, 13,229,
- 228,233,236,236, 97,129, 0,231, 60,218,225,227,245,244,101,128,
- 30, 9,233,242, 99, 2, 60,234, 60,239,236,101,128, 36,210,245,
- 237,230,236,229,120,128, 1, 9,245,242,108,128, 2, 85,100, 2,
- 61, 4, 61, 20,239,116,129, 1, 11, 61, 11,225,227,227,229,238,
- 116,128, 1, 11,243,241,245,225,242,101,128, 51,197,101, 2, 61,
- 35, 61, 51,228,233,236,236, 97,129, 0,184, 61, 45,227,237, 98,
- 128, 3, 39,238,116,132, 0,162, 61, 64, 61, 88, 61,100, 61,111,
- 105, 2, 61, 70, 61, 78,231,242,225,228,101,128, 33, 3,238,230,
- 229,242,233,239,114,128,246,223,237,239,238,239,243,240,225,227,
- 101,128,255,224,239,236,228,243,244,249,236,101,128,247,162,243,
- 245,240,229,242,233,239,114,128,246,224,104, 5, 61,134, 61,197,
- 61,208, 62,136, 62,228, 97, 4, 61,144, 61,155, 61,165, 61,172,
- 225,242,237,229,238,233,225,110,128, 5,121,226,229,238,231,225,
- 236,105,128, 9,155,228,229,246, 97,128, 9, 27,231,117, 2, 61,
- 179, 61,188,234,225,242,225,244,105,128, 10,155,242,237,245,235,
- 232,105,128, 10, 27,226,239,240,239,237,239,230,111,128, 49, 20,
- 101, 6, 61,222, 61,242, 62, 10, 62, 78, 62, 90, 62,111,225,226,
- 235,232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128,
- 4,189, 99, 2, 61,248, 62, 0,235,237,225,242,107,128, 39, 19,
- 249,242,233,236,236,233, 99,128, 4, 71,100, 2, 62, 16, 62, 60,
- 229,243,227,229,238,228,229,114, 2, 62, 29, 62, 49,225,226,235,
- 232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128, 4,
- 191,227,249,242,233,236,236,233, 99,128, 4,183,233,229,242,229,
- 243,233,243,227,249,242,233,236,236,233, 99,128, 4,245,232,225,
- 242,237,229,238,233,225,110,128, 5,115,235,232,225,235,225,243,
- 243,233,225,238,227,249,242,233,236,236,233, 99,128, 4,204,246,
- 229,242,244,233,227,225,236,243,244,242,239,235,229,227,249,242,
- 233,236,236,233, 99,128, 4,185,105,129, 3,199, 62,142,229,245,
- 227,104, 4, 62,155, 62,190, 62,205, 62,214, 97, 2, 62,161, 62,
- 176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,119,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 23,227,233,
- 242,227,236,229,235,239,242,229,225,110,128, 50,105,235,239,242,
- 229,225,110,128, 49, 74,240,225,242,229,238,235,239,242,229,225,
- 110,128, 50, 9,111, 2, 62,234, 63, 28,227,104, 3, 62,243, 63,
- 9, 63, 19,225,110, 2, 62,250, 63, 2,231,244,232,225,105,128,
- 14, 10,244,232,225,105,128, 14, 8,233,238,231,244,232,225,105,
- 128, 14, 9,239,229,244,232,225,105,128, 14, 12,239,107,128, 1,
- 136,105, 2, 63, 39, 63,141,229,245, 99, 5, 63, 53, 63, 88, 63,
- 103, 63,112, 63,126, 97, 2, 63, 59, 63, 74,227,233,242,227,236,
- 229,235,239,242,229,225,110,128, 50,118,240,225,242,229,238,235,
- 239,242,229,225,110,128, 50, 22,227,233,242,227,236,229,235,239,
- 242,229,225,110,128, 50,104,235,239,242,229,225,110,128, 49, 72,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 8,245,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 28,242, 99, 2,
- 63,148, 63,243,236,101,132, 37,203, 63,161, 63,172, 63,177, 63,
- 201,237,245,236,244,233,240,236,121,128, 34,151,239,116,128, 34,
- 153,112, 2, 63,183, 63,189,236,245,115,128, 34,149,239,243,244,
- 225,236,237,225,242,107,128, 48, 54,247,233,244,104, 2, 63,210,
- 63,226,236,229,230,244,232,225,236,230,226,236,225,227,107,128,
- 37,208,242,233,231,232,244,232,225,236,230,226,236,225,227,107,
- 128, 37,209,245,237,230,236,229,120,130, 2,198, 64, 0, 64, 11,
- 226,229,236,239,247,227,237, 98,128, 3, 45,227,237, 98,128, 3,
- 2,108, 3, 64, 25, 64, 31, 64, 85,229,225,114,128, 35, 39,233,
- 227,107, 4, 64, 43, 64, 54, 64, 63, 64, 73,225,236,246,229,239,
- 236,225,114,128, 1,194,228,229,238,244,225,108,128, 1,192,236,
- 225,244,229,242,225,108,128, 1,193,242,229,244,242,239,230,236,
- 229,120,128, 1,195,245, 98,129, 38, 99, 64, 92,243,245,233,116,
- 2, 64,101, 64,109,226,236,225,227,107,128, 38, 99,247,232,233,
- 244,101,128, 38,103,109, 3, 64,125, 64,139, 64,150,227,245,226,
- 229,228,243,241,245,225,242,101,128, 51,164,239,238,239,243,240,
- 225,227,101,128,255, 67,243,241,245,225,242,229,228,243,241,245,
- 225,242,101,128, 51,160,111, 8, 64,184, 64,195, 65, 26, 65,224,
- 66,253, 67, 28, 67,135, 67,144,225,242,237,229,238,233,225,110,
- 128, 5,129,236,239,110,131, 0, 58, 64,207, 64,232, 64,251,237,
- 239,110, 2, 64,215, 64,223,229,244,225,242,121,128, 32,161,239,
- 243,240,225,227,101,128,255, 26,115, 2, 64,238, 64,244,233,231,
- 110,128, 32,161,237,225,236,108,128,254, 85,244,242,233,225,238,
- 231,245,236,225,114, 2, 65, 10, 65, 20,232,225,236,230,237,239,
- 100,128, 2,209,237,239,100,128, 2,208,109, 2, 65, 32, 65,217,
- 237, 97,134, 0, 44, 65, 49, 65,113, 65,124, 65,136, 65,166, 65,
- 189, 97, 3, 65, 57, 65, 83, 65, 91,226,239,246,101, 2, 65, 66,
- 65, 72,227,237, 98,128, 3, 19,242,233,231,232,244,227,237, 98,
- 128, 3, 21,227,227,229,238,116,128,246,195,114, 2, 65, 97, 65,
- 104,225,226,233, 99,128, 6, 12,237,229,238,233,225,110,128, 5,
- 93,233,238,230,229,242,233,239,114,128,246,225,237,239,238,239,
- 243,240,225,227,101,128,255, 12,242,229,246,229,242,243,229,100,
- 2, 65,149, 65,160,225,226,239,246,229,227,237, 98,128, 3, 20,
- 237,239,100,128, 2,189,115, 2, 65,172, 65,179,237,225,236,108,
- 128,254, 80,245,240,229,242,233,239,114,128,246,226,244,245,242,
- 238,229,100, 2, 65,200, 65,211,225,226,239,246,229,227,237, 98,
- 128, 3, 18,237,239,100,128, 2,187,240,225,243,115,128, 38, 60,
- 110, 2, 65,230, 65,239,231,242,245,229,238,116,128, 34, 69,116,
- 2, 65,245, 66, 3,239,245,242,233,238,244,229,231,242,225,108,
- 128, 34, 46,242,239,108,142, 35, 3, 66, 37, 66, 43, 66, 58, 66,
- 73, 66,117, 66,162, 66,176, 66,181, 66,186, 66,191, 66,197, 66,
- 202, 66,243, 66,248,193,195, 75,128, 0, 6, 66, 2, 66, 49, 66,
- 54,197, 76,128, 0, 7, 83,128, 0, 8, 67, 2, 66, 64, 66, 69,
- 193, 78,128, 0, 24, 82,128, 0, 13, 68, 3, 66, 81, 66,107, 66,
- 112, 67, 4, 66, 91, 66, 95, 66, 99, 66,103, 49,128, 0, 17, 50,
- 128, 0, 18, 51,128, 0, 19, 52,128, 0, 20,197, 76,128, 0,127,
- 204, 69,128, 0, 16, 69, 5, 66,129, 66,133, 66,138, 66,143, 66,
- 148, 77,128, 0, 25,206, 81,128, 0, 5,207, 84,128, 0, 4,211,
- 67,128, 0, 27, 84, 2, 66,154, 66,158, 66,128, 0, 23, 88,128,
- 0, 3, 70, 2, 66,168, 66,172, 70,128, 0, 12, 83,128, 0, 28,
- 199, 83,128, 0, 29,200, 84,128, 0, 9,204, 70,128, 0, 10,206,
- 193, 75,128, 0, 21,210, 83,128, 0, 30, 83, 5, 66,214, 66,218,
- 66,228, 66,233, 66,238, 73,128, 0, 15, 79,129, 0, 14, 66,224,
- 84,128, 0, 2,212, 88,128, 0, 1,213, 66,128, 0, 26,217, 78,
- 128, 0, 22,213, 83,128, 0, 31,214, 84,128, 0, 11,240,249,242,
- 233,231,232,116,129, 0,169, 67, 9,115, 2, 67, 15, 67, 21,225,
- 238,115,128,248,233,229,242,233,102,128,246,217,114, 2, 67, 34,
- 67,118,238,229,242,226,242,225,227,235,229,116, 2, 67, 49, 67,
- 83,236,229,230,116,130, 48, 12, 67, 60, 67, 72,232,225,236,230,
- 247,233,228,244,104,128,255, 98,246,229,242,244,233,227,225,108,
- 128,254, 65,242,233,231,232,116,130, 48, 13, 67, 95, 67,107,232,
- 225,236,230,247,233,228,244,104,128,255, 99,246,229,242,244,233,
- 227,225,108,128,254, 66,240,239,242,225,244,233,239,238,243,241,
- 245,225,242,101,128, 51,127,243,241,245,225,242,101,128, 51,199,
- 246,229,242,235,231,243,241,245,225,242,101,128, 51,198,240,225,
- 242,229,110,128, 36,158,242,245,250,229,233,242,111,128, 32,162,
- 243,244,242,229,244,227,232,229,100,128, 2,151,245,114, 2, 67,
- 195, 67,213,236,121, 2, 67,202, 67,208,225,238,100,128, 34,207,
- 239,114,128, 34,206,242,229,238,227,121,128, 0,164,249,114, 4,
- 67,232, 67,240, 67,247, 67,255,194,242,229,246,101,128,246,209,
- 198,236,229,120,128,246,210,226,242,229,246,101,128,246,212,230,
- 236,229,120,128,246,213,100,146, 0,100, 68, 46, 69,184, 70,208,
- 71, 12, 71,188, 72,142, 72,204, 73,133, 73,146, 73,155, 73,181,
- 73,206, 73,215, 75, 26, 75, 34, 75, 45, 75, 65, 75, 93, 97, 11,
- 68, 70, 68, 81, 68, 91, 68,163, 68,226, 68,237, 68,248, 69, 61,
- 69,123, 69,129, 69,159,225,242,237,229,238,233,225,110,128, 5,
- 100,226,229,238,231,225,236,105,128, 9,166,100, 5, 68,103, 68,
- 112, 68,118, 68,132, 68,148,225,242,225,226,233, 99,128, 6, 54,
- 229,246, 97,128, 9, 38,230,233,238,225,236,225,242,225,226,233,
- 99,128,254,190,233,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,191,237,229,228,233,225,236,225,242,225,226,233, 99,
- 128,254,192,103, 3, 68,171, 68,188, 68,202,229,243,104,129, 5,
- 188, 68,179,232,229,226,242,229,119,128, 5,188,231,229,114,129,
- 32, 32, 68,196,228,226,108,128, 32, 33,117, 2, 68,208, 68,217,
- 234,225,242,225,244,105,128, 10,166,242,237,245,235,232,105,128,
- 10, 38,232,233,242,225,231,225,238, 97,128, 48, 96,235,225,244,
- 225,235,225,238, 97,128, 48,192,108, 3, 69, 0, 69, 9, 69, 47,
- 225,242,225,226,233, 99,128, 6, 47,229,116,130, 5,211, 69, 18,
- 69, 38,228,225,231,229,243,104,129,251, 51, 69, 29,232,229,226,
- 242,229,119,128,251, 51,232,229,226,242,229,119,128, 5,211,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,170,237,237, 97,
- 3, 69, 71, 69, 80, 69, 92,225,242,225,226,233, 99,128, 6, 79,
- 236,239,247,225,242,225,226,233, 99,128, 6, 79,244,225,238, 97,
- 2, 69,101, 69,115,236,244,239,238,229,225,242,225,226,233, 99,
- 128, 6, 76,242,225,226,233, 99,128, 6, 76,238,228, 97,128, 9,
- 100,242,231, 97, 2, 69,137, 69,146,232,229,226,242,229,119,128,
- 5,167,236,229,230,244,232,229,226,242,229,119,128, 5,167,243,
- 233,225,240,238,229,245,237,225,244,225,227,249,242,233,236,236,
- 233,227,227,237, 98,128, 4,133, 98, 3, 69,192, 70,189, 70,199,
- 108, 9, 69,212, 69,220, 70, 77, 70, 85, 70,101, 70,112, 70,130,
- 70,144, 70,155,199,242,225,246,101,128,246,211, 97, 2, 69,226,
- 70, 27,238,231,236,229,226,242,225,227,235,229,116, 2, 69,242,
- 70, 6,236,229,230,116,129, 48, 10, 69,251,246,229,242,244,233,
- 227,225,108,128,254, 61,242,233,231,232,116,129, 48, 11, 70, 16,
- 246,229,242,244,233,227,225,108,128,254, 62,114, 2, 70, 33, 70,
- 54,227,232,233,238,246,229,242,244,229,228,226,229,236,239,247,
- 227,237, 98,128, 3, 43,242,239,119, 2, 70, 62, 70, 69,236,229,
- 230,116,128, 33,212,242,233,231,232,116,128, 33,210,228,225,238,
- 228, 97,128, 9,101,231,242,225,246,101,129,246,214, 70, 95,227,
- 237, 98,128, 3, 15,233,238,244,229,231,242,225,108,128, 34, 44,
- 236,239,247,236,233,238,101,129, 32, 23, 70,124,227,237, 98,128,
- 3, 51,239,246,229,242,236,233,238,229,227,237, 98,128, 3, 63,
- 240,242,233,237,229,237,239,100,128, 2,186,246,229,242,244,233,
- 227,225,108, 2, 70,168, 70,174,226,225,114,128, 32, 22,236,233,
- 238,229,225,226,239,246,229,227,237, 98,128, 3, 14,239,240,239,
- 237,239,230,111,128, 49, 9,243,241,245,225,242,101,128, 51,200,
- 99, 4, 70,218, 70,225, 70,234, 71, 5,225,242,239,110,128, 1,
- 15,229,228,233,236,236, 97,128, 30, 17,233,242, 99, 2, 70,242,
- 70,247,236,101,128, 36,211,245,237,230,236,229,248,226,229,236,
- 239,119,128, 30, 19,242,239,225,116,128, 1, 17,100, 4, 71, 22,
- 71,103, 71,113, 71,164, 97, 4, 71, 32, 71, 42, 71, 49, 71, 74,
- 226,229,238,231,225,236,105,128, 9,161,228,229,246, 97,128, 9,
- 33,231,117, 2, 71, 56, 71, 65,234,225,242,225,244,105,128, 10,
- 161,242,237,245,235,232,105,128, 10, 33,108, 2, 71, 80, 71, 89,
- 225,242,225,226,233, 99,128, 6,136,230,233,238,225,236,225,242,
- 225,226,233, 99,128,251,137,228,232,225,228,229,246, 97,128, 9,
- 92,232, 97, 3, 71,122, 71,132, 71,139,226,229,238,231,225,236,
- 105,128, 9,162,228,229,246, 97,128, 9, 34,231,117, 2, 71,146,
- 71,155,234,225,242,225,244,105,128, 10,162,242,237,245,235,232,
- 105,128, 10, 34,239,116, 2, 71,171, 71,180,225,227,227,229,238,
- 116,128, 30, 11,226,229,236,239,119,128, 30, 13,101, 8, 71,206,
- 72, 3, 72, 10, 72, 35, 72, 45, 72, 56, 72,101, 72,137, 99, 2,
- 71,212, 71,249,233,237,225,236,243,229,240,225,242,225,244,239,
- 114, 2, 71,230, 71,239,225,242,225,226,233, 99,128, 6,107,240,
- 229,242,243,233,225,110,128, 6,107,249,242,233,236,236,233, 99,
- 128, 4, 52,231,242,229,101,128, 0,176,232,105, 2, 72, 17, 72,
- 26,232,229,226,242,229,119,128, 5,173,242,225,231,225,238, 97,
- 128, 48,103,233,227,239,240,244,233, 99,128, 3,239,235,225,244,
- 225,235,225,238, 97,128, 48,199,108, 2, 72, 62, 72, 85,229,244,
- 101, 2, 72, 70, 72, 77,236,229,230,116,128, 35, 43,242,233,231,
- 232,116,128, 35, 38,244, 97,129, 3,180, 72, 92,244,245,242,238,
- 229,100,128, 1,141,238,239,237,233,238,225,244,239,242,237,233,
- 238,245,243,239,238,229,238,245,237,229,242,225,244,239,242,226,
- 229,238,231,225,236,105,128, 9,248,250,104,128, 2,164,104, 2,
- 72,148, 72,198, 97, 3, 72,156, 72,166, 72,173,226,229,238,231,
- 225,236,105,128, 9,167,228,229,246, 97,128, 9, 39,231,117, 2,
- 72,180, 72,189,234,225,242,225,244,105,128, 10,167,242,237,245,
- 235,232,105,128, 10, 39,239,239,107,128, 2, 87,105, 6, 72,218,
- 73, 11, 73, 71, 73, 82, 73, 93, 73,103, 97, 2, 72,224, 72,246,
- 236,249,244,233,235,225,244,239,238,239,115,129, 3,133, 72,240,
- 227,237, 98,128, 3, 68,237,239,238,100,129, 38,102, 72,255,243,
- 245,233,244,247,232,233,244,101,128, 38, 98,229,242,229,243,233,
- 115,133, 0,168, 73, 30, 73, 38, 73, 49, 73, 55, 73, 63,225,227,
- 245,244,101,128,246,215,226,229,236,239,247,227,237, 98,128, 3,
- 36,227,237, 98,128, 3, 8,231,242,225,246,101,128,246,216,244,
- 239,238,239,115,128, 3,133,232,233,242,225,231,225,238, 97,128,
- 48, 98,235,225,244,225,235,225,238, 97,128, 48,194,244,244,239,
- 237,225,242,107,128, 48, 3,246,105, 2, 73,110, 73,121,228,101,
- 129, 0,247, 73,117,115,128, 34, 35,243,233,239,238,243,236,225,
- 243,104,128, 34, 21,234,229,227,249,242,233,236,236,233, 99,128,
- 4, 82,235,243,232,225,228,101,128, 37,147,108, 2, 73,161, 73,
- 172,233,238,229,226,229,236,239,119,128, 30, 15,243,241,245,225,
- 242,101,128, 51,151,109, 2, 73,187, 73,195,225,227,242,239,110,
- 128, 1, 17,239,238,239,243,240,225,227,101,128,255, 68,238,226,
- 236,239,227,107,128, 37,132,111, 10, 73,237, 73,249, 74, 3, 74,
- 14, 74, 25, 74, 97, 74,102, 74,113, 74,228, 74,254,227,232,225,
- 228,225,244,232,225,105,128, 14, 14,228,229,235,244,232,225,105,
- 128, 14, 20,232,233,242,225,231,225,238, 97,128, 48,105,235,225,
- 244,225,235,225,238, 97,128, 48,201,236,236,225,114,132, 0, 36,
- 74, 40, 74, 51, 74, 63, 74, 74,233,238,230,229,242,233,239,114,
- 128,246,227,237,239,238,239,243,240,225,227,101,128,255, 4,239,
- 236,228,243,244,249,236,101,128,247, 36,115, 2, 74, 80, 74, 87,
- 237,225,236,108,128,254,105,245,240,229,242,233,239,114,128,246,
- 228,238,103,128, 32,171,242,245,243,241,245,225,242,101,128, 51,
- 38,116, 6, 74,127, 74,144, 74,166, 74,177, 74,209, 74,216,225,
- 227,227,229,238,116,129, 2,217, 74,138,227,237, 98,128, 3, 7,
- 226,229,236,239,247, 99, 2, 74,155, 74,160,237, 98,128, 3, 35,
- 239,237, 98,128, 3, 35,235,225,244,225,235,225,238, 97,128, 48,
- 251,236,229,243,115, 2, 74,186, 74,190,105,128, 1, 49,106,129,
- 246,190, 74,196,243,244,242,239,235,229,232,239,239,107,128, 2,
- 132,237,225,244,104,128, 34,197,244,229,228,227,233,242,227,236,
- 101,128, 37,204,245,226,236,229,249,239,228,240,225,244,225,104,
- 129,251, 31, 74,245,232,229,226,242,229,119,128,251, 31,247,238,
- 244,225,227,107, 2, 75, 9, 75, 20,226,229,236,239,247,227,237,
- 98,128, 3, 30,237,239,100,128, 2,213,240,225,242,229,110,128,
- 36,159,243,245,240,229,242,233,239,114,128,246,235,116, 2, 75,
- 51, 75, 57,225,233,108,128, 2, 86,239,240,226,225,114,128, 1,
- 140,117, 2, 75, 71, 75, 82,232,233,242,225,231,225,238, 97,128,
- 48,101,235,225,244,225,235,225,238, 97,128, 48,197,122,132, 1,
- 243, 75,105, 75,114, 75,133, 75,170,225,236,244,239,238,101,128,
- 2,163, 99, 2, 75,120, 75,127,225,242,239,110,128, 1,198,245,
- 242,108,128, 2,165,101, 2, 75,139, 75,159,225,226,235,232,225,
- 243,233,225,238,227,249,242,233,236,236,233, 99,128, 4,225,227,
- 249,242,233,236,236,233, 99,128, 4, 85,232,229,227,249,242,233,
- 236,236,233, 99,128, 4, 95,101,151, 0,101, 75,233, 75,252, 76,
- 30, 77, 4, 77, 66, 77, 99, 77,111, 77,134, 77,187, 79, 43, 79,
- 101, 79,203, 80, 63, 80,198, 81, 17, 81, 48, 81,110, 81,163, 82,
- 98, 82,231, 82,251, 83, 39, 83,130, 97, 2, 75,239, 75,246,227,
- 245,244,101,128, 0,233,242,244,104,128, 38, 65, 98, 3, 76, 4,
- 76, 13, 76, 23,229,238,231,225,236,105,128, 9,143,239,240,239,
- 237,239,230,111,128, 49, 28,242,229,246,101,128, 1, 21, 99, 5,
- 76, 42, 76,115, 76,129, 76,161, 76,250, 97, 2, 76, 48, 76,109,
- 238,228,242, 97, 3, 76, 59, 76, 66, 76, 77,228,229,246, 97,128,
- 9, 13,231,245,234,225,242,225,244,105,128, 10,141,246,239,247,
- 229,236,243,233,231,110, 2, 76, 91, 76, 98,228,229,246, 97,128,
- 9, 69,231,245,234,225,242,225,244,105,128, 10,197,242,239,110,
- 128, 1, 27,229,228,233,236,236,225,226,242,229,246,101,128, 30,
- 29,104, 2, 76,135, 76,146,225,242,237,229,238,233,225,110,128,
- 5,101,249,233,247,238,225,242,237,229,238,233,225,110,128, 5,
- 135,233,242, 99, 2, 76,169, 76,174,236,101,128, 36,212,245,237,
- 230,236,229,120,134, 0,234, 76,195, 76,203, 76,211, 76,222, 76,
- 230, 76,242,225,227,245,244,101,128, 30,191,226,229,236,239,119,
- 128, 30, 25,228,239,244,226,229,236,239,119,128, 30,199,231,242,
- 225,246,101,128, 30,193,232,239,239,235,225,226,239,246,101,128,
- 30,195,244,233,236,228,101,128, 30,197,249,242,233,236,236,233,
- 99,128, 4, 84,100, 4, 77, 14, 77, 24, 77, 30, 77, 40,226,236,
- 231,242,225,246,101,128, 2, 5,229,246, 97,128, 9, 15,233,229,
- 242,229,243,233,115,128, 0,235,239,116,130, 1, 23, 77, 49, 77,
- 58,225,227,227,229,238,116,128, 1, 23,226,229,236,239,119,128,
- 30,185,101, 2, 77, 72, 77, 83,231,245,242,237,245,235,232,105,
- 128, 10, 15,237,225,244,242,225,231,245,242,237,245,235,232,105,
- 128, 10, 71,230,227,249,242,233,236,236,233, 99,128, 4, 68,103,
- 2, 77,117, 77,124,242,225,246,101,128, 0,232,245,234,225,242,
- 225,244,105,128, 10,143,104, 4, 77,144, 77,155, 77,166, 77,176,
- 225,242,237,229,238,233,225,110,128, 5,103,226,239,240,239,237,
- 239,230,111,128, 49, 29,233,242,225,231,225,238, 97,128, 48, 72,
- 239,239,235,225,226,239,246,101,128, 30,187,105, 4, 77,197, 77,
- 208, 79, 10, 79, 25,226,239,240,239,237,239,230,111,128, 49, 31,
- 231,232,116,142, 0, 56, 77,242, 77,251, 78, 5, 78, 35, 78, 42,
- 78, 80, 78,105, 78,150, 78,184, 78,196, 78,207, 78,240, 78,248,
- 79, 3,225,242,225,226,233, 99,128, 6,104,226,229,238,231,225,
- 236,105,128, 9,238,227,233,242,227,236,101,129, 36,103, 78, 16,
- 233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,102,
- 128, 39,145,228,229,246, 97,128, 9,110,229,229,110, 2, 78, 50,
- 78, 59,227,233,242,227,236,101,128, 36,113,112, 2, 78, 65, 78,
- 72,225,242,229,110,128, 36,133,229,242,233,239,100,128, 36,153,
- 231,117, 2, 78, 87, 78, 96,234,225,242,225,244,105,128, 10,238,
- 242,237,245,235,232,105,128, 10,110,104, 2, 78,111, 78,137, 97,
- 2, 78,117, 78,128,227,235,225,242,225,226,233, 99,128, 6,104,
- 238,231,250,232,239,117,128, 48, 40,238,239,244,229,226,229,225,
- 237,229,100,128, 38,107,105, 2, 78,156, 78,174,228,229,239,231,
- 242,225,240,232,233,227,240,225,242,229,110,128, 50, 39,238,230,
- 229,242,233,239,114,128, 32,136,237,239,238,239,243,240,225,227,
- 101,128,255, 24,239,236,228,243,244,249,236,101,128,247, 56,112,
- 2, 78,213, 78,220,225,242,229,110,128, 36,123,229,114, 2, 78,
- 227, 78,233,233,239,100,128, 36,143,243,233,225,110,128, 6,248,
- 242,239,237,225,110,128, 33,119,243,245,240,229,242,233,239,114,
- 128, 32,120,244,232,225,105,128, 14, 88,238,246,229,242,244,229,
- 228,226,242,229,246,101,128, 2, 7,239,244,233,230,233,229,228,
- 227,249,242,233,236,236,233, 99,128, 4,101,107, 2, 79, 49, 79,
- 73,225,244,225,235,225,238, 97,129, 48,168, 79, 61,232,225,236,
- 230,247,233,228,244,104,128,255,116,111, 2, 79, 79, 79, 94,238,
- 235,225,242,231,245,242,237,245,235,232,105,128, 10,116,242,229,
- 225,110,128, 49, 84,108, 3, 79,109, 79,120, 79,181,227,249,242,
- 233,236,236,233, 99,128, 4, 59,101, 2, 79,126, 79,133,237,229,
- 238,116,128, 34, 8,246,229,110, 3, 79,143, 79,152, 79,173,227,
- 233,242,227,236,101,128, 36,106,112, 2, 79,158, 79,165,225,242,
- 229,110,128, 36,126,229,242,233,239,100,128, 36,146,242,239,237,
- 225,110,128, 33,122,236,233,240,243,233,115,129, 32, 38, 79,192,
- 246,229,242,244,233,227,225,108,128, 34,238,109, 5, 79,215, 79,
- 243, 79,254, 80, 18, 80, 29,225,227,242,239,110,130, 1, 19, 79,
- 227, 79,235,225,227,245,244,101,128, 30, 23,231,242,225,246,101,
- 128, 30, 21,227,249,242,233,236,236,233, 99,128, 4, 60,228,225,
- 243,104,129, 32, 20, 80, 7,246,229,242,244,233,227,225,108,128,
- 254, 49,239,238,239,243,240,225,227,101,128,255, 69,112, 2, 80,
- 35, 80, 55,232,225,243,233,243,237,225,242,235,225,242,237,229,
- 238,233,225,110,128, 5, 91,244,249,243,229,116,128, 34, 5,110,
- 6, 80, 77, 80, 88, 80, 99, 80,143, 80,175, 80,190,226,239,240,
- 239,237,239,230,111,128, 49, 35,227,249,242,233,236,236,233, 99,
- 128, 4, 61,100, 2, 80,105, 80,124,225,243,104,129, 32, 19, 80,
- 113,246,229,242,244,233,227,225,108,128,254, 50,229,243,227,229,
- 238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,163,103,
- 130, 1, 75, 80,151, 80,162,226,239,240,239,237,239,230,111,128,
- 49, 37,232,229,227,249,242,233,236,236,233, 99,128, 4,165,232,
- 239,239,235,227,249,242,233,236,236,233, 99,128, 4,200,243,240,
- 225,227,101,128, 32, 2,111, 3, 80,206, 80,214, 80,223,231,239,
- 238,229,107,128, 1, 25,235,239,242,229,225,110,128, 49, 83,240,
- 229,110,130, 2, 91, 80,233, 80,242,227,236,239,243,229,100,128,
- 2,154,242,229,246,229,242,243,229,100,130, 2, 92, 81, 1, 81,
- 10,227,236,239,243,229,100,128, 2, 94,232,239,239,107,128, 2,
- 93,112, 2, 81, 23, 81, 30,225,242,229,110,128, 36,160,243,233,
- 236,239,110,129, 3,181, 81, 40,244,239,238,239,115,128, 3,173,
- 241,117, 2, 81, 55, 81, 99,225,108,130, 0, 61, 81, 64, 81, 76,
- 237,239,238,239,243,240,225,227,101,128,255, 29,115, 2, 81, 82,
- 81, 89,237,225,236,108,128,254,102,245,240,229,242,233,239,114,
- 128, 32,124,233,246,225,236,229,238,227,101,128, 34, 97,114, 3,
- 81,118, 81,129, 81,140,226,239,240,239,237,239,230,111,128, 49,
- 38,227,249,242,233,236,236,233, 99,128, 4, 64,229,246,229,242,
- 243,229,100,129, 2, 88, 81,152,227,249,242,233,236,236,233, 99,
- 128, 4, 77,115, 6, 81,177, 81,188, 81,208, 82, 33, 82, 78, 82,
- 88,227,249,242,233,236,236,233, 99,128, 4, 65,228,229,243,227,
- 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,171,
- 104,132, 2,131, 81,220, 81,227, 82, 2, 82, 17,227,245,242,108,
- 128, 2,134,239,242,116, 2, 81,235, 81,242,228,229,246, 97,128,
- 9, 14,246,239,247,229,236,243,233,231,238,228,229,246, 97,128,
- 9, 70,242,229,246,229,242,243,229,228,236,239,239,112,128, 1,
- 170,243,241,245,225,244,242,229,246,229,242,243,229,100,128, 2,
- 133,237,225,236,108, 2, 82, 42, 82, 53,232,233,242,225,231,225,
- 238, 97,128, 48, 71,235,225,244,225,235,225,238, 97,129, 48,167,
- 82, 66,232,225,236,230,247,233,228,244,104,128,255,106,244,233,
- 237,225,244,229,100,128, 33, 46,245,240,229,242,233,239,114,128,
- 246,236,116, 5, 82,110, 82,136, 82,140, 82,157, 82,223, 97,130,
- 3,183, 82,118, 82,128,242,237,229,238,233,225,110,128, 5,104,
- 244,239,238,239,115,128, 3,174,104,128, 0,240,233,236,228,101,
- 129, 30,189, 82,149,226,229,236,239,119,128, 30, 27,238,225,232,
- 244, 97, 3, 82,169, 82,201, 82,210,230,239,245,235,104, 2, 82,
- 179, 82,188,232,229,226,242,229,119,128, 5,145,236,229,230,244,
- 232,229,226,242,229,119,128, 5,145,232,229,226,242,229,119,128,
- 5,145,236,229,230,244,232,229,226,242,229,119,128, 5,145,245,
- 242,238,229,100,128, 1,221,117, 2, 82,237, 82,246,235,239,242,
- 229,225,110,128, 49, 97,242,111,128, 32,172,246,239,247,229,236,
- 243,233,231,110, 3, 83, 11, 83, 21, 83, 28,226,229,238,231,225,
- 236,105,128, 9,199,228,229,246, 97,128, 9, 71,231,245,234,225,
- 242,225,244,105,128, 10,199,120, 2, 83, 45, 83,118,227,236,225,
- 109,132, 0, 33, 83, 60, 83, 71, 83, 98, 83,110,225,242,237,229,
- 238,233,225,110,128, 5, 92,100, 2, 83, 77, 83, 82,226,108,128,
- 32, 60,239,247,110,129, 0,161, 83, 90,243,237,225,236,108,128,
- 247,161,237,239,238,239,243,240,225,227,101,128,255, 1,243,237,
- 225,236,108,128,247, 33,233,243,244,229,238,244,233,225,108,128,
- 34, 3,250,104,131, 2,146, 83,141, 83,160, 83,171, 99, 2, 83,
- 147, 83,154,225,242,239,110,128, 1,239,245,242,108,128, 2,147,
- 242,229,246,229,242,243,229,100,128, 1,185,244,225,233,108,128,
- 1,186,102,140, 0,102, 83,206, 84, 32, 84, 43, 84, 52, 84, 64,
- 84,167, 84,183, 86,191, 86,204, 86,230, 88,107, 88,115, 97, 4,
- 83,216, 83,223, 83,234, 83,245,228,229,246, 97,128, 9, 94,231,
- 245,242,237,245,235,232,105,128, 10, 94,232,242,229,238,232,229,
- 233,116,128, 33, 9,244,232, 97, 3, 83,255, 84, 8, 84, 20,225,
- 242,225,226,233, 99,128, 6, 78,236,239,247,225,242,225,226,233,
- 99,128, 6, 78,244,225,238,225,242,225,226,233, 99,128, 6, 75,
- 226,239,240,239,237,239,230,111,128, 49, 8,227,233,242,227,236,
- 101,128, 36,213,228,239,244,225,227,227,229,238,116,128, 30, 31,
- 101, 3, 84, 72, 84,150, 84,160,104, 4, 84, 82, 84,105, 84,119,
- 84,135,225,114, 2, 84, 89, 84, 96,225,226,233, 99,128, 6, 65,
- 237,229,238,233,225,110,128, 5,134,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,210,233,238,233,244,233,225,236,225,242,
- 225,226,233, 99,128,254,211,237,229,228,233,225,236,225,242,225,
- 226,233, 99,128,254,212,233,227,239,240,244,233, 99,128, 3,229,
- 237,225,236,101,128, 38, 64,102,130,251, 0, 84,175, 84,179,105,
- 128,251, 3,108,128,251, 4,105,136,251, 1, 84,203, 84,243, 84,
- 254, 85, 20, 85,142, 85,159, 85,167, 85,180,230,244,229,229,110,
- 2, 84,213, 84,222,227,233,242,227,236,101,128, 36,110,112, 2,
- 84,228, 84,235,225,242,229,110,128, 36,130,229,242,233,239,100,
- 128, 36,150,231,245,242,229,228,225,243,104,128, 32, 18,236,236,
- 229,100, 2, 85, 7, 85, 13,226,239,120,128, 37,160,242,229,227,
- 116,128, 37,172,238,225,108, 5, 85, 34, 85, 73, 85, 90, 85,107,
- 85,123,235,225,102,130, 5,218, 85, 44, 85, 64,228,225,231,229,
- 243,104,129,251, 58, 85, 55,232,229,226,242,229,119,128,251, 58,
- 232,229,226,242,229,119,128, 5,218,237,229,109,129, 5,221, 85,
- 81,232,229,226,242,229,119,128, 5,221,238,245,110,129, 5,223,
- 85, 98,232,229,226,242,229,119,128, 5,223,240,101,129, 5,227,
- 85,114,232,229,226,242,229,119,128, 5,227,244,243,225,228,105,
- 129, 5,229, 85,133,232,229,226,242,229,119,128, 5,229,242,243,
- 244,244,239,238,229,227,232,233,238,229,243,101,128, 2,201,243,
- 232,229,249,101,128, 37,201,244,225,227,249,242,233,236,236,233,
- 99,128, 4,115,246,101,142, 0, 53, 85,213, 85,222, 85,232, 86,
- 6, 86, 13, 86, 23, 86, 48, 86, 75, 86,109, 86,121, 86,132, 86,
- 165, 86,173, 86,184,225,242,225,226,233, 99,128, 6,101,226,229,
- 238,231,225,236,105,128, 9,235,227,233,242,227,236,101,129, 36,
- 100, 85,243,233,238,246,229,242,243,229,243,225,238,243,243,229,
- 242,233,102,128, 39,142,228,229,246, 97,128, 9,107,229,233,231,
- 232,244,232,115,128, 33, 93,231,117, 2, 86, 30, 86, 39,234,225,
- 242,225,244,105,128, 10,235,242,237,245,235,232,105,128, 10,107,
- 232, 97, 2, 86, 55, 86, 66,227,235,225,242,225,226,233, 99,128,
- 6,101,238,231,250,232,239,117,128, 48, 37,105, 2, 86, 81, 86,
- 99,228,229,239,231,242,225,240,232,233,227,240,225,242,229,110,
- 128, 50, 36,238,230,229,242,233,239,114,128, 32,133,237,239,238,
- 239,243,240,225,227,101,128,255, 21,239,236,228,243,244,249,236,
- 101,128,247, 53,112, 2, 86,138, 86,145,225,242,229,110,128, 36,
- 120,229,114, 2, 86,152, 86,158,233,239,100,128, 36,140,243,233,
- 225,110,128, 6,245,242,239,237,225,110,128, 33,116,243,245,240,
- 229,242,233,239,114,128, 32,117,244,232,225,105,128, 14, 85,108,
- 129,251, 2, 86,197,239,242,233,110,128, 1,146,109, 2, 86,210,
- 86,221,239,238,239,243,240,225,227,101,128,255, 70,243,241,245,
- 225,242,101,128, 51,153,111, 4, 86,240, 87, 6, 87, 18, 87, 25,
- 230, 97, 2, 86,247, 86,255,238,244,232,225,105,128, 14, 31,244,
- 232,225,105,128, 14, 29,238,231,237,225,238,244,232,225,105,128,
- 14, 79,242,225,236,108,128, 34, 0,245,114,142, 0, 52, 87, 58,
- 87, 67, 87, 77, 87,107, 87,114, 87,139, 87,166, 87,200, 87,212,
- 87,231, 87,242, 88, 19, 88, 27, 88, 38,225,242,225,226,233, 99,
- 128, 6,100,226,229,238,231,225,236,105,128, 9,234,227,233,242,
- 227,236,101,129, 36, 99, 87, 88,233,238,246,229,242,243,229,243,
- 225,238,243,243,229,242,233,102,128, 39,141,228,229,246, 97,128,
- 9,106,231,117, 2, 87,121, 87,130,234,225,242,225,244,105,128,
- 10,234,242,237,245,235,232,105,128, 10,106,232, 97, 2, 87,146,
- 87,157,227,235,225,242,225,226,233, 99,128, 6,100,238,231,250,
- 232,239,117,128, 48, 36,105, 2, 87,172, 87,190,228,229,239,231,
- 242,225,240,232,233,227,240,225,242,229,110,128, 50, 35,238,230,
- 229,242,233,239,114,128, 32,132,237,239,238,239,243,240,225,227,
- 101,128,255, 20,238,245,237,229,242,225,244,239,242,226,229,238,
- 231,225,236,105,128, 9,247,239,236,228,243,244,249,236,101,128,
- 247, 52,112, 2, 87,248, 87,255,225,242,229,110,128, 36,119,229,
- 114, 2, 88, 6, 88, 12,233,239,100,128, 36,139,243,233,225,110,
- 128, 6,244,242,239,237,225,110,128, 33,115,243,245,240,229,242,
- 233,239,114,128, 32,116,116, 2, 88, 44, 88, 82,229,229,110, 2,
- 88, 52, 88, 61,227,233,242,227,236,101,128, 36,109,112, 2, 88,
- 67, 88, 74,225,242,229,110,128, 36,129,229,242,233,239,100,128,
- 36,149,104, 2, 88, 88, 88, 93,225,105,128, 14, 84,244,239,238,
- 229,227,232,233,238,229,243,101,128, 2,203,240,225,242,229,110,
- 128, 36,161,242, 97, 2, 88,122, 88,130,227,244,233,239,110,128,
- 32, 68,238, 99,128, 32,163,103,144, 0,103, 88,171, 89,117, 89,
- 140, 89,201, 89,218, 90,139, 91,132, 91,217, 91,230, 92, 88, 92,
- 113, 92,141, 92,163, 93,108, 93,130, 93,232, 97, 9, 88,191, 88,
- 201, 88,208, 88,215, 89, 23, 89, 48, 89, 59, 89, 70, 89,104,226,
- 229,238,231,225,236,105,128, 9,151,227,245,244,101,128, 1,245,
- 228,229,246, 97,128, 9, 23,102, 4, 88,225, 88,234, 88,248, 89,
- 8,225,242,225,226,233, 99,128, 6,175,230,233,238,225,236,225,
- 242,225,226,233, 99,128,251,147,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,251,148,237,229,228,233,225,236,225,242,
- 225,226,233, 99,128,251,149,231,117, 2, 89, 30, 89, 39,234,225,
- 242,225,244,105,128, 10,151,242,237,245,235,232,105,128, 10, 23,
- 232,233,242,225,231,225,238, 97,128, 48, 76,235,225,244,225,235,
- 225,238, 97,128, 48,172,237,237, 97,130, 3,179, 89, 80, 89, 93,
- 236,225,244,233,238,243,237,225,236,108,128, 2, 99,243,245,240,
- 229,242,233,239,114,128, 2,224,238,231,233,225,227,239,240,244,
- 233, 99,128, 3,235, 98, 2, 89,123, 89,133,239,240,239,237,239,
- 230,111,128, 49, 13,242,229,246,101,128, 1, 31, 99, 4, 89,150,
- 89,157, 89,166, 89,188,225,242,239,110,128, 1,231,229,228,233,
- 236,236, 97,128, 1, 35,233,242, 99, 2, 89,174, 89,179,236,101,
- 128, 36,214,245,237,230,236,229,120,128, 1, 29,239,237,237,225,
- 225,227,227,229,238,116,128, 1, 35,228,239,116,129, 1, 33, 89,
- 209,225,227,227,229,238,116,128, 1, 33,101, 6, 89,232, 89,243,
- 89,254, 90, 9, 90, 28, 90,130,227,249,242,233,236,236,233, 99,
- 128, 4, 51,232,233,242,225,231,225,238, 97,128, 48, 82,235,225,
- 244,225,235,225,238, 97,128, 48,178,239,237,229,244,242,233,227,
- 225,236,236,249,229,241,245,225,108,128, 34, 81,114, 3, 90, 36,
- 90, 85, 90, 95,229,243,104, 3, 90, 46, 90, 61, 90, 70,225,227,
- 227,229,238,244,232,229,226,242,229,119,128, 5,156,232,229,226,
- 242,229,119,128, 5,243,237,245,241,228,225,237,232,229,226,242,
- 229,119,128, 5,157,237,225,238,228,226,236,115,128, 0,223,243,
- 232,225,249,233,109, 2, 90,106, 90,121,225,227,227,229,238,244,
- 232,229,226,242,229,119,128, 5,158,232,229,226,242,229,119,128,
- 5,244,244,225,237,225,242,107,128, 48, 19,104, 5, 90,151, 91,
- 28, 91, 91, 91,116, 91,122, 97, 4, 90,161, 90,171, 90,194, 90,
- 219,226,229,238,231,225,236,105,128, 9,152,100, 2, 90,177, 90,
- 188,225,242,237,229,238,233,225,110,128, 5,114,229,246, 97,128,
- 9, 24,231,117, 2, 90,201, 90,210,234,225,242,225,244,105,128,
- 10,152,242,237,245,235,232,105,128, 10, 24,233,110, 4, 90,230,
- 90,239, 90,253, 91, 13,225,242,225,226,233, 99,128, 6, 58,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,206,233,238,233,
- 244,233,225,236,225,242,225,226,233, 99,128,254,207,237,229,228,
- 233,225,236,225,242,225,226,233, 99,128,254,208,101, 3, 91, 36,
- 91, 57, 91, 74,237,233,228,228,236,229,232,239,239,235,227,249,
- 242,233,236,236,233, 99,128, 4,149,243,244,242,239,235,229,227,
- 249,242,233,236,236,233, 99,128, 4,147,245,240,244,245,242,238,
- 227,249,242,233,236,236,233, 99,128, 4,145,232, 97, 2, 91, 98,
- 91,105,228,229,246, 97,128, 9, 90,231,245,242,237,245,235,232,
- 105,128, 10, 90,239,239,107,128, 2, 96,250,243,241,245,225,242,
- 101,128, 51,147,105, 3, 91,140, 91,151, 91,162,232,233,242,225,
- 231,225,238, 97,128, 48, 78,235,225,244,225,235,225,238, 97,128,
- 48,174,109, 2, 91,168, 91,179,225,242,237,229,238,233,225,110,
- 128, 5, 99,229,108,130, 5,210, 91,188, 91,208,228,225,231,229,
- 243,104,129,251, 50, 91,199,232,229,226,242,229,119,128,251, 50,
- 232,229,226,242,229,119,128, 5,210,234,229,227,249,242,233,236,
- 236,233, 99,128, 4, 83,236,239,244,244,225,108, 2, 91,241, 92,
- 2,233,238,246,229,242,244,229,228,243,244,242,239,235,101,128,
- 1,190,243,244,239,112,132, 2,148, 92, 17, 92, 28, 92, 34, 92,
- 66,233,238,246,229,242,244,229,100,128, 2,150,237,239,100,128,
- 2,192,242,229,246,229,242,243,229,100,130, 2,149, 92, 49, 92,
- 55,237,239,100,128, 2,193,243,245,240,229,242,233,239,114,128,
- 2,228,243,244,242,239,235,101,129, 2,161, 92, 77,242,229,246,
- 229,242,243,229,100,128, 2,162,109, 2, 92, 94, 92,102,225,227,
- 242,239,110,128, 30, 33,239,238,239,243,240,225,227,101,128,255,
- 71,111, 2, 92,119, 92,130,232,233,242,225,231,225,238, 97,128,
- 48, 84,235,225,244,225,235,225,238, 97,128, 48,180,240, 97, 2,
- 92,148, 92,154,242,229,110,128, 36,162,243,241,245,225,242,101,
- 128, 51,172,114, 2, 92,169, 93, 10, 97, 2, 92,175, 92,183,228,
- 233,229,238,116,128, 34, 7,246,101,134, 0, 96, 92,200, 92,211,
- 92,228, 92,235, 92,244, 93, 0,226,229,236,239,247,227,237, 98,
- 128, 3, 22, 99, 2, 92,217, 92,222,237, 98,128, 3, 0,239,237,
- 98,128, 3, 0,228,229,246, 97,128, 9, 83,236,239,247,237,239,
- 100,128, 2,206,237,239,238,239,243,240,225,227,101,128,255, 64,
- 244,239,238,229,227,237, 98,128, 3, 64,229,225,244,229,114,132,
- 0, 62, 93, 26, 93, 45, 93, 57, 93,100,229,241,245,225,108,129,
- 34,101, 93, 36,239,242,236,229,243,115,128, 34,219,237,239,238,
- 239,243,240,225,227,101,128,255, 30,111, 2, 93, 63, 93, 89,114,
- 2, 93, 69, 93, 82,229,241,245,233,246,225,236,229,238,116,128,
- 34,115,236,229,243,115,128, 34,119,246,229,242,229,241,245,225,
- 108,128, 34,103,243,237,225,236,108,128,254,101,115, 2, 93,114,
- 93,122,227,242,233,240,116,128, 2, 97,244,242,239,235,101,128,
- 1,229,117, 4, 93,140, 93,151, 93,208, 93,219,232,233,242,225,
- 231,225,238, 97,128, 48, 80,233,108, 2, 93,158, 93,183,236,229,
- 237,239,116, 2, 93,168, 93,175,236,229,230,116,128, 0,171,242,
- 233,231,232,116,128, 0,187,243,233,238,231,108, 2, 93,193, 93,
- 200,236,229,230,116,128, 32, 57,242,233,231,232,116,128, 32, 58,
- 235,225,244,225,235,225,238, 97,128, 48,176,242,225,237,245,243,
- 241,245,225,242,101,128, 51, 24,249,243,241,245,225,242,101,128,
- 51,201,104,144, 0,104, 94, 22, 96,164, 96,199, 96,236, 97, 20,
- 98,164, 98,184, 99,149, 99,161, 99,173,100,241,100,249,101, 4,
- 101, 13,101, 93,101, 97, 97, 13, 94, 50, 94, 89, 94, 99, 94,129,
- 94,154, 94,232, 94,244, 95, 13, 95, 28, 95, 57, 95, 70, 95,128,
- 95,137, 97, 2, 94, 56, 94, 75,226,235,232,225,243,233,225,238,
- 227,249,242,233,236,236,233, 99,128, 4,169,236,244,239,238,229,
- 225,242,225,226,233, 99,128, 6,193,226,229,238,231,225,236,105,
- 128, 9,185,228,101, 2, 94,106, 94,124,243,227,229,238,228,229,
- 242,227,249,242,233,236,236,233, 99,128, 4,179,246, 97,128, 9,
- 57,231,117, 2, 94,136, 94,145,234,225,242,225,244,105,128, 10,
- 185,242,237,245,235,232,105,128, 10, 57,104, 4, 94,164, 94,173,
- 94,187, 94,217,225,242,225,226,233, 99,128, 6, 45,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,162,105, 2, 94,193, 94,
- 208,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,163,
- 242,225,231,225,238, 97,128, 48,111,237,229,228,233,225,236,225,
- 242,225,226,233, 99,128,254,164,233,244,245,243,241,245,225,242,
- 101,128, 51, 42,235,225,244,225,235,225,238, 97,129, 48,207, 95,
- 1,232,225,236,230,247,233,228,244,104,128,255,138,236,225,238,
- 244,231,245,242,237,245,235,232,105,128, 10, 77,237,250, 97, 2,
- 95, 36, 95, 45,225,242,225,226,233, 99,128, 6, 33,236,239,247,
- 225,242,225,226,233, 99,128, 6, 33,238,231,245,236,230,233,236,
- 236,229,114,128, 49,100,114, 2, 95, 76, 95, 92,228,243,233,231,
- 238,227,249,242,233,236,236,233, 99,128, 4, 74,240,239,239,110,
- 2, 95,101, 95,114,236,229,230,244,226,225,242,226,245,112,128,
- 33,188,242,233,231,232,244,226,225,242,226,245,112,128, 33,192,
- 243,241,245,225,242,101,128, 51,202,244,225,102, 3, 95,147, 95,
- 239, 96, 74,240,225,244,225,104,134, 5,178, 95,167, 95,172, 95,
- 186, 95,195, 95,210, 95,226,177, 54,128, 5,178, 50, 2, 95,178,
- 95,182, 51,128, 5,178,102,128, 5,178,232,229,226,242,229,119,
- 128, 5,178,238,225,242,242,239,247,232,229,226,242,229,119,128,
- 5,178,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
- 5,178,247,233,228,229,232,229,226,242,229,119,128, 5,178,241,
- 225,237,225,244,115,135, 5,179, 96, 6, 96, 11, 96, 16, 96, 21,
- 96, 30, 96, 45, 96, 61,177, 98,128, 5,179,178, 56,128, 5,179,
- 179, 52,128, 5,179,232,229,226,242,229,119,128, 5,179,238,225,
- 242,242,239,247,232,229,226,242,229,119,128, 5,179,241,245,225,
- 242,244,229,242,232,229,226,242,229,119,128, 5,179,247,233,228,
- 229,232,229,226,242,229,119,128, 5,179,243,229,231,239,108,135,
- 5,177, 96, 96, 96,101, 96,106, 96,111, 96,120, 96,135, 96,151,
- 177, 55,128, 5,177,178, 52,128, 5,177,179, 48,128, 5,177,232,
- 229,226,242,229,119,128, 5,177,238,225,242,242,239,247,232,229,
- 226,242,229,119,128, 5,177,241,245,225,242,244,229,242,232,229,
- 226,242,229,119,128, 5,177,247,233,228,229,232,229,226,242,229,
- 119,128, 5,177, 98, 3, 96,172, 96,177, 96,187,225,114,128, 1,
- 39,239,240,239,237,239,230,111,128, 49, 15,242,229,246,229,226,
- 229,236,239,119,128, 30, 43, 99, 2, 96,205, 96,214,229,228,233,
- 236,236, 97,128, 30, 41,233,242, 99, 2, 96,222, 96,227,236,101,
- 128, 36,215,245,237,230,236,229,120,128, 1, 37,100, 2, 96,242,
- 96,252,233,229,242,229,243,233,115,128, 30, 39,239,116, 2, 97,
- 3, 97, 12,225,227,227,229,238,116,128, 30, 35,226,229,236,239,
- 119,128, 30, 37,101,136, 5,212, 97, 40, 97, 73, 97, 93, 98, 66,
- 98, 82, 98,127, 98,136, 98,149,225,242,116,129, 38,101, 97, 48,
- 243,245,233,116, 2, 97, 57, 97, 65,226,236,225,227,107,128, 38,
- 101,247,232,233,244,101,128, 38, 97,228,225,231,229,243,104,129,
- 251, 52, 97, 84,232,229,226,242,229,119,128,251, 52,104, 6, 97,
- 107, 97,135, 97,143, 97,193, 97,239, 98, 32, 97, 2, 97,113, 97,
- 127,236,244,239,238,229,225,242,225,226,233, 99,128, 6,193,242,
- 225,226,233, 99,128, 6, 71,229,226,242,229,119,128, 5,212,230,
- 233,238,225,236, 97, 2, 97,154, 97,185,236,116, 2, 97,161, 97,
- 173,239,238,229,225,242,225,226,233, 99,128,251,167,244,247,239,
- 225,242,225,226,233, 99,128,254,234,242,225,226,233, 99,128,254,
- 234,232,225,237,250,225,225,226,239,246,101, 2, 97,208, 97,222,
- 230,233,238,225,236,225,242,225,226,233, 99,128,251,165,233,243,
- 239,236,225,244,229,228,225,242,225,226,233, 99,128,251,164,105,
- 2, 97,245, 98, 23,238,233,244,233,225,236, 97, 2, 98, 1, 98,
- 15,236,244,239,238,229,225,242,225,226,233, 99,128,251,168,242,
- 225,226,233, 99,128,254,235,242,225,231,225,238, 97,128, 48,120,
- 237,229,228,233,225,236, 97, 2, 98, 44, 98, 58,236,244,239,238,
- 229,225,242,225,226,233, 99,128,251,169,242,225,226,233, 99,128,
- 254,236,233,243,229,233,229,242,225,243,241,245,225,242,101,128,
- 51,123,107, 2, 98, 88, 98,112,225,244,225,235,225,238, 97,129,
- 48,216, 98,100,232,225,236,230,247,233,228,244,104,128,255,141,
- 245,244,225,225,242,245,243,241,245,225,242,101,128, 51, 54,238,
- 231,232,239,239,107,128, 2,103,242,245,244,245,243,241,245,225,
- 242,101,128, 51, 57,116,129, 5,215, 98,155,232,229,226,242,229,
- 119,128, 5,215,232,239,239,107,129, 2,102, 98,173,243,245,240,
- 229,242,233,239,114,128, 2,177,105, 4, 98,194, 99, 23, 99, 34,
- 99, 59,229,245,104, 4, 98,206, 98,241, 99, 0, 99, 9, 97, 2,
- 98,212, 98,227,227,233,242,227,236,229,235,239,242,229,225,110,
- 128, 50,123,240,225,242,229,238,235,239,242,229,225,110,128, 50,
- 27,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,109,
- 235,239,242,229,225,110,128, 49, 78,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 13,232,233,242,225,231,225,238, 97,128,
- 48,114,235,225,244,225,235,225,238, 97,129, 48,210, 99, 47,232,
- 225,236,230,247,233,228,244,104,128,255,139,242,233,113,134, 5,
- 180, 99, 77, 99, 82, 99, 96, 99,105, 99,120, 99,136,177, 52,128,
- 5,180, 50, 2, 99, 88, 99, 92, 49,128, 5,180,100,128, 5,180,
- 232,229,226,242,229,119,128, 5,180,238,225,242,242,239,247,232,
- 229,226,242,229,119,128, 5,180,241,245,225,242,244,229,242,232,
- 229,226,242,229,119,128, 5,180,247,233,228,229,232,229,226,242,
- 229,119,128, 5,180,236,233,238,229,226,229,236,239,119,128, 30,
- 150,237,239,238,239,243,240,225,227,101,128,255, 72,111, 9, 99,
- 193, 99,204, 99,228, 99,253,100, 85,100, 98,100,184,100,224,100,
- 235,225,242,237,229,238,233,225,110,128, 5,112,232,105, 2, 99,
- 211, 99,219,240,244,232,225,105,128, 14, 43,242,225,231,225,238,
- 97,128, 48,123,235,225,244,225,235,225,238, 97,129, 48,219, 99,
- 241,232,225,236,230,247,233,228,244,104,128,255,142,236,225,109,
- 135, 5,185,100, 17,100, 22,100, 27,100, 32,100, 41,100, 56,100,
- 72,177, 57,128, 5,185,178, 54,128, 5,185,179, 50,128, 5,185,
- 232,229,226,242,229,119,128, 5,185,238,225,242,242,239,247,232,
- 229,226,242,229,119,128, 5,185,241,245,225,242,244,229,242,232,
- 229,226,242,229,119,128, 5,185,247,233,228,229,232,229,226,242,
- 229,119,128, 5,185,238,239,235,232,245,235,244,232,225,105,128,
- 14, 46,111, 2,100,104,100,174,107, 4,100,114,100,126,100,132,
- 100,154,225,226,239,246,229,227,239,237, 98,128, 3, 9,227,237,
- 98,128, 3, 9,240,225,236,225,244,225,236,233,250,229,228,226,
- 229,236,239,247,227,237, 98,128, 3, 33,242,229,244,242,239,230,
- 236,229,248,226,229,236,239,247,227,237, 98,128, 3, 34,238,243,
- 241,245,225,242,101,128, 51, 66,114, 2,100,190,100,217,105, 2,
- 100,196,100,205,227,239,240,244,233, 99,128, 3,233,250,239,238,
- 244,225,236,226,225,114,128, 32, 21,238,227,237, 98,128, 3, 27,
- 244,243,240,242,233,238,231,115,128, 38,104,245,243,101,128, 35,
- 2,240,225,242,229,110,128, 36,163,243,245,240,229,242,233,239,
- 114,128, 2,176,244,245,242,238,229,100,128, 2,101,117, 4,101,
- 23,101, 34,101, 47,101, 72,232,233,242,225,231,225,238, 97,128,
- 48,117,233,233,244,239,243,241,245,225,242,101,128, 51, 51,235,
- 225,244,225,235,225,238, 97,129, 48,213,101, 60,232,225,236,230,
- 247,233,228,244,104,128,255,140,238,231,225,242,245,237,236,225,
- 245,116,129, 2,221,101, 87,227,237, 98,128, 3, 11,118,128, 1,
- 149,249,240,232,229,110,132, 0, 45,101,113,101,124,101,136,101,
- 159,233,238,230,229,242,233,239,114,128,246,229,237,239,238,239,
- 243,240,225,227,101,128,255, 13,115, 2,101,142,101,149,237,225,
- 236,108,128,254, 99,245,240,229,242,233,239,114,128,246,230,244,
- 247,111,128, 32, 16,105,149, 0,105,101,211,101,234,102, 12,102,
- 59,105,197,106, 61,106, 98,106,125,107, 31,107, 35,107, 73,107,
- 95,107,179,108, 88,108,163,108,171,108,184,109, 15,109, 72,109,
- 100,109,144,225, 99, 2,101,218,101,224,245,244,101,128, 0,237,
- 249,242,233,236,236,233, 99,128, 4, 79, 98, 3,101,242,101,251,
- 102, 5,229,238,231,225,236,105,128, 9,135,239,240,239,237,239,
- 230,111,128, 49, 39,242,229,246,101,128, 1, 45, 99, 3,102, 20,
- 102, 27,102, 49,225,242,239,110,128, 1,208,233,242, 99, 2,102,
- 35,102, 40,236,101,128, 36,216,245,237,230,236,229,120,128, 0,
- 238,249,242,233,236,236,233, 99,128, 4, 86,100, 4,102, 69,102,
- 79,105,154,105,187,226,236,231,242,225,246,101,128, 2, 9,101,
- 2,102, 85,105,149,239,231,242,225,240,104, 7,102,106,102,120,
- 102,133,105, 62,105, 93,105,106,105,118,229,225,242,244,232,227,
- 233,242,227,236,101,128, 50,143,230,233,242,229,227,233,242,227,
- 236,101,128, 50,139,233, 99, 14,102,164,102,180,103, 23,103, 77,
- 103,143,103,172,103,188,103,245,104, 38,104, 50,104, 77,104,144,
- 105, 26,105, 55,225,236,236,233,225,238,227,229,240,225,242,229,
- 110,128, 50, 63, 99, 4,102,190,102,201,102,215,102,222,225,236,
- 236,240,225,242,229,110,128, 50, 58,229,238,244,242,229,227,233,
- 242,227,236,101,128, 50,165,236,239,243,101,128, 48, 6,111, 3,
- 102,230,102,245,103, 9,237,237, 97,129, 48, 1,102,238,236,229,
- 230,116,128,255,100,238,231,242,225,244,245,236,225,244,233,239,
- 238,240,225,242,229,110,128, 50, 55,242,242,229,227,244,227,233,
- 242,227,236,101,128, 50,163,101, 3,103, 31,103, 43,103, 60,225,
- 242,244,232,240,225,242,229,110,128, 50, 47,238,244,229,242,240,
- 242,233,243,229,240,225,242,229,110,128, 50, 61,248,227,229,236,
- 236,229,238,244,227,233,242,227,236,101,128, 50,157,102, 2,103,
- 83,103, 98,229,243,244,233,246,225,236,240,225,242,229,110,128,
- 50, 64,105, 2,103,104,103,133,238,225,238,227,233,225,108, 2,
- 103,116,103,125,227,233,242,227,236,101,128, 50,150,240,225,242,
- 229,110,128, 50, 54,242,229,240,225,242,229,110,128, 50, 43,104,
- 2,103,149,103,160,225,246,229,240,225,242,229,110,128, 50, 50,
- 233,231,232,227,233,242,227,236,101,128, 50,164,233,244,229,242,
- 225,244,233,239,238,237,225,242,107,128, 48, 5,108, 3,103,196,
- 103,222,103,234,225,226,239,114, 2,103,205,103,214,227,233,242,
- 227,236,101,128, 50,152,240,225,242,229,110,128, 50, 56,229,230,
- 244,227,233,242,227,236,101,128, 50,167,239,247,227,233,242,227,
- 236,101,128, 50,166,109, 2,103,251,104, 27,101, 2,104, 1,104,
- 16,228,233,227,233,238,229,227,233,242,227,236,101,128, 50,169,
- 244,225,236,240,225,242,229,110,128, 50, 46,239,239,238,240,225,
- 242,229,110,128, 50, 42,238,225,237,229,240,225,242,229,110,128,
- 50, 52,112, 2,104, 56,104, 64,229,242,233,239,100,128, 48, 2,
- 242,233,238,244,227,233,242,227,236,101,128, 50,158,114, 2,104,
- 83,104,131,101, 3,104, 91,104,102,104,117,225,227,232,240,225,
- 242,229,110,128, 50, 67,240,242,229,243,229,238,244,240,225,242,
- 229,110,128, 50, 57,243,239,245,242,227,229,240,225,242,229,110,
- 128, 50, 62,233,231,232,244,227,233,242,227,236,101,128, 50,168,
- 115, 5,104,156,104,185,104,199,104,224,104,252,101, 2,104,162,
- 104,175,227,242,229,244,227,233,242,227,236,101,128, 50,153,236,
- 230,240,225,242,229,110,128, 50, 66,239,227,233,229,244,249,240,
- 225,242,229,110,128, 50, 51,112, 2,104,205,104,211,225,227,101,
- 128, 48, 0,229,227,233,225,236,240,225,242,229,110,128, 50, 53,
- 116, 2,104,230,104,241,239,227,235,240,225,242,229,110,128, 50,
- 49,245,228,249,240,225,242,229,110,128, 50, 59,117, 2,105, 2,
- 105, 11,238,240,225,242,229,110,128, 50, 48,240,229,242,246,233,
- 243,229,240,225,242,229,110,128, 50, 60,119, 2,105, 32,105, 44,
- 225,244,229,242,240,225,242,229,110,128, 50, 44,239,239,228,240,
- 225,242,229,110,128, 50, 45,250,229,242,111,128, 48, 7,109, 2,
- 105, 68,105, 81,229,244,225,236,227,233,242,227,236,101,128, 50,
- 142,239,239,238,227,233,242,227,236,101,128, 50,138,238,225,237,
- 229,227,233,242,227,236,101,128, 50,148,243,245,238,227,233,242,
- 227,236,101,128, 50,144,119, 2,105,124,105,137,225,244,229,242,
- 227,233,242,227,236,101,128, 50,140,239,239,228,227,233,242,227,
- 236,101,128, 50,141,246, 97,128, 9, 7,233,229,242,229,243,233,
- 115,130, 0,239,105,168,105,176,225,227,245,244,101,128, 30, 47,
- 227,249,242,233,236,236,233, 99,128, 4,229,239,244,226,229,236,
- 239,119,128, 30,203,101, 3,105,205,105,221,105,232,226,242,229,
- 246,229,227,249,242,233,236,236,233, 99,128, 4,215,227,249,242,
- 233,236,236,233, 99,128, 4, 53,245,238,103, 4,105,244,106, 23,
- 106, 38,106, 47, 97, 2,105,250,106, 9,227,233,242,227,236,229,
- 235,239,242,229,225,110,128, 50,117,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 21,227,233,242,227,236,229,235,239,242,
- 229,225,110,128, 50,103,235,239,242,229,225,110,128, 49, 71,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 7,103, 2,106,
- 67,106, 74,242,225,246,101,128, 0,236,117, 2,106, 80,106, 89,
- 234,225,242,225,244,105,128, 10,135,242,237,245,235,232,105,128,
- 10, 7,104, 2,106,104,106,114,233,242,225,231,225,238, 97,128,
- 48, 68,239,239,235,225,226,239,246,101,128, 30,201,105, 8,106,
- 143,106,153,106,164,106,171,106,196,106,212,106,227,106,243,226,
- 229,238,231,225,236,105,128, 9,136,227,249,242,233,236,236,233,
- 99,128, 4, 56,228,229,246, 97,128, 9, 8,231,117, 2,106,178,
- 106,187,234,225,242,225,244,105,128, 10,136,242,237,245,235,232,
- 105,128, 10, 8,237,225,244,242,225,231,245,242,237,245,235,232,
- 105,128, 10, 64,238,246,229,242,244,229,228,226,242,229,246,101,
- 128, 2, 11,243,232,239,242,244,227,249,242,233,236,236,233, 99,
- 128, 4, 57,246,239,247,229,236,243,233,231,110, 3,107, 3,107,
- 13,107, 20,226,229,238,231,225,236,105,128, 9,192,228,229,246,
- 97,128, 9, 64,231,245,234,225,242,225,244,105,128, 10,192,106,
- 128, 1, 51,107, 2,107, 41,107, 65,225,244,225,235,225,238, 97,
- 129, 48,164,107, 53,232,225,236,230,247,233,228,244,104,128,255,
- 114,239,242,229,225,110,128, 49, 99,108, 2,107, 79,107, 84,228,
- 101,128, 2,220,245,249,232,229,226,242,229,119,128, 5,172,109,
- 2,107,101,107,168, 97, 3,107,109,107,129,107,154,227,242,239,
- 110,129, 1, 43,107,118,227,249,242,233,236,236,233, 99,128, 4,
- 227,231,229,239,242,225,240,240,242,239,248,233,237,225,244,229,
- 236,249,229,241,245,225,108,128, 34, 83,244,242,225,231,245,242,
- 237,245,235,232,105,128, 10, 63,239,238,239,243,240,225,227,101,
- 128,255, 73,110, 5,107,191,107,201,107,210,107,222,108, 50,227,
- 242,229,237,229,238,116,128, 34, 6,230,233,238,233,244,121,128,
- 34, 30,233,225,242,237,229,238,233,225,110,128, 5,107,116, 2,
- 107,228,108, 40,101, 2,107,234,108, 29,231,242,225,108,131, 34,
- 43,107,247,108, 9,108, 14, 98, 2,107,253,108, 5,239,244,244,
- 239,109,128, 35, 33,116,128, 35, 33,229,120,128,248,245,116, 2,
- 108, 20,108, 25,239,112,128, 35, 32,112,128, 35, 32,242,243,229,
- 227,244,233,239,110,128, 34, 41,233,243,241,245,225,242,101,128,
- 51, 5,118, 3,108, 58,108, 67,108, 76,226,245,236,236,229,116,
- 128, 37,216,227,233,242,227,236,101,128, 37,217,243,237,233,236,
- 229,230,225,227,101,128, 38, 59,111, 3,108, 96,108,107,108,115,
- 227,249,242,233,236,236,233, 99,128, 4, 81,231,239,238,229,107,
- 128, 1, 47,244, 97,131, 3,185,108,126,108,147,108,155,228,233,
- 229,242,229,243,233,115,129, 3,202,108,139,244,239,238,239,115,
- 128, 3,144,236,225,244,233,110,128, 2,105,244,239,238,239,115,
- 128, 3,175,240,225,242,229,110,128, 36,164,242,233,231,245,242,
- 237,245,235,232,105,128, 10,114,115, 4,108,194,108,239,108,253,
- 109, 5,237,225,236,108, 2,108,203,108,214,232,233,242,225,231,
- 225,238, 97,128, 48, 67,235,225,244,225,235,225,238, 97,129, 48,
- 163,108,227,232,225,236,230,247,233,228,244,104,128,255,104,243,
- 232,225,242,226,229,238,231,225,236,105,128, 9,250,244,242,239,
- 235,101,128, 2,104,245,240,229,242,233,239,114,128,246,237,116,
- 2,109, 21,109, 55,229,242,225,244,233,239,110, 2,109, 33,109,
- 44,232,233,242,225,231,225,238, 97,128, 48,157,235,225,244,225,
- 235,225,238, 97,128, 48,253,233,236,228,101,129, 1, 41,109, 64,
- 226,229,236,239,119,128, 30, 45,117, 2,109, 78,109, 89,226,239,
- 240,239,237,239,230,111,128, 49, 41,227,249,242,233,236,236,233,
- 99,128, 4, 78,246,239,247,229,236,243,233,231,110, 3,109,116,
- 109,126,109,133,226,229,238,231,225,236,105,128, 9,191,228,229,
- 246, 97,128, 9, 63,231,245,234,225,242,225,244,105,128, 10,191,
- 250,232,233,244,243, 97, 2,109,155,109,166,227,249,242,233,236,
- 236,233, 99,128, 4,117,228,226,236,231,242,225,246,229,227,249,
- 242,233,236,236,233, 99,128, 4,119,106,138, 0,106,109,209,110,
- 16,110, 27,110, 77,110, 93,110,206,111, 19,111, 24,111, 36,111,
- 44, 97, 4,109,219,109,230,109,240,109,247,225,242,237,229,238,
- 233,225,110,128, 5,113,226,229,238,231,225,236,105,128, 9,156,
- 228,229,246, 97,128, 9, 28,231,117, 2,109,254,110, 7,234,225,
- 242,225,244,105,128, 10,156,242,237,245,235,232,105,128, 10, 28,
- 226,239,240,239,237,239,230,111,128, 49, 16, 99, 3,110, 35,110,
- 42,110, 64,225,242,239,110,128, 1,240,233,242, 99, 2,110, 50,
- 110, 55,236,101,128, 36,217,245,237,230,236,229,120,128, 1, 53,
- 242,239,243,243,229,228,244,225,233,108,128, 2,157,228,239,244,
- 236,229,243,243,243,244,242,239,235,101,128, 2, 95,101, 3,110,
- 101,110,112,110,177,227,249,242,233,236,236,233, 99,128, 4, 88,
- 229,109, 4,110,123,110,132,110,146,110,162,225,242,225,226,233,
- 99,128, 6, 44,230,233,238,225,236,225,242,225,226,233, 99,128,
- 254,158,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 254,159,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
- 160,104, 2,110,183,110,192,225,242,225,226,233, 99,128, 6,152,
- 230,233,238,225,236,225,242,225,226,233, 99,128,251,139,104, 2,
- 110,212,111, 6, 97, 3,110,220,110,230,110,237,226,229,238,231,
- 225,236,105,128, 9,157,228,229,246, 97,128, 9, 29,231,117, 2,
- 110,244,110,253,234,225,242,225,244,105,128, 10,157,242,237,245,
- 235,232,105,128, 10, 29,229,232,225,242,237,229,238,233,225,110,
- 128, 5,123,233,115,128, 48, 4,237,239,238,239,243,240,225,227,
- 101,128,255, 74,240,225,242,229,110,128, 36,165,243,245,240,229,
- 242,233,239,114,128, 2,178,107,146, 0,107,111, 95,113,184,113,
- 195,114, 1,114, 12,114,102,114,116,115,224,116,164,116,177,116,
- 203,116,252,117,134,117,156,117,169,117,192,117,234,117,244, 97,
- 12,111,121,111,153,111,175,111,205,112, 63,112, 88,112,118,112,
- 143,112,249,113, 7,113,130,113,159, 98, 2,111,127,111,144,225,
- 243,232,235,233,242,227,249,242,233,236,236,233, 99,128, 4,161,
- 229,238,231,225,236,105,128, 9,149, 99, 2,111,159,111,165,245,
- 244,101,128, 30, 49,249,242,233,236,236,233, 99,128, 4, 58,228,
- 101, 2,111,182,111,200,243,227,229,238,228,229,242,227,249,242,
- 233,236,236,233, 99,128, 4,155,246, 97,128, 9, 21,102,135, 5,
- 219,111,223,111,232,111,252,112, 10,112, 19,112, 35,112, 50,225,
- 242,225,226,233, 99,128, 6, 67,228,225,231,229,243,104,129,251,
- 59,111,243,232,229,226,242,229,119,128,251, 59,230,233,238,225,
- 236,225,242,225,226,233, 99,128,254,218,232,229,226,242,229,119,
- 128, 5,219,233,238,233,244,233,225,236,225,242,225,226,233, 99,
- 128,254,219,237,229,228,233,225,236,225,242,225,226,233, 99,128,
- 254,220,242,225,230,229,232,229,226,242,229,119,128,251, 77,231,
- 117, 2,112, 70,112, 79,234,225,242,225,244,105,128, 10,149,242,
- 237,245,235,232,105,128, 10, 21,104, 2,112, 94,112,104,233,242,
- 225,231,225,238, 97,128, 48, 75,239,239,235,227,249,242,233,236,
- 236,233, 99,128, 4,196,235,225,244,225,235,225,238, 97,129, 48,
- 171,112,131,232,225,236,230,247,233,228,244,104,128,255,118,112,
- 2,112,149,112,170,240, 97,129, 3,186,112,156,243,249,237,226,
- 239,236,231,242,229,229,107,128, 3,240,249,229,239,245,110, 3,
- 112,182,112,196,112,230,237,233,229,245,237,235,239,242,229,225,
- 110,128, 49,113,112, 2,112,202,112,217,232,233,229,245,240,232,
- 235,239,242,229,225,110,128, 49,132,233,229,245,240,235,239,242,
- 229,225,110,128, 49,120,243,243,225,238,231,240,233,229,245,240,
- 235,239,242,229,225,110,128, 49,121,242,239,242,233,233,243,241,
- 245,225,242,101,128, 51, 13,115, 5,113, 19,113, 63,113, 78,113,
- 86,113,114,232,233,228,225,225,245,244,111, 2,113, 32,113, 41,
- 225,242,225,226,233, 99,128, 6, 64,238,239,243,233,228,229,226,
- 229,225,242,233,238,231,225,242,225,226,233, 99,128, 6, 64,237,
- 225,236,236,235,225,244,225,235,225,238, 97,128, 48,245,241,245,
- 225,242,101,128, 51,132,242, 97, 2,113, 93,113,102,225,242,225,
- 226,233, 99,128, 6, 80,244,225,238,225,242,225,226,233, 99,128,
- 6, 77,244,242,239,235,229,227,249,242,233,236,236,233, 99,128,
- 4,159,244,225,232,233,242,225,240,242,239,236,239,238,231,237,
- 225,242,235,232,225,236,230,247,233,228,244,104,128,255,112,246,
- 229,242,244,233,227,225,236,243,244,242,239,235,229,227,249,242,
- 233,236,236,233, 99,128, 4,157,226,239,240,239,237,239,230,111,
- 128, 49, 14, 99, 4,113,205,113,227,113,236,113,244, 97, 2,113,
- 211,113,221,236,243,241,245,225,242,101,128, 51,137,242,239,110,
- 128, 1,233,229,228,233,236,236, 97,128, 1, 55,233,242,227,236,
- 101,128, 36,218,239,237,237,225,225,227,227,229,238,116,128, 1,
- 55,228,239,244,226,229,236,239,119,128, 30, 51,101, 4,114, 22,
- 114, 49,114, 74,114, 86,104, 2,114, 28,114, 39,225,242,237,229,
- 238,233,225,110,128, 5,132,233,242,225,231,225,238, 97,128, 48,
- 81,235,225,244,225,235,225,238, 97,129, 48,177,114, 62,232,225,
- 236,230,247,233,228,244,104,128,255,121,238,225,242,237,229,238,
- 233,225,110,128, 5,111,243,237,225,236,236,235,225,244,225,235,
- 225,238, 97,128, 48,246,231,242,229,229,238,236,225,238,228,233,
- 99,128, 1, 56,104, 6,114,130,115, 3,115, 14,115, 39,115,126,
- 115,214, 97, 5,114,142,114,152,114,163,114,170,114,195,226,229,
- 238,231,225,236,105,128, 9,150,227,249,242,233,236,236,233, 99,
- 128, 4, 69,228,229,246, 97,128, 9, 22,231,117, 2,114,177,114,
- 186,234,225,242,225,244,105,128, 10,150,242,237,245,235,232,105,
- 128, 10, 22,104, 4,114,205,114,214,114,228,114,244,225,242,225,
- 226,233, 99,128, 6, 46,230,233,238,225,236,225,242,225,226,233,
- 99,128,254,166,233,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,167,237,229,228,233,225,236,225,242,225,226,233, 99,
- 128,254,168,229,233,227,239,240,244,233, 99,128, 3,231,232, 97,
- 2,115, 21,115, 28,228,229,246, 97,128, 9, 89,231,245,242,237,
- 245,235,232,105,128, 10, 89,233,229,245,235,104, 4,115, 53,115,
- 88,115,103,115,112, 97, 2,115, 59,115, 74,227,233,242,227,236,
- 229,235,239,242,229,225,110,128, 50,120,240,225,242,229,238,235,
- 239,242,229,225,110,128, 50, 24,227,233,242,227,236,229,235,239,
- 242,229,225,110,128, 50,106,235,239,242,229,225,110,128, 49, 75,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 10,111, 4,
- 115,136,115,185,115,195,115,200,235,104, 4,115,147,115,156,115,
- 165,115,175,225,233,244,232,225,105,128, 14, 2,239,238,244,232,
- 225,105,128, 14, 5,245,225,244,244,232,225,105,128, 14, 3,247,
- 225,233,244,232,225,105,128, 14, 4,237,245,244,244,232,225,105,
- 128, 14, 91,239,107,128, 1,153,242,225,235,232,225,238,231,244,
- 232,225,105,128, 14, 6,250,243,241,245,225,242,101,128, 51,145,
- 105, 4,115,234,115,245,116, 14,116, 63,232,233,242,225,231,225,
- 238, 97,128, 48, 77,235,225,244,225,235,225,238, 97,129, 48,173,
- 116, 2,232,225,236,230,247,233,228,244,104,128,255,119,242,111,
- 3,116, 23,116, 38,116, 54,231,245,242,225,237,245,243,241,245,
- 225,242,101,128, 51, 21,237,229,229,244,239,242,245,243,241,245,
- 225,242,101,128, 51, 22,243,241,245,225,242,101,128, 51, 20,249,
- 229,239,107, 5,116, 78,116,113,116,128,116,137,116,151, 97, 2,
- 116, 84,116, 99,227,233,242,227,236,229,235,239,242,229,225,110,
- 128, 50,110,240,225,242,229,238,235,239,242,229,225,110,128, 50,
- 14,227,233,242,227,236,229,235,239,242,229,225,110,128, 50, 96,
- 235,239,242,229,225,110,128, 49, 49,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 0,243,233,239,243,235,239,242,229,225,
- 110,128, 49, 51,234,229,227,249,242,233,236,236,233, 99,128, 4,
- 92,108, 2,116,183,116,194,233,238,229,226,229,236,239,119,128,
- 30, 53,243,241,245,225,242,101,128, 51,152,109, 3,116,211,116,
- 225,116,236,227,245,226,229,228,243,241,245,225,242,101,128, 51,
- 166,239,238,239,243,240,225,227,101,128,255, 75,243,241,245,225,
- 242,229,228,243,241,245,225,242,101,128, 51,162,111, 5,117, 8,
- 117, 34,117, 72,117, 84,117, 98,104, 2,117, 14,117, 24,233,242,
- 225,231,225,238, 97,128, 48, 83,237,243,241,245,225,242,101,128,
- 51,192,235, 97, 2,117, 41,117, 49,233,244,232,225,105,128, 14,
- 1,244,225,235,225,238, 97,129, 48,179,117, 60,232,225,236,230,
- 247,233,228,244,104,128,255,122,239,240,239,243,241,245,225,242,
- 101,128, 51, 30,240,240,225,227,249,242,233,236,236,233, 99,128,
- 4,129,114, 2,117,104,117,124,229,225,238,243,244,225,238,228,
- 225,242,228,243,249,237,226,239,108,128, 50,127,239,238,233,243,
- 227,237, 98,128, 3, 67,240, 97, 2,117,141,117,147,242,229,110,
- 128, 36,166,243,241,245,225,242,101,128, 51,170,243,233,227,249,
- 242,233,236,236,233, 99,128, 4,111,116, 2,117,175,117,184,243,
- 241,245,225,242,101,128, 51,207,245,242,238,229,100,128, 2,158,
- 117, 2,117,198,117,209,232,233,242,225,231,225,238, 97,128, 48,
- 79,235,225,244,225,235,225,238, 97,129, 48,175,117,222,232,225,
- 236,230,247,233,228,244,104,128,255,120,246,243,241,245,225,242,
- 101,128, 51,184,247,243,241,245,225,242,101,128, 51,190,108,146,
- 0,108,118, 38,120, 65,120, 94,120,160,120,198,121, 94,121,103,
- 121,119,121,143,121,161,122, 23,122, 64,122,199,122,207,122,240,
- 122,249,123, 1,123, 63, 97, 7,118, 54,118, 64,118, 71,118, 78,
- 118,103,118,119,120, 53,226,229,238,231,225,236,105,128, 9,178,
- 227,245,244,101,128, 1, 58,228,229,246, 97,128, 9, 50,231,117,
- 2,118, 85,118, 94,234,225,242,225,244,105,128, 10,178,242,237,
- 245,235,232,105,128, 10, 50,235,235,232,225,238,231,249,225,239,
- 244,232,225,105,128, 14, 69,109, 10,118,141,119, 80,119, 97,119,
- 135,119,149,119,168,119,184,119,204,119,224,119,247, 97, 2,118,
- 147,119, 72,236,229,102, 4,118,159,118,173,119, 9,119, 26,230,
- 233,238,225,236,225,242,225,226,233, 99,128,254,252,232,225,237,
- 250, 97, 2,118,183,118,224,225,226,239,246,101, 2,118,193,118,
- 207,230,233,238,225,236,225,242,225,226,233, 99,128,254,248,233,
- 243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,247,
- 226,229,236,239,119, 2,118,234,118,248,230,233,238,225,236,225,
- 242,225,226,233, 99,128,254,250,233,243,239,236,225,244,229,228,
- 225,242,225,226,233, 99,128,254,249,233,243,239,236,225,244,229,
- 228,225,242,225,226,233, 99,128,254,251,237,225,228,228,225,225,
- 226,239,246,101, 2,119, 41,119, 55,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,246,233,243,239,236,225,244,229,228,225,
- 242,225,226,233, 99,128,254,245,242,225,226,233, 99,128, 6, 68,
- 226,228, 97,129, 3,187,119, 88,243,244,242,239,235,101,128, 1,
- 155,229,100,130, 5,220,119,106,119,126,228,225,231,229,243,104,
- 129,251, 60,119,117,232,229,226,242,229,119,128,251, 60,232,229,
- 226,242,229,119,128, 5,220,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,222,232,225,232,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,252,202,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,254,223,234,229,229,237,233,238,233,244,
- 233,225,236,225,242,225,226,233, 99,128,252,201,235,232,225,232,
- 233,238,233,244,233,225,236,225,242,225,226,233, 99,128,252,203,
- 236,225,237,232,229,232,233,243,239,236,225,244,229,228,225,242,
- 225,226,233, 99,128,253,242,237,101, 2,119,254,120, 11,228,233,
- 225,236,225,242,225,226,233, 99,128,254,224,229,109, 2,120, 18,
- 120, 37,232,225,232,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,253,136,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,252,204,242,231,229,227,233,242,227,236,101,128, 37,
- 239, 98, 3,120, 73,120, 78,120, 84,225,114,128, 1,154,229,236,
- 116,128, 2,108,239,240,239,237,239,230,111,128, 49, 12, 99, 4,
- 120,104,120,111,120,120,120,147,225,242,239,110,128, 1, 62,229,
- 228,233,236,236, 97,128, 1, 60,233,242, 99, 2,120,128,120,133,
- 236,101,128, 36,219,245,237,230,236,229,248,226,229,236,239,119,
- 128, 30, 61,239,237,237,225,225,227,227,229,238,116,128, 1, 60,
- 228,239,116,130, 1, 64,120,170,120,179,225,227,227,229,238,116,
- 128, 1, 64,226,229,236,239,119,129, 30, 55,120,189,237,225,227,
- 242,239,110,128, 30, 57,101, 3,120,206,120,244,121, 89,230,116,
- 2,120,213,120,229,225,238,231,236,229,225,226,239,246,229,227,
- 237, 98,128, 3, 26,244,225,227,235,226,229,236,239,247,227,237,
- 98,128, 3, 24,243,115,132, 0, 60,121, 1,121, 23,121, 35,121,
- 81,229,241,245,225,108,129, 34,100,121, 11,239,242,231,242,229,
- 225,244,229,114,128, 34,218,237,239,238,239,243,240,225,227,101,
- 128,255, 28,111, 2,121, 41,121, 70,114, 2,121, 47,121, 60,229,
- 241,245,233,246,225,236,229,238,116,128, 34,114,231,242,229,225,
- 244,229,114,128, 34,118,246,229,242,229,241,245,225,108,128, 34,
- 102,243,237,225,236,108,128,254,100,250,104,128, 2,110,230,226,
- 236,239,227,107,128, 37,140,232,239,239,235,242,229,244,242,239,
- 230,236,229,120,128, 2,109,105, 2,121,125,121,130,242, 97,128,
- 32,164,247,238,225,242,237,229,238,233,225,110,128, 5,108,106,
- 129, 1,201,121,149,229,227,249,242,233,236,236,233, 99,128, 4,
- 89,108,132,246,192,121,173,121,197,121,208,121,217, 97, 2,121,
- 179,121,186,228,229,246, 97,128, 9, 51,231,245,234,225,242,225,
- 244,105,128, 10,179,233,238,229,226,229,236,239,119,128, 30, 59,
- 236,225,228,229,246, 97,128, 9, 52,246,239,227,225,236,233, 99,
- 3,121,231,121,241,121,248,226,229,238,231,225,236,105,128, 9,
- 225,228,229,246, 97,128, 9, 97,246,239,247,229,236,243,233,231,
- 110, 2,122, 6,122, 16,226,229,238,231,225,236,105,128, 9,227,
- 228,229,246, 97,128, 9, 99,109, 3,122, 31,122, 44,122, 55,233,
- 228,228,236,229,244,233,236,228,101,128, 2,107,239,238,239,243,
- 240,225,227,101,128,255, 76,243,241,245,225,242,101,128, 51,208,
- 111, 6,122, 78,122, 90,122,132,122,143,122,149,122,191,227,232,
- 245,236,225,244,232,225,105,128, 14, 44,231,233,227,225,108, 3,
- 122,102,122,108,122,127,225,238,100,128, 34, 39,238,239,116,129,
- 0,172,122,116,242,229,246,229,242,243,229,100,128, 35, 16,239,
- 114,128, 34, 40,236,233,238,231,244,232,225,105,128, 14, 37,238,
- 231,115,128, 1,127,247,236,233,238,101, 2,122,159,122,182, 99,
- 2,122,165,122,177,229,238,244,229,242,236,233,238,101,128,254,
- 78,237, 98,128, 3, 50,228,225,243,232,229,100,128,254, 77,250,
- 229,238,231,101,128, 37,202,240,225,242,229,110,128, 36,167,115,
- 3,122,215,122,222,122,230,236,225,243,104,128, 1, 66,241,245,
- 225,242,101,128, 33, 19,245,240,229,242,233,239,114,128,246,238,
- 244,243,232,225,228,101,128, 37,145,245,244,232,225,105,128, 14,
- 38,246,239,227,225,236,233, 99, 3,123, 15,123, 25,123, 32,226,
- 229,238,231,225,236,105,128, 9,140,228,229,246, 97,128, 9, 12,
- 246,239,247,229,236,243,233,231,110, 2,123, 46,123, 56,226,229,
- 238,231,225,236,105,128, 9,226,228,229,246, 97,128, 9, 98,248,
- 243,241,245,225,242,101,128, 51,211,109,144, 0,109,123,109,125,
- 218,125,243,126, 14,126, 39,127, 92,127,114,128,169,128,199,128,
- 248,129, 99,129,121,129,146,129,155,130,182,130,210, 97, 12,123,
- 135,123,145,123,209,123,216,123,241,124, 33,125,125,125,150,125,
- 155,125,169,125,181,125,186,226,229,238,231,225,236,105,128, 9,
- 174, 99, 2,123,151,123,203,242,239,110,132, 0,175,123,165,123,
- 176,123,182,123,191,226,229,236,239,247,227,237, 98,128, 3, 49,
- 227,237, 98,128, 3, 4,236,239,247,237,239,100,128, 2,205,237,
- 239,238,239,243,240,225,227,101,128,255,227,245,244,101,128, 30,
- 63,228,229,246, 97,128, 9, 46,231,117, 2,123,223,123,232,234,
- 225,242,225,244,105,128, 10,174,242,237,245,235,232,105,128, 10,
- 46,104, 2,123,247,124, 23,225,240,225,235,104, 2,124, 1,124,
- 10,232,229,226,242,229,119,128, 5,164,236,229,230,244,232,229,
- 226,242,229,119,128, 5,164,233,242,225,231,225,238, 97,128, 48,
- 126,105, 5,124, 45,124,114,124,177,124,207,125,113,227,232,225,
- 244,244,225,247, 97, 3,124, 60,124, 91,124, 98,236,239,119, 2,
- 124, 68,124, 79,236,229,230,244,244,232,225,105,128,248,149,242,
- 233,231,232,244,244,232,225,105,128,248,148,244,232,225,105,128,
- 14, 75,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
- 248,147,229,107, 3,124,123,124,154,124,161,236,239,119, 2,124,
- 131,124,142,236,229,230,244,244,232,225,105,128,248,140,242,233,
- 231,232,244,244,232,225,105,128,248,139,244,232,225,105,128, 14,
- 72,245,240,240,229,242,236,229,230,244,244,232,225,105,128,248,
- 138,232,225,238,225,235,225,116, 2,124,189,124,200,236,229,230,
- 244,244,232,225,105,128,248,132,244,232,225,105,128, 14, 49,116,
- 3,124,215,124,243,125, 50,225,233,235,232,117, 2,124,225,124,
- 236,236,229,230,244,244,232,225,105,128,248,137,244,232,225,105,
- 128, 14, 71,232,111, 3,124,252,125, 27,125, 34,236,239,119, 2,
- 125, 4,125, 15,236,229,230,244,244,232,225,105,128,248,143,242,
- 233,231,232,244,244,232,225,105,128,248,142,244,232,225,105,128,
- 14, 73,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
- 248,141,242,105, 3,125, 59,125, 90,125, 97,236,239,119, 2,125,
- 67,125, 78,236,229,230,244,244,232,225,105,128,248,146,242,233,
- 231,232,244,244,232,225,105,128,248,145,244,232,225,105,128, 14,
- 74,245,240,240,229,242,236,229,230,244,244,232,225,105,128,248,
- 144,249,225,237,239,235,244,232,225,105,128, 14, 70,235,225,244,
- 225,235,225,238, 97,129, 48,222,125,138,232,225,236,230,247,233,
- 228,244,104,128,255,143,236,101,128, 38, 66,238,243,249,239,238,
- 243,241,245,225,242,101,128, 51, 71,241,225,230,232,229,226,242,
- 229,119,128, 5,190,242,115,128, 38, 66,115, 2,125,192,125,210,
- 239,242,225,227,233,242,227,236,229,232,229,226,242,229,119,128,
- 5,175,241,245,225,242,101,128, 51,131, 98, 2,125,224,125,234,
- 239,240,239,237,239,230,111,128, 49, 7,243,241,245,225,242,101,
- 128, 51,212, 99, 2,125,249,126, 1,233,242,227,236,101,128, 36,
- 220,245,226,229,228,243,241,245,225,242,101,128, 51,165,228,239,
- 116, 2,126, 22,126, 31,225,227,227,229,238,116,128, 30, 65,226,
- 229,236,239,119,128, 30, 67,101, 7,126, 55,126,182,126,193,126,
- 208,126,233,127, 14,127, 26,101, 2,126, 61,126,169,109, 4,126,
- 71,126, 80,126, 94,126,110,225,242,225,226,233, 99,128, 6, 69,
- 230,233,238,225,236,225,242,225,226,233, 99,128,254,226,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,254,227,237,101,
- 2,126,117,126,130,228,233,225,236,225,242,225,226,233, 99,128,
- 254,228,229,237,105, 2,126,138,126,153,238,233,244,233,225,236,
- 225,242,225,226,233, 99,128,252,209,243,239,236,225,244,229,228,
- 225,242,225,226,233, 99,128,252, 72,244,239,242,245,243,241,245,
- 225,242,101,128, 51, 77,232,233,242,225,231,225,238, 97,128, 48,
- 129,233,250,233,229,242,225,243,241,245,225,242,101,128, 51,126,
- 235,225,244,225,235,225,238, 97,129, 48,225,126,221,232,225,236,
- 230,247,233,228,244,104,128,255,146,109,130, 5,222,126,241,127,
- 5,228,225,231,229,243,104,129,251, 62,126,252,232,229,226,242,
- 229,119,128,251, 62,232,229,226,242,229,119,128, 5,222,238,225,
- 242,237,229,238,233,225,110,128, 5,116,242,235,232, 97, 3,127,
- 37,127, 46,127, 79,232,229,226,242,229,119,128, 5,165,235,229,
- 230,245,236, 97, 2,127, 57,127, 66,232,229,226,242,229,119,128,
- 5,166,236,229,230,244,232,229,226,242,229,119,128, 5,166,236,
- 229,230,244,232,229,226,242,229,119,128, 5,165,104, 2,127, 98,
- 127,104,239,239,107,128, 2,113,250,243,241,245,225,242,101,128,
- 51,146,105, 6,127,128,127,165,128, 46,128, 57,128, 82,128,139,
- 228,100, 2,127,135,127,160,236,229,228,239,244,235,225,244,225,
- 235,225,238,225,232,225,236,230,247,233,228,244,104,128,255,101,
- 239,116,128, 0,183,229,245,109, 5,127,179,127,214,127,229,127,
- 238,128, 33, 97, 2,127,185,127,200,227,233,242,227,236,229,235,
- 239,242,229,225,110,128, 50,114,240,225,242,229,238,235,239,242,
- 229,225,110,128, 50, 18,227,233,242,227,236,229,235,239,242,229,
- 225,110,128, 50,100,235,239,242,229,225,110,128, 49, 65,112, 2,
- 127,244,128, 20, 97, 2,127,250,128, 8,238,243,233,239,243,235,
- 239,242,229,225,110,128, 49,112,242,229,238,235,239,242,229,225,
- 110,128, 50, 4,233,229,245,240,235,239,242,229,225,110,128, 49,
- 110,243,233,239,243,235,239,242,229,225,110,128, 49,111,232,233,
- 242,225,231,225,238, 97,128, 48,127,235,225,244,225,235,225,238,
- 97,129, 48,223,128, 70,232,225,236,230,247,233,228,244,104,128,
- 255,144,238,117, 2,128, 89,128,134,115,132, 34, 18,128,101,128,
- 112,128,121,128,127,226,229,236,239,247,227,237, 98,128, 3, 32,
- 227,233,242,227,236,101,128, 34,150,237,239,100,128, 2,215,240,
- 236,245,115,128, 34, 19,244,101,128, 32, 50,242,105, 2,128,146,
- 128,160,226,225,225,242,245,243,241,245,225,242,101,128, 51, 74,
- 243,241,245,225,242,101,128, 51, 73,108, 2,128,175,128,190,239,
- 238,231,236,229,231,244,245,242,238,229,100,128, 2,112,243,241,
- 245,225,242,101,128, 51,150,109, 3,128,207,128,221,128,232,227,
- 245,226,229,228,243,241,245,225,242,101,128, 51,163,239,238,239,
- 243,240,225,227,101,128,255, 77,243,241,245,225,242,229,228,243,
- 241,245,225,242,101,128, 51,159,111, 5,129, 4,129, 30,129, 55,
- 129, 65,129, 74,104, 2,129, 10,129, 20,233,242,225,231,225,238,
- 97,128, 48,130,237,243,241,245,225,242,101,128, 51,193,235,225,
- 244,225,235,225,238, 97,129, 48,226,129, 43,232,225,236,230,247,
- 233,228,244,104,128,255,147,236,243,241,245,225,242,101,128, 51,
- 214,237,225,244,232,225,105,128, 14, 33,246,229,242,243,243,241,
- 245,225,242,101,129, 51,167,129, 89,228,243,241,245,225,242,101,
- 128, 51,168,240, 97, 2,129,106,129,112,242,229,110,128, 36,168,
- 243,241,245,225,242,101,128, 51,171,115, 2,129,127,129,136,243,
- 241,245,225,242,101,128, 51,179,245,240,229,242,233,239,114,128,
- 246,239,244,245,242,238,229,100,128, 2,111,117,141, 0,181,129,
- 185,129,189,129,199,129,223,129,233,129,255,130, 10,130, 35,130,
- 58,130, 68,130, 98,130,162,130,172, 49,128, 0,181,225,243,241,
- 245,225,242,101,128, 51,130,227,104, 2,129,206,129,216,231,242,
- 229,225,244,229,114,128, 34,107,236,229,243,115,128, 34,106,230,
- 243,241,245,225,242,101,128, 51,140,103, 2,129,239,129,246,242,
- 229,229,107,128, 3,188,243,241,245,225,242,101,128, 51,141,232,
- 233,242,225,231,225,238, 97,128, 48,128,235,225,244,225,235,225,
- 238, 97,129, 48,224,130, 23,232,225,236,230,247,233,228,244,104,
- 128,255,145,108, 2,130, 41,130, 50,243,241,245,225,242,101,128,
- 51,149,244,233,240,236,121,128, 0,215,237,243,241,245,225,242,
- 101,128, 51,155,238,225,104, 2,130, 76,130, 85,232,229,226,242,
- 229,119,128, 5,163,236,229,230,244,232,229,226,242,229,119,128,
- 5,163,115, 2,130,104,130,153,233, 99, 3,130,113,130,130,130,
- 141,225,236,238,239,244,101,129, 38,106,130,124,228,226,108,128,
- 38,107,230,236,225,244,243,233,231,110,128, 38,109,243,232,225,
- 242,240,243,233,231,110,128, 38,111,243,241,245,225,242,101,128,
- 51,178,246,243,241,245,225,242,101,128, 51,182,247,243,241,245,
- 225,242,101,128, 51,188,118, 2,130,188,130,201,237,229,231,225,
- 243,241,245,225,242,101,128, 51,185,243,241,245,225,242,101,128,
- 51,183,119, 2,130,216,130,229,237,229,231,225,243,241,245,225,
- 242,101,128, 51,191,243,241,245,225,242,101,128, 51,189,110,150,
- 0,110,131, 30,131,164,131,188,131,254,132, 23,132, 81,132, 91,
- 132,158,132,201,134,235,134,253,135, 22,135, 53,135, 79,135,144,
- 137,126,137,134,137,159,137,167,138,135,138,145,138,155, 97, 8,
- 131, 48,131, 68,131, 75,131, 82,131,107,131,118,131,143,131,155,
- 98, 2,131, 54,131, 63,229,238,231,225,236,105,128, 9,168,236,
- 97,128, 34, 7,227,245,244,101,128, 1, 68,228,229,246, 97,128,
- 9, 40,231,117, 2,131, 89,131, 98,234,225,242,225,244,105,128,
- 10,168,242,237,245,235,232,105,128, 10, 40,232,233,242,225,231,
- 225,238, 97,128, 48,106,235,225,244,225,235,225,238, 97,129, 48,
- 202,131,131,232,225,236,230,247,233,228,244,104,128,255,133,240,
- 239,243,244,242,239,240,232,101,128, 1, 73,243,241,245,225,242,
- 101,128, 51,129, 98, 2,131,170,131,180,239,240,239,237,239,230,
- 111,128, 49, 11,243,240,225,227,101,128, 0,160, 99, 4,131,198,
- 131,205,131,214,131,241,225,242,239,110,128, 1, 72,229,228,233,
- 236,236, 97,128, 1, 70,233,242, 99, 2,131,222,131,227,236,101,
- 128, 36,221,245,237,230,236,229,248,226,229,236,239,119,128, 30,
- 75,239,237,237,225,225,227,227,229,238,116,128, 1, 70,228,239,
- 116, 2,132, 6,132, 15,225,227,227,229,238,116,128, 30, 69,226,
- 229,236,239,119,128, 30, 71,101, 3,132, 31,132, 42,132, 67,232,
- 233,242,225,231,225,238, 97,128, 48,109,235,225,244,225,235,225,
- 238, 97,129, 48,205,132, 55,232,225,236,230,247,233,228,244,104,
- 128,255,136,247,243,232,229,241,229,236,243,233,231,110,128, 32,
- 170,230,243,241,245,225,242,101,128, 51,139,103, 2,132, 97,132,
- 147, 97, 3,132,105,132,115,132,122,226,229,238,231,225,236,105,
- 128, 9,153,228,229,246, 97,128, 9, 25,231,117, 2,132,129,132,
- 138,234,225,242,225,244,105,128, 10,153,242,237,245,235,232,105,
- 128, 10, 25,239,238,231,245,244,232,225,105,128, 14, 7,104, 2,
- 132,164,132,174,233,242,225,231,225,238, 97,128, 48,147,239,239,
- 107, 2,132,182,132,189,236,229,230,116,128, 2,114,242,229,244,
- 242,239,230,236,229,120,128, 2,115,105, 4,132,211,133,124,133,
- 135,133,193,229,245,110, 7,132,229,133, 8,133, 40,133, 54,133,
- 63,133, 96,133,109, 97, 2,132,235,132,250,227,233,242,227,236,
- 229,235,239,242,229,225,110,128, 50,111,240,225,242,229,238,235,
- 239,242,229,225,110,128, 50, 15,227,105, 2,133, 15,133, 27,229,
- 245,227,235,239,242,229,225,110,128, 49, 53,242,227,236,229,235,
- 239,242,229,225,110,128, 50, 97,232,233,229,245,232,235,239,242,
- 229,225,110,128, 49, 54,235,239,242,229,225,110,128, 49, 52,240,
- 97, 2,133, 70,133, 84,238,243,233,239,243,235,239,242,229,225,
- 110,128, 49,104,242,229,238,235,239,242,229,225,110,128, 50, 1,
- 243,233,239,243,235,239,242,229,225,110,128, 49,103,244,233,235,
- 229,245,244,235,239,242,229,225,110,128, 49,102,232,233,242,225,
- 231,225,238, 97,128, 48,107,107, 2,133,141,133,165,225,244,225,
- 235,225,238, 97,129, 48,203,133,153,232,225,236,230,247,233,228,
- 244,104,128,255,134,232,225,232,233,116, 2,133,175,133,186,236,
- 229,230,244,244,232,225,105,128,248,153,244,232,225,105,128, 14,
- 77,238,101,141, 0, 57,133,224,133,233,133,243,134, 17,134, 24,
- 134, 49,134, 76,134,110,134,122,134,133,134,166,134,174,134,185,
- 225,242,225,226,233, 99,128, 6,105,226,229,238,231,225,236,105,
- 128, 9,239,227,233,242,227,236,101,129, 36,104,133,254,233,238,
+ 247,122,244,242,239,235,101,128, 1,181, 97,158, 0, 97, 36, 26,
+ 38,154, 39, 4, 39, 68, 39,132, 39,196, 40, 4, 40, 68, 40,126,
+ 40,190, 41, 70, 41,217, 42,137, 42,237, 43, 17, 49,192, 49,229,
+ 50, 0, 50,225, 51, 7, 52, 96, 52,168, 53,123, 53,132, 54, 5,
+ 56, 13, 57, 3, 57, 50, 57,201, 57,215, 49,138, 39, 1, 36, 50,
+ 36,114, 36,154, 36,218, 37, 26, 37, 90, 37,154, 37,218, 38, 26,
+ 38, 90, 48,138, 39, 33, 36, 74, 36, 78, 36, 82, 36, 86, 36, 90,
+ 36, 94, 36, 98, 36,102, 36,106, 36,110, 48,128, 39, 94, 49,128,
+ 39, 97, 50,128, 39, 98, 51,128, 39, 99, 52,128, 39,100, 53,128,
+ 39, 16, 54,128, 39,101, 55,128, 39,102, 56,128, 39,103, 57,128,
+ 38, 96, 49,134, 38, 27, 36,130, 36,134, 36,138, 36,142, 36,146,
+ 36,150, 48,128, 38,101, 49,128, 38,102, 50,128, 38, 99, 55,128,
+ 39, 9, 56,128, 39, 8, 57,128, 39, 7, 50,138, 38, 30, 36,178,
+ 36,182, 36,186, 36,190, 36,194, 36,198, 36,202, 36,206, 36,210,
+ 36,214, 48,128, 36, 96, 49,128, 36, 97, 50,128, 36, 98, 51,128,
+ 36, 99, 52,128, 36,100, 53,128, 36,101, 54,128, 36,102, 55,128,
+ 36,103, 56,128, 36,104, 57,128, 36,105, 51,138, 39, 12, 36,242,
+ 36,246, 36,250, 36,254, 37, 2, 37, 6, 37, 10, 37, 14, 37, 18,
+ 37, 22, 48,128, 39,118, 49,128, 39,119, 50,128, 39,120, 51,128,
+ 39,121, 52,128, 39,122, 53,128, 39,123, 54,128, 39,124, 55,128,
+ 39,125, 56,128, 39,126, 57,128, 39,127, 52,138, 39, 13, 37, 50,
+ 37, 54, 37, 58, 37, 62, 37, 66, 37, 70, 37, 74, 37, 78, 37, 82,
+ 37, 86, 48,128, 39,128, 49,128, 39,129, 50,128, 39,130, 51,128,
+ 39,131, 52,128, 39,132, 53,128, 39,133, 54,128, 39,134, 55,128,
+ 39,135, 56,128, 39,136, 57,128, 39,137, 53,138, 39, 14, 37,114,
+ 37,118, 37,122, 37,126, 37,130, 37,134, 37,138, 37,142, 37,146,
+ 37,150, 48,128, 39,138, 49,128, 39,139, 50,128, 39,140, 51,128,
+ 39,141, 52,128, 39,142, 53,128, 39,143, 54,128, 39,144, 55,128,
+ 39,145, 56,128, 39,146, 57,128, 39,147, 54,138, 39, 15, 37,178,
+ 37,182, 37,186, 37,190, 37,194, 37,198, 37,202, 37,206, 37,210,
+ 37,214, 48,128, 39,148, 49,128, 33,146, 50,128, 39,163, 51,128,
+ 33,148, 52,128, 33,149, 53,128, 39,153, 54,128, 39,155, 55,128,
+ 39,156, 56,128, 39,157, 57,128, 39,158, 55,138, 39, 17, 37,242,
+ 37,246, 37,250, 37,254, 38, 2, 38, 6, 38, 10, 38, 14, 38, 18,
+ 38, 22, 48,128, 39,159, 49,128, 39,160, 50,128, 39,161, 51,128,
+ 39,162, 52,128, 39,164, 53,128, 39,165, 54,128, 39,166, 55,128,
+ 39,167, 56,128, 39,168, 57,128, 39,169, 56,138, 39, 18, 38, 50,
+ 38, 54, 38, 58, 38, 62, 38, 66, 38, 70, 38, 74, 38, 78, 38, 82,
+ 38, 86, 48,128, 39,171, 49,128, 39,173, 50,128, 39,175, 51,128,
+ 39,178, 52,128, 39,179, 53,128, 39,181, 54,128, 39,184, 55,128,
+ 39,186, 56,128, 39,187, 57,128, 39,188, 57,138, 39, 19, 38,114,
+ 38,118, 38,122, 38,126, 38,130, 38,134, 38,138, 38,142, 38,146,
+ 38,150, 48,128, 39,189, 49,128, 39,190, 50,128, 39,154, 51,128,
+ 39,170, 52,128, 39,182, 53,128, 39,185, 54,128, 39,152, 55,128,
+ 39,180, 56,128, 39,183, 57,128, 39,172, 50,138, 39, 2, 38,178,
+ 38,224, 38,228, 38,232, 38,236, 38,240, 38,244, 38,248, 38,252,
+ 39, 0, 48,135, 39, 20, 38,196, 38,200, 38,204, 38,208, 38,212,
+ 38,216, 38,220, 48,128, 39,174, 49,128, 39,177, 50,128, 39, 3,
+ 51,128, 39, 80, 52,128, 39, 82, 53,128, 39,110, 54,128, 39,112,
+ 49,128, 39, 21, 50,128, 39, 22, 51,128, 39, 23, 52,128, 39, 24,
+ 53,128, 39, 25, 54,128, 39, 26, 55,128, 39, 27, 56,128, 39, 28,
+ 57,128, 39, 34, 51,138, 39, 4, 39, 28, 39, 32, 39, 36, 39, 40,
+ 39, 44, 39, 48, 39, 52, 39, 56, 39, 60, 39, 64, 48,128, 39, 35,
+ 49,128, 39, 36, 50,128, 39, 37, 51,128, 39, 38, 52,128, 39, 39,
+ 53,128, 38, 5, 54,128, 39, 41, 55,128, 39, 42, 56,128, 39, 43,
+ 57,128, 39, 44, 52,138, 38, 14, 39, 92, 39, 96, 39,100, 39,104,
+ 39,108, 39,112, 39,116, 39,120, 39,124, 39,128, 48,128, 39, 45,
+ 49,128, 39, 46, 50,128, 39, 47, 51,128, 39, 48, 52,128, 39, 49,
+ 53,128, 39, 50, 54,128, 39, 51, 55,128, 39, 52, 56,128, 39, 53,
+ 57,128, 39, 54, 53,138, 39, 6, 39,156, 39,160, 39,164, 39,168,
+ 39,172, 39,176, 39,180, 39,184, 39,188, 39,192, 48,128, 39, 55,
+ 49,128, 39, 56, 50,128, 39, 57, 51,128, 39, 58, 52,128, 39, 59,
+ 53,128, 39, 60, 54,128, 39, 61, 55,128, 39, 62, 56,128, 39, 63,
+ 57,128, 39, 64, 54,138, 39, 29, 39,220, 39,224, 39,228, 39,232,
+ 39,236, 39,240, 39,244, 39,248, 39,252, 40, 0, 48,128, 39, 65,
+ 49,128, 39, 66, 50,128, 39, 67, 51,128, 39, 68, 52,128, 39, 69,
+ 53,128, 39, 70, 54,128, 39, 71, 55,128, 39, 72, 56,128, 39, 73,
+ 57,128, 39, 74, 55,138, 39, 30, 40, 28, 40, 32, 40, 36, 40, 40,
+ 40, 44, 40, 48, 40, 52, 40, 56, 40, 60, 40, 64, 48,128, 39, 75,
+ 49,128, 37,207, 50,128, 39, 77, 51,128, 37,160, 52,128, 39, 79,
+ 53,128, 39, 81, 54,128, 37,178, 55,128, 37,188, 56,128, 37,198,
+ 57,128, 39, 86, 56,137, 39, 31, 40, 90, 40, 94, 40, 98, 40,102,
+ 40,106, 40,110, 40,114, 40,118, 40,122, 49,128, 37,215, 50,128,
+ 39, 88, 51,128, 39, 89, 52,128, 39, 90, 53,128, 39,111, 54,128,
+ 39,113, 55,128, 39,114, 56,128, 39,115, 57,128, 39,104, 57,138,
+ 39, 32, 40,150, 40,154, 40,158, 40,162, 40,166, 40,170, 40,174,
+ 40,178, 40,182, 40,186, 48,128, 39,105, 49,128, 39,108, 50,128,
+ 39,109, 51,128, 39,106, 52,128, 39,107, 53,128, 39,116, 54,128,
+ 39,117, 55,128, 39, 91, 56,128, 39, 92, 57,128, 39, 93, 97, 7,
+ 40,206, 40,216, 40,223, 40,230, 40,255, 41, 15, 41, 26,226,229,
+ 238,231,225,236,105,128, 9,134,227,245,244,101,128, 0,225,228,
+ 229,246, 97,128, 9, 6,231,117, 2, 40,237, 40,246,234,225,242,
+ 225,244,105,128, 10,134,242,237,245,235,232,105,128, 10, 6,237,
+ 225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 62,242,
+ 245,243,241,245,225,242,101,128, 51, 3,246,239,247,229,236,243,
+ 233,231,110, 3, 41, 42, 41, 52, 41, 59,226,229,238,231,225,236,
+ 105,128, 9,190,228,229,246, 97,128, 9, 62,231,245,234,225,242,
+ 225,244,105,128, 10,190, 98, 4, 41, 80, 41,121, 41,130, 41,140,
+ 226,242,229,246,233,225,244,233,239,110, 2, 41, 95, 41,110,237,
+ 225,242,235,225,242,237,229,238,233,225,110,128, 5, 95,243,233,
+ 231,238,228,229,246, 97,128, 9,112,229,238,231,225,236,105,128,
+ 9,133,239,240,239,237,239,230,111,128, 49, 26,242,229,246,101,
+ 134, 1, 3, 41,159, 41,167, 41,178, 41,189, 41,197, 41,209,225,
+ 227,245,244,101,128, 30,175,227,249,242,233,236,236,233, 99,128,
+ 4,209,228,239,244,226,229,236,239,119,128, 30,183,231,242,225,
+ 246,101,128, 30,177,232,239,239,235,225,226,239,246,101,128, 30,
+ 179,244,233,236,228,101,128, 30,181, 99, 4, 41,227, 41,234, 42,
+ 57, 42,127,225,242,239,110,128, 1,206,233,242, 99, 2, 41,242,
+ 41,247,236,101,128, 36,208,245,237,230,236,229,120,133, 0,226,
+ 42, 10, 42, 18, 42, 29, 42, 37, 42, 49,225,227,245,244,101,128,
+ 30,165,228,239,244,226,229,236,239,119,128, 30,173,231,242,225,
+ 246,101,128, 30,167,232,239,239,235,225,226,239,246,101,128, 30,
+ 169,244,233,236,228,101,128, 30,171,245,244,101,133, 0,180, 42,
+ 73, 42, 84, 42,101, 42,108, 42,117,226,229,236,239,247,227,237,
+ 98,128, 3, 23, 99, 2, 42, 90, 42, 95,237, 98,128, 3, 1,239,
+ 237, 98,128, 3, 1,228,229,246, 97,128, 9, 84,236,239,247,237,
+ 239,100,128, 2,207,244,239,238,229,227,237, 98,128, 3, 65,249,
+ 242,233,236,236,233, 99,128, 4, 48,100, 5, 42,149, 42,159, 42,
+ 173, 42,179, 42,213,226,236,231,242,225,246,101,128, 2, 1,228,
+ 225,235,231,245,242,237,245,235,232,105,128, 10,113,229,246, 97,
+ 128, 9, 5,233,229,242,229,243,233,115,130, 0,228, 42,193, 42,
+ 204,227,249,242,233,236,236,233, 99,128, 4,211,237,225,227,242,
+ 239,110,128, 1,223,239,116, 2, 42,220, 42,228,226,229,236,239,
+ 119,128, 30,161,237,225,227,242,239,110,128, 1,225,101,131, 0,
+ 230, 42,247, 42,255, 43, 8,225,227,245,244,101,128, 1,253,235,
+ 239,242,229,225,110,128, 49, 80,237,225,227,242,239,110,128, 1,
+ 227,230,233,105, 6, 43, 33, 43, 53, 45,246, 45,252, 46, 11, 49,
+ 111, 48, 2, 43, 39, 43, 46,176,178,176, 56,128, 32, 21,184,185,
+ 180, 49,128, 32,164,177, 48, 3, 43, 62, 45, 86, 45,221, 48, 9,
+ 43, 82, 43,102, 43,164, 43,226, 44, 32, 44, 94, 44,156, 44,218,
+ 45, 24, 49, 3, 43, 90, 43, 94, 43, 98, 55,128, 4, 16, 56,128,
+ 4, 17, 57,128, 4, 18, 50, 10, 43,124, 43,128, 43,132, 43,136,
+ 43,140, 43,144, 43,148, 43,152, 43,156, 43,160, 48,128, 4, 19,
+ 49,128, 4, 20, 50,128, 4, 21, 51,128, 4, 1, 52,128, 4, 22,
+ 53,128, 4, 23, 54,128, 4, 24, 55,128, 4, 25, 56,128, 4, 26,
+ 57,128, 4, 27, 51, 10, 43,186, 43,190, 43,194, 43,198, 43,202,
+ 43,206, 43,210, 43,214, 43,218, 43,222, 48,128, 4, 28, 49,128,
+ 4, 29, 50,128, 4, 30, 51,128, 4, 31, 52,128, 4, 32, 53,128,
+ 4, 33, 54,128, 4, 34, 55,128, 4, 35, 56,128, 4, 36, 57,128,
+ 4, 37, 52, 10, 43,248, 43,252, 44, 0, 44, 4, 44, 8, 44, 12,
+ 44, 16, 44, 20, 44, 24, 44, 28, 48,128, 4, 38, 49,128, 4, 39,
+ 50,128, 4, 40, 51,128, 4, 41, 52,128, 4, 42, 53,128, 4, 43,
+ 54,128, 4, 44, 55,128, 4, 45, 56,128, 4, 46, 57,128, 4, 47,
+ 53, 10, 44, 54, 44, 58, 44, 62, 44, 66, 44, 70, 44, 74, 44, 78,
+ 44, 82, 44, 86, 44, 90, 48,128, 4,144, 49,128, 4, 2, 50,128,
+ 4, 3, 51,128, 4, 4, 52,128, 4, 5, 53,128, 4, 6, 54,128,
+ 4, 7, 55,128, 4, 8, 56,128, 4, 9, 57,128, 4, 10, 54, 10,
+ 44,116, 44,120, 44,124, 44,128, 44,132, 44,136, 44,140, 44,144,
+ 44,148, 44,152, 48,128, 4, 11, 49,128, 4, 12, 50,128, 4, 14,
+ 51,128,246,196, 52,128,246,197, 53,128, 4, 48, 54,128, 4, 49,
+ 55,128, 4, 50, 56,128, 4, 51, 57,128, 4, 52, 55, 10, 44,178,
+ 44,182, 44,186, 44,190, 44,194, 44,198, 44,202, 44,206, 44,210,
+ 44,214, 48,128, 4, 53, 49,128, 4, 81, 50,128, 4, 54, 51,128,
+ 4, 55, 52,128, 4, 56, 53,128, 4, 57, 54,128, 4, 58, 55,128,
+ 4, 59, 56,128, 4, 60, 57,128, 4, 61, 56, 10, 44,240, 44,244,
+ 44,248, 44,252, 45, 0, 45, 4, 45, 8, 45, 12, 45, 16, 45, 20,
+ 48,128, 4, 62, 49,128, 4, 63, 50,128, 4, 64, 51,128, 4, 65,
+ 52,128, 4, 66, 53,128, 4, 67, 54,128, 4, 68, 55,128, 4, 69,
+ 56,128, 4, 70, 57,128, 4, 71, 57, 10, 45, 46, 45, 50, 45, 54,
+ 45, 58, 45, 62, 45, 66, 45, 70, 45, 74, 45, 78, 45, 82, 48,128,
+ 4, 72, 49,128, 4, 73, 50,128, 4, 74, 51,128, 4, 75, 52,128,
+ 4, 76, 53,128, 4, 77, 54,128, 4, 78, 55,128, 4, 79, 56,128,
+ 4,145, 57,128, 4, 82, 49, 4, 45, 96, 45,158, 45,163, 45,189,
+ 48, 10, 45,118, 45,122, 45,126, 45,130, 45,134, 45,138, 45,142,
+ 45,146, 45,150, 45,154, 48,128, 4, 83, 49,128, 4, 84, 50,128,
+ 4, 85, 51,128, 4, 86, 52,128, 4, 87, 53,128, 4, 88, 54,128,
+ 4, 89, 55,128, 4, 90, 56,128, 4, 91, 57,128, 4, 92,177, 48,
+ 128, 4, 94, 52, 4, 45,173, 45,177, 45,181, 45,185, 53,128, 4,
+ 15, 54,128, 4, 98, 55,128, 4,114, 56,128, 4,116, 57, 5, 45,
+ 201, 45,205, 45,209, 45,213, 45,217, 50,128,246,198, 51,128, 4,
+ 95, 52,128, 4, 99, 53,128, 4,115, 54,128, 4,117, 56, 2, 45,
+ 227, 45,241, 51, 2, 45,233, 45,237, 49,128,246,199, 50,128,246,
+ 200,180, 54,128, 4,217,178,185, 57,128, 32, 14,179, 48, 2, 46,
+ 3, 46, 7, 48,128, 32, 15, 49,128, 32, 13,181, 55, 7, 46, 28,
+ 46, 98, 47,163, 47,240, 48,197, 49, 34, 49,105, 51, 2, 46, 34,
+ 46, 48, 56, 2, 46, 40, 46, 44, 49,128, 6,106, 56,128, 6, 12,
+ 57, 8, 46, 66, 46, 70, 46, 74, 46, 78, 46, 82, 46, 86, 46, 90,
+ 46, 94, 50,128, 6, 96, 51,128, 6, 97, 52,128, 6, 98, 53,128,
+ 6, 99, 54,128, 6,100, 55,128, 6,101, 56,128, 6,102, 57,128,
+ 6,103, 52, 7, 46,114, 46,146, 46,208, 47, 14, 47, 46, 47,102,
+ 47,158, 48, 5, 46,126, 46,130, 46,134, 46,138, 46,142, 48,128,
+ 6,104, 49,128, 6,105, 51,128, 6, 27, 55,128, 6, 31, 57,128,
+ 6, 33, 49, 10, 46,168, 46,172, 46,176, 46,180, 46,184, 46,188,
+ 46,192, 46,196, 46,200, 46,204, 48,128, 6, 34, 49,128, 6, 35,
+ 50,128, 6, 36, 51,128, 6, 37, 52,128, 6, 38, 53,128, 6, 39,
+ 54,128, 6, 40, 55,128, 6, 41, 56,128, 6, 42, 57,128, 6, 43,
+ 50, 10, 46,230, 46,234, 46,238, 46,242, 46,246, 46,250, 46,254,
+ 47, 2, 47, 6, 47, 10, 48,128, 6, 44, 49,128, 6, 45, 50,128,
+ 6, 46, 51,128, 6, 47, 52,128, 6, 48, 53,128, 6, 49, 54,128,
+ 6, 50, 55,128, 6, 51, 56,128, 6, 52, 57,128, 6, 53, 51, 5,
+ 47, 26, 47, 30, 47, 34, 47, 38, 47, 42, 48,128, 6, 54, 49,128,
+ 6, 55, 50,128, 6, 56, 51,128, 6, 57, 52,128, 6, 58, 52, 9,
+ 47, 66, 47, 70, 47, 74, 47, 78, 47, 82, 47, 86, 47, 90, 47, 94,
+ 47, 98, 48,128, 6, 64, 49,128, 6, 65, 50,128, 6, 66, 51,128,
+ 6, 67, 52,128, 6, 68, 53,128, 6, 69, 54,128, 6, 70, 56,128,
+ 6, 72, 57,128, 6, 73, 53, 9, 47,122, 47,126, 47,130, 47,134,
+ 47,138, 47,142, 47,146, 47,150, 47,154, 48,128, 6, 74, 49,128,
+ 6, 75, 50,128, 6, 76, 51,128, 6, 77, 52,128, 6, 78, 53,128,
+ 6, 79, 54,128, 6, 80, 55,128, 6, 81, 56,128, 6, 82,183, 48,
+ 128, 6, 71, 53, 3, 47,171, 47,203, 47,235, 48, 5, 47,183, 47,
+ 187, 47,191, 47,195, 47,199, 53,128, 6,164, 54,128, 6,126, 55,
+ 128, 6,134, 56,128, 6,152, 57,128, 6,175, 49, 5, 47,215, 47,
+ 219, 47,223, 47,227, 47,231, 49,128, 6,121, 50,128, 6,136, 51,
+ 128, 6,145, 52,128, 6,186, 57,128, 6,210,179, 52,128, 6,213,
+ 54, 7, 48, 0, 48, 5, 48, 10, 48, 15, 48, 53, 48,115, 48,177,
+ 179, 54,128, 32,170,180, 53,128, 5,190,181, 56,128, 5,195, 54,
+ 6, 48, 29, 48, 33, 48, 37, 48, 41, 48, 45, 48, 49, 52,128, 5,
+ 208, 53,128, 5,209, 54,128, 5,210, 55,128, 5,211, 56,128, 5,
+ 212, 57,128, 5,213, 55, 10, 48, 75, 48, 79, 48, 83, 48, 87, 48,
+ 91, 48, 95, 48, 99, 48,103, 48,107, 48,111, 48,128, 5,214, 49,
+ 128, 5,215, 50,128, 5,216, 51,128, 5,217, 52,128, 5,218, 53,
+ 128, 5,219, 54,128, 5,220, 55,128, 5,221, 56,128, 5,222, 57,
+ 128, 5,223, 56, 10, 48,137, 48,141, 48,145, 48,149, 48,153, 48,
+ 157, 48,161, 48,165, 48,169, 48,173, 48,128, 5,224, 49,128, 5,
+ 225, 50,128, 5,226, 51,128, 5,227, 52,128, 5,228, 53,128, 5,
+ 229, 54,128, 5,230, 55,128, 5,231, 56,128, 5,232, 57,128, 5,
+ 233, 57, 3, 48,185, 48,189, 48,193, 48,128, 5,234, 52,128,251,
+ 42, 53,128,251, 43, 55, 4, 48,207, 48,221, 48,241, 48,246, 48,
+ 2, 48,213, 48,217, 48,128,251, 75, 53,128,251, 31, 49, 3, 48,
+ 229, 48,233, 48,237, 54,128, 5,240, 55,128, 5,241, 56,128, 5,
+ 242,178, 51,128,251, 53, 57, 7, 49, 6, 49, 10, 49, 14, 49, 18,
+ 49, 22, 49, 26, 49, 30, 51,128, 5,180, 52,128, 5,181, 53,128,
+ 5,182, 54,128, 5,187, 55,128, 5,184, 56,128, 5,183, 57,128,
+ 5,176, 56, 3, 49, 42, 49, 86, 49, 91, 48, 7, 49, 58, 49, 62,
+ 49, 66, 49, 70, 49, 74, 49, 78, 49, 82, 48,128, 5,178, 49,128,
+ 5,177, 50,128, 5,179, 51,128, 5,194, 52,128, 5,193, 54,128,
+ 5,185, 55,128, 5,188,179, 57,128, 5,189, 52, 2, 49, 97, 49,
+ 101, 49,128, 5,191, 50,128, 5,192,185,178, 57,128, 2,188, 54,
+ 3, 49,119, 49,178, 49,185, 49, 4, 49,129, 49,145, 49,151, 49,
+ 172, 50, 2, 49,135, 49,140,180, 56,128, 33, 5,184, 57,128, 33,
+ 19,179,181, 50,128, 33, 22,181, 55, 3, 49,160, 49,164, 49,168,
+ 51,128, 32, 44, 52,128, 32, 45, 53,128, 32, 46,182,182, 52,128,
+ 32, 12,179,177,182, 55,128, 6,109,180,185,179, 55,128, 2,189,
+ 103, 2, 49,198, 49,205,242,225,246,101,128, 0,224,117, 2, 49,
+ 211, 49,220,234,225,242,225,244,105,128, 10,133,242,237,245,235,
+ 232,105,128, 10, 5,104, 2, 49,235, 49,245,233,242,225,231,225,
+ 238, 97,128, 48, 66,239,239,235,225,226,239,246,101,128, 30,163,
+ 105, 7, 50, 16, 50, 41, 50, 48, 50, 60, 50, 85, 50,101, 50,181,
+ 98, 2, 50, 22, 50, 31,229,238,231,225,236,105,128, 9,144,239,
+ 240,239,237,239,230,111,128, 49, 30,228,229,246, 97,128, 9, 16,
+ 229,227,249,242,233,236,236,233, 99,128, 4,213,231,117, 2, 50,
+ 67, 50, 76,234,225,242,225,244,105,128, 10,144,242,237,245,235,
+ 232,105,128, 10, 16,237,225,244,242,225,231,245,242,237,245,235,
+ 232,105,128, 10, 72,110, 5, 50,113, 50,122, 50,136, 50,152, 50,
+ 167,225,242,225,226,233, 99,128, 6, 57,230,233,238,225,236,225,
+ 242,225,226,233, 99,128,254,202,233,238,233,244,233,225,236,225,
+ 242,225,226,233, 99,128,254,203,237,229,228,233,225,236,225,242,
+ 225,226,233, 99,128,254,204,246,229,242,244,229,228,226,242,229,
+ 246,101,128, 2, 3,246,239,247,229,236,243,233,231,110, 3, 50,
+ 197, 50,207, 50,214,226,229,238,231,225,236,105,128, 9,200,228,
+ 229,246, 97,128, 9, 72,231,245,234,225,242,225,244,105,128, 10,
+ 200,107, 2, 50,231, 50,255,225,244,225,235,225,238, 97,129, 48,
+ 162, 50,243,232,225,236,230,247,233,228,244,104,128,255,113,239,
+ 242,229,225,110,128, 49, 79,108, 3, 51, 15, 52, 71, 52, 80,101,
+ 2, 51, 21, 52, 66,102,136, 5,208, 51, 41, 51, 50, 51, 65, 51,
+ 79, 51,168, 51,182, 52, 37, 52, 51,225,242,225,226,233, 99,128,
+ 6, 39,228,225,231,229,243,232,232,229,226,242,229,119,128,251,
+ 48,230,233,238,225,236,225,242,225,226,233, 99,128,254,142,104,
+ 2, 51, 85, 51,160,225,237,250, 97, 2, 51, 94, 51,127,225,226,
+ 239,246,101, 2, 51,104, 51,113,225,242,225,226,233, 99,128, 6,
+ 35,230,233,238,225,236,225,242,225,226,233, 99,128,254,132,226,
+ 229,236,239,119, 2, 51,137, 51,146,225,242,225,226,233, 99,128,
+ 6, 37,230,233,238,225,236,225,242,225,226,233, 99,128,254,136,
+ 229,226,242,229,119,128, 5,208,236,225,237,229,228,232,229,226,
+ 242,229,119,128,251, 79,237, 97, 2, 51,189, 51,225,228,228,225,
+ 225,226,239,246,101, 2, 51,202, 51,211,225,242,225,226,233, 99,
+ 128, 6, 34,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+ 130,235,243,245,242, 97, 4, 51,239, 51,248, 52, 6, 52, 22,225,
+ 242,225,226,233, 99,128, 6, 73,230,233,238,225,236,225,242,225,
+ 226,233, 99,128,254,240,233,238,233,244,233,225,236,225,242,225,
+ 226,233, 99,128,254,243,237,229,228,233,225,236,225,242,225,226,
+ 233, 99,128,254,244,240,225,244,225,232,232,229,226,242,229,119,
+ 128,251, 46,241,225,237,225,244,243,232,229,226,242,229,119,128,
+ 251, 47,240,104,128, 33, 53,236,229,241,245,225,108,128, 34, 76,
+ 240,232, 97,129, 3,177, 52, 88,244,239,238,239,115,128, 3,172,
+ 109, 4, 52,106, 52,114, 52,125, 52,159,225,227,242,239,110,128,
+ 1, 1,239,238,239,243,240,225,227,101,128,255, 65,240,229,242,
+ 243,225,238,100,130, 0, 38, 52,139, 52,151,237,239,238,239,243,
+ 240,225,227,101,128,255, 6,243,237,225,236,108,128,247, 38,243,
+ 241,245,225,242,101,128, 51,194,110, 4, 52,178, 52,189, 53, 55,
+ 53, 65,226,239,240,239,237,239,230,111,128, 49, 34,103, 4, 52,
+ 199, 52,210, 52,224, 53, 47,226,239,240,239,237,239,230,111,128,
+ 49, 36,235,232,225,238,235,232,245,244,232,225,105,128, 14, 90,
+ 236,101,131, 34, 32, 52,235, 53, 32, 53, 39,226,242,225,227,235,
+ 229,116, 2, 52,247, 53, 11,236,229,230,116,129, 48, 8, 53, 0,
+ 246,229,242,244,233,227,225,108,128,254, 63,242,233,231,232,116,
+ 129, 48, 9, 53, 21,246,229,242,244,233,227,225,108,128,254, 64,
+ 236,229,230,116,128, 35, 41,242,233,231,232,116,128, 35, 42,243,
+ 244,242,239,109,128, 33, 43,239,244,229,236,229,233, 97,128, 3,
+ 135,117, 2, 53, 71, 53, 83,228,225,244,244,225,228,229,246, 97,
+ 128, 9, 82,243,246,225,242, 97, 3, 53, 95, 53,105, 53,112,226,
+ 229,238,231,225,236,105,128, 9,130,228,229,246, 97,128, 9, 2,
+ 231,245,234,225,242,225,244,105,128, 10,130,239,231,239,238,229,
+ 107,128, 1, 5,112, 3, 53,140, 53,164, 53,194, 97, 2, 53,146,
+ 53,158,225,244,239,243,241,245,225,242,101,128, 51, 0,242,229,
+ 110,128, 36,156,239,243,244,242,239,240,232,101, 2, 53,177, 53,
+ 188,225,242,237,229,238,233,225,110,128, 5, 90,237,239,100,128,
+ 2,188,112, 2, 53,200, 53,205,236,101,128,248,255,242,111, 2,
+ 53,212, 53,220,225,227,232,229,115,128, 34, 80,120, 2, 53,226,
+ 53,246,229,241,245,225,108,129, 34, 72, 53,236,239,242,233,237,
+ 225,231,101,128, 34, 82,233,237,225,244,229,236,249,229,241,245,
+ 225,108,128, 34, 69,114, 4, 54, 15, 54, 42, 54, 46, 54, 91,225,
+ 229, 97, 2, 54, 23, 54, 33,229,235,239,242,229,225,110,128, 49,
+ 142,235,239,242,229,225,110,128, 49,141, 99,128, 35, 18,105, 2,
+ 54, 52, 54, 66,231,232,244,232,225,236,230,242,233,238,103,128,
+ 30,154,238,103,130, 0,229, 54, 75, 54, 83,225,227,245,244,101,
+ 128, 1,251,226,229,236,239,119,128, 30, 1,242,239,119, 8, 54,
+ 111, 54,118, 54,247, 55, 57, 55,107, 55,162, 55,185, 56, 4,226,
+ 239,244,104,128, 33,148,100, 3, 54,126, 54,165, 54,212,225,243,
+ 104, 4, 54,138, 54,145, 54,152, 54,160,228,239,247,110,128, 33,
+ 227,236,229,230,116,128, 33,224,242,233,231,232,116,128, 33,226,
+ 245,112,128, 33,225,226,108, 5, 54,178, 54,185, 54,192, 54,199,
+ 54,207,226,239,244,104,128, 33,212,228,239,247,110,128, 33,211,
+ 236,229,230,116,128, 33,208,242,233,231,232,116,128, 33,210,245,
+ 112,128, 33,209,239,247,110,131, 33,147, 54,224, 54,231, 54,239,
+ 236,229,230,116,128, 33,153,242,233,231,232,116,128, 33,152,247,
+ 232,233,244,101,128, 33,233,104, 2, 54,253, 55, 48,229,225,100,
+ 4, 55, 9, 55, 19, 55, 29, 55, 40,228,239,247,238,237,239,100,
+ 128, 2,197,236,229,230,244,237,239,100,128, 2,194,242,233,231,
+ 232,244,237,239,100,128, 2,195,245,240,237,239,100,128, 2,196,
+ 239,242,233,250,229,120,128,248,231,236,229,230,116,131, 33,144,
+ 55, 70, 55, 87, 55, 99,228,226,108,129, 33,208, 55, 78,243,244,
+ 242,239,235,101,128, 33,205,239,246,229,242,242,233,231,232,116,
+ 128, 33,198,247,232,233,244,101,128, 33,230,242,233,231,232,116,
+ 132, 33,146, 55,123, 55,135, 55,143, 55,154,228,226,236,243,244,
+ 242,239,235,101,128, 33,207,232,229,225,246,121,128, 39,158,239,
+ 246,229,242,236,229,230,116,128, 33,196,247,232,233,244,101,128,
+ 33,232,244,225, 98, 2, 55,170, 55,177,236,229,230,116,128, 33,
+ 228,242,233,231,232,116,128, 33,229,245,112,132, 33,145, 55,198,
+ 55,226, 55,244, 55,252,100, 2, 55,204, 55,216,110,129, 33,149,
+ 55,210,226,243,101,128, 33,168,239,247,238,226,225,243,101,128,
+ 33,168,236,229,230,116,129, 33,150, 55,235,239,230,228,239,247,
+ 110,128, 33,197,242,233,231,232,116,128, 33,151,247,232,233,244,
+ 101,128, 33,231,246,229,242,244,229,120,128,248,230,115, 5, 56,
+ 25, 56,101, 56,146, 56,229, 56,239, 99, 2, 56, 31, 56, 83,233,
+ 105, 2, 56, 38, 56, 61,227,233,242,227,245,109,129, 0, 94, 56,
+ 49,237,239,238,239,243,240,225,227,101,128,255, 62,244,233,236,
+ 228,101,129, 0,126, 56, 71,237,239,238,239,243,240,225,227,101,
+ 128,255, 94,242,233,240,116,129, 2, 81, 56, 92,244,245,242,238,
+ 229,100,128, 2, 82,237,225,236,108, 2, 56,110, 56,121,232,233,
+ 242,225,231,225,238, 97,128, 48, 65,235,225,244,225,235,225,238,
+ 97,129, 48,161, 56,134,232,225,236,230,247,233,228,244,104,128,
+ 255,103,244,229,242,233,115, 2, 56,156, 56,225,107,131, 0, 42,
+ 56,166, 56,194, 56,217, 97, 2, 56,172, 56,186,236,244,239,238,
+ 229,225,242,225,226,233, 99,128, 6,109,242,225,226,233, 99,128,
+ 6,109,109, 2, 56,200, 56,206,225,244,104,128, 34, 23,239,238,
+ 239,243,240,225,227,101,128,255, 10,243,237,225,236,108,128,254,
+ 97,109,128, 32, 66,245,240,229,242,233,239,114,128,246,233,249,
+ 237,240,244,239,244,233,227,225,236,236,249,229,241,245,225,108,
+ 128, 34, 67,116,132, 0, 64, 57, 15, 57, 22, 57, 34, 57, 42,233,
+ 236,228,101,128, 0,227,237,239,238,239,243,240,225,227,101,128,
+ 255, 32,243,237,225,236,108,128,254,107,245,242,238,229,100,128,
+ 2, 80,117, 6, 57, 64, 57, 89, 57, 96, 57,121, 57,141, 57,157,
+ 98, 2, 57, 70, 57, 79,229,238,231,225,236,105,128, 9,148,239,
+ 240,239,237,239,230,111,128, 49, 32,228,229,246, 97,128, 9, 20,
+ 231,117, 2, 57,103, 57,112,234,225,242,225,244,105,128, 10,148,
+ 242,237,245,235,232,105,128, 10, 20,236,229,238,231,244,232,237,
+ 225,242,235,226,229,238,231,225,236,105,128, 9,215,237,225,244,
+ 242,225,231,245,242,237,245,235,232,105,128, 10, 76,246,239,247,
+ 229,236,243,233,231,110, 3, 57,173, 57,183, 57,190,226,229,238,
+ 231,225,236,105,128, 9,204,228,229,246, 97,128, 9, 76,231,245,
+ 234,225,242,225,244,105,128, 10,204,246,225,231,242,225,232,225,
+ 228,229,246, 97,128, 9, 61,121, 2, 57,221, 57,233,226,225,242,
+ 237,229,238,233,225,110,128, 5, 97,233,110,130, 5,226, 57,242,
+ 58, 1,225,236,244,239,238,229,232,229,226,242,229,119,128,251,
+ 32,232,229,226,242,229,119,128, 5,226, 98,144, 0, 98, 58, 46,
+ 58,181, 58,192, 58,201, 58,226, 60, 11, 60, 73, 60,146, 62, 72,
+ 62, 84, 62,127, 62,135, 62,145, 64, 15, 64, 39, 64, 48, 97, 7,
+ 58, 62, 58, 72, 58, 96, 58,103, 58,128, 58,152, 58,163,226,229,
+ 238,231,225,236,105,128, 9,172,227,235,243,236,225,243,104,129,
+ 0, 92, 58, 84,237,239,238,239,243,240,225,227,101,128,255, 60,
+ 228,229,246, 97,128, 9, 44,231,117, 2, 58,110, 58,119,234,225,
+ 242,225,244,105,128, 10,172,242,237,245,235,232,105,128, 10, 44,
+ 104, 2, 58,134, 58,144,233,242,225,231,225,238, 97,128, 48,112,
+ 244,244,232,225,105,128, 14, 63,235,225,244,225,235,225,238, 97,
+ 128, 48,208,114,129, 0,124, 58,169,237,239,238,239,243,240,225,
+ 227,101,128,255, 92,226,239,240,239,237,239,230,111,128, 49, 5,
+ 227,233,242,227,236,101,128, 36,209,228,239,116, 2, 58,209, 58,
+ 218,225,227,227,229,238,116,128, 30, 3,226,229,236,239,119,128,
+ 30, 5,101, 6, 58,240, 59, 5, 59, 28, 59,170, 59,181, 59,193,
+ 225,237,229,228,243,233,248,244,229,229,238,244,232,238,239,244,
+ 229,115,128, 38,108, 99, 2, 59, 11, 59, 18,225,245,243,101,128,
+ 34, 53,249,242,233,236,236,233, 99,128, 4, 49,104, 5, 59, 40,
+ 59, 49, 59, 63, 59, 93, 59,152,225,242,225,226,233, 99,128, 6,
+ 40,230,233,238,225,236,225,242,225,226,233, 99,128,254,144,105,
+ 2, 59, 69, 59, 84,238,233,244,233,225,236,225,242,225,226,233,
+ 99,128,254,145,242,225,231,225,238, 97,128, 48,121,237,101, 2,
+ 59,100, 59,113,228,233,225,236,225,242,225,226,233, 99,128,254,
+ 146,229,237,105, 2, 59,121, 59,136,238,233,244,233,225,236,225,
+ 242,225,226,233, 99,128,252,159,243,239,236,225,244,229,228,225,
+ 242,225,226,233, 99,128,252, 8,238,239,239,238,230,233,238,225,
+ 236,225,242,225,226,233, 99,128,252,109,235,225,244,225,235,225,
+ 238, 97,128, 48,217,238,225,242,237,229,238,233,225,110,128, 5,
+ 98,116,132, 5,209, 59,205, 59,225, 59,245, 59,254, 97,129, 3,
+ 178, 59,211,243,249,237,226,239,236,231,242,229,229,107,128, 3,
+ 208,228,225,231,229,243,104,129,251, 49, 59,236,232,229,226,242,
+ 229,119,128,251, 49,232,229,226,242,229,119,128, 5,209,242,225,
+ 230,229,232,229,226,242,229,119,128,251, 76,104, 2, 60, 17, 60,
+ 67, 97, 3, 60, 25, 60, 35, 60, 42,226,229,238,231,225,236,105,
+ 128, 9,173,228,229,246, 97,128, 9, 45,231,117, 2, 60, 49, 60,
+ 58,234,225,242,225,244,105,128, 10,173,242,237,245,235,232,105,
+ 128, 10, 45,239,239,107,128, 2, 83,105, 5, 60, 85, 60, 96, 60,
+ 107, 60,121, 60,135,232,233,242,225,231,225,238, 97,128, 48,115,
+ 235,225,244,225,235,225,238, 97,128, 48,211,236,225,226,233,225,
+ 236,227,236,233,227,107,128, 2,152,238,228,233,231,245,242,237,
+ 245,235,232,105,128, 10, 2,242,245,243,241,245,225,242,101,128,
+ 51, 49,108, 3, 60,154, 62, 55, 62, 66, 97, 2, 60,160, 62, 50,
+ 227,107, 6, 60,175, 60,184, 60,221, 61,114, 61,169, 61,221,227,
+ 233,242,227,236,101,128, 37,207,100, 2, 60,190, 60,199,233,225,
+ 237,239,238,100,128, 37,198,239,247,238,240,239,233,238,244,233,
+ 238,231,244,242,233,225,238,231,236,101,128, 37,188,108, 2, 60,
+ 227, 61, 74,101, 2, 60,233, 61, 13,230,244,240,239,233,238,244,
+ 233,238,103, 2, 60,248, 61, 2,240,239,233,238,244,229,114,128,
+ 37,196,244,242,233,225,238,231,236,101,128, 37,192,238,244,233,
+ 227,245,236,225,242,226,242,225,227,235,229,116, 2, 61, 33, 61,
+ 53,236,229,230,116,129, 48, 16, 61, 42,246,229,242,244,233,227,
+ 225,108,128,254, 59,242,233,231,232,116,129, 48, 17, 61, 63,246,
+ 229,242,244,233,227,225,108,128,254, 60,239,247,229,114, 2, 61,
+ 83, 61, 98,236,229,230,244,244,242,233,225,238,231,236,101,128,
+ 37,227,242,233,231,232,244,244,242,233,225,238,231,236,101,128,
+ 37,226,114, 2, 61,120, 61,131,229,227,244,225,238,231,236,101,
+ 128, 37,172,233,231,232,244,240,239,233,238,244,233,238,103, 2,
+ 61,148, 61,158,240,239,233,238,244,229,114,128, 37,186,244,242,
+ 233,225,238,231,236,101,128, 37,182,115, 3, 61,177, 61,207, 61,
+ 215,109, 2, 61,183, 61,195,225,236,236,243,241,245,225,242,101,
+ 128, 37,170,233,236,233,238,231,230,225,227,101,128, 38, 59,241,
+ 245,225,242,101,128, 37,160,244,225,114,128, 38, 5,245,240,112,
+ 2, 61,229, 62, 11,229,114, 2, 61,236, 61,251,236,229,230,244,
+ 244,242,233,225,238,231,236,101,128, 37,228,242,233,231,232,244,
+ 244,242,233,225,238,231,236,101,128, 37,229,239,233,238,244,233,
+ 238,103, 2, 62, 23, 62, 39,243,237,225,236,236,244,242,233,225,
+ 238,231,236,101,128, 37,180,244,242,233,225,238,231,236,101,128,
+ 37,178,238,107,128, 36, 35,233,238,229,226,229,236,239,119,128,
+ 30, 7,239,227,107,128, 37,136,237,239,238,239,243,240,225,227,
+ 101,128,255, 66,111, 3, 62, 92, 62,105, 62,116,226,225,233,237,
+ 225,233,244,232,225,105,128, 14, 26,232,233,242,225,231,225,238,
+ 97,128, 48,124,235,225,244,225,235,225,238, 97,128, 48,220,240,
+ 225,242,229,110,128, 36,157,241,243,241,245,225,242,101,128, 51,
+ 195,114, 4, 62,155, 63,149, 63,222, 64, 5,225, 99, 2, 62,162,
+ 63, 56,101, 3, 62,170, 62,175, 62,243,229,120,128,248,244,236,
+ 229,230,116,133, 0,123, 62,192, 62,197, 62,219, 62,227, 62,232,
+ 226,116,128,248,243,109, 2, 62,203, 62,208,233,100,128,248,242,
+ 239,238,239,243,240,225,227,101,128,255, 91,243,237,225,236,108,
+ 128,254, 91,244,112,128,248,241,246,229,242,244,233,227,225,108,
+ 128,254, 55,242,233,231,232,116,133, 0,125, 63, 5, 63, 10, 63,
+ 32, 63, 40, 63, 45,226,116,128,248,254,109, 2, 63, 16, 63, 21,
+ 233,100,128,248,253,239,238,239,243,240,225,227,101,128,255, 93,
+ 243,237,225,236,108,128,254, 92,244,112,128,248,252,246,229,242,
+ 244,233,227,225,108,128,254, 56,235,229,116, 2, 63, 64, 63,106,
+ 236,229,230,116,132, 0, 91, 63, 79, 63, 84, 63, 89, 63,101,226,
+ 116,128,248,240,229,120,128,248,239,237,239,238,239,243,240,225,
+ 227,101,128,255, 59,244,112,128,248,238,242,233,231,232,116,132,
+ 0, 93, 63,122, 63,127, 63,132, 63,144,226,116,128,248,251,229,
+ 120,128,248,250,237,239,238,239,243,240,225,227,101,128,255, 61,
+ 244,112,128,248,249,229,246,101,131, 2,216, 63,161, 63,172, 63,
+ 178,226,229,236,239,247,227,237, 98,128, 3, 46,227,237, 98,128,
+ 3, 6,233,238,246,229,242,244,229,100, 3, 63,193, 63,204, 63,
+ 210,226,229,236,239,247,227,237, 98,128, 3, 47,227,237, 98,128,
+ 3, 17,228,239,245,226,236,229,227,237, 98,128, 3, 97,233,228,
+ 231,101, 2, 63,231, 63,242,226,229,236,239,247,227,237, 98,128,
+ 3, 42,233,238,246,229,242,244,229,228,226,229,236,239,247,227,
+ 237, 98,128, 3, 58,239,235,229,238,226,225,114,128, 0,166,115,
+ 2, 64, 21, 64, 29,244,242,239,235,101,128, 1,128,245,240,229,
+ 242,233,239,114,128,246,234,244,239,240,226,225,114,128, 1,131,
+ 117, 3, 64, 56, 64, 67, 64, 78,232,233,242,225,231,225,238, 97,
+ 128, 48,118,235,225,244,225,235,225,238, 97,128, 48,214,236,108,
+ 2, 64, 85, 64,115,229,116,130, 32, 34, 64, 94, 64,104,233,238,
+ 246,229,242,243,101,128, 37,216,239,240,229,242,225,244,239,114,
+ 128, 34, 25,243,229,249,101,128, 37,206, 99,143, 0, 99, 64,156,
+ 65,105, 65,116, 65,180, 65,211, 66, 48, 67,215, 68,199, 69, 43,
+ 69, 92, 72, 84, 72, 92, 72,102, 72,114, 72,147, 97, 9, 64,176,
+ 64,187, 64,197, 64,204, 64,211, 64,236, 64,246, 65, 42, 65, 51,
+ 225,242,237,229,238,233,225,110,128, 5,110,226,229,238,231,225,
+ 236,105,128, 9,154,227,245,244,101,128, 1, 7,228,229,246, 97,
+ 128, 9, 26,231,117, 2, 64,218, 64,227,234,225,242,225,244,105,
+ 128, 10,154,242,237,245,235,232,105,128, 10, 26,236,243,241,245,
+ 225,242,101,128, 51,136,238,228,242,225,226,233,238,228,117, 4,
+ 65, 8, 65, 18, 65, 24, 65, 31,226,229,238,231,225,236,105,128,
+ 9,129,227,237, 98,128, 3, 16,228,229,246, 97,128, 9, 1,231,
+ 245,234,225,242,225,244,105,128, 10,129,240,243,236,239,227,107,
+ 128, 33,234,114, 3, 65, 59, 65, 65, 65, 91,229,239,102,128, 33,
+ 5,239,110,130, 2,199, 65, 74, 65, 85,226,229,236,239,247,227,
+ 237, 98,128, 3, 44,227,237, 98,128, 3, 12,242,233,225,231,229,
+ 242,229,244,245,242,110,128, 33,181,226,239,240,239,237,239,230,
+ 111,128, 49, 24, 99, 4, 65,126, 65,133, 65,152, 65,174,225,242,
+ 239,110,128, 1, 13,229,228,233,236,236, 97,129, 0,231, 65,144,
+ 225,227,245,244,101,128, 30, 9,233,242, 99, 2, 65,160, 65,165,
+ 236,101,128, 36,210,245,237,230,236,229,120,128, 1, 9,245,242,
+ 108,128, 2, 85,100, 2, 65,186, 65,202,239,116,129, 1, 11, 65,
+ 193,225,227,227,229,238,116,128, 1, 11,243,241,245,225,242,101,
+ 128, 51,197,101, 2, 65,217, 65,233,228,233,236,236, 97,129, 0,
+ 184, 65,227,227,237, 98,128, 3, 39,238,116,132, 0,162, 65,246,
+ 66, 14, 66, 26, 66, 37,105, 2, 65,252, 66, 4,231,242,225,228,
+ 101,128, 33, 3,238,230,229,242,233,239,114,128,246,223,237,239,
+ 238,239,243,240,225,227,101,128,255,224,239,236,228,243,244,249,
+ 236,101,128,247,162,243,245,240,229,242,233,239,114,128,246,224,
+ 104, 5, 66, 60, 66,123, 66,134, 67, 62, 67,154, 97, 4, 66, 70,
+ 66, 81, 66, 91, 66, 98,225,242,237,229,238,233,225,110,128, 5,
+ 121,226,229,238,231,225,236,105,128, 9,155,228,229,246, 97,128,
+ 9, 27,231,117, 2, 66,105, 66,114,234,225,242,225,244,105,128,
+ 10,155,242,237,245,235,232,105,128, 10, 27,226,239,240,239,237,
+ 239,230,111,128, 49, 20,101, 6, 66,148, 66,168, 66,192, 67, 4,
+ 67, 16, 67, 37,225,226,235,232,225,243,233,225,238,227,249,242,
+ 233,236,236,233, 99,128, 4,189, 99, 2, 66,174, 66,182,235,237,
+ 225,242,107,128, 39, 19,249,242,233,236,236,233, 99,128, 4, 71,
+ 100, 2, 66,198, 66,242,229,243,227,229,238,228,229,114, 2, 66,
+ 211, 66,231,225,226,235,232,225,243,233,225,238,227,249,242,233,
+ 236,236,233, 99,128, 4,191,227,249,242,233,236,236,233, 99,128,
+ 4,183,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
+ 99,128, 4,245,232,225,242,237,229,238,233,225,110,128, 5,115,
+ 235,232,225,235,225,243,243,233,225,238,227,249,242,233,236,236,
+ 233, 99,128, 4,204,246,229,242,244,233,227,225,236,243,244,242,
+ 239,235,229,227,249,242,233,236,236,233, 99,128, 4,185,105,129,
+ 3,199, 67, 68,229,245,227,104, 4, 67, 81, 67,116, 67,131, 67,
+ 140, 97, 2, 67, 87, 67,102,227,233,242,227,236,229,235,239,242,
+ 229,225,110,128, 50,119,240,225,242,229,238,235,239,242,229,225,
+ 110,128, 50, 23,227,233,242,227,236,229,235,239,242,229,225,110,
+ 128, 50,105,235,239,242,229,225,110,128, 49, 74,240,225,242,229,
+ 238,235,239,242,229,225,110,128, 50, 9,111, 2, 67,160, 67,210,
+ 227,104, 3, 67,169, 67,191, 67,201,225,110, 2, 67,176, 67,184,
+ 231,244,232,225,105,128, 14, 10,244,232,225,105,128, 14, 8,233,
+ 238,231,244,232,225,105,128, 14, 9,239,229,244,232,225,105,128,
+ 14, 12,239,107,128, 1,136,105, 2, 67,221, 68, 67,229,245, 99,
+ 5, 67,235, 68, 14, 68, 29, 68, 38, 68, 52, 97, 2, 67,241, 68,
+ 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,118,
+ 240,225,242,229,238,235,239,242,229,225,110,128, 50, 22,227,233,
+ 242,227,236,229,235,239,242,229,225,110,128, 50,104,235,239,242,
+ 229,225,110,128, 49, 72,240,225,242,229,238,235,239,242,229,225,
+ 110,128, 50, 8,245,240,225,242,229,238,235,239,242,229,225,110,
+ 128, 50, 28,242, 99, 2, 68, 74, 68,169,236,101,132, 37,203, 68,
+ 87, 68, 98, 68,103, 68,127,237,245,236,244,233,240,236,121,128,
+ 34,151,239,116,128, 34,153,112, 2, 68,109, 68,115,236,245,115,
+ 128, 34,149,239,243,244,225,236,237,225,242,107,128, 48, 54,247,
+ 233,244,104, 2, 68,136, 68,152,236,229,230,244,232,225,236,230,
+ 226,236,225,227,107,128, 37,208,242,233,231,232,244,232,225,236,
+ 230,226,236,225,227,107,128, 37,209,245,237,230,236,229,120,130,
+ 2,198, 68,182, 68,193,226,229,236,239,247,227,237, 98,128, 3,
+ 45,227,237, 98,128, 3, 2,108, 3, 68,207, 68,213, 69, 11,229,
+ 225,114,128, 35, 39,233,227,107, 4, 68,225, 68,236, 68,245, 68,
+ 255,225,236,246,229,239,236,225,114,128, 1,194,228,229,238,244,
+ 225,108,128, 1,192,236,225,244,229,242,225,108,128, 1,193,242,
+ 229,244,242,239,230,236,229,120,128, 1,195,245, 98,129, 38, 99,
+ 69, 18,243,245,233,116, 2, 69, 27, 69, 35,226,236,225,227,107,
+ 128, 38, 99,247,232,233,244,101,128, 38,103,109, 3, 69, 51, 69,
+ 65, 69, 76,227,245,226,229,228,243,241,245,225,242,101,128, 51,
+ 164,239,238,239,243,240,225,227,101,128,255, 67,243,241,245,225,
+ 242,229,228,243,241,245,225,242,101,128, 51,160,111, 8, 69,110,
+ 69,121, 69,208, 70,150, 71,179, 71,210, 72, 61, 72, 70,225,242,
+ 237,229,238,233,225,110,128, 5,129,236,239,110,131, 0, 58, 69,
+ 133, 69,158, 69,177,237,239,110, 2, 69,141, 69,149,229,244,225,
+ 242,121,128, 32,161,239,243,240,225,227,101,128,255, 26,115, 2,
+ 69,164, 69,170,233,231,110,128, 32,161,237,225,236,108,128,254,
+ 85,244,242,233,225,238,231,245,236,225,114, 2, 69,192, 69,202,
+ 232,225,236,230,237,239,100,128, 2,209,237,239,100,128, 2,208,
+ 109, 2, 69,214, 70,143,237, 97,134, 0, 44, 69,231, 70, 39, 70,
+ 50, 70, 62, 70, 92, 70,115, 97, 3, 69,239, 70, 9, 70, 17,226,
+ 239,246,101, 2, 69,248, 69,254,227,237, 98,128, 3, 19,242,233,
+ 231,232,244,227,237, 98,128, 3, 21,227,227,229,238,116,128,246,
+ 195,114, 2, 70, 23, 70, 30,225,226,233, 99,128, 6, 12,237,229,
+ 238,233,225,110,128, 5, 93,233,238,230,229,242,233,239,114,128,
+ 246,225,237,239,238,239,243,240,225,227,101,128,255, 12,242,229,
+ 246,229,242,243,229,100, 2, 70, 75, 70, 86,225,226,239,246,229,
+ 227,237, 98,128, 3, 20,237,239,100,128, 2,189,115, 2, 70, 98,
+ 70,105,237,225,236,108,128,254, 80,245,240,229,242,233,239,114,
+ 128,246,226,244,245,242,238,229,100, 2, 70,126, 70,137,225,226,
+ 239,246,229,227,237, 98,128, 3, 18,237,239,100,128, 2,187,240,
+ 225,243,115,128, 38, 60,110, 2, 70,156, 70,165,231,242,245,229,
+ 238,116,128, 34, 69,116, 2, 70,171, 70,185,239,245,242,233,238,
+ 244,229,231,242,225,108,128, 34, 46,242,239,108,142, 35, 3, 70,
+ 219, 70,225, 70,240, 70,255, 71, 43, 71, 88, 71,102, 71,107, 71,
+ 112, 71,117, 71,123, 71,128, 71,169, 71,174,193,195, 75,128, 0,
+ 6, 66, 2, 70,231, 70,236,197, 76,128, 0, 7, 83,128, 0, 8,
+ 67, 2, 70,246, 70,251,193, 78,128, 0, 24, 82,128, 0, 13, 68,
+ 3, 71, 7, 71, 33, 71, 38, 67, 4, 71, 17, 71, 21, 71, 25, 71,
+ 29, 49,128, 0, 17, 50,128, 0, 18, 51,128, 0, 19, 52,128, 0,
+ 20,197, 76,128, 0,127,204, 69,128, 0, 16, 69, 5, 71, 55, 71,
+ 59, 71, 64, 71, 69, 71, 74, 77,128, 0, 25,206, 81,128, 0, 5,
+ 207, 84,128, 0, 4,211, 67,128, 0, 27, 84, 2, 71, 80, 71, 84,
+ 66,128, 0, 23, 88,128, 0, 3, 70, 2, 71, 94, 71, 98, 70,128,
+ 0, 12, 83,128, 0, 28,199, 83,128, 0, 29,200, 84,128, 0, 9,
+ 204, 70,128, 0, 10,206,193, 75,128, 0, 21,210, 83,128, 0, 30,
+ 83, 5, 71,140, 71,144, 71,154, 71,159, 71,164, 73,128, 0, 15,
+ 79,129, 0, 14, 71,150, 84,128, 0, 2,212, 88,128, 0, 1,213,
+ 66,128, 0, 26,217, 78,128, 0, 22,213, 83,128, 0, 31,214, 84,
+ 128, 0, 11,240,249,242,233,231,232,116,129, 0,169, 71,191,115,
+ 2, 71,197, 71,203,225,238,115,128,248,233,229,242,233,102,128,
+ 246,217,114, 2, 71,216, 72, 44,238,229,242,226,242,225,227,235,
+ 229,116, 2, 71,231, 72, 9,236,229,230,116,130, 48, 12, 71,242,
+ 71,254,232,225,236,230,247,233,228,244,104,128,255, 98,246,229,
+ 242,244,233,227,225,108,128,254, 65,242,233,231,232,116,130, 48,
+ 13, 72, 21, 72, 33,232,225,236,230,247,233,228,244,104,128,255,
+ 99,246,229,242,244,233,227,225,108,128,254, 66,240,239,242,225,
+ 244,233,239,238,243,241,245,225,242,101,128, 51,127,243,241,245,
+ 225,242,101,128, 51,199,246,229,242,235,231,243,241,245,225,242,
+ 101,128, 51,198,240,225,242,229,110,128, 36,158,242,245,250,229,
+ 233,242,111,128, 32,162,243,244,242,229,244,227,232,229,100,128,
+ 2,151,245,114, 2, 72,121, 72,139,236,121, 2, 72,128, 72,134,
+ 225,238,100,128, 34,207,239,114,128, 34,206,242,229,238,227,121,
+ 128, 0,164,249,114, 4, 72,158, 72,166, 72,173, 72,181,194,242,
+ 229,246,101,128,246,209,198,236,229,120,128,246,210,226,242,229,
+ 246,101,128,246,212,230,236,229,120,128,246,213,100,146, 0,100,
+ 72,228, 74,110, 75,134, 75,194, 76,114, 77, 68, 77,130, 78, 59,
+ 78, 72, 78, 81, 78,107, 78,132, 78,141, 79,208, 79,216, 79,227,
+ 79,247, 80, 19, 97, 11, 72,252, 73, 7, 73, 17, 73, 89, 73,152,
+ 73,163, 73,174, 73,243, 74, 49, 74, 55, 74, 85,225,242,237,229,
+ 238,233,225,110,128, 5,100,226,229,238,231,225,236,105,128, 9,
+ 166,100, 5, 73, 29, 73, 38, 73, 44, 73, 58, 73, 74,225,242,225,
+ 226,233, 99,128, 6, 54,229,246, 97,128, 9, 38,230,233,238,225,
+ 236,225,242,225,226,233, 99,128,254,190,233,238,233,244,233,225,
+ 236,225,242,225,226,233, 99,128,254,191,237,229,228,233,225,236,
+ 225,242,225,226,233, 99,128,254,192,103, 3, 73, 97, 73,114, 73,
+ 128,229,243,104,129, 5,188, 73,105,232,229,226,242,229,119,128,
+ 5,188,231,229,114,129, 32, 32, 73,122,228,226,108,128, 32, 33,
+ 117, 2, 73,134, 73,143,234,225,242,225,244,105,128, 10,166,242,
+ 237,245,235,232,105,128, 10, 38,232,233,242,225,231,225,238, 97,
+ 128, 48, 96,235,225,244,225,235,225,238, 97,128, 48,192,108, 3,
+ 73,182, 73,191, 73,229,225,242,225,226,233, 99,128, 6, 47,229,
+ 116,130, 5,211, 73,200, 73,220,228,225,231,229,243,104,129,251,
+ 51, 73,211,232,229,226,242,229,119,128,251, 51,232,229,226,242,
+ 229,119,128, 5,211,230,233,238,225,236,225,242,225,226,233, 99,
+ 128,254,170,237,237, 97, 3, 73,253, 74, 6, 74, 18,225,242,225,
+ 226,233, 99,128, 6, 79,236,239,247,225,242,225,226,233, 99,128,
+ 6, 79,244,225,238, 97, 2, 74, 27, 74, 41,236,244,239,238,229,
+ 225,242,225,226,233, 99,128, 6, 76,242,225,226,233, 99,128, 6,
+ 76,238,228, 97,128, 9,100,242,231, 97, 2, 74, 63, 74, 72,232,
+ 229,226,242,229,119,128, 5,167,236,229,230,244,232,229,226,242,
+ 229,119,128, 5,167,243,233,225,240,238,229,245,237,225,244,225,
+ 227,249,242,233,236,236,233,227,227,237, 98,128, 4,133, 98, 3,
+ 74,118, 75,115, 75,125,108, 9, 74,138, 74,146, 75, 3, 75, 11,
+ 75, 27, 75, 38, 75, 56, 75, 70, 75, 81,199,242,225,246,101,128,
+ 246,211, 97, 2, 74,152, 74,209,238,231,236,229,226,242,225,227,
+ 235,229,116, 2, 74,168, 74,188,236,229,230,116,129, 48, 10, 74,
+ 177,246,229,242,244,233,227,225,108,128,254, 61,242,233,231,232,
+ 116,129, 48, 11, 74,198,246,229,242,244,233,227,225,108,128,254,
+ 62,114, 2, 74,215, 74,236,227,232,233,238,246,229,242,244,229,
+ 228,226,229,236,239,247,227,237, 98,128, 3, 43,242,239,119, 2,
+ 74,244, 74,251,236,229,230,116,128, 33,212,242,233,231,232,116,
+ 128, 33,210,228,225,238,228, 97,128, 9,101,231,242,225,246,101,
+ 129,246,214, 75, 21,227,237, 98,128, 3, 15,233,238,244,229,231,
+ 242,225,108,128, 34, 44,236,239,247,236,233,238,101,129, 32, 23,
+ 75, 50,227,237, 98,128, 3, 51,239,246,229,242,236,233,238,229,
+ 227,237, 98,128, 3, 63,240,242,233,237,229,237,239,100,128, 2,
+ 186,246,229,242,244,233,227,225,108, 2, 75, 94, 75,100,226,225,
+ 114,128, 32, 22,236,233,238,229,225,226,239,246,229,227,237, 98,
+ 128, 3, 14,239,240,239,237,239,230,111,128, 49, 9,243,241,245,
+ 225,242,101,128, 51,200, 99, 4, 75,144, 75,151, 75,160, 75,187,
+ 225,242,239,110,128, 1, 15,229,228,233,236,236, 97,128, 30, 17,
+ 233,242, 99, 2, 75,168, 75,173,236,101,128, 36,211,245,237,230,
+ 236,229,248,226,229,236,239,119,128, 30, 19,242,239,225,116,128,
+ 1, 17,100, 4, 75,204, 76, 29, 76, 39, 76, 90, 97, 4, 75,214,
+ 75,224, 75,231, 76, 0,226,229,238,231,225,236,105,128, 9,161,
+ 228,229,246, 97,128, 9, 33,231,117, 2, 75,238, 75,247,234,225,
+ 242,225,244,105,128, 10,161,242,237,245,235,232,105,128, 10, 33,
+ 108, 2, 76, 6, 76, 15,225,242,225,226,233, 99,128, 6,136,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,251,137,228,232,225,
+ 228,229,246, 97,128, 9, 92,232, 97, 3, 76, 48, 76, 58, 76, 65,
+ 226,229,238,231,225,236,105,128, 9,162,228,229,246, 97,128, 9,
+ 34,231,117, 2, 76, 72, 76, 81,234,225,242,225,244,105,128, 10,
+ 162,242,237,245,235,232,105,128, 10, 34,239,116, 2, 76, 97, 76,
+ 106,225,227,227,229,238,116,128, 30, 11,226,229,236,239,119,128,
+ 30, 13,101, 8, 76,132, 76,185, 76,192, 76,217, 76,227, 76,238,
+ 77, 27, 77, 63, 99, 2, 76,138, 76,175,233,237,225,236,243,229,
+ 240,225,242,225,244,239,114, 2, 76,156, 76,165,225,242,225,226,
+ 233, 99,128, 6,107,240,229,242,243,233,225,110,128, 6,107,249,
+ 242,233,236,236,233, 99,128, 4, 52,231,242,229,101,128, 0,176,
+ 232,105, 2, 76,199, 76,208,232,229,226,242,229,119,128, 5,173,
+ 242,225,231,225,238, 97,128, 48,103,233,227,239,240,244,233, 99,
+ 128, 3,239,235,225,244,225,235,225,238, 97,128, 48,199,108, 2,
+ 76,244, 77, 11,229,244,101, 2, 76,252, 77, 3,236,229,230,116,
+ 128, 35, 43,242,233,231,232,116,128, 35, 38,244, 97,129, 3,180,
+ 77, 18,244,245,242,238,229,100,128, 1,141,238,239,237,233,238,
+ 225,244,239,242,237,233,238,245,243,239,238,229,238,245,237,229,
+ 242,225,244,239,242,226,229,238,231,225,236,105,128, 9,248,250,
+ 104,128, 2,164,104, 2, 77, 74, 77,124, 97, 3, 77, 82, 77, 92,
+ 77, 99,226,229,238,231,225,236,105,128, 9,167,228,229,246, 97,
+ 128, 9, 39,231,117, 2, 77,106, 77,115,234,225,242,225,244,105,
+ 128, 10,167,242,237,245,235,232,105,128, 10, 39,239,239,107,128,
+ 2, 87,105, 6, 77,144, 77,193, 77,253, 78, 8, 78, 19, 78, 29,
+ 97, 2, 77,150, 77,172,236,249,244,233,235,225,244,239,238,239,
+ 115,129, 3,133, 77,166,227,237, 98,128, 3, 68,237,239,238,100,
+ 129, 38,102, 77,181,243,245,233,244,247,232,233,244,101,128, 38,
+ 98,229,242,229,243,233,115,133, 0,168, 77,212, 77,220, 77,231,
+ 77,237, 77,245,225,227,245,244,101,128,246,215,226,229,236,239,
+ 247,227,237, 98,128, 3, 36,227,237, 98,128, 3, 8,231,242,225,
+ 246,101,128,246,216,244,239,238,239,115,128, 3,133,232,233,242,
+ 225,231,225,238, 97,128, 48, 98,235,225,244,225,235,225,238, 97,
+ 128, 48,194,244,244,239,237,225,242,107,128, 48, 3,246,105, 2,
+ 78, 36, 78, 47,228,101,129, 0,247, 78, 43,115,128, 34, 35,243,
+ 233,239,238,243,236,225,243,104,128, 34, 21,234,229,227,249,242,
+ 233,236,236,233, 99,128, 4, 82,235,243,232,225,228,101,128, 37,
+ 147,108, 2, 78, 87, 78, 98,233,238,229,226,229,236,239,119,128,
+ 30, 15,243,241,245,225,242,101,128, 51,151,109, 2, 78,113, 78,
+ 121,225,227,242,239,110,128, 1, 17,239,238,239,243,240,225,227,
+ 101,128,255, 68,238,226,236,239,227,107,128, 37,132,111, 10, 78,
+ 163, 78,175, 78,185, 78,196, 78,207, 79, 23, 79, 28, 79, 39, 79,
+ 154, 79,180,227,232,225,228,225,244,232,225,105,128, 14, 14,228,
+ 229,235,244,232,225,105,128, 14, 20,232,233,242,225,231,225,238,
+ 97,128, 48,105,235,225,244,225,235,225,238, 97,128, 48,201,236,
+ 236,225,114,132, 0, 36, 78,222, 78,233, 78,245, 79, 0,233,238,
+ 230,229,242,233,239,114,128,246,227,237,239,238,239,243,240,225,
+ 227,101,128,255, 4,239,236,228,243,244,249,236,101,128,247, 36,
+ 115, 2, 79, 6, 79, 13,237,225,236,108,128,254,105,245,240,229,
+ 242,233,239,114,128,246,228,238,103,128, 32,171,242,245,243,241,
+ 245,225,242,101,128, 51, 38,116, 6, 79, 53, 79, 70, 79, 92, 79,
+ 103, 79,135, 79,142,225,227,227,229,238,116,129, 2,217, 79, 64,
+ 227,237, 98,128, 3, 7,226,229,236,239,247, 99, 2, 79, 81, 79,
+ 86,237, 98,128, 3, 35,239,237, 98,128, 3, 35,235,225,244,225,
+ 235,225,238, 97,128, 48,251,236,229,243,115, 2, 79,112, 79,116,
+ 105,128, 1, 49,106,129,246,190, 79,122,243,244,242,239,235,229,
+ 232,239,239,107,128, 2,132,237,225,244,104,128, 34,197,244,229,
+ 228,227,233,242,227,236,101,128, 37,204,245,226,236,229,249,239,
+ 228,240,225,244,225,104,129,251, 31, 79,171,232,229,226,242,229,
+ 119,128,251, 31,247,238,244,225,227,107, 2, 79,191, 79,202,226,
+ 229,236,239,247,227,237, 98,128, 3, 30,237,239,100,128, 2,213,
+ 240,225,242,229,110,128, 36,159,243,245,240,229,242,233,239,114,
+ 128,246,235,116, 2, 79,233, 79,239,225,233,108,128, 2, 86,239,
+ 240,226,225,114,128, 1,140,117, 2, 79,253, 80, 8,232,233,242,
+ 225,231,225,238, 97,128, 48,101,235,225,244,225,235,225,238, 97,
+ 128, 48,197,122,132, 1,243, 80, 31, 80, 40, 80, 59, 80, 96,225,
+ 236,244,239,238,101,128, 2,163, 99, 2, 80, 46, 80, 53,225,242,
+ 239,110,128, 1,198,245,242,108,128, 2,165,101, 2, 80, 65, 80,
+ 85,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236,
+ 233, 99,128, 4,225,227,249,242,233,236,236,233, 99,128, 4, 85,
+ 232,229,227,249,242,233,236,236,233, 99,128, 4, 95,101,151, 0,
+ 101, 80,159, 80,178, 80,212, 81,186, 81,248, 82, 25, 82, 37, 82,
+ 60, 82,113, 83,225, 84, 27, 84,129, 84,245, 85,124, 85,199, 85,
+ 230, 86, 36, 86, 89, 87, 24, 87,157, 87,177, 87,221, 88, 56, 97,
+ 2, 80,165, 80,172,227,245,244,101,128, 0,233,242,244,104,128,
+ 38, 65, 98, 3, 80,186, 80,195, 80,205,229,238,231,225,236,105,
+ 128, 9,143,239,240,239,237,239,230,111,128, 49, 28,242,229,246,
+ 101,128, 1, 21, 99, 5, 80,224, 81, 41, 81, 55, 81, 87, 81,176,
+ 97, 2, 80,230, 81, 35,238,228,242, 97, 3, 80,241, 80,248, 81,
+ 3,228,229,246, 97,128, 9, 13,231,245,234,225,242,225,244,105,
+ 128, 10,141,246,239,247,229,236,243,233,231,110, 2, 81, 17, 81,
+ 24,228,229,246, 97,128, 9, 69,231,245,234,225,242,225,244,105,
+ 128, 10,197,242,239,110,128, 1, 27,229,228,233,236,236,225,226,
+ 242,229,246,101,128, 30, 29,104, 2, 81, 61, 81, 72,225,242,237,
+ 229,238,233,225,110,128, 5,101,249,233,247,238,225,242,237,229,
+ 238,233,225,110,128, 5,135,233,242, 99, 2, 81, 95, 81,100,236,
+ 101,128, 36,212,245,237,230,236,229,120,134, 0,234, 81,121, 81,
+ 129, 81,137, 81,148, 81,156, 81,168,225,227,245,244,101,128, 30,
+ 191,226,229,236,239,119,128, 30, 25,228,239,244,226,229,236,239,
+ 119,128, 30,199,231,242,225,246,101,128, 30,193,232,239,239,235,
+ 225,226,239,246,101,128, 30,195,244,233,236,228,101,128, 30,197,
+ 249,242,233,236,236,233, 99,128, 4, 84,100, 4, 81,196, 81,206,
+ 81,212, 81,222,226,236,231,242,225,246,101,128, 2, 5,229,246,
+ 97,128, 9, 15,233,229,242,229,243,233,115,128, 0,235,239,116,
+ 130, 1, 23, 81,231, 81,240,225,227,227,229,238,116,128, 1, 23,
+ 226,229,236,239,119,128, 30,185,101, 2, 81,254, 82, 9,231,245,
+ 242,237,245,235,232,105,128, 10, 15,237,225,244,242,225,231,245,
+ 242,237,245,235,232,105,128, 10, 71,230,227,249,242,233,236,236,
+ 233, 99,128, 4, 68,103, 2, 82, 43, 82, 50,242,225,246,101,128,
+ 0,232,245,234,225,242,225,244,105,128, 10,143,104, 4, 82, 70,
+ 82, 81, 82, 92, 82,102,225,242,237,229,238,233,225,110,128, 5,
+ 103,226,239,240,239,237,239,230,111,128, 49, 29,233,242,225,231,
+ 225,238, 97,128, 48, 72,239,239,235,225,226,239,246,101,128, 30,
+ 187,105, 4, 82,123, 82,134, 83,192, 83,207,226,239,240,239,237,
+ 239,230,111,128, 49, 31,231,232,116,142, 0, 56, 82,168, 82,177,
+ 82,187, 82,217, 82,224, 83, 6, 83, 31, 83, 76, 83,110, 83,122,
+ 83,133, 83,166, 83,174, 83,185,225,242,225,226,233, 99,128, 6,
+ 104,226,229,238,231,225,236,105,128, 9,238,227,233,242,227,236,
+ 101,129, 36,103, 82,198,233,238,246,229,242,243,229,243,225,238,
+ 243,243,229,242,233,102,128, 39,145,228,229,246, 97,128, 9,110,
+ 229,229,110, 2, 82,232, 82,241,227,233,242,227,236,101,128, 36,
+ 113,112, 2, 82,247, 82,254,225,242,229,110,128, 36,133,229,242,
+ 233,239,100,128, 36,153,231,117, 2, 83, 13, 83, 22,234,225,242,
+ 225,244,105,128, 10,238,242,237,245,235,232,105,128, 10,110,104,
+ 2, 83, 37, 83, 63, 97, 2, 83, 43, 83, 54,227,235,225,242,225,
+ 226,233, 99,128, 6,104,238,231,250,232,239,117,128, 48, 40,238,
+ 239,244,229,226,229,225,237,229,100,128, 38,107,105, 2, 83, 82,
+ 83,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+ 110,128, 50, 39,238,230,229,242,233,239,114,128, 32,136,237,239,
+ 238,239,243,240,225,227,101,128,255, 24,239,236,228,243,244,249,
+ 236,101,128,247, 56,112, 2, 83,139, 83,146,225,242,229,110,128,
+ 36,123,229,114, 2, 83,153, 83,159,233,239,100,128, 36,143,243,
+ 233,225,110,128, 6,248,242,239,237,225,110,128, 33,119,243,245,
+ 240,229,242,233,239,114,128, 32,120,244,232,225,105,128, 14, 88,
+ 238,246,229,242,244,229,228,226,242,229,246,101,128, 2, 7,239,
+ 244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, 4,
+ 101,107, 2, 83,231, 83,255,225,244,225,235,225,238, 97,129, 48,
+ 168, 83,243,232,225,236,230,247,233,228,244,104,128,255,116,111,
+ 2, 84, 5, 84, 20,238,235,225,242,231,245,242,237,245,235,232,
+ 105,128, 10,116,242,229,225,110,128, 49, 84,108, 3, 84, 35, 84,
+ 46, 84,107,227,249,242,233,236,236,233, 99,128, 4, 59,101, 2,
+ 84, 52, 84, 59,237,229,238,116,128, 34, 8,246,229,110, 3, 84,
+ 69, 84, 78, 84, 99,227,233,242,227,236,101,128, 36,106,112, 2,
+ 84, 84, 84, 91,225,242,229,110,128, 36,126,229,242,233,239,100,
+ 128, 36,146,242,239,237,225,110,128, 33,122,236,233,240,243,233,
+ 115,129, 32, 38, 84,118,246,229,242,244,233,227,225,108,128, 34,
+ 238,109, 5, 84,141, 84,169, 84,180, 84,200, 84,211,225,227,242,
+ 239,110,130, 1, 19, 84,153, 84,161,225,227,245,244,101,128, 30,
+ 23,231,242,225,246,101,128, 30, 21,227,249,242,233,236,236,233,
+ 99,128, 4, 60,228,225,243,104,129, 32, 20, 84,189,246,229,242,
+ 244,233,227,225,108,128,254, 49,239,238,239,243,240,225,227,101,
+ 128,255, 69,112, 2, 84,217, 84,237,232,225,243,233,243,237,225,
+ 242,235,225,242,237,229,238,233,225,110,128, 5, 91,244,249,243,
+ 229,116,128, 34, 5,110, 6, 85, 3, 85, 14, 85, 25, 85, 69, 85,
+ 101, 85,116,226,239,240,239,237,239,230,111,128, 49, 35,227,249,
+ 242,233,236,236,233, 99,128, 4, 61,100, 2, 85, 31, 85, 50,225,
+ 243,104,129, 32, 19, 85, 39,246,229,242,244,233,227,225,108,128,
+ 254, 50,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
+ 233, 99,128, 4,163,103,130, 1, 75, 85, 77, 85, 88,226,239,240,
+ 239,237,239,230,111,128, 49, 37,232,229,227,249,242,233,236,236,
+ 233, 99,128, 4,165,232,239,239,235,227,249,242,233,236,236,233,
+ 99,128, 4,200,243,240,225,227,101,128, 32, 2,111, 3, 85,132,
+ 85,140, 85,149,231,239,238,229,107,128, 1, 25,235,239,242,229,
+ 225,110,128, 49, 83,240,229,110,130, 2, 91, 85,159, 85,168,227,
+ 236,239,243,229,100,128, 2,154,242,229,246,229,242,243,229,100,
+ 130, 2, 92, 85,183, 85,192,227,236,239,243,229,100,128, 2, 94,
+ 232,239,239,107,128, 2, 93,112, 2, 85,205, 85,212,225,242,229,
+ 110,128, 36,160,243,233,236,239,110,129, 3,181, 85,222,244,239,
+ 238,239,115,128, 3,173,241,117, 2, 85,237, 86, 25,225,108,130,
+ 0, 61, 85,246, 86, 2,237,239,238,239,243,240,225,227,101,128,
+ 255, 29,115, 2, 86, 8, 86, 15,237,225,236,108,128,254,102,245,
+ 240,229,242,233,239,114,128, 32,124,233,246,225,236,229,238,227,
+ 101,128, 34, 97,114, 3, 86, 44, 86, 55, 86, 66,226,239,240,239,
+ 237,239,230,111,128, 49, 38,227,249,242,233,236,236,233, 99,128,
+ 4, 64,229,246,229,242,243,229,100,129, 2, 88, 86, 78,227,249,
+ 242,233,236,236,233, 99,128, 4, 77,115, 6, 86,103, 86,114, 86,
+ 134, 86,215, 87, 4, 87, 14,227,249,242,233,236,236,233, 99,128,
+ 4, 65,228,229,243,227,229,238,228,229,242,227,249,242,233,236,
+ 236,233, 99,128, 4,171,104,132, 2,131, 86,146, 86,153, 86,184,
+ 86,199,227,245,242,108,128, 2,134,239,242,116, 2, 86,161, 86,
+ 168,228,229,246, 97,128, 9, 14,246,239,247,229,236,243,233,231,
+ 238,228,229,246, 97,128, 9, 70,242,229,246,229,242,243,229,228,
+ 236,239,239,112,128, 1,170,243,241,245,225,244,242,229,246,229,
+ 242,243,229,100,128, 2,133,237,225,236,108, 2, 86,224, 86,235,
+ 232,233,242,225,231,225,238, 97,128, 48, 71,235,225,244,225,235,
+ 225,238, 97,129, 48,167, 86,248,232,225,236,230,247,233,228,244,
+ 104,128,255,106,244,233,237,225,244,229,100,128, 33, 46,245,240,
+ 229,242,233,239,114,128,246,236,116, 5, 87, 36, 87, 62, 87, 66,
+ 87, 83, 87,149, 97,130, 3,183, 87, 44, 87, 54,242,237,229,238,
+ 233,225,110,128, 5,104,244,239,238,239,115,128, 3,174,104,128,
+ 0,240,233,236,228,101,129, 30,189, 87, 75,226,229,236,239,119,
+ 128, 30, 27,238,225,232,244, 97, 3, 87, 95, 87,127, 87,136,230,
+ 239,245,235,104, 2, 87,105, 87,114,232,229,226,242,229,119,128,
+ 5,145,236,229,230,244,232,229,226,242,229,119,128, 5,145,232,
+ 229,226,242,229,119,128, 5,145,236,229,230,244,232,229,226,242,
+ 229,119,128, 5,145,245,242,238,229,100,128, 1,221,117, 2, 87,
+ 163, 87,172,235,239,242,229,225,110,128, 49, 97,242,111,128, 32,
+ 172,246,239,247,229,236,243,233,231,110, 3, 87,193, 87,203, 87,
+ 210,226,229,238,231,225,236,105,128, 9,199,228,229,246, 97,128,
+ 9, 71,231,245,234,225,242,225,244,105,128, 10,199,120, 2, 87,
+ 227, 88, 44,227,236,225,109,132, 0, 33, 87,242, 87,253, 88, 24,
+ 88, 36,225,242,237,229,238,233,225,110,128, 5, 92,100, 2, 88,
+ 3, 88, 8,226,108,128, 32, 60,239,247,110,129, 0,161, 88, 16,
+ 243,237,225,236,108,128,247,161,237,239,238,239,243,240,225,227,
+ 101,128,255, 1,243,237,225,236,108,128,247, 33,233,243,244,229,
+ 238,244,233,225,108,128, 34, 3,250,104,131, 2,146, 88, 67, 88,
+ 86, 88, 97, 99, 2, 88, 73, 88, 80,225,242,239,110,128, 1,239,
+ 245,242,108,128, 2,147,242,229,246,229,242,243,229,100,128, 1,
+ 185,244,225,233,108,128, 1,186,102,140, 0,102, 88,132, 88,214,
+ 88,225, 88,234, 88,246, 89, 93, 89,109, 91,117, 91,130, 91,156,
+ 93, 33, 93, 41, 97, 4, 88,142, 88,149, 88,160, 88,171,228,229,
+ 246, 97,128, 9, 94,231,245,242,237,245,235,232,105,128, 10, 94,
+ 232,242,229,238,232,229,233,116,128, 33, 9,244,232, 97, 3, 88,
+ 181, 88,190, 88,202,225,242,225,226,233, 99,128, 6, 78,236,239,
+ 247,225,242,225,226,233, 99,128, 6, 78,244,225,238,225,242,225,
+ 226,233, 99,128, 6, 75,226,239,240,239,237,239,230,111,128, 49,
+ 8,227,233,242,227,236,101,128, 36,213,228,239,244,225,227,227,
+ 229,238,116,128, 30, 31,101, 3, 88,254, 89, 76, 89, 86,104, 4,
+ 89, 8, 89, 31, 89, 45, 89, 61,225,114, 2, 89, 15, 89, 22,225,
+ 226,233, 99,128, 6, 65,237,229,238,233,225,110,128, 5,134,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,254,210,233,238,233,
+ 244,233,225,236,225,242,225,226,233, 99,128,254,211,237,229,228,
+ 233,225,236,225,242,225,226,233, 99,128,254,212,233,227,239,240,
+ 244,233, 99,128, 3,229,237,225,236,101,128, 38, 64,102,130,251,
+ 0, 89,101, 89,105,105,128,251, 3,108,128,251, 4,105,136,251,
+ 1, 89,129, 89,169, 89,180, 89,202, 90, 68, 90, 85, 90, 93, 90,
+ 106,230,244,229,229,110, 2, 89,139, 89,148,227,233,242,227,236,
+ 101,128, 36,110,112, 2, 89,154, 89,161,225,242,229,110,128, 36,
+ 130,229,242,233,239,100,128, 36,150,231,245,242,229,228,225,243,
+ 104,128, 32, 18,236,236,229,100, 2, 89,189, 89,195,226,239,120,
+ 128, 37,160,242,229,227,116,128, 37,172,238,225,108, 5, 89,216,
+ 89,255, 90, 16, 90, 33, 90, 49,235,225,102,130, 5,218, 89,226,
+ 89,246,228,225,231,229,243,104,129,251, 58, 89,237,232,229,226,
+ 242,229,119,128,251, 58,232,229,226,242,229,119,128, 5,218,237,
+ 229,109,129, 5,221, 90, 7,232,229,226,242,229,119,128, 5,221,
+ 238,245,110,129, 5,223, 90, 24,232,229,226,242,229,119,128, 5,
+ 223,240,101,129, 5,227, 90, 40,232,229,226,242,229,119,128, 5,
+ 227,244,243,225,228,105,129, 5,229, 90, 59,232,229,226,242,229,
+ 119,128, 5,229,242,243,244,244,239,238,229,227,232,233,238,229,
+ 243,101,128, 2,201,243,232,229,249,101,128, 37,201,244,225,227,
+ 249,242,233,236,236,233, 99,128, 4,115,246,101,142, 0, 53, 90,
+ 139, 90,148, 90,158, 90,188, 90,195, 90,205, 90,230, 91, 1, 91,
+ 35, 91, 47, 91, 58, 91, 91, 91, 99, 91,110,225,242,225,226,233,
+ 99,128, 6,101,226,229,238,231,225,236,105,128, 9,235,227,233,
+ 242,227,236,101,129, 36,100, 90,169,233,238,246,229,242,243,229,
+ 243,225,238,243,243,229,242,233,102,128, 39,142,228,229,246, 97,
+ 128, 9,107,229,233,231,232,244,232,115,128, 33, 93,231,117, 2,
+ 90,212, 90,221,234,225,242,225,244,105,128, 10,235,242,237,245,
+ 235,232,105,128, 10,107,232, 97, 2, 90,237, 90,248,227,235,225,
+ 242,225,226,233, 99,128, 6,101,238,231,250,232,239,117,128, 48,
+ 37,105, 2, 91, 7, 91, 25,228,229,239,231,242,225,240,232,233,
+ 227,240,225,242,229,110,128, 50, 36,238,230,229,242,233,239,114,
+ 128, 32,133,237,239,238,239,243,240,225,227,101,128,255, 21,239,
+ 236,228,243,244,249,236,101,128,247, 53,112, 2, 91, 64, 91, 71,
+ 225,242,229,110,128, 36,120,229,114, 2, 91, 78, 91, 84,233,239,
+ 100,128, 36,140,243,233,225,110,128, 6,245,242,239,237,225,110,
+ 128, 33,116,243,245,240,229,242,233,239,114,128, 32,117,244,232,
+ 225,105,128, 14, 85,108,129,251, 2, 91,123,239,242,233,110,128,
+ 1,146,109, 2, 91,136, 91,147,239,238,239,243,240,225,227,101,
+ 128,255, 70,243,241,245,225,242,101,128, 51,153,111, 4, 91,166,
+ 91,188, 91,200, 91,207,230, 97, 2, 91,173, 91,181,238,244,232,
+ 225,105,128, 14, 31,244,232,225,105,128, 14, 29,238,231,237,225,
+ 238,244,232,225,105,128, 14, 79,242,225,236,108,128, 34, 0,245,
+ 114,142, 0, 52, 91,240, 91,249, 92, 3, 92, 33, 92, 40, 92, 65,
+ 92, 92, 92,126, 92,138, 92,157, 92,168, 92,201, 92,209, 92,220,
+ 225,242,225,226,233, 99,128, 6,100,226,229,238,231,225,236,105,
+ 128, 9,234,227,233,242,227,236,101,129, 36, 99, 92, 14,233,238,
246,229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,
- 146,228,229,246, 97,128, 9,111,231,117, 2,134, 31,134, 40,234,
- 225,242,225,244,105,128, 10,239,242,237,245,235,232,105,128, 10,
- 111,232, 97, 2,134, 56,134, 67,227,235,225,242,225,226,233, 99,
- 128, 6,105,238,231,250,232,239,117,128, 48, 41,105, 2,134, 82,
- 134,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
- 110,128, 50, 40,238,230,229,242,233,239,114,128, 32,137,237,239,
- 238,239,243,240,225,227,101,128,255, 25,239,236,228,243,244,249,
- 236,101,128,247, 57,112, 2,134,139,134,146,225,242,229,110,128,
- 36,124,229,114, 2,134,153,134,159,233,239,100,128, 36,144,243,
- 233,225,110,128, 6,249,242,239,237,225,110,128, 33,120,243,245,
- 240,229,242,233,239,114,128, 32,121,116, 2,134,191,134,229,229,
- 229,110, 2,134,199,134,208,227,233,242,227,236,101,128, 36,114,
- 112, 2,134,214,134,221,225,242,229,110,128, 36,134,229,242,233,
- 239,100,128, 36,154,232,225,105,128, 14, 89,106,129, 1,204,134,
- 241,229,227,249,242,233,236,236,233, 99,128, 4, 90,235,225,244,
- 225,235,225,238, 97,129, 48,243,135, 10,232,225,236,230,247,233,
- 228,244,104,128,255,157,108, 2,135, 28,135, 42,229,231,242,233,
- 231,232,244,236,239,238,103,128, 1,158,233,238,229,226,229,236,
- 239,119,128, 30, 73,109, 2,135, 59,135, 70,239,238,239,243,240,
- 225,227,101,128,255, 78,243,241,245,225,242,101,128, 51,154,110,
- 2,135, 85,135,135, 97, 3,135, 93,135,103,135,110,226,229,238,
- 231,225,236,105,128, 9,163,228,229,246, 97,128, 9, 35,231,117,
- 2,135,117,135,126,234,225,242,225,244,105,128, 10,163,242,237,
- 245,235,232,105,128, 10, 35,238,225,228,229,246, 97,128, 9, 41,
- 111, 6,135,158,135,169,135,194,135,235,136,187,137,114,232,233,
- 242,225,231,225,238, 97,128, 48,110,235,225,244,225,235,225,238,
- 97,129, 48,206,135,182,232,225,236,230,247,233,228,244,104,128,
- 255,137,110, 3,135,202,135,218,135,227,226,242,229,225,235,233,
- 238,231,243,240,225,227,101,128, 0,160,229,238,244,232,225,105,
- 128, 14, 19,245,244,232,225,105,128, 14, 25,239,110, 7,135,252,
- 136, 5,136, 19,136, 53,136, 69,136,110,136,169,225,242,225,226,
- 233, 99,128, 6, 70,230,233,238,225,236,225,242,225,226,233, 99,
- 128,254,230,231,232,245,238,238, 97, 2,136, 30,136, 39,225,242,
- 225,226,233, 99,128, 6,186,230,233,238,225,236,225,242,225,226,
- 233, 99,128,251,159,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,254,231,234,229,229,237,105, 2,136, 79,136, 94,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,252,210,243,239,
- 236,225,244,229,228,225,242,225,226,233, 99,128,252, 75,237,101,
- 2,136,117,136,130,228,233,225,236,225,242,225,226,233, 99,128,
- 254,232,229,237,105, 2,136,138,136,153,238,233,244,233,225,236,
- 225,242,225,226,233, 99,128,252,213,243,239,236,225,244,229,228,
- 225,242,225,226,233, 99,128,252, 78,238,239,239,238,230,233,238,
- 225,236,225,242,225,226,233, 99,128,252,141,116, 7,136,203,136,
- 214,136,243,137, 22,137, 34,137, 54,137, 80,227,239,238,244,225,
- 233,238,115,128, 34, 12,101, 2,136,220,136,236,236,229,237,229,
- 238,116,129, 34, 9,136,231,239,102,128, 34, 9,241,245,225,108,
- 128, 34, 96,231,242,229,225,244,229,114,129, 34,111,136,255,238,
- 239,114, 2,137, 7,137, 15,229,241,245,225,108,128, 34,113,236,
- 229,243,115,128, 34,121,233,228,229,238,244,233,227,225,108,128,
- 34, 98,236,229,243,115,129, 34,110,137, 43,238,239,242,229,241,
- 245,225,108,128, 34,112,112, 2,137, 60,137, 70,225,242,225,236,
- 236,229,108,128, 34, 38,242,229,227,229,228,229,115,128, 34,128,
- 243,117, 3,137, 89,137, 96,137,105,226,243,229,116,128, 34,132,
- 227,227,229,229,228,115,128, 34,129,240,229,242,243,229,116,128,
- 34,133,247,225,242,237,229,238,233,225,110,128, 5,118,240,225,
- 242,229,110,128, 36,169,115, 2,137,140,137,149,243,241,245,225,
- 242,101,128, 51,177,245,240,229,242,233,239,114,128, 32,127,244,
- 233,236,228,101,128, 0,241,117,132, 3,189,137,179,137,190,138,
- 15,138, 98,232,233,242,225,231,225,238, 97,128, 48,108,107, 2,
- 137,196,137,220,225,244,225,235,225,238, 97,129, 48,204,137,208,
- 232,225,236,230,247,233,228,244,104,128,255,135,244, 97, 3,137,
- 229,137,239,137,246,226,229,238,231,225,236,105,128, 9,188,228,
- 229,246, 97,128, 9, 60,231,117, 2,137,253,138, 6,234,225,242,
- 225,244,105,128, 10,188,242,237,245,235,232,105,128, 10, 60,109,
- 2,138, 21,138, 55,226,229,242,243,233,231,110,130, 0, 35,138,
- 35,138, 47,237,239,238,239,243,240,225,227,101,128,255, 3,243,
- 237,225,236,108,128,254, 95,229,114, 2,138, 62,138, 94,225,236,
- 243,233,231,110, 2,138, 73,138, 81,231,242,229,229,107,128, 3,
- 116,236,239,247,229,242,231,242,229,229,107,128, 3,117,111,128,
- 33, 22,110,130, 5,224,138,106,138,126,228,225,231,229,243,104,
- 129,251, 64,138,117,232,229,226,242,229,119,128,251, 64,232,229,
- 226,242,229,119,128, 5,224,246,243,241,245,225,242,101,128, 51,
- 181,247,243,241,245,225,242,101,128, 51,187,249, 97, 3,138,164,
- 138,174,138,181,226,229,238,231,225,236,105,128, 9,158,228,229,
- 246, 97,128, 9, 30,231,117, 2,138,188,138,197,234,225,242,225,
- 244,105,128, 10,158,242,237,245,235,232,105,128, 10, 30,111,147,
- 0,111,138,248,139, 14,139, 92,140, 6,140, 78,140, 93,140,133,
- 141, 0,141, 21,141, 59,141, 70,141,248,143, 82,143,146,143,179,
- 143,225,144, 98,144,145,144,157, 97, 2,138,254,139, 5,227,245,
- 244,101,128, 0,243,238,231,244,232,225,105,128, 14, 45, 98, 4,
- 139, 24,139, 66,139, 75,139, 85,225,242,242,229,100,130, 2,117,
- 139, 36,139, 47,227,249,242,233,236,236,233, 99,128, 4,233,228,
+ 141,228,229,246, 97,128, 9,106,231,117, 2, 92, 47, 92, 56,234,
+ 225,242,225,244,105,128, 10,234,242,237,245,235,232,105,128, 10,
+ 106,232, 97, 2, 92, 72, 92, 83,227,235,225,242,225,226,233, 99,
+ 128, 6,100,238,231,250,232,239,117,128, 48, 36,105, 2, 92, 98,
+ 92,116,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+ 110,128, 50, 35,238,230,229,242,233,239,114,128, 32,132,237,239,
+ 238,239,243,240,225,227,101,128,255, 20,238,245,237,229,242,225,
+ 244,239,242,226,229,238,231,225,236,105,128, 9,247,239,236,228,
+ 243,244,249,236,101,128,247, 52,112, 2, 92,174, 92,181,225,242,
+ 229,110,128, 36,119,229,114, 2, 92,188, 92,194,233,239,100,128,
+ 36,139,243,233,225,110,128, 6,244,242,239,237,225,110,128, 33,
+ 115,243,245,240,229,242,233,239,114,128, 32,116,116, 2, 92,226,
+ 93, 8,229,229,110, 2, 92,234, 92,243,227,233,242,227,236,101,
+ 128, 36,109,112, 2, 92,249, 93, 0,225,242,229,110,128, 36,129,
+ 229,242,233,239,100,128, 36,149,104, 2, 93, 14, 93, 19,225,105,
+ 128, 14, 84,244,239,238,229,227,232,233,238,229,243,101,128, 2,
+ 203,240,225,242,229,110,128, 36,161,242, 97, 2, 93, 48, 93, 56,
+ 227,244,233,239,110,128, 32, 68,238, 99,128, 32,163,103,144, 0,
+ 103, 93, 97, 94, 43, 94, 66, 94,127, 94,144, 95, 65, 96, 58, 96,
+ 143, 96,156, 97, 14, 97, 39, 97, 67, 97, 89, 98, 34, 98, 56, 98,
+ 158, 97, 9, 93,117, 93,127, 93,134, 93,141, 93,205, 93,230, 93,
+ 241, 93,252, 94, 30,226,229,238,231,225,236,105,128, 9,151,227,
+ 245,244,101,128, 1,245,228,229,246, 97,128, 9, 23,102, 4, 93,
+ 151, 93,160, 93,174, 93,190,225,242,225,226,233, 99,128, 6,175,
+ 230,233,238,225,236,225,242,225,226,233, 99,128,251,147,233,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,251,148,237,229,
+ 228,233,225,236,225,242,225,226,233, 99,128,251,149,231,117, 2,
+ 93,212, 93,221,234,225,242,225,244,105,128, 10,151,242,237,245,
+ 235,232,105,128, 10, 23,232,233,242,225,231,225,238, 97,128, 48,
+ 76,235,225,244,225,235,225,238, 97,128, 48,172,237,237, 97,130,
+ 3,179, 94, 6, 94, 19,236,225,244,233,238,243,237,225,236,108,
+ 128, 2, 99,243,245,240,229,242,233,239,114,128, 2,224,238,231,
+ 233,225,227,239,240,244,233, 99,128, 3,235, 98, 2, 94, 49, 94,
+ 59,239,240,239,237,239,230,111,128, 49, 13,242,229,246,101,128,
+ 1, 31, 99, 4, 94, 76, 94, 83, 94, 92, 94,114,225,242,239,110,
+ 128, 1,231,229,228,233,236,236, 97,128, 1, 35,233,242, 99, 2,
+ 94,100, 94,105,236,101,128, 36,214,245,237,230,236,229,120,128,
+ 1, 29,239,237,237,225,225,227,227,229,238,116,128, 1, 35,228,
+ 239,116,129, 1, 33, 94,135,225,227,227,229,238,116,128, 1, 33,
+ 101, 6, 94,158, 94,169, 94,180, 94,191, 94,210, 95, 56,227,249,
+ 242,233,236,236,233, 99,128, 4, 51,232,233,242,225,231,225,238,
+ 97,128, 48, 82,235,225,244,225,235,225,238, 97,128, 48,178,239,
+ 237,229,244,242,233,227,225,236,236,249,229,241,245,225,108,128,
+ 34, 81,114, 3, 94,218, 95, 11, 95, 21,229,243,104, 3, 94,228,
+ 94,243, 94,252,225,227,227,229,238,244,232,229,226,242,229,119,
+ 128, 5,156,232,229,226,242,229,119,128, 5,243,237,245,241,228,
+ 225,237,232,229,226,242,229,119,128, 5,157,237,225,238,228,226,
+ 236,115,128, 0,223,243,232,225,249,233,109, 2, 95, 32, 95, 47,
+ 225,227,227,229,238,244,232,229,226,242,229,119,128, 5,158,232,
+ 229,226,242,229,119,128, 5,244,244,225,237,225,242,107,128, 48,
+ 19,104, 5, 95, 77, 95,210, 96, 17, 96, 42, 96, 48, 97, 4, 95,
+ 87, 95, 97, 95,120, 95,145,226,229,238,231,225,236,105,128, 9,
+ 152,100, 2, 95,103, 95,114,225,242,237,229,238,233,225,110,128,
+ 5,114,229,246, 97,128, 9, 24,231,117, 2, 95,127, 95,136,234,
+ 225,242,225,244,105,128, 10,152,242,237,245,235,232,105,128, 10,
+ 24,233,110, 4, 95,156, 95,165, 95,179, 95,195,225,242,225,226,
+ 233, 99,128, 6, 58,230,233,238,225,236,225,242,225,226,233, 99,
+ 128,254,206,233,238,233,244,233,225,236,225,242,225,226,233, 99,
+ 128,254,207,237,229,228,233,225,236,225,242,225,226,233, 99,128,
+ 254,208,101, 3, 95,218, 95,239, 96, 0,237,233,228,228,236,229,
+ 232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,149,243,
+ 244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,147,
+ 245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128, 4,
+ 145,232, 97, 2, 96, 24, 96, 31,228,229,246, 97,128, 9, 90,231,
+ 245,242,237,245,235,232,105,128, 10, 90,239,239,107,128, 2, 96,
+ 250,243,241,245,225,242,101,128, 51,147,105, 3, 96, 66, 96, 77,
+ 96, 88,232,233,242,225,231,225,238, 97,128, 48, 78,235,225,244,
+ 225,235,225,238, 97,128, 48,174,109, 2, 96, 94, 96,105,225,242,
+ 237,229,238,233,225,110,128, 5, 99,229,108,130, 5,210, 96,114,
+ 96,134,228,225,231,229,243,104,129,251, 50, 96,125,232,229,226,
+ 242,229,119,128,251, 50,232,229,226,242,229,119,128, 5,210,234,
+ 229,227,249,242,233,236,236,233, 99,128, 4, 83,236,239,244,244,
+ 225,108, 2, 96,167, 96,184,233,238,246,229,242,244,229,228,243,
+ 244,242,239,235,101,128, 1,190,243,244,239,112,132, 2,148, 96,
+ 199, 96,210, 96,216, 96,248,233,238,246,229,242,244,229,100,128,
+ 2,150,237,239,100,128, 2,192,242,229,246,229,242,243,229,100,
+ 130, 2,149, 96,231, 96,237,237,239,100,128, 2,193,243,245,240,
+ 229,242,233,239,114,128, 2,228,243,244,242,239,235,101,129, 2,
+ 161, 97, 3,242,229,246,229,242,243,229,100,128, 2,162,109, 2,
+ 97, 20, 97, 28,225,227,242,239,110,128, 30, 33,239,238,239,243,
+ 240,225,227,101,128,255, 71,111, 2, 97, 45, 97, 56,232,233,242,
+ 225,231,225,238, 97,128, 48, 84,235,225,244,225,235,225,238, 97,
+ 128, 48,180,240, 97, 2, 97, 74, 97, 80,242,229,110,128, 36,162,
+ 243,241,245,225,242,101,128, 51,172,114, 2, 97, 95, 97,192, 97,
+ 2, 97,101, 97,109,228,233,229,238,116,128, 34, 7,246,101,134,
+ 0, 96, 97,126, 97,137, 97,154, 97,161, 97,170, 97,182,226,229,
+ 236,239,247,227,237, 98,128, 3, 22, 99, 2, 97,143, 97,148,237,
+ 98,128, 3, 0,239,237, 98,128, 3, 0,228,229,246, 97,128, 9,
+ 83,236,239,247,237,239,100,128, 2,206,237,239,238,239,243,240,
+ 225,227,101,128,255, 64,244,239,238,229,227,237, 98,128, 3, 64,
+ 229,225,244,229,114,132, 0, 62, 97,208, 97,227, 97,239, 98, 26,
+ 229,241,245,225,108,129, 34,101, 97,218,239,242,236,229,243,115,
+ 128, 34,219,237,239,238,239,243,240,225,227,101,128,255, 30,111,
+ 2, 97,245, 98, 15,114, 2, 97,251, 98, 8,229,241,245,233,246,
+ 225,236,229,238,116,128, 34,115,236,229,243,115,128, 34,119,246,
+ 229,242,229,241,245,225,108,128, 34,103,243,237,225,236,108,128,
+ 254,101,115, 2, 98, 40, 98, 48,227,242,233,240,116,128, 2, 97,
+ 244,242,239,235,101,128, 1,229,117, 4, 98, 66, 98, 77, 98,134,
+ 98,145,232,233,242,225,231,225,238, 97,128, 48, 80,233,108, 2,
+ 98, 84, 98,109,236,229,237,239,116, 2, 98, 94, 98,101,236,229,
+ 230,116,128, 0,171,242,233,231,232,116,128, 0,187,243,233,238,
+ 231,108, 2, 98,119, 98,126,236,229,230,116,128, 32, 57,242,233,
+ 231,232,116,128, 32, 58,235,225,244,225,235,225,238, 97,128, 48,
+ 176,242,225,237,245,243,241,245,225,242,101,128, 51, 24,249,243,
+ 241,245,225,242,101,128, 51,201,104,144, 0,104, 98,204,101, 90,
+ 101,125,101,162,101,202,103, 90,103,110,104, 75,104, 87,104, 99,
+ 105,167,105,175,105,186,105,195,106, 19,106, 23, 97, 13, 98,232,
+ 99, 15, 99, 25, 99, 55, 99, 80, 99,158, 99,170, 99,195, 99,210,
+ 99,239, 99,252,100, 54,100, 63, 97, 2, 98,238, 99, 1,226,235,
+ 232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128, 4,
+ 169,236,244,239,238,229,225,242,225,226,233, 99,128, 6,193,226,
+ 229,238,231,225,236,105,128, 9,185,228,101, 2, 99, 32, 99, 50,
+ 243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128,
+ 4,179,246, 97,128, 9, 57,231,117, 2, 99, 62, 99, 71,234,225,
+ 242,225,244,105,128, 10,185,242,237,245,235,232,105,128, 10, 57,
+ 104, 4, 99, 90, 99, 99, 99,113, 99,143,225,242,225,226,233, 99,
+ 128, 6, 45,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+ 162,105, 2, 99,119, 99,134,238,233,244,233,225,236,225,242,225,
+ 226,233, 99,128,254,163,242,225,231,225,238, 97,128, 48,111,237,
+ 229,228,233,225,236,225,242,225,226,233, 99,128,254,164,233,244,
+ 245,243,241,245,225,242,101,128, 51, 42,235,225,244,225,235,225,
+ 238, 97,129, 48,207, 99,183,232,225,236,230,247,233,228,244,104,
+ 128,255,138,236,225,238,244,231,245,242,237,245,235,232,105,128,
+ 10, 77,237,250, 97, 2, 99,218, 99,227,225,242,225,226,233, 99,
+ 128, 6, 33,236,239,247,225,242,225,226,233, 99,128, 6, 33,238,
+ 231,245,236,230,233,236,236,229,114,128, 49,100,114, 2,100, 2,
+ 100, 18,228,243,233,231,238,227,249,242,233,236,236,233, 99,128,
+ 4, 74,240,239,239,110, 2,100, 27,100, 40,236,229,230,244,226,
+ 225,242,226,245,112,128, 33,188,242,233,231,232,244,226,225,242,
+ 226,245,112,128, 33,192,243,241,245,225,242,101,128, 51,202,244,
+ 225,102, 3,100, 73,100,165,101, 0,240,225,244,225,104,134, 5,
+ 178,100, 93,100, 98,100,112,100,121,100,136,100,152,177, 54,128,
+ 5,178, 50, 2,100,104,100,108, 51,128, 5,178,102,128, 5,178,
+ 232,229,226,242,229,119,128, 5,178,238,225,242,242,239,247,232,
+ 229,226,242,229,119,128, 5,178,241,245,225,242,244,229,242,232,
+ 229,226,242,229,119,128, 5,178,247,233,228,229,232,229,226,242,
+ 229,119,128, 5,178,241,225,237,225,244,115,135, 5,179,100,188,
+ 100,193,100,198,100,203,100,212,100,227,100,243,177, 98,128, 5,
+ 179,178, 56,128, 5,179,179, 52,128, 5,179,232,229,226,242,229,
+ 119,128, 5,179,238,225,242,242,239,247,232,229,226,242,229,119,
+ 128, 5,179,241,245,225,242,244,229,242,232,229,226,242,229,119,
+ 128, 5,179,247,233,228,229,232,229,226,242,229,119,128, 5,179,
+ 243,229,231,239,108,135, 5,177,101, 22,101, 27,101, 32,101, 37,
+ 101, 46,101, 61,101, 77,177, 55,128, 5,177,178, 52,128, 5,177,
+ 179, 48,128, 5,177,232,229,226,242,229,119,128, 5,177,238,225,
+ 242,242,239,247,232,229,226,242,229,119,128, 5,177,241,245,225,
+ 242,244,229,242,232,229,226,242,229,119,128, 5,177,247,233,228,
+ 229,232,229,226,242,229,119,128, 5,177, 98, 3,101, 98,101,103,
+ 101,113,225,114,128, 1, 39,239,240,239,237,239,230,111,128, 49,
+ 15,242,229,246,229,226,229,236,239,119,128, 30, 43, 99, 2,101,
+ 131,101,140,229,228,233,236,236, 97,128, 30, 41,233,242, 99, 2,
+ 101,148,101,153,236,101,128, 36,215,245,237,230,236,229,120,128,
+ 1, 37,100, 2,101,168,101,178,233,229,242,229,243,233,115,128,
+ 30, 39,239,116, 2,101,185,101,194,225,227,227,229,238,116,128,
+ 30, 35,226,229,236,239,119,128, 30, 37,101,136, 5,212,101,222,
+ 101,255,102, 19,102,248,103, 8,103, 53,103, 62,103, 75,225,242,
+ 116,129, 38,101,101,230,243,245,233,116, 2,101,239,101,247,226,
+ 236,225,227,107,128, 38,101,247,232,233,244,101,128, 38, 97,228,
+ 225,231,229,243,104,129,251, 52,102, 10,232,229,226,242,229,119,
+ 128,251, 52,104, 6,102, 33,102, 61,102, 69,102,119,102,165,102,
+ 214, 97, 2,102, 39,102, 53,236,244,239,238,229,225,242,225,226,
+ 233, 99,128, 6,193,242,225,226,233, 99,128, 6, 71,229,226,242,
+ 229,119,128, 5,212,230,233,238,225,236, 97, 2,102, 80,102,111,
+ 236,116, 2,102, 87,102, 99,239,238,229,225,242,225,226,233, 99,
+ 128,251,167,244,247,239,225,242,225,226,233, 99,128,254,234,242,
+ 225,226,233, 99,128,254,234,232,225,237,250,225,225,226,239,246,
+ 101, 2,102,134,102,148,230,233,238,225,236,225,242,225,226,233,
+ 99,128,251,165,233,243,239,236,225,244,229,228,225,242,225,226,
+ 233, 99,128,251,164,105, 2,102,171,102,205,238,233,244,233,225,
+ 236, 97, 2,102,183,102,197,236,244,239,238,229,225,242,225,226,
+ 233, 99,128,251,168,242,225,226,233, 99,128,254,235,242,225,231,
+ 225,238, 97,128, 48,120,237,229,228,233,225,236, 97, 2,102,226,
+ 102,240,236,244,239,238,229,225,242,225,226,233, 99,128,251,169,
+ 242,225,226,233, 99,128,254,236,233,243,229,233,229,242,225,243,
+ 241,245,225,242,101,128, 51,123,107, 2,103, 14,103, 38,225,244,
+ 225,235,225,238, 97,129, 48,216,103, 26,232,225,236,230,247,233,
+ 228,244,104,128,255,141,245,244,225,225,242,245,243,241,245,225,
+ 242,101,128, 51, 54,238,231,232,239,239,107,128, 2,103,242,245,
+ 244,245,243,241,245,225,242,101,128, 51, 57,116,129, 5,215,103,
+ 81,232,229,226,242,229,119,128, 5,215,232,239,239,107,129, 2,
+ 102,103, 99,243,245,240,229,242,233,239,114,128, 2,177,105, 4,
+ 103,120,103,205,103,216,103,241,229,245,104, 4,103,132,103,167,
+ 103,182,103,191, 97, 2,103,138,103,153,227,233,242,227,236,229,
+ 235,239,242,229,225,110,128, 50,123,240,225,242,229,238,235,239,
+ 242,229,225,110,128, 50, 27,227,233,242,227,236,229,235,239,242,
+ 229,225,110,128, 50,109,235,239,242,229,225,110,128, 49, 78,240,
+ 225,242,229,238,235,239,242,229,225,110,128, 50, 13,232,233,242,
+ 225,231,225,238, 97,128, 48,114,235,225,244,225,235,225,238, 97,
+ 129, 48,210,103,229,232,225,236,230,247,233,228,244,104,128,255,
+ 139,242,233,113,134, 5,180,104, 3,104, 8,104, 22,104, 31,104,
+ 46,104, 62,177, 52,128, 5,180, 50, 2,104, 14,104, 18, 49,128,
+ 5,180,100,128, 5,180,232,229,226,242,229,119,128, 5,180,238,
+ 225,242,242,239,247,232,229,226,242,229,119,128, 5,180,241,245,
+ 225,242,244,229,242,232,229,226,242,229,119,128, 5,180,247,233,
+ 228,229,232,229,226,242,229,119,128, 5,180,236,233,238,229,226,
+ 229,236,239,119,128, 30,150,237,239,238,239,243,240,225,227,101,
+ 128,255, 72,111, 9,104,119,104,130,104,154,104,179,105, 11,105,
+ 24,105,110,105,150,105,161,225,242,237,229,238,233,225,110,128,
+ 5,112,232,105, 2,104,137,104,145,240,244,232,225,105,128, 14,
+ 43,242,225,231,225,238, 97,128, 48,123,235,225,244,225,235,225,
+ 238, 97,129, 48,219,104,167,232,225,236,230,247,233,228,244,104,
+ 128,255,142,236,225,109,135, 5,185,104,199,104,204,104,209,104,
+ 214,104,223,104,238,104,254,177, 57,128, 5,185,178, 54,128, 5,
+ 185,179, 50,128, 5,185,232,229,226,242,229,119,128, 5,185,238,
+ 225,242,242,239,247,232,229,226,242,229,119,128, 5,185,241,245,
+ 225,242,244,229,242,232,229,226,242,229,119,128, 5,185,247,233,
+ 228,229,232,229,226,242,229,119,128, 5,185,238,239,235,232,245,
+ 235,244,232,225,105,128, 14, 46,111, 2,105, 30,105,100,107, 4,
+ 105, 40,105, 52,105, 58,105, 80,225,226,239,246,229,227,239,237,
+ 98,128, 3, 9,227,237, 98,128, 3, 9,240,225,236,225,244,225,
+ 236,233,250,229,228,226,229,236,239,247,227,237, 98,128, 3, 33,
+ 242,229,244,242,239,230,236,229,248,226,229,236,239,247,227,237,
+ 98,128, 3, 34,238,243,241,245,225,242,101,128, 51, 66,114, 2,
+ 105,116,105,143,105, 2,105,122,105,131,227,239,240,244,233, 99,
+ 128, 3,233,250,239,238,244,225,236,226,225,114,128, 32, 21,238,
+ 227,237, 98,128, 3, 27,244,243,240,242,233,238,231,115,128, 38,
+ 104,245,243,101,128, 35, 2,240,225,242,229,110,128, 36,163,243,
+ 245,240,229,242,233,239,114,128, 2,176,244,245,242,238,229,100,
+ 128, 2,101,117, 4,105,205,105,216,105,229,105,254,232,233,242,
+ 225,231,225,238, 97,128, 48,117,233,233,244,239,243,241,245,225,
+ 242,101,128, 51, 51,235,225,244,225,235,225,238, 97,129, 48,213,
+ 105,242,232,225,236,230,247,233,228,244,104,128,255,140,238,231,
+ 225,242,245,237,236,225,245,116,129, 2,221,106, 13,227,237, 98,
+ 128, 3, 11,118,128, 1,149,249,240,232,229,110,132, 0, 45,106,
+ 39,106, 50,106, 62,106, 85,233,238,230,229,242,233,239,114,128,
+ 246,229,237,239,238,239,243,240,225,227,101,128,255, 13,115, 2,
+ 106, 68,106, 75,237,225,236,108,128,254, 99,245,240,229,242,233,
+ 239,114,128,246,230,244,247,111,128, 32, 16,105,149, 0,105,106,
+ 137,106,160,106,194,106,241,110,123,110,243,111, 24,111, 51,111,
+ 213,111,217,111,255,112, 21,112,105,113, 14,113, 89,113, 97,113,
+ 110,113,197,113,254,114, 26,114, 70,225, 99, 2,106,144,106,150,
+ 245,244,101,128, 0,237,249,242,233,236,236,233, 99,128, 4, 79,
+ 98, 3,106,168,106,177,106,187,229,238,231,225,236,105,128, 9,
+ 135,239,240,239,237,239,230,111,128, 49, 39,242,229,246,101,128,
+ 1, 45, 99, 3,106,202,106,209,106,231,225,242,239,110,128, 1,
+ 208,233,242, 99, 2,106,217,106,222,236,101,128, 36,216,245,237,
+ 230,236,229,120,128, 0,238,249,242,233,236,236,233, 99,128, 4,
+ 86,100, 4,106,251,107, 5,110, 80,110,113,226,236,231,242,225,
+ 246,101,128, 2, 9,101, 2,107, 11,110, 75,239,231,242,225,240,
+ 104, 7,107, 32,107, 46,107, 59,109,244,110, 19,110, 32,110, 44,
+ 229,225,242,244,232,227,233,242,227,236,101,128, 50,143,230,233,
+ 242,229,227,233,242,227,236,101,128, 50,139,233, 99, 14,107, 90,
+ 107,106,107,205,108, 3,108, 69,108, 98,108,114,108,171,108,220,
+ 108,232,109, 3,109, 70,109,208,109,237,225,236,236,233,225,238,
+ 227,229,240,225,242,229,110,128, 50, 63, 99, 4,107,116,107,127,
+ 107,141,107,148,225,236,236,240,225,242,229,110,128, 50, 58,229,
+ 238,244,242,229,227,233,242,227,236,101,128, 50,165,236,239,243,
+ 101,128, 48, 6,111, 3,107,156,107,171,107,191,237,237, 97,129,
+ 48, 1,107,164,236,229,230,116,128,255,100,238,231,242,225,244,
+ 245,236,225,244,233,239,238,240,225,242,229,110,128, 50, 55,242,
+ 242,229,227,244,227,233,242,227,236,101,128, 50,163,101, 3,107,
+ 213,107,225,107,242,225,242,244,232,240,225,242,229,110,128, 50,
+ 47,238,244,229,242,240,242,233,243,229,240,225,242,229,110,128,
+ 50, 61,248,227,229,236,236,229,238,244,227,233,242,227,236,101,
+ 128, 50,157,102, 2,108, 9,108, 24,229,243,244,233,246,225,236,
+ 240,225,242,229,110,128, 50, 64,105, 2,108, 30,108, 59,238,225,
+ 238,227,233,225,108, 2,108, 42,108, 51,227,233,242,227,236,101,
+ 128, 50,150,240,225,242,229,110,128, 50, 54,242,229,240,225,242,
+ 229,110,128, 50, 43,104, 2,108, 75,108, 86,225,246,229,240,225,
+ 242,229,110,128, 50, 50,233,231,232,227,233,242,227,236,101,128,
+ 50,164,233,244,229,242,225,244,233,239,238,237,225,242,107,128,
+ 48, 5,108, 3,108,122,108,148,108,160,225,226,239,114, 2,108,
+ 131,108,140,227,233,242,227,236,101,128, 50,152,240,225,242,229,
+ 110,128, 50, 56,229,230,244,227,233,242,227,236,101,128, 50,167,
+ 239,247,227,233,242,227,236,101,128, 50,166,109, 2,108,177,108,
+ 209,101, 2,108,183,108,198,228,233,227,233,238,229,227,233,242,
+ 227,236,101,128, 50,169,244,225,236,240,225,242,229,110,128, 50,
+ 46,239,239,238,240,225,242,229,110,128, 50, 42,238,225,237,229,
+ 240,225,242,229,110,128, 50, 52,112, 2,108,238,108,246,229,242,
+ 233,239,100,128, 48, 2,242,233,238,244,227,233,242,227,236,101,
+ 128, 50,158,114, 2,109, 9,109, 57,101, 3,109, 17,109, 28,109,
+ 43,225,227,232,240,225,242,229,110,128, 50, 67,240,242,229,243,
+ 229,238,244,240,225,242,229,110,128, 50, 57,243,239,245,242,227,
+ 229,240,225,242,229,110,128, 50, 62,233,231,232,244,227,233,242,
+ 227,236,101,128, 50,168,115, 5,109, 82,109,111,109,125,109,150,
+ 109,178,101, 2,109, 88,109,101,227,242,229,244,227,233,242,227,
+ 236,101,128, 50,153,236,230,240,225,242,229,110,128, 50, 66,239,
+ 227,233,229,244,249,240,225,242,229,110,128, 50, 51,112, 2,109,
+ 131,109,137,225,227,101,128, 48, 0,229,227,233,225,236,240,225,
+ 242,229,110,128, 50, 53,116, 2,109,156,109,167,239,227,235,240,
+ 225,242,229,110,128, 50, 49,245,228,249,240,225,242,229,110,128,
+ 50, 59,117, 2,109,184,109,193,238,240,225,242,229,110,128, 50,
+ 48,240,229,242,246,233,243,229,240,225,242,229,110,128, 50, 60,
+ 119, 2,109,214,109,226,225,244,229,242,240,225,242,229,110,128,
+ 50, 44,239,239,228,240,225,242,229,110,128, 50, 45,250,229,242,
+ 111,128, 48, 7,109, 2,109,250,110, 7,229,244,225,236,227,233,
+ 242,227,236,101,128, 50,142,239,239,238,227,233,242,227,236,101,
+ 128, 50,138,238,225,237,229,227,233,242,227,236,101,128, 50,148,
+ 243,245,238,227,233,242,227,236,101,128, 50,144,119, 2,110, 50,
+ 110, 63,225,244,229,242,227,233,242,227,236,101,128, 50,140,239,
+ 239,228,227,233,242,227,236,101,128, 50,141,246, 97,128, 9, 7,
+ 233,229,242,229,243,233,115,130, 0,239,110, 94,110,102,225,227,
+ 245,244,101,128, 30, 47,227,249,242,233,236,236,233, 99,128, 4,
+ 229,239,244,226,229,236,239,119,128, 30,203,101, 3,110,131,110,
+ 147,110,158,226,242,229,246,229,227,249,242,233,236,236,233, 99,
+ 128, 4,215,227,249,242,233,236,236,233, 99,128, 4, 53,245,238,
+ 103, 4,110,170,110,205,110,220,110,229, 97, 2,110,176,110,191,
+ 227,233,242,227,236,229,235,239,242,229,225,110,128, 50,117,240,
+ 225,242,229,238,235,239,242,229,225,110,128, 50, 21,227,233,242,
+ 227,236,229,235,239,242,229,225,110,128, 50,103,235,239,242,229,
+ 225,110,128, 49, 71,240,225,242,229,238,235,239,242,229,225,110,
+ 128, 50, 7,103, 2,110,249,111, 0,242,225,246,101,128, 0,236,
+ 117, 2,111, 6,111, 15,234,225,242,225,244,105,128, 10,135,242,
+ 237,245,235,232,105,128, 10, 7,104, 2,111, 30,111, 40,233,242,
+ 225,231,225,238, 97,128, 48, 68,239,239,235,225,226,239,246,101,
+ 128, 30,201,105, 8,111, 69,111, 79,111, 90,111, 97,111,122,111,
+ 138,111,153,111,169,226,229,238,231,225,236,105,128, 9,136,227,
+ 249,242,233,236,236,233, 99,128, 4, 56,228,229,246, 97,128, 9,
+ 8,231,117, 2,111,104,111,113,234,225,242,225,244,105,128, 10,
+ 136,242,237,245,235,232,105,128, 10, 8,237,225,244,242,225,231,
+ 245,242,237,245,235,232,105,128, 10, 64,238,246,229,242,244,229,
+ 228,226,242,229,246,101,128, 2, 11,243,232,239,242,244,227,249,
+ 242,233,236,236,233, 99,128, 4, 57,246,239,247,229,236,243,233,
+ 231,110, 3,111,185,111,195,111,202,226,229,238,231,225,236,105,
+ 128, 9,192,228,229,246, 97,128, 9, 64,231,245,234,225,242,225,
+ 244,105,128, 10,192,106,128, 1, 51,107, 2,111,223,111,247,225,
+ 244,225,235,225,238, 97,129, 48,164,111,235,232,225,236,230,247,
+ 233,228,244,104,128,255,114,239,242,229,225,110,128, 49, 99,108,
+ 2,112, 5,112, 10,228,101,128, 2,220,245,249,232,229,226,242,
+ 229,119,128, 5,172,109, 2,112, 27,112, 94, 97, 3,112, 35,112,
+ 55,112, 80,227,242,239,110,129, 1, 43,112, 44,227,249,242,233,
+ 236,236,233, 99,128, 4,227,231,229,239,242,225,240,240,242,239,
+ 248,233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 83,
+ 244,242,225,231,245,242,237,245,235,232,105,128, 10, 63,239,238,
+ 239,243,240,225,227,101,128,255, 73,110, 5,112,117,112,127,112,
+ 136,112,148,112,232,227,242,229,237,229,238,116,128, 34, 6,230,
+ 233,238,233,244,121,128, 34, 30,233,225,242,237,229,238,233,225,
+ 110,128, 5,107,116, 2,112,154,112,222,101, 2,112,160,112,211,
+ 231,242,225,108,131, 34, 43,112,173,112,191,112,196, 98, 2,112,
+ 179,112,187,239,244,244,239,109,128, 35, 33,116,128, 35, 33,229,
+ 120,128,248,245,116, 2,112,202,112,207,239,112,128, 35, 32,112,
+ 128, 35, 32,242,243,229,227,244,233,239,110,128, 34, 41,233,243,
+ 241,245,225,242,101,128, 51, 5,118, 3,112,240,112,249,113, 2,
+ 226,245,236,236,229,116,128, 37,216,227,233,242,227,236,101,128,
+ 37,217,243,237,233,236,229,230,225,227,101,128, 38, 59,111, 3,
+ 113, 22,113, 33,113, 41,227,249,242,233,236,236,233, 99,128, 4,
+ 81,231,239,238,229,107,128, 1, 47,244, 97,131, 3,185,113, 52,
+ 113, 73,113, 81,228,233,229,242,229,243,233,115,129, 3,202,113,
+ 65,244,239,238,239,115,128, 3,144,236,225,244,233,110,128, 2,
+ 105,244,239,238,239,115,128, 3,175,240,225,242,229,110,128, 36,
+ 164,242,233,231,245,242,237,245,235,232,105,128, 10,114,115, 4,
+ 113,120,113,165,113,179,113,187,237,225,236,108, 2,113,129,113,
+ 140,232,233,242,225,231,225,238, 97,128, 48, 67,235,225,244,225,
+ 235,225,238, 97,129, 48,163,113,153,232,225,236,230,247,233,228,
+ 244,104,128,255,104,243,232,225,242,226,229,238,231,225,236,105,
+ 128, 9,250,244,242,239,235,101,128, 2,104,245,240,229,242,233,
+ 239,114,128,246,237,116, 2,113,203,113,237,229,242,225,244,233,
+ 239,110, 2,113,215,113,226,232,233,242,225,231,225,238, 97,128,
+ 48,157,235,225,244,225,235,225,238, 97,128, 48,253,233,236,228,
+ 101,129, 1, 41,113,246,226,229,236,239,119,128, 30, 45,117, 2,
+ 114, 4,114, 15,226,239,240,239,237,239,230,111,128, 49, 41,227,
+ 249,242,233,236,236,233, 99,128, 4, 78,246,239,247,229,236,243,
+ 233,231,110, 3,114, 42,114, 52,114, 59,226,229,238,231,225,236,
+ 105,128, 9,191,228,229,246, 97,128, 9, 63,231,245,234,225,242,
+ 225,244,105,128, 10,191,250,232,233,244,243, 97, 2,114, 81,114,
+ 92,227,249,242,233,236,236,233, 99,128, 4,117,228,226,236,231,
+ 242,225,246,229,227,249,242,233,236,236,233, 99,128, 4,119,106,
+ 138, 0,106,114,135,114,198,114,209,115, 3,115, 19,115,132,115,
+ 201,115,206,115,218,115,226, 97, 4,114,145,114,156,114,166,114,
+ 173,225,242,237,229,238,233,225,110,128, 5,113,226,229,238,231,
+ 225,236,105,128, 9,156,228,229,246, 97,128, 9, 28,231,117, 2,
+ 114,180,114,189,234,225,242,225,244,105,128, 10,156,242,237,245,
+ 235,232,105,128, 10, 28,226,239,240,239,237,239,230,111,128, 49,
+ 16, 99, 3,114,217,114,224,114,246,225,242,239,110,128, 1,240,
+ 233,242, 99, 2,114,232,114,237,236,101,128, 36,217,245,237,230,
+ 236,229,120,128, 1, 53,242,239,243,243,229,228,244,225,233,108,
+ 128, 2,157,228,239,244,236,229,243,243,243,244,242,239,235,101,
+ 128, 2, 95,101, 3,115, 27,115, 38,115,103,227,249,242,233,236,
+ 236,233, 99,128, 4, 88,229,109, 4,115, 49,115, 58,115, 72,115,
+ 88,225,242,225,226,233, 99,128, 6, 44,230,233,238,225,236,225,
+ 242,225,226,233, 99,128,254,158,233,238,233,244,233,225,236,225,
+ 242,225,226,233, 99,128,254,159,237,229,228,233,225,236,225,242,
+ 225,226,233, 99,128,254,160,104, 2,115,109,115,118,225,242,225,
+ 226,233, 99,128, 6,152,230,233,238,225,236,225,242,225,226,233,
+ 99,128,251,139,104, 2,115,138,115,188, 97, 3,115,146,115,156,
+ 115,163,226,229,238,231,225,236,105,128, 9,157,228,229,246, 97,
+ 128, 9, 29,231,117, 2,115,170,115,179,234,225,242,225,244,105,
+ 128, 10,157,242,237,245,235,232,105,128, 10, 29,229,232,225,242,
+ 237,229,238,233,225,110,128, 5,123,233,115,128, 48, 4,237,239,
+ 238,239,243,240,225,227,101,128,255, 74,240,225,242,229,110,128,
+ 36,165,243,245,240,229,242,233,239,114,128, 2,178,107,146, 0,
+ 107,116, 21,118,110,118,121,118,183,118,194,119, 28,119, 42,120,
+ 150,121, 90,121,103,121,129,121,178,122, 60,122, 82,122, 95,122,
+ 118,122,160,122,170, 97, 12,116, 47,116, 79,116,101,116,131,116,
+ 245,117, 14,117, 44,117, 69,117,175,117,189,118, 56,118, 85, 98,
+ 2,116, 53,116, 70,225,243,232,235,233,242,227,249,242,233,236,
+ 236,233, 99,128, 4,161,229,238,231,225,236,105,128, 9,149, 99,
+ 2,116, 85,116, 91,245,244,101,128, 30, 49,249,242,233,236,236,
+ 233, 99,128, 4, 58,228,101, 2,116,108,116,126,243,227,229,238,
+ 228,229,242,227,249,242,233,236,236,233, 99,128, 4,155,246, 97,
+ 128, 9, 21,102,135, 5,219,116,149,116,158,116,178,116,192,116,
+ 201,116,217,116,232,225,242,225,226,233, 99,128, 6, 67,228,225,
+ 231,229,243,104,129,251, 59,116,169,232,229,226,242,229,119,128,
+ 251, 59,230,233,238,225,236,225,242,225,226,233, 99,128,254,218,
+ 232,229,226,242,229,119,128, 5,219,233,238,233,244,233,225,236,
+ 225,242,225,226,233, 99,128,254,219,237,229,228,233,225,236,225,
+ 242,225,226,233, 99,128,254,220,242,225,230,229,232,229,226,242,
+ 229,119,128,251, 77,231,117, 2,116,252,117, 5,234,225,242,225,
+ 244,105,128, 10,149,242,237,245,235,232,105,128, 10, 21,104, 2,
+ 117, 20,117, 30,233,242,225,231,225,238, 97,128, 48, 75,239,239,
+ 235,227,249,242,233,236,236,233, 99,128, 4,196,235,225,244,225,
+ 235,225,238, 97,129, 48,171,117, 57,232,225,236,230,247,233,228,
+ 244,104,128,255,118,112, 2,117, 75,117, 96,240, 97,129, 3,186,
+ 117, 82,243,249,237,226,239,236,231,242,229,229,107,128, 3,240,
+ 249,229,239,245,110, 3,117,108,117,122,117,156,237,233,229,245,
+ 237,235,239,242,229,225,110,128, 49,113,112, 2,117,128,117,143,
+ 232,233,229,245,240,232,235,239,242,229,225,110,128, 49,132,233,
+ 229,245,240,235,239,242,229,225,110,128, 49,120,243,243,225,238,
+ 231,240,233,229,245,240,235,239,242,229,225,110,128, 49,121,242,
+ 239,242,233,233,243,241,245,225,242,101,128, 51, 13,115, 5,117,
+ 201,117,245,118, 4,118, 12,118, 40,232,233,228,225,225,245,244,
+ 111, 2,117,214,117,223,225,242,225,226,233, 99,128, 6, 64,238,
+ 239,243,233,228,229,226,229,225,242,233,238,231,225,242,225,226,
+ 233, 99,128, 6, 64,237,225,236,236,235,225,244,225,235,225,238,
+ 97,128, 48,245,241,245,225,242,101,128, 51,132,242, 97, 2,118,
+ 19,118, 28,225,242,225,226,233, 99,128, 6, 80,244,225,238,225,
+ 242,225,226,233, 99,128, 6, 77,244,242,239,235,229,227,249,242,
+ 233,236,236,233, 99,128, 4,159,244,225,232,233,242,225,240,242,
+ 239,236,239,238,231,237,225,242,235,232,225,236,230,247,233,228,
+ 244,104,128,255,112,246,229,242,244,233,227,225,236,243,244,242,
+ 239,235,229,227,249,242,233,236,236,233, 99,128, 4,157,226,239,
+ 240,239,237,239,230,111,128, 49, 14, 99, 4,118,131,118,153,118,
+ 162,118,170, 97, 2,118,137,118,147,236,243,241,245,225,242,101,
+ 128, 51,137,242,239,110,128, 1,233,229,228,233,236,236, 97,128,
+ 1, 55,233,242,227,236,101,128, 36,218,239,237,237,225,225,227,
+ 227,229,238,116,128, 1, 55,228,239,244,226,229,236,239,119,128,
+ 30, 51,101, 4,118,204,118,231,119, 0,119, 12,104, 2,118,210,
+ 118,221,225,242,237,229,238,233,225,110,128, 5,132,233,242,225,
+ 231,225,238, 97,128, 48, 81,235,225,244,225,235,225,238, 97,129,
+ 48,177,118,244,232,225,236,230,247,233,228,244,104,128,255,121,
+ 238,225,242,237,229,238,233,225,110,128, 5,111,243,237,225,236,
+ 236,235,225,244,225,235,225,238, 97,128, 48,246,231,242,229,229,
+ 238,236,225,238,228,233, 99,128, 1, 56,104, 6,119, 56,119,185,
+ 119,196,119,221,120, 52,120,140, 97, 5,119, 68,119, 78,119, 89,
+ 119, 96,119,121,226,229,238,231,225,236,105,128, 9,150,227,249,
+ 242,233,236,236,233, 99,128, 4, 69,228,229,246, 97,128, 9, 22,
+ 231,117, 2,119,103,119,112,234,225,242,225,244,105,128, 10,150,
+ 242,237,245,235,232,105,128, 10, 22,104, 4,119,131,119,140,119,
+ 154,119,170,225,242,225,226,233, 99,128, 6, 46,230,233,238,225,
+ 236,225,242,225,226,233, 99,128,254,166,233,238,233,244,233,225,
+ 236,225,242,225,226,233, 99,128,254,167,237,229,228,233,225,236,
+ 225,242,225,226,233, 99,128,254,168,229,233,227,239,240,244,233,
+ 99,128, 3,231,232, 97, 2,119,203,119,210,228,229,246, 97,128,
+ 9, 89,231,245,242,237,245,235,232,105,128, 10, 89,233,229,245,
+ 235,104, 4,119,235,120, 14,120, 29,120, 38, 97, 2,119,241,120,
+ 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,120,
+ 240,225,242,229,238,235,239,242,229,225,110,128, 50, 24,227,233,
+ 242,227,236,229,235,239,242,229,225,110,128, 50,106,235,239,242,
+ 229,225,110,128, 49, 75,240,225,242,229,238,235,239,242,229,225,
+ 110,128, 50, 10,111, 4,120, 62,120,111,120,121,120,126,235,104,
+ 4,120, 73,120, 82,120, 91,120,101,225,233,244,232,225,105,128,
+ 14, 2,239,238,244,232,225,105,128, 14, 5,245,225,244,244,232,
+ 225,105,128, 14, 3,247,225,233,244,232,225,105,128, 14, 4,237,
+ 245,244,244,232,225,105,128, 14, 91,239,107,128, 1,153,242,225,
+ 235,232,225,238,231,244,232,225,105,128, 14, 6,250,243,241,245,
+ 225,242,101,128, 51,145,105, 4,120,160,120,171,120,196,120,245,
+ 232,233,242,225,231,225,238, 97,128, 48, 77,235,225,244,225,235,
+ 225,238, 97,129, 48,173,120,184,232,225,236,230,247,233,228,244,
+ 104,128,255,119,242,111, 3,120,205,120,220,120,236,231,245,242,
+ 225,237,245,243,241,245,225,242,101,128, 51, 21,237,229,229,244,
+ 239,242,245,243,241,245,225,242,101,128, 51, 22,243,241,245,225,
+ 242,101,128, 51, 20,249,229,239,107, 5,121, 4,121, 39,121, 54,
+ 121, 63,121, 77, 97, 2,121, 10,121, 25,227,233,242,227,236,229,
+ 235,239,242,229,225,110,128, 50,110,240,225,242,229,238,235,239,
+ 242,229,225,110,128, 50, 14,227,233,242,227,236,229,235,239,242,
+ 229,225,110,128, 50, 96,235,239,242,229,225,110,128, 49, 49,240,
+ 225,242,229,238,235,239,242,229,225,110,128, 50, 0,243,233,239,
+ 243,235,239,242,229,225,110,128, 49, 51,234,229,227,249,242,233,
+ 236,236,233, 99,128, 4, 92,108, 2,121,109,121,120,233,238,229,
+ 226,229,236,239,119,128, 30, 53,243,241,245,225,242,101,128, 51,
+ 152,109, 3,121,137,121,151,121,162,227,245,226,229,228,243,241,
+ 245,225,242,101,128, 51,166,239,238,239,243,240,225,227,101,128,
+ 255, 75,243,241,245,225,242,229,228,243,241,245,225,242,101,128,
+ 51,162,111, 5,121,190,121,216,121,254,122, 10,122, 24,104, 2,
+ 121,196,121,206,233,242,225,231,225,238, 97,128, 48, 83,237,243,
+ 241,245,225,242,101,128, 51,192,235, 97, 2,121,223,121,231,233,
+ 244,232,225,105,128, 14, 1,244,225,235,225,238, 97,129, 48,179,
+ 121,242,232,225,236,230,247,233,228,244,104,128,255,122,239,240,
+ 239,243,241,245,225,242,101,128, 51, 30,240,240,225,227,249,242,
+ 233,236,236,233, 99,128, 4,129,114, 2,122, 30,122, 50,229,225,
+ 238,243,244,225,238,228,225,242,228,243,249,237,226,239,108,128,
+ 50,127,239,238,233,243,227,237, 98,128, 3, 67,240, 97, 2,122,
+ 67,122, 73,242,229,110,128, 36,166,243,241,245,225,242,101,128,
+ 51,170,243,233,227,249,242,233,236,236,233, 99,128, 4,111,116,
+ 2,122,101,122,110,243,241,245,225,242,101,128, 51,207,245,242,
+ 238,229,100,128, 2,158,117, 2,122,124,122,135,232,233,242,225,
+ 231,225,238, 97,128, 48, 79,235,225,244,225,235,225,238, 97,129,
+ 48,175,122,148,232,225,236,230,247,233,228,244,104,128,255,120,
+ 246,243,241,245,225,242,101,128, 51,184,247,243,241,245,225,242,
+ 101,128, 51,190,108,146, 0,108,122,220,124,247,125, 20,125, 86,
+ 125,124,126, 20,126, 29,126, 45,126, 69,126, 87,126,205,126,246,
+ 127,125,127,133,127,166,127,175,127,183,127,245, 97, 7,122,236,
+ 122,246,122,253,123, 4,123, 29,123, 45,124,235,226,229,238,231,
+ 225,236,105,128, 9,178,227,245,244,101,128, 1, 58,228,229,246,
+ 97,128, 9, 50,231,117, 2,123, 11,123, 20,234,225,242,225,244,
+ 105,128, 10,178,242,237,245,235,232,105,128, 10, 50,235,235,232,
+ 225,238,231,249,225,239,244,232,225,105,128, 14, 69,109, 10,123,
+ 67,124, 6,124, 23,124, 61,124, 75,124, 94,124,110,124,130,124,
+ 150,124,173, 97, 2,123, 73,123,254,236,229,102, 4,123, 85,123,
+ 99,123,191,123,208,230,233,238,225,236,225,242,225,226,233, 99,
+ 128,254,252,232,225,237,250, 97, 2,123,109,123,150,225,226,239,
+ 246,101, 2,123,119,123,133,230,233,238,225,236,225,242,225,226,
+ 233, 99,128,254,248,233,243,239,236,225,244,229,228,225,242,225,
+ 226,233, 99,128,254,247,226,229,236,239,119, 2,123,160,123,174,
+ 230,233,238,225,236,225,242,225,226,233, 99,128,254,250,233,243,
+ 239,236,225,244,229,228,225,242,225,226,233, 99,128,254,249,233,
+ 243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,251,
+ 237,225,228,228,225,225,226,239,246,101, 2,123,223,123,237,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,254,246,233,243,239,
+ 236,225,244,229,228,225,242,225,226,233, 99,128,254,245,242,225,
+ 226,233, 99,128, 6, 68,226,228, 97,129, 3,187,124, 14,243,244,
+ 242,239,235,101,128, 1,155,229,100,130, 5,220,124, 32,124, 52,
+ 228,225,231,229,243,104,129,251, 60,124, 43,232,229,226,242,229,
+ 119,128,251, 60,232,229,226,242,229,119,128, 5,220,230,233,238,
+ 225,236,225,242,225,226,233, 99,128,254,222,232,225,232,233,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,252,202,233,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,254,223,234,229,
+ 229,237,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+ 252,201,235,232,225,232,233,238,233,244,233,225,236,225,242,225,
+ 226,233, 99,128,252,203,236,225,237,232,229,232,233,243,239,236,
+ 225,244,229,228,225,242,225,226,233, 99,128,253,242,237,101, 2,
+ 124,180,124,193,228,233,225,236,225,242,225,226,233, 99,128,254,
+ 224,229,109, 2,124,200,124,219,232,225,232,233,238,233,244,233,
+ 225,236,225,242,225,226,233, 99,128,253,136,233,238,233,244,233,
+ 225,236,225,242,225,226,233, 99,128,252,204,242,231,229,227,233,
+ 242,227,236,101,128, 37,239, 98, 3,124,255,125, 4,125, 10,225,
+ 114,128, 1,154,229,236,116,128, 2,108,239,240,239,237,239,230,
+ 111,128, 49, 12, 99, 4,125, 30,125, 37,125, 46,125, 73,225,242,
+ 239,110,128, 1, 62,229,228,233,236,236, 97,128, 1, 60,233,242,
+ 99, 2,125, 54,125, 59,236,101,128, 36,219,245,237,230,236,229,
+ 248,226,229,236,239,119,128, 30, 61,239,237,237,225,225,227,227,
+ 229,238,116,128, 1, 60,228,239,116,130, 1, 64,125, 96,125,105,
+ 225,227,227,229,238,116,128, 1, 64,226,229,236,239,119,129, 30,
+ 55,125,115,237,225,227,242,239,110,128, 30, 57,101, 3,125,132,
+ 125,170,126, 15,230,116, 2,125,139,125,155,225,238,231,236,229,
+ 225,226,239,246,229,227,237, 98,128, 3, 26,244,225,227,235,226,
+ 229,236,239,247,227,237, 98,128, 3, 24,243,115,132, 0, 60,125,
+ 183,125,205,125,217,126, 7,229,241,245,225,108,129, 34,100,125,
+ 193,239,242,231,242,229,225,244,229,114,128, 34,218,237,239,238,
+ 239,243,240,225,227,101,128,255, 28,111, 2,125,223,125,252,114,
+ 2,125,229,125,242,229,241,245,233,246,225,236,229,238,116,128,
+ 34,114,231,242,229,225,244,229,114,128, 34,118,246,229,242,229,
+ 241,245,225,108,128, 34,102,243,237,225,236,108,128,254,100,250,
+ 104,128, 2,110,230,226,236,239,227,107,128, 37,140,232,239,239,
+ 235,242,229,244,242,239,230,236,229,120,128, 2,109,105, 2,126,
+ 51,126, 56,242, 97,128, 32,164,247,238,225,242,237,229,238,233,
+ 225,110,128, 5,108,106,129, 1,201,126, 75,229,227,249,242,233,
+ 236,236,233, 99,128, 4, 89,108,132,246,192,126, 99,126,123,126,
+ 134,126,143, 97, 2,126,105,126,112,228,229,246, 97,128, 9, 51,
+ 231,245,234,225,242,225,244,105,128, 10,179,233,238,229,226,229,
+ 236,239,119,128, 30, 59,236,225,228,229,246, 97,128, 9, 52,246,
+ 239,227,225,236,233, 99, 3,126,157,126,167,126,174,226,229,238,
+ 231,225,236,105,128, 9,225,228,229,246, 97,128, 9, 97,246,239,
+ 247,229,236,243,233,231,110, 2,126,188,126,198,226,229,238,231,
+ 225,236,105,128, 9,227,228,229,246, 97,128, 9, 99,109, 3,126,
+ 213,126,226,126,237,233,228,228,236,229,244,233,236,228,101,128,
+ 2,107,239,238,239,243,240,225,227,101,128,255, 76,243,241,245,
+ 225,242,101,128, 51,208,111, 6,127, 4,127, 16,127, 58,127, 69,
+ 127, 75,127,117,227,232,245,236,225,244,232,225,105,128, 14, 44,
+ 231,233,227,225,108, 3,127, 28,127, 34,127, 53,225,238,100,128,
+ 34, 39,238,239,116,129, 0,172,127, 42,242,229,246,229,242,243,
+ 229,100,128, 35, 16,239,114,128, 34, 40,236,233,238,231,244,232,
+ 225,105,128, 14, 37,238,231,115,128, 1,127,247,236,233,238,101,
+ 2,127, 85,127,108, 99, 2,127, 91,127,103,229,238,244,229,242,
+ 236,233,238,101,128,254, 78,237, 98,128, 3, 50,228,225,243,232,
+ 229,100,128,254, 77,250,229,238,231,101,128, 37,202,240,225,242,
+ 229,110,128, 36,167,115, 3,127,141,127,148,127,156,236,225,243,
+ 104,128, 1, 66,241,245,225,242,101,128, 33, 19,245,240,229,242,
+ 233,239,114,128,246,238,244,243,232,225,228,101,128, 37,145,245,
+ 244,232,225,105,128, 14, 38,246,239,227,225,236,233, 99, 3,127,
+ 197,127,207,127,214,226,229,238,231,225,236,105,128, 9,140,228,
+ 229,246, 97,128, 9, 12,246,239,247,229,236,243,233,231,110, 2,
+ 127,228,127,238,226,229,238,231,225,236,105,128, 9,226,228,229,
+ 246, 97,128, 9, 98,248,243,241,245,225,242,101,128, 51,211,109,
+ 144, 0,109,128, 35,130,144,130,169,130,196,130,221,132, 18,132,
+ 40,133, 95,133,125,133,174,134, 25,134, 47,134, 72,134, 81,135,
+ 108,135,136, 97, 12,128, 61,128, 71,128,135,128,142,128,167,128,
+ 215,130, 51,130, 76,130, 81,130, 95,130,107,130,112,226,229,238,
+ 231,225,236,105,128, 9,174, 99, 2,128, 77,128,129,242,239,110,
+ 132, 0,175,128, 91,128,102,128,108,128,117,226,229,236,239,247,
+ 227,237, 98,128, 3, 49,227,237, 98,128, 3, 4,236,239,247,237,
+ 239,100,128, 2,205,237,239,238,239,243,240,225,227,101,128,255,
+ 227,245,244,101,128, 30, 63,228,229,246, 97,128, 9, 46,231,117,
+ 2,128,149,128,158,234,225,242,225,244,105,128, 10,174,242,237,
+ 245,235,232,105,128, 10, 46,104, 2,128,173,128,205,225,240,225,
+ 235,104, 2,128,183,128,192,232,229,226,242,229,119,128, 5,164,
+ 236,229,230,244,232,229,226,242,229,119,128, 5,164,233,242,225,
+ 231,225,238, 97,128, 48,126,105, 5,128,227,129, 40,129,103,129,
+ 133,130, 39,227,232,225,244,244,225,247, 97, 3,128,242,129, 17,
+ 129, 24,236,239,119, 2,128,250,129, 5,236,229,230,244,244,232,
+ 225,105,128,248,149,242,233,231,232,244,244,232,225,105,128,248,
+ 148,244,232,225,105,128, 14, 75,245,240,240,229,242,236,229,230,
+ 244,244,232,225,105,128,248,147,229,107, 3,129, 49,129, 80,129,
+ 87,236,239,119, 2,129, 57,129, 68,236,229,230,244,244,232,225,
+ 105,128,248,140,242,233,231,232,244,244,232,225,105,128,248,139,
+ 244,232,225,105,128, 14, 72,245,240,240,229,242,236,229,230,244,
+ 244,232,225,105,128,248,138,232,225,238,225,235,225,116, 2,129,
+ 115,129,126,236,229,230,244,244,232,225,105,128,248,132,244,232,
+ 225,105,128, 14, 49,116, 3,129,141,129,169,129,232,225,233,235,
+ 232,117, 2,129,151,129,162,236,229,230,244,244,232,225,105,128,
+ 248,137,244,232,225,105,128, 14, 71,232,111, 3,129,178,129,209,
+ 129,216,236,239,119, 2,129,186,129,197,236,229,230,244,244,232,
+ 225,105,128,248,143,242,233,231,232,244,244,232,225,105,128,248,
+ 142,244,232,225,105,128, 14, 73,245,240,240,229,242,236,229,230,
+ 244,244,232,225,105,128,248,141,242,105, 3,129,241,130, 16,130,
+ 23,236,239,119, 2,129,249,130, 4,236,229,230,244,244,232,225,
+ 105,128,248,146,242,233,231,232,244,244,232,225,105,128,248,145,
+ 244,232,225,105,128, 14, 74,245,240,240,229,242,236,229,230,244,
+ 244,232,225,105,128,248,144,249,225,237,239,235,244,232,225,105,
+ 128, 14, 70,235,225,244,225,235,225,238, 97,129, 48,222,130, 64,
+ 232,225,236,230,247,233,228,244,104,128,255,143,236,101,128, 38,
+ 66,238,243,249,239,238,243,241,245,225,242,101,128, 51, 71,241,
+ 225,230,232,229,226,242,229,119,128, 5,190,242,115,128, 38, 66,
+ 115, 2,130,118,130,136,239,242,225,227,233,242,227,236,229,232,
+ 229,226,242,229,119,128, 5,175,241,245,225,242,101,128, 51,131,
+ 98, 2,130,150,130,160,239,240,239,237,239,230,111,128, 49, 7,
+ 243,241,245,225,242,101,128, 51,212, 99, 2,130,175,130,183,233,
+ 242,227,236,101,128, 36,220,245,226,229,228,243,241,245,225,242,
+ 101,128, 51,165,228,239,116, 2,130,204,130,213,225,227,227,229,
+ 238,116,128, 30, 65,226,229,236,239,119,128, 30, 67,101, 7,130,
+ 237,131,108,131,119,131,134,131,159,131,196,131,208,101, 2,130,
+ 243,131, 95,109, 4,130,253,131, 6,131, 20,131, 36,225,242,225,
+ 226,233, 99,128, 6, 69,230,233,238,225,236,225,242,225,226,233,
+ 99,128,254,226,233,238,233,244,233,225,236,225,242,225,226,233,
+ 99,128,254,227,237,101, 2,131, 43,131, 56,228,233,225,236,225,
+ 242,225,226,233, 99,128,254,228,229,237,105, 2,131, 64,131, 79,
+ 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,209,243,
+ 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 72,244,
+ 239,242,245,243,241,245,225,242,101,128, 51, 77,232,233,242,225,
+ 231,225,238, 97,128, 48,129,233,250,233,229,242,225,243,241,245,
+ 225,242,101,128, 51,126,235,225,244,225,235,225,238, 97,129, 48,
+ 225,131,147,232,225,236,230,247,233,228,244,104,128,255,146,109,
+ 130, 5,222,131,167,131,187,228,225,231,229,243,104,129,251, 62,
+ 131,178,232,229,226,242,229,119,128,251, 62,232,229,226,242,229,
+ 119,128, 5,222,238,225,242,237,229,238,233,225,110,128, 5,116,
+ 242,235,232, 97, 3,131,219,131,228,132, 5,232,229,226,242,229,
+ 119,128, 5,165,235,229,230,245,236, 97, 2,131,239,131,248,232,
+ 229,226,242,229,119,128, 5,166,236,229,230,244,232,229,226,242,
+ 229,119,128, 5,166,236,229,230,244,232,229,226,242,229,119,128,
+ 5,165,104, 2,132, 24,132, 30,239,239,107,128, 2,113,250,243,
+ 241,245,225,242,101,128, 51,146,105, 6,132, 54,132, 91,132,228,
+ 132,239,133, 8,133, 65,228,100, 2,132, 61,132, 86,236,229,228,
+ 239,244,235,225,244,225,235,225,238,225,232,225,236,230,247,233,
+ 228,244,104,128,255,101,239,116,128, 0,183,229,245,109, 5,132,
+ 105,132,140,132,155,132,164,132,215, 97, 2,132,111,132,126,227,
+ 233,242,227,236,229,235,239,242,229,225,110,128, 50,114,240,225,
+ 242,229,238,235,239,242,229,225,110,128, 50, 18,227,233,242,227,
+ 236,229,235,239,242,229,225,110,128, 50,100,235,239,242,229,225,
+ 110,128, 49, 65,112, 2,132,170,132,202, 97, 2,132,176,132,190,
+ 238,243,233,239,243,235,239,242,229,225,110,128, 49,112,242,229,
+ 238,235,239,242,229,225,110,128, 50, 4,233,229,245,240,235,239,
+ 242,229,225,110,128, 49,110,243,233,239,243,235,239,242,229,225,
+ 110,128, 49,111,232,233,242,225,231,225,238, 97,128, 48,127,235,
+ 225,244,225,235,225,238, 97,129, 48,223,132,252,232,225,236,230,
+ 247,233,228,244,104,128,255,144,238,117, 2,133, 15,133, 60,115,
+ 132, 34, 18,133, 27,133, 38,133, 47,133, 53,226,229,236,239,247,
+ 227,237, 98,128, 3, 32,227,233,242,227,236,101,128, 34,150,237,
+ 239,100,128, 2,215,240,236,245,115,128, 34, 19,244,101,128, 32,
+ 50,242,105, 2,133, 72,133, 86,226,225,225,242,245,243,241,245,
+ 225,242,101,128, 51, 74,243,241,245,225,242,101,128, 51, 73,108,
+ 2,133,101,133,116,239,238,231,236,229,231,244,245,242,238,229,
+ 100,128, 2,112,243,241,245,225,242,101,128, 51,150,109, 3,133,
+ 133,133,147,133,158,227,245,226,229,228,243,241,245,225,242,101,
+ 128, 51,163,239,238,239,243,240,225,227,101,128,255, 77,243,241,
+ 245,225,242,229,228,243,241,245,225,242,101,128, 51,159,111, 5,
+ 133,186,133,212,133,237,133,247,134, 0,104, 2,133,192,133,202,
+ 233,242,225,231,225,238, 97,128, 48,130,237,243,241,245,225,242,
+ 101,128, 51,193,235,225,244,225,235,225,238, 97,129, 48,226,133,
+ 225,232,225,236,230,247,233,228,244,104,128,255,147,236,243,241,
+ 245,225,242,101,128, 51,214,237,225,244,232,225,105,128, 14, 33,
+ 246,229,242,243,243,241,245,225,242,101,129, 51,167,134, 15,228,
+ 243,241,245,225,242,101,128, 51,168,240, 97, 2,134, 32,134, 38,
+ 242,229,110,128, 36,168,243,241,245,225,242,101,128, 51,171,115,
+ 2,134, 53,134, 62,243,241,245,225,242,101,128, 51,179,245,240,
+ 229,242,233,239,114,128,246,239,244,245,242,238,229,100,128, 2,
+ 111,117,141, 0,181,134,111,134,115,134,125,134,149,134,159,134,
+ 181,134,192,134,217,134,240,134,250,135, 24,135, 88,135, 98, 49,
+ 128, 0,181,225,243,241,245,225,242,101,128, 51,130,227,104, 2,
+ 134,132,134,142,231,242,229,225,244,229,114,128, 34,107,236,229,
+ 243,115,128, 34,106,230,243,241,245,225,242,101,128, 51,140,103,
+ 2,134,165,134,172,242,229,229,107,128, 3,188,243,241,245,225,
+ 242,101,128, 51,141,232,233,242,225,231,225,238, 97,128, 48,128,
+ 235,225,244,225,235,225,238, 97,129, 48,224,134,205,232,225,236,
+ 230,247,233,228,244,104,128,255,145,108, 2,134,223,134,232,243,
+ 241,245,225,242,101,128, 51,149,244,233,240,236,121,128, 0,215,
+ 237,243,241,245,225,242,101,128, 51,155,238,225,104, 2,135, 2,
+ 135, 11,232,229,226,242,229,119,128, 5,163,236,229,230,244,232,
+ 229,226,242,229,119,128, 5,163,115, 2,135, 30,135, 79,233, 99,
+ 3,135, 39,135, 56,135, 67,225,236,238,239,244,101,129, 38,106,
+ 135, 50,228,226,108,128, 38,107,230,236,225,244,243,233,231,110,
+ 128, 38,109,243,232,225,242,240,243,233,231,110,128, 38,111,243,
+ 241,245,225,242,101,128, 51,178,246,243,241,245,225,242,101,128,
+ 51,182,247,243,241,245,225,242,101,128, 51,188,118, 2,135,114,
+ 135,127,237,229,231,225,243,241,245,225,242,101,128, 51,185,243,
+ 241,245,225,242,101,128, 51,183,119, 2,135,142,135,155,237,229,
+ 231,225,243,241,245,225,242,101,128, 51,191,243,241,245,225,242,
+ 101,128, 51,189,110,150, 0,110,135,212,136, 90,136,114,136,180,
+ 136,205,137, 7,137, 17,137, 84,137,127,139,161,139,179,139,204,
+ 139,235,140, 5,140, 70,142, 52,142, 60,142, 85,142, 93,143, 61,
+ 143, 71,143, 81, 97, 8,135,230,135,250,136, 1,136, 8,136, 33,
+ 136, 44,136, 69,136, 81, 98, 2,135,236,135,245,229,238,231,225,
+ 236,105,128, 9,168,236, 97,128, 34, 7,227,245,244,101,128, 1,
+ 68,228,229,246, 97,128, 9, 40,231,117, 2,136, 15,136, 24,234,
+ 225,242,225,244,105,128, 10,168,242,237,245,235,232,105,128, 10,
+ 40,232,233,242,225,231,225,238, 97,128, 48,106,235,225,244,225,
+ 235,225,238, 97,129, 48,202,136, 57,232,225,236,230,247,233,228,
+ 244,104,128,255,133,240,239,243,244,242,239,240,232,101,128, 1,
+ 73,243,241,245,225,242,101,128, 51,129, 98, 2,136, 96,136,106,
+ 239,240,239,237,239,230,111,128, 49, 11,243,240,225,227,101,128,
+ 0,160, 99, 4,136,124,136,131,136,140,136,167,225,242,239,110,
+ 128, 1, 72,229,228,233,236,236, 97,128, 1, 70,233,242, 99, 2,
+ 136,148,136,153,236,101,128, 36,221,245,237,230,236,229,248,226,
+ 229,236,239,119,128, 30, 75,239,237,237,225,225,227,227,229,238,
+ 116,128, 1, 70,228,239,116, 2,136,188,136,197,225,227,227,229,
+ 238,116,128, 30, 69,226,229,236,239,119,128, 30, 71,101, 3,136,
+ 213,136,224,136,249,232,233,242,225,231,225,238, 97,128, 48,109,
+ 235,225,244,225,235,225,238, 97,129, 48,205,136,237,232,225,236,
+ 230,247,233,228,244,104,128,255,136,247,243,232,229,241,229,236,
+ 243,233,231,110,128, 32,170,230,243,241,245,225,242,101,128, 51,
+ 139,103, 2,137, 23,137, 73, 97, 3,137, 31,137, 41,137, 48,226,
+ 229,238,231,225,236,105,128, 9,153,228,229,246, 97,128, 9, 25,
+ 231,117, 2,137, 55,137, 64,234,225,242,225,244,105,128, 10,153,
+ 242,237,245,235,232,105,128, 10, 25,239,238,231,245,244,232,225,
+ 105,128, 14, 7,104, 2,137, 90,137,100,233,242,225,231,225,238,
+ 97,128, 48,147,239,239,107, 2,137,108,137,115,236,229,230,116,
+ 128, 2,114,242,229,244,242,239,230,236,229,120,128, 2,115,105,
+ 4,137,137,138, 50,138, 61,138,119,229,245,110, 7,137,155,137,
+ 190,137,222,137,236,137,245,138, 22,138, 35, 97, 2,137,161,137,
+ 176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,111,
+ 240,225,242,229,238,235,239,242,229,225,110,128, 50, 15,227,105,
+ 2,137,197,137,209,229,245,227,235,239,242,229,225,110,128, 49,
+ 53,242,227,236,229,235,239,242,229,225,110,128, 50, 97,232,233,
+ 229,245,232,235,239,242,229,225,110,128, 49, 54,235,239,242,229,
+ 225,110,128, 49, 52,240, 97, 2,137,252,138, 10,238,243,233,239,
+ 243,235,239,242,229,225,110,128, 49,104,242,229,238,235,239,242,
+ 229,225,110,128, 50, 1,243,233,239,243,235,239,242,229,225,110,
+ 128, 49,103,244,233,235,229,245,244,235,239,242,229,225,110,128,
+ 49,102,232,233,242,225,231,225,238, 97,128, 48,107,107, 2,138,
+ 67,138, 91,225,244,225,235,225,238, 97,129, 48,203,138, 79,232,
+ 225,236,230,247,233,228,244,104,128,255,134,232,225,232,233,116,
+ 2,138,101,138,112,236,229,230,244,244,232,225,105,128,248,153,
+ 244,232,225,105,128, 14, 77,238,101,141, 0, 57,138,150,138,159,
+ 138,169,138,199,138,206,138,231,139, 2,139, 36,139, 48,139, 59,
+ 139, 92,139,100,139,111,225,242,225,226,233, 99,128, 6,105,226,
+ 229,238,231,225,236,105,128, 9,239,227,233,242,227,236,101,129,
+ 36,104,138,180,233,238,246,229,242,243,229,243,225,238,243,243,
+ 229,242,233,102,128, 39,146,228,229,246, 97,128, 9,111,231,117,
+ 2,138,213,138,222,234,225,242,225,244,105,128, 10,239,242,237,
+ 245,235,232,105,128, 10,111,232, 97, 2,138,238,138,249,227,235,
+ 225,242,225,226,233, 99,128, 6,105,238,231,250,232,239,117,128,
+ 48, 41,105, 2,139, 8,139, 26,228,229,239,231,242,225,240,232,
+ 233,227,240,225,242,229,110,128, 50, 40,238,230,229,242,233,239,
+ 114,128, 32,137,237,239,238,239,243,240,225,227,101,128,255, 25,
+ 239,236,228,243,244,249,236,101,128,247, 57,112, 2,139, 65,139,
+ 72,225,242,229,110,128, 36,124,229,114, 2,139, 79,139, 85,233,
+ 239,100,128, 36,144,243,233,225,110,128, 6,249,242,239,237,225,
+ 110,128, 33,120,243,245,240,229,242,233,239,114,128, 32,121,116,
+ 2,139,117,139,155,229,229,110, 2,139,125,139,134,227,233,242,
+ 227,236,101,128, 36,114,112, 2,139,140,139,147,225,242,229,110,
+ 128, 36,134,229,242,233,239,100,128, 36,154,232,225,105,128, 14,
+ 89,106,129, 1,204,139,167,229,227,249,242,233,236,236,233, 99,
+ 128, 4, 90,235,225,244,225,235,225,238, 97,129, 48,243,139,192,
+ 232,225,236,230,247,233,228,244,104,128,255,157,108, 2,139,210,
+ 139,224,229,231,242,233,231,232,244,236,239,238,103,128, 1,158,
+ 233,238,229,226,229,236,239,119,128, 30, 73,109, 2,139,241,139,
+ 252,239,238,239,243,240,225,227,101,128,255, 78,243,241,245,225,
+ 242,101,128, 51,154,110, 2,140, 11,140, 61, 97, 3,140, 19,140,
+ 29,140, 36,226,229,238,231,225,236,105,128, 9,163,228,229,246,
+ 97,128, 9, 35,231,117, 2,140, 43,140, 52,234,225,242,225,244,
+ 105,128, 10,163,242,237,245,235,232,105,128, 10, 35,238,225,228,
+ 229,246, 97,128, 9, 41,111, 6,140, 84,140, 95,140,120,140,161,
+ 141,113,142, 40,232,233,242,225,231,225,238, 97,128, 48,110,235,
+ 225,244,225,235,225,238, 97,129, 48,206,140,108,232,225,236,230,
+ 247,233,228,244,104,128,255,137,110, 3,140,128,140,144,140,153,
+ 226,242,229,225,235,233,238,231,243,240,225,227,101,128, 0,160,
+ 229,238,244,232,225,105,128, 14, 19,245,244,232,225,105,128, 14,
+ 25,239,110, 7,140,178,140,187,140,201,140,235,140,251,141, 36,
+ 141, 95,225,242,225,226,233, 99,128, 6, 70,230,233,238,225,236,
+ 225,242,225,226,233, 99,128,254,230,231,232,245,238,238, 97, 2,
+ 140,212,140,221,225,242,225,226,233, 99,128, 6,186,230,233,238,
+ 225,236,225,242,225,226,233, 99,128,251,159,233,238,233,244,233,
+ 225,236,225,242,225,226,233, 99,128,254,231,234,229,229,237,105,
+ 2,141, 5,141, 20,238,233,244,233,225,236,225,242,225,226,233,
+ 99,128,252,210,243,239,236,225,244,229,228,225,242,225,226,233,
+ 99,128,252, 75,237,101, 2,141, 43,141, 56,228,233,225,236,225,
+ 242,225,226,233, 99,128,254,232,229,237,105, 2,141, 64,141, 79,
+ 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,213,243,
+ 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 78,238,
+ 239,239,238,230,233,238,225,236,225,242,225,226,233, 99,128,252,
+ 141,116, 7,141,129,141,140,141,169,141,204,141,216,141,236,142,
+ 6,227,239,238,244,225,233,238,115,128, 34, 12,101, 2,141,146,
+ 141,162,236,229,237,229,238,116,129, 34, 9,141,157,239,102,128,
+ 34, 9,241,245,225,108,128, 34, 96,231,242,229,225,244,229,114,
+ 129, 34,111,141,181,238,239,114, 2,141,189,141,197,229,241,245,
+ 225,108,128, 34,113,236,229,243,115,128, 34,121,233,228,229,238,
+ 244,233,227,225,108,128, 34, 98,236,229,243,115,129, 34,110,141,
+ 225,238,239,242,229,241,245,225,108,128, 34,112,112, 2,141,242,
+ 141,252,225,242,225,236,236,229,108,128, 34, 38,242,229,227,229,
+ 228,229,115,128, 34,128,243,117, 3,142, 15,142, 22,142, 31,226,
+ 243,229,116,128, 34,132,227,227,229,229,228,115,128, 34,129,240,
+ 229,242,243,229,116,128, 34,133,247,225,242,237,229,238,233,225,
+ 110,128, 5,118,240,225,242,229,110,128, 36,169,115, 2,142, 66,
+ 142, 75,243,241,245,225,242,101,128, 51,177,245,240,229,242,233,
+ 239,114,128, 32,127,244,233,236,228,101,128, 0,241,117,132, 3,
+ 189,142,105,142,116,142,197,143, 24,232,233,242,225,231,225,238,
+ 97,128, 48,108,107, 2,142,122,142,146,225,244,225,235,225,238,
+ 97,129, 48,204,142,134,232,225,236,230,247,233,228,244,104,128,
+ 255,135,244, 97, 3,142,155,142,165,142,172,226,229,238,231,225,
+ 236,105,128, 9,188,228,229,246, 97,128, 9, 60,231,117, 2,142,
+ 179,142,188,234,225,242,225,244,105,128, 10,188,242,237,245,235,
+ 232,105,128, 10, 60,109, 2,142,203,142,237,226,229,242,243,233,
+ 231,110,130, 0, 35,142,217,142,229,237,239,238,239,243,240,225,
+ 227,101,128,255, 3,243,237,225,236,108,128,254, 95,229,114, 2,
+ 142,244,143, 20,225,236,243,233,231,110, 2,142,255,143, 7,231,
+ 242,229,229,107,128, 3,116,236,239,247,229,242,231,242,229,229,
+ 107,128, 3,117,111,128, 33, 22,110,130, 5,224,143, 32,143, 52,
+ 228,225,231,229,243,104,129,251, 64,143, 43,232,229,226,242,229,
+ 119,128,251, 64,232,229,226,242,229,119,128, 5,224,246,243,241,
+ 245,225,242,101,128, 51,181,247,243,241,245,225,242,101,128, 51,
+ 187,249, 97, 3,143, 90,143,100,143,107,226,229,238,231,225,236,
+ 105,128, 9,158,228,229,246, 97,128, 9, 30,231,117, 2,143,114,
+ 143,123,234,225,242,225,244,105,128, 10,158,242,237,245,235,232,
+ 105,128, 10, 30,111,147, 0,111,143,174,143,196,144, 18,144,188,
+ 145, 4,145, 19,145, 59,145,182,145,203,145,241,145,252,146,174,
+ 148, 8,148, 72,148,105,148,151,149, 24,149, 71,149, 83, 97, 2,
+ 143,180,143,187,227,245,244,101,128, 0,243,238,231,244,232,225,
+ 105,128, 14, 45, 98, 4,143,206,143,248,144, 1,144, 11,225,242,
+ 242,229,100,130, 2,117,143,218,143,229,227,249,242,233,236,236,
+ 233, 99,128, 4,233,228,233,229,242,229,243,233,243,227,249,242,
+ 233,236,236,233, 99,128, 4,235,229,238,231,225,236,105,128, 9,
+ 147,239,240,239,237,239,230,111,128, 49, 27,242,229,246,101,128,
+ 1, 79, 99, 3,144, 26,144, 99,144,178, 97, 2,144, 32,144, 93,
+ 238,228,242, 97, 3,144, 43,144, 50,144, 61,228,229,246, 97,128,
+ 9, 17,231,245,234,225,242,225,244,105,128, 10,145,246,239,247,
+ 229,236,243,233,231,110, 2,144, 75,144, 82,228,229,246, 97,128,
+ 9, 73,231,245,234,225,242,225,244,105,128, 10,201,242,239,110,
+ 128, 1,210,233,242, 99, 2,144,107,144,112,236,101,128, 36,222,
+ 245,237,230,236,229,120,133, 0,244,144,131,144,139,144,150,144,
+ 158,144,170,225,227,245,244,101,128, 30,209,228,239,244,226,229,
+ 236,239,119,128, 30,217,231,242,225,246,101,128, 30,211,232,239,
+ 239,235,225,226,239,246,101,128, 30,213,244,233,236,228,101,128,
+ 30,215,249,242,233,236,236,233, 99,128, 4, 62,100, 4,144,198,
+ 144,221,144,227,144,250,226,108, 2,144,205,144,213,225,227,245,
+ 244,101,128, 1, 81,231,242,225,246,101,128, 2, 13,229,246, 97,
+ 128, 9, 19,233,229,242,229,243,233,115,129, 0,246,144,239,227,
+ 249,242,233,236,236,233, 99,128, 4,231,239,244,226,229,236,239,
+ 119,128, 30,205,101,129, 1, 83,145, 10,235,239,242,229,225,110,
+ 128, 49, 90,103, 3,145, 27,145, 42,145, 49,239,238,229,107,129,
+ 2,219,145, 36,227,237, 98,128, 3, 40,242,225,246,101,128, 0,
+ 242,245,234,225,242,225,244,105,128, 10,147,104, 4,145, 69,145,
+ 80,145, 90,145,168,225,242,237,229,238,233,225,110,128, 5,133,
+ 233,242,225,231,225,238, 97,128, 48, 74,111, 2,145, 96,145,106,
+ 239,235,225,226,239,246,101,128, 30,207,242,110,133, 1,161,145,
+ 121,145,129,145,140,145,148,145,160,225,227,245,244,101,128, 30,
+ 219,228,239,244,226,229,236,239,119,128, 30,227,231,242,225,246,
+ 101,128, 30,221,232,239,239,235,225,226,239,246,101,128, 30,223,
+ 244,233,236,228,101,128, 30,225,245,238,231,225,242,245,237,236,
+ 225,245,116,128, 1, 81,105,129, 1,163,145,188,238,246,229,242,
+ 244,229,228,226,242,229,246,101,128, 2, 15,107, 2,145,209,145,
+ 233,225,244,225,235,225,238, 97,129, 48,170,145,221,232,225,236,
+ 230,247,233,228,244,104,128,255,117,239,242,229,225,110,128, 49,
+ 87,236,229,232,229,226,242,229,119,128, 5,171,109, 6,146, 10,
+ 146, 38,146, 45,146,134,146,145,146,163,225,227,242,239,110,130,
+ 1, 77,146, 22,146, 30,225,227,245,244,101,128, 30, 83,231,242,
+ 225,246,101,128, 30, 81,228,229,246, 97,128, 9, 80,229,231, 97,
+ 133, 3,201,146, 61,146, 65,146, 76,146, 90,146,106, 49,128, 3,
+ 214,227,249,242,233,236,236,233, 99,128, 4, 97,236,225,244,233,
+ 238,227,236,239,243,229,100,128, 2,119,242,239,245,238,228,227,
+ 249,242,233,236,236,233, 99,128, 4,123,116, 2,146,112,146,127,
+ 233,244,236,239,227,249,242,233,236,236,233, 99,128, 4,125,239,
+ 238,239,115,128, 3,206,231,245,234,225,242,225,244,105,128, 10,
+ 208,233,227,242,239,110,129, 3,191,146,155,244,239,238,239,115,
+ 128, 3,204,239,238,239,243,240,225,227,101,128,255, 79,238,101,
+ 145, 0, 49,146,213,146,222,146,232,147, 6,147, 31,147, 40,147,
+ 49,147, 74,147,108,147,142,147,154,147,173,147,184,147,217,147,
+ 227,147,235,147,246,225,242,225,226,233, 99,128, 6, 97,226,229,
+ 238,231,225,236,105,128, 9,231,227,233,242,227,236,101,129, 36,
+ 96,146,243,233,238,246,229,242,243,229,243,225,238,243,243,229,
+ 242,233,102,128, 39,138,100, 2,147, 12,147, 18,229,246, 97,128,
+ 9,103,239,244,229,238,236,229,225,228,229,114,128, 32, 36,229,
+ 233,231,232,244,104,128, 33, 91,230,233,244,244,229,100,128,246,
+ 220,231,117, 2,147, 56,147, 65,234,225,242,225,244,105,128, 10,
+ 231,242,237,245,235,232,105,128, 10,103,232, 97, 3,147, 83,147,
+ 94,147, 99,227,235,225,242,225,226,233, 99,128, 6, 97,236,102,
+ 128, 0,189,238,231,250,232,239,117,128, 48, 33,105, 2,147,114,
+ 147,132,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
+ 110,128, 50, 32,238,230,229,242,233,239,114,128, 32,129,237,239,
+ 238,239,243,240,225,227,101,128,255, 17,238,245,237,229,242,225,
+ 244,239,242,226,229,238,231,225,236,105,128, 9,244,239,236,228,
+ 243,244,249,236,101,128,247, 49,112, 2,147,190,147,197,225,242,
+ 229,110,128, 36,116,229,114, 2,147,204,147,210,233,239,100,128,
+ 36,136,243,233,225,110,128, 6,241,241,245,225,242,244,229,114,
+ 128, 0,188,242,239,237,225,110,128, 33,112,243,245,240,229,242,
+ 233,239,114,128, 0,185,244,104, 2,147,253,148, 2,225,105,128,
+ 14, 81,233,242,100,128, 33, 83,111, 3,148, 16,148, 50,148, 66,
+ 103, 2,148, 22,148, 40,239,238,229,107,129, 1,235,148, 31,237,
+ 225,227,242,239,110,128, 1,237,245,242,237,245,235,232,105,128,
+ 10, 19,237,225,244,242,225,231,245,242,237,245,235,232,105,128,
+ 10, 75,240,229,110,128, 2, 84,112, 3,148, 80,148, 87,148, 98,
+ 225,242,229,110,128, 36,170,229,238,226,245,236,236,229,116,128,
+ 37,230,244,233,239,110,128, 35, 37,114, 2,148,111,148,140,100,
+ 2,148,117,148,128,230,229,237,233,238,233,238,101,128, 0,170,
+ 237,225,243,227,245,236,233,238,101,128, 0,186,244,232,239,231,
+ 239,238,225,108,128, 34, 31,115, 5,148,163,148,195,148,212,149,
+ 1,149, 14,232,239,242,116, 2,148,172,148,179,228,229,246, 97,
+ 128, 9, 18,246,239,247,229,236,243,233,231,238,228,229,246, 97,
+ 128, 9, 74,236,225,243,104,129, 0,248,148,204,225,227,245,244,
+ 101,128, 1,255,237,225,236,108, 2,148,221,148,232,232,233,242,
+ 225,231,225,238, 97,128, 48, 73,235,225,244,225,235,225,238, 97,
+ 129, 48,169,148,245,232,225,236,230,247,233,228,244,104,128,255,
+ 107,244,242,239,235,229,225,227,245,244,101,128, 1,255,245,240,
+ 229,242,233,239,114,128,246,240,116, 2,149, 30,149, 41,227,249,
+ 242,233,236,236,233, 99,128, 4,127,233,236,228,101,130, 0,245,
+ 149, 52,149, 60,225,227,245,244,101,128, 30, 77,228,233,229,242,
+ 229,243,233,115,128, 30, 79,245,226,239,240,239,237,239,230,111,
+ 128, 49, 33,118, 2,149, 89,149,170,229,114, 2,149, 96,149,162,
+ 236,233,238,101,131, 32, 62,149,109,149,132,149,155, 99, 2,149,
+ 115,149,127,229,238,244,229,242,236,233,238,101,128,254, 74,237,
+ 98,128, 3, 5,100, 2,149,138,149,146,225,243,232,229,100,128,
+ 254, 73,226,236,247,225,246,121,128,254, 76,247,225,246,121,128,
+ 254, 75,243,227,239,242,101,128, 0,175,239,247,229,236,243,233,
+ 231,110, 3,149,185,149,195,149,202,226,229,238,231,225,236,105,
+ 128, 9,203,228,229,246, 97,128, 9, 75,231,245,234,225,242,225,
+ 244,105,128, 10,203,112,145, 0,112,149,251,152,123,152,134,152,
+ 143,152,155,154, 80,154, 90,155, 82,156,101,156,191,156,217,157,
+ 92,157,100,158, 2,158, 60,158, 88,158, 98, 97, 14,150, 25,150,
+ 57,150, 67,150, 74,150, 81,150,129,150,140,150,154,150,165,150,
+ 212,150,226,151,238,152, 21,152,111, 97, 2,150, 31,150, 43,237,
+ 240,243,243,241,245,225,242,101,128, 51,128,243,229,238,244,239,
+ 243,241,245,225,242,101,128, 51, 43,226,229,238,231,225,236,105,
+ 128, 9,170,227,245,244,101,128, 30, 85,228,229,246, 97,128, 9,
+ 42,103, 2,150, 87,150,105,101, 2,150, 93,150,100,228,239,247,
+ 110,128, 33,223,245,112,128, 33,222,117, 2,150,111,150,120,234,
+ 225,242,225,244,105,128, 10,170,242,237,245,235,232,105,128, 10,
+ 42,232,233,242,225,231,225,238, 97,128, 48,113,233,249,225,238,
+ 238,239,233,244,232,225,105,128, 14, 47,235,225,244,225,235,225,
+ 238, 97,128, 48,209,108, 2,150,171,150,196,225,244,225,236,233,
+ 250,225,244,233,239,238,227,249,242,233,236,236,233,227,227,237,
+ 98,128, 4,132,239,227,232,235,225,227,249,242,233,236,236,233,
+ 99,128, 4,192,238,243,233,239,243,235,239,242,229,225,110,128,
+ 49,127,114, 3,150,234,150,255,151,227, 97, 2,150,240,150,248,
+ 231,242,225,240,104,128, 0,182,236,236,229,108,128, 34, 37,229,
+ 110, 2,151, 6,151,116,236,229,230,116,136, 0, 40,151, 29,151,
+ 44,151, 49,151, 54,151, 65,151, 77,151,100,151,105,225,236,244,
+ 239,238,229,225,242,225,226,233, 99,128,253, 62,226,116,128,248,
+ 237,229,120,128,248,236,233,238,230,229,242,233,239,114,128, 32,
+ 141,237,239,238,239,243,240,225,227,101,128,255, 8,115, 2,151,
+ 83,151, 90,237,225,236,108,128,254, 89,245,240,229,242,233,239,
+ 114,128, 32,125,244,112,128,248,235,246,229,242,244,233,227,225,
+ 108,128,254, 53,242,233,231,232,116,136, 0, 41,151,140,151,155,
+ 151,160,151,165,151,176,151,188,151,211,151,216,225,236,244,239,
+ 238,229,225,242,225,226,233, 99,128,253, 63,226,116,128,248,248,
+ 229,120,128,248,247,233,238,230,229,242,233,239,114,128, 32,142,
+ 237,239,238,239,243,240,225,227,101,128,255, 9,115, 2,151,194,
+ 151,201,237,225,236,108,128,254, 90,245,240,229,242,233,239,114,
+ 128, 32,126,244,112,128,248,246,246,229,242,244,233,227,225,108,
+ 128,254, 54,244,233,225,236,228,233,230,102,128, 34, 2,115, 3,
+ 151,246,152, 1,152, 13,229,241,232,229,226,242,229,119,128, 5,
+ 192,232,244,225,232,229,226,242,229,119,128, 5,153,241,245,225,
+ 242,101,128, 51,169,244,225,104,134, 5,183,152, 39,152, 53,152,
+ 58,152, 67,152, 82,152, 98, 49, 2,152, 45,152, 49, 49,128, 5,
+ 183,100,128, 5,183,178, 97,128, 5,183,232,229,226,242,229,119,
+ 128, 5,183,238,225,242,242,239,247,232,229,226,242,229,119,128,
+ 5,183,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
+ 5,183,247,233,228,229,232,229,226,242,229,119,128, 5,183,250,
+ 229,242,232,229,226,242,229,119,128, 5,161,226,239,240,239,237,
+ 239,230,111,128, 49, 6,227,233,242,227,236,101,128, 36,223,228,
+ 239,244,225,227,227,229,238,116,128, 30, 87,101,137, 5,228,152,
+ 177,152,188,152,208,152,220,152,240,153, 86,153, 97,153,118,154,
+ 73,227,249,242,233,236,236,233, 99,128, 4, 63,228,225,231,229,
+ 243,104,129,251, 68,152,199,232,229,226,242,229,119,128,251, 68,
+ 229,250,233,243,241,245,225,242,101,128, 51, 59,230,233,238,225,
+ 236,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 67,
+ 104, 5,152,252,153, 19,153, 27,153, 41,153, 71,225,114, 2,153,
+ 3,153, 10,225,226,233, 99,128, 6,126,237,229,238,233,225,110,
+ 128, 5,122,229,226,242,229,119,128, 5,228,230,233,238,225,236,
+ 225,242,225,226,233, 99,128,251, 87,105, 2,153, 47,153, 62,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,251, 88,242,225,
+ 231,225,238, 97,128, 48,122,237,229,228,233,225,236,225,242,225,
+ 226,233, 99,128,251, 89,235,225,244,225,235,225,238, 97,128, 48,
+ 218,237,233,228,228,236,229,232,239,239,235,227,249,242,233,236,
+ 236,233, 99,128, 4,167,114, 5,153,130,153,142,153,184,154, 49,
+ 154, 62,225,230,229,232,229,226,242,229,119,128,251, 78,227,229,
+ 238,116,131, 0, 37,153,155,153,164,153,176,225,242,225,226,233,
+ 99,128, 6,106,237,239,238,239,243,240,225,227,101,128,255, 5,
+ 243,237,225,236,108,128,254,106,105, 2,153,190,154, 31,239,100,
+ 134, 0, 46,153,207,153,218,153,229,153,241,153,252,154, 8,225,
+ 242,237,229,238,233,225,110,128, 5,137,227,229,238,244,229,242,
+ 229,100,128, 0,183,232,225,236,230,247,233,228,244,104,128,255,
+ 97,233,238,230,229,242,233,239,114,128,246,231,237,239,238,239,
+ 243,240,225,227,101,128,255, 14,115, 2,154, 14,154, 21,237,225,
+ 236,108,128,254, 82,245,240,229,242,233,239,114,128,246,232,243,
+ 240,239,237,229,238,233,231,242,229,229,235,227,237, 98,128, 3,
+ 66,240,229,238,228,233,227,245,236,225,114,128, 34,165,244,232,
+ 239,245,243,225,238,100,128, 32, 48,243,229,244, 97,128, 32,167,
+ 230,243,241,245,225,242,101,128, 51,138,104, 3,154, 98,154,148,
+ 155, 29, 97, 3,154,106,154,116,154,123,226,229,238,231,225,236,
+ 105,128, 9,171,228,229,246, 97,128, 9, 43,231,117, 2,154,130,
+ 154,139,234,225,242,225,244,105,128, 10,171,242,237,245,235,232,
+ 105,128, 10, 43,105,133, 3,198,154,162,154,166,154,252,155, 4,
+ 155, 15, 49,128, 3,213,229,245,240,104, 4,154,179,154,214,154,
+ 229,154,238, 97, 2,154,185,154,200,227,233,242,227,236,229,235,
+ 239,242,229,225,110,128, 50,122,240,225,242,229,238,235,239,242,
+ 229,225,110,128, 50, 26,227,233,242,227,236,229,235,239,242,229,
+ 225,110,128, 50,108,235,239,242,229,225,110,128, 49, 77,240,225,
+ 242,229,238,235,239,242,229,225,110,128, 50, 12,236,225,244,233,
+ 110,128, 2,120,238,244,232,245,244,232,225,105,128, 14, 58,243,
+ 249,237,226,239,236,231,242,229,229,107,128, 3,213,111, 3,155,
+ 37,155, 42,155, 68,239,107,128, 1,165,240,104, 2,155, 49,155,
+ 58,225,238,244,232,225,105,128, 14, 30,245,238,231,244,232,225,
+ 105,128, 14, 28,243,225,237,240,232,225,239,244,232,225,105,128,
+ 14, 32,105,133, 3,192,155, 96,156, 52,156, 63,156, 74,156, 88,
+ 229,245,112, 6,155,112,155,147,155,179,155,207,155,221,156, 17,
+ 97, 2,155,118,155,133,227,233,242,227,236,229,235,239,242,229,
+ 225,110,128, 50,115,240,225,242,229,238,235,239,242,229,225,110,
+ 128, 50, 19,227,105, 2,155,154,155,166,229,245,227,235,239,242,
+ 229,225,110,128, 49,118,242,227,236,229,235,239,242,229,225,110,
+ 128, 50,101,107, 2,155,185,155,199,233,249,229,239,235,235,239,
+ 242,229,225,110,128, 49,114,239,242,229,225,110,128, 49, 66,240,
+ 225,242,229,238,235,239,242,229,225,110,128, 50, 5,243,233,239,
+ 115, 2,155,230,156, 2,107, 2,155,236,155,250,233,249,229,239,
+ 235,235,239,242,229,225,110,128, 49,116,239,242,229,225,110,128,
+ 49, 68,244,233,235,229,245,244,235,239,242,229,225,110,128, 49,
+ 117,116, 2,156, 23,156, 38,232,233,229,245,244,232,235,239,242,
+ 229,225,110,128, 49,119,233,235,229,245,244,235,239,242,229,225,
+ 110,128, 49,115,232,233,242,225,231,225,238, 97,128, 48,116,235,
+ 225,244,225,235,225,238, 97,128, 48,212,243,249,237,226,239,236,
+ 231,242,229,229,107,128, 3,214,247,242,225,242,237,229,238,233,
+ 225,110,128, 5,131,236,245,115,132, 0, 43,156,115,156,126,156,
+ 135,156,168,226,229,236,239,247,227,237, 98,128, 3, 31,227,233,
+ 242,227,236,101,128, 34,149,109, 2,156,141,156,148,233,238,245,
+ 115,128, 0,177,111, 2,156,154,156,158,100,128, 2,214,238,239,
+ 243,240,225,227,101,128,255, 11,115, 2,156,174,156,181,237,225,
+ 236,108,128,254, 98,245,240,229,242,233,239,114,128, 32,122,109,
+ 2,156,197,156,208,239,238,239,243,240,225,227,101,128,255, 80,
+ 243,241,245,225,242,101,128, 51,216,111, 5,156,229,156,240,157,
+ 51,157, 62,157, 72,232,233,242,225,231,225,238, 97,128, 48,125,
+ 233,238,244,233,238,231,233,238,228,229,120, 4,157, 4,157, 16,
+ 157, 28,157, 41,228,239,247,238,247,232,233,244,101,128, 38, 31,
+ 236,229,230,244,247,232,233,244,101,128, 38, 28,242,233,231,232,
+ 244,247,232,233,244,101,128, 38, 30,245,240,247,232,233,244,101,
+ 128, 38, 29,235,225,244,225,235,225,238, 97,128, 48,221,240,236,
+ 225,244,232,225,105,128, 14, 27,243,244,225,236,237,225,242,107,
+ 129, 48, 18,157, 85,230,225,227,101,128, 48, 32,240,225,242,229,
+ 110,128, 36,171,114, 3,157,108,157,134,157,159,101, 2,157,114,
+ 157,122,227,229,228,229,115,128, 34,122,243,227,242,233,240,244,
+ 233,239,110,128, 33, 30,233,237,101, 2,157,142,157,148,237,239,
+ 100,128, 2,185,242,229,246,229,242,243,229,100,128, 32, 53,111,
+ 4,157,169,157,176,157,186,157,199,228,245,227,116,128, 34, 15,
+ 234,229,227,244,233,246,101,128, 35, 5,236,239,238,231,229,228,
+ 235,225,238, 97,128, 48,252,112, 2,157,205,157,242,101, 2,157,
+ 211,157,218,236,236,239,114,128, 35, 24,242,243,117, 2,157,226,
+ 157,233,226,243,229,116,128, 34,130,240,229,242,243,229,116,128,
+ 34,131,239,242,244,233,239,110,129, 34, 55,157,253,225,108,128,
+ 34, 29,115, 2,158, 8,158, 51,105,130, 3,200,158, 16,158, 27,
+ 227,249,242,233,236,236,233, 99,128, 4,113,236,233,240,238,229,
+ 245,237,225,244,225,227,249,242,233,236,236,233,227,227,237, 98,
+ 128, 4,134,243,241,245,225,242,101,128, 51,176,117, 2,158, 66,
+ 158, 77,232,233,242,225,231,225,238, 97,128, 48,119,235,225,244,
+ 225,235,225,238, 97,128, 48,215,246,243,241,245,225,242,101,128,
+ 51,180,247,243,241,245,225,242,101,128, 51,186,113,136, 0,113,
+ 158,128,159,177,159,188,159,197,159,204,159,216,159,254,160, 6,
+ 97, 4,158,138,158,161,158,225,159,160,100, 2,158,144,158,150,
+ 229,246, 97,128, 9, 88,237,225,232,229,226,242,229,119,128, 5,
+ 168,102, 4,158,171,158,180,158,194,158,210,225,242,225,226,233,
+ 99,128, 6, 66,230,233,238,225,236,225,242,225,226,233, 99,128,
+ 254,214,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+ 254,215,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,
+ 216,237,225,244,115,136, 5,184,158,248,159, 12,159, 26,159, 31,
+ 159, 36,159, 45,159, 60,159,147, 49, 3,159, 0,159, 4,159, 8,
+ 48,128, 5,184, 97,128, 5,184, 99,128, 5,184, 50, 2,159, 18,
+ 159, 22, 55,128, 5,184, 57,128, 5,184,179, 51,128, 5,184,228,
+ 101,128, 5,184,232,229,226,242,229,119,128, 5,184,238,225,242,
+ 242,239,247,232,229,226,242,229,119,128, 5,184,113, 2,159, 66,
+ 159,132,225,244,225,110, 4,159, 79,159, 88,159,103,159,119,232,
+ 229,226,242,229,119,128, 5,184,238,225,242,242,239,247,232,229,
+ 226,242,229,119,128, 5,184,241,245,225,242,244,229,242,232,229,
+ 226,242,229,119,128, 5,184,247,233,228,229,232,229,226,242,229,
+ 119,128, 5,184,245,225,242,244,229,242,232,229,226,242,229,119,
+ 128, 5,184,247,233,228,229,232,229,226,242,229,119,128, 5,184,
+ 242,238,229,249,240,225,242,225,232,229,226,242,229,119,128, 5,
+ 159,226,239,240,239,237,239,230,111,128, 49, 17,227,233,242,227,
+ 236,101,128, 36,224,232,239,239,107,128, 2,160,237,239,238,239,
+ 243,240,225,227,101,128,255, 81,239,102,130, 5,231,159,225,159,
+ 245,228,225,231,229,243,104,129,251, 71,159,236,232,229,226,242,
+ 229,119,128,251, 71,232,229,226,242,229,119,128, 5,231,240,225,
+ 242,229,110,128, 36,172,117, 4,160, 16,160, 28,160,117,160,204,
+ 225,242,244,229,242,238,239,244,101,128, 38,105,226,245,244,115,
+ 135, 5,187,160, 49,160, 54,160, 59,160, 64,160, 73,160, 88,160,
+ 104,177, 56,128, 5,187,178, 53,128, 5,187,179, 49,128, 5,187,
+ 232,229,226,242,229,119,128, 5,187,238,225,242,242,239,247,232,
+ 229,226,242,229,119,128, 5,187,241,245,225,242,244,229,242,232,
+ 229,226,242,229,119,128, 5,187,247,233,228,229,232,229,226,242,
+ 229,119,128, 5,187,229,243,244,233,239,110,133, 0, 63,160,136,
+ 160,159,160,176,160,184,160,196,225,114, 2,160,143,160,150,225,
+ 226,233, 99,128, 6, 31,237,229,238,233,225,110,128, 5, 94,228,
+ 239,247,110,129, 0,191,160,168,243,237,225,236,108,128,247,191,
+ 231,242,229,229,107,128, 3,126,237,239,238,239,243,240,225,227,
+ 101,128,255, 31,243,237,225,236,108,128,247, 63,239,244,101, 4,
+ 160,216,161, 31,161, 51,161, 80,228,226,108,133, 0, 34,160,232,
+ 160,239,160,246,161, 2,161, 23,226,225,243,101,128, 32, 30,236,
+ 229,230,116,128, 32, 28,237,239,238,239,243,240,225,227,101,128,
+ 255, 2,240,242,233,237,101,129, 48, 30,161, 12,242,229,246,229,
+ 242,243,229,100,128, 48, 29,242,233,231,232,116,128, 32, 29,236,
+ 229,230,116,129, 32, 24,161, 40,242,229,246,229,242,243,229,100,
+ 128, 32, 27,114, 2,161, 57,161, 67,229,246,229,242,243,229,100,
+ 128, 32, 27,233,231,232,116,129, 32, 25,161, 76,110,128, 1, 73,
+ 243,233,238,231,108, 2,161, 90,161, 97,226,225,243,101,128, 32,
+ 26,101,129, 0, 39,161,103,237,239,238,239,243,240,225,227,101,
+ 128,255, 7,114,145, 0,114,161,153,162,157,162,168,162,215,163,
+ 10,164, 27,164, 51,164,146,166,180,166,217,166,229,167, 27,167,
+ 35,167,197,167,208,167,243,168, 87, 97, 11,161,177,161,188,161,
+ 198,161,205,162, 14,162, 30,162, 55,162, 66,162, 91,162,114,162,
+ 151,225,242,237,229,238,233,225,110,128, 5,124,226,229,238,231,
+ 225,236,105,128, 9,176,227,245,244,101,128, 1, 85,100, 4,161,
+ 215,161,221,161,235,162, 5,229,246, 97,128, 9, 48,233,227,225,
+ 108,129, 34, 26,161,230,229,120,128,248,229,239,246,229,242,243,
+ 243,241,245,225,242,101,129, 51,174,161,251,228,243,241,245,225,
+ 242,101,128, 51,175,243,241,245,225,242,101,128, 51,173,230,101,
+ 129, 5,191,162, 21,232,229,226,242,229,119,128, 5,191,231,117,
+ 2,162, 37,162, 46,234,225,242,225,244,105,128, 10,176,242,237,
+ 245,235,232,105,128, 10, 48,232,233,242,225,231,225,238, 97,128,
+ 48,137,235,225,244,225,235,225,238, 97,129, 48,233,162, 79,232,
+ 225,236,230,247,233,228,244,104,128,255,151,236,239,247,229,242,
+ 228,233,225,231,239,238,225,236,226,229,238,231,225,236,105,128,
+ 9,241,109, 2,162,120,162,143,233,228,228,236,229,228,233,225,
+ 231,239,238,225,236,226,229,238,231,225,236,105,128, 9,240,243,
+ 232,239,242,110,128, 2,100,244,233,111,128, 34, 54,226,239,240,
+ 239,237,239,230,111,128, 49, 22, 99, 4,162,178,162,185,162,194,
+ 162,202,225,242,239,110,128, 1, 89,229,228,233,236,236, 97,128,
+ 1, 87,233,242,227,236,101,128, 36,225,239,237,237,225,225,227,
+ 227,229,238,116,128, 1, 87,100, 2,162,221,162,231,226,236,231,
+ 242,225,246,101,128, 2, 17,239,116, 2,162,238,162,247,225,227,
+ 227,229,238,116,128, 30, 89,226,229,236,239,119,129, 30, 91,163,
+ 1,237,225,227,242,239,110,128, 30, 93,101, 6,163, 24,163, 69,
+ 163,104,163,159,163,184,163,217,102, 2,163, 30,163, 43,229,242,
+ 229,238,227,229,237,225,242,107,128, 32, 59,236,229,248,243,117,
+ 2,163, 53,163, 60,226,243,229,116,128, 34,134,240,229,242,243,
+ 229,116,128, 34,135,231,233,243,244,229,114, 2,163, 80,163, 85,
+ 229,100,128, 0,174,115, 2,163, 91,163, 97,225,238,115,128,248,
+ 232,229,242,233,102,128,246,218,104, 3,163,112,163,135,163,149,
+ 225,114, 2,163,119,163,126,225,226,233, 99,128, 6, 49,237,229,
+ 238,233,225,110,128, 5,128,230,233,238,225,236,225,242,225,226,
+ 233, 99,128,254,174,233,242,225,231,225,238, 97,128, 48,140,235,
+ 225,244,225,235,225,238, 97,129, 48,236,163,172,232,225,236,230,
+ 247,233,228,244,104,128,255,154,243,104,130, 5,232,163,193,163,
+ 208,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 72,
+ 232,229,226,242,229,119,128, 5,232,118, 3,163,225,163,238,164,
+ 14,229,242,243,229,228,244,233,236,228,101,128, 34, 61,233, 97,
+ 2,163,245,163,254,232,229,226,242,229,119,128, 5,151,237,245,
+ 231,242,225,243,232,232,229,226,242,229,119,128, 5,151,236,239,
+ 231,233,227,225,236,238,239,116,128, 35, 16,230,233,243,232,232,
+ 239,239,107,129, 2,126,164, 40,242,229,246,229,242,243,229,100,
+ 128, 2,127,104, 2,164, 57,164, 80, 97, 2,164, 63,164, 73,226,
+ 229,238,231,225,236,105,128, 9,221,228,229,246, 97,128, 9, 93,
+ 111,131, 3,193,164, 90,164,119,164,133,239,107,129, 2,125,164,
+ 97,244,245,242,238,229,100,129, 2,123,164,108,243,245,240,229,
+ 242,233,239,114,128, 2,181,243,249,237,226,239,236,231,242,229,
+ 229,107,128, 3,241,244,233,227,232,239,239,235,237,239,100,128,
+ 2,222,105, 6,164,160,165,204,165,250,166, 5,166, 30,166,166,
+ 229,245,108, 9,164,182,164,217,164,232,164,246,165, 36,165, 50,
+ 165,136,165,149,165,184, 97, 2,164,188,164,203,227,233,242,227,
+ 236,229,235,239,242,229,225,110,128, 50,113,240,225,242,229,238,
+ 235,239,242,229,225,110,128, 50, 17,227,233,242,227,236,229,235,
+ 239,242,229,225,110,128, 50, 99,232,233,229,245,232,235,239,242,
+ 229,225,110,128, 49, 64,107, 2,164,252,165, 28,233,249,229,239,
+ 107, 2,165, 6,165, 15,235,239,242,229,225,110,128, 49, 58,243,
+ 233,239,243,235,239,242,229,225,110,128, 49,105,239,242,229,225,
+ 110,128, 49, 57,237,233,229,245,237,235,239,242,229,225,110,128,
+ 49, 59,112, 3,165, 58,165, 90,165,105, 97, 2,165, 64,165, 78,
+ 238,243,233,239,243,235,239,242,229,225,110,128, 49,108,242,229,
+ 238,235,239,242,229,225,110,128, 50, 3,232,233,229,245,240,232,
+ 235,239,242,229,225,110,128, 49, 63,233,229,245,112, 2,165,114,
+ 165,123,235,239,242,229,225,110,128, 49, 60,243,233,239,243,235,
+ 239,242,229,225,110,128, 49,107,243,233,239,243,235,239,242,229,
+ 225,110,128, 49, 61,116, 2,165,155,165,170,232,233,229,245,244,
+ 232,235,239,242,229,225,110,128, 49, 62,233,235,229,245,244,235,
+ 239,242,229,225,110,128, 49,106,249,229,239,242,233,238,232,233,
+ 229,245,232,235,239,242,229,225,110,128, 49,109,231,232,116, 2,
+ 165,212,165,220,225,238,231,236,101,128, 34, 31,116, 2,165,226,
+ 165,240,225,227,235,226,229,236,239,247,227,237, 98,128, 3, 25,
+ 242,233,225,238,231,236,101,128, 34,191,232,233,242,225,231,225,
+ 238, 97,128, 48,138,235,225,244,225,235,225,238, 97,129, 48,234,
+ 166, 18,232,225,236,230,247,233,228,244,104,128,255,152,110, 2,
+ 166, 36,166,152,103,131, 2,218,166, 46,166, 57,166, 63,226,229,
+ 236,239,247,227,237, 98,128, 3, 37,227,237, 98,128, 3, 10,232,
+ 225,236,102, 2,166, 72,166,118,236,229,230,116,131, 2,191,166,
+ 85,166, 96,166,107,225,242,237,229,238,233,225,110,128, 5, 89,
+ 226,229,236,239,247,227,237, 98,128, 3, 28,227,229,238,244,229,
+ 242,229,100,128, 2,211,242,233,231,232,116,130, 2,190,166,130,
+ 166,141,226,229,236,239,247,227,237, 98,128, 3, 57,227,229,238,
+ 244,229,242,229,100,128, 2,210,246,229,242,244,229,228,226,242,
+ 229,246,101,128, 2, 19,244,244,239,242,245,243,241,245,225,242,
+ 101,128, 51, 81,108, 2,166,186,166,197,233,238,229,226,229,236,
+ 239,119,128, 30, 95,239,238,231,236,229,103,129, 2,124,166,208,
+ 244,245,242,238,229,100,128, 2,122,237,239,238,239,243,240,225,
+ 227,101,128,255, 82,111, 3,166,237,166,248,167, 17,232,233,242,
+ 225,231,225,238, 97,128, 48,141,235,225,244,225,235,225,238, 97,
+ 129, 48,237,167, 5,232,225,236,230,247,233,228,244,104,128,255,
+ 155,242,245,225,244,232,225,105,128, 14, 35,240,225,242,229,110,
+ 128, 36,173,114, 3,167, 43,167, 79,167,109, 97, 3,167, 51,167,
+ 61,167, 68,226,229,238,231,225,236,105,128, 9,220,228,229,246,
+ 97,128, 9, 49,231,245,242,237,245,235,232,105,128, 10, 92,229,
+ 104, 2,167, 86,167, 95,225,242,225,226,233, 99,128, 6,145,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,251,141,246,239,227,
+ 225,236,233, 99, 4,167,125,167,135,167,142,167,153,226,229,238,
+ 231,225,236,105,128, 9,224,228,229,246, 97,128, 9, 96,231,245,
+ 234,225,242,225,244,105,128, 10,224,246,239,247,229,236,243,233,
+ 231,110, 3,167,169,167,179,167,186,226,229,238,231,225,236,105,
+ 128, 9,196,228,229,246, 97,128, 9, 68,231,245,234,225,242,225,
+ 244,105,128, 10,196,243,245,240,229,242,233,239,114,128,246,241,
+ 116, 2,167,214,167,222,226,236,239,227,107,128, 37,144,245,242,
+ 238,229,100,129, 2,121,167,232,243,245,240,229,242,233,239,114,
+ 128, 2,180,117, 4,167,253,168, 8,168, 33,168, 80,232,233,242,
+ 225,231,225,238, 97,128, 48,139,235,225,244,225,235,225,238, 97,
+ 129, 48,235,168, 21,232,225,236,230,247,233,228,244,104,128,255,
+ 153,112, 2,168, 39,168, 74,229,101, 2,168, 46,168, 60,237,225,
+ 242,235,226,229,238,231,225,236,105,128, 9,242,243,233,231,238,
+ 226,229,238,231,225,236,105,128, 9,243,233,225,104,128,246,221,
+ 244,232,225,105,128, 14, 36,246,239,227,225,236,233, 99, 4,168,
+ 103,168,113,168,120,168,131,226,229,238,231,225,236,105,128, 9,
+ 139,228,229,246, 97,128, 9, 11,231,245,234,225,242,225,244,105,
+ 128, 10,139,246,239,247,229,236,243,233,231,110, 3,168,147,168,
+ 157,168,164,226,229,238,231,225,236,105,128, 9,195,228,229,246,
+ 97,128, 9, 67,231,245,234,225,242,225,244,105,128, 10,195,115,
+ 147, 0,115,168,217,170,187,170,198,171, 68,171,107,174, 49,174,
+ 60,176,203,179, 85,179,131,179,158,180, 93,180,160,181,193,181,
+ 203,182,133,182,206,183,120,183,130, 97, 9,168,237,168,247,169,
+ 12,169, 84,169,109,169,120,169,145,169,177,169,217,226,229,238,
+ 231,225,236,105,128, 9,184,227,245,244,101,129, 1, 91,169, 0,
+ 228,239,244,225,227,227,229,238,116,128, 30,101,100, 5,169, 24,
+ 169, 33,169, 39,169, 53,169, 69,225,242,225,226,233, 99,128, 6,
+ 53,229,246, 97,128, 9, 56,230,233,238,225,236,225,242,225,226,
+ 233, 99,128,254,186,233,238,233,244,233,225,236,225,242,225,226,
+ 233, 99,128,254,187,237,229,228,233,225,236,225,242,225,226,233,
+ 99,128,254,188,231,117, 2,169, 91,169,100,234,225,242,225,244,
+ 105,128, 10,184,242,237,245,235,232,105,128, 10, 56,232,233,242,
+ 225,231,225,238, 97,128, 48, 85,235,225,244,225,235,225,238, 97,
+ 129, 48,181,169,133,232,225,236,230,247,233,228,244,104,128,255,
+ 123,236,236,225,236,236,225,232,239,245,225,236,225,249,232,229,
+ 247,225,243,225,236,236,225,237,225,242,225,226,233, 99,128,253,
+ 250,237,229,235,104,130, 5,225,169,188,169,208,228,225,231,229,
+ 243,104,129,251, 65,169,199,232,229,226,242,229,119,128,251, 65,
+ 232,229,226,242,229,119,128, 5,225,242, 97, 5,169,230,170, 48,
+ 170, 56,170,106,170,114, 97, 5,169,242,169,250,170, 2,170, 33,
+ 170, 41,225,244,232,225,105,128, 14, 50,229,244,232,225,105,128,
+ 14, 65,233,237,225,233,109, 2,170, 12,170, 23,225,236,225,233,
+ 244,232,225,105,128, 14, 68,245,225,238,244,232,225,105,128, 14,
+ 67,237,244,232,225,105,128, 14, 51,244,232,225,105,128, 14, 48,
+ 229,244,232,225,105,128, 14, 64,105, 3,170, 64,170, 88,170, 99,
+ 105, 2,170, 70,170, 81,236,229,230,244,244,232,225,105,128,248,
+ 134,244,232,225,105,128, 14, 53,236,229,230,244,244,232,225,105,
+ 128,248,133,244,232,225,105,128, 14, 52,239,244,232,225,105,128,
+ 14, 66,117, 3,170,122,170,172,170,179,101, 3,170,130,170,154,
+ 170,165,101, 2,170,136,170,147,236,229,230,244,244,232,225,105,
+ 128,248,136,244,232,225,105,128, 14, 55,236,229,230,244,244,232,
+ 225,105,128,248,135,244,232,225,105,128, 14, 54,244,232,225,105,
+ 128, 14, 56,245,244,232,225,105,128, 14, 57,226,239,240,239,237,
+ 239,230,111,128, 49, 25, 99, 5,170,210,170,231,170,240,171, 33,
+ 171, 55,225,242,239,110,129, 1, 97,170,219,228,239,244,225,227,
+ 227,229,238,116,128, 30,103,229,228,233,236,236, 97,128, 1, 95,
+ 232,247, 97,131, 2, 89,170,252,171, 7,171, 26,227,249,242,233,
+ 236,236,233, 99,128, 4,217,228,233,229,242,229,243,233,243,227,
+ 249,242,233,236,236,233, 99,128, 4,219,232,239,239,107,128, 2,
+ 90,233,242, 99, 2,171, 41,171, 46,236,101,128, 36,226,245,237,
+ 230,236,229,120,128, 1, 93,239,237,237,225,225,227,227,229,238,
+ 116,128, 2, 25,228,239,116, 2,171, 76,171, 85,225,227,227,229,
+ 238,116,128, 30, 97,226,229,236,239,119,129, 30, 99,171, 95,228,
+ 239,244,225,227,227,229,238,116,128, 30,105,101, 9,171,127,171,
+ 143,171,178,171,243,172, 90,172,117,172,142,172,223,172,250,225,
+ 231,245,236,236,226,229,236,239,247,227,237, 98,128, 3, 60, 99,
+ 2,171,149,171,171,239,238,100,129, 32, 51,171,157,244,239,238,
+ 229,227,232,233,238,229,243,101,128, 2,202,244,233,239,110,128,
+ 0,167,229,110, 4,171,189,171,198,171,212,171,228,225,242,225,
+ 226,233, 99,128, 6, 51,230,233,238,225,236,225,242,225,226,233,
+ 99,128,254,178,233,238,233,244,233,225,236,225,242,225,226,233,
+ 99,128,254,179,237,229,228,233,225,236,225,242,225,226,233, 99,
+ 128,254,180,231,239,108,135, 5,182,172, 7,172, 21,172, 26,172,
+ 35,172, 50,172, 66,172, 77, 49, 2,172, 13,172, 17, 51,128, 5,
+ 182,102,128, 5,182,178, 99,128, 5,182,232,229,226,242,229,119,
+ 128, 5,182,238,225,242,242,239,247,232,229,226,242,229,119,128,
+ 5,182,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
+ 5,182,244,225,232,229,226,242,229,119,128, 5,146,247,233,228,
+ 229,232,229,226,242,229,119,128, 5,182,104, 2,172, 96,172,107,
+ 225,242,237,229,238,233,225,110,128, 5,125,233,242,225,231,225,
+ 238, 97,128, 48, 91,235,225,244,225,235,225,238, 97,129, 48,187,
+ 172,130,232,225,236,230,247,233,228,244,104,128,255,126,237,105,
+ 2,172,149,172,192,227,239,236,239,110,131, 0, 59,172,163,172,
+ 172,172,184,225,242,225,226,233, 99,128, 6, 27,237,239,238,239,
+ 243,240,225,227,101,128,255, 27,243,237,225,236,108,128,254, 84,
+ 246,239,233,227,229,228,237,225,242,235,235,225,238, 97,129, 48,
+ 156,172,211,232,225,236,230,247,233,228,244,104,128,255,159,238,
+ 116, 2,172,230,172,240,233,243,241,245,225,242,101,128, 51, 34,
+ 239,243,241,245,225,242,101,128, 51, 35,246,229,110,142, 0, 55,
+ 173, 28,173, 37,173, 47,173, 77,173, 84,173, 94,173,119,173,146,
+ 173,180,173,192,173,203,173,236,173,244,173,255,225,242,225,226,
+ 233, 99,128, 6,103,226,229,238,231,225,236,105,128, 9,237,227,
+ 233,242,227,236,101,129, 36,102,173, 58,233,238,246,229,242,243,
+ 229,243,225,238,243,243,229,242,233,102,128, 39,144,228,229,246,
+ 97,128, 9,109,229,233,231,232,244,232,115,128, 33, 94,231,117,
+ 2,173,101,173,110,234,225,242,225,244,105,128, 10,237,242,237,
+ 245,235,232,105,128, 10,109,232, 97, 2,173,126,173,137,227,235,
+ 225,242,225,226,233, 99,128, 6,103,238,231,250,232,239,117,128,
+ 48, 39,105, 2,173,152,173,170,228,229,239,231,242,225,240,232,
+ 233,227,240,225,242,229,110,128, 50, 38,238,230,229,242,233,239,
+ 114,128, 32,135,237,239,238,239,243,240,225,227,101,128,255, 23,
+ 239,236,228,243,244,249,236,101,128,247, 55,112, 2,173,209,173,
+ 216,225,242,229,110,128, 36,122,229,114, 2,173,223,173,229,233,
+ 239,100,128, 36,142,243,233,225,110,128, 6,247,242,239,237,225,
+ 110,128, 33,118,243,245,240,229,242,233,239,114,128, 32,119,116,
+ 2,174, 5,174, 43,229,229,110, 2,174, 13,174, 22,227,233,242,
+ 227,236,101,128, 36,112,112, 2,174, 28,174, 35,225,242,229,110,
+ 128, 36,132,229,242,233,239,100,128, 36,152,232,225,105,128, 14,
+ 87,230,244,232,249,240,232,229,110,128, 0,173,104, 7,174, 76,
+ 175, 50,175, 61,175, 75,176, 20,176, 33,176,197, 97, 6,174, 90,
+ 174,101,174,111,174,122,175, 9,175, 34,225,242,237,229,238,233,
+ 225,110,128, 5,119,226,229,238,231,225,236,105,128, 9,182,227,
+ 249,242,233,236,236,233, 99,128, 4, 72,100, 2,174,128,174,224,
+ 228, 97, 4,174,139,174,148,174,179,174,193,225,242,225,226,233,
+ 99,128, 6, 81,228,225,237,237, 97, 2,174,158,174,167,225,242,
+ 225,226,233, 99,128,252, 97,244,225,238,225,242,225,226,233, 99,
+ 128,252, 94,230,225,244,232,225,225,242,225,226,233, 99,128,252,
+ 96,235,225,243,242, 97, 2,174,203,174,212,225,242,225,226,233,
+ 99,128,252, 98,244,225,238,225,242,225,226,233, 99,128,252, 95,
+ 101,132, 37,146,174,236,174,243,174,251,175, 4,228,225,242,107,
+ 128, 37,147,236,233,231,232,116,128, 37,145,237,229,228,233,245,
+ 109,128, 37,146,246, 97,128, 9, 54,231,117, 2,175, 16,175, 25,
+ 234,225,242,225,244,105,128, 10,182,242,237,245,235,232,105,128,
+ 10, 54,236,243,232,229,236,229,244,232,229,226,242,229,119,128,
+ 5,147,226,239,240,239,237,239,230,111,128, 49, 21,227,232,225,
+ 227,249,242,233,236,236,233, 99,128, 4, 73,101, 4,175, 85,175,
+ 150,175,160,175,177,229,110, 4,175, 96,175,105,175,119,175,135,
+ 225,242,225,226,233, 99,128, 6, 52,230,233,238,225,236,225,242,
+ 225,226,233, 99,128,254,182,233,238,233,244,233,225,236,225,242,
+ 225,226,233, 99,128,254,183,237,229,228,233,225,236,225,242,225,
+ 226,233, 99,128,254,184,233,227,239,240,244,233, 99,128, 3,227,
+ 241,229,108,129, 32,170,175,168,232,229,226,242,229,119,128, 32,
+ 170,246, 97,134, 5,176,175,194,175,209,175,223,175,232,175,247,
+ 176, 7, 49, 2,175,200,175,205,177, 53,128, 5,176, 53,128, 5,
+ 176, 50, 2,175,215,175,219, 50,128, 5,176,101,128, 5,176,232,
+ 229,226,242,229,119,128, 5,176,238,225,242,242,239,247,232,229,
+ 226,242,229,119,128, 5,176,241,245,225,242,244,229,242,232,229,
+ 226,242,229,119,128, 5,176,247,233,228,229,232,229,226,242,229,
+ 119,128, 5,176,232,225,227,249,242,233,236,236,233, 99,128, 4,
+ 187,105, 2,176, 39,176, 50,237,225,227,239,240,244,233, 99,128,
+ 3,237,110,131, 5,233,176, 60,176,143,176,152,100, 2,176, 66,
+ 176,132,225,231,229,243,104,130,251, 73,176, 78,176, 87,232,229,
+ 226,242,229,119,128,251, 73,115, 2,176, 93,176,113,232,233,238,
+ 228,239,116,129,251, 44,176,104,232,229,226,242,229,119,128,251,
+ 44,233,238,228,239,116,129,251, 45,176,123,232,229,226,242,229,
+ 119,128,251, 45,239,244,232,229,226,242,229,119,128, 5,193,232,
+ 229,226,242,229,119,128, 5,233,115, 2,176,158,176,178,232,233,
+ 238,228,239,116,129,251, 42,176,169,232,229,226,242,229,119,128,
+ 251, 42,233,238,228,239,116,129,251, 43,176,188,232,229,226,242,
+ 229,119,128,251, 43,239,239,107,128, 2,130,105, 8,176,221,177,
+ 9,177, 20,177, 45,177, 75,177, 83,177, 96,178, 11,231,237, 97,
+ 131, 3,195,176,233,176,237,176,245, 49,128, 3,194,230,233,238,
+ 225,108,128, 3,194,236,245,238,225,244,229,243,249,237,226,239,
+ 236,231,242,229,229,107,128, 3,242,232,233,242,225,231,225,238,
+ 97,128, 48, 87,235,225,244,225,235,225,238, 97,129, 48,183,177,
+ 33,232,225,236,230,247,233,228,244,104,128,255,124,236,245,113,
+ 2,177, 53,177, 62,232,229,226,242,229,119,128, 5,189,236,229,
+ 230,244,232,229,226,242,229,119,128, 5,189,237,233,236,225,114,
+ 128, 34, 60,238,228,239,244,232,229,226,242,229,119,128, 5,194,
+ 239,115, 6,177,111,177,146,177,178,177,206,177,220,177,252, 97,
+ 2,177,117,177,132,227,233,242,227,236,229,235,239,242,229,225,
+ 110,128, 50,116,240,225,242,229,238,235,239,242,229,225,110,128,
+ 50, 20,227,105, 2,177,153,177,165,229,245,227,235,239,242,229,
+ 225,110,128, 49,126,242,227,236,229,235,239,242,229,225,110,128,
+ 50,102,107, 2,177,184,177,198,233,249,229,239,235,235,239,242,
+ 229,225,110,128, 49,122,239,242,229,225,110,128, 49, 69,238,233,
+ 229,245,238,235,239,242,229,225,110,128, 49,123,112, 2,177,226,
+ 177,239,225,242,229,238,235,239,242,229,225,110,128, 50, 6,233,
+ 229,245,240,235,239,242,229,225,110,128, 49,125,244,233,235,229,
+ 245,244,235,239,242,229,225,110,128, 49,124,120,141, 0, 54,178,
+ 41,178, 50,178, 60,178, 90,178, 97,178,122,178,149,178,183,178,
+ 195,178,206,178,239,178,247,179, 2,225,242,225,226,233, 99,128,
+ 6,102,226,229,238,231,225,236,105,128, 9,236,227,233,242,227,
+ 236,101,129, 36,101,178, 71,233,238,246,229,242,243,229,243,225,
+ 238,243,243,229,242,233,102,128, 39,143,228,229,246, 97,128, 9,
+ 108,231,117, 2,178,104,178,113,234,225,242,225,244,105,128, 10,
+ 236,242,237,245,235,232,105,128, 10,108,232, 97, 2,178,129,178,
+ 140,227,235,225,242,225,226,233, 99,128, 6,102,238,231,250,232,
+ 239,117,128, 48, 38,105, 2,178,155,178,173,228,229,239,231,242,
+ 225,240,232,233,227,240,225,242,229,110,128, 50, 37,238,230,229,
+ 242,233,239,114,128, 32,134,237,239,238,239,243,240,225,227,101,
+ 128,255, 22,239,236,228,243,244,249,236,101,128,247, 54,112, 2,
+ 178,212,178,219,225,242,229,110,128, 36,121,229,114, 2,178,226,
+ 178,232,233,239,100,128, 36,141,243,233,225,110,128, 6,246,242,
+ 239,237,225,110,128, 33,117,243,245,240,229,242,233,239,114,128,
+ 32,118,116, 2,179, 8,179, 79,229,229,110, 2,179, 16,179, 58,
+ 99, 2,179, 22,179, 30,233,242,227,236,101,128, 36,111,245,242,
+ 242,229,238,227,249,228,229,238,239,237,233,238,225,244,239,242,
+ 226,229,238,231,225,236,105,128, 9,249,112, 2,179, 64,179, 71,
+ 225,242,229,110,128, 36,131,229,242,233,239,100,128, 36,151,232,
+ 225,105,128, 14, 86,108, 2,179, 91,179,111,225,243,104,129, 0,
+ 47,179, 99,237,239,238,239,243,240,225,227,101,128,255, 15,239,
+ 238,103,129, 1,127,179,119,228,239,244,225,227,227,229,238,116,
+ 128, 30,155,109, 2,179,137,179,147,233,236,229,230,225,227,101,
+ 128, 38, 58,239,238,239,243,240,225,227,101,128,255, 83,111, 6,
+ 179,172,179,222,179,233,180, 2,180, 47,180, 58,102, 2,179,178,
+ 179,192,240,225,243,245,241,232,229,226,242,229,119,128, 5,195,
+ 116, 2,179,198,179,207,232,249,240,232,229,110,128, 0,173,243,
+ 233,231,238,227,249,242,233,236,236,233, 99,128, 4, 76,232,233,
+ 242,225,231,225,238, 97,128, 48, 93,235,225,244,225,235,225,238,
+ 97,129, 48,189,179,246,232,225,236,230,247,233,228,244,104,128,
+ 255,127,236,233,228,245,115, 2,180, 12,180, 29,236,239,238,231,
+ 239,246,229,242,236,225,249,227,237, 98,128, 3, 56,243,232,239,
+ 242,244,239,246,229,242,236,225,249,227,237, 98,128, 3, 55,242,
+ 245,243,233,244,232,225,105,128, 14, 41,115, 3,180, 66,180, 76,
+ 180, 84,225,236,225,244,232,225,105,128, 14, 40,239,244,232,225,
+ 105,128, 14, 11,245,225,244,232,225,105,128, 14, 42,240, 97, 3,
+ 180,102,180,122,180,154,227,101,129, 0, 32,180,109,232,225,227,
+ 235,225,242,225,226,233, 99,128, 0, 32,228,101,129, 38, 96,180,
+ 129,243,245,233,116, 2,180,138,180,146,226,236,225,227,107,128,
+ 38, 96,247,232,233,244,101,128, 38,100,242,229,110,128, 36,174,
+ 241,245,225,242,101, 11,180,188,180,199,180,213,180,238,180,255,
+ 181, 25,181, 40,181, 73,181,100,181,156,181,171,226,229,236,239,
+ 247,227,237, 98,128, 3, 59, 99, 2,180,205,180,209, 99,128, 51,
+ 196,109,128, 51,157,228,233,225,231,239,238,225,236,227,242,239,
+ 243,243,232,225,244,227,232,230,233,236,108,128, 37,169,232,239,
+ 242,233,250,239,238,244,225,236,230,233,236,108,128, 37,164,107,
+ 2,181, 5,181, 9,103,128, 51,143,109,129, 51,158,181, 15,227,
+ 225,240,233,244,225,108,128, 51,206,108, 2,181, 31,181, 35,110,
+ 128, 51,209,239,103,128, 51,210,109, 4,181, 50,181, 54,181, 59,
+ 181, 63,103,128, 51,142,233,108,128, 51,213,109,128, 51,156,243,
+ 241,245,225,242,229,100,128, 51,161,239,242,244,232,239,231,239,
+ 238,225,236,227,242,239,243,243,232,225,244,227,232,230,233,236,
+ 108,128, 37,166,245,240,240,229,114, 2,181,110,181,133,236,229,
+ 230,244,244,239,236,239,247,229,242,242,233,231,232,244,230,233,
+ 236,108,128, 37,167,242,233,231,232,244,244,239,236,239,247,229,
+ 242,236,229,230,244,230,233,236,108,128, 37,168,246,229,242,244,
+ 233,227,225,236,230,233,236,108,128, 37,165,247,232,233,244,229,
+ 247,233,244,232,243,237,225,236,236,226,236,225,227,107,128, 37,
+ 163,242,243,241,245,225,242,101,128, 51,219,115, 2,181,209,182,
+ 123, 97, 4,181,219,181,229,181,236,181,247,226,229,238,231,225,
+ 236,105,128, 9,183,228,229,246, 97,128, 9, 55,231,245,234,225,
+ 242,225,244,105,128, 10,183,238,103, 8,182, 10,182, 24,182, 38,
+ 182, 52,182, 67,182, 81,182, 95,182,108,227,233,229,245,227,235,
+ 239,242,229,225,110,128, 49, 73,232,233,229,245,232,235,239,242,
+ 229,225,110,128, 49,133,233,229,245,238,231,235,239,242,229,225,
+ 110,128, 49,128,235,233,249,229,239,235,235,239,242,229,225,110,
+ 128, 49, 50,238,233,229,245,238,235,239,242,229,225,110,128, 49,
+ 101,240,233,229,245,240,235,239,242,229,225,110,128, 49, 67,243,
+ 233,239,243,235,239,242,229,225,110,128, 49, 70,244,233,235,229,
+ 245,244,235,239,242,229,225,110,128, 49, 56,245,240,229,242,233,
+ 239,114,128,246,242,116, 2,182,139,182,162,229,242,236,233,238,
+ 103,129, 0,163,182,150,237,239,238,239,243,240,225,227,101,128,
+ 255,225,242,239,235,101, 2,182,171,182,188,236,239,238,231,239,
+ 246,229,242,236,225,249,227,237, 98,128, 3, 54,243,232,239,242,
+ 244,239,246,229,242,236,225,249,227,237, 98,128, 3, 53,117, 7,
+ 182,222,182,254,183, 20,183, 31,183, 72,183, 82,183, 86,226,243,
+ 229,116,130, 34,130,182,233,182,244,238,239,244,229,241,245,225,
+ 108,128, 34,138,239,242,229,241,245,225,108,128, 34,134, 99, 2,
+ 183, 4,183, 12,227,229,229,228,115,128, 34,123,232,244,232,225,
+ 116,128, 34, 11,232,233,242,225,231,225,238, 97,128, 48, 89,107,
+ 2,183, 37,183, 61,225,244,225,235,225,238, 97,129, 48,185,183,
+ 49,232,225,236,230,247,233,228,244,104,128,255,125,245,238,225,
+ 242,225,226,233, 99,128, 6, 82,237,237,225,244,233,239,110,128,
+ 34, 17,110,128, 38, 60,240,229,242,243,229,116,130, 34,131,183,
+ 99,183,110,238,239,244,229,241,245,225,108,128, 34,139,239,242,
+ 229,241,245,225,108,128, 34,135,246,243,241,245,225,242,101,128,
+ 51,220,249,239,245,247,225,229,242,225,243,241,245,225,242,101,
+ 128, 51,124,116,144, 0,116,183,183,184,192,184,213,185,100,185,
+ 140,187,188,191, 70,192,145,192,157,192,169,193,202,193,227,194,
+ 57,194,237,195,165,195,255, 97, 10,183,205,183,215,183,236,183,
+ 243,184, 12,184, 90,184,107,184,132,184,146,184,150,226,229,238,
+ 231,225,236,105,128, 9,164,227,107, 2,183,222,183,229,228,239,
+ 247,110,128, 34,164,236,229,230,116,128, 34,163,228,229,246, 97,
+ 128, 9, 36,231,117, 2,183,250,184, 3,234,225,242,225,244,105,
+ 128, 10,164,242,237,245,235,232,105,128, 10, 36,104, 4,184, 22,
+ 184, 31,184, 45,184, 75,225,242,225,226,233, 99,128, 6, 55,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,254,194,105, 2,184,
+ 51,184, 66,238,233,244,233,225,236,225,242,225,226,233, 99,128,
+ 254,195,242,225,231,225,238, 97,128, 48, 95,237,229,228,233,225,
+ 236,225,242,225,226,233, 99,128,254,196,233,243,249,239,245,229,
+ 242,225,243,241,245,225,242,101,128, 51,125,235,225,244,225,235,
+ 225,238, 97,129, 48,191,184,120,232,225,236,230,247,233,228,244,
+ 104,128,255,128,244,247,229,229,236,225,242,225,226,233, 99,128,
+ 6, 64,117,128, 3,196,118,130, 5,234,184,158,184,183,228,225,
+ 231,229,115,129,251, 74,184,168,104,129,251, 74,184,174,232,229,
+ 226,242,229,119,128,251, 74,232,229,226,242,229,119,128, 5,234,
+ 98, 2,184,198,184,203,225,114,128, 1,103,239,240,239,237,239,
+ 230,111,128, 49, 10, 99, 6,184,227,184,234,184,241,184,250,185,
+ 60,185, 87,225,242,239,110,128, 1,101,227,245,242,108,128, 2,
+ 168,229,228,233,236,236, 97,128, 1, 99,232,229,104, 4,185, 6,
+ 185, 15,185, 29,185, 45,225,242,225,226,233, 99,128, 6,134,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,251,123,233,238,233,
+ 244,233,225,236,225,242,225,226,233, 99,128,251,124,237,229,228,
+ 233,225,236,225,242,225,226,233, 99,128,251,125,233,242, 99, 2,
+ 185, 68,185, 73,236,101,128, 36,227,245,237,230,236,229,248,226,
+ 229,236,239,119,128, 30,113,239,237,237,225,225,227,227,229,238,
+ 116,128, 1, 99,100, 2,185,106,185,116,233,229,242,229,243,233,
+ 115,128, 30,151,239,116, 2,185,123,185,132,225,227,227,229,238,
+ 116,128, 30,107,226,229,236,239,119,128, 30,109,101, 9,185,160,
+ 185,171,185,191,186,201,186,226,187, 34,187,101,187,106,187,158,
+ 227,249,242,233,236,236,233, 99,128, 4, 66,228,229,243,227,229,
+ 238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,173,104,
+ 7,185,207,185,216,185,230,186, 14,186, 44,186, 85,186,183,225,
+ 242,225,226,233, 99,128, 6, 42,230,233,238,225,236,225,242,225,
+ 226,233, 99,128,254,150,232,225,232,105, 2,185,239,185,254,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,252,162,243,239,
+ 236,225,244,229,228,225,242,225,226,233, 99,128,252, 12,105, 2,
+ 186, 20,186, 35,238,233,244,233,225,236,225,242,225,226,233, 99,
+ 128,254,151,242,225,231,225,238, 97,128, 48,102,234,229,229,237,
+ 105, 2,186, 54,186, 69,238,233,244,233,225,236,225,242,225,226,
+ 233, 99,128,252,161,243,239,236,225,244,229,228,225,242,225,226,
+ 233, 99,128,252, 11,109, 2,186, 91,186,125,225,242,226,245,244,
+ 97, 2,186,102,186,111,225,242,225,226,233, 99,128, 6, 41,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,254,148,101, 2,186,
+ 131,186,144,228,233,225,236,225,242,225,226,233, 99,128,254,152,
+ 229,237,105, 2,186,152,186,167,238,233,244,233,225,236,225,242,
+ 225,226,233, 99,128,252,164,243,239,236,225,244,229,228,225,242,
+ 225,226,233, 99,128,252, 14,238,239,239,238,230,233,238,225,236,
+ 225,242,225,226,233, 99,128,252,115,235,225,244,225,235,225,238,
+ 97,129, 48,198,186,214,232,225,236,230,247,233,228,244,104,128,
+ 255,131,108, 2,186,232,186,251,229,240,232,239,238,101,129, 33,
+ 33,186,243,226,236,225,227,107,128, 38, 14,233,243,232, 97, 2,
+ 187, 4,187, 19,231,229,228,239,236,225,232,229,226,242,229,119,
+ 128, 5,160,241,229,244,225,238,225,232,229,226,242,229,119,128,
+ 5,169,110, 4,187, 44,187, 53,187, 72,187, 93,227,233,242,227,
+ 236,101,128, 36,105,233,228,229,239,231,242,225,240,232,233,227,
+ 240,225,242,229,110,128, 50, 41,112, 2,187, 78,187, 85,225,242,
+ 229,110,128, 36,125,229,242,233,239,100,128, 36,145,242,239,237,
+ 225,110,128, 33,121,243,104,128, 2,167,116,131, 5,216,187,116,
+ 187,136,187,145,228,225,231,229,243,104,129,251, 56,187,127,232,
+ 229,226,242,229,119,128,251, 56,232,229,226,242,229,119,128, 5,
+ 216,243,229,227,249,242,233,236,236,233, 99,128, 4,181,246,233,
+ 114, 2,187,166,187,175,232,229,226,242,229,119,128, 5,155,236,
+ 229,230,244,232,229,226,242,229,119,128, 5,155,104, 6,187,202,
+ 188, 98,188,220,189, 96,190, 3,191, 60, 97, 5,187,214,187,224,
+ 187,231,188, 0,188, 29,226,229,238,231,225,236,105,128, 9,165,
+ 228,229,246, 97,128, 9, 37,231,117, 2,187,238,187,247,234,225,
+ 242,225,244,105,128, 10,165,242,237,245,235,232,105,128, 10, 37,
+ 108, 2,188, 6,188, 15,225,242,225,226,233, 99,128, 6, 48,230,
+ 233,238,225,236,225,242,225,226,233, 99,128,254,172,238,244,232,
+ 225,235,232,225,116, 3,188, 44,188, 75,188, 82,236,239,119, 2,
+ 188, 52,188, 63,236,229,230,244,244,232,225,105,128,248,152,242,
+ 233,231,232,244,244,232,225,105,128,248,151,244,232,225,105,128,
+ 14, 76,245,240,240,229,242,236,229,230,244,244,232,225,105,128,
+ 248,150,101, 3,188,106,188,170,188,193,104, 4,188,116,188,125,
+ 188,139,188,155,225,242,225,226,233, 99,128, 6, 43,230,233,238,
+ 225,236,225,242,225,226,233, 99,128,254,154,233,238,233,244,233,
+ 225,236,225,242,225,226,233, 99,128,254,155,237,229,228,233,225,
+ 236,225,242,225,226,233, 99,128,254,156,242,101, 2,188,177,188,
+ 186,229,248,233,243,244,115,128, 34, 3,230,239,242,101,128, 34,
+ 52,244, 97,130, 3,184,188,202,188,206, 49,128, 3,209,243,249,
+ 237,226,239,236,231,242,229,229,107,128, 3,209,105, 2,188,226,
+ 189, 56,229,245,244,104, 4,188,239,189, 18,189, 33,189, 42, 97,
+ 2,188,245,189, 4,227,233,242,227,236,229,235,239,242,229,225,
+ 110,128, 50,121,240,225,242,229,238,235,239,242,229,225,110,128,
+ 50, 25,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,
+ 107,235,239,242,229,225,110,128, 49, 76,240,225,242,229,238,235,
+ 239,242,229,225,110,128, 50, 11,242,244,229,229,110, 2,189, 66,
+ 189, 75,227,233,242,227,236,101,128, 36,108,112, 2,189, 81,189,
+ 88,225,242,229,110,128, 36,128,229,242,233,239,100,128, 36,148,
+ 111, 6,189,110,189,127,189,132,189,146,189,151,189,204,238,225,
+ 238,231,237,239,238,244,232,239,244,232,225,105,128, 14, 17,239,
+ 107,128, 1,173,240,232,245,244,232,225,239,244,232,225,105,128,
+ 14, 18,242,110,128, 0,254,244,104, 3,189,160,189,184,189,194,
+ 97, 2,189,166,189,176,232,225,238,244,232,225,105,128, 14, 23,
+ 238,244,232,225,105,128, 14, 16,239,238,231,244,232,225,105,128,
+ 14, 24,245,238,231,244,232,225,105,128, 14, 22,245,243,225,238,
+ 100, 2,189,214,189,225,227,249,242,233,236,236,233, 99,128, 4,
+ 130,243,243,229,240,225,242,225,244,239,114, 2,189,240,189,249,
+ 225,242,225,226,233, 99,128, 6,108,240,229,242,243,233,225,110,
+ 128, 6,108,242,229,101,144, 0, 51,190, 41,190, 50,190, 60,190,
+ 90,190, 97,190,107,190,132,190,159,190,193,190,205,190,224,190,
+ 235,191, 12,191, 34,191, 42,191, 53,225,242,225,226,233, 99,128,
+ 6, 99,226,229,238,231,225,236,105,128, 9,233,227,233,242,227,
+ 236,101,129, 36, 98,190, 71,233,238,246,229,242,243,229,243,225,
+ 238,243,243,229,242,233,102,128, 39,140,228,229,246, 97,128, 9,
+ 105,229,233,231,232,244,232,115,128, 33, 92,231,117, 2,190,114,
+ 190,123,234,225,242,225,244,105,128, 10,233,242,237,245,235,232,
+ 105,128, 10,105,232, 97, 2,190,139,190,150,227,235,225,242,225,
+ 226,233, 99,128, 6, 99,238,231,250,232,239,117,128, 48, 35,105,
+ 2,190,165,190,183,228,229,239,231,242,225,240,232,233,227,240,
+ 225,242,229,110,128, 50, 34,238,230,229,242,233,239,114,128, 32,
+ 131,237,239,238,239,243,240,225,227,101,128,255, 19,238,245,237,
+ 229,242,225,244,239,242,226,229,238,231,225,236,105,128, 9,246,
+ 239,236,228,243,244,249,236,101,128,247, 51,112, 2,190,241,190,
+ 248,225,242,229,110,128, 36,118,229,114, 2,190,255,191, 5,233,
+ 239,100,128, 36,138,243,233,225,110,128, 6,243,241,245,225,242,
+ 244,229,242,115,129, 0,190,191, 25,229,237,228,225,243,104,128,
+ 246,222,242,239,237,225,110,128, 33,114,243,245,240,229,242,233,
+ 239,114,128, 0,179,244,232,225,105,128, 14, 83,250,243,241,245,
+ 225,242,101,128, 51,148,105, 7,191, 86,191, 97,191,212,192, 54,
+ 192, 66,192,115,192,132,232,233,242,225,231,225,238, 97,128, 48,
+ 97,107, 2,191,103,191,127,225,244,225,235,225,238, 97,129, 48,
+ 193,191,115,232,225,236,230,247,233,228,244,104,128,255,129,229,
+ 245,116, 4,191,139,191,174,191,189,191,198, 97, 2,191,145,191,
+ 160,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,112,
+ 240,225,242,229,238,235,239,242,229,225,110,128, 50, 16,227,233,
+ 242,227,236,229,235,239,242,229,225,110,128, 50, 98,235,239,242,
+ 229,225,110,128, 49, 55,240,225,242,229,238,235,239,242,229,225,
+ 110,128, 50, 2,236,228,101,133, 2,220,191,228,191,239,192, 0,
+ 192, 12,192, 40,226,229,236,239,247,227,237, 98,128, 3, 48, 99,
+ 2,191,245,191,250,237, 98,128, 3, 3,239,237, 98,128, 3, 3,
+ 228,239,245,226,236,229,227,237, 98,128, 3, 96,111, 2,192, 18,
+ 192, 28,240,229,242,225,244,239,114,128, 34, 60,246,229,242,236,
+ 225,249,227,237, 98,128, 3, 52,246,229,242,244,233,227,225,236,
+ 227,237, 98,128, 3, 62,237,229,243,227,233,242,227,236,101,128,
+ 34,151,112, 2,192, 72,192,102,229,232, 97, 2,192, 80,192, 89,
+ 232,229,226,242,229,119,128, 5,150,236,229,230,244,232,229,226,
+ 242,229,119,128, 5,150,240,233,231,245,242,237,245,235,232,105,
+ 128, 10,112,244,236,239,227,249,242,233,236,236,233,227,227,237,
+ 98,128, 4,131,247,238,225,242,237,229,238,233,225,110,128, 5,
+ 127,236,233,238,229,226,229,236,239,119,128, 30,111,237,239,238,
+ 239,243,240,225,227,101,128,255, 84,111, 7,192,185,192,196,192,
+ 207,192,232,193, 96,193,108,193,192,225,242,237,229,238,233,225,
+ 110,128, 5,105,232,233,242,225,231,225,238, 97,128, 48,104,235,
+ 225,244,225,235,225,238, 97,129, 48,200,192,220,232,225,236,230,
+ 247,233,228,244,104,128,255,132,110, 3,192,240,193, 82,193, 87,
+ 101, 4,192,250,193, 63,193, 70,193, 76,226,225,114, 4,193, 6,
+ 193, 35,193, 45,193, 54,229,248,244,242, 97, 2,193, 16,193, 26,
+ 232,233,231,232,237,239,100,128, 2,229,236,239,247,237,239,100,
+ 128, 2,233,232,233,231,232,237,239,100,128, 2,230,236,239,247,
+ 237,239,100,128, 2,232,237,233,228,237,239,100,128, 2,231,230,
+ 233,246,101,128, 1,189,243,233,120,128, 1,133,244,247,111,128,
+ 1,168,239,115,128, 3,132,243,241,245,225,242,101,128, 51, 39,
+ 240,225,244,225,235,244,232,225,105,128, 14, 15,242,244,239,233,
+ 243,229,243,232,229,236,236,226,242,225,227,235,229,116, 2,193,
+ 131,193,161,236,229,230,116,130, 48, 20,193,142,193,150,243,237,
+ 225,236,108,128,254, 93,246,229,242,244,233,227,225,108,128,254,
+ 57,242,233,231,232,116,130, 48, 21,193,173,193,181,243,237,225,
+ 236,108,128,254, 94,246,229,242,244,233,227,225,108,128,254, 58,
+ 244,225,239,244,232,225,105,128, 14, 21,240, 97, 2,193,209,193,
+ 221,236,225,244,225,236,232,239,239,107,128, 1,171,242,229,110,
+ 128, 36,175,114, 3,193,235,194, 10,194, 25,225,228,229,237,225,
+ 242,107,129, 33, 34,193,247,115, 2,193,253,194, 3,225,238,115,
+ 128,248,234,229,242,233,102,128,246,219,229,244,242,239,230,236,
+ 229,248,232,239,239,107,128, 2,136,233,225,103, 4,194, 37,194,
+ 42,194, 47,194, 52,228,110,128, 37,188,236,102,128, 37,196,242,
+ 116,128, 37,186,245,112,128, 37,178,115,132, 2,166,194, 69,194,
+ 108,194,214,194,227,225,228,105,130, 5,230,194, 79,194, 99,228,
+ 225,231,229,243,104,129,251, 70,194, 90,232,229,226,242,229,119,
+ 128,251, 70,232,229,226,242,229,119,128, 5,230,101, 2,194,114,
+ 194,125,227,249,242,233,236,236,233, 99,128, 4, 70,242,101,134,
+ 5,181,194,142,194,156,194,161,194,170,194,185,194,201, 49, 2,
+ 194,148,194,152, 50,128, 5,181,101,128, 5,181,178, 98,128, 5,
+ 181,232,229,226,242,229,119,128, 5,181,238,225,242,242,239,247,
+ 232,229,226,242,229,119,128, 5,181,241,245,225,242,244,229,242,
+ 232,229,226,242,229,119,128, 5,181,247,233,228,229,232,229,226,
+ 242,229,119,128, 5,181,232,229,227,249,242,233,236,236,233, 99,
+ 128, 4, 91,245,240,229,242,233,239,114,128,246,243,116, 4,194,
+ 247,195, 41,195,106,195,157, 97, 3,194,255,195, 9,195, 16,226,
+ 229,238,231,225,236,105,128, 9,159,228,229,246, 97,128, 9, 31,
+ 231,117, 2,195, 23,195, 32,234,225,242,225,244,105,128, 10,159,
+ 242,237,245,235,232,105,128, 10, 31,229,104, 4,195, 52,195, 61,
+ 195, 75,195, 91,225,242,225,226,233, 99,128, 6,121,230,233,238,
+ 225,236,225,242,225,226,233, 99,128,251,103,233,238,233,244,233,
+ 225,236,225,242,225,226,233, 99,128,251,104,237,229,228,233,225,
+ 236,225,242,225,226,233, 99,128,251,105,232, 97, 3,195,115,195,
+ 125,195,132,226,229,238,231,225,236,105,128, 9,160,228,229,246,
+ 97,128, 9, 32,231,117, 2,195,139,195,148,234,225,242,225,244,
+ 105,128, 10,160,242,237,245,235,232,105,128, 10, 32,245,242,238,
+ 229,100,128, 2,135,117, 3,195,173,195,184,195,209,232,233,242,
+ 225,231,225,238, 97,128, 48,100,235,225,244,225,235,225,238, 97,
+ 129, 48,196,195,197,232,225,236,230,247,233,228,244,104,128,255,
+ 130,243,237,225,236,108, 2,195,219,195,230,232,233,242,225,231,
+ 225,238, 97,128, 48, 99,235,225,244,225,235,225,238, 97,129, 48,
+ 195,195,243,232,225,236,230,247,233,228,244,104,128,255,111,119,
+ 2,196, 5,196,110,101, 2,196, 11,196, 59,236,246,101, 3,196,
+ 21,196, 30,196, 51,227,233,242,227,236,101,128, 36,107,112, 2,
+ 196, 36,196, 43,225,242,229,110,128, 36,127,229,242,233,239,100,
+ 128, 36,147,242,239,237,225,110,128, 33,123,238,244,121, 3,196,
+ 69,196, 78,196, 89,227,233,242,227,236,101,128, 36,115,232,225,
+ 238,231,250,232,239,117,128, 83, 68,112, 2,196, 95,196,102,225,
+ 242,229,110,128, 36,135,229,242,233,239,100,128, 36,155,111,142,
+ 0, 50,196,142,196,151,196,161,196,191,196,243,197, 12,197, 39,
+ 197, 73,197, 85,197,104,197,115,197,148,197,156,197,180,225,242,
+ 225,226,233, 99,128, 6, 98,226,229,238,231,225,236,105,128, 9,
+ 232,227,233,242,227,236,101,129, 36, 97,196,172,233,238,246,229,
+ 242,243,229,243,225,238,243,243,229,242,233,102,128, 39,139,100,
+ 2,196,197,196,203,229,246, 97,128, 9,104,239,116, 2,196,210,
+ 196,221,229,238,236,229,225,228,229,114,128, 32, 37,236,229,225,
+ 228,229,114,129, 32, 37,196,232,246,229,242,244,233,227,225,108,
+ 128,254, 48,231,117, 2,196,250,197, 3,234,225,242,225,244,105,
+ 128, 10,232,242,237,245,235,232,105,128, 10,104,232, 97, 2,197,
+ 19,197, 30,227,235,225,242,225,226,233, 99,128, 6, 98,238,231,
+ 250,232,239,117,128, 48, 34,105, 2,197, 45,197, 63,228,229,239,
+ 231,242,225,240,232,233,227,240,225,242,229,110,128, 50, 33,238,
+ 230,229,242,233,239,114,128, 32,130,237,239,238,239,243,240,225,
+ 227,101,128,255, 18,238,245,237,229,242,225,244,239,242,226,229,
+ 238,231,225,236,105,128, 9,245,239,236,228,243,244,249,236,101,
+ 128,247, 50,112, 2,197,121,197,128,225,242,229,110,128, 36,117,
+ 229,114, 2,197,135,197,141,233,239,100,128, 36,137,243,233,225,
+ 110,128, 6,242,242,239,237,225,110,128, 33,113,115, 2,197,162,
+ 197,170,244,242,239,235,101,128, 1,187,245,240,229,242,233,239,
+ 114,128, 0,178,244,104, 2,197,187,197,192,225,105,128, 14, 82,
+ 233,242,228,115,128, 33, 84,117,145, 0,117,197,237,197,245,198,
+ 30,198, 87,198,225,199, 6,199,129,199,145,199,196,200, 10,200,
+ 91,200,100,200,219,200,243,201, 95,201,123,201,237,225,227,245,
+ 244,101,128, 0,250, 98, 4,197,255,198, 4,198, 13,198, 23,225,
+ 114,128, 2,137,229,238,231,225,236,105,128, 9,137,239,240,239,
+ 237,239,230,111,128, 49, 40,242,229,246,101,128, 1,109, 99, 3,
+ 198, 38,198, 45,198, 77,225,242,239,110,128, 1,212,233,242, 99,
+ 2,198, 53,198, 58,236,101,128, 36,228,245,237,230,236,229,120,
+ 129, 0,251,198, 69,226,229,236,239,119,128, 30,119,249,242,233,
+ 236,236,233, 99,128, 4, 67,100, 5,198, 99,198,110,198,133,198,
+ 139,198,215,225,244,244,225,228,229,246, 97,128, 9, 81,226,108,
+ 2,198,117,198,125,225,227,245,244,101,128, 1,113,231,242,225,
+ 246,101,128, 2, 21,229,246, 97,128, 9, 9,233,229,242,229,243,
+ 233,115,133, 0,252,198,159,198,167,198,175,198,198,198,206,225,
+ 227,245,244,101,128, 1,216,226,229,236,239,119,128, 30,115, 99,
+ 2,198,181,198,188,225,242,239,110,128, 1,218,249,242,233,236,
+ 236,233, 99,128, 4,241,231,242,225,246,101,128, 1,220,237,225,
+ 227,242,239,110,128, 1,214,239,244,226,229,236,239,119,128, 30,
+ 229,103, 2,198,231,198,238,242,225,246,101,128, 0,249,117, 2,
+ 198,244,198,253,234,225,242,225,244,105,128, 10,137,242,237,245,
+ 235,232,105,128, 10, 9,104, 3,199, 14,199, 24,199,102,233,242,
+ 225,231,225,238, 97,128, 48, 70,111, 2,199, 30,199, 40,239,235,
+ 225,226,239,246,101,128, 30,231,242,110,133, 1,176,199, 55,199,
+ 63,199, 74,199, 82,199, 94,225,227,245,244,101,128, 30,233,228,
+ 239,244,226,229,236,239,119,128, 30,241,231,242,225,246,101,128,
+ 30,235,232,239,239,235,225,226,239,246,101,128, 30,237,244,233,
+ 236,228,101,128, 30,239,245,238,231,225,242,245,237,236,225,245,
+ 116,129, 1,113,199,118,227,249,242,233,236,236,233, 99,128, 4,
+ 243,233,238,246,229,242,244,229,228,226,242,229,246,101,128, 2,
+ 23,107, 3,199,153,199,177,199,188,225,244,225,235,225,238, 97,
+ 129, 48,166,199,165,232,225,236,230,247,233,228,244,104,128,255,
+ 115,227,249,242,233,236,236,233, 99,128, 4,121,239,242,229,225,
+ 110,128, 49, 92,109, 2,199,202,199,255, 97, 2,199,208,199,241,
+ 227,242,239,110,130, 1,107,199,219,199,230,227,249,242,233,236,
+ 236,233, 99,128, 4,239,228,233,229,242,229,243,233,115,128, 30,
+ 123,244,242,225,231,245,242,237,245,235,232,105,128, 10, 65,239,
+ 238,239,243,240,225,227,101,128,255, 85,110, 2,200, 16,200, 71,
+ 228,229,242,243,227,239,242,101,132, 0, 95,200, 35,200, 41,200,
+ 53,200, 64,228,226,108,128, 32, 23,237,239,238,239,243,240,225,
+ 227,101,128,255, 63,246,229,242,244,233,227,225,108,128,254, 51,
+ 247,225,246,121,128,254, 79,105, 2,200, 77,200, 82,239,110,128,
+ 34, 42,246,229,242,243,225,108,128, 34, 0,239,231,239,238,229,
+ 107,128, 1,115,112, 5,200,112,200,119,200,127,200,142,200,193,
+ 225,242,229,110,128, 36,176,226,236,239,227,107,128, 37,128,240,
+ 229,242,228,239,244,232,229,226,242,229,119,128, 5,196,243,233,
+ 236,239,110,131, 3,197,200,156,200,177,200,185,228,233,229,242,
+ 229,243,233,115,129, 3,203,200,169,244,239,238,239,115,128, 3,
+ 176,236,225,244,233,110,128, 2,138,244,239,238,239,115,128, 3,
+ 205,244,225,227,107, 2,200,202,200,213,226,229,236,239,247,227,
+ 237, 98,128, 3, 29,237,239,100,128, 2,212,114, 2,200,225,200,
+ 237,225,231,245,242,237,245,235,232,105,128, 10,115,233,238,103,
+ 128, 1,111,115, 3,200,251,201, 10,201, 55,232,239,242,244,227,
+ 249,242,233,236,236,233, 99,128, 4, 94,237,225,236,108, 2,201,
+ 19,201, 30,232,233,242,225,231,225,238, 97,128, 48, 69,235,225,
+ 244,225,235,225,238, 97,129, 48,165,201, 43,232,225,236,230,247,
+ 233,228,244,104,128,255,105,244,242,225,233,231,232,116, 2,201,
+ 67,201, 78,227,249,242,233,236,236,233, 99,128, 4,175,243,244,
+ 242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,177,244,
+ 233,236,228,101,130, 1,105,201,107,201,115,225,227,245,244,101,
+ 128, 30,121,226,229,236,239,119,128, 30,117,117, 5,201,135,201,
+ 145,201,152,201,177,201,193,226,229,238,231,225,236,105,128, 9,
+ 138,228,229,246, 97,128, 9, 10,231,117, 2,201,159,201,168,234,
+ 225,242,225,244,105,128, 10,138,242,237,245,235,232,105,128, 10,
+ 10,237,225,244,242,225,231,245,242,237,245,235,232,105,128, 10,
+ 66,246,239,247,229,236,243,233,231,110, 3,201,209,201,219,201,
+ 226,226,229,238,231,225,236,105,128, 9,194,228,229,246, 97,128,
+ 9, 66,231,245,234,225,242,225,244,105,128, 10,194,246,239,247,
+ 229,236,243,233,231,110, 3,201,253,202, 7,202, 14,226,229,238,
+ 231,225,236,105,128, 9,193,228,229,246, 97,128, 9, 65,231,245,
+ 234,225,242,225,244,105,128, 10,193,118,139, 0,118,202, 51,202,
+ 199,202,208,202,219,203,148,203,155,203,253,204, 9,204,109,204,
+ 117,204,138, 97, 4,202, 61,202, 68,202, 93,202,104,228,229,246,
+ 97,128, 9, 53,231,117, 2,202, 75,202, 84,234,225,242,225,244,
+ 105,128, 10,181,242,237,245,235,232,105,128, 10, 53,235,225,244,
+ 225,235,225,238, 97,128, 48,247,118,132, 5,213,202,116,202,143,
+ 202,175,202,187,228,225,231,229,243,104,130,251, 53,202,129,202,
+ 134,182, 53,128,251, 53,232,229,226,242,229,119,128,251, 53,104,
+ 2,202,149,202,157,229,226,242,229,119,128, 5,213,239,236,225,
+ 109,129,251, 75,202,166,232,229,226,242,229,119,128,251, 75,246,
+ 225,246,232,229,226,242,229,119,128, 5,240,249,239,228,232,229,
+ 226,242,229,119,128, 5,241,227,233,242,227,236,101,128, 36,229,
+ 228,239,244,226,229,236,239,119,128, 30,127,101, 6,202,233,202,
+ 244,203, 52,203, 63,203, 69,203,136,227,249,242,233,236,236,233,
+ 99,128, 4, 50,104, 4,202,254,203, 7,203, 21,203, 37,225,242,
+ 225,226,233, 99,128, 6,164,230,233,238,225,236,225,242,225,226,
+ 233, 99,128,251,107,233,238,233,244,233,225,236,225,242,225,226,
+ 233, 99,128,251,108,237,229,228,233,225,236,225,242,225,226,233,
+ 99,128,251,109,235,225,244,225,235,225,238, 97,128, 48,249,238,
+ 245,115,128, 38, 64,242,244,233,227,225,108, 2,203, 80,203, 86,
+ 226,225,114,128, 0,124,236,233,238,101, 4,203, 99,203,110,203,
+ 121,203,130,225,226,239,246,229,227,237, 98,128, 3, 13,226,229,
+ 236,239,247,227,237, 98,128, 3, 41,236,239,247,237,239,100,128,
+ 2,204,237,239,100,128, 2,200,247,225,242,237,229,238,233,225,
+ 110,128, 5,126,232,239,239,107,128, 2,139,105, 3,203,163,203,
+ 174,203,213,235,225,244,225,235,225,238, 97,128, 48,248,242,225,
+ 237, 97, 3,203,185,203,195,203,202,226,229,238,231,225,236,105,
+ 128, 9,205,228,229,246, 97,128, 9, 77,231,245,234,225,242,225,
+ 244,105,128, 10,205,243,225,242,231, 97, 3,203,225,203,235,203,
+ 242,226,229,238,231,225,236,105,128, 9,131,228,229,246, 97,128,
+ 9, 3,231,245,234,225,242,225,244,105,128, 10,131,237,239,238,
+ 239,243,240,225,227,101,128,255, 86,111, 3,204, 17,204, 28,204,
+ 98,225,242,237,229,238,233,225,110,128, 5,120,233,227,229,100,
+ 2,204, 37,204, 73,233,244,229,242,225,244,233,239,110, 2,204,
+ 51,204, 62,232,233,242,225,231,225,238, 97,128, 48,158,235,225,
+ 244,225,235,225,238, 97,128, 48,254,237,225,242,235,235,225,238,
+ 97,129, 48,155,204, 86,232,225,236,230,247,233,228,244,104,128,
+ 255,158,235,225,244,225,235,225,238, 97,128, 48,250,240,225,242,
+ 229,110,128, 36,177,116, 2,204,123,204,130,233,236,228,101,128,
+ 30,125,245,242,238,229,100,128, 2,140,117, 2,204,144,204,155,
+ 232,233,242,225,231,225,238, 97,128, 48,148,235,225,244,225,235,
+ 225,238, 97,128, 48,244,119,143, 0,119,204,200,205,177,205,187,
+ 205,210,205,250,206, 61,206, 69,208, 40,208, 81,208, 93,208,168,
+ 208,176,208,183,208,194,208,203, 97, 8,204,218,204,225,204,235,
+ 204,246,205, 28,205, 60,205, 72,205,108,227,245,244,101,128, 30,
+ 131,229,235,239,242,229,225,110,128, 49, 89,232,233,242,225,231,
+ 225,238, 97,128, 48,143,107, 2,204,252,205, 20,225,244,225,235,
+ 225,238, 97,129, 48,239,205, 8,232,225,236,230,247,233,228,244,
+ 104,128,255,156,239,242,229,225,110,128, 49, 88,243,237,225,236,
+ 108, 2,205, 38,205, 49,232,233,242,225,231,225,238, 97,128, 48,
+ 142,235,225,244,225,235,225,238, 97,128, 48,238,244,244,239,243,
+ 241,245,225,242,101,128, 51, 87,118, 2,205, 78,205, 86,229,228,
+ 225,243,104,128, 48, 28,249,245,238,228,229,242,243,227,239,242,
+ 229,246,229,242,244,233,227,225,108,128,254, 52,119, 3,205,116,
+ 205,125,205,139,225,242,225,226,233, 99,128, 6, 72,230,233,238,
+ 225,236,225,242,225,226,233, 99,128,254,238,232,225,237,250,225,
+ 225,226,239,246,101, 2,205,154,205,163,225,242,225,226,233, 99,
+ 128, 6, 36,230,233,238,225,236,225,242,225,226,233, 99,128,254,
+ 134,226,243,241,245,225,242,101,128, 51,221,227,233,242, 99, 2,
+ 205,196,205,201,236,101,128, 36,230,245,237,230,236,229,120,128,
+ 1,117,100, 2,205,216,205,226,233,229,242,229,243,233,115,128,
+ 30,133,239,116, 2,205,233,205,242,225,227,227,229,238,116,128,
+ 30,135,226,229,236,239,119,128, 30,137,101, 4,206, 4,206, 15,
+ 206, 27,206, 51,232,233,242,225,231,225,238, 97,128, 48,145,233,
+ 229,242,243,244,242,225,243,115,128, 33, 24,107, 2,206, 33,206,
+ 43,225,244,225,235,225,238, 97,128, 48,241,239,242,229,225,110,
+ 128, 49, 94,239,235,239,242,229,225,110,128, 49, 93,231,242,225,
+ 246,101,128, 30,129,232,233,244,101, 8,206, 90,206, 99,206,183,
+ 207, 17,207,101,207,146,207,198,207,254,226,245,236,236,229,116,
+ 128, 37,230, 99, 2,206,105,206,125,233,242,227,236,101,129, 37,
+ 203,206,115,233,238,246,229,242,243,101,128, 37,217,239,242,238,
+ 229,242,226,242,225,227,235,229,116, 2,206,142,206,162,236,229,
+ 230,116,129, 48, 14,206,151,246,229,242,244,233,227,225,108,128,
+ 254, 67,242,233,231,232,116,129, 48, 15,206,172,246,229,242,244,
+ 233,227,225,108,128,254, 68,100, 2,206,189,206,230,233,225,237,
+ 239,238,100,129, 37,199,206,200,227,239,238,244,225,233,238,233,
+ 238,231,226,236,225,227,235,243,237,225,236,236,228,233,225,237,
+ 239,238,100,128, 37,200,239,247,238,240,239,233,238,244,233,238,
+ 103, 2,206,246,207, 6,243,237,225,236,236,244,242,233,225,238,
+ 231,236,101,128, 37,191,244,242,233,225,238,231,236,101,128, 37,
+ 189,236,101, 2,207, 24,207, 66,230,244,240,239,233,238,244,233,
+ 238,103, 2,207, 39,207, 55,243,237,225,236,236,244,242,233,225,
+ 238,231,236,101,128, 37,195,244,242,233,225,238,231,236,101,128,
+ 37,193,238,244,233,227,245,236,225,242,226,242,225,227,235,229,
+ 116, 2,207, 86,207, 93,236,229,230,116,128, 48, 22,242,233,231,
+ 232,116,128, 48, 23,242,233,231,232,244,240,239,233,238,244,233,
+ 238,103, 2,207,119,207,135,243,237,225,236,236,244,242,233,225,
+ 238,231,236,101,128, 37,185,244,242,233,225,238,231,236,101,128,
+ 37,183,115, 3,207,154,207,184,207,192,109, 2,207,160,207,172,
+ 225,236,236,243,241,245,225,242,101,128, 37,171,233,236,233,238,
+ 231,230,225,227,101,128, 38, 58,241,245,225,242,101,128, 37,161,
+ 244,225,114,128, 38, 6,116, 2,207,204,207,215,229,236,229,240,
+ 232,239,238,101,128, 38, 15,239,242,244,239,233,243,229,243,232,
+ 229,236,236,226,242,225,227,235,229,116, 2,207,239,207,246,236,
+ 229,230,116,128, 48, 24,242,233,231,232,116,128, 48, 25,245,240,
+ 240,239,233,238,244,233,238,103, 2,208, 13,208, 29,243,237,225,
+ 236,236,244,242,233,225,238,231,236,101,128, 37,181,244,242,233,
+ 225,238,231,236,101,128, 37,179,105, 2,208, 46,208, 57,232,233,
+ 242,225,231,225,238, 97,128, 48,144,107, 2,208, 63,208, 73,225,
+ 244,225,235,225,238, 97,128, 48,240,239,242,229,225,110,128, 49,
+ 95,237,239,238,239,243,240,225,227,101,128,255, 87,111, 4,208,
+ 103,208,114,208,139,208,157,232,233,242,225,231,225,238, 97,128,
+ 48,146,235,225,244,225,235,225,238, 97,129, 48,242,208,127,232,
+ 225,236,230,247,233,228,244,104,128,255,102,110,129, 32,169,208,
+ 145,237,239,238,239,243,240,225,227,101,128,255,230,247,225,229,
+ 238,244,232,225,105,128, 14, 39,240,225,242,229,110,128, 36,178,
+ 242,233,238,103,128, 30,152,243,245,240,229,242,233,239,114,128,
+ 2,183,244,245,242,238,229,100,128, 2,141,249,238,110,128, 1,
+ 191,120,137, 0,120,208,231,208,242,208,253,209, 6,209, 33,209,
+ 46,209, 50,209, 62,209, 70,225,226,239,246,229,227,237, 98,128,
+ 3, 61,226,239,240,239,237,239,230,111,128, 49, 18,227,233,242,
+ 227,236,101,128, 36,231,100, 2,209, 12,209, 22,233,229,242,229,
+ 243,233,115,128, 30,141,239,244,225,227,227,229,238,116,128, 30,
+ 139,229,232,225,242,237,229,238,233,225,110,128, 5,109,105,128,
+ 3,190,237,239,238,239,243,240,225,227,101,128,255, 88,240,225,
+ 242,229,110,128, 36,179,243,245,240,229,242,233,239,114,128, 2,
+ 227,121,143, 0,121,209,115,210, 74,210, 97,210,137,212,103,212,
+ 111,212,128,212,192,212,204,213,201,213,241,213,253,214, 8,214,
+ 29,215, 2, 97, 11,209,139,209,151,209,161,209,168,209,175,209,
+ 185,209,210,209,221,210, 3,210, 16,210, 62,225,228,239,243,241,
+ 245,225,242,101,128, 51, 78,226,229,238,231,225,236,105,128, 9,
+ 175,227,245,244,101,128, 0,253,228,229,246, 97,128, 9, 47,229,
+ 235,239,242,229,225,110,128, 49, 82,231,117, 2,209,192,209,201,
+ 234,225,242,225,244,105,128, 10,175,242,237,245,235,232,105,128,
+ 10, 47,232,233,242,225,231,225,238, 97,128, 48,132,107, 2,209,
+ 227,209,251,225,244,225,235,225,238, 97,129, 48,228,209,239,232,
+ 225,236,230,247,233,228,244,104,128,255,148,239,242,229,225,110,
+ 128, 49, 81,237,225,235,235,225,238,244,232,225,105,128, 14, 78,
+ 243,237,225,236,108, 2,210, 26,210, 37,232,233,242,225,231,225,
+ 238, 97,128, 48,131,235,225,244,225,235,225,238, 97,129, 48,227,
+ 210, 50,232,225,236,230,247,233,228,244,104,128,255,108,244,227,
+ 249,242,233,236,236,233, 99,128, 4, 99,227,233,242, 99, 2,210,
+ 83,210, 88,236,101,128, 36,232,245,237,230,236,229,120,128, 1,
+ 119,100, 2,210,103,210,113,233,229,242,229,243,233,115,128, 0,
+ 255,239,116, 2,210,120,210,129,225,227,227,229,238,116,128, 30,
+ 143,226,229,236,239,119,128, 30,245,101, 7,210,153,211,161,211,
+ 170,211,188,211,220,212, 40,212, 91,104, 8,210,171,210,180,210,
+ 214,210,228,211, 45,211, 61,211,120,211,138,225,242,225,226,233,
+ 99,128, 6, 74,226,225,242,242,229,101, 2,210,191,210,200,225,
+ 242,225,226,233, 99,128, 6,210,230,233,238,225,236,225,242,225,
+ 226,233, 99,128,251,175,230,233,238,225,236,225,242,225,226,233,
+ 99,128,254,242,232,225,237,250,225,225,226,239,246,101, 4,210,
+ 247,211, 0,211, 14,211, 30,225,242,225,226,233, 99,128, 6, 38,
+ 230,233,238,225,236,225,242,225,226,233, 99,128,254,138,233,238,
+ 233,244,233,225,236,225,242,225,226,233, 99,128,254,139,237,229,
+ 228,233,225,236,225,242,225,226,233, 99,128,254,140,233,238,233,
+ 244,233,225,236,225,242,225,226,233, 99,128,254,243,237,101, 2,
+ 211, 68,211, 81,228,233,225,236,225,242,225,226,233, 99,128,254,
+ 244,229,237,105, 2,211, 89,211,104,238,233,244,233,225,236,225,
+ 242,225,226,233, 99,128,252,221,243,239,236,225,244,229,228,225,
+ 242,225,226,233, 99,128,252, 88,238,239,239,238,230,233,238,225,
+ 236,225,242,225,226,233, 99,128,252,148,244,232,242,229,229,228,
+ 239,244,243,226,229,236,239,247,225,242,225,226,233, 99,128, 6,
+ 209,235,239,242,229,225,110,128, 49, 86,110,129, 0,165,211,176,
+ 237,239,238,239,243,240,225,227,101,128,255,229,111, 2,211,194,
+ 211,203,235,239,242,229,225,110,128, 49, 85,242,233,238,232,233,
+ 229,245,232,235,239,242,229,225,110,128, 49,134,114, 3,211,228,
+ 212, 8,212, 20,225,232,226,229,238,249,239,237,111, 2,211,242,
+ 211,251,232,229,226,242,229,119,128, 5,170,236,229,230,244,232,
+ 229,226,242,229,119,128, 5,170,233,227,249,242,233,236,236,233,
+ 99,128, 4, 75,245,228,233,229,242,229,243,233,243,227,249,242,
+ 233,236,236,233, 99,128, 4,249,243,233,229,245,238,103, 3,212,
+ 53,212, 62,212, 78,235,239,242,229,225,110,128, 49,129,240,225,
+ 238,243,233,239,243,235,239,242,229,225,110,128, 49,131,243,233,
+ 239,243,235,239,242,229,225,110,128, 49,130,244,233,246,232,229,
+ 226,242,229,119,128, 5,154,231,242,225,246,101,128, 30,243,232,
+ 239,239,107,129, 1,180,212,120,225,226,239,246,101,128, 30,247,
+ 105, 5,212,140,212,151,212,162,212,171,212,179,225,242,237,229,
+ 238,233,225,110,128, 5,117,227,249,242,233,236,236,233, 99,128,
+ 4, 87,235,239,242,229,225,110,128, 49, 98,238,249,225,238,103,
+ 128, 38, 47,247,238,225,242,237,229,238,233,225,110,128, 5,130,
+ 237,239,238,239,243,240,225,227,101,128,255, 89,111, 7,212,220,
+ 213, 34,213, 45,213, 55,213, 93,213,139,213,148,100,131, 5,217,
+ 212,230,212,250,213, 3,228,225,231,229,243,104,129,251, 57,212,
+ 241,232,229,226,242,229,119,128,251, 57,232,229,226,242,229,119,
+ 128, 5,217,249,239,100, 2,213, 11,213, 20,232,229,226,242,229,
+ 119,128, 5,242,240,225,244,225,232,232,229,226,242,229,119,128,
+ 251, 31,232,233,242,225,231,225,238, 97,128, 48,136,233,235,239,
+ 242,229,225,110,128, 49,137,107, 2,213, 61,213, 85,225,244,225,
+ 235,225,238, 97,129, 48,232,213, 73,232,225,236,230,247,233,228,
+ 244,104,128,255,150,239,242,229,225,110,128, 49, 91,243,237,225,
+ 236,108, 2,213,103,213,114,232,233,242,225,231,225,238, 97,128,
+ 48,135,235,225,244,225,235,225,238, 97,129, 48,231,213,127,232,
+ 225,236,230,247,233,228,244,104,128,255,110,244,231,242,229,229,
+ 107,128, 3,243,121, 2,213,154,213,191, 97, 2,213,160,213,170,
+ 229,235,239,242,229,225,110,128, 49,136,107, 2,213,176,213,184,
+ 239,242,229,225,110,128, 49,135,244,232,225,105,128, 14, 34,233,
+ 238,231,244,232,225,105,128, 14, 13,112, 2,213,207,213,214,225,
+ 242,229,110,128, 36,180,239,231,229,231,242,225,237,237,229,238,
+ 105,129, 3,122,213,230,231,242,229,229,235,227,237, 98,128, 3,
+ 69,114,129, 1,166,213,247,233,238,103,128, 30,153,243,245,240,
+ 229,242,233,239,114,128, 2,184,116, 2,214, 14,214, 21,233,236,
+ 228,101,128, 30,249,245,242,238,229,100,128, 2,142,117, 5,214,
+ 41,214, 52,214, 62,214,100,214,232,232,233,242,225,231,225,238,
+ 97,128, 48,134,233,235,239,242,229,225,110,128, 49,140,107, 2,
+ 214, 68,214, 92,225,244,225,235,225,238, 97,129, 48,230,214, 80,
+ 232,225,236,230,247,233,228,244,104,128,255,149,239,242,229,225,
+ 110,128, 49, 96,115, 3,214,108,214,146,214,187,226,233,103, 2,
+ 214,116,214,127,227,249,242,233,236,236,233, 99,128, 4,107,233,
+ 239,244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128,
+ 4,109,236,233,244,244,236,101, 2,214,157,214,168,227,249,242,
+ 233,236,236,233, 99,128, 4,103,233,239,244,233,230,233,229,228,
+ 227,249,242,233,236,236,233, 99,128, 4,105,237,225,236,108, 2,
+ 214,196,214,207,232,233,242,225,231,225,238, 97,128, 48,133,235,
+ 225,244,225,235,225,238, 97,129, 48,229,214,220,232,225,236,230,
+ 247,233,228,244,104,128,255,109,249,101, 2,214,239,214,248,235,
+ 239,242,229,225,110,128, 49,139,239,235,239,242,229,225,110,128,
+ 49,138,249, 97, 2,215, 9,215, 19,226,229,238,231,225,236,105,
+ 128, 9,223,228,229,246, 97,128, 9, 95,122,142, 0,122,215, 58,
+ 216, 66,216, 77,216,120,216,147,217,182,218, 34,218, 76,218, 88,
+ 218,100,218,128,218,136,218,152,218,161, 97, 10,215, 80,215, 91,
+ 215, 98,215,105,215,116,215,194,215,224,215,235,216, 15,216, 27,
+ 225,242,237,229,238,233,225,110,128, 5,102,227,245,244,101,128,
+ 1,122,228,229,246, 97,128, 9, 91,231,245,242,237,245,235,232,
+ 105,128, 10, 91,104, 4,215,126,215,135,215,149,215,179,225,242,
+ 225,226,233, 99,128, 6, 56,230,233,238,225,236,225,242,225,226,
+ 233, 99,128,254,198,105, 2,215,155,215,170,238,233,244,233,225,
+ 236,225,242,225,226,233, 99,128,254,199,242,225,231,225,238, 97,
+ 128, 48, 86,237,229,228,233,225,236,225,242,225,226,233, 99,128,
+ 254,200,233,110, 2,215,201,215,210,225,242,225,226,233, 99,128,
+ 6, 50,230,233,238,225,236,225,242,225,226,233, 99,128,254,176,
+ 235,225,244,225,235,225,238, 97,128, 48,182,241,229,102, 2,215,
+ 243,216, 1,231,225,228,239,236,232,229,226,242,229,119,128, 5,
+ 149,241,225,244,225,238,232,229,226,242,229,119,128, 5,148,242,
+ 241,225,232,229,226,242,229,119,128, 5,152,249,233,110,130, 5,
+ 214,216, 37,216, 57,228,225,231,229,243,104,129,251, 54,216, 48,
+ 232,229,226,242,229,119,128,251, 54,232,229,226,242,229,119,128,
+ 5,214,226,239,240,239,237,239,230,111,128, 49, 23, 99, 3,216,
+ 85,216, 92,216,114,225,242,239,110,128, 1,126,233,242, 99, 2,
+ 216,100,216,105,236,101,128, 36,233,245,237,230,236,229,120,128,
+ 30,145,245,242,108,128, 2,145,228,239,116,130, 1,124,216,130,
+ 216,139,225,227,227,229,238,116,128, 1,124,226,229,236,239,119,
+ 128, 30,147,101, 6,216,161,216,172,216,215,216,226,216,237,217,
+ 177,227,249,242,233,236,236,233, 99,128, 4, 55,100, 2,216,178,
+ 216,197,229,243,227,229,238,228,229,242,227,249,242,233,236,236,
+ 233, 99,128, 4,153,233,229,242,229,243,233,243,227,249,242,233,
+ 236,236,233, 99,128, 4,223,232,233,242,225,231,225,238, 97,128,
+ 48, 92,235,225,244,225,235,225,238, 97,128, 48,188,242,111,140,
+ 0, 48,217, 10,217, 19,217, 29,217, 36,217, 61,217, 74,217, 85,
+ 217, 97,217,108,217,118,217,129,217,136,225,242,225,226,233, 99,
+ 128, 6, 96,226,229,238,231,225,236,105,128, 9,230,228,229,246,
+ 97,128, 9,102,231,117, 2,217, 43,217, 52,234,225,242,225,244,
+ 105,128, 10,230,242,237,245,235,232,105,128, 10,102,232,225,227,
+ 235,225,242,225,226,233, 99,128, 6, 96,233,238,230,229,242,233,
+ 239,114,128, 32,128,237,239,238,239,243,240,225,227,101,128,255,
+ 16,239,236,228,243,244,249,236,101,128,247, 48,240,229,242,243,
+ 233,225,110,128, 6,240,243,245,240,229,242,233,239,114,128, 32,
+ 112,244,232,225,105,128, 14, 80,247,233,228,244,104, 3,217,148,
+ 217,157,217,169,234,239,233,238,229,114,128,254,255,238,239,238,
+ 234,239,233,238,229,114,128, 32, 12,243,240,225,227,101,128, 32,
+ 11,244, 97,128, 3,182,104, 2,217,188,217,199,226,239,240,239,
+ 237,239,230,111,128, 49, 19,101, 4,217,209,217,220,217,236,217,
+ 247,225,242,237,229,238,233,225,110,128, 5,106,226,242,229,246,
+ 229,227,249,242,233,236,236,233, 99,128, 4,194,227,249,242,233,
+ 236,236,233, 99,128, 4, 54,100, 2,217,253,218, 16,229,243,227,
+ 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,151,
233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,
- 4,235,229,238,231,225,236,105,128, 9,147,239,240,239,237,239,
- 230,111,128, 49, 27,242,229,246,101,128, 1, 79, 99, 3,139,100,
- 139,173,139,252, 97, 2,139,106,139,167,238,228,242, 97, 3,139,
- 117,139,124,139,135,228,229,246, 97,128, 9, 17,231,245,234,225,
- 242,225,244,105,128, 10,145,246,239,247,229,236,243,233,231,110,
- 2,139,149,139,156,228,229,246, 97,128, 9, 73,231,245,234,225,
- 242,225,244,105,128, 10,201,242,239,110,128, 1,210,233,242, 99,
- 2,139,181,139,186,236,101,128, 36,222,245,237,230,236,229,120,
- 133, 0,244,139,205,139,213,139,224,139,232,139,244,225,227,245,
- 244,101,128, 30,209,228,239,244,226,229,236,239,119,128, 30,217,
- 231,242,225,246,101,128, 30,211,232,239,239,235,225,226,239,246,
- 101,128, 30,213,244,233,236,228,101,128, 30,215,249,242,233,236,
- 236,233, 99,128, 4, 62,100, 4,140, 16,140, 39,140, 45,140, 68,
- 226,108, 2,140, 23,140, 31,225,227,245,244,101,128, 1, 81,231,
- 242,225,246,101,128, 2, 13,229,246, 97,128, 9, 19,233,229,242,
- 229,243,233,115,129, 0,246,140, 57,227,249,242,233,236,236,233,
- 99,128, 4,231,239,244,226,229,236,239,119,128, 30,205,101,129,
- 1, 83,140, 84,235,239,242,229,225,110,128, 49, 90,103, 3,140,
- 101,140,116,140,123,239,238,229,107,129, 2,219,140,110,227,237,
- 98,128, 3, 40,242,225,246,101,128, 0,242,245,234,225,242,225,
- 244,105,128, 10,147,104, 4,140,143,140,154,140,164,140,242,225,
- 242,237,229,238,233,225,110,128, 5,133,233,242,225,231,225,238,
- 97,128, 48, 74,111, 2,140,170,140,180,239,235,225,226,239,246,
- 101,128, 30,207,242,110,133, 1,161,140,195,140,203,140,214,140,
- 222,140,234,225,227,245,244,101,128, 30,219,228,239,244,226,229,
- 236,239,119,128, 30,227,231,242,225,246,101,128, 30,221,232,239,
- 239,235,225,226,239,246,101,128, 30,223,244,233,236,228,101,128,
- 30,225,245,238,231,225,242,245,237,236,225,245,116,128, 1, 81,
- 105,129, 1,163,141, 6,238,246,229,242,244,229,228,226,242,229,
- 246,101,128, 2, 15,107, 2,141, 27,141, 51,225,244,225,235,225,
- 238, 97,129, 48,170,141, 39,232,225,236,230,247,233,228,244,104,
- 128,255,117,239,242,229,225,110,128, 49, 87,236,229,232,229,226,
- 242,229,119,128, 5,171,109, 6,141, 84,141,112,141,119,141,208,
- 141,219,141,237,225,227,242,239,110,130, 1, 77,141, 96,141,104,
- 225,227,245,244,101,128, 30, 83,231,242,225,246,101,128, 30, 81,
- 228,229,246, 97,128, 9, 80,229,231, 97,133, 3,201,141,135,141,
- 139,141,150,141,164,141,180, 49,128, 3,214,227,249,242,233,236,
- 236,233, 99,128, 4, 97,236,225,244,233,238,227,236,239,243,229,
- 100,128, 2,119,242,239,245,238,228,227,249,242,233,236,236,233,
- 99,128, 4,123,116, 2,141,186,141,201,233,244,236,239,227,249,
- 242,233,236,236,233, 99,128, 4,125,239,238,239,115,128, 3,206,
- 231,245,234,225,242,225,244,105,128, 10,208,233,227,242,239,110,
- 129, 3,191,141,229,244,239,238,239,115,128, 3,204,239,238,239,
- 243,240,225,227,101,128,255, 79,238,101,145, 0, 49,142, 31,142,
- 40,142, 50,142, 80,142,105,142,114,142,123,142,148,142,182,142,
- 216,142,228,142,247,143, 2,143, 35,143, 45,143, 53,143, 64,225,
- 242,225,226,233, 99,128, 6, 97,226,229,238,231,225,236,105,128,
- 9,231,227,233,242,227,236,101,129, 36, 96,142, 61,233,238,246,
- 229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39,138,
- 100, 2,142, 86,142, 92,229,246, 97,128, 9,103,239,244,229,238,
- 236,229,225,228,229,114,128, 32, 36,229,233,231,232,244,104,128,
- 33, 91,230,233,244,244,229,100,128,246,220,231,117, 2,142,130,
- 142,139,234,225,242,225,244,105,128, 10,231,242,237,245,235,232,
- 105,128, 10,103,232, 97, 3,142,157,142,168,142,173,227,235,225,
- 242,225,226,233, 99,128, 6, 97,236,102,128, 0,189,238,231,250,
- 232,239,117,128, 48, 33,105, 2,142,188,142,206,228,229,239,231,
- 242,225,240,232,233,227,240,225,242,229,110,128, 50, 32,238,230,
- 229,242,233,239,114,128, 32,129,237,239,238,239,243,240,225,227,
- 101,128,255, 17,238,245,237,229,242,225,244,239,242,226,229,238,
- 231,225,236,105,128, 9,244,239,236,228,243,244,249,236,101,128,
- 247, 49,112, 2,143, 8,143, 15,225,242,229,110,128, 36,116,229,
- 114, 2,143, 22,143, 28,233,239,100,128, 36,136,243,233,225,110,
- 128, 6,241,241,245,225,242,244,229,114,128, 0,188,242,239,237,
- 225,110,128, 33,112,243,245,240,229,242,233,239,114,128, 0,185,
- 244,104, 2,143, 71,143, 76,225,105,128, 14, 81,233,242,100,128,
- 33, 83,111, 3,143, 90,143,124,143,140,103, 2,143, 96,143,114,
- 239,238,229,107,129, 1,235,143,105,237,225,227,242,239,110,128,
- 1,237,245,242,237,245,235,232,105,128, 10, 19,237,225,244,242,
- 225,231,245,242,237,245,235,232,105,128, 10, 75,240,229,110,128,
- 2, 84,112, 3,143,154,143,161,143,172,225,242,229,110,128, 36,
- 170,229,238,226,245,236,236,229,116,128, 37,230,244,233,239,110,
- 128, 35, 37,114, 2,143,185,143,214,100, 2,143,191,143,202,230,
- 229,237,233,238,233,238,101,128, 0,170,237,225,243,227,245,236,
- 233,238,101,128, 0,186,244,232,239,231,239,238,225,108,128, 34,
- 31,115, 5,143,237,144, 13,144, 30,144, 75,144, 88,232,239,242,
- 116, 2,143,246,143,253,228,229,246, 97,128, 9, 18,246,239,247,
- 229,236,243,233,231,238,228,229,246, 97,128, 9, 74,236,225,243,
- 104,129, 0,248,144, 22,225,227,245,244,101,128, 1,255,237,225,
- 236,108, 2,144, 39,144, 50,232,233,242,225,231,225,238, 97,128,
- 48, 73,235,225,244,225,235,225,238, 97,129, 48,169,144, 63,232,
- 225,236,230,247,233,228,244,104,128,255,107,244,242,239,235,229,
- 225,227,245,244,101,128, 1,255,245,240,229,242,233,239,114,128,
- 246,240,116, 2,144,104,144,115,227,249,242,233,236,236,233, 99,
- 128, 4,127,233,236,228,101,130, 0,245,144,126,144,134,225,227,
- 245,244,101,128, 30, 77,228,233,229,242,229,243,233,115,128, 30,
- 79,245,226,239,240,239,237,239,230,111,128, 49, 33,118, 2,144,
- 163,144,244,229,114, 2,144,170,144,236,236,233,238,101,131, 32,
- 62,144,183,144,206,144,229, 99, 2,144,189,144,201,229,238,244,
- 229,242,236,233,238,101,128,254, 74,237, 98,128, 3, 5,100, 2,
- 144,212,144,220,225,243,232,229,100,128,254, 73,226,236,247,225,
- 246,121,128,254, 76,247,225,246,121,128,254, 75,243,227,239,242,
- 101,128, 0,175,239,247,229,236,243,233,231,110, 3,145, 3,145,
- 13,145, 20,226,229,238,231,225,236,105,128, 9,203,228,229,246,
- 97,128, 9, 75,231,245,234,225,242,225,244,105,128, 10,203,112,
- 145, 0,112,145, 69,147,197,147,208,147,217,147,229,149,154,149,
- 164,150,156,151,175,152, 9,152, 35,152,166,152,174,153, 76,153,
- 134,153,162,153,172, 97, 14,145, 99,145,131,145,141,145,148,145,
- 155,145,203,145,214,145,228,145,239,146, 30,146, 44,147, 56,147,
- 95,147,185, 97, 2,145,105,145,117,237,240,243,243,241,245,225,
- 242,101,128, 51,128,243,229,238,244,239,243,241,245,225,242,101,
- 128, 51, 43,226,229,238,231,225,236,105,128, 9,170,227,245,244,
- 101,128, 30, 85,228,229,246, 97,128, 9, 42,103, 2,145,161,145,
- 179,101, 2,145,167,145,174,228,239,247,110,128, 33,223,245,112,
- 128, 33,222,117, 2,145,185,145,194,234,225,242,225,244,105,128,
- 10,170,242,237,245,235,232,105,128, 10, 42,232,233,242,225,231,
- 225,238, 97,128, 48,113,233,249,225,238,238,239,233,244,232,225,
- 105,128, 14, 47,235,225,244,225,235,225,238, 97,128, 48,209,108,
- 2,145,245,146, 14,225,244,225,236,233,250,225,244,233,239,238,
- 227,249,242,233,236,236,233,227,227,237, 98,128, 4,132,239,227,
- 232,235,225,227,249,242,233,236,236,233, 99,128, 4,192,238,243,
- 233,239,243,235,239,242,229,225,110,128, 49,127,114, 3,146, 52,
- 146, 73,147, 45, 97, 2,146, 58,146, 66,231,242,225,240,104,128,
- 0,182,236,236,229,108,128, 34, 37,229,110, 2,146, 80,146,190,
- 236,229,230,116,136, 0, 40,146,103,146,118,146,123,146,128,146,
- 139,146,151,146,174,146,179,225,236,244,239,238,229,225,242,225,
- 226,233, 99,128,253, 62,226,116,128,248,237,229,120,128,248,236,
- 233,238,230,229,242,233,239,114,128, 32,141,237,239,238,239,243,
- 240,225,227,101,128,255, 8,115, 2,146,157,146,164,237,225,236,
- 108,128,254, 89,245,240,229,242,233,239,114,128, 32,125,244,112,
- 128,248,235,246,229,242,244,233,227,225,108,128,254, 53,242,233,
- 231,232,116,136, 0, 41,146,214,146,229,146,234,146,239,146,250,
- 147, 6,147, 29,147, 34,225,236,244,239,238,229,225,242,225,226,
- 233, 99,128,253, 63,226,116,128,248,248,229,120,128,248,247,233,
- 238,230,229,242,233,239,114,128, 32,142,237,239,238,239,243,240,
- 225,227,101,128,255, 9,115, 2,147, 12,147, 19,237,225,236,108,
- 128,254, 90,245,240,229,242,233,239,114,128, 32,126,244,112,128,
- 248,246,246,229,242,244,233,227,225,108,128,254, 54,244,233,225,
- 236,228,233,230,102,128, 34, 2,115, 3,147, 64,147, 75,147, 87,
- 229,241,232,229,226,242,229,119,128, 5,192,232,244,225,232,229,
- 226,242,229,119,128, 5,153,241,245,225,242,101,128, 51,169,244,
- 225,104,134, 5,183,147,113,147,127,147,132,147,141,147,156,147,
- 172, 49, 2,147,119,147,123, 49,128, 5,183,100,128, 5,183,178,
- 97,128, 5,183,232,229,226,242,229,119,128, 5,183,238,225,242,
- 242,239,247,232,229,226,242,229,119,128, 5,183,241,245,225,242,
- 244,229,242,232,229,226,242,229,119,128, 5,183,247,233,228,229,
- 232,229,226,242,229,119,128, 5,183,250,229,242,232,229,226,242,
- 229,119,128, 5,161,226,239,240,239,237,239,230,111,128, 49, 6,
- 227,233,242,227,236,101,128, 36,223,228,239,244,225,227,227,229,
- 238,116,128, 30, 87,101,137, 5,228,147,251,148, 6,148, 26,148,
- 38,148, 58,148,160,148,171,148,192,149,147,227,249,242,233,236,
- 236,233, 99,128, 4, 63,228,225,231,229,243,104,129,251, 68,148,
- 17,232,229,226,242,229,119,128,251, 68,229,250,233,243,241,245,
- 225,242,101,128, 51, 59,230,233,238,225,236,228,225,231,229,243,
- 232,232,229,226,242,229,119,128,251, 67,104, 5,148, 70,148, 93,
- 148,101,148,115,148,145,225,114, 2,148, 77,148, 84,225,226,233,
- 99,128, 6,126,237,229,238,233,225,110,128, 5,122,229,226,242,
- 229,119,128, 5,228,230,233,238,225,236,225,242,225,226,233, 99,
- 128,251, 87,105, 2,148,121,148,136,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,251, 88,242,225,231,225,238, 97,128, 48,
- 122,237,229,228,233,225,236,225,242,225,226,233, 99,128,251, 89,
- 235,225,244,225,235,225,238, 97,128, 48,218,237,233,228,228,236,
- 229,232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,167,
- 114, 5,148,204,148,216,149, 2,149,123,149,136,225,230,229,232,
- 229,226,242,229,119,128,251, 78,227,229,238,116,131, 0, 37,148,
- 229,148,238,148,250,225,242,225,226,233, 99,128, 6,106,237,239,
- 238,239,243,240,225,227,101,128,255, 5,243,237,225,236,108,128,
- 254,106,105, 2,149, 8,149,105,239,100,134, 0, 46,149, 25,149,
- 36,149, 47,149, 59,149, 70,149, 82,225,242,237,229,238,233,225,
- 110,128, 5,137,227,229,238,244,229,242,229,100,128, 0,183,232,
- 225,236,230,247,233,228,244,104,128,255, 97,233,238,230,229,242,
- 233,239,114,128,246,231,237,239,238,239,243,240,225,227,101,128,
- 255, 14,115, 2,149, 88,149, 95,237,225,236,108,128,254, 82,245,
- 240,229,242,233,239,114,128,246,232,243,240,239,237,229,238,233,
- 231,242,229,229,235,227,237, 98,128, 3, 66,240,229,238,228,233,
- 227,245,236,225,114,128, 34,165,244,232,239,245,243,225,238,100,
- 128, 32, 48,243,229,244, 97,128, 32,167,230,243,241,245,225,242,
- 101,128, 51,138,104, 3,149,172,149,222,150,103, 97, 3,149,180,
- 149,190,149,197,226,229,238,231,225,236,105,128, 9,171,228,229,
- 246, 97,128, 9, 43,231,117, 2,149,204,149,213,234,225,242,225,
- 244,105,128, 10,171,242,237,245,235,232,105,128, 10, 43,105,133,
- 3,198,149,236,149,240,150, 70,150, 78,150, 89, 49,128, 3,213,
- 229,245,240,104, 4,149,253,150, 32,150, 47,150, 56, 97, 2,150,
- 3,150, 18,227,233,242,227,236,229,235,239,242,229,225,110,128,
- 50,122,240,225,242,229,238,235,239,242,229,225,110,128, 50, 26,
- 227,233,242,227,236,229,235,239,242,229,225,110,128, 50,108,235,
- 239,242,229,225,110,128, 49, 77,240,225,242,229,238,235,239,242,
- 229,225,110,128, 50, 12,236,225,244,233,110,128, 2,120,238,244,
- 232,245,244,232,225,105,128, 14, 58,243,249,237,226,239,236,231,
- 242,229,229,107,128, 3,213,111, 3,150,111,150,116,150,142,239,
- 107,128, 1,165,240,104, 2,150,123,150,132,225,238,244,232,225,
- 105,128, 14, 30,245,238,231,244,232,225,105,128, 14, 28,243,225,
- 237,240,232,225,239,244,232,225,105,128, 14, 32,105,133, 3,192,
- 150,170,151,126,151,137,151,148,151,162,229,245,112, 6,150,186,
- 150,221,150,253,151, 25,151, 39,151, 91, 97, 2,150,192,150,207,
- 227,233,242,227,236,229,235,239,242,229,225,110,128, 50,115,240,
- 225,242,229,238,235,239,242,229,225,110,128, 50, 19,227,105, 2,
- 150,228,150,240,229,245,227,235,239,242,229,225,110,128, 49,118,
- 242,227,236,229,235,239,242,229,225,110,128, 50,101,107, 2,151,
- 3,151, 17,233,249,229,239,235,235,239,242,229,225,110,128, 49,
- 114,239,242,229,225,110,128, 49, 66,240,225,242,229,238,235,239,
- 242,229,225,110,128, 50, 5,243,233,239,115, 2,151, 48,151, 76,
- 107, 2,151, 54,151, 68,233,249,229,239,235,235,239,242,229,225,
- 110,128, 49,116,239,242,229,225,110,128, 49, 68,244,233,235,229,
- 245,244,235,239,242,229,225,110,128, 49,117,116, 2,151, 97,151,
- 112,232,233,229,245,244,232,235,239,242,229,225,110,128, 49,119,
- 233,235,229,245,244,235,239,242,229,225,110,128, 49,115,232,233,
- 242,225,231,225,238, 97,128, 48,116,235,225,244,225,235,225,238,
- 97,128, 48,212,243,249,237,226,239,236,231,242,229,229,107,128,
- 3,214,247,242,225,242,237,229,238,233,225,110,128, 5,131,236,
- 245,115,132, 0, 43,151,189,151,200,151,209,151,242,226,229,236,
- 239,247,227,237, 98,128, 3, 31,227,233,242,227,236,101,128, 34,
- 149,109, 2,151,215,151,222,233,238,245,115,128, 0,177,111, 2,
- 151,228,151,232,100,128, 2,214,238,239,243,240,225,227,101,128,
- 255, 11,115, 2,151,248,151,255,237,225,236,108,128,254, 98,245,
- 240,229,242,233,239,114,128, 32,122,109, 2,152, 15,152, 26,239,
- 238,239,243,240,225,227,101,128,255, 80,243,241,245,225,242,101,
- 128, 51,216,111, 5,152, 47,152, 58,152,125,152,136,152,146,232,
- 233,242,225,231,225,238, 97,128, 48,125,233,238,244,233,238,231,
- 233,238,228,229,120, 4,152, 78,152, 90,152,102,152,115,228,239,
- 247,238,247,232,233,244,101,128, 38, 31,236,229,230,244,247,232,
- 233,244,101,128, 38, 28,242,233,231,232,244,247,232,233,244,101,
- 128, 38, 30,245,240,247,232,233,244,101,128, 38, 29,235,225,244,
- 225,235,225,238, 97,128, 48,221,240,236,225,244,232,225,105,128,
- 14, 27,243,244,225,236,237,225,242,107,129, 48, 18,152,159,230,
- 225,227,101,128, 48, 32,240,225,242,229,110,128, 36,171,114, 3,
- 152,182,152,208,152,233,101, 2,152,188,152,196,227,229,228,229,
- 115,128, 34,122,243,227,242,233,240,244,233,239,110,128, 33, 30,
- 233,237,101, 2,152,216,152,222,237,239,100,128, 2,185,242,229,
- 246,229,242,243,229,100,128, 32, 53,111, 4,152,243,152,250,153,
- 4,153, 17,228,245,227,116,128, 34, 15,234,229,227,244,233,246,
- 101,128, 35, 5,236,239,238,231,229,228,235,225,238, 97,128, 48,
- 252,112, 2,153, 23,153, 60,101, 2,153, 29,153, 36,236,236,239,
- 114,128, 35, 24,242,243,117, 2,153, 44,153, 51,226,243,229,116,
- 128, 34,130,240,229,242,243,229,116,128, 34,131,239,242,244,233,
- 239,110,129, 34, 55,153, 71,225,108,128, 34, 29,115, 2,153, 82,
- 153,125,105,130, 3,200,153, 90,153,101,227,249,242,233,236,236,
- 233, 99,128, 4,113,236,233,240,238,229,245,237,225,244,225,227,
- 249,242,233,236,236,233,227,227,237, 98,128, 4,134,243,241,245,
- 225,242,101,128, 51,176,117, 2,153,140,153,151,232,233,242,225,
- 231,225,238, 97,128, 48,119,235,225,244,225,235,225,238, 97,128,
- 48,215,246,243,241,245,225,242,101,128, 51,180,247,243,241,245,
- 225,242,101,128, 51,186,113,136, 0,113,153,202,154,251,155, 6,
- 155, 15,155, 22,155, 34,155, 72,155, 80, 97, 4,153,212,153,235,
- 154, 43,154,234,100, 2,153,218,153,224,229,246, 97,128, 9, 88,
- 237,225,232,229,226,242,229,119,128, 5,168,102, 4,153,245,153,
- 254,154, 12,154, 28,225,242,225,226,233, 99,128, 6, 66,230,233,
- 238,225,236,225,242,225,226,233, 99,128,254,214,233,238,233,244,
- 233,225,236,225,242,225,226,233, 99,128,254,215,237,229,228,233,
- 225,236,225,242,225,226,233, 99,128,254,216,237,225,244,115,136,
- 5,184,154, 66,154, 86,154,100,154,105,154,110,154,119,154,134,
- 154,221, 49, 3,154, 74,154, 78,154, 82, 48,128, 5,184, 97,128,
- 5,184, 99,128, 5,184, 50, 2,154, 92,154, 96, 55,128, 5,184,
- 57,128, 5,184,179, 51,128, 5,184,228,101,128, 5,184,232,229,
- 226,242,229,119,128, 5,184,238,225,242,242,239,247,232,229,226,
- 242,229,119,128, 5,184,113, 2,154,140,154,206,225,244,225,110,
- 4,154,153,154,162,154,177,154,193,232,229,226,242,229,119,128,
- 5,184,238,225,242,242,239,247,232,229,226,242,229,119,128, 5,
- 184,241,245,225,242,244,229,242,232,229,226,242,229,119,128, 5,
- 184,247,233,228,229,232,229,226,242,229,119,128, 5,184,245,225,
- 242,244,229,242,232,229,226,242,229,119,128, 5,184,247,233,228,
- 229,232,229,226,242,229,119,128, 5,184,242,238,229,249,240,225,
- 242,225,232,229,226,242,229,119,128, 5,159,226,239,240,239,237,
- 239,230,111,128, 49, 17,227,233,242,227,236,101,128, 36,224,232,
- 239,239,107,128, 2,160,237,239,238,239,243,240,225,227,101,128,
- 255, 81,239,102,130, 5,231,155, 43,155, 63,228,225,231,229,243,
- 104,129,251, 71,155, 54,232,229,226,242,229,119,128,251, 71,232,
- 229,226,242,229,119,128, 5,231,240,225,242,229,110,128, 36,172,
- 117, 4,155, 90,155,102,155,191,156, 22,225,242,244,229,242,238,
- 239,244,101,128, 38,105,226,245,244,115,135, 5,187,155,123,155,
- 128,155,133,155,138,155,147,155,162,155,178,177, 56,128, 5,187,
- 178, 53,128, 5,187,179, 49,128, 5,187,232,229,226,242,229,119,
- 128, 5,187,238,225,242,242,239,247,232,229,226,242,229,119,128,
- 5,187,241,245,225,242,244,229,242,232,229,226,242,229,119,128,
- 5,187,247,233,228,229,232,229,226,242,229,119,128, 5,187,229,
- 243,244,233,239,110,133, 0, 63,155,210,155,233,155,250,156, 2,
- 156, 14,225,114, 2,155,217,155,224,225,226,233, 99,128, 6, 31,
- 237,229,238,233,225,110,128, 5, 94,228,239,247,110,129, 0,191,
- 155,242,243,237,225,236,108,128,247,191,231,242,229,229,107,128,
- 3,126,237,239,238,239,243,240,225,227,101,128,255, 31,243,237,
- 225,236,108,128,247, 63,239,244,101, 4,156, 34,156,105,156,125,
- 156,154,228,226,108,133, 0, 34,156, 50,156, 57,156, 64,156, 76,
- 156, 97,226,225,243,101,128, 32, 30,236,229,230,116,128, 32, 28,
- 237,239,238,239,243,240,225,227,101,128,255, 2,240,242,233,237,
- 101,129, 48, 30,156, 86,242,229,246,229,242,243,229,100,128, 48,
- 29,242,233,231,232,116,128, 32, 29,236,229,230,116,129, 32, 24,
- 156,114,242,229,246,229,242,243,229,100,128, 32, 27,114, 2,156,
- 131,156,141,229,246,229,242,243,229,100,128, 32, 27,233,231,232,
- 116,129, 32, 25,156,150,110,128, 1, 73,243,233,238,231,108, 2,
- 156,164,156,171,226,225,243,101,128, 32, 26,101,129, 0, 39,156,
- 177,237,239,238,239,243,240,225,227,101,128,255, 7,114,145, 0,
- 114,156,227,157,231,157,242,158, 33,158, 84,159,101,159,125,159,
- 220,161,254,162, 35,162, 47,162,101,162,109,163, 15,163, 26,163,
- 61,163,161, 97, 11,156,251,157, 6,157, 16,157, 23,157, 88,157,
- 104,157,129,157,140,157,165,157,188,157,225,225,242,237,229,238,
- 233,225,110,128, 5,124,226,229,238,231,225,236,105,128, 9,176,
- 227,245,244,101,128, 1, 85,100, 4,157, 33,157, 39,157, 53,157,
- 79,229,246, 97,128, 9, 48,233,227,225,108,129, 34, 26,157, 48,
- 229,120,128,248,229,239,246,229,242,243,243,241,245,225,242,101,
- 129, 51,174,157, 69,228,243,241,245,225,242,101,128, 51,175,243,
- 241,245,225,242,101,128, 51,173,230,101,129, 5,191,157, 95,232,
- 229,226,242,229,119,128, 5,191,231,117, 2,157,111,157,120,234,
- 225,242,225,244,105,128, 10,176,242,237,245,235,232,105,128, 10,
- 48,232,233,242,225,231,225,238, 97,128, 48,137,235,225,244,225,
- 235,225,238, 97,129, 48,233,157,153,232,225,236,230,247,233,228,
- 244,104,128,255,151,236,239,247,229,242,228,233,225,231,239,238,
- 225,236,226,229,238,231,225,236,105,128, 9,241,109, 2,157,194,
- 157,217,233,228,228,236,229,228,233,225,231,239,238,225,236,226,
- 229,238,231,225,236,105,128, 9,240,243,232,239,242,110,128, 2,
- 100,244,233,111,128, 34, 54,226,239,240,239,237,239,230,111,128,
- 49, 22, 99, 4,157,252,158, 3,158, 12,158, 20,225,242,239,110,
- 128, 1, 89,229,228,233,236,236, 97,128, 1, 87,233,242,227,236,
- 101,128, 36,225,239,237,237,225,225,227,227,229,238,116,128, 1,
- 87,100, 2,158, 39,158, 49,226,236,231,242,225,246,101,128, 2,
- 17,239,116, 2,158, 56,158, 65,225,227,227,229,238,116,128, 30,
- 89,226,229,236,239,119,129, 30, 91,158, 75,237,225,227,242,239,
- 110,128, 30, 93,101, 6,158, 98,158,143,158,178,158,233,159, 2,
- 159, 35,102, 2,158,104,158,117,229,242,229,238,227,229,237,225,
- 242,107,128, 32, 59,236,229,248,243,117, 2,158,127,158,134,226,
- 243,229,116,128, 34,134,240,229,242,243,229,116,128, 34,135,231,
- 233,243,244,229,114, 2,158,154,158,159,229,100,128, 0,174,115,
- 2,158,165,158,171,225,238,115,128,248,232,229,242,233,102,128,
- 246,218,104, 3,158,186,158,209,158,223,225,114, 2,158,193,158,
- 200,225,226,233, 99,128, 6, 49,237,229,238,233,225,110,128, 5,
- 128,230,233,238,225,236,225,242,225,226,233, 99,128,254,174,233,
- 242,225,231,225,238, 97,128, 48,140,235,225,244,225,235,225,238,
- 97,129, 48,236,158,246,232,225,236,230,247,233,228,244,104,128,
- 255,154,243,104,130, 5,232,159, 11,159, 26,228,225,231,229,243,
- 232,232,229,226,242,229,119,128,251, 72,232,229,226,242,229,119,
- 128, 5,232,118, 3,159, 43,159, 56,159, 88,229,242,243,229,228,
- 244,233,236,228,101,128, 34, 61,233, 97, 2,159, 63,159, 72,232,
- 229,226,242,229,119,128, 5,151,237,245,231,242,225,243,232,232,
- 229,226,242,229,119,128, 5,151,236,239,231,233,227,225,236,238,
- 239,116,128, 35, 16,230,233,243,232,232,239,239,107,129, 2,126,
- 159,114,242,229,246,229,242,243,229,100,128, 2,127,104, 2,159,
- 131,159,154, 97, 2,159,137,159,147,226,229,238,231,225,236,105,
- 128, 9,221,228,229,246, 97,128, 9, 93,111,131, 3,193,159,164,
- 159,193,159,207,239,107,129, 2,125,159,171,244,245,242,238,229,
- 100,129, 2,123,159,182,243,245,240,229,242,233,239,114,128, 2,
- 181,243,249,237,226,239,236,231,242,229,229,107,128, 3,241,244,
- 233,227,232,239,239,235,237,239,100,128, 2,222,105, 6,159,234,
- 161, 22,161, 68,161, 79,161,104,161,240,229,245,108, 9,160, 0,
- 160, 35,160, 50,160, 64,160,110,160,124,160,210,160,223,161, 2,
- 97, 2,160, 6,160, 21,227,233,242,227,236,229,235,239,242,229,
- 225,110,128, 50,113,240,225,242,229,238,235,239,242,229,225,110,
- 128, 50, 17,227,233,242,227,236,229,235,239,242,229,225,110,128,
- 50, 99,232,233,229,245,232,235,239,242,229,225,110,128, 49, 64,
- 107, 2,160, 70,160,102,233,249,229,239,107, 2,160, 80,160, 89,
- 235,239,242,229,225,110,128, 49, 58,243,233,239,243,235,239,242,
- 229,225,110,128, 49,105,239,242,229,225,110,128, 49, 57,237,233,
- 229,245,237,235,239,242,229,225,110,128, 49, 59,112, 3,160,132,
- 160,164,160,179, 97, 2,160,138,160,152,238,243,233,239,243,235,
- 239,242,229,225,110,128, 49,108,242,229,238,235,239,242,229,225,
- 110,128, 50, 3,232,233,229,245,240,232,235,239,242,229,225,110,
- 128, 49, 63,233,229,245,112, 2,160,188,160,197,235,239,242,229,
- 225,110,128, 49, 60,243,233,239,243,235,239,242,229,225,110,128,
- 49,107,243,233,239,243,235,239,242,229,225,110,128, 49, 61,116,
- 2,160,229,160,244,232,233,229,245,244,232,235,239,242,229,225,
- 110,128, 49, 62,233,235,229,245,244,235,239,242,229,225,110,128,
- 49,106,249,229,239,242,233,238,232,233,229,245,232,235,239,242,
- 229,225,110,128, 49,109,231,232,116, 2,161, 30,161, 38,225,238,
- 231,236,101,128, 34, 31,116, 2,161, 44,161, 58,225,227,235,226,
- 229,236,239,247,227,237, 98,128, 3, 25,242,233,225,238,231,236,
- 101,128, 34,191,232,233,242,225,231,225,238, 97,128, 48,138,235,
- 225,244,225,235,225,238, 97,129, 48,234,161, 92,232,225,236,230,
- 247,233,228,244,104,128,255,152,110, 2,161,110,161,226,103,131,
- 2,218,161,120,161,131,161,137,226,229,236,239,247,227,237, 98,
- 128, 3, 37,227,237, 98,128, 3, 10,232,225,236,102, 2,161,146,
- 161,192,236,229,230,116,131, 2,191,161,159,161,170,161,181,225,
- 242,237,229,238,233,225,110,128, 5, 89,226,229,236,239,247,227,
- 237, 98,128, 3, 28,227,229,238,244,229,242,229,100,128, 2,211,
- 242,233,231,232,116,130, 2,190,161,204,161,215,226,229,236,239,
- 247,227,237, 98,128, 3, 57,227,229,238,244,229,242,229,100,128,
- 2,210,246,229,242,244,229,228,226,242,229,246,101,128, 2, 19,
- 244,244,239,242,245,243,241,245,225,242,101,128, 51, 81,108, 2,
- 162, 4,162, 15,233,238,229,226,229,236,239,119,128, 30, 95,239,
- 238,231,236,229,103,129, 2,124,162, 26,244,245,242,238,229,100,
- 128, 2,122,237,239,238,239,243,240,225,227,101,128,255, 82,111,
- 3,162, 55,162, 66,162, 91,232,233,242,225,231,225,238, 97,128,
- 48,141,235,225,244,225,235,225,238, 97,129, 48,237,162, 79,232,
- 225,236,230,247,233,228,244,104,128,255,155,242,245,225,244,232,
- 225,105,128, 14, 35,240,225,242,229,110,128, 36,173,114, 3,162,
- 117,162,153,162,183, 97, 3,162,125,162,135,162,142,226,229,238,
- 231,225,236,105,128, 9,220,228,229,246, 97,128, 9, 49,231,245,
- 242,237,245,235,232,105,128, 10, 92,229,104, 2,162,160,162,169,
- 225,242,225,226,233, 99,128, 6,145,230,233,238,225,236,225,242,
- 225,226,233, 99,128,251,141,246,239,227,225,236,233, 99, 4,162,
- 199,162,209,162,216,162,227,226,229,238,231,225,236,105,128, 9,
- 224,228,229,246, 97,128, 9, 96,231,245,234,225,242,225,244,105,
- 128, 10,224,246,239,247,229,236,243,233,231,110, 3,162,243,162,
- 253,163, 4,226,229,238,231,225,236,105,128, 9,196,228,229,246,
- 97,128, 9, 68,231,245,234,225,242,225,244,105,128, 10,196,243,
- 245,240,229,242,233,239,114,128,246,241,116, 2,163, 32,163, 40,
- 226,236,239,227,107,128, 37,144,245,242,238,229,100,129, 2,121,
- 163, 50,243,245,240,229,242,233,239,114,128, 2,180,117, 4,163,
- 71,163, 82,163,107,163,154,232,233,242,225,231,225,238, 97,128,
- 48,139,235,225,244,225,235,225,238, 97,129, 48,235,163, 95,232,
- 225,236,230,247,233,228,244,104,128,255,153,112, 2,163,113,163,
- 148,229,101, 2,163,120,163,134,237,225,242,235,226,229,238,231,
- 225,236,105,128, 9,242,243,233,231,238,226,229,238,231,225,236,
- 105,128, 9,243,233,225,104,128,246,221,244,232,225,105,128, 14,
- 36,246,239,227,225,236,233, 99, 4,163,177,163,187,163,194,163,
- 205,226,229,238,231,225,236,105,128, 9,139,228,229,246, 97,128,
- 9, 11,231,245,234,225,242,225,244,105,128, 10,139,246,239,247,
- 229,236,243,233,231,110, 3,163,221,163,231,163,238,226,229,238,
- 231,225,236,105,128, 9,195,228,229,246, 97,128, 9, 67,231,245,
- 234,225,242,225,244,105,128, 10,195,115,147, 0,115,164, 35,166,
- 5,166, 16,166,142,166,181,169,123,169,134,172, 21,174,159,174,
- 205,174,232,175,167,175,234,177, 11,177, 21,177,207,178, 24,178,
- 194,178,204, 97, 9,164, 55,164, 65,164, 86,164,158,164,183,164,
- 194,164,219,164,251,165, 35,226,229,238,231,225,236,105,128, 9,
- 184,227,245,244,101,129, 1, 91,164, 74,228,239,244,225,227,227,
- 229,238,116,128, 30,101,100, 5,164, 98,164,107,164,113,164,127,
- 164,143,225,242,225,226,233, 99,128, 6, 53,229,246, 97,128, 9,
- 56,230,233,238,225,236,225,242,225,226,233, 99,128,254,186,233,
- 238,233,244,233,225,236,225,242,225,226,233, 99,128,254,187,237,
- 229,228,233,225,236,225,242,225,226,233, 99,128,254,188,231,117,
- 2,164,165,164,174,234,225,242,225,244,105,128, 10,184,242,237,
- 245,235,232,105,128, 10, 56,232,233,242,225,231,225,238, 97,128,
- 48, 85,235,225,244,225,235,225,238, 97,129, 48,181,164,207,232,
- 225,236,230,247,233,228,244,104,128,255,123,236,236,225,236,236,
- 225,232,239,245,225,236,225,249,232,229,247,225,243,225,236,236,
- 225,237,225,242,225,226,233, 99,128,253,250,237,229,235,104,130,
- 5,225,165, 6,165, 26,228,225,231,229,243,104,129,251, 65,165,
- 17,232,229,226,242,229,119,128,251, 65,232,229,226,242,229,119,
- 128, 5,225,242, 97, 5,165, 48,165,122,165,130,165,180,165,188,
- 97, 5,165, 60,165, 68,165, 76,165,107,165,115,225,244,232,225,
- 105,128, 14, 50,229,244,232,225,105,128, 14, 65,233,237,225,233,
- 109, 2,165, 86,165, 97,225,236,225,233,244,232,225,105,128, 14,
- 68,245,225,238,244,232,225,105,128, 14, 67,237,244,232,225,105,
- 128, 14, 51,244,232,225,105,128, 14, 48,229,244,232,225,105,128,
- 14, 64,105, 3,165,138,165,162,165,173,105, 2,165,144,165,155,
- 236,229,230,244,244,232,225,105,128,248,134,244,232,225,105,128,
- 14, 53,236,229,230,244,244,232,225,105,128,248,133,244,232,225,
- 105,128, 14, 52,239,244,232,225,105,128, 14, 66,117, 3,165,196,
- 165,246,165,253,101, 3,165,204,165,228,165,239,101, 2,165,210,
- 165,221,236,229,230,244,244,232,225,105,128,248,136,244,232,225,
- 105,128, 14, 55,236,229,230,244,244,232,225,105,128,248,135,244,
- 232,225,105,128, 14, 54,244,232,225,105,128, 14, 56,245,244,232,
- 225,105,128, 14, 57,226,239,240,239,237,239,230,111,128, 49, 25,
- 99, 5,166, 28,166, 49,166, 58,166,107,166,129,225,242,239,110,
- 129, 1, 97,166, 37,228,239,244,225,227,227,229,238,116,128, 30,
- 103,229,228,233,236,236, 97,128, 1, 95,232,247, 97,131, 2, 89,
- 166, 70,166, 81,166,100,227,249,242,233,236,236,233, 99,128, 4,
- 217,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233,
- 99,128, 4,219,232,239,239,107,128, 2, 90,233,242, 99, 2,166,
- 115,166,120,236,101,128, 36,226,245,237,230,236,229,120,128, 1,
- 93,239,237,237,225,225,227,227,229,238,116,128, 2, 25,228,239,
- 116, 2,166,150,166,159,225,227,227,229,238,116,128, 30, 97,226,
- 229,236,239,119,129, 30, 99,166,169,228,239,244,225,227,227,229,
- 238,116,128, 30,105,101, 9,166,201,166,217,166,252,167, 61,167,
- 164,167,191,167,216,168, 41,168, 68,225,231,245,236,236,226,229,
- 236,239,247,227,237, 98,128, 3, 60, 99, 2,166,223,166,245,239,
- 238,100,129, 32, 51,166,231,244,239,238,229,227,232,233,238,229,
- 243,101,128, 2,202,244,233,239,110,128, 0,167,229,110, 4,167,
- 7,167, 16,167, 30,167, 46,225,242,225,226,233, 99,128, 6, 51,
- 230,233,238,225,236,225,242,225,226,233, 99,128,254,178,233,238,
- 233,244,233,225,236,225,242,225,226,233, 99,128,254,179,237,229,
- 228,233,225,236,225,242,225,226,233, 99,128,254,180,231,239,108,
- 135, 5,182,167, 81,167, 95,167,100,167,109,167,124,167,140,167,
- 151, 49, 2,167, 87,167, 91, 51,128, 5,182,102,128, 5,182,178,
- 99,128, 5,182,232,229,226,242,229,119,128, 5,182,238,225,242,
- 242,239,247,232,229,226,242,229,119,128, 5,182,241,245,225,242,
- 244,229,242,232,229,226,242,229,119,128, 5,182,244,225,232,229,
- 226,242,229,119,128, 5,146,247,233,228,229,232,229,226,242,229,
- 119,128, 5,182,104, 2,167,170,167,181,225,242,237,229,238,233,
- 225,110,128, 5,125,233,242,225,231,225,238, 97,128, 48, 91,235,
- 225,244,225,235,225,238, 97,129, 48,187,167,204,232,225,236,230,
- 247,233,228,244,104,128,255,126,237,105, 2,167,223,168, 10,227,
- 239,236,239,110,131, 0, 59,167,237,167,246,168, 2,225,242,225,
- 226,233, 99,128, 6, 27,237,239,238,239,243,240,225,227,101,128,
- 255, 27,243,237,225,236,108,128,254, 84,246,239,233,227,229,228,
- 237,225,242,235,235,225,238, 97,129, 48,156,168, 29,232,225,236,
- 230,247,233,228,244,104,128,255,159,238,116, 2,168, 48,168, 58,
- 233,243,241,245,225,242,101,128, 51, 34,239,243,241,245,225,242,
- 101,128, 51, 35,246,229,110,142, 0, 55,168,102,168,111,168,121,
- 168,151,168,158,168,168,168,193,168,220,168,254,169, 10,169, 21,
- 169, 54,169, 62,169, 73,225,242,225,226,233, 99,128, 6,103,226,
- 229,238,231,225,236,105,128, 9,237,227,233,242,227,236,101,129,
- 36,102,168,132,233,238,246,229,242,243,229,243,225,238,243,243,
- 229,242,233,102,128, 39,144,228,229,246, 97,128, 9,109,229,233,
- 231,232,244,232,115,128, 33, 94,231,117, 2,168,175,168,184,234,
- 225,242,225,244,105,128, 10,237,242,237,245,235,232,105,128, 10,
- 109,232, 97, 2,168,200,168,211,227,235,225,242,225,226,233, 99,
- 128, 6,103,238,231,250,232,239,117,128, 48, 39,105, 2,168,226,
- 168,244,228,229,239,231,242,225,240,232,233,227,240,225,242,229,
- 110,128, 50, 38,238,230,229,242,233,239,114,128, 32,135,237,239,
- 238,239,243,240,225,227,101,128,255, 23,239,236,228,243,244,249,
- 236,101,128,247, 55,112, 2,169, 27,169, 34,225,242,229,110,128,
- 36,122,229,114, 2,169, 41,169, 47,233,239,100,128, 36,142,243,
- 233,225,110,128, 6,247,242,239,237,225,110,128, 33,118,243,245,
- 240,229,242,233,239,114,128, 32,119,116, 2,169, 79,169,117,229,
- 229,110, 2,169, 87,169, 96,227,233,242,227,236,101,128, 36,112,
- 112, 2,169,102,169,109,225,242,229,110,128, 36,132,229,242,233,
- 239,100,128, 36,152,232,225,105,128, 14, 87,230,244,232,249,240,
- 232,229,110,128, 0,173,104, 7,169,150,170,124,170,135,170,149,
- 171, 94,171,107,172, 15, 97, 6,169,164,169,175,169,185,169,196,
- 170, 83,170,108,225,242,237,229,238,233,225,110,128, 5,119,226,
- 229,238,231,225,236,105,128, 9,182,227,249,242,233,236,236,233,
- 99,128, 4, 72,100, 2,169,202,170, 42,228, 97, 4,169,213,169,
- 222,169,253,170, 11,225,242,225,226,233, 99,128, 6, 81,228,225,
- 237,237, 97, 2,169,232,169,241,225,242,225,226,233, 99,128,252,
- 97,244,225,238,225,242,225,226,233, 99,128,252, 94,230,225,244,
- 232,225,225,242,225,226,233, 99,128,252, 96,235,225,243,242, 97,
- 2,170, 21,170, 30,225,242,225,226,233, 99,128,252, 98,244,225,
- 238,225,242,225,226,233, 99,128,252, 95,101,132, 37,146,170, 54,
- 170, 61,170, 69,170, 78,228,225,242,107,128, 37,147,236,233,231,
- 232,116,128, 37,145,237,229,228,233,245,109,128, 37,146,246, 97,
- 128, 9, 54,231,117, 2,170, 90,170, 99,234,225,242,225,244,105,
- 128, 10,182,242,237,245,235,232,105,128, 10, 54,236,243,232,229,
- 236,229,244,232,229,226,242,229,119,128, 5,147,226,239,240,239,
- 237,239,230,111,128, 49, 21,227,232,225,227,249,242,233,236,236,
- 233, 99,128, 4, 73,101, 4,170,159,170,224,170,234,170,251,229,
- 110, 4,170,170,170,179,170,193,170,209,225,242,225,226,233, 99,
- 128, 6, 52,230,233,238,225,236,225,242,225,226,233, 99,128,254,
- 182,233,238,233,244,233,225,236,225,242,225,226,233, 99,128,254,
- 183,237,229,228,233,225,236,225,242,225,226,233, 99,128,254,184,
- 233,227,239,240,244,233, 99,128, 3,227,241,229,108,129, 32,170,
- 170,242,232,229,226,242,229,119,128, 32,170,246, 97,134, 5,176,
- 171, 12,171, 27,171, 41,171, 50,171, 65,171, 81, 49, 2,171, 18,
- 171, 23,177, 53,128, 5,176, 53,128, 5,176, 50, 2,171, 33,171,
- 37, 50,128, 5,176,101,128, 5,176,232,229,226,242,229,119,128,
- 5,176,238,225,242,242,239,247,232,229,226,242,229,119,128, 5,
- 176,241,245,225,242,244,229,242,232,229,226,242,229,119,128, 5,
- 176,247,233,228,229,232,229,226,242,229,119,128, 5,176,232,225,
- 227,249,242,233,236,236,233, 99,128, 4,187,105, 2,171,113,171,
- 124,237,225,227,239,240,244,233, 99,128, 3,237,110,131, 5,233,
- 171,134,171,217,171,226,100, 2,171,140,171,206,225,231,229,243,
- 104,130,251, 73,171,152,171,161,232,229,226,242,229,119,128,251,
- 73,115, 2,171,167,171,187,232,233,238,228,239,116,129,251, 44,
- 171,178,232,229,226,242,229,119,128,251, 44,233,238,228,239,116,
- 129,251, 45,171,197,232,229,226,242,229,119,128,251, 45,239,244,
- 232,229,226,242,229,119,128, 5,193,232,229,226,242,229,119,128,
- 5,233,115, 2,171,232,171,252,232,233,238,228,239,116,129,251,
- 42,171,243,232,229,226,242,229,119,128,251, 42,233,238,228,239,
- 116,129,251, 43,172, 6,232,229,226,242,229,119,128,251, 43,239,
- 239,107,128, 2,130,105, 8,172, 39,172, 83,172, 94,172,119,172,
- 149,172,157,172,170,173, 85,231,237, 97,131, 3,195,172, 51,172,
- 55,172, 63, 49,128, 3,194,230,233,238,225,108,128, 3,194,236,
- 245,238,225,244,229,243,249,237,226,239,236,231,242,229,229,107,
- 128, 3,242,232,233,242,225,231,225,238, 97,128, 48, 87,235,225,
- 244,225,235,225,238, 97,129, 48,183,172,107,232,225,236,230,247,
- 233,228,244,104,128,255,124,236,245,113, 2,172,127,172,136,232,
- 229,226,242,229,119,128, 5,189,236,229,230,244,232,229,226,242,
- 229,119,128, 5,189,237,233,236,225,114,128, 34, 60,238,228,239,
- 244,232,229,226,242,229,119,128, 5,194,239,115, 6,172,185,172,
- 220,172,252,173, 24,173, 38,173, 70, 97, 2,172,191,172,206,227,
- 233,242,227,236,229,235,239,242,229,225,110,128, 50,116,240,225,
- 242,229,238,235,239,242,229,225,110,128, 50, 20,227,105, 2,172,
- 227,172,239,229,245,227,235,239,242,229,225,110,128, 49,126,242,
- 227,236,229,235,239,242,229,225,110,128, 50,102,107, 2,173, 2,
- 173, 16,233,249,229,239,235,235,239,242,229,225,110,128, 49,122,
- 239,242,229,225,110,128, 49, 69,238,233,229,245,238,235,239,242,
- 229,225,110,128, 49,123,112, 2,173, 44,173, 57,225,242,229,238,
- 235,239,242,229,225,110,128, 50, 6,233,229,245,240,235,239,242,
- 229,225,110,128, 49,125,244,233,235,229,245,244,235,239,242,229,
- 225,110,128, 49,124,120,141, 0, 54,173,115,173,124,173,134,173,
- 164,173,171,173,196,173,223,174, 1,174, 13,174, 24,174, 57,174,
- 65,174, 76,225,242,225,226,233, 99,128, 6,102,226,229,238,231,
- 225,236,105,128, 9,236,227,233,242,227,236,101,129, 36,101,173,
- 145,233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,
- 102,128, 39,143,228,229,246, 97,128, 9,108,231,117, 2,173,178,
- 173,187,234,225,242,225,244,105,128, 10,236,242,237,245,235,232,
- 105,128, 10,108,232, 97, 2,173,203,173,214,227,235,225,242,225,
- 226,233, 99,128, 6,102,238,231,250,232,239,117,128, 48, 38,105,
- 2,173,229,173,247,228,229,239,231,242,225,240,232,233,227,240,
- 225,242,229,110,128, 50, 37,238,230,229,242,233,239,114,128, 32,
- 134,237,239,238,239,243,240,225,227,101,128,255, 22,239,236,228,
- 243,244,249,236,101,128,247, 54,112, 2,174, 30,174, 37,225,242,
- 229,110,128, 36,121,229,114, 2,174, 44,174, 50,233,239,100,128,
- 36,141,243,233,225,110,128, 6,246,242,239,237,225,110,128, 33,
- 117,243,245,240,229,242,233,239,114,128, 32,118,116, 2,174, 82,
- 174,153,229,229,110, 2,174, 90,174,132, 99, 2,174, 96,174,104,
- 233,242,227,236,101,128, 36,111,245,242,242,229,238,227,249,228,
- 229,238,239,237,233,238,225,244,239,242,226,229,238,231,225,236,
- 105,128, 9,249,112, 2,174,138,174,145,225,242,229,110,128, 36,
- 131,229,242,233,239,100,128, 36,151,232,225,105,128, 14, 86,108,
- 2,174,165,174,185,225,243,104,129, 0, 47,174,173,237,239,238,
- 239,243,240,225,227,101,128,255, 15,239,238,103,129, 1,127,174,
- 193,228,239,244,225,227,227,229,238,116,128, 30,155,109, 2,174,
- 211,174,221,233,236,229,230,225,227,101,128, 38, 58,239,238,239,
- 243,240,225,227,101,128,255, 83,111, 6,174,246,175, 40,175, 51,
- 175, 76,175,121,175,132,102, 2,174,252,175, 10,240,225,243,245,
- 241,232,229,226,242,229,119,128, 5,195,116, 2,175, 16,175, 25,
- 232,249,240,232,229,110,128, 0,173,243,233,231,238,227,249,242,
- 233,236,236,233, 99,128, 4, 76,232,233,242,225,231,225,238, 97,
- 128, 48, 93,235,225,244,225,235,225,238, 97,129, 48,189,175, 64,
- 232,225,236,230,247,233,228,244,104,128,255,127,236,233,228,245,
- 115, 2,175, 86,175,103,236,239,238,231,239,246,229,242,236,225,
- 249,227,237, 98,128, 3, 56,243,232,239,242,244,239,246,229,242,
- 236,225,249,227,237, 98,128, 3, 55,242,245,243,233,244,232,225,
- 105,128, 14, 41,115, 3,175,140,175,150,175,158,225,236,225,244,
- 232,225,105,128, 14, 40,239,244,232,225,105,128, 14, 11,245,225,
- 244,232,225,105,128, 14, 42,240, 97, 3,175,176,175,196,175,228,
- 227,101,129, 0, 32,175,183,232,225,227,235,225,242,225,226,233,
- 99,128, 0, 32,228,101,129, 38, 96,175,203,243,245,233,116, 2,
- 175,212,175,220,226,236,225,227,107,128, 38, 96,247,232,233,244,
- 101,128, 38,100,242,229,110,128, 36,174,241,245,225,242,101, 11,
- 176, 6,176, 17,176, 31,176, 56,176, 73,176, 99,176,114,176,147,
- 176,174,176,230,176,245,226,229,236,239,247,227,237, 98,128, 3,
- 59, 99, 2,176, 23,176, 27, 99,128, 51,196,109,128, 51,157,228,
- 233,225,231,239,238,225,236,227,242,239,243,243,232,225,244,227,
- 232,230,233,236,108,128, 37,169,232,239,242,233,250,239,238,244,
- 225,236,230,233,236,108,128, 37,164,107, 2,176, 79,176, 83,103,
- 128, 51,143,109,129, 51,158,176, 89,227,225,240,233,244,225,108,
- 128, 51,206,108, 2,176,105,176,109,110,128, 51,209,239,103,128,
- 51,210,109, 4,176,124,176,128,176,133,176,137,103,128, 51,142,
- 233,108,128, 51,213,109,128, 51,156,243,241,245,225,242,229,100,
- 128, 51,161,239,242,244,232,239,231,239,238,225,236,227,242,239,
- 243,243,232,225,244,227,232,230,233,236,108,128, 37,166,245,240,
- 240,229,114, 2,176,184,176,207,236,229,230,244,244,239,236,239,
- 247,229,242,242,233,231,232,244,230,233,236,108,128, 37,167,242,
- 233,231,232,244,244,239,236,239,247,229,242,236,229,230,244,230,
- 233,236,108,128, 37,168,246,229,242,244,233,227,225,236,230,233,
- 236,108,128, 37,165,247,232,233,244,229,247,233,244,232,243,237,
- 225,236,236,226,236,225,227,107,128, 37,163,242,243,241,245,225,
- 242,101,128, 51,219,115, 2,177, 27,177,197, 97, 4,177, 37,177,
- 47,177, 54,177, 65,226,229,238,231,225,236,105,128, 9,183,228,
- 229,246, 97,128, 9, 55,231,245,234,225,242,225,244,105,128, 10,
- 183,238,103, 8,177, 84,177, 98,177,112,177,126,177,141,177,155,
- 177,169,177,182,227,233,229,245,227,235,239,242,229,225,110,128,
- 49, 73,232,233,229,245,232,235,239,242,229,225,110,128, 49,133,
- 233,229,245,238,231,235,239,242,229,225,110,128, 49,128,235,233,
- 249,229,239,235,235,239,242,229,225,110,128, 49, 50,238,233,229,
- 245,238,235,239,242,229,225,110,128, 49,101,240,233,229,245,240,
- 235,239,242,229,225,110,128, 49, 67,243,233,239,243,235,239,242,
- 229,225,110,128, 49, 70,244,233,235,229,245,244,235,239,242,229,
- 225,110,128, 49, 56,245,240,229,242,233,239,114,128,246,242,116,
- 2,177,213,177,236,229,242,236,233,238,103,129, 0,163,177,224,
- 237,239,238,239,243,240,225,227,101,128,255,225,242,239,235,101,
- 2,177,245,178, 6,236,239,238,231,239,246,229,242,236,225,249,
- 227,237, 98,128, 3, 54,243,232,239,242,244,239,246,229,242,236,
- 225,249,227,237, 98,128, 3, 53,117, 7,178, 40,178, 72,178, 94,
- 178,105,178,146,178,156,178,160,226,243,229,116,130, 34,130,178,
- 51,178, 62,238,239,244,229,241,245,225,108,128, 34,138,239,242,
- 229,241,245,225,108,128, 34,134, 99, 2,178, 78,178, 86,227,229,
- 229,228,115,128, 34,123,232,244,232,225,116,128, 34, 11,232,233,
- 242,225,231,225,238, 97,128, 48, 89,107, 2,178,111,178,135,225,
- 244,225,235,225,238, 97,129, 48,185,178,123,232,225,236,230,247,
- 233,228,244,104,128,255,125,245,238,225,242,225,226,233, 99,128,
- 6, 82,237,237,225,244,233,239,110,128, 34, 17,110,128, 38, 60,
- 240,229,242,243,229,116,130, 34,131,178,173,178,184,238,239,244,
- 229,241,245,225,108,128, 34,139,239,242,229,241,245,225,108,128,
- 34,135,246,243,241,245,225,242,101,128, 51,220,249,239,245,247,
- 225,229,242,225,243,241,245,225,242,101,128, 51,124,116,144, 0,
- 116,179, 1,180, 10,180, 31,180,174,180,214,183, 6,186,144,187,
- 219,187,231,187,243,189, 20,189, 45,189,131,190, 55,190,239,191,
- 73, 97, 10,179, 23,179, 33,179, 54,179, 61,179, 86,179,164,179,
- 181,179,206,179,220,179,224,226,229,238,231,225,236,105,128, 9,
- 164,227,107, 2,179, 40,179, 47,228,239,247,110,128, 34,164,236,
- 229,230,116,128, 34,163,228,229,246, 97,128, 9, 36,231,117, 2,
- 179, 68,179, 77,234,225,242,225,244,105,128, 10,164,242,237,245,
- 235,232,105,128, 10, 36,104, 4,179, 96,179,105,179,119,179,149,
- 225,242,225,226,233, 99,128, 6, 55,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,194,105, 2,179,125,179,140,238,233,244,
- 233,225,236,225,242,225,226,233, 99,128,254,195,242,225,231,225,
- 238, 97,128, 48, 95,237,229,228,233,225,236,225,242,225,226,233,
- 99,128,254,196,233,243,249,239,245,229,242,225,243,241,245,225,
- 242,101,128, 51,125,235,225,244,225,235,225,238, 97,129, 48,191,
- 179,194,232,225,236,230,247,233,228,244,104,128,255,128,244,247,
- 229,229,236,225,242,225,226,233, 99,128, 6, 64,117,128, 3,196,
- 118,130, 5,234,179,232,180, 1,228,225,231,229,115,129,251, 74,
- 179,242,104,129,251, 74,179,248,232,229,226,242,229,119,128,251,
- 74,232,229,226,242,229,119,128, 5,234, 98, 2,180, 16,180, 21,
- 225,114,128, 1,103,239,240,239,237,239,230,111,128, 49, 10, 99,
- 6,180, 45,180, 52,180, 59,180, 68,180,134,180,161,225,242,239,
- 110,128, 1,101,227,245,242,108,128, 2,168,229,228,233,236,236,
- 97,128, 1, 99,232,229,104, 4,180, 80,180, 89,180,103,180,119,
- 225,242,225,226,233, 99,128, 6,134,230,233,238,225,236,225,242,
- 225,226,233, 99,128,251,123,233,238,233,244,233,225,236,225,242,
- 225,226,233, 99,128,251,124,237,229,228,233,225,236,225,242,225,
- 226,233, 99,128,251,125,233,242, 99, 2,180,142,180,147,236,101,
- 128, 36,227,245,237,230,236,229,248,226,229,236,239,119,128, 30,
- 113,239,237,237,225,225,227,227,229,238,116,128, 1, 99,100, 2,
- 180,180,180,190,233,229,242,229,243,233,115,128, 30,151,239,116,
- 2,180,197,180,206,225,227,227,229,238,116,128, 30,107,226,229,
- 236,239,119,128, 30,109,101, 9,180,234,180,245,181, 9,182, 19,
- 182, 44,182,108,182,175,182,180,182,232,227,249,242,233,236,236,
- 233, 99,128, 4, 66,228,229,243,227,229,238,228,229,242,227,249,
- 242,233,236,236,233, 99,128, 4,173,104, 7,181, 25,181, 34,181,
- 48,181, 88,181,118,181,159,182, 1,225,242,225,226,233, 99,128,
- 6, 42,230,233,238,225,236,225,242,225,226,233, 99,128,254,150,
- 232,225,232,105, 2,181, 57,181, 72,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,252,162,243,239,236,225,244,229,228,225,
- 242,225,226,233, 99,128,252, 12,105, 2,181, 94,181,109,238,233,
- 244,233,225,236,225,242,225,226,233, 99,128,254,151,242,225,231,
- 225,238, 97,128, 48,102,234,229,229,237,105, 2,181,128,181,143,
- 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,161,243,
- 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 11,109,
- 2,181,165,181,199,225,242,226,245,244, 97, 2,181,176,181,185,
- 225,242,225,226,233, 99,128, 6, 41,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,148,101, 2,181,205,181,218,228,233,225,
- 236,225,242,225,226,233, 99,128,254,152,229,237,105, 2,181,226,
- 181,241,238,233,244,233,225,236,225,242,225,226,233, 99,128,252,
- 164,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,252,
- 14,238,239,239,238,230,233,238,225,236,225,242,225,226,233, 99,
- 128,252,115,235,225,244,225,235,225,238, 97,129, 48,198,182, 32,
- 232,225,236,230,247,233,228,244,104,128,255,131,108, 2,182, 50,
- 182, 69,229,240,232,239,238,101,129, 33, 33,182, 61,226,236,225,
- 227,107,128, 38, 14,233,243,232, 97, 2,182, 78,182, 93,231,229,
- 228,239,236,225,232,229,226,242,229,119,128, 5,160,241,229,244,
- 225,238,225,232,229,226,242,229,119,128, 5,169,110, 4,182,118,
- 182,127,182,146,182,167,227,233,242,227,236,101,128, 36,105,233,
- 228,229,239,231,242,225,240,232,233,227,240,225,242,229,110,128,
- 50, 41,112, 2,182,152,182,159,225,242,229,110,128, 36,125,229,
- 242,233,239,100,128, 36,145,242,239,237,225,110,128, 33,121,243,
- 104,128, 2,167,116,131, 5,216,182,190,182,210,182,219,228,225,
- 231,229,243,104,129,251, 56,182,201,232,229,226,242,229,119,128,
- 251, 56,232,229,226,242,229,119,128, 5,216,243,229,227,249,242,
- 233,236,236,233, 99,128, 4,181,246,233,114, 2,182,240,182,249,
- 232,229,226,242,229,119,128, 5,155,236,229,230,244,232,229,226,
- 242,229,119,128, 5,155,104, 6,183, 20,183,172,184, 38,184,170,
- 185, 77,186,134, 97, 5,183, 32,183, 42,183, 49,183, 74,183,103,
- 226,229,238,231,225,236,105,128, 9,165,228,229,246, 97,128, 9,
- 37,231,117, 2,183, 56,183, 65,234,225,242,225,244,105,128, 10,
- 165,242,237,245,235,232,105,128, 10, 37,108, 2,183, 80,183, 89,
- 225,242,225,226,233, 99,128, 6, 48,230,233,238,225,236,225,242,
- 225,226,233, 99,128,254,172,238,244,232,225,235,232,225,116, 3,
- 183,118,183,149,183,156,236,239,119, 2,183,126,183,137,236,229,
- 230,244,244,232,225,105,128,248,152,242,233,231,232,244,244,232,
- 225,105,128,248,151,244,232,225,105,128, 14, 76,245,240,240,229,
- 242,236,229,230,244,244,232,225,105,128,248,150,101, 3,183,180,
- 183,244,184, 11,104, 4,183,190,183,199,183,213,183,229,225,242,
- 225,226,233, 99,128, 6, 43,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,154,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,254,155,237,229,228,233,225,236,225,242,225,226,233,
- 99,128,254,156,242,101, 2,183,251,184, 4,229,248,233,243,244,
- 115,128, 34, 3,230,239,242,101,128, 34, 52,244, 97,130, 3,184,
- 184, 20,184, 24, 49,128, 3,209,243,249,237,226,239,236,231,242,
- 229,229,107,128, 3,209,105, 2,184, 44,184,130,229,245,244,104,
- 4,184, 57,184, 92,184,107,184,116, 97, 2,184, 63,184, 78,227,
- 233,242,227,236,229,235,239,242,229,225,110,128, 50,121,240,225,
- 242,229,238,235,239,242,229,225,110,128, 50, 25,227,233,242,227,
- 236,229,235,239,242,229,225,110,128, 50,107,235,239,242,229,225,
- 110,128, 49, 76,240,225,242,229,238,235,239,242,229,225,110,128,
- 50, 11,242,244,229,229,110, 2,184,140,184,149,227,233,242,227,
- 236,101,128, 36,108,112, 2,184,155,184,162,225,242,229,110,128,
- 36,128,229,242,233,239,100,128, 36,148,111, 6,184,184,184,201,
- 184,206,184,220,184,225,185, 22,238,225,238,231,237,239,238,244,
- 232,239,244,232,225,105,128, 14, 17,239,107,128, 1,173,240,232,
- 245,244,232,225,239,244,232,225,105,128, 14, 18,242,110,128, 0,
- 254,244,104, 3,184,234,185, 2,185, 12, 97, 2,184,240,184,250,
- 232,225,238,244,232,225,105,128, 14, 23,238,244,232,225,105,128,
- 14, 16,239,238,231,244,232,225,105,128, 14, 24,245,238,231,244,
- 232,225,105,128, 14, 22,245,243,225,238,100, 2,185, 32,185, 43,
- 227,249,242,233,236,236,233, 99,128, 4,130,243,243,229,240,225,
- 242,225,244,239,114, 2,185, 58,185, 67,225,242,225,226,233, 99,
- 128, 6,108,240,229,242,243,233,225,110,128, 6,108,242,229,101,
- 144, 0, 51,185,115,185,124,185,134,185,164,185,171,185,181,185,
- 206,185,233,186, 11,186, 23,186, 42,186, 53,186, 86,186,108,186,
- 116,186,127,225,242,225,226,233, 99,128, 6, 99,226,229,238,231,
- 225,236,105,128, 9,233,227,233,242,227,236,101,129, 36, 98,185,
- 145,233,238,246,229,242,243,229,243,225,238,243,243,229,242,233,
- 102,128, 39,140,228,229,246, 97,128, 9,105,229,233,231,232,244,
- 232,115,128, 33, 92,231,117, 2,185,188,185,197,234,225,242,225,
- 244,105,128, 10,233,242,237,245,235,232,105,128, 10,105,232, 97,
- 2,185,213,185,224,227,235,225,242,225,226,233, 99,128, 6, 99,
- 238,231,250,232,239,117,128, 48, 35,105, 2,185,239,186, 1,228,
- 229,239,231,242,225,240,232,233,227,240,225,242,229,110,128, 50,
- 34,238,230,229,242,233,239,114,128, 32,131,237,239,238,239,243,
- 240,225,227,101,128,255, 19,238,245,237,229,242,225,244,239,242,
- 226,229,238,231,225,236,105,128, 9,246,239,236,228,243,244,249,
- 236,101,128,247, 51,112, 2,186, 59,186, 66,225,242,229,110,128,
- 36,118,229,114, 2,186, 73,186, 79,233,239,100,128, 36,138,243,
- 233,225,110,128, 6,243,241,245,225,242,244,229,242,115,129, 0,
- 190,186, 99,229,237,228,225,243,104,128,246,222,242,239,237,225,
- 110,128, 33,114,243,245,240,229,242,233,239,114,128, 0,179,244,
- 232,225,105,128, 14, 83,250,243,241,245,225,242,101,128, 51,148,
- 105, 7,186,160,186,171,187, 30,187,128,187,140,187,189,187,206,
- 232,233,242,225,231,225,238, 97,128, 48, 97,107, 2,186,177,186,
- 201,225,244,225,235,225,238, 97,129, 48,193,186,189,232,225,236,
- 230,247,233,228,244,104,128,255,129,229,245,116, 4,186,213,186,
- 248,187, 7,187, 16, 97, 2,186,219,186,234,227,233,242,227,236,
- 229,235,239,242,229,225,110,128, 50,112,240,225,242,229,238,235,
- 239,242,229,225,110,128, 50, 16,227,233,242,227,236,229,235,239,
- 242,229,225,110,128, 50, 98,235,239,242,229,225,110,128, 49, 55,
- 240,225,242,229,238,235,239,242,229,225,110,128, 50, 2,236,228,
- 101,133, 2,220,187, 46,187, 57,187, 74,187, 86,187,114,226,229,
- 236,239,247,227,237, 98,128, 3, 48, 99, 2,187, 63,187, 68,237,
- 98,128, 3, 3,239,237, 98,128, 3, 3,228,239,245,226,236,229,
- 227,237, 98,128, 3, 96,111, 2,187, 92,187,102,240,229,242,225,
- 244,239,114,128, 34, 60,246,229,242,236,225,249,227,237, 98,128,
- 3, 52,246,229,242,244,233,227,225,236,227,237, 98,128, 3, 62,
- 237,229,243,227,233,242,227,236,101,128, 34,151,112, 2,187,146,
- 187,176,229,232, 97, 2,187,154,187,163,232,229,226,242,229,119,
- 128, 5,150,236,229,230,244,232,229,226,242,229,119,128, 5,150,
- 240,233,231,245,242,237,245,235,232,105,128, 10,112,244,236,239,
- 227,249,242,233,236,236,233,227,227,237, 98,128, 4,131,247,238,
- 225,242,237,229,238,233,225,110,128, 5,127,236,233,238,229,226,
- 229,236,239,119,128, 30,111,237,239,238,239,243,240,225,227,101,
- 128,255, 84,111, 7,188, 3,188, 14,188, 25,188, 50,188,170,188,
- 182,189, 10,225,242,237,229,238,233,225,110,128, 5,105,232,233,
- 242,225,231,225,238, 97,128, 48,104,235,225,244,225,235,225,238,
- 97,129, 48,200,188, 38,232,225,236,230,247,233,228,244,104,128,
- 255,132,110, 3,188, 58,188,156,188,161,101, 4,188, 68,188,137,
- 188,144,188,150,226,225,114, 4,188, 80,188,109,188,119,188,128,
- 229,248,244,242, 97, 2,188, 90,188,100,232,233,231,232,237,239,
- 100,128, 2,229,236,239,247,237,239,100,128, 2,233,232,233,231,
- 232,237,239,100,128, 2,230,236,239,247,237,239,100,128, 2,232,
- 237,233,228,237,239,100,128, 2,231,230,233,246,101,128, 1,189,
- 243,233,120,128, 1,133,244,247,111,128, 1,168,239,115,128, 3,
- 132,243,241,245,225,242,101,128, 51, 39,240,225,244,225,235,244,
- 232,225,105,128, 14, 15,242,244,239,233,243,229,243,232,229,236,
- 236,226,242,225,227,235,229,116, 2,188,205,188,235,236,229,230,
- 116,130, 48, 20,188,216,188,224,243,237,225,236,108,128,254, 93,
- 246,229,242,244,233,227,225,108,128,254, 57,242,233,231,232,116,
- 130, 48, 21,188,247,188,255,243,237,225,236,108,128,254, 94,246,
- 229,242,244,233,227,225,108,128,254, 58,244,225,239,244,232,225,
- 105,128, 14, 21,240, 97, 2,189, 27,189, 39,236,225,244,225,236,
- 232,239,239,107,128, 1,171,242,229,110,128, 36,175,114, 3,189,
- 53,189, 84,189, 99,225,228,229,237,225,242,107,129, 33, 34,189,
- 65,115, 2,189, 71,189, 77,225,238,115,128,248,234,229,242,233,
- 102,128,246,219,229,244,242,239,230,236,229,248,232,239,239,107,
- 128, 2,136,233,225,103, 4,189,111,189,116,189,121,189,126,228,
- 110,128, 37,188,236,102,128, 37,196,242,116,128, 37,186,245,112,
- 128, 37,178,115,132, 2,166,189,143,189,182,190, 32,190, 45,225,
- 228,105,130, 5,230,189,153,189,173,228,225,231,229,243,104,129,
- 251, 70,189,164,232,229,226,242,229,119,128,251, 70,232,229,226,
- 242,229,119,128, 5,230,101, 2,189,188,189,199,227,249,242,233,
- 236,236,233, 99,128, 4, 70,242,101,134, 5,181,189,216,189,230,
- 189,235,189,244,190, 3,190, 19, 49, 2,189,222,189,226, 50,128,
- 5,181,101,128, 5,181,178, 98,128, 5,181,232,229,226,242,229,
- 119,128, 5,181,238,225,242,242,239,247,232,229,226,242,229,119,
- 128, 5,181,241,245,225,242,244,229,242,232,229,226,242,229,119,
- 128, 5,181,247,233,228,229,232,229,226,242,229,119,128, 5,181,
- 232,229,227,249,242,233,236,236,233, 99,128, 4, 91,245,240,229,
- 242,233,239,114,128,246,243,116, 4,190, 65,190,115,190,180,190,
- 231, 97, 3,190, 73,190, 83,190, 90,226,229,238,231,225,236,105,
- 128, 9,159,228,229,246, 97,128, 9, 31,231,117, 2,190, 97,190,
- 106,234,225,242,225,244,105,128, 10,159,242,237,245,235,232,105,
- 128, 10, 31,229,104, 4,190,126,190,135,190,149,190,165,225,242,
- 225,226,233, 99,128, 6,121,230,233,238,225,236,225,242,225,226,
- 233, 99,128,251,103,233,238,233,244,233,225,236,225,242,225,226,
- 233, 99,128,251,104,237,229,228,233,225,236,225,242,225,226,233,
- 99,128,251,105,232, 97, 3,190,189,190,199,190,206,226,229,238,
- 231,225,236,105,128, 9,160,228,229,246, 97,128, 9, 32,231,117,
- 2,190,213,190,222,234,225,242,225,244,105,128, 10,160,242,237,
- 245,235,232,105,128, 10, 32,245,242,238,229,100,128, 2,135,117,
- 3,190,247,191, 2,191, 27,232,233,242,225,231,225,238, 97,128,
- 48,100,235,225,244,225,235,225,238, 97,129, 48,196,191, 15,232,
- 225,236,230,247,233,228,244,104,128,255,130,243,237,225,236,108,
- 2,191, 37,191, 48,232,233,242,225,231,225,238, 97,128, 48, 99,
- 235,225,244,225,235,225,238, 97,129, 48,195,191, 61,232,225,236,
- 230,247,233,228,244,104,128,255,111,119, 2,191, 79,191,184,101,
- 2,191, 85,191,133,236,246,101, 3,191, 95,191,104,191,125,227,
- 233,242,227,236,101,128, 36,107,112, 2,191,110,191,117,225,242,
- 229,110,128, 36,127,229,242,233,239,100,128, 36,147,242,239,237,
- 225,110,128, 33,123,238,244,121, 3,191,143,191,152,191,163,227,
- 233,242,227,236,101,128, 36,115,232,225,238,231,250,232,239,117,
- 128, 83, 68,112, 2,191,169,191,176,225,242,229,110,128, 36,135,
- 229,242,233,239,100,128, 36,155,111,142, 0, 50,191,216,191,225,
- 191,235,192, 9,192, 61,192, 86,192,113,192,147,192,159,192,178,
- 192,189,192,222,192,230,192,254,225,242,225,226,233, 99,128, 6,
- 98,226,229,238,231,225,236,105,128, 9,232,227,233,242,227,236,
- 101,129, 36, 97,191,246,233,238,246,229,242,243,229,243,225,238,
- 243,243,229,242,233,102,128, 39,139,100, 2,192, 15,192, 21,229,
- 246, 97,128, 9,104,239,116, 2,192, 28,192, 39,229,238,236,229,
- 225,228,229,114,128, 32, 37,236,229,225,228,229,114,129, 32, 37,
- 192, 50,246,229,242,244,233,227,225,108,128,254, 48,231,117, 2,
- 192, 68,192, 77,234,225,242,225,244,105,128, 10,232,242,237,245,
- 235,232,105,128, 10,104,232, 97, 2,192, 93,192,104,227,235,225,
- 242,225,226,233, 99,128, 6, 98,238,231,250,232,239,117,128, 48,
- 34,105, 2,192,119,192,137,228,229,239,231,242,225,240,232,233,
- 227,240,225,242,229,110,128, 50, 33,238,230,229,242,233,239,114,
- 128, 32,130,237,239,238,239,243,240,225,227,101,128,255, 18,238,
- 245,237,229,242,225,244,239,242,226,229,238,231,225,236,105,128,
- 9,245,239,236,228,243,244,249,236,101,128,247, 50,112, 2,192,
- 195,192,202,225,242,229,110,128, 36,117,229,114, 2,192,209,192,
- 215,233,239,100,128, 36,137,243,233,225,110,128, 6,242,242,239,
- 237,225,110,128, 33,113,115, 2,192,236,192,244,244,242,239,235,
- 101,128, 1,187,245,240,229,242,233,239,114,128, 0,178,244,104,
- 2,193, 5,193, 10,225,105,128, 14, 82,233,242,228,115,128, 33,
- 84,117,145, 0,117,193, 55,193, 63,193,104,193,161,194, 43,194,
- 80,194,203,194,219,195, 14,195, 84,195,165,195,174,196, 37,196,
- 61,196,169,196,197,197, 55,225,227,245,244,101,128, 0,250, 98,
- 4,193, 73,193, 78,193, 87,193, 97,225,114,128, 2,137,229,238,
- 231,225,236,105,128, 9,137,239,240,239,237,239,230,111,128, 49,
- 40,242,229,246,101,128, 1,109, 99, 3,193,112,193,119,193,151,
- 225,242,239,110,128, 1,212,233,242, 99, 2,193,127,193,132,236,
- 101,128, 36,228,245,237,230,236,229,120,129, 0,251,193,143,226,
- 229,236,239,119,128, 30,119,249,242,233,236,236,233, 99,128, 4,
- 67,100, 5,193,173,193,184,193,207,193,213,194, 33,225,244,244,
- 225,228,229,246, 97,128, 9, 81,226,108, 2,193,191,193,199,225,
- 227,245,244,101,128, 1,113,231,242,225,246,101,128, 2, 21,229,
- 246, 97,128, 9, 9,233,229,242,229,243,233,115,133, 0,252,193,
- 233,193,241,193,249,194, 16,194, 24,225,227,245,244,101,128, 1,
- 216,226,229,236,239,119,128, 30,115, 99, 2,193,255,194, 6,225,
- 242,239,110,128, 1,218,249,242,233,236,236,233, 99,128, 4,241,
- 231,242,225,246,101,128, 1,220,237,225,227,242,239,110,128, 1,
- 214,239,244,226,229,236,239,119,128, 30,229,103, 2,194, 49,194,
- 56,242,225,246,101,128, 0,249,117, 2,194, 62,194, 71,234,225,
- 242,225,244,105,128, 10,137,242,237,245,235,232,105,128, 10, 9,
- 104, 3,194, 88,194, 98,194,176,233,242,225,231,225,238, 97,128,
- 48, 70,111, 2,194,104,194,114,239,235,225,226,239,246,101,128,
- 30,231,242,110,133, 1,176,194,129,194,137,194,148,194,156,194,
- 168,225,227,245,244,101,128, 30,233,228,239,244,226,229,236,239,
- 119,128, 30,241,231,242,225,246,101,128, 30,235,232,239,239,235,
- 225,226,239,246,101,128, 30,237,244,233,236,228,101,128, 30,239,
- 245,238,231,225,242,245,237,236,225,245,116,129, 1,113,194,192,
- 227,249,242,233,236,236,233, 99,128, 4,243,233,238,246,229,242,
- 244,229,228,226,242,229,246,101,128, 2, 23,107, 3,194,227,194,
- 251,195, 6,225,244,225,235,225,238, 97,129, 48,166,194,239,232,
- 225,236,230,247,233,228,244,104,128,255,115,227,249,242,233,236,
- 236,233, 99,128, 4,121,239,242,229,225,110,128, 49, 92,109, 2,
- 195, 20,195, 73, 97, 2,195, 26,195, 59,227,242,239,110,130, 1,
- 107,195, 37,195, 48,227,249,242,233,236,236,233, 99,128, 4,239,
- 228,233,229,242,229,243,233,115,128, 30,123,244,242,225,231,245,
- 242,237,245,235,232,105,128, 10, 65,239,238,239,243,240,225,227,
- 101,128,255, 85,110, 2,195, 90,195,145,228,229,242,243,227,239,
- 242,101,132, 0, 95,195,109,195,115,195,127,195,138,228,226,108,
- 128, 32, 23,237,239,238,239,243,240,225,227,101,128,255, 63,246,
- 229,242,244,233,227,225,108,128,254, 51,247,225,246,121,128,254,
- 79,105, 2,195,151,195,156,239,110,128, 34, 42,246,229,242,243,
- 225,108,128, 34, 0,239,231,239,238,229,107,128, 1,115,112, 5,
- 195,186,195,193,195,201,195,216,196, 11,225,242,229,110,128, 36,
- 176,226,236,239,227,107,128, 37,128,240,229,242,228,239,244,232,
- 229,226,242,229,119,128, 5,196,243,233,236,239,110,131, 3,197,
- 195,230,195,251,196, 3,228,233,229,242,229,243,233,115,129, 3,
- 203,195,243,244,239,238,239,115,128, 3,176,236,225,244,233,110,
- 128, 2,138,244,239,238,239,115,128, 3,205,244,225,227,107, 2,
- 196, 20,196, 31,226,229,236,239,247,227,237, 98,128, 3, 29,237,
- 239,100,128, 2,212,114, 2,196, 43,196, 55,225,231,245,242,237,
- 245,235,232,105,128, 10,115,233,238,103,128, 1,111,115, 3,196,
- 69,196, 84,196,129,232,239,242,244,227,249,242,233,236,236,233,
- 99,128, 4, 94,237,225,236,108, 2,196, 93,196,104,232,233,242,
- 225,231,225,238, 97,128, 48, 69,235,225,244,225,235,225,238, 97,
- 129, 48,165,196,117,232,225,236,230,247,233,228,244,104,128,255,
- 105,244,242,225,233,231,232,116, 2,196,141,196,152,227,249,242,
- 233,236,236,233, 99,128, 4,175,243,244,242,239,235,229,227,249,
- 242,233,236,236,233, 99,128, 4,177,244,233,236,228,101,130, 1,
- 105,196,181,196,189,225,227,245,244,101,128, 30,121,226,229,236,
- 239,119,128, 30,117,117, 5,196,209,196,219,196,226,196,251,197,
- 11,226,229,238,231,225,236,105,128, 9,138,228,229,246, 97,128,
- 9, 10,231,117, 2,196,233,196,242,234,225,242,225,244,105,128,
- 10,138,242,237,245,235,232,105,128, 10, 10,237,225,244,242,225,
- 231,245,242,237,245,235,232,105,128, 10, 66,246,239,247,229,236,
- 243,233,231,110, 3,197, 27,197, 37,197, 44,226,229,238,231,225,
- 236,105,128, 9,194,228,229,246, 97,128, 9, 66,231,245,234,225,
- 242,225,244,105,128, 10,194,246,239,247,229,236,243,233,231,110,
- 3,197, 71,197, 81,197, 88,226,229,238,231,225,236,105,128, 9,
- 193,228,229,246, 97,128, 9, 65,231,245,234,225,242,225,244,105,
- 128, 10,193,118,139, 0,118,197,125,198, 17,198, 26,198, 37,198,
- 222,198,229,199, 71,199, 83,199,183,199,191,199,212, 97, 4,197,
- 135,197,142,197,167,197,178,228,229,246, 97,128, 9, 53,231,117,
- 2,197,149,197,158,234,225,242,225,244,105,128, 10,181,242,237,
- 245,235,232,105,128, 10, 53,235,225,244,225,235,225,238, 97,128,
- 48,247,118,132, 5,213,197,190,197,217,197,249,198, 5,228,225,
- 231,229,243,104,130,251, 53,197,203,197,208,182, 53,128,251, 53,
- 232,229,226,242,229,119,128,251, 53,104, 2,197,223,197,231,229,
- 226,242,229,119,128, 5,213,239,236,225,109,129,251, 75,197,240,
- 232,229,226,242,229,119,128,251, 75,246,225,246,232,229,226,242,
- 229,119,128, 5,240,249,239,228,232,229,226,242,229,119,128, 5,
- 241,227,233,242,227,236,101,128, 36,229,228,239,244,226,229,236,
- 239,119,128, 30,127,101, 6,198, 51,198, 62,198,126,198,137,198,
- 143,198,210,227,249,242,233,236,236,233, 99,128, 4, 50,104, 4,
- 198, 72,198, 81,198, 95,198,111,225,242,225,226,233, 99,128, 6,
- 164,230,233,238,225,236,225,242,225,226,233, 99,128,251,107,233,
- 238,233,244,233,225,236,225,242,225,226,233, 99,128,251,108,237,
- 229,228,233,225,236,225,242,225,226,233, 99,128,251,109,235,225,
- 244,225,235,225,238, 97,128, 48,249,238,245,115,128, 38, 64,242,
- 244,233,227,225,108, 2,198,154,198,160,226,225,114,128, 0,124,
- 236,233,238,101, 4,198,173,198,184,198,195,198,204,225,226,239,
- 246,229,227,237, 98,128, 3, 13,226,229,236,239,247,227,237, 98,
- 128, 3, 41,236,239,247,237,239,100,128, 2,204,237,239,100,128,
- 2,200,247,225,242,237,229,238,233,225,110,128, 5,126,232,239,
- 239,107,128, 2,139,105, 3,198,237,198,248,199, 31,235,225,244,
- 225,235,225,238, 97,128, 48,248,242,225,237, 97, 3,199, 3,199,
- 13,199, 20,226,229,238,231,225,236,105,128, 9,205,228,229,246,
- 97,128, 9, 77,231,245,234,225,242,225,244,105,128, 10,205,243,
- 225,242,231, 97, 3,199, 43,199, 53,199, 60,226,229,238,231,225,
- 236,105,128, 9,131,228,229,246, 97,128, 9, 3,231,245,234,225,
- 242,225,244,105,128, 10,131,237,239,238,239,243,240,225,227,101,
- 128,255, 86,111, 3,199, 91,199,102,199,172,225,242,237,229,238,
- 233,225,110,128, 5,120,233,227,229,100, 2,199,111,199,147,233,
- 244,229,242,225,244,233,239,110, 2,199,125,199,136,232,233,242,
- 225,231,225,238, 97,128, 48,158,235,225,244,225,235,225,238, 97,
- 128, 48,254,237,225,242,235,235,225,238, 97,129, 48,155,199,160,
- 232,225,236,230,247,233,228,244,104,128,255,158,235,225,244,225,
- 235,225,238, 97,128, 48,250,240,225,242,229,110,128, 36,177,116,
- 2,199,197,199,204,233,236,228,101,128, 30,125,245,242,238,229,
- 100,128, 2,140,117, 2,199,218,199,229,232,233,242,225,231,225,
- 238, 97,128, 48,148,235,225,244,225,235,225,238, 97,128, 48,244,
- 119,143, 0,119,200, 18,200,251,201, 5,201, 28,201, 68,201,135,
- 201,143,203,114,203,155,203,167,203,242,203,250,204, 1,204, 12,
- 204, 21, 97, 8,200, 36,200, 43,200, 53,200, 64,200,102,200,134,
- 200,146,200,182,227,245,244,101,128, 30,131,229,235,239,242,229,
- 225,110,128, 49, 89,232,233,242,225,231,225,238, 97,128, 48,143,
- 107, 2,200, 70,200, 94,225,244,225,235,225,238, 97,129, 48,239,
- 200, 82,232,225,236,230,247,233,228,244,104,128,255,156,239,242,
- 229,225,110,128, 49, 88,243,237,225,236,108, 2,200,112,200,123,
- 232,233,242,225,231,225,238, 97,128, 48,142,235,225,244,225,235,
- 225,238, 97,128, 48,238,244,244,239,243,241,245,225,242,101,128,
- 51, 87,118, 2,200,152,200,160,229,228,225,243,104,128, 48, 28,
- 249,245,238,228,229,242,243,227,239,242,229,246,229,242,244,233,
- 227,225,108,128,254, 52,119, 3,200,190,200,199,200,213,225,242,
- 225,226,233, 99,128, 6, 72,230,233,238,225,236,225,242,225,226,
- 233, 99,128,254,238,232,225,237,250,225,225,226,239,246,101, 2,
- 200,228,200,237,225,242,225,226,233, 99,128, 6, 36,230,233,238,
- 225,236,225,242,225,226,233, 99,128,254,134,226,243,241,245,225,
- 242,101,128, 51,221,227,233,242, 99, 2,201, 14,201, 19,236,101,
- 128, 36,230,245,237,230,236,229,120,128, 1,117,100, 2,201, 34,
- 201, 44,233,229,242,229,243,233,115,128, 30,133,239,116, 2,201,
- 51,201, 60,225,227,227,229,238,116,128, 30,135,226,229,236,239,
- 119,128, 30,137,101, 4,201, 78,201, 89,201,101,201,125,232,233,
- 242,225,231,225,238, 97,128, 48,145,233,229,242,243,244,242,225,
- 243,115,128, 33, 24,107, 2,201,107,201,117,225,244,225,235,225,
- 238, 97,128, 48,241,239,242,229,225,110,128, 49, 94,239,235,239,
- 242,229,225,110,128, 49, 93,231,242,225,246,101,128, 30,129,232,
- 233,244,101, 8,201,164,201,173,202, 1,202, 91,202,175,202,220,
- 203, 16,203, 72,226,245,236,236,229,116,128, 37,230, 99, 2,201,
- 179,201,199,233,242,227,236,101,129, 37,203,201,189,233,238,246,
- 229,242,243,101,128, 37,217,239,242,238,229,242,226,242,225,227,
- 235,229,116, 2,201,216,201,236,236,229,230,116,129, 48, 14,201,
- 225,246,229,242,244,233,227,225,108,128,254, 67,242,233,231,232,
- 116,129, 48, 15,201,246,246,229,242,244,233,227,225,108,128,254,
- 68,100, 2,202, 7,202, 48,233,225,237,239,238,100,129, 37,199,
- 202, 18,227,239,238,244,225,233,238,233,238,231,226,236,225,227,
- 235,243,237,225,236,236,228,233,225,237,239,238,100,128, 37,200,
- 239,247,238,240,239,233,238,244,233,238,103, 2,202, 64,202, 80,
- 243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,191,
- 244,242,233,225,238,231,236,101,128, 37,189,236,101, 2,202, 98,
- 202,140,230,244,240,239,233,238,244,233,238,103, 2,202,113,202,
- 129,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
- 195,244,242,233,225,238,231,236,101,128, 37,193,238,244,233,227,
- 245,236,225,242,226,242,225,227,235,229,116, 2,202,160,202,167,
- 236,229,230,116,128, 48, 22,242,233,231,232,116,128, 48, 23,242,
- 233,231,232,244,240,239,233,238,244,233,238,103, 2,202,193,202,
- 209,243,237,225,236,236,244,242,233,225,238,231,236,101,128, 37,
- 185,244,242,233,225,238,231,236,101,128, 37,183,115, 3,202,228,
- 203, 2,203, 10,109, 2,202,234,202,246,225,236,236,243,241,245,
- 225,242,101,128, 37,171,233,236,233,238,231,230,225,227,101,128,
- 38, 58,241,245,225,242,101,128, 37,161,244,225,114,128, 38, 6,
- 116, 2,203, 22,203, 33,229,236,229,240,232,239,238,101,128, 38,
- 15,239,242,244,239,233,243,229,243,232,229,236,236,226,242,225,
- 227,235,229,116, 2,203, 57,203, 64,236,229,230,116,128, 48, 24,
- 242,233,231,232,116,128, 48, 25,245,240,240,239,233,238,244,233,
- 238,103, 2,203, 87,203,103,243,237,225,236,236,244,242,233,225,
- 238,231,236,101,128, 37,181,244,242,233,225,238,231,236,101,128,
- 37,179,105, 2,203,120,203,131,232,233,242,225,231,225,238, 97,
- 128, 48,144,107, 2,203,137,203,147,225,244,225,235,225,238, 97,
- 128, 48,240,239,242,229,225,110,128, 49, 95,237,239,238,239,243,
- 240,225,227,101,128,255, 87,111, 4,203,177,203,188,203,213,203,
- 231,232,233,242,225,231,225,238, 97,128, 48,146,235,225,244,225,
- 235,225,238, 97,129, 48,242,203,201,232,225,236,230,247,233,228,
- 244,104,128,255,102,110,129, 32,169,203,219,237,239,238,239,243,
- 240,225,227,101,128,255,230,247,225,229,238,244,232,225,105,128,
- 14, 39,240,225,242,229,110,128, 36,178,242,233,238,103,128, 30,
- 152,243,245,240,229,242,233,239,114,128, 2,183,244,245,242,238,
- 229,100,128, 2,141,249,238,110,128, 1,191,120,137, 0,120,204,
- 49,204, 60,204, 71,204, 80,204,107,204,120,204,124,204,136,204,
- 144,225,226,239,246,229,227,237, 98,128, 3, 61,226,239,240,239,
- 237,239,230,111,128, 49, 18,227,233,242,227,236,101,128, 36,231,
- 100, 2,204, 86,204, 96,233,229,242,229,243,233,115,128, 30,141,
- 239,244,225,227,227,229,238,116,128, 30,139,229,232,225,242,237,
- 229,238,233,225,110,128, 5,109,105,128, 3,190,237,239,238,239,
- 243,240,225,227,101,128,255, 88,240,225,242,229,110,128, 36,179,
- 243,245,240,229,242,233,239,114,128, 2,227,121,143, 0,121,204,
- 189,205,148,205,171,205,211,207,177,207,185,207,202,208, 10,208,
- 22,209, 19,209, 59,209, 71,209, 82,209,103,210, 76, 97, 11,204,
- 213,204,225,204,235,204,242,204,249,205, 3,205, 28,205, 39,205,
- 77,205, 90,205,136,225,228,239,243,241,245,225,242,101,128, 51,
- 78,226,229,238,231,225,236,105,128, 9,175,227,245,244,101,128,
- 0,253,228,229,246, 97,128, 9, 47,229,235,239,242,229,225,110,
- 128, 49, 82,231,117, 2,205, 10,205, 19,234,225,242,225,244,105,
- 128, 10,175,242,237,245,235,232,105,128, 10, 47,232,233,242,225,
- 231,225,238, 97,128, 48,132,107, 2,205, 45,205, 69,225,244,225,
- 235,225,238, 97,129, 48,228,205, 57,232,225,236,230,247,233,228,
- 244,104,128,255,148,239,242,229,225,110,128, 49, 81,237,225,235,
- 235,225,238,244,232,225,105,128, 14, 78,243,237,225,236,108, 2,
- 205,100,205,111,232,233,242,225,231,225,238, 97,128, 48,131,235,
- 225,244,225,235,225,238, 97,129, 48,227,205,124,232,225,236,230,
- 247,233,228,244,104,128,255,108,244,227,249,242,233,236,236,233,
- 99,128, 4, 99,227,233,242, 99, 2,205,157,205,162,236,101,128,
- 36,232,245,237,230,236,229,120,128, 1,119,100, 2,205,177,205,
- 187,233,229,242,229,243,233,115,128, 0,255,239,116, 2,205,194,
- 205,203,225,227,227,229,238,116,128, 30,143,226,229,236,239,119,
- 128, 30,245,101, 7,205,227,206,235,206,244,207, 6,207, 38,207,
- 114,207,165,104, 8,205,245,205,254,206, 32,206, 46,206,119,206,
- 135,206,194,206,212,225,242,225,226,233, 99,128, 6, 74,226,225,
- 242,242,229,101, 2,206, 9,206, 18,225,242,225,226,233, 99,128,
- 6,210,230,233,238,225,236,225,242,225,226,233, 99,128,251,175,
- 230,233,238,225,236,225,242,225,226,233, 99,128,254,242,232,225,
- 237,250,225,225,226,239,246,101, 4,206, 65,206, 74,206, 88,206,
- 104,225,242,225,226,233, 99,128, 6, 38,230,233,238,225,236,225,
- 242,225,226,233, 99,128,254,138,233,238,233,244,233,225,236,225,
- 242,225,226,233, 99,128,254,139,237,229,228,233,225,236,225,242,
- 225,226,233, 99,128,254,140,233,238,233,244,233,225,236,225,242,
- 225,226,233, 99,128,254,243,237,101, 2,206,142,206,155,228,233,
- 225,236,225,242,225,226,233, 99,128,254,244,229,237,105, 2,206,
- 163,206,178,238,233,244,233,225,236,225,242,225,226,233, 99,128,
- 252,221,243,239,236,225,244,229,228,225,242,225,226,233, 99,128,
- 252, 88,238,239,239,238,230,233,238,225,236,225,242,225,226,233,
- 99,128,252,148,244,232,242,229,229,228,239,244,243,226,229,236,
- 239,247,225,242,225,226,233, 99,128, 6,209,235,239,242,229,225,
- 110,128, 49, 86,110,129, 0,165,206,250,237,239,238,239,243,240,
- 225,227,101,128,255,229,111, 2,207, 12,207, 21,235,239,242,229,
- 225,110,128, 49, 85,242,233,238,232,233,229,245,232,235,239,242,
- 229,225,110,128, 49,134,114, 3,207, 46,207, 82,207, 94,225,232,
- 226,229,238,249,239,237,111, 2,207, 60,207, 69,232,229,226,242,
- 229,119,128, 5,170,236,229,230,244,232,229,226,242,229,119,128,
- 5,170,233,227,249,242,233,236,236,233, 99,128, 4, 75,245,228,
- 233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128,
- 4,249,243,233,229,245,238,103, 3,207,127,207,136,207,152,235,
- 239,242,229,225,110,128, 49,129,240,225,238,243,233,239,243,235,
- 239,242,229,225,110,128, 49,131,243,233,239,243,235,239,242,229,
- 225,110,128, 49,130,244,233,246,232,229,226,242,229,119,128, 5,
- 154,231,242,225,246,101,128, 30,243,232,239,239,107,129, 1,180,
- 207,194,225,226,239,246,101,128, 30,247,105, 5,207,214,207,225,
- 207,236,207,245,207,253,225,242,237,229,238,233,225,110,128, 5,
- 117,227,249,242,233,236,236,233, 99,128, 4, 87,235,239,242,229,
- 225,110,128, 49, 98,238,249,225,238,103,128, 38, 47,247,238,225,
- 242,237,229,238,233,225,110,128, 5,130,237,239,238,239,243,240,
- 225,227,101,128,255, 89,111, 7,208, 38,208,108,208,119,208,129,
- 208,167,208,213,208,222,100,131, 5,217,208, 48,208, 68,208, 77,
- 228,225,231,229,243,104,129,251, 57,208, 59,232,229,226,242,229,
- 119,128,251, 57,232,229,226,242,229,119,128, 5,217,249,239,100,
- 2,208, 85,208, 94,232,229,226,242,229,119,128, 5,242,240,225,
- 244,225,232,232,229,226,242,229,119,128,251, 31,232,233,242,225,
- 231,225,238, 97,128, 48,136,233,235,239,242,229,225,110,128, 49,
- 137,107, 2,208,135,208,159,225,244,225,235,225,238, 97,129, 48,
- 232,208,147,232,225,236,230,247,233,228,244,104,128,255,150,239,
- 242,229,225,110,128, 49, 91,243,237,225,236,108, 2,208,177,208,
- 188,232,233,242,225,231,225,238, 97,128, 48,135,235,225,244,225,
- 235,225,238, 97,129, 48,231,208,201,232,225,236,230,247,233,228,
- 244,104,128,255,110,244,231,242,229,229,107,128, 3,243,121, 2,
- 208,228,209, 9, 97, 2,208,234,208,244,229,235,239,242,229,225,
- 110,128, 49,136,107, 2,208,250,209, 2,239,242,229,225,110,128,
- 49,135,244,232,225,105,128, 14, 34,233,238,231,244,232,225,105,
- 128, 14, 13,112, 2,209, 25,209, 32,225,242,229,110,128, 36,180,
- 239,231,229,231,242,225,237,237,229,238,105,129, 3,122,209, 48,
- 231,242,229,229,235,227,237, 98,128, 3, 69,114,129, 1,166,209,
- 65,233,238,103,128, 30,153,243,245,240,229,242,233,239,114,128,
- 2,184,116, 2,209, 88,209, 95,233,236,228,101,128, 30,249,245,
- 242,238,229,100,128, 2,142,117, 5,209,115,209,126,209,136,209,
- 174,210, 50,232,233,242,225,231,225,238, 97,128, 48,134,233,235,
- 239,242,229,225,110,128, 49,140,107, 2,209,142,209,166,225,244,
- 225,235,225,238, 97,129, 48,230,209,154,232,225,236,230,247,233,
- 228,244,104,128,255,149,239,242,229,225,110,128, 49, 96,115, 3,
- 209,182,209,220,210, 5,226,233,103, 2,209,190,209,201,227,249,
- 242,233,236,236,233, 99,128, 4,107,233,239,244,233,230,233,229,
- 228,227,249,242,233,236,236,233, 99,128, 4,109,236,233,244,244,
- 236,101, 2,209,231,209,242,227,249,242,233,236,236,233, 99,128,
- 4,103,233,239,244,233,230,233,229,228,227,249,242,233,236,236,
- 233, 99,128, 4,105,237,225,236,108, 2,210, 14,210, 25,232,233,
- 242,225,231,225,238, 97,128, 48,133,235,225,244,225,235,225,238,
- 97,129, 48,229,210, 38,232,225,236,230,247,233,228,244,104,128,
- 255,109,249,101, 2,210, 57,210, 66,235,239,242,229,225,110,128,
- 49,139,239,235,239,242,229,225,110,128, 49,138,249, 97, 2,210,
- 83,210, 93,226,229,238,231,225,236,105,128, 9,223,228,229,246,
- 97,128, 9, 95,122,142, 0,122,210,132,211,140,211,151,211,194,
- 211,221,213, 0,213,108,213,150,213,162,213,174,213,202,213,210,
- 213,226,213,235, 97, 10,210,154,210,165,210,172,210,179,210,190,
- 211, 12,211, 42,211, 53,211, 89,211,101,225,242,237,229,238,233,
- 225,110,128, 5,102,227,245,244,101,128, 1,122,228,229,246, 97,
- 128, 9, 91,231,245,242,237,245,235,232,105,128, 10, 91,104, 4,
- 210,200,210,209,210,223,210,253,225,242,225,226,233, 99,128, 6,
- 56,230,233,238,225,236,225,242,225,226,233, 99,128,254,198,105,
- 2,210,229,210,244,238,233,244,233,225,236,225,242,225,226,233,
- 99,128,254,199,242,225,231,225,238, 97,128, 48, 86,237,229,228,
- 233,225,236,225,242,225,226,233, 99,128,254,200,233,110, 2,211,
- 19,211, 28,225,242,225,226,233, 99,128, 6, 50,230,233,238,225,
- 236,225,242,225,226,233, 99,128,254,176,235,225,244,225,235,225,
- 238, 97,128, 48,182,241,229,102, 2,211, 61,211, 75,231,225,228,
- 239,236,232,229,226,242,229,119,128, 5,149,241,225,244,225,238,
- 232,229,226,242,229,119,128, 5,148,242,241,225,232,229,226,242,
- 229,119,128, 5,152,249,233,110,130, 5,214,211,111,211,131,228,
- 225,231,229,243,104,129,251, 54,211,122,232,229,226,242,229,119,
- 128,251, 54,232,229,226,242,229,119,128, 5,214,226,239,240,239,
- 237,239,230,111,128, 49, 23, 99, 3,211,159,211,166,211,188,225,
- 242,239,110,128, 1,126,233,242, 99, 2,211,174,211,179,236,101,
- 128, 36,233,245,237,230,236,229,120,128, 30,145,245,242,108,128,
- 2,145,228,239,116,130, 1,124,211,204,211,213,225,227,227,229,
- 238,116,128, 1,124,226,229,236,239,119,128, 30,147,101, 6,211,
- 235,211,246,212, 33,212, 44,212, 55,212,251,227,249,242,233,236,
- 236,233, 99,128, 4, 55,100, 2,211,252,212, 15,229,243,227,229,
- 238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,153,233,
- 229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128, 4,
- 223,232,233,242,225,231,225,238, 97,128, 48, 92,235,225,244,225,
- 235,225,238, 97,128, 48,188,242,111,140, 0, 48,212, 84,212, 93,
- 212,103,212,110,212,135,212,148,212,159,212,171,212,182,212,192,
- 212,203,212,210,225,242,225,226,233, 99,128, 6, 96,226,229,238,
- 231,225,236,105,128, 9,230,228,229,246, 97,128, 9,102,231,117,
- 2,212,117,212,126,234,225,242,225,244,105,128, 10,230,242,237,
- 245,235,232,105,128, 10,102,232,225,227,235,225,242,225,226,233,
- 99,128, 6, 96,233,238,230,229,242,233,239,114,128, 32,128,237,
- 239,238,239,243,240,225,227,101,128,255, 16,239,236,228,243,244,
- 249,236,101,128,247, 48,240,229,242,243,233,225,110,128, 6,240,
- 243,245,240,229,242,233,239,114,128, 32,112,244,232,225,105,128,
- 14, 80,247,233,228,244,104, 3,212,222,212,231,212,243,234,239,
- 233,238,229,114,128,254,255,238,239,238,234,239,233,238,229,114,
- 128, 32, 12,243,240,225,227,101,128, 32, 11,244, 97,128, 3,182,
- 104, 2,213, 6,213, 17,226,239,240,239,237,239,230,111,128, 49,
- 19,101, 4,213, 27,213, 38,213, 54,213, 65,225,242,237,229,238,
- 233,225,110,128, 5,106,226,242,229,246,229,227,249,242,233,236,
- 236,233, 99,128, 4,194,227,249,242,233,236,236,233, 99,128, 4,
- 54,100, 2,213, 71,213, 90,229,243,227,229,238,228,229,242,227,
- 249,242,233,236,236,233, 99,128, 4,151,233,229,242,229,243,233,
- 243,227,249,242,233,236,236,233, 99,128, 4,221,105, 3,213,116,
- 213,127,213,138,232,233,242,225,231,225,238, 97,128, 48, 88,235,
- 225,244,225,235,225,238, 97,128, 48,184,238,239,242,232,229,226,
- 242,229,119,128, 5,174,236,233,238,229,226,229,236,239,119,128,
- 30,149,237,239,238,239,243,240,225,227,101,128,255, 90,111, 2,
- 213,180,213,191,232,233,242,225,231,225,238, 97,128, 48, 94,235,
- 225,244,225,235,225,238, 97,128, 48,190,240,225,242,229,110,128,
- 36,181,242,229,244,242,239,230,236,229,248,232,239,239,107,128,
- 2,144,243,244,242,239,235,101,128, 1,182,117, 2,213,241,213,
- 252,232,233,242,225,231,225,238, 97,128, 48, 90,235,225,244,225,
- 235,225,238, 97,128, 48,186
+ 4,221,105, 3,218, 42,218, 53,218, 64,232,233,242,225,231,225,
+ 238, 97,128, 48, 88,235,225,244,225,235,225,238, 97,128, 48,184,
+ 238,239,242,232,229,226,242,229,119,128, 5,174,236,233,238,229,
+ 226,229,236,239,119,128, 30,149,237,239,238,239,243,240,225,227,
+ 101,128,255, 90,111, 2,218,106,218,117,232,233,242,225,231,225,
+ 238, 97,128, 48, 94,235,225,244,225,235,225,238, 97,128, 48,190,
+ 240,225,242,229,110,128, 36,181,242,229,244,242,239,230,236,229,
+ 248,232,239,239,107,128, 2,144,243,244,242,239,235,101,128, 1,
+ 182,117, 2,218,167,218,178,232,233,242,225,231,225,238, 97,128,
+ 48, 90,235,225,244,225,235,225,238, 97,128, 48,186
};
diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c
index d8a89f2..28b1b58 100644
--- a/src/raster/ftrend1.c
+++ b/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer interface (body). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2005, 2006 by */
+/* Copyright 1996-2003, 2005, 2006, 2011 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -176,6 +176,13 @@
width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
+
+ if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX )
+ {
+ error = Raster_Err_Invalid_Argument;
+ goto Exit;
+ }
+
bitmap = &slot->bitmap;
memory = render->root.memory;
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 40de269..895e748 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -872,6 +872,7 @@
const FT_Vector* to )
{
TPos dx, dy;
+ TPos min, max, y;
int top, level;
int* levels;
FT_Vector* arc;
@@ -884,45 +885,45 @@
arc[1].y = UPSCALE( control->y );
arc[2].x = ras.x;
arc[2].y = ras.y;
+ top = 0;
dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x );
dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y );
if ( dx < dy )
dx = dy;
+ if ( dx < ONE_PIXEL / 4 )
+ goto Draw;
+
+ /* short-cut the arc that crosses the current band */
+ min = max = arc[0].y;
+
+ y = arc[1].y;
+ if ( y < min ) min = y;
+ if ( y > max ) max = y;
+
+ y = arc[2].y;
+ if ( y < min ) min = y;
+ if ( y > max ) max = y;
+
+ if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
+ goto Draw;
+
level = 0;
- while ( dx > ONE_PIXEL / 6 )
+ do
{
dx >>= 2;
level++;
- }
+ } while ( dx > ONE_PIXEL / 4 );
levels = ras.lev_stack;
levels[0] = level;
- top = 0;
do
{
level = levels[top];
- if ( level > 1 )
+ if ( level > 0 )
{
- /* check that the arc crosses the current band */
- TPos min, max, y;
-
-
- min = max = arc[0].y;
-
- y = arc[1].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- y = arc[2].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
- goto Draw;
-
gray_split_conic( arc );
arc += 2;
top++;
@@ -973,6 +974,7 @@
const FT_Vector* to )
{
FT_Vector* arc;
+ TPos min, max, y;
arc = ras.bez_stack;
@@ -985,35 +987,32 @@
arc[3].x = ras.x;
arc[3].y = ras.y;
+ /* Short-cut the arc that crosses the current band. */
+ min = max = arc[0].y;
+
+ y = arc[1].y;
+ if ( y < min )
+ min = y;
+ if ( y > max )
+ max = y;
+
+ y = arc[2].y;
+ if ( y < min )
+ min = y;
+ if ( y > max )
+ max = y;
+
+ y = arc[3].y;
+ if ( y < min )
+ min = y;
+ if ( y > max )
+ max = y;
+
+ if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
+ goto Draw;
+
for (;;)
{
- /* Check that the arc crosses the current band. */
- TPos min, max, y;
-
-
- min = max = arc[0].y;
-
- y = arc[1].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- y = arc[2].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- y = arc[3].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
- goto Draw;
-
/* Decide whether to split or draw. See `Rapid Termination */
/* Evaluation for Recursive Subdivision of Bezier Curves' by Thomas */
/* F. Hain, at */
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index 37bbe6d..69b702f 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
/* */
/* TrueType GX Font Variation loader */
/* */
-/* Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010 by */
+/* Copyright 2004-2011 by */
/* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -1474,6 +1474,9 @@
{
for ( j = 0; j < point_count; ++j )
{
+ if ( localpoints[j] >= n_points )
+ continue;
+
delta_xy[localpoints[j]].x += FT_MulFix( deltas_x[j], apply );
delta_xy[localpoints[j]].y += FT_MulFix( deltas_y[j], apply );
}